From 4f028d0483bbbb2cb7c1c418bb2643d558f48181 Mon Sep 17 00:00:00 2001 From: Mike Saito Date: Tue, 14 Jul 2026 12:59:59 +0300 Subject: [PATCH] Expand Aerolib from nids.csv and wire socket/net kernel NID handlers (#128) * Expand Aerolib catalog from nids.csv and wire socket/net NID handlers Load authoritative NID pairs from scripts/nids.csv with ps5_names fallback. Replace mislabeled kernel zero stubs with socket/connect/bind/getsockname HLE and sceNet byte-order exports backed by the CSV symbol names. * Add inet_pton, htons, and bzero kernel compat with CSV NIDs Wire libc network helpers using authoritative NID names from nids.csv instead of synthetic Gst* exports used on the crt-loader branch. * Fix REUSE annotation for scripts/nids.csv * Drop bundled nids.csv; extend ps5_names and regenerate Aerolib Remove scripts/nids.csv from the repository and fold csv-only symbol names into scripts/ps5_names.txt so Aerolib keeps the full catalog via name2nid. --- scripts/generate_aerolib_binary.py | 13 +- scripts/ps5_names.txt | 5773 +++++++++++++++++ src/SharpEmu.HLE/Aerolib/aerolib.bin | Bin 12383286 -> 12800051 bytes src/SharpEmu.Libs/Kernel/KernelExports.cs | 56 - .../Kernel/KernelMemoryCompatExports.cs | 43 +- .../Kernel/KernelSocketCompatExports.cs | 558 ++ src/SharpEmu.Libs/Network/NetExports.cs | 48 + 7 files changed, 6427 insertions(+), 64 deletions(-) create mode 100644 src/SharpEmu.Libs/Kernel/KernelSocketCompatExports.cs diff --git a/scripts/generate_aerolib_binary.py b/scripts/generate_aerolib_binary.py index 26e1350..7ce8a80 100644 --- a/scripts/generate_aerolib_binary.py +++ b/scripts/generate_aerolib_binary.py @@ -3,8 +3,8 @@ #!/usr/bin/env python3 -import struct import hashlib +import struct from base64 import b64encode as base64enc from binascii import unhexlify as uhx from pathlib import Path @@ -21,7 +21,7 @@ def name2nid(name): def generate(): names_path = Path(NAMES) output_path = Path(OUTPUT) - + entries = [] with open(names_path, 'r', encoding='utf-8') as f: for line in f: @@ -29,12 +29,12 @@ def generate(): if name: nid = name2nid(name) entries.append((nid, name)) - + print(f"Found {len(entries)} entries") data = bytearray() data.extend(struct.pack('bK}gmSwr!c2)HrC$@U2-uJybf#>S#>b<+FyLyM@ z*^?BO!)C!}-wX-FngL=U5Q_wcFf0}f9}I+y#WKKrA+}+dA-@4)f55N}Va~1U*RS8A zXE7fCAxnMFJ@?#m&OO^bRrND}_E&d&{-y7_lSqE>8A2frDFpoa9))kNg*Cq2)#l)q7Vj!cvK-C zQwT~SXoX-D!l)1?g)l3GMIo#TVN(dZLcC8Q9#@F>E5rvB;t7R#QXwuYghL^m3gJ=+ zw?eQA;ZX>$LiiNIuMh!+2r5KKA;Jm~QHZEQ#1tZ~5DA4yDnv>l(h8ALh^#{76e6z> z1%>#aLVQRezF8r@MIkm6;wgpT6r!jQyh4-|LQsgZLR1u@st`4Ws4GN6A({%&Qi!%f zhzcPoL`NaI3Lz^*Pa*mWF;Ix1LW~q*tPm50_*RAZHih`GLVQFaHWlJ&g?L6G{*^*} zR3Sd55Q;*4yFxsx5LXo9IfeMRLVSlpe5XQumqL8ELVS-xJg*Q}72k9Ex3h{Y`_<}#D|C`4GvbaZREmH=~sT(XjqP0m8F z=dkXt>PXJ(N#`Sxjwc#F26M`_c5Q>} zcDb=Snk~dwcP6yytkd!Pb`FDlyFD^$2vuFFy1Cd1V=-35-i8EJX@iq~k584820cGq zfWay!S5>S=lW8!S2vw&wjMs!Edvj|>d?ULw^3{^XG+q*qZcc|av;}*8)Qm*)o+5i% z1?UOgHrE9F?NU?N5GA2ax?15nlQ1-yK84kzD>OOG4|REGO^)zhXSwe-;pJyz8g@3= zZI!wXUnA9+%}n7vVLqC~VK8HJn+3@>o4UQ_6R4!>u z_CnsFX~(pI(5;onJGiyMi|t;mf<`A_KDwF8lv{4Qqu4PFSMWq0I4czU6|BA$p(}Oa zG)#3c=BT%8axO``^2aeK*4mAY0_XzQs_|r{W(mfv6UOcru|VgB;pmWwh{%uZu2j2_ zpC8@CCu`gy^}UF{VQ!~;`7~CQt;zTdk?~aC-r*;H-eJSGcz#S%W|A@F?S+7~HtOz} zjZX>b*XLPd%2Jl&`FYIvERY^*Q%_ORSVW%eK)rp8$aumaHew>@VjI|GZ!Hd*N=6bQ zl@{xTb|AkvKhzcG=KE`L*;1}oEPc~O6$tzX-|5%7!iHSsx|^V2t$t4!sq$B4+~&bi zNGXF?%7!FXT-}=06M@Scp#4~$SQAQsgzu51W`ylnoaKqTu|KTX2AOKGjbuowHk|#5 zh1IEeH-Q`t@sI=4p@D4}8L}}c2P2W1Q4oe2HmUnWW&d z?GIuiC!$v#@x5%;9Nr(qMskVXsM&9%?b*1dNTrQU(6G`LF+fX{vpSsAuvQzfTOd0i z7_v~d3PVArGrj!25GK+n%W_d~&9?2~eIaaQ)h~q{ZXfUIZ#I^vY}v6)zl{w^2?#1# z;-jWFQj*Q_10jJ&vM(zb`))}H9|&n8EtZZcZ^-xuw)p0Opf+-B=;~9RLPbbVPuA4x zVA-->Up=L7y0Zhv1Jg~YiZ6l&YgSYBI3Q(g6!~VCv{}m3(9;{WsjY2qYA#Ei!iz1b zDS&Cmpxs`-VG}&@IGuiU5AtTM-GC#YIxBz&`yS+-KmjDJ52 zHnM4TwavjwD?FmGe^)tCYtJzQpFh7>v`zwiS~kf01Hl0_^8H${WSUgU`CGu4NG9V; zajdQGXK#haM#^1Vucfz+Sxa0shnpZ9h#CY=*6iW_=Fl1s)Ezy~sMAYt8PTo)o((4P zqBPz*zs<4wPY%ZgG@0pp+A)V$^jX5Up0o*ubZ!<1z7#Wh9M($6z}|Y+&PgURY<34D zwj9eC^S3+6M)p8KZJSwNyGWVTkV0jJwyUXi1k&UoCrQ&CjT2IouenFXGJ87{7&2<) zG6l1<6YJh;h0PsHfbBBURK?i~rS0L{S;9uLoKX%&d|>R-hN*^Ok~g{>gb(tZWVScb z7QrHLGRgXk`bZkI-^Yh>p44l?Ay$)?+&D+ml*!@ZRjboevoFnSl9lnu>S&Eic2gL~ zRoa;9!f3{Zq?>mv#mSV&#OzhpGRTS-_P~ISv?LDvuQ1{v&aDU=1FlIreAY(7A$ko> z$Af#OpzFVV$LUS7XU!zKfutbUOgIDEx%3Pj>9XWZBIi$A42?5;!OB99uWoRq5*aER zT!!F~ZhMBehJ#4Cmb042rrhRuTytPwylY(zVH*NMa!^h+#)V|1nj7vzpav**Nk`1s z4_a6QW0r5Zu-q?_o?#;14R}jsFW$)J{tJ%)VW!-R+lpe!xY97`D)As0>0z&5oIkltDqi?ml66a&tFmiMY*&Q3O~64mEBN%v?H9b_E4g>C^) zg9TcN4f*28$);Evwu^H}jLh6IMBjSzjw4Z0wwE1+WMI_D`*%rp2lU*bW!$5Il(GeD zyu3@YMrJD6urRXcPrDW2O5?~?2cPL-_3)iV0?a*NM|_YyagY-W%hg%PwU3 zw3L$vdn7x9!;+0s5}yi>97da3+S(};RkBRn-_A+(ZY4qOk}M$7Br9jKqgLPCsB|m4 zBx^D4m27|s`Z|GfEl-KNB)bE8PO^d2FjVo<@*r&5C0UDUDp{JgI06pdVKDAK7Jzgn zS$#FuluEgZ+e1}r@msBmCEHKi-26D^jn!>4u<4ndVZ)Mjb8OWi zhz(y!&1QG*Rh4YWB}OKrb}^Y(Q>~p4nq)l#OTXeb3?}yYE=Opa6D*Iu?dBba!=%4# z7+Fhf%UDy(B6A3LKyUlm3|-As{Gp&6YwS`5+f=TxT1v8w0}hL2h|}sFC}(0#Pkc3p z&CSGmyM=F?lWLi_)oLlbcQVTFI$tv=5Nf5}v2exMxRwXAzPW2fO+{3h4ktl3;|UFh zY-JB&v%~5Q^!rx1OO;s1EtbR*b+!{6lm*f>Gu#EWxkVWksFzCX?cSa>7gMv49js90 z*>3mzWqZGoayD?PxdT8GXDIE~_lpr;@T7N{q7519!%*uh3%KGiv1B@eDP`Pri;mrZ zy(*N0A@NfI{o|0iBWL<-SWQUPCHbnrH=s13l`Sia_iu6ZxE!_}j z+bs!DUJ}Pslx0gskot7YSc%VeA&jO~O-{yJ-so`^vX|`Yt9BD3<{UFjGdR3kvh8ry z>~SGeF%5Bb5L3SiW@U=13q?U0{ti3kO0X5Zvrwyf`hvkn;fz|{>t0~IveVR&yZv5X zHmSwuosh$BttXJdoJ&e~qE3G*jMF+5q}=Swn^j!27rSGUuGY)7*wA82v$zzeLG;@^ zltZD0O_mE*XTL6+BgqP`$;=Ippz7uCl`5f7I^E2vNufGAD|v!_=lBNME4BHM&}S%d zTR|(EP^RSj-7Zd|H3^QJLuboi4u-Sa4iTf;g6awqPRQ*6(3}-89!y6^8 z$B{LsUK)0b-AG5hsMrmIuUs}O#db*V%_c(PaD8iEc)2MafY}g>btsB$^v04vTH2v} zq1dVS#{A5W&4IT>iDZoOC=!T{_y#{a)AJy>G)Edk#SvAi=r=9R?UO$TrLnB-^!t1H zLcl-S4ua=^u7dCpe z5;^jv3gP(35-pgv$(Q;Y0#1#ERyFT;I+I2)6wDO2qpzKC7+WbH z_fASu(pggP%T&>;_1TUmQuf$wP9c-V0^C$bfCy|tAcN`(vP=#J1FNlVaNGTHT%c7! z;FR#vn5-pBIioS?XhhV~@77RD90;T+WDC84*Xy7v^V6UbPew&cqcREjLmjoWqfNt# zun8qiY`(}a+%ia#OE1QUGwY#Mai`XZtm*r*;O#rw!pN7HZ;ib@aJ5KZ z8PXNmY?NZ{9_!3dJLWNXp4A^3)8eS-EA5c%fwI7b{!SHi0W#$%f|*2BJMT>Sj2enmGVGsMTG_V40p&D^%BA+Kvmh zhcN0o}ax0X)65~7_q7!ca zOm*d94c9h$;?z4t=zhyXd6|;mKQlZ%aMxlRs!m0?8m$2~^`K|t`5;^NM&!b_$=d@t z+=MF%GF}iI!$6rEnH~6oOeK5<3Rfy6aj5yQnG?dLbO>ueV(=72VV!3^2Y`RyH{3I209+xZ+2z?jI9J=Yz0jQwUSdWQHhiPJJ=~YT ziwk7IkqETMnW()Mo*hbUE99_8vlCaM-fhQc8n?Ae&p1#o`t&7}FFsS}=@?elP@y$Q zmtvcvUe+-SXtZ%W+%cQ`lVGu$G4EQGAxpN5FW3=_tef3AQ9ZN)YS`{mSzfNImwW1N zRJ112T(H!e=9GhxwpZNL#_*C+#%wkZ^ewxQ+PO~~Imp&Mts!gZ#MCx`ZKUeKt#p!6 zpS^4Fo7FCW?a}GUZM3|pNSSYnQS};Y$M_~LR>IxU+Rkbr^>TTdfS> z8O44V!uozDFcF~pqvw#}2yTJ4g&}~dcP%qW!RU|JTvmO+N6jI{$9{%%a|>%K)RW4I zm{h7!P`Gu0)#zfcAd_`xwBQ(6T*F2fvO5=Ct*JLcU>B-0H2Ah=16(j1|B^svz4{iN z-wmI*gF22XGM-F1V6(%@|CjK}vuE>!{ep0lV0YmkomyS7+jYJzVVe#34@x ze3DhH@U-5S2l~Uk(GL1IwLX!Z8>mMky`rU2uv#7O{U&^W4&|R(DqA%*O(Q=jdJ-}Z2p1gGsaOwi^##%u zh$hHBWs13t&9*O{hJ(Egf$zSB5^1l8^!@5!!kQ~k*-(djwU(g8q}y1eq**L>f}4gx zI}Y}A7u*z=zf+1fprC3>;Rr~BfqtG{1j!YPTpsvcfe;J6Z70+ekug?um>jIlmYFT4 z#VR=e+uB&OXOUPc>&x45W0Z2W;f z*M1$9yDg|d^rUQ~QZ&g}8B=0Y9D<5ktrLCJXP!uA44V@Bo00@SvxEFF#y4_-F$)JE zB@Q)cDQyUkL=QhI@Y>IP6}l94#fMxnPUUdlMOy9LskO`EMicT^GE|F|eAWI$a^W&c z+CQ>cHlU=0(@aSeA%##|-E3mt(=cS1&1^jkDz+C)ZEmwSo0Cp3D@VfqeSuV^a`w6v zJ7WcXHi5=$W0FOD_XDybZF;E~?hd88Ee(vFLEwyL6RvUP2FY3^PrYvmS>3n~Wd_lz zX|aSgKM96K17#UEKv&YC>7F>Ahjd}13?XcVti=7r*1%1BthkV{8wNvo=|(Nt9yzTN zuH$GBo4}gVkn5J!4u>MnlV#&*knP01dAt4g!n6N2Y;czc-i)(;q z+M#jyZX{ep-B0}o-Ace)|NhO^e2ZQu*WGVSO6xiHdz-rJ6bte(Jyf!w~ z-aI%0qxhuBjC>hyo|+e*#&symNTkDDwM3I0OV4Y9O2ICq5TF79AdyPD-vXVI$h@l> zwHxZGNn4($!N0|5t;cDTpWEXg;?MLsDeUg?^DFpO9#4Cs=D=;G1{Io~LvP-Hr%p5BWO0z>vn|R6y(05x1kN8QAcO>cFz(4BJ)BqyzAodKrx@E)vLlH0 zkh5yi=c##RXbVC~R!^bY^uhINVw%>A9*%f;IZkz0J@l-5ZkB@>wFxuMyJ=_La?qXL|&8JHGp}CW0WUO+t$bMH; zw5f$fZia8Nxs=CZk7N30(E9~Otc^|PV^YD?;CEo&5gKhpMwS6<4tvF5GRZ<@q4 z-^yIA+3yPI(`NGYW`w3THu%wqE7k@yZN`7+u=^AwtQ0J3!UZhSlyv2oR4qTW#UIkp zMUp*>s)mAj!w-=QJ78%O-^8U`9{ciIOCq!5j(Je371Opj7+s)%g8O{v1!>A9E(U7> z+c&X!acPW;RY_;noN755_H0K4=HnTvVS$6y7x)+e3?mJ1Mb4z1dR!C004cQ?=Lc6w zR(f==(dG@lvICMH7-UpewE-QQrJB%!zT;NN#rY>p3*UsoxTy^I)dmA?yD^@O$Sy~~ z%vmRsuup^eKj0eKPG>3e2>Q!vtVzXUhH@Juyfene-huC=F>Z|O!_25c;rIt=wG{j1 zGH$E|@4KmXypooFwBKN$>5RgaObi2!Q{4)fVMyCmXtIQsL=w;eB(~A#%;cHPR=nJHXDr61i0jjU z+uCn~Q-rdvP})KsqV#k*pdWIT3a7%@wL1v#ilAOoXFJt}c~zi|+KCgYnzmH;GHi3F zrp8){*nkWT@|<2U(sG-6Tw4zt7Myu#{#UKLzw>%EvSluq{LxIX-WmolB8JikS5c{T zvrRC0!d|j=Q58(~?6c)Dg~MpjY)J)c{%RgdvVfT07TUCDST)_|ge_-eE0j5U3pns{ zxEGWR4u(AwwDu=5;uPVuw5uM^X^VJQCQW&_n6iY2o)RBb7iMNGR(&Dv29@Dj}q9OZX0Ak3M13^YEsnLz!##F&nn>cdApW zJZYf=#VYR)OiC5VZVMr^YE1VbX+W0fLDB3tHars(q|Ai~ZTE3qyd?qbiFUEUk6jEq zAZtN`*o0a=J!rrsRUu*wBwe-uDx#x{X3`*!D8W-3H3WQ941-`~nYLu?_IP`0>#P8h zN;$yWjfr4B&t5>+K6mCpl600jnRZgNQ%>}Z{(Xz+sh>Ra2>R^HXC6FE=9mg2lr5%g zDUGQ2?E z(}@18ZjmJOQLD3TH7CnKbmKRdmmZ;6XbSIX-HA+wq38ci)3`2Pip>P zl6@Xx-x+BcSO(3$Y$8~LY$nrULq4M;5=ZfmFE83|XL_jC0vCX%d(2(EEop9~N6685 zXwkWYzCEiOfnEogf`Q-$iv$R03UcN|4-~-=>(fonl7`1dd`~WV{txk_Y7hmLCN6Jw zkdZPR;-afdj~}?BZIV1qt^y<#$*9%d;2klyOZ1~>KB8MP93%oG^aO(t!qKumVT$|R zRTMu}S$y9+(63IK$zebmOD>08G`6fEO$rAKQCkzHYjPNn9>aL7mwXb_sGystR~C&2 zZrKC`#~@4MDgx<_`z0>SSeiz(&R<%L98CAz%oNyI;8rAQ+MwwvHuX1h=&Fc~(l}#G zHW2rOZV8^6xU~kGffj!o8~5_W>rF(uBwVLAX^EhECt-&)F}PJb={Krplw;y>03-T*nN6a$C5IDc5|0? zOYghwsVYYYWK1%f3x1E6vA%F@dFcZO@&UZ^Zk~eiw8wl^SE0;iWaJ2}Em{vmVFLtn zB*HU6W`mGVgrfuW=F8k-=3v(Cnmw;5^E}g(MGEHX@SqPjGCNx-s%MhxDWriE4^? zFak5gQu7#r07-WCBD}@GcUTnv#v`X6+QX8aG+>FTDA3cZE2h;Q&@BFs?0e%0neCgy zKL5UFV;4SEx#xB@Acej=%J96u>_KlT^rBww5x3nQ_HR~}dp?Dd*=Qs~-?=+G~% z+!FRR3_BWB4DMcH5DcKV53lSEJ9ZGSYHz&VYzF$?pgci`zO=DuIEeP1?8fSA6Rcyq zhYI=J$Z>^QjP02+Zy#ibRHIEhRgkS|9)~fy6T98SCI$nod7#hvFEACDcA(fVrj1Ua{BbmLD}9$qjDi7^!!o4}gB zT}<5;68jty8V4V;&>hrxAp){zBS|xa9?7|1NV^bDlwA#`(?aw|SN0yky=3a=SHRY4 zxzq)!V^2Z^mgY5}2nOEJcs5IqOMlsf(^f^|!@|9qjzU z?DFY_a<3X?d<8-Fq3gf+=xrf+Y<{zL*sQP}nQd=4L7SRYpNXfMh~^Wwh4|bYV*9M( z04KhdDU8KXMi{Z^`r4)2!nHbwi%YTzkTS_q@+i|Z3YB3V9r|q@IPW>2{q=8U4g#Ln zQqknS^hnglja(V6-?%+$&g?`pAmd_s)J#+}r3B*szuUvHgA_(1rB}$(`I_txS`qin z%eSLdJ1D`{R2qh)!8qp&me7smbGL(HK1k9ckeHw2O|1!JVCXurb~}9CfdiA_b|v(t zWOX>Q+HTLTShsDrr;`oxdP%a5(T$&ZWbp&g=} zADy>EWR7?Ek>f|t0^8n|(D(H+;bK1MtYp4oE=>) zIQ}m!F)y0|Y2m~0xVPU4=H$lH+~O1OP83M>b7NCJ7OKRfTo}>hql?9Nhm+pr_ORZ{ z>e(*;% zczlTa=M_NxZb;q{Ese&Z9-A?UZCeAa|99PD>fNDMxuMDs3P90v-y7-#4PEri(T8p$ z^*YdTZN+7hH#%g7l~^1KBp*yK#@`*6x56}`-FD|#y{pp-qc=abvKV?-YyhkSvI);% zg`7zn>re@O=gjlK?ZYjD8c*`B+^A{p^cog)qp`m9F6qR<6g5bg3q{)FgUn!XX)*ln z7^=p2y;@=@I6pLOHmY1ko?P`lImAkfXNOlY+ z-9es3H-+WJ$KG)kW+2xWU4dxdk)_bv_j3Cb7Hz6cLE^`j>CCyTJm-m*frU<_A z^!eo-5@pG1rzCtE8dlzH4?mVn;HA4NU_l!$cTRY{65^> zp8ptn>gnZ&mv@xKFb;i1PN$t&iH8?Cz5V(l?||ctFQ0p4MLR27T7{8JS`KTZToF10 zlWG8U^J2qU##~(l-T0l#qHfn_$hgs@pCs}v8eYu?_mNABb8-g+vonT%?3wkog)wxc zFvdoO>!7#k&Ra*z_bR*-@pS+Fz zVUvSHAQyDFsikvg)jCOM;}a&O$z+G>&GQItd~E$;vQf+p?U7+vs(>s1uV-#&i}WMs zPLMoha}{esqc_p!t-S+F(Tz{7oLU$f>=yU9DY;DO=6i2T4zH2R>kICPI~$jHhr@}u zJ9YQpQb}UpzOE;OP>`*%*}jtE9o*0Ec-!rwyO&AC zN{F_1tJchpb|LSxP-g@h#tvYJ-JPq$41`#}Xj@!T+{o$4DLEczkVp3dgr21r?hrly$Iq^vpy1R-xE^ULOiGq?DwKpbQQ}*CbQwnP zg+X|ns9LKRjEo?n&Mz-7snbp|YP5_ejvbMRGu3gAI0~(wTUk`ck5BLUD^jV`w={w- zJv#Ia1N3?P@tNaj^7{cFpkNHh7=rc{&cM1d1q&^JVa3w%>%9x4 zKR)W1#o@q@u0LK`(nh4Wo?Seu($5W8r+efHSrTe5#cbkf^tqEd*m-9Xa%J1JHQ0dn zjvihHYTu(f18fX8+TOS=*Q|udKN?gaelR<6`CgdJ0fOJ6&46uoik!X41*ljIyFqs15* zBksR=7tzyaboZfGAHC~tlJwd0@UjxV)bpY@|9At)!mN9BUH9I@q|aQe(Yb~{Q-pfR zCofFd3S%of*CtarlfK5AeT^Qp)L<^XvJOZ-eO`CZVKUf_)q9POWDQg_R=sN09X~-O z`$g#MA#FapA({?#Y`*y1C_NqJ?2$piRgARlPz`$x2*7jEmmbvB(UJAF6Nh;>CphVV zEff)_dwz=19X)2k)mqY99@^uDj>FJIhi%N}H%%elc zd@Amf=%t5scONGCe5hy+*HYdR)cIy(k3OOUeoc~%Sfmx`mka1>y1a-*(7hg2!?ma@59MvI};>?v=!>E}QAadmh*^7g9jkja|WPJMj^LJc< z-`S8g7NPoqAliLXt^q-_c1|gMtGcDy}cR=+vzqCIi-b%T9T+F<)BE3E1GGvfw2}xS0#`K?EM7#RQFGrJ;{C%J$4?%!!{sOGX%EL`<52Jy zc*Fty=&6rizUL?oO~{--SDAFEP>@1bfBe$oi%)|b&VEQoqCYI?)((?RlgVRh$Gi=Q z3UF%$I`$zQbg^~mHp@8sDR)7Q70~69PKRD7>c9+G(>^)alM>^Ch#V9cBA9UuMN7CZ z%~XWfz9zi9Iiy}ZqqBWjP4ql|1bw4$etE$xCiBHsv?i9&p$$f(rR{nAUi96+t}`td zM5b4-`%7|H?e0=3RY$2WoLN~A>m5(o%8lwq)cM*Ib8~;|)8|&;sX7O=DjLJKB;5V{ z=QB&_l|Q}fC{ky?_M!84kd{PLA1ymZ!LV)D_%Stx;G}}F6tTLB=^=Xa<2oyHZ|W|P z@RAF-C&=c941=!!t;)P}=*Tm8#5izG`T@!7;!)=}VZGO`=+@Cw->zFANg>VnJZ__L z0QGZim+NTb+jT2z>g8k;-dfg&rm7_LJm6AzZB(fbLQZ+W?1Vl$y%d~>ACNuXQ1iK=icr7LLpT2)S3}=^*!JlVc>!L?3yR= zlxprEQ?81^hML>J630;bPuEYQ*MABY!_n7^UEMt>a=Egy5KZ&NH0{c?gXmDqhsoK7 z4XBo4VK8nLWDlLQR*~aBf-!jO`#`0#f4XjjC^%P0N|N5NWtS-gc3D;WVo++g#)*No z2q`cE+k5#lx|3+*W!>X5vrA@WzEf_ACg{3XO_aL$lb-_`fzavVZdP`9O`&$Cjoy4A zpwR~)cc524r+X5;cDeGt1;5js_fS@*H9+*ofEU!~U=P3eQ@VyqKAE+q!X1;d9|kx3 z=64uQtE+tJ3%aJZyT-)o9$5x%p@SShdrn(`x}jS@E5D$-07imq)muzD7=%I08pV@o^GSP2JLx77Dopc)X!Y2IyhFLk}+am*3MpanyzlUA-Kiw2fou zB(5Dh*xN)VaIvL$UvGH_-A2x|1Zy#U|cX$L(c%=$Q|~)R!(_xrDy@ z73?2NA<3+lf_b>s)cEqsKSms-vsFhJ)X)-*pUKe(J(m^yRm4NW@B6 zTX$FpRs(s>y+8Fg;HG~3?{%v?;99{;uNEHLQK)2;)-D-F5B6=%z{&O2 zs!o{p%F6PSCp3EsrLq$1Nm?A^aa1dGL!`5O9KCdL`5tugf#r*b$+#`c#P!2q%g1V| z$QA%(4ThHF%BF=%whl4-SK#cv^6)bFi*B2b8SQCLGLGJ6ml^aa{qh4OS!vbey4*@y z{OIb>mA2@7c$q{$pkHPOjThMFU=LDHUp7kQN z40chhdTA-=atQ$l*Kzjs8g~VpvR&@gtb^2G#DEEiP1k;dyYe7<#I$@7z5eL(nWNYX zI>wT3(5`nHHn2OGD=&Gm__DrQJ?ASKS`hGd{zGg^6^s?pb^Y>L^bza1(B+-NYQ(&+d@D-WTwf3SQn^1Zga4o1b>kB1Dl0q4>D1;Pv33Dx*(SW$) zRxmJMUOs`S-(7y_5zvD9E7EPqFQQ0h`Of?2XT#GZd?jzR z+wAZH5$rV}f2&+Nb`0MFk~~u?@)c-7Wy9$DeL%JJ=JF{pwp7Ddv{~xD429x%t~~VO z*FeR7@z0jws8?bP6Y>s1B9x)k8Lxb887wy+aWYBUq}I2f_20Hn33~F+L6=@RS<$2K z{_EwVWXfgK8`~`lS63U(A40FZwR}RO!(4PY?9J{_Oi<|Nvq0jjZ!e#`PrI5UbLsrZ z&2!~&Y?_puy>sRCaW&QThS`uUk~0MCJj8)5NTH}ZSMEgLeD})T5Px?<)ldmu8qo2Z zwZUT_z2^?(zXxJ)Qlx`MW*jM1$LP)9gKUYqcjYwt%X?P9MvS;z%h#D?q9ITR3YZf6 z`73vzPcEz+KSJh8wurYs8b>|hN4IfmQHIz|wFl``LI7r}$%cw^^~ef%TAvv2vq83Q zgCqUJ%MT&yvzPADw%(2=EZis-9m#QR*0F`V??X@j%9Xp0VhQCFHeb_5HEK>sDf7C; z7mu#ohc18q(j8j?R+W#@z8WhBEe@>v)S?OWpt zSX3jkEr@2ZWwedOY|)IaVMeISKfkzgx3;MiI}kZXBVO;Q%wU#wpy#ZRUkUbZQHGC$ zfTEzwmsUvh>ccBXj*#Ydcj(|nx2p@i&8lo(J->2T!|E^OGkQZmG|t19LH-SvHw>YT zM^^3x`{k0@mYxD$fxr7sZH&~Cmy{)1%0|M$&gjKszC{#$a^)nVzH~PvbLMQ`Wn?_~RHkwy_E08bNEdt#za`)Rp=HllGPGho9$ovJ2c`r}!Yk$%Kd-xlKIB*X~#`fZ2LDb_7{)l@mG!wUV$F20(24xa8 z4#!}+9bovzu0e;}!H~rcrqVH?p+t9P^#SzvzqbO3eXSQZPV`}4Gs~i9!mIihzq)c1 z{n+oXfY*wRWAUuVH!x}sPH3}2f4Bm8#SN?ynJFmTghxk|sUXA5#nNsLRYHR3c|9IsQ5PvG> zi|4vwhZ}W1VV)wq^w!E_uohG7TJ&B+)S||!K;Wa`VjClKc+hkkYjDR7QbT9|3YIzi zKUW~)FB-=NW1r9|}hAFghXJxan8xGjISlX6fw^ipO`r4A}0xwhX4MW|w{RdX_E*M}z77(5q*$6k19b(tjn`Cv{T7UER{y7q)crS}4SqH5I$VK<{6 z1jckOlv8cTC3Jat^}ZMHSOr`ofl34dL47KvM&#NMdi9>w1(FQb`;EG>U$zy|wSNZY z;8`ema@Bm8lv<9+C}5?6yhegH7F)z9hap>Ql5#iettsg+59l+uWrK0pkEKiK`XDi- zk36?(TOcX6TPZsx`5Lg1=EGwv=ncVOs5VejIhCi!k#rf4 zQC({+X&wpoEuuk5j-%H-t0WXEOYx}GPoiIJ?jz>cHodx(~86=lBJN5AG9EpK|`^#&W9;GcFcrAu@#KJ-g-d(oW zk_-Zp-%=hsd?LE~GMu-|-?Dn@-ksA_d$JHS6gpza5Mf7ZPp=BNunmalUs^f009|PY z=>2fDizxnAt9o*dfEQk>oL}(Rczs05c_JnB=Hus<&{K~+cXA%d`ZvnwNz158_nf&@ z%L5rZF4JSEv)fB)TTySkItDH`pi0pITrnH~iVX`>EH{I-h%e@wCbv(uS1+8Pw{9`4 zk~hv+ef2;G9r{Bk62I~TtEbS@ja3~SI8Vkh9tC=wd8*aVuit$Fz0_QV1U8j57lZnm zAyxLH`1h|}dhwOj6X?s*D%Ah#b$!$05hj)_S}#M&0vI1e-_^yfvqM8HVb6Idl_W7H(7N2o)1okHu|gJf}I|EWc5Y!tVJz6X|tXj;vu&bD7!@c zBo;?ElUuVM8?A!5@EV3bYSOkFGO9^F(ExA1QG$RnM#R8|bX)yLNl4Q78Go|+>22ci& znd!8zJ-bT7DR$d(QHLohj^VzkI_1*Sm!AWjcMFab@+z;~?Da8DCXrHTR3o|>Te4?Q_uKYVpn2WPHX>_SlA??cr7hmbI+ zEP^2hR3bjEM9ldZ?=YeD&uSaG$lyA%=BD8r2{QBo%Srs2C;asaQnE1_Lm&^Q5na9S zyoT)k2hB)#n_Exen5gYeZq^)1xclBHgy1Ju?niHoK&hVkPHYbOYQ$e=0`Pz@Bp~p} zm_{%4J*#U6v2v1)__J+xT!$QN=d6Pm8Zs0T<47T6&Y)|bzO3!$3C0euVcEI=dH25G zZbGHF$(f1{JPD}({ORiZ1OIXyDKWP1s;Dzs{Qx@pp4CUlo~M{92tu)A32&+2NhEy& z8~2bw2!{Avt(-;NujrOuM5~^IxHW7=8YS<<;!fld_jeDfJidq|_PO=)-gc-A0_!+xj=!RH4*G#w&8 zwYmc5FUZ1+x9}weUP#WekuDmIM-hSnrI^iOEJFK2c+fspIOLq6nZ4Fr7HFrSre6rUL7wc6K9;y2wP21E(FAzqPdJOMPuyNAi zhc}pTde@+e*69bg7nnh<092YyrlJYI*B?<&_efuMnmgV`8{+62zp=$+*v|#@#xJbi zui}m9on~t*!pE#A{v#TXwAEFRGdqz&9p2-q`>KuLsE-bP)U<;P`!=z*fNd}tjM{Fv z$N2=r_aLdQEoo5eQ@m`>;hLwI?gu9Df*e0nLfl{I=O(__1ntS&3j`&T(GY2x8xU{1 zAQ_u2uno7i&k_R?KE(+yZ5sqqVEUhg@Z_z}uTmsQPr4R9-ezJZbo@^t5>wH=^0TWC zZi#$9+sV|&ZDYOBaR|^<_-9+(#k01>z1M=KT9kJzOLlsUo`%pHz4XhgW(d3Wg&Ldp z!)v?LXAsa^zqO9=*I6sXs8O{wco@OToG1| z+VvCoCeLwhOYvdoFna0BtIJyg+V4!3N=w-X)zX^qkc5ez|s33Jpp(meN zz4z3%`*LSmhOEm1uessX=P0q`xquNIIeiQB`^b;1`j)8u2jMDc@gm#|7=xa2vSXGT zF%*AIW0FeMk(FD_)AC_-^Y2zpEU_VsCP^vY*e z>4UktK#Ej?3&m+e6w$x%0oC7VyD%NN?2ZO`W3BFS3Gm+Lp!zJxHg6w05XV-#db#Kr z3%nugfiSgG^bV`y+``DDlj)$@#&*&12eu+bykB_P$^j9P zn!-p`UrsJjlX6>)&;184r{1)Wlio7#Yn43UMovM_rjq&>e}t2cK#fnwk~MS9jo$tx zD3EUrJpo~TAz8C_>J|%J!}Ydi{qt9`br4*Xzm$qfLBrhMVF=O(pBwI}>9Rb?RE_RO~S42>Qxft0#`{ zFxuErpzG~(k1g~Pxlq)W-~|(UCZxqt52D$u$M(#c=D^Z?HO=UBrs@e7YmcC7zqyt0 z%y8^-7yta()%zEMd}lNXrCs?5y8d^8?fq%Ap4w;C1I&(;VT_hs(3h{`Ms7WdJ@wq0 zy646H@N5~Iy*}De9HpD^LMCGtb$)*x9F7Kj)43a^Q~Q@7r=mGg8m(KXX847?U|RwCnXA z)cN%}71r3k?}F1ONHW%8x#v%sN@lda@yKq0?Yp3QunVbR&Sdom{OH3#;dpa=+EobKPi+n2D2(C0h8cBT%2hJ~qbVG|7Z4ffSuTac<>Tg$1qP6#~-3LKMJL%{B@L7Zr zy873kTd?A(7yHkhK(F1m27P^9b`-P+oU|B*_!r*8g<^|q51yDlMo4Btrbc1Xs}1$j z_lx0C^uwp{np}m>8Z5qM-iEII19X0Q6ew2QZg`acH7GE=@!N1S(7b=` z9+FHC`hjL((Bkdr?K=zF5NY2|jL|dy1L!~dN@YzqSAG}N=WyJ4%4p8;$%-4j^*U%R zM!S1%a(TY?ugz<7gLX^iYjB05-j?r~w|=U!bY|yrq&)O?OQWHC0LdWEEz$Fz&z?H1 z)))iu@j!Ca>B46y#B?-Sc?jKL*PvMCFNb>W2p@1-(T(qes^nWAdG6AzFW6?VicYh! z6iljbdV!c3M$s>vUxTt)b=+ z>5stJ9M5ik@A?DFJL!kVIY!oe3sfdpu2bsE;a+_9xl8w3p(wK*$3}_+OEOv?!0S8F z%`d^_-m8zUEuP&0v-SL_#o)2?8Mc&V)JHoOF}5Y#ZLp1v^*RP&KIf_>;TGm1$VYij z>z|n6VM-cMNpe1eJkbhHM@q zJ%{^swf!gIz1Hx!s8CX0p$4C3x7XNk32wn|{%S=7R!<%@KD7%hoi{ZnLrCtw3_A9b zVeK^fFuitoft2VGn`U|j4!v>5S-naO9>Ev6;aIfEm0(9_Hsl(jp7xGU%^B_}1dvl3Ac z-F*oU!I6r~1$e1DYlauz;ZiYh|DgvM?Ii)b88INMiI6Qi8YC!3e0zz%B-ZXa;ez@b zFpF$kIj1WqCWaFptxpAi8m*ewjzX7ixKXI;jmBIjj<3qpJ*#6U;LaO9BNg?_#$r_M znN%rUVHi*777TSG~vh0GcYE!Dz zx1p=oA!NkxfEUEP6K{~Qd0Pp64s75vpMySl47aowPQ#0iGiw*1N!M$OFmAD$gU*hr z2v4IbbN0x+xDq)|u^g4M8L~-q{3Wo+D$nug2^dwoga0>aZyx4GcGV3(&O3{{!m&nYxwC_@Bmv}?mELnySY(jjq5o{75Um%H1fDjTU zHV`1;3yfcQNys;u*ja`ULa>2sBw@aDOKQ8jRo$%_o~Qq6oqOxtd(XMcS$;>6Y_?KW zcaClfbw6K0rtU^m{&MB8uM>5KuUy*pdP zA-#Pb(Hjg?4}hP~X%HAGGvMp!Kk6XYSJTo2Z6OoRTH5$jtQ ze9BpKJkj%^n?LUNzBsp`!X-%?BTqS_s&e0LBz8obr*=Z5K&kB36qD*k0SSKrI~`sT z1V4e#-Bd^wJ8?eVw19_dX$r2omZ?35hLy>c2-Olkx60c=;~G#V-1}zARA?%-@p6?c zz`YOxn?-slWlATNVKSsv1|dJ~1CRIVHdiL1?C&<+7FrjKpez3YTf8{Xm(6&qq%(9) z=abi2h!_{uWcpX%GI_~@2Wl|X$X49Y%{bvK#TtZvIwGMLGMB3=Xrd;Y(kJGNi~TPs zB`EJ{P`4;o58a4sJlJ`7;=yLYR zN%6ulwaPu$H;Lh-NIq_F2v(J$6h|`(PTU`c+LP$&{(}qB?SmeP*N)VU(?A>3uAd|L| zEsrZ{L$`m}KM|zA@~J~pM`UtM$iaAO`Zk0pg9mC!k{|vDQ-_FJ(V?M*j2{qlssB2> zG@+DW2HibBHAk>+e=<``7Hu@5{;hv9NOSNrp6RL>M=<+ z#;2x^5;jGKQJFh_trI)9m*i4x4CX|9LmBg~f;OX7bI$%15wG@=1nVnp@N>-@2^t&$ zugj3Kqr2PTAiwod`VeFRz-irI|Nfj~*ouOwEKiU*0I%o=m5b|y*f&ibl!;3+ke8YN zJFQ)m5TyRUKwUs#eCn3Gqq92HVWj_e*i`X~i#^R!{b;=P-!@qsg3F$uDhY@-#di_5 z7&(036`ksteK}K|RHTqToQ4O=@4kf+@68ZlqN=j0P7r{W5&y}RPhDrWuWFsJdg5JU z+GRB$3gB1!++Y$>OCYH$CIn&~q3x}K3kxGCU-$%c|AtTF$Cy1pwl%#JYl6fB@#aAO zzI^JjmA6qFa&6^-Am@j}10aaebtjDT>i;)2h0eY(^?(fg1y3mM_!y{O+MmMl5cjZTED zkq+dP{lZ|HF1kD8p7ZjQqm&Xei{mXOhpsZbnEs(DAo(GlimqD43STqvFHk?1UqFB zp%?p$Og=g-G0;*FP}QntUBxfr;M^yjlGHd|k_nd#I>_cjS8lim;)8o08Y!wSOifCR zQ;|`}c>wa}L+I{%!HXvfAnsvi14U~#f-1m^rYm8z?Joxt15vBflMk&r4v4hVSIf&; zS1gZi_Ta3(`u{R}9~24t+hRQy?$kTPhHU73l@;pz2B1YWg9lkBi6J2yxs z1r{N=nbLZ!o@O%5mcdE`_LfUu9D4vQ&QDwJmTYQ_^7xHxZWvIQssobx%y8JD%wUF&%4%QWmaRE2@r>R|M`Wp@Fe(7!k6P zzi+4{yW&%15HliLKq6Ibx(*c#z}6-r;Nwr)Uu9=FkOUk3_?`wz2FdN6mI$dQ4#PBR zpM$4;KdeP$QLm_bIiZ^5;N|za{;ZD9;!t;(Nq{)?*4dy|+jREOvL5{Cc-XcPS%gZ) zV4CSOC>kp4C5*csv&4M~ADK=V(Umt3l$ZSxIBHWBsBgA0V*qpT)Pt@!OTi?Ub~Fju-vNClDW%YL{; zo_%TRG3_QSuGSlIr&NS9)~2aP7ai#4FQ4lR&Bz_#TO$)KrTmUqBosu#p22VjhwYkk zLKVyv0+oa#5kh*|k)_wD`Umm~jrdgHVt~g3l_+8kB-G&XgC}9o*Wk1e-w4rgJL^|A z++K8crwS6>U7?2I0P(5$k5OLJ~dT-y7 zv+CPxiSZm;vuYBcBjqf3iN@e*@%)Q#d3?WkFx<0}KpE>$+R14YcCfol!}D)?&+$d{ z_0TljN}NtM+0oXrWncfQft#a8Bhz3)G4(w#qSKH7!6$-Fi?gIR^626+#2v5s9gdo?L*EF}mXa}dziTPmUzG8f zd&ztWdjsp>I>y{>X08Zp>^dFem#ce-dW7%OOPMQryrU6|D%(Lby7*&oI9v}-pV{18 zF&46SsUoS+8qkg30{eq$eai;T(nd#ca#qCJiy%@*}OY+?OkBM*Xf`@TOk%mRnhVfagqkGx>dvR zKbl@3j1@QQ$p-Aa<9@@9BRKB7bNVC^Go($~O1s)?pz*Wk#366oqWrGuNus7n6+8|~ z9)F{jD~I!t z!0Gdqiro+n_EccB9n8YIPC!s2gH!Lo8o`74?|GWmI+G=9;OK=AQ9S+YT4SLdv|cB+ z{-WDujd%cC5rXGIJNB#T4Z?%aBj20`J$qnw7TtRB(1HCB04^OzB*xM0kZIldKqqN3 zQW^+Ee9kLM#lFou-!*^Gv1PyBpjl|9^X+a7P9Sc6>wb@GH{x_?YX-ZSpS9?8^{5-1 zb}I_E6W{z~Iyl0Li5y>0Bl5!lc7gYz*I%Cw-B-7wSsqQ3JOj9KeIS=xduAqfk+`v7 z%?2GTSrAG9j(qm?B%lDzOrX#I-Lz`mJ`jsJdtrkskZ*&+zc~HWE?kF2W>$7Be%hy^ zI{p9d)W8uUYuRgQ!1Z#r!Pa>fj(D+8@`ux!onj+@rP&D8AjK_=ZXSUx^8A0m`d$6u zG}&)$37LCgX9+eQH1jl^y<%(jSD%K9O`+(%yucQF47X8;n&ua|og=ruTz;cIL#rg&>p#XH==Iv`y_x z&KWtnV}=e7pPl*H{?j>;$ntJ`%MKZKVs-_XM!{tNqcI39Q_$&J-QsfDA?#Ef6#i{o zOW`Gqv}^FJ(m*VR8S$qv_5*JBoNeZ{>jstRQJI!C(A7Y;`hS3D?Oc94bY1GE$y8Ts z(}p2bEO(>{SmrDUPF`KU!EQYux-6eWxBCV8b{szh3P@%W`)@rp<27pN?=I1ZBwf3hA;I~2uaR}HTK*^zyr(HUCXDHiocss;ErI8;P5QdKBl zHI^w-J{IE4pFOyjeYJgKcRkd~9o+hJ*09ddvl+`JB)}ul_p0Xs$Gg>wmBygokgBPX z`xN@7R}8e`UVXo-i@9_>`HbL_`^{-atQNAB)NZ(HD?yrOwI>Mgza~B`A#%X^s@YtL z-?RtwJ!RD=Z(5P?gX4Sc|C0`(V1hQxc#G~tp!Yu#q}mq&yr@TNQXhRY$EtF#Sy&QL4)mHB?L#aG`O<}EImnY^jT+G=8M>Rz1` zZmOC;&2yC96QD&Hqf z_*wTMy{zgm$4E!ioCvhV=>nJV&~%|EJOJl{Q|VmxPSp%)oOog-Dc=p0L^#{%^#o13 z*6u@wOLPhNt@lSM&NNlDSF@!m-IMo`zrYJW#K_uKct+c$PSLAO0gB=Ir_bygADR$! zD>|n{*B_tRkI3fS7(px35PSx(97V+cduXq8gOseLa=JQQOIr(XNbGjqwVoMtqjvB( z;h-Y&dLt7j!2DSeKKo4XlDFQw{wT*I~~ z>uD@>GH>xll7QZGXrF%c&Tu@Jc;mp141ca!Ow{}hjzt&0@(h&1eP#Xl`CK1FBVbF* zEuIKzf%3KBX__0MAB2JSWh$d56piH-^)!SK1K8B;)(jv3%0D({ae1SSV7FF4zS60TS?bm%ylA$)CcF2{2%N6mi9}5ZQps+l;&xQM{axbp)(qckk99(0F0}*g zU_05#AnLDXC#9zfKi%$M%8-Z@ef>>y4*{yn?16b{DZw_4XiOKfc2iDUul|a9kM_mC zsbPIVdCeRIBjWq#Hkj36-eN~L<|q-cB->0jZO$X=O`6fV1f1z3a~pIiOIiwYSG;Dg z!USRnH3{wiapr)mol7Un*{q=fmMIKpFiiIR_Cxz+=0wgbrxd)7a*Je=`a8b!@T4ql z)ms|r7TL1*zY9T5LtCH*-7e2f%6f5MDNNZ&7J{d7T>S92sioN?GIcGYj0Y5kLvnW6EkOR1cNfBAH5Rz~VuHZ*uT#uO<2yPi3wWtMLV22Idqq zOm5sz^fQaQ5!5@82QyS8Eo7mt4nW8ZbM=PA+%Z|YEstq+re3YeVW4P<*_hsO=$Opw zY#K9M%Yt#jFmBc2hCKAoH?zx}Y}+gLHXJEHzOXSlR$?WoQxr0Zx-Expd>2qaucu~a z(UIf~pzG1B(GX5}i!}jVyJp>sKAoDe?vOFztiz!9wS+vRcw?~Ya{{y=3p0@3Dx}KV zf}u=7VF3~9@)==90f;O*Ymn5~(kUqDEw%j4~oJE^q=mqe&dbXof> zfS@(#dd;YWJUIYaz;K%68)r`L6mix%?S_HZ)xtqQYxzqE1UU7^nNut9W}M1pPukS# z6bn#G*kunKPoSsYIy2oz9{uQ>X7=ys`qRa-P_$cp0B4TTJ@JrtKcb>!L326R3Om3a zing5xFb1*p3vZnu-ZTVDrM=tx!L zPTzDxm1wJr$X*zk?Bvst;e68L9VyY0P;&cUXAEtYDbW+^c%uY z6JjK{*c6ghNMA*71N*x;qn9tv%d8mXD#NH4TiYU)(hqK0?WJ0Xk&8q8mMer6W( z1YIddlBH`!W`F_){O?7({$U2f%95UDvykMB^@JPYS{+FI?ZB7dW4O3SADOc1_ZwAK zhqH&v8{#A)_FVvY%Qm*}o}ln!PMm`<6s8Ec44nX^hCu1xKFx(&u=YQBaRx9jj71Yy z_2grA~!32J5ihZ<83>;(uA4TM9bzb18Nl?gW1^yzhC-K___a8 zk}uU&)})^Te9%h}qIAFc!SBwD6Eez{b|zxIN&+pvAFz4u|BSy5-nwGUsnF6Hk9ROP zKmf4s4G+U5Jeib&f*JVd*-2F04~^w}X4i!l5sU>;bM35OMWZV}mjbxM{j*P?>HV|d zo9rqLZa$I;6{CGT9Qer#f?M%*dYO_X)Ke|je{^}g9z`+Z>}l0CCMr=psgNZ)sT%RPGpy_1@S zt&JA^ZrVsi!N`~JL-Nt!mkIO^uWJY?ZojFZ-=4&@-NRq7FJ4Sb0m^BCQl(4FV-_DgE$KrY-2Qx-tfP5}_@t(&ueW~$TTcSyeda~6n`qt(W2HW;MS za5KZ)J^wBk_^&-W2dk~7EJeJW)6WeslX#G<|Vy7Jd3Hb6S~9Yu9o< z&Rlf(klqMdv+_IGwi~oF#ij#60C2zf2rT!l-`GBf+-Q#Nugc{&&h3@yT4{f&A-A~d zZft2jf}a1gxiZ@ITXSb*HdRJvY$V)~Y5`sQ;#?4s+uTZY=j(IF(Ql3&JuHh>c^zxB zB~pGp5|l@m(47y=$!8=kC2L=di2JIQMAa|P9gtZd+PkL@DL8;IzW9RY2)g{5qq?b~ z8>>`%a@Wx#G9`qrN9CEW0?>_x56&M!cVb5?nE6?eLxOg+yw(;|Q9w=M|LvSYmxD){ zSHz&V-sL;I!XFe0eFiVs=e6iUbp9B+^*S5W{%{{VMWj_hGN1v2TL&#au9!miY0gd^ zJB*(H$oxZ4;ao{+5@om!pt}m&I+`h>rw&Fv7Nt(_K-b7MKeOLII!Bn*iL6=K^k!m+ z|2y64*3Zl4rwD~E6=?fA*?bmf-<$9{(Wtrue(@Qj4c1%pS_LFfE5AJd`S~fCy=5!A zLQQRs0{=hj01)bhW5>6g`fKmBDbUsOJSod(Oe%rXG)xe?250=}?N1_dVt%_Umy5Q` z>Pn>{ho_Hi-Z;Xtz{gLbUGF&dfQ&50k|YzYS^%W_r|N zlRH{6596c#pqP`8nK}TwP<=w#bb>IAhMAoZo)a6Ny7j6NgjTqW02~W1$XmQ3w znMKQmoRW;CYQB4 z3^vmQsWx0czjO@pjgQKA!@E+1Nf<;b_CunteE--{BC2Hya+S%gF2V&yC-OkAj++*V z>Vl7K0`@t4X~d5F2lQ z^_Xe+jW_fBv13Fg)TTWKLy&{YB42^g-g)2B@iogbZe0YdLpDwtQx-qm;h|{uDO5eT zG`WWAhUvrvp>!m4x)>lSW-;VspK5+xy0ZrCYPkM|UkeVIp2lsk7bCS20vw%bboTPn z{F+{Qc5#V_N8>8JSHmkDI2v9lO2g50z0!O#`AjX9hWDbrlZmRmnShT+%fGf{9-;(S z;D9m_PT3sR0O0$fi*2|XS08-q$=P)sV^@UJPd_88SD9Kf9}4C|X#B0GC{%sZ(!`7e zF{Z8b9Ntu=*EPs7j)KIT3ePRh6J#qLjU_FbZVYkXQcKJ!{}_2h=62W&l+jnMa12`h zxh2zj2C-{HWKiXcvv#$Hmgmux-wO6WDn*PLY-Ji9mp>DMCjh$fH*(|D`dobI6=pJJ zBBLdNPW3Q~M1RO@mPdbeX`YCx8H-t!$U|A-oBZPv!{8wpJw$iNU>~0M5DK!iL zybyiZ&~5DiW~*dxV!#>H_=)7A+HNm^;}K1})`OKIQD5Zc zP)c1l(#@zywPQ6EdTxr`M`&ANeWaSvrE*CBgTZnwuG`}>z8OK?d?)7LG;i||w`gAoWTw-mGY^v7+g>6%Q!qOBwD zX}H(p2J@>vzLIH*8(?O=Z41^a8rCjFs!=XQNv+Kb z=+;=VB?v|Js)m~;uO=O*A(_3f*x$w_iE*zrjV=y`v_{c_^iRR2!XB4TN@u$2Z^`!& zK|1DRnotulhOSYtQ(b*hzDFwcZr8GWKM{xggml3crJ=IZb0;?@zHOE7A(A}JWa4>9 z@I^Q3sy-u<_lxQ~Zgy(B+=O5%<)NGUa&?#KUMPijlZR z(77Ovs|r^KJbw9RGbf&VY^$L*1@yH{2T_YBOwyUh&pabvf=8yJ+H@p=@}&{3iGDxcTaOosgkl*gr{@^UGd5-n+|!PyzwTa!RDMPh!MN; zlfja2l7DPA!^c`Ob4MQuX-Qoio&V(&ya+(THk~I?qZ?H+-AXgDbO49A_l0EhR`^rt zf-xBkRKp$%TK-4=2-;;h0iYOvXxy_B3@d81&SA>AJkcCDaH+om1z{IYK*0}4fgGfx zU`>{#JU+eI*`U=?2$*{cRQbXm7#9ZwSbJqcr)_q3$wU`w!|5GMN>tUIfJlA#*nkRa zEfFnhYx$@m@1l|LDb1-%t&1lHKa0AW;)RNkv$z1OX4_LI%&WN&)iXw`i~guN=m)#( z+f`!onYHn^_w+I6E97$?v(RPHwIe5$BEQqav{-bhFlQ^2cw0aPV6w*H2@n-e%NERL zzuK9AOV#+2YG`<%bw>%0F;_`dk_>=>apzCKvl?b`9fS82&1Mk%VYyagH@{;B_EFN9 zfFwqkE(v#~ zKe@IyQ8mgHFeLiIDSZ>e%Sw@n8p2Y%*BQv#bycVwqgg|?PO$E2iku6jtevh_fT!>G zmP{*yUAKgo94}!#=*%_qPJbbUZazETSC+Nxit1u>#1qXFT{kt*?Y~qg(eR@lA5&un zm)oijvib~SAA-pARbyYr?LD=D{6|Y%=&9>a(k)|H^Zj)k<0hD6i=0n)8m$&5M>7le zR%%VA^gwlVmJplB=YxE| zc>}xAw|AY~MR4k7I*=d@N+@PAYQra63%dx)++o!M*lU`IdK~ZV-JPs($3e z4w=hqEtOkj2)_+(&nk>tap`%>!m%-u2{;_)ToEd*{jFgdJ^$Vl$2R`f_|+2==+vLc z38J0NIU|}5X#_-=&x6T<{g8cf({@J)wT^UDJ-krA|0dgPB4<8+;t;{`skoe>%((31 z!N8W24{hMNb>QR!1a0EYVNOV?07>%g?9>+H0&CiC^xt1Nz8zhtp4cxl6b+Gd#jkd! z`)ABn6A3L35CtDs^;Y7>Dx^3(erBr~5x@8|UpziWP#TxkWejF*kevVaCDT^ldTyIy zJHfWHS_mpg)w}41eMxocFXtcIc=GY5c8X_bM8Om|-re@(MxK=SU6;=gHD4iEE;DJs zwWnT!JNzgraPo%y0HNeGJ}CKPZ>12wmx2e!ZUPhHQgz0C@Q9;Zlt?@z~lfBk5lNvXB7{Q54m{I_}3Svhzw7K z{fb@+5Gh65&e?Y#$ACn`)UOBXG4PH1+RkdN2|lkU$&EVx=dUju98+f6QI_mDz!do2 z*TFS?qkg$>ENF-x&AU~GXiW_jU$0rGP_=p-o5qK^c#>Z{K;-2vA4fZK06z+5Q>7%~ z>6aD`5E;Q=sA*lamxU~@1!=-x`K_jb58` zW}p-oUQEf4UwLVPBwChIvCHHl5c|0Nak=!zfe>7;@x{joTb`vm);cRsZ_Mh;@x^_F zr`wJB(k-Pyg)aWB4_-1bv1*B_S`&6Fp3mZ8o)&U;@NSo#MKtp(3hUV9HtL1 zNKfare_q%(mT0-UT!(ao(9AIiyttZNI4C*y%c;e^gtMMvqxxI|ss=z@2q5+X^(aHd z*XEps&8IwpOg9HM$;DA-NIdT=rEDsw^@VsS_4n>`{dF1PlcK`XU8ma=4h8@d3d#Xd z(y^aw10T`&|Ar$W4B=sZmCKn2M-|A}C=QpqPEZV2INB_S-pt83v$9%&Q>%U18u4x{ufUuM{v?!HZRPNB^@!& z-YaDwTja0L^|#v*n$B1jCJ4doYPRxP2jvhgPa`zDXj#||aWZvQC8*UN0~Bd}c#%5u zN+wFYEflPjMle+K5x}dv1P?sCm5m}!)1OelJULrgg*%Bst+~C}>^EX#@3&5YogvZF zsvNx5YzF8zg?j6yx%;hCyT@8CHYzA-l@ne5$%5(?3C79;z7}rgbZQfu1cm+FapfzU zGrT)_xTD_J^m$EuiJoSk)qUDd76ru)8Eza>!sB>m~{_}))PY;tEQhvBO1T)3!4f+ zLKEX?V_?nk`f-WQXMX3DVoYC^x3bw#3~&ixLmM6s5bcK8(o=AoQ0Q`8l=nqU7z(?; z$Y93Zkdb@Vfe51vHmjCqI|?qgJI5)hgq{`dSL_3Upf{?e`ML^#x9{#*pun!W*@s#( zTHRFoH4%Hcv(a$xei%mbmD`K^31cmkww0Y4N{;T{0kaK0sUBV1Jp$@^!YOdgmfM?B zgERIFNl7FLRX=iSg0Kq35@(EiOjY#!o#V<)$2YJOIHIb0Pq10)vHtkLM7@>)$k4er zCs;>)1!Xdg0o0(tFj6QtqZd^&;LBKS&02-^=`tIC>LY$ zJmmz$pQlcoLYFUT*9LJ=GU%H(#64Y8wE>viH=lc=-`BBqAq=HD`lGGo|~Yzkq@ z2+0#y{*Df;tpR-Vvyaab;4J0c4L1d;hG0?e_cOoNV~;=ES1|alD%N%=bcGffM?zsR zd?`LfksgPt3~lIyqbR=l#}N0`Y&U4N6TuKGd9eGSjv|Pw$WG!!E@8mik>v4hm}& z(EAchHej&D;c9mA_bvU!k{pzH;EPV@_zygKQH|1GP1Z@<+Cjj4 z;sydQ)vI`bg+qm)KiSeji8lSW;rbxT{VIPj`kDDB4iRPAYKm}rZ!nFPX*xI@K_Ti; zN3KW|d|4&L&~Wd>vh+2OrTgx6bnDO)`v^rUQ%`60t$+>P4MP+h2q?3f=n?Y8-~}H`>rpAepE^{+vnEQETH(xV*o4pc`v~3iu;W>?H(MvtZ@Y9@2(x>IR#{ z(y9Tjc*gPc^-bBZFs3Twcek8wn}FEA#L^5SS-3xv^= zyrXxY+0`?8Zu*G{2*B27V`;ym;{|aCIX=Fso7KYseFJdgRy0$#+7wY1!f&_h0ut*D z8YBxwyB4|EWwKi#Oy{eN1Q}K#BF)z|iC#QfQX%T|gUMW!p3Hliq$=3UHg8NPXQan; z6M<+s;x413VC`RU;C)geBsCqYyr zx3QGYWRsqT6W#v&K)g1ZHBpr`N|m$M{dGY0aNPOzX=nxXK2QZlo&ul+srO zSi_%z6~1$so{+?3e)+%?dkCk$RB>jxR0oidx8W`4J+w}W+2wzyCy77+YQb0pN)4fE zCv*X6$NusaW)Hgc2F-qg^EZ4cvQPjBv~4}u)Hj@3XaXtFv5wczdFo+Uh<{K*JpKph zLsFdF{vdGD&g42Sp;&-mJ<;ih*_IsS^nX1*K~(sxBG}fKXg`_}22-+G+=M8jSob2a zM68-kgq=!6Jqi0`HA2&pOLY4>eUi{S)2V7Z*b*Q)?UUe%+-NR=cn{jOPyN`KL*f(TsrzsyRc1L&c8EMnpOY$F1GG|0b)hu$*7 ztnNcp!Ai|gF`K(_C{08C)Un|YVfB+)<*7Co<${6=Dh+*==?`bc5iP15Wr-M)5kO^7 zLedT#IcKkf!mNs^xcE+bkIb&=GD%fLt}Me__N|JOm;Qk1M|li9lA@NKuQ3M*b6I6% z6(K$am$A2;(GPVeDp$>8P|<;aw+7L-KQs@sE-IDHsES&76Jv%O5Nw6_KDolZs7v-> zkV&b{d5C<4K!f{4vuj=R_f$v|Y?qs1tDf$T%J%8jIj}_`#v4Vik!X7|ZGi>^q5{*GQ7Ky7XU=cTdlY$N4>o9pF1X^F zA1o{ud6_=|Am9OICk9y+!q>Ecbu^;bdxc(>X?K$fxCXue+rfo6vl90(=t>lP7hKad zno2fkLiz=qzxZC}wQK#~_#A?I>@B~xm`Yfz;7JB8TuXw*UuK26@nsG`EmKk?;@RU5 zJIHFatqm%0dFH+v4SHIceo+PDCR-$)2!)s^1iUe!wI9RsPZXQIq}*gS#Mr*RP7BPs z`~gt|@Hr#1IDJu*5Ypr{kbu-w8IUCLaTsH=87ZjKt$GCxBxcn|0V6&&A{0f<__b$FfMrYl##?fHW-9dLak<+5v6b_Ws>*!6r zsgSDpV`iLSTJ4;ckGKUNt}SdtXGz`WF$j~Fthz^J9+G4yNQd>&9e}f>9o5`h& zc)<=yvz=Nxm=LNdzoLKcjneSyKb}4)E4V9Vn?A=g#DLeTk7nE-_pPMrp`?RDF=(^|a2RNY^?_B)CWX;AhkX!MZZVrZPhbfYaE5 z`#4nmIJkwJUDoKvh=S5lGsdH45{y{ifUCwR6LUfL&{#{Ib2x-j&4jKMZPTMPt7@2s zh(OO-hzERS5>Sv{h9d`_`t(+!ec^XtAyRg`rWFdwH9gTlBI&o)zgM#xJ^60UE}|NW zYFzq~CIJ^j9Cdr^PgV09H~BPfQt9ORUYfUP0^+lIW9qZ-(d;0c&Pdx|i7=izx*LZO zyz`$?9o@LepS(wNjBv@>xFsL+mm#+Pvs&Xu)JF&tl+bG@)sSn9^p{l|5>BAcZPyTl z!7ZZguMYnnQ#sqX7`WXcLMsizc?|bEhXIVmg3!?@p{UeBEsen_QJL zcUd!mzVd6Dhtc^P>ise*8)W!)H&oC;BnK`Rgw9!g4 zk3aF4nD+%trMeZft!g#+lQ>nvuyG6YWkT~X5mT5lt(d@4@Fa|@&Y(Mq(}cvB@h2X| zH$xxAI<)C*wd6wj6O8oS1Mxw`ev;Wws0_5*5?}**cw!VbrdGgXFxUpug|7*9Vi+)6 zY%ulE^W?6+J(O!up|U&dZxs>uB0TFh6foRor)Uz@*a{SxF&1NB9K(^l8wx#cB5TRi znL?CwmGeq;kpX;wtNiJc5>tbfYNvP`s8uO=ZB$B$5>9>FVCpgXF7c&UWs-@ICIS#m z5Wx$gFoIL~TtPiWm|4N=Yqi?m0^pCG>d)2I-qkBlpFTpU7@_1*+e~370}95JQ5?Zs zTYZ4&y0hj^UX#^vhRt|d0nRq-Vn(C{y*AL!~xm?{6RwV7$LO$ z9&Nm&_5p^{>qlGI@sDZu5{PbRfOyxCNt-4ngjpTZ% zP@E0JIPSfuQ#v21qB%Kd1M6`>XBg%4SAO!uDZ=6i#r55s3E~oOe-2)Zc$r4fgP%MB zx8vUF#|U2oYF_5`CUq7qUssQks(-l#-aHpz4>Y66MjlEiJWY?LLs^(DrxUC~hHwW= zsJDCIJ;ORQ%2>zUXLb|SCR1xgG{(9XaW-b8j|#u1+D#PACe9xTxaln7_NYf{ck$!k z8#K^$qr={+3lOqse$pV}>AiXA%oI^F8cRNX#*?P7(c8Fdz1J3<{RwPX^|;cT?p0$c zNVBI0oBMkI@~Pc$x8qu7ThOJ@dchd;6-J`Flm87nN?yfB@}>mehCo*3KxT)(OijSP zm5Mg%PMw{XSCQaXOLR!RjCVJe&#W}lU5_8#d>gpR@X8E#cxC>~KBCa68ADF3J47N% zINq1J^+N%|-Qt~E$(h=2Ay-VX_c!YG#FzJA6~^Xet0(MCCtAfu1Ks@4U|W}~pcS$VfyjPjr+|1C8KmvfKrC8%60WAB177OI^8 zE?ldzGOhpm%^7f0D|1~t?`>(oO?_ht?!(fPbus@q38~-?Yo+DSwjF3@C%_xw19W|# zH-7!`MIvL*wCyQBlZ9Yf#}iW0w(Ea^w>{QMYE^2NsiZ@^67qrZX)wG_mw!dQmx#7% zHG?|Q)qtP;C5^bY z%{vVBTBcP;`g4FHvCC&Ty&kwg^mnsPKl2PcyEE#Dp;NVLaE@@Fd~V2*4`v${Q>WFu zp_Spd8XU;C^;R+eeQLcoU9|ByS_;xz1J`^BUHff4pu_|2#<0s7ykC7bG+w1Hsb&im zACxUUXNX9!0Hl}&Si({%tO_PTi)1JJ3{MX;jLjuli^46h`+0u~jXwg}%@}84m{h!e zbz*fc!0R365V|2Buq#1|d$nf_aLZ5D%~0mt4-i6EKW5ZV4?Dd}C38*|3&0&Btrlps zock%rLFgFH4EG9@003P`I;g0Eg8JO|dYu{WwOWN<+p$>QnhhuHb#(0sLu_aPfCz$6 z0t%PQ)HNBQf?03C=34B4Yrk$eE=wd@t!}~OGNvFU@lUZtt#ZI3AUS}l(ZC}_mhpKq zE?a~Fl*f-4B8#iZ?z3oe26>6N4a_T*1&+Pf%uLdRQZ32ceY;N+>zco)U5m{xjgL4TpBUbSmT@-9lC zOQm9sJLqAUvTRxP5ngy4mC`{Q7k*fnW90}tL|$1-n-EXefouH0#E z7qnF{w;VEsrG2YFday5=@{W>a71nqL%w%srJ%z6Rp5e4q@0a!(C%}|b5cH;EH`zfm zd)0knQi7FL&bbu{wWOVHjmBQ%)99Lq?l)Cz*%Sa$(`?bIk^AE$5?Guk38RPW?$GF0 ze{w}=J1No}3jcJLmK${^m+RFt(O)PtRB3*R0_ z8ki`-ZC0mCwHRIpiE%du%xww@FmQ9W{JF9>PSZ9yBz3)Hh@RMVE<|w-mGr7|Fsx9j z2iF1EbWd(psu-RKqF_T-y~5TI8jKp<{n&uVEf!6b@OZGCh{q~{9AvzVIG3WRYm`te z$nFb9nvenDf-S#bJiXd`DoVJ;ZWTxX12sATS@8ccMpwH$@5^=8+ku|E=BOEs&w&|i zU00$w`z@JtB3O3zXv94T&@Z5fr^STlx%EEC6)AScbPl(xq@c}hH2z1%^5FF7FTuTs zRYX&!A;mS>1DLq4JiTeZE28SOQ9{p{it+&M{X@9H+)Mag@#bL(%^Uax6SP8|$=f&k zdtRU2VJ@&>S}Z0zmrykzt7ZHaX!gAs7$O(tF-Rv>NsB3vwxEk=o?6B9Fgfnsn5*Tr zJw67`^4lLgvsv$=2vX{rNtIW*S#aL^nJviSKzH+6hfS_<#?iGZM7!NvnIUFGd8^bK zIhRW<$LZEDZ8}s@%qUYg-_-@pdANOE&4`x}!&(=bC}_civr~MF7#;LB(ho%A=LHKdpPvwd{6{_O5d4Hk@UpYD?)hp6x40-g4M$@W_0CwvgV|Xp& z=;FH!yJf{tEgtikxbc^I0PRqd3;EGSs^$c?oZ(SFNZ7uWsw!#Z9kOvc?)zSK;Q? z@IJ(fD0zb0pX{_Np-2=!aW|P2QSO>LLxbV%YEPz)#(&Ec-o(AYeJiRQt2w$EAMLYn z=++-UHHFUoyYbA%juU7x-#^mTF|tr)Tj_Ed3Hz3&E=`zDZ`=$rIrpIR{Mj+0D7OY` ztp?flAblDlxHkWs*pB_$x$QDbHJOZdn%;)0e+k}XRAQs*L#77_V>}zPRC3)i+$6rp zjKbqCm1#^?%Da=kuEoVgE9l0{#>f`qy8ex`+hqVMt;l$3UAhUiW8sp%1%H>m6n&5g zdxO5BxsYM=h&xS>!rt}o8y}Qaxp2A^%Tg9_zKrlGR2hS*kSj7&ujZ?Sl9&F}7}P!E zT-NDG62_8rm6)7d4zZZxiF&qoc0tlP^XpFqPZBMAz)RNHyrYA-pT=2En^4d6WxLAT zYRNq9j@0_EinE_LElRis#^0oe^y#)P$0vi`AY>}+wwk3KGC;ZKQT$#pXI#dRm#pgm zPpu?}Bs1xrxhfAH3PnnzbDFCzibHqbrZ-CtaXA&-vr~M}xg)`vlCCoj(5A(=>p0ids)0H^0)!2!MD(pBpGBw^)3q)!*N#=%`T zxzVt=20yVQC##nt;iNocR~q{!ijCHx0qdZ#S>h3^zebe-R_M6FytQWpUHhZJVKjaB z>?1NwEaKKV8m1Zp#-5QIFO5aA?O;ghaHbH~I|EpmASYWJzb}5xvWIBoeRczvjYT0K zQU_NoJZYmCqPdTqg+xYoEozs00&)R^0rchb%#i7E6RW>?Jt&a*tTAotv|?!Hdj`uW z6ZXlolSG`VRV?M2!J0tSpPjXg!t}Pk2BtH{c+s0Rc-;+j<2#G5hG~4)^chV_CSL1B zAwlN@+E>wwc+H44{n>~zTW>dCZ7-OYtRhoR6czn5@G@H@^N;OJkZq-4SbL ziyp-P39gz9lO(w#U5x5?6Wy}5*4D)g8ZEl{ z$GSA6NGmySqO}*2kAhL!9ddm*cwyaVIhr{x-XU)T8 zGev&SSh%2##VZCAgj4Q}0~gTY2?+^U#RnF@LeOqk#$rVmSBSFFQ_9%t#-Iu$9G?Oi{`DELOWxr6wUv!ZGOfe8@g0iC-l~ z%$cErv{4_2VykHRQK#wBr(F{Rg!?zx=LwBm;W7kU)>vg#p8!gK0NwhLjTrM~S`}Z{ z(FBL(zc}T6Mn%;7tLKkBOsLp$&YY^*>KVj6urf~gd79u8z7F4T*9zIvB2fPMvTafp z}ekB7ZFWC+dv7pb%mm1Y{2kGAc7M2Sivn`GK`8%g= zgiK%PB{N1VAc_J?rEBz61Hl}VrSf50Qxh`i8UTnta^pd9f|#M(wzWyQF9}t}7DoN@ z$$oKyNTiX}HOg{;n|=jf*2O8vUarycykjok^O_4MzgWz=eu&2M4|Df^ZtZ#qIzsNeHa-+vMo{ z_gw)58{c8{na^@Ni8vqNx-LUE-bKQ*_QB8W+vX3V*X(3>%bY?smoHSTVSfC6A(KD#|#v^wp%7NAc56%S=-*RZ0&zA0KhAY{{Q< z&l35xM_cQ*6J~hro`TEQ^p{;{`ePM$Y(tfG*W{L9B@Q)`-nP<`{g(5nOj*~bg;u3V zDFKS>vnxN{`jmH`Fw<039;(#};3PD-23w%GTYqM^Zzoh;2r40YF2_R7(D)_Rf^MA* z0;cu{=VuZ7InM(G?{>PVq{E{c?7iY>U~iosQ`NM*$K0^w(emHnVB34liudnSo;Lltne{k0BYdi>Dq7;Rs^ z^_+9R%*t1CA(NiZ76A7Foq=N*^ZXJpS zX|y)Qr5!H7oMV#3x;LOv>X80TkO%h)zWsB~Fh zrq_M*P^2afE9`0J3M{DUh)tCcx}!ES+KjRe{@uR-&-dlq-0p`oRlZhFp&PG1zWX&r zfRFo~x!vP_)iY2_RTcG-LM-RjWgsR{2^Ey4|Cvi7xY(&4DarJHs%9+veHJJRbH#Ri z@Z8T;oSuc zVsNCI+ggB{Ty}+?6r*d_L<`+`@u}luT*U8#V#5jnUHQOMPe_Lp5q!~Yk{XRi0>6cm>mw!QKiaBc-&c{?x@42DLLGb^7%8tCq&MM z!;duaR3=vjdR;G9;T7$W4FZZj_H>^|3GzfS#n*tmr0nY3#<~tpPcXN#Yr~&zJQ$V} zo`NRnbhK_R<(~pa33r!i`59HQ2tdtev0rR9tXeaH+@UZ9h$(E+ zVs-YKC3O4G840Qj#-Npg-$9{hNQ=f z4G=;6?P2&1x>~7%v$O!C)^~(t%T`Z?TIixiwb2J?Tn(qzN|5Y%*niVdk*`)3?NVI$;>|4F&%fAwtg!)_!4M!PqJThQiNDThw>jQ@frL)`U zj4vjAXT-Ebz`1EjylW4e8cH13KHLo^=kdRrwcz1p-bckpgTXv&4qSYzT-JJum zmgo#y5pqFoDiQ4HJT$r~1p68=Oe)$A{(sWmJiv|Px)c7CSO?KVX+|8*4DT6=heQxk zH;x9Nlell7aUZfIHh@OsMgt9?0j$?1lTA1?x`wvIvYa?3ozF*NJ0hLfaU3N}ChJYI zc5Et__lp&aa!#)=GW+?<=CZz54a`MghNFmo4bkpBW1TTtkppT&QT=>xT}zcX0s4r&mKp& zedMu$u#5!e3|64B*vM#tSt(;h!9R~P8vwOd7GSk(3Wvi^5pb5c__5KrF5U71w1_Tu zqZ!Z?8HklSeRJ1;=l1wRL_VG4%u%l61>e} zO_?Ql@&g}`{=klozp`c}mi=8?6;mnUJ?6?^z-EaPwTuiIvSu-QHCk<+&vhVL#f@(d zw&9_$D)Nd<1nG_`txD81sQxJku_mwEwWIR-w)k#E-Jei#ZY7ngqbtpg>XX-I$W?K( zw!B^+L+rH&`}K`Rn91wYp^v57MRUpDMwkBR<_Y=suBT@el|-fNQzw);cON~B861_( zW$=W~M0!@I+Xgu@$9Lm*d?-D-d3l*qc5B+`?ou^~Z1zQnnu2$d4T|FppluCRYdMMs z_}nczC$CvBXXfEySebEPpE5YN|2nP#OY9H`3(fvYTuEe;_E zG0Z~Ij2CIGsER>@|-vj!A4Sm1h2lZ)y@ zO{)qn)1OT+BYQD%JTa*t$xu4h;JVEm4#60_1zc)njdv-1N-z`?k!%uj{T|<>^CxyD zNQEn13$!bhK(vjWDmUpol!h$T-w#hJ*r?s=40f4h0Nwboa}$!<=i;=Ymo=L#VPDHo z$LPVwHq6NLqX&VTSfnmOxPVB5!O1>0srqdxv6Hamv`J62$H(jNDnurNqk^oAlZh!J z?GU;ytyohYH{{>!&@Cv&{d-4;2y`2j4KA+v3LKD9Z$LAL4ms;9vsvmFOs_?lsQ zfMb(4h)5&q6Ey}W8-yi~*T|_#(lsa`ZwZ!4EonE^I8c};J{MnC!79SfTnz@b@k*Y7 zAVQbmI9W+4GlbL`tbH9<&*)MWlLuX^MxI!kqefovjerm;1za>l@TzCkkmM1V8iGu% ztn-@RSYrfZTT+WSMe({m$Sb=SbN324x20S~)W72=z7M{<4$HW@pu<+)?{SvA%@n*h zc>4_xMnhi0RKcSU32q+y+yBb?;gnY`AM&Ogc?jzZK>6>2O1x$?@j6vl1LQ#QwLjE(T>6nQjK$pDE zx~`nZ47U$EOL4R0je5hi11?8$4rAVgz5d3oEisdzv6id9)9n9(hewnwz zTDv=`S&uc8mrkZ7giY3%sDdPlbFV!K3=HK%#Vcr=)skxEw7jW{4!ri{6QfJ@4^u+# zDQhXWm!>>EtV;)$!GA+>GzQB^pi&9RlICsTF7->WKMr#sFDHG>nag;nPy>)!A4&!{ z!XU0Js8~W>=5*0Y+#q4JB^;bXBY@Wx;fXn_X`k9&;sO8sCO%+Cm77A}_-<;aLRIbM zBPDZ43(r)ahTO@+W#tvdQd$*T6j(rrz5Y4KSv_0~FEpYRfRs@#SEGirufid+etzV& zmJ}>5(5u`&P>g@1995IN&pr%Fl#@uuF|1}0}dpRcTgirm8L0y6A6~q zb1_69FHCSat{M|Xl>`s;|9E8c7UZRAt<#Z!iV2Bu%-^a7d4)EpMmk%Q^f)QzpJGkw zR@pdqqU#T)W)+;()upLeP1Qy>K4gT8#GfQJ8{-x+@RP_lyj>@0O54PNjNg)G0R1HW zF}2o|Q$=lv{fCEd)z*dYCHE>kbkV63+ZsrFA#dE9H`PaQUQTUOL`{NTmE)Kq;N@iV z&Zgax>8}23WE+vM*7Uuuy2|u`@Yi6SZ>7N>Bo7l=M%%5G$cE&G=uG2JJ-U?%nEhe$ z0MR3RWW*{qd>wG2|H{?~1tz5=(k)BDQe?9!FFdtwk=5~?(Zkysd6SO`x#%o9|G`A? zR>(>6dQzd#+jYij+gysY(QQA`-)iRM;SBsFNhl(gqTc3dN7?|Lxc|{D(Y?R?aRoux z;Krz{B&h19?%Kzb<3!18izOhpT7nyB zd|My{Q1W}wtD4BY3RSTi5aKE?_(V^<9~;wdEow5zxLu|b`A9VfKG+vtO5L)HZq@b(+@YGR7Hmx^@ zU7C6dz^1$P_hT)3)yJ&DwG^xd3)A!F~p_n9?)AuPd_%g_~)LE zLMT#Knz1?B`iccj>;@y`<=syn9D({>`q)dm6|G8G8%w3N09x6s?Ad3ckV2V5|Em~Qwin*VEe|$24-c?5b9{n5YBxwybr=aMj;SVhxT$l zy9YeXZd`rxv616=iH+`)O?QeQ8)=sV(NYjBe4urY9vvu7Lx{Uz*QG0{9Ue4s=z$GK z=R`WXM^U#rC4Jgsz>(gtMHI8I--P`_vy0uD)>!d`Bx8ycTS8Eeg8*#Un*XyG_7Frp zng)oXGvjvR0OA`KK6UlNEJ3ieDOfQ|Hd@t>{JUg{;0U@y+@aH-yD&RO6jIu1r$J>! z2}Jp`iP7VU;oYe4y~vJjVLMU@lMgoB@>a-?DQqom*=$cyAxH!N*U`tf0y;L`@zRcM z?yNFXE(OEBbDj4-zNK_SbI&}va~tbQm+k3V3vyKbHw}av13sS^lD$m;xhprBps#0O zg0WVIMHjX|-XE|njP)NrMG+liS7q_gfLVhJ%ZH+mZKcmQ{_v@3^y}yc32__7BU_r`)7mE?+K;+K6|7FCS3y@agEns|Q}r_!rU`;%GRj&s zqRI>M1HhKVqi%X~ufo>zml<6=7;*Hk@>}cY>;D6u`Fy!>As?ljX+WN11IyM(-}-Un zpu*&;sg?GCtCm8qqo*Hx{MPUaZZ%=k0K1$_xnmldk4SNJ!5V*jE7+3Dk^2GrnB-%ZN(hs*+J_KJPPk zP`wD6Jnr<(1u+I*5h+XUxKESNf-mTF;_+deI0nHhtOhO&Svn-hzi{F6VBH&4-RsH7 zq(UOyopiZbN!8B%adbp&!W*fnZH`z#6Y0_&8qL0$dSbZA|N2H`N+F0QyQ7v@LvCV- z39vzvpMPcsk>3yRR@if9hE-=B-V~xfY2L8(@of>krwoc5 zWAp`V^;$NM&i>YW9~%(@35xAPr=m~q-d49nnLsye0rmOkxY2E!-i%BWS*^F~YLgy= z3PSe2`1GSADqVUiGNW+n)QzrHq9IHHi&LqOVsh>a&&(+D%C5$%PVpo>QUB)POuu=S z-zxm_UV`w3e4e5?uW3W3XB;(XRF$`h7oeow7}WAoE24yb0>7$`DtYpY&)la_Hmc2H zfwb1ZRdYOiKe}dpa#N7KY^SLkHEiDNgjXAM;Ro>%0`jBpJ$WBtsP8A!ULJ(G|6i$fcb|QeNz1&8{VHoAm zChDL$?lWl3^@IssdNds#Sfo~g4)S>OJwruQg)(t7qP_=*lweEihM_;p;Zj@`QDdn& zx*Eu{{TX||^f1ms-c?)e3>`8V%O$6Fbn~(!h8EB#=>nOFQ0TT_1w|4!KU|^ge&Ny> zs8*cua3mzV8`U4#--7mtji@&(fv59C2%eZPe>VNd=pZ}bB_(;S-X_aH#)d1?*%LC5 zX>^2{l_^lC#I{eOy@?LGkW5F8jLIdlJOP4JSEvV4^(G9~Z=UQ|Kl-&>o(UJPhMdrT zc=g|;>Ot6=V$N*{CCxQM0@d$Y7MwLOf;FLZu$__yH*visBl`Wf;zXVlCYLjM)kaGO z@=dOY<;dFQiAm^~C{*UEGSJG%7cbmXDo*Z(!I?aLDtR{M+;TQ7EV z=*FjDqVPlgEnXhw8H?GSu(ww2RwYgXwh3!EG=U1UDH zFepVP6|C1NrL${C^-!iTWRI6;P)+87o>;o+gxEXS9)EM&^27x!h6MNtxf5D++pmDC zv{GpJr2)^Esg*2RRa`0RfFufzOjz#AP*Hh`TDox5q08rkCEse%Ax`B*Rxa1uQA4c= z!D;2pH7iUE6_+O?l;WLCCglwFwotrHSd}JUf$ntUHgxtZEV8QyGrINfMtBy8Xwwv^ zYa3EB2$15Rz^m4pavM&Bn=_@9Mmw!G42*}Xbr10_Pl~su@f*4tZLolX|BNF~tr85L zfaGbBD3hdhu@cdWQ()>FI=oRvglz?<%7osd^crmj(` zj6nyu*2#v7rEW&I@jH!dfxrHIW}6}{imgh(V01yOIGlAX+vKFSG?ZIS@uUY>C*@El&hqSkL|#UPEt9h;7@1 zz?Z!_eJ)pk?9W@ElfzULRcTk*Evh?T|4KdqZ)|$1&G<)6NXWj>s3qcz!bWou;{vVu2Qa; z@@X{j8m#Q`A2b^@Lp}PPmDCK%HbU>Nsmrn%&OEhpb$LT_7Hm|1zTqf9a0f+PR}gJsuM}*f zlYf*xu@zGoHOE4fg>*jQPf787PChNSLWct^Y*RYg9Vt=sK$PH}I9?%4=R2}h$UCg2 zPWL!N(nFUaknU6c!ML^UPmYz4vWDn<%wBiYacGl1={sWpZ^crzYOVU4_FB0gT<{%t zL*AcVQKdRy(^hgtWcr2liFauGk&jh-muVG4{=5XvaX3QbJ7z@Q#mh~q5jX!E#@v)5l%zr6o3N6)W3hA*O4F zs29968O{fFfDM%n^a~!Kbgk<8qHRKF;qwqro_D7qzR2RDPR!&hU4lU;8KzkNqioL#OhQ$tHLRYWe%n_%43u z{(kFhHN%z5EU4jCqG|CfBT+3`6O#A$hv4dd{w{)$Jeq9B<%)O&bon=MINVu&5{>WW z$53rA596(~YlQ;ub(ke^wz>_t79N5ESC9g1nqc^4pN` z8{`;zD8k=4MyL{Eq?mKD^%$VL{vG7(6jCVU0(~~EhH|I?zDmvL@OR8B+2DJ5!K!VS z$v&^Ap2oZ~*@Q9Ni92&fK%D;ujLpRoe+XUX`8x>Eo1KAJQB$ae(Uqe(lR12vR6}Jx zwwcKjVShOnDUyYF551K?+5fz6gmn2zF~8DF*))&=^-mt}mqV%oo|&wstf=6GeVzS}V^}rk(Q67I8$AConlJMZEhE{ec8zs! zLRSK>zG)b3Ts2y%@Z$uLOn91Ap;+xedPOYg08fEW ztdq3%vPCUqMD8yInA7|E0wh%1c}J%gsu+O^uaf>JEIU+)Za23>p#!mgDy@ze)~jUEXob=ks+%dCJJ#e zK8%;kJU=th=ZGppXmZg@CZgKaZ!${+p-P5WYgpH_w$UtJnM;ej0-gUke&XIfL+&`_ z)Am*B%Ci$kYi!Odlp%`@BuIG$;mN)6NkfF&69l!nxzkAfGvs3;At8!ZmFwtM9A(y~M`6Ed2 z5&q#Zq7>q2Qd0_7HITq`P{*Eq@&K$k7$6$DWu*H{VVO)*$23NZN{D8cZtlam9Pki=XCiR}g%<%{HT@R2CA=uruh? zr-7^A{W4FE5y5m!TQ4&87$3yD=G?i@@cZt;W8AX4AysQpuWy4=-v0pj3R-K8!aH=; z>INUj|1B5ai|#&)_pN96#(qOZMv=|6_jVcB1BtxuSu(USEWCr=T^!De(1I zpm;!((qYNTC)K`wapq5W{1BbZ)HCrwQU|#{Cyv1#{x5hBKI891hyQ}#1sk=mRnMEd z8d^eceV38HH_`UF13Si&Vl$d@sKru(A2jrtZ}Ho<6H%e#NapKSZ3f^@n1Q=B6g)oX z+%8{A9(OTRHKLXV4V?Q&ej7n3(+vm( zMSH^F*Yh1vWG?5p?=V*iEnAk>82_{-^W%VMk9U^0hX&DQjx|t^4Hd z`3FEfsR(Q#p*KTP=b#RhA)ufMB5o?DEY7Gwgn*5u`v>)W?#}!{f=H`*LzRo?I}j{# zKP)t;Mu7s`@`nk+X$XoYx*UN(sc(Jhi2)USI!X`*jW4Xzu&`YqQ#`l&X$-xo$iq}M zHPuvHt@XM~hpXx|S(T8%wLdE6~z(9*7)dUE5CeLabIAd?fc^qIkC0Gi6LMr!6@6 zoteYG>onbFA>w3J*<}uvj^N)renUJ7*&nU6PuFi8exCv@6EMe&+TWxC==5L183jF> zMBh;6_iZO)(U64-J5n7(@(8-|-^xd~6GjKbnep4mq}sI?|1@*2M&3wyok8VtR4ajW z5P<*Rsm&-Uyob`sOs*vA#i~Ub`@fz^`88sO(}1UNt(>)@K<=~ zWNqliKh`G^^Or3encq{NzNY{|2WXu))G}q9SwA2Q&%kFPE={A4-7D=Lm&t`z8bUE; zoU8=7O#ckNFU?DH~4tKuaHxZYS!#P*t5Mh6M_o4;*b!MbAnHcdRLI zZq(RphK1@r05rlW>GrW;Q0>YTv%adS2FW*HlC(RiH3Tai!xV=IQmZNZS(mPn=h5}K zi2VYU^wwrKDgTPDh9++RfUai`Yv`)cE!cMA5vHw$YN=JxH}egS&5D%%8G@;~ z%RQsN6LD%s6;V^q5XO!!M^ajnQ)MVziynfOS!xZA(!w9%TBgJ`?T`b4g8}o0$!F+* zV5wy}TRI&~!v&;5)awPYkTOIqWO8$Q^-c7Ba=%Y4<{VnJ&Le7(@C)zTe~1*DjarFg z*k;}q^7zBgXyrc%t21S{`vlI@C_RKufAxL)W+@#UGL{--Q?6QTt#lbX*}KA`=yki) zoCR{QeLnP`44XzjS)) zAf<;rvftQEw10jYUH{WNLD!T*Oi#}zbY2VGNWM5f zgM>dlLvJUjj9qIiYja5@IgN|Yj1dWyD@Lm<`iKf#a({My<~U`8yy49YS{ETr^Vhu10!OIJ64sP3cf@z(yRB%&`M#c7y$n9m8 z2Xc}Q1=B^nJ!8sjg}gQBv`fTN(Iz787M~X&IxYl_-vaYME_ZvGyy40-PK)1UGJ&;$ zd45{A`LN@ioq;$PEYA_Om>_z3F}phe2k@@>UB)$2IyB^K2qRqq51Y;IsG6gONCZL! z1b=aU=HX38UB}8pj>l}7b!8?f6|=T@M2RTd^D~cb&N|dRkd2G{G z^@TM&FIVA+dUIjE+>96@defi0IBnd#>)7bAhD$=*vU>`yBIW4@!S``~=J8EAxQTi& zd#ONKYqi*GR?tu{Jp0NtxhV_s;NyrhHgBm|3mbG&9M$)unduFv&|81KI17Pz^gX4& ztW$bN3z&LMr$h>`OF!3X268#r_@FJR8&0VFrU+Yt*WP{eyB=Os9Lwi=a$R+Wc6peS zswx{Ps_OW;{_oE0esoiMJ-51{iOV%;-I0)A>@~A$$OO2sYv0WSy^aO+&;#>RghNOq zn>m1`@L9+I|bw@H9L#D5c80BH6)>oKk z#q|}cvaL=fozpAL=*HVyWATBtEMjpV)aYf?Tp4&Qr_zD2nRJtI!Fc?YE%kcc$XzeZ zPby*=wbdC-dczgO{@b}NRr26kzKp;Zw<@N~yxE*ewpmKGojSHSK^l9v`QPPc?;s&ok^tBz+tw~0R0Ed!!T?PTgqBheBPhwWwUvXalqJ`#w1H-gi}{C`-K|N%FKwx+z8q0aXpzP z;ckLk7&^k=Q40vKZ9>OdEGli6^v1x(`NqP`Gw+V;o0dA39jw`>%DPOg9xt;hME$|y z%*l5tokke^H52rtY#It~4)Qa;`SMKo-L*o)o=|`cj-chUd?(Jfl3H+6W_}8hysrDYGqAgmDyqhHZZ99T@HmF z3wyujtln!Bd!dGoLT5kn?997l87q0^!F9;oYDj#L^GhCd_QrEF(RVi(24H!)X3CN6 zn)w=Q6d{EA7Z!l&ce66Fh}V{tJ=)MPGcBgUcF>LALo=~=$26Afm8u21mWR}_Rzn9; zyS=zDGc&}soh_7G4G!J-#Nt7Ms@hn!%iv+^VAdIR71a%jFZ<2N3U;GWYk<6X%0aIw z95QM=u(N>ncVPVhsi~W2k?AkzcM@JOlGt^k(rJcJu$qM#(@h)>kv+rV_9zMrLSn7D ztgSM1rP%D{a>@|+Jwr7IZ(R+#?K13LVkJ;8M|53n7DBN9%b8tsx8V924lR9cahhnP z!)`V0ROY)7AiKD=2CsZ;aTnoDNj=CWZnK6;=(bB+BbalgW3E!JI}GoLEsyW8{z ze4?d?7k4Ra!BRSD=!OC~jrYQ?n{P=Q3@Vn&kUXp~oh65sHD(N5JLJE`H?1dbJ)(GG za2?@VtC7LlZKWWUZDrA(=Cns;>k7L1wcTKhiP)>IpiNn&ls;tozdrQ9{gj&m2MJpPT_$K`>No=X3$iW<}$ggDLZS9#rHTxsmQSGfWV?@(#O69znpwQ@FT+r3|J#*;f&+h>Qio<4!i)NcG zc(9Eb_hadg~TH@dV9L=%2}VlOs(ttak8+BGH}GR6WgUs;+tcM2H3KELO{ zzTsx{0v(7jyy%PKRJ6}eL)i&*?Fcrn`Z%_0cLmyX6i_?6VAY-c@SeT$)2dZ0YPw~W zfrIx(Y?lF|aYSC(1Hce<(jE2j+Grk9XyVNXU3`7d{YasohtZ1XW08m^LP3`B`nN!0 zL6WeiG0SDXuF;mCgtbG>Q9o{>1zP zlURlKb6i#=0v4SIqO~^~B%(~ugG1rLJMTrziTPdQ)&BR4H)GE^5;?Fberj>>{p#aT z(I1_d2c$^2mx>jV#-0J#WY6fIf0r_E(7Has!Fn`QpkIEnX} zSdLET+)lf<36WL@pB@||ED^WJX>3IvfNSzj3B4IdCr%!oy;nAA5fR#AwRqeWrtXsW z|LK>n?u8LdD|>2e84&^d=trTP`!^gyl>Am;CE4)hbnOGO(L_rf* z@LccP`@}d_c5Otxk?C@wLfr%D*$ytr<1&FRF5LOh1XfvXgh^CJBjHxsp^;6k_oI&; z-3ub3w@6+t*=?n17q-COkH$&-b0WiN1$Wz>uMA3GV?oOyjOw1&;4M1~Gz$JdAf!u< zy?}kNdpZqQF=EMjK+Gn9+40x+9s_25oW`Wlq($%t`R5nmsp9K7!mtD5Q>$edx7`$McW3+9Pu`JmCexK9xwjd{Ne3{J?9P7G%2S~nS2zT zzBvB?y4HDMyuaHAo08uGUZ^dxCNJZD^_Tzf*?TAO&4yr9?LyPj6qD5?;2ti*Ae_8& z-|Z9f>FU!J)hajHPS$;pNoV;RDt~z%5Db#WDYjfzrxuc^-Z+A$A2+z?I8FuJhDH#?RFG-Z5}j-4Am6<(L_P#0!gG`#7M=yDfF4w<^hzL(q7T+V!GK9je3sr|HTjxPJ#SM-t?t;~`bKf1~a!>S;T!U`Y_F{4E_fx+= z54f;sp{#4`%=sF`d6)S){|EDTqwQzs;k-0elHQcxV{z68{0M(Ezh^Q7Z&I+w5FyqO zR8iIv<%d^onWLrYeRrW#U&Wh~#u=09**F)`lu-RkFzzQF*f)lL?HjmBZ7*zw+)HXI zob1ol)d%+No1~ZPH3$xsR%cEyWx&GxZl9FsceF00s!5Zk*fJ&2jngoAm+#v*_|$cl zi;iL>X@pp_@)!i3*f)vDuiXU`LPi_~lig>jI$_N53TK|!cON3H`-m~3X3Rsl z`+LP^2{zsb7LK8%+A+`&5@fxu_W4tVnEWP!uKmfr$)jrns)N!GLf7}Db76~oTod#c zQ*M*TgMzboQT+=T8vBWRv41H#{qa{O6~UYo3m6K~B!w=#Z{hg*5bdYK^Lq$ev0*Lq zkjB#v$pWD7FEb0Ux#fDELOR3v!e#(<^?yBt_TRApvm;qpciY26iY~~}xcuqFzwU!i z^?=!?bXN79jI2N5x(=a>x9x{dWoyP6*IJ|+*mmS078Lsrox2@>s<#8KSW%xzHo&6^ zk3M_?77USSrQK_(;zo!BHTd}uVx}>Ps+}r@gKCukAw5^W`96ZbNezQXWlPhnRX$?n z>JFikhw(R)RBiPjSD6=_yI1K*9sX8Hgea9ZVRS>BPJH7>CubI%07XibY}&B0;ejiX zOmf1s{}6ih5loVatI}?oio^l~xq)xMx#X$D17@MwQVz}%ndF)sljxjIhO8Kj<~9U1 zQ!X4ocC+{D@H96h(V>in3Rvk@-Mzm2V3wtvCLfJTsRBOBkB{H%_=)71ZZkg7$tO%T z7Sv^Ybf2v5KRij{GtLhe22D7rjavQo7(i*{?HGSXmp`@u@WGn7rECVZN<((gQT%Nu zg*Oj(txzSb4kchyApwlXhhJ=FU>Dtg1d*q4kHZm9$f};em?yVZpU_!pbG#1sUJ2&<;zu#RFYZ6E2~WL>vRaV*LCJhG z(Uy5~#`4OzBa`h&Ntvf}Xg|R1>a@LOY^vh+0>JHTFUs5;1)to7xu4o_fY?N_l?dfZ zv^jbcje3jY)2Ov1bx@fw^ZhvkUXGk|EPzhQ=$xi@27_7xtqOysuC}Y(-EumJ z-co^50bP=-IsDUrd6H%D?vO1=1Z<^zxYF(TW9a;uv!jabfnrfxI1+&Dc`iRls;^s) z*u|LBL4$bX5xM;7{RhzO#r?ZbFtRXx53aUS40`j;M3VKwfp+HXYWEMzWrpgM@}ef3 zwtI3B>83h=S_9y4ykz8hqsm0RVUQ9*0j^oEtr=G6)}Y+%fL~j}WLag}Yp4~R^{ga; z7Qde9!y0Tt8(vjabza2{DlwB;q4?nyba6Uvdj z{x*S^0lNHUEVWv*DQXnVlv`u!b9(+yF{cJr2^i~^*X#wH`U}gPUi~Tv^ZBpu-@C%@ zurQk?EoHMsiU9$UFD#4K3gMPnZimZ$Qg2HaA-wnU&UP5R|Bd|w0N734Sf5uWnySaN4s@aP(keIG_iR!Rn*HGW zCJCoK!GKXshdL4BVo|ktR$I}HSNpTuXZXOT)oURQg=b;%@Y;bKKqAexEJmB9;vz$(txXz${j2l+_P6nT zcSEer;P#f>ZbW@zd4%E9g9Jf`g(*L^vo^C@ zG;y`Rqx6ZkES)(`Qr8Q#a!eD_`i;Ye$edg_fZn*ie+PJMag{XJ==Zd*%F61FAm@jW zB_?FmbXa}T0XcV1XPzBM3^2W2uHnH^HDLR~TA|amGk&{}p=;o~`q=V3tW+^ER7GFj zC`*U)xeU=x5Nzmcd){w(YKUxA)P@&&M@bg6X0N>ohx7Zu+90pO6&7qG>)M)-l^t}d zlrv@^k27@%w0=;g4kISB05=XjSeE=st`v-dpTV1Ovmk%8-wHZ!+MrVL4tF5|ZbfIo z+$=M5EwiBCSi4YZd|EOYuTL9GS zWLfDf_zG~hp#FVciO7H6KZ&Xf3n0$vU^C^?xe}22g!x729#9=YPgNHHkk5#e&M1bZ zAO~ny-+R2OXmzOvOTqzCv&X8OPp^!Hs{cSd3vn(p|l_>B?Qed_K5H`fhDf2z>% zl?oYGe}$gdd*J?^E9$Yv6PN6fXx7%%K7h`Ce&HCnScoOD=r5XRu&eY>!S^pbfM!3t z0M}}#S`h0Qds!_((paphUx#n^$X5MEH>;5<4GjrdA8*X>M$DlD_oKH@FTiCqnP@>8 zGu~GQO!1AomcS3>=N6RvuyS9kGGcWQbEr)iT8@xARb$0G*mXY*{W-5XFg2^Mt|_(r zu9OT&zMi?Rc0fGc+g^pDC&&ZSvny4GTY>;@njF53wvFCslS-7raJaB9ESx}B7Zz?u z-!3oQNf6dzyXEQRdp!us8bWXZ__>8+GguVx-9bKZ%DgY*Y^xiU07RX9ap5>R_0WNx zd)F2L$Y=u~lj@S&>QDE;TN9?@7?|Dcy zpShPiC+J-aS@3Cs0y_Jjpl?vu6#DJ2E)e(NBd{5OEUXo+KbnE)Rv*E$ZiLUTeRV;B z9$&cG)~ zV8`RGp0!tJ!Q%q22f0^M=-(FcWxL{bBrEy0J&j!nLFmt&S-2m6x*ODxyfNo!H8j1t zZDlZ~rqt>}70godXtX_vRFh#0F%Dh$-kDu8?SFrE0iJ7;E_FQ6RHe*8bXgqqeUDn3 zEr^&f+!dQ#g-B=&J*inCyFCD$eZ4>0Q}^FgDq8Sy)z)%1GnH7nZa0%v5%Bp~2Jxt% z%<~K2hU^w3NFmZs6yzw*iyp=NVNbA_(ED-h98Ghh`}KePbOewnsWZvh;n5ny;A zswPzX5Z)#7Y|qAMn53#a*qzQh58S_7jW5@(l?kadtWwGnE!n^#FALS|OAAx`)|HXv zyb@If-JK{v3Bh*sp#}5Y22xegDoa|c*QHb;5^tnZVN>7k$BGFxnR*TnT#nC48bJqFq#fmYXx#-gaH`nlHJNpXQtMLX$ z5a3@4KHP`OJ zEPO)4ONCe}iB4A+l#`=cLa%>*VYh-RR@H8aZtBYDHZ^PtxZ;sLf+ zw61f&!yi5Xaq)*n@i9=XR?Z(^pyu}*Y|&B&lHfhNpnP}>M3F)ToO0NT0INw!I?9Hw zwpnWVWcbd;jLts3Fh`Vfjt*lbg&d@Nk~fZPuj=>CQHH)0_nBKk+Uguds%dud$=*PY zpi^k}qX!@bhkO_|;f*_P)Oj*a`CtKwfN%XLZt%#ptHiLK$w8LUH{iYL@~a1^6=CpY z^}e7@6jP7~5fICGE1E=?4R`I6B?3;Rnv}I#O(G<@yl@?6b?LVjsBucxP-5{&$Dzr0 zT$TROF#99r>^=A`il_?-S|cTlf*MU6fa}#|&s~$}-aat5hf?>I*p+^@z(*u+iy4|` zbovX>{Bp^I8;nDWNe6-RpeL^Mi{qXys4A%rCtGg9O=m z4(=UlH|f=gf;#DPNECo}D_<-%|&Ybd%{hptrL$ ztM9Nybn8yi%N9zq1mJN zQMpE~vX=Sfvx!NY<1LX(>D*}UAHW2(Qrk{7Jgsry7Lp}`g)rwxn+n}p2Hp0HU>C%* zW;QsM4e!gB-j%EJG872k)a0XVP(rqf2J&Juo@xZs5N+tk3rYx{_#dk%+Q2~MWKkKR z+U5rMr}ypCn70#KtY7GA$jG8>Gt_t>1shTWW6>Vz?wbIL%7LEnB%Hinh`Xi`Ma{gQ;)rf-! zu<7p>j@h?dsctZOYZ=V3th(MzR3M(C_ql$bnXUGDxV|-m*#X~9-q3T{6L5k3$^5as zo3V*bA74D8=#~xIVqR#M8gRWBY&L_~ahopWEbmgbd)-M3Uxgh1*^Vn#Jc+Jg-6j7-&%le z(rxQ>boz8A0C6<{rFaa@?mP7@3WVqvyY(TZ(vQ_+R{o~hhZ2q)ZgYkxzie?2e7&(~bQbXi#0QA)8+)NTR?dy}TQaf-qoVmNq55 z@ox*tu_|xLf#H@9r$`mL?aswx=;UjM0T7iox0|%L8CMkmfhGTb^~pQmLlB{AF6#D1 zT%I(#GzOE)uy^TKU!fu`OUb6x8iY2uIK7QkZ}@yKC0~A1flQTd8C3Oh38DeQv4So? z8GzR*d)I7CRdcOQn8)fe7(V`W8$83clcoy11-1hXh*yGtK3TjA%wpMMLA3LpUL=h! z{MP&~dPLp`io|}E@P>^s=9*QP39n1-&KunkJ%pyY@X7g^$ku5iwJ@aawy@=L8obeD zLn()yR0qBRHMQ53Y?nwUxLwKs+y8LQnu6%67McaN3~8|O%{-Z4A-$S1DMFeq$Na9q zf3#+N(JE8~SxlPP^ z_iwrRy$Uc+7dpCV-4H^jzq2?qIzpb8pFc|2Z>xUtXl^5HMfrhJFxM3d~=SuFJOnU1n2Kx&yUFHUbM zcR(M5T<(YkI#>vSkqcnNGf!-t3ykNHJ-ORNw+R12+8R?r*8z)s;+<6zW(!zu5?nk} z54enlc1Fhk4afJs0#HT;gjH#Vv?i^siY^^r+%;S(*aFr?} zuq|!4*tM@M?k61ag2Acnat^xhSvg$n%0u(_5s^wYpES8WU1uML3%9SK#2-2vMgp&y zjbtgpxC&%3MFSEyG?IlsUYvpize!V88!ROu_e&RWZ8ukq#v|Zm7!$hbtkUDD3-B-w zm5qu-+2;T+traXX>4?WArW{rq;mryhPth~=IY79S=HR)PllU5?(+O-0-M9*hF?>?N zORpek1-?rK;r&IXxTiDs09w*6g1IzZEcsbyJ!vw4B83smAEOrmF&d6FtCetv@&HIr z#_*9pKlflCE7k3!IWx(Zd)44HJb^9(6w*_Uc~csjQtgFcUKsv$?Xg8Lj5@lkQyuI^ z5+*PJVc6-lM;GS+996~$LI}h|yBdR`@}-o zVokVBG5CmAB|7nyISS4G?i`?u%i&N?axnpI5nb5^H}UJgGe@E~zcL4QD>`LLm1zNh zrT`o|xu`T) z^n-b2ZVEBYyLODt`nM8B`RR&VGSoz`k~fQVcv zFu8)L)KG1|-`Fu_ssNqA5YOc@J168WTRa^nm3HWLZApcP{rKH#HBqQ!GEs9a-h}%e z*wJRr{ja$Pk>Tk@uwrE!9)Bcb&ga7r#tYl;&i?~^`_-oxLCIkXwYH}iXowV8tovjS zq3!iW2+?IWwKT3+!ze`{3*ibGdS(&gW*H-uLdai|+5qP}3|5<^&Rr0gIvw-s#W>iY@T;e=>)>O9?y4hBs-#ZyojTYxz^w&c6&4>wpLu!_?0iD9 zRCk&j={R@*tkR9u@i4J&XRP6lBz!HHniaYaKO@s=stv)?tWEHoG8V`al z$fTVPS60w4X}HI4hi@m&EFK_;S~k{|+_oNowl4h!)~??V6tlI1fa-2J%(ifyOXXX@ z#rqdQul`R50p}@Yx_Tc=tE@CAmEcB!NbSLW=;ALef>2Vlsb#Nb;{||I$qVSjhYs%F zDI;`c6mBi-is{wnywe14<^VLtBQ}M`mktu+vdp+W0Gw}|m6`Nl4axMYDBf_ltS?KE zMkh1?nlIBUCi?3vA=0s&Em3ufpd5U2kwWKx`@x;#vQdp-Z5`}#DuG+*jW56eod3eX zz3BSy9-O=zb}J&3)$yz@>9qyW`DejgcB?(@ACqg|D)snhyyJ>k4j$h-Y03^T<3rD@<-`^@r**)0Z#e2L z=}0L+*CNRh$mKshYdf$Gcxba_+G!}2(Rhk{IIFH$(UmLDYUET6HtEQmk90~(IW2SJ| zM_Wv;6rdXxo>j{%jLKWkXE>-PIYX!Ju4lmP`S!E++2M+1ehq+-jM(dLD?0z`vs$^* zgEvFy8W4CCa}1hMNo3 zR7RcNS3oy*K4({MMj`hlXYg1>KV48d(S;Y#0d(S=^5~{ia<8H_xP1VUKr*A?7nWub z^T2U{!+{y_rikf-&Xil(t}7{J7%Mt`?nUxk`|R=kYfWy;+*ex#Tcj3;^epJ=Hj|1@7-vEzTBk9XoQRM1ubY9H+}`gY)#_oQS7tLP@c@r#pL)@PE`FSz+=!$<{Cd(BE$h?}9?pj-_Y3jE z!>1=67n$=ynsKY)s!f9JwRHTp-*)%^_s(Dv4aTA^9fw(;qdy3wKV#6#2im|CjypvJ>=~Of zWYvo_Y$%2o&FI8sLqDO;ee2IiJZk+pY1?7-#o&3fNcPMl*vpbh|XTo}nFy9j0(r-V1heB#`bqG6Nb#eV|YWC#A zQzLSSn0`^WiWJYp}7ZhQpB;M7+%hc+gWCn+RmZCTL*E7YQe*|66Jgm4m|HS1VK0irF&5%&&m|VJQX5*4)qc2V>3cWy< zp;@U4(3(eH02j89`Qh22Lr|V{G3vG!oRyZ=*;jV2cFd0qpO;)6;$DU!Ut+G&bUIAN zT%ZE6+&=k1n|uu&E??yakBpTZOQz)9Gk9Q8a>c+c!bi z#H@@cimz>whEtiUE|&`uRULl0Uv$*Paj^e{RpoZQT2ne;XMTI>$@@ngeJfq`wN0T? zvI(9>E_8bGY+{UBbMm1J-(T86lwA#Ng4fZyD5RNK9);2E%RS43!)?z~1eNpLCqHQK zkJ*|^m#@Wx!!$v6jjcvOYJn5{#PPE!)$lR8=6I85(Gk>|1&G+)u|Xih2hXPN9VS7S zEN3Sn-h5IDr!0vmq(0iHpy}j?CkbD?9`BZ$E=y%AOvt^A*V%wU)yvkD@Z5S!zUBQx z$wc)GsrPn^5K;Q?mmEki9*0W~oPa~wz~p{bIu31@<^;|lA3mwIN$uqRIn@6@XYU&H zI(8h0&B)PMx|pZtCC!X94?QiK5&(jDcx6c-36kIwd_SC88pMkrNB{&tf}~TXRH>Bh zvMg()nW4ts8ILzVHr`tAjBI&hZ^dzx%~pPFl9KWx*rdR1_?xW{uZ243zr&T6i20}sKm)2-> zTyoA7?O1;eK3O8^b61baKY#CA&tOt7%U1AegM~##qT;%5^Z9Rn z>$y95m#e2UvrNDB`VU^sT}AoeA8((#v$my-Pv_`qY$x5n`rl`M=8Eo6{R8M8ud?H` zq2vSx-XenhO_o!!azVuaVl z6bY2CW!LNrSC;;U{zyQi+x_v9tHuaX`O>!bVYpxY#s8dpbSwPx+!GJiGObvmBQ*LH z|K9d{!gq3!wSD{JFMWr4SaTpbMz%~bCH!|zzP|M#PB_iHeh z9{tX9cTh>AC1 zc%_rLtOiZ_5Z(dM6SZqhyf~8$wh#U<-`zo9s#nROW|$}~r|nxYrerc}3!V=CU$50J zEf>ce=j~u*jhZc4q_!{rzrV4=d^;n70RLD;h9r^5GzSg>PRtZtHyIGy*}wkguEn{> zK@g&<+XSHulWj)tN|0aRe|YUHk>UTUg<(G{EsOCQh8dgC+wXk~F(*vnXRfM5hnZ2* zTCqDD_w4QLuip4dq(fadcpN9ElFI3f$S>v)5gh50F!MiiwU6T@l@}$kZOwZ*sC&de z@!FRo=K*%o1`08}_6#P#YumEiYAbDc8V%F_=@W<>WiFZ-Qi&}ywG}aEK#lnGZvYql z@14XwqP)=}?B~c0Co;*-JP5ygu=si%gvfj3HaWUp@pwKrRh9 zOfK4jj@AV|k22aJKArd#co=g}aQ6$ZKXu0d0}`n7DmmZ2ngsqtqq&Ow>-_7_Vz^jo zcMHO}2v5U)^wY0PU$_=Ke=>$$1$QB~m}gxv3pJZYuh%0x%Y|WKKSjODawP^u%O8R> zfA)GU0=_U^9HvGw`b$O+6Y(O%Wd9PNMvCU%AQDZ+q)A%ygv*R8!UX^tJ_Iaeq&lgu z&@=rXeRJR69z!(ZNePmQ6Lp34pbO%4DT<}OQ2(NFF7;`sSGqaP>P5Kry5il2y2gvG zTrJ(=n`M;a02t}fUgB)%kk7O%x#T^Y6Z1yE}MP_f=ZH{-HaKp_r)ZWg}VI{^eJ| zj(6{FP`fvN_w_q>mdWwV3GyzXY~|@2KmR`dmZ-bmRA2ir=7y{uvg>Y}1!nk_SD_T~ zJ%<%F{PF7bhwqrh^m0<4&Js`{Sb#Iw{inV6)3(1Bd+mdFs)k!wGPNS4LwQ1hgXvr8 z=4Y?!k-z`9TOYk+B?WHnugmZX;Rip2`}TkJ+%LRxMUVXW@4WW0J9^ok#+W&o@1cy> zU%sxze(QH$d;Y_;QRDLBxZvIc@W2r`%b)z-8&BVnQoQ8KGa^~ki zB|?*UullCZ*sUSg;^0k~2+7yb9z#{XUm-5EKNV?nSw0(sloR7b8}cLzAhTUzn7q`{ zj;5#Pq~Y0>xZ7)Oe^G!5L*SRX;?cM^t29$ex*{{%2W_|sAm~f|EYi+vd@@ewgsQTJ z(&0x!u4*k2;c;JVWl{}gvE2Tkz9;0mwsoX^J||XWQ&m%NfjKm}r8yzX*_}$hu3EFg zB*$!jQUkt4G+)=ABD!^3UKCAA8YRL1jI^g8|I=X-ZX*}U%!v{a4M3UBSDY^L0ffNJ z{`k9Jy}K3^nOVwiSGJ}#Vw42G-aWyQ#pTYtg3pr>h^7(Smph;t-v?FEaC%;EIpgzd z8(x*ZTKaB1(hkmo9QOCY(ln!Y%B#>!ZslJ>E1-XuKGjzc*>^NKmvY($?=QBm4#1Cg z4iuS(3bA}aC!k0P4)1;sonD;7JNjDkMB#<}ij4eGaA3WnB=2d%5{Yst?G@Wo5)`6G zfAdz0z2*>2a4#!&ifv}bLRQqfz(vINy5TgRS!68Fb81B@|$t%fccK!Uy7Sc2s@oqVesU z_%RwE?n67L^qQ!Qm5Pe95DEZsHaj%$e?&hBmZ3ZST2(Vw3$CtjrN076kH~-jrjb#J zDt1@8CsapZ2K$>)AF(M{Hd;-(+gwc`6!)F&SML>Ku^(`EwalheJQV{k1M$u6S1(W5 z$RL#TmRw4VNjTKO{68Q?%ek#)8(D*ro#iB~d#beD{`j3OfA8)iiq~|f?NiOQUx)k2 z58r%c`}nWE331-?q?`mDE1%FoZ$k+bp~UtJ@YZTEi`kW8ePKangHOWGCk3__-E}tL z;{xvEU)aAj_)eNI$M-`h4 zAYbnP_A7^K+ezhEYWwhRk?sk7$?wk^`u4%^z}XxX%KpUbZ$eBn+ZL8mdX!y|EQ;gZ zA$j&z1_7frY3EkUMWVEQ@Wn&x|LBc3(Ni?3S`Nu6Q!IzO==liq7q)Lg!sW_hn6dL_ zp->fmW;eRWe+yL{ov)MJcq}e?csLG8lOa*dp?LPQ$fLVE!!RLMsFaGD#Hjw~cdh^8 z+jk&}KQqNU70VV{pqu;&5cBxoee>nhc1?BONN_nwfXqg{zOwy`vhg7(KN`@D(rBKV zvPy*S70B0v%B9*I#4B=juQ=bw|3eMpPi?>Phi^jYy4uRNa4r?v?d^{~haz*}(+h~k zTg#xhrG>TjRwGE`8HL#*u%{6iJe-+N0!&zWRnzeE3&@K7oi{(ZFYNsNHy?ro)7>E- zTl7~G=p8aJz+6DvPh45S$|SGVq2>Vx4k3tu-vMs_&+oqpZw0GkOBT`=TZ2lm5g!1O zPk$7JyxwGi@O#bp%Ae!Y0OcizkmG;!W&&dVxvEn&oiQo_{=NSiNJGW2xBta|{w8D+ z7TEa0u$)2x?DJ^Vqngtn`(xDMcxKg%1m3N4EK2GEPXVAF^~VV1v~qeuEf{&BkqaCU zxrjLdhJ>cMa%-XR^9B^xj(&EdpQW_r#mH=}4jCq+R~SG1lQ-dUM$InzM1zJGeo>-L z$g}Z}-~1vZ*)(Z8pI#RHU9QUL=TAR7MJ2);f$Rm?$ks~&uL%{mw`YQPzlN9~-x#xD zEHw;LwO0^Rz49o9dEKE^O~jL(Cc9@0{58ZF@xaa#mCkhLM0t;Q<%};^e?1b1g<&PM z;YAyy2;YHSTR||w7esyPgKCQA`scU*=AXO?ar;JnDYcyu-8aE;j^+}oCVv*C=YTq@ zP=R-b2a|5RpzMe7l|PAind#1nW|+)K<^AvOKS96qwT7K%+nsh5-w)+m{|uG6ZB9E{ z*9k3c7VhDH{6hraiH}CE&u|snh<<+=lH()zer1~FR&jAuD8C%-J&eMbTpDM=WEgJW z`4JQ!KPeI0n2%QKNGau)kajncV!INtr9!O`wo3GL4Z7yx_d|(Tk#&-uZC5Map%E$( z3tO(AvfGfAwFy_59|1$|3dGiOYbI`&#W9ZWQK15{z`ro8q z|MsnqJUYba`Z}4<>BZi#{N(m`zyH=#8;q=s^D1yo%V578wRnFzk^`uZAOm@*v?wZZzkN(n!v7;?Le6u8j>fU7?067VpfM#yGBNoFC1{eM|?mgn$ivfC-BR z*P^^7U$gGBTRTlgy;7UB$YnfBcH72%cT4WOb+X+Yp*6durttau8?BweVU3!#dPfj* zRxoxxzq#Lr1T>UMl`u8k&Nr?5?vR9bjLI!*Dy`8;C41-(ipHACK!4+Zdh3NP{@>hr z0m?wHhh9~0tlS)AUjF4jf9vy4AGwOHv)ws0HnL+U7k%3P)IWav+f z@aPURJt)ruZ3%UM!}+Mv5Vg_V;GfuiV|V<$APHDB4@%s$tA2$c*%vQAXERVxUXfw% zO1`9HCSQ~Tc*987dN;ruv{@o#rBi4PV{pFUJ2A3n`OjaXmI7}ODzH}ttX&$C@o_^j zXy>kg69)?5`e1HcD=WP_;cozM`rn~+<|sM6-CIJv@m4StKXci4bL6Q5l*>qv7MzdUkL61qc@q4sk7m`?tD8 zb%+O%pAT(nZj?3K@kUQh8T*ZS!UA`12UD^JMK~N+70411yBoDz`MtNEem=3H>qgv^ zGd&hRgWUe$MRMK_Ev{YorAse2XB4qXQ8MwfdltB-atV` ztg-U4SDWZdskZJ_uC(|Zg%2nf6{5aq*>XGli z_1pjO7Bgts z6R5n78ezkkg{xGS>y!oV9z$Wb*dM+1SPTbtL`4&|fobawR2paCEY$LJ4DX%qyzSrm zqqm;_1PFv~%_#NNaK@+0{8yO_0%+KHh4iPs9Q2Ax7CwHZW#jM0xZ?9q;N4|aU zkKXzuEW{~z3Mx&BULw8d3l|3m6pPpF92YlQ1((4ugbFc8+bYN(!Ly7aN!xNL%J=3PvhjaJnyw*;e_Sw~wvR zod`NSo*r3g0b)l$qK6|mxtGn=7jf(3r^DNgF6wk;Y7-Q&VNFWI{y5NjY6zekP$6%& z5p>lZ%IW~}emDxiPS(Mq%h_GK&R(L0>c^(z>rg4%hr;(39@EsdY$ZkZV&#Bs;FT_2 zBf3dGbz2BW^G`-gr$PcZ&sklrU00$NwoK(>y0TZ)Zf2B>7UQJp*=jWKY$2YnRsxy5 z+IF)X1m5Z{OPSWIv2~|Bgv;~A4kUL=scM0&jBbu}EFol|l$Sm8d&(!ySAv8ogUf;f zR}-i@yM&Bk&Sos8xkPSKy8wn8fmH3lQQnYBVpG5}$~hH@LD$m^Z5b8k`=E!;mhIR6`P(mU^4hH4D9^$$JkhlFx=6y) zZm&1ns>KPPJReUIT~#4dx>9nK=-@ynPkmyC@s={> zlh&06U2hIABB$EP3@jJKa-LtQo$+2^Y)<45J-`~He6ebEjDEd*n4#kY(P;BI;UMk0 zdyFQwtb49cTH2)3`qVkaG)ySmtMv)AiMC0!2HkG8Dne1GVkYWgb4wCJlZarjzYPLY zu~1!DPbBPIyCp)Ir3;dnK}q%uZQweg<_(}wpe$gzl<&vw_`Ke^lppM%3#o4*?GZ>@ z&zMg&djqTv6Ioi%i{+*yxq9zHkirWEf$VEukLgqst*6e1$qfdXDmLt@6$|g@EgWYq zA`rM9ccn{#hh|&(q zTxMbTZBFfk=OUW~QF&ER269y^ZwGA>S-RwaUPVJ^zx1HIfJF4>MVgx>) zte$G>`XF!y0j%GN429HZ`BYWUDQ@ljq5#~BPajNKH#59%5asYz2QJtXeAl!G(Rl)=K#)ks42bk79;{KPEu&S3`GL(grl>wd6~7d*m_#^rdXqy}^U zTuCRHK~A$FZQf*XR7D0+0&agmLS8d4JvKlgg@kN_?(TO1>kGMVyt&cmURz0>6Zd}j zm_gN3A#u95xaF#ah7Xk!?dLoRg}6PuC^Cn&B(D5%R` zBD=E5=04O`w4qY@$xgvWOM>W{aw6O49R=+pNH~GMLbB+NxGg>S&_`baURyQz&?R-w zo0X5CN676LUU=vQ1l0(Y%EFEFI<0*5jI0E{UH^*@ega3syDjrE(x>H;Dv3NLo=c1b zx&5R6^@A^=9o8h2Tx@AI)VT5FIc`uX1T4W(RHLHQRz2r@(^CV%1-k>$niK`TqV*{1 zqh}}p0&0OuD%9bmg|u6A^O9`{2RuhLivsJlE+9;7}qfB3ILxZnjaQN*n7EBr+e0_+nmmn3=g`pFSTE z=-we*80w>JM#?Q~l+Rxv38RS{T7?PN&r=nz_v{&xJxm_UCo~V;9|Jqh)}~>5#k{D#g~aWI^Gd z-dw^(>rkquD&S(Dw*~8b_|RLl5J6LFS7uXdG^t&Jlp=z-hHcnhWxUXOS3pol8@NgJ zn_PWHKnc3c2tw{P6ZLBq610<6hAn;ojA!%XA+B~=X@F=CglfQdop{Qi~kcZVietIN|> zU}jV&mpZXl@1#IdK_(e-qX;BqOa!kBFSzlNUn{aVcI{h`!47ap6Y+jttbtYjE`Z?< zFjlXoQxdC)tIN6HTit7czY+CZ#-hV(Fws_FOjjN;Bc?OHWQ0(Owu%mwDJo!`WYgl~ zXEP56{;K8n`@?q0h=(s=Nmlt1DjRJrUB`reF4wI!wOExp-w^a5i?$XV3a}&UGR@A%POvcWE7*1%reolD zF)DTjYo{^lCcj(G$e@^F$(Mws_5 zyDLRQ)HF;A(j&uheX)&S4zaY89-5CO?CdaRP3&=7xrGc_d_arZ4N=2#S|V7*K+k0G zOX5pA;xk1Dhu6r#qSLzqv!lIQ;N`gxudUbAB}_fg(3vp=jeovr5$8G7K>FnWuw^fHS3bgBWUnJFEB1AicCK{T<5Rs z_Z=8=!&Z{MQFL^-7W6iEL6<@3*tB1F)4rKo*X{;}&u^oa0 z(~hhHZ=tIRk+8w?u^`~mG5rN_C;^H_l5>rQO|ARv`K^e)hJubTpw5@@%C_8%rO4cc z6J+}*)wf@G#ad-56P53e7MD8!sDbK!PYRm?yH zy98R4asXwOBGxIl8BuhZ@Z7Gm zM@t(MX9#D-F6cmNFwm79&K$!Phb8=CQ{Ag&eN%+qv2Lm+8FeTc zO^eC*84J1Zbf5$dSPh{yOb4JSk?u+!l^VIM^?no_QK*5l+2O#LqSWhyE1nOWb6fR( z_K&kk9Vp;cRhN~B2C!a&GY|d;fpSwU-%&(A1O) zJ+jX4I_IsT^}Jln)3wwl^HwRr_2PVZe!D%zmInR+OB%38cyD}*FeT*k;53*z=lHhE z`r9vn;c{@~s#8LAyx1XDF+s*_=PrW-A1UDpBJDSNxhn7&sAP#km57dY!*Ts zc$UsqLOJb=H$a=6*2oMpTBKV+Fx)svcATc3teq>y0JM+oP$$^h4w5BZ8|icvqSam(%vnJR&jl$1de}~>)3J%5 z6=b!tC=Z=W3bIfmT7z(nq5>X4T28eKJqX&WUqEgE;{h}P(3)>|MUT^11HT8-5Fzck zR96+(1tz?i&ckeG_gYJ#qxj8LX*8mQ%b}EDC>x}pYS<#{`CNjdb=JQ`R@x(LgK?Pk z^2-M0UoK5q8o1_8&>eR3PTHxR>o*LF+fWvPm@zYR*t|mse+ytL zqIO_ufSB#sSaA7sg>gG@VV}-Ma?5SAQ11O6i2X~%i(<+0I@L6Xv!6SY(MN&;<(!;q zyPb%&K**TAU8_4c#@+4LKls)&n}}+0*7eHxSj=WFYyk|I9U^y-iM6Go9QvbT#;Bd& zxWFF9H&^UL_w4n;xTWiZ&db7X+lz&;7mmrqGP9Oy5wC1ctj!2)FBo(X48w3-=xWlk z&^kZ75#U}j=twfqvxc26lr+3>u{!`1?3^aJvrMd9D%ABL#da;B2+|VMi zQAp;>q%ep4F&9=Pkg$h=#Q0e=XSS)u;b6rFk?#bmV2EByR$G$`zxPqxUu%pk`+-~?(-m>bWXk8E9LKhslg4l!qvIHY z^O|LbT6J`eSYBB0jxE7Rd>|PFh9V=gKeXL>dl`l+F8UB(NP_$fRr|MSg+C~wV zco0+0H9r>Z^ZDe~&Ltg)SmJVNKgOR6L3Za(iK;+oOt_q`T3ju-!VTS$Ay22Wpkn!M z+#{!(z911-&>i43EF~1Fb#q#0nTt~d{C9hFIu;Ju`B2~qhq2BDK7hFcSydrKKsCW+ zWUMA;S1&?(uNTi9E(g#k*e^01CG}~=%{!FhT^uA4F!(0H5QR)kH7C2|5;0LK_s#^DYoy2$y~@f8&sAd<0#F7>LV-tK z-2XW^VdWlG(nr)JZ?or7JgDU+YD%FyAB0)#u6_s27Rz)4wM`FgrOIDxd)ai~E$GAH z$nwYz*CqSA`0i6NcOV$``o#c|y}xk|kS7z=u&LW_tR0#fJL0(lyM5wU-hOT)<4K`4 zj=6M+zgX%6cCae002|hrReebr7ssVb{yo5g!ED%Bie;S3TAp~WCmv^*21+3mRp>&g z^HN2k>XdLrEZrczxsc-nMwiVA7!U-kq>rb9O0DOHfFfx}fSDzD%p%5LQ6f>S&#AE#^^~&9eA)B$b|><_oIxJUqflG9CM=a8 zNEHhE&QV|kRn9I_BM1+k3W)0)0ZDF7`msUF-y055SJJpmj<_b&)Wdi5qp$)lN3Y{{ zmbS+RQeXfDJ%A_z6qa;py z$J0sAf^0a;$otv|O6b7=#Lq-$5Lo3}!vsCls6w4|9*fYFxB;>`jUea^tJiZSfxzRl zei;$b9N8rJNtuo|-2UP(zw^-c-~GdPp2T`)Yu0yNl7bgqwO@YcY4q!38)V_s{WzyA zqCu)>1wWD!J}r4`)j6Vaxr+NQjD*lw<2`czQ1+^8G3{p z;}>P23RLz>1m$U{di-F2lx=?}i9JJ9VB*l5EqQ1z2nei$zvY`ZTY^AA7_^D??N*6R z^)gk+y7i9#_nz4-1cKTdUQpx+T+y&uYaII0d_3xwAAVqGvL5IVpkZK>soG?esnD#j zcMe~sQ13jWn`<*R!)HC=_&b7U);KA-(;Dki*aNaUhF8RcktVwsQ|DG`c9GIHp7Wsx zcqr6_?ygv;7@AVO(2)DeM~=UyG#dh`>tIyFq>g9_TCAbZooBCnZ=kw;7^%mY)G#-s zd&<*CAgD^Hwq>sog=Aw)8}h~XvTL=x0q@eG`&%&lWCCG)?r_A<)ELe_c@EWqa8S$; zl`csyJ7z0<{sDjQlih$1+6rV2ACT3Iz~joVtycP#+zz@OypkTN;4eE&k7$5p3vva>s-HqR@vwzB zs>khEqFMwu-W4bTc4#WDbn`WMv$F)N(rp-|7N#~4rjoIs%G^4xRK%Ml+w~VIkAP^J z=$AQvoXTXXA{}{OArf1u)m4er#!3}bn{&XHjkLQ1=rpD05@c^OqiT=c zfX)L5^o1UcxH{&-hC6MCH{*{Uu!(-f38Z`qD;lIl33+{H!~N^n7mD&1{g$t(Jk(W; zSR4~(ra?gIO``=7ga=3vnY$5S(!?0ya)X~4!oxS~Uva7~#)n#YZB#-6uidni(zP^1 zV*+oH1&y;T(wecx4e!C{%r00SE18*cI@4~+?bf5mj^R7l=dgTA_2MIKQA)xKy#rD3 zZ6nPCELkqHm6evzE9D#Jm*ztV!5i(Uh7f0{Y+Otf`x&R+S##i@Js_!f;QDXz%4}}J zvsY{h84yO|lF9K9LUS8tKa2nebATFXnhn;!%{36Tl}rU|wHXegWIDY$ggD%WI}Eu? zNWG8(cHuUtV!4q-NUI9Gu0GkaaNNR1s>tx>0;>syA;kBVQ4!cQS!(p*u%U{;2e%(V5B#zOdKk~zAQV60S z2#it}sy|zm$|xhlkf3NY(8*pG!yW{6pMiYPPJpzjMVzb1Bz^V&R{D0 z*1(^8$a{mu3MH2r@tJ`1pLsxm$Zl1e0t>=ZA{0#>1ubK=xiIGN{C?ViXFRuHToBvQ zo1?*IHixik-2}NC?=;qZt5z7Z;&Zpb5hn~F_R@jSL<8$~xPG4|vu@e?#5K63>p`@n zIfWobY%&=ynI!22G&llok+8$L+`zF7p}>xfC6l&M@M0p}6VFBzfuh)4tdX7fC_xWP zq43cw=1PXc$EKARuRu8vWCd~RJKzl*NX*D92=clL(My*k`ccQ4B*`&{ z%2SGU6=)8&ZEU32nx7rH9^+r@*GE9GzG^UaC)hkOgL0qUO>N4xp1;yB0z$#=KDd2N z$cC8AuZtj9FA0nQUD*SsX|wA>Po=ccG`u#2D544Lq)4I26TCWw$Q;GpoN!Jw&+}O{ z;BX<9nAWN>($Rq7O90PR(E$$IRdL{PE*!&HhpeP(sbXhb0J#9BesmGgT@>1^I7Z3`Q3<{1inRcpUe0|`U8HyOe!YaZsiCm~F{5jcBm-E|QKF}N zSb-aMtgh>4Caov8{;z)EiN^?>#Cr2e%@&(+t_0P8e)R)SJ_@3SC2iF+Grca9XpDX% z39N;eYeF$w=|bj_-ER!mrcF6rX_3WT^xIPplbEd6mgBPImLSR6e*)OZL=qb}B-4Xn zI!JW;#DDyOCm#cY9%cs;a}H;A=wO<7t{x~52+qZ! zstsz&Ko^;|?AL5vnnAwxS7GjOOijtL(yGo>Oa=Y)yJ_i3R~7X<))lYj62bSJw_!s$eMr$A)m{_ z?RWbuK zZ_saj#OZ9w3Szr`L9q#J98=(+tkze%p*=>iEY@qUdo;Nw=LJag^ac!r#56g(mb_X% zT@|+vZX*Ve)g;B#Q+6l5efihXAV>x(jSlA|H6o!*UBnd01dds&b)Jaz31%EM1@bt| z9qE4Pw-WRMirylUlN6Tc`&y+mH*;C2p9{Zjl1U6Va(tg{wMJPuYQYvbP*-*&NCu$( zLBy4+dYD(0{7j%Q^a15*fU0~OFw zroMrxbW?!Wj-FMeetLrt`H(yvquR5flS{f|9gm>Vj|e*9%x7w+Kuy#z>J^UmL$7Wv zUdWf2tW~wJ2+wF9s7`2Ob|K-B@n(=}v_2et05ahUP)kd$z2LY;+1bGd-shqyK8y-W z$$2_}x2j;M1B&39I>qGGvXhwd!7zY0_O0vxJxCJcrj$%6Nf{kg{Lljs5CH~1hz&22 zcu8A!mw_Yx^aC#Fcwh#=dg(kp*R-{sf(sW|>EV%d2y3xBqQ+cmnt`0Z{-pdLJTP-? z4a*Gal9A>63fuGizw{b8coKZTxBuWndQ1qLlV=7YtH$*AE z8usoy;6XBn3Od*rnkcc$UyN9vy*kLqrMT5TY!=c?ytSdg3DT(P2et_+=BGUYlWEnLF zu{kJ+1e6vXIb={2%OFyxe2h)>1hwU*^ekj%0U%zP!m|K-QP<#o?+H*7pI4rG~>YmZ{% zUMx1$MM!alethacK_SzpmyOx7Q4%8xp5N@c$O?KnJL<)WjPT4A`lGIJM+?Qdtu>m! z$NNdjW}7<%Le(mDiP5A~3Ligw6pvr4>*AUa1CI8?PanQYGRPQjGmwx*3+5?rkTT(p zq7ERWsv$J7YEUQoOxGbb_LH~UTsDd5OQvFrh8k;_j&k<~IT_xi?R(&>Q+qS&Hj0y& z_3~Z2h+0G)1f^+8m9oj9FTQYB@CY)Ukc4LFIvI=q$Qfkxo$Dlh*e#6|x8cuwj;v>A zb1~{v+xclV4p+7p&+$dN`hMynB>@;X7d6uWWP`S?}TH{-YK zWS(GVPzg*tGWl*5Av6Kq7^3bwTE8kz*%;da3)+rNQYd-djkyXdTf}lv>x!ynLEP_E zm=YM$FpVsc{UT2Vb?f<4u!1v8k6KgW&3E(}O)e-PrUK6gl7X$j zv%YE@yn%Ov+I2XeWkh*yy7i%R;K6995?qhqCXVsoXH9nt#bi!b4qG+?fbJm6U?Y)| zym4CZbGPY$go)x4RnOQogX2f9u_kehPBDsG0|ba7^E^fn-=H*yrG! zBojJLrPokV{uKoI%=Sya{qBc084a>JW69p!PDB32WRkzLA68}#_W!oF98PP=;mU;I zz1?u5$xuKzgZ*TVLT<4j-}NV5Jk#nchh^FUMW(SG%#iH&3Z-z7U4#!shztdrje5&X zXHj=0mwj~qBd?&P1p`FRw0wvLF^DASXQ*dGfp3wiy@Pjzl>=uV10Kr5r^x09MzRKk zz1d)r)-aWV*Ul4TzFy$51DFqn=E(Sq(#1)zD>fr&z=LuJD^i7IW5{5Et&+uLAX$M~ zVn2J=mZ)JG^gIooRGG>O6ACGwQis!p4k@$tR9$q38fCzMLEFK|r!x7<#@kPB^j+{cifK6) zSc2GXTD$WO^|kM+F&|E0{!osCNGR?5?BvC2c{q%jVrzGL-J?kv>@S!B4}TU+Mkr>e z+eB7Mj*IvUh?Qid?;>XuHm&I`D5(%v3F8yD##GrsM{K!+hh#Wy#o)a5%49#ied`DB zerAJ>!(xp{agc@;qNDax9*qcA=Jw>3nyzkg$!;nJ5z}XokjTlId!Usmqe7<-X{^@c zvk3xpS0-o^t%}K4g~T{*TaZiR4DorJXolEqa?G^isTu9Z&l}v#zko82Rp$X{Vp&g{ z&C%0y&_zp&mfgs#QZ2NbK9BbQZUuorXgk-MP6HmTYbxZ=#4KJ4$O6?$EFdN4cmLaW zU)-eCp@9jCECiIjU@OjNZuh_P5hv+O-gSYWU{+w%AmryhCex)Z#BG))9KRFFhkhgO zh8!D0x|v#f<^72SMcx3Bk7Sl4L&6>z{9Jk}v+3u+j?eIi9Rxt4-vqXWBP*JkMkvy? zBr51vT5RO z>_w^?u>}BNRG}KGclr%c@1DFQKU;E>N}Cs4w%u)3k~pn?y&Dx^7PzJ2$dc&6f@dlFX_kA9ni_S-B~JQ4R3L!im+2A$I~Ww zv*5nqtzb+g$H1~_R~^|&wmUL*eNA0&`^SIr?&F`sMux4$&00}wEFKl^jEND-y!1^!FE(eBNOjtS2-d2 z0NDXYup=#u@a4kX5~1!~xZ5SiPNG$tYOrzTiJyg(V%UnEYBf7vTP629>J%0w7e@|% zG>afg=w53z?P_^7g+I6b=7aA&|0QhEX3KWjb#x0JjG%RKU9{U|3SOeav+61b62zb6RxK3J?8cjVb57#jV(C_I4y9P$zfNf3A`mZ8Ln;9TI@drq-* z+r_g^PTufjZ?`>1;~=l33C><-jxaQz9Y=pmU>PPAUm6r%Y0C;2rvHm;<3Ckx#9asus&aT*n0n zaz$hEoU57LPEZ+v$@CP2rm$gl#aeo~-6bKN!|iXIJ)v5rv8>}gOV-YM0Ef!X{f=>L zp(7NDk<~bxbDBEP39??*3$R_t{Y~{SpAkqzXQS`T2(gzgP7NeMHaA?xV!6J?Rl1Xy zs+MM%<9B5n?`z-FIiB5|xEvO?c;*b9KCFo$e$%+DQ!oLf8~;X)YiH>4t{r<9;#)&mpf(m^N;U^RCx! znab&Wp>KOqH%vD!#Jx_ET;JLzdyt6KQ7`8ST!k3p#@UGJ1EEd374)YzgLR5QnUJuil(^{t(>hluDbOx!qE z<`U)M84(HcKxc|c*df!*^11y`Hiub{U?L99>5KHFw=xn!ctR-92|Edjh}RTQnS(K8 zMLS)PXq!MUShZt-W$ic_fZI*ki?l%?c0mLs8377xRk;7Vu1z1c}c ztHS1!o|+c-cecY&K-%L8rQhuaX{B|#k!L~Its#dTWROe^iUvb%0xAIN?b zeF7>qq#)4&PVMZQcZH5dU>8)e;I`vxhq~7+r8X-GQiY?~L8^z_Cf%46bIMNZxZXkP z&|ptj%Fva(*tRK}|NO=5-b~eLvxvYLE6HvS-{@LCysw6bnNHOjZ8k|yjTxk&IC9-7 zPerSF>=4>T^W7X})>hRSR_Cpg3EW&XJoH1w=U&OtOKitKfxiYGp-;vW%TA$76`Q@C z4eQ$U(HK+U%c(^iua+VADNw)JDOqP|57IebsOdR*8oGV|?ks|UqbW7C7CB9gN_J^) zWVuShVSKrDY#J`uT%RM$_dtG_zOtC~l3ZF$wjt~v2;ctcfBAdQZZdgODNiY3nuk{% zcUg?12#3lL)AhWZhWaFT?eL%%X;`RBi%N0WQ`*K|p*J^@ePPZFb6K9JGmu90u9O@` zQ>wS{o|^4i#%?s%Rsm$qA}3{}JXp@^$l9}4^3H${W6Riy zJYLA!{QCe$`)ul&>tvj(=CYu#po{>!rGrbj2bWkoK&MH~G;OMy^CnJjcNLFDe+se} zUIv4QHcPFt#k~#g8ep`yh*D*m8y4+&VehGmAi>yv)9qn6emb7u{h3+KK;Yh00uNls z30kqhGo6BddI;a(q_Oz8LsN};Z#09)CzrT3M?FsK#H3MHVTB2Gb;w5{F?RCBn4FN^ zHGUoNFbt=zCX`7p5VgJG<7{q_Vh1r6aP^R=Mbhc<@s12}>6b);dY2W3sgS3q=JjD5 zC4`V}^!4sEDW;)V#x+a_{+i0T0O=t%R6he*#jZgfh7qsG3f|(wo^9L}FdBu~f9piHZSv6I=ngXje5IP zO*6Wt?G43e=nexImdo(oI1`5ukIhwthY`pSC1y&@Y}^d5i~u(DG#m~mt??vS!js2~ zAs)9gq%LYZO~&Zt4*MQ$do<1sV#%BBye_J)*-~PpvUi%_8o|wO&O<%BwLUInr{R?W z-0bC=RZf#Lkt8X9=WxD-kHz#&C+1Z`y`R7#BKcwfhogI*tgS|8}hrWVYpW|Bl&v?9PNkJNaELNS}%AI%6_;04}%IyL2fyn zj;PfE^C)≈7+~IG3#)hVkX0*va$g_JOw=r2OeaUoY^R-v`@8_Gss9x2}_QNCDTKT zIF+_Hkf4GTl|(>ST$~h6m~{uSK?>JFQcb~uzb3r6PeIz1E3SEl;tWNj?2;|J;yCAe;;&k1`|=X8IOxAzr?z;LTl$LJcT-t#kqc#)$~<{ z+xsrhfFeP(0J}g#$(hv1Ke4$-w8L|VZl+PBjb5&E>b)vCkPG1`e)8G!l2L?qm^}4N z?GV72B6>$Hu9dINo00?s0C4j z6Jv*~%`(&UsT~?oa+ESFca=|#hk_xVdI*jn5wUV1)u3!zXvwDzf*s6$YT+e*DHvzd zRs*8-&ZxZ+E0WvJ4D&)fA>n7l0)9PWv`9K@SIxg^G>lY{DqxBz1DY zM_3Mf$YrT!ZL@9}oqYLZ=69a_6g(V2?*cpUibrJWc7w)G22=Hr80mLvb*gO2eCE`8 z9(~)7g(=(Z#WXn$3#WdU0|Xk&220lZPRq>BV^u5zV-x z*(s`2Npsm#0|A0K&{(LjJ+0rb3hUF8Zx0cX*wss&VvN#y@qPFpB5|WsJ=kz%c_?wl zWS9+46@Bz+Ka*v4RfWfL6>4^BXxRfqBpQ?6P#v#4zIf``K@bNLEk;^oY*}KfH-mul zZx0gD=qu_Xv!Xe?=iHh`*k(p2DUafDX++$f#^WZdb(|@oyNy=y)KypYZgyBwCc5bg z9!yx?+fgEULNwQXz0!9pPkMm}GC9TT5Fvdl7y$?RwuQZFbQ*Jg(rXWkIcyigO zdWTy?Tg-G!f^x=*-tp9n#(%s(qzf5Hl@mzqDx_36;l<;&8Zz}z)a$vNDP90X6Ie1W zJ-_T}^|7%F>5Zs^ENxzN@rOWN$g(s2|0#R7n0K};KPa8KWF~cb`gYF$oYOt$($lw@ zc-&L2D%<5zLgMnZY?trl8wx$;a@j7sTve{JUA6@jJirT5=tzJiKnR48AQ8}g&h+Wg zG-3utK%%@b0wkWujPe8`5F|88#0zWhRla`y&V-k9zQ6ZxUu$31UVE+I@{~d}0=WLq z>E!4w&y{4y&9qyC+q3cp5zUBdqOY|Zqis8JE45EQ83@;ZJT8># z`SP%z0v5a%u=BiVh?_+(;DX`+SP7q@XuBX#fezlJ=7e)@#2#!{ikWJ{p}dI62lKjl z!}pJpqgKaiM!m$S)EH&fcE0C$*?cLG0<*F@uQl!eLklZUABfz;I+Yp1maOf*0tAqD2BFp zsqmbo?W}g^Rv7ARLYSD>9ik}tEI;$R1t?fjUb2_!rXLd&~nj8#mUWLznkQPC`qAi%zr zV@Bqgh~!xB;6npMqGAi)GaAEFopTPOEvltsQ7e$EgA>ZX(Wi z)bEj$ub)10e)Nm)KvWZlrYrCkqPYWa*d~$gN&3Iy{OGNBed>6G4X_MeELm|ksl0#s zSKS|d{fmsQSo}7YZb_2zE&9{DC@WDsFJ)wHT$2umC^6fhy!te8kqox|0t(tkXT7nx0S7+tZYVmlB=B%; zg=%D}yCW8eoy+ih7Y zWQ&q;9yr===+#IZ9gg#+YN^V(x1<@&ywd9!&6wNeftDCsNPh2Zh^qrLgJ-DmTud2z zykJ4iQK|`LX3`~lpIA9%?eYO3l??cvpSAi6HJ=yhz5?0W#?wkmrlKGBX=UAyxwG?7b>MdxM1EpimZN}+A2|t_oWij-Z%zCd zkY>JyYMOh)Dw0?(8>Txis?}iBmTD;dkzzeCeg~W6^Pdd252u0ApAPM{LUoDf6au0= zDCZTJ-`IWI7X79S(K@5*&!tgd)q`*aP%>C1?KgdhAPTnA;I>b;Z#5bCgWzC-Gv04K z&KFl7MXhhK=#IwPaioxO!h#!N^(Kf~5Gf%=;d#YEmd#(fKjmjN|kgy!O|?2hekNaC{e|c&$u(x!BYPi;Cyso$;=8a8Cla!eNt@ z22OS&4L>;j@lSsIeu(V?My*A@G4FH( z*vB&ya=~6kg+!lG3;L$k;fIIixi)b9A|9%;vdavnwgO^W)D29?ZZ=;cEF9HJy|FZT zi}z+H?SKC9*G~WFfBNxTVb*6_opf#0t}Yv8fhyZ_a5*C-LY<5uWX*NYk*8zS=%3T5 zyAxyaoL#TY()$@+qVH0HfX|zN^B===)mB@rCio>9I^3c{gTP>?CoEs`yymyFd7tk@ z+n_&IW*+Wb=1eD0o0-V`C`W zkM{Y9By%K$V~qGjx`|l4<;pXbhfvp-vSi=if>QwO>?;_bsQ2VH!Q{O$M5R3d_c7W^ zVTtg?Uew)fs0pFD@YONuVIm|%m)7U-5O6c9Y$oV$_!!WwC{&S!$S&}XKy+AeZC8fF zL!+YadTWu&?0Il3Y>bucs*qYM9ek0eer7NPS=d=~4!k)NCq8IzNvv3MVID6h@udmQ z3^NHhFvO$$F22H=ldGjH0PxB7$hF&4_WFBwYJGnS9l7T$@O@jG=TCv?h=APQlwHuAOCerCcDn}>m zNb^E(NJT<3!3g3)TlI=vU>K(&DZwhn#MG+B;brAXWi7Vlpqy(7RLmjh)2{W&mtHo) zKE^l0pzc+(Kr$SSz{~0ae6Ugz%JddWiCMg3Wwx5V8;FN}@6=BC_ zMlNSS3~4W6q1zMr5u99Mc2Gfz?y=2-6dxzF;m$y#R)PTlxb%k}P}rK(KeS{W+VJ}K6NusMX~pd0T@ zfSi0^+6QzPZWFVVyEiOCSnRe2-_0s{@IQE9h0|6|E`(8yO{1y(%Uow@2ZTZJlr5Ev zf?DUT@fKLMqj3QUZ3Ff9)q<@{Dq@-e1jP_XQk8?CF$5Wsk$48}f&>VTmV>aTt?KG z5p!1H4$4)^cA?!LqW8j079TGIInafAO`wgA4*Cf^BeYpLWvq0%2fxfgrsNeb#nyt; z4;zQ+95>;Y8DM;jK(m;#)2z!%OkmzYV;l&n z!E^Ll&2*-v)Y&B7YvL(>TT4jV(gqzRr6L87ZXlejw~}^cnl`Ei8b{sY5k3Qf8?oxD zS{^OkN@IwQsE=4&ci{30mkbN8Q9a$=FW~TXw@bPsfY5tgfTVEDP=l^(-g#0ogUm90 z@W#BA$iCP|u9+UTk*u_KWFTO#*jeiH`?RLeIxiHW)MIkfr7Ia+ZY{N9FGlv#y4x&~ zhF8oeDnC3X7e@%p_xMR3GoH7HVvP;A_PnGQck+vQdhOT!rV>@CsQz?fZKp}Wq37RY z@9t;Js(q}8UVIH~A@|Mub=anhKw|cEp7nNzm0B8eep7hw^tbr~z$~eydTh{d zs*hU7Y?~*0j4k9T40Mh976fswfLw5+am5e6*6iy4`L4(Yl(>hjCTx zi!Vx#E+u&WcaVC*VCM5?E8XFf$1Yyd&Yd8Ah;oo!2$*Cd=9k1;Nx2XTu~A#T7%9vU z`h-0Kv$U_@UZ`Uj7U)Eo78qOP+#nA z5t>BaBu88HPo}J9+w*WTFuQs7g%I;R4+=ji-}2<4#+TW|Nj%Zj5`){3P; zw0+z}Lth0}saFp+OBhrNPOwXg?2DQ6c^P3vFwODgC{~As-En!Hu+acs@_v&9d3rcb zeHfbUIJex+1ikgn>5qT-$(t`SMcGf))kb}9v_7Igg`Mj}3|bl4+)SH=JgS4p*L{$S zWpZ~Tyx&w-OT~O%SpiFE^(qI0DCC0(PW6sw2^1(afP(_`-VjiVVR!Qt$4T48dI*OD z5mca>KPy)rCMrBQmTFdEvDEo&7OjvUv!co%s;HS9r5bxP(Do32F`Cr3^-yp)Lo_V% zh6h3`s8ZIed?5OVv5vl{k980w2b=}uD32=QtKBLu|G8B`%koULiuI@)xQ ziaTJ+px@qnnBF2@6wA`uWFdHbGz(yhI#11z9t*%hV2y!`iplPKsy+aFHdmncUs~qo zV1eF|+|CE)G2_IwYB!7OPnx`SiE0(!I+^TpuCi_aI9ovgf^&7Z2-OAk7tuwF)x{>~ zhSeimYN5Cb5x_y82V`_W)Z)U!C^Qpw$@CVzm}L*(hc}ycWIPdHz=7{**@lZF;a343 zUTHThuYk@oiL`S?ADpmZuaztynT;q|mQGkwr77r=ddRv}1V$7>vEFpO=G5`Kq7O|t*H1L0a51NM{v^a&4}#s0Wur^6-}Hqukalk=nVS_v&dKHD{9NZY9e0R_ z)ulf$zJ!N{%&7Ma63%HuF8?!T)CHQgV#?^xhu=H>Cx7tCcfSPo3VKzf=bw%*EhX#+PD(q4U$AuRdLK z1Ja~9+F0xX9Lopzzz-56p>{e@2(ZsOnn$Rh919rv##Vk}RHnSwLn(}6LjacyhjJpF zf%T$Q)W*f`Eb@N_8mWk-jb8DhznSe=ifwwqM2Mq03Scza2V7Wnc$nG5xL&;Aje!@M zTE3r?6<~IRi3z+!vl&phGIGmGC}Qbg`)EOa#!>wsp>{a{OBk%k z{1!HJvVOb9eA+Fmrlvtud-D0Bwp|OQ+l;dfU8a>+T=1vJHywwr-KSXGSm`A1yLEl2 zIu#==P-XuaPX~wb_7JIaUl^}Nnd+vlsgBF+=dpw_;YLPMrn`OF{Qd;i53$IIw5m-% zzylf1ygFP*#|MZw36v#T->$ZnADn*Y?N8r+7ZFrT>qvrAt@3F*KKm|B{1_AKFk7xg zu=b+I&iMSGp#1jf-+%Mz*S{ZCVtOlxrV!1m3pp0mon{xl(-LZ>oNDV&_J9?-R@)-a~&$Cl~)t4q#X^s zVB!G*-;YS0^ss;jJG5qsd4+IaHgXxO$-j8m$iLUo-WGTP|&Ho`brM^f`gxz z=_Qu6)~Xp#q>)GQF3ZPJo1lH&i-vu-Fop^Q*z%hCN2mYrd!N4ZUXHM$ONWl-Y?w?9 zLNw%?jf5q9NK@Y>$8MBZO_U0?z|ypm{wp1yD!~WeCaE8t>)UMC zl}4(O(#JxAX8SfQ4%y4W6!J8fm%yJGRWO|h(``aOnwoq?f`1BXfHP+^E66^NPO9EvzNqra2s&g+EYL@fk7Hhl1Z=C+C*}!Iv*dk~2hfy)`D+u~d&?E*5@Z~iNF07tI zEbPcWGXZPUM0wlG_nmLjV%~=gg&k-!Vci#ixGi3Ek5bH^>ci82`TbAdgg42!Uu3Jr zl2{*AS6TEBBU7&J8jcrL0U79~#iSQW{|JT?vrd5?Q{~OZWyG@99BvA6Wq?#1Y@X8oJ3*C}{=6 zSvnA%B{N+@xWr?zE*WSd`U0W0Ys_(<0mmSCugE|=8rXpm)HF6xyE=vkVguQxAnrzg zv|?lFK^b4t&gGFifLj{L&8TS@kq$`yo2s6cQX?;>e|-AF4?cbS8ymXly1>0lw5h{g zk85xDa|p=z&YwH|&j0wIzVj>0T-X(hRleAF;i2->`a55E_w>WR^M#-PB2zzPTl-_R z24+O>owV7fpl=$EdbQZXDAzpnXD02z*L-XUqm(8IF{L)zb&XGQu5q1_a?5jJ=>mP3i~^G)4JkCm&NpFA2dCqFLaRbzy9Gay6T6 z6nTX{3=%j@GT1{x!jM=q>=_K?a-phK&rPUnbQ_CMAgExiVBSHGlNlJbkB0W!?D=_Ijf*Ef}kjpTpun?$&7?MVS{(4hxUR34*c_Yg8o z*akJ^J_8WGXKg)+{jtl79QZJfJ|h%^90T|;{&Y= z_Zl4yWFTYDpHrDFyZ!FQX-9d;RTl17FdsHV>A@5RcB3=p_DZ+#{nKCl8=rnej$}}z zqXbSNPF-_jWy9P$5Oxdu3q@0U@OYbUZ)P{c&SYH3d*LnF8h0*7fGBaD?|sy|O<^reFK?}&%X z6Ai;<_8}<4v}Wg7q(>sDp<$85XFBvzK3ZV(TWt-uT+i+Ym6T7vE0%QwMqMVwrpAK= z#Qo8a3$%y7Vy{p9jLWONNvS#&lW2QFK_RIgzhb?d+GpGOMsJ6-L6<^6f#mwPX>!AP`p8?g)cx6FqBb;y&4u>17W=vQ8e1Vdj9TgkCcyd2>aMM>6S|PNQGs z3;jdIa_(~g;4a5G!vKPlOBoIfj*-G8s=_BbCG01r4)+bXcN`cklM?w@zP=EV1pf>y z=uQqu4!oI>-NAuKuAmUna5sdQP?eIR(ksjv3lT1j)fKi;lMwVVGwYaW^nZp$Rnl=P z&KrC%1uIY;`3(?5-tZ`eII}#aIq1Uzrz%nn?VY0}c*bbhu={vm^hGJI zCC(PLJeb;*k*56>9QezC2jAQ@YlC*tr{W1BL-I0mS0p&9thqxx$jiO{2v5MLg)R*y z%PV?WP*ZL-N?fJU0n zi-yUPvg^5E$17&3y(~>4f+kgP zlmA9rDlrDToa2$9%QAc5Vu1`EvjUYAz{`XQ>gm?8REP&6o{;bxyv;BzzU?=HfhCD( zMutDPNf2Og(C~oOov2bMSN$<##Fd=i8;x4jW)Pr6p9%Jqa>7k7!BNx{9lE(d3TR|t z#n3V?1;j=&#Ea|Ihsvc1u;($-T&yTVcTqc{w+7_yg?N;b`-;wRR)4U{WJla|NY_6B zU^=w~mE-)lZw&$^jfcE4Nx~gicMptxsO0k-e^G3qNC+vNjp4$Vw*4tsNHZhetB>5y z@KBXm@&Tv?R1qHZ6WH{Q2fIBq0W_5`&o-d0B4_(WiyKSN3te`g@v8it(;xlozx!?o z3ZqUyjN7_Smjs_wrABO1EbsIK(r|#%(x>FoHW8v=nt%zh5AXUDr#;U0#f&vVO5=MR zQMNKUAmU#qW`18m)%HsWc(xIRY^e|%soXH*7Vvz%2hyk8^A(Wk3Q}2Jl+$S*X@wrJ zREi}r2e@ia$*P$B$5dlgk~BmC8X0QK3SyFtyIeGH5$NV$@AC z==2P8ByK9r`=YRE(Ie_HM>M}WI*6<`mCMaxF$3W>$66U#-W7iq83t;@VXs$E8oj9) zqpsSQq|3Twl5DA6$XQ%WLpw--&~^USc$(i^BS|V0TEBMs+28uzkG=vz7{@HU_?8z6 zJJ}SzM}H1gkV+w51`u_xMv6FflkBeQP+7MQUuk18)qZ_tE*zO{$@G4LKWD+?NY>VD zrq4tS10iTrxi=rk8Ik=qaW`RT$71S_M-!^7NiSEC;JRUZBJV!tV32&iW{91v-UY}wiR z#Gn#0iZJ0ttOH^_j&w z&kb4w*Nvko7UT#Ycb|Tg1=J=h5btV7ew(sJ2d#k$oX@EQtg)#?gF~#DF=@V?6{-V# z-F}u4OgutvS&f%Df7n205`@7EEQH%!#zA8(jt{kzK;>zgMt!LZ`!;B!KmddnX6hNt zB;3{Z*e`NUF4|bhC{wILJc5ZQ#$%S9SvSpa0UrOy8NESY%fIBI9|pt>Dy1=t%zSP+ zqpD(~X~k<9;7j7eHv^=1jfB?f1Qq4FIo&oZgykB2e9VHQSKPL9F)i6i6p-rqb86ax z*J6x2w!oPT{2{JW?6#I`CFjkg+pqd{4rpu(d6by0H9U@!&|ks}SiIHSqoU!8>}U{M z-S8eWRB}5pUrOq=kxVU`t{F~Wc;_b{eqGxp+S)q3oL3!s2f0uGAdJ>1I~olKGp!uG zz+X{OwRGITpB^5Y;r_eJ^DTA{elBTzYWsXRR*`VbT;s6Ll*(uqjCn#hepk13T)zLt z8u8h(F9H$fL&I<3pdhfo!sxt^qRThKu|_t%J6aI$M<92C=M99+;gj6hUfo_FnzK$^ zI~1-vD*ev4^~3CIlB)vK^Q+xf&}{K3|9Z&03dbt6W)JRY{pJh|VjdRVLme>hDjc6( zm!;7(eIs)`t6&QcSLB$12X+mNx*=##7is064FZ@H(X9}(V6%>rQWvXLPK`{vp5?pS zLA}6b%cGK|^e_P0s~Ijw3NsV?tm+?(kTZ}={?E>XjcZ7p1| ziGmU8V}B6emcgE97)^`tymLJa_>z8dk+WV-+bN_OMZh}6X^3_?g zifY=Mo^HoLBLrFQcfR~OKi>4k!9+#FwYv;gJpFDAAB%}ur8*n>cnSJEF!o@?YaPDR znL{{`Z&DiXYnJowNUq4Bc~MB)7zmNNiXE53!@Tt{v!B7Sj#a<3oenFdq>HbJ&#EA| z3MT9~*2&IFT8@&)O#d1Z%UzG`VBoh?MGckIPtX@XUPemptxkT(1`VCw51)a#Oz50#$uaz?XXtvzkCO-~DQ;#o?k& zXxu*!jpfVT9s0r3`O2 z#t?qhc{m`>jjm0Jg)@u~)2te9Wn0N;DYVFaS?&dkg@b)UCtTWd9fBsI*5D$?olD0Z zV6^DuH;G0zZeU1(mnBmimO3?5P4BJp$wlzW=b=VBW6%S@T|9J&vK*9WjTr0Zs#SK` zCzig?M&&kJlnZNA4(+8VNDgnKj`?Nt>W=Ay9UbV^DkDo7fUun$pnUaY{awIVdZPqE z-x~dO{D3U2FH4Wa&qGeAESAoEdq2Z&CfKde8RJ0#luL&*$9_Ef&x7AIv?V-_!lxbN z-EnoFocc@TjCk3G3lZw^i7}oRys@|RyPh=eG zfq>;(u`XEpL1f#p&p-cKQTb3j%|Q$`&ZmmzFPUbd49+n8KI|=!sQ+c1QM`J$!3$l5 zD^_M0UF0<&HmsN%CE63eUQeI{_)D}3wgSaHlL+MW80sJ8x&eK0c@4=iAoRx8qo!5q zq3_tMNNhs7P+oGfI83FHZ|XHTMTgAJOKpcKj)VA17md?-H@$LBiOG4K*AEa#E>iHp zQaz(?uVz3V1Ce|+Bfdd4W>R@!eTQfsM_S&f*0;peH`;%23!yEddcbb4B-fYid9!@I z4L)El`*C8;rub>1RE}fxO;Y6xEZI{J$%MVwAI9Rcb(xgkx!nF9FE-6OKTpmZ>zy`y z=k#CvzrPC(3H-J^1b*m&DrY~SKfQCgEoixMAUF8*uo3(!NqYY)bhB-)7hYQ&9`%Lt zP5Sd2@-u!XXP?`%%ieUnR=+{hz6|>#Gdb4U<9KIWp0gj*U*CaWF+(!tiig|`j60Se z(WJL)RGUk9t&FnK%+`uy`P($*{U`-9vfWKHTiqB^4cH_|;;p+0Ai!`-^AM}59*4$P)7 zp7OQjK5r`Dr4@eTl7@AzYW6IV9i^=dOZ)hZ=z_R(_$9xq>3J8a+Q>(S2O99rrat!pl>EEh8jBDX^`kdt_Q80P+Bh68RepOh%}VoyK8T$agh#$ zEMRG~-+Ru7nZ+1rePedzXQ{B+1)_vmvz znt?t-b&ZvaZ|01Atk^-S4n`)|d%;}>@-Ws7uNg}9a!_8V9W8-2>eqh1(xja-Gh?Oc zbg;Zi%Xc+kA5h;S?*my}H4~%W^|lD$5bQ^;#nYqdJjx`9D`>X)*n~@IRerBt_OH82 zYT!b^EZaV}9~PWlZbogBUbG!-RM2-2M<+Tf;DVscSNZ*>=k=AVNPbs73CDhJ5))JF z$NAx49ax3FIK8L`ZcXsnD$bbMq~u@~411e3x+pw{h7gMy+&P#X5Kkn`bTU=HDp>ED zfd%6=(r2Vhscm-W%He=^2rmkUryw#eM%-#-YqH+Rp;y!kTu6CRx?qC^Zd+b7bv$dw zZ(<4uu@I=W+BFxLnQp;ai!770H?KBXAnBZ=jpZ|tYWo^&dhGgWWYr39L@s?d(2x`e zv2TeL@q`)l`f+cbR=Ej!=-mKsaZ$0;Qn6fS)1{!OT#i^AGulj;h`aP&gJLHd~z%%gFc4nc)%b>5YtU$-0Et} zvj*CNJ)pn@g-{7a)vBdU5||kvL=J{6c>u#XON|pWpbl|B9lv3(C*4iQBUn`C)@!g< zLny#C{$T-;u0v!woGA&ryEQiTLOQ`-^ifzQRRlb4N0!-(yECx_r@&=^z+VVl%;`^#S2G6#F(`c8)YjJK%$ zdQ@;`9UaKV@HrDs4RX#iv5J{!ri(5=L^35Zj%_W}m(UHSkm5R}Emur8RBCO3iQtC> zX?eRKw43R2>4*WcY1+-wp#7S&U9(>glrD#sI|!ndMA?ceTbx^}s%VjeNnrUqhIWN_ zT5hS~OmuP81vb6QcR`u-wu^SVzs|Qa+%}J_$JYYsUJ3od?KNNPWq{4nvb*T*@_>WB z$$XfvaZEiB^q9J6*u$dh2b3uGQ}xGRk-Y;j^W^}xM8?cIZk#yS~awZ!hAmwD{- zxx`3OJ!H14dd)~>RK14WVWgFjX6#Wu8)t;YAgKkCj+E0kP+BZpS~xkywWk|f{EgE; zefuZhiA0G;IXN=HI&76vsVmcC#*3D@acIw{ZLh8b7}W1IAP&W-aO7&KuD_PAPm{Mw zy|w|qMNd@4NAVEb`jbs5h5ojWwLI4_W1V(FNS5Y7RZm~tRSQ zD*g51kQlW_Wjk{f0bjvJ17F+}=KDHG82$(0`KJCN2VzYl8)HWh`aOT$Cmx{D<@sPO zs|UT8(QDbuS@aZ%1ve#2>P)y$lS>$@^gJRr19E*D=m~nNZw@`uvc*&fY!;*d;OEk&{AF5U8vDlbT+A2axgyAt8-dIrXZULn{J!gF5Gm zo`O}UF(2=Rus>>{*%z&dnjFCSfHEDmPwExjl-TuK%JO>rVxfR*1aNpqp2Oy0uNKNP zB~?Yzw7UZ7frG+%)5@$98*h>-fyvTY*Lx{3vU;E%z;lq#%ZqA##UbU_U5VtgQ-8Tx zkAoFR22m3|PI4lwg6(gWu zi-X04kV$)VBJ9Rzv`RN>R950Zhg?-|Ktf1ggE6U-eDPQf}G4%1mNH{FWY zH;HHjE_NSOe6W3Ko!+O9!uWddUx1gPXmktOSnL+-99nos_1&3-(BjG>w-6+SJBAS> zAVqG+^d;xW(RJZliJ+;`aXGnf;#UqSF>$C6;9N!wR_^6K5 zYTs)f9dCNGH$-+w(nA$W{?dHIG1&qZnK`WlhIbDeP5?&r@ZW=`&GS5d( z^un;Jm#0>_k?0kNmpAp#&w_R7nS_}uri+Qq@^Xv0$%p+v*F}!GVto%pnHofK)GszJ zHyQ5Qc6n!Ts@lONW4$>$mCnf8H{B+P?Uf#eS z(U+r<*>rPFqhIPRvdA#?Y+6NVFh9a^YP*Aad6>-ZOBjUgSsqxi$ALX_oZ-6f+-$KA zANy=#k?t3rRcZ^j&DQ1K|Jdj-I=u#bu9GRPT`rFf*3YU(C^k0(-0I7XJU{yS7cWQX z0SsMMjI(Wx`SG}>X;)PgZqWsMyTVNat!90u6v|U4DTuMQ7*I2GS}!dJ7Bw^FfrE)3 z#`)yUmVQpfn;UxG#9A{ANxNTfe7R{Y?z3SqqKwKW!a3fow?QYmFO0D@|gCw-1EV^u&pqdaD zE4lAgBV7S8zobczCStfvvSuwa)H{=de7SB>v~+Ma-^Z&i&`e1xYsjQbxppWcNM5 zUiOn=war(X!K!#OC&`qgjqf^9i)|KUyJANxDj0A2zAQpRAJNamy?tkrS(Mz$!~BTK z!=`l%F*b!Lr&}`$*?TDuX2;D!WMa;wG}s^1R^_65$JGkBOPwsxXO@jwy*NWcmD|G3 zAnfkJQ?&X5sOB9cECFPADGy&cC|$V^3>Cb%35r&2czv0tZHJ0)fmm)W#s?KcVMpV_ zWuw2K=_3H>{*ZKI0^XL+R%vZ@jFUlC`DZLyXlQ96Zspo>JKp7c=z(|Jrwa-zxBXdL zJwRw_@46@678pJ2EG)AaOU>8(v30q$0}Ri9QsnI`Pn*vSO|P5CE-*y!WA)LV9jgV6 zZQWXyE6=O$ftd;T64#P#Zk&lP%G;~H;M~HHRE;?7j$u}83BssmIN|dCe+EYfD_wRo zIU`ht1-Cp|UewKJ+-379`-7vQwuN;OBf(wzq1rAn(Pft5+GeeCu3DF`d-wUyfEKW{ zwq+q$PRvTHry#2%Dd-HlGkZn!*zcG9Yy})Deu3`bU@51kGL}8t9h^vpc43~+v)gb3 zo(%BNL?}QazlrT?q_x2-)~`kaZUlXSr221WJhCcHjhi?7k)hjbaM+^ZkR*CcQL)Y>-d$n&9ebYZ7=hL*l9xf z!Q=#K*fQAuDiIkA00wA%`&Bz*sCr*BF>d7EM6!D^}k zhfAh&`bhf8o3E1oa*St9UB14sG`8?-6nHYEPrm$CXADM7)<70Yt#4g^{u0o6TddM; zm1VumD}Uv*R(|sCX(j*U{cjLYJ>vTcfeye+oH?W``NV7*9H!atQPhXfO2Ui;&V`!g z6Jdh^GUKX|DS{(m;bV$<7ckA~h9ie$)Zx;eFI+A9pEm3=NqjsDT8&0 zqsEmFPJi@IfAZ$^FaPOJeyPm3@peL~_C%v1P;bLJxa~Ra{6IL=v$OQH*RCC-_vCZR z+2N3>cFN{7qx4&g*6Az8XCM6Y(29tbhYDLpN3E6HaV?)-QqqgM+c(Bp*No^!7=6Q6 z+|^sCEs#LedV*H1tG4?cT4l(s(g7xd)z$Q#YI0~^qmVKEhW_dxlnx;-9S znOWB2k%S)8VWELr_}0>p2ffHbFvXf~&lWBEbOIo<3VEhIo^ke39)gn?UFal%24V_< zwFwkzxRQutDL80Pm}#y*vFw$UsQOeUrEv151&)x&^aObr!L|zVPPuRHF=zorb&!e< z_Dd2m?Go0bT3ZeG8FRtS(Gdi&M3k_@8EJfvI3|E&yJTw6DvvNRf~h2SycKVhZFju( z4(K2mmTZ#DPz0TR{YRhuW|hh8 z?eaV*YFar(>Z^G}?3zy`%vfKxZ;N{qXO8_RexJEo^`oSL>)-kBK6@|hDX}rczu;P3GzNIUAmIqJ zwe)3A?o|e2i{8#2P_X9cr6p&LMpbcPjbk&aPI(E#3pS|S2-OZV7Q@wkH45N$9B*?E z85GT1!d&mHQ_Ebrww(-H^i}!+MI2cpQQTUog=J+2Z9viN0SU97dim$rt(6%Zyto-6 z>BJ+BXeq&ux#{Nn(~`Vs(FfTVAn>bbNJS6kjG>4=_IT=374lUtcm9k1%&4u=n1w(U z3LBuY3h*#~UIut?$6z6;t}+m+q}6!BzRY)l9*Tv2QE1NM9+ES@gu?ftmC80~*coxw zkBgFYEb1yXpWN-)5}zP{31S11?WBc zSjpqa#v2oT9EbRUL*xb|c!=b2ZT3S3j!8>XYrNOeB@rzP9%~?M+2{5!_4$5oc^$8t zyv*6V4%~t{W>Acq5DGmEz}S*9Pm{9Yt%nF1=Q&Hn4Y0Ap#p-UOcQ59s)Hfr!7z{e- zz;ekM#gTha01!I))jV5nHYMcCf*jE_55X=k`lyNYxS9p#{)~!I5D5s5QcNwwYaskU zIy)h8dBz)VHLCfw@j?CNXybv=V+vKchq}dmdxA74kOh9e1ePN`iP*-H!eS=~T$r$C z=vs+TT%5bae4OgU8>0=2^5B(Pm#W>$t;}>b68fnlS`pmjy)IvvGnA8xIcBrms+BDz z%dN-Kcg;>wwo;el8d5==b%6L128YzT zg=;SK4zEtr(sCMiEPZGN@1NX1{p{;+F{y!foCdmTr=64Yr=NY}%~e%18C3XOp6m2? z%U`ExRCY9q(?KFzZ?2ocd#Ct6`Rx5KG9$^V&)}oCi_Z7xPXzguPy+qXx{*6Zs%2u? zS8`wj2Sd3{4d`>WBv6cyi)}F19GU5)^(c$z2VlF0FC3drBf$tuo>lQ65(!ZJh zPDt#VKo6l%O(__bzC4U5w7%j>O$u3lP;HCi47!<+T%ql1EC-MPZ>MOUxaWO)4Z zGqug4GsU1yO@C!cddKvM07&CLz%GJkZS=8dL@kJ;yOtAv?3hF|-@9xy0s-Z1m+gE2 zVc{mg*D1schsn~&@d~A@xn>}}XQn{eC);Ij5fNXJWM%4mXVHTS9Ek+WGPC`TH)B9l zd5q4KXGoD{75)btWAvSB-3X;rFOE;(_vOM42AUPn?@~%FV5luEyp|U4uO}+Kg`Lqb z6p_sHVkBsrvJh#v;2!;v!{SXTYEzUi1Yzk##&Z*W&h_hMRh}%C^d;=3PFNLG;Z6nu z#}o#DWio;(xqNjeZ{>f69FQesvSrQc4l+S;6bW_L2EMEW4<+*9;JcN|ww8(KceaY8 zB{$7eObA)(67>)R&am#z-0y0s0t$`S@?ng_+d(Fu`*tSr{a!wkFcRFT^(DH{qO5dU z)CTKVY9;U896o}aYX?0UaQ1H@qMZ#ZWafdi$W*kNWUx(s(Lt}xGZxH6!9j$wr4p%? zSrm+&G=KnE4K!f9;wbEKPLwJ`R@rU4x{q{~SNNK+AfGwwi=C3zZ5<6(#dsKJ7-1U^ zbuxVjao0N28Ejm$z0)z0L~}C-*?L0mIpD$41jPZLuo~Xb*6MqfI^R4Xz(a!B^ZwGP zi7o`Y#u39p6yWRHGfGn3&iWhe$Ra}?$sa-$?SOhI)c0xGwYIHQg{8{Kwg&b(Id{v5 zJs!m4W{y?y(eRuA(}M_nGijE}nB@$M{Q| zf;}OWdAep1!6B;?x0~}TBcoTX*hJiltMT$1r~h^M(>Gru&N&cn!ODs8wB7>`+w8|A z;Uf}*A?MAtOl=qJDxjhM>!Y8(`?dtkb~dDB5BwlL_x*Ij`NrvQkAC|8m!VpwDb07B zQQYVA{)eZ!{nIxgiBLqTO+e1w3Gs|NIJ87+57OR1_$PWaGNQidAG_S37&&!blR!i; zh?c7BVdt22 zvl-WVYiYklcUeH4e)w~5y)$J-qeD#+j7om=*b9>N2SAN-xNAa57dhhh3{|vsB3c+E-Nvtos{a8#!t~V$HHr712*6+vKI^XE)dJFA& zFr^H;Ig?t==hf=6$4-$85|b2D_rU!{cL;%cc2JiCt-l`3=rTGZY!YRLlYs_!=Y`W^ z6$2qhsc`cJh7e`8@C1vqM#Gz&9W1tbSS%99Ht$WG^PGa#4k6+K)0CasaG|;Ng-q$BxSGl-3=J;5xTGeJt(385$Xexp5wN2o#?2~IKBZBJAqH?t)!(H=SH_CRj9 zDUhDz?AbE8-DQ()^udU-(~blK38?5gnd$;1I!uc?QtLF-a3^mLi?MvuDB6?iuD+?Z zYWZ0YsWRK!3Gu(XJ0yuv0#Be*SCcypbvDc5z81igS7-kP694Uz@{T>Y~xgeezYpE+v;8TWq$= zr7V4gxx<|%AVa6cLN?h@%C&s4seJ47U;o3Oet7!fU;Wu%c$1nM!(t;n1x`$A(?}=|wbkjL{Kvol!C#U5 z{Hk9Z6cRjY+%OGw_$A93YZi@m3%hevM~&sYi6pg>HDE9NlmGpvU;6+p)}+J5lA^cK zkINv{J9@KkQb-sXwMm4;+Xq!i&~Rso(Pk#8=t7RQqQ0M!M*~SO4RUGPsP<*N(FT~5 z8fz_&v0E_*3{DL=q}oOlZU91g>WmZQ4r(Ql<>~^x({^-_4YXB+1vXH)u@YQ6-C~p5 z+@@JUvhhoipkB;w_YhV9#CLe5^Fb|GUT8{rJerl-GkQn8V4H*^9b&;cTi}aNc++IL zIVcYsc$+?>zO(6okKKe^BIriyx8u{HnbFcZk{coJ^!NX_-+%wD)}(J0m1?u?1m8UU z&9DC6*H7&K`TM{8mRPCjnYftfC*h^(|Nijz-Z`t_?>_mhx5lDA*(Zc;FCD~h(*E(E|JhfW#bM7+27)H=V_x+&qiKlih@-_jPl?bh~>U8(gOH);RE&;9II-m1r&X)CRj%!zVa z^ACUSXJ35_JlK>$-*5f=&wk-e#E}jC8mf9mSc-mqJ-aQPpiY1P=YICf zZ<+HvSkDYt;~?Bt0f4W*l_~X{kzL=FClihyuNk{w;iL! z|GPi`voF2HHY>4Nk(Crzq{V+gUhFT;BM*c=vyuw?xf$4v{fsBoeDLjC488G3wo9zp zPE8iAY_-SIkNELTPb+I7RUK9vyoclQ@q1hMQW4WzX4#3+ZF~6{ZO6yoh%9bsBu^Nq z_@-YT_ltHZ&(gkr{0;!HlaApG^I5J@tPa0_`X7Gn_da~mhhc8Njrkd|9QOr^d9@GR ztYR2--;Edj-yq0u-t=KA44SK>&}?*vF`9PQ2bG(r_(N>mbw%2aZ=U|OFTxO;gYvpM z1sAqGXdg&{r~m4UKl|l3@~~T34|OqVp7^H>Y2xgv zL5y&!LT$iq>6sHC-8FR3ue3oj^%+hv2i?_*)wV54H1cO;qJFeKGc2Y#aGiDK5puuN zT%ku4trM!O21yf5Tj4;X+W%Z1!W{UyoIY}>#TnLv8ES+h(SzV?2$cqnYD1I8`z&g5 zZ=tYZK-3tj0gKRMTkz&~JFzxHBy~VI%(X0-&7t;(*qbo!u$K3FslaQXtHBc-rJ-cT z`RP_2Hu}~YH8NKq@t!YO2HwKU{DQZHqfy0Ycwhk`!%gZXFsdJn?<(VQdO58NK7Fmc zlyv35Tbv;eYai|^NEcAB zB;sb)15IAg-w9c#QLb=H`X+G&5rawC>;qP9guBjm-)f^&dV^TGm)(F)g^mKp#v~rE z79yF2?o%)%L|=P>($SN$-GSRr&Wjx+41Hc|)RmB~x$J_|Dlt}a`dO+BeVzqZ`l{<1 zbEnmUfVA}T_=p8N91PnBj3~Olow9RwIytgd0QhvmDNl1zf z6Yp3ZJMUzw9Gdsu!H8l7N(9q*h*{A)R!7oiRoBptP(q}NJwFIVW??zPbX z!@UFqxh~ax448PKyIqUG;Nr6P(-U>)SLl$@J4H{;lvD^E_Z%9YiybkF3!L0FU$kTB z0e#b65@iVDt3n{15$&3s-KR1YHGZ_v1M77t?OQI{*V#>>HT99C^#ad>XQBqSqWERA zrta>f9$&KY(eVa$MbY_^ulJJ5e$#9(FlOx)>8wDGp>hhjTY+5|B@#kfhhE?DhMiAZF~!@p>;m3;&YKNw!NnX;s%|<-tEN^m z_}F$X6N`)l6vinW9cNa|7Do?f11&5>Dj%jQruAuQE4n6flHHfpG+hHCvyqny^7N}fm~ZFCU=Db$Axi?>@;$M_;o2$?_}C1&b(8MBI< z?QdtpUOp08FQ4FASqIL3Tv=Vc=Oz|Q;88>3uNT#jT8N}T?ZILrO>O|~y_!}(rk*L! z;6$*%!q+Wh-K#n6A&)`nUPH?^;s@*LylMFkgug}=!IP$w(q(cV2UB9g7~`24+pTL0 zO+%ZH*XqCySce{L>#3npKrQ@73z!i%BrCQ)D0AG?U&lQNfv@o1;cF=`{xFE#?XEbcJo7FFSLCD zoqaF3^479m9t`3C$Jm?vzOLo@VI3fe9k9!>Q$x4W?sk{E+_5dIO=?yU2calZq$o%@{%j1OCe`tR`>Q#V)=`-ompy0s~QS_1Aoj>RqzciyFW;6utrd+VdW0er4Yv zR+f(*vy1FJSETWy(!UDd8Q3(q25&bwyl}%-O<#5$Q!Kwo4WgVPHfml27u)0sE4`Ta z{q}5KIavv%BN9l=+uKV1BdpSt~lj8?q>MX2AZZu)=ysrnVc$?f60mpC23W?N;{E+#{P&b+$)^B zDw*kRA9N=2r_@HSQQT;~3^i<9U29Syp4T}cf}v9J{_%vYi1J&h%U|Ri0>gcBHS_5Q zt$sKDZgXVaZb!FQzj5-emrr>h^Kr|BCg2vvQ1P#3UJHv5%fCY~b27yPR49FJ5>U~K zTN00)4*=l`{7+o+409d5I>wi8_K8F6&!`RxobJM1bV)|Coa7r}Ke-<%;ve_xe6W8K zSFs$6pxGJEDFZEj$}ef_eOayumGM4t#h0Fs(ZXtwR9GLR@I1dmZdl&PN3*8PSHwE? z0s7>8gt3v7K_-`u#NGQ7N*SNFzg(=K#74{d^8HcIGQJ0j%pF_RGbH)rLy{TfgI0m< zX}g!p*mt9T;|rGu5)oJ>ZE_-cw`5)E+{eO@RFPxU3MjlhYomqkMbk&AjC`w5WMX#0 zVjBm_I%^?kF}hAiY5O{X#GQ@B7rE@?*v6EdZB)CLoR$9g!nWq;F@^>4a(R2T!CMBT zZsfPeI#6UYF}AUcH0QFdycS=MI4ssUVW!xsLYVJUX=+oCq@-db!(b2MIaito{4$=; z&o0TEmjNI$o*-~@ho}FDV!>`3#2+|A5qk|VwbyO8o~q5Ntdjf%Ujfu9bf~2*(bGn1 zY=1I6*zU8TzN2W1zd2`nQx#KCT6a<-^D9YwIG>bBO&l2F!TGZAC_#K$#HaLXsmsUy za>1?uIVJ2qO6ZtRBLFt_vZRWWKg~WqDSJxGg)X9dS?709TJDd&{ag9BKmQqWl|p62 z-C%V$j(P(^pZ+#}@*k1q_Z+AY7G7U96{rl4-uOAwCf#=HOV@ied(F$Ye*@!!h11C9Prt{(C*$qq zGP!yDikgnHky;K^qJn@c((`auYTtb$dbdkolwBV<+~@N&@y|V3=)S%%9T}7a=5Kmc zLF^3tOP_?oux`?pF|ku8aHqSwb(68<#+z*eCRa=Nw!$m*CQbSD9opUG z>VmUI>_8gT&LNtFcE=FAU)Xa-8BkAmz8k^qymm?QJnNl*p1j9+#f~CfZpORvYYa6D ziiZUwS7bVBQE%ATpUjd+4S_!#@sL7*UYtQf2(6UTJwJj5Yl7yX>bdKAJ0bGo+|{El)O zR=+TP>o*4Au7tCBYo)%7l|cd+2oYF~T?bc|L#7-BA}nCxK^~LqwiBM`-Hun(aw9Of z$Zo!2fQ$zwHmNtauur|Krj3<`QMf(;2(h9(XxSHVj}-0_3%}8^7wSWwm%=06k*xBc?%!FasUH+({;uR#Yq?*eL=tOWv~J znM?C_yms#-A5Y#gO708?21*ey>OM=aonmZ{mv=$&55z#NfRqYoGa?N=l07ynQ;~vA zx$YDd?*y9-14mD`XAh&LJmkiqsDIER#=6h^(;mW^IS88Ut}ZBXt@$o|bI9g`6MVzQ z+i~%P_vhkrV|!-7jG{&0)L?AR;2ggyr%>VVQg+8hrU?KKVlLv!YOUoN#`L`V{08g< zhvoI3c_3qQ+8lzPOZA!BAn9|nNwdCl*m8^Opm{6xMvcad3JDX{x?L)6<{|JNr41*%Vd4lPM zILkne;i_SDy5j_VKJK4%*lLG`^UJ!zmFRH zzzm%SG9PlgixCc&L$qr@$l+|pl$^8$QT`%FdOsrL4-h%z63)5NK<(H@>bk^HpS%I< z2F|MRL`){&?VH4{-Dp+Q4#dZlq2Rl6p$1C2_+Gkc5zaaQPoc_l+qo@Td$r9wtMa$M zb@}bje+8;`I#Fl`rLc!kUTkE!TAVd?WqXQ!{r0!Ezy0aAYxvuL_vhE?DRvPI__2 zYkax3KP2?j@pq|M1uG_G8H3CN_#A-HuA>cs=50PcHA$ui3t;a84h|Hs&GC==Yuh+C z;uEz!e-a}J0yy2@9$o`CJ|3vA06{^znK|4AK{yTIuUs%Q?Amd9>9-Cp< zlI@w}zESJ1#XHsYwvla<~9ef*o#!BekS<~-^EwBb~msCbZ{qP`-7*Yw~8ierrT|W;7qoCAC40>e|6t2-T1(j?O zoX*QHYu>K=o5FewDmbeID2q|V6);6$`fc1|zveFFD~Z0(1^-Smg~Yc zM5_cPmZaXd9KSU8?@N1Gf+ROYHIOw{KmjMc;~t8y*~uCr@hHok0U;25M|tfI(e951 zM}6*kR@vo={KRmU19b>uL9sWna|nRF>ngj-J&ISi z3ROE~4HUrL#72h#@9f)?s0+GngRq?iDCTnA>$_veT4SO=S~%)6pGY8<@jCbdqRZQs zbw`jo<}jhAs{%!eCk$I*202|_b>-1j7gkiUQg{gpL|jo`dGZ!*#TVyY$X>6MMV?6V zg%`eq??CnS9faY?wqPWXslZy3f^46I!I49F)TMphY)*Ei31na-w&RRGX&;@yh+c1J z^RIGRX|{vUN$SaF{YZzR-r?dgrhsEq+j zsd22oyJp8N4-yiTlFt~OWnx#liO1-ED-D#kNbHqaBNUY{Jh~I`xly``{;3byskbCe z>{rq-3Iu=SEL&){Pn%&VDh;{uqK+_MTEW96f$;LC)49&~>10XbwQ|~k!3ub|09tiZ zH={n}J0*m2By7#5mqS0>1tsu5|d)M4VH9o}401 zGfTtCxUH~In&P%!^VlVe?%{FeXCRt?fq@q>Fjx`fF?3&Vt~zNYQ{kYT9)+6=lcP9H zl~Xn~Z8)5#^#>_>RBEy55_FcDaO?ZUB(dq+}*QB4n<^=`vZvh}A`5jMtbmmlJPNUbbakWb7^`g+b`ca;lu}JDu8a zD^RDXe1tjX*O2oCAV`dm@g$?*9#iCl)(2pg47>JaQ=yn!7UV*gL#45&k5!>2`=#X`6f2!=b=elfj&kK z%MW)j0)M{pOW(G6SEmZl4;SySOwh#oXJ3CCne$C;q>|a zWlZYpzDIJme$EcSakW71xOQ)o`ZSm}z8(u`&;Y{~AUJ(5M1p@mDKG4r4<@6pt%JzY zl&ih!i+_2S?~N8{(a+I?Oap1as|#NK&RV5gZQAxCeqrvfOOiYCqrvxupneV6{v0lH zk9TEgrLIP5_FyPY@F(JwghXLO?&VteaP_TVSq4?~p^;E@2UvWYs&`OiFSibF51|)% z#-8MgprpZf8HC6WH1tF9PUgP-ns#-Pvb)$1f+bFDlh#@l(q|Zss0ramJ+NYkueN#b zK9b7)zD;Vs6v(|nkysE>b@$katBSBtTkMjfLn6S8!++T;?RsB@HeXP!d>|1EiupaO zt?srDD?WKO5^Y%M<(p6~%B$gPnv`y}(cnrQlM8TI=-@J7fPZjaVh<$I@=B>m+ZI*d zeZtY=16I5(ZPnMdTU#!v(SoAhX!=nUdFSA9^6oqf#^IP>(y);NDTIMsi`@DE@@1)d zsL!eWwt&gbcvzsA4dQ%VzBRhNs2NcI(E=EyGnP=8I!Il$^<_L;52L}gz?#y@M7V6y zYcJ6&`?u3f`aUkZhLoONi5l7^K2fvRmv*xbLV-dbD#+TFYFtayJX?TT;4u#B3$oVc zqwT+Z&>Mne{gu#=bIONZ=uZfsY!1M6~}EDNV#HY~tW9S>xLZFr@@>3O8i9$!diU-Gt= zddlfFd2iCf9Z{eM7Zh!IJDXR_pkQ!@Bq;u4qM&8?=)_2YEi41M+o*NscW*$lK7I#1 zwmnY2o%G{+V7`|+b^QL)QOqQfZOL7amyI?&OW=6LSh+%9>3q&deZDoE&&nrKUgx9f z4<@~q-n!20W+;m{sRZ?7D2%Fyl*b!z_ypZ?d>ZnD+P?BwPC zv`H!+r+Veral2wYzOx?S6)2Dj@4%I3zUqr|a=MtU71R7u+H`)`!;-S^Hp{1movRZ% zkoYGET;O{Ho2v~k)%IiG7doVf5SmpAK;{Nce?IQ*y`kAlG2=Pk833~e)fUuet%Q;3 z%rZbq?i*sR?76PH*pEg|Kgi|T&TUVP1)Nh`Tt|!Ow2r8oK59RI{A&q~gX?c!(?~c? z`MM331mwF#P=qU=8qxNCn9cM_tJng52fHAe|4leS6K3RO+bR8cBtTJM$eZ7VK(^$KueuoBOhz zedzUK9tVi9dI%_0@?ll`AGOuS4581kdsOUQ_x}`RSi%1#8q~4uSHA!3E-u z_JdFe%6GY5%RhCNI|Tj7HIoTAFbu~18g=5rL`ZD~7-BXR=U%UDudj+TCMm3OTh7T< zpx{(HY&r9{)jW{|3iuJ2tw2eC<+jyEJY4IeMQq^Iz4#$g@Pdl{{t&I(c-}iyNtrMF z3~R}dNKfY%31Z-AWp;Pdu-0WKJU~F5#(?h^7S5^SNl!ya6n>fBUTl|teS@g^9Mx4{ z=61SXQbRHtKc+qMF~#hlZH=Adai9y^3%d$4Anb3j|DZ^Gd~(RO`B`cX9<% zTHuT_JzIOz=-!{(N;D>Ad;SVAUb4a{y;jf9xpZe@Ch07>)!(C@1W}xO*PGCk5qT#+ zrN^>3VE5u?Rw^4~T{!rBE{x|04VJA4`J1f`ct>xodz(}fLA^kj zHztEXn0r`Mu9d)Pm|KB5z7-n-&Km*20|rvPY}OS~ZLl?ih!M|z(FNNxrWVv{>!`U= zCM6~kG93Dw^+sMHL&zANj+Te%jh*Tk2hlAku$>SaY06U_USHxRmw>;5pk@}Qbla6l za~E88Bz0jnQVChHxN#VcOXAombxDl-JAVwyP?SEQcTGsDCUiq^i>lMSEzS?8M??n!ohLUthB&2XQ(U%Ch``L=wtvv9kAScXLj{x+Uz{`Gbk)yKiSYw?E*(^Me9Th2Ei?9%PIx`-BsR451;2*p5nE5zHiHBOf$HOuQlhecrd zHa(e8k$lxik6m{4A!KW=(4nW!rn#Gkr+$?wF;F)c2ro*-*=yoZSO)gz&oj>{|=bL0SV& ztq%H4h{MrNq)JOZI)p%hEZkFj_r;di+0;UsPm3-x3(Np06>$0XdTEu5zB}X$Kkf;B z3~ro9ZaUjO9laVYC1y555Ns9lV@Mk8@2F{dcxgr@1$-5s>;Qciu`o&a&IdKFZN{=N zk)kE_3#I+asN%D`0cj0|K6rN0ly=$pG7#Y(CdpI3?4u~WeO^k)-?t0?Phi#0>Qmvp z+3Ci;%JM4oRwU6Irn=o+kqZ=O+1Kr}p<3aJx6=U2 zU7TLIcNhNIQUfEGEg^TnHaQSg57+EM4YTe<(_T!x#mTqG^Et;?Vo%eC#^6b6bm7L~ zQ-aD4JF9WGWvQ}U8c@nd&KWu6a}*HSvT<9aP4A+NeWtvBV~!FPW10r^qYtdr#cEgX zdy$43!Z75geT2lpPVPccw#yr0-NF110%%Aw&cw#rRN0HiFu4ub#fm_K zV6#Jia^uu<>#f*_<0qF-Gr$z>tkN*v-LAFPE2du7w6Ca~mB`s+_Zrpv-evnfPuoSGx{}j&(L>zx z(KM>8t@XZodY~;$&L8r+7u<1%BS;5V*?RYS$3C;8lR$jnoG_WC+&O{fS*@frSc|rU z(&S;leqPp}_T~QEkwT|vv7!e=k#dzsk0UWcJG+FP<2eeet-6Qd)Z}$P+S3G5&=Imyv9bYES|bf{=PH(G zr{$uP2Duvn$7b| zT4>uclXJcxu~|~^6T#5HiHX@DXevU~w2a&ixkYJs&VdE)ERSV%#^ zpF0f^2$}_Cb`inj9%^x8eHi#e&QGz_ch`d}$wZG9REB>SUqHQxxbm%UL@Px7hj1aCj|p-AI<3{yjeQ`TTG~82sVNd}GyiQzupA>M$`u-%N4pEpA%g*;fe-OiiFl)}hOx^07EvR>_$6>x;JnJ*@nG2Q zV7e_yY=h?@vadX^`EH%Ji<3sOtm1`{(E;p^8#JIK@cIG41T!5K>Mra*R1-VqAl@ii^1Xrfx_q>RmNXIFD`~U7nfLY{ z&zODG5<+wn$ey_B^egG+;BQq@$2J=d0^~E?51Q+Gt$yngBKZExs1W_^*guairOH8O zE_oRM#zX76FeQf-KhM*B)2qr%kE-nqSkAj0cR0D@9p4q?0b|keL$pgdM~~mbMAW6V z!gLk*G2$9I^-($mYGWx_QMO#t{HeC*>dNHN-RhzD{PH#)N9#K7&dPDHH%X-xG#mJB zR6Y;P`iD(7T9n>a#Zk?iTS9J6lnt`X^z`h3KBGx%TaL1 zxhjl;`;u3hmI#&1!)BC^13x1zRCiu5l`fO>gQoC;aiH=)p#ovVyLZA8CL%LTyxOde z%kg=pF?#?;!vY#YDF%mDSHt_zOscz=IabCSILT04XGR*m!RvZD&)scZof_*g%`o#FEb*b|TBed7R+GhI&jb$K!va~nr=HxwiqiSD+B;Vv zI5h9y^$Jn98#lq5=FP2)&SK@ct8Sa^PFTGe2(Luw;%-##3*L+=bP5=>-l*ULsUYrx zK2&U-IU^O2uz`qFVz2J)?sde!n>w?*eFuoyV&@9p8?Uk&SgU*^5H^Hd8H&{kbz#@I zU)U*Ccn)@>v{YYqyU*Tok)OONM!a9>ybQTRd$duv{c&r>w5)^#3bI4NJj13|1E$mM zPV9V{Wr!;%VYSurK8c<7o_T_j$M~%69fw}Xuf6M7`*<75R2XPCn##4hYL;5sjHKSi zOUZ#`b+EwGTF04GOCzOT=-X*`!feVQKn@;Iq*R-D;(W*Ux&a8_I`DH}9IqesTO(DN zJGOCpIwA3YC6_gLB>Dm9((d7o`3_+eQiY0JP~3A6L7g`3%j3FdH%|`9Zl1m{DL(~M z(o^QDpMx}zhKc{XBd<=z`&PYQ`^?%?z(EKPG>Ii$Rc~+flXtrHzDJSt4UD<3lit}M zszlS0QvP<@#x!dj+S+LD(X7tieh8WT@fk4TujRwOrn&}m1;ap4 zz7@@Chq$G$Y;&rV8TpS2n5qr-A3y+l&L3ok9y0pzj(`Y&!6Zd=pE>LeHB zYD_S*q0Nm()b6L_U7zvQ7=UguGz=6K+rL2C25~bkGX-ak$vDOSbHG1@({Q)S9R1#O zG7u$-Lc`@6jbr>2N5;N3%LPnKF1yIp+x^v!hIQ#g)3;{R`n`j?b##(-)6@9q%Suz> z{3X^pIM?ww4x5HB0|PEF!MT|MH>{!1W$=bUIHY1P_qx^j;@CVhR~(G{Vt*{DCRFlU zHnlnnaG^M4U<3PqHlp(C%3Gq*tLV)3Qb1DcLu~SoURD9%=UOS-eJ^{w-37n;6yZ-Kc=a>^n&h$#d&;ECYK=0zi4Yh*={G|;p_Zo z<4cf0!O6aiG;0?9Ytq}T>KyR1d+b-sgt0f}S&=qTzZidrI}36J&dzVx2% zph~l@eiw_4Aq}+_3F(lZJIpJFbpVe)xnhorYgLc_Qw>LsMe{p;hw2cRS+0GYzn0_C z{;>M8NYRN&jxc;~?uFKV&aX82%8Wa>?d)Woz5}|RSC-f*mp#?q7uW!FNaGL59FHy}!8kXs|cBaQ-pIgf!;w zAXEvFa)-y(S>{{95-Vy5b44&&kb&1JpPb%ayRKPC0PPQj;IpK4(_4#C(%5z%x%(1< z5&M63Z$;LseDlPUu={ek<$gfGAoiqgYkt2Z-Lm~j4Ey%y@efd{FCBwJG1P_3BTsRg z2nHN98VH(IDAU8mVNcVIL2G+vZZjCL+@s_J#859!Hj}#<0mIKE*$)t~0X@Za&lAH^ zk}oF+Aw*AxPQ00bOIROX;_{5rS+J(^^mDP;mKz}WLfl{&0u5t`&x0I zd^dRVe%$s;(No%LC!V~K@u0tx6ut$jZXpI{RXvr7W*2ry@! zzD8z_q~k>E`&K79iN0rY?4fBi1vl8g3WTtR6`LW84$S9f{G%yajn? zIZN$3o!aS=x-6zLqX-EFkjGfZg|!Z4;i{bu-#E4wEX?o=Fb^0@qtQ@u9<}hqJS=nU zn@}YjQSU5YOkrrsUV)8+MxWHVaDO_l9=BOARY`?PItJ&NUDWbS30G zBN=O>$7;A3)%-mvS%_YL5^We%jSA>E3 z*-&CIhVz$psdrv$2M8E$(R_8Z(;1Gypb+4>{Bq0bs9bOxEz+YnXnEZY&F<3lA)q&B zWPXf%Ll97Xbr9Whs47gj`!TQvBqs|#S-iYS^}sxzevAa*Ht-@5k`&>5Iig1 z-l_o$Ap8O)_dnN++_Bvc%F}g(Yq@1>ChG;1-+_edI3{94ob1Sz7;^LRv~{wYhi;b? zG5@RI1lK+%+-7|f#7X^P29Pr5#FGLLpK}C9Qr0AS5%VA1^SQ6fwylN{^OY(L30u2D z)X%IP^}%a$xo_4tEEcBl!kfK88aS(Ab$_|l`wyB1__JGG*vcOJ7|M1LoVWE#EoC0m z1?m({C~sv;wO3D9aSE&F%|5k!%lceDzpCka=>$&}5>}up-w467uOD}t(6}{OhJ^wQ z-x*uDW03@(k?z&ZDc_N;(t3sST4DX)U-c4cW>B_=my@DzkB9HAjl3B)lUZYCwO{G- zv)eVWN#^FyxkPV5nNH{-dzCbKG6mn!uRGIaK?a3RLTU@}jLuro_GYBo>Hrc;=l5{| zJi8XY*VSv>Dtmp>SkW{#DE|8^nDn6|wc7E#G+l2Q*91tqBjlS&4z9B@JZ_!?sU*@& z)x`<%)7(j9iR3udc9TD^3z+4+|`BYIfelOWcS-h3xQV(Gd^-MJ9_7p-D#W`Z~NzAQW*}J+hh^@_K*Vr zS5Ae|TI@Y5!74ZD6k!+z5vla>;h>c6#$Cyh5YYNhFzX+9Y=b;?cave*pY4v?_o*r; z;6DpwdxwQ^dWBkdPLrTvvhfi_)GSNoEbQyg@oWU&3#hsSxWEhM$c zlx-wG0#VoX9POz=fJbtf{Vb3FCV-p~)5Xd2(r-!w=1f8mBz+Dta6xJNWz$I`zP?#` zOodHgSm`zs>cfNERhur8SJ-1D9RmL`d`Xa8{dOq~2j_AC?+)pBa=}O3o({sUeLA&R ztRtbKLw!S%9%pP$hLf6Nm%Gfpl3neb%2WZFX5rd4>{B(Cdu7J05~TS?f#_s5F|!qcefsh-0W zD23)osAd^g3F{COQt|ANdF|)8_uvzNbnG+%B-g1~!|7b1K{h5)2MstF|uIa$Puku5qP1xSB%Y)>p(l^w@KYTcmLcxjlVrg*PX$e>1?0 z8%eiHTdnQf5#wsp~eO2)phd$$%G5*ulxn>sIA`z7SVebZw%4KwQAI$S9$3O%Cm+ISH zqhYK2nDHh#0OdZ%%jME^gu;+k=I}M70fcCMVHw!6$EMh7L`Yf#Zi5b%huWbzB`6TWtMJe z;_Q4gV~XHe4Wm46-B3Ep$|_}Ex&>+g!r402nKG2;kGn7>AqQCgAvhZCo7uJ?PdC(E z5S(jgU+oQB3DdECfkzOmi*@dtx2P|I=kmPYG2Q3~n5Z(JFUg1`KKPq>J)>)16xG($^GUk*w&AV^* z<{cJgg&!FL*pUTJd70J9dn`lwO~%#`0FVX<{GS^y#vO61HPt@T99kO}luuwO$M)}} zk$Q4N2^$ky+XSXIN1zy7?A<{9#dPS@&@?CUhUPd#%ua^R*viIr`HEUYfBj(YZW*Rv zUM%+rRf#2*%V3DJDz>{2f?YBNwW~t&hiA>cVI06jf-4zusg{nA81@kKL7P7+ z$xN8d2qP?z0@q@sM~^tU6*u+CU{Ia2?35W6Qu8L!iwkG&B3+c$)`3OSWRUS2We4Px zu~~7t)?yekfgppR^O4$rs{G#22k~*lECUe6ClWSsln#v9aL`ebS}srnjGQ27jROk|Q=5zF ze6x3tOLw(Bz!OH8ZT14Lq*a~PjP3;tJu17v3J^F54{1|ssbYFru(T98f)3!>n+`7F zRhaf^?KAStiCUx!1u;-k)He~HIj?l8O?yst@78kFBM|%q!*GCQvya&L0|yV+>E4=x z)G%cG@H^ic1j!ENI**P4NY9&%KXk`E(|2cokRSG_u@B+OFZZR<=>mz;nAd9#BA@Yb z7W7Dkf#_}7pc_s+?%IXbWyis z7GnWL7*1EH;SH;u#G>fahBYhFfrg96fKj_0mW6SV z?|Ha**UGkEJJ`(Aj$yO&C@zba;IWYWG4p!I ztYtqIPW_hbn>LHE2mg5pINpvQ)78p*@Z$qj1pu=Fk3bio7}LhMR(dX(%ew{kH&B~E zK5Iz3%8vA7_XoxioP_ zd!l*bx|UfU`?We`TF6cCn1h0I*H(8StrFiEJU8;pf5}-5D<922VkXe}oS)HYOET=K zfjM-L7mz1mA)htZiB?

P!@Yi2QW?s0W`e zUFV_QUYF{3WyA6_6Osj7!KF(Z)WX?46az8H1C77pGy606%5+}c=;BNFw=rP8ykGHH zD!ZA7`z)zkYX);H$$&VBA8Xkl1GXv+mm6_*ofWn$n%aUN7grif%UR5O{z^)Xq#G!ubRbQdJ3Jypr zqRxJpGJvT@0;iXe#Bt?(mV_>oTrwE>_L!VF_Qt|qs!iuCx+sHTK&#^)`O)!K3YY_b z1~4{nb++eoAPd4WqyMg2PFqcLRL^~9G$W_ZTS`E68s67IAP+;Fny!Cp`ZIZ zvrhaq0JBt;Fp{rb(F9Jq_f(9JAA%^OPf^;KJT}_+g`lx;`GxsVC z{Nmm=m{$2}2s)1Fkmn|)ICAZYyF02X33cxun|HWVAPI!SU8Unl-9HZ98;j`qcniJ` zo~K#;?kckR7+cKO@dF5_IgSyu9w)?GN;R{-Unt$4#~l3_9tHct3m}O=87!;4>qhB< z54S9Ugh2s`1(M|uO8btbqpz||bRQ^sRXEk^NuQk3u7AmMoDp2+jt1^_Z(vo3|JXn? zuVJSw#4{F>^9dh?Cy)IT(__ng)K%Z4M8ACN?jaUFL9UR%4qB;T6i zT<#V4P_#J_mbA~j=Fxgn1$aN7w##7BBwVv@7m#f zC#83LQvJM8-nbW^Xb|h4+|(Z$L;og6FJ>hFaYqn!+!@`G=RUYcfZas3LP0*~Nr zuADf1-u%O`29+TGi1EMKjL^PJQFf-G`8p@hrb z%kKnZJK(0j+*tj^?H$)IpZ7)K3nJ2>adKd5^fx#AnVgS;M+?Pg7jh1tJ0RhcWhBPkKv- zF`kv|gSKNFk+`zStDH%Vpgk~$bRs_YpuI@-BR=oe9abmhW8OCii zZ}RIY(=KMDfSDq6HhL^O#)*~0WmN7k5!&nLhC_Frl}@_G3~XtR+e3J;DCmj-<)Lf}{H<7G>?>?H+1_nZT^; z$w!WZ*tz1Q$wvDjOKB_k{rvp8g~rALI77nPDsnojxYXYpwU)kM!PVsW24JRt-YsVpWj5{xJdgBMRR4s@ z0*WZp(G5ZIkO_HP9>!&Up-c<>Kf!ASZ zh4JS~46gYM-QjeswiIT#AOoQ)3^-rFJ)mc<1~tEZ^3N>!(Fcqg&?BzChdR^!B&^8H zYDAD&{)f#3sS=)0;ub3dT#v*GG-U zxi<9-7W>A4uwo(E8Ok)lwa#K^r)D&xXG}6 zcFm3>X}yBB27d0NjW~d6-;Dpt`$@r+aL2XQ zwE(J0O$$2b9E-OM>ZsHV8lDs?;MbRD0A%e0Z0$yP(odrHJWeLb+QdH3#r=oA56%UF zf#zl!4v*VXPiLu9fFk6eL1rs?Kb{(!l<~n@V!+yD9C}h zCt!rWB^wulzjvHn*_HZo-So|m6%6B{sOje9a>v%aq*bI^ZB)>xQCh|(euIR%^|oVC zm6w*otZ1Z1S_DEks)h}5yY`l zAnJ3r?(7C@-H0t(lNo|d=oIH5g;NB`&OO%eevi3Qk?!Q68P|Z0z0T%#@?ahc1T+d| z?+U!|W&l;qYo}64Drl?mje(C_x)s%@wLq zf@`eJ4Yp&UlXkV+qri1z7&_bOd_lfmPX{gNBxvQH3#7$NKVqM^Qj+lM_{dVz5d=zE zfNzrX;1R#nc~e?s^)b}LeQ8puS~hcaLU?dC8TkZHQmmw2t!#L_w@heV_`GWw4ym^~Q}C5< zR20xk=U%_0c_NQ;m+N%e5|mQ&QrMh$gaklr)20f^PG=*n)@c?FB@Ba16p+$pws3Ai zBkF_>^8z95kUo>F|B80(4%=PJ)0sy^5e2s%s+@>Trrc^gs8)M|a1+sj&*U%MCN&x& z%PKck)ycveOVXuagr%qm@{i!vOb0tCY0XZ#eU%plZ4AQ_vJ`vs$7NA+4-W%-0u!10fkb%LC25Q=Ti7zxk?LwT=p}oo-0dgRf23-{r+=b?#?y}kl z)*E*dW+tRVqAn-gw5FVw{l2;070l`kOs9%uqvzz<7hA3C&g*~u0GKivQ%3nUR_WBI}4=|XfXv!`85*KTR)zN9a_CPUyi7Z!e=kqYw>YYTb8n8P8N*rXD4o# z>b5+!cJKDIpxPnhd--<8;ggquV}TkT*5XnrBpM);u|{&^gqK0}+;KaF%K_7(@27&b z=ztwPEEg^`40sa+S;yj9JO+c_^AQ$gvH~3>*Kz$tshaLOr)k4v2JZq0_CHt{Ar~Mi zt;ki|QP`av#+yRyKcA%ssYITC z6fzo`_kXZ?1yIQWvDaeD^gOta=hK3N0V4nQ$SX9O%{I%WA%6&kBs0+M(&+~5bLYD2ZArLXs?B7{91ihgBZ;7byh|_XPS;41DWt@TGAR-4Pd~lpB@hFgR#G&G~NvpkW^!C=oSZ?Ys3R3$&xP(!mq~HIBLJMu$RX zjbJ@xJQG1Mv1Qy4>WgE2+M2P%cLZa(j&tRz;GNUmfZ{;oq-UPubIO!tL?ca;>bxPNpmVwFAN~}Pl3dY(<=P!eunVV2TL9_L&<|SQe%+}!qr)2u`76XpeQ;rGLlmz z`vs(QT_2YE4{heyd2NR5DfX|20|5As>?a(DUg52(5JTCJi4g zP_+a35S21D*I)e-+?!xdBl!iO*c(W2ypqaHV$R-#C5EAR9Vndj95t5xDY!+jn<#^3 z*G0wyMvcLA&>K}A7gonC!;)Fbd^_GrKZ$PVov~~(wecqu4ir$_SejbyskJyRloZQw zNN~*vKIV13HCpNfuO*JgQfV|-`!V*S<#9>^x?CA zM-YEow-4cPm^PTPFMCSWA9OmKOWvQQ^LL^-%n|du&`!Pu?`d+oLG7~XgYjg=R}fRQ zp}O9KTWUY8U^oew0PzJ2vpRX#{r)82^|;H-@Lym=h*)~-RTT;#oiwJ6E&}Pcs-$0eK{wrU_&bToP0BztE= zjBjo#BJczfsd^~%5N@Q*NtnBwJBP*X1}6a1TmBf1Jatb8RBR#S?gOacCh6m5i>c@E z8~EcQZ?1^zkGIP$-`%Y$Vt!WV81!i&OQtA#$+gxNrtC_@5YT5rGw^lLu`UJ9eh;<@ zNX(sv{rB=%Wo}^wbOG9L>U|;7s{O)UgOMo57F83K2RDd)=^sslc|YWsERbg~X(|4F zRnazi9MwC;D7bz>(gjr>RWL5p^?JJ&oWq{k&@k}pPOl!O3*L@etwMGU3?xn}@FinN zVsJ5|V_mwQ+g&*qmk8>OD#d_4X*ARxwUn2;dlqO(5CFhR5use=PtW%3ux6nRIReXs z{8GN@&BkNCVM0KT$Q-GY%3Kn?^z1&cQ5@@kF$g{ntR$?MicfH&W4=vl-koLH6kI{e z9Sk!xme7i`mhU|iR$s%>wzGu!5|Fp>9J54yE8{&4UX?Vki^mXJaD?t4c)+?rNpvr# zQ`#z@rNjD=I~Wm?m`Tk}zsVpdx1z)KVg)&8T7bd%OnFl=g)&X?F?xe*`D;H34*X!( z`t$tqz+J$UVOn5u5J4kPpyMCRU~o*TEz4lH)WL@kp3`v@jg#8=PVHle=*q$9Z&O!C4rDb|tJWxQ04JDYYsS`Z56Cjw-K6uiMeAPFavD$@+rs0&=UY-sgs@j(eV!vXB7+`g+owS94yy z*2|kUs|P@{(R^%yW!us{{W|luEGV*wBa5cHdU?{$GTsfB8Py03F9%#Mw9^?(A%&e& zn=+5g0)`X;_UHEU(OhrGB^F!6K-tDTZm#jdjxt z{I+2ZyNnhAA*SR|>Q0r*V6Ljnrpj=HC4p>;5tnpKGgO0S&;Q;iVJhCRf!g^&1S8DyaZS`*kzfP&K zD01hZNQSuiQ?!B8l`44Zl9>9ZVG!NV)I$4;JnY}kjUlJkd@brig(i-{U%3bJR|2UI zwQD75HJ;Aqb@|h8{{Q^jKm8jO?zUb(mS(f$pJ#s`{q`q3b`(cJ_$?z?uKP-|Y|=0d zObj`ua@C7ltEPITX2|@vfA+us_K*GyjyV@n>KvTRuL3KOIDRhEVZbyoQLM$2ZSD^dDB(Uza74Txl9dvJdVn;H`xV?V?K|@VETsDaCwc_Q&7; z$X24tUAH)N|T7~}si#cz#XGcipee465|1Ge7^UL3F37bQ^ z4CRI9t3Ueomw)ubFS5yPmOyW`oV3r2$A63;eEZkdZ+`j{el$+b_5{LpXH(~ml zKgq_?9Z3QIsFy`>S;J3+e_DUuFOh$R*kj`AfVe%2sQh}c0>+^eIWgEP^G|)BYnx-O z23CPu_1k|X|M1gq|Eu)FPku=e_)N=fo4y{+Hmyd`nMc3+_P;EC_{HB*Pdf-{2TRUI z^EMDWJTyT^=K60d!j^1RnIT*f(;Wwmof-O7)9@T?T$9TD;p_wKVM8&QdyP^BHCee&-vi z1FtNby95f+LUOnNA8pL9ZEo3~45jO{fBWzLgMam_zlmDb1J&&hO)1sjE23Zj z7N))lntP$#PH&eB1tSut>%M&q7mZ72^^0%++yD5(AN+)y^v7p@C@k!f@%Qmh-~Qx( z`r$wP3D<-h;!pK$e;*|Z@i^kZcIr|9>8`UZQ$<^gGW?@+GeFVN{bhYyO%#A5dg z6dU5(F9S@>a5MrFLV`u;&z!R@AMVqYX$LFJ!)EW&=ZHmzL}SQbrsM2kA8D{IW6qHJ zE$fm-=5zJu-g4!X1Z7UvBBUGQIOMk|c(Uob90hxT{sQ$_MFNKjEMRp9yLzwUF#ow`xpQAhoAo`G9QCC#xcg5i#YCZx7ke%Bq+{!mcRX9|Mw3+ z)!@5eEjOV?l2LHG%KEhpWSxH!pXSfz@m+#>srx{bC%gOX;@jnK|IYvO!yo>c7QvO_ zM^~IO0>6f@4fDXqy1h|%lK7usAXTt;pl%tFDF{yvVt{?xgK8KjEh$~6a^?KGx~}-w z@$y1kIX8&AP=%-jSq~1_dkS-ra5=`@s=3>rkIvjsNSsanWIVx^CgR5DdhP!7uSId? z-mLxfoA8hS)z99Xr9-^;Yg(-?h@u+5X^Lc`^LgjWkLz{Ws@z&TQUqs?GZTUwh)*c) zaD?Yr9V^dl}Vp)@$Bgv9%FIJjfKT>zO-LY63miAfay-$ zm@A)dU2$o;ONZ2TA&T?TO;&3Nd>lsCJ;~rbM~Z{w+C6RD;J~e&)m1-2rpg}iD*bp$ z0&&WT*PE!r*=bF@mkN+?t=Yf){q}7#6Q$K_HdKhhw*UwZRE9|+E}AO0?S9$s^+;-% zdHC%;`dtg^(1~WKn@WKs|6M;&mcQ zVOa!;LcUe~BQcAOa&a~DWQP}H zoAOyPDV%4R?Fmg=fPI~JlI-W+LUCs?_jkV%+;3(C083`(*i;N?cl7)L+rRmb%&w`F zIm~uf-lSRE)P$p)eLk%Jyy8EG)4*7q1_n{5Pu%(UupA1Te#5ZFX_%1THXe?G=T$^dWZ!0}+r+-884nEt_*J%9oQAd@ZLly%?g%l%Y=63mDQfxdA(`;% z6fYMuF>wggKcdS3YY1x+!+smkRwekIkLzDM>d1 zB_s_isNgbxe3ZF;{O%dE{z9OfsPB>K7c^e+jK(&l;$UN0Gwv+8qu|qC-@mCZl|jYJ z`Z;c;yaBro?UGwv1Xvx^v`{tGpxw$3xik9}21yo?P^}vqx7PDU`~YJyvTVQO%isI7wZ zNlRM#cMoA8iqN2+(ReGLMni>-WXZmi5u$3ku^K)bk;p(SEf&>ae)ck)EJq+u2U%C> zyH7&~$`gG)vP)=gd+c${BN-OcQ^Sb(X?iTF_R51VHCXVQ0RzAd+oRoHhSDf zX2spZ@UV;lB2_a%N91f}en2GiY*I(-V4vDr5mth@=n;e=RqR%zF)fZKk1cQ>!wV}Wb@-_JalsW@f+isz<-Z_)5Be7(TN6|O delta 579 zcmWN>*IEbw0D#f2pAy-lgv=ycNhG5PWki%M8A+K5AuIWd22m1)GNY_gS=XMWdmcdN z;&ipt1oia&4dhQsDH0(450HTpC_yqvf@QD_kq{Xw!(_OOkdZP-q*lZ~=THp>=Cm#wl*GGx2#kW9&vow7@I%O2S) z`((cykZd_9IdVu2%Mm#$xpGYMy4;YPQYyEkOm2%(E){Y|?n6P#DLw?GyZhpu8 F`wy%^ukHW< diff --git a/src/SharpEmu.Libs/Kernel/KernelExports.cs b/src/SharpEmu.Libs/Kernel/KernelExports.cs index b1f0f38..0235c92 100644 --- a/src/SharpEmu.Libs/Kernel/KernelExports.cs +++ b/src/SharpEmu.Libs/Kernel/KernelExports.cs @@ -461,66 +461,10 @@ public static class KernelExports return (int)OrbisGen2Result.ORBIS_GEN2_OK; } - // Unidentified kernel NIDs observed at runtime; stubbed to return 0 until they are - // resolved against scripts/ps5_names.txt. - [SysAbiExport( - Nid = "9T2pDF2Ryqg", - ExportName = "sceKernelUnknown9T2p", - Target = Generation.Gen4 | Generation.Gen5, - LibraryName = "libKernel")] - public static int KernelUnknown9T2p(CpuContext ctx) => SetZeroReturn(ctx); - - [SysAbiExport( - Nid = "TU-d9PfIHPM", - ExportName = "sceKernelUnknownTU", - Target = Generation.Gen4 | Generation.Gen5, - LibraryName = "libKernel")] - public static int KernelUnknownTU(CpuContext ctx) => SetZeroReturn(ctx); - - [SysAbiExport( - Nid = "iWQWrwiSt8A", - ExportName = "sceKernelUnknowniWQW", - Target = Generation.Gen4 | Generation.Gen5, - LibraryName = "libKernel")] - public static int KernelUnknowniWQW(CpuContext ctx) => SetZeroReturn(ctx); - - [SysAbiExport( - Nid = "KuOmgKoqCdY", - ExportName = "sceKernelUnknownKuOmg", - Target = Generation.Gen4 | Generation.Gen5, - LibraryName = "libKernel")] - public static int KernelUnknownKuOmg(CpuContext ctx) => SetZeroReturn(ctx); - - [SysAbiExport( - Nid = "RenI1lL1WFk", - ExportName = "sceKernelUnknownRenI", - Target = Generation.Gen4 | Generation.Gen5, - LibraryName = "libKernel")] - public static int KernelUnknownRenI(CpuContext ctx) => SetZeroReturn(ctx); - - [SysAbiExport( - Nid = "pQGpHYopAIY", - ExportName = "sceKernelUnknownpQGp", - Target = Generation.Gen4 | Generation.Gen5, - LibraryName = "libKernel")] - public static int KernelUnknownpQGp(CpuContext ctx) => SetZeroReturn(ctx); - - [SysAbiExport( - Nid = "Rbvt+5Y2iEw", - ExportName = "sceKernelUnknownRbvt", - Target = Generation.Gen4 | Generation.Gen5, - LibraryName = "libKernel")] - public static int KernelUnknownRbvt(CpuContext ctx) => SetZeroReturn(ctx); - // NOTE: "SHtAad20YYM"/"DIxvoy7Ngvk" are sce::Json::Value::getType/getInteger, and // "3GPpjQdAMTw"/"9rAeANT2tyE"/"tsvEmnenz48" are __cxa_guard_acquire/__cxa_guard_release/ // __cxa_atexit (verified by hashing against scripts/ps5_names.txt). Do not register them // here as kernel mutex functions: the cxa guards are implemented in CxxAbiExports.cs and // shadowing them breaks every C++ static-init guard in the game. - private static int SetZeroReturn(CpuContext ctx) - { - ctx[CpuRegister.Rax] = 0; - return 0; - } } diff --git a/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs b/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs index 5f0e2ce..a154682 100644 --- a/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs +++ b/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs @@ -110,6 +110,15 @@ public static class KernelMemoryCompatExports private static readonly HashSet _negativeStatCache = new(StringComparer.OrdinalIgnoreCase); private static readonly ConcurrentDictionary _aprFileSizeCache = new(StringComparer.OrdinalIgnoreCase); private static long _nextFileDescriptor = 2; + + internal static int AllocateGuestFileDescriptor() + { + lock (_fdGate) + { + return (int)Interlocked.Increment(ref _nextFileDescriptor); + } + } + private static ulong _nextPhysicalAddress; private static ulong _nextVirtualAddress; private static ulong _mainDirectMemoryPoolBase = UnsetMainDirectMemoryPoolBase; @@ -1555,9 +1564,10 @@ public static class KernelMemoryCompatExports return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT; } - var directoryFd = (int)Interlocked.Increment(ref _nextFileDescriptor); + int directoryFd; lock (_fdGate) { + directoryFd = AllocateGuestFileDescriptor(); _openDirectories[directoryFd] = new OpenDirectory { Path = hostPath, @@ -1578,9 +1588,10 @@ public static class KernelMemoryCompatExports stream.Seek(0, SeekOrigin.End); } - var fd = (int)Interlocked.Increment(ref _nextFileDescriptor); + int fd; lock (_fdGate) { + fd = AllocateGuestFileDescriptor(); _openFiles[fd] = stream; } @@ -1953,6 +1964,12 @@ public static class KernelMemoryCompatExports return (int)OrbisGen2Result.ORBIS_GEN2_OK; } + if (KernelSocketCompatExports.TryCloseSocketFd(fd)) + { + ctx[CpuRegister.Rax] = 0; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + FileStream? stream; lock (_fdGate) { @@ -1996,6 +2013,17 @@ public static class KernelMemoryCompatExports return (int)OrbisGen2Result.ORBIS_GEN2_OK; } + if (KernelSocketCompatExports.TryReadSocketFd(ctx, fd, bufferAddress, requested, out var socketBytesRead, out var socketError)) + { + if (socketError != OrbisGen2Result.ORBIS_GEN2_OK) + { + return (int)socketError; + } + + ctx[CpuRegister.Rax] = socketBytesRead; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + FileStream? stream; lock (_fdGate) { @@ -2225,6 +2253,17 @@ public static class KernelMemoryCompatExports return (int)OrbisGen2Result.ORBIS_GEN2_OK; } + if (KernelSocketCompatExports.TryWriteSocketFd(ctx, fd, payload, out var socketError)) + { + if (socketError != OrbisGen2Result.ORBIS_GEN2_OK) + { + return (int)socketError; + } + + ctx[CpuRegister.Rax] = unchecked((ulong)requested); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + FileStream? stream; lock (_fdGate) { diff --git a/src/SharpEmu.Libs/Kernel/KernelSocketCompatExports.cs b/src/SharpEmu.Libs/Kernel/KernelSocketCompatExports.cs new file mode 100644 index 0000000..45ea32c --- /dev/null +++ b/src/SharpEmu.Libs/Kernel/KernelSocketCompatExports.cs @@ -0,0 +1,558 @@ +// Copyright (C) 2026 SharpEmu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +using System.Buffers.Binary; +using System.Net; +using System.Net.Sockets; +using System.Text; +using SharpEmu.HLE; + +namespace SharpEmu.Libs.Kernel; + +internal static class KernelSocketCompatExports +{ + private sealed class EmulatedSocketState + { + public TcpClient? Client; + public NetworkStream? Stream; + public IPAddress BoundAddress = IPAddress.Any; + public int BoundPort; + public bool Bound; + public bool Connected; + } + + private static readonly object Gate = new(); + private static readonly Dictionary Sockets = new(); + + internal static bool IsEmulatedSocketFd(int fd) + { + lock (Gate) + { + return Sockets.ContainsKey(fd); + } + } + + internal static bool TryCloseSocketFd(int fd) + { + lock (Gate) + { + if (!Sockets.Remove(fd, out var state)) + { + return false; + } + + DisposeEmulatedSocket(state); + return true; + } + } + + internal static bool TryReadSocketFd( + CpuContext ctx, + int fd, + ulong bufferAddress, + int requested, + out ulong bytesRead, + out OrbisGen2Result error) + { + bytesRead = 0; + error = OrbisGen2Result.ORBIS_GEN2_ERROR_NOT_FOUND; + + if (!TryGetEmulatedSocketState(fd, out var state) || + state is null || + !state.Connected || + state.Stream is null) + { + return false; + } + + var socketBuffer = GC.AllocateUninitializedArray(requested); + int socketRead; + try + { + socketRead = state.Stream.Read(socketBuffer, 0, requested); + } + catch (IOException) + { + return false; + } + + if (socketRead > 0 && !ctx.Memory.TryWrite(bufferAddress, socketBuffer.AsSpan(0, socketRead))) + { + error = OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + return true; + } + + bytesRead = unchecked((ulong)socketRead); + error = OrbisGen2Result.ORBIS_GEN2_OK; + return true; + } + + internal static bool TryWriteSocketFd( + CpuContext ctx, + int fd, + byte[] payload, + out OrbisGen2Result error) + { + error = OrbisGen2Result.ORBIS_GEN2_ERROR_NOT_FOUND; + + if (!TryGetEmulatedSocketState(fd, out var state) || + state is null || + !state.Connected || + state.Stream is null) + { + return false; + } + + try + { + state.Stream.Write(payload, 0, payload.Length); + state.Stream.Flush(); + } + catch (IOException) + { + return false; + } + + if (string.Equals(Environment.GetEnvironmentVariable("SHARPEMU_LOG_NET"), "1", StringComparison.Ordinal)) + { + Console.Out.Write(Encoding.UTF8.GetString(payload)); + Console.Out.Flush(); + } + + error = OrbisGen2Result.ORBIS_GEN2_OK; + return true; + } + + [SysAbiExport( + Nid = "TU-d9PfIHPM", + ExportName = "socket", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int Socket(CpuContext ctx) + { + var fd = KernelMemoryCompatExports.AllocateGuestFileDescriptor(); + lock (Gate) + { + Sockets[fd] = new EmulatedSocketState(); + } + + ctx[CpuRegister.Rax] = unchecked((ulong)fd); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + [SysAbiExport( + Nid = "XVL8So3QJUk", + ExportName = "connect", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int Connect(CpuContext ctx) + { + var fd = unchecked((int)ctx[CpuRegister.Rdi]); + var sockaddrAddress = ctx[CpuRegister.Rsi]; + var addrlen = unchecked((int)ctx[CpuRegister.Rdx]); + + if (!TryGetEmulatedSocketState(fd, out _)) + { + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + if (!TryParseGuestSockaddrIn(sockaddrAddress, addrlen, ctx, out var ipAddress, out var port)) + { + LogNet($"connect sockaddr parse failed: fd={fd} addr=0x{sockaddrAddress:X} len={addrlen}"); + RemoveEmulatedSocketFd(fd); + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + var redirectApplied = TryApplyNetRedirect(ref ipAddress); + if (redirectApplied) + { + LogNet($"connect redirect: fd={fd} ip={ipAddress} port={port}"); + } + + if (!IsGuestTcpOutboundAllowed(ipAddress, redirectApplied)) + { + LogNet($"connect denied by outbound policy: fd={fd} ip={ipAddress} port={port}"); + RemoveEmulatedSocketFd(fd); + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + if (!TryEstablishHostTcpConnection(ipAddress, port, out var client, out var stream)) + { + LogNet($"connect failed: fd={fd} ip={ipAddress} port={port}"); + RemoveEmulatedSocketFd(fd); + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + LogNet($"connect ok: fd={fd} ip={ipAddress} port={port}"); + + lock (Gate) + { + if (!Sockets.TryGetValue(fd, out var state) || state is null) + { + try { stream.Dispose(); } catch (IOException) { } + try { client.Dispose(); } catch (IOException) { } + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + DisposeEmulatedSocket(state); + state.Client = client; + state.Stream = stream; + state.Connected = true; + state.BoundAddress = ipAddress; + state.BoundPort = port; + state.Bound = true; + } + + ctx[CpuRegister.Rax] = 0; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + [SysAbiExport( + Nid = "KuOmgKoqCdY", + ExportName = "bind", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int Bind(CpuContext ctx) + { + var fd = unchecked((int)ctx[CpuRegister.Rdi]); + var sockaddrAddress = ctx[CpuRegister.Rsi]; + var addrlen = unchecked((int)ctx[CpuRegister.Rdx]); + + if (!TryGetEmulatedSocketState(fd, out var state) || state is null) + { + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + if (!TryParseGuestSockaddrIn(sockaddrAddress, addrlen, ctx, out var ipAddress, out var port)) + { + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + state.BoundAddress = ipAddress; + state.BoundPort = port; + state.Bound = true; + ctx[CpuRegister.Rax] = 0; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + [SysAbiExport( + Nid = "RenI1lL1WFk", + ExportName = "getsockname", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int Getsockname(CpuContext ctx) + { + var fd = unchecked((int)ctx[CpuRegister.Rdi]); + var sockaddrAddress = ctx[CpuRegister.Rsi]; + var addrlenAddress = ctx[CpuRegister.Rdx]; + + if (!TryGetEmulatedSocketState(fd, out var state) || state is null || !state.Bound) + { + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + Span addrlenBuffer = stackalloc byte[4]; + if (!ctx.Memory.TryRead(addrlenAddress, addrlenBuffer)) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + } + + var addrlen = BinaryPrimitives.ReadInt32LittleEndian(addrlenBuffer); + if (addrlen < 8) + { + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + Span sockaddr = stackalloc byte[16]; + sockaddr[0] = 16; + sockaddr[1] = 2; + BinaryPrimitives.WriteUInt16BigEndian(sockaddr.Slice(2, 2), (ushort)state.BoundPort); + var addressBytes = state.BoundAddress.GetAddressBytes(); + if (addressBytes.Length == 4) + { + addressBytes.CopyTo(sockaddr.Slice(4, 4)); + } + + var writeLength = Math.Min(addrlen, 16); + if (!ctx.Memory.TryWrite(sockaddrAddress, sockaddr.Slice(0, writeLength))) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + } + + BinaryPrimitives.WriteInt32LittleEndian(addrlenBuffer, writeLength); + if (!ctx.Memory.TryWrite(addrlenAddress, addrlenBuffer)) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + } + + ctx[CpuRegister.Rax] = 0; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + [SysAbiExport( + Nid = "9oiX1kyeedA", + ExportName = "bzero", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int Bzero(CpuContext ctx) + { + var address = ctx[CpuRegister.Rdi]; + var length = unchecked((int)ctx[CpuRegister.Rsi]); + if (length > 0 && address != 0) + { + var zeros = new byte[length]; + if (!ctx.Memory.TryWrite(address, zeros)) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + } + } + + ctx[CpuRegister.Rax] = 0; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + [SysAbiExport( + Nid = "4n51s0zEf0c", + ExportName = "inet_pton", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int InetPton(CpuContext ctx) + { + var af = unchecked((int)ctx[CpuRegister.Rdi]); + var srcAddress = ctx[CpuRegister.Rsi]; + var dstAddress = ctx[CpuRegister.Rdx]; + if (af != 2 || srcAddress == 0 || dstAddress == 0) + { + ctx[CpuRegister.Rax] = unchecked((ulong)0xFFFFFFFFFFFFFFFF); + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT; + } + + if (!TryReadCString(srcAddress, ctx, out var text) || + !TryParseIpv4Address(text, out var octets)) + { + ctx[CpuRegister.Rax] = 0; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + Span packed = stackalloc byte[4]; + packed[0] = octets[0]; + packed[1] = octets[1]; + packed[2] = octets[2]; + packed[3] = octets[3]; + if (!ctx.Memory.TryWrite(dstAddress, packed)) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + } + + ctx[CpuRegister.Rax] = 1; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + [SysAbiExport( + Nid = "jogUIsOV3-U", + ExportName = "htons", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int Htons(CpuContext ctx) + { + var value = unchecked((ushort)ctx[CpuRegister.Rdi]); + var swapped = (ushort)(((value & 0x00FF) << 8) | ((value >> 8) & 0x00FF)); + ctx[CpuRegister.Rax] = swapped; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + + private static bool TryGetEmulatedSocketState(int fd, out EmulatedSocketState? state) + { + lock (Gate) + { + return Sockets.TryGetValue(fd, out state); + } + } + + private static bool TryParseGuestSockaddrIn( + ulong address, + int addrlen, + CpuContext ctx, + out IPAddress ipAddress, + out int port) + { + ipAddress = IPAddress.None; + port = 0; + if (address == 0 || addrlen < 8) + { + return false; + } + + Span buffer = stackalloc byte[16]; + var readLength = Math.Min(addrlen, buffer.Length); + if (!ctx.Memory.TryRead(address, buffer.Slice(0, readLength))) + { + return false; + } + + if (buffer[1] != 2) + { + return false; + } + + port = BinaryPrimitives.ReadUInt16BigEndian(buffer.Slice(2, 2)); + ipAddress = new IPAddress(buffer.Slice(4, 4).ToArray()); + return true; + } + + private static void DisposeEmulatedSocket(EmulatedSocketState state) + { + try { state.Stream?.Dispose(); } catch (IOException) { } + try { state.Client?.Dispose(); } catch (IOException) { } + state.Stream = null; + state.Client = null; + state.Connected = false; + } + + private static void RemoveEmulatedSocketFd(int fd) + { + lock (Gate) + { + if (Sockets.Remove(fd, out var socketState)) + { + DisposeEmulatedSocket(socketState); + } + } + } + + private static void LogNet(string message) + { + if (string.Equals(Environment.GetEnvironmentVariable("SHARPEMU_LOG_NET"), "1", StringComparison.Ordinal)) + { + Console.Error.WriteLine($"[LOADER][DEBUG] {message}"); + } + } + + private static bool TryApplyNetRedirect(ref IPAddress ipAddress) + { + var redirect = Environment.GetEnvironmentVariable("SHARPEMU_NET_REDIRECT"); + if (string.IsNullOrWhiteSpace(redirect)) + { + return false; + } + + if (!IPAddress.TryParse(redirect.Trim(), out var redirectAddress)) + { + return false; + } + + ipAddress = redirectAddress; + return true; + } + + private static bool IsNetRedirectConfigured() + { + var redirect = Environment.GetEnvironmentVariable("SHARPEMU_NET_REDIRECT"); + return !string.IsNullOrWhiteSpace(redirect); + } + + private static bool IsGuestTcpOutboundAllowed(IPAddress ipAddress, bool redirectApplied) + { + return redirectApplied || IsNetRedirectConfigured() || IPAddress.IsLoopback(ipAddress); + } + + private static bool TryEstablishHostTcpConnection( + IPAddress ipAddress, + int port, + out TcpClient client, + out NetworkStream stream) + { + client = null!; + stream = null!; + if (!TryConnectTcpClient(ipAddress, port, out client)) + { + return false; + } + + stream = client.GetStream(); + return true; + } + + private static bool TryConnectTcpClient(IPAddress ipAddress, int port, out TcpClient client) + { + client = new TcpClient(); + try + { + var connectTask = client.ConnectAsync(ipAddress, port); + if (!connectTask.Wait(TimeSpan.FromMilliseconds(500))) + { + client.Dispose(); + client = null!; + return false; + } + + return true; + } + catch (SocketException) + { + client.Dispose(); + client = null!; + return false; + } + catch (IOException) + { + client.Dispose(); + client = null!; + return false; + } + } + + private static bool TryReadCString(ulong address, CpuContext ctx, out string text) + { + const int maxLength = 64; + var buffer = new byte[maxLength]; + var length = 0; + for (; length < maxLength; length++) + { + if (!ctx.Memory.TryRead(address + (ulong)length, buffer.AsSpan(length, 1))) + { + text = string.Empty; + return false; + } + + if (buffer[length] == 0) + { + break; + } + } + + text = Encoding.ASCII.GetString(buffer, 0, length); + return true; + } + + private static bool TryParseIpv4Address(string text, out byte[] octets) + { + octets = Array.Empty(); + var parts = text.Split('.', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + if (parts.Length != 4) + { + return false; + } + + var parsed = new byte[4]; + for (var i = 0; i < 4; i++) + { + if (!byte.TryParse(parts[i], out parsed[i])) + { + return false; + } + } + + octets = parsed; + return true; + } +} diff --git a/src/SharpEmu.Libs/Network/NetExports.cs b/src/SharpEmu.Libs/Network/NetExports.cs index 616a6db..65b2dc3 100644 --- a/src/SharpEmu.Libs/Network/NetExports.cs +++ b/src/SharpEmu.Libs/Network/NetExports.cs @@ -95,6 +95,54 @@ public static class NetExports return ctx.SetReturn(0); } + [SysAbiExport( + Nid = "9T2pDF2Ryqg", + ExportName = "sceNetHtonl", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceNet")] + public static int NetHtonl(CpuContext ctx) + { + var value = unchecked((uint)ctx[CpuRegister.Rdi]); + ctx[CpuRegister.Rax] = BinaryPrimitives.ReverseEndianness(value); + return ctx.SetReturn(0); + } + + [SysAbiExport( + Nid = "iWQWrwiSt8A", + ExportName = "sceNetHtons", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceNet")] + public static int NetHtons(CpuContext ctx) + { + var value = unchecked((ushort)ctx[CpuRegister.Rdi]); + ctx[CpuRegister.Rax] = BinaryPrimitives.ReverseEndianness(value); + return ctx.SetReturn(0); + } + + [SysAbiExport( + Nid = "pQGpHYopAIY", + ExportName = "sceNetNtohl", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceNet")] + public static int NetNtohl(CpuContext ctx) + { + var value = unchecked((uint)ctx[CpuRegister.Rdi]); + ctx[CpuRegister.Rax] = BinaryPrimitives.ReverseEndianness(value); + return ctx.SetReturn(0); + } + + [SysAbiExport( + Nid = "Rbvt+5Y2iEw", + ExportName = "sceNetNtohs", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceNet")] + public static int NetNtohs(CpuContext ctx) + { + var value = unchecked((ushort)ctx[CpuRegister.Rdi]); + ctx[CpuRegister.Rax] = BinaryPrimitives.ReverseEndianness(value); + return ctx.SetReturn(0); + } + [SysAbiExport( Nid = "C4UgDHHPvdw", ExportName = "sceNetResolverCreate",