From 7a388b0af77bfa03bcb43af9e65eb20801f219e7 Mon Sep 17 00:00:00 2001
From: Louis Bethune
-
LipDP is a Python toolkit dedicated to robust and certifiable learning under privacy guarantees. +
This package is the code for the paper "*DP-SGD Without Clipping: The Lipschitz Neural Network Way*" by Louis Béthune, Thomas Massena, Thibaut Boissin, Aurélien Bellet, Franck Mamalet, Yannick Prudent, Corentin Friedrich, Mathieu Serrurier, David Vigouroux, published at the **International Conference on Learning Representations (ICLR 2024)**. The paper is available on [arxiv](https://arxiv.org/abs/2305.16202). diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 456c9d3..ebca628 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -4,14 +4,14 @@ Thanks for taking the time to contribute! From opening a bug report to creating a pull request: every contribution is appreciated and welcome. If you're planning to implement a new feature or change -the api please create an [issue first](https://https://github.com/deel-ai/dp-lipschitz/issues/new). This way we can ensure that your precious +the api please create an [issue first](https://github.com/Algue-Rythme/lip-dp/issues). This way we can ensure that your precious work is not in vain. ## Setup with make -- Clone the repo `git clone https://github.com/deel-ai/dp-lipschitz.git`. -- Go to your freshly downloaded repo `cd lipdp` +- Clone the repo `git clone git@github.com:Algue-Rythme/lip-dp.git`. +- Go to your freshly downloaded repo `cd lip-dp` - Create a virtual environment and install the necessary dependencies for development: `make prepare-dev && source lipdp_dev_env/bin/activate`. @@ -26,9 +26,8 @@ This command activate your virtual environment and launch the `tox` command. `tox` on the otherhand will do the following: -- run pytest on the tests folder with python 3.6, python 3.7 and python 3.8 -> Note: If you do not have those 3 interpreters the tests would be only performs with your current interpreter -- run pylint on the deel-datasets main files, also with python 3.6, python 3.7 and python 3.8 +- run pytest on the tests folder +- run pylint on the deel-datasets main files > Note: It is possible that pylint throw false-positive errors. If the linting test failed please check first pylint output to point out the reasons. Please, make sure you run all the tests at least once before opening a pull request. @@ -42,7 +41,7 @@ Basically, it will check that your code follow a certain number of convention. A After getting some feedback, push to your fork and submit a pull request. We may suggest some changes or improvements or alternatives, but for small changes -your pull request should be accepted quickly (see [Governance policy](https://github.com/deel-ai/lipdp/blob/master/GOVERNANCE.md)). +your pull request should be accepted quickly (see [Governance policy](https://github.com/Algue-Rythme/lip-dp/blob/release-no-advertising/GOVERNANCE.md)). Something that will increase the chance that your pull request is accepted: diff --git a/docs/assets/residuals.png b/docs/assets/residuals.png new file mode 100644 index 0000000000000000000000000000000000000000..4840e69f2a1b053e7d3fc99b82a58128c003063a GIT binary patch literal 100972 zcmbTebzGF)^FB_fl!^+{VFJ=1-Ga)av`WW#h2H)ER8(X|M?dZG zIEIxV@-++m *Sqv&hWj; ke(TE X=GpZI?3!@PJTehm1Ce;@wG(8Ty+WRa x$)Zw~cQ_kkNS zsL!Ukb$gtnsO0?=Cn@hjFkGn~Z7`Zh72>p>@77+w*@SI!5Ll#~<9|C>QG(*3FjtBF z$k@g@SC>^7Q>51XA|#`W{j@Sui{I+fjTs1bebXsy&5-be7b( CSt^$G`-}UFGWUB(K#B3EdPDWs^S;C$*hJn+`}aAn6DvFD~{2{G#jel|?6s9N9C- z1A@tm8!DIHvyLJ5K3aE1-`r`bm(J|B+-%%8dM2=Zrj}oA=KD)gsU+2}lr`(mxjcGW zBp}c5{m>Ik7gv~Ap76ivWNr<{H($6rjIxdcv_;Px$!C*b<}!5su&N}EKect!ZL0Mq z7zGPR0h;5qzgTz-5CC*7(sL-p_tW-5H*HN>rly!`wM`m@vhps8WKV<} w>@hwFf&q9uX%n@r_`oh{wPn_T!_y??? z{QVUlZiPgA>BJM23K?Yk)gt~aFV;@uNlWE1#Be8+jH~;~Hx?4$fzY6PKr2S_R*twj zW94n5uMhDLpLnjUd>BL2Cc>HX%y?XM+8szf0?#uct3tth`+3X>Vgna!;!WdP>#XMP zfH~#pR}m?4z|@uV{R`s-2PviP9}yJ0b+yoZHhN_{x5$BqBn-{-h29bJ6NMfIn^))n z7Bm&=8op1NKC|BA9RAkL6T^HS*-(Ge?7~H0ezU(O1kHsDW#7`Y9%$N~Rv0VQ`(AVb zSPer)k&BLh1~KN0X55g9`B=^KloL8Ozf=$WW&o*p3bXuaRSn; G!t>$f%2U!pEn`Y3WoZxeN>ExEl8 zY(r*L?9u0i a@{B)G|m6@*eB}dAVAiLnq9@>sb})t1&jqoXz(1a1)~WqF?s?c z3Uzpg(-P6b`G_eZy}sGQ(#Lf6$aT*?=yvFnE!J89mOs$J;eS1I28>LQGVOhk5Iy6J z7|~(Q@&j#EVbt%NL?KpHCC)QP-aIXFjW5pdi%zfEH1~U)JdiU)_Lq+DXqTAmMVxF` zw&w=yWXJ!psX|Ocy~cGWN{EEW=C^0E!W@Ren%DWsht55h;6wVE><(12WT(irj=REK zg9a7) Tk1$^6!%Q^14t)gOS4VcOE;1DG zt37(T7*g&tQY6a}Sf`nI`&K~w#>y7lrJJYvo#HEXUqi3ipjM&aa??9``uBF&j%yB^ zx>-qCEi;VV_C~egG2ZG!R17$QD<>55*@qB6Fm-^sMsKpP?N`^<(~4SlAmNzzBT4 z0e2bb=kIFy^heq=Gs;y5de1LcAJzbuEQBK|G8pmAx%~d)){picV+PaaUDL5|yp0L& zc>%?_mb+t$7Pwf}aS67cv@?6>7S&&Jw+w)$5|bm;9`YST9r=vF=MHOJ_D(+N>3M~f zK<{iatx`WN6~sshlsJP{DEATOnrx!`6@s~|Jv=I9q1owOi_FZis=FISHfZNUQvy0l z69?;PP1rn8;l52tWZYl{SqD0g;UYPD<}DW$%mdNcAzD$px3?BQ6U;3DEOxQakq`P# zAu+*E<~lm<$O3v!{Y>30L)V`EDw}z1^)FUC|B*}Q&4k1N;@FQsz $RI6yg*NK70XvN%yS<)A;R@TA829H-(AceWkO zBhi!y|3QQIj?A2;Vdr+LegIMIgGAe8x62)P0=sFyaT6`>w^j;Y%{|ja4WYxx<3BVH zdvF$fwMST`F8Wi1?SQDzcs!53M^L)=Lg%q@43I!1;aQy`v&jnU&h`jKLe2#W(7}uJ zHl+k!9&E15o^3XsOV6sUIw@QAH*C+Bv*5EPJiA^OeVI!u5fGyj2z6;*giwm+7+G)Q z^Z-c#&ZSRs(*V^km0}7o=7;E=0M?m$fxWKB+i?Fw_+kcu`S#ZUO3VX;d!afyKVAT~ z*FP997!w7M!SR>+p XYXj?zO97j+2C75E7&*-uf`AEHb;D{7TuR!CUW z*Mv9QfYvU(ud6w%ZU$xWdg#jXt03V;j<2dv Aa|X_F}Rv z`FSD#eSJSj*>N<5ei`B$MKo|fsySuT^1vgxkjD&qT3rNKzb~*|K*Pr)MZY_%ZhSV+ zUEASlONfd0sp+sPzs5f#oWc&o#DEPy6nJB*%vr5EkCgn!Ntm!qXd{GbOl43{DUjqE z6WOTIC^NY{dK(`2BB)y2(pKCg(zA{B;7QpedcvlAT;CK*v@uW0_L8)>k~>jnQYLYk zKUnmg(#gSbo@3)}26_f@m_35HAtq%vh&H=o;WGtR_dGzF6oBmYvF*|LkoskSglfz= zk~7)Xkc8@duZj7$A#VnyDRvPp_V{xqP8XEr)^9N>i#1%A!F >1tIn1L=-9cBr$*A!UXU#nx+4N7E9Lk|n;jy=$!lV4>6Pz# z{KevbxK&Y6gD)H8G`;iEFVwH@ONfjrD2Mt!iQ*wYO|_!PtZ(1!S~i-J%jW2}qk1l< zL3jd}s%VL-Y$xJid_k5c-FS*>HtT$2`LOmnaLLfl|8`2#xwnksqo5BAuGCKKmS?DD z8+P#Bw$Zm9=e*N@P-ZoFt@(|FyUni#$A?-)1}oj~PE*jlvkjr7lTX((a{hD~0tS$C zQOBt03tn?QI4&uZuIG9;AWE08wcHl0VCb>W3bOjmJU|^Lzp^{n@LXSrgv1v51J#RG z*&|cpB{g}*WtJCYbfiZ?hb PBd z*#Sw(%~!PPo2jLOmtE$`IXtkb*TLx PSLWx5^C}r-vq6<=R0*vuHO3kYM<<5AaxhKBMzw(Hn2^3zuI*bpmwCb9IUAM zRul<>w1?cm_L0(uTXs@dyT~z3Hc9GpYz%jt8PvI(KJ=TPrpDw9v1}TxVZ-6eiwAXv zRT7a7lOFYjF5ynnFxw&*j{6HA+X{-C$j>AXH1duE7bj7{=B@7I=skxik9wwgy43hd zStA+TN6Na5P!g)Ek{91Nd3gdF7fkYAEmPqBMMGjWRf(lTMMh2v@;$vGpm~R@JpPdk zHe=5rAjIj79!B;W0u626z_h+~kNbqJ(DRVY6*)wwW4-BTvN7)3IT8`$4&p{;!7WK- zqT^tK*~w*=D|7Umi#h{o{EivEq->b*Hwi~hdhP>^`;x)M=&^1%6Zw?};`3^krMB%h z2Y#u?_?29znLAqi7vj;zPl47!72Q_{a}humZ7k24I*+_v>w>INygZS4AWgM|_3*Ar z+- HPtGI#a;*qQD+9S^WY0vcZ zwxAbeo3HdC!a}iV_Y)g62rwBXotlw%g&~cv^%maBitiiN*{Tw!k(*%hS WL>zQjfaKF+k=Zn^Z-E9o8J_X$kGS)3NR*n zmU|8Mb+P{hD52nC#g^(Te#+y$o83CU44XS~fRC324E1ay=a_d=F)*x#0&e3s3<=}> znjB8e>?iIpAoy*99GHyUiu}{=N~r1op8N@mGSJH0ePL_0`7rEQB1My=(HY33Fb^7* zeB;pscT`2BKET@=cXlXIx&sGn&;LeFhvfh={L%DQO3%25ALp4anphqzrB*2Hc=iXx zV}IiCdQ^H 22NdJoRq{_8!J;jx$i<%h>s(Y=yuq#eUc+3-OAV#!m@2 zf-K?`94{z;;K-=G&o99AH7iVkUw~lDG~v Cu^Q>yu(kJ^=y#=fZ@w{uslV@Pi|ENI5Cow@8Pu$;2MOySF#hX z1heG>FKm^k<9gJ-<-Z`aRmM}T1=kWw0H{q-I4>RuczOWPe|Y!S=k;_yCFj@Z4l*XX zPuMFAOu-dLLdDl~a7`}z3wVDz?hMt~Nu;86kKZKX^tv-`D>r^u&l0fN)c#s4p?mg_ z@wdpM<;ZBD` 1~>){~^A*$j)N#^~7gB|2BYBBK}hE)t_4kI^F|8E@@u| &6hw3Hu$Y9>Y=NVzGk1Jp|UAe9LDG-M_z_|e7o7ZBJB?0Gx?9rU; z;f)#F8M2v=8=h<4osh78$6lZ=RZg3VBqp!?b6g8 C@Wh}b&^b?7^2sd_E2v}^xmEfhm4=H`r(^75JN!^LbZcka?aZbvzrT^ z*g+iJ*E*hj_uycKSM2kI#!iIsTcVazPbRrz(Z=6+9O=s=NzK*6jRHb+DYOqfAXN^J z8rFYJ0{BOjorARjk>y*8pGDv=fC6J}Zs&3P^LujGJYGBax(O9vfk1coNFct$9P+Kv z?{EvKQ?*IuQ$%gL0(XEPvkov V z_-dQg`s5&n-Kq^PYo(nS&!*wxCF~1!GPeA$wZ~}Laxz-Br|e^2++skB*cW}f49W+N z9tY1_#Gk5NFBzzo+U+6VyHzL<_8qt{ZoxZVs23*%AYJF}jf2Xgk*vt7FV(}3po4l% z-^cyev11TD|JCOtdK**L@B3q53zHPQ-=CLb#_Rgtk2a;o&kDZ= %3J5t-(qh5EHaeD%x< z-5Mov@u}_V{F&J=$atn3hW!^^l #UBo#i$kY_ebt)Wl>}4e)CcB*s-{mNNzgiK)G+9ccOuM zIC80YKr}9=U-IL=WyI+S@ypG95}9b)u^sS7s!>a}!aM9l$xe(2%-DR8EIP)HsOs7p z>sTgTb*(Iavg4=Cq?!-a-BgH%6Yl^R+*46wqxpbYuclCD%R|*FhltbX-aKzV_^LI( zA8Y}nJTlu+kvE#ry^d@*Ool!oY3j7EHOo@Zjp;kO=Wx*}*Lb>i-TjgOBml7$;O@wF z@G;f7SMKR*lOoGx!By#lLktuQV%NRLzBnmtx3yAQPI-R=SAv>Y4^&(R?vRM@Tu^=@ zFLe Sua^aXTo0{%#cjd(b}MvzJywJbZH# zjO90%QQ|H=t&n%193_0@LKLf#=s10b>L^R18qw3**U>*mJDd&VpuJ*q!kNa`Alumk z `0QW^5{`lM`tl_XMg{{BUOXIhZg$UnGI~UIFO4Rdj04@VR zY=DuRxD1q-*~UY6zyl_Sa*vFfX7C|Oi{E4Q!pN`G90#Be_Rm)<5x_5pj5x61sR)(q zk8MERVs?HD&PtLO>wmoOzaQf@`8*6)FJ#WN>w6kDFuoYekOo}lS$|XV3vflH=k5}| zSS%x&iLdclr wF{W}K1d(7QI zMS#`;ew+vhKJci;*jvd7#9RO!@@ItdFJYUUA@J>k0NI0p`6xve!o1l0fPaQ*CmHcS zCpwr71}1{b9y$N3WccJ9pP`->8V9nOqCdlvA4>zeklx^b7U5K0EYNjcJM@oGlc382 zXj=s$Ye!NxW9k6|ATFwt2l$!be}sZRs^klbvKWp3^Yp 6xIgUww8#HEfH)vVMjYc1YAk-=?>u{m{zwT? zw+4b)AnZ!E)jUNt1}Kdy{<4R%T;s3kj%bzqf9@?1#p8dxLH!ou_-LQ&+&`k-AF1Wv zu`v)@|MzA7%ZGT(JNQV+wvX^X9>|!x2*L~{_~cg~jO5BJL>vHDE~W}2HJb5dc~H8L z^&^*YL(hl__6tzFdX(xS&efgKLR-pWC*}jGRQZv0nVQW3Z&!g+FXxu%tySIgu5fIC zp_9@T(BLx<><~^x$?01%_YMx1WYd+?Wu^-m`zymi^_rP;CrQI9?QF8%j`ld`$P!X7 z6ReMJyM_x7wk@j7`R=S=Q71B2Yk^D5g(a$g41_*VqBj5v)FA(lr)k6Amk-DdB{V z1 e z>L9f=P00?MW6U #9(`P!u=q=}w kCCl%fNEm%5Mmr;3)|M{X7R2b@B$aensaz>R8U3)eV1!46PdPOnF^g^ zcsy?(< =uYgm!oE_5I#+zweBD#`$soI3!Q9``*u5d(AnQc*Vw%ZO<%; z<&g+vOQ&8-%oQB_GwyG-q{h-p^SP?cH?0tQ`~o`UbBJf00}8J9@>aDcU#`f~GmXAB z|AIQlUnNl(FP4zB?NtfsM)%YN3k~yPE62iQh!aik1aNB%J^s%fH5e%9vsfpitu5Et zqbBe&-&MXRFVSjhr0F Y~T_-mG7 z04CdQ7(e;I QC(PJ^mlD#(PkytvC+3w+h+8IE*H;YY-JTMs3 zRnM~EWC`zCg)f)f?ByNScTrvCWLNX^cAX#HD;830XPFfbuR+jE%p-EB_GQc;g?|17 zM*wLGA*A=jW*}xF@+RML0%;YtI|WQMM+rMN-@RIY%C}xRp;V3V>%Qx=xethb$q~&8 z&E7C!*Ydp@b{_>ksPKn8Zx9W6h%#C6uC=yd#81UP;=`2Wtmy5WpkWPn1TV9}0=4)_ z5!~hDSqGq`n^O;Zg((=k(o?^j#!ui^iw1 Trp zGYj_(ES1NyqHWa(Pz0|zvz7w$M&M2;hT*jV{sJH!VO0Wlo^(G-&>9Z+?5AP%1x*yk zT-FuTL}(e{=%YfXJi7H-d9$YgF$r|jX^b)1p67U^G_A>zUq_jS&jqz>8t9uZA5R;w z;9O(O+c 4zGfCxeqzc8!CmIrxklV%kT7v|EFlm>onRqrp0nGdU*hBRd+q|djDJ}v2cNEj+` zRd>1w?#)KpU&GicT{_uk_115eg4lV%#x}BggAu!R6P3KWGrkEGu14$uM8}6PyyE9F z5)%n2SF|$)cu#4f@~bgzTPm!J^i%_7ma`39;Ve1{=IqB@Wf>4XEaR-tuiBr>IPfSB zk@`H=Z4x|SV`|+~QBY!>gBw^zoCT+WC;eh%x~};)JYFdpl|u}o-YN15oxqH(>!B&% zebyjsy9hFe3h-0$*t 8THg2W}a7N#!D*nbL3Hv?F*Guh@z@4FR^-Y?L_={VEje zXvI(N&<@PkpQzobov)SxKpE^%X2q;$KP{`$(N)RFM6I5$z6!XMM!_PXmGxye-Xg3} zLcl=1Hx9*OBqe 4W^*1J<%ND&wm*pTCTagn9sBHfTHmW`w!B5^oL0GGXpLKXRZYpHkqIN_ zd)uRTgz&0Kld90k;-0IxH4RMy|8WxOjlO5hP6}a*&8q+x8$d(nYR{9)@#(}cb0|NS z#9CWN9-}w5EAHk3I}ab5SJ1tN%QSBYKWct9_vWs$@xb!_&?!uZNeE`lLa`R!v}814 zIebjfk#3_9VK+!x?*5`z9gMcecgrShb L7d_Mco0oCv*7B!&*oh)Y$A_ZJ`7 #TS}II8M0NJU{ zujg4ca{ctA!OKXG0 `Zr$UO6JBShIAPBacD)K#Q^MQ86@3tSGp{qzyyYzwpp( z0@KZNV5DP+#4equC6b0Y`uyYE;##U8LD80qNiVoE-0)@UAX-+&23N9J1Z!!vE! zb5R!-lu#67+cB8P3EKfy-@N*JTIVVGIY%@fN1`hEk~*9o%h{)_pBnc|QoeUpbAWC# zI<|)0vAIdSJ|HEmwU6K5xg+>iiTq@=)&2v(og=20zvEfEY6o9%e(3ALC~o7ot*a}N z4@^zApJ&OB2l$`s xzPS0A8Goy!*j|IhMJED;8#pmxRn3+&Z$>R8x z7GP{lmy_D_4GebPU(c#qr@gbOVgPSvB{tmNnD^z%bq#x~a;- GOS8{^c59fk~jeJ;8`@-yXAh#yS=iZlKeVr zHF=0b(kwtW96h~RdNeV=x|C|E?R@as~qJxqzw21jTBdy4G|t*~Li4fd3ERpj83 zAcKz?)yQx!(3o @A u!+omT$*#!tk@jqtmyeuaGBx)o@bCuc4KR z#vOmn+j1^hYCL1j)^$Ghkx}VO*ja)B*~*}6r+VLRw?o5;e(1BhR)bUb6a+>+Bcy+R z)3o5- +WM6m!1CHEbfrz4De>3*b@ctdLPIpYPoQcv zbG02bXDzZ^`c@^uHFomL*V>CTe&}n5h^>O;du!5H+Q@l$oKD5HhX0C^X?L%uJo$6~ zc4D+fcz=U5G`crcC*|x9$@keVKGff3IsyOjzaTmOFSN|>KedEupfx1aht>hZJ}r91 z_$tFU3h*=WYcH`ik$ZaT3>q(djsTF&Ec({0!_w{e6X4-J@*EdGY-Qm+E%)zEr?g0j zo;~ed$xT{@kf1XRb-eE30C96labiYMc^9JxlY~VCY2G!NKdff433cRxjdzW;WLd`> z*i1JqsU2{%E$cQmy-feU;*68>FxCC%hXs^mW8?2D61@Da&xqnly-|Ol?qq=Csyk2F z)F^h(CsqOgan#QY{mk1xdn`>_i?TSl`UuhF_716bcodtv-Cj E;Gqgc~Il|8Dn)$Fv%w(3d#pt9*RFX-g*TZvXZg2Zdq_u%<8(o>v# zRFOF(G!pftJ-WFGtE)#Z!8`Bx!-eMCA9c!>Qj#W4`{v!f8jnqnH`%@myw^!n&E7R% zzH?p9YgqcdEW9O?G=E%z1gM)@w|kngReg&S>5~keAM_j9u<4I2i9%H!mZ2QCwqI$3 z&mSwQzzm=6 ljbU!nrA3F21?WK9jUk} zGrl>63j&{VJU~)J=vO6#i;?~izvabuk41!{&e}-|{OQ-ur0!DtTnT}qz%srdm67{k zNcEe(ED3gY?{<#-${{{!)`;VE2Jv$Y_`#|3+Hc;GK5Q?&n!!%3MEZzS(EsKidL5U} zi5op#t|XLMGFz(oN?eZtEB{P-)4*QS^t&)I ^i4USLkRju6b!Z}v_|KfO80 z!?X!cP1qf?;6xNT=UatZ8C;PdHQ-Xv!G$~VC02ECBRsqM-f~M6?(XZ4u!^DEc4OXC z*H-q5nFTV2 YJm0nqj(gH+HE6!o@1n;_XNL >IHvRe6_6UgR?$u>;2VZJO+CXVRK`(6s y`zcT2hSvzR&Ki@ mnNa>99UTw6exX03+r zbgbAYUo#(CBTaE=_KLa7Tv3h#-*kBC89dx39oG6WV8xqa=9b!!@S6iJxn`$GF81v4 zoeq8Fv2fKc^UJL1tvXE@JNQ2Fn14OAtX+EzL0X!J%dJcJWjM9b|K!XCb$6S3DJHPt zY`xKJ5FR$-CtWto5NbwJXDutY=PH>`pnpQp;Jl_>(y}V-$#dv2ABcP@^hX<|LA_)Q zK+P3ce0woo)TyDGTRKVuVImW%+PZ&GcD9F5b&@zFwiiNmK5?!5De |J mjhlDUb?_p9p2#^kBtkjxLQ-362o1=w~qV^#Zj6idpS zZ>)o1r_L?G6bR%*5E{9jm9KQx>uhVrjF+-o7;JwzT-})T#IW#T9nv7=2Y%rLVu^&A z>jZN1zST?LB3ZdU*|PRg8{L9Hn9klu6$2w5Ht{~?<6P@ixeHy=?hqeK1$URDDDF7n zsxCo7?i^z28$_gKe39QxehWI}d@(g~zFDJ1+7o=SW@~S{Oh6_ITq?B6J^~+bZJ0WE z)G#A|zK83&u@OCC1QRmItI%F|DfWscLED_mqSs$BL1teK*HW^-zpHOOl| $n~1 zp*{lXdfA)E>iCuHU`UYgag1f_K7@(-KC0wF ZtDbgwm~eLNFHVJKj)Ulhl(%4;t*_ai-sRPCkv*b>*79}M zKmdf=jWMRpvUl1V+ug#!>=TZI3aOClUE?)nc+;6BN?FuCVl@>4nXShF5?sqU2cYO? zOF}TF8M8mM#ytZLc *k z9(KU@=5-kB@i*#Q<=Ni~Kj@Xc1fC`T6x))>f7(|dFz6ipjx`G|560m^T@XWzL#KN} zl(2c#*BodHX+1f|0d43Q2NKa=Uy5B8mjf-ntpWMkaNYR`#A0bYk{*C2O&5CnwYMxF zOj2v#1AY#?jbpmc9v3)H0SRHb$P0lSgEmq_e7+t2g6e`4* K}pZ{SI03Smc~G{cYnT{KR~9;-8m_w4uWAEeI)!JAXP^I75mJwA~vb+ z&3rruFVGy2A6~D#*f;Nf_TiY+zZYJPwbd2_qU;C-S(5BGh~~c`>GhM82WF{@<2|=x zs?b0@v5vC-S;bDYN6W{iexu*bzR2sPYa`j5tA!dJ_e11G(Cn~yx{2*fyF_?1RtooR zMsLcr63B|5p~ME(ldAx(u2SAGf9iU3;WEq3x5b66
eS15)xcz9I z`~`X8KA wOi?eyXEyg@^ycDfV*gBT$m9RE!>J1&wC=iN>li&?v);1>(6v{HWe`j@ zpVjduXp}T08rkSC 9E7TO+rx99nNBW&8>z=$GECBg#Z{)D6S}VB~d~T z$7gFB4?Q8dQ2i!uTKDtN<#NTn&$3b- Jax15;WD$UMhKlqYMsw3-exuM%jq6@&8 zls6A7*?r>WWr^L*TevTS-`NID4kC 2Ur-zvP!r)wg+lQ+Hh5*-YB*QcW{PRZeIxDauCE745Q~{72 zOFiMUmknN%gh#%B1Nw&?O+zswX?xs@k9&MEDCLo6Y1P=5KAJt7+eO}*MfM5*+5&6b zQokDHi*;U%MsG@n_R+}2xeR=MR&RZ`#P0WCG2GFZR!5W$NAha64tI?>)|{+TqkeJy zb|W2Y8@Qj7HG<+k``ysuD<2IK_z`jO%hqUcp>s!Z5xR!7>6#+xt9kh(w(oOa0t6AK zT$I*ic8Z?;{a-Yw6J?$1D8{ro=_@i-K5#a0eE5M4|MgTmdfX33S^tYHCiaNc(Vyqr zC>yk2XOFdSeq1l~S{6N)y?TyE0*GuTtP5AP_g1a<+=?muGBWi>`TRgGLM_(yS<22c zE@^w%_5-V()x^z# )&q?L+4_2VFEvSPA{M=&Q}Xqi#_q&MHP_ zPb#iS(TM|wKz5bD6PR+|rI54UDjF1==5gCrn!5t3t*~ZcLY9Ye+{}T*-134|p;g>m zuOr?xbj*Dpx0B1h$0w6mT{S1XU+q8%EBwWNke@&Q9yzeBvKXr&chxp>Q >(jq}cp%ie1ONgw +#Ak&ogNMp5Uih!XxHc_%Ev*{d(Kc5;JbYQALBu{q1_US#-50 z14nOd=XGHARSpPN4%>C{C!gY#d{JGp;6@dM_2QVxrOF}L2PA1>AAbK(^dPcJKckJ8 z!|0tVpp3%xM&1>f-x*G@l%d%9MVyhgHU3srqMK_s&)7e{GhHP2Fl74V%aU^`7*XQ; zxQ6YYy^FJ76!y~-!|BRWIQOU@56Oux){cKKZ)*)(_EeTJhOd}z&xfYRjbfAr>3MmJ z1W{uc)2Hu>8@CH~OTq+thaC=<{6puv%yY4;t@ZNuGn-Bm$N^9r LtvPch@wM8p+fLfpncpv_K^|#74Wa3*Q#oA=>c}eD zr?|E(t 02fx(=jl3 zT3U0&mBb&c&&)cbbK3JsdIP0%!YT08!}o+ey(wRnfZ}xSF*z+Ugdo=-8Qo%vpCSVP zl1=g4nI>s&-j%U>_}$$Q>h(lkzPS_%|E5)QUTsgj^Um?Z)~zVCbWsvoskpgEzw`!4 zF7}j0@>$0|9+HJZe54gg1_ITzs`JN7d`K(+rixFV#) #JF@Z0BT;a$qo8?bbYcJ!Ld#1QvO{94>JBD_p_ xR~&1tp8?b5 z<&_u`?YONrEp_@0toRImB>lxb!!O_vvL5C6;4j0QWMdN_w^d8hBLVs>5W7IEu}wGm z336aKnNNn?WM~Xj$D$LD)%ho$3x9Gc_dti?M$_!d)RCI-e_9-1r>uO-g(hBb^KLcr za1*oo_PNi4RyAj~z^%s<0_l3A1eFtCwL7$MZcH==iu36?SC3rHcdYYxasSf4zpc*2 z#(6BJjr* 6lk)S!55O7}_NaI> v3BuAGf~ zKL>9JY%C&=s A|7$rn@bVs0(6+Yw{g(gBiUoy|Y5lA9 zP 3&WAQ{sZ7FZRxQUdD^{AM0AvLD7l8?sEYvb&_EocgSz zxPdYeIT&%+!FJn~N0(>c#^oJ;y-QTe^7qo{*?Qgf_u8Po?wF~^`c*{X&=~)1O_SE+ zD@X)A@FM-kDZUyE-WY48o<0tYY?8`O64$rSMsP^YSGmo>NGU7r^l`sK+dnm|k@_FT z4LBAdUw;BKTjZ={hb+M)`+hh1+nXet3giM>`JpOI=6VtIjn;x`tFI0D{vQR6gTz2h z2xHR-`oA^_t<=T8HVMU{8=&NT#Nx93N6(%zgSt#gzT*+}A{ ypDl~P9zg*^nP$N7H^shQK_m)hWPd7Ix~0> YOWs6r0$I~X z& `JjjV#0Nk(7I3Nmr~$?tK{8fZBT1w6R%OcwcYJfi;ZNNa zyD@Fz_R1~}kQ^_c>tNu3$Mt8DEfn(>`fb4;{dBO0{r=C#Ou?~_L(MD4l;ks_jd*#5 zzKlnVf0;@kpKfT@H;c(mloU36_WkNZxvxoI0RG|MR~hiHVy1@CM@MdvDpWYEP!_DJ zdT_W-9c9ciSch0^?~K k_%PkhES2m`>U{nD=ziq z9}m4f(%B2#!3*+)>05@(|5&vb661Q|t-l)C7NvRmR^^%_W++*s)DqnlNy5O9m9#Tt z#V%^FEsqgAiQP6d;^|t@?7)6D{I}~wnh1HR{PhhP-cDMRIq#)m{{)iDXe9RA`-=zO zUj?O!OtC)f8M{}(X7jU(XHH^IVkP}W4{AF?3#^L%dL7IDwJ2>8;|`JA(kpYQUFAsw z(j>03+lL(+;n|RV?0E cN;IhoxmgxGzE4O&zLT;JxUqq_ z%bD3Zha2@G=;K42X(jfp@O$VGe!I&%Tnc!F22Mz5+|)o;qM>q*+Cw&{hXo`LHxlEm z%2YUjUbDtM{^K}vHM+pIuCL6F))^{tCZXZk oR;Uo^8rt37ltoP|Z-sbNiTTWwjUv-z}dy|x^IO!i1G&2AEl{xLc zLF1#Lo1#FOsX97JW~KkCX?;^zhcwj3%yZdc|DoFMAoZRJwwqBwo3u51aq{nF_trWg zjR2bdNV?hHb9=4xJCcl82QCtSrH!Up=wP4(AxiJEp4)2TM}Co#3^;XZT+fFFv~9ZU z%#je|M=qZ4{Lwk{<1Xpk2NsBPSuo}OgN-!ILPCq|oNHoNcRW-cczVJb%PKV7A*LvK zLqzX6C+ATyWi#PxW_H;Re>aemkJc^nGxs4-eWChzWbr~}R8Nlg5w!Y;2VrFGCn?Lf z84%2k)ENwIsO{!7owuDu8{wWCyfD!L8e5c4=98GXYm ZxtB07hW<% 1F`^Oh6dbfHo58;qKlFw?@nGT=&WIliG3R~x0lLJ2*PHTA2Hfc{) zar5rtWrWtu89MZD4R1}xS4T6-tVA4yhTD2q*n!s%@8I~8(Y{60NEBuVf@W}1 +R~^&gsi*mxGvwOhth`w?DP;ajdhDufXp2IXn_U&$)qXZIeVc)@(o6 zYl>hNz9sLK$knz1of-tZi^fUx$Z7Tya?68w?C=@FtCiBHvf1EvPIT{OG;0!lv4#d> zErne@0kNVIeSrj9R}T|5 zr~M&d8+yvOx9Eh+e~{fNMtdq6cFbSR(%ZJH`_zxD-`ndcX(}Fy5@qwa;MrISJ)NwM z89=ijJ#^x- ^k~Z_8pwU@6L} zD$a4XYkmd7G?*+Vt`gM@yjx!A(~tA*w_Glaq)ofA)@wO)KJ_2J(d$;#N+`xx+UpvX z+#Rs@{8XZwV6Ul47{Z>O@G`#eLmgW=2S=Bu )HuCRbl1IstwWU}gAZySY`U|>v!;~(_@#Gi!As
3U+ )1l-YkjI)EuH}gc#i=s6 z?^W$cyt6$K%Fs$^RAxKpViI3MChZg(`{)}cunLh=vrb5qdo!#!xMhP2dRr(* mL{WRLV0p&FaK&n~3N(<+oW!yBOT2i6qRgMzU@sL{?a%M>K}T_U0RnHxS131B+i! z1v_NQJ2JgI4m 6=0`QV3BoplYz-yw(#(v@Qm?tfIb8cU?mp3R`@9I5_hXRvi zM&FrJRjpKh-Q}ZkrKb(kDhDnnY=8xmUNO3)LL;~e42*VKZ=XpX%~z-C`SFyFPM&nt z{s^MhRUy3a&pIpeqLiM-z;MJkSEB=Rl{wm?q4B6cuUW|Cb(7(fAZMRKGcs|f8QU@o z$($rH7&`5B@(gbR=atFrdC5XhKz-2}{M2S6xZfk~O>j-*VIH@C*B=#D+t N-t>uB@$KDz5;0%^M zzV@>x(Sz4T4_^&)T+++arwJe^#LHcjfR*74k6`Gz2GQ+|8uvR$T|gYD#3KQ%RY@ZV zSJahha_Ch8Gp_z3uiM}d%v~9p(uMzZzA?~g%WC^R-fV9=2IkchPD}(cdX_ECte$`l zW_4(KC}^J{$4WejILGeZ?1I|CJRE@x-32xz8YIVrv|TaZ%bejG$Ol@0EmaWWcTE&g zN0M9eXzU%9X mSz)ilO`N 24NsgRg_2j>StQk*pvnuFk5E6vLBI?+p6x9{BHQ^~IN+uci*v}3Q|O-*6`V~u@= zJC6eBz2nN(SU5SPD}hAJXp775op%pY13JdNlsUwiYeOpeo5{R8sftcr3lBzcYo5Fp z0gF(!Z)^yVzN*Fo{=^-?ysR_^e#i8R#T0#y^ i*x?Gyn2uNdxKRd>^Qxm=uC6$$RZN2Pjr^*IiBAfzIh!)eQ6XgUv9M>t(nr7eWLC zc7Q)A3t&m4m>1Al91(kT8MwGT^P6FmpXLmHZxT=(c<*Da0?4fnfAU{FQ{Z1_fc`@d zmY|X5d$anal1Ky(a6uCfoX10pL`Or4d-Y%L!|-at=7XwGl5gtsx0?q!L3=oHkU!of z#KN&lUg}WX5R9p@{TJ?kceNm0bpQS%;DJ!0mM9xZI)@OgXR~pCIp1+0h8E+HrRrS$ zkDGx1XZ<8CL{LBb!4~eH9?@^__3!x3KV4pMJ_QR`UE3xpC4&0xtF|Xw&IN;OxZm~w zT M-mlL25raxFPxNr$a=p{a5D-1l&kY8qjb%4&ooHDd4jDAH&c9 ))p4uzM7L`+ksP%E0+&Cjv4d2%jJJYk$fAf7UPG!??hIe?>uB2*7|O(Mf<` zen3PYeE7$G!hd%$@gF-(7_VJC*k9y@%5PnOD9n?{B(MKb)_5(wX3IbBCICr9 OeqfoNq^rR{HHE~py{pmAXGl2xpW)^ zOtKRn14{eI#>N)F8Cdk_Q{z8g0dq%ezTkcT-A@9JRAPW(siUPc0MLJc>xyYxJ&Jc( zvMW~AKrH#Pt1Vy;kRt8De7%kLf2683hNE_^3Ul)MDFB6ou~1zbAi0GK4}7}Qs7TZn z1Z;ck -vc T9kKTai-3*vo2TZmvX&Q}zTkyNQvp;#^7++$3m}m$)W!JX1 z;%jCM6s`RI3lI!_V5hX>=3d+w<%a|bL_Aq^ZpHfS1{9;RewJit*5V!b69cN`6U;l) zHL>}$;QHz07M~8~2rIjlBzr^M`ZtFu^YG`K@*-Vz1kME+AxuLX`eT()7bYumu>sE@ z)uxA1mIqgplJktfhC`UDEj{5JmJCTJutZU2OH}UL nS zXo6%GNOsplPZOT|{%_HQm+ksroi#Y!XnUkymi1Z|dujW7j}^F0Jh#x1a$Oe$8qaIl z@o-zCa`~Jxw;i0TG-j7QV(Yu=ez+-Lc=M5*BRzTz$NFIh{wdwd)jZX)TFGioCnM {v3NIWWNbq-kbDs(q-4Z4c;2a#M z7kb*)L5|h3FdSu2scbIB44u>OI-6x0`%}|862LJYO%yz f=7soH!)lVK1QVTj)^>FG<{P|SPz8fsRB*k-}VuQk#3OJCw!C|&0)Y!Y1g zcH3|qb~K0}U8&$}6+|#D&L=wPvo#Fd+iQMPY{STs!4lg)o}a6I?P2nmUedYEm=R%l zj0HIXn)sLj@oE{YBuTQYFl}7QDwT#TEYZmHc<+r;T26R9Z`rz~-aLIBd^z%0Ct(ZD zR3Et69QD$eYxTK#2R>y(e~CwC0!OtzPZStUB-dlMJI?BVGox)&yNh>}fa?hk93}Y1 z`yrM=Cg_S#WA E)Q@v@y!``DM##Bt(E|w0PvgW!bc1U@QeaIwB`B}y4f5FC&Li1 zok}-G2{#6#=CX)d54YpA7&lqz!86VhhXgmfu>z(n`7O107ZbMWuJqSfmbQ@|?TaY) zK*SPI)516sl+bhZGNySTpAXczmbN;R5eP{ugu$xEvp=lL(+*Cn}waGTx(< zF5VvJh4tNI+fT|gH5r~Es=EqRuKj391LGDsM9dSAd02TY$A$Uf>^SdOzGA^BDe-rw z{4Yc`LD-(Yb7q~1O@jBpg^+`h=r;6zKXW*K!5&z*wORV*_1Gq*STK5HgrCE=hdIsX zdi)LhmYX(uq(V92OG7zeOXrMr+L{yY7}f6h;q~9(9R;L|sn x>7Jl2$n*stwZ=eJar`^XGGv;n-zT6MJqQ>J_0zIpddZy=UpFd%f%0yIOLOy@hVx=Ze_~1Yv z )|a+6YdscaQ}E$1*klX3fjhK&EG0>m?Kj3(Tu?I52%pKCr%eJ-24 z%>LWAh`8y5-dA2?6>-ZE+^TMl1I6t?0&l| G=bwd%C}-p{+Clp}Ar zxaJiyl3icxzE!&uj)%Dq@U+ifkKjC@#_}Dmo{hxYRr2z B=pP*^0d_Nr2kI}!Gz`=Kn#cx*+RyH}xW&bLh63rP2(LX98r-jC-C zIYvK!l!o4S3%W>36s<^98KS|M3V__q57A{WVc})md=|TFqlwEiB5D)|+-^WoICeZ3 z 45pMk!Anw_+y{ijm2YG z;ToqJsx#=YJc{=}zBe4b2SA5?UYMn+l+<8&D}9VbtbIO_Ne}qX@qy;<+FB-A#(_H4 zQ_rD7;k~&-7VDzfwTVlZY8y(ev)kn=FQ9Cr<|?xqz#kb|EW7D;pT_GlIS4j=sNkYC zpU7~z&-oaX|D{c^z@@O29b&;m1uZ(>5-Yhld!Co4qNLv@OL_1J`w57W<}UnfJ^ BhqOo;pewsV&nBR0SFphqE)waCCx zU)*iXxcUe287It#_zI+Av)E~fg02Bp@l;&im>5RxhjZ1|n0<%qeolfsEkui9JAL1w za=j;u%e +AhrGC zHlcw!d^i4d{6*%9G1kQ`8H{wjo)?#8-&sf!^F9H)uL@;i8#BH!?q3&^`&9AH6!uWT zF()j)V{vbIF~;pEWcrn!yg^_`@8JP(Pd_Ymdv!{a_Eo-E16gH9UI;DZHLA=pVX1br zfx69Ug73#@UGQd wRaZ&$4 z|2aq!195f`D88eE_VO+;EoApnYQ{>;$L2N^i9!?v#(isq+i#krZ4TtJt#j_V28Kjm znPni_hp@$syNL=PgM>(spu7o#Ku8rCjpgEe2+**{2dgqD1OcVVY`BW(6;dUT3q#s7 zu1b@AeVk(O6cE$*G=^a}Oe7*;O87^`E8h+iyKP^9T8x6NaylM(yaSg_%epEz4fdVJ zI3ZstzHL8e7^D-u1~8!N_^)LW5E0AL%b|^Fskvn9DggW0zGJy ;HUp*uak)ZdFyRJ6B zL1`l1k)Kq+%d9Yt9ZDx3)-Rq}aGL(eNi9j~>|n9)e`E7QBeFNKM@~Lp+odLq2E6;b zq>R>r;l-dV*2fJ+4VI?aU+ &&!wC9;|GNt854*hbOOGoh10LFj#Fxj#L zI+a9AORHoOl zP<~M0kH|hnY=ySv9&%hj* ~oBUivj&7=3J15?svWCy;-ODh?ed? z=qE`DsgzHLr}KDpF@vM+<2V0mv-s{0Jioo8!6G>F%*TF)QFSqzPUP`e3THb{x1Ri~ z7{%@ |(TQ#N) z-WqhY<*cys|1Og!cP*sqwN|??oBxD&v$Vf_+{7M@BKcc0A1@BQ_2LN2Tdk)cP1mpA zl5Ci&oqiTamE7?bc~|b>gZWGzLW!-p4Wb~r;AkMabmJ!v?j`NQ5#`56RGz;w+v0eg z7e@~HDw3?JJdPg6tld&Uo=Db?OkhEOVcnP4tc7wwl8}7Kr}u9)`_E_`2TT_JnND4) zj8l(~j#nI^FoTFtjb5NhUcRGp)SKZhOx>*8w;uwO$#HnEQY6bWe~&ns(}&&d=Nr70 zOG)Gp_@RlqR9f%?eLY1oQC7>g=u>Uk lbC#+C>uD zL|HzJw#!a$nx4Gl$k&&K=3L&{`fKX^XjB73`B9pt(>=z+MPcT|J9X#%t;fXL;iF;a z{>+Gyu(#l+78&uiQ(AHrOji?T9D{2LbcFeSrOI4dd-r$BJ;2w3a&_A6_b^X#PB%`c zY}FgVBJJWG=-yr!l{)dKLap#0g>-A#Gz4{b$!U8Z>Bn!B++P_?wNuOCu9M`he{X}X zM>Dy>u`E5z8*V0ZOsTGeHxnt7_tvle-6pDT1tN{ooAOhcRpp9p{(1FwFRPmV-gn7# zk*Cks6`q>3?`$%~+VuFCTM z?Ree>bUNygIrjT8&1ch(oJhV;y25LObAP&WN^wjty_|D}@AKakbKEOii=z@aN7vql z_ ^DFF3C zk~I2h&}Sf+Ex`J1vL=bZTH`AFr@1^y)yz5(^g{x@bEmPoY8QF`G%`8v@WCEk xSrxD)ZGl$`7x>J^9DP?IM$pq8~G9R$@cLh{i&B|-@PP8XR%ldR6Osw z+Z28-3vX54Xj!Z+#(~zt^Cx%C_Gea@Is= c^)7ngjH5sIepn)$l&u@MAHcQrUm|P7Sxe)bv>txa6^$LHp zaKX36fr*AQVtTz;Q$^)*27Gar!zWOI85)%}UVD=E-Ow23PxnGYs$;+EC6@XV9sL!| z@Y2=tH@k92w9>80xcW=Z%no>;Mx`hLk$}R%;C}BicJTzO 3=h7GkE3$9 zfZxi=x4}DP9LJ?fE+k(*2=v_QzY!DYZ{Ia@vgqDM{!A8^WlIICqUXN!t8z)#%Q;=@ z&L6wuX>?5v?4L3V%ni)%|7qeYwO{I{eT{)y59Qb|Ag@_THd3oNgeiIMe@F5;z(aI1 z1|-`nSz;3|b?~1%MI=Z_al9-u-qkByaR+%sPhZwEjT3Le`xltyq67v?ymFPd%9P6~ zNF-m (e6FGc3Il~IZ{9aF& z$+-kC0|gj-es?jI!&Xhnr>*lilj+yhZf0P8=#>;#wbE(5Ad!jx-eZ6LZ|Jr=&-5eN z;A$ntzt0-Lh;1SF)=lQK0p!;|z5QSR&s%S+a&xKECJSQmAOIz%jdl^Q_^~e4noNL$ zL (CW(@_P@pWzSJGXDepcFOCrXN_E-{ z4_JNVE-V@D3}vb(*-wak_~}cT-pTUb@(Kys^ e5ouLMmmr(T3_|OU&2-6{nw;z>vpSXxhPT!>OO=uFrp>G%_kt1<{CL z=q;*Z2KiE!p>ZZFg`qNVq~Gl3@y(_@mfR!8E|EPz4TyOeZ`+FyK}zmNlk$Hs`-^Ur z&1PoZ4F-j7R#R@Ki5@d9daP}87aYN+UOIN$O#W<_UrDHpD6?3l10`hX;){w@>q6e6 z4qHr>bjl}ZTB}4QMs1m?lEwU>3mOkaTIOx2k_);=znqZ`{+P_nqF&O0w*nMqwM$ja zJ0IQ#?&p;-v#LvUFoP42Ux!F^8OEnBJ&*6aqa10u_FC2NROTJvYpF)IsdVT!@f56e zW~oa6(A=}T!GK%4ZL?e~BlpOX)25~E3L2;>7oP#yDA1(r-rI3! +q7tMUW)Vu z6!O<>d9kb4i9=g~8EI3hYB6Hm#bC+m3RIGX?`Z}hOFTHK*+Wj94_Lc?Zw_^rXIyhB ze7h0>x{X<*e=21z-f{Yj`t^LaXs|{0^yd8U3c0FL{PLw!B-aOjtj)ioPDw*MPj@!s z&7PfvSX^Mz6fv8Krm`suHGp0ynIng^L+_*Bip^r{&<{M^s>|hdHaO_ zZep1BkFl`1-OJ1*=Uf=^>v%r<*_0Lf6cW44>jdDRiQa9}um^i5jSj$EpC9rnuYhl? z)9zU|wh~A}Tb}!Xdg!x!IjQV8sH^zfR@rL9G_A7R{hmg0$O(F4{C2N{)UE4%+tbi6 zIM|alH|8)UKo|n$)+`Muk^q1hGj$vyqE?HvUHvYJ_eCfx_NjOij7P*YSs)g@0p9r7 z;k7j1!GhMZ-Z$~#@G4M5{lN|hC#zTWYU_jJBgu_K4b4AbDAsqwQ$Y8~e59QQop7NM zO0BJ9qrt)wZH(ZGA#e|`XKc5=Xm6-&J+*Ymq|^jV%8MK33wyhQ_J+3BysJPeFNXKT zZ`LKaM#&(M_ifeELTrMUS(3`AN!=qQXb9g!XXMyBlCEejgSoxJ>8|+z*Jer&Lc;f9 zB_O~tIQ|}fTAm4Fqdtct$?>7TSPQ<3r+~52K;YaP)<6v`X5u|u$8EP~n+$S7roOGe z`(`9-pOf*_F~HW`#T;ym+&>Vo;oVy^1H4QXz{`Bz8#Q0C+L|?3piwsbE8G;Ta6g_M zz%;0;)GnKpE_q am>y6Q$KDr59PvOc5#wzL6l9QDA2zeI zyM}k--?B=&=aGS{9Fz+Rgmfx#f`p{G==DlFLInu1`ydB7w+g}4jTy{KTi{m+892ec z`wOg_&z4)8zGcP0%>Z`nI(1KP`u9Ybxp@qe8<+$VF*L4s`={VwfkgE=@~;i2c8c7w zJ45&~Yt~eA#&3+jKl)AKtjT^yONvpS$k#LmIgXt%*)PvZIo3la1;U08i`wJhEM zGq`PK_Qm;=C#g2hEpct%8_Q#~sO;T4l#q}k-_ip;S0_#9-xt5$H`wykQ*a;=N#h$v zn)D*g=NrPJ(0DSSo;MYJ6k9^dL)0z^ZhrIS*V>gPNuln*tv=Xc5~9I^vqtkvlsS}* zhP=lhTD(2Erm<31ATPwq@j>U_cdY0`%Ia8zs!-!D(726cbFcFFV9c&Z>Tznjsl_+6 z9qAeeEEa=3#VL?Xdm7|(lIbgT;sOEDK<@!CYPpVw^w+}>dnieHu#xfiZ79p{QUF-6 z>fPoyP~Y^+E604^aBci1IVjBy#0l^F0PgA`F|@WShsXW&7?_Q<0B>UufYCYR=Stll zk*KXQFqixWNU{xdJ0%|w2L7O!4p7Wh$9k84ehDKz2AVw{;0@4}5Faw|<@39UA5LIU z0bfm`jRcgZ7~y$!O~h )v(0cirEAtcN_$% v_7kXO-|4M>DL&Q zM-RUgjueLLy1WwDTB6D&pfJ+_Kul+Pno*e* zunV3xxuASC24KbO=T-|zfQ;z&znAcPC(7vDG0}to` `S~rNP{nNDICB*J}Nr`9AKx5j3IxXFD<%Im1 zyS0yOJ1!jyf9;V~wweGs)|OkY49ZB9DMYO3>0&AXJD&ez7t;-Yq&J!m#Bi>@fsa_D zmG2LNvfjP ?^IbNKHr=lCl-_Hj$m&n@ avcQzOD?a@?}+66`*2vD zswy}5IsuZ~C#SuPE}u>-T=~+;UaR?};2LDYkb@T#{Fb*VFrr>R+!o;&S>gq1nJ;}x zS}zCf!>3OcM4_O;(Z#*&p;aKiSs06F%`#7XVT3C7J;PjR{XZ@A=S)}%g7vzMbsHMV z=@h n;N;ZV3WFy`78x<1D5nw@7+yzoC=X zS@h!iX=mPLL-LP955S=K)jPG%2)7<6U 2x{*&ts>Nr;P2=Lg$4~MU0R%yp6 z`cWQ~V?)HW#JgNvVv`F&a&~y6uh2(>e_*QlFq1)#fn2Se@cT9bcS#NuWUuB$=vugV zHeOg)@p|n)9I{N1mc3MIUsD$ba`(oYIDV!~V3e5J{ZD=|O-}A~Q+G}{O)1g>opPu0 zD&vVBLkrV9KaCH{XQ@sNfV$|jUlHqdgZGgiwNyd5ZkExr 6|5rZv za2~o`(pf524thB1Vmot&hcYYU#oUJ$K8v?!-#C4gsY?%i#c-@ADIHvdUjvCoFTAJ@ z)CUTTx~I4$k(YGHwH^OJ`OI99Hs8)m5>QW$ii+k(^?f68=z8e$_!FT2PV4K&E(duY z31powNGm`I&XFQZ=Y=0F7ebx3{KHwfmXK^@N&hGk-egeV2a8Q^$(EqK9n2O%#k^v- zkwA9Mk-MB#o18#2!s^f;LiD4o>dO*IP|`WdI)%}1-rSq5Hv5CHs}2P5M8!;ZtTS#l zdZ=pm4Ku!x`=dZB>p8NaL8i{9@pwdGf5_)sG0gkb&*p>^lE$B`PP>2(Vd?o>hq~F< z#p~Rg=%L`({h`W-A7T6kmAc|HJH4?%F=USfzPNRH9=0aT)QqQrX1oy1A1ST+G$0=q zS{6{^U=|Md=selAwqP1Uo=LG^m-7}chpLL*NfpBKd!J>%_&|TH3rpvtN!i%m9!aO4 z*KWM^^*De*ePLF1%gcSZ097Pt<}9z-mZU6QDCiFOF!~tTTi2IaH^nae9F)l{4=tEN zzemai0^xD#;3D$3&IK N0PkSmpcBG`IES_KVYtAj4M1wp$AR MgSf6QChYCHYg@2e0y^fX6l8} zsSJCg<^9XwmJk(Ns{k;9_&W3hfmkG^RfFXuZK+wPV$N?2^p@koX%>yAC;j-*0es{D zbY@}+hm)MO%rmk%H4KWyqp;$G0AFX0Izifd`h&oQz^cnORTC$qgwfk_qxnzwt7NKO z>6WWrC#Bd2L#U#kv-s)OncCT<)epKMYkAtJ?L$#ZTJz7Cs_c8@rM{p8w< gnfo)dxVnpXqnykE=JQzT}Ot^s?6P`?*ly_>ufLjZw zn5jS6&aj;)}X|V-lmsMHbxRm?m zb-V6`PbVVwSZiHPOx}?ohd3lv3b`I_Ls>~WPs{Vmjjk>BwE_KOB=J)kn(9qgJiCvm zFDjHvGtMoDF Rv z%*BsTC|5XRuFQ$UTh1x{Fz2?$f_zBoae@QicemQ$UD5n!^tO|Q;`Ast6z>n{+<#lB z1-
psBxo;gkVS}R$Cox6>Suu0UeO#!I@mc023 Dw0EHcjnyj}ybyX0gQl(UvM@!efM%`U*gTR-M zW7-S8m&v(OA1HP2u`YQ#eF3A)?1@G0D;anbN32~@F^^dQ-G4i3kZ4?X5}YMoWeWpb zGrpX^5~qC5I!Pe}#s!wVz4TIJ_Zz%gs*`?ZLADzV>hTS;Afwtk;W40iiig+Xic1B` z#&d>JXKD``Ou|lClD3U*S~%_6)AnG1M1We0X}&%f8@=0^3bOs2LeF+~oH#N7Cmj>H zkQ}_~gga-1sSC>r$k+CNGeqPHFZC}W$PRLQ_D)Aov{QQDsX>lfzEMsx7OK3FkM9sN zLh&3J_ZUqHFujO16hK~OHvlB@-G58`NY40P{(eXI@f)Nb;wHk$m#{9!-mt0ZN})X1 zu4St+c0}&U6`{Zn4{6|LCa8C2=4y3P|A*dpt7OH(E5z=m`xsHJOO43N8K9Ux#PB=Y z*j%ydS>C6+?Ma@!k+3^-@bujx!^zFR1@1e%Jv7*VwvJWv%jMzz$WTNK|4Oz;6)DF} z_uRV@Cg#Zx18~uKD7LtFs^#{vg{L-513RAg`C&;vn=@L4{iwV{PKm+Wc*S`@iNUHb zC>^;Afnz6^H*d_ff9Zu>6&)moM;t=r_8D1^h54H<@K$k!h1H n@l)gkN;0GXC<`7~!I z|K*QE!O?s#H7s$L{}TL14WQB-*myUK*$`z!%;T;{#BRouH8~0YBN@z#?X!nW^(|;H z>nY2^CBCk%o?g_SEL>7gtjX{6Ks#tDD0t&BRl~6**I62~*188SYWxpo3|VJWvn1d))jb=0aqZa~)^Tn^Hzpq~1ZpK$5Qk(r>b zln{*pMR&4E6Z_Xq%9B$234DB6zWQtRf+m SbS+Wlo(T9jXv1|TnBa*_*BB8ko zc5O@N7;Y@P|ABS4$+?}%#!m0nX# Gfbu8%`Cb&>oQ3e(w;MW)2c>^FzqL zrF++|xaF`EEskWS10cz>K49OhdSvO;`M7@=5B@!issi!*V0ds$Rde-%nfU3a5=S`O zZhze3>^0RKv4ZwNrA4mPMj{^k+r>NcY4Z7?0a))e#G!t(&EdU|qS u^|>zzp1NZf|4Lte&!vRKZ4iNO(g?oh|5bAd+Orq zydmv~eDB
hE3om*be3KKZQFy=GHgyRmCb%95s3mp9hC4oOCRE4&1m zK%$M=SLw>c0dDICL-pd_|L&dek1n993#@FZ24%l9o~lwW`ygdWs5{nYOb@HKr|snT zEhWVd0pA OOK0G$ zea-8>8UJbnr8Uv{2kWj9LA@SZN~z0q8GwV32M)$fGsxeI{mYA~P<2m1OK|mjh@oEv z?B}Lu8$K+irUfV)U*!3z1x&|x8Sqd$ApCEhwffs_aS8<}-!7|~gCMA}1U}ur2zS5u z3v~mq#s(^ckp#0zBapN&^#9rS8pwvo_5NcQZ7b^}sghjSStR2Yz|vsNL5edGKLj`4 z-WP01`ZU4veZv!cE*jS(hETRH6yXj@?8K~J8@YbDC1{5?Bu(@JYSF%KwO;n31%0I% zAZb{Gd9L4ewKtq~>#O+fRsEN-3hQc4NWPHU@Y3Ea@sI()6)SiwyhoK1lNP_g46ETM zVt-YUfnQB9i(i6!oiXP_hucw7FM{V7)Eu4NPUU)#OzV_&Zv3)+ygFYYDX1*M?Bmf!{Y zRI;e$(lhc(wSWF#Vn_iG5#|>{44~*GP!_rl_4b>(H{{Bm4Q*ix(Ld?J^56XHEnf_j zqOP$UN&Mj%`nS1)eBKRfAn>UU %cEyI-m*%NK97Es}_Ir1k1mN85Esj8vi(Z(uj(_tJd%S zZ8m++A* Ybk%R+U-w^ro`D_lVF-bE2C+@yoCSB0|03& zsrCb_RLq7LF|N20lBxFZyL5_m;P#ln2LCcAQzP)-CUY)!=9x7UPUwFzAj1?2&g{p3 zOEKd@*Ucd*|H=j2J+^=;nf3&e6 vGSR0f3 z*CBBJOQ;8gx&J;yJ@-Jz`HhIrf6%p00x-?kb`bCBJ}jB)zi1qo<-}hDwv#EmKAM8E zQYKmnkOuF5mze&N4B<)gha|23ZJYmVkcvqY$^o(eg`*C{_O}5EF6iz*w}Y8%KD!qK zf*09?qmjOs1C*d=AQN+1wXBh$!dSPBvR~lSWiEo*CiPEhviA8$9=yXDu~GN?6~p}m z5&UnK51d7+MdskIDBSi^2ed<70no0w1lbeOM@pLXnURIj#*)UP4Z93qm#tn-!%vmQ z3BjVg8o;MQ$_FHb#Ag5HqHv|Jcpc=G$1ItNYiGL(JP^K(>R+900Q8OK3ugFb9Rp~+ z8!Kpxxi`wYfN58(J9uU0oTtr(XfsUr855Ib1L9|3=ENh{coofroW9Stz*FGGkWMQt znOka&Cu|erVk*vP{@+%OtusFxnp4|g5)a(ZX}mZ6 m&25JdsPs{+6Yi=X2Q}gYR%iGnRSkS%ZphD>=AQ^0t6sYXSltLS^ug}_EO#K zT-%7!%HaCqXDfhTCTBydF_{^FQU441!9592=RdhM%UC|+g-2^q m>8bL|o);TTyb6}yGTW}&Vqwj$$wbyWo~hHY#nw?D#uSZm zy0#kTv0m%_rz2l|@? _M^`IXwJu0D%=QxrBmG<>{YrcgVS$XB=5Dxqt*Xjsn#XG zs)YA)TFoo%+oNf5W-78naY2v{b9ix*%)UG!aPM+SWyGQMI+~N>{J#j~S=U4iy~QqX z&lCCLwXXgGpIVavs^+-SwZ#EYwK(L)s(mvleI#L{hM&rRBl5BJ&6{V+ ?&b(667nM;W8L3hq#rL@D@yu7F zy+VX!mza+`no)y7w=7xCZrF+@bF*g!5_s}NnrVIP;4w{N5w6~}EW&us }s zQJ-& Uf--J#zJgm{Eei{cL>N6rQ zU9q~mj-A0#F4J-znp}27RYBBJx>ODtQw_pH1ww<*y!0;~Mcsh?1er2#DGeamB*)om z(3F^1>NE4Tt~<(KnhC>1E6%s 6 +l+l zuTO6PaM0a4zY-J*PL0=b03ftw^{yI;aGB}_#>5x)%ECI-H#EC-h#KKAA1?n)Sa?g# zYNC7c7${fSSpU}SWTy(jQGtn}E$+umK;OPeeHr%BkyPJYpY=f}qWK#!J9S~Aqu-8Y z2_RiS3~Yl5UnCCcBugVSJei2cW^&Ku7fIl5wAKH`sDx37*8Fz&l=9 U z!xsXB12z>Om~~ya2-R3 vY!dr18Riy9wQ89)Ng52f64^75I1npp%tdGQSrI )v{QBuTqgz2s816835i4oQ6I#wd)ueAUdY>91JDZ+!Nq? zrSzk{_B%hq_vZkaW=GA#`gx5 aPHF^^G_XtFH{o~{>)y`d(Y9OtFnNVQ*0>toc&(@AgwlVvD*Ou%#40 S`EV0;=yme~9U{Ka zdLl}tO;XB(mhzyBLjF|AGvdwixdK!HYHqn=x3cW1@eX?u({miaRtecKOo8HwG1TJV z-$ppnFY6cbJ++)Vm7Yu4Q4?05O6$hu0< {)Z-izl}>_*O4sK6h~R;5)L>dZ(M!%?&vdj-KV7vw9O*xMvyQWwT4o8purlZ^ zDS@9-lu rg34@yOwB@S!T#C)(yjwp%WC*_y$zdE;-K71vWNfd{4`m%WF_hnx z6)&%eR^8f&*ZMAgTrAg^!P6N2gBOex*{kkJ?f0mCQ6e?(KmZPa4!2}x9#F(iZ?PK= zE@y1%Di@4wRZ!B&mQ8CEKKm8e4;)zuMcYFcWOj;68r=+Q4TVzJ4Sm`&;QpO&;hIsW z@%@dTZ7TghXy{r5<%ce0f&(wNwqQvmx1bk)0_-hXJ1eg(yys1w*UINMKYsvVRpDH1 z*RN8caGTI=;rn$f-JYIC4Mol1@1Wt&9Zi+m3%0=@Apmj|#T9Y}d=|uCazH v*kQe>FRkdr5{a zHb6f$ZgLjpN*kR{Zz1plkkk>en)K<@wY6$obz#M9aVv0|b%z)oalgI=KzTuG1Vg@L zM<{%rlJLGIl=8ZuQfo`xYxSB7x--r}7ol&;JI_Ozt{Q-{*gG%%B2!pxYR%iJac|{5 zal;-<;~^?n?QWbYzVg;b@HHjayjD$%grpf#?a9_i)$xLWW{|vDb1K!(3g=KF_SG(c zE0c7FEeLnGup#Ot+#vNdTinzu``{rR;89n69u?{&?3_@;L;4U-s`TiT?6mX%px+4L z9k7Rp0(*53hVmS(Vx*P%-b?y;bh_N~_U8U)TedwpzfGCr>;7HZKX=GK**_{=s=6)s z#K5LiljmC9vAUwieqO&zhV^z_?=3fRxCptNpY3(~Ea^(lwHGosO)gzI{r1kW1(t16 zPh;k?7^%ifWw#ph?H3y+HBUH>EHV7bpZG4OwxuSV#AOuSn*Jo1CGh2?kAmOX>+#t= zP5~XN3iiFCUGRCglEc#hZ`ZtnQLZ9p>;S|9r|_vR?5=cbid0k0z}>YJvPFF%DV1hi zyET6|sVR%BhDuAozr#yYXnhJ|jieTad-tb1cTm)!t{MTZeh1nQr3ksXe)Xwu(6-~) zo>fzfDT;UY1oSDXMeXwZ^zz(`RNYm)<> }2W zX3>}5r$) z*hAi`qLpb0DP+)N>)T&UF*5D?T^LJJh-1v3z?N|ePwK*AZ8`-i7B;KA2@A^*45&NX zrR*MlT?10$e_$!CVCmR!t@v6=oBP^Ky=4=f%vc;9A3<80(Z}Q%$El{cw^;XLx@eXA zZQ*u*epD)g(P1|+9SYjyPEP9r@E$52S#r;;*0Ve&MS`wDpl8;15WA;VO`FAO 35C1+R*38Z-QB86#ZHMXRVBRC zo+l}ieGh7si4|)+hEW_&@%1m)4+UTPawoykVrcr3lx!yH;r0?J%2RqR#K^1$(%<3` zMW=` *p<}4Vj z3xq>Pg(obojG8#5c&d7;Te{KT9xyE+S@?#M>;yrJzoj7s5&>;7b3fMZ>`MK^5{Y&W za@?kr;6YQD7=9wPcS+tlpup;MTi_B6iBeZLSO3OkI9 xP0K^(P=FES{TtIHe?|sC4C)Et>Ah!k}L(8bEI@v9nwrs#VH c^aI|UbZ82w0~#>InH66ST3o9f}`=tU&g3k%a)Y5 zeFoxaL!f1yaYtBMd<$dHj_z{r^tRdpz=mte?pfbD$`9WsC3_46*PpHa#2drUQWGtP zFTEonIl*7u)t_kS?_GdQTOX9sV$F4qIKUI?6x~l ;>AbSUfbJ9|sYZ|-*mLJG{mc}^*sLF2x%O(TFw)Cm!8MS5?Ff8^h z|9vAtR>6w_cjqpEOt_mGCsZll@4oUH4igB*IaJG0FD(kd SUgD8VpxA $e8RP~ z8)HDy0Laxcaj#=PJBe8BsL06#q)k_{@hoapb{|!7t{8Tfir5r!7*gO37^T4@$K1rU zh`u(XmRVIV7<6ghlFsqnE3cYxT{*e{|EzK09(1i!LLa*S$dq2o8FPM0MD}51RF&GD z(0nbUe5bn~JzQS3p7R@c(C?l~s-o0q{9fkKgyd}jHt2e-`QW(<(&txgycvuW+rb)t zz9)5}>f)65^8KJoXOLJP&A^i6RqqYCt!gH-T_TVDz`QmldAaFZ#e=zjuj8QA82g4q zbw6x&9T=Ox@srWDlM}`QtBZnL0F AZag`v@NUcJLuXl zT`3sxV