From 5c44f9a78dd310b31df2d84128c4b3ca468d685d Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 6 Jul 2010 17:41:11 +0100 Subject: bitbake: runqueue: Separate out task forking code into a new function Signed-off-by: Richard Purdie --- bitbake/lib/bb/runqueue.py | 117 +++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 56 deletions(-) diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index c82affca3c..8814343377 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -942,62 +942,7 @@ class RunQueue: self.stats.taskSkipped() continue - sys.stdout.flush() - sys.stderr.flush() - try: - pipein, pipeout = os.pipe() - pid = os.fork() - except OSError as e: - bb.msg.fatal(bb.msg.domain.RunQueue, "fork failed: %d (%s)" % (e.errno, e.strerror)) - if pid == 0: - os.close(pipein) - # Save out the PID so that the event can include it the - # events - bb.event.worker_pid = os.getpid() - bb.event.worker_pipe = pipeout - - self.state = runQueueChildProcess - # Make the child the process group leader - os.setpgid(0, 0) - # No stdin - newsi = os.open('/dev/null', os.O_RDWR) - os.dup2(newsi, sys.stdin.fileno()) - # Stdout to a logfile - #logout = data.expand("${TMPDIR}/log/stdout.%s" % os.getpid(), self.cfgData, True) - #mkdirhier(os.path.dirname(logout)) - #newso = open(logout, 'w') - #os.dup2(newso.fileno(), sys.stdout.fileno()) - #os.dup2(newso.fileno(), sys.stderr.fileno()) - - bb.event.fire(runQueueTaskStarted(task, self.stats, self), self.cfgData) - bb.msg.note(1, bb.msg.domain.RunQueue, - "Running task %d of %d (ID: %s, %s)" % (self.stats.completed + self.stats.active + 1, - self.stats.total, - task, - self.get_user_idstring(task))) - - bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data) - bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data) - try: - the_data = self.cooker.bb_cache.loadDataFull(fn, self.cooker.configuration.data) - - if not self.cooker.configuration.dry_run: - bb.build.exec_task(taskname, the_data) - os._exit(0) - - except bb.build.FuncFailed: - bb.msg.error(bb.msg.domain.Build, "task stack execution failed") - os._exit(1) - except bb.build.EventException as e: - event = e.args[1] - bb.msg.error(bb.msg.domain.Build, "%s event exception, aborting" % bb.event.getName(event)) - os._exit(1) - except Exception: - from traceback import format_exc - bb.msg.error(bb.msg.domain.Build, "Build of %s %s failed" % (fn, taskname)) - bb.msg.error(bb.msg.domain.Build, format_exc()) - os._exit(1) - os._exit(0) + pid, pipein, pipeout = self.fork_off_task(fn, task, taskname) self.build_pids[pid] = task self.build_pipes[pid] = runQueuePipe(pipein, pipeout, self.cfgData) @@ -1083,6 +1028,66 @@ class RunQueue: self.state = runQueueComplete return + def fork_off_task(self, fn, task, taskname): + sys.stdout.flush() + sys.stderr.flush() + try: + pipein, pipeout = os.pipe() + pid = os.fork() + except OSError as e: + bb.msg.fatal(bb.msg.domain.RunQueue, "fork failed: %d (%s)" % (e.errno, e.strerror)) + if pid == 0: + os.close(pipein) + # Save out the PID so that the event can include it the + # events + bb.event.worker_pid = os.getpid() + bb.event.worker_pipe = pipeout + + self.state = runQueueChildProcess + # Make the child the process group leader + os.setpgid(0, 0) + # No stdin + newsi = os.open('/dev/null', os.O_RDWR) + os.dup2(newsi, sys.stdin.fileno()) + # Stdout to a logfile + #logout = data.expand("${TMPDIR}/log/stdout.%s" % os.getpid(), self.cfgData, True) + #mkdirhier(os.path.dirname(logout)) + #newso = open(logout, 'w') + #os.dup2(newso.fileno(), sys.stdout.fileno()) + #os.dup2(newso.fileno(), sys.stderr.fileno()) + + bb.event.fire(runQueueTaskStarted(task, self.stats, self), self.cfgData) + bb.msg.note(1, bb.msg.domain.RunQueue, + "Running task %d of %d (ID: %s, %s)" % (self.stats.completed + self.stats.active + 1, + self.stats.total, + task, + self.get_user_idstring(task))) + + bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data) + bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data) + try: + the_data = self.cooker.bb_cache.loadDataFull(fn, self.cooker.configuration.data) + + if not self.cooker.configuration.dry_run: + bb.build.exec_task(taskname, the_data) + os._exit(0) + + except bb.build.FuncFailed: + bb.msg.error(bb.msg.domain.Build, "task stack execution failed") + os._exit(1) + except bb.build.EventException as e: + event = e.args[1] + bb.msg.error(bb.msg.domain.Build, "%s event exception, aborting" % bb.event.getName(event)) + os._exit(1) + except Exception: + from traceback import format_exc + bb.msg.error(bb.msg.domain.Build, "Build of %s %s failed" % (fn, taskname)) + bb.msg.error(bb.msg.domain.Build, format_exc()) + os._exit(1) + os._exit(0) + return pid, pipein, pipeout + + def dump_data(self, taskQueue): """ Dump some debug information on the internal data structures -- cgit v1.2.3 e9gH 2fz<uUVlQ52vS+%6\c:\EZ^Fm6O.M]ܛl4{a MUkQ&@HR2L;\" PGg( 2ӮbGu}7톁oKL|)s/US%ODrXSU F{\ &lUOg^HYpZj蹏^(~MF߱N!`9y˾!_n~7~fh6SP^ؒ[M:zjJ tYֹDA9p9!U+-bFdP #x< `qn`K5 ,aQ?ə[{tyI Cr &3 ?}ٍc$cCqUm;#_HO<1j2]f6Š[U ࡊ$en=mMz t/|3) ޾l4ԉc>(LWf.μLclBN[QbQ_4.)9d@d"u[W/<#|'2S[C5Ab='98q:9|#ڂt<Ǭ$F9~rT&4#{b?0ㆈیG-.cz7)J 0Յjv<7p˅8zgybJK^q~ZJ0zk;g売WIIQ _.BS}&CE  7͓?0Z鋙ߧ*W`?ipbZl^KPb-\[ ;jV1gb_ܺ,"I.Q@PJ]efV&t0Nk>Opk[}WHL+Bi|[833(j.x]BCIaDLunl9 |} [J%iCSHy"4:U\8+O3胭k$zgO~S}.Z,i(Q̛kDHyߟ| ]luK<J=Ѝ9)9\s.×UFUUd}FMTHzɢyo2}F_{_՜ޫ"7J#0̷ùʃjk^8.7:t@0~pDg|W7xzy!wt50z7oB%&78ǿ2MH8%kFH{Nj&rһO6(է`A^P@gHy0k_wݝs8=4gD DGegTJ2==O%d" -#T@/2gGw6?E~CS䊭](`yd"U' l/PNDr3* 8:rHaQ0.uI}\,T8vF3JF;A dIܑO=3] ߋ$p;ϓ$0I6h)C*N`\e!5o-Q6ɶVj wR",9gygR/HLm:o{2K'g>^אg0r۷d|~GW~(c:vxˮ1_Y )tO<[e\Zb=EI߹^Tfz]~8QSO(cR vNYtD)M)%M}tk;a}N +ͱr x^2,YlmKujR!.*sF\&Qrq"ՖL 5_duÎ4*XLl!W/Ac6^ԥqM *WLh;j.#Vֶmjz7PZԑWXpO~cYqZJUV2^|jx}}dʦt#??^mTp&AkGai!;lC1P6~!Z oa#.L75ٟO'@U^ss?sB vT^oM|NxI7T鶏cg0iG˹Sp=r'5qMڷ;~gpRpbs:+I1v.PmN+S:uc 3$v,3W8ya"4DW=F;W ps蝵S((9sk}&w}v5^^8|oHt܃.l޽R^l:@e磧яWH۾&%wuʔΙ:lu%H~CbN&>:;JF`"T H*NI+ S6`,w6w =3i%B.$%Q<6p&n:rsm舨֍çIR#c+gJˍ3FWx֢ʼndڢLs+c\ '=$xM'qwt{Tb&" 5yS;WmiـV;@IF{(ڭƃN&N`.2%?_Z:|Һ,]ze$G&t|%ivr\quO(L"ӼQqEONGf! Ur9Pv[ڤArP@U #k 5K3BAd!)dbLnz~,}f4Upwd~W/7:eF[ kηOM>۟A{bHn+dͻwo]WS&CupE$'Q̳Y $+w]01TY}@_ gP>&3OigO08cFQdax[+8hN =~sT3GVNnZRhoïgX tr .m]T](oz䬇H߿病+{yQA Z5_9W(*T8B'dh][<5HEsS=BLJG躂8/.(!>Y}~[.kܦট'D*ՖI+X"Cq'-9eUFO4*GCǢ'8lA>" IRR4SVƒ' da༉cPfhTw94WU^|Q2G9yɘILl o^_2֨Mr矽ĔQX~0G߿D( g(lx԰^EvdrRolW3 y_/wLDpqռavTi8߀GfV|n!M^~F WtP]Q2B }u2Q+\QB(Ϗ85k9'(KQ1+I!73?ۈIɞG;}zx1I_TZ<"&W坸&y~LlQ7O.IZX8ϋ+<ԉ)ˆvpIt}Of6M}wɸ:F֑Fjɫ(d19OvhB p'/PԂ 7G9|ìq"ne@]*̇n~홾(aB}{xnG\{C_U3M #HU뾁PďTJ}mxxu<8a! m,'p=5"^W<Y\: hN2C0$ -SO;.NF"~<%O-&1GQhjވ$aQ5aRzgR+r"k dwB @;8DE Z(~z2 MvX*he,=)}dE˖A<|^joA4P *5/Fns=j\Mz9^hoH:gg OD$l6pN8c4h:.~Zb28>oZgVaVxu 3Lpќuf"`أk^%&ID6BN_)64@ >ma $cS|xxp3e>~2b44"ڕ3.V䜺ǯ<}:7 $0**wV[$ b{8y#U&7LEC~{3%FGͷY?6ǔ4xQs\O27Yv-߆׊;7cuL"O W OCT WkW_> *}0DDLSGӘQ\M>Cw4~k ~lyq۔`44zX3biO߷TI1?Ti&!8.-R0h7 .c;֘gH-b -/2 7Ɵ)gnV<׿/wu [x]'6WAer䦏4V|ihOkCซVxw4}E?Cժ>b\cL$ƚlflhA_ñ7n\1p3L KQP7$4;+5L}JP5ӌH #C:bEa\LǚZf)Y9bu/tYgvaWAm-Ԟh*qu$@7)fy c;Gnv_`jUjz~]Z:J̒0jl 7m2D_箤,QENFxF($%82r<ixITk既 Dakn%*?s?57yЙ?stSˢ{z㰚*("I?Q%}:<_# cMT~m5ͲjaE38YN+=WCtC/GwM 5({Wg7`MKd8$ӪEKrMIm÷9\ґeB f2mW(;>i$ 6j.K_ a| [׫r{gB:8s$0FHt G{.[boNe颕QU4}fQ Q{S&y(8C=c7w&Leyjġ+r&HP=̍u?D|?ڬ.&_}e@MށY8 @*/UK$OM q"F}F1MnǯzLمZ/HPNGiHᲈjԍI~ԋL|S]WV!E1zz\}u)d$vho}`ݨiW\d}a,z9:cZ}:?"ϯ>*3G?eDq_Mf sKuWu9$OŖM6l/)ҘAFBXʨaE{d*w ~^쪜qKя=Z鴵J\J;$>U.Vkִj(XBWV1M qkEl=eئI6Ƿ6QFhcp"Vci$-!졨:.}y烁:8 _URqI35wC|vǃU,H9P"o`AJJqHdl8tə{g@'q:IL9ѫ/ Σ r|gpFqH~Ya0͟E8c!ЩD`) cc貺6kW>QJn pd(u"/@D:H5F?Clcق:4<:($ז's*OZu}muWQ>/=c5k0 {ڣ߀5Uq{<+̓J'9%nE(p6?Ix`9%snz Jhy‰&*&2&!˘7- {/=~:th2"V`}X}!-pcYD%LBz,}dSAh]O_RMae{nDL !D29E|h.@uXB%HxlU~TG J]lPB_BKGI /ͯjQP?_/H|!(qʘ81tT#iy3m Vai"^,; 1 wޙf^-!mTxacdsۑ>X I$o;"|&))F*qi 8(bT@6 ^1vwǤ~:aR`@Tg<sz!NjHM zj e fD#XA:k%fe.ڠ_CIg|fY[OzÜ*(%]ةѥQ`p+SV"+i8 JdzH1NY &n3Ç՛U]mMjf4M&rJk:2 qg#ԡ(?,90QqNa"%;fI^ZߝǼ'൝&neOੵ;kga:)Dr7U>KA6WDJIӝbҔѽIym bz.7-4y!V\.ﺪl$C>UQKt[ t;2Em&T6nH|BDZ*)@.H@JrUhPBT?$ȪR"D> XyHL쏣|0Y3 *G~/S2 Q U))d"D3D N(utWך"]2ҁkᮬxՙ)LXsF-) zqm;0}ݙ^7y|jh7ںrs7va)CM u50>NP׫^TS=K'.Ȩ`TT%} :94So,l9`+x-(N~W&Y"B(%T.)H`8EY"?+c~NSnuu|Pi!-kXgLj/|b"H A{=ڥ])(R@@04+JѮ4(q*܂dVB"Рyn7d葤@r1%Q܆k.!|)B@* Ά"+K48B˦o5,Bćbb*n᝟b*.PJ 8h8a2 Sgrc |~poyL  P DZ~ ?dBl;dLЕKй`%2(h/acqҤ#*J nQ 2@̉"F_q#jT$S6b4.@$Bk0D)#  2(2!ksoў=g!\ƜsyhPㄔS+wN`w gI9m•I<^%M~V.y)Ey ႂqk۫%Drqp&Hl'I@CҲKEDP\q*A= 2ƦLKG/]x>r=+xi|=>=MJQCI$wg @62pH{ǢXr *~3~-WOWnKVM@0n-acOTl &(; A2(4X(&gIT1CԠ1s!蟁/ ?Ub_d 6/5d?̯2F>??˔)C w]qhʸ.Dxc;U~i@pCPO-,2飔ى0`eS N Utd^MɈb˘}P3A9gBm(`1@PNNCd ck&5+jOC-4:@e!񊸂܂ou4pOMS n ðxĘ `V?K xt6CzDc9bDjpF!s/Z;t&!b0]a5B:A$L`4҉ XC1x4 J>@XBwaP2Q %^"%-fԇ: TN5T],[O:k `"rM~(pO?1=M-9 E0&&cXjg J xC %PJ jg?_s,PhxwxUk5̺Pk2e2(ދD(1dtNpg~dP{D Ǹ`3Pͨ 8j!MB""Tq s<#ҌGpJ#@-LjvNU2qb嚫b9b+.F<x<"v1Bg+y@pI> 5T=FGPT))fU qfD:/-=V+Z@@az$#Б4ߚa蜾L"(aPAfIКH TU-#=Ks pI$:;34E_4+S{q;s$C I*O?(r9q̖~c7?!.~4!>p3>{cl{&m7n{m׮Yx4#Ls.HotrV‹lv@]1o118%?-jQw/Gv.mWdߒ'(ݲ;i=$m7k̅u [}D$Ʋ}AI \ xN&R \B*c_[ Mknn9SjƓN8] ahrLtψ¦_a$7IYM V嶮lӎʐq3TA)Qrf(S f^x6򤿾*7i|hm;)މmF4aTN(lMj<%BT<2R/_ m^CAC*A+gW-$]lGlj\#Nn3"P'6$mP[81: % 2^oyץ}ټ]OTEõ8xD3N|[;e3ycBz-eOfTto i%֜ey J5WX %TGr'x5iAn Fuq\k&VS2Kņ.|$DyR{7Pf#jPVsBh>|Ŀ YLXn]tSM8'~k#=Ybo{6nsȇ$-2cu0D5;#ΑUM7EhPxZW*hrB-ݟ]Jv^ZPCSY}PÚ3OٔݘqWl]->NJ\9M܇6OZL[`+;Ѫa%1J0I,릺dir=Q 7AI L<l?;bT+]B.8ɘSE5% mqͿ=jt-s76m lѧgtLzB'!=<q:v+/U$IERL4LUR A ɉq5J0EJ$mX]o(FL1=QTP(LTRDMLGc0bCt(0r9SR0 t'Ewk[q9ҳsOq1#EH"%4vB90IFQrG hvu;Dc] WG 7]w'aoO miq,ЌZ*`sG}?( ɆݶoFw&->޸ֻ-3& {G`1g\-Grcս}]C h| Q{sR~BAp` p3ad"cyJ=%qxMg<֓V򄄎U͇0BG<(;eb?^{y,*֟~`#T]6 &"B#8m~N #:avc4W L/zk rsWv%mȔt[/#[BAsRIB.rDnu{=~v% L7nr86sjςq9;MMF *?v!clo(x<(1Ǩ%0,Q]Hiê#!AXl~g0j %lsysac8v2ur&9o6f2$4 E0"Q[azcn'PB>jY~xwxfu|y qժ.(vIªC&1Tx>V-tFoR}β=.4{;oG.8/i4^RRd)dCDzE/Z}xZyˊg{ksױ_[⤄,m}.UMgb}I[>6-^z4!C>_ψO$T.5荡5Э:aBjhJx.5YՉL*,fuW*8 Q1+ktT9f+Q$_S%2Z-$SW>\Hu0P-jG5}FСsPMC{F٫D{Xtɓ8# L|z:smHdB)8Я&OU J`!.+ v\2_kbJ뙾婴6}ZiSE"NHƪm~5vP3hNlAl1L^(% *=و,\ucC1jxJTWʣT/'ϧG|}m@_gn:!ȳF"݆'JiN$vs+zMFՠ[ I6t9RsKkk|Ǐ5 _L0Ȥ $ (Pk^[k/m誷f\}bCStW4jS?w̍]FYNthǑV/_O3l0-A !-'Dpv ;8&<$ 0 Ń'79!$zBaF0b<ݝvWڊǓ(k;W J/"pٍVȁ 66Cs܇L r9upA!wyg|ana&EP% Vw9ވ,kQ*o ž0Lw7ARAݓGǔGT EL;=8ʫHn(9&Pj'/ ퟹ~VaSO!~YJTc;,"#ZC^qITLnY\i%LAn󙫹z2fH1ɍqj6kodǦrt|5YAig )z@!KPFIG.湅w/_x$$>}7 g j9lsŋ`:FDQD=okIz4Tc&k/ceQv*mhw⼝=N#r$`##'oU|{r0&F}q3F,Yi\ ETF-o\y%OM 8As{ p@,́H]+=˂K<7~lƚҎQ@ F+]* Hw 3Uu mmwgUz_XGq'9WMI^&}($5ZB'x|A/N@-Dn[V-50GXj(R *9AX4&Sam57nD832'q/BJqzۋS5p4,JNy&mGs8lZ|@%Ŋo{&H l꽼MxiGDuEO+٨)keA>F$rb.߮ 3vEgM$%'4lGdsgX]Ghr&2)Aęj$@g 4VN5.MG\|~~a8 G-hzŁ\Xt{6cHv;ǫ2M3$7)zY0AkD"L&I$*4o`{ _$1/>YGjσ|ߴ`*ⷕ2F/{Kw%Tޜįg~O:_ ^a\ f~+cA3L?\5>W!!?&Ex\F>Ļ|ü z$$6~鶘|=?^I"?_<یUܛ D>3wUr7IdQ|O{zX'Ms<7}vQMBd*6x.D&.Y=zYǻ}=`|5XNYTHz;{DYj[,[~aY]>O=ģow,pqzķ^e/bNo۳$9xaWW&h[mF)u]Փ˯jђMm-2wneU>ļ9wZsyW#GH$ęHaL[Hks)؈AT/qck5T?/ގdC(|g9l3$E B}"~tRxy?/$ҷL<5g$<'GO/~mמNT}d<\ g2g[ap麓^ܷ)b ٌÙKYU!_ USrQƶ信.SL̪X\ʟo*PLqgPn]CQڐ]׷G?G. ?s.y@B7BZ[ٓMz~{. ?ӰH rpuez3` h #e 鈞x [tѩ3NZ$Sen."dlZ (܋]ϧDk ARRoDb/#ogfYe^\zVl .\,~u'ĎQ׏&?8J5QCd=)ܳx.7plWKա[(r}xW<{p0,{Ez8ħ6n):Ą .1<1,=ȍLO\9ĄdDwH:#VҦp Ogb0DӚGd^$.@hĤR#tI.Glh}nݤg??&kׯ湸c0uIު[] TogMŔirޭ[`BWfVa `UՈJ*)csM_5Y|u|TS+TL1];k$ffMW +.7r}o˦ŗ?U{-\kwÚZg:ǥ+EV=|7_|0.n(;Ň/Bb\1[&E@嗓d6shUú^ȳ}_~0|DUO_\?=9a-f{%z#Y4}ekjO h1Y^B۞˟g)Tʺώ7p\OuqI6Uo┷:4J2/%•>iJ={VwLSgF[n~ݨLRuEŅNIrWUmfya[s>vSU yjQnժ7GHcŶuq;':TKJ|}Vu7o}w~>u=w]IZ~ۨxѝgӶle\]o'MpzªgX\]SH(a]QNwK]YǻJߞϮX+0CXxKe׎ut9!?N'M]ܵkQ[<| 7oz(0rRAYMTn2tlSk7 nDD5nݳde==6 z ~Q@1juu<8!$g^zUpʫ6\!ݔ$(4ly$ Cv dJ3^:֩]U kӳm_hቦΟ׵8hT~G[ z/LG͕喬*"8(m(5C-U.izW^aSJ 9&@:"%809 #c c;!ύr[iF<ε[#9cM1 _~m>Ş}LniNj.̓ppCMӤ^.\ܥ`)5QPæx3 9 8g g{>aivJMmqZ^e"+ zY-g>ig 2dw3SN<ˣע%wts:/>& gSe\D\Ax|&+ߺ׮X3vMѾ|?b\)'\01n$46&i8FTv/w%j-J\,z }5[t[l\bS{xՎfǛ>1gNSmF3GYPGsPS:Fӿ_C5/XJwYalyxG pp}mg ' 0݉/Ax^#+zn kidsF+wӪ;OJ!<$եM_2}rgva k8O5S=mc:z(BE5%(vţ.Hd_뱽h_|oM',V>1L%D ҁ# )ȇuZ.5KblP#1ѷQzNd:>kQ/--4tR=!K<`nf}G??J"Ԧbbg5 |Ơxqpu<19W\(O@͛`!תx٭BIGf+Ybf:Z_fl5Il'=Y%ռ<޼&Q |Yr~oz!7ozGhnMP(;{;A31#P'2?6P-A>dR~ :,1m Λ{07-EUV)O$l]< S籱6Gvx} zʀTϚp6USzL:O 0ԮnM}ٶq3l6Gimw}kFlbbIZ1NI8ni3fV54'\iA6II,MLqGtV/Fs*j:PE( pWI%Bv!6)￷&Axnu>7MӉu@ʷQA]=eF4x|MqOÏ.U42Lt쐓TPSM%SM4MavYOVm nCd& ARb"$ʥH_:!08‹`.SKR0qv{dn w_4x b]e%vUEva u:sGGM>`/2[qM 9bd3hP_dW'~ 9EU*`Y!a^öRfvTǟ#}<]7?QU>}Q>x^Y]䫎z < $30JD *8|$^մMEQ''F8փYaL'88X"v 0|ג U@Wl0t>v/燉| ^ʆ܂&G[$lxr Yg5+wZ4< Gc0И'AWĒ+ݦa9w /ƴ3qi^n4ϊE&T91 r"D2{\:Fd Q61c:7'#K nAқ T%%\W2?W!yݚ Dk<\+ qoIIh5[0Q(%WS KħW&c2n;\i?-N-VQ^R7J*Ÿ_^Y\׻9%Y˳>)I0M?7n\yr5h ƶ58>ڏ BX~jy  rZ/otWs6kw uƉUaz+([I(hm՝@ϩtZZ%fhIىՓ= mB5U]s/.R] <[W;K=i@1g -%Ǒ|pcþ,:dLϷ$ Ȳ{|e'!fd=^Hv:UYcB{;ܝAZo[6dҕA8@NI8ڵ^Ki9" mhVRK([lb3q#RB/ B~ƅiJ }}߱c"PX'lb;Ie'%y.(DzKN}}BaRlJ=;=^@ņrZ0;I_+ Edݤ] R̀`=)$mRCW@l|΍܈kIٯUqM[ʙ̜Ii[D-loRlfU%iz/>:g}f[R$:qQ/Nݿ갿_ eCW9a|~fyZ<הE"&6ѲkOG='x`\pҤm=G]tQG[#Z\}5'k?˥N7_Q?G4'.kT^e|x{,*4Ӕv*$-UCH؊-_)RX]L2!#W~+)iKXR$Z7Dxy]hlxm @D楄h>AՋCegct+"*"8Cv"Q_m"L[c DŽb޻ OM\uz[B!LQNKYT ye_(uV3&=o=|QDZTî3Nu`SGb'Șߩ؊>ڥ*+|L|VN2ʬQz`4%>n0ф'H1tha >k%։өA&)e0 (?[jv:ժS$ytqN>tըg9S!4]F60%]O]--Z9LP4R*) Ӟ K'\f2 jJ7ɆGRGD'$ ٬)3S dn"eL^pAx2C%vFS7.p $hdc:tFC#r nBiT#Ń00'.]=aSbB2:m =y{ twO$Z{"fIs1M,udzlysI23WEhsl fî[pOƈ?dI [A-=HYUNSOWG+ge=}V?0﷊8AԣGli[k/23M*el$<o\mcG7"$!$}Hw-6Ij#GwEW~Ble]pt㌡nYSKLz9kj;x۪qͥ/)[9Gf€Y>Z(z ?)\F*Y :wiSԅGT#*;b%ĈSb#U'bF͸U,C^:%OxְGtz}szڍ*Gb4/|h׆tG}y(\M!*ӸEMImWe_eOC__?{#q|TF 9zOrPUPjҾ4`A_u&IjnQ{|ω\wٸf>IܦJЊv}} rgM)80K(gSN3|Rp)qqt\돹,1̼;/ WBHBDD DkK\/cΞFy޷ooJ'OinpP{&K4vӺUm\sjEUUTEUUDUW}ll[z h"eVTό{隸kPcu d͑^Uu@_k{K>YA ÌF-J 7NHQ !#Py 'dj+h]LeSE`{&o.$MWE TG~Ǖ\|r ,Q 8od_Q1B;.myL0 ո+{)괸5UjgD]n|B+Wk knMQ\2 ?LF+&@2(~)4(A":9JneM̯B/r}uLdPSry?|υx=plb~iӨ7">k8鵺)DUGS(]N铻>$Mk.x(e(o5Y 5{M E䍨0WҞ#yMfX(b(@Sq+z9n61DF8 =͹f^TMfP?: 8VWn2JIS$܅ #2;tոGqF7i rT}%WGk1tnS-9 =${=@p׆߹VXҎgC"q"ZC¾7y<[: B]s,Á~3<͵󛫕j`r݇|)8w eU " =fZ'swLŦebʛa m;;sځ~0%H-Z޶AYwMȠ":aAѲ =^r!{.U3Z]T޻d>FX$X}eSC,ыku9ˮj"o!?h8v(1oB1>UFTfE J!߮_޴⿛"'|d t ~;9N~g,q74GkOXܶoT$Ds5ش &hRAV|ay/mOU1T gOpn?'KqNx8iiߩ/ 9?QjJ*6aCCqo#V_,tjYhF%Zmjܗ 3uLDXesg{3aiUo!FoQ]uQABQ >}'oԘ{Ο{}*7Ͼu= dU|%_=\velz3q5Q2fw]tt֢@^t@([z3ϣ7!=5ɭ=3 +ՇcQ kRo^^k# o!k_6fbQKs#+Q T5> 9"ߎS >~ Z,0 MSiC NQ.[{6>YT͖_D8moesլ9z$d$B`TvUf6S0|Y&-iJ4ܐ/Լc eWRbT̍U?'9,j52hj uUs;~ B\mkFwNQ@|bɛAZ1q]u7UWncە䮶>MyOpD+뾮)-z^3[1« &zn D2' Zؙ1?kg#D%u!}JcrP~f)VaXx֜ԢՓSA=.U(7*="8`Sr~MP C" "sa';]gפzJUuRhvVٯg,,?9]bPpgdbͻ7[tys}Alq .>OU:1!&f5w/8z_}P?%.L3VXjؼ':Jmˊ0pKKu `=fP/ Rv+b_{("B׳w|'O7Y*Lz Gl$/n)0&z[tCCQD~U<5:*jEC}poJOi'GJƒOc'|S`L뙴]S~deOc߰Wc AѴxHj)|6ƭhʰ&.k| ZV5 4hQH>7(NÝx1=8ׯ)G44(or$|{m5|Lk` ^Dnm h˞rt+޽_U8"Jr1(D=ʇEjAMPw_.By8ik{ky#޽mE|/oW Fƿrk,3cd(wq"S缂KBG37=\g-_ӏ˒mLlli-()cUSH 8ʇ7Ń6UժY\8omÎONf=ZOmBNq'Ll>a-ʨ[cB%g${7gWgq%~+-+1|Gwx*:]y7ߎV]UnފJ+wZ1Ǧ3R)g]&0-ljܴrtҗ)̸Q+@GA1c~UD y 7?g.gǬrrv5 %+xj~j9doe¼D׻6pkGUݒH׃DXvi CGU:R~ۚawl憠ýD}.Sutʉ֩miΉwBi%o,<Ѻ+wwwҶ:qIy5?.gC3óﬦj㫻Ǖ|K_7} u]\[cs5>Z*9}Dastl .^DvzW}=A-G,k^XyIř=(c}Cda@Sɚ*W|6-e5XN] G~khen_Z74{|#[>;{ ңTkD-eQsfе7e++,qi{X33°W;euFh뭱!UӯnC3%)ΐBQDאG`EUMi!ۑL K=oz.QjlٝQ5pֶZzwh)]W#W_'9dg8@V@S˧@s]}1T>7pל{; C`i'X4f 99`^NN>`RgOQ~]coJI-8"US!fFKi^짢 ݓuqZѯ K/qQc]~NpSY8sF9(!8c("+W&s']P>q+9ĉQEw"Qv6ԍY.?z<\^G]Y2Ts$)ÚÛUsyyj V4wh⿳~p?y뚝3 d 4H~OhGUdYۭIdhk*U Qf9!@EAf 3A S8;BR1_p_i";~O<+=5Ҷ4[sp/c%&([vwc r!M3Ƙ9!l ehFXsǤu"Y!~TcDyP\D2 k1<QՒu+l">]q &d&=(kRxm\ݩK蘂E+? 0mGpLX~0)„ݧ}Tz$B||/.~zE44w[9R"^Iճ#gM+1A*H: uQT#Pd)T?Y':w|)õC>}?4o>k%oX{&}ߓ񳁏lS520_?UUUUUUUUUUUUUX~UUYeU֯]Yeݻ,ϻV<9yW) zlr]{IKaF!^n|ApW}C ;tQh#㥝\9"l|O3_AW9mv㷺*8TA7a!B D].Y}Xż۵* L̶A$"ۍiLE6QrNy* )3 KU9pCrJ`b1 wݬ!54/TZ@L'<VDEG{͗0r;bLb6Ǭ؝mr츸ΰR5BLZ:"}¬cKtCEkk~z 4w'>FN;=~!]E*e R-үosYv_zPdm}O]di_ڷ^sK!^s<U7g۽dDW3=Q-|cQGL>TDQ@3żQ!Æ]_yk} C|pQ {8"Paa5459'>Y=g^bFNE)2βm4 ؆CREHdCD߸S3 Uqy;}eLl˕W&talieYk_V-v_Zؼ$  L3tm*ףO.lf2T??v4~X٣4@H >2ޟ`v98hyh]Ger+'⳾W\+殲heJbNW~=^O:_@ArBCWuГ$MN7W@[ ܱ! aO 4zzZr%EH~,,vau1'v}[.(TRDu;th~ijQvH$\7mvNgC7+sg͞!ܬՉU9M63ᔱMRU]b7ʢz^*~mTn"Qb*; ymp[*y+"#+ݫDIv+gm(W gD*y5_TzHAi4"b)9-5vq!]pWXXO)Bʈ:+W)k*6@Cr  HsYg=p2Z[;gsryAObJg/BNз\GLj69(-f)]e=w}zfګ_vQ֖W3=/w$sbe-q{?s;{ʧ2)t\;^Q36\Yt3pfL m?93&I4<SlK6a5L`=Kɬ3Y5 (5HrB)$ϙ*793K-șRl2 &>8bgzcu320l $Xo "0ˑWD,l4[ **y=35,mTH_T JU6# IM~/g5W_OV}H툤DfY Em{kbñS/ RB8Ru(LcF7xI`Q:Hz)׷LM <`{Oblzh5d<)Sz(*ᑾx0xj3B+Q.aLvk]4ȁM@AŭsAB)]tuT[*zZi ލαq,rڝ TѪArܟ(bmf|:;1Z!#ҊW6h]qƆJ(TwYc\Χ-7&:q1~x2 l6'ceό!% * G]W-H=VݲӅl64M~婒 #U{ڳid8'/qn|#~]o%1^8]-(d{BxJXWK+_x) @ӷuzlNU?ؿg)6 um iMPlU5Jva2M]Ϲ}}6Ru\ReYcZZd}ϓ -;kAnS5Xlg} [vPt K'bWF8a=0a8ȧ)5j>mz2ɖ+dˊF:_Qt堓lץ neF~pY KMngO㨈e,x+4ۺhV?nP~rou̎ߊ,b;ek%FG }!ȞZsO]!ۅβ?3Qy^{_yFx Yk-?|GkG]`_$5\ Q:;Ԝ,\?`הf<̎`>MIro97+8qcj6!g?|OGo½5q= Ȫb& %g˂VR;K1"u˲7рZ`wԿlo*v<֪'4Yzյzy X͙N٫řø&dbO.U,7#]n_fTG +ɓ\ԋL}:~t1/B9rc-3^NC09ӏōY5UVs=f].z|k 7ϝݶIG>?s`QȰWǜ%u3̵|>Wzf;fsU>1߇9sQڳL[q 9\~e|59g?-[YAuDA{̈PZI$$NcQY4%LT74.qԾB=Nwtړ u9q;ZBd&V>Ԓb8s;kտWUMIÇ_/i\qiDZJx5熩VYg$g/|4\{('iMK;zKbDˎϾ?t>" ϰwZw> deMMv$`\^eώɾ2AόVwǽ~ o.jT< l#Q(:8>wr :vىj<2Q頣a4e1Qg QyeRKNU[ˠf@tߢ/Vo6nG ddԒ]i/PI$o:a 3YRLLKyFTJ:)(g\Q m4:N/ۇT0@4BjOD ]472a5հPT+#N(nȲ ~WGO@ NHvh Odj# i.:jnnSwɗk"G]YN47XdT ڥmRJSJpY*K= LHR2fXa1yW>ٍY<8uc ǪUgKQF+O5M#fGL tt̒V|džNpy)~׵Fq=QM]+CHG?A.z)/J%p(? C=6W~; 0O ‡}zQkVCR={|{`zcQ89fQAo6ė/RvQ t[urh Ir|+|Q5f<Z|Jj=M+nCDlauQ8L?z[_W: 'uP!%hIbW]}:֥_ ٽJ#dpaVϭ6a΋`¸nh{R rz֧gwUeWj<67uꆚ[!jBeUY*v£ -%s9jJx(GGS2|T.5uYIϖ9f*܋vu[tԝ98Uަt|G]gt.+~JszQkc6\?zWΥJ{<=;uZr>h/8ʹ턧^.w^vI"WRJ8R;s^ʴB'-Tg"'".<ֺ5^;Awco_ktjfq/{al>UdKOjDٝw'MȋG>VB! Gߖl{*[XvmG-wTLB_R9q HW3(*5DI&|T<{wzK+7nʻ:wɿ*Ggbs-Uq{{pԷ@L%f$^]'є"]˳nj#mƩfwXo[ A:.IU_͊[uI@w{'Qc)бYk}o^ u:ʾG?y p0䫶sӊ^9t{!eZʎ+M.xI%nyyiS׋5v3"|c0!*}Q\5)L!)8k  \sOd`W.[.QV]N5׊ĽTBڑn=Dǚx0cc$*}6tXM{TmzovRrw2-˕e]vAsD!Uiumc՗wqg.'DROϗUSA*MBuD⿫eS[mw?K#eǼԥ(!h.֠)"az䲛QWn]l޽5^SP}vONq{k9R}_?_]ߍKNOuQ=u [~|ޜʠÜ(҈vYI'sQ1*5xeKH&o_1HqH1s,luEP11*;CADFn7d#Ə@l6Ou3\hRF1 ́XG\hmaz!aXzdin֟jaeq隱Fz71m[{sO˩CoV%zYOu=jKrjQvSs 9zE#LMһĐ% ]4ڐbDFffcˏcؽ)On= ˞ f[$FO}5!$3/W3Sٲ) `Ԏ*l96jSY8R)æ/l#ɭ%z_F<ӕG!Ũ cC/e8唫WRuj̤Da~NeڗpD./f99NEĆ$֭\_LnZcT|~g&ZU2 p )\r5&n =x63xndBn=tB55L*I\"ר}gD}:w4~NdccL fOјS}t[Q"G'w ?CBc{cy7lD@iމch!Eo.uW&B$ңPOâŦ / KKچ3@˃NQB(DDZa b#Vo0Ğ7d팑DoA|E3wuk>=%j sz23wDxy؅=tK~GX@ o,QW'`͐dž4047OuoKK4 l |\$ƹ9^{uIVݐ&ÉHk?̿E`A"5o%mAr}TW=hlpmt@@zȵ6۰ɱ!J3:n{z1{ԸJ6Q Ɏ m(TVb$j;gp-=pxknc^>= k#(y4ß~6LD'G:4T4P(a 8Fd1eE`NJCf@MSDAESPQ$ -*@nVb<%#]v4`+H-A/} ہ%u7htrL8> XB$Ԋ:p+i)F÷+Kf*_q,#TB45EHCT2"! &@)R%$hI L IД A2UK,E"L!,1(( hR!ɡ B`0L r + G&a"*)@` USR%qP\S<1E$T**0Xb 6\h|>|{﹀SNǵf|17/z{k힥ުo'2CvݝVA~,@/U%ƾs8<'?+pBvzBiu/͘Q/ϰK*ObJaʟ]|O)doY¼&wi#W. WUk仚{?-;ڱNw8^J3{i15$oUR4!7X-+"rիסVJ{$vwf4~%$nN?pÚ~&V̵?*uN_S񤉟UXS؟j# 5},w=#Mg\T* 4Tzem.S3?7wa-79ce!=+hJ}.Xyr@vo]nGkTݷdҎ1Iʾݞh+zN=mHJ }'3*}Ʈ2 ulVV춗뉃jm:QsT׭4u𢈦|m{N.:8_'ʺW{׶?l;{d 96Ose0^wi7(~wx;p9I?٥۟)Yیj=[RBڅYƸ( np Sf\\~A9D0|Z̃fO?\^G<|Tŀa)wO *5BO:DKԘa2/,8 Ƹ ]MǓ`H$5e3g8DRF@dSB̝,&(Nj xped\q(M"& 31dQ"00" atJ^ Řd8/& ͬ4!S0ɁƇ*w`@]#(B21 ./dyɁ : < 6 "f@.0N &p feDt05A²  c'9 e1PPzް)TȢ/Lǎ))&w r积pK_~!qlM#^}f+Ti|XFLHc@H!Ϸo'PA L"{C쿞~ϻxK2G1qƕ%6ZbJی6$-= s4HS:Hb ɳȱ h7pbIf7h3]5VdgD @tM̦&7w6.@ waႧI) 14= ICƖeg{wO#& B;+h+FB6pUأb;È&9¼Gn85d$h]0ҊwHp0UE(@R;:&)"uqhʇGXIiI'jS*Nb6iq'";C+9)~jL%M!c⩒M(eByc vKwIOp>!Q8(l6BQ5tu|Ehς{GH&q4=Y ؀(W%ZSx$$!CBh(郸D:-!-dfbcKثI_ϭ$I ACdl}8Oi j6mP?%զѶ.].\{l6:i?#8Ԑco101MXTDt-\j12Uc<_n1p٨9d&P5G#T[X"؉"HMwPs\UPEUFLS]a#źM>l#U3|Y4-M-^f0ɉtffT؛j085Jz)[Թѕ=j Ȏ$Yj,uR5&RG :5+q1#hK)Ou68?w:ae$i# Il#g\W]#1g:Zkmݚxon[ZJBæG Thz57g CTr'`qLe* Kos )[3\X;c69/&6N6aW=_ta4OP_NB)86ceLAh0*XTߣj٘nOA/dFf. DkE7b&!3VEwؤΛ(HyA< *H;`$C3/)6lCf1`{iˌ1&C !Di/FrKi3z&@Q;lHR[;gC~>]_8AJߟOyi$O$MP`8I(&H9,l1f,$*TPx{b:Fo/>͢n?^7c;5&&P`HNA~f$0QƜI@49b;=' Dj# k.4s+$u06 4RXj-S?kX~!ȁǰ]7m[ZbVtvl4:E,mC9q_fѢMA0R4!f+# B7Hnߦbh  2"kX2КBws?Qd"=z(/ŁF h|(Q],##c}ꏘ!ҏ D3` Μ )JX=ʼnD=@` rKcc8a7ǁ#՞mF{Ix#8dh3jH!U1A$,Ŗ`rᙎC5ؗ.\{ I/فQ4Y2yBs'aZ*DTȫCjs'UQadDțLHNBw[@;(Cj)#ﮜO].Zq*@ti9:EiR:?fJRQB^Q5|7tƎj (h`(a~|GطXa)FJ!wK'Z^ 0ç.( 䵮"ƫ<|˼oV`hޠuQODmVEv4l`TzI7[,b>⚙ы;ıi ݕYMoiKP qQ|'8to)"G #⑐cRDԔosB(ϋ\[4̀uAk bo@[$l"of4IJUu2NSB H8"XAMCaxa4Wr M 4&er=>戇álM (, V #c6DL6[Lކ:5dS uInkT2sȓY-3f}pR 40PE>-<Mj7g tX!Ug hCuolqRum !L7O3gH9:M%͉Ph>>6?7"-3?}|}dx6X׎HRch=a8H<{@_WcClK^2oOCW >(tq=rD6 >*gk=a]ię cZcA<};L2d2os >DW'Y'hf58㌊>I/CG"mu-} `@_\Ĵ$DD~;c"쑑B.gGqf-SY}+:]gxcOUIu YBdCQuZ5%;xRڱxف(3$G6U 5q/1 v Lf;[ :uhD6 :4K lpKpdL'x:1f8"!L)$yT y4j?w NυfRD: ☟cAyc& 1196Ҍ`s_n:O1"|"*( ʯoifk@K0J%OG@,SC<1ioZKU^0Z?_y7&?Y}B~oƬ2籛MB }wiGQUSfN9GVs{:ׇ=8EϘS۝jyYysY?ˎk|8h(!tH9o+lt Wsam &?nOY! LXd\tYګmӄ! $y}z^1Z~As$[ShB5W$铰RW7gjM7OauX|p:ҋF|: jEɍXNOyQІ3Oͧ;GqQO >OJ^umcBŒ,f?\:wc|zubB2]MKy+Gn_рzx͎"S੟-koj/Abb,@,*oV@ǿH &gw7_Qv/Ǔt ihhkkM7_.Рd[TcË%T7VoOFw%^e+LyWC}n[D1RA?.&|GZU<Ŀ$Cw[8'hZs<&yTeS~POc9?,󮽷1"PC{&ϑ]$'od2;8g3E?X:NfG3 2ܖ{ ng}Nw3]ZaHvqxV27BN⤟_[н#\@۱'_Ħ? >uסc ݎjP+QQfh"]Ζzo&~qMk{'f&4ZKr_-r􇤩bИ^21߳IϷ I(%;65 V43͎>^{o÷l{RFA*d(*&G 0f2p@jtJd%M!I1IBf 4"ad2bҹ(a 1IRBRQaJ8ZԪ1E TP}Pe-.GgLə;|T{5~HNp y"tT?L~,T/H.WG'+/0a`'wrdcpCLic|>Oл&;0c Dau^49U$+6[jDQҊB cayG@s?UtF! 0KZ0ph(mĻ b% @hunÕ . 6sPɾЮk+D*lqiӏhLI@~NXx/ ^n2_"msͰv䯪eA }a(#bnO]o O' s$凡j b38;zWh:hOd\Zv[?WNmp,]`!ӽGKf&Zh*KK0YXV~TȡpcxI%F!^ғ,4X͈p:`Y ͎R`чCp H?Vm/@m&I M̅ >IJ pmEl f "zV5`.2 x,vPBE NX*`.:ynI(rtft[څL7 ȯV@lH9ԘCO/09:>(8;m^]ZIUOŃ[E`Cً❸f)C}~JϢڸ6r!B6dx`1" lpNHl88@$ >eFo>Hwm-|, ー@G""ClPJL4HN/iN!xbj2;$:JM!)G;0HLJߵf;c hW;DDt7 jOqqwFq^7͖hJGq|ZН$;&. qS3徽8RM=4J|ޝwqcNr~jD;ϭ7J؊yb]ygQڄ)==eOW |e?`-s ͡:_w0Xᣏw=P }b 64~fz} =U )H?Q$]E`Ɏɏ6di\jt蠑?_b-}3eMtk80!k} $55H4ul -THt@^_~-wzݭ󬅛UWRxAͼԊ!g<ʥ҂;&7>4v/[QSh fX\zѥbgz ٦.kۑ Ö/j=Fgath,9Gt:yE߼XҀ*ک2/RU5!NZ`sdpz-"~Rtʔg쇝G+.GH&?sﮢFG;۸̺'p(eJ 2=t[\?vDӹP_+091Z'kkRvʨZQN <&od÷ uKNͯ-+ #2xC~,goL5;5ZV\ %)Z alG3M p! H$Ƃu95-}TCR{ӂswO CQ.;偋%Ћ_3FMb]DJ=MUMOgv +#M|z.֢<1Q!xkEarn ablΧ#wܼ5B\ie'*^(7wym[Z?wIY"ِ?{ vU[AFrnFb,1yK1 >*TXtRZuD%hSj6}$(f+A'n {{a[@Iݥ1 WϗLs1qō"Sa1giIl`|}#h),0?O-\H9IqVid1ȫz~IfYP^DZ@gzw) 橓+6CHhQLF^Ғcg\c𷍚jZ$c/bF2rGMf3s{TiCzL)= ɰ,҉Vҳ72;EfeSt+flΙJaC9S5ui_y!p# \5CȹoiăjaY&i w0]#&]ynz~$"Q^~ 5Hu#n:qa>zE#DJpIV]8:TosRvYpHFhPqx&}.fFd$6KE6q3$nLvVO H㣏osw՘yhumX`I[t>pjO2ȠWL =dI!mCbU5 ciT 9]5m'& mZv,A5 L-̈́dJ 8P0bZi3{1::g|Mav,=؝N ol ӌ?A*[]!,OKSʫc`L ÷S7 bY{(:'?[eDw/_|D }BJ4xbT)7SAt ϊjzC'q|V{-;9l$:Eъim׏;^rXұ( $jxWMߡEA73μmŻ]VC( vĪ_* Mxtwak3 3sn2Q<CG1ki>n_ݺ@/1|cӯ;!eg$r)8iDzD8zhAT'ߟ%qc2گ^q囒,:#7s\L %7 *p!Miw dqߖ[ϊtF3X,3=`> rTc9X眉O9lisXfZy0cNڧ!в[ʡJ=f}s]Ѭ:f،ϕ*?m㴒NN㧺>N\:&G!q{ToO>u1޻-w-<.WG.z曆Nкߚh[Ot^޼9J9~xx2EtGyިAC͹9ф3eDL<[.'%EKdjʒ]Ki⌭ I)UӜ& yN-O*?ʰ0V}<qzzv7>=K>QύR*,9J-gׇ=䯅1 uB5祮R*'A5bWn:&\F/g"E_J:y4RÂf:͛e)l5qiD7ϓsll?yWhHaڰSq(3؅cN+)[ZanOI)eڴUn" ۵RyrgL][] SSVx䷂釻>* 3|Y'=ğRd xU0d&.:y!qF=Ah ZwT1y?qӛlc6rWr}p膸2QLJjÏzff1VcKz2B#eå7oHM:9[#~[Ǯg2/yJwX[gGg /6g|5ZAm[EtWǶ&Ds |2Ҩ28p8]J5-,h/9:5:]=_O] @f eQH30bo卑 T>\L0Pio{*g% ;[Z=ٿkVP.n$‹1p"%K^K=uEfyf9]c^_M o9̛D>)mqdyA/3Px~Afqޗ?ssF+v=$QKܿ:)_t}^1k|\r:~4v9UЌiZH~xҁąB*|Tm)eKV|62ƽ<5ZSڢFk}Tw#*CzW/|[vԿ覅z,aYc)D\{pº{W)Q]'>tM\n֭1BlQO q,dSAtCÛ{i;OW#.T!!5MDRCc凛jn:;j'$ s>6;=x8FXժ4oBL#LFߵQ帔*#9sy!!!UYQ]`&|2tvsT΁lleQ!Ltmk!$Vd% NJ?k0iw9+SuW_^F/,6v&h÷7 {pI#?1[SwXsrH=-YsDצW"-|u=S6AjI'3p'_$eEt4-d oMǎΣ+199LYzlJ{B!LSq9IŃvA?i{Wb2Mӄ_W؟uz:~:y&zs1yl"5/6(t Qd9tcyŪޥBeGNx}ro"5֪BE'GEɰF LmgJ&,>8ߏUןU?e{?߿[z"'ѡ2uz|WY/X3-tNh[Tqi.Çջߜ.vY*=*=٫黳.2aly یnɩzlȞ_æNZ*tTa6#T*zufp:o8*xͭƇ~wNjp\/waɣW(_KGOW4^a@)uVE^- zzm]\JSj`{iR,}WqkJ݊QBdetG4oͬ6PvCфH{EiBcmdIrL8z7/{>a._"hn(`soڙI px997K  $î,PLU?>s~JkԵgi>Gpr\{ Izt ёhKy2oϜ%.bM,Y_^O"]lԮ= M0 7PZ8t1м4*qp/J!0S@W^Irb@xqBL:ܯa}޽Eڊ եs>"i ̥aĸ}pZn!tpZdS(| %~%Q74 X2 Q&aG@-Cӊ9.K'(b@fh#Y0oF}j%rF`m*H@3'ϝ%;!۬Ĺ8ٴ#z@ݲ7| X/rH"BE qۇ"<-M!ʲD&ҐC@Q̂ PqOWҽYDmrܬ?s?r MfGKw!HWrɵqމr $IJ>Md7\! ǃ Dž(\#I ְ_WrM]jƟI1,F9(i!Шwж*j,'C5Ac됏bqQ 4ӤʀHfy ,.fߵQ(w5,Mo 0W*'7e|'Eò$B\c@3^0 Jj0Xb3WVn\ zu:!E MǿU?PQj=[D8 \h 5.','~Nu?5'ۻaN#:ɨd!ol}QQバϣ~HM 8޿7gr t^nz_ #XmT7/՗\#qԛ`Cwj|ވ46B"OME'H?,UT{m=oG f_uqԗZa0u8Ź6BP o6 e6)] o憢7׬_\v@1U.QCt@xزWqn(o X BE"*aS4 $3%Iq |b뽣@ݳ]$'n i$`x ړ|`_Yɡn0ՈQלᩢ(pªh)JPKx)Ԕ!BXB f:40Saٖ^fpin->ĢSC7#_a/*>o:R8UPfAT]լbIjcOuxN٧q#3qoPf`¨EVo<?Wn%S"1Ozg+8| 3iV!/uR_'s\ ֓F.3Z6S&Ekqxx}*r_˓G.#wd&KDLD<;S)pN7V&`k|.‚5Q{ v2Lȵ9spDhtId);NB#Z̚J YE.bQƣP$c1I$@XF(ԓFkz 5.SMaR)p?O&8Ia,f֣f o[[:08SD5fqMR%L^jF:y}4J !_݌eGt.Z!Ӕg^Pt_⺃ncgcC?:\E8@2|@rY=r6˿‡exkKs_XLMZtxTn1'~Th&\Z}lbhrp><.ا&/1Q6C e.L,az;npMS"5g.N-Ly(SPTKN;ÝIK3eDN[jAt>=W=_wHB~qc=#/e\9*--B5$ T 65VrJDKO2ƵCd)()(b(i(bx#>I@WR@uggΕ+, PڸߎPCW~ ,d}c N!l Qpz}|}5ұkg4l-L\x:{ 'T4E v5 \cUhFvHɼ9/U𙄰ɘ䪺{`8nHJ2- H. Ě%@ߦw$*$>SX!p'fm;иl8+"s9TtӴ,)zf׬xA,52j݌ܫXb|k5J;lx%ɶq‚ρ1lo/="=NE7o)r.N4j5ζh85 ߳yvmot2-fKn83'[ӯdh1|0x}yF^?&㍱aky:w ǡd#w)(YM 'txhH2*)jI$݌;-ٱ~ۭEgF/ϥJ0g/S!ˌlbFaDZT(u,|v|3k9q;Z'}#yg_y-Gp^gWt3J'3R'veg:"3XEVV:1\VG-aoIYYpcN%]eERcWSsJ]%3pDS ^b3 2Rf_LxQ5/qfqY{j*.Vm8˽*zKPϊ|jiOqqqoNHJ>yG7&nCUfvw.y{#ǚ~Trl ֶjMWFv)Sdmjh0gߢ͎/l{Tuy.6N-hD:G\T b'xc!XADz1-Pk đF߷7BCJ9!C=ᡔ$?ݴ2b8bDJsjNnڄcf8!РO|oXv#D@;sY.W(hgD @bQf:VFD>""ʧ>]k8+]/NOڗ2QI;6j*؊덊 @À;fe" " &m0) OD@ǒz{ OאY H}I}`ݮ>϶rcNC%$&<4@̳4AC;1L^d"AȐZ3{zjhm~4DCخ 1W``ζz(3DUT&Fۋ9m/~ʨ)zOmo"cu16.R 6<:O D 8a4왌 z:xr>7+Ruv<[; 94Nh!j wI)BARE$2|_?Wڈj]P˜r6`aSM=G "kGQLA1a 4!Y* [U*?[ Cr9Hi8 B,JDYにM s W ;qZ/wT4JNӑIE'- v_ڢ~Y yʿK0=;fڹЃn" 9>a򇾖 |;C=F