From 3c5a3ae87eb8701351939e9cec03917f90b472a7 Mon Sep 17 00:00:00 2001 From: Maxim S Date: Fri, 28 Aug 2026 10:53:16 +0200 Subject: [PATCH] Add Drag & Drop captcha support with sync/async solvers, tests, examples, and documentation --- README.md | 21 +++ examples/async/async_drag_and_drop.py | 30 ++++ examples/async/async_drag_and_drop_base64.py | 42 +++++ examples/async/async_drag_and_drop_options.py | 36 +++++ examples/images/drag_drop_image1.jpeg | Bin 0 -> 7461 bytes examples/images/drag_drop_image2.jpeg | Bin 0 -> 9330 bytes examples/images/drag_drop_main.jpeg | Bin 0 -> 84827 bytes examples/sync/drag_and_drop.py | 26 +++ examples/sync/drag_and_drop_base64.py | 36 +++++ examples/sync/drag_and_drop_options.py | 32 ++++ setup.py | 2 +- tests/async/test_async_drag_and_drop.py | 152 ++++++++++++++++++ tests/sync/test_drag_and_drop.py | 151 +++++++++++++++++ twocaptcha/async_solver.py | 58 +++++++ twocaptcha/solver.py | 56 +++++++ 15 files changed, 641 insertions(+), 1 deletion(-) create mode 100644 examples/async/async_drag_and_drop.py create mode 100644 examples/async/async_drag_and_drop_base64.py create mode 100644 examples/async/async_drag_and_drop_options.py create mode 100644 examples/images/drag_drop_image1.jpeg create mode 100644 examples/images/drag_drop_image2.jpeg create mode 100644 examples/images/drag_drop_main.jpeg create mode 100644 examples/sync/drag_and_drop.py create mode 100644 examples/sync/drag_and_drop_base64.py create mode 100644 examples/sync/drag_and_drop_options.py create mode 100644 tests/async/test_async_drag_and_drop.py create mode 100644 tests/sync/test_drag_and_drop.py diff --git a/README.md b/README.md index 86fbb21..3321d1e 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ Examples of API requests for different captcha types are available on the [Pytho - [Alibaba](#alibaba) - [TSPD](#tspd) - [Basilisk](#basilisk) + - [Drag & Drop](#drag--drop) - [Other methods](#other-methods) - [send / get\_result](#send--get_result) - [balance](#balance) @@ -611,6 +612,26 @@ result = solver.basilisk(pageurl='https://example.com/login', ) ``` +### Drag & Drop + +[API method description.](https://2captcha.com/2captcha-api#drag-and-drop-captcha) + +Use this method to solve a captcha where one or more images need to be dragged onto specific positions on a background image. +`body` and each item in `images` can be a file path, a URL, or a Base64-encoded string. + +Returns the standard result dictionary `{'captchaId': 'TASK_ID', 'code': 'COORDINATES'}`. The coordinates string in +`result['code']` contains one entry per image from `images`, in the same order, separated by `|`. An image that +wasn't moved may be returned by the API as `null`. + +```python +result = solver.drag_and_drop( + body='path/to/background.jpg', + images=['path/to/image1.jpg', 'path/to/image2.jpg'], +) + +coordinates = result['code'] +``` + ## Other methods ### send / get_result diff --git a/examples/async/async_drag_and_drop.py b/examples/async/async_drag_and_drop.py new file mode 100644 index 0000000..af95f8f --- /dev/null +++ b/examples/async/async_drag_and_drop.py @@ -0,0 +1,30 @@ +import asyncio +import os +import sys + +sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))) + +from twocaptcha import AsyncTwoCaptcha + +# in this example we store the API key inside environment variables that can be set like: +# export APIKEY_2CAPTCHA=1abc234de56fab7c89012d34e56fa7b8 on Linux or macOS +# set APIKEY_2CAPTCHA=1abc234de56fab7c89012d34e56fa7b8 on Windows +# you can just set the API key directly to it's value like: +# api_key="1abc234de56fab7c89012d34e56fa7b8" + +api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY') + +solver = AsyncTwoCaptcha(api_key) + + +async def solve_captcha(): + try: + return await solver.drag_and_drop(body='../images/drag_drop_main.jpeg', + images=['../images/drag_drop_image1.jpeg', '../images/drag_drop_image2.jpeg']) + except Exception as e: + sys.exit(e) + + +if __name__ == '__main__': + result = asyncio.run(solve_captcha()) + sys.exit('result: ' + str(result)) diff --git a/examples/async/async_drag_and_drop_base64.py b/examples/async/async_drag_and_drop_base64.py new file mode 100644 index 0000000..9eb065c --- /dev/null +++ b/examples/async/async_drag_and_drop_base64.py @@ -0,0 +1,42 @@ +import asyncio +import os +import sys +from base64 import b64encode + +import aiofiles + +sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))) + +from twocaptcha import AsyncTwoCaptcha + +# in this example we store the API key inside environment variables that can be set like: +# export APIKEY_2CAPTCHA=1abc234de56fab7c89012d34e56fa7b8 on Linux or macOS +# set APIKEY_2CAPTCHA=1abc234de56fab7c89012d34e56fa7b8 on Windows +# you can just set the API key directly to it's value like: +# api_key="1abc234de56fab7c89012d34e56fa7b8" + +api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY') + +solver = AsyncTwoCaptcha(api_key) + + +async def solve_captcha(): + async with aiofiles.open('../images/drag_drop_main.jpeg', 'rb') as f: + body_b64 = b64encode(await f.read()).decode('utf-8') + + async with aiofiles.open('../images/drag_drop_image1.jpeg', 'rb') as f: + image1_b64 = b64encode(await f.read()).decode('utf-8') + + async with aiofiles.open('../images/drag_drop_image2.jpeg', 'rb') as f: + image2_b64 = b64encode(await f.read()).decode('utf-8') + + try: + return await solver.drag_and_drop(body=body_b64, + images=[image1_b64, image2_b64]) + except Exception as e: + sys.exit(e) + + +if __name__ == '__main__': + result = asyncio.run(solve_captcha()) + sys.exit('result: ' + str(result)) diff --git a/examples/async/async_drag_and_drop_options.py b/examples/async/async_drag_and_drop_options.py new file mode 100644 index 0000000..fc1368f --- /dev/null +++ b/examples/async/async_drag_and_drop_options.py @@ -0,0 +1,36 @@ +import asyncio +import os +import sys + +sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))) + +from twocaptcha import AsyncTwoCaptcha + +# in this example we store the API key inside environment variables that can be set like: +# export APIKEY_2CAPTCHA=1abc234de56fab7c89012d34e56fa7b8 on Linux or macOS +# set APIKEY_2CAPTCHA=1abc234de56fab7c89012d34e56fa7b8 on Windows +# you can just set the API key directly to it's value like: +# api_key="1abc234de56fab7c89012d34e56fa7b8" + +api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY') + +solver = AsyncTwoCaptcha(api_key, defaultTimeout=120, pollingInterval=10) + + +async def solve_captcha(): + try: + return await solver.drag_and_drop( + body='../images/drag_drop_main.jpeg', + images=['../images/drag_drop_image1.jpeg', '../images/drag_drop_image2.jpeg'], + hintText='Drag the images to proper position', + language=0, + lang='en', + header_acao=0, + ) + except Exception as e: + sys.exit(e) + + +if __name__ == '__main__': + result = asyncio.run(solve_captcha()) + sys.exit('result: ' + str(result)) diff --git a/examples/images/drag_drop_image1.jpeg b/examples/images/drag_drop_image1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f1bb604c6f250dc7f37e46b7f7218ccfd36aaadc GIT binary patch literal 7461 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 literal 0 HcmV?d00001 diff --git a/examples/images/drag_drop_main.jpeg b/examples/images/drag_drop_main.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..675ba0d15cdca8d5228a42a14f7c32c994a87791 GIT binary patch literal 84827 zcmeFYX;@R|_cj{qfYzVlgjzw;3Q83vRZ$!QX=`bW6r(8fkSZtw(i9OP60%#ZpioJH zLJCNtGAUDJ77R&c6aj;bG9@z07?O~2XYZWH{)hK`IoI`G=X1A!AtZb6XFY4U?|ZH2 z-|2@9QTvF1%NUHKBW4cHj|7o3-MdzUkm(efqyOV zuLb_Kz`qvw*8=}q;9m>;e_KF5fcXuxj(NF!0S!*e`D6KT(Wn``=v{EU_M#D zWa;`P`uZi0fe5kuzwYpVmI3Z_+427Q<$$06wW9ymde(#We6noW(q#r8*R$l4aPYl!{j%j>>|e3ro3jQN zLN@L=@axJ=-zGdNe!0r*pwoiU#cOXr-E3|>yi@vdN&l?q|87CI{(r6Le;4$>>(TdP z{HEitf?d}d^r;|OM)PiN=4~Nfc`2O=_Q5@}_U+f;qpUCqk z)C>!NA7E1J#q7{)JlcQ*Vu!I^Y@t!36nz6&Eid-sNOHTFnW zqOBe?J%UW?O7xftsxucKH1ae%K5`0e`#Ra)mRZ2)TlQ_f9usf^(P~g(gR6LE^14iq z;VX)tMkLLK5DAF&L;vSdMOe)gao}@#2<2d(IuBNbzR_b89c9+y4N>64s2#7FFv-?p zRGP4rU!=drwPE`=gX@O({&j-ub}!^OD$ASkD4z*9kP|zzNp2rU+aBIzB2WlXk26Mw zE;c`#E*;5)uU{lvaNk>wA6*poo1NBUNOl%)!?3$~!qN)Xp$aKe!T6Dv-ZHtgRhBiH zMLjzZQ9Ak{?f0c_3lj;{PoB%oD|>d)HsG%C8`jYD81KraRVVbAU3yFhjk)8q5b8 z3&cCdFC%+5>M^z3Bg2P7uCKrs6O=#nu%TonqS z^^{G`!!3@DxV6&CwX95_UjbzNtrfm7qZaO;NNilh=-zboB09n?2TWPsD;xVI@7eOS))Xv~FP? zZK9i5ab`tR1~J184KoeHT%~n$tUL9XmQT5p&a|9|tJAwM$3Gp%dyZ~5sI8{oEGj}z zIfPKJZsqFAUL@@JopIn;Y!Caw)&`n?gK)LCy0`8|wNI+~S<>3v9B-W-BY*vRUNl11 z{gxcP%jwSUH_XOsqy8>iX{VWuk!eG<=eH{;b7!uLy#xb4HuX*48GIJ@>&&I%jtYG5 zh|i<&kqjbgWN>FP@r_I?BH?g9hEBNkV}~S6n6+V?7hmVwEZ6vW!gkE8scoAxRwQJ9 z{fDPVqgnKkKX;h_`19Qr20wL=9&?GyRG;>Ca48Q@i8>{pV{JGoo}u`K5P{b}zHc@P zbL5?qMLCAsU+OWYashhO>)p)_6Bz+?|IHf>?P%SF(iT1DB+AFBeS3DkxVNq>xa}Hy zoAmo%M?7r=Z@CY774fvfw3FtBThfE~{?UwGrjwpzn%sVpu)pclf;g759dEM$4O8!- zRuM6CThgFAi!Jw0O?}RsjF=rw7?U;W7B$CQjo`y-;yLx91;dx(wRFm%n#RiPfE&`l z-ZP|$)rH^XrbmYGDI$`2EnqpTTY%HQ-WNkv^DE7&Cq*0i6|-= z$-IPUOOae(J;v6I3*zXvx>GT&dQ3{9Go*Gbdzu%2qTf`u;j68Y^zIQoW{usKYG}l} z_pbGj-R@uoVRc~QmFoKiYWa@zmiQ5~zwX7KoTy+M-=&T0{yM4UPtrD5aK-^}Mh=9O z_EEO$+@wXR3ok~CZcF9l8x@^&qLR8QB7IDcVas1xM>1jGsN(~)GkQ!R+AhD8^t!Sj zpPVE*{%q?>*U4NZU#J$aP!Vi*gWyOAG1O{yf59tG!3uo7@E>i#TB3GIh{m+yb7@gB zPFH!VYb3D$VAlq1)7_!cijoyCvQ9j0dRSQ76pnX#op6vYG+Dk>FkEAoeuv&RLXO{j zKLXvnV3}He3z#f{r1abmEMlGnvK3Uwx(VgSsS?K2m*ur~8*Rc}v>6TEL&`M`L!-@m zOGot>`zEIv`kz3>s30HfPiuG7U5Eaj8Hdzv3yxb7 zkW4+sOI5Qmf?rQ#Gr%ti`Og-~d3cHP1ER<1p54@#QjG&#LKvuK2eUP9G8}A)VES=Z z&!G>yVvkN#rvpbzfozw|ZEotBnMkNlUa}!!qE@jWxQC}j=JZb~50m#bG(M#nCG(7R zTy2mAqKUO(p-a5~W5X(GKx_0EN%d>?t_RbR2lu$$J)d#vI{H%iNtXD=VY5yV-%je1 zoT>XvJ@8oP5>vm;KjymRvsP={%eCmNyB-r57-|mnB@M)kI1G>3a{t6XwR#jLHxKcr z8o8kzZ0aCQ4h`583{gqtQeyP{B4NXC{7&4DDWd6~IsB`M3J!Ah8i=TUJMtgUm?xG~ z`W!<8R?&SZJ!tN`yt!?tjEt~7Pq{)n6Fy%zn2dQ2j) zS%Mz(x1X?NdHZ&&p!C}fJ=X$zZyp$easp7dlntLgIDOFMfg#)KEAuJ168rLVE^C)` zSN=+wMK~x^0hoZME}JVfmZP$St}WXjHMRKmIBDV$N9#>GpnDUJxn_ zLo1Q$aRoD$)#(P+-=9U_PS7IfCz4*r<1|y_PzzZ*4s*3LXPt6)+FjdoUitH+-F%E& z&$k*%AjV~bTI%Tug48kWB*^+m?reG{Oze}7YuFT>TsT8n)JrVaGT&Y^lt6W9${pxLi)N7=i&B{{&EnXp(h>A6nL*9ukZc92lS_k_|| zD1K?I30po!@QoAluUF_XIq{22dO>{*&TB*YN9fhX2ESWGyIVwezSd)k!p5-+?1<1g zN}mfMpehNL*1>s`sHr-?wwiEfZt9k#aT@NsHO$xiC+rlxXIf?o$FDQjn%>g zT|&dT&zj?MW6%h)9%BynVJyDZaFaMdu*sZ*_@%K~pbVgO7JAGLXf$~SyO2x?q)1_G zs*krGv&!PmPxHR~Ta5wcajFpB6fBg()qOFIJswou%ZVxgib|inyimg|1FjI^ws%YM zBya_~9@C3Dw%%-D*F@Q{R@A2ulr!zSdLMQ{UEhNU73fO2$qJltM67Ju*0A=Oqc07o zqn}>TaQw<;W5{GO*j%dO3^Yf!I@J#LP|#?4KIu)8JxDE}ESJ0dS-dWT)EV>caNXz^ z9$~xdX0hKnJ|+Lh=R0^TzQQ`{RO4riA-o}0_X*!W#;JE#oT`%tDc<4*NVZQxZbZ_F z=$<3Eq}IghwYSB?(p||D8e>zOdbxXPkM;2u?x45DykIELBv3<9OPi?7PFlU|XBdU5$}Q8~2Gm&*#HSWYljl1m1mQa562I9o!I$j!>*-OWK9P9{ez9^)tNbzS#O z30XP)n+@k`b$n9`$&96fROl~uf0cGU;5Ud;s` zlw0_I*hSG1u)!dk1zQe6mHzNvMieH(=9cc8!a>G6@jCn=+r^Hl6voDdnueOp%K1e1 zdBxqa#4o|+vqWBys@Ap3?kZs>mmAMmHl-~}mj;cRmge;h4tP$p_m;BXkUCqotcNZH zgwPTo;Yr>*5l+3dw?}*xHaV-)L7mnG0d#_T{q*HQj(d!S4D43N#p~;)U5@B6KFL1@ zZT_lZj7mOG6><3%R;=Tw8vLhy=pD3$V=hf8;jSK{q^zlP)BOd_{sBSQRO>gWSAeM< zyvVg(px&p_X-}H-u7uoKcze0O+0~m@%vOG*9{?scsAUMeit2 zYLX)EJG|k<&cZB1wB)QFgWF=--i+p0B|rrPo~)h`7YaqhZs>kyaKVeie*mJ^z(A7k zf}T8~$ACDPBYz9~VP&d7#RcrvWMF?=D3M{0-b+; z-`DNdn;tS?B;BO1&4wxWQGAyj&P~h^HfK2mKV=#P+_?FG1h=dz!yT|a?T|{CdOhDL z3c@PveyEI`gJ@e)cSdEeEzWjC1$qqjlx)CKkBQ#wvzxGv`lGD;UV$D{n#Dev71vrW z#|y2<8efYfD?P>xr1f((I<6v-ma&G@z`MJrOR#UH;&y2 zT=(c(lRsk6WGf#kVy@VF;ntN*_A;`lhu(h`E3f5w=}s;bJ}7Zq23%AQjXwy0-_3Bk z_=h80wv%6R9IF6tnt3QQeE0>jNO?{^z!Q&Pqji?j)i0}af5AHkDTi?GrL5Du+YpQ2 z6QO%*Cf@m{XECx5_qWz3VdVaWL&2we-h8Q8JsEwRT0Zm*R`L`6iJ+U-fhwyxvs-r} zIu%Kep}W2kZzTloTRqIIm28O6W4`MwqC&-GFA9mTGSD``D<&|LJ1o&mk`{7D-Xy=r zM&HEN0W(i~q*Ok+(jQfr+?Wl&;FPy4W1O$tKr7Mk{X~>>J!WYEk}I)I?ZfXKKQYq@ zhw3p(!2%XwqfhJ-OBW!eQ6WG1QEn<#j{$BWl)=P}F?S>&7}ltT zF!dCC{f5T_hWE%Z8pFF+SCXW10=BqP*1pD>r+Q{S6ZSJdR2 z?Y&cyj7>F35TtHw@H$*v;5H@jmstrqb|$_cfA@jWv?4pme4D5x4#Kr0+CW2i=Sl5P z#d#l8Jq)9s$;i|lm3qvH3~?*$bp{kwZ4g{92RR5-LiiFER}fL#eR~0P? zE!-y<=ZHaCp{S;L#>DQ~>%mqhKTiz!$*O4Q^8_(MO($q%f|*#NgAMZ#S<;5ptz~=1 zWE^40)k$W1YP%k-y~(NP2oNaRZfen@J#!LT< zE*|=3lVGN@X{^N@09ZZdpq4PVal!0|a^CH^bENGBZ0|-r#tJ9WV+JVN2?cyXk6ETt zw=7I5@2R7T=!Vi-i~hZ4DTEz}Sz>?Ws?qq}W{5;96upu{y;vNY=9Di~8WNW}{pKII zsK2_*9rQF&&>H8JIFfsQ!*BLDc19eSi_ z-~4;%!0r(aay|j1g?&46Pv;(uXkGRsa0sv%HM6@M&Xu?K2;!W%U(af4f|`vd7Ni3d68t{?IGy z;~5SB0=fn)BLpOa!tT5Ynt^0E?O)J1H`(ZC)JRHZ>PR4K2dhUBh~W zQ4=6jIHYrIn&VWIYIyIN7DL3AL^%W18u%X8V~(waB-KLJ@T?v)7=ywE2uI*s!9Kk1 zkrSsBnUr(%Z_(cg!(XwnRx8Z_^=BbokgQveQIEU5RbY)GlFldA29bv}kW7RfI$NYW z--{+}yeDgLob9Xm}p!abQKMkI2EiD#5!Zodu0w;vBzOy84;^1sYC`LkgNnRfDwM} zO#-nq+rAjdHLLCUL&Knm`^;H5H`H8ux=MQd+xRuEj_{!|Cn!_LsVYqp>32BPuD zN+RD*_t`sHn*5&6Y#bS0oo}}$A^req<7Xym{KJmu-gMb;QhSTK!L0>m&W=?iy4wLVkw6nDUYG4vOf5!wMt-n<5_aVy z;2U!^PXw8Ok^fSGi%rX(j4@|No{yKznfe8kq8`1h0RCaAOLiV<#VcqgJ$parIw=4>rwP3F%$rwZ3PH%BzyojH*u?X_JBQFbW9_Dsr`K;#m6xZy4--m8t2}b zZ4LK1tY!0wG(hW`mZCENlAkf?I1FvrH#=)qtTAJv&zqd}nBhI>kR10A;0W$0B1Sv7 z1^~*}Hp+UA5K0Sx=2CQ>ZKP%nw>bdkIeKwQ*|zOC1#C4i(LS9}a|!rw?=g(hxaMLc z;XuHsOea>(M0e6@d3AXt*@FFTQc0O;&Ib_-%C@a^sb*&o6~=plXN_$R3_1Tb_Rk z|KNNYWDkpepr{I1TGiF4gZ|vWQhO|0k5LT))O-$=2-!Tgu#RCS$7|UA1od|R8POho z=S5z-Dpw~LCAZW3%b?oY4jy-qJVDwrF9;_Y)-#WTTxTyQybqJ(2|q^T>{bD&`O)t# z3mXW1d_U#>ERgOhzczgfDEba%5NFUMi?VR6J-z8>!CUAFm-BJ!*fNT^r~cS%?==8l z;Ke1=*oE|fQF)HH@sL>^Y(c`Y!%B3piol)vP4c!=p`(PE)iqhRJ(F zNSmXxbEea-@*zaWjPfUQ<}#k&IWhY1X7p`oX>E!64PmJ`u%aUA_Ct( zS;@3SsL8-PTRf(8=V*j?=ImuO0&TomMoX3v>ao$Hwd#ya;v?Pn?X!v+yWRL#@4E^{ zt74Brles{@D@P_#f~V=Kw>q2m87l}Y+U&AJssCa7g^GPhkrs%qIwim_TOz+h$&2#g zlujx+y}&=_pt+GZHE3$+;ht!lp>(@D?<*&i#LB=>(Uf8>%8 zNMAUj<{omR^6QpuXbJ&fL08?LW<2yg#ZEI(B@=`Lgw{fUVYmKZQ?M{#tX`k*zxC{c72b4HAMbYt# zr8?>5F>XC>t@}H1K#z!`yc3;i+$giRNY4@tc-vzobcrSii^ljQa08wNJa&k>wt97d zUDIC9bFwB#89-_&+599xfScX8KW?4M>NsxKt0*<2-ff(h3Vyl+8S|mc3*LvggxO{gMCYyZ?<=p{CZFQGh~Y=r)fgu2{eyfxks+fDH7447 zZoAqZm2zZF@BGZOXyMDwfRHJdue_V{Xl%cvm#}b%0gPDQ6U`icf!jc$`L0MW@TB>; zN=*BY5*E)37T=T|EPnJp!{B_n!*l8RZ4J7!==71%vUHX6U_?CC!U3evxcYEPUv*T$ zwLzcLl5u+z%4PYbL=s-C@!fR&#IT@PZ6;h8?|zeQUYS4|y9(B2)zO?*2i7@eP99k8Q3k*vLBs1;i_%jsjcD2E9+RjTu(9>elK{b|Ok^EEWt zIsENm<{f|Oox&yn*wzR1CWr#l=q~*}>4f>QXU~u^z86RSdV;E`6i+|Wd>*Ib_{+@~ z@6kzlAC5(h$+OGL5rBK~VhM_$z4`#K z)@&}>C54idk&==&rSO2;ycv7q$YTJ~bCZ3r?+Hc`Bl2(Jl}%?O{{jfP|D;Xx1QC#a zJ{kSK@E#xc(%-0lfsh;mb2)T~2T+Df`J?*CWp?J$9}YAft_;f=@EjuHQltWH^|Uo) zdc|q5X}E2V=1}BaK{$FZ*qo!1@hxJ!Z@UX*VUDT;4ruWh*s(>zFQ_?y;jWoMNiPX3 z>RyId$Se@d%3^WI)<2ib9EKK>q1whu>DIUNex2i$Dg7fW_hm6r58^mOhErov0wo3{ z>dGcdY%It4I%E*wvK!@u7)e<84!Uyl0Z_*TVW3*_s(@g{n)jFG&oF-%SH{HStc{s5 zUs2qrDy|LEt`QA%bj>*sx<{>`sWK-hFGeL^>_uEtHG-!RKQ%RCHxY&je720R0rGFz zJ`P}3N(T-%TMV_}EZSt14M25ss(SX0>VFh4;E}o?Ykr$1YlOl`TT`WQIOkDb;1g*e zwm)V4An{mK8pUR|!vW2sXs0Np*oD)Sdm0rr|%7ZI zgzy?O006&l@U{p*`~oRuuD@9KK_OuUULZAk^QuQ@Q9CuE?&f*ULhPFq4`^WL^F)FO zD&!}UK;Yhk3LtSZSLFrRto3vrSrDf|lmn$QN;|T|a0H8vPuiYR( z!lQbpzRz5vn7F_5chj|y<`S<H&(5&Ob2>oSS7nw8r+woq~b%F~OvT?(AZp4}A&0 z%8Em8+QVXPfKM^ZC(1_e)mr4v4;3hgCWEP}@NNQIkbj`7nMl89Y8n_=Yp zzIlJvrH0?$4ty_t8Dj2aKkk4_H~B*ofaYyeGo5;@3r%5RuXTQUP~20(I6r$_lK_eP z<$;&2zaaQa0FT@N#9i{PoX~GKDnoM#x=$#&ds>`-zWNvdvOCteI#+=jNaQ}P&xJLV1k|{6fjcm#BW4E(`l^2e3J-FCd{6~e+==$v-n5^r zXKwwVQp!Js`*?BuWkBJZ_$a}!DbxHGScuwscTIB^t%MGbY|^91otUK#jiU%4F(^uHzJkt;H#+*9e_FzYye(1G69 zGBKUuI!}<)mp9FbzLG}&3P|Fr#dVIMxu7l=P8jEC^Iml^2;}gfC$x3uoWLX%!&i^VkBzIbX*?FsGDl5{ z;j1adz~4=oSRpJx-~D-YSBI+csjbnuKZ=U_|hNwFXMW8k?77B7Vn)}UX|k1mMo$a9ptoprw3 zqo0mTAk8=|5RpJdesY-n?G zETyK-QJt~;flH_!b2+zvA6Ujo86j*_B7n?$q%$Dfg*F_^XiOS*v--)mTvjOPYMKDo za3m}qo4x*yz67Z4j*QMN5(3R6AjIQ~^5CTnKIWW;v+gg)qS9w8Hw+TTyYJG~m*B8P z>Ly6md6O|+lS%C2ZC}%?Gh-V?uAH|L&`d(J!fgne&3ncbw6c7m)f!9S+ozr*VGl(**_S+heZxE;7$cH~)I!N%Ob{ptJzWj7`Zu0Ew%|XagpC z2s*2k`>Z{M>JvP($M)tGs9!=;CX(BN407bEz2Ze73P0=s4HS;;!D;N08B@aBkq+IG z;kLE4Cl`Zg3}H^cqcSLU2k65D8sI_B23T=EKapf--&$F%oE9l`(&?{ZrBO z;7t@+3rahw&?yDgvB>6)?i13_0+qr z9#PD@I#1dz4wOebn>pwfTo%{6imIY#6c;Dcq@~d}5 zyQ+(*AK#Uw6aaX_l@ofPv19K#%W=^z48L`5gQ7uu4 z&eaO`>$nGgIi{w5URn<0jRAK{;5v@IBSra^w(2n#`TnKq@}fXjndgU}cb0Qf;Yt}@ zIOO^eqSAUyZ!F5j!HryB@-CqI&uxp8J`Zp{?PW!KK*i4ie9Aj-z_owvWqnwNyxEbBEzcODJ4bgR;1?m73Snot@+4^XrE zH8+Dt8(pO%ZDJT9s=kruu@3iu3YC)Z4g5|Zvl8kURmJ5NpKd&FcQ9^$@|E@nSLpud z-V;96V;XEswiK~16)-N1zCyixsJikb6m9n0l18{)Hjs+9%J135Ie3+icBGIvJUwj@7Q~E<2O^pPV>~PY)5hj}24CnoxKk#i#X_0?YRN$uFbz8uD!I!v;S&esI zXsQ+bD4(byg&C?u2iulQsS&@r`LXrkI)ELP+(`Zi4}sB*`mMfbfk|KG>?_j#;zn#F2SO zamF4veL)h?Ho12|dnl;EW0C(k|5lX4tZW*4r7|9}B3SL7%R~l!&Yxk-fCAD<&CrQO zn&eq**(4Lk|AHapn=csD;WnPgnNDy=Dksxt-;#`CwC9U8PTlqev(BF`8#7GbD!Chyn1arNA(yuO@j(LCd`tw6=-y3HT>LK2JCGDDq z0&MQC$3T{Ycp`k(v*kj_vd!Fa4K%aQ^ym(zP7@|0%&mG#mfrSRKzQ>3Ru;EaA+%>ii+SB^kc`z%;Uc5BGaZ7^iGXV!NQpJb1WcMg(7Dk{G}85nyP7(J zyNwE?l;l##m$Ww>w5x#9zgG$Z5%77yBR2eE_l~EwSh(?~cJ#z;Vg-ypt4X9$VKI7~ zk^=nCzaAG&S$aK~@KR)QYhtoqC8MQC8&SWC1Tt1DutXV;Vy)#MwUIes=-`yn5NO+@ zQ1s$wxQEqM@=!jTYmGqkSBeyO*m_DUy1Ph9z3y#g1?!~O*j9;wl&eK z2?soYHsOGlB7V?hYvPNj$oK4+oDcn!da*&!Dx=1l0=EDgQ(q*fkxT%xp1o=YAd6Be z|7D(|^q_N;1G?dOoSW|M>{#MNZLMM15G~OYDwO3s6YDWoeQLl|5aX)_gWKo|(tGNr zcXg4p3&W6_q*ys*UQq=RJQ906ah9mNg9_|rj$IVyXKX3scJ>uQnO)UFqV_s$$0~sQ zUcvY$nXyf+a)?IpVzhHg2er&P$)<1eroYla)k!VC>V#Hbn#nK8FM`S;0N1Qo-#ZD_ ziGMdWZl|Bk);ad#EwkOPs1A6$dwB#@Fua`Xmq9g2suEN-2|xpvXNB$ya0wSn4=w0= z`lE^-4Yvd}tB~Be8>Z$Zu(N7jFw9ON-Lm|a^p+Je2NNvjHKB5V8c@#g}8mWXjgfK>~lzwsNqQGCLG3S6h#kTAg#Q& z4_!m|l~V5T_jwGp9DR{O=BP?Qy;KQ!EYt%kcxb5aL;zs=jZp97nz8)8a6U^m7L^DU zKH0n2=3?xopp>-j6!hb3V8S>zbsSRWX-^P)!yHI{3lmAcc{9>}4dqJYYQi3zW_%Od z4**_e+OW=&RuoWu2!Lk%F^juaS+OLu7l2F1RmBZPxw?{Q3bM8;?;-(A*gbIGPY@_K zO|hx8VT#d-o%P0eZb{QblpbTLq9|YQnNdiVyG87Bo26gien=ru<7ZmK(_2$k@&pQw zqEnTiSq~LzfY}}-KN{iQMGZ>J;|(4QGaQr!(sq zdyv$t60|OAq|gQA_(|RkQ!k3{MvYmccopQ&HKiL%{qO45PUVxb2Zo3f^Kj3-=`;{}Ad{mp>XwakhYy{dcO z>=yFno978()JyFe>@ejXo|rSuS%{x5t$Fh_)63q3d0dk?1gLh4B~t_<4e8Ztpve+j z#={5;ANg|;o6=7RHwF6JrSV>7-GT_7(_=2wyiFWXg%HhZDpMylrhdgV&WvC(Q;$it z{BW0!MStDCxX#CZoCroyvVY?c(B(9vtvBg^DE%1$cXRI*9$QqhPyoDTzU|ggzHRdN zzuFCi>;vdr+l;T?CB1V$qxW5y_fh$n1O~yI(%g@K-tX9nlXde}B@j;bfv7-zxf8H4;j;6eO z`!X*;JcSiARgrqkNA(brrcu@g3059z!LI!V1g1m&5nk2%nAQ{^=x6y*(O3WyYU*AR zR?v^qvYSSZ9P$kQ=_s9RbwvF79#HPHC^MEo<-S85ZfQ2Z4I9piUm%0hL10jdc6_4U z;Jsb3f01KO;I=GnTlpIfWFn9%!H8lhGRpy()P0Kt-#?0ORZHqU6x_Sk+_|_bqa9;$ zvvQCgL2G%j6VT>g>?eBeh=0dB4|6|*YOA`biTy%%*d>liog_`rDmM4-XH0)YDTP48 z3HH^kG2M|~&oJ-Z>pfE0b3Kw<%G<{3zXYE*_3mm~9ClN$op!()P@;0r#1hJg%T#uLXZzm)A%m=AqLtwGa|p5y{zJ9l(?I^=-mHb9 zD&MD`foVQZxAcGB6U=L-2oq0c0}DE%c~rK$POJ&$;}mDxH%;$}0r>Ji)I*dFltH&Q zthD5M7nSRVZ}>-d%J^;OB?I>6AW480$0+6Nh+Whe!llY?y5%w2wLy?w&N(0J%=gp=p@KLFXG-r1#IxnYM;me=>pD5m||(UBG(h6LC^6UFVLd0 zgP4)qyKb2Jh32Lj@q8%Bn}AqYJ%z7GyW!6g1&IhfR#`H0+Q->L8vGX+41rQDx4prw zZ(GC9C*195JpM%YYAjNyNN{}+;W~1Cb6R%Oz{AK?d@~&shZOE6;7%PlMe@5K(Vn+B z>l&-o#$%mVN0^dVQcZCK{E;|+fK&~i*q(TaHU4~|u=~L_(PLF{i%AJ_98@(^Gj*=- zNIrLQQ&j~rR>GJwOF}_J7RZC%)3~30x$OJHu6P0jys)@&MB~&Kr-k=Pyyeu3Eulw>UqfY6NY7TZI z^hIy29^JPxT?hC+ydQc@+um!X>P8OG8x4axF+;)6wG~JQMLM~-Zjgw3SvL1p4 zCJN-iTi9FA~sHC|A3>88_Li0C>BI4kS4s&~Y5yRHlfmiX^gROF% z5G8VnedvPr*k5U(k7f}L!Vlk;k{xBu>92NqEc1do2_h=cO`Y2#Je$~iq%KcGKscGE zj}zf1Dh+|h#({0Y$yJsgmK=`BoaX$*=R0iGHACSBtYGx9s*RiRh*#VmmL4~-J&`!x z-;DhOXlg*v2BV@MwE@rwT5&t`Wq42?nHsRB6}lofr|shjhG@`Y4^BJj)pWlM`gE#N z3nc{jU!sPANvEI9A%a%0heVKSg$vxffIpTA){(PbfQbQdACT-mzOxFtiykiKNxx?) zR{<$y@3rQT$u{i#2qM;%foltZuQ(E{Qmxq&SkpCnA|5(=q;;uz- zYm_TY*q zoY(Dheu$WzfTGie2VWYjH@A}y_ChbmNR-xU($PO%-;DTT)C&?o(a+P$aG6<8IACE=dFIyrFg(1H}TIi zH%XzE?QAM?tsSZ6W7P4&_cem}&m%z3wzy&EgP%{R=AiJ8SmNWbniw>Oem$Q(3yA0$ z6(>fpuHeVFg|pXfU`Jkw!_F745}GFLfy|>5YJKIsAvUqR?F9~4RaW5ZW-T+h=0@yP! z5Noo0_Nj2U@(*|;=nQ4fLsJLreo-e#&77sXSUVTjx8)2VnXL(#QTy<g0atPcKRHDC$LH%eXZUuR>~!;{cePj`eZvORTWjw_gX;Cevw)klC0;<_}7JBdhA z(F%TXJLABVhw?VfE@qPGzlo))G<@m?<$7vV*y*u2mFaoP6jm`XR@CBo;_az^6S}w* zs@oUdP!iGD*duf)twx3>`v~3M4dWW8e|*wwG)oH2&Mdr^&D7~J{ZEvKm0LD6QrJjJq1LI#LNW$U55lp~LUzzIvN2#RvIxkjuks*%1CH^~EW2xm*oeA$#)cqM455$6SO1z=BGj&Y^8 z-MYiXvDmc=%32D|!|wJIZ=dP)P1Ygy6Pgf&)f)GaoU(th^Y0Y+a(*>6uVyxFGr5_P zP0L0EbA~shn$iY>ZV|RX4j^4v$=mnbcbws!$wiNReTU&-50T~FBD^ZiA=S6~R{zPz zAmmgq1aLbQt#a)(JuLlg8?_$0rmcuPK6R7QUvAtyKT%l`yZXt;W*rGgTpqSpBkD$a zV-D?e8i_Ri@Ke~TtGeg9Dt;$CV0gft-nrqTP|D+UFI?O)fA*qv8e#6HBB_Z`P^MqkP$sf?fP)Yha5FbDQnuyL7B@o25xXr z0!%UmN{XdaDjXGyPEHnsY7%vcF4ymN~+4tdBlFX{-6$v1nno}+(?hgJ@ zzT@LZHQ$CwYdH4>mnmC4)a2P?*WA6l1J`>6vh9)jgeX?4oc{c={4&xdmWgW2hVP4K z`-aJD-GzBmu3FL4hl36#AvHo>^kcahG6q<8?>yk2&gjsJu-%b_p)P{H3wgD0y7)cx zNyIgWt%tA`&7cJTto#G89Dt9UJQx$WQLcs56(sK*HS-m_2R%+WsA3T3Rp9TogsI#G z*EkXS&h*HFD77GfvbF5^Q8NK(0xFYZbhkfVl9z~6REVpSR48?xK^6^>dW;@C9T?(25#}*@x=HC7uea(grh}`i)9O~}+{f?}uPGra~^bObJ z`jjZcF0}s(sl}bk&pIc2t+-ZUt5?6``bKo39v>TyW4OZv9fQZmn!0@;7=_(m8+CO4 zDp1%*g0Mmh$vjWE2%3kI`NuKH7IffvZ#&`B34~qFTzZP$B-bDn)A6aLQWB(SorKcE1vK=heg1=|OvDUgi& z%zGS{QXm%aBcQjz|KPHg%4ArmU{G~ykAdL3CpNX_-gOeWsT)KDg^%9`uVz@Nivu)X zNYMCFaO%1d!x-Elhy5#Bg6+@|%OGZnMe?`?1^g=RHTVQVwrm6xfu2%8WDmv}#$?do zPqCkAL*ZjUV8q^@3)UUY4l?y&8r7FXC0=LF;kF>xktVd8o2|P52Si|N`DP2^JO0&< zHs__-0aUoXpXTEa3<=gk=V$^z?f%fgAG-%&M(X6Z76pQ3ATG1%@ri zBNJusdK&B80C9_!yC+b)wC<+lck5ugktWz>qJO04B(H^7igZCQ;wg&6hOf5^=j=28 zAC9iWpQ``=D-8-ao5U@%va%DoB{OlO>~XWlHL@=*x01a=2qD>fU3+C`XXoPLTG_67 zx#ROY-`^kLJnp^D`!$~H-LW!AAn8Ai+I$jHwvl3g^<=FjVPO!mZwnMFk@0?F;YP|C zYqvNeE5$B!G4W1Ysh1|7$@0 zhQKGLC&BSt+LiVAzBqIt(p#WBYppMTbgiciMzj@AHxKI}ipMRoDw?_hUy7i-e&C#G zW`I?>HLnR@LygKqHornn<|wJC;#hIvFi=>LT0tWTLgu@mw6x4C@#Nk9{`Ehqu>YuX zQK#)Q`KV}!vl|1#6jvH_r!5ey*<3r#o1hh-1wzkLa8Nml5(=mtiU5XMK}J_(tOI7t z(U=)vT<9&4&YJblHLQ<4(mVwgum8cns^b6iVEWwd+eujgF%kwA-{ST2Bi5aOCXs87 zajH7c+U6r~%(lz|Uo{zZIM8a{0jVOL`Whxbg3^y-a{r@(S<=Ou0WY|?_&^iDFB*C` z@uc}U=4^ugW}WupDRFo%C^`1Tl%2?vQfe~iw}CqQ6(u-A^aC?>@i_vp9r5N@Q28s>Fz1eiQTm!`bA z+!j!!pFk&2pq2`!OxR_PsvT_r3x6wl{bB}vv|JlY{EgTJe%18pF!`+~DW6dG@?|za zO&F%c`?04JV}R*B3LusYcjAbTQ$*8tbkwZ*#C^b4hMje?Shi$pj~!^vbXY#DUz-_f}vTchP2SUZK(X1{Np zNJ-TOPX8|O01GIdZ{=DN{^s*~o)>)rA>D>xU_Ukm?*SFe*lf|5{2x_i;d`>j6glKY zN=w>>DXk&_z{B$V&~l0AZ7TajK(k&HX7mZ3s(2Ov_e1#|wUcVg!GM*;bW}2sL9P*~ zs4d`@C<;Z@T=HijpC9a^>nfaMFMti$P+tX|A%5<|f%lu|PYtVO`1Gn}0$)KfCT zG#lyqH2{3o&exKl1qe#xwdr|S56Y8r2(b_jK;9#$hZ@ZvT|h04QYKWtuu{0T-gMy< z{Ekbs2EPG%Y4up}g1TtHXDn;mWNmtkfp6LznfC!7u$ z@MTkV;BZr*l16}sdVkNRL!{%!1dj%(N-M{lUBb$^Y#k@Z9q7)O9(rN4Q*H}3HSAcU4NtgDMP z7Dz<8{SU`Cbd&o8@LugZ2$|utb_{?dlPHEM#P$nYGb1EB|M?cuo|TUEF?4S7Y~8Of zTG|izJ=2ivqjXtrN67kMpx!0(z|x5oL`TEDlYQ!c7`n^{X`tf(n5Yqb)yXY@q!0}dh|?DPFklWQIGfYV|y`Lu#@&}0YF`L zIz!g>$w0SnE^lB)Ba{RQT^&uKC00iWw=O`QZm)UTU{lowypvg3!o!D3T`WqlBuF|a zL+tDjS+St0bsz^I6=5RBE_wlAQ2S|MDaxt=O?;I+rdZR*UvHpibPhYjh>O8w#V_oM zvjP>3`%3(dCIFN|GT_>G-UXN(H#v;$5pwh-YpW%TXuE;B>Hx@~57yIjoID9USL!Aq zHI(6kmd!iyfyE$z1J(qpfnxD`0W@)uXrCQDBxI3QS+Mtp0;Oo3=aJP0UyP6hmIfiS z#O0}q-gvJzfde$g#xQMlS+Ox_(3(HfAO}o3PT(@;izE({k1KP74EJ4D>KZQgaqJ&R zax0+AW(Wm+z&06FWPb_=I)Fa0h}3UePOVM;*&<9%;YqUEhZ^C}?H+r++YZ#`^TI0W!55z7#)__0Gy+>jD& zhRnk^y?+3>JOV_@1e3m^4jnGw|HBcloP~nu2}foJ*Tb0UkwRJYaNb58s$TIqh>Gwf`KK z401ts2Mc!=CeGdr1{Pw0e+nRzPOpX$uKEKa3=H!x2$Q1j>4N8r##YK;1Hkv^Zr%Z0 zw)>EA0Fo)lI&pt4ez6Z&S^I@we*cf^aA&EjH?qhHAasw(`;oP<=q9tQzlNH&`Ks>T z0X#tG0z;ZUVF8u;|CZmipk3Z0)JD`fz?L0O{88c|xOMP=4tle)2_91d6T2?BiJVwp z;;VSfUriyvcni!$$WdVmVz?Tz;Md+#5h_BFa%yKJ$%DJZ8Q{!DTUkx9*o!gB#Jb7o z9gjg`NnuOYxg8$5_TvAW@RZ>!7~};^5X&^cWD#@*`G?o!+KCmHGzO|$3fU{aC^8Qk zn<2iOImS?Nb-vxQY8HF}kXjSK!23JNVq~OuzlWXeNyUX6CMOd2c!eVWjy&0Z4y*}~ zmZRgvMJNzo(!MRM1cbeqxE9z$_S?qT)4?gX{Sp*m02EAS|DT(hL5}`O=13l-3PPCy zqN)^Mb%ErIy&wEX#RPyyyS6|*9Z-Ypf{FJDp1A20ex8T5q0j}&?h1J_er5zvK`eHG zI7plTryQq(4>{TzJ5Oda@I~Q|h!v91h5x9EkE{-ZG=4-Hx39I6st>ofQS5{x{Xa-? z_rP-Ksi=~0KuIbe&_O)cjQaSiQN_UG2aFQUaiJGVVWkLJ4Mok{nr_~uTDGge{0V3b zL|bN2$2Q)ZJn=_uIV*5(x!sgMd{{skvZl2qlqIjT_R7iL^ve=bQ870Sw&yvE3a;YMxh%W z5L@ua8Ukd=K7_=*5>S%PZ8bxI+zlQ~JZrN_I7e;e18~^aOMjdo2f^ni$lC@n_JsgZ zbvUPf=Y8Lr`YA1humhl(?u+82!}7kqM5JW8aZ6?Z7cHPQtKPTH>aRai>bMT9YDDX` za~S3D<#9m!2g;qanbE3Ay9DS?qjiGDGH{*%Y7{CA$Q6Sreg9EibMxN6Vu9%E+ehUB z^bvpibX&*M`ipj@bxmYDwr9PESWNYIvO-bb7Z;;UBfSXpV9M`7Fd+X#K3JQqq z07O`XvmcVcZE$l6*^XeHh$5470HdKG5RHO6=od;|cbi=U7_Q<=j#XU* zS4R?{ZLM5Hsd|8;B9amDkNnNqJswzR>3$c{A@*ON@&H4tAQ{mS&ngYwiK3+zYzNX-GZT}kybz5A=Sfo-XY z!==#M^8{#55KH^Gbn7!m-zPEO>ng-bZVz9vQ=Mx@!k#RJJU&d%qYCmPn4B5m8Je$F zwHP!sCEoho<@jQ=xqUdZv&qGTTZ#xV8biK|ad-Cxr}&(EwrDrIjTl1}+M6-;`|bA7 zD1W;=d%@3N2npDQx4aHBH)aH|+UG=(pTdh@k>yIGhd@dTExtTwr5|ZtG)FkaUeLdk zc_IDes|)MEIm(OW1~~3w;2)kxjR#JhX(3-2&iF(G(of?KQv%rAklpH z5>}O>=yMTNd$!oIAHKgF7b>b$?8c9-OxuH^XU$)g@~M2_m{R=r(MpW5()fKbv^L1_ zU;1vT{iF_UjB%t_@1pX1;hnh8CXndb|ER7L615L@#)n07oogIHB34{I&3~KgUuGM? zWJE0jEnAtmJa4j_@8Bd~Rz~075b!IdA^9%Fuu7@A{`ifwCY z6mLOR1kLJ>B6R`r6;dkLSQf?nIm>Y>ty989Y03!4Hbi8mE2J@0=+j%w7fR_;Jq6g@@nM$a!aR{x=KlK$=G_e)mp+ji-!ymt#js~I=1I!0 z?FtqXAoa|m))pD#i@d8LXfB}tt$YymKo0rYxzDxs`0Eq3_15@;RdsAZ7P97`?~#_8X6zw$I(>X1L}K~50`kPcepfM1w9O`hq2 z0i9ol4p$}1hCioF-)Q)S8H%L-eza*(LDY<66$(Axj^P=9eade5a`R#Qn(2$`$<)y^ z1Eb&Sz2Ko&-sVF?r}We&<6a9qgWYoBiTyWK#+gS`*J|XJGyal<^YPH`MS2sX{sIxRT#d%u4^yK@sKWZ|Pd@mpIJxn(VBUvBNHsm25yB>G5<5(TT>%H3S`b#mU1?;dlk z993}J)uh+bDdwF4JLyYz)cFGdB7_^Hx6%n{iW7Z=_rB&pew_kywNbkI%zBnYWu;;=D6TYj{spG1r&HqyW(AjW>UWi=N}@oPJd~Wb1L{%g8R1Y2-}G)2Xt& z^Cvz}nZS3j^M1*5F1t99=ueNITdy6HSCUas+^&9Y9Lu7`f;8s)uBYU&V~{-rz${Ht zbPgCQ{1k<~c}+=;ToAvwwO4Un7+%B(~?&yhw{dP;1uy5fi-KO3BqFEhyW8?$yTVW?FM<_p>ls&K@PdF;`3VU52nY zCJ=I-HK&={Ff`|e)2#KayqJe!v@7ne;^k3L~5Yd!Jua@ntlJbX52`SZwT&IurHsgcui=rnPlC-R{V? z22B^)`GiAk97%lWNMMp9HT*i+wD2pXjCc&=Js{k3PQ5p2(7p970bkz_aRvu%&A&HI zg{=J`{t8_CYpkB`*v8o~MY#hwlf=$s4_hZwehgmuWYeW7iw`-k&JORz?07pW4SOyV zWSWJVnu%|V?rfnZD~6ADsWQu=-6zWYuZK~15aP@AAP$v)l;)$yEwv5S#WP%{R_aZ?Ijnq``?Nb-z&M7G1DxgwS-exS zwJnng2O=cS-8|oYtF53K@l4R@ic=g@2fz63%RY4+;(j;~6Y>?I!qZVGDwMZcQgYr& zO~xoCPR2UKCx4wKVJB=#23@7C_d3E7(pKJ1Dr#e5^ZZ}s)|AYpkBdkA0;bnJ&XwuM28kmfTYyK4>T zssN)}1%svrqxTf&Q(eu=oix-Uoq}%f)J?X25~6T0rodtc)gClnB}KRWTU6T)HT6C4 z;U9@PfXq}#;Yz%|oE3&iB2nb)YMSwOc?Fwqj9&1w9XffaKK<1gt1M(R+>eMdZF=~K zA^I1o>oM41@FyGsauZ#mEIjG#aZDaOQu$ zMDs;-S%n84u$(SYY#T%e7|Mk>@%^>~Ad9gg!mimNCPqgfL zGRH*}aFGz1DTBMpk3eEKq9@g2?hmky)s!%%w~Yq#}@Ec41^IX3x-L|IIvugz1G3gw5^HoZcJvuJ*_CD zqT%&HGohgf#rt&f)J*mYhC*R@_Gm?S{Ou!EbL~|&%ydTa3vbcd{<-^X%!;sPm58yZ zxk1KGQdM`qaYlb zl;x@dSA6l9=GAjMJG;({y#jpbsKuB#U_l0h!==@lT}*c0=(26uIQ*=yJ8bg_!7VV~ z8GNJ$-b#B(=<1?e!`Brd+N21zz5xod1>Pt}%K~MlPVD;0)T$}`t$xxfhLzbv`!SzY zanZXh6?Oc~a$h*|F>HA#EdXn*S}jjIRH>$1N|dd;YiD4&p7BjFtW5iri&ig;dSCIW zqsxJg0?`!i*f#V<)#FrZc7DTcmJ}zj7K_SQvJ+kEP-id!w=leL&4eb8{xLN{n4Q2OQD*c2aDFa478^U{u zEvuN&zpDM#j91xSDcn^E4hY-H!aE=t@VP!HX4vi%?uF9Vvx~;-_w~5DJj{@#`0ya( zS5@fn!mO6VO2uEG+I=Mkq*|+##VD?ymyA2N-?>>6SR=iCQ^FflN~_@h>+BqW7)er# zJ>qono^YI2$VUM&6H(T8@AzT-+$A;9tnwGJQ^Tl^r{&(^DErNFWB~VYY)&~LSZ~Hg zu3A$}w?eQvgw<~8zMA26-{Gm}v8`LfiqJw*Aigg~sVkts=y|py#xCnDrgXQ?*hC{~ zD){?=A#L*y`Q2wMB5hRMFMd^SD+xBWHhg;AHpE}q*f3$#U2@lcZbL-nA!$)?|K*Aj z|G&(u1jmELZvT;J=k+OXZdn(xfN$3?-o78Da%ag0wcHp6*wp~TX3eG9^j<^p8)gD% ze}UHU)<~JycV|qR%pdvP)qZ^z9&p~?g*^zuFpI?>Bp<)5Bsc44eAc_n|JOPJE7S3X zyYyc4dk+Za2WWT>#xTDi3>6sfZ>+ae^$lVkcPTqTNz?brE<{_kBu^O4-05?4HGgqz z`|CP+5lY}0n5vs87tMb+!I4EsFUL?3lN2SgYtZG-98G-!g=6rb569^n@CU2{2E=G~ zNIrZ7J$lQj!lB;drIEPPKf|69H*kvQlZfjJbG`Se|C`2T6U6cADujC5l|e4ys71kZ zZ%3_lWwr(1`c!G#A9f({AhF~7F|IvZ{4-`cb*aGwj82-gz+G@lD^PO@^fb*oCssL^ zKy*HaInS(vyIvHU&n|2!33+MXRyX{%&_@@l%O&xgGhXu-eemexU5m1EWZ+~e@)=U| z^5)UNbdksOz#B#re#vLH=B2+B_}vDbg&X#7J_8qLfk=K8g!HH*qRM+3FPK^Mv^Lai z<_l@n>6*J3zV%6$?H$S42s;i3@BuH}uQu*_JWts&iUD4=u<)8b3^+L@!8y8g zKF9rt=i8>4%vl$N)3MqwEjE?6V2Ba-8qbu4RQvtnQ&u-uo?r|v&}Ux_#Y!k17TsZa zH>5i}1rS1+?#hqjKN1^nTrcxAajjY|djo5X(wvF;JRHD1l+f3&?%T&)>E1}M=iM`x^MSpa5vBP#!Hrl<5Y#tEETwW z4A(bMU|9u2x1WSFGjvtl%QXD@czm_UUc6w<7k_CfkSG96#+zc;J4*_s&DBJ8G)UUz zp>vj^LvW#kUOz;xRR2Kb+QdH5vm4%aBeScs?si<1SNg7yUZ&CR-uT}zja5lM59fu( zEAF7wEZ@p&wd*mHrnRR}a=)8Iqus3Xi^`CX8t|;W%{bI`hqE^QbjV*9(fkPe;A*OEwa3kK(FbB-XIyB?W)^NR?D`qcXPfY>T+2nD`H5b_T5#23aQ8%) z_S-V8)UsNXcyk4+#!8$6;cHG#M;b3Tli5dGO-EU_FoH!akfx^A7*|GKyT_k6%5SuM zZaa><>Wdf-#|a0eMY5p;vcvKH*sPU4EhA(jRB| z6yJTfYCXbn|3}qb0VcThwu!5Mnp4FKb;g0V4HK=N<-C~?vumBbq;_b^u$sg!F6GZ*fX)mn8%Z6&HK| zql&fQno)cJil}Y%IWjny+MO5h>W$B5YEl5zsD^t@aCOT$A7u)5R`TOBbGp|Is#a%| zWbmw`eHn7<>88z@nyxz)%M(_T+?8h1&Ux`3dW`MK?+ay5j+>VuR0{}bcbn`Vl4WjP zR{nxxih-RgxV5=jxZ1o+uNYTf)Ia(?fq&L^{a(!)g&y zJ_UT0D5qu!gB(ua#6#L|Dv6U+$K6^)@eutKwMo&FX&?({+&U7AF||@@x2AB0RDBT{ zbNl;}$|v-^WDmqh5}wOkGQ;CUV2*}lM#H`cXxNvswI61`azm& zKUj&O5wZ4lFncqaV%dkSi}Q#M@~bFU65N*cw+nk;8l-vle1?O5v0&4Jby<{mzY9!* zuAo8K0hgfo`$Tc)B~8%()a3p6R{quZz{TbUGCXCr-DUXC>3hPrE|H2b6icxloFs9Y zLK>Sl|2Lh+6YTAoFQVinabEcMyxxBU;J*7xstGbE09_HXEj3GSaGXsUQtVZ(!xs2J z9&Y5cCW{KV%H+j5rY(MyJh}KdUV^-aZ!5xIU#4W0|C<)R5?vh{42^QuK5{*07TWA* z{d2nZ53vCKf$rAWxqFnMr&_Ph|1NN^vn9tOuIm)cesA(#Q-ZnLR>wW!!w+NR_-~Ex zfMjrC?&fBY$#EIDGn0QBSnG<+Ib3*aYwMX5nwohvn;q|m#3_JyrdBMTg0CVk;S?a@ znDXkhVM>Oxi)th_cj?4XHQIXkD(hQhYX1rkiAt&)%m&;rV5nPr(AHSk;*TvuY&z1> zjQeREN%FO)G&9yznbnQUW(qI1(Emh?YEH|TL%KXSeHJmA@InsVHisO<>POuLte*MR zij=>Ml}op@f_z9X>cGrx4}qIj7Q>{swLwHlEXPj`I!YSw*$M=-2Ow z8oH+6|9-Fu|JM8A^7<*?@(#+bGD<6aZYzFP-H{q)KQxZ4k}T4@@_=b?;VezR_sQ$) ziB727ibBiz)mdhK(sLOvRpEXWKj01rf1`ppzCPsR+bbG*EBH?`XB-U)zmUO(4?7l> z%^qpikq_>hzSk9;^y7FiK*|v+B6fKrhl$dNIb(d>CyIaxp?B}_Y><#xx@mCebPbMo zx$@dIc3L3%6{EGl*=O6?-`a&8h7sff*ESX;II#=+xba{*!@UsZgfaMP-2knAS!vcU zFK6(tx&!?=y#Cu@+&B7m@w;GSLSpaqwX>az(%3(nW1)1zYbL4u5>?OZRQnBP`+xOb z=hE5c;R3D@DNE;S6~hE9s9iizY%q}JdHbk$4w`b4u`)BnH+$}^WDqw7v1>Kdi_&hH zF4M;xEY><;u{P5PgM`{)?z?&M@lTdMb+@rwRC5x0Nsyj|*6zACc(EAH%h5Hy8c z+|YK5ap8B9r`4h8pgSYg+TwnFTfnu2x|Y#pSa^Ax2$Ju>K1QmhC#^T$zHsYyM)kMd zwUnKbjq|PR`}x@Uhb4_JRW66I9os>ilNHk2{Vj4UT!u9*^E(MIea_SUxNQ35b^LvG z7vq$YA54|(6pGo-<8q=;Pso`(a&afQs8L%2SQg%1rQW6O*3tJ8Z;^bFH2nQ6!FbRq zT>!ZFX*CUdKQX8$cFNc~=Em2~z_IV3FC=f`eMF*Wyo}qGt)uzb+VI+1$vJ0-vYe~Y z&L#p1$ewrBcO|PU9e(LeT`ZOog4M^IS10r0^*Fu^9BPnC10yU$HvTXLmK+M5rjzTX z>4o(s6(tTX{%Ct5iP2vK&-aXPsqx+ZN}Db$Ln6%5w9WLA~d8oMt3)wmE$97Rg4$Hq_xb!en}z!nmL? zSo!g1T{vd~M~2VuLs_El(IxBkrA85L>+nvZQBi>--(dIBf;VjkM)&Wj8y(h2wTMu+ zPTAZqFDnD$z+5Q2-^}$m3iQvEg%Wa=t48ne-lcxvBh2XIGIid*vQG<0SKkv*-bxjoLgBSGjo(dY zJ0X8|?|LLknaB+6Y59Crxbm#e^MMHVmBK?3J0VRPb$xT1!kPKFT-@esAo^u)m*O+> zz91|qQ{^7Z)p<@R_x;XgOt5Eux!03##dy8GyrBfGG3THvr+U$H_>9Hn1GfwPlk}~| zM9;Z-<@}@9(Z54*298&2Hxi$=ElrQ88K0I@P(7JU&DxSs&VRZwUdkzKY5DO8AG102 z+aL*-Ln)`d-I{(N7$)!|c|ba5wW+=6#3Z@LABiz*Ud8=JDMkrV!$reS4da8KgzPPMswbb`{` zx3sk|r(*$Io58)A+4&RgfYZW*(*hO?R)Tw=yRh-q)Rj>4pW-ztO!r9e)|uH((~iebKHVcGb!%c?%=6dOuc{u$%5+?c8-zV2 zi4hi;+L^ZeyXH-Mc#`1kr+Et{?XxS!rN}-W`!uZ9!T{A^6{PjU&m@XCiU7f(fNA44 zQeK?IXW~*GdSsGXZZyDeKs4ALK)n45nqTXb?p!wKP2lIuUC-gMuM%^TSP$S{=q)Nk z*uOH>R@z*uOSO97%Q{$F#TcJZ%{p&``Mvz=LvMP7MyJg=EHvmTA+D!s6~@pa?z~^@ z#Do^*vn<=Y{55dscX^PJl|n&+EG^@E^T-e1K|OA_2r!kg6L_FhU$v@0i#WCP^bD<2 z_53TBF__ET>UDbewNft5=OVYI*5ZCB(K=et0k$HOZDzB+;@Pd~ZJr!o>u_eN)%!`Y ziw_6XpEVm;Rez}n;Tqdhtd5hm_&CgC0iOlrI=>n(7KpN&7HkCfgGJ~BeWx*2$8~Ri z*;uvI!fI5eGWjvaR$^`-n}4pM1dNMsbGk_0?zt^64QOQ-qz`U}Pvsm<)%%O@ts$4( zkM=4$M!Aq4gbHgEU=Tk0ApKirk^YtFLM^?Jv5z(6Yn<2E^D9}3@mee;!YO(P(ToAE zP<;EYD)Ak{F@~gc!+XNT-Y9v`MMq!li|izWVEhz+P&)M^(Ba;`*|)S4N8q}SEcyQE zZiC#4uma!~fW-(hos-3*KVCOAQ1!V+X1}YirU^Zi?XHdv4V6|DIwKl}lK2QG2f?Q? zl&xb~Y)Y-I(Uw;|H}`KmtmQm9mKi}lI>-p-sNbf5sv-FjMye*5-F#nMyB zebWh7>B6!+EwxFuEp8q8xe=q;Tc0ENXcn7<&VJyd!HFm0n8DN9KPxVbGEs}ymAeKH zj|X*sRzL!HRCFJMNY;c_RRbxIo2#|nXR9w;WWf;!oyqQ|Rkp~-Hyc8aJJ}xh%0J#Vzpi@< z4Oa9;xTd^p^5~%KUBA{UMSNj9A-d$rdrW^Ad|}w#WKQ18#1Ffz^TU3b7Lbo6+spjd z({W{n#=-r}*AkTGf|&{UXW;*4h{PUt*e#@bPJh06?!+_8=a+TX80Gw3&H=b19Mh(U zqCxofT#TeHv!f%}_V#U*HD-PjpQA+O(5gCG66Y}gFX!(F8{f$#ZT#C{2JvG8Nupen zEnR8SE~M*~NY^KCwG?W6)k&@Vv@cAr(lDV+6b=hEJv;3erT;V#*}x*J+d z=g#K$=-%eWuY^<4%#x77TFM}t|0Ta?`fgY7b-;2CBuj`+B7Iu zEpo(Ht<}g2ko-(-{DOw?@TD2IxaDu28H{iGu*C=qn~u2himwknCu7b(sh*R%(B<+K z-BS1wVeyF9h>(*AH?&P-Y=Eih6+b#AVYN2%A&>Bu3K{FQq1Chl57G5 zGM`1UmmKrBSuK-oG1HPzfnV_}8lBRSHhlF|9uGbq1G|m*?3vC1JHQ-!|5W$9mI~*G z=GA{4?>x|a8q!8xpA5csCa(!)1jACkWU0q3yL}?b;q1movW3E(T}}Y5m9AK1kC*AH z<@eklNrBxAKmc;uK`ZREh)`3Ca3!iV;bpL?S6f?@v7Nkil>@vI$ml}Znp@ZDxW0g# z4F`jJX8ssqHN9T3>viY(e0O1tOB`Y-eqXBjw`hV|(LiRi*K6LQmm|_WLyo=bwDqh9 z#<+=<4DmJ{bdh?MJQt?#D83>nV-tRPS>HI_o`a9`w789toDE3KGfcE%AUf=6pXF#p z>e*?`$7Rgho+(s)4^j9d1Z{@hL7Gohh%4RSPW$YxD2sA5m5G={i&% zGTlILJ`EPB#|y5oS8sD=?&6tGhX@~W!p2@20=4y0NZf3h?5{=H_v4QeUi960R7$U~ z@^qo8!_za=K!f@`UY(d~MeInS=Zpq7xgVaIbm9X`{cl@cz`JrKWBjKFG0E-V5@S6a{+PZ zv)U=rp9I;H`ueY(A6WTzPVpKqsY*++Wk1d12YOw`3chuO0x|N${HiXT-^PwTH^8&OW|jd{ z?e~Hm;l89Z%0B97cOwt5taw91z%)T(NG1I6ObnYJ+J#RQ$Pv$tNP7|BcBAFcv}x^C zRbbllk6(hR*Oz?=plGFQ1fgG9OoD`rg3WqecqT`Z^qgswTHHuzua*&?K3&8EDrI}~ zEXj8dt=Bey!?FwtMk*W}{i=u1?-$fh;U=AR(%s8`bGq<R6L2j3s@8PI ze4_PP1MPQ6&_8H}MG(B5`NSZk_NFP#Rno0N-+~Ogakhl5`x|p2E>){{+3r3vbDyjK zy=x-OC$+5JfeLw2-_`2Y%BM?U!!=PRo{6Jsl*SGvzy0R zpl-NRHC2io->~gL$Nw-);Ge(rKInkhaN$gPLg-n7u@X#srU5f)UDIce%@|J> z!MXmHWNt}~)h~XY;ql+&zKAUlzs8_19e)NcnP{OcMm`+p=^dZeQV`YI*0S_|)cBD# zK`Vjj~( zsDC}9*gYv4Qks0EiAWA#pR*2)HyeuMLk`ea{(IhgN$F^b8`g>Cs4;4hoME3~XP0vq ziBn8`CTO~1d)d->;-;dt907)xA% zn;kEF57j%dLg~xxpOqk6DB9!3oJlt?S>kP{h=;xPbb9iP2CQ8+;oq4P(fDDn*Mu2u zx5yg8J?An#J9I3n)_K9JC*2dQKsM5UeHH14S32tU2%5s)n<*`=$u{2BGr#9BWmFow zFE)XG_2_W-&K;^i;eT`B7y~vK8*>lrCi-7UPZp+3Jo8*nE2{>|+#4UNJly)ye*fsZ z`%C?;*CqaGzly9LzAoZ?I~{$B8VIQQce_0z+kvmzG25W;+x9mAiZOo-oh|~TG4ryS zbmPbuWm~5v-d|6rk9woK)*}&o{AxS;+>?!5EJyW)yDL182s5|^RlC@Y*AhbwU(_8G ztJQYH5+gi792J+wvwG{2=R}X2i!uh(rEA0!Ialvv&#v^}gQg4#?ZrNGHvHkAjvoCZ z3hjf@D2h4^{(N?^yBr2*KevAM9&7j92D2!BV`^1y@eUHYyelZG(2?vD#4`RRE1_SX zb6O{6y;0@eby#CuM;)o?AlQ6NCXR6{i^0u%&h(O{`~6Q{&~JXdERXFaHQQ7d?pjwJ zEIn9>93#Z#AZ37bgn~Jmvhtj<3QNt|q27O668)U7susTu6d7QZP9G_`EODzP;% z{+Zc@qGuQzh<$BS+MbnRa2>0-JeQ`U&%1kFcf8hXU0S4a2AyzU~>#knI68V6t_4MTrgdvDWfvSNlywuz7PV zrN2V@sUQu1>*Rj^QTAnP-f(LJJrh+MszN@hjav6CG=GW(*8xvXDPrbziZ;=!#5Tud zc92*0_X4sk-InRv=O0(2zJ$HU80)LoBb?4O34Y5@FOLj#p1bhXM(%N1)hBH3uUgh= zEsD+BU(sm(R3Jbz`c!xg5(|iSZSbd2vSoz?i^nb=+jK`7nFz)Yd3wChV&WE%3a(sX zH+()YT>ph)3%cvz--FJ)h8HVvd;d-{LNr04|C33QiliorezJ$lb^NF5?+r}rOK=Q~ zb+NOK*#c@eU1h4~l4t25mL_9krP#k`a(^y_+NE-28ODtnF8+t*mc5|Qo6CT{4rv>! zc3T|zt8O$;$Iq*{46`$0P;=S{S9B>tK24r`-dx?%KINRZ=y?Zv=cr{M)A^ao#*opw zm>PbHZbqA6^CvmRp>bbSJC`ohPXt0YiDR4gIjXQ=#Y_xsH)0q;4! zr1-PDJ37~skgv(PLG(!IpJP#>zT2YM5Vvb()=y?lOPz`Yzl*JSKA9u`yax}(= zk+5*3(7r#a3sKf4Oz;PucOiZIY0`8_>GPO-CVX!0ITp~X=&=S1&S?Qp9>vC74oqQu zaS)u+l~zlMUkX4m6MPP7^TWC&hla1nN&fnDkBgi>%%qZdIcHy5&qJy{5mxo2FTxA_ z0Rjs9ti<71afi{VU-5O%hFQPjj0bjM_(@FUOTS^k;q;{E)b2g5eu9P(UQgjYPrPF& ziA8YPw2E;9Aef&Q(F#b90~M?w!7t!+fyYhm zRjSy|J-v^z+`DuiZx*Lo^Z)jdct7`nu4D{^Ia)>qA9K{2_UE_4;mwFOiTKA03M~3Q zvD(Gvf5qmDHqlb_wFi)$q=SpIrJ#>Rh@0w!kL8Z1DgI&U-nRU=UC^}d3eS0_A}u{1 zr+!iAxr@kE82i)K|MuKC^MPK$AYk8hJPYNcRYS-dmKY`pIrJr4kkDxTpJzTMbL#DG zW2=OZzRLkz3W0oG7c#9OdFg&UDj-KMyBZ85@^@}yz3w4iWXJfsuzLuo7SQ;|;;(@mllN14s7VaCH%O|NFbL%bkYeq2w+&~YLkF($2?!1F3Z(en)pHQQMb)ty&!xZN2B-lTaL2f z`d#Ni*B&wuU%nFPwj$6MTE44C@hkhOA-*TbJWp%a5Gq(Nu@N%&C_NP1qR-VZ>}OGx zM}T(ww=Q;$URC!zlA>{2eU}MM;d`gd_-S_@YqsOdy>dyJG<6EvadW|eshtkBQJ#U> z+w{eKPBrq9&qbs4dfqFBPhqYt)Vkl~)!D7(HCD1pz?F?Ge8H`-jtbcXX5+!9{xc_k z-Ozx7EP>M|g>89v949U*@r2(>p2J*GOZ;1~Q)jd1BI~*mGl3p&zx;W3iG8ee?0D65 z^GEF@Ut@EE@T>((L-W@t2iYG2j9qIlsp~(0=AlIhr&DuvlPN{LOu>nc%#rmGg1PCI zs5eb?sb51(8$#f2`^bk&{Tvk|&<~zl?68A3WflRJGA+{>i;Q)*hj??#QZd;lonxVg zE%~FvF`M<&2_7*{Z>E|5tY(Mj=^p83Nj~)u-_81nqCJr(1?JVI`;WMq1_T`*;#M{9 zyFK9ldSBJd`L9$h?9$}5gN17WFgnuHPaxJ84o$Ty=xFhKA(;}5K85OZFGN17`5fX; zshBSUSG3j531zv92)(BQ<#|&TUd{GR#saZePS^6gwrOu4)|`KOoxoJ~!J3+b->?hC zsC19yjCb1wCNo+bUUJL-4j3em8K9muSieBO9Flia7<%F_m+2m1w>r`p{IT! zd8V4wc2eZ0CieaC%(x;b_j^{7ob6Tc+wXaQ<8Y&4g8#?SS;sZ?zW?912%>;=mo!L8 zDSJ@$C)ocrA8 zy06#kdcL}dAYZg#+7h zM~dHHIDnsyLK9pMD}#^izqo6>l{Huw<;o zw&lrg=X3pQ(;!-c6i(iXoKUgJS+Qb0>}|E|jYO^=9f6}9$&}Z$^`e=ddkE+`ubnl~ z^a~>rJMRGwI%=34fdW4xxr%(Vs(XgB(F-Qr(LAv+l$xzwM?N;bJ;gJ_#+8yOFWQ?F zEOzJ`^Nm_HSXAoO_BW3W`^8QMk|NH$mj*cHX7sbVGX~FU_Zr`gmlkx~0dJqTJR4RE zSk+d0H57jRdxNRnrz8k~McT|1yOqr~==zQEp1VKzT>NoxI=EYrolYFxwm^|>u1(|)5QqT;7=86+7pcX5W2Dl7HeAZvI0 zA(HLNQdp+?=Dfr|cl~8;Yp&(od3ci!ce@a40H&~2&b|=H=>&k{hACmp36EmhUE^7K zT?&v&NtfFJdVq6p@sBz7KQzP|HFao>XE+77BrLw_;P5c?&gNTCv0h-&Pgu6?e&%Q@ zMW*;ZH4l2ah}xjzLw?r_hO~$PNRR)D7qZ0kN}Q$^*6aysi=90nr>)$ zHF6FxXR-7lIK^x0ji?z*cdEd*v#XYt8m*&5<=RKBPmOny=L`LyBAlsNjuWuypTs<) zmbUhGy?g;#GWl89%81HSL9!@lM-vxM*x7`w>xa%8Bp5Nqu~6gpk=g*oZm{YMx&T&^;FmdXxe!SVKkXbkY4n|?{ay?8+B54~pt zDY(=r*gbQ2!+E>VT?{#Tke-)mI36(HMHw~-uRlww;xW7%Bx3YYALHDCtp3b9wwA%M zR_}EXO{m5YJcv5L>tV4UD~^thXaI9sR31CjsDNM8>PV6ln|y+`C>Z2~_ntbWiuuHx z4;_{DchN5KA_Y*#LmCzC0RgQ{<^hW=O~KX`;j-s4CGBFIKOetY4lVSf_D!1!;Eh89 z3x*sGk0Kxq<3R4*zJ|EB3#DKcHok_odGG7rD`9#934Bb@6WqkZsjr9{k_AYEnG z(=MM{68GL+6sEXNZ_axQ)O5BQD2utw6c>nSSw9~R&s~ckodh6epvXEcq6)x7Sb;qy zwv?@HxL^O557Y9_dhy$UbMK%-c!SrNg?-*WZ%o!QR=9KYbr3HPt+kGeeKNan$qN68IqHT7U?@K4O=U~^g@cCG&$ zY{!J!V$}3MJPXg_^sK)AimIPBP*K`rrU@4-w@p62b^ev(yO|{>ITi&76~t0*eh@ z#0)B%v!bx3J-l@7^ufH?+e%S~el%nz1t$x(?tE=c5uQ`Zx=WnXOk$}r5ruU%oT+02 zvZ)i%#153TE%^Dg|9wJW?m)$u*91ebMdDe{t#2b{spD&P&__ee=KW#Pt@8>rR)dcQ zv;0N`bVWY3>d3$AtvxU77&lQ?c{qCW4(4V%9PJt_;RW2;%#N5TE!@9_gTVS%Au$bE zL5Brc?!e^4llXfZpK3pFD(tAKpDzpsW>NExkk<|3 zs~s~&z67To#XCsL2QB>gcF&X3=xfExXwkjht1zAY+lPgh+7?UKQ%H(vjF?n)y9VS3 z0Ko)9J$<)qIwrQ~c3+3QWieu~z|gBd7^Fg!-qY#dh_@&Ax{rtV)6(y;W{;p$PTk*4 zYo1AMD^gr4=LqQ}oquJqQ94>l5%2ACT#@Dp%0~I6d7S+sMqms&8|SdzLiIXzjm@8R z-U~#?It5p4W=(=NYy>^;vppwWg4Dwvk{(R|1<@$Q`t#D-?Y;LeZ3?{K=nk1zPj_)% z+XiPmwEX0I^6wue_0lY5wHDYag#heCfzb2y+@JsaUj!Z>?q2KkA-jgA!mqiA4X7)I zt>g#;Px8!7|684mHp3`x>?A~6>l~qSl%bRLeTJl+hn$@S*PH{=ea*C=8 zmaGm82Y)u$y4<@GLFE6E1>B|;RBVkQ5GZy#6Rjv$>EV?0;>aOqRFBP~FO7O{o_M{2Q&Ix_k5#`-rZK^x|sSvVvx^&Zs8FDdT>f{ zXOw+T)zQ!UEz6U2J%MBY$AqtX7N=E#o7oAZK-bL;&W)flqiI#suPY;zt&J(-K?W0D zX5k77~@>yE9)J~EJia7eT(}Del5)f*SF>J zTxHn=br;Yq#uDKXF{^U*Z>{`?V%yoD48^M2@38$Hp8m~-&k?pQK2KV=s(xdd?R;TA zvra=C`{tfoTICaZkJweaYZ>S#)9x-xxuWx_W_V5LMiOb@U0c!eP|hSWe~MQr_M)yy z`g`k%pu-Zbf+23m2P21394r=q|U7W?w#=@(o}-(hS9ANW&D5W#0y1^Mxb3THGi$! zAZ#l+P+3an`0#=+{)jw<)HpSfO zWp`(z&k9nKz04ydaM@NXv+`sAiD%@(o7!|^x3omd?sMTic7yUZpQUZ}sXZIwmuG-V zx~nM1sC-X4!>|FEg*f`cT-6mP;^r^vls-_EYcD?hrfPdw@enA~7WAT5l~h>AWTq76 z_ga-zWjofL(rw$CNZXA7;rmh_v*w6)FtoA7}xaxx!sV^GpEKS+GcS+*k zKYd!1UD}VD*FDv6oO1Zp-n{xz$`~HrY(LBV+j?0aj`<^BsNQyw;B-;a+9uR?G*!m@ zdvA|*RN$4(#Ve*TG>Ljne$BV1;BIZ(uiVX{66?>2tFd_8L&)QJm;xS%f}slOst?Mu2)yaJ z6qV)9oj5x4LMXb>_x`h*?})7bASX%GSDqMJN|+(AQD@F|at|-2dn!tbKC3A%bZ<#f z@f_atT73+y9Sn5-q{MbD+298!ig=gcbp`?24g<&y9Qpnb@pB!y^c-3IyZ@z%{BazA z{42G0HFPKZ5hq-9f!5r5f8HXqe&Wk|)gI*aAYo>8S{@5K``b_<`$rU`bbNm6;~P?2 zl1XAiY}G>+SB2Mn#HnF?QY-bxlEG{rx5l~`jZL0{rKEZ3Q*K4w$$qz^y?ghqiCK0ws$3bzwu~y?z3nn< zFD7M9bPIEbN&U*$G>?@Kp8E@Ab9p@62YG0~gQ*(>@oSp15-W~T_LKCq86wMcgOy3Q zqCb88M;ixdVqp)6m0FHf7PiF1mtDHY*mSo%!`X}p26gf|6G;o=oV?wH_HmD@bmI}(W|+`IJnuA zB1_!Syz9hj{@L90e0ZG`#(WzcAH z@%Bw`1gih$Mfu7eg^K z@IOx%e~s($+=C}xO9I+A$Q8ni)`|W0tMz)Q(G#K^2rT}9mn%%u!%cO9>W*>2;7Rt$ zz#D9ct-@|Vw3M29WzjBx|D^YGS(EedBBPtZ==PYzJH&(0+O6vYHIt045#$oVkVzyd zjQ)>u*#Pabr(x~F;jvto7Q^sf2b!L<8M$@_efp9otrq`_UfirU^X#!i8*kw{U(1a1 z^j~hc*?gr)&5R3U$(Bq_~>BWB{W=JjB{Pzblu)ErZgP9xg?EKMRtQ zOlprAiCXO)ovsNK-F`)%nXYJhA$|EItlvs4gMFdsi=AiSBVXS-?}E*r@hsC$Pf=NP zKQzAn2?+LhWtv;c|Akj_^8M%5hloSy<MalljcZg@{CXr&|F`LoCB z_)+E~X=&;iUggcAZDDUKlimV6mFf+Es1gL$Nk3W~QYO!}w^l7y`ZOi}T+ldn38gP5 zeXQxcYoA3fKx$>q%^Rsn7zrQX}Z;M(-1P-P&y5~-URaGplzOifIE6p$2#4Z3Volf<6^cuzMw?v5EL zEJY^sXj7V({*br?el>Kur5Nld(|U}wD8hDcF4*nxsQ!wd&)O7ic{g{p3QL&=P@I== zPU3goTR{txqJ_^}lLh7#S1OHdw0vUSsf}{hG(Vee3r>Dup z`m^iym1|-qM=y@GW~v2d;B^eT+s;i_WArsB)09B0_ZL^ReK^NdUntb5`T>i@brqwMbE9Y>8HM!?1J!OpVp$5ozDsIfwvqg$3P6*jJT8kMh&D{rskVta8hJM>m+&nLZ z+&vM+Rxj=>bD7P`d!Yo=QPq`OM$EiwFMQKioyboR$XzSqH;n!A6k0mgFK-HKEeX<| zQ?gzOZdxhrY|1P$RE-}$y|E+v-L*#sD4af3!AeTP=EB7BY7O6lZlff`Jxez<7iLs1 zY?B8|YvnG-lH>G0{Xm$v?HPvw8sH(~-_3V^$EV1%i zGSk@Pyd`YQgbs_%y}U%HM5CqIZOfumMZT}CD=qW<8;{tdTfHwjEtu-P|6H*A^Goj1 zXT#x587Jc#^{`H+Stv{aQzsS6R7J&^w^uFA*KA)udCTng1oeaINqY+DsLbW6oD4oM7kAdhO#rV?5<}dkR^? zrr>m)Ty_s<7_o|;r(Kh!>Z$Ea88ItF^S{x!g0sFt?$l(pyTmkDGS5bTdDuoNylC_+ zAicSTa+KB0CBb=QEs_t~?rX<~S6l=Vn?f;{snMMZ?ZiAB=H=6z|052*__ZJ*oB&yI ziW=~t9pf|k?-t?=>`ZgLx4RZa1TpI>#hhpA)HdbXzImMy9yd?QW)NK$-sNL--0{x7XrqY@VJubB14LX zpY0nbU0e1U*Mvgnje+d`4^3Hu%aoU$){vn+>&StuQx+x4TK?*_6`#U|h6dWDM8X=5 z{~;dKdrW83!+LR$to(bQW%|mc@s#eGc~ea`{ZfCh(8txcbcEB(uf>#|=1<^%sYA>& zL1vA}_iph2O<$Sf7Y_q*XBN|g`M9RTPPSZ))}x~Vt*UkU0KiY!AL8^M?c=qnhER=7 z5cx`wsc!2ml>0e-);qaIKB|C~4vL^BR_%%CFhnUa0~L<*j+c*s1PIn`cwR0W3qq>d zhVsj}c7Wlp!8*(o4UMDGfXYRwCGDRbKK%tQtURt|AFh92^cT{0IdjvZ%RWGbYVps_FYLm10p-u_vw_oT zPX=cWld~qGi%WNGfDGi>u7hV;M4R`Cx6vpWwzbtP)Q=Qpp%uVE0(wO~Z_W(=%N9R5 zj&|ZbTm) z>!3^e>sdhQ0A@z0h=E_V9_Lx(DYE&M`^Xf!NZ>W>>iMNsofe;#D1)A?pvIY=!}-u9 zdDzT*csDNx@ZjqFaG#doP;1u|)}a)Pc`Tf4r?ZwkN`IHFd+=eP(d}vbTVZVK#bHZU z*%9sP80)-9*DWN{YOnQ^S*Mrc<_MFL;)>;hPEL}{;+cnD#oom>DogKvla{r0 zPGEb9i3n0?==KjXXW)gFN=aPAK>NFDV7l`hGb;nR(Ur*P@k>FiAmcZ-*N*)}dj4wF zp3$G!go_oz>Q$Z^8;lWe7*&X}jY@O3y6Q)U4#b>EmI06B;OO{KS(vSe;lE`bJ4IM; zO`nP1-hnw1q}e6F#e8SB>~geo`aEU|JCSixvbu0UXR@koOfNBVWs%rkrdRr=SGwlgEVW#A~{$ z2L_M*#c#$e==R6U0+~|I$B~CY)hSuZ8MQ#94)mIGWfK}1c8|!7p^Z{nR8+L5_fK{P z1eZUDc`s)r55J!jC1|7%E@=f#E=ie$o-m}v*e^>b^RlQyFe~wXaONNrx19xn(`u;1 z(u6b9Z_U7S6A7Q-pRJGdjF_UmcE#(jSxEGW-C+#){GI3uE98MaF4KU!y|Ky6(+4WW z!N_(Zq$64LRXZ6T4)CDn>=FN_m`PSMQZT77IwT^VHcoZfrE$RmEZLF7z{Y~6F>%{! zbwh3)<&?V9ePOdA7p_z{)%zP{!koEB#TvlXuF!B4swGYn7aDe(^ z_3t=Vfz$O;HwG;F-81pi$I1|{?(w>MpYu15^InV1f7r9L#2m8_vvp^&3M=-M2N^v- ztw!W^ak_#LkFw;~0s=qKmA_FHlPrj2K5d8{+=#a-j8*kTr?Lmp&tB7)%DBt){h;%w z0KziNTvGj5X5uq79%j7`gq45ZjUs--ub}^KP`3+Uq^XD+x{;>yB{4IE-u-ptA4`px z(`vHNTsbv1(dXZ9(R|^0(@LvcCGDzaU1++;%Oo_Ts#5}3!>0dYO@`hHT5YlZ{*fbu zw8X^NOFb|D^`IJH@%MTzVT+0JKEc7?i3@15Z|jDE+zmt>H^{EbNm`=aqd2tmKev|k z0rLk+vaphJlIzu15~%tQ76;e(WuS~Ph`AbC@s<=$*c$icS+V>Y7nfF~y~cYSupR3` zxY7W&2YM-Bugs$f>B~0ODYl4?|C?t~M88^$$8M+uJLF7XJGmjBl(R_xvrdZ?m{GW* z(#HixLEAm?rn9mDRtcy_ZOFh{aIQ${eyfdyQ9{wtc({^;;TI=ZlykXS~n7-HCW*lxu? z|Bk*;*%M4RSeSuEx-4o@$Owp@>pq!7J-gc5G>qc83zP~%Bq~^)Lek}7iJ^Su7dJyFT0IN6PGMm7kCpB|kkBW?kRl%l zmW#eNxtLetrgOFE~<>e(>Y`)We~yK-aA#v&mTbA3!Mod;yQ z+>`LCsR8_=Q9#EX`smsy=NE2(%Zre}CXMF->EmhR0vidhbp;+vW{YGB{FVkP8=7|e zP~SHu7E#tKH(qny#Tmw#|NcesxVLomP-JK7D_gafq=bRHeyO6Ewu-2d^d#M*hki26 z@yef%v?#G`dSh$Hm3(JjdJy!8_vTY7TIsS}P(EbkVEvtFi^#h(F51y{E&qm-6X((Q zO}r&;MB78?mQ!1c+b40z#~8OUX|Eq5bpcr0BjY0dX)B&4`L}IRqFx(5!u2uc`he&FiH;9A5tdADE)q=eh)+`7sKGM*7g zFd;leWh%B+F42XPW;TsUCOyn#ydPHbw!7N*i$smp?)VrbEOeP=~xh)lTKl?b{pPL0FT zgNLf6p=BQ7m=2f4#i{n!h1M*G^N*8-T~1J_i%=WIpkfy{7(3Yy?8!-tsEw!snP%&J zji+W2+t|9gvxPy8?ffn!N#3$G#OJWb#IC*z5I|5doqOXSL$zn>HIXh`{_+FG$z)CR zsDLB4c=mq7lVV$QzsAQRkrm2+cWu|6aljM*?VT0ogKqvy<#gk1hzZ|BFnF|1=9L~O zE>`@|1Ys6X5J*W7EQ7j~9sMeXdFKv$Kn81eNBEU0{#j5N>TJkB1$8gOvDC8>aQbK2 zH?1tgog3_dIO3lFR-^|=iV+YmLyH1KWbrOKIz9!aKzo26G65y``;3v;- zCt&X4ePRNerL#ju#L4SJ5w~YaKz9sdi*Jm%7H!Dl!f*G*J+Sc z9-u}?OqWk(g*}~VI0(s?Hf+cJHBlH3@uuU~3E7n&@`Xxdvu{zi=p`=z2f|!tWT?g$8O)VGEzs{Kx7HP zx?$0o0z^(f!?;$#z}&L%W2}EnW@&Q-1-zCj;J!u+|ElETdoh_><)a6WIN^cY>txem zf`61_^1QNrWIpSum6~nCXGA)*WqSmFZd=uAF%>6AXJ8pwmu^NOib!(7xPzhhggg{4 zv(<*%De*_@1H4pUN%5Z<>!g*2rh;J?`!v<qO|$c)9dKQJ0$S-hWxTu4;jy9g_xOgS0FkLfWbD0W?x1l(h0em2>BD$wKDAal6!U#CP+ zYR@9HEa>$_c@KYi!>2D3%-shua0N{X8)4SKN$rWfY`FF;?8#;-1L;ZI;$QN`2HFSc z^%;7R?2F5553VdF- zIlsspj1P79HrwBPOhr8<$Gf)TBKxxjzR)N2D){UBM;!7Mb^u++C3LFPGM{%4ZxhFB z($S)OR4Iwg+Hh;NJ)Eh8L{g&yMRFCJj@gd>+@4mlno7h9qz=d||L=x#^z{Vs8X9 zssHVFOwULdA;2Okj*a+yTNv} z*J|VdxoGyr$aM4 z+S!b*{k5;Tza#Cc#%EGb3UUhEy5O37yEPGT-$;JuOIfC;SSF}chS~h+`Q}7zF;rjv z5AhS*$wstC`%QZgnts_qdum%FTtbA%z7NSq-*-blxG7=JkL8sNX2nwB_zyN&2Y6Xw zlx_2XNeEu6syv9K3Nhx&4wSR1&&%P_QHd1bwkxoojzeQ-ZB*$dX6a^Fh#KabkW*#-iE7zXqBOcg z`c)$_!~G{HslJ0^*wRAICLYt2bla%%WK@PN1tc-#-DYXq%9wk;J76b_zun93idV}I z^FER)aVz_k-uLiXsiK(~-+w5urhnAj9; z=k@=oUb4C`9Rh{kAJm0tOuj@?`7eLDmxEaVK{sw#0zIW#?G}9A%K|uqr<4r6oqLst5XrmM|HR9#y&ZOJGiDcG@w=t_aW-#r_^d0caTL3(h+ zUn+DhTMS%|6rUH3MlTgODwDbaV915}T;bhz$r947tFPYeV2W=_aehkbn~k`GdY`$L^0r_H&V zm;2ka{7Ilh?l9jze{mch#zdmQi40EN27-Q5`{MrPSsT(4t36fn)xcoSlJ>0MRFSo) z>idBo!uA@gD!9@;60$p5^6=Iu!3E&G^tWvzHamM=AkwI*c@8R={<1*3Ih&k}%AfVV zc(nWT;c8_H_Ui0SRYnpyJ|G%DYZT#I?$&cuJY6I!kwL*OrirkN#KnsR~;VxP!|H(hUBui~;8t{WId!i^((YDS7N=6po|+R;l$9v-^MV zWlIZH8l4-fb8qcYKCq0S`FMP4Epf>Oxopremec zslZlN;x)@-Bh$9D-Yx&LaZIyVtp2Hea(#^UMdRuE1{ty@jqOFm!*u>PbAjox=gb&f zzYCZ$n^T^6gi2#&v;%EEZ>2G7A68HxxBd!*=aPJ{ask6?R|1D&pJ9CKE@7w2r&G^CQN(KupNySy{Jd~~V9>uZFGN<9DP`4vs>ZKZ$#LySt zyf709?!{??R|AiB!|O4;hWcl^KrY}hjiGnxss68A%Fk(?YC4q7<=nigWQALuPUZf) zWgCwsr9r@Hd&2N&G&o)Nxt;*(zu{5tC5Ij(&cEWl8x&abVsgnw9Zo0ha%RN~I+?=3 zwhCy>djjHTkK4yQ2*v2DTor$d;f_4lw}pHW!moF?$41+JeN$9><*mhgg$H5R zW&8l6Zpd*HekVxPGXNLVxG=GfJi3)T0QMyWztS|h{)5Sath70@Rhtg_9;{Ok6H(IS zM7Y+?#r|5s+I<>ERpUXS#`wBP)_2Wz?d(Pu;TO?W1~|?hwL2`W<(Ag9*7kc@EFUMB z+^GrEy#yc54QSBB6S=jIp-J{hkRT5(DCl%+b4Efi#yBVj z)NLPY$CbYE;)4eIk=d(k%M_Jhmkg}Rujy5=imHAN7pg90euM}j%;5w3q~kAQqe;w! zl`DbgO^tIqO`R4;N7Y5?Ge`1CqbDlbzw97Rx`Yp9H||yld?alXr@t@5c)M!itZn|7 zst5mAx3!Xeq(rgJE@h(GeRny>QiHxe0dQTO#d&vf2Wc1*12^;3C8HC@0EyV^`KdmO zo>H`o0R2g7_VKl?_+L4~3cd_$3NYfPo-Ksk-?MrWQ&<{Y2Cn}F0(e_)9f)#D^E=zQ4S^2_9;yaD12BAD^sx6h zFFT4NFX_tW1a;gg>ffgerP$ZW459pz zuCIPOr94YnQ5#^2OVhnO6e;M_n(6Z9oU_@sYrOC<2L(^usH5!%Po+Z3bfgphf{TQ6 z0H8$L_(yCoBVWvh>dnfh!&5w&SByci{Z^eFo6RsST>Ad{q~sfMh@QlD5_-iXxj!u? zmnm~KdA!>3Vay}VwT6T;1?JIV{S#my{`f)|)L(dyB<6#*^?ZiEmv(E`t~lKIw{E$! zy|P@qtVWR+XZ+*8%)5%6R5+fF&9xVVnHe#t{6V5Ct6=auom<~^tsdHl-ZdXXk$nhR zl*Th+cH`xbx&P#Domr{I^Ax(|qPjX76I^pyd<1lE4$r(6g!eNY|0gr)xnoZow$#M} z0eG4nBK=mv5dv+$j}GPC7LAnT8o&1d8cv$4mo@pFkI}j!-hrfgOFw7fFO``aXNGko z5Gv90Q)3s4u@xG88Jvk?hg7nm5~_h3iHxTp^Dp^M_|N@-=~dli>P8DBUjpok+MNm_=EQDCT2cyOjYoA{vcXom50D8z*;VkH3dvB`bmwHQTc{*HQ`b zN-nalX?*kpf}As(qZ|9L)8Eywro9vn^gZ+34%H>8%(j~r!L*4LmCt~#iYJZm;I;zW z_bltZ8wty>kymr0ijZ896n>0|c(+<2D2Zf>!Gec)7;*C-e>ZGUw~mzAuUenC1{L^R z4%LUdCQ34ezpZOG4lWuy={`S*30fIjMq$P;uOf%DT&F|~sqVS7UPS`|btATCwR4v` zgpb4yfLpRTl-Tb6Z9+Ky$G#eO`V4t;7?fX7u#f6+qt;L?^HXL9ZS#LKUH3@rmlh-k zTy@fd(yV&bGaxz5u3rs`$k_G1YHu>uE4Q@UQ<7<|SE)9e z@q9XR+9)|T=GAG@>urunAl=E+!(V4RNUbR!a>C+4(;Hixik$Z$D*81vNzyZI)t3de zvk=5wN)k=Hn6Gf>d8B0%`;!_!T}cu#kwZUj5h!@O?% zn*^J#x1;v8WJ1+LdqQaf)BkRGbc)QI4w|@|KpNe?(KJOZSzloX;P{D5^z~!hP->+& zHob>ye6m&(H@Mv-?c2h6`|4ZF+4m#tsymW!a0S=BfDXaQ)#PCh>MqTb>W5P9D{+<> zOV&zXdY7HKE`O+kE+ZFFuF0zA!Nnx=TwD)JhL6u}f?s*%?4Y)Ja9!un5ou_0@-xPL z%`W6?*uqAmdH00Ci(jec?ekykz9*|;?a-RRikYXDc=^{q*P_$jzv(ilhe!VJ1}EGd z6n-%^FvUjX)yBCX{BH$Z$m513pb9bWRED){JHjqYH&&!SD~Z@Y#QANrg8ftz33qXb zKERaKDOU3fFP|J-%Gwm-FZ_7(Wvidz8isl}kb&8E=Z2C$=2C?yj;rcqPo;N5LjIoY znOh~9D~Enbh^DKwZnGP1 z>pZy7u6S$_7@XKezp<(goX@}2@tM*R(3U-LT%>eo4%? zYpO}{gkAHwv%{T7ADixYt@1PwwJt?gf;23y8rzwn=uoSDm5RKIfs-hB`{&TyH|tt+ z4~n);tapv`i+y(V+RhTYukTE&8sjR7`lH+R8w#)*rP0&t-SJnikNT_m5A(u2o~i2e z%el*eF{zA1L)*sY6ob3mV*D-qgYMq^DF>7l%H6f(>#{*>k=+9!TLmga75o%7H!#&( zq6(%1DK;!C{ZZiMwQy?vv`IJnk@~H{$Bnv{d0}ju-reU^W<)u3Dg#U|rLUKjaO~sz zZ5iy&6lYX&Qhq*?e)lA~EA0AEW>RNtqt^dR<2o&I+8u$sO1U^4FuSn5u<4^G!#;F( zSN3|hpH!tB`&!LjL$4wnYlS!z4@TK1hB4!LKPZTm)J(s2cZ|m*8m(Fa(=O6bu57l` zE%nQ#@8_%#7}WKWn-uh0K9%PWj*6)@bvRZx0ext-I^{|D^SQ47I^-FHJddx^sMGN9 zpyx3VC!%crq216QZJ=U0|CjrAAB(ZuNZH;=$C6fvuB(}5PEqn*g<;J2V@##~3l&lLdmi7*`dSi}G=YkSnU6sI5ZhHlaGbCeH0=@gK*`@!U zL>)*N)USL`dUql^;_!=R_3PSG9t~V9L5Y~>k9#kDhd69Yv~yWx+0nC7(5>dTP`qU+ zD8{=E64QZ|O{C1vk<6w+uF#kQ89X$xUF??HeSGtxKlhs;Y>BK;G->!uPCg}>^ZvLo zP2P&g?$b#*dnuU3RgphH?K+O=WF#W2vj>$Ci6l?A5uOZ%cB?>wUx)yGUYrJ4@YjUI z>mny*?zU|9>PSKg4oI71$Mp?bttUfR3Xl_BaScqmpAIc^d$$)H#YAm0&5u7eBNh3* zHz|(3w|RvcZ(=oG%ylwpBjdB&tK|O(x^G7)e2nMztvA?}MR4)CbgTF_C0r`$5}k2< z>a+jsne%1*7HVmrghZ8izO;1m<(7OWoAl;C6yj)b+&_Eb(?gg#oM!xt(bDP;i`W`o z2C}I)UtNeWlV3LvC?PvCK-$2!+<$GJC=HVxLpuM7OUjd#L*nVyH40w<8GP4n$) zGC~_s25p#7NG_Pyn`LD*S0B}!J~%gdi6zC~avT$vUdF^Hg2uSqlkQ%`0;z-lih*9^ zy#wVZ1r@gmwi!cr`~!lLTmEBr);9QYvwHSRMuAMixz)m0Z|m(|&q8(`mxb2o!F+NA zvN$>S|H6{RwSol31tGs&&@;>eeEDPB~r3|weT;@Oz^xN5T+>`se>L`7l6`rk=>`HT1f@`N&Qy8`End$HBY zXMwquNG68LbR9uSM*e1(@cE}Vq^Dx;G`lkYTfLYfiFJ`#63>j3^S>xpl~l$NW8A-} z)RqgLR)7V^qJ6!&i^z_dtL{D4Hl8jl+PDX#A5X9jmZAMP*BUlz zMcfJO+~favd-)9W>a{qg1u~l` zR@`EuzMMr@=OKuQq4zQ2@>$mgbMG74Ig);lwMq-mpx$JMEZ5taeEgEvj-TmdyGnsO zrDvf{DZ;>;FJe^ z*E*=vp4EQUQV+43(>ed<#Wx2ymA+cA(5a-P{IKl{$CHVjnT`J23V&ZA1}03=fwBJF zjNKf5oqPeg=wO$b|y_aMt!$->idldagMZ(6!mG zz#*K`9W8Syg?^pTV=2L)d4U{peB4uXV73O{&j)?^+u$sT@1jGa{Q9L`olZm+4-N}N#JB&pD;d-kB-v%I2jS$&&`INow zs8V9-xfe}4TyXl__c&=sTAqA7|AII5ni@~Oo~F1$A*Wr~tqr8*p24jy%K8eV6Rp;S z4&8x#j4+@-^dSkZOf)sjwb(}e;=QZ_g!T6e(UoIfaX8($3DWZ=2jT}evcnGPXEP+h-; zn*X@dn#ar`CezY5foN(#DiZEG@izV6>_r&?bk+3_8;H_LAaUb8_IF?5y5foo4GI=| z!C+tNcM>DQ2bOk>Qh(|Oeq1vH!5V4a=jqU>3fJn9GA&;k^h!(WMAIsR#`4EjVMoyV zmH0_)cNjA-(QiZA;ZEb<(oZ3W|b|IuOA?YAqrl zjRQnxs)z`PDIh{5|PG zo_p^(?{V%qv3%_2=n9+&dQJJpGo;fDxNF3mlSew5eBme7o2$KV`y-TtCD}R4lLk{U z@+U`mTS;D`#+kUvqTE!TTe5c$rml#h&=-J#)Bk3{zT z2gQyaV(aE%>mCF(HpT{bb0^Pr{dQ(Kb+i8F_u=!>(<$WDyxq%nDgRntjH~&YzD2V` ztbVJDn8dx|Y|YA19)BF75~qL`q*>oT}p8Iwgp z%gKIOrmzMy4q&K)Tzwax6l}ams_=r>w7R9XOEmr7l&zF&&u+cyhzoYyAv?EiXWEZi zHt#u@h_@zk)W1=ziy9FsIpCm7lb0RKR@k-QQ>O!CF z-a~@QZX2CuQGjbbES5C^Jg1NQjZQEfF}kG3awvlvcCKE zj{(Y%JDhi@9oJt;SA9_(l3XgAqISla!+~%(EC`p=%)}b|uX+{(%PNrGgfmTDf{}LV znidB?M#Kw0Y45bx1%~eI;BCVL_MP8P4Y$NEFJXv*Hdd>wx4d}7RGc((e-UF9Q8Y-| zx7?#PYra_5vppob1g*E3VA+4BEG~GFQJbyylnZ|&8}?%^f}R|U{e5XO ziO5hZA|P{+x2!Lj8^A;#+UJTaD|UO}q~XsC=UJ60#*+U)#Z{t9238fMeldnq6V4w$ za4YgR@xT+4x>r46WG~eI1!NywM?$0GELU*5vz>|gG(?W;J9sq_M|C|;IPk0*3@m8B zbbk88d+V36|1Rx_KG6coMMA+ukc$re=dI9M4m&UPcb)N>ciNwX;T~>mey9_+_4Pmc zZbjEBu906TBp=%@zpA;naU$8p6Vs3g*hg1v|^?u?1B0M>VI>7`r^}d z&v;%gCK)xl=iiByDa0_cWPc9aM*;3gD87*?7|=nW`C9@hK_|6|43N;>;c{S)0q z{P_j%wmYc~JK*~Ld?&6x(LjTt%_!oQ=Yr6cr71p8G8qA4J6o1cG6Wz033ZU^csn zo=4tS(Op8;CE6~A9=@SUue>yy^O5*PXRmJgXLR(of5y&UTlQfXhDeQNAf10p!odHn zW}8kVaw5S$N9Ou7xHZSB=fdCUEk1kbu09&(V%hF_Qu3+zr=v-F*e?2()kpUFiU^l` zsyP#Q=4oK;9!I1aQVLAdr(4wwG)$0V1yoHXh=K5PW@zkx!y!h--Ah-}&Lx1w(UxNS zIY^ECJjBIGk-~<3S$+#;ixY(xAN(5pYC4HVt#L)MT``n1Rn=X6xjnzp__#^Q&@||w z^EI=?H(*hZbSO*N)qi#1tF$u%Mr~0mj3bE`$`CeX5!;YF^FcX^?Q6v!LHc;#FbU(> zhtwU44ek{^kvd~-P0{3@nKi8(Cw1*}@c5fY zXUJC3@e^C0jWZJN20UzhhWBnP?wa_my5?9%iT=?D#|RT%SaeW~$47h!GEiSzc5nVW zOAN>Ij9f|cVXbuIlmYl1nh=pu9U6od9Yvu^HhpHvpH*Gk?GLSZBBQ_yVWU^E$fy>% zYL+K*1C$KAyK)Kb$6Zl_7g&up%n$upUzzz!M$AP0nMrS}Z0f?1){np1F#gm)>eJCK zXT>@ROou=|dWoetL#S+62>DiD?aaZgx52%!C*k1p%8nA_qO2KQHB4r^Lx z0jfFo<;-HIcn6LPjX(3#>$P&V)c4je`FZ(xBr5apksE_j_f0vsJgzCvAL0(Na&hq@ zMT~mm!JCoM4@+)v&pTa7Pn|i0Gqrah?0@BvB3>fpxZ&YnhZm!%AG7aWRluafX!;3VWCT2}5 z7X&K{3=h`-31xeuC#2r={!yFK(#}QgvlTqM+N*DXb5c99W3LD5&Z~S8^%2>EbfQKv zD)O{gMl*4Hf{jeNaxQoCr9M@@n1dhEtC~H!YL?hz9{TlV-5LhaXqgGCq}Md<-JDu$23tEe8Z5R?<+|AYYky%6{~K{#qQdnq^k}uwl0C6_A>>lW z?M6S(v611*eL?#I+}X{x1G!h6(cjsf@DKzpofl{Mz<*-{vilK{ zaE}xM$@1Xy44qN36kNCU#s5y`MBu~~<24VF6Nv?7Y3~qJRo^WOte}4*A*UK1@gr!; z;nCaKGRHx`&$}@?f#WB9kLk;*DnhK>)4M~y+FIDKQ}Tvf)CU`X`WXj}9LPv_@DL!YG{e)U7$&>nTdPOZ=W$dL^5 zbv4ErQR3MhG*zjhgmEO4Xi8XEEY{BMNIgz9+EsKM{%APzsA=+^!L9~^@H0Zi+{K7 z=?F`DmKFB7;LZx81HWnZ7&cdrp%2FWJxHh-H+ zyr43~<=MCzA(NTERHlP4lOI(WlnhQKV{aRk}_2tQfNH;m^ z&Sw`NjuhP3%$;VW*nc^XHw50FdG>|q$oNJP38bYP%*r%&V*=I~p^+G>>mXJQH7OKF zzE)9Mx9Gh21m!Bd?&BA_ZR|NyWVzhWBU{ZF{bVdMMmD*K<0nD;t|j&LVAiHe*YMcw zXq{8nh5247TmB0fzPt=P+VAhVZ8l9)ceee;@uRbWA8LNP>apcVNx_@HANOoWneo1~c#z}K4L`$<)3D|8C5y>e|H<7&{9%sb48}3c zqO+OT*pj-Y)w5sI4$VCA^T99Vsng|ckI@)&BL6sIe7Q|WCMczZ2slB3sAXhyn%Lw4 zAI|E4lnYz5h^+gVy|H3xbG4tLqJkfbKl>>@`%19NK_JTx*#E$5XKnIWXbvHp&|vSO zN_AAd?q9gbXFa@KvSH#6(UY!VT`!9#U5YzzH$Pe`y*+1{TbHrfdv5Zv`}xn`>`LGD z>+CcR{Rhr*Jo}i=<1ypD@0-+TGsHo%>hm0|#)aH2TcDVCB%FB;_xiaJkoe@7b-jN=X={!ucJM9m@BEBK_#}{#~%3scy%7hc>77Gu@`hJXmDej5^bmJ9;1WCGmO<{Ay z6XLd#Uz1x@+HY~XNav6*Woh$&-hOS7d%6F}c}(6xR6WeiLMmW9p!8ZVQ$veRK+T3n zLoO!S{`D_9a(UsF@1>@@L4>CWsUE`$sqwT-`Mv31)Q5)b?eiA)yV=TXD__}q$d8CC zkd0L!Jr9bf8^icm#p#0{p{tk;xdk+GqB}YB6pyVpV>P_>k|7i#> zf@xbt_B9cN$i02l^xve!6vq(kGPB*JGJ&8BK&}7|tZMGouljpgahK z^EEbwmlbVzX2OY*i%YtwI`!F$JWgnUz{jT*t>P%;^;9@g>zt@&$zp=@KVG|k-bpAT z&?I$)_?I`tfm8v$+E45)E^FLG)ATRXi=pddvE>JhV=8N_B?2jiH|8WDFUVPv{-On5 z1@9gGe!W%OBaOkFEXJF%^2j*r1I*QE0EAPSeV513>BqQ(u3lv7i_40{j|nF(^HUv@ z*0j1{i&F+doBuVBHy(oPePL*Tk2m7OTZGZSGv43s%C>nsMP-a8vb+t@SS zUDZ}64tT(#5{hn0@>0>t88u@}d2U^+vBi&o$YaK5{Mt1MYxzhW+6ncc;e$);%ai6~R_KAg1=SjEZg^q?~iH&_bTDTXUfve!9*h7Jnom;6AjfZ2V8BL>1$w;|``Z zPoh>58OQjJO%i@OAXhXpz~=RgR@hl0`_7;C)jse?DZ(N>0OE#lC+m~JC}!2)_yEcW z3aQ&k7X$^LBLDy3Z^e*iPxajvm0^;^N#KOe0MDH5{7K<2;=SSRW~}12;`qaM*5_VT zB*+(2G2v&#IFl5pPzpsNrK|%QC-I~#jmua@SK)UAdmM&1+L>pbQ;X3vR;FT+zd?cRAaNUh@*FAz?G2ioDR7L0IkbR=WKU{xQ1wWZb)YUxECsYZ$+#cafiLBTVb4 zuB@W7fh;H80}C}36hzHP)3^h}>v5A+_X@mK-KN@GMT-lJ41Ixn37ko42!`G$#SD_3 z?s;f7ZzcS*$ykI-u-~CM`+(=2%zZ1{HrN&f7P0NYYUQ08`@nQv;hu*J0bC&zBY}7v z-K=peWd-#oT~u%zyDMaOzg(VC4h7l4ZL*dys3Zehsca&oTT>Aza@TgJcklkr`?mLi zNBvU4=)l}!Bz>nMZt{uOYJ7`#EaY6>P}LaYVtB#s^ksfo8thgUTLkYzuR@Jkozf^o z-T~sL=^^k-20)kX%$r{E0Ahzv&$Q}&q(&MF?n|9aRR;l`_D_U$VGm6?2(-SAEy6$i z4k=Q=pb4+OD5rt}N0aiCNcj*lKX!&MwG7RJdsB($*OzGZ1P_30PhZD-Pyl6wKY@&LQ@ENh0Mj%@$gY7hLkOwvWR)^I`&GyW+3clJYA zmfFG>8V?4~-vq5OXTmh5b_k!cMPbyl=oKG#laKVKc5`5#SB@b4-Q)#Pg=<?XjrCfuJ#ADdKP*uT2jHE>a0b7by!z#&&zlHm^A7#k@-2D!z9 z8gtRiADZ)p_{*?Nas3#-o*$E40re@J%mev}I^r5|1h z$+CkybiV6-fUm4v)2fMqe5wA^W>@@e%NVi@x=cuDG?myvGLpjMc{JBg>{k@?8KM6u zw6wE3@FCVLMrejLbJ`2^@ACjHlY5X%2h&#Y#(}TV+oC;MJ?Q$CC*0EBP_3cCegaB0 zO#Ge#`+zfpJ=XLeoZWOA$zpkH7O}b*k}ysyD40eY$l=%yMW?q z5pOY|F#3dhwsDVuySF#eX}Je>T%M}Wu)&Hs>g5_++=CS;@tkYk@O-uPr*^`@FekzZ zL@IX|VV9H)l8x9XX@d2*$*lLn5bv#5ix-7jjsvqTdXBT^ig~80p;gMCtXn-K?Ht7= z<&H(!Zn3AM(VEr~@EJuE_!$QEOflS?rnsc)(y&H}DT{z4NV{ft`mW5!Xusw?G15|` z6fb}V*%f2no{I1j-sqZ}>Z2D&iPS?r%5@eN4_>hlvXsbKEIDR==&IDOecC0|;111) zhKFxUSTi*oJOu!kRY==&KC|r)`_WMNSwz@0S&G>EXGBlcO8|AwXmT6#2gVO*c+0^Z zS=^%CdJZD^M0?zIDh|3MtI_@IS2{EKz*Oq~Tq(3P3TB}tOy@nCE}X5pUPY$)E>-y2 zPiABsuq}Pkm)S>Tpj|WPS@-NYeg5Ij018-7zCtGr;7)`d+AwWS|4L&^NDuOWcZgeb_4WB47Or$dW-- z_ZAQ!lLP$aiPu)7OroKxo5kSa!DOj%?F!Q7##SMe|* zeajTSQ3AqC22?*+u^6ek30mj0sR)bM;^-mlR+5`IKdVI1tUjf-<-C>Au4S--*RpOh^V)je4koo-Jf%yf#Ss+(@eqE7>;7sSSDD(X_bFWWckYRc(yo+iBTgY0U34gHt9@k_oy zy=@djZ}etb1~4``^M2@Vgl$AEZb~=Eq-RY#f+k?yF1lH3TF>(tpj8)OQQ&p~K<)%o z0@HC~C(_$zxwnSdlr)t(4UTgswX>QkKLiy4e2;&rM`%GkARl{G8~0k?Ka@euQ=az= zzO)gE3qn&-%luUINV~3Z2kh22i5wFd7=g2O^3xKDqnyF~rSt|m{1Cm7=lL#-`uaoW zRBFNApgVWHRkP8R*hQop$=U$NH-c7RI6; ztVDmGtzj*yHz!7~Y0dn5aS;5Pcik+sCRC)|>P2{xBQ`3EL?|H!WrIp+!5^MkkHs{1 z)fM%jW`H7mw~i^N)mWK5__BZv?g;ol(NGoSZqomrlsfC7NEx@&xd0bybW8CVE|#fw z_*Vxhv;laYuH4Ghmt`riv6DJOs1}+-QTtxFG5#NLw>^3IJr#Dt*Grg#=CgF8pqe3h zTN2j0y9&QJ+-ZqDg5&87T}^}Ws`tzR>~N9Z-($v1MN(;WLCc+ta6cC#s-P`jNnapw z%-6SZ;kpE{@WMoi@`e9l`Ui#(3OR5VOc$_aiJLdm&7Ahc$uEG}N4hFr`Fk;7xmYQ; z1FVfCuLeM3)&gVVTKUB?oFGupl;t;TK(q8iB5N?j++? zr`mK>wXB7_Xe+A(nlu1LSHafS@?aw2)qNSJc#tF&Wx?6e~+PSGcmFZmT&hR243XSk+ zI%VRSMQU-hhkGCXOxJR$1%W&&3rTW5!@q|;=4q0!pEXCUlYBabzM&G{@!I}KytCLS?&U!6 zF?shX*`pHsX49u3YSt=V!a=;av(|5plXP?dbb75qiX<2-F7-R4XcF+CfG* z0^g*syv6Us*Wre-gvF8qXhGE_Gbr2P4pS@vr)DfT4yeXBC&j3Tt4>FcTR`1=YBDC- zNywU(iiOzVcOau)fA5CAC|N1F_%YQ5G?*dMeEw?JrS9DAfz{kg3r=r{VXfi__HyLBFj3C1T@NxK*nZP_3v#=jhRXwmb0#= z?q|MdGEC*&BOa&!t+7L0M|3Jz5`6K5g-@C@icY?(`G?dkm%1h^Bp|sNYU=h%K=6X( zGOQWP4QL^Vu^P2FGZA~~^M~wCq_-C4ft`V^0pE>fh#ZR^_7R_>yq8>4A53wag2;Ha z8vhJcE=+n>0sj>`lQ}mfsf^GRw;ko~@S#!K%Is>DI|crto9^tXhsG%r|@z&~_@q(hZ9I#ED83?IYg zBds+?KQ__ygRB-38Ka!9!yWb(>z0#+a@IU+a=|ZZO-(??i<}MVQLmg ztn74-2K2vumC?QDe6Kkj`(3?Y@kJp2s@Zt1rC=~Nv{VV zgO_}$*V(2>Yqj6NLO>~Ur%dOSH-W+iVciqF!&#Pq^3SRiX#`i4zm3iTocnK~jIG?8 zd}b6}31 zauoQgLy@ya8@P;0)P23Y6%;e|t;Bm&t>KKG3`J=GvMjAq@+LXEPKs^cPCEAmGP?+=x04*9F$0R`OS#Hy-EWLIXdL!88pRQxJ_;c5cmFjf^R zIrk-Y30!J$6Pvyv?2g{xe1^srNS5qa$3P)tGpdJuIggWoophT=G1_^O=OTkOZAJGFA}2EEDVT+C;vmEL!{NvXDnJ znYaokT_LvL0h}Wa8Z8IfGf>fU?RSCt0q&x>Sm)b#9|e6DDUz3US5-MG}gPe7!3bJIY3ttx-w6~efVmanVqcy5C0NsybU z4KJ_)x{7E0;UN?9<1&~#u7r&*pcESEUP?!Dts1*nWMeTyn_FUXgiJC4`8ns;`!)V+ zeF#B=B4UTCbh0&^3i!D-0Mm8=q|)%RkF1}u*XfTg&WcBFknhGmxA?hV=164qwF*Xt zKpg`}{XGH_I%lEU)~;`6IISbqn@D;;c^3n&-uFx15yzbNCVOIM3Y6dk{DkU#m^BF+ z`r2-pLVo$6q& zY_MG=rB|t)Wr-iaY3+l;fwN=auHk5QDAZty|B#G90Vj0^gy37Bt<1)90mebAmsvky z1E8UvapC$oh-zb!4d__U=6tK!Ek0_^&Cv5L5lm-oXp2D7u}{^tj1p|$nikjM=Z~J`HLWbP zsu29nkBSBX@%xUL+vRfCdOFJbk84B`VM-29pdhiUE@>T4)ixCjk;v>Dld z(wwIIORaF|3rQx`5=$n_3~e@qUp?<3Wr^hcf+yfkF~vpka(qFk_{VF^!G!$F*d-+- zqpCiT9MyTr-KQbbz1v=Qf+reDEva^9ieCf$8eO5_^zt3!4JV;;E;at5BQfE z1~>>@rW{&NN@8y^kVkdap_D{ zDsDB^vAn7(DaM=GqoH8sVE7^{me`hE>gOUe1UpPQ)0AjG^aTyxnsXukZT&4ek}boI zt!Wh#w>JTPfA6%f#)JvylJMiuHeBHDGCpM^Z?*{q(h^-c1$;aF>X3yP;zcUEw$RdF zdMy|kHpRhvER5#)om0@LqeZ;RtsELZ7y-VxZ^$(C5c^HOhztH>vm&|8HS1Dpv(KyA zrI4O2av^SV%$O2zgWH_1J2BUa)qUHd^ zX3hN_IU@yGA<`W7e+>qbs?XAN0Xl#ywlscJFj=EM4iP(Fxd_NhfF3Z?@L0{yB3_*4 z$`#@yWz$^!rL^gh*hIJ9oPJA-JP9L5k_Tc|$kA$EeVQD($(x6I`_oO?xNPI#Dw_k+ z+*q7-8%4{Hbf7})rpueX>-S9Eb~~+8Qb0lK$Wquh+z1U9*nd8&vZqWYd7RIj!Le%U zt1FU^LwDD-eoOm6{gBuh2PY^I)S%Y4T5Y+YRhK#S)BUzK< z)AcB<#PSLe9XM6UBwDZ@M6$i@j!mAF-a0s0`H(N$zn6}9w##0yh%-o#v^u#th-aJ7Txk&b%wJ;jycTGqSt8%2J>Nj=Dl6gVN(s8uVW-s*I^ z2=x{(O1^P7!7~_CINCXbb?IR;EU{)Mvgpbn^{ANmN(nHqDllUDj?tfOKvhD4MlQ35 zIQAgnZdd!FJCcR%$*#B$QWGj0c)fR|%r*&zrxGAV9RO6wrWBO%rI_)gwr2FE`D0;0 z$o@})^4fdCjz+0PVCv9i77=6%KymX~O<)uGF^J-ed|o25cTi)(J!(@@yj-$GfGSIu zuhmfz-@FWL1;j>=y+a&@d9a*{l%o$jODV(p6T-K+&C&Q%eO4}b1$7|0*#+qZCTPkW zbUhUf!1JDS+jh=w1eO zO)JHG?ore3k)h~PNcTqg!OW4r90PatBc@ex9qXOZm8*81wz!|t5YF{l#G-%z};lzxizh&^h^8VD-*)*r1oL4eYZnuKJYA_ zytVyw0he*EU#CL4OzVVR*BlyG+nEVZ)|LU#@F+LK2E$SYB9LMf$eph6-#5v|3W}RJ zsiCnYGq0tb04alZB7y0quxb$h%E+ujRFcgYX4YPv|f566y;VA-AZWA2j_HRLZ#Ju?U*VtaeyPNslzBZ`&M%!7ki^4-jh%z9~( z%bR1iEf?_kpHiHF$PPdd4T7tyTH0$RuiH#>9BJPcyHuG$F-i!ZB6HO2fL@ce`mJ!^ zM7O!eA^S3|8cV7gI69zxV9i)ymML;-O^XF~o2$9(d8l=}NLO=a5{F)*`r*NHVg7@A z@ybm{*R-0XvVod{-++Wpq?+G9JoLZghX;@=s~};ez#c*0%~XGcQvg7vgCmI{^o&G zsr%JeoG`(s^-_Rr{w&8oP>yGxIb78RrH# zf*Of>{lWdC(8*c&Yo3PUVjf+s=v_iO4ZgvuSjN95AMgk8oz(!8Hs9n%&>Gj{oea0yq zI#m=*_peXjA73W1KnCvF&jQ?)wOU0NGbWSMi&{}hD@8jq_;2~#rER0E!RPlpr=$UC z9RPa)BU3ra0s!IN(U&iADGew`ML`=)`%~1MSALx=EAfTq{Wv^@ua9E`{Bu}VRKzh5ZbYHe@#8h0J7w2+QkG+keJk|`V9#oQjK))dMfB=BFzx^E7!w)o* zM8d1DlTM0e9%>vX8isilP9|k+lN11{&sv%!cvXl&b(VQwwv26%g>cmGS#!C5q131Nvm_L#a@?iZXMuKZ>bcl_N0rAKvKUhlDhSeL zP|xCblQmx?#e#Ry`At;Pk!e(fq#5?6wi}2Gp8j9qzx)x&8jcH+8E#$pPy@(JM`h@9vM(D5X71t2FpoHby#<}Bk{MR!BCSEC7Q3h7#M;mjXzeCuYj5}eQIj- zer*Ue%G;T85|src@PR$R;?|TuY($-epJ)t0#Qe@vb5+q(Sdf4@nFq+w_LY0z9lRa0 z@i$5*C`-9HcJ0;r16}RwdQLIJEU3qNmZIzr!5P@=Pgw!H2e$tr2kO<HA$Dq~oI5b%IgH3%?E`HC%S^S;S z5H8KQX)t0hU;|c-xocWdHcSwLkoLY}O-uGcW2#__**-la!oKwJ1=iuQey3|pBBmX~ zX25xl1tExT&8($Ik4l354MP+KHq*>r)rzKTAHQ_k#jJmlu{D)=&Ore99&Xj1AjHm8 zfkgHBicoRBdRz1O0=@#e>EmE3`&;*LY{3VZr#kBQe+FX)@SB=>iv5lWmBZe#=I?C3 zsLm?@5v`a4dn^N(e4e;#?i&Pb8*P#kG}9Rrk>6$#<|z0G{One60GYgz)}JUnIz}YV zJ_3fVvn~2G$GeA5VfQSeOG+l|VDM9iA6t@M=KcR#z$=N!pvOmfCgJUw+h8D#?`Kk1 zW(FUB*u{l@*gOWWoKy4mpaA1w>$Qm(t=RjtAN$tR-F=GM+NBB{84P{yFc!WIFMewE zYc7s1K(=S=xfq(Zb7!P`)poKhu;aU0wKXf?Tpx0iIA+RDfSVX%zvg*lh(u?v=kEX6 z+lzQDu^z69*a<+RE)OxOM#dC5?JmT|qdTdHMo9o>$a;7~ZNsh7cPi*fr1y)fv3fTC6!yb2&!vGdSM{D1v!?ae4X})xeY%!H$GiWN z8UfR?mMFw`boT&2I4I|0!YTMSj-W+@!e^hKE-cG$n^l>`|P@U z?gnlUFupQ^BGq)I>OUQ>&SO-KNAo`Cbn)eq!kox1)Ctg{}5M0y;ZV)-kg$v2S_z-A0Nm_wJ<{K-hr7=BZyGB)vEw zsd>c+fEJc*H@8={H*pH*oI;T_lX4&Y8Q^3AL~|aZ19(^1_!-Cb-p6@B1c9YW47YXi zL~cE{()<;K180M6^Sv7PbiJ?eS#bQSDSl=D&8pmNtu-codwxk=-(jaymu;Bsrc{_f z-HDg z3dlr*HL2_05XjARxH3=d@fx*Bv5&j>qpuHK!IolbaA>*vydEJ=SQ(w8-b4gqE!$b9 zvqfXBND^ziQQnLh^jz;P#jp;$9y>v(RE9wuC#)c;27rh1&Rx18S92_VQjjPFdfGT}K#06}q!Kh~1*2*mPDS5e%-Be-e-6|k4G}O^QS@S#2?s-ks2d2&^usjNvTVqpzXQBPYQp@L+-*27pU@b zAPM==Jm5-33bGFw^)s#zErQ~;QeYKC-#UQpS_#n^Z3Raf?7ngr;M0|Va+1eCu@Zi% z(N36b#qJ;l5o0D3x7eEpSzyo+vTt(|fmY}d5ew=EyojvXzkpt{9Kd*h93k`4Zm7N{ zYm2@}dYJYMgs|MO%YCa_CIip!$WTQCvV}$=4;JyWkPK1^~S4uGZl*{y=sq#4i;+t>>@TD#jGeGhrT#Fx#Oj~%Y$F#)2yP%~V3m5qIA>8iFGNpAV~Wy?)bBLKWgO3~ zxYuQpc#$R5aLi8JVE$iq?J5_!48DT1%72``D91JrZ$Selw}W&zllmBQ-lRO*4{Z7< znG54Ew!Ga0KM%#qC?lYJHLU_Har&y`I~_eRlI$a(aU0uOLW*o6AK$LKma1-td&7t+ z%IYo$u&%d^K@A=_zbrrZ?n1$L=3cmGt;ugu+uPaB&dQ!E;{CD0 z*rc&xiYb4t6lJ@#q|S-GoxT|5JdKcfP6EyaPA|MjLGqdYu8J5w_D>^YW?x`3N^x3{ z>OE)*jFK>rDh{KSL1>-?J5voZT%d2;VxkyazT9rFJ4-&^=g&--bgRfXj*O%_8p97| zE_hASv`JN&ID~(?E^s$>{HsW}1Q7p<%%hS~=tapJ;5O7H;72blbVye)^mjXgSv!SG ztL&Xwi{t=UIEa!*b%D@;9s_p*n2B;|hMl-%_hl9zmv|Se0pYKrc=;y62{9cS1!g-m z<~ThZn~5Gl)a+#ZYIpP39{~fy_Im(es)e~C*5wy068X4?=YnczCjHnd%baAQ(9*se z_;$$)ut)lovgszxLwG%b^^5)BBrx>97U4CPhI*mamtS=)-K^R?106nq*3=599cglu zq~H3bEG&GQI`Lm_sj%jmzoX&{{(;h}%?nd?eZ@;R1r!p&APT#FEXtu0cqUs{2=#)7 zMgVPH2B;^HwMl^*N1hU~lvUlvUaO~=MtOvfAJ1v$b|)lhS4a8(IoZ{`HvBKpjj_2h z=j?_ zTF*hwR6vtJhPE(!7}K96-qhyD&1n+FCeGQ1GON9(aI0Y_ks?t0+vBWI%h(UwK$`u6 zc}4qA`AFLpg1TJ}?9}>h0%;J$YCtU+|5sbFF*(QLU)5y(=fT;8RpKPaGq1#@6iD=UXOs~=qJTGBR*!wUC$^zO>Mz|ZWyOGZUZ7|srDq+2 zUm?46v5qL|@rA2J=aH>O5i0_`$}NQrM#$d~qncxih{!%gz$$ACXkL}+QoAp0v75Yn zhS`oOVpPG@56on=IegpRG3(%Y2S2>_qjB-flhv;deqUEcIhp*Ht=3g*FOHGpzG$I& z3_hp6r^*kH;AYq}ptcgNVvUh`3h(AjVZv?v*62Gcr;0{4+gwYYkE%@&?0J=XJWq;w zk)LrUU%DMXO0>TtPlR#Hxl*0StPLcae1)HopPwH4b>>6r3zrDNJKD8N^agkl691^y z9c0etMi;2QPq?#>aj$ISq%5$#AEgc9d8s!mOto=pc)=boco8(;!{dY^A z$hw2VM_dg4a#XX*U8X^P`im6>j(JFJxBZdmi1QgPhI7+i!>uu(#Tw2 zj3dZR0g=NFTyglAWOT#Id`;`s8;m{vDbUtHNKW@&Dx2|={7uISX?$qdk3a1`8 z9<7O)tGD0`mgFQNbq*owcJhpBu&7;Qycrd%U&q9z4W!O0kzm8zTSug`%PX89Xx+pSZpfyA}FKo)k|MR z4+>lEV(*t|{9_}ns@k4TI~hnFQB(_{VxK z9HA~1Jvt1RB7E6p?81->u8fG6aXbIh`IK~*5O3R3v-?P1hgZC&g7(H(ieV_{OwL2k zAs&51iCqW)1=T(XC2%6t|Frr}x?Rn{O6_tkv#C;QdFxt&j&g2ix$=;M4txmajKGWO ziZ!iC&QL_#&}zJ9&nto&wf-1IaHc60$@KOje$x&dacKYp1%^5&W2>)m(FHNX?@Kfd z&>=8!85%Z|7=2cC94h0aLzW^n%SECzAd+!<#|y)fesvBTL%UILEHQ2XA^>Yeo4&0t z%^RmE&fX+FMO!`H(;LdWmg1mIM=j^1dO{I^%^0_flm4w%<*i7eV6XNNm?kI42A7m*iGa=&TPtC==cK->_sFfmelO^A|EFtJUmkFbKnZwdk{%H|s|yIU`!CJ2!?C(g2OWV}7ryQ`Bo?ly zFa&DF@B9YP8^|J?&+)?AUd1{RXrS|jNN>G&E!vpSvPyHAef7_g<_YX{wV~e!rWDsWu$nh` z=JSQhfFeh+?mMuMKV+-^>ITpunhZb82fSG zoP7FB+P1R^%A<@a%HpB`&hys(Mteqz&)ohBoqCby5la1f8mcDd@By5LZ`~Z%qHkL= z0#2z+TYtjp|rfb){iFYL* zmIw#^DZ@HRlfZ3~&VG}iES=eVHN#+DcPn;a#Owbn8+|ELd;3&W3I7A(CuuEvRJ0Lr z(OD!!TQL!bdBYo~>>z0ay*}qUOAa??-Do)T<%A;jV(7`a|B+h&1Y`jt1Xx9vbj}j< z7utiW_Ys{t(Qk>W)IRr6GtXka8mUTj)C3zs7!QM@k}Jqz1gr9ov&Wymf&vQ+o4P^) z8f0iyc<#?_a!c3_>yJSacEv%wCx6D3Ml|GaqSR9)S-K_SfH7pbyL}1uE5^(`1r%iN zmi`gC1^WLudqsuaB3tEV&75;K#;Eg7Zf3P)-2&P>e=fcxKKXu8NY4Z7J%`u6j&Z^L z-K!>SJQG{@@y6GH)26f3hw@^jfp7WC-N)Iu;B;zz+rPc$v&uW7T@h==IhpzzV_tY1%5(PKt$bd*qb)W- ze$O}KUYR4eb>j`kKJFZLu7jsgr6t^c>f_TNl+r+)&q?;U$nEhE&_ndvA4T43i;Y#$ zO5&mG{MEV*D(k6B+;w3-)D1HxJCmEJPic`<5c%8y%NrM9(R{4YYb6j3au}DR&!c68 zEp13h&cz6C^37_ZeIqO6=|xX|f7#D1TCOt`BNNI`pzdmc(G*+R;DkXV0;;)_Fy}&^ zp9jZ+$s^c(jMEHnK)>(1bLe>f)i{roQ{933&`JW@BL7LNVs*rLwq~LHzo+qhJ<9F0 zL`DEE59GJ$&c2}UrHDHwQ(EN&#Gx|A{Nj&Q$r?J5K1I(AfJWK~*-&Z$$3Q4v(+#KS z5U=wQIehb%uWB>KRa@eJCC-EP==Q0_C|+rcP?zLphsfGQObPOb?i7cfUa*0Ep`6vM zp8Vha4cg8c8hjzFF6NfUO={g9uD^EaggWyi4!kR{?tkUZXEhU6MX#<_-G0$DVQA+1 zDP^q2fmq_lD{fAL$xpgx2c0YH3_@T<+DEf9DYngthf!nIQb`dUxVx77y4o;cO$LCH z#<~IP`9k~X3J4hkAq`qS{|NlY`DE_}!>@H#Qe4B43!gsF9HNP%r~`31O=| z3!}p&A<7cAhackCGvd~X1KTmx#6GO=mDEfTu|boa4AeMvk3+T2_3ZON*;L$!GF)W*k_k?8(R?)wTQvhY z#pIXOOVF%3WK~i1U*k-4v&K*jHNmg>LZshK!Gz3eI5EW>FFZbDY8v&B&=7(Tf|>=< z1lfmmWIr|C64hT8bmFJ{xl4m%9wbZF7vx_!BS*Yp)->ZMY2%&Q%XS3|!Nl1N+Q`O9 z^s}^SO05^*9pZ}aiH&t79H0tR0j}hUn(oXOQtJMU`ZT5T`zGo)gKCyj5(&#A?l>LI zhWS_$JoV?$Mc_Hq>>m$*gEFN&Qa8iGlHVWs=|ymq#XINJD^|L-O#*joG=!z(O7@}~ zCBHFqE;(($ETm>8m&37h$A%~|H%5-^AQ3?4W_gUxU1(`zHES^{x+8y*432spYj?Si zVRhXcf~Z`5F`7Hd{*xw+f>Zy8!(q+N znHDOtl-HPP);?^}g>}G5j;6T}t>+!H}10On*2x#h$k*oB)h0B z%4F3%wL%`vR$pMtK2*kd__ynv&u(J=5&flfnUR!;ZQ}=vuV6fq@!FNKp(9j6QG_l9G38ds0fvCNl z+8%72qLSIKX?*u)mP6=J^oesxdLp~!v=waJ?FRrj@E%%vV@|3TL!Cu(kT>*`&!%{k zm!_Odq%j6#6sG}j<)#9OL#J~UJr(yO#!+U5_3g0JoqMbjw^_V=nV~(rb?yv==`A?| z59kvin|ro#W1Q!!`8MwOg1o5Rx*+07uE!>?Xu}@C#b6OtMo>zG^`bw6s0{FhnRB6E z7aI;BEiRyeZqbI-CpS1|7;)xD(b=OA#ea=%x@!L{>Wj3vE{aSD8Q(nSBnhBM-z!|;ZSL&-RPz`QR!rVRu`RKYVJRuE z!^Jt96IB_1sXec$x&4tOO}qsy$v+!QSs)bS|E_$F(V(+9wd}T@kZUr9;6h1*0rrQ#NDxP zp>Krry6*tA2gW%#bWz9>=CZ*3iJ>2JgmW(LkU^7%ybsE13W4c8vk0mcON`7FMi^%< z)o!{K(FHDOwI`Fr$S}hHm@ma0=@7mtm03qFf?V8)uvz!dv~j~VmxxlwszgeO7fIXl zPx$3!CI8SQjnx>`r4!@r7mwjmsfs(b?Rrf*(gFxkq@P5v%NGKJ8tsa;RV9DW5N*bL zNDj=evCouM)%0LXlPTWv;I(v0#T%%bQ-EjPh6wa?;k3_;I*vE`X3jlis>v=hnmPqs zm7=qfP>{CSE8)vTFhU_#k0u(Y7}=c+4=Js2q`pa~#KFlYrZmIDz0b6S%1bObTXjZ= zPM#XoDBp9}qG==*nXsj@6XG0uIY5sq*}#64YW7K8fNSm}SbVm-d`$Po=WYNKk*dE( zc!yQUJ8UWY9cIj|OR4U32N8U2gxm@!_0mF&4@W*nE7RPHSF{9wvf z3k4V?%^%53IJBE`v-D1O#{NGS26>L4eAVRjeIby02tShOVb)1PcLirLGmxd_Y0vv& z83p@RbCU4iLH}C|_*h@^oSKG1yJ41g^)Ox8Zrv|PrZ|EiSb0hy4=QhOu#{u+<|nI} zW%`832NtM+sS>$qoqccgYCV_XApFWlh$G14;SXJBW#{EOF62wM*qCo;MifzG=24*k zz6RX|j8qm~TD019RvPX)l=6?*!fohPr`%0+E~}Y;3Ef;PZxh?WEBC|WM2O7lni9Dh zEBelwrES(&c)ekJ$*sG=3qZejo#@AV*>!Wh^g{m0X-{b6?%h2Q zEeqRVp(Tfa*Z8jT=3jY|BU6xzJwLs(cxLHdZDA7UOzQ}nNHBS}VRF>?e`-nxV zGC%PS%c}1V10c~Tm^U@`8zNgXjby}j0kf3}x0Y7=YHCwlJ#Ga*cwjYm@QG}3wF9Z- zbnV|uc5EX~v(X*#m!t^b!_BIjAfx)rzP2BGJtm~hJ-dmWrYE~QCat1~@Ekp_u{&SH zoHd<0>_{+N%%q4RE`dI3LQyk;{=Rke&ymLca(qj|O2gqnH^7Q^MX>ZTlhu?e?aA89 z#bl=~VPcb$k%JVHe0PZBKR14e-QXk?>1t{xcslndy6qiv0noE6Ae86PGtZ^GGwd(< zsINW!FZ*9kj^Qo7Y?z!yU^P7Sqv*DBHUw22X<#RQn=!T(><~)9@s{GYsdX(VcF*7Q z595n#N$OB+5?}z`e-HW!zdh#0GEhvVao<9#Fryqz*k0yc6YA~gZAR7RWa$8kX29z_`!Dv`BMw%1FoR$>Vkp!gSYnl z*yJ3VcY8(2MNrSXexe-fv5o~(D_w<%-MJG7g_V@R9wV*D9SmE2eB3se289;~-3c(Z zls(QV_xFIe3L=nmVVVihk)W!jc`ECD6~KhJh-V)MoMg@p;ICpQlc3MqavINDeC6TX zv>vCsbhy1;Lm8vI%fS7CEiIRXr$FcD%PTd@m=85PMGx=KvGiqZmm~DUlh9W={SD^% zIeYzwJf<+20RT8-RD%jG((-uYPC3R&w9s3~mZX)D2_5G^L@;!Z8J1vGfC z^3-_7#UOwvc6`BgMuRrRslW%RE<<+lgC`+3eG9)|tY@V)SE=#`MMN*T^&LRQp(#Kz$7C9H7iVdU4JG zj-S8ky(t=TQr&;vg1b#EHErn!XA8DjFK*@u3Nyh_%puaxMa25_S=_o>3;*Cun~s9{ zFw(H^kRLzD^B9E)QALmq?KL73rE2)V*zgWdzF_98JP1Hg2H~P*-c{r4>~GeW-kI>e z!LQBr`-RToWR`7BYMSu9hIPNTm*XQ!;W_2#2XO7WU>uZZ+Z+#m53qyz++i|Qamz~+ zGtLTmze9ITHl8>RFSeU8f$0zyrvkrjRJ@`N!6`iBt|*u#^fc_it?&+*%C|Yhg?Dp= zhzh7M3U}~&AGBd8E3l2K#GPewyd#>WaK|?}T(PRHfIj68(6G#8-JodUv%iX7A312> z@*EB;b7AignC@vD^I0fgM1unUZr9e< z6vL;wS`uJ^GK)aKA6%9F-+d;~n$1rvK;Ao#yGFiuHLOeGLRX6jGhi1bNZozgcTyjI zaC*Xw_pRd$F|2R$zs!ka+^=WKliaC$>7Ed*J333YNJzJ@o2tZtNEr{VI6PAGj7s#c zl-Zp?$!KwW&CN0HyN9I-`A9jj?}~T=9a08a>p#ftcm{DWxhE`lcH(+s>$hviFKKtq zp$tkl6DJYY@z<(GW?XF#m!!KB1&_W1HztX*B1&R#<9xZ)v(iNr*{J!bW2zR*S->ZD zQHFbuJy&g}U2nqgdHOE&`E&@~KQN6w?dXW&|6U^HEbf{!SuKpi?;3Y;H9S?7J~h4# z-}FNXVq@#Ej2IQFZFy)f4l2qpw(zwm zpc8+JKE_)y%|Px&i)?puBLreu4(KB0$6+;lP?qXWsvb|^%!3d~q8C@Og}we-li6BK z9<8^f)CR$If}f`Qg*JG%W?D#p6-WK$$B>QF0a-kt$Xb-8gjZS9l)hKI7!x{(WOf5S z=REXCzdkMZ)F$<^j=rGupB0=xQBJB>Wy;@aIQ{2p*~p+3yli;kN04q$#?8RI{-H+2 zoC~^UhWImpY$h8uvX9wU5L8vLqw$-2h$xz`0&eOO90FvOZ9<(Vkjj7#_6q(hv~{jE z)iHS4G1b}L$_2MN+~8NMo!?4zHY)K_5yQADWwuAj7j0(3PlZZ_iSB?Id&-$;yy~{| z?dw2cj~%C+R%O*G%GbJED}KvS1dC|Z9|b_MgaO~3=m^OQK~JWt94A(r(5aJbA7-;W zx=;DemvPhZ&VslYj<$6fbT`)g5)p;fS*Joa-duF^6Y+)NdL2y?ac`%VxOS%MzA$ca zS$6z@^XKOkAR!w{R$ue5JF#D|KMc%w>g@RP#%7i>b;5*LFA{lZ@6HAu%GMJ5v#_@G z-PJ0t@X;|pI#^K+Lfinx--=-y#4V-HtsKi=>1qoT%g4)K{=MW$a!hV3tW22H001y~ zY2hySa&VL$OqND(Iy-g1j8gqF-6IHDIQjV>+8-f&2=D0Dj`8MN#H)a!?b)53OrOh2 z!O|PdxT2>}_+c{?zGsc_1J7u`aHf33tg^BkoSlg~-px)Vw81FQ1(+5z{8{-L$pb1| zS*rT8fYFog`O2u_J~NKr!a{w&zr=;@Pn7k%T4WB8-;GfF&PW~*&b?-cQNlRv%Ak|Y zYah_h-F;xORn~+nHD=?G;^<@aoZxHwpU1NzQ`b{On^9q^KV_UW zK=qYcmPtsQ?DU+1YeVkeW=#1GsE@jXzio?qbRRcN`vT?+CQ&$I4~ry^6Yml)(HHsv zvEGWP+k5hwcN6w%?0+(XM%$(Z{s4KLe{UE2W#5eB6|2we3$j^a1Q)hBm^{GZ)EOOc z+pnk_r_TKtKo2X}_f1xRkOoAzK0qb5Z7P8v%%cEcC++ovsQ!VXyGwBaM+skZy!4k$ zvzy1dqkaBz53z5UG`URhV`?hKK}vyDy5TgOAsu_BI#0)!aBf7OlAbuJ{Wf+wlpdyS zvIehS*b$bTPUbDX;bq46eePpzt4BOq{sP=>tq(jN00V5!FKZb;D6Ri2C`Q8L&YpLw zw4?Ns2TqmUrGjb;pw}hO54WH2{aWbCacJ>s8zG|s7Ho0U2KoQFhN*C&5UxYiKs7s~ zh-I`y*~$pnobHWYb$^wzo$;F)22aG+*j2&g}I?MakbwJRX00Gmwyhn0@DF z$THUOw&R=UH^SaoyD2JisLPbc9R-`Ca!&C@LdSKYyiI&%E8v})r^znYY#Z0q4H?X5IiU1 zNF&8s#5Y93HYsnyu_07aWlBpDv@kS8O`uf?wH*LXYHIZs9QNR9!@Cece*iNhX} z_dS^|7U872=}lZ+3H(9UqJz7znQ>Wz%(03OP{(}M$9mARX=`$=)NF~n0!u{_w zcK?J)$i0ANwg;|T1#Rr|K5*Tw$0RL-y0ey1AAh(pme*9J%?#9rbUfF2gQMD>fSaBr zh~bbQzysol4>CzneG`TYkQZHz57G@K-3%^99zG+?$bC3PW~)-5?SHfSgz=EpXp+*1A#;zT3wskt&F zNA@a$IWI?M<*<#emf0;j&h|%ZH;(LqSUf*f5aaPNUNnznlX2*)ubqipWRWZXlx^6> zyv?wwm0I@;J4^3e$&%@sexL=Uv_ioG%j-D>8xF^PSG|tFv7b~ZYR|J-#w=iH?v6uX zC{+Wz3>+tVNp%U(>Bu<1x2N#69w6)AkEC2uYmG2^H|FkG*xLZcR5 z@|fQ@I$EXh;0IUBW~vDm@@EyjTbRn^CJZdALM3f6z}xfcGR>HC<;JoDSIpMtiqGlq zq5Wj;Hn$|5EAv0-|6$)kdsLv}=Bh$Zy{fEipF=tw@wc>6q-86Vm*<5Z+B{SxwT|Z& z|H@eN3OWh{SH|T5}N7Pf6GgkLc1Gd$lDk9^A-JL|# zkwAdz<@>Jq|0_EHS%pDIy4{VU3={xd`jOIIAE(O7t19C6{E$gqU~7a}ITR-?#!B-W z|CVh!ar|XP4fwx>DxyvkJ8`pm63u~R`}Y#~A@Dq-{P*R<{kMHCWzTWf1d)@buQg${ zD~XOR@rH}9=^*axz6@`)d$G1=0{o9Pevj{&)OQT|fx>kXpG=qW%#b&zSRBn?h#ydFf|ZdLkE%=m%%Ab!En%=M;RI2g1!9TRq-YO+o$OBemRGb^)+u=FZoBO`#Jw=j0CLo%#`>pr+#~S%g1OCT66w?8dCVfH_q)5)&9OruDf?4ZE`|C@bY73{0j? z4Un8MT7w=@V;t!>jl@jd5U-V?s*PTdig8|E^uza4| z?XC8d!Vjc?`x@9_DT)=zQfQ|9&Q@6~?^Kh=-LC@NwN&MVI>r?|NuHQh9_tG*dBnut z;Hr|wZ$dLGt@amv_ZB;g4;ZV6c6N9eayCYhVSj-)R~EteHK|$g68sG_kVf;jTd)Wf<>kT>jYmy4>KRYfw&3ZxC$kh_afUe|KOW zi*wHP{uXIaBK=8>61bVZQHP1mm#PACXoNa#Xgw86a@0VE5TqXMx;)zHSZLYRnAY6! z(t^{}`G$s!QxW4qEN1xP(tmFaJDm+OpRb)dTC|+Znx#in0WrYp8EAfcfmqLv-nW#) zQY|`FIhGL>Y@6>>a^KhS(9n6J4Z5lWzw0TD_|D1vr>-kW;zi{kK5@H%lVLJ$pAo() z@~8n*w;jz`^mE=<(H(s%U=?e_s|IacEa~Mtpf+|Kz=}cOMLFal8Bx}!m8TcwhrtxI z5qDnrc(SY%TJ8dXpFJZ9=kjAVG~v({8*}4A=@}G&MAR@k@`3qXFylulBX_LObH?3n zf%d!CI#;(AWewxYGxy!HV((qK?(+R4kp_khA7nJ9d~y2TOXYH`5}jrErtq{)h#*%N z1r#y22hrxqnX9My)3QrdC#oZGHSqTM7ZRG;pumAGZ@cp7u}!1Zl-j1vnE84C;;Iaf zlJfFmm*4tWtr$Kgc-hf=0XE3_g}osv_4vfb9*+a(bA>3Sa(cwHxV_Z=I20D_=46o) z2?i?V8V`Cc{q$N2+aD2nO}}m;0Kt248l@7aane%>#c$PULSVjS!sA>bh5 ziN>vD2p@0)97B?p^va{nrnc32Tuhnia|o?F+-Ub)LOtA#-qOK>!l@2mUy9 z!G*%->K4_|*ea0Onw#!+#B+b-L()P}KcCWoykR6a8k9-7w5LDb^8WI|1kDt@o>>2n zN$(Gd4)fKjwH8d&Un$e&X)H!rZwIGy0H%#AW;U%OmCCZ2$Jwo5jYJgarw{G&E77D{ zQ<~d&ZezaV8rs0%oab@?%;hUR>Pzz;ieVjTPv1H_2kq<#6DKR`&r4PE z#F*PlqU$6r*mujW2gew`T~`+h&(Gdrlr{-{lj+=ysooBgH5uoh52$gM(%r36#5~_j zwq)g4;Jsb>35{LIYw;f=j@K(qJ_#f8@xK@o7rVk}+2#(twYcabxK+3K1BxS4`bH>5 zK*W;-vh0arzE1SdB8FCt$UhO$7vA4Z7q=MIOE%NlRdT>Y^pnEhZad7+)j9DT2tT7u zrZ~;Ag2k?}Zr%Rpw0-?g%E5*q`QPEK$Y{((?Xj4I`|bxFY>U_qjiIBvqivrIj6@%i zHYoc`h%42v-Cf!Qbk&BJ3ia*p`_|#aJM(j5??8r)UC3JMP zz|iOsOPFB;iQr-fV-Q-Ju-cc$u;0BQ+H};1?2R9Iek?Z}EKT5SZq!qw1#D=(RnV?( z+!?j}2R%RTe-42&0IJ9qx&1z;gO10fhR4`;=(bVUx1-NT>GvOVo$=&=VpUSVWsXCT zWh5irF)U%(X!i*vkVd{CJ+WDIAgANp^^WVj7SbZJ*lg3#9p*7?GmX8+{6&n<;$=F8 ze3++gH1~84W#;^tv4LS!`?^$~3y7Fa#O~$GX;))@ceH5H?y80af_Xy<_RTLUE{&BR zD}VXug5$j6MQICXb{II1#9hPJ&uF=CAAhrio+G?*ren@hE+p;P3M}MD_KfJ=;#O)7 zH+dsYnT*L{7BH8Vak8T7^VQ2aCuL7qmmE6&fSe(D&I){Sz z3KfSS)eC0+#AY<0kY;mHzD|NH9w$G)Z`1a;Xo6zjdTlg!BRUjgo6&Qdx3v z{^6Z7%bVa7q>e!uL8u~XJ!nfm4BS+OHkvN1ydOz)@TlaY26N!2K>8V);Y$6B;~69B zY5#ZQBm?lwX80{GfSX-w+8}J_G_cexg`|ThdYd_ogTY>x*IQa_Cn=v@Jt5<~(ovU<(mTgReYs9<3<#ta!2`U6^B1Hq`b z@aj(D-E_QDr#m%Fi#p*Py!5qf638|>Hp_z_c3jPU$-Hczg!S(FqD1;MAGlen{YN|J z%nx=`pJD9-{7W()Qc$bc@Z_xg?7_y=&qod3w(G23scwV*^*4gqr}Q+oU5GCzkq(4z ziiQ@%YEhZ#Wj)^=5ojJ2~hrF%DA_^ITWP8U4Zw&hT6M^S*h5Q>Zg=NL!?cs4&Axbj$hXFTO_`vf|C`%!s$@?OTw zh@&P5Y&N;0A-#Z7CBJd|DR7o{SU=$>5&J@dM|(7Xwn9kXoEG)>67}>Hol+H#+YSJ^ zXoQ09&QJh5SnqoeghLa2m4aV59>rAdb zI(y@1EYDMWaBiMw@WA6yW{l?OSN*y}wGz(5ZxRN9qG~eVlNGPu%}8DWb-nJ4#2{gU zdAKHVa1K`^w`9+)MFxpb{$RVgp}v6$j?~h&e-u#zSuvlU8b2&MXv+1LByiUxgyt7L zj-g-JIUWAwhTn~S5LJI7ARqp4vH#t4BclVax&J6lDT{e_Xfgwa`1PGB{q`y2*Xl`* zF{!YQX&@qAP4E1BiD&X@LI+hi=%)BGuJ@b;NqRWKUi9DoqJPk5`lspb4)$|Jzn}c= zE!_j#QiWS~+UJt@)6OZs_!lL6|DyslHR$=ou#`I%NMn95H>;KiZ(pAaI8+UMCXs-% z86YiC)q*K(hBDl3_y^@R7sw{=h7x22S~Ym2XP4+>^&1bcD`sL=3.8', test_suite='tests') diff --git a/tests/async/test_async_drag_and_drop.py b/tests/async/test_async_drag_and_drop.py new file mode 100644 index 0000000..e7ca646 --- /dev/null +++ b/tests/async/test_async_drag_and_drop.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 + +import asyncio +import json +import unittest +from base64 import b64encode +from pathlib import Path +from unittest.mock import AsyncMock, MagicMock, patch + +images_path = Path(__file__).resolve().parents[2] / 'examples' / 'images' +background = str(images_path / 'canvas.jpg') +image1 = str(images_path / 'grid.jpg') +image2 = str(images_path / 'normal.jpg') + +with open(image1, 'rb') as fh: + image1_b64 = b64encode(fh.read()).decode('utf-8') + +with open(image2, 'rb') as fh: + image2_b64 = b64encode(fh.read()).decode('utf-8') + +with open(background, 'rb') as fh: + background_b64 = b64encode(fh.read()).decode('utf-8') + +background_url = 'https://example.com/background.jpg' +image1_url = 'https://example.com/image1.jpg' +image2_url = 'https://example.com/image2.jpg' + +background_url_bytes = b'background-url-bytes' +image1_url_bytes = b'image1-url-bytes' +image2_url_bytes = b'image2-url-bytes' + +background_url_b64 = b64encode(background_url_bytes).decode('utf-8') +image1_url_b64 = b64encode(image1_url_bytes).decode('utf-8') +image2_url_b64 = b64encode(image2_url_bytes).decode('utf-8') + +URL_CONTENT = { + background_url: background_url_bytes, + image1_url: image1_url_bytes, + image2_url: image2_url_bytes, +} + + +def fake_get(url, status_code=200): + if url not in URL_CONTENT: + raise AssertionError(f'unexpected url requested: {url}') + return MagicMock(status_code=status_code, content=URL_CONTENT[url]) + + +try: + from .abstract_async import AsyncAbstractTest +except ImportError: + from abstract_async import AsyncAbstractTest + + +class AsyncDragAndDrop(AsyncAbstractTest): + + def test_files(self): + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_b64, image2_b64]), + } + + self.send_return(sends, self.solver.drag_and_drop, + body=background, images=[image1, image2]) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_base64(self): + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_b64, image2_b64]), + } + + self.send_return(sends, self.solver.drag_and_drop, + body=background_b64, images=[image1_b64, image2_b64]) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_url(self): + sends = { + 'method': 'drag_drop', + 'body': background_url_b64, + 'images': json.dumps([image1_url_b64, image2_url_b64]), + } + + with patch('httpx.AsyncClient.get', new_callable=AsyncMock, side_effect=fake_get) as mock_get: + self.send_return(sends, self.solver.drag_and_drop, + body=background_url, images=[image1_url, image2_url]) + + mock_get.assert_any_call(background_url) + mock_get.assert_any_call(image1_url) + mock_get.assert_any_call(image2_url) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_images_order_preserved_with_mixed_sources(self): + fake_b64_string = 'B' * 60 + + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_url_b64, image2_b64, fake_b64_string]), + } + + with patch('httpx.AsyncClient.get', new_callable=AsyncMock, side_effect=fake_get): + self.send_return(sends, self.solver.drag_and_drop, + body=background, images=[image1_url, image2, fake_b64_string]) + + def test_all_params(self): + params = { + 'body': background, + 'images': [image1, image2], + 'hintText': 'Drag the images to proper position', + 'language': 0, + 'lang': 'en', + 'header_acao': 0, + } + + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_b64, image2_b64]), + 'textinstructions': 'Drag the images to proper position', + 'language': 0, + 'lang': 'en', + 'header_acao': 0, + } + + self.send_return(sends, self.solver.drag_and_drop, **params) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_body_not_found(self): + self.invalid_file(self.solver.drag_and_drop, images=[image1]) + + def test_image_not_found(self): + with self.assertRaises(self.solver.exceptions): + asyncio.run(self.solver.drag_and_drop(background, ['lost_file'])) + + def test_body_url_download_failure(self): + with patch('httpx.AsyncClient.get', new_callable=AsyncMock, + side_effect=lambda url: fake_get(url, status_code=404)): + with self.assertRaises(self.solver.exceptions): + asyncio.run(self.solver.drag_and_drop(background_url, [image1])) + + def test_image_url_download_failure(self): + with patch('httpx.AsyncClient.get', new_callable=AsyncMock, + side_effect=lambda url: fake_get(url, status_code=500)): + with self.assertRaises(self.solver.exceptions): + asyncio.run(self.solver.drag_and_drop(background, [image1_url])) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/sync/test_drag_and_drop.py b/tests/sync/test_drag_and_drop.py new file mode 100644 index 0000000..258968e --- /dev/null +++ b/tests/sync/test_drag_and_drop.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 + +import json +import unittest +from base64 import b64encode +from pathlib import Path +from unittest.mock import MagicMock, patch + +images_path = Path(__file__).resolve().parents[2] / 'examples' / 'images' +background = str(images_path / 'canvas.jpg') +image1 = str(images_path / 'grid.jpg') +image2 = str(images_path / 'normal.jpg') + +with open(image1, 'rb') as fh: + image1_b64 = b64encode(fh.read()).decode('utf-8') + +with open(image2, 'rb') as fh: + image2_b64 = b64encode(fh.read()).decode('utf-8') + +with open(background, 'rb') as fh: + background_b64 = b64encode(fh.read()).decode('utf-8') + +background_url = 'https://example.com/background.jpg' +image1_url = 'https://example.com/image1.jpg' +image2_url = 'https://example.com/image2.jpg' + +background_url_bytes = b'background-url-bytes' +image1_url_bytes = b'image1-url-bytes' +image2_url_bytes = b'image2-url-bytes' + +background_url_b64 = b64encode(background_url_bytes).decode('utf-8') +image1_url_b64 = b64encode(image1_url_bytes).decode('utf-8') +image2_url_b64 = b64encode(image2_url_bytes).decode('utf-8') + +URL_CONTENT = { + background_url: background_url_bytes, + image1_url: image1_url_bytes, + image2_url: image2_url_bytes, +} + + +def fake_get(url, status_code=200): + if url not in URL_CONTENT: + raise AssertionError(f'unexpected url requested: {url}') + return MagicMock(status_code=status_code, content=URL_CONTENT[url]) + + +try: + from .abstract import AbstractTest +except ImportError: + from abstract import AbstractTest + + +class DragAndDrop(AbstractTest): + + def test_files(self): + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_b64, image2_b64]), + } + + self.send_return(sends, self.solver.drag_and_drop, + body=background, images=[image1, image2]) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_base64(self): + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_b64, image2_b64]), + } + + self.send_return(sends, self.solver.drag_and_drop, + body=background_b64, images=[image1_b64, image2_b64]) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_url(self): + sends = { + 'method': 'drag_drop', + 'body': background_url_b64, + 'images': json.dumps([image1_url_b64, image2_url_b64]), + } + + with patch('twocaptcha.solver.requests.get', side_effect=fake_get) as mock_get: + self.send_return(sends, self.solver.drag_and_drop, + body=background_url, images=[image1_url, image2_url]) + + mock_get.assert_any_call(background_url) + mock_get.assert_any_call(image1_url) + mock_get.assert_any_call(image2_url) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_images_order_preserved_with_mixed_sources(self): + fake_b64_string = 'B' * 60 + + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_url_b64, image2_b64, fake_b64_string]), + } + + with patch('twocaptcha.solver.requests.get', side_effect=fake_get): + self.send_return(sends, self.solver.drag_and_drop, + body=background, images=[image1_url, image2, fake_b64_string]) + + def test_all_params(self): + params = { + 'body': background, + 'images': [image1, image2], + 'hintText': 'Drag the images to proper position', + 'language': 0, + 'lang': 'en', + 'header_acao': 0, + } + + sends = { + 'method': 'drag_drop', + 'body': background_b64, + 'images': json.dumps([image1_b64, image2_b64]), + 'textinstructions': 'Drag the images to proper position', + 'language': 0, + 'lang': 'en', + 'header_acao': 0, + } + + self.send_return(sends, self.solver.drag_and_drop, **params) + self.assertNotIn('file', self.solver.api_client.incomings) + + def test_body_not_found(self): + return self.invalid_file(self.solver.drag_and_drop, images=[image1]) + + def test_image_not_found(self): + self.assertRaises(self.solver.exceptions, self.solver.drag_and_drop, + background, ['lost_file']) + + def test_body_url_download_failure(self): + with patch('twocaptcha.solver.requests.get', + side_effect=lambda url: fake_get(url, status_code=404)): + self.assertRaises(self.solver.exceptions, self.solver.drag_and_drop, + background_url, [image1]) + + def test_image_url_download_failure(self): + with patch('twocaptcha.solver.requests.get', + side_effect=lambda url: fake_get(url, status_code=500)): + self.assertRaises(self.solver.exceptions, self.solver.drag_and_drop, + background, [image1_url]) + + +if __name__ == '__main__': + unittest.main() diff --git a/twocaptcha/async_solver.py b/twocaptcha/async_solver.py index 486d1f7..055d7fc 100644 --- a/twocaptcha/async_solver.py +++ b/twocaptcha/async_solver.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import asyncio +import json import os import sys import time @@ -1186,6 +1187,63 @@ async def basilisk(self, pageurl, sitekey, **kwargs): return await result + async def drag_and_drop(self, body, images, **kwargs): + '''Wrapper for solving Drag & Drop captcha. + + Parameters + __________ + body : str + Background image: file path, URL, or Base64-encoded image string. Always sent to the API as + a Base64-encoded string. + images : list + List of images (file path, URL, or Base64-encoded string) that need to be dragged onto the + background. Order matters: the response contains coordinates in the same order. + hintText : str, optional + Max 140 characters. Encoding: UTF-8. Text with instruction for solving the captcha. For example: + "Drag the images to proper position". + language : int, optional + 0 - not specified. 1 - Cyrillic captcha. 2 - Latin captcha. + Default: 0. + lang : str, optional + Language code. See the list of supported languages https://2captcha.com/2captcha-api#language. + header_acao : int, optional + 0 - disabled. 1 - enabled. If enabled in.php will include Access-Control-Allow-Origin:* header in + the response. + Default: 0. + softId : int, optional + ID of software developer. Developers who integrated their software with 2Captcha get reward: 10% of + spendings of their software users. + callback : str, optional + URL for pingback (callback) response that will be sent when captcha is solved. URL should be registered on + the server. More info here https://2captcha.com/2captcha-api#pingback. + + Returns + _______ + dict + {'captchaId': 'TASK_ID', 'code': 'COORDINATES'}. The coordinates string in `result['code']` contains + one entry per image from `images`, in the same order, separated by "|". An image that wasn't moved + may be returned by the API as "null". + ''' + + async def to_base64(image): + image_method = await self.get_method(image) + if 'body' in image_method: + return image_method['body'] + async with aiofiles.open(image_method['file'], 'rb') as img: + file_content = await img.read() + return b64encode(file_content).decode('utf-8') + + body_b64 = await to_base64(body) + images_b64 = [await to_base64(image) for image in images] + + result = self.solve( + method='drag_drop', + body=body_b64, + images=json.dumps(images_b64), + **kwargs) + + return await result + async def solve(self, timeout=0, polling_interval=0, **kwargs): '''Sends captcha, receives result. diff --git a/twocaptcha/solver.py b/twocaptcha/solver.py index 2410d73..3067df0 100755 --- a/twocaptcha/solver.py +++ b/twocaptcha/solver.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import json import os import sys import time @@ -121,6 +122,8 @@ class TwoCaptcha(): Wrapper for solving TSPD captcha. basilisk(self, pageurl, sitekey, **kwargs) Wrapper for solving Basilisk captcha. + drag_and_drop(self, body, images, **kwargs) + Wrapper for solving Drag & Drop captcha. Wrapper for solving Drag & Drop captcha. Returns a result dictionary with coordinates in `code`. solve(timeout=0, polling_interval=0, **kwargs) Sends CAPTCHA data and retrieves the result. balance() @@ -1336,6 +1339,59 @@ def basilisk(self, pageurl, sitekey, **kwargs): return result + def drag_and_drop(self, body, images, **kwargs): + '''Wrapper for solving Drag & Drop captcha. + + Parameters + __________ + body : str + Background image: file path, URL, or Base64-encoded image string. Always sent to the API as + a Base64-encoded string. + images : list + List of images (file path, URL, or Base64-encoded string) that need to be dragged onto the + background. Order matters: the response contains coordinates in the same order. + hintText : str, optional + Max 140 characters. Encoding: UTF-8. Text with instruction for solving the captcha. For example: + "Drag the images to proper position". + language : int, optional + 0 - not specified. 1 - Cyrillic captcha. 2 - Latin captcha. + Default: 0. + lang : str, optional + Language code. See the list of supported languages https://2captcha.com/2captcha-api#language. + header_acao : int, optional + 0 - disabled. 1 - enabled. If enabled in.php will include Access-Control-Allow-Origin:* header in + the response. + Default: 0. + softId : int, optional + ID of software developer. Developers who integrated their software with 2Captcha get reward: 10% of + spendings of their software users. + callback : str, optional + URL for pingback (callback) response that will be sent when captcha is solved. URL should be registered on + the server. More info here https://2captcha.com/2captcha-api#pingback. + + Returns + _______ + dict + {'captchaId': 'TASK_ID', 'code': 'COORDINATES'}. The coordinates string in `result['code']` contains + one entry per image from `images`, in the same order, separated by "|". An image that wasn't moved + may be returned by the API as "null". + ''' + + def to_base64(image): + image_method = self.get_method(image) + if 'body' in image_method: + return image_method['body'] + with open(image_method['file'], 'rb') as img: + return b64encode(img.read()).decode('utf-8') + + result = self.solve( + method='drag_drop', + body=to_base64(body), + images=json.dumps([to_base64(image) for image in images]), + **kwargs) + + return result + def solve(self, timeout=0, polling_interval=0, **kwargs): '''Sends captcha, receives result.