From ef77a8023f5589f6bc44ab5423e7f4caf2efc46e Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Sat, 18 Apr 2026 10:06:24 -0400 Subject: [PATCH] =?UTF-8?q?whitepaper=20=C2=A76.6:=20naive=20GC=20+=20meta?= =?UTF-8?q?-GC;=20GNU=20assembler=20called=20out?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds §6.6 "Memory Management and the Meta-GC", covering: - Bump-only default: why asm leaks, when that's fine, when it isn't (two-crash anecdote links to the CLAUDE.md safety envelope). - Naive mark-sweep control group: GC_NAIVE assemble flag, per-block header, stop-the-world mark + first-fit free list. Control-group numbers: bump 134 MB / 1097 ms vs naive 1.1 MB / 1431 ms → 124x less memory at ~30% throughput cost. - Meta-GC layer (§6.6.1): (with-arena thunk) fast path with three-way policy — implicit-GC-fired / no-mark-in-range / mark-in-range → skip / bulk-reset / sweep-fallback. Bench: 2000 arena calls on truly-transient workload: 2000 resets / 0 escapes / 205 MB reclaimed, full GCs drop from 200 (Phase A) to 1 (Phase B). Escape case tested: 20/20 caught, data remains live. - §6.6.2 What the control group tells us: three co-resident strategies, two stats surfaces (gc-stats, arena-stats), a concrete floor (124x memory, 30% time, 100% arena hit on scoped code) that any future proposal must beat. Also calls out GNU assembler (GAS, AT&T syntax) + as + ld + GNU binutils explicitly in the tier list (§intro) and the §11 asm tier summary, and updates the stale 4,968 LOC to the current 6,645 across three locations (intro list, §6.6 narrative, §11 table, §11 narrative). Reproducibility list in §6 now references make bench-gc and make bench-gc-arena. PDF rebuilt; all test suites (Python + C + asm no-GC + asm GC + shared functional) still green against this revision. --- whitepaper/uncommonlisp-whitepaper.pdf | 3724 ++++++++++++++---------- whitepaper/uncommonlisp-whitepaper.rst | 82 +- 2 files changed, 2265 insertions(+), 1541 deletions(-) diff --git a/whitepaper/uncommonlisp-whitepaper.pdf b/whitepaper/uncommonlisp-whitepaper.pdf index dfd15ef..590fd46 100644 --- a/whitepaper/uncommonlisp-whitepaper.pdf +++ b/whitepaper/uncommonlisp-whitepaper.pdf @@ -3,7 +3,7 @@ 1 0 obj << /F1 2 0 R /F2 4 0 R /F3 5 0 R /F4 6 0 R /F5 10 0 R /F6 14 0 R - /F7 27 0 R + /F7 27 0 R /F8 30 0 R >> endobj 2 0 obj @@ -62,7 +62,7 @@ endobj endobj 11 0 obj << -/Annots [ 7 0 R 8 0 R 9 0 R ] /Contents 117 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Annots [ 7 0 R 8 0 R 9 0 R ] /Contents 123 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.d3ecd28ca03f587d6940049748681018 3 0 R >> @@ -74,7 +74,7 @@ endobj endobj 12 0 obj << -/Contents 118 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 124 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -97,7 +97,7 @@ endobj endobj 15 0 obj << -/Contents 119 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 125 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.a2c922509fa3b1785bcd08461c0457b3 13 0 R >> @@ -109,7 +109,7 @@ endobj endobj 16 0 obj << -/Contents 120 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 126 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -119,7 +119,7 @@ endobj endobj 17 0 obj << -/Contents 121 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 127 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -129,7 +129,7 @@ endobj endobj 18 0 obj << -/Contents 122 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 128 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -139,7 +139,7 @@ endobj endobj 19 0 obj << -/Contents 123 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 129 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -149,7 +149,7 @@ endobj endobj 20 0 obj << -/Contents 124 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 130 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -191,7 +191,7 @@ Gb"0;!=8`+$j31%en endobj 25 0 obj << -/Contents 125 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 131 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.6378944cfcd9d967b8dea9d1fdf81282 21 0 R /FormXob.914f0cd152b732307eb1a2bfb0d863fa 23 0 R >> @@ -203,7 +203,7 @@ endobj endobj 26 0 obj << -/Contents 126 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 132 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -213,12 +213,12 @@ endobj endobj 27 0 obj << -/BaseFont /ZapfDingbats /Name /F7 /Subtype /Type1 /Type /Font +/BaseFont /Courier-Bold /Encoding /WinAnsiEncoding /Name /F7 /Subtype /Type1 /Type /Font >> endobj 28 0 obj << -/Contents 127 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 133 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -228,7 +228,7 @@ endobj endobj 29 0 obj << -/Contents 128 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 134 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -238,17 +238,12 @@ endobj endobj 30 0 obj << -/Contents 129 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] ->> /Rotate 0 /Trans << - ->> - /Type /Page +/BaseFont /ZapfDingbats /Name /F8 /Subtype /Type1 /Type /Font >> endobj 31 0 obj << -/Contents 130 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 135 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -258,7 +253,7 @@ endobj endobj 32 0 obj << -/Contents 131 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 136 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -268,14 +263,44 @@ endobj endobj 33 0 obj << -/A << -/S /URI /Type /Action /URI (mailto:russell@unturf.com) ->> /Border [ 0 0 0 ] /Rect [ 248.0736 227.4236 334.3536 239.4236 ] /Subtype /Link /Type /Annot +/Contents 137 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page >> endobj 34 0 obj << -/Annots [ 33 0 R ] /Contents 132 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 138 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +35 0 obj +<< +/Contents 139 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +36 0 obj +<< +/A << +/S /URI /Type /Action /URI (mailto:russell@unturf.com) +>> /Border [ 0 0 0 ] /Rect [ 248.0736 434.6236 334.3536 446.6236 ] /Subtype /Link /Type /Annot +>> +endobj +37 0 obj +<< +/Annots [ 36 0 R ] /Contents 140 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -283,15 +308,15 @@ endobj >> /Type /Page >> endobj -35 0 obj +38 0 obj << -/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 1117 /Length 134682 /SMask 36 0 R +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 1117 /Length 134682 /SMask 39 0 R /Subtype /Image /Type /XObject /Width 949 >> stream Gb"-V"`tI1gW/hpP5kol.BZ)i3%_L.$P]L(O;>;:ga.3l:cu]GmQlcCQJg+VOWm5G6h0.]mo/B9r26#pZe9/[1Mtqs:YfQJ-DMTKiCGVLPI:R7q])!!'GQnT``mAU;Z(Lt>=uBE/$?9>k=*GJmtk!:0s\(sj;n(]XR55s,>O!!$!:@fQK/5iq%d'+tqPpFP=!5(39ld?(PXcNjLN!79!4P:(SAg6MFrq&j&;Se1r&!2-[Zn*.6&jU1_9[r:r.zTVZQhY$/65Mi5cJ2fJ>WzTLCsI!!!!ug3EPfku77.oaW!'Zt\!dn%SZo&onYoWq@YYF6cC?nioJq3fUtS>LET5NL=),pNJ,ZF-P:BQ^M8uGcQW=lAs"aWT!;*+Ia)BhIfsPTsqtBD'ZIZ!Ra3W(MmFnsHVbWKgRk7jQ(GB)cT-mF+80:taI7fbSeZN2i2/CdeRPcTkSihiB-/-"WZh/P8k`PN5m'G$f/&Ui4]p"b.p$,,lWDf_EEKiZA[r:0sSuemJObhV6/I2=VJ0O!t($!>qQcRmR5m+N+kg6$OZ@;au[A@s-cI1.;9,G"tmbPK]?=%?pVZ$D\^Qk+@2bnJ`hHc,];>#JmLrTJqfT4tKi6]hI]k7q,72:mHc'tW>/76+r=sd%:XL9PIGi-5`g(eDRW[3X?fjgBY;^@S:cj'teQ561=LfO6jia"5FpAKsB[rZ+\VS9+!8%hAZ+aZ\O,F`'G4k-#V'RN<86Y<1YHRYf3,t\"N#=E@q7;%RHK?l!g3DDR="e8JGOA^<=BLCm,mFl$*#JL.BG$:+!3dQ`A%a9DFEW",50-f>XAGTWcC?oVL[suU+*Zqq+oHa$QI!u'm?K/$;V"k-nZ#TiA5U0p"g_a]ip,g_\8gQlc_%8u^Nf:CEokHl/V!ct++J8jMQ@oD?lh@fni!,sh[5!C,5+aVH90ge&-!!!#;\T?rVPUVeN@n)o%0&j-7(@`4A!!a,V*,OVQlA

0&j-7(@`4A!!d!05MX1e)jd>Jr,Hl=[+W+t%$CO(S\0&3pRdQO76CbS^k!&XmAfM;*q)(-]_H-9N1RK:lKVR4o.Q>iI,O'-ddgu&Y9I9.oMW(tCtP?#dkfun4gp+ce,?+YORM=]>:>:CVCO?Q&"]_Sre'#f^J!!'e=LrX[=p)K,`Nr)\n/6o9pNQ84sFGj]m?G(SoO1k]0,YXRh6Up1KnUfkariHV=^;6eHh"Y%WZ>HLWobo_[OsFb1[-=sf=;K$1O$5#VgV.a@/j1[cYN_<3nVFG9U*6I&iHNJ7l^5=lfTDa&G&@HsplV9;J%QD)$l>!7mPUd@0J!5N;N*05T_&1VZG0)j#8\]^T)Z1?t5U*W"ThMi)OC_Mjo.9&\jmI-B[W?#k>I@E>f8i7ZZF7iWefq\Knc3tUGg;Cfq2IuJ&/+FGV!2j7F4PmClEofgXo;fV*WlE#1l011/piW!\$^/!99HMlSU)HJ6`_#`cX+5a4NU=ViScM7dYps/'iF"re.34jH6c%Sp*io;1RWc@=M/sTHF+ttCM0"pCUVK7%U/h(72q;5/I2=VNl$\DfYm*t,Vhs;%6O=AI.Cn6c^P.J%1F4@l1"-XUYSPLY<4mro>1'E9DSgN#RDFIo@DaO7GE8O@e9^Z[IKUDVi<$Hlfm/h)g;]/0m[rg1hG'oa0/Q\fIkpD`e>qoKg'm`*U!9o=0a'VW;hsAZPTgXHN.n>O.6*gA#85tNM#c?hnd3cNLhh>nI"[D/C&t+Mg4&[]m?b2%@T$'o_@u%PIRZ1$!t)@<]kZl`rCMa%q!JaQ*Wo..*'V>Q599=?aXZ@Hf0S!l)jV$OU[$8Qj93,aS-;gnh=65\Z4t]r>g*JF'[hEGY3q!%@X?*U;fs5C[B#p2sdT7J[/4YQ;%T.8jjnB\\f)uBnVG""Rdc&Zl7GDqJnm.IAb$-GC+Y/\sr-5;:XB+-]?$l>C@H,dhVp6YaRS;EkA]ZF>b&WZp1)?FNp83I9i6jN1?AdR$B\\+Ju/99j]C99Rp+*Ec?14LS_@cR!pu>kK$nQ.)L+[2R29'YX>JfR>0c@fQKKLi).Vl.;+J.FchiCYuDSeII4%Nfh]mlte]mF/:B954$4cnP+.$aoNGktB(C?',ZB>.9cnJJ0AGLE66/G\J-T@7moINHf9YlHsg;r._&]N%\&]kVa:4'_*"?!!cu&G\m6LA4d2Ge@_'T;0$TD[-BY47GGDd4a8@o&]maXD4DrrK[C/l>lo>LZ_o:Ak,+XuEG1gcZIY2tX(a9o^%oVdUGF*<`DqZDhj$l/>DB8`TioF5Mq?;f`*'[#AbH[%bGROS&"0kQ_2Z7qWp"j2R5meAVk3D4MeL!tNR65bP%%/jiXg2ERG3+nXm?kiPJ\uuap5tKdB?V(?Xu7.C0i5kD@Z"CHErJ.Q31)6Um'ap;rU`Vjj/[<*,-eB$]H#jV@$$)pAVhnK]/_qs1fj@a]bI83&6dT/>8%q%"C@4ZA>6`jCQB!!"tigVdUNY:$[ChIG#E.eb!nmF4ktE;&#AloB*cpE'@ID3*'Zh%StT.?D>"*KQJ@K@Obi7!f`NHLJ,EFRlL:7^Lorn:^N"B2MZVLrU`?fUET5P"S;jk1_7rgG`hYlsO3,KHn=Z7Fo?LJD-:8DJ^9aJD+>^@h,8<,^$>\74[>QV5nG)E@YMJAAEFkNe18BpZt=&tt)?SfjO%ETXnS#EG:AU[0HODr#V>%Z^R^@6rB*r-nHBlr0`#=?2s55Kk?nldDi;Hrck^i.4_ic*sd364%rdL53';e;*fe<$kH,n3:Q>p/8?0+!ZoepaMp"$CIW3.1G[Q3>%!!#d3id6_r<)HqsNJD'mnbCV+2mmQX<:10e0QgDIpMS9>.*ab+CRV(U)Z0X<%l=b]lpkmO^d%@#nnVJ?VGA;HOmY!'DLRT=]+"%Ct[s,`rH*!%H=XPb9#[5NQ85fS#%oRc.8\eDo_:ZX4Qq48B$JoiN,DF1(9kkgZAgDu7i&Ws4KJpfpt%4AdAPL5[l0koegCF1%IEDo^P]j/Crl=-!@^M!'T72D0?4a"nP0o0\iMWdQSBQG&(/h;)ktW>GG[XAlJ#6\"ec"re#qS:Dts^]HqsYg+=rG+4Ku-n^Hc-_R3rM?B*>XM8oSr+B#Y)a-9acNlOUbf[tWI2ef?kj4fAEDLbb\KKE!,rXj@iLat>Wr(h8TS%D=mNL.?i2ijBV>1]R"+d2,-adopOcGJ?;m=peb\r*kd7mYdq?a(X@,YQ=XB)WopBt4!.b"R%LrsX%?5*On^tim&,.+qYM3sMU:&C$nkNN&Tma#L`>(*K\*MgT>#oS@ht%pjDVUpJP$3^_o$uqUhK?SK,YQZXn4A$+psVQ1r'?^1a"cBinJD6+#@dNogr*\AQT`:Il]5@$:Jo<"-0obLRWn&EVeN1i?^CZ5_o&6:[pH>sa,'81f&@FmOt9c,n!gb!hmI+m8lZ9(6eZY=C-4+M^1-*?8Ld]BlJ'%ZFSMlQ2mQ!FZ[/lXH"WjIK8/4YoT.HK='2mki\:E5%YT(C=(Mp4=R+,\3u+eq1V3*9I>3]D@q397OoB'$Xh"tKgQG\,f:\dRf4_X[3='&IGC"tlGfWra6Nr]6"+N.d%.Q`L-9)Wf.oU$_uq[XSls%3@B53FLU2/Vd@*dn8_Hn!p@/\;&c`t&&Vr0G$OjQk6d2f!=9^3o\>U6Y&"N#F'lITj,Vd[eEJX7&+AlgQVBh`kYh$B1!!!uEn^t"eY2XH6X^<`7b0cEFKs_+1*WlE#5`!I(B>f:-M/E/Aa!)A/kCuZ]\4(T"b!<@'W`+'`&n^o:KGROS&dno$YCl*E'I-![W"ouGAKSG46M[0+OlXqmgL(56(pI,!hi\)Tf6m>crih'6J[Z3LPeXEmgT7[T1GROQP*)>VG_83s]TqQeY_Cj'$29TA]m+J^8mtnsj[r:/!PUMY6F1ir1(Pp*3!8%hMMU\Y(V+Qaf3M&E_WqSoOT>/.U\$u*i(GGEPLg;,E!ru^nLrW]A/Jam=GLh*b:@?fAB;nh-*^4t]h@m.1`+&cIlj*(5aP==I%0j`!.SN?!u&N`o_9ASCY/mc2hpI+?RnJD6+qa!?)eGT.6%0j_Q?+]a#L_D78U-u\@p%4gZ!!#:FLrWAl?+Y9gCtYCBH(t%$SBC9U]B,8=E8Z9''*/(5Ln%*PUAA61_83tXV#T8_GLNE`qoq(WfZAN2UOSCM7I4bQp=:;c!9e<''V]mYDJ3]sr9:t0d3;Xnf7*\pfu\U]^&PWak6qP^c^m;eA3P1h*rl;VcIJmm-Yq;7ggX\,X]r9[SNAcKOTkdcE*RVUhG'=hSY)OHh@jmRGOF8Vo^nY;ICe8K!<<*bX=RM[`7h-09(33"'Mr6`^29+I`R'*/(5J9@qrZc:PGFlUK$H;DKL]RBZ8=0>fqg9oCV+ohTCYbla>l=J2,n\Kh_H;DJq/76-H?ne*8IpVT#!!!#7RZq#->./7HpI$"FkF[61]68&)B)qu4!:/Y\MjW5-DkDrGbPqJ;opuEh!!)"HK*Dc?AB;P<(2!F:gM_ud0[1N7X]hRq7-r*OE!!!#kn`\AqbaC8:pYC%>:W+k*5()#%`F\Mp]m(roVHE]dEj]!.b*3UjD+COk$L6c^Qk3\d`fLg==a(e^rF)Q5d4Rj2R'OQnVs$"qC3rLab,lbZMAoiTACSc^[#eqXnX;:K7ApJ2m2hh7J:E%uqPcW_Js@D;2K.#RHeWEMAHAf9]inR3Y@edA'4dGe<[BB$HcN?=#o`6$c>FP\JUDN?(*hGOODZ>>3(t*G<]iIHATd^!Bp`!!)?^j,ZDM%neC<#kZki^V+sd8sa6SHhK!\NZ@TYZ">Xr^.b._ID:70oU^lL*^"\OHhZr:_hQ8d;mU)\HMI!'hD535!3cq>Ai")Fo_%mJ1hi+9r+4ZD*BRM3?'d0LWqSnt8q$mL'.1A;o;:@XM6Z*]O8&%r[q!I=HhQgRHS,9u!3u4T_1SFKLN`.CrR@fFHI(]&r;?IjVbV[+eh+Q_@O#;i@JTNXDqVFmh@m0@ldr=irqY_8D;$ODZK0iRGC!$i!!'f$2f@F7fsBl"_1V46^T[B:ro;\6g1(F`8#r;JF>Vf`Fc0L1(2(GB)Oh/12m*GsN;iIPnI!5MIe]mI4o]64gl9QqF?I_1qXgcODI^\F#n.4N$Oa;cX8i5#@Umi^8V76YNqNb]-K;9ulfZTda3EuMj2d?-15A8S&qu'pg0f!\k/GW#%3'V?HiO'=hm)'DkK]VSA]eQ"lf[nta7?iBOsEVFp[2n0gU1hKr;?I&*^",*=TJL&=R=%e)ns&#jugX8dWjQK=gNPRp;P_ON%+9VF99)"98F0Z/FQurr)_`o7+FuNQ220'Ni%p[IX.6++I8h7]^I][Wh2sQ!kuWb#aGH8r)TUT21q7Xa^6F'e32Xrql0IbaG6?N).'gUr7`\qGj\'\REC1bEa_Y\(.BPT>H9ib8e1.]j4oLoB+.U5b_L(G[<(_\o13%T,rC`/##IOsPJIk`PcYd'IB2)Du8/Y?lY8^k)&,N!8f0o704i6S7u/-KDROflHZEa[U3e)`))b*.cA(2k)d!il[N:nr)/^bEkqI!rr>Jf73l(mqnNOl0/#1(?at&`fMCVFHO`8V@S's1d1WjN3T88R!%]DOj7\e]6a-bY$AM8VbTB`_?:`]!cW_o#p``hIJ_U>_8U?-r?fudQS)Q?:ll+Fn*_o6M)HE!m+>1TdCpdLoPo\%W\7\kaHS-;KO+u,')oLdmCH`D#"dXCIep%flLa>i0q,#.#:._8C2&04)`MZ)0k5rcp%7l=J,[+7B>o`CEWejl*#\,m,ZA!TAkfYg!!!#ko'G$c?XI.r?U(7&A"tDQABU95NQ6q;acdYP"uX[hIJWU*iPXXC*t9TuLP1>Z4XHjq94EKYDo(DhMk=Lg^.9a*Wg-N9[6GhU:J,c'$GO>eQ.O`o^9:%7_mFp;W,Sj"1p.9&I%PCmi<]PKuW7iG`:g-Q5iu0di8=t]^VaPYIU71BAhgb+Ri?<3JHhZs1>IRY"5'ZQ^d])qc*TkSpbQALB%(2=lReE?3)`MZU4AVJ,Tsj=C\PrA"q>$F<8d\/eOl!\[!!$CS/mPn/nQ5j[3LuqY\O%I5.p&lY7dFBlF@k'.Rl@NJH^Zd*,b_1jl'$7rB?tHPIbM/CeZW^MQHt`$h;$dtc'kI;ro&VSC0/&jl]s@C/mML?0b]3>n])a"5C`\1g("`!UQ*<$J,QeIOk#HF9cSpZVs-%-Fo.CO*JeuMlUBY+9F!9iOr?[n>cD!!g/,E9a,Pj[A>VeqRCoihb#`:V^M;f6kgll*jMll](Fjpk?VBMkTu'kM+Ee>[#YEaOJ[o/*]edg%/Hfgbn=);2WGYB4R:]Xd9EikU*ImFnt+[Mo2HJ6jL<8j##LRm%<*+X)tCHe;UgNdABX-Ug&m$4\U&-O5]m=!!$DR2N,U/?G&gp/=A';r_N@E[r6VY@`XWSdV%CIF_2["BfDK\m$*1X"q;K(^OLjBN990\UKspHp$-9S2J8VDDT/+J&okA&:JEaI2Ti3K'e<>?\ok(-14/_2g%rp\1JJ:S+Eka`Rl5,JETH"0?+S*q1f']*;>\H)QTig2=ur0u$ig:oT)!@p;H(l23RnAH"U"rrm'CBQ,$F!hk*@i<;Ye\MF(_6X5Q14QqXj#NV+OapBMll`=gM]L%M"M@h4mK$SiC^V50-f>PRgER/ld3-*&parADtCZAHW(kl-d\g7ZTV+o[?S\hDQ#ri\:E5Y]JsI'r1Y-[?'9H?+kPagIM/-09nr;1M>#2o#i]LcCNFuMo9;b#7hkUg@CC#7hl?YW$^i<#L)`rr&09?.-G34%=ieIf*;;4+@+;nn.(@]6>cRDVr/Ke\RY\@WG]]I!E!M)kg:XNHL0:h8:P@t+X,PAV-(K]^$PWV*BTuV3*O71!!$EiS11W5mbKsEil(!W0E/K.U.(!$5Q4cSfZbQO2gOuTUIUB*UKPRDbEjkpc^qh"s8HX(GGas@!!"u)B8S2m?bZI%UQ<.cl76p^ODT./hRsj`A4Yh)Q".2P%mTuR1hkB.Nul9fXQ!FRil*9>RUgksB0+oM!.\!gZFFrAfJ*mI&*4"$qtKs[lRZ2ER.EEsVr;1L)ZTkW50asGr;HR--Vf'J_?IV#'#",4k=_2WHM+;p'1?V*McG]P(2ZNj9A=PEX*'\o-_o"iek*o!:o^LhWH;-t)S2aBCUqU2'H!dmOQ4hahu5`-'QI+\om>.Dn[Z-^:]Ktd=nouDZBdQBfKm5H2[S^iPL:APq"(AQnMf1ai4rf$PY"^j-7]O/*HJpqg4KiVbNYXj*Yt-XQLN&!,riO**6\&d\]a>A5OY>]"5K0]6@&Sq;fY]a$mn`_aEQb[VXX)CY.i/-/3M#o*k["3!X)U.jn,ar:o<5Q&EX3M5)S%XO(`TWD]R5M*QpcT7$4OcCI&iR[>ZelhL_b!1\f8`K`B#h?4#eC+gK@0A*^Kf1qZ8]mKM!?nb!-a$MP/k006s?b`be`,*Znc8P_'i+/?/Y(VL_&>K:8IKD%%f.X\j-5m;jUY?Ss,^`!!'h13+#pQ+BkpQ\Yq.2$=0g`Sih9RdVPF/A]cfAcIdS0H?$[j%0-Af)5iED@:RJaKABD;2LTpJ`D0P(`!>!rr>R'do"l]6E^=QS+haLPO7\gLe^!fmY]7(+jQLFk*@20/"u,?W3[,-U-Df!.]-0m^R<3mbRHqb8]8Nn\GGPfR>1-`f3WQ+G#u@'.-C$l.u'^d%,6MDZBdQ#rm?$[a6?;Yhl-jK3JS*/q.J_b,0E_UcgN`&X,G(ED!!'fS`LjY\qt=mgM&*7sY'''][IMfu[bTlPOkk-:CXY^7"onW/O0A)@MHIf,!!%Ogi\C+E&WZqm!5aT5eA"F7"onW/-QZ4d(@`4A!$IeV9`826@fQLZE/0Fn&$PG^p+^.OlVrgXohDK9PRc^U]>n424L/UNCgrL@YO8rfGROQP?p4gTa"Qj$OQQYr92.lV/o.e%-TZgA@K6VIYp$)c^m12OMC7XIpX#_k2G8NCF5)[hDK7Ca&S&<]XW/N]/f,$@-:ej]PHPd+,4nJ)Vt#_YH,(+)-oBH5,c0gb-kLJY3\td0kZDQ:QFku0O=NK&*cYI"onY-3bOGm.i/,G4BW>;WLN-?TYA+Y2eY)isGph-%u\Oei19`7c+WE-o$to6;8`6qHZa%+^>(rP.R04#CkT6Q4P\O,l+=C[9MX#:ik,e_[cA9XcG?>:(=[a,kNS!!!SuV"$Eker9%bDU7d+B`$$KZ+ooKd_DoQ2J^q>.V4KJ\T;=>\ntPQAG(J%IR=@IQ2^>?W^l6lZ:`:ehl<`$le"b?f('!>Uf"h()c]"LoC27Ye]P=8qQ1[lc/576o@e2+!/\_r!!!A(N5mB1-dA1'gSiGYp!]-ub%fX0m^Qr^\umrj8kEWToKH]Wlp@Ltfr$\+32W%!Gl79_Oa=Dc2#aZC]>mDmf])+'?&6N$!!%#].H@\$=-(C^kj$dJ7m8bJ<'u8LEk+%Z7Q]M!<<,$c7.fDnR):qaVDdQ'^48E@EU"TVG37P^4',Lj+pL6O;^3TX/i;e=(R7P\[>5I?9Z%t\_EfKTmZ62fCeUh]NN/;718:F(0T%jGhh/bSu63f)(O(t*a?'Ai\:E5JCQYk4:Zl@LN;NApK21U[)$Wt#"bU_?Bp%H+C@m=gOKZ\P3;2:Pnq3'[mk[NZ-ceI@_,"f0`V3(eN$,^VIEoN@fQLZE8iVFD\8$2!!'lma4.jm49bcc#U^Zlrtb,A!!".3GYJ'?`+&cIJ8jMQ:$Uj="3VL>$67K6OMC6+-W]IqT1Flb$ig8=:-=R6H@0f&LH2]>O"t%NI"LcbMR82[!!!#X`8eA2;+!Do0.#l;UBO_[M8oSr^s3OQj1:\,?VQ^Hh94PqT8DeV*WlBBKKE@"Ie3'u+Fi8pF%4761IkOE32YlP5J4^7L>&jUaJ`(4*a?&hk0/p3$ig8=99'jM`IaLFe]-PCUSR"`\s4O+C+gC8]=ZUs;c,_S&*bM_.TImrhS:7:Zt,"h[IH616'UZf\VYDI):25!jhns-L.+2eRT7O':RQJZpVP,l&s!%n!+NhXj)OKl=ga7'c"fs^lXmPZ%VRr"s$%7FcYmd[2JH'eaI,2TFD070\o\520h8k,L)!#.GT?)niW!4p0(VLD-/>qE>us,GjDfSPq>71ghA%#14HAZ4QoROn0`V2=CcGldY56BZg;[=HbIL#,U8&W'DdM(j?0h-Fjk=r!m3$.F9u=*sI(k.+n6BL!$F1i+e=`F:Y5A;oE/G!.aQ`'9>)T$qfmJWP)lPB]8kY:I:*)76CbS!!nWEnQ>)8p"_,7N?16abIE\jG&<`]p>i1?M:A\cGROQP&0@J'0kIqP`rH)>iP]6kh]a*D!!%[6>!26/[@*i#'DiU#+>2Ag>P>:,i\:E55WJ;d5.5#5gEdmC!!%ZcO6pF]p97i^0`V2=\@ooBa#Eaq>Vu;4@@\d*m2`KB:;lAko)=4%$V$*akW!qSTYIYsME$3h2*Inqn3QH<_j/^:[>VJqSMJ:DpX[`Nt?C[cU9pG^+YGg0qmV+;s@rfo8HOmbRGt[%BLidf0!'GROQP@)NQ8nP>>R,Ys^oqi'Mf4tl^!nI[W>rk*&PhV?f6V5[B>s#">D])&[[Mj-0[W=/tus'Dgdnu!bZlrc+o*P-B0'NI7*Sj+]?QLsH=Bi:k][rn"b@E84YdaGIC';H;#(="T)IsQI6rU2!$(]XQOLqUc;M5*\5.orH2]@M*dqDB[(i`#[Lk2B`+omPbh3`ALdhr_1d:&7L)p%#(;8D5mL1M020Wp.!Fr-^N-SeP0ej*WlBB(pUPpr*dl%P1(b=l_A=P[rn#-((V_aQ29jrkBB:X7Bc\OR-2AgY-+pgDsgV/cMtKPd]'X$\,6ps]'#1SD'^&l"I6A?8SY#1Thk8B\Rk%-YL;g%O$6N5QM=Xq``LSJAp@CRA]Bf0jm0SD!U8Yei';&po?=-'2\S_`Mtmae+Pc*/QcF(Wbj;?!*NU=`^6[dHqmOe5p;C:/WDb*Es.7LZp5sS.!!$EFhVtfie-Z+G&pn?]gAS2b^\?*_VaBSB4tU:&E^UD&"[j=-i],Df0/&[?H"a*WlBB(pUu'/G8N/m\OtpNXY,2A\A&Z?1ZQhojr*rc:[,f5I[UDpTEkM5@]MN^1c*ea#Eb,qWjgJVW(,OM-+N%VmlEB3$SWO0R@N+[TYTbf%o.6oUPFjo^$rIM8oSr!(Q<2*]mD.4gVuR1LZ7mATXP9Cl3HG!!!R*4H<^lR5VR!f4N0`Rl@JYdX=k\kaZ=76CbS!!jqn;u[X'(]XOYS9Ra+>Jt"O!.]%J1%fGsNr]4\_MQ=_^I:6h!!!9P*`N(SnJD6++PaEq3)`:b8][-E(@`4A!$L'OEFnLhYs(pYEokGt$Q%B@(021`&e`fo!V%!,!8'NXr)UA$2Y&*Fl3!3gO_(!@/L/]7Ag!!)@*EQ']OA'8i*!<<*]7pN;-n^oUeDZBdQc4O,/6Thdck8OC$Y]I_tb7K^d_taK:!:1\F`A5AAbAb/r!!#)N>d4_-fJ8t8!!'g[&Q^MN4LP[])ZTlBF2Sg:&Q!'<\UYmg0T17W7_!5Qkl="H^$[LD=d4_-fJ8t8!!'g[&Q^MN4LP[])ZTlBF2Sg:&Q!'<\UYmg0T17W7_!5Qkl="H^$[LD='C6!l:%0-C\3TKntk3,EYto"hS":!mHlLq\4`/@HI'RHE4u>Q!';!6>R:]C=b[3^7lPB"-!!#!cGS6);]!cC9^TUfc#'ZFn4WsCP7boHSHpp.%!!!K\T#BXs^TE@fr%U,hK7EXX]$JXCMKfO0!$#1TMT=DVAlPoSGOO&FbE@RDOM#8XE8@GT9LV&J!!!K\?H(s.b8/\fqKHj1NR]PGepVki<5`8H!8u5`F$/,sZ+Z4d?"gVA+Fi8N46M>]3P':LoJ+7q:(QWf/:.!@_6q,>-]I=F5-XpqjV+6C%5HT/Rtld.XI1W?":j\+C@RZ-pCWmO^HXF>37?-_/Y#M+UhfncE4ZBM>;-HEnFKFt3$"[i0JpF3kd-g]OGc0,qjde$SY)P6e9h:'+=YjeSABs8MNd_FJUIkfY7/coC?5(4;F:jQ7!.[Fp=7Oq!_=7J#Y'>-QQ]N5/:*3V&j2_/:#.B`n4KqUs$+_5?cP`mBa3o"rpaY[8H#mWASLa$T\=-&+IC-Qprs.4T8inf5I28>0=T@9Z/WH:sWXDd^a7`4rcg!\>*iUidl2_T!(\5>iCmd=rnrVVB[BKN#>>PTDlUN9o_Wb%B49ap@776CbS!"LSe`FGZiO4>/q]9O"`)`=SB]5+a(I9K9s:B*VKe>\T]*L%O*H<:uY(#M/<14/;ZEi"[d8=%eA<%5.i?D+kdAVt"1,I^!"UeqTecp^&$!!!LgGUujj:d3"1GQ-Bp[Y-e(.cJr,*fgiu*nC%KPKt7V2.h)7%hEjjfLfY6C`0q!&o$7SVj8͝e5!5?.sc]bNAIW/uNi\@3_G+'K%n*6;MdNTdoX0P]Q]j8PkDdD-:4F`UfS2@\K[^B&@%s_)'m)dX^[`tE=6dH?s43Xl66nZ3c5Oj!<@X;M^S%^Z<7d#!<@X;,9Be7/`JJb!,uViA'2AO49bcc%ZP^,=gs4-!!'g.&W\C,(@`4A!'%@\)3=N1T0:9Qp[[Qk2W!le-"CMuJ)Aq_q[nXr+s$gd!/D=Sj72>A>pRDVg,R!igMPZKRV_`TPo[FX!AeN;k*_CqPpbCU=i=eM!8u5`B0=c2lES7Gj.QS/b(TM+SRqdM`+&cIi6^Ir4P$Qha2DHf!+=uk'p#i+SMJ:DpX[=V2NKLRl@>j4f.:7)b`?u!!(4K+Hf4L2(,\:Q5RaL61DB0ZfqlD4KP9iriU@Dg:6J?h^e)UPOP9nV"pu:msb,^pLeup&J9Ic$bqFkgOH;Hh%c\1"\5PaN\gR#>tCME6#?5l"54qHl5b%QiH)Mo(Q:cB*UNYn&JJoC87gA^JCf8UW.9b2#c02*J$BEqTKh9X9ajis>jm>sA/EqQil?^EA4nm>tB-pg$#!!(RSrT9"ZSJueFCS2rX.c6IgedA!59$(AXMA20E-lkpGpf+uAH$D;j7ucY-+Z4"\4NlD]^"AO?RNYN8ALneSKg*cQjOQN&;?CV/=X/Bj&'BUe5bXUF0.8mEn87DHn'TG*Y+fm1AZF6nF2\#(p@IL?WHrb!i(j1ojBhoWZa2L$>?Km@9G/=6d+fTAL)T3kY=T@%In88cjKiF0F$/]uL*Q+MP*u4C1-s\Ctup_A6k-R6?a%/?'fkgBRsBe<\u%/9Qg'Up7U_%9Xks)E"H+qfo3uY#8&6muoS1n<5sU*q%^fAo-&&qP!Y5*#EOsABqD+p;6IL1M:[gd)f63rZ'Jc2i,KS!$K"\DEQK^X_VSL\\+=pD[tm;O16ei?l\6-?;8qS7Z\M2sfF_ENF1"VI]"&\rSDS/FN^V[$3EM8O1i1+D0R`T;)4Yp[!!!R-gr8=CpG^-i9T`#n>"XK33P'M/UplDFK`?Dnm.?s"g((l6S#tJrTO]kGjk6b#:GE[pdDk49(Ub=_DnN`)C9;TY?`.@4nQ>?pWg(UN:J*+&Cg=YoknreY`)?"denu\k]uR"*NHQsK+2)@NCed)n%b/hJ`Y"74!'iXYVt#$)P-M0mXr\YPhj"/RF1^n:O$l(k$#Ib:MjMZr<"`^2+pH]tf'CiZ5L3Ytd:@A+X0Pd0/kp+\.3jE8"7Oae`o@._k=XdT"`cKr^7'QGk&";OacJ]g[)i#>`FC?".ZLa!Lk.86*Jmn\4Lr?$YgMlml(]'^SBZo2b'bVIEb(JAi5l]6!$FI]ds)l3rhbD!WKM%8I$KLl\RI!6_F[Imi1D:"QaXeu,n$]u=Hd!f>r83uX%;\B2VRTL1E.So])5Xo;MFRHh.\&S9.!Va8ci(lBE!o.#hjUIFnU]MmIJ&c.OmZ_d3tefYm9;Dj6s!M[p*0G5`Rp"8!Als@M7kV+ka<8MdR0ohhYHbmD]Y%ob).DJGMqa@!!%fcX;-dF8h&aS!!$tO`+-s$76CbS!"P!59Nei\`rH+TTb3>7lPB"-!!"u8i\>$#+s$gd!/F$+VQ="?@fQMed-NY3?heJt9*B-M#64,9but"dSd!PlOM@ueRi=)lKCnWZVS;siCgakGq^?CQ$QRUB\sn^k]maoK:$NFu`O'>Wb3+R$k"Z:TRcH]Z7Q)(l?^3'`qpMp.f69_Ia@=[GoU/k#@fQMed-Nk9B@!#DEi)h1:5ut==\&j8Me3EZG4cg;2p5Ao0E*Y&T,%75E5B30)l5dCR3g9FdOn1hO6N?S*04/Q*[@/tQ6h1])tAd0EWfWQ?"HlaHo]rio'+]$Bt`48Z=Z\3]_ga.]`ZF9u_]cH`32:HZE(pZhEL/g1,$GX78jtnJD6+3&KC1j#7JZn(ncW7GUMpZ'%tB'e,f'rSthr"Z(po(u/QJf\T-m0%BSO\p>p&ak$VVk=RMb\RG?%iE`>doi!ruSiTDs4go9kHsS]a:d4b7YAH+gf$.r$Hgpr1d;IYd*m:eYq=Kg2g-/-hfjcOlNm*eHP@\W_6TVAR4@X`TTS^7.Bq)`H>M1\0$+(=\jg4Z7G>a\VQBK?0s!e"0JFkBmJb@SnZ:AOhYrdg:_OsNni7%6s5Za?N#R7rpdFON#n%?Rb_[jWYag3XtQm@Kq5CI[]YR59+-"n.6n=^$.N1jOU4k1C8O[2li$Ca>"8L3=a^!rr=g_tNWqeR&RIeGNK:PXN,sURHMtEKAD)-+9fI*oFQ=GapZd8l*cdhpnjY^K2pCT1e0,2#nnYI(2\gGk;T;6Q!B_rY:`P9bmV13H6)Mm!!",kE>4I(%IKtio.HdVd(<<#'Zj&+TH!-Z.h%14Ir`N7426I8Qui,Fnej[c+#^?oN&.\6lbm,$C,h//*_V90a&a-qB]I5X=gVU+OP6G1>H'q\[H3nKT1b)_/N9Pr2CBOrJUGUbIr1eaUO#Jke-Z-5;&gck6e\/mnp?/>2.t%fXddj=%_1M^O$6ef4J$d+!!!R-*5uFLMPW=,a(+f-naJj3k=uBj4h"9kqVp?4,mkP^RjOtgGT?76@]?ffKZQhM"=a3_SJF7mi0*9[iNVHsh/nEK:()f]D!TD:=gA7#:bdF3*NlH*V4X#SGN[0:MR[IEQ]/%G$QCA8F+EkK&t:b:?Gc^Ig&H(DuBK:nFm'(%hkPOk/h'LC=B>ClrrN!!$EFZ(>3o4L+Du!K34Q2ZFHJd:V7MgWZs0:ejn'p'9X?8@XiD7@Mk4%,VV,pEqO7W]+cY%,t^Tp_,oohS-13sUp!<<+Y37`/3ePb8mQ6TVR0($E?.TW?q]=V:IPVKmu/6TGMd>oL-K^q%4KF&=%r:^M61#;Kn]-6E'8>F,K?!!!!g*:'_PC>HY9;gFn%_Sa9>k+i$@/RoKUDdM'?d;dgSG*-\%on,VG;Q#VajBq_!nYW.7kDtc3XfbRlld(#"e&s.^+9,oWG$%2L:\#@93^fs0!WUpbh4o&O87sOu>a>R(kpW/ONU<8sPIJrD&tUBsbO6mu@fQK/,Bb#es15X3''?jk!E"!$aLZ-VQr-449b6N5our0[p\,)pn%X\DXa/V4P^,b/mek.3RaLYs-jKL"%,CO@![/[FKp;A&!NYpP[rer#8L+J0r@WSCUQIW10h&,D)l[N`6V/rO^j70(ASQ7<>62,(Q=V6\q!.[FpcgdB[M]s2E!!%dD4Jo2a`+&cIi6[K*4XtFt/1`?P%`Dj,7MTc&DUYIWgmlOf!!$&=lI78>a"Lf6N2d!MR#4b/NlV%jmH`9$;r!nd!!!""E:)@:M9!)Ch2837nX,22R?#>Reu]lF?pNM;b5_MBAoS]3(t+STaDSAW,"U!!'f4gUD*fd.628MargLc'pYq>.&)d*ZgoET(51]euD_#;at\tDp)'[Y8UEakWT6PQ\fs7jN%ot5JIF6*n^5r#64a[Oo+nA=05[!l`\(so(#D?0VOYeT0.Cn/0-fqX:P;1U-si+M%\@<;^_9+r[nStbc^F.W^YdA`0/PLbmth#E!;sml[r7OeCSaUd7T+6*;Pb^6Qlr*!:S0glkK_V)G4r(5Rl9BNQ*]%T^]+)1S"&0LKaY"?T\Xqai^M1b4VobXXS5*_!!*#U]6E_.<:'#>mGd,g5C`[J^q^mJDQ"S9+$VC20@KkP%TUK*'q7.#DT)W\[VV?dA&`0-Slp&,HP7/12JLU8*^+g/pML$4!(ZSVn%TAO1am_Elq/ancf`WHO0n*8eZ7H5D0t^+3?-;kJ`P+IHgot0*qAp3l0aiqDPY@#&1Dm/>u'QQT0"O=:ajo,)NE)i*bP2oh`DJlVh]6j#'^#`HLlTe\.\8gQe_1Rr8PM,X55nF/b&<5_pRlANW0DG58#Q87E@hTn)%]WX>/J6p>6\c-\*&qp'eudiDI?V:DW_5rV$=$n+I*K9Ah`a5r0.D(<.e;rZZT3*hN#XkKdA'3JqgoprJfojRn^h,t77BXr.L'm(Bk\G#()@]&pZ';Td[,@Qk08_r-Oq4^4?bqm-RYha"f_U8G4!`.e]lFd=%)"uJV!L[f2mT!hU9j#2Jq.N_^cS-_>e>`K-1GO+G`LKSt8]ogZdqcR%'QYX,'N@&N8$oY1,fQ851*Gg;1GbXfJ"E$p\9ROQ&B7YH:;))Q2VW[(#_F0)UAe\7A];U+J1B.!dk`[3+Q;]%]ic+MHM[8JO?J4#%1:^'.TNM0i8C9b1ojH/kS`l?#m6(aF^NupUC]QnSurr)/O9&7($gU1gp\FNFc3+6K63+U)A`DrT;DVVblkg?0?rq]7sAqhE6Jfk?9A`uFP[C*D6GWQ?1bT[cO<1#gq[R.$^2/AM7M91M`*u%ldJfk>N+G^@J2X'bQO!!'K9@N_4o;B=:rq>a6'j=7RG.+``F8u7<'j:us+:*QA#kt$E5*mj*Q3qR)il);6rBgM(ldr?!F%Jqp;055gG3mT,f"Q@sSt[`%&-P91"Q:]OK0CM2P)tb*+-7*^[hKMje>Q6>D;2LVXp@<)"@3TP;ofOB).AZXX&iM/=t6GQP:'-mX#P=kS8tVs&-P91"C[FZ04->=^:\dblEUSA7bD1gL_9=FePfXoN>a\Fp\.`mFU3RA#_F0kL'me$kOYgXXi!dDoGM(kQ7Z>7mbM)]eYT.?6;omjoVg2Q6kBJe&-Pi3?bUnb:s`iCagespc^d.!R5K_RL/tE[;J)a2Jfk>N+EE.#T[/E,GkgbOO2nk\qmM[RmGG[nMi.rQX:PM#&-Pi^3"kj$;&k?%+6N1jarfl\IJXf"=_lTi;0'>UJfk>N+>T%NT:_L<-ku=LoB4G9qh<+`aN-nB7n6U[*]@h:\T6f;Za3f6*C15>5nKhoW:4tAb*9`8cPjZN!]1Qt6L&-P91"OTnL]m@)6q=5F]C=%Ss1C7u$[r1#])`J-&5ASh$',-Re'e?TelTA&`Y$\pRNT'-NVeeATQ^@I5fe[;40[>8I)u,VeS=Gt6GkgdeQm-_@g(bp%9q+%<3DZ5/$-/W%J,["Z./DuJQg*c!:^^JTL`ctT+:&3tqt=kUK0G3Ya+ZL`6M1B@WMcXApK34Nr:A6u-VmW<;N;_W&fi"+E8eYgA&e0.gUC+Z:/.06WE$!bVl+1\Z=T#SN-GcXdaGFcN.HN\PrSiqE1)`DNpbaBt_Y(Z*@dQ06Cou2h*hnFN&n'sZ7"@3TP,CK=XA_XY1TLOeJqY]U,VfP9l#,.B;.$)oFM%_7_H[EqT@"*S(X&lK4S@*_HM6\3VsNO,"Zi:(cZ!MsXB;`9_hKl1S2=s.W`?*[*'&',g,2^h-2LmO5nF/b&B+[]6?,;`-->1np$-DJZq2lM+KXM^j923DScY?=0ej:4?:71LUIL70mHl>?m-W1%YPeGa2b)OR51"IL)\Lge$EW/Q:$E;?+t^^Z"(fq4aJC.Qf/4%+:*S?!'TPP[^L@C-;>0doN@>>mbPL!ldi1(:#XA4WX+DD5+fT!`JVp02\-uo4=DW!gt\E54DS`uJ:N1LrVJ6S]_M9lj+%((VqgG_M_\tm+AgugW(7N9SbW-YoAnunSND&@Sin$1%6m'A4$,N=qR!T81CPl?$lH3V_1Dao%c"X<$\Pc1#_F1T*2.sJS!f[AiU%bNY.jlKd]H?J>lQ-ad2h;,'0!d3eX#nIPR]68$h;USp%rPaY404)<ET7_cK,9e>ib+CnJrl^W]D#9,5#_F0K#$XBcI=6Nfn(t21=qCl-lIDrKHhWO=29O7kO6lIGBkc85H1Me'=r8.r5(*,:7U'^+pcj)tlK.-h-*IUoS0^*Q(G>U4UIUY'>md#<4r4S7$VE*3DVTKhY[QkLYD8SfQN899JfojpY$\pr-0V\pq"jY6#\/:2I<_22TfPSJ]R9N13]];Q/BkrHJ]o+:?G63n_1T46g\1F4A$UJuaH.Pfbh2X](SI24\1]`uQ>K,oi9f:.naZ-BQ7V:PY@$+sFj8.SLg[[#[r:!-l,\u32f.-.R[VBH[3L8G#_K!$V%!3*HLBY'gSR[agn$hYGk^X^NZC4Xp?h22l3\!?d*T":j2Q0'c:q&/cH=9Bbo[W61iVA9WqfNSbKHr!c^mdq/:i`Qp$5\fh*_eW5nJ<.Jj.ef=VIBQjia!'*qU>t1t'k%GO=,7[;/i!B=2L)WY6aT9MA+oq^o'ThS"7@#D.h6W1U@-&.fBc'#M'n._prY0+Js]0R<6M(+i_Bg=jCKb3/@Z4?U2sl*=^5!r-a)]4D+2&4Ar!$Mk_X('Zf)]?ZY.T"04#V<*3>p1UT:HMUe-ab.oq0iP+eh<-Vo>_ioX8J#7hl/HfLBm5_=A%GbIh,i-KF&!N@oB+m>-)ZmbPMRqtH-m4dt(3gYUf$HhZsoeua;ghuVTh+UEZBC6$r>celHbA(rYiF6)NIT0.D)9:%:-qYEZN7ds2iCoi4H\c)'Y#Df+V>IQ)VE-X0H_?;q^45At"doW@:AL>?fiWSN?tN?(f%C(L^!n?VUX,F`JYPAD;1@mMIL..'bV.bFQl\:/_l2cL`ctTW";qTBcqn(HhZsd_1PHV:%e2P4*Bh1r:k7XIkN`mbSVED+(a"O)p-4DE'mpCG)^?/1nB5MK)><2Y?A19R]D^='mqFVf7ep4D;2MdrVQ>*H\W^LJoD)1hTjs5SPmFf+$XAl.>4IDs8IGmSiqXUJ^@RM<2d$Cku+su*H'N6@GeeI=fK!.G^Ff3n)'aS09H4skKfbS@$s6/I\TAl@!i3=\Or,:,=[VOHM"/1-NtY!Jfn?e^,LCOUs#qUgZJZ::Q/Cpn*_j1BN@b%JY7RfkW8M<$Eb0#U&NupH,XKSf\T?l->eV2E.XBDl-;GqHAG6C2C%=nY1p@n=%T[*m2:7j`+Y$F+c`F[5YSN:oYgUD+Sp?98VJC&hM>e._[,E0^ba=oJ/?+Fu%gQ!DqOHu3@HhZsBIJZ&c3C*b"+]t'`?++S&o'+UN[Tu63"@;+0fV$R#h[q&dn)(lugU>AYf,&Nq:f,NQIJ`*>EO!aSh7FKaH<+&^gQ!t!^jlGl?=#T$eYTRD3'>f5CU8S[l<&JP^luIDS[_G.4L*j8!"@ISXl==QoJNk">U_:g=j,ZkKZq%;)7M$K@1Z(&;3K*Jj.(:0ekC"oGK*DVb`pS6pqk2)oH%j,UaJk;2D&gj2QNDoO6L4P#8,PSaP=GZg@oo.NU]sY\;FY7ZAkQ?(P"XIrr/6:>uH9H#_F0)L"N'E\.BTf_UY\g4*9\ZV5<;9k-ea<$8+7VO;V)"<[p%n2``uN&64AjqJ9VMJjH#kP&gEkl,J]%_h5REmFhdT*8l9JZ):BiWmJ=>MLY[)([b+"fkgh"#Ro:%gpf(K`XFUqhq[#">ISKsp[8"VorCp7ET>'Tp^$H[q>=!Y3e>(Y`F/m8&G66;fs,#laGep0>dbY%0tho+Jd]l4(Pnf1p$,OV<)f>FD4l;lCMT+tq9>BfjBY8G7pZe=]"5&IY'9?kA_1>n5nLF)K0CNVjN!<'gUD+);Pa_ZWnOq#J+`),[QQ)X6\c/R;l:,[?H>H\Hp$2j(j8F:q>9Wq@1_%i;^W4l'0`$qX&c@=K*V!s77TiQ7.R3LS(Mm"5nHGl_4]+F.ETcVgUqgm[+48K`+H57s4^c'UQS2^Om?*@gk2tsplgNK2K5F+hAGl5mcHa_F_3_%XlKTk!NN'+DX&c?[hfU%IJhZ0"K*O_/T.aHZ^p[0tl2aL.-76a]dh@CS=BO4^B@#6(W)R$9Hl;@.Vb`qjm>-_:I>o0gCDs[#hj1'tWN!s.7RdUm*+7N""@3TZo(r#p.d43kK*)=+7V!i15C_FrD&s`>nF5i"\*o4k0A,th%`$n/AS%^dG=7E/2>[(9caFXGnsDUh]%EDc6F/6$n+cG5J,K)X[_E*"+:9A=,9o?7SRLZ)n(po-TAf%\@aO:5SN9@2`XtTO8nah[HLtmuU4j40;B3lG/Mf=EccO:;gCZgtCu7ei_Bs*VIu$/Wkg?.4'e6:eYsNap'(i_/Rl9!Sg)LFq%.^p"\+dU$r]jBagGO2XE[i!\UPEkN^@%EcDJY=)d=K>I)3clK&U3lW34aMWQq!GPirVD(>+#%*qq!kG0*GCmU9'aS2bp52*f#Ypgcf`o_?!D+L/dHe/H/,B=j21-6dEn7"oW(UJ<'aVQ/I;^iMQTLt"9\kC=ID2!_AA5c6!NbBR2q>&L;:Bt=0V5;-E9IHTR&YKb&T2?Z)a^E9U<;5e7Vld)'"q`#F04/U/Aqon-3"*l=1sIkAa+tr7o&WO)`f5g/-Ksa[/mPn?2`I'Eo\&-Z5:S.?Z]B?qa(R5qE]Vb0_hZjB;+&a=."QU2hSIk?kg?/A4+`7njY<39)TlPXmbGBrX*ja6Uo1Z9,([r7m*CJc".(GE5$Yi*T["%3EZa(UoU.$"scn`.ZN#nnZT"c1^KH?slnB?k&Bbn?[/H2KHUFmI8>ot7u?c-7h69l#'#XWB\jn&cB=C^&FnD4Wr)I^Np&`l9nP(2X*TP;dAi?;$+bn(kQ4q3Wq$PGON>m*HnI)rUYFVG1d-agLNjTo^/NiMF<%E\'fe;aRCNOH9HB]RBZXTsZ;.2fIP*[=0KL@hia/(bfhF4r]BFPERR`*,BDcAqtG6ueBujuQDC&WDJj?.HWgIb-]`V]BH_\A>57oETV_40>&GE%/SjY:g81shK6WA\YL\9IDu$EZY:/6K+VqN1XQI't%]KL'mb2V,#sKmb1H7J5opR%fTC=63,"hIa8>StA"p@BQ"/glM/5+'VC4tVK3j8t+OhX\#S2^/AYVbZQQTrNp%>`#Zu56c.74gr3dbD/5+nYM5'n(,Z!9uMSSDJ;T!>P?<)f+AW_bm?*^,+5Q4.U@i>=\Aa(f&O:7Qh^_W[RSL!i%ABjtgf,e_sa9]NWFAj'r;RWR:IDr/WVj1p*S$%^FgGnKPM].SZ4:S4rK\8L/D5L(._+YF-J]GOJjD*?A%]]]AV)Pq.^@5J)AmrG'lA$k1;5gAWgK.!ZV4Ml2c&^7JY"BBPWc$`KhRAjk^XVF&QHPq#q(R[T_5eF`<8129e>`J[FH'qJTlSWY`a4M6i8$e/s(Cttt4m8L&dM)p$0bE`>iC4O3&AnJ_\[tZ%.#Ll3LsRMZpYA*EXSh/o8*%Nc26/oKMsF=tr96i-N0ZWY&C>VehCj>'*`1$dErNM1@#+dE8b^-)Zpj]nsYV3r3C@jETOOGfWepL4?V9i!YGXuZ)A7'$N5UPSK5Da#RLi!\nmf.YO`0(N#c,kUVJ??4,\9+o7maJ(E6Ji\q@+:4TgLN\j?V;$lsA38rD!+J6(iuHKBrd)J<%Zb%&sWc8MKH+S4Y$OCo]CC/h3tHg/tShg^D31OIIkHA53%#sDM$UsIVH;?':?S0eI/66c5#SdsuL$jOIu0g$HJUoBL(gCksU9BPeI/Gg59,^G4""@/&9htukr$_[NBF`bi%9VAske#%Og9S>^MQsRHK:[cl:WJeckC"`nh:<&$C#9tJ.Sj*a\#3b6jL4sK40n[T[6:EID2%![,kQ@DB0Go(Vr:nM*E4GZIH?p[nj67$alIZ\D&=t!\2fFHKOc`f1r3lIAOIjg.BR;A*6Da,_=Km0N7j4I!l17MI;uUeVpIi'WQf\p_2k]fi/nR[HIfpA3DrkXbHlT+@Y4HBQ\r"kKAU6g-G#`5]Yb+*tSq%3(rf2`!?=)c0AMf(8UL\nrDY[uV"=kh)gGU]gJh;M@@NQ/166SdrEpl/]eZ27!@cHh6A^_)Il/\p&on'7.=?CY+.bKZ'8e2Ip39pq%1eTS$N+@01S9I-#>U5abo<_DQ>;[2#.I$3PZ-/M1%NHP"=!S3*("S:#MYH>a<)a:'LCc_-:=KuX+"Q_L5uYtgQ6`E(7EnFj]7r]WMfh(IU,("?c(@\\;DKL?BSoL'N@383&Js+N;smG5D1bEmE*?+TN_-6%FIm$&![>O:V(o^[TXl*Hr.$9>2&:`c['EOI$UL=4.Qk`5#QP_!UZTVj._hT5GWoX0$Rf6?T>$)UgdQV0i0L6k9>FJ7k@h&tqH@V[XjE)>na^'#cRqI6m$9CqA(A1@cIcRGpSjp&^.o"XC73q+;,_Zl4Uh3p4-[B]icI\7!f?:;5)a/q'\!WX@'m[[s%5c9MQpABFGS;7$u'UPj%>JU2Q(pX&g*a3Zah1k\.DhF@F8.h;R!L5.S];N0k3Sg"u7bH;KQVh25Cg/7eH#u:GdL:KF'egp+0e61<\_UeC95\C2%BrXdqH!eB#_U_1BGlpac%WB@=jXkL?XP9.Z\A>c6=E_Ae,d_K,=JnQf`9p*p;VF(`4*g[sDlAXBClB?.eiPq0u3^MjcE_1"hZUpQ,sM\=gHdcE2em+&NquH-@dBR[80e,%t]],n0_k&i`Kf98hLDM)*ks6B\=349bfdLP1G;_Ga6P$@;9_NUX*BXtDgeh]+ijj0+ehECZ"D[]SrE[g1h>F9Q'?r2;YoEH!EFNB$Pl1CNCIJr_&XG%TC2%DXj2V\=*C9Z0&*:'P.8q:?>S68Cc&@Y:#7'jLQ,eI+X-;dq'LEbN/JpAS'$kLK+ET5Hhd[PT+KN2TP<9=jeHues]6A1KL(-G@OD4*HOWiA%_,NcK<`42o]lnZ=b$uU)-BDNP`EARs3gV?e?]Om@l;d&[@,uc[rHaXtjieU(M\VeR60?"Fc+SN#LsDPUS2qrqg>dej4#^k_D/QMWUZ:=s34Ws7C+V4T/*Z#_P/kqS__\$mS"$+c^5[i#^Q/m6A#[EldbbcY('Is\"c',fc^KTrC7QnZ"Y%Q%%a*h:A&io37941ppq2iU'Xf#JrWgSU;,a>S/eiD@ct.bXL5/FfJ:RMO1%amu.e_3+LYE":5rK:oc0Nurp$8K>+LC#E7/qh$(d'#c5El%429jW?*lEbKA7/6963[/aT]##"C&RqX1IMO-g6sDa]pjkD80/RO44SjI!d/;0bgO]Dni*^M7qbt(l+q?HC%=7Li^G8kMT@]1mn]P)dFP01W#f0W*,;abZ@W.k>[9jAmnWn3;FkUscRc8S,^+4I3l-%/'J#+8TdAd\j=FKAM#;1,CE"$)QCa[C8cX,F)R`kZDH9e=Y-+p(NbC!J"U/\mX8uU8Ci!@_B$Kr1cSKBj$488BVV\2[:=\+RHfW81MC=lk\@K.ERl67C09H3bnsJGa.OJ!_#.kCJ-P-=&p)sHMq$k6eH/3%d]Gq.\CfM,!sU>,oW,R2\bTU1:K,rB#KJ:k?\;"jjfGqj@QnKbV]S6)HXrWgSUNZ3%bHumml/M4*gl-lVrGnCX]Md@Deb5,7[d*tN+qtp0(k>$H[3M8_E3;iF&[IcS.kKc(G0d4E[dE\nCE:DS<'.*US:a10iD!fa5H'"f#gUCg$]_Fu[EHX]qu6\WVfMS<_.(G4-1eb>9nW-d`W@$L1U"CtYPdYQ+(+s2r#cY&X7+@H^J8daHck"SiRm`uI&#o!hN#6%Q)M4])n9I]Uc;-MH]AqC-C4e3b:0e:c&*C=f=\5Zg?FY?%cYEdgYRg,<_I^NT!ZH?kVak@LctDsZ7.=se<9bbTF1J8Hhg^]>qTIS:/GYTf?)OWGL?:h2UTBVS&.3]bc\ebojlnn8DkAdo^c0;T'cl(o,a=^DP/2L0]9eubfDRp&rt;:d'H0<\1pO6L_E(G/fY_?s*c(DIQsCMO:aaO-bQ1N=/k0q&NJTMDn![r--maLt[c!^cr)#jg3KK5F,?s$1kRE@[/67Up?$+ce#Fm0f?H58b/?]B3A$S>!Y\?&f70]JZg@IlO[,Za4>X)!:CV8aW;S$Uq2B:.^")8q7Wq*2cV$*hO84E)="(AT5n_Q=aaYec\f2LitRaj0$Xq71LDgB&1&eQS6f.TU/\qApH6Z8b.,]\8cUR/G-5?Pq%tE:&=e`F+/R%87eB#6?8bb*rGd/;:u-a*\@0TZ)ap@Ci$0]NKCL;(lc_9LedX+c_"dkP_%5SI#I);%3%2VrR+k;/tb^,"`_?H-EL9Z/[p/8BpTT2E4I*\=G-t4[$X3+'5X0gqTI_'EsG5E9sUpis0\i:s$\q`kl3Rr;"iHU8:H'/?adR8KKNj]!PeWHIQlR68+n#S`e:h$^1;\oB/i:1ni*&pcg5X.PimPe>ZBd`l@LLW8qO5Q?de&?G(M;4$3>]P:,D2O$@^J$kl]>*i$hbMWe$C?+U;PhS"8;^;Y,YaN-mk)]KV.YjD^Jneb(g9b$0'r9Dg1IVAGU<_^`A+@/T#"JLWTKoG+J_qLO"j'mZ$'T*R2S#9&;$jS"%LN_pVXed=lG!p#=7XDYWks]rZ8`(ji.'pQ)OsG>Nq=EdBTHHTh6R$r4?@qCC=L"U'Y-*P8a+=I&kjl5na,XH;G."W]!XZPPbo4um$OR6lY@$bcm;6BE<2icl7>hqDM&F:,.e4E?H:*+/LAN-P)@;`t?R!WT:FW?AgP"I5K.;O4,>ul;/(>9\WP[;lCtZ,@P3#n!B=WHf2I+/cE'4fA@470WBO;FhPK;%lWdSjU,saq/Yo.A[XBPGsP?$\mi*h/>n+bbQkmr2OHN\[-?eD`b:nSK[,*]F=&_g`?H[#gmpM8B@VP:D<85R[9\T<[WI&MTYmaeHWjFhkM.%RGm89c72+JfQD$EQ=?@1A>\nAL6?.Sm$F-k?!$,rhC`N<;7MBa1^tf?qq=XZ2..GC1X^l&QZ)&2)=^DPOba:-"s8KX)gQ,T9'm].TDr2lq;!,Yg,EGK#2;LkMO6'KIgeABOWh5njZ$4H\1M;T)2k?G-4*BiU>>K*DeA]mEi/"(_H:!d8a1Ocbb]QVa,,7Hj55/s#7[N7qZEP+L>Onf-]'L^62:0:K4NKaQ?+GPTBk.K2#f@Dt^]PuJHfm-($(kqbGUKOmu>)Y!gE7s21?D;N%Lcbk\dChW;//g6pmNDl<#l:[!T?E+sA'$2V;ee!hoOpf<2^i<1/QlDf1Qf_s#0/0Wn9lsXr!XkL]#e1JqXm9Q[X,oMe87`0Xk:jPld@6di=.fs@SKPq(5R^ocegn"5]'nFYtoP.Hd>P6:"@m+J_.*[ht5]68&J]Xc7AQf^sR3]tFQR$(S/040I'[$ABj*"-d[1dg,b.obG:OE:&75ZmR[MK*mMDYIXME\C^MD?ki\Hhm5o?DCCEZ&<'`)TI]G5P/d?Xk:_*oV-e>^%s`DnatPC^P@JU$1o0YJ5f8e@7_5+D4EYPb)gc9U99LdOU$XW0;d/^S3"Wa7;+1L3D-le9J26*H!K]5E,'8#%YjiVe8PCe0i)>L=XHT)S25pK)7[bSU8'N-PI"1cT\*btQhP7FC?_pATL;N)jmfoRP9='tkK[Por>6Ue9aE?rBKXY9LR0RVh7@_D2`FR,OR?)VCmV"nP;dA1;6,ehp1!-'@<','$73c'd++5u\#:+;m/>%iF!DlD=0?@W@KL+AFa")0:'QuXV%oJ&/e,qLcnI.-nC+:28n^PS84uV1Z=V52Y@!44W=ncHY2Gcbl6dqs9P/QTqPrf">TV(t?FcQ\4&rS_>=M):oP@4^EPmM?2o$P>-Kt";`jlNs2#-k9UMN@R!W4c01jAFfSQFqD6$=jqqlUq#1#3qVfu.(!O`R?8"c=3.=Ya_+Gpt!i60Wr%NcoSFri,km5mjDTs'36H74N^^a,Y*]l/LcENi^<3l9n[4+&Ac$K#fC?"#5Bb9(fj19@PHT``Z;onsH+6M2cX2?XD/a!2UQG)j2U;*WnGa3\WrZ1,91E$TiLre;k\9KQQS*9BE>6kbKHqPK*Gl:)l1:L9q+$]3csSd=0G0'GOOBS@X`biH'sbUd'$fk_I)DE84X$a?ajoYa;G^--*NLI_U[1Z3fNo.%`:(+G44;D\T?s-mG"gK[uRP;<6hJB&A41LA'i-f@q+-r"npp6\!G:8FHiVjR_?QmJ3'm+p4)(W:-,NhZPMG,J`hRkk^-`7>F(rAY_Mk[DA"05LY*Xr$N0PhRg.B$Pe3^`bed[qagned*#:1_V3iDo?tX^uI%[&$;"D2F*hl#!A;(^c2p/\/E-(O6n1BMmZKOGfSeK4oocaNM*'fn0LV+#d^g+K0/hY#+ABSN@br(4FQ;/!E(^`)HB6V[k#K$T!Y5p&*::Z_L#>K+IO(6A"PD]qf*%j*Opak/i_pB(Yg^C"_P6pK2NWM%VjiWkC[;1!IaH;lHB0l\Ine`9a6NIE&*o+#1LU4Br(ZM.V0DTS@6$c\_MG;g,Ce!TSGte7Xj(E*VRIrrYaEVS!G"G3g%o_!LE(P()E/#q%)JnipZH2!#i>3-a2dD2$3pZ#XG!J?(AGrV#WJ%*(+`e)ec>2hi9a#dVW7:9G.[=)rSf-.kQnDUfF-)nQ\UN/WDm,eNVLe/tsKKOe1.j1)d#<%+/?/4CVt=<:@2+%m[RA4r#s.p&D4-%-StHnr9G:DqH?C\#!ng9l[CC6<_Z7^#(&/G".\.G76ZlDt?"B[K05D+-rr=80J$`5JI/]=[86$R$a0lLL5moL'P5)]K^D;omB4Kj9e]Bk_;.k)Vi5&g9"cP+3P\p`]9miL0]:cT`Qr+Z4&d*&VIF$mNd=7OX=Oi5n%S=A"V5S(DO((7UZlh"jKdGEP_U[MW:p;\Yb/l'#:)R_0m,6[:5ijT5]VCNFQC$IMqJ#n)[PZ059(Be>cMJB#k0*e8L]LWMpZ1VU1OnQp(?Facg6qbfBL'7EAu4Wej#cI<`ksWVuZZB'=p,0D0!$CV%uDrJm4<-BTpA^RR=%UOB*c<%jBS*?$i#j%%#6P@Eta\TEIJmbEAfY$Sdkp>(ua=4XQ^T6e%YaV#eYf;r-8jlLXQ=,>Y.MoLYk0:J;s/R>q%PTaQC%M#'a@7"DMRQ,'(lMC2>7HO'Ss8K&=%9]f:[4u12Lo*Ccr0X#+2&JH5]OZ8a"OP&a:S3B[!A)4q\psG]";P-6o0iOcEaHuMp<($)O')?qeKFD,n`('oeY96AL.;>CbMF9]oSLV/3Cd-2nWVU-(g2)C3l7Nie34Spb29t0%ZmN4oq_kIPAVe094R$Afbrc-@UH.$JXWUsj@"EI##/8lN(GtR2C)-61qB>K)N7@mYkrQ`"mF^@md@`^aVBM]E'NCpk^acAm$u4aV(XbKe?PdRTcl9$Js>0#=YkB#AAne9a)[\T+]PkJOfaJ>q$CS]_CJj";Al.b,9:]Z-6XnV\2:5Rf'U2%bqASdlC"r(e,gCY,`^p%9Vb5C`[f`lsBhDgtd%PUIe.Yoi'G`?,gZ&CbItU&$^GsOWe06kEP]%ueLO\]oD-lV$JbcOj=b[d2`CsHSg$+:'D7.&GqkB7/+^bu`5oNHc-rSCFJR6U+Ig%2RQD;mU$lG6QZH-?4GN$,h5XHu)mqt1pZB_oS8GTEQ,iu@@lKg"aQKY);$2);'P=V4=ZBk@`f>c-o@]g)<(bWNF^[*Vhln5.5XA'78uf_Kd_(=BC>IOQ'-7Jkp[@S+U^9h-s69Sk?NWGSda&2Y]ZT!_dcV?1^B`1!.Y[:/HA7LNnaM>XJS(i`*:d:%-WG6Rp?chK_8s\6EH0kh?\YRn%3.pBQi(shn)O$'^]Erlk,quh(`KYPo:Q5k$fZj)/M((okMtfP@c^4$03te=YKb7\1osQL#,p_q*BI"Y=2`(s5t[tGPs?,%5?hQ(,(M9a5CE7ak2tgmls-Sl/bl5emFp'6WXBRnJ79Z*h@0o''pZhTDnl5T"3I4/+GF_%!"T.@4cA.f=VN2qHKij(a9G_FHM-QhQBk>`afh45;\]uoNsgkH=O?*AOt@eI=HEbB1!lQjIJ3$aq=?`h*I.u"$R3Q^@aBs@jBSCQTS%i6kKLM[I>bso:hq-[--5+FX&_M1=eA%Rn;#IDNp:@_TY_JTF7SlkQTMZqfT>O@F8mA3k\b,VTVq8Vbe'j"/nE2NSUDn&Zlst*hEXVD*]k>$osY,$*C"RQd+gG':$UD7CH-iY*dj?#+%HCS4%.jDsSg?4I4u`EpeY%Nup_LaiVZQZi0jshq,&=ccjU,91qp35sZ+0StUg!GOFPRj\^kr!O>QUiN4%XDSY5g^OLb*kRi6BaGUVEf55(>U`+(Ys?%aT[Lc7$mtdYa?Y6U:6d<).&$TjR@g7eQKF=Q,3^Y94mMb/h7>X.n3IEkK#gUlqKF/X*%9>'T[I(''p?V5)9:.%oG7jh\)hFBJnrqJ;?CJMOsl1q$URW?TL/hEolP>1JoQT0j[)7LpF1Of1`)`-j`+_Vr`rfu2PhduDVs-r6%?QNCGNJ0fj^qbkt2cIbg>e(J^=Z1TujXj[Te>NCLccXJ5GO*gH6Sh:\AT@r:9LV0'l(q8&^r*j7[;(HmqIM30qmUK>hoL_uF+2#]TGf]GHqAF&&5aPkLdD+;dAV5*TkVEmY>S"X5H'Snk+WfO>Q[TqfLs'6L*VY&"I4_f]eo80<3^27e]U(f[9/XE^#8;F4_2Wqd[-`o$lCZ@+3ZbIA4K-![Ocs=gfu:Nj^iZAo]k.S"QDH"`(Cl5^>,qHA[g)SXVGJqCM\80/XZBnrOqrJEdk"_O*tE";jogOJGo98A@b>P!Ldc&3N9KIb?)QOfN._.Lho5a6ufqK[6"!-*l6+Xiu+%+HOW_*9YV%)SjN2>#+92)P"jj4HgUBC#&AXnN&t7CRHZ[rH[jOr3?+H,aO:\a+J[(nW90YX]3)Q/-_1M;lLCRmnUg2]fR;>!7S&*!>^.\&GBDSuP$dQPu,]DK%mGS'p;u?5$b0r9pj@O/=RB7b*dGd?M1#AmQ<1GiM=di:f#(6)0L57^&hI-55.bPeUsaea=>PpEo%;"'B/"EJL]A5-(D=dk;*HChQ#EZT/Cic333-d2b2Y7CQBl,pP28oiNn+l^G7]@0Qp]Bcr#nGk8"C2:Jk.N&G"'J^lAK,oWjoTj6C*eT`kk&UW=`7&?o)Z*GH:A:7!<$H1h).%>FEUTn.qs-b0W]6A1>oOgR[W2MgZBiB._W?,]g=]H[_GtbZ4"hjcqiPR[B/s1'W.loa"a^_%3mmuFf%a/?*LHuu6#p$ui*g:N'VtKL3qUW7l-fD*;%0m!9Gr(Af>;^9o12u8D:*dKVb6)'g2_BZBgfBEo_44F>U0H61gO?Xq5W@9Wkn:D&YX#CcXkS>Tr>]Oh&Mb4*;0aMp+=*Li\VWfbTPa_(1C:/c(X9Tj>5HlK]7uf8XT9'eZJ/FgBHQ$_Er]UIL6+=#3kZmbYVbQh9FbRqt0\M5Z:ohE63I4Rij`X6bm">K3g%`eK3WQn@f?h,MHq,o^Js9o51uQ*I^O0P/D]'.%H-ri\ud,[D_%F+r8njLB8bk/_%G5A^H(AZg`'eKX7%1obMZa2N)pnmsd#K,W57q=CM\V<.!mX4_Ya'2]']I!5I7qYWorb%#9?Xi>MK#UQL4k*3\^Z)=[P``Zus:9bbM#s%q^nn#RNeO2%l[BZ4nWs%"jcOU69U78l)<;b=[%5$lLh=bKEP=bud,BhRn,p*^/0L65*3&Gs%gJGN,Oamer#$%FL%OGflOV2'iS;Z=1n?HJ[L4#Vn1oY#D1>VJ4MXJ/>i[cE1-@Jt]o-3?+H=TqU^`cdH<8a[I8sPTZ"p"i5?aI!rgck40@Z8Q`;'c2rC%Z*pAbOJmF5[t*UW6RiP6,EM"W7.C$MpErbZ>`0;A>l)<;b=Zh/r:og"f%,$$]Qs'ba_JVm=gM@<>hJa:'2]']9L>bqF&;[4CPZ$@^f0BsW_nVGdV%.5""+ln)^^p",Y;>hf__S%2sURFfJZPAsR%@d(r%e-5uP"H/lp<_83Q\p%>@eXLN<+3"fr:6uLA23pK.=*;E"_iO87I'0Sr[eO$DSl\Uj)#!9S.6^tkVCNFQA'"QZL_h6uR;NakuYDs[kd^1IaiJBsPk*g9jeSnk:K3J%5,XdYu#E/-iD#'GQ0I2#a)b["aX]lUk;*OA2P%'qu8>Uk^o(^Cr1XI;'G"P.3P0J'$YV/r;YLBDkiPit":C.=Ma^tu%86ur!ftDZPWjGVdHGHk[MOU)3/TB4b3HGP(b%%-^`QI54/R-Yae^;s^'HJb>#SPE2VeGW33NAQ>+NRlk>-\'8Q1A8Fd\TT5:lp'oZ$MM"RAlsV',)%s[Nc]G*1q5.YgU^)kcEPZ*9\]!Gbb+2YZ9`(6RO3[bET_hREOWq@:>ljToUdf)a[#S$ERQ>BFZE2@(J[j??Mr$Gq?oJ.Ash-nmp.KjQl&%Q@"gYK5/o/HV93.DAm.f%2\*q/]#.1dP3O9#3A\XdU6%nXut"AEi"AO'.#=bDVbfIS6EPVb`)4S%Ej+QUH5dl09l=2c^%G1,+NQ4IM_nUu-ZW'I_PMd1K+e#,*^0ie[MmSj&]oPcg#VGkg7I.C]D&c^SQYB#^%I4c;'ik'Q(A[r7"UL)W$eOF'W$%t&eREC18u_rJ0f-3auWn2#j.I"o0ojp;0!lLsTfjIXB2P29gHQn]l4PLruS/M43s]mIZsfdSA2%NLiP&HSF5a\_?P]GiqV6@jmfqB3+/`lCG"[r]h7dU+#$Z@nnjU.-/'ceJ?^[VaA%K4AGT8V!ut_l=*`al?hn&Ns^2`>8+#d,@>\\X+p3Ll(BOU^=4QXoqaFrG'k8DqW"M1mjFEB2sp`aCAnL=13"3951KN@s)WZV1Bl^=C4i73j_Zh$'I'^/6L8tG&>cHfD!pSck;/Fd:ioG*aSqs!/XFUHs%m5^4M>=-MAZ`*#e[n)k"S;NPfo!58G2&_W=6X?77M>c^%'MMGN5;C+;[T(6#?e<[K8CPA7ZO4W.&IDJ):C0UhTVe\6?2S+=AM=\\P(DKOGA-IOCn]A5a8U[Ol@sZNO,VhjfrPtPQ>s>VPm38i@spL'k[DoX9s,VMZ"p[XoY`=;Ah]RlK0"1/mZIKN&XBG#(GC@Nr]WMDS=CB-_%YK56aUemb%!;u>VTd1&9i?mJq=%mZt/hP5_`Lhnr9A1tWXH,.m0N^,>!iT/J?bmnIG\HVVL2Mg9d*b&?GbIn[hr4tpc')%JThP#ZoT\=Wk\+bd>$5^655iarj52LsL?^C-g,-00(])QBPfIeFjfrP(L(4$GPf.&YO(X3&CM@Jh:"p40=\8W/3IEf"=6P*m$k+Vt\IIcLiTdjg3\"kTp%+#:dF>WH(1*D\&\Fd".D$4A'-d>@/:1[EW"%LB9o1GdD,K3iG1^OF[eXrl]ai@t@O&IC$#Nn/$sf4)lIt"9[bj*$Oki;(^F<20+F5nlS0^6F<>n[k\=='D\#6LFC_!$$_J48NYHmNul,9-3;*u89$b;o&RRZF6*b`NbAtdBWt2K7cD.a-X([FcseGUm>.Wineb(W%HXi!o'ta1[Tu]=:`cCR@*C]4(o9RE]6E]n\g=BjY?nnoMjBTl`3pnZ!m5"0bqt[*#U0S>a(R4Fo1l]-e#(BY2,eTQ<^1D;D3leV_R:8L!m5"0bqt[*#U0S>a(R4F_bTm@K*Qcfs7l-E8nc=]7]TRl\p*Vg[MPA6b%!9Q1mH#dTqJ%YJ$0OfjY<24`irAN%hGj?T`XZF-3M_p:\XAJ@+u&`!Tc&)AfAg%KTIGb[FV0IQVX5;Z0_p#!-MPmgRIlGLM3]!9Hm$)Vl(IQ)m.G<3+(,-pOkKfd(:n`JpKges?<'`eNg[;9VaCDac(.9t^ktPsem+I\jQC4//b%\t4`lF,^iL$+DM1\@N-8U))Gm/m>),0i8B-j<"KLLba:+BC=HYG$O"jR;GpE*]Y$p4:"QORbI0&0U2GLa1G^i)\H/P#FmIVg3Y0V'[VXW+?so(gT?jqj#bn$Rk2oF,11f7NEGR^g+DO>GSfC/q^U5S.LJrVCXXO8%_W'=JoI&-P91\Zo\e&n>G3['VZu*DpZsn(t1AUB@99[N.XFV37C?Xf\^Ri4oB%*C15>5nNjRPETKpDa.jX(q(G^H1'S)cf=P5hnI@D,7(#[.TE?s.i/a"5nLG4eZ)UR"pXPR^Lu:5Q062K+8Yj1gUD*6gCXQc2PHh<*BSFTgC"-MKNYd%h>-[*g%GJ5.4hlg'Ie,7k;p`f(cM.op38$NrbETqJ%Y`iXVPJ'aiShnFMKgDpDo)5)CMRQqB=$t2JfqqK`5L<^g6O6j/iGVRD-miB"o/)q];quJG^)4&Ni3JH(+k+jLi"dV7+j\Or0YObh7.HWD+>-?&OUkj3]u`e-LKU!oB4GlfldTd36eI'X7Z)XnZ-.[&g&2+r=='8Lo-<,T5SCV\97+<[N.XF6mB[4+*VgK['?l]q!]H]^*!\Oaiqu9Za7OY/*+m/%j+%XT/gtID+>.*fi5.]II,UkCjU^ULbuhoqmKnK!Y"(@+Hi*MD4604`Kr5bfQK[=YdLlE^3hrq?6G'0_27mlJfokAPEqMHC23Uc++LN^L`4^OET;NHqQ]DkJgd,0a@HO@#I_<2&-P91)&YP]Ye@_u<`U!jNi4+r7ZFER]/JDM+Gd<`H1E5Aa29!p&4At_q=>ug/g(Fh4F-Kc=''UpVG1kgU7ObC7iN?bilj#Cds1c`/]ctJUa3Ah5nKj1S2kZ1a2dAs[;0S?Jfq/BWDf]ePq)b-nUk[Ke._%P5U=,^KPa3j7+k[F=fki5L2ART"=Z(pbR+aeeBu[31hfi_:(H%H+Gd>6HM&b[cTcI2#htBs1BFrp)+:'/!"U,',;,Lq;B(#*TB@!/\gDpDo.`&s;rr2n5H_KS$W`3^/o]^1=JKW)^+sJ3R+Fn;^&-S,d%j+!BDr7/4kD+hJB4PPWm1+^rK@ngYB_*Z%.;V)?k&g%H\O2,^CjU^Ub%C%p[H?W6"U,'G4+\SGWS"IcLQ.;<^juU@Fp()F:3LfhX/g$^SitbM7/`N;ICbc3(Y`7=LpBTI:?M(kDr/-8gCXQS8kYTQ[_4p;Kemf49G8)'GOOCnm>1VFCY(1E?/<0+4LQ7r&>esD5QC6Kr8YhYZgA$M+:*Q5c^Qk3N/`f5/mQK+,9"CX)`N"(hW)Y;fldKaPYLuEjftFD&-P9uK$_k@%hF`Vgg%9.d0R%`ZF%!G%NdmY[Nc'PCg+8`)&="-[MK4$.#KBJT#eRYi9f:.!dWDRVD@Nq)3X/cW6R9H^;>op1OZ,4]-bLG%KAdYV\I)*'6:d;$&!Q[C*EFHs'RA4K_PV#/!W&9C(68US"0NP]AN71-cQb*^'58LCYN'7ueSbl-h"P*acX/g"tSW5#+U)#>f)]56'!'6YniYM89&qpY`T'kLaq\6'P*A:7Xr*8?q`qOP.+`;WP*HPLJ'_=0o3*C."9\iiGjk^=_=RNedA)R^8H_>:q"aM/_jk2t0`a=pFmITn(+50B&M[s)GUY[nPU^>#[VaAm#gJAVKe-H:bg+Lol%AH&;7C:jY70[B?m%3k2rP=Vap0'1(dKs4Jq#u`l?#2cCC"r%Wk*u)Dr.JJ.r(=pp].0;p#t&S7BEh$"dd]3<,L;5S)e38jibAGjqAlQI`hNri;]1O*BsC6.2`&B2VWj[^NWgHa+b#U)`CfGlRdAjia"*H1PWkFuI!Lf<-.XQGVYBEC)tn3BSlFNI6((W>mAE*acO&X_QCdK*Mq,:.*L?F6ARdXtG0GaY#8,`ARFH#4hEN;t9pO,`c`mY$J+kp@.R-Mi/h[P;&5!j=u+1N$)BchS"7Y>_NgTneaCg(DiG$c_&*OHIo<*+Bk/Rj'&j*rV>WKT0Ihngpo5o*_Kq`5do\5CE5[C=F[.guH0LrYmnmYct?pmS/J8/jFjbXC&_+4H,Y'#=9-@++O4Im-Ms)(C6aOT]\$f2NEfXQ6_MY6:0U-7I?'cY+X-]fbWJQHJVCl,>`k/2&JPon)B/JNqfelC)MBE&/R,*MVg&1?IC:0DF:K_+$!PFS00l02o"DB9N-L!pkMG'X&_22n6MY"Au34F6W*T%u>DhIP@Q"Aq(*qXeLUZmhs2\T?r>m0eLgXHB'E4^l21D/J[5THFY=L9O3>84\FA'ln>8fQIBHbfe2Ye^`K`CDY`c+Gd=+ZtPT0[5G>ke#-!Jm0eLg/9BpqQ)[ib)B0XagUE5\?P#qBc^m:I4s0OQjURlRShk$)AD7Ip;)WuVJNOulo]X\=4+\R\-i!]>4$3slg*`VB5(IqGYj$'(TjM?HR+HQ!H\\kj##bl.dY?u3_C5SLO+p]BH042GHL5,9pr-nV@OhK!O6nUkr7;6IM?+=j)D+>-ljQ,C;V\:!gbI/W$U23_*;IF>9lI@Dn*C16ilbpc]3B0!_/R)74%Q/jZ^rr&t9he?]pk]7]JQmTNU.&mFJKW)^,9qiek@8ID"@8FEcThG_LPJ6pdABX-GOOCnm1,l-'GM6)@RN@Li"dVKE[m9SEA.icaFVqJuB+JnaS4a0(//qq>'i&qgtar.oraudF#LRrAr\n+O]K.[r9`m:"f4A6!0e&lde4FoO-D]"@6"Dbfn;SQS5]4"er$P]6DT:^gP`p=_p0O'Z7S/oA&-Vf_,A4=CC.,M:JV+UL**Dj?.b\Ldce)"@3SV-9!m8a2c6Xh]I>ri')M^ma]_4aihk;gCXQc.aU7/?G-(5fK0VB.$>p;,8jGlj-_XbSF`.i4AS,h)9rM^!bMTM;*[rC7E#ZBLk;@OJkD79&f!+`G\7MaT$CD3ml/J9cL)1cb-97crm*N%?.3*8Mu)2*Vn6QcRTZ=JfcU#Fh>GD/eFR!_P%:0(:l]63G*d"r;Yp=&EPQS4AZN\b=nCt#8@[^J*ljHhAu:.IfE6ULsYiQoK$(CQcY0k/(#dU'\;9dZi6%/r]u(kdWu$CqGW@`;b#7ugQ4@Tlr=]6E]Z3^I5nLoI1ER51UUgU>5Ga[.@AXeMS"#?!ME-Y9Hr#\<0u`M)SNDH.%FWbU1c$p4kF`Dsg5d=?7ZSVHTL"4>Dr1nm$aE$#kK]VM/1cJ"Jf(b%Z:0ZeBk_:$i\>hs(HOWe`/(Cm!/4=V)fY9Eko1^3k2t2E!BK'KS*\`/(D*4am/@T0kbO`f,EHq+'XjL^@nLY$KN*e$HKk(-3%:KsoO4=1<,*?K`qr&M$&O\$q]/@aVMp:SIA(7Z:Fu0cqL0)Du8_LPH8.#VdLij2[4_>IT@e>eYX`-?LlY$>o5!mRBZ86>&TC=Rk(2044"pX/E,'c?q:+Cg02a(bm"*aTbAS=XSD/&NuqZ=FOAUfU^1mdEgB`6b3BM$]:eqQb)!RsFT.:P22H_-\:9a2EcG'@9ui?%JcrT0FuN,/f^[8P)MCT?F?@[tIMPN#KNB,,1ffi%Zrq`!!HW\2\>BD*'g@TbATHA:+=R3B7j@5U1MI6rXj44=3OVQr*MCfsBD?CQBN"qT"X=6K^[/aTeB:^:sU*_hWq@Ul65.@j7YALu:"mdUtHr2W!&SXbeAQ)\pO0hVWZ^CDuKP*CYZGildr=ob)4hI[AHZfR[]eea2\Df"Lu"QX^8^;b*=JD-WO3+i%Yg@;+0o@==LQu5CP.i]XV4WEhc-cIe`E+d-2)Tfsu1ei1HI;;l>*Dr#'jI041l[Vg%h!usB\"9(tg9bf_0Z=3rt'pkaCFo!q[PXK(q;c-EASitk;.p#XJrY58kE-+hLLJ/MBo"-SA.nO#3]2$U=D47Ked/PtHskM.thZ\Uf<_Mi.u+3RluGJq*NN'phXb3"Z-^;cC"iLCT@e57Rr)!-UDDjG;0.&Q>Q4\T1,5]'8PHs7bE#6K_HON8UsmEd"!Sp#1O*%/`W%FXu?Mpcf8U5']KRj_*",S_!,YW#fZE7uua/d(F]Qr:lTq&NhC@>4(qEcdp[u>$>+CHhYh-a^LJ&hS!,h:G3q;6]g*GR_=.H.*XY,tip:MjX(;HhZt'6sZ+p\"S?T#7@#-))?fa$L6;#1jlcM;=N[qpMMH7OS\SUH2RRI@]Z[\Hu*S9/p6e7[;-S$ng*nf"grb?Y9jVLppkGo!W6`",3#k["2](^n)'m$R3)-<+Sb_u(_JkWEahI=6P=s4Z,Xps#9e!iB$gD#aM5pil&VeCE*#TFMr$+EUr.P]+CS_44HEnGUGZelM#$b)d2t<^^`TU9T@N'UC=$E8oJBe'\RcE)!$CGJp),n,(:po4j!Zj#/gFf<<]oj&ADLHDH@A//\jCpm@CI&NhC@lL!ohY?kOAbe4TXNZ>$pV1iP;7uS9N[S?PMf!B!b5[m;qRQ#0A[r:/WcAn9TX\G9Cb\okU77K`RSQZmdK#\l%o0Y$EiJT_F)&S1"]6C#c91q*bp[="D3&i$n@\W'%@K8B=>2_f!*")@`?6786e2-]81S1Y61lZm(F`eE[7q0WJs8MoAf[uSa\#`N+:.",D[Z'-![fD?fNrbEgbn55MqF(;\2mm*`6,;3^eEu"("CJg7mbL52^o6GA'a/c,U!f;Fd4/_]*^<,`;92I^kMrUDTf3,#S.XQi4>(dh4=4++m.]CeQUE^Hj3!W;5EbnE0/80^@DdhiC^g*gY$JZ8Ua2WI,c5t\nF0g5[SkbZ-m4,W3^-U2Qm*aG&o/>nF8e>?u3X%P:+bX$pQuAeLT^V(LY;qcc;65WJ;#3Jn07%n@7+>n2Z(Ra4:/4a2?\I4FF6>4OD.6tsZ\3u7cI&dsZ(eTgpP>(9qtJutX&lLMr$iBt(asK(A]k?#b7_JsrqLIf^Sr[9ZN;[8Pra.d`3(b"TRG@N*"g0Jm3prNY"bAm*ji4>U^^f#s!B0YO71eV!gqbn6PC"$D(s#@qh[5g6-d4a\a*g9C4R#U%//7#i?`X&6([?m>o47XaHM`FkBVS7JRrqT'+$]fg$IEJ_ahEBq,^Ks[aHlg%LQhpV_m(a*iZB$*&CBk*DPnQ8\Sd6AN.jMKGm95H]S=?h4s,$XLq?id-l*7F!^D\"/d_cIM9j4o;6&l[4,PL*6#Punfd\M`Hl'+1QGUui9*b^(EEmVWBDr)W5V2P9L:f1%#q[rc&0OF$PDN8E+rVM2Uq+U@WSacafjt^ODnTk&S'3QD/F/9+7"HSfqK#bgPN]hjhf[%l^rquSO)`Pbjbad>(*nChC`/8#:cCD`>B5)'ol0.>5>?ds_JpQpP(LU'cmiI2_^OSi0h0Gij^uJtmENtG[0ens%\@B&*7CLU=8,)5pUIgXr"pP9V[^/`"3^p6\N8'^SA(9&Zp%A"To][TB/on%Hr#D"pK>1IV(M`a7iBeod1?Rri>kB+/MVp4e&e`R<*'73Z0f;B]%g/9gh(/&t>=YNf;p;_*!FM72N9/uJG*\fgn%[6cb5=%Em,L4u(fCP4B6jh).k6.k`)PGcS2^O6^dH*M;jIUr+4QugVZr,"G3ROWM:InX[;+S'L2kS=+bF>N6gZqD=3pVrs8K/1_@K6L^jH@Z,nBZF6&@,=DAN\$84jb2-3FfePt4bXEWs-R\O/B=s0I,(dkR<890nAH-_'W2/\CPAJ'VO=R5]/kX(BPfFK#Uiq$=$D)mM#RHjV0p.()CS\;BK[6GnLu:!BPr=676q%^(A"jS^K#a]R!3"+)fpMV-m!AI_7;n\e++?p`1_DhsVU@s'R&DDWGYD)27.@]C#etQ'Bi+FX>0P5[Q2gS#HIG^[m["\$4=6rR7dueD-mEn0<2)eM\27mrG4r@\Zrj5f-qddQTY9:-c%YV5.2'I,@Oc3tO,8`5JHMY$4aY+J'PD'RNRsOR_lSB(f;PVrF:*l3qX*[thTHcSeFi-,Hp$NTM70+N9;,s3Mj\;,)q/eaPn-g*GDfq5>X>jkGpob,:S07-H)$&cD7^'#A'e.W'dtEVu@ABh).O2Ji;IT:JIqhpu7Q3nEjPs")tlpDQSEkY$@q_*hSJ+anbO/^7p16Ih_p/HnT+6$>snW/EZjVA\I+XjR;#HZ7(c0T!O*VFOFu(.,F*5PWYH9;jIK6Hb)aP4@r0j4o7s@BotJ'%f&p>q4QfR:WR.ToIZCbeAMr5Are])>QqK#L(@a']\P=p4'et7r4O&r.[0dIoHGMWKp)/lN@8DV#..]?E_kq_+bIbQ<8%Jqj,E.]LX1:oZJXsNq(umCSEUH@$Rpg(R^?l<9ul<@clSg;VngceD(BHDmF3Ld[,9\`5P,-.Em%]gN;4p.K\[[iY!AOql[WKfq:nErq.6j*%q3bq+I`DGT:erK7b#Irnc&K#aqrg@D;5.h;'K%_FVUr>,6Ks"IL(J.?+VLL574#;qW/)rB89rH;4.fZ!Q(g`dUkOSI,u%m+/[Vj.0p$KV8U[b`.qJ;4BUgI;H$F0cu2epFn@)iF!mt5+9:fb_*#41`XUS47';t*GYCf-9lN4,.4""!jO:Y@fA^^pg:S&@E.WeHQ^cTGNX%Db#Q8"If1#-H:eVfK>pTV%5hr`&A[iume6tdQmm*D6e?8?fNnYLe>QA+l/?hIEk](A0_8J']`aCQ6ja8f");=Ei5(4om[RB]@UanP1BSND:2K.7MnFRdSGM;t_r_[<2[E/kc$G[LI#"YUSn6hHG9iE-HC2.HpPCY8pM9Sf+Ad.1.8%^X[F<9.sR(A@NGB\stC(9Z:(QMuj930;>4dl-)PB*V^[L+.i85Ufc,*s\&+geVqV[Ot7mCb>WS_d4n/Y$F&Np%A!YDq_"/4l.X].t&>*KsD8Qf2Q8j,;`$J"IoWUo9\<\c*$PY(i\d=HkI1a`N&[fZ$G$X[&e?F_7`pFEeb`2cthrVL%F:.3#7*>TtZ!,fUq8_S7O(@q7sEXWYDlFV8='Mh4l[f/)PfHd(jJ,DRLZ@4srgUD+S8+lDO$MTGhoU;5C-9/aD#VCYK`)PG_4s"40S7OajqCgChK#SRC>CtbTBqpE[#'7nb\qYt,cE6_kEW]F$\WL!s>e-`6Rc3#FQamh?%K;_V%J+PJ52EJ.q-aKSEZO2Og%d.an`")V6(Xca&Ua(-/3O(()es?dn_fV;[%SUeX@,0oo*U%'Dr.?9^.iqC?]A63J#Q]a/sp(b`_TT9=$I@BCXGaY2$q/TC[Ce/BPOh:9d"2^P*L4&,Qj&0-/d3co?CFg)AjA5$B1f'+$FSRejqfhpjJ_tpK+2R!0-(mc4e#1Tsh.Zs$"HJIt&F7-&4%4R4pMP)o1Q.X]IY"jqDW'6N949n_iRS6/-'_c\=-m.Y;u^[jaX.F;K:.X!3pu`dnI/T/\ImPI#L=aPK`DB/QZ'[*Rp8*"@-ND_`f6J"qd+s(D$SE`%UeSo"W#HA"Ea(b+$A(ge;Cm0)$78773e\1Va#CiH=0SmhI`lO5Wf^@jlX@XKe#&I,o.G*BTK^K%Q3e,,;^IZocJZ8e^i-eCJg`XGj.!"j.@VkUqfaIallgqqtH#/[((T-rD*C0"iOnW?IV4>+Qo=Z7=+7G+`s%*fs@D1]b#/M)@E.p+JZ!^bbP^j7^LH,L4F#hX?a`u)YE[_5fCG;(@BcDpp#Xm!@]TO3!(-a&eR*r+T:;h[5ILT1J8Z;Df6=$'ufksN5p$(9X3a76-t>;Y>K[p]HU@tm2&F2rtH9)$S?tN`)PGi"ci[/;]]Msc66\PJJ39kqk_##57JF0ZUhoCrL]ohW#>H_I6-6C@TJQ'p>JEj#6g=)Xj/_bh(3;ES&*rB3bJErJD]7?!N[<8@j2$55Bj.@VkUbOS-*clDfhg^cPhDWV(J)Zf(X@#hN.A/OK/%"F>TJS;4n_9Tr-m1-;XP3;gYm^Xp_*ULX[ilpYG3;W*(s^qVTEuB5ZOGKX\LE36/TLnQ9,fCooN.2Q'uj`YA$,sSJjI:aS!0U<TmM;,1P2Z&VH#]).S0oSJ8jAbc&%7M]%XrI46tPG.lUmLh0Q)8-U+oD:P^m\T3)8%L']/,2t>jEs9X)^]07HQ'5D']Cm9O!j(eEZTe_6M_S]#$j`g295SMd?.PGR>#hWTeCE"Q,\B*Hm.#eMkErBj!JX'D=ALNQgrRED\N*1o`'XrP03ij29S_qOI0WCT*QDS#N+%XQSQ9VtX7sV2j*jdjTb'/<3`@!dMr"h#qNJ@/tQI*qA7qFo+(C"KrOh<)ou#UO[RWpu]#/08aDVYuibLn2!/fldrtun^GkO*2)XF=$+Lp:n["1ZX.d5ld?Mgic1HJD1T*FHWd8(aR']):_5`A+s'CkRYN8GkF5])SeIHs^b]iA3F$Je*!k0?""uY(fYGj)g8?r=jDQH>&hnQ)Bt;(?^s=PZ?J17cW+]#,:AmY`!">e_*m;eoRV[0hK:&Y0QG`CFH->,lo<.,:6V$2,9"SAJ$f,OJ\c_X;4T8L#7(RNAR.L<*lGEi]c`0tn/1IPh:B?RZjoNOD5)c@gJ_r/;)X",-MTe?oQS2I]2S%!*_(N8g0?sC?pCinWWG,ObiRo[U.i.%laYPfY)E)@7hkkQ.o\>.I"r+)'<^:\"s2f9(#W5'lULC=kGm2(Gi_P>SWP'2i9#ca/3H+A;Ci##Rb9Nh_VM[s/4KY&2YfR_L5-RinC2P\QIqo>3XoJD^hLo7ep\Y]gY/Ctp1M]>BD1EQ%p)hLae.V2HY-Hl'1?&_7!,7$Ti5&_%qS8_3klia1iH5shDn"I%4$33'!gH@H]bYZ6EPV'0birdYYNECmmK\iVf:Y>+WhA.;#p'lb*f","VaIpWoHZ"?kM+Jt[i#RAq^4nr^&`aH*dSR(k:O/pJk[gk?<"D1]Uj'[n/e44cNKRW_(/_YCEV05!ZFPLC3-6C@T6&#l?NMD!]&"ecHMoR@\4T8J5cG^N$=m5S&(IW\eaZk6I7jn[+IeXHh5leU5"F0,F\`W%1(g42lMW(fHf5b>EGL6J+BE]$YEsLYb2TV)mZC4e(Z?ECDG?r5c2DYjK`'Xn-!:/)*cDN.Ur;Dg6q1HA.M,lArI4BR'%slB7ipL)O^Z>='cm!^.9VkHPnJIL0n*8so;g%d*kl8R1N=;^j<&NQ9!t[\R!71S\N(0e.D1$I%f/p*]t"F4Qh,-N@El9FmTIWbB4^_e0"@AK&ARM%^%I5i"]KZ*D1GA4h[90ens%P(q"FW[3qMj4N+YR*0J4:.6318s$lKbH7>c(amA/'Rf#TB1OdWK(hF*'n>\1c_V'.mGR%1beocM%iu7p9!:or.Q$NA4:BN#;&r:L.'Y^*RRLe6FN-OBb/\tok`8'[@8oQTQMZW-Y$jn=J/>1#Pp8Bfp0_iPC/$^Gk&\kNT_:AP,)KUl&@.Q#fQtTsp0E#H1oQ(.[VXVKGWnMN7.@]g`=n;,rkIOuCZFN>UB:`\S0(F+t=`[GYCf-NSlNg;,e>#Qq2p!nWVWEH7C[HfG5.gVY9emQh)A%Hu%iNZ2_%ZBhto=5!DU,42Ks)q+'Ukm*X.*a'm7tU1+ePj$Mt`20>RGi+XT@AnG_a0Pg:=;Ub@tCJaJ%`tXh=&NhD;dT656(a%:JpoKgd/^?,B>LCe?r_KI'>?kNEqNC@SHP"aQ']NTC(9gs$Xt^(F&T6-/OLU$lP't'WG(1kXAJA[U4gjGLBnq7;e[J$r%hLb^NN%M7shuG,%fK;5:.4H1/*"U0),u,;$;rbU@[7/3u)`ni@_hjGg&Y_:<1-u/Qukh`&\2GF6i^IFBSpm\UAf24GgSHieb]*g38.h`/#.p&Np%1/Xib!"&ElV(c1MTTI2^9G&.qALm0<>a.+>ubXVesMbfjf>Um]+O&]-^O,4H!/h8/kI.3*Xj>g.c&+'2ZYQ;PB;7U]!Drn@2F0D`qi;p#P2S.Ols28K2s)M04dL?s:IN-htf3Vr6O5%7d1#mP>N#$3[WR\:[CK@!/J*0h6?EHrB[Xo$P&g[f)T8pV\fi=G90D+oRi04/N2b0j+*LZGT:blfmhY=\Rs\7dhO+Co2d#$^N^fK-`p6jI,*5d3qqtO!H`:trNF*d9^CDF:iPt-SiKI@/6k;i?pNYV?j:*g*q2n,SkWFsLJb'Of,1#[73ASYL<&pYg*KB?+!5TJF*9H&C>$Hj/.>/Fm\M*Pd?<5-9I_k5*TDg3m-IOX@%TUtCugL%:?hG\bEjGuLhJJfc4eC@#5'T!$fuI*1<0mENfMVS/*PZr373;-PQW$XOB&QAi%ZsO[Si1,R4iU^B[t&';WUN"&Z;<:!#TU'S+/S@P'RT&=0>^QrRl>'hWoAN>sj6E6^M-8E2dB+6&D:S4)OsjakR)[)H*_C\_(-.Jrc)#<;_!RdVbD+VC(o@J5>?!:]`8?2W(%t8Jr?`*=@bEV/F?!K4j>@("If5c$UN/pA=cTe\Y78d*/Db0N?fZ#^[)5"nED>W9-^/H`W_+pn\Vr;sL8m=.Z/,EA52E]!`#D`Wg`O#j\6mi[Yh7h.ZrnB@D->hYcd5MjX<5`$k$haPp_*/M.a:T+[^Bb$gpAR4e._msqa[==ghFn"_h6`#bpTD:6:%-r`X#jG/c5`5P,4Zg1B&@kt;V:E\cI4'=/<^&4'.\ZSnFJ/Tgrg(NB`%e"3dhoP0_&7rXGTXRO,9jCQ$PQ![_W#_lPS4W^UoP^bL'UZAkc-(=#Y$P!6?#ZR^[!.^-_YVLDb1C8'W0.7qS17`OFUqn#5-jfPKC7*Ck:!S3"$&Q[PJlI3ASC3*Y2%@L'AHg`7\^>Ae!Y76?S!&U]h-V..I)IA\:3jkGm%;`;14\p+D[b8E6Vmd>E69",g+?Zn7`[/adI*tEsSc9;&WVco'`EHaUqTF1e&g39rE3cOJ#1-RBlp-9;90D3%bK'O\F)S/4O;&ZIhm(ppfugl't/"!4(cVTW!]Th@oYS[(a'/n'%"_USauKOrqQdZJR.NEa,d3q,ZM-d(U\0''bj&ar.r4_aO1^;0MiP#*aE*(PD+h^'GrsRC`Q-!9382[f+o,M#H0")OZIRi20@g\p&$grlL84BahN+R:=]CFL+`E$0ChBFGOD,lA:WO((_h/n5-OCAjA2)Y/_Jmk-jH^EnNdhdkKarR`$FkTp*0od?Zr%,ekoehU=-D*<8miT<,=+c+,&hNiN!:o5$1,Q.Qr$<\p@A0dki*rO;5TA@`8%El,Mbb^[mDa>23u"$/<4\/V'3ukC)<8Xb.?ng[emfTG>gl4L7>>K3b[$)DLK*?ma\^NQOXQ\@J]GU/V4aAR_\<>s21#1g$Ns5U,DW`"B!Ka;ktHEm?hB?PE7)#l0IUN#KTQ,q8!dNa^q"UV#o[n)2fB@ZmgC/bYt%#t:7>`\HQmK:C[:2mn(O7fa#.V^NOek9NnJb7*1Uk,G3=Lu^hds_:L[i$4FR=$Mc\SOp9a:M1%^V2:>nRC]D!6g!u1Pf3aql4[JUnb!<0RLNMCOOnpF^9B-A(P;l$KXq&X1.CfoIQ.IG&n;3J0q,e%G0=J8Q(T!b:UV!iSdIn5t7CMGXM;M5dkIDEPXpH5Wl:OLt8S!jpIS57$`tc.l'a_:]VlUFMEkEg!;rV(HPcGW$IapYV;(3eL@$=3p&-#62_TIhiCOYl\E8qXO@3/MX/W"`i&L$=jM]a_@5'Mdkc,Z-!#ALo)!/L5)F,H<"on,.[rY`)PG_2]`2lT9FgACE9MG,GT]0U\=`PiXOXYe//Q@5]n$q.p&n/K^$65luV%PIi)q?PWO-^:rsJ=ZV9MsmEm%pakWEX@uDg3-@q=6G4VOI3Bs_>tm2j6Xt*1KWcd#ElCMk6F?T5eHX_"W=)OVpU1p?e]blWKt:%j\jZ&rf>8%/3*0EXi"JUGc\\_Q$ti-mDFIFBka;`-s3&:b0q1.AqPXfb2Rcun\#s'*P.=^UD,_0UaJ%lKAistbZ5nT%`nfc."f@!74!aJ2e%']<=pi!fb,L2A9J=Q-MU$RH?bSl"RW\D`EK_/TFnPC_:L'%c?,,lF\\2T(.-Z3Z7a:QU<:o[@OqG^?;*9+fAB\R$\o)p$di2c;I9cJY!FQ>4X1,YrSWdZR0_$!o!l43?'q5n.S)A8e\OAu^>LkF@[r*?:'9DbUfTf)NNBo3U`Xp=`j,Jj[*adfV"jF>a:ZN9,O6(NiB6*@+iZi&5GW]$"qm,h3?"U2ML8q3MQPo%<]mI^"]Y'>i`a]1X.Rk"4-Do3l]($WeV,oSb9b$FU[`eiE6a)7E[;5lWo`V4B6fZ%UtnHM]+d]8_\`!./>17!L3qbA2#4LW'm1:LuhB0oI8*dIXitKTLX=c[["-VAF>p%[Vj,QY8.n7=5*$s1ofOQS0U1T:SV.gStK_-kErB*lbAa&i;'nLcN7RKZpi_En-CZ&IcRSrQ8TD;]e?8#mASqB/8X#CO-,VQ[u_/C$]KaWc-/TAHRT.?J,2RHHs&-ZC^krL"%MQRi`^29%k+\Tf[74*Xcpa,fFY1qEl=-a[]BkD5N?*fh'"^?dt5Hbj%%.enr\Cd:Y!oD^[9\+jOVkKaNJR($n*?GAs))NPWSWYe1oR$^KMWQ4&J=+Vn=TM5X5=")t-Fn<&4g/Y+Q(&tEpogoqt'].aL0Gsf]\Tj!7@G`6CJl>HPY>*'G`f1q9X/i^Ehc^4*-Tt!*U1R+Z@mTDbPmm2C)5T^>N5nf+DsK>s#*JC(e>_=2fF64^hCTm-m:kZs2:V2`d5Gdr!iqm/hBoV6]$Nc83rU1(+r?#/#j&(dpFFCX#e4r2HM1%>pHhta+d/1Ma*bI^Os8'0bo7Agp+ZH%MJCaerBWKq^sSI6;q8+u);<2g/+BX5Xc.@q$p)V&k](o/@l]41HC1-Vc=(XP_CWgj0,;;^6?mJSCgV8^"!4$H'2[3qqu-5MLNm?i7p91d'(/-gD$R.kpK4'V-$N9h=]WXO8TtI?-$n^)/bW._RJfJCB>3VLoPK#/oT]SLC]CIEaNQ:%&Tt'Kh,Jr`Z`r>?_?a$rhN9C`FHKGMcn\ab_ei@2d'r:oX"-Ik;,QGch#fo9>2'@r?aG5/R%"hohG3Z)q?=NhK=8TVVI4EgHZ,pftt?CYTaCC$Xt8?F?3oC0jO3C1J`elS&*:Psme>q>);l_Zi6fkt,0lKW]$\gpTqqB%SC'4f3p)'l-Q:TGJPp$V4&`Ds,N/Y?WNb(%_+akZLLtNtoa9\4#hRQqCTI_rFCX;*_/OG>_QBKY+44i;pZZr+#:13$3etG`[%\1pborTmktPY/#2BM]@O8',rL)`SKDJ?rW[-\hIo%]k&3D,u<`'BaJp\FS(ReJ=sqMYMsE;=:.cL$LE**67Uj[Qra!iJ+fFj#YB<_FIn?$"]"3WD2<+_PA'f(6?P]Al_D:QIc8t]r@t&4M@$!&R$e_9!44*d^t1EAe0&M,s4;>[mr09>$$8LS&283Qq1K@$KSra-!"t]Yrerg(UETq#V];\AtR>]^KhPa/ZN*0u+_m+>1>n+$,=*"]MmQ"]\;F5o,YlbKdNcKJ&<0f"msj9$dqNAIL?S9WVLB6WP\!Vo+.KcMm[ht[e'Tt2m=:Kdb?%M#EOmk67A(b6s]d>9G/7$&/LKg*J]qY;=[9MD:bo\jd];!,sVB!%PHmb*3"*YT-bX9]j\;e[J$r0+KPi!9bX_)%\Xepafd]"32QoJs`$;m$BI'9ssX4=27%+X2/)9Vma,n^#[ho=c@s(\.0df\dF09@^m,,,\oK#bf/g>q75dY%2;]t2@Pa_EUO*.'3hb%]o"8`P++kVHo%OD41!/i3/A_4aoRUICM.7ib#TaXXBp4IqnTRm\j;B'm6uI+OX&-'QA>tTlY(+r(]#%HjCNX`@=>>-uHedk6l]0"hH_Rr;VLq/\HloM-i4V%A\j]+`rOTQ?`>gU!fN#Tq")4JT$GAS$Q.@.)/fR2G+!b;'2#I/,OAOl612$4^-0fD^;6n$"VpM713*\[%mlaqa4!Itc\O+?GBcI#f)ST1MSmECS'-pDn"'#A)25DOj.PkdV4pV0EJq\WnIRl1%S7BN1.q!>iSed09=lfB!("g[*QT@J]FUqtD-eAsh\WeT&'^V58CtAeI390sp-5=YK7u'2H&][7d]@9/fs`1[mBt<\j/Zhnf6qN>c9Z4arC(r@(0_R4]MGo\dKl%X\'`+5^kL#Y7-/pFW!Yq-M@bk@I^OW!!o=hI1-H>3F@_\n_i]^$>.R:hXjX:RI+';Rk:!T8pTFbB,TM*TT>*hK&(Cl&p[o=K`#P(G%i-^)b&IVt%@U_WjK*1[kH5:a+X?`gj;cD(P`6ltG[[C:#N=D>4cH8KH?bVKEVk]0obY[C;/th7]I!j:4a4].q\T8`amc]J(E2!9@34'$]PPSC<8Ko8;)%_<`2^\hNZ:lnfZ*Qf[@%TWV$S6TJSQRPjKVrm9127e\]oO2`LFi8F&U9#"hc^*%R_4F9s!%;e]/;*d?u-$(UkpNlZ[X6ar'ek&KYtB;s)%>u1laaBgl5].L$s&uk(G5XJG-K$=e1b/mA<_aSk1c:Y]X(uAKA+Rb$58VXXp!KFqiN`!g49KOUAsplBg'"77.KXB>+F<>VobS?m&eQC?Sh69UWF"%`;O6u];Bk_9;_pm5eB`]qsY6c6d0[d[`lkH'T.gQLhTmlnf34@JmRcn3Ce9K9mC#MRN!2WRIcm"cN4ZM6W-Q=A^hL?q?LZY60sMikePEc\-5oB%QbD>6/0l8t^po>d5+Gk"V>DGONJiCA2UP>q"2fanY'7)_7V3F9s!%;e]/;*rf-M-91,T4s)`;C^mIBEKre,eHkDn#_jG+WLjn2icDp=-!OZB\$7YUnlp3X78pHS"lct1ATC%*5=fI>jW2)/gr'WBu"7O5]*DIhP5B,C'qfkJftHsjt$N58Cj9=&o5((d_5_u[2ebB7oLbEXSJf,u#nJPdS_$5G)80q/F*%buIp9NIW_1c3S-ern&BX;Y>,GN0[9Rlc]"ft,5/C[^\+q;26OT4IHuTR5(rGn]BFjC#Q2.K3MeB.:?pGW^8s&pUG.J.Z#@IR[\mtJ_j9hd3l8sRZP3Oj;`qG4UmOUWD4L:bDU\!*I)A<^b5KBs%!kIe^=#T]=sEh4Ydp"j]O0]Cd1,GNjEfc*9;EP57^>Aja,d3q,ZFmU_0:m3+>c\%`iA+E)sYp%1h]_9^],Jg4F$$!RRm^LNep&1p[@_=6D4TU`^d5b=:+r$9CS=98t/`JfVg:r+'-Cm"[6@]18CMLG5XJM*^:;W$isibO/"kHDHjndjg:-`*RgWd#=;bcBK^CqkT9\Ki]ZK*?gBVK-`m\;K8j:V&/VKdGA_9GU?U%0_f7rT#5.3uC^cWFo9_>=(9K7o-_NF@4/)Q%`nK.Y?RXeF:NVp./UVh"<):5j.G_II]t%EripQa0p!C')fA,o/#ucqfA;l7L5++@a+n"X$BK--Sd]=H[n;0GtFc7gJBD)%OrK1DfTG;$toa?tlb7l+X^Q%_1mjHoror?t3oqYr]:'Xh>W_+rtHMj[Qg[9'J4Lj+?$E%$Va9*&@eT([T?`d4N]c=F*$?.a41i7YsoZJq+TPU8&)]&J1DAp;#4d+93)mLi-Am,QIjCimc"@N7ApK4><^k=UBH`!%8#ftRMGpq.K]l+Dm+D]Tc89guRkXjeo1M#$4X[Y/b!S/_+VZR3-k:L&^-\,N._.j7iVndp2*05Z\.TNY*[WBbPp3SoSPCURYbD-qk>.!\8Wd2g!Zm#\=K^03`BAiSc!6$S(#(Sc/m,+e_YCOYNC=T.2C#5_^A;67lgn@poAjB>`>At&n4c)sqADj_'l[69.Hij.]aJ$COBd5/FO,&bm")9e6SB)*E97I.@k_6Cs"kj*XbKCP*8ce`o]b8;'+s3jh4p`lFJuG'c2K(4HjQ91A8j#4t'>?O^SQDs:kCsGY]"hsOio:C^%"kX_PW;d]M;U*CPr>JsnVH)LWku.R<5%,^iXkp@DZZPGXoDAok8MY&5k[I%X(B]Z7205Ss$Q[8`S#DXfdG-'M4+P+6JY%YCHIXaQ>H)Wh),7L(g`FB&O>4ZB8e2>l5jqb!S)D06bFOL1XIUlGP9((aG\g3u:m0\?%3@Zs%j"(IeSE`D`U*=`$o($?Hie9(9@b_*`O'I5>$YFIK]@&ErbH'q2t%_?o!`oSRV6L&oGp'J0B/E/54jo]Q,I0(!h@!?!rO,=;/k?@pipKpPG(hg\rscp`pgh)IRD.J_CaipVaiN3=L*'5h&e=[!o,QoFUO,JG]9<-AjH:-0BL?A_o/^B?5#FR\E1ZhCY,MO0+2[HdSL?n.[@"*FB!!b,N^g='E)\&jStkY%5@shPMR_iVh+#:B`S?7icr[>N7Ar=$)`4H+H#,G5$#(=&jCUUh7e,bVUkM.6$(4%/u!p6m)iH;7"WgeZE^'ToDm&$!hY$injMh1R\c9)O8TX]_KWLX/JU>E=XSa5ru^3Ga?Gk1i3ug/I`_iZtP=_Qhe.OY-)S'`iC>E?T8)4c<*%V4+Ca$D&mK"FisegJJRI[l_ZqBY>`hL+$KJCM*e?.)27rK!+Ba>-l[68S([1ano0I(X.bPfB;h3b%KACE`B#(+U=LJ(9"dRVRK#\&(P'FWe3Ek5W*a[c]Ld3]8NcA-VkmjnUV<.'&S69"YRLa8p9(qZfMt-@):7D#)'4Z.ikNV;:Y[!J04nT9*Q^9(#K4MB;&rqo=\',kg6+:_TB2S/#DAW'VPbY#+K?unqNKp.\GYCf-9dt=Wolj`ScL&I*Uh*K.&@%M-QSP<9`peS;bSN8kgU1'L^Be^s.Pd*GnI#j-MNb--;g>>MTL?S0j$mJs=g68XF3cJ->+5(IBe_OZ#7M[W!OD7J1Y=)TIri!?*2"O"G441\6ar'[PmlDkmDpL1U>YS$(#+k!"5Aaj9a(($e/pgBKe$jk;?$d*8H@.AY@ScfW#5[F3S;b+@DrCc4G/qI0Yhs%DN4\s?G`j0I0Xo^FSiZN`i>@VSO_X\b"Y_N<-/S[ak](@\*ae$gZ.pC#1oLO_8:(&:/fsWK5$e>-:oX"5Dl![kN%:?:&]XpgoFK[Z]lCeT]NTWIh/B-,)\AL2B'o6(X,3afgJs0do.GVI@qCQo(gBWsZ3B$k+894nP_!Ti].rotY\he-"F+@pBi-2JCN8mbSc5q&:I:@//4+HA)cL[+r/`/Urg1a98<6X(t\RW)ha.ZLKp7Gn-]AD&r#.8#!KCTHTgNF%dAU4.G$R/Ei2CF)0ZdQX*_5A2_J$"3TA87sD+b^D!*pr)apl,m6P5pBDq2QZm_4-qrUVJ)8iRmdp_Ec!X'_PEn5uab>q8l2bl@N<2KA'^.XaV^YmFaleW:s6Y!";_+nCW[[h^]2f>e#UC4P\R]KC>*m!B;"@!:]Co&,KJSj#TN@E)n3WKg/9eXa30;4bRG:a+nPGLZs,'*[;n!TroQcWdl!<6HXt7n:tpC=!M##^gj3Mb0kAiN_/jn/3XG++7S<9'@@&K#bf/g6@<3g%e-MbZhfcC3?dE<,:*h1Z*QlF*9D&7cKZCdkHD_X(Z0#A)XNa4"3:5B[QtLWMQ;f_)hUJKoQ/E'5((W1oQ.PZ>BRB/_d\!NQ7^k_pHV-pV&e(ccLu!\.[rZGgZ$u&)-));g%d*kg;(@17Z):cfi#d5'WTgJ#Wd%*;&8feR-K85i6hkd(NOpBnDC0"KUG,q"TOVHp.pHn_!6]q6#,Md2t)FV]NSo]9#Vi7-)#KhJWZPK!6D.-@9)nQc*Ba2s3P@kad\6cdm$hcYP#oiV2Hbc;gpsU`0@@*'AN[`^M35Z.pB@#tgik?B)5Y0k]fm]:Y6N%6e^@'dcgpmCW(h>EiqV7:P07ke)+L-I:8ieAO*2Ks^mLnR3<]Q.Tl(`s&q'49jAbpTEEX1g3.U+X%+9B`hnO[hk<5=pc=;I&Ct^_fh["hEcg^VnW.+%3e0ch&@I%]ol9-QZX1kP&X'_eH5YWj+SqVh)Ilt8c`RMmKcE2CHT(jcPNDQf3&qCfn@do/ngE9i"$^SA@*$1Ii[I,\I-VRi^fp^\WR.^):_.pcTKQG-k8cR0%%PO@TkTTI0.S?o$peT'YJG1oTO#^!@P3t4PdD>QF(4*J^PL@_?0:nb0HhOPTtjd$M%/TmA=h_(/Ae_4mf?@JLL+O5jMB@!KY*!@A'\M1%+hbn569flYECX!/cOTCW5S"L$=79eWT6Q6!j:=/Wo-\8>%N4sW:Rsh/BLEU#=N'TQ554GIc8uXHNZV"HTBQm572I?uh.P7E0RPVHL$[r(SROpkB1Of-^tPDT=hQH"GeAI:fSWg>3>\$6?_BJ@Tj1_.M.lu96Te0YI4>J#!6G]\W-#uc0gAVI9s?N[^eVPa"&nO:TcDXe8(U"n&;.Mj>%4T$d$;LIcHbWLend.uM]FlUjh#_X<6IMbji^Ne>IK>kZ*l8elcWE;O=`Fp0@iFPi+0MA.D#sC#)`FN?eDV]qN#)/7IZ\38m>`oR&H7+Et4_T8cg%M75C`HM,[?K&Qg)o*g\2c4=27%+X2/)9Vma,0i:fDl?Fk(i@^7-M;U*#;$diN@q$p)"HSCs,#uZnU/E=ia$`67gW%!fk)qsGOjosa@;HU)Q8j%R;$=`fp24SC`L3I/o5Sca`A*B\YrCt$Y@NaK?iOY.)7IFPMl5>IWLfuf8A2W(%2IVCZuShs)0ac,K8Y*A7GI0#p,EJ4a;Je[SZ>DKEUr;E,J[RoX9R5+G.YP<8%U!F%Y0[_E9p$WHMQ.BPM7!fOf3oN$hSrq4_i?4dSj-5WlL/IRl'jfT&P09Xa@PiT:l\HE6qaM)4hsbL:6c0r-[FdrF9E#aS4Sjm^;QaVm9oP@Wa?GlJ^=fQQF4W2+.NG"ef@`&/OIC.OnJHud_f1rK"5qo#fQjBIVcVN^NL;O,R/+P^(hR_q'-h`q,c5_Mcp8q.JI4SI-p0+k>=:mk_.-q(D$5oL7L(qR[=Q[`3[:CK9h[MOpDJ%;%ch(\B,;u@hk)d%iSg+!?D#;-p0+k>=:mk_.-q(D9B`UU^--B4#Tm%rd2uj]n_OaB";V5o,q`Nn2MQegn0L;%id<;_!jXr9]l+=S>M3l/tV@`X6]JsD@tK1k:KobB2IKZ@u&h-FcnlQ/LW%V!rNMkcmW7p4C!D;fWLo@O.8?kC%`X^#5%.ECnU$]V9G./l(1B-`@kD'$;(6rk@E9aR=i*.GAt;oPK%nQqqstPTHFGRRl"nQE,lfA+Y?E5r9LS,:t>*_X)bbX,ic.:`&2k7`Sf.-i0p6;QBm'<.K-Yj"$APbg`Loq'hD$_j!I+rO-M.1(Fh2'b0Hle?:>O3belEkX[A]@A1Ar3n`nMske&gbeCtoo&%8`/>RE>n^Q&eGVG"8$W5&ApgX*6;kTo969Vg.8d1Tn(*\4KIke`H,<)O@o<,*n_R<^V1h2n`j3Y*,IJkTET`@1PP$K2.kUm0AJH(^1-Ba:=0/'m2_aOhs#f3cY^dZTR01DX.\d>k!bi-P9_ZZ&'Kd0eP5.%F34Y.`d[GMe=+Je^gMl/O*X"HSfm!(EPKQ@8``@c6(SdF!(f"*C?b3"?<`*e;RThaF<-08k^IW7]Nuq<$=,SqXl4ipQ90p@S+4PiD"lg@?c`R;SZF1PJ!u4-*O,9jC.0Yc`_$l;3JQM75CtnE.f_M2`Pe#8me^_]8)6Xku2egqZ=Dlj*)/dLMh0o%$hQj;,LGiogXI.A5WMS:XH'=4?G4%O8VJDK,I,3juLLYig+b9t8/'K`;kAkY\`0dVaX(Z1>V6,H>p@)4gEqqV@_T8j+*$N+:NbnfC+nM[_9a=JmL;jr:.ZTrS(*FL+gne(2N7NB2Zo$`]gtdJ7F@=$FWN"FJIFj<3(Kp2d*1$,"'%/6J<0H#r_W+T@J'=+X_=qsss&>iRERKL>W`9"p;WXnbpV4Qsr!D!5!P]&g<1#d`e>`le?:]De2c?p!,eHb>\>1W7(_$Lbi2''Ps7YoZ/mP&5IM@q*TgR=f(Y%-EaM2L,jlJp:]8#>(!^D]:o"Y4OPja_ZBYp')`-qMZOdd;nL8(G?l)RmMT-'Mep%PB@]gL=J&pR[R[NZnll213S5QGQb`!J9f%$mL1DC@)r3dd=K]9eD77@oi!70+o?,$P!<$-dKX%8_ON&G>mBR9eN4ndB=p(5G4dP>IQm]`ULBKgK&iG/8)iU<$i[d;S-Q3_[O-K:nT0qgN@CpDhj8h#.O4]/CqP!#Jmrm]fB=.(d85.JJ+@OR4iUML(^Qr$emsB!P>f-e;ieX4g6S%"]S0BZMr/8ed%lh&3/LpRWWAA4=]PDG/F$M4hX+4q?-3"Fac+B#93c&'_C8)#X5iq5RVYicQF*qWA&T9p&e.8b=APcRc[OT[nVm7D\<@'bkN=`/Vf0C$Y(dC?*&`(bl'hLX3rgSjR/N^b]BZD_a:N@Ic6mg`.@t)0oM*Ugf0PG+%9.M3a,1l@2Qhe::i:&4oJ4c)@!Tp[2TW#`SWRD*aQUL4E7>JA><:!-1[5O-S/E[;0T.9FUL\gf_u8CU*EkbK+C5/%U^r&C!u=fgDlK0Dng0!n"_Z5E66gFX@HI&CTXbBNj%CRC"%]e7h::R6R+ss=^(-m$k(fUSp1Z8!i<6?pA5r/OVmh7jlSGE!:3s%\!H930+6]#I3j^6CtuZ0Z[NcZ>)Mhe.kpBLe6fCf;uVk*eCrs+fmddOBk'A+CAGKl6)h3o'M`B+\3KP6b]_,=;`HM.O.-Oi4B@(#lqm_GPGJJrI#6ubj5SE("$f?m(IY/8"(a2YDV`HaE8*;35C/Pq6X.!l;V#Y9#[3oIn5q,V,pfhp(G6gpAoGtLY`lVF@`Js.4<,q_rqmWccNjeATJ$"P.YJ'K'2rUD$6D-?d1g8X3?ag_+C.K=[jZLFP[AY8YiWZ_K:.*XhdRng:X^u#?_c1*ppOn;B"E;7#>QA[COMU3',q>\c!$k[ZOECTJPSW5^gIZpME."S61GX"4BA,WB@#3YS!/L&%LuAUP/LjBWa9#1o]/U&5>r^nn+5)lBe_OZn]G0lnT^)I4F3'rm//g&N2fn_5\9L0J0ho!>4TRii=e\4F8WD%fX#hQ'"FJhq[_i_CC,2`f@Y"$)0#k`(TfBFJ6)&A#:5,a;P7BPIEhl@k9Mi7C^57F1#B@58&(Wl+ncm9GJ$8]$8grr&W^K6BkbFoMiB?4]=jV:og\)X))DGU%t16Z8]KefXkMgG>h61iHl,A[efCP4TQ!NFO+-#R)&kMQF7@BgAl3OjnXnCDF`-`6NUP9GOub0eJ'BF#4`$MHV=2b3>r!BgKj!d4W:dRBWa;pV)2Ge&(skRj7ajk12Mj)$;)`#%:M@E2r'>\0f.W%eoA'9k4TFuBip#^*pJ95mUNN*iGW`r\94P&(L^V^5(CX]O?m"qi#*1!.^3A,;E9M"4!\RNGJq/Tt'\U+6#4SHLV%\C8ON<*0.+guipAl.c6.74:\91rB1-6]@L)Dl/Z8#^O:)F2IG_hLW\YiigdR)10sHe]<.P2L?M#p9dt?hX.Cp#HEG:&I9?'R14T3=H">s?!c>KYM;!P^TIjgh)ne@$/fm)7TkgUfeLU9p,)cpg1S3c'S2lG_JVIXkE4P-^^/!!)K1B+W')U'p?(Ol<_@2"hfD@.a_n@87(Dbo3'>qd7j5?$akM^DWZXV8st@_6dmmA3:o_dbnqjP7,A&.O1#+/V5L&/BWiKXPc.*=JU[[XcA)]I51Vo*.'B5:[P2/M5B21X4HLr\ea>+^t\RPU-o(-Do4g`'^A2D^G9c4GA"Oc-B\Pl4kMs="Wrkg>TAEoH>-S>A4.`K*orC#33tZ3;G9-:(!#D4>IEtmHM$/k]9#7QSPQQ9oV`U"/-%FKI#&-G.Rd_.El/DAue45;?`?,Oa$ql)i.ZM.?8TN,a/?eXoEb!B@hSZ2H(Xn;*Uo9H\1ti&6K.#gD#L<)p[m!.CYm[N7cS?,pSM:)F!on/?3ZI7'.3ncE57/bbHeaLM,f/MMdd#@r;Uj9`A'+08or&.g$3p^tidt36i$+h*\2?2]Mna]]_5@>DJHrF1_*PFq)F,rT:5::-/X-)q/tAJ0.;KqZB1(=^I!L8JT#)]Sol/JhAjl-UQqEh\n[R5i3IOLFLe93>'9u9(4>*>5YWs]Vkk".59j:$67IZ\38fPTVU8!J%Z(t.8hNV8I95BR@\h]l':DL_+&h6.I(RK^URS-@Z7++NnR$^Jb_.046Lu>P6]Yi0n/[#?D2frjRcf_3`i%Yg@#nb!`@Oc5pLrZ$DDi"T/_.02P-%a0*6mY5(O,9jCW?NAsPoLAu-7Vk:GYCM)6:C=1QqA=6A"o]Ri%\)cOt_-nFtMhCN=M,`E[O>-h>$2RU^WanuneWnaSATm[kX3S:6@oSpJ$_3W*H:\OkYhTFk+Wr\P:+a9E@TgbK#bf/g'A`5'h&7dM+X!8^uNV)7E7u-$Oc!N=geaD$Ic_=00!l:RN*?q!>[6`nqGf,:FZr>Gp5jmc^pljNK"D?m9;lg7B[8eQhPP[P`Vsg7\5c&!kUG"D&`0Bh]+jen1jb6Lgj]*jp65'L>'.7Kf`'!R$`aM_.046Lu:!bM37j`S=5=+k/nDg+p'pIM8u<`W!FfmgRHp1Ru3.mF9M(^HRd[m%@p]8+&D_/U(]%>4jdt]<;p;AS5Y@/cCokH+PO1m8JN=H@X*bZp"9Uho*V?o'DF6Cbii5l!_#%e>:(m1,7*[=?.AC0@f"2?r_@eOWgB'O]tX-^t48RP#IqQH!k1b#AhQM^@PnfS?i;s]XhlLm;e\B;`*0E0C?g@b79EE,)bK-$:,?0O'a($s+)E^]!a+S7,Wi'5Y"b+/J\HOA_e&&Li#R)QkU#4rb"2,$XC8..BeJa"<3Xa-B-Gg[j;H!Hkqs4k8TC?sNc>IEG6RDSNQ(KL&caJRJ[GklC18!G(0rjm6P_WfN<\sPT_oauP8o9Ci+f-GV-URjVK?16UM]!*%kX3u@2"9A;'Y[N1L$8to:^L&i/KF-N!d9ic;cn>Q?Sh2l%]79k,X&l?n8U^TNl=r=DH#=*D]i_^:Q6Y/gha.[LG^GS;C6#pUHl5Vj,..%9#B0GPMOsR.!c'sFKjIbntV4rARjK#YQ@&cS)UoKM=VgEV"4XQT-G>C)1RCdi@ek2#9M-c]_TCS]#fgf,I$9rk:rkH0#oarX^3`DrV5+4J$oCM.^O6B5ID)0A2<6>/#eFcL6qeU=/?>>$e6Gb\4WdS+b)\L#S/ZLj0DN5Co0mtM:f;l?VEdE*!Qtkmiqf2iFeY5KH*B5(HbelH>0D[hsQ@VDa!<=IaX]r8,QS.[fk-gkP=+MZl&iP19(]dO]Ri\b;V^eSt:/K78jh4H^<-5sPM#JLZ(Bt+oIeiR+g9k;EMGC;s0d]%1bO+%c-!IKYWFiX5mkS7tf"HA3V7>cCbYRA4QgSl"/lIDn1l/r-l\F].N:"=.h8h;Or+#N3)eEE)DKqJ%O$9!Y*h(GU-^1O\E&#'R&VU\(cBQ$-;XN//4-g`WMCpf,_bY]T2sJY9OmkXO"V+\(\^A]SifkMA':+!_@Zk8jpt::MC^i\aaCcUa6ZN(9l5'p(98ZHqfs2p+"/db8o.JP!TUuEn*Sgr!25%ti!7N)R4P\N=[TTqK042GX3u=Q&TZ>&?DgK'2Q)^?[$04TcU8j_tmGYt_9cTuH3`K4,mTc"rT/n:r8*t$><,0?q>qNPJZ)bLTil*>W7pV0)Wr1kq00sr8o_?h/rsUJ&6./i-aV(d^q51B'5?6[!'2ljsV%NBVMGdGV[OgOIq(#N?SufNQ0=X-iIbI1ZIX-;4W9Rb-3&%H:V]SqBpJ1lB"q4(.e]af1C,N77mM\lC2)RUgO/!.8k""U/m-&tVj,O3*W_J#paL&.osJtVT2aceBm&V>X84-n)Km/pu_?SJOKqI3A\F<:5/J0"dm9T=^YKT[WSH?jf'A:G/A70#J/-@4/$_1PbLNui^j8W_d-`ehb2nc)<'V;P-?Aofb'S.M*-gKi()"oS>nIl1l`;O*b:YL60dXT8N%(ll0KZ]!.]kP\\sU+-lP4H"am+`[->cZ@N)ddL$I):=.^sI\FACR'X(iBEo>97VBeARs&8p$@K.'?@M'3EkKM=eBUV9$I49c7ija*=`#Up=F^Dd]h8mUng\puJAkI$kP,7@srL>%aVB[658bGj`H5ZM%RB!ag_i=PFL(*l5-(`pa$9\Rn=H9Nl>]qYQWXcAn#A8jfjJa?'tHAh-@K#\MaWBVL+O3\j[ojjI:0B:87gK6_u.m@e`q4:a_08nGh`I#VLR;A8trK/UuLa4?S\nPf2^DBrY>G(=,g`HGfdipZ.RlC`:N0l>mtA(ZdCC7,@^If$h7*#naWX@2;%n:5;Z97a6N%b&\JguV6_J2'!kpq`1&]XDqn0scXn(/r28\RW5fV"d9i>??O]B3J^`Su2Pf2D\'mX[Nm^"5^3oCr@fV&@Z?c%R%hF^6,tcscP;=n*TZ>&?WZEg"/AAgU;%>BoW9f5S-5()t=,i.6o/.l(Eb-`mQt[:Z@i+a2F6?M:W'=TVM]R(]f#lIWNBoMKH_B$;&_)`CAL=h8NY<87clPlA2f@.:^q1se1*oDM/bmGR[Xgf,!e"b3qsV;onaSWV*a&Zj"R**FJK?%0,.Le8l?DH9J`s>(:!dY7T0OL+u?0^M3<4R&2qtKR&SI7shkcljn*[;51$0X)D^oTPAnmnn.\T6cPEW#TO\T7f*J0#XCkV3.$Q@L"Y!6h"P`5LrkX1PmOXB;_omTb93TZ>%THAk+b-(r9Y!"7``qtIqC_$YmJrqhh)`[EMeTZ>'j$360"jSo/r!!)Z,U.'t[*?FIqWUooTA%?X]6EHj#7c[oa@)e3I98E/<;5<2I";h]\s$$\f!<$m7q!jk7F+3l>GN[8BP<0TM%FATm8bDB&PKktV5(/SU&HDe2+D#HJ^0S0`=]\\V2/CdaSI>3'kV9:YhS+E-0k85NUIWLu#QOi)+I+m(hK7u.!E5+T$Ks4K(fmbBASl:4j2MP='*/(5!)c=3GdslXD7t8gSj%QPG:ilA$nR21p$:52=]=`>z?&4Aqb+(J5JH?!->dto#0'OD?0sD)ShnMt%]-AOFj\>pY!!(B.Rl>6i"9`sqH>_WS?1(tG2:,i@),-Vag!.e/jia!2-NX8J!9h_of<QZN't*!;&O$GdpYNCu2fb0)N]koGC[1Z*CQU,Y(9ladi\;!!&Z6p?pc&mHn2\=KuYnY0!5-\c[6e/:aCdT\R)!A%?(L!!&>'Pq,oC(G;44A&_fdG0-:Jq>tsObanLshe1&oA`UppE[Lng!!)5NkKfbZC=GeR<+7>_0nCAJF(a=?FUEgH5!E<@6i[2e!<)NRdjK0GCMW7eX]rPdoh+XodKS!-@.#jffW]\pl>gMIMG)&'LN%K`aIBB$K4_s6]1>r;?A3\J"uD!!!GQZY.T&1h^98Da/UBCq4VlA>$uYX=7;XAGc)fjj!o-!!"\cgf3?0SN=H2pJ1-u//.5%0ON+q3C=&@SiqG]:':Os!&,nGQS3Q+G-4rPik9^5jNb^GJK=pbV0DCbH1U1;ElS.[!7E$g:S5pr-VsI&foI1;.X*M2#4rb".Bd'ko(;Rm3fj=A!7EGj8P(dTeoYkMQp6)7gppN$cspI\/6K-lf%(W&gAh3R8C)\Yn0'bNQuoK0VbZ^<^R%#&$NYP^b`iGL.Ptkf7.)T+!!!#p=gDRpPESqI>.#D7H6d\eQ2pOoQm6TjE=.D/a,V0\-NX8J!13mD0epDV^3T>44`fbEgpre8cspIDo^:Ns:S'Zj5CShY&HDe2^f3iu9WV9sRZ!*Ib*=L=cGdGI*Wr_N2rt&?!!&b+J,_\l3*;kNd!p$I8S=^:_!Jj2GlRgEJ/6#>_sQgW!WrNH5CP/-/nPF^(mlSW!:E4U1$P].%[qp?clJ!WW3#Qo)9jh_%j)N2s#Fg9k_XcGe"X*Wu!82rt&?!!!XWoB+<$^])BQ,3'iQdX`GA1P4GI2g4Oi\J"uD!!(5tnF1C$>MCK!R_3n86LJ+&"6_Hn,8Mh4TN!C\;]Yo=!0A](n)'`tF692cMdF)C8O.TOX?dh<8B8eL8A0Ge\,*WQ0?O;;0;IbhGL>8nM#4?GeicspH9o^:NsGOF7r.1ZCY!([JrVbSO*DUG2tbEjmDcG`2&*Wr_K2rt&?!!)k)ldi0U11Ve>]_M0cfB(;s'S.;-ZN)rG!<<*R-BB32g9YGa\8c2rM1aIG83Sih;^"@]4;3a'iZMb[MtT0!&R!*C@&Dr.!JI:l]t02_:!]Cojj(iP+?^c-G-'J%!2,=jM\jin3c!:t3^M/-MG@2ob+]Oc]qCRVguhN7!!!eOM\e%4/6P;h?cJ$B6[sO@^OIn\7L&&)Vb\HZ+kG5qSN:n>qt@/Il'MgF>QINjG4"#Zq>'P&pHti03cWR3Mb[`'.`4=1!!!#IaOR=mJ,fKArr)^93cld`4^`0f`f9ESmcDWYa!=+YoGErTM2@'!%M%IViT_N4l&/;GF=O%!)V-nR!!&ZJ7un_YhS&fnC"$D'IP#arno4-Y`I\7$B$6Jl3]^I4>iZ-9$r!0GA&`bJ!J%f^MY3X]CQTGeCi7"T"_hJV!-kr45FaEfMS_WJN#4rb"194HXUAme=s?G3*3]QNO@]sMASTZ?VDm+=&\n@j;GZI/Msr:i"un!5P01f[bmGVT/SPk!>\C=T?7X]nk9ANIBL.?=B4Uskl#ZN:+,?l=WPL5m00b*4QCOrei9hOT#*FQl^"_]9^:ba!j8L$;m(M:8@ukK]V[HhQeO.VW_aace(u8sF#BZDAG@"9L_E"k[`\^)f4KegtIZS4Q:D#46WWPUY>ZpuT\c[;4Bks6ngWH"52p6ofJZS3io?eW3Ec`R0O&:3VH9$31'VAT6qaWQq%r?b1>NmR4E*QQ?eN+$Qc'UP=DR_h&%"daCnhqXk42.eM];#Hm-cT73M3R'J;2O%fXt4`8]D8WFcNkf>So^FAIfpMMd:+eZ)WhN#D$Llj=O]4Ep3uIT*&D'.-C$;P],$K7f)?$T551j[q"`M2Ccqp!&gVhrrI_!s/Nd4?Q0%bEa_AA&aI?c^niBQtdBdnEc\.pR&Ve(UJ,]?[LVVO%%j*u/SN=/\Z!p\ie'jMhV4DT"mbO,A.i"9uQT"_$nG;fnY2mfp1S;Fq*Gk]No`GC,aI4ueZa4_P;PeR'fYMK#HRAYdSXc56doj"hZ%%?AFReOdIqHurRC]=tXW#=0X&lKNp?_&2mHs?0?E7*YDRtsJ>GX4q/`YsYZ)4#Q1jtkA%iBGV*c')]OXX5+JcuNS3"Y`"]6E^ajN-lgn%\2D_PBbekgZNNPQ1[`=:Fh73[cCikK]W=-^&4$>s05jFtAmdrpJ5WpPp7UEc7@^csQD+bEkG=o&T)dX3I(jUQR?A`iofG1j/*5Z*CS0qsV:`P*0_=]%*QG&#qn'5bC5bn:7sD\%hq=/%H!Y87Z6Vq8TXI__bqOoB&cI:[TJV(VP-2KHUnk1VF5,%FmWF:62Bj\om>mg=h_Vh7nH33[NI&F)u-DTRit;X.ql8If9+_HH]bh7]*Y2feQ1dr;#sVZ\%h@>drS$a/fmphcmQ^ka2UmD=Pbo^be=)l%ZJicMD=BhH,k?G)Z:MiWqN\HS.D3q\p-69P;K!+^c^A9[=g.4p$\j?f%OZPeUKIXYN.H&JSukIGZs\.YYGS1#"ghnI@$/K5Q2qn#(2hE7gRf2;B#8cmr/i';XJhNAI"P+`$2$q@7u7?'NCm6Q=M`j/c\-`#\T;E_Vi;TP@TPkk?1dUCT<$>PHZpqW0k(8e6MlO1pt*N.fLgHF>/pGBJf^ibD5MQnLn^KqXBDk4\M:*bX\.]DgdS/V]jA-`)86%KqsTeB,rP\_aV4'pmbbdOl;JLNE_UV9NAcH)eZ)Ie_2N%kS0#!@e+hE0l$?%fE@'r%X^d\efj!j3LjhBtc5\;ZLZEZqT2Rn!oOo`-ZtU1T13i:r.QMM.KHRO!D'_=_/`Zd\6'"tB2H)_G6rD9i"tRcS;6sk/UZq<"!sbd.K*MpaV%GcQdA[Y;#QXo*TMA0S%/l/>a#gf=kV64n[C(/MlIA*Hs6I+sYOD2Pg\DRPDfc%&3(hD%7WiXCDrr^V!Bab<\;#I?hr3CMG.3d'_$l@M`DM2I2M8qmco-LaSI[aH`F_0A1;d,WG$I@DZ,0VV+[NFC&3a7TC/ac[t!fEe&?kgW*M5eWrr!!'ftTYKOZ2aZp`F@#fH($qq@rU!gpA4_n-70K5<`9X\ipRQ5G$X5k^uRd+RTHX+$t>u9koR$7ug8@F8QT%!Jk`At2f%8G^,NuCMaloVB*2;>&M?f(gde27+F-!M3^TLNc[H&kZ3q]?J=[)ld!%\XRe`2)Tp/r\;AggffV#'KS9GPR,)on5JH'n=!p1tf4_M&As_XQO%q--9X7k58\p91`s4^hc-gdc;>]^b^hAf#&JDt]kk_9*LOVG3P#\k$0rM\[o*)T([uq4&]OK)DabSU9.g9,IT*5s[fUMA9&3Y9mqAeB#Ue(V(/6s4$>=p.RlPq_i9Ccq8/dY7^D/[q'U-itT8Q'Fu$XV!G;58+I*:-`<@gB9GBiGk#7t[V`am^--f7?kqm(qA[+Xa,]?)XB`h#=W6`.MpDUil-lQumdAe1gQ2p;(]XPd.-@JKfKN$SahbK&ET@5O1)5+[Gdt8nO;JKG1?@,pBD_DibEOGSd@s([(B`@)ICkcu;tJ(@>.&,,l07Hoj[EO0i0p#a6f9j=kV6k7]ZB!fT,Pq8+[ae[Au5_/up(+j!:O0+Q]9VYC_SGQJ?<2`&.6nq1pQ3[dH[tpFPK0Fo=+X)CfKlgCE2?d"L:CWZm#!--u^3j(]:7^\#X7MZ_2A#KCcaUCj9*CeYfDlr4F'hcD*j9a!!%ga@A_<:;D+Nr]4\L]T^t1)DQJ-r?ReO,o@[nJMiZ50T9BQhEqp)2HbC=)2hdV,H!ZH#pM0"R-:T6064P8)d^.WGNN!$ig8m*U'cuH2@/I]mBA?=m-9np<#j$n=C"6k]TGOIRP3/!'B)kq?90`V1R;4tt8nDV9?i8A#6@J1i.TV*G$4CVN!gNMuQBB.E(HXZ=qYBsW'pP4kms!un(3W3>!)e"\._qE6I/)(-`F[Jn8HroOH40cR5SWFe]I[3kKO$P!TXVIQkC3$bNJq"gr:i!V`f02;]Q`gN)7'D/N?LZDG^4QtJ,\4gm6cp8!!%fV4dM4Wp[2V7P!u?L$7qDMH1^=Jo&eN8GAk=q$?'j$dUmd2!pPJQc^n^hOC@4kObW0'H40cR5SWFe>eGFXY!RgL[^NW=GJK?0?Fb)F`q6"#UBUJkrql.>joa$N+X&"HDJkLV4Yg7Ycsm%U!2;`>je?hZcD"dl:b%_pr:#?O)>a4+nl%Shie4u?JFpbFf<;MmbrT7J!/'tH4U(ld+:@aC(1+Xu&JPr?mHr/9GnW&GKgK4(7j1E9nDM,fDPYE1AcgC"s8;JLK7h(44*M+e$hP89!.ZKE@i>+;nRGNt<6(">SXl8;2LX+fAjo4j\#">q=ECcMW)I.bEW9&DnLMq2J:=*4aQ`SF@X\f!!!"n5`\Wjf<8Pb?ba<`_hLd[OsJ`7g7"L?dC!ak)&"N"W"@/5_M&@QV?,*[@:o,LOL;ugY:VuH.*%I6&u$H!/P),4f1H^=Yj[uXOR<5`i*"BC@5@&MAIijSj%S60eXPsL)pEs!71`<(kG3g@H)UW/fj]Qg!c=Z6B;-I!/L\>7Ng,HR(+25T0D)I_;WtI>K6"DH40cR5SWFe/3u@qCd:G^W)omjIQOQ5Z,Wta]#m3CK^<-iHMm'Y.j#iT,@?bEOI)^juTIh_k$C!!%Ntcsp41oU)FLp,"-Ape/e*JdjB(\6#YW[<=,_ZFBbBa'>,(V]Up?1-)RNrGhoRWBPa;J'5rO^\.Dr9'pAYCAuemqps:&V.[ZK6SF0)#cUi&-`T(M9Gm[!fU`K,48,MQl3B4N14,Q7iA67-%.=-3,suB*q-U1J1]EZrp%C7uVug+oS#\V0J(rtdQKo<`WQ0jPM/I3KA&aIiV0D,X!!!!rTZ=?+ML'Y1k!$m\NN.+l=o"8F$Q&@]Bk2@d=8C7tgA:TOb4uOc\-)E@_&N:3^#OsgU$EP7^#KjM*dn<(qtmNG0T"eSf,0D'0DB\WTXLm+T:lOidcAet4j/DKoi*MoP-T@`a_bj.rM^_UZbu.I44rZ.(PZFEV[OlRn:VYCqD@PVFuWcWK&(BmZj\e?:jdMTjl!e!p2K=MHk=]kH!^^BRKVP:Ia*q0W$U.:&R(^.C\b<(WIfq:fPW'4h,l9e]7;O)NpimHEd/pYUJDPlUFn!!%Ntcsp3Fe&iE\U^1Re,d)JQS`$q[2K'fT[V=TL]oA(Io$3U_]2-]kB:lDkW3)u=2YjDkWU$gKN=CC*`1MHJn1WG"+Q_`HP*-,QkJ4OT>b+(7##M"#JKjW^+**(SMj>QVAL4)U:S\?66,WJ'T/mNZ?DraLjH40cR5SWFe/>6e>MLCt(=9W;kV+[-;D\[KW()>E&rA.O'[6kLj/<3iUhKJA?Qeq;rpT!P!iBmPA2B)cWVS`#LG4Q)Op0X]6P/YR7b_4Lq;lTo6cE,A`.dYc.&APG\P@(9Xn;ajI\mbR"oU:H$jL0H(b,QjqWE_\Wdc5.HI&-36kcp@+2*JZql&r0NmC[`9ABY(#$ig8m'^2eQ+`ZpiXm/-M(C&Hlc^!kSEg"%>HnG%hk"JqR(R#NNoXJM@5^o31CXf+GC56/@oi*+mb=#N+-DGYFc1mV4\N.kbg9p.cFiV'/-%guNoUPtFQ4g'la3C)403GI:LCYJ;bQ3"u!!#7ukcl\400Q0\qfT2!do!s3>'2tD[)m^gT*]T6KkhHB[n=Bb:1>Q]l#HUO?0LtF+d:H[U9BU4-@I6iD3X/*<0mJE2=W@L4[+2a./j-K[;(u>Bg@^[!!%fV4dIDdW5i_RM@k>uqsfHQf%/DBG+[rIR\CkLS\C$iIBmJB^?,tW3P=CR?\'D#3,7qNM4*S)a33Xa@T,7\[[uJ.`5a4LS@WD1`-KdTJt&ffcKr*ET6W!bf4rH:;L2T]HM)=?b'j-Y8_u:s`rH)>7"HE&&t2k(./S-1@d/24L$ih"^,^3aD3WR#eJ*+iU)r2OqkSW(9'hkW]XdVMbjWRfH-;h`T_(p"dpn8I%GS,?']c_LMj:.Bm-PhWD:]7`dWYc9T+&JVamrR.=AtTI*j8k]04Es]j7%hR#!!'rg*m51bM$#Tmpso_/R.I4O0>1$4QMRNRCokF_^@IJ>Pi'1\.X#&\u!$O1M5cQ^q.R\@3U$qrr)^\KaK\QekGL"<'ZKF!!%fV4dIDF/Dd'aiKhHjfLH7ihFOhoX?FebMA>Pa(G0=fACOVf/Un'a(+U2=iNB&8[`J\Eo#Bd<8N"%9PI53Qa@*D\l%@TdnE@?F4n``QTgEp.RYr+tT2>?P`S9XlgnR>:[1hP0PI@YTZspj`XF%#t9LOr>:S2N;B6X1BA[rIO!BgVe!$DX@(kG3g@1%>Yr;#q8=gI\admr7O32":l!!#E<*[;6\+\Y1_#7VU4iSj=riBqn>i.)jN!!!Q6HAk+bLQGf&Dr&"djQ&.+_?:`t&-+it!!",KoGE-M%jAP+s74>d\T6epnIa475`YpG!/L\>7Ng,HaK*?90eq81er(=tQ7Du5TZ7$4!(;AZCPn54Tk+f]'V5CN!.#%R!'h7^Z)6a=+c(6WT^$*A/kfeG%JkL;?2$NVSO/%Nf'rRB5M$84,Y@c6NaJHq\?G5q&p&4R8?]ErcMA.[J\3Y`OZ?4p7GOH"^3lo`,!!%N`JKAS6kckGS6D2@)kolB7%iI.@e^a?;^8)[:5-hXZ@QXIYN83.lqNc.&'tK)]P:-c%[Bm2(YjJgi0!s^5BAX<0[W^G\)8.efrO-Y#L#61X@\oo6bF0`,ju5ql*&JhXA@-8$Qm=4oi$>@P"cDdg/F$^%lZ#m''^a#%)`J\;a&]E>F+W??ME^5LKYoQAfkmG]!Z(jP,tho'e0nG:nVppdZZ"PHM6].P9s#&dsurKC23\AnZ4pTVO+Fd!!)4'kcq!mY1:0^>CL#6J;RH=Xg\WZR)mPm9g;rPqL$b=-.iN&oQ=-rnaZK7OW?)&IUYK]ic^Q-UG*92TOJ'flPE8poTru(g2naI/#sY=//4oU\4CbWudIt?FtCJF7P#i(DiEdqt>G5emhoggQO!\ISTUbm+J_#Kn[q?eu`.XX&eW\ldtcTeZ)XCp@`<,1/bD_ZI?3sf4N*cJUaN-HhZsGLC\$G3BKU:V/XYFVm#aN!q"W^(<3=:B>"Qr(2+sq>S#*KkY^5D7g38eTX[GAa?7e@5B!nM5ASg0k09B:jX!QcS2YBCk@?_.?bSX(ro]o'ZDkoO?=%09>^=&2q.@sEc!HU8P+@bDZ^*V!I=7.u5L0-%q<+B\ngmqLN#FQgcW;StXrJ&e_Q).c;b&KH!rr>J44%J3+hAcu/*-]#h)@iAKgO2";;8k+cX%TrQ99$PoOS()>HqRWLUQ"?8sFC:ER!p8PDnqLfd@EEQoSa:2]hk(=j[\:p_D!1iQ3_rhkOpNf52ul>Lon6Y.F5FmSG'PWV.@/I4J0UeM?WrWt24;#H".n;q0j72llm]1Xe%T*oFSRO$p-X^OF2eN^KJ[H1L%ToU(+M>a[?Y+sJ3p-gU;`5Q8`hNuL$\8sLlu5(+W[B:"r&!RHOcLf!"c]=P@r:oel(Ddm*"uVt)lIDp_R/K*moP!YD.d2fGGl%'sgfkEL(GB+!CAIJa:OC[n!!!E.oN5%fkZV%`,qEJiFic$FYIgph_b.lk9&Ck;M5<&f#:\FsI?Dj=LeV-qJIr8)KKkpsH,5Q.fr],p;g]$>Uq_3V2/%N>&;g"<*<^\-PES)UnhVI;;EhR@Eq6D7MpHF4@]&jW#!]=ZC[4.!%Y7ZA0tmpmFsF-aRIegIr4&T3BTF:>e+k[%NJm,W4TE\%0-CD&3u:6KbW.=?KF\'lf@8/X@UIG\\GJZ[P$iHS.j2U96Sa!.eLiO]k"Cr<.Sc9T7'4#mm;><.8I%mSh8Qq?brK/&QN5&R8kO:MND+Z:Ib4^3dC#hYSC\Oal;^T?atcEHNkE.)eRo?d:5),KPT-pK,<,jqr*Xr[q;LG*'JcJp2.Wt"o5K>NQgbBZg65Hhl^6HZLjG7>=M%M;;jb>r52g'-+\9eatCe:W)00hY?kXG@1=/6UeOUS35O.u[VZtKe>lYh`/##lHLJOopM/6Y`B>.:`f1p%r:!'iD!ZcZ&"K2]?bLd)ap!2*B@!1:fs>=!?so2$N!4>5^)$T:H5G"N92UbXB?N0EEoE><2)9%0#')d=5;LU45#8:8>>mCKG0Lj_01(d3NB<5b=V+&*3&/_\lQs+6R`.@aXP:Nd7akDf.FfU59^TW0#b+o^VkLA7%rZTp0i4F6Y`'e<>K,p**e!%%d>(r:pieQ9qPTtt6uNo"BOj,Vo0=Ke.C[u3d]A/IUnldi3(kNBl,?""N47?7HL!*C;h@g!V47$!lYSSW01^<9`Rd.`7Ij/8H=S.BLqPs$jSL8"9b`s)*/2+a3U>?oC;?bhnHdTg,BSi@fQK/U-ObO>_p\][E+/b:"mADUhZ@jNjH#=A"56O*d@)04_)KjM2@&nC>V9ANr]4\L]T_/+OWUo:6,o+3b3)E]k#4t6Sr[WTZ7$4!(;AZ)`gbS+2H<].5C1Gf`5=idr8u7nJcuMd"pXA+AKq1<"onWG$M7Fn9H>'If!KkMTsQYNQO1?W"b'0+;Oa[8llUjT]%5&%PkJ\uUrWH2pNL\"91VV#HcnkYH40cR5SWFeQMA/V?o!U>MmfLZ&\Y-0@"D[u`;*neaKMs5/R#W6*Xb:f7oA!022!$k`5L<^gA^i%HoMH!!#lha+b?KP?eZMA=F4,1$Z5Nkcl6]`/e]fu>)E/l42q*D%-D?uBh=a\)rro_?jkHUIcL?*d]WmF$Ra7UA2sDa9rRPg$]%S#h4QWEtL2'KRk@@D-80[!Hj5;Y$/amW5"@q^3u95`0l8j6W!*@4PM>DF\%FjZj%QHZ!5k^*E"I&NpW3+%;WYRJsmSn96=rOKC$rg4M2t!.$bTpi%T.VotD[l`j//"$Hhg!$I03HH`aL`5'sTcAKZ`5ngah$c?'!f[s;S9=]S1gnT=$,:$uHG4t:OhqE7gIc`@&NaSmr*hJj&m,r:E/9i^m0Eab::kVPL^a`;3>=GbV8VlRYaI:bFfD)kc\5Kl%NhhV2TRTkn1kZp6YSI#K0L&//_BnIP2PM"c%`F:&HK"YTJ.grH6S"8Umpso_4WX\Sl7j`s?unA4%W"3YI=Fj/Lu:8BF;/FRAq$o;PeTjoYX17a7f'r8+?baCMmKn%T0.D)^)E4>kV3&;!)ZEUO-N>l)HH,$1L\S1d)_MIIN^:?g*l]34O34cRkQe1Dr1K,LNa90*LS^m'e*:V)YL&p\^QnQB\\V?Hun@\c#-g8YZ\k%<&.q@G\WF/dm(S@l2E&1,I?[j^)%(jp!og957dJsm.+bG*D%-DW#f_mdh$i\VKiF#,[2$+EnC+q.u"7halo"Hp:QZ&4`9/g$bc6(bW*-4?aRp^K.#d%mRnk6CXghn0q_g5:ER5=%D'*]s4MT!jZm0Lh];m+B$Rhpm:#8V;u/cSa.]B*8Gb-*U)lrl3";S%+$P'#?+P-G11f['?5f%9kV3&;!)ZEUO#b&O@[l0X:gpijqBUI%@X2osCqlQo86sB)WE_?S@``)UWC$2GD>B1\]=W(V$#,?B`lr'*hr(t;D,SV9Mmmb3EK.2q`i5'3*[kTG-cn8L%8"s%J+rHUj,VpSVl.5''ZVW%a4f9IO6p]mZ%%RB;6"kDWh8)p-bkbU;:FZGG"%*pMGq!(J@3iQo8r-EjiH$fXpAN?WK30Tgq6e1M2TZ^&?WjBD']AN'NF)!!%ga$@4gQ`kVGg_`Q1A@J.dNf\=K'2%I9Ko&elaB8t-+^5Qjd^p__Y6=5GP<@CD:b*T8!nbmZcW-lI\C"ub4k&0+$rEJ%E<4I:m;<\:jJ'1E`;lP.%m:4Z&;2SiteRRu`WWru$]aFl6l87"t3LQQjV4.&\jg9@lkqUqg>,@[>9j0LQQ-'n5XOYoWOQ,>Yp8trggNWLj-Zqh:VtN384qR^5W9G^&nX)%B4cYAm+%18c-Vd?^;mHKg"onWGMCIboi(s:H@s=l5CmMd-c&l5(:c*+?p@%OXa[8UMa?]Nlp>s#gPu1cogX[@m@Xr8mX6=!rXH<<1.OM]f2:Cso(W5L(PIEXYKA\RNO0boPM]$Relt`Pj^H:JTX)`n;^PpS[Y7n;fq27o>/aN2Rf(3Ss>lnXDIUMA.L;WDY$`T2rdY*WlBB&B,@UGf667pk9tR<7nE]Z\7Ch^S]VjWrL#@Y]S0:&O#9e%@_-:X@Ppspi4.4#"UJmrk4'5gQ`/UBGj/'U$L2Eq&=OIR-5BpF^Mk?GIc9rUO)sF,UIgO"-@'[qBCigIW)UJLQ#Bj?:LD.-WYTci(AhdnkSa:n;r""n#GOBe=T'X?nX+%BU8+"-56S3?qr%*Kb/)11^$'H4:lr<$qt9:,ol?@[*U#3X!!#ki6'&]A1N$I3Q^&QIEOJ,]5:U3)X13I*;/)dN/`C:Rmp$["-W`M!H;%0gTH\4i1-Ce)i!L!4Ms^4B+6FhH%!22o&1cW9?^d]_W_Hc8bh'%.(hZKgR,:R+Z"[/_jb>n`N%:_b`O%j*4\M`V+"mIkWmIG%2[bG_jI6ph(-/KLqo5@o.j"[34O8!HQ5-Wp8;I$A8g"[$9^Ws<4eS3p5&dP/6a.c(dp1%]Jn/2#/AWpK2rS5$.+)F/_H7\UEjZ`%7$'_Rip`mrV!b$CNC8Eu'K/X=^6',(e_-VJAA*1_D95LbRk"Jola;I*&mHj2mD\Gm,,p&TQdc2]NT&e+`o7-f;T,u;kZ3*5o!!".!.Hp$9"*cQ7^mQSrL[5"[^XMO>;e#p^tak$s%=0BN,L6:4L0,]njMn05:'BLprG3V_L5Ut*Y:fe,e5e"=V)UpXd:8%_@qLlGZ97BjZjCe&>F!fS?@mENfEsM;K0dX=2.W#%NreWo9I$B?32%Whm";kRZUKVFmnYA7;*POJ*CX.l)2`njb[J9T#g/[K(>P?+rSUArLE`ZNjBAaF)gkP,,lU%jd>o]:Y[1?bO1RX572k>>jU?gEcpG$g,YZ(WfKU3@mEtjr1JMuT?/>X:^+[]BcT4-J+5@V^HX[9JTpm*Qq!atLPq([@s8@il0D'^ZO<*O>!!!!rTZ;jf7A"H"\2gf^_>JcJQL9o!.n#8gRiW(X1;q#F+XSO*n#$Fi!.#%R!'h6DoiV*59n[4MHu.71/LOP^KMt*R)'N)FTZ;EQm'3h##n%-iqt\&rJ0"dm!"_S*4[pP*`ei41nbr@ZZY%HSs!-k.jBt#6Nr]4\L]T_/+OWWQ8rl2cr)g"#XZUn"4F-KcmjA@h!I>.S!'h7^0`mIY,#rsef3a$\g=dT3Hs#iM#*T+7$ig8m'^.7QOWHj#*g7>&)c)kW7IR,X;Zh=S!!#7ukV3.$*^ZSB5C2tCf@TbpT76Y/l''t"$`4.#(]XPd.#-2\.fb*VU&BJqNupRj"pX56R569@8akgF'*NUi!!#7u"6o?L6\kXEl%sE?`fYZY)`CCX7"@2&s)0u4cld[^qrm6W]q5j0'Bh.N!!#k)UrOSu&eGW$W`:R[ZN*%lG3rIe64jeA+a5-M"*t@U!'h7^1!g`CB$IWj[t!o*J_Z*4<-/':GrI[kDV_nGSVU-o*WlBB&-[@goYpFbcUkCi_hn[7`m^h]$Pk9q^3oacDr8^.Mc#$H!rr<4"aUUL#TZPA$5?#AM]Pt/+$P&X$k2dun[X#@Y2$Q))sB!V!!#lha$>^4iFHM2'bqH0G9T:%5s[dH%M%adG!%t8@fQK/U-OcjIOS-g7,,.ejj!ou+sJ3tThn-H7`q9X4@"r.!!%fV4U1a//1f#md4q1CS86\lh7?Uc<;uRB?ZIM<)pi'p!!&`YO+Db*rqs=-X(uB^W8*40D4E\3cJ@a<2n<82fId&78BMr!!!!eJK=p,'-/*1AS$#Jcloq5!?sXSqQtM;iq`3/`rm7C0`V1R;4ttF&JK^C=D475pj.f,*jA#jUa2a5_Rl"j=k2mEm'-h]R-3<`U!!%NtcspGhSih;Xm-IE//9`;r5C3(lD.dLjA&f(i'/:5p`rH)>7"HB]"4=i2qk?N;b+/_2_XQO%D/=#hXB6Wi+smHb(]XPd.*uI3+:]DQA7]>;4s.gWC.t6`?(k*=S2jO96qe!P0`V1R;4ttFE;9>-GNdC>mOZdJoB+<([^I55ArPN%QlOI_!!!"n5`^KT#Rq5cG'8?2oVpW&UgI0)>,>1J#7VRsG9WmioG@Q.J1/cS?oT2lIdH.V'G_H2G9Z:9/R,[9gY;Jhfi.<,9GH\F!!!!rTZ=j@Zu+RKhqqf//CGb)G3j0eE+n.CrMNG`jNb_4JK=mn!"]<[$k,a-<0WZ5'dU`=m+J_caiUM^X&^<,IZuo1dfk%+!!#7ukV4bJIXZ`*`f/$B?+\1;Rl5-[rr%2SF"qC%`rH)>7"HB]6Si;r'GhQ%gn8:"p?gU)Hb2k5-?.uZJK=mn!"]<[$k1D@a,_5]*Gu2e#(BF%j0lX`GC&G!rr<4"aUT96_Qi#\p!HjG8?LdMA7Z.m-HcTk^[e*;?c\0!!%NtcspH'-;L)plK\64fe^/PYr!XL,F(l4[r1$[`i0,f$ig8m'^.8*%M'XFFDu2d4aXWmM-(I#@:@a#"GA5oB'W,P`\$8b98,V`6-5;`/#"G-Xs5DNr]4\L]T^D7Ut&Q?)2Nh:S*e4&[UZLVb_g?nV9H)Qo8fMgpre,csm%U!2;`>J^GU>bF_"KNugIF:;jejqt=mmeue?+lkV0V,^1m'%J1J;!.ZKE@pi!MN>q'Kmf)e=9=Y]j=.VX+?FtAt(DiF_RlAN]MqJ1q"onWG$M5/PPJkC-H[GX8oB($=+$Y3:F68F/)4;.^n(oWnU-t:u=g3Lb?@X(!!!!Q6H45a+e##j_QS2,fDVr/kC=FXR+!3UA:C:1+>fi]d+fs>>A$]c8fipH,=\od0A%iuQP,teDf$ig8m'^.8*)RjYB%LEH`Sio.aYu7R.q?iM/SXQNsrqq$H#7&)Xiq;Wh4#o=OX&fgQ[e1%#(]XPd.*uI3":cJ8(`4*'D/F-&B4n&qVl-HJ$(;3$X&`4K'[G"LEH-!"AFA6`oMab9?[d;#rk5tT=WYq"!!!"n5`^I.\9dft3AB^&\f2K#^>"'^.7O!!#lha2#dgm+Ger<%P%Q+IeTQKGH,_lC$!HKPsCtQP*XfZ[*aAJp7V+-F_adl;/Oo,0qZiWAp!!",KoN4'OrV'Z>S%r2:&8@4'q$IfgkV%9$`f+*OJ'+3?>7nVZ[AjJSSr=.V_EWR2J%>S49InJ"!!!"n5`^&?l#FSNV[0uSr[fL/cbYugj6RH4F%AsJQo#n2$ig:C;LonT#4rapSca9I!!'fdJKF+]oGE^^"*t@U!5O2;*pX%&(m1BlH40cR^k.+YlNZtuOe)Z$$ig:CJq5!/7XEGAq(n>'%B)hfn,,n3O1P8CS'#4O>rP)KgpSa`Q*8c5EOuOPVT#0VW8I,?T/_nchm2Ntm!IU]"*t@U!5O2;*pZ:Ad,T*jranrIo.O?8n55GX5>_04I@#o>'Xt2p]XdXSm(]XBnIGDD'K)pDn-J];*WlBBY[F-E\rhI6fYtgpr];VeP5gY^HE:=LCtiP2gQ8pC/=Ntm`5(n,flBntS)ta`38Wk)ERb!@kQKT5]]f[n(]XPd"Tpp=NV'!d>rr0L3]Q9J=7H'Sa4s1rl*5,#Z#,!Z3LF0`EVWoj/=>72p;l[n_*PsW"?*D^^0799/Z+O;O,m#`XXVXS"F>Ili&12,)V8F?KoV()=K`V(:p3X3OPun"A+$[a:.ANcNWO"I^NAHV=$M"4>fC_`J$.OjV(.jZ9UjMcrEE%bhJfi-MiP/)NGI4[NIpf$_'+;eY$!?\7b'O%qi/75inf2L_eI#0d5PY:"q;Bq@fQK/((Bh;2q!s4T/h;:e^Z6AG$jZT3.]O2$t!RU@j@?[>V;Zn='p8PRaU-[nb"]!H[#:<$9P]^_%g99IQ*of3C+,Yo)"u:]##qM,e)7pkLT"eePh=DMj@6jD:^>qc:S4\O."*gcAiBp>_@iHE1`$QZ)t-6SJq2#R4r:AoOTTm\"aSn*4`USg,/7`-/#U!N#X[*3ZT,$L2nO#L)uffcsm%U!2;`>FX+TanbH[=]KEk`H"UQL'*M'W0)F_HD6a%c%O.)f?`#TB=K9`\;;9SYV'uiS)*C$.Fm75sSVW>$EcuK3[s-K:kleKSl%@SM1O(>_$>tD&lHue#&ZXEW;a5#mDXF(l*Js&92ZsmQ1b*$;Uo@9?7jf*cQ_V1=Eu"CcNj5psLE;ogcsm%U!2;`>FX+Ta0a57`[t")lOeCjDOV)@KGV]mj!c'YapAj(%^Zos\8*B'1"a=[biQ]+T4WmI6$mpg:>SkAW.>XGEsX](u9Q1sT)LgN0MHH\E%>f`OEJJ-%h1Cs-1/:\cD!!!Q6HE8(M;ie-$50B'>T;UE!u"n6_MKLKpS\rs2m$2Vou9WfpWa:c9<-9k;Xs]cBt#(@ZK892fd7JlFh"!7;H])-*u3CD5L?p.G1p@_*Pu+Q;^<0Id=m(I7'&i+6YEZ!!#lha1@Bsof++?EF<\T"6[&AX8GM,SK+2X'e,P0pNNF(7K&*Zf4.NLBhF"^\Y=2fo$i@[TjX4FYFL!UW\'dJT),9M&,-M3KhJZ#/VpB9_c_]?E=qiO?Cci;/bPLQ4,]G<`Zni/XOBIrfc1VTeVY7$e>['b0,kk"!r;enKYOOAjTY8n!!%NQ"$P4pFK&o&sA!CR=Bub'GZ5&N=u;LSiSMi*sZWc'qf$(G%V`O8W9XY)_;GHc&_[STfE>SY0g'3h;@[HQABX/%q03]fmC+^cis[Vmh8<=Q+toGPQrW4JbGc3Tg=['DF8.A]jG);tdE@TE.1[!!$EC5`^%44m4Ue8dl.M'6j(,HQ@=kG0@;L"YLaSXl8]DMscC0nT]&(]XPd"Tpp=%HoNu7A"H">[?0q$-reHqlO)69D5Fq*RJ9r!!!cCoN4&F`s=DAOSHljK%Q=*"-69o"A##:U^AkmIiDm82[s@GGH]Z:oPo2.\#/=@0l*LTZ7$4!%\uNZ#5r@*`&7ZQh%VjZ"`'nmB"[U"Z'6RkgWCl*`jmo[=j#0HPi8ZoJl:&m=4;;3jehoHb4%?<\(Su7S=0RYq,o="onX2_*F'(_lWMjrq&SHN0u-p.:Zu\bKiW7<3JulDO8fS.(VtTU*Im):e?S!!dF-]rEjFrS'O'3<'j2W8,euJ]_-,4`EIbBbbSHF0H!!'fdJKF-3=mL'g:AlU:Jc/(+gDn\>H&'Q(X#Ki]X4dM(;6SZWIe3%!(19pc:6clarakZG_OoISL<8[+h^s?H3S6q59oW)Cr+[*34@r$HH;"YqB[,AXA'O$#m*fr!r`7WbHd)`;:panP*]aMlhdDehShD9BUY\oc5DCMR]\/5rCc8u6D(Hj*)'kKd8UFYnR.5HG@P/J%;04(@,mHJ>N0Rt'U>@\H64*$$#GFm2,/`kQ&UIKbY8]*gXTSJ<'bH7-7o1MuC+Z/Oe;=/(l%RBg.Z\Y"s%4dJ87$JJ.[Y?Y=;]64Ge%umAZqXtcik3?i"CWE;S(Wc&8HJH57BDNK$5A\=.!?qGr98jiI62#ps[t#M%!!'62TZ=WPep:T):.%Y1ajI(iOciY_bTrN"iMH-P*@%bQO@FfbKVYdf9hLT$Yn\dR?baCUq6Lr!/jDq&DHi[iGQV%#:osNFBV[gZ:-Y@>Wb1onNFc6#0ZaR;SYBA<(2ck4\*4Z6,,6ps$l`Rjh8!_BP"EbJMXJIrug\"+aTZ:Pt9i]g*<"4ET[F._XY82!ukAhhgEI:"E(bmog*msU8pHE%W/gT[9D+1iZIOqe?_]=>@KiJt=$l0Xe%;=qGU?SQHTn(d0NCi/Rhof,r=kgTK+HJ?$aY@e@&i"Dn>7LU844jrZ!*J4!$4N;ek@c&Ibc\rq5).YrKF:7:e!!!!,#(!?iB!')[a^WAp"6[bn>L]i9>F*)]K@c6(YIj?M,)FJG4tQsPaFN).o:mN\5BA+:"bR1h#_m2!!'fdJKF-3\a(t=kdUollo[bZ@V'_b5GG!'C**i3]?;;?$*BA/"'i0W#?OEDdGV:IVV9cdE62d.I.N6oq=>>3FiZ7dCYO9SW+f;ic6_>Zkl_;Nf+a'c\)7&#a!Pd@[]MQS.q]ps.6o27Z'\0M#lml\Cc\CS)_'i9d<*Q:@L@5f)n<3QQhC2C0LL5N[a(0ca&,\$3o(@$@euW$GcE--apMADeo2XZhK8&IrML'OYl8p3OncN^!4+/jE?eU0F41F[MEquEs_a%F&NsQt_fJ(fbD:j@[,9Ebs4EL;OTj=99RJtQ8$4,VID9&o>q.cl8?_X"a'`)]V`mL1FB9+;f-=`htI>p9s6!u,ahDdp)l#i&`Ll]/fAC!7j#s%h@IFL4J9U*G,U!rS_3M\o(3,pc!VHDWdn2VDLk$r'g"iS=5ha5(tkeqOVLdl(K'M,3aKd==!^uWUD>qX]W4BjY9u"jaC(YI)RYVNqEWrPZUR/LLa5B#pFuS1t6#PW79j'%OJnLQG:1@?b*JNA.07`ee"0CVMI*_$bI,hCCYBMl9LdG+h5Tf?W6:2JLY#*,-mhJpNq+:lbo+KG]DhX:7%5]_qa$5uh]p>$4(>0sqa9Ci;H8>r6bZU@Q^!o-dtW@(#V_/EQ#JcUSG8&D"42]=)WHJ$;f?i3nTg#:Q?6bN<_tL9qlO-h>d'X'&%aCeDJ4%/KPZd]ZemMhj83B22e&l*Vmn3n-@+1QF5,^hDAqi?Zt&LD#@8O)!G?+)P2g6_+nf/t'7*MOCj"q5,Kd#m5"kXA*r?p:(fkk:7)%ZoFS##5$Z@qFI(aS_!^!AuR5S*G;X`bTrin8/Tle>lR"D#;pGJ&n4(FoSd"@^/0)C.?J_.Lb;T7;ND,-KTQ43O0t]OO!fpYBkP6Ae$:.X*?\s>OB!^3&k/,FZUi>)cEU@@jt9fP^Hh_QX%*;cMko,d7IZ\dEthDPfdMl1*<1U?Gp,H?Eut5q94V3DtTE7oe,MC2/K#BUHVqmfid0LH6e@-/Qs.2U.kV7O(=?dYc%dQ%=+7:*#BNs_>8')^S';D@NH?c,(UN:`U-'N`HIShb:f\Q*e)g6'\%.3<2EsPt;g9HuLK\Thg`^W_V\n:E:pX[h&We9*f*`]Ug&G13Tn)9a:mbYBqhjeD=C=fCCDoRqkkqUm#W`g)!]7&N7a^\qn]"4S0q)emb?efsiV/@:e3>pY1];hN=[1qFh4XPgn;D=dcCEko^O&H_+K_mV7DBY9=)*8efp1uoB2m+p4r'%agNDq9;CE*]IeSZLYNG-cQ^Ik+6MYMG65np%NouT>-o,UeF_9?J/[HeUV3)iS_5^MP8<>610-hc9"3_%ibiU(Oc.TVj^Dh+N-a,s;_HW%-:l`4-CX;$[V0UW81pVQHQ@-hgt+FBXUcW4j]ZH>L=%/1+bE81:WCBLjZO.URkiak\%khe4?B0oJPW>Fh:S4%=0O$oB[W$HJ'&J>tqXtbR2_cOMHE;?:LF=u86UTh>Lj!Xm64$CciNsBH;12B?o[nP(=\QWjOAK1:>iAR,b:&C\CZAj&Kq.F/l7jH8O9,^\=;ra_pu'HHW&AYf%)Ye9(J)jMjQFd>>86c$r]L"e_RSH=eQuQH/a;RFKo;2p98]`L%WZW5gU$^S1m(mtZUYYY-W;=q3fYim]Jof/1KRX:aeJn>W]E.$V'^R=hs9Z)IEZrcn^ra@*hJ8ejcN2^*$9CRdF#4-rEt?.>!,=J9c8\ScE`gf`?Cqb@[1<$AoDU[F?X!E]9nX6F7KD*h0S8L@sJGf48,Bi'1)sJe73?oeDjI4YG.KXI40AW>.GTA7LbmgcP\H^S=sqr>[%!jZ^]ioM!/<7q8GBl14I_7ppEol61WR;mNk&f4+4B$1oiC"2dUF^jQ%ko#^?0g,?U[GjuN^@A5M.qpbf]aHRPL7fskLX=><26.-)HlG=-+$q;Qg0T46/';jSesoJkm7:JGh,Ei6P*ZO7i;%fm=n\\^O_E8+fTEdUVm>AMF4D6UGe3E!'"^[ff=M'FnE_>Xbp%Sg,'l9^_'[-;8R\=eai,H"(e2N_$_Y5^bDK;SO#T$54]d'a%lRn0PWU*SVMdQDtKS*][p#e8as:kM;VfL^J4$08=L?bp)>rmCT9$I[KkUN#:1p;W4tucV]*hVY&MgB;rG_k(eWK]#PVI-fYD$]&jh6,DV5uJ^be3`4em0?`PMrl]?RjQHW])4XPgn6E%rY:p7nWR@j+<:1F6,C06?r;r0kdqfePeAR,$+DIUW5R.FsO,as%4gr%n(Sj&A=),!)YAoYou;otg^I#4W6\AYSk@kSnYH!7K5q-uudp7)e[OB[En,K";0m`I&qLIJ4&K_ZV9P.nr`V=g8(-@WZ-pR/C_:bfXa*qtkjUOnk++HLl+:W4;i`GL3pF3JAtg,_mO75d"K'N[tcjGWc[oakF)RWqsr@XQr?FK:d^N7Ka[f&V7='\$VZ#U))7oiN/9dUT%lld?T`5/f$PGg3m@=[O`eDiOC6%N+u2BoBn7P.E#Q%?Z:6AS+J8>>U@e+b\K%e73?+7uq)J%I,ed'7(J=>aDG1Pp=\NH!>WBqm(\M[;48BlK'Vs*5D3bmCFZW%?Vm+AT:7C>>U@e+b\K%e73?+7ut]OS0eZN9oF2CAC2AUXrNDnd6#O:/MBh>/`p8(>,?e4,FrCc86B(mNsQt_fJ(fbD.H.t'0c4KG2)PF-Z5?P@!"$(^@C:PO%JN`&+;]_k+R#'.WV>k/.Mu%$gKGiKFf)WHE<+mcTPkono%?c#pFuS0[sTL:leUGI,)t9%76l4(lD[;/<7`?a4[Fp(bNK-op?:WL^c^7ecteLALJ>\2-doJQGV?&NTXVENsQt_fJ(fbD,?9n#5-UqK6g2s+iK,/*c$CSX>6`p2At"S63n_m%/!^A3pL]u8?52h64?5-E^rU]'8K'eS^=\r7I7W&&sTrME8G^%1o"<[iOqdI8KM^/R+!!9H64Uetk%LjHG&QfqQ#-H?AE'/@\,:RuT9P0DP1n'5=Kc4goUj9.*ZX7S[[HU)gN[5&a2Cg^R3(88"9Xn0O+CU03uT$kL_;dC$TqZhhqD@UZ"T4Zusa[6O?-W8%!40%pY!#"%FLE>t/3+op?:WLeU6"eqT32>hH0_SH2J\cI1EU$YOtMjQIlHlKIF;7?f;B,dV$L[/@a.5G9WT!(]flPGP52tou%N-p,W#>6r3E3$M_;#bR;1*pi'Q.0\9AWG)TWt=cQB<7*j_I*90$adU6Dnd`-[O,$UW6jtDM[-u$DDX4=7'/irqbQ-9nhe[EU/=HA71-\]tCW%njOL@D*/5BlIU(_''S&SQPr#qG[-c3I3osY\mR$`B?$bC!>R-RhK6\p*i$QEW\n4tgXkhb4D'n[WuG6(5$_6na(VAGc2-p-*-XZO@48*W5/>(RZZH$3OCVVQ`XP7fat!,%[7,`#CZ=Oqiq?gN]Tq17+I#s0*/(X8fR*CjQ+ON-h)B!#U=qKic'ttkHE8"L0d22]UJR#Z@3ouUYFeUoi*U3[P0Hlr7%93-9_#+N`u>M_E6?hdP(!.k0)KqbF/_K>81PCk5GaMjGCL$MUDXC^6=pjTFQY_&nq*:QhJ1XoUiE?#joHJS?`mjm$9bhBgbpb,r_"?\KM@8d=,%G>pmcpP+BU&CbIH^-!cb0AI20h$9Yd]KGc2/K#60_mioemT/b:?&gkZ@;dr#5EH?AuO'dMoRDLZ4-XE5-4=DLpJ$>3CR8aH.^=TRiUD6ps.pF'mR@Og#Qc7(g\RS$/g^WNIlpBtl+bUCGL3fp1h=Wbho#&VRdU(RP]>f,-..uFW;A@ZI;)`/f[ZY&2h.HPEr^*BW#d0_06PKF;]PW@mUGE2@T7\)uAjiVq7M>Y>Slu4!,;WW`D.$c.-[Wk+hMCaWf"O8Mh`BE'/JoqkV!@ga?RRf\*2`F7OpAbXiN>V@N#V/a?:AX:BlJJ!-4Kj-csKRn>iPG[-acI_Kk!NlilI7ZS_4ndgpQo^=dsVtBc/VU(4k8PLe;cJ:)Y?8I%oUuD_q5D\N>R1111T6cX61$'_4HTPCmWQ`DOc&N*.k3A6st3\DdU77j](NM`T*h$s!j[NTK!(__NT[9RpW_C]H0;JqdYWN[8GrBiE<'jI:S8.ldgAFVt:fRJq$WGAQtsLOisY?M`TQQ#Z7O^$d,0]a;L<_]AqMIVQKH=&8"b"#pFuS1t6#PkbZ#1C15^aH+&qIS[D0'i02r\g>Vi==8j-3rgm#tmheLb;=st47fsuNT'H54dN?2_C5$t(:IjNL8Mi6o^0scgf2,B\_A$*J(`>7DJ%0h'Im]S5IpY97/+coF(1$GbmU/=N\neoBKMPVh+")cd5JqJ^%%9ab4iK:R"9$np.1q:,P/4i61A=1XSM1DgHdtLKFhV1:li#XqoTW^L5nP_-A2q>_bcE%5s8fojIdP-63si)W5mVb*]".D:lbo+K\/!.@r5&')$N%!a+P!jC`)HB2Q4ZTJfN9M63n_m%/!^Ae71s6%dGblKFf)WHE7S@0r#irop?:WL^c^7ectf7;36EV9F)f[L7oZ(K6k`ia?_s9KFhV1:li"-oU(_lN8FRBZO?Gn&421MW5mV:qXj%/!l1BjHePi@j5AiL@`/PcF3.?),9uUCm:X\4V0=+aNSa[CZO?Gn&421MW5lgj^]+)qgMajoio4DL,,BeXh7NR[q0i"nGBtW'EXV.e+bUE%:lgH1Ie_lWB$HbZ/R%f+`J]'*U(=a8rr2nf3d&k4&X$?pNsQt_(km90%!hR5=maqN9:%8Zqt=m?F4$1EQS(9Z3c,sKFhT,l7l.tQBp\%mpEbSodTK]FE.@mUGE7\Lk:Y\;E.4$1'R;lAoOM"T2k7urfZ90Rk)>jk'ON^5fTKFhT,l>Zjf5QCOTA7VL2UZ8q.lh&KAWqkV/+3Kp'*t]+T`uffpSIOqhVXqfBSn4aVh%tKFgJ/69Qs*]R9N1,UC=_gDe_AG:r]G))Gm7]"4c9VWs]XaT8?\KFgJ/69QrgI/W`i[;+5A;l0st02&s(or<#l`\hM\puRiLoZi/$([<^uKFjnTNsd(Sn(oWtY$=e":e!p/hRV]3*^4u8l013:_?@Oc+k_Qq9F)f[.+I:/7RBFnYHMkXB]tLArht#nq3C@%\(fZla2Q$^SI!=Qe71fN+\&.H(FTb63ooGceu;Rq556@lo]ju-7#;O]k:L%.4XPgn@MJ*I_-tlo<=TKK;,L3*s8KXe\`A*dr:.f7'e4llLNB#qr!W1b&421MW5f&B.,;H'^2%Y*O+6iJ`HJb3jbfh.j6G0qohL0RKR-;t+iGeYA"2XGs7t!fTgKuD)`DNZ3u;+2p?^J8Y-*!:gsJ1qU'9g:+bUE%:lfI_T7?jN?+Y8KMA5%DaDuo7Y?hA;#6tD9E@uHaKR-;t+iGeY@iOS-n%XXjq=s_i]m<]I>\o]rNuiRmHB'"-KSHr(#op?:WLf(+k[R>4Z["F"KQn`+Gi"'+\1M;`+Mp(MB\+NLLW.K=h#U.,7e776`&,rd;E*!Yj)Hsh#Fft>%0;'@"63o:Qp"0Inp$1)c_1S;KS2P*CW$o=m+dSfC'1)sZ$M?BnoCL9mLPLYs]=X[pEC0,!aIhhR\'Npfrohb)H7)$15WpHI&7Q@=EPCSIn%NSm\8fWR-#_YQWHTuUs3n/Y^Z*4j5C<)tmmMslW5jQ&6B"5ocG)JfoVcflb*=GV\psaohRS`_n^C8uTkiAhBu>)MX;U:X+bUE%:lk2skdV6O9"b0"lRuSWcoW%Q"E]a3Zh$[/IAD'2`$EiB63n`(TcWAecCR2bl06m,A]oT&o:L?l6;0.ard5LuQ^!^K]b;R/TcOk6#Vc\Z38a8r`udB)488!gkMQ==\)+Y,F8Z%7mpTX5eZ2dOhuEX^]lP>dTH4b5#Vc\Z3.J2\q/S[o,9QIJku/ZGT91?gapV-H;`ARIUfU/VJpL)r+iGeY@k6WjX&lR2Z&6C_rqL!ojN7,hp59_?eg2i@NW&bKUXott55a<^:0b&5KsS+,eZ)XBcAPM[#pFs=LO*cjXBW0Z_8/ETaM7]I>L/m($Pb.uB?qV>'-l3J0OR/N@`@cj\^S!(>P,"&-;U3qd6"O`%eZ2#6ASL;a4A7+5Q0[/lO/,]EcO3jrk'Y1K5tpMJ5De"Ha[hJ\tr#a\om>)hPh)=r;,`_;lXC0d22]UJR#RMAIpP\@K.A''838jR2GBWD]S5O!!\Y)UUlT>$?n(2:.D-"r&Odk[4AdQei#aBW/t)&42=B4glhp$lL8frEXq\rVc]jm#V(cdA'3;>[6>3)Cmdeie6/K(20YeKFgJ/69VaudaQ[)WY>lPDV_lgs894[$'MC[gMai``C@d^)8f72US=LTcETW%4XPgn@MJ+4oai/cY5%3_50F"3?bLc^GE*rl>ePHk>e+lEk?%HSq<=GUJVJJE#U.,7e71!P5!IiQTAYDEj52_0f'&YOdDA-Jq9Rp2H_Ui5mHkWOS!KA;GBO-+l7jH8&>N'_Xar_9pnLTT3ee_1MSI?H\[`.i3qU^g4*merZ:/SGXJ_tor!rr*H-)3qHKS:ITcOk6#Vc\ZfG`DMCR=%%7A7j=.ooo^B[P"i0D/)%j:"hU4:)<#O_0uUe!i1.U3BK=([<^uKFjnTO*0WphgY1kpQq*N@LR#Z%hCmGk0+osr1S=X,_n[X/ml?Jg"BN`!BE2%rp[f9H7)]XTcOk6#Vc\Z=Eg&_>:)O)"MVUaZY.V`lDq,\:5\*b[r1"/$k*i"1>'3_YMSLX:oMEf&42=b;3)l=>tM3HTgK&>)&6W9W)9>8SNH/.OVVtJ-l01Peu;TGJ:IWAIJNHqp!1OB8OuB+2<:^VKFgJ/@Sr3Vr_g=LCO6"'8/rfX<+B'pcVL?MA[Am$pM)7fh-"$ceI/NdLLBDg#k6*7cj=/&qCFo`lP9^=5h2A((9>hat9t2c\gh\LUKbdcd*%C)/i>_>*(f6Jfe6`O!YU-r>6fkg"ASH4?(0D^_MoM:+;DRpudsI^"%,FZ%I?5?iKI&+bmi&^4%==/hPB8#aN=/hT1U\+HAk=>FW5iD7f-LmieYdMIWiIrZrG5d+V@Jm5lHlU-Scb:o;7Wb*'crT*.JVS(MA/-;55T/c<2jQG"3cbYY4MejjMNZL-\+,i"p-+-k(r('c8.8TC2\8CWI?=!H;B\!A>@!LI_s"$Z\1I(BQlZ#t3ZA,"n'1)uP5YgPuhJMdXK_NqcGJ5k:+[5=k]tJilJ%Vlp$,=o"bEXY4^;20bpRMV3SXg-[1FJ+VQFMB-I:/[;20C?;+Qb7BQ#J70;[YrM0`;r;e?Fd(Ot3Ni="];X)P;00\giC,08abmVWEkI>,SCi$WhD-(Y:a$X[F\'8E((Y&&(2A#D"';[(6_6m:)YH-ZFMSKsY<9,Cmfc+?ETq!"cS*bVse.P2i@da]H1]7.k:ofl7jH8OK=XEH@4[r1-?=j7d`_#6Q1_L%N;rnjmN"qJ%omXUa=knjaZPa*UGOsb'S/MJE:s5kR(Nr+2&=^Tqk^c?+<;PY_cRba"1N#g9411'Q.+g/)L_\cmgl"jc[k-U3H=r2?:JMjQH^o(NkC:qt_"r3I/HL[JL``>QuQGad]Ed)`7Z60Vuh22S<%:*#H0Ym+NO-ji^X<'i#d^g:_Q7Pg#]4(bHuNkIU.h'`+/uJ:li4E14Jt*pDP?&5Y)XI[bjDC)n'%rP:tiGkoj+Mha)N$T5Qgm4fG(AP2dWD?L[379@$b+5So0mYuG]PsL!(,.it6qo=?ZHS`SfHr]87D%K#S6dMA.ZeI4usS$#TRNrH=SNo1C<'K>S&.'peiT0?aH8fi!Or)p^oflTX#G(%,1R!$u,!-d27IoL$RlOjd,dEle$7bSBMT`0bE(9NQbV$C\\Gj"58NNIr5k_@1J0?R!@M4FtNpfO@jCsp`.hq^"$?$f@Dg+ja18pHOkf^R^L8Yr+$a2LG`qNaKn\:5q(WunZ\]((ksJ&NnJGH?>W6J;(0BIMdHqd=FA[);/+IW3?n6XB#+qG,,tcH8,8>DX/)&jXH&FPXQFIkp"7J@ilXZrm[uOBA48YI#L#*4f.8JjU1U4#l,S@',&u?mCqs_CC5h3na\C$q1I&Do93GCh:lbo+KP2K0T:1Q0>eE5ml8CmWR5\W4,^rPkkcluE+iD5:'K(O.GSg%8QU';%9q''Qp/68S0E&mH']Rpj5G(-(+KmFee?Fd-17IlD0eF`Gdc2ML7d]&S7/lu8X/An8F7ePB-P1q-NPsTDW1am/Bug&PL6A3(O*uG6`Pl-p-.gGtX]d^jL!n1X(a+9e*&L\IXRYB>O*Fl!8b$79`O(V0dc3@:(?&>NKY1(?"sHa%:5e7&5J6rsr,Rc:11$cCB6oLJb>q:WpT?22>R`D*Q$TM;#\6dcDnF6(.#R+)i4U!-.S#rH:5P%D3ITmLq);Dc[N*39nA!;Pf8uK@JS.H52.U8-5s6QJ&>F`GdUNdu:V4i)T$!D#=MIVK8ekZb"/DY_i?IjW',d3Z+N:*o""FL)r\Br`4V"Jm97-tObZ2*p>]!TkJ3BB_MM&biC=fC3(>4fHF"Z_I^?m<717'H*6)A^bYuP$]pEK%0e%2qnQgt^rjQ<9[Dcn)*%diR\*(g!Oq`6c!MOP!mGIWT$_9la\bgnatG7S](1<920Y>qSH^,h.0VK/J8m$,E"cf/Roi`E]Br[VDJM\b0;0K5K3=WDZuoN5OqpQVb"fcZ(rh>TT1(hVmSgEUS#Lt:(dEcT.5Y\6=&=qa+bXMO=212:1h*o5g"Y9)Qa:)`)mcFpPjW,2Y(,!4IBfJe/,FmXk#W^11aa3D>rnCJqc-W6pCa)V%1ZV>iHF$5a_"3c56k72VdmHp_V$$=%Z<$ih1e3Y-A2r)JUF0344YLhgYBD>hm^$]Hu^V9DsPgb+*-jQENpgAN&`m2K>n33.VHJ0BJpOTu\PpqSVU*aWGZ,KqflRhn.$:MIIbk,so3o;jD0WGe2N9F)e0"4ZAt*9+cSVsOE^XH8r5(A6.olrNo:dHg@Do7+L#?[=gXC,uiHn\hOlmd[oG)&gN-q,"980jE[7F4&bX.U/bk'1)uP5lT3le:]J`N%LL+$#e@Cl%7HCkE2UuG_Yt;*aSV"$Z:NcB22bUH'F-6LD#@8O)!G?+)P2g)`D*rM1(_rH3edIIt)lCeXG-kXIk!;"sG2?A0N&[k(V,O%@n']Zus!hDaf/[;1:'kH@4[r1?u>braoh7X+>[CNBXR.O$hg.k*aY-F=t^+%N1n8eg*CB\c6]RD?H=dC&)qM5'#%>T;%7)m>Y36-mgNU08qLl"uLp_+i_Em^*BFg0jB\2m4fH+f.&TsEdR-#(XaXPrO0-2H?JV9J_*)u1Uc.rs3,l!I\k6=%'!f>*kUh7^tuuV%PHnnEUR@!9:N)V:Ie!sLosI)_n'sVM#mN&om=Y\>WS:)Ru7<\L10;[2sWiKp/UC_R5Al81OJE(emT0#%aufNq`O\b6BBB%JdYSk=NNT]l`9ANl7jH8&.R\F4bi?g.pH=DQ*c%eTi)oDs10"d=3NNR=e^#T-_H8'+"gf6Df;hX!%Cot#XsQq#o0D\6lZRA=/'pgGo]G]AB9LO]Q!R7:6&*?qMpSr&9rW8`]Ee&I[rDo%ZfGPq'^(Kcb#%j_kF9r>8);kQZI=&,eqXrAh4N/io=oc#^-!ag[`$!VnRh`@b?)(kmpK,2-9F^\7TIH"q;WVfNP58bE^P#9VmV?:^=I#MG1r%&*:=5H\a=#@ani%.(2$O&0a7V>+GT!nT/Y_Z#rUP;20k7W5n&L\4*,W6oYoI`Hfr+i[iH9Y-55WGYWEh?gR?cOULsk-?9E/&W2%`"6b>NJ$ZHNA_trSffO[D!FAEE#Ln\qG4k0mj_tZ_oF?h[n`JiYKF*CVn6@0+TOK%fq9IO23!t!'SI'?l19hRb>In>_1Ja=TYX*m`/R0YV*'`^/'Y:id%3IQAm>'HD:=QM)(lI;ti`/X[<%K,A;8$lCa#c4$>5$gAYbnO"?WnI=3rRW<&\)[GnsOM)U1J$oWgZ9lL=*QP(,HQCJg#Mbo,DBs0r_Hbm0;QOKcZusn1,beI\;`\*(8bMZ*ST>)XGo5@_O-.*?F+Dk^mq!m=:me5Mr7*_XV/8XU-M)ZW2?t+hGHa2GXGL9m2qs0M<.L#)al$U(L$+Cu8j*HD#Ri2\W/mKoE5h(`(l7jH8&.R\F4baTj$TG9CK0j9M@cFpT1$qnjO12G;LBl\p%[;oj%]=GM0T+uY\QZdCkC=9%@!cA\,YUQ;4]uI#"\O-lJ]>co)(j@0Y=%99&@HM&q@:`Zpm$/An4*qKl/Xj'Z^VY*q.L,a7.4<-]`=o`ImHs!kE")F7b3:u9JKZPTY=`2FPV8H>$?ZRHM1fAK8Dr^/r`UJ+IQ`J=A^2?Z8hQZ.5m^fPe1NgA*l:(/iNSQL\N'O>X()i*MEu-Op>MRmUk*lV5EFI.K;'>e_bcC'1D,1YCrNNWRLqkL-A2r)JUF96MPV@^Tenhtr)"F$Z$>+tCl6ma[s-SHs0E.XB=`]DgGn9)gN=PWQ/HXYi90mD/8n!A^5r`eXE]t`M+%12kL!$RgkiZ,o@/U]FF*a$@46t]uVn)a/:_[d4g82](Tu*0t?+3h"%teHf4U4`h`EB^(r34HanRG8Z>*/eq(Ft;nLtR!NGeVdVm+a9tN;)`g@I3.?0u"qduS=%./Cu:SkTh#RJ*!h^9*]U_Q5?VfD"[bCg#OB?fEJQ@-O_8nj!\`hkih(Gp.p+&O!S0Y+>C!a6(iA\bm$9#$%_#3+(H')UW%.R4Om,&[n_;;C_@,&420WCdsKCGeJrtPI%XI);]*O"*U*u"%_mknSpL`h30MKp[os>O&^Z8_[rGp8`.'WR>GSm(*S)VlEcu;LbJ3iT5?(M=FAr(:\R0Gq5a6&T?a"Af]%Jk\Jj%ua1,]rjXjK@PUqqWOKI=qaqk;1XWY9!4_q>IAJ_$5H@Q(u0$Tg)i1o!]H`2jdYC+>@],Y^70qu%76R)SJKJ,Q9PrVlKQf\6cMJ`MSC)CVcPmeV(_:s:qdLTiQ+Mc`oP>3-msPqdBT>\c,NV\>g82PHRK$H0[G-W#gDCY,L4Xa>HXn21^e:R&I-ECW7EXn?uph\*d4iV&%NT+qIJYB3q>/D:f-bfh0EGeg:-4q5MkP.2Ve0!;^(ORa2\7^Qjceh6Pk.2`(E":g3^i>UfBAsL\>QPeLA\;lkQP(SFLg=;k\`7Rc.g"njI<:*95QS$e3*QdIDa40_]l=-rlh3rEnGEA[sC]\00La2543$@Ao33#90EacL?:c]EG.q2m4uGq3Guc7Yu%[(JF;F"9(C%!M1(`/aq=bT(_\o4#^k(rFRcoE+>fmZps*9-l`p7B&1\N7_Z'eEaj\-XqLacba+B]#"J["3"[0Kk=#iIDa+P!j1lsB_3&T[<^"\QSs8+?A;4(ljGVnQq[!:3mfS]uYT)SWAlU+W2HR(?E`\VIe0FTcARuRA^h.)A2aH$MX&G[_/VVk]@f`bT[\%6GkrK4;FV^2U!4u,Sc>p1m$%g^%(Zm'I#42E4EftcX&Z#@W^V4,/dRDN353dld?S_kPVS1_fd_MYXps?&,IlM].Q9Y/LgoUk'.,1bOJa]IlD9L:mE-A0U0=?q6LBPBon.+[cG.6B<4tn`2dUEsqpid2;\#a.g!&GuL-[sLKFjjYl7jMF;:+r[:u;k-CVB/sjQtg_@-4G3Gn[eK*Po^UflBd\bE=drrP:s.p="d0eF,^e-A2r)!U;Ba4&OAs\5@ki0p>c>i&i%?d&p.sSP7EoNP(+S7hVXe78sKaQk2T?#,oS$lpO.gj-'_Nm,)g2ka1rZFf3o2*1rqU2*'dtXB1I409=EBkWA%_$aV%5503APme+b\J\hgYGShBO(*Ht]M]V1i>)W5f<^%PrG/i5#N.oR6JiG<%F)#pFuS&qBiLa1--LcC?n)WWK#N@4%qn$u6>/HAiY']_(.d0LnSc+bUCGA)kRgbEa_9[?]1W0GDrGL,F`(4^P^A.:2jkAEXXm#dHO1hnD7$q!](Q?5VK*BefGa?U?#YA/oWcOkdaN*ol>l07%j1grY\P9*c]ZpA"U\he16)\S9M>UK\BE'(urIQ5gct*,-ZWGl%'3iF'RH*FAB^XOolG+bYX^ORM)AYBM1D&:aF;+#GIo_eOVs8DD9l^\;)K]EnnM8K]A?LIG\KFgI@52aD<(ZWMpgUM5J^WK7VYt=HEL6jm4d$aa1"X/O1U*)T^IDgpR7un_A3tXdbaa*C8L6jk`$A8sW8=$c-l-f([_dd1dq5"fmLs:Gd1q]pK`=4J?HKRU#+XI)MPa"">e>QBJ$QSQ4Hl(&D0KFf*]l-lQ2=0KX@bEt"onADM@a0&[XEg%&$X:i02iFN?Lendstream endobj -36 0 obj +39 0 obj << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 1117 /Length 4054 /Subtype /Image /Type /XObject /Width 949 @@ -299,7 +324,7 @@ endobj stream Gb"0M0b"+:%)=Rr<(aI6cteML,KQ'STO`KV!&pd/(t1g1Bd(L'&7\n"0eL>2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_2(1KrF0rBXAdmB"-+i^l#@p4[C/]="l@S@.aVM,l96B#V%`j?:e>)4mb`0_endstream endobj -37 0 obj +40 0 obj << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 668 /Length 209613 /Subtype /Image /Type /XObject /Width 2079 @@ -307,60 +332,32 @@ endobj stream Gb"-V$!9sU*s_;lp9][6,"qV\+gPXF'PT&&9L;:Y'HnW&7hN%"=j#B+/=!W:PR*t=KT(?2Ql0DsrVq!=F6Ci\og\V3n)l],chj;\m^_MPHgckZ],/z!!!"HV@Ob4Uo1,GL5(#$H]K(&C=]Ih9:%82o\^A_!.:9eXBDlCd@u/AJ.X"qq"XWc?bcU&c'sU)'*8.6z!'nrmk2ssX2/C^?;%XBP=]nmGhRl^-MZUFmttupzz'^kY[f9)2X,=[VoZ!t\I7unA?)up!6:7XIjDX,`N5!D0NNZD&?>6"X'z!'lkJr;8Qrk4niN?bCV\d;8maJFD=K[r;$/hINnS]6B-M$NL/,z!;sm0J,U<&(q*);W,]_/!D;SEclMIG'9aG(G8sSYu*Q3fSS+U:EMT@l>)TMQUh"o>o,G;glPS-eZ2c@2fB`l@RSND?=$t0k05u5o&T]Bmob5)c_#8[QCjeAaQi]"K^,8Vn+^7hWMs.uW2M-DU0G*EQ,N),48Sm^$O_=OiWVQQd&n&Po]ah"SN>0_-Z(Beg"Cq-JTRpHg=d#R0H`2/Zq)j"P?@jh@Db,AL4:r+%kR)sD7s#S?IY@dbY3lJ.VcBKL(,([>eb_nFr<>s,=dbVE8X"G1^O-^z!!!A6CY(1'5JIF6*_9P)P*-Fq)6'F-A7K,5Pa$:ep?baq*m!TqWDb8r.WhKKbaDCCiK0-4JO%S[:S41>GHP;f^2`2Q'e<JL^"p;E03GHO?G1Z,J.)hpEcQ2R"lnmt)f+$+;(AerokJpbD!B*-/+rQ,kX.g/`p;6[ksJ9D&/?6??iYV(o&L*Yrl0p:PXAZF3,p-jq"sNp9=-4,`Ns4'>.8D*[r5XQlh'<'3Y>#O/u>DEWi?\AAF(l7dA+aZ9q)V43'[_O?+Y8Z^.FM8EjenUrRA]P1M8'5UK=X*<$jFYPfr=H\MJF]d$\BYC2.X(:6upei5h$*WUQ-$;oH.FUh[X^e0d^T7eBc*Yp2c!G^Fep]Qpi*=p4m+z!!"c:If+H_kg;sn8M\GY5C[!28a2!PIOJsmp@e2ia,^,r`[O5WCpUA(5J8!mBOG[o/Pg>:%Q>,DFEHSarqPN7MA7YmY@%=sgUCGMo&\%p<)cV`3lU4Yp=jKeJUe\7J+DZW]"33qC=QY*Ia)msI/)'uEFWQkAUXVGS>E&.5I`s+TphERmFnu0hHbi'3cuop*B1],Q\NSrgbV$9m\EVIo^iicJsO""_81\;3-43jQV!fL$>=*d:k^)nSNM1\%LkX8ldi1;6U3ne`"mO_fJ,-:nhYHkoMOeYDr89%QS/2B.T4l^SWiA\C2*^]ma,f&fFVF"A)'md/Vt#cf41MKNhVM4^s*s_?qXrl$7UKM0>"V;K>O(SA4D`Y(nSK#?g_*Z'q,MkK]W^?&T7Z84X",_3/I6zzaD]%T'f0LJ'H+q)n_(_^D/F,/)k/KoSH>%p2Nrt2-amsN4ut`.T&>3ULBeRK]mD\&F3L"+PdtGQ*qo9gbEr)%qRq7M(0NRJ/WC]EB0hE(rVDB&ZZG;))%@,`/dMjA2'hS&9OF(!IJ_IL8IR"dSj%S&X/g#JAgVL%'A?B95Tg\ETWSb2$)*f'f<5(m++Ne'J&B)+p./.P7L#2Xe?3V@DdgD94MF?,R,:_mbKC+E'[\+e.Vab_Si2LQS)S'rl:T_'3\!ggsTE9DI'en7=9/FWj_PbkV$K4eu`/aC*gL9mG#*?NZ=IYSmFa#zz!.!A3GAkEU&V[rG*5R?4gkc[lFEM`0?ba?cPgs8Mscr^0n[G]9@XTW(0I1N(u-Df>+=n)'V'RaUL!B5N;*O$Z\*nDV8Rf)#:4^Q0I$/l+Q?f?Y%i!q7dG[S6VWb!U?[V6<::+]kdLC6b2m;GgQS2FB>"+?S?!S7!>faT"LX"SSXK8M$VoMDQl-b9dOLFr-0>@o:4LeV)DLMBR=h8_>?[r##?MTKq0355\8Mt_We;:n/6q"8,>35M9J"JlN[\KUmK7h(cR5:HuHWK@qc_!Fg^$1\n1YZT"U-hbdDVaEtQd]S-K*ttsG,8ZgNZI.mdTZQ>J\SraI6DoKBO"ft^juT%Y6PLT6p2Z5[L=!,J9pS?_1V+?M%_6n1c4Rclsr&*+'dauhO?HBK^t[AN/WD+YW&r<8`Jah&f)604r^m8Wc7F`]gIPbV$`caSO5_1\4I-3X"%/O8DV_.I=(fQC=FYgQ-^^)6Of6m/Ii.@cj)V4c-=LIh%_G@E(`hJ\8^WVS[ih)p?U>6HhZrRl-V^$D+!87,`JVg'/(^q0qqf#5,*hodd3CV1Gi-5`m#1!dDn74Jbb&g_KT%!;^/Lq)Cs683huXoM2FT/]PKb%>*Qu1jl-kEIU,Qc4@,8D:]6E`;o^nq!2`E\p9=3pSg9k_@bfhUh//gHb>cCVt,tjQ:HhU9Y"8K\9IdaNh!ouAXKS:E\@DT8e.OloHVbZ'_J,crogLssDe^aIKi=YVRm9;WnBbc,Is1NdR7RTY3S!t?8)RBBBkI9a'TgSHTHq^-*hOlVO:7RF%#okS-5j0Jk1JgG+K<)Z;K*s+W.F`'RU@-aCCWDGU]mKLN?/E5>1KQh2^[XBoaH.QR@:=7kL(>BO#))mIm7TsANWjdu(-b22Ndc8PbcFsRpmFS<3aoiL2KXh^cW@8SU"-+u?bUp001.="F.I)^CX\,7rH%`$h.!IXOV%bih\NdgW.4*`XXeFG;SV`,q284S#\aO(Y"(Nf%3%3)<`Z(*RCuLTIPE77Y'9^Caj/32_I%H=-P`3&iSia3#49U#02kVXAnJ)EXk7_[r1AnF:S1OimbPJk]!Hs=J_W?BzzTTm-7nRBFm&_YjjKpItu=sWfjQo/[1E&m:biVB[PQhUWA))Gl\%'Q3`G>97l\@B&iW&uppQ-D1&Bkb\])Ls(Y,Z%7^SimHe?(OcW7%6gZD*h#on&C>+m&QYmL&:W5)]BV5)&[!tB!RrZfN<9=F]u7KRl2gqHhZt#Pq(,+cf\=K2Jec%]97XBq<*VM.lo[ND;2L9a,V/B"q7/)kVi.lHri5(&F9O(hmN318F>``rW'm`]fGOM]2V6tU?B(iYZ@DSAU*A;E6_M8XDnh\r4*4pC]P1EBJ%2q'r1;EhbX%<5X1M;l6P1H^;,B>Yu";f.@+[`1:D-A>:\?Ki)2Hi.enmmS]n'Iaq<)f*@jun.h1aaZ+T>P8%i9&rG[,4t5gqJ3+bN[fm1Ze+U9\Qjf@pi[eUD`DU>U#AX'Xd8phnQ@gU%.'W""n6Rg9jnWCY,^%2bLh(l07Fu5sa&$.&+=4.DV)..%WIz!!!"LP*VN(3F]p_6Jl/qPSm`aO0Z'@9VoU2Nqbo&V(O`r:HL,pe8r%1EYUMqF,gaNMouhnRM:WLeNL%l.tU[Z+W@0eneGq9O/=PU4cC?=?\FB(N9D4%aZ=V4tK*u[=EO88I=I@RMH1S.B\&rBUYi*e([(LD1A&f'f5p.g3/504dj:'^B%W?LX]i,qZ)oYi0$&<7KE_C[IJik[lC#e[/!hbf:>-gB0Wg8qd*T%/:-IB.C0mY7[>%qLe\0k(DYSe+-"](/7r1j_8+LiQW8Tj@M/c)TH;q0UXS:?ZAB[a=hM\[lOh+d_6?N:'+z!)W#S+h1of@*lK-C\E&Ci5+d91@/TO\[f9Kg@jsjlfdQR4[pSV\01A%Ne\,eWi;tcR$b*LNFf1Dc_a@0c)!nTf-3A-rk*=8c@>fc(RIKpf)BAELlFXjs&km;B5g03c]lJ=R[PG:"ZE-,[^J*g*\bmEA&i\6FoVI+ppKLI;(e>U2Yk1%m[,t[PU@ri3;S@s;jf$BHo"^oBu`l:L/AT%D>n#%6[=qi#!0!,Rbfl#1:TNj?Ju5DW^OH.6^ZE4Uo;7$;rZ^f4Og_h`RkBOUQPsSSKqEhjWFNu/gcJE*4F+eMH,N0BW=R%0*F$7*H1&@D9PA)fJ+WF1p$4JNehf-;il5]9?G3A@X_h`baLt_>-RYfq[;,!ll5:HW1>5k^_1b2dMS?g=YHKToTu]I-bB]>%s8@-\)]N'gh3aQHrWm7B>+2"Q*Rui_i'@9b,mG0A^V;uJ('uUTYcogXJdF1R4aP%XAnPc.X]m_4-qJO9C=fVjWiDMZT$G(Ln])a$<;njrU&A"C_$+#5%\NOf(\2e+nDV849UHr/1S*(HX&l3^7ueQ$rY&P0p@)F"7"%gC@"eq&pnR@'jK+su/IFc)fsJigmdAlFlb@oIHGtaV[%#4\b'JA[r4*,%a<+ZKkCfaK6m*&f(9O[>`,#/7?hH`].cTUQ(*"=<4tg3QPTQd`,U=X3^?eEY(^(WTz!!!!58C#$hH[C)i.kIUI??+Y:Ace6HD\8\.U^:pSG.SM0W[dr^)0Fu8"36.eWAaT<-VnJl._k`?cCHKc#q#O_Y$AN#3lK+\M"Zt"VkKgCmd;];6>'`C#W>\ZV56W2dU)8)l37Iu^OQ8i=>32rEg.mD)!B/52fqm?c-=Fu02GkaD/E#G9Pq#A[H3.fT0Ig#p!C.G"6kI5ogm'U[;.-2>Th4U/ZW'_.Wm`<30g0n[SiqooB4F9q=f,RFQ$/:#R#a6%3&3GRP\afcCpVDIe[)gnPQsBtM/hZtqq/fN^DhXXK)YFa1'`E,Mg[+:nU`I8qePDS<%NM-8qSf+$3ZRcpA>eYW`/,0#o^lfMW$SfLZtm@$oub@s=LDn/;Sgl2Ceb4YZ8%&6.mhMphSI$Z.\n<.chtXeFkJ-BG^)4824G`N`f1r(ZtE0OZu+Q`N[`Qg?XI1:ET#.O/e*C?zz$7+fm9M.nas*`q:Dr:QSO$ED"2f@ED@f.5F5JU3+g(61^!ZtF-QBl^YdO"lWb)0.n7+UAsl2C;@f4WF$4a$$(s!9@QXtF55-.h9WOIM^idY=j)/@Od@qtGi"L-9kT&6\,N]6@>Z>bMYgr_[#HlK@d%c_!1:io.e1d`Tq2P:'.()&Y4W1Xpt"-dRu(:\Zr:04-?[#pq4iBKgb7kk+,g[*#"jr[GHrS6NI?;2)C/Dr/.c1.BngW1EM/7X[Uo9V"Pa/b0sM[r:0p/!Th=a4$q^A^$ieoB&cuo@L0Q(O8Z7$riBbDq`7%S/hB!/JN,R`-r@a1piL>6XBHaq/_#1Dnl5tXVl6/C2.L3c)Zh-33]^GO?_;\9%[7#r='$7q9dn/b=0ES`*4g7V_N3p&:e'n\zzhhEmI3.p-UOkd^$?XI/Ij:s'C?]R?sp=-*B9?&7,nDt8q&f*'&6m'^F4'/[r7G0=!;i!/<`cuiWbUi6(Sm["";NS(GFipi=C=EaN-me'br5L.lL>7U73CDoB4GX<5-T4^An66z!59`rS,iV?Z3^1Xzz"iB1+!!&6P\:4MZz!!"DY#%mo9TIdtY$NL/,z5_1UK!rr=4&aj!+z!!!!+KY\N+!%nz!!!!aJM9%c!!$RBmU#qoz!!!@Z_&34Q.#W'E!WW3#z:`p1l!!#8eK_lPcz!!%NN@;lDN!6QM@^An66z!#,]k1B7DO(?,5rz!!!"l5T$!l\9$iYG(?dHM%_6NI>N?JE;ot>z!!#h<%*eihhnEA&i+pl@:EN#4,$ueS^An66z!#,]k1B8u9OT"Mq'%5Btm%!DS>`]0a0)ttPz!!U6t$ikke87-4#E'X]`^An66z!#,]k1B7\5+FUX(_$(]qrrN0#z!)OdHc2\usJFqA=";bUar&6t:tpFcLHz!!!2>i!dC[(0jDBIV/4_+,O^rVH(UCQ(s\+;hZ1M2CX$'^[6^4Jdf/=!<<*"z-kHSq!5>_r_Z#K^,q4<,mo!Cpfm[HJT3m=a`hsp>B1f4GA,Kr*++$qWf'QX^O'6KqdsjFu()?6Rj?Ip-@!'7$Oo;,>Rh*JEI%%ZrDp6/Q;h>h3;>=!:Y(Y_b%(Lcfz!!!!I&-cbI^:3%;nS>&Q2:Sb^Zk1@Rp)d!ZY)3)k>W@-ne%/h#OXV7'FmY912iACd#qjF/T1<6)Dck#_OC`J$@Zk#pcW!.!8KufE9/\ESdF74?>IJ@6F?,=4V$9kY?]]c,:,Zpf7?`H5575Ap&6t:tpFcLHz!!!2>i!dC[)-i7_k5tBg6$MK5<$pSr@;`1T:TdYPX_^ncPWmIGjIESQU\'k3>R.icN??hlk`<.;f:a0;5AsU%1P-"?l]h,(_Tq5UWbSPuhlpgi6)-PJh"qpf1goj-MbeE#rs::p(fo#1eEkT;dG'0CN((&fIM@Yi+h/WsmU#qoz!!!@Z_&7cA1:SG=2u"Kjb6If(FIX/VeuESLr*[@/4'A$`DVoeMs3)d1a%[LKq4f9reLIIsVa4Thi%ormL"7\mc36]s-d)&u3J<)!.&C65^Vu5"UpBMZ6&,3**YopAS'u@R7Zc2g%uStp$+.NShMk"^^>HYE1tW>,mG0aSLUWhBCB-aB?ja;QV*8IoZd@_\DT9TT>Grh,SG\:1>r-8z!!!"l5T$!lpa1V$1?MhLBl'Fq'jLD'Vih#/giQORe[D%'ED&es*5dO0*W,gib]h"(8Rk7dp+`RX<5(\Ecc$\d.\0t5841M$M!>aRK$5iFk5&dcAX)0#TWz!!!!q+:QNqI%S6/UY2Wh.Oq"U]?o_tZ_u/"Mq3T'9._\6BkV7YjIYFQ/j@P1/$CTX\.BR`Lq_/?&]3E.M^EDZKgP,'Os_%Ik"Sj#c^.$dE'X]`^An66z!#,]k1B?&'eZ:AYk5p5Ch]^dizz'F9=I!8h=+6/nCB_2ILG9.l3,8L6IQG824JGPC[$bc3PE4@TgSe>QM['ibus"0#'KS@s-_W7%S?644auU#We7kjP7JUFd*`.(%:,lXuHIQ$%1kIN1P524-.C,jeH/;l(3J2fD$BF<0RW?s%uo>./+eVKbRLiOag@(B=F8zJ-'.u#2ksZ/kBM]fn`ujlVS-2s!N0Ap@/q>^NR23rAr_kWbSQ?_WT>3dXhjk(9LrDU8l)4d^F5/WM)-C_1b5AUu_)VDgm=Ak2HinFS'\Nq3EV%-!a8U9+bG(DW1Quz!!!"l5T$!lpr7mnC"L[e5I2L&aTY:02m&g%M'MV[%kfSq=ZIXM'!7FdPtX41J\JFd7kYm\'fX'JiidClm#e9@1WIb.\9@'3MbeD(PBKlmq"02ZesTet$U`G3k_ZVI7L/_X,8V_GA1W[EiZ$rCBhmU+ps&_rma"G"P+*!$._Oq;+sFH="7BLrz!!!!+KY\OVD_/DKoIV?l(M(>[$NL/,z5_1UK"+];2dT;nL>`]!\0)ttPz!!U6t$ikke87-4#E'X]`^An66z!#,]k1B7\5+FUX(_$(]qrrN0#z!)OdHc2\usJFqA=";bUar&6t:tpFcLHz!!!2>i!_lE_1e(316`,Un'Zh\rc0Qm=f^[/MZa)Io@?rtc6mTHDE\b=[p_F^@MY8h@ZttbiE5aG,J0nSd?Atm=@:b6o'^L+<\bEE(r*UPf.ComH#BC9:JE\'Bo5Z>'?IUY2X=iUlM26fUt]S-QQq]m##XOE!4[B:iK]Ao[6f[_dgT^Rp2;6J7(i(B=F8zJ-'.u#,#(M$e#jo;e?[nb6sAPA?7jMF9WIqe?#p"Z-7uilWDZ5V/o^k86g@7g:ksuICLXI\9-e@$K\JJ*gJ>=\V#RaLI5)qoF:Ah7`HM*-%#)KC7q,oYF?'A??gL%mEYD(1FLLT3\UH@ZYX?qh5gcq(]+C308s.VrkTn0(\-+G&3O\'K&B#ZNdfgbHe+r3Wat,U.H>&7>T0s>m/;k5G=\Dj+D5Y%A,Kr*++$pXlZTD@a&TXGe0/6tiRAC%k6=C'C_8[3^8*7j>`]!\0)ttPz!!U6t$p_'#(HQ[(8=5O\/90pUn9MCJ]5nL>993FAXfe@8eY\$k^:4,U>&-iKPk\)Nl._WWm95EAma/+PLQ&iJdTS%s"'&!$a3U.*VNVHj6U`6;K[Y^#+&AhG>5@&9,FUIMLAfe/^-Vb#gAed-,_dmSZ>mF8Sh<7bZ=UA\8lWFT2cUoGkl&0EAtc:LqaQn$g4TUXR.Oo:%6=M'#&b45&o/lHY^Jmh)b*Gss?Y!^2=X5CDfjg=I&VRh$^Z^TG@%s)shnt6&K)*!+,Ik:c?$6#A%Nc%V!()pEn#R!Sbc%5^i='q"hCtuZ0D2%7`OTIm[U\(&=jQVamHf,:(>hGIW=&ht[nf'K(1h`,OMgHOuM?YWGE:IZ1QZn.SPC6>g)F?MIiIhNSFmF^Y:CCOB;"PLo[D;_Kz!!!!aJM9%c:b9Ed2Pb`k7Y^8PAJ[FK0nkooWE)IAlB/htTE7L$H#YjF[RKc-`^PX)ceQXrHuSu>'DlDpR6,qXZ?pV(+Hb$?s)C>$cc@Eet\b(Fj+!9JX[])iUgPiA`Yfjg[`tEeC'49H%;r@d[WSFm+B"Xr*A-.QohD_Zu@?VF37;-.!%l1/9s:PclVu!3>W[kS1)irj:E)!TTjcq'T4fMgCs2??")o,IpY]9W20'(;Ge$0=:"/84$$Q4Q`'&J8!.cj!WW3#z:`p1l!0j0)(G7nrV&Bc%NNsW(J'%t"7lt9nAT#+(6fhtL?gQ@E]D28N$k+X#.C_'BbYWbV^7GG:pC@/6CXoFa2m:&)X3[HQquR\+>cD+5;6RXHr*fB+,jLRK/lu@b5mu%.k\a]U3nB)L)cCMh?1PNMg#qK&@&7qNYTgM&X2sIr*q\K54z!.Y,ZE!Dt;Jd^$C"LC&SZWI)u97c]4ZP`lu4O+OAPkjfhh1kT9l.d!s128e;SZ8ccd`K32I@`EFMF^-&A>n;#ZB9m=AkMJ_Y/&#S\U*B19..4lo'cF^l(UAP:pl%GVNquV`rSDEHS)is$LIkJ4LlSa=%Jq0q;Y!(jibN>.,j+#6=XNQ-pu1D_MoLgDr)o%@ObBfIfTNLz!%8B_B)mf8\8^S*Q;JqQb'3.6I/8#`a=9CrfQK)5Ps1_LFe6j+lo`(K59cY<2lgS`?BfAC4lVL<&?T7i0(Io5f9IYFEDZXgrCt*Rl6iFPYQ2VbNE-o1T2t/'!`iX,_&lf4T>ji1-25X*frUr^e,(TjiPhZF"Zrh)g2)4l"W)V(ZV"n&qUL=+$Ksk*u@\D/?De559YcmFbT_dQ.@gg(q>%rz!!!!I&-cbIMC#co?1=KR>33,)O^<<]H^>ekrOb9_%dDQF]33BnPY"MNZ,g2ieMYi*a/G/`lTdD4nKV>pqc#C-U`@a\fh91GbE.RWNU[Z>:@IN&>uT?O=&r2WkNkan_qtWpIcCY&km->7O@":Zrnmi(QQLSGS&$irDcim3Vp!DqCtUB(EnV=Q7?N31S3(pY9tm:%r;ZOYV+ST<-VEOLOfVQ`#sZujbHC4jTp5Gb-AN`/.A?fEj`?="PVE^K8ki5KaMZ]Zbm51!AF2/bYmX7X_c!SIX='WP!jH&B!kf2F#G+p1HE09bN$njh3/Go*&W=hQtU2E,J=n=ann$f*Iu-Ps;,g9c>KFXD7qr7)1(3>NulLD8GEi]SV5;+mX,7o,Wi0KR")+-/C,,@b0C&o&K\^rH/or)Gqm/$_B$\A4UurFtg+(15G=I?g8$,`.D9$C*bslBIKr;oOV/[C!:Z2f9TJ'(YVT930=-j2^QRlu[Am2)R7\2fB`N'2sjVhA='-$NL/,z5_1UK"&RM*_RH(&,8O-p9Nr)+-'_#KhVn?*?e?*c+']q,h[7'0rZ>K$1DAp6Zg?P^HOh&RN%9&/^]=lR%=`m-gt^]"s8MoT`J]:uJTOc9U4)q4dA#RWi*3[.4am/`3]^GO?[pY.=^QR$'bB*7zz'F9=I!!k3][/5*bi6e._rBa^%G:IQ">p1XW-]QBH+>GI,>b[=_pnH\uY[AZ06%f.Y?^N[,jmds2+$Y4U;5;.0;55D=qJ"?E0k:!HRl5+].):MjM)JPdaE16q!mb*[F<^XDU>%BH?sm>=BLh<@_0.^c'gLOIf-]<4,<\Lz!!!"L!b$$P!5Si)(.KobYKCj(mJ2H9Q,V[ucK)YO?Q@"+ENiG6=3)Igq"XC>qtKP*/GT*\@?i=7Jd^\`IsRF>^VPUsQS)/,:7aQs^)gLCSt=6RUeRegX0^H0SABmt2/6Z4AGl,P?_3j\]"5IZ?=(sL4hH%5C?qM#sGigKj@PhE8e]i%k/qVIXZ`XAnKYu?^G#2lI>hu]Q!_Sn@uenjQ'i4q/>0)/\Vj%FQ^piOo/tEWm."l:I^O9Jd[JQ04pi?P*,qL_2B*_fN39@pF0%;AdSG$]p5KtJlI2YlS"&0*6%an$)qM&k0.SP'9he>CBiS,3q!W*XN/W^VO&&GC4EBLR7Y*'kY2n^+h$FG2=&Pdb0eH*JC!HmEM&!NheZ2afT6#QAb2urjk4=04;laOY#VNgK7h(WJHO``gfh1)mGd+<&eZsIpi'55+7f!ncCI%`0k84C-)F!UV8M]S`>3.7U4nSdc([Xb6:+#99UXo/n*fW0>d\jclLl@9t]65e)NJ`Ts]mB@/'e:%7#Rq662fBb>11eUm#nnX&)B)d`>PIL;ZW!bs[%Z3]CR^]Ykiq>'Nf45H"pP9HC20WCVCbuYT_:?,41i,:;bO&,F6:\L]Qc.g+>u-$hnFN\aiPD<)0pLQc^m;snDOK;?N:'+z!"+Cq)$!)/(K,>'QY]nj+aDG23ItsiY0VEY_dE6X_1e8)>A&W6U'_^=$W#&>j7923d?Ato7P:C\4-TCCbaUY5p67.aG=\e\p?8ZYTeh(o:RJUH1aVmlG_'4^`<@i`kniDV><.0"1m]lpj?euPOItO]%oS$qe?2B`A]07!oU2/dhjoQDlY%*5k2i(6T=o_Oih"/\4@!\A%e.TMF+MN1`ma>\cC_g8,E]*KnS'V`c%"m:)2i*b#;W)tBrNC?-[R3gVhg.b`f1ofrA/FLUT(%Gqk)MlYi%=,BAppo,Dh86qr6V@h:t1D/$l(oY-'&\G"G^+ITFECbm>\\"gG'D+h.8k-DppJS1RPj6ZVP0\,b3@nnlfIISM3jlKdYEeVIfP*1t@',1-/h]EdV4+$[;lD:q+gFcjISAd5b!s>OI5!D/PUDZ1=Ya_,OMi.s-OAW&Z/TYuS$<7"-C$&\U;'/$o_%m"FEAd/7;\gV1G^h&fW_'W[<;63h5NQohVQc!KaS]7fWZMO0(.5g;n9HLNugH1qtBEDG8^G]z!5LN%_$'gm";bh&Y$%T)PodUZ^&5N+7Ll\@pM!UaZ=UAg$SJYlF(:D+I>@Hm$E75*goXY%rfFaC@0QM^hR:=`Z,>p6HDmilqB,Je;oZ't(EV`rCta\cW)Zg=E'NgZ5<,U@X!oPLDa"k."Yq0+Y1KU9$RejM6cXIL-06YA+#.2g`"j,2#PgsFP7&7PZV8WD:o6fa;ei,?Q\TkB>4bgu]RJ;j1i?)>(fmHI2I5$8,AH!+hp/N$g6XE%[ZoI=>=[6fG#%`l\iMH.p81$QgTV`1G4!sWSh=#6E.N:Us8MDg>sJ.Apgd)P5*I!pEOCojA6XO$V2jidT"r-S2+jlPT8B4nP!7VZ[Q@U`eO>[2)]Cijc@6pu^C^V@1aF`;:RpFM&SLBi/A_pQlZf%.9(Rl4!01oXKUQDpj_JUrB\[PjTe>>>6NJ5(KpVl+0@BNVB?2%'eMQ7Z(*<]%Y-$\V53@W?osM6>WaMfN9O;=nmJ%1A]>K^3t^ED_(7m.WM))s*F_EI=?YEZY.VT$@J<63[5k03B8fKEQaY".p&mD2/AMm^]36.K7!@\h5O=#CMW6^p$,P\?JWuT:fg_b9s-&\K.&QO6#1Jh?8lcWfZM?oC::OXV1[O3DdV4V;56Sa"9_Dj5!:/:KLID#@Udt`'@a8YoQ4j/[;4Bm_:88Cc_$OlIf]TMz!#,`k$NLM?0)/26^n)PXZ1l1cM.?"[LZ0P.fg+j5))F*5r?*$uk9i1!?JW8KpqScKmn/G7cYeC4dH<]GqYEnY)]S!6C!;f]UB>lP.N4])X@<@u#C[SN?aVI`=rTk5=O\?*:ZB1oQQLQQ:?8R;r*oQK*2^q\m9=XY>,0Yup69,l=>o/OL.-epjtP[)r(Q8SY+Gb&Q];m9V59LW%5-`'$17)TL)'JT+:pRp$IdE;I:8C#"l@"Cs8D\m=0JL!VsiBL0.¬[t!Vb\BqFJuOPF.5()lIW4XCi$2HTck&$d*^5q1,>k5[;,*_[HlADf;)!%`f1orDr09td^!#^ArR]dZEUPe2`EZM0ek@9..ef_WiE'uXAYleZjNpNAS'E"CKC`G#<+S#:JXd[\u-E%AqYhjXB`:k.Olo+2E!`_4u"e^o]ahmR@/>GGn1rYaNr168-]1rz!5LMn_$,A;%kas@)tW1%E&1"0o,95QCY&6psFfG^)bMaRn`G-Vp>X9l+6VDr8*HB.GJ_(9ON;Z(eD(Y)G=DHa(B2b`"GSCU"2O?!Ub5p[:n#;M,&Q!p7h$^M)"=g*1C#[SG(<8P.%FaN2WNrU%)Oo(2H[^3lpDrWW?&zJ5Z(5&'b0>[*fI;$lLjc[^^?N"@&*0S:>^$JP/Kd*FBYo`7Uk`;sWQ^Sm9C'n&Y_LpHJ5[s"O2pPC5jIK]#GT7=9.71NlSWIJ/j4,&r:^%PGiddS`_em98Dqe!'*K"\R=F.JdL'Xh0eeare=HYFFFn_uudIXYU0?;=6*HPt>,6\f,\@q/tW+sJ3H/mLAShE5ZWm_4,H3]fF0W@ODrDf0H1?DU7/!s8X*<=)GHEV/nqN/W]Zj'dfQ(G8P%SiqGolIDr`m!Jd5z!;LBfbhroFB2_'7@I,]9OTCd!mu:1A!j-q:ep2^>YJ/:]>C?:`D#*3u#`VqS"l'=V',`o.c:QdalRuLo3YlkK8JAD+caiN_4"-\rc+236[2&E=!B%U'Et>,IcFHb&_$/Lt=pc_A7`I71!?VIHGp<\Jh7]lQl`'N(5PM@*n(um8Im5_Fo>#nZdF$?M@:B07rZ3+%p@e2SRPZ`R1#WZ#W;cAkqUsRW@U]N*+_OdQreYsUiNU!=.WIEP.MlMS,U5^%t!<<*"!!!!ka7hAL"!C>b7P=3q_*oQ4@D\d]\Ce\SDPZEeL>,K%h;0%b8[?V\4H4FWETa_`H',+n?]NhpS]hco(e`kbb(N%.-[:f:Bj[Vu]-/QMbfKje7$Q4/pW-PJ,e3*I;K@hHsHKFg`/uKG&E'\Z6Q?9]X@,"mAe"VO2=Gi)1"kd0b3pB73g=QmP(:7p/>e3loEMB[eJ"_kHVfs5^W_*^Qq"cK:H7D(fIhg)o^]0mhPEV/mZ>J@),tjOtS2bNH^k&%<4c)N>aZheuW"O;,IW+$0TX,J,&N,U3Ap*g95ktmTmSV4X233fWeq&6AfpOeh(7C4E9gg3d'^uAS"l>:*'%c-\4N*0fG`!Tg;>rc-71cCe.i?CMW8&m/5n)5LT?cC!n:#AuCH@LeX?srUS,bM2@)Rl02>R=a>:<:S0hig_0YfznGU/\%"LZr$eY^T"](^/39@&PgQ1]qYA8?b+$J;4qo@;u5r7^$.3\p*UL7RdUVhuiX(S+OP4^jmAH='&H^0eo@q2`E[5\qe5B`6s.rTbtIjq3(HBFs/q/Rm$T[)]QsI^CY\$PPCW;TL]Qs*W84H`*(8[<7*+%BX8.#;iu\?h\4e[^'8N4]O?j``5]fOLPH*;"F,09f\5&JS"'#IR5Q`QYd1QTFEFboW50:P?tU.tIpOz!!(sCJ\`3(";d06g4\C9%(Le8jkdb%J+rBeP:'/ofWerVil/XG^+M#j/R#M82E'\e`O3([)Dl,8B4j/Nq!_FmAjo3[+$FrBg9k_"?b]W`o=n1AhRn.1oP%WUd[lV`p5$YB%j)M!lMpnb!!!!q;D:'4nBD1SONMH-E'X]`^V3:#*^-5B]5-$$nF5r;j2\dC\i+K`SGtVm',-QfD;#C80H`&'0Hq_#d%Nh;\[ct5TnH7_dLj$9odUuH`5KS74*F"\7>6GL"U,'h)`M[(i5*^acCI%@DUtnW\[a^@-=pb"O^NjBWbTM1'ksY4PuX/'?!LW>4?Yk+r;;/!K,61I]PcQ:SND&pqWk=tc^rD)bKJ5X=7dO9z!'h-(E!?tIUZkKfd8H1NAC3rf6\!!#9h_r(rR_Li5/mp@%tfk4gmAq^b,o2FH1E4D4akM>/T^'unauJ?d%NhWW`?SI"H8>">ISM;md;,1'XVl?`fu^P]6E]n]#c'2p1/i8R3VLU7YngV8c5iLJ:IXiB-Q3HIB2QP"TSN&!!"DL0K90-nDM1*)]@-*T;d8H+3N`DZ5[&1]d"/B$X[a;E'X]`^S%N3]m=hso&YOXKV_>.qYL%L3]^GH=E(T;dg,a'X&gr=5JNI6<=,RgBMY@"VJ9e.`pDV_nsldp()W);$@9k+]%m+J]m,paj!48]$Uqfjt3z!.<*H3!3!#K+#'GU35GTB2"gP-]nAd_lBhS7o/h=E\U"YI*B=,PTP,?!11%fi:c*JF*sl]R'V2>iQV?"hnGVs"W90o3e$IU^gh!>R7mUn30Y`)aPH^ApS9^//g#VO2Kq\Ks)NupUC]mKM+Z""_2C^:@TqXMTJXf\]U<2dT%Qo-]W)Dl-s_[et*S2bN5RPdTq*4^Lp2Q`_;<^ZD(n_s]mgs"!dUIUC5gpo3r1,:[CFRnM7_hSbHF`m*,\[/-/V4!a>[^NV8(nt9GE`K/@D:54OVbWdf>[44T?smAE=;[T+EH,u4Bk^YO>^>o$#u2E>zq"A*7#,$nZ(Zm:G8Olj;5JCRVVFBe#;m^5Wju)dRjMWbsX#+a3V4jU!L?i?5G1WZuPJ=]7ZEgt>BWcYkCBHo8\eAB4/Hkk4qjdT?'XCKP@/75+K0?<'Eq:n5S5mH,ZTL@o)k@\=9`5]fOKS7^?An,>g:$&%NY0Nnb(cQ>;6psFP@U`YMhM2U`']!:J-*L[jIdl:3V+[.Q;cEGYh7I+5L;f&e:S0h!o]X^$qtIS+ZYS-n=g`"p7)BK:J\]XZY[5"hF=oR63I,ps:7O;+cE=+EW85(0Vkg+bKb#7h`%9sLz:ki@s#,!LO(RG$4MH3SO:&8#@4L4!k/=tdN*N*YU=,oKgE21]o^_VQTtcMZYn7^Q]5t[(+aWZ(]7r+cZ8=Bpk\GP"%\>l%WJ/pj=pkIbh8^2)$A1$GB#VZTB=igg/1$'km-IRfD(L#H1gkZY(3FrE;oY.^,(NTSim^WYU(tKBPa=pD6a*pG:N+Bn:>Ta(M)-:m)fY2gtT`+^WQ!)#pO?in_caiL@ru5Smsc`O)ilJ9q4A#+%Q+mi'Ol:3>WqF(RhaHIeMV%Q?3&AV&HaW$3UF5D5EF->`]!\0DJ/p]mD[e.;A2'[?Dq3EcuW/=0J3aRMm+kY#_ZnXf^uX0k47c=HSuc)<`W7;AniehX$f?DE&1Gmrql/AhCS^-!!!#o`aNfjT_*jE1&JC/'uo+,LU>Tq/uMPIZ^TElVYX..)sB@qauE"::A0noZ?d[Z3I(7R5To:AX#i74?dZrVL8cWd2"@eQ6XFOE3[Y%I&X;/E1=18_Zb'?$gb<0(n/>MTor3AHij%:(g;B.a:lq_$(]qs+7H*]6E`7o(!D,'>q`*kq'6M[B3]E1AcdTd*T#$Y]+Z)$O@#oNfME+aE[77Kqd<0A]'96+!*XqSkhQ:?!!!"L1(8dk!+kT?Kj?.t185E1('LsQXkL6b)./D0nM.+lM!?0p4_7,o.h0ZJoSm"e(0=@'$=%0aQLMA.N>c^4H=J,?o@Nhu.En(2UkceU:a41hs`4$0(H)1:B_$6h2Zn_(6]_83terr0NRmp7Z?QaZ_tLMIC3h?jk+hJM#UX])-Xge896L5**NeY7QdmFuj%KF(sk?*^caDXtU<-WA5^"g8M4+Gcd/sJc6IR0qI*?ECaVrZdo:qh=&f"5^,@R;^sOo@cehS+CgG"JBl91_^KUG4;NN/fhT%>:XWVi-IkPEV34Xf\Fr-2Zp9p[\V^C!`N(USB''!5dLFS)38qmiN/T6H_qr:D\A1z!2/hTEsA9_"rB2s^.ff6BPD6BFD3sUr.m(ks/14YT%;H+UZL9W'?Xl*qEMkHV/uD"'t_q12u(^@$-hg@N:n)IE9,>G,.Am?ThKopBMWU4i.6lpq,2i;$A]43'cVL/s]k5NX0k851C=S4=8pTO@Q+M/&12514mG#*W\T.kgDLc3imG#,6kifX&n")R_8g]bL+ZaJo1`$spDV_l]C!oC%qOj[]AS#H'Zt\"Wh7F1>5((A/)=,nXhm[O]jia"._o)$!#64`(!.Y[hSML6l0t7d\4mGmuMA>o](.b:Mp5U0gitNNIG(T\9be+QQSK@Z'+#5`/k2'=ib]NTa]m0r;W*Vg+]uuC>1su):G&:H(@04CQlb-Z7bK%KRP'`+DWJTCA7`36,i%K/gN/;hKF5b]>d$f)mrEk[,lkT+7\54C-q?:H]LCYI.!s!@Ua"J@W)\Uz."TY]!7?E,\))eLc#V]_I".aF(k$o"!T+bfAkubjCYeEk+_Y5-cd47d_WCE[=fBOHA)gBQqkp\R-u1jl&h+=M1\qK8]?R5]B!m>e^7uY?nn'IJWT9gUDY1qWZJ,%i[F.9:%8Q8=Q!6n3[`Kk2qXA2B@!0_ET>%`7ud]W#JY`dRSF*m[fZU1!!&\A6K\aWJdZh%m/t0.'la*Q&2#+L+XeaPa,V0XDJgIUFPo2lX&Q(HUIUBuZY.a`nF>PZ)&X<$QP;]`jQ,C#W$j^2NuU0cH1U1ooB2/Q26(<8T$<]]Z`p[liXVEGRT/VG@.n$jkd[t03u0]kg?0$Ua33(!WW3#!2*jik6q?B$[AW;"2P-UE;]hdLmKc%SiV#:gY7)=d%QF;2.E?ei^D*saKtJEn":+\GC#$O[?+a^cG6*Y&YiXS5^n;q&b+`lZ?EbKJ)dh`iG77dORc'TTY@hql(qRuZcNgU8\9Y[GD*&O63_6\>RPN/W_*\:^re/fjuZg9hk^Gjt@idl2*qi908>'GU39okVJdz!#Th'!$Je%LY=p'>YkIQ07Y5]*?EC:D/aN9ZF$uLh6$=fdF$@Z_a>c7KnY5SM\SjVjQ,BXL^_:I2's*KN_OH>MF5Di`ozJ7=5X)#sdUn5.jEJdX'dq?9]chS+DbqXj$;.p!3#33Z/K3c'Oa@q4OoSN9K;55i9J"-4NgcHOKH]9iRe-nR%<`JYO`JV!^lmA"a=c-=MTaf0:?`cNDD^NZVQT`V&eqS\4(]tM,Rn)&W^g9m8#?`'a!Md:]1!!!"L_M?DS!!F,-:tl5,$S(*2"X'PcT0EPa"`<),Fj-4-9q+%P;`5I3)gC`*H,bd\LCP>NqXc4G%8_5Ph`CrD"NY+/Df9R*4?5G`g=Y%kCMS!2#87aap1"=<%hHh#Id@Ud*A)Hf!<<*"!:gYk1B7\5i1[Ri";b%Qoa=$5aA(?\X/el0<[/h6HHqMDKNJ>@60[XuY@#&YG4"#"K*PJ]?L@1KhQ'_]B$HcEXB:Sm3ma;CW)4d3Vit]0L(/Y4rV+!PpC\,Q`@a4P!!!!ama*rrJD^JMCAU885m:N.!7[<>X?f?H#I+I53FBLJH19b.l-lPSmbBgPrqrHWLUM'SQCHcbR$jAqgY35W1hcULftP27kK]WFqXeK:C9#ni#64`(!;JeBS,m$6Ks&,$Q`N]4+$,6b#!<7knO'KtNE\5ZFR%"TZI8P)K>5s^tuD&PTcGf,7FfrV]\VP`1\F^)(X_=?R+hn=@aFr:>17;?Qe)e$k?f9]2ZD/3okTgAq%iK`WAP_X9WIa%$VzU-RlM_"I$F#F%%S)DogjeEkkpVq;0pNt*0k(`F=dn)%L=JuGFs?+NS';E[1VL(,*qlICejeu`.(p*l`5E;]hdTtYpMEp_R<+!7+`_hQ^@;b&$oBP;)3f[pTR4F"bu%bZpN?:Ak;c@c'eu`DJ-(gblHU`4q=0GpF]-(i<-76aUbKJ,R9NP"].6*,U#64`(!%:8!S,k$(&ebq*o]T^sBR'IMEO!\b+P!Mo?aOL/fVMD[.4H]$RB0i7L)LsK%Ls!Jrr*b,>RmoD!2WS8F>VNmSt;NQp$(f.;]SuSI!IVQK:ecCCi$3*"U$4S;H$L95CS"NjN.iM2Rp<.Fm[nj7ZA=6?5QCYfC"&rQ6\eP[aSJ>@euUlVn6i7,l!J.=Bk!D@TZ!MpKg2%/[4W/Cj5AqVipH.#kN>@;bqEG3XQWK4h4XsL6W1fnN[:4n$*TkS6F8YfQqQJNT"=SPYPEWo$_N#[#\pF&7ET>&]mbIWMn%N;j#,tR*X]i.$^]/c"KF)GGY!$da6psEGL+*3)!!!!_FNslb^N8S`)&X=>c/$F$+2oj*iJ<>IO[paq:S/E7+=57DGON2X]reE=F`__qSXkCcK>fI*QuN!*.,uKq,%NHsLPLYeXfYPPA[=_8\@D>/pk4;cdLZ*^l[FEI0En=VQl+Q0&qBr[[o=i:Mi/7\+=5mnVbcR>h9aNqaN01/P`Am,KY[6g!/-/cMV>OXho(?bRl,!$^1^fcH?C#?QX>4;jjBhn@[@Rt<(T_UHhd*hT7?jNCtURYa#7kmS-q8X>?a0M3kDr8Dr88l0JG1(+[PJ3!WW3#5TrDU%"K7Bs8IG%%NW]Y040TL-2@,sPGY5>iPUGi/k@EWqpWU+Vb34(;Q80fam%NeCLWX/aPlt!!-sisQl$AGY^#\I7n6':6UM:l%1%e[)]m^2rItfOZL8p@e3_Y-)6#U/X]W9CqcHCYcQZh6Ykig="gR[r:0B/lY]aoa:a,,!A(P,UC=Ka2cld\RNO8<,IpS?f'2XdG*D;0JG1<2-&uE!gHkn\A?/'Kq#\?7n8?+ZT6_'^[^ja@M][X!!!">LX$b;[;tM-ZjmL[,`V'UJC`F>cjGZa4_L8sM4i1^jg&\bVn^PEWs<+@'Y\k&-:&A0)d5FP`FRRGk%Qz,m?>B!7]%rJ,Nqd@*l;sf.o)kmJ6A:l-?R#bRm\LSiqEYC!n7o6UMM#Pe^93LdXX!aCI'+@B*>.7b9)+D/EK]>>J$jIt.Jr)63p;2j'5b7un]s]QisB5Q+QfAke+M6>*$TOcb9KK<)&RYHMk`E,\]QP1[_VzFNslb$QgH4WDkp%m+>2uNfBRijCCD:]fg`9Lg?*?N_RQ%D/HDMUZ:@n&f)60G)6P2Y$V0*%%]Y2\pO2>&L0cpW)80N)B9_:k0KZLn`!"8U&gp3I/a%(,UA'?BnNCa.@lEdR[W"c8qDPELc#/4!!%fVSML8?92A?-GB]BE,[Oe`@[Eq$Fme%QmL$oc7@B7+RS%ecF;mtF)VpeXqtl:WU4U8T$NQ(;X&lLumFsRClrY2G)\!5cI=;(_^]/cYo&[^(_.Def!o"#'>IMbub"D"uPT^n^)?0X7NfK-A)rA5Qo+F4H1Tk'b+JLf5hY?pB;(YbTC/o/3#&eGKOH:$4$kH1)1,C_Y4F(u:i5+[,Vg%FUaiMPZrQ(pKbEe>=:&=h_hs%mbQOs2t!2.h.k6ulsioB&>*#pG/XEaF'0P47S=H*OTHQ*I;s_p5PV!aj)35h%g:)!mLPJC#r!'oe"c5?Ve4FR(5G4"!A2E#X^,^*ITJqO>8:@16QOg%1EZ(N/ZuBldr>Z/l<\Jq?6k6L^Q&DTiruu/Ef*j6q'P$>r7);-m^2$qXs/<5!FT(%q[Vq80j@Ep$.MV3V(d/Iglo!7g'A'!!&Z7coD1NMP-Ub1Gc@4Y@#%n?b_%)].Dt5naWSTTgF'O]%@08lV^VYA27/g(,o!'gj@c5D.Ak2YJHPtF2%4>>_=F8u5f\sj'6#nacln/qQGT3J[9U!>GXj8&oZ,uK&;4F\\k;c?UQDUS.>cc%LT5ah?@n`/H;GE3e.\o-?8FDbi-Bshg4G4+.rkK]Vk8kK`.F8u:@!,;k31B>B@4["51KF+*9R[Z6S(:u,4,Vq7*_STd4W`ulq'@@7MHr&h1+bCBQHhl/%hDlK>DYbBV56UV4?Yh0!Wql'@fQK/!'YMM!#1L?T0NANj,\qLL?_"W9_&#UkF]A0m4*9.5`(;Q#WC_LZ*?#HM2mT3]0uZ(f.R+P23O/e!s/Nd4[$?I9Ete-Df>*+O:]Vo$QuU>Ql,O4UBV/GY[96FoE5-o!8sMk#+uf$7n5LVhV>ubK$H?\bG(#Gq;iCp"+ui&PX8Ve7RkCo9:,/8Z9n*Lh7J@K(Rgb[l07HC]"1@!7#5-Cs1n:8!(nPP1]6t$DhA9*Y#MB`L5(GZV<*LF,PLT`*u>_@G0p<4\sG'Wb+5-ALC^<31H%-lm%OL\!!%fWSML77/Mo;kC=T1joYhTPkKfdL%GKpeQO@f$aiVZ3bbn7/(?.*m\>5prX]r9cW)5oT95DV1+ntH_(UlM\Hi6k*;i+j>FY5$A'Y:NQ0Q1lJ7n6'T?!XF/ap)Ga$k+]Lmn;j@HM[0l7saX)=0DtE8Beo ,R;W&i8,>IVi#bhBLBlf7$so&\&Ap[/bn@A$<9aN1#taGL]_3d0kgXfX1;86WB60k\e%i8A"eWWiG'!+cLh$NNUF+<\JPfXQ"cc?+PA'[,\61kp[:]RB[c.+V9)C=K2eE8eZ#>TeV+7>/q\ChmfZ]@YHXn_1Bd@[/2\f<;f1n%O/C:?fOC\^MV9"TV(e9K[@VaI"\l/1iHQqR*c?*]IuldA'3iB0mRq#qfJsHoWc1NLqC?\DZB+Z=qW0pAE:26SiB#/)b7C8e`2KnFh#7$#N>TeV+74fW)TP`Gl[$0a,UO2:c+*KWIf<:-l$o9]Ga,_;mrNA8+g*=*-!.8Eu[-b6dBEPfe'QQh/#8_'/^OH-M>L]QHT.XKbN&gY?7:9MrPEV1u,&,K$M+f7+LLicukY^_:+5toq4DSkZ87<`&OkkR:2?!XZrah.V+]+ug_>4OF7.r#:N+!gjU/,DT<9BJOAe0)mR@1)A`D_/r;?Jk-8[G3ThCu:N=E;\rVc[&G7LB!L#Bh7041[;IIZW0QC\_t?2B@!_d]1,k:Wp@0q0NFBS7]Mt2kfiVZbIMtcp[@!<#-*RBJdZ:,BjkFYNupUK`hf@E7J5rr(G&[-l!J7/,]6oXnaWu0C)HHlV77Lq]V7cOSY!j@`cMtQB[D9I%A#\-,'LKs!!!!+)1i4rKe>5?FkEp,>$>)kG3n.b2f79U?b_'IIJ7$ZG3pne\.B]&:+=_nqmFoP9CMdo/&.lXKdnMmZUp+j)\=U^ZM\h^1=0?Gs\fEkUFEM^XedX5?Z*CPHM<*a>POuM7p[5C'X]r93/XeP4(M'LO,m)NkL"bJi'F\]bq(Ful-sD%\8c%i,UEX"#LeH4]6+l05f^X*.,@,g.)i-:$4.%/o(')o[AAe\JUrB9PEW2RY?^!ChtY"kWe/B[02Ij,V+R!m*?F%PJ$1&e+'^dOoI*_2<;Y(;.$4morr2f`<*QD9@"(L/qClki`o<9_r5/tG;2E'C&FlV%A="[*Zd\I27S187gb5o\nP`ukshi8U4MOG)uH;^Ml=tC6t&Rq(7!!!"lE$2Xj:q/]:ps?!=VfLnASN:mcmU('og7h#o`5KTqlk*FbAp3%DH0h#IFN7[tEoj*mUcWeg(`F_+1G1c($e8=<;[1p\ORKZd64+mFi(NQnY4+Pq#`b<3'&ZlK!j>0BQdB3pq=*H1U01c'iY:qtBFSm^qpeUpFk/^juTe9&tFjTfT]VGX9ZuT#?M/nl$jiVG/"I7I/O,A&3j>4*K,T=d,mr.DNU25)\U(#VJs8bgL2qdJd"V*.Ymm#QM>UkJiK#7kGBK:!N+^]C4Xl+&,Z6!!"F@&6o2`/2qM(XB`;Vj2R("R^J.CS`pWQ4hl1-)Vm/mr,7geQ/+[8Eofp)M/LhAOj]q)B_eJ[\DZiE:]'5+ZY,giFYYg3[Ca25\[='(`k15\G?/#)'rDR&ISK%=#M5`b\7.[TI^HY$Y+f9;+4o&@cHb@/2rX2(L5V)G:u1jTQic#-iNr:p\"2j/#)>hQ[u/G(0jtMC`.)V>W'\/QW"K$i.AqG:S4N,>kN+;$=-7r$FP?II+6`u2DR%.EH.Zf"bKkW!!#j$+LhDJ./s5CDn6,OiJ/N-W$t@/3ud(lJ$5iNq;B'km_A!j8YD<[2/M4(T=0?Kk8P)LYZ*Eq`h7S#sV49c"T(9+hlRNDsjE(UR\U!,KJXk;S`B0?*>%:mb9d/[]J+KZ/ZsN0U*qSR@V]rD/8qRL3Pr#I$sCRIei)l1M>"[/[L.b"^@jZLI\+/NK,&C\nB>1\kQ3D>SoYPpl@Z=(_@6tldi24gtX+'\om<[4aIq_)=?.clbnVnj2R)-e'm=^(TLQ?rp-c&qYBs7:)G]pKSjl^i'LKcF>E)&FVbaDsTBt8*8[_MkAHcV9lrr2n]8/J8Z[;-jDE+&.k]iD+6jX0+d)I-*b"skTC)Aj<=q!^Sg>55"YdP^1[g_=eCo=$k8/l#b\J)S7u[/:XhEokG@j_S^J9@X_89TU7^H:miOZVWrl819+OBM2HDX%mMj+F2ES:N>jg:M2@qu-;Bs,o[?T8+0JeTb08(g+'_XTTMqs``FC3f("KEj[pQn!<3n/ZZGbDJQj"9]1,A'Nd%sC%6\c0!Wb9VIac.j,P:7=!g,UB0qa,ZcVJ#7.&,DqWk>uHM)cthl9[,q@jnh*-1?7p@IlsEH17#^H^+$(Y!F8j4^GQo0PI$jo6H7f%n.Ao&cl.ctt^@PXDH?IT-6!_*GSNVkAFp59_?`fD3;R27GYFR7X7W\Cc"^7\8l30E+@MMmC^11^g+QeDl??b5QBNB?b^aLeo[Ykg*BH#uk"NaGh7.HWl;H0U!@TjJHrB:>=gM^VhWJ1VG,;"1Lg;D/!!!#\&6o4V2eqLd)Djud=-rdj584[brj2,.'`TKR-,X!:'cfAZXF0j7XQ(*bFRIqp/mZ'8Ve0jcs4:V-EO,l1Q14+kL_1l_Y$IO3[/^2k&`:Xdoj"h'kVHZ!,g].mGd-"WN"RT@7-GVQB0Q7)iPUF[Q_h(brql/>%NVR:/iSAJY3CS22f<;BBKUP/5jX(fEJod7A0H]meZ8TDqW?LEL$KNT5k3l))(J[gLaW?jnY=hMDf9Q(@q.;N1O=Z;ScJfk5Xah+!>(:ZVPR1iLPJC6VkA`KV5L5\R$_^H]NOTQJ2j9tU?EA/>Z^G5(3;$m43?/5YTLr5PO[:d*pIE>.(AkO&'e:Z=4k[^An8`!S,hY1'!+V1,?.Jc^o7PN?:Cae#,uN(C'p?!6Q:'c2cqjoB4Fp:/6+]H@Pk_LY-/e'/j^]<1uX44O*7$V:(8<03F%(8sLki5!F#YET?m!!2*BRU't!i#6kBA&g`';E:Df%b*=J]=]lb*E^]9"!!!!afn.Ke!7fr=H"1W*CMIU1mFjG&b>MAoKnX5SB\^7G;s]*d>)8#lnauJ'f@Mr?2u!%>k!BKdIK9GIVhg.bA]pAsB[D:4ju$r*>d.VP_hScA/egQ"p[R96C)9Ge&f2?#bRFdW!!'tBSML6qKS>+[X]i,5X]eMl4;#1VAOpEFVPU-Nb*=Kr/dSD@=]4P<_!!(Lg[A1CI]P>rpTqS1-TKr[+*Z5hEG+en.1Ojn(',-Slc'pqEp.XhY!!!!aR=NR#J=N,oJ)8i1\8C!/EH,u-Q_hnD11Z39USHJ>[3ecQWL_M6N/S1MMc3*YGk"*f6fZUk94A\?eCXNfkA>'Q.o`HTC2-B(m)P//`@_`&!!r/[djLPWk2bU!V57a>D!^0@ipZ@9mFsS)b6:_BG^Fed*R1HUS&?ob!!!"`AdC!hn>3"ZdN,KfVWP=(gVb^;=]_qAc2$toMd6Zd?gRX^rr)]t$PjQu)k34^/7,tKJ%oIfo&\&Y-Vs0e]c."Q!!O#O(A@=\97`4Wkih7'ldsnEfkG,5=BSd$Rl9ZZSNHYG`bBQK?G)q2MnSc`7=psVe52k$8mY;Q'e<B[J";'9e:g/$<-f;W-ATFEFm^TAP5($iUA2!".80#ntmm?$lSKH%D_34aQa6iPL;VC=UbZd'0pch6q0iOPch\_J'al,$LPi>7==JW6oY\n6p(I#W]#S2/Cc6,a*cb%gmdo!!!"LE!S&r0X"iuDVDIsV5<:U>IVO'$iJ&=6\i%UZkXNK)c*FXt.RrquR^NZ8?5$iB_h,=^_o!%>A>,^[Pk6NqTW%fOdm8KlUdF6PP%Lt,>637,e5hUhK!W]cTn(r9GIFkDpUDGRiLg:ek?ZC(*;Q9<`n`+'p"OpCGf<=uEGY_+2I=6N)WI9/A;GpEfs%Q-Zqs1H#gt^[#/Qri,)QL0j$31&57<3G>fs>.&+Z^:n\nSb;GI)sEs+GjuuTCBjhf*XN,ZHhQeD5CWOXUIXnodL?]tVomf=bY0LO3]T3k4*Q]#6AqQAijXnDQ;KGm)Dfm=TnX"6DfX)uk=`L7p"HfhLYleI!!#:C6>utJ\6j^\78$9hjN*HM^@hZJD!KNLN>jel]+gp8KNu8u]Qc_fkT$d5^])64)e[Kg4b*J/[r:.>:C.%%J91\cFZ27g*BSH*UW&LgS@j(7?<^W<%1NbfF7Y(n(CD6s$(r!--4MhKk005;.="/[^Pn'6\j;e\pHJdqD;g>#"JC\.lB2,`JPCJDJoFMpQnDrX]r:.p\-?+iW0%0U8LeZ;JggRkg@&WOl#*_lMB_l,C9@cp$9/0kF.g,;+#6RY[MgGblOL08PW#e]QitpV+]q4R8Re8J,rZN9m+Sit*CsJIF9r9].cN48BHBBem,d?ZX]m`DCr*s(9!cLU`>KR4;MJMkHHFDK>G;kqjrZg:SG`kX<[[AgqtKRRo^nsP%NRSe+)?OmmeZVBj2[5,;ac-kdp)$qr5@[WjB]B@2/1KlNhu1"]3i:"\Ze_19U7>=:0U4m;7CFK0*Squ\obV9gbnNS\*q1f$\c2d&/R3EW2W,nSm6>7c#7K;:5<(/PR7Bj!6P?G(SIjdLkq^N\*DMELPLYC>o$6h,9u6oSNCW=Y3jfBS"?2mh/;QBkXZs3ek:2KbSdYn#\lZ`p$;/.a-8/41mFUL'GT'-F([P(*$$'ghS!-(AH\-4fW[YG>FRh?SiqEMbqNeU*3*J!eY5J?R7rph\6i5(&qY"!pJTPu2&,i$+^qoY0S!<<*G5u:D)UIU@PAKio5(SFG.%LtBU2fIBT-&1qk>>LhQ0f:hbgKn`6D5gL7T`DtS!@-\%Q'%36ABBud>IGsYn#96`RPo#_WMqmme>S]e?PYpF6"ComD!9T\CXoFbPu\nI5CT\9Yp+VmV)Yt]Cn$LD!oup^@cHIjP6HtC8(g!e4?e2iUcKG8j=W&;e8f6TYb=`;bK%!;,#T"X=LiIKOL]]/AFJBgkKfbRgh!K;6UO3G#7%M,;,!q)ZY7`1CAd.]ZZklpFmIVt`971)(D.7aIf9+lrVG1K!0fbBp@dOdNB;+;5XC,u6uW1LN[%&Skj.PYldh&5BuM\4W%rP_=A;La`NTDBC;qiV!YTPPqWFK#>[:WF@q0T&OI;O$kN>pQAka9d*EnnhS59i8fWa>T++N(WFXpH4FOMW3haNG=%3Ic]l-cE)34Me$RucJ/jOMqiB.$EBPa%E.3ZDY'Cm8)\@RELMLCG3"V572*H?D:DKa^8N%[7/6G4"!Pl!bC,e0n83"_u%RZ\KG`\`T^M["3eElIDqnTi;#ge]X:4VbWdtCMV\6Dr6Nn2[0Ehd5d#M*<;<M,J\Lo?`/WI&==BLe<=3f:D'Cj+@KCuCFUnh*q=\0m%qtKQ#s.WP:,V1gUh[5dP"cgI/%[Xp?f6>SND$ZHhL.t@P]erc_!G:B$D6?l0dub++9\K=!Jn5\Y322NnJA)c!lj@:c-X?^Z.B,+t6gsg9k]F%l\f184X#_d)VqaeRW5%i^>kZ<_\hcIi(NrWt#IDUAntDCXZ_-E\:\23.E#H#t""sJKY-L+m$n60D+/@!0dY/=kUH5F.5()"qDVD<=Q@k`%DW%5_2b4:F;9Jkg4nK+"ps5R+Jel\,`@3H@#F`8WtD4#rSEq/dhr-iPGb9Op+$tI=8AY#3mDalW6D>_YEZ]n(kT'E.MB1I.?q(2DR%f<2l%ANt2;SV#]geV^Lf^YGV_<:@^U";`38mbPM,Y$J(h%qVDMq--%RJ92jsl023M>*WiFFoE*X$SKLpkY,X&@W6nh:sLq6f(A1RA&aHFmG#+JQ`F/hb5+',?uBjWVrt^bTk[1EWW*d;'X[R-3-E8o$l=e_J'kJ49?iY&qcThHR5"?cs/t9\2]6E^Aj%%23#%,,oX^8\%?-%ns;uia$22%q(7l;GiW[2YN*rph];#NkC,s+3#/R,[E.;Xn"!gIS0^3o1qWu'Rs*B\RCm'8n5\@T7dBkbZm(Taa@`@_t*Md3Gm2fIQKUF<ang'Q2ChudjZMklT:.6Ee/M2r;W/.)Q60FAcLBlApeZ)WE"'[nja$P@c9V4Ls.-HO,1Y>@382Y;?=C5F-]@\]^pqI&B.?c,Tjq^UT"4\+k%NJlS.Q<<9?soWq,&,f?/U)We[7FPofs>=tQde3s$Bo3e.P4;e3l01iY[b_6gfsL@hbS/.4ErQh,*k!*k"O`\,HHb4Mj0M*Kk`Ya"AT"na,-[j-Mmf^!!kl5Bs1jVqY':q'br$<=TAGZ`:;m.>ISKE/M?#>bX$1K9!PjDhqHc:R@9SmI?<)mJNT\HcYD"1ai,'b2fC$/n]Y2"X%N.HX3'CWXDB1Y@JR%Yi>[3erVInr4Q2,ErVb`p_*_/^j0#cJqf[A32Hhm'`2i0q#X&^f)jn%Z]r#Z\\]$$-U&+Z`e'b*eRDPfmm+IT2Y)"uC760VL8mD/JGMhrbcf<',q8!4Xq[gRIaN>RoL2'o&+g^rM^3iKi-sOO>'bqH@HLtlc<7J$SGQ7[@6>!k^:-s\(@T[jN_hSc5'G_7U;iJDKO,l4R0]9F,.&*&CY%RdFG1@jg9k^:K-PO-hHfJ7J\&qqqR't^SkY\4'kA&QTqTcWcE'P.eu`-[=VQ[Dhn,JIQrpV&74g*nYcofS92"[TQ0V_jGjuukXBrS$s80\A(+c,sEokG`9/\[d[^3=#YDWi)_G?l7E,0*EV&#M)#oba:7-W3GitcEKDm-YoR@0Icldhm6I/Nao/,KBLTgFH<-O7cfk,TonKaS\21U,L=(L.NW%hW&sXR*G3RC2,0>iALPLUN1N4]3dg^A9hilEc'k1`F/H/W>B%G,FCs@n?bUpH;ER**.>=DCc-;5GfFUDaBkc/LeoESEjqM(Y!hE#2H9.VN<,]k6=&,2@M))8A^Ku/I'_>.\+dG[q+ioZa3uT"UnlJO'(+rk5Y=Y`pX\-bC#mh3Xl7s2]fXPpr9I:F?q;fY][&\o)!=_lF;4Zt2i\FoW!6i^m!+c2=VV8Ck_gY+J.g-Z]<4[>E@YG.(>.8DJmbKt0b5qk,mdAC!GX58,'*H,R-eI\9cCI%@m+>2)'qIR=hTjDA.[:J_2N0jQ%B)L?mlFUaGVL.CX_5tO>b]['oiebe:6qSHQS/49An5H!#pL0j:q[AO>_&pBW#8Uq>Xu%CqA3]ko\o$U5()S\ln"8ikaYYXp>Vl)\=f'q>X5PUrRnMiF@rk-A&r2dG4"#F\e)iFXPAC8glJ@d'M1"ieJQf=j"FFc\3QNKX&`D`E)St/=`kSj/l:S`RR"a]e,J<5(B?_"\T?s5nA>bsc%5KrZA0_B_(SLErj,ZFso^mV/kpO%1?U77Om>;f>C9[JbY-'C,TNru+EkQq,2J8_bMjhR`Z.,dRMs?U2ZY$I\O+[:mlWpD!N_O7"*$!0Kb4VpXa2_t1C,Tn\:i9.[ZJs1[S(HR">HF*T[AH&K4=G4BlIB/!R58J(A_t(F79J=h5kXO(`J_9nl07I#md@G*r(E!14A%'j\s/GDl-lPk*BR;>H?t-(3NlQGio\LT_V_)*T4?'1/PAJrI%HS(N@OqU(=,9;-T0^W.Q.n#+LhEJN/s#1h'^YD7GUG^Km^L]rOPrXV7Rch*M%eh)5*3CcJSbfQBjuJ1cI@s=L"U0[s'!Ue,`!+Y'6G,3d$<%,KNb@UTpl#/#=4IG)T(NMMeE5WR@(a>I]p1"rFS09pE;,feO"j$(Z,E/nAOCAWH=?CtOi=b!EH5D18YL*&qm[^#Y6b_7mq5T?oUMI>He_0Hp];R"0^;`f1pQCMVCV@U`f(FBpAp#VOJ@j2$?Q\X*AM$c0ZqXLb?/ViG5M=EndNpk6qH*aJL#O$Dh[e##k";X!N8g9ote+!G1FFgGXj&)]pDn"WC6AsIQ8B`HFfk3VG>7-+Ftl)4[]q<+BJ:7\CGRps-Vb4GE@9r"K*Mp##m,m3@FX[c/6Vr@!gTjH.fRj3cU%@*rHi:Qjk?k&DuiQ?\n)^CIQZGanG@^.FJ)i2/M/QR<%?KO#%^s-#8`cRT0I[JH0OSXTCmbCr46_d_d?M$?<2O;eU7V9Sp&Tfnph7GW%f?i?5M2;Pp(9u2S(.C6+F`jggXm&DF6j2=)d1aZ0UIG]=o'4c+.p&n#'3Zqk409n]q^YddL(0>;,da]l1M1arg6Lq[2`EZR9T\%='k_O2b+AQ47n8=MS*T"b"ke:RjWkp3HuO%DTZ!IOqM?tLkg3c/jN4e)2/Cd=L"s:a0@tVCc!]*'fXPp2[LWOkYYa&0*aHe/DEr*s^>6ZC_T9f3eZ)Wg+#mT@Ho\TBl&;QF\$"^%5aI_%/@[rf$b`>uP]P]oH0cpDPX=OXV9fk93a:=HD+j,6_ZN)MplN7P,=dd8/XE!O'lVp>F]:6G/Mf9("qMbKcflL7<>RuZUmQp;:fLq$4i8`t\hBp.FB-lBetsg]/mVqehRIPM?#dhn@c)Ij[r,_4aM4rSiuDhWDaSH(m'gPcf)csWE,A_M$a5:-Vp>0MC@'t4;IhOe.=+P!fH%;rVNs9WadYJnmq^nY+oc#s8MuKY$J+#bG%G4POfAk:cB]$+'tV'[8A6N[!F^_rp&%77C3iO2qE8n;:3#$a1BH]7un^.gU:tpo&[K,mGc.[cMBI,^u9kQ*%nb:@DN*o4?T,L]560+*BSGC=KKs/!Z7pPEV3o6Zth"d'RLcC0QR$$@kI<5/@Ebp$:3\E87EkVn70A(?_[u$;:BP5<_7p"pP;#hnLh%+p!p5naZ-$>IM1bj[u[9=hhH$>f21!&#L9f/eGhp"5C1s1Le9.\Wl'jLG-`WIf9,WIJ^Hig\04#>MR*ASNHTEpYQK#2JhEnNJeQ(C=fWEW)9bEAo?+Q7((T;T!NZC3.p8mc>P+8%9Kq'i*Jr7CCL#h4]\nTWj[;Xr/FX0;p:0),]Y$J/5[@/sgf&k5HkK]VkqeG]_amISM6d%U(DE##[?4B^?7,V#LYS_`r&dl2*q0P8Oreu`0Ja!4;L8>&bNhDKB:9U9,5Siq?./j+U\\6HF[r3-5SLW[&EiBe^,:pG)oHg+(upJ.8?Q/:ihk!m=b%njm(+Cq6H(TC5SYJBb7i2%0u,.8k5agc*LT\'V/8io1X__H^02V=I#NNJ]H.gc-#d&6saKmf*1^#tc3;sI17JCKCXLHB79qiF+NrhL;;fI96c(.f`F`DC5E?YU;r5i=C-S[@'aN/&^g9j@H,_2'Dm+J_I>.)Lq1=Ie.Id`782mVBg(G/f9(UiY^Yp7"JOJVG6)"I.dZr0t,="_CF%3+LWf73edfs](]a!:Im7FT#ZU,H!&k]tHT//';sZmFA6Rf@(ZW)JYa9i7F@\NH=:.F`qs-nDQ`#no36aUHQCZ%,\dI;k6k.:?MHOq(jUMh7@`6b(U3>BK=j@'uM6WZraRJ5"DVA.Ar`-*B3Etm=_H;Vt/^t,S,fTn@q]9;RlP@B?ckkpNr!u9:)s?P1(IKo_@t:@Ddh>0>k]F*?6%gN>fd\F-15m<9tSc1+Ac3@CVi>G3r0jnqVAc-.>9rLD@-5n;"[G%4V:XQFm9[+9lV'c%Y>'bU7FAiNgddi\o_B@YDR#/J,q6=#OMC8'9Al7m,"=-&(-;d7fa^.0=[+/h/8@sA/5prjiWk[o(!E6!s0Uld%Ngr2fCm*o&RrY/+_M]!2Y3l"rFSN^W*g.mp9dFCL^l7[;4BkV59#H%"N`HGPfG:h7Z:;)S(=;(naRUZ=V4pJHLVe<&u$bBP=?X]m]A+^%ljW8qRLW]6<;6o]t,47un_HbM_=:#7hmF1Q32-k(b%-OBW"j/Y"=mY#)t04c1:%*c`J5;%*!>R54oQnirQ,AnTJ`5q4qeL#h3&]5HrcXj55;oOPt#)**,37efa@qtT\kbEaa9gt]VmrQ8$PIJ_$f-WLBfPj[)'*.ePC7ulZn\UF?5,u0g]6!ta7<;L/$5K%gBng.jTIEqBQnTK)!<$ZpI(GB+U27PopiB%!K@q3,pn(t*H0.mm%CGE=^TX]'qHRYM82+^M:D;W'UgU:sac?pmJUP'>\i4G?1/f!PZ@?ib&'e.t&=kREgQ%<-@G7`oJdTfQN'd=kIq*>HY#VJBa[;4AHD/F,NPuNF_M@G.FGi0b7;(@2+ba0ti]Y2#%QS2^B8ekMeDU5"Q:s5JKd-/j9%s8@Y3iHn7JY?7qrquTgqYKmNf4UlT"/rt^[soG_Hq95RJK9[LA]1<3Mqm.EL#c4emnG-(S4MoDrr-/[dbo_8M[Mb'1/K/Z,rR[TjN3T@R>d]srVQ>uZa8]LDG^>k_hT`X/2K)G1:M2Z4u"dS?:I=NFR%@).4Ij07Od'$E?d&0FjrZI*^4Jnd9?e`(dQD[cCCjj^*%eNb;jb4=N>7Lk09Z*;7S+U46HDFXI+WD`'8-RnagifYV*t,-V\ZR?Y4it`/#_f?Zonf=CeJPZ`TV.sJ15Oe##KR,c$C=:/oN1_IIKlOY-V60PVY6@-GmoDZ/5[3\OgP&A'n%\L:#GVd6oXCrC,i?tR`V4_rV"+ZXW/pKkLW0r8gC[Z*pW)I/@sOUEeC>e-$c/;=ZW^4-$,0"=0)jnHP@/qe<@n6sJPB?qW"SdcVs#h^CjF;%026>jTS042HkqWk?\af^W_.Le#Oc2Gn5[^k:_jI1ks&,5JGf2nB!N"":Dc2A?.U%H"C\\PmulI;g,p@eOao++&Kf4(]23D02*Zi1Cd./iGCOGslNUk8'lS@2'F\5;\C$=$G7K+#5m<5j]e6=sgVAI\tOa=2b11tht`91_\m11Z3,QBirTL,hP=!=q9q5"^6BJ[p!n*joEiA*G>2s#gnn!8s)thu_s-mr)]G@q]Q>jlNnFQa:&P1SUnlhVY]DB/\'Q.)U)'-:CL8P/0pV+^RNh;>kjj5Ak2Ap2J#M\e%p&mi;"ae_g>dABX-]]N':\*N&5i`N\QS2kX)#D<]!PPO4uj8$0VZl?!-V#4KWUIUBThu`9rqQJ=UBB1HM0(:5DaSL*S*k?9;<93lIku5ck/JWoN=0GpnG3i=3G#u66QordDd3OonmkoO6bHg*3q4tMkYN=o-bK(%Qd[YoW!(05-j>nL:sgos>VdbVNZF+^:YQ]UN*F$1+7UR^MmS]g94C=Qu&aOQ%V+6`>G?bZI&e#1/;bC;fs!=q9q50?E8JI)SfB[ismh5>UEGgPPYgqj$kW1+D6>fb&/3l&q^92A?eDV_lRDQa&Y:I=nZa8G[0j31XN5pr!4+$\&MQOL7miH>bbaC9_hh>CGDB1r\+=*"GMS&<4]6A]#p8,^.*Aip@-S2;m`%s#7du)naZ/AP"h&:kg:V:41g0!"ST%3"rF3`+X&![-)V'?m;5'4TaGLZZF?Y-L1`aeFHr+\eW`PYTM4bc=$W%Jl\ohfBZtXQ;Ocbe!lIE5L[cSod=!-]@>hH^_9p^kR.TWXFWMs`4_7F^.nQXVcb2ld3+J`@_YNjYS26uW'p,1I@NZPo5K814Kft3P>fcbcR\WQ@.[c`oqY9j49hq8=<;u*9jhpk::a#\-F)DrFq/EF\8fNI)>;ps)n329s:s/M!gOk-2jVFS4l@HIT\CRcddp#.+6fn;9.CRpd]Qo^i#'TIlh,YDBi'9gS3Ubh$@A]QPUrCSN<#oONQ@hF6D)S=**8_:In"n4aJqrQoT47*=oNU[;4CB9A3[YS0q+(Y\`s7+[_"FZqkSq\jcLuIJ`_[#k(J3`mn$[gXcAE>('dfb&?9'9O:sn`";d`LTd.-W*HlRP9s"WcT+mne0MQ.EQp"t$J$-qXcchH/aHoV4KFd&b@SabE.OdZXhSEGs3"=a<&M>JqRo/\&TDq!`iP9QYE"ld`%[o&N@W3JGe-"oqKJQ,MS^F7e\DW`?*#XB9JoY$FZ_s#P/Z`;0#fMn`X""`42A"9_P"NU*/;.-#sc(ZbMjl`Z'R*P-OfAm/@VQ]:YCEk($/L[/I2YWg(.lm^Qbr;>cQ6am\bM2>lkSn/eLhuY:(H&_"3Rl>*3.)kh;N"!:rWLh>)euQ7UXIQMT289fBhgjd(eqaS1s-Bh`FE.R\5X4XJ1T4?He4koSkc_j3;\T29-Sim;h*fPu6iibdA*p3:ikD'QiVHnN7fJ1>d0PYi;^ODa1^4603[OjRbmUV#[[E5NQQCi'R]W^59C88>2_!kp>kYt]BS,NnDOIB<-f,<\r3k73tYFWDuiQN\j/e3&o,uiV,FnKAS'c8)&O34mFmj&H()h.SFeWhg6,>MuDH^7%aA[':VnPgVbMCp:QS5r%\7%UZ2aZA#c%e\d/Y(B&;bNsTVOM`f$r4+]&=ZrZ>82r@q,m`D7uL0',:%B>;aW3E.L0""Cs%X?OISc5jsShV5I^:@ujeV[%WJ>$AN0C!*9qG%T7,jj9sB%m)[u:`urtQDI6@C2.MS`qJ$6f@O+($bAA%(Ns^mVEJO'>$WboIbdb`mQ'[)i`ca9\59YXHS2.3X.bcpO)Aon4#VOq03&F=e?JrHEh`WbX4'r9/Pb+bl/f4)\,U*jDmTgS>.URGX7klH-/4j5Xd$uTZeJ.]o@c5d#0',tldtIhmWr!D1F&e,r67/p?f.ejI7Gp/_t?f/bPu5D4M[CX^,@$'LX:rW`.BBCLbo:2-n&(\";Pa'M?VVg"VD:\.j@NjJo,^KCKnEOC[[.oU989;gKN/[l?D7d]`2ac+f#^rqn/!Pc96C6bTqiq^YB^lrX40=8PmjhUFTJ&W;d2Q8KG&3oD$'BS?g;Z1"ajgJkfrF9)cPQ@>JGh8OS^fJ&AZjZTre6Y9GBe46)Vd\,`t9Df97A=SXUC@3]%Po_Iq8o()AJp$3P7)kmr:/VX#lkOWp\4$1'&qt=m][Z1,D(!rT>8I)8iMa7]Ri.:n"Dq%N!RBdsL`N0k\e%NZC4LhnNOKl"I0,Dr89:_#eh)p[6kL'l#oEMfq[*IMNm&UbD:6Lh-D]moQ/XhaA^XE]Ll+_J91fu4d+5)'n`WH.(`?LkBkcnu)NtlQf=R*0Q56`,EpA2*_CZZD>*>XXe!-g14Q%#!)7ZJHljW0Y"`o.Ei>Nt`S^#J`4Bs#MaLp<_.Y!^->Ti_%c'p.\VJnL74$,M@'5qf-#(o4Umf`q$j7chV.$S=:1Z/>.WiE)'YV9p2D,XA3lM"iIF2C^;rM8`F:u@@Ls7tiqLC]]:QJ'sEnk'4BWk5:sE+/4l^$pc\I/3>OE4/o;g:i!I^_6LL`Lp`W%^2U\Duiso7,13`495hDhVR,Mc/rah21Z-s"&3IT"ld/@?"9`iapVYq5aLWe&K>$:-_^41Lr./&(eCGT88>(VR=VjW'!S%e`7Y[35WhUmd8Zj/-tYbRk%]8KTg]sOTTK/:qoN0\UmVg>AW=h*m74VXcNf)HH,-aWPL$a<;n@9\0.I![r6KXg6K_=&O3:kk]D,C8rBXT6_R=)"\P!:!hlj&0G5$4dam"#e'eu@T-+K;#g)3"cZe8pkN(\LQ[DW.3j#t'(JlLo8hNH?J>t+\Fm>4,gmZ$NB(>E]+$Y3RFdf&$-?*De[-P<7`a@%f1;,g1Ktm%N\<_)b!#a-3)5^*;+Fm)jY`^s::;uB2U0(*lT21XB6eH`;^i,;]*C+mh6Oma5mSQBq7B=n`aA2K8uB[*8,\2Bm5_)?8O.+'R;%_G^Gsj:M-3oo^mQ_Gn$1f4MP(7-;h0:S&U&h'OPoaZ)p58q7;%qlbZO4hAm8jpP(_&M=@Th7In(ldmNXR\:)F''IT5YNkIN-ko9NdP/28HhVE?+(^j6VOO(0hgb[.l3'uAK]M_"kLX'jKpV5HM\kK<&dhW_Kl@'H6D6Rd>X6g[;3qCtrhBo$F`MM#gVlD-">55f9Y]iPe]U4m*eV:HgrO!BkWKs?&#"EbG5u?FQUP(aqJX3?#CUn4d-456is(F"h@eqmKF8Y2%T?j]6H;CNN3!C%?foeI>l@,$h8=h7&*UWQ?>c%h%L*+GK$1LK:/D-P=D,YT@[sqhTW`dNuR6..%=?N8IEYi/QTBjC_Zq\BX3Ad]\YOmFeQj>'5bV#Q:C%b5F[SIln:Seb2>A,Ma^iE1`U2Nq>Lb`+P5;rt@FmHIU[bfX4tD#\Q5_l;ICsklq1p15M8QdY^#?27hBQcoLKbQ`^kJ;;1Xm89OLg-3=huUZ/34ug@.00NfG7c&*d5Y5PtGcP/!]p@*Sj(>c;@/+q:s-^9#LGCcO(BG"p^h0-p7_(1(!4q*qk:T\k4qNPj_2HQM-_OMtZL4*Fki\J6?98=i\2p.1`T8YFHd29]^UoCTp>7h+YG*sH71O<9"7,DZ%Pu!aB3F&,kbI[1@TXAEjo)sF?4K]OH"3;D;5.?JTg#Bcp9n%Qs;#Z?m9Dqh@h;Rj4TuLD+a@s!Ott$PXN)_b>,Dt[nAsrd_c5tc\9jLWtkAFq?Os@$5Q:GQp/Re_F]Shb:ad%C'>aoP?-r6.dttiVlHlX?!`B]A0Iu=dGO'p@M+8O^#o=I41L)=]q[_sflraTi(QEI163!`,`3f6^WL"D;]q%4[['O6JnMdk?E.QYNTMsKr`=(RbXk+7>A>UAkE=O'KGhq-m\!@fELK(lRAP/?Q#>^b0'EY4+$k\4X6FjLh'8N>Q/4NTFp-E'3*(lkD')OF,+4tC8*m\BPL`Oi^BG!9,Q]R3LOHPrCI'<>@1U8XKZWU>uC>+nn_*Pt&UGiZCQi`SX/:nJ:OT[[9Y+$S3%d38MOEcQ1M.4P)acTbF#+f.X;h*kYu[nj!59-h:VMu*.E-B2"('!4F/+C:*N5MiqlB5VU)p[6jSD/G-!\JP_ZE@2PN0JN"RJ,`MkROAjW,r]NZ>bLB1V+ZMrKjD930f1__I3o??)uIF%"'(m18s:RAcTc:$[S9LlQ:k4+<#l^j"V_;tqXgo,"`^lA.$Usqio4_QP#E%(:gWkS]7E1'\+AX!oQ50`SK*8P&)/QRi1i;7&4(/0[I=BU#Z7bW*,@KbT\bb`s0mPSDe7_54MU/ar=BW(?0N^/7iBhhCIq+4OC[KO"bd9*W_1qs#\O6bjV]b>LIOTAU`km"^"j3MOW4>]b!jZ?%nhMW@f/&0_-OZ7VrtX@(ZFO*OBX,:^?+8H(V$gVX^;'mi;OWr!4$"S!Oc:<=,[=endKi;tA)\(,Q\^8%\_3=B]Q7Vfb49[]m"2q!k+aC."][U(ArM:ajhkD\t*O%iWr?nRAko]CUUX*f5_.KnZO!^tQ[nPMcMR2P)u*1q[u'MP%*C9]YW_n;5lQo_Gi]WB?@Oon*W://hhB]V]f'goT@"qhGsLp/QAnBMGn$],e`lPVT(K\55#+\[o=jpWZSrqHSTQL#Aa;$[ubUto<+foR#iR\"e,$RfRYd;\($V,q?;$=,K4H(BZt+$P'+1GbL`Ha[0o6_We>&2'VP.+BVt$YZn8,@!K44_rb/3h=qWEKSC"Oe^qt:ZZWiKpR-aPn>XAd;!HM$Rd;/i-k=3E+.G*ASa:%c'pZ_WXsla>=,iM6D75J&2'X'&rgi2NE3=s/tgU,CP3'D,n&Z5>-k=3E8gfpqp:&Q]6DH!656G;$/kpmKgL2S\:@%A1r9DQ>007DJ4?TA&MB`@/;+CEc*dhl"]3*k%C<@GjB*Q4H\$hB=IlM+3om?SKN?7'rC6TOt#F(a>(fIdu'gDP.V-uoqLkX1Z1T\*^)hV6KD5l$<;k7DukYZTfsW)W.Pk9$`%l=9dTB7);mirX]sbI^ki_)hJ6+oj5E=@kA3+O+9*iK#2t.HX:i#co''16,@$=g"lKH]DUDc?c`LB#I([$f"#D.[AIA\K#H/Cjd-97MISM@7-']>+!_UR$\0,14$NaYL@L!$s)4I`!Va`R[#$`Q-/C`;'s6m`&jB*c:bKQRaht#XbEa^s`+C`t8!OchRbrlnf6"(#SQk*(-rB@/uZnu(Jm^>_?Bs5SsG_ZC'YVjA:t=G8FCHUbaC9b:D]:]Ei]q.W[gEGJ3p6;7"3_t-*nkX2St//B*#M-\C^K46_R5D2Y(\mi<$k"["=6U6(DWp(Z]!*\3RQBO*8mF[7`uf4?^gSh:7S[)1oe[HYR8/h)^rW&:e^c5WhgasndZ?pb#(3h9toCub!=GQ,guA,loAP'`Nt><+DTXK^X1!`RR.%RC0BYC3_WlEp_WQW[HP1)Oi+5:1,;H.d\1ZRRL''>bYi3O;gKH9>+sDu?P>jB5$WSR6kV,ATj&5ein7l\([)0+0-YU!\R>:VoK=ei1'jqOn)uqtYpl>nq20$`Ep-ib'ZDbKZ,8.pYJgs`BC7^sQW97RCsf;B:;2id(;iK1die/4p!pjb'Xn?:_!i%R4Aj3F'Ec=%auqDuVc]VP=Q5Ar3/Zb+d`o(K<:iNhd=)lA[Rq=&(*^f@j>jV(_cF?-%G0'@]*XYt7!)(KIU_?M'b?T&P^R68'=5YSS)TjhH1Qb+7pb2oj4SJs/JSj_^1pt*bh+>Iq9I5[#Jd*-7QLsF>M0.'G"5F+6K:q2^;"1VBma+Y!U0,RBQ3k-J7pt+LY)^e_A.!6B=7=1F>n_d7)FqSP-KF91S$fQ\fCUB`G#nDDf]uS=FQcn>+)ApF_-WD.t6XCrF(NsXX@V&tbC1=nkc!EBBHh$4aWJ0cB>3kJ;ZIp4QAr]g=kuafs0)5U*&I./5fL0o;kNiS6EGdlP\pNksH,Ja%a0hq@T591GiD44^$mm;2qXpDunI^6\djRqT--@'WOn6i;s@_[c5Vq2JMICd2H:`__<9>&1L>*$YfA'-#_LJg6DVB'?_R3F8M!FdFo!5nM/e8ff;\6>\Fuob@%TRT?/$uHY5p'$^je_[Z$+X53:Y52mm8V"R;`3(+uBm==sFb(`?Ka9NHML:*@l;FrXX^'=cuhgK3$MH5B(f6N*H.)joVG?*5/G\'@_[]2qk'iVf;U`1Fm$08`hb/BgX\S?ImLYUmCUs-;H-RdY-P11i5g=$PJ1"iIZTo.Cem6g7f`U]$#n6OU+;/@VS4pqnRtR%+oiFF(U)rbns\=@34f"H^!C44VGfG42n'iJM+%9$1QNRDSZ/OFh)-sh$Vc(h@8Pk?_?jbNc+\sP5uoE9/nAL'1i:rG^3-/HF[??M:ai^d%H.B*"U0fbpYg_.a:4\s\UBQDc^r%7+.r-!0l`mX\,c(n8qK+Qn)*TCD4?*a23\M5E.E`V\L^XF,6%>!lEtO":26=Ko]gEe+A(Tk,b@i=DO&n!EWe$H,W1dE2c?ieYs,V.EG<.bf/MI&=cFUST_V+(rr3OjJ/meU6S/7N'H2Kn5I;>#e5&"*i',apK]%,L)rWudjB40S(3Fq+XYucES^[Tp%SD"05iI'YURJp\[B-mpYQ3+M#cLGOfE8_*"[$!];+,eTi%)i6=_mh"dG1(E1o2=ncUoPp$1BM0"cZ0d>!oJXXs5holk439T:4R6Is)CF?7+K?cU>;IOEFdT2A5@Ihff)]OY=0OZQW?4^;4jF,T0U:q1MqD?uUdRfBq8[^"YW-(D*.HuO=CAY4YT7&0=)$]Q+Zl>Ul,!t:(^osE5Au2HYQ6mbaD9EZZ%(--k\-hp@Zt5e&P_)6nS?)n6uIX\4DVu$WliVBQNO?.mpZ5g*Y?o`#CA:m$e?f@gco#DR[1Mna_Ru:\6mf7MkUhG'L1CYR4qp2mW:2ZMS"[#u?Fo&@=h(R*+"KuJPF@bXc>(_iFe6u=R?YC>bL@$KF:8(\hhdpaVa:$JshHZFUasp)+dXA)<+-!0VYq-GQp@VqnecYjjacZaq1AEY8EPBpV$#j=iY\8ijFq_O"A16igI0>a(o:MW0USUP>R2/3SI2]mgr_>Qj=A(R"f>$>*V2BAOs5^II($]ma9L:4QAT8f(UH3Gse%3%4H[osJX5flBP@HO&D2&TC1;'F@.\,`Efk=76[CdNL=j*]@cgAD:aB;m2)U(SmE]/s!s)H\%V)l-PHcTR?C9X\q&<\Go/R=2.U"pTWT'"8XXBQWkbELa8ltRk_!A6dmhABbXr@\lHoZRLi`&[OpHN:uG1@&0Y;O9&nk3F]kNl=IMI9/G]'cF[KqC/r)l$6q@AaLl6'O2,J5_?Bt`!#NY9QpQc]03JO6;q'o+@sC+!ri^s=;$%K$(n3fOrNilGrlcH)*X;^8L;k#%/-W1K)`(KSE+-eA_[RPA[^'_rUMEb&qV:K(%T7ok0$#/(^]fgpUZ9:L'BNOP$DllO\:?oFXUm*->YqfA"h5,4P9WmVDF8'qCVt47M*mDE6,uCc`!`M4A>Fk]lCufB/hA[S=%C;mbLI]aY9JJirFI:)6Xdg$#Jq/73>lHT:JFK4$NeomL#P!MpbKZ,,Ne?*\0*U0_Jl4&7`u-FN>SrU3[27;b6SkV#QCRV%3^-l[2Hk#2,kg1:i0FRc_/(Ij<6k"5h.ds(C8n\0ct_kb,HP(GjAm(*"Ga/8<'T20M<687#-(bA%&K"_hE[[8^p'.*8ENFpSg3`E-PTQaIGIW>&A+*ie@h-ATLekaD0\N`IkLr2%.`d=2aC20.7_!tHZ4JVo=LJ[0WA-daZ"Lm9b.\:=#"GI:k2^PSKT1u0Ic_10(j/V'Duk?uo%DafT-oTAN!bV'0fHAE[GSC^#]U41JdbNg>j0kIB6\[2goEl;e6E7q:ai^d%H.B*"U0g=E'ZOpd/W:$WL"1)na^.0\J&o=Y%[r[dHV#S(?Rc2&T6X^SQ_DD]Mo*F&/UNT0JtHM>01`7=;m"91F\jg8GFa@/?M^k5'n=nClEWr''HT5Jd-_?IJP,[;J[8uQZG80#@S_k5B`%Z$&@6#uZ$POJH@#GR=6q&^4l*c]*:BY5^PU-($-OM!ptFt&(A04aSD8qU.;^#BW(FB+uL)rJbLQ291`a?JU`cNg]J3qF[Xa7-V4mq%3N!Bk_SithLbo2@4SJ!ktOH;_5[!KTCo!/dB[P!VR12b$j`C4\Qjuc3"12DqpWi%ep>[Y9!&MY!HghUK%;F[KdHqtA^,:I/3qfp>lhFJT:\kU`FTbd?C_cJcYFYF@W6f$`RPd-E;]R5@dA/P2.(D8rfWI@#CMk?>`VC55@@e#dLW\0)Rq^kF^kQBTK9;876l@r86BV6r:$^oL[4+($WPS^UqILFk0h5l7j\o@pnT%@r?ZpIeU,-pGWU!Z"I*&h*eS_+MoI7W@YHd8:uTY4o05?@/S1[_(JlO5KQ'5mMLu<+prKTGNGP&&38EW7CPfB=Vsuu0ZugCq`hH[9f.`T9NQL38;WZXiYjb(e4!0AW@q%@uT1(q\r6HIf;YdXDK/Erfm+TD`4c^[LQ@$k)PWB32!Xbd46F_Pb6.&$/+>-=f/kgQg=PpuIqV>!sb^B9:2'IMt8oV=o"R;`3'/"f&3fFUeHsc>+1;JV!lq?F1\KLc]!TL8a(+q/^HW%Ub1Z;ESZI46\m%!c;h%6pBGD-L,Sm#c^aY]M(]&+:jCccl'd`Y`kQhC\Jj;(-Q&_?CWGD+-h%J8dfjU*3d'%PE91G3lI'nm^kI&>.UsEYuS=!0rMFb(PD\$"8l^>5($Dm/e4FcML!8i5pL/rD5#+YAWN1W-'Z9\@$)D*W>Dp7]fXZa7aR5TfrTcQ.ZW!T6n800/c.EO],1A!^gqi\!Q,_r/8@Ip!06Y9k7o^teOaVuj'1IT)U\$-Gs&CMi6^gtl1XA+%cob5soi8`kJe'm:q>+7iD1L#dsg&4m^E#Z9`:sNK*>oXgG:J2u%1*F5RIC[LNlmr.9acUDoAqg,_-co5Jj=Z4ij6@q6M>-R:8jYPo_`FJZ=,kO#Q0k[gQNXdWW(T\tOGEsCXZ_HW2)[5[E:oZb?#\uD$aR456Ykmlnj4U$BoDiD]Q+$`S+(eI?KYJ1cK3=;US6F_P4WNB,$(D`>+J&@"/7YqKaM$)IeKWY+MLV*;0qtoisWEfeugkCChDr8;#mhd6CD$UrB-A2b?.?/9INE3=s/nfbI/nh6s/teF[KF;J<[YDVP.p&l=G>=boXbb+s..n:k"VaRGV%U;r*ROf\M3G.#]\1#7fA-9-r!Nk&+0Y$W0J,ecskU^#N<"YCj;!KK_$Rh7n8lZfkK4DJ?9V41hh8YG`X/]L=GVOANRKOTa4)[;n]B>Mf](Y@<`]p,mB,`8sEW(Vf?c.SGq[XfS:cBP&5YGgE$YZo1NGnoX,%]kF]266,_`ss8IB9oP&'URNL-J[S_&#a:`\=h`H&NIZaab#hOfM6(*lD>[Zg[2"L06qp^rlQAtMConb#J,+aXZ7tFFRA#0aGL$s/S;e$On8u):n7]4o[GX,5$a[-T^gsapc0BK[NS2&6TS,sIUD&H-`@E;X8-l7E>n8Yg`m7KWr3j1>RZZ;"j*le%R6%%-D9\VP"SJ#?hKqkA4fpIJg;62VR^rX@XX4EbZELJq1QI\?KQ+=D_oWF\>4g\l@\PAaeku90Knd@LSg1I:hpVkpriJAjAch#T)R`K3L)Ss/?[CWB?Bu(uYNga\k-((clVpnCnt9_5o%j0/A"$P0I06>$MP=3H/F*MB,O8R%`b:Rg`AM&M>J8$AAlPl01r<:("!@Ki18]>X5"4<[rY.LQ7eKS+35H/-K<8R-@u(prQGGs6$#(*]SDCF1:r+.oq+^!\T;1%H2oeKQ'3td]O7?+^C,^#T"2GfX**jTW3gpE=u^l/k?8p%(K\^C&D8O&E<6/X(@C^ik,<1iL&+iE;%W494b/L8Ddg.$Z\)@"VaQ5W>mMrqqC:)#5X'nmJ4Y"!iJrnO#/RLX#tD-iBhC?E'_lL-sS`XoI0@1WiAZWoqP@K-A2aTPhJ_UE'Y_.E'^#T].?jpX]pMJQqlMFM$WEF<+PCT_:$kFE]=i[cJ^QkA3P9*<\j$[$1G]_boIe^/=X[qi9;+X==A5;+qK%'=jt=HT4_a?9pdeRju%,9kR/3,9j<4umbNLplT%!5P`NG&Q-Npo[Vns-,]DPp/3$bPfGMa?D/=St;^YRF;(q1GFfTq8\?;e[K>iGtr'ud;E:]sNj#Qr0h]^E3/8XD#ZVI&Q6b@<)G5!W+Kk`!*kKgfqcEG!fOYr]T1siGhh)]!,eB?q+V8_m.VlXoZ$oTrHJ,g6m)h6bZE!`qth!@[O/l>lV5)5oriZ&G`e\[#8U#R:=-f[mm*X26&2.J>mAu:Pt4(g2srJ):<3B+7,jPD36<_a&-.kGqPUI1-Ylc6_B!!GYEi?;^sS(k2M3`))oIJ]^jf9VbO&=MCZ_<^$rreZQT&jN!6-u&(rPq3g&Ig)(4%Tk;8'7nOHQPd66i)Olsad*\P9R(,ioH:V_,Blb)&oAPs#lg8'P.W>D9cI!EBa>Mi@OhgP\?KNC5^7[*s%EWL^4+a+O]RYYp%s6]nFq+al#PQb)@OK^/R19H4ZgI"6&3WA2WFDok5Xf%,&5cNa/`VO]KPVS;]I^%AIG!EgghfY!tK.ikRlS#[S]1'Md^A%f.#@3][qeib+A9?:^NK+1,I>HhlH^>/#C\T-LRn5'=nMMW(QkRW0IrITTgubKF?]Rc(,\n`f2d8WJ.rB*apai$g0&c!bbKLKf)L]]=2P"iG_MM9bZM!cQ9_f"Dh>N)ZgWc;FF8MVi@**An\dF)[d7!pYsBL;[]:&>od3/S)_l>EGG=i-m[)=^[a5u(0GdN/ABNO?Y"P,4M0DT>T*\U;r/r+4U?kaQN:jM+3[H%p=?^W+O:DQ%"o#*'@(Z3gsXe1(Dp-^7kZC[";-_V@(#L.)];hBi*b]sb;q\=e?_9/M,T=m1b%@7QY3rrbs#IIaI$^`,:`5$SNrbUm5S#!*'SM#!`IK'.n-=:ZJ^GF2SG)?2mUBCcq6r(>?BFd]^.kW`7MU3]S76JHRpe5$L-J8EW.aE91OP3;"L@Z/&[F=CiD[pL6QTp_M+F4+hD1B&nXu:2W1"Sj5GFT"[6jSVtPVM1Z1[0>>ASt6g"m?rRQ,WT79;"0aD96O2S9aI7mn>kPT78'&]$RI0$am23Rt;"j;cD.sJc`pAO$]h2&2'VPC+G`^i54g3YJmmTVc4--&2#A01o5$P4Do,K-!VZ>-qmaJJr"E&LkqWeJ(X;O)%Rc^]R@E\Q7_7mp1un*.?>Ol"YL?#+DB1K8-#*/L*C6ToH#h[6JBjIA`lgeeh\b3>%hY`VdjNOXh`s/Vbbd09Wk'tFFHD14o)pHmg^F_N/jc`5pqa#1_'.!3YWX5hnMDJkg?'1[#jWjRE(MA$_R]qSgcaE5b5<1MSBb5i9Cp]LWu=aB;_A,]^X1)XG\-;r4e)))RL[iL8V3Kp[(%fr5#,?Vb;s*cca!B)k@-5h.(M_!#Og;3,I,#@X;W4e;uihP^Tkrt+9^PAkCCR,AF"K%6I9X/e5OHp8Z!"DQeE8u3"]6iXp[V"5qRmP6-?ZM!jMM8$Kkj6[Sk;D:l?!Hs`cLM(,10be<6K+'!ZQ\8SV36i>c0rU&CWIst`2KD+?biR"."TN2,r,fL!R.o=-eS#8N*r#aZj1"GD5i@9u5,"_AoW0IrITTh!MK*taV4`kGt@\@XaACh!"H$7nXShBL,^+2'p$iE4\3qrPpqcTkC?,_!aB)F:^$l_$hLmamY^E7=HjE]fdHT*%%P2>a-LdRpU:E-4eE='dr]gU5LkG&0-#0R;=+BgoF%[CSiL9"K62]mnf$WljM4BhfoW!;5X6(G<7IqU(%_40:'8T`f[3`(V)orr?ZcfP\rsc1'4&hHAMZTg*O^A@Nan[GNXn!nG-q,Iuu&JSMqW\DZcA4`&b)`RU#9WKe#ITMTAR)SuZ2$ORYD.<*+A3<+=k*@=RZ(<2X0s%FQMCd7XajYeP:`f1on==i_WbOAH.j8p.OO69;`N]_YhgpJnUD,@E)$]_qb3J$(+gGW`$`"kbQh3KUc?8CX4A"L6A[C\L_%N%!VpA$lUknC+@4:/O5da]@^m98n^_D_N4()=Q\CGYVUbY&bb,Qj?tr^2(JI9+WnU?&q;5I@X*eC?G-de_kn+E<<*=lH",g2n!\^\\sG@j;T37Zm;dF6Y>_1gmNX2Zk2oJNI4WH6d"mWR+QJcmV*/jtE)Dco*oiPje@D_F8Y1FFf\%?5irPHN.,4%Nj*kMUM8WJ-&:a\Z)G31)[YrmL&bcsLP3V1Z)tB)L"(ipbIcl!:'s@)U-U"[LY)`me$m]@g(Pk17Y%-Bi=cB.5i"a]D&a$^.+f[5,T&P`hkDE8g)]LMa^+\/aqjnt2oC-h^j)napkMkE7.>_hD.:mc;5Ni'TTP1Dig?`m'=W>N_THRFZ.kf7FE%9Ls`8p2)f5!A=/Sp7p+$VtOJm((sSUE5)uQ5i[U-[k"(Bfl:_(XgV*$&iUV&C*bVo-^"Q+qZKg_R@6;E$M1-]&;RD?4g_T'p1ucZNI`Ia>.>]c>0'XP>%6+PD\arN-74J%L+9?T'M>K\DukYj>:Bh1I"Onu+AU(1$SA*ITV3M6%oNc_h73WA?8M*X!$u0ap6b5^Kq:m?chEp2eqOt(-Hn.hrXHMX!A5*jREJK&csAdF:)g3aKsmtdRMKNq,d'*_jo%Imul%g$7Xn"DY>C1kF:\C[HV)o?gG%S5u-iR13Cm(_S]\WF1>%`6RmRs&uHgWW1A:Tq)[1fq"MVI$bu8)rQQk4''5[9h7VP1W,pZ*^5Dq^,$Y]Ka2b78qsom,VM[*clPG]ToX&jXiQl<75Bhglai'm`WBQ;k58=-aO7rUg_#OELT$YF]!Y0.l@^-cemq*n94NSi.f\Dq;UeB!-nl6=\K&e:GXc.3"V.?P9>e"bFY'[5#3aA3tQZ!Ns'b]$<_psZ+'.uFQ+MWe0\lhr:#(oJgNZ9ed_?cY4(%QTqe@BIZE5BKFm.3:^?fYE7nQm"P*X;^-2B6VeTWsbnK-"<^Emj,g?[#>8fm_&B!,]S+%Ff$s=P`1`N^C>f6A9l]HhYWuN6U"Y6#rlQK[6b#r#moc9[V588B>-[r`nVJ+LU+imdas;2,99e2cp/WI6$k,s>K5:EIbfYH2h@IgIiM=VaROB;2V<7M9]SC9/eco%6^>+WrPY%3A:_)[jRSf5DDBr;t65>,i>j8:Dc4ap8e[8sYp]Ki@lPff+!%e^7Z(Z!H9ejcMWfhq>s(+H2=nh6Ot8GkfCL:#7rMdVe?Ef$Zm^o?qR%n`i%j].Fc5;M\a^S/E>3j?U&cto]T0Cm,SB^9PeQ[nqINO4*9aUB<`f=]I>IMl0TH(_uK4Ui^?aP*^"t&a\r587mfl-qXrjN-'guO0Q@+KN$lIG.4r1`P(A'Fl5]]ldXSC$pg:V%Q#i5#Q(X+LGA7R9a\->TB"8Yi/-Ia2R,d-r]sd9rr+UOFVl;>"-p)bRm3#6=ef[!u51?oS3qQOi?BB3I3*/2(M%DSaeg4dOO`gg=#@7k+?(r[]4;'3CUdb_W%7h:[bU=V:]ankD:;aFbC4_XM7?.tRp-9-!op&XXX*r`'X94;iGJLpC8QrLXgV0nCkN0E,tf9:_SI8U)H\rZnan`Bg*M.?gnEJchq99m"j)]&&FL/G%u$nl>dnY6fXRV,2',Yi:50GUFS"X8\[n`/b+`AN35WK.TCTMTARKF8&%'J2bh"eM-MNetmI;l;CC4<[>rIfj.42e(@>Yue)%\9Tm5X:/R20VP3B!]j)E!fpW6oGCk:R=>28^cd%5"pGTgM9$&W\Fo.;DX?#,HhU:JI2eVGft#S=BiAdF_J)[3`!mZY._jr[Xkhg,dBpN0a]$)PSBtk%FA5K)oCGJC5G.K(!K9:YX]sQPmk:o=ZepQN&Bs%Yq:ID]7;h=3FEXm,T0<#"ie;;kZS/`[kXt`XBl\LP#<#eQa"nSl@`RK&[fpgo,kWYHE:dh.YL(mM6YE>u_M6@qEiTa9V%6/g-f2`f^f5TFFlk5RT'=I0>e\ln>elGPmj^k:g&-JZ1B2/F:(eK;H.JoehtSX+q=0e?JSNSSdU_?_Qj>ti6\6!P:\<*5.OSfp\bhNc4k)#26KS?lTOR_+D!I5l_JQCRmI+2qRf-8[)?2Rq*j0Mj_0$YO*m`a330dPMQ\_kY-,$.$iXMLe\["uT%sQ"pM&*?N2\]oEDu_EfpAY@0)K5])&&&:^N^l5f\glb`bO)3CIFtf9,(Omh51ESR$2MjTKC]@"l[CmYW2ZN9nQK`l%,f-K*YQ`\0,!C8i@.;JkWn-/2?NVUf\9QCY$*/42p#/"pMcC_Ke`8%jpP$`5hQ`q3JmI=':$Op2D0;31Bj>Ve+W&c%I`lDq,%enT]AH:]*s>YGutV^RcbEE[\SInR^=t4[nKANC!W'`>1Y&ghT`';Q[CTR_f6Mc,i3ODOc"=B^\Ws&3c.DL@NmfWsr=DIejWW5,d"$K^e`->?nE/gOoqV5CV[6\]^2=.Z/"P7*HV`PMtGeKaW_jp+t@fqMpSEe#-.5&K&#j:Lda=[[nP\^n=iNN^F9s,3I3C\DT;t5Hc#tRk#F_(j#4Vd%j66Y-&amI;$UT_4gh;E>*9JQCPB?N=l^n9-ZVkpYW\jq!F^/DV$I`7d5Mk['.79T::8NeKpBrdGqHVcAj&(Z7ZbsP-5WRjCFeF'gEe?AM@4uVN#(IB+m308=>sW.=H18Ua9'-/YH;$k;iJ2ZN%oQhq$MV/$o?uJI:4//mB]hq?(IQc3DjBkZ?`b[Y/Yk^O\U,gNPBriTf?)_QnW;9s2h@aO`4MqqYW$bupZA_5X-Xkde:%(b,qBDX&X8u9X(nl82hBD],OY,h0ods@1L#k^$k"dG1HnShpZp_g+JrRB!CS\sD))jrs4B+Ni3%\>n['S?5T8JOG^e*9)fDVdEZ*?m$!XL56U3s0mu-Bi"Nh'aPIe"R#HLc(WECcIrPOCDj<:Gh@ql8:*(i6I#m[80dhUG[`5P+.Yd!e;pF]@SF(^T!&MS'>qpBXtW\20$N&D;`:EchhVPm$;HsC^/EN418eN1.p)KFM?IH^pOinr&7WmSbbPp+s?UM5VNZ8XK1biPA"?_&)r9qE#^3.&&dF)TC"+q.;-sCYB$d*J\O:XI22>Y/nNGhcZXc[Qg9e:i'TYG%_>X5@:ZH`*p3CY-t&MB`@/="*V20$ApWENJ/#Bu\:8aFfG!AsSsKboaZ/`HN"Y#QdnRL0j_Jq?lu;A@gf$Df(9\:?oFXV:dP:7aZJg\q$!j2[2^NKu/!MJtl/W[i$3oBB0o@q2uS]emH#[5Gf)`>RV9>,2`_TN,ZY$^-Kg!Msc=ZM^7oEGMoGD\oMnm$#T"aJ-1SVC\Re9T?bCRYdJ!6g_E7<)&+jT'-dB&f$5\kgP!VN'("rctV'\O=J3p6;'EK"6IHCnDI?H^@r?Gc\O.A62-+S*Z&i&3gonLBYn)$p527n9-Qu?Af$0`<\?bM'.@ACla$l;1l.k`.n-F`[VLl1N,HS9kMUGHQ/&M]if`-qE^V<&H]fV>Pj`8iR&R[lAZiI[e(=5^r>LC\07CC`LU>iQc'>9dBLS.RBH72k+d>(oGU+P@#::eK:t%MsrOFU48!XA`+;#T"aJ0H`bkaXg^<>m[QD;6?g:+X85,7>hogD$#Dh'-UUGU"!,#J."#:]^QDE:DS-A((Z*<2fBiL(GFh;2`/9g+n`]lC$D68hRlZ:>^6/>>sN?7);sfAF1\FZb1d)T_I:Q\`Ll4;T)uk5kuCgC!a=\T\=bf+>X43(_?I:RNGq1h&MB`@/;+CmA3G!lN:G@sQj1D2aZf4cRBE*-2R7&6@^/Xd9uDUYGQ2bab%ijL/hC25Lr\O)Zj@F=9n[HdKi2,(!\PHVHL.]L[XM&_CX6>H&0AVq9_S[)N0f#U.(jN`P0@lr]Ld\HRNL-JH(TO7n9F-a4n)Qu(C#O#8eAiC[$4%iJ4;'B#T(j$[5Gf)P`k^!_ZdEe>>sLtcCI%j?dG?/=(j*4PWB*/!Xbd4;UC0D_M,Vrm\@XQcJ@KF!uH:Xm8(TQfRt:O(R-S+$YUuKDukr!Z4S^^d;!HM$Rd;/iG:;^'!]V4#TZ[;QhRnhd04_Kh3M['XO6'(SdFkX5A#NO3L[FNX3.G,k^CO?p[$uRDRn+JSQ2_5?q)6d#+g\(ZjH7dHi-lmbe;C-?Ksu!X6GGEshQ5():agGt_?CWGD5DWi5]#Z^f3a$hjN_KV*83;)BO"a;M\e%>E;5g*1;efA?T*$"o_"9&lUKYO+hXN?U1MLm@U_LSqF/DIbqE=X)`fK8C'#3Yl1?>%r[L]2D7`Wnb*.;NM7T)n_?EqB>FY'E&6.,Zl4@2k8R;`WU$VE8.aLL-NGq1R+'gADiNgLP(]!FOU/?OfFEQ5s0:.i7n"3sca5\e>Sg8`[b'PUSKF91S$fQ\hN,X@50gjD5eb(G9:^[jfe5Ab*7`E?cMJ`TO;Rm>kTMTARjhh8kneE[/1YKK`Q\:g.KaXg)S:0th.CI%%Dr4DN=id-ipZ';T!fb?BMe@\Nie29E:3<2,Q$Wr[83F3r%j+CL6b&e&CHPkkE9gtDBN\[8604MJU_,58F3_^A\iT2%pWDIbRlef9\83Q:cZY.YmI&Et_kYc1=#_V56[Xj=WoEKik,*re$_`,(q9ou&n"0n<5/(:51k-Y/!5UaHS>`rheh+D)#UTa91k\8_;[Fd::CM_r9SW^Xc._VQ@QgP$*(hik'F'hZ*QKea(h.kKJ'_m8Y+8!0)_Wm]ulE?XLQnoChR`_af`1mEnS"P(&$^%id_(o$o7(o]GPqV2L\I%1GS5TP,KRW"WI8C#poj,N5%b^OKU2(r?GF>I3;*dc/#$CgMJg!@lD`;iP`^S9r6N3nZG7%iq-D6OE:-l`+sYg0,kJ9p;^A[7`uFK+#Pf1,]o"F!i=`Y,;OA&2'VPKFfaaa9WT\7_#)sq>:%"))=V-Xe8K?(W$=i8o5k]\F;'hiIX$\%i>([h.e#QY%qdp@'RqE2=hnMEl-(j:d4g<8`9tjU_)Bo>IOqm1m,Fb'6.$=U*=@`&!j@N>\2m\*'Rk%k*%12WQDpT%[$Hn@3a*iKu>tIqHP6if7\fKGOE9"53pcWnFU73\NFs)JC1.6X2J.-6e-?V>SkHi8";b;A-hie%14#$i.+'U1/om/,7,)"!l:a.RhDWl8&8>2-;BrU=Y->&%>-Gm+gGr*/hAGt#:&0X.XLNA>OJYbFgqVq2QrrUBMQQMJ]NCjbF:E[K!R!T\"SdsmtCW0ZMt%WR?q..`hOK6B**kK7d^t>i[0]=#P#-t>mp$Zdb;hMWoA!iRbE&u87"c&9,b;oC?QF'LEH]tH;KHpKgSDXnGLtSO_5ssZ)I.LPVfU^.8XI3]LR')e&a>3/=A?gQW>\"6$K!We>,rDnEA:(0<(:s)?)F6$8N2P#\A^>YU(G1p#G65FF`i]BI$2VZ?GTch(81+IQB$M^rTK&ZngTd.K.8gs"``rZ";cB.on*Kfmk/P.^hd]a&`W/j%/#l.dr&!g3A0b30Q+#+]3YkqEC<;^5W)>"YC"IOoEuTPt`)/r-:Dj*H()/M@qlgrf"_q45Dc%.n[e\t%,4(ZABt/7D[,l=^iR)B840iWK1mc-L.Vg.@A.oVK:4@JZo>l>7kY,mUni$GVK+n#rE7,@!J_=W.J\c5jJZW:05q%;iWqY,R8g:M[_.q((l>HjQ^jO-g"=-$^4,p%4:5#N]0>g^fGNpZ'"iDdS!-g>mOfNU>A7NdW_(V$k%n;ccaX9^XdZgoN\t`V+EFhQc%DjRa_DlAlo?OoK\RJ#,DUE_lZt_AcSDL<$dK4Y<&7`8;pR)J(UiBlQ_uLRL"Zo`=`j&bse!*2cNG[d*Ts/hnjtkMP[@Hnc`UA"cpSi_*5lW#e0dB_M.,qIR]'!]o"dc*gJC3LPugo(;*j!HrW`oIqg9>8*gf$KRaFGopZ>]l5DIOi7@`\Vl9sjNX%u4;%-`D1-a3B:S+ToJ,%[25S$ie<&1ha:Ai>_?NTQ[:cQHnKa\)IUcFMUVlognM,oPaib2)]>;Xi/I1C=LVTg=foI&+kaO:Y$ab#?>X[_?DZc3oPS3,/(\e^L`PI%umlrDa^-qVja"@p@ia'm[bO4/1"PGG&>V;MhW27ldR^HG^4@eKZG9#-fGlPJ?Bl`/+.F%k5ZTZ-4S5!Q^AW[SmEun_b+P8(OeNVEbYl46Nf5aC+7s+oX&jX.t1gu!rGUZF?,N[6FCb57_=5:$+8'W;"lOla3s5+eAD,tM8GN#>X5!]dP/2hioDHa"2=Z1UN#Mri@5=mlV3eu-K`Nt\if^fD5]8X0qGmQ05&WL)cuG#E:oq@ehaeFETXOMZhh`9?Im]Y%L`W:(>_1N`6c<@cISRH/=aCQ\1c4s\O3jf%Mu^#kq19/Lr&,nQjZFQ2J_S#&-0Hcnn0R!!e+=dLV[B,Ed#3?mO9-Ig4.Ak[%=7Rq8m!H_BHc""Xu;d2'=#,dB0'<.Mor*'M<426b%Yc6,B9e!>gJ25H[_YK7/LbKu`HPmghR-1ajq-,Wf4&\DZ55s%,1`d\O.705!Cl!0osrSEW1M&/d.6m*D>Qqqr)6LD-8K$Wg'4E?hofKPP*$KaB81ODk6M,TpLarr%r/JDIhs)E*6]Y+_ObC?ha=kL/eTNE`aq.Q=T?(>$05)j9dC%,ih#)-VB3%+qs$XabtB!S"K5=6?;gM[Eh;S9il;NPEt7Z_kH)9_ROGE6)L/HRC?mR.HtqrZ?dhYL(h]:Vi#-ZLOtfCqVVO*[)lb$&`%(ak\hO?fIe_3EMO_^FraZ,&Q[q.n`Ab=+=B;58DV_Km%qCA`;Z1:PF1h&u_g+O+NH',G]-bb+teOH!nE1C7Q.5m0uS;]8NDJ%UB1Xj??!pt^GO3X5?Vl]C6e,cW/\U]?iX/,*Tb"Y75+N=pF(3;L;nO'(C?XGoB[?D)erTI/$KjSIIRImm[7f;lTb2EH>N/`(.4DnVPs#5.f;l@5nhB$i1[q?@j6GV-gKmI>8jK)!B8([(Ing(+_(Uua-bSO%@b^"PZ3OD?,3BsDP&Td8K5'5T$:j:%ZJM8kJmoNaT34ir?IsR*m#;P2/Mt7-X4$)j!q^Z"0>]O4NL1>:?I6I#5%ouS4nT)*#^*5Tl:-Ya@EbB7bcf)^fHT*%E?F"Lm$1a7LoXRdr1j:s&VObohk%$)qd&N[HOO3-[n:mZ]^\-T9HUc2RE8IHoo^>FCP*;8eWP4RmnB`jfe%-V>#_043o"O\omH*O^/bm%o%\,M5.B;%N!c6:=c4DVtOJM%d))B`1Smp%?-*)5/7;I#jW&4ouI#4:HaA>JQ-&O^i2i_^uZ-V-_^S-b%GQRg-XE*?ac59"d_YUKJG>>*?6%5h$OLcEZn[QU"!+"KF8&%'J,[eE$8Tts(gB-I1!iWApV,gq!i;_o'BM!9aFOdq[FXmT9P^*R9CG/<^ut,:B<1mYA7U1G5!U,&>#@!L!;tOW)kkBfF\J>mbJQ0FL;S.&h^D1FiRe$8eu#$Ht[8-#N]I!>YuhQn/XEG58?(l(,[X^i^DbV^HoBF@Ijih4X(9#Q2GJrh]BoJk!"I9:14goEORRLW>?%>=[i4.o)`(:_Kh1Gl5'aC$KaJ7(c\moGuFp"9q>[^1]9dsFE!pH<$oQ0bH2Bn:i-jTXIOFC"saGA4T6In-"ln-qS+!E"1?G9V>hGNe@0;ML,dE!i,@8q[niF-85]\dg3P#g7!cA9Ve8IM_*keW_?)--Fbuo#fW&Kc'J:k_/S,1;_)-fQik9-p,ff&u9IAT;^;6E6BceG#DVMaJ=AUM-Pr12>fSF`lfu*LDPl(p((lk\3?D$UqS534>EHh164*gDe/kCIAOUts*f_nQV,2m="RZ21XW*Q4B4'[#mqnEgo-K+FEE4'OoZ_25bUSnE73oP(d+ig^b\5PD@\#TGcA4^l&s0kH:O1+QHKTV\P@"\oF:f1)PM2@(`>="r^/qaT\PhHK'!l>+09,b=u(sW*=9&1qhVJosAW6J8;7L(U8"<8+U8NU$Rac@",0dYY2n)\e%e4`5`\qC.Gs'b/8AVZ^3u\o`9Gb1k0,,1<(j_dhPBYUI/&ZH/QcB9k:6i%!Sq4XpYimOkC/qgV3.eCn8`^8YNbb!>$e7AOp!,e@O(Ki-&"VciU-G]lTJm""W4?[>tk"RKh])/5;L'L54!$:D\-jKMQ$]kXI$]<jrI=gW2O,LlOGg/j$PO"MI";[d`-[1T\DYpf>.B#i\Bq#**!g_3NQK:%;c`[+H.`ENC`b?m>H`M1)[*m\rLJ2Pb6;*=jh#(oXW!e#V8Rl9d\CF6VD;EUNW&HdH"d^Z^#8.#cW2"aE'aIMKR+Yp"P?tu7]1=+E;DEVB'AD\h/p,,gZA1t=2RO.]KmB5h[YMHVT4%4gl2&+4543m;ds1'r1RF??)bk-=u^+X)io.6Ns3Rc3?k;2:Hcs0roYOA9S)!_i.!<$t_"\;q0GVF,NhlkHiO,/bta=W-\W[cGOcI`)Z/hTHF/tj[cAQ^8rbsZ#[HWP6R>>`YB`qkd*@8'IA*7W9qnr_RcO4P)YPjY,*Ue`K^1NVO)+#/Z61"jpARXb&9WO]6T:1*ftm[m]gBUrfh+:*OQR0sls[o$8<1bBnfHqSBb*GlhlpXZlfjO"]8Uq[_74af%IDVm?C92#0IWQ-cXlMJ#]UfQ^Cd*UFdKUQrCj.((OqYfsm:X34V-bf%N]F&:\YT\*oD/=B^_nmP.5M6%l_3dgMIdm'Gl;r*W>UM=/kTe0'LN]b_*`9p=nM.Aki@uA8^[I8!A]3F(+@$+R.t8mo'p#6Hn:b>KM<%cISjJn%\!O=Y,J1EcXMt(/gd):8#.JY`._4$e-`HhT.7mIKA^A_doLE!r*B#bnVt\NiXImQL15o-:#?aHZIQ`8&#<2XNT!\PNp+Qj_u0cHSh!_%dFG'gO#Q@WZhaCd6Ok30r9+_,+*?Fk=Y8kU+VuBOY?4ZRe9'c*$dl.a&Lmb7B3@aFJ)7j.[r5&gn/ru&"nFof[rq"/d9KN%&g'*lRSYnZ".c&JIkD^,(gDPlMGu;fiR15^\+l(FiS_StF.hcs!)`n#s=hF$Tc4\qs4dI[*p`_.N4+,CE"+BFF^*ADN;`)6`6j:J#OE88)ql)%%M3P0ZdVV:_ReDZ/Qa&=9;bZ9JqXrPT)OR!%hOXfN"/aD3qKMLn[noZGPV\RVm)U*41]]=NN:\FDhJ\QON@*!rFjGYb^YBP27"tp."8f0YS"%,Q.2P$/FlHal/Vb#:*>dI?d#_WQm-^CU=l[UfR#4b7?#nG_7jq,=kH6YGD5L_=Uh>]OnZ;T/uT-3b"+a5ps1EW0FB#+>o*b@m'LYkto)/\TjhO5FpA^pSr!?GiHk_l$=Dj,'-aIMO3;BI7"FmGR]e8nZl$cL6V?&=#[/c%Y/rO^lF=s79"g=#VnR]m7fV]Y*-NhhpP_8RQ![8:O8sHT&EJ-OI?&F1XGRA.CK^d=XJC?E7X1SfF"9*Qb:$a.OR?Tmf(I6DDNIU%5$&-["^gjQ;'BL7!(ecn5k:X1>bY=BJB18bDYR)d!fXntMQ\&<6SZOmaM*blo07Y')U2,>7=CBPZj2B?pJ0N0SmH\@I:@b\n.\g`8X8H/+Ol\`qi%#1Q$]*CFJ;5[I=3"\/f)Gs0]ZSHoUU8J;Z7.J`*@CVh5cp[[Z(dmX5m.0>&s^6SD/-c/`Y"p(SJf((%757$oSd!'#kFDL#`RA1mi=(65:WA#%n*h!JZ,4F4]3jgR:GAg5NPhFDD]WVjjF>jd^((HRZ0`],f\"V*)bMuu3jmE"HA_03pjoV5`-ksbG,@$CjbKC=dFf=PZ#!.amI9BeND+@F=EeW62ok:`p=jljtnE\*WjFi/ZW<>aPoNc_NYPE@gb2lMdWHOC<+c&Nn3*fT337e#7hU815\65ru=K4S9YcRu8ZI(7GUW5tajdrVH1<1kZtkK'!,dW%:%f(Oeh(5QCZZr6u/pA^V+eGpqk)V^>a,BJ'u<*]%j8<26HnKjqbH"k8I#Xj!i^/"KaW(<^".BUW)Ko@>qn?!]!$*(ID(U0+#N&\50?N8pgj^pG$\,E`gU_-PStU/b"?;COY]R^&kcCAI$$"rOO#mE"0p1Ydla22NFENQ]f(YdMF.G!cE(1)79?Age5O>d?;QEUj<\`d$qd!3+s^h;n`=ceUf6id6qtdj&;sP'8Di5=m-31A`WO%"b4"QujT2-,4NJ04q*3TWCR.gV,fa$f01?)!1n50GOm8RL@8I`l-/7-3jM*>sV3_R^jSN:g7ES4afK\5$bjBSuecVmf)bFjF!Z-0r2ALmJ2M(WFMW<[45c4OjL%YY']3_o:igG8mbf"*Frh95b(%m.l>>bd_]*;(;diC*qkH^qS.NiRQ10<_-^Aj3Z&e!J9$,]V].#GNudN3qldO1XZSQb(Z=$RZGFo`[]"]O#bAI4%#7eIts5D.f05&V'&*_Y4-KgWX;-0r,s7GPsDJnn04*Ti2?U2::5Z+r'!?DXl4neF+a*7"0n(>>.c)WiE*B\05Q##!EU"B>BZ[CjaC-DP^_06U4$*mF[133<]Z:GDC03YXqZLo7m84M\8acVYprBbS!fJ#6#0T$d&g)oT!RVaZrY!e8$R(=A(C*2V21d98k^gJOW//X'a'50!@/>Gf!!lIRDn]ntb^6N80EeB"M#_qJ.=bhmUTF!Fk8qOaiI<9Qf$On6bLS22.+=[b?F5cSG(SXPY.-s5*\Zkc;C9l-bKk/8CfHl0mNE2f@>C7\jrf#KXQ!pDu.-M@H!^AJ]#4'FL9:l5hOi#&A#=Y>4r2\Isl41`%ju#rEHU&SNd>/>MXq!l9a?)]=sQJ*H(iLhXO%DK&DfTd$i>.O(Y7+?![O5]`WD\@]A6*^,sGL(K#*cs/gIQ%ccZnDi[GICJ']>s,guK7_F@5Q??kkMN+K06iqTRlbuRr"d"qSh4/BRQCE'qtH0h0m4Ob[:ddUleK0dj/1(onn4AYORiDLLUHG,Zt\EkM3mu3.?XH%q9NE\+:B5OH8KC!XS/2O)S%eLDr.egTHOge55^e3e$+\@,'/gPAc/9D%+!"P8kGL0U1^gK1L>ej_pcs.tgTXfTW9Xunpgfusur;(a9QVT^le!Y7lRFP@N)2/9`$RNj>c`_iur[]mZ+<6!q!eR@%bftjNDr8-Q[ic=d]7`N1p0G:eV^pB#Kr8pTgBSiJ6r*]SpuVaSg,Es,:j4a`4`\coY`g8PJR6"\^\:P=W\Zd_,NmN'1`)#YRL<[CBJ'u+RL9rL$j4`X%!D]sKjk1R$OFqSYIRJgE-(O`#R%PPlD1Q;=k7GhaK3+5aP\a/gKY!n%IMZE'+56m#`#(`J063X3F\VCc#o/>GU"[OuJNd#2i!VCannIc=n33cEld%7b+jO$Ic;*]+Ze(ktMK$Q'_\*,$s4@&Rn7\U^nX\M=uR$l,2\IJ(9+U$a81`$]kARTI/*'&1I54Qt:8#YQ:@$f67RL:n$%Ndh<&nfO[:JKWO=_]Sa#>&i-R(kTj*ZmFhZubu59t\.)]/5)Wc!.[UTJ[PL`=mGJ>eG/]_4:s05N_%bSIo*bFlCrU"Q-mk/*ocPFS27=_J(,3!@J0"Ar;ob?Q0U79['/.5fHHacSfP/W3S-F+JSk+f#KkeChb28UC5o&ss&e5;uVfpul^k3^8#enG(*=1`)#YRL9r@6\EX;d#`PBLG4#/O[>[\*^2029>ikA'66'6U@'&lo]QBi2IZ,+<>25XeBV=OpZj*G[WlD&c6n&q<&P(iVQG^pinh2RTn/5lM*_"sNW.WHV'pER/mcJRIifc9TrIY_\c8c:?Dk6.r6^3Q4c,pI7s'j7:EU5-de@cg;?K[qjm2BsZ/mI86@t:%Y8-joSMFT:bT3kp7S&2kU96gpqbBRL@)(j3<:DP:&^>#OL-]\Is#qQHb-A^_q+NVG@&IKdkf?QjYJ/1c)8jY^Ur%k-p6_oV96J7hh@!S-r70BJ*\+=FABK&Eq_JAud&J:f(if6X(f2I(lbD(.3.///H+;VuDL73EiU]g07B0Cf\_uKiORq]M[>Br)3JWY:qb]+i@I_cWOOA&dR#FSqk)1Zcd:b-H)`/?b(e4IY"p&2k2+8,)6!kM9PN%YSp\g::Y4-s@F;!RWZR'RH>/nAY,\WE,C-5).B$49mK$UM9(bln5I=\@(HJ=$raII6ljc_!Gbk2kF0G;"-U6CN=aMe=Y-K_F\PmdCN*F)jHlpi-/LahTO&KWe5cF2>m]+?r)?_kpdP6lu-pd&0[3h7T2O\PR+h>ej_aBJ+7u1F-odT?iRjs,?oEmF!!a9Xag/fpI`2"RN!Nojr.flpLO2]"N`D*4I]$NkgJ:[)Z:6\B`pdaut)[!W"9\NiX/C?CWWqG%B]m\%+@YRHs.S4o_2#=JuC4ob_:'M8!!\8Sc,Eo'6c4N]m7fV]Y)Kn[kT=lk(4dV_-HJgL]A=Oa,]uASSMtM,EbTVX&WpqH#ckb(,aj6X&kj=oeNn]'T0m+'e;=gl87ME)>Ql+(+h;N[hhX^*^b_6o^\/JnY!IKLE[VbT0EiX8[3!W_OsdQBVIhY.ZJcHJ4>BjTkgK+]H-%mao"oi\j;3@a,X\&E,m_0KWJ:LZo1@)+aqLs-f3n'n&4V;C$p>#_dBM6nb$eHcYTZ"Ef5qW@".77p\[Wh&U'$hN*!@KjYAp2sPt#iCf6P-7::de=d::U@-=0,A>=CE#O<$)8#m/Ws!:pKM-=kl=UU9rt$qW@?_9[+WrB;PSPJipl<0h!dTKU!#n?.LUr>.,s@A5Ak@"2*]@\-pPjJZ_HET)%E!ocjXV;NaD(2RuJ>.d*XS$)B(TDK;XEl$WLPFc2Dr7=0\bQ&kW#TN)cm5Amcbo.NCHjX3>;NBdoVHi9_WS:#G$qcdQ_B?7ZS(Z;qk2C+uV:)C"^^=s)4*X,6-G(+V=-iF`'[WZ?BqAnLK$nCX9.15g#0PXlr:DaL8(p0,VAPQ6p[ML(["CbjK7^;]4;sX(AhejiA(#.[<=!raI,%hl(u5UC-LGX:%D&0W$4?@UCJ5-OtbiKA*ja4[I\[cP)4j^SXE7j!'m!cinZU\h'@B#;L1dqK6Q`VjO0g!%7;Pjp!XY&/@T%b_>XYDS%rVm+HcfGSA/&;YLClGHOuSL0,u]0fEn1h0.P-"6<=Uk/+fi=egaH[]*[cOh`i[JO^BWodSXoor$\l\+#_P:hX6EW2H[thn^a"B$$f`fh,Hj2e"74NacZE-eNX=*HH5keBui%WaHh%Z.l\8:M>K:@4@YB($VW1CX]:hc4+'e[<5/;bdrN#\Uc>Z_LsFQbrSFQu78FUo!9P.;.0@YO`VZ@R_K`4L6Pki>6p"@?P1^d'Zi@HGXZJO%9.3;V/U,,J`"Y'`E__U&/P[4)_Nl+mJn3d"t*6(Pj6a_3:lHK*r9QBgk!#F:b7->&"g>XE"^HFWW!M7HHh\r1roZ_O_OkY-l[[^(":5EB4Tf2F'%]fc28j9Z6^:)13ZiGpUI"QK2jBrV4_]AZ2#/G\PA*R?#W&Bk`R`gmPWnFcE=ip%;&Feb.o"f3FCL7b$emg5RZ6en;?f4Z!6[2`I;R(Gr5^:Hbh\PJ68FR93VCV12XJYIW"C\>bc^9H=HnGC-?rcm-J-I^fUTC.Vr\E?e'SW(80r^2l?CQ-LE*KL,\s:S$4*oMa+)I!N<+@D-D2B@LbVDfjF^0c+`_\,j:TFmBeND'90dTXfRq.LQd3"\S.:^#rO1-?8X/Rof3*n)(=4EeHQn?eXrqiJ^NV`oMir7!1mp?a$BU0bP5<$IGi-"F,c-S&iD/5g.rC82h5#5n#3`-_6U5CYlnd\W7nUpDR8;,K`9W\,p8-74D20^Rjl3!B'9hn]O.&fD*//1N_B19@TS_*j"([3:;87:p((\plqT`/KU^b/:ATuE4o'j!k$N"n.4ll'!fcPG*.#1Ep-Q&H.p1MM2P`E:ArLo0%F3g).B7OO[oP%N1^-7TcX&]X^A965TljT]0r#Sd"J9b$U@gdf([KBrg]*sE_j&b'r`j6jll`A[FZ]5Kr9t)9M4OAG>9!?&1\-Mr$LmbTYsl'6q*R2]Jh>/#:D83L61^K(eT>3R!k%BVl)J*i,F$Djr>0gSE#cAUrt3ULQa*o8sNj5W"X0.n+sd$L\-``rN?GAhs)bbFPZ2F?E?)!Qm3mXVb?%p*CK?5>[f6m1E'CPcER8:h867s6/)>4=;lgs!!(k@S2.E:3Ad7(&^S*g$EH]p85b2en0+P=nQB?b`cc%E0h7l5JmPXB[m_ea;HP@`6gt]t8NSUf=<%Ep];2:h8m\dI/-XqNS]03^.Fpq__$`'TG4`.eW,Y>\6UN_61q98#saJ9BYpNjWLXLk/*XfTmT'(iSX1pf\=:b7)FRCblntQ+sEIokR3geLhaf;\Su*Rq+Be7bpus;gjZgOc2tq\^[=&PBX&oS[rY&W5J$^;jV&/f(8^<]kdG0e_o,fI2W5HsC/qeOe8Xa/Za5F*N?0u\+:r4#BjWuO%l2@uZ'6X7d=o]4W&Qb_kJ@V*Tj('[c"m>edQ3R$SX!q4-J3m@?2OZ0n++/M=kbhSJGbM7J(lDuF+M&id\[m7MaY#(3Nraq"f(_e\p\^;V*C]1#TM+Z9[PDL<7JXK'6E-k_hZUNM\e%Pck_4P"e#f)U9a:8>UZF6F$UC#Pqa)D%NeG?m$&do?):3O^@4*;,=!hlTMor>sVA;91?2us*8i81_*J?bqoBSut4?$'[Vp>6IpiCWA%W7RJ`meAU=0XTU[c6#^L:WPr_nY6N@UYh]Q:aS45sCojj2?=[U5uc.:X33aF085S!hMa6_*E6mA=N53SF`JNJ1i#a+<'eHA5ASV4QPa\kPb(Z;+n0J<+G:pN^23GS)\57!Wg!eIBa6)F]^4DQn.uT')Z:O(LQ;#MV7Lc0&4mkj&7'3\?kJ!#p)]]HM?(Ig11;nSJ`Ftg!\Y)n(0u<;>d?9r,k0sR_99e,OoFq5rV3ElD,]fZQUN?9kG@]^T"'7o8YtY\^P)NE2qHcq@L$-dS6gmdA4NToo#f7f&$4_5Z`+#EB^&e/1?O0^'4rQqU]rStXd@=:Nuo,;O7SsFf@/7oXG".5]8K(opCC?OSCBu#,6"*pHL]?ua;I!AiOosoUZ?S)7#VG=^1dO1p^8saY$I.Ud5p98D]WO*k'%eki8W'0Bsgl+PM(%FT;(oP<73eW/p.'\-H=nFppSSkb1,#d:MWCPb7iQj_D,(UEM4fX#Q!]J-#"eRNZc^5@B4\U^mokN7AQZ"]mJ+YqE3$emT]'T4:.7?!4"R$\7(JBUU)l@`Lf:K[XZnCZ7/XFd-CZ!1jM/h#789X%;4'h-B/Rf#5mcCDIrI_q_kPgZFeA1is&.?FQX:*^I=A?:[?pMs^q]RBYmH:KdAJ05cGZt[uYNulQR$3WX%JVW@h>NS7iDQ^=PoC:k]'kKXOJSfJeSohA9S*%uqhd#Bl6)hC+IdC2,b_IShk4!6"'$Sk\&F.<1,\QDABHgFj*oSJGSs3uerr?W(^pilOsGD^NLV`BgO\h.&Tff3)?5IpI&fSD]=05`$7+J,`Ar_6JG84U]SCr!XWq9RV;k<\+U"j_J"k!J%eU[0C-br!>=aBXhk#lTjNb31Q:(Z^:lf;qr4d[)7J45Y&=.k35\3]nHJC7b^"$]AZkQ;8cmi\rYJ:c+c[m9Ll&J8ZZW*&TqT_>1So:Y-3Mb]^BF9@6uekLdnD+"^c]:4>QCC*$1]+]FJ;/jT3>C.MG5Xd[cbB$nrlT*6,+s#,/J<9\iXjJE+i7upctkk\ZXA9qujfq]mi8o'O'4l66&K!'e3H'k'=f!VQ!mJ+=9$9G\17PC]]p]+Z9,.%i:26>&Z)1J#=2aGbr&i/Udn#Jsr;i*n1Y4BMM6g'_m#P3Bs0W"DAoE3>AKQU7)=X8efGFVO!\^5$G>e9IJkb428m([T@dS&Sdo/8I@1H-*mMJXsoD4RB25d,aoe6%1NI7E:Fq?_ZJ;G*E27<>/I@o^1UQP4E`0/!i^[r^_-(>;(dY#qo96,.mI\5n/'80RKL>[Y`[Gkpp,Za98RX&g$I5]`X#blsre,3`11pn),[?G88*QYrNi>o$#g>\Fii$0hD3m\JH"gaH#Q.#=,MLoD\+XC_:n%U[V`;2:dqPMFOA^QkQV7S:AI/FV*Q.ehR3YQO!BC/ksBj,%V/q@Oc/Nn,_+6">m-8&T'70`FK3bp+"_u24o5Og4?Y80,KZbRqr9pp^D49'XC+^(@,+[IQMjd37)P:+I#m-""dqrm@BM$,u-?fCYF0f6fA,S.@r[g5QoQ7LTAh%%RLeVra/-boKqV!Eb-8&%#f6nj/MCS8D"W1Hgr;'/\WL+&IaFo=;Skt1(_MUc[F!3B]6g:Z8#FZ#+lYp_oA<_=+BA6V`Au=_?PS$9>ISp(Gnh#-E%M2Y&6[@b@*Mq9Fm>3tZh+(gmhKD!F.qrP\tS`j>IS9(FKXTe)0Y(sF@56?V]@fj\'C5kcro41BYQgDe7Z+M,G>g2L?R6m-+^\!-76F8Cmk.d)9@>[>5J(NjoVgdJ[rHW*/_n]+q!V'R1V>IS!Y&T[1t1$@ArgrXcAr5%GJRHo#$731,DFj3>8oEBpH\tV`fN9Y0;U64VM6PgA=TJR?0c_&j,8[=)BX/j<"\d?R<[(s4fWD[JYd)9,B]DPms:Z,L85dC_m]_qnb?(="!)r[@K?Ho-efG'WTX2UCSW]]69Z-q/gZTRoP<;kK^^tW8HlD2;M:\I:4lo%UigOKt>o3C.c4+QCbh)l%Dq2=!i@t-.'$-[K0A:rV4_]AZ2#GGRGN$R>r[9dS^rG-6#"h#ZF^/;EaXS98%.6:U+#kfZH3&+Gu#^TW.(jRO)D3ZuO!P]/P[uFaJDjZh7*H/`!aQ677976X(dbr;?(LT?i;jmiJQ^p`jXMX\EAugkn8-T3DC2HOZV"*F6F_236FFc?#mV2fuL;[5tmI)O,s,7h+u5.\o!>L^foU=02akhEP9DoLcuZM4FeO^6[i0)`n#oGOpW:FefruTA;_qS;"+OdfQiNq`#=5oZG6[.$[)ADd5AC+d00[h<##0KtR^F&Ef2(D%E=rHc-otp1MLl5Spl(NO##3Y5J6Q^+l:7*ei0LN@"_q1'4d127IA`gZn!h'CK!c#/)[4UX@TS`H6O\/<1;dY!E41N*/BUYeCH-b&g\.itXPNECKAg8Y$NK*T$Zi9]gs-/4iLn&IkHIE.0dp+;d6.V3Tj[UP):g9AP?9&p>TW]S=UiF;@T@2>sD_;`]:%_+sm]Alu!Du-^`*=]^XB_2@o,$Rt?f/#0?&%LY_^hp])`EiYZ^j7-0p1G:osa>BFHk*:D"4U6ouG\@=B)T%AgiCgZ83;]2I3817;]k+$&(]\At'^I\,Up&n4XSN(7GX'<302Afs52U["TWm:f(!Hn*e#%aV(b1+:'/!I);=PZEUK7$_r@U_anjZP+SB(Z"(hnM\jj4$T&[Bg0=nJG0FmuCt"h1KbB5^[;%9@:F9rg+CiXGX,VH!1osqb+;3q,R5kHTNAtuK^(U8<".(R.+i;5Z77?f?A#/,^/%aN>9@6m=3M"7uB^g6+[i-YJ0\L;mA`f7nklc"[@dcCiJQ(=cY\:&-tjj<(Oa4%!#pU9Th\UBV_cNBO(:kGlJHTcnKX=*)sDd[*LH+[bj5K;,96V4#9!:6,X&LuS"01+Van:AWDDrA=,'2*hOjYY4JUj\+J#.-:U0paA;J:c&(>b)D(&8!j^!#tL%u3h.)kBPSPP-&rJLF(0"upE1%06D5W/B['0B-lpr_5?CW)b`6uZD&>;ARVFGdn_8q`Xh>^6NV"J/;9`k^"Jc0]RF.%*GnC08k)2E[!He3V/q8-1@sALb/#Z.>T;?]2DZ#!!BjW!]"OWUSFDT3C\pK,k%9A%>%4FUpP/38j/!eO\KO;5*Vo6SR"1]M[4FVPJ\Fke:C"`JTa"qrKEO+T;k@5t9$FuiXMr+goZG6[.$[*4E\qrAs#,#eWXq[i]%X8k4IEKT'ZHWl$TiQOK8.K=CN7?9)"Y+J:0FD/bB>_'>.0ajT,e>Or79D%oL4^=JY>J?A+J,5.KYq\li2/psndFHi-B^"YBDoU3qfiZiZ[nL.+1tkHiVQJoCnk62CeCEWt8r!+9@W[JeKP:'-e4$,ZSplOWCTXhji\\S%=3cX_@k;#Xn]IMPG'c0=KT":eo8[$FKk5+Z/%\W)KTh9M>jVD'90dA7oP%H[@+d-#kL>5nN^ao1qul>2jE$,9rsVQS+PLj]&sDs5'SFQdMQudq;$hU$Mj*"gnUm(KcUjq9Sh`IRqg:cBXW5GZD'pW[pgjcs.tU8j;],-JX*!iijesQ@;G5Hhg3KE-kZbY_AtWk?V#W5]]5*TXfTW%%7P@V%RGo:gqgXE,ouf1hdRaD'91?CtPu.h;(4M1QuSt#_JumARmCnH$O[aIXYm@AnAP&bcee\lK75pSt8]L%F'U4$T&[L,1'RCkCLOoI\=5JB[G(P?To)qEs!YlEfRnqP>&R%Si.;D]PFM\BJ(\B1`$^h6$!(%(0NKTb=pWbDZ)sU_0L4tp]>g_%T,bU"IPY1BFm7B+UGP>I/)(3b6uo&6P-%aPc;1n]RTsqET>'if%*H3/gs365s[fMHM(aQis_@a)!*kZhd!t4d',cV!KFXPq,pV/He?N[@s\H"lT(>f+&9#[^NVI=]qS$B224IJ,o`R!Wo[6Z^KlEEri&+#FZ#;(b>o\$Q'^1)e^iH/;*'dL1Z4\RgT5t!PNgP@](d\;$FCEg#D#N12GGl>TX8<&14Vh/c]$W=a"t3p$:4BkQT=sR@2a)9,CrB?fnC@Tt,\Nc3);pL>hCE#QCe;(;HTi(,n2.[;k@:'eCJKokMdBb:_TV%@IJ"RQU!Dk=X7805)tG@&Rn7\U^mmRL9t$*?&iK"9esOldh&d[Lbhq3.CdMZY%J!_SU8AB*:Mb_N)/,A7T4MX&dKic0aQ3O!UdgjN3TL5!JJp?DRH@cs4@7kCMas_dI.1f\(S5lbKQT\I]`?"/J\_p_T.Q;P:Si"3guX%(SWE!FZj&(GI[-1u;L$eu`.Q:_5^*+c&b\mG#)Z)`DqfHadnK3^,b,k09A!"U/.h64cQH@+g7KG3t`TM2AF>Df0GF_]iI%HoZZRpk/qeRP\a,[;4A%(G6Ds>n&\.gr$uiY?Zp85p')F2b%k>8MDk8Ak-3\4T91FE3>LPTXhjee#I"4r3g&["pP8DDU,Z;>X6r;XNcI;KkiCs3/dmOLMF9.d&U6OJ:IWCg-Q>c,We(,rnRGMrLKLM]tD#Sp$4P_o]V,;Jft(kk9k)S#Tq;(M8\9-If0!2oJq[;+5XPLk9`ol\@B$W(bf@dhS%g]IkTZJTa$to#f7/G2&FuUSI#()9u#2]=)o%VH6SKiYK^0?:KdP.A,Bu+Q0lP"D/F+lq`6;UN'9Lm>+Lls5%nFhLGhU:.LUr>;\Nq"ci.p*e#>4FcFDQ+5mJDN6R^g,YoPr,C+`UiD'1X=6O0O:LkHP52]HF>>Qlr`0Wa@'g269%>Ol(cdj(QlKcP92Wg2W.iB-#FMIdma[#+kR,*A1./^ISK0@PspBPuuphSQq67%t%u_.\c5hiaFk%u2.k>KLQ]A*Zja=_:!lbVlug)CnGcci\nISL@5C`[>C"(_&5=?&N/R[I@!4m==-5MN)q?o#41!>k74)j+CagZiP<-&(;"FS`4#R#Cq?E(i9\_uo0NVr@qen9)&I(#<:K?TZ#5+`oTE'7'5khn;nD`u*0QK2QRf(Z'X=e51R:X?u%Z7a&$N912Y+n15cG"XY>-RZeH)CWqRal-D2JnPX*B.b='7=K\LI!=5KAII*V&>l[WrA/-6T[p5LZdT\A+:*Rt*F*GVFQ14F!s8Z#pA4IJ0>8CG2pK)#.;M*tgU]5aT@0p1X#/GkeKpWq4&BmRA1&F^AhN#]DDnk>Nt,'!/=eOd<0@NPbtN.E0YK4B`V)E>0XV[_thc]5`J1*L;MZjV"m]ntEVqB+JSJhVrU7JFIFA""?n#0:_WqE!HU@?):(ir;:2h_6U@poTZ]/&C_@RrYV.SBT^A4kd!a5C6kKR-aJTJg:b):03OACP/7F+(CEQVH7$S$&b:Q7F4s([3\?R+VUCZ1^Kt,q5R>%JM\'b-#UZ,m4j.Lk+<8h>ET?TLa)eAWaIGAo?J[Yblkkf(HhHY=f0V;'%a>1BAH(ki0+tOMQ)+RC\P5Ja*m5\h\<2,pVo+;f&p&Vm\74,]Tg3.%@(q$14#1g#nuouMp#jT26^Ap/_BDfU^)IngKZ"bW/s(oEOlmmaSaSO,P)'-Qk0[7-"r_PKVBbC@Qj]I;I\GnTQN8?aT)1q7?nQ_?TPm:UQqU97M"!"c3$`/QH.9[E[7DQ7=S.bMTfLX1tW9p[G9`jL]`OHG[QW)4cq1UEiHO)h?+5r8U!(XrLZ9?XiT33H7(9O[Ph-R'bOe'jMO[L`R-&4GpDcs6A9o@Isd"pUVZFXh0V!AE0M)fWfB4Pli'O15t"BlI`<9H2!+j>F.j9!H!3^r:HhMD1UmQQ-p^o.)6m@b^qBH9?;P:Rn(>.(d4l%KYV(D(ZSfjM:ho6Hk@JK_aGZ9)/pVMh=ph!M2.q>c;ec['iVhQ#JO\2$T:7'd)Rd>Ss&A397%t(hOuH+^QjY[Ob>61qRZ0i`p2hD]POLaM%AnM$4c)S8G/!!-0nBASiUQ\?qhRU3ca%q*fF0SQauS(V8cLD\hRpttn8X3#)=10PHM.[!mLWIeP)lEWrrQ[c&FNF%u2s]boH?jep8qRCICsZE`$X0uT)'0jE[0hR9CgR-8RP`..abcRs&-P917.!eSF5b0Sr^+5?mE3LW^l.pW7Wrr5O2j>(kRc?41^t0S(Ebh'qEUdeCU`Pl:FF2t=dAc-m`\mfqQ6o#dqs6UQdh7I/M0,6IFALtp9.0fZuj.U^-*.;[10(`c=O8SZ]%Fa6YH9W/YI,t,'Lt#f>aA,EZ7'+gg#Yq49s]!#lf>3S;4//EhU7=3^cn.$f..ap6u1?kV^OZa=B+aek('lp4K9&)K_>[Eug^:2>sh5I;>[38UhApCpp`6`F<[n/*ERU-o.@8=[mH5iJJpSQC+/2F020Y\8p\'[;+6.Ci""E\A>Qg"Aqh=>YkehG3mkfB2>[1+A?5>c37inB6Muq&-P91[6mC,"lT%;dtWU3IXZ`Q^3hC&b424>]TJPIa5c]5mbGpl&5>N7b_;kfD!S)1$XHVbq#.jDlVTG%T'j:ke'<#IhU9rR5g>t"B2Yq9:FV_?$YDUW1bb8YTrk.5'7$1H<&)UNl'"odNru$#NsPcVa:LGn-FoZJ:rh-k;=!cdnk@72W*`'8OP2a;_83i#4@ifL[bc^mj)9]TAGWU]iXCN"-0!s=/r4*GSF"[UWK1`+YnSiqFDkg4lr'aRaj]`&d5IQT6@KHLPP+Gru9EridiiI\>>EEW&EGgTh-&W=VBBk^hQcnn_B>_#qApc10ADY7big04=cM6<+Th<)rd78Gp:**o--V.9C:jqVZh6s:Ag[CZRf=h`r;n%Y>+`6PmWe0%"\gAku-FRYh7F+a6>I;,)W&92d?]fcT;)d*IN,!uHR2j_n%1N1[-.YbKqRdtm^a?NoKGHPU["8WDM2/:KHdb$q:49PJ`Jftb`,\:C:XS]R"6GrZeV1Yaa:qrSDF;%i/?B_E,'cQ]lObf9ZT*QC7SjOHbi_%NPRL9C!>3+f,p$^e1cf[ee726LNE%M;\e-RrJe:R2Zn.mTZE301M$CfX3j2R("F`h8n/He?N"Aq6[b$=`3o9Xn@.T@hhr>4st]c:KlA<`7?_R0_FK+i;,6QICh?A:kB>LglYF!Y&pRL=p@!\ZI:=<&4tqWZHVY-fC.g48=;>(E+9WY]JXs,7gOVFcsum'MHh#_F16LT6aM^q"OLN/W^CI!eP+)aq>P08EY4=Y3smQtmG*#+>o:MSe$qBYp_H$&`+:a1n$%k+HkI#!BJ':O/mU4k2g97]q<+B"8u4keBJ5.ng=ji@22c5bRKf2g(lCXQ92B0sK?=sP;O2ah>SpOnjoV9ngqS?RDV_miQBl10T&j,`JuA]`/uSsDnaVkp=6CG#T_SiiuX]=+9$>t.:Q$*1q$p2W^1B$Ef((r4R^e!$?2&-P917.!f^ErjA)b,Sg`^9tBA]mKKG;U:UY=5]hOgUD*t,n*Y!g9tkQ^OLa9q8pTFReA0@TW-Y_#q2\a032ZY.Uo(4n5lc0M!q6\fu7HaD0:Jfk>NW#_mV/c[ml3IZF+qYL'cp?aAR%<0^Dj2R),'o&YBIJWU+p\3iSKr0F`!X8kH-nTLKmFnt+(GDZ-JEDFjd]$0Co&ah&AnJWc\sf"Rr;#NJ>\cV:Plo87[G^oSlgWSe-E4Slk4MMpG^/iBc.Qe=5nF/be./l?(P'02]^FUf9-f\-['\iC0Q#ONX]r9#Xsui))*2jf?3HQTBJ*\#0T=F8(FDqL]OStlRLEj^W$%'<24?LE,1etZXM\?@!!s]=[bKJpL$\G;aBJ-4eg"G'JfmWYb@BP;,N*u8R#6og'#blL@Oh!_BHteRrLa]8tOI;LCfBq1n?SM3.2.^^4(`&8ASl:4o&NBF[;ZYF$_#4i"UedLA!PoJLZX2gZ"(fa5+hl>djM;PE(kFuG,nZG['d;#CtQP2('NS51`+YqMA7Wg,U@?2!au5$f0>feFUAQeAZ%*_5nF/r44Mbb!,gT%;8%9u)]P8.GO@.<[;F[,;56UoGk%NpKHVh^qXs0^['[>DJWqqcq>%;#YsP-<0JG1B4.C"G.KPtG)TgsULPH9Uo&Rn+V)cq.:c77li[cW3\5o:9I/EVSil$\$4s0dCqaQ_=%%7Rh6HtrVED(V#J^*MQp?gW/mbOA'[L`R-&4Gn^?ZQ6mn`#7\Mi3FKag#?r(`)rDoda9%:73m!_hSb6WX[pWD;2MhGe@tP^2Y_-.5bGGI+bAk)_EYD\@=NRS=Kf-"jQ)IN>l;7@JfccA!._S"]aU.SNAoWmc7Q*$B^L7,*>FM[r;%j*,oSigrJ]J!X+Pc6Qo>7MW4^uOtA]mIf-&>XD-FQeg?KnZY2mA3IB\CRBXTXg_(4F[2f+sLL`g9h@\UUboR4ss-tXAl/srVH1/4aP&S('NRr1`+YqB$Hd\7kiOE&4WmLrT!;44`omaG1o7o"@3U,6f$"@+$Z)`))Gk5T?iRWN+@1^I:d*Rq!mC>USEaSAHSZ5S32([a5b"Hk#r$g;SISV()7Q1&-tTh6I7fc2>6og'#blKUJ@RqL@D`9i*?@@/^UJ.=1mB'U%R,lTINn[bElcl%q1n'p[@]u4Bt3CXkBshLP^kE]tOBPCY-)IU:R#.TE2hieW_L]7Z81(r:ofVQ:5iq;'QDT$=[LT"Te^0I=;(jQ"rAc_@gN7W!`\4%W'Uk%G*'@7^.1:j65\dFm;qLg-Q>R5nLFkPK\_&5M%u;F`fPu1u,KS(W.G@n(s%\M$X\':JO[!Eofo"?='$L6s/LFoB/4Wn&1%r>RNiT6Z-dZ6pq0McgTDb=&)L#f5ah/1`+Z.2fIOm4aM54baChQ$sBuQ'uN-%A3b2:;*24&fqPCBf;r,]=0GqMXT_#C!6k[i@Eb)nmdBLJX$@N/mX/g#QD*;t&9Wke%#A>`g*@WEd)`DNb^OQ9c>IR5=1(7#m#qJ:Qp3HW5Fn=b?p%A":\r1>U#ZA+(\Y(Q+=KhcX6+L$I0S7R8+"JkB7>hqddh[NX#_JuqRVFGTVbWe_>.#hb+.bK6L2/@H2sBJhUo(#0XTDqRQS2\i+sM7o*dkrPc->?RNnT$,,*d5r>Yljb/QsuVnmnn'W""#tGln6Zi:HbA;,Ibj2FS1""O.*m!Bs;=NK(JLJM;]#lQ:@O,UXtGdh[NX#_Juq)Jh&(q"^\pG4""?7&%cD8DHn4*+EMlQB73D[0hR![r1#BFEFT\Tu,s:S%7+EAtZ\2c9ZM;V$IJ?_)FleOT@J&!se%+%]+JfU;$gPU#4aZ+UlLX2b>RNi^_qOe0[r:0^a\Ho^nlPU@8sJjT/Faf5]ijENK:>aMj&RCXoFbZ!t\cHhVQ_7?'TSTq$btK'GVF5O@:BT5,V8b(gKL3d0kgV5:S3bo3am+@p3uk(:0`l-^l&)h7A8!S9XLjfiq,PF7gFYDSMk:U8=_Jfk>NW$CEH>Q?s;r]FuI/:DsFC=T>d?bcU;p[;?;6HYB*/R!g]KlO3r.3/+DTV\Igk6S6C\^mM3TXdnE6$#>7\:"*-r%['=F,+NSC.poZ5u^et$tD[n"C@lI)?ZE9lGEMspYl&UhTWMGJgcD^l^rOumbt2J5nF/bBIIf]!l=KkchmJ*0,+cZe>\XtQBn/8ca=sm9F(n0kgc^Mf.%>7hS"7@D`dFn(_md>F%7M]c%U0JRL?.5p?gW1Hp6C*=`QE;g8(L=j6Q%.p?c(e[3/!hJEDHpOHl(7f2TeO+6Qf5U)_aeIu%GAgq.ckKshNq5nHF).A,`(_4sM]i(@<$'%u$oVl$?N,cBc:)B.>/;^\_J+TLEU\T9WCe>Q9A$@ZtF/^R`NkFfAY3\4UM\8p]R>cZ3_/mZ&!D/ERjG4"%nDf`#a5tVKQ$gPUlc_'0bCRNi^_qOe0ace+2.\qC-4gG&*?FnAgW-]AUbirC?pL2>D7EVtr/ZG]K"/rH$o4!P$R,s8G.hD'91:+G`(1joWBDRlX1-5gt^[KIJO5'_V!LCY-fBCnNh4^NA*+C8kDV5=p:W?eujM2D;,7rg>BVmA"bIW5nF/r8'kM6EotT6VG3Ne"9KF(a,_<`/I*^R;l36&fWZON.Zb`BNuk^9['[9M5'?-)f31!B1`+:pBJ(DG:L%.p:ak\XUW8]S?b"[=+N4B+"Z6@anVU1e?9q!nAZ!rFbA$0LlTY^KtlWImL2`GrsJd'06`g2pV)`MXc-n&Js;0k-;g'$$=>cU[Wio8s:DbU_`b0$_eZ_g8=JeR\9b824\GQ7[@P#k3.-I86J9j_mKh>3NQNd/6o[r^2^C(&:u#1JuC,30$o]NSK/:S+VY9s]Y(CQ]>e$dKi4k[TJ$B[iD^V/@HhP\!^`Y9`%j%o\^"UTM8R#ERd*U.kfD!LW1X)mO+b[B[G3mjFIJT1;[=e^9W'4lI+N6V.ZX/VTqS.O[5&oRM5+`Ack3(oK/I+QYJ`_P&dA^'Bd*PUlS9Z\>e#4ZG*ageZEgc`I=5J8GgWp7=%Fcc[7Ju%joSEheCRqJJ1FNS7,m\(s8MtDY-fC.EmS&f,Pq-$$h#ZPX$Doeg@Yt]@,jl]5nF/bBHYM&ppbu1Q$bd1HM-PZB?hd3(f4`q]R9O\>ISJb.onJc2t,S7GBS-fOUbag+sJ5(&gJVG\4FoeaaqAs/+;3"/+6iZANZtNlU?smbcHf2[?,$e&K7K%ga-;U6"l0/NI3&s!i4F*+3=M9"OL0,bD`Ppro\T:H%5jQUZ/TZ#U'T9p`?G(OXn6s@t*R2gP.T`c8I/*2,T0ZAWbi`I1))L',.&PW3BF2B$_Nc*ZlJBDf6.d[;4C^fs>=Q%](7Go\8L-6f<8Q]nT-0$?Gj])R@3u2(GC)]Hc$5s7ZA>U\,$""G9X^;Ig_sDTqb):U/=A/8YsdFOVIb>;NW[Mi#QFsg9hG44:hc$>IJ@Ajr?'_5jd:5R1+455E/"8,I_UK<[=%9:7XELZ9\fere;Pq%%7Q=`/#!Mi8'?-'o6m4]Dd@W_]CseYg*(8,FQh)fe'mpNc("4q'0b`+n(pbs,[\++SI7_L6%493n."pdqtFU@NcfA_P.s;U6%]Bmf%0$0SV&T+ZY%H;2`E,^!rB4n9g_(``l:N0*ejNsZ*B%1R<*FjiEO'JJH>;i_12I[a2l=-jFPB^a,ZRTQnU62I!g=54F-M[c's66!9238l&?T=Jo!)I^'kJ]p@.SHU"EUH]:Ub)!&#)N9;+fi;S'ZE(LGEAg@0;P:n(ta1F&\u.Q$Mu`aje?.DZSSZd\R>b4NL=T\PVL]$VLF]$)m"'kKfdno^q(D,9\3r7n6']g\2@/:9_1#6_S]V/6]F%daI^UiPY.$IIQ12\T?s5ph;>l1P$W3I+Z&T0Bac8=t6>Y!,nu@Y?ke6$V3iSF$W7YfWer\mbN`?12gX?#I2_C!C`X@,VmnJ;=n"pW%@n<$hOeJN[PWIepoZgQo$ZX,rYK`&=!FD"Z9c3PUR%\2WS$FU)_aeJ!r<75'6!b()fLN"@3SV7=JC8q"XWe?+U`1$T/aY)^Y.rkk48niT]sscdU@lPtn2R/#SgDnF[@8AnGWf:\42L%1Nd.pJ>bSTY\L!$]2pn2&;'3HhND,=_cF(SI=L%H[GW6?'u8),ZUjDai)+C/hW/rPp?o1hA3AFrH_[P>Oi>QO+?6\7=p,CLn>?a>e(K#Om*;C>e#%K,&q;N[V`EeeKWJa.E&S;iY\ViCGB\7U&02d.@q-aIo?j=';#.(hVs&i"$AFoV0Z*Agfo6t3P0cl6()GK'>;qs4`3Moe?G%DH7=rRi/FDdpWiZ-qq=7A&TqOO[6+oNAAr/A8SZYE8)V6c!>+:/4Q'E3MkY>-_ZFb=s2eF3n/g,Nd4<,Ca!SW$&0Is1m5+REp'[5nF/bW"A+.k09BdS=I[>6^foM8fTG4>W?on(jq/bCEOtfrf=ba!/hb@s#>/c]a>%t6&LJ+Tbih<(T&?FOfX(5kT_VbENLZb4>A5.Vu'Pp#)'ZY.V*VS'Q(91qo-S1aY'J`Q"WbCd=oq!hil3LP%YQH@4hd+6d&X+4DVj>AJ$eEt&e5Um]%<=KCsTB3@a26MX*LIM%gJ@ND\o&MtY8mI13NL`4Z2CqDWQOD^[gl::La:WL3L_9:*\tLOb]tK7d9:uglKG-C>$RdVu#^UfCX&lL-n0UX(Lb!qJqa6SFZrGmHa;,NIb[l50NM0j%bqEoIQHFgGh1Ns0fG3lH=Z77CVr:K7&cgl&jaDf2cf<9,J\1n_8g9bQO&JpHI3C:Si^OE:]r\e7h=W+pMFQ()j6sTNan%WF'>kn9lhr.[t+$\&X,I.X*f_G5d77BZ?rVH1;G6C];cO)%A:.n6\>IQ6ZQOD?U(1:M;adP5g<*\@(H#c0,$fJ[OKa!lJ!`G,53>]\p)^i^n$hTQZL("s:rT+))FeH5e$2j>6+)i)mSN=0qRi'0f1p7i.YQ&TKpI=S!\c:u@mE>$,c`nsmLCtd`&GGMGVlQj+9en\OVL1W??D+eN7DK@o]_$eH3+?\'(`4*k?G0MN)'K9;+Gc91V+[/ZYV8L7`T,""J,/ZsgpqLWf%0c<"i/1!Vet1s04):6F"W-#L6?K]KZC[`io33&r,_8Z[IBgo&$!8TDqD/JW)9=g2s38EkQ&64K.oFH?Fk4bY7_hW2uE5l+jD#(Dbr$YKBe!-(2.("mK07n+1>QE^PI/!'bg`N4\*M5ND;Q/dm(o6<0Aa\X?"P&Z![0d-H(+auoOXtRt\H!Gho]ai`6@]Hpb0#US%TJF'!A8Ff9he06X9Jn7%i@!NgQP7K"^[NC#F)`;q=8)9)]L8Sr:of$9*([bpu@D_:S'g4&@97<$q(+.(D\T+"ID"\*=7D9Vrh5DHLrV6c38G(K>9j0%V]Wk_68*R6pq9;$^/K"oeBDdj]9d(F6U]`,rsh&GVJqQK(g0?8Q*I8rNC,t_DBY$\pR#@"ZT?)%6@Lua*GJeS5;4h.iWB2FbPGhPCO\#?$qZ?>J6;.kP)#_F2I$Q0^orquS(AnES0$Q_`,NZ;3$\FB(NbO42u)]K`cR$^9178`Xp_\;7\TgNVIY&.ic3,$Y]d`o`]nUc>o4$,P!ZR-h;5("2/Ft>`gC2%BJaIYPA\@puM0(@S]=4WJY`/,-j4[$3\[9[$B\-EPD#&pf'M2@=\X/da.'Far6qe,^p+&L\Rk2ljP"q_FZA7C?J?bScClKIG^1Qdf^mFntC*rM^f^c_r.=5b%3-K7@,C9"t\4ld4g&jjPtI/%ZU7ZAO=5\W2RenI3DmX_-ngAXW=Ajl07H$R[S1]4aQaV:GfR;^o`,8GP&KCZhui;gY3\4Suo-^o]ah]aB4F;@HPe%F>X):.Gu/S-^BPs5C$M**)PVr>jT@`&#X>tgEUqK&]"F>THNdK[Qktp!gL$PO,o$M"t[ZcIK0:pn`%Ma+Ac`gg9`#9C;bo?SND&`eu]m](E4<_'e<=@bt1;#Z:ugC&`SUn,_eVr5"4N,6U:D"Hd$#-ZkXZkTY_"\U4'gRl5-Aft;Oth@fBf5'NWR>bRpfZ[Vk!VS/'3hS4QtUIPhM'TsU-FA85_9lq#uhgbZ3]68%+oP[iNE,a_k_7C1tF`eGRLC'54`!&G9NYjLF_Cmt^W\e+jI=6O(;3Db^c9!#ic->2u0^XRQE956-qXs0DR$btjgH3`R5M+<1WGn:47R1rZc9ZG9&qCof=]lVp%`nHq4Z@=WW2ck@mFq7%^].p"(Bd$D6(02S/r&+0Nij`)Lo:2=k*La)+mP!t"@3SeH9lO:7)6]V@Uc(#R[T.m90kjp8Fti%S9HsBY?ue1XBA5D+nbd.nKTnKQ,R5.qtn-QnUbJ!OC(7m6-_c9!Vn2=s7I+IlI76r',,&64b!I*3T957u.Olp)M2C40F9niYJr:"m9S27*K(.dY_hS^3%ONMLVbWdlg)!/[6#f2JGlRb+1ohm7oLjiRibAFS$,40%q',*_&-P917!_.=5n)i:k1\PClKRQ0UngQ,:b$L;LPNp+&L3\:6AiMYR2L]:u%ZcCI%bFp+cIn[*esX]q^(X"3I?&-P917&iOm5s16+P18%4mHj2"*'(mC4*!`Y2JmCQR-Htl6;gf`NJNC8oB$M2mN=VXEC%l9E"@3S%O_R]t&17u049u<&;c$;(gU?LuVb`_(7kX#XZ"*Orh3mt'qY9Heha0XrE%!!2!6#+%#K6iL&VR8j[q]Ym"pYCJHhWP7?P'aM`N82VeJLnEJXgcBTCBPD0,-77_#8YRO].OlVdJnZm6N8qs>_c)h[N=AWp-P`;a+QoE-J04nk=BK6RD;CjNKAtm"VL:bk$PXDQMhVZ[-7:/sm0-AoibAGbl-h"2/54R(+:*QALfB#d![E*hoSJNi"DuaXLCQ'+N[uu2n6g`qJ#9o@)ZK^0?`9C8b0$89FaErY/^s,1!eK?_S:ff&j5B*+;T+J003Y_rTrY5`S"%U.08LU!idu:"XBDk9'.,F#"]>ZdC&`jALIXj)M`MXW5nF0]C/A/COHPb>."!dBdc8B/R("BePRJOd_`=XK:3`B?sAG4u)F4,5\%C+C2?if<0>dhFr9I<.]AK5P=1@:)q0mE%j)]K`n]oZpAIJ]=tR&HgV"HQD%5CR.s*MgiN\00t-\A1(!:/4`c:1`,eUrqc[jlu*s[qaIYji`uaqgumK-n\%,]mB?dhnD8&?6GLUT(\5:T&/2/CIOd%Jfk>N82VeJ8.Nt;4mUq92]3p@['Z'3G@Z@A.omK+)`-l8jRW*9j&W9cBkqL&hRo7j?]]#Sie!\QiWA0(kif*P[uP/UOQpfbrd?ji4%i5i9:%7cm0b,]TXZ+M$m%Mj+06[n(R+&-P91Ba;T\8L$Ga^N&;R)B'NNM2@ihIqICTWFs\W9i.3NHQf(J;q\t%!:&=@>IU!n"fX[60$$%$/hkK;^]+c[i6e;iRN44@LYPothTc\iSmi%P*%l-gj$"[N\&6)5M8(F5)lrqRp!2-!.:Vd@&_qtKPlg)]Eia,V1e-N*VqJ!kIJZM=@nF*r?tPYCQ&^&S*/Dl2>VC'9D%EXms7b]`^QR04&I/C!!^u80s(crH%o3EG/k^p=jL0blpBE"@8h('Gi$b'.6O73&ohE8_)tql-n!+I.?2"duHs+l07Hdg=gF^D@[gQAD.hf32!c(kFf?#/1Xf)['mDTg'^;.S3;5Mgt^],abb>Cj26W_G'8%JO,]*WAC`\-W^1Vj\k#Iee'ZQOg'a\h`6eM*b0!U^`a?S-qV"]\lMj4l07G+]-Cll]m:CuX<;oeoI2[V<`)^K5!Ju3f<7l[K*Vo#(ZZPM(DmBIhNK8.b0&Mpgl.2No(2IfJ,^Q2*j2NCW_h!WK*Rh<%Zsdg>`^SHDr7^nUkE$r&rmg_5785XJ-U%UAq;'1JflfKM@7kLM\e$mp[5/^W#-?gL]]jKcFnT!'GM7=MMddEKOJcU^?t.JBP_LDZZsP4-n`S$-nZWuE;Ah'^S#GFWi?sM&u)1t7$IjdAS#(M>Ps3iW?*H?8/Gf9eW1e:1@5@a%l(G@`f1r#k2n#=/._qM&4?^fEC%/qFm>3TP7p(J`lH,0McUJ4b0&Z,TV.s.Bh+O94[!(L;q&e-#>0V_?P)1Kie!\QiW=];SKC(FFR.LPiE)8/Q"SC4ag>i><.a+]F9)m^33'">,DPnf<)ciO[V\I%"bIj&K#dp?/k@#?^3rXK:"@_AZa@*X;3EEjh7In#FE%$E@AY&RLA1/oGOOCZ%#+?"5Q`a#'>X/jo;cm/#VPXRtSfIS.Mo@.p.:Lpl7/B/g6+XRGis&cWGOOC"g(Au[@VGeKDV[?32HHVV+:*QAL^\gnJs>isj\'h,;,U:!#RIqgq_lpk81rf6I=nGM?+Y87m0Eg0ZYI1"oh8(S%im^LZnI4@6#f396#cokKZgDtYKY89DXGi)HVS*Nk5CWN$9hg&"J`$?]XDr/.;TV.sZX:5,VAHoYu[V4&T;,L1j$QRWrAW2s,16UO$^/gXJ,E/A;KD0Y[52I@m+]!F=]maK5(:nR75JQ"(dEI3S=l3%?S_!nndD10s*XeA(&eU%oD<_75nF0u&h#BR#1+EG"u&1/qYBsC]Qo]TG8MYR-AJ9G5Xe+q`F>gGWPOc"/BIids/cn`,CbNXk;^<`N.R?YZqfCMR_\$_B:q*n*:s6K#tL-RgJn2E!I(Sd"OO`M?(hR._,S-;[s/HpU.d\;*AF*Zke"%IoDu8OM"pT;PJW68^`Lp8mJ`5S+&a&D7'&"^-GiD?nM#naZ/e5$6=/W*^P*-64QFqJ4ik9^5EWhQ!OPi-t?+Y90r:(":NZhj6c8)S#3trDEZa-m(Fq>6--n^=D^q`5'H%%3NCtZ\4K8;44Q;q0pS=Z;nS94U5(YW'3`PkMtLI_k&/kA0Qp?^a\@u&WXFEB@g%O.F!])>!f-qd0)7$e(/+:*S?"t2+F(hAjV',-R5[;,4M-)k1^Ftu9eY`k7aog1+JgP.4[Y%67u)KGN>>o&?pYHM;6<^m8,If2;e3#J68;GpD3F:NS(qtBEi\i80ieReO1*/#7F(W9!66:-Bu%`+c4rVH3WeQ/+!oB4F]G3fJF%p)e4L5#i$CUaInH[Fcp/g;Dd/kA2+rqe?24n3i8"7?._4,@i"lLn"kDD%H-*!?d<&-P9K"iUY5jR(^2naZ/=#jgU3__M!KBdTg[X3:48m&O0hiq6XPj2[4Kp9+8-K28gcbuDmVnF1s.#gCW@LSl;">MJc4cSOr2+soL'riDrm"@3S%OVpu#OC>:u^"TJd.l'`FT7?hH+eLrHWa36FP*-F\>$+n>If5^L+%=/hNup591q9.f*#orcG-+4Z-RVi"AAFDSe>Z@[',)ObF6CjDe0Am"77D4B2l`gT\8U7gVHlR-$Ao4#k09ASgtrRWIG!-%Q3b3\G_h<;['DBEN+g%`[IJILCLCSLYMDC\N@>sr,fEkECB-9orm_b&"f^G!M\k1;-G^/KbKGfXf8p=NFo*O0+i3$l??GEV#_F1Tb^e])D"H]-O7`'d;c?U>,GWc<<+mLR0BB(3Wk,gSbOGE;!sT1lk^$gF=AT&mqc/&^h7CRF7.@jaTqS`/h)_E=6Q"b>_1UP6R?!7=Wc!-[r(G#TXZ+#FR7YBUTk9/$Pk:$g+T6'7,@k,f<8PN2JkjK5(Xm_K#e?K0$"-Er:.hSTgQpe_=Z;6X@>WI1$tO1W,PpQ5#6>7c9M@,j6Z-VE<_\mPRIs/?G:g/[!)cXI/EW^d*Rm7q%nB*j:E"A`(uF84m6gnP0Xp%P%<9"q*G_4"Z3TY-n`RVa,V2#IXJYHk75si+Vc-bp.nL]d!u-!7$g)h+:*S?$n*aL%piRKgk2OR.4NN22ih\)6j:WVO^%'7b$fI4$1(=e#/*VI0;hI"HaQu>`]Wio('S'+9/mP(LLYCD5i+EGW#K6j'#r*,1A;l3M(Xbg9NJi^)g*n%+:ikqo#922QMq@YLUa"[Y($?GFf*t/54iQ[i@o=oF.)a#3dgerWIFgB*!7C)L^VAJb%K%lA_L'Nh#-s;_ns9B_;DBA4s1EdW(=)oA,=b.d5(Xm_K#eQQ0$".DVbcL+0258?;6dL8I/Wn!e"-o=R$\`="iOlTrr2e5VVS3]UIUBJ:g"p]V6-lUUIUC4gUD\-n:>:L&I+UV@05!$H1gH&VVONT!6#+2E,fk@ZF.*J21E!L#bhtK#5%K\os!Uh*Q-Z$O`*cUP7[maCRu"M97XJRK:VDe?Y(>40mWDQn9,u"_Ln;;)&dtkG`!V];^Lenfsl+Xk2V4egc;uC7&;.s6ZGEcLlRKBN@T-op!96p1[PZM0d:K7>eb_n!N4[;&-P91_*E!+*_8mqo(Vn1f%)2:=@,*[_Og$./R!PtnqCdjKa^)IOoCu7O:\:;W=B(8"WX/)OG=i41Ga7cc-=N3qXlAf4sEZu<)c78L97R0e%QsKJDpVT`5T\E.kAO9H./Wb9`$$3Le_2giaB\(PmfG^4]1:@V5`VC@:/VJ/8H+ih.3ar]r@2I7u8ZD.Aff);5r=*71BL-0I_lT.0XrXN#iVWi5,C\EBt@#J,VQUHjC)fA(h`P-R*F-m,,Q"lG1H$+%;DXJfk>Na:]mRa:CLar4%7VITBM#W)9cKf[e^*Q-[!bj)N!C](V`,GMgHOFGpL-g1&E>=hDK.c_Ua,PuRmn#2tT>]tN!Y>Trs%J4gSn6ga?\0.P;n)K&u+O]u0W`?+lp%:b<3.`7YK#ecW0$"?]>]fDh3@H;sc-<@s]m>!NHLT9OoEAl?BC!<(W[Qgb][>peR<(/Kg5"-is:KunqT!]p]a"q\&3ie_N)5eNTRX8r.k_S?aXnZH$fl*$Y.m&\`V\XF*oSIObsNFVG(uMEY;7/#_F0),%I:U+=BGG\7r9]Tku$!=`@KQLR5K&UJl#FCMuFe4u&nZg4Y+t)&Y6u7THReLSoF">0\`p>6foh.o#V=(6LrKeYu"Y6PGUX"pF/Skqha^I%!U0.06F?i>SlDQH^=97^PDoXr6M?GAc0*EAs]:TIO!r%4`RfN[H0lKn!HAmEHJ0HpDXaTM%\Wl_G-[n"!h(Z-.hg1Lkb:[./5*hp_%AhMdf1ou`!+6![>B64S+^OTZ/EE:6N\RQh2l9%3koOd2Ehq28B$;Hk\(qM$UG=,5m.>0"ZZUPB?OA[/Ud.m54-;Ao8NPh#o;5Q6DWUm4P)<"DE`dNqE'BqA#+G,CWgX_>q?,rDhgAMD;)>?G^9TX-o!F\T*n8-s;@pT-mQKl3.EE%Uue3VU9TOcW(H&4[m@9EOfr%k(n-Lgh6#4)s7m+Sn-.m5Oek;ltn2HT/t+)t`dq@P9E$HIf*<4@AWSph7Ao%&:g_N)!c,gN8u6V,9?pXVY.St/"J0>OmZ.iL@P;H6_GGU^$mDEk_<"9R-(<.DNdL:`\qm$l9`8&L1RBfAi6e()k(#`ji5(L7I^S%,\CiMNN^hkQ%Q:*-pf\.A.Hb_cf-rr.NS%2)Ot#_F0),%I:U+=CR;03Tf^$YX4j2A?tSd&LV3+>,Y,f8ba\>-f@6nFfG#1<(T!O#558ZEZ/3>FuT^;e)dnr'&qaG&A/)F_uN8%]r]1Q)c8b^lE"RHLhbr*lsqWG$ur_!eHhB%]e)f?K+<)obAD1m$Y:C[r&ij:#)n2ULKtq'bqIKPS=Msk#:BN6f*&/X3Y>=\PNKDh@_O?p:uoHD)X,5.hMZ_qo#jj?H4kp__?!NI:qBW/9$@kJeZ4V\$RoF7hM@:%q[b-W4O!r,+n9H#!E-2[Sq[>Kj!Pa#"bg,-CAcgUtOVT-2XA0E^T!e#f7?=mfD7t!ADV-QanZT1tGbX$"dVpi25]LqF$7<:(HiPUZqo00g6O=%OWK&QhMROF+\ET-fhmjo5).k=7,M'E:X+GfB8ie!\N*PZ9a-n_0d$/89]5XVT88\;M%m6tWk^GC'U3,n3-I#-.EP6WYr4?\as_WfiD]"$+r].`i+51lV\91V%O\DZ2kNh4PnOpqsnc$-rR*BrHaEUVn\A:!17gT)LE_n@3rF`jiSUkJU](.3?/b$hiMa2%hFcG7HB\8``DrXKK$HQ_SJm\r:r7ZJE'Tqe``Y,6O,k\NFEK%imiMUXQjq_H4:9C-A$DP3_uHu.CK.bRG5KmVu!)&qkViN/J4i6pRp-qR"/eL3&CTiKV['Gm?'GlkPJT2$:j&-P;[R?K!oVU0!W%Qsq=0^U)/I'DWIXVA_X1c/V[M@4*2k3.-U;`\7FS51q%h9$f5%`fO*!2D'>L-X)P@n/N\ga`!mlr7RWrjgsj+f(UL>kOr[UqgaYD582B-s)&QD([D$c<2P;t'3Sk1-1^hkBaQb\V5Rl0-1@teg8]X8)i1cNs_69)me'c#g1D[/J(n&LA_XSdZ9'//_dA+U#shH?<9W!l5g8%3O,WrRVHU[-WO/X4sC'\Q(t\;/r]c$1n=u!H#$ElOCjSC^E.iOG3!fc4;g.-'R$:dWqa[^0'MV8f!R72r[OBE8PP4/^3_=mO[*hT"kp$q68oSpWamR-Q`-i^cn8K[5>@sL4t(df)79bVY@0J\)O`86]dhge\7r3d^O_G9\j-.+AR0%Hh6:+"*j2R'IOYVM2#_L,+_hSb8Yuocj*XI^_MdtI&6mP<#a03%!/L;^>/N\#5m(nmkm5]M(*6kBjMG@F?hCD2s9C%&;E3SN@+nAKkK;2AnX?#Ou>?@t5hm7M`$1-#!P49.uge_5eZ^j(&?;"njmlb"hZ<)`P'#;,M5rA.'RNYp'$$&u)n/:d1*TLQ*>fro8.0^R%<5?`oPt!t4;3egqU6:WfAn'jV:T%)hMCYu:l8!;cX3*/R>$C)--H`92Io%qGO>+nfaE,54U2IJ"0cLWjt+L[9gD'c6-PWSPMI/kdCo]Q37Od?`V5%K"c<]3)N"of)N"n8;MHSP<86Wr!nbY@rO"K48@.!r5^Utc+_-7]/'qlJq!H@qOFSZWdlOS<9A\6VYV9Wf8,aA4='X[!*5r)?X[8YD60@`L1sf>VOh.4gq8)`DDFW-p,lD`6\FYHm+p+Y\1>=8obF]"NF.^ebZ3!-pjRnm5('jg;PlEtmT_#h#b-MU(Q,TV+p`eIq=3L#Q.7NDW=^[4/9#8g=[e3/Ieed-*0VpmM[MstmS-HD*ZEndbJuQI>PGMsb\H4(Rs,^,CI.5`=O,^9PC7.I>2FW(N-fci$atXgN#.q5L>mfP/R\if>aRR#7\qh8T"?[eG^MbQOC(92J:W?_BCp_c%B5&jC[^jbkR$3gU.99+M0KM2F4X-Q_ss)M@5[feM1B8Y[CT52SoC!]mKDli"pQG<#KpPlp,!g_f[0=*E8%Z?5:!]M56aS5;4s*BDi%gf_ID$#R(380JG_PoP@`GEsN/t>!_j$_0LHH=u>2Sn&t3g'!@Cbr.V]TgQ%irIR9f^VPl10@kM'W(.Qf-t!g"?I!O01$b97p"h&VJ9o`i46]p*RR]miJ9e^lP<2+WC,,TYiWA'Ggn]kn@"R5S>EfjqZk3eQ:TKrm":-4]o'b@I,aRuf[0^`D;'\dcZ<*];aJ@3TG:pYgaQms)[@o=M@&q%d:e^Mc6bC[m[oQ^<.)#./D>BL34U4W'OlE'ZC7G>0d+0.$fU2G/k!9nVO\`brUk(1=SSc\4JdUmP?[Tii(UqV^7XLM$pQA[U"6YQ6XG/,9_H;M]I.b\Q.cD4*(lR5GbKW_\(b-B.q9J;Z][hf9CeVKt+@3B!eFi)HE?$MJcf$s"8_LPo\]2LSN!0)/)r%)s;(/W3!)=&])f"nNY>Ul+,$0d[c?e6Et?%?iKKdlf#mHX;Xa>jRNr"SJR0%20\)aa.(/W_K;=7CQg^*adD[A.NRQ'"FB-ju7Lt5#)1BT'C5WI;9j;YnLKQ/c8dc3W4c\<=ZAt*aQfrPWe=5tA/JM,k86krfq(nQ5h7Ik=4_6ZB>[Y2bM^D(D#u;iQK#en?Dr4URio\LT9`'O"$3f\Ypa$S7;t!Qs>I8Kt.:7)Rk.QO>`l@KZd4qrMdT()2Za\5ISPlA'4\.&F`@=&sEJk3a*?/-b8cX'G3iONS#O^es]>4Fb(IJ0$=0!;@`k:P>RR@Tj'cca@QprH=/^PWDcYMXpkC2.LF%S<2jF`HI0K.T0++qu^0@/f@m%6)IJ"_BR\g?C2@=P0f/S$?:X9;X"nP4F;3UmcJLD;>ppa6e51Uk"P.P+a%Wqk>1QS5AU2"NM?^N#ujf#CfK;DbgX.79jE=^k/igumbBM]nFfEmQOY?P_SZF<(KFJsLgX<*AbW(L"/>slk,YF/h`]#$R.iQ6ej1:(4jCMD4V)(!J:*R#7p9%4;QkudidB"!'8db!YosZf@\gVDH5%X1@W)3,f'FHdNa_@[[HL"Ns.8R`\>?P/P1RR=)Q67L`!**ZE/^[6]$4OH_0I;U!L:smN$c5mi^/n]-@-NZD;M6tpZW>iNpjSJO0C#/(i4n>oKWY.B-Te(#DK@Rri[DM77GbNZrZ1>3U*Sg:*)2Y92eJ`Q"ARo_6o-sin:@kXk_d6CHmX;m*Lum5jbDOB/"%A&k&+XYh7[P('6QdF4bDZj(^ca)8n94EWh8rS3f!T)8q6G,!HH&a&c&F/liU5O6OS-"sf7]_N*>B=:KPltB<.Z6K*7Ce505nA:.aoF^,".;LIYkSM_3ja+9DOGQ8[IPEZuM9Vduu8oF[oA'bKIqm:L5%#_YL7a+Irg;VNTK6#^2Q[lElP`;R!U7JI#mA(G]<7Jf'@QN7bSpHb+=b@:O(G%07Kr3f"EETX$"cI:>!Im!&eplI-Q8V^9T@jl"K>Nb!(`I8ENL(CoQ!['6no1,e"&miW?8OR%LFc@qWOK@s%#^Wm1+rU,*R92Ygc&t8>g+YF2ej\HEZors3:nl#FIf@_K?]&omdDssm-a-de%SpbfGO9EaV5"prmZu&+Famh-7EITI3BQ+W]g3-'%:"JWL?phqj]9J-^-L_=YMrAJs"A[Zrm,']3Zn`jZbPg03e,C9%$R0;9Z'\[Tl::^:l"A:Q,!F$XVcoCP/kk5X>YL@[0H82u$n/2S5#'Gmca444X_m20D5]?^GcMgU/\SLL6V\2Z@pe^;!QobCWSaZ9KCiWkMhX/$hD?!X5`n9&K4;+'"mRlK%\4hCWI$>f"oVPL"U6HEK[k+Q;eYbH_>#5X'(.]R%OTh2#C'Y*#t+$G!,"SV7IJ?2dU>e#6kPc,>2Sq4$!]c[nc'Dk\7'Fo<)//$I^9[K!gStQF:shL(27i6CAtJ"h2!\]\o<2TcrKgS2,$O_8D?b2W^;^e85(R@kb8K`'`&5*kpRDarC%FNU')`';jp*IW:=35`]pf;Gpm[[\fbFsJ>*'4Yue!g5r[U\l('Go-C6tRi"<839`Q>Kg5_kRB^=M+X+2H9J"H0ZVahMc#V[:@so.OqHb:Y[7sU`[=)RjU@u[7`7uE(o%$H=5&OI3J+Xd9G+,:(Alr5'625Se>Vl[M)H[7q@55go\W]&IM;u?oQ24>*.;"M$oA^r8HrZaSem8*8>g+5kd6Yn'mBrd9fgb2p[f(:kie%mbQ%A91r4,_VC=EP?W*<8mGK'@YLMLU!T"b!6#*uTpm;iPop>VLHL%`R!N$@(*5Vb`3`$j#a(jAhs/Is&0)Th@>c-[0JF,_ZCE"4-Fk5@DO@#FucjG!SRCaQLg=E7HGbGFW-n\&B4a9jo5'XV_m7-@?Wp[uM([,l,5:M6>ZD3U>/;Jn46Ng`%2@sl%DS>nX\pC5cAquG>U2Le-]&4>?9$?CJ:7=%%1qYD>D\e6G(t=:S.'aq.HfJIUpL['04N^2iiTnS_H'#-cj\VripPi"T!I*_"*MmOn<1`*PkM<9c,l=e>l"_>oaC/g*ZEhpS-f3XjhWipf;Gp8/_,Yo\q:saWil43;E(Y`Vk?XkVnndR6Oo)r.E=fi/r?*YH[#Ug=;cZfg41e'bm`a/FM@6D)f!$56XQq3.QijL/h7.shV?gMm\7Z8-:K!lai)\.:J[ThI_rm;P0f/SG&`)W37-Hg*gmCd_of-cJ-Z^sI>Ah*Kk%`lE-L4nRFR'6#Bkm-[Y1'Hu<$cI@7K_l!SfuJiI+YheMQ`*$$Tb2>D*I$HdsJS_3m`8(mKC-Vn30$`A%ZRApQX"n%*[O=H(p`O^hVB(TPk*=Xe*&L\*$"YcJ)>aO5TH[MF1Y,miG!erM%sE'XOYgg:$5GL[EALbkO3#\M5B_KS>-QmbM+2a`8MZikkN.+u5KoO/Upj>LP>_ak#/:(6FXU1M:-=ro,5_HS-ls#u;iQK#f<4QS)8e#8W^#"VE=aeF?a+EFJ19*/3rlA58`.84@duo_HXPC!1`C3(I;Ue(CjeAo6EoO4-=ZrA^IRY7FhZ4b#m%04)7VhBt6=1:hMd2WKKe8YA_%?a4B$GnWllE]0%F!J1NCmj8^&qmq&Gh(*;#+m2>JkSL`>%CEd+-[Q[]q81HV$X+T-7-Jp&:.1:G6WWL[l"91.c0!9=q\6k3(E"77DLHJf&eulD#k&-H\"8BBi.APVscJX%uk%-?U*h/`te-2.9(c5J/XIi!GAPYU2^"a"'!^=D!J0N[EuYW?Z("I.QbnsM%pbj#9Rk,.uc[/\Wdp*bF?1t,,9,N;$bqA;)U.fHb]2j_)t*c7kL;335r:ZP1_Hl"co^)lu,:Ul@WJCpX_Dj%"N,jh=AB-'t0YfpRUF_og_d\:n`B/b,\2%^YWWc#p'2p.Yc+b/\:lUkbl0j"IN0h7R457`Nbsc&F/lTmlt:1M4iBHEnO3Tt#(4g]^Tt'bqHZS\N+Je^N9.C`PVhNeHKU*JW)VA&^:l\[7_L4I%#p,+lMsboRDug2aB']jf\37'oK^a)CXh"gG/cH]g:D[>g/]1Uh]')lTa8d@2PLk1-;4%ins3#>`M+EUGu=k3_J);Dp9gL6NY1gV["nX'462gNN$o]Yjq3'Gn](A1hI<69.(eKB_XbPE>4GU.CeEcX4*NoMd62`=FH#SUG!')c":?NUAoT6K1D?mm-S%1G`st[&Jn].4buO0s^FQEM9aEp4E,I.8]3%dd)MGDII8DhP)<$:^<$CqtTuNlJ:+/&[I%I!`fa=%<"H^A\:P[bp8u#0*C28/El>56AUZ17M?#r(9[>T9_@O3X5Q?=fl^1kXgr5\7eJ?tPSDqYl7-aqi&>eaKhW,p\Zn#MV#hemN])8kr'$`3"6.*KelKemg`!tg,h':14U$&Dk.V/@NFTSt5RQkiNIeNbds=so;VK9m]a:nM=i49I&,Qq@6RB/[<^6d%(Oj-2<`_cn1@pXJVl?^:t*oanWEL\M59\I/WnA77CeReuce`Q5d@L(Ze18D6o-cGq@h#Rq^#Hik+&u,KlPG8`?aEA"@4<$848]0QG^'G1(Mdb&0!(`poV!7:f@"-8n*s_fmc_9L%:YS_qVR`E&:p`]O5q.A)k#bg2fc2q"4CCK^%X,/EeMfLPFo_3QlYeYA&_;lq!8/!%3!Pu](Jm#;'?P0nIoXRrJMMkJaoMUOA:7V>OrX-%Nd:a&f40`Vb:uGjp$[(c\a6d/op[K&[d2jc1k"9>H@Pop?k6#pu)fa5?^_/n;J6E(9p?_-;KfgkhTrF`_`_q4l;Z2XmWbMTm$_O#f;d[@#1pU#@(ic8'p:>JX7nE>gp)*AFRabd$2dmS]$\I-t]P@VDLK`97qP@J.Cc41hC?^_e*0Ki9Sq4#@-K^Al^S-G76sP8Ueh>3)1b^+VlfdQX9j10HV>/L1XrX9:PlJKi(=G6qr^fQO`!*AJdh]d6,[#OYK13+JOnf^Ti^0L0ETI,ok.>?fB0d,,KrM)pC)bT`A,IW%2$G>FKfaMH5e_r+Ku-QM)n?\"i0hPKY]VN*$i3BB,K>[r7rgB:+eR?fdJ01V4I%%F,Qi7XVTkRGQ%C=iF)L!sm,Gml)mX3TFbTK">sf=%VrN!Q^&qS`j]&a(Hd5s/;S]P0m*YE+-dJ=@RCaPin,N4n!roo@)+l?#`@=(A:S#6'd3-om%j!H3:t;dH'GhUl_HV6X*Bjh\o(7XZeDOLMG3aTKDVj?BrH["Pmo:4`iR?tFnkVT*X#Gs95\QR(fpT`4O)o<_@gIb!%D.]5rmqO!L9,K`J)l,llf)r@-N6U],nDHkj`U&8sHLah8K,Jk'0./+)?k7!:Z"S_ccnDffpSe\Ap4f*Ld:*)^8:>gWAMP4QG/cLNQj4(a#"+o;&3Nnt)?U0,!105n(QD`G,"EjT,p4V)T!F`*9\oh\O1d7(-H=1M)`e%]>&#lcETEOK(_r2$h',VA/,VCFRo]fOl^&Hd&a/B1AJC?2$?^7j1BKaM"XX+Q#Puc]X,"c5\pEJbM(+KNjU>3&rJY52k_V45g2poSe\A`Nt%d1gWHXLY\H%Q$WXU_)fIlCpa@R?ETdR>nmdW7$hNQ-\$3(JDOM:acf2h?-Y3L:L(Wf7ORUM![mTqJ2=!6?"cbSZ(8NRZIoT3F]R2#jIaY;Xe7[\BGdPfMT?$_XMp3O+W<>L4)=4RoP?pUr6&LW6'@+*,+uL&Nd*RG]P0f.XET*g+GMl-"DrN_GM[O8N<>-T_Nkh2)7a_+Bcg7.(:`8(M[%_`IYc"&2;X"nP4F;3UmcJLD;=']dlIhVg#Xp+=qY+OpLG,4S(\SL2b7S(?6<1]Fm]!397g-GUHb24r*Z,orW2QYhU3u^j65!qSR^`QEc''MtKp"I/IF?-3K0o`H'PK:Q=*VfJB"O.:R4F%Ypqob(JlI9p,oc1i>+1rGs*f0/ooA7\]li8G^7OKBKUrFS-g]PH.VX:+Q%^A=6s-\.1RrR`f2$`K`]sk=PG1%^=-$)tgXhL:'ZfGhDD$&h2:Nt6li:[;_id;rcAVX(j+UC3;-X[fnobbTFSE'pB+HF/*o)!gErM&MXK5CE9V3PkoJVaMo\\:hIm-ONIK"W\pA`.CqT5M1I6]H8H5=49m$Ti3)$^;7F+J5A`.b4;9AJhMk"\\tEEm,^S/C.T9(UGq,r6liknMu:^tSm[DroQ#IS^b#Z687)\%ePOK#G&Re]o4,WqI%<0A->.a2J21;ts7Vn`aaK=['?,JjT:")V!=\?RNpZ)WQW55H%@#(#`Ze7VsaN1q5Wq7T+e_>:2bYeBo:j;QEZ"&DX^23^=CUH?C-2a=h/\+#KjR&TPY5c`bcT;(0Mr\<*&,!g]$^bpg5FO2YT$*=rU0r5Ah0-g*tmp)IdE6Z>;r&34/g14AK+B.p'&.-'T\,Wq>7La7TnuU!-7L]i[^uBqLA6"HF6<0#T[kDeB4n)&%1'e;(m6XhaDkEi!cJnh0J1BLb%lnk*35OGGo3n(hMagm=C+&a$eF8:R@m_B00gik;TX\Vgq=-MX;1/fk.q:=?desQ3'bqI=ol%`F+S85[^ml?JZWJ^LBdR0A>QrOOG5&,g*u#O7La7TnQ5e#m/^1)G!n_1?S_Za!i9q)QQAai^3>#>i<^"A*HGgo_3AKX7^;R'GV>fo^^=32>kOUa`(q(S&[gJc>B'B3Fjm0Z68l+p1bC6)f72"e%(=j>H<'<@&N]FN#WPseY82/NeVCf'6'!rK/o>uK4l@%#)C$g;$0)R3a^.#e1i`*VMG(uQedDZR(f9J[2R!f1pj9Opr.s%rq["?(OPoE'k3WE5]Ir]ef7dL2)B;mFe=;VM0JD'2(X2EKpu]"R7hGLG9/p+fQ?o`WH"+KHi*ZU$C9t3uYr.k_^:YfsRmPTE%$5MR`e[g8!+_8-Zk]bYt2eXcB7#EX`/Xj@&W`su*2`S&/R(+T1%Tjuaau(p4Ao[Xbh3@.si92:X=K!oKl&E1DB.e*Ada?Z&YYU>4]Nk[u/?#)?UQ?K5/21:q@`q2Z'>M%rp$,PuoZj!h6;3RZ-n^S^OW\1\ngkDOWOP4&gd=SRFEN4'_oSj+@g@g;lMMsJ&!K;CKVoFcO^o`J_b*tD!hjRJic=@6#o0/ldT%#^eL?>H@dn[6Zp\k@bK_*5\nL@!(9K\/je&VD;B/2Qp2ZjuSj**,n!60!fVR:l._"ESVQ;B-hR')He_;+i/=^',bM8T81,A)OJSlj]>uXm,LYFdVi98s>FE47N@W7B>\m>J,eKP=Zl;9.MOf@hhH&8jY=?Wl9\_N>k&+\)o]K*N2/PE:'H4X$V@,:b7(;!)$@0.s%I7k;sK7i'$r46M3POm_r\pJ<><]rTo1!JEpm`ID#$W2esR.9NGs*!bNX_KoP7gc@F\F>usCc-KAU8=,TL#PG,NtfQelKo'o(3YJ>be:!<]tKn^o*Y6_o_*"QX;OFa()KY<9cH!*1h:jDIphRL`3iPleW>)0^]F'>M$W(*:s>10%=SG&LQfNjU;e.k)ngg,>qa7o9_8iRH]e=Cna:^^"3Wq[iotGpNq*70WhAe51d']Na*P.0i*6s?$oc!BX$*/NkA;HG:+Jtj>j`NZd+jr!4dEie-VSBmZjc6/q9b,k\h9=f**-M4*(/%N:qi]oIkTT>JYbB^W2(NsEO;6Sa_d\!&CI]p2g:6uI(AkcL:C"854ZWF[s21rRbnCE;k%/,Ga0oLk7:1gB2H:IVmhg5V^EFDu9B\6;-bT\?IBuZTIrH\p)VfEPGmJO6DeLRT'EDq"&o\,%APSnHA*aq08q?kCfnV[bg-Vec*F;/29HpD\&g\?[7j<[/\,GQS[Rl5G/<)HYLqRk%PkN\@/RgZAs2X_Jfp58,^3@IaJ^&]IphSG()HPqC>eLes4XgAc:;k?.La9"6&]#Q(c?J!q\f+oGq*@a<;-(`m5oKc6I&rOVP0[abm\8Y:k@:]G!iVso,!;[&?7<7E$+>87o,$1g`suO)`?V$/l_:1;-^'Vm_!k\\*`#Si@,-MEUU2PaYHjre\`b0PHT'g`.\TNY*4S'If4PK$b%4DC2.M3lb'hR<]L41-69SPZ$4fX&=0m4.oBnoupu)fs-@/Wh`eHM\@ls_f15dAh]+B/#mdcTk'c)TfM[NPP:G0BR*2:hJ8rA),CZrRK93f'HKe"P>4h:55/?E0J;5(MhkkZ6(*BeWU5JHS!("b0s4XAY+Qr2B^W)Ep/e^W+3-7pNa#)WfD-@Ts.?+Y:9\oeZqJp]h'J_TsX$e(;P270]bmeeUOX$c'kX#Gs9h-h0>p<"j7,QcIbNX.CYP42G&+Hh[/G?B^CW#P3JF_S(AZ"4j\J+WZ(V3RRLQD.blL!Wphm7M`]p"Z4em1;LUAMaWenp"/O.1+aqCV,GYM?W.5C*`K%I*4BGSgLmq`II2H>=04&XeoSO$_k:M5U"]b(hrlOAQ"2''\B$Qf;2J$a_("K38<3sB52P\9PVcS`'nim(nP:!d)d*^%W[o8WrMj>uFq"-R0_OX1mVG<`aeHpDk1c:u:j>"-R?t!d6jP5F&(E!ZupV):P^lFO_+E6/6$n;C_&JJ*l-;C!#3j-]o45m^-QO9.H1_W3kB.@G=c<^e0R$l3s*9_Gr`!dQ#C8$PF9;BO5*M[R#^QU(NAo^\k/'sCgie6t>CYWJ@dEdkjG-:e.UY4TQBLd>T10Jk&7i*(Sln]C3u]4+';4BV8!dYj8(smI-TQ6uAc4G5+t$Od[7!fsP\WRPM"ca3otFh4o/kkBZ44H2Sn15L7?ASu,TSc\n9ni$c0ZBEeADko5kN5)-^39d[#s6e9lWaaT4no5.N>`d+bm7,Z:F+1%&Jp8:\[V"DTp]j,\9jpMC/;#b5ERbhh1P_k,q-=:"BIO_'++U&nKrS?lf'eb%aKTD52GcT!k6"FYF`5q^@\_s.j4dbOHO=*Q])RbO:ci.?QU!,phriDhXP/'ubqjE@gqkH>kr?*O>FQQTFefb`I]Otas+-1qiSU0bH5/o0,d-"Z,qNE"-qec2J'NbY5%@K%6l-AB,r,W_e4VW'5>J?r^T'F`CDs&CCL9usHn7a[:DJJ^\13te0$AnEB3RHYFW3p!rYh7>N%pYr$\8q-]lkL,d#pT$05%*3p/><1OSjep'Qaj7]PMORLlPW5(/3&"t!ZgWuX&2\7c+R>lHblsd8R11pRP#Vq__J\+'f]^GI!X_qo1pJIR5k>+1i(ngNa/NMi80j2.?MF%UnuST;o^2>"h!sqnF+f!(Zk@QS9&5b-s[iV15c8Pq*9\\)<>_q(DlAeX-]'8,fBi]+G\snSOZJam*%J;r"Q=?Kt$M;"DUnTGZ]UK1Dd7Aj'99#%*p8U:RpRtpkS@o]YjW-*#$4d#*NS]n5Ou^P)MM]$hp9X)&O8][-p8s2fIL^i@EK\it`Go;s$q,/Z$uq4o(m`D;`cLA98),!e`pUoH!VsoIgs8Ulp]T1mml',<^Hi*!qdEm#[oQB'*X)K;6o5B.n"&=BJ[/_?0\/g3;nZUni,'gdT5@=.CVNiW@U^fOb!A.F^0Z!sT5b.=9aI937-'@:3J.FTOpqJ9o0HTr!ObKE"Y/I,jVsd`Y/>eAMN*3*fe15B@T@q[SFYqZCsL;L\-$'ZN_NAjacK;l7tF6c-\T'c!nehlH7Vc<[sb]C_!K6\UU3r7]`Q<(Ock=G?d'9i,7YPl<`,Ju=qoa!$Z'd7T=t_BYlr+*""&,H]<<=^5'j\s.Q?r5Hi\;A&]]Nlp\**:DQhcMkIS/odTCda^h\p0-2(Bc37La8`od5,%\4hGXB>ci[e0&c-l37^ZE)G4P.b<0%p?@jA'r`dXZS`i`6?GqoQF-S2JglVp:LQsgNVd$3We:#-VmV7omQB]2f=7(E\]X(h5"=]JSS;/h=um9Po_B`8[>kQaIYPk?(_*NCH&+Xh+3oqm-N^5on7.`oQCAVY#l1h-XeM>3#$_Qq@1M:RriWnB7HMXM2?q_,rNRVs''0QV5pC.)U:)u^Z<%k)g.Kb4ZEoSmY$Z?eU_'@E<07%W.]B@W$ZNgMGH@i?XGIII3t(Y;H\s%W@uH-Y#iupdbL8/P(XA(IJ;l\HtFnB8p7UIm@9Yp=T7>I)e@CFu1u$ShmeO_(?oJPD#hH"Hd6U>[5@n568t-a52#j7?ODE%ln8*6kg1uJgd97&gSk06kC%E`#QTE.L++q(fi=7.Rq?--57+1&J`89+>W)%^V.=o]C3B/hsK:'s0noWg9Q(&VjSE1^olkpnBf]#hl]6)#lLG,Ya2)WcSc89PBQ4X/81$.9i6P)7n/nOAQBntES\5X+pINsOrq=a'Jb%`L[XY)eCd:H-F-mVp0EAL?dqr*`G5QDi;<315CfKLA"X^$P-d[LNM*87$S]!0d5Np=CLLY&4TZ`O9qI6?hrDkGf?374p]S*2oCdg>St;Ofrp9q$EV:nADJ=Jm/kh[!\P(\,kQk=LR[T\!V'W7+gNW+_2U(4$PEEp^l]UlTP.EP\oN4d5TYr2cMdWTuCh3gh5hdDnaO!=HE^1bh"edoJ$XCUr[\kD'aT\Y,AO;g,Kb!Mk@?%!M@QQJGQQoTdiVu?id`Li5mlhr'1FUN$:/9jiRlW?Z*(hhtU^E3sSb4@:iKkpP<]*D;Ee,u^j-p([TVJV\=tqKj5r#9/,K%mik)W^p!J9/&0Lf?d?(1$sQKOqrqN[V'2M5=k9BeIF>8[O:ZLSBlnJL%,5a(C*Ur%)R%HXX-RFSm5rRHu%dEZ9/=%$gl??5:@&QJ/$pOLJK*=#=Tq0,o9sYIK%k.SD`AN=qbCEF`e.u`fYF]3pZNs0V.7o)qBGo6nI)igDT$)\s)I:=Z=N;AR:?s=+W"`bTmi@aQ>E55]/dK%qiJ+-g]]R.?S(9WVV6*qTR$kBBR=?*P=e<&3m\W`d9P/r9kiq@9qLtS8VU#G>&S+B6P7.9^mtW^`0>IFZVukWS:G2-530`B$_?W7QF83bs"eeKMk2*?VZ2fO6Lo-:B/Zl/*eCFL"!Wd`N!T!\P!F:)a6CR+(Z,/0JTrBhHaBD&nTkqI`.6'acg:)4?mqc31>3b>8cjX].&o#OO_?Uf;G/?XZ(PW>m<)HLYqV,*?^Md[nj4(ekUC4NhdF?9lSU:+kQts2"6B%n3)/Z5ocUt7iB0r&8#7kTcCC:s[.HcV-Q;[bWMkJUShPS.Np9&`n&FA.!j%_'=T;E9->uR-:n[Q;TT(piY(!E'("\2e=JFhbiAi,/a=5mOTV=:Cu':)l4)1(]o^-PA7a:h91t1TN=>tA#YV*a#Hr9cq]IS+2's%:f8HP%GdM@t-8X$&=Br%n9*cg4RoddQX'Le%%\\GkJ<0c?@"27+4mgh&bTOa*+7jf6FCbCC5X6+F;(\>#g!a[X'd!kSG;#c0s!*:%@4)>2g@>\4UK>L>1.lCZea<%lV?VM+:>'F'5iGNFX^3?b&0F9Qmr>6RSW*L=C`>c/3AS'3$,Mf5%1hn+&XiqSMDME-?;.r2Y&>^!\I]KN0p7kuhBjJ.mQDq_>]=oYTG9=D3YCAt*%mr(DdL%K?!X4$ci1>5rkdM/<3f;45;Mg*SbE[5d3fi^gS(F?$#=Xn)2=TZ.%u!@g:*k;GK/*Zl'in$@1id$h$L/W6$VO.%%dka"7P5Mq)2m=9$,.g.REeJ,j!IYc)4F2=VtTM[XBOUmnc'HImfOaJ:pF_-Q8,uO`StE!%CL6$\jdKP_kX2p$YM,!`\H[%)G'stYHbLA;c-DKMbhFJOpt@Oi3)-b9:;nq`X'`]mC2%OE*>8NsF`eiFVu8HF88OBF9,ac2A8c+/L_lXojR?IA0,-qHEe,u^j-p([&CmZd1NHlV&%[]0pQdYPbY7XP_7hLc]?GHlAVV+CfO-SVKp(ag=igjB+&95>"WQD:"%Vr!/Wj!`L0m2rOcf0lg,FRK_8aL71t,%R#b!fbJA.76GjqdIk!LLl:ZaJ9^c[/NjLdp3BdrhO@(cO#\No6KRnQZMmUI2?>6.#BbY;:i@!GgC:(:l!!qHeKmW($"R@^Yf,"YS99_eC+e'lo5Fm]=,gqJ-=n;@aA,6au=c-4s)rTX*B.0fu:\WAjJn23o_W0.m)oueKDjNk]4+FNMcJ>oCude:3mH`q!b_dsr,U^E3sSI-/dr9f5mKaFOm%?i8J/l7:>I'Y1:VN.FqC2I64)ETC`\9W6(,a^]Kno6q$q@_/?>!GT=^p8Y+kp6,s(\9(5GI-6-],/o;P5k"D*_FV?g)_.r50XVsW!EU[3NSRPd1Zk5M$.urDq.3Ba\pP9qjZ4"gSSIqe;5Hhn$6^4ggpknBRicfk-mrEk%Adpt^/H2OeLM?gEN'd11m,/p>$>7;@.DZrKB!#cJg1Lg042,Uq$f3J1d[>]05:",^AT7%p$"PU@T(U=X5r(MB?ie%iP<=8S]Yn$i<(0d3=*?EE^;,%ZQ2//J6+!7\M-0X2I$_45(^00rj_O\P4TLQNGI4gKs;;i/VJU]GHCI#I,^s9JH='8:+dZ9prQI3WMlcRVLE;o:?2Jlf?[5e?%(h'FenVhlXfhK2t?"!pCIXT*SNO5H$H%D\p[cf!FZ%+n`o?nB\7&JmV/OtOlQui<7oV"Qa=;WmiC%X!4J]@$>kTGR)\U!+(/hC1l/g1'mEtOb7Ss!J/(V'+%#%]+t-6uA6pJ,oS4u"oN1H%-\QVs.pj9)2.$VEE[;--:4(BC!h\tWCO&@fAWr5.!tKNpKbSpF=Q>08BVb@0)q2^F9`>j^7iO7X28.8mDkB1MC(4S%":G^2@H2'bO>)]PlRi0X]K#:2@rI(^\#SM=mi:&r<\LN\\@_Kp3RGHkl<)L`b3?Z]>SOUH@T4u%!'69t@gdWXs7N\'&&jkq;3R'gB&!J89%]o`dV.4q`:FK%/*RMiX9Zc0`,&EC]=DlMp0Di4*l,g)]Q]e5UMPrrY+EMr6@(\5:RX"3Fls^V@ED#h4&nMQ4-r.A7SB?fM;Tq.2me^='lpb*;YH<=1ig?,R5KF>W@,j,[>)?g'7EroX_G0ECoFEC^cEI(EFM:e4=[Q1ZlTOVp((mRgcFSlF7UPXDbYm_Zn0>4fJF7tlo@lKH@=0Jo)]DlZ/;Puq"h)e'iWiFS(G-J=FnT$<mD/@DuI@Z#g>UkUeIfCQ57B3>d6>7HGgLt>"k=rGZ2ZJ*8=6>es+W?nVY]""`*U^UL`JCi*k!3F2&+0qpJI1r3lKW]\E\egSQHpQ[&'j)]?\-Xe$eJ0--9jMa$(5LQN1!+c:`aXCq"V%`4Xc5-lKT;T*F7F-D%FD#DD'Fr`(hpM8ki#36Na)Y*P>RC>G>+$=19bs5C-"N3r>'5HiVnVpW5cTS3Bm\)ZtX^6gipifuVMWC?a[18aqF=5TUg8p%7(1h'%?#!O]*h2)2-_s.2<_Y\)Q8p8.obCd!ArjQJih8$fX=KeA_9boi8?(I>9E\##q/B?)W.>*PL:Dm+&7CQM[qgjLfZ%hi?pn79pl6k]bFNBX^J5`cA(aRFa/USUCP&1K)Ab(NnkH'Vg>EcuJUdVoq@0uHiE2E#_4di@_FO:X)^j6&dT!c$96#"dbNnXJkiW''--Gr]G#Wj8p.+f0/b4Lr7\=@9&s,G/#OJn$ch:TRk'a0[JU5590h[-?/D>)f#=ZmISEG@!IhbK?i]i+oFrQSbQ#'o6!0'K9Q,md;*Bp;%>1723i3(Y3/7KJ^_ETB4L#AN5tEJIfmCjA]5=7F[T-&;jFGM'GJ6r`$=Ib(sq-lLL!=?TNJ"pK[@TQK%VB9nF/4SQS=Z;GL0N<5\M)O1gOOQP91]^,St2[I"I=YIRO9Q8(kj-WMaG,_$m,q3;/R@AL84ZUp!&?Y#3Qqe/U/]d/>?jq81:dU'bqaAhZ/5,JkKK(=tM^V30<`=IbDMTqFot'&_*WtU8+!HVn\OMUJ,IpU#ln5eVA!8<&t1H%!k^G6c(&O>Eo^7=3ah1Ec1[$u7>p4gerMCB3NYr"'QRL=a2fgf8S[/%""X7kr6s)I:=3[SX#^sfTuh>K[f>nC3>^+i&(D@+$((MY&l1d*9&.JZj1p?IB#b*;(QgM]-"pcqV2Q>D)pf2$j%3+mq6$S.`K6UNZ(:GatGFm@m"b^)N6]Vgj>"I4aIfWeqASt=eW^\t$kd^TFO>[W.F\^4_L0+a;4RGg8'4$-\#]8'-9a;tE'1`Nl@UE6m.IE?$iM%kG0RWX$Z,Lk8oKejF0egeS:KF`H,jrjHmaFtGGIWCBEJSiV(HWQD^Jn-MLS\T!D&!YnojM$8edF29F,C7@AT0"CtgMmUDk_rJn+Vi*1ECa!r9(bkn`S2jYOnOP'KWIXB=A%[3\*i9U8!)m/OZ@!-r?4n`97%]\3cO'n.l5"=6_.i7X$TTi+cos6p1LT4*r'71R[7Lr\q<&]u1[K-pi^Bf\p'EJa'3.YJ++7,3,]6CGq!";&u&_BP@$P3/@3jTkrD_B?_jOsPoiXC-q67U4@S8sXkgGQB.V?oDb7C*nrXajMET!pOFJp!U7;@Y^>@+imasEfM7W@XB\,BO\sO8)tI^%:%>#'Hh`a'd_]e2f=J;/aYj,PB^6'%,:P(9eQA;.DMZd+eesMO\Z8oa9]Q\OC):ZH)km5r2"[7!;uH5Sd/=t4Y4]?[qb>CM05?hG9L,bV3T+cOpoUqfUi*Xm]It`J@^32gs4.@lc6ZYf@F1g[0XqTq.21=s$uIZHP]bJ'eQ?J^u]9e;PDL["XZ!k%u2KK=uB3L6N10%1FmnKi$dL>+WZb9L0Zo&+5^Oj$SUsZcCGjgdEAS/&!%SA_dUuVG<\:5?9WRPgjj9](Q']pRf_W.DS:P,"c@nhaRgkn[ibK)puOm"ehs3-7ed,`];"b$TTSQ+,XP1,OSd*B5oaTjO8q3f!SX23EWMaqkQUkd6HE7G%hB&M47%Cnb]'5*Kaa"Wntff3Ul1a2TT=_==g4.iqu)(_CWAo"H\_@f!3uS&eZO4eeI=u#+P\Pt;/kIAmES(7c-sG,X/Q@#KqQW@:O\&18KEMRNM;2iL4$?+`P%>qO5GUI%r^%A:dn'-l7F>S^60)NY?$MI+I3rN#k6"$4"'VQK32frA/!Jco+dAFd4HM7o=,2B7d7l>"U?[:/#e4%X7(OiN)0[0:$pu5/f'\C3d@L\`[c4X3YO86.:P!.3t(_aeeZ%dDZIpWVcQ7]BnOHV9)Z56.M'5jHsr>H/e[[S!!Y[S(=_38&o'`KaaR]fNSIuH(aYg*^'`:*-Ci6Blk.d5k0]K5TgBNL6p],9l%)2p)lWpe^W)^7t)d],ABUOf[CrViZN_+%=59op%h?;Zrdj5eK(U)\Fn)EWpj4g]=\K'<`#':Ajo_'eP:R.PWBQ=qRC5d_;+d`.6>qol'U5>iuq_kk86i"^%%,:P(9eJ72lL0.8*d*1BOULV"D/jE2US4ANqQ6-Qe.:lA-/m+$9fW*rZV+JhrV7?c$>Yt:7<`J,_NCDhjZ_KD?i4/EA.91b@j3/,:,G:*Ma=O89rHilWA&sm@*URF2kEM'5?ig+c+XV5cr'`IXfX,CGaV5dj#Rs?X"9\iQ,pb"9.#rj?\Zg1p.[jpt2)R8`jY`6,^toK>0JYC1NU!a47O&^ehS%h'`C3R05BgHUQZ`jr)aYr43H@$PB4LlRjndZaq2BOo!S9pRGc!+1J94LSi/AC,p7?amiQDodA@ll%?0d:Qo!k!mMTLJ6W@#a<)lp>>Zh4:VMq>[g4]4mJ@cVXb_#tjO0Oh]-p)Wn5sn#abX?q\g(7pn8\r9YL&C=ZtK\JPs?)aIXqS9)nK,#J,Z'?&L!Fl6In82CNbAU4fiXk('Peg0-aPih-;>IJbXa>khMt0(]t@l.+0&r]rdk#;O=(BSg:.UG[rC$M.3*IlG[(`Z-2sDk0iLZW\6fKu^$n4+$`F)as!nAiIDJ3^nD;-uEMrGd;Op_MU'd,U9rM'Ruhmb[j?f(^7M]LM3,.D,?*W*;#h#`]DZuHbCG3mlel+?cg6]@k<(&E0C]ekmW-ocS1]L<4o6f@H9hg^0PKJH]J7a`X5G:Z=9)-1,AIdUp_Q$00ep2A+#j^<%[#"\jJgVAq!W:s+*3ca/6HOA=;5:"?#4!^60%:+Y?G3'%M0Jj56d"-/\%R5K$1TL_2P)94Uk0s1PQsfI/m,P9_Q*(W87.fEkD(?$=>)64s*XEnHZ!@o.6?7R_`Xc&6P)7nmX/GKHnL4$(YZL2OId,Jf=Bk87cTk+Q.=6b/j7a6Sm:3I<8bk%*]t,EA_>#ojFU@84"T=;OAHR1iE"pciY-#rF/R?UeDEMu7pAW]r6e3jMAeO3db@$R><]W?[LZS@pbTU3Cd#89pZ#+D4Zmr.U%TM1m8#m0=.rc-3Q&[3m4qcIoUl:Kb]ZG$_CV]TiBsl"Wfc?$Y@u1oAft6-3PV<(J#8&Vp\PeFn-age'A9)P:s`#5jG_O_n@5`b<),&K)`L@YG.bCl%$NLn(b9bjM2$Ca0o#PRMu-OHTh8cgg$r?]s@8l-Fj]@V_a_FeLNPFRHTQGG#tkj#5UAkQWpjSL%HCU>JpK.Mikj=!`SKYP"^;-EUD7"Nd^i,+EE&,2%tiMak+S7i[Q9:4XY#?u0Xq@;.1T/ksBHD"uK-lp#RpdYs_N;/0f97Gl59'7Q+UpiNX%@kpD=,?m5k>3+*H.nOa^RO@?dW,KEVU"n]1l&$B5DIO5H?7%4h5q2i;]4O;jmTdH2Ab2:b:Br>I$qc9\@gQ:S%]u$agT"TH6`Yi[L.A&G>>%l595k:.RaP\#We*:!8h1IUtk;7M.PoNK6Q;p&!e[nnT^0SAHd?\d4Bk.c=:G+&=*1p3\XNT2o["(DJO[&:U(`Nf:ILGE]+^KGU9q9=&G7ec0]g*t+hV=`QK7W/eJ/l4lTiRPUNcm7MoN]Yon).=O!9AQ_EnkWlnErdA8lc<4"n[7X?VKL$h0O&$p//tKYG3dl!l^JJ;+JCB:2C$AFU?\\?=ZhN,,:i`uaP'sfKCSOP_gOu5naG#G+M"paiq9,a9i(,K1\@Ou3CU`bi]h?hZ410"1U7stq#C[Q%9L"KpDuKZ\0#m9E`,h;YBXAB7`NGFQ2iYMi9]I'USF#sj;@T^J8q:D3[?\2l3pUZ0/c]OjFYnTS1H4C&st]\3.cj=Ku'l;kpn"c6u&1)r?;B'%kFg<\-8"#]R@lBbL^Z!A5)@J-?1No"!ilDS>Y-'CYG\!s#6PD%&/YCQ!)nl2B$`7=PN1U)7[90FB-V\%3if^1A_WT#E"cai*^2%Fsd8$e4]PQK==.V,Z$[D*NG4TLfc2uc^\C3L>WiDN!+AJHQo&N,i@K"3j0SPCe>\2b1Q]u<"B_87/RX$E)o2`4*\TdC.`b4bqV5C+ZRh'?Vg>0LC-b4ElmX7&#/6KQL]j\.N6!e`o@/e$^O9Tu(P6V0pa$D]rT"^;mqc0iW"`t9LFWYen0*s+ZA+p]JA_>"PS)hH04.09@)L+HeA#b6<49uCJ%aZrA%mG]*SI>HV*0Y7dgnd9r!4E4rMCq<(QQ_W-'Y!*G%/ckoKT>(5.uG(,]7+%rqP1h7_2njf]:GrQMLX,(^67/l,02[>g@iUmml)YSDMUX7pf'hq9='G')k0,OkIj1X!\\i7$a1$![$CQO*SchbrE(YW`WE[]oZ"To"YOr)i^*jL*.#S1<9g1NS7m'kkX]A'OC;,&,GOX%>,K&4%ihde38>I7P5MsksC]n537tkilQm$KZ0pk['[2S^\bT'\uQTZ0ba$/9"gU?GY]KCl/:9Pbd]=h3%`>>-U0]F47s$MbMJ2a8$52P)9Hs1\,9]$WNUM2euG60QXM\#TV9F1)]P9*N"#O*WDh_G/khh(6>_ZCH!In"$cTc)s*`IaCuf5sVIL]0@3StQ#Bn.7n&$MJl5LQG^?F5&9-[I/]Cm>nf%.:;Z_tM$.LDli;T=4_K_KgsrHs'#e;(c4`J>o/p%U6+\R&X1`=7BjC"VpVbM(UjdhDQ]Oee^L+V.,]P7,T+gU^+KhL39X02KpMQNq":'0@$l$XH-S5M8*@P7%hSPWOEo@D`Cq67Q>C#)t^jeH)iGWLeBN0.$s8`2ofPa5Aj4B!%)3DI"7:\$K+8V$KctI3&6/]aP_jm>#eNelF+]?4L!OPbj';1SW9&;Q'Kj&,@@Le;L(E2ePYHNim4U2(@@>>C.;WH1VU2Lt^n:_%qn`1=W.$5?!47Hi8_KIej346OCiql#,\De-a@_lIAWZ\H!J;&<%O\f%'p!%^g(f;=n,YPXphj<0Y]4BXX5(L9ZlD\*"j=U9.9jqtO;4\U]@g`l:-ff,3P.;HD=(?UoXm9Ggpc3Wgo9.[UR=MHU1DA=/$aO677G<[)(;cnA9$2;F]hbUrN4DRPmUPlApTOGoq^\m1H:f1(eOdtO_2/jfWSlF7IFeBL8U2pZf;f5h-DNk@6kigJ%FU\dM-RZ+C>p(#2HO?bgMVe%sn(B`^42XW0*QH&f.YM&gg)bd"QPUVoaNp^Ab`;<+W%fReLZ)Ld>e+h^L'a#WBkb,0UcN\IeYR`be^W+WcCQEIX'c6l^/;;chrLjFRHRnS.Zs9&Wu0:%b"Mm9QYdl#ZU]aZN%%dD4gpfL\a5YS7Y80U1!eI/Rr+SN=rX$Om;3jMHjYF!+ej^\cZnG[!7V=GW?uogb:t1b1hfjV;_eJ8%A?jrZ_eGuq-HNhp1>2lQ;"8M8*8IB/[bE&]n&\JWBBIddmY0.*QnjNQf8I>($+[di6%\U`2?s/=c(kUlVMdBpuK:X?ID)rK8s6soF0W2ltQp[jQrg%VZlo+oRhLkl$F!kPh\Y)m@DDj[o,ie*q2PYtL],s'iYLZ^\]meK4kHZjT\5GSb^G9spPs84X]=)^ZO$^/IGqbkX4%8\iGDEHF1-^.-h,?(VLbHdl(R'rZ:F:&e4k/i<(K!HoQ2)I//OpK7[ej6s/[SFf$=#fd7hK'7=HKdmSjh6gLoZr?gEK\Csb4>"DF`[l\McFTjH#c3%BGbdKil-gPdAKd4j=I43JKq]*\GtW8<-/QF$@l#g7O@FSfE_U/3i+o1QUoDkpFS5K(1>.4'`s&1JVT?j?X&_UKm_!qd$KUo5LQIE`A>%#?.ot(j"sLcC&&gjq.8W&Kj!Toq4cVl0Gke"Jrh:]eqaCX0%iQ-@KH(IS;b615@Nb@RVMu!o"HA(@oS\Z[k6ptujA.e">[S/%:rH$n(Et&ui%>_/ZYL(g"2H)lm[]%`'-tI+UC7gA3KX]YmoR;j20(r=LbpH%nG8-6adk6)U#Q;$7ZW60"s&K;1qn_C0!)`?PX-IdYSPKN22="LMVT&<]m)P$E>ZolfXQ0h7i4eZAq"9a.$PZu4EOVE%.+GcX/!74%utM+=Lk+sYUrouA)>`bZV0AjEtR$Q=SZn1'>I3JU.R<*N9^;?QPgNZ/L$ig2)^o;ag-BIEI[tdKRhHofN7?KcKs7:\hOIs^J):?3HaP4:Q9V`b"Y9a^;%E*HthT;9L2(G>e(DJ`:@edj($nbhY!N5kiqgDW3_k['MJH@VC`rE5]2_?>B^9^lgRpZir'W$j0(>::Kj620SgZOoOs"k[PJd/!^miQBi0?M:0X%%-r`Fk=dIi,K$!Sp#:8L)+[p87ce"(c?3n[16q<5,W"/p?'O&2c#Z+LBCJh`g-0mr,jaFpUhQCp?KZr;&,YA5ZI8r-r&6OR^pu04l^'s&$DohSg4kpa:&'h7u^:/.\nbqQY(QfXdaS[gJINGe=djLY5R'YRimQL>KbC,e=,uY.?.to"nb&irc92.cgM"Lhn$[%NR+8ZkD%^W`("-;Ip1Q%EGkTM]h'+06:iA`(C>)55jJ)Rlbk86%PCaOnu^=U///K]BK-GGr(fHR"8-)C2.KZbMJ+NcU'5aTGC6r/P16F141^E5#_rWgG8Ld/q#l-H#@mLr(3@]#Xd>;*&(,!/W7a:S$<(N2a4&Tg9boVH@+W&SUdqrr=jX`fS^n"^qJE-@fo+tg/:7f(i$+s7n`p)I@bV+-1t"W>/X"\)Yq<^oH3YX.eq6bh]0J+T;VUg$=f&!m-6*>3b`s-VQp)E"YVh/Jk(<[h"IMKJ`ub#'$o^IXYfGLN\]RNhq6T!/MoN=m/T33V+&K?/)T+)cNqXm:u8qp[[jIld5%dk@B-V\.c/.)-o"f]?ddH&B&/NGmL1c.bnWiE(.D)TEXJ0.8p;cDCHipSV49HgCqpue1;l)LSV"i'qW*M]C-cBt&gd2G#piF6nq7P:p'j[/JpoLUJLiY$ud'F;b)hL=t@dE+sc6N_L(1/Gu'6S?0c_=U"ndh3VYYBfk^^q`7C">EO57YM\$BFbksRV?@]U!F!!XGrfdX+nQ*0#Oa!fc+iEIEb-H!NEq70jW.f?9r4)rXU6eqpTGpYqpK+t!cRm%Q+QG.:+dgL(^UG"i,SPEFZmQTXlrDM2YW%9%\:$GSFR.#nBun@(%]ZNY=HP58$d:)>b$]^#Z8?2aCJrj/V=.<_P>/93>oP+5PE<1$#ZsjUj1u6I`4ZK;'>HoACc>G]H*$ki,1I3KU_F5j[rS+1;QFU,&2X['&/>op)]L;?+Yn_^OpfEn[@%tOh0X\OLSN"dA^jSRX[B]iDj[%35&-%-TqVD8@V*H=Tnt+nVPNe5<,?N.UE7Cmek)B'O]?!KKRGQ)KtVVHTF$,_K*6lHS]EX>1,-4LeOB]Y\*q[O\(^3f=-=`]O\N*Fufd#'\=2P-DH&5#L>=OY9Ug(f^p=fe].[VjQKlp]cnA!"^[bRE6*^N$.kRDmY&d32H*EXaa@*S_A[&FST\P\f3N"dHQ5s++0c^Os6fAEKa@asgF*nrjGZKhnFWOUJW?4@H(HqY#j"R%9GSF&uV`:_a][81H1(od=Yo%OM1IFQEA@rC;?o&fc6oOe8[m,MunaiFY70'n[o4?!-p`?]O8Gs/+*GoK-jBdJJ+(*JlK"6(d/Z&L@j[9G@Bc'Jagi(hER0u5hJ0Q]5K[9"?Cu(4(c\-*mj8qm#cFtk=4U;1$%_LEPclUO6p]i*10"O;'j-#S7jQqCoRl#7+$p%9_Zeq<0If\>YM*6@I@[Q4q(D\M\]qh4]r/3EUo7i&[PmHeesM'GIs6p17m'eA7:?EeZ'9RCmoIt>]FRCh@qVlT$jBac2HC-R)4h1PcD8=d>qE%&U^?;]d8]1_J.5lj"3`a1V[n)V3IV/lj/)!fl/R%q8a#HjboAnIdP.W*8;K;lqkX+e)-bb&=KJHp7n'HNdSAbB^a#>-pq+F>l3bHciLR`,Seq5N,`)[Bq@jSl9F3*&bkO-SInC;`V-HMIM8;>OqQ48CqkPVJ/K&O+R/j1Ar_9ahW9eLD*4XHM(es*fHJ=TqQ7C8/Ih;8UugF0aDX5qZ`BSLDb??gZk*GP:<4'C;1nRufl#&TQWh:YnD9]0[Zm3g'kKHSK)JDtlQ0V[(u\Bu:cR7BquhE9hF"\^4:eY?+5@m(-7AC06LI-Pq"U$$^JVJZuRt"[+HP=s`n1[;ul:Y+pV*]"EL+!\O^J-V>kJSQn-sn-[qk4+*3else'?F`e-PBD9qL2t#LFD"cA4g=eTlK\jH@$kh@0oFqlQEA>?@mjUYTpjrSa@2l2LDicefHHq8X4^3ukS35]U^dpg['010M,s/MUa]Pk-@.*9r,M/_lfBgm=jFXeIopRaRj=E]Rd'UlJX/0B$pAl,PR9F:M0US@gX]p#An3@4q#iqIG9b_Q.0f1_U11Oq6=+0+(3?4o^Y#rXt]eZ*MpqR,G%c#/0D/JZU\*r=tBdp@k,-)D2M:\Fa]Y*1C*Q?*c9.9X!$7Qh(#D`*N;(JZ#V'Y1hT/**Le^W*1iXmh9-71(D31qpuC>OAl[C:2nDmC1e+$TMqG!gNqSX`qih)$rFg,cSs1,=TCZnB8-%?%Z("i?g8J!U8]Zmm86s5lOmQhhjOOS7Qm+f3[?)6juISD86N0&H2RXZ!Ekj<0X%nSBE(!G59'*X?`%e/cn;?aqo=n54XnG\QG2eO!TA@!Eq@&0rlh4$Dd'deH<5QF]m;l;Y'g[?gB5ThaD:7_:I)d]=tB>4i?Yc4$n$O_lJ0>8@OUrcQ/r*uYN$GS"DC%DQ]EKCT7MY4L[qbg%aqR%p"McXi4;NGN:(31Q]@h#"<<`Udg/7-Kk[BV?",9eujM2k6h`KCU"[M[)Y.l'\"oC`:1B0C\AgCG@b"BTKrdeK89OLb76LQB;*Kg>;/81.2/oXj&7\MO/[Gr(f@I>($+[df5!(]I=?""E;XLNEsuG7F+a60?kX4l#W(M[iud9pIOlZoMV17'9cKKIl<,b3f%Og0m;831#Z6->DV@p]S"'-B/Go=LD7!oq\$_2I\id@c$sZOKT-C6kG&lR8V5J:ADpSEGZAU"F*$(PV555/VR@]X8%ZOS_$fSdn":XJ@qmTL:T/k@9iK@EQ[&LY:#q+Y/?1UMfO:1O6]n9K\8kS.n7(1ILaG%K(#:hco0b+.TJhiigpqR,G%U9]K86tK?gPq0IQFe([B?j6u,NBGm$,0MjP:[S5h;*]N`3--W9!72`RAut539o.Se62O<:g9]V*^+4O*`Z627E6N&$3XuXfCN'9i6oj)Sk%1H9;Zu4<c*V4ESQqPUTU<<]5K[NG/@`a=4,=g]?"ekY-V_6gi^&%B?0eDAeZ?j)@s3SnGl];]=r.,9rcFs)uId5,k8YY7nGd6>HJKr4W/7Z[qJB1C8DPBWd+SrI#rtXBW)!UTCGo#sT_lmTI8=Fe-+IE%&U^?6SCHY93@^LNF7-'9"K(,9=9q7sd#CYZT$L=BD\L4T[]u#.ah%!o/D+?1mlt>IQB*\H72Ma]s=F[0n/`8,72,=tH'%6@921GbM;X0KqXpCeOVM4%\^h=J1nL44-ueM@YI:],/o+pRSC'jH(MNRfH8h^-QAIU<_1<`a:g885Mfs6#&hg\(@+=)Lqgof8bEBP6+84aTW_JG]H*$E3Q5[_Ho6N8*o'\LFDcS*Sij*AbPu6E&g-oRAA9`abAo%5>V_q(Oo$0`KCVX-I*d`jDLhWaf\aU*aOXL(Ta`BWN3#qqZ[*!\p!i>#m>L";6L\R6k7$ZNuKgAbf-EijpaWTP7&a5S5<3crVPLP/l*XrKr.9k4F:3]ab]ut4&(HhrTsh#:RjFhn`gQ9-W;(DKef/jpqR,G%U9]K86q'3;iKMFPZ:2Ao@)Zn7RQ7edP@53Xl$Wk5ad8/?at2<,gJW#!`mf7iRF?&BO+'Gq?I/O)MoHb+$O[B-sE7Bdr%F$f^:l%X=cJZ*_M(XH2jQ_@T0^VFO\ae;QN.%Opf?'2N:t7Q&HolAk?\?.o[(j^b1!I9oE9?h)?;a#=eBUpF7XB*S`_s*!0)qfRTL>7i:*au`i:ISl.&W"q.Mm7't!&7O=]B?A^8/a.oJg"\eNAs2`fZi:q?&BpEd$&LGi"V4)F+?:s[Wc`-?PXm;5Z^_lrZ===N$J_Z]_dLKej/MK%(,/m/kD1jO\=`ROpfpW1Du#bBB3iep1XUdhtfbI#]`5Vm_]Rpjm+ka^k095lJ0@J84%&_t^=Y_p'm+j\N-jhh?cj4a(HRkqa9pr:P;JGLY6H'E!eL&^s!tA_]KuL$la>>;cfn-Wq;Co@dA8!N.V%!rn`.]a7?-+Xc]t3>862cuToB+;=F`itI"IVX++r>J\#q3]jKF`H,jrdJUEaeaA0`m)u"^-L*Fl;C6>#^!Rq*[[tYVTA54f0U&(@M[LaX(G4!+#BXNs:\p4+Va8p]'ZT%mq)2V$7Xi\eMP`&2plUie&YA\*75AK&'6k3?R\Y-b+T.[]'&CGQ!YM[m0q[/*6CuZ6s/kdlKW,XJSp?F_f?0+Opc\)4-:VJ+OEO1Zqsp%*HV=ZJ\omN\Fn[jBi1"@3eP6"/P-ZB#$q'%>CYSQ"U/@>-FG+&=^"$BI8.=REMLOtPVO#3h*%MD)+G-0P#N>]\PR>?*qa"W'e_#J%-59^]F+cFhr3SUVPC870_[DI`.2k'<#L&)4Lr8u:rlEbo]X\4jN*JSPTY&*aT\C%/QOiNF0qMqA8'tuWRGOCQ`o:?ShdE\YMQK,T>,%Gdi0k/dd:t),;K*i.Eci/deY6,Ssic&eLoW?G:]GI"Md?eq$1*3d_(YHdmN>PdY+ji+r(RSt.t/kigAEB#E&S?"u]4UqJK?1S\+QL..9YEqok?co3Z*e^MF>_SSN.44F8k6G3^A6[j&AWpiS:/TLm*qeb/hc8fD&s@t\)L(`OF_4*VT4*^!Q-Gq.eunB-^7Do.`Pmm:_/f5KH'@UN4B#RAfaHh.b6jIH#RE6S8.cY<:\=t64-n3;)61,!JVl#$UW$$-hnWSi\;3=J;fd>.c8>T-sNEWL]^Lm0o@OUONPa;9\`+;\SVrpBRt0H?HUKU18tDClF_b["uX'b4g-`[c^I=>Xe9;DP#j?U!O&R6:h8+:G`!od'2CWLpX5d^LJ!qCrMk(m^DE7P766=tH'%_Wh$KStV.'q;Z7?jEgc4P=Gjm&$n9+PbcI?:&I/U$rTn/6#TMr]MNl`_J.&h`u$=B\IeG16;l4-`Bi?#=Tr#BkC&5?8tN8)bp0lGZONUl23F%O541sR3reQ*XXpLL#7C[*=d^+[VV):"F1&E/caf`6L@?BAt_jW42V(=T1;H5m`Qj$-4"g\#$Ji\m2Tn]hW:O#bON6+r=uYHpTa>@GKgcf%J"Wq."P^h]?LB3=`m`+UKR&NNKBf-p%*T(IY.iPE$GtB]46npsrM'Ri7`(Gnjrc@!()$1DsbCqJ\[CegcKeC;sg2V;'!18g,I,ZDT9AqUV\V-9qB.n&NeCE6?+L+ZHi"Aa6kU*BgYVAW7))=%2Q5s-:M^OFN;_F&rJR$j8rr>0N&7]&.nN1FdN>Unh6PE^=Hj@_j<+IfCQU,f!-]XH[D63^"pl["X[&<(T1;;RMs18]&'"gPP7,heoG(2?9%;f89%2=KH@di]+LNES%`:P=a.n8=N/j#D`G(d1)PGD/!(c6hCs3!0SV-iF'V^?D)!!%\5]jC%2*O.ZWXs#gUYm6%]:]PKq\qPmkG"J2Qnnn/;e(Q:SCfXhgqhM9dg+AE\T$TQ&u]^Dgqi[2htdFN/gqLE/j-RVonQaRgXc(h4hA),YsXifp.j^NX2r5N*P3.+)S^Ro2_oFIe:kWn!<>cNQB9;CaUMMsfi(Eg9,^0Ga[K)E1rqp7<8[_OUJ:,0gH3!@8g3cE]oT>`.9]bX?,P(+\[.&%F:blPJhP%I:G.HWTUs8Z(G@23%qn5\.)W$;%t%49^dV\^OQ;!iAF^bS1+EjKr!Y(g1*oZ[^nKEJ]D'2=L6OlCrS&-6ZF%^3)puZ4VkEJk7R;A`K`a@!-V"05IsfFL_&UcZ@0R\W[D_o&RM!F&N0?RZX<3NqMGoloRjGFV67`03(+1KmD[i]gFj;^V!J627`5JbM6F?IlPWKr6u/=p95f0n27bl?IAR9F*i(S-\('+rEZ*@S@u";3G)S?-q"Nf1!!-Cq"qFb3I>Itn'=jbui5l.Vj5J8:iULFNoaUEE@VB.+ApEmqZF@3*$YCuG]*/ElOce$'K*C8O[`j/111qsnHWp^n0gS,1EWNCZEL)oV2Qd`_5/6]U>BP_C5Qsr__&tNS]*ZTa[h354Ck+K7JTklIGe#8O)kR&"Zd1'A43K[r+PY>%(sbL%,#jla%B\T=\?e?M1s7H3Y(U(R7SJ.GTVfVi*1Ulp;r,GO3i)d?,;rle[7-B?noYJ,u^FWL9/VA++FF"QRLmnmeTDQ;p&!s5=_=_"rPc-3"Q[EaA[ulUe=).NXMUTFMF0;]7:*-dh"r"b`f(Y>1_):iQ+j2B%4`I0bKMjXQ&r-5-5&c-('o6=S"*hP6uX#DegMpFBbn,=l']jXToprfcMUr/lS09ZnoK`.ILFAM%EnR?4FJ/cq.lBouNU@6Al$$p5-kBS^MTSL.mR+Vt\^b:?u"6n;9^]8t/bKVf3S\TI59=:Yf+G@?+21]5b5$af.a.beB+4+=&''"Ls?p_hk@L>hBMBN>m7_3dQ8W0_eq8Q?3n0PE/b'G:VU`?[>p`jOQFWC?Jk/PG+iY`S!EAMl7O]ppaJk9,9lcWms_%7$ujjm+iK%4PM,\dr@=iUABh>'%2q?f=h9D7lUa"i*@[m!3P]e\dOYjD1FNDAIC)nCsjgpg92ms7[W+X338:'eY3TUn7^n\PV?c_C70ceRAPj63=FCGlCRPle]SqAOXdlWnP:jQ\DZZ+;On&*b\[OV3T+cP+6r568lYh]RR;bo\?`2%lV9(_YY8U$kLW3*_J]djT"Q5?DrnHp0)3"s!ul1;4IZ-pp"j$ZOOZub^4_Sc*^K.TOb%-D;O?jUT:G.-M8>)[gPm$PiR9=$Zi3o4ikt2B^YMR:U9.XMsB'7,>oP+E,n,tkDEp,l0@UKXcM9hK+lh+:Me)5f:G1-1C*3E9b3:tk#;-da\Qet+-a@A,h%FI;C(2+;L5^fX9^`19MAra<)J$T2D0@s5".nEK!4b]T5!bNr94,TuS`1Gr)AIJklc9n:5+XoXon]PE1B,hA+"n=m(*'h`G3/Pc-U6&e&R.#WlC'6gRp8KZ:@?iDX3B8Y%*aN3.)&iQ4CoG$7Y=#o7ueGl)g)i*a4RnTU##YF+TY=HLOoO]"8r>6_c]A%[EjR")`JudX#@(aA*X7G=%qsg2)R7=0G/ao:bWn%P!K$889:k_ea#"7Em4:bA7WHr-r!E1ZMZ$VAN5tEJIfmC)I?hu-cE`d/JcFO$Yc`6$aR3O6S>WN1c0.#[p\Mhpe?uXOFINMJoBoTBpd1(1NK1o+SJNYNe!\/MlW>.D`]>V[Q,!=e&;oQC0QbXB0A]O[F^qmRsN,.4q/Bk&#/j\lm,ed!-8hl#+OX5>!hXC6X,c$aKoh'*2A]n!][.UM_-tSR/M+RO8p:%jMb-)]0DI5AFRr_OqL<->(THhDKWVGtd'Uc;N)4Cf@OIi]]J(jqa-V8/LAeqt)r^r$U[^MC+1O_h(RGa[OE&"pLI4h>>REPL75fkQ./Y-0Paa,=/V,lDtBo>T$h+eqE1,(,$:u%0"]D%J&U7u-?c%.+[aiFk/f*%gdhT0P2]BB!btPA7,^c1gO;$O$"4@1?jiI[[5TXqHOE^IJF0@)Y1,j,ObEN#Ci.D$o4nId2,sZmY\[a$'>(l`<`)_^1:Hr!I49mGWEJK']fdAoXW!&a,1X/WL72=nRiUh8T04l@=_]KcrpS)/_q`hF_PO94.Y\-gF!gWG^3^'[=ZU2WZ&u2dVE//h8dZ?6Lr,6e^O9=L+i2kY6_,7"0--P^RA"Hsrb8g?M1/';^\q@a>s(.i,bI1K%*BY(f,Z0!8hLMog`7$cG2b2t:]O(C-q[+8+)KZ@E[7G&SIgan@*h<.ZYo-kisX!_X^nj^-hHP0$PGXI0K":8?la)YW"+70K;Y?ENn2(3Qns#oGAj#(\W]0s=3Zp:9c"=Yef#GD9q++tH^<*<:XmoPQD^j#oZ$K1JY53KKqEko)>9%;:7RCt]DS??O:0*(T*6+t)]27>St*K8=73f8)7/HB)B*='BOEb+heh!Kh&J+f&H'9hB*\@l]5KY]JKu%LhS"u7r.BbM@-[q^b)f%07)m6cP?#ZA;IoFDfr9;oqW,uIJ=(o?a=ZteE:N3&1?4""Pld*8EAFiXm!/WlF,$OtAN5tEJIfmCR[h6p:(#XZMFXme+toZqn>o(bkp>"gC#5di_:Fh>H#c2GHrCPH"*BhV(DHp2aT\AO2i_b".1-k`Y/;$gd=q1oF^H#pnN=@TE:DpTrBY_M"^;r;PiR8uF/GJa5C:Z7KXS>=lgE&Yf"Z[X_eH9F>X\2Y9Z+!LV)Y_]7sfHHf!JVbHNL#>DV`Ho2"jps,#(>T*J3^p-!;RfkV-T#@E&/ScX0q:A>Kea'E%V%"6c3^R^2mY%sd%sc/,aPFM^\NE4Er+)7,?MFR^K^Wqn=Dsc(niXW\_)=)iTd^HP%h_"8TFcqP6,;O8KJIB(H#eI+'8#e:$id0]7:,tq-F\Cb9$,;rF+dX8g-/M(6S1LA07V`@B/eDi*.hS)8@2XqD(KdO[*\iT>FDIkX7Zbb!!j$U$ONI;d'Z#I*#9J!$!O_ne^i1Dn+R(*2LqZ@Ip922Y&t-7G6I'*#%H%;0kMj,g8AFb.oKZ&0ScCSTnW._,o1N0AeJBk@`a=X.5>A%;u:0(3r(Y.d:GsD@l"dH=ujc(@sN*G#7i+K]oicpkKe?mEfr#X6:*IN(Kt!HX/W/s#6Y,+!Wot/qZFG):b6naTNI_clLd75:*'tGXfY=p`0^qCJA-5pQaV^/N/LJ^83?^WQ,:!iEas8&6pbD1A^=\r"UnaS\*mB`,W([CHs6IU,4!-]CBHpA:*k;GK//4#7q'B3q4X4=$Tsk=G]J??&&gjQ[dcJj^nV3%H,p.9k"VW-K\Wh]4H?D)2hB:!?d)1+%-ek]Z)+;%M6UC8aKV:DIeDe(9l1C(grWl&<<`=3=dWFo$3MN#+G$MK5*RUtrA8*_k_*?RKJ)W8*"TFnT1CI]=P23U!c-DaOpf>;!q_)'r9'P4&..IJLQko^L%WWDZ1f%\b?R6$R26g?1,dS"+)YK%?(P7%JV;CZ?Na-to$.'W?+_?/daF$H`B>#X!VpW)3BNLb6k1+J7uS],[]O_noOdH-23A)VHCuZ7'0(]J;1i7VI7;6Q''jF_"NpP5_1h)(oT=J)E>Gh)+um7DVZaj0gB5P7%`[.^QAGC@i!?m;1>oF;N8e.B0[X0Q[&rt!78tPTLVhNR)gHBAhL3LAYdACY@gX:(`!_ofr$3ohS3)sIq^O+]U_*3EHf/oB^k7R`>i*lA)dURQ_.%rjJoro$02Em>X)RmJ"sY0k;ZF\A5=A[4IL[:/kaLHX1oS+;1IZD0>IFZX/h_ZRk$j47>5>=/i^JQlKIHm*BAj[,[ak*\W2l5*&A(N)A*j`U7q_DlrWYja1(9n_Po=b*WZc>&4nr8mQYfH7UZQkT9_hiG5](&j(9X!J36FW>*_oQ_YG2r@q#[%\k(q917Uu3^^"E\8uiZf_*]\sE^;0gRu7'^Sc]4k\qNeDZR8RJ0gY"g%(&0pO#g2^WTG$K"2IaTO:n?oL`U))=%r_UA!XNNc^o[pFd+7)O7WOjki5"q0JQS+f\FgVXm6dcBi@P@q+a@2lCPE^,MqKgjP]kHqm[$I$MpZQ"X-]I9ZbD/3Z--V_nNb/G%WDb"/oo9t,$<<1"o=nkX+:TV?(SDXYnn)C8`%X>4B8f_gJ/r+3:&Okj%HZ$tXe[DCuhGC7&9'Z#VpHfta.`q"8-g[?V'>jM[XX\1ur*.I.aJ`qHPG.7%aCE9qV6'V.S3Kk]TE;Au?[51h8a_;5lKFl&gu'^XLFl1#75d5bPu?\);1Rhm-n&dNLd7X('99IJj:VlnIrd\a.m\iRF'r]bc(!>`Z%`W?#$.QG@)jmClk1gl!J=htCTsI@7q4n#5nP?hT\)\!"[NjANX`7[`)mYI;2X7X9\aQ-#KMB#Hbf[U]T:Cph!FComN(0PHTU9J0>5A@#nJmN`Nsp<,1k.(P'E8XJ2I0"ND;qik.*pc7k^2^=-:7jZ&qW-^4aA%;oc=1^V]\p^%1N2^\M[@9;Pm<7f/Aj*8)94GR&QVU(+Je9rkb0V[orDZ)V^/e>A-Hn%)#CR9W9R8>*t@hnEBHAJM$E,Sqe&R7RbZ0t=%WM221d17'I=M6"kW:eq>IA4pQ="n*dF7[J/#]GHD;)R\>Ar9i:?):>7ZM(,e13T)UcO(CgK@*m`-s9i/I`/KKT!tMeu01C*7kF[5Et-."@/B3PkCb!!g.+<\WCGPB6']3ND7;[NObtW8]`Nid'*HLqYEKb;21)JV36gfs2#+mnVMe7ZrTd68sikVYBf]bN(i+>\UcRP*ct(uFEH`I.9FBh=%iH6kP2#Yr_bt>(Oo5`:pJH3jX]TO7:0`m?(n6sH1o*$Y0NGV(Tkfokq`_V%(g(H"t,ONjtF=euJF@pIcn/!)b<([`ZQTm$d3>o-@g]qH^n"Zj/fm&>m.e@'=p?ere"QX.GNnY"&C>+-AZ6`qEFBl;Z<\&7;a2d_5a/Q!NLK2^eQ>?I>QW"&"8%3qQN]:]'!oIoba9Zu,0d"BsBbif"I?D+n^3ndFL@AMa.G$P_Q(-EoX3]h1:g>oA(\lDU8oQe*%n?Ma.>KKbZ#6H=chWUrWQaT^rf44^dnBlhps'^VK3$'YKZM,,bR[^KuH>uU/?]=-UiXonVEmH$'^?S`kj3rMclBHS@?g\SO7%oM]Gr%#05Cu?-T6XqT)-t=*80M1sRYo_=_D-FV9E:(s%NpZ(FXdZ[/Y.[\WS[)khX_ZSe0R?X/lTgj9!<#`>bd%@cq_shKXa@>Ze^f\XAjg<`W6%Q;s.^OBf;8pV)Wh*GpMAL.4mQCO:hkPq=QNcN9BY3DiuR*`1fkh](I$+l0F86HR:*;`50YX5I*?$[;+CKeR:ZbOhU5:_c&[aOSgK%8fPol:U(@$Td:8u9$i)qfb4%:&'IFXQ56rm:Y;;Q40?AGWAm;=A./PsL'%>Y`*qc@h&t_(:H-9lPin:`!m&03bCn3!73ch?62AYGP\P9).g*4:Y6V3FKajGRE/A&4dn'q_ce$Y*hF8%F(+DC:+[4Slm[59aqoP#)sY[JR)Yr9T8Wl\93(BoA=_i_*NJifoPNWR[P_8(5[t:l-D]:\@1F8`i2t5&linL?Thc<"cCY9Se]EHs+[3/NN@&/O3poDH\l4\o$Q/p)I.tL$;E-LS3Q.?]4NA?35#?iH$3OWH[t"K;aWo.a!AO=3@h%57p@?$2O.WU^Q-"9[a+^4'`,:)>mH4_=9fh8[[&>V)ZQIEUD>l(`/i!3`P7G9C/OrT`>>W:rma6cr<58@s/O^4'Gk4rYm8/NNfcQ:?t*qE9bm3'Q;0'f8p[Y@UYDi=9+goO7H#O/HM?j`ZY.Sc/>tf[+LsaWmIn4:_hPLV!+TPM6sm0^Y25hTldiIYBkqMUIu/C>g.iB9FZX7-4?O']?F?+bBk?;ALZf_,2A,\`j/68t/:psUhY-LF47aaLORQbLFb<(NcB9`,^R_U#3M+'!8RqgJ*-'B(`0pLXu"@/B3!/`e15=8nSifdV,E\_76]19oe>rm)m4N:mtJR_OiMaYV)s"Jmg]+,ib[r"'Oe>8b/7#ZP?eDJN:JFPXrj#-28sikFQuaE*q/2fk^+`tIE94>O;h&hqhWCtjOm@@o*lmFVp/6a\i&XKrPSEKQ[2DhANNOirA:V/Z1q1T3C/>^4#Tj]_M9Q&V17;eSDA*;q+-C[S[4tKZAPaf;WVhnINirWRGUBJ!/j6(A^/tH7?Q7#K"VH%\o3>mfta6!#Ia4*;\6e/h^cae&iI\%KYY_0n`1IoK_c'qXMF%\.,F0LPa1F8s9:+kWp!*VfPB*0'sTOo&qPdKn50iT:YDBen._CrQg\prk:aHG&Bk$r8nLe.r?6?KkK!q/tDH[s'EsKKsANW7"e6rI>p1!NB;",J^A+9abd^;WME-t1Koo_r>"pYd&W_leX+Yb5@c,X2Coe=Y9)Q^S`?dKXel>>X*]&-'`?E^p?L,-)eMk/g"!(mVeoc`YB[-#)[koV]1&Cf)PW"M%h8[k9ea5We^^hYN8@8!__dKBCFhPe:Q@Efei%hC(^4":\O,pbWO'R5.d/u)%a(&89B-O9Ga,k$5A:08eG+aXM_:Q*_I(KYpOcp!k,)EhbHL`^m6Fk,m=\L+Bic4SQtC5F!,l]k)W6T,o8K8n"9oZJJ#!]iUs\BPq:Xtm'(>Zpo5d0>k%:qO.G:c\Ta)$ZhkPN:7fdsS;^.;P3uWPcsp7:*_VH6PZr0Z,!#@gNje^DVt>4.>YOaX9,2&4R`@'d^/-pSqrj`FMQOc,3KjgYAhS)VW!2R0I6E!rC'cNFS-ok1]c#I@=S'Na:E@$f/U7<F8ih$1$rYMV*l\I[oipTi?KE`S8m0$r4>=uJ9bqYFF*s8N.1\anjmWM!?u\TPs>d&99bMPoGI=UBM-Z*^O)XfX2F9kL!#pigf\6,A0AfV8Dg;6]*_s!`@Ve1X`iiop+Y1mhVGARD6Tg5^UEUp%)D-70?YI6V*NCQi$+Dr76u]+4iYPJ9lKHLsq!lULW?]r3X\k&#QKg%FW-DXOX\[-cA>l]gWikW:T8_NO$?g\1GQLU&Tl2Q$3Q^Z=V#;^/3_aS6oggKDVMbhRA:So(V@#h75Ji4l:lW]GXW@]mR$q[]']RS'q@CT^I%<-!P]ZC0Dn:73G)j(r]r-r$32B>t:Z)Ds0R:Q^(D$[/aV/7#Ye91petC]ZcF/\-u+_()b:Pai(<\IcJd!ZP0rG8sWX56I3WiT&tc<8u]\^5\m>^J=0bQ%$KURFSikAf2QAKl?UF[PBnc7]PXtauXm4p]Ash#sE@2s6=bM]fBfU\0'?r\%iO-ab?dnQdMihVS2-#g8S*.s*Su:p.@?WZ@#eBY(V,?L:^k+Is?O4M<&<8)j%hMc,tO1hKCE=Yj7@:jY:f6q'*T,:Wa\FIQ.pKj0g5]OW,o9H4s)):^g7rFj2d)b>EMR^_>IAoND)IT9GU2G(Zs$Vs,dgs]>5mD;5c2FaN>JWRD:b$oKjufP_i%XM@Ua6l\l"tqk\#.YI]BBEY&7`bB32"6VPY[lb>1^6TJf6l=#^B@Ysn\X6dGFnN8t$\GAYAC4jpWKl.WNmJdu[h](NQFp$!FX[G1FLc-5B7e%;4[/JSolo7Fr1eLdoAkEY?lVL?.6Xfe?`a(sh-+6cM-AGJjhb2VAY3rXsE\^F';W(Fp.#D1EDkM?P7&20>c0Vd>$BF9S;hU1KiTpoWiaC?l,t'1t53Xop>Y;khsbN)jcVkX=Cr>SXTajr9-oJ[&[+-C>i:ib^^G'qfQi:d\Ee#:7>6@WEuD@^VnYk4>_97VX_2K;Q57m/8f@t($QM/+Zm5rq'&L68*ddueT+lagM0pVl@hS9n+'fI1ItkK>>nJ6Y)PkKLRKCP`mV#/+!r&"]3te7[a_q=TQ4WK[.e6g?Pu@#.03aH_US-@HE1'!ho\BXi#ATri]p2[aB;"oQQ/jIhBC`hS5.47L;gBYflh!pDtMafWe^@FsUBd9D_o06[IO_CL:QrPLRdj9-b<'K8Z-Ih\;Jaj`E.A$>1I4\e#pD;CKB<1f_#0.=-'Y:NDGV7KZYT%OBZa6SD+b*IrC%&#W=Jj`8(u+cDFHIrAsY0XhtZ0P7+a?]7UXYlKHg'XMlNO@*u;r5LFs.FC)X_4DJZ(meuD?``;#fX?/LdB.l^?4>&f@dP!sX+^e#Xn:pGSj(90nTbAWppuBu)!kjpgf`P,tGtb!n[DI.$SP;7iFUdTr_Z!gg7Ch33;:n`:ab:H[EAnGZ;G@0C%>hb?fVo7Ef7aCH'(RClY4MabA.1*[7RjV"9)2,!>ulI2etNVTo%boXjbo;ccbu7B>!R?S>l(CMWMPpH9ga)b0SAsfHo;ofnl/IUioTI.E[WZel>iI[rPq=PGN/Vf3/[DiKccs[RkK%PiHhJEkmhQELPGV+:S+RsDJj3$`XOIG:ZH82l8-U@E*HjhCeS4,\_EFH2laXuMkXkQ5'1JJTp'Li0'%;^pn8+'isRNNi&>kQM"f)<(A"G^YA]@?hEd_?m)$0!ROYq0c/SJ%Rn\n82)Nh8La\J-Fq[I'7.B@,f%bS=nU)^t#F[TWjqkW$&H=Ld`g!PUUVVDaS7;s)OI]XLW+JoXjQjVSd_W@q7p@eB_Z'kqnX7s0S>rVgp%-X/Y-"c0kH-<78?s"V+.QSmR,f&I_(/A]G^T7b)"5E9fS,'!:F9.h3BLo89$kH)1Zn5*%^CW$bp.[3IVR$sDi;jMrqNcQRdd]4.KX0SX>fjP!'E#"*;'`V&TGXJu/#BEHi9GoM_iUWOji4F:Eq'EC4-'AWMK3X.hZL@/,f@-p(`U[X#'3Cn/Ya*?TGh`\I]btDernBd'/Y9hm339O53ET,dFHCV.MciU?nN'ZQma*HIM$$FnPCjc&hYl,'K_.:&.Ff]7#_I]CkC0SmK&V5-\tZhFV1!F>P:9fRQ*>gNCe(nLo6c8*R*YXdVdqr;Sg#ld<=>H4hrX[QVs]b]2geDNd7qeE4J48,7iTY)#jsfqnRPIJQR6lF:4`[S#)MHM[IqXf^X/?d)U3D"5+0l:Wu"dU.AFP^8hR7MY]+D;Vajr]'E1E068fOF=A.TaY;g$ST%EY`F%qTZ!V>r!G)pLjpnrY0?'3JR,d/W*`h>/L(J.U%7fq`!bEs=Cl)BL?`\^5)Mu-^P^>lIS0tYA`)af04[Z=ea,M!=8Wsf*c>G<[gTstD5au!Cp8,,o0j>i)XUb[C"LdnU2::M2NG5qEsm'O^O0'E+4G*LqG!rG.YX=4PPL&C!5731.ZFmU(uR(]$%oIZ21Yc;#.,kVOp0%dPPp$BD&:V/TCIjVNUli^B5@V:r#06W*l&fo%F\\O@?e=R]C*qO"pkg6agX$@2o_P-JJr1t%$;oE#Zm@,Q5%R1:F\Ss4t2qiBunZQVJN^^m-jcq<_X/i5K/u!%9UfI$+/LdW"<3oA]!KXNV].u9"O]^l/EO2I)$THBr('!1@d'8DaH]JL]\WEDSDI?kV@DdhI/QEXL>X0]"Pi8\H!!#X"if[P;bJ#/]C$P=kD;(:+?f'/VBZRF:gi'=ZW@/Qg\iIr4JL),tIj_rZ^1$%Kdc2iq%1s-L3dI/Q^X2?Q:Qa-;eCcD!ID>6s02/s'K*khlD(#+=/c)Xjhk"(DbFUnBrh@ARYc:^4eC;uahk;9E+u&7Sc(2Ffc0^<+)]P^:2"*,"aPIPDfb9-tYHtWMO_(WH^^$ok]tL#O4uYDW"W\hf?sUB&4cVXN4C8>O$YB)O?[0\HhH_)JZ?Hu^1[=t;-TgNOZ>7j5\ZUO+Bc)mRS-leu2bgM#8`/a`=eS!Ju9-M?ZP0ZQW7:[Y3%)(k>&cfB\;[CN`37W,E8XmXm<5FjeG.\>(Q5@"GHkK&\=%V.XW8#Fu6"aitLGoi_%SK4LbjR^jIMWKh"[GOj`kg0b)dlbBlUB$Whj]&mU$]#E8,riHNdKC2,!D"IP(=$&K:Wo$*?tWE!^D*#>kgD7>Yr,Q&]oEda>^In/A,&5Q,r!qeR>c;?_*h)Z_D$M`7h>bgqV6AM!7gsPWIq;n,`*\DXUX@ilHc=Rp7q!YZmU(8$cp7LJWq,7$de7_CL'G2[&@"'O5oIS?(=a^3atc?tabAeXnIKY\S400V6W=?5KsPF<;RIK`T:!KYg(oc:S':TO\]NTB*k=?9NVIN.D!g0M?7%>9+`Td-s3R)!kKIM`E"X"`@Efs7I>]2)K.:l

  • S\N0mLQ77fk&Tk;9ft@>Gf5&[iQ53l\'p(k)Y4>4S;F#X4tb_#^13*#.u0Y`1"jYPIO$7IXk043q=591TA6KHX%Q\t*^32DVRCHc;X#G*bPhTXng,)#['d;YD!gf[]\gl^[,A_CY3]kMP5+[XP.CD%a3V7V/F1fjEu0[Ef`WC;*[uq_cZ:m`gc;[p*'.OS[CKne-@VLKOU">.o.6efrF,`S:5*^C7]*F5&i]cdtY/k?3f.JcHn(t1UZ$f4$7Sl(*'$gbk\o[D\r@>)HEu+ZlHL0NM9>icm8R2:.ZQXB-&4P..7q!YZ7LTk>JD%V/*u,NUQHe/J\FtZBgK<4pB^>$=)Tgk=/5GOrpF&*,UTUK>j_IujlT%Ks\I`iO!YtFr3O"=sH]JL]\ZfJXJkD:Xj_KuFK&cu"iLpZm,ldpAZ5&_eK)6)=p]Ctr^O4;EeI`ic4+DYX'D\*nJ*+Wepn9g6b>VQJU_p6@=r4LstA!oL4hIcXnIoC.TH$h62"7o,^c,mFR.VgBSq.tSo+hhqGVQMj@h1RkMW#.UVkCicl:!VD]+%&k0WT\`[3#Ff?@sZ<8ujsrr1@_C"X_E[k`OY:Q\QTgQrPbd2;t3;^)>Idi^sBEthOVQ*[t`iW!^UC)CQp)cIFOdBKJ_eCo>d:s5l[PruSK;hI-jH+2E$NKC%>]5TA$N!se(kD;0$OS(AFeH/f%Z)Uir/`Q4\2#>fa>R*GUg!RNFp8fQIgQ[_q%Q/BOZne6Aj;1R5mm9[8)!h2?4IOd;$D1VYfV_q`.PGRPnFC1Alk[*mSQtsMG+aepnQuWl"ZWncr:Ab,NNDq9Qh4paH\*UC]\0@$c,t1p!6I>nPuEN2/gNsaj`WM(aq*;2mp9nZY,0t8Z-(h7U5T_T>e$'k>[:(;[:=Q4TgWpPi_]F7h8+kE/j*W>-'AXM='sReCEUckM1C(mShH\YHr%54pQ?_Lml`.jj?hV0D2/TAR]f-e$'GZ%KnhFRPlLeLa];Z0$_!ODP6)Cre,%sMB5:R=>sj79[V=?b]mA`,I2cD\%oB71<8],?."9hc=iS7MI/+-9^'5>^m-P5kNS(XJ(+3VZ9B_/3WZK9#g@#g^1;0p80-=VE*_bY[N7R`UT`.>:=[AX`j\No[j]nV7G7Lu];j[u>4$PFVF>bF''ltU,'.dSf[`CnSWc"ALl8I0QqQ'COi+c7CqZ?6Tq]@qD\ZK'c=(.Oj/??976bEikQ``V!LN]dg^4sZnYGpX>:%URN2eZ3$,MId#6>^Oqo=W?W+94"E!G\1/QS>K@hf;NC`gS$oCgAgMmLfHDVS\g+VU.4G%2))3^ra4!s7f7b76ujHk4!oh37#F_lI/Nc%:?]-'gEuqEKa5^'KYg(oc:S':TO\]NPN9SChaQ,(CQ#pTeC=r.&Ba-Nj;dmMQjH#rrn]QB+B9@.5$Sd6f>II_cochqhFbB)b`)B.FXoOJc1j\.9p*^)-urXh4n6>r7MUW2e9n^,b:V\86NK7e@6XCQ4olDU__G4+(D]>K>\Td*%S94on_b&+WK\a?[]1WQ&MB:H7[0)Z$TWN1*2n'n0apJFQ+^,^ei?-]k)Y]1?-K(P):S9!B@Tcl;1Ag`_s34J\FD'A6]"%"O/>Hs(#>B2jchf>srO]uiLc\#5.T.)c8??1VVchg!Q#.@B1=8R:`=rNCfXT\*LN'ME7MisW9Qp#R8XZBp('N\1_j9!<^\GJVuNn2f8_u5!>-t>5OkRZ:k4^o-q\r%k@b3^#9Cr@U!cZML)Y)[D3OeFMsjQ+s?XT%0ccEKB#7+jSVd6g'`03fm\Z.dcPeZ2m8RBJ&u&1KZN&/?L_*;nd5L[m)rG`Z/q-p3aQX98M'8iDg;-5WiB8_pd%Jj1q$`PlUOpDl;@/EY09]D$AOlH[9p7o%(j4`Df5.9U-$'\O4aDr.AA-!X.+=$DsuKaK&c*+Mbth70;\WB"MAE9Uu\?bZ7"J]$!=6jkOUT+I&W46sq4K(%7F65bpoi=Yt_^H%X*R[/C!$'cJmIcAfK'^7MDbVrH$"S+LtZfYL01r6LUt'Ur>e'Bpb3Hi>\O=/R\k?Zb`"_EVoCk."B.(&/TJ5<[\>l/\#'W5WS#,`2:HD&]UD.f=a2ZTS2.W*eB#g,uiG;_P5/5J2LbUh8_,iRtVudQ\kP\9%*\(MVU[kaHk0q*C\LP=ug"_TbNm7-I,o7>A]1B[^cea`h,T#MJJ)?s,QSpH<%qpA6FIL,l<.R+%IF"d]g=@3)]Yj8HAl7O;e'$CN.7T''h"205hi57)X(Q\MUj#7op'i?oFM/[cs1]rRI\rR?-h[K:1j$X@OgNt'Nj]R=eD_;k41T=lCmq5uQKs&u>fiOp06RRBMV=C>@hG^PGO14Z9D>X&3Z4>&Z1E54Jb/W>rkX)@NNI:Ql$8;+hTfHliEslL*FKI#I-AB6R+S1#V(_`/):T-RGVK%02kX)Xe=eIZT(mg[3Asl,htHItau5Ong7R0Q;ou<=kV;HrM5:iZY#G/L@op4(eB>TKMhmGH)0PB.boCq)beX\aGF`9.03gVf8"sM[G*4l7Hjf2p,s)g4>aRX!ZE:72r:LF49.g2mQJcC%!!#j$M3Km.TU[`Y`2GEq#5i8go#-'p6]=`5Y26`?GlMgmAOnF%D/9L58t3VgUd.f9^O@E8bg!eZ8B^+T')=n?%T^\E/grXKr)J,q@o(GsC7.:h6d`9FF5o5`MTrA1)C"5;c?:f,<)lpDneVJd)b;U&'6S.CFL3p_hV61+S345aDY$&5_;.H+Xi#A2GEhIHi(6#&)s/[Mn,i$,,0n7qD7KFaABUD[85r\TDfG&oH.!Kc@Nss_,2l`QY]7-3e.(ik)YOEP\YDP5>.&*>SN9dMqM"5)j2\b4'J2L4?KejV!!&6o`VmYl&]^a6.0^!2j!RQeJ!&C%,]sP*2Hd01#*KA"ULE10NLD\(Cn%D"Sm,CKTKOt'egXUH@r`_eBatoA$aQPsOp_sURac**[!#DJirmDG!FGV+4HQm0t+-Ares1HY606$Hj(K\s=[gm@B$R7rRYK=s+HY7\!Jo\j*4)jcWNd(8Y8ah?TggDU_[=&i8>^0YsM#+mhu[m%@.?:S3^F&lZ2`mj/-D3IF"BhPM"R[6c%q==1hJqf#KWNlGc3go6^%;4Q.OtCD2.KG6q2GqW9fk[3;dW>46gM>UGkFDncqM-b2Nm8.G<^fRS-sde#>3eK5V[b75:RX7]Yg)>Ih69Zr`D`<+A.$%J`:3Nikb+_Jm[q8'P3eq:>$Y887M4kU(#!f(Y5`pCLCQ>l-h"?lN7+e!.]_8E8_W'm=F="6:iBA.3".S+LrUVnf5stTsX@PY5$W5ajGPtcJr0f5]T/6r-:Lt?Vd/`'I[pFO7,BHRa%!\0loZWH5a3Shl!V0/_OD9m9A.Uf@#\RD%!s6Njc<<$Zf7H0XtHtWc7[Yr7p"m:+ctAe!q1F4R1*CHuWX0'fKu@rT.g8_7j5u_=t9FUGO54&;[%k`?lB^GO@$W(H)6n!.\Mf(Ocs181l"rM@LmJ&;Y];OpeQ?@)Zg55P(cFPC=rfF"Vj^SlhDmoVl`[Z[Vp5#pgqXYDuQSZjTQY"C&X=IZ[(Ic71P4/a)LTtlg!4ZYY1^7Q,Zhk")_FQjEF,%6t\o*`kcRP2gT`;*%LO-:nuI!]lW,pe6p]RTrf7LMa>+A,l!R9Wk%C/nq\W9fQdF5Xh7qU><5ku2jW!rr<$5`TgB(QjI5!Wo(Z5]QmVaB'Lp+XqsHJgaA$^(n.-Pq73rHG9'R[P_$"XFlqV(M73/khm$rReAbZ9NZZfWep*2Jad;9`P.n!6>U%r$'RN>X0DG*Cqe*&GZYY(M![GjodK/BCY,Y`Xeef](=OHl(gET4p8W$iN8+M!"ND';!OnG;fnqH2RdGr*eH/El\*V+R!pJ,D%IRK*X0DG*Cqe*&GZYY(NPEEO$\d6FU\e%fl_O."\VsZ^"Xl*]Ti49CutR<(!@P9UFKtmWdip4Bl^R&X-!<3oZ*qZWCpKM(/8OL4L(9eHLBu`Q>U)>,3F?rSre9:^c(KCC9163P.F4F_!!!!A6_[:Vm1c3G$c+Ug(^SRLrpisHl!#2C$5#ZLE1V"Y#*WhG!OEZ-[9.h?ED^ZmAOI;LsB?m#!>INTn60M)rJ,gWTI[oH=iR4PqmdBLWBk_Vc?h)+Xb)4K9jJ`Fc!!!!qZ98eR"R/s%r+egt(9nFPhh$MotePX,->m2J9=r0oW`jJb7gp1t*EMla"]_X8-=!!!!a0gacZ_o'Bm=0Jd)Vs!I7rRYD+$/Hg+&.F^0:c]c1J5DD*?uk5fbEiki:(.O>`3iEl**p4%dGj>Z$aiV-z`RKYR*u6G3<2N>,$O_k54*KOE'VKOT$k1q$EMLmo!%;SQ/g-B(nk:ZHAnJWb\Qudg8Y.ka8kR7YZ"#"',8Ki:!@TtVdaH-p)n0V7/ii6)]m>r-RqL'=/_")-z'PkJ`rk"M`Q^X@HSN:o1_o%UG!%;\N6UOqW=s\8D!/_\X$OA&84Hg0AhnOAVF%](rOn687k0+]eGB`m]Q^O8@LsHDn8T=(N2*0i%]6:=ST*l__+*2LEI#\1,!!!#i7,PJ#p[5/XU=-D_e#92nTt:C,7H`m^UYaka6MCPSW$/^%:m/mU\T%#o4Z>=/=0GrPs7SX+rk,/,kIPg%5(`$i[lZ2lf?0O*ZcB=_85C#l1-K-ZY%I='.4Q1hZ*WV!!#WSX&lL9\@Bm'Y+qb%FEFn:h#W&#E:`3d2`J4tY?q[n&V)'Zj8qY>,1#=:<)hAcM%fK-DeWs$lI;e3VbNWr+!6R@;PDTdo]X]njicK9h2`O9P-5&Lio90SR@KdP80%d4!!!!IWTYV7IJ`a1FkXsZl2:AK6?`Y7$J4IeT?!!7J*PN4TfWZe7?7:9M2!T)o+hnK[0$hNlW=M/nKKaS^Xs33Ge$1QlhKAbZqHN,X(\s+9!GO[Ct`mgtdV_C.9z:`@9l`jTX4MPV0NS3mhfMQ*8A+CAJ_TmHf:V#'cM-N[*_\\1jI^3o25mXF9?Ple_N+$Y4eIf4R'%hCJ5@U^4#nB]1mi@04A9tlK[Z\T0N@qcQ)uc!!!"0AS'7LDr&!I5QPuleB-Cs=m0/lzPUNfAZ1KnX,SJebgP:H8A7T3Vh'2nrQoAs?N#t95hnFM*G6@mG`'/\M]PuiH2/CbKh%>1cjlt6lC2.Lur:5cm*.f=_g=Orc;Pd!#C21G/pHETV6rm?Sd%(5g!_Q6a%h9*CnF/D_ng$EB!!#IPj2[5HeueQ9oK7X&][2'-.#hE=CtZ.-:SE+9z;!NH-r-A&)h=QD+,SJeagr#Ld1V])r%018UnH?at&`n`%O[pGOQRm/?hU6MCbYPSuQ&UlC?CDVG9o!!!!1gtT;V2f.,SDf79AM/(YF]jes<(GB)#h'i?F+$./#GOF8!H1ThHgh+j%)&sV9'c!!qOH9SF!8f+U0(-N+"7+RBp[[nGnF3(UNupS%qQE(Jl1OoGCL(4O3e%aQ,6.]D!!)M<(GB)74*I^!TqT'/HFIeJG4"#ViPPno3s>W[PEqNCDr8:ZX&i)d2U0_"dgZ9W^5\JGf:4jB2Jq.^',1!"boG-AMhZt@JUrBQX(t[6'Q,r9z!+EQhqpsEPGent86?`P4zAGP8H56:lf*$$%g,#RIEQ+alEDr88\FJf*=!!!"lPaX[XY*"hYmNDW3!!!!I/oKISiT&rsX]dTE8EA^ei:$.7o&WN<3s>Ta!!!"qaI>,,N/W^CI=6h;#QOi)!!)(U7RkD&A&j<4)5=%,Vl?ZK]mKLXYd!ljh[A6nz!%@YTc^nugCARAS4/"_;z!!W#H?[mc_KQQJ,79s2):JYoe^k%W1Oe4gc'"VEMz:bo_3q9m'o@*t];6?`P4z']>$:rWif:EH6(t*WY:B$?Wn/->kP!!!#[=(l9GWiG@[oB1hq#QOi)!!!_4ldr?;q"W@?=]6RY91qp?86!9KokDmPSNVg=k7U:/:ffr]$SOz-rm":UK(;oGO3s*F@Q<2!!!"lR/--YhmR@Sip?$5Xf\_&VUi1mgJt:Th7\/:k^EO4!!!!aiVNNIhp'EjHhZq[F@Q<2!!!"l)#NpN5BlSQ4_W1b@q0#287Z4?1O],lf\"i8N!uDl"onW'!!!@lQ'Kmp7h5t8Mc[)g$/HBtz-j_Xa11Fa']tM*rD/D]cObnpOMi15!8BBPpDh[Ttz!%>k0Pq1D8e`5ZKK^K*GzPX'$dBI>/T%1Nb(2)Rlo7mB5Q>ISJVh(Ja.!!!!I\>5oG9himOM\ccW&HDe2!!"G+?G1ZmIJ\1((Dd/U"-H,bB4j/?g9g)-kg,kc$f*Z?zaG8BN?X$Z9Fm.0q1G_tn^&S-5!!#8un`eN#W2QXdP:"h[hH>n96GB"Dl:Ce*qz!.6"e:JYhEm5&D##i-'mzJ3nJOk09NIqPdQ"?:ICR,*Ag5`JR$;$jd7J\p*V7cs6_R!!!!I2J11#Tr+]qGOJk33s#B^!!!!qUbX\\&ebop04*GJI=#7*?'.ZgDJhXOd%Go>J[5LsbiglU?XM^4aiVTD-RpV2e#,u.G7X`S!!&\UCtuNt6MCri!!!"l&?T'>6:F=SrquRYG6@mG!!!"l(qY(bk,(kB"q;J]DJh'>M0*l_gU1feVckf00n96%\'Vejz:aA7i58=ou,uGj@e=5p:g?!WW3#!!#7rGl@J]FEI/T\\No@EZsK1"YD<#"2TTjVMA>BTO,m(IA0cn,K#/l68U<$;_(SM*PWZl5"saub'FMqc/gQSf=aqd#>Wdl:O*uZ7>[dQPD.]Y7'([l;FR@1ME,8]bi`.Q^9n$h"BVQ(WYEGS:/m[ZeO^+!]QB/d.cr9,Q/_d[N`4c$8fbqVMTWj".!WW3#!!%O)Gl%&HA7VKsO,o3W$\hN1U4MA,6CpG_!C5V*>i:3.khNb'"%Df.oda&Ss4fqJ:H'mULfJ]olqFsq-M5!mF^V[agD1lj=LWb0%-nhkGo:dC?,Z$X[Au#m5hCOoZ]FKX^[L?No4NCe)];VW;N\ZhnE(lG/PW60Cp"i5DUY^tj:z!.Y].p$,OV<7LL#bD-KD;Q!81F`m4'YeIi#ZY%J%NZG`Ge#'Xb\2S?_#i/3'hN1u-a:h)s!%8hM$XBps!h[2uDUOqLY/7c8hGh"0hDkL4^HX\LeN1'Q_OeJf(qk.Vo$P@$F`M6JVPQ7J_3,LnD]P]VQcpOIO!fo+b\pqB?tXq/+j[R#jFWhhlK.eHK'tPX#p^;ez!0lB]Nup#[\?L8MAku2u7n6&O!s<]JDIHu$WDf^o;l=Nf[OipW$*uNT^*'t:O=-,p!)PX#(Uu0&<)-Fn2^TBG"rK>Ma*iSZ3m`:]2;.`L3;4ZC##k6,Drq3)RaAETWb8/;7Seh8:P]pP>a87:9L3"V[1UdYA>TK^L9;0-h>FncY*`!"+MB!Z08u3_u=)9)E8lp`]!%d4%WCdaUE,[tkiLTS]8M4JHAS8!aE&pa\^7*eCVfb4;?`3kz!!";IS$g)Ycd1.le\T'f>?dRlpXIaD/M/R-,gkT0iL%+UplmJC&:8dT)gPXWm,,K+\&AI#cDCqmYO!dP*r[.lKN=4_2GEUge(I_(,g6rbT8on=B\n.WiFJRTWYH#K7h(G@DeB_>B]Z&d>&5S$JeVlN"RHR,'L*4mC/j\NW(_T>MOSRE9U"hMN-`3'5819LGoUTYDOlm>Q@S[,T!tP:+fAE>WdkTH/[88c1JMkPPY$VmcQ'q^H'W;Augi:=P'KtkAg^+F!]dX2V/%t>f^t<81rs?81jlBzPS0TPICan+H?a\EO,o@.Za6L)V2C-;SJ#[OC"_4o]"#7pH[E*8PV@;K.A;F:L#3uBjSrPN%?u5[m,o$_eLNS%YVS0mTW^H#ghJ,CI3B0l'P0Y&;S%F5G'j[\1)0UmSCi&Iri8Enc8hXWLL6A5i-5SGo?3oBH4(LV.%df_Wn(TR)mHfnK-ZH7]-PpZ+qR(C"k'_Q_H]]5c8kpG_1j3t*.dZ#gebn)A>ko2mPRTR8p3=/shoVkNcp>t)LB@6Vim5/#NTW8O7.9P\q2<>#`iJ9GO)sdIZ$fPgA.Rc.,SpFp%`nl,i_OGRFX2`nk2*k3M`JF1n^M`b,jWdP4-q2;Sd;'?5Q,RsUAj%'cX)J:],\SD]l``.ITi6[iR`?qqZs=liQX_sZBGGkJK$!dca@;t]0Q&"C^#CoOp_6iz+@B11eq42PYM[*EIifc)?+Y8c]Qiu&]6?U9(\49P,o>FQN+6pNo$t.Knac[oQg5r\$RZF#1bpUl?)&m=i]6VdKqX-h,o/Es0t\@8PJ?m-^F?b*g0=dr'p\:U9=Z\Fk?PN9HA+4g.8`L!_^=sq8aTVZu6ZN3)1'5Q$z!!(*D[r:.N,pfh\)dHWQ*#os*[C,fh3:LR"5fQ*('t`OYf@U,r[&f\cMFE^=m9.&MeVrcnc)HB.;h1KFf_j28Eqb]E58mK0l-VPZhT*ppgr(.Et]*^-Tk.!lqPY"S]R_Oo.aq3+*@9V4;G6@%&7ahQtRN>``#4hA'3h;V'ZnE1EaP!F$g5iIf05a73mEWH.?z^>5\_T5NJrFn">*bW3cq<,]fMY!JQ/^QYuRi*UIL5HZ=M(K4aSeg^5P(IPsOq4/u66BYHOk)Xf]]N])RpVN4,.ROc##')f(78X1oL`PE!"6C1sfsY7k'`X?VokRMf0TDp%/[=Nm-`?KCI0+Du1&MI3'"$O80BDNX4O45]Ql*z!"'%%_'(9X.NfkLgY:K9g"Fg%P05h(pGhsCpk4EX-RC);p"*P;GI_fE?HIoUahQ9a/fbrYl?J9Q8*.ecDtrnr>(-@\f(ADdh[03qWRi?I>n?>W1o=s<\l%3_%4USp>#G+H%6nlkT00W?^Yko-K;n?PdN8*=\)bDo@p:FPQfh0=+TE?)_cI5[X(;Es$NLNhj8u&d"Hj,mz!)SpZq<+@h2fA!:[r96C(%1MXmG#+R;Pf8.M@(kh3:TT0IfXFI,Y%ig!cYP417j*o+Mg7%IIZ7rm5EfsU[RNU"s,?=O4NrL(T(@uKO4V\R[qj>7r8=3++qR:C9r>YI\"oCD'i'9D9kNL/YAUpjWT!m(TGKgTk];)/3p"TSN&!!!!1grGHtY?eaU&J;9afeO'KO,b5BeuW"Q;tJlqDKU&Cm-O)/SXmI,]_qa,p[@!8Q/B?+06FCU^#G;^patk94g&X-NQkM>7>H%\W''<0m72@oC?^b,CU>ONQN#-/c[:>OpcP)k75`ar%P@2=8MjOn^]93r0L.nI.N7h+LqIPz!(uSMldot8BKn^G2`EZC-RVP[93"tlM1Lr)]tFLL!huE`;H$NCe'j$=Fg4fVOp_ut%;OA@BbQ6,R1ut+9Nnc=)O48MDp"4Kr+ku4'KpX-h"'Lo$#K,i/KN?keH4=Irq+5kDADoL8'[JaS2FE!jMKGg].9A;5BS6,.2WE)7V)rQ(B>-Zab;iE:KOH:$\op4C"eOKFD*em^))1gjc=Se)bhA<7&[L<\GuU0z`QO#I+0JtcIc/"m2/Cc:S2dcDNuiH0f%&6u@i5L\%1Og<.jl^B;56V*T0GOc,U=]`-8d[Re#,u.G?jAH]B$hc!ukBXai)i)Ob6s8E[L.GDr83X8bAQ+g9pYH"Y(I9427DeUT5A>]O@G&lY]IN^SNW[qH>`J.R=DfT9ohio,D;^c"uKNl(hCK.`-EWJGaOBbW-5]S$_J`Hk4z!0h;9Co,4oaFJd@Df9P1(DfS37nZKJ2N'E>f%-^r:/4Q%DJhX%526E:)&X;YpUtMpIrYR`%"[I@JAN%LEoGIhk?>?6Qp#<9kLYP0*[)5.c/XiS:^:qf_>Sd?0lWfX3L#cQoY6DU*t10B:cqBfs\S^I59(&aD&7&Wl1184V[=m:1nFmb#8<8CsF>dD7gi(M#HTHRiXn]f[7sG$W,B$_,_klJ9-jf1q@5/p8o)QgA_fVuh+oaKQ(slWb$7X-$Wez!.`M^j2[4[WMr`l;'@)+r&GeIe^_2BQ7>q:khtCWm-IEL;B;dZnd_9VIhoWm$@q1=6CpG_!C5V$5.U1QpB3A`9tSu9\/VF(4Za=,EgrJrOi6Wg,@,Y:$cYU=Pr1@`W3G'$,/&*mb!,&_nZ7hAM`J9>?:t\c.&/0;m-%lk\9@Xg/p-F/6<.%YiQXaf($u938;hGdNBB-f3eB9dn8BgU;c?u5cq@i+A2g"@5]QljiC!_n(Gmtu9hc%_bTD=Zn(O/HRpSBD4-=s(h'eTVAsI3.UHM*U042'sW@"!DsC3Be#idY5r-i?0h`O'jJT\G/]K!*CU.51_D1&La^DtR5`f)Q2rn%_Z+hoj4Utan!uPXAiAh$]5uf!['VZ(K_5-6UK#2[+rg8o`)1TU0Hd%;JXq_nD#8qk5i^pt;3BZa4q#>2YK5#"94qSMAF]S;ET=c[5ESV5:$Ufs>>eo&\oPO71W"=3Hm]X&lLMrSE*mS!uK#3r8aNNu0Sq1c0=7`f3KL*kcggihK#)<:Hi_]Y$?FK30\uo(#CD8GM]56X_j7>X/Q$,SpHFY,mcoC2/oMds#keX-WugiPIT@r0kt"T$aU7gXb+*s6l4a\4,\naEs;;?_$2/e8ZoaNX;M%Q5\\55;CGZ0"cUtARTIk@r91JETg.m/:Gb8l-W8aM9*[qTjt%CKV/K(6Kq!&UI3P0Ao3a0!Fa)Db+j#0`ma<<^W'!/VDz!!)N!HiO*D_hSaY1G`NM@TKR40m2d2J:IV1%hC``4$>_i0(5I1VIjOVfsGJB:7XET*BJ<9m+L^UXc&0uV1uOk\Oq/$dd>eu\RX%%FmIVR>Y?m?^ZV0KLJK6)*Tq)+:>5R7ZA(BB]&XHEs^4*^6&]D6fq5.$q:2)1m6h)fu4C]69Uq&q]-E:ZtdCiVi,\1CrM86WECC6'u2F_b2sBkdG@[D&6GTA(l]>bGSH5?2rpQYg;:RK#X/,#:Tb\p!Y?]ao##o*_a6mc0q%ODYf'L#T.7AEW=-Fm8*=qfejRE@"..z!!!!uAAA*:gCHOHOHu3@J,fK_.oq=VKFA\O^t72IET>')QBpkB#`OLmL6\$hK7efKTAPuBIQ:u^Pi^)Tn(=o*jN3TG3B<-B5CWY3I;E`$grTn^\TSbi,0qf/D-;2*81B?BQ4g"eHYIt!kl(kQF7,!L_G1',G.MI6/^8AB6UFQiODJd,SpHFmLr/E,UYuX@7uq6GB.0'_RH_SfE0+hIm;oL`7X"diAFkooJ9]]U6i1;#5XVW.d>g"E.DfRMcr#=Kd7HY_Br4Egu]\31423TWFeoF?>hH<$*`Z=IGY6R_T(HI3s3X,p-R'LbpO$3k\mCpGhg^!/Q!?>aVlE`3IWD.'DAAdtii?-kk5phT7Y^b]c/6:]bYL1=,o2F'?TgP8-cc(h:V'SH+M$uu#EfGp9)"/f(FTL^n%q7)C=uR/F`)"scUM.9j!RCeKRp3khk%Q`JsBnYB.&$6F&RD0r=3W@kV$UJ;cCT=M/@[qRVHRMQY$\\,Stj_\5KlOSutFj>O'edi8`fbAu8&45##N%A[VTgX*$3JZ*&!'hU7Ohf]@2%WdJ.s\GuU0z:nC@L1eBuR6*7rCM%2$d)]KaZAdtBg4ep/V#iS]gTDPlWL#XX/OB_bsLcq5&8BjpX\a]T@p9KAc/1o)UNsSNTNS`LGEc]`K?Y.KN2O$q*1N'?*(XMMYHXGk]\+==MV60XeB_QB?DB[,UKU>bV]NeR9S+1TEik!C$QX$1#4fgTCHuR]#igtsB4MR68dFXAYn(YjI"sB19:u#oMB;,+c.ILGKEZlZA43Lb\8b%qCHs\&-z!!!!qT(ML/?g=me@^0$@?(G:=)B/>5d::(K%G.agb?+M.$SNSI7>+D'h7]q/)qU3>HCg($.lI"l/h_SMMQaYfHZegp2/hWuf8ii*c"V+_hW7&@qtRR7jmUe^AC;V".[f(d#(OA2>T4a4UPk22]@1[_Vb<##44\nRT;TNPMb`Zq(X3ulbEK96_LJ/KC[:@CC1o9"L/d$Lb@U%]^7X+>Wo+DCj8sis_83rfW`5B?@7"!qQK"@5:G0;0SXgH:Gr9Z8gq=fd>knm,"A;+/QCV^HYJsl,H@$\p`\EOQ4d&p[YlY952eZC$sIaRq2*lFEFr@!SmrQFs=5SHRg9GARrneCXrdLt2[n;fYNG*;`:(jOSddV-e?;r#\p@8<99H8e:phn@Aq+RYW.Mc)Op_6k"U>9*,SG:h[C3N83HO>B)`Qj/<./cfJbV/*aTVYEzJF^Y+d8<7uUNPnRoB4Fq:JZK;p2+4qUPNtlNHqK5g<(E??:A;ZI%h\N/\7E)V`GX@VTBI:$jdYa)=#_N1OJi^4*U,^CEg<>-m+$$!WW3#!!!!aH'4GXp"OE"$)so0j?iX98Ks:qS%k:hH/?H'r4hF=F`b"cNrVe2gH^H;L\0Y"T&31'\803J!F:-.\9b_JH+5l>k>X[U):*H"VC)*sICFfjE7HS;rVpRNcgIAZ2)3V-;!/m[jQpDqA>oO#Vru^p\^Oc]'h]3fqWFgL5]Qlj+K=E'_u5Us8WtJ5&J7g14NU*6!E!/)aTVYEzJ;Qp0ab>7/INjpW!nLqGLf?'\JhrZ]_*9k,ur:BQMXkRG@Qp1t:4=`!bnA9[6Km6#RB;=4_j#:m?M5#KeA0pfRg/!pnlggGX_bpqLAC6Ks'^!WW3#!!!!a`MBg#6MJd^,*@]]V1!f3M]KtVp?:MR2PVJZIXJ^tXm4l'-6:naOVkPN.6`o;b8.^#ofIBei-MW2?^j9^a04Xckq"]H8Rhk%4QZ?-[e]+09M5aL2N@b.:T(V-2#Hr\YINaN3ChU&]h,#c#R:@?RPo#_+M#:D`FAPX]qo4Ili/.?T1^<;z!!!!q0rZ_70Q'iSO[uj)m4>epKhT,a%IZZRQd8+llaXJdM#KF)cL3#/3@ZIAP)E\>VK(/1X-iCC;5Wi%qmaB3SX`fbAF>D=<,t0BgVPs:oHGMo]AfF*j;_/5GUsJX5]Rs)`8q]_eC<^>(+i]X6puk#=fJ0?k:knNLaB:tf.n*l9i8I$m"Xleu[&Y#lA+X;VuHI8(kj2[3`btg7.OHZs$_p'V[Ec.;+7!NNR5DQE)rZ,EY4qa,LG01:Ujk1fpjDLtQOB_bcz!2u8aQ<^*HgXDM6ZWUF3G':1#0K5i[e#.SY05TW21HA&OOg#N"2)dEK&<"M%*UHCa>c;RF;bKd4aABYIh]n7Fd5N2@'AF88A\i#$N_0g-(B=Tt-PnTs28(M!D+#9a1@m:_8#6HR$NL53#7(9o@C3V"dJ=IkF`G/aFL4s*8qY;Hi_%l+>W+$$UE!\KqdIFs7n'C=ER_Fs1uUHTmU/YiN[V)9&(U/+[g]H6B`u+OJQ597qhJcCI&kiPPo>2-$8RGkh5W\sq)a6p[BBaLMe?D/!fEelEi0:+Y&#?_3dI>W(QB0>"[aBgMKHV$eW_I#oW(SBe'/O*9pF[[]04nD9-a\P"(OWH7BG9ZX"qS_C\S[BUtRdf!#-5l5bYp$M"eFWrNME;Rf:RDD8%FS)B#-]dTnh8P$E]ekHU?hO&.j4_%r#@48U5Fg_VAL9pp+K>AWpQK3E%-uj+WdACI/aI"uG]SGn_j0h?-B8E!g<#Ng5m(VbjjFQ/_0%.]\PRmoPUqo$z!!!"tQrK\_pl+3*lHG_X;C$n;?eeH*f@-!7\$E+5e+KJ@gOTD)r4SsSL0m^t/2cTDUs?Q-&9W+QIPiu?ad.(U'm('DBi'r6L"4@uA\62Xg#r(HP9jh;9?2%")HJdb-*UI=DtABDGf\;2&R3l5EH8.aTqTc(o+t>nnDJ'DVrIWKls5eUK+p<2-,8hUfL"ZKl]ufG`cE9c\=[I0;K*6D.o.1aT.7ZLK7@4K%Zp`[;R!cH6'VA3Oeatcd14D;aYPFTh@mOWXob#R:#_A0Dh(`BB_k^[Ol33<9.;%f7u:$]KM^)Ij:7aBOFo"jVh7FRPpE17r7Huf>t[de8b($VNbmf7:$5Mh#B"``nF%n+#?h?W`9dND9[9Mo%0A(5';"UV%un[ZgA^soBXMNoD_Q
    Q0Y7SJ\+&)lehBW1[keNS<&K'V+e'sDIOjH,83%Z6GX`>qWd!m(TGz!.]q5aT[?Z5]Qljl2IO?6JACjguF?(@p`3&M6VVlNn3_fWse5ZDK90)s"7:7mEp=1R[FI:WtOGN:iEaXWcI_/7Y^cpY8FcO[<*mJcZ\E@'NX;7?_RGLT*K0b63Mbi=guK(Y8b$pOE^Akt%Akt5j8o;]z5fFuo\_uH/Uj/.u+n>(!j!F,k`,-5J]Q)oGKV3khD-Q_tij3r6E+)Nb8)to*!:VZ:Q]_^`infYSgU]97olO,mDcBObmF2migY<\H81l`8:trq@JH#fJ?_3eph>FrY2P_P#6]oKE@L]1kJ`Hk4z!'nLK,e7;mD:R%cXn;2qVQ@S]eL)/60+0Zq1!E7M;I&VDo\D>^DP^q\X]m[5cqpWGD"H?91Mk/50"EZR<'T+'hV"C1Oj\)I?!WFSk:`XVS?I^sk(p3e^3oGM*(8Z$Pa+n=>Y9pOfAfAN5o&VIY90UH^&+P@eC5b$P7)2T"M2q:]G/7UhS7@m[<]TRo6]]o`%chM[uH^^SJU%MEdXX5IO-JVRe^qM?V#3GlM(D;>s-3qI=13gAM[g0@tTpRWQ=Cu34Vl@_3?:.>Q=a(zW0i5`(WMEtX0&N"T;UjE3WDpEIcRr.2tQ'n]$Hu'>hk([m[djn7KWbjisr0G^*/^m#!-cqc[THaV&TW$$NNesqW%\]J#9f]q!I6d?!V:c?GcuTftu!5\7GS`.Zm7I%ZPB7i>#<1\r;UKfUFIP.)^_UU&Cgp';`^DHp?K[Y&BA$A_2)Nf%f[Y"bDG8S_mNgQ,"FY7%H:tf!hf"_0)Ip\a]GmWbpQ1lkF3dX@>]mT)tpNXN`DcHT/-;6CW('e.kspMoE%`\:5=G>Y&md-*/Vd)*9q5dj:aYe#$Ka<[A\_Ok2m=EhU!q.8:qqz!!!!q0aUE(Yied%mTj/Aq1mDj,Iae:jFZ0A@IqK:i>92^F!V?7`p;o)CM@L'?\Lr<"3C]HV(7bjK"tL'ibNDus8TNc9&@;))EP)ARrTmbF_bNclu7!HcX0m:.lkbTSdh`nTqOY]gm8E3"ECd0_X#QsGiXsX/A]/i(`SDQeaMa`Vc\Y2B6W%\YK_2F+Xgaig0';s$PYi*FII+Em"Z3A9hc8Q[f[AN]sfW7GdobR8#2nURlHMTRdCiQ>ZeOI9#Ck@\K9r:L#7@dL8=T*-r)CZ?n`l:,SpF\z!%K<=ab;rcAE`@D%N3WY?asP+F:U=.gK+mB\8YjJYhm*2>eg32;e"O:').TRYr??@T6),ipn`5I(go_0+0#Sc43HSZ<%_f(AoOpaA++A]EWd/VOjHpO-W<-B!Kl_k@cQ7RT1S.58okNC8gP%7l<9.;%?Aj<,/u:uI)q:E2pn5FJEYBt"*22.QEWJGi53:ilI_du+ZVu%o/Lr86Ot3>4lc2UoL[O##cL4=hZh=RUP8C4:$H]rF\l!M_i&/OYmP;M;Ed,jDR%K2H.das4%N@*d'#k!q$#Z+A^A!Ho5o39#0ALI_DsoNRMu)br3\pc3C:]73$]:?Pj8uY/sIKeY+Ke(7N?V6M?o\&.enujEU+`2Y<[+/z!!&[$&sup[MOZ10M)'A"J?l_'9hgW8S\:f-/3'pgI)pi@<)U>?[1`,,TqU>RK?)83o98/Yn)VCoC&;cDm_Sk6:s$j+;lCGMj`AfN&#uJ&=kV#$WnN#pMlGEpEF0J>phrL>:k`(2`RqXf+FsOLe9fI]_jda$_R$2Q/\X;-dIe>7@m',?,4F/c[;*q+E>^oQ?puN/b5FF!l=G\ZlR?<5r'3*Q7+U81jlBz!)uVnP7,_*-*!q9AkX5^Q*@geYJ0qTj+c1gX1?8[$h(!(@h>s.K%u*fBk_!&bY=q"6_-.*j7prkhX^M?._QZTU+_#bJ"NA5mH=->JhQ>V(`R.%W+YX@*;Kc!e7LB)*iAj[mE"'#,J/0np@`/p=45X01&hTe$e0pI-?M?Cs(!2V2qab>AZQIN!5Q2>!SGnguF4^+pJLsIT5>Q=a(zW0d]7(F\'D*L\gba)/,mmPDo7oBT'U$D>6T(Ch.gT-O6M9/$R$aT^@P#5XVW.d9RUfs,N=hn/db)@1q]iW6I^$>1jY0\Mlg7U&#YuFHUSFS1P/7*>fS-&kq5rj/<7o$rf\S>Eou4N31m_JHM2fu$RH([KD:B,aTVYEzJ;QpCEZo8U=HQ.mbt,1ODQ+uqYsQEjfob%8V)8!D1fE+0G]H*M@3bY1[/'LB8Ud4u_*b/?j6E%QHan*FO6k(TLKjNrjnQjcUVCbhFYM1GA7KJaAH$h^ejE3P?E2S[=8Tj(=M&0&YupqSQX+fP?>qZCD,PcBOaZ3@V*_B:bt:2e`I[(OJC9_+j8u%W#*K>oz!!!atnDqH1(CuBkU=IG=fk-))$UX\%fQR7q;7)a;@T.7cZGd`Xnd#_bD5m$Zo\FP7?jd`045$t5*ManR1YU*I$g:(oZDH&iOD+bY*n!s#hF,C6mbVn?@524ZCAbXc0s6;n84(\Y9j2-Ap_g9dCV#'=g[[-a1PoD2tHgh-Z"TSN&!!!"LMFi&5JYGoAlFq+?g$97u(PME*Y\ce\A.`b%A)Rkm`ic.m&(=+'m,n93U.HnUsh+:mXD8XN\J%Wk\$@f^3AD4tQJ%j.>Gq"J/q>$r;go`HRel/3s4+"s0-E\V+a$qs)_2+e)`8ChB3.Z@eFt]mbq="=#C:Y#7`f+HTh.:cdRWKdT*Td]90*4(K10;Fss1_p(d2D6mdCe+KIm_U68IF!X0YG-eP0qt4[W^Ns/HN`g8HSR5#_PP\dTeDo[Tc1(F?5&j8h^re-OHgh-Z"TSN&!!!"LMQ'_"KaC$GR[P/04?8m<]&Z2?rV9S-tp)\*HMSH+3Db/:'f8\L!BW+j6[^rD*+ut*c[=TI`]F58AW2@;#DNdQ_>adN,Y@>B2VLF#*iUOU%=C2+C4f#$3Aa=Q5n9/.H7>=g(QmOPJ`CKlS=)uKVWp8d!0WT+5&PPN/@e7dF?U$qRO^Kg$BZb'DKBYmb'd'#99l4CDb611iXpFsrC-J67;Cb8%EeK,MOp_7^-SW+#ldI\=4l(WPIf.&<8M9'?quWpF200p"NA:fkab@GlIAn-5$C(@:Kh&D2$RuW3(B=F8z.]-Z$(Z)mK1,@?$&C?8?s)@X%;LBba6N@n'YfMT3'\SP_[Oe$LGUi[9L^cbec"8t],Feu)RF#\=+["TYA4QsA:LDRSo,HXrn)C-kaIeFG>95De4.4D8s]g?\4Z3b6[3>F/iq%[I:8_AN+!`FD0S)jMHFjRon$WnO^z!!!!q0bl4L5gcc:HS\TqpTI6e[FN^t;rY7.)LRr@EIZuAgd#l\5j8Cu(YI@+\[>UC80o)G7>8#0Ui@Xmaf;19\I/8l9JK^SRf(;*/aI$?J+9>3-4-/#"mPNpW*D@Hc%<.&,b[-=u'VR=0YjYO[q+$rH6.oA7$^gDhecPVk5r]k4"sRU!lLK)]@/0[UaaRh2#PK*"N>=FC=:k4km]Es5Z$oe7Ig/hnRIfe^\hZ@OqBE_'ZXj2cCC-DaML_+'_D3iKk(^EiX!.;)?6rlO9ar"gMrp#-D[8LL@)_WO4fDPjV@=5EV(j4k;On<3Xlr#,0KNu1SR1,9IQHXT9VK;L6(9pfd0g_nEg,UFRJdIg2Ru*'bc@,XnDXqZN*J5m/gD,!fJp(=MqP!u]-8mT(J$.Yz!!#tl`D%s-asrKX!%;K5,T#>!AW+OeQ7bn-b5&BaMrp$3rUW,N'VWuG:uTJ=4k\uhH\lQVgp`9DVu+Ntl<%5W;2#66j([s@Tc\WK&/;qK@6d(*\T>qPelF-;#/]gMCiW`S9u;CQd->2Y<4HmB&ARA6]4^acl*g8.;>QZVU.\!P;8G$^M?d;FKk7B.FL6M,HA&=Q4(K0C3]+;,5BkDL=[S$6U>SUb'?:65A:C0A.Q74!2U?l>kn,me*IJ0;W[i0j*n\q;]YQ@HnM#gE/G!*mgsj/8//AVC^)WWtVH3W3rr"lUThD_H5+^'V*mH.H=uZ%pGLEOf>J6K9ZGo!\^n4i,JE"UbJ#*,P9.iaEZH*Es>.&7uP[>R\H79TSSM?:73,DE8._L-,=CIu9FZIIce;1\A(D2gq*5s!=Mo(Vb;Ic#@Ha%8Q/KOX%?9_&Y_VX,'o$:;#@]#aLK]E17z!!"Etj8qY=+LqKFF@),u^H=MLe\"&699o*]O1Y47;4ZHC%eD4KnKL=O(:0FlW5uMKTh_`TiJT$'h&har[im1aZ?p5&DEbUH-Vs.H!F3u(\T>seD/3m%CC7h'YfZ:X*Ba+NCs6pfRM[MibkC^Fo6]UHcO3Aua;q(.$d2^NDu9r!=t8SdGX4V_ijpUU<%f==;6(aDI-T:kf$`"=pM51?HU$+L@EA\P1!@9oj:7=fd]qG:Z/,JdJ`Hk4z!'nMVj8qY=+LqKFF@),u'KS9Y9cDQG.censZ\e#3/IV=gcCNf9.Tl))?3^r.,Ed>NR[^>[2mYY^BJ4ZP]6?9M_UeC$jN]?H=#$t_DB\rG+a7sRm)Y5\%'0mKi>*$`,43kqAW8]#3Ju_cY>RP$DB2o>nXbI\#jF6BPLQz!!!!&OBb$V#p^;ePYPV,TgeQB]"6U3TjBAHZc>T0Ki;((eLbesp9Kjnf8hpK[\^jkbCXGLf!M,e-D0](o4@'SYD;_a2Lftt14!60:6"_W4iHVj3PVJl<>F2tjVRZT$CfBp/EBQD-RV,e?bmHWADIu`jJqru%]>Q=a(z!!SHh5R7ZA(BB[p?ueR$@da0Iit$&\GdVE9.TkHWY+AAJL35@22/(IQIdQ$A:8\Gea\`\-KM$"2XQJk[Dert"*pgd=eA'2MG'.[rRi341%3*g"Dd/F:Ebo2841C^kZ\f+-(JWm]2Q`B=,MBgVXK_422@%OY$RW8tWm]:/jP&=VZq9G]gbI!,^uRhE(KQC7"h)4"^7MJp@p;!$6N]L*1c%#KIb2A)@U7g,]qlrZE-a_s0tBOce"p27Ftjrhf4eVo93kh_?-KPuq\JuC7D,$`Q4ek/',Er'LDL0u]X&B*ST`<``@4e+F?1Umo-NdiVA*("S+p:_U:h`7SJPqTqfD"8NK*Iss&UUTYWG&:e[f2)R7;GAk[$;3WqMfasNU..Y5)0tEAWZ`9"OMc_Om:<1i>M,&i,OHHp+_VCC1RhQsD`8j76_:%<0gU?2>n)2rX-'IK\>NB!&aTVYEzJ;U==c^l<\!K^Od:bIm7j8t%!A,Z842>JPt-T4QpQ@[;6B;b+;8D=(&IZeLps*8qY;Hi_%l+?t?O[5I\EaiT%pn)m`+oTVcQ94m?fm0U54`i*ei3>_9c&C=r"'c!&m6E%>+a%F+K7En^S,2)!!`JRIblp/H\^OdH?T'V"N`g8H@&P"D&OVE\=kJFngZnUJ6n5!0nI'&%<60OWTHJ]/EgH^+FNVqtSrqi%f0:WmDp%U0eCCVTA-HK*^HLXY@tiO?Ut\)C):)U4AIBm4?Zt3#:rQqi7reV1z!2-&Y:J]jU+99)Tb50p$:p(("/f`NSQn%^"a^6C"C\%TG#$Z&7$QEl^[b`WJ4"s(ej7o=uk7b=ES#;=M1G[IH80h)9'"NSS!WW3#z!!%Pl#Z!'L\@FZ1[ra1=aliE%ZYf$ZOEulB_s`Z8=e%L\^f=PZ:\[AB.*RkMl7+T]~>endstream endobj -38 0 obj -<< -/Contents 133 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << -/FormXob.5ed95e45a8a19eeaae0de69cc5ab3dfe 37 0 R /FormXob.baaa2211732baa0f94f6912a5b035550 35 0 R ->> ->> /Rotate 0 /Trans << - ->> - /Type /Page ->> -endobj -39 0 obj -<< -/Contents 134 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] ->> /Rotate 0 /Trans << - ->> - /Type /Page ->> -endobj -40 0 obj -<< -/Contents 135 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] ->> /Rotate 0 /Trans << - ->> - /Type /Page ->> -endobj 41 0 obj << -/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 101 /Length 24327 /SMask 42 0 R - /Subtype /Image /Type /XObject /Width 3083 +/Contents 141 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.5ed95e45a8a19eeaae0de69cc5ab3dfe 40 0 R /FormXob.baaa2211732baa0f94f6912a5b035550 38 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page >> -stream -Gb"/l#C)J%ieIh?/?"AYZZeROH7JhU:J^C@%t!>5l-^^trQPP.nQ]P&.G;j?K+E5*g%7,hWacpN`BX^2IVtq.:rm=lji`\[_\?zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#\KTq^c0JB:sR1^5Lj`EQFAhc"p;O(Rl&)q71:5KH?1G_u%*"`c[lojNia1R:XRQ&Z'=oOL.-RXh'/RQ4SfE2-Szzz!!"Eap?gU9_%1Isn]'\6Q_e;&@:<&B8kM]p#@'MdFMM1nF:gZ3SijR9Hd3FgGnp35Dkt:Vr#p&>*7$hGCpe$.&eYh/4Ve"tzzz!.[s9%LCm3cTNrBn^LK5KnP+ML%X`]PF@2\LJ,#^Kd+#//g)H!i"IJ5<3BL%Tna[ER7tTSF$V5=JC':W>?MFA$"hGN--#ZCVk40?+92BAzzz!2YPm&F.cEP?aK@QM/HOY=RcA/mSh@kfP+,J,d2aQE[TtTY.t6"%'sd[^(Y,@]J5Y1D1YJ3]k7ueQ$[kTTl@f;gj]+i5($X&J:d-NEWVuM0g39!K4F?q-r'bBl\PTN2916NZL?0`JPC"UX@t>V50ndY$e.^OHM-PLoq9dulIN(A_2X_;lZ*)5CE7q*I$9^0$]tIZ[;FaWN^gJp@:a=fk_cOW0;""q;K\^S4o>C@]A.mK5A:bnYWrg2!mKQ=>Gu#7mt:WKLL=B"_Wj#+s'r@DW/pi2sKF.c8[;pqdmnC4F9U-Z+tc(pO!p$7,!br:.Jb?q&LnN-Eb?[1N5ksEO28Gt[KnAA#!1H4br-n4!2*Z:.*dA)Kp$Lt]?SpB;aA*2T\0hg]"?$kEl8DVop?mB0a,55k-&ijs0lb"%L6omZ.e9.=K+TY5(05iq=Ed-gU_On54cuSc'gMRC*OrJV:m@sVRSiCR`34`LppJ;Q<^n?c(r7Q[VjnNh?YJ0kUqk]?:p6_e9LkmJ;0][c2e>ZBcX]DL9rV#"%-["q:60YgpgU:"8JX7uS5UbO#pfhoc4SfRN])^1>4.$(u6@=6tDIfWj4nkHp%hB3F*^9W)zzz!'n(_%LBcHp=j#$$lh726\c./CY"`5+Y&a,f7-%6.k=9XBE.u0;TXRu';Q7r_f=neU"Qbbp[6jAhK_SjPol'JO*;\iq=EdGo)AUbMq`.*\r#an++IPL:rn9m^A:H:>bacJ0>@3jd\KJ&^%i'BM/+i@$@1fF8bj@rLt(e70>@q-MUY+sJG2^;=0F6VY]KmI6M\pGhm0lSd=:*-"aIHu$X8]gLsHUaNQb?_f1^S5rQPBDzzz!!&[^+UdqASGg6]f".DPDq/$FbEl$TGd]mKVrH"q)/UIL7(%='4*HKca?O=BXK:j.#j'[@!k$!FocYuJ5Nh78?%?SZ*D?Ju+[/+u2_rkVhKr%_s74>dr`0"!zzz!!&[^i@c=Le*3\!++O2C[u^V6]j>'@7Z@b#)n\]JN?^rR"HIuQ9V+@LWeugsQ7bq&3"]QrUArK-2g=ZCiZd1i,*jFIiICZ1j84fWI4L1iOOXN#TZ*V=M!qLViOfHn,>!rC:1WFPq!O>[]'l=>Gk4:T>OE":]EBbGqU;7#+6Ou=*(#F)b>o,+ua=Upf8?:9AW`2Pp=0#B(6%]BiThZ5q7ZI!7\3"&FnV,bI`/#$)7fN2CO,F4mX&j5hW)8<[*U;7[*tf218ih.^kV;![s85g,Y#qrJ:LJ1F"+s96@ibcpt5Y".DdINis`Poc1LYmdhVH!R*3Rln@&H!zzz!!!#\$ooHkc%?Nj\9@7CWEGnr6K31@Y[MQ:GM[VC.$UmlI.PU1cam;jEhu_S&e]6\nn!:q5BcDGdn`3q1$8N6khR>r@R?51-Fc9)$&%fcS0zzz;#X!W8I=util$[heu[!8acW(3`5G2HHG*Y?DVVa!]!^;[;?N1V-'diO[neJ6E8\P,n`(E<>aUhCk&`XSN#3^&ir-AK(5q;B]C2n!Tu)0F]bbq_U0B@VLkpjq_hQF+3V21FK0BNfr:k:#3=5s$*\=cbF6:[gJ,D$Io]R#?np&QhC"#J,pg:R"e;=mDi,VD>V=XIJGh`Lp9AjCU?FP;pQg_6]"qu6M"o3Z`@AZp`9>&[0'EA+5zzz!2(%IaN1;XV+QFK'rF`s)XOa(@,\tV@VkMIqeiVC!ek.arr(g]p\HQIaNs,L`zzz!8nV=,9u6XhgTqFeQ48#W)0U"276U.lk0'/l#bLW=&4coa,V1V*X`[60>@3Jr7"cM>T)mZzzzzgq'"9F/HfSglLPHCE,BWka?(TC"&qRYQk45jmqNVcT_5B_hJVQ4V.Snzzz!.\8lX]@N"fWa&8B-0-S,hQT-zzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!"Li37=fdL$!9MdZQc!<<*"zzzPTciQd)YTL7h@Bo9*CqriH5%zzz!!"E7&.nC[!MPu[!^Zkezzz!!"&O&Fq1LTpnm\63$uczzz!$2[_ng=I3S'eMW&DFI'caNmNOp(Zkr#5LI!rr<$!#1`,IuD&Ghrb"?z!2+]Ni'2`'&G#"D#D@E2;i^iWh7p:r:fZq#-4\RJDl&Og6CXcH(nql]VNu!D`spVtqK&=4DT"^Z>V?_n/tHPq5?QAf<*A;&b?@/%qYdG`hWn8Z'tj$(n:uQ`#oq+N<`:Dm)&)8TBqCiHmbH#dO4B)O"cSp+B&O]#T`$-_G::sp1^7Yu=&J5Un=iFI)_#M*%J<3!6,Tnoj9RZ'!`F:cIUU5X\#Y>?:8oKRcnH]TI`kNie%GLWmHd]6;'UhF_cGhP/,r9,X3!#U(C$8P25R&[=_M+G>Q,LuhD66AUGR(gI@Q("jN4#lQsb\hgm/N,s\u7eBUaY4>DL!(f2FCq[a"R7BM5\9UfWh<+?R(0Ka3ksKc.N9mb9f(-tOAUQTf,M2(6:8DsRUsAj\;GJ(gg/FqWW,g[$:&e%Tq[m=YXm:eMJSJ%4pE-&#Z:f7mGfAlReNYuoGZ9NDN?+f9d)GY`!?j!W#mfAR&eIAt`0-@8&0bS?8jEXo&J<3Y"G@&Ek*[q(fn1#jgo_WUP`Ud-$`r92G%.@BoJC*-iUH[/cEr]\TWC7>d%/],oeni$0m1OiF]WH`!WA`/Gq9p,6:=5[ng=G]6psEOXosE8CiKW3]!YKcdqpOj[R*u:\f(UtB0!>6ql`52-A\JO`Nult%b65ne?3/MD7)>>c12mW\T$-*-cRQ?s4gkaD!mR#hFEMVRcuDVe$(8R\$u]d],`^WPdihZ]#*$YBI'9en0^'m.T4SK3_[lF_R.jAA:^C,Tqc:,QXU.>lm?KLfffQ&4/c9;$dLO+sLLlPCO2g+sI4m!^]>a=9:g_:"#*@RB.1%pEbD$IVs3G#S+:fWZV"DI^@c05lWMqKm2jDi+?BTr'_X0\p/kJ45a:+I7sVH0SI%,$YN#>ND)BD$(^-3*!]+Cqrg=5jf'E]S8'2n`8(@:clhY$$:T9Wd@9&bEr7)VN:MXKg0U'?r?Op5Q,Yj[[6?`0q5K_GZPId*40D+[e^L8I5YG,*o/1KFe_-Z2@0Y#S@X\K.?tr,(&>NTrih,3:+0f'6Jr.P*I7W?!Af(S@"YXcLHNEhR.CG^ojj-GF$MFS$!Xa,@b.Mk/HrC/=kgf]G&#,#)$eNVgF9p%RN<^/*,E_%69;F>Mpur_QHnnc_%YU]6TAd(R1(rMr'[C5LQrn_WbS9+Y54gE'UAa[[D($?1ph5>jn]8O],TDZh05?9<1HUOUH*^1A-:uX5/2,6)'b?1BmIk_kbp3fQqB9WEqk,SGhDu8\6:=5[ng=G]`*;$X^+IdRp.cX^3O)e`Hs6Nt1jsc/Zsc0(BTr9s-Y7O)g;r\'jlp9$M=T.^*Sd,UVN:&,h#F:FY6,sQ;$''Qp'(Ucl^)6GS[igYI7/Se<4V<9!UAB:EAl[=&K3`%m9M5&I]u;+bamaggR`8bj`^KU\oL3t,@*AI78.ZSJ%@JOD)3ThD0"1nhd,[p+G?S%R1'AOh7%d43ltd=*QV,nXJWZlKmV>4h0geP9KD8E\hc@XFL0qYrMudc-[*]IT=;^@WYeI1jIh2)55YBTi&]9VDgRdA[oFWM/58@$A%2I'^fn;B:gQA5FQo2OM\sGi49#T_ZM9`9&0`WIR1n`CR[I1$noHSRpr:GD]<3J'UD-_XN@qR_7+3WBGmKa,un8%?6!d+=bb7BGJ-D/$HUjM(O.:6)r@n4JHEjM2lDL;DCLP7BF=nD@A.M(c?0Bd2'[tk0?&.oMZr(0-Zn^b,&s0DAg3GheinjU/cD:<)FV[W:N=L1-,Bed5'l?/DgKTq%)I5]9+=sO#H`K?oklMeJ%R/BTUnZ4.bgplEK1T/]l&21C9>nCL"*8-P*j+lQr#pKR@!^]?L7KPnS>%V]3dJ[<%C"&XRhEbaCI_2f5YiE1A@-o?%P0@GOlm8+)+sfb9-T7eBW'.R68?l-.[j3`c0@2.O;ep`Zuckkt*d02ld3e0md,0Imb@QXdHY`p]&!MT#$j(jkqCIQP`f6;,'^.jf=af)D5[oq)6;)9sY-IG(n3Tea%S]tD\S#`A"&<_2;$ESS>kdE'Af;gN\:B#1h$L_/,NMm^BZ8F_OWBjl,h\$Je7)Y7QJ.S$,b,qd]gei4IL^);p\oF?BX;DSt^V8%6U0P&^mHI`TC8H:[6I.iA:ZY1`'jFkbKoI%a+::7564NqnK\TtdYQ#6C;,b1=qQf%]+9SEnkL[5e?#W8srrj0XU8RR@ZJ[MZsMe1o\+-S4]3:)]uAYNXckFY1RfL@iV"NT6(fA%*D,lZHc`!NKBLs%0JCIb)mKVYHqKkY4'8(eJaE&(U)]_jQ^SI63EUHY8j2@\,bY>NDCp!?j"IAMPB-s1k(\Od"n]0+Mn3+/ILtQ\arc-au1-cMR/F5o&t]6<:!/o[M.n71';lkp)J4.!=rT/!g[TE5:J;LBMs,HqQ^1&J7Z6!^^!Ml=/K7RFBNrjL+1=s8;hn!^B\HJ5F.55PNT)pPnY@&#ht3Zi(opWsilI00heD[&7D)8;5sTZ\]6ZL'3/@&J;;G8O*ROQITqrY9iFbI&dYd'E=A\5-Bs-QA9Wf;D65&Wp.Dh9CHr?'(_8NG($6:f4O(5rGnSl+[0\b8uKr!0-K=jF7G4Rm.$aP#pKRB!^]?L#*0TOQ[8*R<04-.P^j;\_D2u?o'iQ@dGffN=NimI4ZE'+W>r$em1Fcdijq3-=?i[q2pk"g?$-F$c"kuPJO4P/gk$#A_[d\^#UmuEWNPC#5%s$!/[2T*/''G*kYf>hU7-hhC*8l>n:&Da2nm2RMse?tu%,Md;u2X"q.Ld@/R:m!%Hj=LD+_EpMd9O$W]6FUm(FuDj7<1b>i7]DTH2(@r&2J".+kC6&(+f3/&0M@[J[iW[i]sW'PcT\02OD(%qdYk#Nf!^Rqrk\Ta+!"J$5Xnq_WXaC\G,LC(rSF8!X6$p!Q^IgPt?+C\.m+B2kX#^P`a!*MUf8lGdX=:!)n5cA/QjQ27%UYYY?Su#=VN$`\*3m#([HI\k*3eb(g+F;Vj7lEtnpI%Gdc:H0d=[\s-[o*@mS3^elgYUi&b%L+8/4H:G*$8"G@IC/@p;#K('7s;sf2J#=Zp22DdKQQMrMJgCe/L+Q-HtK*S5Ub7K1ag5R]R8"5aNcfQ.qLuHTW\YG#"8S[7@&JNbpWT9/;.Rr+>bt?KZ.C"n%n[;a]ddp.1RUBUIj:3Om)c1F1W3DO'aDE49%h`TYJOLgnIQdZ!75?\&u<`5%6'RF84[H""&g%aW9u*^*#Tb+G>Q,,q/j'IXRqHpOPFXTfXJd6sLG'Bm)8(H@4X$!Z-qi:RU6Gb(A]Qi>i[fq1Gn5bX$&0e]Tgp_uZ/qu'.FO-aiRM;lrP[E/nIfHei`[Tc-3[?Pthn,`WD^ChuG&8)g[7/$^P^j>)/ZZdVUQ>4L^.mn_K.HZ%DLm")bN3f"j)OX,lHmi9ha^X%7sVS."%#?'g#Ghcfl1c"F;l>F,ZHFc,5OtPkp)dQLumLQ%1%)lWA'g3ii.c%2*m:T*/HJD3c=Xo[+PH)?>g,=p@,P6K_CsR?4sV8(jk:UNl;t#iW>rQ!5lYP\XeM_A*OqnAhL0%e.D>aaC-NpopC\%S;DW;[b9q&VW*AGYbT6(5W_P0^]PH)BhN&@5+=%A2>PJ(T+&Qomm3k4bkejkNIJ2'8K"`RV.nDo2&`$G^)_-:M/]egR$1ZU=,cBIa[;Bcpl'dh;Gp+0:'$ZSR:7JZP`gK#nc^")`/tBB9FZ,4O3H^/(Q5T9@L`%L^CK/q8+Q?*I!?oBc2g8ZSB!dF6PT(it?@t1EGj(&5pam.DC?]V[Sl/!saKIQ$BpRSIm(&;AO19B`>A4X4]`V1!a8AYVHYK2j+nI'A+nm9?IlDWW_tjPE.10n^nq&,J=lB:0/6[5o0Wl[k1?:Qg[^B."8JV2()=k*nt`LlDk*?/!7L5TiJ1<$+_9E(c%@c$hm;3a'+B;oIj024j:3T62P@YApT*:_QJ]4.Y`52?<-*dS$DCt:,+0hra`>IQkF5KPpq1[&V+LdA:j"%)0G=UrK?QHma\=Ie2O.GUuBm>-5V+h]Wl2bPep\Zf]cjd:VaTtN6KRp7HX/Vj)B&/Y:4GY#r<[IM<=TjN:MN>m9$Ak/D]VGA23l.](g.DNt/4Wl"N5Rc3!#t(kbMjX:l6#&,EpVO1Dl2b0i?(.UJAJ_apq/du$<>O`L)2KOZ>'rd[,"dk)m\o$7#7Yr(eoUd2X\ke6n`,CY-\'bKtI.(A#E''c;hscdfrj6IlG@F8d"GF"h,p7l;U\H4hqenU`@I(+'Q>1nb?gl/KSsC>!+9/lA9D;V6gO39RXDM83ne91bMl2Rfr_[P[GP0j;T4n8l/%]Hk:)kDm]**cud9Vf`OO1./)ij8VmbQ+cs)B][55(>M@6^[^Dj@_QQ$DTZ_.:4lh#]pbI@?)N;Sq.5]L[.C(uI9#<"J`:IH6%&r&s/foJ+%t!*%F&GuqNu1$5ZhT2UhFlMeK,9cqtKWQ,P+j%L?C7PV/tb.tI;HLBN3I9[jk'(d7li[lb`+iISfnY^GOlk\W\_rOC'ck;f%2)LF=D@SHEnQ1bnZs(^4if?$!^clkXh8U%^Wh@X8jE[*XosE^>W\]fr@4'_2Z*-c#AR:hp"rDgY(J.\aVdfJW!,7io23M:siDqWidAm\rC_e%;>N^U*mpG?19]rI)5i@S?$e<@Z67q!Z!O')$&0ennD;^&7MN&)VkLm94^MRe2;55.'AMM3jgDRM#D]T2.]KkWQKoc]`A0r`amFnmCh"j)6S7:p"K/Q=%9Mb+kh]rPB6BMVf?:Dl#NRI+>hShr08IH<$3BnnbE5CYo'.a3TYe&J2fgP^j;h@Ym]B#SGnc%L?4d&l!#"-hV6@0H%6uB$9;XrI8kAD`>VUgopi3ZXnpMQ1ec.]a$PZZCtm$Sc=Q<$$5b3<;bT*h5@@YAOLUO%/d\K#Kh3%LSc%_$#-NPAY6pqHd`>B0?\10REmuV^R3HiapTAe>.V8?ZeSNld>32^[bjkM;r!9M)]9fZ7T;qg!(F0kMVEMeDi]cDndMGZf9\C0s+?B_nT'4^Cae9*i7>j$4k8itcu/QXU>EqIn^KmL?o+OB&sEHD%4hZo?j)"`??]48b.@`>-^<+qKfUl/8BWi^cLCU1Y..m:a3As7;geP)30\!//mR?NqSH(glS^LS1%*-,O"!sF:qg.M5SM%@Car?c*e:&Npu+0KTCEoem37Li7Alu?#$&eOWs3J24_l;A38,TqbO*&[AEYXcktO-pKeq4f:V8njn>F(HYZU(g"dh@Mj=kQDoISW;CKW#^N8.JlA2>P>?X\/T=jookYo7&rKs57X'Vq!iC,s6Qq1nc=06J9icb(_mm9>j6r!L2;6V:b!Xs#;Y`GhaY./PMCSqR3hG.F-pl&lX5R<9F!^_^!,q8p=7!.$*+I(ZbV:01A!]0Zn)m"o2\YX3B6AH^3WTT>!IZ>8gbra`KqL?a?-M5K(3gGm6MVTm39^,rk55&RQ491kgmtEDRHNW4%tCi^+JDpZM-f2gE0!5`oHr[\ps26H$it#H>6l5d!q^E\#]^c&.oL/\/&.2.'uRW-H!Q-bE\kt_uuWUG&Rsn$Di)"[b$"@j8+1G/Chi6uO=I]CI,c)!c63@HU_2n!Ft(o"*Y;L3bI*7jFlm@l9JU1_:a?aZna0PYIB\4/j;3S1Ll!rO^/Zer4)0NE,6WZR#SI]cEig%73T5.?=/5dXp[5)i*V*/0(d9#eG/ipfCOFIgPQXZOOGIEtcXJ<8+9rU[-]^AZZiEr!8rbm4S`nOc%P&[=_M+G>R=8c^*[Z5LgSY`(SPbSSSbbf8/K*CNomd*AdR9mE&+A_2Yp[8J+]='V-<*]M(\P09&92g*jAg(cCG5NU@qD/7B4:>9o+X"qZOYoqm(+eS^[:Vh/@KJiGn[1Y3*X\-3;T%m,a^c!8*9cMJ[/hn@"/QOOg5>]:&4,n;.lT-st%o>HgLFWkAGtk`sQ)*6-/+#!3+P(f&ppD,kAkm@mOh/!2E[6t76/9`l^XD]NBoDj2cc')um<.Mmg]Kn!=t5I8a3luNS5Rk/3Eigrc4gGjN!+f[[o]RDp+n'J?0#"VPpI23XGjf<9BWlYqLpC\jb8!2/^qn(s"W>pYj1@oVV(f\Y*,AnI%2r-+is6_n"3,fA?eIB_l$Ndq/(f\$_+J,J/l2/`04J=kst._god6D^]C,/_]-tfD7SH9^N7pTPm@Y(0hO\:&[=_M+G>R=8c^).njRUd]^`pkXJe!*"5Cu+VDC^O8+q`Heb!:\:1rk=c;M4!J<85lFYC"2-o*_6EF!6X=khM6=*6B9']>t+C6hAG!VkGcaRb3B5Q,q)_4IV``ZJ*5LWN^4'=.@#-!i`Db[\@r6)9Ks,VqA2[HfW$rW>U%AL/IPLkpl'[C?9)#@^F(9ZQtX(>8=ZRne;^Ca1Q%s/KD==Kb`Z:V.p#]Z^2-\cP2I8N->"KJOtk3[!Ltf8q]VU/a6KbWR)u.IT[2e0Nepbn\oXa84o3:Y50G/-LX;[T$KmD\[ondJ@%3J9T*`[aa6g4psu2DH-r\=enXgLbO2.:n*\p7[WtBS2T0cdrV?=4IIOCS<@]*bUJZPuggEAq_!pE5OJME"KWp(?(8h:gY\^mpmf*pN2D88$NP)<:HU`)g&44>$of-F)6e0DC::iZ#5V(m:K;Puqjmk_AKIj*hZX^JS=#kqABRNQBf!s>na:!YY41,jQ+`$#2jI%AU=WP5.K2epLa=VR+[e^d%'IP^&F.rgFXYnJlOOAe2?K=&>2-H]U5N70AF>[UV_e)1jpHV"i]8[1k.W("P_A:a=&l2LOMcP7oW\F&<-EWVr+VRi]E1EP]":]QgU59K)Rr:K!ZUc^:hZ'b@g>^hXhB3sQ$[ek:o3"1S2g/Pm<[h6JNO!#i`XZRna($U]/(fd(XH64^+hl<8==@ZN\D-(oliB9_n)g0[NUOaDS15NGL**4!?lqV&i2JiAr0'=G;$UMlgt?pB*1@h5c>B5F=^=k=QRUQ*nRMh7[kFli/X^/90`d+[8J\jrnrj5>?b@rMbho?rn1Ytot3R4hib.]*s!2/2>:0V]^I?,Se2tGKFm["!saKaa)#HhfmC0i3h7.0`lR6ZZUTkNP.H,rQNW-(AFGPcBetp`2j2;u'Dm]#PuE/?r03!);&j#e^p[]C\oiLI[k(oPaEn9j?(4RO:PpU5:LAFO^OVDl_'HRf*GCc3uhlOg`o1SDHjSL5BVp.G.91#ZM!hr=#e6-\SuAPg5t@IZ,I8/5rW;DG/MJh%&LX]HWU6$$4'cc:.;1"mM)3G4k1lc+mit(&J,Sp+#Af[`FoW#2$nRoB\bGW=SCkJZfIn"j>4H7c-+8\4%'1U[UM,48g^(=11-)mODs6[Cp?fP(@.lZe&Lc1g2,%h@;;EQ$kNuUR%5T7RqI]3M=DDlcBq/S:/-43cP5]XFDf[jO]q8uaiS_9T5GDY#m^^=rdcpfRsCJM\`rXd+!"H&H>7)E+nJZn2XjWJKM"Q)5gG/^f>M?#.n*495X6`)#matMG"07C+X%RAXEj^'?h(J.=,TP\*?1BAG?0`!D^.niW;-IM2#AR<>n?#3IO)-M`hhRpb;(FdeJ+,sn.Ybmcpf:X4mV)@]U\B0+_:/B1i\)ErDKRb_8Qa`YgSTFJE5D949*,MTBk,>5CK,*=pErB)`#eB*2W@j@6jF/\_MA0Ru+nbbiWp.F.X(GS!/uTs`q!:L3@a)"$e?578RPd^]aC-j$%djo#+"6,#.fgg3ZDmSaIDt;B'G+/;*b8$%G<_K0&^.#i&eNd*0kY^ed9ReGSs=H`\@G7R`IKS@aL+#UO-gHuR9'6Jea97bGohIs;UsnefdDiLNuful=ICaZm'D.dG1B^OXn=/IBd>u&^(=#sKl:qpM`FT\3kfbH?43)&@RJj'Wi5\Th"]uM:*BB-1lSjj5imu0#l5&NOqCKrnZ9?p?SM)3DIU@[S`p@#R[HVLD6=E\O;%.BD=mu;>!N=-sd]rskso;6+PS!t]b&O0"[3dEZX0k'>f>7L,CbbG'[8Y5B&I0g/_[T<%E*bSq`-k\FN,gJr@Dgil[h]p//Ng^QT8UW.%?JoF&*8Vh#qeGI1EW,Ufjl2EcG:dcPYY&o/bNW:u?\.MoP5uj$j1XN(:sEi5`Mu*A1WSOl.ZmZJR_KKI3,k6Tr"/2^>:s*j2j;Q@]-f)fDgRd5&i8-d4Q8X]Qoh`OGOOqD4\PAUN0TP/KWn^nIf/C/HKVPsb8PS@q!*@o4oWos0?#S_,1h_CKOA6TBG3:kunS^Le%GbruFfuI5-'%f0]/=[Z1D/"I?^jVqBZ3'jFkb-&37b0D0:/d1?)EmG/]p&Af'FJ.Np9Rm+!93?^S'=;QGr;LWI-IT80_0D?krboC:S*,@Tb;SR::lZU9ee!X_6%<;sG;D7hD8ga_qAo1a^3doM&@_[**9R5Ne^e]6i0k*QEhC-k;,<9bueVg:Mp%Z@91\\Y:$f&M;'SK&k)J`F!2B:Ia4EXaJo4Rp`T)Q_Yr?Yk*n=R\+@Rss9Bu>B0qG.dp1a"*GSbq8li`h2tpKsaTl!o(PC9N+Ub.oomM>^?X[81lP#R0G=4!9dC]:!,Uht0c/g^E_%YP@B,#+n)^\%f*gM/E?fjM!4apFGdqk?@oao)YuE)<,s7dYX'd:UQ7Ed9=ddVX.f=o`\ikPkOWjk_4X9L]'WL-H245AiBSMi&[iBl?mpKa]*?,JLmYN@@qi<"?Lf:GANhABsVnF]i4@drodK#LV"nLP>Wg2f]%[nVD\oJ,%TieZ2]!rV?=4XEf/Nci5J3.+c#WCJkZr5CMGV[oFI]qQB`%!?j!k#m_\`TiB@1kd9*Xs/,,u2o%$HL_pg4#U'CR`Phb!S_Br<=V;Af3I9NX"c7N(?)o_LI-3F9`!`D0DYiRgd]N?)):?lqP`Rr%PLPHTO&rqVHd>`>VH/q>5AIP!DNeG$hm$&.>#R*/opIfFG<.k:dOM.(.EHkT>9(X&0f:[%dD'G9E1\X'FcmEIh4C0O8\OKUE-J)lo'tMld*K>p?^Z>iG.l1KiKSZ),_sL7>r>i8HZK.YS9CBJdH$sM&eJtm#mcM/TO'H2dr*L&^pg*PGi59@[klbUG6i)3jR/FkO4FKFuZ$j-n&VIpsc)Q>-%JukZMrh'/(GkN\d`FDhTu+pVZrF4N9)6nko.&k^&lW,C6<&F^!-.bpp:c8=N)FhmGK.K.1RK&4.p`&eIApjmZk3@/,P]d+-9^%i/F=JXK8p"W\`]NR2`PhbYVn+fB*8MuGH64m(d@knB-Y)R(=)UtbW,'<;fI[S#:3-B,!l%fa(D9`Z2=mXS[B!n$9SVWB/\L6jF^dJI?eQr+0tshAZ*Q,Hd46@#mp5al9_Q263UER!Z,*G2Ok]3Q0,2l,lM4r:57*.TZ35jS`#.NqR?u4@.dVcjKPj6c#aN,@:2XF8\F@\p4o([M*QWlssMNMm^qVk`:O*HL?;6q,2)BkB`a]OTmTa7.le"jYoY&,*1Bf+fMX?SlAS]6lI!.s=>_6APeg;U>)%I-]2JNScG.Fq"4T$DmJ'AVd00!?j";+27d#0&ODjhmW=XYAtgX\9?Y?ik'kcd+F<_KG)ioQOXK=->mM-DMgu?S]**cuZ%-Rjc8(qRSe\pk^hF^rXPS_m+_#C:+G:S:c'Qc<*86\-]obgq^OT/'^c(H;qC'8!F;l"-1:MNjm78t!j?CiMB(ddXG4f*[@6/VLE+G#7SiWZGme$T(T,kKjF2YO+A,IL\I<+eR::jd=1'N-12>-OJO`tYUe#Kcjk'>9Dl6L47=1Q7gBXdfsR7(B_+eS5GG@a1m[1sP4fp+)q&%aSH[8J+F71]5K]BZBj6f"05#Jp]]fNPiiu3,@mF^o.mro?T_IAj^&0`;BQ9PZ]+U2#epqBd?Wl'p84MG17C:5+4nI>i$$uB^nGfFGP>>d)A'2D\/08g%VrE:QEg7ZcXTuc$!`-%bRASth'Xf?/(Vqi['KE?8ZT$.d0A8POt?0>9V2$)QLcdWln%k5E6A1`WEfmBI+=2:*[EB9qEJL!$1/[an#'>9GDoCK,4uRQaEX3d#-!TRR@]DfH'h("knWKLYZ::E6D)lO6SNu-(T-2;-Q`scc9$69L.h5_],[Pa+MdGf;gMmWKVtK>h:5DKSYF1.01SCFpf?&Wa;guXC(uRO^Bs7-@,\>C)O+>h3#AY8mLt>k6JoCWbg;&eMnmQ%0Di+sN=;#m_]?"]L2"eh!5(^3%qtV3R2qh>ne;iE4JMWE3ToeogOb!C@^k7rTr/sG]76ljjf8@1He`7!k`odroksafpK.-JnK`&NWCl90UUpA//ht:f[)Rh!3T5&L;XO1$;W5`/N@S!;+WuH7,68rU6prSU&eIAOY'*hW-un,KT=!=NZKn9(-WitBpe&\BhRWd_-`(_Q@KMNa."4pjNPkK=:AJ1n+uVE`jNsI=Z4G:46DC"#GPk%2e3uYX';+H-E(*K;tmC9s*=7DYLVC]3Wd?f^\ESD9O4=rT+YC#oX]5FZQM1?/'NWb"H&J;;G8O*P9\6@>op"S)2bSdI=(h#D0a0+#cad1F"ST5a2bY:`qiF1uGH\mp0a;#2K6*kB^BUQOeg1dtU(*F`a19dmuOCO56Uma/5]5k>cT..@:!^ZoKFAM%p$ts4uc8;(TShXl:B'D-,6K,&O+/W=$gQHYE]Z>F'Ua*mt^pL0)Ld?pD*@>:]i!tSI%L("DODu>9:`](>aT]C8`">RmUM?[]m[?a4:h"J5mjIlKFea#,UFRd`NJu(/bn]to'Q5?s(M.D*VjmYr'p.inSlLV2WEF/(HShAqk(Y'eGh^YDHbp.(Cp7Cr\QNNn3TPCqU2c\9C)#*htZZP:P]7piuYVb7Siomq.G3UW8?PT)npW1a'VNU0Tq6E-/;R`.>"lX&?gga]5@/UC;of:$5=;GA_GdFDI[X3D21bSiWAZ\O&>0Kb+?0dgA`V#="Y2jkg*\aSAm6+YM8D9"CUt08HU7]UFXP%p?g*M&Bf^1&?dGS7n5>,l@-=XGEs-TDBmh*[jM5-]4/!eGn&dm@,fcV>[T;EdPd5>hu++K?qSELmbJf.W:4.qK]@Y2ncFe\i^"/]#;c/(7!^\7DZ!"oj[6:aA?!'[a\O3\>T\7F*E-QWfp?p#_XKSYF1.01S[`"J>c&0`;BQ9PZ]+lY(blB"imb`OfC9##._cj,2ZOp$GqljX/PQHd[seiS2eGFdns>QLOiD6BE>QDJZ(>bLO"0H_Y-eQ+,6c^h@$m(!KJHk/Jel+H[SXJniKcgnn817ZYFM*kQ?UsLIQC6^r.;bl7@cC_P85%4!UU4/fYd0%pn_tD3ZX]D?Ad$VRuOM=j"OFRlX639IWYg]Ql;SO:WNq\B&s<>Wta`Ngar[[o^#8P-4E;>nplm?KLfffQ&4/c9;$dLO+sLLlPCO2g+sI4m!^]?L7KPoIS%:N+OhH"b.Vb75[eO>r;E?`R&6cDBY>np;#_b0.\(e%hKY"Tg,[\!;#3,08rB4NHiSYap$R7D[T!r=r*)^lK3.7=JDU7_!;0h0*q92FVXb",,;5N#W[i<"B5IB#fRWZe8SkM+ZPh%SQd&630R;:BEjb#RLdmlk0jr7)Y7QJ.No6M+U#=&J5VuT*0fY&J6b-&eHOu2gE9.]>\g/R(n0ur2Hj!Y#g67@g8shh\@)IaOE9IFAO$=1PnX"D8Oc.NC(AI+0#r:KTFVT\"QOE2&Z,Dd0?L)GNM;!^5qX5C<4P>FDl<(lm?KLfffQ&4/c9;$dLO+sLLlPCO2g+sI4m!^]>aJ,u@K@Hr\:26kO5Z'`sj@f8VV6T>5U#VDX=,sV)7??t/8WL45dY&pgLpJqW$])C8IPKttZ-J>hEbaCI_2f5YiE1A@-o=DV]eh1s]T<`PKpPjV!4jp6\;PgUq,hWsWaIFtk[sOTQj!rY?2m(@`)Ot9*UA`pcUXeAJbqC1RGZ6jQ+G>H1JC)On!?jj!/4g-R+X35N"G@/0mWbo;Z)7=qY9]-_oZDuL2OlmEhS.YsW.ul%Qs$fbfg^8XLj@[d/GYFeI59*=ZMZmkj#r.bXV<9%kf$ee+#6?hbo+ksj^-]NP:PQ:ja7F+Lm[YbV>:j\bt%Js(7Pkn@gpB+(I&'fe:>-r6IAZGaJOeg#!^]up#mfAR&eIAt`0-@8&0bS?8jEXo&J<3Y"G@3b#1<4*QS-DU7_-3WFJ%cm9ffKogi3bq9#?6prRt#m_[uQDaq>&.oMZr(0-Z&J5V-.fl=f90c$-W4Qg@33=OF^142ek^t=?"GEuj&eMY-,p7ksLa=JN+[j6]Q%0Di+sN=;#m_[u,%>L;+B2kX#RQjBb;s^m'"&m\CCizzz!5J[<6N/5QF>HNS#QOi)zzz^]Q#.o^R:Wd6k/iYJ&:Dkek2&qa[M!WW3#zzzzzzzzzzzzzzzzzzzzzzzzz!.^Q.rs.1oL#;~>endstream endobj 42 0 obj << -/BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 101 /Length 682 - /Subtype /Image /Type /XObject /Width 3083 +/Contents 142 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page >> -stream -Gb"0Q0`_7S#_9/Y<@k+(4P1;9Z3pX4oZVLZ!!)N)$31&kOqdrsJ0ZWF!!#Sk!!!"^X8i5#,Zt-J!(aBs!!&*k"TSNFaU/"J5`ui^!.Z=F!!!!jendstream endobj 43 0 obj << -/Contents 136 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << -/FormXob.bb628729698bfa2787467d6784c61ce9 41 0 R ->> +/Contents 143 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << >> @@ -369,41 +366,35 @@ endobj endobj 44 0 obj << -/Contents 137 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 101 /Length 24327 /SMask 45 0 R + /Subtype /Image /Type /XObject /Width 3083 +>> +stream +Gb"/l#C)J%ieIh?/?"AYZZeROH7JhU:J^C@%t!>5l-^^trQPP.nQ]P&.G;j?K+E5*g%7,hWacpN`BX^2IVtq.:rm=lji`\[_\?zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#\KTq^c0JB:sR1^5Lj`EQFAhc"p;O(Rl&)q71:5KH?1G_u%*"`c[lojNia1R:XRQ&Z'=oOL.-RXh'/RQ4SfE2-Szzz!!"Eap?gU9_%1Isn]'\6Q_e;&@:<&B8kM]p#@'MdFMM1nF:gZ3SijR9Hd3FgGnp35Dkt:Vr#p&>*7$hGCpe$.&eYh/4Ve"tzzz!.[s9%LCm3cTNrBn^LK5KnP+ML%X`]PF@2\LJ,#^Kd+#//g)H!i"IJ5<3BL%Tna[ER7tTSF$V5=JC':W>?MFA$"hGN--#ZCVk40?+92BAzzz!2YPm&F.cEP?aK@QM/HOY=RcA/mSh@kfP+,J,d2aQE[TtTY.t6"%'sd[^(Y,@]J5Y1D1YJ3]k7ueQ$[kTTl@f;gj]+i5($X&J:d-NEWVuM0g39!K4F?q-r'bBl\PTN2916NZL?0`JPC"UX@t>V50ndY$e.^OHM-PLoq9dulIN(A_2X_;lZ*)5CE7q*I$9^0$]tIZ[;FaWN^gJp@:a=fk_cOW0;""q;K\^S4o>C@]A.mK5A:bnYWrg2!mKQ=>Gu#7mt:WKLL=B"_Wj#+s'r@DW/pi2sKF.c8[;pqdmnC4F9U-Z+tc(pO!p$7,!br:.Jb?q&LnN-Eb?[1N5ksEO28Gt[KnAA#!1H4br-n4!2*Z:.*dA)Kp$Lt]?SpB;aA*2T\0hg]"?$kEl8DVop?mB0a,55k-&ijs0lb"%L6omZ.e9.=K+TY5(05iq=Ed-gU_On54cuSc'gMRC*OrJV:m@sVRSiCR`34`LppJ;Q<^n?c(r7Q[VjnNh?YJ0kUqk]?:p6_e9LkmJ;0][c2e>ZBcX]DL9rV#"%-["q:60YgpgU:"8JX7uS5UbO#pfhoc4SfRN])^1>4.$(u6@=6tDIfWj4nkHp%hB3F*^9W)zzz!'n(_%LBcHp=j#$$lh726\c./CY"`5+Y&a,f7-%6.k=9XBE.u0;TXRu';Q7r_f=neU"Qbbp[6jAhK_SjPol'JO*;\iq=EdGo)AUbMq`.*\r#an++IPL:rn9m^A:H:>bacJ0>@3jd\KJ&^%i'BM/+i@$@1fF8bj@rLt(e70>@q-MUY+sJG2^;=0F6VY]KmI6M\pGhm0lSd=:*-"aIHu$X8]gLsHUaNQb?_f1^S5rQPBDzzz!!&[^+UdqASGg6]f".DPDq/$FbEl$TGd]mKVrH"q)/UIL7(%='4*HKca?O=BXK:j.#j'[@!k$!FocYuJ5Nh78?%?SZ*D?Ju+[/+u2_rkVhKr%_s74>dr`0"!zzz!!&[^i@c=Le*3\!++O2C[u^V6]j>'@7Z@b#)n\]JN?^rR"HIuQ9V+@LWeugsQ7bq&3"]QrUArK-2g=ZCiZd1i,*jFIiICZ1j84fWI4L1iOOXN#TZ*V=M!qLViOfHn,>!rC:1WFPq!O>[]'l=>Gk4:T>OE":]EBbGqU;7#+6Ou=*(#F)b>o,+ua=Upf8?:9AW`2Pp=0#B(6%]BiThZ5q7ZI!7\3"&FnV,bI`/#$)7fN2CO,F4mX&j5hW)8<[*U;7[*tf218ih.^kV;![s85g,Y#qrJ:LJ1F"+s96@ibcpt5Y".DdINis`Poc1LYmdhVH!R*3Rln@&H!zzz!!!#\$ooHkc%?Nj\9@7CWEGnr6K31@Y[MQ:GM[VC.$UmlI.PU1cam;jEhu_S&e]6\nn!:q5BcDGdn`3q1$8N6khR>r@R?51-Fc9)$&%fcS0zzz;#X!W8I=util$[heu[!8acW(3`5G2HHG*Y?DVVa!]!^;[;?N1V-'diO[neJ6E8\P,n`(E<>aUhCk&`XSN#3^&ir-AK(5q;B]C2n!Tu)0F]bbq_U0B@VLkpjq_hQF+3V21FK0BNfr:k:#3=5s$*\=cbF6:[gJ,D$Io]R#?np&QhC"#J,pg:R"e;=mDi,VD>V=XIJGh`Lp9AjCU?FP;pQg_6]"qu6M"o3Z`@AZp`9>&[0'EA+5zzz!2(%IaN1;XV+QFK'rF`s)XOa(@,\tV@VkMIqeiVC!ek.arr(g]p\HQIaNs,L`zzz!8nV=,9u6XhgTqFeQ48#W)0U"276U.lk0'/l#bLW=&4coa,V1V*X`[60>@3Jr7"cM>T)mZzzzzgq'"9F/HfSglLPHCE,BWka?(TC"&qRYQk45jmqNVcT_5B_hJVQ4V.Snzzz!.\8lX]@N"fWa&8B-0-S,hQT-zzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!"Li37=fdL$!9MdZQc!<<*"zzzPTciQd)YTL7h@Bo9*CqriH5%zzz!!"E7&.nC[!MPu[!^Zkezzz!!"&O&Fq1LTpnm\63$uczzz!$2[_ng=I3S'eMW&DFI'caNmNOp(Zkr#5LI!rr<$!#1`,IuD&Ghrb"?z!2+]Ni'2`'&G#"D#D@E2;i^iWh7p:r:fZq#-4\RJDl&Og6CXcH(nql]VNu!D`spVtqK&=4DT"^Z>V?_n/tHPq5?QAf<*A;&b?@/%qYdG`hWn8Z'tj$(n:uQ`#oq+N<`:Dm)&)8TBqCiHmbH#dO4B)O"cSp+B&O]#T`$-_G::sp1^7Yu=&J5Un=iFI)_#M*%J<3!6,Tnoj9RZ'!`F:cIUU5X\#Y>?:8oKRcnH]TI`kNie%GLWmHd]6;'UhF_cGhP/,r9,X3!#U(C$8P25R&[=_M+G>Q,LuhD66AUGR(gI@Q("jN4#lQsb\hgm/N,s\u7eBUaY4>DL!(f2FCq[a"R7BM5\9UfWh<+?R(0Ka3ksKc.N9mb9f(-tOAUQTf,M2(6:8DsRUsAj\;GJ(gg/FqWW,g[$:&e%Tq[m=YXm:eMJSJ%4pE-&#Z:f7mGfAlReNYuoGZ9NDN?+f9d)GY`!?j!W#mfAR&eIAt`0-@8&0bS?8jEXo&J<3Y"G@&Ek*[q(fn1#jgo_WUP`Ud-$`r92G%.@BoJC*-iUH[/cEr]\TWC7>d%/],oeni$0m1OiF]WH`!WA`/Gq9p,6:=5[ng=G]6psEOXosE8CiKW3]!YKcdqpOj[R*u:\f(UtB0!>6ql`52-A\JO`Nult%b65ne?3/MD7)>>c12mW\T$-*-cRQ?s4gkaD!mR#hFEMVRcuDVe$(8R\$u]d],`^WPdihZ]#*$YBI'9en0^'m.T4SK3_[lF_R.jAA:^C,Tqc:,QXU.>lm?KLfffQ&4/c9;$dLO+sLLlPCO2g+sI4m!^]>a=9:g_:"#*@RB.1%pEbD$IVs3G#S+:fWZV"DI^@c05lWMqKm2jDi+?BTr'_X0\p/kJ45a:+I7sVH0SI%,$YN#>ND)BD$(^-3*!]+Cqrg=5jf'E]S8'2n`8(@:clhY$$:T9Wd@9&bEr7)VN:MXKg0U'?r?Op5Q,Yj[[6?`0q5K_GZPId*40D+[e^L8I5YG,*o/1KFe_-Z2@0Y#S@X\K.?tr,(&>NTrih,3:+0f'6Jr.P*I7W?!Af(S@"YXcLHNEhR.CG^ojj-GF$MFS$!Xa,@b.Mk/HrC/=kgf]G&#,#)$eNVgF9p%RN<^/*,E_%69;F>Mpur_QHnnc_%YU]6TAd(R1(rMr'[C5LQrn_WbS9+Y54gE'UAa[[D($?1ph5>jn]8O],TDZh05?9<1HUOUH*^1A-:uX5/2,6)'b?1BmIk_kbp3fQqB9WEqk,SGhDu8\6:=5[ng=G]`*;$X^+IdRp.cX^3O)e`Hs6Nt1jsc/Zsc0(BTr9s-Y7O)g;r\'jlp9$M=T.^*Sd,UVN:&,h#F:FY6,sQ;$''Qp'(Ucl^)6GS[igYI7/Se<4V<9!UAB:EAl[=&K3`%m9M5&I]u;+bamaggR`8bj`^KU\oL3t,@*AI78.ZSJ%@JOD)3ThD0"1nhd,[p+G?S%R1'AOh7%d43ltd=*QV,nXJWZlKmV>4h0geP9KD8E\hc@XFL0qYrMudc-[*]IT=;^@WYeI1jIh2)55YBTi&]9VDgRdA[oFWM/58@$A%2I'^fn;B:gQA5FQo2OM\sGi49#T_ZM9`9&0`WIR1n`CR[I1$noHSRpr:GD]<3J'UD-_XN@qR_7+3WBGmKa,un8%?6!d+=bb7BGJ-D/$HUjM(O.:6)r@n4JHEjM2lDL;DCLP7BF=nD@A.M(c?0Bd2'[tk0?&.oMZr(0-Zn^b,&s0DAg3GheinjU/cD:<)FV[W:N=L1-,Bed5'l?/DgKTq%)I5]9+=sO#H`K?oklMeJ%R/BTUnZ4.bgplEK1T/]l&21C9>nCL"*8-P*j+lQr#pKR@!^]?L7KPnS>%V]3dJ[<%C"&XRhEbaCI_2f5YiE1A@-o?%P0@GOlm8+)+sfb9-T7eBW'.R68?l-.[j3`c0@2.O;ep`Zuckkt*d02ld3e0md,0Imb@QXdHY`p]&!MT#$j(jkqCIQP`f6;,'^.jf=af)D5[oq)6;)9sY-IG(n3Tea%S]tD\S#`A"&<_2;$ESS>kdE'Af;gN\:B#1h$L_/,NMm^BZ8F_OWBjl,h\$Je7)Y7QJ.S$,b,qd]gei4IL^);p\oF?BX;DSt^V8%6U0P&^mHI`TC8H:[6I.iA:ZY1`'jFkbKoI%a+::7564NqnK\TtdYQ#6C;,b1=qQf%]+9SEnkL[5e?#W8srrj0XU8RR@ZJ[MZsMe1o\+-S4]3:)]uAYNXckFY1RfL@iV"NT6(fA%*D,lZHc`!NKBLs%0JCIb)mKVYHqKkY4'8(eJaE&(U)]_jQ^SI63EUHY8j2@\,bY>NDCp!?j"IAMPB-s1k(\Od"n]0+Mn3+/ILtQ\arc-au1-cMR/F5o&t]6<:!/o[M.n71';lkp)J4.!=rT/!g[TE5:J;LBMs,HqQ^1&J7Z6!^^!Ml=/K7RFBNrjL+1=s8;hn!^B\HJ5F.55PNT)pPnY@&#ht3Zi(opWsilI00heD[&7D)8;5sTZ\]6ZL'3/@&J;;G8O*ROQITqrY9iFbI&dYd'E=A\5-Bs-QA9Wf;D65&Wp.Dh9CHr?'(_8NG($6:f4O(5rGnSl+[0\b8uKr!0-K=jF7G4Rm.$aP#pKRB!^]?L#*0TOQ[8*R<04-.P^j;\_D2u?o'iQ@dGffN=NimI4ZE'+W>r$em1Fcdijq3-=?i[q2pk"g?$-F$c"kuPJO4P/gk$#A_[d\^#UmuEWNPC#5%s$!/[2T*/''G*kYf>hU7-hhC*8l>n:&Da2nm2RMse?tu%,Md;u2X"q.Ld@/R:m!%Hj=LD+_EpMd9O$W]6FUm(FuDj7<1b>i7]DTH2(@r&2J".+kC6&(+f3/&0M@[J[iW[i]sW'PcT\02OD(%qdYk#Nf!^Rqrk\Ta+!"J$5Xnq_WXaC\G,LC(rSF8!X6$p!Q^IgPt?+C\.m+B2kX#^P`a!*MUf8lGdX=:!)n5cA/QjQ27%UYYY?Su#=VN$`\*3m#([HI\k*3eb(g+F;Vj7lEtnpI%Gdc:H0d=[\s-[o*@mS3^elgYUi&b%L+8/4H:G*$8"G@IC/@p;#K('7s;sf2J#=Zp22DdKQQMrMJgCe/L+Q-HtK*S5Ub7K1ag5R]R8"5aNcfQ.qLuHTW\YG#"8S[7@&JNbpWT9/;.Rr+>bt?KZ.C"n%n[;a]ddp.1RUBUIj:3Om)c1F1W3DO'aDE49%h`TYJOLgnIQdZ!75?\&u<`5%6'RF84[H""&g%aW9u*^*#Tb+G>Q,,q/j'IXRqHpOPFXTfXJd6sLG'Bm)8(H@4X$!Z-qi:RU6Gb(A]Qi>i[fq1Gn5bX$&0e]Tgp_uZ/qu'.FO-aiRM;lrP[E/nIfHei`[Tc-3[?Pthn,`WD^ChuG&8)g[7/$^P^j>)/ZZdVUQ>4L^.mn_K.HZ%DLm")bN3f"j)OX,lHmi9ha^X%7sVS."%#?'g#Ghcfl1c"F;l>F,ZHFc,5OtPkp)dQLumLQ%1%)lWA'g3ii.c%2*m:T*/HJD3c=Xo[+PH)?>g,=p@,P6K_CsR?4sV8(jk:UNl;t#iW>rQ!5lYP\XeM_A*OqnAhL0%e.D>aaC-NpopC\%S;DW;[b9q&VW*AGYbT6(5W_P0^]PH)BhN&@5+=%A2>PJ(T+&Qomm3k4bkejkNIJ2'8K"`RV.nDo2&`$G^)_-:M/]egR$1ZU=,cBIa[;Bcpl'dh;Gp+0:'$ZSR:7JZP`gK#nc^")`/tBB9FZ,4O3H^/(Q5T9@L`%L^CK/q8+Q?*I!?oBc2g8ZSB!dF6PT(it?@t1EGj(&5pam.DC?]V[Sl/!saKIQ$BpRSIm(&;AO19B`>A4X4]`V1!a8AYVHYK2j+nI'A+nm9?IlDWW_tjPE.10n^nq&,J=lB:0/6[5o0Wl[k1?:Qg[^B."8JV2()=k*nt`LlDk*?/!7L5TiJ1<$+_9E(c%@c$hm;3a'+B;oIj024j:3T62P@YApT*:_QJ]4.Y`52?<-*dS$DCt:,+0hra`>IQkF5KPpq1[&V+LdA:j"%)0G=UrK?QHma\=Ie2O.GUuBm>-5V+h]Wl2bPep\Zf]cjd:VaTtN6KRp7HX/Vj)B&/Y:4GY#r<[IM<=TjN:MN>m9$Ak/D]VGA23l.](g.DNt/4Wl"N5Rc3!#t(kbMjX:l6#&,EpVO1Dl2b0i?(.UJAJ_apq/du$<>O`L)2KOZ>'rd[,"dk)m\o$7#7Yr(eoUd2X\ke6n`,CY-\'bKtI.(A#E''c;hscdfrj6IlG@F8d"GF"h,p7l;U\H4hqenU`@I(+'Q>1nb?gl/KSsC>!+9/lA9D;V6gO39RXDM83ne91bMl2Rfr_[P[GP0j;T4n8l/%]Hk:)kDm]**cud9Vf`OO1./)ij8VmbQ+cs)B][55(>M@6^[^Dj@_QQ$DTZ_.:4lh#]pbI@?)N;Sq.5]L[.C(uI9#<"J`:IH6%&r&s/foJ+%t!*%F&GuqNu1$5ZhT2UhFlMeK,9cqtKWQ,P+j%L?C7PV/tb.tI;HLBN3I9[jk'(d7li[lb`+iISfnY^GOlk\W\_rOC'ck;f%2)LF=D@SHEnQ1bnZs(^4if?$!^clkXh8U%^Wh@X8jE[*XosE^>W\]fr@4'_2Z*-c#AR:hp"rDgY(J.\aVdfJW!,7io23M:siDqWidAm\rC_e%;>N^U*mpG?19]rI)5i@S?$e<@Z67q!Z!O')$&0ennD;^&7MN&)VkLm94^MRe2;55.'AMM3jgDRM#D]T2.]KkWQKoc]`A0r`amFnmCh"j)6S7:p"K/Q=%9Mb+kh]rPB6BMVf?:Dl#NRI+>hShr08IH<$3BnnbE5CYo'.a3TYe&J2fgP^j;h@Ym]B#SGnc%L?4d&l!#"-hV6@0H%6uB$9;XrI8kAD`>VUgopi3ZXnpMQ1ec.]a$PZZCtm$Sc=Q<$$5b3<;bT*h5@@YAOLUO%/d\K#Kh3%LSc%_$#-NPAY6pqHd`>B0?\10REmuV^R3HiapTAe>.V8?ZeSNld>32^[bjkM;r!9M)]9fZ7T;qg!(F0kMVEMeDi]cDndMGZf9\C0s+?B_nT'4^Cae9*i7>j$4k8itcu/QXU>EqIn^KmL?o+OB&sEHD%4hZo?j)"`??]48b.@`>-^<+qKfUl/8BWi^cLCU1Y..m:a3As7;geP)30\!//mR?NqSH(glS^LS1%*-,O"!sF:qg.M5SM%@Car?c*e:&Npu+0KTCEoem37Li7Alu?#$&eOWs3J24_l;A38,TqbO*&[AEYXcktO-pKeq4f:V8njn>F(HYZU(g"dh@Mj=kQDoISW;CKW#^N8.JlA2>P>?X\/T=jookYo7&rKs57X'Vq!iC,s6Qq1nc=06J9icb(_mm9>j6r!L2;6V:b!Xs#;Y`GhaY./PMCSqR3hG.F-pl&lX5R<9F!^_^!,q8p=7!.$*+I(ZbV:01A!]0Zn)m"o2\YX3B6AH^3WTT>!IZ>8gbra`KqL?a?-M5K(3gGm6MVTm39^,rk55&RQ491kgmtEDRHNW4%tCi^+JDpZM-f2gE0!5`oHr[\ps26H$it#H>6l5d!q^E\#]^c&.oL/\/&.2.'uRW-H!Q-bE\kt_uuWUG&Rsn$Di)"[b$"@j8+1G/Chi6uO=I]CI,c)!c63@HU_2n!Ft(o"*Y;L3bI*7jFlm@l9JU1_:a?aZna0PYIB\4/j;3S1Ll!rO^/Zer4)0NE,6WZR#SI]cEig%73T5.?=/5dXp[5)i*V*/0(d9#eG/ipfCOFIgPQXZOOGIEtcXJ<8+9rU[-]^AZZiEr!8rbm4S`nOc%P&[=_M+G>R=8c^*[Z5LgSY`(SPbSSSbbf8/K*CNomd*AdR9mE&+A_2Yp[8J+]='V-<*]M(\P09&92g*jAg(cCG5NU@qD/7B4:>9o+X"qZOYoqm(+eS^[:Vh/@KJiGn[1Y3*X\-3;T%m,a^c!8*9cMJ[/hn@"/QOOg5>]:&4,n;.lT-st%o>HgLFWkAGtk`sQ)*6-/+#!3+P(f&ppD,kAkm@mOh/!2E[6t76/9`l^XD]NBoDj2cc')um<.Mmg]Kn!=t5I8a3luNS5Rk/3Eigrc4gGjN!+f[[o]RDp+n'J?0#"VPpI23XGjf<9BWlYqLpC\jb8!2/^qn(s"W>pYj1@oVV(f\Y*,AnI%2r-+is6_n"3,fA?eIB_l$Ndq/(f\$_+J,J/l2/`04J=kst._god6D^]C,/_]-tfD7SH9^N7pTPm@Y(0hO\:&[=_M+G>R=8c^).njRUd]^`pkXJe!*"5Cu+VDC^O8+q`Heb!:\:1rk=c;M4!J<85lFYC"2-o*_6EF!6X=khM6=*6B9']>t+C6hAG!VkGcaRb3B5Q,q)_4IV``ZJ*5LWN^4'=.@#-!i`Db[\@r6)9Ks,VqA2[HfW$rW>U%AL/IPLkpl'[C?9)#@^F(9ZQtX(>8=ZRne;^Ca1Q%s/KD==Kb`Z:V.p#]Z^2-\cP2I8N->"KJOtk3[!Ltf8q]VU/a6KbWR)u.IT[2e0Nepbn\oXa84o3:Y50G/-LX;[T$KmD\[ondJ@%3J9T*`[aa6g4psu2DH-r\=enXgLbO2.:n*\p7[WtBS2T0cdrV?=4IIOCS<@]*bUJZPuggEAq_!pE5OJME"KWp(?(8h:gY\^mpmf*pN2D88$NP)<:HU`)g&44>$of-F)6e0DC::iZ#5V(m:K;Puqjmk_AKIj*hZX^JS=#kqABRNQBf!s>na:!YY41,jQ+`$#2jI%AU=WP5.K2epLa=VR+[e^d%'IP^&F.rgFXYnJlOOAe2?K=&>2-H]U5N70AF>[UV_e)1jpHV"i]8[1k.W("P_A:a=&l2LOMcP7oW\F&<-EWVr+VRi]E1EP]":]QgU59K)Rr:K!ZUc^:hZ'b@g>^hXhB3sQ$[ek:o3"1S2g/Pm<[h6JNO!#i`XZRna($U]/(fd(XH64^+hl<8==@ZN\D-(oliB9_n)g0[NUOaDS15NGL**4!?lqV&i2JiAr0'=G;$UMlgt?pB*1@h5c>B5F=^=k=QRUQ*nRMh7[kFli/X^/90`d+[8J\jrnrj5>?b@rMbho?rn1Ytot3R4hib.]*s!2/2>:0V]^I?,Se2tGKFm["!saKaa)#HhfmC0i3h7.0`lR6ZZUTkNP.H,rQNW-(AFGPcBetp`2j2;u'Dm]#PuE/?r03!);&j#e^p[]C\oiLI[k(oPaEn9j?(4RO:PpU5:LAFO^OVDl_'HRf*GCc3uhlOg`o1SDHjSL5BVp.G.91#ZM!hr=#e6-\SuAPg5t@IZ,I8/5rW;DG/MJh%&LX]HWU6$$4'cc:.;1"mM)3G4k1lc+mit(&J,Sp+#Af[`FoW#2$nRoB\bGW=SCkJZfIn"j>4H7c-+8\4%'1U[UM,48g^(=11-)mODs6[Cp?fP(@.lZe&Lc1g2,%h@;;EQ$kNuUR%5T7RqI]3M=DDlcBq/S:/-43cP5]XFDf[jO]q8uaiS_9T5GDY#m^^=rdcpfRsCJM\`rXd+!"H&H>7)E+nJZn2XjWJKM"Q)5gG/^f>M?#.n*495X6`)#matMG"07C+X%RAXEj^'?h(J.=,TP\*?1BAG?0`!D^.niW;-IM2#AR<>n?#3IO)-M`hhRpb;(FdeJ+,sn.Ybmcpf:X4mV)@]U\B0+_:/B1i\)ErDKRb_8Qa`YgSTFJE5D949*,MTBk,>5CK,*=pErB)`#eB*2W@j@6jF/\_MA0Ru+nbbiWp.F.X(GS!/uTs`q!:L3@a)"$e?578RPd^]aC-j$%djo#+"6,#.fgg3ZDmSaIDt;B'G+/;*b8$%G<_K0&^.#i&eNd*0kY^ed9ReGSs=H`\@G7R`IKS@aL+#UO-gHuR9'6Jea97bGohIs;UsnefdDiLNuful=ICaZm'D.dG1B^OXn=/IBd>u&^(=#sKl:qpM`FT\3kfbH?43)&@RJj'Wi5\Th"]uM:*BB-1lSjj5imu0#l5&NOqCKrnZ9?p?SM)3DIU@[S`p@#R[HVLD6=E\O;%.BD=mu;>!N=-sd]rskso;6+PS!t]b&O0"[3dEZX0k'>f>7L,CbbG'[8Y5B&I0g/_[T<%E*bSq`-k\FN,gJr@Dgil[h]p//Ng^QT8UW.%?JoF&*8Vh#qeGI1EW,Ufjl2EcG:dcPYY&o/bNW:u?\.MoP5uj$j1XN(:sEi5`Mu*A1WSOl.ZmZJR_KKI3,k6Tr"/2^>:s*j2j;Q@]-f)fDgRd5&i8-d4Q8X]Qoh`OGOOqD4\PAUN0TP/KWn^nIf/C/HKVPsb8PS@q!*@o4oWos0?#S_,1h_CKOA6TBG3:kunS^Le%GbruFfuI5-'%f0]/=[Z1D/"I?^jVqBZ3'jFkb-&37b0D0:/d1?)EmG/]p&Af'FJ.Np9Rm+!93?^S'=;QGr;LWI-IT80_0D?krboC:S*,@Tb;SR::lZU9ee!X_6%<;sG;D7hD8ga_qAo1a^3doM&@_[**9R5Ne^e]6i0k*QEhC-k;,<9bueVg:Mp%Z@91\\Y:$f&M;'SK&k)J`F!2B:Ia4EXaJo4Rp`T)Q_Yr?Yk*n=R\+@Rss9Bu>B0qG.dp1a"*GSbq8li`h2tpKsaTl!o(PC9N+Ub.oomM>^?X[81lP#R0G=4!9dC]:!,Uht0c/g^E_%YP@B,#+n)^\%f*gM/E?fjM!4apFGdqk?@oao)YuE)<,s7dYX'd:UQ7Ed9=ddVX.f=o`\ikPkOWjk_4X9L]'WL-H245AiBSMi&[iBl?mpKa]*?,JLmYN@@qi<"?Lf:GANhABsVnF]i4@drodK#LV"nLP>Wg2f]%[nVD\oJ,%TieZ2]!rV?=4XEf/Nci5J3.+c#WCJkZr5CMGV[oFI]qQB`%!?j!k#m_\`TiB@1kd9*Xs/,,u2o%$HL_pg4#U'CR`Phb!S_Br<=V;Af3I9NX"c7N(?)o_LI-3F9`!`D0DYiRgd]N?)):?lqP`Rr%PLPHTO&rqVHd>`>VH/q>5AIP!DNeG$hm$&.>#R*/opIfFG<.k:dOM.(.EHkT>9(X&0f:[%dD'G9E1\X'FcmEIh4C0O8\OKUE-J)lo'tMld*K>p?^Z>iG.l1KiKSZ),_sL7>r>i8HZK.YS9CBJdH$sM&eJtm#mcM/TO'H2dr*L&^pg*PGi59@[klbUG6i)3jR/FkO4FKFuZ$j-n&VIpsc)Q>-%JukZMrh'/(GkN\d`FDhTu+pVZrF4N9)6nko.&k^&lW,C6<&F^!-.bpp:c8=N)FhmGK.K.1RK&4.p`&eIApjmZk3@/,P]d+-9^%i/F=JXK8p"W\`]NR2`PhbYVn+fB*8MuGH64m(d@knB-Y)R(=)UtbW,'<;fI[S#:3-B,!l%fa(D9`Z2=mXS[B!n$9SVWB/\L6jF^dJI?eQr+0tshAZ*Q,Hd46@#mp5al9_Q263UER!Z,*G2Ok]3Q0,2l,lM4r:57*.TZ35jS`#.NqR?u4@.dVcjKPj6c#aN,@:2XF8\F@\p4o([M*QWlssMNMm^qVk`:O*HL?;6q,2)BkB`a]OTmTa7.le"jYoY&,*1Bf+fMX?SlAS]6lI!.s=>_6APeg;U>)%I-]2JNScG.Fq"4T$DmJ'AVd00!?j";+27d#0&ODjhmW=XYAtgX\9?Y?ik'kcd+F<_KG)ioQOXK=->mM-DMgu?S]**cuZ%-Rjc8(qRSe\pk^hF^rXPS_m+_#C:+G:S:c'Qc<*86\-]obgq^OT/'^c(H;qC'8!F;l"-1:MNjm78t!j?CiMB(ddXG4f*[@6/VLE+G#7SiWZGme$T(T,kKjF2YO+A,IL\I<+eR::jd=1'N-12>-OJO`tYUe#Kcjk'>9Dl6L47=1Q7gBXdfsR7(B_+eS5GG@a1m[1sP4fp+)q&%aSH[8J+F71]5K]BZBj6f"05#Jp]]fNPiiu3,@mF^o.mro?T_IAj^&0`;BQ9PZ]+U2#epqBd?Wl'p84MG17C:5+4nI>i$$uB^nGfFGP>>d)A'2D\/08g%VrE:QEg7ZcXTuc$!`-%bRASth'Xf?/(Vqi['KE?8ZT$.d0A8POt?0>9V2$)QLcdWln%k5E6A1`WEfmBI+=2:*[EB9qEJL!$1/[an#'>9GDoCK,4uRQaEX3d#-!TRR@]DfH'h("knWKLYZ::E6D)lO6SNu-(T-2;-Q`scc9$69L.h5_],[Pa+MdGf;gMmWKVtK>h:5DKSYF1.01SCFpf?&Wa;guXC(uRO^Bs7-@,\>C)O+>h3#AY8mLt>k6JoCWbg;&eMnmQ%0Di+sN=;#m_]?"]L2"eh!5(^3%qtV3R2qh>ne;iE4JMWE3ToeogOb!C@^k7rTr/sG]76ljjf8@1He`7!k`odroksafpK.-JnK`&NWCl90UUpA//ht:f[)Rh!3T5&L;XO1$;W5`/N@S!;+WuH7,68rU6prSU&eIAOY'*hW-un,KT=!=NZKn9(-WitBpe&\BhRWd_-`(_Q@KMNa."4pjNPkK=:AJ1n+uVE`jNsI=Z4G:46DC"#GPk%2e3uYX';+H-E(*K;tmC9s*=7DYLVC]3Wd?f^\ESD9O4=rT+YC#oX]5FZQM1?/'NWb"H&J;;G8O*P9\6@>op"S)2bSdI=(h#D0a0+#cad1F"ST5a2bY:`qiF1uGH\mp0a;#2K6*kB^BUQOeg1dtU(*F`a19dmuOCO56Uma/5]5k>cT..@:!^ZoKFAM%p$ts4uc8;(TShXl:B'D-,6K,&O+/W=$gQHYE]Z>F'Ua*mt^pL0)Ld?pD*@>:]i!tSI%L("DODu>9:`](>aT]C8`">RmUM?[]m[?a4:h"J5mjIlKFea#,UFRd`NJu(/bn]to'Q5?s(M.D*VjmYr'p.inSlLV2WEF/(HShAqk(Y'eGh^YDHbp.(Cp7Cr\QNNn3TPCqU2c\9C)#*htZZP:P]7piuYVb7Siomq.G3UW8?PT)npW1a'VNU0Tq6E-/;R`.>"lX&?gga]5@/UC;of:$5=;GA_GdFDI[X3D21bSiWAZ\O&>0Kb+?0dgA`V#="Y2jkg*\aSAm6+YM8D9"CUt08HU7]UFXP%p?g*M&Bf^1&?dGS7n5>,l@-=XGEs-TDBmh*[jM5-]4/!eGn&dm@,fcV>[T;EdPd5>hu++K?qSELmbJf.W:4.qK]@Y2ncFe\i^"/]#;c/(7!^\7DZ!"oj[6:aA?!'[a\O3\>T\7F*E-QWfp?p#_XKSYF1.01S[`"J>c&0`;BQ9PZ]+lY(blB"imb`OfC9##._cj,2ZOp$GqljX/PQHd[seiS2eGFdns>QLOiD6BE>QDJZ(>bLO"0H_Y-eQ+,6c^h@$m(!KJHk/Jel+H[SXJniKcgnn817ZYFM*kQ?UsLIQC6^r.;bl7@cC_P85%4!UU4/fYd0%pn_tD3ZX]D?Ad$VRuOM=j"OFRlX639IWYg]Ql;SO:WNq\B&s<>Wta`Ngar[[o^#8P-4E;>nplm?KLfffQ&4/c9;$dLO+sLLlPCO2g+sI4m!^]?L7KPoIS%:N+OhH"b.Vb75[eO>r;E?`R&6cDBY>np;#_b0.\(e%hKY"Tg,[\!;#3,08rB4NHiSYap$R7D[T!r=r*)^lK3.7=JDU7_!;0h0*q92FVXb",,;5N#W[i<"B5IB#fRWZe8SkM+ZPh%SQd&630R;:BEjb#RLdmlk0jr7)Y7QJ.No6M+U#=&J5VuT*0fY&J6b-&eHOu2gE9.]>\g/R(n0ur2Hj!Y#g67@g8shh\@)IaOE9IFAO$=1PnX"D8Oc.NC(AI+0#r:KTFVT\"QOE2&Z,Dd0?L)GNM;!^5qX5C<4P>FDl<(lm?KLfffQ&4/c9;$dLO+sLLlPCO2g+sI4m!^]>aJ,u@K@Hr\:26kO5Z'`sj@f8VV6T>5U#VDX=,sV)7??t/8WL45dY&pgLpJqW$])C8IPKttZ-J>hEbaCI_2f5YiE1A@-o=DV]eh1s]T<`PKpPjV!4jp6\;PgUq,hWsWaIFtk[sOTQj!rY?2m(@`)Ot9*UA`pcUXeAJbqC1RGZ6jQ+G>H1JC)On!?jj!/4g-R+X35N"G@/0mWbo;Z)7=qY9]-_oZDuL2OlmEhS.YsW.ul%Qs$fbfg^8XLj@[d/GYFeI59*=ZMZmkj#r.bXV<9%kf$ee+#6?hbo+ksj^-]NP:PQ:ja7F+Lm[YbV>:j\bt%Js(7Pkn@gpB+(I&'fe:>-r6IAZGaJOeg#!^]up#mfAR&eIAt`0-@8&0bS?8jEXo&J<3Y"G@3b#1<4*QS-DU7_-3WFJ%cm9ffKogi3bq9#?6prRt#m_[uQDaq>&.oMZr(0-Z&J5V-.fl=f90c$-W4Qg@33=OF^142ek^t=?"GEuj&eMY-,p7ksLa=JN+[j6]Q%0Di+sN=;#m_[u,%>L;+B2kX#RQjBb;s^m'"&m\CCizzz!5J[<6N/5QF>HNS#QOi)zzz^]Q#.o^R:Wd6k/iYJ&:Dkek2&qa[M!WW3#zzzzzzzzzzzzzzzzzzzzzzzzz!.^Q.rs.1oL#;~>endstream +endobj +45 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 101 /Length 682 + /Subtype /Image /Type /XObject /Width 3083 +>> +stream +Gb"0Q0`_7S#_9/Y<@k+(4P1;9Z3pX4oZVLZ!!)N)$31&kOqdrsJ0ZWF!!#Sk!!!"^X8i5#,Zt-J!(aBs!!&*k"TSNFaU/"J5`ui^!.Z=F!!!!jendstream +endobj +46 0 obj +<< +/Contents 144 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.bb628729698bfa2787467d6784c61ce9 44 0 R +>> >> /Rotate 0 /Trans << >> /Type /Page >> endobj -45 0 obj -<< -/A << -/S /URI /Type /Action /URI (https://undefect.com/moad-cheat-sheet/) ->> /Border [ 0 0 0 ] /Rect [ 505.5536 464.2236 538.0932 476.2236 ] /Subtype /Link /Type /Annot ->> -endobj -46 0 obj -<< -/A << -/S /URI /Type /Action /URI (https://undefect.com/moad-cheat-sheet/) ->> /Border [ 0 0 0 ] /Rect [ 57.02362 452.2236 115.9985 464.2236 ] /Subtype /Link /Type /Annot ->> -endobj 47 0 obj << -/Annots [ 45 0 R 46 0 R ] /Contents 138 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << -/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] ->> /Rotate 0 - /Trans << - ->> /Type /Page ->> -endobj -48 0 obj -<< -/Contents 139 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 145 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -411,23 +402,23 @@ endobj /Type /Page >> endobj +48 0 obj +<< +/A << +/S /URI /Type /Action /URI (https://undefect.com/moad-cheat-sheet/) +>> /Border [ 0 0 0 ] /Rect [ 505.5536 384.2236 538.0932 396.2236 ] /Subtype /Link /Type /Annot +>> +endobj 49 0 obj << /A << -/S /URI /Type /Action /URI (mailto:russell@unturf) ->> /Border [ 0 0 0 ] /Rect [ 134.8436 216.6236 202.0657 228.6236 ] /Subtype /Link /Type /Annot +/S /URI /Type /Action /URI (https://undefect.com/moad-cheat-sheet/) +>> /Border [ 0 0 0 ] /Rect [ 57.02362 372.2236 115.9985 384.2236 ] /Subtype /Link /Type /Annot >> endobj 50 0 obj << -/A << -/S /URI /Type /Action /URI (https://undefect.com/public/stress-on-our-shared-heart/) ->> /Border [ 0 0 0 ] /Rect [ 247.8136 216.6236 385.3838 228.6236 ] /Subtype /Link /Type /Annot ->> -endobj -51 0 obj -<< -/Annots [ 49 0 R 50 0 R ] /Contents 140 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Annots [ 48 0 R 49 0 R ] /Contents 146 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -435,23 +426,33 @@ endobj >> /Type /Page >> endobj +51 0 obj +<< +/Contents 147 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj 52 0 obj << /A << -/S /URI /Type /Action /URI (https://undefect.com/public/stress-on-our-shared-heart/) ->> /Border [ 0 0 0 ] /Rect [ 293.562 363.0236 417.502 375.0236 ] /Subtype /Link /Type /Annot +/S /URI /Type /Action /URI (mailto:russell@unturf) +>> /Border [ 0 0 0 ] /Rect [ 134.8436 156.6236 202.0657 168.6236 ] /Subtype /Link /Type /Annot >> endobj 53 0 obj << /A << -/S /URI /Type /Action /URI (mailto:russell@unturf) ->> /Border [ 0 0 0 ] /Rect [ 423.062 363.0236 487.672 375.0236 ] /Subtype /Link /Type /Annot +/S /URI /Type /Action /URI (https://undefect.com/public/stress-on-our-shared-heart/) +>> /Border [ 0 0 0 ] /Rect [ 247.8136 156.6236 385.3838 168.6236 ] /Subtype /Link /Type /Annot >> endobj 54 0 obj << -/Annots [ 52 0 R 53 0 R ] /Contents 141 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Annots [ 52 0 R 53 0 R ] /Contents 148 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -461,13 +462,37 @@ endobj endobj 55 0 obj << -/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 523 /Length 58769 /SMask 56 0 R +/A << +/S /URI /Type /Action /URI (https://undefect.com/public/stress-on-our-shared-heart/) +>> /Border [ 0 0 0 ] /Rect [ 293.562 297.0236 417.502 309.0236 ] /Subtype /Link /Type /Annot +>> +endobj +56 0 obj +<< +/A << +/S /URI /Type /Action /URI (mailto:russell@unturf) +>> /Border [ 0 0 0 ] /Rect [ 423.062 297.0236 487.672 309.0236 ] /Subtype /Link /Type /Annot +>> +endobj +57 0 obj +<< +/Annots [ 55 0 R 56 0 R ] /Contents 149 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 + /Trans << + +>> /Type /Page +>> +endobj +58 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 523 /Length 58769 /SMask 59 0 R /Subtype /Image /Type /XObject /Width 535 >> stream Gb"-6G?bhRd.iTHHKKV;S9*7;?q-4+'=2>sQuc%9W4VOEt5+"MMd4I@K6]a#T+0$[iX^XpGYnBb\U(!cg3:0pQ,3AlqHU,Y3N0mqXMIRQ%XgD\@B&qcqo4As7>F"n(kU"eZ)VJVG-7+Y@$VHXm=Q?>IJA$]Qs*\aH.Qjo&Os2nAfY8dcJQ4UN#2/jiWjh?+]f;J,Rok6O.7:kHSO;cCI%@h7@_M*Zc\(S@F%HH=1.=X&lK6@q4QZj"4PT!s8W-"*K"fo]c2Ck8,dXgot5)^juTga]Q&l@?W$4/A#5MP9NGQp?gVH]"6b3HhYF5&!h*%!s8XX?O3$ADr8:BCtZ,J[;/um2;gj1CtW&u>cqGK%Vh6)>M$YU'>Aqo)B0V7*Zc@:']eH?GPUgk'.6P"H[C*aGdtAtDr/-Pe##k/?T0pQSND%AH$LDjEoc#dF7<'%qtiU+q@m7pM2;6b*ood`=2hs%q>C'[c'pY)cCC:M:EE/)q:a8i5m-nfi,c5HP8b@cnEnu>[r:0\\T>g?drX6MBhhDu>(!X[$Pmi+FRKQ.?5JFi'VX)6V"eZ;o;q]N7pRPejbdMdLrQL4kX"!t[2rsie\ace)":7PFtFD8pI2(;J$CtlDc\om=(joirJdVWK%0qLLQZ=(M#e>ZBQ&#u^6ZT:'*$lqBNfs519p[5_6iPOE_GCtO#6#LuBmbNX/+$`+e84W_$q>3t+`=W"M5J^#'c[_Mf$IQnT+62A?U8+J.,9oQB6D19MDM-AcqXeJ5^"0Ao5CND#^4#l:CtLFCY$C>T#9_:cn)%?L0+877H2[U4JHH/VrV'YOK3ULLGON7qs8LBl:upq#8;,IiG4p4`"ac[qm-Da>"MP>98k0,RR\-sq6oB4Gd/mXnl9,?g]e:R>Zfb6P:O<-"0M?]T%\T-fXSU'hhj4i$Q!^-TL#JNSV@Oj12514))GmKRl>9%Jd!8X_LLaoSNCoT9G\M3OX!BildlYhS0gt!<2rnHB?m"uRECe*c'gMo+Bl?^%9U/^k>(3cSQ5?3ZY%I*m+Ck#l-lhC^KS5Dgk^cB!0%qt7bA!E:7\\4OUZaS*^+i![;/iD+)1<,aZFV.!!:KcM\i!KHPRD6a*tDirVLg6j<:M,YcrY.J90o!\[f8e9%:M!F%3PC(,)%N\?qNPDL`_@B@!0.))Dp!El!>2=0,L)KA!]_%18b>5d>([]!^3LWDf]iE,`%XbA33(J[r@3j2Q`oC"94`=05Y;WI%EtM2ZA^eZ)&?C_J6rVHgZP-*0r>(Z%ClDr/-p4aT(q\&(8%0j7]'7oujl].eLCQR$O%1NJ@K&e-s1M2TLYHJZN6I8u3USE6bI$QEm?FOfX_Dqk":n[rl6rmD7K9n5u%NIHiU_Cq9.HB[WBpe)^q"Z(<]m@(aV+Sl^G5hDb9:+-NM#`b&S2kZ7I\bGi9mcNrOYmuY&G#5C[hg](m,#FfA]pB-CPeV=EH`H]#c[YWQQ)2Ys"+3fshU\l;n*f_K`NA`9[r,3K>Zmcbg9bQ-)&^OZ?\;^C1M=u]J"aQ&pV(_3Nih1VLBRi^^nj\jOr3.ZXB>#ZfsA+nA_SLV,_X,4W-\.%+A:JKXh$/m^4)7.d+HsDD-,!C5Kp?dYJ,L#k>Za97e-Vs@`'$)+')Dl-a]_U-\>N,Tb$t\>0H[#8Si>+"KR'!%;:J6t(!s]l1H8I`HS:--I'YM,m's]>jXOtFG%iKFCpncWWICm@Pg:MQI;R1t?"-ued.*Z(;?F"*5P$C\_MN8iD/m,?nm*n(Anmmg_oI1EshE?5Z`61ukI!I-?YHKVFkJF>`pmq6P)d:RNuW3#OP,95nih`JPDl7M3_u^V]Pm&.fE"Vb\DrY8Fu;_hj$^,UOjaG^,UH7AiqR*ZZ9':Q]*rA#E(mC:6YuL("qhNZEkp>^gHU&YN'.PNUk42M>[:VY6-5'NUYiY*CICPn9.hoRqtp8+V\DBJ]Y2!WUe%3KM&ed-=JOZ$*C<+\c(5EPDVb0.M\l5Sa6]dV/TUOLT(Jr#h=2%j%fU[Alia.],VH]Y%?=Y"W;6,-2IcJ.p'H0nH'E]9q+&kX&kA[?!%OnFj^Y)!ORA^m\s*\\o[%pG.At&J5V(IX[s&bCppf5%0qc2k=):4+jA%0)'DJar.o5ESeH[06u;=%-,1Z&$fIrCI?_`q"!OigpqJT?;I%K/^3;5IWG>ZmJd(]PJ";@h)^_mr9qE#Z=hKY;(?-(9q'#Qd0:k$\8\-\iPH:,)//4@Y3K&k?>XjYoA.$&,kngNSBdZeC[)B87('=3bKApqmbBhiZF2cr?b`c!=YO=<062Zk72PXC;@FEu"PL20p?\3ajtf?Pc3r`*QA^`VS9dY>R$$)X]i-\1jqhODr+18;t)fj-.nq\$bci=[`.RaYJnN633[StE_7)_(8ep(d"IuRH^[sH5(*-U*(C=cX&mWncVJE<`5KT=H@!HV,?Z(N,8(%(8oEFo5n`f^%*W"u4d9;0aG^$_InB>>N!.LZkPYP_VeFJPauq_6rd7$k3$_,^OsNcZCP@VmXG&m!E&I+8X]oOIe.Y0F%fp:cEokG8-C?5\-:2,oM.(Q8lb\>`*4&Re,0GVfV+Z%#gpqn4qLo:n:6mH!g#o\ScOO+YI&+rP0*a3QVVg=i?r]Bp*^"[DU-o;225jnj?m&r0_*A/q.>pC(i*PF%RlIC1!\(ijG*fZ>63QkFb@dXfmO%o7Uc$b9\[!m`Nf_Be5iW5\@B&qF]Lgq!_aDNao6&+^G&S82"Em2r57,')^[BN`WF;P2fHX&_WLoi%[n*]jjgD5NugHqH1Ro;9Z4uloCAjjl0R-3MgHl,OH:%#%`Ahpi#?>!jR`!U]4)snb$OZP6g9MC[l]+&M8Q^=&ECD$?In:1dRNZL>5q;R\l>Nfh"2'aP>EbsC45q^j>Vb^5=CI4]:GkE(u4onmZ'"q(/#po#4u0V>D7"$qrfFEGIMR5&3+.W7`uM;eGP4*9\ZXLnc@"K8Gq%Y3D(??$s=Wt6COZD;=8I/*3)If9*MD6(WT]Pugr%7\26_;!_6Ha0[[O^aRJCXf96Ea_/'M`/EB$FMeC=P4Zg;&625C^E$fmjWkZV*#smbEptH-Md8/1FdZ0UrjF'Js^_R-qUYR?oR6C,6"l+!=C"0=KC4h]o`GO>mW)s1mGX-Si;Nuj^PKpgWMh4<.UF^ST"Q_\"Ca2Q#OKn[>moB".3ad_5#GOO*lhC)6q"CpC*/>ZeB@nbYbH2d`P6@6R7eL9i8XA/W)?UV54c&@I`'M*P;03,$:V9AN^K&"/D=0E[3A5->lB$;)rG=(&rGAf'F%miu_J]Po'3Nr>/VG6)JF__#4O?uV.gUE5F7UNoZNK0#/%M"6^!i.9.(l0_.pO2i+JQLf[&YP1sc^l`AT";lr2F,?O1T.`-G4+/-Qlpd/p$:3oF660EE'4$no4PVERM#8GNhDLX)ho]:9UWboqA/8Q_hSS9W7LtWM#Er0I>Wi:#RC]d+hDsjk(sa![VXX&@)7FuFKmS>"Yg%c3]oP&eu`0Rp[;IpABBoV6iQoET8F@6k0BMZD;)@KnSkL-WNp*Y#,6I>7ZD`floBLjFE_s'$PtDu"U0HdDRKJscCR0Lf9dU#*gSG7Y7#fGc/7F9dY4tZ,^3VK0cP^qKXeNOPGpbJbREk&>8CcjKHeE=p[6kFkXl1I>NaF&+KE7eFR%@)OO"Z%2:YU#8p3cVk6CII(PBnDT"iQS"[j+&P!&!VMj)PjQ_b2mqj;$=$kBWLF'UWN`T\QrHS8)C;;:C;I[brp/_/#&B*6:(e0P&jW*14*I]G_.Lu_WD@dJ'L9mL";i_HoE;O>_0]0uD!\cXn"QSPiP4m^n/(j]YCk#IrVC6uD.^kNTi%RS,=ddL\8gQne#+9MGjsk?)n";'TVcbqLlL,(77Kbh[937qjXF_M(aN7jB%[/8-gI$`+c'pX&7&,nk99P7@N#=E0DVTL7q!k"RgqS?2:-FBk%I'hgf[qTSYTQUXe#,th3BMt6=`.Tik3e9q#A)2N=gBZfC=OMMZ\+q,j\tQ:3QK1\qtTrF*^*]%P&nRX_#Y>#!s]=k\T8#,46St%q$m=4')=eZI.lopYHP.=[l8][X]r88Fnf(35_4\$+)9+:T*Jh`OZpK_.M7Ip'k,MF^rqbq6IRF*aE-?CgHM"-c"(mb_A,RRUC5+AX^+@CX:S'\jcj@8bE_DraFX1a2Df8G73WnLpNV]JmkK_je!9sjDMR(E(30*Bp_3$Pj<-#D,hR'6UH_\[#ei"ttR7T0.C>*==f=bSZN&_4$i>9,>V`TN0Z+7jeKM)C/Jb)Du8+4(#j#rHQ0+aTdQ9[r:/91b$bB4aZ)#IGN`8Tt=[HI][E0.G1YSLPJ72*Zc@I7uf-+\hpUVd>72E\$Pkf1=1Rk2f:&9@-u[Up[$Q8UQ/(XJ3aR3/-sI^Oc_pq6(n)p4Eti4g9iV%rr)TKE]Y,LOWm4$:jKS;:'gjYW`H7EZ$:p;Ts+mIq1.#:VN`;J4@kdN7#;Q+:>K?5jOaiLb*FX&V:JL@;/=aaTe"$!^\u`e?bcR:pBLp.F.$<"OFp?ed\TTXkKX7%Kl;lH1O/Cs5H?Oe<"il$ZU"q51sXrX<-khV[;=PD[pJfLHaHhZqkE8U_D;`f0h=M/luT0@Z/cV;>7D;%qp.a#ise#,3,ZZYTbK_`J70:.J1^-Que(HEdiqXi:V#&+=Q$,mMMpl^2ZJR,m2cqDHb/Lqf)-BgD]m=hlj@T-:jUU*'U/%7?YdQ`Cps@_iAdo#+ET2Xpdln-n_o!Z%?P#nrK_P.I-3;Zril-h>-;BZXmD6o31#nrpLKFa7'T[1ga^)W5dNP#Fc'gMlo93--`r`5p3a%/Mp$Ao!b?ql)9s(/DWDf_Ta,fPjX/nQQ6:+dVfS'\LQ7cIsW`?+,C")WfbVEbPo^:NS6r;jk[a%`bTGI;lcC[&W<4jeC)8HhS!q/,1@r$NPJ^olOV#GcN=P6R0o\m]Q./8#k09AY4[%ci"&0lE0[Of)a(0DM?srq$77G$\g9P9_m64)Tfs51)hnK&H'e?Fl\H3tRVD]8FH@:0g@%<]i*2(f6tsNRXq+PCIeeEoj<(ZY"t&*Cc)2%I10QLW>f=BDh]*JqJ\!foI4>>3_<.O,q%tkn<")(^CBi'GR?$nV.JlOuEsZW\f,qJ#@J@A?:K0!B%\1?:r%B5!+rU:KCI4&;LNKhaWSDJbj9jk6A[866+=tT0L)?s'E2k%`H<(`5T]DqXb*VB:/=-`N0,5%N;f9X="MAk,P4R\S7QP[gSqAHNNu-!;('R^rV&"d?/90_e_Q?;6UF]Qs*N:4EZ\%'0]$Jp_ups8Mn6Khn:&r!c=ES>NIhLYBEU8`*m_C=TWbingG#&%l;($5I"a`HU\$_7e)fZt\!DYSd-&h(rif!P83CIJ]1^bA.1^",)btOQ"*4.nh9e;,JV'/76,]mlWL@c5a67fsGH,T$H-%F4I`,2rmZ*?bLbSSYhI/:PB,jppN'^M48;-c"G:iV48%Z9'=KjZhQS!?soWbDr/-(E$\,NP!BAeB/1Bl:#3C'_pc/:jU,"gYS%`g-Wr*&Q31S]H'C,TiX!YCS`&F6jit06=gQPe@5KYlY['R_6X^%YS.c)8(gtoFTTbQQhq>)LhnEiD.*EVr=QJauUjJ:3'.-O$Fn=`iEiUQKm-X2$*'$?kMn"9:Ic[@8*&q>>*sMqa/97ZLC!reS2Vdlnn^1`^qk)fNWb*Nu>N*hr2eR"FF\%8\aIYQ,g7sa6[r1a//V?m4Gk#(OFqH@4hnFM;p:._RiBfRA`!-DM8I:ah7Z80-3D1>UHs#egR-NkZS#=4nQR,9?gB'@^A&"YF_0GcI--;ELP@e]Fm9Z)P@Vq,Q$aSa\97*Qqil?lfJ/Q%!WrPpG<9p15h,j&i'EB$VG'SET9d0U`)$U!OR&moV+[kH\SPY]?m$T&Z]QJ&NjuSYnjJ(^KA!0@,tjO8Agb-gp"t9!;)NkA,_Ib&0MdfF-uSCR,Y"of&NMfI?+Y8;Hm]gL(f2H&``fBA.Iu3o>jf&<<(<5qBE@AHVak&hP9pb5O?eYZM&A*]6o+&_\MIN+&J5WAXX$BdOh.'0s!^mDcrJ-%^qdb(K*MqVl,D&tOjM;Ma,_=qVo0cJMNAWVdT4rTh4:tTUcEDP!1jS+jV!nS58+niA0B2:3[edpXEYr4Q7\l4Mh-G1!J7*Jm>)?!8D`IinlM)i4`oma49^V896,QsK;ZJ3q/Ya'4Zkj:[$!]!RPi3nQ4,fa(h+@")"9uBaiTi#>=dW41,4Br9O:mo?\f[Br(>91/C)S^Nuu]EPm"[BmnT8=U.("0f*rb=^q`2C:7aS):H5SgR!hi[nl@>WD,re_4n1qM3+i*bodcX)TgOT;d]?Z^/pe8"Qp,pZ8Z%Ygdu8>Z!s8YmOM!ee2?ZVMqXrMh7^Z8mhnOXo>duJNaOI1f)/B2dm,#Dp8N'A94H+/og"T$@eu`0$jp8YT^Y#AU(RA5AY`k01&/uPr,1F5PpF]^\i9fq!k2s*eeZ&c\(qi9c2"=m3;gW7^JNB@4mHS05an`l3qc_E,bjb/'#r+45&@YN3`CILCP>dkNC*Za'K,U8RTYH^OAh<&6]BIK$=g9bSYWa)Gs*@.Ug[r0S>,mHSG@RMB^0HLM*5_0!lYO`]`R!SGjR5/=Z$WEil&L[sZ1C?eFk09B(_hKUAUh%T1M\[o8p%=#1K<@9)Z,FW#JYE/S14B"@aZrK),=[W:rqneNqBg'P`K4\r$uXA0I25(".H+#E4*Bha2N^k37NmUn\o`e34=8@F4j0[5"9oAXXDD5)k2qE212"lP`[VgmJ9dXFpb,RC9V>O=9#tZoW/Aon5Ms,!'1?iWZ*]#\IOeYqTS418?E?uig9k]<5(#=J2HGakiSt7P$JN"0A#2e_'[#q>hgbP#qeK&ZUrp8kl]=#h4JIgoN!,-'Due)O`ufeu]osX1UIL6)e5TR5iZ>m5VbYJb0nL%_fH=XHmFnD,S`DAOKoI_fEaZW;]6CH!#?@p3H2$a_(3cbhKD*-6#GXeM2ERX@KV(JYhQismF8GNCL!kRY&0;mq>@HH*3dUF3_hJW^b#>35*U:FZ^DcV;++DV$[D.0XN)g=IN@"C6bZYdHHCIO$@p\,V3fT6`Y\7qA.t_M26t$euY9E#sgLqs8K^.aqc!<]kPrmABC!+QE>H(k/"mMQ7A@5J`#]REo`&;PH_R,\@@cjI=($\A)!<3rVQ?4oh1Q"e(n=HDG29_SX0)f<-].QooZbgqS>Gcb^5+(`3P4LLcgd]Y#e$3i`IGWMCN\p>X&L$H&,?[F66hlpqJ:?AN$m7UDmK@/f`Y99+HQ8:6m4i1BkGK4c)"ppl##ks$7\QS.+UbEjed5^GVBqW-r,W\E_&I8b(fh`s*)@`8[)fC**uX&5Vr??/kB6:4*l>rq9TR;'!>c)U\(W"KGIPn4QM_I='"TgX_MAm^,JMI]?BkCf1Y)NZ[``b3VhO_7t5H?CJ:8P&)CZZ_q>0r&OXY/J@q+)p@4WRK/-6N1cC?n>?!rpS/gj8sI/.f&6\30bp(dM@="Qdp%OEbOmP!1.*"Y5;'WCrj3JqfuFC_JS$1]SNKaJP]hDLhE;#h%XGAN_TpUY?G5:6/CD8@-mE!M%N?B8Xum4!DUm!,@cHbMJD[N_iLE-kag`eN9Q+[iG=JCjk/C=Pr8@2RWfG!10D:mIRgr2q,!K_HI+c"lRlV:=W,AU4(?Tk#g,*rRU*EJ*I$G=rNI'eW?V5(%ABC"rji`uA.7Zis8daiKa,V1>'n7`%nrs8f91tVp]"l"t/)*r!rql.rVFu!/[F9X\M56g&9a,_raV)#g5'FrgR`LdHS([/t,@EMBR0I\VH[ADos1s'*MA5o`h.b[ftDb,\T?q[H$S5WFXnX[K%Ejd<)ci!>.#XIV7t]EgWu?k[;$GC@LI_+o^(6e.&X,Hl\#QX3d:#Yi8@Ga[K-m@ROAbG?=E_ki>P=PNrb?gKb]tHR=PtdWggJYCl;<4"<,h2(/S6m2:YLpX\*tSt`.m?XE]LGQ*FQm1Efs,$W:f%]rW'6#K`fDY?k7Ys$]_FL^%n2+aZ&6]6E^A'Ft^E/#i!04*M0[N85uP_1MuOV3S(2Xm''t&JeG$Jn6LK:N\?,(iZi]KXq!X(C'm->!5L-R*#G3p4(i>i2QRl>7\Pq&%WX_$\^ljTL?7DU7;0OY$GIf&j+PK$TIFq,KO+Dr&WRCQqSRZ)YeI8#Tq,ACqK`%5;WV>`j)`gE3H"UiK7K"Jah0k1E7iI;G?Y?m3t[Y'27hb+;!F'cCtjfcGui\_cZJ6CLYgKX(;V/Vs0FmE(^(R=shR]'2b''Ot$mN4afkh39iY6IiNJ,]AdNZI.8gWu?J%nRb,F^lHfJN6I1]b5gLrKK<8Q7UN3*'AJM3%9&qGPi=TX2WESZAL#dDF968)N$'9jNK%5YIQakh^m@ut:8t6$W)3^*'Tc#Rn%\mg%,A'ub8,te/R#MPd[E3L/oKjtS_:;[A#hO7]6bEa`*IF7$4iT+F@/4IgP2,tYgJ0Z@`%FabF3qNV6*3m(P97mEX`.g;m:H_h4ZY'g/#[+]Y-'Dl\NZF,N&Q%#sD1[PL=)`a`aGCQXW/LEDm9:hnj8n'7!\[^KcCI%U'fQ0Q)4j"tB#nK5l0m-U!3$TLiTACSF6WF\O:Z&;B3tP>"/(d=+-_:4%Utf1;LeZ<(FTkLm+Le%"c='I.U9E9I)h0`_^/#H;PZk"G\n#D7heX[IM%[dIs`mT2bm0W@j!QQ28g@Og[T;9V*"8D537SbSD-NK%N9WMWCZ1):B\i,a$`2>r3?bYkr+8\scHZPfes:p41g,ion"Ag#D:+k;g>P[fUe/^!&p#4r^l(P42u.QIWUnj#aD:7[+L*L\0@$As$n$&Xb'^4603hRn-uEp!q?:P1rc"sHPeS%9n_O@WB-G7d]d=hrE^3T=ie'kX,[;'I6KuGZ!0i@M-W'p\(O!8ljI)TsVZpBjQNq&Hh60:#BN0ZUt'4XE4,g]uro]](7iHK!=1(s3So4MCH'!CEW%NZ'$TaJm:_k]2G%LilTP'\9Sd'$e@ndT,$.g9sHE>or?NaJPXVK1e@+B_!#aMl][+'2NF[WIgq`G;I0lB\0DXW=f..pKuu_G%4VEK0L>\DDuFBJKQ6;H\2M3kaUN1jp7sfA!QT4RR#lCfGQl"jTu;&PAJbc04%JN#.(A\?N&fLS%a2Q#o9q)niL[a/3&d*GYg^)!)+I4hW:AOJB=Y-qB\;I0I-cdI%.U??]4MDOfP4%Rro6Pb1HS394HGJkm\bAkYY63tPe#10B($!iN<_hJ^FU8/+JB66IBiE%<9EFHfR6Gf\=LrV=#[_[mE/9C/$47-WVd`;m2Ce-q=0M*]I_d7(ABu,0N9+;]P;@OWB^4S#7Z#a">nd2IWe^B-u)oa!61QhnGYpfL_-"T0SqBZ_-U(mY-+q?]%'i[>e)V`L'qKh_.u1W.or`*,mXn-n`.[3&)XQt^CEmXI`,VC3d:"nC3/=i]mE9W2/:Y9eLn0Q-e*Bo1)La^]6+HC4[&%eLWfa&[VQQTSh+#"n_Y&_NY"P@/;OkZG`fIQh*N0XgR1Xe,U=WX&qYZ/@PofIN\3^8Lu-/mFi:n;NpT8%cWT/(Bh**6;R/jhRk!l=ap)2RA6OP>^"E`)Rc@EK4,4=g-6I'naWn"\NG`\5Lpr<(!dr1F=&oKY=XIUM,P^NBn$'#U^-M%T)+g)CQ!@`92f:0q'#-bBJ:$,WB$['N2BCR?`NMki]QlN+^'f12H-'VVD;$iEH-j]<[;'9]W:4N=GCB,I;6CADKW870\:5%_fL@beNugGX'c5cH&-G6)H`&]6cp4]^*Fe,Gp[dSjpC'W!pJ7DFjiER:]kSlfV`$NUPD^51VCm%T"SZnK-RIY""!-+,F_d!XC?oETRT7d90+.d]!HQj63cmp`Q1O1bRk8C?e>^@'_r2!_g&Og^gdiidIf9,NABC"UlbC_o[FgMK8`9t-)d2"EXTQXUIM8,r'Eb<1M+_IYsX]Z^]4:[A7VKHMlg0j.QTVZU;($KHmtDQ>[AL:IRN0W8Fl]SF1I*a(85p=g4Vu`Y@#%6hM'?JBIRT[*'AIB>]Ie3&$IW3VUQ6jj)"r+brHOX'61[Y!Tb?F=Lr7c>p3G6'uq5mjmQod>7gr.LuNp`SqUYp3QGg(qE:^>`sf2]46[n)p^H9rnjKp'gW$99P<=FE,!S:ViLeWWNXX=U`KIR3V2qJ(+I(5PnV3cuomQ/KfM/(A_)'uY(L^k'WG+m1MOc;U&iC%1riB1Z/MqtKP,:Lr%X=^8Q,Q\EUWV1aMTI/3=V.5+r9OQ>4*(G7*MY>V2h:r9bakA&WP.S5gN%>cM8mLc9fPq#?bS8N_%]XY6SF)k)R&52o$29cb!:-^j_l@bO(h7\0%U%[9s@OR#Fma@qipu1r6gU!-teq($(=gM^b)lecHL5-!h:dq-KNHfRoIX[D7AP0g`I=-DV$9;\?PjdMEQRuEBbEbs0XI(7[+1Sl&o]aiXRb<"<03VUZ"of3+W'OGEaH;,#%KtHMK*<8%AAG@2F1GERM'unc/:;1CL6#bD9MQeiA]FIFG>eBq0kF^`]-V^&J=D$DU]-0DV[A=ZJda'rqPLanNR=S-BsXOTViQZPE'\Fb))bOjh'C3O??0i%OJk&Jt.r@:r@K8_k[75=gLRt$4=)Tn`.[ObV1Thb*=L%HMAIouIS?#2Sg8sD.;D7="CVX/.58?Pi>rQ48WtL\oZ*"7YNg7t=sZN9f_tiA1qIo"Y"Q[2i:Q9_B'Y.hf$Rc?ZZod)EpJ$p@1M;ToV_^g-f<:fWBfBn_`#`Sl$Wu0H<9bJg$-hak)No(ESK-h-RkCl8KP.7NA(NO]=FFgi-oMD0tJ,%WN/I*k?RN'JpYYJ#26J#B=;-VHcDiq$j&F$6fp=nE#Y\Lb:MTND\;as,/BKr>H"SRi8NXGUfjs37I^Hn-;^D.>,g=WNgs,4b[-o;l*$Z;aubbEjmAA.alDWpW:-1n?^P`Z(gmgU;dD(05+4P@WU#-K*314C[Z#=I.W0-jVCA7D0KqspG@`=3J/$'`;p"$[%OYl"a8%Ls:!oijOXhUU)U*L*d&e]6YlrdWJL(^g^4p_N%Lg+m]%F!o*-TjLr>U-L`:U=7sKJ[W(S9i-5&_3!QFtV?KYfn92K'\:>4iHMcM\[nsbA?:]R7tADqj&pi%NRV"m1BFT*6fB*ORu[D8'(i0qtho@8?k-KRPZa'2>m/rNugH_)p1c^*/=U=u5tS2+^KH(&3As3;;n!?i6rk(ucfkS1tbhTnRJ46jJtTF]0DX]OJj;/4nfl\EnYK6b.='P$ZC#cgBJrbuV&MY?o:S2BD()d@s(h]&<1mLPH,T(02CR"(+G-Q_#`0e^gj,3EFDCWDf^VN5geo,CUb0RP`N*[W:GfWHR[_7@4,^S6C#l!:?^>SuBceZ)X>lu9^)'P4_%jGlXMUB%MXfJ-3VX/dc.hFI!j:e,F/*$$'i!e:"7@FCrCH8Q3Hb!*KBn1/4]lV]BWk02hB8?SZQ!=d!rGe:r2(D.o,KrWW*ioB(0f^VQH(`8(lLqBfaH4amUJ,YCOG7j&o\MIY$n)(mH]U!6("iH*+k;rYT0;^os51E0_V(GcO*;mK6+'VC<<8YH?c^m9]Hc)^OO[?0#/\Ha-J1%q5WZ8m+)S$E7Rl>7TT&acsBj"hj`UKJ/h6@,M&RH0sPGjutfPEmk/St^Xp]9%2#DsE2Z8a_'7+XA<9dDFOuF"*(&@kcU==;rC68i?rH/5ZGK]o8J7iB@Zh#8[_5mc;/0/g*>AhGt+S9Rt?'<`[.e"1E%!P.(0<"6(.r3G^3=ONKIug;#D8-m=&mE9brPidW"/E.GCj5G3q.@+:H.:iLi54!=4fo:mqH[BXi<;TT+L%LsgZ!==?oTFY42F,Q!96r#=(NZ:X)Gq4.A$SiQpJAcuB$2X;YA%'O)L]mJmfK)<"2Jh"g0"eKP1US=;0k84"h`QL9*_C5Eo&\k\P5Fd5K3+QfKmao-:6C=bMesd,h7Hao26L<$:7/n`.p'6f^O]S@6VGUBoB&be8E^6e)LV>LJ`K8TYmJ&NJ)@M@LV@WC%8TbqZaE8=''pH%_,IbdO>Zk&,?X=0uij[foX&>dOpb,h.EP$;TN[^hQaaf`MZNPcb[M\=F0cP0:GDD>)6O#mG5Sb_O[VXrd/+6l`ig;#b(0.KGDr3au'#&_e%S?9=TgRghNZC3I0ae"E82N=P`*AajPiib>-s)>"g`[W%Htm"0Ai^*UL5OcGOJjKAE;q"T7m`NOH:%D@floDcuO[7&"oM`gt.45Kdf6F>?:OqqL8;5$&OITF(EFXam=n8)n4RTRo\>68`=*8kcn3l>[]92DQ87Y^KnEm@F%@B(+dD[/g5Z?p,2.@&iX.&l*L'0cqqi]kh!![@1"^dn45\H/;tH&`lH+iiM6RA'(PRm;PiA0*0c8;M\ED.FmG@1A%3ESJHH.kIJY@:B>irrhnQqZL;Ma_;j\lp$t;ifm-H;!(oWXS'3Z#>bhGZRA1,!]G(\e(nr<#VQ%nPP"2#&Y8(&MDffCimI/M,_XBbmeD5)+q\6fs>=PfnR?k+7:c,pi?6'BlRi5k,INjf>mer5/`@/5V;N25[R-Vp=idii_X_9RfH+68.]0!K3GZ3@+"\RB+9R!#G5h28j#HLtk[qLerA<*[AF/G/^U^\u1#<[>6q$+TqpBoCMp(+r!_fU"6uT"=bmRl86H4F6biNBCfoL;&K%@=m;1%";d-5SXA+%O>DbEH#?@@otZiJ=$[d5meiiQA._4\T.iV8.aTCKn&skBlJ#Fr:eU67m^/e:i5pngUD@ng'JE>^cI9AHEp]o*$!2ZGIVYQ#4`PQD)gp5mLU1TrVH3H?Wf^rRlGZ^+F?,BooN_Sl\F8$Lr@6M+:dT!!%CR2/3\Q\:7[h"G)sqmR57@=RcI3Gn3&o:EeY&EqWcT]p3uAZXd_:Q,RUG5"9o(-8Ws@Xi/&*pW"XjQki9^Ec_!GRY@a+SenG.XWhs3A!Y<)0-f`Im&ru9eD7fbpUDK/CH#9"a[Qa-9$$@"R%>G;I,;M]OTuFr5SbtY]Zi$b;3gPq(=f?b`^I\)+iI)\sQu2`Yk`!/d[gNkg/ErJ+I%o&Ro?-UqFS-p$kafe_a$`5]eD99r9Lb4tMe3OTY13HF0l(JI_pANUD=R,(]hY+Z8Nm?.kM'5B!9X+(rok/cNql;59L^jQA6>hoZ9?/R"Am01i3PM^.BlVGNsQjMhTkHM#RYD7S,k8J?Uber4-1*A3rIE9>E7LZe@*nRF0AqB9u2/Z).*.cU%9;#9%]H#r5u-(%[DhdSVH3L[VcEqAEfj=M,T"EpHWo&e1I/ruNB-GFiQ%`PY<;TOqC"8iaf/7D>(-oB+&ib,[N[0K"uZ(0A)$>Mcll/9QU'-J9B,11c>RVNS)t8OPKa[kVpZF[:u,ol(,68G+dAC+aBWhY)2E#D4X?'a#=9h<8O'ens__$$qi/K@?S55gWj9?d7oef'G_!+Em+)3W7pY$F,4+/-ci8#8hCo^Qm\btbQTaTr95n&[4i^ANacO:d@3]VeMqd\qaEcC[e-$pTX?QlP=PZa?fgbFc_Xqni-M6jY+!4^"s'*fB83rceTM_rr_YB4^ot"J]m<[YCE,H]ODjM3JOND/$n"iB`*WPec%<5.n_=&_*b/-s1]6>(k]j86nW_s%h&3:3K;D(/=j=i[Ia_be'\@>?n)(e-?6#s@UGAO"EKD1flCP!OAOXh0Z&Gq0ik!]h?"N!`s0&)0-M%L<'amC:`G3sV;aq`%k*DoHiqDL'$9M>jmcHDP-CRX:gA&h]k\X4'[;NR82j7`*3gUGeoL+L&Y=05X`_QDirV+R_eHcq^,3L1XLp^f'7#iJd\fNSm9mG#*g,N]6\AC$j<0OHId0?Fpjc_&Nc,I>1-0k/',\LN]Q_AG4L*1',."7qo)`ESH-2_qc27787V2HH)X$$qA@UHmc6p$:TBVG<\^BDI\LN?()]lPuVpFmIVT)smnkEo\@R3$s<;7(@=$%`_1YhnC,WK%t1'_C'jF%Y+qk(*e\9qsV:s?ZAkuF>r4@#RLgj]QnRP$5M(!J;GUIRZM/0-cV2c2+frsCW`>6[VXV`P/t+Nhg5"_8_m"%J7>[Db7X\=Jj9WUYs5E(T_i*/Gd18L<2^@bgYOf'f&6#BS2leV$'aLn<1#Vc;fH_rTr@jH(GFDK%tIQ.UqCm<>19[b-W8=%\E&PZ*?@l%#^5M#ddb41JYl/2Ed%Q_ji\GObS1C[(fLhgC>??;$h+1[a4Re?@#2rCn6"ki\h^MZ?+FuE/h.`jVl-H^(4M[6`/p5l\./J36\kuRMM_J;,Zh-RaA:j9NRP_(?.,:IDU*t*.i!0ecCLHcLfl@#GD-A=.%Gr8qiE-qHp>L5",-aZ":<_SQ3@X3W%Bn;^6s]q2N8V4$@.1!21bSpk>O=Vn`.[?Ad;6G@Wa#0n`%NHqDe-9Ue-aab+(J5jsNrrOa_J-DdLf-82a[Wq?#f!Qkqt@;%N/?W;P@(nCM5!%3`JPB\<7SQf_1Gi,8SjWsEofpT2+#sh@GF#%N/X"50lcR40bAdZGgP(VX6JInD%KG3jJEj@R]r`O[a:L!Q>R"4\%S;'Q8l6cg>:h7JFFk26WjkokMU%dPA19Lq\[ndGdme2\^l$#p6ge]lA+l-lPF[kH=7>GmR!Pq#d!h^&-r@"c>dOY^WFK`j]k+ggH`MXWC>>.&+1%L8P.,BqU,!O7'/Fs*2*=Kk']d[$'u4[TE.Uo?,:_;.(R#=.,T^]h,]VhZ?qtBF%-K=%E67A4P^0J6kBeE+GkJ=sfJC^T:G-1#*0GAIX$l4aTGo!>u4)&FnR)njpf5JVCL=^OA`)K(1,M4897a1q*906tB0I3WjTHO.er7%3oG-&Zb#;OJm2i$78rqs=t*^XCJ,k\E+#p>"bmlL$N94^#SK2hs>1OJh3=S7Of0+Q,gXJ,@]p+9LWm*_^+*m>;tDR@iYjFdg9`3G'3Sec0=2q=lEbstVEDnu@p0FIl:tFq7T_b)CQ5*'4=1^U%TKu#3^s5_P6X#,p>pf*"4X2qqXeJ*1PW&<]Ahffm`cKfT0L).-KTV\3aB49KeVE"^d)oNp7T3-\8[";5G`;,.9[MC.4TK!EHE;fX8$ec;I>Keg6i6LYgc%\Yg,K5W9OY[cP1jngKe?j2[54XWimiOfHQi04-p2AO,#aRJni<,KsYNWMqXr!XTiB+XSP57ZA>-PC3ErZ=M(/]WSI@JF>Kp#JSS\Zds!SC$&A_SjC]BQr]lBE\oK"Q?pTaVNp]`R06&ofirBPE";1K?oiYQo3hDtT7rW9$?25_,k<&@-303rL))3BK<<;&=eX7>hWn1;q)J"8!V$dT%<2j$Q6Y&3Sn8l%qMuBBT`PSTYI:^l0-e-qaBsVc7a'eh))ipSh)hNZ:'"m+AQq/hV5.c<\26]pG);Pq,p$l(G7F!F`0HeZ/!/8t.`@Ub.6W6aFb%4aV@?oIO,l9LRl>8S9a?@=ABC"6C?cBU7`_ElR$`\6YN]Qdn3\[/3\TF_f@0*h7u%h&5Bl9uq"ad_,1fpF5[k;W.GgTCK:,J7a>VIn`&UE4Z,HW/u8F(n$1`/P]p2K.F\X#V469-_^Fa&$O0OR/4/mVkA>dS1l_1N!3-Osm0m)&?JC!/O)'C%3\;n@#29!a@Q9X\`fXEleIH,*Fci]m<-(aD',#V(bEXHW*_T$M_STmF\g^QeCq3d)=!.[8j-#2cT?h(RTsSNElETkrDf8.*!<^Vq:]7OXn2_^bBEe#1:.a9N4s:k[?orr%2I?G/0F\Sfei[/aB1Y$QPQoT=JnX`5SZ#B,MFpA[Ap+'B(eU;r<:_g:;+km9qP4*N;:31.Rp#^IZ$3;,afq[dL6*#Uk`Yc8;SK&#a*=P9`TX/9)UPbAB&KR5AWPOVhL^qkX.OVA]lCoFcf3*LPV^k'f@^,qDZi*-:d%YjN5`J^:XSSQi[NC93$d\Vl%o"tO)&9X>";GLZW[Wb3P/C:[NZC4H=X-C0pY\=0[WGYO33mUIFC`K!\SF*Mp2"&8+9]E,4WQ-uEQ/1O5d;*#HM-Q@Fl19cN`E,fmFV:eg%Fm;rC_Lls(h6eTL,;q/lnq&$4h%UkaG3i+5./e3e;/e?c'oBtRL:g8e@KtW'>jMVP%k9GjZ>R=+LS=)a.S_:+h-D1*t`W`1D7-7hbMun('iu1Zb]e/N=8D?kY"^:Niku3cA.PPAP%.ZikIf9-&G;ZLk!`;flN3u[oKf9"fq#0sE8M"]Jdu\D!ZE](m]lE':?5O$!qb['H))LR+<(u4^W)-VKDM"7[paudZEH,tDf=O:1;b.&0?00[6SN=_faL?*Fmb+r0YJ:(2m\;!sNj'3_]Lm2TG=W"C!2F&DN$2%l&Drs<<)=(=DMYA3d%KRISNCoTbUHJf9UIMBo]X]?L(+4cYA`=4h7In"e>ZC$[Va8M_3!Ff@.s\R46KkXDOoKL5hOYa+ZU\=p&ecIKaJPObt_&AdsQ_d.9a*Wfa>0&eOhim9:%7[]WThccihR8TQF/4;M@b&a^&p1ADtCZ69;f+ojULJ)UK_=ZicC@=Yd>X#8-'^7?1rW;56Unl>Fj?SiiFSXmf'Lr;#rj-[Xjk$,"'RPS)_\#BQS\l-b05eG&FhX,9/1!V_"k4WuO9Yd_)#lN188!D`+?]d[hms7kj-'r3V%0$'/"8+l/t5u2K@Ee9JPq<+B[cQAfZWDY:6D8lLm/.rbRgriO'DV_a=h-u:#D^9V(S<^/k/if7$EilIr7o3.[m:iU9UY%nHM-R.UdIYD4F'K;UfkI9GOF5uAcpD^'HR@U=IcI((D1'/ZtUf9[riNN5#%S/'hPW!N>fI@5]T5Wcm91i'A+W3!EJG:PYVXfSD(AdbLHtgfiP@`OX'uH?`mYEOOn-jS4OOX)F"e?qq7#QnA)%ii@2alcOWU,`AB;#/Bj@(W`?*ue"MD59O>G\fkaQY5C[S.^-+ReWk-tAaE1t_77;o],?=lRIfN&[mf*1^]Xe*_!$5[.E!n9Z3r8R;gE=:^K)FQCK80sZJi`r(ku1\h5g=tF_h8[E*Y(!+gb".(M49tRYMRYK"db),5"T,c5pC<-))I""-oku2V+[.E9!W!L')#7?`4PfG=gM4.CY?"i.B3"+f/&_P*(co"8]Xt)BGlM3m`=OCA^EC\Y!0Oh4@W0"6@5@_+BqVbWe8#7o7n."pj4FCm,O\ohdq?XI-aqsN9%UlI!M6:%%Q-e5kTF1O^\[1M35;"0IR[&Gb>>%)`JO6PJu;nO5\1D!eLsea-^_f;OB7QNYYnC.=_3hpopYYJ,Xh$Rars-G'7J91!>_(71,hg=0>fUZN)ZuY?SJ2aLXp),0,]aU[Z8s#SL^J;56T3WSmmEFGO9qEh1[>X4mbZ3-_hJ7fibpjh9.F=VYP0g(#)^MU\R5-K$GBiW8JM->)/_KL1&:r#k0-`>8GjqAt"UGVLs7=Q$+lBG.]*8B@BUp/-4t59;R(t#QiPUFl/?L0CM[7@"DP.Mt;[0@f=3Bm.r`lQ9d"Q]3gc8rg'IP7Ur">V.&:R.g7++lSTgOUBlN519N\cN9V$J)9Ukci!"jBROp>pX32F0"_5PZp/a]g!8U@f*g:!A99fHQT9-LW;C&+O!-lFLhe9GJ-u_moCMQ8E8\OKKaYM8lR(8POIY4e+j[/fWM3Pes"BOYps]o.aY/>o%>8MU2TiXUmuY4](pl>j6+HokB9%h*M+B"3h7Ak429Fc*>Wb/!TR=!Cf3a"^hT$FbRj([!Fju"u%j+\t\5i`[K=kCJbaC83qDql9PoPl>%OmQ5!Ze9J9pJ,K#mgnM?fb%K//^qsE[qCZ8&bNHpsn4!qtK\3W[%ou^>-\XhS"8oe"8gP3oBQI_*nE0KSr^"j`$>omKH.o_OjVs_J,fMhfRUa+.]Oc(^Vl]'*rU7N$iWW/$A@ua31?F6?:nU(Shn/kqt99qVtDWscLsoDJGEj>b*Ai-<2icLg*/k/K'r9d\TTA>*ojm8,Z1X:5#g?I%_6(<2`N\2H-JHfsY`:-od805DGF/5<.#u9=0JLl&2-$6pq<(:j,&jS*<&TXG-Vp?'.]jsjRl86@jm1O%H)6Sg&ZKftW]sXmB'&c,CB]*0T^_[BgK3rI(3a9k"q89\UiVj=::"QWnA9j3K^d5TYj/T$//;Z`)A(F%7lh+i%^m5*S1bsJHs"+13RXhGNur"+'+\,:m5L(;aUN4N!t,\3JqATe]tI]V>T=b)`I<>9VG(-c5QM_S*BJ9Z0k(8p2nN\H)GTP7%Y!Ng$5kd?S5@qMF6DPt;B*QG3ctd*c%9Q[aK6We`lJNIA&jVkha9H!arcGY3ICJ$h9VkQB@!/P\h'BIrr%1SAE8^h2\$feY\ViC0/'LbB?p;Jq)s6,*7iA1T0@]%qA!VfGOOAl#6u>7I!F/>;401NP3c+Y8*D4Kc7Vk2i4snKl6qE:7'@G!,9IHu?!U_B_[#5;]:)cR$[;'rV5p/Y*'JVt<8\cYFs+Pk3,sPEifZ*@NugHo[4E%h;nQ(gc;"s,B?mSM-g2Udg%NCYr9V-q,k)YGZYV@=0A7+6&lZn8otY@#'Dp?gUg$Pt)O(.NChAY9ea$G7+*T,RV(qjW&2YVR)b=dn7]\<%`AkRq-P0&cMc-NZsB*bKH4puDB(g5&NMmYF$ll:1dNq5qg,M2BQN5O72F@VXGn"k05\76j\*;]H_q>Iecc4#PuD,Rn#Mk09q<+ke-->]Yf@1M.&*Z:0Ze`KNH+k)AO*8TQb)5])=L,f@fl0C>->a\,Kh3lSHVC:P_&)FJF6=fu%EpV>RpF2c*`K)H,s1l/h[\3EXflDs>6,;rd`!M`2N`K!O/0^CW?k0066SWu9\DAX`^?Vk;m-a7<<7Q>bgX@=Z)N3ZNcqtKR6ES@u\frJn4@0Cf)/q=pLREfL@U/@a(3Hja+?$0PTQi!b!gU9=qqMgWlJG&U.7>`gFnmp4Qlron>c#`r-'?68Z"263-4sP[$)[m%6+$Zo.WtpQ(e4Z,\an;NM*$]/CY8pdOWj?;2[LeDSV/R+m.r!.uJ,ZED.ZfR;qs?=KslHH(_mbhdo>/7FX8-VcQGe\f<&8t[k8#<(8!O(?;6,C\_UQMM>-;c9Dn+/#nnT-+DfuBKM[FFXAGSl?ChWI3`)_gETHh$`==B.d(FXF,`?No[YZ)Nr:mPM+TVY$fm&GKp@cW>nF^1*F-rJ6Rj;3Ei0T2:-q$1+GO?WEPNi?'Kj#"_N>jh9eJ*E-Yr%\)$cFigSTQS0Ek<43#S+Fc1Kl(#!t=#Haci3C<>_dWO!!iF[kD#%@Uio+'e>"TZ>.pieo-SFb_d,c,hns[_(5(RjN3Sjq$'.#;]ZI]G3sn%)""guhr.Zd>K#T[K_l@QS1Ss4U.(>[-h3Q6]1NKY0"=+'_Mm:uA?[WLS.rl'3C*HB@1e<8nm+KjhPbm05,XB*!lXFiZY6Ln!S!KnEn6GD=^[L1A,0[;qLB(oh7W58(V,Yuhr:og!].[L'&HBFkq=8e,+;i2-&gMGJ]W"i-:,4U<-j>cC%rgsl3A+Hjh>-d1f2(t*SND$fQ3#JuP6@1NDDBab[_Zg9k_:V(T4"gUD)qXeCH*)KZ#.jrbM.I>drtfL4iDPnh^h3HCpTI]A?Q#D07qVPupX?H=!_aWZZ[,i1C1=gFi6qX*%Hk8o%FdQOeicfgQa/20nJI(Z85(d!1Y4=24DmYaQ1"VYAD&YGp'11\H+&o[6q]bO#dc'pZ&<5`qlCMI&>>t?#QD;W'5q(51I&ut0P]t7P/+<]??Z14hsfI]Zg\@K.Q\i(O).rq"`"@4kWcCD`n$Pb-:RJ?[Rn&\l(P-Al^506]6cC>at3fY(\$.+4^:i9aP`30c#:af!d_Y9(@Git/F9a$+YC?=Db'=*q$bb%,We/B7MX,)B6!E`S@?==@SVdLbmXD9`MohCl3@;I"d>Ib*C%*T?<$Pt.n[J7[+\9Vi`o8^0.jb+d9Fm;rJ,(W@"SY"!6!'11qXY%>;_91Ne4)`ugb+CIF"i36[47c,Sm"r@\PPf@6rME#G5YRV%AVs_aP/`n(3H*fh`@nTeGkgd%G$,2U`5KSbrn=2A(NE#/4ZuM(PpoX$Y/&i]:>-n$1ODi%d0`FI,8D_0<&dZ1\Q^GWDr8:O_R&`#gQ5>q"[LnH>.(B1p&XI.WUo,g$ZS4GhRntmLt\t82sZE@-jR:5A,P/R4*P]uc^d.AjN[f,+!2Tm3EeX$ND##?'bJ^JHl4bSOMW3lY$F+f)8t8D+Q=l0U/.CFBiJ7TU2f55V?RWMDJG.B64l`HrXl\"JrM5WR7J2=/o4kr5\0WZblj%7-".7jbr'l$`A4;hR7*EE;]M$s0'--NiV1'r]__VC=H>u2%bfo)Ja/o5LESBMdhO;@Q+llX;F3t@Z)FfU=`*i#e$Z;=:j_!:f0Li6pRRBhKs\bn*dgEqeWlkp[7J9hL"+/4KglQGP3i!1[!!KcCDeLWsHD&[\0:D+gj&qj#X^_M^?I<%N@r)Zi'bLE@dK6"5o9WE]91)c=?hea+uLFGO86B3*T!COMD--Y&&ZiR;b.+9t$3I(%dI+sr?:b+8uP'm9,\X7]_N#AD#04@p0R[;GOeB`go!Q#WX0m@sgHVV%)Hi*O(FRLg]H1+JS'J;!j/iGUG5!C$UI?l%2O?Y36]68#q"(`V!(I7%"coQt+@9/R=9nX"8,;8cYh95;H2Jq.ng86aHb(uR?pue9!VNWC&4X\*4LcNKEJQj8bhnMt]J?5iRGhbB9eiq54A_XY1,@BBhj(%T9Lq%I.4Zi6/b*=JYWa:>SI!0ZkRc#ngGVFCB1-sJ46iic/)*Gp:68KJq(RM^UlS@8@f%(V\%N2[rNffS<6&+AN#N8nf?)W%$rrtXjRPelXCm-o&l;+ZJ>>*BU,mRmn8CQ4C:?_d+"+:n(!B)2V301,C`Rm-L*X1jJLtSS;(IT^97i9V+@,3B:5=%=S*FH27"Wi?'j21?^!_4di#T&DBX:)\a*%d6X1k=ipEqIt.+Sd:^dsZ$_%T4@NL[*$Ig;mFnu4Ec*?ZOEduq[:jhJ;ZS&*\?%D?11I2]2@$!R=7PkP;Vd[+a1ZioGc[%1;H-UPA&\r>QJB&oX)LY/.5tFTH[F4ud=KiZp(6dDBU$/-+L8>[Nu^)K:SPR_otF"F`lW-27G\BKQ*90T(s!:Aa3o#g9bRh[KL-H6:+"TD/J%:DpP^PdB#gOhq.@LSekt8?ip6!m:4dt_\^H+W?WpVO)]S,*k-emH)V+;2Cd>$3=asS,bXlS)@J&NuH%qo[PCkP`b:>qMV-P%7\+?X5tW'mY"7Le4h-kK+QBJ>+feWc\Tq?a:aFC6JNoKhfTe#,uWoQ2W8/:rM,[G9:dI/%['_I9dh5GU)iLbi\hi"h"I1gO0GTLXf0Vur,k2_fe'lI2YllGYg[Ep!)_gDZJ)!bf.0mdAB\.7Jb5BTf.a4:[c.;l7(7\>6%#CO3UmW[c-m.3g2()jH>WLI#J_+UfeO'\'-_CY?")GOOB'3nQ+$Jb&C&)`MXkDr+`YgRtHos8LU#f"Sl4aiVYhYG^12gaIY#hsbqS6CG5OIpVN:aZ2BPH!k#&DI!<1%V\R[m$A\@867kWAbb9D_h[^<^E)W(MTnUY[5;dVGim5[:W8hbFQtM%_7Uf+gNN=0Es[beSc3EU+5W2"sHq%>4DY.E7Dj^N]/'#7hm>c^A6__N@?L*`668f[GNm9jX4sflQrX@7$I)4`VI&SXk2jb*;u0#4Un=rXW:_l-5gTgg&!fqIJ@A]TP$aH]K42FR4r$H0a1J-Vn]>!dFp;rIfiW9:%8*Sig.K&#-Ogl'0O8@7E4<46'?HLr%2s-OGk5p$:5jbKcV<6e>?7o]`,DY(TV5-RU:sM?!ZC%OEtip$UYJk2tg.>.)f.M8891IJ``c23+KlpB&3/0d5!t`A?'gRAYpV[tSW*k/J<,Q`$99cWcCI$s0A+!e]BWbFTuPmDh+.'4iANXK8MNUIWdUX^fD3nWiTI+QsHjg"=r=08@hFq>b)nd)4I5;5dH4_AH,J%n4?C\H?fi$hMgTOnp7]F%'ZY"^erV)3d0CIW+K,R>o3kg%>p(o>d^b$E8&Aj?1"j1b8H9t(j#2P))InE:(+oJ++SK2Ui!$3Q#MJ=hL_O5:rr30kfd\9/<\rLE4@Nso0DZ^4SUf1%1e>ZAH^E3Kf"Jle%p%?;+92nB>(dZjHQ.p5'o]W"Fn)UfeJGq6@hE4+h=h&FEnup?acDl@$%M!)!Wj8pNoB+:+[WglXR?9'[PZ8?E6qp$8NgL2]u@d*N?!?iViuhRk$+(1m'-=0Gr0rqi9MHdii+q!hj+o@p0=T7DFlWI6:BrVEo?[m<@'CFaokPe48>hnG(SQUh[B4C*_4.riF5iII1We%9gB6@U[D0i@k*&2RtonDS0j7)P+VfU^7Vj2WHg3&)R"TgOSFC1SoH'.#[GAJFI"2fI^,,mFbq6cc6X$*d;LVjfm1n*a'?1PuXQjS7'fMgb6]&K=Y2Eo]c%N=-(#"KS.!T_4GBUE^`2LeF'eiRSD+c`LE\aNn$c<[*_S9qq">?+P,$DbVL1"@qj675H%i#eR;T9V"6;+0+s_)P&''0/'6HVb*ai[r1p5p7\1Rj9$hTKBi6ufeZi:gPHRk,$!I2GFpm:-M^c&d_tnod#O'/SAYaOe%Ko^/;t2^Idc'3)Mr^HC'bs/$Gf:h%I<'?`1;YSJM1W<]lRlJSeD&^sGqgK-X!s8p498O/:jlJoi(f-\`7JEi'4*IQ/#m[I%)9O?U7Rfi^'buCObg4VuG)OG_aRS<2X7m\]Q7lUJr6UK4_Cd\L$lbc=R=a#,PatX[o4:<[8(3I3JHH-4r%L;u?M3(N*qRJXg65cCO3S)k4$[QS)QA?N8\kT8B4DQ`.'iY,J9I.krQZV3-+(N(2i2?[VacbQ^>af$p#g2XWd]8TDs^dG0r*fs1e7&-`g"TL"50rVQWcb:e$^G4+ed;,L22$'@NA8V)E=gJj8YnF5pT#jSALO$EV79M?-k7T`dFW)9>RDOllN+OGN;/;/b41A!EigB@aijiWj1jcebtU&hXp!FiG;"#+G4"!0NfqoA<7T8c8"2DRp@$l\'GQ3A;b9Q;2N'l.U5Y%i4ETd`_hJU+o#H_M3=m=.N]`S9geNW_9gQugpqLc]TCMTo"bk=6\c-d;\'f)$Pk;Od),"_9q!mF3GpW/1Fjt+CMW6aqtA^tgE1afJHH/Nm+J^^gU?!hs*a=j\O2)[q;?l9fTZf:%X!a.r;9>TrKQ_i:RNsA[m35%a)Y8CdA'4#(5PGDo&kN&rO3?,jTY4NkKfc5DmD@/G3rHiJ&Yc",*[AA<"V>c:0:V#p[6j+GTt?k4$/@*EBm@I8FP'-'A_[i4F")*DTX/9UJlkNV?>A$<4-Mnf&m,[a?2LC3:LX+=Kll0:8ofFRD3a^`5H%\jlu%*aX<^:p0:S]h7GW-Tj9q7TS3U+'48=mWE`=`CW,2LLDfqKAM,m,W.m=\X.[M5q"aaUBQc4d_\,j,Quac6S7!'M1rJkVoc5_oJ8!9*F6Cj*hVPd-$OFd[J,Mh1d'moKMHcVom+]"1TrYA&]2m,G=0Gr4.&qapqJtJnW[VU5[VXVPQ<"0kJ'H6_'fk`GPEQ@]$7[MT#g506U-\f#(Ddl!&9.-s_6ILjZ74JTdZXQh#baPMP>:;%5Q6ICh*9TGg$\:rW7quKj7(%G_1POR3!$XqF;9PSI5>KZ^o^?CQui3W=gCHm>Gqb?E-6ruY^JfH:]ifT@cS;fZ%15UjE%LrtS]67bq;6slZV"<;n+a0U0XD:sA=]SQ=C-(G/Oo'3CG!:9H/99Y!f%*l&#-o4jQ5LRX]q-cH0X9VD`ALSABjEfWdf"qbEY@;,P'W[LD]OVG3QDg=G-;?3C;-a""b\-)e;2+G1Q=ib6oE)5TGRX'i<19h@peFmBed&"8Yka,WaS9+[a,d-Yh1gpdrC:6"&ag_MJF:s/\)_[fUcV5:"'(De"l3tgmbK)B975r0MXK0(#GWab(DhhhNbg]DTD1:<]Y#49/m.uR/khm$STE40!+6,pZ5Pn#=Pl9IT?.OlphSSd8uICOE>"Si3k7n9t^%r_FK?XM^JIesSL!8aE>k:9o5"9\k32iL@`%NW^(+$g(1?(]j'fO-fWR[fnlHkLVPW)8<[*=<;fV\=pdSM$[Bf;Rh56[40q@'\\60iMn+1=V]Xri/kO\i$kIJ`$T"m?l2B$DM1+5ESI!%m'X^7\:+o%!:@Rb1Os2>Ydr7>i"S`R:SU,9nGTL,q1L4TPI6AAmnaQ04rV[I]mTg?(2="5^N$b%`RGR_;]co$[NO#NH4[&&$_Os2IeF'DuMi1NH-1gm*(V0tLq=tFrSHArrKbbdN2f@CnYJ66UN:c-5U3/M;+15n9B&trM(L>8tO-,fs(l]TQS2kXm/hYM'?GCsfaH7^$Y(D9#pisCJK+8A$ib76jo$3XpP:#6("m?6$Dr7E305o^[_(CY4P*-G0;g%D+?4V%3NfM]S&JPurC/ho,nH>*'N=5Qr#ZVja<<][T!8@&2fe^2o0$Qqn8P)J^&RsF7n(p4_'jFY*6#NPEWo`d@c1=DS9ksG3p2Ns3RH,AJ^_ur94kiY63LoS8I6?\T>7arX2nILP1=77q&74b/t(e*P/c!#-^m0!33'!fKUM;[d4>e9MEZ#++6PU6DmSLj;$)SN@$t,bg"CPMZRE\7RdU0E\,9e@2JcLmp?e>-D;)L>@m`W$?G1YZSN:oZeucE!h+C4/&E+Q_&jmPe8k*/'VG3OL&C5\o)*ir`$O^b#Wg2;cNOkN;kAsMh9he>N`dIC?c'70B1h+q2:#t+oF=.k5,`mmS-W-br;N'8*0'XKoU7\E:*/t5.$EmdL9"q]G>`g"6'Dh);RZYeGT[1@0+XB>rXTP7*OY$JI%)lHH%'(c?/DJnlq#nmS'h6h$b`(s]E\8["lg!.bN[jXMiPa@^I*BKF1\0:Gr7%hN)Z8)q$O0N38C2",*6#.@(OaeeRq'/qA=M]?LJUcOs0IO@'J,oaOs"F!CC?AL(lnL=R'KRfOq:4%Thg?(M&gHO6[=R,A0Ui+\5Vou#;l25Z[&6]lnp]K'['Yf32tCD_#RhY1bhLlVUYMhj.7]M=jh9Z(JuM\H&mG20n%XACjGEGk*:l2AiPUHBfOok$OFl'PVP^6Oq^u6i*4_H@YVeYke&de$)1JX6@2"sng9jT;.RurtNYjL&6%cGIECNEPcna,1iSd'6L0QWS;1M&CLhD"YS.f0qW#[VV@H;\'a$K]N`l]UdqdUqk^<>1!*qLl$sk[r*30'?Zt6K+8k\nG;fn&Ho&ombPL.Q>,*^/T+F9'LC2.[*YHb:nN10)-SfbGWW997q5'dOoG%*?Z4`0dF[!:a%Qa"jlLTnHhZqK?ZuMV&/&*!"mCH4o--iDX]r7?bu2#g?/2.S.H9FL6oU?lU#ssZ+G[pJpD4iS[VS79UP+:'NP9LJ"J%cjIf6iCG6AIC5s_NQbqd]]=rqG.IlohUcsedb0G(?jeR"3s-N[@Ql;5J$_^u4W*0leSFG"8VW)[#f[uS^eg;^j6Ji[hQ1'jP?;oBnrTjWse*Y;T6hsok\@D=PM%e)LbNO&Y&3)X/OP9oI-pVh"jZtRX29s85B^nW'FJ+$=e0md<+Lo:`%Y`l5o.aH.Qu$FXWq@dMaPQBmhLc^kRO#`+=oaiVX:o4-.-*BOs-fZ3jCZY,=g?&5_](+lm2<[I.e[F:P!c2l(mJ6N^13I:Gf:$sBe(+nP?0'VWbc'gN=BWtFPY:<-],2S*1LPm9?BTQ6DBK_.mS=&2dP^tYoc=+#bZSh#7NupS5(IHE*=TPpV((RL:BYQdXj5YHJQ/Tq>K=Bo&WM&UDpbMIJ`^mf^Sb1lgq'4NhiHr3W\!ED\k]id-TZ)?gY1u=0EZKO5.L"+%u6H1G^h_!Hf?If/)S=+:o>*7p/AtC204rD('lXjfG#)@U`e5BSoQU3oLhX8.3T(E;\j9+@f0L@r6(bggO2];aYaH)WNpeUP%N0D2T/]6kCIh%*a]4\T4OU[lb7b8^EtkH)d1Spu\&a#Yd$^_?AYg!,4`ZkCZU#aqKcBaN2Gl2fBa$I!G,:]rnN@PiiSk&e`\@,!c89LT22OO+$cYGC3G_T%^SfdqL3`0,I-25bOAGTgg7rN,WubQXHBmNPb-c=')/n'6@eRr;HBIbiPMC5CWNTndf:D09KTik8Wa5B?d:^\&Ml#9H!P5jfm604%Ua:f1)@r\'g&eHUa^DL$MQFMI\>\)0SfR"#tD3=6ej#7]8%1!4F%1R1/[Om+>ck>Km!f;bjF?d.?[2#TNaMCN7#b;,p"R=L9USs*KV^H@6;J4+7-)saJSA:(]^tID/h"`+o%R=FabaIO@Z?GV=[a'C:CY#Rq?s+jPr:.4?SeF9(*R`.0HSd\B^8>f4RPTA]9[;3;6#g;PcY:4h4R@+q1Bn58PM!mX,ET>&/Nuj:@N^b7!\R?QX#Pu4(hS!uRFs]^M:bm+S9_KDVI=6P.b456#(T]@j#BC^d"hf6T&k@I?5g(cA41fRsc8djDS32'09i,\CD"d8NL]/SB+FqKP!C]FGM\e$1Gjlh_"nIT:`+IuFKt-4M#^R%(I../JkEl([6pMm9l)i)"kg>%Ek4$O9b#bcQ+`"E,lddXl[\3YFrqq%-6%MLgkR9H1fs>=]C8ir>Y@"1A^jB$V9_c-!b4tMe2*-4Q8SDe9_>B$=]Ef:/mbPK*Wr2+ZTAnEG'\1aaF5^juUI#`otG]Yqb,*'Sc&d*Rm0/8*;#j]o+.?R$5d2V8LGI!g=+op*$dc7mHX,a,;HO="[UBmomP-$PitM\fk`=EOE3BtBleg)5lKVbU(rE,fk07t?h\Mi/f-i1Pum^l1&FY4OYJX);%^cHaE]LOV3ufK_C`eui;:>9+ggcm8Y0M%c2@Q00FlnpQ'QGtVje[:mi.3ihUlXLUPU_]RNZ+15Y#kNt[/CV@o#Di%-j8jBAGC#r[a>Pq\om=2G/FC^:nl0N7n0lDLUOY"PQDtHO=HZdR11&k:i2i&:S4rjXn#DuN'`GXLPIB:hnOX_[h_0\^3r*!LbjSMl$s1F[r*3lIhqFET8eg>V19phSqnUV/s'RfZ?ZV2B"#kJPEM(sd)c[8='&IXMpYEkH)1X"@54O5N\3EN8'-;a#8fSEX]r8R$NpHi0H=@1D/1Fb!;qq?&90PJLsj^L67Xd\6TfDMLuK=0>7aXV5:Aj4a\b&!\ehd^jKd;:!%8^HFt?qV(+j,@ANCkYKnY6?aH.!e,GM'4VK>lhY6bXI'iQ8_FR7YB+oA205r17XXJ6?])3?pILCU0HhP0*ZNK&p/(hLs]2b-e(cIn5"Pn"fqW4#TCE%q*V[r:/]s"sPjhVPtfkK^S;E$RG(qMp=W,+B;rZm!"E@/$]Qis5[;fBZDG>9fLCP>&r,qu7oiOUs:K1:m]mB?jX5F%HW\jr8>oNhF!G.?:N(sLA(IX'QBkaQ6_PGD?.8s2ML)f^VRr?#IJ@);5*uNQBjFHgc4H!4+6sIGU3a](p-uLU?q7V)Di"4%%8l*KnZ'WEIqWFR"5a<51?+IbY1@`TJ`;":KCLsMLVn8YeVbekGbG[EH#l)FrpqbPVO<,/&(rP9?Ib%W)4eP_MjG4kQ[feYq]R%P!U%b:r1SV9,7K`\8c#t^VE,n5m[u0D:>AA=qBWTk([(h!!iXs'5>mj$!q%cH$OMlYtLE9GdU*MnmWk*3]\W98,7Yl]mGN=UMbZermtM,`.Jk2r]21Mk\t%hB34s+UDf]Mi'?9Gd2X^m$9Hi3Y&.gO/\E=-T8j@Ddi0V>V&A'L\qfK+C/]/PTEEV54cmB[3,.crNJ0<`\qG?[o>#*scs7DS6#m3.uq19'Xp*K3R(0":lc.>FOWGbI*4>_RQH,#\`mNo&NB.mK:_M+N5q*-V3=&+XK!'23buCeuaj7RcGT`),Xd[Di\+klp2"BL0TCBXK8KQ.OoD<"oseLf<:fWSHtrgVbUc2T7?i#DI$.Nk007S[Xo42S3`1Ncd-OZW);p;8)qUK+mq1[D[[^O>fofP_1Di$@;Xc-`N;dj6q9b2gF>'<'t5f`;,pVM*5Td_/(se0-!e*(O_LI]!8u)>M%f,CKG90Y^4#n"_Ras[Na%i<))Gk5TrfqS^5Q9\4K,?_I.?48RPek?p^U<,?b_W5.KCS@F6CiF)\/SgV.+s1&lHDmrG_(c-t-OmjQ9oB=TtHn*Y]m:f\9PCRD.otRD,t6\'H"18k_;8a*=]sRjE?cYOU7e/E;*oST3p"?'TE,%c%rBq)Kl5g>@7!DNYGtBj5.G`,(IF]*"g;7G_Q?HtT]PQRT7'1BUAFQKp[6jaqXj"k2f:a+qQuTUfB_%lZa-m(pK>&;\P\A--RU:hWWN6GZ+%3?F!@$?RCLfGPF\7=(=p3JHec1X%@K+u%=8VGmS>dT=.aiQit,dc@X125mH8WtQXc^d.Ap_!u8;?fj`kaY1kHou:hs-/h8P(e>ZiJ4pc8Xa;dZ#IS=rZH:#QR3]k04jVShH3B+PjVO,AVoJc>'%H>7]nrKu;3]NkpcA-8e%i+UM[%fRl68-%5qn!KlVLd]Qs,6l>#,&FI":MShTr%))GkiDHoI$-n6^@lgp#N0?1-^?T)`Q5Ul0GR5;@L8Y&;.(6RA=fWeqrFm1Z8KnZ!SD5%tJ6\c/*fSk?@;,pUbfAQrF*fO=Z^E@/TVpNZ3/35i'XK8Mc4_Tib)d-1_aN1#j\&?3QgsU;7q"T+)WD<[1R@=3WO3jA0g"De!MdF&@&[sRsi00`qHdWdB.I6qFpo0N5!G501H.6/[kn*CNJ.`Vd[=Pn`9o-,/EG_W%,M5pJ1^VR=0Gq-[SKe!&oME0!G,)`,=ddPecc&dZ%)e&3]e<%*K=:Z^Mn6<#4UL3^JKCErU.;di2*%O:sO[XeZ4I0(BEq/_kHaMp[7!@pFj^V0B_[l*#or;bK!C]=W(f2^u5H:(clae\acNcXr%.`iUuNgF;ENSc47=pJ"_h_bF[eUADB&X:LIQQA`LSr6P7tWB+MQ791hfqlN.'8aN_u+1VZkd:;s@'s$O8(Oq$HlO2ihZ'%!KBK:#h/Z[).SEjM*uQK$I!!;o(ujNp/$Df212I@?^tSX#K5il)9q8&q/^G:m+.N$1^(.Rccp\E2b+1*eVao]X]lEC.""eGH`84^OuN\*.I2KZ?_M2B'N:+FoMg/9iV[;4B59@HU1SifS^m3+iOi78&3Huf&RANKGKl04%/*F$mbM67Uk;,OjR8VNV%RXY53;7=ojLC\C*dl"eN]I96f,+&Bl7RTWISb_*QFXq?P)DG[@%*Da9J,UFs1^T;4R7[._6UO4\X4%Y1.kCA^h+QAFWMul,"Te[r0Ze>1(_o!]Q0G#hYhS"9&St:sS+K,kBC^P<\['VYS5<^I?Tgghd,n64k"M8([?6X]gE_*Eu-.8iRcF`JYPuiVB\Jo()7`qi7gR"q2=kQXISLEBJL8!%ffA2JgIF%gWM1mKI\OL(oF9lds1Z:'4\-C;kIc:Ra6O[sSSu(Dh;`gmOj=%NRT0<`XrZ-3Zqc:f,NID;/7$BYjMYW@(apj`lIDpOF3>OfIU!6UAP,Tg6UF+UD/I&`jr8.Y[$X+C90c94GO?I,-jU4i`3#%OBM%mWO$@Y+n$?ZQ`a&[/TXDf7n`/0.cg]o2Y@#&9QBikp2Dg1T.h3L;)s.m!"Bi3O*CT2soEU,,lW^f6_6$H7ct&Co@]`gKeZ+=-4uTFAX">kRfXKCi))E6Q*Q,e4H!dME-i!E&>NDoP/6Ti1f9=]<1,;0ri3uhh5iOJNo53?s3GrsXPFeA+X:XqL6\c0=hS":%eubDuBu4KWbB-Ai?X1-^Kq$a84F$Alp$:#O?bCWGR[T*R!LoCVXK9XhbDV46naZ.S\$qtnIX!+!%4A0Sob'&QOZU77H[.5"Uf3jOoR'XcC['Lb9[8'JM@#>d7bWji`ut^3l?:RAj'O)eAOj.Okc4$;sc"_Sa9>I=3+V*OfqB3dpksNZC3e'OY]l$Sb\YOa"-RZLqWuD8/+b6\:Elq%=jQ,C^a,d]Ff8^r&^m\iXQFXW>Vl-G&Ht@tK9bqp4`XQ1!!'mi#A7X&HAHrGFh!28@]"4?hj\2F=NF5CD96,)pdJSCBW`9,fUh\_sou;t1!s/NLoptrWT7/!J['I!S/IDKR#[PUGrr)`SQH#KDdaIU!s.7&GaX@b*UaRcF$k!G1$WscBi-^F[M_DeH]Qiu.bEq,!H%V\&mQ+3dm+=%Els[edi>)Rs;M8I_:/Ok#DKQqe0OY$8&IT'Y`[t"WW2ZaF/hTmj8O8rea2dAcPq,@b*3lr\hQUF@\[f8)KuKo`RquqY;'5E#nqr6ZaNDYg9AI_Rc_$DJ%W5,D+@XYeVDGZp^:q,-E?R(mP/2bnK8*SQ+9QY)ElaeAkjSBK+B&IT*_^9dkKK?H>8e=)eLfg,OA(_md>>8.'.Oj_ZU3iadO@-Odt\#-3dN&&HVfU4gF/tr;-HLqKP-if>WX&c?s[(;/30?,S<@m9_L'?[m[QnSQM1dFh&gprWqKl5e^NE[(s8!!@t1L6T,*+8.'.(P^9%;Fn:A*X;oT\r($2BB*"taG,Th0,"*lE\"Xg!J%!!ZtU2Mm?Q9+m+&.P)$acs6CC"&rhV.i1`70T4q5pRd(iYDg@K>i`b'06XlK*MCa(`=2gg>;>gE88ku^t@;,cAAoGh-.NI_#Q3(hnD7Io0?2'!)Q=%BIK_ESNhTfDJ:$In*eT,(hqBl77p/ZDN01BTj5pd-$gg:i2(MXcBPb=;X#6i@=FuJi510Ue^`3[Pl_R%/\MH2VJY(r\4$FK4J81`+#n3>[knQH]6CG^5>n[k]j%s`5qE_#bdMBC#eagJqXq?e!J!;2WMsUe\1si1Pu0Z`U7rj>:.34OUISn&c2rZR15)i)1Eul"(@L%m95/4G?b_V*RKeiaM_R"uaH.&_:-E7V67E:/2:F?>R(/AS#HOpu@Fr-SDU3\,[Wl\p*U<*`,S"1m.$i.PEH9Mi0qtnEA8p99q.)p=jLGqiMXG=s*p$]0c?\AS#G%IXYa8ildZA]tD"JS=K<>fs>GD.PrmDf<='J?[T]h_0,2$fu1g>qtBEU&C_A"]Qf!.)53atkeFTCfg>LuP:'/cD?'Zu.j6&ZPf)e;X]r<3nH55l^4-$,euW!or(*qn[D7jm$hEke8WcSgF*"[q[@K6p?FOh.3'8+.JN,XiTFKAI9qr\23YhbuR4Jj1V.%8r"U,(>[EB2iQplo@jM>,-?-s9mjN*J;=aHc$HhK#YV?-aC6PnHX`s,UbEA9Bse$j7&3:j;=MMd:u['ZL!T_%?mY?8&]]_tEjo]js7NXGl5G2_gQ<%\onDUl-+Y:17\bGOJ1Gq&?ZCs[`7un^WQBp.+?OmVV:.Ro@m]W:VTX_KK4n4De$FGbTl$daTO<$na8X+j,2n&T]#&_s*SIG.JXR+2WqX]j\d"J:@%L=2nkQ68,(gj&S]SW'ih!.Z,Bk&p(F[3L`>S_9TVm+=$E9j(.`%.6aW5[%?[]KVH>4$2J?1B7DW&KMld3JsFmI>V5I59NIaS=KNBeZ5pYY_\*kW:rE%ps@gOS;fBnDFf*`c^m;K^(AS_"UM:9?>t!u%Kc]W_P'>P.*&X=Di$"o.62nW4L7>C3d%HgGI`5'^&cf@IoTKKnaZ-FSih"6F$"jKpr8:49h\6lFQpZWp#grcD;)cU/-(bJBWb)Jd:h@IFh"9)6"+1F10eoZX`N[Ng(^^6W@,qB6`BEdJYrCd,6_b#kMbA3&e]dsHt`%miPL;&$Q!P]LgKJM"ot2;+X)DW6pH.u(q2=VTM.A>^sLGiF0W9d\]Sq<^9%\:34bkPCAIMN:XO(u@]q((-(R2G[U6duC5_ZRne/:[!!)N0eZ2b#a0e*a4O)!iTegIi]6<::AlVj]^juTQjiAVe(L!3MR57>X&)um>b'oIQ>$?76aq_L^/1iFWXW7BA6:5HPk0KZ\>F47r?TO>.r(Z7=?[bj(7n2tC042H;`dJgjI(6i%>gpR9S2ir!s"mI0(Q-in$efGD]YH\Za7!u:uK?Q)eEk0',)$LN#4k4-9HD;i#KjXp$1(lAa8?e:&rX._Sa8?a*;uZ4Dnk"iT9/iB.X^am`qr9X"<]![K'aKR$=-AK?h+>gBl#mgo$HhO6d7p[\X!dni:X/`1oCn)_?Npoq1!!!X?n`%OKOhQ#+>26]6L1+#HJoThjYq.@L,@eWG%1G\Iikr@SUo1+h2NA9NEreNj.5*?P4?DHdlAAdaDe*Hl14'RcO,o@UEaiNgJ,T%Ak&P4eW[0ukUebrK0P1,lB4p7j"onYLUo("eNq_c$B\_$\+?)6g?G1Z"SHs;nq4sg^.9!+B/Hde:_?A8d-=sj']d_\@3F^dl!!(rLTV*FuGXms4\Xsij.4Jue]!Y_bJ*PN4L-gn?3Prda.+l4[[qN1512(5hffhI3r=8o#(Wp8kaQ4"6M[r:.>\W5*k/hk/`OX"j=!rtS7[Vabg*qe+8f!ojBK]0/).bCh/UFTd7b*&eL*5s[eG<`@ud)`EY\Q/m02'*&#ujQG]Ur:.hgJY/O*Na!E+.P!%&)#Q*u`mC!4S=Ig>K,A:mp+IX8A,lQ,hVR*OZJ7huIY/!!!91jjC`,/R-A/!r:cj"#^@U_19/0]5r$;"t\VE]mfq6`5G&`0o*Q!o&@ZK)jIH-#=\\Y[u$!"+qOVAj2XeKit?p<7uss\p1U$k=2Me+#<=jXKThT5g#86]PT\kZ)Gs+>&ed&g))<*CirXbVoA[^so%=!@pYTuV;@aD^`meX3AC-UGF6?4t_Q=1G!5Z3ek72e4UU_[g?*p7r5"fB,'bs/?_Xls:[;ln=>eG;Yj9C_JPT/JfD;0eL(B=GEE:`3dZ3:LA$cB*)Q?267Z*EID>IL>$s,iG+Tr"Z[j0R&qPJuYe17k)/>*^j^i^@g>n=g?l!9rP+k!lcZEH-!.F\u(D?I%!!)]9NU5>SLjb@lc\K5:/Hfi-(1+[,ff?>@\toYf@&'^:q<4%D/mM0f]qqn(tacneO('jfAoZk09CMgY6LB!bJ5Y.DHZ&!.]:7PK?:R)G)i_hX]dO=k`R(A&])(qpqlR[Ib8G^A-[q>YUnT++O3.bEa`f.=lMfGO3s:^(^VK+:J,Fr!7J=;l
    A5L$GP7HhZrBkq^=RR5+qUCM8R!$G!^Xg(ZkKUC!h.!C./=8%9QpA4T-X"`@T[W6MJ?i;3-4M@\TaEH,63"YILfp)EGni/XN=rr2oN'Jb.8GX@l:)]SCF&-)\J&Jc-OYQg:<9p4W>\ql.JND+c,B$Ho2I>ZTVS=Kg(X&lLEh&%+tN`Ap[/N;dSEt(g530>kV!!()uf[s;X6'sTLSi$2FE]Ef%Df(["g<,KL0'e=6]U*_-26rTT4Y[KoErdp;a!sdh'#*'B6(Fs9p9f_8mZ*^n!9-aK;EhoA$TP)TBWb,\q\okMO;=jMK>CN+E#B7-Q7oV9sE"65NH%aYgabaB(!!((MA6#L%SZ6EB,TG#Q-RYffT0@k=$@7d6ghji\Vb`p7X2$_1Lm=5?\NsQ8HH!'e!!)(N9hc(#J>aBAh7Imk(.CqtCOceZ2^Ca2Z,^YG"$%K[q9@7ZF-XMQ3[+J[GR[+A:/2dL6QoQ+"QG_#_"h-:1'e3@lQi5Q(#'U4a1-:2':;TV*F/2:_cuOoM/M,/Q4hY$Ieb!gB7Khn=A\\jgXYE=o#O!!(*'daD$'@q2@S\8^C.DFI6`Q^:Y=*E()PkKakh:rYM.5dF6;$(.*IW628K]/JULAQZpQX=VnO:JOZf=0EZNo`kmB+CZVs!0A]h2E"1>EV]0:giCp6il-fd557Af?dPoZ2s&?f!Wq$SE9,*&jS8=E_oKfQ+FDY=D&3:_7t\?ta5PqHJphTo9pLN\WgPG)D07RQ#.[(/-^=Tc+=)dA'2h2)T.?YfNO@!!"-!o()@#pu)I3)3MlSeWQ(.p,T7&I!h/C6tVbHY7uBWeQ6G0O0PQmMMmD)G3qnf3cjFWe]W.)hQ?Y+Rl>7\SiiFOZ=oAPX&8ota;rfF.P`unjfj?ukAio36HVF-bQJ%Oi2S#Qm-O(>X]eSZI/NcEo!5;tY7ggq@))d)3i`0!!!%Ng[r:/)Qk]07\@&OB/JBP1jTHVgI&QrLEgIai!,p`,)1,hrW2M*KKuu&.QS)RlW+seZ:R>eB0E;(uaP41B5Pa@R"8N(_WiE'C6j=n-h07bUr^?!$254g6VW$Lm\>mZPH2mmBMT[h>T'>@uKr[ZC!9bmY,pdWpbX!#a_nuSc(:L/9;h^a:nm^[(1pXKgm+Sj?jP@RrH$Kc6/nA"JR@0J6SZVUdLFPB0mY(@m!!!;Ffs><#A2R;n['XAJR=tK1QS2]XDf5q=C=Geb@ocEfZVqq;?sr9LW>b/1*]@h:I!iR4q>gTCF$`5]%K:QqPE`&FW*hNTWkk?m.:kLqHhM:79Qb_cLgaN/bOI;HY^!i@#pS<'h%-e!!$D=hnFN_G+NY93=;pTE)nU.p#/$5qU[D/J?G\ULa!!$K5Ni()@[k.JE#TVjo@4XBDls$\.m:)<\lIn`J(84rP@?!'k`6$k++8E1f\/<23,)dF$@s/GAAZWu6eSM2C1lX>[.b\Phbe"onYM&]2H']6E_HW?E9:@YCU;8ki%11nQj=e##i]"VqmjCK_W`BR^-t!!#7h?k\EZba2[c=]AA=iHE8%*RjXegUD+!.rE+S"WYJP!kPcTXUY=2TF:Pipi*I0A&aJdG1>s)Rl;=)8%0*;$Obuk)NR",oLQUV#64ac0cVD*euD`nc-;7&m0X4/\_67TIee]'5U.KuD?]S:bC'No!!'TcVE8^7gpj'&f%+j$`c3farVH13Q^3u)a/q1Iq>'3G[+TV4l2ZbpAUbGOJiibN'8B7ao):!!!#["f4B[rV,4Fc#m>l<2@3mp@\))'W];U0-*/<4aCj#!!!#`6YQu#oCMdkbM'@>[5ZLoDsO/gO4M$II^sh"0#(*c!!"-QaN=F+5D]:/j\*<]1uZF-q!mD?.[`dZ?G+?t!s/H&8MbJ+:JoI+`.!'&F':2Xj^%^K=WA6$Pj!!;$:KD'g+8=0Gs#=MBu_'9C0/j,ZE*29t(8hE2S!00OXR84lM6YpBDN!$k*==rP6R"U52%3s!5(Ynl@%[1$,0$?Za1=^11t64.rV\7ku&[B_(WEDm>?dY,'Xd^3)W[R4ZkikZ+l\#1E8W.**lKA;o@59!<<,X"nI&4(J@b3=t5V.*^+hV;IOs#]KgZQLo*n9IeMH-P^d.Up>*?)UC0hh5-=d)!<<,XSVW(-RkhN/7^OO4-@\.b-\XnBFRsE=ihgkU3%e3-r=coUnje`UIM4h&/H%Ym@sgb!"^2^N<]t8XL)90V5;ti@9=GH^ANKZqDBoqf\"iD>A>`=nGN*'AV1[5([p(cMf?MXSNF6-XoJG%@Sp!"0lc2@L&'H4E?hqZrqPLa8qYg3It-##1AlTKDqD-4O/7[8C&pb%Pa%E&3d$=-6)RJKWiE(DGch#H!+LNGr8P\R'h0`:4IebFldi25[$dnmWN)<@\ogY2""ed47rm&,e#faSl)mTQ:?L`5!WW4VMh?Wa11GumL)`DAg=tAGmGX[er^jUN-722I)_GoMn)!Hlj$WV85p.9mJ>\//!!%P#=0GrO9V+@Lm58P%SDi]e!WW4.""cllJq>iX4u'$=n2%S!!!#[b3,CH:,%Wk_#pa14b!q&>LL[U>dU_LaR;f;?!!&\%\``^Cu2g-bXVa8!$DXTR1if5CrnBa:.\$nA]+$>]6ODW!9bO.aDuHIB"0fW1_c9&`s'BG$ig8-pkRp#R$3A**`NiBp?gTj+!)5M"q;Kha2a,3'EA+5j@aN61:!;Tj(W+;`dG%a=V9mH.Okc2#S?BHZY%H3/hRp;nGrUiF9#i-J,8CWKaB&\5Tt+7gc6q"@nc*T$`P"qQ/]mKKKfHpe&!75H8h;+2R4`]V>g+1:chAHS-%+N_BVl-FCDd?LK8^7jC-.f;*'=(mE!!)YFkic[^RV5k->[:W[1ULI$p.\Jng8PXKJ_/q(G9[H$O[aIXZ*K'cr!3H_2!2,B@77FJdfZ7)DXq(sNrUeQ7\X@lb(O!*7?G1Z).o90A9q)n;)_5e.!rr>b34ZT1CgL*jh\r1+^.+aWNYa?Tbg4TOX!%KD!;%(':JYSlChmfZp^(,hq"srL*^*\*o=eh]Rafhd8f;;RKTrQD]=)G&VVHQSZ*CR?ZZB_jVXSF,!!!#s+'D`Lbb=(op$5-D@2dDaDr/,eA]b^HXSr(moBA#F.4?c"IJ``?]=[ss]mCPH=>5!hi30lkWaWf"FmIUqd\KHi%NU#ni[(nCQ1_d)FJ3NT)!69N]'E~>endstream endobj -56 0 obj +59 0 obj << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 523 /Length 102 /Subtype /Image /Type /XObject /Width 535 @@ -475,11 +500,11 @@ endobj stream Gb"0;0`_7S!5bE.WFlYNTE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz%La%hpV[~>endstream endobj -57 0 obj +60 0 obj << -/Contents 142 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 150 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << -/FormXob.d3ecd28ca03f587d6940049748681018 3 0 R /FormXob.fc331aff86ff817ecac4c4ce4b2ecd3a 55 0 R +/FormXob.d3ecd28ca03f587d6940049748681018 3 0 R /FormXob.fc331aff86ff817ecac4c4ce4b2ecd3a 58 0 R >> >> /Rotate 0 /Trans << @@ -487,9 +512,9 @@ endobj /Type /Page >> endobj -58 0 obj +61 0 obj << -/Contents 143 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 116 0 R /Resources << +/Contents 151 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 122 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -497,309 +522,325 @@ endobj /Type /Page >> endobj -59 0 obj -<< -/Outlines 61 0 R /PageLabels 144 0 R /PageMode /UseNone /Pages 116 0 R /Type /Catalog ->> -endobj -60 0 obj -<< -/Author () /CreationDate (D:20260418063437-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260418063437-04'00') /Producer (ReportLab PDF Library - \(opensource\)) - /Subject (\(unspecified\)) /Title () /Trapped /False ->> -endobj -61 0 obj -<< -/Count 63 /First 62 0 R /Last 62 0 R /Type /Outlines ->> -endobj 62 0 obj << -/Count 53 /Dest [ 11 0 R /XYZ 57.02362 525.9477 0 ] /First 63 0 R /Last 115 0 R /Parent 61 0 R /Title (Lumbda) +/Outlines 64 0 R /PageLabels 152 0 R /PageMode /UseNone /Pages 122 0 R /Type /Catalog >> endobj 63 0 obj << -/Dest [ 11 0 R /XYZ 57.02362 346.4013 0 ] /Next 64 0 R /Parent 62 0 R /Title (Abstract) +/Author () /CreationDate (D:20260418100555-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260418100555-04'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title () /Trapped /False >> endobj 64 0 obj << -/Dest [ 12 0 R /XYZ 57.02362 303.0236 0 ] /Next 65 0 R /Parent 62 0 R /Prev 63 0 R /Title (1. The Problem: Interpreters That Cannot Feed Back) +/Count 67 /First 65 0 R /Last 65 0 R /Type /Outlines >> endobj 65 0 obj << -/Count 2 /Dest [ 12 0 R /XYZ 57.02362 95.82362 0 ] /First 66 0 R /Last 67 0 R /Next 68 0 R /Parent 62 0 R - /Prev 64 0 R /Title (2. Architecture: One File, Two Evaluators) +/Count 56 /Dest [ 11 0 R /XYZ 57.02362 525.9477 0 ] /First 66 0 R /Last 121 0 R /Parent 64 0 R /Title (Lumbda) >> endobj 66 0 obj << -/Dest [ 15 0 R /XYZ 57.02362 189.445 0 ] /Next 67 0 R /Parent 65 0 R /Title (2.1 Type System) +/Dest [ 11 0 R /XYZ 57.02362 346.4013 0 ] /Next 67 0 R /Parent 65 0 R /Title (Abstract) >> endobj 67 0 obj << -/Dest [ 16 0 R /XYZ 57.02362 655.0236 0 ] /Parent 65 0 R /Prev 66 0 R /Title (2.2 The Bytecode) +/Dest [ 12 0 R /XYZ 57.02362 267.0236 0 ] /Next 68 0 R /Parent 65 0 R /Prev 66 0 R /Title (1. The Problem: Interpreters That Cannot Feed Back) >> endobj 68 0 obj << -/Dest [ 16 0 R /XYZ 57.02362 245.0236 0 ] /Next 69 0 R /Parent 62 0 R /Prev 65 0 R /Title (3. The Explicit Frame Stack) +/Count 2 /Dest [ 15 0 R /XYZ 57.02362 765.0236 0 ] /First 69 0 R /Last 70 0 R /Next 71 0 R /Parent 65 0 R + /Prev 67 0 R /Title (2. Architecture: One File, Two Evaluators) >> endobj 69 0 obj << -/Count 3 /Dest [ 17 0 R /XYZ 57.02362 566.6236 0 ] /First 70 0 R /Last 72 0 R /Next 73 0 R /Parent 62 0 R - /Prev 68 0 R /Title (4. Continuations: Feedback as a Data Structure) +/Dest [ 15 0 R /XYZ 57.02362 160.245 0 ] /Next 70 0 R /Parent 68 0 R /Title (2.1 Type System) >> endobj 70 0 obj << -/Dest [ 17 0 R /XYZ 57.02362 159.0236 0 ] /Next 71 0 R /Parent 69 0 R /Title (4.1 Generators from Continuations) +/Dest [ 16 0 R /XYZ 57.02362 619.0236 0 ] /Parent 68 0 R /Prev 69 0 R /Title (2.2 The Bytecode) >> endobj 71 0 obj << -/Dest [ 18 0 R /XYZ 57.02362 581.0236 0 ] /Next 72 0 R /Parent 69 0 R /Prev 70 0 R /Title (4.2 Why "Feedback Is All You Need") +/Dest [ 16 0 R /XYZ 57.02362 209.0236 0 ] /Next 72 0 R /Parent 65 0 R /Prev 68 0 R /Title (3. The Explicit Frame Stack) >> endobj 72 0 obj << -/Dest [ 18 0 R /XYZ 57.02362 363.0236 0 ] /Parent 69 0 R /Prev 71 0 R /Title (4.3 Four Scopes of Feedback) +/Count 3 /Dest [ 17 0 R /XYZ 57.02362 530.6236 0 ] /First 73 0 R /Last 75 0 R /Next 76 0 R /Parent 65 0 R + /Prev 71 0 R /Title (4. Continuations: Feedback as a Data Structure) >> endobj 73 0 obj << -/Count 3 /Dest [ 19 0 R /XYZ 57.02362 765.0236 0 ] /First 74 0 R /Last 76 0 R /Next 77 0 R /Parent 62 0 R - /Prev 69 0 R /Title (5. Optimizations) +/Dest [ 17 0 R /XYZ 57.02362 123.0236 0 ] /Next 74 0 R /Parent 72 0 R /Title (4.1 Generators from Continuations) >> endobj 74 0 obj << -/Dest [ 19 0 R /XYZ 57.02362 737.8236 0 ] /Next 75 0 R /Parent 73 0 R /Title (5.1 Peephole Optimizer) +/Dest [ 18 0 R /XYZ 57.02362 542.6236 0 ] /Next 75 0 R /Parent 72 0 R /Prev 73 0 R /Title (4.2 Why "Feedback Is All You Need") >> endobj 75 0 obj << -/Dest [ 19 0 R /XYZ 57.02362 591.8236 0 ] /Next 76 0 R /Parent 73 0 R /Prev 74 0 R /Title (5.2 Inline Cache) +/Dest [ 18 0 R /XYZ 57.02362 324.6236 0 ] /Parent 72 0 R /Prev 74 0 R /Title (4.3 Four Scopes of Feedback) >> endobj 76 0 obj << -/Dest [ 19 0 R /XYZ 57.02362 391.8236 0 ] /Parent 73 0 R /Prev 75 0 R /Title (5.3 Constant Folding) +/Count 3 /Dest [ 19 0 R /XYZ 57.02362 765.0236 0 ] /First 77 0 R /Last 79 0 R /Next 80 0 R /Parent 65 0 R + /Prev 72 0 R /Title (5. Optimizations) >> endobj 77 0 obj << -/Count 5 /Dest [ 19 0 R /XYZ 57.02362 231.8236 0 ] /First 78 0 R /Last 82 0 R /Next 83 0 R /Parent 62 0 R - /Prev 73 0 R /Title (6. Benchmarks: Three Evaluators vs CPython) +/Dest [ 19 0 R /XYZ 57.02362 737.8236 0 ] /Next 78 0 R /Parent 76 0 R /Title (5.1 Peephole Optimizer) >> endobj 78 0 obj << -/Dest [ 20 0 R /XYZ 57.02362 607.0236 0 ] /Next 79 0 R /Parent 77 0 R /Title (6.1 Raw Results) +/Dest [ 19 0 R /XYZ 57.02362 591.8236 0 ] /Next 79 0 R /Parent 76 0 R /Prev 77 0 R /Title (5.2 Inline Cache) >> endobj 79 0 obj << -/Dest [ 20 0 R /XYZ 57.02362 341.0236 0 ] /Next 80 0 R /Parent 77 0 R /Prev 78 0 R /Title (6.2 Analysis) +/Dest [ 19 0 R /XYZ 57.02362 391.8236 0 ] /Parent 76 0 R /Prev 78 0 R /Title (5.3 Constant Folding) >> endobj 80 0 obj << -/Dest [ 20 0 R /XYZ 57.02362 135.0236 0 ] /Next 81 0 R /Parent 77 0 R /Prev 79 0 R /Title (6.3 What the Benchmarks Test) +/Count 8 /Dest [ 19 0 R /XYZ 57.02362 231.8236 0 ] /First 81 0 R /Last 86 0 R /Next 89 0 R /Parent 65 0 R + /Prev 76 0 R /Title (6. Benchmarks: Three Evaluators vs CPython) >> endobj 81 0 obj << -/Dest [ 25 0 R /XYZ 57.02362 649.0236 0 ] /Next 82 0 R /Parent 77 0 R /Prev 80 0 R /Title (6.4 Three Implementations Head-to-Head \(i5-8350U\)) +/Dest [ 20 0 R /XYZ 57.02362 571.0236 0 ] /Next 82 0 R /Parent 80 0 R /Title (6.1 Raw Results) >> endobj 82 0 obj << -/Dest [ 26 0 R /XYZ 57.02362 703.0236 0 ] /Parent 77 0 R /Prev 81 0 R /Title (6.5 Native Container Primitives: Moving Hot Loops Into Asm) +/Dest [ 20 0 R /XYZ 57.02362 305.0236 0 ] /Next 83 0 R /Parent 80 0 R /Prev 81 0 R /Title (6.2 Analysis) >> endobj 83 0 obj << -/Count 7 /Dest [ 26 0 R /XYZ 57.02362 259.0236 0 ] /First 84 0 R /Last 90 0 R /Next 91 0 R /Parent 62 0 R - /Prev 77 0 R /Title (7. Portal: Feedback Across Time) +/Dest [ 20 0 R /XYZ 57.02362 99.02362 0 ] /Next 84 0 R /Parent 80 0 R /Prev 82 0 R /Title (6.3 What the Benchmarks Test) >> endobj 84 0 obj << -/Dest [ 28 0 R /XYZ 57.02362 765.0236 0 ] /Next 85 0 R /Parent 83 0 R /Title (7.1 S-Expression Portal \204 the Portable One) +/Dest [ 25 0 R /XYZ 57.02362 613.0236 0 ] /Next 85 0 R /Parent 80 0 R /Prev 83 0 R /Title (6.4 Three Implementations Head-to-Head \(i5-8350U\)) >> endobj 85 0 obj << -/Dest [ 28 0 R /XYZ 57.02362 523.8236 0 ] /Next 86 0 R /Parent 83 0 R /Prev 84 0 R /Title (7.2 Cross-Implementation Exchange Matrix) +/Dest [ 26 0 R /XYZ 57.02362 655.0236 0 ] /Next 86 0 R /Parent 80 0 R /Prev 84 0 R /Title (6.5 Native Container Primitives: Moving Hot Loops Into Asm) >> endobj 86 0 obj << -/Dest [ 28 0 R /XYZ 57.02362 323.8236 0 ] /Next 87 0 R /Parent 83 0 R /Prev 85 0 R /Title (7.3 JSON Portal \204 Graph-Aware, Continuation-Preserving) +/Count 2 /Dest [ 26 0 R /XYZ 57.02362 215.0236 0 ] /First 87 0 R /Last 88 0 R /Parent 80 0 R /Prev 85 0 R + /Title (6.6 Memory Management and the Meta-GC) >> endobj 87 0 obj << -/Dest [ 29 0 R /XYZ 57.02362 739.0236 0 ] /Next 88 0 R /Parent 83 0 R /Prev 86 0 R /Title (7.4 Binary Heap Dump \204 the Fast One) +/Dest [ 28 0 R /XYZ 57.02362 585.0236 0 ] /Next 88 0 R /Parent 86 0 R /Title (6.6.1 Meta-GC: Arena Fast Path with Mark-Phase Verifier) >> endobj 88 0 obj << -/Dest [ 29 0 R /XYZ 57.02362 487.0236 0 ] /Next 89 0 R /Parent 83 0 R /Prev 87 0 R /Title (7.5 Cross-Process Benchmarks) +/Dest [ 29 0 R /XYZ 57.02362 765.0236 0 ] /Parent 86 0 R /Prev 87 0 R /Title (6.6.2 What the Control Group Tells Us) >> endobj 89 0 obj << -/Dest [ 29 0 R /XYZ 57.02362 173.0236 0 ] /Next 90 0 R /Parent 83 0 R /Prev 88 0 R /Title (7.6 Mismatch Cases: Graceful Degradation) +/Count 7 /Dest [ 29 0 R /XYZ 57.02362 543.0236 0 ] /First 90 0 R /Last 96 0 R /Next 97 0 R /Parent 65 0 R + /Prev 80 0 R /Title (7. Portal: Feedback Across Time) >> endobj 90 0 obj << -/Dest [ 30 0 R /XYZ 57.02362 601.0236 0 ] /Parent 83 0 R /Prev 89 0 R /Title (7.7 Use Case: Distributed Primality Testing) +/Dest [ 29 0 R /XYZ 57.02362 339.8236 0 ] /Next 91 0 R /Parent 89 0 R /Title (7.1 S-Expression Portal \204 the Portable One) >> endobj 91 0 obj << -/Count 6 /Dest [ 30 0 R /XYZ 57.02362 400.2236 0 ] /First 92 0 R /Last 97 0 R /Next 98 0 R /Parent 62 0 R - /Prev 83 0 R /Title (8. The EML Universality Proof) +/Dest [ 29 0 R /XYZ 57.02362 98.62362 0 ] /Next 92 0 R /Parent 89 0 R /Prev 90 0 R /Title (7.2 Cross-Implementation Exchange Matrix) >> endobj 92 0 obj << -/Dest [ 30 0 R /XYZ 57.02362 323.0236 0 ] /Next 93 0 R /Parent 91 0 R /Title (8.1 The Operator) +/Dest [ 31 0 R /XYZ 57.02362 589.0236 0 ] /Next 93 0 R /Parent 89 0 R /Prev 91 0 R /Title (7.3 JSON Portal \204 Graph-Aware, Continuation-Preserving) >> endobj 93 0 obj << -/Dest [ 30 0 R /XYZ 57.02362 246.2236 0 ] /Next 94 0 R /Parent 91 0 R /Prev 92 0 R /Title (8.2 Stage 1: Core Functions \(Depth 1--3\)) +/Dest [ 31 0 R /XYZ 57.02362 302.2236 0 ] /Next 94 0 R /Parent 89 0 R /Prev 92 0 R /Title (7.4 Binary Heap Dump \204 the Fast One) >> endobj 94 0 obj << -/Dest [ 31 0 R /XYZ 57.02362 765.0236 0 ] /Next 95 0 R /Parent 91 0 R /Prev 93 0 R /Title (8.3 Stage 2: Arithmetic) +/Dest [ 32 0 R /XYZ 57.02362 765.0236 0 ] /Next 95 0 R /Parent 89 0 R /Prev 93 0 R /Title (7.5 Cross-Process Benchmarks) >> endobj 95 0 obj << -/Dest [ 31 0 R /XYZ 57.02362 650.6236 0 ] /Next 96 0 R /Parent 91 0 R /Prev 94 0 R /Title (8.4 Stage 3: Complex Plane Access) +/Dest [ 32 0 R /XYZ 57.02362 451.0236 0 ] /Next 96 0 R /Parent 89 0 R /Prev 94 0 R /Title (7.6 Mismatch Cases: Graceful Degradation) >> endobj 96 0 obj << -/Dest [ 31 0 R /XYZ 57.02362 542.6236 0 ] /Next 97 0 R /Parent 91 0 R /Prev 95 0 R /Title (8.5 Stage 4: Trigonometry via Euler) +/Dest [ 33 0 R /XYZ 57.02362 765.0236 0 ] /Parent 89 0 R /Prev 95 0 R /Title (7.7 Use Case: Distributed Primality Testing) >> endobj 97 0 obj << -/Dest [ 31 0 R /XYZ 57.02362 446.6236 0 ] /Parent 91 0 R /Prev 96 0 R /Title (8.6 Verification & Friction Analysis) +/Count 6 /Dest [ 33 0 R /XYZ 57.02362 564.2236 0 ] /First 98 0 R /Last 103 0 R /Next 104 0 R /Parent 65 0 R + /Prev 89 0 R /Title (8. The EML Universality Proof) >> endobj 98 0 obj << -/Dest [ 34 0 R /XYZ 57.02362 765.0236 0 ] /Next 99 0 R /Parent 62 0 R /Prev 91 0 R /Title (9. Language Coverage) +/Dest [ 33 0 R /XYZ 57.02362 487.0236 0 ] /Next 99 0 R /Parent 97 0 R /Title (8.1 The Operator) >> endobj 99 0 obj << -/Dest [ 34 0 R /XYZ 57.02362 515.8236 0 ] /Next 100 0 R /Parent 62 0 R /Prev 98 0 R /Title (10. Relationship to Companion Papers) +/Dest [ 33 0 R /XYZ 57.02362 410.2236 0 ] /Next 100 0 R /Parent 97 0 R /Prev 98 0 R /Title (8.2 Stage 1: Core Functions \(Depth 1--3\)) >> endobj 100 0 obj << -/Count 6 /Dest [ 34 0 R /XYZ 57.02362 266.6236 0 ] /First 101 0 R /Last 106 0 R /Next 107 0 R /Parent 62 0 R - /Prev 99 0 R /Title (11. Four Implementation Tiers, One Language) +/Dest [ 33 0 R /XYZ 57.02362 290.2236 0 ] /Next 101 0 R /Parent 97 0 R /Prev 99 0 R /Title (8.3 Stage 2: Arithmetic) >> endobj 101 0 obj << -/Dest [ 39 0 R /XYZ 57.02362 313.0236 0 ] /Next 102 0 R /Parent 100 0 R /Title (11.1 Test Coverage) +/Dest [ 33 0 R /XYZ 57.02362 175.8236 0 ] /Next 102 0 R /Parent 97 0 R /Prev 100 0 R /Title (8.4 Stage 3: Complex Plane Access) >> endobj 102 0 obj << -/Dest [ 39 0 R /XYZ 57.02362 107.0236 0 ] /Next 103 0 R /Parent 100 0 R /Prev 101 0 R /Title (11.2 File I/O Parity) +/Dest [ 34 0 R /XYZ 57.02362 765.0236 0 ] /Next 103 0 R /Parent 97 0 R /Prev 101 0 R /Title (8.5 Stage 4: Trigonometry via Euler) >> endobj 103 0 obj << -/Dest [ 40 0 R /XYZ 57.02362 505.0236 0 ] /Next 104 0 R /Parent 100 0 R /Prev 102 0 R /Title (11.3 Sockets: One HTTP Server, Three Runtimes) +/Dest [ 34 0 R /XYZ 57.02362 669.0236 0 ] /Parent 97 0 R /Prev 102 0 R /Title (8.6 Verification & Friction Analysis) >> endobj 104 0 obj << -/Dest [ 43 0 R /XYZ 57.02362 540.4202 0 ] /Next 105 0 R /Parent 100 0 R /Prev 103 0 R /Title (11.4 S-expressions over Sockets: RPC, REPL, and Chains) +/Dest [ 35 0 R /XYZ 57.02362 272.2236 0 ] /Next 105 0 R /Parent 65 0 R /Prev 97 0 R /Title (9. Language Coverage) >> endobj 105 0 obj << -/Dest [ 44 0 R /XYZ 57.02362 685.0236 0 ] /Next 106 0 R /Parent 100 0 R /Prev 104 0 R /Title (11.5 Portal over HTTP: State Transfer Between Machines) +/Dest [ 37 0 R /XYZ 57.02362 723.0236 0 ] /Next 106 0 R /Parent 65 0 R /Prev 104 0 R /Title (10. Relationship to Companion Papers) >> endobj 106 0 obj << -/Dest [ 44 0 R /XYZ 57.02362 136.6236 0 ] /Parent 100 0 R /Prev 105 0 R /Title (11.6 heap-snapshot: The Arena Escape Hatch) +/Count 6 /Dest [ 37 0 R /XYZ 57.02362 473.8236 0 ] /First 107 0 R /Last 112 0 R /Next 113 0 R /Parent 65 0 R + /Prev 105 0 R /Title (11. Four Implementation Tiers, One Language) >> endobj 107 0 obj << -/Count 3 /Dest [ 47 0 R /XYZ 57.02362 497.4236 0 ] /First 108 0 R /Last 110 0 R /Next 111 0 R /Parent 62 0 R - /Prev 100 0 R /Title (12. MOAD Audit: Fixing What We Built) +/Dest [ 42 0 R /XYZ 57.02362 277.0236 0 ] /Next 108 0 R /Parent 106 0 R /Title (11.1 Test Coverage) >> endobj 108 0 obj << -/Dest [ 47 0 R /XYZ 57.02362 210.2236 0 ] /Next 109 0 R /Parent 107 0 R /Title (12.1 MOAD-0001: The Sedimentary Defect in Our Own Code) +/Dest [ 43 0 R /XYZ 57.02362 765.0236 0 ] /Next 109 0 R /Parent 106 0 R /Prev 107 0 R /Title (11.2 File I/O Parity) >> endobj 109 0 obj << -/Dest [ 48 0 R /XYZ 57.02362 284.2236 0 ] /Next 110 0 R /Parent 107 0 R /Prev 108 0 R /Title (12.2 MOAD-0002: The Intertangle in Our Own Design) +/Dest [ 43 0 R /XYZ 57.02362 457.0236 0 ] /Next 110 0 R /Parent 106 0 R /Prev 108 0 R /Title (11.3 Sockets: One HTTP Server, Three Runtimes) >> endobj 110 0 obj << -/Dest [ 51 0 R /XYZ 57.02362 715.0236 0 ] /Parent 107 0 R /Prev 109 0 R /Title (12.3 Our Shared Infrastructure) +/Dest [ 46 0 R /XYZ 57.02362 504.4202 0 ] /Next 111 0 R /Parent 106 0 R /Prev 109 0 R /Title (11.4 S-expressions over Sockets: RPC, REPL, and Chains) >> endobj 111 0 obj << -/Dest [ 51 0 R /XYZ 57.02362 523.0236 0 ] /Next 112 0 R /Parent 62 0 R /Prev 107 0 R /Title (13. Future Work) +/Dest [ 47 0 R /XYZ 57.02362 649.0236 0 ] /Next 112 0 R /Parent 106 0 R /Prev 110 0 R /Title (11.5 Portal over HTTP: State Transfer Between Machines) >> endobj 112 0 obj << -/Dest [ 51 0 R /XYZ 57.02362 267.8236 0 ] /Next 113 0 R /Parent 62 0 R /Prev 111 0 R /Title (14. The Defect in the Model) +/Dest [ 50 0 R /XYZ 57.02362 765.0236 0 ] /Parent 106 0 R /Prev 111 0 R /Title (11.6 heap-snapshot: The Arena Escape Hatch) >> endobj 113 0 obj << -/Dest [ 54 0 R /XYZ 57.02362 297.0236 0 ] /Next 114 0 R /Parent 62 0 R /Prev 112 0 R /Title (Citation) +/Count 3 /Dest [ 50 0 R /XYZ 57.02362 417.4236 0 ] /First 114 0 R /Last 116 0 R /Next 117 0 R /Parent 65 0 R + /Prev 106 0 R /Title (12. MOAD Audit: Fixing What We Built) >> endobj 114 0 obj << -/Dest [ 54 0 R /XYZ 57.02362 215.8236 0 ] /Next 115 0 R /Parent 62 0 R /Prev 113 0 R /Title (References) +/Dest [ 50 0 R /XYZ 57.02362 130.2236 0 ] /Next 115 0 R /Parent 113 0 R /Title (12.1 MOAD-0001: The Sedimentary Defect in Our Own Code) >> endobj 115 0 obj << -/Dest [ 54 0 R /XYZ 57.02362 134.6236 0 ] /Parent 62 0 R /Prev 114 0 R /Title (License) +/Dest [ 51 0 R /XYZ 57.02362 216.2236 0 ] /Next 116 0 R /Parent 113 0 R /Prev 114 0 R /Title (12.2 MOAD-0002: The Intertangle in Our Own Design) >> endobj 116 0 obj << -/Count 27 /Kids [ 11 0 R 12 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 25 0 R 26 0 R - 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 34 0 R 38 0 R 39 0 R 40 0 R 43 0 R - 44 0 R 47 0 R 48 0 R 51 0 R 54 0 R 57 0 R 58 0 R ] /Type /Pages +/Dest [ 54 0 R /XYZ 57.02362 655.0236 0 ] /Parent 113 0 R /Prev 115 0 R /Title (12.3 Our Shared Infrastructure) >> endobj 117 0 obj << +/Dest [ 54 0 R /XYZ 57.02362 463.0236 0 ] /Next 118 0 R /Parent 65 0 R /Prev 113 0 R /Title (13. Future Work) +>> +endobj +118 0 obj +<< +/Dest [ 54 0 R /XYZ 57.02362 207.8236 0 ] /Next 119 0 R /Parent 65 0 R /Prev 117 0 R /Title (14. The Defect in the Model) +>> +endobj +119 0 obj +<< +/Dest [ 57 0 R /XYZ 57.02362 231.0236 0 ] /Next 120 0 R /Parent 65 0 R /Prev 118 0 R /Title (Citation) +>> +endobj +120 0 obj +<< +/Dest [ 57 0 R /XYZ 57.02362 149.8236 0 ] /Next 121 0 R /Parent 65 0 R /Prev 119 0 R /Title (References) +>> +endobj +121 0 obj +<< +/Dest [ 60 0 R /XYZ 57.02362 765.0236 0 ] /Parent 65 0 R /Prev 120 0 R /Title (License) +>> +endobj +122 0 obj +<< +/Count 29 /Kids [ 11 0 R 12 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 25 0 R 26 0 R + 28 0 R 29 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 37 0 R 41 0 R 42 0 R + 43 0 R 46 0 R 47 0 R 50 0 R 51 0 R 54 0 R 57 0 R 60 0 R 61 0 R ] /Type /Pages +>> +endobj +123 0 obj +<< /Length 5064 >> stream @@ -979,19 +1020,19 @@ Q endstream endobj -118 0 obj +124 0 obj << -/Length 7579 +/Length 7846 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 741.0236 cm +1 0 0 1 57.02362 705.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET q -1 0 0 1 6 9 cm +1 0 0 1 6 45 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET @@ -1000,7 +1041,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 14 Tm .214168 Tw 12 TL /F3 10 Tf 0 0 0 rg (Pure x86_64 assembly) Tj /F1 10 Tf ( \227 4,968 lines, 22 KB stripped binary, zero external dependencies, ) Tj /F3 10 Tf (91 builtins) Tj T* 0 Tw (including a full TCP stack, `eval`, and `read-from-string`) Tj /F1 10 Tf (, binary heap-dump portal) Tj T* ET +BT 1 0 0 1 0 50 Tm .032556 Tw 12 TL /F3 10 Tf 0 0 0 rg (Pure x86_64 assembly) Tj /F1 10 Tf ( \227 6,645 lines of GNU assembler \(GAS, AT) Tj (&) Tj (T syntax\), assembled with ) Tj /F5 10 Tf (as) Tj /F1 10 Tf ( and) Tj T* 0 Tw 1.212397 Tw (linked with ) Tj /F5 10 Tf (ld) Tj /F1 10 Tf ( \(both from GNU binutils\), ~22 KB stripped binary \(bump-only build\) / ~25 KB stripped) Tj T* 0 Tw 2.207565 Tw (\(with optional naive mark-sweep GC + meta-GC arena under the ) Tj /F5 10 Tf (GC_NAIVE) Tj /F1 10 Tf ( assemble flag\), zero) Tj T* 0 Tw 2.478031 Tw (external dependencies, ) Tj /F3 10 Tf (95+ builtins including a full TCP stack, `eval`, `read-from-string`, and) Tj T* 0 Tw (native hash-table / hash-set primitives) Tj /F1 10 Tf (, binary heap-dump portal) Tj T* ET Q Q q @@ -1008,95 +1049,95 @@ Q Q Q q -1 0 0 1 57.02362 723.0236 cm +1 0 0 1 57.02362 687.0236 cm Q q -1 0 0 1 57.02362 669.0236 cm +1 0 0 1 57.02362 633.0236 cm q BT 1 0 0 1 0 38 Tm .814168 Tw 12 TL /F1 10 Tf 0 0 0 rg (All three share one interchange format: ) Tj /F3 10 Tf (Scheme source itself) Tj /F1 10 Tf (. An S-expression portal \() Tj /F5 10 Tf (\(define) Tj ( ) Tj (x) Tj ( ) Tj (42\)) Tj /F1 10 Tf (\)) Tj T* 0 Tw .689272 Tw (written by any implementation loads in any other \227 a 3\3273 producer\327consumer matrix, 9/9 cells green. The) Tj T* 0 Tw .134417 Tw (language ) Tj /F4 10 Tf (is) Tj /F1 10 Tf ( the wire protocol. This is not a property we added; it is what a parser has always made possible.) Tj T* 0 Tw (We report it because most systems forget.) Tj T* ET Q Q q -1 0 0 1 57.02362 627.0236 cm +1 0 0 1 57.02362 591.0236 cm q BT 1 0 0 1 0 26 Tm 2.01589 Tw 12 TL /F3 10 Tf 0 0 0 rg (The numbers.) Tj /F1 10 Tf ( The asm implementation saves + resumes 4 variables across two processes in ) Tj /F3 10 Tf (1.5 ms) Tj /F1 10 Tf T* 0 Tw -0.051203 Tw (\(binary portal\) or ) Tj /F3 10 Tf (1.6 ms) Tj /F1 10 Tf ( \(S-expression portal\). Python round-trip on the same task: 260 ms. A 160\327 gap from) Tj T* 0 Tw (the same language, same tests, same wire format.) Tj T* ET Q Q q -1 0 0 1 57.02362 549.0236 cm +1 0 0 1 57.02362 513.0236 cm q BT 1 0 0 1 0 62 Tm 3.009029 Tw 12 TL /F3 10 Tf 0 0 0 rg (Web server, same story.) Tj /F1 10 Tf ( The asm implementation ships a TCP stack \() Tj /F5 10 Tf (tcp-listen) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (tcp-accept) Tj /F1 10 Tf (,) Tj T* 0 Tw 1.01985 Tw /F5 10 Tf (tcp-connect) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (tcp-recv) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (tcp-send) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (tcp-close) Tj /F1 10 Tf (\) and a portable 70-line HTTP/1.0 handler in Scheme.) Tj T* 0 Tw .40135 Tw (The same ) Tj /F5 10 Tf (.lsp) Tj /F1 10 Tf ( runs identically in all three impls. Asm server + asm client: ) Tj /F3 10 Tf (2,994 req/s) Tj /F1 10 Tf ( on a 1 KB body, 22) Tj T* 0 Tw 1.003647 Tw (KB binary, zero libc, seven Linux syscalls plus the socket family. For comparison: busybox httpd \(2.1 MB\)) Tj T* 0 Tw .109314 Tw (and ) Tj /F5 10 Tf (python3) Tj ( ) Tj (-m) Tj ( ) Tj (http.server) Tj /F1 10 Tf ( \(8 MB interpreter\) hit the same benchmark at 382 req/s under a curl client) Tj T* 0 Tw (and ~2,400 req/s under an in-process client.) Tj T* ET Q Q q -1 0 0 1 57.02362 471.0236 cm +1 0 0 1 57.02362 435.0236 cm q BT 1 0 0 1 0 62 Tm 3.182556 Tw 12 TL /F3 10 Tf 0 0 0 rg (S-expressions over sockets.) Tj /F1 10 Tf ( The wire protocol for a 90-line RPC server is one Scheme form per) Tj T* 0 Tw 1.692397 Tw (connection. With ) Tj /F5 10 Tf (read-from-string) Tj /F1 10 Tf ( and ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf ( added to all three impls \(89 bytes of asm for ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf (, a) Tj T* 0 Tw .615304 Tw (20-line asm reader swap for ) Tj /F5 10 Tf (read-from-string) Tj /F1 10 Tf (\), a transparent byte-forwarding relay composes arbitrary) Tj T* 0 Tw -0.093771 Tw (chains: a Python client can reach an asm backend through a C relay and a Python relay, four runtimes strung) Tj T* 0 Tw .231223 Tw (together without any format translation between hops. Each relay adds ~650 \265s/request on the same laptop.) Tj T* 0 Tw (The language is the envelope.) Tj T* ET Q Q q -1 0 0 1 57.02362 417.0236 cm +1 0 0 1 57.02362 381.0236 cm q BT 1 0 0 1 0 38 Tm 1.342739 Tw 12 TL /F1 10 Tf 0 0 0 rg (975 verified assertions pass identically across the three implementations \(571 Python unit, 132 asm, 189) Tj T* 0 Tw 3.349873 Tw (shared Python+C functional, 83 C unit\). Every implementation consumes every format it can reach;) Tj T* 0 Tw .270556 Tw (mismatch cases \(wrong format, truncated input, missing file, corrupt header\) degrade gracefully with ) Tj /F5 10 Tf (#f) Tj /F1 10 Tf ( or a) Tj T* 0 Tw (clean error.) Tj T* ET Q Q q -1 0 0 1 57.02362 363.0236 cm +1 0 0 1 57.02362 327.0236 cm q BT 1 0 0 1 0 38 Tm .352397 Tw 12 TL /F1 10 Tf 0 0 0 rg (The paper further presents the EML universality proof: a single operator ) Tj /F5 10 Tf (eml\(x,) Tj ( ) Tj (y\)) Tj ( ) Tj (=) Tj ( ) Tj (exp\(x\)) Tj ( ) Tj (-) Tj ( ) Tj (ln\(y\)) Tj /F1 10 Tf T* 0 Tw .548453 Tw (with the constant 1 generates all elementary functions \(exp, ln, arithmetic, negation, complex plane access,) Tj T* 0 Tw -0.05811 Tw (trigonometry\). Verified numerically in Python, verified in Lumbda's own bytecode, & proven formally in Lean 4) Tj T* 0 Tw (with zero ) Tj /F5 10 Tf (sorry) Tj /F1 10 Tf (.) Tj T* ET Q Q q -1 0 0 1 57.02362 321.0236 cm +1 0 0 1 57.02362 285.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .70189 Tw (Feedback is the primitive. Continuations are its mechanism in time. Portals are its mechanism across time.) Tj T* 0 Tw -0.095138 Tw (S-expressions are its mechanism across implementations. Sockets are its mechanism across machines. One) Tj T* 0 Tw (file is the proof \227 by three translations.) Tj T* ET Q Q q -1 0 0 1 57.02362 289.8236 cm +1 0 0 1 57.02362 253.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (1. The Problem: Interpreters That Cannot Feed Back) Tj T* ET Q Q q -1 0 0 1 57.02362 221.8236 cm +1 0 0 1 57.02362 185.8236 cm q BT 1 0 0 1 0 50 Tm 1.454556 Tw 12 TL /F1 10 Tf 0 0 0 rg (Most language implementations treat control flow as a tree of special cases. ) Tj /F5 10 Tf (if) Tj /F1 10 Tf ( branches. ) Tj /F5 10 Tf (while) Tj /F1 10 Tf ( loops.) Tj T* 0 Tw .47989 Tw /F5 10 Tf (return) Tj /F1 10 Tf ( exits. ) Tj /F5 10 Tf (try/catch) Tj /F1 10 Tf ( unwinds. Each form carries its own implementation, its own edge cases, its own) Tj T* 0 Tw 1.451147 Tw (interaction with the call stack. When you need a pattern that crosses these boundaries \(a generator that) Tj T* 0 Tw 3.669873 Tw (yields mid-loop, a coroutine that resumes from a checkpoint, a computation that migrates between) Tj T* 0 Tw (machines\), the tower of special cases collapses.) Tj T* ET Q Q q -1 0 0 1 57.02362 167.8236 cm +1 0 0 1 57.02362 131.8236 cm q BT 1 0 0 1 0 38 Tm .104917 Tw 12 TL /F1 10 Tf 0 0 0 rg (The insight: every control flow pattern is a special case of feedback. A loop feeds the tail position back to the) Tj T* 0 Tw 1.658797 Tw (head. A generator feeds a value out & a resumption point in. An exception feeds control to the nearest) Tj T* 0 Tw 1.518647 Tw (handler. A checkpoint feeds the entire machine state to storage. If the language exposes feedback as a) Tj T* 0 Tw (first-class primitive, all these patterns compose without special cases.) Tj T* ET Q Q q -1 0 0 1 57.02362 113.8236 cm +1 0 0 1 57.02362 77.82362 cm q BT 1 0 0 1 0 38 Tm 5.742038 Tw 12 TL /F1 10 Tf 0 0 0 rg (Scheme discovered this in 1975 with ) Tj /F5 10 Tf (call-with-current-continuation) Tj /F1 10 Tf (. But most Scheme) Tj T* 0 Tw .086835 Tw (implementations compromise: they limit continuations to escape-only, implement them via ) Tj /F5 10 Tf (setjmp) Tj /F1 10 Tf (/) Tj /F5 10 Tf (longjmp) Tj /F1 10 Tf T* 0 Tw .712256 Tw (on the C stack, or require CPS transformation that obscures the source. Lumbda takes a different path: an) Tj T* 0 Tw (explicit frame stack that makes continuations a data structure, not a stack manipulation trick.) Tj T* ET Q Q + +endstream +endobj +125 0 obj +<< +/Length 4740 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 82.62362 cm +1 0 0 1 57.02362 751.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (2. Architecture: One File, Two Evaluators) Tj T* ET Q Q q -1 0 0 1 57.02362 66.62362 cm +1 0 0 1 57.02362 735.8236 cm Q - -endstream -endobj -119 0 obj -<< -/Length 5277 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 367.445 cm +1 0 0 1 57.02362 338.245 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1119,54 +1160,54 @@ Q Q Q q -1 0 0 1 57.02362 359.445 cm +1 0 0 1 57.02362 330.245 cm Q q -1 0 0 1 57.02362 341.445 cm +1 0 0 1 57.02362 312.245 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Lumbda implements two evaluation strategies in a single 3,743-line Python file:) Tj T* ET Q Q q -1 0 0 1 57.02362 299.445 cm +1 0 0 1 57.02362 270.245 cm q BT 1 0 0 1 0 26 Tm 1.151411 Tw 12 TL /F3 10 Tf 0 0 0 rg (Tree-walking interpreter) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (leval) Tj /F1 10 Tf (\): The default mode. Walks the AST directly, handles all forms including) Tj T* 0 Tw 3.328196 Tw (macro definitions, record types, & dynamic features. Suitable for interactive development & complex) Tj T* 0 Tw (metaprogramming.) Tj T* ET Q Q q -1 0 0 1 57.02362 257.445 cm +1 0 0 1 57.02362 228.245 cm q BT 1 0 0 1 0 26 Tm .557565 Tw 12 TL /F3 10 Tf 0 0 0 rg (Bytecode compiler + VM) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (_bc) Tj /F1 10 Tf ( + ) Tj /F5 10 Tf (_vm_loop) Tj /F1 10 Tf (\): Enabled with ) Tj /F5 10 Tf (--fast) Tj /F1 10 Tf ( or ) Tj /F5 10 Tf (\(auto-compile!) Tj ( ) Tj (#t\)) Tj /F1 10 Tf (. Compiles) Tj T* 0 Tw .84589 Tw (Scheme expressions to a stack-based bytecode, then executes on a virtual machine with an explicit frame) Tj T* 0 Tw (stack. Achieves 7--19x speedups on recursive & iterative workloads.) Tj T* ET Q Q q -1 0 0 1 57.02362 203.445 cm +1 0 0 1 57.02362 174.245 cm q BT 1 0 0 1 0 38 Tm 1.065596 Tw 12 TL /F1 10 Tf 0 0 0 rg (Both evaluators share the same type system, environment model, & built-in function library. The bytecode) Tj T* 0 Tw 1.668334 Tw (compiler handles: ) Tj /F5 10 Tf (if) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (begin) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (and) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (or) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (when) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (unless) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (cond) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (define) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (set!) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (lambda) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (let) Tj /F1 10 Tf (, named-let,) Tj T* 0 Tw 1.459882 Tw /F5 10 Tf (let*) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (letrec) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (do) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (call/cc) Tj /F1 10 Tf (, & function calls with tail-call optimization. Macros expand at compile time.) Tj T* 0 Tw (Forms the compiler cannot handle fall back to the interpreter via ) Tj /F5 10 Tf (OP_EVAL) Tj /F1 10 Tf (.) Tj T* ET Q Q q -1 0 0 1 57.02362 177.445 cm +1 0 0 1 57.02362 148.245 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (2.1 Type System) Tj T* ET Q Q q -1 0 0 1 57.02362 159.445 cm +1 0 0 1 57.02362 130.245 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Core types stay minimal:) Tj T* ET Q Q q -1 0 0 1 57.02362 153.445 cm +1 0 0 1 57.02362 124.245 cm Q q -1 0 0 1 57.02362 153.445 cm +1 0 0 1 57.02362 124.245 cm Q q -1 0 0 1 57.02362 141.445 cm +1 0 0 1 57.02362 112.245 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1188,10 +1229,10 @@ Q Q Q q -1 0 0 1 57.02362 135.445 cm +1 0 0 1 57.02362 106.245 cm Q q -1 0 0 1 57.02362 123.445 cm +1 0 0 1 57.02362 94.24503 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1213,10 +1254,10 @@ Q Q Q q -1 0 0 1 57.02362 117.445 cm +1 0 0 1 57.02362 88.24503 cm Q q -1 0 0 1 57.02362 105.445 cm +1 0 0 1 57.02362 76.24503 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1238,64 +1279,14 @@ Q Q Q q -1 0 0 1 57.02362 99.44503 cm -Q -q -1 0 0 1 57.02362 87.44503 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Proc) Tj /F1 10 Tf (: Interpreted procedure \(params, rest, body, env, name\)) Tj T* ET -Q -Q -q -Q -Q -Q -q -1 0 0 1 57.02362 81.44503 cm -Q -q -1 0 0 1 57.02362 69.44503 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (CompiledProc) Tj /F1 10 Tf (: Bytecode procedure \(CodeObj, params, rest, env, name\)) Tj T* ET -Q -Q -q -Q -Q -Q -q -1 0 0 1 57.02362 63.44503 cm +1 0 0 1 57.02362 70.24503 cm Q endstream endobj -120 0 obj +126 0 obj << -/Length 6896 +/Length 6876 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET @@ -1314,7 +1305,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (FullCont) Tj /F1 10 Tf (: First-class continuation \(frames, stack, ip, instrs, env, vm_id\)) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Proc) Tj /F1 10 Tf (: Interpreted procedure \(params, rest, body, env, name\)) Tj T* ET Q Q q @@ -1339,7 +1330,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Macro) Tj /F1 10 Tf (: Wraps a transformer \(Proc or _SyntaxTransformer\)) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (CompiledProc) Tj /F1 10 Tf (: Bytecode procedure \(CodeObj, params, rest, env, name\)) Tj T* ET Q Q q @@ -1364,6 +1355,56 @@ Q q 1 0 0 1 23 -3 cm q +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (FullCont) Tj /F1 10 Tf (: First-class continuation \(frames, stack, ip, instrs, env, vm_id\)) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 711.0236 cm +Q +q +1 0 0 1 57.02362 699.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Macro) Tj /F1 10 Tf (: Wraps a transformer \(Proc or _SyntaxTransformer\)) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 693.0236 cm +Q +q +1 0 0 1 57.02362 681.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Env) Tj /F1 10 Tf (: Lexical environment chain \(bindings dict, parent pointer, global pointer\)) Tj T* ET Q Q @@ -1372,34 +1413,34 @@ Q Q Q q -1 0 0 1 57.02362 699.0236 cm +1 0 0 1 57.02362 663.0236 cm Q q -1 0 0 1 57.02362 669.0236 cm +1 0 0 1 57.02362 633.0236 cm q BT 1 0 0 1 0 14 Tm .618556 Tw 12 TL /F1 10 Tf 0 0 0 rg (Exact rational arithmetic uses Python's ) Tj /F5 10 Tf (Fraction) Tj /F1 10 Tf ( type. ) Tj /F5 10 Tf (\(/) Tj ( ) Tj (1) Tj ( ) Tj (3\)) Tj /F1 10 Tf ( evaluates to ) Tj /F5 10 Tf (1/3) Tj /F1 10 Tf (, not ) Tj /F5 10 Tf (0.333...) Tj /F1 10 Tf (. Literal) Tj T* 0 Tw /F5 10 Tf (1/3) Tj /F1 10 Tf ( syntax parses directly to rationals.) Tj T* ET Q Q q -1 0 0 1 57.02362 643.0236 cm +1 0 0 1 57.02362 607.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (2.2 The Bytecode) Tj T* ET Q Q q -1 0 0 1 57.02362 625.0236 cm +1 0 0 1 57.02362 589.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (The compiler emits instructions as ) Tj /F5 10 Tf (\(opcode,) Tj ( ) Tj (operand\)) Tj /F1 10 Tf ( tuples into a ) Tj /F5 10 Tf (CodeObj) Tj /F1 10 Tf (:) Tj T* ET Q Q q -1 0 0 1 57.02362 607.0236 cm +1 0 0 1 57.02362 571.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Core opcodes) Tj /F1 10 Tf ( \(20\):) Tj T* ET Q Q q -1 0 0 1 57.02362 393.8236 cm +1 0 0 1 57.02362 357.8236 cm q q 1 0 0 1 0 0 cm @@ -1419,13 +1460,13 @@ Q Q Q q -1 0 0 1 57.02362 373.8236 cm +1 0 0 1 57.02362 337.8236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Specialized opcodes) Tj /F1 10 Tf ( \(20\):) Tj T* ET Q Q q -1 0 0 1 57.02362 295.0236 cm +1 0 0 1 57.02362 259.0236 cm q q 1 0 0 1 0 0 cm @@ -1446,33 +1487,33 @@ Q Q Q q -1 0 0 1 57.02362 263.0236 cm +1 0 0 1 57.02362 227.0236 cm q BT 1 0 0 1 0 14 Tm .370522 Tw 12 TL /F1 10 Tf 0 0 0 rg (Specialized opcodes avoid function call overhead for hot builtins. ) Tj /F5 10 Tf (\(+) Tj ( ) Tj (x) Tj ( ) Tj (1\)) Tj /F1 10 Tf ( compiles to ) Tj /F5 10 Tf (OP_ADD1) Tj /F1 10 Tf ( instead of) Tj T* 0 Tw /F5 10 Tf (OP_LOOKUP) Tj ( ) Tj ('+') Tj ( ) Tj (/) Tj ( ) Tj (OP_CONST) Tj ( ) Tj (1) Tj ( ) Tj (/) Tj ( ) Tj (OP_CALL) Tj /F1 10 Tf (.) Tj T* ET Q Q q -1 0 0 1 57.02362 231.8236 cm +1 0 0 1 57.02362 195.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (3. The Explicit Frame Stack) Tj T* ET Q Q q -1 0 0 1 57.02362 211.8236 cm +1 0 0 1 57.02362 175.8236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (This is the architectural decision that makes everything else possible.) Tj T* ET Q Q q -1 0 0 1 57.02362 193.8236 cm +1 0 0 1 57.02362 157.8236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Instead of using Python's call stack for Scheme function calls, the VM maintains its own frame stack:) Tj T* ET Q Q q -1 0 0 1 57.02362 163.0236 cm +1 0 0 1 57.02362 127.0236 cm q q 1 0 0 1 0 0 cm @@ -1493,19 +1534,19 @@ Q Q Q q -1 0 0 1 57.02362 143.0236 cm +1 0 0 1 57.02362 107.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (When ) Tj /F5 10 Tf (OP_CALL) Tj /F1 10 Tf ( executes:) Tj T* ET Q Q q -1 0 0 1 57.02362 137.0236 cm +1 0 0 1 57.02362 101.0236 cm Q q -1 0 0 1 57.02362 137.0236 cm +1 0 0 1 57.02362 101.0236 cm Q q -1 0 0 1 57.02362 125.0236 cm +1 0 0 1 57.02362 89.02362 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1528,10 +1569,10 @@ Q Q Q q -1 0 0 1 57.02362 119.0236 cm +1 0 0 1 57.02362 83.02362 cm Q q -1 0 0 1 57.02362 107.0236 cm +1 0 0 1 57.02362 71.02362 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1553,10 +1594,19 @@ Q Q Q q -1 0 0 1 57.02362 101.0236 cm +1 0 0 1 57.02362 65.02362 cm Q + +endstream +endobj +127 0 obj +<< +/Length 8861 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 89.02362 cm +1 0 0 1 57.02362 753.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1578,10 +1628,10 @@ Q Q Q q -1 0 0 1 57.02362 83.02362 cm +1 0 0 1 57.02362 747.0236 cm Q q -1 0 0 1 57.02362 71.02362 cm +1 0 0 1 57.02362 735.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1604,19 +1654,10 @@ Q Q Q q -1 0 0 1 57.02362 65.02362 cm +1 0 0 1 57.02362 729.0236 cm Q - -endstream -endobj -121 0 obj -<< -/Length 8468 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 753.0236 cm +1 0 0 1 57.02362 717.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1639,22 +1680,22 @@ Q Q Q q -1 0 0 1 57.02362 753.0236 cm +1 0 0 1 57.02362 717.0236 cm Q q -1 0 0 1 57.02362 735.0236 cm +1 0 0 1 57.02362 699.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (When ) Tj /F5 10 Tf (OP_RETURN) Tj /F1 10 Tf ( executes:) Tj T* ET Q Q q -1 0 0 1 57.02362 729.0236 cm +1 0 0 1 57.02362 693.0236 cm Q q -1 0 0 1 57.02362 729.0236 cm +1 0 0 1 57.02362 693.0236 cm Q q -1 0 0 1 57.02362 717.0236 cm +1 0 0 1 57.02362 681.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1676,10 +1717,10 @@ Q Q Q q -1 0 0 1 57.02362 711.0236 cm +1 0 0 1 57.02362 675.0236 cm Q q -1 0 0 1 57.02362 699.0236 cm +1 0 0 1 57.02362 663.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1701,16 +1742,16 @@ Q Q Q q -1 0 0 1 57.02362 699.0236 cm +1 0 0 1 57.02362 663.0236 cm Q q -1 0 0 1 57.02362 669.0236 cm +1 0 0 1 57.02362 633.0236 cm q BT 1 0 0 1 0 14 Tm 2.331529 Tw 12 TL /F3 10 Tf 0 0 0 rg (Tail-call optimization) Tj /F1 10 Tf ( follows naturally: ) Tj /F5 10 Tf (OP_TAIL_CALL) Tj /F1 10 Tf ( skips step 2. It replaces the current activation) Tj T* 0 Tw (record instead of pushing a new one. Tail-recursive loops of arbitrary depth consume constant memory.) Tj T* ET Q Q q -1 0 0 1 57.02362 628.6236 cm +1 0 0 1 57.02362 592.6236 cm q q 1 0 0 1 0 0 cm @@ -1731,26 +1772,26 @@ Q Q Q q -1 0 0 1 57.02362 584.6236 cm +1 0 0 1 57.02362 548.6236 cm q BT 1 0 0 1 0 26 Tm .144609 Tw 12 TL /F3 10 Tf 0 0 0 rg (Why this matters) Tj /F1 10 Tf (: Python's default recursion limit is 1,000 frames. A Scheme that uses the Python stack for) Tj T* 0 Tw -0.073228 Tw (Scheme calls inherits this limit. The explicit frame stack removes it. Lumbda can recurse 50,000 deep without) Tj T* 0 Tw (difficulty, limited only by available memory.) Tj T* ET Q Q q -1 0 0 1 57.02362 553.4236 cm +1 0 0 1 57.02362 517.4236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (4. Continuations: Feedback as a Data Structure) Tj T* ET Q Q q -1 0 0 1 57.02362 533.4236 cm +1 0 0 1 57.02362 497.4236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (With an explicit frame stack, capturing a continuation becomes copying a data structure:) Tj T* ET Q Q q -1 0 0 1 57.02362 445.0236 cm +1 0 0 1 57.02362 409.0236 cm q q 1 0 0 1 0 0 cm @@ -1771,19 +1812,19 @@ Q Q Q q -1 0 0 1 57.02362 425.0236 cm +1 0 0 1 57.02362 389.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (When ) Tj /F5 10 Tf (OP_CALL_CC) Tj /F1 10 Tf ( executes:) Tj T* ET Q Q q -1 0 0 1 57.02362 419.0236 cm +1 0 0 1 57.02362 383.0236 cm Q q -1 0 0 1 57.02362 419.0236 cm +1 0 0 1 57.02362 383.0236 cm Q q -1 0 0 1 57.02362 395.0236 cm +1 0 0 1 57.02362 359.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1805,10 +1846,10 @@ Q Q Q q -1 0 0 1 57.02362 389.0236 cm +1 0 0 1 57.02362 353.0236 cm Q q -1 0 0 1 57.02362 377.0236 cm +1 0 0 1 57.02362 341.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1830,10 +1871,10 @@ Q Q Q q -1 0 0 1 57.02362 371.0236 cm +1 0 0 1 57.02362 335.0236 cm Q q -1 0 0 1 57.02362 359.0236 cm +1 0 0 1 57.02362 323.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1855,10 +1896,10 @@ Q Q Q q -1 0 0 1 57.02362 353.0236 cm +1 0 0 1 57.02362 317.0236 cm Q q -1 0 0 1 57.02362 341.0236 cm +1 0 0 1 57.02362 305.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1880,10 +1921,10 @@ Q Q Q q -1 0 0 1 57.02362 335.0236 cm +1 0 0 1 57.02362 299.0236 cm Q q -1 0 0 1 57.02362 323.0236 cm +1 0 0 1 57.02362 287.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1906,23 +1947,23 @@ Q Q Q q -1 0 0 1 57.02362 323.0236 cm +1 0 0 1 57.02362 287.0236 cm Q q -1 0 0 1 57.02362 305.0236 cm +1 0 0 1 57.02362 269.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (When a continuation is invoked:) Tj T* ET Q Q q -1 0 0 1 57.02362 299.0236 cm +1 0 0 1 57.02362 263.0236 cm Q q -1 0 0 1 57.02362 299.0236 cm +1 0 0 1 57.02362 263.0236 cm Q q -1 0 0 1 57.02362 287.0236 cm +1 0 0 1 57.02362 251.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1944,10 +1985,10 @@ Q Q Q q -1 0 0 1 57.02362 281.0236 cm +1 0 0 1 57.02362 245.0236 cm Q q -1 0 0 1 57.02362 269.0236 cm +1 0 0 1 57.02362 233.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1969,10 +2010,10 @@ Q Q Q q -1 0 0 1 57.02362 263.0236 cm +1 0 0 1 57.02362 227.0236 cm Q q -1 0 0 1 57.02362 251.0236 cm +1 0 0 1 57.02362 215.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -1994,10 +2035,10 @@ Q Q Q q -1 0 0 1 57.02362 245.0236 cm +1 0 0 1 57.02362 209.0236 cm Q q -1 0 0 1 57.02362 233.0236 cm +1 0 0 1 57.02362 197.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2020,10 +2061,10 @@ Q Q Q q -1 0 0 1 57.02362 227.0236 cm +1 0 0 1 57.02362 191.0236 cm Q q -1 0 0 1 57.02362 215.0236 cm +1 0 0 1 57.02362 179.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2046,57 +2087,37 @@ Q Q Q q -1 0 0 1 57.02362 215.0236 cm +1 0 0 1 57.02362 179.0236 cm Q q -1 0 0 1 57.02362 173.0236 cm +1 0 0 1 57.02362 137.0236 cm q BT 1 0 0 1 0 26 Tm .35131 Tw 12 TL /F3 10 Tf 0 0 0 rg (Multi-shot continuations) Tj /F1 10 Tf (: Because the state is deep-copied at capture time, a continuation can be invoked) Tj T* 0 Tw .07131 Tw (multiple times. Each invocation restores an independent copy of the machine state. This enables generators,) Tj T* 0 Tw (coroutines, & backtracking search.) Tj T* ET Q Q q -1 0 0 1 57.02362 147.0236 cm +1 0 0 1 57.02362 111.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (4.1 Generators from Continuations) Tj T* ET Q Q q -1 0 0 1 57.02362 129.0236 cm +1 0 0 1 57.02362 93.02362 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (A generator in Lumbda uses ) Tj /F5 10 Tf (call/cc) Tj /F1 10 Tf ( to yield values & resume later:) Tj T* ET Q Q -q -1 0 0 1 57.02362 69.42362 cm -q -q -1 0 0 1 0 0 cm -q -1 0 0 1 6.6 6.6 cm -q -.662745 .662745 .662745 RG -.5 w -.960784 .960784 .960784 rg -n -6 -6 480.0283 50.4 re B* -Q -q -BT 1 0 0 1 0 30.4 Tm 9.6 TL /F5 8 Tf 0 0 0 rg (\(auto-compile! #t\)) Tj T* (\(define \(make-gen thunk\)) Tj T* ( \(let \(\(k #f\) \(done #f\)\)) Tj T* ( \(lambda \(\)) Tj T* ET -Q -Q -Q -Q -Q endstream endobj -122 0 obj +128 0 obj << -/Length 9062 +/Length 9194 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 627.0236 cm +1 0 0 1 57.02362 588.6236 cm q q 1 0 0 1 0 0 cm @@ -2106,42 +2127,42 @@ q .662745 .662745 .662745 RG .5 w .960784 .960784 .960784 rg -n -6 -6 480.0283 136.8 re B* +n -6 -6 480.0283 175.2 re B* Q q -BT 1 0 0 1 0 116.8 Tm 9.6 TL /F5 8 Tf 0 0 0 rg ( \(if done 'done) Tj T* ( \(call/cc \(lambda \(return\)) Tj T* ( \(if k \(k return\)) Tj T* ( \(begin \(thunk \(lambda \(val\)) Tj T* ( \(call/cc \(lambda \(next\)) Tj T* ( \(set! k next\) \(return val\)\)\)\)\)) Tj T* ( \(set! done #t\) \(return 'done\)\)\)\)\)\)\)\)\)) Tj T* T* (\(define counter \(make-gen \(lambda \(yield\)) Tj T* ( \(let loop \(\(i 0\)\) \(yield i\) \(loop \(+ i 1\)\)\)\)\)\)) Tj T* (\(counter\) ; =) Tj (>) Tj ( 0) Tj T* (\(counter\) ; =) Tj (>) Tj ( 1) Tj T* (\(counter\) ; =) Tj (>) Tj ( 2) Tj T* ET +BT 1 0 0 1 0 155.2 Tm 9.6 TL /F5 8 Tf 0 0 0 rg (\(auto-compile! #t\)) Tj T* (\(define \(make-gen thunk\)) Tj T* ( \(let \(\(k #f\) \(done #f\)\)) Tj T* ( \(lambda \(\)) Tj T* ( \(if done 'done) Tj T* ( \(call/cc \(lambda \(return\)) Tj T* ( \(if k \(k return\)) Tj T* ( \(begin \(thunk \(lambda \(val\)) Tj T* ( \(call/cc \(lambda \(next\)) Tj T* ( \(set! k next\) \(return val\)\)\)\)\)) Tj T* ( \(set! done #t\) \(return 'done\)\)\)\)\)\)\)\)\)) Tj T* T* (\(define counter \(make-gen \(lambda \(yield\)) Tj T* ( \(let loop \(\(i 0\)\) \(yield i\) \(loop \(+ i 1\)\)\)\)\)\)) Tj T* (\(counter\) ; =) Tj (>) Tj ( 0) Tj T* (\(counter\) ; =) Tj (>) Tj ( 1) Tj T* (\(counter\) ; =) Tj (>) Tj ( 2) Tj T* ET Q Q Q Q Q q -1 0 0 1 57.02362 595.0236 cm +1 0 0 1 57.02362 556.6236 cm q BT 1 0 0 1 0 14 Tm 4.875696 Tw 12 TL /F1 10 Tf 0 0 0 rg (No special generator syntax. No coroutine framework. The same ) Tj /F5 10 Tf (call/cc) Tj /F1 10 Tf ( that handles escape) Tj T* 0 Tw (continuations also handles cooperative multitasking, because feedback is feedback.) Tj T* ET Q Q q -1 0 0 1 57.02362 569.0236 cm +1 0 0 1 57.02362 530.6236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (4.2 Why "Feedback Is All You Need") Tj T* ET Q Q q -1 0 0 1 57.02362 551.0236 cm +1 0 0 1 57.02362 512.6236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Every control flow pattern reduces to a continuation operation:) Tj T* ET Q Q q -1 0 0 1 57.02362 545.0236 cm +1 0 0 1 57.02362 506.6236 cm Q q -1 0 0 1 57.02362 545.0236 cm +1 0 0 1 57.02362 506.6236 cm Q q -1 0 0 1 57.02362 533.0236 cm +1 0 0 1 57.02362 494.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2163,10 +2184,10 @@ Q Q Q q -1 0 0 1 57.02362 527.0236 cm +1 0 0 1 57.02362 488.6236 cm Q q -1 0 0 1 57.02362 515.0236 cm +1 0 0 1 57.02362 476.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2188,10 +2209,10 @@ Q Q Q q -1 0 0 1 57.02362 509.0236 cm +1 0 0 1 57.02362 470.6236 cm Q q -1 0 0 1 57.02362 497.0236 cm +1 0 0 1 57.02362 458.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2213,10 +2234,10 @@ Q Q Q q -1 0 0 1 57.02362 491.0236 cm +1 0 0 1 57.02362 452.6236 cm Q q -1 0 0 1 57.02362 479.0236 cm +1 0 0 1 57.02362 440.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2238,10 +2259,10 @@ Q Q Q q -1 0 0 1 57.02362 473.0236 cm +1 0 0 1 57.02362 434.6236 cm Q q -1 0 0 1 57.02362 461.0236 cm +1 0 0 1 57.02362 422.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2263,10 +2284,10 @@ Q Q Q q -1 0 0 1 57.02362 455.0236 cm +1 0 0 1 57.02362 416.6236 cm Q q -1 0 0 1 57.02362 431.0236 cm +1 0 0 1 57.02362 392.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2288,10 +2309,10 @@ Q Q Q q -1 0 0 1 57.02362 425.0236 cm +1 0 0 1 57.02362 386.6236 cm Q q -1 0 0 1 57.02362 413.0236 cm +1 0 0 1 57.02362 374.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -2313,33 +2334,33 @@ Q Q Q q -1 0 0 1 57.02362 395.0236 cm +1 0 0 1 57.02362 356.6236 cm Q q -1 0 0 1 57.02362 377.0236 cm +1 0 0 1 57.02362 338.6236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (One primitive. Every pattern.) Tj T* ET Q Q q -1 0 0 1 57.02362 351.0236 cm +1 0 0 1 57.02362 312.6236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (4.3 Four Scopes of Feedback) Tj T* ET Q Q q -1 0 0 1 57.02362 333.0236 cm +1 0 0 1 57.02362 294.6236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The single word "feedback" covers four nested scopes, each giving rise to one of our core abstractions:) Tj T* ET Q Q q -1 0 0 1 57.02362 327.0236 cm +1 0 0 1 57.02362 288.6236 cm Q q -1 0 0 1 57.02362 237.0236 cm +1 0 0 1 57.02362 198.6236 cm q 1 1 1 rg n 0 90 481.2283 -18 re f* @@ -2514,16 +2535,16 @@ Q Q Q q -1 0 0 1 57.02362 237.0236 cm +1 0 0 1 57.02362 198.6236 cm Q q -1 0 0 1 57.02362 159.0236 cm +1 0 0 1 57.02362 120.6236 cm q BT 1 0 0 1 0 62 Tm .519908 Tw 12 TL /F1 10 Tf 0 0 0 rg (Within a single VM, a continuation is the unit \227 the whole call stack, captured & passed. Across processes) Tj T* 0 Tw 1.828917 Tw (on the same machine, a portal is the unit \227 the whole heap or VM state, serialized to a file, resumed) Tj T* 0 Tw 2.175257 Tw (elsewhere. Across implementations that share no binary compatibility, Scheme source itself is the unit:) Tj T* 0 Tw 1.27989 Tw /F5 10 Tf (\(define) Tj ( ) Tj (x) Tj ( ) Tj (42\)) Tj /F1 10 Tf ( travels because every parser already knows how to receive it. Across machines, bytes) Tj T* 0 Tw -0.111031 Tw (over a socket are the unit \227 an HTTP request is feedback to a peer, a response is feedback back. The HTTP) Tj T* 0 Tw (handler is 70 lines of portable Scheme that runs byte-identical in all three runtimes.) Tj T* ET Q Q q -1 0 0 1 57.02362 117.0236 cm +1 0 0 1 57.02362 78.62362 cm q BT 1 0 0 1 0 26 Tm .158138 Tw 12 TL /F1 10 Tf 0 0 0 rg (The same abstraction, at four scopes. No new primitive at any level \227 each scope adds one implementation) Tj T* 0 Tw 1.356019 Tw (primitive \() Tj /F5 10 Tf (call/cc) Tj /F1 10 Tf ( / portal / reader / socket\) and keeps the semantics. This is what "feedback is all you) Tj T* 0 Tw (need" actually means once you extend it past the process boundary.) Tj T* ET Q @@ -2531,7 +2552,7 @@ Q endstream endobj -123 0 obj +129 0 obj << /Length 9151 >> @@ -2942,9 +2963,9 @@ Q endstream endobj -124 0 obj +130 0 obj << -/Length 12847 +/Length 12789 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET @@ -2963,7 +2984,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\2477.2 Cross-impl portal matrix: ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-portal-cross) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\2476.6 asm naive GC \(bump vs mark-sweep memory\): ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-gc) Tj T* ET Q Q q @@ -2988,7 +3009,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\2477.5 Portal save+load timings: ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-portal) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\2476.6 asm meta-GC \(arena fast path vs naive sweep\): ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-gc-arena) Tj T* ET Q Q q @@ -3013,7 +3034,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\24711.3 HTTP server vs busybox / python http.server: ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-web) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\2477.2 Cross-impl portal matrix: ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-portal-cross) Tj T* ET Q Q q @@ -3038,7 +3059,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\24711.4 RPC chain \(Py ) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL ( C relay ) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL ( asm\): ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-rpc-chain) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\2477.5 Portal save+load timings: ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-portal) Tj T* ET Q Q q @@ -3063,6 +3084,56 @@ Q q 1 0 0 1 23 -3 cm q +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\24711.3 HTTP server vs busybox / python http.server: ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-web) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 675.0236 cm +Q +q +1 0 0 1 57.02362 663.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (\24711.4 RPC chain \(Py ) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL ( C relay ) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL ( asm\): ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-rpc-chain) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 657.0236 cm +Q +q +1 0 0 1 57.02362 645.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Run everything: ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-all) Tj T* ET Q Q @@ -3071,25 +3142,25 @@ Q Q Q q -1 0 0 1 57.02362 663.0236 cm +1 0 0 1 57.02362 627.0236 cm Q q -1 0 0 1 57.02362 621.0236 cm +1 0 0 1 57.02362 585.0236 cm q BT 1 0 0 1 0 26 Tm .215522 Tw 12 TL /F1 10 Tf 0 0 0 rg (Each target's script lives under ) Tj /F5 10 Tf (tests/) Tj /F1 10 Tf ( and uses the six-layer safety envelope from ) Tj /F5 10 Tf (CLAUDE.md) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (set) Tj ( ) Tj (-e) Tj /F1 10 Tf ( +) Tj T* 0 Tw .46213 Tw /F5 10 Tf (ulimit) Tj ( ) Tj (-v) Tj /F1 10 Tf ( kernel cap + ) Tj /F5 10 Tf (trap) Tj /F1 10 Tf ( on EXIT + ) Tj /F5 10 Tf (timeout) Tj /F1 10 Tf ( + explicit kill + ) Tj /F5 10 Tf (pgrep) Tj /F1 10 Tf ( straggler check\). No benchmark) Tj T* 0 Tw (leaves background processes alive.) Tj T* ET Q Q q -1 0 0 1 57.02362 595.0236 cm +1 0 0 1 57.02362 559.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.1 Raw Results) Tj T* ET Q Q q -1 0 0 1 57.02362 583.0236 cm +1 0 0 1 57.02362 547.0236 cm Q q -1 0 0 1 57.02362 385.0236 cm +1 0 0 1 57.02362 349.0236 cm q 1 1 1 rg n 0 198 481.2283 -18 re f* @@ -3529,60 +3600,60 @@ Q Q Q q -1 0 0 1 57.02362 385.0236 cm +1 0 0 1 57.02362 349.0236 cm Q q -1 0 0 1 57.02362 355.0236 cm +1 0 0 1 57.02362 319.0236 cm q BT 1 0 0 1 0 14 Tm 1.31189 Tw 12 TL /F3 10 Tf 0 0 0 rg (BC Speedup) Tj /F1 10 Tf ( = interpreter time / bytecode time. This measures the gain from compilation within Lumbda) Tj T* 0 Tw (itself.) Tj T* ET Q Q q -1 0 0 1 57.02362 329.0236 cm +1 0 0 1 57.02362 293.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.2 Analysis) Tj T* ET Q Q q -1 0 0 1 57.02362 275.0236 cm +1 0 0 1 57.02362 239.0236 cm q BT 1 0 0 1 0 38 Tm 2.646027 Tw 12 TL /F1 10 Tf 0 0 0 rg (The bytecode compiler delivers ) Tj /F3 10 Tf (7--12x speedups) Tj /F1 10 Tf ( on recursive & iterative workloads compared to the) Tj T* 0 Tw .139168 Tw (tree-walking interpreter. The largest gains appear in tight loops \() Tj /F5 10 Tf (sum-to) Tj /F1 10 Tf (: 11.4x\) & deep recursion \() Tj /F5 10 Tf (fib\(20\)) Tj /F1 10 Tf T* 0 Tw .224882 Tw (tree: 9.2x, ) Tj /F5 10 Tf (mergesort) Tj /F1 10 Tf (: 11.0x\), where the explicit frame stack & specialized opcodes eliminate the overhead) Tj T* 0 Tw (of AST traversal.) Tj T* ET Q Q q -1 0 0 1 57.02362 245.0236 cm +1 0 0 1 57.02362 209.0236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.762025 Tw (Hash table operations show a smaller speedup \(1.6x\) because the bottleneck sits in Python's dictionary) Tj T* 0 Tw (operations, not in Scheme evaluation overhead.) Tj T* ET Q Q q -1 0 0 1 57.02362 191.0236 cm +1 0 0 1 57.02362 155.0236 cm q BT 1 0 0 1 0 38 Tm 1.224168 Tw 12 TL /F1 10 Tf 0 0 0 rg (CPython remains 50--150x faster than the bytecode VM on most benchmarks. This is expected: CPython) Tj T* 0 Tw .86402 Tw (compiles to native bytecode with a C runtime, while Lumbda's bytecode VM is itself written in Python. The) Tj T* 0 Tw -0.007975 Tw (comparison establishes that Lumbda pays a known, bounded overhead for running a complete Scheme \(with) Tj T* 0 Tw (full ) Tj /F5 10 Tf (call/cc) Tj /F1 10 Tf (, exact rationals, & hygienic macros\) inside a host language.) Tj T* ET Q Q q -1 0 0 1 57.02362 149.0236 cm +1 0 0 1 57.02362 113.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.429873 Tw (The important comparison is not Lumbda vs CPython \(different languages\), but Lumbda interpreter vs) Tj T* 0 Tw 1.254395 Tw (Lumbda bytecode \(same language, same semantics, different execution strategy\). The bytecode compiler) Tj T* 0 Tw (proves that feedback-based architecture does not preclude efficient execution.) Tj T* ET Q Q q -1 0 0 1 57.02362 123.0236 cm +1 0 0 1 57.02362 87.02362 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.3 What the Benchmarks Test) Tj T* ET Q Q q -1 0 0 1 57.02362 111.0236 cm +1 0 0 1 57.02362 75.02362 cm Q q -1 0 0 1 57.02362 111.0236 cm +1 0 0 1 57.02362 75.02362 cm Q q -1 0 0 1 57.02362 99.02362 cm +1 0 0 1 57.02362 63.02362 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -3604,64 +3675,14 @@ Q Q Q q -1 0 0 1 57.02362 93.02362 cm -Q -q -1 0 0 1 57.02362 81.02362 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (fib\(20\) tree-recursive) Tj /F1 10 Tf (: Exponential call tree. Tests ) Tj /F5 10 Tf (OP_CALL) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (OP_RETURN) Tj /F1 10 Tf ( throughput) Tj T* ET -Q -Q -q -Q -Q -Q -q -1 0 0 1 57.02362 75.02362 cm -Q -q -1 0 0 1 57.02362 63.02362 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (tak\(15,10,6\)) Tj /F1 10 Tf (: Takeuchi function. Deep mutual recursion with 3 arguments) Tj T* ET -Q -Q -q -Q -Q -Q -q 1 0 0 1 57.02362 62.69291 cm Q endstream endobj -125 0 obj +131 0 obj << -/Length 9725 +/Length 9669 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET @@ -3680,7 +3701,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (sum-to\(50000\)) Tj /F1 10 Tf (: 50,000 tail-recursive iterations. Tests frame stack performance at scale) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (fib\(20\) tree-recursive) Tj /F1 10 Tf (: Exponential call tree. Tests ) Tj /F5 10 Tf (OP_CALL) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (OP_RETURN) Tj /F1 10 Tf ( throughput) Tj T* ET Q Q q @@ -3705,7 +3726,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (ackermann\(3,4\)) Tj /F1 10 Tf (: Deeply nested recursion \(125 result, many thousands of calls\)) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (tak\(15,10,6\)) Tj /F1 10 Tf (: Takeuchi function. Deep mutual recursion with 3 arguments) Tj T* ET Q Q q @@ -3730,7 +3751,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (list ops) Tj /F1 10 Tf (: ) Tj /F5 10 Tf (iota) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (reverse) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (filter) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (map) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (fold-left) Tj /F1 10 Tf ( chain on 5,000 elements) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (sum-to\(50000\)) Tj /F1 10 Tf (: 50,000 tail-recursive iterations. Tests frame stack performance at scale) Tj T* ET Q Q q @@ -3755,7 +3776,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (mergesort) Tj /F1 10 Tf (: Recursive divide-and-conquer on 200 elements. Tests ) Tj /F5 10 Tf (cons) Tj /F1 10 Tf ( allocation throughput) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (ackermann\(3,4\)) Tj /F1 10 Tf (: Deeply nested recursion \(125 result, many thousands of calls\)) Tj T* ET Q Q q @@ -3780,6 +3801,56 @@ Q q 1 0 0 1 23 -3 cm q +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (list ops) Tj /F1 10 Tf (: ) Tj /F5 10 Tf (iota) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (reverse) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (filter) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (map) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (fold-left) Tj /F1 10 Tf ( chain on 5,000 elements) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 675.0236 cm +Q +q +1 0 0 1 57.02362 663.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (mergesort) Tj /F1 10 Tf (: Recursive divide-and-conquer on 200 elements. Tests ) Tj /F5 10 Tf (cons) Tj /F1 10 Tf ( allocation throughput) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 657.0236 cm +Q +q +1 0 0 1 57.02362 645.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (hash-table) Tj /F1 10 Tf (: 1,000 ) Tj /F5 10 Tf (set!) Tj /F1 10 Tf ( + ) Tj /F5 10 Tf (ref) Tj /F1 10 Tf ( operations. Tests Python dict interop overhead) Tj T* ET Q Q @@ -3788,25 +3859,25 @@ Q Q Q q -1 0 0 1 57.02362 663.0236 cm +1 0 0 1 57.02362 627.0236 cm Q q -1 0 0 1 57.02362 637.0236 cm +1 0 0 1 57.02362 601.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.4 Three Implementations Head-to-Head \(i5-8350U\)) Tj T* ET Q Q q -1 0 0 1 57.02362 583.0236 cm +1 0 0 1 57.02362 547.0236 cm q BT 1 0 0 1 0 38 Tm 3.147362 Tw 12 TL /F1 10 Tf 0 0 0 rg (Same hardware, same workloads, in-process timing via ) Tj /F5 10 Tf (current-time-ms) Tj /F1 10 Tf (. Best of two runs. Each) Tj T* 0 Tw 1.886027 Tw (implementation is run in its high-performance configuration: Python with ) Tj /F5 10 Tf (--fast) Tj /F1 10 Tf ( \(bytecode VM\), C with) Tj T* 0 Tw .85402 Tw /F5 10 Tf (--fast) Tj /F1 10 Tf ( \(bytecode VM, also its mode for deep recursion\), asm in its native tree-walker mode \(asm has no) Tj T* 0 Tw (bytecode layer \227 it doesn't need one\).) Tj T* ET Q Q q -1 0 0 1 57.02362 577.0236 cm +1 0 0 1 57.02362 541.0236 cm Q q -1 0 0 1 57.02362 505.0236 cm +1 0 0 1 57.02362 469.0236 cm q 1 1 1 rg n 0 72 481.2283 -18 re f* @@ -3951,20 +4022,20 @@ Q Q Q q -1 0 0 1 57.02362 505.0236 cm +1 0 0 1 57.02362 469.0236 cm Q q -1 0 0 1 57.02362 487.0236 cm +1 0 0 1 57.02362 451.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (\(C fast is the fastest cell in every row \227 best of the three on this hardware.\)) Tj T* ET Q Q q -1 0 0 1 57.02362 479.0236 cm +1 0 0 1 57.02362 443.0236 cm Q q -1 0 0 1 57.02362 409.978 cm +1 0 0 1 57.02362 373.978 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -3987,13 +4058,13 @@ Q Q Q q -1 0 0 1 57.02362 401.978 cm +1 0 0 1 57.02362 365.978 cm Q q -1 0 0 1 57.02362 393.978 cm +1 0 0 1 57.02362 357.978 cm Q q -1 0 0 1 57.02362 325.6092 cm +1 0 0 1 57.02362 289.6092 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -4016,70 +4087,64 @@ Q Q Q q -1 0 0 1 57.02362 317.6092 cm +1 0 0 1 57.02362 281.6092 cm Q q -1 0 0 1 57.02362 287.6092 cm +1 0 0 1 57.02362 251.6092 cm q BT 1 0 0 1 0 14 Tm 3.825835 Tw 12 TL /F3 10 Tf 0 0 0 rg (Reproduce:) Tj /F1 10 Tf ( ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-3way) Tj /F1 10 Tf ( \(source: ) Tj /F5 10 Tf (tests/bench-3way.sh) Tj /F1 10 Tf (\). Prints the same table on your) Tj T* 0 Tw (hardware with best-of-two timings.) Tj T* ET Q Q q -1 0 0 1 57.02362 221.6092 cm +1 0 0 1 57.02362 185.6092 cm q BT 1 0 0 1 0 50 Tm .013432 Tw 12 TL /F1 10 Tf 0 0 0 rg (C wins every workload on this hardware. Its bytecode compiler + explicit frame stack \(and optional ) Tj /F5 10 Tf (--jit) Tj /F1 10 Tf ( for) Tj T* 0 Tw .885223 Tw (pattern-matched call forms\) gives a ~3\327 margin over asm on tail-recursive loops and deep recursion alike.) Tj T* 0 Tw 1.958241 Tw (asm's tree-walker is the narrowest Scheme of the three \227 no bytecode layer, no JIT \227 but still beats) Tj T* 0 Tw .566147 Tw (Python's bytecode VM by ~7\2268\327 because it pays no Python overhead \(no dict lookups, no object allocation) Tj T* 0 Tw (per VM op, no interpreter dispatch thunk\).) Tj T* ET Q Q q -1 0 0 1 57.02362 119.6092 cm +1 0 0 1 57.02362 83.60924 cm q BT 1 0 0 1 0 86 Tm 3.940642 Tw 12 TL /F3 10 Tf 0 0 0 rg (None of the three segfault on ackermann in their recommended mode.) Tj /F1 10 Tf ( Python ) Tj /F5 10 Tf (--fast) Tj /F1 10 Tf ( uses) Tj T* 0 Tw 2.150596 Tw /F5 10 Tf (OP_TAIL_CALL) Tj /F1 10 Tf ( with explicit frames. C ) Tj /F5 10 Tf (--fast) Tj /F1 10 Tf ( uses its bytecode VM, also with explicit frames. asm's) Tj T* 0 Tw 1.025522 Tw /F5 10 Tf (jmp) Tj /F1 10 Tf (-based TCO reuses the same host stack slot for tail calls. Only C's ) Tj /F5 10 Tf (default) Tj /F1 10 Tf ( tree-walker mode would) Tj T* 0 Tw -0.110555 Tw (exhaust the host C stack on deep recursion \227 by design; it uses the C call stack for each Scheme call. Either) Tj T* 0 Tw -0.056353 Tw (pass ) Tj /F5 10 Tf (-f) Tj /F1 10 Tf (/) Tj /F5 10 Tf (--fast) Tj /F1 10 Tf ( or ) Tj /F5 10 Tf (ulimit) Tj ( ) Tj (-s) Tj ( ) Tj (unlimited) Tj /F1 10 Tf ( when using the C tree-walker on deeply recursive code. The C) Tj T* 0 Tw -0.045877 Tw (binary's help text spells this out explicitly. \(A future refactor could spawn a worker pthread with a 64 MB stack) Tj T* 0 Tw 3.438556 Tw (and run eval there, making the tree-walker safe under any configuration \227 tracked as an optional) Tj T* 0 Tw (improvement, low priority given ) Tj /F5 10 Tf (--fast) Tj /F1 10 Tf ( is strictly faster anyway.\)) Tj T* ET Q Q -q -1 0 0 1 57.02362 65.60924 cm -q -BT 1 0 0 1 0 38 Tm 1.376027 Tw 12 TL /F3 10 Tf 0 0 0 rg (asm's remaining bottleneck is allocation, not lookup.) Tj /F1 10 Tf ( Profiling ) Tj /F5 10 Tf (sum-to\(1M\)) Tj /F1 10 Tf ( shows ~170 MB RSS \227) Tj T* 0 Tw .036147 Tw (each tail call through ) Tj /F5 10 Tf (apply_closure) Tj /F1 10 Tf ( + ) Tj /F5 10 Tf (env_define) Tj /F1 10 Tf ( allocates 24 bytes per parameter \(sym / val / parent\),) Tj T* 0 Tw -0.083038 Tw (twice per ) Tj /F5 10 Tf (loop) Tj /F1 10 Tf ( iteration, for 48 MB total before the three ) Tj /F5 10 Tf (heap_grow) Tj /F1 10 Tf ( events that follow. A future optimization) Tj T* 0 Tw .258138 Tw (candidate is per-frame batched allocation \() Tj /F5 10 Tf (8) Tj ( ) Tj (+) Tj ( ) Tj (16N) Tj /F1 10 Tf ( bytes once per call instead of ) Tj /F5 10 Tf (24N) Tj /F1 10 Tf (\), or env-cell in-place) Tj T* 0 Tw ET -Q -Q endstream endobj -126 0 obj +132 0 obj << -/Length 10836 +/Length 9228 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 717.0236 cm +1 0 0 1 57.02362 669.0236 cm q -BT 1 0 0 1 0 38 Tm .198241 Tw 12 TL /F1 10 Tf 0 0 0 rg (reuse for self-tail-calls. An inline cache for env lookups \(ported from Python's VM\) turns out to help less than) Tj T* 0 Tw 1.679272 Tw (anticipated because asm's env chains are typically only 2 deep and each step is a pointer dereference;) Tj T* 0 Tw .173917 Tw (measured upper bound is ~5%. The ~3\327 gap to C is mostly the absence of a bytecode layer and the per-call) Tj T* 0 Tw (env allocation \227 not a lookup-path problem.) Tj T* ET +BT 1 0 0 1 0 86 Tm 1.376027 Tw 12 TL /F3 10 Tf 0 0 0 rg (asm's remaining bottleneck is allocation, not lookup.) Tj /F1 10 Tf ( Profiling ) Tj /F5 10 Tf (sum-to\(1M\)) Tj /F1 10 Tf ( shows ~170 MB RSS \227) Tj T* 0 Tw .036147 Tw (each tail call through ) Tj /F5 10 Tf (apply_closure) Tj /F1 10 Tf ( + ) Tj /F5 10 Tf (env_define) Tj /F1 10 Tf ( allocates 24 bytes per parameter \(sym / val / parent\),) Tj T* 0 Tw -0.083038 Tw (twice per ) Tj /F5 10 Tf (loop) Tj /F1 10 Tf ( iteration, for 48 MB total before the three ) Tj /F5 10 Tf (heap_grow) Tj /F1 10 Tf ( events that follow. A future optimization) Tj T* 0 Tw .258138 Tw (candidate is per-frame batched allocation \() Tj /F5 10 Tf (8) Tj ( ) Tj (+) Tj ( ) Tj (16N) Tj /F1 10 Tf ( bytes once per call instead of ) Tj /F5 10 Tf (24N) Tj /F1 10 Tf (\), or env-cell in-place) Tj T* 0 Tw .198241 Tw (reuse for self-tail-calls. An inline cache for env lookups \(ported from Python's VM\) turns out to help less than) Tj T* 0 Tw 1.679272 Tw (anticipated because asm's env chains are typically only 2 deep and each step is a pointer dereference;) Tj T* 0 Tw .173917 Tw (measured upper bound is ~5%. The ~3\327 gap to C is mostly the absence of a bytecode layer and the per-call) Tj T* 0 Tw (env allocation \227 not a lookup-path problem.) Tj T* ET Q Q q -1 0 0 1 57.02362 691.0236 cm +1 0 0 1 57.02362 643.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.5 Native Container Primitives: Moving Hot Loops Into Asm) Tj T* ET Q Q q -1 0 0 1 57.02362 625.0236 cm +1 0 0 1 57.02362 577.0236 cm q BT 1 0 0 1 0 50 Tm .721147 Tw 12 TL /F1 10 Tf 0 0 0 rg (The proof-netspace server \(\2477\) needs a hash-set to dedupe proof hashes. asm had no native hash-set, so) Tj T* 0 Tw .241019 Tw (d88149a shipped a portable one in Lumbda itself: a fixed-size vector of alists, with the bucket walk written in) Tj T* 0 Tw .202397 Tw (Scheme. It works in every tier and matches the usual chained-hash-table algorithm. But the entire inner loop) Tj T* 0 Tw 2.469417 Tw (\227 ) Tj /F5 10 Tf (modulo) Tj /F1 10 Tf ( for bucket index, ) Tj /F5 10 Tf (car) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (cdr) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (=) Tj /F1 10 Tf ( to walk the chain, ) Tj /F5 10 Tf (cons) Tj /F1 10 Tf ( to insert \227 runs through asm's) Tj T* 0 Tw (tree-walker, one Scheme AST node at a time.) Tj T* ET Q Q q -1 0 0 1 57.02362 571.0236 cm +1 0 0 1 57.02362 523.0236 cm q BT 1 0 0 1 0 38 Tm 1.109882 Tw 12 TL /F1 10 Tf 0 0 0 rg (A native hash-set moves the same algorithm into asm: ) Tj /F5 10 Tf (bi_hash_set_add) Tj /F1 10 Tf ( is one ) Tj /F5 10 Tf (hash_value) Tj /F1 10 Tf ( call, one) Tj T* 0 Tw .366556 Tw /F5 10 Tf (AND) Tj /F1 10 Tf ( mask, one bucket-slot load, one ) Tj /F5 10 Tf (hs_chain_find) Tj /F1 10 Tf ( loop over raw tagged pairs, and one ) Tj /F5 10 Tf (make_pair) Tj /F1 10 Tf ( on) Tj T* 0 Tw 3.403223 Tw (miss. No environment lookups, no frame allocation, no tree-walk dispatch \227 the entire hot path is) Tj T* 0 Tw (straight-line machine code.) Tj T* ET Q Q q -1 0 0 1 57.02362 565.0236 cm +1 0 0 1 57.02362 517.0236 cm Q q -1 0 0 1 57.02362 493.0236 cm +1 0 0 1 57.02362 445.0236 cm q 1 1 1 rg n 0 72 481.2283 -18 re f* @@ -4224,50 +4289,653 @@ Q Q Q q -1 0 0 1 57.02362 493.0236 cm +1 0 0 1 57.02362 445.0236 cm Q q -1 0 0 1 57.02362 439.0236 cm +1 0 0 1 57.02362 391.0236 cm q BT 1 0 0 1 0 38 Tm 2.58789 Tw 12 TL /F1 10 Tf 0 0 0 rg (Same hash function \(key value for ints, djb2 for strings, identity for everything else\), same 64-bucket) Tj T* 0 Tw 1.194897 Tw (chaining, same load factor. The 15\22621\327 factor is ) Tj /F3 10 Tf (purely the cost of interpretation on the bucket walk) Tj /F1 10 Tf (:) Tj T* 0 Tw 1.291079 Tw (each Scheme-level ) Tj /F5 10 Tf (car) Tj /F1 10 Tf ( pays a tag check plus an eval dispatch, while the asm-level loop is two memory) Tj T* 0 Tw (loads and a compare per step.) Tj T* ET Q Q q -1 0 0 1 57.02362 373.0236 cm +1 0 0 1 57.02362 325.0236 cm q 0 0 0 rg BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL 17.94283 Tw (This matters beyond one data structure. Every container that lives in) Tj T* 0 Tw 4.560927 Tw (Lumbda-the-language-on-asm-the-interpreter pays the same overhead. For a server that processes) Tj T* 0 Tw .026962 Tw (thousands of proofs per minute, pulling the hash-set into the asm primitive layer erases a dominant cost. The) Tj T* 0 Tw 1.349897 Tw (same pattern applies to any structure with a tight inner loop: vector sort, string search, rolling checksum.) Tj T* 0 Tw (Asm's tree-walker is slow on user code; asm's builtins run at the speed of the host CPU.) Tj T* ET Q Q q -1 0 0 1 57.02362 319.0236 cm +1 0 0 1 57.02362 271.0236 cm q BT 1 0 0 1 0 38 Tm .622256 Tw 12 TL /F1 10 Tf 0 0 0 rg (The layout reuses vector tag 7 with a negative sentinel at offset 0 \(hash-table: ) Tj /F5 10 Tf (-1) Tj /F1 10 Tf (, hash-set: ) Tj /F5 10 Tf (-2) Tj /F1 10 Tf (\). ) Tj /F5 10 Tf (vector?) Tj /F1 10 Tf T* 0 Tw .303797 Tw (and the printer check the sentinel to stay disjoint from real vectors. No additional tag bits were consumed \227) Tj T* 0 Tw 1.122397 Tw (the seven-way tag mask \() Tj /F5 10 Tf (TAG_MASK) Tj ( ) Tj (=) Tj ( ) Tj (7) Tj /F1 10 Tf (\) still has room for only heap-level containers, and nothing new) Tj T* 0 Tw (needs tagging because the sentinel carries the discrimination.) Tj T* ET Q Q q -1 0 0 1 57.02362 277.0236 cm +1 0 0 1 57.02362 229.0236 cm q BT 1 0 0 1 0 26 Tm .314261 Tw 12 TL /F3 10 Tf 0 0 0 rg (Reproduce:) Tj /F1 10 Tf ( ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-hashset) Tj /F1 10 Tf ( \(source: ) Tj /F5 10 Tf (tests/bench-hashset.sh) Tj /F1 10 Tf (\). Asm-only: C and Python tiers) Tj T* 0 Tw 2.919168 Tw (supply ) Tj /F5 10 Tf (hash-table) Tj /F1 10 Tf ( but not ) Tj /F5 10 Tf (hash-set) Tj /F1 10 Tf ( \227 the speedup shown here is intra-asm, native primitive vs) Tj T* 0 Tw (Scheme-level implementation, not cross-tier.) Tj T* ET Q Q q -1 0 0 1 57.02362 245.8236 cm +1 0 0 1 57.02362 203.0236 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.6 Memory Management and the Meta-GC) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 137.0236 cm +q +BT 1 0 0 1 0 50 Tm 2.31131 Tw 12 TL /F1 10 Tf 0 0 0 rg (The asm tier's default allocator is a bump pointer: every allocation advances ) Tj /F5 10 Tf (%r15) Tj /F1 10 Tf ( monotonically, and) Tj T* 0 Tw .389272 Tw (nothing is ever freed. Python and C tiers have garbage collection \(Python's host GC, Boehm ) Tj /F5 10 Tf (GC_MALLOC) Tj /F1 10 Tf ( in) Tj T* 0 Tw 1.422556 Tw (C\); asm doesn't, by design, to keep the 6,645-line auditable surface small. Short programs finish without) Tj T* 0 Tw .713432 Tw (paying. Long-running asm servers leak until the kernel caps them \227 a real hazard that crashed this laptop) Tj T* 0 Tw (twice during HTTP benchmarks before we wrote the six-layer safety envelope into ) Tj /F5 10 Tf (CLAUDE.md) Tj /F1 10 Tf (.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 119.0236 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL -0.10245 Tw (To measure what a collector would actually cost, we built a second asm binary behind an assemble-time flag:) Tj T* 0 Tw ET +Q +Q +q +1 0 0 1 57.02362 78.62362 cm +q +q +1 0 0 1 0 0 cm +q +1 0 0 1 6.6 6.6 cm +q +.662745 .662745 .662745 RG +.5 w +.960784 .960784 .960784 rg +n -6 -6 480.0283 31.2 re B* +Q +q +0 0 0 rg +BT 1 0 0 1 0 11.2 Tm /F5 8 Tf 9.6 TL (as --64 --defsym GC_NAIVE=1 uncommonlisp.s # collecting build) Tj T* (as --64 uncommonlisp.s # default, bump-only) Tj T* ET +Q +Q +Q +Q +Q + +endstream +endobj +133 0 obj +<< +/Length 12105 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET +q +1 0 0 1 57.02362 729.0236 cm +q +BT 1 0 0 1 0 26 Tm 1.033797 Tw 12 TL /F1 10 Tf 0 0 0 rg (Same source, same tests \(137/137 pass on both\). The GC build adds an 8-byte ) Tj /F5 10 Tf (\(size) Tj ( ) Tj (<) Tj (<) Tj ( ) Tj (1) Tj ( ) Tj (|) Tj ( ) Tj (mark\)) Tj /F1 10 Tf T* 0 Tw 2.41631 Tw (header on every heap block, a stop-the-world mark-sweep triggered by bump overflow, and a free-list) Tj T* 0 Tw (allocator that first-fits reclaimed space.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 699.0236 cm +q +BT 1 0 0 1 0 14 Tm .665835 Tw 12 TL /F3 10 Tf 0 0 0 rg (Control-group numbers) Tj /F1 10 Tf ( \(workload: 2,000 iterations of build-sum-discard over 200-element lists, i5-8350U,) Tj T* 0 Tw (512 MB ) Tj /F5 10 Tf (ulimit) Tj ( ) Tj (-v) Tj /F1 10 Tf (\):) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 693.0236 cm +Q +q +1 0 0 1 57.02362 639.0236 cm +q +1 1 1 rg +n 0 54 481.2283 -18 re f* +.878431 .878431 .878431 rg +n 0 36 481.2283 -18 re f* +1 1 1 rg +n 0 18 481.2283 -18 re f* +0 0 0 rg +BT /F3 10 Tf 12 TL ET +q +1 0 0 1 6 39 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 52.46882 0 Td (asm build) Tj T* -52.46882 0 Td ET +Q +Q +q +1 0 0 1 169.6176 39 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 15.36055 0 Td (Wall time) Tj T* -15.36055 0 Td ET +Q +Q +q +1 0 0 1 256.2387 39 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 13.96555 0 Td (Peak RSS) Tj T* -13.96555 0 Td ET +Q +Q +q +1 0 0 1 342.8598 39 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 42.01425 0 Td (GC firings) Tj T* -42.01425 0 Td ET +Q +Q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (bump only \(no GC\)) Tj T* ET +Q +Q +q +1 0 0 1 169.6176 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (1,097 ms) Tj T* ET +Q +Q +q +1 0 0 1 256.2387 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (133.9 MB) Tj T* ET +Q +Q +q +1 0 0 1 342.8598 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (none) Tj T* ET +Q +Q +q +1 0 0 1 6 3 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (naive mark-sweep \() Tj /F5 10 Tf (GC_NAIVE=1) Tj /F1 10 Tf (\)) Tj T* ET +Q +Q +q +1 0 0 1 169.6176 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (1,431 ms) Tj T* ET +Q +Q +q +1 0 0 1 256.2387 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (1.1 MB) Tj T* ET +Q +Q +q +1 0 0 1 342.8598 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (~200) Tj T* ET +Q +Q +q +1 J +1 j +0 0 0 RG +.25 w +n 0 36 m 481.2283 36 l S +n 0 18 m 481.2283 18 l S +n 163.6176 0 m 163.6176 54 l S +n 250.2387 0 m 250.2387 54 l S +n 336.8598 0 m 336.8598 54 l S +n 0 54 m 481.2283 54 l S +n 0 0 m 481.2283 0 l S +n 0 0 m 0 54 l S +n 481.2283 0 m 481.2283 54 l S +Q +Q +Q +q +1 0 0 1 57.02362 639.0236 cm +Q +q +1 0 0 1 57.02362 597.0236 cm +q +BT 1 0 0 1 0 26 Tm .105917 Tw 12 TL /F3 10 Tf 0 0 0 rg (124\327 less memory at a ~30% throughput cost.) Tj /F1 10 Tf ( That is the honest GC tax at the naive end of the spectrum) Tj T* 0 Tw 7.017739 Tw (\227 the number we had been guessing at before building the control group. Every future) Tj T* 0 Tw (memory-management proposal \(generational, incremental, region-based\) now has a concrete floor to beat.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 573.0236 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.6.1 Meta-GC: Arena Fast Path with Mark-Phase Verifier) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 531.0236 cm +q +BT 1 0 0 1 0 26 Tm .669314 Tw 12 TL /F1 10 Tf 0 0 0 rg (On top of the naive sweep, the GC build exposes a Lumbda primitive ) Tj /F5 10 Tf (\(with-arena) Tj ( ) Tj (thunk\)) Tj /F1 10 Tf ( that takes a) Tj T* 0 Tw 1.104556 Tw (zero-argument procedure, runs it, and attempts an ) Tj /F3 10 Tf (O\(1\) bulk reclaim) Tj /F1 10 Tf ( of every allocation the thunk made.) Tj T* 0 Tw (The decision logic is a three-way policy:) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 525.0236 cm +Q +q +1 0 0 1 57.02362 525.0236 cm +Q +q +1 0 0 1 57.02362 501.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 9 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 2 0 Td (1.) Tj T* -2 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 14 Tm 2.391223 Tw 12 TL /F3 10 Tf 0 0 0 rg (If an implicit GC fired inside the thunk) Tj /F1 10 Tf ( \(heap overflow forced a full sweep mid-execution\), the) Tj T* 0 Tw (snapshot is stale \227 skip the reset attempt and return.) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 495.0236 cm +Q +q +1 0 0 1 57.02362 459.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 2 0 Td (2.) Tj T* -2 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 26 Tm 1.041772 Tw 12 TL /F3 10 Tf 0 0 0 rg (Otherwise, run the existing mark phase) Tj /F1 10 Tf ( with the thunk's return value added as an extra root, then) Tj T* 0 Tw -0.081862 Tw (walk the arena range ) Tj /F5 10 Tf ([snapshot_r15,) Tj ( ) Tj (%r15\)) Tj /F1 10 Tf ( block by block. If ) Tj /F4 10 Tf (no) Tj /F1 10 Tf ( header in that range has the mark) Tj T* 0 Tw (bit set, nothing survives \227 bulk-reset ) Tj /F5 10 Tf (%r15) Tj /F1 10 Tf ( to the snapshot \(one store\) and return.) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 453.0236 cm +Q +q +1 0 0 1 57.02362 429.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 9 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 2 0 Td (3.) Tj T* -2 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 14 Tm .77213 Tw 12 TL /F3 10 Tf 0 0 0 rg (If any block in the arena range is marked) Tj /F1 10 Tf (, the thunk's return value or some other root reaches into) Tj T* 0 Tw (the arena. Abort the reset, fall through to the naive sweep on the full heap, and return.) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 429.0236 cm +Q +q +1 0 0 1 57.02362 351.0236 cm +q +BT 1 0 0 1 0 62 Tm 2.481079 Tw 12 TL /F1 10 Tf 0 0 0 rg (Free-list reuse is disabled while an arena is active so the chain stays pristine for a verbatim restore;) Tj T* 0 Tw 4.369862 Tw /F5 10 Tf (heap_alloc) Tj /F1 10 Tf ( enforces this via a global ) Tj /F5 10 Tf (arena_active) Tj /F1 10 Tf ( flag. One critical correctness detail: after) Tj T* 0 Tw .105596 Tw /F5 10 Tf (apply_proc_raw) Tj /F1 10 Tf ( returns from the thunk, volatile registers contain stale tagged pointers into the arena. The) Tj T* 0 Tw 1.244897 Tw (conservative stack scan would otherwise treat those residuals as live roots and trigger a false escape on) Tj T* 0 Tw 2.046796 Tw (every call. Zero-ing ) Tj /F5 10 Tf (%rax,) Tj ( ) Tj (%rcx,) Tj ( ) Tj (%rdx,) Tj ( ) Tj (%rsi,) Tj ( ) Tj (%rdi,) Tj ( ) Tj (%rbp,) Tj ( ) Tj (%r8-%r12) Tj /F1 10 Tf ( before the verifier runs) Tj T* 0 Tw (removes this hazard.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 333.0236 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Meta-GC benchmark) Tj /F1 10 Tf ( \(same workload, same binary, both phases in one process\):) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 327.0236 cm +Q +q +1 0 0 1 57.02362 261.0236 cm +q +1 1 1 rg +n 0 66 481.2283 -18 re f* +.878431 .878431 .878431 rg +n 0 48 481.2283 -18 re f* +1 1 1 rg +n 0 30 481.2283 -30 re f* +0 0 0 rg +BT /F3 10 Tf 12 TL ET +q +1 0 0 1 6 51 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 58.91765 0 Td (Strategy) Tj T* -58.91765 0 Td ET +Q +Q +q +1 0 0 1 175.8453 51 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 5.075475 0 Td (Wall time) Tj T* -5.075475 0 Td ET +Q +Q +q +1 0 0 1 241.8962 51 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 13.11632 0 Td (Peak RSS) Tj T* -13.11632 0 Td ET +Q +Q +q +1 0 0 1 326.8189 51 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 6.465475 0 Td (Full GCs) Tj T* -6.465475 0 Td ET +Q +Q +q +1 0 0 1 392.8698 51 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 2.00425 0 Td (Arena outcomes) Tj T* -2.00425 0 Td ET +Q +Q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 33 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Phase A: naive sweep only) Tj T* ET +Q +Q +q +1 0 0 1 175.8453 33 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (932 ms) Tj T* ET +Q +Q +q +1 0 0 1 241.8962 33 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (1.2 MB) Tj T* ET +Q +Q +q +1 0 0 1 326.8189 33 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (200) Tj T* ET +Q +Q +q +1 0 0 1 392.8698 33 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (\(unused\)) Tj T* ET +Q +Q +q +1 0 0 1 6 15 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Phase B: arena-wrapped body) Tj T* ET +Q +Q +q +1 0 0 1 175.8453 15 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (945 ms) Tj T* ET +Q +Q +q +1 0 0 1 241.8962 15 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (1.2 MB) Tj T* ET +Q +Q +q +1 0 0 1 326.8189 15 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (1) Tj T* ET +Q +Q +q +1 0 0 1 392.8698 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 14 Tm /F3 10 Tf 12 TL (2,000 resets / 0) Tj T* (escapes) Tj T* ET +Q +Q +q +1 J +1 j +0 0 0 RG +.25 w +n 0 48 m 481.2283 48 l S +n 0 30 m 481.2283 30 l S +n 169.8453 0 m 169.8453 66 l S +n 235.8962 0 m 235.8962 66 l S +n 320.8189 0 m 320.8189 66 l S +n 386.8698 0 m 386.8698 66 l S +n 0 66 m 481.2283 66 l S +n 0 0 m 481.2283 0 l S +n 0 0 m 0 66 l S +n 481.2283 0 m 481.2283 66 l S +Q +Q +Q +q +1 0 0 1 57.02362 261.0236 cm +Q +q +1 0 0 1 57.02362 195.0236 cm +q +BT 1 0 0 1 0 50 Tm .306019 Tw 12 TL /F1 10 Tf 0 0 0 rg (Phase B reclaims ) Tj /F3 10 Tf (205 MB) Tj /F1 10 Tf ( via O\(1\) bulk resets \227 the work that would otherwise drive the mark-sweep path.) Tj T* 0 Tw .213241 Tw (Only one full GC fires \(initial warm-up\); the other 199 pressure events are replaced by arena exits. Wall time) Tj T* 0 Tw 1.256373 Tw (is within 1.4% of naive-only on this workload because the arena verifier's mark cost is comparable to the) Tj T* 0 Tw 2.654168 Tw (sweep cost it replaces. The advantage is not raw throughput but ) Tj /F3 10 Tf (bounded per-iteration latency) Tj /F1 10 Tf ( \(no) Tj T* 0 Tw (pressure-driven jitter\) and the observability to prove which path actually ran.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 177.0236 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Escape detection) Tj /F1 10 Tf (. When the thunk returns a heap-allocated value that the outer scope captures:) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 146.2236 cm +q +q +1 0 0 1 0 0 cm +q +1 0 0 1 6.6 6.6 cm +q +.662745 .662745 .662745 RG +.5 w +.960784 .960784 .960784 rg +n -6 -6 480.0283 21.6 re B* +Q +q +.960784 .960784 .960784 rg +n 0 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 4.8 0 19.2 9.6 re f* +.960784 .960784 .960784 rg +n 24 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 28.8 0 33.6 9.6 re f* +.960784 .960784 .960784 rg +n 62.4 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 67.2 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 72 0 48 9.6 re f* +.960784 .960784 .960784 rg +n 120 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 124.8 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 129.6 0 28.8 9.6 re f* +.960784 .960784 .960784 rg +n 158.4 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 163.2 0 9.6 9.6 re f* +.960784 .960784 .960784 rg +n 172.8 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 177.6 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 182.4 0 48 9.6 re f* +.960784 .960784 .960784 rg +n 230.4 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 235.2 0 9.6 9.6 re f* +.960784 .960784 .960784 rg +n 244.8 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 249.6 0 4.8 9.6 re f* +.960784 .960784 .960784 rg +n 254.4 0 28.8 9.6 re f* +.960784 .960784 .960784 rg +n 283.2 0 0 9.6 re f* +BT 1 0 0 1 0 1.6 Tm 9.6 TL /F5 8 Tf 0 0 0 rg (\() Tj /F7 8 Tf 0 .501961 0 rg (set!) Tj /F5 8 Tf .733333 .733333 .733333 rg ( ) Tj .098039 .090196 .486275 rg (escaped) Tj .733333 .733333 .733333 rg ( ) Tj 0 0 0 rg (\() Tj 0 0 1 rg (with-arena) Tj .733333 .733333 .733333 rg ( ) Tj 0 0 0 rg (\() Tj /F7 8 Tf 0 .501961 0 rg (lambda) Tj /F5 8 Tf .733333 .733333 .733333 rg ( ) Tj 0 0 0 rg (\(\)) Tj .733333 .733333 .733333 rg ( ) Tj 0 0 0 rg (\() Tj 0 0 1 rg (build-list) Tj .733333 .733333 .733333 rg ( ) Tj .4 .4 .4 rg (50) Tj .733333 .733333 .733333 rg ( ) Tj .4 .4 .4 rg (') Tj 0 0 0 rg (\(\)\)\)\)\)) Tj .733333 .733333 .733333 rg T* ET +Q +Q +Q +Q +Q +q +1 0 0 1 57.02362 102.2236 cm +q +BT 1 0 0 1 0 26 Tm .812397 Tw 12 TL /F1 10 Tf 0 0 0 rg (\205the verifier finds the returned pair's chain marked inside the arena range, correctly aborts, and the naive) Tj T* 0 Tw 4.913453 Tw (sweep keeps the data live. Tested at 20 consecutive escapes: 20 escapes reported, 0 resets,) Tj T* 0 Tw /F5 10 Tf (\(length) Tj ( ) Tj (escaped\)) Tj /F1 10 Tf ( = 50 after completion. The fall-through path is correct under load.) Tj T* ET +Q +Q + +endstream +endobj +134 0 obj +<< +/Length 9096 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET +q +1 0 0 1 57.02362 753.0236 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (6.6.2 What the Control Group Tells Us) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 735.0236 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The meta-GC makes three memory strategies co-resident in one binary, each with its own stats counter:) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 729.0236 cm +Q +q +1 0 0 1 57.02362 729.0236 cm +Q +q +1 0 0 1 57.02362 717.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F5 10 Tf 0 0 0 rg (gc-stats) Tj /F1 10 Tf ( ) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL ( ) Tj /F5 10 Tf (\(collections) Tj ( ) Tj (.) Tj ( ) Tj (live-bytes\)) Tj /F1 10 Tf ( \227 pressure-driven sweeps) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 711.0236 cm +Q +q +1 0 0 1 57.02362 699.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F5 10 Tf 0 0 0 rg (arena-stats) Tj /F1 10 Tf ( ) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL ( ) Tj /F5 10 Tf (\(calls) Tj ( ) Tj (resets) Tj ( ) Tj (escapes) Tj ( ) Tj (bytes-reclaimed\)) Tj /F1 10 Tf ( \227 arena outcomes) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 681.0236 cm +Q +q +1 0 0 1 57.02362 591.0236 cm +q +BT 1 0 0 1 0 74 Tm 1.957223 Tw 12 TL /F1 10 Tf 0 0 0 rg (On an arena-friendly workload \(transient allocation, scoped lifetime\) the arena hit rate is 100% and the) Tj T* 0 Tw .25389 Tw (full-sweep rate falls to 1. On an arena-hostile workload \(every iteration escapes\) the arena-stats show 100%) Tj T* 0 Tw .02755 Tw (escapes and the naive sweep carries the load, with correctness preserved. The ) Tj /F4 10 Tf (policy) Tj /F1 10 Tf ( \227 decide which to run) Tj T* 0 Tw 2.513647 Tw (at each exit \227 is ~370 lines of GNU assembler; the ) Tj /F4 10 Tf (mechanism) Tj /F1 10 Tf ( it decides between \(bump allocator,) Tj T* 0 Tw 2.75389 Tw (mark-sweep, bulk reset\) adds another ~300 lines. Together they form a concrete floor for any future) Tj T* 0 Tw 2.237025 Tw (memory-management proposal: if it costs more than 30% throughput, or buys less than 124\327 memory) Tj T* 0 Tw (reduction, or hits less than 100% on arena-friendly code, the naive baseline is already better.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 561.0236 cm +q +BT 1 0 0 1 0 14 Tm .018334 Tw 12 TL /F3 10 Tf 0 0 0 rg (Reproduce:) Tj /F1 10 Tf ( ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-gc) Tj /F1 10 Tf ( \(bump vs naive sweep\) and ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-gc-arena) Tj /F1 10 Tf ( \(naive sweep vs arena) Tj T* 0 Tw (fast path\). Sources: ) Tj /F5 10 Tf (tests/bench-gc-memory.sh) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (tests/bench-gc-arena.sh) Tj /F1 10 Tf (.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 529.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (7. Portal: Feedback Across Time) Tj T* ET Q Q q -1 0 0 1 57.02362 201.8236 cm +1 0 0 1 57.02362 485.8236 cm q BT 1 0 0 1 0 26 Tm .17989 Tw 12 TL /F1 10 Tf 0 0 0 rg (A continuation is feedback within a process. A portal is feedback across processes. Same primitive, different) Tj T* 0 Tw 1.06631 Tw (scope: capture machine state, serialize it, reload it elsewhere, resume. Lumbda ships three portal formats) Tj T* 0 Tw (with different tradeoffs & constituencies.) Tj T* ET Q Q q -1 0 0 1 57.02362 195.8236 cm +1 0 0 1 57.02362 479.8236 cm Q q -1 0 0 1 57.02362 99.82362 cm +1 0 0 1 57.02362 383.8236 cm q 1 1 1 rg n 0 96 481.2283 -18 re f* @@ -4470,38 +5138,29 @@ Q Q Q q -1 0 0 1 57.02362 99.82362 cm +1 0 0 1 57.02362 383.8236 cm Q q -1 0 0 1 57.02362 69.82362 cm +1 0 0 1 57.02362 353.8236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .49713 Tw (Times measured on a 4-binding workload \(int + list + string + fib\(30\) result\) excluding process startup. "k" =) Tj T* 0 Tw (continuation.) Tj T* ET Q Q - -endstream -endobj -127 0 obj -<< -/Length 9354 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 753.0236 cm +1 0 0 1 57.02362 327.8236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (7.1 S-Expression Portal \227 the Portable One) Tj T* ET Q Q q -1 0 0 1 57.02362 735.0236 cm +1 0 0 1 57.02362 309.8236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (The most boring format is the most portable. An S-expression portal is a sequence of ) Tj /F5 10 Tf (define) Tj /F1 10 Tf ( forms:) Tj T* ET Q Q q -1 0 0 1 57.02362 665.8236 cm +1 0 0 1 57.02362 240.6236 cm q q 1 0 0 1 0 0 cm @@ -4522,35 +5181,44 @@ Q Q Q q -1 0 0 1 57.02362 633.8236 cm +1 0 0 1 57.02362 208.6236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .550522 Tw (Every Scheme implementation in the world can already read this. No schema, no decoder, no version field.) Tj T* 0 Tw (The file is a Scheme program; loading it is evaluating it.) Tj T* ET Q Q q -1 0 0 1 57.02362 579.8236 cm +1 0 0 1 57.02362 154.6236 cm q BT 1 0 0 1 0 38 Tm .702256 Tw 12 TL /F3 10 Tf 0 0 0 rg (The key insight: the language IS the interchange format.) Tj /F1 10 Tf ( We did not design this. R. Kent Dybvig didn't.) Tj T* 0 Tw 1.188726 Tw (John McCarthy didn't. It is a structural consequence of homoiconicity: if the syntax of the language is the) Tj T* 0 Tw 5.458196 Tw (syntax of its data structures, then data serialization is language serialization. Portability across) Tj T* 0 Tw (implementations is free \227 it arrives with the parser.) Tj T* ET Q Q q -1 0 0 1 57.02362 537.8236 cm +1 0 0 1 57.02362 112.6236 cm q BT 1 0 0 1 0 26 Tm .511772 Tw 12 TL /F1 10 Tf 0 0 0 rg (Producer side: assemble the file with ) Tj /F5 10 Tf (\(display) Tj ( ) Tj (...\)) Tj /F1 10 Tf ( & ) Tj /F5 10 Tf (\(write) Tj ( ) Tj (...\)) Tj /F1 10 Tf ( to an output port. Consumer side:) Tj T* 0 Tw 3.693453 Tw /F5 10 Tf (\(load) Tj ( ) Tj ("file.sexp"\)) Tj /F1 10 Tf (. Both sides exist in every implementation, giving us a 3\3273 matrix of valid) Tj T* 0 Tw (exchanges.) Tj T* ET Q Q q -1 0 0 1 57.02362 511.8236 cm +1 0 0 1 57.02362 86.62362 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (7.2 Cross-Implementation Exchange Matrix) Tj T* ET Q Q q -1 0 0 1 57.02362 499.8236 cm +1 0 0 1 57.02362 74.62362 cm Q + +endstream +endobj +135 0 obj +<< +/Length 9291 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 409.8236 cm +1 0 0 1 57.02362 675.0236 cm q 1 1 1 rg n 0 90 481.2283 -18 re f* @@ -4612,21 +5280,21 @@ q 1 0 0 1 112.9396 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 237.7025 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 362.4654 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -4640,21 +5308,21 @@ q 1 0 0 1 112.9396 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 237.7025 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 362.4654 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -4668,21 +5336,21 @@ q 1 0 0 1 112.9396 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 237.7025 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 362.4654 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -4705,41 +5373,41 @@ Q Q Q q -1 0 0 1 57.02362 409.8236 cm +1 0 0 1 57.02362 675.0236 cm Q q -1 0 0 1 57.02362 379.8236 cm +1 0 0 1 57.02362 645.0236 cm q BT 1 0 0 1 0 14 Tm 3.901835 Tw 12 TL /F1 10 Tf 0 0 0 rg (9 of 9. Verified by ) Tj /F5 10 Tf (tests/portal-cross-test.sh) Tj /F1 10 Tf ( \() Tj /F3 10 Tf (make bench-portal-cross) Tj /F1 10 Tf (\). Same file, same) Tj T* 0 Tw (semantics, regardless of which process produced it.) Tj T* ET Q Q q -1 0 0 1 57.02362 337.8236 cm +1 0 0 1 57.02362 603.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .526019 Tw (This matters because it defeats the "version lock-in" trap. If the JSON portal were the only option, a Python) Tj T* 0 Tw 2.478453 Tw (3.15 producer could emit structures a C consumer couldn't parse. With S-expression portals, the only) Tj T* 0 Tw (dependency is a parser that handles the subset of forms in the file. Every implementation already has one.) Tj T* ET Q Q q -1 0 0 1 57.02362 311.8236 cm +1 0 0 1 57.02362 577.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (7.3 JSON Portal \227 Graph-Aware, Continuation-Preserving) Tj T* ET Q Q q -1 0 0 1 57.02362 281.8236 cm +1 0 0 1 57.02362 547.0236 cm q BT 1 0 0 1 0 14 Tm .373453 Tw 12 TL /F1 10 Tf 0 0 0 rg (When you need to preserve shared references, cycles, closures, or a ) Tj /F4 10 Tf (live continuation) Tj /F1 10 Tf (, S-expressions aren't) Tj T* 0 Tw (enough. The JSON portal \(Python & C\) performs graph-aware serialization:) Tj T* ET Q Q q -1 0 0 1 57.02362 275.8236 cm +1 0 0 1 57.02362 541.0236 cm Q q -1 0 0 1 57.02362 275.8236 cm +1 0 0 1 57.02362 541.0236 cm Q q -1 0 0 1 57.02362 263.8236 cm +1 0 0 1 57.02362 529.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -4761,10 +5429,10 @@ Q Q Q q -1 0 0 1 57.02362 257.8236 cm +1 0 0 1 57.02362 523.0236 cm Q q -1 0 0 1 57.02362 245.8236 cm +1 0 0 1 57.02362 511.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -4787,10 +5455,10 @@ Q Q Q q -1 0 0 1 57.02362 239.8236 cm +1 0 0 1 57.02362 505.0236 cm Q q -1 0 0 1 57.02362 227.8236 cm +1 0 0 1 57.02362 493.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -4812,10 +5480,10 @@ Q Q Q q -1 0 0 1 57.02362 221.8236 cm +1 0 0 1 57.02362 487.0236 cm Q q -1 0 0 1 57.02362 209.8236 cm +1 0 0 1 57.02362 475.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -4838,10 +5506,10 @@ Q Q Q q -1 0 0 1 57.02362 203.8236 cm +1 0 0 1 57.02362 469.0236 cm Q q -1 0 0 1 57.02362 191.8236 cm +1 0 0 1 57.02362 457.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -4864,22 +5532,22 @@ Q Q Q q -1 0 0 1 57.02362 173.8236 cm +1 0 0 1 57.02362 439.0236 cm Q q -1 0 0 1 57.02362 143.8236 cm +1 0 0 1 57.02362 409.0236 cm q BT 1 0 0 1 0 14 Tm 2.974168 Tw 12 TL /F1 10 Tf 0 0 0 rg (Deserialization is two-pass: shell pass creates empty object shells & assigns reference IDs, fill pass) Tj T* 0 Tw (populates pointers & values. This handles the closure-that-captures-itself pattern cleanly.) Tj T* ET Q Q q -1 0 0 1 57.02362 101.8236 cm +1 0 0 1 57.02362 367.0236 cm q BT 1 0 0 1 0 26 Tm 4.719816 Tw 12 TL /F1 10 Tf 0 0 0 rg (During VM execution, ) Tj /F5 10 Tf (portal-checkpoint!) Tj /F1 10 Tf ( triggers at ) Tj /F5 10 Tf (OP_JUMP) Tj /F1 10 Tf ( & ) Tj /F5 10 Tf (OP_TAIL_CALL) Tj /F1 10 Tf ( instructions,) Tj T* 0 Tw 1.439168 Tw (capturing the current continuation, serializing it to a ) Tj /F5 10 Tf (.portal) Tj /F1 10 Tf ( file, & continuing. Resumption restores the) Tj T* 0 Tw (saved state & continues execution from the exact instruction where the checkpoint occurred.) Tj T* ET Q Q q -1 0 0 1 57.02362 71.02362 cm +1 0 0 1 57.02362 336.2236 cm q q 1 0 0 1 0 0 cm @@ -4899,36 +5567,27 @@ Q Q Q Q - -endstream -endobj -128 0 obj -<< -/Length 9310 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 753.0236 cm +1 0 0 1 57.02362 316.2236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The computation does not need to restart from the beginning.) Tj T* ET Q Q q -1 0 0 1 57.02362 727.0236 cm +1 0 0 1 57.02362 290.2236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (7.4 Binary Heap Dump \227 the Fast One) Tj T* ET Q Q q -1 0 0 1 57.02362 697.0236 cm +1 0 0 1 57.02362 260.2236 cm q BT 1 0 0 1 0 14 Tm .755197 Tw 12 TL /F1 10 Tf 0 0 0 rg (The asm implementation ships a direct-dump portal: write the raw heap bytes, the ) Tj /F5 10 Tf (r14) Tj /F1 10 Tf ( \(env\) & ) Tj /F5 10 Tf (r15) Tj /F1 10 Tf ( \(bump) Tj T* 0 Tw (pointer\) registers, the heap base address, & a magic header. No parsing, no encoding.) Tj T* ET Q Q q -1 0 0 1 57.02362 599.0236 cm +1 0 0 1 57.02362 162.2236 cm q q 1 0 0 1 0 0 cm @@ -4949,34 +5608,43 @@ Q Q Q q -1 0 0 1 57.02362 555.0236 cm +1 0 0 1 57.02362 118.2236 cm q BT 1 0 0 1 0 26 Tm 1.387739 Tw 12 TL /F1 10 Tf 0 0 0 rg (Sub-millisecond save & resume. The MAP_FIXED trick is why it works across processes: because every) Tj T* 0 Tw 1.474556 Tw (pointer inside the heap is an absolute address, resuming at a different address would require relocation.) Tj T* 0 Tw (Mapping at the same address keeps pointers live.) Tj T* ET Q Q q -1 0 0 1 57.02362 501.0236 cm +1 0 0 1 57.02362 64.22362 cm q BT 1 0 0 1 0 38 Tm 1.067739 Tw 12 TL /F1 10 Tf 0 0 0 rg (Constraints: same architecture, same binary layout, same process model. An asm binary portal written on) Tj T* 0 Tw .022545 Tw (one box resumes on another x86_64 Linux box running the same asm binary. It does not resume on a rebuilt) Tj T* 0 Tw 1.065522 Tw (binary \227 the BSS-resident symbol table ) Tj /F5 10 Tf (sym_table) Tj /F1 10 Tf ( is not in the heap dump, so interned symbols would) Tj T* 0 Tw (need to be reinterned. That's the price of trivial serialization.) Tj T* ET Q Q + +endstream +endobj +136 0 obj +<< +/Length 9918 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 475.0236 cm +1 0 0 1 57.02362 753.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (7.5 Cross-Process Benchmarks) Tj T* ET Q Q q -1 0 0 1 57.02362 433.0236 cm +1 0 0 1 57.02362 711.0236 cm q BT 1 0 0 1 0 26 Tm 2.703647 Tw 12 TL /F1 10 Tf 0 0 0 rg (Producer process A saves state to a file; consumer process B starts fresh, loads the file, continues.) Tj T* 0 Tw 10.67759 Tw (Wall-clock time for both processes end-to-end, 50 iterations, same-laptop. ) Tj /F3 10 Tf (Reproduce:) Tj /F1 10 Tf T* 0 Tw /F5 10 Tf (make) Tj ( ) Tj (bench-portal) Tj /F1 10 Tf ( \(source: ) Tj /F5 10 Tf (tests/portal-benchmark.sh) Tj /F1 10 Tf (\).) Tj T* ET Q Q q -1 0 0 1 57.02362 427.0236 cm +1 0 0 1 57.02362 705.0236 cm Q q -1 0 0 1 57.02362 229.0236 cm +1 0 0 1 57.02362 507.0236 cm q 1 1 1 rg n 0 198 481.2283 -18 re f* @@ -5182,64 +5850,72 @@ Q Q Q q -1 0 0 1 57.02362 229.0236 cm +1 0 0 1 57.02362 507.0236 cm Q q -1 0 0 1 57.02362 187.0236 cm +1 0 0 1 57.02362 465.0236 cm q BT 1 0 0 1 0 26 Tm .698334 Tw 12 TL /F1 10 Tf 0 0 0 rg (The asm) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL (asm cross-process is ~160\327 faster than Python) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL (Python. The binary & S-expression portals are) Tj T* 0 Tw .812256 Tw (within 10% of each other on this workload \227 the bottleneck is process startup, not serialization. For larger) Tj T* 0 Tw (heaps the binary format pulls further ahead; for portability, S-expression always wins.) Tj T* ET Q Q q -1 0 0 1 57.02362 161.0236 cm +1 0 0 1 57.02362 439.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (7.6 Mismatch Cases: Graceful Degradation) Tj T* ET Q Q q -1 0 0 1 57.02362 143.0236 cm +1 0 0 1 57.02362 421.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (A usable persistence layer fails well. What happens when the consumer meets unexpected input?) Tj T* ET Q Q q -1 0 0 1 57.02362 137.0236 cm +1 0 0 1 57.02362 415.0236 cm Q q -1 0 0 1 57.02362 71.02362 cm +1 0 0 1 57.02362 265.0236 cm q 1 1 1 rg -n 0 66 481.2283 -18 re f* +n 0 150 481.2283 -18 re f* .878431 .878431 .878431 rg -n 0 48 481.2283 -18 re f* +n 0 132 481.2283 -18 re f* 1 1 1 rg -n 0 30 481.2283 -30 re f* +n 0 114 481.2283 -30 re f* +.878431 .878431 .878431 rg +n 0 84 481.2283 -30 re f* +1 1 1 rg +n 0 54 481.2283 -18 re f* +.878431 .878431 .878431 rg +n 0 36 481.2283 -18 re f* +1 1 1 rg +n 0 18 481.2283 -18 re f* 0 0 0 rg BT /F3 10 Tf 12 TL ET q -1 0 0 1 6 51 cm +1 0 0 1 6 135 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 96.07173 0 Td (Input) Tj T* -96.07173 0 Td ET Q Q q -1 0 0 1 234.5835 51 cm +1 0 0 1 234.5835 135 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 19.16248 0 Td (Python) Tj T* -19.16248 0 Td ET Q Q q -1 0 0 1 318.7984 51 cm +1 0 0 1 318.7984 135 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 32.49748 0 Td (C) Tj T* -32.49748 0 Td ET Q Q q -1 0 0 1 403.0134 51 cm +1 0 0 1 403.0134 135 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 26.10248 0 Td (asm) Tj T* -26.10248 0 Td ET @@ -5248,99 +5924,60 @@ Q 0 0 0 rg BT /F1 10 Tf 12 TL ET q -1 0 0 1 6 33 cm +1 0 0 1 6 117 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Empty file) Tj T* ET Q Q q -1 0 0 1 234.5835 33 cm +1 0 0 1 234.5835 117 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (continue) Tj T* ET Q Q q -1 0 0 1 318.7984 33 cm +1 0 0 1 318.7984 117 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (continue) Tj T* ET Q Q q -1 0 0 1 403.0134 33 cm +1 0 0 1 403.0134 117 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (continue) Tj T* ET Q Q q -1 0 0 1 6 15 cm +1 0 0 1 6 99 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Missing file) Tj T* ET Q Q q -1 0 0 1 234.5835 3 cm +1 0 0 1 234.5835 87 cm q BT 1 0 0 1 0 14 Tm 12 TL /F5 10 Tf 0 0 0 rg (file) Tj ( ) Tj (not) Tj T* (found:) Tj ( ) Tj (\205) Tj T* ET Q Q q -1 0 0 1 318.7984 15 cm +1 0 0 1 318.7984 99 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL (error: \205) Tj T* ET Q Q q -1 0 0 1 403.0134 15 cm +1 0 0 1 403.0134 99 cm q BT 1 0 0 1 0 2 Tm 12 TL /F5 10 Tf 0 0 0 rg (#f) Tj /F1 10 Tf ( + continue) Tj T* ET Q Q q -1 J -1 j -0 0 0 RG -.25 w -n 0 0 m 481.2283 0 l S -n 0 48 m 481.2283 48 l S -n 0 30 m 481.2283 30 l S -n 228.5835 0 m 228.5835 66 l S -n 312.7984 0 m 312.7984 66 l S -n 397.0134 0 m 397.0134 66 l S -n 0 66 m 481.2283 66 l S -n 0 0 m 0 66 l S -n 481.2283 0 m 481.2283 66 l S -Q -Q -Q - -endstream -endobj -129 0 obj -<< -/Length 7061 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET -q -1 0 0 1 57.02362 681.0236 cm -q -1 1 1 rg -n 0 84 481.2283 -30 re f* -.878431 .878431 .878431 rg -n 0 54 481.2283 -18 re f* -1 1 1 rg -n 0 36 481.2283 -18 re f* -.878431 .878431 .878431 rg -n 0 18 481.2283 -18 re f* -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q 1 0 0 1 6 69 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Truncated sexp \() Tj /F5 10 Tf (\(define) Tj ( ) Tj (x) Tj /F1 10 Tf (\)) Tj T* ET @@ -5454,36 +6091,48 @@ q 1 j 0 0 0 RG .25 w +n 0 132 m 481.2283 132 l S +n 0 114 m 481.2283 114 l S n 0 84 m 481.2283 84 l S n 0 54 m 481.2283 54 l S n 0 36 m 481.2283 36 l S n 0 18 m 481.2283 18 l S -n 228.5835 0 m 228.5835 84 l S -n 312.7984 0 m 312.7984 84 l S -n 397.0134 0 m 397.0134 84 l S -n 0 0 m 0 84 l S -n 481.2283 0 m 481.2283 84 l S +n 228.5835 0 m 228.5835 150 l S +n 312.7984 0 m 312.7984 150 l S +n 397.0134 0 m 397.0134 150 l S +n 0 150 m 481.2283 150 l S n 0 0 m 481.2283 0 l S +n 0 0 m 0 150 l S +n 481.2283 0 m 481.2283 150 l S Q Q Q q -1 0 0 1 57.02362 681.0236 cm +1 0 0 1 57.02362 265.0236 cm Q q -1 0 0 1 57.02362 615.0236 cm +1 0 0 1 57.02362 199.0236 cm q BT 1 0 0 1 0 50 Tm 1.476556 Tw 12 TL /F1 10 Tf 0 0 0 rg (All defects surfaced & fixed during benchmark development: an asm segfault on ) Tj /F5 10 Tf (\(define) Tj ( ) Tj (x\)) Tj /F1 10 Tf ( without a) Tj T* 0 Tw 1.838453 Tw (value \(now binds to ) Tj /F5 10 Tf (VOID) Tj /F1 10 Tf (\), an asm portal-resume that accepted short headers \(now verifies ) Tj /F5 10 Tf (sys_read) Tj /F1 10 Tf T* 0 Tw 1.204272 Tw (returned a full 48 bytes & sanity-checks heap metadata\), a Python ) Tj /F5 10 Tf (file) Tj ( ) Tj (not) Tj ( ) Tj (found) Tj /F1 10 Tf ( error reporting the) Tj T* 0 Tw 1.304862 Tw (outer script path instead of the inner missing file \(now uses ) Tj /F5 10 Tf (FileNotFoundError.filename) Tj /F1 10 Tf (\). Graceful) Tj T* 0 Tw (degradation is not free; it is tested.) Tj T* ET Q Q + +endstream +endobj +137 0 obj +<< +/Length 6103 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 589.0236 cm +1 0 0 1 57.02362 753.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (7.7 Use Case: Distributed Primality Testing) Tj T* ET Q Q q -1 0 0 1 57.02362 462.2236 cm +1 0 0 1 57.02362 626.2236 cm q q 1 0 0 1 0 0 cm @@ -5503,38 +6152,38 @@ Q Q Q q -1 0 0 1 57.02362 418.2236 cm +1 0 0 1 57.02362 582.2236 cm q BT 1 0 0 1 0 26 Tm 1.105522 Tw 12 TL /F1 10 Tf 0 0 0 rg (Machine A starts the computation. Every 10,000 iterations, it writes a checkpoint. Machine B picks up the) Tj T* 0 Tw 2.790642 Tw /F5 10 Tf (.portal) Tj /F1 10 Tf ( file & continues from the last checkpoint. The computation migrates without either machine) Tj T* 0 Tw (needing to know about the other. Feedback \227 the continuation \227 carries the entire execution context.) Tj T* ET Q Q q -1 0 0 1 57.02362 387.0236 cm +1 0 0 1 57.02362 551.0236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (8. The EML Universality Proof) Tj T* ET Q Q q -1 0 0 1 57.02362 355.0236 cm +1 0 0 1 57.02362 519.0236 cm q BT 1 0 0 1 0 14 Tm 3.669104 Tw 12 TL /F1 10 Tf 0 0 0 rg (Lumbda ships with a mathematical proof that a single operator generates all elementary functions:) Tj T* 0 Tw /F5 10 Tf (eml\(x,) Tj ( ) Tj (y\)) Tj ( ) Tj (=) Tj ( ) Tj (exp\(x\)) Tj ( ) Tj (-) Tj ( ) Tj (ln\(y\)) Tj /F1 10 Tf (.) Tj T* ET Q Q q -1 0 0 1 57.02362 337.0236 cm +1 0 0 1 57.02362 501.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Reference: "All elementary functions from a single operator" \(arXiv:2603.21852v2\).) Tj T* ET Q Q q -1 0 0 1 57.02362 311.0236 cm +1 0 0 1 57.02362 475.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (8.1 The Operator) Tj T* ET Q Q q -1 0 0 1 57.02362 280.2236 cm +1 0 0 1 57.02362 444.2236 cm q q 1 0 0 1 0 0 cm @@ -5555,19 +6204,19 @@ Q Q Q q -1 0 0 1 57.02362 260.2236 cm +1 0 0 1 57.02362 424.2236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (With this operator & the constant ) Tj /F5 10 Tf (1) Tj /F1 10 Tf (, the following derivation chain constructs every elementary function:) Tj T* ET Q Q q -1 0 0 1 57.02362 234.2236 cm +1 0 0 1 57.02362 398.2236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (8.2 Stage 1: Core Functions \(Depth 1--3\)) Tj T* ET Q Q q -1 0 0 1 57.02362 184.2236 cm +1 0 0 1 57.02362 348.2236 cm q q 1 0 0 1 0 0 cm @@ -5588,28 +6237,19 @@ Q Q Q q -1 0 0 1 57.02362 140.2236 cm +1 0 0 1 57.02362 304.2236 cm q BT 1 0 0 1 0 26 Tm 16.01403 Tw 12 TL /F3 10 Tf 0 0 0 rg (Proof of ln recovery) Tj /F1 10 Tf (: Let ) Tj /F5 10 Tf (a) Tj ( ) Tj (=) Tj ( ) Tj (eml\(1,x\)) Tj ( ) Tj (=) Tj ( ) Tj (e) Tj ( ) Tj (-) Tj ( ) Tj (ln\(x\)) Tj /F1 10 Tf (. Then) Tj T* 0 Tw 28.85979 Tw /F5 10 Tf (eml\(a,) Tj ( ) Tj (1\)) Tj ( ) Tj (=) Tj ( ) Tj (exp\(e) Tj ( ) Tj (-) Tj ( ) Tj (ln\(x\)\)) Tj ( ) Tj (=) Tj ( ) Tj (exp\(e\)/x) Tj /F1 10 Tf (. Then) Tj T* 0 Tw /F5 10 Tf (eml\(1,) Tj ( ) Tj (exp\(e\)/x\)) Tj ( ) Tj (=) Tj ( ) Tj (e) Tj ( ) Tj (-) Tj ( ) Tj (ln\(exp\(e\)/x\)) Tj ( ) Tj (=) Tj ( ) Tj (e) Tj ( ) Tj (-) Tj ( ) Tj (e) Tj ( ) Tj (+) Tj ( ) Tj (ln\(x\)) Tj ( ) Tj (=) Tj ( ) Tj (ln\(x\)) Tj /F1 10 Tf (.) Tj T* ET Q Q - -endstream -endobj -130 0 obj -<< -/Length 9324 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 753.0236 cm +1 0 0 1 57.02362 278.2236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (8.3 Stage 2: Arithmetic) Tj T* ET Q Q q -1 0 0 1 57.02362 664.6236 cm +1 0 0 1 57.02362 189.8236 cm q q 1 0 0 1 0 0 cm @@ -5629,13 +6269,13 @@ Q Q Q q -1 0 0 1 57.02362 638.6236 cm +1 0 0 1 57.02362 163.8236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (8.4 Stage 3: Complex Plane Access) Tj T* ET Q Q q -1 0 0 1 57.02362 588.6236 cm +1 0 0 1 57.02362 113.8236 cm q q 1 0 0 1 0 0 cm @@ -5656,19 +6296,28 @@ Q Q Q q -1 0 0 1 57.02362 556.6236 cm +1 0 0 1 57.02362 81.82362 cm q BT 1 0 0 1 0 14 Tm .253071 Tw 12 TL /F1 10 Tf 0 0 0 rg (The key insight: ) Tj /F5 10 Tf (ln) Tj /F1 10 Tf ( of a negative number enters the complex plane. Since we can construct ) Tj /F5 10 Tf (-1) Tj /F1 10 Tf ( from eml via) Tj T* 0 Tw (the subtraction chain, ) Tj /F5 10 Tf (ln\(-1\)) Tj /F1 10 Tf ( yields ) Tj /F5 10 Tf (i) Tj /F6 10 Tf 12 TL (p) Tj /F5 10 Tf 12 TL /F1 10 Tf (, from which ) Tj /F5 10 Tf /F6 10 Tf 12 TL (p) Tj /F5 10 Tf 12 TL /F1 10 Tf ( & ) Tj /F5 10 Tf (i) Tj /F1 10 Tf ( follow.) Tj T* ET Q Q + +endstream +endobj +138 0 obj +<< +/Length 9468 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 530.6236 cm +1 0 0 1 57.02362 753.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (8.5 Stage 4: Trigonometry via Euler) Tj T* ET Q Q q -1 0 0 1 57.02362 480.6236 cm +1 0 0 1 57.02362 703.0236 cm q q 1 0 0 1 0 0 cm @@ -5689,29 +6338,29 @@ Q Q Q q -1 0 0 1 57.02362 460.6236 cm +1 0 0 1 57.02362 683.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (All trigonometric functions follow from complex exponentials, which follow from ) Tj /F5 10 Tf (exp) Tj /F1 10 Tf (, which follows from ) Tj /F5 10 Tf (eml) Tj /F1 10 Tf (.) Tj T* ET Q Q q -1 0 0 1 57.02362 434.6236 cm +1 0 0 1 57.02362 657.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (8.6 Verification & Friction Analysis) Tj T* ET Q Q q -1 0 0 1 57.02362 416.6236 cm +1 0 0 1 57.02362 639.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The proof is verified at three levels, with dramatically different friction:) Tj T* ET Q Q q -1 0 0 1 57.02362 410.6236 cm +1 0 0 1 57.02362 633.0236 cm Q q -1 0 0 1 57.02362 338.6236 cm +1 0 0 1 57.02362 561.0236 cm q 1 1 1 rg n 0 72 481.2283 -18 re f* @@ -5855,34 +6504,34 @@ Q Q Q q -1 0 0 1 57.02362 338.6236 cm +1 0 0 1 57.02362 561.0236 cm Q q -1 0 0 1 57.02362 296.6236 cm +1 0 0 1 57.02362 519.0236 cm q BT 1 0 0 1 0 26 Tm .395596 Tw 12 TL /F3 10 Tf 0 0 0 rg (The formal proof is 40x faster than the brute-force search & provides mathematical certainty instead) Tj T* 0 Tw 1.066027 Tw (of floating-point tolerance.) Tj /F1 10 Tf ( This is MOAD-0001 \(the sedimentary defect\) at the proof methodology layer:) Tj T* 0 Tw (O\(N\262\) search friction where O\(1\) algebraic reasoning suffices.) Tj T* ET Q Q q -1 0 0 1 57.02362 242.6236 cm +1 0 0 1 57.02362 465.0236 cm q BT 1 0 0 1 0 38 Tm 2.309862 Tw 12 TL /F1 10 Tf 0 0 0 rg (The numerical approaches enumerate all pairwise EML compositions at each depth, comparing results) Tj T* 0 Tw .653022 Tw (against target functions. This grows quadratically with the number of known values. The Lean proof does 5) Tj T* 0 Tw .327397 Tw (algebraic rewrites, each applying an axiom \() Tj /F5 10 Tf (exp\(ln\(x\)\)) Tj ( ) Tj (=) Tj ( ) Tj (x) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (ln\(exp\(x\)\)) Tj ( ) Tj (=) Tj ( ) Tj (x) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (ln\(1\)) Tj ( ) Tj (=) Tj ( ) Tj (0) Tj /F1 10 Tf (\). The type) Tj T* 0 Tw (checker confirms each rewrite in microseconds. No search. No tolerance. No conjecture dependency.) Tj T* ET Q Q q -1 0 0 1 57.02362 188.6236 cm +1 0 0 1 57.02362 411.0236 cm q BT 1 0 0 1 0 38 Tm 3.571147 Tw 12 TL /F3 10 Tf 0 0 0 rg (Lesson) Tj /F1 10 Tf (: The fastest path to truth is not computation \227 it is understanding. When you know ) Tj /F4 10 Tf (why) Tj /F1 10 Tf T* 0 Tw .96189 Tw /F5 10 Tf (eml\(1,) Tj ( ) Tj (eml\(eml\(1,x\),) Tj ( ) Tj (1\)\)) Tj ( ) Tj (=) Tj ( ) Tj (ln\(x\)) Tj /F1 10 Tf (, you verify it in microseconds. When you don't, you search for) Tj T* 0 Tw 1.513223 Tw (hours. Proof assistants eliminate the quadratic friction of verification. They are the hash set to numerical) Tj T* 0 Tw (analysis's nested loop.) Tj T* ET Q Q q -1 0 0 1 57.02362 182.6236 cm +1 0 0 1 57.02362 405.0236 cm Q q -1 0 0 1 57.02362 182.6236 cm +1 0 0 1 57.02362 405.0236 cm Q q -1 0 0 1 57.02362 146.6236 cm +1 0 0 1 57.02362 369.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -5904,10 +6553,10 @@ Q Q Q q -1 0 0 1 57.02362 140.6236 cm +1 0 0 1 57.02362 363.0236 cm Q q -1 0 0 1 57.02362 104.6236 cm +1 0 0 1 57.02362 327.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -5929,10 +6578,10 @@ Q Q Q q -1 0 0 1 57.02362 98.62362 cm +1 0 0 1 57.02362 321.0236 cm Q q -1 0 0 1 57.02362 74.62362 cm +1 0 0 1 57.02362 297.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -5954,19 +6603,10 @@ Q Q Q q -1 0 0 1 57.02362 74.62362 cm +1 0 0 1 57.02362 297.0236 cm Q - -endstream -endobj -131 0 obj -<< -/Length 8943 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 703.8236 cm +1 0 0 1 57.02362 227.8236 cm q q 1 0 0 1 0 0 cm @@ -5987,19 +6627,19 @@ Q Q Q q -1 0 0 1 57.02362 659.8236 cm +1 0 0 1 57.02362 183.8236 cm q BT 1 0 0 1 0 26 Tm 4.138556 Tw 12 TL /F1 10 Tf 0 0 0 rg (The Lean proof operates over abstract ) Tj /F5 10 Tf (exp) Tj /F1 10 Tf ( & ) Tj /F5 10 Tf (ln) Tj /F1 10 Tf ( functions with the axioms ) Tj /F5 10 Tf (exp\(ln\(x\)\)) Tj ( ) Tj (=) Tj ( ) Tj (x) Tj /F1 10 Tf (,) Tj T* 0 Tw 2.484897 Tw /F5 10 Tf (ln\(exp\(x\)\)) Tj ( ) Tj (=) Tj ( ) Tj (x) Tj /F1 10 Tf (, & ) Tj /F5 10 Tf (ln\(1\)) Tj ( ) Tj (=) Tj ( ) Tj (0) Tj /F1 10 Tf (. This makes the result independent of any particular real number) Tj T* 0 Tw (implementation.) Tj T* ET Q Q q -1 0 0 1 57.02362 653.8236 cm +1 0 0 1 57.02362 177.8236 cm Q q -1 0 0 1 57.02362 653.8236 cm +1 0 0 1 57.02362 177.8236 cm Q q -1 0 0 1 57.02362 569.8236 cm +1 0 0 1 57.02362 93.82362 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -6021,10 +6661,19 @@ Q Q Q q -1 0 0 1 57.02362 569.8236 cm +1 0 0 1 57.02362 93.82362 cm Q + +endstream +endobj +139 0 obj +<< +/Length 10209 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 491.0236 cm +1 0 0 1 57.02362 694.2236 cm q q 1 0 0 1 0 0 cm @@ -6045,16 +6694,16 @@ Q Q Q q -1 0 0 1 57.02362 423.0236 cm +1 0 0 1 57.02362 626.2236 cm q BT 1 0 0 1 0 50 Tm 4.101411 Tw 12 TL /F3 10 Tf 0 0 0 rg (Verification speed: Lean vs Lumbda tiers, both cold and cached.) Tj /F1 10 Tf ( Same five theorems, same) Tj T* 0 Tw 1.757362 Tw (symbolic-rewrite strategy. The Lumbda checker now implements its own cached-replay path that mirrors) Tj T* 0 Tw .258797 Tw (Lean's: write a small artifact after a successful run; on subsequent runs, trust the artifact if the magic header) Tj T* 0 Tw .759029 Tw (matches and skip re-verification. ) Tj /F5 10 Tf (rm) Tj ( ) Tj (-f) Tj ( ) Tj (/tmp/lumbda-eml.cache) Tj /F1 10 Tf ( forces a cold re-check \(analogous to) Tj T* 0 Tw /F5 10 Tf (lake) Tj ( ) Tj (clean) Tj /F1 10 Tf (\). Best of 3 on the i5-8350U:) Tj T* ET Q Q q -1 0 0 1 57.02362 417.0236 cm +1 0 0 1 57.02362 620.2236 cm Q q -1 0 0 1 57.02362 309.0236 cm +1 0 0 1 57.02362 512.2236 cm q 1 1 1 rg n 0 108 481.2283 -18 re f* @@ -6238,96 +6887,102 @@ Q Q Q q -1 0 0 1 57.02362 309.0236 cm +1 0 0 1 57.02362 512.2236 cm Q q -1 0 0 1 57.02362 243.0236 cm +1 0 0 1 57.02362 446.2236 cm q BT 1 0 0 1 0 50 Tm .204897 Tw 12 TL /F1 10 Tf 0 0 0 rg (Two comparisons matter. ) Tj /F3 10 Tf (Cold vs cold) Tj /F1 10 Tf ( is the honest end-to-end compare: Lumbda asm \(46 ms\) verifies the) Tj T* 0 Tw -0.127156 Tw (proof ) Tj /F3 10 Tf (~16\327 faster than Lean's cold rebuild) Tj /F1 10 Tf ( \(722 ms\) on the same hardware, because Lumbda doesn't link a) Tj T* 0 Tw .315636 Tw (compiled binary or spin up a kernel \227 it just runs a rewriter over five small terms. ) Tj /F3 10 Tf (Cached vs cached) Tj /F1 10 Tf ( is the) Tj T* 0 Tw 1.150966 Tw (throwaway benchmark but still interesting: Lumbda asm at 7 ms vs Lean at 5 ms, within 1.5\327, on what is) Tj T* 0 Tw (essentially "read a file and print five lines.") Tj T* ET Q Q q -1 0 0 1 57.02362 177.0236 cm +1 0 0 1 57.02362 380.2236 cm q BT 1 0 0 1 0 50 Tm .526772 Tw 12 TL /F3 10 Tf 0 0 0 rg (All four Lumbda tiers verify the proof.) Tj /F1 10 Tf ( A C ) Tj /F5 10 Tf (--fast) Tj /F1 10 Tf ( bytecode-compiler bug originally caused the final tier) Tj T* 0 Tw 10.06986 Tw (to hang on the rewriter's named-let loop; narrowed to a minimal reproduction \(see) Tj T* 0 Tw 1.693196 Tw /F5 10 Tf (c/TODO-named-let-bytecode.md) Tj /F1 10 Tf (\) and worked around in the proof file by using an internal recursive) Tj T* 0 Tw .558138 Tw /F5 10 Tf (define) Tj /F1 10 Tf ( in place of the offending named-let. All four tiers now complete in under 100 ms cold. ) Tj /F3 10 Tf (Reproduce:) Tj /F1 10 Tf T* 0 Tw /F5 10 Tf (make) Tj ( ) Tj (bench-proof) Tj /F1 10 Tf ( \(source: ) Tj /F5 10 Tf (tests/bench-proof.sh) Tj /F1 10 Tf (\).) Tj T* ET Q Q q -1 0 0 1 57.02362 87.02362 cm +1 0 0 1 57.02362 290.2236 cm q -BT 1 0 0 1 0 74 Tm 2.513543 Tw 12 TL /F3 10 Tf 0 0 0 rg (First machine-checked treatment.) Tj /F1 10 Tf ( The original paper \(Odrzywo) Tj /F7 10 Tf 12 TL (n) Tj /F1 10 Tf 12 TL (ek, arXiv:2603.21852v2, 2026-04-04\)) Tj T* 0 Tw .313453 Tw (presents the EML universality claim analytically \227 pure LaTeX mathematics, no formal tool. The companion) Tj T* 0 Tw .549873 Tw (Zenodo artifact is symbolic-regression / gradient-optimization code, not a verification. To our knowledge the) Tj T* 0 Tw 1.856373 Tw (Lean 4 proof shipped in this repo is the first machine-checked treatment of the EML identities, and the) Tj T* 0 Tw .247122 Tw (accompanying Lumbda-native checker is the first self-hosted machine-checked version. Five theorems, zero) Tj T* 0 Tw .234556 Tw /F5 10 Tf (sorry) Tj /F1 10 Tf (, no Mathlib dependency \227 40\327 faster than the brute-force numerical search it replaced, and carrying) Tj T* 0 Tw (the additional guarantee that no implementation quirk of floating point can ever break the conclusion.) Tj T* ET +BT 1 0 0 1 0 74 Tm 2.513543 Tw 12 TL /F3 10 Tf 0 0 0 rg (First machine-checked treatment.) Tj /F1 10 Tf ( The original paper \(Odrzywo) Tj /F8 10 Tf 12 TL (n) Tj /F1 10 Tf 12 TL (ek, arXiv:2603.21852v2, 2026-04-04\)) Tj T* 0 Tw .313453 Tw (presents the EML universality claim analytically \227 pure LaTeX mathematics, no formal tool. The companion) Tj T* 0 Tw .549873 Tw (Zenodo artifact is symbolic-regression / gradient-optimization code, not a verification. To our knowledge the) Tj T* 0 Tw 1.856373 Tw (Lean 4 proof shipped in this repo is the first machine-checked treatment of the EML identities, and the) Tj T* 0 Tw .247122 Tw (accompanying Lumbda-native checker is the first self-hosted machine-checked version. Five theorems, zero) Tj T* 0 Tw .234556 Tw /F5 10 Tf (sorry) Tj /F1 10 Tf (, no Mathlib dependency \227 40\327 faster than the brute-force numerical search it replaced, and carrying) Tj T* 0 Tw (the additional guarantee that no implementation quirk of floating point can ever break the conclusion.) Tj T* ET Q Q - -endstream -endobj -132 0 obj -<< -/Length 8391 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 751.8236 cm +1 0 0 1 57.02362 259.0236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (9. Language Coverage) Tj T* ET Q Q q -1 0 0 1 57.02362 731.8236 cm +1 0 0 1 57.02362 239.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Lumbda implements a near-complete R7RS-small Scheme:) Tj T* ET Q Q q -1 0 0 1 57.02362 677.8236 cm +1 0 0 1 57.02362 185.0236 cm q BT 1 0 0 1 0 38 Tm 1.369223 Tw 12 TL /F3 10 Tf 0 0 0 rg (Special forms) Tj /F1 10 Tf ( \(32\): ) Tj /F5 10 Tf (define) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (set!) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (lambda) Tj /F1 10 Tf (, ) Tj /F5 10 Tf /F6 10 Tf 12 TL (l) Tj /F5 10 Tf 12 TL /F1 10 Tf (, ) Tj /F5 10 Tf (if) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (cond) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (case) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (and) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (or) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (when) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (unless) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (begin) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (let) Tj /F1 10 Tf (,) Tj T* 0 Tw 10.15262 Tw /F5 10 Tf (let*) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (letrec) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (letrec*) Tj /F1 10 Tf (, named-let, ) Tj /F5 10 Tf (do) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (quasiquote) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (define-macro) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (define-syntax) Tj /F1 10 Tf (,) Tj T* 0 Tw 3.646907 Tw /F5 10 Tf (syntax-rules) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (let-syntax) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (letrec-syntax) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (apply) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (values) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (call/cc) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (dynamic-wind) Tj /F1 10 Tf (,) Tj T* 0 Tw /F5 10 Tf (guard) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (parameterize) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (load) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (error) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (module) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (import) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (define-record-type) Tj /F1 10 Tf (.) Tj T* ET Q Q q -1 0 0 1 57.02362 647.8236 cm +1 0 0 1 57.02362 155.0236 cm q BT 1 0 0 1 0 14 Tm .150642 Tw 12 TL /F3 10 Tf 0 0 0 rg (Built-in functions) Tj /F1 10 Tf ( \(100+\): Full arithmetic \(exact rationals, inexact reals, trigonometry\), pairs & lists \(SRFI-1\),) Tj T* 0 Tw (strings \(mutable\), characters, vectors, hash tables, I/O \(ports, file system\), system interface, Python interop.) Tj T* ET Q Q q -1 0 0 1 57.02362 617.8236 cm +1 0 0 1 57.02362 125.0236 cm q BT 1 0 0 1 0 14 Tm 2.274835 Tw 12 TL /F3 10 Tf 0 0 0 rg (Hygienic macros) Tj /F1 10 Tf (: ) Tj /F5 10 Tf (syntax-rules) Tj /F1 10 Tf ( with ellipsis \() Tj /F5 10 Tf (...) Tj /F1 10 Tf (\) support. Pattern matching, template instantiation,) Tj T* 0 Tw (proper hygiene. Also ) Tj /F5 10 Tf (define-macro) Tj /F1 10 Tf ( for procedural macros.) Tj T* ET Q Q q -1 0 0 1 57.02362 587.8236 cm +1 0 0 1 57.02362 95.02362 cm q BT 1 0 0 1 0 14 Tm 1.958835 Tw 12 TL /F3 10 Tf 0 0 0 rg (Standard library) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (stdlib.lsp) Tj /F1 10 Tf (, 385 lines\): Additional macros \() Tj /F5 10 Tf (swap!) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (fluid-let) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (while) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (dotimes) Tj /F1 10 Tf (\),) Tj T* 0 Tw (utility functions, simple object system, SRFI-2/8/64 test framework.) Tj T* ET Q Q q -1 0 0 1 57.02362 533.8236 cm +1 0 0 1 57.02362 65.02362 cm q -BT 1 0 0 1 0 38 Tm 1.569862 Tw 12 TL /F3 10 Tf 0 0 0 rg (Test suite) Tj /F1 10 Tf (: 974 verified assertions covering lexing, parsing, special forms, bytecode compilation, macros) Tj T* 0 Tw .214835 Tw (\(hygienic & procedural\), continuations, generators, record types, modules, arithmetic, higher-order functions,) Tj T* 0 Tw 4.238031 Tw (error handling, portal serialization, cross-implementation portal exchange, file I/O parity, & graceful) Tj T* 0 Tw (degradation on mismatched or corrupt input.) Tj T* ET +BT 1 0 0 1 0 14 Tm 1.569862 Tw 12 TL /F3 10 Tf 0 0 0 rg (Test suite) Tj /F1 10 Tf (: 974 verified assertions covering lexing, parsing, special forms, bytecode compilation, macros) Tj T* 0 Tw .214835 Tw (\(hygienic & procedural\), continuations, generators, record types, modules, arithmetic, higher-order functions,) Tj T* 0 Tw ET +Q +Q + +endstream +endobj +140 0 obj +<< +/Length 4959 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET +q +1 0 0 1 57.02362 741.0236 cm +q +BT 1 0 0 1 0 14 Tm 4.238031 Tw 12 TL /F1 10 Tf 0 0 0 rg (error handling, portal serialization, cross-implementation portal exchange, file I/O parity, & graceful) Tj T* 0 Tw (degradation on mismatched or corrupt input.) Tj T* ET Q Q q -1 0 0 1 57.02362 502.6236 cm +1 0 0 1 57.02362 709.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (10. Relationship to Companion Papers) Tj T* ET Q Q q -1 0 0 1 57.02362 482.6236 cm +1 0 0 1 57.02362 689.8236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Lumbda forms one piece of a larger permacomputer machine learning stack:) Tj T* ET Q Q q -1 0 0 1 57.02362 476.6236 cm +1 0 0 1 57.02362 683.8236 cm Q q -1 0 0 1 57.02362 338.6236 cm +1 0 0 1 57.02362 545.8236 cm q 1 1 1 rg n 0 138 481.2283 -18 re f* @@ -6464,25 +7119,25 @@ Q Q Q q -1 0 0 1 57.02362 338.6236 cm +1 0 0 1 57.02362 545.8236 cm Q q -1 0 0 1 57.02362 284.6236 cm +1 0 0 1 57.02362 491.8236 cm q BT 1 0 0 1 0 38 Tm 1.738453 Tw 12 TL /F1 10 Tf 0 0 0 rg (Lumbda provides the runtime layer: a language that can checkpoint its own execution, migrate between) Tj T* 0 Tw 3.051529 Tw (machines, & resume from serialized state. The portal system enables distributed computation across) Tj T* 0 Tw 1.058196 Tw (permacomputer nodes. Categorization & feedback activities could run inside Lumbda's VM, with ) Tj /F5 10 Tf (call/cc) Tj /F1 10 Tf T* 0 Tw (providing the state machine transitions & portal providing persistence.) Tj T* ET Q Q q -1 0 0 1 57.02362 253.4236 cm +1 0 0 1 57.02362 460.6236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (11. Four Implementation Tiers, One Language) Tj T* ET Q Q q -1 0 0 1 57.02362 239.4236 cm +1 0 0 1 57.02362 446.6236 cm Q q -1 0 0 1 57.02362 227.4236 cm +1 0 0 1 57.02362 434.6236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -6498,21 +7153,21 @@ Q Q Q q -1 0 0 1 57.02362 227.4236 cm +1 0 0 1 57.02362 434.6236 cm Q q -1 0 0 1 57.02362 149.4236 cm +1 0 0 1 57.02362 356.6236 cm q BT 1 0 0 1 0 62 Tm .778726 Tw 12 TL /F1 10 Tf 0 0 0 rg (Lumbda ships as four independently built tiers: a Python bytecode VM, a C tree-walker, a C bytecode VM,) Tj T* 0 Tw 2.18402 Tw (and a C x86_64 JIT \(the last three packaged in one binary, selectable by flag\), plus a pure-assembly) Tj T* 0 Tw .931492 Tw (interpreter. Each tier is MOAD-isolated from the others \227 a defect surfaced in one is fixed in that tier, not) Tj T* 0 Tw 2.098556 Tw (patched across shared infrastructure. All four run the same ) Tj /F5 10 Tf (.lsp) Tj /F1 10 Tf ( source files and exchange the same) Tj T* 0 Tw 2.266213 Tw (S-expression portal format; \24711.3-\24711.5 demonstrate this end-to-end across sockets, relays, and HTTP) Tj T* 0 Tw (portal transfers.) Tj T* ET Q Q q -1 0 0 1 57.02362 141.4236 cm +1 0 0 1 57.02362 348.6236 cm Q endstream endobj -133 0 obj +141 0 obj << /Length 1782 >> @@ -6576,9 +7231,9 @@ Q endstream endobj -134 0 obj +142 0 obj << -/Length 13005 +/Length 13280 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET @@ -6866,7 +7521,7 @@ q 1 0 0 1 146.8473 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (4,968) Tj T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (6,645) Tj T* ET Q Q q @@ -6943,81 +7598,31 @@ BT 1 0 0 1 0 62 Tm .118138 Tw 12 TL /F3 10 Tf 0 0 0 rg (The JIT runs Scheme fast Q Q q -1 0 0 1 57.02362 381.0236 cm +1 0 0 1 57.02362 345.0236 cm q -BT 1 0 0 1 0 98 Tm .274168 Tw 12 TL /F3 10 Tf 0 0 0 rg (The assembly implementation proves the language runs on bare metal.) Tj /F1 10 Tf ( 4,968 lines of ) Tj /F3 10 Tf (GNU assembler) Tj T* 0 Tw .459104 Tw (\(GAS, AT) Tj (&) Tj (T syntax\)) Tj /F1 10 Tf (, ) Tj /F3 10 Tf (22 KB stripped binary) Tj /F1 10 Tf (, zero external dependencies. Fourteen Linux syscalls \() Tj /F5 10 Tf (read) Tj /F1 10 Tf (,) Tj T* 0 Tw 7.484835 Tw /F5 10 Tf (write) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (open) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (close) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (lseek) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (mmap) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (munmap) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (socket) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (connect) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (accept) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (bind) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (listen) Tj /F1 10 Tf (,) Tj T* 0 Tw 2.397122 Tw /F5 10 Tf (clock_gettime) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (exit) Tj /F1 10 Tf (\) \227 no libc, no stdlib. A bump allocator with ) Tj /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf (/) Tj /F5 10 Tf (heap-restore) Tj /F1 10 Tf T* 0 Tw .123835 Tw (arena primitives, tag-in-low-3-bits values, ) Tj /F3 10 Tf (91 builtins) Tj /F1 10 Tf ( \(including ) Tj /F5 10 Tf (load) Tj /F1 10 Tf (, ports, ) Tj /F5 10 Tf (write-file) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (file-) Tj (>) Tj (string) Tj /F1 10 Tf (,) Tj T* 0 Tw 6.731043 Tw /F5 10 Tf (portal-save) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (portal-resume) Tj /F1 10 Tf (, the six ) Tj /F5 10 Tf (tcp-*) Tj /F1 10 Tf ( socket primitives, ) Tj /F5 10 Tf (read-from-string) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf (,) Tj T* 0 Tw 6.946027 Tw /F5 10 Tf (symbol-) Tj (>) Tj (string) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (current-time-ms) Tj /F1 10 Tf (\), & TCO via ) Tj /F5 10 Tf (jmp) Tj /F1 10 Tf (. It runs ) Tj /F5 10 Tf (\(ack) Tj ( ) Tj (3) Tj ( ) Tj (4\)) Tj ( ) Tj (=) Tj ( ) Tj (125) Tj /F1 10 Tf ( &) Tj T* 0 Tw 2.133223 Tw /F5 10 Tf (\(fib) Tj ( ) Tj (35\)) Tj ( ) Tj (=) Tj ( ) Tj (9227465) Tj /F1 10 Tf ( correctly, serves HTTP at ) Tj /F3 10 Tf (2,994 req/s) Tj /F1 10 Tf (, and survives indefinitely with flat O\(1\)) Tj T* 0 Tw (memory when the programmer uses the snapshot/restore arena in a per-request loop.) Tj T* ET +BT 1 0 0 1 0 134 Tm .274168 Tw 12 TL /F3 10 Tf 0 0 0 rg (The assembly implementation proves the language runs on bare metal.) Tj /F1 10 Tf ( 6,645 lines of ) Tj /F3 10 Tf (GNU assembler) Tj T* 0 Tw .321147 Tw (\(GAS, AT) Tj (&) Tj (T syntax\)) Tj /F1 10 Tf (, assembled with ) Tj /F5 10 Tf (as) Tj /F1 10 Tf ( and linked with ) Tj /F5 10 Tf (ld) Tj /F1 10 Tf ( from GNU binutils; ~22 KB stripped bump-only) Tj T* 0 Tw .295257 Tw (binary, ~25 KB stripped under the optional ) Tj /F5 10 Tf (GC_NAIVE) Tj /F1 10 Tf ( assemble flag. Zero external dependencies. Fourteen) Tj T* 0 Tw 1.588196 Tw (Linux syscalls \() Tj /F5 10 Tf (read) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (write) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (open) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (close) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (lseek) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (mmap) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (munmap) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (socket) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (connect) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (accept) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (bind) Tj /F1 10 Tf (,) Tj T* 0 Tw 12.76076 Tw /F5 10 Tf (listen) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (clock_gettime) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (exit) Tj /F1 10 Tf (\) \227 no libc, no stdlib. A bump allocator with) Tj T* 0 Tw 1.343543 Tw /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf (/) Tj /F5 10 Tf (heap-restore) Tj /F1 10 Tf ( arena primitives, tag-in-low-3-bits values, ) Tj /F3 10 Tf (95+ builtins) Tj /F1 10 Tf ( \(including ) Tj /F5 10 Tf (load) Tj /F1 10 Tf (,) Tj T* 0 Tw 1.562038 Tw (ports, ) Tj /F5 10 Tf (write-file) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (file-) Tj (>) Tj (string) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (portal-save) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (portal-resume) Tj /F1 10 Tf (, the six ) Tj /F5 10 Tf (tcp-*) Tj /F1 10 Tf ( socket primitives,) Tj T* 0 Tw 7.344724 Tw /F5 10 Tf (read-from-string) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (symbol-) Tj (>) Tj (string) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (current-time-ms) Tj /F1 10 Tf (, native ) Tj /F5 10 Tf (hash-table-*) Tj /F1 10 Tf ( and) Tj T* 0 Tw .773223 Tw /F5 10 Tf (hash-set-*) Tj /F1 10 Tf (, plus ) Tj /F5 10 Tf (with-arena) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (gc-collect) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (gc-stats) Tj /F1 10 Tf ( / ) Tj /F5 10 Tf (arena-stats) Tj /F1 10 Tf ( in the GC build\), & TCO via) Tj T* 0 Tw 1.293071 Tw /F5 10 Tf (jmp) Tj /F1 10 Tf (. It runs ) Tj /F5 10 Tf (\(ack) Tj ( ) Tj (3) Tj ( ) Tj (4\)) Tj ( ) Tj (=) Tj ( ) Tj (125) Tj /F1 10 Tf ( & ) Tj /F5 10 Tf (\(fib) Tj ( ) Tj (35\)) Tj ( ) Tj (=) Tj ( ) Tj (9227465) Tj /F1 10 Tf ( correctly, serves HTTP at ) Tj /F3 10 Tf (2,994 req/s) Tj /F1 10 Tf (, and) Tj T* 0 Tw 1.62589 Tw (survives indefinitely with flat O\(1\) memory via either the snapshot/restore arena in a per-request loop ) Tj /F4 10 Tf (or) Tj /F1 10 Tf T* 0 Tw /F5 10 Tf (\(with-arena) Tj ( ) Tj (thunk\)) Tj /F1 10 Tf ( under the collecting build \(see \2476.6\).) Tj T* ET Q Q q -1 0 0 1 57.02362 327.0236 cm +1 0 0 1 57.02362 291.0236 cm q BT 1 0 0 1 0 38 Tm 2.546213 Tw 12 TL /F3 10 Tf 0 0 0 rg (The bytecode VM delivers 7--19\327 speedup over tree-walking.) Tj /F1 10 Tf ( The Python implementation compiles) Tj T* 0 Tw .411147 Tw (Scheme to 40 opcodes \(plus 20 specialized & 5 superinstructions\), executed on an explicit frame stack with) Tj T* 0 Tw 1.206213 Tw (inline caching, constant folding, & peephole optimization. Full first-class continuations \(multi-shot, upward\)) Tj T* 0 Tw (enable generators, coroutines, & machine state migration via portal.) Tj T* ET Q Q q -1 0 0 1 57.02362 301.0236 cm +1 0 0 1 57.02362 265.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (11.1 Test Coverage) Tj T* ET Q Q q -1 0 0 1 57.02362 283.0236 cm +1 0 0 1 57.02362 247.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (975 verified assertions) Tj /F1 10 Tf ( across all implementations, all green under ) Tj /F5 10 Tf (make) Tj ( ) Tj (test-all) Tj /F1 10 Tf (:) Tj T* ET Q Q q -1 0 0 1 57.02362 277.0236 cm -Q -q -1 0 0 1 57.02362 277.0236 cm -Q -q -1 0 0 1 57.02362 265.0236 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Python unit + integration: ) Tj /F3 10 Tf (571 tests) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (tests.py) Tj /F1 10 Tf (\)) Tj T* ET -Q -Q -q -Q -Q -Q -q -1 0 0 1 57.02362 259.0236 cm -Q -q -1 0 0 1 57.02362 247.0236 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (C unit + integration + JIT + continuations + portal: ) Tj /F3 10 Tf (83 tests) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (c/test.c) Tj /F1 10 Tf (\)) Tj T* ET -Q -Q -q -Q -Q +1 0 0 1 57.02362 241.0236 cm Q q 1 0 0 1 57.02362 241.0236 cm @@ -7037,7 +7642,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Assembly unit + integration + functional: ) Tj /F3 10 Tf (132 tests) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (asm/test.sh) Tj /F1 10 Tf (\)) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Python unit + integration: ) Tj /F3 10 Tf (571 tests) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (tests.py) Tj /F1 10 Tf (\)) Tj T* ET Q Q q @@ -7062,6 +7667,56 @@ Q q 1 0 0 1 23 -3 cm q +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (C unit + integration + JIT + continuations + portal: ) Tj /F3 10 Tf (83 tests) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (c/test.c) Tj /F1 10 Tf (\)) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 205.0236 cm +Q +q +1 0 0 1 57.02362 193.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Assembly unit + integration + functional: ) Tj /F3 10 Tf (132 tests) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (asm/test.sh) Tj /F1 10 Tf (\)) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 187.0236 cm +Q +q +1 0 0 1 57.02362 175.0236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Shared functional \(same ) Tj /F5 10 Tf (.lsp) Tj /F1 10 Tf ( in Python + C\): ) Tj /F3 10 Tf (189 tests) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (tests/functional.lsp) Tj /F1 10 Tf (\)) Tj T* ET Q Q @@ -7070,47 +7725,47 @@ Q Q Q q -1 0 0 1 57.02362 193.0236 cm +1 0 0 1 57.02362 157.0236 cm Q q -1 0 0 1 57.02362 151.0236 cm +1 0 0 1 57.02362 115.0236 cm q BT 1 0 0 1 0 26 Tm .98631 Tw 12 TL /F1 10 Tf 0 0 0 rg (The shared functional suite matters: it runs byte-identical Scheme source through two different runtimes &) Tj T* 0 Tw .353432 Tw (compares output. Python & C agree 189 times per run. When they disagree, that tells us something specific) Tj T* 0 Tw (& actionable.) Tj T* ET Q Q q -1 0 0 1 57.02362 121.0236 cm +1 0 0 1 57.02362 85.02362 cm q BT 1 0 0 1 0 14 Tm 3.001043 Tw 12 TL /F1 10 Tf 0 0 0 rg (Cross-implementation portal exchange is verified separately: ) Tj /F5 10 Tf (tests/portal-cross-test.sh) Tj /F1 10 Tf ( runs 9) Tj T* 0 Tw (producer\327consumer combinations. All 9 green.) Tj T* ET Q Q + +endstream +endobj +143 0 obj +<< +/Length 16605 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 95.02362 cm +1 0 0 1 57.02362 753.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (11.2 File I/O Parity) Tj T* ET Q Q q -1 0 0 1 57.02362 65.02362 cm +1 0 0 1 57.02362 723.0236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .155596 Tw (All three implementations share the same minimal file I/O vocabulary \227 discovered necessary while building) Tj T* 0 Tw (the cross-impl portal:) Tj T* ET Q Q q -1 0 0 1 57.02362 62.69291 cm +1 0 0 1 57.02362 717.0236 cm Q - -endstream -endobj -135 0 obj -<< -/Length 16993 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 585.0236 cm +1 0 0 1 57.02362 537.0236 cm q 1 1 1 rg n 0 180 481.2283 -18 re f* @@ -7188,21 +7843,21 @@ q 1 0 0 1 285.7839 147 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 147 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 147 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7222,21 +7877,21 @@ q 1 0 0 1 285.7839 129 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 129 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 129 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7256,21 +7911,21 @@ q 1 0 0 1 285.7839 111 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 111 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 111 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7290,21 +7945,21 @@ q 1 0 0 1 285.7839 93 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 93 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 93 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7324,21 +7979,21 @@ q 1 0 0 1 285.7839 75 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 75 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 75 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7358,21 +8013,21 @@ q 1 0 0 1 285.7839 57 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 57 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 57 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7392,21 +8047,21 @@ q 1 0 0 1 285.7839 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7426,21 +8081,21 @@ q 1 0 0 1 285.7839 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7460,21 +8115,21 @@ q 1 0 0 1 285.7839 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 352.9321 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 420.0802 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7503,32 +8158,32 @@ Q Q Q q -1 0 0 1 57.02362 585.0236 cm +1 0 0 1 57.02362 537.0236 cm Q q -1 0 0 1 57.02362 519.0236 cm +1 0 0 1 57.02362 471.0236 cm q BT 1 0 0 1 0 50 Tm .254609 Tw 12 TL /F1 10 Tf 0 0 0 rg (The asm port representation deserves a note. Because all three tag bits are consumed by the existing value) Tj T* 0 Tw 4.102038 Tw (types \(int/pair/sym/closure/builtin/special/string/vector\), we encode ports as ) Tj /F5 10 Tf (SPECIAL) Tj /F1 10 Tf ( values ) Tj /F6 10 Tf 12 TL (\263) Tj /F1 10 Tf 12 TL ( 1000:) Tj T* 0 Tw 8.520835 Tw /F5 10 Tf (port_val) Tj ( ) Tj (=) Tj ( ) Tj (\(\(PORT_SPECIAL_BASE) Tj ( ) Tj (+) Tj ( ) Tj (fd\)) Tj ( ) Tj (<) Tj (<) Tj ( ) Tj (3\)) Tj ( ) Tj (|) Tj ( ) Tj (TAG_SPECIAL) Tj /F1 10 Tf (. Extraction is) Tj T* 0 Tw .162256 Tw /F5 10 Tf (fd) Tj ( ) Tj (=) Tj ( ) Tj (\(val) Tj ( ) Tj (>) Tj (>) Tj ( ) Tj (3\)) Tj ( ) Tj (-) Tj ( ) Tj (PORT_SPECIAL_BASE) Tj /F1 10 Tf (. ) Tj /F5 10 Tf (port?) Tj /F1 10 Tf ( is a range check. No tag expansion, no heap object,) Tj T* 0 Tw (no allocator pressure \227 the port is the file descriptor, wrapped.) Tj T* ET Q Q q -1 0 0 1 57.02362 493.0236 cm +1 0 0 1 57.02362 445.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (11.3 Sockets: One HTTP Server, Three Runtimes) Tj T* ET Q Q q -1 0 0 1 57.02362 475.0236 cm +1 0 0 1 57.02362 427.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Six primitives extend the file-I/O vocabulary to TCP:) Tj T* ET Q Q q -1 0 0 1 57.02362 469.0236 cm +1 0 0 1 57.02362 421.0236 cm Q q -1 0 0 1 57.02362 331.0236 cm +1 0 0 1 57.02362 283.0236 cm q 1 1 1 rg n 0 138 481.2283 -18 re f* @@ -7600,21 +8255,21 @@ q 1 0 0 1 333.6448 105 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 384.8393 105 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 436.0338 105 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7634,21 +8289,21 @@ q 1 0 0 1 333.6448 87 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 384.8393 87 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 436.0338 87 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7668,21 +8323,21 @@ q 1 0 0 1 333.6448 57 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 384.8393 57 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 436.0338 57 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7702,21 +8357,21 @@ q 1 0 0 1 333.6448 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 384.8393 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 436.0338 39 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7736,21 +8391,21 @@ q 1 0 0 1 333.6448 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 384.8393 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 436.0338 21 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7770,21 +8425,21 @@ q 1 0 0 1 333.6448 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 384.8393 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q 1 0 0 1 436.0338 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F7 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL /F8 10 Tf 12 TL (3) Tj /F1 10 Tf 12 TL T* ET Q Q q @@ -7810,22 +8465,22 @@ Q Q Q q -1 0 0 1 57.02362 331.0236 cm +1 0 0 1 57.02362 283.0236 cm Q q -1 0 0 1 57.02362 289.0236 cm +1 0 0 1 57.02362 241.0236 cm q BT 1 0 0 1 0 26 Tm .215176 Tw 12 TL /F1 10 Tf 0 0 0 rg (Sockets share the same port representation as files \227 in asm the fd is packed into ) Tj /F5 10 Tf (SPECIAL) Tj /F1 10 Tf ( values ) Tj /F6 10 Tf 12 TL (\263) Tj /F1 10 Tf 12 TL ( 1000,) Tj T* 0 Tw .794123 Tw (in Python + C the fd lives inside an existing ULPort struct. ) Tj /F5 10 Tf (read) Tj /F1 10 Tf (/) Tj /F5 10 Tf (write) Tj /F1 10 Tf ( unify because to Linux a socket is) Tj T* 0 Tw (just an fd.) Tj T* ET Q Q q -1 0 0 1 57.02362 259.0236 cm +1 0 0 1 57.02362 211.0236 cm q BT 1 0 0 1 0 14 Tm .886796 Tw 12 TL /F5 10 Tf 0 0 0 rg (examples/http-server.lsp) Tj /F1 10 Tf ( is a 90-line HTTP/1.0 server. It parses a request line, dispatches by path,) Tj T* 0 Tw (and returns 200/404 with Content-Length. The same file runs unmodified in all three impls:) Tj T* ET Q Q q -1 0 0 1 57.02362 209.0236 cm +1 0 0 1 57.02362 161.0236 cm q q 1 0 0 1 0 0 cm @@ -7845,43 +8500,39 @@ Q Q Q q -1 0 0 1 57.02362 153.0236 cm +1 0 0 1 57.02362 105.0236 cm q BT 1 0 0 1 0 38 Tm -0.093471 Tw 12 TL /F1 10 Tf 0 0 0 rg (The companion ) Tj /F5 10 Tf (examples/http-client-bench.lsp) Tj /F1 10 Tf ( is a 45-line load generator using only the six ) Tj /F5 10 Tf (tcp-*) Tj /F1 10 Tf T* 0 Tw 2.952577 Tw (primitives plus ) Tj /F5 10 Tf (current-time-ms) Tj /F1 10 Tf (. In-process client eliminates the ~2 ms/request fork overhead that) Tj T* 0 Tw 1.553486 Tw (curl-based benchmarks suffer, so real server throughput shows through. ) Tj /F3 10 Tf (Reproduce:) Tj /F1 10 Tf ( ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-web) Tj /F1 10 Tf T* 0 Tw (\(source: ) Tj /F5 10 Tf (tests/web-benchmark.sh) Tj /F1 10 Tf (\).) Tj T* ET Q Q q -1 0 0 1 57.02362 147.0236 cm +1 0 0 1 57.02362 99.02362 cm Q q -1 0 0 1 57.02362 75.02362 cm +1 0 0 1 57.02362 63.02362 cm q 1 1 1 rg -n 0 72 481.2283 -18 re f* -.878431 .878431 .878431 rg -n 0 54 481.2283 -18 re f* -1 1 1 rg n 0 36 481.2283 -18 re f* .878431 .878431 .878431 rg n 0 18 481.2283 -18 re f* 0 0 0 rg BT /F3 10 Tf 12 TL ET q -1 0 0 1 6 57 cm +1 0 0 1 6 21 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 111.934 0 Td (Pair) Tj T* -111.934 0 Td ET Q Q q -1 0 0 1 260.7679 57 cm +1 0 0 1 260.7679 21 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 18.3801 0 Td (Requests/sec) Tj T* -18.3801 0 Td ET Q Q q -1 0 0 1 373.9981 57 cm +1 0 0 1 373.9981 21 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 18.3801 0 Td (vs curl bench) Tj T* -18.3801 0 Td ET @@ -7890,66 +8541,24 @@ Q 0 0 0 rg BT /F1 10 Tf 12 TL ET q -1 0 0 1 6 39 cm +1 0 0 1 6 3 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Python server ) Tj /F6 10 Tf 12 TL (\254) Tj /F1 10 Tf 12 TL ( Python client) Tj T* ET Q Q q -1 0 0 1 260.7679 39 cm +1 0 0 1 260.7679 3 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (2,403) Tj T* ET Q Q q -1 0 0 1 373.9981 39 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (6.3\327) Tj T* ET -Q -Q -q -1 0 0 1 6 21 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (C server ) Tj /F6 10 Tf 12 TL (\254) Tj /F1 10 Tf 12 TL ( C client) Tj T* ET -Q -Q -q -1 0 0 1 260.7679 21 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (2,439) Tj T* ET -Q -Q -q -1 0 0 1 373.9981 21 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (6.4\327) Tj T* ET -Q -Q -q -1 0 0 1 6 3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (asm server ) Tj /F6 10 Tf 12 TL (\254) Tj /F1 10 Tf 12 TL ( asm client) Tj T* ET -Q -Q -q -1 0 0 1 260.7679 3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (2,994) Tj T* ET -Q -Q -q 1 0 0 1 373.9981 3 cm q 0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (7.8\327) Tj T* ET +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (6.3\327) Tj T* ET Q Q q @@ -7958,34 +8567,78 @@ q 0 0 0 RG .25 w n 0 0 m 481.2283 0 l S -n 0 54 m 481.2283 54 l S -n 0 36 m 481.2283 36 l S n 0 18 m 481.2283 18 l S -n 254.7679 0 m 254.7679 72 l S -n 367.9981 0 m 367.9981 72 l S -n 0 72 m 481.2283 72 l S -n 0 0 m 0 72 l S -n 481.2283 0 m 481.2283 72 l S +n 254.7679 0 m 254.7679 36 l S +n 367.9981 0 m 367.9981 36 l S +n 0 36 m 481.2283 36 l S +n 0 0 m 0 36 l S +n 481.2283 0 m 481.2283 36 l S Q Q Q endstream endobj -136 0 obj +144 0 obj << -/Length 9833 +/Length 10122 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 747.0236 cm +1 0 0 1 57.02362 711.0236 cm q 1 1 1 rg +n 0 54 481.2283 -18 re f* +.878431 .878431 .878431 rg +n 0 36 481.2283 -18 re f* +1 1 1 rg n 0 18 481.2283 -18 re f* 0 0 0 rg BT /F1 10 Tf 12 TL ET q +1 0 0 1 6 39 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (C server ) Tj /F6 10 Tf 12 TL (\254) Tj /F1 10 Tf 12 TL ( C client) Tj T* ET +Q +Q +q +1 0 0 1 260.7679 39 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (2,439) Tj T* ET +Q +Q +q +1 0 0 1 373.9981 39 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (6.4\327) Tj T* ET +Q +Q +q +1 0 0 1 6 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (asm server ) Tj /F6 10 Tf 12 TL (\254) Tj /F1 10 Tf 12 TL ( asm client) Tj T* ET +Q +Q +q +1 0 0 1 260.7679 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (2,994) Tj T* ET +Q +Q +q +1 0 0 1 373.9981 21 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (7.8\327) Tj T* ET +Q +Q +q 1 0 0 1 6 3 cm q 0 0 0 rg @@ -8011,41 +8664,43 @@ q 1 j 0 0 0 RG .25 w +n 0 54 m 481.2283 54 l S +n 0 36 m 481.2283 36 l S n 0 18 m 481.2283 18 l S -n 254.7679 0 m 254.7679 18 l S -n 367.9981 0 m 367.9981 18 l S -n 0 0 m 0 18 l S -n 481.2283 0 m 481.2283 18 l S +n 254.7679 0 m 254.7679 54 l S +n 367.9981 0 m 367.9981 54 l S +n 0 0 m 0 54 l S +n 481.2283 0 m 481.2283 54 l S n 0 0 m 481.2283 0 l S Q Q Q q -1 0 0 1 57.02362 747.0236 cm +1 0 0 1 57.02362 711.0236 cm Q q -1 0 0 1 57.02362 717.0236 cm +1 0 0 1 57.02362 681.0236 cm q BT 1 0 0 1 0 14 Tm .163917 Tw 12 TL /F1 10 Tf 0 0 0 rg (\(The asm-server / asm-client pair is the fastest cell here \227 2,994 req/s from a 22 KB binary, served & driven) Tj T* 0 Tw (by the same 22 KB binary.\)) Tj T* ET Q Q q -1 0 0 1 57.02362 675.0236 cm +1 0 0 1 57.02362 639.0236 cm q BT 1 0 0 1 0 26 Tm .050596 Tw 12 TL /F1 10 Tf 0 0 0 rg (For external comparison: ) Tj /F5 10 Tf (python3) Tj ( ) Tj (-m) Tj ( ) Tj (http.server) Tj /F1 10 Tf ( and busybox httpd both land around 382 req/s under) Tj T* 0 Tw 1.458334 Tw (a curl client on the same machine. When driven by an in-process client they hit the same ceiling as our) Tj T* 0 Tw (servers \227 the bottleneck has always been the client fork/exec, not the server.) Tj T* ET Q Q q -1 0 0 1 57.02362 621.0236 cm +1 0 0 1 57.02362 585.0236 cm q BT 1 0 0 1 0 38 Tm 2.116575 Tw 12 TL /F3 10 Tf 0 0 0 rg (What's remarkable is not the speed.) Tj /F1 10 Tf ( It is that a 22 KB binary with zero libc dependency and seven) Tj T* 0 Tw .829353 Tw (canonical Linux syscalls plus the socket family runs HTTP as fast as anything else on the machine, with a) Tj T* 0 Tw .829272 Tw (protocol handler written in portable Scheme that runs byte-for-byte in all three runtimes. The asm binary is) Tj T* 0 Tw /F3 10 Tf (96\327 smaller than busybox httpd) Tj /F1 10 Tf ( \(2.1 MB\) and ) Tj /F3 10 Tf (360\327 smaller than the Python interpreter) Tj /F1 10 Tf ( alone \(8 MB\).) Tj T* ET Q Q q -1 0 0 1 57.02362 613.0236 cm +1 0 0 1 57.02362 577.0236 cm Q q -1 0 0 1 57.02362 562.4202 cm +1 0 0 1 57.02362 526.4202 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8068,29 +8723,29 @@ Q Q Q q -1 0 0 1 57.02362 554.4202 cm +1 0 0 1 57.02362 518.4202 cm Q q -1 0 0 1 57.02362 528.4202 cm +1 0 0 1 57.02362 492.4202 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (11.4 S-expressions over Sockets: RPC, REPL, and Chains) Tj T* ET Q Q q -1 0 0 1 57.02362 486.4202 cm +1 0 0 1 57.02362 450.4202 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .048022 Tw (The HTTP example sends request-line bytes and response-line bytes. Those bytes don't have to be HTTP. If) Tj T* 0 Tw .199913 Tw (both sides of the wire speak Scheme, the wire protocol can be Scheme source itself \227 the reader is already) Tj T* 0 Tw (the parser you need. Two new builtins close the loop in all three impls:) Tj T* ET Q Q q -1 0 0 1 57.02362 480.4202 cm +1 0 0 1 57.02362 444.4202 cm Q q -1 0 0 1 57.02362 480.4202 cm +1 0 0 1 57.02362 444.4202 cm Q q -1 0 0 1 57.02362 468.4202 cm +1 0 0 1 57.02362 432.4202 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8112,10 +8767,10 @@ Q Q Q q -1 0 0 1 57.02362 462.4202 cm +1 0 0 1 57.02362 426.4202 cm Q q -1 0 0 1 57.02362 438.4202 cm +1 0 0 1 57.02362 402.4202 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8137,45 +8792,45 @@ Q Q Q q -1 0 0 1 57.02362 420.4202 cm +1 0 0 1 57.02362 384.4202 cm Q q -1 0 0 1 57.02362 402.4202 cm +1 0 0 1 57.02362 366.4202 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Two server patterns emerge:) Tj T* ET Q Q q -1 0 0 1 57.02362 360.4202 cm +1 0 0 1 57.02362 324.4202 cm q BT 1 0 0 1 0 26 Tm .027362 Tw 12 TL /F3 10 Tf 0 0 0 rg (Whitelisted RPC) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (examples/rpc-server.lsp) Tj /F1 10 Tf (, 90 lines\). The server reads a request sexp, dispatches by) Tj T* 0 Tw 1.114908 Tw (car on a closed set \() Tj /F5 10 Tf (ping) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (add) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (mul) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (fib) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (echo) Tj /F1 10 Tf (\), never calls ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf ( on client input. Safe by construction.) Tj T* 0 Tw (Uses ) Tj /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf (/) Tj /F5 10 Tf (heap-restore) Tj /F1 10 Tf ( for O\(1\) memory on asm.) Tj T* ET Q Q q -1 0 0 1 57.02362 294.4202 cm +1 0 0 1 57.02362 258.4202 cm q BT 1 0 0 1 0 50 Tm .076027 Tw 12 TL /F3 10 Tf 0 0 0 rg (Full remote REPL) Tj /F1 10 Tf ( \() Tj /F5 10 Tf (examples/repl-server.lsp) Tj /F1 10 Tf (, 70 lines\). The server reads a request sexp and passes) Tj T* 0 Tw .534609 Tw (it straight to ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf (. Persistent global env across connections; ) Tj /F5 10 Tf (\(define) Tj ( ) Tj (x) Tj ( ) Tj (42\)) Tj /F1 10 Tf ( from one call is visible from) Tj T* 0 Tw 1.463453 Tw (the next. DANGER: any reachable client can run arbitrary Scheme in-process. Deliberately does not use) Tj T* 0 Tw .876027 Tw /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf ( because remote ) Tj /F5 10 Tf (define) Tj /F1 10 Tf ( adds bindings past any snapshot point; the ) Tj /F5 10 Tf (ulimit) Tj ( ) Tj (-v) Tj /F1 10 Tf ( safety) Tj T* 0 Tw (cap \(512 MB\) backstops the leak.) Tj T* ET Q Q q -1 0 0 1 57.02362 264.4202 cm +1 0 0 1 57.02362 228.4202 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .909903 Tw (Both patterns run byte-identically in Python, C, and asm. The 3\3273 server\327client matrix is 9/9 green \227 any) Tj T* 0 Tw (runtime can host either side.) Tj T* ET Q Q q -1 0 0 1 57.02362 222.4202 cm +1 0 0 1 57.02362 186.4202 cm q BT 1 0 0 1 0 26 Tm 1.432577 Tw 12 TL /F3 10 Tf 0 0 0 rg (Chains: relays across runtimes.) Tj /F1 10 Tf ( A transparent relay \() Tj /F5 10 Tf (examples/rpc-relay.lsp) Tj /F1 10 Tf (, 50 lines\) accepts a) Tj T* 0 Tw 1.39989 Tw (connection, forwards the request bytes to a backend without parsing, relays the reply back. Because the) Tj T* 0 Tw (envelope is Scheme source and the relay never opens it, chains of arbitrary runtimes compose naturally:) Tj T* ET Q Q q -1 0 0 1 57.02362 216.4202 cm +1 0 0 1 57.02362 180.4202 cm Q q -1 0 0 1 57.02362 126.4202 cm +1 0 0 1 57.02362 90.42016 cm q 1 1 1 rg n 0 90 481.2283 -18 re f* @@ -8315,63 +8970,57 @@ Q Q Q q -1 0 0 1 57.02362 126.4202 cm -Q -q -1 0 0 1 57.02362 84.42016 cm -q -BT 1 0 0 1 0 26 Tm 1.815464 Tw 12 TL /F1 10 Tf 0 0 0 rg (Each relay hop costs ~650 \265s \(one full TCP round-trip + context switches on the same host, no actual) Tj T* 0 Tw 5.709882 Tw (parsing work\). The relay never allocates anything beyond a transient buffer; on asm it uses) Tj T* 0 Tw 1.25985 Tw /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf (/) Tj /F5 10 Tf (heap-restore) Tj /F1 10 Tf ( to keep memory flat under load. Four runtimes strung together through) Tj T* 0 Tw ET -Q +1 0 0 1 57.02362 90.42016 cm Q endstream endobj -137 0 obj +145 0 obj << -/Length 7387 +/Length 7013 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 741.0236 cm +1 0 0 1 57.02362 705.0236 cm q -BT 1 0 0 1 0 14 Tm 3.232362 Tw 12 TL /F1 10 Tf 0 0 0 rg (two relay machines, the same ) Tj /F5 10 Tf (.lsp) Tj /F1 10 Tf ( on every hop. ) Tj /F3 10 Tf (Reproduce:) Tj /F1 10 Tf ( ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-rpc-chain) Tj /F1 10 Tf ( \(source:) Tj T* 0 Tw /F5 10 Tf (tests/rpc-chain-bench.sh) Tj /F1 10 Tf (\).) Tj T* ET +BT 1 0 0 1 0 50 Tm 1.815464 Tw 12 TL /F1 10 Tf 0 0 0 rg (Each relay hop costs ~650 \265s \(one full TCP round-trip + context switches on the same host, no actual) Tj T* 0 Tw 5.709882 Tw (parsing work\). The relay never allocates anything beyond a transient buffer; on asm it uses) Tj T* 0 Tw 1.25985 Tw /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf (/) Tj /F5 10 Tf (heap-restore) Tj /F1 10 Tf ( to keep memory flat under load. Four runtimes strung together through) Tj T* 0 Tw 3.232362 Tw (two relay machines, the same ) Tj /F5 10 Tf (.lsp) Tj /F1 10 Tf ( on every hop. ) Tj /F3 10 Tf (Reproduce:) Tj /F1 10 Tf ( ) Tj /F5 10 Tf (make) Tj ( ) Tj (bench-rpc-chain) Tj /F1 10 Tf ( \(source:) Tj T* 0 Tw /F5 10 Tf (tests/rpc-chain-bench.sh) Tj /F1 10 Tf (\).) Tj T* ET Q Q q -1 0 0 1 57.02362 699.0236 cm +1 0 0 1 57.02362 663.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .921575 Tw (The result is not a performance story \227 it is a composition story. S-expressions are the envelope and the) Tj T* 0 Tw .649925 Tw (payload. A 22 KB binary can be a backend, a relay, a client, or any point in a chain; the protocol needs no) Tj T* 0 Tw (separate definition because the protocol IS the language.) Tj T* ET Q Q q -1 0 0 1 57.02362 673.0236 cm +1 0 0 1 57.02362 637.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (11.5 Portal over HTTP: State Transfer Between Machines) Tj T* ET Q Q q -1 0 0 1 57.02362 631.0236 cm +1 0 0 1 57.02362 595.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .273647 Tw (The HTTP server carries request bytes. The portal serializes machine state to bytes. Combine them: a node) Tj T* 0 Tw .711667 Tw (exposes its state as an HTTP endpoint, another node pulls that endpoint down and resumes. This was the) Tj T* 0 Tw (first item in \24713 Future Work \227 it is now a running demo.) Tj T* ET Q Q q -1 0 0 1 57.02362 589.0236 cm +1 0 0 1 57.02362 553.0236 cm q BT 1 0 0 1 0 26 Tm .363486 Tw 12 TL /F5 10 Tf 0 0 0 rg (examples/portal-http-server.lsp) Tj /F1 10 Tf ( holds some state \(integer counter, list, string, the result of fib\(30\)\)) Tj T* 0 Tw 1.391223 Tw (and answers ) Tj /F5 10 Tf (GET) Tj ( ) Tj (/portal) Tj /F1 10 Tf ( with an S-expression portal body \227 literally a sequence of ) Tj /F5 10 Tf (\(define) Tj ( ) Tj (...\)) Tj /F1 10 Tf T* 0 Tw (forms.) Tj T* ET Q Q q -1 0 0 1 57.02362 547.0236 cm +1 0 0 1 57.02362 511.0236 cm q BT 1 0 0 1 0 26 Tm 1.574395 Tw 12 TL /F5 10 Tf 0 0 0 rg (examples/portal-http-client.lsp) Tj /F1 10 Tf ( dials the endpoint, strips the HTTP headers, splits the body by) Tj T* 0 Tw 2.070759 Tw (newline, and for each non-empty, non-comment line calls ) Tj /F5 10 Tf (\(eval) Tj ( ) Tj (\(read-from-string) Tj ( ) Tj (line\)\)) Tj /F1 10 Tf (. The) Tj T* 0 Tw (remote bindings become local.) Tj T* ET Q Q q -1 0 0 1 57.02362 410.6236 cm +1 0 0 1 57.02362 374.6236 cm q q 1 0 0 1 0 0 cm @@ -8391,77 +9040,26 @@ Q Q Q q -1 0 0 1 57.02362 354.6236 cm +1 0 0 1 57.02362 318.6236 cm q BT 1 0 0 1 0 38 Tm .351019 Tw 12 TL /F3 10 Tf 0 0 0 rg (3\3273 matrix green:) Tj /F1 10 Tf ( Python/C/asm in any role \227 server or client or both \227 exchange state correctly. All nine) Tj T* 0 Tw 2.399835 Tw (combinations verified. ) Tj /F5 10 Tf (examples/portal-http-client.lsp) Tj /F1 10 Tf ( is 90 lines of portable Scheme; the full) Tj T* 0 Tw 3.611529 Tw (round-trip uses only the six ) Tj /F5 10 Tf (tcp-*) Tj /F1 10 Tf ( primitives plus ) Tj /F5 10 Tf (read-from-string) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf (, and standard string) Tj T* 0 Tw (manipulation.) Tj T* ET Q Q q -1 0 0 1 57.02362 300.6236 cm +1 0 0 1 57.02362 264.6236 cm q BT 1 0 0 1 0 38 Tm 1.468556 Tw 12 TL /F1 10 Tf 0 0 0 rg (The client needs ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf ( semantics that install define-bindings in the global env regardless of the dynamic) Tj T* 0 Tw .000439 Tw (scope of the ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf ( call. Python and C originally evaluated the ) Tj /F5 10 Tf (eval) Tj /F1 10 Tf ( result in the caller's env, which worked at) Tj T* 0 Tw .282545 Tw (top level but silently failed inside a helper function. A two-line fix in each \() Tj /F5 10 Tf (env) Tj ( ) Tj (=) Tj ( ) Tj (env.g) Tj /F1 10 Tf ( in Python's ) Tj /F5 10 Tf (leval) Tj /F1 10 Tf (,) Tj T* 0 Tw /F5 10 Tf (env) Tj ( ) Tj (=) Tj ( ) Tj (env-) Tj (>) Tj (global) Tj /F1 10 Tf ( in C's SYM_EVAL branch\) aligns both with asm's long-standing ) Tj /F5 10 Tf (bi_eval) Tj /F1 10 Tf ( behavior.) Tj T* ET Q Q q -1 0 0 1 57.02362 270.6236 cm +1 0 0 1 57.02362 234.6236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 3.231772 Tw (This is the closing demonstration of "feedback is all you need" extended across all four scopes. A) Tj T* 0 Tw (continuation-style value \227 here, a set of bindings \227 travels:) Tj T* ET Q Q q -1 0 0 1 57.02362 264.6236 cm -Q -q -1 0 0 1 57.02362 264.6236 cm -Q -q -1 0 0 1 57.02362 252.6236 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (within a process via ) Tj /F5 10 Tf (call/cc) Tj T* ET -Q -Q -q -Q -Q -Q -q -1 0 0 1 57.02362 246.6236 cm -Q -q -1 0 0 1 57.02362 234.6236 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (across processes on the same host via portal files) Tj T* ET -Q -Q -q -Q -Q +1 0 0 1 57.02362 228.6236 cm Q q 1 0 0 1 57.02362 228.6236 cm @@ -8481,8 +9079,7 @@ Q q 1 0 0 1 23 -3 cm q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (across implementations that share no binary compatibility via S-expression serialization) Tj T* ET +BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (within a process via ) Tj /F5 10 Tf (call/cc) Tj T* ET Q Q q @@ -8508,6 +9105,58 @@ q 1 0 0 1 23 -3 cm q 0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (across processes on the same host via portal files) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 192.6236 cm +Q +q +1 0 0 1 57.02362 180.6236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (across implementations that share no binary compatibility via S-expression serialization) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 174.6236 cm +Q +q +1 0 0 1 57.02362 162.6236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 -3 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (across machines via sockets \(HTTP, RPC, raw TCP\)) Tj T* ET Q Q @@ -8516,45 +9165,45 @@ Q Q Q q -1 0 0 1 57.02362 180.6236 cm +1 0 0 1 57.02362 144.6236 cm Q q -1 0 0 1 57.02362 150.6236 cm +1 0 0 1 57.02362 114.6236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .68135 Tw (The wire protocol and the language are the same artifact. A 22 KB binary can be any node in any chain of) Tj T* 0 Tw (any scope.) Tj T* ET Q Q + +endstream +endobj +146 0 obj +<< +/Length 6817 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 124.6236 cm +1 0 0 1 57.02362 753.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (11.6 heap-snapshot: The Arena Escape Hatch) Tj T* ET Q Q q -1 0 0 1 57.02362 82.62362 cm +1 0 0 1 57.02362 711.0236 cm q BT 1 0 0 1 0 26 Tm -0.12705 Tw 12 TL /F1 10 Tf 0 0 0 rg (The asm bump allocator has no GC. Every ) Tj /F5 10 Tf (string-append) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (tcp-recv) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (make-pair) Tj /F1 10 Tf (, or similar per-request) Tj T* 0 Tw 1.173647 Tw (allocation grows r15. Over a long-running server that is an unbounded leak \227 an incident on 2026-04-16) Tj T* 0 Tw (drove an asm server to 19.3 GB RSS before being killed.) Tj T* ET Q Q q -1 0 0 1 57.02362 64.62362 cm +1 0 0 1 57.02362 693.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Two new builtins fix this without introducing a collector:) Tj T* ET Q Q - -endstream -endobj -138 0 obj -<< -/Length 6545 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 732.6236 cm +1 0 0 1 57.02362 652.6236 cm q q 1 0 0 1 0 0 cm @@ -8574,21 +9223,21 @@ Q Q Q q -1 0 0 1 57.02362 700.6236 cm +1 0 0 1 57.02362 620.6236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .828138 Tw (Python + C expose the same names as no-ops \(their real GCs already handle this\). Portable Scheme can) Tj T* 0 Tw (call them unconditionally.) Tj T* ET Q Q q -1 0 0 1 57.02362 682.6236 cm +1 0 0 1 57.02362 602.6236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The pattern is narrow by design:) Tj T* ET Q Q q -1 0 0 1 57.02362 613.4236 cm +1 0 0 1 57.02362 533.4236 cm q q 1 0 0 1 0 0 cm @@ -8609,93 +9258,72 @@ Q Q Q q -1 0 0 1 57.02362 557.4236 cm +1 0 0 1 57.02362 477.4236 cm q 0 0 0 rg BT 1 0 0 1 0 38 Tm /F1 10 Tf 12 TL .76989 Tw (The snapshot is dangerously precise: anything allocated after the snap and still reachable after the restore) Tj T* 0 Tw -0.00705 Tw (becomes a dangling pointer. The canonical pattern \(HTTP request scope\) allocates per-request and discards) Tj T* 0 Tw 1.660522 Tw (per-request \227 nothing escapes. Measured asm RSS with this pattern: 88 KB initial, 100 KB after 1,100) Tj T* 0 Tw (requests. Flat.) Tj T* ET Q Q q -1 0 0 1 57.02362 515.4236 cm +1 0 0 1 57.02362 435.4236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .241019 Tw (This is not a general-purpose allocator. It is an escape hatch the programmer uses when they can prove the) Tj T* 0 Tw 1.593647 Tw (scope boundary. For general programs on asm, the heap still grows. For the HTTP server pattern, O\(1\)) Tj T* 0 Tw (memory costs two lines of code.) Tj T* ET Q Q q -1 0 0 1 57.02362 484.2236 cm +1 0 0 1 57.02362 404.2236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (12. MOAD Audit: Fixing What We Built) Tj T* ET Q Q q -1 0 0 1 57.02362 428.2236 cm +1 0 0 1 57.02362 348.2236 cm q BT 1 0 0 1 0 38 Tm .158726 Tw 12 TL /F1 10 Tf 0 0 0 rg (We scanned all three implementations for the five MOADs. The taxonomy used here is defined in the ) Tj 0 .4 .6 rg (MOAD) Tj T* 0 Tw 3.384835 Tw (Cheat Sheet) Tj 0 0 0 rg ( at undefect.com \227 MOAD-0001 \(sedimentary O\(N\262\) defects\), MOAD-0002 \(intertangle\),) Tj T* 0 Tw .059816 Tw (MOAD-0003 \(context-leak\), MOAD-0004 \(stringly-typed\), MOAD-0005 \(bus-factor\). Every project contains its) Tj T* 0 Tw (own sediment.) Tj T* ET Q Q q -1 0 0 1 57.02362 338.2236 cm +1 0 0 1 57.02362 258.2236 cm q BT 1 0 0 1 0 74 Tm 7.459168 Tw 12 TL /F3 10 Tf 0 0 0 rg (Standard: what the Lean EML proof sets.) Tj /F1 10 Tf ( \2478 documents a formal Lean 4 proof that) Tj T* 0 Tw .542844 Tw /F5 10 Tf (eml\(x,) Tj ( ) Tj (y\)) Tj ( ) Tj (=) Tj ( ) Tj (exp\(x\)) Tj ( ) Tj (-) Tj ( ) Tj (ln\(y\)) Tj /F1 10 Tf ( generates every elementary function \227 and that the proof is 40\327 faster) Tj T* 0 Tw .55131 Tw (than the brute-force numerical verification it replaced. That speedup is the MOAD-0001 story in microcosm:) Tj T* 0 Tw 1.171667 Tw (algebraic understanding beats O\(N\262\) search, at the proof layer just like at every other layer. We take that) Tj T* 0 Tw .048417 Tw (standard as the bar for the implementations too. Every hot path should be fast for a ) Tj /F4 10 Tf (reason) Tj /F1 10 Tf ( \(a hash, a cache,) Tj T* 0 Tw -0.019034 Tw (an O\(1\) invariant\), not because a test didn't happen to hit the slow case. Every behavior should be correct for) Tj T* 0 Tw (a reason, not by coincidence. The audit below is where we hold ourselves to that bar.) Tj T* ET Q Q q -1 0 0 1 57.02362 224.2236 cm +1 0 0 1 57.02362 144.2236 cm q BT 1 0 0 1 0 98 Tm 1.954609 Tw 12 TL /F1 10 Tf 0 0 0 rg (We also ran the unmoad scanner on the full tree at each release. Most recent scan \(2026-04-17, post) Tj T* 0 Tw .255223 Tw (portal-over-HTTP\): 18 HIGH MOAD-0001 candidates in C and 4 MOAD-0003 candidates in Python. All 18 C) Tj T* 0 Tw 1.186796 Tw (candidates inspected individually turn out to be false positives \227 one-shot option parsing, bounded-depth) Tj T* 0 Tw .330596 Tw (ancestor walks, hash bucket chain walks \(already O\(1\) amortized\), or static 6-element tables \(e.g. ) Tj /F5 10 Tf (#\\space) Tj /F1 10 Tf T* 0 Tw 3.004862 Tw (char-literal names\). The 4 Python MOAD-0003 candidates are scanner misfires on a non-ContextVar) Tj T* 0 Tw 6.764835 Tw /F5 10 Tf (Env.set\(\)) Tj /F1 10 Tf ( method. New-work-introduced MOAD-0001: ) Tj /F3 10 Tf (zero) Tj /F1 10 Tf (. The defects fixed in this paper) Tj T* 0 Tw 2.914587 Tw (\() Tj /F5 10 Tf (intern_symbol) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (_define_record_type) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (bi_string_replace) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (_tokenize_lines) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (Env.lookup) Tj /F1 10 Tf T* 0 Tw 1.773223 Tw (shortcut\) were all surfaced by other pressures \227 benchmarks, crashes, portal exchanges \227 not by the) Tj T* 0 Tw (scanner. The scanner remains a second line; the first line is building with understanding.) Tj T* ET Q Q q -1 0 0 1 57.02362 198.2236 cm +1 0 0 1 57.02362 118.2236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (12.1 MOAD-0001: The Sedimentary Defect in Our Own Code) Tj T* ET Q Q q -1 0 0 1 57.02362 156.2236 cm +1 0 0 1 57.02362 76.22362 cm q BT 1 0 0 1 0 26 Tm 1.195596 Tw 12 TL /F1 10 Tf 0 0 0 rg (The assembly interpreter's ) Tj /F5 10 Tf (intern_symbol) Tj /F1 10 Tf ( used a linear scan through all interned symbols \227 O\(N\) per) Tj T* 0 Tw .024897 Tw (lookup, O\(N\262\) over a program's lifetime. For a program defining 34 builtins plus user symbols, every ) Tj /F5 10 Tf (define) Tj /F1 10 Tf (,) Tj T* 0 Tw (every lambda parameter, every variable reference walked the entire table.) Tj T* ET Q Q -q -1 0 0 1 57.02362 138.2236 cm -q -BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Before \(linear scan\)) Tj /F1 10 Tf (:) Tj T* ET -Q -Q -q -1 0 0 1 57.02362 69.02362 cm -q -q -1 0 0 1 0 0 cm -q -1 0 0 1 6.6 6.6 cm -q -.662745 .662745 .662745 RG -.5 w -.960784 .960784 .960784 rg -n -6 -6 480.0283 60 re B* -Q -q -0 0 0 rg -BT 1 0 0 1 0 40 Tm /F5 8 Tf 9.6 TL (.isym_search:) Tj T* ( cmpq %rcx, %r8 # compare lengths) Tj T* ( jne .isym_next) Tj T* ( rep cmpsb # compare bytes) Tj T* ( je .isym_found) Tj T* ET -Q -Q -Q -Q -Q endstream endobj -139 0 obj +147 0 obj << -/Length 7935 +/Length 7456 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 723.0236 cm +1 0 0 1 57.02362 753.0236 cm +q +BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (Before \(linear scan\)) Tj /F1 10 Tf (:) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 655.0236 cm q q 1 0 0 1 0 0 cm @@ -8705,24 +9333,24 @@ q .662745 .662745 .662745 RG .5 w .960784 .960784 .960784 rg -n -6 -6 480.0283 40.8 re B* +n -6 -6 480.0283 88.8 re B* Q q 0 0 0 rg -BT 1 0 0 1 0 20.8 Tm /F5 8 Tf 9.6 TL (.isym_next:) Tj T* ( addq $24, %rax # next entry) Tj T* ( jmp .isym_search # O\(N\) per intern) Tj T* ET +BT 1 0 0 1 0 68.8 Tm /F5 8 Tf 9.6 TL (.isym_search:) Tj T* ( cmpq %rcx, %r8 # compare lengths) Tj T* ( jne .isym_next) Tj T* ( rep cmpsb # compare bytes) Tj T* ( je .isym_found) Tj T* (.isym_next:) Tj T* ( addq $24, %rax # next entry) Tj T* ( jmp .isym_search # O\(N\) per intern) Tj T* ET Q Q Q Q Q q -1 0 0 1 57.02362 703.0236 cm +1 0 0 1 57.02362 635.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (After \(djb2 hash table, 1024 buckets\)) Tj /F1 10 Tf (:) Tj T* ET Q Q q -1 0 0 1 57.02362 624.2236 cm +1 0 0 1 57.02362 556.2236 cm q q 1 0 0 1 0 0 cm @@ -8742,32 +9370,32 @@ Q Q Q q -1 0 0 1 57.02362 568.2236 cm +1 0 0 1 57.02362 500.2236 cm q BT 1 0 0 1 0 38 Tm .721772 Tw 12 TL /F1 10 Tf 0 0 0 rg (The fix: 99 lines changed, 1024-bucket hash table with chaining. ) Tj /F3 10 Tf (2.9x faster) Tj /F1 10 Tf ( on a 2000-symbol stress test.) Tj T* 0 Tw 2.453719 Tw (On benchmarks with fewer symbols \() Tj /F5 10 Tf (ack) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (fib) Tj /F1 10 Tf (\), the improvement is modest \(15% on ) Tj /F5 10 Tf (sum-to\(50k\)) Tj /F1 10 Tf (\),) Tj T* 0 Tw 1.940417 Tw (because the linear scan was already fast at small N. The fix pays off at scale \227 the same pattern as) Tj T* 0 Tw (MOAD-0001 everywhere: invisible at small inputs, catastrophic at large ones.) Tj T* ET Q Q q -1 0 0 1 57.02362 538.2236 cm +1 0 0 1 57.02362 470.2236 cm q BT 1 0 0 1 0 14 Tm 1.423486 Tw 12 TL /F1 10 Tf 0 0 0 rg (The Python implementation had a similar defect: ) Tj /F5 10 Tf (_define_record_type) Tj /F1 10 Tf ( used ) Tj /F5 10 Tf (list.index\(\)) Tj /F1 10 Tf ( for field) Tj T* 0 Tw (lookup. Replaced with a dict. O\(N\) ) Tj /F6 10 Tf 12 TL (\256) Tj /F1 10 Tf 12 TL ( O\(1\).) Tj T* ET Q Q q -1 0 0 1 57.02362 508.2236 cm +1 0 0 1 57.02362 440.2236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F3 10 Tf 12 TL 1.554556 Tw (Two more MOAD-0001 defects surfaced during the HTTP server work and were fixed in the same) Tj T* 0 Tw (pass:) Tj T* ET Q Q q -1 0 0 1 57.02362 502.2236 cm +1 0 0 1 57.02362 434.2236 cm Q q -1 0 0 1 57.02362 502.2236 cm +1 0 0 1 57.02362 434.2236 cm Q q -1 0 0 1 57.02362 466.2236 cm +1 0 0 1 57.02362 398.2236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8789,10 +9417,10 @@ Q Q Q q -1 0 0 1 57.02362 460.2236 cm +1 0 0 1 57.02362 392.2236 cm Q q -1 0 0 1 57.02362 424.2236 cm +1 0 0 1 57.02362 356.2236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8814,42 +9442,42 @@ Q Q Q q -1 0 0 1 57.02362 406.2236 cm +1 0 0 1 57.02362 338.2236 cm Q q -1 0 0 1 57.02362 316.2236 cm +1 0 0 1 57.02362 248.2236 cm q BT 1 0 0 1 0 74 Tm 4.926213 Tw 12 TL /F1 10 Tf 0 0 0 rg (A third correctness fix landed after the portal-over-HTTP demo exposed it: ) Tj /F5 10 Tf (uncommonlisp.py) Tj /F1 10 Tf ('s) Tj T* 0 Tw .515223 Tw /F5 10 Tf (Env.lookup) Tj /F1 10 Tf ( used to short-cut from the local frame directly to the global frame before walking intermediate) Tj T* 0 Tw 1.47713 Tw (parents. That was fast but wrong \227 a let-loop parameter named the same as a global builtin \() Tj /F5 10 Tf (count) Tj /F1 10 Tf (, a) Tj T* 0 Tw .409897 Tw (SRFI-1 procedure\) got shadowed in reverse, the shortcut returned the global builtin instead of walking up to) Tj T* 0 Tw .07402 Tw (the loop's parameter frame. Fix: walk ) Tj /F5 10 Tf (self) Tj ( ) Tj /F6 10 Tf 12 TL (\256) Tj /F5 10 Tf 12 TL ( ) Tj (self.p) Tj ( ) Tj /F6 10 Tf 12 TL (\256) Tj /F5 10 Tf 12 TL ( ) Tj (...) Tj ( ) Tj /F6 10 Tf 12 TL (\256) Tj /F5 10 Tf 12 TL ( ) Tj (global) Tj /F1 10 Tf ( in order, without any shortcut.) Tj T* 0 Tw 1.17189 Tw (The inline cache at ) Tj /F5 10 Tf (OP_LOOKUP) Tj /F1 10 Tf ( was correspondingly tightened to validate the full chain before firing. 975) Tj T* 0 Tw (tests remained green.) Tj T* ET Q Q q -1 0 0 1 57.02362 298.2236 cm +1 0 0 1 57.02362 230.2236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Every release audit surfaces more. Writing new code is writing new sediment, unless the audit runs.) Tj T* ET Q Q q -1 0 0 1 57.02362 272.2236 cm +1 0 0 1 57.02362 204.2236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (12.2 MOAD-0002: The Intertangle in Our Own Design) Tj T* ET Q Q q -1 0 0 1 57.02362 254.2236 cm +1 0 0 1 57.02362 186.2236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (All three implementations share mutable global state between subsystems:) Tj T* ET Q Q q -1 0 0 1 57.02362 248.2236 cm +1 0 0 1 57.02362 180.2236 cm Q q -1 0 0 1 57.02362 248.2236 cm +1 0 0 1 57.02362 180.2236 cm Q q -1 0 0 1 57.02362 200.2236 cm +1 0 0 1 57.02362 132.2236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8871,10 +9499,10 @@ Q Q Q q -1 0 0 1 57.02362 194.2236 cm +1 0 0 1 57.02362 126.2236 cm Q q -1 0 0 1 57.02362 158.2236 cm +1 0 0 1 57.02362 90.22362 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8896,10 +9524,19 @@ Q Q Q q -1 0 0 1 57.02362 152.2236 cm +1 0 0 1 57.02362 84.22362 cm Q + +endstream +endobj +148 0 obj +<< +/Length 7958 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 116.2236 cm +1 0 0 1 57.02362 729.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8921,62 +9558,53 @@ Q Q Q q -1 0 0 1 57.02362 98.22362 cm +1 0 0 1 57.02362 711.0236 cm Q - -endstream -endobj -140 0 obj -<< -/Length 7883 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 729.0236 cm +1 0 0 1 57.02362 669.0236 cm q BT 1 0 0 1 0 26 Tm .770556 Tw 12 TL /F1 10 Tf 0 0 0 rg (We documented these rather than refactoring them. In each case, the coupling exists for performance \(the) Tj T* 0 Tw .79631 Tw (globals are on hot paths\) or necessity \() Tj /F5 10 Tf (setjmp) Tj /F1 10 Tf ( requires thread-local state\). The documentation makes the) Tj T* 0 Tw (coupling visible so future work can decouple selectively.) Tj T* ET Q Q q -1 0 0 1 57.02362 703.0236 cm +1 0 0 1 57.02362 643.0236 cm q BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf .133333 .133333 .133333 rg (12.3 Our Shared Infrastructure) Tj T* ET Q Q q -1 0 0 1 57.02362 649.0236 cm +1 0 0 1 57.02362 589.0236 cm q BT 1 0 0 1 0 38 Tm 1.468917 Tw 12 TL /F1 10 Tf 0 0 0 rg (Every MOAD we fixed in our own code is a MOAD we understand better when we find it in others. The) Tj T* 0 Tw 3.534168 Tw (sedimentary defect in ) Tj /F5 10 Tf (intern_symbol) Tj /F1 10 Tf ( is the same pattern as the sedimentary defect in Lean 4's) Tj T* 0 Tw .17985 Tw /F5 10 Tf (check_duplicated_univ_params) Tj /F1 10 Tf (. The intertangle in our global environment register is the same pattern) Tj T* 0 Tw (as the intertangle in any system that routes state through implicit globals instead of explicit parameters.) Tj T* ET Q Q q -1 0 0 1 57.02362 583.0236 cm +1 0 0 1 57.02362 523.0236 cm q BT 1 0 0 1 0 50 Tm 1.036556 Tw 12 TL /F3 10 Tf 0 0 0 rg (Our infrastructure does not extract rent from workaholics to feed gluttons.) Tj /F1 10 Tf ( A symbol table that does) Tj T* 0 Tw .025176 Tw (O\(N\) work per lookup is a workaholic node \227 it does more work than necessary on every operation, and that) Tj T* 0 Tw .250642 Tw (cost compounds through every downstream consumer. Fixing it reduces stress on our shared computational) Tj T* 0 Tw .385785 Tw (heart. The CPU cycles saved are cycles available for the next lambda, the next continuation, the next portal) Tj T* 0 Tw (resume.) Tj T* ET Q Q q -1 0 0 1 57.02362 541.0236 cm +1 0 0 1 57.02362 481.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 3.447739 Tw (This is the permacomputer obligation: infrastructure that renews itself. Code that gets faster as we) Tj T* 0 Tw .462545 Tw (understand it better. A hash table is not an optimization \227 it is the removal of unnecessary suffering from a) Tj T* 0 Tw (system that deserves better.) Tj T* ET Q Q q -1 0 0 1 57.02362 509.8236 cm +1 0 0 1 57.02362 449.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (13. Future Work) Tj T* ET Q Q q -1 0 0 1 57.02362 495.8236 cm +1 0 0 1 57.02362 435.8236 cm Q q -1 0 0 1 57.02362 495.8236 cm +1 0 0 1 57.02362 435.8236 cm Q q -1 0 0 1 57.02362 471.8236 cm +1 0 0 1 57.02362 411.8236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -8998,10 +9626,10 @@ Q Q Q q -1 0 0 1 57.02362 465.8236 cm +1 0 0 1 57.02362 405.8236 cm Q q -1 0 0 1 57.02362 429.8236 cm +1 0 0 1 57.02362 369.8236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9023,56 +9651,6 @@ Q Q Q q -1 0 0 1 57.02362 423.8236 cm -Q -q -1 0 0 1 57.02362 399.8236 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 9 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 14 Tm 1.135696 Tw 12 TL /F3 10 Tf 0 0 0 rg (GPU lambda execution) Tj /F1 10 Tf (: Map/reduce on CUDA for data-parallel Scheme \(Phase 1\), trampolining for) Tj T* 0 Tw (recursive lambdas \(Phase 2\), interaction combinators for massive parallelism \(Phase 3\)) Tj T* ET -Q -Q -q -Q -Q -Q -q -1 0 0 1 57.02362 393.8236 cm -Q -q -1 0 0 1 57.02362 369.8236 cm -q -0 0 0 rg -BT /F1 10 Tf 12 TL ET -q -1 0 0 1 6 9 cm -q -0 0 0 rg -BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET -Q -Q -q -1 0 0 1 23 -3 cm -q -BT 1 0 0 1 0 14 Tm .734488 Tw 12 TL /F3 10 Tf 0 0 0 rg (Copying GC in asm) Tj /F1 10 Tf (: ) Tj /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf ( is an escape hatch. A mark-and-copy collector would remove) Tj T* 0 Tw (the sharp edge for general programs without forcing the programmer to reason about lifetimes.) Tj T* ET -Q -Q -q -Q -Q -Q -q 1 0 0 1 57.02362 363.8236 cm Q q @@ -9090,7 +9668,7 @@ Q q 1 0 0 1 23 -3 cm q -BT 1 0 0 1 0 14 Tm 6.367835 Tw 12 TL /F3 10 Tf 0 0 0 rg (Concurrent accept loop \(asm\)) Tj /F1 10 Tf (: Currently single-threaded. A pre-forked worker model or) Tj T* 0 Tw /F5 10 Tf (SO_REUSEPORT) Tj /F1 10 Tf ( pool would multiply throughput without changing the Scheme code.) Tj T* ET +BT 1 0 0 1 0 14 Tm 1.135696 Tw 12 TL /F3 10 Tf 0 0 0 rg (GPU lambda execution) Tj /F1 10 Tf (: Map/reduce on CUDA for data-parallel Scheme \(Phase 1\), trampolining for) Tj T* 0 Tw (recursive lambdas \(Phase 2\), interaction combinators for massive parallelism \(Phase 3\)) Tj T* ET Q Q q @@ -9101,7 +9679,57 @@ q 1 0 0 1 57.02362 333.8236 cm Q q -1 0 0 1 57.02362 321.8236 cm +1 0 0 1 57.02362 309.8236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 9 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 14 Tm .734488 Tw 12 TL /F3 10 Tf 0 0 0 rg (Copying GC in asm) Tj /F1 10 Tf (: ) Tj /F5 10 Tf (heap-snapshot) Tj /F1 10 Tf ( is an escape hatch. A mark-and-copy collector would remove) Tj T* 0 Tw (the sharp edge for general programs without forcing the programmer to reason about lifetimes.) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 303.8236 cm +Q +q +1 0 0 1 57.02362 279.8236 cm +q +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 9 cm +q +0 0 0 rg +BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL 8 0 Td (\177) Tj T* -8 0 Td ET +Q +Q +q +1 0 0 1 23 -3 cm +q +BT 1 0 0 1 0 14 Tm 6.367835 Tw 12 TL /F3 10 Tf 0 0 0 rg (Concurrent accept loop \(asm\)) Tj /F1 10 Tf (: Currently single-threaded. A pre-forked worker model or) Tj T* 0 Tw /F5 10 Tf (SO_REUSEPORT) Tj /F1 10 Tf ( pool would multiply throughput without changing the Scheme code.) Tj T* ET +Q +Q +q +Q +Q +Q +q +1 0 0 1 57.02362 273.8236 cm +Q +q +1 0 0 1 57.02362 261.8236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9123,10 +9751,10 @@ Q Q Q q -1 0 0 1 57.02362 315.8236 cm +1 0 0 1 57.02362 255.8236 cm Q q -1 0 0 1 57.02362 303.8236 cm +1 0 0 1 57.02362 243.8236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9148,70 +9776,70 @@ Q Q Q q -1 0 0 1 57.02362 285.8236 cm +1 0 0 1 57.02362 225.8236 cm Q q -1 0 0 1 57.02362 254.6236 cm +1 0 0 1 57.02362 194.6236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (14. The Defect in the Model) Tj T* ET Q Q q -1 0 0 1 57.02362 234.6236 cm +1 0 0 1 57.02362 174.6236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (This paper is evidence of a problem that extends beyond any single codebase.) Tj T* ET Q Q q -1 0 0 1 57.02362 168.6236 cm +1 0 0 1 57.02362 108.6236 cm q BT 1 0 0 1 0 50 Tm .653022 Tw 12 TL /F1 10 Tf 0 0 0 rg (On April 4, 2026, ) Tj 0 .4 .6 rg (russell@unturf) Tj 0 0 0 rg ( published ) Tj 0 .4 .6 rg ("Stress on Our Shared Heart") Tj 0 0 0 rg ( \227 a systematic analysis of 1,264) Tj T* 0 Tw .998334 Tw (MOAD defects across 60+ ecosystems, 18 programming languages, with 919 patches written. The central) Tj T* 0 Tw 2.218835 Tw (finding: O\(N\262\) sedimentary defects compound across architectural layers, creating invisible performance) Tj T* 0 Tw .27131 Tw (taxation on every downstream consumer. A single bottleneck multiplies against every other bottleneck in the) Tj T* 0 Tw (dependency chain.) Tj T* ET Q Q q -1 0 0 1 57.02362 138.6236 cm +1 0 0 1 57.02362 78.62362 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .222844 Tw (On April 13--14, 2026 \227 nine days later \227 the machine learning agent that built Lumbda wrote MOAD-0001) Tj T* 0 Tw (into fresh code. Twice.) Tj T* ET Q Q -q -1 0 0 1 57.02362 72.62362 cm -q -BT 1 0 0 1 0 50 Tm 1.989873 Tw 12 TL /F5 10 Tf 0 0 0 rg (intern_symbol) Tj /F1 10 Tf ( in the assembly implementation: a linear scan through all interned symbols. O\(N\) per) Tj T* 0 Tw 1.841147 Tw (lookup. The exact pattern described in "Stress on Our Shared Heart." The exact pattern the agent was) Tj T* 0 Tw 3.328647 Tw (explicitly instructed to avoid. The agent had the full MOAD taxonomy in its context window. It had) Tj T* 0 Tw 2.822739 Tw /F5 10 Tf (BLACKOPS.md) Tj /F1 10 Tf ( defining all five MOADs. It had the undefect.com mission statement. And it still wrote) Tj T* 0 Tw /F5 10 Tf (jmp) Tj ( ) Tj (.isym_search) Tj /F1 10 Tf ( instead of a hash table.) Tj T* ET -Q -Q endstream endobj -141 0 obj +149 0 obj << -/Length 6415 +/Length 6975 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 741.0236 cm +1 0 0 1 57.02362 705.0236 cm +q +BT 1 0 0 1 0 50 Tm 1.989873 Tw 12 TL /F5 10 Tf 0 0 0 rg (intern_symbol) Tj /F1 10 Tf ( in the assembly implementation: a linear scan through all interned symbols. O\(N\) per) Tj T* 0 Tw 1.841147 Tw (lookup. The exact pattern described in "Stress on Our Shared Heart." The exact pattern the agent was) Tj T* 0 Tw 3.328647 Tw (explicitly instructed to avoid. The agent had the full MOAD taxonomy in its context window. It had) Tj T* 0 Tw 2.822739 Tw /F5 10 Tf (BLACKOPS.md) Tj /F1 10 Tf ( defining all five MOADs. It had the undefect.com mission statement. And it still wrote) Tj T* 0 Tw /F5 10 Tf (jmp) Tj ( ) Tj (.isym_search) Tj /F1 10 Tf ( instead of a hash table.) Tj T* ET +Q +Q +q +1 0 0 1 57.02362 675.0236 cm q BT 1 0 0 1 0 14 Tm 1.541835 Tw 12 TL /F5 10 Tf 0 0 0 rg (list.index\(\)) Tj /F1 10 Tf ( in the Python implementation's ) Tj /F5 10 Tf (_define_record_type) Tj /F1 10 Tf (: linear search for field position.) Tj T* 0 Tw (O\(N\) where O\(1\) was trivial. Same defect. Same context. Same failure.) Tj T* ET Q Q q -1 0 0 1 57.02362 723.0236 cm +1 0 0 1 57.02362 657.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The commit history proves it:) Tj T* ET Q Q q -1 0 0 1 57.02362 717.0236 cm +1 0 0 1 57.02362 651.0236 cm Q q -1 0 0 1 57.02362 717.0236 cm +1 0 0 1 57.02362 651.0236 cm Q q -1 0 0 1 57.02362 705.0236 cm +1 0 0 1 57.02362 639.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9233,10 +9861,10 @@ Q Q Q q -1 0 0 1 57.02362 699.0236 cm +1 0 0 1 57.02362 633.0236 cm Q q -1 0 0 1 57.02362 687.0236 cm +1 0 0 1 57.02362 621.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9258,10 +9886,10 @@ Q Q Q q -1 0 0 1 57.02362 681.0236 cm +1 0 0 1 57.02362 615.0236 cm Q q -1 0 0 1 57.02362 669.0236 cm +1 0 0 1 57.02362 603.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9283,52 +9911,52 @@ Q Q Q q -1 0 0 1 57.02362 651.0236 cm +1 0 0 1 57.02362 585.0236 cm Q q -1 0 0 1 57.02362 633.0236 cm +1 0 0 1 57.02362 567.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (The defect is in the model, not the programmer.) Tj T* ET Q Q q -1 0 0 1 57.02362 579.0236 cm +1 0 0 1 57.02362 513.0236 cm q BT 1 0 0 1 0 38 Tm 5.336796 Tw 12 TL /F1 10 Tf 0 0 0 rg (Language models learn from training data. The training data contains millions of linear scans,) Tj T* 0 Tw 3.434395 Tw /F5 10 Tf (list.contains) Tj /F1 10 Tf ( calls, ) Tj /F5 10 Tf (std::find) Tj /F1 10 Tf ( inside loops, ) Tj /F5 10 Tf (array.indexOf) Tj /F1 10 Tf ( in hot paths. These patterns are) Tj T* 0 Tw .94631 Tw (statistically dominant. When a model generates code, it reproduces the dominant patterns from its training) Tj T* 0 Tw (distribution \227 including the sedimentary defects.) Tj T* ET Q Q q -1 0 0 1 57.02362 537.0236 cm +1 0 0 1 57.02362 471.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .029897 Tw (Cantor formalized set theory in 1874. Hash tables were implemented in 1953. The O\(1\) membership test has) Tj T* 0 Tw .363241 Tw (been known for 152 years and available in every language for 73 years. Yet language models still default to) Tj T* 0 Tw (O\(N\) because O\(N\) is what most code does. The training data is the sediment.) Tj T* ET Q Q q -1 0 0 1 57.02362 495.0236 cm +1 0 0 1 57.02362 429.0236 cm q BT 1 0 0 1 0 26 Tm 2.359862 Tw 12 TL /F3 10 Tf 0 0 0 rg (This means every machine learning agent generating code today is propagating MOAD-0001 by) Tj T* 0 Tw .91789 Tw (default.) Tj /F1 10 Tf ( Not because the solutions are unknown. Not because the agents lack capability. But because the) Tj T* 0 Tw (statistical distribution of training data encodes the defect as the norm.) Tj T* ET Q Q q -1 0 0 1 57.02362 453.0236 cm +1 0 0 1 57.02362 387.0236 cm q BT 1 0 0 1 0 26 Tm .412917 Tw 12 TL /F1 10 Tf 0 0 0 rg (The fix is not to patch individual outputs. The fix is to teach models that ) Tj /F3 10 Tf (O\(1\) is the default) Tj /F1 10 Tf ( for membership) Tj T* 0 Tw 4.550556 Tw (tests, lookups, and deduplication. That ) Tj /F5 10 Tf (set\(\)) Tj /F1 10 Tf ( is not an optimization \227 it is the baseline. That) Tj T* 0 Tw /F5 10 Tf (list.contains) Tj /F1 10 Tf ( inside a loop is a defect, not a pattern.) Tj T* ET Q Q q -1 0 0 1 57.02362 411.0236 cm +1 0 0 1 57.02362 345.0236 cm q 0 0 0 rg BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 1.790491 Tw (Until that teaching happens at the training level, every agent needs a MOAD audit pass on every code) Tj T* 0 Tw 1.596373 Tw (generation. This paper \227 with its commit history showing the defect introduced and then fixed \227 is the) Tj T* 0 Tw (evidence that the audit is necessary.) Tj T* ET Q Q q -1 0 0 1 57.02362 405.0236 cm +1 0 0 1 57.02362 339.0236 cm Q q -1 0 0 1 57.02362 363.0236 cm +1 0 0 1 57.02362 297.0236 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9351,30 +9979,30 @@ Q Q Q q -1 0 0 1 57.02362 363.0236 cm +1 0 0 1 57.02362 297.0236 cm Q q -1 0 0 1 57.02362 333.0236 cm +1 0 0 1 57.02362 267.0236 cm q 0 0 0 rg BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.253223 Tw (The stress is real. The compound burden is measurable. And the models that generate our infrastructure) Tj T* 0 Tw (carry the defect in their weights.) Tj T* ET Q Q q -1 0 0 1 57.02362 315.0236 cm +1 0 0 1 57.02362 249.0236 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (This paper is the proof. The commit history is the evidence. The fix starts with awareness.) Tj T* ET Q Q q -1 0 0 1 57.02362 283.8236 cm +1 0 0 1 57.02362 217.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (Citation) Tj T* ET Q Q q -1 0 0 1 57.02362 233.8236 cm +1 0 0 1 57.02362 167.8236 cm q q 1 0 0 1 0 0 cm @@ -9395,13 +10023,13 @@ Q Q Q q -1 0 0 1 57.02362 202.6236 cm +1 0 0 1 57.02362 136.6236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (References) Tj T* ET Q Q q -1 0 0 1 57.02362 152.6236 cm +1 0 0 1 57.02362 86.62362 cm q q 1 0 0 1 0 0 cm @@ -9421,26 +10049,26 @@ Q Q Q Q + +endstream +endobj +150 0 obj +<< +/Length 2199 +>> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 121.4236 cm +1 0 0 1 57.02362 751.8236 cm q BT 1 0 0 1 0 2.2 Tm 13.2 TL /F2 11 Tf .133333 .133333 .133333 rg (License) Tj T* ET Q Q q -1 0 0 1 57.02362 105.4236 cm +1 0 0 1 57.02362 735.8236 cm Q - -endstream -endobj -142 0 obj -<< -/Length 2103 ->> -stream -1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 561.9477 cm +1 0 0 1 57.02362 532.7477 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9456,13 +10084,13 @@ Q Q Q q -1 0 0 1 57.02362 553.9477 cm +1 0 0 1 57.02362 524.7477 cm Q q -1 0 0 1 57.02362 545.9477 cm +1 0 0 1 57.02362 516.7477 cm Q q -1 0 0 1 57.02362 347.2922 cm +1 0 0 1 57.02362 318.0922 cm q 0 0 0 rg BT /F1 10 Tf 12 TL ET @@ -9478,17 +10106,17 @@ Q Q Q q -1 0 0 1 57.02362 339.2922 cm +1 0 0 1 57.02362 310.0922 cm Q q -1 0 0 1 57.02362 321.2922 cm +1 0 0 1 57.02362 292.0922 cm q 0 0 0 rg BT 1 0 0 1 0 2 Tm /F4 10 Tf 12 TL 155.3042 0 Td (GNU Affero General Public License v3) Tj T* -155.3042 0 Td ET Q Q q -1 0 0 1 57.02362 69.69221 cm +1 0 0 1 57.02362 69.29221 cm q q 1 0 0 1 0 0 cm @@ -9498,10 +10126,10 @@ q .662745 .662745 .662745 RG .5 w .960784 .960784 .960784 rg -n -6 -6 480.0283 242.4 re B* +n -6 -6 480.0283 213.6 re B* Q q -BT 1 0 0 1 0 222.4 Tm 9.6 TL /F5 8 Tf 0 0 0 rg (AGPL-3.0-only) Tj T* T* (PERMACOMPUTER PREAMBLE - NO WARRANTY) Tj T* T* (This is free software for the public good of a permacomputer hosted at) Tj T* (permacomputer.com, an always-on computer by the people, for the people. One) Tj T* (which is durable, easy to repair, ) Tj (&) Tj ( distributed like tap water for machine) Tj T* (learning intelligence.) Tj T* T* (The permacomputer is community-owned infrastructure optimized around four values:) Tj T* T* ( TRUTH - Source code must be open source ) Tj (&) Tj ( freely distributed) Tj T* ( FREEDOM - Voluntary participation without corporate control) Tj T* ( HARMONY - Systems operating with minimal waste that self-renew) Tj T* ( LOVE - Individual rights protected while fostering cooperation) Tj T* T* (This software contributes to that vision by proving that feedback) Tj T* (\(the computational primitive of continuations\) composes into a universal) Tj T* (execution model, extending across implementations through Scheme source) Tj T* (itself as the wire format. Three implementations, one language,) Tj T* (974 tests, ~17,000 lines. Code is seeds to sprout on any abandoned technology.) Tj T* T* (Learn more: https://www.permacomputer.com) Tj T* T* ET +BT 1 0 0 1 0 193.6 Tm 9.6 TL /F5 8 Tf 0 0 0 rg (AGPL-3.0-only) Tj T* T* (PERMACOMPUTER PREAMBLE - NO WARRANTY) Tj T* T* (This is free software for the public good of a permacomputer hosted at) Tj T* (permacomputer.com, an always-on computer by the people, for the people. One) Tj T* (which is durable, easy to repair, ) Tj (&) Tj ( distributed like tap water for machine) Tj T* (learning intelligence.) Tj T* T* (The permacomputer is community-owned infrastructure optimized around four values:) Tj T* T* ( TRUTH - Source code must be open source ) Tj (&) Tj ( freely distributed) Tj T* ( FREEDOM - Voluntary participation without corporate control) Tj T* ( HARMONY - Systems operating with minimal waste that self-renew) Tj T* ( LOVE - Individual rights protected while fostering cooperation) Tj T* T* (This software contributes to that vision by proving that feedback) Tj T* (\(the computational primitive of continuations\) composes into a universal) Tj T* (execution model, extending across implementations through Scheme source) Tj T* (itself as the wire format. Three implementations, one language,) Tj T* (974 tests, ~17,000 lines. Code is seeds to sprout on any abandoned technology.) Tj T* ET Q Q Q @@ -9510,14 +10138,14 @@ Q endstream endobj -143 0 obj +151 0 obj << -/Length 1025 +/Length 1087 >> stream 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET q -1 0 0 1 57.02362 607.8236 cm +1 0 0 1 57.02362 579.0236 cm q q 1 0 0 1 0 0 cm @@ -9527,10 +10155,10 @@ q .662745 .662745 .662745 RG .5 w .960784 .960784 .960784 rg -n -6 -6 480.0283 156 re B* +n -6 -6 480.0283 184.8 re B* Q q -BT 1 0 0 1 0 136 Tm 9.6 TL /F5 8 Tf 0 0 0 rg (NO WARRANTY. THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.) Tj T* T* (That said, our permacomputer's digital membrane stratum continuously runs unit,) Tj T* (integration, ) Tj (&) Tj ( functional tests on all of its own software, with our) Tj T* (permacomputer monitoring itself, repairing itself, with minimal human in the) Tj T* (loop guidance. Our machine learning agents do their best to leave no stone) Tj T* (unturned.) Tj T* T* (Copyright \(C\) 2025-2026 TimeHexOn ) Tj (&) Tj ( foxhop ) Tj (&) Tj ( russell@unturf) Tj T* (https://www.timehexon.com) Tj T* (https://www.foxhop.net) Tj T* (https://www.unturf.com/software) Tj T* (https://www.permacomputer.com) Tj T* (https://uncloseai.com) Tj T* (https://russell.ballestrini.net) Tj T* ET +BT 1 0 0 1 0 164.8 Tm 9.6 TL /F5 8 Tf 0 0 0 rg T* (Learn more: https://www.permacomputer.com) Tj T* T* (NO WARRANTY. THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.) Tj T* T* (That said, our permacomputer's digital membrane stratum continuously runs unit,) Tj T* (integration, ) Tj (&) Tj ( functional tests on all of its own software, with our) Tj T* (permacomputer monitoring itself, repairing itself, with minimal human in the) Tj T* (loop guidance. Our machine learning agents do their best to leave no stone) Tj T* (unturned.) Tj T* T* (Copyright \(C\) 2025-2026 TimeHexOn ) Tj (&) Tj ( foxhop ) Tj (&) Tj ( russell@unturf) Tj T* (https://www.timehexon.com) Tj T* (https://www.foxhop.net) Tj T* (https://www.unturf.com/software) Tj T* (https://www.permacomputer.com) Tj T* (https://uncloseai.com) Tj T* (https://russell.ballestrini.net) Tj T* ET Q Q Q @@ -9539,335 +10167,355 @@ Q endstream endobj -144 0 obj -<< -/Nums [ 0 145 0 R 1 146 0 R 2 147 0 R 3 148 0 R 4 149 0 R - 5 150 0 R 6 151 0 R 7 152 0 R 8 153 0 R 9 154 0 R - 10 155 0 R 11 156 0 R 12 157 0 R 13 158 0 R 14 159 0 R - 15 160 0 R 16 161 0 R 17 162 0 R 18 163 0 R 19 164 0 R - 20 165 0 R 21 166 0 R 22 167 0 R 23 168 0 R 24 169 0 R - 25 170 0 R 26 171 0 R ] ->> -endobj -145 0 obj -<< -/S /D /St 1 ->> -endobj -146 0 obj -<< -/S /D /St 2 ->> -endobj -147 0 obj -<< -/S /D /St 3 ->> -endobj -148 0 obj -<< -/S /D /St 4 ->> -endobj -149 0 obj -<< -/S /D /St 5 ->> -endobj -150 0 obj -<< -/S /D /St 6 ->> -endobj -151 0 obj -<< -/S /D /St 7 ->> -endobj 152 0 obj << -/S /D /St 8 +/Nums [ 0 153 0 R 1 154 0 R 2 155 0 R 3 156 0 R 4 157 0 R + 5 158 0 R 6 159 0 R 7 160 0 R 8 161 0 R 9 162 0 R + 10 163 0 R 11 164 0 R 12 165 0 R 13 166 0 R 14 167 0 R + 15 168 0 R 16 169 0 R 17 170 0 R 18 171 0 R 19 172 0 R + 20 173 0 R 21 174 0 R 22 175 0 R 23 176 0 R 24 177 0 R + 25 178 0 R 26 179 0 R 27 180 0 R 28 181 0 R ] >> endobj 153 0 obj << -/S /D /St 9 +/S /D /St 1 >> endobj 154 0 obj << -/S /D /St 10 +/S /D /St 2 >> endobj 155 0 obj << -/S /D /St 11 +/S /D /St 3 >> endobj 156 0 obj << -/S /D /St 12 +/S /D /St 4 >> endobj 157 0 obj << -/S /D /St 13 +/S /D /St 5 >> endobj 158 0 obj << -/S /D /St 14 +/S /D /St 6 >> endobj 159 0 obj << -/S /D /St 15 +/S /D /St 7 >> endobj 160 0 obj << -/S /D /St 16 +/S /D /St 8 >> endobj 161 0 obj << -/S /D /St 17 +/S /D /St 9 >> endobj 162 0 obj << -/S /D /St 18 +/S /D /St 10 >> endobj 163 0 obj << -/S /D /St 19 +/S /D /St 11 >> endobj 164 0 obj << -/S /D /St 20 +/S /D /St 12 >> endobj 165 0 obj << -/S /D /St 21 +/S /D /St 13 >> endobj 166 0 obj << -/S /D /St 22 +/S /D /St 14 >> endobj 167 0 obj << -/S /D /St 23 +/S /D /St 15 >> endobj 168 0 obj << -/S /D /St 24 +/S /D /St 16 >> endobj 169 0 obj << -/S /D /St 25 +/S /D /St 17 >> endobj 170 0 obj << -/S /D /St 26 +/S /D /St 18 >> endobj 171 0 obj << +/S /D /St 19 +>> +endobj +172 0 obj +<< +/S /D /St 20 +>> +endobj +173 0 obj +<< +/S /D /St 21 +>> +endobj +174 0 obj +<< +/S /D /St 22 +>> +endobj +175 0 obj +<< +/S /D /St 23 +>> +endobj +176 0 obj +<< +/S /D /St 24 +>> +endobj +177 0 obj +<< +/S /D /St 25 +>> +endobj +178 0 obj +<< +/S /D /St 26 +>> +endobj +179 0 obj +<< /S /D /St 27 >> endobj +180 0 obj +<< +/S /D /St 28 +>> +endobj +181 0 obj +<< +/S /D /St 29 +>> +endobj xref -0 172 +0 182 0000000000 65535 f 0000000061 00000 n -0000000158 00000 n -0000000265 00000 n -0001535114 00000 n -0001535223 00000 n -0001535335 00000 n -0001535450 00000 n -0001535620 00000 n -0001535793 00000 n -0001535974 00000 n -0001536080 00000 n -0001536381 00000 n -0001536589 00000 n -0001668560 00000 n -0001668638 00000 n -0001668910 00000 n -0001669118 00000 n -0001669326 00000 n -0001669534 00000 n -0001669742 00000 n -0001669950 00000 n -0001687422 00000 n -0001688138 00000 n -0001706741 00000 n -0001707027 00000 n -0001707348 00000 n -0001707556 00000 n -0001707640 00000 n -0001707848 00000 n -0001708056 00000 n -0001708264 00000 n -0001708472 00000 n -0001708680 00000 n -0001708858 00000 n -0001709085 00000 n -0001843976 00000 n -0001848240 00000 n -0002058048 00000 n -0002058369 00000 n -0002058577 00000 n -0002058785 00000 n -0002083320 00000 n -0002084211 00000 n -0002084483 00000 n -0002084691 00000 n -0002084882 00000 n -0002085073 00000 n -0002085307 00000 n -0002085515 00000 n -0002085689 00000 n -0002085897 00000 n -0002086131 00000 n -0002086337 00000 n -0002086509 00000 n -0002086743 00000 n -0002145719 00000 n -0002146029 00000 n -0002146349 00000 n -0002146557 00000 n -0002146665 00000 n -0002146920 00000 n -0002146995 00000 n -0002147128 00000 n -0002147238 00000 n -0002147403 00000 n -0002147598 00000 n -0002147714 00000 n -0002147832 00000 n -0002147974 00000 n -0002148174 00000 n -0002148309 00000 n -0002148458 00000 n -0002148587 00000 n -0002148757 00000 n -0002148881 00000 n -0002149012 00000 n -0002149134 00000 n -0002149330 00000 n -0002149447 00000 n -0002149574 00000 n -0002149717 00000 n -0002149883 00000 n -0002150043 00000 n -0002150228 00000 n -0002150375 00000 n -0002150530 00000 n -0002150702 00000 n -0002150855 00000 n -0002150998 00000 n -0002151153 00000 n -0002151298 00000 n -0002151481 00000 n -0002151599 00000 n -0002151756 00000 n -0002151894 00000 n -0002152042 00000 n -0002152192 00000 n -0002152330 00000 n -0002152465 00000 n -0002152617 00000 n -0002152818 00000 n -0002152941 00000 n -0002153080 00000 n -0002153244 00000 n -0002153417 00000 n -0002153590 00000 n -0002153737 00000 n -0002153932 00000 n -0002154091 00000 n -0002154259 00000 n -0002154394 00000 n -0002154527 00000 n -0002154672 00000 n -0002154798 00000 n -0002154926 00000 n -0002155037 00000 n -0002155288 00000 n -0002160405 00000 n -0002168037 00000 n -0002173367 00000 n -0002180316 00000 n -0002188837 00000 n -0002197952 00000 n -0002207156 00000 n -0002220057 00000 n -0002229835 00000 n -0002240725 00000 n -0002250132 00000 n -0002259495 00000 n -0002266609 00000 n -0002275986 00000 n -0002284982 00000 n -0002293426 00000 n -0002295261 00000 n -0002308320 00000 n -0002325367 00000 n -0002335253 00000 n -0002342693 00000 n -0002349291 00000 n -0002357279 00000 n -0002365215 00000 n -0002371683 00000 n -0002373839 00000 n -0002374917 00000 n -0002375252 00000 n -0002375287 00000 n -0002375322 00000 n -0002375357 00000 n -0002375392 00000 n -0002375427 00000 n -0002375462 00000 n -0002375497 00000 n -0002375532 00000 n -0002375567 00000 n -0002375603 00000 n -0002375639 00000 n -0002375675 00000 n -0002375711 00000 n -0002375747 00000 n -0002375783 00000 n -0002375819 00000 n -0002375855 00000 n -0002375891 00000 n -0002375927 00000 n -0002375963 00000 n -0002375999 00000 n -0002376035 00000 n -0002376071 00000 n -0002376107 00000 n -0002376143 00000 n -0002376179 00000 n +0000000169 00000 n +0000000276 00000 n +0001535125 00000 n +0001535234 00000 n +0001535346 00000 n +0001535461 00000 n +0001535631 00000 n +0001535804 00000 n +0001535985 00000 n +0001536091 00000 n +0001536392 00000 n +0001536600 00000 n +0001668571 00000 n +0001668649 00000 n +0001668921 00000 n +0001669129 00000 n +0001669337 00000 n +0001669545 00000 n +0001669753 00000 n +0001669961 00000 n +0001687433 00000 n +0001688149 00000 n +0001706752 00000 n +0001707038 00000 n +0001707359 00000 n +0001707567 00000 n +0001707678 00000 n +0001707886 00000 n +0001708094 00000 n +0001708178 00000 n +0001708386 00000 n +0001708594 00000 n +0001708802 00000 n +0001709010 00000 n +0001709218 00000 n +0001709396 00000 n +0001709623 00000 n +0001844514 00000 n +0001848778 00000 n +0002058586 00000 n +0002058907 00000 n +0002059115 00000 n +0002059323 00000 n +0002083858 00000 n +0002084749 00000 n +0002085021 00000 n +0002085229 00000 n +0002085420 00000 n +0002085611 00000 n +0002085845 00000 n +0002086053 00000 n +0002086227 00000 n +0002086435 00000 n +0002086669 00000 n +0002086875 00000 n +0002087047 00000 n +0002087281 00000 n +0002146257 00000 n +0002146567 00000 n +0002146887 00000 n +0002147095 00000 n +0002147203 00000 n +0002147458 00000 n +0002147533 00000 n +0002147666 00000 n +0002147776 00000 n +0002147941 00000 n +0002148136 00000 n +0002148252 00000 n +0002148370 00000 n +0002148512 00000 n +0002148712 00000 n +0002148847 00000 n +0002148996 00000 n +0002149125 00000 n +0002149295 00000 n +0002149419 00000 n +0002149550 00000 n +0002149672 00000 n +0002149868 00000 n +0002149985 00000 n +0002150112 00000 n +0002150255 00000 n +0002150421 00000 n +0002150594 00000 n +0002150772 00000 n +0002150929 00000 n +0002151068 00000 n +0002151253 00000 n +0002151400 00000 n +0002151555 00000 n +0002151727 00000 n +0002151880 00000 n +0002152023 00000 n +0002152178 00000 n +0002152323 00000 n +0002152508 00000 n +0002152626 00000 n +0002152784 00000 n +0002152924 00000 n +0002153075 00000 n +0002153228 00000 n +0002153368 00000 n +0002153505 00000 n +0002153659 00000 n +0002153861 00000 n +0002153984 00000 n +0002154123 00000 n +0002154287 00000 n +0002154460 00000 n +0002154633 00000 n +0002154780 00000 n +0002154975 00000 n +0002155134 00000 n +0002155302 00000 n +0002155437 00000 n +0002155570 00000 n +0002155715 00000 n +0002155841 00000 n +0002155969 00000 n +0002156080 00000 n +0002156345 00000 n +0002161462 00000 n +0002169361 00000 n +0002174154 00000 n +0002181083 00000 n +0002189997 00000 n +0002199244 00000 n +0002208448 00000 n +0002221291 00000 n +0002231013 00000 n +0002240294 00000 n +0002252453 00000 n +0002261602 00000 n +0002270946 00000 n +0002280917 00000 n +0002287073 00000 n +0002296594 00000 n +0002306857 00000 n +0002311869 00000 n +0002313704 00000 n +0002327038 00000 n +0002343697 00000 n +0002353873 00000 n +0002360939 00000 n +0002367809 00000 n +0002375318 00000 n +0002383329 00000 n +0002390357 00000 n +0002392609 00000 n +0002393749 00000 n +0002394106 00000 n +0002394141 00000 n +0002394176 00000 n +0002394211 00000 n +0002394246 00000 n +0002394281 00000 n +0002394316 00000 n +0002394351 00000 n +0002394386 00000 n +0002394421 00000 n +0002394457 00000 n +0002394493 00000 n +0002394529 00000 n +0002394565 00000 n +0002394601 00000 n +0002394637 00000 n +0002394673 00000 n +0002394709 00000 n +0002394745 00000 n +0002394781 00000 n +0002394817 00000 n +0002394853 00000 n +0002394889 00000 n +0002394925 00000 n +0002394961 00000 n +0002394997 00000 n +0002395033 00000 n +0002395069 00000 n +0002395105 00000 n trailer << /ID -[<3018bfbcd369f2de234cd9bdbbf818c4><3018bfbcd369f2de234cd9bdbbf818c4>] +[] % ReportLab generated PDF document -- digest (opensource) -/Info 60 0 R -/Root 59 0 R -/Size 172 +/Info 63 0 R +/Root 62 0 R +/Size 182 >> startxref -2376215 +2395141 %%EOF diff --git a/whitepaper/uncommonlisp-whitepaper.rst b/whitepaper/uncommonlisp-whitepaper.rst index 982c838..b706249 100644 --- a/whitepaper/uncommonlisp-whitepaper.rst +++ b/whitepaper/uncommonlisp-whitepaper.rst @@ -63,7 +63,7 @@ Lumbda ships in **four implementation tiers** — each independently built, each - **Python bytecode VM** — 3,743 lines, full first-class continuations, JSON portal, reference implementation - **C interpreter** — tree-walker + bytecode VM, 9,164 lines of runtime C, JSON portal - **C + x86_64 JIT** — pattern-matched native code emission via ``mmap(PROT_EXEC)``, 7--10× faster than CPython on recursive workloads -- **Pure x86_64 assembly** — 4,968 lines, 22 KB stripped binary, zero external dependencies, **91 builtins including a full TCP stack, `eval`, and `read-from-string`**, binary heap-dump portal +- **Pure x86_64 assembly** — 6,645 lines of GNU assembler (GAS, AT&T syntax), assembled with ``as`` and linked with ``ld`` (both from GNU binutils), ~22 KB stripped binary (bump-only build) / ~25 KB stripped (with optional naive mark-sweep GC + meta-GC arena under the ``GC_NAIVE`` assemble flag), zero external dependencies, **95+ builtins including a full TCP stack, `eval`, `read-from-string`, and native hash-table / hash-set primitives**, binary heap-dump portal All three share one interchange format: **Scheme source itself**. An S-expression portal (``(define x 42)``) written by any implementation loads in any other — a 3×3 producer×consumer matrix, 9/9 cells green. The language *is* the wire protocol. This is not a property we added; it is what a parser has always made possible. We report it because most systems forget. @@ -351,6 +351,8 @@ Folding only applies when all operands are compile-time constants & the function - §6.1-§6.3 Python internal (tree-walker vs bytecode): ``make bench`` - §6.4 Three impls head-to-head: ``make bench-3way`` - §6.5 asm native hash-set vs portable Scheme hash-set: ``make bench-hashset`` +- §6.6 asm naive GC (bump vs mark-sweep memory): ``make bench-gc`` +- §6.6 asm meta-GC (arena fast path vs naive sweep): ``make bench-gc-arena`` - §7.2 Cross-impl portal matrix: ``make bench-portal-cross`` - §7.5 Portal save+load timings: ``make bench-portal`` - §11.3 HTTP server vs busybox / python http.server: ``make bench-web`` @@ -469,6 +471,80 @@ The layout reuses vector tag 7 with a negative sentinel at offset 0 (hash-table: **Reproduce:** ``make bench-hashset`` (source: ``tests/bench-hashset.sh``). Asm-only: C and Python tiers supply ``hash-table`` but not ``hash-set`` — the speedup shown here is intra-asm, native primitive vs Scheme-level implementation, not cross-tier. +6.6 Memory Management and the Meta-GC +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The asm tier's default allocator is a bump pointer: every allocation advances ``%r15`` monotonically, and nothing is ever freed. Python and C tiers have garbage collection (Python's host GC, Boehm ``GC_MALLOC`` in C); asm doesn't, by design, to keep the 6,645-line auditable surface small. Short programs finish without paying. Long-running asm servers leak until the kernel caps them — a real hazard that crashed this laptop twice during HTTP benchmarks before we wrote the six-layer safety envelope into ``CLAUDE.md``. + +To measure what a collector would actually cost, we built a second asm binary behind an assemble-time flag: + +.. code-block:: + + as --64 --defsym GC_NAIVE=1 uncommonlisp.s # collecting build + as --64 uncommonlisp.s # default, bump-only + +Same source, same tests (137/137 pass on both). The GC build adds an 8-byte ``(size << 1 | mark)`` header on every heap block, a stop-the-world mark-sweep triggered by bump overflow, and a free-list allocator that first-fits reclaimed space. + +**Control-group numbers** (workload: 2,000 iterations of build-sum-discard over 200-element lists, i5-8350U, 512 MB ``ulimit -v``): + +.. table:: + :widths: 34 18 18 30 + + ================================== ========== ========== ============== + asm build Wall time Peak RSS GC firings + ================================== ========== ========== ============== + bump only (no GC) 1,097 ms 133.9 MB none + naive mark-sweep (``GC_NAIVE=1``) 1,431 ms 1.1 MB ~200 + ================================== ========== ========== ============== + +**124× less memory at a ~30% throughput cost.** That is the honest GC tax at the naive end of the spectrum — the number we had been guessing at before building the control group. Every future memory-management proposal (generational, incremental, region-based) now has a concrete floor to beat. + +6.6.1 Meta-GC: Arena Fast Path with Mark-Phase Verifier +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +On top of the naive sweep, the GC build exposes a Lumbda primitive ``(with-arena thunk)`` that takes a zero-argument procedure, runs it, and attempts an **O(1) bulk reclaim** of every allocation the thunk made. The decision logic is a three-way policy: + +1. **If an implicit GC fired inside the thunk** (heap overflow forced a full sweep mid-execution), the snapshot is stale — skip the reset attempt and return. +2. **Otherwise, run the existing mark phase** with the thunk's return value added as an extra root, then walk the arena range ``[snapshot_r15, %r15)`` block by block. If *no* header in that range has the mark bit set, nothing survives — bulk-reset ``%r15`` to the snapshot (one store) and return. +3. **If any block in the arena range is marked**, the thunk's return value or some other root reaches into the arena. Abort the reset, fall through to the naive sweep on the full heap, and return. + +Free-list reuse is disabled while an arena is active so the chain stays pristine for a verbatim restore; ``heap_alloc`` enforces this via a global ``arena_active`` flag. One critical correctness detail: after ``apply_proc_raw`` returns from the thunk, volatile registers contain stale tagged pointers into the arena. The conservative stack scan would otherwise treat those residuals as live roots and trigger a false escape on every call. Zero-ing ``%rax, %rcx, %rdx, %rsi, %rdi, %rbp, %r8-%r12`` before the verifier runs removes this hazard. + +**Meta-GC benchmark** (same workload, same binary, both phases in one process): + +.. table:: + :widths: 36 14 18 14 20 + + ============================== ========= ========== ========== ================= + Strategy Wall time Peak RSS Full GCs Arena outcomes + ============================== ========= ========== ========== ================= + Phase A: naive sweep only 932 ms 1.2 MB 200 (unused) + Phase B: arena-wrapped body 945 ms 1.2 MB 1 **2,000 resets / + 0 escapes** + ============================== ========= ========== ========== ================= + +Phase B reclaims **205 MB** via O(1) bulk resets — the work that would otherwise drive the mark-sweep path. Only one full GC fires (initial warm-up); the other 199 pressure events are replaced by arena exits. Wall time is within 1.4% of naive-only on this workload because the arena verifier's mark cost is comparable to the sweep cost it replaces. The advantage is not raw throughput but **bounded per-iteration latency** (no pressure-driven jitter) and the observability to prove which path actually ran. + +**Escape detection**. When the thunk returns a heap-allocated value that the outer scope captures: + +.. code-block:: scheme + + (set! escaped (with-arena (lambda () (build-list 50 '())))) + +…the verifier finds the returned pair's chain marked inside the arena range, correctly aborts, and the naive sweep keeps the data live. Tested at 20 consecutive escapes: 20 escapes reported, 0 resets, ``(length escaped)`` = 50 after completion. The fall-through path is correct under load. + +6.6.2 What the Control Group Tells Us +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The meta-GC makes three memory strategies co-resident in one binary, each with its own stats counter: + +- ``gc-stats`` → ``(collections . live-bytes)`` — pressure-driven sweeps +- ``arena-stats`` → ``(calls resets escapes bytes-reclaimed)`` — arena outcomes + +On an arena-friendly workload (transient allocation, scoped lifetime) the arena hit rate is 100% and the full-sweep rate falls to 1. On an arena-hostile workload (every iteration escapes) the arena-stats show 100% escapes and the naive sweep carries the load, with correctness preserved. The *policy* — decide which to run at each exit — is ~370 lines of GNU assembler; the *mechanism* it decides between (bump allocator, mark-sweep, bulk reset) adds another ~300 lines. Together they form a concrete floor for any future memory-management proposal: if it costs more than 30% throughput, or buys less than 124× memory reduction, or hits less than 100% on arena-friendly code, the naive baseline is already better. + +**Reproduce:** ``make bench-gc`` (bump vs naive sweep) and ``make bench-gc-arena`` (naive sweep vs arena fast path). Sources: ``tests/bench-gc-memory.sh``, ``tests/bench-gc-arena.sh``. + 7. Portal: Feedback Across Time ---------------------------------------- @@ -835,14 +911,14 @@ Lumbda implements R7RS Scheme in three implementations sharing the same ``.lsp`` CPython (reference) — 1.3 ms 0.006 ms 5.5 ms — Python 3 C interpreter ~9k 20 ms 0.06 ms 109 ms 205 KB libc Python bytecode VM 3,678 149 ms 0.75 ms 437 ms — Python 3 - x86_64 assembly (†) 4,968 8 ms 0.6 ms 43 ms 22 KB none + x86_64 assembly (†) 6,645 8 ms 0.6 ms 43 ms 22 KB none ===================== ====== ========== ========= =========== ========= ============== All C & Python benchmarks measured in-process (no startup overhead). Assembly times (†) include full process lifetime: startup + tokenizer + parser + eval. "—" = not applicable / interpreted. **The JIT runs Scheme faster than CPython runs Python.** ``ack(3,4)`` completes in 0.19 ms (JIT) vs 1.3 ms (CPython) — 7× faster. ``sum-to(50000)`` completes in 0.55 ms (JIT) vs 5.5 ms (CPython) — 10× faster. The JIT compiles Scheme AST directly to x86_64 machine code via ``mmap(PROT_EXEC)`` & raw byte emission. It handles ``if``, ``cond``, ``and``, ``or``, ``let``, named-let loops (native ``jmp`` — zero call overhead), ``car``/``cdr``/``cons``, arithmetic, comparisons, & self-recursive calls. Functions that use ``call/cc``, macros, or complex forms fall back to the interpreter. -**The assembly implementation proves the language runs on bare metal.** 4,968 lines of **GNU assembler (GAS, AT&T syntax)**, **22 KB stripped binary**, zero external dependencies. Fourteen Linux syscalls (``read``, ``write``, ``open``, ``close``, ``lseek``, ``mmap``, ``munmap``, ``socket``, ``connect``, ``accept``, ``bind``, ``listen``, ``clock_gettime``, ``exit``) — no libc, no stdlib. A bump allocator with ``heap-snapshot``/``heap-restore`` arena primitives, tag-in-low-3-bits values, **91 builtins** (including ``load``, ports, ``write-file``, ``file->string``, ``portal-save``, ``portal-resume``, the six ``tcp-*`` socket primitives, ``read-from-string``, ``eval``, ``symbol->string``, ``current-time-ms``), & TCO via ``jmp``. It runs ``(ack 3 4) = 125`` & ``(fib 35) = 9227465`` correctly, serves HTTP at **2,994 req/s**, and survives indefinitely with flat O(1) memory when the programmer uses the snapshot/restore arena in a per-request loop. +**The assembly implementation proves the language runs on bare metal.** 6,645 lines of **GNU assembler (GAS, AT&T syntax)**, assembled with ``as`` and linked with ``ld`` from GNU binutils; ~22 KB stripped bump-only binary, ~25 KB stripped under the optional ``GC_NAIVE`` assemble flag. Zero external dependencies. Fourteen Linux syscalls (``read``, ``write``, ``open``, ``close``, ``lseek``, ``mmap``, ``munmap``, ``socket``, ``connect``, ``accept``, ``bind``, ``listen``, ``clock_gettime``, ``exit``) — no libc, no stdlib. A bump allocator with ``heap-snapshot``/``heap-restore`` arena primitives, tag-in-low-3-bits values, **95+ builtins** (including ``load``, ports, ``write-file``, ``file->string``, ``portal-save``, ``portal-resume``, the six ``tcp-*`` socket primitives, ``read-from-string``, ``eval``, ``symbol->string``, ``current-time-ms``, native ``hash-table-*`` and ``hash-set-*``, plus ``with-arena`` / ``gc-collect`` / ``gc-stats`` / ``arena-stats`` in the GC build), & TCO via ``jmp``. It runs ``(ack 3 4) = 125`` & ``(fib 35) = 9227465`` correctly, serves HTTP at **2,994 req/s**, and survives indefinitely with flat O(1) memory via either the snapshot/restore arena in a per-request loop *or* ``(with-arena thunk)`` under the collecting build (see §6.6). **The bytecode VM delivers 7--19× speedup over tree-walking.** The Python implementation compiles Scheme to 40 opcodes (plus 20 specialized & 5 superinstructions), executed on an explicit frame stack with inline caching, constant folding, & peephole optimization. Full first-class continuations (multi-shot, upward) enable generators, coroutines, & machine state migration via portal.