From 5d791bf722b49a3ce6d543592d056691f824939f Mon Sep 17 00:00:00 2001 From: louthy Date: Wed, 25 Feb 2015 02:30:26 +0000 Subject: [PATCH] More null checks --- CSharpMonad/lib/Monad.dll | Bin 162304 -> 164864 bytes CSharpMonad/src/EitherLazy.cs | 23 ++++++++++++++++++ CSharpMonad/src/EitherStrict.cs | 5 ++++ CSharpMonad/src/IO.cs | 10 +++++++- CSharpMonad/src/RWS.cs | 9 +++++++ CSharpMonad/src/Reader.cs | 5 ++++ CSharpMonad/src/State.cs | 6 +++++ CSharpMonad/src/Try.cs | 20 +++++++++++++++ CSharpMonad/src/Writer.cs | 7 ++++++ CSharpMonad/src/ext/ObjectExt.cs | 14 +---------- CSharpMonad/src/ext/TupleExt.cs | 8 ++++++ CSharpMonad/src/option-lazy/Just.cs | 1 + CSharpMonad/src/option-lazy/Nothing.cs | 1 + CSharpMonad/src/option-lazy/Option.cs | 11 +++++++++ CSharpMonad/src/option-strict/Just.cs | 7 ++++++ CSharpMonad/src/option-strict/Nothing.cs | 7 ++++++ CSharpMonad/src/option-strict/OptionStrict.cs | 20 +++++++++++++++ CSharpMonad/src/utility/Lam.da.cs | 5 ++++ CSharpMonad/src/utility/Memoize.cs | 5 ++++ CSharpMonad/src/utility/Unit.cs | 2 ++ 20 files changed, 152 insertions(+), 14 deletions(-) diff --git a/CSharpMonad/lib/Monad.dll b/CSharpMonad/lib/Monad.dll index 6dbcfd39d8994c3332e9a5bb23922f08e885fc85..3899f46225cb977331f8a5ce2d1acc8254415a6a 100644 GIT binary patch delta 70809 zcmd442bdH^`Ul+IGuyi}y9+xk>;k)lB{nm=fJ8xwg6ULHQ4tj|A)wMYEr>R=y{Mol zAlQl-l|wxhb54jkoB^|*hFoH*v%8%)@XJYB@b5j%s4LY=HEp4xX{KU!zHHSE2e*3qQbRkCjH?W7Vq{fa zW!XkUD+9gq5<{!?>x_E;P`!7&hl`3`!CvT}qo?#n|8Bjve!9O!@76)P3?ls76aN`n zkv8!oO&fiuuIU%mrH!HfMB`+y0U}+~5>6LQi^okP(-qis2^&h&kj!=JP(ICUHoE~k z-2sxF4Xc)Tcf;)gZ1<$3h8(T3zoF4494DM!V9{o8VACapO{AK$d58sOq0s?`+XqZL z34s5y1|u|>0*?mkflZeX2CMT8!Z+>t8`jl&{ZLL0Y1?cfjZ{k~c7I6Sov1RvP{aTd zaHwm@63wM0lpx+lb1ADYO(WB}&Onq;18>j{^kKLSE8qg=Dh&2Zqcz?TRI`Ty(C*H_ z4V8vF3>f5a%60)r8t$%&HG-^>WJz1>htP`I7NfvoTZ{%aBbhNo(acyPmjqhI%e9P4 z0a)j1US9L>2BtF(AiShg4R<_f!`&Uw!c|PEaMXoB###xT?*S>Dqi50iUPLZo%L}|W zc!eH3xcCdWhPw}-h3lG9>G4X_L5vReg^Ui6E*(rDatYx8mowLcCW2S!fOc@{c{3#p zcYnwWTHC8HHrxZiMHA!d6t=oFG1^~?GYH(I62w8k2;yL(Xyy%X(E@f;5vC2${aAaa&t16hC2_?!o8o8>)PCo zLAeIynxH&XAE(W&4Tysv=oFMsLb-ELUXF5?SU_AuA|4PAktnsA{PRlM>5KepO7`!4 zI$~<0yX;EKBp)&+FB^ebD3_mghJSUe#y>4qXEI$Ocg+=R{N`A7#prES86B^#7_}|I z>G5`LCNJBTD7Ca@NMu;&04&2ex^-Cb(lD%@N(WS64Bc91Md^0p*i^c`IK1;(#zBU) z5+J{2KwiU!Q+*=+7MeIGwpT%%{s=tle3aBomAyw2?7BYK?79~KqwAuhpz9Jgc%|vI zkvFie22)L%G=TX^YXbw;6<{0g8o+_=4EIXlF3kf=jj9ZbMm$wqBcCxt3Fb16u6bgl(D&BO#R4C!#m8EWxjL{!9*P=@(neyv8PXeO;KqU+M^Tn8>2 z>u>(_@^%wc=GTMA%x?e=GG|d`exs`3t_RNC1R$B;jDniHF(wC@-=O((53KT}s^L;q z<%_!&`4XypyCYwrB;Q*ptb4543OGJ6oB?F94?YZ>kaplm=7Q+p%ULh(|J zMvs81FGt}~6r4c)v79<2kF&xP6h8@&TZ&=YOgK-0#U!2vMiS2uMKjM5xg-j6aVY?6 znW1^Pbqt2)xbqx9m>+I(T$*E$VModEc?c~mYEtMRQZD8!^#Zt+(NvE_)P51gQd1hC z46`;ui`Pd>%D40~i!H3$QgP^93}(YCTgnpA`r<@1W?u$+GwS%gD!NbE1cG_I1dLho zWuU@kGw!TczznWp7lel1k#JsB^<)*Dc}-P*ot599@<_ve)BkHlFa0h5*@~Jmo58c+ zp#b?swEi&CiTT-Ez$;B9itTq%h)2w*{T>PxMzIR|Ut8kE^=7esnSV~39=)j?PgR(r z+$$2b-xpm|>3*^$Zq}P7bWck3?C?*~Z5>g{S+h{}Z%GWP$2=G>GwhFn(2o7kM*l*w zJl3VWZ?}>dnr^6}na&xyX4;?li8k%3r3s(THlb?466aHYM4O)0XQ=w8bD;8{%c0u; zqD@Ed3+PAeF9C4@aNkC>uE6*&;e16?=z3oR8@P1e06X6TSQySyVV4?WxZi;p8p+zI zqmAz&p^YDaY2!y=Wdj30YBsNRbZq8m|Ha~>?NFzkkAHJnqs3CcpH}ngH0z$lEV$RGjPO<+FeMa zvqZIl==muc>k1Z))d6GB?FPiSx&u2s$ZIxxvfK;6!a6z^BkcDEllCoOj3LT=XuqEJ z`#?ndNge$U4pN}$pdQ$106@7f%i;jTVS$5wkkA446zG5xh%~86pn(o{f`|?V0K@)3 zAle@U>>oJ0ri$!j(bVg9O#Fjy8im<$a%I23qm2LtF}3Pf~p7>z|UhXc{U5x~w= z@|w+QEXyUpI9gzTIwZ939f`u$4sa(VoTDJ3gQJ1r;20n}I2PEML0+?Y9LwSWgKU9= znUK)IEMVB5O_KAA>ZDk!C7k2I^XT9N6yV@QAUc=>?AYWrn{!#lgJIml09@c84JI8p zz;MvwHXBR_CqqR0^MGN0J`nAn0-Wtb-U1T2PIPd%kUx#u(Toek#Xm`6p)pQyg?kY2 z5IR~2Vcbk#g|(%fLAe(mR9ImdZrvKYQ8?+F^QAPyg>+RYelRDt8~x=SJ12Q>Dm$iF zvzx%EueKHmpB79B$3ETP|Dd-1rya|^TowBa$S23U_BrUFYs@Kmb?h@mkXwc$sl{L= zyBQH@2@7DHMLffB&jyazO9h?-7`4x(MDmYnhXC)){Fi~rhW3`DfR=3Ijg|1Fp;GoJfA`z0Obo@Kn(B-U>SE2Af~k-z&sq@NeKT!0Uk#;0;7YnHzx^;Cf&gxDg;` zsFZUP7#8Ldw&2Ya-U47^HE}D6+bG3EP!QqmU`i8a1H6L_1b8R#4g=hU0p0~I26#6x z0=$Q)D043m1H2E|8OioXgqR_M2r-m1!uu(G0089&S(X4X4i^OY5F`cHcmo*-@L}Na z8l$|`CEk?*Zscgn2p@q8B7BsnDDxN)BYYfK?s^1>0Xn$G7)cr66BItl3eDzIEXy^< zC|D5S(~uMd_zW2c@L6C6h}k@17u+Y=PB?-Q{vB!z@Ht=v_&iZj<^>=I_#&{(JO~iu zV-O$)G6uMb!k1V9k5DX2fEauV0`y*isNfpEN(Lf)4S0vw7^}>L^E$K`;2XdQ@J*tk z%v(SV@E^c3bs@l^3{W~D1^@>5Hih11)@U~0AtBcoH(x=7TOcV2@Le(x;CsM33~&?! zd>>j2@Sng4@B^Zv%!fb>@FVs=nfnkS?y4X{bYDjJF@^tPjb`%`mL))Roq_;Ag`^1gQZlNLr)KPW}0F)yvM=2be3(%8*iolf!v$Kgw1|lp5-r;== zQ+T$476Xg{BfvOOQKl4#0hR%0Z{yt<;3`CH1-G$PPHAu-w_46)OEv-P(C=QM7hvVr;#L))m9_I0n})s8bcxsb-z_)ZQc43^*W!lMdvf zQofDxw9yd)`mF(`-&$a&lG=L)HsV+}C?lQxce=H&?;O*x!s#7o;Ydyb=_6VI);=xGCZ!g<;k-1cRUg!92y5-z zvQ}UJ%kJ%m^b0Cr#UyTaVub+!)&y3V62ZRJqv5t(#IOfKmh}7e=&TR&_v=yX4F=tS zZMNoiTuM75L7e6XuL(l}n?4MIht*+Yf> zatV(`RVKU}aF8&ID&cV`F<~4Q#4`kv@a`z6d?(VT#2PA zKneL$N%CbO*h#0TAY(FGW-QiK#tb`|-9=|Q$akEvkIGj?D*5Vih=SV{d!5q5N*nh? zReLYiSNDl{sc)wU-bGcsi|oDpSnoa~S*O0lRCU`1HUhfds7fLa$qjqIrWC|lU}A57 zZtr&L?u4pREN>GjF3@2hRh$m&y;&S$L`1BpzRq93Y+}fm%G3)W!wqX6(C7jClFe5q zu)C(I9C_pCa%jXb>2VGeO*HxnjwPGI!5|9iA0ZX7_oKmUcc`PXuqROS;6lxy{+vSY z(HO88m8!z^-YHQ{L(fS>wlNe1;{isN#)+s@-(6LfCYkpmt_vmxWp00nodXy~a#BYzj{>Tc5%rrsm3~H*i>tGh?FSHiosxAJb>N$3~I7tka>TvdYoH z@hrQd96wuUK=yM&|Cjoc^KXA^X$u3S^NyqcR4bgTZ1|U@I(Qk@-@zqY z*1{j@$;+@{+tDSXXh(*!!=2WXgUzL$tK?U5>lRY5(G^gB$6G|pJ5P7_Dwf)EW=Z2+&c{u=?(|Gs2c44 zjLz7?0WF%`iZP|-P{y(7G=oDnhiaLcb-u=;?T>Mf3$?G1km(#m;lai-Qg|sz(TxX_ zdq17-8OgpIVAzL%+h8_MrVvBwp}_VO01GBlYS5k-s^jL`mi}R^tXAwtAeaL<2*b^! zupTFbqe3b)a(KQ|8i||s5kQDXL{SxwX-@^yo@Qu~xHH{uobvkekHEaMH zU?%kykTFDOE<;5jV+JC=aZx357+GIrM zIMCxk^~u0^I-5u25*G9zJg?0M&p8DkT(a=Y`5M?clv%n9Algo(r$SU|ZplcbLU`tu zx!B|dKO3sc>I(s|=CU%tNYro}QE-Clqa=}lz7&;#B75zfYAnL5=AqMiChweP2o}imJ!X~#%P@- z;5lajgsrnX_K`v7t`)kIq1D6ZVbWep>mUtu!i$B@g$KBJ*_Jr3sekcKwcdfKaX6zq z2Lgt7F0knmB8akF5UQhPmQlQrP&!;gIigz*N?kh;D?%cCa=@^WeN;LRQa(AX1m=^& zFuae%vU)3L6-s<`I3GCU1IVMp1t_RThiM2_Jvyv3{OJc&c~aGIsVbc#b0JE`LPB+8 z@+~A%(qS{JDXkWV@+`sX^6W%G!IK0TayREaJBc&(B*8Qg5+7m{h-oSk#IwXj;POIW z3@p7N`{;zYvkh$&hGHDtJ#JLuI~#>?0CVy4GUc1 z7g*TdlK(jM)U*u~T;ms*`0tDUZCK%|pH{Z9?B9kq*ZBoLcf9c5h6S$l3oPU<{k?E) zoqP7!h6%3q3rvu){l)(_EO517U_mYax$Mo|wJl@#Gs}Mtvs`f;h2h7!7IzK@pX-1z zo&Al-CB$@=+r7j@bv<~_4Tg4DZc^nGx)%%`4MT=|BNVKIxVj3;SZ}55_28DJT9?>2 zp-_sq&JLkQiCU0;x+PvxZOUQC7177Z@{`@?Buj!QH?}`5vNZ=3XL~1TycOo5)=X!0H>F zkhj9P4@~ENfN+JOhIJeQXvax&JOJTV!9ECP7_8qkyzMYvh?$J)A&3~&24F<>Fp*1G z7*4af5j?o|>&!~;SaJ0TI0dfwdxuBCgez%;$57_)9UfOanFCOD>)$)fVkA#Mi;+AD zj7Xj$ie{cBa!KR@>dLo}T}q^Z^4jMa@bCix-@CJ25ahGq6a?9Tfc_3C6UP#OHx6T5+@a3Ml7QzkJsQ?==+VS65i6r+6piuKf}|9_<|V89X|^4zXds z0mw(Scyi5F8gGimTLS+O6>dsKg6EA{t9GvL;%Kolra;~^^bX~>h7W{a}u2$^3kDmp!(>T1cv9l^xX} zj_t3j{QbwIh8FIXX6tid6x84L8p*$7Or6&5N@~joEYyvAgUgTsea3K>^P-_~{ z+gj2jWi{jFMBCiW%)86yvcH$0XR^P?fYIOML@puvdpbOb!5vi!o>K-OlLOw>&`v^q z!@>><)-V<}BT{yGMC-2BFRh@+^$Ye3wqC#Zca9xU)0!H^7Pbdc)jM@7E@>#o3k-Oe zPdN!+->rHS2d?nm#l%!e*Fp4MfE`BP7EDAhqgO1xbkadN$#hiqYiPfgdf9r|!|Mb(Vs|E&bsJE39$r<)530dp z`*sD!52^tX&De1AL%en1Io$w~aYJTItTa=Kk>{X06k0f#&)|B1&kNTR*mMbV_Av=^ zp6>-_fdi~STR1ohFF`{KuRsGv>^^{bKQ`vl;uJbdg3n}9!0=g5%4~V}BT007Hh`4lK+;^<9O^t(F^jK#U946E1v^AXKWroMj^Joeq=ycd9 zl7Dzj8?1&-hG)1G+MO|C$jsu51(~5Vg-vB*dpCfF8b!2Jx5q&k=#58Fjbl?3r@k!D zf}9t(70YN*dv_=Ud+KY7JK?y!b6lE<}39?Y%+p2e3-> zFQC*z$loayiqULNrA9A*-#xl`(@=D$0~qd+ETW5} zcr;){z4e>^i+2IxMFPsJ% z_mWF?;rk2J#8X%B0tK!k>$y~%l*A?{yY@-Z;PnCIlAALl$}L|USO{&tI6zyuB_3K* zII_+Q!q51f_xeBIQQXms1OHGBn`%A;XKwf?B9Ofsm!=1z$RUc=YIfvXg%r~&(eZ;K;;I3hQ z{q5}{=C$CVcyS;X0N1wp2DZP}h2nNDgL-k`)QEq1s(s5h2e!IqTny(s-1g#l`_7iP zs82fYl5KTzzf}NSN9PBy<8}4cP0nR?e*MB__O|{1nXSXE-W7aSFy9u3;oVWGf*HBCDSn1UB7pSAiV_c0P)w z#r5NhZ676^4Gk`_FF>ij0jGVTT8X_HWmzng$CkM|=b)H#5qQbQi}Rse62(Fg%!(^n z3@iAF3-s93mjWZJ%ZQ?x%ZXePNDk|cY;rCIU}5sjvhX_?@SHUO{Cv@s!1h)7#MKck zsV20paEhS_lOeT`D@2?V!#4m-`zn9agpS@?8c~-{T{f)q{z_g?^hK=6)`jJ4E*M}E z&NW~&murEM%XLK2%-@Jy5(s=#?s3wk04!|f<#M?mJjdJ4HZg`lT)i8hQV<+=MQ;Qz zuTLSw_0*DZa}9nDgS-g>26;29L^8J!MKiY&xg-#gmmei1Eu*{*ysh`Lb*(oVSOs}I zGzx-53*JFq(1LfOtk$!;pbmywY_fyJ!0zUv29ezZ8j;;g};Lz8T!0`2yN9;ZY2rsz-4g4yn*}-fr=Z}>n+#bP<(>SCGj-<8ED%!mTDh1}p?8{}dIp0vRn^LENcUU@l3&Xi}SwZ==M_Hv>z| zSnJF3`yGF$No_lBQDPaeQ&;) zMs|>6-ND%$X~z`bg*noIDX|2pXuLnaGm!gf-&4rz({|E zqP$hsrE6RH?uLcKs8qUR5!m>#t7)A8G8vD^6WCZ>)(bhDe2S{RT4j%-<0og@cvvQ84Tu z0A9fSg|e8vg?zQT;~N?*L6?3E#4r z;c)ygsTr)O{Rbd#*eKup(pEEFEvnL`OWfdJbNa~WU}7j`CBwy57;lRRkhBBJQI^>N zlD6R%fwoKloKs|rN$iZ2fKVw!EbJAhM29UCgTQ4f(lT*S$+ZF3E0sz(DS@?eDYpWY z*u&P~aDyx`d}|jmi`LNKMWbEG0!dV`j4xdP8E%3Ee(nXNE@mZ4(rj(XY6s9nR%4|H zXklZTKYpvCteWih0HWT3td0OpWC`C&L)&m`K&u3C^*=M*TF@%_#!e_oZJcw*oh|@P zWC`EGHgqbldFHTvxRuXHd+$22wk`5D{CoWgT=QcG#A|1@RM8 z+Irm}V)L8 zT92$o0<@mLZb}<3*H`kJF6dP$D5|y;MqYEJYjHcPdm3Bq!R=h64KXzB684OG)U1pq zqDF>yV;C7WT%~SfPw#_c|4CRkSU3X=4MbNNe;( z!RZIkM3(UJg`^VsR%s$Cw~~#k7|-y+QJ~}Fc@QL`xb2jL*O8LG$O{riqXfL5iD+@- zPQc=901B!zktKW!d*dll(mEaSlz!tWlQ*jF$$*EEU69OI%Q_kKH6c-npriCrOl!YDB zR7tamhw!+wufO7m_WFMQbw^m<1TacXcOp<_aiVxUj(at9R(UrTZ}4cT#)!Q?gc17y zKpbNn2xMXFGZnEX3I8B6=p(5#p+nU`hw58vLWf52`kpzpwYRlgec{fSho2wUl$E## zL$^FX4i!dBRpg!=qRGW!%)^HUYIvKuhoEL<(biQ}%>*O|MW-PUnovn7*SXcnWLUuJ z9|YlRwtz5b}>ujP@a8s=v#$e)^IA@zWaGbF$CWVXM)Q+c?uL zDEhZf`-?H8$iI4ebvZU2^bDS1qDIy7aem$O-tDL7YRzC#)jFZbpFVxm_G(r8o2R$& zXe(}3rPHXk)~rr15Zpf9D7ZuVbip0dO9a=X&k-xp*-C~6C;r9ZTcKl zXqR4X`sGKB9G-2Z8^}j1iG8zu`hKB1K#ly4>8AzPq~8==oBr7J7a!HV{SP36i~1{z z>hfsC{>Gz5$rT8%Ca-KCUfJqQ3JA|k&Qa(tnWNd4+GUO*Qs+2JjGivZ>dA`hQl)Bn z5m)QSQZ2aw2O}(qT7KD{0d|Bh2c)cXEI|7>serW}D{ww1wr3U){EHVLN=8S4k@MN<$vYCK8dDlFg?D2Vem?f zxp+KGgNN_^09sh=;rxarJk_S+5uEgrvQGx6EJ~f6D6;3Fh%wq`W0c42`9SrpV=jK2 z8Fv-{;MWoJ&6s;CijAiMc#^A2@j`$m@5l>zJyp5yjxk!2alBH12|_uF`3|Zj@9pf>a|5T$@kYa|G8t!C!R?!SZOgC ztihNuPOJdYU^Bx8!|H1>c+L`nvj9{l$tmC~G-rctE%p1%NcC8NiV>?jdj?X8t2GRs zZ&JyrcpAW$L8A6K{(>2MbvqYz)WXL~+wP&+mNP zyooERht*XIFYIA;Y&xsRz$}@vE+f~)M?|9b`BKI9f$H%}z3Emt9)%sqF$7(^q!Jrb1*gvFBSTmn`TS;Du_KT_!jVMV2O708Hvsek3n z`jX3(rOW+SW{zyLbwl{wXHCkcjRmjiTmgOSYDT{nz;yAwlBm7Lzhu_nk}H*|tB`hk z|EpO?6r|phm9J*yzq0Z=fMOS4D~Z}`rJDU$AeH($lmdL^)TY>#)oZe9jDTJhSskIY1lUhhVdG&GCY!oZ=nsc8VRgh z{ZCG4D7_6#7yE2c`*y$UiPhcYG5#i4!77L{>t5f#oYSsCk{nDs1Tg;5oZ2cco%dpf4PFoe$Wpx=J(h`BKwjtX1BskL7ouMxHu0Yvnhxd5zD5BZgl|1nR!j57`)8P z>r%v*lg!K;Qryhqn=CfI1t^jI0|n=8fF`nppV^F((fAIasBA&Oc^9CGEa7L~L&<1- zA5c{O>7nF&0MJC92r?g{WHf#RC^{db;QR}qi7eq~K0(Q7{1i}BK10Fz9H5CT;b*=; z$!Po%P*lD`!TB1Xi7eq~zTq>Skv<>2(86b~%nbXJkzO6r>`_Mg(vbdEXzV!!`rnbp zOMTew`W{8+2Y|AY%#UQpg#A;NT^`H)Om-sL&B?OGrx-j-2swjO4u9tyq5U`1@2l|_`@C?WF4KjBfl1B0vV)a9k!+< z{0kX|6CqocO>2;_gC`QaTa5|+hLFPi9StlNh06DaVk$ovQcyPkyV3~}rrXp#>*>d-)ppL|vfdPY&dNoRgIF*t=uNJ zZODzsve({l@cFr*c>=CKaegnaO`b+O)_Z|XRUdNMRAWPmKW(29Qbr`|RIyIBk>tDr z)3Aow2uGjQkg2sX&hWT4<}X6Xw4Okc5xaenwpSeMG+8cppdm4UIatF?hHqGb#fGf` zHeEuvpC7tM!(mYpcRCSt_D7yl>v8g}Pc&kA6t$kr`rr|87w8m*Qf|t!T-Mp!sG_8~ zg?EJ>vBmlwTUif-zQbeGUEzvR*8!U@Vauqyffq!LlDeup=N`jZ~DbeOY;X2PEZi93D#c?$;XN&m(LT`TtDo63f) zZt$X*mGa+S(6>s`D>JNN_-uIQ7&Kwh-~z78skNxJ>#5xitB09_MpSFfQ_<*l17zj6 zXKZXE@}1azK*jQeW%oz1p;gs#Y$Y4k)5xuCOI7f}f=$^E7Wns_YE9S)ip*pHFm9xQ zMEFc0kTaNI2te2_**1F8a5%s+BJe?>( z;U&l>@Io#D6@43K!xcgJ@Q55ro$)Y@I^jjDEZ!O2NW<6bdF9IS_mhBPsv-A4vDn@d zkXvo`UMSR8V$W@F6f8QdG~dC~s0P+wz_RxNXrKZq>qRJd_P!|6aaLzP(3K^rhD3=y zfyJT{!<~qNa*5~J{Xxh}D#g|&Sg;QO4P|-ieHKr>C3xx$eo=^^$sRuXk3ar^q! zW*?l*CDu!9kAy#dVZC)AEU;fq0>-5{h$xylmFFZe$t;e zQlNnjQyTue3#+`tQKso5fMI$n5k83ww2dySy2##WFf~46*KbFzvR78RCf=8&ZHXjz zMTf}6LFdc%JuDs*&QZ{0P)D;yBy$WAKB){8bUpuuOl@)o=)y$hcj(8FZMZXm$tVT)$o zz1h%7rHd8O+#+=3+%4yv1YO(>X;#6m3{W;!+}hU5u&!=sG&NfW4^A4UbbPECnoMFI zFp`*06wRDMRFuKiDRVg$DDM{S+gjr|>6dzS?N5Vf-~=Pmcq~RoS%{vGN!4-vabBIC z@n?7gJ>FM%wOaQ0u%_`)BO|=VfLFErer#Rm1bBs)^BVees@TeN7BQZH zu--&!ir9~{FFt;0=JD|Ux^sF^?F?2EB0ExkWw>X8X)gw-$4nd&suv{FH-y8D7imP?ZGdF@J9w2x)t8z&93T&=v-s3RVBJbH1A->Q*0pR3oC_?CzlXpk`>fEKfk8` z)S@1hJ~(S}j(GvF^$su5BENZ2hoKjOrd!I3qZx_=8>>;=rgy9}FY@<0y{C6^Q1_x- zrAt~?8je0-z0an+6r$t-cu4pss7ST-LCDOeC0FnyTtRiWU5*NvVdC*{hWQXxa8FTy z4#7vc?5a)1g)6`p>v${N72+dQP(|g>VGu!o*~%~+^LFnGjD;Dy5Dproap(|@Lz6+{ zT!~^VY#sl!GsaZjE8(OEA>3lO+(6e@>A!HsUWNQt#3(NM36+;=KM5n+;{@OXL0tOKLsQJdv6N={rMB zT<5ic_c@Tr4TA4y2j0nQBuGD(U*oSq4ZOCYYTy&wK@GAR3DR4_8V3izkHMI=4mELT zb`1^S+<_#q&@$#8ge#3bqVT)*W@-59ky6jT(<86+)aFZRWIM0);7{Q+`b*EszSBdu zrZ_Krr-v3y2?p=`R(_C`@1QDK z!nf|E(f~u9DcnUO9Ll7Fbq~j~yCK|aC8H({&yiU}#vV>zSd((>xd$~kFtcVb=-i89 zIOcHL=^Vl9RTvVpUe_4zebBK!2eWE9f5PM3Px=ec)&nR-><0nWvWC8}dQEhPvxmT? zGu95AZ9q{@RxtUT<&QeI#(Nl?f*i6>CUTCH43?l9q18}o;Q=Q&<#8SX2dDe8oPQMM zvf>i8c7F^6wn_m@WX&aKRM`t=mgh+Mo~ij?6s@liTP_H{|FY_? zkE0G7fWZU}@C1sv1~_inQNu4rn>TjCh$?v878_%R!IA-*zOj*jw?Z9dqUKT-o{oMhv^XZ!d4>b%J8kJoZ2Wt24;tet|LT z3Q-jI=(_W>UH4gbU3zaKOZe91j4?NiJPA7(MxLTM3?C$kh0Y%<@n!dgc<&Hf>1XDT z6x7cSBr;guoO_E?S=s(Lf@dK-9Z2`z1^88T$;iAh20sB?-_KHSInut#sA^ig{mB6F zVl$u`VZ5XFUa>g*YahAF+Z<}7TJ}}Y>^+36pN2Vk3GW#ez<5?+`|rf^&KZ_|@(-^+ zgNNn+^FYoEdiyHA1`zHv23i!0LoS7I!SlF#4bizlEan4*=Z5Z~M=j*J;vb5RLBuh|4XM zcVWjMOZe*5yZk$`zDl-}BG%6c#`=Ze-vG(<`RD8ZhAwuWVoLN9z5K?;zD&% zj+%JF;RyYC;DnlilP|XKBQsD=PIi=#YK{bMY#&PLKaGS^yzV#E8Ry+8!5vGMB`QVJSq%3== zeJ#xA&PW$zP2tZ?mw=TH?@YE)yH4W2m&RmkpMZRFYG;tIbm-89k$e-DvygT6K1fL+JFvG zEJx1nbX1Wy%Zu%1|M?5YGDiIt zMnqO40h-RAeo+^{_@Y*O|H0hOqJ+RIhLQB#u(ybCZ0h{0lLpeVr31EEb#a2o7ium_kyi;%Khs&u!pgPwS2alVkgQrK+DpA(`#3k)2B=Z&2 zC4jXdmmJzow$_VfXFXM6xP8?vzV4Dyhe;AEsZN0HCoC{j^b)gd{;C~dHn*v&X50Kc zRFO8vvu)7kWHl1N^TEc29A45k&<5FWq$xy)C^w@OB|h62RL-mk+MOyNGzlglkR$ zt1X%*Vwd|RSENc>L4?`1wZF?1y}b$$jR^p0|28N%l>kj-3BR#zR@jchDhkOGzSU0b z7R;{Lvf+GD4IR!GbP&uJ?NMwoyZY~6(N(<}GL*3rq*s>tZPtwG+yUB6gUJWA z!P`Kl)6qX^OLf;vSXZ(a?dU9b+ zU%#r->xBB&ENII@UCs<~p5x+8Q5+HwbS04ct2Vs>gGq2+BEPrkphCtdmTXz2LN}{M zbi=v9*2j6_!{WcN?dxAvn`@|hu1a}%H&jE{TxE4T<#OiXCby_}LCSVD;-{an>h(*2xJU`nx^O%v>9E|6HUO=P$1=re;ld6 z)y@zZ3x@&bwSzhZqciNz;P2`}N@vtHT|zj^HGS3@jlkJ1KzV8PYOO`AUBOEZX{}kF zbT;`LR!cyVs*knSRUa%5I1PsSi&Xpt9p)MBYXlMWf?}0evb8S#uf800d9|$(^w5a6 z{^RvMR5y`Lj(Ov7pTtdQNkc9~x5BS~M0d2m=DPo1e~0F6j4Sv9Hbm+>G)MkzyvI9J zGL!Glpcx7o!IuX)I^_K|5t1rvBTxTKv_*jdGJ-#0vpoataF66X;!!~?`0n-je|=@! z?y$NqbVo+;2Wz(HuD~0fDGCjc5qw3Z6MohI-!sO;K%oUPLJNPw0G>k%4UnP!WQ{il z)5NAfl?X=BLMvoUUN-hm8^9wk~uyK6G4Yv(H9xxU-_;>(|_;>*R z#N2Ku;gsJU2b>{5d3;#rz`Q#s^%~WFuv;nP5$ngz@dg9{?q0w_x-6=6_eO~+{slNgfHHn16_lCozMxdP6T@`(@+aI>{TH#akd;(| z_(FoBB*Fc_M}kz61X&2akU&vEiu*A|Pwc4_8MAyig9(0%CPsoms479mXeMPonLynE zoLN}n8fQ2NXCesUBzG?$Lj{ifc?zSvEKLop%4mRCW(ZlGu>o*+5X?Uf`Ev{Ye4WfH z^6518N%aTr@JHulN|G&j>TrI-A8E+`i94>1swB~;H2=|?YsaWb5UdQk}CAy8wt3{ag4H5Y! z7QWe%b)bT*ENW9!B4KC$mY#|guZ}F^a-zA4Q2miS@@Oo}!@`E|u|$Hva*8kH#zghE zrA8yXO`Mk1-~PYXYsgEwmS2OE>UW*vZnRf8vyWCYZKpzKLx zd9~!>lHv7iTr!-}$X{8?8R7DE+4fC#DlmBvO!7PA2LsoaqsUUs#(A9jF`219)~)vA+Lka3~`Hh!j!V<4uDV}VVV z5KV!fDhDfhnDu6W=^O`ulNQ73MkD;hR(BK>JL_(Dyy*os^&HzH=ZpdWLT9rerL)<< zuzWm_a{>VVf>bnfA_{npnL`?zt&YtCO!H4D1OrYz4BYcqL?391d z`DzH6=|#YBdohr634jC{)vA5{&dzo6Cx5Tai@>sIDC+|=eE&OZ^-KMI@2qWiSzz#T zW$+3bT;n(1S?gViqJ0&`*gXKkC1WDeSxSpRF&`^Q%ZM)9b8(K4aMrRGqWmi`F2_0| zmk=#8DZk@f1DCLdfSRfRYlZ*0p$mU=%L~mfzV}9eMynK0fm%a zH95nA;YBhMYBWPH_=Err8m*$4$AQr{qR#HZKk3G&a-1LFvtkh9H(yTzm8II2*w{J5 zn;ns2*?qB}0y}sK`on@hsv^w?JX?1}rETx&16aGBn}8e@_Qbs-Pc+e=U1QHBkMpTwCCi z&qW%Z3gn;iQ9W>sa?*fzHKoxc#_Gw6t6+U=g@d@!(4NXmu@RbtTbh0|FM~gCOxZeJ zS>fL!4!ma5XRgWWBwB^7!H-Bk#@oXFJNZExYPtCwIaqE!pO0nS#Dh%mm?4*7GJ3zu zemekv$c0t|@=*H)R#i=5sz$pM-wk*X-0VBWnN1vE(ffeoHoJP}C05#7aqyKl^2Lsc z?^%di9#d9%$Tluli7_YzR@+PrTthG_j=85!+MX@l~i}%6N^aDDyfHep$?UW&gZkJ?gwc zL3Ui<&v4%aUA3GG(Wuo|MrMx7oIP+1nsDBNm_yw^fHCmA4diV0@4tV@z8s*Um|*B5 zf943ca;<(emvx0J8`bJi2S;=2M@QA-72o49Tzv2Cfv%}7fvNGJ_67A*uVLKTJK{Na~7j2cf7{|cGUg^ z&>EB-@adox9efHl9ef6Cx`Ztqd=8%T1pq$iRkfU3*%50n?QkhM1O+ARY)n>Pw3sTZ z$gJ}(QPIM7IOoM|^W)$#;d})F9e)js=Klt0t0wst%={*)V8!pGVkGlDE4qX&BmMzA zX_9JhDB~+=7lsklMkD_Otl{fsP>w|HpMc_q`!f(`%3pwN9Qxrv3)H_A^H-pr^1;*w zqgT}0nMq}5`ZkR0KTu#wzX4jprf~me4Jm(L9@NzLIY}RO%5|mb)ACwL% z8XMj5AnNkez>eUG>`48cRA808?PHodm8Y7JM{ zO)eal2xt-f-3`=XmN8&t87GQnN{L(&$TeJE9*#d7MG1HXON27;oN|CLe@ut1NUO`k zy9sBb_`n)?aE1$1fl?*`fX;&7KH{9!KXpTD_~UpM>fWen{qdO6e;1SwJUKmU&T$S5 zXwwJkTGv+K9dw}9G)C7d!0W!pL3`mTRa-g6-?Cw>UU^5|!%KB9S~a=E)Mi&5(9YBr zOZliWa=xf0JgEITz|-5ae7?Z-0v{0gtibn*DE(2&tt(hw(~7XN!^4%PHmzeVET7U* z_<(Wk@tS*UOzpnTu?1a@hv0t;$+@^3PqP0J zO6Byc_PbDTi0n6fFprn%522btkm`+Ts2r;^Q>Y0-8G1~pQ-q4@WkOvkl&QBC>M2k- z+$+)B2>G=L<9a)xsyowYnciNgQ9`xSYa(0(&JwCZ?<}$&n9|C%HhK@CT%p?OmQXJX z)n2a`s!vyH*696(Y9i%no%KONz9GUoeP^Ni;w~-Mdg!|fwOFX$`e>mx3zgKz2{o`A zH5>Fjg*r#5{`x*beI(RCeWFlBID0PF2I&U~)l;Y=2J4fA953V${a~Sv6>6wHS*XQA z?W|7`>KdVj>4yvTgiyovsX~1u)GqpTq1O6WzEI<-`)0hJ7G7~r2C=7pvQR^X+FL(G zsDp)?sCzgNjeiO3GumkU+eiyo%x=Lyw!l8{I0tAyNN zsH1gXs1Msw^%(s^p;VwV^oxX2L%}Tl5~1#rddKUR3Dv=0{$h>3w}1VMHJviOY2zgQ z8j)Nnl%roK)D!;uFV=WFV_q-UPStM`-o8S)`mI7;BveMfU8wa!dHP*KZ4_#eeveSQ z^r4kA_4|ZUkuTOCP?|CrouxmdG=(}xe^{tlo>W|}KO&^Mb64t*38n5_Uw=X<)#9u5 zr-WK9^)A+*5$YbH*61$@^{!CsbbRR-_k)g^rChs4e_N=-gt|_DUo>w@?oQ$L`oDyH zOoX@T-w5@FP><`)LVYgO(|RN-_qb4h*G-`+Q+JGhX+Pa4t@c;G+_ANa`!{_L5oYeV z@8zDlzOVo8D@Ov3dG#e+o66Vv=o|eJuhrN$o9HW{UBKR8d3wVa8iRO&ZP^ zk1*aAY8U^?*J@g;-f)!hzVJTwpLy*ReX&30_5T2lc%!?%_>Lpr7^?SNTr+n6gtoY5 zaT~(bQr-&s553ua#NwKtrctNI^n`Z$fNPIpS=FWfVFOq;29_S3(0=J}0a99}O>Mnr zN0j|eZynent3Try>Ju6RuLN9t$I`d1(2qN+eb4Td+Jij^*Y+fQvln59K7?lv>xsR| zc^&F>UHhfOOf2^z9cNZxDosr3W@_y_5_aqO@qg8M$zT3$L0qrJMhgn%4nWqQJq79&7PTunoR{%RAjC)b@OS2-a$CF2%0k);envpABYk zg!@4Azv(!B-IfC@kFKH3HHoW-nc6prOM97Gt$)^*KKjxAZCeJH99>hVo7h_RzuHo@ z(|oJl2vb{vO;JZTPkXGw zcdYX&bWH8&n)a>hw0=o8-}q!5;8{|>1Z7hj+h*~YgmyyT19nSj7xbOBOG0~4;D=sc z8?3T^D*y-ey9w~{e)sKWYWJj$A8Tq)r%ncZN#H*Oevn!`#?-zOsMWJvUjJCa)T*Rh zTfZ3kJq0!h93pTeU_x8p&l#7{UhTIU@V9;pqDTLI$=av?>T#ylzabVn-kj*EC$uvW z(ANBIaSm^DWZcwd_`kn*wLasHE8icX>(}}3{PUfiw(g`edOSMQ)NUE}=u9?j%Pu^_ z|NMhJaCHZM*bngN4_UtP!$n?OOqBd2@|4&ydZ~6yK%Etvua{{L1k{Sy3cXx=MyMt2 zYh#y!x=N^3+7VUdb>-Sif#$KXHIQuys1rf8(!L0&DX|;%)>TR_J0d-R>VpM6rg|bdYd+qEVO7o`JFr!AZFuAeb<*|c|&f4Ds zYHjRfqfV>9tVG#OvE@d0tv02ojj?Nup4vY3SldzfbnH>1w>F(mrJ!B|WoerN>eJY( zMjv!8CHp=0jgit8^ix!6yf)HTyEUMuVVTlTdpn>iRj)_< z*vLSwzCYG>beM{#BZIUBfiM+6H!@UvJfH?bHeCB$%&gL!nxA@((7p>~!{TcrBeh=x zYGnN8$S5tcQ`W`W$Y`x1pmvLIh>X!z22?8kLS(GA85I1}{l}5Hu7wv+Os*3Kby%|!k8WXfyZYsgb#CYH6{&?oeQu{;?)YgU6G0}sxPeN*8^boC{ zXDgmmyf}KOHkYJOcSjG??hL6{qep1J1XN#rAACf0+~BO{uhAp5bs^QM=ol?JBr6+H zbewifNF7}?TYEgDmKB|-^%zP`k8!UrnyZ~DB&p|$9PPu9`mSicHg4yv(HiqqZCyx> zGZ$*nVM^9lUxuG?T#iXnC2^{Gy0$Bx2NiXVxkTF>QqP;`XbX20nFoizn=7>15n0up ziqF>`45>qlS8Iol%*qxOU#k5UQnwYa(JmjAm3>saR@-%Smg-P)t+qL!`szCs-=Iw% zqhx*cBT8=8E)OWLukMxHs=XHq|5|dp)?;i|^|6vWwV5IHLCM|P`j9G)-K%{QQVp^D zwL!aO>m3+-P@5xdu}VvK`MG|B)>^V(r9A^`qjpO`b@jTA@B64WK^kL~b_%G+wXXx} zg|0u>KdGH3ZLv!0S@(1O(^@~tewDVcZhYTowHE{G6;RJr8*JqYx$c-uv>SG5Hpd135z?b6-+A)i^sy50QgpN$*-jFOeC z!dnjSX}<>46`=m9_2+}Uwz}j7P#iEan9pn5hpLO(}9#54e7+{9PKi8hd zI*-(ALVY6CliJJiQIOT|LD`eqmiTU4mqaGTOTInE2OPouW!+#_x)Kt@R10bo_o$^?~N)u??Um zhSa9mx7ukT^k3!W|?~?Mu_31_#uqv8t${9}`f&#~R~NePu{p8aMUd0;)8=F&@*WPw=1q zVw^W?0*$G5uFy{nsc+*6{c@pJmz*5?8Gj{cosyOGDZM{dsoyD-YLQC)H>Iils2Qb| zdjE+kKrh~=w5>ippgscCPTzTdCHpjXOteZr+&e&#zsEY4w%6M;O=LEv^q6RkK68?y zo{o(x?W8X}NKw0&jw|h~FPNgJjj>6kU3C79S=K9!&n~UguL`KkV~wTV^l^tP+2ye{ zr9Jh{A$50YZ++nra$Py!zEYahpF2XS9#;BUX}!M7R7I_bHJ3K%dkLkkNQ2&0s8!nh zUia%QWTi z_|gl@hU$BS)XinX^m)_#+rK)%yFOt49{aUyH~o`<`ZTsrbi97}bXEQLSXKER`sRQd zQ@T%dZ@uJLCEFO=wR|6a&wwh8A5gxZ{>x=NeY`=MQC>gxmH+ocDznx#J!Qb)C#t-lab^IILSzZ+63TAiSO z6H+&{I#JhWDTiB1pKUcquNI2k;^S7fK1fkAFwE80%#segq=X~GT>UO3)cz>FRG+JF zP-bv%ebZ{L-gb7j)sJd*lKyl^&2N>~KRiAwThYqVN1x!2`_?ihpWx5=wxgFhfig9M z&es(li|1L~vr($lJ#%{4Diz>s9)~ zfZ7;qQ*nX5{uCv9I+m(ft#4eQsMkPUq<<4o)AU^{F4k*K4Hn5~#SW;rMDLCtcrxD} zWge*C7Li(|4KKU6;xc{W>53X(c2~s}`gLcJVoUmoEA@v$YJK8r{k4$#e|kIfxT>o6 z-|sar96SsHGSA=)A_*#{hC+^*0}iN^7&zmU*d%%|(5xIH&240bLS;pRIbdoDf#pD@ zhGmL=A+)mW+hpdH-sgGNl5_ms*Zt?-*X#QI_BrdlKF_n(-uvvc_hGNa;zZjD_Jaex z!2*jZ&-J?X@3z}mED-F!dPBCce<*ah@nrYa!?v+R6-syFZLIHIbm=a7e#M=QDP`N( zv6YUL{P^KsP{W;DG}|U_q*&hMaDk&?cVRPeMGjEfVJN5vu_DE8a3`G zygy*SDuU1A3GeO9`5D|ayzBku{UPhG=@qvd-aA;1rniB1vEpadPPB3J@u^~mTdAAR z9wsQV#Msf@d*DZ`3}!IHvA4kizTamr+qRkzXoSyxmbJ!CAG38t>y1OOPoJ>NwRgPx zeX3dZx;r$&=TqkUyq#*9EV)Catd8Z8S7Mk6(?->?k(z8f64s77$ZQUwpRrgX42>WC z8SAWRM?&W4&)KFI?ld~q=McNlN~P=wJ3&-p)Zddn<_IfTe6`e`u<|XLQE5?3$)w z2@hwSVvIU0F{URh%J`01h?X0VBot?yX8xM?Cl+U%VeK^?0%~MEG&Lj^+cM6w0UDbU zZ;d&}Mryj0=$7#xHg1!BpPJZ1L>rAqJXZNOv+0^V<*UBmv$>k8Sp`tOrpG+q2YR-Z zKK5;4?`wM6a>CbkfmLa=dHl!s2iDk1*L;6s>?Q1eqha&#Yxgtr*ECJUw)=(k)zn)i zxBHc)wNgsE|FTJ~G`!t!Y=Nf!a$>vR+2gI0-R=(?Tic3r+WpBYG_CY_qTOH2wN!P# z8t8BKh^G6c+3p|qgr@QG6`(>*!(};2mB3q*KDJniSf ze`}?m{o3-?ud0pt*WFK%IKZ+mIXL9-v8+5m+pKMnH%9(EP?{M^RiZo3rOJawo>1K zd-&c~8Wzxlf2k?ab4ox@{!J?_4d}%?y^fnrH=uytyu?l{nNLQt!Br10v&p>H!R*6# z6QQ?YGW<^O8+V#{E8t!}ifB3P;RgYId3CF|FQ6X}dGk)>J?uU{vXu@8r0|DYsWD(6 zze!}nZTlr4m8WmJli1*PKi}3$EN~Eyed~_r7C4x%YNZCZA^dzRvB04`?`?bJFkaP4 zrEEBVp9ps;eavwFU*+Nbuau?pW(PB!$G>x@nNl`_2N0>m5qzqH_W+;h;61?CJ9s1c za}M4}{`-6OHb?Px?<18Mw!WTzfund|GE0mD2{*Dv^Z&l9%yS75502s2HEruL^uY`+ zbYx?XRS%Bieww@z&ptSwXHlbgM56*H@O6reA)ax8nf#E0Hrk2<{#^pvLMP9N9+pV62gb^|@HDPQgfGBs5@eG2rdrY5ID zK(A~1$>~d=N==uY8i00a`osM+&^}F9-7f{s=Czt`yWa}5&EZEiI(v8paW)RmMByJ@*_e&5)RDcC$K}}gNlgc! z!{z)_P3IDx%Xx}#YR$_GD&os*`|QoE;Fri$9j@RfH0?;Zk+YJY)C3>VoTvFIP3IE4 za#!&y4y`=Hw-I408M)8!a!uIEvwYrudwSg4v;p;UWNGQo&%S$z#OZXsn9WQanE8#9e@j)$;*Ijco968 zko~|WKDNf5Sjsn1Gb*u^uhfKzFY^~PVcuq5*P7Sh_A1Z))PR5L8u%JdtGz?ZeapB} zXQwSZlXiVtcUduQ9znWS+cL77T0FL^o#f5T%G!Nb}%KslPWS|Wo_ahs-hE%CwM@t0e@ ze!-`CO{-`7)6&Rek5Z%1%!uG~`~yu}EmMM5mUZ(S^EiVTD#A8mVRt{O-4!+0}zgBe8^0p0dJmE&yJ#IUIvNhEK{le$A zdWVC5${|t@?s|zlqUA=F*OTDAqw-)Uio<$~6aS$*;}4c*=ssCo(9QhnRmzgZkE$8V z-(Ks&lErQ9MYP=ukr7R}X+N;eZ85Sl5gw;vh)h!+wb@5ZP{gp!K4KzKGqu@AECjM* zGuUV!v8Kr!Yk@POjDqltI2@KLs)+E6_%>{ixTNW6%kN=Bg>SO~|KMjyFA+XWq_mP> zc)F-)rMU11#3fDNwiysUQY3z_^1f{|DSVX3)pW&k4p6176^p}1i$+b?JzoTBPgDY< z^tb1Y5wB=E*k|edu_C7BPNQ#yj~98Z^i_DKIHn0^g2;(t=Xn+RujSY9$s*!{qA9FX z#6#l278gVqIx$~yW0AIN5s2!7o+DuH5|R<`$5@USp$HCCDbP6WjUsP&lw;mlMaE9Q zNs&3?%3agej!&n%n`nc_73wzh$15kygZTV;LR1;ifqObFz1TR z4(2>jp%Y6({5#DPO%C3C@ssvGf{mFkVv_6~E)cPbjM|WjP76e$ruvY}F$+bJL*ydy zoc3(LhVagd#CnZaAT(dJID|ebe$igL&|#e)6@O_83!TvUF_GHS-u)9|xFVxp=>E=6 zhzw1GAo593?hsiZ-qGGPTc}5u049BA*k_X)iA9t*+0B^_qHy?d!T)v^Yer6~Ab2T$qQg%Ubc5 z#wlT!W7dh(57a#;T4^18^mK8Q^Ol#UlcY?>ES=dZWOm25;qB#duh{*l5pO6lL*jM z8eSFml8De$4tb^GHAQsi*eu@E-cRAfI&T(xH2o1C+3gjZsMdHrJgM8O;=aCj_P&&r ziNT7D`y%#tE)$uWhD3PBZxPv=Mn@!d+baI!kXIpo)ZWGjk1iGBs;1W>9*=)r82!{v zY>W6Y_6=dPDWomkCZ5*juMuOrY!jO_U5Pjm|CT7zbQ==i7UBKv8(JwkDl*a{H+QKN zy)})9?AHBVk)mmQWKy^H!~uuA55(s-ZN41&TbB>SDNPlTFLvK9nl!x&i64q7_t`t# zDP|}#{)|lPx>G!^=|<$O?z=>xCK;8~ZMV4Xkhe#;q^P|g8ueD!Jt82*rf^Ku6A2%Q z2yIS|dLd!2cuf%BT?UhA&blETVXnH&9@%WELwWgg>KgNC{?i*mhKXtNIi@}PF z8&P}jsTRc!UX55ifbM@Qjo@fYj~a2v!TeMl(~0*+@4e?!VI631v{v{kGA4spD@HkZ zbs|%HOQPTGQ71Mycn8I1?Y#`%L2(KQ_Frx3XQD})`@sB6grwR#{9ME+GR{PgPW)W_ zl!jh2yBfVP?2zbszaqRD9}xR29u}LlhaDakuW7>m4vQ^BHg)$u zEZ!qj9Uc~MjlwR}kvSrEDl#s{{F!t_JU-gdD^z4$iJ92*h}b>G(fdS^5!oK|j%kV| zdOQOon{9LukBEH=X)?eOQKt#_>4=CQOQEz+M?^10^o{0-=&uR)>4-?tk$4P`h!I3; zmyU>4IueiJQE^n04d1n+qCq2ecvK7+XYcT+7^;XmJSs+M!VZs$F**`EJSwITsSb~d zms$zN#zlo9V}1MY-0H=iN!SBK(!jZ>R%q0d`M_jt;-I?7RAiiK?;Kn&uHWU!EQ&O4 zkyosUKCty-we})AtI83|6OLCHfMCeEj>8JG4TsUa3*7s6wPJ?~55r^r|Yp6yF9&%yjkJgUtXI(~KUSK^q1 zcTAkp-p-C;eUFKGGwqEY7mq43PIq(;J}y3+<>(z#WVm=}L!_B4&=gnQz2qMbLeDzi-50O%0vm;=UEJ4w0ut zw)TGObgdjR!kB2RDkXcbS#iTSnfX#g2)i6dBKwcl0i=L3?@r*ye;s z9rLCrf{!8Y#QsO={->_wjp8<$>cIwV>0_AKOb-tl#Ue#?5o#1mw1*egM)8y;ye2e? zVjYRsgho+9q^=2#qFzVhMd+;Xe4Oros>8D);BkA0XT=Id)ZtmNMtj)dS+PMAc6e57 z)REZXSy4`;Iy@`Rwo)lOCoU*5{)V^koapyN>;11L=`l{I^4r#)#noYv%Nz7AUHJinFBJ92%Ca$OH?wupR9uS1(Hq5#PTiTLcg zMKqDAo?o_zPD|{Ko)`0o=z_t{i#_zFtu#7zT|3~s*iT-Gk=*s_fQ!Pd0P{+W;a$B4 z{vzBpJqUD3gld}KHE`gsq8ky+m|EU7Y2a^S7d2X9tnWH{;2+{6-RSFGCk^~dJnGQ> z-@=O$R~mz2Hw^q+bkLL;`^La4qFU4J*n2R!iO6N-*^Dy4 z>*AO~<3peuB3tia9nejYPKhPPH?hYD{wwg$HsBuq6#K`(+aiqeN{s8V-UFGOrO6t1 zd?1%!XbOw_W1y6S)uz$i!C5ZW8)_R6=bh>-KhT&F*CEwKPSG?i?%+TR{E;=);bU>5 z2fE3T%A;ni@;<#!&p<0yIZo5dalKOA|83y?qSyd4QeBLbwM zBM&638xbhaD56$^)WQ{TChSN^dLT%)v__7wJrFGaCRF2hA#&>)`(A{}n~ET@&B!qM zwu2WgKh)lVgfG&=Ws9bB3DF}XH z86(%Pvp3UT?omX0(O$l+=|IAW2Rg`iiPTPXl!KqQ=XI826v4EN38Om8iW0lm#U=w@ zAcSpub#xb5>0ox1I~75PyGM7G12@_wd!s$&Hbus-NgrkQl;gJ8yS&GyLT^n!olk;8@K2SO-RpACiIrmx7rhv zix3WI(yviy@HLM_$vB<9nW&aIb8su(#4z{-OxprtRK+q_7 zS>WIekUh7x-v3J3K-nJ^WU=X(jfVmBI;p~Jc^_S&P(A};J?-;b}?9XeA}KlMD|t$*RoS%hRAp#)x}Wx z@jG`SYeI&}uNAqz(Q6m{?#LNUHNBjJ)8%<0b-zuQLn<-Prf#_D@_9ma7at+NAyRko z5%Q8E*Z#eCSw_msnr8QQ4jw6Q>O8!OkCfT(Vxy|fk#d_R{PnR>GU|Qw)J=Spj8$Z# z_kNT#9n8`4HAUbJ7(QCwaPY=R`2jUU-WVCX-QH-19HodZP#H2&6JDUk%E3hH0yR!P z^P$SK;rEmY@->C7-I8}%CdxN8;bXRm@&h7u*d|Kf9hj*0aH7o8gnKwiZY5HCI7!wk zf~(#~nUmz(n$9IWls#E~NK|5Mv-OyrohA2av$4mM*$>HDZF(iH$(|xt?6mLURQbFj z*!w=?r^+=%IJ?7p;KTCoUG~Tv`L7~6zBzKjZo8K&rzir?w%t2d?sG7w$=X(PyZ1C1 zUS&_5E;}lsMyJan2XBUaPJ25No_%}#%9U>pAf?Q z6=T{g`9w{t$>zvs6+wqvr_GVeiEw{+P0N%2I7H5s)=yO{JK%FaSKii<2NEKu&y&vN z;d|e0`h01sNcw2o7Rsj9#6IH}%C~grfrQtlKO(=?w5>XhEtS71g5kJQwp2cU)Y03d$T&%!?fP9NucuHLj>E*>$C1=1*HZbk zCVXN7jcURtCQIedifEK;sr*xW_`}Llc})}ku(DL%(2@AV%2MfSJ8@^*G9#ACAw;Uf zWzy7y9WIk)ny|xV@}?r{aG8`}s}02tm&rDou)}52T@eilFOxw;_z}&FSSAa;QTIP} zD#+q*Xk*}kLT-pn?o~uyq5M>Pr;_sSFUBkZGvJJ4VuT`iw$lXOxx2g{ zv^T2{cKB73W8Sxl;E0-GE99JJyZ5xrN5b*Hp?xyvJuQzon9s-)ii}wuKbZH79QeIG z@i{q6k+H8&`}xnwy$;?Q`Kk8KLz`2bmCy(s+@8KCSwsMs;OZxb0*JtY~E{ z^}&_$|Noa8s}6Q!NrDYBZzQk*Y*1Cdd)Rs>?$WL5L@)LTV>7DmPiEgq*Q59%Ct=6~O%{|_~`)?@j9*V&zSz|!Wp!9TPs{-+>|WcQHy)dCED!34HUB3K=!EXdR^`S9Dl7e;^}_J$jPc4dD~QP@f5U-5|oC+Nx%)|4kuSNhxH6r6|%cCsA*Jg z%%ZZ2!8TPSGq43_;HEI+a(7hK+GX>;fovViF~1tfUJiUJ7@f{N{--`=7NxR`_G(Ym z)k7T~)s$*hyXK8lHrPdN%{%7MG#2lo-lhQ4md5UN(MPMmd>DaL2Jx~gV|KJ)BJic>&#A?{|;u+?1mXR zgvGN6bMz3F1Q(j8hrpYeXC58`A#2UQhOp>BoJ|wLH^Kr{A-ohch97Bj$$FUGGUJCb z|7ni~^o(w1&j#EFx+x$Hv^*dkbVtBw(3*hppvMCygMJr~4f=h+v}g-2am$19rGUpl zZw4#{bqah6)Ef9SsArqi(UCmgt0cNJ4-3q7i!|RE$^zM0^WadJ@|3`FHAvk&v9L@OVraPUB)>w zm!al{ag*beKq;_n6*wU<(wsV+#ao8*uY$LVq5P!z(s0%>awtC?{GLb`^{{l-SP^B} z?4AWVrLf>1)?|tA&F0}Ol>Kbp9?tw>EBw=0Xdq6Fsi1&L3a->;e{)1S^AE%cFm+Hh z3I=$vt$JPVXD&q>=eeAxs!L>F(&Z)QyU;i*HIL%UN9M(J*4Z8BsPvV%7m2do3?Bhi zI2R?0s>aGI=C~0o+8rmIdAafr^O@mn^l~h$B=b67?6;2na zqpJOKqZ#}FRN=gkMyhI%pP0k3>TKw5T`p7ACHaH71gbo6qKDN9w@W&Cgqf8Ouukqc zr6ZQ=Vw`%K%@457{b24!moz7wvN0OomdUZ{PPl$ry3?Csk!&ixbyMLyUmS~C5Ifc> zAiMSxy1w;F0hF#W@}6PCLw{BjHnmlQD{^ivlN{iLqLj)6I`YvLqjza#7)g zQ!OgVsBkJb*(erDjnqLS?MFc)IKiTk{01kSUU6QRubWdxK_fVg;-(W$pODUUDmjfd z-x|f@eQ=(HuQSe%2qDAQd7JqQ8aNLk)*0tNB$5&9eA|p04F*nhNOQ&s4(Vj1IgdBz zqk$6{vYc@OLoOLv&hMJr!RUoE74n^NhC%@u`OY{$q1gGGwrjhthMJm?V(0JLW+fCm z*SDRMu)!IR&IaclrvDh&F`TYYNof_%I9Fk(E>AWy#;~OJI4Pmt87CvuJL4pT256(S zLn8#ifQ&BRFy9>mXJ4>+6kY;xR)MbzMuoUwRERE5HdzLI9F~}Y84!i@1k%A76*-oo z#_IAub0kKcF=u43=&87zPKbf)yM(~nI78g(4V)+2VBnfeWrLS4=U*6jMww#S{ZI5L4{3*u0RzhKs}OnAu}2dyzGphsVOj_M&-vESqA( zf%mbl_;zNw;xc?$uDA?eF4VvrzdL29&vnIt_gq&TjL&n$t;&NheyF%rd9JuTU!E&2 z)d%&^Z=NeI)tBdrTbNHV`4m$?xdoJ4;2P2ecS#$V3mo=lpyXmoE_MwtUB<&* zVZE7vFZJf+@vswT%o3zq=02oI^N;Z?+Li`G*1i^8|1ZQsZ;meGh;$6pz(vpnm#&Gm z6v2>jtYu9H=io#tC+f1${z!9TCW}tR z5$s|LzHGsB;3iE{UdUO;-F=2~pN=2*k#4y8L-|EZV;`$qPH=nX3pJ&ns@%;ykO^mL zvUwKTV^d5v5onPaJ`p;3!5lh~4QP*}&lS{6B_u_%ozy_A8(!jf>YCH$`;eG$q2pf5 zMdOc-@AtiE-0Zk6tj-M=R;qV%>9n(NgIiFiF>dv4;c&JzxOM1M6Vl)oZ~i+GzKWsU z=!T=!m)vk^#mf-1snaDlTww7M^>)ea88dkjiynug*48$-PqIyC@2h=f8yvazZG-D9 zhP1&|7=7E|%8M~=Fxj`w2KYlgz7Su^VkpM94GuNOQVTJ<{x@^`B)F2`PQY0&hV zeratQ%)chFDQuLPF`3;9=l{CNaCokm7bmm9>_Iaj3+|@N%&GYDtXYCDd1g%({Bkx9 z_GVe}l+Uu_DW7GP$`w{zL$bn( zYe-gFaSh2zE3P5A(~4^>?xYrWT5(itKgHKsalyzsD-KfDQ%!>v7muv7;+m6b&9L+s%#pNCwthi$2B`cma4OU!3^1Kzt`z}#K=dHK^~ph`$_j9%@S2dFrgeiYrx~x8gYBc`J?|Hdt|u%3=c-)@ZQ8N|m+&4OU#3@+NgG z-PLyCB9+n|2ZnE2v1#d!!@@VI>6^M~T>kQ=6$cj^thj__gB8a>tV8t=f5M6`IWj0uG5lmZy71z9Mu;L(TU;5<4xZ^R1amS8hAOTKCcRX|rR$OZ{ z#vMl~8>}(iu}d6Gjd4E!oi$i-xy%MD4yZO*ab-<7ijZ4p#pONgtT+T6OWnu1<8i99 z;)0)bHY<)sC%WSSsk7qhpLJFok#4Z!5OQBisI#7j~2TTxZ2)MeD5Na7;T3(%{RVJDwW3)Wj3K z#(me|EO#76&!d`r_lK>|v@LMYv%U=a8Jpu(?2cF1Vt2g47Q5rsv)CQ4p2hC(n912J z8NPJpduDsVFx(N>DZ+AC_n|rfa5UhJU<=$diHl^6W zC0H7$?MC4WG*38*h<0<6)KzSJy2Mv+%%pxF8i6Gd#xn zhInGx>WRB#^_*^g_b}_ohE}m0_9lnRsiVzXTy zJhn=%dOD9W25au_nzO+d`#bLwWyuZM;G1K#C7Yy@0$!{@OP@%R`pwjJ(l zV!NE++_`GaoM7v&`4#!)1Gsc@60WGid?* zjEhg!(*3Z(v3@zhqZejD87`OYqAX@umaaKn_3i>TltJb{3+blV?h$qn=*%N5-nNJ> zhCft}8c8~UbSmj`(k-Mlq|Kzv1>D9MU4va?)ywtfg`jm0PH6z?e6*5I~zs z~j;3-7l~bvlP30Ua7gD*1%4Jk8r*buwTd2&U zj<$I?HZsbFFR4-3bPj0|X*p>vX$z@{rtV3jNmEI4NQ+3zNoz@4R80(K)sl+#SWYF) zAuVrD=YI=<=zw-KX$ol$X%T5TX)S3Bspv@Yq^YFYq=lqKq~)a5q_w0?q%EYP6I~CZ z;bpN`3TY~74rw825otMTHEAtr6KM;n(HUD1q|v0Qq&cL8q(!7)N}5AjL|RT- zOWHyzVlg?IG?g@mw1~8vw3f7mRK!s{X)0+BX%T6;jb3U=TS!GWN+3-o%^@u!Ehnud zZ6Ou$6i=E;nnPMdT27kM9b+OA@N<+xnoU}mV7|J9#n{lzz6Z6i2ga0<8i`nwLb@dp zKPWY%&7>>|Ya)75E@>HQ6RGSK4DCepqBcp(NUKSkNR8g;8p-q_NJ&OG-xt$T`cWEb zHL1}bYa&QfNDE1uNR9i*B`qW^BdsQFB8^DFm=w}N(lXK}P`C*g1E>koY|=8)CQ@S{ zC6gACmXU55h{vFs$~9DOCN)wqo~6?LN4XSK#wrv%UnryihhI3WmMZ1e8C7$U0*u zMAjMaImLtSfyg>zFGT)jeCGU^{LA>%SwOkYIf4CUR68$*nnTV>P(I?^3$)(Z3I2xn zF{r<6oNyL4fCdP?Ygd2D3_t3}){^ zA_~O1r`D2M=S|Yo@a>%ebkZ!`naVR=#v&FV;h;Hg2b+*&x*i`q$w(YBlX(n1WPCa3knzc&gD!y`4!8z(sDc0Xvz@~N#L3hH zu3rv2V*EDjfa`C=zBZe8Fdxee*F%ZS0>eb+zdPXJ#OG$aoouqxd`sk*&&|aZ$Z)KWbw%CE`l>}xDLqd4X-`Lx4_?KGRuHWC(FGP`#|}SkvyrpIFuOad@}W# z+rCNvx;0OVbZ(w>1nQkEqb46Q9-7=6HYE{a4!B~SU)B+WrS}Ft=(1^euQr>8A7-0| z_XLJTVTXSWn}3O)O!X64=7e3WUHi{r4EQh{p-5*uN`W1mold4!^LIwvqM&QpexmzS zC$nT1>)O`IGB4+vTVYOn=Y2V!f&IDp#V*#->2nr4&B?sBi_NecfW5yW!{#nFXYFS3 zUI$!*Glw}{Tkx?F%Rdsau+HFa=Im!3@W_nCbEnPAe_(N5p4s&a7F<^=?3`B0u_JYqg@iv^mO|6r-UZN}I`Ea@uI-0~;$uS)-u9b&OA zk3h;I_=A{>z{7@fppp5wvbE0w(D}w}d!6ZhnZHH>n6VfbHo)@%h{g?= zWy~{Xn2DEJc2}3V##CbgOm>(98|c`B;dyuKhA>Mmvvor(4^w(BY|sqoINul#4dg)= z)1ZS4c+G+TO@j_$6D)(kn+2|6nGVi8a11dWW>ZWz=9yuCv-4E}SJ)|5b^RaK#o5z+ zD(%`V*vNT?(bXJ%3r42zy~R?!-RDDgK5Qnc;q;iX$SkvI}NPBClW zsqojTU+(2M{MfHmKaSzY!{XNU_;oDq9*6%zU{5Pw;zs2XZj8xD%LpC0_=%RdK0~+e z7<#T_wcA&s>cT<}JNtVnMyr1wFGD$^B+}m*3x;9(FXI2K@6IEtJo5Qf@X2L%BE0TDqFEPzx+#5%Zxb=hpdh6o6b zqGHE#u@}^97kjxD?0Qu!SF!hcE%E>Ry=Qi^8;ail^F7b^aj)-t-u|95XU;iu&g`Ud zS)}oY@akn<(gj=h*Svr4X+}*{k7`=d&@@vqhp$<4{ei8%SZ!$gl5vHhO$w~3DJ|M$ zXhop!ILFYc+!~|Kou>DQj6M#Aoxx7J%k_l5$h}MNp`YY#(Yv(oyapot8;Ac4tw3vh zThj(?)HVGAeX+5NJIPp-=>U=(bG>(Hu;{-5_>wuK8ds(0& z(~A~^+BTU;G||$j-5b(WAFA{-6w#LiBIp_tMzyt=5=2V06lHbMBs?v2`k{OZc>Q;x z562lAAWE~r02*Z5MXItJ0^#DtjMPBL>_GsGwhM55sgc?h8028eh5*Ek6fDRZO4cy4 z#1C3X3$aCpgT)rvo$<{;dIV@Qm>x;gWR3!I_5kp+m}R6!gEmrQ04-dRgbKuV#2xe)bh;-ne4<;>*P1mqZ4pY1`^5z3HT%~D2+!B6|C}#A-Az}0dz=(bX zQ80ZZQImNTkaIKuJ48nA*QAj;1`H#0ET9$SHQdHIFJvn^x1mGl3xVPMIHD#q3FLdt zI(5J_Qi}jB+*%2#MK)vA+t5C(>GXK$(CG=laC#z9lX((QzEi1bP`evBwvm=Q87lcL zXPCG?rwH3UwQyJ_MJJU2@y#7ItYb|wS zk;)#Yw$vqK>WX38>JBy8Ov=nXHd2#I-Wn-ygE40t_wIK)5)6p8E3?jm!xba8W7lJO z%e2Utx?*HY-7BMcX*ET6kjIFk9SD{dwaZxNz6Nb2eJcYj6L^Uu-S86VD#Mch?>mvsVsAv^jJf~@UE3WKVw}2k&(I-uzx!vbs2D{ zrv6c*EX|@3NrcLr%Ta>Q)D^(#D*;U2tLsrv;~T~ityH={Z6f9v4C0(xH8h!)7;Cgs zzKj%Yonm6z6oz!P z_g|xD0nTh0ZMF<>wvu$VNtcn z^~ysE_go}>BY?EXO(>{fbKy(12yI%n$T-wUd>N?>ja8G}jFOQeR4vjKEh3b($SstX zi?A*k zUCenx(+-uaF^)3pr-*{-r-_=(XMmi40r<&RVudgdnRj63sb?XwO!RzQPAP{t**phs zX)w_(7POy7F>2a}xV>XlyjtSv&h3@S=%W$liiNBwz;ZcTs3#glwtF$6F$yIx}RibDt>f)`QBC zL>p6-y9a{yd!lP9-A}ee%sSJAZmey24_^K*2vaR#-WSW(0cDyE0z>!nl0j2HgtW-8 zKLSFV_C~vHMX@;Cskm2{!mt^#b}=;5!E|NXA43rC6zOl8F%9@@n6jOl5Wt`z5+IIslNtxz5%ds zgC_irHpobQ3#RXcZAKq8^zj`e^zl6~ef$8dd|;%9kBs*?1Sda=lVO0;b(9k{e$4p^ zJUaOqm`;8HcK!=sVLZ!Ak*@Ud8zl7cJ1~9x0Sq4)>n)7Hc}|+diPt1q zC*A1ePtOUS@x+M^tZIWnI?smz$u=!gOCJG9m`G53WSYzZ-w8&oJSTWU+qO2{=_KSi zDHJD7W|%&tMao|h z-NB^)9>5q~lzZQQ9sOGn(SJ`J{SN`+pcx6ET+gxu!0_4J2nf&%5(elEi~yW4 zq)Al;>KOnJ>k^H6fgqp0mJ~Kft@kr zHJM{smKMS!lNVr5NEl!o@V5RjZ^WFvAcFr)dOQjUus09`OaOK!lGkMJ!?Faxc$ODn zUq~2W67aSy)RzJFgNPNF3=IExfD!-u13L$h*JK{Z`l}|wV3`--AZReaRN!p`^kaZ& z5HY}XIt!)`24V$f06R0uYcglCESCV|XrBMskkEf-4hq`_z?~3t=0d~(hX5nMp+F2U z57;@3ye4x#%Mt*CY+iuFAz^?8!0>+rNzN~-lMbN&Bf*p1n4?fYfTMvJ;22=%Sn`@o zo8^T776#zF0LOvJ0N8wDfEKseKn8FiVg(if!~gL>^nU_ywhv`aB+=Z74)ho7CsR9^ zJ_U%2e3HaMW1Qdv&H=!K7$^l{#7ypLXbbJdD0jz$2@O`@)~&SD!by(JmC_BD!)3mB z|7NkBcAu`SjyFI@`7yP+B(y-eU)fI)jXB~tgGb`bEctozwuvXL_@ zP(UlMBq~U+0%BvI11w`EHXJekC7jh@SeV2T5U!!{TmY0^md~RQvs2!cJ|E1y4A+u@ z3@-roGi2lVDYBn2!@6y6MAVkL14iCZbfB#@WkZD2|hW)r-f3?#S_ zc&7>O#su$x78AS^7zy4*RFM8B5EHx`*crz5M~0XkybLjnGsAl*y%zxG`&gC)F$U)) zct0e0*Z2W4kl=&B{xwED2|mP;lo@V<3Nn0{s383a5HoxfSnhZvh{4&r#u!DJ z;A0d%PJ<@%36|v=V+71g@JUGW5`2mbB=|Hi6U0m&u=DPdY$wE$Hs(A7H758kU?lh~ zQ9=4SASU=cu*^D05M!g4AOOj}5B7bYm35CZ@c{5OS}w`kF1zD+`|F>b!R4Bvqy zFTpKjAi;NmcbeetOz=HuF~RqNk>CeJ1?m3)F~JYn|76}nhPbP|4AFg=;YSp1rA3qZ zG0T!5x=vn#pFonA;HP9D!Owtqn&1fR+QgjCp~eiq07iyi5*4Js0%C?=1IxUL1kokD z1kv_P@EZ!hr9qSV9m|p+>YbP1_mD_}Kd^vt=0{>A_>-)p?4Lmf>|X$b_J1jA9%x3g z34aBT3H}C*1b-(gNdE!E1e<_m-bI3_P{R2W3=4)#5PN44M+ZRJU^xI_jcQIXBMAk; zl?=19NdXzi&;;J;eGFH4u7MU4ECfb^VWNU`1c(VnfwQ;q9!zjG6ZCFltB6wXJ}zc? z+xvJ>z(}=nCvBoMu*Ni33CCnGD0SC#tte~j8MN~Z%4ksTKGd~c zrh;apX~yObXq_>x!wa5CJev-lO(kt4$hek4sfCnk3_`?#EtkV zil{3LC?@u8l+cI=@IM-1wW);M4Z;OQv`ca z8GDhvr(4^zXNER)g{JBvZN0AI(RD^y9BE5cib@Pq3gXRkF^)k3$J1S1UEmtxXtuYN zd4|O$fzUQKWzr2{j*)ec5fHg8-g-HE!D%Dwz}o>X`6OhG2aPMfH`zR{$DWjTZ}3iN zu2kAv`HLdjygFb{pbdr)$=;qws+pU~Wphz;Xi(E|kz?M?gFC8WADGm2Rf>}7@js%X zxX+cxeIa%x(QU(ifVI)Ve+J}O@%6uRtcXn_oHwrdpU)Nl4;?GIw0_R6<2l7X&&p;7WSmQW5ylZmo)b->on!ST|Kycd@;&9 z3wF96?A$SBnZMFL!`D_-BRzEm7ApGY9jBI)*_kcuN$1#S{<3YBwQxW>=WO(EC9%AP z57O$qwEpka;%w!>?Yvw2zihD;ErOBGsqtS{cx4NF(mD2j-D0a+I3TS~ad+5Q>J--( zZ}$}UdDT>N7Q>y*VWW|E?`GcGQm5vYv?oK*$Wb8PAvqme8S!4pV}aCZFz2hF8f3CK z5{&cz1_!Y5Zd327%oG|QXsq}O-tiiVBXq<5?$Hl<0 z+gF%IZMBZTGFF=`3kA;;l5F+_#cr6>?1RBX6p;m06w{soracqDndSc2r>5U*6pIs; zVS5e=I5QK6L9=K}HO`pkf)@#^vz&LfM8b7u7-vc2`c`EQfduDVf%Ks$7;V$@NKXdM zg0YxfwRS<1IEPV)LlMf_HtAe{a7Z7T9n!7&5Y$_E0|r=b(|R*`H``sYT8#E^#HFBI z!+51PH|#IXaX9$VEvUS+z-`yBZ`&h4*Wq=Ergpp#p*W5wk94Q^tICL=Hu(gCm@EEd z7dVP8SEE}bM+EXt|7io6KRF?59!Jgq#-<03Baf!#F#yO@s#4bmHmt0JUW4JS?IRw-y>6l5K|GtISzU}rc453wdoKwnTvp& z;{ozh3uxECZknWa0;D@g?L>%5%`It3%_9~XsguC=GMjCmO!HF!uo$pXz^Iv#T8x6@ zS?n%}dj#GVNJHkCL$d*tY-XYjic1S(1zEGgSkTG1@d1M}*rmcNGpJ)DbXmtGz^LO= zqG0+|q9*e+Am?-dzp7)gw+FhpnQ?3IvS2GoJ6P&|Cd8hS-_Gb53&Aeh67jBw8yMI= zGXgfaoH1t^WDI^5uxVK6Q;GC)mKPIR>@@YoNat)6RLg@{;S=0O#eRY|6TYlV(3OnT zN(j03Tm|f{Jy}#QIpAGQRymVejY4`2fGj@GML{h-XTupz1<}W7)bcF{zV{){j1+C< zI;UNfjKzfNuHtJSq@=H<&!ehjySNu2rq80OC2*TiUJLwK~&)to~2F`1U_8P}?1~y%*oyExVRs zdHUn7duDjkN}XhR${OV{cDz1S_04S+S)k^5*!c>T9?B!}JQrM|(goM3b&EkXuTi%X zkc(6=;I^yO?dWq^nwQ|t*Qwj_z=dg^hn$rv-}-F1irJx(^ad=;qR`&`ABK9xP}QkwUfL`*cgBu+A*RiVs!88&k))v0>fX-3U!)a1$^> z-wfnzaK{g;%G`ot-gw5h+iwNayN%R)IY#O>#p3$Nz8ye~^jrtbXB9Vs#Q=8zql$MD z;gp7`$^0jfb2orrQ_i{AG}R8rb2SFldm!5;iF?7!OM(l+j%cC~M&<0woeLQJK4>!d z{lEzR08x|qAW(i(1f<F56;*hOy z1QU4_VkYt!FcNv3D451_mH9jgl>eGElF4ZGel|}*AupMF1b!OKY%9#eCC$E=?YF>@ z4EzkV82Den2>dKjlldG_enc!8o(GfD8hhG6E_{xngBQS!h76la@$_bZEo~#A#VlY^ z4!DG??JZge$3LK)m)!7(`pnBH%Fj5k+)dz;^)cEdcSgkiRRu_XNH#F!O<+{{Y$_0>oPc{fNBn2Hi@@PJ(_+ z`Sye6#LRp`HEvmbih}(asq9|ZEF<+fXe0FnMPCwpfvczP8V(Fcv(>)>pO@`xU|hCu zh?>lAft>FEd~fTG)c2r`)DHrGROJki{S(2@1l2f+@a_!usbd)67YOM2zrg5;zY?i* z)4#FYWd081`~lzxL+VYSjntojxv4kbb;r`THZP#E*MSkkAZjuLK>67t8E)CV8qoM2 zD{l87RKziY6lBZM?XQ;HS$mXaxE{(|3ZW@WgRx+3X~E!$aEsUN-~2nfcrg3_vx#@` z|F}rn?ivZP@#6rd>17)$C^7NtfPF^qJ$VU)YWG!EO*>vB#Z9%g;zGzXU~$`BJNMqv ziR`ZdK5s5ojj2&T3dmVnxD&U>Y#7sN&z*00Wpi2HoC}NIF9LD{d^pC>rQO)=BrtY+ z%oE3U@_q%7;|l&|Gc*2oCSmD!Y8qb14r`*T@oozNqrVms;k`v5CjyWi6mfE^9mjrZ z^~2*hrd|tAx(Pc96`6I5P~fbK=hc?8F1A^g?b%N+cJJG>{Xwm1P-x*HD`DZ0Fk#IB zz-~JS3;$-rfE@E;b86~@*bZ|o0n@)#OF|CkMD>M*2rpm}w zcWDPWT0}?X;IYyb!0^!?$mu}6>_~+jo=VUGyNX;ULEGbL+YubvRs+Mf6OhxHS{cOU z&-bvpNhnT^w;E`8-ry+f@B}*S0uh_OD=-{(15)OmzeBh2cZiXyg%)0E1Ps_c0P$`u zW^Kuo1L=u$Y=O^Adji9MoCvR~06BF4eq|-0puDzy66}mrJ*3JlV)UY!-5W4!q;QHF zF+%~nFR;AeSX3x6IoW4UX3&0+Flc{j2GRqFg6V-oP39mVXBPlJHZIVvq_gL zaNr|g4?!Wl8vtyF0;!dYy2L)juG}!l;u##Z@Sxz}uT(@!b$b+qp57iPsylBwI2llNML90wJSl1`u2Elm zG~|B0)#%S1mXtL47zhLQSit%!{JN2pk=j$3oFZ!@_Basyd6?4N3zV8SYvE%tTdih1 zcx?K;sp(7rOk*Bk+wB8{_o3aIiKW=?OzjIYH3DC1bxK9E09g*;WSu4gZW142;hKyBw)}!3b4RF zni9Xxn6YBcF<{ZrvB0de4eTrgNFOJh6p@9cc0w`m`$K9t0NiEgxXxYnMFHN=4abv> z0J$gXCxDlKqJAQ^vZD=dgOfnxHaMB={1ZoNV(ILif#O2bE+vXMam+hJ9B4}*o+6$C ztGcd+O>4=}KSd-*c4m+;d^M!pHv6{!zr7!m*vVSs-)gNv6v9rhIzII4q>y zs7mLwi^YXUpt+rd-gY4ZC3XBLjb@bQ7;tZf4%{_^D_Wi(D(xI)Zq2A@+wRP4n;Z9G za&z1HzRb4v>in>|ZE|*H*lV{r4cjK&Wi1jQz4PVNwn;2+;e)hVUG>`Dj?A_W)cGMA zxMsJCmIsL2WX$cC+$JNPa{$=#0C5|8ZocH&lg_dK>n7vYORj^RZpEm|{+(5zcYt^l zCJyfaF@@WA`wtsfnKg0%Xg)y1OxApWh`Kgwx!#b(*Tfr9C<2f6)Zafa$p~g zfgLv^Rx_tT!9E=T@8Z_=Hf2<+!^zbdV3~3=$x~=FBtL`1DdU;+7;=^oDIz;l;O2}u zXNfB#y`1)e^w~r>IstN40{G*w%rF5?rW)>3B(jP_x|d1a0xyv{M(P}TP>HNYF&e5H z6SCK!gdOpLh4#59)z#zZ!&fV`&qG;e?c(r?l+GC=?3@o?ykYJ3p(KNi6)x0p-^ZK_ zpvR`Y5E!+%hzRds6E&F^138xf@a?Qif$ht3iOWgwQt4V}_`^7W_q?cvYEXvB$v>tv zm8rTkcw>e}buhxck0!YS+FpyO>w@*umE?6p$HZc1yc^R`D=)R z>1&Cwg$R_t#YJ0gtS#dz!ANa@LS9hpC|yU}=FWi7*HcTvAg)`VighF0$)c7{?yc*w*vRc?NAOcokZA1 zB*Hc#P|JX7Nu*l%Zpi(3y#4A>+k0r6SKE8R!6lV75d&kO!xkc#417P;v4uz!Og~7} zWIhCxA2^9!LNFzok$N~=v>!o9`Nrl97hD(xu`LKLoj(Q)=Z_QNMQV^JN!J&h7vrk(*#{|i8lte!;Irxx52NLEZrz87pK1KIafpqFI-qucuitl_k&L z&OwcF2>Ak-Y@^MDMHmEJd_klTI3B%%f(7sgy!C%m1RAd z(xA<@WC80)6fxIiA1glq6F)urkJuS0l3YCtEq4x1CGviF zv=kGi|HC7w4_39!{_+T;c(a&ZWCqGg_s0tzo-uxS^zgyiA09ERDZ%r9cti)LBqKjO zYU_5KQJiSN{-?@xyFWgnP4>q}?$CpK%;ZqnvKH%e)BKQWa=DjH69ZZ{O(XRYr5$sm z`IUHcMz#`kW2Ol6D?taQxIraqX4cfI3W(xT)TQOGr>JkA>K;C`rW?j3y!5dZj3j{i z=tZZ_ZRMBU7WVTK$&#RZU3VJFz@79-G(T zr+xqk*gpcsBZ2s59``5EMw9t7kn;;b!+!xJv0ush4WN-M;ak{0PQ-^`zu|Z8w znkU2dsfM&g`*6=H$Tz^{pQpl@UNPqyh_!zq0=8<)PS6e5ep}{T5OgoLCf3B-h1e^M zIh~=(=A@%+bJnmNNYjgv>O!K)>zG-enCJr^8f*5JuoUvfQ z!me#1&Hfz=1{J}65(^e6g0*ZFw6GP+0YV&M@Hi11jbxFZ ziQwZLg-Nu+!dOu5D!Ug%XL8S;o^DSiY(z< z*so1keLszpssukp_Zh?c!K491G$nZB!aa`5*wX+l8!M0UF5?zJ-n5 z1l0#qHiYcm07M;W<2Qx?jbt_KCN~x~aT96Y__1KyG)K4?E(m^jPF)UXX$~2Rx4X|% zdTrAj8I){%07_QFX!qMgD-Ils zVo_lry(h4R4cSD5PxgtZfvEt`ZwY4{1ffvKG%f6FCiqdSL}8OT9$aT{+BAZ}G1t`g z)-~;7j8;Z!f;)SjRX7pisF~WwJ!f83WM2>gdlI1g$GnP+IEx2tvazX7J~yBe0ee4D zoGfq(*$f+p4pluJs_#fsee}pU9=|WGEGkUx57lC2tip(0CK3+VjKLRJ5VSdvaXfy9 zTFKiebpYh01>4vnGA(0}h#5VoBvt6#jA=m&f`asP3Pu_2 zeZj$sQQ&^1y8G*piS0{fEi~vol5J^S~=(1BZ*+CVG zl69(3ob0Cxt&$^Dp>=YCDzr&XSA|$|0Sh&uP9@1x6st73OcmNDFI0tg$*T+8#}^DA zl5M5C$ww=Rf3qU_l+f*=Mt+CnYl172TLo7oe<*N=9nrPIF#QW($fCMftxWf%BX*Z7 z;9p-}>z=&U<^0fQ5G#9U4!Tr&F8f`(^dUs*w>f7RwJDP2Qx!Kwm9muuT)!SlwfKYh zz99>umRq*xfgRxHWx`sHzLu~L69X*&Xu#>6*q)z9xU-IoXWAltX94)97y%2<*@^TK zR5~_LA5B&_%Tnaxv|)R)0Dop~T1QcKpaHuapU%-c=AuShGSrVZ$7whQ`Z6@)e()w3 zvVHrN(&N;Vg)vCU5?#08>2XE9}iU5I-EKI*f|jZ z?`xl6hEpe@*l;qye5vax6sG_h$rAzJm`~VgkP)SBH=tY}Qv|=Em#}e*N1_Od^=PF2 zRD2Su03YHi@LnqmS$N<~ST2CG)II9x?vqZXGpwhWGgexxm?;%NyEOXkf;HA@kT|Ck zVDRwzLbC#%EzShnTIRlgbfVj87zV7a>;Pz#h>U~Q`3M@Hg=YZ#Ts&x><@PyduP)1B z1K%Y`RZQaj~nLFtm>Rtpjyx4@5u<2j` zi&*PujF~MFO5w-nL3@pu+2;b);cZ_t<)UO`jEmHjC9gn^N{{QZi;o>pc)qAxYu(q6 z9k=TRAR6%N^q^deO2)vT7-=L+_!hcCBKZousOnt-GGJfi9%R=Qu2Y^acF(qlmu%Y@ z?pyZ$*{XM@=S!e(UCHd%1DL5T%>Gh$zl8$}F#@ydmrK>xFU+rcEsd|B@l`aw8X%N< zpT<{;nY|uJRsAZIYz*V9`e#yg>aprmjvG*Tji_7Ky5}6{RUJQ$S5@!nSDmZ|0#)_4 z7@_m4-a1)VldU=&`rFL7r+M8!gek83jO4DN?jf}tzBpN{|HFMa*{L&TmWXvdDv%td zWSA#!kj4&|uBwYeTTjeRg+HV{}hxV26X{YH19({a!o-{@Kx8TL(#f3DGhJylhW z;h1xso9Tco;aj&zqu$}PAAKtXso4-T zH#3gN?At-xH@UGzy$;w&^Ezt=qM1s_Oj36Mpr7|o&-;9^CU5^($oV=m@vC&o8oK{{+#9uRR1C2$FL`Zs_`D=VbqBIZF5N*J4}yj`9qT(KtAPMc zho3OABlE>qZmxxgPzs+$2(FlfIZ$ZpUiXp{x|G}p4GSM;Fu8Ssck@#BxtmWI*5!V( z?`1oY_dp&cvisbc6HCkSu@8s>_CtXD?b9Zq9(JdlXk{KjxwJ5bwKHR=c{NsOq#q>} zD@;jb+ze*=u^di{^K--F;7HY;K*4zupph)$oAs??SYba!$6clQ%3&YH!uLJQ^eZC8_+_SFl_I{nVWzPVgHwEY!%V-HnZ)G<*ms zIv=6nYz1f}OZe%JQ8F4n0Th)_QE;$Gj5LxZ{PgE284X_miprNLI9~xYk|q4~*L>VH zlGmf(S@;%;nPv|%k~jM_`;d{m-KW11dIUG;ME_gTh4sbQ>iP~v=X-#n!t@VhhlTxP zmR%f9|3r2ySl@~}V;(;v&-&?KL{uQ6|7K12BdzqWB0+D0(QlNnGnJY#GyS_r&>bN8 zgA(?J(oigvZbE@uR@R>^;PoPWT%DWwm!pnAIw@Io-4)9COF73NTNX)op~7l`$Mw%6 zK80yKKqYt#`pTPqF_mBODJU2GwbCvD$E22|lVj|JeA|EfE*an}MY(-b6&a&2o2TL2 zz`BW-T<(qJB3*pVXggAT-e^1ATgcs-zsO|dR?X1@)`Pg^tg@9~VWsW##{skT5E+F` zI(vva%SeSm8>xu)IW-F zP8;`##Uo}n8yijxQq>B%+>-5bOMPya=9=+4CtjO)T(>aYePldGqb=>8XZwuyxon^5 zJ{1I&^eH0{#QTkQx-wG+OSR6$;ob4*n|u|XOzUw}Ct#P;v#D0T6)ek{1ZHIIc5a`x z2a7F;M?EwhA>yp^qzIs*7tLY)epn1LfqocOu`=i$0o1C~WW>xt&j*rSA5 zeul-Sth{9@y&V%JZC+cq(LL`QxACrJvd6d^S({D>#oBZRHdBNxYf}SWPHkE~Cs|J- zbH9$`vE2#%fZdf=-2hbU)uYmwpYewu3c9O+-61nmgb3LD+=b@rK~u}E&kXF_({rHy zHp888V5H`tx%hq{vG<7!Sry@REGzE1nO^;+U5gBBFg{3|o(HwKfi)c(TWl1kJNv^K z>}A7SYgSM9hfJ4)6Nr}A>}pkd5-e>z&*MkYR@kmb0gq3;fI{-vW%ow0zE#;uY&RR$ zQ)rE%EoI&>q&NG&kUp-_>e2^_Z0o+jxcBhn9zk{c133c-1{TPhh0Bf9AdsnD00Jt+ z7kEIy8=hcTPqVqvntVa<2;jTfs)HdZ!g7Ij_! z1j>X}V~s^QWbX;coi}?N3U#H}g4+uPivdf`cP^xLFf|@5dvAbxDv+{XfP#%Jng|1D zRVIQiElkwM3hjMZEGWd=pD3t^cygTtVwk*160$ba!+u~uTOM$q!2@m~9&iiQ11_>A zd&r1C|NIk@5G4F|^S4WPwI;)g?K}k-?YuuxFns_KKBo!f97HhH-S5yx!~EQ*tHHV>#?FIF^YqXD$>O{16)8lL16{trW=XP$+Rw*&Rou7(%4C4}mcUPW%ZB zNb{4D-^tD=+ejS_Wbyd~o!;GWTF1Q>fWcr#03+CuM8Wh?L`~+=K-t?bXRtm2e-8ta zock|eH@dA(uNZTzuygLN`i`o~SOD2{HWa}A7dnBn5G8c~<7j~$7a%{cqfW2x?SR3& z76Bu#!(kZLWJ!r*chfn={r&VBeX(18 zM*j@&61-OIowhsp(0C**yata~w(?$VOE(MfiYvEy_)J3VeUAa_l?+U=1?My}36HSe zV9kWsCp(7b@T!fBv&1u7N;4s{i;=I4)Tv;=bE^KKu1U<`oA30bTLBy|!SRa52lw1E1rfZ*7 zdHBT;VY=ypi|0)@A3})xje_kA50`)~Ztx0rN{El3uZqgC!)RW2^ZmNtp4Fkpr4X>f zbd3tr+Ng^*;KwhC#v4O?iIqn(D_sZwDBL8x?dPN8K_vK~!8*b^@ zBl0y`D~#+~K?Ym-h#>+!lm5LO(S|hmV!Bx2eMEqK#0k3qZ zo{mE<)1gr#S;9{y5mH(7OD;v(u(q;|VRm%Z44+u_%*Yac@;s@}Y@>xGHQoYhk_1LThKF#V`kkvqt{4m#IeSzlAURmI-UD-<7q0y!u zLGmYGulaE8Dg?mc+SQDMqX&}2LZk0*`z}v)B&ef8=Zuu;)#fmlJ3#6oYco)dCw zLhWolaX{SNOs>im)5%WiIqjTmJ?Y1k*!lIO15 z!b1%{vWTbte?S-?Zy5Fl6s-H$VXh->C$Rk-++lBaD3; zonneum^HhfX17z7Ea6)lsnpLg}uSzs}NC_I-eSkW|=sipzFTxfZq0q~#SoR4;j+)}$GB)!N)as+wm&nXn z%G{kz;NUd?c@TIQ<)TobTJ%2xLisI}(IBxs%(Qvzd7QP!7YpbF zV-87Tp|?B8UXnYyP(3^N$k;Qs`Mpl%WJUXqJA7lZ`26hPLqDbj&mVl4hAGK-gX|IK zX9roDYnjXwZoyE>}$B=|B2J;eeTPb+LcLo9;}AKm#6??{7(M~7#DoaX=w3d zOJ;yY4U-HNq?x?eNsHe=*?AKH_w&EqC2KqOc?(3t+W->s9m+f6GB=VXeD#W+fBU)5 zudO=ZdR$0vi6-Ypzap#V;p8=y%@%lIHjLoKf0yp701#gK9-c|w1BoVe-gkGupu4dt z;vRm%zU@EonE&zchaUdOec^&WnP(7QcFL2_XG=KHf{OLKG!LKU@KT=|++J7Nd<-$O zp_-S?Cn)BRq-t7?uS>p^^_zSxTQX9gdJ!_XM+xf>6^7^7)Q~{5$J9 zxg}e|Cm_5a+s42{4r6>-fWsBmgqmKEuXY^dgRJZ1)@;d0eZ9jVc!*+!RP&FP-Sbv_3y7Zd!k!WHkZciFYkWzV8_EPcV{2(X6_r z^RzL6;n4oxjjd~U@DEUGJdwiq#(?KKum- zIyrPDtAPLqf=kwU2bg$iFW5kk936G&WqcG{tJd-|LQ(_akc)N`}xJ~{nORPtRX(5?!_akfdKW6U(#a$4`MNO z{th2%2b3qnmWdRw@mY`d56S6rY7R`~weXPrhkN=ZBXf>_FWEzHa!W2v01m&j`)+?S zztb6pzzVC@;%$d1XDL|H0>AqiktKX&bor&d_HLp*E@!ZTzzV@Wxy-+?QE{i4%H0`R zcRK$bnGS9vSq%i1VY*jb+R5GJvR328=UJ2xD4!SZz~?e(NQyzymf@ar*>pYN zes)>aZb61yK@ovfl$Y6Zu*6Hq_d-?!0lbX7+$zjAy?fl{eJ4mqT1gFpY)8VAqv_xw z(6kEkysv_ec*i5BS8uW!2;lvz%cr%Ijq#A|iznJ(51Y3V-gUTQ_dx;Xy_)I-xC^nI zFdf!L>LB;4x@p2jgQe-s{AgQJ6M`z@rVJ(>gu<5I+(Ls_z z3pJ9}Kp<;7L)LcxOS4t)C`GobJLam+>gt@&Fa${K_^Sq%MImm)Q!U<60kGQQV&G+W zchgmg!eWRp+qQDQzp6*3HHd~b0Mhy~6r2)(MzVz8P?{Cu1PAY{Q%IKZt#;x!Z+6A@ z4d;t8=y1MZ0B^o1N3q51>RxnpXZ04zF3go6xgqL4bM;8Q!Y#U{s;oV18V6BEV3kR{ za(DPO^@Z70gX>%~t0&*!YQSlbYJR+-V>%sZN|x}g3eWV{T+`my_N!*EK}TgruCFx9 zr$s{2f$d5#&^KwWuk?D-+b-j$#P+W}^-$}NFQ)T9i zI_SI!t3z|uJ?*Z(b{%#u>A=EYklDtt1`)Pntzu;u-Z$U;H_Wr4sB6*p{}8%)4T$G$ z-U_$4E3PZ|8)V}R*A38(AENI2*H=vc0hb=X<3%0i>*V+uZ?M-JRit{Q_gK93 z+nqHFqG7NOvrlbbA$~m~NcwenSF0BYV=-CEJI;}Ld-QH*OLp_+d@6gS{spe7(+4U% z&!H;LbLhx4jAn!{Q#_CxK6kRXmt0_o6Ir&!7~;Qpd`n;JRB!9O~Xb= z%ozwN-BUN~mlp6l2*~N@etT2f%q}Pzi}9XuZu-6>>{{T^7(zOtYSs}A;AjX?PJ-QA zYXNIF@Zy7bSdK!y{F#w6JgP3-T3761k8?!5q5jkevgXgF&JJqY*9hueosepecxzp? zcQNdFO{}2|(l89LuA91ivZHwXXmq@Y2`yVei-KLxWpZ-t^PMG*nHX`+* zl!tE_lVMMnit#rn5wt=+!~0SS@3x#zV~|v}R=0|BaB52jWNiBf-N96U;+)NvK}T+m zcv?#jWO!fK_**GpO`l%}GN!KB9dA!I{~2}uI3}9{hupjrur|;4K*s-)0v-$U9gwj@ z2bt}(BbM^{9>~b~s>Htq1`3}fXf388bBJ1BW1NFHTzm?T@_whQN`T??< zK4kpb14GI;7)q>5;01qV73uSL`y+w9-|e%A-|gd16^%j(V_Rwu;4}fsqfM=|M{wjF z1Fm{UX&;VNGDeMbFW*?cm$+F>D;eAPXNwfYF(^G20Fxw@ai+Ij5O&oa3UwKLan7;UDq=*B^&RyCd&tJ6+XqPY77Uall>;SyVOLOIfAH1E&d4 z!@d17D>wm^s^BEQg5%se-Dv8ARe_$?Y074%Y7Ga+*{<1(@AL*0IyVp!tRVF(CkUl78HkIf@}1&(An3d1?7 z_%5)np#!dOWTHT8>-?iW+IRjeRG&M;;BO-&liK2J)sdi8{{B z+|@24#?Vzcl?F?K>Z>|gC5H9>=2E@-n@e~hj*%EZC0SZfQcx&q=l-FlGQ1cPSi!YO zQyHQ9gG=O9q0U(zKmIC;OexDG@A>BO+)m^6Yup_%H*<1Ue=mjlQc`~}h4Xm)+SXcX z5(;%(8|;UIRf%Q7Rb;VyVi$IQZ9h%JsYGlW!;X1|`@@i*FFpXct{823 zAU%mr&~pyvL15Zb-RRw22TVh;IMFd|Pe&mNOG%4=*`!m6hHq|yoBh)!Z}~6o9ddW~ z41S4)zr6_H-L)N%=}$<|nMD)4!802e%ceQhn@hdyvJzhnP8|Y<`evn7qpHapgFb$y zk3%7*k9olGaTt&@9{>jkhSh}z^Z50rt|%#f);E^_heJ<2(sdKhS;xQ7@d60x_y}M) zJ`%_|3IKnk1%Hef1uX85Al^Gi(UU>q<$a)+Q8i^|M$pw^YWz{kiBjNc; z`<0QBG(aQ=7z@fpL`~-LK>4lVUEn(4|H2Nh8$rd3$4I<`jns*NUM%?>qSZY&;BO3g z5>y!QWMBk5g{TSJObECbz;Avp;QqkBOTaXwegzvqWCJmDNye*fBM5ADE@_tIJMK$C z*^i;q7lAkxM4@vUptOXA0DmyC)4^e4X8IK46mS*KCC$s{vXJc<wUE`ZZ})B$+~k#++U?%8gbCe4h4S`~+R-As3Mz;3^bfj}7t&q-oV6@p)L`~+^K+ZJ) zejZ{M;Ge(Ig0M4E*Fx&W%%uJSA{%rA1=j)KB3|Fj$921b61j+lUQS@%2&R=lYF1sg zt$0BTnA}Z}F}a(8k=!jr!St;}P3CPt&g}s4aoNVg72QY%YuE`+uxpOLFANTx*mnY_ z?*f4BKY^UP0r(;rp2yS+{BifB+KzgEckF|myWI<+f!}cwuQ~$1#l8;(Gkw3XQzX(4 zxXT~xnt2e#sd92339LFI8ZZH^hrmq43&gr0wF#6NDiAB{VGv${Kh(I@fFN4G-037^{4$^CS>9D5Tc-g%zkkAeAfIidVG3t&1ktbL#>7N+xzC zShIReq0HQV8X%tQ;wsLK-q61*@}Iz=M7cqilbw&w{EM7BbK}~Z$}MW{0om>)NBi|h2rJ- zE25GFU$&Qqc}6vi)B>wCEUo@U4)C+NSSIoQXeYIpmWwbI-9MFK*X@TtfLu{Ji{maQ(NIULawlh-`ND^kx9O+#?+P)dBLwjfqbqv}DT427h9$HkF|w zexxqG#mY$0Q-4{Nb@8HdcM2Drv*U{pVi=Z?FQLqk!b_3L3E6_FLLQ5d)GMEsCPMv* z%6dyQyqP4fa-2^`#FwcUOus@@kbV^?F27WGjiu}uvkyKL2D)q|ms>%rSI(fyF&?LD zG3N~^aNK$m7^BU8HQNG@#ulE4_gytKm_d%;gPByK+*|C&46*H#~pu?R01B{$L1adxdYaXl8 zKXQjZRyJ@e7(x4EKx;sYI<=zxCy>zoQ()MC2IPG1Ui4U1=5rMNY-Y)dNTq=Ta)>Of z{W0%kS4TLAiaB3`PiJ2N!`atB+f?csFn3a^HuUo?bYh$uzEh6Arz6&?++Fy1!JZ$1 z^fQyT9)aeF!4iLP0kS~Q{t*bh<0l}@Nk0SGrT9db%$mO_=6~G>9xu=EDwQziue3n! zzX2oi??m|Z9gx!m&>T-)T|B>Q@Q8?iLfRZr!(YbDM$}Qp^GNEy(5RJfVb&YngEs%T zEGE$aHFs0VVZsc8v~hre-<-fia@11=U|NIG&`>Z@_PmsIr&sr~CpyR4zwg|7u zVv5na?s>poc)rn28{yvkAO;H-G=4MS`q$H@ldI$?bV?Qp67NTXBl8bySZ|GrKw$2P5y%d z->;~Cwc6Cau4b^;x>I#lAHqvF#-0g9GC}Mr6l)J^_ZR_8leI!Uq}?afSwd~n9uVq! zp&r#95^A$hk82ML^`lTvYL5z4Sx%qNXpajuLa67oCxtphsLk5bLM_h-`I7c8A#W4v z7412LP5i4+uW2ucEY_Y*-}b1>Fi;e0A84`&1}Z!*8|Eg;F*APWw`*FT~CF+Sfv<8vdYtD^v^< zLb3Lv_PtPjg!)PQQK)@|`dRx~sAH?JiZ9lF(f%tWS7pU`*!fK;Ri|IIKZJT%WWVEO zQ(mS|g=zvpDu$sQJyFMBJOMRWC_@hmHCL#hUL@36LYaDNp>6|}DaHz`M94Qq7}47a zrB~BwkzOHGPoY}rl>siMrU=zWuNGM=%nQXBYq|+_m{9F>OQ`#Ws?h6%D(y_oO1+Oz zN0Q2D)%pM-9~NPazN=6b7{7|OZu(H6Y@vGSBZPWFsJK2_sE%EzS+9>1YLQTV^a(<} zAXI;Sl2Bg@H9(&%RBN0E7HcyH>iY}XTgXBBfkN#o)Gqo|p=_ac)u#(}j!=X38A9D6 z)DV4^P%j9zn?6UV6|VhyWk%gMWAvo(zU{`aOlQW zp{@{Ws(zMG>PDHSpDol&BAcPF6zWHzX6fe$Rk43}hM23b5pp-74%Jw+1QK=7bPky7ahfPGxZ0QrclfEhlHAv5yO@G!$PV%ceVbgQ0mTg^~Z%$ExuNNQm96;yHI~xs4IoK zOn*_Rr-iy&$7fM-KYT9KHTqjZjlpzMto=iOUok0p7X{;`lZiSRc48=)Q+>M^}Z zs8@x0N)H6(9vA9gx+&Bj@r`Z%y^n7ESmw@ot3zv*_wV|iB0PNKS#QiL$xIMR2CI-lrnQpu;CTeIu*mzT@{f98enZ{c})w=eU%GRnk z9AdmLyv^=KTTaw%H}>vtfW_~1)$NUa-`hp6wJS&M7t`#@(@O}~N_iXTu6)1iFuU@n z+0^MaC#Eg!ckLl8D_iOx+>d3WfAr9p_DdfNkkT@3R_k#cP%L~~bAzyqDp`k(t8H~Ii+whb$q^2M=3nW|bids?rF3E?eO?y3a~cX5Hz~Z!NG~U}u3AU`$)v+Zi3x9_+mq zaBFWS(W=ixvIg~8JKEGb)QA1RZ^vr&n071@+LpgP&Ww_|5mTGwKKJRB`lOBaXTx-T zjeFDQ@ATcalTPaP$O2QlW$+^l*sv|T@Fe%XFZRUM4Sd-fu>Y4Vr@ma0kw-Orjdpr? zo*vbPV%p@lY0nIwpciTKfBLfx zJ?a=xt+ZP`YI^tvy|wn9N6iV}gHdr#2JQzv>SbDaquAR8&Vljy)ZaU8^9eNq3#MEtexajuLNgm_j^Ap9TZD(yW*g6bPOS8E)aHJlb&t92fhrIv)&X`6iNw$NqToZ(s7 zN1^qawtJRpUwEx{g-7+$`-ZO9szxYTFMVd=&DtD~%JkARg|})~`@*XVZ`VHYsYeU% z(CS8J4gXVkm$uNSLgBl$JAA4>e6RM4PfZEmul19*SfkD8^mE;V+RGlb5!5Elk+xWa zH%B^;>GgR?)-Dz6WSDMi#1y7nxE^Q(!Teo`88vDJ)^nO7HhNz zKs~GVm$q1=we2#d*Yn!T9(7cg^?f&MjOmraHQ>$@GDv$pFBVO znl^cqYkqGTGe)_6z8^hgiINqr!TI=m+H#M&6x0XW1s-)hs1LQfJnHU9d1R~h&?xuj z?>l5}+=G$MzyLES^0{^+pZr0+D%7(=J)yl6*&VVrV<>w<+Y;FW)b&Db)we{(MZVBB z`qbpem)dheohAeESK7lut*KbhdjAezX|D>!LAsy*mG)sq$S1Vc(Rq=twE`?N5u$KG zws#Xg?}S!vCWE;ZvK#ziI`0D=(LXKMen_75db7 z;U+EWQ4Fu?t%Oojl&)9otxbU?=dT43UGFc#wOU0q32HBo`ZQb?H1s1q>W^?kB&aX* zsdW)kf5W4qkxh}XK6HY6;g6#;W3XqBD=F>VMnAx(zKz86BZXR9xG4NH{@_Yd$qIW$ z?+usgjY6pwDb=4+n%D?1qNV!p9+iodMBD0h6B%Kx_7SLddT<{_eHxw@EYmA8`zrE} zaCNjozty8gM&|`9^)DtV*;C=sQ5;@RR@B(&=xDY6`+8*gZi?3H z6NOS&q+ahP)EaG0_j`7&*AMVCkBSx+)$2$2ROh1J`l&uOw5YFsl~2tm>aRaNUBkl^ zGCeBVSTs<7#}}Sow2S_;Pu*NJST8@=UHbFn%&>!1PJe`dE!smr+M_-VPY90DpY>&B z#e3@345c|TIw3e-A3aA=o5DkjC+LejDjJzwypR5hN4*%GU%ap0XRgwmttX2o>CcL6 zjrMN$>xS&7Clj7rHA5&iNuS-O=%>zg8-5v`xzJa+qxfL`6_0v7 z`bhB%{STjdt$3#Xt7kr?$N9U>)Vm#`vUolELGdhoqE9sy&(Rlq)TiOa!MXZ39`#4K zq}8GNfJ3v{4{tSJADS+CFpSr%)F}m$hTcXdjI#xeXD0Yjjt!#anqGViJsDF1TkJq&`3OOTi3Ro5G>iC+d42#dvDyJ4w$7 zrM#S^pP?x6a*}>-!XxSCB>j9(m2OVbuNF$(FemF59_1RpjZx0lYI7pHv~JKJ77dPS zr1-a)c`uw99tG+~k*(3nd)_%bqj&dYt%|0!&gkcP)TiO!1C9FBW0c(=;W@3B>MK0z zqsUpUPuDN?%FUJ_p4dYQi3rygp3w$4A9tcH*+tyk$M z`P9#?*XXZ!)TVGroAdM^7AnoB!ihF(^}?j0UIlf5zN<&g)`zyaP(L*3Et1a+Pi}LO zev~KdR+IrXIz_`Z+K{3P+gz+)=uu;e?rd|Z{`F$Y*phDSa=jp(rEZK}sdx0Lmtt4z zy>h5)^|^{F{I%%E*am$ODAZqFkPZ6oB3z=)>$76~27R$_xK7`opO!}rXvhYn?2SCC zqA^!?ULIAoBv&?wR0d0iy^E_$Ht188P@7zAfm-HK2Nn-5xlUg#)K-0d@!p^=73zI` zQSnSr*9+xpR~8=v>UNL1vG|0N8}!G8k_wjGq<^d^?Y`pMN^aHzOPNgO43LkO+@g09 za;^4o@k=GQ>H`&pd-0``+w^^W>g$r*^)o!`(#UTm8}%DJ>UvOj>d&4kHPoV!($atG zvD30tuhP5qy+w14wy{sisC)EJlq`d5IHvSo{hQN871YGi`}M2OXr>;}Ul+>NosMr{b^0@U2cgzz&-R-z`5FDO z9NEA0sh*5J|D_+c(zDCpiThdo7f-km!e{kQJ?f#p`%QjM|IVYf^gU(r^ZFH8!|?3V z&H9%@p1%#yY*>VJxil_;C?lHNvSYqW&C#qaFLq~40jYzP*CuKs34R#Oc7I5ObqY_-V!ql9Tc>SmXVijWQIbe<+rj_N=+d! zZXDgshNdbS7XM_{SvpkF)cE;X=V&I`_im%N6g_V|Zj-?Ip^~i?WSmx+iyO1 zX?i>T$LAiMpy(LC?{lB#Dbj?a?>}^=qAkKz(mboex81xXKCkE#H#z*k#5%qEy>3H& zIXj`~pd`WE*6ZHaZaKaVETx@Z@HMbUaVIKBWa3+oJF-RS!8LG?uaT`q(r?}_>?8Rh zUH;QQr@64!_RuC@7Z$7OUDUgN=j+CLx6`k_9ayuX`)+^vdb6Dy^vEklua3Sfzf!0B z#@LR2>=#AceQd`7R`Q1K8QkY|l#6w2RQEq;_ZK<_v&N0O>F&OrPlJ3L$x`!bieASs5@B=$Fkf;V?!5*yO)ZS(8LHXtpPd-#!GGIOeW z&~C3^f0o})J?KEDwbK#56!uO#wfGHU>6@XQ6*~OQFO9851ZsAEg#FP@)chzb-U6ZE zIhzNw6YbROJcPwmKk%q|DBIai&gNn4pLVLG!`Uq)*rklo!&$EyYzOzhN}9o<5p^?z zE!0i)MzCBvZv@+B=RL+Y+j)<%^LE}y_Klr4lJ(j8U_&eEC^iYHf>@K?ea)j-`MY4k z?cr`tChMi>VtmM?(QJ^Stv!cM%3{M6we);p(&Ow2MIH$kCXHn^?OlYK$FVaykspU9lve-KK|IdYxk2UJNXv3^K!oZ2Q&V%zP! zC)kE|&y@QFTlKF8?FN`9vmqZmpfK~3>^Y?MaICCB=Q~0ZEfjOV8RP>j_LURFI zqe%YJlX)t8Ly_6=ym=a{R-}nn&C}WYinfT?%`@0OMSUDMwl1vfYZckM@8fw^7Kk3an!0B$WzLE&#;?p<##-CkW&4-0FReRm zX_m7DBz+H;Gk-;&#NW+Z!2%V@muTMeEJV@8c#r%S*nnNOEHAP@+OuTkzsP>G%kmQ2 zZ5O$cP2VN2|M0rk;&MtIvdrnTkZ6O|J%$^|G+Eoe~0E=KVVNH;r(x! z|3|E--CX7WF)Oj7oot02?Pjmq(Wk7^j`pw`JKD!Su%rF#Q#-0-r*(q+Uyc74?8kPq z#=ntWv!gHB9XmSA_!kfMzQ+G3b47yp0w4P~v2Y~##^f{q<1Ah$r#0^N{wG-PO%-z%Qc?&KgB*%G{N|*|2M2r z(JRI~{>|)rBzUqbX*2s7sm#w}m0#vJGu{CEB+(c{PqSd86;5Z|_ZYurT@<_xcBX$7>wk z;36wlw8c0%pp`W#`j@dVK+dQ;2$AdMkjcV;ADFA6Hzi$W0gB#}^b<=#T0!cJ>jHjZ zjYst!4jbPKxWbx`>2%uoo>k(Xi0hp`b^b&WY0|rBl=K^ORrIOzk$~TsrQJIcaE-}v zA^8v5oej9o`nP*$1OCfKDk?Vq9B`A3Yp0t5f3jR8{Y}617Tc!~MrUrZ)n7qU7@gsk z+pHRCg&esV?Rf(E{pjZH;vpk23YR1Rf=4khgk>* zhvUosE}>emJMC&U9oNI3HVl1JpY>q{q7Fz!nZ1#On(fF<=B@Ai*^t zGANGI)95+ncnow-;3l2q)6zRAflpU7&0|&+vOmXcbJ zXQh{?x05?j9@K}wbO!H?KN&B{?)&mLRhr*DDrsN-mY&9V(_?i|UtX)ckPdrfV|*E z%R`E=QxSBS z&qHHu9p>|Bov_1v9;XQU%jZ2L$^F+~E%|&PntF%%d{H}9(gI$t6KU}u6;Z(NJmiU3 z=um#S9q^&_cIt#jt$^=Sp8Nx7ndQlD7^%FOKrnESiRRrndy~f_k*0u+t_3_rCu}&C z4^dvT^rrH1J8v3arM#AaKRZw3hwZ%S{Dkr@OK&e^y&`VuY1_eBJVGZcDUjwYo@-~$ z=F@c|<(7_7vw4l3H-~RmUbWnqIs6wpZ!Z5sdH=H1M9t;5745d%h?vI*C)m25&qwM+ ztY<7NdOjbguvLZ@^LOn+pXMJb?;p#s=%;zDBB#J{(F?g_qAlqn?yeJw4BQvJh<8*J zCnKNb)9fNk_#EYpvx)5XfqC@Phar985it@~xX zyH4b-z>Qs&@!pEI%I?ef^LCNT`D*1I3bbD9vYcxQPsq>}{Aat+7x*>hT?wYC4sT1iKw5{t(K2A|c(B7`A_`7zIuka6*H!#S}+T|5qt8i%0jfmCU zvCo5~^_B`AsFTympk2l_ypy6ggA4&{cpQ@cCGZ-)RuR1aTfAD<7^C zITJFb%T}JFs5RtN_ia31(G}V7J>F*5Zae=?dEG)ccG=GFDe4{CE$&}j^v51ZN@!xY z4|thQcxCyBue2(2dFZt+AMuTfUI|?nw}aOx(qzMrdH4X^hVJBDbs{aH>0Nj7WJN!Q z{vEfArz`rmY`2>?*tPqVA5&h>ux(vG!caY~Q zZ@Kgi@{N+L4;p^SYn1u6G{5Anb`1~lUzB$+JTu`CZyE$0UZOvQ&kH)t-P3e}oAF`p zrwDGwhxt=F8T})6NqSa!aQ8pVmjYR38n_!D=4C1r?*51Qt4R9I_%Lr$4WYv$+&$ga z;Suhq2s%8%i*>>dkMI)ZL5D|pnIh=#2w#q5)$jgC_-lxIhe!B=5zvKxNRRSToya#4 z|4BT`;~%s4l64}j5#xIuR|uxxOIx1d7jTu=FO-}{m=8mg|;qQ_z9gzQgo<$ z3r{Yx_tJHe=f&LtExi6AuSt2W5xE0fc=Ig#b}d#N$>3;1Knou-+uj_d6Pb=)<3nDP z@`}+*m}B2AStt4V4{~mQ$lIyB#hqX$#9Vp(e{dyl;e+Su1lNQXK1vZ>6I%FQo$#8_ z!W)za*Mt^+R1sVgT6mL+glj?zKZm4W6I!_UJX?Pk__%p^|I@E}7kI8Rp~DOOE1j^z z3;eY5pu-EiMGWf?=n$xqUgWVlk?-YGc#$ucr0#$9mW%ui z-E@lVvdh@Ys}=R@VhCvE+mZCQnyuVpJ|xvAg17Q)MetVh65oUb9oAbe@trz3EtWak z_&!CeWzII<2xL`ruiJQ3u`OvEpQ{LxUgo=z^u4&u$s&kcK{|AOCG|2F3xFy}c-Pyh zSNLc}iCsMh{l*_xG+5GAUZ7}vSM#9X`O`?&3R2iLanLn>{~0~a;;xy4u5+qFS9hH- z=)ZiwUH3P6HhL>aT+G@*H~DNugJRwp^e1_L)$ z`VgBr$XRH*hiOdWd9_dTWfqfoQ_=F+-f6DlExSlJQKRoK(PX5X*r#ZlRff8YFYOMn zhxl42vR8(Bh!e~3Kw*a+M5|8ZY+UN_4&p3Q1^Fp1d$^~FEw@E_i5GMt!{T>kc!@+i z&s+3Y-qd*OR~g=7w!)|4TQht_*m7H%jv`klIkZ?fqNC_y=lO{q%KId~Y=oZ}qUb>U z>JerUj^y6@__e)@vJv5esL%uP z?~jZS=XJs~odm(zhAVI{I*GRS$Ptfq7B`Xforn~x^+;?NEh<&J1M%ZVMT@I1*^X}) ztH@pXVB0ojb`dx1%&y{|PO`(@nO((8FWVZ%h}U$IPt4iTG2)h;7c1B+dd^Sc{~jGH zycAuGch2f2I|JX!<3yuQWN2d2*f=q0oz06E89I^K(u)@n z>up{S5u+1%EwO2A4>4G?c|FA_oyeZV9iBaf!Med_CWvI6$oa(m;}V3MotG$ll~)pZ zeq5sX$yP1^o(Ng`Fz*k0$y^%Gq;*&>rgPo3n`w8Jx5#Jy$n z`inkq;r(v~n*GIdcIE(4rW4uPbBE^uam>yeD4LZwOeP&D236UTrifuWVa^n>*Un27 zjdotDShBhO{#Qu{i4_vz+6^bvAaO<~JcHB3_sZMa^X%v}(Q^w%qL(hxb&?mFv!l~R zKcosWHU7^|kBC~k$VbHi6$w2&D!i&?7JcBnQvL~i0HEw1x)?0x=!9Ji5v9t5E{2GO zNO~7Tg~QtqHm2S(Oa$oU^iJg6yAznqY>UZ%BaaNgd!yO@l z-mxVeArf?Q8qjB#aimCAG_#K(V5CS#(vyx9TNS~VP$R`3iXi7GF>~vKoO0%tDAvh} z&(kRJy`7mUe%48Pslzix+BRFm(IP`9^hS%~_iSF4*q{?$pt3}XB6*p8Y>Zfqq+g&O z7boA>+gag#$~f_}j!xbB?lO)S*A&6mY~#gkBz+IZi=6GyP(NzpMU5iZ!wKS7B>kE{ zL3sZQyO7goKFgjU{-b+xlExFc6UARh6=bWm=giz3!BuEW&u4R=5H3g+#3SM5+{xlA z-NQ3sia4txwfLm5Q^aW%`ANLzpeIHD5A}V*!3^<;PI!Ft#9MY=zIeCYv+nTB7yKhz z!vf)=6E-Xm)9k#dVve0RRUEVPripKq_euOqPfin0e`3oyU6kr1cWG1Rbdgls?pf&! zu|h|AXh^{fQNO3%q=n*?PI6QTs5BY?w55p19uL@U5v&iD2~P^VG9;>U{BYdzy^V3&a7v z9X>Hni$CnLJS`3>IuQR=#zOJC%5pJ2Z`w2BxzBBz{j61#>nQgyY3#FN?|z&4oM_Yu zz30S-2W(!6_*5tKO2qL7o3~h;(Mb-+Rno;`bfdjDK__wmJ?r}qnV%^0M>NkKfrk1h z*J2TQR44d!v{=L`f)6W;#Y;NjDA!`~n)2Yo%3|@lBKWYfSiGSk;ls*evDJzQFPZF+ z#o`wg3Zq<0MDJs^4wr}&MbP0Au~8@NaEYi<9(1@wysrp4Tq6FZBB8@2Vh@tu-x6`- zYb$i2zhbT8-q%PZJTl*66+MpIyi$>*6FJ-0ZDy%>+0I)k)+vuBjh(qv{A}kf6Mrbr zH7Vb+Ogw(Vma|Oco>2F{^NAN`mWhLQX1O?_6NycVDJ&QHCv6Rviz1!KfTX&@<>Ir4 zyn5w@N2UcX7g49|+r{Zbh9>nXS}vAJlKZdk{c^ENncqY_C(WA=H6-6)8u=|>tMoSL zglGP8QKh^YNzmb)kz*vEoiwgp0jz+3vVD8{~MZ=J^Ohv)6RTRJf#!Kiu`Ey zi{iMQw^E!@-rl56b5@Gp-`SGBEC%XCF3X%RizRm6YOz9jlVr}-q77-NzV{X4sxnI= zUFTMag7dbdYs6fg$fn45=dKYcEjDkR7@`wttbM%)okv+wfacMcde?@?pG{-d0~WcW z6BD|i0?FSpdL>rE3mjnj@L(Nr2&>)Ma5abVYDYqzA(rzp*=^%+FZ38x>-u$4cU zwUEKoqQwoSriaC#CCfUyo%!E)>HkBGwf$KB-*xuj88Es$cupu87z|}lM!xm5)vw2T zP+Pqf?BCGoAn|vp#s@A=JJc7YQ~0CzUIYNOx|#GO`5Ay8h34PT+5$sfy9d zsxJeccd6RRp|oSCbzLAze{#Nxh0Si3%E@`Dg8U%Wfn3pChta@3sWOz2mJZP1I)=J- zgEG`GQiAoKvW5|FtcQ4r)MgKp=l7Cf)YGc>X2zf;*g#jgEV^u_yNT%P>7bsz@|`gBMwy0c0+R?PFK?r+FQfv8|I<_aH4zuPc722GH6yO zeNXhOhkkhURC-$FYR59@U`Ksx)@kMuw7aAJG%;=D2-?q49r4KTejiS-?fcDKO8cu)IZjGYdsk0WDNfYIzWKyQQl#JEh z%9J6`Xh$+>xE1EhSlD{G1eJwVN{wJgU9Oty=`S5E;bvS~A%?*XK8B5Ut+&LmT)$r7 z=V-CtK&i|8(xtxamm&2{zf7s``;C>l*KeZK2ESaXO@0O8lvOwv$?~^;&q)2rZ?V*C ze#@l(>Ff8rd~kPJ6>et59u?uC%*mYZY}S^Jre=CbdtJ8wsOyDGzUmz`MNhxPkZ8K$~4%JL{VlmqGHI24v)noBd5Td-b!-7V`|I81T5 zjOD9Xe^r%XcFPUkK+d>Zgdp_(h1QdYlJA*Ha{-+p;|leIE{9NX)DRnze^It zZtW&i!Ss|ItQsR)wXS1nxGT&&vpiz3F2W&1s~tz9`^)JZUD6$37RONeJWhJ^CTWyO?m`lnbJ2o+vjfbyxU9;Twcg`p5|~+W&jDss2m|ck zJ%@gpbv*6v1yd)y4KQWGf`+%@HLV^Dm>LmdfGH6PXv7$hpppkA! z(H;Q<<~HOQU`|6m8aW0{dtMseFnOWa0FxF<&?q+iJ5)P5fm(1E)*9Z_exD$B0p==f z$AB6GOjOvZ%8zK#6KP@^%t&Z5z)XZD1I$2ZHo$4#B7@{;j4H$IgUi_Ls;qf5^ai>& zRM|n>JW-y7owNfJX-6|mDu{4|(>lfxa>S@|fp!g|mTPi}i;iZPC6FT>*Qk7q%2(xs zTK^mxJ`q-XvB>$>L!6rk%$jW`Fa@^65w1KX@@fnUm&6iBSXfWi$WiGMM_6sH9AnBc zrW|9+F-F$Nm~zL-T73>3&gtHwglUjI9a;DE-3>VO9OVyX_9PQf{n|uak&%I+MbYikj0woWcjdL>pfZS z#6fKq&@Y+>9c`$pLI{Ii>%rUKS(lhWy)lEW`M8gshP#ts^XC6Jwku2asco z3p*PE60n@0%1b*>2u(JI8DnG9u|6H^(~VG{Zd}>lbfAI)M)1>=U{oZG&_4l)mxgK%~2a&TQFS<)?Zd-h;MO* z!R)Kfu=3&!>28R+>I~~IUd5QJ&M-z@ET5{om_Ht0Kn)D?{d(Hgy1n6FbKQt3>9Q;8l^2G5Hu%gl&tk zZ4uTNsd{KD>){n;g4H97ux&BM6k|+@X@pfSC|NG6@>kJ+CGeLG{Fj!jV2h?Y{Hsm6RbAb zXo5v5TV#!V+D*5*_G{?SVuE4d784BrUN*t{kj*AoV)Cj9PON4VEIN7F1OtRuG0|lc ztQdLOG)4Posyx*oYqJT~u)J)75ys0V7+GvK!RnRe1eV-rHo+Q}%_dl}@*Z{|T=o88 z^-AFiBgXekuo$Iqh4JEhvYSeJ54X431nXknGr_21vkBI=Y&OB*s7Yp!R|C^>7*+H} zXg0y3m(3;^Ew!i`SV*(k1j}PKn_w}_W)qB_Cd)JTE{Sl3eT{I1jw58eJndZdoq!ANVfDJsSasiASB2^RirG{N9>40a#m8fLr^ z(P)CDKpRakOr78g$D`2%%YrtVV5qv;1Y^s|7~g36TCNk?Xo5lObhQI8)|{bSSUO=%K}Rl-4kVX1b=b z;P@@P89SU;8#+_I<)yQ<{)M!!eCxZgkOrIKLR3PgxsCC*xI@|G4#(EyK1%zrkVewf z+B1dpT_&%H*4ebc3>)6)fj3SR(?~i;8$Xv$qN!T#TzRcEYp3VZ#q_$CHIL4s61(}UFV}h<(54j2UVqdU71QvMa8au9f{Rj(^s_^1ykJ$;8ZTH? zwZ;oRy3}~VhnDSL5V;*Aw`1gXjNFcq+c9#x*JSOtV)?CAc!l;tSwtahf-Roef6w-W(u|6o}~xn!;a@@cWWVCAb@OfJ+im#Fih)fbYt z`9gBi5z4$Hl*3WeQ1ejBP^(evFtP#5typfuGV#LVv4##o|mea7Di{(5&JReFC z%Fw97ay6FgP#aL&P`MeCqK2cUq2{5Mp;n_dpthlMf7}_=6x1}-T>ok!&xbsOQV9z@ z%CKC8>kTi zSgyu$9hMug+=j{nF$HQGY94ACYBg#DY8xsK!g$m))I8KORBJUpG@!Pj@?dO$nueN( zT83JU+JM@INqlSdQZiHhw11U6O_|X^H8fh;rZW&z&nE-j+%m+hgybO zjoN_PhRP!`9yJX$7qt|%47D1y4z&Tb6}1hON8$A_Ts|!DNI^|Q%|k6kEkmtFtwU`< zZAEQECDD+9qlTlVq2{5MqL!gnp;n{Tfm%Hp5L!{&P)Qd|hZ=$!j+%m+hMJ3-hgynS zhFXPMjarA=fZB@MhDy3(epG7+K7^yDq2{5Mp;n_dpthm%7-$@hnueN(T83JU+JM@I z%40DeH4QZnwG6d-IzBX@wxRNF*Z?&RH4n86wHmbnwGEYb$9U8<)I8KO)N0g}xI%4G zxg5rT(A*xNr9I(ARfS3tpe6-%a{{~~>QOJD(nP2U>4j}kt591}h5Usb`LgVdIZ>-n z>rh)!Ngr@YUp(7W`T|@|hGr@Ku^DO|Dj5JZA*d;+rKqi_WFWezrKnY?b*QbVAt?}( zf?A4Nh1x1rUhPRLra;X_twL=@C4;arYAI?J>gGXk4C=64kL63KBn{$e8Xh4mr=Zqj z%_Y=`A+W2Z8S;2*J}aoZyz_QiA-}IR^7{COd(CV-}(=Au@i)}gkd zl8G3Dnu}V6TBmCsxFPu%gPMyl(Beb2#xG?Lx2rjdN)z-9Sk8QDm7%E(6YfkUj+Pi15y*&`$WOTIMB7yl(+7`QAq z8oJZ}k~+gYS##LXQ{BA6aI9qjI{dG^)l3-Zjg=rX{8MHryFIcKiwol1LzhR z8bE7gXaIdjMh4KWGBSX^CnE#sb{QE!Kai2rXt6P#PNQ>;T$Z0Qc9-SZ##pIO8+%H9 z#+WGeS)&7)PM65~>9kZvPWPqDWaxBSE*np$D`e<&`hqdB_OsRWj00U?Td|JL_c6{0 zqJ)tBw7AywecI7rrt;TySLe*ARWUZ<~z9VOR>?RB~~?6@o+rmn;N_~C@Z zWW#WS!{LNGPKOizagsmgWem$WN)j?|v(sr7em%pN2anju<3=3Re%nVUI?OVLjy|Xj z|D1MrSZDk@Yn^75MJqSDWykS=>^n}W*?r_=FMdYyne2Zgb7Q~pNwR#H^qmkVI}9|O zPP^s2cfwugOA`VOmnIyQ_1rjW;!*O%#6EIE6J*R@C#dtyIZ9|oAIbHO8-^#kY#4rs zZW!K6@dq#bJCKTQP-i+i-sqj7O*sj+?IdiRP= zi0hjcJ18MNJ~kmSJu$U+kAxn*YEPb_Px^(WJ~eH@tb*Cak1Z%FdgPhBg1N;r=FBF^ zbLLJSI%{sxjJz4eTFOn@v3BeqbfPnj)vh@*U+wB&G)>!am-^IBxJwUHZPa}lrd8gj zPiUS0rmM7jf72hlU7jK{$TTvY$UjXm7Lfunl@!;u{6oK^PR6NZ0hvwmYIjl=W6=KX z$R=nxPOMl?DmY43yFdNv#+02WA36PQMCaP?omg0S*GnBre{?eVc$QvaZcdKs(J6#6 zFXG`v1)bW%5O@FXBI0DHImc~;rVkAVB9I-1ef==xViEND%y`)(Nuo`-)wtfI>7NLoT5EAIQ zG|}0EQYRnJK>0Iz4$d-LqN|T*e|{{vVuzo`z^=$=pIGF6omkDtiFu5S&Pva^ z_RXg4qv*OppUqqu`eVb&w`pztb4>1$Zgb#aT*x NZHHy-8m)+P{9oFy_oV;; diff --git a/CSharpMonad/src/EitherLazy.cs b/CSharpMonad/src/EitherLazy.cs index 71b7090..0e0afb5 100644 --- a/CSharpMonad/src/EitherLazy.cs +++ b/CSharpMonad/src/EitherLazy.cs @@ -173,6 +173,8 @@ public static L Left(this Either m) /// T public static Func Match(this Either m, Func Right, Func Left) { + if (Right == null) throw new ArgumentNullException("Right"); + if (Left == null) throw new ArgumentNullException("Left"); return () => { var res = m(); @@ -191,6 +193,7 @@ public static Func Match(this Either m, Func Right, Func /// T public static Func MatchRight(this Either m, Func right) { + if (right == null) throw new ArgumentNullException("right"); return () => { return right(m.Right()); @@ -206,6 +209,8 @@ public static Func MatchRight(this Either m, Func right) /// T public static Func MatchLeft(this Either m, Func left) { + if (left == null) throw new ArgumentNullException("left"); + return () => { return left(m.Left()); @@ -220,6 +225,8 @@ public static Func MatchLeft(this Either m, Func left) /// T public static Func MatchRight(this Either m, Func right, T defaultValue) { + if (right == null) throw new ArgumentNullException("right"); + return () => { var res = m(); @@ -237,6 +244,8 @@ public static Func MatchRight(this Either m, Func right, /// T public static Func MatchLeft(this Either m, Func left, T defaultValue) { + if (left == null) throw new ArgumentNullException("left"); + return () => { var res = m(); @@ -254,6 +263,9 @@ public static Func MatchLeft(this Either m, Func left, T /// Unit public static Func Match(this Either m, Action Right, Action Left) { + if (Left == null) throw new ArgumentNullException("Left"); + if (Right == null) throw new ArgumentNullException("Right"); + return () => { var res = m(); @@ -274,6 +286,8 @@ public static Func Match(this Either m, Action Right, Actio /// Unit public static Func MatchRight(this Either m, Action right) { + if (right == null) throw new ArgumentNullException("right"); + return () => { right(m.Right()); @@ -290,6 +304,8 @@ public static Func MatchRight(this Either m, Action right) /// Unit public static Func MatchLeft(this Either m, Action left) { + if (left == null) throw new ArgumentNullException("left"); + return () => { left(m.Left()); @@ -303,6 +319,8 @@ public static Func MatchLeft(this Either m, Action left) /// public static Either Mappend(this Either lhs, Either rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); + return () => { var lhsV = lhs(); @@ -401,6 +419,8 @@ public static Either Select( this Either self, Func selector) { + if (selector == null) throw new ArgumentNullException("selector"); + return () => { var resT = self(); @@ -419,6 +439,9 @@ public static Either SelectMany( Func> selector, Func projector) { + if (selector == null) throw new ArgumentNullException("selector"); + if (projector == null) throw new ArgumentNullException("projector"); + return () => { var resT = self(); diff --git a/CSharpMonad/src/EitherStrict.cs b/CSharpMonad/src/EitherStrict.cs index 7866060..db824d1 100644 --- a/CSharpMonad/src/EitherStrict.cs +++ b/CSharpMonad/src/EitherStrict.cs @@ -528,6 +528,8 @@ public static EitherStrict Select( this EitherStrict self, Func selector) { + if (selector == null) throw new ArgumentNullException("selector"); + if (self.IsLeft) return EitherStrict.Left(self.Left); @@ -542,6 +544,9 @@ public static EitherStrict SelectMany( Func> selector, Func projector) { + if (selector == null) throw new ArgumentNullException("selector"); + if (projector == null) throw new ArgumentNullException("projector"); + if (self.IsLeft) return EitherStrict.Left(self.Left); diff --git a/CSharpMonad/src/IO.cs b/CSharpMonad/src/IO.cs index bf945b6..49038c1 100644 --- a/CSharpMonad/src/IO.cs +++ b/CSharpMonad/src/IO.cs @@ -45,6 +45,7 @@ public static class IOMonadExtensions /// public static IO SelectMany(this IO self, Func> func) { + if (func == null) throw new ArgumentNullException("func"); return func(self()); } @@ -53,6 +54,7 @@ public static IO SelectMany(this IO self, Func> func) /// public static IO Select(this IO self, Func select) { + if (select == null) throw new ArgumentNullException("select"); return () => select(self()); } @@ -64,6 +66,8 @@ public static IO SelectMany( Func> select, Func bind) { + if (bind == null) throw new ArgumentNullException("bind"); + if (select == null) throw new ArgumentNullException("select"); var resT = self(); return () => bind(resT, select(resT)()); } @@ -73,7 +77,8 @@ public static IO SelectMany( /// public static IO Then(this IO self, Func getValue) { - return () => getValue( self.Invoke() ); + if (getValue == null) throw new ArgumentNullException("getValue"); + return () => getValue(self.Invoke()); } /// @@ -81,6 +86,7 @@ public static IO Then(this IO self, Func getValue) /// public static IO Mappend(this IO lhs, IO rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); return () => { var lhsValue = lhs(); @@ -188,6 +194,7 @@ public static IO Mempty() public static IO Return(IO func) { + if (func == null) throw new ArgumentNullException("func"); return func; } } @@ -202,6 +209,7 @@ public static class I { public static IO O(IO func) { + if (func == null) throw new ArgumentNullException("func"); return func; } } diff --git a/CSharpMonad/src/RWS.cs b/CSharpMonad/src/RWS.cs index d398263..e9890cc 100644 --- a/CSharpMonad/src/RWS.cs +++ b/CSharpMonad/src/RWS.cs @@ -60,6 +60,7 @@ public static class RWSResult { public static RWSResult Create(A value, IEnumerable output, S state) { + if (output == null) throw new ArgumentNullException("output"); return new RWSResult(value, output, state); } } @@ -81,6 +82,7 @@ public static RWSResult Tell(A a, W w) public static RWSResult Tell(A a, IEnumerable ws) { + if (ws == null) throw new ArgumentNullException("ws"); return RWSResult.Create(a, ws, default(S)); } @@ -91,6 +93,7 @@ public static RWS Tell(W value) public static RWS Ask(Func f) { + if (f == null) throw new ArgumentNullException("f"); return (R r, S s) => RWSResult.Create(f(r), new W[0], s); } @@ -101,6 +104,7 @@ public static RWS Ask() public static RWS Get(Func f) { + if (f == null) throw new ArgumentNullException("f"); return (R r, S s) => RWSResult.Create(s, new W[0], f(s)); } @@ -123,6 +127,7 @@ public static class RWSExt { public static RWS Ask(this RWS self, Func f) { + if (f == null) throw new ArgumentNullException("f"); return (R r, S s) => RWSResult.Create(f(r), new W[0], s); } @@ -137,6 +142,7 @@ public static RWS Ask(this RWS self) public static RWS Select(this RWS self, Func select) where S : class { + if (select == null) throw new ArgumentNullException("select"); return (R r, S s) => { var resT = self(r, s); @@ -155,6 +161,9 @@ Func project ) where S : class { + if (bind == null) throw new ArgumentNullException("bind"); + if (project == null) throw new ArgumentNullException("project"); + return (R r, S s) => { var resT = self(r, s); diff --git a/CSharpMonad/src/Reader.cs b/CSharpMonad/src/Reader.cs index 5c25a45..82b11de 100644 --- a/CSharpMonad/src/Reader.cs +++ b/CSharpMonad/src/Reader.cs @@ -50,6 +50,7 @@ public static class Reader public static Reader Ask(Func f) { + if (f == null) throw new ArgumentNullException("f"); return (E env) => f(env); } @@ -66,6 +67,7 @@ public static class ReaderExt { public static Reader Ask(this Reader self, Func f) { + if (f == null) throw new ArgumentNullException("f"); return (E env) => f(env); } @@ -79,6 +81,7 @@ public static Reader Ask(this Reader self) /// public static Reader Select(this Reader self, Func select) { + if (select == null) throw new ArgumentNullException("select"); return (E env) => select(self(env)); } @@ -91,6 +94,8 @@ public static Reader SelectMany( Func project ) { + if (bind == null) throw new ArgumentNullException("bind"); + if (project == null) throw new ArgumentNullException("project"); return (E env) => { var resT = self(env); diff --git a/CSharpMonad/src/State.cs b/CSharpMonad/src/State.cs index 28a7457..42c40db 100644 --- a/CSharpMonad/src/State.cs +++ b/CSharpMonad/src/State.cs @@ -38,6 +38,7 @@ public static class State public static State Get(Func f) { + if (f == null) throw new ArgumentNullException("f"); return (S state) => StateResult.Create(state, f(state)); } @@ -82,6 +83,7 @@ public static class StateExt { public static State With(this State self, Func f) { + if (f == null) throw new ArgumentNullException("f"); return (S state) => { var res = self(state); @@ -91,6 +93,7 @@ public static State With(this State self, Func f) public static State Select(this State self, Func map) { + if (map == null) throw new ArgumentNullException("map"); return (S state) => { var resT = self(state); @@ -104,6 +107,9 @@ public static State SelectMany( Func project ) { + if (bind == null) throw new ArgumentNullException("bind"); + if (project == null) throw new ArgumentNullException("project"); + return (S state) => { var resT = self(state); diff --git a/CSharpMonad/src/Try.cs b/CSharpMonad/src/Try.cs index a612b06..576f25a 100644 --- a/CSharpMonad/src/Try.cs +++ b/CSharpMonad/src/Try.cs @@ -60,6 +60,7 @@ public TryResult(T value) /// public TryResult(Exception e) { + if (e == null) throw new ArgumentNullException("e"); Exception = e; Value = default(T); } @@ -141,6 +142,8 @@ public static T Value(this Try self) /// public static Try Select(this Try self, Func select) { + if (select == null) throw new ArgumentNullException("select"); + return new Try(() => { TryResult resT; @@ -178,6 +181,9 @@ public static Try SelectMany( Func bind ) { + if (select == null) throw new ArgumentNullException("select"); + if (bind == null) throw new ArgumentNullException("bind"); + return new Try( () => { @@ -225,6 +231,8 @@ Func bind /// public static Try Then(this Try self, Func getValue) { + if (getValue == null) throw new ArgumentNullException("getValue"); + var resT = self.Try(); return resT.IsFaulted @@ -280,6 +288,8 @@ public static IEnumerable AsEnumerableInfinite(this Try self) /// public static Try Mappend(this Try lhs, Try rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); + return () => { var lhsValue = lhs(); @@ -355,6 +365,9 @@ public static Try Mconcat(this IEnumerable> ms) /// public static Func Match(this Try self, Func Success, Func Fail) { + if (Success == null) throw new ArgumentNullException("Success"); + if (Fail == null) throw new ArgumentNullException("Fail"); + return () => { var res = self(); @@ -369,6 +382,8 @@ public static Func Match(this Try self, Func Success, Func public static Func Match(this Try self, Func Success) { + if (Success == null) throw new ArgumentNullException("Success"); + return () => { var res = self(); @@ -383,6 +398,9 @@ public static Func Match(this Try self, Func Success) /// public static Func Match(this Try self, Action Success, Action Fail) { + if (Success == null) throw new ArgumentNullException("Success"); + if (Fail == null) throw new ArgumentNullException("Fail"); + return () => { var res = self(); @@ -401,6 +419,8 @@ public static Func Match(this Try self, Action Success, Action public static Func Match(this Try self, Action Success) { + if (Success == null) throw new ArgumentNullException("Success"); + return () => { var res = self(); diff --git a/CSharpMonad/src/Writer.cs b/CSharpMonad/src/Writer.cs index c1e3a8f..13c7c1f 100644 --- a/CSharpMonad/src/Writer.cs +++ b/CSharpMonad/src/Writer.cs @@ -46,6 +46,7 @@ public struct WriterResult internal WriterResult(A value, IEnumerable output) { + if (output == null) throw new ArgumentNullException("output"); Value = value; Output = output; } @@ -58,6 +59,7 @@ public static class WriterResult { public static WriterResult Create(A value, IEnumerable output) { + if (output == null) throw new ArgumentNullException("output"); return new WriterResult(value, output); } } @@ -79,6 +81,7 @@ public static WriterResult Tell(A a, W w) public static WriterResult Tell(A a, IEnumerable ws) { + if (ws == null) throw new ArgumentNullException("ws"); return WriterResult.Create(a, ws); } @@ -98,6 +101,7 @@ public static class WriterExt /// public static Writer Select(this Writer self, Func select) { + if (select == null) throw new ArgumentNullException("select"); return () => { var resT = self(); @@ -115,6 +119,9 @@ public static Writer SelectMany( Func project ) { + if (bind == null) throw new ArgumentNullException("bind"); + if (project == null) throw new ArgumentNullException("project"); + return () => { var resT = self(); diff --git a/CSharpMonad/src/ext/ObjectExt.cs b/CSharpMonad/src/ext/ObjectExt.cs index dd82398..756d0ac 100644 --- a/CSharpMonad/src/ext/ObjectExt.cs +++ b/CSharpMonad/src/ext/ObjectExt.cs @@ -34,21 +34,9 @@ namespace Monad { public static class ObjectExt { - /* - public static IEnumerable Cons(this T x, IEnumerable xs) - { - yield return x; - foreach (var item in xs) yield return item; - } - - public static IEnumerable Cons(this T x) - { - yield return x; - } - */ - public static ImmutableList Cons(this T x, ImmutableList xs) { + if (xs == null) throw new ArgumentNullException("xs"); return xs.InsertAtHead(x); } diff --git a/CSharpMonad/src/ext/TupleExt.cs b/CSharpMonad/src/ext/TupleExt.cs index 060ca91..6f100c6 100644 --- a/CSharpMonad/src/ext/TupleExt.cs +++ b/CSharpMonad/src/ext/TupleExt.cs @@ -34,41 +34,49 @@ public static class TupleExtensions { public static R Apply(this Tuple self, Func func) { + if (func == null) throw new ArgumentNullException("func"); return func(self.Item1, self.Item2); } public static R Apply(this Tuple self, Func func) { + if (func == null) throw new ArgumentNullException("func"); return func(self.Item1, self.Item2, self.Item3); } public static R Apply(this Tuple self, Func func) { + if (func == null) throw new ArgumentNullException("func"); return func(self.Item1, self.Item2, self.Item3, self.Item4); } public static R Apply(this Tuple self, Func func) { + if (func == null) throw new ArgumentNullException("func"); return func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); } public static void Apply(this Tuple self, Action func) { + if (func == null) throw new ArgumentNullException("func"); func(self.Item1, self.Item2); } public static void Apply(this Tuple self, Action func) { + if (func == null) throw new ArgumentNullException("func"); func(self.Item1, self.Item2, self.Item3); } public static void Apply(this Tuple self, Action func) { + if (func == null) throw new ArgumentNullException("func"); func(self.Item1, self.Item2, self.Item3, self.Item4); } public static void Apply(this Tuple self, Action func) { + if (func == null) throw new ArgumentNullException("func"); func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); } } diff --git a/CSharpMonad/src/option-lazy/Just.cs b/CSharpMonad/src/option-lazy/Just.cs index 5feb50e..cffaade 100644 --- a/CSharpMonad/src/option-lazy/Just.cs +++ b/CSharpMonad/src/option-lazy/Just.cs @@ -71,6 +71,7 @@ public override bool HasValue /// public override OptionResult Mappend(OptionResult rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); if (!rhs.HasValue) { return rhs; diff --git a/CSharpMonad/src/option-lazy/Nothing.cs b/CSharpMonad/src/option-lazy/Nothing.cs index ed4a21f..b1e9d04 100644 --- a/CSharpMonad/src/option-lazy/Nothing.cs +++ b/CSharpMonad/src/option-lazy/Nothing.cs @@ -64,6 +64,7 @@ public override bool HasValue /// public override OptionResult Mappend(OptionResult rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); return this; } } diff --git a/CSharpMonad/src/option-lazy/Option.cs b/CSharpMonad/src/option-lazy/Option.cs index accc854..8de455e 100644 --- a/CSharpMonad/src/option-lazy/Option.cs +++ b/CSharpMonad/src/option-lazy/Option.cs @@ -141,6 +141,7 @@ public static OptionResult ToOption(this T self) /// public static Option Select(this Option self, Func map) { + if (map == null) throw new ArgumentNullException("map"); return () => { var resT = self(); @@ -169,6 +170,9 @@ public static Option SelectMany( Func project ) { + if (select == null) throw new ArgumentNullException("select"); + if (project == null) throw new ArgumentNullException("project"); + return () => { var resT = self(); @@ -239,6 +243,8 @@ public static T GetValueOrDefault(this Option self) /// public static Func Match(this Option self, Func Just, Func Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); + if (Nothing == null) throw new ArgumentNullException("Nothing"); return () => { var res = self(); @@ -254,6 +260,8 @@ public static Func Match(this Option self, Func Just, Func Noth /// public static Func Match(this Option self, Func Just, Func Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); + if (Nothing == null) throw new ArgumentNullException("Nothing"); return () => { var res = self(); @@ -269,6 +277,7 @@ public static Func Match(this Option self, Func Just, Func /// public static Func Match(this Option self, Func Just, R Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); return () => { var res = self(); @@ -284,6 +293,7 @@ public static Func Match(this Option self, Func Just, R Nothing) /// public static Func Match(this Option self, Func Just, R Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); return () => { var res = self(); @@ -300,6 +310,7 @@ public static Func Match(this Option self, Func Just, R Nothin /// public static Option Mappend(this Option self, Option rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); return () => self().Mappend(rhs()); } diff --git a/CSharpMonad/src/option-strict/Just.cs b/CSharpMonad/src/option-strict/Just.cs index 8c0a003..6a6cda1 100644 --- a/CSharpMonad/src/option-strict/Just.cs +++ b/CSharpMonad/src/option-strict/Just.cs @@ -67,21 +67,27 @@ public override bool HasValue public override R Match(Func Just, Func Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); + if (Nothing == null) throw new ArgumentNullException("Nothing"); return Just(); } public override R Match(Func Just, Func Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); + if (Nothing == null) throw new ArgumentNullException("Nothing"); return Just(Value); } public override R Match(Func Just, R Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); return Just(); } public override R Match(Func Just, R Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); return Just(Value); } @@ -92,6 +98,7 @@ public override R Match(Func Just, R Nothing) /// public override OptionStrict Mappend(OptionStrict rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); if (!rhs.HasValue) { return rhs; diff --git a/CSharpMonad/src/option-strict/Nothing.cs b/CSharpMonad/src/option-strict/Nothing.cs index c62fb3e..b8e1b0d 100644 --- a/CSharpMonad/src/option-strict/Nothing.cs +++ b/CSharpMonad/src/option-strict/Nothing.cs @@ -58,21 +58,27 @@ public override bool HasValue public override R Match(Func Just, Func Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); + if (Nothing == null) throw new ArgumentNullException("Nothing"); return Nothing(); } public override R Match(Func Just, Func Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); + if (Nothing == null) throw new ArgumentNullException("Nothing"); return Nothing(); } public override R Match(Func Just, R Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); return Nothing; } public override R Match(Func Just, R Nothing) { + if (Just == null) throw new ArgumentNullException("Just"); return Nothing; } @@ -82,6 +88,7 @@ public override R Match(Func Just, R Nothing) /// public override OptionStrict Mappend(OptionStrict rhs) { + if (rhs == null) throw new ArgumentNullException("rhs"); return this; } } diff --git a/CSharpMonad/src/option-strict/OptionStrict.cs b/CSharpMonad/src/option-strict/OptionStrict.cs index 05f7542..9b9e5c2 100644 --- a/CSharpMonad/src/option-strict/OptionStrict.cs +++ b/CSharpMonad/src/option-strict/OptionStrict.cs @@ -100,6 +100,8 @@ public T GetValueOrDefault() /// public static OptionStrict operator +(OptionStrict lhs, OptionStrict rhs) { + if (lhs == null) throw new ArgumentNullException("lhs"); + if (rhs == null) throw new ArgumentNullException("rhs"); return lhs.Mappend(rhs); } @@ -110,6 +112,9 @@ public T GetValueOrDefault() /// public static OptionStrict operator |(OptionStrict lhs, OptionStrict rhs) { + if (lhs == null) throw new ArgumentNullException("lhs"); + if (rhs == null) throw new ArgumentNullException("rhs"); + return lhs.HasValue ? lhs : rhs; @@ -121,6 +126,9 @@ public T GetValueOrDefault() /// public static OptionStrict operator &(OptionStrict lhs, OptionStrict rhs) { + if (lhs == null) throw new ArgumentNullException("lhs"); + if (rhs == null) throw new ArgumentNullException("rhs"); + return lhs.HasValue && rhs.HasValue ? rhs : lhs.HasValue @@ -134,6 +142,9 @@ public T GetValueOrDefault() /// public static bool operator ==(OptionStrict lhs, OptionStrict rhs) { + if (lhs == null) throw new ArgumentNullException("lhs"); + if (rhs == null) throw new ArgumentNullException("rhs"); + return lhs.Equals(rhs); } @@ -143,6 +154,9 @@ public T GetValueOrDefault() /// public static bool operator !=(OptionStrict lhs, OptionStrict rhs) { + if (lhs == null) throw new ArgumentNullException("lhs"); + if (rhs == null) throw new ArgumentNullException("rhs"); + return !lhs.Equals(rhs); } @@ -280,6 +294,7 @@ public static OptionStrict ToOptionStrict(this T self) public static OptionStrict Select(this OptionStrict self, Func map) { + if (map == null) throw new ArgumentNullException("map"); return self.HasValue ? map(self.Value).ToOptionStrict() : OptionStrict.Nothing; @@ -287,6 +302,8 @@ public static OptionStrict Select(this OptionStrict self, Func public static OptionStrict SelectMany(this OptionStrict self, Func> k) { + if (k == null) throw new ArgumentNullException("k"); + return self.HasValue ? k(self.Value) : OptionStrict.Nothing; @@ -298,6 +315,9 @@ public static OptionStrict SelectMany( Func project ) { + if (select == null) throw new ArgumentNullException("select"); + if (project == null) throw new ArgumentNullException("project"); + if (!self.HasValue) return OptionStrict.Nothing; diff --git a/CSharpMonad/src/utility/Lam.da.cs b/CSharpMonad/src/utility/Lam.da.cs index 6bb6064..df6d069 100644 --- a/CSharpMonad/src/utility/Lam.da.cs +++ b/CSharpMonad/src/utility/Lam.da.cs @@ -13,26 +13,31 @@ public static class Lam { public static Func da(Func fn) { + if (fn == null) throw new ArgumentNullException("fn"); return fn; } public static Func da(Func fn) { + if (fn == null) throw new ArgumentNullException("fn"); return fn; } public static Func da(Func fn) { + if (fn == null) throw new ArgumentNullException("fn"); return fn; } public static Func da(Func fn) { + if (fn == null) throw new ArgumentNullException("fn"); return fn; } public static Func da(Func fn) { + if (fn == null) throw new ArgumentNullException("fn"); return fn; } } diff --git a/CSharpMonad/src/utility/Memoize.cs b/CSharpMonad/src/utility/Memoize.cs index e8942fc..9755b48 100644 --- a/CSharpMonad/src/utility/Memoize.cs +++ b/CSharpMonad/src/utility/Memoize.cs @@ -18,6 +18,7 @@ public static class Memo /// public static Memo ize(Func func) { + if (func == null) throw new ArgumentNullException("func"); return new Memo(func); } } @@ -39,6 +40,7 @@ public class Memo /// Function to invoke to get the value when needed public Memo(Func func) { + if (func == null) throw new ArgumentNullException("func"); this.func = func; } @@ -97,6 +99,7 @@ public static class MemoExt /// public static Func Memo(this Func f) { + if (f == null) throw new ArgumentNullException("f"); Dictionary cache = new Dictionary(); return t => cache.ContainsKey(t) ? cache[t] @@ -108,6 +111,7 @@ public static Func Memo(this Func f) /// public static Func Memo(this Func f) { + if (f == null) throw new ArgumentNullException("f"); Func> del = (T1 t1) => (T2 t2) => f(t1, t2); del = del.Memo(); return (T1 t1, T2 t2) => del(t1)(t2); @@ -118,6 +122,7 @@ public static Func Memo(this Func f) /// public static Func Memo(this Func f) { + if (f == null) throw new ArgumentNullException("f"); Func>> del = (T1 t1) => (T2 t2) => (T3 t3) => f(t1, t2, t3); del = del.Memo(); return (T1 t1, T2 t2, T3 t3) => del(t1)(t2)(t3); diff --git a/CSharpMonad/src/utility/Unit.cs b/CSharpMonad/src/utility/Unit.cs index 9702842..e67c3b1 100644 --- a/CSharpMonad/src/utility/Unit.cs +++ b/CSharpMonad/src/utility/Unit.cs @@ -49,6 +49,8 @@ public struct Unit /// public static Unit Return(Action action) { + if (action == null) throw new ArgumentNullException("action"); + action(); return Default; }