include/linux/sched.h | 5 + kernel/sched/core.c | 3 + kernel/sched/fair.c | 458 ++++++++++++++++++++++++------------------ kernel/sched/pelt.h | 4 +- kernel/sched/sched.h | 7 +- 5 files changed, 280 insertions(+), 197 deletions(-)
v4:
- Add cfs_bandwidth_used() in task_is_throttled() and remove unlikely
for task_is_throttled(), suggested by Valetin Schneider;
- Add a warn for non empty throttle_node in enqueue_throttled_task(),
suggested by Valetin Schneider;
- Improve comments in enqueue_throttled_task() by Valetin Schneider;
- Clear throttled for to-be-unthrottled tasks in tg_unthrottle_up();
- Change throttled and pelt_clock_throttled fields in cfs_rq from int to
bool, reported by LKP;
- Improve changelog for patch4 by Valetin Schneider.
Thanks a lot for all the reviews and tests, I hope I didn't miss any of
them but if I do, please let me know. I've also run Jan's rt reproducer
and songtang's stress test and didn't notice any problem.
Apply on top of sched/core, head commit 1b5f1454091e("sched/idle: Remove
play_idle()").
v3:
- Keep throttled cfs_rq's PELT clock run as long as it still has entity
queued, suggested by Benjamin Segall; I've folded this change into
patch3;
- Rebased on top of tip/sched/core, commit 2885daf47081
("lib/smp_processor_id: Make migration check unconditional of SMP").
Hi Prateek,
I've kept your tested-by tag(Thanks!) for v2 since I believe this pelt
clock change should not affect things much, but let me know if you don't
think that is appropriate.
Tests I've done:
- Jan's rt deadlock reproducer[1]. Without this series, I saw rcu-stalls
within 2 minutes and with this series, I do not see rcu-stalls after
10 minutes.
- A stress test that creates a lot of pressure on fork/exit path and
cgroup_threadgroup_rwsem. Without this series, the test will cause
task hung in about 5 minutes and with this series, no problem found
after several hours. Songtang wrote this test script and I've used it
to verify the patches, thanks Songtang.
[1]: https://lore.kernel.org/all/7483d3ae-5846-4067-b9f7-390a614ba408@siemens.com/
Below is previous changelogs:
v2:
- Re-org the patchset to use a single patch to implement throttle
related changes, suggested by Chengming;
- Use check_cfs_rq_runtime()'s return value in pick_task_fair() to
decide if throttle task work is needed instead of checking
throttled_hierarchy(), suggested by Peter;
- Simplify throttle_count check in tg_throtthe_down() and
tg_unthrottle_up(), suggested by Peter;
- Add enqueue_throttled_task() to speed up enqueuing a throttled task to
a throttled cfs_rq, suggested by Peter;
- Address the missing of detach_task_cfs_rq() for throttled tasks that
get migrated to a new rq, pointed out by Chengming;
- Remove cond_resched_tasks_rcu_qs() in throttle_cfs_rq_work() as
cond_resched*() is going away, pointed out by Peter.
I hope I didn't miss any comments and suggestions for v1 and if I do,
please kindly let me know, thanks!
Base: tip/sched/core commit dabe1be4e84c("sched/smp: Use the SMP version
of double_rq_clock_clear_update()")
cover letter of v1:
This is a continuous work based on Valentin Schneider's posting here:
Subject: [RFC PATCH v3 00/10] sched/fair: Defer CFS throttle to user entry
https://lore.kernel.org/lkml/20240711130004.2157737-1-vschneid@redhat.com/
Valentin has described the problem very well in the above link and I
quote:
"
CFS tasks can end up throttled while holding locks that other,
non-throttled tasks are blocking on.
For !PREEMPT_RT, this can be a source of latency due to the throttling
causing a resource acquisition denial.
For PREEMPT_RT, this is worse and can lead to a deadlock:
o A CFS task p0 gets throttled while holding read_lock(&lock)
o A task p1 blocks on write_lock(&lock), making further readers enter
the slowpath
o A ktimers or ksoftirqd task blocks on read_lock(&lock)
If the cfs_bandwidth.period_timer to replenish p0's runtime is enqueued
on the same CPU as one where ktimers/ksoftirqd is blocked on
read_lock(&lock), this creates a circular dependency.
This has been observed to happen with:
o fs/eventpoll.c::ep->lock
o net/netlink/af_netlink.c::nl_table_lock (after hand-fixing the above)
but can trigger with any rwlock that can be acquired in both process and
softirq contexts.
The linux-rt tree has had
1ea50f9636f0 ("softirq: Use a dedicated thread for timer wakeups.")
which helped this scenario for non-rwlock locks by ensuring the throttled
task would get PI'd to FIFO1 (ktimers' default priority). Unfortunately,
rwlocks cannot sanely do PI as they allow multiple readers.
"
Jan Kiszka has posted an reproducer regarding this PREEMPT_RT problem :
https://lore.kernel.org/r/7483d3ae-5846-4067-b9f7-390a614ba408@siemens.com/
and K Prateek Nayak has an detailed analysis of how deadlock happened:
https://lore.kernel.org/r/e65a32af-271b-4de6-937a-1a1049bbf511@amd.com/
To fix this issue for PREEMPT_RT and improve latency situation for
!PREEMPT_RT, change the throttle model to task based, i.e. when a cfs_rq
is throttled, mark its throttled status but do not remove it from cpu's
rq. Instead, for tasks that belong to this cfs_rq, when they get picked,
add a task work to them so that when they return to user, they can be
dequeued. In this way, tasks throttled will not hold any kernel resources.
When cfs_rq gets unthrottled, enqueue back those throttled tasks.
There are consequences because of this new throttle model, e.g. for a
cfs_rq that has 3 tasks attached, when 2 tasks are throttled on their
return2user path, one task still running in kernel mode, this cfs_rq is
in a partial throttled state:
- Should its pelt clock be frozen?
- Should this state be accounted into throttled_time?
For pelt clock, I chose to keep the current behavior to freeze it on
cfs_rq's throttle time. The assumption is that tasks running in kernel
mode should not last too long, freezing the cfs_rq's pelt clock can keep
its load and its corresponding sched_entity's weight. Hopefully, this can
result in a stable situation for the remaining running tasks to quickly
finish their jobs in kernel mode.
For throttle time accounting, according to RFC v2's feedback, rework
throttle time accounting for a cfs_rq as follows:
- start accounting when the first task gets throttled in its
hierarchy;
- stop accounting on unthrottle.
There is also the concern of increased duration of (un)throttle operations
in RFC v1. I've done some tests and with a 2000 cgroups/20K runnable tasks
setup on a 2sockets/384cpus AMD server, the longest duration of
distribute_cfs_runtime() is in the 2ms-4ms range. For details, please see:
https://lore.kernel.org/lkml/20250324085822.GA732629@bytedance/
For throttle path, with Chengming's suggestion to move "task work setup"
from throttle time to pick time, it's not an issue anymore.
Aaron Lu (2):
sched/fair: Task based throttle time accounting
sched/fair: Get rid of throttled_lb_pair()
Valentin Schneider (3):
sched/fair: Add related data structure for task based throttle
sched/fair: Implement throttle task work and related helpers
sched/fair: Switch to task based throttle model
include/linux/sched.h | 5 +
kernel/sched/core.c | 3 +
kernel/sched/fair.c | 458 ++++++++++++++++++++++++------------------
kernel/sched/pelt.h | 4 +-
kernel/sched/sched.h | 7 +-
5 files changed, 280 insertions(+), 197 deletions(-)
base-commit: 1b5f1454091e9e9fb5c944b3161acf4ec0894d0d
--
2.39.5
Thanks! I'll queue these in queue/sched/core and if nothing goes pop, I'll move them along to tip.
On Fri, 2025-08-29 at 16:11 +0800, Aaron Lu wrote:
> v4:
> - Add cfs_bandwidth_used() in task_is_throttled() and remove unlikely
> for task_is_throttled(), suggested by Valetin Schneider;
> - Add a warn for non empty throttle_node in enqueue_throttled_task(),
> suggested by Valetin Schneider;
> - Improve comments in enqueue_throttled_task() by Valetin Schneider;
> - Clear throttled for to-be-unthrottled tasks in tg_unthrottle_up();
> - Change throttled and pelt_clock_throttled fields in cfs_rq from int to
> bool, reported by LKP;
> - Improve changelog for patch4 by Valetin Schneider.
>
> Thanks a lot for all the reviews and tests, I hope I didn't miss any of
> them but if I do, please let me know. I've also run Jan's rt reproducer
> and songtang's stress test and didn't notice any problem.
>
> Apply on top of sched/core, head commit 1b5f1454091e("sched/idle: Remove
> play_idle()").
>
Hi all,
as this all has arrived in 6.18 now - thanks for all the work - I would
like to start a discussion about backporting this series - and some more
related work, see below - to older stable releases. Especially
PREEMPT_RT enabled systems are of interest as this series fixes a
serious system freeze.
Has someone already looked into the backporting topic?
I can remember from the previous discussion that everything below 6.12
is hard, as scheduler internals have changed (EEVDF, vlag). Still, 6.12
would be valuable.
I have the following commits on my radar:
This series:
2cd571245b43 ("sched/fair: Add related data structure for task based throttle")
7fc2d1439247 ("sched/fair: Implement throttle task work and related helpers")
e1fad12dcb66 ("sched/fair: Switch to task based throttle model")
eb962f251fbb ("sched/fair: Task based throttle time accounting")
5b726e9bf954 ("sched/fair: Get rid of throttled_lb_pair()")
Follow up series:
https://lore.kernel.org/all/20250910095044.278-1-ziqianlu@bytedance.com/
fe8d238e646e ("sched/fair: Propagate load for throttled cfs_rq")
fcd394866e3d ("sched/fair: update_cfs_group() for throttled cfs_rqs")
253b3f587241 ("sched/fair: Do not special case tasks in throttled hierarchy")
0d4eaf8caf8c ("sched/fair: Do not balance task to a throttled cfs_rq")
Another follow up:
https://lore.kernel.org/all/20250929074645.416-1-ziqianlu@bytedance.com/
956dfda6a708 ("sched/fair: Prevent cfs_rq from being unthrottled with zero runtime_remaining")
That should hopefully be enough, right?
Any concerns, additional thoughts, missing peaces? Please let me know!
Best regards,
Florian
--
Siemens AG, Foundational Technologies
Linux Expert Center
On Tue, Dec 02, 2025 at 08:59:15AM +0000, Bezdeka, Florian wrote:
> On Fri, 2025-08-29 at 16:11 +0800, Aaron Lu wrote:
> > v4:
> > - Add cfs_bandwidth_used() in task_is_throttled() and remove unlikely
> > for task_is_throttled(), suggested by Valetin Schneider;
> > - Add a warn for non empty throttle_node in enqueue_throttled_task(),
> > suggested by Valetin Schneider;
> > - Improve comments in enqueue_throttled_task() by Valetin Schneider;
> > - Clear throttled for to-be-unthrottled tasks in tg_unthrottle_up();
> > - Change throttled and pelt_clock_throttled fields in cfs_rq from int to
> > bool, reported by LKP;
> > - Improve changelog for patch4 by Valetin Schneider.
> >
> > Thanks a lot for all the reviews and tests, I hope I didn't miss any of
> > them but if I do, please let me know. I've also run Jan's rt reproducer
> > and songtang's stress test and didn't notice any problem.
> >
> > Apply on top of sched/core, head commit 1b5f1454091e("sched/idle: Remove
> > play_idle()").
> >
>
> Hi all,
>
> as this all has arrived in 6.18 now - thanks for all the work - I would
> like to start a discussion about backporting this series - and some more
> related work, see below - to older stable releases. Especially
> PREEMPT_RT enabled systems are of interest as this series fixes a
> serious system freeze.
>
> Has someone already looked into the backporting topic?
>
> I can remember from the previous discussion that everything below 6.12
> is hard, as scheduler internals have changed (EEVDF, vlag). Still, 6.12
> would be valuable.
>
> I have the following commits on my radar:
>
> This series:
>
> 2cd571245b43 ("sched/fair: Add related data structure for task based throttle")
> 7fc2d1439247 ("sched/fair: Implement throttle task work and related helpers")
> e1fad12dcb66 ("sched/fair: Switch to task based throttle model")
> eb962f251fbb ("sched/fair: Task based throttle time accounting")
> 5b726e9bf954 ("sched/fair: Get rid of throttled_lb_pair()")
>
> Follow up series:
> https://lore.kernel.org/all/20250910095044.278-1-ziqianlu@bytedance.com/
>
> fe8d238e646e ("sched/fair: Propagate load for throttled cfs_rq")
> fcd394866e3d ("sched/fair: update_cfs_group() for throttled cfs_rqs")
> 253b3f587241 ("sched/fair: Do not special case tasks in throttled hierarchy")
> 0d4eaf8caf8c ("sched/fair: Do not balance task to a throttled cfs_rq")
>
There is one more fix before the next fix:
https://lore.kernel.org/all/20251021053522.37583-1-kprateek.nayak@amd.com/
0e4a169d1a2b ("sched/fair: Start a cfs_rq on throttled hierarchy with
PELT clock throttled")
> Another follow up:
> https://lore.kernel.org/all/20250929074645.416-1-ziqianlu@bytedance.com/
>
> 956dfda6a708 ("sched/fair: Prevent cfs_rq from being unthrottled with zero runtime_remaining")
>
>
> That should hopefully be enough, right?
>
I think so.
> Any concerns, additional thoughts, missing peaces? Please let me know!
1 if the base does not have Josh's async unthrottle:
8ad075c2eb1f ("sched: Async unthrottling for cfs bandwidth"),
make sure to backport that too or the distribute runtime timer handler
can be time consuming.
2 if the base uses cfs, in dequeue_throttled_task(), the task's vruntime
has to be adjusted like below:
static void dequeue_throttled_task(struct task_struct *p, int flags)
{
WARN_ON_ONCE(p->se.on_rq);
list_del_init(&p->throttle_node);
/* task blocked after throttled */
if (flags & DEQUEUE_SLEEP)
p->throttled = false;
else {
struct sched_entity *se = &p->se;
struct cfs_rq *cfs_rq;
/*
* We are leaving this cfs_rq but our vruntime is not
* normalized yet as that is only done for tasks dequeued
* with !DEQUEUE_SLEEP in dequeue_entity(), so we have to:
* Fix up our vruntime so that the current sleep doesn't
* cause 'unlimited' sleep bonus.
*/
cfs_rq = cfs_rq_of(se);
place_entity(cfs_rq, se, 0);
se->vruntime -= cfs_rq->min_vruntime;
}
}
3 Also in this dequeue_throttled_task() function, if the base doesn't
have commit e1f078f50478("sched/fair: Combine detach into dequeue
when migrating task"), then it's not necessary to do the following
because migrate_task_rq_fair() have already dealed with that:
/*
* task is migrating off its old cfs_rq, detach
* the task's load from its old cfs_rq.
*/
if (task_on_rq_migrating(p))
detach_task_cfs_rq(p);
That's what I can think of right now.
I did a backport for 5.15 based kernel, I can probably post it somewhere
if it is useful, just let me know.
On Tue Dec 2, 2025 at 10:43 AM CET, Aaron Lu wrote:
[snip]
>> Hi all,
>>
>> as this all has arrived in 6.18 now - thanks for all the work - I would
>> like to start a discussion about backporting this series - and some more
>> related work, see below - to older stable releases. Especially
>> PREEMPT_RT enabled systems are of interest as this series fixes a
>> serious system freeze.
>>
>> Has someone already looked into the backporting topic?
>>
>> I can remember from the previous discussion that everything below 6.12
>> is hard, as scheduler internals have changed (EEVDF, vlag). Still, 6.12
>> would be valuable.
>>
>> I have the following commits on my radar:
>>
>> This series:
>>
>> 2cd571245b43 ("sched/fair: Add related data structure for task based throttle")
>> 7fc2d1439247 ("sched/fair: Implement throttle task work and related helpers")
>> e1fad12dcb66 ("sched/fair: Switch to task based throttle model")
>> eb962f251fbb ("sched/fair: Task based throttle time accounting")
>> 5b726e9bf954 ("sched/fair: Get rid of throttled_lb_pair()")
>>
>> Follow up series:
>> https://lore.kernel.org/all/20250910095044.278-1-ziqianlu@bytedance.com/
>>
>> fe8d238e646e ("sched/fair: Propagate load for throttled cfs_rq")
>> fcd394866e3d ("sched/fair: update_cfs_group() for throttled cfs_rqs")
>> 253b3f587241 ("sched/fair: Do not special case tasks in throttled hierarchy")
>> 0d4eaf8caf8c ("sched/fair: Do not balance task to a throttled cfs_rq")
>>
>
> There is one more fix before the next fix:
> https://lore.kernel.org/all/20251021053522.37583-1-kprateek.nayak@amd.com/
>
> 0e4a169d1a2b ("sched/fair: Start a cfs_rq on throttled hierarchy with
> PELT clock throttled")
>
Thanks for the heads-up! Highly appreciated.
>> Another follow up:
>> https://lore.kernel.org/all/20250929074645.416-1-ziqianlu@bytedance.com/
>>
>> 956dfda6a708 ("sched/fair: Prevent cfs_rq from being unthrottled with zero runtime_remaining")
>>
>>
>> That should hopefully be enough, right?
>>
>
> I think so.
>
>> Any concerns, additional thoughts, missing pieces? Please let me know!
>
> 1 if the base does not have Josh's async unthrottle:
> 8ad075c2eb1f ("sched: Async unthrottling for cfs bandwidth"),
> make sure to backport that too or the distribute runtime timer handler
> can be time consuming.
Thanks, noted.
>
> 2 if the base uses cfs, in dequeue_throttled_task(), the task's vruntime
> has to be adjusted like below:
>
> static void dequeue_throttled_task(struct task_struct *p, int flags)
> {
> WARN_ON_ONCE(p->se.on_rq);
> list_del_init(&p->throttle_node);
>
> /* task blocked after throttled */
> if (flags & DEQUEUE_SLEEP)
> p->throttled = false;
> else {
> struct sched_entity *se = &p->se;
> struct cfs_rq *cfs_rq;
>
> /*
> * We are leaving this cfs_rq but our vruntime is not
> * normalized yet as that is only done for tasks dequeued
> * with !DEQUEUE_SLEEP in dequeue_entity(), so we have to:
> * Fix up our vruntime so that the current sleep doesn't
> * cause 'unlimited' sleep bonus.
> */
> cfs_rq = cfs_rq_of(se);
> place_entity(cfs_rq, se, 0);
> se->vruntime -= cfs_rq->min_vruntime;
> }
> }
>
> 3 Also in this dequeue_throttled_task() function, if the base doesn't
> have commit e1f078f50478("sched/fair: Combine detach into dequeue
> when migrating task"), then it's not necessary to do the following
> because migrate_task_rq_fair() have already dealed with that:
> /*
> * task is migrating off its old cfs_rq, detach
> * the task's load from its old cfs_rq.
> */
> if (task_on_rq_migrating(p))
> detach_task_cfs_rq(p);
>
> That's what I can think of right now.
>
> I did a backport for 5.15 based kernel, I can probably post it somewhere
> if it is useful, just let me know.
So you backported the entire logic back to older releases already. Wow.
Would 6.1 be possible as well, or any other blockers ahead? Asking
because 6.1 is the baseline for the affected systems.
I think 6.12 should be doable with the patches mentioned above (your
comments included). If your backport would help us to come down to 6.1
that would be even better.
On Tue, Dec 02, 2025 at 11:09:48AM +0100, Florian Bezdeka wrote:
> So you backported the entire logic back to older releases already. Wow.
> Would 6.1 be possible as well, or any other blockers ahead? Asking
> because 6.1 is the baseline for the affected systems.
>
Yes I think 6.1 is possible.
> I think 6.12 should be doable with the patches mentioned above (your
> comments included). If your backport would help us to come down to 6.1
> that would be even better.
I attached the patches for 5.15 tree for your reference, hope it's useful.
Best wishes,
Aaron�
�.i backport_5.15.tar �[{s�F���§��TeI�!�P�.+zغؒΒ�lm���D�圿�u� $H��%�J]X�@3==���_��g��<�K�Ss���Q�c�&^�m����<�&�� l��Ju��g��c�Y�TE�rB�}��Y�T��=��O��W��1GE0��(bq>��!+�D�7ɳj>��|TN�,h���_���t��`�0��_�
��_5,пf�T}Fԯ!����?ɳqB�6�@��`�\S}�
L�n�&�-G���YJ.��P����G4Ц�d��ˡ���<o��ҿ+y�Ҁ��l�B9s�'x8$T�4U3������*���3�}����,���!�0��0�ɺe��l�,l�Զ�(0�,.I�lDz���a>W}�p���z&���(e��l�(�rJJV\�@��NfYȓ�xT�8%�5�4�9˃�a9WX�d��5#A��qZq��W)�#��E3����i]�<�bLNĜ�B��,���7W$H����I��e6��r����ԑ-e��픧r䢌��L�
��Ұ�~�x�C�e��>����%fۡ%���ʂ����Ն��iL��춤�W�dT�dtOr�,1��e)�|5�d�e!)��
�w�O�R2��"�#��1>�v'���dZ�4V��Gb>W��GU���<��}�͂�ʱi�������{�`�+O�
d�ƞ�P�XfUR��A�0�"��$�(Vl)Z&� �c�������ӟ�,F_�����n�/M�Jv�ÑhV�i������<���y^
\��Ġ&�=jۭܻ�`c!aB�����,R�A@]�)�N��nHx,��ݑ�GK���D�B1�*������,<�����V�I
;�@��dL�˂�� ���$��u36�i�3�A4:��u� ���+�(�w�Y#�:\p��O�� ����)�*��s���e�F99�Y>y�(�Y%qP�ʎ���r���L���h4RH)�?D'�!%Q��2e�W�D�/z�����B� ,�l����uW�Ӑ$�a���ۮ���xl�>�T�7Y@]"�Y �ݔ��`���˗d�k��d ��[�
�q@n�8�\#@� � ��#��+dL���������������Å�z;�5���f���M��#rx~vr�ʻ|{�)8wA�I�y�g��M�ыr2z!��ň#�hc����@�����v�w�gs6!�p����J��=����e�����������i3j��͙���A`i��9,p#�����t[�gl��lG���o��q'�t�[�ũ�N}����FN2���v��=����o^s�k����)̊0�1e��e�0_�~+�/�:�[�WDI�N�� �c7�^x;�K�H�e>F6�\���b �?D��Z�iFP^�?� �I6��K���,�RO#��xÍ�3�)`5.!�a4�)f��@|�� �|1����0���� � `hYif"���+�(s넳��s���%k�R��� ��݁t )�OC�.E��4?�`p�Wzo��I��5Y��p7��ba !����_=���71�!�B.7�!O?M31h~�?�� d��!���i)�f���gT6Sꀪ
��da���L4WSZ,n|<^�%��<��A�0WJ[�C��t�Mz�kr��Vw�����&y���C����[��
%��!�V���,i���f{x�����,t��N|V
���r@�
*���)YzG���P�f���S:Dו1m�ޯB#�kX��5�����tĒ�7�{���4(u\gav@���7}=�ݶBn�sq�N /�e�E=h�L|7�ݝ������`go��]ra�� v ^eɐYX.i�\_Fr��R(�CIV�{Orంa��xX�D� {1"�)�CR���*<��=:����0���*F1IDD��ϲ`a?0���#�D�� .h�O8$*Ha�
��g�!6A<��2�(�n��# gr y��t�1w��cJs�֘�f��[��4kH�~qtpu�]��M�a��A����ed_&̇�����/�d_����T���x�f|T@@J/����Fe�� �{Q���6
u��������G�?f�4r-J�H��"'R9��(
#0���mJ-�!�w�r�<�L���)y�;c^�y��Y ^M�!�t�_U�HP#���?w�$��
$(m���(�\�6���<0��Q)S�f����� '�Ԡ�
�Pum�ƃ���S���K���4��Q��eJr+�W^�/�2-�y����\ϒ�L:1���Ř��iT3��O?�����K��&�+�D��c�Q`CD�+���~'!fa3�=���Z�ނx#`�(�˾�sv�� �ƹo����*4:��u�l¤�(�M�g�� B�Y�X���,J�5�.��t�o ̦��1�_���:c�~�(� 9 ��a1~� �P�#������8��L�� G��"�_tݠ����FU� ������o/`s���`\�=<�ĺ�H�!u��ҫ;cJ����z���� =b��\�q��r^kF&5��,��<�ܑ�[܁�DQU ��w|p�G����<
=�
b�d����*n7q����p�{U�e������1���qp˞W`au�7�5+>��g�y"~�����M�^�{�T-��H�?RM�|4�(
]CUj�>�Vwq�����a��* �AOo��i�B4���%ضֱ��h�]�wݭ�vHM�v�G6g�m�e���6�k�4:�v�MW75�.�u�e։���ϼ 1 �>$֒����"z�w��AF�
Oa��j�9xw�]��`���~�ݰ��*�z�^���>�t<�K�J�\dϞ��h�%���^�]�2*�"�p��^;�<"��YQ� ���}�v`��7f
h��n����'\�/�B��p�?�X���wg�o��Bye&�}��r�u�=f��F�Z|�"��f��z_T������������DEO�V�42
#b�Y�x�Lͷ��~��O�V����lP_�pZ��/�>�c!��K�����RD ���h>d��!7 Lnŏּ*巨������}�7�ץ��c�����n�ٹ��'������3x����B���βS��bV��t����E���"�*=�_Do(�WSV�`���44�XcF�RO��]��;��s�^[x�2��d��o%�R�2�&���4�/�gW�ۃ}��N�'쉭��-��ڡ}ND �����
�e��Ы��^�R�ӻ/�������|́���X\�,z�&=��7MX���5��Y�+BX=����$!�������{�t-SJ�2f�] T���M��|��u�~�+Y /��H�7y��:�4�A� ��Fv���
L��8��� |1C_����٨�����A��ݿQ�J6�b�r.�`-H�>����z����_������0
}�������o�E�(2L��: J;�܇�??�k��&��\����KX���lNrXӁ�A5��XX��֖c ��Q�]lO������
������LY��� 4m
�
��j�e��
��njtnY��[��.m��w�q7��.w��*�YoC<ϋ��@.pہ_�3vǮ����=N��K6;����|n��GO���-�
���oIL��Â�xV�x@��븺����1m��h��P��cG�Fڨ[b��[�)����u�=N��
���^C0?1�{wŀ`�l>� >����Z�f�%c����Ņ�bB7�~��EA�7BǷ
����؎l��d,
�U8�ME��g��؎�-�K�Y��`�� _�;�]�>>Zfi˪��ή̒�� �Z�qr�}pv�����u+G��ٛ�[���d�Ļl�J�ž�l�h���`v w��?ߔ=��U���9x{�]�}Z!� ���� �P:��ں8��9O-�#]��]���'EK�u�J�g�/�]O�'��4������;oUݐ�����������A�bFl
�(S���E�|yupu����d�è�[������
���Y�>c��
��ۮ���[E��� �1Ֆ����P����j�d������
\!�.�"��H���}���X�8�!��'��h"��;��L ��]<�X�az6`U�$�*?ܰ&������q��剀n.Ƹ��l�����������{}|p$�����7��\&�<*��Y��]̜V��2���$<4-G��i��f�j�&�uC�3��h̚;�����8^��),��e�xS6�ݒx�g����\����Ѫ6Ë��o���/�ggv!��05ݲ�����cM�D�AM3���Wcg�#��5��ح�Y���n�oĭMa�e�ޜl,
KY�U�m���o4Y_�E����4�up�pu�bE�y��/L6�پ������-�Y(���tR.����S2�9(_����q� p��/"�6H=v
���o@ٸ����|}zr����+w߃�@��Q����U������y���S�P�ԟ���Ӯ����~�O|=*��<���,x��N���P����v������|����p&��I
��l_w[5TY�IMCuT]�UK{�������v}�WAZ��}��ζ��QjlT$D��bB�n��I��Uu�2�0�7WU]�r�7��0C7tV��|/$ā<)�A�RHy�5G3�2e���D�G��B2�̀����4�F���A��Zg���^��* W�}@���!V @�Өp7�IT%���<)
�(��h�
����x!8�&S��E�y(^����JXRd��M�x��;O �� �<�r�\ʇ����9�zX<c�TҤ�@&$b����kU��,��i�v�h�������y�F)Lx��Z�"nQ�r|-���RO�6@�-��5�"�n�j���G�\�&#��V�n��Wm��;�r�EޏeƖ�0Wh�__����WZ$� ��*t{�ؗx�L�j��8�$�~iU'!�Ey�0m��qZ���ƣH��c|�[�>��>����,��� �eS�F˸-g�Z���ȩ Q�w2Gqچ����O[]0Cl��qC��&%ި�@�}����v~��|�>�9������m#i�~�9g"Z$��l�Ʊ��'�3�2y�;7�KC�"�������[K7��Hj��y�0K"�F��U�O=��ߊq[����a��5�1]�DJ>D�u5�
����Y#��l/��ר���(T�����U����@���|E�o=�o&t���#&v@��o,&�D_�Y�)JW�c�<ǯ�����JR��"�1~�Dk�X�.�A��-��L(wO�:$�fb<�- �;�qE�������jx��h������;M$�5ԍ� vx�i�m��e��ԝN?t��5�є�
��F��x�Վ�[|`��a覶k�"�lg:�Լ����7Cm|�9-tk���Fv����0Q:�l�|7�|����7 ���;����Mv�p/�����;\0�>��&6�~5���G�D�'�S�ױ�����e0�]�T[�x`�(`����\`o��`ph���vM
����Ϧ۩���%߄=��4�Q3�B�?
!�Y����]��ᎎf�FqUak
1�,_2��bX�ª��N�EB�u�@�G, g2�Ja�ڛ
�C�B,U����#�9�]�<Ff(g��r=S�1�`���v�5��<���j���$C����C�j�<�F���KJQY���ƻKʈ����J���(�vW/990lO]O8��4���{=��i:�l���7rx[���ij0Z�G흼7d�!���f;��\�xi��2Z��m�g���P�,{���2_�Z���q�>����Yk|���7ȺC�M����pP�Èv��o�Xe�u�a�zõ�B�@��:a�:$<bm�Ui�w��k���_�Q���>�d�&�2���v��:Z7��`��a�� �f�SM��;�����sSE7���?��q�����ʠ��gof���/����^0��LG�u�w�bK�(��(D��u�4U N��Οk��;���)��K��D/MC�2*߬�p��Bz~��O2���yJ��Km���g>U��K�T��I��K�R�'*�+g�$�x�LM �i30�8��-��\POb����TMFkv�᩶!�Zk(���BE1tt����eP@�A���=Y����D�n`_#l8? ��6���9�
�j�`.��ZT�ˍ)�s_�z$�sT�q�0@c�g�҃�CzP�34/.PR�0l�лD�t�U����>Khg��;U!i��⛦��[ۢ�>x��j{�6wb�m�~�k|t��.욫�U������y5[������|�-�9�-�-���E� 0����>��r�-����SM�k���JK��W~�K(��!�4�����eS%����pR[��t�S���<�J�C���7��<���dq�Ƴ� t��!:�;y�
���"�����Űܘ�dܔ��S�4��LrR��D�I��� e����gL� �Z��c �?,����A����Ιk�Oܒ���n�(�G��T���$ϫ\'7 ٽ�N��N~W&�$1�$��SpD��1�����c��2��=6�8����q���=�ㇹ�����9SmOx^�8~�n`�p<˱��0�{�(�#~�EY�?Z��{j���[A����T�$��F2~�U����L]XZ�����#$�
��~�B+<;��8�'��u��B��
g^'$��;�|����%I��Iw0Xw<6/N%����n`�b�3�`���L�"���H����7�"-Ϩ%_2h;�v��b�gnKԕu�cx����Q��5
�|��,y���ZD��
ݴ ��k�2�R�'d|���+���{�
�R%�j 2̵�ol$�yYWn<�T)L�]�U9���8Cl�Ia�"�6�w�Й*��:�j��?I���]�x'�̦���*�?��HB��m�՛cۄ��A���:sЩ�D`9_1ۨQ�!���Sq����T{��3�/b�G|^�8W��Kp��Sh-��y��'���~�<�H��ϙ.
�%�(�o�y
��v�F뫊��P�����X�U�|�$����VЪx����\X4J�>�o�"��t[Nj��x�I���ݚ ���@��*"ȶ,30��_���a%�>@�RBh:� e�P�k����ZG�}XfqX],��A���N���TdS�����$�D���9Sa�>h"09h~��U^���3r��H.�َ�w9Ra��\v�Q���ϸf�����1�Nzr^��6[����ȪF��<����w'�2h`�����m��T=���fAT}���^�:S�N{�*|H���`7�4^,������7�_��N����M����e� �Q�h?i��8?������L�q������X\
��!9�qh�&��C���<��'��j�X��|�
�~"��Wu��=��F5�3a�`hƟ�)�yRh�I'��X��h
[2�-���`o*e:�K�!�O��%G�^>�b@� ��Z�|�}�!W��������8�f���>���
�o9A3�C`[���r1��s"+�-�&ijM�؋�ԃ1r�(�<a�b��g��KJ��-�S�e��Nn �;u�S�?�.7@�ώ��PȻSH!�t�������; ����Ԋ�qþ����� �0���G�~�{$��Z��n6���۽��ՠ1�ʋM�Z�RW4 �e�Ao����0�`Yx�����2 D7��Pl
m^�T���3ł�`|�4ήw|L�I��
�*7Xݰy�cC�����h���%�&�7|"���.��[>��Fh��T �#�~#�(8�mtZ�� *ǃ���D���+�Ca��H�!3��"]N�u�]pB*�ϣEQ&\���h��'�L��,#�L�A90J�OB��7B�t,tyt)]_����s���q9�Q�ȕ�Z�.�0:Q<���?ſ�/��>�_�8~@���K��S��DH��(�]��g���?c�����.�t����W�`����21?��R9bU����ݳ��mP\���� ]7_L����ͨ�g�"05 F�������yr��ii�=]�,�'�A��O��2�_#G-�_�t+Y��)�bD��K����
֙
r�]M���u@wN���Po�����dc^�fq.0
��8�*�%�����P�v�_�����4ሡ�[��/��O��tt.ˈ��t
�Rs>f�Ԡ��^u'��Jşuw�c!2�Ѣ���J��ߋ���9�p�/)�
�Zr�O&'m��|�/�������/Ѱ��:�������B,�I�ݐ�"�9m0{�";&�Â۱eΗ�� �b�\J�ȾN�ϟ����6}���zB^_�>�>i!�,�0PR�3�ʮC/�XRl]Q
=��
�A��Ϭy8�$C'~'7M��ic�r"�{��oř?�e��N*PMMU�q,D�˔M�8�,b9K��U�� ��AUs���d�r;�$�˲?4��hiuz:�ze��Z�rj���g��m��<��S�eH~j�Ry�lt!����xHtaؽ�:3a-w���pbSdS��01}e�tɶ�E�{
�(����i�M����q[D�4Hӌ��,j�g}:�r�KV���&��7���0(�q����>^I���^�Q�)9���.�)��-����xv��!Y�|�N@����
�G2=dz�xSI���[�h�o���e����;21״}Sة?�ul���!���h�@�zY�$���HnX�uv{��ƪׯ�z&��e�$X����J�t�1x�L��Q����04ࠍ��P��R�Fu
ߤ6z���s)�3�M�]YM�
���c�T�|kk�o��ѓzR��PO��=� �e���_%}v-Ȧ���Rٺo]m73�-c>��LM=�ŕ�5���yJ$�]��DD��jȧ[5���8��u��������،�s���W����W^���������'����C\����v�z6h��Om+�|'�Z"���$0HQ4u�w��j��7��i9~af03��դ��8�}�Y�n両�� �<ˉ<a�)��~b��[WK���U
�\�&�@���
���O���?`KZOҫ�6�/p%�y�n��J;T��K*]l|:����|S��7ƚ|pz߳t�
(��>J�;Շb۽nD��BĘw ��� �4"��ɤ�b�xD�#�!"�i-4���Č)�A��f+�_��]�FGp�l8�*_J7�Q���0()U9p�_��X0�L�N�ʱ��ay�&�r�p@��������&��^�@
j�@#��đ$wDaЭZ�@�h���[Lq^~�~B���P�&�⟸����5C�_���~�1E��.p�)�r��;��*k�����戧}x$9.E�L�BT��&j�d
/tS�����x���#�N� �N��x24���̫� %z��i
,Ѹ�������tu�������+���q�fǺ�d�!�/�'0��_|ϴ���q���Z�oe��^��N�n����"�LPzm;�cˋ��͋7��x�O�-͗��������+c���c�͠���m�~�b�P4s=LX��U�PU}��؇&�q��V ��0��
��t�0
�l����*-��k����L�fN��%)�D�O�#ڹf?>y����w��P�ͮF3��9$�Q�Q�^�����1�l��ݭ7��+4��)�%ڞ�$A�u�
V��(�Z���aD��U~��f#���c�c�p,m���L��
�Y,(vS99'ek�S>,�5ZE�ł����zB���>�S�S/�y&uh���wxHN�uy�\�RVG��c#:ɭc��~V��)"����v7��`[4c̫)Oޝ㋸��@bF��id8� ���
�"?����ꞁv�*��F�Ԅ�W�g<
:@��°�n�b<k�Y��lS��,��_,�sU�%�Gh8�W��A־c��
�z����x����|G�}+s�o�t��up�yM�߲����8^ 6J���I[�:�������H/&���qZѢ�Ex��#�B>M�[�\ޙy��d��F�e��/��Q%UĠ���l��Q�z6眀G�?2I(yʧ?GlijgBY�((��z\`zo.V������Xg���\J�ʢ�@IF�N��=�{�)t^S�������me`=%ňkg��
�c��rF��=n>`����V+r�OֺLg"�&iM�^,�9���ϤЯ�Q�B�}l"�7�VoKf��$���Q�t��0
��1/�9rt����J^1�kv$m\i�-�u�@��Ma�8a�L���E)���p�7|ʿ�{�#�.�b��:�s�[��Ձ�&�/vec��ұ�.P6��l��'�B��zKthp�H�Y�H���w1#1��)�?C��t��Y��ןי<W��o�iD9Ҧ�B��L������w��"�D�<A@��'��h��d�k&��rh�U�� Vk渇5�c���A�x:)�T`��D����t�j���'�/o�r߈�\{`d^�$0Z�N��ݙC�e����'(uƺ�������#����mZv���\˼��?�E��9��i
�uf���{^N��w� L�0�:~�܅�� ?|������z�5��3�v�{jЬ�[/��ϊ�)-�i�����"�2?vc�q�r]Y"�}+̜�w©n�c��w��"�M���]�,�j)��:(���D�-�E��s�|�f� �LB=(OuF��0������ڽ2��
:*o��v�d��%X���X��)��0�Xn�(���%��R��(�d�O
����
�.�Ќ��\l���Ro4��T��ū���L�=#y�y��X�E�IT�QS�Ȋ��5�g�ЁF.zk2d���E�1�.tU���$_f��<)�0��
�k���P�T��MT{{4;�l���������Wڬ�|�=�8&��\f��V��HуO��i7��##<}�lb<'�P8i4�|s�s�����b�I��w��=s�o����"<Z`��f
r�\A�.�a�^����f���
+��ŢM�oYV��!k:q�0�Ckl��f:�T=��Po��=�t60�j7��Zn�2���
c��^M&5����5
F�I�X�w#�`���C|\��뮁�h�'mZ�Z����XUWr^�D�.�v]�ke����h(���f��J�
��]�\�� ���Gdo�͋*?�CA��h9_Q�"F�d\�T>]����`$�9q!�H�Q�#I��edZ��D��\��d�H0���M0�<�,1B�JA7?Ȼ�\|<U���/�`��e�x�rOVDy�9�J��]�(ı&��v�*�#4����8�iU�f�
M�r�h�j�Yմ_����/�X���_3U}��!���@�p�DD �5=sD?�όdWA�+�N�S�J0 Fv�.;M�s�U.�2����*��;��e�(_�dž^@kNTf�A��YU��r�����C�l��e:c�Ky�J�S�<9����a�56��)�O��&/�ٚ��Lb��7b�� �'���@�� ���=��f{�wW�ʆ��ä���N��;�Oz��=���}�酾s73�Q5�����N,��Z���]^�ݵ�*����m<idj0v�ˌ}ܹ�:�g��d�������[��<��L4ӠZ$ ;��#]ZJY��FT���t�RM���Z�5Y�ӀbO���y�W�����rV��K�qj2�� ۳-�yv��y.u#�pԮ��c����Dc|ȉF�sU�7:�}�����"�=Nԡ���C�ڙG�J��w�����-s=�q3�iT}���b�O�������{{���<�F�U̳����s?�E�b4��XN�^ONbl�I`*��-�-�8�
I�@�q9]�$�y�y�����Uq
�bch7���iWâ�*�,���9��*�Dw�i��ŷ�rdžY�4�#�M]
���)�gdLtS��P;�(����٬:���<��۵S�ZW��^�Ӗ�pXt
�������ȩ2u]��F�0�U��k��o���f�U,`��Ҽ����a��O�f`KH˽�1I&(.5Tl�;�A��7[�3L_�4�z�#�Vy[;�x���Tނb���#���u�qA`����q)* �C��$]�𮣵�/�F��`$�m���3�Ӗ���9H�`f���D�SH-v_\*6�,��d��[������[�9��R+�-诙o�e$��v6�7Q�("U|���q�×˔*5/F2.��Ҕ��
ɶxCh<գ�*�K��31~D5�8�F�h�A'MT�R��29�]Ȑf����~Bn-*IFw��(��Z��a����=��r�����.rs�K���6��v獵�2��д��h��lV���@vy�JS=�v���_�J�f˶m⧵l�u%A팼G�t��7$�J`�俬%�hw,�!i8a�/��.Zϖy
���S
v4�{`�����/��}���wϿQWor~n>�-lo��X���w.њ��=iN��_��}��g?�xv�v/�
0�@ި�s���Us�Ǩ����jm/r7�a
͊<��K���_��x��j�0�+�5K�~��:6�;?�~}۟��~9�db���S?�I�+6O���W_Q6)�ũ�?�V����f,��t?l}TQS�(\no@snX�=�����Hh��N[�#��ni��]��;֔�lxT�l)Z�� ,ita$�2�pSY��]:[�Z���N�.@h5���� Uָ:
�y�0�6�ls�&���f]Wzx@X��� ���W�c��?�Fo�X�R|����|���q=���A.��x�4�B�K����n&��Yv:�BGx��;�����|�
�W���o�G����^���d�0@�#P�m���v� �OͰ����[1@83T�P3S�R% Ț&����eE���(�`e1Ɨ�i� ����� �3�h�9��ו|9���9ڳLAHZ�����rb
~KV����(�&/YIIW�#Z�D��v_��홷R�"�h��I��E�q�:y������}�����/�|}����J�m� �`g�$��~hUF#�ՙrz��D�Ei�v��̭R�Ͼ����f��d�(���-Ew�g�t}��A(���g��)��?1~j�X����ŗ�xߞ����{~~..���x��'!?�<Z_0�����p���l�
�s����s��s�^��i�� L����i�2ec���ܲ�;�ʠZÌn�Q�\��}�
1���
F�%��T�́��~����d�z�ċ�D�Y<ݡ6�2:�f�
ꌡ�Y�G�~R�eMT���|�A�fo/�Ō���Ս�{�/�b���Fc0~���7O^=�}��.�c] �kS���p�3u�G~Fu8L�'�MB0HC�����ڬ���}����)�����_���t��7lL�E�M����NKP�aM�rJ�}1��8�g�j/l����۰Z&QS�cO��R$u�5�3tl퓑q�ȡ��C�\a���(��CU �F��'�)�V��ȳc_�I��3���p�ƿ�0����A?�dž���ۆ1������f&gnƧ��X�Kq�V'�!����w��iI
�y���{�������W�g���߾���5�c�������_Ζ�Jl]�a)��3
�|p#t�G��]�������t�&.�Cʽ�ˎo��=����^-��'x�:�j#�A���c���k*�߲|���������"�?���n �La&�^��Q٠�������?��?r��H$�c��=���7���BNU2[;���F�I,?��y��o���.�
��511������
���7��=_>Dkc]���ξO��0wN+��,H�^O�i<�_ �#�pZ�Ȉ���;6��AK �/NJ8��
Z=|��TV*M虮;��鎲|� ��b{?�
��
1�t��^����k��i:v�y�7w���bQ��H���+���{��d0�^v��������%�v}�r�Ve29_�&����C(���,����'�tC)d�CI�.8Uq5u�Ǔ�����(�@:#ۮ �U�0�������}��gd2��"���Cj4����FoϹ9�+D�?��j1��)��y�`��$m�QV�+~5���EHlF�Vr�J�'�9{M�a�#%D������y�κ�=��%t�����uxb�7�)��ޔZ�'��4��=�O���^^1��c�;
d��$?o����78U8�B#_��C��9T8h�c�5F�=�Oa���%��:����!_�\�0ϮN��(��j0h9�:�{%��2I��t�v!���@�r���8v�Rp���F���v���0d�c�6~E�ω;�����R����ߞ~9{��l����c�v��� &2�:g���s.�
�Z`|�c0�j0(#�������7a�j��v��I���+5^����]�6���'i%��PTZo�aD�-_���(.�Ƣ)�0!DF�ވ,���? ;���3-�?��4wh�˹7��7Ɗ�q��E�
�����������"�?rD���OC�c @�<�;Ʉi'�Mm������Σ7Q>ɋ��͖8 ���W�������@;���T�b�K$*�xnj1�Q�9)(�Y8MD���7nhE�F�t�5�@,����eׯ$��F�Pi��pq�tO�����v�TX��T�T�H[D�hd�Υ?��"�%r ��h�"8>EU� ҦW�dr.Tɒhۢ�W]�됷u /�����0P�w��h�d��֊7�Q�T7����/��Q`o�4pO�q
:�"_�c�����@u������$l�~-�qG���7{j�t��#�ӱЮp�c
�o�̝�ˣ2��i��� � }�l$�]t�W��POo�j�w�;�y����^O��Awx�E�u��剢���f�Y"�� Ȓ���8�\kWf��N-�GB�5����_]�B)Pnp��x/���pL)g�����m4"�X��9&��@� ���,���]�i
�F�g�\�P�[Ug��������uLNk���Q��c��5���cI0�z��Z�;�n�[kOr��C8�H�;#�d�* q��eq/�d�>����GX�
�a��<X��戩G�s 3��V�ϴ{Ɵ��Gd5��|�"�d)�Oͨ�f6T�*��
Rd��a#O�Hπu� :p�=�?���h��
��R���͇-i��*�pS]���c�@p�>e���ήP��s��As��*�WDp�7��@��}9~*��)_�u*��o c�/2�������S�����;3V{>%r#0���}-�>W�P���6j�>�w��
}�����L�@�6�5�Q�]Bzd�ӗ��4nΣ�)I�1���D�� �ڢ_i����qnr����a�y@�"