From 2b96735709bba373c06b6937fb1bd20b575a91f1 Mon Sep 17 00:00:00 2001 From: Dustin Oprea Date: Mon, 3 Aug 2020 00:34:23 -0400 Subject: [PATCH] Change package name to a currently available name Now "phash-blockhashio" instead of "blockhash", which is already taken. - Packageified project - So it can both be imported from other projects. - So it can be packaged. - So it can be pushed to PyPI. - Split library functionality from script functionality. - Moved version to package-level variable. - Migrated from distutils to setuptools. - Moved requirements to file. Renamed to install_requires. It was "requires" and it looks like distutils used "requires", but issue #6 stated that there might have been an issue with this. - Fixed-up required fields. - Added minimal tests so that we can establish a verification build. - Refactored --quick command-line option to be a store_true parameter rather than an argument-based parameter. It was confusing. --- MANIFEST.in | 3 + README.md | 24 +------ assets/swiss_army_knife.jpg | Bin 0 -> 96750 bytes blockhash/__init__.py | 1 + blockhash.py => blockhash/blockhash.py | 63 ---------------- blockhash/resources/README.md | 23 ++++++ blockhash/resources/requirements.txt | 1 + blockhash/resources/scripts/blockhash | 95 +++++++++++++++++++++++++ requirements.txt | 1 + setup.py | 37 ++++++++-- tests/__init__.py | 0 tests/command/__init__.py | 0 tests/command/test_blockhash.py | 38 ++++++++++ tests/test_blockhash.py | 26 +++++++ 14 files changed, 220 insertions(+), 92 deletions(-) create mode 100644 MANIFEST.in mode change 100644 => 120000 README.md create mode 100644 assets/swiss_army_knife.jpg create mode 100644 blockhash/__init__.py rename blockhash.py => blockhash/blockhash.py (69%) mode change 100755 => 100644 create mode 100644 blockhash/resources/README.md create mode 100644 blockhash/resources/requirements.txt create mode 100755 blockhash/resources/scripts/blockhash create mode 120000 requirements.txt create mode 100644 tests/__init__.py create mode 100644 tests/command/__init__.py create mode 100644 tests/command/test_blockhash.py create mode 100644 tests/test_blockhash.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..5bbfa6e --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,3 @@ +include blockhash/resources/* +include blockhash/resources/scripts/* + diff --git a/README.md b/README.md deleted file mode 100644 index a2bb107..0000000 --- a/README.md +++ /dev/null @@ -1,23 +0,0 @@ -blockhash-python -================ - -This is a perceptual image hash calculation tool based on algorithm descibed in -Block Mean Value Based Image Perceptual Hashing by Bian Yang, Fan Gu and Xiamu Niu. - -Usage ------ - -This script requires Python 2.x or Python 3 and Python Imaging (PIL) 1.1.6 or above. - -Run `blockhash.py [list of images]` for calculating hashes. - -Run `blockhash.py --help` for the list of options. - -License -------- - -Copyright 2014 Commons Machinery http://commonsmachinery.se/ - -Distributed under an MIT license, please see LICENSE in the top dir. - -Contact: dev@commonsmachinery.se diff --git a/README.md b/README.md new file mode 120000 index 0000000..2391b39 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +blockhash/resources/README.md \ No newline at end of file diff --git a/assets/swiss_army_knife.jpg b/assets/swiss_army_knife.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5121a46ffdadbd1fbe42d4942425ba64dc1e7df7 GIT binary patch literal 96750 zcmbrl1zc3y_cwfop(Ld{q$NeVK?Fn^=@bVTa%hkg0}v39?vUwLc zxjSFUcTqg)Bl{~J4gHFDMHLXmQ(p1VUp)6un_s-_6>sSXvqafkmD$w&&tce%H5qu(*j~|;cCe! z@8sxg0rLicUv<991rT4wmJtK(sPO-$|E==3)&HKkYTI8H2UIVbB0SEz7fC``om;nxe2e=K001|*Kpa9$lGyomI z5HJHEfDPaXxB^~)AMg|i2Eu{YKs=BFWCFQB5l{|P1NA^N@DAtzdVoP-4445v1Ixe$ zunQam=O7RW3xp3M0a1Y%K&&7x&~1O@Y3E)oXS5BpBQOBQ1(SnsfO){8V0o|x*a&P5b_EB3!@vpPY;ZXk z0qz8kfIovb!Kdh$=p^Wj=sf5W==acd(IMzA=mF@j&{NP0(c$PH&_~d}pzoqzV&G%Y zVsK%IV<=-7U_ddvFoH1>F!C|#Fg{|8VJu@DV`5^GW3pq4VBW(t#I(co#e9XCj#+{E z7IO%55%UNO3yTVi3rh-11Iq%-9V-|s8LJel4Qm){8S5K1E;a-9ZEQtsBWxJo&h?|64iTern3+^c%F&-zLJe~=j2VNvz0p44@DZB%Ge0(;1 zS$rdWcl=2FBK&szdHin#Bm}$!$^@1KPY6;8-~_`2+l1E$SqbF`%?N!669{Vv2M9N> zU%SqBUH-bo^?>WC*Bh@-Tt6ZrA>t>}AaW#nMN~}GMYKwcMa)L5Kx|3;f;fk`op_N1 zOu|eePXZx%PLfOVkz|<^la!rQnbeLnoV1LzpLCaum`spNkL)p7Dp?EJXL2w(8@V#M z19=pAHTgLC83i4M9EBA{C`CENFvSTa4W%rl6=fJ@1?3p!85JXy0+l^gG*vy-95p&M zC$$!}7j*{pN9s))QW^;w2u&DGHO(|F8Z9TSHmxsh4s9>(5gk395}h+$GF>~}COtX5 zEWI6l9DOVO8UqP~G=nWe977w!IwKjQ9HRqc65|KP-5azw?%nXX@#aSVjdLb;CS9gy zOchLX%s9-V%+}0t%mM9FHeY3C|Z^a$Z&5XT0^i+k7m1MtsqHoqU(Kgl;+9%DpwiPt1Rx{~14m zfB!b;ZOHA^+oJ;b0*V4p1R4bP1i1vQ1TzFDg-C?dghGVg3w;+B5q1?W7hV%#5qT(* zCNd#PDyk{^O7xQ$hS(jkCt}TFr{com?&8(rI}$t+_7cSstCH-JR+71ri&9Kd7E*7d zK1(x7Ka|dr{w#At#zH1r=Bq5Ttfg$eEK=^KoSj^$-1ePYcU2BEFeg$F$U4;~dc||5gsA7rYu9A?FuhQFl8241}Mca6N8^?D6JLs=tMV@{J@(?zpM3sXx|D^+Vnn_t^c zyYm6b1M>&P4~}*2=tSwv=yK?K=)Tt@)HBg5(mT<=s~@BP*?`Z$-=N2k+R)ap!3fJp z&nVyM$XLNR-gwzW$RyZg+?3t)v1ykXwV8uii#egWg?Y_GjEDLUiyvNCXjo)h96eHg zl=f&BA`eM~Y*@-###ydeNm<2MA+4pXW2{%9QqWlFnvIN2g3YF_ylsl@p4~mWOuG|% z4f_K79}fBs6^_`B4;>p}#4vl<2Pb-`$4*1eT+YGHpIyXV;$3!KRb2DkKyIdP4eq3< zo2gz84v!#@FP_q#sh;1w^t@^w6Fr7K?)B#M4)sR*DEj32qWeO8-}~M0d+PVaU(Wwc z04U&5!22i6PhLD(4pa&(e2Vkb{%PN{ThC&i9X{88j(9=$BJjmxkWx@dFhQ_u@I;72 zNajoQm$onaLj^*ULodTD!@9$7g(rkxyn?*yj^K|-iue&}9oZix9F_4J^EK@Cc(hD( zVGL1>Pt0PhS}Z({F)l3bFy1`AD?ubeZ9qXIZvclW&yXz_Z!16LK(fJablZ^>RD&MDvRBsq@40zZbv? zJ{M{iekc+tDk`Qejw(Sb@hDjRLg#g6t)xz4svQlFZ;#Jd{1MZ4>JgnQt< zLcMi;LVb1p!u{|8k%5Lmu|dR;SIIWy5o}*CKI10Ehkr} z9H#cBJ*UrS0%tL1!{)BfCCt;#XD{4bsQ4`Wx#i2ZKZ8@M%Q?)}(*bwG7ca42~A z{z&s^{@C&O{3Prf)wjY^(bLW|{WIjb*9F!^()XL+5tk~Lvp*bv{P-~gyZ}g1L`F(M zMMc5DM9;*)%f-&l#jAK*81<)UcSrpW>fg@H)l|>a)vPGU(=({3JvTMCeRE`F6XgI! zp#Q%Pe!K^Wu)*IjLct&=0F4L)CIbEV0MMXrXVAb`4?({P9Rm%F3Bvj@4PgJ0Z@&Gl z`~S=o?tlKTc?f*Cd#)Z{{!Owu#~z>mEk;Siw&)E^0{@!|96MJ$Jo|4A*o47dIeit7 zTxL;%!vV25vhSb%)2g%vb*FCI!D9A+Fc$`ZpQl%^zXcW%8tMK5&i`QvQgCVjfKaWb zPqh9~P-g&(tVziM5K}3aDX#wyLqKdz?=yf-AU>=s9A;Kh4S?g{r>?$53&)o5dHts) zcC|mK7r_$<;AF@YMTLmzFB}4ZmhPPmhd^wTj~@wtJ}dp50S%A4Tne0EXdDP|GR?g6 zo8gUZ0?_yfC8Rr29W%2;d261Z{rT(wV8=g(HG|`!BR&AwoXW+b`gza{`+A>X{6QHM za5mUDqZ8!Zp2ec`?)IAc8|3N=D#_>)pOjqoJ9!fapjCt;X43I#Co_$v-py=J6wKh7 zyz6u8Z=FG&`JMs~?1DTV0YU5!|8Rg5YHmv5U-m#cqQaTcG2R3Pu~W9GChngKz*y}j z@;!2^z+rPkwkzM)w*!l#3j9BVlWOKf|L{;y;k~0&+xfcFGBORoxG#z9m9R^pzwAUB zZngWDMN)rHwqpG3Vc+g4GRJEcP3nnJd1Fo1ZQOiT`eO?wjbRujJ+!;4PGALkXT%`(#X`CbctG~IAKFc?l5lcb zUp}YOl+PLigE&(dYP#uAiD6IJ{pTKJFBXK{we2$wFXmX%V3yFtR+Y-bm3p1yEK+)l zp}?EGuD=}t&*f4(HEIZCCK3|A*_`P4iUbxW?$o9VZ7lKn9wZ>G4)jQ>I;=iWPf}dk z9Y;CV%L(9ls8nh~OvhoME}P8ZK%F7w^}yf$X!{dWHhu6VGgQ4i#9cZSllR|FP{`O? zTM#Qz)vrBISYcVr%P=(2maD8wEzqU2+bKz`=yPLI7=qe?gBGBJ==c)u%ut`-{(zu< ztCcjLmf6e-K~GBicGZ9vc#xEbCc}2I14I6h8@;Z#ot6gWLvq+?w&91(Etr{}a~{LD z-V^wEEj%^XHGkqDmPB=)A?j)NyNpC`^8_%$3=4@jOK>6B>fxHb*>khB$R~wvRrPOI zTGKhi%DogeFMW;^Qn;p!>W%N(&7{kyj3P;tQhZ*EJ$7}1lGP?0xDP3L{&tDh3iex5 z%ura7b~m}~2*-WwlhF&udxTtXQag*GNI7MAV-mvEWoBU?pC@JIVP*#1j)++v(TLSg zd@!t|T(Snm6I5CC^^iT&0~M24uGl}(@h)5b=0euGP8L!s81gQrK!p(zcgFoHhiLFF!{TQ`$ z_WAJK&^zC-4kh;y+L-Wg#o3}K+_$o95n?jGAMNjp zteHO+Z?u;VC$tf#QI~hCWZFB(op#F2-q^G+{_dL)ne`Lm`b7$A7m0&%v7%RaeCfbJ zMa)R(G(>|NK!+(xk-x%EemGO#cP{bj$i;2Tq48Rc*!rxqk3;pk{~P2c;`=Bu_o~S(_5$y9 z7j8U#2^+t-^8OrIe??YE@VR_+bYjqGT@ErUPZHd9sfQMaSiTw(k~)A5 zh|kB$BkRQ%`>G}~wvBS;dc@N#y=J%k4C*JBo2-*lABvpXj@aZ53{ag$>W^wNY2TZ3 z!@-if+U^6;=n0{yOJ~OOomOVs6ZZuJaay6}%tmjVCC)<0ya`^q0V!(5AArZl&d!=+ ze=Mxtz4S!+8vNOM4Vr`@_Ep^rw)u8?l_&6MfdQDO;2KT#cQgd%rh)hN!Xwu`aYV;} zr^-@5to0QZc1o8o>cVNW@4M{N$>-lmlOQfU`6U~+NKX)}(;wVa@nvJ1c^Jw5Bs%Bu zK2=|P#OiK%x;-I3me-{$$YZ;H9`fl%_o#Cg30ovxduL-z(&NU~i)!5Ev$(DA2&B3#iB8gKUM?ApBMouaB4(~68U^k!-Q9PXXZ z_C0!;9(Jqe>5q5my`7qR89TNqt;<#@#%ICxo=ck;QNI7(qk z6sXr63+t0#23}#I8zh|y8~7o;G*C+$rCX(lRaBEy&+OpWwQdES!dS{e(O8n!aw1OSeal@(oa@!G!&hHU z&NI`NI=1euZ}& z*v8KK?vRx0IY9JzYzx{4N)mfcZ6$N&ILm(kA;<0!Gbg9@1g@qX4KYsJw}1Kvu*n`T zdULy(Y(MY~1Zi!~onncppUC)knj`qQZ3M3!-ui4lXr!0)UuIY>+!!eN;HY?JJ^btKeNjzr!1#)YJa>^7ZLt;SU zR2D;ur6f5Oi^{xQv7?llMXt4ZAbG5Oz7=0YU&E`$ujS0sRZr8?e!=47;%0cNfhhw6 zTKmGS@~Bq-bd!KsRX-lLqSp7iJZhtnGGclO6*in-KQ(MF1^xn}oz)ONg6M;DctZ*R z=KZtdLt;;>DBKrnjW!2;re$U+91{nhzi|0U3Bymfmtn^?Iu@@|c32Hu>)`cCWv3}? zt*1d|sVx&6i1{XQdd0K(naC&+UBMzD)A?5Ov_xv%#Nl5+0EPlXlBYzJ=(Oh#;Eg44 z7iqBwbt{>7nv6$$KN_`dOzj$!tFIqhZpJ?uw*NL`A4+r)CEvOaXNPmHi6#h=k+d9` zTF-}=6pFh$#v8gIT02&pFd+5QT|~tamty7_70{z}&0kocoQRX2jjCQv#U6M)fFsW5 zVLY)lvLlwm=ja>Ouigo-_{?;KAb-th{%(dut>uH$&5eR#PoK4=w{boT#_~cd*GqX^ za>G~jlRN8cmwDa7O(oLWo~GYT6LN5hH;mF9QR}(&3yDCSFM;kMvan>gX)6#!n9{E3 zoRx)|euYe13V7sZ=l1rhr!scL)Khr3ntbr7xj4nu8F<^xoZj?-?-Qg?Dah+@3tRqz!oiV|+}^*jJ9Ox9b~g}!^dB6h z3WRgkQ1vpoo4N-uJ#o}m&S*UIF=JvK6>CvU;xFX0%kuTzcssO=8F0EST*J9uwQf^@ ztWk`RV9`5FK`MVeZa<(oZC-F1)^(;@WV;(WcqZ{z1VcM4*S3`U1?@X4)?`5?(Pgy- z#hDN4b?4aS2h^(8^A98k^eJY&zCZ`HUC*pNTE}hPG_{+2%2?W47inG@7l0V`uJA7) zo+#I+AO&XX3HjJ{`?5kSpt`LHf2l+(72(wM85fK4`Zw^u;>fH$Q9#S1E^6RU$Oy*i zhZT1hlx1ag1W0ezBEN52%sYg47@jZs!}@!q>BjCCk0|)&hf6#$%kZUuilp{!D2Zis z4VL>9HrMGVojUR^q|H(2oYSs1aju?aE3a*qJpKV#X{6!|5B`F4)5SZF?%AJ|+9{JI zbJrz1ITD_8q8hMWEo;~g$yh(-4Jj&#MYJb}9l#J$>1KYNT2Pz{-HxzXk*804tq*v{ zkA%+Qw(cT(4O`+D<^{v|3+ihI?ruM*PFFxkZzq`19;tf{@7MkUBTI7#vEnZJ;^Cbr zKNaXU`!Qgnn;<;)jI=G|-q^5Wer!rkc1zhzi}JRpq0U&YxJpCqmM7{-@94`bnwM$g zZJw+KgWk8XGPc)*A&=ba#z}pV$9@lz*2}+bBt5V%;ql>En>`MIw3THqQOzIj z-P}M0;ScL*y{9?_A-BF?)}g%ciA;s?ui60N1C~QO>yxTo*Ug8mrsWDjXJWX zyoQwW+XqCxjEN$8VDF{y{X%co(vy)(e$R{I%T^atiz??%pMqp7uKKndNF^idDJ$K5 z)4!Kab4HBheacUt2?W619jYr=_Zm3n8Rt#whG`)}Au(qg-#v)(-WDUp)qM+3l2OaU zc8Phv!y{iOr;n3;d2qGzma-R}Zs{954Y&mD^Y#^md2=-rQ5+6yaI*t(EAP$T{fWvE zdYNRa4DZbWRa5EDzB^5=Pea)AMSP)M>g!SffPdZ1d#Okkb>|V)E#!Mh^FBPZlS&Gs zSt_PvyX5AnMA^kowNJTHW7AltQnIm2JnYQ=-28^?`OYFFB!Oa9y0FG)$|Oy_I?;DX zpRGo(!*!N_pSg~sj*f&oE6SRAY zb;H&-PjQM8sp#V=(h26o#abU(uJSM5?!PO82e+Jf{?<1WQ9Xm`SxrtkHA+@r1pvu% z^iWw+TK_~1+t+}!_khY8`=NKMS5CmBmy{Yth6h>QZ5GYr!PD^Y@1~fMX6W`d{96c0 z$-`;0*o4(b4m}i!#CaEs(g_EzZ5#J?GR7tkV=hAF?e(?PAX}c&P7@`ajeRq>&GV@R z*CK*T`SF@D^=^^G$9{@n=~gExFG=RDD9$aNhEEr_G==suni=m6p7EG;Dw$eswIuS> z%=#a{MC}SbOX51ew>{37?xK@Te_Nq~RM7dO<6oF~VJueKnFI??awjZ#BVX z%eH;qqIy&@ru!T|A%Ia88mPa2w5R@d!`LGWeo2?O5Wa-xLU?+gH}((TA#<|#g`vfB&?q$%~(0&iBZ$^HP7~Z zZ#s74q~B3knEXDsq*D&Lro#5`*@1y zvnywm`$7_|YO%@_4)zPoy5=%+QChETHE&8p%)(oy9m&sb>G}>21 z7%|iN-8&)}?kcqD{={D5fy^##;Y<2)2#>(a4tz~b-((~Fy5@(+%rx?#E*fk)tqdh! z_Zur$U?)6IL*Kp)dYYeGDCK(z4UW!_Ioy9*Zr*s{%ia^+zcwXJpJ}D?bUR8Qo{hUt z>njg(L36NU9|B)PRq~361f^~#Rx<4iM)M&*Y0N2gdpo6-sD5!utrtCvIgN}Wlw2w3 z=orapJ63h{a@omyzrr|iZ~c*4ZjgmlYdBtY=+ctvrkL9KZcPw{pFe$9x#dDOvzh&)p{3=~zwaWk_mo<@=7~hlz9lpvmvW=5o-iTah>1*jBTF(@#M4bW zwR%hyg9bZ_qo;dMm)nftGHfHZkba}LPlIaDuqkv!sD)Oif{T9uB2J?=qYD-|W^vpw zi2XwL_zxiW#{R{J65fg^Wc^O_HtJ^kCruDCsMafE(*~EiE$Ew8%uS?6Zh6!hD5hI5 z>3!6v$jMt4PvJQxh3nrgvh$&yKfpJs(@iwa#I?Zjpq+ui7Sh)^_lHCj#nyu=r#2Zx z4DLkV#){sbVPXwZKbJ24W+AU{IJBDr@2T1G4E%)%!6j6!{Zc(J_Jp;-{j6|o+9le1 zcv`kRDB~qXESpmg{hi1kKuT?_+=QWVp?Qsp z13hgot*#B*^_GzM5cn-#F`kUmpg5^xk1B+3(_0rr30ID1fCmx<|K_NEGa8SBMw-2D?G{K{XZlLgP)S>E5$ zOFO#2KE5d|xvc2_L?YX9fMI4&kD8_HMM$;ar`G%Z?sW1{7%^9J8susa6=V5ScCXz$X7j|fFR`Bcagk>lUB^p`i5L8*p=lt+tb%q zp@;R-AM=_H7W_~9>AY^Xz`2jy=MIWkd&+~@?h;zAMbRt9!#xapo8FaI^!imo3Yy}i zjaKdKXgm*1Y17~SLZsJQoeC0?D}3LZ~aT79Vqu12<0K1EpHf_E?Qw8GhhN6Gmu*LniPj|ZZgXs#Lh^t>F~F5UX7 z^Bw2y=_Wx<&f=+B)3FnxHd=!57pCNM1_kptaetFJ&f+rhj!5d%fUSMXomd4TM_ZS+ zfY~GG+tu0YIcw{ic2+R&MGaPEM_m_%OvC=wM1*3Ir%CTLK3q-W!lo0pcDuT!YG9~a zcCG?%Gp)_v=k!%TMTzE~wutZcY2UaW)vdvFFCwNU_t!L8z7tqry&kZZhQ;3|yjs*ygcg#t7g=~#HO8EqTe2`YZ(q9j zM&*6Lh4TzNR$X7ui_&Q(-icy($Z6eCNU}7ZPglq~rEfKs>2&MGE0G7Ct8d0(YfPGt zdnA{7D>K^y%+4V4tym&Vsx27<*#+=zhvx)Nn9@7>YrL{Q;Q-ye`Flf=4b#pY?+IR2 zH*FG$rQmnPB>76G5W?%plThQ_oM>40us*;WM+$E8p*29#@K{LP9mxk(LKD!{xe%5e zLpG|Wi@;`&p>5pzk_C&1d$%NT)Gm?i^!2yM;sfdxRsv#Hd`jQ`#KV*%NIoy&e=q$? zG8spD_T+fDc4Xg)MSXyl?L(n@TkTLy!1T88u(@f4UPMgciS~@m5>ozzr+R6ut783T zfjZLD+p0WY2emc8KfvSt$?f2vowNHqY(AuX`RnFFP4OX`kP6SP`&LQp#)q^DZ^r< zWic1R7;oit)1PYdu5XQXfPBPekt@>mdfmOXY;A~>>0!~4Adjnf*;`6|`vLaki-on} zUsc3PGYwdt5Zg&Pw70UYj+!k+%=t8KdwCYsP+AFOOwRY{Y}r892HugCiF?81RAH6nCOY9|Z8Y{-Bl_$lnD{|ca_YpvP= zS*eGuH*+qs_*h&$l3U#j+_mrWz9WJ9a;4tmL&I)amP$BHWW-QMa$lE4T0{)Z_i$>n z*(S%MClV1W8!so)@t^ULDAzz+KdsrFI*#j)Q#=H~pU(J?%|SC7zhE#JxK=zf##b#E zdUw~jPQN!A9Ie*ss0mo#sw{lIJO+EW}k9ymqH#~o#pkdMEL2=#LsOucZtoTxT zq*@$b-IFXQ%GH=DcXV`}$*Bu!n-uomt6|hw5xH|lNHgh7awH@$RS)a2b-A_X@YS!0 z8$M$bHDOM<-&|vF(jN?uRcJGZzDDhy+dKZk07g1wRp2Ghx5W<~puRm{*iC-`O4)q; zU`0=w-DGpa9Syt0bt`s;>4xxi4u4icm0k~%o?bX?CgE-}ZsF$FiO}=}RA*IUX<4MSa60-`uK3 zgGX!Hs!M&PGS(?m!Z$tQfT5p;3EsI*|lJn*lw z1HjEjZo>`Awf2B;jxlY6qj8t4{h`VQfgZ$nW6!?E%$~lL@Ad5|aO4~&nXu_xbcj%= zO~1*OCql?RszNFN20^IyC)l*dtq2??7(lE{r_7dqy9N=ydbNA7Ahb4vY+B1jX8!<+ z!f8@U#%gk^#+2hOJ6BBk#1<6G2BdjU(oNT!H-*9a?A@m~n6@bJsjL{fDp^*mqWlM! zI3D|FeBqTUrAj-|80-7(9cYivKist_;6bqKu&gCdIgH55lawxSwq`6AES;W8jkg%N z>l?ahm7RxXVK)b1L~glSu61G$OLkuKR!XkWP<9s!&~T7Yo0=KdtJzup$1jK2gSQ9j zw*~Ky=?ln+pW~C&&dqW6xmPkyfAgM^ENue)0HMkE@p2T zQ982AlL5x{^}<|3eVgX2=tI1~-+swvtuy_0g*N6Qg}>Q{lvJm_N)xi{ua>Iq7f_3k z)~grqYc$$Hy~!q5E%oe~AdzuC$q9K-P8XCYW&ppBk0eh?Mc#@{y)dhf{PdkP5)VmA8sr1pNE+Ujd z&WyUqL;Oss>Z+N{*8cd7+5O~NfP-V{Sb8;QD6@pdfR>ET!|; zuF#cNY`?ig{#<&CiYJW&TMa%NB^PO(+!J1N`($1c0?=xcg4VM{MnJ6C_k8L8oT@`< z{DNp5>h+jWlug0OuKh*0`E1}ng=2Cfqa(8lV4SGvt2vV(P+tj~FlWw4CvIw_#ZPN# z6qw`lPHb{Z0Qi>~k4AJ|syfu(bsR`YN0Y~T3DK-lFsIcg{o@Q6qw%5}-5Ub;i6&08 zF1DW!b>=*^xV?RlmR*@~JD%OzaI1&PFc9BliGD!JLlhDZKYS85JwJu)KNwl`SN+2g zh@dS!n)>NH@pLXU|aP*U#Phv z6Pm+SWOV##q1sH`x&JfjK{-8AuNqIxU`|L%Dq_yDdG`-5SZP}rNy{zkhebZ3I%@4n*wSqwmS zNl>4BVuaK9*ri3Ig?^a~n!KRnB4tVkpB270moa(%eZda(oqNnNo)Z~$8j9MEwg-%Plv{^s>M{aae za{BeJXBr|3PjkdxZ}=FxO*i&Y99}3nY8gU2f{lftB~zZLFfLIxK)n9!UMMelru4Ff zW5s43^|;M(wr%2d$>i1k$MD&@yLEpKxnFqT^yXRGxWb0ghu-1`5NyF_bNOxY<9Xlh z>te9uZ~sxIs{~H6fPCz_ot^8kBBjZ_xTsIQ`Z5fXhye#_f8w2rxPRGGpI*M!9Y37c zA6YY>7+-KmPb3mge3Nt1Gs`l5a9KGtZ~Ct+=p3%X?JG_GAM8viL_Z>T4$`%{kM@vy ztD83~qxoJ;1b;GRfS?xD|3PEQgiquvZL@S zL-yac`?Tg>a-mEL81+qzR{pmb{Wby?grq~bank<2ss1MqXvyhT(Sf_;j$3uRd*DR7 z*3`G>GYfc+5%{JuKVQNAV~XNH3KjUbrKIXd1a7(cDYT_>mN$tBUPw1gv-=zThv8KM zja5A3E7^slTcXw|$o!yDAo9tA<%HA3uvg%}YzZLtcxT*P5cwtPL{WSb9vNGwF1@#* zd;|;m|FQ){3(0F(<|NA^K0yxyapz4IgpiqP@Km;c6KclH0}f`K&vL^tH~gifc9x%Eka7e}-)os+s+vIzQAfOHUR+d&2>iWiiIq(T%_MKv|Om zWkg2EmmkOj;^q$5;*o6_yB}DEat>EYEzktZk+T}GWfihEtoDVYqojg8ky4D6wfBba zS83kFWLLX^h7w{XLqi;&Ya89Ri77QG(t2byoGXhG<65Q(P2y@kTbFy7TVz>7y_Wp& zDth=UqGq+YAc(7CR`$(!g=$Womnf-iBI_zHFq%@WrVw|hMxQPF9re{4Jw!WIdQfRN zXTtp;BA(YpwjcmQ7Qk0dQ-51%&soAU!b9AprNBa74Uh%`I<6jQ?=0+A>^NQ&k_M6i z7>ocKdG=&j5d41s3*xugC==3WS!A4sT6cxwjhXuHDFkxgM1_?x8#DV8#x*&IL_vjc z6ed6#g!Wc;G^oll??rWv;gtk~F-wQh%>RZ?_h|S{>Z|esq^#AP9D!B$EvsMRFji-w zBs>s3#v-d@w3j@>6TO#hb6g8pN#_O??G}@_Kr>GE!cuVmNx8ycAs_TNWh) zFdv6|4Sc#XkvSMZmex*?aTW8h6j@}RzZB6wy}d zo#j=&VZ`ORA8IH2Q`CG)HlY)KhmlM$ru%2;06?9;%p(qm2?WvB4E$*Wj)a|L;oJd? znSb?b0G!}4axd!*>ZJEC1K{@D3pgnYVDk$GbrO_J?ltJ)&&&Wo{y~@OFBa7f09)?w z1P(g&-#Jj{O$>q>e`~NQLA^widAnYJ;S2r9@8?iTG8lYh7?U%gJDxay{X2&05#>Wc9!+ zKRxP?5q+agH(W#>q}OZPbKVRcicqe+(x^MmKhVxUj?NcoVZ$G-tV$O{RONd@9->s3 zx9d};B=oFCB#(xY@~We$oHA9y-STO&03Zx->mu)bh&QcT+JTf~waDmK$rVN&u1NuC z_rvUSp}GS3BHHW{UT=a=R}MRTvP%1m03c=%^omv3*06W1F|}F^D!gto)AhjknM!yI zY9Q4DByo9FL!l)ie8St-4uYd8OSAoj(Z*Q-D7mKK7C1wp0TExiULY}Svh1ENAvuX? z*D6XV4+Mau@zi8MG38C6IC9%^+AR<|36>EelDuI5EKG0XXPbVU}Vf4d-+tN8yHL-3^dA%gbsC(6cpgkzF$E=CipxOw9dw8um_j_+$H8!5x zM*fN{l5M?&_NWp6?z>?~zDVN;+@&i$_-eO;B=Su7EuO7KdcXMiL3nAtdaSUAlA_p- zs*u}&(IBezyFKkz(Brt<{qoCC*U}G^O!8(M=F*NkrkavqfpGws_T0EAMpgV;=?YZ~ zzlgOf0tWHy9sM*Gvqg$&T?mk5965gA?kgE^6XBjuOn@)*=H&JdCZ&v*s@7$Jf(8Lf z$C7?Ku8a<0RjZc$u_O_r2v(>>7EAvsnw9$v*`OZPJ`$1w)`uAZo!pMW4=t*80wo-=hGWX5R|9~A-OPKe$a^bQ$2zNfBW0ctF#*f-u#DO7znS z2*IeUYLg1AK&Ew2C?b|nElgaM&X-vV7^KSaG zS90K5McxGc6F$~Zw^o(BK}@zfv8}A13N-0Nb!lGR(v?UrXRuTqcOCX8A?RoYVzeR~_IN zu_?mVUL9urodl3>9&gf|WdBZsf*QtObfo;91lVBtp2Vn0=P%-SkNcZNeS@(b_&Wg- zDE`g=n;}H45pvf7G&B$xjE4H81PcrXql2%O2qFN3nB)fkbtX(w#@lktTDN31$yfyL zJhX6@*LEQne8BoNTIlYhK#1#`zrH~M;Q>E@^9qQ&g7rPpd!sxC8NGYWVQW7CiiO%^ z7N5N~N*&HX0OV)JkiRLp9%(^+>rQq2^`IBy zFW;GAdqcln%8l~g<}6MfpjGadO9F?SbeEjZl!X zjYcuwf;q_@Vx*MA?IX{ywzjjrNi2V@M8db#1iw^gcDAPTbXa`5qx&2*?<(APYOOx> z10eZ&7g;A@4@(pDxWDoBWz>DPiT4klYxl}z9;xajI3#_IAH1%#YY@|~{@g{ZKih?g z>j`_KFfnALACBKaLgT@8sgasathAwdFTHrTYVr4t#c-aMz0?!4WY{6kGEN-yrm$t%D^? zy_GmAuZJi=W{hIj!eD08+cIFgSBNh0)w8+LTg+9LSUXuB^}WREPZ_!zNfyemzSyT2 z&x-nWbQ4;GH7IB^_dmXGNa@YAtd^{njCAe(78N)?)ubMw2ax^%Zn%Q1OLs3HrM+$( zehRBYyE@~xc>IKtIX@fYKYX=SsWOAi_d)?s#Ahd zyHn`UX)Wl%u39z={@BW#BzK2%Bc~{VC4gULl#J!Gz~Z=V_EX&MFM1!(1*sSkG1KEJ1L|1Er%#CS|j$gF|Nu0|@Q zqrjjv730)?#)te`=Pq@6QoV0=M{=ZCV6nE7bwPHW>)soZPNptuaoUQr44V&wJyfE@ zGJ;CXSkiGkE;78xb!mb&Fg0}#A%lmo-c#AVi=cD+YY$7sTDaV;mLBnt@s?J$>b(4T zZ;(H*mdDsNz96!8wZrM<3h}mr49=Te1$MCe^@|xvo}@P?+>4r@*n)2=MW{3-&K7vJ z%aa}znB+hdnPjMM76j2=@5T<@(nD3qdXapGA)H9iT8vnikfx+!Y>yP0ZZFQvOt0`Q zW9**8sf5&cy_$Gd=u7nLetNDDJq38xLb?A9fsHAdG0J9pXW=-zdmYbGv*_vn!e zzkwbr ze}|XAjNN9Qr+?NoUyk#gXI*3$8^h}CXJHNlxsx1M1@SQNhpww&9^-Sr$(tNXnSOVb z$t4Be;#oW}eo3g!$Fj+A8EyQHVj?I-dv9FM^+f{t>GK#G36d3DEqbv_G9{&$cOKi$ z{@cpq3$~lN7u}hMD{J(4B>2z~aYK3$WytxLc(w>j`I)iH&LM|%d_wA?8<8K>GM8le zJP9X1>e0|zlo3mI!%bb2ufLBj1SyubDV8O-apW~&bQz(xj`5shW5roU`mian@yK6` z?(A+L9lxB;MrS%TgfEk^D)h^H&@+)gL5H?|$-&Yxs>4O2tqk!DI#E67ue$4`JUih7UHq#Oj3fulwFdU_4~i|xpTY3lm$&xvXtDS5Fd}vAhE;9_V>h+- zAsj1*D-1VZcyM-88QeOnSHMi=ABkaAyyz_%VZ;Dixl?R2@^*fE&|sg?z2+q3?qyMy z(lkE97%@S3nOX&8G*{72D_Vn@vBuL@t~mz`82T!(J^e&|u}VjeI?_dh6=6KEPnr}Q zomms)MpMHYkPWbCUVTJ72XgU_leo_HX-w#jdPlqgT1pH-3+IspP0xEe;MjI zc)(L%T}&;L+lw`P%3sBv&oae`Rg-?+BY5);4<|q{_?|(n_H9Zp<(w@}E89N3;Y4kO zJEyZp05rIM?Kp<=g{05j9Njq(lZ2@L;ry2`c2rM@duZ7)o>QsjIQW{zr)(wYniUY~ zwXUe^&a<8}F5?Y%Z`**s+A6*&XdISY>qitdk#mtvs@VplY9-tCKc^y~$Ju{O9Gy6j z;;_3N|HSF@R27+lnXNI-C^UlXys_wPCUP#Mpss`snyoudxN>KfW4BZE0T>6@7UNh9!L-@7(YV&Jud+yoq#oLX~mzNDc=myW=9t2N=Db!)>UwWOd zfhng<+-pgwIjQbP$19|O&WPi#HEdO6+%7Cb7Z$Cjjw&SJvu9R@7Y#leWBfV>eXs+Xzr-LI5gV%dE3bdJ;x7tPb<6Nx9&Q9ihDe!J}Sn@hKO{uBBpc;DRC12qK> zsduAw<{niPT=y%A-7-{&=+ei`^FO#Ut7bhDQgN+O!JWT%SJOmZideAwE&oMn8wa&> zqh}R!n~3YM=G>;rnI~>lz3M&H*WTf-HHKl+N{_d+${Yh8VPaT5yQk5BCO(dfwISxy zv|P9gf1=CSbbr9(HE)WrIkSR45k0}tLSAkw>UB90gR+DvJiU&PiIi76jptERaltZJ-}0? zt80<)rW>?xJK?3rMNaV7zWy=?ImI#PO}bGb{|^9_Kx)5idS^uGj-EjpGq;Knv{c|% z`~JCG2uI~mA}XlB^xQ2^Eups5`{bz|Dv+#R2m9(dr89JS8G-)*eO!f?lKIxnAxo88 z@$_#yDRS27r@lG7Fgkfe)nu;9xcN$k$Y5lSDR$dNWy==Oj>HYqkY$!dZwFY^W=NzG zLggJVLwS}9L1Lc$v|go1(;_>TA^;=ygLd#Ig76xfMIK?S@6dyqjdTr0ebP z!T7^#AyCCV$WjGYR_-(1LycE-A9^i9V+r5es&-o_ZuHnx8g@J#F9@W zR<}3q^b#>H;T?46I+Y2#b(EB;Is~yCxarBwrmqkVagFe8rIwV#u*?DS#MnrQUxDw`rC$aWU7ulq?|2tT;hozCjcK- z@v@5?tkxKwgmv8}nownCcP!Qs1X`uNq?n5C6xf;wOSMJ&{XY@kWL2jb z?;AW$l19Z|7KYGiBS4OubYC_U!t$r~RZ+mYbe?^RwU2twGQBtrTCl)a6TR(?VH(YU z@oH}+q7Ys|JR8M0DccDH6A(Dl1<$iO2SIW&H0dJ7j>^2EOm6OwWtH}kV9l->8ld5)pR?0|7 z31K=`r%ywjO4#$QwK{ZR{n@m~zKdwKG-VN^zmY-{1v>GOhWcfhdEiSD=r%?{g|q|y z5q0kW0JBAcg3K9LZiw$2gqP=B!RxvvYb=A#iP3VT5$5!KCYJ+W4LbBK#q_hHk;#BJ zqof1$MX=ezeKXhqjuH8svz^%L1p9?7wJaWY% z^NLh;-}d2FQECy0w`@&YY_dH}fW{P}O?I^2w@Bvsr1eCZnpPdmN47wNDgN@A6GKj{*(#7aoHS&&U`g>NhLZ|Xx*ZB-#> zq3-T{pQCbwy*K^sL@dyqM|apQ8#`1Vztd*iRk()9a`H~&=2!&yUoc(2QHS~#)E#)R z2oK!(1RqvKa54eZH>He(n=Xjx=ouIlz#~^Hns!WoX zFrHWh0SAZCIyxsoI?W6|N7Fo_7+yo+UB(7tZF|4?W7Y@e1RC~^!Y0=DJEb(Q5R<7& zvec^ub@A&oVrXTI=@_yCe6iDN;^z&og{A_}BMS zv{tQJt9-oXWu6G_!6kWnEEO!-t7?ki%;@p4M^dfmtW|;2l$ElBi7Hf(K?mrLSz$Rw zBSq_3CzugSHCdsLaU@?3xp*EuMyICf>?>(rRRA9KBbjDjuUHoJjGi10Ewor`W9izbWzZ~W@!-#P*j|t5OYH}E)}jYwzXfn zdhc-=C_9ffIsB>VpL}yH$dak;=rqV26+Sl1H1*N@uflHK3y~imME3F-AaEG~kC`0V zkL7u1P-Y*A6~7f$LCAZK2D5e46lVOju{z}NH?IsEyV92JW|bhL1bjP+0a8~3lQwm{?Wavo1MRw zo@rv$dXQ3x#R`>N>v3^Id#8WGU7=5LKxII6xNMgwr*Qxq^3aQgBFhK-;1Zusx ztM*bE1Qo7!g!H6%&CdwRZWSJh!sIjUPaAth5B6Ns?&#k)3blwLl9f2N> z0|KlvBDnD2O_z^)m0s!$hL3Be_vwkHw>pb-EK`vRwn&y6d1hsfS67IYVTPe3^6s@@ z4f;N_ppv}tokoq(tvpyQw~&Y;j4?!Tb=%OmjTzg;HxV^i3GML0u}hPFJtwghWalej zOJ;fUTm_4`a)q=U;5U9icgK(e{{ZS8yp|<@r%VrA>Nn&+-}zrUo&#P?0s4N2(SSN+ z{{YTvZhSD7Pi^M6N>Ob9;0PdN)eanMIT~ZFv)wI;e+22YbaZvICL*3vJN;8_=_{8> zUL*aNFXGA_9lFTyU~L_`^ZN;cIOO3x2^wRmkFm8K&y}{8f(C1s zY~GZ~JLl-f`)MU~@OuK1_V8Is`R}UMC#uEZkgliQ?OaO96bgrXIlm#!lo=gY$)au= zaeU$xn>ycN6K!%g=7sBZ6-*D2M|7`ng#^Vl{ercOy?j9>inc0A!g!e*TSZ8xmRV;` zaa-EzUPh9S7^Zkzs?qRekb({m(sdo)O0n5dB1uai$yxf5?M@Q%2k_zAVC0=x41UG$ zxq}^u-6>mU6RGKUM6tDv&Vr7qPK_1+nz8Eq(HyJmZFx#~psg6LY?EYCw~h2(Wap49fqL@xwO>|bJq z*A+NS9v=3~V08$Lu0P4|BsXqgq6d+f^tM!YN$$u9f8hzCE+guvKj?ED*p&K2-{n8c z*nuaHi*_fHJ3}DjA=Y$sdwLP6RA-hugX#}u?cQeN%K+(6LmY9B1nIPNHPaJI1Vm@+ zd18<6krzp7q>aTa#LNgkpWw49D>E<)yYI%|=++!!W@lz*V$3zbp94aaS0Y1D{<%`D zRe=Z4A3_N4p|0TMX=NT8TrfSlrG9O`ZnAiaXzarr@e)zB58th|L8edS_C9p&q?%|S zs}zMEw(%6-zT_;r&^`}22 zK}HspeM=y%_9~){!`qHzpQ+s=R(Ei#cjA;o#+*U*Z*;$NwDY-NMaF<-AGjD|3X&RW z#f8PS%!FY1&(IjJjRLLy#~LF@?5DQ6$Qf8DCb5mG*J$DqBWf@47h8EEqkhEb`O`0x zs*&@z5&USKUa2M86+~U#(c^YULam@kIT|do9{3E(%5cDgtoqV!Ga=43wy~CxLUXIJ z@oOXU@w{)v)Poey2{^$96qFaQt*rrh+94@b_*DBmj za7?f1e)M!;E_=H2l1G+P%0Z#uTps<%X{TjHR8>S!7es&wCjsxtZ1AMPQ-UIbKg0b} zyn7jWMS&(yO@kiZ-hZY+{{Z9TBXP=}V~^k1BoNJghj)syMv*8;(NTRYTCY_(&nlwW z_>8tzoEn;Y7D#I{nGVre@pjsSl{g^kuTQ0yIDkvK--Q(;$gi=Wb(YM}E2MFua)<%` zi7>^c^@YD5%vh}zn94{sG*Z)LN&BvKpF%wyIf67hA4z*g&8@%PE4GRBK7eayU(&HJ zqfPis9UpUYVoQ3qu0|OfxEk2#H*2$b`fN`XXk?yN#CL5^xt?>9kb}bvh>N7$?!tRc z+WFcxdt9QLv9d9Y&q7gV9VCpNGz?OI{9BVIIgEo8QZ7&cUN=MTA4qZr4{#Ho+1&8s zt)FoDP896nOJ_a&u+%5@W7Rv)SxOWS9A>q@@Lvq^viTZvHMXa+NqrdVGCoq*?P|SS z(V>@%i`zY#V7UEQJr+za1{qh21Dc*`Ph_)hvrevxT^=`Nbt>A0it%l1&-X63D6xK2 z(%Fh&uv$H=)0VduIB3<1upp3WyFE)XkfFJIjt-TNY-qU8eMZ?oja4R1+)3nFtY(w1 zUCdVLd`%)AjrdM%*_P#lJeo}pJ+$tqj#!XB8>+%7Z$ICuXNnvLZu3hmuJVkdrz{OK z_Ue(YnI6J>ms}U{iWrc+`3FEb;BlCw5j#yU0Tn54I!kUo5Oz`f3x5#MuaOxuy(@M% zgJYcYKsP6PWF!}E8BZx3$t;DL6^GioNO@qlyHu~5m`7jHo{rhJo((c}CEe9dYeGx> zIcm+OyDaQm`aPfph*)^^1cEdOARp!#5!9ooWwW-+SKnJQLXsqi8CVgWdC}0+>4V64 z2S>vJt+jDfu^sd@eI$OAZzeOUu?lpcjj%NGw4dyzRSZXbq=@t99HU^YtApEAcB_}6d149@wW+JPmI)agr48%$ zt9sQ-H03c*8Aj4f%h>k;RlU)-6V(3zEPxF?apew(D#RRv>*G+{ROIg$DNHfBURDo9 zQ>PSB^Dao#U8PMh$8BRB#-YD3!b$I26EA)lZ9x%&B#ikdMCyQ7wJZWLGC?Y9uY}IG?z*YybT6(e=r--BKq%zpE6fqJR)+CK0L4@4uMS7I7I0DY2?j#!7 zrTtWGZ=gkb33WPj<&ia7*@GzPB#LUGVo9NXq;*iP+yL{Q<5}7hN4A_cijV9_?83&RYNOUzjEpQd5K;* z#sSqD8*qwti+9g9m{Mrv*g{o274;+-x8i zR&3-QLAxxme6HlCXm9NAT|Q>B_3CL!Q<2!D;P!n8*+x)}7Dx8F>RRl8viDzHXY;MA zYTB;X=CfE1sIkV8pu)KCsK@H2xCt5Za9LRn4v5yBN$ zss-F`Ao9?W*@miamSIkm;pK?@t=hf%Q$urQk|NDinUmqz79jTI8hDv-%E8lnw4qV} zPFf~F50ysZ!0Tv}gGb|E5wAE=^?hSKDOCHkj_KV=8dJg%ALJ4ahDY0?!?&F&_L1jX zX$G$!^X``V2x}+!uqR=!+e$IpO@ghhqV*`RzgIl$&em6l7ghEE0ytIb$JvVD0LR;q zUz|i|zepG4e=Y=g;u|O$U)v8f@Ka2?jXv|zcQunT&ph^I=RB<=f8>Fss`w1#Mzsxi ztye0n`V}&BBWnB#$|Xahq<3!GimdYYMZ)o+U%N4|=IyH|qY52Cv(EkJaTtQE6^0@} zKcr0=mI+jORt~De$D{|`LH=&VSS?4wRLHYd#WG9#;TR*_nr`PqN7K%t zP6~01gP?Q{r%op$?P1?lZcR|(ebJ-EWjV%mS}vGoVj5pv%W{Kmhn$_*T%PNdw=qPK zZ&b!5C0XcC+TCD=?$teb#K^*W`bilMRN(B7ER`me+pyQfP-Yk{4?Mjn?l!1P&Ii*| zp}VU|M-W+-DPWPKl?uM1k>l`tNjJ4QA=frI%V$MHXo3%|39Z98dWy|5lE4-mOL@|E zl|OG2SQ;Q6!~>^@j_cfQ5#l-L^e0DB7f>BO`EJW*cb;5wX@K^!j!3Z+nHt9vHrH4Q zVGJdLUDDwpNQMyt2+?5A8ElH{CoVu+o$OeWSNo!w;wKm*ppydC^U9NS=5+^Ki0kd> zMy;teXv_H2W0Z)xP)Tv3Nhe2L+w-pr`)V5!!p`xW09r{In3iaU29RXvcPCSxT{`Q> zl{g`V48L<_m$1lT!wd&y4C)F005METQBDay9hb8tzB`vDBa@$HyQxGDV=~Juv%fbv zDl))#Bu2R=Spo!@A^z_eLmU#!{uzvQ!U9%IO$nY@V=@j0F{()!8A}%-sVKw_?GxGD z+=z*jP;7Devmubj9C08>(NTY;AmhnBGo)@VKDl?fjHK6&BMn<=X*&Y1{H3j^u3n~< z!N|b}U5=rM$8eAGU~3vWCsD8D=pAQ3_&Ntf2U4d_m?RP0ulwp5rG>JNIajup7bCNy zhts+uv%3Xbo7hH+2?uwoDLDH0ShQ$!bWrqzNS#4F6y>~0E z$|`cy`M6+cW!Bn;EwY;WScm4R*su9`C5|YhWjr)AtjblCl`-yBZ^o6kMeloRo{k)m zBoIV}4AO=%v$T>If4QLty7t#~JV+q+K6J^C9+kEo&={wRNK;HfB_9FXGn5*y>Ya`ek%xS5mAA2O!|Afn|nLdke5W-0Eb@O~Ll33!h5;rc_kualwKP(hAYdKggK|fnx3a^;$s_Sx zJsYyb>>~w|TG328@d6E);GV7c;vSH8sZ4q!aUkkx#S8YUNdTIqt(-hY*4*Z3bD(`F z?v`kVPSU|WNUy{v+gy>3B#+9S5F7y7c-cGoT>ywwqHRg`4gYz1+q@K!Txw;}2f}7~K`}QQC{6_;foG6Y3 z&$JV$>wtaia|#8|6vmo#7yy>kmpWcpDTbZpIS=wos3%Fk>Z8nGd;S16w_zEG-#5{{WSeIORr;L{?inWYtM%Gb}KkNt}9+YC}Z_>AJtv$LSEVGZ9JN1dI0u@y@+njf3x&4=`8g}P^>LZ$z{TEyG zCF#XweAkv(oJ$O)8r3?RjAmvDQq79f)Re_MWf&hwrIra6Se&D!%3G!q=~yh=r)Gm9WN^;4ow4Le+Wf!lW-NO^&%Arq21s)C&=_zJQdBt{=< z<4o~5D>Qi%?Yx((RkYCrj@)4gcU-$E0Ui|r3uNZH!ksZRs=EHjl12mxRwUc&1jAKD zjsz7gMxl7ac21*~{Qh+h<5|>0_c&Qg&eF3CI0T2u3RQU%+ZrIcM#oCnLg!sP5g5?v zVdZm(Z|-k6YVfh>X(`G;W&sr-3Vprwv3CqtIuUSCWMGTdMIOlX_Ds*gLrm~&_owe+ z#4A^Br&qjj0{;Ni3Wib$$V{s6Cnq}2sy-&i5ZhrsXrw6X}I zc@K#46lb{_C$_n0dS_g<%UtuRtR;9_SMk!bep5V>M4F>mLmR{`)|eH+^aTFec;lWo zhC_h8dQ+S;#VNSEjD70n+*F|Un=ZD2G^uDEDbqxg#UwA;U>N0EUdBk`iaBeTQR1a;Dd{as(HD;X&nPW-nj?J|0?QKL8oKKQ9oqlz= zno&OE&KGH-sk3fX5XAzj^j51H%H_a1&WYC`xntq^pKB@A26uOh&aTSQN|s|FhgCqb zL{Cacc*oUGwEIY5s!|4?DGA7xIK?zl_taH5Rw5ee?7OA9>p5hLkM@Kv5p2VSo+eZh zA?m^;k|WIyR#+k2A}*L&?N<^5$x6vim8(7hM6bB*lx7Gj^V3|K#Jm&QgvG`dX>!}3 zjta=gfpu&AP`tCH89In)chi?xRY!M3{{YSq90A8CB|u`$t_oH`#9#-@mCjs43`OSc z73=cdfBO+4&)jezK^XlC`FQF)u1gZmVyjp0m@6Ai*(;!rQ6%;p{Jd>6kZcA0*C#Eg zYr$D~LlUC@08_NQER*=ov!#=!==vSU)4d=~&ClTEA3AZ9oOanQ8R>*$m;P6El*Leh zs>B6kGDc1`Tao_&VW58+2Sv5dT(!&$mN*mMqcKw~Q%XgRmChcF@d31?=c~2cSy|t% z1ceGdf!0s%Mz=b`L|K$~tKXTAvrlGgPF_bO>v`_GYibVjMm2I19fv|Ot%A~Xn{S^T z7-M)KO7Hg!XlNa8u=Fm8{{YC+iDQOrWl9)t*ogRo&5DoC7sjXCscvDOmLRgLH5-xj zV<_^(=1GwkO=}$oV8|Xe z0xT{|#_@1Jl9c3VrVFbUY9_68`TE2~s%`^&aU9 zlvZ$zvmeeh7$2*Am)`_>Sse&?+Ycn+uoZad9RvRW;2e)SFM>PwXVGnPAHIO8d5kZ( zBmpXHv@ny_WmloMSwMO)mAmlcMTx09E5UMk-{tNmEF6M$kPnXe2SApi49n(pYIfAe z-FFyPJ8okirbacpMt(zSmqRMRk2|bgNMN>}85k&R99OdTYeO`jdjA09SisOa-D`_m zbi>Q-mdnry$m?_lGg{&eI02449^?>6KQ#r&gd2+URgy@c8WXQ4#<>D`gO=_*>wXRMR=;hyv8_4{1FYzs6RWR~ zsi^Ek>JnfSm}E&;mx>PHsw(n*-Ux+(J$~@Pc%n3N$JUL~Ar~P0>rtTg-AI#xoaWdc zndi2&oWOAuZyjdrq4Z{gRj^$Gy_psvDT+{!R^;ioG(yZ@F*910j1vf6yH5mri~#XG z+7_$>06D`sieH-w8(VY8@k*!z32Uuu)dG!g1!JdmwDEDl9mGqYI#GeBvXC?Rb*>@G zF$Yn=M>TJAtVEzy(M4jc2B)3if^!sM-n@c)L9DwriQ8%c`n^p)=Vib4(WC$eo=gs; z^48d`OWt-7t!=WUY!yyN`oxH`Bcpgy*u#C<)^)W@@0u^CdyGEYGk!?Ywg@_L-z%zC z1*)*k`Tid3T+Eozw`DU4e%0o!CKIUDB!VlkHwl_46Pp8v@AU4D(%zJh1^5ocXgB`= zls-KJX{6UJ7s1n6u97OuT%@~HH`A}SP9!wM@Yq3Fw>{@ZtU^+hSUz#tia<2uji`I~yCaTEUF>pISu>eGWSfJXrNDXL(S{{XkR5CI^bGsfb0`D#iH z8pu_IkiEE}vVK$(2HS3e!^t@T2`utWAi*1zdi3RqnT*xzZdSXcMgkv)i;wS?*|lyx zvYc{Mj+o_Ev3gScw%j`Ot@YqT6BadCL4BYKLcI|zRuF(4kbISoEH;UHQC@Py2})U( zt{F)9j!aew`H11VZ`gFok~FZi&m2qUv~bUN5&_bX6_r?k+A-nR_e4kIf;jFw#|*(& z%G*bWgMb|MFv_`9qENe|;I7j`4bkUjo=}yl)~K8yiBW&8-%gduKWytdt1n924fy&d zjb?^eo5Wzf9FTc7zT`i@!`1*Y)<49xTu%u=u+FaU#~&gS>6ldqq)b?p6=gkZJA4Wu_UuNnn!1Cx8g~l#CG#4Ug*szu>^tR zJ-sQ((z#v97`zQ##hrW*E6b2MEW30_7{d8_F7V40rC-s9Zi+XM1ydDGvZX><6Wr40 ztd+`{OtY~qWd5~blp1X|f!6;3SWQtUUpsA%vb)b%wbkk_@Y<05qOm=fvxfC2$h<2S*4K4hYKmMv)F;$h?S#OjySGV$j*qwfc`IF ziD4Pxwg^_f;_jd&IHrl-0EqihC;uP|9*Yhi;X7h!#}uYK^LW z&Sr!aa0;HxtgNoA%Fu5Q7~^PYPXh(y%Z1#b6D%PmeQvXG+vnlrAyp$v#5ZrccvdD> z9in-EZFLFqb+*56X#(91-Rp7fFNSmcFa06f{lZ(We5_XjEovwj5& zyE;hCHBuv!mlkN`Mo9{1N!G2C5d|x5by6Y{E|j6HO#J4TsQku9?B!!))O1~Dtnjp7 zH(wLP@i7gqTF$v+R3;mBs4QEpCkSVP%zWZ?bi1}TMAaOmo4LI91KW#%+kPdUzv)}d z(LrVlQ3+s`T`uiatr?#pC%d=Wpy6ju(a6zAk}usq0{oNh)-|?b)l0OPjZ@_(IEe4L zf@@Z=hYz)GvF;EW^MGZwxJ)COq}h=o+)yE@xZ-#(Y^DS=)nh$vy#AG#^PO#SY5-Qf+Lpie)=`L&hh|*|M(huN>o?;t-<>}h^x9_WUse2l9}&V{ zib%e91J2o-7z{M6gRPR!Lgxnie~oUHdx^qj)tdHbuoCx=Jb>-rh<3@rQs6H#!9<&! zJ^F0Aajs1v&3SW zNY9w1c$_*O^f#ESpoZ3xy3HCPIG1hqPW7fe;ZUeC^#=a{>RUM1#AEyX+JhZM1QIi> z=$$@D>@pxavE_T*RAPl*pRI(GZBSqL*)Zl1G*KImshH zk)1>$GANOVOqFBBh|~!^(^d#-@|Iegj8cBRL=n!)CuTt!k2*qB=mcSg0P4N#(BQ>s z*W_96Y=aq3*gRzc-iT~(CidhRd_8+Eww zNpc>o2{~k)H)E*eD(e3LnzIWKMh64AfY!M@ zL}Sx$-sXpbS214ReO zZkXtQbGvPA)-ai%5w%wWWjYujX~wR0r)-UUJaI|RwwT@Cc^EN+6VwrwZd%-G$2I!o zFhrV^^=B|ngGV;#iUF>)Q3Cf+BNYn{{Br>1lfcQ1FZTwU`OXZ zbz88|?sd9J-6GaBMl}}oI?)nM3I{RRv?a3V*;b=Tgoz(E_NzSvog@xx@7&?&Uq+Nm zJaI61q~?uoClQ8LAX+GYO>v_;2mM@@drYIWW3HAQSc+#Qw8Q1>EU4LC>Jr_4J=5Wv z1?pOjyssGMDBYI9V$$lgfj0Z#`B@5~QQ?3X?~(yx0P{k5Hpe9pO0#XWH&AD!;yGri zW)l5a$U7DNrK1o+f(iAw?9{KRC3sHs%{yWXxj|x#^*gu?8V?xKwloNBB~+35GWSV0 z2r<*N%q`8hJmTDQFnzCdhjEYalm7r!y#cdMc!%7K9TkVJ&o5SrDf9G5q7gN3M$+qG zvFtFD{CQ| zOWdXH1lo)S4yVZ0*rv@}wEqA)-Ph)7QruV4kyA3O430DH)=R?0bynn7)N)P^PF0db zS4;l@4f&db4MR1WQKsc=HBWbfB9yHj4cuz}$421F zD1vD=rJ}s<%mJ5hp6n3EG33=-?9>M+H2T~-P`9nKDYVYVTScd=)AkP>Hl7#gFj-@} z9DM;iWV}?jbe0sax+r+=R{1E5vHqo9vcz#D{?2Fy2iHvU_=*qP;$Qvdp(R~ddGup| zb#4cOev6DUjFG4YqwEW6c{;K?{sxdni`1BBNgG-w&6mVrEY6C;BwCQg9#NF_xZss- zZo6)I&kEteAc7BmPTW@`LT5yH(*sHs0&;M=iqWrXDWV#^0@t@RY27PIB&h*ml2Ff5 zqMdv@H%eQ2-R5{@EvearP)ISN#2`;aibfd-akAC$u)N>$tfKcmZb1Vj=si< z%U&HDC}W=O1dQdBMAWydlyEGAV!dlM?ZPF3Rdx7^fVWX4Mg3|fD+hB0L#E@fV>3}2 z3_)dJRe?IEAmDi&dr0%9gb}MW-6R%akVQV%x+UPzN;+15s@RA@Zps z`D)Et_Te#47?CgSFSd~C;oz*;#;Lwz8gbiK)HMqrf#ttIHJ$iq#0xSfXM?}9wy!FP5AhWy_2YbA^UorJM)p- z7zy2mqw%ZK2&$joK;U=MBTD?3_L5)`F^sTh9$4#Yys_|xcP2ikJfUD(T%*U|-MUfe zNG6P862ll>00*5Dlj&_9di!j{%zR@CtKBPqhY0*_NL|9~b(yT#NaF>x#7a`JJTzYLm}Y*(A{=@h*SHRsMgpNS*wQf(hkI#PU%Z5BlI z)A#-ljZeE(uE9=N+_?p*JKlIi`!&~IwRcNV)W33z@`7efB%5CO+GG`OU)ya^ZZjvd zXx-=P!&1l+qawdFkwYxIZ}xq%j0?dueHmUnvp5+Bw+&2p8R>}yMj6R1ts>&@uTe{yuDnB8X$YZ2;jl-j|Jq`U>i0)w<;%@tF zBx_y8rKpjr`y|^IA#xd}Y(&gVts;&(r+FE=awtRTVyrey4CLy6hbUP? zElK)Xg2eQuevF{&ZQo(D#y9p$JqWDkNFRfKr8z`yy(Yvq6{BPaQpSZiS`RD{PkU(# zhZd>Ry;AgC;Fms*i6XK(hFcpC=A^jPuv(~pS_eS`fI$Qi6Zkq`c>rr}_r1FxkLsJe z9eNYv?~cm29zhHb=S-p0sqsQ{Vw4h}yVrbx%e78G@A%QsI6D06Vz48hfjA$*-S1%Z z6H-ZolEkyIW2&=Qs^VxQXxlV5ye!~Wxqof9LQWH>ZHID_!x|QGDoBkKl0@EU+cHH^ zNJ-VW8qH~8Q-+pL)K_T7E#kCL%@oisAlhX_xUtFp9SbeD+ znPITFZp{su>lI0Xk{#GbH6*bcD*@vUsnWA|KV0v4Q&1-Hf>-vxe$k#6#`H8++ ztC!4B5C|t!8{7t)#)t=3e@|g6t%7JCjI@lQCRe*#bFCHLTAI9|5gEv}8J;D7%r4G^ z1BCjemOAknW$|_7`501MbJ_5e5Nmv1QtAvIr)>t;A*b?#(gA~@;yB(-av<{zLn`M6nS1C5>i^NZ-1sWE>b_ zwAxec)G`>~m>JYE31NysWsr_gXw9&!2v&}}9;=LXs4L=d$8Gow#%)Q-62|b zcyzcOuX2pSXkG!U?z>FeRKJ&jPN?oPR$;-kx9Hy-Bt0oCQnL@Z4oO~jBiuC5B=O3N zg)zS+2hjR3>Qs;St2bJ;c~70g;pk?}wJ{WuMJ;(+DUhT78}^Lqi{Xa6uWdJ-Z+T6r z2c1>hBDqZsX>oG4@02vR9O9{FQtrXEYB*6I$AcR1Kt8WvR(Ci^bGhE;>xefgOp`G^ z&doMchPQt_wN(EAiZhQ$lr*t};GRy+p{NIKTaz z(3L-pM;f*nh*euK^wkw{9jRp_oUw9BHm}ZF1+u6nwYa0=R^zKxs=a6|!csS@W#DNH zk-U+V1ixfeV$u~dvq)6_00Ton=xAsHd;_U0)`#zuW=+(1h8NGFC~jL2htm;+Ee_1~!rlxjQDI|Q5bo@({1E6B=0D*Ki0ZZQn? z>)Sw+rgWQ)&5`1Ub`#aDVjEB-@V-;|Ycb)uj|0!5v0n#CK6^L=`VYjA1iKXK2C~1t zylY^b!MUOn+vwe55bk!bMN#YiX2CwbDOCvqcK#Nfia#cjaRhHBDTXd8;cK zTFgQ%`qlzljw?}rX3*UbzS{jMq>g&Cly!Kehk37Z6|K8R%qGW5EQzJ+q;EY2iV2T6 zEx}Qt>vaHasI8HDn;dAXBQh`{w~_PvO)KNg9hH_NHEWT}8P@2L*{wBM6r*kT9*wxH zFMV&6(H=X{9Kk|yT2ssu2R@THFTE^KRmLeG(qp3#@S327_Ibf569HZ8T-X)0fZlSK>Tg>Vb#K3s< zuiYk1e`(LPyjW21QomO6bAj`#bn4!Zgz<*e{i1pS-#p+`<5b_=x{0$Iok%X25yU73|P8hfHFJBSHCUe3+af>l{k<&L|gDvpu;Tdj`bvL4l;6zPD+49;bD zbFHpk6M?Pg#CnB-hxDqscXQxqdC)v#Bml)6}R-bU#FUBF7 zbZuYR?b6GkY2Z>Aa#N5MSYY@|(^T7SAaj~i)s;d*ra2kZXD3^<7UyJ~#rl5?Ur3$l zOmIJzU>Fd5GL&+sK>EikCt!OctB&4(p5N>Bwzp-;eCI*5lC*5HE;&Z)ENLQ~udl@M z;>}s~eQIR84SY2xJ*`*K<&H6zV7iv&iQSSFnlz_2**oSND$?27soFW7B3V0k2|cNhe!lvD%Vg0oL=qQnN*?M2uZ5 zO~;9HM%`=WZb32e@g+}|+?r4@pAStG!p_?@+;-$<%x6c%$Wd_z3Z%~oEOgfYFqRiTKC5&_oDiyL$%LRpe9grGXzwoE%u2Da_( zkR&(s2p|x0Kb4+7Yn2_r^*RKP$c>~Ts*eDgg*(xMBxxvP zxa|j@C$~zqm@UF4f zO0iZ16wvRWpW7Q5Pc~~A#PJvvnp0s~-AgGM52?_}7zPEHZtNkwM$B(1JHFPifpVw5 zr3PC#~YNYUQV5u`|dj}sviFU@nEO8+KL%!hvg2dlaZW1TLgMO1{GriZIgz`YeXKJPkl14@o>fL1H3P-9De7!X!cXoMMwOvHt+T z`e4zYa+NbqvcUp_-T;Uh%saf zI1+Gkgxc&i8{A}+#G78@7U2PPKKbj`wGoPVL$CguqVpMMn#8)l@Z^X~(m7b0bAbd= z)U*fowTRi4aU^noZM@-P_7g1C=lkMh)myf<#4Qo()Twd{unC}SukyBI2>g_LevcY~ zi1ueI{337({6%h@&Bi-WyMH1#G%V=zDo7_uGn#86yX_?5;f)O|f(De=i5j$0q{tn8 zY{Dn4ViV;KR2_HMajLGXW(WLHg^k&&v5*LMC){e@< zY|4YD9p8{{kiP)}{>@^ethI@n0WU+m#DR}3x49lO$ z+_p$Ky~?CUbrHj_eQl4ab-$e6h-iWae;asSySdT>g3agZyq#+(e54d5ow}D;VkL!(kbE`&j*+i2KQ4P^rV0K=2387n_MIy`Ju)s*efq_z~uGZyz{q?#y8 zBWjdf-H|$25@75lL5rg3q9+_2}>x)WB``eszBW+U`)*nG=M?l0=mi(Ss+Z z>s9F8n~*&rQsV%^233-rHTe9+kfc&~LnU@elH9#3^Sn|OdLI#_xQ6)F6{GG|9} z4owqFJqiB+!m|XGr9r@Y;mk+FP1Zy=H{P;A|I%Zr{|& z1|YjU7Aj5Cof#ylyhCacPjy~te`=bBCPos~fzL?+?oP3zr|%Fynkv)n(7K$Mth|2K z?y{7YouY?B?HW^qoo&y8H0L1ea!$VZu#?+x+U;${i5%eD<1F$Y@_ht=GEZUqk%40A zd_@Z6(%K$oj%nD9EqK)NBa!6F20_PNGlykSCfrz-OSVwj+ApI9d(+PZJ7qZ|S!r6H z5xCU38lRegPaH0_qIQTZvB=Ku?*9OL9)&(W8VdNS9Gt;PV=>6cb%W_zSfQ~TlENiP zWHQL|5TN}5f9_y3A*=YfniOJx7U4RJV@W&w&WFR1{%3uE>Bzq}b^idS!SOol{{T$4 z{rW!*$@pWY_;!EX=+cm}Txzlad)ZoN*@>c%uq!Zhxi2T!?+>zQoKc2oDnS&^8UFy4k~NWVb%La;dHQ3Qk7n?s5s-g@yD@`t z60fk=o_LJHv|5{Mqq(C`wZ0i9y|zrq3&hm-I^TzSGN$Eb6;o;fBz5goww&Od9Dfty zICBMiKZ_N}%SO3fBfM^|j6+%7=amx3omI9A26_#ZRXVeNy<$|ccd>f(?UaoGH%tc? zDa#0ljIoI#bdni1c$tK?T-TmQg4_JA?t%+@hS_UwkgThe+c%3lYh&+%DPxi4P}n8t zOKx?nxt3|n;pce^t{%KtVS}-7vjyF{Ul%D{fV0mLU1R%KVEyNf-Zx1Rinj8R-=zlY z0M^SeFii>b1c{kpm4iWJZ=O3cgou+;F9eP{n}FiQS(Z2;ZiMLXC#9C)h{k7!Ul9Y+ ztnCT|w{DiU_RLL`f9x&K_oY7LwOiYmbwFg42!WBHo%A+IyW3FA^x6v|ue-6`F& zhRkkdN|!9tm#bayPsnfU_^)^y`z_DRa&g~;iYoJ0ULfe`jd_kyt(wq*Y{bX2#SN6?ga<{D9phj|huXRt zp&=Y~o&cNTKPb9ig6fYf;FhWUnw`v%>#5NyIR#bl`Pi)S(Mq81VN6faw%d1mDH{z;y}i;kaT{KHU9vDHNgJssA&g{ zW}0CPQq`6z9RLynq{e`Qn>P@hukeB^n$4)_lq|o37U&?KBz|cDXz~W2xSv6~abWg;(=b9U7Z)^Hp^& z-?vPRg*fQ^IY9lEqmfcCL%Bils}vcL5u7yKRR?REZLlX`j`ZTt#&M#4(hLwqWRyb7|b% z3$^+ZT-ohXkwHe9Dv{r(N0jN;s3)rh17eIKL~BcaYaLP*stIPS9DD_!!kHf=u>Q#P_jY8 z-sxW44gkv8ko4q*pO%5h2hi#^;_6S0y-2#SF~Me@jD=-VHCoIz!mDU@L7;U}_?<)U zRMzF+aJ~Ccxo_oWtJfm9lR`}g8U!6rX{9DA?S+~Wn=MBgo>!|Ka)S)Ldjzj8%Oq$* zSC6SAb?2RnmS-;=IJ-RHo^{lMqD>3V2qsRhtM5`oz^OW`xYEA74`;u!B%?7NCJS4h z(oAIxu{P(lZWQHNWeB@U$k$M$PbQ7|4bHrfB7-4mOO;WhkH^%L$sgKAji+ITjuWFI zANoo(Wx^P;{1xK;+-O?Bz?HNuukQgh?A0^CWrmWostvwZcu5qC;VKjbq>Ock1d&rS@v78z9EKLQ0@2E%{j)6 zdr_Y8NHx~CAN^UEOSoTO7NyYLwFR5(vTiQOca@NMVqEz0!{Y_M%*)uTRN5Im2NEYl?LR z`@1uwHgh#=TSX1ZKbWZ^t6HOGoAI7JYPHK%4=5!nBHXt9#YA^vRCI#mWsWr&J7r}Sluru04_dS{he*^yGhR}t z#iNX)k7?D4k=ZEajB`P4(p0T=7AqIF$Zv6CN=~v>h~flE zwu5_TyHCun+}VimuLb?C3FhJqy=ZLo+!T};H|i!CKwC5utreY;=dtP8Hx_y~(=)>q zHqvdDX@eQymbB7CGL?O{+#8KSwOu%6ih5>x784G(K>1tja+hG~P4dXZiqJLZ5yK=w zwwe~G3oA5;S5ubas;v%wApsJi2;_@U{5Nz?Rrna?oi>Gu;h4)?c6*m;iKsZ1y&b~M z8G4YmtPQsMJ<852*|T2FWlxxc5zuC@XS0J9_$H-m=Ah(>71~?WLJRz2wRdi_LS7Rm zZMNl#k%;6STDEq0)BDu`WJtFWx9~7GT9tCPmK}M* zoYr12tlC+$Ce@i_Y}a1JLRU6VbfS)jUy~q2|bCY zjmj}t3CI8p4?sxLN^(2k(B9=m<1S=T@_URq93)NRg*Yrn3>}|gpw%n0y5eoeXsdh| zBZTR;tVqp18$;F@4C+K@GJPk{@KxCkRFFlP)Pf(l+-;8%oek2*g0Z%fb_?dJ9S!Y2 zYbl|={?@Dw9po~c+Jx(Ww@Sp+-UmrX&;v0F0Viqral@?l*ZKKk5)Ala2sk4L=~ltg zux|(J+$j8`2SNG{oiAwzgcd?(y_63KuXAj6vqD~^H8&bNq8OP~Uhl)cUYlxIWQod1 zjF0g3!!%7*&RKhC(yUm#YGHMnQRNl zy!H?*LYyDrRXT5%wx$-c@f$mJnlIC_7y_p9@GnNn_3KUj>@B)a){Z9*s=%EKs~%Qm zJg-YZVlZ4P;rAPo)<_m+;T9&@uL!)&AqFl4g7L+;$5zx#i8{uSPA|b5M<(;KC`Y$Y z0KX4gM6mSc?*#RwoV^Kg^R(?xR(?uKOSu?tQHyecxK957{Za@wI%qz1rQ1t!rygta*m~5mg5HJ8dSdJCZK>#cWkl(wD3IfCs(wyQV$E;uPIwJ?F(>o{{TA5 z)2yE?%gN^I0SiKcPl$2CnvSs4+r>DhnzZ}MzAi9$PPQLYk<>dk|8`dwqd~A+uN;LhV8-;TIzM`e7`|fcpI-w zS@~k7DLYMGp74EzV7nXN+AW_kNTQDR3&d8v*}#=Miq&qj7U2PzG+?obAbopADOyG)*GCZFNmpBVXKH2(k#ZEfMFT|dHfKNHWV z_&q-twEqAHxbby#-w5tM{Ppzz01Ix*;bMIshqs?UDW}>uL^w33)6u&h-%@qa1bG_H zv!m)%g$?*vi$yGflOIJ|b}q})f-=Wy*x;Z8z8-(*5=OEP`ekG|KT@AWz( zqa%P;?Ix<>4oW@(oc3Dwo(36i($}MKhjb|L*xal3EH1`p+cz~3&N#h|vewZ&cOcBL z#WZup9MLvYI?kCCzfnm^Qpbg#2z4Z}#4_v#rre1808wvwJ;O}yX1gT509{gSU8=`U z<@1~!0Jw3)4JunJhcUjQxbQ~M%@;Us?74{ApiGd}w_=>4SR^RIb2F^Ws-Q19QCqgT zVXV1Ora)ooe%}txsdT|7c&=>MD|H_M(_@vb)1H8AOH$z6kzFwj_^tkvI>f=Z-KosWobwuz4wB8&z*z+H5j_%ciYgbwg)vV3V@U4obQ_ zTa9b5rCrf=euVpTBOd8ncCCF9w&&Te(4K>am%2pMY=P6Zs`AvHG0TS}@A=ehGF0l) zM5zBNIBDLKl5vDvehlCs}P%yIUA`aI{q|>i|&w( zOFXl)yslZ2X(I(yj~biIk^3hc(uJ634ot{i&d*wOn5vlPJACD_4kawCtW|*r)n-Z2 zVz6*j+M!@FF^*lMd4q9I4}_oia#g7)_tuHD+iuvyy$bp}2F>T>^*6&CN$|3!o8c|H z@jZR*IsA7!*{Kf-&OjPro$z8l^Lis0!!8{QoEfG(>1C;7KyRqH`kF&q&p zC-f#&ae_4@W7E#@Lh(p4wrWdSV;lEpiIpq}0`iLg0KPElsvxwk z3jzwWMPYc#iy({UYjOEW@|9)ixk#cgyi-RqmW=B<&b)##oj&ChKFD0YrF%}tnT7^C zSIrztyTPyhDW2(lPM_gBIhvAUyt&!y&G{2@h%o!Nm^wG4$JtuNSF(}ZT*JNXO+r<-SF|s23@~mz z`Zp@R+iE-YR|&YHB(QE!Ian<30=a^65KBA2DZUwAg&UI4w3EbjEEH!+_egTlGnVtH z$9+$B=b#+dt#p^|8%5=7-6oh|7WD_}uyZHen7 z@HRPFbw#f2?pvE$)2H8=RDfNzhGJ_SICPS)*kPHKD02A1G}zO+8hO+Bu<6 z(Srj69J3+$+aKp-mqK_0Dd`k#+9MPbM~`Ul_|l}Shd{$oZUwtdof?Z|G_W$hs|SWF zO5lRX+)HEIsL`3b4P_uqFPS7Rf7>TOXHlUi3+0+R$&EK!ZgQ0@6qk=5p9e(eQTZcT zVc2)o&((=1&NX7Rw1Nqf5^qEsP(S4tj?X)gG?hW6C8mBpfRI542EOxVAgMB?h@RzZ za*69muum*eT}Anb0~;Fx9`$F`^(<9vO%o@qRu_PVU|K1mlC#Gmzipd;ONAh{+JEa( z!dKj$K9F&wkPrbsRjRSugvR=@1hBRp2RqdufgqL%9g->KhnEJxf>mg`igT#t3^!#Ax1O8Foyc10r5=7uNRRkPiqB28* zlDO16jOmU}PNw-Ao#&{M=_pD+TW+|v78^*?bYw<`ag6{p2_KzLQVS_Euqs}a+Fkzu z$BH@9dIg9wCF+k-d=ttop8Qr~{>`=nYP2J5xhC6V-%^y)QMPugU@)yEXe>##${Xc3 z8k149V36lqKIaqx>Dxf{H%+!pzHiGxwr*4HvxyVBU)tffAJ6S$lu>s$)p){>cBEjB zo?30zDUd~a1+g8yl^!3O+Z@Xl*+Sft!7N5tS9p!gNL-+}mJ(-MF{lZ*L?NXVYW&8h zhGs3!KD>MJ>zW8Gth%x+Qf9AmGs}?FBr^`Tml)d*m_eWlXKM>)-fb*Il}P;mDDhB2#s<1cFvA~&Z3CF`zth6 z(^4zEBEzuF8O=2!WDi!wV@}Uao02%g5$KVyX!10ma3}Kz>a5Ut)%gvIlw~BBycRnu zgd9%=lMOn_1{Pn29!OwAbOBRur$rqgkG0>2w(D7BLj&FTZ*r}cMC+jh5(psHzjCMe zGct&G=%wvuE)0!Ybawfe+8Z^YwLkX??xMw86X84Ef zt$F_dt;+~*>)7`P1YrFD=_DA#eOBtFsQ&bW{K)+msuQ%PQLMGB@`11?~m=GRrjbyu%Mxcz5bz zou|di73Qlm!!q%GyLX5|@)y^gUC(HmiRvNh)u(pF8HBJu5|(z&%G+V=00hu@Wvr|Kl}!07VcwRx;@wpdHCrrT~OsVbD3C`1vgXjtpc zte|B=VwK0lZe1w9StZp?+8c0+d!Xc&c0*2HZ_Y}vY%o|*#DF&QJsJK^)()!6$OqHe zXeW8_B-Nd+E0H~|uSvivGYl89;R3IOok}BQjaHGA&B0amxou7q-mF$y)Hgd@bey4V zq_n8-2xp;)tWn%rSgH3b2kO?9fpNz` zDGR`YURSR?GY;CGK9thNJVvFP13Kjp3am4zti4wU9FP&@y4JTC6+gH94tCfWr3#T0UH_6RFGlYmT=xd*4a{fb{0h( zV^#%pj>#ZpBsIkglO6;~I>@~{B(m7xC?^8i+INvL6>TsRdfK5%;KcAFo1Y1|%Tt?{ ztkkzj_|FTWp>-gTi4!pG+pHDiYStGEAcDjyjlx)WJ(R#6#Z0|@K|Gb;l3oP>HKi!p(;fK-=mQFr#mR90N8? zkwq!2{74L^9Dyt#m~vih6>QIAa-2g7u}6jDZY;gZl_U{@4m7eIZQGpCuv3DS=ZeB| zjkI*}q@xlbZA-Kv$&K-;YTK;bo+i^r)Mt<l^UC>F0Z@`mkGbm1Vy-4b9$L?!gm;amyr59VBIByGwV7R=IBE`7k8#gxF`&6P%;a+*SLze*Aj#(mXax1ANMsgZ1`Hujjb7GL= z85*$(`9mOIZP6e1cPpZdfFHqf3g$+`;qZ$n#6hz0s`79IWd8HPG)j#q;tBMP3!lzC zkSQm&nr9EpuNH$4Ri4TF-lxlK=_y})u986sX3NX{<}SDWSq@vtI^wZ+e(hf5_3b5< zW6EI=c^V^_hve!!O-+>j%)DC~g2O|}NaY*AlA^qR<=VF=a4XwB{{W%UBt}O?Wx4Rp z3H!oK4|ibsYNkTwWrOCn(jP4KukNUnQG$mom>C|COC%C3k-1kfrOdnt7G0Bfo}{T= zhd5%EIpY#W+?V>xD!9QKc-lYrA3!>qz^H;^u4BI~)e7oL)q>X%-HD7G_XpPf6tM$kDg7SaA`Fu*r`| zp9i_rGs_WKA|x8yq%$y%RtWrmZsO+YLXT;s%g?{PWmhyChyJChCVIPmhT*c=$S)*1 zv$wjZRX9l!%{6I5ETv3$YujY`pkbMwYS{UJrZkWc4toL)hNX%t5tycpT{jJJy}ds#>n*dsi2FYVHVAQ?A^O@4%=+yB$^pumEx5O zJu_;095)ymYNoXvwvyO{s5ZCzGTDlFP(;Q$d;CS>D+SkrYSOe)p-1vHUa_&y-W3HK zS2p1cR-={(!>nsQ84M_rgZiFQ-}ylpd@mSRb!W z3)9w_W`ayIZgnrvw*LTR;b)2tZ4`>Te29}w#X)J|A&DBsKO`2OIbo2?o~SHvPoJD^ zx}AA~2h{szP0A*V(X+4kpQfUZ~n018P45hhkS(B?SPO+py?ZkO3mB$?Wnjo~+)sEt5Bit)N zYr~(Fn&ns;Y*+Y=%x9;JCZdt!kTQ8$I)7)}7rqXO&a1ozg@u=pck*>waSX`pyp{^J zo>{5cWd`osW{Z2*DPF{t-;#F_Ne$S`Cz?0P1%|@tW4v0;+D zjSvdYW)6glgOt!ENFb0@rPs@0Y*V{t47%l>t+;K*9yb29jEzYFT(XYeKzzy&jdCNn zI+7z?nIQwE1%nrHmW^0245Sh1eu~;cR{}?`Bfm^U#!A!-aYfZYB}i2jKt#cfB#ony zLnh;}IE|W-ETu}ZRs&o%6U!`j+VLB4dlh(tKraCuergIi#f+(S#I@@ciY8wHZ#NnfrThL@` z{?S(cU+kLgJ5(hLIuWS1qVcR3;9F4H+2WSCxwbi)Dpcp1M3GBIgsNGto0`OC-#05% zdR<+HhDWUnzteGK4WOa06tp?>&c7#>ju#;b*Yj2kljHEIJnM*bn zh1I8N$}%)$VCre&ufWLI)u!RW`O6l!wTLR3@s1K?a)Mb-UD^9zQnCIrw=lJ zY0@EF^>t%&+Fxfy9o<7Q0C^a!tOH@)S;G5IEyk?1R+_Yhl92+GeP$~MI`PiykI=aD zm5M2kBCDL9Kx$5!Miow5L==?qUgxp&iw-b!P>%TQpv_$vE?%bO@GnYV)`G^*4Wu*e zjt--Fs?Cwf9-XLfAVyFntGKmXEZJyPm6S4&N6^ZSjE4m0?IS%Yzm7S-EnJXK;(9*Fn=5(b(;Pqb*0 z>00ddG7y50^lTi{V;spLEUyJ4YfFeY<(#7s_5vwOhLu0kcX$EoxP_Dpt|W30Y5* ztAD^{(~<=|Mo2Az75Oq!{?iZjX{An?z( zM=&?G$yZgZErMc^OmlA7TT2$U?)Kwj-9?;C>gU)^8DbD#jgjZr?V@#S6txXo_ozAO zO!1c8>DoEFwnWV=8&y|{k}2L^tH}K1VsvmBvyf>HR$v&;g*rREY&iy5_Q|5M@JA$a ziQtw7<04?}g)PvYCh=c%w-sYtpfacF_EX+L#j(g8K_j$oh;Z{s)RsrU8dw~KY#ag5 zrIHlbOeaLM#;^cMXIV*da=Y0Y_(PyrVp z6|B5!+>oOLM=C=44OO)*Rs|1g)?nN{%2dk~?t_enATT2!{{UK&HGllDWH>rHgSs)( zj!4Qh?4`=94oRI}-C%-7NKibjJ*gP8h#OFDD;ZRjNg6njB3m)HUJARD!a)tr8&oOo zaF>Sx>_IJg8Yx!?ZQZQX#7~)EuVNcfbzqP(>R6(lCXQ5BP0wJKuxYC1SacbHAQOaE zW*h;`>?CfW81#-dm9V-~MGOimy=r%RH?C-cBk_k^d&sKl)#VmGd@2eaZ@fFLI ztWlW7I$-U)y`8v~9{4S7P+f`c?OoP69w`;$Vy_jtTk<3qaSgjPEYY8(I%=J}8+pjX zLAGB;M1&xzP0I#T~UZD+ZibLS`Bpjh((;a6XZ? z?e;HW=-II&y@{FJJ5?cST$95}`+c$48q%^kh;qSrt#I_b_=tRb9j@&VO}-Zw{H%+N%afLP1NEAi$s3#EQaC6Rc=5Gf)gO@^Km4T)j% zt5%Hl>cr#UUULUq15gBc1ais27isx)jrSm8jqbsDPg9$VRBTqV)yfuV_MOg86z0@B z9_So6;S(m-%>yLM5Ow%!ujb6UZ-#09Czxrz9oEaq*# zoc+o8dI)Z9wqTtDrsuQIK$q_DW6)@FR#rwT)c3G3mqw#y;3P){R#EZvB};jTTZ=*)<`-M9}VIO>{64fR!nLZr@0)!R<+88 z^j3(D7wcWGEuzZs#$Lc`&%vT~)E8%~D3TZA)HjOvfJ6Fo>nHK8%VL7&WrT>Qv0i$T zn5T@R=}OE(v#K78jB@tsAd0vi52gqs$SG%-5llUoHp39+nkdTLSP*h`Ud+{8n47g} zp`QW_q_9|#X38;+Q7jkm81yZPB#Kc4>&4ad4zsKKWnIlM{>iRUvqobS>4Q&qhIkDv z*Dn_5v`s*VQ`N0f-1O#IpmMBYr@yZ_aRu{MSmk(SLXuRzC5fr-Xk<$?UV!DEy-lD& z{i2aOK8{AEogq-twi0H3QLJ*6WJHYuA_ZMzL(=b{t7~&}N&ZNNdyz;!SfMN>D zGDcTDfztLrzKcZ_RWh(t+IHEg+?q*o!u$^l3o*8JX8P8Q1i_TT;bD?TBnMT5%;%1_ zt=5L!UBl(1y?%SPjfXfkI8BN8V7X&hGWLg;oVh*gtwJ*;R?Gm8{;v?Kt>xc(XyTK1Wlr6>R@|ZI5ySfYQUKjGMj>V?s`A0v61)@Hf)3z-z^ed8=kW1Pb5c@MOQjjm zT~?lYhcG@hUj1oD29{dRC7v8%%LKm>z;$FGh5)Gqe^((`5Jp6hnEQ{l&`6{l5pH>6 ztup{Q(}FHat=V@-AdW>ak%<&%(Mdy*rbUzg05rE{i3AqQso;{Jnm!B|0?4I9!)Irt z@%6IRb!%w5OpNhuZQJ{%Aia_UD=M;(%d1suU5lk+JnM4V=b@J#_%$4b8@LQI%AwaK zBbXgz9TEA_1a|yIVpv#}Zd!P1T}M77u~J&++%gV`)H{Kbf?8(JKG2Cu;tPoIn%9&` z6rxIGb7Ld{v>RE}@Ih`94TKK6p3^-B&)){ye$5!dI(4dF+2b&qyK8l8rzI-r#55Oc zZs?F+#C9*iEp}9$F!gUsS18D3txYz$!dj~YAnDDz)~2!{GNe%?3RP8C)cW4-w_ZA3 zq8rtcS~G^7mc>cCi6NFv;(L_d8xcnCPi=0{v~{VXqvM0Gek?T2F;G~!T2rlKrNMsNIIL#E$wx2b~2j=T+e2gQZ+{(E1LyuG^A+{_YCt z-TA`*0BnO!glmUm-%0}$JuPt&1B-ZGEO0wzXZv#Y=qBO~(G3lK~ z^HqMN60$XI_!rHzA)_YC!zFnjA{x+DH&P`?+;7^95bdhv6uPnd)aM=4fZ;He0qpUiN^)6329+Pxz{ zg1jWIj^hQYVrwCOWCcz}HNe<+Q0L_(3LkT+^KCNL0VSl*4Dvs9Xe~sz1xVBp(sBfe z&sH|7rWY~B73PFS#dYIHKmaP-^mXOqi{!APzX4Ec|>%2BCD4E=VQhz4X1tk)(;s#N}E3M|T1%NFlMf zZIjTKjF@Dty6!a>j5eGr@B6f>L9?z36ZX_~RQ_oLw|_nw6G zCF3p%DA9=M#jY4SO$80)1F5X^sakp1v|kF;;a*!U=laI@i_)zB06`jL(=Iedj!uZx zJCo3uOABd!CvKC4gWqp?zi=`>pHSe&cvyVO@P4U9!O$UY93YW*lLca={o zlq^wjC0}UL#q%Txhw8^E8jetW>+z$V9YZ_9e{nTfZK07H-82silyE^KNhFavylz$N z+DZMKQaP&Fmb~TR&ajtBvsV#Ll7}t;D(dU%4D56@`M~o!{<2n4ojj>V6e$}6{iRmr<2A~hmvyHdSp<=wFf&Ug zFoy@4KjbtU#B#=qIAJvQjrW`)a2$>`6^D zho64hNG2oLgqZfpiRA7TW2X#VzU?4U*Z?%Awu5A7A3D!%XIa*Doo~iil7)oxS8|7O zPQ#4$>jBwL5#cG2bx^1hp;M7M@yqFZoR0_h)&TqrLuo`twY3sKx@_%Cb>VJs0yVZ# zp8S|p{VJP$a6eV>()}_?8Q{oOi12>}bjhMLMu^pF^(Raujx0?Kut-u> zD%w+`xz^pjOH?c~gDfc|Ga!~JL!%&Jj{1=~E3Akmi*ear9#d7z#iw&CWzV=4jQ1Lj ze1V|A<5s@>FcV`c~P(!P*PA4-oECdid&cQh7 zoa#9RYSrAJeLV`BqBV`Igm_~W$(F)l%d>K3B({}FIMflmQlz+2S<;G}j->mPuw2!hb<0`Sd!285Wu(z_9MQ_K!64S$lG1c7;5FD}ML+BVxY`m;plR78yeB86YzSfCh}hqHGC zsRSHkXf8Cm+~|DuVZ;1wvi!Sko?tOb_93+jO$!D|=1TCqubw-e_i}}}ki&r-sVqq( zZI%A0Kwv=`6T;Q!mKO4V2T57&ya^j&tyW5rRY@7RIy7>Wf4f9!lSFG8l`)ezURhHA8KM3x>3Ya>Dw zB8AC5mL+JQkwdN(jVf#5%BCu9JAL=Tw=L<{#54Z@Yf?bn zFPm{IKj0N4XTv>X2b z#&ll?LQNTwKKDe?+-WbH3!%F0{{Wi@NxALrds|IhmP1ZiX;?zh@7s!bWPLBhiT-+e zKM}+JT8?!V?_%VILWtF4L3Sl9Le_I8`0uP_ux(bD)xFkFDC+7NPDk)(tsLXOW|Ak3_%OzT zXerX}L1uAeDCYO0q0EE{DmmV(kC}y|hvF(su+*FuaqzY9RjA0{)wjxp;uer) zyMPXXXMq|wD=y(S-#l@okKS1MJuV74GRTa|>Q%oTv__dUQ&`qD8?t@_DWtOoYUjC9 zt%k@Uv<`FwDOOe?sBe7n6~Y5ZhXi11NW1dMCVKE&RIfT}_S-!ZlZS>mN`3ZvvU!h?n zUP$N?(@zIej}f7a<&FfMP0sp(=Io-SC+T)EEFuPqH%2Ku)Gdi&BpIF*mMeB;SB4t> zUBM86(x<#l1-aOuk{RV$C4QV@IMkD>tfnyws31m00AB42LV9dM$$j8!FVG~%xUjdi z)@jZzLku{>7I_jmL23Gfnnw&_z-&B#sUW7gkmnxtM#3l^+WbSS9h3wjjB9|>M8t(r zleo-*p{AJPgFVKMMuT9T2GC)FpxS9MsqL&xSBYlMoiY!buzqPBl|yOj@-a_Qc%C0RzEE zw|eoAvIQikAg3BSDW*?VcH{^oG9N)f!WN3|J8jeSc z?d~Uv3+U1-1(sNz7bxq4sHBn!5=hvi(YTkCuVk}cXu1ZiwGRcDrQ1rZrKP9)5J3v( zNZPwn8}V^+7G1ix%29?B_nl2LClqCsj8n@55lA4euuSU&a>)6_QkNwpiJ_NvpQECZF$~!*d{{Y`g<0A_kGfF#ZaR99Y!h|tAyZ(0C zA2~89l~5EAIaAoZ^opuVp-qD^3dip;!WKpBtDuVcXC=&XnEXh@kOFwYAVvXiD6faa zXxbhb+<~O(Wk_vs79nT`M5qB8juw!G3Q4(sExB4KNP9}e9W2bcHu5k=guH;zVi!v( z@u4EGk_Lul$4w+{M^gDd%CiG$Y|_J8f?z+i6FEpuj^{6hiZP?O-998$(Y0;7*_7*m zCnveBYQ;AX17lHc@m{YiY`kT$Qk8%(QYV@TYe~XY!P{b*JXMGRxoGU=}w#sK{ab= zxmzt3XHAYbN(s#hpW(?|c|o8KarE!>K5DSF82w#?bom<{DNpEsRdh)ak<>EoJ7dr$ zNP|6I&D?9xZ9%xa*0$cZ2CX8*^tRyHOLUeenAel39xYZ>vbZwQVl z%REmMH{wow3tg=>SxUI<9P7@j*q*F{SRaGY-0SWu!NSKhk+CPpB{=Z_qNUxo3%y6? z5^EKwt1nJy$~IPBT+SSZRv`8<%tiq^Ndp1jSogKX zvIa)J-{0lc**H`XeqfkF{`BV^it85_jrqYFlwjcZ+}b(duV=7#2-sfitbX2V7fMeQ z;tq>oxG1JF5=Q*x0L?%$zeAFR0Lm81mRlT^M444|MM5x$daigcx!fwR%~e9c%g9T9 zh>@Hw1pBp_6NErSk?p&LxZzH7r;Vd$R~%cg{{S|!HPkwZ1l7yNO1v@-sBWGlt#6|1 z(kYs@8_3XcRzwm#Q zk|loQvlV4HVXS(ql_2YV+J!j;@c#gT@b2sN5|Vct zmenmY$$Q2dL9?Pf9Z=se5-Yi2%C3QdR*pnm8%;@!Gsa9e zDZbW4s-LSy86uuBByE+TfCrOA>T@^fEOLmo#@T|^Zi+Uim!^#?mMbWVIoKF^R;rSy zm8Ah$VKeV?&PQ$9b((0XiNr$HN$E^tnQ%iguw^7MxHlcTQtSQff&H-&U`o$HBxZ}u zg$QD-Fx9Md!$RYfCc6eIhmf9P!6OVxK;_e>e5vp}DIj(%y8i&;I0ZP!2Of9}7d#`N z(@KdW86-swb`b9%g``*9=kOH}Z94D+mvIH!f;r-?1R3c> zsp+}x6*m;_I7@PkniBAxHGp-;P)haYNl+;^poVDUk}P!KnbJZW5MwwABy2{iU0KHm z!prGyolCKF=ZHS9>=vqJ;LPx=1E6$0ID$1+-HJ_^j#8c2EP~LMSvL)$3G*#g5z6tr zPEtiG)76#$rO<)5Z&OrJ4B3_jp$_9hK~i*O*lfybwL2(Qf8`2-Fm%xV+GQii)^t0N zH6$?23qvXgP0MVxv)EbSa$?&r!?@K+m$Ux>R@`=Uw0h8DIoLW#(MW|P{{YUGX`@La z4ti+uTq2r%mn&Ggy3Ubs)r!;Aew69N`Vpp0D-`T}7}bVTNb*GL%Ecaz=M;*tS^;&r zY|MkNTe@<_gKGp3MyYOd(jX=pI`$yD7dRUxRsHd%44k~MyR(M|YJ<8+@fJo?gBWDy zngoqUKX49#3^S|^5sw)L3kf*r*j$U0Uat}kV)UiBpix@kCOE83wn*_vqFUDW*(x$z z+StngK@ucm(q&aHW<0A^B2`&ftc+K$Wa4R5MGMM?ynqOEldBUYC>_;FlFCaR?iSF4 z3ZCV5kwlU0K!|hWECN(E-X6sY4*-rB?K&sdT+NEw9KQS+m zc#w6vzZ-R~#o?AShmIm6BP|${-pe#9_-Pcg?g3nsh!FQ|$O4%giZZDOrZjEGX|r*x zy0u-c{>kTyLuZ_xb*x7wf;Qz?RlgTX?Xd3e*HX4c=41hH!V+it#Gxtb{8X>b&; zDz@!Wo189DsPA$vHnzme2qK+jHhD+XPGQ9=;)FoBdBGXr2ha8+!rfl z>BB5j#FE7Pllryl5MGaq_Ip)q(wn7Wb&mb?uE4B{aBA9l?OEo^jf-hb!zmD3+pN@4 zC*K#L8Y&0ftTLR906MX)U_n;Kh|ZywSY%g? z$~_I*J7h;bBAufuKv9htiDSh<)yfdxMlK3VG!}OG%1W3n1i;FKXHm>ljYi?dJd>tO z>a~=?hGY!4Xfm{cnUJ}CWR*G!GzOJ3po2=FX?daKjLP-*iwT9DdZN@-_ke~8)L9930FYm;6Ez*m8-t0$ORLa)%{wrUE8GoZSkx2GT2Uk}RfW2DK@(*pEcB%zg8*zoTyQc2 zw{E4GYTFzo^>jx@M?lMe;kEB22GgXlNYTuUj;)~DI$^3ijfy9V`{G+M+Jwzn&pSIr zHc-n{s!4Rr=QeZKhOCpTvVo1acC%C>O06_7?r|A9Gc1uvtgHhm1b;Bftfg22E7dz( z!Z_bGzpKpzHX~@Jj5=Q0=G*e?nJa^y{{W0Ef-q>dDR))1@uqGGX>lJTh01q>F-%Mz92qlhG!4S(-1?nSTo@1QG}!q=inSm^L-o=#5sk zP&`toWWP)0$atHSIt*97qFt?2kq7;RtJE!4}wnc+tSdC)$DX&y+OWR1!^yQQh3RKh6{K-b>qtKxfzkBTy-L&xxDeecUT{3AM<2XJY6~`p<8KZD=Ro2~Y!8$jB zq?h*T=sp}}5<;gVM2QA}BosQMxY(lki@H^{R`PO(%OC;!ClaPETuh8FZ0R>CsqqA# zG0F&cLXK49A&Asd{tkl!j{0G!E%d>PLCQPy1PUjFmV%sN?5`j=ti1aZInis3-5Qi6QB3(jUjep6fRv{A+h$EA24rXRR#I*;tMwi{U5p zHMP=g+gd;&HBrT{hHAPKRg5okrOFS+&3y^tK0^Z>^)ZJITl>3sMmj30e%k|F{{S3; z&|rLmx+6LPNOlY`P?79#L1teePK!tRMjDRLkL|R{sBhc{0(5p(jd#)` z$m)oto#AB8N;ay^^H7Qs<1%hfA%u~tx8AlD&o~lDTuIb*PcnZ1aF{?GU#P=3d}v;T^V~H6*m@&BLwT#t#@t+pD|g)kSh>;>0}Ss zojhfA9I{0s$c|O$ZxLI>HZYUR4{jt8rjG@Qz!zx4cpiSq=dU#%nS1nSt>fo%&9|o)|NjCuC0(0N7E_e){&FntYkw(PP4r-0idHzidx95s6 z#OE5nFu%H1spbjPSPy`wR;oIZNIKeW{GHH};KO=(>o~1~(%FhjdqEB|^yd|=!7=f_ zP{hO5b9Y2kp&tLpS+12M}TdlY7JmV~h_suRM{+N^r| zbq;}}V#?qoV=7La21MN)NfRch3f26KbuX-+=$*Z)i zP<%=6i|fXUXs$cyCCI~R;bGl8RLm9D9lnBghPu>=ren0>F|;`Z`iAMACv zZ%+bS{>hZK7c2eU~#}x619yMgUw$DgBk!9G@R{MR;9h z;7TkQtvWCo;jRbp#1^>{j-x0AYC=Rv8)+j{-@NfMDjch*SI(L@h0;WF4K4L@ zBe(*UV9FUtBk0|>WxTCC04(6JC0R&p=$nHf{Is%@hEV=Z~H zHy247ITWLqn&l~LL#@_ zN=xyYCd84EsQHtgCsNaFWk(%BZsyw|3CVR&e5Yp!L?j8;dE&`2G?v5ic4yMo zc>;+D;;0k0JFk!TRv0QmvecnQm8P-5+BIc$46F+O02X@iSWXi}jx78+U9i<=cv{6N z>R2&N$CyI3D<(7tjTOkj8PIkgra*K==Z+^jWx>aSN9qk@Ty@7xfcemt<=T)zSvb6V zE5}^VR(ER_WVLsXIRI~y@0kdFEoF{OfXk}!7f}ebj0U)Ekz=RoA?<<;UndYHH$W**`K)*Y*(4 z{w!YZ-<{#v1!#ss)2AiPqN7%ygIkW(X9;Q!8ryEYDZ1bmjaeNP(StAgO8(ng`eH$c zwFQbY^z5#elY(+UISf|>AEfB6h~Rr_IdkVv2_4r_O)P9$IT;GDw4Uaw?AuIdENYa{ zt3n(eyPZ!fxx%516#f}O6epFS9%h8EVI*Xf5%R++#=0M;#Tct&s7g$lV8|sCvFJ+_ ztVkZot6PqAk`P$xRFa(LSWcyd6-Af<5Ut3HLhkzR4!$9)(YPm2IBb_bQu5^CE-TcU zSAmL2X7#I&`h`G*NB{~z73{QKri>IE3I|373jY1I_`vj1e4Rw?3$sOyLpn?eT!Z{= z!h|>AF+XNMF;-&?golpAY)3UIrCjhJh8zbh>3rv1LO@qUk!7pTjFs}hchDN+qMEN_ zT5}m=86Bkp?J^kLrk0Rft>h*~q=S&p<&~Ez!y>iI6@v6zDJ+#Y7+aFztZj^~>MsY%A zAwSY{!3~(2DWeXM?KC1Fh(jI6ZHnsW?3!pNf>R91#s023WztB=?R`9JCL8ic;z6k) zow=v(&g@bk% zb~%w#zkNcO8pfk}ASI$Yj#%ad$DHFpV?#h|+^iW`tHWeD2_Opp0LI;R<-G`G08a5V zN*RIT10l?8P}PMl$C#WXlUJU$OtFv^!vMnsD-hj@2Fz(HnT8R-Be~WFv8GK^u_ZZ6 zE=o;uUN1EW{{UGxJKV|_5tQ66f0{&nE!bRQctVAOHXPw_$`GR~E<-(Ungl_`W{CCG z;+YE++~%f2xp`rl&*^no28xFL5;DO#JU5-RRS& zl`Ry=KXsYu&rQ*om#aMTmYT){vT%501$hcl7VKrHC~yCUF^XvX`UHD z401*f)JB+TNnHXZAGl>``-7EufjLc8xni8W;e2YP+MBE#8_U$5qnMzOCYE~1BDAoY zvqfj4ATQcI9BRQx+)CgWOGYw={X)01Ixyu`v$NzjbMjYQdOapN;t3!Cmeb6jbqaQf(Qgh zVdL!n2e4@<%mU%u}I9SNn#MijeV^MuKB1 zFIXx!O_csstiWv_nSgM*&@K2LXh#_+Uz=>5kdAR~n{*MPT&Q`}*)PR<2ivXT&5ASa z(*(;rK*1vb%fY3nvP4tLt$UESPCD$Yup}dlV2vvk#-Xv9VNTfiZU?b`TaW&lb?0j* z$Ha`%-As79w9ir`mnK#EbEDryb=^)u?v4-pGslkUcN%KKc%^_r zap95Ljm3gSc3JfVO6XpU;HKSW7iCl}rZJ}_Pky$`pFK)BNz9k33)Llq{QdGl2T&0r=kg8!#)E6I)-$F3 zj-#6x5@dogkI3{I8b)}DF`m)Nl8)KW@o&`?UF|C73l+K~6z>+(Y}K5^$MiwS^qRa@ z6o*l!ig=lTA&hEQ^!jeAjTO)xz|}GO!1`XHUvP(n-I{o(p<$q#vmqG=S0n3ftXIy} zy7l-~u-T9dFe9jCUVd8Y4+AN4rrtZ)wou%ecv>dVRWe4tYWx5TqQ9@|2XW zi;yuz6LsBMN#uffcN?%Uiu^}arH*s#VV8&{xQRa3jy|$EQOkP2!gN$U@(y`qmUe$W zn-$Sg=tnq+f~WoW>U}E$(hp^6L~;U8v=711(9rX*{Ao@#423**QHC6o$EI{NLC9dm zUOD+54miK@Y}HC6p#apD5{%Kf$l5NKLta+P`df%F5-*Z8SH6J8bOv7 z#;J^eB@HA_(YPVD`Nzz|8~2ZHUOSC1-qajPkw>-Sj(DCKN3&tGEi01kb~W)t3Cg_Q z9^f|XCDHf%HMsn>zm{|QT9%AVOGHdg`)jP-Xuwu#wn6^@0rh+4saNX?MonxtZW_`+7V$FmpE3?^{uo{xNMJ_xQR6<`owGBz^hUlj=wO#q@XzYJh)pfU8SR1yC zZxgg~DGgcqMiiW~oexat9U;;;f({5FyJHM}M!IUsRfa`*A0{b#zwsRsL}YagwyC@l zq&`qH4lf&VdREfhA^bn2@pRv}+D5UV_nk)kT~E>RJsu4e)YMWK-5ehFI?-R9(BbLY zj`dWScy#GGU&i@Wo)o(mX>VCe+g&?kY8euxf?RWk?MA0NL`Y@XH!tl9W0}m~Mg55! zwAB5Q(wU8(5zE>|3UaOiN-!9w+;&+` zRD#M5ph14G%753}t;@IHM+o2QJB(sPoBXz(c!EBJ8_w_E%1IN z$1p8E2KPWh=4eh(dDSLNsBm@4IqSpJ2*z4W6@&~KB-?APnEwDuMb${Q+i-N@kgT$> zPwuzTog{|E4h|1izS(SBst+K}KxJe;Eke~TJUzyPDLqE+AiZV@T2x`0w&1$Ci`ynN zbTQ{j+ENex0oNytt1cQa7qJ8tE&F;62I;>)^8Wx7fJP3iZD_=_J+)3|+nB{L#9fc2 zsPa04N7Fj1D2_}qJbib{1`F*Xk6^Eq1ds(=Rw+0}=g~G52r(j0Iu(%-)Z}mRx+Pn& zJ0pbzE(W&41QWHHjw0FKw&L^OXpm3-qrb6CW)skxgG&Yf0J_%H?=4E!q@E1z?G=6B zqG>!*oGm(6C!%b`If2E7M~wdf`1CqD*rv~3u6yq&BiyFI15mK(*@&LoWSEgM+7Tr1 z6l6x#sRK?VBiK=?Mw=bl>=Jkqx(J(oJ9aVlyLXiZPH ziT6WWn20SsziETcH3IF|$2Wo}kw8!s00sdEI+Jad2IooFitaFp1QxRd#1W|yIa7qF zuCi@Rt?*wrie=!T;pBAAdDYC zSP)d;*PUh$yT^2*6GoJJ>%%E{wbHi_+BnpoeC zsn1qY{{S;zH|DV9Bbh)jZs?^VycP+Sm4GTi8oNfd_&QUjq=RwUrU;X;jt$~Z`t`L9 zn$|l*DziwD%Dg3vI>om9osm5^%4>Y5*QzH$?^ZpCI6dTrB;pD^IdFPGnP7QgnI}ZU zF-Hp`5>d0IBoU=O^rt}S90UH&2y!HC5_}%o)vd&0o)vX(hDtLUx7`(XD@XiY$++ANCe<>5mzt~5wqbNFsTJdu z;dSFFI%Da!ZG!ojyo`vuEedeUHK%EY-i)IAD zixnezpqeZ5vdb%$b54Wyh@|u^%QRsuAz8H~amtL6C}g>}OGLB88cM+;odFnNmaSKO zbvec^MaQV%q9Y>=qob%eI^1e}jkkn-n|0A$nHgD@?&)r6k0j~oC|KMpO>P`B?UoCp zzi7$iI5KDOXm*O9gGl2&V&sFttK; zbz+YU)i*hj@RhH!m1a^1IMSUihJn;a^#IRgSMFTkj16a1PxqA{$~q*7$ipI7+6D@H zsR4!v$Yfx0y}@Cf7W`@00iOc3b8*DdulI7rj!ujpHM&$!EB>wBs!Y($Bms$*cr5el z#3G$wukOvI)jD!nf9|zpmr(pNL^zh?hlgQE`!(A|Ty5J#DkF$1ZUPs(J(sW|o(odT zwTrwEw5!#IH$-r(uP!7U8B{0<-CQG2icN#!gac1hwT5+FTb-+Mzp0j}x4_lB6AObqyP`#0DeTEc@iD z-W^rfgP>)zwpT<2ED-c=7j}x&xo3%#;EiJ%8dKGpLmj3`(PfDGh^HzzF!Qu|RX?GNyR)WE@x- zNG{kXmST5A3Rg)uM2ab6=N-+ni56jEL0P<%rIuq@vzl=thg-K>q+*?^1|rG`xUqim--?%2yBSKp=uLEY#$=O+02k-;88rh9TY~B9@Q5 zQ#=mGAzEs%+74okGOsN(A%jm=8KZcS#EL{$K3Z2#F)J%5Ao}0gmUWobl)&^LwN|QE zvQV%f9d0zu3z9+pU6*taM>T1S@RI#!Y{v}aQ>8l~l3E!aDI@J5%F^6AAt9Z!3nz~R zaL^hV)UAYoYdW`KAQ&y*Varl^Py8YA2xfvG`yfz|LW9TBXPPVN5W$Mgc8`~0>SPJg zRgp`;!`>KS;%CA$mWh&7oshhNY&|)vO3hhSB(EekJ1HrsYzU>Qkxm(sMQ{B2Nf>qg zi;)omLKj~U)9X_cj?yETq(>fjqX5g@K*o<_r;0c3z-Fx0DPcI7tAN*T zWt?b4>W_j;@B&zUz0v;Vc!O#QLaM;(W`^Yuc*xF1s@-^I5ZnPD{q&Xy?B^rW)pWI5 zXdlMkeppM?ve{dI4kDz@3%4!0VDPj|dy+BeSH7iYimjOjqF$5`N1%I+4Q@7#IOUKJ zdRP&lS(BQ}1knkR1G+&B&i!}@h%dzVp_C->M0HZ-Yp@Amlb8G*A}o=zvW8l6Nw&_> z%zsDd-0idx2%+z1V}%-4nGRsl0f7W$Sg0Kc##VLVB6WftapTV{$5Fpv47$lv*y_zR zk{3jXIzw(}1}ps~ejI{Rp)PwYk}uD?74540Yj-7?+BA%>u}*0MzxF9oY_-n>r^w z6Ow%_K++bL9CeZB+nMI5tYNEqoyhu;$`?yHDq6C}iAwc*(KABfkHqS$Qnc9b$dHP; zEGx}5B!c9MUJ9F)Sxc_q^CDfTb=swf)SFu*(32%c=9KGAX8ks2Y{tS2`bvej3cAKQLR=(=TY50Y^9n1xT;kY@OZP}K0iYVbgk)on~ zFB-V+JH1{Khdxb+Lvd*WvGkq}xmQN%*=@c~yO>YP+fXM>zBO+qY3a8q=S9Wl02R zwu9gmBa%vGq(tz$7?XR0fife9r+N#D#XC3AEKyGz#WZT^yZk#PLi5zjkXE*09XS`A zMMn;-OkO2zPZG`sNDmygcKO7R$Wiv4@(si!E<{uR0K)GOZ*V+V#3O%c=`jUc958!% z8jpm)q=UPoMCA^qjvFh+#7QQ%4X18`2Av*Q%}QHrwSb8vT|-vwR>MphqlQ*xIL?uZ z9F1Drn+-K3?H#ERmRKa>`)=bM?5*Z*HB}4I86HYX-W6kTLP# z`xt=f$z`nQ3$94oJ|=W44dx|PmDO1oGXDU=%&NeK0EsKM2wXaM4UYVQ?~rvme8eS` zeyX@Q&OzMJy;c3IZPmJ20ES5#CVI~P?WVQZ9@KL79*D(AAosbpi!AfjKqjZQ&cP++ z(0aCvtk6uVmOh=sYpb}#R#n698)dD!OiH;#y&aINXoYu*NLVY41LsDJa`Wl87u&ac zn_IGZj-Beaq3S^S{sryojR)Z?Gd)fFZncmMk^ca}?5e{I0S#6%a-^vcN{1kZ2?I%3 zEZHuHsIMG=jZ|qMLmZ4jv0*{13XXf0<gD0BZQ%tD9xf>8^TEyG^QVd#yGXsjx3^4Zf!r?B zzgNGAro=P-49JSk>=k!ki3?^LI*OqvEZSm_&tOOdaYxgK;jPt!{DjTh{t>wuipgL- zxDDKC*Oct(!pOB@3TOs@hNq>1HJ7QP`wDhhm)Wr>qIbd><+g>+X?$YOkrO?tI> z`qIi3c5TikwKY(sA^Pv_mA4p5$^d=CZL_w`!e14yM=4ae{B-b3833p{g=gvqiz;mF zMpfriv&#jla$-p2iRHU;W#cWWooiE?$t3_(o$J))6-j!psNgayIdxQd0RczbuD_()4Z+aMWU!!UI>rS0bxg~XW;j&h7C987weLQI(!>A%^ z?;j@r046oLz$c+037HyRC0!01YrL1~$3JdgT+qclO%&0qrtR?T)j3UDGDA-M)f=!6 z9^W-9O1&8eGEy)=*5|m{6EY>I(YWC_D2p@OwLcLo?&C=sL=stmaEm>u5-8BKZGR5M zSB%!M^MAr~?KYvBSt;0NktPW29U7#mepr=Flm#5q=}Tm!Y@0N{H4N7aWxW^%1y}+s zS17=u9tzBitfyPmAyUX_h9TH5idRCp#9zVPHVU_MEI5W~s9T{R>%__vd9fN4mlMSE zZIk|Ifs7kiT>k)Swu@|tgZ}_|GqvKR{Ip2`+xA5(5GV1Xwzq1^NgCVCrZZCgz>ff2I;txP#g7 z#ioaGF#bQ{YcLBD70w%z0z(Wkka7yEF6j*7)7Pt6(hZjAr)nyO+O&U7%3XT)AwZbh zb{Hr+%3RAg{7-tTNIKE3UN;9AITs+B)@kFH=2IqECXU1rO&KMB;_H;i%&`qcB8CKj%W@x+pQI0OhprIs zP22u3wM)#f4)>v36%3fm#U!!Wjz#voGbHgOvFDHcUo~z`)rf_ac4;k)g3L zKw@&i(IZe`f|3+7aN$E!vVaxB((-fS@c-HX2mt{A4L<oB zfR5ssw=f5vc9iKVUw%<q5pKx+Mp2 zd|^>kM4``29F0qho*q)7n~}1_0SE`vX=YMJW0((e_6VNG+!e|qq&jn#h8(PAP$2c!K`?`Qmg7GduK(?tfr zO-^Ng#{3GFQ`7Ef50pQVg)m${GSDvy8|KinA&y6~w>nLj-| zW))X~qt9Y6a!kG{Xnw|%k^UxfLdAXTKdMymWBv#B`z3B+)ka?NaR|TMSlD~#IH$|H zEK11eL}j{@tRn+!=PT6tFAHMUu)l;_)Suu_V{_@5?Q^x~!KbkO)AmKV*Q3N>Pl%p- z+!Ch>7jCJnDf}9--20#GP1wS%b|UJyUl^sTg6)U^^Dlw0Sn3Eq2l}DVuf`P@mNxhsh*&NI2}uoY5<(rQ3!;uE#w~Z#Byr80mPpULb9{TLi!IxE)QCp*= zdTPXdg-Sv0{(v;#Y*2x7`Nr&VJBYxxp$mIwRJ*}Xm;5mMI(7tK5=gw*;79c7ZguGV zbhcoOK@l)-+;(h!>TCHm9(|P$ooMLE$SMZsEeP-2;#sr2TnX`9BC8Nam|8tXZ;6DE zvYktNoJL1qijf5%zv119O`G5^24ZeFZ3f(TQ)#;3)7WeqvKN_ptT3-Dp~=@{Hh$|& zslkL-AvVW3cl!N-a+%nh z^u@limz2FAS5UvxmnhvEu)i>KSly0O*e1vBD^|0ft7H?Dvp7%+#W-AR!6-Qp2&2At zV~LdjTj_PyB~Tc2GL2VAXgmYD!f4|oG&}&qnr?q_4*vk57^b;1W0dw3gYd=?_XAP+LDdVECRH~hVW8qtC5rMXJ^e2+96aG7dEr;x zQ-*aZ!!M09`b7klIsq~VfzOo9)O}VA$Ujk<@OB8ME=({pM;?jeR+(RVLy%laygpJX zDA;n`z&$`0={IJyT$HL%k{!EAbESz(CL+ZQ&SqRSv zCWg@CehZTcqvVDolKudWC~!zKEfuaFq8>>8r7Bk*>zU^~<}`g^Euot@KeW`Rf8)qn z17pf>ZX{v|xHH&p`cH2Jjo1{*I{(p!Jl(0R(Cf0ZIOym!=r+D#P#Vx zq+&qZ9p-9%o|8wJvgMBRP1YS#PX-e(z{Sal?+%Te+>ZBW+0763&u=t7{y0>-;06Nk zG7FPj`(x(9I&+pQfhX5(P_(H@8{$625fFSixOqR4FS+0Bs$k8ctQIS82>y|E2Fv{> z_jLV7WP-`V%sxf&)z>^!omOm=s2+cD|-SXj&r^6;I|J@Cnq5q zY0qXdNiv`m#IS=s`Gxp zoGqHmpU&r9gDy!ayQkRIs_r@ygd`7)e<|emCukcLrY;w$$WI!fj2mMHZ&(CKeJl!} zfr<+;8A|?!;-B=I9%SsRb1B$~sMw6e^Do&16#T=rR-&i4o43e)qA$eHDLm#fkRbrU zim0%5>UQB-2e_W>45SD^J)GS=zC6X9GHIQsw`;ooZN#>DgVJm`UykA}h;+!$Z&`3r z(D#&ydyN`wz>YhO4`jut6w}WK!<1e=EX!kjGw8W1ORAj8DH$!jPC>@ zKz7}r9nvCVf3`3${(Y6eu+8VHgXpRz{EV<>4q|wo6&x4eltKL&%gvSmPQALP;QgAv zCx(mtJ1KgH-P)r`pWgk|`wpFoU&XJ*Y8!NJ@PwgLVU>nt#u*W8j7B0c5Ah85Oc`e6Pc{K*lCEgRXmeKVI+f$UEZdPG$-LJq zd{C@h38wcQKzZy|9&F8N{>CZ5j12bFL$SEvtIyMu8G`bUYcWl3emXQOzbo?Q5edw> zSo9mf7Dm|Qe!(ac?{f}leHZ}33M#)2#b*@$Im(U_nhc|Qbxvo1%R;>jz7Mtc;AmZX z6#k7-XZ*Z859n?uhjhs zT=O>?iSt-#lpy5FV#ZuLj6~+;9SjcPyH2-whU!GM>eBkM{uxjnKn@7siUXP+S-uP+ zDHjtrUvGoc4mfOc;3JY0?`-&nx{-rkC6?=mbm8niD>YWh_Q?x2hRM`IY#e$I*-%M70vr`EjlqO-QYI}WUcPC*zzdRa0t0X8T+^px*mLw~Ge^MjL1*z^ z$?m^HImsOlVxek>-`Pbi?pP3W{$q=Fva?SK;D73MfLyU`0F+2dE7+${A92HoAczQH zd?2sS?taNO7dE^#N{ei`38LC4x>iiqX|+r0vwc<#GgB?8?#tTh!KGaM9vU8O^{2!e z^Xt-OaVSy=V0Z5m#0zouml4C+Y{x@2q7dcV<6 zW{Kxsn#w27CyM0qktlmj=pf9)ha&nbf2p7U01xO@#SF-Up&fv3JPgsZVGcxaIHBx? z2!FRD#f^tkgg_K@Ud>vnr=agQ$aa-UfOyY`=x2fd0HHh^{=}}_kr%M&MAwNzpA4hW zM&fWp8MN6U%#(8)HJ0yEZ%9MwP&po(7!Q7d!O-rq_FDG&RF976dKgfQ^1NroyjD8r zvCzsDxx##!17ZlV9g8UCI@myLdp{^nW6&_KK)l6>jEsMSv z9Nz*Wn_nOXUqUC9Q2t)m`F-CipTB7452D>>sAA(x_|3K>Fnem;{^ZBCN|8SIz;>Ar zFIaa^`ZB}WA5bTQFX+N}b8GK2$wK$He%C)Z==kvjAA~7Zk(-&j!|(%P*aqN(VkiF8 znI%;E7{G!X6s;=1E7Cd9d6IH4Q0HSgiyNDgPYSqHmhM$t=eE6#4x(GNsx~V$M>rX= znH`T&DkdW}F!#lX=3sq%@m&)TWb@$Efdl6QM&K3fod%nbZgN9aWUpo&QWMRF=QH}4TG1%;&bZK-^^;K8XmfXz>gM3xN%odtAVArt&Z$@98BdxEf zIuQuOj1|x5&>WBH014PsGQn9$y0y0v@p?e_!S?Ai$W;Q!$7c2#XTh+lMvE=VqjJ~* zGk&Ls(Ax0bOK79fHu#3LZ;3viDEKg*g@(hqbM7F<7x#>8J?ca@)9Pxg5pfDFufHqT}T`m_Q)NpGs}9`hx~?YmY^(H2_~csSU=iBPE}ZmgYt|TT@W$Imiv_UtUIoFlWtS$c&mT z*z{ONDA)()*vfYPCr#lP6=`7rB~Gg<)@JNdVAT%nGF~KDy5>gA4h=S55=FDsazIjw{kD;9K-_zw^da#X>?!JL1+{$Kq*o(D>{pB%+0A|aT{{Y2= z&%s#!%&}CtI+YmV{ibdUY*O(sw+5Z6clj@mg`5t_OfBn*G+o$W?cs@ zGh%E6cdp%UO+x#A1=fC-+0_BbXD98T*hcQp4 z4W7A!B?7>4@iW`02L6cXB`OXn{&F~09JO`>M!D1($^oj^L@*nHk_g7^K+OLDB{Y}h zPu}!lfm67L1*$SVc0XbL{i?N(!8@Eco1W7T;I7NZATpX9mL#e z)*tqfv#Au=gP7oz7w5t0I{U=s9F=n^8z)>;!I2TFAS4Xz4`z}U_%A4%gJAJ5^ zEWa)HV0ka`RWNt@FQsqsW)X99nIpJQ#3_r4c|Yp#39>}70*U2{o(p9GaZ^_dEXPFcD77n8}hg~w6~~lFJpYi0g-QChsv*G>(oQ8hHQI4e+{$; zb`jgXR>g=ru!&7qpW3j`hcJMiA2Gp2o33Y#ZzpvyF%M0#Qbfy;!r3*|4;MVK6e`;> zX+aBz_SJZD{V|0^6+~7d9MPkESFB=O@W5liRL<%`VklEkdgOL1IR5|zilJ0&1Pm0_ zZ$U{m_n6i$^$6xExA-xav28hl{{Z=<@b)tKBZ;3V-_y7GD+t(Oi6hVr^H!djUyVZx?e(g6nEcONq!Ot_7H)yp8Bn;XfIU8y3GLivx z$C@#+i)LXw^*@uXMfvxB{nNVt0Gba}{Z#5Z1`Yv!xb|MMbADAk#(JZG;qB=+93LZ} zC>gnfe97GQ6cS0u0X}co_Qnpe&J~s*0YK13Z#bPFhL7u{Y@K@^$;;gb#CCuJs&fdc z6?_2U%qKaq;!WAe?*vRpgz+^wKg?Qr&TsPpxNqyM2ccX1(7~E|=^E&h+7RasL}fBP z485lyG0SrcTV@B~co-JkFTj!Vk5$?@@1J3I>}wqYE3PUb{{Y34KZBhCDn#@HD7Zju zppS}}!z|e5_WuCwVxC@OzCix~lBtdHWFz!fn`zDe0QX44J=4*@_&As5TO@y>FEX|3k99|fNZVtW*X_EQrzIg|XOl-sNz zAHQgFDt88HRB8G913r+qXy$tdfz2kPQPw^#-=OdvgMuV%f?$)x0w@0J1C+y+RN`Ni zcq#Kw$5c3}gE|K$i<+JrMq7)ETf`pF*b{Yx0#^AQxN`_9w-QA$*jGkUas)7qw8H{1 z_zAL7U#VyY&V~R1aF#3JkrWPG%p@sI$c)hXN=3n%(apN9^5KQ%EAbJjls!=JEG3T< zIZw|B(T&MElh~+6cnorna`hiGhd0o$FgLxJ{VvEN{1FZs{s)MbYZ;2z*AbXj_8=MQS0H5wrHEe)P{z&sNPsaGOd)8P1pinXjG!W#Y6E;!I(?>n$ zhd2S{3NQ1P5r=x`d12ptRCEw$b7fiVE(->VEI*Z_5$?==lD&&LH)sGXhcWkD%`HE+ z17fEF4-rhVeJ$BNlb3`XK1KoFUJ5Qr$O)V83AsayEZa6u+(IFmp~YGXp(>_nz@dNh zJRJ`&<`}G~30BbCh{O?r1Wc34RyHYBGBHhp`)#6#bG8=n9s+II!IAm+-U{ty)Z%jE zZgbV~>;_O`pyzFjV}hu;Ghd`6Tr*j=g<>Vs~_dH6Xv~(cA0G!5pnlb7FQ7ZE>ob!RWqHl4IoAGC)oE z@5PV!alHQkQ&MSDQP+6>u*ikQp*@1ZkGfQUi!p%$hk)R6XmWd;0gijrbpG9=3FnEn z_Ea#O97BFe$ztEL32TN(8sHNO8wehQ@nP6YAU%u6H#vW3#x*ddw-&XJ#s&pJBQ4y( zaH*n(+u|WS;V))yUmuG`1$mF4uDE?rM;yK^zx1yc8w`}@Z@+m=$*XUrmyYING9c53 zhEV9R>htks2lC`#-tBt;_K}%=>S4|&-J38)=d+t6B)7-x4;Lc*xrE$8PbuPXBXDEl z1LVW>VKaJ13X2ya1|z~QDpyhAeEL8;j52tl=$p)zRlO$u_>Vu+QvU$wjR*NW(Y!Wk zyI{3D3UFZtRmM-?@Z{qaZaS|AV1)|vOY#2zQ1fYEgR6E|3&cvbcgb@QTh1F;u9H!> z4AA)P0;sN@IdiX!4iCsFgK$Zok%=aIzK1!lt?>qEp#2PV3Cor$z`$`C3yFLLIh|(w zz4n{9=Bm=GU00YhDP0MS?8mU6vmKRjFt>&PkSuyYNesf_e{=H^p)F#2?$ei)vBgwm zPr%J|cR7{t#4vz`L8530_$jf67I)NVVeVok=QrST=9`f>I77d7dr#r8nj+&iTwZ%^ zi+?d9(GMy2abemO*!!Ek57bPX@}Ik^lkl4LIQ@{wdqz3*syIO$+$vPWFzhxVy@uXX zBsHSu^z~TF&adcl_=6F_756A`a3S(!oWcgUmI+#ar%p8xsXby=Rc@Tp*9g*^l>BKl zbNAbx^}>%5mydpA%oV5u5Mvw(^-0ZIT-<7hgV`#GjL7{L{*C1@2`)Q@19SQ{O~ zh31{#IHh=pPI&?5y{+L8X6*#-@I4`<^;+rM=}$03!Xue1QD#vhawCZj)eD? zTOplD8wzXa+jcPAvD65uaBa>;O|RyLqA$7di%hNjQK4gF#GG42QHe7ExMaC!;HEZs zW4Rwu9}tHk+rLIw=q}*nO5*aOfUmKsC7vx!>&<++hYNl_EG?|)ohbZ@%xxr@H zBpCtx+M9xU96JL8?(E&^o&yz?dyV$4mkp$Gbq$9%Ly`Ln7M3>GJr9Ji<`=lXhlc~& z4XWo3RjRK#ykUbV5Hv->@-7Erg=R(vB9$e>)A3U(fmWYK;Ary2H;$qcnBFq?x~?6H zU&TnaM;}Ir;4qp&h$ApW9))%E)*&MIvbaBL%_Yxf_kdVbQU3tYj0si-;M-#+{&Bo%*pUO#_Xb-N1!Uzt8We{vHM^(=Wk>E}FMO^8cKH^Gb-lIP42|!5 zV0hrevrMarYw*3q zWykFfTVcFk{B=NdXj=;&dQ42w*66}}U6mm|66V9~52wjs)`3So7qYy`=v0}%k<`T= zE_7ZYx{;xPkVlB)R-MG8S=Z?6JeZdrG|qnm4Dx2@6Zgo)#dshXc#+wwkv_}8Ot|Wh zT^p+L6{=^U07{hFn+^G5F;nj2sL`h=9#WYk`Ixwa9TKi5+k(1$(gz2!v)R|(0DyuB zHX!IkE#C`=Gka;X?y!))a161@!Sosd%2oYwE#4l43tRO4P|0#C{o7 zluP_LF~sZ!W+fYFXdxPe0D+^7az+c43l zpfIuh=OJs_OfES*c{ibN+G-#d{Ae}+s zmm?fULkFa%242E~Om-|zR=h!P%(DZ2yfovl2c`>nyb%-uTnm4kz3J6R`LUWmuCk~G z<8jBEl%EH}ITb+pFo}pB(lGr&iQlFUOeI7Czb1#O#>s7!^AmWvsnU7IR>Ik3*`jRS z8YQVb^w+9!4lwX>_3qB*KJq38my|AQ4)MJTtBSV`2Co+-84fSxA39Gt=>GumIkD(R zZloWia(R{kYuthc!G(41k`^YHrEb3X2E_g15-R zEx_MH|(fdSh3qJ^)g~u`n0djl}s}hkfRFR4>0WY&* z90oVA9LGCFODZpSA(X^aQ<{)%4S@L1JQRfHL5As+1smRkG`0hGIRPA&Z8>j}Kz!qG z=Nx1vZtLntOa`NuNw(nU825%?s^UbggFrBZ3+`Vd0q!L8WzUB<3*V{ZNLh!rgC^>+ zGOPUY(21z=7!k&s{F}1&NR=6Qr`ulTeOH4tZVhf^VRUYyA8zGOR+l`WV5`tejAH^+ zv9vlDw7C};f=1nkLTR)*h_H((wgd^kt|8ho6)YD&7KbMot3+VKsDuU`8;)!J@}(j< ze;Rj$r%;;yMMdxK-e6!>~+xtMev#+VY84QQ&a51EJO;69_9+4%*ws zc{{B@cU}8o{H9)v4Sv8uZ+W+1BRdnIShx%E-gB!`O(Ceo3gD>ukzt!0mU1tg8S>OQ zs>97G?PjL%>zZ@KEL!>5atvpl3Nh&^C4%~&o^t}IRGxCtlKkM^ylj1`Ue=w{9q0V9MUe(TLjVfB1k{%0_g+31I$t9Ru&Ye1WH9O=Hv}6^9VfAq zd=Cw>KhB(ri~ZbcpWmFZKeIx_KpxAji~!)#pxO=?p& z>=;ps2giomH{^#kVKX$f6Cx+b#?45=f9h#SwI&BKZY8-Jqt7_CheL}-dnZuWScYUP zX!A>YKiXz*Nu^YARVDbXCvSj;stC&WKb+bSRP<=32uCk8ASoI&G+vYRSbIU<8g%8x zU5oz!^Vn|a;tnp+voDMXx(1S>@;a*eOfs~ka)H4F8#8jAq~{dU^Cf&-p_S=1jY?** zS6vY!k3UH;42`NCgT_#!PDJUY-~=s?q}T5Pd}0eHGW)p**On?@$<>YlwJj?#dTMlh zogkeEf(rW%;K4zRb zavQJDj+dIHUih2S?}@NKP-g2j86W2NG~10f4n5F-M_|(>dWq)hQ?}fVaq?~|WvqIS zw<5$GK?Z9^{{S9IortspGtD(>P5Ly^*Y#Pb(VzgbdXHg`FB(kA(&w6UfMUKK4kLo( z-nvZ)`W;q(>{v~fpv6r2q||CBHzV;PCFoX$l0QeM-TJI6bYX)F>ZWcpS^og7@mMnU z9&5w+!CU&>o**=29Aq*d@=v z<~wWMqfj1FXFe{+HaZB{fs<6X(R^SSqJlXsG^#x@4UaN+7!kOLZn_mV3x~N!4s1rM ze|e}}mzNOBZA4dAl-}antg_c%qeQ5$8_B$)kqwa)p9py>A9()&xlqzU@hu6wBKSiZ z!SJ)sSt6S>Y{ML1hLsdR;4?1U&p7GMxm^vr0>m~);wIHcJf=U{*lI@W7Z*>}f14B~ ze=_1B0P&>8pJtbpJ-Q#c>;=i2IB5BVx=paA@MpTgGjCy!0=HA*I28_@9R)g{nRqr6 zBH1dYp;an3x)*vCcr`H27XjQGIu__X1HOPF>$Jc{{XSWpb>?bfG=&MFQ;uH zI6Z9xT|XmYurDuAFoaZ~Of)B-@{l?*tgAzjzp%^P@k(rYYztaF#scec0q#{pbTJ2Z zs*D6WE-3yq%sEsLn2w4(Lz_?aWe7TzMN>7S6xgX2Aoz~J#CS!-HVO<(9-s4Nd#^|D zaj1cZRP5D6e#P>K?MbmMQC8Ddrrglxm3#BzjU9kSTvecNPeh#dW#Wd+24HU$m0MB` zrR?1dHgxD^RWD1y;xSXyKw{zyS@Rtw@z|flGgAWK-nZ<+X;ovWC$79zg9G9tQ|JEx z2E1h|XRv3ihXz^mUWPkaTT$5MA0`mfuk&KCy5kbugzBbOP?_Maa)|e){?9gs9MPpw z%;-gcVfG4+ME?LrpZ)erU@wpuacl>_J~^3eZoe**7BTLsXD!2M%e=Yd@wOyNzXfTj z->}q8GvVf%3juv#^2R?3Wuw=khoL;iV!#dRw>&^Xl09tfXO8p7I5jcRk!~-X)ngL3 zQ((|_?n0oD!ZooN`<-%inl5zekHHh*4zCR`?bY}JWvZ~7EkTj&(;dQ@q@)GN$<*Y- z`KzI(dafgiR2S&o)7iTr>~9o(nKMt}2Lf+M%|!OsCx_9fGBKP4X3b*)7#xU>FlNb= z=uV6xlViByNx5pSg<5$++Nx_z#A_MkUo?opgvzRMwwl099|P8GeFi(J(9Lc>vZ|I< z*n@~2g8ZkW_hlv@F6rQ>22*1+sxmP7LUst8hv!;7ep1lgxin4v(!d5foP?=#s;3oWA0koksV&5wH;H}&=60UWgRc~`qlwOWd2#9T&Nd>NH}MsQA%xLa z1rQFx`AtuniI9Ojq4{#f?1B|?PDOdUv1(k^ZPpho2GHdDo+$n0xdD=VRtB-QDE8rg zqW=I@GWaWcEzrg!ls{1hRdcIMZriU7S5@Feh$7(6VdkyrFT_m<;`MnG#VKL@)|m5& z)gc$)K_3`U2I??9igtd>eVu?L=6LAqlg%7rrW8D-qA^p|WqMbp{we7pgk5@xO}olQ zb~zC%pmddon{Rw$F-9@FwIys)RnKLWINJO)Ge#M#r&N3&4#lNzQo~+aqZz)d#^Hi! zr^B*&K5fk%*nrtI#*lAmS{s51-}N~{g;kE}-~GfS7EzII*uhs;I|)?tkOoVjob1LA zBlw|4QIDQjhU=iX7~31N4AL>Q3RlemZ6ss;c70|aHvfx3yHWwg;pU?DDvjp1TK z-u4@C7zZAhhGtV)^N!Z@9;2AduTH9-UP)4ty}vNOV^^o$GueLQL_$$Y76r7$Vjy3* z^t9OH{E;dUyOqpw4jgoD!>Loy#3e}a75fn z&H#Eg5~Z9#F#~9f zLBFp}v~Ait6{hFF`d8G$NT|9g2E!@r*m5_GvN6ED9okf;s>1=6z{8RZKm^4=t9=0N z?6{e`%?vHdj-u4t_A_r#&5sRjk?IWV+%ODE=0v4s39uSKEQ~N^=wo^sI084_&V7x? z@*2tWPBqY{WWPW8_Bk8mAfgxExOO~Er{_@ZFE(|7aq@SFdJtgrE00ZMt?9DDZAPKP z+-8DRqX8g|h>AI0SE5jdP7RG0Y?<~A6yi5ogT5S}0D>O#CJ(`WbOzca*(4yGXG_+m^7 z7T^KFP1G=jF=5YvgF0czV14O11F*OIdxnEUoc0E4H)FYk-4^y+_{Ctus^no7zw8E5 z*6yeW1^*mNn_^KbH4l^uAD*i$!Q)uHzAZ=B_~IARR-=vBq0CH$45 z9*m}BmC_@S2^PHaXKsHKk8X)JfvnvOuiurFm4dP%PPsVXThVerVXz_-&KF=uG_8W4 zV8iG>j3S?r%2gp=K0Z%d*lkjJwFXVYRms*32r6ckV+)5SHx>jdb{$zi$YJw}4O9nR z)>AzQnpK>EufqIqRu3nq5BM~sT+-*nE{qj~IJNO4o%={HZOlv5c;@ZI(X3}L2XtR{ zW_YQdBGQTizAkcv+WUor5HMxv(yk(yfrD9T^A*3cbbt$8uFGhM7M#2H4&XUXTt^e`to1H16&ZgSbN4L0GD*Zm$5aDME) zpA8|vHlKcFAddqB5%A+l%62JKN9;Pf{8WgHuPy%L;IR5Q8+}X}R!;hSRvfAf{mduE zr9J~E6Ujm_ebOTa9Yn27TuStAkQ)$q`7~Axfkn;4tX7qJ1#w-Uhc(I*W7T|O`j6?U zLwQ$kQh(vC91t92L@3JpmZ#nX2!I7Udkq2QWNg-d=&LsdE?!VQNVu$gT|^`oqGI<* zIf5V>c$rO=(DoFD9akCWihpfPpvlG#v)fr!895tE>N_Hj)r`%lwoy~iIf7z-b|a1ZWh-y8i&FOu-w*Afu#g60|1W*v*1!lT?BUqiE1Z0Q`FbnvvF@ck~gI zFoshF-8&+Ja7twSz>V?)A?_Wu0eYL{CX^M31FfLQ0Xj}wUzBAxTqe$J&>Ij&u{-Y( zZc6U)NY8VW8F(nbc3hCDn^=0^bhi+Nu^?p^l`42_$E>CT)IpV6MCKvLskrQH!t+{f zHACyegDE;445&g@R?d<8v6>zJ;Ykp;Che|pizsQOWsbc=DUJT` zlS_qUIjM<)S06^)M!06pcDlu`$xzB%rMyAKrElUa@}!8xOv{>EmZujMSwy=g)hWLK zeJVJV>NOC#wR(QMKDe5rWM-&+1045VP1l=%D5bR?$%~I6Y#ss`=@swHo|&G#8IvK% z!J3$}O0eYO3y#9n`8xjq{;@AjzqHMvp#K0#Zo@ScnmC0(KM;FIBHhs&=M;hh&A1$i zFyC9O2Nk*In6wJGyMpl`tE(l_$bIN8)<0B4q%u5nH4n{f_HuN2m zQbs9rwo;uhnUzzWJQzaw_!;CsG>XBL>_ovUtVRyK8v`og;*4T9d??F;o4P9$W(R9U zL+06-whzEI4i@S^KZJK;T@P}kIipXCLzP9DIzUe^Hf3@E$L_pK2TxgMqeDJV2f@S( z?s%r-_XcE@?f3^$@~zhB%HZrMl6Z4 z>Di`vDfrZtaZ++nb2HYK#q;+pIXf?$sPS^B?p*ay)`u|En2EPHHKnw`!sF)U!*4BYF*$Q)*}!`5DZV)^$?Pwt<4nrX?9b?z}kLuJXK8bP97CFc%Ysrcz8O- z*o@~%(h-{GIBLdtJ4$F-tkS5xHs%e4)-_&)r{4xf54J!-Uu_#P1-#u%jXjk3L^tOc zEl#jx^X9Wv%}mm@C~_c$d96C5k-p8)ffoZWmjM;khgO>*S7_V0{ca|yg({<=7#O%z zqU&ZJ46|BUB}ljDq|-*#W6)ti&kE>>PRx)tJ^}l&>nHd*=aooovkQq>jn0jutn#$A zBH1?do9dFRt9PVjamwO8M|6$dZHhhyc^Nc(sAcC;I`ad-pm5tY$UGhO#T~pvF82!8 zLk?AvJ_zU`7kVw42&ck4kLQ$=ozDCrX0pG%Ti=?AnZZyc$-8eSP0o7Fz1^802#sftlGMY zsyViE7#>H>Oke?1n4Y?N>ohPCc3iAuVkzd(mQ`Ve4BJK zndI`S6E;PjRJ?|HIK2voI@IMo56wuFB?1jGLPsu)M2)BwyTk~dD!KbKmu+Nm=HJf^sV9icUCaI&ug#crhFUaIrTz zOp1hPgoYdjL}nv^Lvk=KrZ^=-0zB#W=LP|nG2!Ao3~u67OoMoX4>O*wV&QS?TVBSF za9Y2cW`gSJQGP@j>!C%u@bGry;*-TVcs%fQo(Niap&hdjt-&^9&9LnJgw_85m$0!1 zSjYHp`WO$rFY@G>h;wAZe~m#u^;PaTh+~U`$J<=bUFJcDqTF{gV0a42JZGD8fXc%2 zQ*J{TTg*BC0O6*zy>#JK5v;lrF9<46%tS6o*sh-wDbu~}s2{nWP=yGIwtRvo@w}a- z5oT7&j^4?hSb~%O ze9|E9um=9~1M)dhZgQeOKQMfooR+^;GuB7LmNpdE17H>fETwFURutz7Fk-M95PJ)PR@HnPb&HCTHBYqhKxcvh zI=t|HACh>fULFp!#l-e0O^5RqgA{*kL`Hr>JxyJFM75dL_v<-|-fZIY{{Tf}anV{c zmVYCEtrmdUffg!uVWHz`lBfmGxCllE%4&r_0X9oC{G1iru@$|%8=)7!c-$sTVx_5h zM9nIs$!h4(`YbYG8#-oGdvZHskxl8di_`H@J)kTNwH7%~2AcEJ0Q^J*TE^=+(xP~; z4pKoI370bC@-PdKuz594iCClpMpry_J&cL#wAdU>TXPUFP;e1`oOw(blN=Rq&XS^Y z0DVz%Bl#^RG5o0$;H1G&A}_Rf2oIxD1`o+s09b6(RbgjdhIw;l)(%=v|-DE*vg#4yaokh3oy(XZnp5@m@j zKcP`g(fC=5fxy9*8cXAGyzn?p=Cvt$P-jlAbN>Ka>-kQju~lsBy20xtp>?lMdL}sL zqWOnI3Rx$W;Y`e^J7iU-l>ligXHAZ45O*7Om9zX2@uu+L>7xkVoe`QIIuV#7Vj$Ni zn$yje9IDz;@6xIO9N{OGqa&}gS0)e^IdbNBb8{~zaXYV>i-#Gks5^xF zV@{1PW(*C)LfdxCQ`R;f&@d-EQvDF+7cm z_~8u@0bmKw9A!ajiLZmNh=7n7WM;jMPv|C#eEdIi9r;y!6iVO%gmOy^g{YA0R+=<8DPCZOD78*4r*~iGmN~+ZARmOFpuIZ3(%?H z!g8KkZ&Wb;*AR3m2(e#HM80k;IQs;^G9m+ejUdHqa@nxqttV_(z&sh#ac1l?m3^FN zh>Z90YWh)T(WN$thepjFc{W-X5uJ++tVxuCG@Rz~4U9Q9sT&lkC&{Lzu}7LZ;+!|g zEYyPnn+wF5;N)|_PAqwtmNz7x3fa;&bnz3u1E}S0k2I|gD^(%M>6rI4YUuEqj(z0B zN=eI=z+6^(^dVe9+zS{OFzT@4x7ndp7GZIms7v=fNPQ$Z7#8p3^Vg))H}ZIZ0QoTM zFM+=>xX^*T&99Dn!Z9N?C-#=h^_D8*aj5thtU#UUJVITB;^$`LYxB z5qT6iYzYE-kE8ZC$)>9O9>SszsPPerD_KNqc!~2)1X+~gtTtf)yVK37{_8SF)gc!I zVhBIb>*zE?rgESAZR;mPEcXk556yXN^Jd@N27N^KiNf7r^eK)5L)g@6IC$nJ#tfNp zmjK*nXcpY-gutt=4j}hdSPhQgjR@jJh&da?77+XxL@|Hgp%mN^fdovcSDH3z(Y-n? zk%#{P1zDlc#u(9PzMqq7rZ1p1Zi*sPcn%CERO>@=N~nbtxY?rA>CnWd zRgPIjbk-k1^l09sY+Xi;;=8~+;<(L9Vi-MP@8TnGvMOs;s;<{8)^7g$8#(>H02%< z??#uu(`i|Q^aCgXQalDxEGqbo9&Sa6nkVlR{6^9H>9_|&!ig=_9|Q0_8wOZ%VTFty zgZo{Rm?GftLw96LF#K_~Nn8~SF+wK392X-qY9s2A%s28MeNGxHTc@M%sA(?^3f zJQM=jwkFst%?(S3q~a<7&1+o3&dJG*K<;^k!%b?^7yke;>j?b+0L7(~&x<5%pE8r= z-C}t?ThpAlIYJf>B&GA<2q29JfO7+*9gG;5IRR6%+?nh7G^X7Oku>s@nTn}3r1-4( z)0>PBP*xTUO91%GjW&TQ40kyhQhIZ>>;3)q9%PT1=*SWUQ z9^_1yMFU~SQZ(=$GN5GgdVf}iham$tsEiOwY$=xdv~avJ9t0c+GcIkqOJ9OAnl0kl zuK{rDy0Ebj<3hA22NO}DoQIue9IktAaZg~z#d6}-rs&frqE1sb@^-;u=S{Qg;yWJN%+ZEM zd>l<_A59=({9TOy0K;D{YiQB)YiAz^q+!mMsTABWz=9z3E5m|S88jfP9PAFWkQ&^k z;k4!)80<~ACfNuH@1W*I{Nrft->XX}6H1ZJG;<9zdNbQ@^G`C(De@&%*1%v#7i?|# zW3Uz;FcVL%LL*H)p(bLjIjS5~&1!i(-m*0~y8}&OAYV4(3`a-#*uje?pl&x3;@&Y$ z{o+{Fq^ID>I0UlN)HE~KZM+0#<)=(yXPP|`!ya{lyB2Yn=K)NpEJec=2O!o(biF}w7h zQU#fPw18M>0N8di5BfB@^R)S~BSMjL2l@C4gMi9wPs73-)*OaYz*>GVK14tVGR^HY ze30?dsD}KmF;?te{GeRKRxkP7@yAZXdQ{wVBTZ;I`6EPY709)q^c+nqD9iJRMZp;! zEHX3Zk!Ed9_7CE*Ftg1YRE?8~sL`fxMk%od5zFF`scDm`rbr`)HJBWTBPNPZEoASf zN`g2fwKH^hNe&+)`6C={#i_9PiB#RE$-Ejbq=qFm__i{bE_xumbB}@ECDkjYU~JPy zr2)leuSk?LKQ&m3CdKVE87hsGWH@t!68ClV(32N82Fg4d9JL3b5!saVb%W-TY%<0-qq%^0o7t4mnsoFnyG5(#10C;p+?DBgrCH?E!&U@bv0URj z0(?XuqBPALb>o04eVB6Gcpe(`g>E_+%2J^G4X;t0R<~W?!bYXRl4=E!9Z2JJ-&}JB8{QS9u8JS)it63r5iW#ywboe#M znU_r0sD~lIPiIx>HQi3caBS4gSJzGlIk1O65;*wH_JCiNv$tRiEm8jBMtdc6$oMeL zS___CLhhz!)N(`9*fA^}8wOkMI|-FCWi!x&GD^cInjIQ9r%9%7Lsg1y2+T~9w9&L^ z_&OX^#Q@Q5)Z@r}SB?E5x2MtN6}ze%qp{Io764!X9e}KU0ujnc%}AcIXwiSoAZr%i zmkYuYkUyN<{FZ!a!~qFYaNM~Wx|>bvBzC=1H0E7CFMF(Mq+rWSTZHyBfU=izBgVw zI4L(4Wt8lP#ckaEp#b}sUxC1*L7f;CkmzPkoBqu;T~zjY`G-fwQY}G=J9m}}(?{$K zm|#TGs=_V^IDb44peL(i2+j<-R|p3yxcYWAT^egiy$6U#odnrzcWA({3eC;};hO*q z(6HgE6N7$UC;T1_4-FWLDeG>?hQjhZb%A?~A@oS} zDt=zT9m;}ebZP2U&C)(8RbZN?j}+L022OEgkCTX5UWps00&UG~2U0SJ9D^xM+6aW6aN5wROh%Dm<5)y%M_|(W<8|ct_boE}rqOsi^e`qiw z7HCC?ID<8%+03EzOz~pKWsSMD9Y%l7j}4BtgauQ7S+Ed7J0*!Vhku&>*nj{XJM{W6 z5z+G{>E3hOR!OCpb3v6{*<%1h43AD2@|>A`RLviO79hj#Bf$0y*^Tp-25vZv7QSwy zX5C|pqpnSDRKtLC^5>dX%&+I{e8Jp9lgISw%~Li=4Z#=@GNoP*LZHcne@>JeCn;0G zimCHil<5g2g5bA1cE8iST5IQMyk4rp3vyP;hYDyB&YavaP)=LgauuskXHAfLQ7~R} zc00RxnSK@=sxvc|{tAOLDJV`yTQV3iLlXEZzzg^w_M7OUQg(h!%Fuorg)`Jfb+GFj z7a?7VKMAl!PpL6(e~9G$Ibb)qK*z1x^IlWS^q0(=_OJF0Nzqi75Zf;NAWA)hAV2toa@DuM4Y-B*vv;^q%z=DDHjrf!|(JyhZ*zHPp$W{ZkE zrU#s+4>vFKjiIl9f*-KmOgYt~fjw6v2`YS~DQ-^yt>`pwPNR~}-AtsHJ35GSrr8)h zBse-v5B~u6MiGcPTf|Lhz-&Rljv0_N?A{$_Wk(nE>9#6hOVmS)r|u(qx{u2VC8(}z z`9ElN;=;rnj5z}vHJ1J@2o0DKVhqvFX&=`Z+9`2SH6gO#n00UZ<5ubCQx7(DFyOUR zV9Ydaj}j4L5UR>dtFg1A47u8<=DwcRVXBCj!{824;i{284!iGO9$Tjq~o}4DdX?eHpndaEqY( zr<727EIJ-&RNZ}GvnK9>J=dG5Wr3{x$DCN@kcQtr8WH{?WR*ldi;RrODenp3f?8Lo z3XYjX7@f~xdM-0qeHR%wXm2?R{yUri5~Fgj^O0DOiXXDoPE0m3_dwYNjhZO1;HKb- zzo_thcz^5zzQ4GK(RIaJhP3^!%i0=kH{zz@fw2&eLn?Johp@(E=)jM2iT?nWlVtG? zog30a*!7cG4b+K}ILYA2v|+fFFm=ob>Of5ZZones#V#u^H?rDn$sXLu4|40OY#W07 zN!nJdE|E=(t>*Ego1Ejnb?t?h zFs3;I!OfIM#bGwW0tnno;y}UTuRcSW%If@gm&dnza35t#vq6bX`bRvcz;Go>GT)du zp4iBf?M%neO+DBMK8rHPO9}H%3+c4AhR8Nv(aah1PS!PB=p{bm59c)O{{RjLDN&eH zM#+NUNjghj&~}R0QzQV#vOmos$;8|Cje}nYp^8FO#fwXci15M(a5O5&OlDuz1pn{sRLG|NEFshdH z#=M)A)Jn7imP|v_*xx5ygFpZSz(p5huo9KruYi=4)E+L`30SklMs~Til{hz)`PNga z(!dFu`7=dpB_^4|QB%H}SQLX{X<0$s#zKbq_23~2RWENA#oH>`41-VE8d9q#> z{vx$S7n^z1o(w05?OJcgE&$8+=`gBO!_a`?4gvIU27?AVotj`&>ZBWk9~aoP&zIsZ zvcQ5eHV}Om8Lzt*g-GOVR^?cju2IpB3c?J476a@~Yor;2*rjrxh-$McsTwGRE0r~k?d-x6=|&|`m6)e z1LVNW!h@gXC+Qp9tafdTT)~&qG16{3UeVXA)pcG5GhC)b9nk1tYomi_4YAqbx0gqrfpco){|ME@nKU@{4m_cR5sF28^m0a~4n+ zB}?SI9COwDf_X!HmKuO3N^uhm+E#j@kx2;}a6=oMSKZ9BMtev$Va# zpI9Adl;FE9Us0mA3Vw!C&YR~g&QGE|NYt$KQqLJ!D~q*?!G{gT1|L=Xs;x?WDnfV%ch7y?E0**)?9G z4YDIiYqD-esTf>tBA#w-MT8k0!tZIX)cq#D{C<^vy2JKECYo$}9=hnzfo05) zy0llo2K3BC6j;n&m-A{u&*GdY-z>^pwa1E>XqTf}Ka)@%^W2JT!(uyUH90^oX`JT7 zaR%UnVhEa6hfNH(Dd==yGY}5ty)Xu-VQVc>4r+2RjJ009u7H)Cw=3bYsIouk(K8Z~fQQBSo1=wm^%zPZ{{R>^H31goE5Kq* z@|vFYNDxw@K0+nKAU)s&2E=H>SGxJX!ER*c6V3+k0H?vg;&1>;9-oav$3D*4L+q&nekT*~A!*Yhu}L!H&QSl%VKT(H$4U_ zWfi2T+lo=S1rxh+LT!C7+Xn(Bjp!2wbn3y!RNJK7dP;U85^w~7*ZMT|$rl7={89SM z%`DGU+)G>IECF5oM`-4z06X8KLBVkhARdN~;<1~7gmUf9m8W#dLfb^B!K|AMj+w1B2={@(WjwKQTTb+k6_+YTMkN#os1ZfrWwRV zP(9GmC_2A%Or62hZa5RwppH3t&X&oeUz*o9>R>(l8@L4c;dsPiSdw>UJ3>xaw=is` zEJJ(@N}*3F<;i8mul@y;;A0!&Ne4JC!VZXO7;^BLoey~>*8Ate}IUXAH99fxBfw=+lR}!5?bu5H(RX&^u-gFI9 zTN9{)s3NFC$jOs67G$n0hA4YL5_E^o7634ZBZFJXq-8B+YsZ<5+_9{6J3IS4s`BN8ov zS?{-0E5U_`BH+zw7&LCkAd4JDrj>&Chge0`ht*FF(b!LHo0*zbhbp$W zBz)g-_qwP28YiH4U*`F>AJsUmR4j8g5y=#*(l%O@y@!s7D)l2cGY7Wbnl>uZ*I?d~ zb^RV5#+9`Zg~Mj7BI}zd>FX@@0Q%A=Bf8ITZwH!qaXbte5e6%`@et(0BgZN=kI~~{ zQjza+%ClY6>|ySX4^*kBR5h?9V0SUqunY&9XV)Ci#RHgud^e5~rE}`5X!50IenFCn zh8em;T?}j5uJu7T9tvXI5Jp5wo|=6bd}YroWe`|+ z#3hqFwG!OdwsyWaKrPb81O3s-0D8(sIAkvtz%Ha*oJh(aPzGX|9G5xb`GL?9EiO)} zfzY%dUzKrhdrF>zbH(q{E^d{QE^iKY;4-KtjiYf~)rG?iL5B)Ys6NBMKxMWfW{fAv zxaiufALctp7N*#%Ma8MH$Nt3CGDd*n3}6VKHJPGh73Y$Wq#wMP!o(OF=Nn9LAID(_pr+rr-$(nf6Y{v?<4=U=;(*FPyFu6)~bytJnM0I3t zjyYgN18~y2U`~%I5G#+P#ux#m3B8S`E*gVV?~T%7$L1BxH0 zgAhk&+ffcqxT)-ea6z#K9IFfm_rr?RT;TQL$#pX(Sfe(Zec^a8u?Hd}8&z21;Qs(O z9)pb5WR(Y^{1t;K*oozIO+Ntkvc#`uQ;A0c5D8(L-+!>xPXWbpVLne38(THLs!Sx3 zo~28F@X>HJ4r}33e4Sx9roE=j9GWq~w&U}pcUe-OI&AI1JHwb-olVo4Ri;;F0N_N) zDGbV{VR}F<$fp*glK%jDM{?}VnK2gZWlU9cr%om`D?>tIG z$&xfc6}KufB)0KST2KOpCL5zx_hH1)qfk>A}ae~$H z;Y13x{7aSgzA7EkV2 zSh!tzw^J+)Hz(5vv!T^zPWbGuOt=v@TmkVb47Ib;42f7C=BdSAb8DN;RQ=<5Nm!2; zY(7Kz)@?)eNDYW0#2t?Z2K3t-9oJ(ImFBHtt}a9`(-DFD0B#62BjG(-xhXK@{e$UK zIW$~ak-?TR?_6Ns590u~T+X2X0QR%k2e|$z6x!zkz6}P(}5N<1L365 z-x5qxd3vrFUEp3rZ<3wD=B6A$2H@X{ci?L6#S`vk11ul(?6=p!<`{g z^h_8KbR&g2iqfhp$MQ!U2a*T>06AP5E3jPLnX)VcGwH$AmT2Q6!+w5G(9a69^8+?z zKysmi>meGUQ~Y^Pv;m(`&GwhzUv1yDqBSSl9uq*Oh}zf74Vsqk9p3F}XRP zd^m=Ov+bQvZ!@`Mg$(1RFr)5j_0R2}yIG6T#a zF-x49di0tPNe*k-BE%7JX0&3G2sjW&VCr&T6EBTcA4Qvv6;JU7s&sKMdNl^3WJZMl z07>Y>HHQVNKGgbXaaQUe#poZZ!I5<$uND}{KlUzAe4~(yBT~_G%$LM zZ%Mj0sAZUxb<8#dju*Yu+a2Q)TKb*OWo}xo&FMs`%H@5g$)Ok>2!_`-xFcp7iLvxO z%yQ^vv|M2}e##Hx_^$#8ZihIHDyp|tY*pof1Y|*#yNwHZw&7il9?Qb9a0KMb?6k?0 z=BzUZ`cF}##m!II?KgujZlC2a!Ng=&F*nIxWTk$hF$Cxv_Gl9qH$4@=i{F10mOb74 zCTP)IDh{IdhYE@6y#D~mgkwp+X;TC?$narwJ1~HdLD0$o7X`B*+yO8wt$|))d|=eg z=D+m;x}xBt_cLj>(2FvWbt9pgE_{%Sf(^m@ZJ1tvn#)~zNwEiO!qqAf)bjqEEMOQb zY2v!9*x=J+IZtMY0Myym0&c%mF>nJQCyOzkg{P}Zz0~wm0L3T%s-kb2&%$rUrQV+d zKm+}Rp!o?&AOzBF!OdoeVkeW-QB$h$UD5Yyr*I5!PD<7~1~;q|n;n zM7VLG7R+uT9&uYDl8`)%2Xuoe*?HL9wv$!Sg!SobMm=WKYg13m-qTtGKEB5)L>ZVh`sl-k568Vl7#sQOl@Gp4|E(c_b zI(tGe@1~9i(ZoKQ@Ds#gHKgb0b65td3)7p^Hu*dm0({%gTvrgA0&+5+eK=CNHWwvW z$8UO>Rj_5v9#~~Ow0Ww7@ycyrcU-}goP*KjOS(gtVQ^z-N%2`w7oqiJ{**cxGUvt& zo)3W=gZ5t6V4F`=wniU=2tVDVVaDTt$}7YZl3Gxea_cXhg;5 zp;Pk-=_iAUtP~MybwWk^2hvlMMfA|-y^)g)$Nf)}bo+Gl3@ypxuDPRZWwQ_{44Ny! z>kL*9CKe(9S@s}yT=&v9r%A>Q0rW*R7N3fm!*R}-h%>kA21I5iW}Zs^E3t?PWMPPe z3mn}edNr36Z`+}lvQ?FvHpyNOSuDbM0?Y8sM_Y#kpo$5%w6Vu=6kYkFg$-e%&Qo>X zCzTccnsy6I!MB;F&b$4V+;v?VYOR{W2^62dN#=|VmAW*1$jBY|wUV$ocr;*X(>b-y zE=y^7K;V!YbN(HS*GrbbBraupFGhgM`1E;Ec^mXSk&_AVR{sFL$=+}4EI({k)v0M! zBjSxMXI<761RcSfrW19~;Q`3!gv_p#&g1ZQZ!~z5X`v9fMQoMWz;oKtnA6vbg?dZB zwy}@#DP{X3;aW>pR(J5)ZQ+>eiL=`1iJ=VtumeRvs7$T;hMx;4q&f?K-{c0U_OR2WOY-6 z2}!wbam8^~JwyuZzADhI$vOZfJM(zC!KUW{GUg-bBKImx>G(LA5e5gfkZj2P#5obK zWagS4n;0_(FnoU5{{Y`jw|L%(&Qw1KJalbD2PcZROXxj|_-WYXJO(J^H85n_Fx+sX zQ_gi)!eve1)@4~E3!{lv>1N0|l%L>MI`@}m;p;8#ZP={5qhv#y7%^kH{+cSJACyY0 zkQPK!Ie)3I3*^)@nA6EYQDl8>xwEUQyRamHtn|!zgfmT%V}nsV4>M1h4%z zx9;W6r!|N{r&a<8GJp$Y$%&OIgHja?E;9%0giDsBaJV_Jl(9?T%DWgbPX-aQK-PI~ zdML-v0=qO^n-gz-YXb+PSO9TdZn1z+;B!+xD-H@Xn;gJ6g9z@A)bLd-R2*y~St>^u z9hhWdn=ps~>JDA8Hqi9!pLM)MTvh$G-|bisL5|j?Q2iPyx}AubI_!A1U4VNA$yOt) zd<>`M4#4<^jJ9Ri>L#5f338QoQqjRmgLE@AeH{)>DOq2$>_AGok*fayP3Rp%T7E$V zBVYxF1~a2eT`DX-i;SD>m4O5s7?{(nP;yiUN1HZH(8{4$wq(;`%P9g0>2-0yk#U;0 zP-Ee}H=e_K23qN=xrZ|}<~g0Bd>YZmEqZ(3Cg3o5Ga8U{j)BVqjfuk0HHqxXj* zHS7a*I~kE15t#c{hchy97+fABKES~7bb#21mH-yzR|6}Z#Lt$Q9KQV;dWYH`BSRP! zVYo7?6HA3Fx0Cpc*(LcMKd8{3IpBvgDW%Hv#2KX~1eA)=@_*3%fOZSC1cDBPN;Nq; zD`F;q`k$1OqniP5k9A*u^6N8 z`FLz*p`rqE@1TbolvrSTsfP;QO!DqWF;oSl7B8Ul8;y=eAuUhEV^X->l*B=VqUNtu zU;&SXMT{;8iY`$908#=B zc3?135dpo3!`VGMV!^+D8_il@m5+mc&qJ|;F~mXG3T!-KP-33xT<-##f!)S)mJX2B z7GaakX-!?CV(BudnyY_Nkz*IQ+q&rDRAzJvc^O)JE~GR?E}xK1yLZEL0RVh2rcu#Z zTWX0Zp7^S75Zwr}+w#K>qlc=)HH=Rq4?(B5OZI81;;ryAV;c&T8|tTp51K)UJ6cs= zb{U9B=BKYJ=pr9FdIM`mUS;hZ488zs<2`{jwn7_%-?Ye|5%)3a4-NYoT6;sWRjp2z zuI5!C8TCiv4f-7ji_hlm>keTMEPp4k5jn9_vIdB3!?1v2H!)Da zfG_Vk`9p#*SV;g2mH^}di;7oYNjw^7PPB2E1D(GDOIZ;Z^R4w}5k}Uy;Ms#dFHeT3 z_iGOWHK+$NDL&S#4j`$x;B55I;W5q8c5ahnoJ=ZG^^8ln?V$+9*F2{v-k{BfEx{CVre!W^q0>jUj~$~ z=bkQZW}{KZHl>ohOdS|ml+8ibU--UFy6S0gp?B(#5JA|8;`bUhq70m5(S6kGMPd(W zfnSWd1aUOm>OSa1K8r&(>@T9e-w!22RsR4x5r;vkiB+mK%aE;6^i7 zbIOxs^d`aiW3`nN7kC&RL_FM#2Jj(nT(8TV&H3yd05?3rqhc{+yIVDam|sHA%1Hy8 zU^axQ47rB%KoDTHaIi=rYy~K6rAN>RMjIX=St_n;3GO)bAEX+@#2wV| zZv8*VWlOSnFo#1dPa{L7R%^UaZdnYa$0~w1u9NCZceX}c!@f_T4 z02`Jz0zao%Wk#0C4lT~1nh+HgFjVVofQ)WfWWE9&R_n~$;6<7t6*(<{!nOuyHcxy}_6N z03O9aLyuA7V1-U;!v;gTndzkQ<(DU$mjm#CV#5$R%$4&g4TvL9dj+5L;A7TeKj913 zC#a-i(@;IbwCpLeHvV;x5foo8ckx?8Vscy>-Rp_Sp@aaE;E|S0p`x!SteB}AG;5dg zZ~Rq;=>u8O^QLxa_gADnP&)$=2>=po2{MPx3{!YT!Qy>!gMP*{WVxwrqhxrBWd8t> ziaYfVBA3^r7`BJesu1h*ZRk|_7`(BI*4va(afjK zdjPiO)R;*x?PX#_^_SHPa&Z{K0p-V;JXNCl9#98)d@2oAII_2>`!b#$*YCyF(Qb^d z-V)5nlAa^-p2s0y^0LIDfc3UKR4ONdlmj)hSFZZB7(e_tVQ@tHajci<%P{14nsw*X%G#l5s5^Db=E_!+AI0KwaAcMxYm@MQdkZBR2qQ+A4n`L%hc7UKswwHshWu@2L+Dmrng;$ileTFG zrW-YgP3pUC5ZU6_jP_L--UDz|Lll{^#>h=+w4u!ISY*+Kh$7(6i>K}&$rHTa32Z40 zK>Wv9Y#UXTZU;rtrfo;{r@-dA7zNo#D#~V+p%(-jf)D%~x|Z?xD`@xj<*(Ep1YFx$tvRUGf8mU|PkZEZp3+^Z`_Sb*wKq@t z;Y{9>pQCsga-mPBN%c@?v6F~1Q-PNsC{JYfia5pz?YWwTR0X*Sh-R&T2K zKF5I80hpgA{{V(J-de-iGuas*75%ssv>1c9mar@__|9cexroCT40-1^H4Y_UHav5B z8+fE!5MqnEcC#s?!Goh@M$9F<)Nh~Uf&+?@VB1NhSVh4G;E(uR%~8KYJ(t0c@4}uU z5fZYK(BT{g=0+;Yd_J^F$^~bWp1#J>YqfJlhSFbZqp1wnUu|vHfVmUv4N~h02y`-z}R!< zzzD8YYJfm#@_xt{B%1&xwPS0Wzk&!cRLtLUV`E7F0K!f$0n2H!45Q;s21&v1$O*-* zw`CU95q)(1*GRw+cL%qs=<#qOTfalI1BU_`1z$zEF%% z;Mm8`G!UnYRy>y$gO3_3LNQBX@|<_zkz(9C@dUdMJbT8%wtIk)^O zFn*iCk;#{#5woV&1oas-%BZpPKK*INvQuu)(jN6Qvxp6dl>3kNM=)me=ZbLI77tzV z{{V%|%@2qDaH6HugAv1uOOfO^y+aMb8RDkhoxPb`2k?1WKjLt1r(*#s%dv!FtS%3@ z#BOg-Wb6L`7n65i)NtnJ zaQ)<4=Ju4BGrJsmIr=Ph3_s%iRDDDu#BK~u^(-?}vi(@hT9Nv%{9&6X>Lnhc>8NXM zDKI_$?=M{yBa4st!{V*r(RvcUlgIJ2U;h9vfB(b)D-i$z0|NvC0s#XB0000000031 z5g-B(F(EKOP(ff4Q3E1jaB+Zv(c%Bv00;pB0RcY%{t|CmKCU(!)JLI&c%d1N*hFwz zSrZ+wvAEnbXbS{;@ng7T>8vd1zSu{v5EeM#V$Cgf{77{|0z)HE zV!_oFe6_}?zJ+9>Lx4I_V|*1(hhft!CpLJCd4Y+Cl7tQF0D|L0DIhRDU1%8+;62_= z&>NhrgbR(}ngtsI_$a_gY_R&mC1x!X%@{`)sB3C+M*G}dp@YLPH*SDJyJ8_aZLFbp zxVYdo*eAOu=#8qv3alBrFc5nSos+)tew^T;z{CthJf}~z>GoYeNAV6_8Yw_9n21Ja zmdUy>jf9QGj0TbiWbZkSoaWeM+rr}cv%#T@H)POc$?hi67V{>H+ZG*@SlR6BMB6S{ zl}%=%Lnduv6GU9ZPd#8Pi~&t|pOuJhkYGYOB4zPJX+6o;<93zI!N^_X)2-$ zs*)@UbPMN0C%bMNnL2xwr`pjqu#Agzqynm>gerXx-c?lUTEN&mD1sJl>k69Y z{48J1#9yx<6;&iknwbLlPMRWGY`*?N7_sWjA4t+fGMt1feCLcT@fK(hg7eqaLuw<1 zO;S7)5`jkxH+!DGsvi+xs5&v@1YmX_u{63MjKPRvvL4TI0lM-R9jO3>X=?=fDlYz| zqNat5P+A~Ilsp%bw} zVsLW7(IZlk|Jncu0RsU6KLGy#qE1k3{+C)b$AkJd{+3=e$Ah^-4WD{iucoyuocXAI z4E#V|{{Z-*$KJB>F?RY~+<1ov(aVXCeqJHV_gtX%XX0be(zAcWp@ymx)OT>`^V^YR zKk@fmw8g!1@uBoXeqqd7A;ycon~=-i2yCs5kW2?df`r>7R`-=DI=Oh^kT^F1fEN~u=>^Ur1Xx93%< z>Yk~0v_8zWJw~||zJpB5#)mPNG3V$!_Oaq}Kzz-9 zZ}xP(HzAZuiB6ZbXh%#ndvenkS9!+Fq?q51JGh(n@WHt7%7;3?&8x}SxBG|cWNKwm zq`t$AP7QJ{Qv=^zxYHd`@Xy355tl(POYGd7&oMMsr5aCIYSVasn6~otm9uFLmqoFnB8ij zJ%5NJ5?z1l2=;8oRgB^q4{sTK%yi402sbis<3OWFw&Ro?_la_k*}5N9$J@Uhh0spd zD2poM5Mo?M<{5u-4e3#wRN06XrT+j78F7PT%fk*`9ox{HA39^qzTa22j+G1hA`C?D zVUlyiBGk#B5Jn*mdm81R5OsK9q+L8p{6aijIGGkhbdL_Wd6{#k2W8fmrPK@Oh!y*1 zx5w0R_U`9t<_jB0J5$7_SMeK6v~sHU)h=!@VWAvOc+}w0J*LdZrIuTT2byYQ)5gDu za{mCe2>zPyE{MN0@d5u$H5m$mOun1liA2ovp#s_D zpYi_yX_p#uOKJQ=A&XTSVpPTPr?koOsVe2foh*92N7IHEUxHSBEQ2guUuHX)^)YG3 zhmHN2`i`$pt?9@sH2x`uLF3|oF_-t88XDMsS#P|r#Ps{Xuij$su0KI{sB51cxSn)P zw8xo?Jd*uY8?6b(Uxqt1El-GU8Yi~X)M)bQk1;&KiTIoF&(nXRdY-FCvF1HodWKyt zmq|>UJx!$(6~iH`^ztyrrH5D4<9PB9vpU$A^)n7HZ|@El<}H;CD&=h{h9~c`=3b_c za$MgQ8C^bmh zj~$PHF~+_iq@|vp%&FE?L_J}XzI7eaEl+bsRiBtL;!@~CFL}uhV=Bp1!_M(-zR$e{r%q7srBXqPD=52I)7vosqtJFYgHN`0rPCD<{QJX9KM zPHbXS=kU$OWuY8yaL+M^5eW8iN11cW9iuVeo^`99d5%FGrNM4n?*WECnA|dyJWCB| zU{}#iFZKy!sgD{Ri&K4AlO8)8hU7~o=E-Dnz9$bu$Or5(w z;R!^o7!_A}KVqHfb9?;HR36_^<9J_^r>S7d6124?7pg(l zp}v_lP)0K^cs21V=J@WkIX4+D59GSnor-QxS8ANe}aU~=&@b5P9^gSiiaWUQq?CS9fcbRye zt@zp{Hx72yCy7Kgcld!(d_b?6<<_@g#_@j;Z(5(5+w3){!P6{m8U+=mSotB7#)wBB zX?`-CYA<69VWWFgqnMW-G#YK}{vUZ$hFF&m;y0CCMS)ryYVEuka-4XAI@AhZZ5TfM z{`osF>Gd+>8IhhXB%$2q4`-b{Mez)VAkFdkg*%#@^VsE0YVv9u5h@eaT+1Vs!0HazgE9-)?GcDE6G2893_+Z1@i_R>tBKFd ztK^(^pEJzAX>r~Yh+mn#Hz|y$n$$ZOClk-(OVAx$Mp8PQe)se_{{TK7`;)Jmho|`c zH?=i{4BO{VtKd8WQcRVwt)6WD8u*uxm zXGgD(P_H0d%MqFMeTd=iZ8Pa*g}DC!79Zq_Pg6OAS~%Qx(97RSP02!8p!U1Lp_u8+ z3YPYmwJFr+h&g!1rRDE0-VC!MVkOQcYf~FGdy`Z5m~}Gg<#@BB*2k)Cwq8k}>C9Iw zI52Ay-gG+Yjs|VpLnvl_IaT<7#Oicz=%?GmDw;}^lJ0InxPu&PLn_fXvLTlKU^h=^ z5{X;Gh`{WodSQrbw0|7KEBVnQpv(8ukF^VmBTVRiq|UL=Y`?=gy$o|2+1)2kKBrGC zaLE7ypEoei4xxCqOt83#vRVE~)aaQP$>H|-nc(!=c=w41OZU;o+d-%|6Wf^lc2$s% zCuL7~G9j2QNOuU z44kmVs<3J}+@~GL;f`ZR&JX@4Q=;ImJDyJ@OWcE64QS#q*@IHxw{rAg+&e2oo|YwP zxh*HDmPD;?xz)sCCYLT>_Jj7Wk6$j6?~k;@JUY1S*)hb&5I8jEWrvb&p4n}ezrW1t z{+$~Nf5Y(-+DcCobDcLJ#JTC;@f)VJ#PZFf2B(|)8^xP@MzYYkTUvuH0qqs$Aa(Zat%h9YOS;I5R)fxZ8^QeY}wp7CXw-fBhl8j}e!s{RF)!C(KPT z%DLiX9O-Gyw3gM~$8yL#Z!$NHdP|29FYTMokLpanhc|vN!`PL%EYD|bz2{q@y@vkY zAB{IOSj=d305kP?W9$C_Qx81ON#YKII=$z9M8&-;OnA{Lxz5m+Syq)jC)^p*>peGZ$Hc=t zdYIlX{>@UEc;|S`k3(7p(3kj(B6)#woe!qs@R*ZalAHWP!~kUze#7`~P{gOQ;Qb`fbfOAGvKL=;NM0@998Qm1>J;si z$=YR+iEQg;W|hW>zlblL8#tb$M7R%$k!NG|jJ@Zmg)bj?GDi4Fb^ie5sh?EHs*blU zInl&mqflaV2EIEyX^$UCFHnK^%891jO~@kj^9+ajHnqR*P3vY~he3iqb>=wKGWY(Dsly$aYQ)m7 ze=uz9arT0cNBTd88jbe2+}vh456|>=MB1UuLT)nn?Mt4Nmr!r|F`F>aE*p0x%J=?` X$f!D{{{TyGi~TZ}3pW1%tRMf`{5*CD literal 0 HcmV?d00001 diff --git a/blockhash/__init__.py b/blockhash/__init__.py new file mode 100644 index 0000000..df9144c --- /dev/null +++ b/blockhash/__init__.py @@ -0,0 +1 @@ +__version__ = '0.1.1' diff --git a/blockhash.py b/blockhash/blockhash.py old mode 100755 new mode 100644 similarity index 69% rename from blockhash.py rename to blockhash/blockhash.py index a2b0043..2d4318f --- a/blockhash.py +++ b/blockhash/blockhash.py @@ -1,14 +1,7 @@ -#! /usr/bin/env python -# -# Perceptual image hash calculation tool based on algorithm descibed in -# Block Mean Value Based Image Perceptual Hashing by Bian Yang, Fan Gu and Xiamu Niu -# # Copyright 2014 Commons Machinery http://commonsmachinery.se/ # Distributed under an MIT license, please see LICENSE in the top dir. import math -import argparse -import PIL.Image as Image def median(data): data = sorted(data) @@ -151,59 +144,3 @@ def blockhash(im, bits): translate_blocks_to_bits(result, block_width * block_height) return bits_to_hexhash(result) - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - - parser.add_argument('--quick', type=bool, default=False, - help='Use quick hashing method. Default: False') - parser.add_argument('--bits', type=int, default=16, - help='Create hash of size N^2 bits. Default: 16') - parser.add_argument('--size', - help='Resize image to specified size before hashing, e.g. 256x256') - parser.add_argument('--interpolation', type=int, default=1, choices=[1, 2, 3, 4], - help='Interpolation method: 1 - nearest neightbor, 2 - bilinear, 3 - bicubic, 4 - antialias. Default: 1') - parser.add_argument('--debug', action='store_true', - help='Print hashes as 2D maps (for debugging)') - parser.add_argument('filenames', nargs='+') - - args = parser.parse_args() - - if args.interpolation == 1: - interpolation = Image.NEAREST - elif args.interpolation == 2: - interpolation = Image.BILINEAR - elif args.interpolation == 3: - interpolation = Image.BICUBIC - elif args.interpolation == 4: - interpolation = Image.ANTIALIAS - - if args.quick: - method = blockhash_even - else: - method = blockhash - - for fn in args.filenames: - im = Image.open(fn) - - # convert indexed/grayscale images to RGB - if im.mode == '1' or im.mode == 'L' or im.mode == 'P': - im = im.convert('RGB') - elif im.mode == 'LA': - im = im.convert('RGBA') - - if args.size: - size = args.size.split('x') - size = (int(size[0]), int(size[1])) - im = im.resize(size, interpolation) - - hash = method(im, args.bits) - - print('{hash} {fn}'.format(fn=fn, hash=hash)) - - if args.debug: - bin_hash = '{:0{width}b}'.format(int(hash, 16), width=args.bits ** 2) - map = [bin_hash[i:i+args.bits] for i in range(0, len(bin_hash), args.bits)] - print("") - print("\n".join(map)) - print("") diff --git a/blockhash/resources/README.md b/blockhash/resources/README.md new file mode 100644 index 0000000..a2bb107 --- /dev/null +++ b/blockhash/resources/README.md @@ -0,0 +1,23 @@ +blockhash-python +================ + +This is a perceptual image hash calculation tool based on algorithm descibed in +Block Mean Value Based Image Perceptual Hashing by Bian Yang, Fan Gu and Xiamu Niu. + +Usage +----- + +This script requires Python 2.x or Python 3 and Python Imaging (PIL) 1.1.6 or above. + +Run `blockhash.py [list of images]` for calculating hashes. + +Run `blockhash.py --help` for the list of options. + +License +------- + +Copyright 2014 Commons Machinery http://commonsmachinery.se/ + +Distributed under an MIT license, please see LICENSE in the top dir. + +Contact: dev@commonsmachinery.se diff --git a/blockhash/resources/requirements.txt b/blockhash/resources/requirements.txt new file mode 100644 index 0000000..3868fb1 --- /dev/null +++ b/blockhash/resources/requirements.txt @@ -0,0 +1 @@ +pillow diff --git a/blockhash/resources/scripts/blockhash b/blockhash/resources/scripts/blockhash new file mode 100755 index 0000000..a8d9cbe --- /dev/null +++ b/blockhash/resources/scripts/blockhash @@ -0,0 +1,95 @@ +#! /usr/bin/env python +# +# Perceptual image hash calculation tool based on algorithm descibed in +# Block Mean Value Based Image Perceptual Hashing by Bian Yang, Fan Gu and Xiamu Niu +# +# Copyright 2014 Commons Machinery http://commonsmachinery.se/ +# Distributed under an MIT license, please see LICENSE in the top dir. + +import sys +import os +_APP_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..')) +sys.path.insert(0, _APP_PATH) + +import argparse + +import PIL.Image as Image + +import blockhash.blockhash + +def _main(): + parser = argparse.ArgumentParser() + + parser.add_argument( + '--quick', + action='store_true', + help='Use quick hashing method. Default: False') + + parser.add_argument( + '--bits', + type=int, default=16, + help='Create hash of size N^2 bits. Default: 16') + + parser.add_argument( + '--size', + help='Resize image to specified size before hashing, e.g. 256x256') + + parser.add_argument( + '--interpolation', + type=int, + default=1, + choices=[1, 2, 3, 4], + help='Interpolation method: 1 - nearest neightbor, 2 - bilinear, 3 - bicubic, 4 - antialias. Default: 1') + + parser.add_argument( + '--debug', + action='store_true', + help='Print hashes as 2D maps (for debugging)') + + parser.add_argument( + 'filenames', + nargs='+') + + args = parser.parse_args() + + if args.interpolation == 1: + interpolation = Image.NEAREST + elif args.interpolation == 2: + interpolation = Image.BILINEAR + elif args.interpolation == 3: + interpolation = Image.BICUBIC + elif args.interpolation == 4: + interpolation = Image.ANTIALIAS + + if args.quick: + method = blockhash.blockhash.blockhash_even + else: + method = blockhash.blockhash.blockhash + + for fn in args.filenames: + im = Image.open(fn) + + # convert indexed/grayscale images to RGB + if im.mode == '1' or im.mode == 'L' or im.mode == 'P': + im = im.convert('RGB') + elif im.mode == 'LA': + im = im.convert('RGBA') + + if args.size: + size = args.size.split('x') + size = (int(size[0]), int(size[1])) + im = im.resize(size, interpolation) + + hash = method(im, args.bits) + + print('{hash} {fn}'.format(fn=fn, hash=hash)) + + if args.debug: + bin_hash = '{:0{width}b}'.format(int(hash, 16), width=args.bits ** 2) + map = [bin_hash[i:i+args.bits] for i in range(0, len(bin_hash), args.bits)] + print("") + print("\n".join(map)) + print("") + +if __name__ == '__main__': + _main() diff --git a/requirements.txt b/requirements.txt new file mode 120000 index 0000000..1fb57de --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +blockhash/resources/requirements.txt \ No newline at end of file diff --git a/setup.py b/setup.py index 89a1c4f..55af614 100644 --- a/setup.py +++ b/setup.py @@ -1,14 +1,39 @@ #!/usr/bin/env python -from distutils.core import setup +import os +import setuptools -setup( - name='blockhash', - version='0.1', +import blockhash + +_APP_PATH = os.path.dirname(blockhash.__file__) + +with open(os.path.join(_APP_PATH, 'resources', 'README.md')) as f: + long_description = f.read() + +with open(os.path.join(_APP_PATH, 'resources', 'requirements.txt')) as f: + install_requires = [s.strip() for s in f.readlines()] + +setuptools.setup( + name='phash-blockhashio', + version=blockhash.__version__, description='Perceptual image hash calculation tool', + long_description=long_description, + long_description_content_type='text/markdown', author='Commons Machinery', author_email='dev@commonsmachinery.se', license='MIT', - scripts=['blockhash.py'], - requires=['pillow'], + scripts=[ + 'blockhash/resources/scripts/blockhash' + ], + install_requires=install_requires, + tests_require=install_requires + ['nose2'], + url='https://github.com/dsoprea/blockhash-python', + packages=setuptools.find_packages(exclude=['tests']), + include_package_data=True, + package_data={ + 'blockhash': [ + 'resources/README.md', + 'resources/requirements.txt', + ], + }, ) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/command/__init__.py b/tests/command/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/command/test_blockhash.py b/tests/command/test_blockhash.py new file mode 100644 index 0000000..cd02afd --- /dev/null +++ b/tests/command/test_blockhash.py @@ -0,0 +1,38 @@ +import unittest +import os +import subprocess + +_APP_PATH = os.path.join(os.path.dirname(__file__), '..', '..') +_ASSETS_PATH = os.path.join(_APP_PATH, 'assets') +_SCRIPT_FILEPATH = os.path.join(_APP_PATH, 'blockhash', 'resources', 'scripts', 'blockhash') + + +class TestCommand(unittest.TestCase): + def test_run__slow(self): + filepath = os.path.join(_ASSETS_PATH, 'swiss_army_knife.jpg') + + cmd = [ + _SCRIPT_FILEPATH, + filepath, + ] + + output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) + + parts = output.split() + + self.assertEquals(parts[0], 'ff4ff907f801e800ff01fc83fc03f003e00fc20fe00ff1cff00ff81ffc1ffe7f') + + def test_run__quick(self): + filepath = os.path.join(_ASSETS_PATH, 'swiss_army_knife.jpg') + + cmd = [ + _SCRIPT_FILEPATH, + '--quick', + filepath, + ] + + output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) + + parts = output.split() + + self.assertEquals(parts[0], 'ffcff903f801e800ff01fc03fc03f803e00fc20fe00ff1cff00ff01ffc1ffe7f') diff --git a/tests/test_blockhash.py b/tests/test_blockhash.py new file mode 100644 index 0000000..d775611 --- /dev/null +++ b/tests/test_blockhash.py @@ -0,0 +1,26 @@ +import unittest +import os + +import PIL.Image as Image + +import blockhash.blockhash + +_ASSETS_PATH = os.path.join(os.path.dirname(__file__), '..', 'assets') + + +class TestBlockhash(unittest.TestCase): + def test_blockhash_even(self): + filepath = os.path.join(_ASSETS_PATH, 'swiss_army_knife.jpg') + + with Image.open(filepath) as im: + digest = blockhash.blockhash.blockhash_even(im, 16) + + self.assertEquals(digest, 'ffcff903f801e800ff01fc03fc03f803e00fc20fe00ff1cff00ff01ffc1ffe7f') + + def test_blockhash(self): + filepath = os.path.join(_ASSETS_PATH, 'swiss_army_knife.jpg') + + with Image.open(filepath) as im: + digest = blockhash.blockhash.blockhash(im, 16) + + self.assertEquals(digest, 'ff4ff907f801e800ff01fc83fc03f003e00fc20fe00ff1cff00ff81ffc1ffe7f')