From 30588d10eb7f66e2c54dca4fb08107baf643e709 Mon Sep 17 00:00:00 2001 From: Guillaume Petiot <guillaume.petiot@cea.fr> Date: Tue, 2 Apr 2013 07:54:04 +0000 Subject: [PATCH] =?UTF-8?q?[e-acsl]=20article=20d=C3=A9plac=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/e-acsl/doc/memory_model/Makefile | 19 - .../e-acsl/doc/memory_model/article.pdf | Bin 119412 -> 0 bytes .../e-acsl/doc/memory_model/article.tex | 763 ------------------ .../e-acsl/doc/memory_model/biblio.bib | 52 -- .../experiments/Bsearch/bsearch.c | 65 -- .../Bsearch/test_parameters_Bsearch.pl | 29 - .../memory_model/experiments/Bsort/bsort.c | 50 -- .../Bsort/test_parameters_bsort.pl | 24 - .../experiments/BubbleSort/bubblesort.c | 44 - .../experiments/BubbleSort/test_parameters.pl | 21 - .../memory_model/experiments/Merge/merge.c | 63 -- .../Merge/test_parameters_Merge.pl | 77 -- .../memory_model/experiments/fibonacci/fibo.c | 41 - .../fibonacci/test_parameters_fibo.pl | 19 - .../experiments/get_sub/Replace.c | 255 ------ .../experiments/get_sub/oracle_getsub.c | 36 - .../get_sub/test_parameters_getsub.pl | 36 - .../experiments/matmult/matmult.c | 57 -- .../experiments/matmult/test_parameters.pl | 40 - .../e-acsl/doc/memory_model/table_article.dat | 8 - .../e-acsl/doc/memory_model/timeBTn.dat | 8 - .../e-acsl/doc/memory_model/timeBTo.dat | 8 - .../e-acsl/doc/memory_model/timeList.dat | 6 - .../e-acsl/doc/memory_model/timeNone.dat | 8 - .../e-acsl/doc/memory_model/timeTree.dat | 6 - 25 files changed, 1735 deletions(-) delete mode 100644 src/plugins/e-acsl/doc/memory_model/Makefile delete mode 100644 src/plugins/e-acsl/doc/memory_model/article.pdf delete mode 100644 src/plugins/e-acsl/doc/memory_model/article.tex delete mode 100644 src/plugins/e-acsl/doc/memory_model/biblio.bib delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/bsearch.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/test_parameters_Bsearch.pl delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/Bsort/bsort.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/Bsort/test_parameters_bsort.pl delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/bubblesort.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/test_parameters.pl delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/Merge/merge.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/Merge/test_parameters_Merge.pl delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/fibo.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/test_parameters_fibo.pl delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/get_sub/Replace.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/get_sub/oracle_getsub.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/get_sub/test_parameters_getsub.pl delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c delete mode 100644 src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl delete mode 100644 src/plugins/e-acsl/doc/memory_model/table_article.dat delete mode 100644 src/plugins/e-acsl/doc/memory_model/timeBTn.dat delete mode 100644 src/plugins/e-acsl/doc/memory_model/timeBTo.dat delete mode 100644 src/plugins/e-acsl/doc/memory_model/timeList.dat delete mode 100644 src/plugins/e-acsl/doc/memory_model/timeNone.dat delete mode 100644 src/plugins/e-acsl/doc/memory_model/timeTree.dat diff --git a/src/plugins/e-acsl/doc/memory_model/Makefile b/src/plugins/e-acsl/doc/memory_model/Makefile deleted file mode 100644 index 82d6409e3a2..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/Makefile +++ /dev/null @@ -1,19 +0,0 @@ - -BIB=biblio.bib - -all: article - -article: article.pdf - -article.dvi: article.tex $(BIB) - latex $^ - bibtex article - latex $^ - latex $^ - -article.pdf: article.dvi - dvipdf article.dvi - -clean: - rm *.toc *.aux *.pdf *.log *.bbl *.blg *.dvi *.nav *.out *.snm - diff --git a/src/plugins/e-acsl/doc/memory_model/article.pdf b/src/plugins/e-acsl/doc/memory_model/article.pdf deleted file mode 100644 index 9442066c1b36e315776d69c92986282a8635b8e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119412 zcma&NQ;aV_)3`atZ*2R_oUv`&wr$(CtuwZ5+qP|+`@UcPyL<6n>|S(IsdUomn@T@V zSCPsKi_$RAG6P6Qui^>-jP!)`gm#9O0B&wNX%kyBXLCYEhX14#=|nB8olP7G=|rs! zoK1vHjO>g}czFR%&W<JqHURhRZY?RNKf_2pm&UssQx2j0*PeWB?DPT9K@R%z!3cc< zRM$pbB+#zSd(Zz~^zPC$mbW!{bP9D+Nni4IR9#F}d3(H-&r4&lpG4<-KOQemuH<$x z8$CWAq-}C@znx3oTeCh6FH9fPU^ETbIN?RTdfVL{Re6_juDAD^*MsvQ?50l+POdty zOS$G$8AiIgH*>P+*Wz1O-7NwcT|eF3Y@6|_mN!c~ow`_vsKjdTHKd7#uWdB4ZESUW z_slA_w{%nKx}|)*_<DC13meAiFD-^?>X(EXd_RNL-mZce4zW*u16R_CAiBHDr3;}g zyhxy-p>@-qS<_viC*eOt;}-axbBdB-T445_lqIClplH7B@4?px?CP?vy2-S%53ve1 zrrU=ZZ5~bzuvOn6QCtNqU?$v)@H(#_b0X$=*th1TDkWM5zdk45uYc==s3C^0)1Fcs z^WQH>Cvm!5#%=7>$I^|OQbHr*bKGpIB-SqQkQhcru4nCG4iA8yeR~eOLoi!w@61`w z&ME8ICY0Ax;{rq8s-O~_7jm~@zq+=4yMqu)w0$JntC*dMNl~tDu-A!90zq2zP|0SB zsf!VJRW^vitk-tMo%(HibNEmz|1n~qIo>~a?AiKir5l6R+7+d8{xzH9gp(|uZg&Wp zUPs;Z6RD&IVU!Z-M&#--3_6IqW=dQ}=zq7#UiB5W8{9LHVd_<REX*aiep26NvVDjT zf{x7}fTR5@Zq78ULy7Dwxcdhuze<emcCv)I$3I?rY6JN|)uNPXsMstxrF>skRn1r9 zL5TgWzpRS`QkNnY$?&aKry)oxg2sd<*JtZzjNt&KjKQe1!GQ!d1GS3^;6}EVo%z~Y z)OV!f&y6^(0p9kRj$f#_l4N|k#(99Db!uMS@?KXrI|CABUdzEx-k(ElsuG#-l|hXC zwlB6b-(S*uB~2Vnfv>a*0L(^&5TI&H)|sy~!17lP0GrF74=O%(x?F&HuK?peUrcNk zD7kL)Tn?hf=QcITy7Had{y|EF!=*5BaB#!KZs~seTptdLp`ARnkG!{Ht!UCs;0I6o zv#DnIT;CB=9u%7rEW0B~6;T}_(?m(+m5zI~`B%g}hlSD9W2sQA;UzfvfJrrcWh8n7 zhC$6?VzU8;Ks$Alpjph;y{OATac4panlZ{4A>5(gJ{~DCESiu+Zj5E*2|l+5s;b3r z(}9)npq1;W7%{Mhf?iV(Z-=rF<Qyym6{)&Ra&Jv`osg@y;#UEw&#gJ@A8Ae|GqCb} z%24D1NGO#pzdE+fHZUb7i*X8v6|yd;otTODFiX^GxoB_wx`OH7nt3w20r4%+eybJH z6%djkP-?ESY%1dvQnkQn@6;o`24ELs{eSqIXwqA&@-6rlOfgqR*ijJ^k0n(znIa4s zjNPRF0^0*4do;RwkGsr`$^bM^e_k<!hY)m+k8dL2ygSzKZBmxAPMT3wdG(OJ+}-e5 zpl+{y-`c1hjJ&m$l=HX0d{QRPE2NXGrRvP*KD5vK!=msbx59VjI9%oZu_pYRh+{-x zDPbSx%&M3%ydC7Sv{_NjkBrEp<Q=e-M{waE8Zi#uSvXR}QUV*?{iw>gs{_e5y}3MD zD!^o^NV1%i=XW+WZ@ZIja|#KAL1M2WB(VWDIR|qvi0?gbsgqUQ#I_i`Peol2lvNF| zcDI7U@XwBe$0>IypMqMOb4W+0Ij`i5^2w4rVc#xjfU;diyQADUZnRqhj00ONUh44i z?(VpJ3j#z*rNw6C-6Kk>`{^C!sw3vPPH_;naAl}E$U<^44|Y%cc{;`Tr}cv%7oyKR zr)9|ES{>J^IglLEqqr-ur!rs)yg$j7Jl8HG84jbcbBf6CzI4sQq+a;k4+;U$;f(8H zYGX3EH&I>C@h&twlPn8rFEEhxsT1q0H9vz`vK)?P@4A#O`?E~nov}>t)~aw+1uMFQ z5Gr^92c^djs|rtXfmc6u;wVXq&{BZ}iW3X*iZ@iQ6=1u*s;eWch^9|95u1}kIps0- zuFmtbQdu~K4=xyIxz+C4GCu+Gz95zs{hbBL`UmC0LQ>gmF|r#)Q+;67-_%tdY0+cv zL5Drg_nr$@bToP{E4UoYRI6@-#p=WbQa)sV+N>kyKCkk&yT>X*i1)z0<(k_Bze$m+ zP($>|2-j)j&oab)K3C4nbEIt!p!CXQNrZUJOf1v+nu);S3Iy=8S){DR^my_jby8W9 zdTWvuXV%frLr4%hAETcx`H}F71;i}USslXe{^A;@RvfU@HF?l1eYTBVe<=u_=yYs} ztbW4FS=6C%Q{Om=SfhOYfFPR3A82cOQo>*fTEWyKNa$D!Nq&u}(<ae&raToFU&`r5 zG0rTKlaW!Z>5RLw!ZFmOSS_${QA=S{qiSlWaFifRp8e4<K%y84Gl?N&?T!WO?htB7 zyrjT4EO<GMp^@l_*wi}#ara|SeqC!NXYe$PsA^xJxKGRyl*_5>cv{5ISQUvI>1_Uy z_T(Q|=}u=)$&>IpZ{xQD`itDKR?%Rs6~kl6JaS>feV%YvH+Y6+pz-GPfKOGmP`>h% z5$A0Me90k#4~DhWa!wS&x3;fo1o4zh(!(IvUKC`<V`iamHh+su6@&S%;)2$r!rRr_ z5or=M+_T#Q+_3zib(~t{d_OwO&oN@ui67wKR7p<h***HowJ$lQHKX`@mDx2+Zq7e- zh6E9%Dd{KgTC3Pl4y+PTWF#{f+jT~xSypBJp+jYT8;vJ;si6q!_}qLqB$d!c5b=tu zK1V0hB`3mIg&p7y@`e3ZOM+keB!N&#J%fn-Gj@+P>*a9UgZ}Kt+iGo4M=Z2Ni28s( zToz{i>TaoqEDF8S%NY8P%IVi0dUIv+_lr912v2#I4_v=GeC~-z*x)5)&vcaD5~^v* zl&WzjYOW_=YlG<p3O<bLfXS(8D*Rlg>B}}E3IhcDX%MPdSkZnHs44c*1d?7{!;!D? z?G)U39A4TP8WIe@XWcisbAjS`TDnZote8`_sh=}rM1^BhZq&9ye;b1EgWYK>wUPWw z8Asg}vrcq5T;ic>Gp58OnOH0kDX(O2&5rn~vr_qbwJPu;5<OmiWl1;YtKzAjbR|%E zqYOf)BJ9-c=T5;TXM%W5Ir;5{{D{mT!cT*ZvO6sDV|hiIInJv;pA0E6(i7Az-<%aE z(5$V&)`f_!R|1QP>=#KD_%-1n4NidrU-ypgh#*teHH*yQOP8JQtK(b!4Qk~5;l{i9 z!BfHAxPPebSyR)hdaA{oW5I%S7}?urw45-pyt~)TlH!y84|EO>gw0WSajxX(m3gB3 zT6K(ewrKs;0xIxfHu)y0{oNbs>26ghR|pbwKtOwO>>sRl?-^fYtq~1*M;L1?21Av7 zWqi5Czbj>7H>%8l07bb%|3bvlua_M3E5E$M&ogpi_l613>fAI5_S+a}_+iZ&m1PAr zb!XyvyI%pi(SH{^>r99kVLQ|p+WMeI1@pfC7}OO~8Y~i>6V)`D4jAPFt$!8kjfO?B z|8<x{UP>e2i2?1u%1t_&IB|umr^y>09Ds$D{dpcC!M^(Y=}SVzV9RjC&EP=3vyj87 zG!g^wDb+imgCUS%Yx8<+gwN}yMs0Sp<MOy{qO8`MC~)9D5Ryu>yaJJ<`{_pB4o7j< z$Jtqo*LhEtiMb8dWpO^-6bdi^++94ZB~sGbDd3ggW7-E^LtahQv>BczL6T06E9QYs zx1wwFr?R}njDWDr#g<fdD?XVVCwD^Mwm|7S>&9x`sfPUMcL%h1X~q$b_hk6GG`wTy z;)s+QD?xs%O=N2-DGan`FlJbH)rSk?Oz<>o3QfGS%tM@>lV`33TMt|yg^CqMdvo{q z>h$$a_Ic07OKr^YP7J7cemS_2X$2q?_0FMTnoVn-kSph6(2OLN0!{Px&E+Wk!*IDO z=se(@Jud08fj>a61~%dOD!_q=Io69h1Y<Zn-2iiL;Nzu;%?-tT$mK6B0Re!a`0Azk ze=Ngt-@39cOCOO>qZKED2wFRQ5W*2JmQO8Y!%9?ocD;UX#`I<>?71fe2HR$pW|~Vw zp_JfZP&X7Owada|;zvjx)m_c(?FZ@1Aio7-tXd%yUALP|EPd2ye{c+_ATe0wVxCF% zCyV%ssQ6Vth^X93XV=1f)v$~xgL^AKiM-;)*<s^83$2<oJK={GLDPt*NyQN6KbEt` zred;B^|;agu(}y3dh!G32<b?%(M97LvWPYEnAuj8gcwR<Mn~R1?o+nA-&>lL2GxvL zdeQKKl51+U*(hO+F<h%ho_C?2OFIg#oLua?@7HCAroT_@vwf96=Gqx8Qe90zT<DzO z1QtSBbcmQ2EW30|&e;EP{LN=sz}LJHC(Z2AP_Lo2Y{KPso(oT<c#6HjbfhDu)xIdS z)HcpNH4*89@7cL8KRy6cui|0gFN~tbDnFTJE}?-WCYYhZSFOlN`Jkby)g4R5?#x1? zsBx6+mh)`7CY5nuX#8S<;AUB?iR56g{G-EykZ3V3l*TX7FcE1N(-RP|^Nd_ZApLX= zJfuFb=FVJ!eF^U^t}!nYCMnkJu9KwGn)l5wcm;BGri2!ELa0r<sR>6eGz#Wi&UT#2 zm_wW)?KW)VR_0Qs-QaNvgV=lGAOBqJWM{s(MQ2#Q#JD$cISd}MbMrzs@qsAhWJz^- z0--ROkL}M$%S2L}(&s}%39TX18gmM;UnOZCDC+*>WC%Z-XFXM}Vbf@n%U*IKx%1O& z7^B^*3n>N%B>(=MLLeUY!K2)@#{RuM4#`3;sm$P6`7=HH$|4m25t{zALCy6qJ?Y7I zm-$|q6*C7{%xwZfgUT6R0G=gap1^p_Lq`K1w`CimA+HMF(_zw#<DxJ^D38y5LP(NA z*3W}*anlUL?02a57xcaYNZ-WP`2S$)f1>}g?f($%e*-2qW(L6jNisA3FY;w(`u{_| z+uBk|xT6ldZ>)a(+*1xK{Wfmhm1jvs@tCUe22z5-@O6T~@cjD2zyiR86c4MPlT~V} za<5m0=!`aDg8etbE~-6xDvf@dvq>AXPrVPjhnL&EKLVHElWv_JzmBi1IR}2*X}`F7 zw|?(nRMEi3l1_@BfAy{(N-b-Z(+grh={F@bdi@?eU!U%NPSD4?5jgR0cIKiKW;lG_ zPEJ-ZS<X4|a-r|i*jhQIeOoRF)%-?h8ORBsiW&H^k*mq*U7y1iaekIKP~b;#u1iss zxV?Rt<QmmxGTq(7%(yD^ruG}N`1syw*y~jt3$~9;?Ox=1)_C62N(qs6H;Q7EOq$aw zw~ccohQ5<d_nxGxRwzW`AFB9zF5~DnjQY{Tx}Q;#=+@x<+C3gt8{rmFO;fbD<*y#R zpYN{?h1l$D-=6ODAQOvW;6d~bSN`)nTwguj)g8Jn$&+D*d!0spH5bsAE-t!!XdN)s zonvxs(N)s|%!l?9?f~A{Kz?X(0MZh^?~+yS2{DMAwIxIP7V+!m&deRvu7iQ62ZIl= zSrQ=?^t1DD+EBqM{5B9qzm&H|CkSNTlaTIN`Xv52@$)$K?AX+)T#~G}k;X~jzt169 zKG08`vO8GnA}>38l&<m?7952LJq2#~zW<61Q{+@MVd)@>A&s6L0Awzgg>?Is(@c<j zJuIv;WLI_uhqkisS(V-IO9Z=5qegyT9}PxA%yl<jxLVWWE8TKd3_<5~ade-DpFeLG z1ya~tSXRFnom^U5zv-PYbX}hk)*Iei=tyYHZrQa@%s7yngjS(yxV}eMj9NB}b?2eI zN&4(A9Is5A+?_`qV!SvxuABRp6)Jix4vs6lYicq7q94~aRJukqLbQCFKiV=wLT<nQ zIj18`$94T!h9$gw%<9iz8s+E}iAex_FxRy-Wii!&IJs;P_~w#aESz!Psl#=d*uj-v z95(k-2b7({E7TN(WI9qO)TBhjMU>@!_Y@tD^cC8_!J|@KS^#ESoU$vHDL;IuF;RU1 z1%8>&Mh7FWm7a*_ueLJ61b@eSb>Ji_FW%oG-Cyeqlk~432Vy$dE=<TZ;FN2H4HK+( z9KqJ9;ae#0xXuUZJ_}f2B9kM$6yD{eHn9q)23&WLZ22xVsztFV)f7Hfm)&k9-{X^E zGZJAW)kZQzaJ8Gg!6$qe`O?nms1-7QX6+(~<#@M{Iaqp-2ZI~P%#TW2U3L)hZDN8) zwIw;Yk>?W~+mCac|HB5ir0eDk08*@rPQUbGm=IGbNQ@IB^^RPg$jzs8Sy{{nw#t)l zUo_8JwXY`ZKDy7yRiy{D)ntNAHR<s4L$PblC-p|^N-~U7Dx<O@tL!=BAW#jQ=97Zd zDcKS+1Z*Fv13ns@p%-fHoU>k)|KP28@3BAu)yW5e_CF8E%Qx9zOaN7Y=0E#gWwKBr zSvVvCS$+(mg&uPbH#k>C&!=$|P6<nb({*dqBh(y_=&28>>w&ZB5jcf0?5DQ;i^tVJ zX&mbEj*|qU+!cd#w(N!GN<)ldCJn`T)@+=dZ-<%9eJzG=)pjOH)ZiqRfnC?x(vqxN zpiGz}L~B`9e@mb4u0{PC4&Y83n}*B$U7sy6!@hGMVKzQj4ouz@j*4%C5qfTY)m$@4 zU`uBJZDD->p)iEId%gP3zk{BF$s#7m^MO=Cg~5icFqK6NLCy8pJ~Bz1XX6lBft=a& z@ZTlO-K$L-(vRMDJ7_^D_^W9?xY3VEx8s~HQvs!dt%?=6T3zdNeeI?VxM{W|A1A3R zyx`CZkNjrN07vb&uf3$(aNPz)j>`4O77vlYTR)mm>B*v6P+WdJ>%CP7h1ZEkmTN3& zXU`>x(8A>OZ+cne!_C1ste8l9K}Nbl5E?CMI`?v61=CSaFM96iiW}pI6%8Y=8m<PO zLd-E7sljdRIOX?;0?oQ}g;+lfG0DP_k4D(1wAemuB$Oygfn&0w5R#u0GR0Pm5hB>J z7G|_K&qmZ~R@5ruth`}yAp~BgNeD>LFdlxas3!ikg8Hm{y95q%56-AcSiH-jVZeAb zY(`giOxjg$S{rg2YQ=Q_hGh>4zQ}ds6J3eD24!|3H;KZ>xX*p@l#y57$JGfdIhzHa z=2yYV#MgO+9K?St;NDF;cfyK^4JUzrb+*Z}rise|xgfKO!Tf-&Hcs~A1KLxxqU|&A znGAPUHfZ+MFcO(67{EnQsBn5dF=RP+=5WV@dkQU62`emst)f4>rR=~E)JxP1U+`T> z^k>`5>0FO~AV5Y?+XVr6{=Hs2cAyJPr21lGT0#Bp-X!)#RH<K~kmp}~TiL-t`f8yY zNzSTw=5&i8ZqPvpU;ull+#G&)mtAb$tINQ?Bgxb~?Q||4=a}XLc{rZA>lLSkdY^Hl zcT(M38<$XLRlhnVc`DcUi+%u`FJxE(wJ<LDyaEd>;Y7O)Gd0Q)-#Ien*}%Pw-?_ax z14OLzF#{wEeLaZ<n(Qp>m~o4D)-~#6=$Yaqq)#h{7{~10I=Z|v$AlKBg=?}Je!t4c z3H!#oIHo0t0Mc_>leY3X+abKtbF(S*AaHK|sV+%D)5@AN>TqqgC~BINMuFBxpFO)Q zSVC#&fKP$cq;LgJOI&E1wPmPy*7<Ne&MgUZVooC#u#u-%%#k3G!1=+(1`kG#_Lj^4 z{#xtw7fZ?(ZIA@5>XFi|ozQ~ynG0f3AwV(mt)mc)2~#b8rWFK6YI^GKoKX;Ql;eG~ zIhR8|?}DlDGTOJght{!aCEcVpMar_#q?d6;JS#<WBeFY+Gcb;}aAU)w(v_=oOAxH` zTJupBHjmdfr|sr9rbUWp5T)TM&lLW4gUGo6=q*#Ln|X9vF(;EALw+P(3OY5_{aZli z0PB>`v_Ux;Nk`UZM4c%<>s8K$GQXNYwTjs=TEVbai<x{wfj&wIY!d9_I$k*Qujav3 zt7kd_{b>}2j;=9s;X$~VK`coA*!;iL{Ybh#W6k{jMS={p-gW;|1%5-)(-|Elev}-p zc|>&6wuKRDhSReAMdN6_q6w4d{Qnf%)PT1Y;y|nBDJ-z(G@F!Ebz3iu`jynB<WINv z{WTBcEmx~iv-kP(J9Roj=J7B{bYb;qde+#1i25T#1wCrG4{0&pp8ygEQ>m>-k16qN zSNO8lP*DTYW@QosxOPvHU|O1IiNP#N(^d{o&omjdaa@4TxbgbS1fO2EeWZZNYMHk# zm|@fl@t;Nw{%Fvt=9-okE^EI#eVqI!7cbjqCe~*%?b7nF5=^P$1bn4L=1qq>ol|l? z(~Gj7{Xo1~q~m<?AT657iF`m<s-Mt#31U!+uB^KPri^a6Yx7c>Nya*&t;{vWMjoon z2mx;b%IM-_pzi9W6IQNC^6AAcG)gM!k?a7ma<kROAWz3I$F+?Pm#U&#GeQVB^X5At z)@0!4UEL_#03otREY}NsB}UK1`g2#hf?d&Y*i)qv&xwMUh}(Tv&FaGd?ggHYms91E z^l5+CELN`yHqw#sEEDy7F#3Q@MK5N$k8}rtzXDez0xZDGL=$p&vfP`sF)&ge5HFpb zKcogeDovYB<!EiBh;v(x*<SSz2|%NzphuVLopxV@7`-L#EdlcOoV0!G78+cz{S&s` z_3K?4?<&u6JuQ8z;yhrfa9+`ETB-8cO6Tg=^>heVwBY{>$G39_kiB?e=7fa!xgP0N z6Im!;MQ+ZvJeGHk7kM^!#+;Tm_khk4s4TGxlh5!OZdpWztf@E_B;iIc;tZ%*)-y>8 z)Yl3oMQuJ)@(C5k0sN7%j0_BGj)#dU>pQZ(!++&eFLHIO&Yt7HX_j-oO9X%B;vIJu zZALZV*%FPsl?BMqdQ$BzJ88>TKk^f(&93P42Sr=y-}AyFCpOq5@I-7b==^I$A1Fxb zYFahNKtg?uAQAV>RuEWcxM~hPO((AMeu5gT3&IWV4<7}8<{&)Ber{&W3Vl-T3;8-i z6rZqO_GXTp=eNdmyziECHkjg*CZ4I046ZSmwLtj!+W|Fz{4TeF6JkeSd?NylZ*>@* z>nmISbk8h7gETrA)y8yi4}$C(LXu5Bv!(oa=E>R?K}I(#1Qm2T!jqg@GMAwiG4n%U z1ivw76UWZ@JDkIOxRoDj99E|Ah}BoxY1yXu7-Jqg=iK>vJmYylAdskyM(o$k#Q6p- z&?G49&(67QiwFt>MDa$40dcU+KIZ7R#RA2EL~~e%NSO(x)-RD(qqx?pGx=Gsq)Pag z-=C%!qMldrblv{twTo(>JYH~Jf}imk&TQX?BJS{J`KI#I_oTHzM5wiz=B;2Ly2d!- z-+O)Qcz6q=lL=2$!`_qh+gm$Z96Dk#ofJkIo<JPIHG1S8sK(BlFAudI+x&GYGSuNt z>nB-6N$5dOL|-AzcB%!Q*vZ&@h9Aec>bLh=DQkY-Xs6uJB;b<+%Q&^EfL!g<h6;og zTN`snS80)63(yezjPFm328s5g&%8q9K-$KVI*4al`1cwItc2UiYl)Cq=+C04oCR6r z;WeHMr1W*$C1UOcuvi#jOrEh7yU@eg`HRi!gRgZk8qgU1ki_r6oXO`LL(6N|slzH! zMop5x@dVYxz?vZXYiHnMWet50TE*XjT+_R;8vd2iQ_g|#%qZ*Rw6TDdiWhTKoa#V? zeWeC?5gN5<tNJP7q@t6q5>_co_-fv+2Bx#b1If~d-JQx4&LYbip~!5inToIut5w{j z<!5vY=dusTgn|_QwVkX3>>`R90l+?*nTfRIfn|4oxD#!(=OuPorqGD9j82(g?L02` ziatU<cNDsbq$)WAO_Tt=Ibt%10=AuB?Zjn#MHl>dgDra$?M97^M@&Nr-$(u!YKN63 zCy{i=q4lkbAD-g#DpANwWaC3i{Ae>}Q#hqLuqfJsKck|6MkYKcn=`>80!@gvNinOB zBcrh+ZE0+$)0KfukCwBa-G(({W-DVP2vh{T<_nw&)R|shc!z}tpX&esjNLFh%r4&j z{FD*S%x5+WITB#rVI42%A)>*dC4OkB^TFO;2UVyifaH{3)rw<z9ao8zM5~g>hxjQj zR-2GcjYrQ4RZI!SjP4YA7VNpJ@bzG<eSoLOIpYexr<B=chKdF<|A+B0aKS4R?q;*( z_<IeS3UNXO(e4aU2vpf|Ik2(!R41TNkkQ~T@K`cia!6w_bIo!xgyv<24z`4uOp4YP zlS@VWs(s@`FHo(n3X3`&lQG;+BD^UP56+E?Xr|Aijq9yhW5o^F2n8;)3kp(MP;f`g z@!&2kY8zTeJz3L>?$S1p%r>5)ijutQ^0G{42bF=&HU%YZ$psq)xMdyo%*)P_4w1|@ zoIH6gIh7fVg?7$gn}UFivYS&K6vYgcAYIQBeT36YF_cg9X)XM4t9*|)kl&A9tDTv$ z2%j{_3+K_oSmNFvUFKaNnMb_D<|TP_niiR?6C4AX#}x=L(8XQ>|6x}+6Q63&TK|fd z7u~X&GfFiW32nSsB-eT87|l})0cY~UNz8Kgu3$5h&Al_$ZvR@+J^HG*^AmLLnMSqO zU>B+5{3HXs@t~0w#mybB33nOVo$@UQ)b{4rifh2xhHZR7W@Lk9jqOIW4)o<lEP1I* z*jljT#!KDKZdMOf5k(g;;26#1*qSKj62(3}+o5ozw={yCG9+&m6)FsuS-l`o!hnTa zsTVD(b!fr6V!Rk)|Aa~H2fTn{OyT$ziITjy#m#%%DH*~6-+}Tq7ktlLv&oJe4^CpL z$3}A}E~gG;|75XI`jTx)0%Fsl#cijF`5zd$a}L-ar5$<nnbZY$>CbZFdYBrS_aG_a z@D*gr3|*NJBAr^Xi)Sz#*i~_zpgP$DHS@X9tqnC^15zb5eXr_|O8<(U7u`QP^C~h+ zaGfud3OZgC^KsTVLxH~7Ju2DX-R8BxnJ=70@j42sHRy?LyzLA9rr6D|CNXg<wxvP^ z$+i<d{h6qI$P<~#`|qS&_4B@CLr-aj$)Nu(8B!m`kt=4#Wz0FvdLhQf=b00pUn?#k z9O!*aGzCea0%KV|BNsS?Bx|)&SB*+5_$@iF<FoO7M%Q*8b6N5|%da3PlGU<P8bhe@ z)0CbC*BNVU+m7izG{h0=9}>dyIMd6PD;SlY=$Xo;G0+pz;E|1wnrC1WT6@`CRK?ZI zf>8I>vQ;=-R%_-YHI&Gy7i67VR0-)<g1wjiQ@|_cAS?ja@zP#{8Xj6>hn69ne)wK~ zp~Mz6_sFglDCf5YgmA?`C}Ci4uf`wVv{xkCJb8;)_>}UO!hbPq1k9PuiBFF}7-Vr~ z#?8Om_swtT8cx@C2)*|v*(t%gDVtX9D~j50%R5tFjY_Nd{YmbIn*C5v6EiQ^H@$Yy z*s=d8xgy64dJX^2=@)M|)SC93U&0LZ7%&N%sWHj!y3Yq#&twJpvE0j{k%9$MN^pYK z`BkuZh9Iz832o;+4am2tqPu@G0Or`1@s!hn4HBK!8_de*mVgGpjVK!uV2F5dUM3{6 zp;ryu1!~a+*<adSNCQ)A?7;Fl&sf$vR*=U<mLWRrLs-xFNE5HpS#Q+v408tRwZT($ zVK4kRoU^C4K5_&$Kf~Ow_GXzVo{EhJE$=MebC;g-h=~)m!t1{`tK|0|$m_iGiD@R+ zG8$Chc?jj^ow;4E#m<}4u2;!LcWm>$%X+Jgg7-uj9H_?ZLjH?{7bGJ4VNh!JGY+p) zmcN@m-&Du%9IWku{UP=-hzwx;1~q@D`T13&7Ieu=STd*242x!};H<zf6yGYJk4c)F zhiVGd^e3@7T0h?aaO%N<1m!;J^W8dt5#`)rB~M99^j{)&C8xs9$-zJQz+xr~AXe!2 z4UN4hW09MKX_hTYKx{+~@DIvkl6zG#0g=FP%PBYmr!(hquaq{aA>|KUPWV4-!oVxb zTShiT)-6)>0+yJmK4zp{YtL372I>lSI2O1fA=gNE%56b7x)OMQ{Yy7udGCrSQ<96h zC7<|0^3I#o@_W(?1f4&aq95Ng4aew$^raSW&+^2^R~8@MIlQQaS6@zMX_ggIIJ>+U zvjn+yL3g37wwe(DzZ>#Nw;z!7!Z?{<;anc;RrdSb-z`Wvm)c*0<{!`MmWYNzi_7Rs z{(;`?xYNaO!-$jcf`}a!`Dai;QO}X<_DgQLpen;&xUVOX4f^~(LMpP`AO=xW@mP6R zf{?M`qDKoc2l9N_WpUoUB=g#>x0I^%I&cE{oi+;Wo5@)-f1xtvB>Vh|aGvlQDA;o3 z$PjIGCL9a-N+H7;uXOMl4G~;v9h|i9@JGAbEo(5PZJRF8L*=N$f$^$mPbINLkBF%r z^Cf=773J7TT#I$vZ#UG8JFo)<-8PAxT1eTxs31M0S{vLq_%UvjgRIA8MDPO|TpPCZ zL9|2ih4Ow`r-~dBadcqk;BFOesvpSn4f&0a;7e};Xh~7w_nz9{Cg@Ajz*TvXkC+s5 zZS22QTd%1Y4d4VyI&b4SxO97bnjcQv$NkHd6ue6twt7C`wo4+II$8&Fy8im?n~}dG z2z~@1Px2M62+zCp51s}i!BOR;O==x$`RTnU+r0>*u-av%>G8MSyCJw~y++i&S;Tx* zvf#gP6&iJg;Dc=I9$oTuEUsLH?cV<2NZzn&|1TB(KZ^UmDx8I#p7sA$;Vc~gONF!k zw=eAfy9rENA_<Spk@sz-S786_&?>AW*k|6x+6wn&n2AL6EiVIf*fzoLNt~ug_<Z+M zidqF)IlrSrOYyGH)0{d&_$H$dVbw5kHSj0pSFgMK<H}A_r`Okyv_?<w+n#h$uXfU} zc1QR36Xt0Sn??y$LAUqqgc2cTRWWOv%k4TOqsU>EZb#S0<>S_kZ9+!C%HzY{Das}L zkuv+{T<hFCoAWz;(}(`&DY2)SS@d#|YULF4(&;DG#WSr(NWMR3XLk#`lFUk0Z+DB5 zk0W5@(-gf4P&su@;)8|b^XT^T9ZR;Dq}rnKC8Ilg_}8VBmVq@7{j93_;^{?HdVmWl zgv;ljL85<zo5!l`*vjo)YO0@JUPDjD5soEmlA_I{ob?TX6NViN8B!7w<r(@K%xzDI zJ&+Nju6-Z>ffQ>xf#GmeTxlnFaRg=VjP>@d#^*7q4a-EHZ0|yS89hN%0`0<|U-x@H zHO<0)toV&6F2t2pXg+nEAb(>V|26S%+va{;L7iPmI8Azn*WX7t8uDtj(#K1NSoRQX zaN^hfKMYHTg9<q%Sz2_*!TG}LlVf(~u88QKeyt;tne>Z+@T%<)PFm?F$qDwtr?ez3 zBw6(-GtYNxd`C9n>729EX}1gFR?U$2$R9$mrFM^$!0a73@uXZrvQJ-cv%3gq=AcYW z3X3OAyQCDP?-ycZC;q!8!sZ6Dr*0Ok*##9aGet7flfcC%jD_GhpkW!P$Eea}MeaX+ zo_9Ni8py+($Ju}k!%6Q5!|HjD4KA{cHti!WF|Kgz#3}SGaXJ?g3l3g(18ecsrQg3T zmZJ#GeEnbRyHy90eN=bVaag3KbauL5PSt;b%+lXqZ%ac#PMoff>ft?+*PhZqJ-x*x zlw}tLr12Hk8cuq5>wx#Hai;$Sb9VzVOL_taJehi}M+4hrT|<L=@Z8?QNE3&!N#@ut z_W8?sd@RNQ<UuMb*pU7}A894Rt@+lKPRe9-3*-Wa2%}tHWe;PwPm5@2stMy2Dny*2 zARAXzh`Vzs4{78{*c_s}ky6fp$Z%$8s6(<~S(hA=Tds^0KSNKL2XF5kqTPNC73r-* z?IA-yw*thQ1YL=9rPkn70KlWrK0*+sFS(A&ut~w_2R?HmFbwSw+d0p55;Zt2Gm_9- zr!3&iECe4?$k+q?2yh(wMg3ek_3^SAQCCU7V_wKTt)}8~m?)kpd4}2CXK!8Vlzg)n zS%-I85N{bICoUSeILBhE8aPg`k4Oo<&Hl_SbB$zCaZ2caCmL*O^*6l79Cb|@D;<47 z8w6*dap(n2>r>6$Nmm+poO-E~hkK2etX=X?=rRa>`44OsXx61R#*;`0_0xo!;`^jJ zAVyi^uS=y=Wsxn(tLh|zOw5dXCZ{DYc!V-Kph|Iwu^IX%LAn-5LVlr&TP~RB5nGZo zqb-paZYWsd;P{JDX_d}F%*NuEl$MUs7mOCLA<9>hB8Uj+P!p1e>>#qke)Siu>?loT z$ZKNki6})%b9=zcUkM^oLy%*kf=q!_EYw)9QXu~#kK_zi@EUc&`?O2zbxg(!6Frwa z5(QU6^;K*hHp5j=Q=~LurMdLLsy^wmZD;XXTLV*N+GaLchHIWRkO13YY0mM<@%fYB zO&auL>6=3cA(bneeoJv`s!J~`P(1#nM-#6}40KGLdSN=Zg7(p2Zv2yxj<e77r%_9c z!{8mVBwP`#nUV-McxU0H6>UvR1g8uTtqr&)wB^FNfkOd5eZ>mXrLukCkr33!hOAy= zA6znbnJhaESe{*vbn(!0%^$20&I`#?MSl%)+sn&+&$K8C!9wvwU^gIbGqPgEwq3*` zXlHx1x>|VwtSJzM-3SDWLAAs2G}|zIt3RcIkG4%9qX9>y=y^}d(732U7wLqY_Z4(K zU{^n2vy+hQx~n2OioZ&Sc~57C#Zp@!+Ib&}eE-B=ai1o`^Ml~S)sk<Px3IhZx(Ssq zQkNKuf@6}avIbNsNMFQu1gZESTOgW48$o^#F)P}v@ANiH7N?NgzBt?$&fqC6)JXI; z+Sn^~;8#@Y0q}=(@K!>HX1K>xkpQ!yO!%jlohHvN{FcKFIcMWZmxaK+8D@0ZjlLRN zeuA*We~6NNNh|8`QG6v&ieyH#4q5K?H@<OEVEP#$POr4MW)&FLeDMCU77&E{3t@MP zqurx+DfflJNA}?KNaG0xpJ!G3eSG@dRA3lrxBp9>Ta%>fI9=2DE7#7IBKq-SfAe7k z4w7=Qo+K)X6DrvC%%ez-tb04ljjG}H*g#0pVKm<qUH2v?yoel5sU$s+vbh{=fs?hM ze-we>^Cxe7CLlr;nlws2oPHE*p)caVI#hZG*)qa2wy8*E1zu6N(B;+d*FO!((@~zC zrkf7=#pecjD{>}=-k*5}cmvm>e}`T<2ILO+0qL*3WT1$(MA>9&jD-yfv6Zz5(S0Q& zG&C5``X!!@%9&VT9ZICu(HHM*Lx~2f+s6~6Mg-^N9j2;e(+KqYR3m(}=kwLR6XZW+ zGC`T0EV5O4&;?<iv}KII<!-Ux=lJM0thj3+Do?pN9@M;JriNKLiWzu~zlXVwOA2xd z%^smrQuSa3k1c!~OR&1+>EqGAysciVWotR)-$4dDM8h%Z0C*DjCbOXD5)&hsIOEYq z{{4MZwLl7)whXB0;QW9eixSN-BowpGAGpiO!dh$Gv>F-pbQA`H&*u&IaoA-gPvBy- z>8*!O?Y?=4o?7LYgvrJ>e-QPduKg$Iw4x%4BCzU^8S|1EBI|kcf~VVuMEdS5Biwek z!f+Cyy>^x!Pn~V@_I1@&;GgXt>=Dr_`cf$ri%-^deBZ$jF*h^j4uq<=P-WYECJOHb z`(-&Tpekk{gE(0u1ZP3|nX`qpvTWs!CpAuHn+)BHp=;Hxrf>_mQBUZh2XB6oYsjV9 ztAj+l$;IaP7N0EM%`llA6TBQcg+;@~K{E<bo*@rn6Q<!Z*9WPIj`2~_$SJsF!G4yM z{uI+e2oegmM6GOga{j8SOxz<ry}bMxh1gVFFqom(29H7q`N#FYLnobt58^USj%+lQ z`8i_PWLnRF(^sZhktb-lDdMDE@%VU1x9lc{WC-u<7{HaIzOuE_`@)y?0c~X~^7|{1 ztu=RiNQ>hm`A2Ev>kauNMY|;CAC;su$OsXNMV|H`=;BBr2y=xbPpQ{<7M2G!)~O9J z!|)uKtjy{&b(215NVxA{&eajuET?rj_YIYE#GKSc+p&mO4;;!&viSLmQR)47OH~_% zH$v4l<;G-xTX<#rh8}IzVQ!P+l|)`XR(USMcqTS+cObyTqNREx-m$Z4p+rfCP1!#s zs^N?BxJ^L0a7q{Smj+;+D{@|T=z)*kVR*T(y%0OoWJa4CF?B<{x#k7J1kE5v&;SmG zj<!lLub$jbY8cECxWv?o83m!V$RR|gzX~sWf>ALzPbele3rK+h2dg$Q8zt&~O3<R+ zh{`~WA)Ke%q)u>+x~P&C&*h$yRd+W-qvMNtcGFgmP6entjc3@VgAKPvpr$mi>{ybp zfWx!bPSCKZ{9t0kG=a9NbNryNqBU3x5=9da`RiZI@xC-&HGdWEmMAn_+e%Bbd-IYg z!s{Gacz7TA8&2~s6<3)^fJItOOaPmM8JV2cj7PV0rj+GGLA8u_>_|G9H0uIawyRsL zC{@|SS?Gc#;@Y6Dqw45KwfuwwQDcQA5V!Kyd$yC-hMOgO=T&^zuN?Sd>xL3+Jt_ng zYqsBH3s1`60KyyFiuYdD%J;$WvR*Biw$gr3moJ=+>@d{>Har0#?5bUDa;syYnw}P| zIdEb@j#hG*VJh=TzYhHs+m>Kyt)9*@x;Z%9ar{Xc&02dN$3r%!CLC*LP36jNt?8KM z<gp}GNWG=){P?)*WA@~27v%{#4O#<?)p*@1$K{TvcUOm})AKY6;2?#KKH0)A`5>yD z@F!uE>w@tuH%@Jkx^<NR_}Nc~0))T#I~1A>HK!K!(L!TjJWXyZt3Tl*FSm*9U3ekq zm1O^7tcxIj4u)n#dZYN89%Phtyt?n-{u)*U@Wwn4TdP00HKCWO?L7LBfrTVu)bmxV zbCQd&db3EI_>q$VP0^Y~EMqB9zSNY08cnYrO?*l!j3)mWVsA6JFjUmmtP^eTV+FIA z1x37$x>Tr7ZsS$;=%^C3wvsmm1M-&dr#CS>y)%)0gHbk>Sk0NV!MlvA33oaJQr{WL z5j`<EO*E9`q<0=AKydE?C)*hHFGw*t+GGTOpk$C<I6s6qRyU%+`*e6-(|`9)2Apu5 z?wY8Gf`K#sXT5mLG_>Lq%#wk0(Buy`M(7J8ehLFw(BTjhP7U3mjze4oTsu^ElP;B9 zA5D_PyM6Rek~q=GQ>r@r9q#ahuN@jgP5mKmmxgDRy_2z^W20iN>fm5cI%%z>2V=2% zOY$QcRQ9wAbCpaoww)@}^rP5z=U3zKkV-=YE6cUUibB!A=#bY2?A2a&Te1>@#}r{@ z1iD1JG^Awi*W9#`D;r#fY(0u}aLO;HzE};oC~1mMly=xsdYVbrX~Pui(545+iEnbB z7KS?HT+JyLN-Y1C;o9Ho!*=*=Om_VI^hm9~5c~@*g|<;U<>+%xfQ2^l5p#BUtD+&* zk1FF9ABZCYJPW5V=OK7^tSBY{LdRUQ)=Q?0S{fRbNU2g{Pk|6<K{@1T14P(qt6Vdx zwVQHm(Nb*6oxnbRu=f<Zxw~AcV4}2EE_+4{`lmEU(PERC8DiaC$3tku&XbQK=A~-Q zuY3XuQI-oD5U3DGa_#*f=R5xGk~WA5CUQGbV`KezZ2`!VS|ipuh?rhU-#a^e5B4?K z$P(R_r^PDooptNI5R_?3A$i5=fP})@lbQkhu4a2byTgmN2Fd3Z;z9{M<aLh`P!LGl zr9L|Vrpnddm7RGwmYSiO{d#NalkJmFx<)fQZqiEPKjQ!PNw)E|a++~psM1hq%=r-d zWOyyfWEstzUg(rCghMVqR|WfkF;Lw=ZB$}-sVE2_=GjSx85U-iQDm|)P~Y(GsY-&+ zBDI6Fg6N3qaATvf$(MqStu%te9V&KBHfd(6=c&&Oja}s?zE>G2_fW?1*ocU*r1%To zzZ0=Z$}9tpm&op@vMnQYo~SvxRvtV*+!E|inHef82<n0;^DD)<rhe!ul+Eod9F?TY zMb_h<m+pF4#Qp6Q(T)HRPHa$0QlAjHWP~Ph#8?Yn3nE$}J6eWZ0{cVJE6ARCXQR9L z`36;IX<6QgVf7O6QogOYXHtp@N+OXd^LH=?5u82qO7IvH#buDeN0oAR1F-n5=#+6g z$&AXN^sJh4T4va@giw7kd3v?>Z~O{={?eB@oA{s(f<1Rr=M#T3!XR_h1?ktVJwp-? z#0tM8bcO)Hy{{hqBk$<CSZ8i!2s`vA1)itBSZXsgSnb)Va;TzCizd<(;`Wo9dQ4f% zOgYh2&Uq=3nYVWeV`b3$(^99)tHwTyCdn_Q*d{bpyVjMS%lSBu*Dg;9*Od-yWcX=} zT^!y<y5yjL6R$2W`lDLoCf^Lu1fK+xBf&upx9K}@_$6WXTq3bJtZn*y0(YZZu8sR* z44Dx04B4=7dYsweu=QLtfmM34ltOqBmN#@>CpWHTN4l-lR0#i`w9~DQ&2~HLCH_Y* zv32j!8KE&`T4pCy1TEa-WO<_9AynG-85I&(>O*u2gRW&N%k9#MIB;i(F4~>_N3Q=C zP=07Y3PBtS^;6N6qu)J@&N>?;E;=O;ZpkKaf1_Rp5<fuT$D`kuz{E<Ke?CQAp`3Ej z&VtMw6Ljyf1X}XrJnHImSPX&w!6f?6LZmc~_b@Ef1}~G8U~qcr87M|E@SQ$}H+EL_ z(>;Bbb8WUdX?_r@ne;qRrL-kC^s<2;g>gy#$u~9V7lb91Iy79aV;A>7A7s0#=2x~> zQsbJ7_k9lWTw-h#FSK%rg;(3R!`kUOqVLuxl0CoocZ#k?pRIMS8IuZ7?-EnZrFpUR zX+?D-jTtaCh+CCr^sC{TgUEZbN0P3^T1i$v_z9I7xn&$90XdhBd)zN=vC<Zu+NTyT z{p|KuZdqIfQ>k$=$U$aYyINjv5qa>_O__=??wyshm$4Hz9cixW{?DpZpe{T$ySMDw z9YV^mo&PSAS*x<ytIJdwXnmr6nTNDeB-(RN4L+H3B!Rwp$4jN=xTNMqKbB~%-<+YV zc1oj;i$OOU8VBv^b{z?liYaIFKGQCAQ%6IVaI1CO*$5`Jc<Qek;K`;J2)b!px4?AS zZp_rC6M&#xK~qy+`}H}<Thffp0Nnt}hVgo*kC%)7PCF{O%Np*!p#0H`sl^gU7ya$s zdYEqYVewZjy|e9yK?@2q!=SWz5>0N%KAksGYMd5D0B#OP9+)H9_u8r!-~PQYzfgd? z=b3T&fDHV*Xdalk1t_V7y1LG~)HI#|52=Ujqjm6SN{J&T2luup_Vx1Dyl@eN+T&vL zocA!;zu=d_dd5seOQ(40`F6kXqX=WoflndEoJ|S%C@2+qAx%xU0lIlZMt#%4wg@(s za&6Y8quPZ=_-!TZ!ljG$ZJKDff|}y9_N3BEpcb@qtg+FZOe~#rS#-xgn@30`Hqv%q z+&`SCajuqciN}l%8%ax$jR;Fx&I&R=OM`C`Y#`bAniuM6Q#?dAcK38mUsmgl+frG@ z<2I=g%=-`W^OPaW-0l6)=`d2JHW<+AdU0seRMx{F=HiYv^ABNW1V#%#^}NNJ50jv- z?1C?quxKeuBP0<&^)g`^{6LD=9UV>awoyW&-t*z#IchqY=F}&s<G6eC>V3t=>ZbwF zx(?*?op=<`D39s*aujmW60Y@Kh5}KDa=#u-jUz<58{LZW53U`viT8=A&)c}3LJmRv z6FI3`*KoMLPIDLAnZdz^^!%Mypx?}FGd6mH`3S`j1n-Crab%gIXF^*IzHN-4Nq_52 zp=@XKcze4Veb<^T9Vy+ffc+$2-0<V&tChOvTDJ#xtX4jI1VkWO8@V?qGrtf6OE)P} z;>9HBWxHRo9F#GKvfi_#rw@;CCARpfY6*^>wIXI|_6uvLEUT4FBMOU_+C^ksa%DnJ zI46xa(-y;v;ktSA<opW8&nXLUq%32xa=|j{b!M#oIBa4xC)%FRc)#g8m3PNio2Aix zlV>*7-g7|wbn*Lsp?W!RoiBezQ{#osC%$^1H`M5z%!m#@XF=es51wwl%oM{OB{}_P z%p`z@n>j#~>?=#qZW{$wr`t%Uwz-W1?p)iB+C^=?Sq@JEmY_6tik53hAT3;33wWjX zL1x(Q>0zLd%I@R!tE-T!f7O15V(&<eJcDZS*Yo*z5M|`&e~IJ&5yJl?j#)VVA92j~ z--hY`CjZ~*VK(OfKjL^;TPyBQGn(%n=|wLh{zp9|L&z;g5jg;vP$U9*OguvPp>C?7 z6VKBX{RJdT@89iOO@)zKdx;rDuzTLdVZ-b(ms;mbSU2X8?wsH8?<!lTT#u^d@7J^J z)xTTcwehD_pZDG8>7PcbsX1&CAykE%+T81hN=G^&+~7K|(`!VqALqu;6GB?r;k@Ez zRh8KW{8dd@%FsbE>$m9BU+r%Xj4Q%u`%fuS$m8G*J)Z90o^FbU-rG~P&RSQ`@ctXW zz^0xp3OrD9pkMW+k?(0)kNmrl9S$pq%Gc6uK39+iBwq3GRVWn5!j~D(p!JP;>omVy z*9{13vqw3b9BgXUh84Jl`rQrKg_~Np#c*g_dqx`iSazm4Dia=~t-X7%t(vc%+;a+& zztQd-m^?9<z<5-Av>d-vUJJ-3MRP8OBpDAD5{8wDea|<;H|wDGr8M>!;Ye~<ykM@U zWqMWRdKvWWiWy0uWgSHMLhqC?{A)E6-GK@0HP4I#sCuGgJf27pdtM*cgf2wwH#zV@ z_u8+r9sTsjTKY@n8t=z!O1@YI6Lcg=WRsbXw_Q|=zWLD>y>q<P8tzud_vWzvHW=Hr z5FqW~Admyz;2??7&(L76hhiRiqx^dF2m?H@OL)7@$5JSKNdz!62$D{G=rJP;I`X4X zCQj0)z!2x$^!ZE>5|1al@`W{B8p)1ODQqzO%IUy(KxJcH8t>CUI-;0)lVe~rT}Mxi zSL1iuXNK;y$#PPrBiIt$*wYHIf_$3qW?da%PO!f5Xz3DA6_@i}O^%4U7Jj%H%Y3oX z9Z!m&a*^MmM`*9+y6imcH}hTeiBQ=qsFDZ<FXo50SU`tku>KClODAn7UtG7GB>F{H zL!yk=i<u#<s`zok{ut;upJG9Ikl{3l?)f%&D~ZNmLfn~4;z)?VxVYUQ(a3yy+WNPI z)oNjfPNGYjPq0ibKX)WNQejX?@ViKMh?P!|(<OeM4i<R=*Ms}F7=X6t75v;fXuCCR z6CQ$SKHS=KNZee9ygiB3>{MHCBAE(ZOp3BqKT&V>vZ*w-Zp41%_QeanlVOsjfnDzj zcA8nT3U~G%V?XkO{*h4Ur}5SB9_^vnuB6a(sSBx%I3o5R^7k`R;{Y{Jl%oxR$Ejw! ze_MlUELV{EaVQWc74Qyvdxhl_xRL!rWslYa*<4^DH{l1fwEe8P;Mx*O=0Y-&Tt9CG z`cW|$rcU^$R8gy7|MqsRYrMF_w~%G3vB^|~WobO^XE&TAY^-2SDn7gFA`~v+4p|&` ztUsJwER?T29Pdmo4{jmCk#H%Jqe^*6y69NWJhq7p#&e!UOoP?C508?nXdOi2uR!QK zUYI6OC{H!V_e|#k_Mv#m6?0s4Q=C<77t4ct9g0Xv<Pt6y6}8*0c;@owT$4OF7*>+I zFmgJ88`_Q2ax8>3QC3<^-ijDf0Ly@ooFqw*gi_jU-7ZFW%^nd9bt2J-urDQw-G~rV z>fT3G_h*`3UKA5z#Er}+m8EpoLJ1;35F@Bh{Jrh}V(grPGzq(GUAC*swr$(~%C@^~ z+qP{RUAAr8wz_copNKgT6LWFSZC+-^o0)6vwVr)6rb!YbAp-Os-D77Mk9;?$V<qlC zyn_ZJNq-@vq(Vf)=oLjuGBhfo^f*SDnd_HDIYB~^=XfB%32rPYcmM2BQ}-_<{{^n_ z>>uu_j%iwCF1kdEl25J%(q#(h94EeC5n${hZiz~g4s=6=sk<{CX}Nz+s!O0IrWQSb zn$o2f>6-jy2Pzt$5gg_JNqV(S&_jBDhQwA5>cC#fSb?!K49bWZi(rDgb9cXbE(ZP) zE^&>#2E2Q@nU%Gf_OuCie@9(+o|2(x8h(Z7H^V{;_|<iPagEb6i40p^5h<MHU)1$6 zd2>-@hoCMBM2NElcwvH$-!wChLpAVv897C&5|>mVj8MJkp{$=UTY3{jK6j~~P@VOj znUp21cv)VsB(1jxN$jexL3vhd0yg(3FxX=U&qKR5QSr;P)J&pZ-XoF^y(=ztr8C#t zRPGM~4KhubZB%Cphpf^r>{Bt^c<3lfP0R2Ysv2y=NV89te+#C7ca|xl`FM*ObvsgH z%htNC-<e(5QX_^_ZC4VR@AK&~rMDS2_bh>nkR&;R<n_&ZaH@89SAg9h42rV<yu3)1 z)Gn<&(6<yjX{#<bBe|Ik{05bawU=t;R3ALmvyus}{36?Fgy`q%exm9=67*HE=22WA z9&8@&MP$X}5frpO!a*srXWNhs2CPU%mLptozPiCbKMw#o<PUU>B)b^KoH2r76=jC^ zSVYt!pBb)Fc39&_LB3U7>bpDZG_A6QCWM8rcWA|8ltR_ds_t0l^NVsW)T245K#6ku zgU)F`DEg6<SylJ%_Rh$-YmPRm59d0k)u8>fhlhLfOW_ik2-2_2P=Evrcq=^Z|3N47 z^G(T^H`v!6IZUYIm>9ZDHZL|$?mt~~@=cYW`CZ&Tv6vFqU{d_)&iaVkqF+yyVML-E z9hOEi+=x9hfJ$@*G_eO`fUrzlK^Z&N$(H!G!3}#VL=-|alOkqYH68h*J`$#?4~IF| zu~lF}6rur%cL7#bx-QpTxJ?vDE!t!7%Qvk|qkW88`IzWU%rTUer-4K%d;>*WRgm2N zH?wSruvixRfuRPxQfaOH#zL8MJbBh{YRur}hm<Thwg|u<aDGd+w|~PU!d2#lfr_&j zZxSax)QNz}*NTJ1Nza^!kuptwrWLFqR0y?^?bi%1r6xc6-$c{-mo54Y=e%z@v7g7} zsO`lDxGrOitsQ;oprPaDY(Q3PVYd+RrZ<G<VI2pt7Lz;d{Udt36>XLW(0hB~3i(G- zQ9$EjZ+T{R@Vx=$x>Qf*MiA>Y%nibQ(wPZ;ipwels1R&=_qwkm0nLU=RrtO&kL&8l z&<ZZf6XX&~j7><LQjyl=UK2{GWCnEuJiQg3=Fpg@CP(`bcJVfe%oIJ7N7FkZ^b>53 z4dV3glR<KZT})0g<Pe$xFT-8_eN{j7oZ@N`nTVS5vD#{G15<&|d#BlcJPu?)z<P&A zyUd0qqjL&-*enGgJI=aOIaF1lFcsR(F>sY(=8-qT-wYOvXq-JnKcf5$XYI&N6mCt+ zL<>TQfOFdbJx9v?SFwz%X=1UZyGbV6%WGDjCR5ZgTHR}0kHZpag9Uci<?T`fO?1)w zwzFFUjbk+eJ`l=^_YC(o)vX>nmZhb?*$RO23S1jh8^6M>jkRoTYXU_lm6|rTnkk3I zPz+UCJpmLwH@;k8h9MnTO`I~spW<}uKtMJh0usK62YQmUZ{EW#JqV@80{+22CW_vQ z*e}isFPHgBbH&Id4_k#$+kkQ>Pv!`Fsy64GqmsX$am3G6F)V6_^wwE=6u}Xfa-~WI zOI>DFTaBvjx+ADX@-eAXK+s%pW9%)9G-?@7*nWS?#C>$U;xZ@Z?$@u@Z>0ehBhdR( zOMzq8#puLSFZOZ4Xvi$!HyibQe=fN0w$b3!iVVT-P8S|PACwL2?YG@kB5#6+Kht@( z2;#HzS#8Mt^o#|Q5F^CQ7=0Omju)6BY_oOmA-IQO4}o+s`)o#WR1CwiUhn;K=!cZG zl4law`5>;ND)XvdhNjC_DY#zHyT>=VRgk*8(joXTKjZ5FIBTrlo_WwsBim(z883dD zs9LC15%|YC)9+NbGV%=-8%f#OThua1F!yKa-J86)rg&n0Q-75|mw%`8of1OF)%k2{ z8lJdve&<f<($uKK7Kf~kVbE7gM_cg1c4E_^Y+h~c{Z#>ymgx^UfWv#;Z?NK=$u&Q` zvIJ;x-A1@1S_$fyu1!D_zMVcnDRHuQc#Z@v1!KLKnOMJ+a-3?k^t?BjJ(6<{RMmUl zD^E}wKsR`RNXo)hv0^$RCIM}1TdCo(Nfp&S*p?5&wqaQmI2{|$K6ISyn02f{|Naer z2<^n-p&oV=pDI-cp?^$vXy3fdC}4jys{p`{v4V~T=U?(n<I&|t(Cb_{kMy*1j)A`Z zwWdFFxIPEsQZ=#@H;=P^rfufq@<))xB-PimxuxXfNPt_L4L_<cX1>Zp1G{eP%Z01D zy6KPJaK8%_NMa(OmdvPAx0DN?Uq@y-d1t26yAtXq&Gm(sr|geg;g}k&InYF=t&HVm zp$^K))>Ym`Dk*&L@h!{hvP~yU$!>`;a|}1wx@eBbHpMmWs*E6>dKJk4Nt`2m7feoD zc82Rr0?^Ks_!@4%7td|9BT&n0IgUHS&pus^B!}cI@6@v5Bx?pJuSXUVGUe`l5kWeV z6&*1`2&|}SB~580pZ-EqIJbBa`Y}IrUaaMez`N!uQMtn@{>bdK&c$?LxIMj!xMSA& z!bunZ=ie^B=F&{Zvc1e$LD9tDnWP!|oG>yOT2w7s*=$&73*(c<*TMmc1*=y^&yk=u zH2W_<?hX-*taD$~uE8Gi<wsRNtYQtuqw`4*XU#)PtATbb$DXz$zi;08QD+8@$uG`T z=+nWx<hqvI_O{mR6{tO(nQ~M~tIVXXgHDeNh(R`vxE|SXDPecu7GTC{EKRE!qpG2o z4YM0dlab4I&~qdi3|P7)%jhJ}vjN?MZA(p3c|w(t5>DLgZ7$luy~?pwS-umO4~2_i zC&AgF-OJXl^CJ%&8Sa;C=RV0J8mL<=zELNFIh(esqo$nVSXJj0BIu6WmRJ&0bo8_} zqsuTPxDv7)@E6Rur0p}vxzgWM$Q-|InSkf$$Wg~M$C&F+#V+8QE9+WKGXy<)Xdmxi zLTL>(M9=V;Y_@;Y+NjE<$aH<4i@LY|ghm;5iBh~KA}r)cU!(DIe{_*)*A+$i2Vyga z^`4k6fOj)_AsjoV{G0oy?=yY*XCqsTJjrY_(xgXc(|-}6<%32u@2>Z$p^#cm;O2<o zMlIpxb5C>X-l)eoO~B53Jvc3r?6whGkO~X4eQrCeGQH6AQ;N8q9pJ6PG?mRet0#h< z&?Z-Bi<bYnY|Nl{ZKdAzS?lnZC7tN+xHc-nb*itb{Zzwo>(eD@Tu7udpA7-gd`{r5 zeLts!9gnd5;62YC&XDjKa(XjC21`}Xxund1G0_<2Nxj-`@vaLL>LD+-@uZF_{2Y@> zcf0D?D|8bqK?8&vYlp<)EJHR{*DU=Zo3}BrDM-KEQmjC-!i!O7liN<R*@zOS$}f?( zlW#j$J*w}?eha}YzbhF}etfcJV@!8AQk!X9MZH0r3+W`jomo{AO~>e%Jd0x~%6{3| z?x65ca1YhXiclWoxWKxaNP{-UBptv_W(}SA_s--Ctg3>mPT!-2&LqjC0edug;&f#4 zxS~ILgnh3ydzV4bOEazOC_dL8x@eaR5;RuM&!7!(E4aCHcPq-{ukQDDHGE3v*++Qy zaWdzc2WU&z9qv>adDU~h&@1LWc=+QdPVu;fc$zL{Vbed~hhu?=y{Ba`U~p8iX5P4j zoWlnhMtpRgw@0ej>?hrH!RUqrNo_UoNjC&#?*0BmDz?PNu!+c>*C<_?E<y{4&4X!v z$;=;mKZ<q3+EwaSBjjCWD?%4h;xTXPcWLR2?u11gD_9k``v8b7t!_OQRIYbb^42OX zFlqbgSf7amD-q-=g9_%0GEg<axF=Jxp|J@qYXHG^6ufgEd*k;BTL{$niU{v&H*|t8 z=kU~G`Ua~n?~ir}>i%4ab8@?_=@&vME+p6K;QhS_r8c#Ufg4NO+1gRj?~R7PaBdYp z6bD+Rh>UzvqVth)n*OeT{u3R;9PL3zGjnUt8I}8<Iw)1#dQ-Yq1hZ|&&Au<Qix4oW zPa{-v+|7N9&)sl}!}MG`nzkt=e@gCi6Tv!~&x#w(*IZWW%mofpW1$PpB?SZ?CvRCo z?f05{T-j}Bw9yp5{1>;(TYqHkx|13-UG=j3Fth4aunqZUG0)BpAx>t=<FXT0hWN>$ zCL}3f@hGc_ilYYm_}L(^ZWFlc%$7Frn=O6s3sYUiDS9UFJ*zGeC-_|@)1nIEnChQ{ zwA;H-qy2XDnjvm(x(Kbc?13tDKCMy4=l!#=xCVuN>MW+f+cL?jr9_5HwmW&3e@h3_ z@=+<$&)p)I;xF&^6Ar%o3s-8^RS?%;w`C_4CYqV0CAF!RR1NFg1GU3?%uB0#QI&s2 zyN=g28JjK%P}ZDd?V$@_&w6<Hz(zU5hF#XsaOtjaylV!;=qChPWSbV#I&A&Xr>ffj zwDecfNQm?(^iD0@xnOgwJ8BF)kjp|w;U^H=sJWE?<IR+ohc2Us`p4?kkF71-?|<1? z|7B18$FXANU}F96{3GXoJgfg{V{x+m|JYc^+A?vtZOHsb>;lAR#tM6uk6)5|BGH@y zF@*j}-DF&noeQ4T+bLaut1+Q(uO8y{?P1%QsT&JZP$oDLzF(TOYCg}T&$<*4>(C!{ zpB^5a?@x8oE~|DNg`GRzZ3*Xgoe!hOHm~pCW?-x9M4omcZugE!X%q6?T$0v27+**+ z*Yvg=ez(W26c9DZP2YJK`i3<t`Rt;|rdrnZL&opJXyiZUosR%SK*;yv^~@h3SP}i5 zOCjx5f!!NYx|K%11OcC?FPCpP@~6L_5fyHmx^uSi!Y_49<->cwe-a_S2#YUvjTDE3 zWY+ahX3tzQBmc$RzvaG@iRbi$HifWt7a!yi<=?*l(xq}5CP%zSw|KiA$7^tDSUdAq zanoapfjMK6IW=r+GC;zP^gzPS!&6UuyKSEM9%^l@S)(yS>)O2y51(AdEIA;x{xuXi zh>{<=QNY3KA`qPSC<#OA+>A-Z4nAUaY<k}mvd~bia0?a>2Ys`r7j`BhIi$Nk42DvA zzD2Q9qf8>@4aY3Hylvw_>uZ#wM&fjY>wnG@L7!`YYVGZZW5R@APIDnjFIMy)>sae8 zbXn2fV~(1DnaNWXfwM|{5cpVry5KZZ<c8sp4<iR+y2Sm}kTiq1R-Y{m4P>pb>t6!4 zC}8V00;DmZYHq00D?2y=ZKG9<%>`C7bMzEwCPUN(MYl2MHs^po=t|E2b;o_-ERQ=d zGzY=GR~$0YhgwUxoh`_nZ#Y^5Nx39w!Fc&V)zxo~b82ZC<G3mO9&QnYhVHL6)5kXC zu;<MiBmmA0J*%!MFCVa9Y(z(R4_zd_A^nK;KrT&|b>@08IDc(mGm;l~(`cIXvgaM% z2%UjS837S`;3E_flM(18oBwuOAP5XemdJ}7mE4wj0K^~D5c=yVD2(?|0Ureg?wnEh zkaHF1IvX38w-O<d5sm-{SPEDYd>=w2oi(!0vXqM>D-8$UEoF=C^T~s?2Y4ke#8uXI zPZu&AliG<qeu8<AB`{>(|AKFZhHQ%1q>h5O5%`dZB3gt-x(%t#X|D1PuQ{~+tjRWy ztPZ*iQQc!$(ZvP#Y5^2MfNO=~*b2z)PSO{5<_OJlaA2Q@B_=)%*d!=UG5@M(;Aht; zF%*T08A5QZ#8m4P+3rk1d<1|rVh4uJm(YELV~L$Xr7>l{-34jMU@&aFos$alowS4q zG|)@&oOVXLAJ+cUK^8Mg>2usHUH&wGH%@0bSXl`3aH@P{Vx+(SV`n}*W5zz=#aw9| zxjYtXdK4J~E4Xxqi6v%2K8)U&=1n3wH66Ju39g!rR@GmaDuLE{S1Q&ZDIuugg8pJt zF9NtCC=j}`*yDR$9UmbgsQU0LxdobhDfTYMT99S$S;PiN;G3*J?b>F21cK&%an7c? z3!03*V@es&!39g<94CMA8k@HpOY}_al2@*Arw@#za{~5rqaMGM%|Pwf00{FNSHIDg z37|T`uo<KsA-<GVl<$6h5l~uyA4?_OqKY6eZN9k8Cd!dyuYbG7;j!tUI;4%l7i#%A zftLD%lrf$sehqhiU3S{A+@fk;VfgLne1-y4CQ9P-E5C8bpK0MDfB(vN@FhZiXE`a) zUI_0{;id!)Q$~u6-chaWG!fk~Jt|BUD);meT(yhn68_~x!V+=PRO2`%2RwY+HbDX! z4gLj#RgNn~QRJ>0s#H>7HEd!6?rOHFvXYEg8o#T4+C9;PhuLjC>#Lr%-<)XtM(qSh z&kSu^YmVuOFaze`P0O3Ac)Zj3Cz4!Ia_GSPY3Rf%EI$-lF?MU;1R<;`2kE_W!?_g3 zQBfrMLc@c2Ezt|o!O{6yed0p-9fAcD*W&}3#~Nj`N)?FxF1`lH`X@7yOOHau)4)Wm zN5tDnsiud{WTdV3eFsTLG<dQwoP<{opcx&*gG*VNopHzI|J}adQO4Ko5>PnKroLOv zrG$llG9K6Ad$ZN_m=^b(I9bLaEYNY6zuyBmS2VImcI}Y!YlPl6YenEcD*{M1Ei2)x zr;WJg-?X0H#Bb9mvZ&$9W<Y-N%YUQ2TYj#nvCEKQ@+{!yqTt<P6j%w~>|>-nRY0Ic zmU8WmkSAB?&s+$Q=m&UCwrt3fRTy29i;_XxI2-g0JW(p47;wmg#?{TB%>bi<gJ+MX zIX_qEtPyJ;(_hW6Ur1P^CrHkoTrgO+qN#CYiBU$?*i!s!M4<yGueI2spQDz0Ett(0 zvaqp7^|f3@7er1ewn3G$<db7c%vfT8A90HUdvGHp195d26Ci}Npr)W~dF2-#p4!~9 zYT+P<4QRGVh-Yn}ESa(8K*xSsSjh;!ipx7;*Tk?`WN&WxlLV>lH{=69I@iFzF-F4t zV06Q~lU&*Hev+UNRGK=_o|h(ok}*~yJ`7OVNLC?bF8KTF-(VsWX83Z0#YUWvZHkFw zXRIvRAfio$^a!#Y%vxFdBa)_#3;{R$8rsAZF0K!WTPi@fh?b35S^3X$vr%5Tj9P#d zGMzWibscqb7RMyX!#_adk>?Pf6HIZz!yny_RdJKx9+e2R7wqFN&Dkdv@&gLM?&@g| zExCW059OJP2r0b;4y_7mdRiSJdR|a^OC_d3WjFM0_HH)u4@`ecyj&KsLGQ_qx%gI- z2MA@uP-=3rKxTs3D^qr>$$@aP7`e@pj{P2mWQRt9_h%yj2%{Q5r%;dll~vGish6;q z;+3!?%?ajoY0d3pH_uC9bC{3Ef{Fw4n=p9Hb(3O8LD@HY3(nL*_sHNO#iI}7&;%@C zA-q+J)2q;8ri&5;G=ee7N#slx*<r?Dct`|4RU8Vpxb*Ip^bxp3lcQO5CP@B6m-UB6 zAzBC!di<N1Ei^AWUp~YKrpGz?E0atXL^~SJe@YFOPliXjlIyzM52SB+AhAq%>(2>6 z&sFiR(@)&Ae37}^M;&~-{Dju%T6Ad!Aj-|sB%}_S#zY>0s{nFi#=c#!+MF@eTQuL@ z2i1%A?3PUcAIb&zQay$?X%e9yq&TJ_O~x|3+E093sCkiZk2~0`O^HCd=Rp~R3pkL! ze*4NBwWl~ecAB5OMxJOG(aab$r-abcB7I_)w_puaiw>|yy<7vc5uo-}mZ2r&Cy#PT zg0bwMjw|fD{qXA^NvFG)M^}e_B0SSqkMj<xc<5I)`tB@s%#fb1ybFD?0fG_6TD1UC zl*xhdWys=(_@bFo;cyjqc4S0FK*cpY%YQGt!|)D>bLB2KT@meK^Rcl#rg~3ihL`+8 zevGJA(>8PB?vCWyyhU5_$rDS*MJGJAlC)oiU!p+f;9@sS5nGi_)(2KxGxz4}l^M=Z z{tf313`d;cx3aQ$ZBqoydRd1_I5BX9UH<02`-@qSw|JFIb(PgRrX9BZ;xR>&mgzi` ztP9EJ^F?k9iopYFU#av!Ouq^GB-~TX1QI~IkJ1i8a-`Wv6k`D8ycS%w3455H1Vv}* z+tl>jEB;_W#iDLY$VMv-@=>hkPoJ!@EmoXgZ|}KsBpu8C5>MEnid|<AnDZswr;;hg znqPX~mOEzMVf^<A9BWJxQX422;=Zuz!Iv>GF1JFLK<0|Cb&9~1#r7Q#M-_i0`>l2u zBa_dSR(_z&lBO|2L6~KGcKP-+c+MRzfy$q|R2Wh&qEQKiOfDPP3<F$ZB#8t7E>AXI zp>xFXRKh5BA8k-EO=Mse`ZKpw=vd+-8=T$Vb`Wvk1Ku9Yte>XAOIT%Kh}?+%&E^vq z8xCr*i=-oroA<;Y1-1OeoFY$L8T2kp!zzOFmG7nFD{qUTL%-#8k|~X~d{;x2FtOkg zPS|>S;w+FNLb)Pw<aFxgLs)jmMCz2nQwYg@n^}nQyhGq3(AuN7kWc(~_DqO?KSriu zbuP+8G%LykfK7!7E^!nN1=RDyvF$^IC-LrdR^z;LdbYee&O=K`1Okkg$hroli{&oD z_QYvF5))A3#tZ`%&rtO+;C!4iae0ndYrmmK)vNFG0dt!6{oB*UxDcM~EC+B-9hg}u zKToG!#>*zbcNdi5$!L|?)WO6RHIl(Wey&MGY3&JioqIC^mceFPlUVChq-**b2J?xU zMj;LV;$7@(u&FCXR-sf2caR`83zR}A!5!1QdF5<eZW2bCs#SHqYcQAOR88z=#v@L4 zj@K(RB(K8o&L1jH4zh!w=C+8iG|<f6vZ3w<Mq)rKO`p{so~sgt{3*w{{n1v;DWVb( zs!@Jm-~YHMcJY;@xOZHw;M`JdY={S)eMV@2g2$=m35K(u7a;zL0CpmCFiq}Wr{*q= z)H&ppk4EJ1_O?l6a`{A?P1%?77tTq~@PYX-Qj<pkNd5NX?J;v%8KkABi6RnF%*s>a z395Le8AFPq8$(EK^}4!vauNkiU=Mq^=^W7m<Adep0o@H3<qo(yRUNm~W4NINGCmQX zFBNP$loVA64YkYm9S(-r!{@8-FXF#nuw6e3$I^$QZNKEv=&)RQG6Y%b7ku}W0w<KV zF35c2zGn31w9ndy)33@0svqt!%++8R-~8vV@e9G2)YEZxUz7!-Z};t@s+{)d9klt1 zq7bpnK<R5Ph9sHGT)k@58ZRT#V*d<OzY8o``2Y;KOMKr-R(E(sw3A~`u+NBlPtwI1 z)hZjEI99OikqXbU(pU@rH=HOj3(NFnC6`vURU%C=CXUJnVP!cDUJ=}Tz|_22j*2$l z>qj81hI^3;dH~E@^4Dz}43P-6ZZU;0b(}IeSVk$uC7p3tT!WrGHkY%nUVab1e}4<3 zW7h3il(|fV^OYYV4^wNGO(=7<+9)lr9P&dxa*uh<FrWE%NA>fiEeiZ-Wm$bYNcPQ% zw6So+a>;41svbt%e3`ESRRYPMcdJj^_r8U8?riLDkl62<w8)jQCwyPeQvrmV)BY-l z`tyqbEI$6z35Gbg#LQ($g7arBsQyR4!*pjRvP^xuZ%B5nL+Sq|g#Sz6{zvn&aIpQ~ zJO|f*(C`0K2y^`hllT8D0#55l#gYDT=~<QH*AC+~Ti0dU!gx2riid{+1x}o}GbF`a z)a@=N_fm4R9%1R#+a<w5j)P;SsqFMLff^8%U>X}8ZS%G>{C*}R_dxm&6wkb_uID2N z5SB(zJG6iNFD`BJaar(rx_&w6w`CN}<jx|7e7yfMtop5jU;L!3xWD(GHelH1s`@VO zu1=IxdU<n-U(Xkv&*fX2E3=wJ=Kc#pQSYb)nlaSP+x3UL9)ZH;;r2s1#Y(0^^}vxy z^yAP^RR6!8N02o&NIB5+<KF8f@oXp9c2n~}5uFz||DT?($xu^UN39UkO+@2`MS3{` zPf^4%*!l5HmKDz4AQoNxyV2Jlea=CXlk1PS-#(u=`v*-)Qm3_VU77^?wQ&Tiqv{yY z3uX)QK3pqI<lSfduE$aHyJQ;*Oi+KMXJgWvn^&k6C1(3&PKgB0v6@GOEn67KDEh%( z4F66*3}TNX8u+|7ygC|to{=^23eYiNQQVxQ@riTlBG^tqnxp+(#*mBuv2RcCY#bR{ z$K0{t&^$Fg(NP=;0ZOz@PLGC$VV$?8iDu4-Sm8OAEA5MnjF9q05BOeWLTuxVVeTRx zmz9>-KiR*vXl@+PG{VYBjQ~iMcRnN`GU5JQe?UlZ{h=hH!rTjnYAC%cyTmajFE9bx zwLl;Wspm6dW0gKThWl~eM%lD?dswI*>M5HiB*)Cd7*LB=&bWK{wv+vQbEi*T3j?4_ zqs1oT50Vl>Fr3W?0e`rEr00Q>3;2x9QlAx5i|<LP5-Us;*R(Pvhy@Ydp{d$ET4P<? zqk0eUh+nB+eIb%YF2G7c<()h=2$<h~mORgqurxK}R-gb<N!WzQ<;Enabu#RKE0W0u zn5SxSjfJ#~5=iCXK}$}<_M8uCb7UBW!q`n(T#9C|7q+lI<}P~ipQs>kU>h0+!B&9^ zV0@ozvmaX%FC5m`^Vx1w#`TUC_N|=#Z4TY>f>Jwckj@-8tjJJRFo5VH>xc`a1wj}| z&**U8F-@AO0%Ayffx<nZM(;5<ZuABdJIH>g>RwvDJMU;yxB}2oX#7ruA5eWz0_*2N zjqR29UhJplz@Y>jT>P;I6)~Dc$HaUBXW<RpZ$zQ+*)5z#-ZJ+eD2`4zfyE@erk%^I z;rAI1<t-z!N7;K;e#z8^E@gVOunBVwem@XS3nOcb;ihLnM=63z5$zcZ+_2iCVSkr} zML41I@*&4LYbYoWSjm4%=$dr%s9$(WgkoA4))W(iVw~6cV|S+cugEC1a!sDWvi_!C z%btx#;S2F7kSN?eRTMqnLE+^Y*4tJ6zQ&pKd}N)S8JzATy`W6b9U{hjuf}yC%N#l( z)i|G`I91)Uv07bnn_X-A{FAQ9Zxd~s3jOi{EoZ~z#`zsPRl$7sKKi3a(EH7OD~7Y& zq|4WDYom@m=)GBydgb*SV+*Z%;lkexlZ<X&1c?PqWPyyLqB=_IWUqNl)F)>u%TXTu z=CpBY9kY9t6i3i{Ew@rWTd}*jzO~WZ{C9Tna{-&J-e|4=wYaI&L>JmO@Q96WGrBb5 z3MCfKVd~R6*P>YMsoy4M!sj=<S1-Qaf?_x{*a{kAB@gw6J3HNRF}iW`ufr$Qq(D}% zjzb$m>x|G}ncx0zhT=r_WmqAS?Kg^a9c*5fWCvKtgx#BKd|m8Jdd+JgPr4IQLF2>x z#>sbNyTyEGn3ZU^E#~KNdbLFz)TkuYrJnT+HqqGjEO?YGRzrS)s<Ht*;&MqZCce_r zF2%D3<F60!q+qJ!7VK7<ac$yslNL5heYjHxC=b$An=lx9_O_FSI>3>}1JDt)FN~&1 z4z>5P+9YkL`2nc(>1?GG#-Wr^j5jgAz|IdJ&P32E8sdNR>lSnr6sslm{}J${TyGzl z6*h^7B2b(6krgFpErf7W>SZEbla~3(;4N4g={W4O_9?!dG9mh{kR-{&tosbrg@&H+ zg!p74O*l@s^Dq^DW5s@;MHn-?{9CkM?{@44Nu)51$GsJGXu;sRvOErSl_wOu?OWQb zL>AVFsVK1$aD(wK3blDN_gFo{Jsc5(;Wfd#iWz*)Ilgz>^oV(X*1jx}s{M&;si?QI zhvxO5b=~;Lx<ZxHM}uGE#?x<op#7$EXN5dSr7wm+b(thN|3f%-0at7}ZL&k_fq}s5 z5gCJ{@|`<+0sf|S0FMIzZ~;DG4t8viEa45HIWHwf>!_;Et}<1pYAc%#Ww6S1rG}BO zy60E=W`_?lYifDNA#isNr54<46A55oz_Sycpn^gvse(u_W!#`Y^rW{ug2H7s$Q?MQ zhHw5s9jGpb6TTB+U28N&+hlew11k7F6k!&nu5I#Z^>gAZmFODS#nk~`RnJ<F)sxAu z#V^Iq2FmVWaJXtu%o~6R&9TPik**DzpO38(-bt3%0G9ZWn{dswC3E2Q-;0Epd`YRF zm%kSRdFCc|LbIvR(m~1njjY97GKY{dQdK52cT<EEy!C?bsxEQD6mf_jm)VX}a*{{= z%G^Au+kpdci*uuS@u4+T;$|O#Xh5%}$oc93zq_fE!*1N0)@t+WYPXjhE(VU!y;q%o z)83T)0d1`tV1DggSeiF}*qM5w?EYuRmt<TYr671Rc$TG4P6)GQ3sz>Z1&aC#(MbQv z8pkPln5slC-rdss`j)nuXvFnxCw|4E3V&npN4rFx#-j~{(RdxS9>XLA%HRAv@qQjP z{1GuGKKX`31PflLJ5r>{`Agt_9E)?PbOs(UglxU1bc53Q9sNtWTmf$I<e>1<FsP+9 zeSc)z?1DjA`${erQ)J9SLU<h)oUitswKa?$(qTv1but=_SCSD-uWzUx3T>KLa!_B- zl7Q7Ttwu_fa4ZqIUV#YrcR0Ehux4NYk$yuom;U@iyd#Rt*kRf9Jq)vFg~F)oUuWmy zQ1B@@w7x4%`KEg4B2@PfqGaYj1;Jta!6uFh!MVtT6Zp4wxIkT@h5d{EEJQ3Rra0n2 zFZ}0#q%UV8hKTJRrND-`L24&%Gk9OwfN0_L`lU;nYgV|?hrsIK(ssH7!sGq6w;%mG zWW{ufLn9%t{JQ4VV|ae2Fc&R_CJRBR)(Mu@-&1~h0<WAM_8J&ace)4!{xD(bdYQ*~ z2{44IJIQtE3y;M!q)bLt^q|bDldmCXrXgK5<`}dlpnj1@RQ^<T4GdCZe0gNI0?<Xk zpISg(sqwfc#!#fdyn=kO0q{Sn9Kp<7-7l2lc0p3aES^Co!-P9H2O6>CJ4Z2q2+tUI z31D-4<RFC@Ihngjr6cmqC<CY&<-^A-B`Vi^|4~A8@vQ`olLC=DSs<R#-T3cIix?T? zRxkvi<nP!8QssQw!$+`4Aas`-u*F{n?M9-k2Nnt?&KtG)*fLlQfl~d*W)6ZHPRa5@ zKKqr>neq|R{-v^TWfoPpPJV!g0x8E}nUUkEReBa{oL@M*e7Xm)CC0ry9baj7u|H0D zzf>g4aA^-{0{ff%Q|)WH%=>QQ0s5HLDWk0wT%;ElRZ8Sxy?J7Ri5#k6njyf!7X?T1 zdQi<B^ULIpAl(y7!@+IGEsaH*;_u7k<KkWRF1Nx($Jm+W^-+)KmS16BgZ%{O;ed5_ z;oq<#rGy@B))yty9MqLnmC^j%llIv92&qTKU8ShuifWpwz3!?X^qQ1(RBa7?t>k@~ zud|0t{Ke3Jq)<XmnKbB2Q`jz8k9f#=i&#fqs}a<scGT9Cr4BwxqRR?q1`WT{Ca=n^ zOGrL(G&?3~5;U`5JvUp)FMb71r)4YMew;h!TJU`({#c7nSImr-rhpw6O;jpHFUFH_ z;aJJ6+HD<&fL!fcCLKVs9-+e-DAh(p>FbkJ*UzUn+94Ou2tnO3A5g;LFk1vK_tPb8 za#*iL<>P%T8980NnJ;j?{UaM~(^mwj%f98APZ)-ptNpGV+<NUcne~R7eLJ0!3oPY& zM@TmgP`J>-#@Lcyw5(H-7Ry6{=7H&70*2z0J5MGBX96%=F4gq2)k~HvG%iHKLdLoD ztr`aS%PdO{ytU~x<{iO=gJM@&$ynMkR$NYMO;RnEMNj-DEIpSKATbMXy@)tUeY43V z*0Pe8QC@>Bc?{5dDbbgo>(u;>>WG|7K8EEBK9+By21AkJn-9RGrmI7n^M2sOtD*s} z`N)Lf2ysbq(AQvP)(oQ6O?@j*Z7t>FLq(Dr2-o2~O~Iyn^FFlj$D(6@;|nYDp7OYr z?fQ`BnbT{P!+6?|^!OCx?gaEu#l!jsUG7n~c=ulyi?#TQR@WD2zZd+Vs=;tdRjY8d z=UfP?Nb9;ic9*PDXOPA|VrNJj75Ip)wk^kl=}4-tuzymMO5p-9vc4+0&w15#wcojh z03;Ls?oU_gwH^L?O)IK1bxO)6@&w7MP7gTq^lOp+kryva$<dN%GU*1$7GpjQVDP1S z9d?gJnpphyN-XlM{Yt`RC^JHBeT=erOzjRrr2X>mx}JAt6~A;NB`w513l@5inMfl8 zxW$|g$)(gx3B9vCpALI`*gvJc9veV}A_MZhX_agW%bc}@Rm($HrQMVJcH`m|lq98& z4X25rH+Z1Odd><Q$*4+*we^`7>V=e1yx;{bVloM5T&}LBeht)Km@TNmrOoTBA*#XF z2njYPnPY_E<A9BgN1=f=1G7+;y)-Fb_ua(g{;4`3FE@i5)Xl8advO#%nI}Ff8tKqj zzQo=}sCBjx)+s|ZcMWYPWt>nyn1vtGwH3s$Qio^Z2(q?nQp4!zXYlv2XjFb-`4yBY zN4%u6dJn!YXkoXdl_SxxF#Gs4a6xo_`WV*LyX;R(*rVu5<RBu#YcMiqgD|;Xgj6c0 zy8r?hQj+ouuH!6n{8cpUu9VAD5}#V@7s8pvSYpN>3NgHTkQ(D89pX9<P-k%m!LT-Y z#;#G~2^vXEOS$ZnOyjNyKuVe8Q)Y|uv94TTMPyWUj8*}7<@-~y87u8!EA<DlLuL}z z`>2ReP-YQXi}IhDd#MX3cWSZn6nSxj)r?;I<)Lnu*}Bw=55v~De_4i}Q=zb-Sw?6M zt+R3G0`n<H#=D-bLRpav+OU*nS2v}29?id3DyX3`(Bx18I~10;UfBfkPYI}!iDNhL z)vae+U%Pfhhy%<-P0EJ_Hy}{{^^PyDENQ%x!enrIlhg9g!K>w<b64k%l!MG`s0Q8_ z8Xl9pYsE*cM#^|B1Y$VZQR^&nO%|!-^^kYt-f!{k{gsEYRk>ieO~0U$8RZ>HOQ?;n z^u`Et##+0oHDH~SEX!gbl|W-zenw3Xb?B?+XxWqhGO-$?>bA;*is;zPyLalJtF@Yq zy(Bbn^JP(Rh{W?=cv7G_sboi`Q41_VMT-1uUG*mCOJ88wu$_WeA!^|oAwgJW>WCD& z>d!hXk|^*#9sXswg^?}D_P|srLcem@5U%7ce|uFNERf@(W&n()<_PbMRDQ$!4S%X* zq=1dC2<%U=c!X9E8Pe|P&LPGln0Lay_XT6owv>OJQuPsXov}NI+&qK$b+k(mPIqHV zs~EbSm&~ZmU)DD~6oDPkdVap1NM7@5dxrFe;I*||yoTTR^^R}EzPvP8&mK5EI;V4Q z5obvA4qCh|1<eemhhEo|)s4#BP${zQC9EnT_!><79>^G+kR7fhTobr6Ro=X;Kv`;c zcYPSaM&4$d6yn3%FtZf4lJ)>L($)V6RYY15$;{Sv|CaB^!m#{jWfw}CPhumu60Kqp zoueZ!A5NzjO72IAL4a7=szD~TkM=U=F{66w`u$<=gx_Ity9Bu{^TG<>K}=%xVncZO z1mDCVD<%q4^C`isS=eM6tmhjpQ+;CBdDI4ums3=Ig)HyRyWR@gLAD254DVvUAiN}> zC+Sg5O<{!BsuNZTP4?WkzHfZR_x-o|p-N+S&*WdH)^4vvB3A}BSv+Qk7~QrCLkV?L z87qx3F1FukD>lf%F1E=y5HAmt3J%8vKGKpii_>A1*vXv)CC_q%0P_<^r=+CV-(A2; zOcy?l#(Pm+h$6;*g_$woNf5xV>-CaCpBu0Pb-(Xvj6X*W-Y{P_VO~F7r|w>d>eG&? z-#<w#roSle(sjEC3lf>6^%qoEV0iTJ8BEZ$0vXL(dv`95QCI^W=;@pp#+-^Is$1E& zIfK~<S-8KYVw5(_iq~?o_?q?|aubuk1NVuHRN8JWk{s%oIoOJ43xAFFwy@SEN2OTr zO_uI{Gs+apJlptB{xzA|C3iqi0GTrR8DbBR>`gpud@mqZnpk%nK0vpb5Rd~U#Jp@< z2~OUqOYD9>b=<Hr+J&z7$-TKi-P4N>7lTXnoy-4BUo^*jQ6T`{spKZ8MBjV#Amv@M z2NJzanZ-bCP`@4hf*_IPXc|AlFK3N$u0fTX?i8BIfX-dsJOUChTd9}*f>@<BKcvyn zi*ktsTX?RWOFmbt*8A2mpL|VmbHwSuXIDFEY#Pw?>y@O($h~!MGF85rqn0Os)t+Z| zpmY1}c>ARfWGUjBa|1iPPZc}Y_xH2n=><iN9DA8lF5xIJR0j&u4T<r>*RToEm&Y(k zl+1CN^477SGUG$S+Z$-Xf7$s!82RHq0iu`yyBzWSB*w8MVYdcOySDA~`{H&pCTi+` zxqtuV>ix&)V`F4y`|lVG*Z;<VF){vsaloekvl8RqGRWH;oc;7HFI-ur+b~=Ieh3on zzEEfo)Yz2f4P9$jbqlb@w?94a`kYO<nqTS2HlI*<OO-XXAJjCx3@lZi&tIV|4f}5t zKVL^LS6>VzTRM0%tcPZgAJKNcZsfs_vL7+1+y<A|8Llgh`PP%)S2SnGT*^43AqFEN zWebGO#=;}~|IlL9<T+Nb=ffQ8=DT?jP`{IYJRLjV?{NF5!0Bl32-#0(XHcvf5<v9S zIBN|78`JOC>urO>u8@zg#?iPhPXrA2ni{7qIJRxs4rN^luAF^MCkr(1+wbP)1bKNr z4&?9y7eHy~AaCY@E!ppcUiEcQrCDGT4}I765d!hl7BY$+h!(hFs#+^WFqu@QX-de1 zLx43gs{XFKLDYqyjjX3!f?|4EOA^gH6T=qM=YeEoS?yhhD_0u4AhM|aFsLOS4bwKA z4*$-Y<|*r%4t%G#pp+@B$lm7a5kzH1n<eN^?lHwVth?+$f){a&Pk=KYLcJ5p7^M6Q zF5XNZ{s!aL)vIM%b3GB9!seSxhM?axkg2wr4bfzEV?XL}#P1_?Vw@G8an2O@8N8-Z zc(bGI{$TVen5G6H#`DJhTpKqKh@}}sj&@?Z_Eb-IZ^Y~9FeF+H=ncBlzG)LahJL$3 zZCH&Y;LUgmX6Zvy^rqHya`!UzraqZ93wZQvwW4sR$QRxOI*?+Rbt^(OrhF;HAtXZ2 z)Cbgg;`GYsn&INUpI;c0Blj#LREZ1ztm~TaL)fMEr&LH%{&!r2nmADLl?2uS7T`7` zGawOKeVdQLv+$C}?x27-xNgo4z@d|6fw!x)tEK<*N*+od89xm=QjU`>8t|umC(E9Z zkQiQ7SIh)Be*d3yPB<ccPxmaDiTz8u0R*8cst}rQ@ry-RP9eh%AddkVnh>0L>5FAS zm=G!?8UOOOV*5cAscv-TlDk9)vkYZQod8xq9Rz?<HsB0ZSet6gUj<MH4xr)%B?V~U z7TJR@NN)S9!0@CO!H$=N0M@{UgGqk5_7U0Vq5WdN_pui^jz#4hF$M;!%|525V4t}A zqoJ+DevupM5m^3<@;I1Bd<mi$;KqgoD_&1R=!ie2oz%Kt#i|#j;4mwTxli(W_5k7% z-G`=9^kk(N()TNwzrib|7GARCNsBP0k42C;V44X;oiJtrUXrXn;B9AgZ%Y^&&J?sM zxo-rLTpd}XD6}tBq`NLfO2#vsi*4zL-`RoVQB8_PM<~K@Uuh0O8Ad%jW~nS7H=hyQ z>V(fpdLN=V(UUD+*bqi^YP99%9Ww-{NBW}W&1y?`03&w36~t0h559QL)pFF#=}mY6 zq8P=4E?#;Qi!h<}8`Fj+Ui=86ctH)PKfADbnl8DO(U-uDjZh224b7b?bzp+=dYbfM zWDwN2UCGz|(;aargaEUSo8J%o3(sj|TFks;YyM1Ubz#iclZm2S4&!kp#U2ze-h(Y! zzz!~a)<|7q`$oOKdQdf=aqw8y6h<{oQ!f6woDVZiMTwpB%#_JNnDS;FpprQY6v4VW zYM~dvdhqYkiL@j+Pv$AQw9`Io(A8e*9sZA2zhec~RV!Fq2K03DVa9$3iH#fK3o+go zc#+BV_3_=mUZY{CmrPhG8aoz)Ob}8f&d2TBRq=kmf=eNG5alS9HEt60{N`bDk*bmf zXQqAi5VERKu*lTm*{{QNX;ybRj+K59i4)$ZyV#LWZjOYo6ekHfMFG1g>PMW|QiMx; zQYywKPI(!jVWFXdy>e;7Y+UfqE#VY@&^A(4kbQr)ss(2tBLkG1bgB*Ztl+r7mmy(n z7)MCsT!9eeZ|vD|!h(hhJApr8zok5txEHN@CK+0lS5`w%@i<!^$W{i;?3e3wXc@08 z;O7|G<TN5Gj-Y>`PNNQZ<MLMm!RsvsyWCl23hq~cCrvXqo(T?%HXD(ZCXy-2QXry6 zBCz7h(X8y3OAWxqE{>j|LC!}87Eyz$M^Z_p5Vci1`BJuV#Q$M|m5sI#SU>2-3+pgx z|3i#kjFJ09{>iL+<Y>*)>s`NX313nOJ2<*FRfBrRF6!hx(udDz>7Q>M$gvI1fah~A z&$BBhU4>z%|9YOw48}CV<3=Et)~4T63$9$K!wg<mL`78AposcsTE0Kl5+^ZTXoXgg z9&2?_q8-RI+Y$ScFu1G$&><rZ+>+$phLp#Z4rSPe;XBrSpnw$dBy^um5F;L<GM{D` z<YXnE=P(!p5}%is^K<fVbxuuM{8XhzyXBhLs40`jN9#T~8!Q{%HS0D8(pMvcJKXZK zd!%xIuPCN&ssz~1OSc~yM)Ga?c^U}EqGn7a$2BLn?YVMb&J3$#`k3aaI03~H{*qgH zk|J##`bYF9J&055rEeZQ!6%Bp7l;pYelQrR^LE|%r|C>SQFLNVm%<PWOd4=1EPkn9 zZaff(r-#6tj87mV!|r%`dr@5hj0J`?Z?A_CM8PiNFE=qRZ>bHh!s`ipo`UoMBdQqg zhx86o!D>NU`&x5K1M!0tpB-3+?rYE4D_!TstiK`q_gRoJ0u|bf4wqk9l17HCq;wol z$5p}bd|s@+fnDuB9AQh~W`7ynDd-uapPulu$eQHM8$$b9X;;P{gfr^Tn%gYJ_I^dd z2&4H~rgK<gf&w@f`TV+2)UjDfYd9vqG5FMtmR^>fZo^OY5_aG)55OWVmE@_Y1QK^o z`U`ghS!BOl^Iib?r6gZLrUNPq|Bm&G`>X9fBxN!11HN7CJh3bA%{OtQ9?VOI26h=> z$}#|AXh(xPx&)zL(m}TVOx+r(M>eg!@3O~cX;eeszRVEA^<E4y&gjj6hObGuath?e z_-=^vz+b?i_RE!?(`p!uN|GB#X=kpQa%K_~Q)BXs(;-BjAjRa2I6_hsBj<sKn+8qt zV|;~`P8ud>k(drc;9?>i7(+oAR*?{BEnyBnNemvk3|Th~bA;98-xC-f)2^^ZiO4l{ zzjDkf-4~A&W0|%EoQ+Ts4M)bvyC6sQw32$MkTWb&PDIsmjY`+}q$wuvn2~2w@F-GG zLn#B^NCNPKc*cuPf_Mo1>3?#Q0~4`e$ss+QxEX<kZoF|&S?dqjQszZkds=g3u89iz zXaj?Adu#3RiN_0JTBDObrd;Z*u@Q-q&${vv_mot+E`6MuU2#La5?7+lDq5xZK;T}p zlSvQzVg{iXwQsT5ambe(kH{x8ApQj#IV~GA4)x?u%ET^3;rZT5RDP(~!0POKN}Xho zLr0{oic2bKTX<#+4@l0{Oz(r><gH;4CVUV<0Das02q0kfPB%7|c0mLKq10D#^IQFb z`5oa3{eP47OGYL)IJJeOB+G2@Xz(1UGI|{G6s|H>1VhaRnMW7d?-w`T9+rlL&Uo+d zc3wX1P^+$znWlvQp+~K&Q46j&4}HA67x424B%*yW2F&(Z?Tx5OMEST$mD|3;X~yH! zukTg8y7*zBf;BZgmV#3?Jt^NGWhJ7Ye!tu^c2=tYD9;J76Jj)J`?0(%8~?4527dF4 zb3VvGTHexjKbc(T>vF%Wpj*Bo@$gbw=6X+hyZ)nVIg+KxzdiMEZYEFt+LF-qv>5Hn zZj;p%Jgw&6MdCSeW&l5XL;AF}kEKUd)Dt}~f-`8E9cH{z6>p5WQ9SRVF3n?`dVqpR zVflElk8_<oHc^nTa0ZTnGYazkAROI;puCp2>K%n@iO>y+jHt*47P8-YJ>v=LbsQ?8 z9lnB4L|Upjz=#Ux3kVQOJhbcAX<jv2DQZb#_5vZzn+dkK;T^|2f7o$7{bTs1jn~w) z2VJa23^gC)O;D!|THLuS0txzp;6XbJwszmd8EhKM!!2qFZta62!J-B$(Qs`}AQk2} zRI*}Rfb<YX#F!q!H?@hBFAqaa<XBH*6*wRy#?3n<j$94B9?a})ER-9zd)&9^5;)mk z73vpjF8LyZV+2AT<xzm{nZ$K7iR%nW-vKU#FrJ;R8@w>c!Bmid@OWGaI#g~+ABE!< zH<uHjNhI~^&P9G9Nv>cOI2|@F=m@^Nu*jP1X!YjA44Uj;I}OB-!X|Oy=v^!~$3KXc zzE%9G1PNQ=NR3QK8YFD%Y9MtPNaG22*A<5Q+Vg%xl;y9TlSLw&uJ=Z%O+^H+W8IOb zk8JH5dqYV_Nwh;ew9GwayqWu*!0RXG`n<^57BbB~_}5gyf+XiefwMJ~m&E`$0)J0p z(2xw4=9iZ9iia?Js{3>2k=(|y(ah$!*HV#v!w#lZ;5qv!R_%ngK)m=u+xI7POl2RW zUVN>LbC&s)O)!1CvstBZ(x3A+JA2RaP1<j1jR$XV)i|nL1$Zw>kx_*<5?_oi$8q|- zj^X|0>m6c#S;%$*c%)%r#kixls3@YH%b8~K`7q~Di|<<hIMKU_QZ^lqSHI;@&t)zB z=26I+!M`;ry!=J3)itEtTdfGiXq49X-{iSpD{3nr{8R`+8Xnpk)S8t|D>q>e^#q#G zo3&YXr(v5tUgP>B{isbFicXcUcPvEkDSxm`Jo3^Y8_io{R0*O#g7dI=;>>H~tAX1V z%Sp*6*VAPO8K9DfcHf+RSd`eM^)LJ!3g#fUqT<8m_W5{)0xzbM1rI`;U4+9~dxt-j zg{IQ6(qqvLb=<NCfq<8R=V$>U>9)blEcX5vTG`k_m;0~5l|^%E&g9Q2?v!9cV}dQ6 z#awQdQXpofhiZ9|_6xcgs&^oeLpO-+aJH;U!=TH#nsn2KC|Z73C>hPpx{1U!n*$O= zd>4uA_i5RUG7GX)68dCkFk?U_G`-dBb(y;8OO=9P29piE*h?xwDH`}`hF^Cs&7dYd z%%jQ07Jo~F{;o(b-4|9EH!_%XV@Gda?#dsKWfP3!#S96=KQ-^77OFdVQ;1O*!_MEu z!i8g)6Sl+Lil+g@IusPbbEL3^yPuDT7>efawSm`Q&M`E7IV0N~#ki*7R;PXPO4vW0 zABsN9uZ>8_H*`SXemN$ui${W*NX6$E79{nwDDqO)9h9MGz*8kT)F+aelgbqGojq9m zqhz&?fSBvI(Z<3FPrJnA+#igBVxX?}U7uI11uv=`12W5lSV*+@5?R}R_51o_nG^`( z7rFDEC}b2k7%)h8qBO9^Xp9`X==Xp2qt7OkoTf7ta$9wIbM4ZrMiOENLhwAHr1fT& zu!$NS1v(dlKIa4yn#bUi9o8~MwXN=2*3`CqtYDMWg_M9}lZ-=kwS+2x2p%#Ff`(%H zrqn0hRhbRisaFT42Wb379i}dSE7uZZSc+#l)%wNVyblJE?A^D(W$sF{Mv-wTLh=ag zn;SPVx0H|wI<hX5LorV)k1+WmR-~y_PA9hQUMms&2CKRq$0lK6Uz(Y7;G7K)vS{uS z*~3aaQZ4NAf4F-OxE#MWa2#1hL{mvS4SIU^)1<Av(;|(hp}k8(h?Yb{D3yv7mG&e} zL@8}eqSB6r3jNRhJdFo=U+?$*{ol{;^ZWF<yT>{AIoEZaYn|&{=YHD8=#|M*{6(8- z*{&sVAC>MuS%6F*-?<rnR8L%>fdl3DgR(fBwj3KH9`?XBo4Vy$YGQ-}UZh|9)yO?q zz+l|~r+%XOh7d9uczo5($)#yloj7UD;xfngy6P7`P3B)2>bM{*x2xb%M*@4E1pY*5 z!PJp2enP3Il=@{k8TN!(ec;)s=UkmUs-H5rFYD%LZ;T~VXoe^2Vp#NfH95scQoJ`V z>OO36;-u(-wKng#hAFl$p0JyMAM!d>*>%2kp3|l-t!RT(N!mczNju8$3O@nf?LFJ? z&EL4<8xAW7Z|J9Fjbr=bJs%U3`Qi(Hc&}g9d6e^K(KECqiVX#-1~x^VS42djFPwj* zd-yS@RC0Yqnv;;o?Jeo4Vjnc~4eBdm7IWRcKAUWmoU^cf`qDf%x-q<B`&)+Iy$2Ex zx6}LD`QMLcR=6YUmxzv~=PkY0_Sx3h`wF$lpmN#MHp<sqK2iFicCej%MR%0ff$PYS z)Td`w=L{z~?TToWYAzroG<O)j*Y|tbu_4vEhpwGn!nP;0M6(BRpqc{&<Ud*MrV$G> z+I!08%U+7AJ`s+_$7Qx|2gX<}*($r1*f8|1sBMXMGTqo~5|NqV8m6Ua73-U-E}TEY zBZkw?R9~$@xqP5$IbYa7_8}k@8*Tp8mE(J3zu!V7j@p;}V!)aGJGQpRS_uhWaSo%; zF_GS+)@wKWRquwsBZ~LhMANlP4#gKa(|YvyrpU~N=PG#L;(9d%Lt2F1g-3WRz8)|r z()sW;o-WJ#y@{4P_X72~&*zhmMl7JvDGVXTa5+sG=P4_}(7w;dUFc#zt1DeiZu^o- zmA7HvsdwLI*bTbMT3CHdn6dkBo^Wh_c<In%*rK34UG3qx<eF(px=fVMlwig+bGsdJ zZWd^l!IX1{wo^Sib9Hv#EN1I&oI`*Zx8q*bF6PRoV&2mDQ`al`PF|Y786l*7=zVRa z(N+_S69xszGZF^rhnbHtvnh0nM3h&%DHH|Pykq|Cm}n8R_u#<`{?{Mw;VjL|7T{$v zG8mt1V!2E!@`BBPy13b>sDZWY)aUAsvJI%$Y53nFZ^Vci6naD9gb*vCH<Ar#TAmJg zn3}N#9;S>pvoe;n_h2=Ef^cXdG%F5;I6(o^uy-+b!Ltg2T26R77goZr)`G`)XM0yC zQ@k_y7?YZly{RVN#Q>%zEz1hi!h5)Y_hdX=<TMGdBB4m11_eyk9=whsg!m}L#VKGC zc6RnI&IU*<p%{sSPA6bepcd%InH8~G6QD&vfh1q>e*rfdLjpIN2qgsfDujd|_0@oI zS%we|;jo<1_`iS<OC%AIvRH^b1ZY+$iy=P25Rxh>FvO9=5V67#@xc(NPJtl|5ee}L zKhi*o8kXb-jQ<y?;fSykQNs~2AYmFTVaFr|mVgWi+=Oq0k;085`Dobx1a2Zhm*FOI z{!dIp*#1chp%65P|3jt`B4ul#HMU+BM<F7c2ob)lMgi2o&r(T9+WiUq|1r<Q1xewD z3;u=xT#$eP2~!Z38c1PY;|ZXyfCgkGs6b~{n4*=LGphjw5qA`k1qni}K|v4z4GIE3 zX;2Ub4V;LheS#Gz1y`Wmuq4U=0+TqbE2TJAn5>nPGpGg;l@+FB46fk>9${TmB2cd+ z>;PUib}_cGw^#v^I6g2{R~H*AJG?XNGC8F2&Om7r#R8`4fVYz{b+NLyV>KWk1N97P zWk}U4+neEG+Rpfu7AS!3cQG~ty|BWOtCF^?(jZV*u+Xw{vBC4m+qpQ|o4FEN=cRx_ z{lc8_gj)eP)C0jxEJLLNi~%c=NNX6baSR|op-m0E4KOlhtnT(s*1xui__a+nC%hYx zgcLAB`>Rs63^R29Gt8PU_D-OAD?4+0CtG8PF2DAIT(=h@<iuX!zuF_hgP;46v#~cZ zwqZ4PGPSgF0W@)S!vES4YTb^AC@gnG<hwO`!Pj)}3c=)@@PJ@|eN63bZNVrzIN{B$ zJfJ%VS73BW5p*?K867mq_`rYbWR34uIst~x)CmuaKY=&EuiS${2N<!sI^)fRS=EeP zoUBZ(j9J0yH!RVRnS><bFdX7rQkEbL-!d_m5ng6#qHqwfU6qbs`4PV6ysUsJ;p$=! z4XP=tv5k$r>7TI2kYc~wBY}P3M4=&}H}v4=ftB{OGq(NrJ*@F6e7OfAwnT-pj4e?# zNV+4{6e}`j<zi)QV|C`w$gDB!&s{BR03v3q%5hmT;OmMr-pR?{;?F&;aqQ1M{e}mG z^3P;bwzsnaqGx4i!D{YmN6-<@zX}9ql~qvdvkH+@mx;G5k;|;ItlNl+^fzRG*E2F6 z4tOUkTi{;;DRsg-yV|(?1`l>!0bN0zNY`IA4q{D02?hnW>itr{RMnJO;o{=UBS7$W zi9{mSB$!=50?6+Mm;xPr3?@$jleBj-!#fe3aX93L18u@;fJCANu)sni;Wz;y01^^~ z6hHuhK_ajMLKvtXK^>a{<s%>=rKv;#({wd)fqZ-=D?95oAl4}JPk_J)3ZQ@$MhL+L za6lfBIII8;0kSIu1qE;zXwI+(gshXXt?^;0Kf$r4sbLxj1O<VN8f%h4m@F(4O9P3f zKoXc6rh!CKAPMpXF5whN0)v1CgeVY%fdQ9T3Iu^2z$Kajzy|CsxI|JQ2(PX6K=AQb zdRPYng4@4Rjz&?S2^<I0KqDy71l0sC1wmc|u>%wi%(Ip+F%&3*fWS0RC<@f_YySp^ zHMj__`}%AGVf$~`1dc`s2m<!N;DiJ)f@oGaT1Wr|P{#=21TZMn$_SZTSpan|U~23D z84O50uFEZi`NKbk1%ZJJpaA|DEJi>O4QEAQaDYo7*w6xkLP9IBtlFqQ0kNiBer4Ie zA_z(V2mC?|3dju@I5-9Y<ObZMalZlp)Y1A>SkuzK0`ND2D+m_=6Eq|eD*$8{h>DN^ zB(^Aw01|^)0f8X4D`xdDWLBO31k9Qq{}q_Opawx(0Qo>*gapuFCIx8~02wO+3)lmJ zTmk17_5ikReZu@%nfwJTC^%XG4JOhEa7JRWtSAJ6FhU3f3a~8t53m5^w>~T+3WYG+ zThp$80Sg?15fB2b3di9D04-SISd;(~NIYB!j2dEfn0}!PFpulPLYSPdsE&113t_&# zQjS4UU{+MiztuATooXRWo&T{oqtI{xpk*;&co5)>LgNImg5Vwr3=tOlhvE7Y>ky{z z{{<*$Ak;WkG!SYWnB$=^00zL;Xf!Z}sQ(leLcn2VIMx|1LJVT1{158?p9~C411m&< zUA9|TECrAOV64_G0ggnx*0Yf~5|-Ea_ZI3u01=0wz%84wb>Jez3DzIGztM-l5+Q++ zLm_~uq0k^K2pk(A5h$P_5kjjf=-)Xqgeb*72Lgu@fP)AJ5+f)8QWIH`z@dT6B@)t$ ztEy*3D_crA8N1uyo&F&1gh<Kyp!|*M!C?e&z%U`;z*+)>3l{?N1?Yi50MJ(bx?ePp z(4RmdF;(la3?b;V%F6%0s2iBZD)+3hGBGl<4vp6Jc$YomHRl(O1gZykF-V}E;eay{ z7_0yWvZ6v5FnrK>Nq}IqCQMrc_|M=UkEM%?gD?zcPVhlZ1;FGOW^C$gBVg%bYr_k` zT3>Gy157LASw|BPV@@j-NK^spKM*dsAc_JUL}!u2iG>To!E=aXfWx|~8P;e>uoBCC zOBy@lp`bcUUP4PrU5Z~*R#G00LJ1OrkH7~vb+U2*voGM~5Sk+xM5sOp#Y15zDNAD~ zR-7Oq3`Mwx!!fYqR%R}i&IS}%Ae4|-`^P^Dut-4onFcfg3*vvMHsnc=yannBvV!m5 zK_wVykYwyk?ajc95OifHVdreMdcR^tAvnQ=X*H-05$RWq^<*?u^^XCJwdCP~Lg-&H zM*jnhF@)GL3FM?$K-Un)Al!%oa|Y;GxhB4WBv1i*jv&kt2z9~40HOs7czn==35kUK z_EmiU7Jrht<?4v5smW?<D)LJyD+Bz0!=5-dT6etBIFj*3AXdg3_<oT8w>okFS1g#- zU<tv`HJYFZYdM0zc^70A0uB!3Q$uut{xHCwMiZjj&>ao|*)5Vkh<e}|3UV4ilo1V< zcTj*a!MYUS4nR$CAPLhXs00B5t2p3+VL(PW3I{Y4A*Ks_5AY7~o`K;&gLo_`0X?80 zvjO6<pfwWevci`qfPdgBV(~It5h%4fE)bDdZ+;ylX)AMcJP2ojl`jMEv(_*uo?veV zgTipeCrFqU!u(gJRaMZ_J*Eo=O=F!gBZ~aGV+JG|if|BQ6a!x!GN1<`T?jhD{xonT zL|+{M;?RP6BqaJ<0VGUmf5k;zTU|#_2U0n@>j@x==+LZ-4iMK>binnp#$m<bpt;x| z3IB(2Buuh@1x{B%S6xX75L!#?cS@rO4i<6R^s6>RtuGy5u8#&B`!6-(vJ|XGe8RK8 zC|~L2U!5T-T7hNxiU8f(bLc7YjtC35|0i@^PwUDnD(Oo@46LcQ4qg9+&PA?`I2^pW zGURB&h7Tf`Bs@&y+P@&!ABhdMu<rX9!t&?xd+XL9Y4g7-2e^@t9jGHnP&HOv4oEUc zj2yA}zf?y^7|;?xA30ltaJVG}4rXfQWNL$VuyJ*UR25i5vNAQc0gLVw&>)x?n_4^D z7&}{%s4YT(?N@11(3jEFl?I|NCAFTYBZ+f_bwwRTBI<DXnye!Ut7+>G(a!@wurNTu zL7iZM-M|7%fFrETk<|OcV3X7ULx~|I6rc%9b|fXBT{KvO!xCHuB19N4p#_sklHvPX zRY{0S{z|`Nx{`7d3V?nZ%IngP=mf4yKj4t9s!BLwm3|=l3EW=7THVi>09=4&Mx!AI z00#v_e`8?~tc3!$z+ysb5CK_T&<=D4Pbi?Le{(?fp#w5KP+uslAegu!S&3dF7Wg|@ zkU;=KejwroXbWHh-X9^S02&84s}NXzg6e{ID4<%zu|<Ok5aC^d?+F(K6<6F)VrQ#e z0<<77p%+jfc(ihcoUoPWP+jOAQisqr<d6{R0W_gA^qfEpusaPpuRMbQfXbi)Y8z^g z&>IOm0BI)Lw?7yqV)1_|&0y>uUG2fDsELgY-rQyN#>vXU(glRKVdmyAb1Mp@Ah@t1 zkzwMj;#VeA)=*NE)*v{{f;hq7Tt+yU_Co4uT`okCav@x3Red7~90tNKPzVOR{>MKs zTv$Td0hW+&f(5P_c3JhKzyuCWNKFAAB_Zk!IEmo80Zsw3PJCmXmO-1uUQr+j09`?6 z2%?pH0(1Z-1o#R!(U%1NDTvTRZJ{8>0lqAf5Z?#T!T*u8Lq6NDgw|8lQC2!mbd1)S zixGtOPjnU{m39&{2|RK1zc_$w5r%J>N(2lcibIM8OITCE5vGkG$O4`~e}G3Iu_dYp z99R{^5Y~g28(6Nid<PL4bPm;koOS37*=;1y`zz0h-9xGex)Oo|v4?7bl@VgQDBz`` zkU%zp3=*F}z=8TCGWEAAmLPe*5?w`ES5X-<QILxLox70`Dt{t6f|TfM-u0Sq0)>Kq zSENvrgpw6%t&p8S@IO(K^f^#)zex>5>{X`-S~h_QN_;}>44Oj$-3|;58dxk)0+bmv zsz^wUK@tFli1>s!@}T}dATlum@hg?}CG`}P6bV#bUxyG^#Madz2>2SA5lG~!4nY%E z@7BnICS=xt`(<*jlpsKS4FzVH&;dPz?xEN`bOvouK<)g^0o7k=6Y2xfOIXP6fP^?4 zU|NW37(#3lDnWvDA2hH=(DEh*XelAc#)0QJ1O{j+2wg0Q8$&Qd?-N@CHXhOoM1@D} zZn;xva3L_E$trMwR?bMs+AKdO)<gqE2wma8cN3vnpp=4eh9ah5#T5k{7Kjil&!Ens zcc24mnH0g*>$RtASHBSXx4QpVltZ*3g$!Uw!qOmT2`c=vXH6(xW@Q3vu1+!kexeV! z7p&g{Uzq}dBN$yFqB$nmViMa+FkHWijl8O^uDm4CBCMmF2m<{F<%Idke_oBwvEm2` zo1{ef>H05*4GsBczyhKH&;Ru9+8v=46tJEsAZIATg32oCehrKK!4U$S{kw%!lGRg@ zS0XBF#P7-)@vr6+C{iu5=7}Iym>$Y=CdQPO&qUmyr@vtN3yoI%3@Fls1!4qrEO7j= zz-R#@wmfM>6XH|9v_otcv_|X$MVLY@|A%xjc!vlb8kkw=3J1(1^c2)5z<>lA1PQ{~ z&>4CT)%&fFU!eVet(>^J`k!(aVRh<PX*;f{FQF_?G*TdZ_-kwwc=~^K1xWlaG-}mE zK_1IG2Z;{)Ti=DS%=at6GAg?2vQqpiR<<Ut&LCk*>97Xg!u2<}p&|c+miTFwjac&= zq3G%IK>?kA|NH6b{{bE&wztyi&v&b^060L&GDJ|Fm4gT$xcdjBB_#IzN?J(;RcSpv zqNc$D%?*Y7NY+IV|6=Bi!LDf<I8gs9Au9}F41cF2c=8wY1M_6UD4>Dw0IdojpqV(~ z8Ay{^9v>{^b3o-_P7T!tt0t@eiEpEXpj?FiR9Xlz;$JBwp((APtV*;^>*!+0^ZgUo z0eX_eCe~IGFa)Ll@92R9^F9baG+69h?;v7I@*mX25u(cAOvp$AXF~iRa)y4cM{-A6 zLcE6hB!qy8UNxHFPeKp?N<%O$pM}6G7K8~Xp&(*}0u~eU$iWgdp#-XlhNdyl@e|Ji zmjoKjf8mlq#mhtSk6jYT5g~Cs2wXzi=FiMd;C&TiTl~6<g_2<756C|}4B|Gx<-`C7 z3npu0Y~c)H0<BcSB%Dp5%|D<7q$(Oa9K%CF2;dUq2+4kgvcuq79^_S8nM&AM*nk~F zV13mEZ>z%!hl7+#Wh-ZAu;@n+BWSWh0n=S>1cd_GJkZ((*h0huQ-c}9OksGK70e0d z!b^Z!*2)Ht1XET5FRm@Ia7p4Vtn60yAqlgZgKDfi&=w>JbLb_A#75vfUa+DHy}V2v zPz0i+5P~jvX*^hr#ILOcL!$wgf+^wcEL<!J*o%vU#Am#*Ermzyi3n>YO$&x+svA{} zn58}@t7*1n<LzFUlpZqky?IkY=Jw6vta9ml)COCMXih7_A|<U<VS_@C-$?S_^}8-f zOO<5PzA?B!CgsB6D@D~Z1vYSD7rpBr4+|-Fy?ZHss7%%V^T3NEWrIuG123Z_S*Z>k z<~!7$2S0MQ@_m0)B<JBgVdg_SzVDb<WJNL~kPF9Q9oItd@=tyKc*9U4nS8VL=K?<K zVbtl1d=p}K4ezAY@vG^){E|P?9IRg?8CRg_Q&{}@`O*)n&1_n!yIIsnA8-b;zvoEw zYnP?j%M|2JUbT(Q-{0Vo%p_;Jun&Hr>2j6xISzR<G5S|xtdf*p_n!3f4s0~njMfZp zR%DOTHrO_EjH$J%{@~uh%<(apKt`+9bw%EZj)CkU^%rz%AF;l#+HYeXZ5(s-*hh0P zwWpAB(D0i7H`$0=1J}kr>W?YAa4;M{C*DAlWbbD$DkvNp^}b=c+Q3KxJKZiEvxg;V zLEKm<LV=~ST7RQ}qAmRxr&WR;<JGt3HmCxj3)$N^Pgs1s<~&l3N!K2+Ihs3J`MTD= zy9Dkm!shBJ<~zw2E!a@2pL`~p{E)UzgpRsnA1iAT7tQ#Wspobkt+f6Q+jY9x#QN~1 zeic8|lDkJSO(-%<hus?{H+RqC1>Zd--)xw2?}$t3=JXnJ52nxwE4f89<?@YqzFn{g z339IA{^OgNSd@^!@O`D>`ilKkXUAesJr;m@l&hB59C~w&(P5uuXi>%2a>t|G28B{| zRK*LWk9(dx(B*OqC}rDz=Y~LX3szr=JC$w9DuIz|u2t9$8U4l0X(Z=E_0VLX4TaHO zxXwXU@`Lo9(<;_Eji;!rT@*|ySugsUX${<>P`$`qY;h^>+Xl<8Hrk<=-DA!~s0MdV z-WzV}I4f3n*IaWVg-88xdd3CD<SRq{gIne5yL<NV4`3W#7PWL0b4YlW$_lfWb$OFN zxxkXt)Ff^s_%z0Wd|&jZWODsJ>AS6*nXs1Vjo@p1BGg}Myi?5H#oV!vke3dP6Gp#9 zvIj{N6d8p5P*g+sVGmy)ok(eS6N@g6*AIWo@%}m^mIZun=pLW`Mq0JzlEpLM_f=l? zVHmG4d_5icx^0jD1`3R{jX7RM^TM>Qk6!;lhwUE@GPkK6-R`*5Hs*^RF`u{nyf{61 zH~1)4<OAL7`9al64(YnHMfM(Hk;V2oa18kz;y8Qaz{HH<*ZC|n4>cbb$~obj(6-1~ zT#SQJ1FG+Z`nP%A*$Vw{CIaXy6Nk(KW4XO@Dy#5ImBC}OI_VpmB^epW7&f3I&IHtR zCb^{BF!e{P^^-Za`E7=A@Sb3Qr*y2;EIRW+PWLN)e91A9-1AK@4K~MjzCHspz1U8B zO1Q#r@&V_`bG={5%Pt{{qI_b^x<sv9VlAVxu5akyhElk6?pe^2z8dMqo0B$kHiPJ_ zl%~dx9hR3bAN3F2aI4Uow^_FZbNiKHkH(pY8Kr4eMJ#G`KWwv7rF2uqKB|6W6R-8^ zwc_O$q!Sw3dA9sH+vbwacgAW*I(FOQ2APgZuyh;Rr@<eXEohubeUf`OL;ll48JQPp z@>YJaGhAi6jT}97PYOBhxQW?ey(Rge_NhUq9Uez=Gn0;>7y@4;Ml=QunF;m?^)X5x z-?cO9E%VOyyJ3$`YT+}FOWs|SZuZ!FHEjR%&KkCJ_d9%TwGQ7sARK#HDjXk}Jp1S? zYbQNd(RcB8EHAl@t_mpHpFQZzEAefI#l>@PpmdF8O}U)vPKZnWjYV27nPbHw!9gqr z3mi3!5PHQXA%XE&u}4DCMw2yr1X2Z{<a44u0<ZqbA_)Rp^|M7ngND{D5@h8_Es_ba zNoEAAWDT={*~1)wb#ngIJ`t7#{(*fGg6tFY@_%ff5O6Gp#6I2D_Hv+^VeVBtHL;Cd z|NTY9tdghqn;M7xnzMEx&$C}<;0ZcP_O9jX26Fl5B3={EdQ9CXO1!)Z=4wBFE;QUL z$x2RjUV&=oIle#|*ZtnKTV+z}n`>F}eq7NLaZ~Nw_bh+OWj4P1`{3fd?@1$OI7e8+ zCzl*dMn|sOr|^`x=RSw(1)jg`iQhduAkyL<Y*7*GeFJGa`9m+u^J{s$vCHc*uOQLe zc0Z&ZFb*?y>d&EIhP`TeDf3S&^3rKt(NRa{6{)JaF4YWNZw>B_()Lm~eR^bjqCXE8 zW^YVjT~$sM-+Lhwbk-$Zh0>!BIa;abEIqc1sXwrOlj`X@e{ntndD^1umXMMFoBgoV z{Y^d#w=<mR;Bz9k&#;u=%PCVBc{Cn|n{pF>a{Gk6TIj6Iu!-7^#$f7~KV+-r4QZCP z9@$(-_1I|sljN|}jKl@|N`X9W^aeg#k+Zk1eBv-VP#t2Y$}Pq0w70><{smC<WG5E_ z_6^t0K5;XQjp0Om$*w*=K%e_Q8@ctGk`9ZV(5@s06uLcP9COmg=RM3}#|gV{-d6MD zw|w%nB)Z9GpT6sb@my%FyV6~MyJo{dho@}zftu_T(igNOMig&Py;eCqM48vlXB%Zh z`@L`>H2z&oY%6=%vyB-WoFX17K6-QhKq2eFZED;0ZQWAA&e(FY!h}Jsyy`j6k!)7F z;Hs^yxszlrYP*Az#R8^8lVT~{<$3)*yR0Xp$2Ij_=|Vi5<T~$i<T6B<YS`?AA!=$W zZgR*q`2_5~vVkJJ-`gankj0yEhj?<<)l|;CV;vT6iboelE4M~GI~{;|By*zMmxevy z%+{?bag^9M0#4Co?~g7XSX2bR4^hGQNPM9EuI=cyBcJ_?j-hCpF)F29^Dp@QifL-z z)aNbkJCi4T=#l7-adv|M5qbF!k7z{in+co>fxFH(=kf2M;r2?19&sAHT6J>1U?5E8 zT}A4*vNBVKtB7tvf8jCtFTMu0mBVwl>X&9(TROE2CrYyKWOAz0TPaoW6i>d*LUNe4 zp1x>;3n6=Z6?uAMpTf?WCF7>@!!M6t7tiPk2<hF3jz43r-Et{7xLIE0E~TMJoWb`j zW5b#u2R$8R*iEG4fK%S9A$wzkJNw2MGH~u=uR=eGD}-MFHaqa(5PB*U1FP0*w(ou~ zG2_jBTW3M?@wCkT?c5*yBYBD?`KZXHH*mebWA=(aYZ`%Y67>~5BPwh{L(6-J?|vI? z)^X=N<&$YAZ*zD^7cd8-Ffs?!;8yO=Znv5gPjV$}Sa96`#8WY(LPo04DcN^ZhQ#nl z`wa#fDOQf^gI>Bv2B~?T2|UYYKDFtI+>mtefrZMO4g;>En60KxhL@9ak*96VI}h#0 zGun=4Zcgr5Oei*dJaLgj(cX}OnThFcieoL6gQGytiF5(f=UwH)&iVFUj*43n?k$vK z!>XTg$bIVB&F%2c^=Qh1!tCIC7srX+3|Wa;LSIDf3d6(dI_57`Su<OR)bDyHnnbhP z{pe2Ko`lRZ@nM<w_MZn|Tn=n2F+Ima%OSG+e9*wm#+crk4xKbjS&O3d{rL&5a&h0b zADJZY@v|t^^BPJ0Tzv16Fa^xOwr}oCT8Gc|!Ol2X_xQA~D5jlPxV~Jy`9ZXkKZ~LY zlSsXaj|chHZ!Gmo8z+%U8K$3eUgIYas2#R+meSW%yiOMmPBu*6llnMpf>!;Wr~hcQ zs}?3+?Djd2oR3C>J%Lpo#v@+6<3OKoy}cb)N9S9<8wV>)@APBuY@>Scp`y8MWY|oV zS<Y>V-vu`Z*i0?3gxus%XhJSZ=Rch+i~O1?xy^_Bk)BYkHr~^2H)~C_yz;EdL2fHi z5d;3(#GOv+YAkA{;q<reT(lmzdGzkXj+>#Ad-!B#?~$1!I}^8npOn+F(F?HQT8i)T zDP#+c9!#TtU3&ievq5_Apt4%pnb*u^S`%Al=!a6L<jQ;}a)K25wFG&r3e}!d(t zG~LNq*P1q*URTzXR_wDddh_c?0U;Vc*6-p!l()aWv*QOUZ|1p9TAyM)OCR0+-S@dJ zWrXz<&cG9>eP&!kS^~(dQ4F4+u;l6Gz5AX<2e`UZWDfQ#emy~UQsVtSN1M`J?Hl3` zpLO+QNVUJFqVuSTT{5!%s+d)IZ6TA-Snip*0-dsp7O#5Py{_mS6?jv=a69gikvz8y zT>h-guJT6?+tm*3526&X_cvxVDZfD@7GNE!fnwN`bnJkj|F#OU+NTdZV&IW`OSa;t zEk1WqE@jgjw2h`G&*|8@MEb;k;OhLr<x3f1K0w=5)rop?^3+`BBilXS&Z~}SW>&}) zSC`jQMcrUHBQ?^bQjNEDD)6{v_0sL7+ZQ(rO3f{3OI7nZn!8tzSIT9$KjFKSY$zt9 z*Eq7b^yE1wJ6jL^q}K8p4YI5|mPfjMimkIpTuhQJl=xpw<wwNa-|Y~3?wvBXrQAUB z<C4s>%rHKWlFsWW%`Mn1Y^;aATBRvwRZk+8&TvF->^Jt4(EjwsnZ?4+P)VJNhHE=} zHOy<)?X=t(u9k|Kxdsyjg%`Iq4Ef_W2M=Y6!3|Y{79Io$^vT3a?l<wS>aIa@TgtTh zr_ZU)_4Nha8YfH3Q1bckv?(%nyW3`JBQpyo^u%CSgma#%^Ner%U^fi6>0W}{!&^OK z+g%&Rt-c^nzboM7nE2dL9(0J=#)%V!xUZIU<9gl~7+1)EuiQ6NX@jA93fZ~pi{7HX zDeaTnttkcf=F$a?&fQJF+Ff}HQ52KsEt={(-ZPfwFd?wF-H)lu(!zXDCUiQw^3#i| zEQhx|2P=33tqW<!1e-79e+`N3=xlS%wnkti`b%=Sc{ycR4L2K0%m!NuG{u~Nz1KN5 z6EQ5%&>QD7AaL5v*Sk7aZ}XI@3G*%ZIu0PTRQERy;P2V21o!VSSS&w`01KcX1c3r; z^q3V75bV)fb^yUcQU{Q5yXpXfSO4e$g4cd>0HKxCKRAFAFiDs^ObMn8QvuoKS}<J@ zqJSJiLe3|_Ei{K&z$`(?0&)&*VRi%uaXB%R;3vXdVQw%Fm?!MaPZ15`Cg}g%V}uI= zkC9~eIY{UJ+lU58p#@oIs}YUcx}F}I_+r(a{$$sK6-z@AgDz$+4LkU79Q4&&)bw5o zcv&g7<+{knU=*9oRaHL6+0?aiDc{OXwo;(yIgF?Fm)x^O;*@!Fk?>A|`^dSQjZ?m< zDbDeWcO^2A!#?H%FIeOkW1XM4&mW%fDvXtPcPKO*kG#8YAOC>Z&9C#vzDd}54=_)~ zPb##>+9#TJM6g}l#v4&=-gD&30heJrEqD62m<yHtPA?zKD8A(X5S3WLF269^CD$}~ z*s$=F%EGsU@rE~^6r##BB4aeK$6e##t%cQH>pL==Y=7uA?MKBApK|DF<vD3zi%$7# z@%f0R<PJ}LuB{kkxg8-uD<Av@`{DS<<E<YC@0Mwt<d!#z(7Y8NcX@p3L))9rZ-P(D z`{K{YdY<&f?+d8(v~=uf<@!h)r5!#@ix$f6e(<qqUvMdUe#=Ff#LyUp*+}ulolgRD zuIF4uhU8qyiOac`6ZD180yzk;r>oyvkEz$FH>`K7SB!loB!YuE$Muy~=+)@e>y_)h znBOuO9orJSv!1curT#>$UZHNRe5|1ROXm4f-qPC<<MA}HN-FtN@c``4(~(Ad?xkv` zT)Jl)@3v6yP}>^0bW{9>!o33})+0NA?40Z7A20e67dCOiu{UIH-^55@Q>v+c;GI{x z-#)U^AC}VGT=eqGaJFTX%nnwLox74kE+2i>O1_v7J$|X5HzzifYV!0xF|I6~q69K; zmCOg9+J>H>%mxjtZ?)e{U{fe)cq2@CtVR4$_%`F`Zd67dapN}%d$&nsZXHH~VomEB z?wAXwj{7~LQ#y0u(kXmD|7J_3g@l;zr<_iI+dZu2Z5J5wWS^~XgnR!(KOIKSQ=H)I zdFDnB_}h;nbb9w#$PM+QES~Rk@*nd(9+`!GrsDfqh^lh@{QJveqds{Zkvb;o=Wexk z7`S}M@tqEQnY2ZpEceYZg=kv)u3i3;6XfoNo!xAF4o+0v8#$_~N6+2;lAjsQbFBYU zcb3xg&3bXNC;8J1wsA}LZ+sA7EUEHlNoCTKg-XKS$B{BUqgV3ol@sUN8L%~>FZ)%u z(<LzHzO>mUyItk%sfKZ5(Vbt(<0&kiux3p{YUKO!Yo+l!`3&K^QCEb~Ep`;jrX?Mc zI{KMCPdqKgbo6!OM}xMYLe1z$bE*?qb~X6)wl*gjzlyxxVR});(#mcM{bQfw8}T3g z@w&H9)agDwwE4EuH46=cTsk!>K3Mw;mBPy+of`+kZ(B`DJWbiioEHo4q#^UfMkgKQ zO0qZlv7<Pr1o`$!nNM@;^TLgrHj~Aj$)*YZB&N1uKEEPpXhb5-y@8Uh);8$oo&Cej zGs1_j37eO1D4~+v<{<IIDI&mkD&uH`MeE@TE>+el%5)mW{-k+J##^(`_(xug4%~f0 z@$Dm{w~C>`6nBhdHp>+L#SXI84L81PJ?OAKcScapQeWn)-h)2MszR^yd^RffjZ3nf z#Sc?_g#wiCwug>VN-*Cje`?8aYa@O8(_zcU{>4oVXMWJ1tM14dJW`{Qq|u+v`Fz(& zDY4_8j(gtne;xi<Fp#yo@3qvZR1WNkH#K?Vg+S@Bt2S3{>C7yud&KhT9gB^Ut}K}+ z7f}ZyPl&V*$g|WM$<wCya@KBUNADUPV7P^x>igPs+@sPa?dU<oNRFRcs>D6#8-`k& z6RBSf%OhSk;>s@<+cxygQYLPpWY#j(vuLzF%DSmL^nk>XC7a5N^!Z~vulVnwGA#;d zm5yrgM~4izZTjwWY$3*Fey_f*hMIla7RqbKEUcaF554W%W|HvOvb)&CEm$;u@8i;> z!VQ76Gc36DQ+e|aLizVQ8;Zgh;UiB9=P$(Oy!C2O@_JxxG=jIN>S^~(7W;5IaGd%4 z<A#SO3C+4EwwNTg@>g11T0EmzoS*UP?MVR+*UF3CB1`8I?5B86Chxjkdd}QP?7Y;T zD+zLP9#h-;n>K%>vqEc8yV~J-n#Yd_#`;Wd!KC-SdpMZEo3!<_|A0RuW{=5>O_;mm zo;Y5%IVO?fgoy2J3#Y5@qDwHBKb(|PWjWduuxQ52$D-G$H}KqvzSxQB)Q!OW_>x9P z!}vC(dx>Qxy4%4wOs*~tcpiAmymYe<>Dz#8<Pe&nDcddfVf%UT-9J%^;x3J3t}pE= z+^;_>qFFVISdVr0!SIX96j!M;$6ufQ{+fflqw$=)^_>=3gjeeT-ySOTts0-P)~zKh zDPEthw>tJrU-{e+owB8;`|*3Wp^FZMcRPFAJa#>-^0(7daz*JCsOKL#IPZ6LBJe@< zu=IX|9E-BYdPCd2X8WJ&J6^nO5^_wg_PSY?qIS&TdtDaM8?t1OU1y8GJboO_V-%f4 z-sD-Be6}-o)2y*=Hd8CzwvMUA@81{CITYwBq&4HWa%l^eaFgXzI}2z(@x5b@`*2XR z|AF0$uH3KDo805;z8s($6F9_nT2LMT=!U=r4e&eD%0~^1;>{*cZ8nn?jLD-}?DL4v z_iH`0>5jC>I~oih#c^Bpq4U-*$KP`wmke`JJB&TAt<a*Y>^6D+<#0BJsz4~D(Ef~U zW0_A)2z@nq`N(@ZPkdBiagXt2+6#<T5(7n0Ec#*W?PBdWUhiE#oE|01E<Y>ssc8Oe zgv+$5)H@z3fg_Pxr}?Ix_(Hgbk!&%igs`V~C&_RORZ`<7u6$@Do0xpB*`K<}^Q@j3 zJ=Lg|+tx+r*=t29I;Bjac4sXjojy*}v3$>(<<+Te8{3+AzK3b2-iaQmNcV<e$B7B4 zPgaz-Pi<M;oRJpU(t;`qpCP~OB*;&z7vt7;oh&PTy!l*z_fW>9F`t`T;n@v=1-IxJ zcbZ?Q4s@K(7jFK#r&eANx4>Kcm3Q~|1Go3$<}Mw1ymOajK>mVLQtsX~ZU)9-J7!!~ zhJ5Z5%N%JLos%9dnp>+LQa(&TsMAN+4d-i!85s=?ZDenFaH32utJF_9<uo$bDf{V$ zz4xs~9sJ)4K4xzbz+2rd<or@N-Ei^AOBJS1{6jC9w!DA2hjZu{X9hZE+B^;Cqo++y z<(bzl)}H0~K6R>^dW+1K3tb#Z$9ygZxR}DW?>)ewmxv6Jzb#{1&Z$v!Xa2r+W}~%C z4Wkp=V%+JNRJve)XBBh9$^l3EGc?~vBkH2#>bg$kr$k1I!yGO>9iBblWnJhAqw=}- zM!SGB)5Fu;_yASn`{#KZHtW}$K0E2cRC`wCXvg9{suS`&OsOWi$LP;)t4(7;a?GBa zipwpV%l8l{V`dorK5<9P$_+MtNUHtQ*7R1Bhb<9_2eWm>OBe!+zD<bG%6f{$P&1ao zzcQZ)<bUtJV^sO85GD2Iwr0ji{WmtvWAGO<CO#MMn9!Gq)+N94_1r>b&=Rn)d$D(@ zNFr~4mBqHRfuF9u-dcR-$(F~uuq3Cme7ze)g60PmUmqBna(4@#G0^IC#)inu<8P{M zE3pYCJKV5cSv;)sf`tUTj&a+uVCw>V5v|FZXd~bA-0mh<N|SfpiDM$8zNhaNL9ZJ2 znyUGI$;j~ODDy2tL1{X!tc+GHxcr<Yu2~74=k+FMg(qGmW;Q(BT{bI3Nx3zt<00~D zh<T2o+QzKn_w7UFeJp2s5==N!E~!ZD9?i5*W7R0@h#Kv}emN-pe0ZLg%6QISmY)X` z3fsElzFB|QREX8<>eo%i$UuqbKm1{p2QF`<wXw<5_0|gMkiW2?LqEane$UE@mg{wc ze^w8Bo3Isq3*}?XXj6mSM9En5=>|<E23M+zhNn22lPIM4jhe~Kr6^NvxbAEJlMZK? zDW^J2o2JS-^!lSC+Nt>VS{$6tpzf*p5jJSL(3k!~c&O$4!-W0%W8@o7o&N9uRxJ6P z-swaY-Pdz{Gswm(PZ$L4V@F38znKs5Tql2ZC?^hM9cuRJ%B{D2_cv+hyn*fDKVN;c z^v1kLXrsA9N&2poD2n~!m4ykEn-(6~9sN}8cH+k4Q>hQ#dd}zKUxr}%GL#&8PR|Ix zaIim~%#<?F=oUF|t#6$r@S|;?i+z=`(@?JYg}8g1{KsDeOHepjC||g*Zk1WSA!Ezo zP~(v@<stuLm>!cHrz@=wpW0v;?)<>S$m<thZ{b91ea*DCd?R%n{heA^$c=~mHeC1z z|2c~U^z4&Rhp#t|vTG?Vuq&O}L(>slhP+jBe@{rk*0ggN{=+B{D{mi0{wv#D(&=Q+ zC!O_!wQyILJ05scZ7g<dlf0#xf!RXU^EtAkpDp*H^Lo;DNKDdQee<5#%8l#>Gou-E zSzK$vqnq9B3r{h3$meh9)3Qz51bTg?_&m{nC-1%v)kW*pe%t7h{T6qEaFJ&xX|F%~ zv1mH_Cg8QeLVuXru+UgQw>WpJ_Z6p0o3}N@!l)6RoEqG>s();9GaYR)o+9rGJYLmM z$&z=e@Zb>{`?IwnUncjveD4%GCh>h+8RgWNt?~rUN7DUiZ`W40%MbiSUncWz;$pMX z-ZCpIwYb~jl6#2GON;36ON{!O)jd+BpAT;%Yu@rBq(AZ-ygI_*sAa|C)rT{W>bkep zN$ZYB1ieiA;?A5V>~Xqp^oLINqBn!G#a^<bTdvg4m5ki^D#bS5!e8nk?_KQYsL!lR zPhB7My`(|9b}?jjz{GyQ)bMW3kr*Gl?x-BOD;{Drrl~hG--Z^jN9dpyQ&=yU-0SN8 zI6Gclq8B2prhbC`b$2)H`=)N6kKK*t8kh37?=+Fe=RK5tB6o$^Dduz4(?*_Kbe^HX z`<WOSHouo_LdtT;UMD|3K5Y9fX(Xtcmh#)#OP6?`ii`TTpx$kely4ZavzkH+J%5@h z#d5Gf|4z%Nx6g34<L#f~j@{>?W7uT!oS)Ad9sf}${f^6Cj+(*UhYM=!xL~#m<4&Cj z)a7x1WR*eD1z1K;*1?<&uZvzVGj%WRnfu<zCh9pGrcAeaM4ywE_C1AOM50(1?Kry; zgX*5IiR~!%jJ~is)!wXdMxRi5sZUiUx``MAjttl(MiUFwM)m!@mE%hxs!xhN>RJt^ zgkmZN9mZ<XOifkYoEo!V9`n43<=$_=_2?#3u58F%6`ApNR`Kk+rd$JWAKOrfT)h3` z)r(hck<DkL=d4wEjqf=0R1}3}n0T_GlDZq~aq>0wg5)n6kcC*?Zutl+4*p87fO2Ce zVTOAz<PI?H(_eDy-d8GGU#00!RaeM4td3C+fAmKDh~e0wY0Gq4J9QeBy=6X2?(t_G z1Y&M$nS@_Bm+RL$Xl&yvl3&s*d8mHYxgS<lwio5{_O^ITXYp?S!&527P0k9Maq>!f zO6J<{PsQ|%<rUvbH`{!;{GI1hZY8Rq{YT0(H-*T+3|>BoG>0?68TU>YF^XPJs+NCp zC9b_Q*qqGKua}(r_BkEBA^)dUlRMK@wi(~q=uFO}lH5eG$L5gwJ?hD4d*$!%j7zQa zke}h~DIGd$sJB}Ou5I4bk+3C<dzY89Mt0-SvnQOE0RnMF^Qsr}vpU9{!*|UI);hRN zH!SJx;6J*XTi;aYCiTS0R>}`?L&3Sz0ne{U^=O{u`0$1+JRSU!N{iRxx7kOJFJ>=h zUH0fpZ)r?<oYgu$?y%Sx5fE_Y9Q8Bnysxi3WD&ZDPi5V5Z+I)JrhGYD*J788{OlOt z>t?Z%NScp>9|!n@w5D$fqqrG99H<eAom<@ZV*A69I=Ox60@oVF`cdhakvlqt@6;Nv z`7oD@AL%IWbsw0pk;~r|qQL8d%|q^z^HcafaOH!7pj%tn!mTt7qYVDLwR(~Z=jGFA z&#B)i#14!Oxm{CEfv0wFvk5(@PVt`mW*J++M@6jWTfT?|7Bk<zD%SVq&o_TD>bjLz z<d=(jBldAD%9iVj!i{a6$9XwxuEl1Y=oJ`}nHll5l(4sY@;D($V73J_{l3jGm%U0# z?{c5y$8)77R(MYtwbIvZmhN81Vxr1-ax&Ct6ck$8I>PVjm_BXTjFAeM``(+7s(ZG$ z&w6|&)6=p^ULrT`@xzB{X%8Ph=3}(A4+~Fix${*cvtUourLQ(u+!buzMv1(zilE!9 zdCv`}sey}K+OpAMTiiMUwO{jw{*>eM+fL(^<x~W;sT<l?g%(^5rlHYL8qZ2V4Q$#V zSy2V`NLEzA+kXtG{koz`2&k<tqT(H0jcs5K(1!pCo0$k#gzRY;v^^1gKoWdi&)x=n zmytB(hmf00@-39VP5FVtp#T{PvHm_lhC!3As48DQaZJ;Zp=Qa#LPRAd#_n?P=xEpG z2$$1)%<*?a&R2+k3k<Yt6)jR1iRsMBx%m?HEV3-7_%tS~4(=Z%TeW@oUWmB;dH*5y zQYzSaah~F9a}Uetm1Two-uZa+y_<hbqrpcdqkcK>ZeE7l*juiNgbx%KOCxGHZw-FA z!1wS@mh3#v=uSX}Q(^LjD+p=L$UdgrVzG^xIWO6q%)Pjdw>794Rga~n+xFcuEN!zY zAU6zAc9|52(G_ef#1wSD2-#Tg{hTd0jtq?s=hU+ih_4<S6E@VVmRD&k&-*Oi<8^!D z!<CXP*F<ccr@9s}FN^iN1ysYHdlk{SADp12l1#f0I#AoaU7MATHfe9Ngwna~yw{lP zGy;o{)zwz&dmIxs?;D~hJU;!B|HrgWC5vTrUd=-o$9C~}Rx|Go8}0}^W$(8KxqC_+ z`%~}T>GasV`$0fWW&f0FNJ9M;?{SCCqTSt1aR>YNhzi%%$o5|of#+eCHslXJ4Np2b z_}~-xVen8*`B;T{$A;X62=aw2POhm)`5zMXOw>&B@m4b;O$FCDmGnKCg6hB7Dyo<D zzIh~l=`t>u<8f2+{^{fI_Fp=^vrhHSJ{L9LvwP(nw3v6uNs+l8419OU>m1JldFY6v zX>8;Z_Ov<a0`JcUbW|_Pm@a8ohDy#M0~x2H4b<N5N<$`e&KYlbAob3{k|B(f?4Hp8 z)(pli$}N|1)in9?ko|1t5jGTET;bdd2SZO5Oae}hI;mgTbA;@*^CUaS$=HARxK!qz zfg4raA~!F1a-WL`_x~<&{Z+(#Vjnl0W<Pb+4=sv=)DQCy9yUmk2vkkp=i~{cPgT(6 zOY6nIp-GuIjoQJh%qzLHLHGNipx+e&AtCZ_BJAsJ*I&^INRR@Fg?^)NeU0#wJ|NWw z;JrU-1Ng7n0EvT|SxKpIwFBQabT$RwWc^v(q4djtBJK!C+@Y8MK?a2&NjTip?3A&| zDKoPVJKdav1yPSsTO4V8k0HNbH6H)rGdp<8uGQ|qfZc)XcYDA4KSA#Bwdh-7fBF=x zx~Gi9#v7>VhwCTz#l(l}N2c^e#z!Rf>8pp|iVnYZp8Lhqr%xGPKkeJ_=EeAIeAd7& zvfi@;!Hk!BEy89acaUSf2N%R-a_=SG%_zB&WUkQdT@=6H=F5PpJ`ZeEF!PLlYOI5l zv-9zg>G(ODv2NyW<`et9DVxr2R+>N1TjIU7bK*Yv=tR-1(@RIVYR=$0vr`*3xQZ*J zufs4<`upE7%<rF2SYa3FvtMW^BL}gXB?`XBxMDxRQ&RguxLsS20iS4GKSvY`Ss=IN z^iZ(%7Oc(~dk~XFiFc&wql72xC+iSbW}s9Z(lr@qMaJF^zmm2C7GuD#&*Po!f95`D zwd$X69}?m|lBKS{H#P`C44Q=fLbbiLsNLz}L~khVxwBVJ-^C*P#FoRsM_Yn3&x^XG zp5pH_5LDnSKPtF6e3FVr{oOY9;PwsS(hZZkhPh94vWofkHfts&K1j(gv9+@H(dx?c zN?H68cKdl#Q@7Y++bglbxW$rQ_cE^|8`<dgZaQ~#FC8;IJwxBOnRhi5g^rTrSa$!= z*pKvgb~sV9VI7-rZBub-NQyUNr>bN8kFhqG+3jdbX39%5yQ_k6{LZO&%3*Rb0xz*~ zV|jLi)<vDXlX2W3*GD3QwTiCnZqC-NI};^o5vd%T)com<h4SsRwvq22Q}_K~wEbKv zAAvs;rNV2F_*~60hekg8nDQ+ZIu2Fs=L^MOCKmmzG@6jE6zPZbBa$2L?b$4mV)Z6( zU-6;&;+YQlV9FN?EwZjhStSl}i?fS!n*`z5<8)<T9jpj+FrnQeA-#7;;KizmARd!F zdz3G;iw40(clh7nVHF@hzs216(IbVgIrr734fpekk0M%S2A$$X*`^{!le<#G?vpiZ z)(_X~U1KgDb#!}ua95zShx|nOAv;v}`Ls6VmlyjFYor{I<eo*1E9?*M6MN&b9gVhD z-xafcPxAD1j)>fml2dOEnLiSj|I9b>2x(tCS!$T=KL0}K@^p`6WCDVL=f@bkNLS7d z0g;4qw)f!@%9T7z@sAinz8`$AuDf7~*e>yP2=0N<y^_*&r_r6o_w4tD^v<@#P2ZBF zB=w$bZhdQ<#%wn&b-#~I)K5=M(dbj5!;H$aZ&tp0)b}_?^~T{Jg?%mj_Mw$d`dr@& zj;rV88k%}D6a>?>A5P1gX30-6_C@C}ZN0HymQl&^=m+e{H%$o_85W-LhZ%Ef-co;H ze>Aei(78SKtjWOV-Jv1xbw54Uk#}wsr@e5|EQ9WD+K4*k;s*CR#^9&YIwC9`{!V&_ z*tZQ$mD&b)m%JV48oT)V6fB*;ZQ{+i3ct}K7UrZ~d8i``wUNbE^qRL$T<^YopX0fS zIdeE;^VM5f9QFqA2upeCt<vv0iu*pK!m`gkH@&;Nb4OWwX|q@5rAWV)EbY0xSF>ay zX&5$zpzP_<lJNb>wrLM}Z98A*9yH>~pK{rf=k0nuYBurgskhmV?n`}k?MrraxT$SI z(g`1rF`9?BP<k)z6P5QEh&E%+PK)Kb*=OYwZh5q2w7}!wCwGpb#rg{oV%x6D+|&q< zs*99{btFnPi@H217ka}y_%7pw+UvU^h4bFs_l)tq42dsgO*TFW+2YVvJ*zLPBD-Xu z%z13G@;e_gJE35tK|*UL;7L#aD3#?|^SRO?-A=N`Qj=_)@eW(<_`^cMJTbIrtd)9( z_sj7U7Z2U%DtNyX{4Ddf-$07K)9?e^DBHU`-x}zj7C=V%p6A;$6a8h_LFdd?xzVZv z{NGABGG)aqlJ#uwTfe?(p5_-_y|_17N>9G#!{}zM!23h4>CfJl*<B$2Xk&z>+aOZ7 zvlbiO`?SC^aJcEE^{t1jGdv^5_z_saH*WKeCtsNcSlx^o$dDwLjk;CAU)3FMbogms zg{uf_l3bPThK;t0QZhmY!84sV66-Ft+zGt3$L-5v4(94p-Iws(sKeT=A6q!mdNexQ zzl%irNzwH?P8b)k9P~T*C|%XM;~btUSELVDRy{Sj!xkPrE}5rg&5aQJ%63yj_eMp= zH3l{F2byuO*mxrPMhe9gjk2lnW$D?8!k50Vrqe#ZoR+%lMS=rOJKsKr_R!-r-yQuD z&)!aoQ13}m!s<0WeQix$Yf4>6@%eb<J64UiJvXv5%*S*OO~zcl`?YSO=le~I;l09+ z?XAbkWgQDSF~$R>lhp-h4)m7#e$n@`F+8H#FKnE9!l7~FjA(`sm7>A08q-x4@oLk_ z?MIA8&vkqG_+2Wf_ipR^(5PG3^eD8>@IaaN1xdB%MX{NwZ&cnk`+R(_>~g@>ivO7= znN2xQ$p$*1IB$;g6obQsyEPvz?)&^>@P1H-`c0QA??*MQLQEfD#TA${<}|xohMjSY z-hHzqsQ03j_vRU?l*(tGLXWbjC1FOR{^;9rq0Czct&X%#P1(Xe9ofOUyW*3_{LLNF zs<(xg2B{xJ3&<-O)@<ebbfQ|$bu4h<&Z3)YQ)`V4lXZuY(GPhmnT2xOMJkZ_dA46d z%GtZTc5e$KCPhK7V5_=jg_QZjbmdgcBMl{*4>om5GqMU1`G_N^jfanJX`ZHs3o^=< z4J{bNOm%&(d^I5EWX+n${#-J5AMN#ziR_W~e1cIo)c5hhkWmv!r#3%PSiBS~>Y9*! zxB3;PSu4>_dd6?ZtvH74)&e8D%qmuokGkyRWM8SrT&`bKId054aAZ`uXGt(~sj_%0 z?8gO*xC9Tn7yOfKE{;7ey)tJl+F1=9=nn`@GO)xmGrkf@&W+}$>qMk8Dx2SvHLc6- zc&NjKydSiul-oaAdXo3-$8s`G0l7>2&M!5bu;!TBDcZ5+<TP6-V{y<J?2FDWB+U|= zcDnabU&nxh?rDnIPs(-{?ut4-C-LF)SGt|w#Ev}k>Det{$>3~ya=`cuSPd6!x#Fn9 z^T^q2?7Z_XT+M4PN@2^un;TB*239|5XOeq&W3WA>z-0<Kd5LE$|J2Ddb~J?*(vyzg zTv8SXI7dSc${M#7`8W@BjlK2^>!`=NgqEm^DA%b)#+Thzf2FH)il?6U1)nUVg4Zc8 z*Y2s{q?8-cIh!~y9Fmw<bKjWkB|%HCL(Zagt-Vmr#NGAsDZ^^n&`u^dEH<F?*!izm ziRLlKb-Xu{?X;`A?AJE5k?isL?L$qg-WwqR0QS4D1pwBz_Yh|LYw6VgrzZcTUnN@m z>=4P<iAX+8^s`Gw*r4|h5@b-2O9s9CA5RD{DAM^qSJ(+94P%C9udk^_-H%N$W3GSO zb(Hy(0e@)XfKFXze&KNVB#+Ykq=TOtj)zCmp6VP=LZEW~fQ|uE^xLSplOIn+pUBN9 z_S*F%&o#F5%Y5$-FW=qr$2zx%bJCh>&K|G49+G7=#Bnjkw&E~(MNz8_KbsUExrY31 zgA*sH%68p(&{rn={MZ|M!<X96ynk#TiF0<$Ew@Szkdqy!Y;-?#ea}KrfN{4<Ky;jw zgFsDxUlsmb{$i}%rI3cL4?_CCC7C<p_G5%ZH%5fr_A=X_SZP-;Q)aelCzFZ!P>MKA zPE|y7r%#YYv5l#C*pcV(Lt-CejCC`c>V)YTmLvuHwg;w(2*OS}@7c`8Jj2JeIZIiT zvo}2OYEb-MjrRiYxPDw6k<{--eD4ZqQ`W%QDs1+fxb^x|m*|YU{1Y09cMg<e!xvfe zUvlthWG3l{YV5Fz?L1P@_JaD39Q$<tRc@A-nb)s5Svx!Phh(SPiv95U;o*Zl(Ra;` z>zeM11SRo|;{~VZm>jzNlD2v}saIdkHD^mXCoj4|R`gs-*2dlM9Yx8>+P6~+Qf_7N zcN~t-f5>}|Hn)NNdg5LdUg?~zmm(6%)Asr%R6TQ|i?@1I6zG-ULu;deyIy(IjkePP zX7}t~G7pdRG;FaVRG2)Zmvd77kyVd&Lpi&?tZ00HRB7V*y28cd?C~!$*iKvytG=$t zbT{&V-I2=XFCWdE$Yfj_5k|abjVCW``V_{KUki+#V~KuyQX;!?ffX{Uj^=8HMut{e zkoUI>KdOzl>XmJBeOsb==!u**J_`1%6){AqX#DBE5;M-SL%i0p_j+PS<7l#Q^4pHW zw8uqB8bO{HS$~i*PjlY;T@4Vvxb-)axb?o=wW<g}AP{Wt#KKqiRs6Eo50sG3<OsKG zGr2zo0-=PwpEB!^Sny%_mDw5^+PtwE2ateC!DL{vFge1eKTA&sOS~N+g$`uR{j3Ne z#rIF<W@tzekZ8@npPRwK2kJ@ZW>H>hn#T`3oA_8Ec05GuoQ;*Wvu$3Bb}CP&>xj++ zjnvz%+wN*fZ%zuzh_X;KkvhQ1M*hM5h4Lmga@d`&zI(Nma(P;OY7bqRQ+<YB<*SI4 zxIDXUYw@6|e!S?FW6k4FE^}eGznd<JA_u>X&v}o}EsCL{ZX9hyiSZx79<;!>=De<= zSA8DF{rt;5!B;M?Be^9IWG{kzzBF>Add!Q)&a$f9QsiowP8^M`{hY=T;JUEIfG<zj zr~3SUW$n66$`{=ve2eZq98LLn*7gn$pQltkw~t+2$SoiI$D1@WoAUzC1lOj}X=bV` z-Vbfw(M)%mKT5Jr-Ap}@qDi%pg?rQ@{KmN|pCI>$v<TUDQ5~=Nj3R}*T^4jtq{-nA zgI;Xedgg<zwva&39X?wR*3sRI72hVAvuMwcO$yR=Z1-y!Vc^=0_h1$m!4(FZ+}DaW z^*{4i-b3XqZ3%6x`WHbx4*QpamzlVCQfFN4wAi?#@b>tEXn2&mw1%SmnLRfxcwTup zAD>~0@vG!&PpkMciBjQek`HE`-d#%-^Wt)2ybphY{Hs?sp0aofy|>DD-jtuu@a{Wy zpyOy9x4wp7&I{p>-@L!I@AeR4IjZa%-L@sR#Wa18`F@;32;#+l-7Wkun(yj!*FJK4 zZ|!~TI#=_IzTRl0Y%7l0F2dif0^Nq)C*rpQyG`HoP@>;K%S?W~F^315;|IHLUFk1! z+7y4e5w~dVoe(x(`AT0~h(h9+C7E4cp*71{*!ictD8C4i$x9<w^G<GvDK`8;EqvjE zJo=%nfmFsl5BGP%9x{8Da0cK9RzK@59H4x9^PXwT?SP9E_dksK6z0@iNodf??Xa>G zrr6roYI-i}tv(m}WUcR}0>*7^Zu_b7#F^Wk>Ab6?c(_>^!F8-gfB$&-8D83hMwK%K z2Nakd^8{!w*m25_fB*K_CHaBf+oaZhjZey2>2tfLzJ4rA$eC2}nfRghO(d_2Ez+EC z^m%nqO0SUk0f%k-x!)z^N!Vs0^+P8`9^H18tJCaB?J_QTJ&+gD|1L)A9Pd{?uW&)% zE3eoSDlQ%yr3}9PR5|<jl8u*B$LTMOC->lL)J&SyL&|XH<V;dMTG~A9<Jl)`m#PKp zXxxv#y`TJb<fd=yCf7LOJ~!>)LC-@~^S4in>g-F^{;KVqA3y&wMlrwGcOd!#$7pAF zPeHSXfEVo(zoyQl#VYot@ukV6BL|WmhTBZsg<W|+t3FV_uf?hx|AoP!x2sTG?4)=W zf2~E>)q@W<a*QXvl%mEy3yvRA_evjU{CKZ?;HclTj^~53BDQW9>Qdd%g^XRh{y)yn zF-o#^&DLq#wr!i0R;6vT(zYs9X`7X{ZQHhO-`somIla&Ab9?mdG1iYYB38uDi1&Nv zoX@NXE64IKZ%1iDS2@>d*<Xtq*5EsXV-LpWuQJhMjaK&1-O-}Byx)0?q?YqERBk2q z9xh%&JCn^U6QY|whHt=wewpv^r6*{xlcZp4O_0}9lGee=<Nr+4x<O@Tc9EPP3%&zh zfv^M2>7U%Khj_~b0BP#}I6!oYNT(9lo+71?oP_0i<luob+v=uL>+Z20T5q-+zJV|N zITu2=%I8Pfg!kfj)%%OyR&EV!tZTgt?*_WE`PvNKE+@-iI+&+JY?^XTuzysXYJ@Ba zwo-MhE#NKuEfFQwv(29;+DX+WaMLTv*4*40broeE(l{lY``Q3f4*MuhApuYOk<4p( zbRpTjg&PR>!@1*>w_5b7p7LICtigY3%i4@TW}6vwj4$p8;au-9b!xkYEYDyAXgIV^ z@3c;gHJNfi8q$P@oEG>XPIAz3UXb=k6`Qric%@*)SS&KfENzB{`pSKNv-%M3x-U=h zO8ZS!lk{bWR*aA8QuUm-HIH4cxlb`x5RV|m2vh|bjeZ;Wta1GF4TqusIcD$@B|{IW zy2qNSOuO+%Mh*Y_BL7Yhf4VByY0`Nc{+mDk2UM2Lnbx}2Wp$vhC9(#prj?3svlm^J zU_ahZLfL?KogBhb60FINiHMKNz!AATn>MMEh+vvo+iz%gZe`skmxue}Qzd-Y=`ETD z37q^FZ(mjC-frWlCOmw<p(UmV0(iQMt8RvLf);C$R&2O`q@wR}=9cvDvGaR|jb)L% zk=`VmA<O7*fw0kp;u_eQaqaSsr4OEgjy?5!#9*LZln+lSv#b1;an~ZjHNJPZ4^5h# zE-8L&YSAX5w9?MICUCphaHx^cv5lT{+f`TGKyG_SqTME&FMWDUk`K=jw?XAad^7uz zAKlLU`VKx<o6>L?XR0vQ2@s;8KJsq{gTIZu|LytU-ytdg91Li`@HMo5h=gAlwLcCC z|6K9@{gCi48{V&H{$~o|AKKx+4hCOTtACvZME+wM_=nqG?h6O-MN#<j+$+<o{^`5_ z$5Db_-|@?XZ{VPBX#A(1_~+eUdg33qmd0OAbzjWH|G59_jXxawUkc;jeEWY=4Cw#T zCcj{ce_ZBYRE4k0`D=mv)o=Qzum3;h5_5Wse;WL4zMA*`xl{i4s^(u@X!|ct)K^X0 zSG~?(z^H!<bNn+*`cDP)OAB@W8iRhAyVC!OXQg+fcQkV_Hl}xUvHc1X{HJ#EwZ?Y& zD^>7smf3$ol>QedC$>KZrawOX|9x`$!v6hTOUZDD^i)z_d4w%^)IwV}C<IN%{-uo2 z4Xdzhlu$0PO!?C>s3FIEmP~twWIQwd%siHCJ+@G@WxD1vejFABK><ZnYXH$nL^mnU z-PN??ho<8|%H_LBN8>SlCrfklBhRE;=I71YP4UM&1zt3}-uX^nf}FI^1?EMxcy8XS zD1P{IkaZ`8dtJ4i9SqJ|=XMU|3gXd%U7gucV{frH&j$Vg{Saap^v&!Io=!?!YGUKz zb|2341n=h^nWzG_&RQ*{sh_L<MQ&SvEa@|-R6$Kf&@gqlq6%6OS$?^sZbmh={o~4* zllp0`D7GmN_igi`ZZfac%$oS2jI8@nwY3udCZo0cFtS`C-~AnPuXruWJw$!Ddz6Mu zWZr`OZi$EmP<>+RxAHtPh0_w)IU@_=`mj_v>q0bnr4rgXp%Z(mFbxrzJT#@*64E*3 zIjK3t6G{urdzSii_h1dd@oW`E$T?}MsPG~&#k}I_Ibjs3^FlCrcqQNx#yJ8DG}2tW z>;rk>;+#1i3k=ru70Jl#r#a^nK}mskzu0TA8!!cG2_i~?XSerP*mLrWMP#Kp-K9=8 zXE7^Z@AwWl$1OQ&s2}!S(7?N3nV8>Mjt;xI@iCr#?T1nc*M*Z{d6}(7s&;$HVfZ<A z2z+opU%^!&F#J?}KeD4eIBcxf;EB739u#^MRK*XY_#UTzz_Wf_AM=AP52|HVU2G%6 zZ{pM%N-ri;8}fPVb&D_X&Tu;SbGWaK?sj15GH>@o4w9ouho{^P<SF~?(l#mxe=J;1 zNRA*0t`bknFzHzS6cEwzPu~-0or2QqQaXqDUZ?Ebtbu8iYng4T<W?b$vI1BTK>>MC zMFb)+g!anj)q{aO463N6M|)361ylbr0&7O}ydFqKnu~euUO8Rj%Vb71g+|+5nz*Y> zzs*WIOiD>F0A?-X0Ep#llLPpqLZd#NZ*3$x{YwyUM_Y_C$#5n27Bp89Aq=At${vK| zFxjPs3lT~D=9m}BqX>c2*YfrAZeH~9W}b!)q_t0sQFH3CnPYK=R74Sg_yEl<Z*RzC zQ>6*0Voj%Q;Z6Ikviq@5#MQ&&08#`t8<h?FWOkCzXZ!ggr6bq1blM~k%!~y~M$FjW zQ?h5Y)VYFcf_iwEdSpUwK3`BQkOYyS+UQju*$_NRuWCbgc51$<GN&|`O#ZywxU5cG zLmMH+I~05n9E#{zzCYQIMw^zj8G9+Ib(h2iRO^Dq!9}8(Oa4HP7r*m)J#vw~v-HO) zuLimyU_wGiOL*!_`+df}hh^&T)HF*X){F|cArZR{h`@2$0{O8c!0(9(=A$>xCZs== zMkEsoG&l_lM=kd2!%xPDm&HW~Vc;^L9mva;Pa$g%c>wmX4bi8CKL%bu6n>ZSak2JU zegM>OL<okP<pS_iWHF=dsF{q3yAr$*V|gE%vLL{EBK7Ym(BMUC1Jz<D3bWq|vbrO{ zKIa(D#2=0_;KR>XbG^7FJBq$`3<L9;zzaLPo5aV~-|?VrXS`F9xpRkurcIWua6>b> z0%u0(_E}zY-C<-#vO#;Xgg+9zn1<pRw239P3|-eqPf8B(GhQM#A<)?@yE~63<W6oC zUCG|7s#fB1y{X({Bk)3O4pa-SP3E$os|XeLoKT??k=rHnTGY#yFjqN9*mn>`AD7a% z@%iJyi{ZoGdbdST@kf{+NYX&0V#84Ocr<H;kyf{(f_w`)N7b0>k-wpy>9r$q|5A&m z3Fd6ca<60RSMyhu0&Ri52iybouI*LN)<vYsYIyF&BeVnP1ucV9Co|h-c%Hw)(Ii)f zaMfm#E{fMuNY!erFgLh?AZ<iMeK1A&>=CH?bb))J(HpI#-5Fsj1Dw!k6dN)z-K$F` zfF}MTWd-)uXE1|{{J`?Ae%v7+)TwL*v=v~n21*UlEu*SN>qVMT=zmh`M$7JfpS6QQ z%fFZo&4yr-n_()cUpKZFDq{EzShXho5NzJ)F;N{Vp5<@)qlJmC;*Q@YrQ6v2s(FJ( z2G(Bvq$!Mweo*9#bkYS$pp>I6n;47!%m0i=Gl}7aDkdfVxmk)8PdjLVnaR}F!i;)( zF(;Zg0$l$J^dbZ-lYhyfN;s5yS{R7FsU9Ep^?7HS)N)k)jl|b-(Q2jSJ7$6jYP#8| z@b${<+WqMd4lQ?De=Z`Pz6~MGUPf>a6KE0Z?DGDY9Ok$&h|6a|$wWS>`K0utQ$7Bh zK1nlWf18ac+|@=}rb@C=3|XmgD{G<epPXhPuQG!6*<D0L>$z}wRAE>G)#@blG2u$m ztrFoeK{h4T^VMb`UT`{WF4mTE)#NQ~%=#J;H;^3HbEcO8v(ZT}zYlc%N@#>ivuDZz zr5EtP{fa`mUK7mbT%21mxzw0rPFYCh;R+H&1(9dJE8}h?siZX<Snh}wOhvfj0AN)r zJ%B}`wBrj75)(IVu?Oxxk;B<-e|CtyeQFSUa)OV%A>TKs-ANOd`;wX{B1v#Q^a>e0 zBcyZNrqj?I2z|MvZ+;9^OT|Rnl-I<?U?Sb1E+xz*8b~=>KYI)fkj8UiXwzU%JEJ6k z6^QRX>3T0v79(ZQEkkbxXU#SH_}iM`sB4m6hg!SAmGJV-x0j%0>e02SJMCmVoJ*~j zVI@AReYoiS3}M*^*kWjM?6+W4FH0dCbvdyH?a&g(GeRO8A~S%3Rnbm>hBuEg(u_@h z9yP``E$DnuLA1Qn2p~Z!-^fPXaRs<H!G+W^RCZtTt<No}@yDD&ju(yLLCP5NlXm<N zXPl<rKzX`ZQF@QDSJ#pyOoh#!9V6V@a6d)#_ZcUWhb*N9VSI2oa{fJzRg5T9APR{( z)&?peC*$^VRwQAy;C9aHis+5|a(ti}(mJuI?OV+6>Eh0OVM@<*@jEEu(nlbTwurrs z)`5WvtFmWur|1f<4Joqs=k&xWy5%Mh?HM(>6UR$PHjBT?h}fH*I+7UteE;>PXk6|i zh?K)s=ye&&75@{+m+i_36|~QZQv4^p@PWy^DSFT=3BU-g1BGcr;<#ppn)5!!&yy)) zUmqHOd_ihK{DtTI=@MMo<xoDh$lcAO{aGk^cunajoKmP*@PJ0Zrooy)dYd)RoHG_4 zXgR03^lBc==mA#);sOHhRcDbQe*X`sD-LCv&)^|gt`%tsp*EB;IiH7=xph?X`LYtQ zSa4xD4_qrYyM(w8bz8zmo*BJ3dncSh+Y1s=nhRP3e99d(uhc6Y@Nc6F#*~t@^8Gh1 zVN(QMwiU$l+zr1}9`2_vtib(J;HKtxtje#_a+3B{MHpPt`!H5Rlu1SgiQ7_-fc%QV z9EClcd&A$A9^@|4&*WF6fUDpZw4fc?v?JTr9a$ae*1Urm$kmJ@yd<R;Q%)h=dU|Sz zWE8qn+xp&ER}8d&6}moV&3?o`kmrqdA*SPU2#;4KzN+9S+-p~+wr1j|2R*DiNv#$- z@@zaLw~wi4=o7W!`};L|TGtnq4)<c(ft@8p1XXCQeJCE0ZeDcN5ReQ$(Xw@}uin|8 zmJbc)umh=9I-si=L}XAEVvj`@G~f&XWD6BdQQx3RqJ^SkvWi7Y$Z+sJPMZ5nyuE$w zU~$pb=O-c$OSb3*%_Qm1uFT8#Ci_;)CsZaR6jIJe&DMSW?sfQjs^Y86o1fg!?`u;v z8987!*_fF%ey@!h^1{uAlYGn_(_mrd*qLgjc)oG+=PN>>AA!Kq;0^#M{84VXZ=g@s z#o|o}dwb|b)<RX5Ew?mzQO+T0P)EvMfD;s==h6C(a2sXByhYs?oRPA;@_w&VbE<<@ z4d77eIrgOirZn%Qtk?D_2f=Qqp1ic=uJFW7!^qH#^w|4{`T9W7t+d#b_%Tjtx;W#Z zbNSw;Wj(A{ubWZ;^*aWtE;pVI>NzQBJ8L=^nQGR^=vD-26fc^=29IT2rzMhBW|@;& zSnGqJBq)QP^wxh^=sQ)_RJ1G<TosQf1F9F$5KyZskLXjzOR+*-9GxR#E<s2MJ=4w< z`jeR}y<EEn2%nPy>^O2-KP-4%4^CX3b^u~}fY75%&u0>ezO>xEp%8YnMi1oCZn}}_ z>{3E@L193&P}6wL3%e`ghRZ?{B}G(0{BFmb9jorduX7M_xTGttb#7PbytleA&t(tx zyhX-}c;Wx~vik(f{X>a4@CXYL=Wz_kFxEs<MI)1<o&xqF5R*_MWToi78{pRE+<yDy zS{0!Z5k93P2&*;`89x_2^y%n$^T|?JXZxG-8@FQl3vNk^fFXTJqKuN<fN+h2BPRnm z)2+FBSe^t1FUUh9w?^B(iP{9)%-aNnH^f!t+d_h?ID>m!D_UnO8J8RZobT+E$_$_7 zW?j3|qg<`I7FBUDX}?<w(y`d|n{mt#x@t+|0^U_Gf|4o@#Sk@ZtPK|(pJV%N#v=C8 zRcVMqXI>~*_)BCNAI=32IHorP(9=3}WVPJS<0?*)kmh{dcz5M)uHhGdC(+eiSc`y_ zq56nIK}?nTL!GhK<lEqBW5-A5dSVR1?EVa6EKV83Mw^Z4EKcc6q=R~7%(ulOdBMy& z686qQ0-TBxbCedrWe>UFMTeIINSvSGTY$O<BUsMI;}fN@LTR%HWamcUWFg(Z$u*>t z%HpMF;-H-cOr)`Zvb^U4lP|S|*w-PWOR;LcVGb^J?D2g2G{JMvXViGr8T+L}d2}v3 z)DX(2J&Krdm5D^NnY}C+sA>aprgqsPy@cW(m{`0@NK5ZHDt3`}2bK8-mFWP-&o+}& zBSod(wF9x*E<WY^bZhp8$&$&F6v9JjI^=LE%`>OQ5%F!5tVeK~oX$`nx$B~MU~^BZ z!LV|6XJ^j<b!l<O>iU`EEON_K@RtJZAm`&o&(4wNiNLRO?+u#mVuB%VnHPnitSH#o z1?SUld8MZNWNZFk1=V-6u6-yxR#<qy7tLAa$BQ$99njWus1<-H8FyuS(Iix42hfNm z(4z|0QSq{hcF0bAu&;+|dymO%0w@=k+^JJ6^Yk1gLoM?j(uyAxVOqKhCZHb{(^Md@ zZDN)aa5e-cSX_5NcyI>S2CB`TQh=R89w3u|SSpg1YD5|gdyeP<HaoyU0RbvKDs*{O zPN6x4VmO^xoq~GGe4z-v@wyb-#qvg^)-!8iCxTWt={!dFLcHU$p2g9_mIjXEA{pBa zy!k^}lJ|N%Wc04V)<;QNIgM7?;&pHCY&7d&=Dq=Q`g!gUCuS46@)=wSsixEhQlLVg zS0~1$cf!#*wZi{$JPhs1u^DIDZchUEV9-c(YFc{H%*f@fH`9q(d?Qqh1G$nf0l>}Y zg$p@ch27jCeDW(|fCnCX1%MaK+h}e2d?(B4x2YH8-ksyTBW+oy!cA-Zv6@M1N4r*2 zx%K_p`xenPw0aI|gWvIRfgBbYJ?8shAD`IpiHFHTnlW)`#mGlEMxvS3q<eRKta)yb ztALo$Hc?Y(_wAHk8<=qpi2;~ut|-kXn1;W2Zh|ZHD1R=oyEO}CN;i;!6+$O+duXPu z@e_NQPIN!_3$&}#e#i2-<+{{1RVe;iP}0`%Z~<7e1l%>q6Onrx%JsN6#*qw%?Mk%Q zP&Ae?&s=ohdi3`-tLfJ#w)fIkReK_>er5ZHp=m-9d}4%d;7*V#+=gdO>eN%>bCm%x zWG<$s2nVMUG|6Ot0e!=OPBupp%J_%A@cy`EKJ1y&{>p{CpCUh@ZF7E*ydj4)(SG17 z#LaH8OmAs%zhASX#wF~YArTQv0=Q_IZCR#=zI{wn$5BI-i&n+N9~*g!`>qIh6)+Fw z3f_4v&R%!H2wQyM=?{!r&S4YI4o<k5;%az&>~a~wco-9>%3=~7&6IF_!1L$80x`!7 ze{T&<m8cxC9x{I7w^q7bN@1~}NhNgK|8W-*WgGgV2z#LBr}@WX+7E1am891UZ+#{E z+M4mcrsK4$k+AU92=Fd8<I=hfBWCrS$ZG%al|1F~DL88r?zt03E+Rpg?0g~2V*A(k zau1-`_11mR=CWxs77PME4cvI;;q$#4o0K^^Twd@A&C1OFc)(<|rDY=hz9!KvFjF~^ zmgUN$+AH25Q_4KhTRgOKH7;6*=7@8#M-V={fyay1q#nyeTNRq*BnnRFi^amrdR?tq z;tkSxZ_dKV)o_cc6}=_0wndnkTbO364Idu76>^bhfQIDN@U)vp+gsZJ$g6_6SXPre zV0Qc#b@5^U1~5mq&<P}8v<;ELi@vuaoeVH1pG_ZBBc?}=q4~CA{OKZcNvuYdFvvI) zW(fc~NODgiXbdVDz#$y&W#@oUrpUEKT@$2}8YA;#J1QRE#7kHDOL=!E#q;}>%c$;3 z!kz7H^g=i2@|umEuzq}KdDh}bSL`L1Bh5`I`?Xt5wn;kFa99IHc&&4u<i33yr0`D_ zG?KH;OC&}IZ7;M2*0RkB^`&^8S+bg&yKj&PhbtOE(}H@qR0w+*lDGPRak`W?)+HsC z<dNE{Gs*oooh(@6h0|WEMAiyY9!OZ?>0YSXJ_!IIK<oZdkv>$epiKN;*PK{a5;Nd( zbx^3zLCX5NYN)z<6m_VrjSB}jtm!14Zs+%l8}G+EWns!?<#WkOpqP#8$7s2{UB+~( zrF{~yOwO~v>IV8_Qn+j&y|<o`p*Pow->7gSVHdZ^F<6r`n)aF{kSB;WCQ?I5*pis} z^vDJj!7=L<iqLlMjY8aEi96-36`s^O%TLsl*S#3FjYfPvQ<JK-bab|F6oFSXBUS^S zr~!V`1XYDD7kfCH{~9}{(x)XbyPfaSC=}FCC!qTkuKrr6Y8<lV<a)t+_$oaIh4dNM zhDbbZ8S}Bk1EfuAQFd!J3GFYGF82klvu<BmnO^apa0X!lKbD_L?pH6^bJP~o^)sIJ ztcH*Qdz&y(H2I0GI#tqo2F{r_hgauVb$(ZRWo>O%=+Q{q+wf)I>(OEVOtTPEuGzpG z_-yy6`Q{RObN(9W0sw<+R$NL;UqW#`QW+WT@_QYs*eKj6SW%JEl2`x+x-7P;O;NqP zc*Be6R%F1Qw?sE1uG&{BMAqjHls!+22uN9{KrvQTOOZ-i#)p&GjU9O$+-r^U=Us%= zMaK0V%l(8ahmYFys#fF+O1(O4y^tsP){`a&-nbxR<At|s|H>(iQ{Vi2s%6-|2rIyX zngtb=rSN$J*@eFWB8S6os}zJz=&jwE;p7#%c@zw&Eze|EF?aR)#Wl!Qj5}6>f*$km ziUmIVT|z6V0G;QRMLOQ-dq(M3Tl1BbG_q=Ycxq%qL<uF?OzX-j@<b41=F@$jWUV5H z&QEXGb||g&$A0$87bLbCwRdjE7niKZoFtGg6}Wbi5H`0)K`~L=DRPn|8zPFbmPGl^ zaBP>NAtd*~b;i&3@S1NPCJ37&#+)FsLN0=$HxfJ_44JM#au8PVXIHk3Nh>!N96zwC zmQQj0dd>C-S#AizAM4^9Uo=wD=IDw&s?FU;>xS+e?Aw$r7h7Zkzm?{cPi$9mXt^!< zJOQ}Jyx|GKtGKk%`}9~3q9K}b)5+0OQqLtpD5n^!{~iP7px61On3^k1c}&G!yp$C2 zg!!!s6_$Nf1};}FRZb&y$OeFbbzld>o>d#zat!rEuiBEj8zG<{0yY9MdDM~05R)-y z^}6c&7<(}cRbIGZw(PQ?u__l<dN^27wxD}f1(G`^wq4MpIu^k$33*{b`>HgC@(PL< zNg&gyI8IaKgJ;dnEQdGB^)xsTGwdaYcZYL*v$^d)-x3)2cUH~_64itZT}o0~1<VEr z>#cKTkECsNr7I{NSopH8NrG-JwtTqL-YZ<!3;9LP;7>zg)#q*EJo(P%zCKuudOjy( zLd$NHoG$ENmp*N4T(<22^$rBICW%K^dN69Z@9~;1ksrKIr&sBk1)^B*XXkK=Q9t>@ zp6d=d1<^JH^?JPK9Cr|mu#UJe8Ws?LwFhrJ%oOf(qgP-hMS%<R#3%r23Pz?MEgyup zm=I1knN^`e(to;M%?vNXX*+nN(;bnUaROJcL<L!HSrk=2f1nyi^1`!3aM)=%L$Kn+ zXNK<jL@i{~hYlq-dVElEWMIDPN_BMpbXA?ohR$WyTveAyXd>ziHfvEm-E6vgpm;hi z`yt1TN&4Q0JW58#lVQiH$pLALcE#VAhWns!wQ_v%Wxi7hSqH?OD)@l`AHFMh-jV^8 z#4tIw%;Ry<wwr}O>O_nZi5wp=dg+qxwJSC<)|VeiFQpdnizj<VLtg1@eWs;G=XS-G zS}di0+Wx)`7@v6dJlTxKT~#k<Tj@Ze6n)R6@X$7-Rj-D-Go=Jxl_g{^C*8j%*0ZNZ zZ+m}Tbvgom+JL2dTqO<%5Y!z9-jj4Q?Q|#zT2IJg<YbNI9<C|F?TPCe5qQbr1&GIG z$tROBCkLpwh9YOAio>IaWhg>9HwS;cOmu6oQrNZ6A|NIHcNM(6(9F?KoMF!o^qn>Z zobF(soX`or@TM6l#3z+cA1>e5xg~DGV{YP1>ht5lj2mVYV%UM}wCP+6zo0ZPGku|r z)ID6Wyh0b*6NVMw?I<jI&CX3996ZB^5_)Trq+zO&(RJiR*6%7!Jb2p;M|VE8xqR%t z1EAAu*+IAWm3hU!fyLzK#XqodtR{i$YS(rUZvytQN`v=ZPVY^6k31gDh*^Z<QmVI{ zfZCUhe8GwvPcuvkO)1Wu)kmB2hI2@iAH9!x7t9XWoSGxUqdI>sjJggGXy8VaL>@p( z%N`L$OTkv+^4k#egV5sijZ^d;D}qu>C|CuoCZD5P(pAAW{6;7<#WHrvjYYC9NfkBs zdD{Hq_iFw8ncq3o9Jt9ldA^;1SD*b|mqdx`TAs%dIurgH8lln?m0o!FnxS>N#09CT zn)6J@US63n-52aqY*LT~7U?knX^MemZ2QU{rSH-)#xsT`P3G&bo%ymQAYN)xONh*T z`_g8>6HU}VQHfm0l<@W?tfypngm-zlNBI`|pr=}zaB9hM9}nByg!z~ZZ6mVn$LWk; zgZz+v1SNRZ1a}a4jikHZc5}HMSsXGA-2A-C{381No<o6=(R8TCh0n(0CMp)X3n4l? zJZeU?TV$UVLrSxZ;yk*0JpVRgxhq_soba0(nYTL=9ueYKELL)2`}AB4T*@=Cp6%#1 zXWQ%vk_A3@8G%+;CSn_eWlnFF({V}~kIbgG`9u+Xx=Sy9Khw>$H?$=JC<zfYDhzCj z&Ckih<pOZ%t>5p-7D_l@X>gn<CDW5^H12psCh&@EY=_geyb5ONT9E~8QUH5v^6K@) z7M`Qr2HTO@re1U~+^o6dJMH4+c&73j&hr8e510(uD<d$h!0j}bK4&D-UNOEm)K1D6 z9Y7MMj+Uw!L!2TR*M?obANIu4*Ae2oMJUQB36k#R;umeGA*3;;mX`s1Fsl2V&mDsi zeT5ht&W^of2SmrN9hTSiajv=!SARjQu0(WjO9VhycInsf`X>`ov|j$8FeFyqrVswq zl<LfpCy^v6cnw_NwQXLFStCInWjSMe^;r206#=noVxq+vR+5fdIh@)1im&tDF;C@2 z(LJVEs_#tp-0wT=+nxOt#d0mp{HQ~lECE=h6KdG+uI)DPtIJFCO^p(@!)=0{VIoB# z?qc9&l3BqZ5MDNxpt~SdO0Anq<`rzJ*rksLj$z#Wc#*2gfGNI{moC_A8X;B1S{GDK z!`j5`3#B-cNi%#iP@c|Nqo*9&`1p3u+JLG~Zf&FbhX*#^1-cdTB`n5PEgUlGzk07K zo8;76aEoZ1dqCkFMDyhK$r>Q3SjkA$;iZ2Rtjy4eCK72*dr=3Jck3brwBghBzfI*K zz9~nMft$X?x^gdZ>+{Z)+H=PQwaSG!YllByHv$R{;3<(&9}X~zwCt~N1s<`vL)C$? z4hyY8DfSh9SLydk6+g6V^v(m=3j3|bbK~(cQE=P1vNA%VucAmWIb0db7HCo0qmm0) zL1U)F>mv4$>!^}oI}w6(z-}cb?jw9a{pmC0`T98Y)|&0pf`UvUC}sP}Y9EXu^C1fN z5`$FEH+f4GM}VlD1>VW@#sAuN$!lu;ggWo$GrRl%HyZ?fg(@I^`rWyu?9XIqTV1S` z3V>~0^n8m$SNp?Jv<ng8M!8B$Q^&;kqWuHjY&??OXhv7ksO?A#2+3G%9nbpO(aIGF zd$`uI{0qBXu7PAbgWb%<449F@5S;L!v3_1bH8*V-QOT$CqwOTH*Ya`2Gh%jYDn(|> z%H$HdUS5u8kn5FSAQOJ)i9IIw&>m1nyR0|J4#u+$=h4SYL38E!Ee=7(?{La7_lI76 z0hUTHw*^X^UBWj0a#C}(_paFotPtzVbaDrK^QA7v$Ts#B>>zdn-D|g=W^p-j8@!m_ z4|9gkE0tHPCSP?}y$VwB1BRz=10Jx!8Za#Qd$+0l8e5;pRV)@MpW$L`KPGx)V)2+h zvMPV!iCbJh<S5?)Bo(2ol-5H(GJqpij~w(34!5n;QRC~hp;nuE?c15#opB-+1-;lV z9<WKUsyRid{js)ur^y<w+U{>}rEUEutQo3!8<6OavW?$ibl|p@R#S9KF*}wn7`Vk+ z*PI(;Hjfw7?#nWDPSm^rHjZ$~JUr;ve`;L~1S?5-qb5Fx?W`3c#SD9-(Y#Gg+kz6= z!CW}umzrG6BlVh(>9OCtk1O<9vLRGHe<#)k`q{KPLfM+3-E+j9y>>*UH1u;$(s?iw zHdUrG>Nm||9y$?^<7Hg(>U0dj)j;VWz0iT2cvc4ScYyV}Ky+35^){Q)6`9lgSl0|O zLtm)kMmr%QEGhQf=4vDjawZ!}h2#77+gg;CIW5U3{i|9>m&cUZLs@ON_Xp!aA4VJB z;D}Z>lbgHc-M)|Xr~$nyMlGC;-V(_7_mOS2*6&!c_vaI+ca#ng(p$#bJ9N)z?dgGv zGaieo!&^xJ>1pvyx_PWg8pE5Z4gs&_@Yr%<OW`rB(suwZ(94sNL@6%OS?|eC8fR=j zk-=(Ys4R1B2L)XV9v9GtS(lUWP3mN}lh*}$u*&B#ScE=MBUktIaPQJyRAaZ(H@XRy zg=^^7s7cdj+m9WVH}@YAb|gB|e86d6?g}b*o^(G@+UY`ZIMiLBG6O<fR?!$W095xT z)fEWnG>?Or#I$W3YIRbvWf1KSd_GvMJQkR;rhT6|mGFJcolcjfi8QgXfUUQ8UbNEW z#fuWc`;$Wq*uA1&Hs2xoJ+JT153PhMdrcp?LZf_09p2^}#l0AhpMKPmlk!&=6=pNy zRM=RI-ka9?(Bs~Dl28$b@j9_a`Q$^k69}*>9mlU1;#wh&)1%~g`}zc82S%Q?RtkKh zliE8%+Gxg3!5}>|ZRE&~d*#PZAo0>~3Dk}_UT*pXT9YGGD$!#kp^?bWWh4>^KJs1i z0PcF<V-fkp5IKtsjd=7zrfNt15jSKPk}}ILEi7a0)x;2=L`{n#)5`a5%JNitISuTR zlmqCREH7irT!3O?%xFe#row)jwyk+}e^pWo7ZOJyJODKY*DeE(iJbBMt;PU(4Nz%B z3CO*4qOdWB{eJ435kNpCV6G~!j!VMeI9nrb86ONLx7XBK?DphUk!GAel~%ULcJm&R zbyzhBUC?OjPx=okQ{9-{dlxtUyOHI~yhjM~7=(H|bsHhY*k5lkU{l=pQQ-p<dZ5@F zy7nk|#!(b>W%@rN`$0i4`|6*6jYuYSrpMKOzS1LSYBimF&<tTRjfx=@jy0hSejW_^ zU>0uT|G0B72J3iVMcHxrJifUMK8wJNKSG6~Fea%N%>nZ%e)y)yK}uUsAvbozZ$&R{ zXBtHY75nILoCjkuKn%)pOP=~Uo>97v&%$bkdT*6eAp!}lXCrT`jCcwU=^vLtP{!)< z#6Qg&Mttyz+h5@mx`V&zbHh%0b($}RLP@~2-GP+cMd^ochEWqZ65v#%Yt9R<sh>ub zKKTtw(t&io-O%sA<sf*Gw1Q4@laS_YMJ)j;%g<Hdw*gOph855o!o&w+S2pQUMfs_B z!8s47pp?3rkgR;V<{9Ph8R(E9|LJGIc*Fa}S=SKoHC$H*1a5`_ZkH>7@E3kN+=cP~ z>M{GPDfWNjKL2->vwxY)zIt`OxUMW;CNtJA6vcl!(3$_{GW+k{=U)&0Ke}eVqR9X1 zGUNDq<sbI*uR`Dd%X0RI{ak`x@(b=N|EJOHkM^0r$A|v`bp10v{FkTeFQlu>zcF3? z*)8_JFkP|#VY>QTGW&n-QfJ|0{1=zHnwul?V@48Vgg2zBfwEdfY)ZVq%s3>;vcSy2 zmLx>XC}Fpre>Yo)?fN4tR-`wUMBcQqMB@JI0GO2_L5={yHiX11sozu}nf1!qgR5if z`g<7eOASA0>Z0{yv{zoy<6aT_%lP9fX9jr+uT*SOl8e;!%OV?%X0w(0Mek0TgUUnH zn@aUr=V0Y|I`H9suUqZwMa*Y4K)X9Pm6q#0+i+Q1TaU-WSEXR7azeR_waxEhE9*AP z01H(wndi-SWujke&sK)BsZQmmtKYG8rY@*9wG^5U_kW+H?kt{Q<7qT#5vkL-N!-*J zh3(-<RPX5wTgKAHzLGpjHAt#RElA?Umc^AN@sO+2x#`ph-uUk+3>(Id$D)%$lQv30 zk&y7UiBLToZse#xPI4uD9xfknuJ`fwiO(n!0P3zGb%>^GGTH98{d%5<&Q!B=+WuJ8 zu=!Nzp7GBw(|nk{w0_^n>KLxoNuYTm`;4MRvg!LRSU7!#W-aJUA6xO#CeN0_>o?}m zF{X<~am!AbJvb-;Z&hLBsIx_26{BxXon63}wuMS?L=>w9L`H}~Xw>5M%JUkJ=ohV6 zgGs^A76)u01nR_RGM8p_Z7c+zJpC?q2f#dWb|2w^+(8Fh7LpLndZ|UW(JAc-(Ajuq zwetQOHd(zL-@;e=aL=4@eLKXwCJiGvAX6WLNQhyhQ52fI#CL8JQ6?C<=(89C0+0_V zfZ+&Mpetfzn$6MpdmEE!H+yXZx)cs@9a*bIHbLogl{}l@z_jk(MLfB=HM>!&!T6PW zv9=A}JyRKUiy!Y;@JotxIC<}GN$sm1ILt8zvE8?viSi$(S?H~(WwX1!vJ+D_a$O2T z@K@UWf*vTxa+9As=m<EW3k$YZYIz&doEl}cRhUDmn;cUtPWGSuwHf*JU7-2^BI)UI zb;!>2r+OK6I)rJ(RV>yUIV?>p$c81;M-1~$7F)Volvn20Tcec~rL@+h*8wz)Tj0Zd zIpe}Ja`Kz~Z)as^Ce5xz5+r?JgdX5GR|m{gxnM{~Qxw4bz;BRzbf4uMS#LsGG(}lf zNVf~^zh~xCum~thI9-FoC7wrx%^t`v9ZA7=ff1g<b}K$I?64h$2TsAB&^w!nrlWLP zU0C30U#UK^lD=ww_#YK7!6^73`g{6MFIHPBOgOaw`+6q(Tc^otG6dp%p%gxJ>O!HP zfSx4Y6)U%3II_`RXl!QFcG6!H!<ity_SF^HLB$x9UyS#uvy_5p3=Cox`6vQhnI5}7 zIXvO{kESV5V$rsrMKY-xaY1$JV`w3iE;T<Vzj@}N!M=<`VByhraYsgt>W@WN&W0*H z^;&u0_-`WTy(UA|YyY%8OIRVwguo<G1l*J-XvU{i1z8DztiTm9>;8RH5(#r`RohrB zL#0%Y9{o++EPJKMujIDmcKEhB4~mdDu!T?n9^vvc;zJ*M9c-1tatQbI8pg@N$c~Bu zHGPLj3q?#&o~p?e+)bO{3@&LL&4lQC@Q|a23|nJly+V|QczvyV2FLHJ#FYk3NnB-G zD^?Jd9s}dCg<^6cV@{z390=Ed5thA`XSEYwBHlQ@<jk;p>Za_h$7|Ob29aAj{A@_p z{8RHhcg@qp8Z6)HI&0+HT*WcsD}kI}y}Kja=D+$_mdU|xYWA1=9ol>K{Hd~K)w#sE zz+R(lr4w!GZ73}XBWEMMxVJ5q8hTpBPfgZ8)8LRxm_NaBTWqGfx0y-K)F3$wLU+N1 z+6NWdiR@pl5}*kQ5Hc7<T{s*(xE%zMFlsDXSdMlexHwK`(S~-84v&<ceGr6Sm!J|x zyUZvw1H<ZGg)u+|6_C;QTrp_;{nK1ts=(@914>8J<_p~$ApP0eNN9BwtH|d@AJ0Vd ziE1`~=z-aW5p4wU8~cC4L?|vD4739Iw3coe=}|G{!~_x3Z3vC*)Qz61=xoXk_1LV4 zQ`0&RNDuEcRB?+rBV@GeD8-em%!_cIYTZw?i1(L5z0!4BSlbwza9igXY2x~8c0EdT z*U|U;JwhyxyxZZgP5P4%uAac^QBfEI;pZ7q11qZY>{LJFjG*OKhn;S5ZlLGO649bR zgm`TewUr;wCLhThDa2z?2vARCb5Ej-IGSyM-{ASEf<5@vG3Jy{FS7BxQ;&0JdGmd! z^A9(IE2@P=E6XI-B@ME-;M(fLWO6Y&8kvo)V30f2O~cH0p|Bc*#d-movORWuEdAaI zDP^iB7P~RKwN<*pBuI0!ahjJ(DEQ^YMZ@NX8kN38gClCI*G}1=tx!HwIag)`Q@4=^ z&UW08gKNs~_89j?+wz&h_vhKlM{J#322%zDFIjFca;4sYTc1yXa|D^4<3u?i+7JOk z^OD{Z;errk=@~SL%3eOc6GE@|3ypx@-L}_9iAzG(!^oG>|ADGKD;)>BQ(lJ5WnFco z4kSEt7~Ex2R9@jLrAO&GH-}dSy4<OkaHHj+abd77djtgM7o|UWbaI_q*C3`Ly6*Kp zo!Gh_g`_qoy;NS-jhZj4b7KAEyk*S+G?<KdMzbx?Vgb!T!J1=!P0E!Q;E5h|V3KBN z>jXlsuYisiW?vG+eY8`Iq}CJP#ifQ^+zU1=w2&6?7)}}HT!m;omKw}qEv9*;s|sz5 zdUOH5*PDm?+Cqa1i~6!&UplFr@v)zPob;&Z$rJ;XUty9&^_00K;=x2i;-%IoB*KJb zR%Fys_0uJ`Mkj9Zh}Er|3}%w+EzSvt0f7lWfIO#8=%J8UlS{o!HbVsd?B+#!s((i+ zUQ4%>p{!D?1xBT3ME12~4RdmA*g6rXYfZS6Z;bA<k#-Q;IH?96FYbqk!C~tQWvESv z(oy%trZ{|G;Wi3}9sb68;Y^*I#In&i;QGU5uZk-5`fslq+4N5g5ZT<oMp^y3Xfd(C z?IA}NmvIUXLU7Y5{V2>-+!hmZ^Hp=TJRMV?h9NrZrF#8Ase#^EBWWz2b)SY)Z9deV zIl#Dba9thE7uV{rK9dM-2-{zXRVGC_o$N6{HB#WQ?c{LOae{gE1K&-{i|TCa+JSy{ z6Bmu}Wu+f;P1(<qod;B;ub^ggqE~I2+VYaZC&;nk`fly$u=tRKudD8}9$}1Bi+9?? zgJ89gi-HzZ{TxI$$@TvULev3qRMYQR?wrvriZwVotGv{3(ITfsj1;d-W$Df1dKV;@ zK)yA#G)KV^Zs1TES?zY_v_lkR9g<V<8<4tMVX@d&VSzQOtr5M~BVMv?(e2{Ok!m^a zXqa+e@UrW)im7PQ=cuJRF1`NHRH_Dg&$>(nR@1j*Jswl`5ymc`z{^M2B&|uUO-74o zqxt5@(CncoDOeVdJfQm<#;s^o{~6oLnZqyR)y2gQ06}&0$HgSsT=waVcix8uxUu** zL)|q!Nm=J;<J(F^2Yf(SKw#6*^~!HQA9qw0+me{w=6KbPdLeV(iCHwSSz8Vlk2Wf& zXUwP;5HA4u{1s-gG>9iUZR9zAYai^SBXFy)K-$yntox&1^|7SGN%!h=jBO2(iTGdV zgIQ1{PFd&^A>;0}mSp8+)n`RyNoUeP!4?V6BHSSW4H};GBCvVlBcLOrPRZw%`-ruj zi|_Ol^@BzhL>9mnWQx$qu5>73Oc5bd^<9qX1kucny9#L(oF!9}@9$`(E1&BO0BI>s ztW1zyY4`F0HuPeg)(W;O?JoSRt*}+ZU|%j(<@TH2W>YGg69->!YXmNQ$F&0@cJIOV zLuB*sr^1O4HN(?n&)LRurNQVOKE7I_pUy(*u`?s#f%!<COiw+F0}h@1^{IImX`(wu z7yAk9?H_G;*OhkkYd$H2fhS=zC(Zx@*JvIOIVMtN85Wy5fy>mTMfIrLP&oXot1)v3 z-OUhg0?yBBX51Ci7*?rw!L<yJ8+yEId)Ipj=KevYu|ZHP+s+arK?xY<^b@dvi#V79 z<Wn~ymlxO!Gx&HdTH#2Kk4oJA8NeQuc6WNM(M6hvo~~cNPX4W%crfwvbzcr#HY3}W zFI||N{66?xAG}UTrhU4tv{3CH3k18)G&(9!+@Cm}fj~~z^>9QLA>v|Qg$DU>T5dny ztCuM3$)D^sL?QG-9J(5@q}Fmz4v8(~weZD9tcoMh)o}%%!jXUOQ~q7<VLkDX%4~~p zY-&W)Z7a?sPz340-$qzOwaC(pGR-FKV;zL*EjR8=yf*IJO2C1g#HIY9?r3jw`V$$Y z?btzYt+rraRA7|Y22^Cw1g^h*ayDqug7t!XeHX#ei}=j@ySTHFqy&0(UoN^WbGgA? zMAZCdL~(O*zy`ihkvMb(@4a%46_~cz;l3HNpG{Z}X%c}V07<juiM}F_xEhYl=q8D1 zo^U@#@%qm1^&RBaKIMpC(->yR<pE-6-hso%4T=%p3tRovtTs|?e8k)!Cc1>5;^@!} z4M(mT$(VqJrH8hGVFRn@7x5m%-}Eh@c>7&~THdrpy9wPcRgWt@ym62Al)Mmd2pL|y z%)iM0HePQDiS^3$a}(P1oH~B&hy;nSMxA}Ho!;L!9-5@uG~1wm=TK$C^%+(>F99;W zG({POat*A(U_Zr5Wim?R?GU@>Ty70V;pNb?xU#m2bc+TsVgP3pR!JDLoM0&Os%)x9 zJ?FHEYf(;U@_!s%7Q#8g!73dpXiRAEvPIYHw8?B&dsy3eSY8ik+x9qYxFSRW>tH?C zAdkQANi$`JISC?=6ejzXSAo4UI`3bqg%zL%)wwMf@eheloRvFJJPD`U!HJ@3Q6K~Z zg>v~noJgjYkd^DS!=LD_5B4^tSy&|t?3^#QLk*m<xsCh&!rEP!)5|xFA&1YMPnp~h z>htNz9X4}%my)rZtCW8*kwUft(JV|QqnFlkr<d6nsw6mrQG+cTABa837`N03>H5~# z7)>f}w<slBFDDKU#todo5NGLGc~(+qf%Wa@x{*t2H!M~k%Oc*u(`F?0=8ve6`GG|> zcBx%go1gBz>sGo*gSVMxwp6%b6ht|$AmG=5dQ6R+-(^_~sHd&x6Ou<z9WOAYIcVCd zJ3k2M!tsO2=*gmX3xjjAEG-nU9d`;3%uON^M+SB>nuW=bzN?*FLODTY;D&I+6~PS# zEA`sJyyZLG$-wUh;oU423s&5iv2Ykz#vRDUlD9Z8)_;9Nvg8KER+H!kd!Xjt>XO|+ zgBBBBFJwEyxG3~gZmrB^#c9FsJY^weBPlBv{5Jrt=ka~|&h(W#kmKcxdsllnikgu1 zU-9(**xiD4bO?vscC;|fKy~ZZMdpf?4lB6MN#(@{W)fIwznTQJ?2^<3n)7q;wJZdG zV#%g?jBaCh(K+$m>>0ufRGp-xY#Il$jLA29TO6iOf$-8TJQOzRbZcmnnSm}13hDFV zK*b*05F$kd=8CdI*+<PTLUq<pNhdZpe1lVt5>rj%IDEl|8db^BXGBx#*)FI?1yaZ4 z<G27#`4If{MWQ7%GWH6{<TGZ$icqSNZtXuLISm6->vu!qs1nvf_5{3pKZ_xXIdBIf ze8RNf!FBfvXw5Xwwut~zBg$lm5@C$$MJ&KCSAOzme<X(<P-Awa_-aa-J(btF?A;$S zESzsC4@T-$S?J%3>igz3fk51)GX#5E@}%aO>!G)~UE6_-aEEALW_OKac?0DgAv{-~ zfZ-5QVI9B7RG+D_u%rCUxOz$tqi4ye2hGYu=UrYEU#t_jDsb&MuZhmonGqJ(ahdwr z=sF`DojSc-8cDyCA7ov|jQH(&l~Tkc+Kxx|C5H&Zz)ifO@PHk}b|Aa#f#>%V1HT8v zySi*=XThP<6VRGYYwO$(v&AL2Cqpy$r6$<P06#oE)Fr#DB5q6);@uKvWDcMZ4Ok0} z(*=3#zPU&n4aeGau+SWNf?gMVVde0N(L?^$*jE=B8R4LU9vz8<@XELMMsfd-Zuw0X zca2}o4loiGLI`9JEkxsLm?}y9`R>2inq{U!O|h036@P%}1cQ60xWhZ};qN&Fy2RQ5 z0grZTjB{%`q_a1z#wE*Y>DIBY#jW9|Mc_i*LkZgf;8^o?>@>&TSnuz_cI^76M~Cp^ zj}MDuPg%KTw3a|F_#eQ%>o{;QZ~%yR$B?PJFkf1{R*v`Qwrv$1-GDzY7gg|*pl8jL zqb{n3!fWa@TKiRY&mSLp&*PY`F1ub}PBHg@-kpHB6MR+I!DIqtv3{0vM87o`$IQaB z(<_xv@mG2{o-Qmb@Rob%L0TnW;{Ym9uA%c0NauH6y!0+rx=-Rh9}(eg<P1c*g6jmg z*hh6`%ltU+woOrp$><vySL0m(ubfn!qLNF~wze$S*T}}@azLGsUMefgj7@k>=Rxi% zOgKKhf233(B$Kd>E>aC^RUs<5saGV+Mg7fT3l!WG6FmtCUh2#ct|YpI>W~amuR^V^ zuA}k(8@UOhG>DZmV4^B1)epJphac$5#F+`cVz&rAVd8VXs;!p?otvfi-LYHaH<C|a z#^J9*wExmt`qer0&+y}ao1s;gQ<0HY{i`~ig@xfy_|Bi}&95HquPXKbNYFAc{)4Ld zx7t#6hCh<8|5;ng`GrON8(QQ4$=3L<5n8q{+QvVZo2*|D#ecFj{vd0Jf2}rU{!GyR zqp|9b{Ocd<&A*bbUxC+uNxJ^M!RkMGiT{~L{nsSwSNQZ_AszqAf^Nn?3c4BpR|VZH ztQ<^#gLHVQLVi~|Y~TZQn5ZsRHh{A5*y+ug*9ciyQ7?yqOW?{4g%C<MhPs6zG<p*@ z5i=%3>><Fwu@}$`X;}DO4>#Y?u;|`ieyOvs=+e|_dH*hW>T$X8sw0bL`717=_VXR~ zb(LqNH*)9N)sPL04qm;<Y#L~he>OvDJ)ORV80R5+=hwX_%K~oXeN_jCc^-PcTwqcb zxCPMuz^;Aea{*bAvGG8@9JFL)l!RPL0}m^uyM};`iL|7n^d0|tK81ye<ZoRK0r!FM zu`*@OU(E_T*+<DsO;50p*e+zG^xmiEF6bQ}1G(&!7PR$Ise<K2CJNXkGIP}58R}C~ zg@fcrOUmQ%_vOa(fQkhyK<i^QMB4?+3(*uTiwRB)N78O`$dr^Q=_LhZas$5@A2bde z;W>&WuRMEf!!p|sKRxoqeM1uXe|^Gzf@}0d=);tOTjJh6BzsM|x!>^a4!TFc;*(=6 za$KxDB_FP5Cdn@G<T&-LhjF)&xspPdd`w7H%kTQQ`~;Fbwd1pWJPCL_Sj%FD(eK^x z=k}VY7qb6~HW^qelZIW<irJA1z*vCOa^M3X-j%<1uJM;^w*Tr?&cg>6fDLGwUvI`W z2WL;|jlqXn%0wQ5x-j$IHgrklF+F&U&t0WF*;@7smegDC-hn~gsqXJ6MaYa+X(;DG zb>sN3nl|t2;lS_#M9UcA$8FU`c{#2T<L}!!v~RbI5ge>HeYmf$b5wT9r8d(`b2Ar> zVgui=!GwWQw*3}0{4I($T$GWbg>IJaSm-t3b?LgZRqi>4>KNZ`qMI8$Ze5%#(iK7& z{LPvgfox3Ah0e`mUA)9LTl7d~wWqeU(+z#;NjyIseS6-6LEK1h4lP9`SdCO$rGgS| z7~{Bbr|GE)7ZKmoGXgCS6qisp#HZpZYVJq(oy_HN-r}Y6rXT~@J3}R+5^DcR4_KeZ z5mrXEB#7cbE|cU>huQG(CdHfB#40(4u5LKj{)_aL^La?`j^1qW0ZoRrWB;5;#5G$R z1@dsbMP~o)qW2BS$9xWlsNB+{)rQ`z#>Yh*;X$=6aDd1|8<=sKrEXXQzTLYnjhr?5 zbr-I10q&KVN6N@hEt(+=;lqLs!%(leQ1bHlJcmdv5vb<xqC)`UI8%FD-7LvR8_YG| zDe%1CRCTLw@um4$ZVZoRvTsoJ^)-e0=gP>cq=Sizj^E7$6k6w#18Nl5R>2!EunKbX zd&bf;rhjwvRfLcwOZf!R#b3gkh0cm&_F3U)fc3v!ciu*YG-aBBXOVDoK5O1yjC))G zthIwCac41I-I~I*Nk{33Vwh=yFduPqC4**a*;kig>{t7b+Ao|%RhU@5R?{|wX47IX zB-&$P1W*Q@VtQpMwAN&Jd$hSv3hU^Ox!HEN=g{e!o)8`b_HDdZ_<Z}`Pa!Lgvou3d zB0XP(*+<qX$ugArmisc5(k<=7tQu_Olpa>WhG8M<4=xrt&9Dz=sDL$c163OnPc6pj z)ZF5!-NA-mJ*qp=KPHWl_Ucr9<a;I!s4?jM6h#%Tsgg36@euG^F?a+)vrHZ>?8+6a zgas;JZ`5%=VV;$hjM<ba6;>?nXAO6Qd;wgj9Y?#k`l;5pDGaxZGI=TX!Yt`B@iKKw zrZ9rzRNzh2Ua23L@g>7_Lo#9TNf!diavOt&-KF`uZV<Qvx<~YlS)5Nrofn^=-5ici ze%2bIIW4|dGt!G6_-!zpC$_L6OUT>T)lxc;&?9dE?UOrp$w9in&na0JvX}ecEV)~? zf8$xoIdl!+RCdA+-gO7+*mf(s+8X&^0W;$9M@kuhY;N??vPf2Z+n_a%eiCs9sb+Vd z+(h6s!1$g|D-=|w)<Wf4>UhNfj?0jNh-1HXT=mN>7ba-^Sr87MB8j>Akrz<}*g{$L z|8RDW;gvLOwvKIgY}>YN+qP{R9ox2TqvMWk8=d6j{pQSkI5TsdnSZ;k+Ex4Cvumwd z&%KQ6)o0@MWY$uaaUC^0P_jjitz*oZ?B4q32a!0LItOSSV+W}lWk=B2n3hddA|a$O zUNg$#Qi)hOk#s5-t^`>K*=2f!W(;4K4ugf{(zhA*$WVgT_X#dYL%*E$*^Uv~IMT>W z1y7h~`>h;n&?CXqIF%L3=qz;3_tQ4H))_|C^QbIEs>=$tnkr9=<o0h%_G3n4noBr+ za4L%*LrMgV5@_bmw(AGf%O<THe3CY}K^_3+!2N4B3M)Co)WLnlrWOljV>BizFuwDi zl_|doc-swL*PR9@8YCMJ)6)Wca~I&U@IRAT(OGNt0)-ghHD60{{9dYY3bfz{v<a(o zwt@PA(O~`Nk7?Q<owDzPFG(}&aq7vyNqP!Ez`XWgk+>}oZyIKDI}Ewh=;r6O-jKoJ za_e$;c%y#z9i*0;nT^}HU<)%n1JUkKWbMr28R(v7-nL}9dTB|SSvly~Rzt8F`0Z*R z6;|itIRxqv4X(xUfC%ifBu#4nLDu;w#_keT+m5B@G@iqhCz+pwJ-h+(ofNCB8;i#t zpPWd6x`@@gp%{x$A|qnef;q==P86_QOb^qS_S$n}dO<WCbF(f~5f?xq7LiQa2rdoC zg-0ybFcK7Pl&Jl>4Vb+GQ;N}9DY6olsmZZLV9Jh^Y!`eRc}O)N{Ms=u&9RSe45AEs zz5!JCcfEEFm`zhCUJhJ6A{9wIVW96`LpFOW0GppJ7^es1wjHp}O9jU3Z7|TXH4KJ` zjm5k&YLrK<373@^iyuNA&Zj4~O?se^4%aShS$Fwu(%GkM&}u>mDYU^~l7QHMf0gYj zVPVN;M@N6<pA8)hN-|GqSXLfGp_7$xRc_b1*`L%@Psq}ZTTQiw+i4=U2GtZeyfFxR zvsX-ogMN`UV_YR{x=dI}emrriJur2bSY@;OV;$jr;z_HoR|C>W-%u-4@wXuUEduv5 z_@UXA+ZGYHTN@njpBFDuxhmP6#36nAp}7c1)L{4-yNC9r-#<6Tw|7%kZY%6=EtT?V zOGB7dx6Ricc|bM;^D=Mh+j|<e<ZFGn5B8}-t>E;I=jwpT7DB{zY3V4x-@!$ogY3Oh z-Tb)&(g@(rRav+Lv*@n!MV*2UZa=WIsEq4UwWSok;4@f|3Jf|7;QDh>Q6FPr<2W6{ zPFlib?M9w1j9fSB^^!uvqQ&VJ{>J8);t2>_(7*Za`CI>nYicZBSty!~YMozt*DVl5 zm8S(Fj!Esj4~HB6Vp{5C=RvYtkjl(~W8W}eF$WDb12Ymx{-D$(l_h1Ypxk+vnLBg` zgn(6jZTuXc1a;db>_<FFu#<DlmNM+(5dk-wyOO~k+^>?cCVrGLB&PjtxQ(Uj%hro5 zRlR&6&t*kZ@@W<ENaHMGN@6RlwLn451#riAX7FFW%SQolm|)gknbw<~9b@5^9xguw zqFQ5p2=Q-%Q^QL@(feb_E!tluj4Yj*X&n`JcKa@JPlQ7GzKmI|n9*o^i>mzX#qGV! zv`V@QtDEnQ>uj`k0;3NtvY3I3i6GyHsO;6bx*kihF6HMFx>nAU!lK>@PV-+wTX$9z z^YE3^(sdKVkrbwC4tUB94u92?Ck~@@<@()|rL99O7Pi9gs<q2FQ&9d&#%Ja3Im{EE zHMfFM8KD&OZGFHuw1emHT~}MBt&h^A(yFY|G-=liHMU;9Dkv$@>BRc3Z5Y434dJlJ z(yUgjgak4<a>Su}scxcWSVrM;c{<NL9$B=zo<Xv3NJThhMimcxVqSept8`&0!>oTk zQSuWCnDlmHtIB9Sk5qO>sjExkFyL_8uiP}4<oMCpPQS{hV^~gi0CmPPU4i!GSEM&U zhvc6+;|ahe{s-sENues>fYu5t5|!ukuGeX$cd`c!>{8|VXm#NUJn7;cQ4=WvuPA^3 zZ;I?`ug4x$#d6k#zZVA^j*d}lL;z3v2@U0m`_~%6uW@)dy%TWU`@`X2Hj&Th9drKk z_Z`23qRYexCi)agDFf{VL6k8XQB!vr6BW1v92gtArUR`z7nabBNX$WWn&Y?vtdp~m zewG#$)?O&TA=)9fkRA82EaC04jseUCO2au>6oPfcbkZ3Jm9Wl(VJ&t3SUyIc(R2K+ zFrPlNWnjDhZ+HL4WLmt2m1xzDwo?+LO0XXUico@4j1#V_8A$6pKMjhuG<B*tQpwOd z(sPpiqDh0M0^54hGU_;wg>|`+u{PcHhE3a_LM~|zT5d#NqAw{!pNnm}pp(w(m7mYy ziB`xk5l1Y|y!|Rv)hA$HANN~y0d6*+uC>RMk}AW*`DrJTL9sAshNG5F>BLSrlzYrg z(rTI{Orlqi)ldQ#Fc&Sjy>0IFH<pR!ZXQ7my07#L$AY`N>id!{(U35kFIU(XTd+Al zvMQqN6flakf9Mqa92aK)Nx?)u)r=E+q_csCY&pahM*OR|u=>P%A}DIs-9A&FmLyHC zh{`e!haOcWRXvidHR|%$<sMXVKrn}jMuHTeBZD}$a~A7DyjmQ(VAh(t4lpua(~r2* z7dUKU(+Zn2#)MFTNXKHym~L;MyQn+pyGRW)Vun()xp>VtgK=}3k3y#LK<b)w;<nZK zJaI&x9$`wtu`%obq8_;u)A5&7A6w_*&i7GCw?~b<p7-z1H`f+8{eRBQmI|$ObvqAk zMDJOfpg=`UK<hzbulcOCKdjF?-+Nnn=5@(teZl@9cXY!IszZRrz3!aSw1Hmty9vqw zcT{5aI2byvU(HO&E(UN;WHcr%rl*rfpl-;0Kc&>SvOfFtR#_dc+l|()4cO>p-@|#P zvRi_~1%ylKHDz%QLHeG$D&z3*g1!X6*PAcA4K;^kq0OSWGNEUFeWt#5{BCTQHWfJq zzaJ`x^>S>xpsg1A{k-@@*_aK-IPkh-F?}28va?Im_IaG(7A&FOe_aUsK3DE*yrhwk za>E)N3l#wov)SZn3t~F9H8#Q`=?O;t-q8*R#>3qA;>5SYe6gmZB?q%GI;yQ<A=sJl z3sqFTD-8`>Gf35H1>;U$F{C5KXF0PszQr5)7Io1V)i;HDs}9K)df&<Do|ubCQPOaX z6w7*(Gv1N-vB(<1Cvrv=?}}$`!4WB2cx6Bi{82on_(+k5s?E3Lezk{633rBr-pI;c zLJ$T$HMtYVMl1k)IakVHWtT;;A16q(HaBqQf`@aiymsy!Hhf5dh>-%OLTZ<PG$Xa{ zetSZ5_j<**HrUF=6B2ZV#aQvQMEkAY^sBvg0WGXpM6A@2vRSd1_^OJY+!+#<_eb*& zmmkd*F5|EhSEaG@S(n<WgPpKS<J!dc6bhu{!VcD1HpgW$Y1K65be(L~Oo>#ZxgUIP zxz6GCuM84j9(_(<zh0RT`v5pA__RlPw}SMLxX3tfl#kh9=B;#eYE;sootzkpe{0*n zX})qkG>vQSa3ut}L6HuSVqC*T-v`gN*yV*(5wyn9=n+yH9Msah<DV4DU@hChXiz1U zqn0I4yVB}gBS<~zcqF?zF;B>w<iR8|Zk2+=!{c%^f8CYm&K4M;dEXStmCTMx-!zTI zM%VN#$JX>LE~{Vt==!X)Nq*sF+VOCQ9htS)@Z<XvcHdFg{b5g&9!2Jrv>a&+12y5j z-AgXiz7#mG!J(v}84|vnn`Tec4gV;f>6XaT%27^8=sGdl@XFLGthO%5L9<Y8M=}z{ z*~qmAQxzSXSTtk^pZ4<)P5v(Q=x#B%oi}T*A~CyP{m1g>yV7SYj~7~Z)MlYxOl!%- z=DO+m=}a9duN7;w1AAdO5-)HM9YYMbtGf<_E4OI|1}&#<2tzNYu1ig^Rq}`+5*<@K zb!Xd-2{&x#?s(%3v!RKk@(3<HH0U!wq}uBX<-Hiuj>55B+y#ejX`hn{Ur|76>kgv4 zkYGPw2iN&~Cu7xZgvIZKM!(x$F`%<Wxm}l?-e>3>N+fP5q4mhUL=E?#ddjtA)fM5k z^6oXaJ!*}V>9K(f<r2qcD2v67<qewResZ*7%sr|k8eT`7_NJ=HpF}B=LXMj&(Tn(% zmQ^jw7f04In@3kr4PRSAX__<>W^-^Z!NjyoBsIiv)k5o>iLrJ2QkB`~)Ce`LDhuwJ z3EvOZqulMs8<js}afB4UK=ms|Mg9}Vj{g7Cv6Gcimy!|wcI*^ozVUYd>e#XT<=An2 zGw=RW$ByNn96L7pZ{O`79J_B)?tdOf{OhuRjwAlnmGXDT?)%^$96Pmd4(@*t?*0u{ z_syaEhS2?G%>5U|@@{k<|LnqX{4Y_t9DliRe_i}PCciOqF#jX@%}3S4SxE)c&tk0$ zygF}s2<_ZM040u-S|m1h2g-56R6uf)5Z}4fCehR)u|*=or~7nr+0-Jl#Nua3eiJAZ zO_X}P0_$%Oib%m(_h6>LLI|fpZqqFE3a6P9jvTsIqW0&__wMaGA3RtI83A+VwW4MZ z(ARrMC#NJnQ({L&B)NG&jX!iBJ~o(Rc|p;OCrNR0OuK=jJIUqSe33<S=5e#$oj)hh zS5lx$k5_)CKzl4eTec5(ZU2eDhlo;pXVoLGK$eQanxLYrv}`*^@1X}5P$jx1oW-|_ zZx$y|46YJl#g9sOj^{R}Xn@fO=nAS5)D>`ycQ&THV^1LpBxF2*tELD^P!#dYs43<X z|Dcqa9y1A6K=H!fmz&6Ha=Y7dX8zdz;pAI#*c&4K%5gZ$63&t{24^~utVA_Cn0T)- zmC1!<*T`;Tu2*Zplo_2*()_c!EeDvy0WgR|m8t=@VOR2@u^($Y*YUt+P=ZEtn91QL z^Z<?^h_3F^cu*7NLBn;z^E{Nzy~ST;C)@DUGTLL|&S)(;*Md(+Y;kvJ!#0Y!@fh=> z{pT=tz=SYC)ReX63kp6%wDfzZbijiC2z;vn=?r$z={>%v>|i>PXwYz)kSxh&l|eFx zD+dTenybs#Je$^yDMLH}gL=MJTZ7;l@$yQ*u>K&!5^5v*%am@k=Mwa3II*vvYnJN+ z91nvpo&klHimr*(?Tkyd2mlfEIQlr~0cium4B>Y0bw75RC-|Oj%MzS*Uu?UKtW0;e zwB-=V?2H!wd>>L>m)*U2|LKTbpNsvn2Z68m$>gnE59p18eM;5^$u|ec?gS{U_V=%e zP}xNb3x)A-{sq%6a$S;$13OikJFj%77w%ilLZQSW*RQR#^5hTxU{$DS?k?Jh^6-At z-(ah%ZDpMYM5ny;u)J>{JTDMaX-=tG%54(LisQU7190<WjMTK536=d1(KdP1#F%p( zkJWu){VVc2&F%r{SUm6jqkIoZ8d5O)b`0_!bI~)9Zx(K|(!@7jYp@QXNaWO#{!2HP zD31$s=YV4!Hbnlzp<43ox>Uf7@++k0tcLZne(rJ}b$6RC=aGxnlYB|mTC9X;`iALE zQW?M9AXtNi!y3}icab8mp^VaF$xtLvRPw;&(?;z8??A0p3~Y8Yv0|gC?46>DLpoHg z7SC4?qRN)|(=O1e(tp9Nf%AZvnzZpNuNI%ry-)l4`+N-F#K^JXXl(V*T&F?yi9~Za z{*hk4$#49V%B))5xpZXNtVK?H%a!biO`57&f(C?YYhWHQRoSGljsvS$z#GO<!lwSf zp?uV#B$3?^xW_(~YWnG{ixJ9^PknTJ^Ew2qiW}!`O-d`8t{0tT3sz=ZV|xrL1<woz zd{Oy?MfN-BTM<+{;t#e|Y`eGeJK2JS5wHWB;D#qL>GN_D0I85Cu<XPuUS-~FtqNVg z&fy|3akZ(U$^)Z{+6oFZr|ch#wBjh?0ubqwBj7r>aB4xux%jeXoytZ{{<5TH7$}K; zz)SX)O&P&{$4i?0C2|O@t1)@MS@;K7E)QAOUJA)+kNFGa5HHZw!Ciu#E)jj={6nfm zMugm3A}^@VZDjoz?-Cm}dd&w8Z?}-23<WMk2T?2SQV(x+N6${_cQP*m2o5?o@aWE; zi>sub%2Yr!GIaa7@M1B6#lW=@%ozR_8QBok0yM0lv=9RbmdA=gmr{|^q1=otQgnL* z)<xV4;DCe1b9P^6HuD6p$_y7**f~vRux1G@{+ZcjHcU(xMiXHyC9%VI<M)GiOgOVl z98ofR!vp~<gt)?9<+MC^1XVYYU2g|^rxU1<t6_VzMzj)AT%(Zv!5#sBoinYLU>bgj zWbf|8DMKrT6|B~x(LMuv&(df5$C6l^Ur<oi^mAr-{j^YQdEP>hr6YA*k%MX!QW`wT z#kPmBJ$ExvS!xbP^tF||^9zVD!)Kf?>{W!NjX5F$TO|XiqEln5+T8B(He%U)eNCSZ zgc`9WqKJ-K^tU2e%jw4X*?ZjPXXM**B``@3z{XJdE*1V@>eQzCza$nFW0c=;?JRiX zfy;$XPl<tS=Yj(AHt1|e*c-rhM}V^sTT*U+th!MAakw`7{jm?M92{%nh8+%rD^>7@ z1b%t-6EgEb28<-LRXKiC$8sKn*%Wp-tVV087!pd>i5FGDTi%}Z)gHtM{#9Jivn-qu z_`tPaL_l-ag;P4j5e?h0?Nau+8<lNL+40OfQM6>1r)$Tq_`=pj84nDj9|O4bNo2GN zL`4vC%A)D~;LS1x7u|MqNDH2lUk05|vt!#C^ABpHYyC)Q&pT8rldToCTx(4Ue!+AS zNu`n{HfJESIG<3MGgSEshuWAGOvRyn5{(#MtwFdzw#w;p3jp1X{*BXEcv6x+ny2$h zI#D%m<5tKDmNIM}E;0zFP{IuV&CZCu#8o5--43!OK~$$f|EOMA9>qZk=X}`<qqcXu z9dne27U)8!2AXrD>G``p6Dt<45|b<JUbma9-4Bh;0JRRPszZQDlSPC99DQ(8v1(nj zB2;%7UX{%LTKF{1a?P8=+jA~duNQ$9)EF?rPe6X+!Gd4sE_ski9;lZ%xO!g7*j1al z#R$;$N#o|sn&hGn{O61a824l;a(yliPP$(0^sQ@?un?=Pg$n>>b68U&q~)>@!v6bI zrzu8LUKMwz)aaZYe7+#P1MIKaM=`?-9IundPdO@$<w3E1;M8=Ui(aSm5jPnrBx@nH z(7`$SM6~c}LM8G@4$E7_d$av~n=;GilYF#XNyC3k?F*QO2}fwG8_+km^7LYy^kuXo zp@fIvTnTY#{1wrhq|Fl}U*&EF3UbVeG2$SFn%VD5#;q9+rN?{%C*e*9O`X1I&`N<f z5t(ca`OHNFW-5R+tFr8>hDET);#L^i1lMVwWKf(hPa$8mFuNUFsg-dmAXT}TYe@5k zFpESvQbt1A*C5UUrc{noLQr%De0TlxdhhI6i<{B(2g?exy9IK+zH;EjWJzS|0)tvS zRG_X*Ey0YOK)C_c!byaa2Tr4M-g*_vm|w>Yx84dZPR?o<=7xE;ecdM7y`g0-=Ok;| zF;nF(UiMuegC@z|e#-|23OMDOm*&}NNl~Z+E~nhDEb6)QWr3>(suU-BM|+&_9wbY$ z;qyCwnN--5?VbzD0b$MR_$F%KL$)7*Xy~gU2ueCl!|(}Q)V1^aH^L8agzZungxIsR z%A-!xI<9b>iHdut8DEp#qWQAsH=b&nPL%ud2Ve9g(SKoR`v4tzg?6}R%k8Q33%vK| zlNP|7OmjBs5>44sm+5Kg)n!c0E-zNRu4xX-KGLfAQB0Nj$0hf{Bx$8S7+j0xfyX7` zWRY_MX)bPhD3hoG!<vc;Bz0_+mE}xkPG=X_*j6knD_F95!Ppjt3GcYKc-LBr^BUKa zWU`3n&5Q{kyca_#+`&j9MJ29b_ofbWgEt~YX(V5q`6D2Mx!;=0sbQPJi5Bs&u-|8m z3roadOMOg-9#A%eNcX<red;8tOE>H9ntRZp+e+hB%3_<Sh_;AP7E-3p7XqY77t4zS zy|LnWxd}B<EF&yPGZk{f)&^`VFUQlYNIdcfQfx%J=8o<=?gRh&9ODNu(*6ElK;aRH zLAP;d`Zf+X&+Fv-OBBypM$2n+DG_}oYXbp$w9fP2$Va%hjviY;hh#&NbdHX_JbZO0 zn@pLPk?zI1J3oH&n$1B1scR*v)yPveQ+6fx>c~^{r5*d{o>)IAxgm8=I~1&()p7a* zJ6V0iw51c+DNdAGt+b$`^4?O#!qd!PhiE+e!W*oB1Q)^+WD!D=qP-K$p2g6Q5&C}` z-GQIJ7<bgTTa6Hdywd%#WB>SnwGqQN#rr>==>OX|gQlQ{q_ouE#1TFFzlx*po>2yR zw(rJ}zl)=PSk?L$ZS>dS-?b6*e^vSTjf?(QZN&0@)Blh|0(64k^&tO-1Q-9?j+PXi z^mm*=mhSIZaMf=txW-?i$;iUd$i>Fg+Qj|;V!{7^3E&1sF3$fRhxpEd7&w`K3$Fhf z0dDoTdJ<c@{}BM(&iQ+B%*@>R|8l<nJG%FOgY;(nOXmJBI#3wtzlGi3F8&`2J9Z{| z=6{G+bZdHeqo}mhASkNn1LWHv@mB&65C$@SzaRlJ&<m~$7D0gcojS9Y?abMI-TF+j z`J2ni>@*%h5Q&~&9n?5U1W{~5eh5|Mm{oUcsxuqJCCkIk_d55vvcwNk$LD<6ZRU06 zIa?Be!5#n+1%=uCBe860!Bj32?Zu?aZwlZmsUP5nAI~R0B9LH^z)9a48CeVl;4FOD zeVES|I|Dws`N5D#*WyFg#p+ajrH7Xx)53`8t)g4;$0;9Vpn3zo4T0Tc!NXYeaJp1O zL+T;*aV^4yW_qWWitd!<ZVpR*?Pzt3T)3omF9C;%lI6pcM&t36kLkSGtgV;h#8dgk z@pTXVB^{ltp9PpeG?^}04(T$IQv~D?ry(Jth%mx=gjqQ3km#O<Au>aHIB5<MD>8Hh z#SoeyB16imq%hJf@_P925cCj|A!dE@3v_+7x~w#rDgqrMQ@F~Ir6F2<Xqrqg;_eW+ zAu~g0UWCAqh9NyeoH$7+LM@UIBrZdAn=rR544Ehb_8w%QR5bBV!&Qh#a`+6i2Yr6& zo3fqA06Mro<ih-LM2E`cOEO^#;9%3(MVM1RsJ*C3nAsoB;-5onew^W;@m;L#r-t=1 z{#gxgLez6o<jCbk97T=B=DoYD(=gx*sl`I&v^*zgew$B&mb>z}iz>}X1C0)9pRB>b z;$*e6zHLj{=ic`m(ZP8he!00V&CPjm9u3ZetoVLmh$c$?E;e^X7M}kFfvY5g;ceeI z+pB@FI6oy*;3-Y8op^07<gKh3-8pRHkg0RAMK=w%Lk(7#7vT&Tv`Ag6iEMkk4(i&Y zV4(m2nvGU{%pg%WlPY5pBpozH<623jOcJ#-va<6g-lm{YQa%C3!Jkx(RKtI-ny;o> zpypUO*!Xkwz;1DY9_`3sm);#2PKZq?^wX#><2JZmVBlHqKGy%CGs>=S5z8R!>EknG zqsXyhtMd0ufu*Hes4w*3xNHIYrI|DVUsBeE(;7nT>}aWCgY>(4TV%)9$1WRLRBP8v zo;M|dPUZ;2SkL|JW40ey?)DY3yv1n=8XBo$U#Z=U-PA?2YcJrk|EmN?<->OHs0A?B z+pZK$avFT^(|~EN06mcG8;I|l%>leYR;&=b?qFZL|N0Kl!<OeG?vnuyYEqGGvN$Y% zq(QrYgCix?V~P=65K&9bgc7WnY+w`s68XvM{goR}?qag9jMEb)b)V%A*ul9;8#;z8 zU=EJAECzFcw+!g-vQ2qIazI-7GPl$1q?~XN=sv1RHM;mHXF_}+W=xTz1I*`!n-l)B zLQKgj6&P$8T@XBDbRH=u&PA{oPv;>fE>p%AQFa&tyN9?(uq8jZ?G79mnNM=s0^)sB zVCEdr!rlEwd{7Ja6KD*u_I+Q`U6_n;YHj@$E`MO`X6-BU%1R5DR-m`hnRGe3x$20` z{*uy>gV7zHYA(v|aw;HO9mEgv)<0i|(1E=haI|p#2l<o&#XZuxM6^*<<J>&^Ls53K z_Rs?|mW?BM1qvw5L>j%J3dH?zcobkr-57Hc7OL12G0DGFP8v9*tR$_Zta`#`gHzd( zS(X<US1zfnft%vis$kOvYnVfb6;NXuqO}S1RQtY(i7vNT&?=6_+BAhOMQiyDmDuBU zA!N7`?1}EgPs(j;B~8HKHU-i-tnxq9!S?UtD1!T*cYf&2oxb~;8QlQSf9Y+k#93Qq zgUyNh9~JzSRM+9p=dma71hfs68@S~gpb)XlRIX5v{6Rt@5|rZy76a(izwuOk+?tE( z3t{Vj9~%`@%EjB`^=1Vi7SLM&s1nW^=`z5`kDh)Zi>67@xkZ6$oteMD<OAwoU=P}- zqWhILf@t3dyLuynQQFBN4@9DD)Qx7Qfr&b}U}wZmm^HuYLxK;L%+E$U*hK9FZRKC9 zI+C-GH;}>w66y_|>)%f&h~!Yn3gvojIx9aHrmQ`^abiXa=s8(%Mf+Xg1el6j%ILG_ zdA!c&OkkOVS@vMrRlGCq1}T&j{H1Tb0D<AK&iA2<QCfM<SNtgunG~heYYCGDkG?xJ z5!{FXX;yf6STz?99_%055k}O$=57;6%;2=!0So;C+2D=<e_~ODKe}qowCbPo7)8D_ z$K_D9CRz0;O`-u>0jsiu_Pt4a(AYzMj8qpmQv_g2*bQX1<!_PWCunzVv-$!EHjC#F zYQ;|_xaZV_^{#ME1oSIicM(KcvZOrbF*k4C#mkfwFY2ipsBkXa0r}Uy`O9pQ{>d&h zi%v7OWw24ZER=S|$Bws@h(YlZ@QnY0)uomB12(8`+y*XL(y1{gMPAAQ(qycZ`y&z# zFA!H}16f}ynNJ;H>hKU3eG5a|eLt1oNZnf;#@n?*_8d;4pyUe0&rw@Hqru7!leU9g zLZ+b>Pc+Y-LT~-t8p2BM^?0Cpa}lB{aRqsNncT!onz6_w62Lc&GSW<*P|5FFx|Kd0 zorS0?Vy8fo09)dPJb(o)`QO{VWE+6!sXFlcO;4qoLP1Y4+rL?Hf|lP}C_oa4$v&V& ztGC1?9Ev3YvZosLk+Q{fEZ%pSL`jt*0@99DAS*2=s4O{MJ@yKgZ6kj&W~qM6YB2+f z+I+zrBVXL@8eWGO9{Ys?={_oe;_KzYpP1(y;zO(GDS7q#+IVOpZpVW$ntSXV9iphy z{chGws6_VH=BEo}ZD`*Jr*I(mK<k2EE9ml~{<VA=XS>BGb@eE=7`^HRBZ;LX8{*K@ zu|8!ZX+?Dc@Gxz6w#&aPT0U!ixvJh$1H+RK#CD=|-3gz?k%ehtgaT%fu&%8>W`Cve zsCs@vN8Y(cI-6v+yLl#_P~4YphL$cY+O<0d`NyFuk#Shf#PbzTcyOFo4W!$h#qYx^ zGgb$UNt29x#4O^0ks~Tpfxl1<n1zOE9115^urj1xvzoPX$q)+_Le<@WK*-0Q<w{6^ zO%Zcf3DzLXZWsD9Y-3FLK^<hUkezQ^G=x~3l{EFP!VPbR58@<_r<Jabh60709>pK% zP3APP8Ed!{j%f}!_c7mW*RmqFDRXC?cXe?QE9KnHUimF@V+kt-%mwBh!K`;84}_AF zRwA1i4a*+}{5U=?(La!%lDI_Uxv>sHS4?E_N_ZMK6#XSR8OY(fbo{5Pm7We)`3J95 z<76?o>_`|KXpJIDo1{}WWvB?~2`6>lTIRG(^orP1eL>YXQZ*NKn{AT}%Jv}=h)o3; z(*-R@0m_(PvXBNvoTUi0)T_0J=n4#6KuqF8mkVrO+dK^mj*LslyImP`c4OSJ1HWKS z*#hENG%?E3cFxA=m-pFWcI}M#>J@u|sj~?H9y9MHj3}8n3_a(k--96X#&VPt;#NJ@ z98CZYUse7Sab+TuFc^Nnf7XM7Aq>Qo;cYnvf*(tB@9&P4%jF=!lGYXd9LL*_S(Y>q zBK91~FGAW<vhp-eIO-p;Qt;Bh`40O~tOAPjV3L6<*EJWPWR9P4wv}<pf4gDNVaLVo zJq(!(p~Yj*nkqqjk{<q23zy+&3I+Q8`oq!p3GMSJi)Mn`Bu5*=&1?49i+5#>*;T)k zCb_(zU;fiPVQDSi4EQ8=T@s>;yKQC`-ntANtp7*rAUkgxpqj}UMMbknW0DVsXn=PR z0>o(whmz^VmhRQ0A*K~orn;=8kgSZOWeNT#otvBP*FjXF9twjfTOau4wsf;6>}7Py zLGs@DtLh^Z<%SvX^A+^n&busSK`fw><7GqlY^$_|#}+jUI?AazvIZn|%Ch2Y{mle2 zDjB7mK8vQY3ma{%wtVMeBf|z|)4@)Q4dJHf9|?o=I2*pEO)ASu>+}9@>}jb2%g1Iy zB6wpcr9%ylbEg83@0W_A`AG|&iaInks>&w1eWM=PGC2Olws_=&4jPrPuh8u{Qjly* z5RuFzx1_}yfXSLY>`F6qt3(4~jA}WRGsBf-lqM-qa!>6SZj3XQHfw#9rW2aK!;`=& zA-xM{lRgqBC(r#Enr}F+!)N03*J3JT46qrnFa08|@-ia3;iyY#U2J?)rc3N=BccTc z%{Ha@{PwJ;BQ%%!uhueGeGmG2aF3iPR4IjUQWL8zhP8R&pDnXIY2U&i?Yf&72)_=o z-8_Yq+Dlsm6%#BB^szGre17g>Yjj!cC*s&K<IdBYLhY2rmUo*#o-}eG1CRfC)_wY@ z9{U=V^(Bv=+T)cl?N78u1C_Me5D|fGj%j|>t(+ol9oK3Jy^gYt+G;JQX4)WdFtU+6 zhB~}`S$D;2MlC`sX};$C(ep5Qs7LcLZ`$&^3XL5%7J|?7#Qb;(Kp(QhoyYbA()cIA zdRj=Wuu7-MYggJ-m$&Qqxzq}^4-ZSwsML7Tt_YNJ`s7mv_XyO^shVwDhNstR+m>g; z!*UY1n#+%}xm5DW1KWHlXIo!)2U{n`KJJ9XjNDcZ%j2{3HaOS4mZMYV5N}~eSKLt@ z*p-mED(a!ra|$Xa^!6y7m)z;yI<0KD5E;|deU~bzFrda5b#nCcceOsu3#_hz-7VB2 zWm*J`;3w^{Hf?PrC;Hu!8Mtl*GZ4}>en7A8*0O_>^w=w`mpe3Vv>di(f<}p06W|&X zIV6>WMk7Yhat8~+9zoi1CBSbp*}23ebr3c78()l?vbGuedA)~}vnChcmd>DSjttTd zxMFaBxpTy?|Gxe*Xjcv<biV%X>Ut+@B*Tu9xXn+C{eay<xbdj<;`LOAp?>03c4+BF z>2`-SkK}gi2J|-FZbSB7Y=FNhyLrM63(iXD33mnHX~JLA;rbDP-ubyomx1-BM4^#Q zp7H>h;abt7HaAupl`AUbUOs^m4|Jj?(KDww`=(X)QEiInRFHZLEO{kU`?blZV9Z3W z^m9nf25y_L+Gp+4B6h>Ra5)bYQ&Z|x1+!R{L=s|lE33o!hpQN<YJKyN>IF!%b4(sH z7n59kcYWB3L*xCL2c44J)7;05UWXs1O2_v7@~c>Mn-*5XjhkjQ-5#_fNxLKgRzwL^ zuw=d<yQD5n`A^l^fXcyU*O=-!C7y1R?bd+_f4qL!{Sl0fie28Z5)fl^jN=BrRlXc5 zdGY%I|09(HR*$GN?iEv%Y6d1Gq!?`U0MP;iJ~958&QvX0FO9<Kv%V-Udf>y17Y`)T z`)Qo6Y5$zM*G@0$(#Jtkaly6q5@Zixs1I)^J3wyzdcoX{3qDV1s)wsBeUzsq7pEjn zI5C*A)i966JC}-V7&7!@n-x%{v2Af#+deMm*D@T1rzkjJ)%B`=yE>>Wpicco*rp4f zrZ*@}Q71<lL+D;<JuqtA%6CfbSKpoHfhz|!E$+}Ton3y5cwkVR%rZ$sb{(X80oIah z%9VQSXseevN_{{Q5XELq@@WXYSW`ODM%6ry3U7}dQoXqpH}dBlQFc!r?3is6mR-u$ z`G^lYytz<OKXIYC?{(U4#utzo6i82wq6Fq%CHGw?t>Svhog3SPq`4i6liPA~<!WV0 z|E!;!OR`{}+0-Fe4x$z4RL3&$rsoX;ta)ZTXAr}+o%D-_ji6ZtTGq)-ew0ksv>CPF zgK<FY=!!PY9nI8hGQ+Lb&%#D2yf7i$VQuECa>%=LIXM$gXs)QBrG_5~a>XSXaP_|8 z1TXTVGzEQ~S8}!&)%L2I+<DMlDJqTYMXZl&dnlIoS!@O9)|@^f11FJ>!yS9RZkt%v zr1F^dhK+t6P8g-k{QKB?NI!*^@<i22U|Ub4Ik98Ha48+TJ;4Vh`V(#*hq;RFv<17{ zXI#f^`#eV8K$YK*e!{-9_Io??bkVlZ*3kYuDjKt9b@+vWe9DLgR37{BD@17-?x@w4 z7me-duub*Gg-f>lXCu5`A@2Mqp@RZMDf0@(JUUJ~{8dd5Q@4P<z5c3Gq_dVy&0vAj zZMC)c<WI${MRNo~U12%GJ1J%eS@-Kfp%tF0eq(xrfhH=ONNt-2;ThwrwZwW<YoN^T zADe$Z)@bJ>u+G|Ml4cr9&!uooemdIYI@>zaGK%{TkwXHoxM}vy@vURfKV-c3`yTa+ zUKyW0w3#@uQXfx)Fj=5L<_c30z|)2}?SQmx&Y&pS<3#!=kVgn)gax&ewAsPk^(WY` zo^qzHsM-}lORyiKWkit{D%cgM%{{2A7NMTj`KKnBH~G+FCqj#v^LWP1AdAn4Yx$Yo z^;_7}!+TW;tQs^A3b0EZ6Z-`75+f_Rj7tlAIah4!ndqIy$U!x8t#8Z>RMIbog>L54 zCi{Kn43;l&Vk8I>fV?u7@>FWeYw2mKY<8DBKHo$ClretGHbs75>1&h;a8Mb-alhnc zh5Y(e|NQj2^$S|{)`mK{k7khvt4NN6K!A&UMsHXAVQSr+e(?1t-5m6Ya9*djy4+HV z2KN-%!7;shOpcI2(re=??_rQDYaa=^Ei=DEkQ9Bvr}MJR3n%OTc0WPN2HWAfYmm)@ zJ3HC?1Py!hkr_L73}x=n6uuE7mX<oSiM_@Ijwq8oW%U}SL(m%Z3H<egw+fxrSfydJ zX$q+NNx?!6sc7*cNQH*Fw!G$%YwD{zYWXdLM>|KfYN<jc;7?0T{8ox-=Hni&7&AFs zrst3oit(C*3hCvddh@!ac_sb?I{Bz3q->CI0c!<Y8^-KE%>L5_ZfnyuKA@_)bCI z@ZKeq+LD#z2#qu$WO9_@E5!aO_ywvCfOI}Egti1O4HpAm$Czw1TA3{dBBG-CWO0b9 z=9Nt>4}7q!3~u_!PB<k-$P3+k2q}ye<*JR@KH+W!Lr0PV*OI?R=_&8Fr`$fD5s!Oi zSsf{KGc4$!l_=)Q?5J-{@z#{PP^&<r<{4Mcc2{=Wq(h1IA8V}xH+5fBuY<vJJ}9Dz z-r`>8UrW6igfh+m#h@_Vl8b|s<E2OUr-fCeLz1?y*gYrm-6DcT1B6G*kQw*)`I+PO z<Z)59o3y<S<Hrb`kJ4+DKNbOdK<z;?ZdHR*Mo^y!&^gQ31_m^bc<zwd>ERvb7Q!nt zVv(s&(szB_X+yEu`F9W>RDRZ0+PVHxu3j52$oTv%LicEZacywM^^5D3CU2fGX1Xf3 zV6Tbbcb$J`#rPyZy0a%qZFze|P0sGinPb;DOsP)glGW(LFnrSZK`3JBZ2xrz^6a<v z2^{QbPi=WP@C7kv-?_pO_wCpn)OfUx_G)!$Wm?EEm~p+VlDq^7JITDp>v8=$vN9KE zAYvVl!kFnc+;Og>4`?{eY5<Zj4G2^iPi9PU7F!9;K=scF7W`R=cn?R{`EvqyjIZb< zUZv8CS!F(m!>iSQ`XNh&%2Y;B7##+co)g^u1g9y+vCL*3s9Sj^&t1|Y8MWh_(+Vn` zchKbKm0;OiZv&F|Q6EmtAEb>>Gd8W}Mbmq_R9eS>OKjQwQQ~6I)6y-P^ruGp0sLb% zv5_Ie*UNeN2&EEJV=gyz4Fz{2c0>t?65*yelqZ?EpZs<mP?!M#oRHf6SH^O8!A=v! zf!Lq@blp>eJVhpZ&FvEYh{-+Y<hIC7657%_@dG55p)6hC`IA7PlsdhpE+eQ{AisP4 zTyqWJmmZu_!%jCBGHePL6m;~?j&)gQJqYz6VVg0jgUCMXRTc8oB5T>h!#axe^7L_y zrd+X)9AS9Xhf+DK?-gR(iIu$VDc(h%H8<%7+JJ<F-s!%peZ1Md%GS3A3f+?O5Fh%T zUmzi0`W<v-jCGPEDv*{Bw)I-p<IRVD;mh4|1-$$UE!<MF{0Zt6*2Qc)6I3^knf4wM zUN%~_@N0ML%<I716^Y)J+#5x#W&W7qD1<72P@|g~S(Fk9MU)|o`J{CGcEb~fDhhwh zb|G^|{1R_0e7U~(`vJ2x>_%WL3aD9ZLOJ=hfHOGR&E9fxYl=X1zb!w%ckht6>z2Ye z?-#(k-|twjRYf&;Z|81gQZ3a6@h5EGC4#-*=K{)H|K!f1E0$XXeA}QX=JW5uuo~IF zhQE($i%qLX+$ejoHJZ_?z@U*Gm$^N;nd}X`_)bs(=cwpympD^bNmvgx?&%83oXkH& znr1TWrk+5KKv6}VVv1i7jK6!U@Qra;S}@I;nHF+($K0V~pzX4j?+iDg(GoZswZ+!Q z6_dt|DAwS?n}slYQ}L*HbRDYxq+JeV^H;T42;~r^f*2kGhY^?XFwdYT5bEjFLCS2z z5*GXtR;V=2EpkEkwr2CD2IDPpq1?!ex4i(=t#XyJ55)$5vR12Nq1z~9u=E$z%0sCT z9!GRQgq#&mIvn3i?sBzAJ?WEWCq{!?2NZfV&Hj;g8j35w%_cTrqdK>PcNh}UERgM% ze`!l^ylbY-19`>i=kX=zBO`UoI|uSKLFw-7DN9TDZNg|BQj{~)!<}`L^q`)wpai28 z{s^ZPO)@yK9MPI9vmEe7dz<EA2bpg)K=Aw%ligm=txB6B#ca41p0m@U&|(Gt`Nq%& z>g^O=JFiuKs3@Etfb6)_7uWm|mjUDbHLWGH8eP+g^#}DROE?)}2fOxF-lBd<v8?rn zIbB3?MLnjT4b6{UgZH0pF$qSkc?kd^zbJ||V51YN*pih4NinSspyX}K@+!&gOCRh; zZC!QPeM`=}HZ2+h4A(*y+Yk>=@B3U4Y?hZ6;_N->+gyc@Bch4wUhUt;>1S*(V0#bF z%3(n#R}O3yjx6h>N^?Ig7>ayD<8=H7XNYrFH>M6y%-UW^n2$$(-!-Ds#ei)~b1;ue zqQ@(d)d~Rr#Pi-ahq78&RdJ=^K^1Z0Xm!X>7Ym9SmBX{6$Er4kCI^AlFloq1=JMhv z=J7eotex>|-iKxwY*)C%8+VaUwR`oX&5p{vHuYcj&*o9@wK<=mj*%@?Fxt#eA*J3> z?H#J*{#e)PTlM@(iYqwB1EzC?CB~o=lFJYHC1{ev3O^L&F6IfVbAG$1daQce@cNpr zsVY0&lk$3{SBvdan&ffr_?rg1imv#1MLXtFQx6q2egl~-f0z8lh#3Kn$ED{{`A20? zVLN{)O_p>gxxu{hM)1ospXswwN#z#THt<_1BeSE6-*NT9J35Hx6%IypHVt;v>AoJO zxs@Jp_r^N^ucZJ#PJ$bXPY94ZlDZ;4OuQVJsxgU5_<e7n!av&%{ZOBK(_BlI#Zct+ z{cPmbm{jDT%``O)9UmrQeFhyu?gm7KM97W{3yPJDKGesKKkW4<<(^?D6==WI67Wwx zL-b!xfjQI)#;21c6)>PQ;#2`1DEZH64L`oHF%5sI*Qb}-phZn*>ykRvn*(@L1I~co zkN_NCgxwpE!!-ZaW=%p)s?f1eJ$vA<HTvY<5Ap)(je8~j;xp<g{BoTN3znY@>E}aT zgG#aQ3*IA)!r=kTMdB)kVn$*x6&d3b09is0q%#O#<fK_1;#bTzQ|k*bKjD2~<Yxl# z<N%`?%5hCoBvAnPQQcH_*~S|cV}e>EI2Q6?(FW3|W<j;pH(^2##RG29tYM=1&F2Ts z&bfkSWc2il84{(3ct6Smhq~GpSw)xqV!3modjyY&o=)VwVLs#BxZ4EUNa@`5_p6uc zmTav>jRLBEiKmN`lwf0Nyb)>(|L(aEH&)Q`BYMAY-|WGTOf|4I_#i;RBty3lntSm& zSXqJhTT~`NXQlTJ;fGT^ftgB)PPeW@OAX|Fdz*BzI_6I8qW_s-dhW!(T*#HNo!b)k zTzq*>5>Tbn>{6*&_;y@XZQ+u#bVbJl)NvZL=VX;;?4k>|%rf5myG@-IJ&4dMe_xIs zR1dypfc%#C%j>`yH|w>MJWs=wPoPibI7oYLOb75e=lU9GE^^imckF(}qg;$-tu%^* z$DSJIbLH*fVaZIcx9_7+DXbIZtJf6gHZNGqs<yJs0nZMC&doC$!y#@iY4Bv6c=N8E z%a9qf7)&4MAXzi{V=)}$k6wt6+sXF4)}~|*B_6DR7-EcU-sl`+jC2n80a&q!2{iK; zVd173RW~@zwjh>o?Fp@4W!L&a9V!sn^zG^cWu+rbsaWm8`RGGZ?Q{RmTi(;Gfy>S; z2`=}nh{BI{^B??4=0jH^SO$xmlcl`33@qr;YW<x%QjjpZP82mhKGR@bD&8j+C~x*i zYIfiO`_$}K97enbd=3T88!8snLq6A#SQ*&;1^Q5VfRfDiuG#^TMKl2602=hdz~De; zJEv}6ADG_of)3imcwm0#U$|P0t$hMoW}qK+@dLV?krLv8+wWt2LW%@=g~&4C8ebX{ z`3{mGj0si#9z-tP-oWlni=&^kdh)YAY4<KSY@edG!|TUuGeB>XgHA{FhLVW&JIy9i zXx(TziHRA>iG-<COZd5H?-~`jw9r!%^UQV!=;TY?YLcYLj}iEgbF=Yga#`O4;dp+$ z^0@z*`JkZxcvM6>!dr8Yyc|VN)~K*_Vm(neaqLft7Sit8LkD6uz4=z0{o@Ms6*wu8 z&<CD9)>>Su3-Fut@f8V`qMmNXtZ7-{g(k1g&KyU&;Cu{EIo4bjRWI|OLl#wu)70Xr z%<4Ro1I)TI(nI=9MV&*diHD*QNTmgN2$=Op3T%M#=N)`%Pv+d|Zq{`Xry0FlUGC4N z6RvP}b|+dwSDrXF3+dXiN1%?LiiUiGM#2~$5H6VeSEhO)c0a4ncY`diM|(K*mMMbg zF%zYFSl%6}{1y{~HomuEwwc~+M+=-+#$w$X;|8S{36Al`Iivfzxpeb7#Tper$QBfK zrV}(gbS&{qKK28Hn`=Q^VIJ?jBvFC6ZEtxuvKP3bc2fQ2On}Sks)ywR)zaGr&~dqK zk3+E+446+S$FC=-qmx~&)<cqE&`;$OS&ho4vlGHQ$~NWgO=Ndl80@Bmc`XKXU`;8g zW{(DLmj-T$B#<qDP8=@DCD9ZKSaY0m5X=-^kwUBFDMB|i&d5vFlKeydaRFo-l3usM zxz~H9IRIfgjcpIsARNk@7j!hCocgj1VJyJM!JWZ4hM*wm<1jeF@Gr2_-h-(BH_XEL z4~&TaHp?O*r>-s`_-|;Ae+~Mx;<Gcd;j?mZ{5zL}fr){E{_km)?=$~3o8vq6|DWgl z8NYAv&pH2p!Va^1F9`fYu;t%q9Dm~o|5J9Kk>P(C@nHBX;_=tT|Ko@U13kw-X7_ax zy`;5VP)7Z1es`zB1~^z$7__%?5_JT_BIkOw{hF2;g<u!Op4b1aiEG=J*OgBLswpYg z+0wNR5W-*yAZ36BNtJ0GHDm@7k#4T79nBddwMuw|LWelnd-UgV`gQ-E=lC5l0fGTB zLO3B^47F5GT2^)o<xW13y-5hDq&cMdfd+vjpe#JW?`kC9nM;wOvR;@P$w4AaDvC~7 z)qLX6qS#W#BSKrjQ<uiCu|!a*V7ct8l{k2g;&3gpi^&YqBh)xii8zXU%)l|2-oQ@~ znM(sPCW2_#C{c~%6E<NNAYv=t{0UJDAs0H-u~KBkv{<qU{B+N)@A7u@4Ck1u3odnO z30RImK4^#MfYuRH8!RkGLUAu>XEGUaEvx!cW>D^GbWtcRC(t4$l?EA8U$e}x&OFmn zG5BF61R07zNbjghtyNXMNgfd9j6o_AC6<6B+9qNP!DqWIy#U<}4P+0f&242+N8I?r z5I>n##na-cF+u95p{{z~@8Lqp3uwiQ!_@fFE4MvaWA>n)Vz@I5*ZMKFqvv<;PcAYa zj?*6#tu9%ptq_LyC4=5X4B�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 diff --git a/src/plugins/e-acsl/doc/memory_model/article.tex b/src/plugins/e-acsl/doc/memory_model/article.tex deleted file mode 100644 index 4c206402d7a..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/article.tex +++ /dev/null @@ -1,763 +0,0 @@ - -\documentclass[a4paper,11pt]{article} - -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage[dvips]{graphicx} -%\usepackage{framed} -\usepackage{latexsym} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{listings} -\usepackage{courier} -\usepackage{caption} -\usepackage[normalem]{ulem} -\usepackage{pgfplots} -\usepackage{booktabs,colortbl} -\usepackage{hyperref} -\usepackage{url} -\usepackage{etex} -\usepackage{pstricks-add} -\usepackage{paralist} -\usepackage[nounderscore]{syntax} -\usepackage{tikz} -\usetikzlibrary{matrix,shapes,shapes.multipart,backgrounds,calc,fit} - -%\definecolor{shadecolor}{gray}{0.9} - -\setlength{\fboxsep}{1.5pt} -\newcommand{\highl}{\colorbox{gray!30}} - -\lstloadlanguages{C} - -\def\lstsmallmath{\leavevmode\ifmmode \scriptstyle \else \fi} -\def\lstsmallmathend{\leavevmode\ifmmode \else \fi} -\lstset { - escapechar=§, - %frame=shadowbox, - %rulesepcolor=\color{black}, - showspaces=false,showtabs=false,tabsize=2, - numberstyle=\tiny,numbers=left, - stringstyle=\color{sh_string}, - keywordstyle = \color{sh_keyword}\bfseries, - commentstyle=\color{sh_comment}\itshape, - captionpos=b, - xleftmargin=0.7cm, - aboveskip=0.7cm, - belowskip=0.5cm, - escapebegin={\lstsmallmath}, escapeend={\lstsmallmathend}, - emph={int,char,void,return,size\_t,unsigned,long,struct,if,,else,for,while, - break,const,short}, - emphstyle=\textbf -} - -\tikzstyle{leaf}=[rounded corners,rectangle,inner sep=1mm,fill=gray!40] - - -\captionsetup[lstlisting]{ - singlelinecheck=false, - margin=40pt, - font={bf,footnotesize} -} - - - -\begin{document} - -\title{Code generation for memory monitoring} -\author{Nikolaï Kosmatov \and Guillaume Petiot \and Julien Signoles} -\date{\today} - -\maketitle - - - -\begin{abstract} -We present:\\ -* framework for memory monitoring\\ -* instrumentation of {C} programs\\ -* ... -\end{abstract} - - -\section{Introduction} - - -Memory accesses from a pointer or an array are not safe in C, thus trying to -access an element of an array out of valid range or an invalid pointer may cause -a segmentation fault during execution. - -C compilers such as \textsc{Gcc} do not provide detection mechanisms for this -kind of errors. We propose an automatic code instrumentation, so that the -generated code will perform memory monitoring and will be able to check -memory properties during execution (runtime checking). -We consider as readable and writable memory: global variables, dynamically -allocated memory, and formal parameters and local variables of each function. We -decided to use the term ``block'' to nominate these four cases. - -\textsc{E-Acsl} is an executable subset of \textsc{Acsl} \cite{ACSL}, a formal -specification language for C using source code annotations to express -properties. \textsc{Acsl}-annotated C programs can be dealt with -\textsc{Frama-C} \cite{Frama-C}, a framework for modular analysis of C. -\textsc{Frama-C} provides a plug-in generating executable C code from -\textsc{E-Acsl} annotations, used by the implementation discussed in this paper. - - -\section{Related work} - -* ask Pascal ? * - -\section{Stored information} - - -Memory blocks (as defined above) held properties such as their base address and -their size. \textsc{E-Acsl} provides five annotations to retrieve useful -information about blocks: - -\begin{description} -\item[${\tt \backslash base\_addr(p)}$] - returns the base address of the block containing pointer $p$ -\item[${\tt \backslash block\_length(p)}$] - returns the size (in bytes) of the block containing $p$ -\item[${\tt \backslash offset(p)}$] - returns the offset between $p$ and ${\tt \backslash base\_addr(p)}$ -\item[${\tt \backslash valid\_read(s)}$] - whether reading $*s$ is safe -\item[${\tt \backslash valid(s)}$] - whether reading and writing $*s$ is safe -\item[${\tt \backslash initialized(s)}$] - whether $s$ has been initialized -\end{description} - -Our contribution allowed the \textsc{E-Acsl} plug-in to generate executable C -code from these five annotations, thus checking these five memory properties -during execution. - -For each block, we need to store the following information: the base address -(address of the first element within the block), the size (in bytes), the -validity status (whether reading or writing the block is safe) and the -initialization status for each byte of the block. We call {\em block descriptor} -the data structure storing this information. - -%Figure~\ref{fig:block_descr} illustrates the data structure (we call it -%{\em block descriptor}) chosen to store this information. - - -%\begin{figure}[h] -% \begin{lstlisting} -% struct _block { -% char * ptr; -% size_t size; -% int valid; -% unsigned char * init_ptr; -% unsigned long init_cpt; -% }; -% \end{lstlisting} -% \caption{Block descriptor} -% \label{fig:block_descr} -%\end{figure} - -To keep the memory space occupied by this structure low, whenever none or all of -the bytes of a memory block have been initialized (the two most common cases), -the initialization array is freed; an integer field counting initialized bytes -is used instead. - -%$init\_ptr$ is an array of booleans that is dynamically allocated only if -%needed. If it has been allocated, it contains a boolean for each byte of the -%block: the $n^{th}$ boolean indicates whether the $n^{th}$ byte has been -%initialized. - -%$init\_cpt$ counts the number of initialized bytes within the block. If -%$init\_cpt = 0$ (none) or $init\_cpt = size$ (all) then $init\_ptr$ is freed. -%So, when none or all of the bytes have been initialized (the most common cases), -%the memory space needed for the block descriptor itself is reduced. This -%consistency is maintained when adding/removing an element. - - -\section{Global architecture} - -\newcommand{\colB}{0} -\newcommand{\rowA}{7} -\newcommand{\rowB}{5} -\newcommand{\rowC}{3} -\newcommand{\rowD}{1} -\begin{figure}[h] - \begin{center} - \tikzstyle{service}=[rounded corners,rectangle,inner sep=1mm,fill=gray!40] - \scalebox{0.85}{ - \begin{tikzpicture} - \node[inner sep=4mm,draw] (eacsl) at (\colB{},\rowA{}) - {Instrumented {C} code}; - \node[inner sep=4mm,draw](lib)at(\colB{},\rowB{}){Monitoring functions}; - \node[inner sep=4mm,draw](sdda) at (\colB{},\rowC{}){Common interface}; - \node[inner sep=4mm,draw](bt) at (-2,\rowD{}){{\em Patricia trie}}; - \node[inner sep=4mm,draw](ll) at (2,\rowD{}){Linked list}; - - \node[service] (eacsl2) at (8,\rowA{}) - {translated from \textsc{Acsl} specification}; - - \node [matrix of nodes,column sep=2mm,inner sep=2mm,draw] (mf) at - (8,\rowB{}) { - \node[service] at (0,0){$malloc$};\pgfmatrixnextcell - \node[service] at (0,0){$calloc$};\pgfmatrixnextcell - \node[service] at (0,0){$realloc$};\pgfmatrixnextcell - \node[service] at (0,0){$free$};\\ - \node[service] at (0,0){$storeBlock$};\pgfmatrixnextcell - \node[service] at (0,0){$deleteBlock$};\pgfmatrixnextcell - \node[service] at (0,0){$initialize$};\pgfmatrixnextcell - \node[service] at (0,0){$valid$};\\ - \node[service] at (0,0){$offset$};\pgfmatrixnextcell - \node[service] at (0,0){$blockLength$};\pgfmatrixnextcell - \node[service] at (0,0){$baseAddr$};\pgfmatrixnextcell - \node[service] at (0,0){$initialized$};\\ - }; - - \node [matrix of nodes,column sep=2mm,inner sep=2mm,draw] (ci) at - (8,\rowC{}) { - \node[service] at (0,0){$add$};\pgfmatrixnextcell - \node[service] at (0,0){$remove$};\pgfmatrixnextcell - \node[service] at (0,0){$find$};\\ - }; - - %\node [matrix of nodes,rectangle,draw,column sep=4mm,inner sep=2.5mm] - %(sddc) at (\colB{},\rowD{}) { - % \node at (0,0) {{\em Bittree}}; \pgfmatrixnextcell - % \node at (0,0) {or}; \pgfmatrixnextcell - % \node at (0,0) { Linked list }; \pgfmatrixnextcell - % \node at (0,0) {\dots};\\ - %}; - \path [->,thick] (eacsl) edge (lib); - \path [->,thick] (lib) edge (sdda); - \path [->,thick] (sdda) edge (bt); - \path [->,loosely dashed,thick] (sdda) edge (ll); - \path [<->] (eacsl) edge (eacsl2); - \path [<->] (lib) edge (mf); - \path [<->] (sdda) edge (ci); - \end{tikzpicture} - } - \end{center} - \caption{Global architecture} - \label{fig:lib} -\end{figure} - - -Interactions between the components of our solution are displayed by -Figure~\ref{fig:lib}. Informations about block descriptors are stored in an -arbitrary data structure $S$ (see Section~\ref{section:patricia-trie}). The -\textsc{E-Acsl} plug-in performs an instrumentation to generate executable C -code invoking monitoring functions (see Section~\ref{section:lib}) relying on -the data structure $S$. - - -\section{Concrete data structure used: {\em Patricia trie}} -\label{section:patricia-trie} - -In this section we discuss the choice of the concrete data structure used to -store the block descriptors. - -We need a data structure with a good time and space complexity, indeed we may -have to often add or remove a block descriptor in the structure. The structure -has to be sorted: we want to access to a block descriptor by its base address, -and also to its predecessor and successor. Thus, hash-tables will not fit. -We also unconsidered the linked lists, due to the linear worst-case complexity. -The (unbalanced) binary search trees provide a linear worst-case complexity too -when the base address of inserted elements are monotonically increasing, and -this may be quite common. Self-balanced binary search trees are dismissed -because of the numerous add/remove operations implying numerous costly balancing -operations. - -\begin{figure}[h] - \begin{center} - \tikz[grow=right,sibling distance=1.4em,level distance=3cm] - \node {0010 ****} - child { node[leaf] {0010 0111} } - child { node {0010 1***} - child { node[leaf] {0010 1001} } - child { node[leaf] {0010 1101} } - }; - \caption{Example of Patricia trie} - \label{fig:bittree} - \end{center} -\end{figure} - -We choose to use the {\em Patricia trie} \cite{Patricia-tries} structure, which -is efficient even if the tree is unbalanced. The prefix used by a node (not a -leaf) is the greatest common prefix (on 32 or 64 bits) of its two children. -The block descriptors are held on leaves. Other nodes just do the routing from -the root to a block descriptor. - -%Patricia tries are usually used on strings and characters, so we named -%``bittree'' the structure used in this article. - -For example on 8-bit addresses, Figure~\ref{fig:bittree} shows -a Patricia trie storing three block descriptors (identified by their addresses: -${\tt 0010\,0111}$, ${\tt 0010\,1001}$ and ${\tt 0010\,1101})$. The greatest -common prefix of ${\tt 0010\,1001}$ and ${\tt 0010\,1101}$ is ${\tt 0010\,1***}$ -and the greatest common prefix of ${\tt 0010\,0111}$ and ${\tt 0010\,1***}$ is -${\tt 0010\,****}$. The $*$ means that this bit is meaningless. -Figure~\ref{fig:insertion} shows that a new node (with a new prefix) is added -when a block descriptor is inserted. - -\begin{figure}[h] - \begin{center} - \tikz[grow=right,level 2/.style={sibling distance=1.4em},level distance=3cm] - \node {0010 ****} - child { node {0010 011*} - child { node[leaf] {0010 0110} } - child { node[leaf] {0010 0111} } - } - child { node {0010 1***} - child { node[leaf] {0010 1001} } - child { node[leaf] {0010 1101} } - }; - \caption{Patricia trie after adding ${\tt 0010\,0110}$ into the trie of - Fig.~\ref{fig:bittree}} - \label{fig:insertion} - \end{center} -\end{figure} - -Figure~\ref{fig:deletion} shows an example of deletion of a 8-bit block -descriptor. Patricia tries being compact prefix trees, a node having an -only child is deleted. So ${\tt 0010\,1***}$ becomes useless and is replaced by -its child ${\tt 0010\,1001}$. Deleting useless nodes, or only storing useful -ones for routing, keeps the tree exploration efficient. A 32-bit (respectively -64-bit) trie has a worst-case depth of 33 (respectively 65) nodes. - -\begin{figure}[h] - \begin{center} - \tikz[grow=right,sibling distance=1.4em,level distance=3cm] - \node {0010 ****} - child { node[leaf] {0010 0111} } - child { node[leaf] {0010 1001} }; - \caption{Patricia trie after deleting ${\tt 0010\,1101}$ from the trie of - Fig.~\ref{fig:bittree}} - \label{fig:deletion} - \end{center} -\end{figure} - - -\subsection{Greatest common prefix computation} -\label{section:gcpc} - -The greatest common prefix of $A$ and $B$ can be naively computed by: -$X = \lnot (A \oplus B)$ (where $\oplus$ is the XOR operator) to keep bits in -common, then each bit of $X$ on the right side of a 0 is set to 0. The obtained -mask is then applied to $A$ or $B$. For example, considering -$A = {\tt 0110\,0111}$ and $B = {\tt 0111\,1111}$, -$X = \lnot (A \oplus B) = {\tt 1110\,0111}$, setting each bit on the right side -of a 0 to 0 we get ${\tt 1110\,0000}$. We apply this mask to $A$ and get the -greatest common prefix of $A$ and $B$: ${\tt 011*\,****}$. - -%This algorithm is -%used by the first version of out implementation and is named {\em Bittree-naive} -%in the experiments. - -We optimized this algorithm by firstly computing all of the 65 or 33 different -masks (from {\tt 0x0} to {\tt0xf$\dots$f}) and storing them in an array. Then we -use a dichotomic search to find the mask corresponding to the greatest common -prefix: if $A$ and $B$ have a 32-bit common prefix, do they have a 48-bit common -prefix ? Otherwise, do they have a 16-bit common prefix ? And so on. This search -takes at most 6 (respectively 5) steps on 64-bit (respectively 32-bit) tries. - -%This algorithm is used by the final version of our implementation and is named -%{\em Bittree-opti} in the experiments. - - -%\subsection{Experiments} - -%These experiments justify the choice of bittrees over linked lists and binary -%search trees. We implemented the classic {\em merge sort} algorithm, and added -%extra allocations/deallocations to put each data structure to the test. -%The program has been instrumented to call our -%monitoring functions (see Section~\ref{section:lib}). The execution time of the -%instrumented program using each data structure has been measured (in -%micro-seconds) and is plotted against the number of calls to a function $store$ -%(adding an element to the data structure). Figure~\ref{fig:experiments} -%displays the results of the experiments. -%The reference time is the execution time of the program without any -%instrumentation. Bittree-naive and Bittree-opti are using two different versions -%of the greatest common prefix computation (see Sub-section~\ref{section:gcpc}). - - - -%\begin{figure}[h] -%\begin{center} -% \hspace{-0.5in} -% \begin{tikzpicture} -% \begin{axis}[xlabel={Number of calls to $store$}, ylabel={Time ($\mu$s)}, -% legend entries={List, Tree, Bittree-naive, Bittree-opti, Reference time} -% ] -% \addplot table {timeList.dat}; -% \addplot table {timeTree.dat}; -% \addplot table {timeBTn.dat}; -% \addplot table {timeBTo.dat}; -% \addplot table {timeNone.dat}; -% \end{axis} -% \end{tikzpicture} -% \caption{Execution time plotted against the number of calls to $store$} -% \label{fig:experiments} -%\end{center} -%\end{figure} - - - -%The last but one measurement, the merge sort applied to 50,000 elements -%(4,889,819 calls to $store$), has a reference time of 0.07s. It runs 32s with -%the optimized bittree, 118s with the naive bittree, 7 hours 15 minutes with the -%binary search trees and 19 hours 15 minutes with linked lists. -%Our last measurement, the merge sort applied to 100,000 elements -%(10,279,851 calls to $store$) has a reference time of 0.19s. It runs 72s with -%the optimized bittree, 252s with the naive bittree, but binary search trees and -%linked lists exceed our 24-hour timeout. - - - -\section{Monitoring functions} -\label{section:lib} - - -This section presents the functions used for adding/removing/retrieving in -formations about block descriptors into our data structure (Patricia trie). -These functions will be automatically inserted in the source code by the -instrumentation performed by the \textsc{E-Acsl} plug-in. - - -\subsection{Automatic allocation} - -Automatic allocation functions keep track of all non-dynamically allocated -variables (but occupying memory space nevertheless), such as formal parameters, -local variables or global variables. - - - -\begin{figure}[h] - \begin{center} - \begin{tikzpicture} - \node at (-3,0) { -\begin{lstlisting} -{ // begin of scope of v - T v; - §\highl{$storeBlock (v, sizeof (T));$}§ - ... - §\highl{$deleteBlock (v);$}§ -} // end of scope of v -\end{lstlisting}}; - - \path[draw, fill=gray!20] (1,-1)--(2,.5)--(3,-1)--cycle; - \node at (2,-0.5) {{\em trie}}; - \node at (0,0.3) {$add(v)$}; - \draw[->] (-.4,0) -- (.6, 0); - \node at (0,-.7) {$remove(v)$}; - \draw[->] (-.4,-1) -- (.6, -1); - \end{tikzpicture} - \end{center} - \caption{$storeBlock$ and $deleteBlock$} -\end{figure} - - - -%\begin{lstlisting}[caption=Automatic allocation functions] -%void * _store_block(void * ptr, size_t size); -%void _delete_block(void * ptr); -%\end{lstlisting} - - -\subsection{Dynamic allocation} - -These functions have to be used instead of $malloc$, $realloc$, $calloc$ and -$free$ from the standard library. - - - -\begin{figure}[h] - \begin{center} - \begin{tikzpicture} - \node at (-3,0) { -\begin{lstlisting} - T* v; - v = §\highl{$malloc (sizeof (N));$}§ - ... - §\highl{$free (v);$}§ -\end{lstlisting}}; - - \path[draw, fill=gray!20] (3,-1)--(4,.5)--(5,-1)--cycle; - \node at (4,-0.5) {{\em trie}}; - \node at (1.9,0.3) {$add(v)$}; - \draw[->] (1.5,0) -- (2.5, 0); - \node at (1.9,-.7) {$remove(v)$}; - \draw[->] (1.5,-1) -- (2.5, -1); - \end{tikzpicture} - \end{center} - \caption{$malloc$ and $free$} -\end{figure} - - -%\begin{lstlisting}[caption=Dynamic allocation functions] -%void * _malloc(size_t size); -%void * _realloc(void * ptr, size_t size); -%void * _calloc(size_t nbr, size_t size); -%void _free(void * ptr); -%\end{lstlisting} - - -\subsection{Initialization} - -These functions have to be used for each assignment, to update the -initialization status of a block descriptor. $initialize(ptr, size)$ -marks the $size$ bytes starting from $ptr$ as initialized. -$fullInit(ptr)$ marks all the bytes of $ptr$ as initialized at once. -It is designed to avoid multiple calls to $initialize$ whenever it is -possible and improves efficiency of the instrumented program. - - -\begin{figure}[h] - \begin{center} - \begin{tikzpicture} - \node at (-3,0) { -\begin{lstlisting} - v = (T)x; - §\highl{$initialize (v, sizeof (T));$}§ -\end{lstlisting}}; - - \path[draw, fill=gray!20] (2.5,-1)--(3.5,.5)--(4.5,-1)--cycle; - \node at (3.5,-0.5) {{\em trie}}; - \node at (1.4,0) {$find(v)$}; - \draw[->] (1,-0.3) -- (2,-0.3); - \draw[->] (4.5,0) .. controls(4.7,-.2) .. (4.5,-.4); - \node at (5.8,-.2) {$update(v)$}; - \end{tikzpicture} - \end{center} - \caption{$initialize$} -\end{figure} - - -%\begin{lstlisting}[caption=Initialization functions] -%void _initialize(void * ptr, size_t size); -%void _full_init(void * ptr); -%\end{lstlisting} - - -\subsection{Interrogation} - -These functions are used to retrieve information about the block descriptors -and match the \textsc{E-Acsl} annotations we are trying to support: -${\tt \backslash valid}$, ${\tt \backslash valid\_read}$, -${\tt \backslash base\_addr}$, ${\tt \backslash block\_length}$, -${\tt \backslash offset}$ and ${\tt \backslash initialized}$. - -%\begin{lstlisting}[caption=Interrogation functions] -%int _valid(void * ptr, size_t size); -%void * _base_addr(void * ptr); -%size_t _block_length(void * ptr); -%int _offset(void * ptr, size_t size); -%int _initialized(void * ptr, size_t size); -%\end{lstlisting} - -$valid(ptr, size)$ returns 1 if it is safe to read/write $size$ bytes starting -from $ptr$, 0 otherwise. $baseAddr(ptr)$ returns the base address of the block -containing $ptr$ if such a block exists, NULL otherwise. $blockLength(ptr)$ -returns the size (in bytes) of the block containing $ptr$ if such a block -exists, 0 otherwise. $offset(ptr)$ returns the offset between $ptr$ and the base -address of the block containing $ptr$ if such a block exists, -1 otherwise. -$initialized(ptr, size)$ returns 1 if the $size$ first bytes starting from -$ptr$ are initialized, 0 otherwise. - - -\begin{figure}[h] - \begin{center} - \begin{tikzpicture} - \node at (-3,0) { -\begin{lstlisting} - //@ assert §${\tt \backslash valid(p+i)}$§; - §\highl{$assert (valid (p+i));$}§ -\end{lstlisting}}; - - \path[draw, fill=gray!20] (3,-1)--(4,.5)--(5,-1)--cycle; - \node at (4,-0.5) {{\em trie}}; - \node at (1.9,0) {$find(v)$}; - \draw[<->] (1.5,-0.3) -- (2.5,-0.3); - \end{tikzpicture} - \end{center} - \caption{$valid$ assertion checking} -\end{figure} - - -%\section{Instrumentation} -%\label{section:instru} - -%This section presents the instrumentation performed by the \textsc{E-Acsl} -%plug-in to monitor the memory used by a program. The generated instrumented code -%uses the previously defined functions (see previous section). - -%For each global variable, calls to ${\tt \_store\_block}$ and -%${\tt \_full\_init}$ are inserted at the beginning of the $main$ function, and a -%call to ${\tt \_delete\_block}$ at the end (see Figure~\ref{fig:globals}). For -%each formal parameter and local variable, a call to ${\tt \_store\_block}$ is -%inserted at the beginning of their scope block and a call to -%${\tt \_delete\_block}$ at the end of their scope block (see -%Figure~\ref{fig:formals} and Figure~\ref{fig:locals}). Calls to -%${\tt \_full\_init}$ and ${\tt \_initialize}$ are inserted on assignments (see -%Figure~\ref{fig:init}), and \textsc{E-Acsl} annotations are translated to the -%corresponding functions which result is tested by an assertion (see -%Figure~\ref{fig:annot}). - - - -%\begin{figure}[h] -% \begin{lstlisting} -%int * p; -%p = §\highl{\_malloc}§(32); -%§\highl{\_free}§(p); -% \end{lstlisting} -% \caption{Dynamic allocation instrumentation} -% \label{fig:alloc-dyn} -%\end{figure} - - -%\begin{figure}[h] -% \begin{lstlisting} -%{ -% int* p; -% §\highl{\_store\_block(\&p, sizeof(int*));}§ -% ... -% §\highl{\_delete\_block(\&p);}§ -%} -% \end{lstlisting} -% \caption{Local variable instrumentation} -% \label{fig:locals} -%\end{figure} - - -%\begin{figure}[h] -% \begin{lstlisting} -%int g; - -%int main() { -% §\highl{\_store\_block(\&g, sizeof(int));}§ -% §\highl{\_full\_init(\&g);}§ -% ... -% §\highl{\_delete\_block(\&g);}§ -% ... -% return 0; -%} -% \end{lstlisting} -% \caption{Global variable instrumentation} -% \label{fig:globals} -%\end{figure} - - -%\begin{figure}[h] -% \begin{lstlisting} -%void f (int i) { -% §\highl{\_store\_block(\&i);}§ -% §\highl{\_full\_init(\&i);}§ -% ... -% §\highl{\_delete\_block(\&i);}§ -%} -% \end{lstlisting} -% \caption{Formal parameter instrumentation} -% \label{fig:formals} -%\end{figure} - - -%\begin{figure}[h] -% \begin{lstlisting} -%int i; -%i = 4; -%§\highl{\_full\_init(\&i);}§ - -%int t [10]; -%t[2] = 4; -%§\highl{\_initialize((t+2), sizeof(int));}§ -% \end{lstlisting} -% \caption{Assignment instrumentation} -% \label{fig:init} -%\end{figure} - - -%\begin{figure}[h] -% \begin{lstlisting} -%int p[12]; -%//@ assert \valid (p+2); -%§\highl{assert(\_valid((p+2), sizeof(int)));}§ -% \end{lstlisting} -% \caption{Annotation instrumentation} -% \label{fig:annot} -%\end{figure} - - -\section{Experimental results} - -We used mutational testing to stress our library. The program under test is -previously annotated (its specification is expressed in \textsc{Acsl} -\cite{ACSL}. The program under test is supposed correct, we want to show that -\textsc{E-Acsl} is able to spot the specification violations of - ``mutated programs'' (that do not match the specification anymore).\\ - -We used a test generator granting path coverage \cite{PathCrawler} -to generate test cases. We then use \textsc{E-Acsl} to instrument the program -under test and the test cases, to generate calls to our monitoring framework. -We the check that the instrumented original program (supposed correct) -successfully pass each of those tests. We then generate mutated programs, -obtained by modifying an element in the syntactic tree. The mutations used for -these experiments are: numerical-arithmetic operator modification, -pointer-arithmetic operator modification, comparison operator modification -and logic ($land$ and $lor$) operator modification. Then each mutant program is -instrumented by \textsc{E-Acsl}.\\ - -Finally, each pair ($test case$, $mutant$) is executed. The results are -displayed in Fig.~\ref{fig:exp}. We consider a mutant ``killed'' if there is at -least one test case provoking a runtime error and this error has been found by -\textsc{E-Acsl}. - -\begin{figure}[h] - \centering - \begin{tabular}{|c|c|c|c|c|c|c|} - \hline - & alarms & time & test cases & mutants & mutants killed \\ - \hline - $fibonacci$ & 31 & 54s & 38 & 20 & 20 \\ - \hline - $Bsearch$ & 28 & 63s & 20 & 41 & 41 \\ - \hline - $Bsort$ & 37 & 273s & 153 & 47 & 45 \\ - \hline - $Merge$ & 55 & 100s & 19 & 58 & 58 \\ - \hline - $BubbleSort$ & 31 & 963s & 873 & 44 & 44 \\ - \hline - $MultiplyMatrix$ & 44 & 146s & 9 & 44 & 44 \\ - \hline - $get\_sub$ & 165 & 993s & 364 & 53 & 50 \\ - \hline - \end{tabular} - \caption{Experimental results} - \label{fig:exp} -\end{figure}~\\ - - -\section{Conclusion} - - -We implemented an efficient data structure to store the block -descriptors and functions relying on this structure to perform memory -monitoring. -We also defined and implemented into the \textsc{E-Acsl} plug-in the -instrumentation to perform on a C source code to monitor the memory. This allows -the runtime checking of the following \textsc{E-Acsl} annotations: -${\tt \backslash base\_addr}$, ${\tt \backslash block\_length}$, -${\tt \backslash offset}$, ${\tt \backslash valid}$, -${\tt \backslash valid\_read}$ and ${\tt \backslash initialized}$. - - -\begin{scriptsize} -\bibliographystyle{abbrv} -\bibliography{biblio} -\end{scriptsize} - - - - - -\end{document} - diff --git a/src/plugins/e-acsl/doc/memory_model/biblio.bib b/src/plugins/e-acsl/doc/memory_model/biblio.bib deleted file mode 100644 index 00ae5c84e55..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/biblio.bib +++ /dev/null @@ -1,52 +0,0 @@ - - -@inproceedings{Frama-C, - author = {Cuoq, Pascal and Kirchner, Florent and Kosmatov, Nikolai and Prevosto, Virgile and Signoles, Julien and Yakobowski, Boris}, - title = {{Frama-C}: A Program Analysis Perspective}, - booktitle = {Proc. of the 10th International Conference on Software Engineering and Formal Methods}, - series = {SEFM '2012}, - month = {October}, - year = {2012}, - location = {Thessaloniki, Greece}, - note = {To appear} -} - -@MISC{ACSL, - author = {Baudin, Patrick and Cuoq, Pascal and Filli\^{a}tre, Jean C. and March\'{e}, Claude and Monate, Benjamin and Moy, Yannick and Prevosto, Virgile}, - edition = {preliminary}, - keywords = {acsl, frama-c}, - title = {{ACSL}: {ANSI/ISO C Specification Language} preliminary design version 1.5}, - howpublished = "\url{http://frama-c.com/acsl.html}", - year = {2010} -} - -@article{Patricia-tries, - author = {Szpankowski, Wojciech}, - title = {Patricia tries again revisited}, - journal = {J. ACM}, - issue_date = {Oct. 1990}, - volume = {37}, - number = {4}, - month = oct, - year = {1990}, - issn = {0004-5411}, - pages = {691--711}, - numpages = {21}, - url = {http://doi.acm.org/10.1145/96559.214080}, - doi = {10.1145/96559.214080}, - acmid = {214080}, - publisher = {ACM}, - address = {New York, NY, USA}, -} - -@inproceedings{PathCrawler, - author = {Bernard Botella and Micka{\"e}l Delahaye and St{\'e}phane {Hong Tuan Ha} and Nikolai Kosmatov and - Patricia Mouy and Muriel Roger and Nicky Williams}, - title = {Automating Structural Testing of {C} Programs: Experience with {PathCrawler}}, - booktitle = {AST}, - year = {2009}, - pages = {70-78}, - ee = {http://dx.doi.org/10.1109/IWAST.2009.5069043}, - bibsource = {DBLP, http://dblp.uni-trier.de}, -} - diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/bsearch.c b/src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/bsearch.c deleted file mode 100644 index 12938539bbf..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/bsearch.c +++ /dev/null @@ -1,65 +0,0 @@ -/* run.config - COMMENT: BsearchPrecond - OPT: -pc -pc-trace -pc-tests -kernel-debug 0 -verbose 0 -pc-deter -pc-trace-preconds -pc-trace-simpred -pc-trace-result -main Bsearch -*/ -/* Binary search of a given element in a given ordered array - returning 1 if the element is present and 0 if not. - This example is like Bsearch - but gives an example of - a precondition coded in C */ - -/*@ ensures (\exists int i; 0 <= i < 10 && A[i] == elem) <==> \result; - @*/ -int Bsearch( int A[10], int elem) -{ - int low, high, mid, found ; - - low = 0 ; - high = 9 ; - found = 0 ; - while( ( high > low ) ) - { - //@ assert high > low; - mid = (low + high) / 2 ; - //@ assert mid == (low+high) / 2; - if( elem == A[mid] ) { - //@ assert elem == A[mid]; - found = 1; - //@ assert found == 1; - } - if( elem > A[mid] ) { - //@ assert elem > A[mid]; - low = mid + 1 ; - //@ assert low == mid + 1; - } - else { - //@ assert elem <= A[mid]; - high = mid - 1; - //@ assert high == mid - 1; - } - } - //@ assert high <= low; - mid = (low + high) / 2 ; - //@ assert mid == (low+high) / 2; - - if( ( found != 1) && ( elem == A[mid]) ) { - //@ assert found != 1 && elem == A[mid]; - found = 1; - //@ assert found == 1; - } - - return found ; -} - -/* C precondition of function Bsearch - This must have the name of the tested function suffixed with _precond - and have the same number of arguments with the same types. - It must return 1 if the parameter values satisfy the precondition and 0 if not */ -int Bsearch_precond( int A[10], int elem) { - int i; - for (i = 0; i < 9; i++){ - if (A[i]>A[i+1]) - return 0 ; /* not ordered by increasing value */ - } - return 1; -} diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/test_parameters_Bsearch.pl b/src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/test_parameters_Bsearch.pl deleted file mode 100644 index a06b2298d3a..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/Bsearch/test_parameters_Bsearch.pl +++ /dev/null @@ -1,29 +0,0 @@ -:- module(test_parameters). - -:- import create_input_val/3 from substitution. - -:- export dom/4. -:- export create_input_vals/2. -:- export unquantif_preconds/2. -:- export quantif_preconds/2. -:- export strategy/2. -:- export precondition_of/2. - -dom('Bsearch',cont('A',_),[],int([0..100])). -dom('pathcrawler__Bsearch_precond',A,B,C):- - dom('Bsearch',A,B,C). - -create_input_vals('Bsearch',Ins):- - create_input_val('elem',int([0..100]),Ins), - create_input_val(dim('A'),int([10]),Ins), - true. -create_input_vals('Bsearch',Ins):- - create_input_vals('pathcrawler__Bsearch_precond',Ins). - -unquantif_preconds('Bsearch',[]). -quantif_preconds('Bsearch',[]). - -strategy('Bsearch',[]). -strategy('pathcrawler__Bsearch_precond',[]). - -precondition_of('Bsearch','pathcrawler__Bsearch_precond'). diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/Bsort/bsort.c b/src/plugins/e-acsl/doc/memory_model/experiments/Bsort/bsort.c deleted file mode 100644 index 007fede5caf..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/Bsort/bsort.c +++ /dev/null @@ -1,50 +0,0 @@ -/* run.config - COMMENT: Bsort - OPT: -pc -pc-trace -pc-tests -kernel-debug 0 -verbose 0 -pc-deter -pc-trace-preconds -pc-trace-simpred -pc-trace-result -main bsort -*/ -/* Bubble sort of a given array 'table' of a given length 'l' in descending order. This example is interesting because of its - - variable dimension input array - - loop with a variable number of iterations, - which is limited by limiting the array dimension - - oracle which does not sort but checks the result is ordered */ - -/*@ ensures \forall int k; 0 <= k < l-1 ==> table[k] >= table[k+1]; - @*/ -void bsort (int * table, int l) -{ - int i, temp, nb; - char fini; - fini = 0; - nb = 0; - //@ assert l >= 0; - //@ assert fini == 0; - //@ assert nb == 0; - while ( !fini && (nb < l-1)){ - //@ assert fini == 0; - //@ assert nb < l-1; - fini = 1; - //@ assert fini == 1; - for (i=0 ; i<l-1 ; ) { - //@ assert 0 <= i < l-1; - if (table[i] < table[i+1]){ - //@ assert table[i] < table[i+1]; - fini = 0; - //@ assert fini == 0; - temp = table[i]; - //@ assert temp == table[i]; - table[i] = table[i + 1]; - //@ assert table[i] == table[i+1]; - table[i + 1] = temp; - //@ assert table[i+1] == temp; - } - //@ ghost int old_i = i; - i++; - //@ assert old_i + 1 == i; - } - //@ assert i >= l-1; - //@ ghost int old_nb = nb; - nb++; - //@ assert old_nb + 1 == nb; - } - //@ assert fini == 1 || nb >= l-1; -} diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/Bsort/test_parameters_bsort.pl b/src/plugins/e-acsl/doc/memory_model/experiments/Bsort/test_parameters_bsort.pl deleted file mode 100644 index ad41d5bb9f4..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/Bsort/test_parameters_bsort.pl +++ /dev/null @@ -1,24 +0,0 @@ -:- module(test_parameters). - -:- import create_input_val/3 from substitution. - -:- export dom/4. -:- export create_input_vals/2. -:- export unquantif_preconds/2. -:- export quantif_preconds/2. -:- export strategy/2. -:- export precondition_of/2. - -dom('bsort',cont('table',_),[],int([-100..100])). - -create_input_vals('bsort',Ins):- - create_input_val(dim('table'),int([0..5]),Ins), - create_input_val('l',int([0..5]),Ins), - true. - -unquantif_preconds('bsort',[cond(egal,dim('table'),'l',pre)]). -quantif_preconds('bsort',[]). - -strategy('bsort',[]). - -precondition_of(0,0). diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/bubblesort.c b/src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/bubblesort.c deleted file mode 100644 index 415b567a1d4..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/bubblesort.c +++ /dev/null @@ -1,44 +0,0 @@ - -/*@ ensures \forall int i; 0 <= i < length-1 ==> a[i] <= a[i+1]; - @*/ -void bubble_sort(int* a, int length) -{ - int auf = 1; - int ab; - int fixed_auf = 1; - - - for (; auf < length; ) - { - //@ assert auf < length; - fixed_auf = auf; - ab=auf; - - while (0 < ab && a[ab] < a[ab-1]) - { - //@ assert 0 < ab; - //@ assert a[ab] < a[ab-1]; - //@ ghost int old_1 = a[ab]; - //@ ghost int old_2 = a[ab-1]; - int temp = a[ab]; - a[ab] = a[ab-1]; - a[ab-1] = temp; - - //@ assert old_1 == a[ab-1]; - //@ assert old_2 == a[ab]; - - //@ ghost int old_ab = ab; - ab = ab-1; - //@ assert old_ab - 1 == ab; - } - //@ assert 0 >= ab || a[ab] >= a[ab-1]; - - //@ ghost int old_auf = auf; - auf++; - //@ assert old_auf + 1 == auf; - - fixed_auf = auf; - } - //@ assert auf >= length; -} - diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/test_parameters.pl b/src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/test_parameters.pl deleted file mode 100644 index 0ae92b1c264..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/BubbleSort/test_parameters.pl +++ /dev/null @@ -1,21 +0,0 @@ -:- module(test_parameters). -:- import create_input_val/3 from substitution. -:- export dom/4. -:- export create_input_vals/2. -:- export unquantif_preconds/2. -:- export quantif_preconds/2. -:- export strategy/2. -:- export precondition_of/2. - -dom('bubble_sort',cont('a',_),[],int([-20..20])). - -create_input_vals('bubble_sort',Ins):- - create_input_val(dim('a'),int([0..6]),Ins), - create_input_val('length',int([0..6]),Ins), - true. - -unquantif_preconds('bubble_sort',[cond(egal,dim('a'),'length',pre)]). - -quantif_preconds('bubble_sort',[]). -strategy('bubble_sort',[]). -precondition_of(0,0). diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/Merge/merge.c b/src/plugins/e-acsl/doc/memory_model/experiments/Merge/merge.c deleted file mode 100644 index 2787cc569d1..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/Merge/merge.c +++ /dev/null @@ -1,63 +0,0 @@ -/* run.config - OPT: -pc -pc-trace -pc-tests -kernel-debug 0 -verbose 0 -pc-deter -pc-trace-preconds -pc-trace-simpred -pc-trace-result -pc-k-path 2 -main Merge -*/ - - - - -/*@ ensures \forall int i; 0 <= i < (l1+l2-1) ==> t3[i] <= t3[i+1]; - @*/ -void Merge (int t1[], int t2[], int t3[], int l1, int l2) { - int i = 0; - int j = 0; - int k = 0; - - while (i < l1 && j < l2) { - //@ assert i < l1; - //@ assert j < l2; - if (t1[i] < t2[j]) { - //@ assert t1[i] < t2[j]; - t3[k] = t1[i]; - //@ assert t3[k] == t1[i]; - //@ ghost int tmp = i; - i++; - //@ assert tmp + 1 == i; - } - else { - //@ assert t1[i] >= t2[j]; - t3[k] = t2[j]; - //@ assert t3[k] == t2[j]; - //@ ghost int tmp = j; - j++; - //@ assert tmp + 1 == j; - } - //@ ghost int tmp = k; - k++; - //@ assert tmp + 1 == k; - } - //@ assert i >= l1 || j >= l2; - while (i < l1) { - //@ assert i < l1; - t3[k] = t1[i]; - //@ assert t3[k] == t1[i]; - //@ ghost int tmp1 = i; - //@ ghost int tmp2 = k; - i++; - //@ assert tmp1 + 1 == i; - k++; - //@ assert tmp2 + 1 == k; - } - //@ assert i >= l1; - while (j < l2) { - //@ assert j < l2; - t3[k] = t2[j]; - //@ assert t3[k] == t2[j]; - //@ ghost int tmp1 = j; - //@ ghost int tmp2 = k; - j++; - //@ assert tmp1 + 1 == j; - k++; - //@ assert tmp2 + 1 == k; - } - //@ assert j >= l2; -} diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/Merge/test_parameters_Merge.pl b/src/plugins/e-acsl/doc/memory_model/experiments/Merge/test_parameters_Merge.pl deleted file mode 100644 index 44c0551ba13..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/Merge/test_parameters_Merge.pl +++ /dev/null @@ -1,77 +0,0 @@ -:- module(test_parameters). - -:- import create_input_val/3 from substitution. - -:- export dom/4. -:- export create_input_vals/2. -:- export unquantif_preconds/2. -:- export quantif_preconds/2. -:- export strategy/2. -:- export precondition_of/2. - -dom('Merge',cont('t1',_),[],int([-10..10])). -dom('Merge',cont('t2',_),[],int([-10..10])). - -create_input_vals('Merge',Ins):- - create_input_val(dim('t1'),int([0..10]),Ins), - create_input_val(dim('t2'),int([0..10]),Ins), - create_input_val(dim('t3'),int([0..20]),Ins), - create_input_val('l1',int([0..10]),Ins), - create_input_val('l2',int([0..10]),Ins), - true. - -unquantif_preconds('Merge', - [cond(supegal,dim('t1'),'l1',pre), - cond(supegal,dim('t2'),'l2',pre), - cond(supegal,dim('t3'),+(int(math),'l1','l2'),pre)]). -quantif_preconds('Merge',[uq_cond([UQV3], - [cond(supegal,UQV3,1,pre)], - supegal, - cont('t1',UQV3), - cont('t1',-(int(math),UQV3,1))), - uq_cond([UQV4], - [cond(supegal,UQV4,1,pre)], - supegal, - cont('t2',UQV4), - cont('t2',-(int(math),UQV4,1)))]). - -strategy('Merge',[kpath(2)]). - -precondition_of(0,0). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/fibo.c b/src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/fibo.c deleted file mode 100644 index f730673e890..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/fibo.c +++ /dev/null @@ -1,41 +0,0 @@ - -#include "stdlib.h" - -/*@ requires n >= 3; - @ requires \valid(t+(0..n-1)); - @ ensures t[0] == 1; - @ ensures t[1] == 1; - @ ensures \forall int i; 2 <= i < n ==> t[i-2] + t[i-1] == t[i]; - @*/ -void fibo(int *t, int n) { - int i; - t[0] = t[1] = 1; - - /*@ loop invariant \forall int k; 2 <= k < i ==> t[k] == t[k-1] + t[k-2]; - @ loop assigns i, *(t+(2..n-1)); - @ loop variant n-i; - @*/ - for(i = 2; i < n; ) { - //@ assert 2 <= i < n; - t[i] = t[i-1] + t[i-2]; - //@ assert t[i] == t[i-1] + t[i-2]; - //@ ghost int old_i = i; - i++; - //@ assert old_i + 1 == i; - } - //@ assert i >= n; -} - - -/*@ ensures \result >= x; - @ assigns \nothing; - @*/ -int unbounded_random(int x); - -void driver() { - int n = unbounded_random(3); - int * t = malloc(n * sizeof(int)); - fibo(t, n); - free(t); -} - diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/test_parameters_fibo.pl b/src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/test_parameters_fibo.pl deleted file mode 100644 index 04fefca54bd..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/fibonacci/test_parameters_fibo.pl +++ /dev/null @@ -1,19 +0,0 @@ -:- module(test_parameters). -:- import create_input_val/3 from substitution. -:- export dom/4. -:- export create_input_vals/2. -:- export unquantif_preconds/2. -:- export quantif_preconds/2. -:- export strategy/2. -:- export precondition_of/2. - -dom('fibo', cont('t',_), [], int([-10..10])). -create_input_vals('fibo', Ins):- - create_input_val('n', int([3..40]),Ins), - create_input_val(dim('t'), int([3..40]),Ins), - true. - -quantif_preconds('fibo',[]). -unquantif_preconds('fibo',[cond(egal,dim('t'),'n',pre)]). -strategy('fibo',[]). -precondition_of(0,0). diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/Replace.c b/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/Replace.c deleted file mode 100644 index df8c2cc629b..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/Replace.c +++ /dev/null @@ -1,255 +0,0 @@ -/* -*- Last-Edit: Mon Dec 7 10:31:51 1992 by Tarak S. Goradia; -*- */ - - - -#include "stdio.h" -#include "stdlib.h" - -/* -#include <ctype.h> - -typedef char bool; -# define false 0 -# define true 1 -# define NULL 0 - -# define MAXSTR 100 -# define MAXPAT MAXSTR - -# define ENDSTR '\0' -# define ESCAPE '@' -# define CLOSURE '*' -# define BOL '%' -# define EOL '$' -# define ANY '?' -# define CCL '[' -# define CCLEND ']' -# define NEGATE '^' -# define NCCL '!' -# define LITCHAR 'c' -# define DITTO -1 -# define DASH '-' - -# define TAB 9 -# define NEWLINE 10 - -# define CLOSIZE 1 - -typedef char character; -typedef char string[MAXSTR]; -*/ - - - -/*@ requires \valid_read(j); - @ behavior b1: - @ assumes *j >= maxset; - @ assigns \nothing; - @ ensures \result == 0; - @ behavior b2: - @ assumes *j < maxset; - @ requires \valid(j); - @ requires \valid(outset+(*j)); - @ assigns *j, outset[*j]; - @ ensures *j == \old(*j)+1; - @ ensures outset[*j-1] == c; - @ ensures \result == 1; - @ complete behaviors; - @ disjoint behaviors; - @*/ -int addstr(char c, char *outset, int *j, int maxset){ - char result; - - /* b1 */ - if (*j >= maxset){ - //@ assert *j >= maxset; - result = 0; - } - /* b2 */ - else { - //@ assert *j < maxset; - outset[*j] = c; - //@ ghost int tmp = *j; - *j = *j + 1; - //@ assert *j == tmp + 1; - result = 1; - } - return result; -} - - -/*@ requires \valid_read(i); - @ requires \valid_read(s+(*i)); - @ behavior b1: - @ assumes s[*i] != '@'; - @ assigns \nothing; - @ ensures \result == s[*i]; - @ behavior b2: - @ assumes s[*i] == '@'; - @ assumes s[*i+1] == '\0'; - @ requires \valid_read(s+(*i+1)); - @ assigns \nothing; - @ ensures \result == '@'; - @ behavior b3: - @ assumes s[*i] == '@'; - @ assumes s[*i+1] == 'n'; - @ requires \valid_read(s+(*i+1)); - @ assigns *i; - @ ensures *i == \old(*i)+1; - @ ensures \result == 10; - @ behavior b4: - @ assumes s[*i] == '@'; - @ assumes s[*i+1] == 't'; - @ requires \valid_read(s+(*i+1)); - @ assigns *i; - @ ensures *i == \old(*i)+1; - @ ensures \result == 9; - @ behavior b5: - @ assumes s[*i] == '@'; - @ assumes s[*i+1] != '\0'; - @ assumes s[*i+1] != 'n'; - @ assumes s[*i+1] != 't'; - @ requires \valid_read(s+(*i+1)); - @ assigns *i; - @ ensures *i == \old(*i)+1; - @ ensures \result == s[*i]; - @ complete behaviors; - @ disjoint behaviors; - @*/ -char esc(char *s, int *i){ - char result; - - /* b1 */ - if (s[*i] != '@'){ - //@ assert s[*i] != '@'; - result = s[*i]; - } - else{ - //@ assert s[*i] == '@'; - /* b2 */ - if(s[*i + 1] == '\0'){ - //@ assert s[*i+1] == '\0'; - result = '@'; - } - else{ - //@ assert s[*i+1] != '\0'; - //@ ghost int tmp = *i; - *i = *i + 1; - //@ assert *i == tmp + 1; - /* b3 */ - if(s[*i] == 'n'){ - //@ assert s[*i] == 'n'; - result = 10; - } - else{ - //@ assert s[*i] != 'n'; - /* b4 */ - if(s[*i] == 't'){ - //@ assert s[*i] == 't'; - result = 9; - } - /* b5 */ - else{ - //@ assert s[*i] != 't'; - result = s[*i]; - } - } - } - } - return result; -} - - -int makesub(char* arg, int from, char delim, char* sub){ - int result; - int i, j; - char junk; - char escjunk; - - j = 0; - i = from; - - while ((arg[i] != delim) && (arg[i] != '\0')) { - //@ assert arg[i] != delim; - //@ assert arg[i] != '\0'; - if ((arg[i] == (unsigned)('&'))){ - //@ assert arg[i] == '&'; - junk = addstr(-1, sub, &j, 100); - } - else { - //@ assert arg[i] != '&'; - escjunk = esc(arg, &i); - junk = addstr(escjunk, sub, &j, 100); - } - - //@ ghost int tmp = i; - i = i + 1; - //@ assert i == tmp + 1; - } - //@ assert arg[i] == delim || arg[i] == '\0'; - /* b1 */ - if (arg[i] != delim){ - //@ assert arg[i] != delim; - // unreachable - result = 0; - }else { - //@ assert arg[i] == delim; - junk = addstr('\0', &(*sub), &j, 100); - /* b2 */ - if (!junk){ - //@ assert !junk; - result = 0; - } - /* b3 */ - else{ - //@ assert junk; - result = i; - } - } - return result; -} - - -char getsub(char* arg, char* sub){ - int makeres; - makeres = makesub(arg, 0, '\0', sub); - //@ ghost char* tmp_arg = arg; - //@ ghost char* tmp_sub = sub; - //@ ghost int verdict = 1; - /*@ ghost while (*tmp_arg != 0) { - if(*tmp_arg == '&') { - if(*tmp_sub != -1){verdict=0;break;} - tmp_arg++; tmp_sub++; - } - else if(*tmp_arg == '@' && *(tmp_arg+1) == '\0') { - if(*tmp_sub != '@') {verdict=0;break;} - tmp_arg++; tmp_sub++; - } - else if(*tmp_arg == '@' && *(tmp_arg+1) == 'n') { - if(*tmp_sub != 10) {verdict=0;break;} - tmp_arg += 2; tmp_sub++; - } - else if(*tmp_arg == '@' && *(tmp_arg+1) == 't') { - if(*tmp_sub != 9) {verdict=0;break;} - tmp_arg += 2; tmp_sub++; - } - else if(*tmp_arg == '@') { - if(*tmp_sub != *(tmp_arg+1)) {verdict=0;break;} - tmp_arg += 2; tmp_sub++; - } - else { - if(*tmp_sub != *tmp_arg) {verdict=0;break;} - tmp_arg++; tmp_sub++; - } - } */ - - //@ assert verdict == 1; - if(makeres > 0){ - //@ assert makeres > 0; - return(1); - } - else{ - //@ assert makeres <= 0; - return(0); - } -} diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/oracle_getsub.c b/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/oracle_getsub.c deleted file mode 100644 index 5874b006dad..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/oracle_getsub.c +++ /dev/null @@ -1,36 +0,0 @@ - -#include "string.h" - -void oracle_getsub(char* Pre_arg, char* arg, char* Pre_sub, char* sub, int r) { - char* tmp_arg = Pre_arg; - char* tmp_sub = sub; - while(*tmp_arg != 0) { - if(*tmp_arg == '&') { - if(*tmp_sub != -1) {pathcrawler_verdict_failure();return;} - tmp_arg++; tmp_sub++; - } - else if(*tmp_arg == '@' && *(tmp_arg+1) == '\0') { - if(*tmp_sub != '@') {pathcrawler_verdict_failure();return;} - tmp_arg++; tmp_sub++; - } - else if(*tmp_arg == '@' && *(tmp_arg+1) == 'n') { - if(*tmp_sub != 10) {pathcrawler_verdict_failure();return;} - tmp_arg += 2; tmp_sub++; - } - else if(*tmp_arg == '@' && *(tmp_arg+1) == 't') { - if(*tmp_sub != 9) {pathcrawler_verdict_failure();return;} - tmp_arg += 2; tmp_sub++; - } - else if(*tmp_arg == '@') { - if(*tmp_sub != *(tmp_arg+1)) {pathcrawler_verdict_failure();return;} - tmp_arg += 2; tmp_sub++; - } - else { - if(*tmp_sub != *tmp_arg) {pathcrawler_verdict_failure();return;} - tmp_arg++; tmp_sub++; - } - } - - pathcrawler_verdict_success(); - return; -} diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/test_parameters_getsub.pl b/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/test_parameters_getsub.pl deleted file mode 100644 index a1e94895895..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/get_sub/test_parameters_getsub.pl +++ /dev/null @@ -1,36 +0,0 @@ -:- module(test_parameters). - -:- import create_input_val/3 from substitution. - -:- export dom/4. -:- export create_input_vals/2. -:- export unquantif_preconds/2. -:- export quantif_preconds/2. -:- export strategy/2. -:- export precondition_of/2. - -:- export disable_label_history/1. -disable_label_history(yes). -dom('getsub',cont('arg__getsub',_),[],int([-128..127])). -dom('getsub',cont('sub__getsub',_),[],int([-128..127])). -% add new array domain e.g.: -% dom('yourFunName',cont('yourArray',_),[],int([min..max])). - -create_input_vals('getsub',Ins):- - create_input_val(dim('sub__getsub'),int([6..6]),Ins), - create_input_val(dim('arg__getsub'),int([6..6]),Ins), - true. -% add new variable domain e.g.: -% create_input_val(yourVarName,int([min..max]),Ins), - - -unquantif_preconds('getsub',[cond(egal,cont('sub__getsub',5),0,pre), - cond(egal,cont('arg__getsub',5),0,pre)]). - -quantif_preconds('getsub',[]). - -strategy('getsub',[]). - -precondition_of(0,0). - - diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c b/src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c deleted file mode 100644 index d1639050780..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c +++ /dev/null @@ -1,57 +0,0 @@ -/* MDH WCET BENCHMARK SUITE. File version $Id: matmult.c,v 1.3 2005/11/11 10:31:26 ael01 Exp $ */ - -/*----------------------------------------------------------------------* - * To make this program compile under our assumed embedded environment, - * we had to make several changes: - * - Declare all functions in ANSI style, not K&R. - * this includes adding return types in all cases! - * - Declare function prototypes - * - Disable all output - * - Disable all UNIX-style includes - * - * This is a program that was developed from mm.c to matmult.c by - * Thomas Lundqvist at Chalmers. - *----------------------------------------------------------------------*/ - -/*@ requires \valid(A+(0..n-1)); - @ requires \valid(B+(0..n-1)); - @ requires \valid(Res+(0..n-1)); - @ requires \forall int i; 0 <= i < n ==> \valid(A[i]+(0..n-1)); - @ requires \forall int i; 0 <= i < n ==> \valid(B[i]+(0..n-1)); - @ requires \forall int i; 0 <= i < n ==> \valid(Res[i]+(0..n-1)); - @*/ -void -Multiply(int ** A, int ** B, int ** Res, int n) -/* - * Multiplies arrays A and B and stores the result in ResultArray. - */ -{ - register int Outer, Inner, Index; - - //@ ghost int old_Outer = -1; - for (Outer = 0; Outer < n; Outer++) { - //@ assert old_Outer != Outer; - //@ ghost old_Outer = Outer; - //@ assert 0 <= Outer < n; - //@ ghost int old_Inner = -1; - for (Inner = 0; Inner < n; Inner++) { - //@ assert old_Inner != Inner; - //@ ghost old_Inner = Inner; - //@ assert 0 <= Inner < n; - Res[Outer][Inner] = 0; - //@ assert Res[Outer][Inner] == 0; - //@ ghost int old_Index = -1; - for (Index = 0; Index < n; Index++) { - //@ assert old_Index != Index; - //@ ghost old_Index = Index; - //@ assert 0 <= Index < n; - //@ ghost int res = Res[Outer][Inner]; - Res[Outer][Inner] += A[Outer][Index] * B[Index][Inner]; - //@ assert Res[Outer][Inner] == res + A[Outer][Index] * B[Index][Inner]; - } - //@ assert Index == n; - } - //@ assert Inner == n; - } - //@ assert Outer == n; -} diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl b/src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl deleted file mode 100644 index 7964c5440b7..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl +++ /dev/null @@ -1,40 +0,0 @@ -:- module(test_parameters). - -:- import create_input_val/3 from substitution. - -:- export dom/4. -:- export create_input_vals/2. -:- export unquantif_preconds/2. -:- export quantif_preconds/2. -:- export strategy/2. -:- export precondition_of/2. - -dom('Multiply',dim(cont('A',_)),[],int([0..100])). -dom('Multiply',dim(cont('B',_)),[],int([0..100])). -dom('Multiply',dim(cont('Res',_)),[],int([0..100])). -dom('Multiply',cont(cont('A',_),_),[],int([-100..100])). -dom('Multiply',cont(cont('B',_),_),[],int([-100..100])). -dom('Multiply',cont(cont('Res',_),_),[],int([0])). - -create_input_vals('Multiply',Ins):- - create_input_val(dim('A'),int([0..100]),Ins), - create_input_val(dim('B'),int([0..100]),Ins), - create_input_val(dim('Res'),int([0..100]),Ins), - create_input_val('n',int([2..10]),Ins), - true. - -unquantif_preconds('Multiply',[ - cond(egal,'n',dim('A'),pre), - cond(egal,'n',dim('B'),pre), - cond(egal,'n',dim('Res'),pre) -]). -quantif_preconds('Multiply',[ - uq_cond([I],[cond(supegal,I,0,pre),cond(inf,I,'n',pre)], - egal,'n',dim(cont('A',I))), - uq_cond([I],[cond(supegal,I,0,pre),cond(inf,I,'n',pre)], - egal,'n',dim(cont('B',I))), - uq_cond([I],[cond(supegal,I,0,pre),cond(inf,I,'n',pre)], - egal,'n',dim(cont('Res',I))) -]). -strategy('Multiply',[]). -precondition_of(0,0). diff --git a/src/plugins/e-acsl/doc/memory_model/table_article.dat b/src/plugins/e-acsl/doc/memory_model/table_article.dat deleted file mode 100644 index 9af5a718760..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/table_article.dat +++ /dev/null @@ -1,8 +0,0 @@ -store None List Tree Bittree-naive Bittree-opti -5317 65 20988 7463 78738 24021 -32193 434 847482 251187 566245 151996 -69351 1011 3847986 1127598 1247885 354525 -405877 6475 121097172 34152290 8146124 2293326 -861765 14270 545608598 161718277 17995678 5128649 -4889819 77806 69300000000 26100000000 118501581 32517688 -10279851 193393 -1 -1 252910501 72682398 diff --git a/src/plugins/e-acsl/doc/memory_model/timeBTn.dat b/src/plugins/e-acsl/doc/memory_model/timeBTn.dat deleted file mode 100644 index bdb496a05d9..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/timeBTn.dat +++ /dev/null @@ -1,8 +0,0 @@ -nbstores time -5317 78738 -32193 566245 -69351 1247885 -405877 8146124 -861765 17995678 -4889819 118501581 -10279851 252910501 diff --git a/src/plugins/e-acsl/doc/memory_model/timeBTo.dat b/src/plugins/e-acsl/doc/memory_model/timeBTo.dat deleted file mode 100644 index 3d8291add14..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/timeBTo.dat +++ /dev/null @@ -1,8 +0,0 @@ -nbstores time -5317 24021 -32193 151996 -69351 354525 -405877 2293326 -861765 5128649 -4889819 32517688 -10279851 72682398 diff --git a/src/plugins/e-acsl/doc/memory_model/timeList.dat b/src/plugins/e-acsl/doc/memory_model/timeList.dat deleted file mode 100644 index cee607c1d4c..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/timeList.dat +++ /dev/null @@ -1,6 +0,0 @@ -nbstores time -5317 20988 -32193 847482 -69351 3847986 -405877 121097172 -861765 545608598 diff --git a/src/plugins/e-acsl/doc/memory_model/timeNone.dat b/src/plugins/e-acsl/doc/memory_model/timeNone.dat deleted file mode 100644 index 14536e44d73..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/timeNone.dat +++ /dev/null @@ -1,8 +0,0 @@ -nbstores time -5317 65 -32193 434 -69351 1011 -405877 6475 -861765 14270 -4889819 77806 -10279851 193393 diff --git a/src/plugins/e-acsl/doc/memory_model/timeTree.dat b/src/plugins/e-acsl/doc/memory_model/timeTree.dat deleted file mode 100644 index c87b3189834..00000000000 --- a/src/plugins/e-acsl/doc/memory_model/timeTree.dat +++ /dev/null @@ -1,6 +0,0 @@ -nbstores time -5317 7463 -32193 251187 -69351 1127598 -405877 34152290 -861765 161718277 -- GitLab