From 8fb4ca48b6ad1a9c5de98eb3eef6cc836d342991 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 6 May 2026 05:00:16 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 06 05:00:16. --- .../20260506/20260506050002-Binary.backup | Bin 0 -> 279058 bytes .../20260506/20260506050002-Config.rsc | 4677 +++++++++++++++++ .../20260506/20260506050002-Diff-Config.rsc | 7 + 3 files changed, 4684 insertions(+) create mode 100644 MikroMaster/20260506/20260506050002-Binary.backup create mode 100644 MikroMaster/20260506/20260506050002-Config.rsc create mode 100644 MikroMaster/history/20260506/20260506050002-Diff-Config.rsc diff --git a/MikroMaster/20260506/20260506050002-Binary.backup b/MikroMaster/20260506/20260506050002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5c7b45556b9da152a7eea2a4ba0ed35ff425200f GIT binary patch literal 279058 zcmV+aKLEh*sF8CLLIeOTKd>M-HB&`T>Bub+VtEk&000O80004Z`T(2&Lur^$ch=iV zu6iV>Q=PshQ&zpet_l?&ad^sWCaG5e1?d(Apqa@O%4=*&j}5zqqyq&~s-A7NU+Cqh zcsTHkJAKp%@cNY(Yga$9>!4|fQt%hruA)G!XeBmE3BeikjR_3SEtW(zsi-m7L%~4w z-dG=J1S5ydBp9*XtFefDI+suoU)m?5a42|M#lJ_#Zs~t5UYs7Gmc*%Ok4q3Kge%Pvs=G zm>7@wQdSb=X;u7hdBAd44wm!&**d!z$e~}a#j&JGF{m(1A)(JmC9J_p&mwHxNyNMn zuyj!tI7v8}BeI7ND^h(i2J8wA2fZMvV8>K76O}^gx_Ilk8U_s3-<)W=4d?SF4iZP+ z;4wK3$o&r*s|yLN7Jl<$scV2smjB(O47Kvk8mgDvnrGW#oap*V#I@2%M`E0J9%?a@ zmM{p>IcC?c+#7-(9F@;DhF79$8zJ(gb=t5?->g95=7DG)GV2@h8Q}99Mfg3t}R~#W< zi`z%b?n~ognW4uD;sY^+Pw_jL{3g7pg8dT305Y%qywVM@q_przBf4-g7-U*PN5=g_ z2m@gTjr=WIRVtwLeARR?=!&vMh{dk&737+#WP1n7>|6DvtxVQg4rqazI^2UY3(Srb zr`C{&pAj@m{FFBT4@d#u_Pn8aVP=%oc5*~uSOTQ%MG#s>S^xp-v}bbejB#P z_?Hm}{a7bkW1%mM(TLmrP3)VSa!#>2)^H3HbnJ6XLNYoJvjiB&?F;xk$9Rs%Xt?M7tQ2LvChS5ZJjGSYeh>9mPI^9XN9P z?bEvt>z^ukHfFa9xacT=4wlx}yI3X@p)RhUIXnacGx&GJ1yzp2G}rh8$9w#vRc>89 z@rlEC z@YHq7CG{x;id!8zM*}c*RS_nHB^YQz;pKA%A^dVzEsB|ls9N>R-sgdcw6&`%gSh=+ zOWz1G95MQ=YwOs50hq2PMYY6Bc>HL|8j>12_oTib`z0=sJ$z0d%xo+^+j&HGt@}E9 zI05-$d=sFeSK$Y_oz`R1@tQ5N_K6BS&+q@HNmN)DFgHkFuw+BcbF=#ZE9Fd0sH7|& zFJ{n3LqrkTawD}4iAUyT6tw$nJxHPxf+~9ruiEPq@D+1kpXdzDNTGgukRfICQvu!)Noaue~{kk9kd$5*kTKE3b`k)Fa18gxSfgB^5$}nt+eRqF2pF$ZHMe@ z{c+q8*5bxot=F!5ulG0oRgSP%|0Wo|2X2__PUjK0_~p~5VnET;T7V^?=jYdEv{cFvag783k4B%fZ57E+`_) zi?9p7H0KJbR{Hng3>_9B4j%ry-S>PNv_cD40={xnf2%yIA8W>F$xlZ?cjiw7i|dqo zP;Lce$LTQeZ<1Spm*f2UTh(W~L|!R}5sc#xwc};|pE2IWd%NzG81+_gT8$_z>Y7=C zb>xb-kjMf~dwgi^dUHMz_1WHSQTj8mrAL^qWbxHtiOhoA)Obs zQwSe+rMqDX2l-r|foD zEvQ+9dfN2jJ+NjL=`OCSJPs@Kg{@(ry(9?Qjdm`7p0m5YoO-6sOh^PSO{>})frUV{ zj-)ocA>yHWY7HDIqE~zieYi*w2=Be4#=|$ALhV-xpqzX~8yzGot~z}GVwa36xo`4= z`^b{v+7-l1x~WJ|AiCJ&sm43pZ=(f8js zTzl!*OEV}o{CHLSs1KLjuf?@H{$haTJ{ouzh~O)_efFf6+LIxIF%LvH0w>$CQ)8R=%0wxBg*Yl+&`pdj7ZFdl!8c7OEs>+U zajA_n2F`gCOmrTs#y&Rl7NK5K#GamN$~V4%93^JL(3x8*{0>T|YXa6RTo1}vF=vd% z``V9;Z)E^)!RcJ>={obnPR#i%B5x{Hzl6Nux#FXpEjh0?w@DE?7q969J~J9{wvd~| zb}Kz{C#x`J8xywXJ6iB@yl>p|AJFDxq84Nzd@hKLPY$jS7@-Rt;dthQj$hnD+JN(C zki$BQmYBT_PisV(Xw?-FA$%A+CyD(!5CkcD7?J>J3joPVz8%*47wW7~*H0mq-ui<3 z8U(~}sx@(RQcpJCFOW{*7cyO$;++GGw)I?EXkP7CphQ(a_N*$%5 zLLu3PQEgH*Sfb8Xzo~4yqVe+MkuRYH@Vk@p)7VwdpOyDKmo^A{UwL#)5;%xSJj~B* zBGozs;=6tLzP4>4r)5QMCx;pyk6!VYQV@4scIQN>=WQwm-9G*$`lalib`V-)$>?+T z=l>-k@q)!N8XCw6wDv=EhN^lSZ+)?CX8RPxgFBU0BH~GVa7T;Q^*esw>fU9V#N^Q4 zV;H~f$TuhOvdctq$WNkP@DSDi_zZ8lkTm#@ca7&pbCtdH!1HshQJPxHvWDZI#)ZbS zKQAB9@fxH^xJOrfz;VWccW@q98|7&tt?@!SkBv$qt@!I$dz!rIRkG?vk-q2T?VK@) z2^w8BwA=g$=4bZquaW7=D3By=_HMd(`^Bmv;9o8aOg0^liU=K=RD+%L0E~gNRO!pX za`;B|U&}+5c+)>J2OnES{v3+$IbWbx#F%^GDS>hsW(X@y5cg)hG#tD$7ghA&d5;-? zO27*zytY2>9#vGl?G~VzaLp&P;Bq^d&dldDnlUqY3r?&3 zhupO$wt3cZoCZ!8@SrA*DHAzM!`cxZf#0N!qJ;BPS$_LLx6t;rL@i4sHd^g%7cWhD z36tjBV?Tdp;c5G)#L3kcmTO}_(UQy$AxaKyHPbRiSVcmrkyw-uK%$ui2tM19PA4NeUX-)Eeylkm3z#C_gAh zmtibBZkQFO+e8!qPdwQFZ>Q=g_#usk?nax{pQ6-+rm`yeri!kABqQF4CFq9bRo!n2 zpP3bm(yVbF+eOx;vNi26b0`}CGpKqi?iB^TA!N5NblH-iGhk3Fy-npx{6_~!=wDOS z@G!xl950J4QK^aRmQ!?#hy|#40(wqC54s> zN#5mF=3?RZ1{FAuQFvY$20d^Yi)qSZUaawwMfD9^;Y__$qmN5(25^x$XoeMS$kYeO z{SN3<@v|cNgYIXZdI9`Z6u4v>p6ckd8#!?*&9wA9#Gl`_1&}#Sq&iRjpe$BEc>T6S ze5-!IN_5b8yf%g$=U$q(Z?2zQ*&fm~RMgVtg2zq$KuwsLqZmCcl1~>ycLJVz(4z~F zKnR%%mNn855+UvGVc+E$G>lHA9-0{-Q>QacYK}2)Xa~a`JqF^mCZ{SFW_;zucTV~r(NcyhAC+jrw)OQ z^}o7dMhKG6h6Z>ygBy*=NP(7tv-XNPm;&-YIQC(zD0yVR(FlsI;owZdDg>3j$iFFJ z&?8q_YlC=1$$1H1(#Jt8;#k3*B=Tbtrv+)&a9G2FSJ| zhov1#oc&V5zR~rOzX|&jcETE3b?w*70P8($NrJ<)aH$x#P{C(-nn`(1=R8XH(Y1>P z(B_wV#^Iw!UT)(3q{kgY{BXA*<)kXZ=JyWjY>UEKB217Qaiy-BNdM$`gIh;ZHhJd- zd+NRN#d}@slW1dJI9>M4h5CN$>(EJuiQgVKWY+0jYV!Y zhS7Ls`KrY@_qi5w=+8F+67Mv~`!xu`t#Yh5))yi%6N@0v`X#(-oxhJD>jc*+Bw zw=ra%Kd~iwGKz4G7ful`72p?SVVZD(jF7KIzr%rBeQ3M;qHWz8iugg(SX;f&L|h+L zzVJ@8LYA_UI&-?7m+|t{pw)_?02`nCM$hEDqlNo*DMTbFzHkJ68y0BllqX;|%Fm^%ScZY?01GOr_{K>EG_AJ3j9OgCBCsNsLFFW?&Hx7`D z#3monLgCH^`6W^ya|g(WQ-|#gfd}Q12Y=jBk<3YbAvuaQx}kd>{wUQt zz{rG9tj1LgsKqL;4}-3MMnmHNo(^)ft4=<3+lDMG3WNm>izS<*_O(3ZGUPMmTd$b&Gn5%Q0NX+iM3w%qVPTi50~(mD+dGz-$FP#P&HPjE#D(#^NtfgK}j}Z z2B^wS7k-e2b^IJ@obCm1A-qOide0%|fHCHyp0co|#?^JV=@x(04jm$|Vd<}IU-gxd z&?7gn8cTXMqaIeaa~*+I#Z`rr2s<%|tvQ48l`c2E;a9ClWITE>69L~k-eHhXG-BCY z9c^j{ib(IcK?|T-N)4cs3whf=={1?N3i0BiddocXChaxAhIZRW_263rPx6Tux^Q@# zo(cdL_m*JIbQ+fZ*4O-V^Q-r!vrl786=^;JCL9~6z)0gk(2kH}$Sa2b^UU{{6rmpOGX5p7 zF%oBn?=wQ^AbQ<*9;klC!`yRE8XBaBn|!6lZEd3x4;zJUo4-L;vVuM6V`%n!qo)Zp zHL;O8ZrGxv=N#vfi90{>SGtlOd&3Q=el5_?D!{?8pa;$H>a-qE%_Kk<|6sRC>bD`;KpL2JUBIu=XOhA-UZ1=dl-@7NzIPB1v z{H8z4(9@ZZimgPkiHHf_?XsuRKDA=)v8@TXBSZ|u zt*=`BF7-u8O=ZVm9*vslD>L5kuVy8UK7jTDl z6e}VUe7;sx$^IP^K5d$16f~Dl+#XkZo|Z#vz;^U3d|;I{fXD|z`4(l>X~u#UqyrQf z3JbWh$SMT}N(&P`;jA>ul}0ceMf)=lJAzRXMvQ&{doNJPW>gQ+J@yjLW9|RTN3ZvF z(cMOZk+IdF>*WoIuU!pH6DZWdT{|d6G14_{7;$e zqzu${TZ6rIVyvRhZi+%@qIt(Bs_#PYsVl8U>geDv8YHM3UyA3<^P)vl#vA@{@n^>V*hvyTh#bg21UEJ}-w)kyHxLY%M zaL?>=`=w6{6hT4Zu2G1cN**M)zWqmY%(9>`O8Py3-cE3SNUSTC?7KMY?UYK}0M8d8 zY#g;@jI`h42&!VJMl@7jyBSQWr3^cHLCMyLas7n~+A0rn;eBx~&x=?w+XUUta5M0M z0HzL9^|v!SVS?|&)c%w}&a$^A{66r4Q`n`&l9QO7q9A?yV&*SwbSqgNhE0_=w ze)!|dRq6vW10!RRGvWzbsgOMq(m@C>nQNmHy~#fCcjXWDiI)Uk$#E6kSyGuL55w1G zqPbgaQ(>%2cu3tBsmm<0x?op-VloMfK-EKaC(oYgzX#~)4a}N1mn+<{QW67$(4MiP z;(#P$_F56y>c9floFN!62lF6~{vmYI&goE3(d<_9g&C65Oi|1nVjZ;O{!_IE*8Z*s zxHp!uqO!Pr;MPuQ*Rc@3k|c+&{F4y{#KmlUC}R;!tPDj*j65(Q6vG^8q~B4V8EL zNMnP-T5!bu;J{KdgjPGciT(L*~N2aGoF{mJ!S7SWoIzVsgxds6^7YnKBmOi78HhnkhqL*@#n4aPK&S}IZ@sCXEU#!kE1(9sP6RC-9* z6q}cgj1zjMtl)!8b{2)=y6_ZfMA*TStghtfQG+XUswg5#8_?xiTzf?czzhb|%Qg}& zgk-d7?m$u*c_(Kn+fvL~$3H`?P78mJWNuLoPc3l!F^h4Y03iFSd0`ZzCWrbMleE?g z+4F4!iVTlnen|$K1-%A^fgj;*hDRsKJ0m6|>j7mdn&_gAcgGvni_!7EyNdcSN6D^n zhYwF?|G9*E@lP@tTVW5jskO+yg;tlq2tb6lf}?yY9-IY92l;W})=Iu8CYPKs{>XM; zjC^qCo3tX{Pu0X|H@M9PPwuirPSKC!3((pVe&?ty&>@sU34RuO>tmt_|G^xMw{*bLz1o35|f#RBoV06 zlAKHN@k$Dce&xN(f&%zO_piB{PQOmW6x8wxLpvb7uz|Mqdk*h>$yL`&Z+?xr;c$Z! z4xo}3vR&=X&ds*SV`mPPJYRfNLCJw+(Lq}RPNw!tRKZ9@ws_NK8rTA<#l9nQWtR6F} z^%V_5F5p9hd#!`hKCKPeGAE_z@@7*}<$_4Ey+U$xmr4St%Eh0}MF>9q$lucvf%gjz zGZCTR%>MhZs3+OM!gv!q{@A&+*P+IHi5xBuNe6=4ULlVJprUI{fpgYP3KgBp6H5=c zn~kwOB_RWarmQn{22rqm3rf>*$lCd}L-}g7K|sHx{?V(x?f;)*UAR?=r`IOA(oW8g zEDhW>Db9iwXTsC?xl4-n$9?hsX5hS@k9JUXI8W&rsnBbl_2yk_kQGo}itclSeW zh_U^N`5+`r0HaUK+XN5-jr0KWtg9N}|9UkKDB1Sks+7R7hedrgvBSXc9ouyI0g6pI z*nqx!0jJFQpC9^4W?4sz7-mi%v07VKr2?kLB}0bdzYTY%A)w72MdCx*u2;|ivM_SmPKCW^PUAXC~T90sqo`EA337%<1m= z>t|?-KalMoFF1G1E``gSE zNv_`&+W>6rfgw@FZT22Yy>&j!tQ8d{%{I5QEFchoh&+KhMq+FFqv-k^V6@>#Zoz&< z@vM3<%{O+t;!>ekw2;k^&#MqxZI&h*`?G-<-S_p6lJB?jSlJy-1!`nNC&7RK7s{!A zf_8+F|L3f-2;Y3a{$xOnkBD60tEXTC6XUiBZxNw6nNR1D$t>`0N?9AH)Enr|Q5>Oc z2b^DCfNK+;#&3B(s%4AfY2Bw1^yPF>;;vlGPu90(S z8RB$-Xr0Hyp)lfxAc>xJIM~(!I~zLXR+R-D*)nJMxnK+=6`q)a=Ropj2j@2)8te5^{mq8=^K=o%L0j19E+C0#0Xe7ByCruoy3qv*>K&clCsM!6yiP zjDK|(ZC2)I5D#T|wLn|ICl9XP=%$g4yyC$t z{iGHGjjLxA3y7L@QP*`uY-@CH zab%S$dO*NWyz>NbnLm0sJ+dHH{FG0<=&wjC3X@E`r&hhv+Lb7U=Z(0|FA5H(k^)+D z^*k5NRP8j5`O6;%(@ZN>dK+3CvYj3xiF0@5TJ`+WaXUk!QO*+`sK|X-*$rZk!6Nu= z=(6@wN%%%W!4Z@jl{n`gND{$Yc6KA#W#405dv{Qn}W{78viO3+X)V;I|WE)!yr z^<`NDf89S*cRO*OO6)v0yL$XVhEP~^X+(OiOMKOlLW*^yA`i`!i7GDE!?(4%wjGPJ zayLbb^*i3@0lQw1SOM~OuTR}O)_}k=&Uz<29ZEiCiADlAlc5zLxOxpe^jLnBvFtzF z>Hc)>YEFqqa9C}(Oqr)q@eCf1qziRkQ@t{61iB97*J{=4cv5JOuQT+$r}YR>Er7Z& z7c|WD>`A(LXLGQx#a7M+QUg1I|)M*8j6w5Ly1+LgI#!duQbF!rN2zRJI# z+SFSm7V2bd&LXrvguuczYQ(dgCXm%8q-Y~&Zc6vqmPjq5WVQBa55=0?g^F~bwMBiEPJHBbB*`K+IK$#_tL=n6>T$fGV3jgB_kJ_ z!(C#Qi=6@WL9TbeHwVP}FQR!~^@{VT{&nnD2s$W*$7DxGZ;T;;Qbo|?gX&irp%%;K zSoXna9Llqw0q#4HmLhmRZI!Dw7%_v*W(IZkfWjglvxdI>=tAC~h!m=F1eNfUXJhz| zI8&YXGT|$^jRyN##mvh};cRYM5=)>yt+=#|AEH|+-pyuSIc9P)qiGH|)eAA;twE%x zct%$f?u>|rU68}Y+3;HWH+Z7kD!4#mAQ2f9r9676+BJ=v{JkR>VV@wEX*bx*a-dnx z=351Dq&L|?&%GEgZtZSk=?lLi?3hJNET7YJLy>aziAoow_qc|K>@arp@;ojtd<>*` zD-l2Kb=u5RSNWWkyoaKY!Trlt$Hq#{3~PK(QgGHZ|4cQi<%3@=v{a!+h1eI$K;^On=m0^A3&<|1q!uAWmvj+2B~s6F#PW* z2bO(1u^nEf@C?H0ZveLp2EY{+sQI+JY&pW9@Qg$Jpn{#{#wc}9XOshi%JA4-AM|8P z_WTQ4z)UW4JmoiQz=6 zH3C#Uru1j@9(>zV%gJB7 z!}c%LXev&TqouTbZ-fRU9P7OIW!qjNXm9!|EYRLXM%Pq+S)G=MF+S zhdz|U#y|2mK*S+EiRl&Id{IX9d#_Q7U?*FKi;YWVx>D`G%D8JI9k<>118e?e1Z@6Q zj7rSHM4mJ)UdZA6wyNl}AnZr93OP9=FQchRdtRB|NXRjnJigm3MaHWu&H4OVv;RtY zIjdYfbMe`VIg-*r#xAZZmzKRbD(M?fivvL#30Vt@4*=hd`h+vLBA{<2hcw+K$hMzp zgkFb_1Sx?(QglaZ=dc> zPHcyuMe~RgUXnp5L)dUmp0D&WZ3}prSHP2TH8B8u8}8uf3Of*8r8K;zpF(=Li*tD6 zO=()?QBOXtByqg5oC3$$`i3fLrvUt3+pAq3AL^)|EdxLNw3D$40ExU+5VXEFvYtlF zkjDTq9X{LLq>5t%k{&XaPTA>>RQ%_g7dhv|#kIc~hfn)O1-nl)2JA(EJi_CgisTBr zALLP}gI+Q=o+Pf55v7`*tLU&+IM>ElFY9%Fkd}yHNez0eW4q}p1zI|IiXK_MtKnVv z_jK2C7)q}1*>fKWv-D}rH6CJ;`(;#_3@Ftp(mjdWe|1fA4l>^)V4t_v}&JXc8^|Ta`rrZA2mQ&AHO|x1ikiIip1@*?EYlmcI%zLwZkD23+pkKJec=#V z;wLnFdDa%aD&Wxnx&oT&GPNPLUOW+ai=ggN`ZH3@Zzp~qTf#b8e_)@S(hK`hH6#77 zqejpXsBB-3w|MRqNbCp-v(IGwKe*!%qOy#MLP%xYTG;JlJ3kz-n**VgGC2X#Q;3+l-Dx5mUg{t^Vwv-0DFE`Ft^N3b#0 z^xY<{pp(9UN!hog2HfvMr`QEL6}&^mp1%<5oPBoz;dI>Bm$7Tz}MHwhU|c^5@!Z`Tv39^VhEj{sYQAyJtoriDRIR*TXl-_Zn=$ zxxyckLJ+bl2+9d@%_}jdt>p5beYDk~$fhhEtn8sFA7TXcx72YqPf?KT{eh`m%xXgR z5Bw~Qdx%4jCgBSK_zl)-usrtEL|X!lyDsWf%=OIwR_KeYo%4%iF@ zQn&3CQ}$FaH|>|OJ>9~-dh?F{Ek-NgN=4&tm=1S71c{i#=@6<;OWHpA~}{Vd&#jEoY! zpJa>$iRAH!rjpSxE5f~(iv-aqLoC)d)SuItw4TPdm-X;zB;~{Ba^G)tQu&iB*0aa! z2Vz|}7aqrIbl{_x%ys0snPZZ6a9&TG4%qY84w)=6?Y`aMCdrw*ItB#dMDa##BjG10}` z0V9)JxqA6^cuY~Z50jghNMcC(zEC`>Q0o1>|C%BniSd+*)~-X&WKhq69-D~tDm~DH zG&eBb0mKr`(OuaUN6Bw9jznWnSH<`2x+PqIzK@Fwo2kQ!f)@apXb;ajq&^+EI6Rq~ z#nv&w_H#GAB`X+9xTviU_WQOK-`mBBTu=Gu`ySpLvAj;Z@6R(%+G=Oy0SMXbgIXI| zD82d3kL|DMmNeZ%3p)U@L^=Mfw#6_7Kf*=0N$lALbFb2Y8l%7^nR?q!c%M}1U2_vo zU#x)pB1Zig3g~ZiG|@Qoxz?3A!t!u@JhVfZ#h}O~3jtwox`7GPxZjz;N`z_5Z+wn}5Mxd* zdzI}P@e-)Oa#5RdE{hOuNKW`s05~i|Fr8v_3T>S80cn-BW=`?!Nh~6J5X4;4@|dng zHUA8_N6wP{T~>Nf?^LHfUEOKpDEti|l(Oe09lOicl%y5l2+!Q9nZr-f3o)I8+1psJ zXi*>BZWir}6xf%c$xtCiJzUOw5pl|JcnIrD>Igw+{Gv`i!H+jl>GN4ngs18pKJ#{K zNe~jm^#|$52o%u)-*Up!JswR^8~ zq_Ky_j-`84P2I6Sa zmB)Wo30kH9MZ~qU97$!27Yw=G)lf>SG)By~`L~4{!<$W~L|hHMnw7V0h=%BBz+)}m zFJ%@0DbfNev_t530Sr8KZ9a>N%1~yW4AxpQg{pIk)izV0J+o~$o2|+TE#Z~d)5%Mk zkb+5b4xVIutOsUhY9WKadbzA%J|vTiv52}s%5a}Qvmaj$^1Yp_jir=Lh~VoG6uuNQ zuY?yoQUen%^PKQT9L)B&Lxr6|PYc(Ogg6C5HNlRJO z3sWFW`Q_@%LQ^>R&*ajkfpml2s`)GZf^9DWQ~L#Ry-2$gHPfviksSL~HUB9*kos0s zC$A7F80L@?CjrQI`I3>PlZp;R^Si#_%v7FC8Vo3URC;xTHPtogG@D~;EGd^xX}d@Uq@N#Q&!fq*-i%$P|o z0cts6UT8E+uLO?kVR5rp^AFe4@rnG@7v>}c9%BrTmji>Y<*4DJ0rm}Dy!YWn=GpO#- z-ehtF)5zMI^`O}+J7&>SX`#zp8{mLfKrYX8=hsxkd;!i9drsVZU!owAZ1Y{}`lq#X z(Dd9}*%Zr2+ANr6y@?1eRWWC88>z?tNjd70pR0ISnorC!%SsF64(NpcYm8ITyTc3O zMgomH<_MON2AXQOMzT=e#&4VhZk#0xRr^w3)wF##aFQoJP8Ac@Z?uT z7?52(HI}>d4lJr^-(r#r5fCcQ9x9SK^||2|s&KN-&s~_$%Sc#md`6saUxL@%`b=l< zjH%Cv6SsAu3dgQc^Av*?*TvySnF`tRc*3#?cNYlcG6h+fPk_WW_W-1ok`E06z?>;v zGO~2XsI?tCT?>aq4zl8f(7N}$P=gFWpFVIIN}c1zRUq2qV2kM*#JQ}t0WbRsxY@c2 zy_RJA`cuyR5NyR6os!h8T|vd0>L1W$x-@iQSlUJZx+0R}Gagl13Pc!n{1;i&8c z#;lq2p49uTlR5y$SY`r-D620m969aG=?yl11j=`^gpT*{c?A#GJ;hS{FL{)*u;9n- z+hNnZY9zSz6H{^04kUWge<>5U%{ZiA!>MRIzn`Kvuv=Qt)?;WAS-1LUjSSSetBTcK zO9y)7j8DLF{F^+lvlO-nFS}f)an#Em8QXKl=)pa(LTDkM^-6}9=vXq$UFtisJnwlt z;t?WqnhH+bJW4yVQ|o0Iau-A9rr5I%bKKKrSq5b>0B=4Sj|giInQGE`h&vp#=BW-W zo4K!>{yvY7Jg=zc*I|9XSB%=cXfrTA>6j#iJ0)gRgyQMJTq_+M8tdKGtqw-b;wWD6 z6|c8S*l=#PyAepf$;T6+X#6PxmTtN#RKY8oi|`r`wdwI*3NGWDGQhlWFM1-wvRwT8@ObBT5qW)juK)`361cL z&alqH!5&m$1@h?R$F%K%#*MLiB#R>*G&YL&bn$X($!8NnyEw(g>R>b%XbnI{;avco zR(bX&dj|Z_Qy%ZtkD|dYDyd;F-$+^TTs{L?S(DjxIzRI-bZ!H3v>pY@<+<1kMEOi# zdo_aj>E~PA{fM%Hru|UN-%GL$b^^?+@Tev=v!`qzMnuwpOGQfzBu{MUuJ?Nv~kOU|>_h=e01Q zrA*)1m<3*L_;v!IkqXFp`d*)~vBBT9WpS|le+M2%9ACHp#k&C>&2R2EIQW zddzRWNS*Q~qU~W-=;Q8bWGUy^t6IFp_8#*JcE=jafJ9$}yMZ&P-jSL;N0rIrp^^OK zQJdXwFcw=~cpOKdcYF#W&30BK2j{bI&e4F8RB2?jCnVOg(<+;EVmDro6f%P=C0IUtIXkq0C+I?rn#FE*{d(M z*a(yN8=aWkoe<|Skm1X2bcrOkXEWpg87jWB?xt{NZTr1_R8Z$3i4)^-(4?T|sJ>o5 zIcNxJkEaHixXMD{H#tzZG2m(=b>r5KiTMn75`K)JDU;0jXXh$G*eNef1CkQMtTfthZcuYpi{t5G((MB|=tm?E&j zwcwdoZk_UXLFJSwx%=SQ5T)(YsiqwIP-13U6oCzE7%R~%FEt&Z1%9u@sw8vB#WTn? zD|r5o(6K3ZYaRf9k60_t$&K9^IJ_2efvab*j7`1h(zlPa{FPOs$kU#o1k+Aex!VYUW?MA=OO0Hk9+sIYP7x}w~!UEv#IA! z5nr2J$|p;RW&pw`mJa`P4kT)Y*S3HO3{rQ%31=1~>xGj4f4+7ou+ zX$pvY?UTNQ=4W`O+6BDnM@n^*WLc7-tPmNL zg0~hnSXgK_J?Uf;I8x11fsG>mhRGJeuuZP+D1JhxFU`Gbe2Tmvk#1m^q){ZJR;&)* zTfLbSL7_dM4*n<Uv@tj zo`1b2%i{ZRNN|Yb86)kbD!ml5pWCEhB8c#Z2&W)m8ZBfpvXP znMLg^$}M92o@X8$b&H)2GM4LC^hRa9T%;<3g+_l2#f%-a*_$$wvDKRTXjQLNe8yBY z!p(}NPqPf^x|BRkiAOM=+^-&g3;)Gs*~I;N4E%0EK~K3{FzXMh1sbh+GMMswh1{E7 zqiKRV(j&%(gwk%D9YC}*odNA@hlz$ih$2mCm)bP#hMQ>NI<^vEQ%ouiSOo+}QL%ct zdrr^Q9&b_TODbNC$<|Du3|!2(V__J#Sav*|klGHZDKKF`W*%gvFQY}PNqZP^b2P-$ zN78~&RyZG>XfLc8fB7tPZdo9J-@au2c@wGfE;DX2#G*}3(DtZ2DU2QQq1tb+q@JF- z!Lj!vzP+iPgXtuR5_U#3W{%n!dxRp;uVtRr^zjr+tT*BRh*-D%SesxFh!*rdZ|o7Q zm9f}S-A@dHn`@?01X69Ot=DewXG75R{#3g^y{yb+EvFiyt&za2SlXj8Sb8MNvylYZ zTH70c2)69OkiZk%%}c~2QS*^nc&Neej0BHN1B*5DdM358C{y3WiW*D(<={oaLwtmA z!U$8zhCryeHGky7$=n7m5QQxDt+qM#CFg-MF}DEc3IuSPSvq4T&V|5rKaH!}HHrfF z{Og_DQC3JfE~&pL9jJGGPW9~PAa0^wMG{9-yTCsn@#nR=lklWZ?a^A%ZUHf54+k?QNSe3QoY(+3#jadKEtxKEaD^JJOE9Dh0j{NnefKlQF z@~=J4p-_+l_7b4WbW&F zCYwrLF6(~dvt<_-m7`e!6Hd`W4!6dk;g^1|5v>g(6EsoN3!Yo-9poHBQ7NR6~# z<>Nur`EcklfrD3DD%k)liQ{%TUg70JSR$~{22Vp&rtCQL!yGBtWc$-IAxks6=^<^jyRH*YXRc=^`o$LNgSgP~@o#;W4$Zznpp5ykM*yV|R8h%$>2t^76sLw3lER7Ng z>H9FY<%#zGhR=4+ljiT7rJvn3sd--B08&g{RY8+UO}DK(BHmp)q48TM>YgxoUXp{# z;ypc66e$$G5n|A7(=f_nn;Hm^`1K_7?{S2^~8PbtJoGD1O;npRL zel+~#PKL2el3{>~3rku`)+gBlwCJSN+;^qWgLj%YtESY3MnnI|v2&bbUe@a}xaB?< z(-2YEwL^^*)N2U&w;R7R;*g`CmNZ_}6v#I@e}36E_?;;8&=fB#8P{N((0|ij(1_Vx zp1v+vCTHV@lWG))@0E#>h}D%L)OZ!eS9<1CWf+VY*a4+m2o7;}FIsFN*d5muQK~2U z@X$=NHlVl8yz%<=805T)v6~44n4xa8V^Ul#1`qc%wA94D7SLtjK8)My|T*=54litB!`V*L-TdZn}s@M=+qsXp$( zBsgG1nC8FB*4hyrhk!#FJjx}E*S z^rpR4$&_Rr3C1Wkf+sDqLY*6D^;w6loDKNvJ(!Z_O@_T+DwChyT*}zB1Ub5x#w`B7 z$DSZ>nuZ3EvDj)at!VQqhtY2k1N*%n5#^ zJ8_xKb2p3t4dE!`Jxfw)LHAgGbSV?V`oMTgB}13d)Oq!(#bJH0PR%D~SM6-XrEXN2 z34act@Ss{r&OBirQ(^q}l+(%|iypK&mWZ;0l?h-=^*-3Y@+*B{DP1BZ+SX=3Uc5H_ ziK!Z;r~|-zz#=@R!vU|H4fx6sf612bK(Mftu1v*wpmQOYv^M{*-+HVFN4lZv*7}{e z$Qtc07IVJ@{5&HFKy?S0&Uy@=t;%lf(K;vqbEoPe(6jQa!KhIsx6k&?z2F7PTZDWx z0I-rD<*QVnahn&b%`owt(EIg)8>6Xwg zbQ?+Hm|yU4D1PG3ew{?g9~*OTR+#6*1n>s{;wCpW2`bbf({%Iia4v|PT&>R?2L%J5p$uDrk5b{Z8 zKFH)aP{xJTDW@d(t4rfO5NjyEWYLzR0JWv0W8FS9K;^Z-=bjFXB}x1I-mL97!$x8f zKL01!M@nZhrAHui28oS0m*SQ&yZx}J$jf%>o?OR!j6HZb61Etz1SpoP$oN-a^tuua z1M7a0uf`WtTCMC7BmsOVrJIN9FscuXFd!C$kg(})Z9nx%^$`w9dV{$i(u`0Y*WO)K z-P=};tMv>)qCEirKLEf2URgx(%_baZf`JsH!4r%17Rb3lovBfbsmK!#R89 z>s3J20fS7T^D4;Sa9K>dg(%8BghH!qPx102jqpX7sKOppWG7bH&SN1REQ@|13sK~$ zv^W7)<59f!)&vD#7;-V@i!y7WL?ilvAT65td$q2S@|{16m8#u#$SO6m58 zzjL;lNB~);I}>=y1v0lC&n+Hcd+eJHtpab%Q!Rlqd4lnCN&YllAKz#iQZ(sU-(1k5 z0@AcbS8SouNpI}t(-X6F6p*?nW;;u%Pb8-Nebe}vR5mRaJv6LF=aeOj#o;yp=jtX7 zsZ=?(dI?4%*Q7QL`3%!5vuBu2!N9^2;*|pc);HwMB$#&v1A^u#&rwxh?UBQ>8mo?b zoYDuX|A%ASs)KA2W7u{9`_MwKCl&6tUMwkS|PJ(SCNsek&1coAm^|&U&<&=3rQ|*Kivw}L3 zk+{x4Bu$V#(PVoo4!HXTa!kgvIJ7Ap7mO3Jn)jO z^nOQ0AdcOp!yaT1+9`{Ll8@UqFL@J*cMF!hH`p{3d&mDst`*^;AI4abq`Z7yAmwW9 zm0R(eRu>08IRpT5mYtXv=VR|9!`M-kC?Mu!7?ouQWx-{W-1(QZ2u?roK~OS*hq*1t z?O9+`5-*yb#gs@6fp#JWLPl|SY3p_=rfYCVg@qzS5QkF`$(?yW-=&2V3_-EXv;z15 zYLxc)d?%J)r0gT~q&mCCup3LL9 zH<%S1E1xJPbd(AaH{I_S?d*JC=fNQdXB2Z1WRLKqk{PfBry&*dna+`q&Eui@R{?nq z!4L|>^`U3%%<*%T!^=QzQ1Q|Ol9vDw!s4rC9)a`0Cb$Y6>bGPme}Vb z2yV_#+?dXeu<^&S##4JHl#PCz{(*mx!~_RVeCofZoVPyRK`4`+V0#?{`~{I*Vyq~I zx0KUn-(S%mdE<5c-N~R(qbD~!-|WncDx*$?FKj3kDwC8iQ^3>GA+GyBKX=BPP?B?Y z>CcXGB(yA4t(H9zuVn1L1Xgq?6o&R#I0Hf`wFVDMzi?1w=J*WT%uYlAFSMivsF z8a4~wmZ?}sn+J|D!1zgy?+N|M--wDhe{0yHG*Pc1a8eJ+0EEHhz*(Du3jw|t;!bQ#qv@DW$u=QHaud!Wk~LO zS7^{I@S5r=tGsd1+noHUsg6DedSnXvN(oBpH_j;8m7~QFKt&yI3 z`85z?>a~llSaUtp=Zx%Q&=e_9wv@~}!mOS&tWrf(^W6;o1SsB|eIcMo@2#PHPIDpT;VRTm%l7$EHZ zOE50>5zyGyA~KdV&%abP`$h`hUYt<)C6cl}7R>dcI#Lc?+t*HclK6MlL|l+ES&d#O zQT~su5x>E!qpM%btS|1V6DvhsipOJf_Nnn9z@33KQp_iN66!<7A>?No-bKtyuwM9E z6ifAFq8?vx<3iNcH{FtHCX4R)ljLx(KKP)+UWHG1wEE+t^RFJGy3HN(th2p&(lHJ8 zK1Pw4-jUy8zuvzbmuFj~UWz2YgVN6qc}>nT?b9l1DBPT&%-%Z63(KFv)4jdGZXK5p2sPsL&EaM#)Q|e zP1Vo3nB*})&Lx%c$-gZ4BG@?np!o5V)3;$#Map0bwL}Pe+MwLXSW6(v4QksMX@10s z4J6E6gE(S}E&W1!%zk9AC2-(mu9Wmq^yyRgp7`M79BVC(o|NNx!3?I+I`^c<=qn)c zu?Y-coE5M+%UCiRpGLgai_|{+!LC@JBL2-$&28_*UCLkB=Qk*UV@(@#K8{DtWIWT7 zbt|gic*HuaxsnpJSs*U_-KGDV3wK)w_gu~@TLIb=d7DCaV@e^vYC6B5n^ZxY3uUYP zoH=KNel@5Bm^m*vc3$$Tx+yat%DOzhMXe+onC@3ctr!9S*n>#q!XQq#lPLI*zLv$N z9SYQG{*n8mTL!Dx$3V&FE>B27SG#UD6<6TtfcY)ZYMo-64y${9(DD_)uOpelj&^J> zS}ht|)A&de5$FZ%KiOq6giF%BepMwtIsdF)=f0}sy5yeG6@M%gdcd+}GRUASUqAHM zk=3>RdfO=4@IoOhZ$OzBjGT@a!I?a0W9T5rF<>CX#N?|vo+J26VmwjL2`fwIW6D?D z@U^m517L!uhms^^&Fp$Nlv!*b?A?wEJNv=geakm29`${ za>2hhgp~6c!&Ep&n1C)=_(#bRbt&F*TDUhBVaX6)B1f+p zVUGN1&~94GkD6n^FYODC139T;+6jF;!m@W&8eu5=(0(S4h;uWx3xOIL38LhYkF1wBbHG|{=+?+*<#>fOK3QFom zG%s-N21S=PQ~MUpa96`)E@t*pe@5km_@)R;)25;y2DQle>uT~atqwgrPG3mm0`*&kVVzI z{o+c}M>(DobsPO5L~BN$Fp(9lPhtF&D)4k!3lX-T&HXA)BJCYtX{!c*JcBwB)%=g$ zMu8d}+0<0{D}WpYm<`l2{d7G*+vW&wyOAB+`A~EYGgaAG&F&t7USV3tpDtLxS!mu$(jwc4x&{@#x?3J(ZkY5 z16CsnBn8l2u8d+B^I!Bge!!M(l=6cROA zl<^=?imW*U9C5+thGeFL6FMtN{bdw(Xj6}NrL6pGCxslBvVuVBla5YId*aTR6VIs< z)}#L5M(dQjV}Ht_;NE9JuT%rj|85a!O@!9P(J(`BsLtaNR#FgX&HD$j$JuWMhGGrV z4LZDp25{1wh#TQ^uTi6rzW~a2L#1h6sWp?6Q^hO<$ws!wKpZ;Xq4ScSN_fm;<&@J= z6$#N@t$Q6IfXTD205VuyhuXk!iggdYNcyvlu=+p)WTv#~lzIzewfSUix?l}Nc6#PP-zb&o(qQZjfN)g>3uZbHn8c}08u(04pYDyGxIg7RS{|7IOe5)>zxT|X72ta-; zS2?Uu^(d|H1lOAV0;Hq#6GFK@Q}cmEs;Fsjhy+mR3lhAFtaB<(=uC|yRG1$aoZu^) zp*FnQ0F16@lQ&EmETE01`+2d0z5rQp0`5eV{_&Qv1`OLwL!e(Nb$OKjS`mXra8|v* z4QW>d3w}RKh^Xp=QV354md0J)BpH$Lf}GfoUlj(h_9_0ST{MDT2zRAvVu3^X&ZcbS zegM4M6?LbY*3~R=@IIkqMjQRdTGSD0A6P3FTE7izeI)kLAYNSVOMlKQP%}MUGX(I2 zEt|UXDkBlZO|H>-E$PO?`>LJXc&rysl0J;?XRxb7d1L>r|KT?@@xTTe*zps(I4+2r;GoeUF9$GpB35W~j-rsK zLd$3Dg97tCO8f-UzmV@0a;12V-r-eYoo4`iyF0R|@?*0PSWF{(Y;$18DAmz_>BN0u z8=YeK`^L=50N&xf5C4a1+<$HJvJzEm2L8HBovz?%ZflZk*T5`nympYA^4-RJrO`f$ z;3g%M-pmf>5OSXEPC%B$zo}|^PdO7uHx(fO`DN5H2yFpA(39ZWQR!D?=W(ha4tZ1n zi`w>bP6YDxJa)Pf6aP*>480u3A(t1jt3)x22pO6-pEn3&Vwi(*uos)&>oSZy@b3TaR|T*w-UxbgRfB?FAT)aynen zWBPnE5>}UfCZp$*b8gUMzn$V0m6eTidec4@&n*8>9QjA&()U3>TmzwxVAR22a3F;K zSZo0Y$dG`K%*Xz<8gr+4-Q)5!bJ2f#P49swDPUgG&K>qnc+s7|XFKiJH&ZBMi|BiC z_-Cal56lL5H!tgX>NRLb&>rjiQeNA6?ovm{l~@pb$;`%c-^=;czt>^Fj8&n17E9^` z%6R2j3@&g#J%W*M!1x6nv(>T;-)-Jt6GH`fyvNMd%3&q>d!C%^w$$vax?^XIjVCa< z0~mg=`xRi{O`QrwpP;)YcR{C6C_j5W$;3_))EO8~+f5QywG;s7Y@t&U`^XNz^|skl zH%wxF6z7T-O(Fy;KTa}PphGaa{R20o`X2gPgNDUt)xAn zr_?7CrSH_i&gKorXD=T_Yak?@4xdZ;x>74m+IvW_6`H1(Tz>aBpFFhQ;G=n3b^lE{ zrC}sxlZ$WzT5FsXfUw<3`jwycVcE=|>tcA($z+Z!ge3bTiSGe-3-3?aNBBzL`xOuC zwcyM1D=qPu$BNeUOTH^O6(x5>3sQ67_Abv#59#<)w8Llg%0aXKb^LphRPr)tqOLaF z<>IRvowue_FDO?USXNa}M&yx<=1FVuYTt6LYE@}y*pphVKzP;4%+-K!y=}#un~z^( zjpv9a7H+NHmYLC~0LO4Zz#U$;uNWmdBJYa$3U23o>s=ZaZCdPVB)ucl^9Qz=s~NI- z&#xlZt1uUVuAA7()1v<+KjEm~^)TtX+GMOyXtxS6sdQZ3rcZ=qtIf&*zs}nX zUL^0^DGOfvG2;DrlD7kT61t*kz%=*j5Lt8BE9K9>N$vOskt_Q_4W+-y-KI5R8kJkX zG${zBC4PtFGi+b(=}ulcctxR6F4}>r-y{Fdwf?cu`9#Mo)fV((i<2j8cREATFUyA7 z@)P&G{kchl#X8sq@^!o6J^RCf5hF+&GpYc~pF${T1$&49?N9}euA%rXX3m-#`r;OP zsjfy;;Tu6?ZNSUtDk?^+Qq-XJmQt0iBuP!d!t+)ld>sG*a)pINt{~A+p}1;2`$;Ps|qHM zY@1O#U)6d4eafN0K-|BLFspHHwYXgoNwau}9?-@)_==-NP{{NmBdpJ??nO32^B9#K!F<&BdnP5?85YFE@eSO%XluQb9O zzwP=CgRAFT{){{ATGcn-KftJzyu|#qByVa_aTllogPBP2QG62!rdSsWnof(?O$d`r%OtMxZIC~YW`BCfr9U4uzn=b>D@~;ZP_0?_5849i0 zjh4chTJ`NE8rh#U6d{G7n!AL``G*g;VO7b}^ePQ55n_En23mG!iPLVvcYgpZzZ;3U zsP9EPF8cHvQiGYqJ<}9gc8{SSitK^4AA%-d{q(}8nw5JI%d$T-x^~SDq3qV+%_LSP zaAR_(S*QJ;qr>SSIIY(LrMnfzX^U_T{kaCZQY8e4x!)OQ&W5$0gyw$C`mvS2YAiIp z{Fq0&lF|1Exiq?MHykqDsi$YwPcCak|AN(S9jLBJP_=@NQMM=M!R6->51zJ*>L@^O z&X|G57qJe&g%l>(rBBg)C2UGI)`+x3hegJ|mxR5~nvS`nh0M5c|AM4^HL2#)FfFLO zvr8HJ7h2+==_?ymN{O^5-@sDlyiHU>gBG^x&jc~?B6~EYkt<>Rueha{-z}|;3P(IT zcVBs3)Us_Q!OwlUBlrdgO2aB7&{VunPp{%FUr#z@_7NlU7@ zBS9aVA<}A-P^OY_52J*GTt|(+4e5gPga4M zMC|q9S)aU>bwm5=$2;@62%dRjjwTcq*6??px`!+kW7+zF#;y5(3cWJ~CC|1a&iTCD z&c8$7_%Te^_NcPRh_JIZuLyJ8n*PUFoqmeDgJp$_&DE!h=)+fR=4`UlN2ftF*trkU zqtrfTE*S?$Ta*v&B=@D^K>2`Z_QdtfWElS@ECTwec9(yv$YSeJ6DN@Cie25mLG8g- zh;q-1beWDwhtgL0H1-PIMwb30gXQ^`u||I37fXw+*JzH=QF>_T%fu`nPI|F9Bh=j` zy59nx&qH2CkPhw{MjWXQhLIfYp`?FrNzRI!l^n5mdX$wlbw3Mvun(9ue}D&*`ryq( zT_|%~THj_W-OKmZf|hxM_I#U zcUX+)YIg^W6RsyPXrL_JfWP!1Fh{&^PEq0K!WQ(ncsu0PSo4nDOz$Nr#%Izy`p-{9 zi@56FiP7USX3*_8-lzeosZT6qVu3mwM+X?TRUU7H&&?1>OZYXn{SaS=+bsEY#MiMN zwpE2DOUw(2ZK7H1jC?p>4{43)Ol7IxJG$)|QL4?Iyc%ca@~_ms;F%!KrKtNVJ!IJ( zWV($$xiCi?voWj_oBYTLXPW6TO^1X3W`d}D&9?ywyjvsg_kJ{c7 z{)2;A3>!P!iCn^ZNP%B%C4Zt(-@$tvA3HunZf?& zDj64-2n?jdv7qv+07NX`$vpT+%mV1_4!G}X_SMv1zi>b}6qJFvaFC_gCrJdSnm@;0 zMguM>^r`#WKSlTX@E@m(%Q%rpFYyoUVI=Z zw{_^>r#K$0&IAtCBFgr%xjQT)TC~2j6LOHbXgARi4?F8 z0^t>YX#R+|J-;U`B~@$pjA`R5{C2BMx&~_z>;x=~H-vNPG_AIgZ6CZ)gh-6et5KG7 zaZcw}rNN3uu&bV0vkonOw-#6cxRF2f&>dTSc`y06C@cGk1RJl%fp~w4AX?VbvVs#0 z%T3dA$u4wZv3F$33ER(By7#9k=JT7wN5H;;D(jW<0|SIU46sKKSwJ*}U@YIWr(rvn z7@>d(CrF;@LH&Xo3_m-|P9c`zBGVIXwBKloVHNJ^rj*>x{Ap7Ui^KZHY3nBGJpBf3 zx<0qb8(p%gy6Ed_BOK)@$m9w!0}yVJTYQ9^%UnlZ+6mq%Q#&vsH*s0?vuSh(gq#3; zsNo`{q3#`(T0LJrF`NuOqfBN^?%ajIfuy9^nQp}+u~zRJ&gF!hR9NAs1*8J!u{|)8=Q4> z`JE$`4%34;I>y;41bkKQ(_^-v+n4bWg~O;5hO#;Sf#-`SfAbRJKumE%krn~S!Cgdl zE}w#A0lFcp3@V&h``F z*VH5iO}Lpg*DZXP$!%M*vTxR94=}}zsyvF!6W2wXc}YJ{mp-CLd0fn6^?4xB^((Lk zP@j|^={y{=)%62>oNa&TFhLPD3W{?$H99nk{?vJ;#WJnNVSZ4ISjUDvyf4;z*-wKB z(vk}d!lhe^I2_aZUcvXSgA~saHKCjn;}jOfjxLPFs)11KDPU?|p&T>!bN+YCAp` zX;x2Dt>_N!-}2@6C$8rmGRB@1fMxzQH0l5o|DR+$ljS*n*3jW5M<6o4P>|RM1LB*O zI}xQy)7$kp+H>i*=C{6k#Q~ohuUu8op1-m>g1qhVzhoM%ETPc5jxa5(i=KI!LorNn zU8HSo(-pVA3DfX3P2G)$EPT@jnWDwJO|4X!#4cmO3`$aO8dU)e9c|YWr$z@%f{vWQ zi~L5#@yh^3QcksC@@(<&Z+h4O44Ezq`%#tMhQRw<$Ax%(Pg0q%feO7*^_y7kEbN=8 zNE($DX?dxWFKSHUS*%oDz99RSo$(Cd;vM}-oUnr4mIV1U*ZB$G0eP0j2dj6YeWk4U zFnva-;;5|)kb&0xRh1W>;AMMynl-m%pb9 z_$v)2TgfN6WJwBcP4sQ2H=)gwUE0*8QHcyNOOgz-(Y8)ng@JTQ%w*%`}Po=t0W zd^YPczmXbf+s+6HLM5qim@{yTQq8?HwML;P%=q;m6Ch?ATGUuy*Yiw*Y;j9k+*V-U z2&NEBz%)y@|5&XYMDAM7+i3+mNQu2!QpgM@vD)6$$kURn%5&ATLWI3} zW9ge|VCPWq(k%gjYWmUZC^J4!pbO7#*yl|BMqZ{Nex&e^k0`->b_Yo#&K-bNhEbi7 zWV%&L!h9(5j9?bjHi-?9pwn;b11Y#KWtMn~2Z=_Y{RyYt9>mOJfN?UqiDheoxdj=a z2>4XHSF$@v=S_xgbw{zH8p58ZTUQD2Q$)JZj%-pm-3k6@?=P9%TR$wKYc8Cs9u=6U zut&3*sq6d3@^7FjsPxJg#B^~?@;1ODxFY{U4U3Mnv!s1(Lh%x5(Oe4-M1o}8$hZu> zb=iiF4w`xGPi1N6yiI#{j zmx0tI0&ycJ$wOk@bL}Sr!%>iZ;@^=c_=kyOX7tB{vVj%b;laIJ6pQOLlna2+WAbywl3lZ_JOI4ZrOiE?S|_i z5y{Gef_oCt38l+tiX^QeJ4${F)X=XL$<^`~!-Q3C@={zUUIceY5&HPc@)yIxfjF>b ztW4#qq~Mn3UnOlIX0Ct0OVdk^_($CX4r$q>*#

nbpF*J(h#GTr%CVT8}Njt zfV8d($G}sCf~IeZ;p2LqoJ#jGJhJ)~VRilpo&LFSD~K;nNyROCV&o=hJZ&g2SiR#Z zxIt?R*aG#RyERSe=h6vC1>i)}F7paVRsr-=? zaTOKOlTZelUEEFk@);O_0#+Ne#@e1B#J;+5y{owW+RFmtYL3{x`eTSdGRailFhb?y zT-Hho*H39P+sn>E3iR%OpIpV$VA#`2r(CQY8P7(DpE&?Ehex|vVNxEp>1@-@xg0ty z*30_IqN_1%c`LffK=s$xN8Z%6(l$Dx$s=V4QGnvsU7e#{_R$QvvKDe^4{ZY*ujEV$ z3&Y5HGYjy;{d6!o`@;yxj0A_;+&t&=ITKe3i!1zGJ*4=w!EFL!go6;JXO9gxNurS* zRoHKrw!Q+%)tKKVqU14PF!nn?u$RyE3tZ*PV1*@!>@?NoH#RBYM_a}B1EGxx2y)bZHn0+OU*^FACaJh0I>TPkjsczheEGG<}kFm_E|7DftLc6Vv2f7iv@>Q zg>o?TW}`T+4^GgD#cyczfYMkpFn#f9nyn{%pbwq*4xU>HK?U$S{sHd?UBxaX<#DN< zJV%sk=bop(DWq2&5UPAGB|bD)i^bpuH%heN%YDNG5b|{DpRKy$I1@E?y8I2D!creFJ9X>qfK=sTj?slDY#8v3u&_p~w0UQYSM1|ZdE}%E z6MR;wI+RrA`SMafl+Rq*o~>s`53j_oB;4jFtUvl3tf@iq)BnTo9JHlRO9utRh|ivl zV`ZAONeef&s@6I0g>~ zqX-1@wR85J%;$+g}l!z z?^k$`fR`~UQphNK(P|YAe7()Eq3JV-5XKa1Dzho&2ZU+!d~J%*P3054jRHXU?!==b z5DVF$>D+iVYosz3T}m+uIX4&BfM1N(TgjklU35z-t)3tF-niyVp{-eJEjzQ-g|FrY zCgTdT;LJTaju(v;V<=$aGaWaMnifUHY)d0ASU3i!d?%Z+7|U`O%d z=e6hnt1jshZZaEExGJOKw%s!_jw4&+auH#8TP9%e3-htdQB~m{nC}fIZe)@`BGi$O zv#HpIIw}rPy9f^)hv; z`H7tQ%|N#`)NxnZLr<(un|f~qL9+jLT`n~F_U-YuW(sbVV*Zs5oB%YU2|!d$m%#pD z>?p$X|E+jd7%3Tla^iDyMswfCRR*GrL)9>7i0($$>%9^L;(g97!r>&6;z-a63D1cb zK5@Bo2jYEM@;)Std%UXenV_Ayo4KS=SbQu^Q{Vrs$Bd z%9kGu^L%}z@&tK&r8k;_%RlBXCJSHqH5zpSO?;+~+-ysO1M`{seH9X8pI{P6JLuX! zA*CfI78abjwDF2G zS<#QElMwDtn)EyA$s+Q>m+^an=UE;mUwU$^TT=%lQH8$KRH^~D@NG6ryT@W}6Pd)= zklVkD?5my7Pf|kFzsn9h>95pST&9_BVuC!X=yhMK5o*c}ArAeiMm5S=Mo_<zPRv=A(C?HD;p5<+U9@k+QD+eBFd0_vgaF!|Ucg-c#6DamwM)fyIL zx^*=(4L()e3j<8+UxIReOu}&%y_7ib@zr#>R4ba9mi`3qqn&^ewx*~D>gT)~RXYdf z5qix}+6C3iMLo(cjXW7G3myzD+5^= z8;n2v$8fpQR3LFw%NJx({-if*vUYySZ;luy;C|WFczt8LpJjTH$Ho)Z{##f2!gpH2ZZm8C-9wx zI+{|>PAm&n@V;4r<=0a%)F#d!cL4qTX+&;{pvmHFK+_*7=te)*y`@g z?{zLbi6q4kW44il7-xg9@J_ljbrJr+2TiOvileD>p&XGCq4(<`ptIb|d_wE^$hds9 zO3<~)V4FLIq)jA40bnkV`Y(^015(`_(ttH7Yb!s^gip8c9k!sTNVRD07n>12SkT$8 zn+#=8>0w|x=8Ws*sww0g$^J;pEuL1@hd|OYz16YG`F1z*?PZ4qEcqCUV39dfo8UfA zXBVq8vIVcM>oCLpn|wQjp>)FBVCKA$pX;6PjP01N9gAy%;Dvj3+^qF@q85=ed-!Iw zP}S=BAA!t1bGLw_+u~Qc%sqzM4Im;iKGa_SsMd$NWmRr`)aGq+CqD2EvJvx-?R@(( zi$#4OoY(0_=J3bB455n@ovy%CNJEHSXWI0nF`_Jf5#GVxgkf^^`SPPYLT)e|bNv7FR4^f8LU0Z=fs_R)|s>%&s%=3|~ zRK7**4IZ=1`4WQ#d>$dfks!2;e`(1CzbIaJl6dfK1Jchc^&7QX_yR4VJW8cr) z>rQ{x@oPwd;juHB8RA|m#ma~tdKX%QeMuCWw{D~%vXFKaJ^)SEr~UXGKLIoKia!V4 ze-%%l6(EyszaDPJncNorG*E=6SG$|@BU8(&@28|*J$@b@uac~2R)U#;@ZfybJ}exa z6Vq{H4y~PPP$Gvkf2JtQ-81uXJ54yGJUu-+s1n^K zu3`H`rNXsvJoI?k!?E=g6wCs_i(%GaB3-%;N(+h#@tLSNL>HSN>Q5$*e5-wJ&5rp0 zJ~~rm%1qtBEA^Jss9mP z!%k)Q3PwDral`m@WP|yBN*&}85GPpaC>09Sv*e1}EO7hynUHBmn%JE|Fzz$k8-im@ z4z`t0r$DYd>nC=;Sg$!!wdgRRsU$fsX-0I_pGt?sbJ5VS!~%=7GBtds7s7FmxX=H4 zI=eyXoA&^Rvm+=nmIxTeoI-lI8tWK?zrluq#ooj6q4KwuiOzVZVN&uMjUy*~5)$jB zr|{dX5v6Vtbcl#)Rg4>CimY0%V%G)P(_a#tkRv}j!e!KSv&xOz0a8A7-%RjF|F183 zRj=1?7OxcShWbR12$SQdO_HZ}>7N_nF<+I!D~ROF)y&a@P`M#Y+$s4}e^9A&53PLS zXI3K3_)}2TDv6u8f&sU4Laf8K)}}%z>v@!4myzyAZ8xmJP;+FQW-VRjI^kSdV`AQP zo-AwqjIu5%G?g$Fi*GqlsF}=Ih~$9X-0s~6YsBAf_!e%*U7}`du7}6Iq5MzA9O3kJ zRnBz}tsN~YR^S;A+w*Qv!)|1}!+@oY7q>9v#HW;D&=Fy{aXN2D=&k6vxlmxDS-C4x z@oGn5dbQktdliW`pL)@v>uRlv9C4H~2py})F3?`|*N41t+n%$lR5Ca2of#ZH5Wu9CQ& zjayVALz+m=$jlfaAxgw**3_{-FI#)(x?1Zi@4C))pp~1Pw84tIMJ7MmSk?6VlkvcS)7C zp5723WLOS>W*}bD#myZfsa5N_c3o*p178NxRUSv94X0<~H7W9UcYMoqnZe02tM{_jp$}ahH;_cZwC^nrq$p!3?dSOa6VNVd z6K7X0BAzsA$*gp=fsJ{jnc6aL7Mj#Yy3&bZpO0VP6I7bo~>b)z^HQu zvw3J)Ev$`Q_&TId;?m}Fw;hcvP8cU{xrjRx%CkhFU=mzsO&ai5TR_>MLS?PkC0C(g zYA@qAf;_@8bMD!!9&0jji0L^*?~fPfXK=EwyLbPh`e|k?!kmw;*R$?oCs@uSiNxxq zG?*@=%S_t7_omnzAqY|5^czWhIQiTRdTrx`oJErQ$A=dRRhE88j@O$A$`*?O=R|0Q z>(!c=AkX+*LK6l=%GREErKUD&cn?1~TrURt3k7QD2#!Y1Rx+Kj_Y47qg#4=WE3|WQR4BfC5f}p~19SOop=_PF zKWw$C?cK!qZFl%NrYcH}@){w=DG3D4@8vV=wSf3^V(XeWcl*5T!OGr7ob2qW-71e%#*^!B2SZdj|noOb# z&86OJ6dLM8^|DkA%%a4Z(3}u*o`&Wea?|4w51VtTW*ChH7$nTn(R4K@yIYQtjkCi7 z@P9usY2mk=be3s0ZzqYs5@nxo;6uA}AgOAj7M^1B5V=41Ex?VmKvjoE0};Es$Z;|t zTX1p6`kFNxW+!dfEic_F`gQ81nSByrBzDr&5?hLCpjrpyE#0Hx1UJGXZx-Ije zK{9-HbOT%!gn*8|-F5FgmIc1{QdWM01*Nef%89<(YEwVEG{_9)e;xN?Z2tcloG*?$ zS21vbR?7*)$`mv6&>{Ckee&wYlTFa8LTW++`mN_}Rpzr8 zBt^m~3K=a@_)Pt!L26Q&Mw;YlluwyI8x8bSVuY8@Ga>cNwy82z4{@LuOK}l8c1^R43HsyW zx*C8Zl94BJes8_bMUoca7OrKEe&kR9g1Hf8Mt7Fsqb9aph0E& zm08$LVM))4zcZkCQkVoqhNak>F4v5uc~X_8o08qW4lAC}(P0Tr;^ntM%(wf_e#g@7 zNzDe%Kl+eG`b0s?d4Z;`0zbHo;Zhji4hJ`a{0Kl2Dmm#2uJPQG)ZDqXKBM{NHqy72ciH# zhNx`ddhk#dM`p4&f|PT$TKG|QucxvbpVdx5JQaUP$?%XZY`^OE8U`ETk+r4a#?4Kh za*_LfD7aB47?5W$kz`2E&--o8!U)!^m`dFL9ct6vhZg!^?DUGQpR~jE36L%HEH%t% zo>U+u#7Abb`}`gk!pQ1B>vJYDC-EZMXn~oQq&)YO`U>u5I@tUr#1Z zUzyP4t#^z0ohiC_pjmeHqEb`4YsEGFqEx zI2=&8j)w0DI4H1q7hztERnhb&*HyV#RCb3)hV<|}C=weRZ3EiCnAZ1;Jot%7g;V7{ zl7G_2G=dC)*oZhB9Sdz8nGXBwpR!|?@J{_=!xhM(e(In#6$mL~KOhKy1-6Ph@TdNM z8k=~-ovROrBuNOwz;Y5J`?_>}hGfc`Ad|JA(E{-2`{}o(84^#wl{bHl*%mS=c>@6s zNdZV#K0EdWHDgPppptIVsg>3cC6O{JxkV)lZ+JPw$2n*BO5I>9ZY7WvC{(p0uq?v< z`D&`$&542}KYE26Fp`qIv&3?kww19@I}l&epm(AhbnUi?QXKR2(NBsJ(g&>tdqbAy@q{A?+c9|hMcv+A4n(PBF?74HZ)ABZxS<-O?q@QgRSz6nE4i!(><9(#Q(zZS~UI$j+MQSJQqtai> zjf&L%{|Zc-DX$Qz`R_N5VuxI?7O#8`;uGqQ@b#piA74(_K();QwYO<}ex#4=hCc|z zx~9&Z2evxXfq})_iMR%@{J6S7|yfHwQ^M4GlES* z8s#D)9AIpIi4Dc1lCBnT=VoJB2t}~41*yR$sf-=q1cRu6yTCnMVD#kACR>$eJ1@~7=@C3L&n?mAw z&joh+*L=9IGyuT?*JMqj1mCa_UCaqV#P^&X&|#zhH6--VvBjpCZizS%{`m|7Y6dm zlCx>41R;zIQh5l}p{0-gcC4&tH$>mJ8YE3gK}r>Wi;U+15bk;&gD=6}`b)(i!W9uu zSBhiU8rsJqSDF3TgFOKtu+1Z3xT}109NYNx7gL{04|=i+`@>N5jlk%$6wz|uqJHpU z?5mHWUYn1!^C;o=E(Z`i+%B9C)zR>~#t$}garg551=VOKqhVfbK9`vw>tcxa`ld>M z#cU8v_-FEfk6uY?SUQHcM`gf&! zkVyk?zV6NUst50`hHx2le@>}^A42c{b5Zu#Nk5{>eYKC#PRR4pMgXZ7H95JGvBo`$biv$MoKjx3 z1O`~Ox%^)3o0L8yFg_!eEL&M3)gpysc8V)bj;=efw7UOywE_qfGHj-UV)bH*&%BDn zqR6c!a{*e!F!X@B(Yg(?*ff{Mq7MmwTNkp;X``Sx<1l~RfPp{MbziFeyXqp6?{;E< zQ0A(S64yvL`LQx8TP-@?KlXE(H57Xz9D}y5(%PLN#xc~4Hum}Y-;-f~8-wapvh(D$ z0XFGLBfg-=;l*QM8w3i=4v#h+@fO;@jCuW`s##reLWi*dvtJ zI$uA`bUicBMuk^-4KHNqF|vVsakDs%(-Ejw_SygJX%<0ifd(Kp)a#+Uqn<75+e>}m zhRe3UMgQr&T90a`8ajDg{z8h9Lupe@1+qNt3qM%k{xJh8X}8>|0W`)11(eqCOP97m zUey@{ZSCKt>BEuk|D?@F+50Th&PqOet20nagHR?^W(9bU@um>eghPrQjEn3%dEM~4 zB~_jM3cIrBviKk}=~7X1_ffEhCE}*JA>^ zgGBu$$zH=@XgN6{m9VU^fve`|gp2J&w3MtPc1TlV z2-?BAV7f)tIHE9os~Ba61M9hmms9KSKb_umb#WW)M%NJP8 z1_r^6eG-a`1X#F|5(Qb*`#vwC79_+>T1Q!1j;{{yO&_Tt$e4z1xTrm&9k$j|hQIJq zWw5Le5ezIt6~e5cv+*Wdr3o@x;7u-BdzAM62lO_m%bT*N$A+!t;xp@ZAW_JDNbP^~ z(b@n@_O*(E%O&)7GCE~2o~f|Ym@Yg#(~UY=c#ggV=FA4W0a!mn9cbqMArF6t!qkIS z#A)N%VN90^#$snpww`iA_irJ{Qug5f{=^1r5^ zzp~j`K-mwMD14W!4*RVWuAi~{!3ASA>xD}@Q~ma;-VH<~eKVBy`DbmyEC!5qgo+US z&{=Rf3+rZbyP^a`hY|(iCJYY5<{Jgh0xJBeq25;zL9g29#rq?b0c2Q4@8wmS_E*pm zs-05&SEvzUR!~S~ApUuNK5v_nV1c@rp@_>WT>|MX;YYARx|M;i784R{*qy)`R2abX;L-#)f+VwSIy31g{TRA& zf&3Nu2u}vy)ZmY@N3$EaKEQA5YQKqwFj3ygxz6i-FBiqZvqOI}Xtu`ZP|uA#1xBKx z-h+p~dfX>3cDETk;Eoz+r*97|qs+pYinZISVD6c6S@_Wwri&1; zBZ3?0+^s(!nUxZ_%&G>jdX<5-t%{)`p;Q^F2k}959JEJIIg?s_| z1OYU>=eegPSQ>DYa|E0xVu{7?<@lCU#oA}~PIu;4n~0Lk$RyPxn|FL(hnmpeDnvWX z17sXDWwzIUeJXHtMWWaOkh%8c@@9cmKUSmd&ia<5KcUGmjd7xuEYIVhDaEPtS|KZx zK=siGrc*QcoIViF3x$Z+-PzA?b5}!D-^89QliGATnx#D}=}Ii=g|sK>EZIDaG?`06 zzlj04c%}#gCZ-)IF|%NyZYUr;`Yt#-aWxdm^blY1s4F}&zh}rPQ`gWJM@Pdmo%+@1 zkYb%hGC4gR6L@J}9<`%3ghL$U~!Sx+qi zIBMt!);+IX(qAV!5>Yehq$w0k|Z8{pEUublZN$0{evdQ^bV;-&k z_&Po?a3#`vU!=CzkeU;|&s&D9q3?nRY0*0!?iA#+SLwyGvq`ZUXK2k%2o>W|%kcm< zWK9x<1^y)m;#|g}-29b~IzfM1!IFZsR6POBkK$(DM!LC0z|Gpw;8T#;IDb+BIf!&` zxg-#quVqawXD|A+I<2`kl*+V1oi-RJ%rATKKoaqnxfI`xLWpaF=`C{dtTXa1dWRcu z5Qw%h9>GVMYfcV1>id@`!Q0PPltzbjrkb$1#)MmHVn-zm<55O~kQ( zKUXEa;s%V|2LpIUu4&r=%^cG8Z3wc6;%A8u5yGKr(p#usNcz6z-jCTTUDu;Kkv|}6 zq%}%!ZtV%zOo8~>Gz~*{oeuYQ&#*cKi1K#F<)#gE77K2ry%r3WeWrwwUM0EKHT#Xi z!=_}gz0})r-8}3(ES$8+hgRhPzki!jgH`vk_D)nTcUBohBTC#>*8P-{4)p z1_vFaCJ+dl>cRNhP_QczgR${wdz+zBNXp}*Hmo-Wjs8TjcX+LXn{$|C#CSSfrGdXB zknyCE*rR-Pza_it)lM7a6=h~gknDLRBe#D?SAof*K);S7#}K$2ok-CpTAamkpKlaSNsOm=<^mv}wx>>^@myj5&HsRsXhRY(gy$ zZi^`(nXWXQha~Sus(-`&F04y0Z$mV%6$PzYRYtnj0W{IWuuq|3%z1LjnCka^oGlrh zV6;NJ(!+>(fg1% zgN<|t*Hoj1t^Zs7ot38lkj0kInaIUwqOuhcP3RQ*eiFVSP-TOLbCp zxR$}W@H+DX)(wh7nXOcL`!YT8O@;$|3rZIb%|{GB#D)DNo664UzR~MemMn$s3HSy} zG*nPUK;Jag-;I!5KD1g!%*_+7Q{a(1T-W~OgXE|ifU8zmmfcl=Rd!!;FfO`iRosp` zNhu<%l{#$fmR{d1;V~B&_ox|5ghHRgEzP6ois_r_t1NDj`rR*|wL$>3F~oH2%AMY{ z%&cUdZ9{$Zh~g7ecyej>5=Xr$R)5IK!L1j^)fGVMBq%T3Ox}9S%(7&twj!D5sow-1 z;a9lNU&4oXcrIeOS5JwnbDXJ5*e2yOmQj}-c{wOH71`AZ19;M#)YV8zwWbGmsF$d! zzmn{50TXHS8k(G>wyPSxX0A@u!6&tRrvWR-cIu``(5R$K2 znX11v zh~an5`-ix~6!2M?(GP!pEq&EN=#9WL;U<>(p;lc#WO|$k)LvH$5^4ZrG1E!hQ1^Km zJ||s=WyzK)Ziw+0{)|L$*f>@>>>s62OO#ONv_6eRg3O&R&IC+dM68Dz{dDJ{d;lCv zm+VY-a48FZnr)fKh;0p!Y2BpLEdComfUuJsCW|u&<^3kn2`YQHK2*0nks@q2V;n~T z7eRRJg41SvR6{n*yEB>y)3Xjw8fNl!;IT~lEIEGGF=DJJc?G^|%>pL)1p$+!!F7PA z%FGaMXaarwtjlGc;R)x>?`|j-eK)wc)4*htp#&#vp(ZdZ^Kr{nx=@3!v8X`VfZ4a} zHRkcG5*tp)Zuag(v*0gsh{tI-H?+MdV9QgrskIuW!?J=^LEue4Q42WWAeyLkJmC>x z8K8pb-@dzeMbqvUQYv^tb`0$A^xEynS%)*C9G*C+f#JnG!Q#oIv{ZF6xWX1AemFzR0G;d-HL{lh{Sy@ zr%xXnZU?b&HDl^{Df;Lp!bzG7s)F-wXF%kv8`!$RSfk0HO(7ylC9|HBugbGeOHH@i zJEeBLmMc9q8-)&&hX_vm=F7k3zJ1@PUAwFWcz-qA^AFQG-mcOpRtLTooo%bB*HzbP z<+q4rD`Jo7Jy;?c@-D+i=7~kCnXN zR2ECo)caTr6mk`QO41MU7US_xaC{`>g_FhBJX`ie>>IZn&!IaUVB6E&ZI-NfNKw6i zVGl|36oQ>)#*|@r{L891DC_$hHM7EJ@6LyrdkO{*s3^6mQ9`r3(8NYzfe?xgqU|1|H0 z=@9zY>Tw_sq0!8*dn7(r78zk+l8h-;f&rsp%usks<6J5?w%Va1id?m`mF6Xjd62oN zo(%Pc4Co#}^IHJ$%F%$DRX7M=o+pXr)GqTBb#m=X{oF{0i(Jph!p)%!qtybDF=)zz zGuJ}*?JhSl7tk=-Mx9Q%(;C3T2xjq1vWRTJ6ua`6Ek1b|d;Y5%hT;!v(x!>^o_U&& zfGTJ#S#BJPLnYyT;VAyyMbOtkeH(wltdHNj!3ltA5yLhA;@}i*`j?;5v2#_$RSO|+ z0(sFsA_8>pp;VCl(4q*!MtFqTZne{V4r=6hR9kjVs;B^?umT!_28F&LV;mVF>}?$F zh$~cOG|KqM%3FF)?DXxG$AR{&i(Mk=T#yaT3FdfjI@4C5M)IF1oi0;Dk3lczf7@_8%56zQ%d7+JSI!aCl8Ah0wrWWJ z#%!P5>||Nt?UiHwnaF+vcHVXbej^uDv9qdS)2B_AL??la6#eCZ;r!u#M{dL%M8^BZ zY}Uv!c_vg+h?U}D5cva$!k$8s#X{EBR02puP~6RkYw&FFN%hK*@kFTD{!~Mf-Fo!B zs(F-mT{DRXNr&OAOHROggyCu}?E!J_=QdzBIq>D|j$HJ9MykNjG-#mqbuQlA1ppSF zejBnizzY4V)YAD)B8mg$%~y=8YfuIqtrnOC`DtqXo3l4?2*?B1-#VfEvUTfPgt zzsz3`K#YUsYA!Z9Z|J|`fG4!;tABtA{K@+%{;nn?gNt0v=gkb`b5c;3Zn|PKE1Q3} zWI}0oa>Qla+A?KkgRV}y`{oeH33!c`TXHRs60+@Kq@lNO0zRb;{0W{VpOyGWaptX}M zKmc?U#_!gv5-MJr1aC1Y4N13--6xmjtN@17HtX?VLaq0Vl^Zr|wm&8al>)tVQO^RxWbM8su#v?Y>312H;;-OumS~ z0ARK~eRK`67bNOQkUX8n{8^o(AZ#lKGihP~K%QIak;B)7I#3bpWtm3#&rw6r|4Z z*QW!I^rDR_a#yM>FY4LAVS?R1wI+ZXoVA+4Ne-&2Ac7mwF7YlBr zA4VGMBYiEBKZC)N2|Q^mq1qn@EG59x7UCt*Hf?uONNLRGL@5C*F(!AdZmV^`LK zad7410HE5>bIgFnf;@1TDoOG!SqCh34SBG_4iErVK*N6Kh}yqqLXi8{+9QJ0x=$zn z_2VcVNm#Tn>*McFN1aDz)y{rJ0~z%gYgF?bzJ(yVr1mPquowEiXV8`%KRBxy1Z*;d zqXyAX=3s>ViA0S;Mz%2fqY&G-DJL?bOabl<$gOb{kno9@yRZT=NKJmE_C6}cZXEJFj3h1S-P!&vSRnS^V=bG{mG;QYH_Kb z+=TsJl*8J)f&5Eb8U7)4+MeLkaHdrZgBDKYsyEA(Ag~w}?DgN()H0Tm;oTnH&=8sK zHw-I2K6v`Kv$gpYz>}R)?Cvx!Y7i)5TAqoo%fPe5f`eA&IpO$-GDM*^*nN>V%_J3C-BC4cc0f=+!MZmNFh|qGMBa%3T2NXe2 z08Nl`zrCAq==|`n0v~Q*#}9j5QW&tBXg7@=Xs85%Bp2<((@-rKjEAAb0R*P-%~X&H z0wLq_yp=8ivx82I8E-79^&%%mzGTSsD*Mo(Djb9)qW2@G$NIX*7yB>WjN-(k%F>*1j~3gB?@y;T`=%u3-0HG2;n z>n1bYmL{1Y%yk>;dKN?{Ri6oo$%8=NK818Z2sCr-eDexK`R7T#%3Htu#y3CU>)ftQ z&A8eDNQmu9f;`btXeIDBkfhQ~4U^S2i>6W$p1Gcl?@27YV4$cwHnKammO#&ILQPf1J4s2wH zhy;UGT<_zH^_iBY0}z1g_LR)?I`avS0?l80J?Djd|Xgxr|jGBiC z3%-K2qo=_8%j4-6*P0PJJv~rbtKomK5rmn|l^q`7%b$q5muCtA-!s!e`rC;JExY(< z>td*}?LQYTq1BbnATm!nWKFy7LD&O1PI-?OhV+?j}N9pC%R)QbfN&%lEL| zIV3Gjn5}{)X#1D{lI$0)ls7jUT;nV}9v;k-^1UZr62P5S%B)BUMD*E}N21k%O08^X zREyOicB)U_3t4AuQv{0NG)v(zBglC^1JCDTmbqyi0bFbUe@YQZ!L^227!ViACd)H2Q|uH|xKe zN|&p0kBG_R1t;0I+Xw;QIQ9L`hLV%A?z5wlxG>g@%H z#A852pz(GAS1Iz7`nwfuaiNR+^G9)4bDfoefgaHJLiaM(4^G!&xyJX|lx&0Kj%O~) zbbcSNz!9hk{7d4ir_5o<=e#~zF!|Q*m?T?W8QoT|S)QozYn}sSy8S6j8mk2xzBXaJ zDQ=%}8M@5l>q!2m6bfYl&0#RlxwpwF6;{xm3ct6H$N0&0(eLG+?r?frz$UcnWh8fLJ zM?d399n#N)#ms!4bJc>RLyI$Xy-cqom|0RD{v!@xxukb>OzRrxExHkHT`v)McUtNX zy4$qVGMva9eiHeIrx$A41$n({P#fmpqDJ za(JRq5*P2N#JbhHIAtF3nyXS4JJHCm^(!jIPLB3u8?K$=o@VD)1*$9O7qT5op5X-J zr8oSLgx(P>sl4}NqgN>^m_oga7O2;smMV_`9Lvj=dgKY*EpjFtS^h@+%6w{4pXKJq z^3R2YQ>0?*b+gUML(nw7x!Z9m>wFP#tyiJoQhqr)_JGSVQ#J))wyg#-&*Ho1vXEwghM-GPh6hrtQ<)G3ig#YD~}2-1-#0oaJb-qaapNSvw-L zX*V@0z;SwK%R*Jtn(h0rmY&p9Xl|&JgHk8??p-uAhKnHNr6O>DkC|ZmiBDt3j8IQCQ7>70+Vu*V>vL(LSzz z_$&u*wIvLeW(bl6BGt4Oz2!NlDy#f739ISSyi zR67g_+mPF`kcs7>jTMjw%1$SbaTd5s=TR!gnU-13b^R~;thGq&W^knQ_@0wBKyA;l z3#OkS3=LrUx;&gu7t^ds>0DGX<{=UO`9fAJaGq)2Fhe4yuO7>&uxAJ5)gg+p!PBwv zL3~BkdkKYg&T>@`U&w3>EN-fwsMIwRVMqeQ93ngN%w=ESROogQ)8`??jgvN)A(kZ5 z$-j*d=w!7w9}z1UAi^H@j7L{zaYn7i9mi9l8cEsFbV8e?CVx$hJdPL@aNE#`I$f`r zABnyv*-gq*B(|M4axb(|pyV(DYv-~VHOke$Yr!IIv@*v*7p|IZ^8=+=9TwIg7V5;8 z=ABF(HEO6vRAs}Cr+ESP@p|ubWu?#Vk%tV`WHljPC$4*LrYvIWflsJf>PwDsxt{a7 zId(;@>Ai>gy>NX*mJ1-75Gr}iq0!6_A6Cn65Y7DI@E^3Pg4Wm8-Ox#vI{8;s2Czr= zvl7@;f?t(Ic%L21ZOy!GxgkUsEu@upzEB0hXSq3ss6Sk1Wx!52GMWs@(Wr8bH8Tkt z=KK9m`)+%mv+X;`mL$x-U7$CmdJFn&thibzD7HZwuWc(`xveIaQ`*^C8=~wBfd^GSA z^iNdk)18v0&+GL}$TG1)?al`t&SHz614QZw>X5`$77~ND%A!U)RH&kZG*I2{hT1fNw!sZc_2Zmm(xNTC{LE1*Q%zu z>!0w{cICc(yn?T+&G|D6^d6E#wPpZmQtN|2*vO5-cHnK>An_ z0u{3*w&VFUfS0v$9t7~TSWU&&w=~lf|DywglTN{wGzgt{Lt1nP%i$;UYw^)Bdt zOf1u4Ej2<5mP?C;k=W3J-W@fTz8-?*Ac{i?|&{PA5ic@6TVbV;1d#bKc;%sFAU4ktN zTn@I`Qr{xtcm$8TW2_shNMw-%L;VwOO%_^vYrqI&zXh~b$%<~^k&38-Q!j8n_16r~ zT6v$(5~r6QQlOwOS8|BAvB##74DE5_x*?0hp$n-=_v(yhOEnx!9|gKpkvmAM69?j$5K9xrh~P@=Y6Qy(~whWDb&P2H?UZ zQ|=MCdOZdT<@o_Qqqv3xt+(UgLxP$Rlaepa#YI-i|2^-c&E5Cz+m4S2ago7t9h1da z=BIyeMG@F-yuQphO`CizPQqUdZo-*)<b{rHAv&Ch~YrK>Ngd zvJ6zxwOD;<-Lv^cJKE3sR;>Zo@r(C_lpHWWb88S^DxU?Ad=5F=wL?f+56Sr(nm6M~ z>w8nRhC9<`eVjpEpXGgv;VP)1*$H*I>)=HX8}Ogt zLU<*6ImU7j3mC7{L_-pV^VAmVp9 zo#bC_gDF$9_)S&UVAzeZ68Q*;b zVaULj3ragPanvY6lnY*qOO947Jyl@eAf`$m4^yU(YcE-FtCIinltG%9pJT5XAPjn$LLl~Q)(-ZP+ z04mm_04stxu9r5K?q`8=_8Mj9&WF&g!-$4~`dE7b9%fd~g_{F{*9UqCL*3_s;uf4U8-cq5)wmn6nzwor&~9;? z5yRwBs*A)y!8QPKRl&KPrb*>id_WPq*)Q4IyRfMcXlz`{m>f|Aw(QhzP~4(cH&2h+ z(f`5ebtin4Z}jFIsuES#TRy&|g1_0=Ls~vYi+flq%un0^M*`~_EDZlc6rB9BVS+bM zPy!rz<>N)%dLQ$JJ(;%r;9Ua6GIg=+*Pz!xR+?d>mCR#wnb9_J(K*XIWv1Nr0KI;H z?h6+=z%NJ}Giwxt@~jahfrg8%7wR=Qopp`1`VD`6nSRi~Sn>>0b|Xt)R44yRp4gR3 z?5Ubieg4%L5MH}zvANKC;+Jro56$y%#a96r7(hJp?<;O9n8ab)+#+C%c+xn#k?pFh z-3&qhAa7jpO1fWEQV7!%?F_Pij{&O`y^W#pNq|XfR}3vM@b&*WVZQf#E*uWfTm!S|ybtZ3TFd!2z6cP0%D<5axIt=xv<#O3$4jv6i?&;pH~<4rfyxB)e@G=j zlyckG;%MwJ_NiG~1;Ym`3qY#wMw=_I#MG+FERPUan%9YXb1Xg{7l*R_lyXDeZu)&< zGfC*^`ww!D*L#;vvPOLg0ZvPWH~zd1m~#{J=c9ap%gee8uV`_pC~AEsQbY1Wd$U^D z@~IoJ(dqlideB*iody`=!n1A?OeH{}$7&6c z?r9!_+t2&JCiQZ`qBv$qHe)e{w-jdYM)(N+JY<1Uti>} z$Ka|6`~*X1GM@$DHXz?hn|ipBs6b(_kyH|Z8o=>MVdKW;#_#8m?pM$l4`lksLo;q| zMrjFGFc9tF?mVDDh3_~*Qb|R_{lfaG#DDcCLYCO>M}AS|jU7G|X;r0Lb&Wep)}e0^ z;LzB;?a-GpGsdNJ>8muxr1#FXPZ!6B4V7hiZwtlgyy812SQ0f4Q0nH|+cn-UxlVpj$yJsaPW*4XO?%k?8o^nAg+S5?00zz#H42g}{ZTe( zeK;eYtM6Vyd!$@9`KV_Z4*%yjI4X5LBxCXZ>(8%|O=N06)2QLag*?}auSy;Q*b;Y9 z3;VxL`4JSC2UYOhclyZiDdR4Q)Wu!%x55gIs`6nG(Din2#LI=%rDkled6AsizG=ii zp;(cTUeE;EfBwo*ys%efoy@w=2EFg`X0#L$qBSHsG{xgAx<_rdb1KMXi%{E8G`6V{ zWC{Na9CR~jVw)S%t6RFuMK!9ekCK?SEHfk!zesC6smQF9ku`CyK@O$*=J2|xpMc?L z2@$NPrw(33tC5VuHI&2YjP*#Kn(KSa@D8unD!jf&k!iXv?cXNOa zBf*6535CE%57>FsQ3aK>in zq*<8laAbO0Z1!7+wr>#JY-sKB*;gD0RKNRS%{+^m=}DSzi+)f%p|FtHfBn;d33S~8 zgb7Z~SO4Q@1H%MB+UWU8HC0s>)!78U!+O~d|3LhAf0n5_b}Jl*axup=El>WEt@rk|8Rnp&;@RQNzbq^3m9#Io$$a%Yfm0nv`4Vl63z*vW7v zWI$N90Y4AF=ULCpV1nqk1K>Pbph_kPH3y1HFG`T|0;9B%j`u0tMNrHP+2Opj4%C^P zEEZ_-ynAZf!O5AGc>u(bRd%#w1pKg9>wlYOw&sIWZCj6vg#pB4IX<{|sZ*=1J?7+t z;kI+ZQ_fiPdrpj*9y4wdV_7`05i*c1k@F!MRc1cX8nGdB%Y=6G5+bp#?=HO2&iqEf z+qSCaT8QKcgu|5Kjv<2(w1C9jvB?|6A0LmDu^cQ8i_Rr=GYKP+l0$=IYlGS8`CttO zISLj3BJ7{SvXvW0Vg0aiJ$6$($t^i7nhYF7?`Ye9o3W@OBe=>nkL~tIJ`R;xJV&aH znaxf){u#;1`&mm1z@)>lM3~qm!~W^EFTXbKe&mlnPN#aGg%)4HQK+%o&S4clI<|XA zCQM7An#{FOryGu6(5!lLojld%JPUh?X$OVy5cT5FU$jyiZ#<+q{(%oDCayDGNPFl! zFrzP?slRp-SxY(!pBOU^{tum*Dol^BvWDd{?6s?h`f~w7H5($rZ0ghI|TJUjqEki^VwtJM&N$k13HVd1kOxUrgLpA?T+U<2fW2CB#;uK?M0-q z)mmh`c*-T-y0o-4QCM0wg{#`ZEWu%d`kIWV{M;d3rAovwWu(xr!GRA1I+9HF3#9aM zxw@GUY^bSz7_$X^oLG0?O|7`ErWw^HaMq$Km@lpJX>`uW=&peMHIiNq%ofp;s99ju zaJzOyl9JzE?oUAIxQj=!O|I;Q2~L#=%Vr=&s|(PpiZyjGhsRA=Cp}?0Lgavvt6Ef3 zx>4u5{zskZ#>Mw`0jJqM)JQ7u+7}z04X#)Bv9{VS#j50GW5KNg47(!Hk|Mx)5FETV0zSNv=2eJSdiG|JBW{#Zo?#)j8!HbRi((mx?Bnh zGO3xd<;JZaDA8NWB}n2p$s?%_)=BFdb_3_W;6Vp1l@89NaIxTuJ?h3KEw!b5`)?W2 zTE*y+`7Nea7m`|44$ui6z{6T97qgQTuZKnKgWnioH?{{I+Ud_g>W{LKpLA-r?rR$ORWFIC4M`NdD+o}%1 zAw&c(`8O>mbyE*1IrQ9r&5t|ZV_i{VySb~d-WDS>6O^|kIcW^#d zNTJ*bKf_|$Ru$FHz|JN~Zb#Zi8TX`UA56E#bG5leG@{VC-!NQpgPp z23IBv?+Ddg&mY;#qs!2mhFDE+h_}s(qGdA+zx?Ck;e+q@FEom_ff0)uF~91J>VS8* zC%ooX7TiSNZ%gpCy^>gDQVtYi@@#4;0bL1TM4@OI+2G$3+$~^CoAAY6KhD^209tSq)q$l_u zhSu~Dptyf#)j_v4&g=CcJ-d-YYPCA*o{t;{DIIZT$~0g&(%avVPuV^fu)^YMljDUk z__VcgP4RcUxc0sGoWn`%&C7N9CdBPdi5`8%1wjQavvX>E@ixZ)_iZ#J%JWuG$`a3F zoh#Iat0n|Cn>U*D+Y1j?%!h42MJpnaJ#SZT16%& z%TM6Krhrf{e3ZIlv?gIsC<##!w)4X5Hu4}>gq*$1JfpMBFp!oE5L;tbEr>TDPn=;V9`a z$Ft9v;ys05?TER6EQtp6O=NFEvuFWFUUt|ko^OCUzrAR`zQofSTJ**4UssbOr8)Ix zQAN|FH#Dozi?b|On`&)MC#vU*#k0Udb(fSRhgU_Rt7M0?#ds!K=^^+b!OUU#AIkby z+Y*d?6?@;9ASKP`e-MBaxQ>$3UU7>1#&vMix;byx^pN+7DYOz4u#_|!L+At?(0bDO zul#Rldu~FoVPM_VFXbw>5jLpPXE=)R_}5t3+=M?&Y+q;0W9H!QQ8Q2xCF>1Ur7l;y zckIro^KWFvWSp+Wn;~EnG^~`Kax_u4NPcejTe;#dhWD2=MH$Vd$y=weh{IgPNQs^I z>$%@g#Iq)pp~27PB^OEsvr;x3vam0Xu9*K(q;$@h+^F$ifeb8=(PbwY}m$k4lSbb~Af$-{$&y z?K=ofbc1*iE69x2oVyjQ_pF(C>Dfs%h@Qr7RpPOZM9%bgDzM`cGe1Zwyu_M*35WG$ za1WB^_4ojTKgs~mRfN>GE3^0wr%!{&)$ATcmh=n-o$FJGlN0%Xh%rZ^fyfLk|D2R` zt&xGFttdI5n+ItPB2b%ydOht@-Z07pRQfY>@(S={5xx`UBlPFNzGCj|JUgHmG)!<^ z0-}_Ia+|V>=_8T;zk&L4k*M;?kt2`bXY@{Rg}z_4y0}$60w?Hs<$#|}Fu@w5*U;t6 zZ8Zc$l4(XVGsWE4I){Rk)0BnMHWIV0U3Csf05J}J2+mYrl$&o#2HZD4x(h(N1j#17 zpUuhOO(0-?sy0*X*EReK{;~rhTL%@xW5JPVY9N{1e~RhnNxnn&o?V3gSJrpDKd@Z* z0W%3I4-Mmiwgsq2!dYJiJsZGXWu8>>Id{WoN{MSlH;<==Z$8*f;S{S0Rg{_OftfY< z$r#%Wq#E2caQ$}_(V?oirj$Z)`$lM~3X=*)tC&QrcbJ}(iTi3lfh5Z-P@r-m&PjEu za0H5k4$X*Gj|ReUI>hcL5pi9bUj(w~kuIcy(%^9iEWxjm_j4KVHb z)B(^f6bzS!PP6UcLwD(pILqpNIhGrFV5K#e=2PI#b9Id1*kG9m(_tSc}HKqkc zH@^nA)Yd-k`s5kOf?G&52S1l73d4>q2mVK={F_c4-e62mdkjFfkks^llWIB#({QW~ z7b`o>UEt%!TWRf(dRyKLr2aL;?f)zdg*DvyHFY9oWs3~`E(3$s@$cn%4t_$MUgL^w zj4K(MGRFTiq&Q+-M0C)OB%0KW5cEn-`r#LKtbkjqPrqhdR}2du)fyf$8Y_B2kWnC? zHQJpQt((p^gCr+F@o^0z1sF*WJ)v%r(}?jOr8%gD3viOK;nP=wSdWRwQ>T(Ct|?^; zQ*HlH=(_W9y^BNL-tli`evhG;{xLkB%MJd1nmtJ1C;k3X1y{^gakl*$P|X<%NI|!5 z@FxL29_tg$LRgTojc=zWH_B1A?|y9_d*m2IH2oRH9g5J5%9|owY*F1VZh4I9G`;{= z0aZeS$eyM46SGIo8coCT-QiVv1;^jX^`3{9qjl zY}!&tvkE{4df{`Rd)=9zK@fAG2&pVAKcAI@- zja6bO#}KBGl-4W;1OV0 zyTD6LHr0jnEu8;Gl_{+`zGQb+?n%q`wyWwTN=G5x+~?I&QTG&C>n@=bE_@!2SCaGc zsa%*74#v}+mFkJj>TTP1`w?jRWK-L~7n;{;&^L!JQ9)!MPD<3wyJZh-cn+9lvE8G3 zut8_{sG|A=k$DGrjL>-(X4SN{|7&49|9}Cqlw3VJe+=PlSS=B3$neRl^$lAOo1rL; zLcTgN965{ZG591fB%}<`Jf-?VR+Gfwz(!U!L{d!+wiHuW zknlsvMkN@v3Mp(Btw^6cU%G-B2E`*~V2EE6o!Q3DAj-;gE|kGssH+8^w@< z16rQ>h{7f_wdegCKjcC#*x4nikT^OfW>X6bJjR@PiW z*_`{UvKr%aV-lHwRr=WP=HktpDTKTlGT4DUXW;-LqNRtvPrGec_-3;LmUuETz_tIr+w-oi4NHXu;(sX0 zbO(kxwNs+&F4FL3G)$QGYiaZTO}ra1w>)2S#-6^5+6wgxulwwPl2Phyotr$dVrBfd z%KIyWiIFb9Q=4+CH<6)th=siFus#oC)to^AlzUFcRxlScNVusoClogkHOh@%tD08{ z_zJTow_>%rHAAw9?Plb+74x&!OO1Nedz67E%pMr!FY(T_W`6oc>16(pJf7$m4q;^0 z_jOOS9{zx1Ak3{vXE@-p>Urz!?-p~1*q|XZJ>C$f)(wvQi)G7hJoXE6lJ!htAPZb? z3a1;>Hl$k49{ZCZ?@MA<9l=OnS`|!&q={Q5?dtT4Zv5hm#@n7THzMT8xx2lVzv5}H z@~yZnR#@vuVA)*%F{Iwu>8fFrqg%z@F2!HIdn*As=gB%i(tJ)IxsHtjcCP0BKn~JZ z@vOj#Y+FV&@2x`#lM%=Lp(bMvy*^83iQ)K8x>xTt^959*l)V9Yh;tT70;yno=FEfa zVW-?Y#x_-P2=Jy8bG+Hgr9&NnPpS!goeahosv?OL*u~FmLM~~LW6%eUAO|YYOSt#s}pipgUng@iI_?iZUlgV)H$jN6= zKYVb1E|ak#ohq+2 zuB8xLa(5(MFVuj}1_K3E02=akfs=yP?N+)#6)^lF7n74p#st*mD#ZZ(EC7OKl2xKv z7?$XhG9mktY(GE7S(1JC;@+S69V~Ng06nr4xGt$31mpj^`!uZ*lL`1YIrC}~6*&C2 zTQ{~W>bSE*3{CW=GfIG*Gs#WwX%x-FgipmnM{kAp2eTI6uNtZJg|Z`i>qjtnsZ{Gl z%J6avok|IZFL$8rp@}M1PKY=`^A1}-J8`*~TiGUg)Lr=oFtf6`=#dXgXF4~Ea4389s+eOeQWolEF@}zKRXj2~p5bT(itXAfEU`40pmCwW-c{SENjvTtPl=z5L+4;Jl}=;V ze*~Tv+KuL~!S)&$rU6Sg*gt=(ye5#rn=soOaacR8okiu|6^rFIJUSQ*{mpG9Whh{) zsx5myi6;JUb!%otd-;y_2ebq{qZH!op6?Gkr$(t}8keb|>;;#B4P74u(X-JW3PRal zt2cV&J?AKKIdQc@351A%fR)5(!siX_ciFj{S zBEZtgXk(>zzkS4K_I?S9CX!}khN2gA{J}|L^&{tu*b~g0Z`Y|N-1+lMz`rzMUbV=5 z_5`pRA{Ft!s75O&TB(*2Mjhsv+RcAxxvvm{M#w65I933X}TnFdx zMo*ag$cJ0u1!&MQ(#~7T54>7^sf#0H&JFhK+j7Iu{bfyoD|u-P{>VgnNSE_SbM|Ck zClT>M+4>rVkwqYU6EmX1$V|V+V_Fe!Z}|}xEoZ=Yyj*Yg+q#)dsygkZQ;5l!qYHC1 zJ!w)`j@h65E2rvI>ZjIL`3WnBMk%VDZK;FG+t^}xUuWFeR~)g z*+U;zbWt;iEZqK9u0OFh7Z8^u9ZBKDy0;cwK}sE_{H#U>_ms=M5O$!YMAoM?D~NCX zNv`fT%0B)G=mzAw`C^pHn)DeH+h7Bh+1R|(LJyTxLFJZPJno=G)NgRVRcMl=H`*9f z7lBH2DWmn`6dgy+L`HmQ-J!HSVJG9&Y9D*zFeF5qq-Xdt*kxIzkVeqUnPi^w=lW`A^>iTK# zW7Zwabi!(Ko>qt)J}T|*tk_HovXZd^-9ugURKDf$|HI0aKn?)yg(iN&5C|sd124fc ztiZZztF%o{rWOlFrSA@Q&3t*kyP@VnLS46RuoGvzD+Z^|1!F)$rBIX`0aI%kz`+=| z0(zDA2>i+4{l1hL{hDoRZD$ap-E)OVOth(mu2$C0n7PC@n^-J?nm_L0r5QwYXJ3$s ziOwnz^0H`uagg1I`=a%$>(p^sQI9EEeluyglN6cwkT()JUO{=W5B-JT z@H|H>iaAK|*N7VWywyFSgL)dfqqi&{Jl|9CR%p_g$fOT_$0PlubZggZlaU!}SF>^{ z;|#qCb{MrJ=DFu647=KbZThEB^%eXPSq{a`;HFlg@alr0EY3eH1>N~lt`gC1ucKfk zqOh7bMK$7aDx6Fu!(!S&<6jKr=fdX@_ww9-29^rH0@0-^+f;r%gm0ksf8|+59*MdC z3c5|i!bECi%^Ig#6rDh|g@M1D)A4@*!V@1QqUqp^uCEa+{iqj18)_}}N!J)cUVDGT zJY^rwZp4#tk&^*J6pu|y`YKHyIScYRwt#f+Nek>wXWf9Bh6Z{28hY~aL-EvCeQu(v zs@p9pZxWKXw5|&&`qsD`Lp1WSw*&tN3ig*}4iD&RSULkI{*?aF<5+h*x&Wh0S2JMP z-}CjA)q~aqB0zT>Py|_BB<@{gj-;l+$Ici5ku$ybf**Dhm@3Ss%0iYb=cEg`*bWNtt@$Epof!K^1#_wgLd>yo=Y z*uN(o;A^HVkeOFKIk6uN&WXNJYbvJhLxYw7HaB+ciK@=$+aO!v1&9FInyP4-^bwsn z%X}JdWA?DLg-hrhJ*Vc!x`0!=3R-aQlv#(Z(gu}0g1bWUK3UHR2>6^(kPrCBb2(N)<>-WQ!9u(@^vt@G zy_6S8M_ou@Vszz+$u>g;t;(_w=QrdX;EBzUwb)Om!_{eREAW7z16K1Gwxb9nBvlzw z`zAgvSC&IRMc}c3d zRwiSpk33*QJind8=pIMO3zq@krx^W zm}4!wP&H-!$O4>=l|e9;u`Nb@s(NmEuyWnS?#_uy@r_ z--)bdgGot+C<595LV&WM3Wn*ZSEze%ZQL;zPr?rQ*p*5e-{8ocbsg?B>iqbunUFy0 zJkJa(nZOqmy#BfCko@cccR;mJshYMNjh9I54hEEbt?jibX5BwG=I*+skX>K(PbF)_ zFf4&YAe+_pkdJTP?&2(c&VSH%H$!h(iv+AmE`(vr4gj*QZ-~$8F#e&{6N`qpp{4aa?*n7O+@_YV026q^>2rmu2hJ!SXP%sFyPk<{>#%>hM^cc;1r4Z2NJ4s4* z0+M(?+1R_ms&L41JFpNJ?UqnTmhZ-sc%_E9Kf(2{hMEeMipfgEE1Qk1K&cQG&s*xQ zHFx07^)N2qk-?L*1@$U`T+>J{Dw&4YvN-FFW|%me*YTxvZec(Nt&W6|&fUK26Ra#H zE=XhxI96_O=l~O@nZlXMhA?~EW8#dM%$vmU$qyP{kjF0~kx#(Td_NZ~`qqqJ?-!5QxMt_g3fqnfWAMUTqnWAl272z&tor&CdH($eqoMg%?mOx3ZUzY<@~nT zN**v*0;roPDsr3XrXI1RPNvoDx12ibBKRKF%W2U+`$XZZUar(?nBp*WJ8M2e%7VE} zn6*#zK2z*ietjN@zOkBX`?6h4tN(xwfsnROa8*tC{q6+5Xg55u7Dl^xYpoRr5BfDk zkeI^Pb%l#j2tdvY2a$|gIWAKhq#43sCICV=2I~wkdC%h{8{Mio{UG;Sa4W-e03 z8#lW&ONG8sd^4;!?wTndW-MLwZnjYj?Rv65tp?o$7LlI@ltTow)$C&_e`S4@1Gw)# zHV6OTDWlDO`dS7~0y3EopTPi$PJn?k(NxcpSsG03DN~me-f2h?=U9ZW z5|lP7|L6}-@Ks4(C_mw`k~rpp@&)1vziT4~^LqV^=f1`O&I;77RdxO&R~(wTE%vr; za4&Xq+xU^2IGdKYzgP6F`Nt8iq~5leuv}Go@;=eG&e3GY3`z^uN=d5O>ozGrO}G-1 z!i*7XIT}J9P$w{%^Y3F>mb!QJ_8s5oI?1c(MXcLGie&0TD|EerYM`^0SkCuL8mw{l z7+=?PMZFIWhS9I(uRqlAU+*acO!@Ez2+tHY$ z!=}bx!~18C7^Kmj(<;@zqu&+U37ea8SJk0Tl_l$+`4hBaNUIjgu>&sAlP8ziJ$mBI z6G!VoT3Sp0=HE4NE8l=~Px1wx-Kd%}<|9QMH9 z3A{GlkgnEG{4WhRs4z4W`41A_OTpcq4?>>M2*`z3yKJNdoZNf1vPDRD<>8DicNf5#qTvKo!kVM10@%wPW~Q!7~X9h-&Ro}#Y|wLEQtUR>MQ%zY5<4fSn03n zyJmC^z=6bsX-us_Uxq3Zd+Bo`!VB}d+nOS#rt_{tvUo+g-yj(~>v95s@XM_r$PwdC znPnw;FaAxBnfHDJ3+wTx@9i*%Pr2q*fQ{iIPt=g?I^c)H>!L9 z>VwR`Ygd^kGAYGum@c;=$X2AV(g9~3&-XO?3TBN|WS+uD1A*mzSXuQ*RY)sw`?ItsSl36pqmQxt^Mq7SAlSq|npU8X6p9*QZ-21HZWy29&H+k1nOQJX zW8pF@8eO^ZoE9B%e=A8d61!I_WVBkNonM>PYF*8e9{_M#VzYcCt|UuQeIHq7Lc@R$ z;{}tdn(emfWtS8B)Sx$_C)kOcvXQd*QjZ`Bk9IH^TK|snQtYFVbvSfOgM;d`!-o{&F=-AA5qiD>3In4x>6Er^*h99#pGL}E8S=S7 z5Txg;6zze!FVzkEcnE6xDNa1-{qznXa5H;l&iu>Nx1N+cDXof?*Sv1hX<=F^wwIyB zYQW4o5W{(Va6dR5mB1{0da70{q8UcT{2x=gX%B|+ug3|Te)^>R#;R3q0kb~Q(GgF) zuwjPlUr4FrI@i4Dp0$wiIvGf_;hHMUc`d6VhQ^qYTYCv@UC{^6MdGB)Zsl5Vn+w^N#-6L98$S}&E+sM+MPA$N za*rz0b*`nfy1<52g35NigKiEk8FH`H#<9Ir<~wu0PNQpF@S^zdJ}_9Ld!_u?*r&SJ zvtzQKXr9KIGHwENxe(BiuNC){EQ+u;9dXCB#Rtz}SCH^zh++wxH@m@SKVbsZZAEr) zk)<+e0qeXZ;9b%!I`Hr8E%-BFjh5BF#Tw)@w@wk14-g484W%>81mTY6TiJ>{(WOVS zLG34Ow~#s)%lkZgWs3u^4tA;{GM@ZE#6P3hB;JY*nLkQ6QsLqh=i!t)#Cu)<;7haT zZCcpW*RTru4!m&pn2IZTb+N&Jv))rApJMhld3-8%qIcTyahWXk@oFEX*NgT|2orGX zj6U?3=8eeW%77yNaICO4P`S9N;Plg4B0#guS-1%F!?c>AWPsDnlQ~b_4F$aTLHUmg z3lg-es~Pk(361khu&D<2E&X@2z>}s~ov?VKZrw2rt@W@}sr6*x+QOKC7O#;h~BWK?V#&6O7C|Pfw9aPXVYepa_V%YU^8|UWSL~|2E(8 z*|Mnnngpt_(CeMGltaO7>J(BID}MWCO;xf>&=nM$daE`9)~7O#Qx#;D$zP|%E2UwX z;JL>L;_V$TBXw7-&~abKcG(SzJXerajUEHTDY03Y=}B3q7SCouyd}%PaGgtl$!O)A zl2GfWJTR#8?ry^1Gt=%u=?Dyz`OY`e34fyq^kDMYmuDFUQ^6E+JFCCc;uA=F=wLpsxTM;s6mLy&NQ z)n1b?TVs`{J&#R9%rRB&Q(RI|PyJ)w!P+snMoqcR!Bj1=p)fTDR=VF}Eg1N}`MZ#* zBuW4M*`O_4TF+^jUoUJ%118_JIlo~y@Ocic6&FKNvud9aVBN3Hg zKHVr-bh3d9ZF6lzceO}Jk7=`TwJh;f92<)phHMe>L!HtJ(i5DWW!r25jD$86`7azD z5@2UjMVyxbsA~ZL_z3xcfo#E`DvmU+82tv6Yj3Hpj4yw=hX* ztgmLX_`W|PG!1-;@2Lsd1nxRNgV^)+%yb|@i*9RlhBkf{91CdAsb7D*n6_Z zQ8a+cnjX^pkKr#3Zf+|)_k%uOiGG#K{0_{%y{_EOT@VLxVzF6>C})X{qE<3DiE*&~ z(XhiZJ*QJP_&a^r8(j*dHj(r`;!eXVgecC$@PK@o49xx=Xb>sG97g;){dI%pY?Mi7 z@B-wmzn?{@62 z(ng6hadd|89}UMlr|=kL{zpYzo)H=@Tz_P;DHU$6tVJV8#Mt{6i|z*X)bJc74Iv7C zOK^P>ybm2BmrXM7b`GER+1K{z`nfVZe~LUbssXQN`5hbdZRNL;(rsf#ir>&2s&xc` zL4RIQj(5FWY@;WWPtb5+rAWWu@Kd$Wke#3x>Vm4i#+MzVL-y!5cM^8Ev+@! zYS80fN4$^1hyU!}B5FfIVmQ|O)&rv`han4@#HRXry*1em-=v8P>(#k=xwOKf=0If# z|J!i`oxkgWYpF`gghhP&i4(R*1q(C-P=7BC$1~^jYdr(*Uvrg^dZ)q}3c6mgJIBulY7qPGI z6%RwUZd9t+V(`!>y0z!<*t8tX$I+wp<;ru#okAH@q%q!hOr-_lKlW|USt)m%^25Tu zJF1n4)=RRU0nNz4qFE9)b6{{|u5YqEJ)hUVNpPH~&=PK$L2AWMZa6*4NnRWa&k#l8 z+&L?dxj;6h@rZ7vjX%TNNjL*mVzN_|&+IqY)|#%Jg^(|Eu_71N|BrfCytk3{HWh3! zQz-AHp)HrwB!tnNSJej0#W3{%j%UI9Z}rMl39-8C%r`7i^PKlD4HSg^SY{#&gL^3L zjUWX$CoHZB$>-j-$QQ)ozb>=h`=vK9^xpi_lXz%<`FPF9ZrDnJQx0j`ji>FM+d;lk zYeoqrTer-Sn7pAA{fYwnJKxPMY(yd`S$sesPuBcgv)5>X={-Vu5VH0Gw!WeA#SrDm znn2yL;Q;qxp!9Wub8%7Z$FvK}K66r{2Wy)wRb5`Q_ns=y_E7f3!+@^*eJ~AQ|0{Yn zjhm(OfI!ayW866XEbv`R7}!9u?l+5|OAPv>t_#MhW>sRpKQxn#JruUO01EYyL@CEC zLqhrHk%9WGP{K)dXYcAhHM#JBZ<*c%$oY+xOV?IO;?L%nA$~~F*BkRO$RC)K!>}@R-2);4$fl~|)5i2speccB$`EOtNFlI1 zdXwMini@Ke$uP9ME+^tfXdTWfclv*PoifUK1QG;772=kQbHTt0+?*u!<8DQTvTGWS z2;}`pr}B<$`p&mVCFTa3XtHUz$P4971@}$Znq%rNl_H~>_>34t(-PBPaO0)Mk{lSF zROtx{WLp|;pX>MDTVKhc_LxLal|CWEZS6kF_gMb)U#3jO7CLtDcjA9UCgHRhD}Y>k zIs_O)mU&^R)7lp7k z@{Yup-6KZ9pgI&vGwoP1P;EM077Xdi4D)z*D^BZWv>Z*c+o~=BpgO@4ypwlB4KKjX z9>qcKq>JXf&|k3C7xp@q=-?kt^Vwv;5Pls_se;7@nE^3P?as2$3R)WYteD;kk~HR! z596Hx6|%_5(;nO$aAc2TGGh{LLq0u9cB{S>P02!~9jZhUk@eU)Z^Vmz;6jy=6Hm%z z{Ncz2k&zCG=}!ERM8tT)>fZu+i0jyUUx}7=CcbaY@&`MG)5*l*(Yv(t9pJ`B8Tn)l z@!9*@nD!ahwXnEF2O1ufc9^&C#~9y4zb^4xB!qSEk!Pe&R}M`mJXab@EPR6^VWDB~ z)Ct^-`j$~yg!vw0k91toLl`7Ios1};FzIgb#q%CM>4s=~3<;AaK?oDEQ50Yu8L{33 z-GykQuAZB;oOEfdFe=P^EoZn~g}7Wd4Ko=-g*R{j_qDzplzQ@SXNe0Nl9F8fRsIar zN}Cv~m@dqa9a3YP8U!P0-T!!PNq;x7NWD$^5)dwuPLRuK_iP&^Yu;*FXaJ&0`rq*S zCesGiP?=6hva1o1@2|y-0HQ4n(?|~8|EvVBPjRyRt<6Rb;5^VZ{)gshp)l?-3A@-3 zMN&I1Fmax|Zw9?0Pv*kgiBHAOxvlX~cc7#Zi(&-wE{Een9yrD3dUvPIAVe?8{GIMzH(%WXpZI1aBcUp*??Qd+A zM`{b_1mTk2`ClqEE87kvkFZhpD|;;$krIg^bsoE@!%au9tK&DJp8sy%jP$j?qB<9F-LHE#pf> zZQwPstC_Vn-#=@93TDe)3Ty74B^}Kl1M)IO`bG5ie>8&#TF9LC^rT3o#6ouTPuy&s zSwOk|7_7iQ2!^jm`|I}u_i3lM0{7{e=;>(0j)l{yIzC}AUi-a zajf(5vJ)QzKB*M~_5Z3h!_9?_rziJD=q88)!ktI~=cgTkZ9c8W&We41_0rYX4D!O3 z{&0Y5#SD?qS8n!d{1jNz;ey`{rR6$iZEX8(egSi9x1wf}dHqhS5ZFx2Es_HWf_WZ) zR?(+XSmH0SNx&>|8!v&nga}20L=}YOg>AuW2fG9_RNV$U8ZKTID>nZ|0k-+(Ekr|B z(OijRbZJrSghW5rf>^x?6a(Ji=t|76Xyg`r++Tp(krEukdJ5AD#xoAYow7xC!1=VY zpP4W2M&ht2ay#C)aS?>6JJ}>Q@teEf7%bR0Uf@IoN*#EYWZSV|z6`};BI%MEg5G(t z3KF0KP4iNB2^+vq=>n2B`dQjF+u_`}&^G;9Uq8D6s@(9=!fG1F40{kvgN|Qcbzo)0% zj`X@5cROl7Cjk7gVMso{jh_r(+Q9j7y@s5mqTb4}3_*dZz++R?JxI1w#sh8i1x{m? z0*CC72bK0||KzYPVIh;|4?ZdM-u!uw)RCbiIqOpVCh%f~@kCCR*!nh5+q3v0{CzM3 z0+X2MO+b?}7kaQKD)!M%j<&BLFCAnD)bH!YUe25zu7j_susE_0DNc)XsMdQC$eXo! zpfj6)abc!rz!mev)RxP;G+XErt_Hxp&gA+IwSC{$NX zFsKfXz0)jjY$D$L3T9rt3qz?LL(_y|Es#YIX0nnSF=d$6&x5$RsRiC?uV_?%$@(Q$ zcPVTGVR6DgX$lVN2xH62nCnvTh1KPaGUTex^*v@iLYB9 zlWt@4VmemXj_s~Oj&fIFI)s(5%kt?mVV#K;!K16|j;J1+E>i0X<0!mBr`1RHLA343YM`kV#0qU+>C*J zE-9tV*^t7Z^laW!(62y%MKV8F(T1`j$Q{t9WSk57IQ$!j5UJ3hixx6BGEuZJ#1gGi z*n;Fjc7kGuajoMq!Tb~Ok`N_jg(wBcD);duMUzra3SLW>cv2Wf4Hyc<|A%E@P1U_) zJo*}XJH3CgOmQWRS;C*WRR#9lli%wLUVGrtwB5QI5h(HrWAX^;LS6457ggq^11Pc{ z-9m8LqY7eDr&ms5B0Jb}q|8i9;zHhmn3B3*cx_EYA2fw=QuYPeka8r)4c<~2#p0w< z3Tw9Ke!M>0^1ARGm;m2BwxkZK8Qai^Q}8D5DH4;NS`l*gr|c;gd9cyTBK!ag#<0>F zKUS;%8-%Nah-=Y5u-R2U;JF^~dqC*9@KG6Cu>y4&X2K+GQ8`~P-FR!c{^)$$tkQI{ z5ZD6YF+M^XQ1buf}8CFY0%FT5Z@oXIbAN1NO_JbD<!J#W%f-w3i z8m16~&J=h@H3dMX6%QE?gLlH)q#;<<^=w3i@$oXzRVvpx`X_;^7n4@L`vy!ptUzBm z|By|on8?^^6CO^6O{I_@GgGS05`LkqJESt4r-X;WoIZn|Q;ZGf43lOpvHY1Bw+uad z4jES{VbASD5oeza&OLp3QeKbA=0ibwB*;sJOq7%-z0m|Es=N{PF5(@nIQ^39uN^aV z-N-Wg(_0r7`~kqJzah#VXHwgF`l`49OH$0r@d_?MyQzv;22!<#A@&9-$%_8##Gp-r zq_eysC3Do+tOG+2prXU{??x&QbYJ|-?6&7{r*?ykre1*s-{gQIWJo>*Ww2L3q z2n<)HnTjiM39K9&A%r8fo)w%1(#X;r5c*w!IghPce7T3fD| zL;SS8wI4(yefFUary}M)jhI9n0=9A0${G8wLNLw=3$sM7wUgr>GZiaIf9>(%{(7VV9sIbRUM(6G$mOOu=Jt0<5k^Y@O>-a{7cvjA zR`G)ZZ1{h4L;~=5IjH3+CG^wHhaC*_n76#GwWab}WxcwC2IOvA!W|lOgvBs9OZaE# z($p(iYR;v)H>z0vT>ZdieU2fV)1__cm7e}rS?;~!4l64OU2d#k@%XCph}e!X(j$ea zykB0PL;BnaJ?=d>)tq2Rh2HwYMFAmXld zuzLz&lI;%Bg!*^3iG|L?f_$`YkIVvSY!p0sZ?AM+{?vrXO|#J4(9V@q!SpZ#7qy^a zi_G#V-(|%x)h*-7hr)A2l24cT_F#a;^ry$ii=^2}0z6#PpZQPVRhQy>EjV-E7$}hF zxcw;K<8H%{tv^5(w&E-U-VR??d}itA*5Xs#T2}@MA)&mp7+GUIY!H%Br=%@)41-Up zV3BTtRq~YtI||uJX0F)ui2PEAx9pm+_0@$lH=FYPS!KLIxZEtQomU>MhvXb9^Djy% z*U`9LxOC!KN_0Xt9g)XcV_ZO?ipM_VgF)J3_FKD}CJSO&Z7hfMddBwREf{=uZ)=RZ0FbW&zgKv5aq-_lzdHo z91c|NVqYBDlsx?rPRRaTAFl1~<~d5fsMCU$vHh*|(d2)%Ene}DPLb|e3Ag;&6n}9- zoZg4!9YVQ}#iMn=`LF&~k=0hiaxkRL;f0O~+Ym6@D7@i=-BC<~F@M^AcR?C;lh3pF z?8F*PGI74~X70|*85;2b%svQLNaUHGH4EFhLYwC@9aZ=A1!g2u%TYa)#1MZ&j~OS4 zo%n^l!BiU(^&8dGkh*{Ze+~&E*iG{GbQtpcIK!w~@OoILP31wgxH7bbe&ecwJ&%;q zc2_RsAN77mij&oJ3$@GF$+$vZ14wC)6Jc0xvlG;q8XvnBnrjeby7~Gu1t78YqxyU~ zYPJ56C1ahEf0kaTLzf38d7*#L)TfDNAK-aJlL^<4b>)T}>@kW3UYl!<>EJeVEs5 zse~#PiDAp`RzjNtM{~QMUVxtx&bY01Ftjec+=W{*Sh3)K*JT#oX8%`G=dbKQ9kx}n z-HuowU9fvG$&P%kTClcJ5s#+VHd$sEAFY*goiHTQ zYiu2ihqQnFf^}mH>2jT$w_z*;T25m4CLD_r<7~F#kf?NTb!SO{CEdt^I7%gb-j|Yt z5J9_x#hfpc;`q0n!QH7;C5#i;9eNxhS2*JB3T)xAQQfnHs zPc#rxS%woPOuXmn?=fY$$W`kDSjEro64#Ls@UCg$|F@rs8j`fAH4>36rJnYPA<4jzhn0Y zPV^pSTOv`YaAQa&6xBX z)1IftoCp(@Ec%tY^o@gg>TBY#5pCYLduB>RTazGbcwp&kiDn!Llz92SR3kNtcm+_2 zrj!{;qzk_a(&Tg5H36gE)E-!{?epsM=C5PzIE#20Gk5`Ek;LQ)Hqaf ziD(WHDm)3VFE**V*BJ)+F~~w7KceO%QZnt?^U?VzpSAoi2a8{3*$} zO{uJnjo+fzR*t#r+v1YzzBW=t;l+dLxWVS?D6kg|_~&ocz;ydZ9-C*Gp_vtM)q9C+{q#HJ{6Enh!qU!ni&it9~)nD?WPO2Vp>p6G26*w0yst&j~R; zq&ML)a+(9smRuZ;A;aHgo(C{Xy7cbzD<0+zu7ECvW{P@;U}B`=bP}-s$km2e(#6f= zSJM81+$+bi1EIB1dHA;xFa4%fhHjzL=Ev|`LUaH&oMHy5icC`&{2e%St=Dl~GP5Hg z&Sui)6w{~fgj^CFPLh@*cAr(~7aNoiqJ(+iZke-zYE9_)?;GVQn7$IDgd{?lLB}>( z2nPC3yqUUh@FH3(SCvcP;cMP%Gk^xI+#N^~(X~bPUj3l}##VNpQq2_Fse~MjsTa2@ z@hWEDoz}J5;#p6M#{InWM9Cy+;>=0M+2qPRlu$N-)=OLG6_@&TH+tkS=)4uAEsdkS zUAEjSempqP%kp%U-23s)X5U{`vM?J{&iDm%#Z?u&Fg!CyWna?N@^UnDUh%z5qpz@Z zDg2Ckrj(LhG{diG3(VzQS)l)4t+=kr)_JtxbYXRGT$m_w{kmEJdaF{bxQo6a0l!aF1oQ|*c)_W`r-8O zBW|No7PH`cM@^sYK_X#}e7@LIch!4t%yDtvxBcg45rK4$!v3ht5gd*YARBOe5RUPh zc+-se9Op0Y7?hugeSszpas4j}Re418hy0Mj23@W_ zWh67VY=JSzn&=eb?+YAZ*eZsb4ts}{-U$J-Ejx;+&w3IQ=y%1$8|{>&DZxS#lf<6Q zh~ht}-j#R_gY64el`t>e9b7)R`2+D`Xw7-?(Z%-ww3~}GS}d{2q*H;i3-$78Ki2oI z%>()qpVPuUTe-|ley5C;h!ugWk1EL;WYr|ebG!n&p5#NX{{lr}%|errkKcKADyG2g zR%<`kkg;rl z)m?W@dN(it5$C1^zNUCt)?pJR@_pMWv8v8|U*#ePgne9ko<`N~1#&Zd!P{*0w(L1m z9hvZag57V$VxO!I{B8tvgj;yAW1ls>0qzb`+R=gLe<>$Yy25tU3VvN+T%<B`!V`e!d3aLmx{#Z}QC$OsU4OX4s%kH0{WOpJrTXYO2$~mNSdC^xE#$E-&Rlh4 z1tWs4xAaESk~HN-YHPB^=jq7&{ibp}>_s=@SWt00y9MuBO-bMbk@!fL?CK!&ZY*8jjc{W}}tXcNa1mDQ@^(oO3 z0Ksr{Ij~_&$7E1rQwL`^@>WEhM)P3>jxyWE%j1C1*l14q$- zt)g4~s5L(dCgm;Q?XC}X*IXT5odKrBFH3jx6!05+0D0O-6y3nS%|msn+n5DST+#C2 z-k46N*blzgp%ijBi^&H;R^Sgr1gJ9W2#85$n5dMFJbCsovJzO3COTM7(ux;W)OsiU z==H-c;l6~Dq-N78g4CZU`cc_FqC4^IX7fl)qsdk(qh@eUyV!nW)e}5~xEKbmER@@xTZximHhGyEQ^{=7n@_oG9Pg||hpi?U z^t|hwMLxeIZI+fgI2i1ZhBA9bPD~7;a#SUhZaQ#@8=o_cdr-9Atc3e{U)fVeJ6S=pot4gV{b<(=ZKpQ zqp-_1*FY`*Qd@JxpQ*vZCXkGMsUC8`AsEsVr1@{!-G+2{qZe)UlhnPz16u)V$dt%z z(mi}ihky)|@Yf+pYLVChCSAVxbWu1adV~;GfKLp37fV9UT0%~W72)ov z_UG^OWqN3xvymVB)WBi%#xO~7ev0+I7#q8#_hD)M(o+q8Ng1v}8l;a@QY%Z#s5|=H z50SOQYkzvLzvc?4Tgdmx_2z)ewl4C0sED(VycGAjr!9^Q@$uajz1)u^IGeB4t6=)F zvCua~IUGQM@8is9>5Cn)iexJP2G}A^qDSUazjjb-v=3=(&zt1d>}ZM5JIQ1-Tg}U~ z$~`r8W;^d+^kJc5=j7OhD{K@)mgv1+`a~V08c-}!_7 z5r6-7%HWAfNl5Gdp3APM2_pUui5AWMC#WDYsa?gg8DOoFSLc}RG#DD;U&+`=4JKy9 z>T3?)&)|9t#&uAUZEn)z@)ur@kE~^m_YRkJUSfBCfI;_IppxaNX9bT3`%5B%PG#t5 zcop5B;NHV|PR7!q?gRk#o^IQpmJS-U)dhB8+1^_X`dUan-zv=`Y;3@(81z{dH`m%t zg5(mZB^WiLb|ZGpU~sBob2Ixqy?7_EZ^;LWnp06viK-~sxs}UVIn`+_w)q$TQl$v! z9d7Vd>KFxZzKazQUDY1zY+Ti8@0VTg6~`2$t>ua00|FE38)9gR0-(8mk*F5LyK_bQ zB-=k2{2m#Yk(~z-0qvStYf_rk^B}pobCr)3x#2$15+-rHa)0VA(ZC3a^{)2(-~K6P zVmL-{g&^+kS{}VHvFCE&byJL=!3!AZg1)jY17d=_h&6mwhY)%>Gg^ZEJ(s>^?1U>D~+58_^CXKfVt%a4a2P)$!pxB5&zX z{)Q=ta36^E;h{posl~Zxjj4YFahNk?1T!~hX}^$D(La5Jh8vHHUH^DG#*MOzr?-%w zuhnnK>mHscFs6BB?#9^U>vDK_c3>7EEy3XJ<2*{YscsZtkTh!Ma3GmSo+QLCj5eX$grM055R)h~@G z{%oc7MsHrA^$2llgV5_`1+l5z@winnU%3O_(dSgQx9m79=3X}2Kc!K0#`j`zRXW2a zRf>+A6&Ntoqn{(?Rs67ez}2P~H5NdNO{gv<%TG1SPQ(qFzz}zk^t`nPyhDyh^Z0^MYFwv~}p39LguI<1* zwO>mbAloges|oipKL&{Zu}l+LrL9Hj9LTH+%&~-hB@J|YMbY-u)e$Gcs}C8;tH(~6 zFWtI@5iFja>!zjg$D@Dgc(6296+A;tn&rTMD~CSn=l z*+6tn=@yH(5`eRUO&@XF_@&iJgQieEv*yEHxc`w89V0HY;T;DB1JUEHZCTzv6tl6n zOIbsw$KVlj`(LiR6v3(~L5g(Pkt>FgiaS2J7c~A}$06m?E5k>Q{Mn4A2bN?KPVb=qft%M;{4I8j51`yezTn4eXKsf zzm^#q7ucl4nV9H2a3MmhK5qTL;PzJ}hW6{}>-4i7Lg}eByHS!vjQX}Ju?&I%SEDq` zA@(y(7?WzYn+WIK>CN8Zr3sq$$pz_nJo3$-NdQu4T-bmF=!aAD5mH8W)~Xr%Kk{m` z$>B+drv=WcmKq8>8V1tH-Vz1Ib5C5PWySivusXZ1Xd*{&^PSK-12L1Hn(u!QIC&r` zlpUdFpJSXSIt3&hEVP<+9YpCDb${R(S#pals_Aq(`uWC2%!Z$6UCAw-r)i2IuvuJ_ z?Jrg?KPk+vFm*dKR(~8sHVfk*uNJhA(sca7DA!g-9w&`c3p0h^95aVZc)68%ptGhR zjKp7`j)k9;2kDxdvV?Z}#d6>izqsy$1&>~a&RE}!5EGe4wO6i%=-KgnKffM&fHpY>NyYJ#Q6J+!i&tZnj+a8R(kZw&r7e+rN?E#OusTZ!q4HuiqqI4Z<7G#^B^30Q)EYvYh7>~d4# zLn0lgflhX3EC7uHx5yCQyrQcGeAA&TKBOf!+|d`T2z+j4&|3}ccX}^vo>!~oX-o*3@0)GvY^R$74 zJ0Ete@mR`kxYi1y1v|Q)0=*Q4#3|!0_u2Bpvx`-F z+hWm<-$*pBSi-+rLk_(LF#DWp^=;_Es$2E(+B^vfrnwq={WQgYb*k=|YGHsZ9Hc8~^#)R_88gJv4)SrURhg4t2 z_K9d2Y3J&H0H^#HCD)f}SdzewDYxqd;TmR#JDtqb(g14 zBxNIM=4!Pz$0~3~8S4)F6fjgqmv&-mhC-tbfCXSM01}e} zCSnW+1M3(nl&9vA(Kgs`Qw66TW|1H&2;I66QE#%of->%u!rBIWYp@A<`q?9?1&o4& zG!tWQi#cPN=e3U6qHVE!Z!K6zLAo)abez$BeT9x{Io0yO>9XDZ!dyH|oY+=s^!kXRz-|vp?Uef}A1^6l2V>8P@g@*z8`u;kCBK3LOqHFq z%M?C%J5tp0-&#_tvKEWMA^_TntjQxM}>|WFwFbrrBW73a0P>i5YR?L3RNykSD4%wbsqT> zL1_e=Eqw+v0BA&2yvU4MmdpXh-wceYDa6Qy$j96g@H+)6nXV)-(c-y^?i|nwdc= zHyC*UW44ye8?Y+CD=ne-1R(9!l6>1p2&{`gXfvSC`sX|CwrGpWW;`nd%vHDWbHh8E zUe0I}U_5-9Y530~mWy0oClIj`Fdj$1?^1XuSG{f0qehKnXy3;m<@#`DjvI>(_%4#= zQE+>a26=rt*6l7hm6A<2yMZ?^$z_x4=zdrU%YjhqS_!|R3l)KMJ$zq-T)(mSc&^Rp zZKTFwu9a{gPTrM;T{221TEH~wMkfuY`wK8}q`raC7zx*@inWH}aGT(J}JgZe+&hU<5=l%5KfYz_L*H)cft5^jixPHXzkH z>E}}0bYH9=yQs5h32f}KDOibb1pIf&S?=hrrFL6>EYK4^shQ@(_w4n$tdImfBDZY<_bDkmw6c63D~zQdyBSFURA+q1*Pw}L*y=}EDT$PqhqlVF|n~gCyk=d z(BZtB-dJyP*r+U8_<}A48^{tH+n#Cpd~b47YU&zi`0AZr!_#zkc;IGsO)MvVLTwov zOeAqtl0_qgI+V6t)xt#{-#`vH%%&x;PUpZ_;DF!D@XO8|rp%`2?R?IHpp#Ja`um&k zXBIcpeTZTMjQb&w!V>7`j)?1U&kvv0*6so6S0jV@)?~s{dM{G4A~(yPZ*CG?g&ih( z&whGoEfFKuO!cu4nWl5iJKPt#ry)dxx{nU5mN?`g50_CQg5Uve2-Yxq+wQyGC^Zqk zjJc2!90sc<#O_}7SWw&*IwXQJTg&ia1V!kMIJCkel=(=iCgPntAp3CETmK+?0gngQ zoaXmz9-_O#jbhkeOP4JWOP4YHicoP*jPM7y?cGS4@;wZ>J+>F>xkpAlJ)Pew51NMr zu@w2Dh+?dPZa{)85C75lT4kb?C$VFlyRVlx8~D57OghFNbm2Wc4Ek4`E)D#2@msx? zKDTeW7bwj=M**O6fR6*D&4{PrYZ4G-R#P^osh_U@=T{^e?0|p0pc!iv)Ub%#9o#^j zm@$?%oC#&c08aOnJoUqaMrf8!>sNrqtK*4Sy?|4wl+IbEw&~?@MX?6@zK$q!%>ue_ z8D|7}3a^gAm{Voq_nX1RGcV(}Yx^jFX_eW~XP7f2pv^*TOo!s$<|0e?YK)Ysi4*Hf z$9?BX&AG)9@2k?QS4QCe-l;lWe((mqyi|vhDlVx?rKpT;l@nB0_kqp~_~NlqR>(tG zt~)`nl!>P-=q9tGPf|%?svgms=N(|&&A%bR1G#G4s?`eIlOD6HXVEtjk zIdwFgpWkB|-A#DYpLTp26q``AOXZ;fH2lFN%Ox1h;8Fhk-@exIl+kD zHxFNVk&;Hsb*VPc0VuMZ{1P!q+G#i8H7mV(cVRd|s#h^;IdSDv17Sf~GyU!oDv`%G z^}0Jj!<&QE#bPncBLedbmMaoX=9X;jCeu@k3U}E%C#e}PqiDs&ECGD?2B&Ijo(t96 zm?ZsoM^{w1sVHh@5mZQPKuMk>rw;(2k+PUtt2T8U2WRYIJJ+G+i}}`&a;RDWNFgkH zddJlbXs;ygjP07$)XMUGPb{^$lYTb}eZ+ao4uw)BK)|2!_&k`W5KD)*vMCW)XKOG+ z1%5IQlxdlS_+J=dbj@D}cf3JgH|-X;W+T9<^zmdLN;N}|J>-98mSns0u-q3ge?C<3 zRT|Rhb2ljnN764ioHe^_{WPq4839LMi-OeP6bTG()0a_H{W!9pkn^Oolxc^>Le4xJ z?@r^Bl`7Jg?=;1eZNGJs_2bV9q@5TPFN^pgl$0(jc>wEn5^?9Kr-1`>6f*-(1O#PC z95W>V0~1%85K^F_=UtQj3%Ginp z1+ey+_b0e7lA>=)%iC`Vr=U^&7nDUUlpW|Ch@fk{#zxeh-UjNoqdxRbYF_4eQjwbS zdvCkWn)=N3l(HB3eK&9BRxn#Ds_0x6q_UQ}uD?Bq#OXT>l^66Yrar4QM77%np&UGc zX@YeT23aWVsJeIny7E+_CLh+Di5x2LG@ow%TJl!q!>rT|q`EOoInyeP%jlo>Kp!-z z&rJW7==Ll^t7Z0G8xzv=t&Sy;0oPM4DARLiB|kBxZ_B6-VGqVqydxLV6uBlOet+&v zmZh?mwC4H&_mzuw-T^*y&sGP5d$(9$*V3h2StgQ_WA&LtA8gL_N;Zv6SV*^gQGPB6%i0o(+y&@uR1%G zdNvZ#kZ!Se*<5-K8=ioNL7iX|#hqo~k~6eME2fX4ZUJYpm^YkH&f-dYlht5a2Ijbi z#fT0Bd98Ib8WAJ<i3r|yMcp7Y+bX5amM6#zw<7id~geA4whX8 zxI0f>NJepBA>2_$FhIM~Mcn!W`-^v|W~{p?=~ehGs}K?Svp@U_(gUK~@R@iB=?^2v!SF%O0O&-`Y>{-DTaZxQF!f!8i?SW`JX4Gm9JtLQhBul^pqsU>1ZVoU!9)qWr2u!Y69Y0)?wYO%Y5IU@iiA+z7`CCN& zE-=6J^M&8ecR5)tk1(^fC-rEOHodm$e>G-4cRKTs^ok#WPH#_##+!!Ha~%;4{j^84 zTpzySWhbc8%85c9K3v`Cb_yLO`o>_!Y%sa$$X~IhqfVh1tiR?0?i2#X8n*^(*1Xb z$LdSeEGIX^DB_xBC%j_f!GHso{a_rH)Zh68fZ}$shC_~x2q7fNVEANr+sm$@HEfZ8tglAntO)s@lwGlyG zsJdDi7f`aS2bjg(z^B(J#bHSxyfFF|FqPapg=pdR+$b6LKMJC>g2A}x{P;hZL6;jd zD;0|ms^^~mCb;~w*50~8^6CH0{)I~j8t-75>3~*J24J0G5wfBi@7!^>dUawbRTNl! z`#iL+R6KM>V6ce@`8zk9Ik#tO!W3olj;<3WgU@1eU7dCOjK?2z@6qSOt zzlB2{GEt)H4ueONzBRs1yv5h__!^}xqdKR@*nJz-&4WWD(vAiM2VdJBz=s6{zcV| z1g!2PX>luI#@ZBgat(@(hMC@lgDWki8AKK-)0BEcHo@Km8x-_70iJC(;~W|Lglaa) zNC(esM#gLg-SAsUZ*L1U5PX0TGm9zs)oI>56sxSIr|qfJ8JeX~wb!!MUxq;_@26)+ zSi8<(=vn}Us0>orB7$~I&5eYrqBK;R9{;H&BtL<_@w(P#zBnMR6}%acM(v+SGIWE( ztlYyg>ztWN7`N22-SsaSm&8f$}vDl_ka(mQ!5XE)JI_AE*R7jb#a)j|F zNH~%^`Z>D)E-B_^fOZlnfB7jiy&Y$R9Gv!1t5mWb86FI~mNte+Xgnfc;FcvX*nv3l zzP>=`=p!+}6FcUdUM21=n(o2ZYv{-)^h^%XNNc+J1dq0`zzLl+B&WN^UytBPU#9%H z>u`R$C%&Xk8^6kt8U#E?AjnbG&u|H&Qt|12piqZ+u(YlyfMgmz>!9C>h+O61bJh92 zPTf&+dWp7ex1dOU$fogpb!UYV79@AqUP4IC!QBMI()IO>SLwcs9Ha)%f4L~Tsp?zm z7@{bTI>#-6WKQn8=`e2{|J+_^w`f!&x}H~2S7XLE-_i4LdV=DPjg`dCS*DqUri12w z=ssLXMm?D$s>YSY$b!aMH|}^8<}h%^7Jb9G>$|6Hm&$xDc)S^=9Ly}Ix)&#&hCQR7 zGLawp@?Yi`KOcnizC1W3>!+#h^C>d!Z_;9YX>7bXSUKIy141eY*A02D^k2qV_RyTr zYx%~$lMTAP7^Kf;^EgqK9nX}DG33eDwgC%~9d0-7;*@UHgfZ`-d7>ACa}+7=mjItV zD_6i;t@}N!2@MG8_Jk5K%vp80S*q=-@~_=QOl@6;nA&n>$Pz8TiwY!QX7c9|a?woc zi3l`5u5yl!Qcae;U8=Zpeuz6ca*M);gtpWV7c#KV&xypB{eWZkBZc2 zOW4J;7<^-vr#$q6Z$B3@%BMK_P`g{E-y}NjJmRtaFbOOIr`YL0^c3OD1`KO-_4dWv z@k#fJ1`thG*r|a*#r_eh1T#dVr2PW)Hibm>rGwDx>~u~kbN2*1`(rxrBE}0eq@3_5oC_pao6X?2Dz-d?XBon|8P8*pE3Uk2g4vF4(rHeUei?1A$**AiIl;`0DlTzafUxvLd4Rlh_B=p+A(J3G+C8491A!<~06_a<3zvT(K`*_=;; zV5b!5Tn5{n9Bxm2!vp;HEJiKGyNPpBfiJf* zG1JxnaqJLv$Y_X5Pe3<4dPT+%Ogq`k(N-YHT+#}ka?qsW=D>ZS-MQbe8*Xb*DtPD~ zA@(EtDykFCxVc(=Bu+%Pihb(_FtXj1mJ_QSkLR1RE6;Qj_FO6I! zEh_Qz4@KNo!8|)vhPxnVgys>7Dp`06p?kyD$QOK>#^zT)T%_Cp0f2t=e|qdP*kDY% zOid&aE1GF6-C0Gi3GoVDYdVuAi2jDF1{Clr?b3^Z(7mz|FQ*n1KSr@ zT>7X`^glW_5#Hl|`_xpUXnCl?)6uTCc4;rrL@7(CqxmQOd4lS6$e!&bSMT-U`%wJO zdlC0!K?{b}AQBz7jVuIE+QR(+D;iM4W(UIKZCrIfBl!MVT$N0{jFPkTe2~m&`bdBZ zHTCQY#~ML}Ns*Q%HSgCkh4=j3H3o;Hm_E?$EH*?)O|z7GH8Q#Q}Ts0Jvp2KwLvct7Eu+{RN2E7GrJV^si-E8mmOMFU9|Q?Tg!gpXqM}x#8Ksk9>>wtNgJxpuEp3h5w{?Ulz*O-8#es5 z+oqe;eVCFOZ^rCvzTI&Ti4Y-1pJ(-EBpjZ_9acOy&S>pP8iRk`>;=f%yjR4bAf0ap36+=-rgn4S~vX^(hk= z(*37r`%t8@LmSYKYZP!rl`0C|Y$pdGGix9tKzI(JSx`aGrdTkrrwyT8>?<=KS)~9A zWsMOB_Z%l*-DY`%Cj(*>mpfBZ{06WkmvbXP4!=EyY)CD{UUEdjbZkNX+_uY(uV1B`2#}PDRAzU>hNg$s#k|$eH$6hPN3dvd&Mq< z4X_j%rcjf9xgDJooT(U4S9_tn?EJ*M%3=&%7>GNl&+KwNQahj1uMNMJY`a*rahj{j z;@qf`ytIYt*DC9nRsW5g=2=oIe?hZtdk8g90qO%7_(>-D;^7rEBx70lGBpw`@7a}k z_1iJ~{tV(LAk`b-Z(V9lXO>d1KYAS}q~46>0J0)YV&kB5jh1U-lZB53ozyVaM4iv3 zB%)GFokJ0SH@)=N4QC%K!p-2eR|nYMB6sE2=BXKoHMC;>+i7Shk`I(fnOXgKNai2h zw;*J=6z}hk2vMJfXYoO6`ll#@7bpi~3tZuH@cLGdDpO%>b`Fwv6ApilCG)Jn)C7>! zjpW3yq;XEPtl4r3;tC~7_On=ji{VHJxG51rvlHGZv^(VYYhHZ(Il(d2K*q)}&kBWQNu~*Vpy&v^}i6R=$ zd>vo#XuCjZs!yD6o~IGcpYWmGTjz58ACfBf!5>K4wnnK4DC6Na0fbPvan?sxIBdnS zLbvQVWP4fQ&)u*tD1f|QCOqV`S0JT)(gPuDwdS@^sejw9W;h6n$wz!`WacVrG3g1} z*L9IYhaA02Y-1}F253S)BQ**OwV2X%$SUgGgSrIIsAP>jAH{|A6~ll<#^cdfDy|9e z{o~{bQCMI_DF|AQyI%CdoX~b{lyg46hDPn(l4o|)UsK=c<61{+uU!(qhQKW^a0|IM z;}3gFnUQjI_}Aplo-4RQ(7P4gKNNd6yeiWFHo+O`xG=d(LQ7U)8^62=e5Fx|vm9s+i?*s=4u67A@K|Vbktypl7slHg0?NXS;8*P?^CkxJ6$-mr;l* zXFW&s<7YTSju`>9HP*)WVoMQr@xRuEy5+YMj)9 z0n%g#Mn^e=+QDmicP?EfT`~|Vv5M?rI0w*FWFnL8eAi?QS}k9dRJ0ET=mG^JyT))Y z$T4F2Hz}0vw=A?Gb+6IV!zq#Sh40H{7mIWdt#a+-u5eOY7cQa|$Ay476UR&$Qe*UW z##$f7*@LL$M%2qL0S4GRO1gUgC2~ECCp_J#NU;$a#<{Z@h8;pa@EdVZq+C1WOAnq)jBd$hw$E(3xu4wl{9DxSn`k$aH-2M@tmKpYz^>xJWDb};tZh4e=u55OvUS9}7{P2L; zKCsERw-(hCyG5)>^7HO}f)pLh1OGI};29%@+||v$gYp3C3%QLxF7y5^1+_*XQ-yog?-jM&5#%iqYYy$jY6;dE6)Vz2!n~ja9Mjn@-xjUe zD99Oc)30Hf=d`dJ^(^f5BV1EW06bQj-!)a$oEw;Oh)04u`w-P*q12=Dsi*Q%{+<`j zKSRBQkJ+7$R0R~7Ykx{VMZ=myhZY6E+qDqyk2=SMMf0gs%jXs{*&80Up)-lwI&6`q z9?OIN=?1?ho#I}wm26pF(!E|R%^)%T(k;kv{?Ej>`lEaZPXY} zD|p-(4`OT9XSG=$h(lMyx?(f>`W|mrw!1XJbHFQ+SotzIH(k$2$;eFa+E9LqL(Bg8 zbBB8X=+ZV#JmHDWH668-z$H-^mvK9rQ*UY-$MtB4Va|~t2?%hd*?E}$QdrAh-4cwj zO1Y~F8O=!|m13e*-w7FysEa*5;>r70Vi)fzon~6k895`WjF8Sn)0%0cu3-dFqm0%X zU9d`wY3?o;2Y$LGk43rl>68@Zrt_apY2j?O{KKaOXidD>Tbkz(d5*JlkF!Y!ROkd& zY=XHk-p##jQ`nvs!*)dlBtv2X>ux3w**#agIjj^+3XP2hQsrAm78xw6FM|KPr+TU$ zzbhQCH8#*B9GocXk`q1jgQwtx4j^Z>OLJHm&>-1-U%UuPa)8c{Agq|oV8~-X73fQbL<(pE3YGD|hB>)!U zJc)DN!b~nyx6l(Jq@4+JZd|8Ca|IA~cld_WBI~HEVjgBe}Z&K9u#{YOjC8Ey&&lKlAYi zC|8Z~{(Qo*u za=68VZ1oH0+QRpNI@OT|6cv!R(CYBZ{1PYX<@rh@CaTtU1*;bNk`b-dU!&-be4@Ez z6w_XwpLUUY=vSe~Iky@ha|7+!K!N;P(&vTtUiW%kfTl?1L~@{l3iF!FkU#~#K-c-6 zjA`y#DZ&EaenC5|UjtXbyOw9a3wXC~$ySgR8y^0b?Kak|2Vb)v$iJwx);F~ey;h-H zCa&9~l}hfK?VRBCpoXmaOniQMX@rJejfG8hrarQ``b8^3y*i+JjtdJI27Z5o#_g1E zUd_;r1mKjqI05oEpA{zD9cnEBVRyj6S9&;gAi-qmbd%r_A9lL&eNji(mpdj*%<>g)0)!Wv$Yk&lrX*Xoz&*Ax+=eFMR zet!A-a%sfp)VlKgbDzbWGTNj}aXZ}Ss@!DfkZa-D9Gpf$fCo!r8`_;NYQ}xNf`9>~ z`T>_%BKS3SZy)`Cidp2ZR_1!cseA*W{3Qs&yxLd6ai(S2jq0))6hAO>^S9DaHzXDB87P7p3vd>gPY9L>QFAw z;hLDHWxZP3sJSCBL9Cz@+i?V(M5cSYLi1jDf2|>cOHk5gu0*Mi&e_>qN$Bftu$$K6(n+YnLIOp%RozvR4OUbq9nYaOBDisgVCSJfDJ!cz2+KJZuMn^rqozE;D2&O?DXquJD&iVnSM>;Q z>$lf{7S$A`R3L`$gEO@`1nzTT6Yq0iQ_++2?5%gR=9IxE=DyDqK~-c&&o4CDNGTQG z+7DgZ7^~oG1H3VM=`nTI_{fIW{yz=4fN;l~1fvRnOy=+TWj!BJ=KYG3mq+BS08Xlq zYjDmk(&57qgG%b0UvSkGgJ!tah|{@ro$Fe?Z^S4H^EQuMV@CHgPQ$~;JYtu&s}8m= zqbB=YvhJsDFQI(nmI}}=g!Tf|3F!SAKj%&|+p0KR`emrJ72p}hep^ID23*sZHIh99 za5CPa>kZ&n2XsY3ZTz^dmH?&K^HPI8NG5MFXt~iOsr`Q}M(>k*>@m{p95ce+3jGlv zf<*V1s7}mIn{%1g=#O!qq`n@HM2_*T9jN_3U>j?)jQ#=cHqwEse;djnQ}I7X^f;%G z!!L-89+!IsTT^QeZMi~TA)lsJkz5}|F@qkIDO#Z0Y4Qhx)3|~TgNEOiqyc;81UcDp zuivJY#hrAUE-YazXx^P&D>7s802>D@2l~u8LBZo$)nxy3gRxX}Ur4=QVVO5j;^>kY z(%o7^36EU(w&yT%8UBQH8R)b>vgwndZgIAXakBa+ffYRYdNZ=#AT|Fl&p>XjRch|5 z>h1l)3miklu%{>L7vIgiqLsQWoIQ-)9|gJzz3Y-4L&pH!?CSXcZK9RC!`1pbZeg6NX_45G9eIP7dDk38l|Y|B@GS@s+<**WQ~W#DQPPA90~K-Sq9tWwP8Jg<_jo`cHEDj*mta-P=N<&g!!s z%BO+y=15!8Q!ab}_Y4ixLC=QNdh1DEr|O5j%@T&%!;Y@w)|kDXE`I~V?qr5hO$dXc zWAVy-2T8Pqs)yEe8-RG|&9z%g(EQTu#Qg{%QNIf~ZVszMywHUHDb(j=gl-~`$1XZ* zk~r!=P$GpTrA<>8C0Ot=u1b-g2w>s_OmDykMg?4z8UTxClgU*^(mf3NTuug#w0Omq zIZWCiht~(5U}32}$*6n7BePN=<5Uw%Vfm*P@6o9an5k=N^13wyvAafcG!XcbZ54(H z4O{LwNq`6eDH(HtDzp_G0A4fgc21z%6<)F`-xU27{Ofk56JLvz%4dxkoB-iH6T=g2~@{AcFLU}BiC};c?>s&uvttgKh#5x8k z0Hp+3)pX9?<%X{LxHP;cxu>TFGJXX68R(l8{{XeX#s`$J@rY5OWNtp~#*8PKlxZI;bQxey%mo)o(I=>R`T+kw0KlCH zB)yfa7RmX48vDdu*{9AzDyz{4OA9Pqb@?%s8RZ;j6)J*e#jV~9Xq!M#KfV$V^I;%) zveW1AuYrKcpECa|MJE;XQI=Y`OE}&q2RJxx-o{!wNctFngNF#moz=Oe7yiRXDi~YPe`X;phlYwU8iznDGqs#0xRs6l$1ZN%sVh z_g>48z{MG#nZ7+&4^Y@W?lYw90zNArG)%36pRAV2P47EyF2_LN!w4%4+sZT2OVq}^$M zC1+JJL`<7EUQ78GQGOvQWg_-O^iz{g+UfwoN7XN+`;D`0qzX->kL3;4Hv2lo80MJT z87Y-KlfH4AbE)&sZoq(B$$-*sEkCW$+-B>8Ik!qhJ(oT|M64ITm$$pw_gBo5BMxxZ zYN0fSr}ZoqEBRDDVc6);tGSNUKOai*1$nsR8soz{~^kH&8^+)V(3JFlEQ(0 z@_wdL>(*R5?DKR3k_{8-^-ksi0euMsS_tD&DfT2l(T)C(T-uqaHHDkfCcb3^drq=T zbIwv{M2oOp(P%>PieZ#S3Qq{UhlfNbV{HSpDzt1y8r)y}6Y#j{7%{pwyknEs-{y&h zjV3t9MCIC1zp4HaIoU#!=n#EZR9fXB2`X5syV?N-k-|*!{NxbY4a-EWfIN;{6D}I5 zcPGPUvOt!pifM*nM9;ZIpXq$_s$|h3gb$4|i(;yL73JsY%vRVAr<7VJqvDBaBx7fh+QD2Qt#I>8J3u)^P`8`!Z8;RIbFlRjf7ZXtXWH(N+dHrz zn+6dT!H=1WDwQZ^`Vhu26F}P2OLAht=t9E+!%i6}ZOzs8K4}Q`^ zAWWH~T3)yw1@7b2jcX`9Wvza`9`E3tnI@H7vMW1c61UWYze$JZPu{&|mMQa24wL1&Xj+2APyi@vQ7g|5gxpnsFAaQ^7a ze*;k?4@m^i+Aa~Efri@29n;L>x`B-BR2&2s(Ix-)vhm>cjK`jZ#Zgy7PE0X`a$l0h z$ILb&9&`V8%;q?<*B15v1Gf~oRhTrtQ)W&ZN^tyOEF;g>V}$s^4;xw^7{3>6?icqC zOqD7dn%mL+&`bLjpH6?-cx^&X=FU_n;dJvD(a0pM2R%q|TuVsI`GPsTyrzm8MuRnC z*Q7wP2LY zjMXE=9<=J#Pseb_+D>KEzk`NtYme`;N{XJ1aBdO&v=!DIwA3MoTMAKym#Ccx`a2ca zJqrsl>*-?i_f)k&d`QTk*v~yPOIYA!*U7aXLdF@4oj6yxm-N(A7{;e(R*etkM-+N6JUl2KPE;oJyp zD}%B?6Fwd}-wI2FM?fZty#1}8g~PW3!x-*wGiN8sL3=|s=1+1&X!E$HY^?I|#V`W4 z2-UO$DH10c3cf(pr1D{GvXYturspKMkX6 z0M_`{@h%0sho?b25mn(T)MkY|G&h3R)QfNjcO7ofvMojYXKbiu2enhaEyJP~h1so8 z8^6uMIvds9y6<s@9Eemb~1d}LHe zdb_8y$J95rGyjF$MAt(N+JfHXGmt3T`h2Ll%n@Hp)G5fJadT;~?x-SdyE?6Y{Ht|6 zd)uuURJvRb+#6=?w!ycearNwl4XN8|?t_mZKU~IpZxJk4?HuWyq{i&v#S~761wsUL zFoFmUc~30A-@|koc`}nihqJNiNSdwz0$@iGd(9y#Cb;SGw~#ze{LgnZ(KU9(|1qiQ zgv4!FHkicvFB-zKQlI)*%;g7Cy0~*=-YH%(BtaAB1`+5p+`mj8KBSuHNWPqgm?`mBYcsGM}W zHFNPFVZ}C{w6BBQ9VdgaWW%d}pZ>WdK$#jTlaj#vB+VlVHY zz$u4VF!q_`UOt#4-WEA91zeCm3eq~;ERRdeb&B{)KYUxHYFZyWNESrB8#Xi(EI{rk zlk{QmmM$2Y*IAYi&Og8W$Hi8*#(W{`8AT9f8hYtmGN=UN(#m10zhRyxFAY9|5)ff)7tVP5~~ zjSxw*%PqQ?yChe;9!;0V>EDTwOKt)pJU|8=%8R|5+yKUm^oP)I$>QZqvFX<$ruRsc zy6@owT^H)fG=pT(*2_g}!%t0b%=bLzzd;~GbP5EYjA7^FiyiyE%5#@RM$@jkTFx>7 zaT8ITXalt(*~6>Yj|H5Ex~@Q2?-^2k;Wxwt=4w&3zvvny3Pi^iQjHz=$3CQ9 zgG!h2vMWPGrWwc` z`ce#>_Nk_p!15$K$#I2>xX40>CoyqtdiNz!XYmTo9t<}cFr_M7doqaNMAio%fUDmJ zenH+Vr~ebho}TZKoA#(%X%VHo1|FrJ>y@(oM!;j}<@5?=ciGF3`2Du!rlsgj;f5P9 ze=hOyEIvi=?rE^gmLg2Mv&RXk|P|qrKIBY|~35_!{ilNZ@*je;tqa zVXViLf&Ztwjys*>c`}ez66=ONPXKjlGMbAghH4YQf^I=1&zPJOc&9H92#nDLZ z3;b&#HU@^Jk*ZK;1ntFjFrg40-_fl5FKbV4riCm&zZ#5kq?r#?d?pXtdDuU0LpORS zv?(KeD>(&Mn{YOa`aGJbg41Y)pRY-7o8|6=ox*cJM?3>EjY*3RmWd1qD zpJ2S@7C6lxg(nz488MUDLsN<5U=xm&wkJPm%UR==L7rdb{!FBg=d4mJ(`&= zGC1mudO5hQs&qJ)_8z@Qa7sXra-}%;VeI$P(#_aEXTVZAEFm%+yZ973-aSocbe@NtJlHQ5@jwaYdlSZ;Np}Nr z=eKjqk-OL=sJ-V?$bVLQfvIG5LEpR}M1tpI(W+T(Je}0o9*D>=ga1Kp^CRqy!4oFV zIOtyS$Y_Yt*Y`TN1oDLhEQU~U0PL)Px!aH(Hx8g`v*yQa6UbE%qriwaEGd5cmpRA>2`B=fR2A3h z;ZO51{HIybY~?GKSw+GNbS2)}SIu_Y$q_@q-|(C^fVt0epAz+j}p3j4DN`#P427!uSVMSel6RW|@+*jWp>Wj`Rj!o97xqDGn9r19D&vesn2{c+{f!DC-Hx~yCp`m0 zzSDu%;LIH9E$3%3@&cEu4tUr`Jg;i_CjW{q_r}pF*YNJdL7LF-#{7{V57#lPe2b9{ zD^HQ(ycX-dSrsrBCm#uAdMG`lNF01gtp@dp_5k9JXwky=xf z#)AsiwjaCk-n{q0-N^E-jcZ%e>-L-*joh-&=)!JT2x(nEx;Qc}%f~T7V4+&s6WEr+ z#XxJrin<-f<_$1Ts}llrZEc`Ucye^fFE}vajr<$a`*c|kBC*!Ju;`dJ`={-+V6B5# zY-l_l8=t@)!p;7thXK6vjX|M4Si>WjM5dqwN15G6t9+>~gWy{@l47eSwvUa6K~EGd zR2W35TSJ55^KVSGeucqF5sYbG*!X@0QQb)Jo5g{8 znkV+=asNo8>4Qm?11n04MW8iM?C#b5oYLutkOdFxIiazyHAqxWzq)+kBpDBIIgcl8 zpX#(iPF9V7zebVL9>8+p6+pLYvcjbMeVQ>S-s<@>PWU5hW)kG!79dALA>R}Tn$6vh zq5jxhPIMHYp5Ty-0d_Ek29_iRwmKAsa_voSzQUBT@mPtOAuE7T@=aUAT(w89VSCSuq#D$4N7IQUL}4+B+5|UZt)OULEG0?ICX%a<@1ww_pVSoHBOkQZpGv0;`{PHQKlEYD@td!P8NI zaFsb6=Guvvi!f7K-vw=u~(q*cXSA?Mawnd^|sfA(LAI)jlTevsv4Uu(RD*3 zbRJX8xQ^e`^u*;INugXu(>5febHYD7$Wr?NzD5i(Zrk}FJW%y4-2>)U*i8d)4!<*8 zqH9bZ`}1v3Y&*}c3D1lZ>VBB`k&>jluZ9>);T4QGXk>YOJt@doJd<{CE#8>V|;Ye%W8(VHMrX8JgO0dWr>)6E}6_VeuwTLY`3|u4O zqd(lok(|zd^>A!5Fxq(ReT%*?sYo2 zG4Duy^}*%u!H`mQEHJ@fgCLho3A0s2NqI!uVCl-#A|I&iWiV;;o|eRR2%F%Oa>b7P zsfCz=7y1utzi8MJ6p7t$@;XI$7I><6COiqU^)pfojB7Z3{;@J9KuvP7)jf^uXZy_g z8peia3}kC2As9X%5VPa3)>+8buV#Y@A@!~mh*^Z(PdSwpIRPSeT!MBTc4H&3JK&I7!1#b5y7Wg~V%+fk!6**5RIxxs(@WyHeOu!m0xpZcq1b5r*#-x~C=|$>9lL-Vm5tCy#5!AVJr&!72WD-6gvlAn1 zc^luE>6j}Y?HJFLw>L;OqReGA-Qqq2)L=J2FgJZ$Nq)IiIkB7b z3y{P(1zL(717R#rLfUpvy4@5J4~_C`;ex@ytmN!wpnw~`Uue4%_Um57)wRpf6z0~*OxmnQh+m{i6Wg@v2IHU=CIKh znF4PEKbN_O6K4#$@}Kky6}c2P-%9^n1<=Zi(F|@aaQ*ZI|7%#WQ>d#(d}8+`HpcYu zzg7g0t0%=t!!qlGj}>f;7v*j`(pNX^Od-DQv4<#ClORlNd@(V-4PLUFr%p&)!$;K$ zhCk)avr|g~UiX2q^(=&Ho4%G2Mtk>u6y759G=&l2EMUlq8npS9?WH^X zxc00soXPNzj>b|=d!N;RFx!J8+){9NddRZ0onG~r zu{yDggdx$(BOjMhaLy~NUFY@r=dXW7w&P&p5=w}4$HM`e%A3YyTQHf{a5zzS(FE_j z&s3cKq{vz78GMDKh#s=8;a;PCnjm*CC+lOOfjS z;(04#cYQj|3ad?Z1bd=?S9|nKsUOfBECfPiowFKJ~TUd<}+&Q!qk}q zcjBUs;>}aiyB5DEXn|zT0dZSRhumTB?rBj=Bpj%+MR-7x>W=iZCb&^Rd9M-RkFKx) z)~JB0e?$*mu@EI{C3KO*G+)xlq8TNb*|(pCG-AL_DA3NV!Dp!=!u*S=H*zl2>Z{~< z@;+wJqd3}+FPr^e%_?YD+5fAL-7L#zPnv(3F#?F)Vd#%BcYDz~<09g49c~R=Mf0yP zYW*JV%BsHwE&~Ea4i=)vI6D!~hB9TrDzUK*fp@!`(v+1)o53(r_xJoQ^eqGTJF|qv zMUZeg@p5*>Uv*ls#{DGMTzc0yVZ^`Q3&JG(VowfhVoYL=%Q0*=?{h^QkNS#RQ8ePq z&jn@2^uCSEv(72q0Via`Ov8v34&l@erR(>inG?YNVqiOgZ(ghbHm^O!<08h}H3-@myZxohju z(s`Z;$Tx7qu9MXuVS6@NV?az*A5UJab+^@^v-4IZUj2nBhbi5z&%LPbGd2c1fELYO zg+#vBndG){;AxR#;a=r#8AmgW&8bbA2`ni*gyd1~W=J)L{mn*pYW*OE9#l1VySi~Ngz)~r^!4f_Q41j{k(zS?&0J#*2Z3@Xb0 zL;$yOv9S%zR_M!lC>V8E|`new^r9&%$AxcKDS7{svaL zs4t1(ILU#YQg)9Ov>n=0M}8U^F}xTUU^+%mJCW*kGoV5_%s^AsoyT)<;@^$wce|I| ztTX8awbI)Tl@Ao(-?upOJ2@MY)uEU+NIRM^S|ECwbgd~Od!I9&0`;gR?H^i`!AT|> zCySLXaMJ)CGN5YrO-#5D0l3D_a@aS z%g61KTm}51!x&cZ+0qa8wlLHsJJ}~8K;o7v9&io56f$3?%cFdeAHnpB`KW$<>i;?Y zF!(NwcVNo3xF*z)f=tbJ+nkuotTL6}Zjyj=jzzg?l=3&$TvJtlbAhDCY}X^~jO$Q` zLw|EQF%ontfK3CPdJxfLxGV1PCVJ*cywZ;#3v=^Ou7K$@LcLn=Et#~bIDCNN*&|td zvRmU54nu8D8k8yGBzvUbM_#Lloe0PB>z-m=KO#rb=W2V#H}>7pJZk1e6JW(kDtunW z2M`v%%hu=lFtB2YkVceOU?%FhE{TIG1GzV#I;maPuBr*uS_~IFQRg2kbT7KZ=*0ys z7EoE!9OBzQcx~n4uUKFe7U@91tM+dZN1YCVEKT$8>a?5$g~FS4K0!|6B?E_(a3EHK zA?m9dz6(eobrl0I%RH={h82LJ;S_Kcdi*4d55vSKQwh! zsWI*qyiWCoJYq5q+5O%0y0E_wIv@o*p6!kb?YRgx;J2KfZh^B~WT zB;f4B$Zv7KGD*9~k0uKFApmQ0a##TCJrcigkwRmEQc2FzG8<5#UCmqq&3{Fy@M%oS zt)VTZED@DCTBa|r(6)@#C}b2tK}>h+tR##H7~Ogds1SbYT-*<6*RO=2eaaqfrRScl`FXlb7Ik z4OI)U?b3WT?Q&5>+^%SlNmqOcB#!s-sZTTiEeKIq9MNs9}lfNGHg*Xbs9<&SAQe$^<47?xYGaP2Kb4v@G6O6ZgXe`-ckC&TSAaE~Tp0A$}0FtSvw z>j3$C>fn94p9R7`{H9rAK){YO?UMf*f4L1THK5D?2Tq+^Q{V9?lWkw-rFh&~G?hI9 z|8x?pSUhGrsfqV0q+G{ulRMW=5mgyE&?jo<|)n_;Sz;%0S!Jj|wKU1d!OwHBm{499b(!o2f_RA|nbrlyO#G zGw=MD=)COVB#n{Q(Ouw#{%D3+ch@P7Cv8QTpL$g_6S|jVucF>vbsg1)I;tV?MN!-O z&D(kk67NbIl~hBsSKuyEtY4V}TC`%}@--*PLah|tt$urLqM(;NYR`v(>2_ZDSr-O8 zUw!0|B)i^%kzbsw$|WtubazHj5dgLG^;!T>;u<7;)Hyr2@#Jr;g{XKnsl3ZfHPDgH zAib_1P%U1iqBu0^_KJYosK){_WqJ3$<&3vhIPB(${b!rwWtucZC?$cg-OxKwdnM)6 z#jW=$p&uz-k<>@8h~*vv_L@pyhkXGUE7}MBR%f(9lnIaWZ*HWmW5#lQ|?>JNYA?t0oZ{_^ z``S3c6-6Y2!e0~Df#1^>?#s$PL)(E;!CnMC+~IV{8mP-AFbUTjP5#*1Tt|99Djb{4 z;V)TGC{!1E6zpmDZMK`KZKgAT0Ja(P*jj6-)1a>jVac@kmjM1UTU`zYL?nuB)Yumu z%hq8)r!or?4D%My3Xs2}!+K4CRox^t4jD4Uik3t>?kcMm`Yz>Rdq201lcj6nFz>7> z*xo_wTdaWkXPsQJuNNfQqTgCXQN)3E2zU0ru1Pk7_M$B1p}&yP&|Sd%)D7Qm2p>St z>-%NRI>NM&g%?24XFM4GKtqL)?$4NWt7O`j%yg{6mr>Da>31%Q5BqzZbB7wg$_VSp zqu?OHpywoYp4UCc`3q%1we@a|(WGg=lUS-Om}Z7$?Ph#YESjUmTMQC=kQln`qC3G^ zyzWg|Sn2(6Wvn<}qByz;ZGFgjWb=vFJqNWBQW~}8RV1dBv<5=mX0$+M1r7{pin^Yyrd*~WnxD@Ge~ExATe_8aPP zpc7eSX1W*)xV&_b_=NpPbfwfHU)Ae>;bSPn?XQ!0NHYZ{J_Tf>sby+4S5;+#yXBGu z_?F+Xs$<{CVr^x)i1zE0ZFDyXj*`&t^8U9V$F9veAZHUp_p(et6TH4a#bQ9$qP*-| zfs>bmpsZb3uoy|~PO>0pmE(%X_o^iI$g|RSK;On#7=1xVjlCPQ}BQ;*?)(Eeog)c-lXKx4AHs8#_N6&U}@)t6c~dwn3(yPN&} zwgMo~0Z$58fQt^;M1!0&JNqGN7!H0y6StQ&xDavZzSMwA=V{(ER~SKJI#&?%o1I)8 zmB=d!t_2?Wn+@ZDT?kG-B^5g=hSZbg+T!|zR@9mQ*zJ$9ETetADcEB=P2*4dl>qAKwNQpbxE53;l>Uk~(zr^WkTe=>>6H`#jmbO8& zq&-}LXW)IIdK3;``~aPFKw39?l+~Q8atcT7de$rCAcF1@;u1USVR=UzWVq5+uwB=H z3^3hwv z5|0u@iCctdWw4`X-R@a5YCg!dwkO9kO2#1i0#mT#T|cdHqeKDZs~-leKOL1IpCipn zZ84whwj&54Y-la>O2{aEzaxiI3luFK58yiO>*hQ88|(E7m(j1(X??&qL4m9>J97_6 zOSJ5v+@YrFqGp+DZkNu`-lTmruu@ewltL4T0LxMLR-*|srA1(L#=gIhU>hAWP!;7y zQRw+mb&c{F14||oUgTO2x^nXED*>&B*V|ImL{XLfYo@F;Y<(nZPdnSF{>d7U8WHe& zX3OVdFjTkIiaT|gvG0w4xY`3S_KXhyYs_IY>!SLo|c z_}<>s!FBp5rm7d!-o)>k71Jk0<^UgAUMbbSZ%{+dN)DHhS2lNba#{y*I@I)p8YY{c zK20n;gFeNLg&6N!<|RfFUM82s9$p!4x0i1TDgW()o{hD7 zIw4s#>1iuCI8))GZ;+LjYsTtnpj(G=F@5w{$O*9@oP_1zVSB+goSzZ_P~Y~|)+Po} z%gcr!Hc7bfbsrDuHzDlYdMhL*D9+NVq;vaS!J4j&tl*pJzFXU&)d6hpXF z&Jxl^Bj#G2DI%irx<7wcro112IgPkW8+`m%`BCC?-L+NgU!CjBwGg9LxR>0u|L_(z z&J8#|&Z%YrJk!Wf57^RfZrlnrQW7jol+8;o***qBdYS)VKDDCJj zAUJ4j?{s>17`DG){+(KV$n1M#5+@#(O~>;`7sDIV+0XOHlBvRYcE^|UioIqpQcjlr z(!DmbiZM^a->R7WO{A5KcEHhot=f5H+!a1#kW>4|OYQDp=aHqUw4}XVwFS!VR!&q( z$@n8ecnnrOGFM$0N=>{(zp|j{Ys!C+dz|#M?!vYt zl_kddM=ko7$-hp_&I|4WaHtCOKXi-;hS?RE_@_H+bNoo?O-*4*PiAT5@1+T=lC8hK z*;zG19{}l!%s3Hrj0m$^1t+HgYFlzE|4Qo0Mv($!-}8VP4C$Rd0ci?O+12EBO_m5f zHRR_x54li_{P#6I1Y+Jx&v&=WEwH9AIl_mdo`7VslcW4ni&pgm&*@JUDe4M`5h`uc zoKF&x>6rY0a7&eXgDj!=boSpbinjoGm2@4F;ntC(*)>RKKbgw=UZt*t3Jh?nqBrHY zb@Qd|yGqSjM=c-!W4hupzI5ehthfdFC1+2n6*T~_^`b1=*H)?s$DUnWH;mCQ&HiaK zw;IM-lzJTBUzfpi2N@$YhFMCEXcEix<(?p&*Nm>b&wqpym6n9j`#Hq{EoGxiv&yK)}OZ0N4= z=SArfQL5`pm6X$Q$bYYdda}8P!UgyQv>*Gq)jueN?h7??neDsAQGpmbW&WtQ7+-YzOZw|{*CaCtdX&4;lLJ)5abPY>om+eMpvr) zrvKR1Rdc`L$f~3Nrq3Vet7Hf%1I$@NnJb{-*mN>7c4Ls)v!U})eQ>|por{3;Mc}nkLif@Mp-)}g@Y!%QJ86G{A zrgZ1Yg!PA4QA%iIi|@d+Z`ro)!@FG!i=4QB?Z z)xyJy*CpDeChQ`mJ-&oN8*4Ix)?Ir9s6yQU*IS3i9S)TgjJO9>#JMh#z)l02c^unT zZAdyjBX!4Cp-Aqp#6iz2f$9z4pu-9Y(D?7pJs;VsmBK1A@%5_k(Lgrr%HH!dY!Aip zqPRC2*%jYB{6h4BxF@`aWkh&5NG85(VmS7Hpo!*4KDGaRIMsK4!8PEHN}=I_t)!{;}m>=YmDS@94{~pBNfu1yc|JCR=2DGnhcuF+wN+d`ccH5AwZr)n|+T zHTgjP#X_MAz$PU9-~L?DDJ$xrPZt#^dgL@NNwCsh*T!Gx?A4kte*vh@gP-s+pZ7>8 z5Trh{YFh2~y**~b8%%s=o$qG-1H-Ybjs!V@l5x^8+^x~=>+v-l#N=a? zAe!Sf?l>}P40rL>R3A*6|GOOx#;t;QiGKT(A>s()5cqwl#lM;p!o+$VX>!Zn09(Tv z#Zk&m)uHerZfNsCdJ*1o$R}x&xz|84Z#c7)@?-QxQZQ~OI&xn)37s?W1y^|1&-vZS z9#>+ID+lB!gpeKLWt3~^53_{DcBY^h28Ruket%YAF|C0I4z-6vM4nDupWrxYxHUDz zTvb|c%yh6Bd+?0C+3^Dp%Qs~9J@5GezM@;0sW?+FvxRiOyt<2J7B@l^3-s{zv+h_g z{1}o|gwp%y;&nRIc>IaoJ6+D&|2dGD-8P%jkU}A)T`@g1Q@jW^FA&A6F*)%A8~Tum zST1~?6*n<)>SdKLdEeEQCnrU=s&2-MUf`}myP@abq3PK2wfJuLe27sUtAUZC0P0X& zDr0;fg8%Z)?2>v?&~EoS<-30yep{ddI1iyCCuebmBvR|`b2GjGPN*I5DQ%-+{ffc% zWe10|E@zS8PbGw8+&|8bBf0}zkx9KRwDoWVL?`~#onz%I$(h+K*H@Bz-){gNL6gr* zFlmY`BBG!ZJVu42^Z2;KWVt)(CP(3LH$}I!z6xHF zBj4!6#&Mv->uQW9kYVM~@Uyzrg+OBhN=-uJ0p)TQY$}W(s!QsqF?!2N>NRpAB|w1= zl1VLye$RZ(wM4jFIO{I~Aoz}$v0GXDf7$xTKe8dbHD|RG{b~d5f9$@BxeT_~Ky!G# z-p2rJqva)afe0yLnL%VAR_#=tmaT?HfAX}g4#vTfZ)zyy&TW@=t_VS&lYUP~Xv~W; zub>9jQU1mUgBiv6#3W3cF4CX1^__I>o^guG(!gT#Kg{xuTU; z&HalPA#f(&0mx=9U$KIE#CjJ!3aV4q?)3H6?==g!eaxnI@Cw;~-9FQfo%PAT`~%K= z|1!rrB*d1pb~=6L4X4-`ca}$p>ZwkXsG)o=Qs0>9!YEsY*iusxb7n;khWWL$0(=Nt z7x{BFZn2&H)}BH~n8zm%)e5nCN?0sKvuRvd>X2ipXZ9(as2?3sc1-VEKOF9^$};4O zYs^Q)clCxxkB3UPh_gcYHg`>Y_`9*n;k>Xl5*ru!<~L87;TMhqbY7CN12w1M0J0lG zpbAtLKZ_YLC9L%m^+$nVaRo2~__VOHt26tJ5j7ZMmJ_^whL5Pp%5NF%BNVpI;didu zj-5IFf)3MUMm!Y8$5;QipA34tw+Q!_&Td0a*Y)OMHKn-R91Rn*aDHX+%cRb7TOkH0 zB-nrZ!X|v_KIp%PJR$Bz4%fmYD)PQuh3+0mmH~m5v&bk~SNZ=V;A`mA4iF?{LS_K3 z5=V@t>SaNiuVcHp7m+l9(uB~!jDDi&2&11IF1lI&dUT8;%1FZ4aC2=1c7z79CICuM zr3YS|#=+c720s}$Sq!`p%$slXq-^c|)nBm4Su}{R{vKpAA}6j#-Z_Fi0#Css^hA^7 zd#Bu~cwHR5lZjI4*E7{c%WLatUrF?msf>tVX;$7k(}kybK}2rSz|WyZo*w&902l<^ zCHkO0!5o5f1fcrnG5EbCJ6dWs8ZrsJyi%zfH8{zvCaUm|R4j;V>Qmsw)f3H98bvr8 z$7w{4jIzV4cYkL}8VZ9_aLD$cDMnxoMFoKCW!fCoZYz?R>{@0Nv4Yh}qa#h&pQ$@< znGDC>>-Jj^0p`4*04eTQ%o_^H=f9OVe%;Y)?l;#9Ei@Gky#|bkKP|fiNe+zO@lpBp zc%n3KK4$_`2@JW5lG4eua;Ozz?iOmp6b4cJ?;M4l#uoukzTcZWE9qPKaX7Nc$h?Yz z!}qnRBH(&)`m)e~c~xn|g0qz`3eZ3cn9b8!uOI@NW~f(YQVr%2!)_^dD<5fY-Vp4A z)6nej*tRM3mnnMj zm&(HRPChHaXVVUo=3p_q-au@1m&NC;3J4@(UNep|VGJ>qPBOwE?k<>sUk)7uP79o> zUc)4jadEGXjw0qi9`3*P0ob8tTZSb- zrI@z*FJ+@hpVrZ*z?aiFkR(aw>%jYf#)SuTu6X0sXzm=5(uH?m*FHF}_Wl7vzx*Jj z;X0HQX>m%)Z2?Qnm0}ukvnw{(N5~9-fH3~r^#x;VBFG?g_T7;&r)5KyhUttb=>QB3 zJz1t-rop+4AzNu>P`b}7V{jCN8&Gm_Ie9h~I+r$08u@;Vy+etnm;O_E0t#0HShMV| zbGGhG?u(rbmphG|2zD=dKsS6sabL>_=$Mpez&TlRSaO$x{6JPxKU~p}C4qH1X{pjGSTM4c>_R832`~O3A3qYt-{n`=~P2c z0>y`!*H;kcb$uH5JwxCHiBe>1drORn`28l5uDB~%87KzbL5}~js^9}1!X2@u@tXw^2(HL=$DX&TDIW%DX((w4P@{-$z5gMKmdAy-`k)3y7~9m2a^_sq;_ z-{P{A!+mF>!ZfOUa0Qp( zAdx-Ru`%3-zL}{~frjIx1xD;P`u|QWIdPh$vKp79UOI_b8~?`AxQIBM-P2%~q&74U zzxR++Xy!C(^ADIK@~HRoxRMlKny#hl+#mJbg^Ygr&AD9r4YXz)Ur;Mz;wt+2H7-I|J(ixmf+viym4uni|9)APaIR_)0y>){ldm1VQp>h0>bo5evDZ{37BGKZ5 zn0t&ix{Lc=JV?M>@pjIHq-n^r5(8>x$ZwYN$;oJ831yuU;5=LD3#y&v^cJ-6Q`?Z? zXaGu9B)NIv_X?{Y$dpNu;|dRV(|cvbL)H}E8lG`nlnJ73Sg|!?8db9PTc$l9`BWqh ziePZMu+38_`3lhO4`Z5!OrfggNxc<4q!SpCSWih=h9?mxZ}`7t!|bk8;Ko6j@JMfM z&nJ6cpteI~3#DDQdIuopUf)jRhdyx8jirUGTeGQv z&E|`BzFOC#dzBVim=Y}xEGn`^3i>=?8S=7-H>A?9g0WruI{`2JOC#rPTSGp+ZR67a zp#73s2DHYQhN(ZQp)5D@3C(MXJbU?#*zYq7wST3j9|%=}5mX{Ja6zcph@0K$iBb1@ zgmll3?rb%+oxpFsJhryQE`Uvh{rp}=0p#md9Lr<>=*p@yQb_8q`>DEcMXHknjFVPO zGM-k`B{u{#5re>?H122Am-J?X+U@<{8n@x#-8bv8WCa~7Gq!4Nw->@SKTt6G*hyn# znF#Q6c(;*#zq`};jEn;wv|m4T7_*uxFvra()y~dt$)iu^3x);`{oApzO^MCN0 zJ+9{(3V0`a@ijX|Z+Vyx+I(hv1pV^t*8?zj%3NWpY%K6d>jVQ;+xfeV5Z?tr15o=Iz=S_n1tLVQprFJb!C zyg{ID#0ic&Z74KoBeVXb1uKY(EmU5(N z^ZU{FYp1p6Tn3d__7JX32&k{b4Unh5^bYC%(g6Ez`+B{1Ze}QoxyTbi~{0kDzmQGp{@st2ps37 z22||1v%7S_d5>AhkV*9I47~GfWE;9%j}kr_W1*06CCKr*gVckKJE%`-{j2m4Or*A% zEx~T_)%l!MqYDp9=*yLZ$?9p0U%!56=CV{(-7Wyu*szMLA?ghi^05)eJr)Db5iltv z6VbhxWzWKSS5L~;6>M1xoWFa;#MFs}PF_yi6mnaO z&0t*Nv$(3@;#t3WWgEYwpE$1-r!jb>&HB>oU<)}3&3RFs{wxe7@B4#tcAy*I-~&b4`=gGp|uG+ZhGnLGOa0k-N9!*shm z`=Tp2C2?y8on^}O0UD;`wc$SZG9|gp?P`$Tm%cHd>qoh9>ZfHLIOa;rq&?;6D`I=A zTSB?u&BB$%MO{(ih9fE#Z?rv9f(bB&bYL^Otkf?%-sAtfHzY43PNe3(*KS{fJX&1_ zJ&>>qe4yTw^Hz_dN z$;q3%GaqEdbI?{v<4D3tOUL1@PhUJ3n=i|k+_y1mJC>8Yx2?*hYm!7kr8RKd=0qN= zvH<@-0KmJM;R?Mf#kGfwSLz24J11>w>=VH<=n!QYC&O-}j#&^E%_XqI3A>^GDEXUb z@M-^zPLWd2IF@N!FqxaBS?a>;B2Jmf37|OsMCeOpN6hoqXkF7zf~D!|61u=LpIX8= z7;!q|3(Kmwb+A4e^iaz^o~sIG`nass;*O*xj{am&6uKbFd&vg1+*kz+q|`dykv|?-kU;}cu-og8UQM5YGU=N8hN6CBGAJkn49_>khOR2gL~kmP z@2!4b2`C8o$|$e7L_7de?iR!o{3lZ>pH^OsE*M4wJs5<>rKX7k@48<;=sO-lfl3W9 zjakNTWoGr5O_*>#^^dgrrIcjE(Lj=86@VQ1AJvoHC(X(^5wBpDF&ct1BB~PCq;q&5gq!0#XSyDENmYq*25j%5sN}X2&RwW*Mi|098|DH zgvYsf5_jc{gf-}+qkqHk@ zM=~yX8l{21MY>C89}*ZwhjppQfC;T_0VxD)ulT|mfAHrkwQX3Jl|L8W{7=D#ZiKgg zsK;Q_Xf%YFDaB_L;L7C6KOoGm%Dx)FZZT}uHz7S*&9?{()QviDSamC+DXND7e1QBkHDZu%HRgQ9{^w`(g zJn1p9zgf9)wBF1_aHAdJVn%+YhLo209!9*!LP;hn2=OniG?u3UX_ifd6#whyEYrnQ zbKQWI6eU;XTX2@r`GO`1U}qSmVeS(A;>9#|(GDvpv<3Mbkpob$CpYCP%%7oSW5H>k zj4-LAdqhh?r7Ud2pL|*4cDq?AJzu|VV|?}Cb=?2q8orQCG;=-5A9s11_8+FfTrry{ zEq+U;RTv-hGJNYX2SDeDq}sGkfP*?bQY@J%@n7TJhk%!jRKHuks`MZbx!xARVfiGV z4$ijIk>P$qXKLslK72(;%3?;CR>WZkAS3?`suLDr{iT&rMMp6twu)5p{Hzvgz%NwV ziU0{wSSy8%>xRyF4z?0mWqTZ(j=L`19U%-4h5y88)46UNv!fnY>3ROlku{jp0vC#S zQhU1c4wqZ{OL(kA{By6ft6Y#(JgcggjtN}6W5%C9%(+a-m08>GbzD;pE$m>C{1$ouv|{(7+jV+xUQot6bIC)$Q*N4L}vEtcN~7!s*i;dpUF3?Dai$| z!P2W(Z(!(f=0po;v3;pHry8uH8*DhJNPI(|7B z0=4SVRjcG?(!;hZNd9FcM52)5Z%Orz7eln7D}@@zC)BHtqu|fft{YrHaT0GtXqTqp z7v4JSnV zzNkqGccFaFi-o>YreD&n*g^rDJWRGWmNSU3xMg+aOV`8zhhfZy)tF4MqSAS27?e9V z3^4sm`g7uH1@Q0K^q8&-`CSex!_aB9sc5PzmR~iHDFfP$&9y|)sVW#W*N{iEXmlcZ zjgDDRCw3!I{^CSn=E%0EDQUuUOgA)aql^y5w~0s(8*pl}7_;HmX$wZ_MycoyxJbsd zqF+)pf~a{gTL$u%HLkv}483%_AI z+1>excicVTRHf?|d3@>k|9;=Sf4;nKe(=4ei4S4FeEkR7`d??qMGBX zCU^wXqS24hUj(mEx6)|WU!g1iE`eT8xNGJCmgI5OW6xv5Vf{p@1tyi8&ON-D` zTQRe0N7C?x*t|O6X(bMl6|)Ga{GvpulL_-XoE|50aF7A3;qb-22dbA-j zUZ-)lTu(=z8A^5qZv^0$fnutbpuR|f|KTpSTkBb^>JbN)f(-yQ{6E}q`xZv4i`2`B+`Dd z=dq~QhAWn9q3doo3g!D3)!DsemlTnU;mOPRf7Em-T-kIyHXeUsp;hicK*4}PS3hMe zpWc^UDSB1UpYe4b$^pjJ6^auhD<7Q&fI*qRzK}XH5+bb)XHx8N7;?jAYZW~lR!_6) zq%l6#zvYwF0gcT@x>hptA=gG=cE289xoI(H+esW{y_K`?G0`}e1pG<0AHQJT^>)|I zwdtSOO~FKx6eC3N^jvr;J>LOgNB1h?{+DZk(0j;1?oj9C|$>Qe+)abC=W*PV8 zu5*qZgd!?jr)kW;i)WgX#7=qQ7?Nq}%b75v*5m^E$0ec6tYYM9RFa#2ue-wH`B${r zvWCv+G&ButW_1(?LUBP%!ubSeMV$<-ls#*dLl+M5c>6z7$x!nw@?MtbkWFe7kpyG3=g3t z2iL%8wBqp71tX(jn4lKK7w8Kj$aWZL2_AWv&)mVPx!hCpRJ9)z&m9Is!MnlU!DD9y zXqA=?;a3_k)Oc%draAB?0BMt)p%7hEymU+d!r6>224wzxrv25gIMeNMGi*}I#ZC;I2rsS3#B)Dmt65)=*qFvz z33pH7a_KXw4KaH{I_AHZ)+|mOehf zp?H$td*9|`!lK`0E=|K>LaJw)13@Q2zdw@ABFEtPfjYP1kK@Qqba!LJGlusZmQMhR z7)Z}4LkvFgRpc5=!!KNY-gcS`i{cnvQvCyxm|f`3TLCIY%)Oud#=vH_9LzKW)K49? z@b+7;p)Gz1L$ti08fow_QC`3wnO5u4nhi>&Op(P$$q**FEzcvIYLd{{Yp#H=i~}A? zRUUL7D1~@t)+HmBT}UUmnzu01pJBdUEoi*`xeUdT2*^C9Pdav|d!|>{2k6%JVoJt$ zj-~^jW~WsXcT*&}1lw)3UAK>N_;GWr*7Yq7$?I|g%CLNL>|$XUD;j~=2(aN6x-{8{ez|=NWbw5_Lt=tR0U$}js zz(Oz!-{u|&lyRko%R0t=+rX2iANT+oI^i(5_xo~`=9IUK`Tyqqszz+=R5C-;Z( z#7wkl(d^`0wFX>enG(2YK1t&xev=#~LYU|~P~e18S~+@7N|{e8jC0Dpb3GbPG?TEE z2^opZjYJSC34}hQlsywti-!1e-`!v0kG}5o13peZ5>oyB9jO$MgA5+z0sr<*C1Y1H zbaTulnrL-{_enH;Px!nys6q>=825xQJSbLqR0NR*Z`G^1*b=VUPM+0(o3pjOqxfWf*e ztPEfQS!&FYHTq@xbs!7vn{tGxo5Uzy2qI%430jR~eVhrZ(c{xFJ~g_a7@acEQ(P#f zQ%8%?b9>Cba~&EPlt)C>oEX6AEy2m*@Dfrvbj{hCm$h)eXDfxoIwqv;3``Q@orgMV zk#9KTj1MUJmXky54;;lHOJ|J%(ECr2HK!B~6aUUA?=wzy)xv95XxUp+dSxP5NaiIH zZ0M%UhMSY}+iEFu=~6xoLHl83A&B9D*@65=+}EP;n1uemi~c$;(@F zC^=GFl^zVR11Ph6mWgup1zg+N$I(D8-y6O>jt6M?to)V#iQIMf{muO{0unxNv*qU$ z?H}Hu{>;ydgtlGXvsxb|ZKOZh=6v5t?CLy}JuP9^D>yjb%?NH5+TyaZ;xGV*d95{; zbPdRGll`o+40<=?LuNc2SnH!rtGcm^Nk|LyueGE2KJ{4UN7$-49Dj9=%vXD)R{MNB z9=}{Rs_ZA!eQdtcsEk`{)HhKZv^bAkkT9(o65JOANO(^9@&4J#h>$*OJ_^LRTh4BN zERcdk3iDtkP8Z8DjN zCJghfvt=@mf;Kq&OO_h0AszX%cLkIFNqT?#f5}a9UI%BroRs;Rw_aCDl2>2!Pox`b4L1X$&2D1fszF+-TE%C2u5QR`;yk^DUOwhdoe=VItS{*5B1pf<&TY?rF_ z+!O#vWi;zvX3-TVOX=ZOgm8 z--ZvnIrnkN%;YkRbpD|yZ&09&al%}C>ZPVe9 zkl!uqUih(HBp;lZ9=$HZh^z4&QP?n_Xn1k=9AyqeHFeYQ-+KYPY#Z*6V}+fFE{SDd zxAJyX87F2ah*^&%C5XWxLPaGbQIi>|+rRL3yIvY=4ftV-V}JZbK9paDRMP^-t2UV2 zbFn`3e)qbqs89xb`39Jjp6z?ClWmX-#em^*FY=T#A*AkVtFZd#;TEesI4(-Yyvf%h z9Dr>xflRZdL6d*YI>=U_sF+Vynbc&Wv|x`+m0-Hh9wGjuTU!X_9`5^#(20IS2^0KY zJIfZB?v80=MfB*-A1&!p#px2C`8)4dFS#Ki%I^F?76zahzz$2R%6acJj(PR_#nRuO zZLe6I99VYyvwksFK$~Dnnbv{A;nQGb`n6T-Ot4?}Mn;Pl6GwUyRc~RCz<6`E8)>Sv zOX{$|ZO$9b1eTf6D$^fW>v%T9T2GZKqg^xR36Jh`s*owU2`Mw%Gi#DPs34K3&`Yvh z`he|R%ojqOU!iQd+Sb6c&JVq0FaZAJ=u-9+##G!TrVP#2PE=3;jNiGw%WGybfL5;+Y45X=Vh(a{ z>7qjY>b2}n(gDSw;sK@RLK;J=gSf4LK({>9EBO+;qFJ$Ke;SLDHSw0v+!nwlRH~Qz zNz4x^*oW&G>=RhY#^~?Fv5u1Il{#8?n=Ny!kC?5?w?6uH$JBQkeoW$-y@6pF4 z$r!DQlJXPfYubEn+@&kOPFHm-{(l@3Nvom?JsVde(9)l`bFB{O~Y zQO^NV*sqp4FmT>g(}r_z^*QFVdq-IO0Teyize3F;oU)KlXi54j>8=2{3no^YA-zsx;ILy2R`!1ZB>f z%MofXuF0&j!BAojb4Tp!RQMp>9d>@uYhr+?sJy@za{q{6=7o}XQ{Mq#gS%BH^RNGJ zAm-2CFt~{a5QW%wUkQ5Yn~)#h9F7q~EjYZi5;5yqu#q@>d%0j!qObPl4BNO8GIdx= z3=dii<&({zuE7QCi48Lo!~emZK(j1ZM1Fm)$qz!si19b%_C25CG|@z0#qu!yJ=qz9E(guYh(ZZrm3yC;5#cev`Mn03 z*6#Ehkr)D40b%cg(nCxRanF#6qn!JF)@2Hs%4z|4O~d-_7Z zEmw({OQ^VXD=R$xk{`?_mHmWK^{V_1`i0&B^>Nu5{`SWiT-wmGa)i)R^EPxRV2bo- zjbeS_J?M##V)~F%?n*a)jXu$xd)0QCP$U4W{=%uEo;*Mi7)z!^wg(}@pa_)EtRo0+ zse5d`6`^eEEO2X5{qG26rc;$t$_J~h9;c*$(TLmT(u8)849Q;+?o`E3QCOI^$ck-H z`m4HHo%w!YM#ypb+Z0Hh>~Tv*E4aWi!cv`qHo-4rA{ymIuwU_j4$e7OoCybWbEfD2 zAAn6s{qSN2aW+PQAR$=dFpS~XY+t`@s1D+3D-k0F{)!Vb8pd}Tacg%9eCICyLon-4q>Vj><$Vi)p@K<9Q;no%}J-)NUmo1Cj zrN7_y^p7ovwby6uC$9EYklKafPB{G^{(HtCWWK9TMDp%RtvI&?hFZ){`*Lv`E_#YRCkiTl1k2<6&+3#*j-HbOb`_t9D# zK+y3Pr{d3NOF=Nfpe>agAX-%Q2m_?}Z7a$sfCs?DYae8%iSEy)@o~@-`-;2^HUml5 z{f$3=!UTV_=aFB)o1St3py!EXKA#wMZdN8e-@Sbzt_FzlltoGgWlSGZ(S1-;0b>m{ zWW*N=%8ulvU1zY9(=>mxjaku&)0qWCOSX2BZvr`AAv8l+`C#*wIE+I7%-pX5&D2VC z#UQAQ;~S#f5{;Vsv;9x|oqrzmBd{pBw;4jGyt0H<*LNf}6y#Z0aSdI(qe}n~*ume3 zfYIyI?lAhfe)yD4(z2{gtFeH9veb~Lo7m~hbW=qq5eAH)rz}9(%63o$u|x@$pv|Rd zk2D7^u4KHUaX`Th+YC5?haS#%W1bV~L8%7emsGz!h;WIqOZoqmoxY`VT?Sqo=P^Uj z@)yX%uRk26JVIG41ytVKI%Eqn_PybrjgFX;*=?L!zBmw~zerWs_XXF$u!O~P1wGEL z@j*Yj!3izM)3wKACweiKwqBOIR6s--DkI54<91T!wCfGFX$gl5S{Cc4PzSEYA&NR} z(R3cfrgV;Nf4x3?G%d&|fqx?eZ%*@a6^tM{RRs;rFy7SG&PlKwpWTGZ+Egcxb~s@| zBnOUz40?%Nr6Bh)%%_c%z5>OOHRIXWYV!y>XMqmW$e7iCQwBu}DjSmr3Tib}F0jy7 zzFWk7fbARX$yjPlUrjyTnQ zYRcaaDa*pMml&3{3)SC@06LXPv4!hw$9%Wv(BplDbh(=!dqX)u9YR+GEP`zE0mD>I zXm_U;M>9;@Qzq_VsLP(J>Kgzr{YB1*Spib0b zLR-PnZAfyjI>6kG;b#21jA14?vY)jaUSjuHLvQ!q(6hcw;Efu zbio>$Yh9Hx8TjE%+mY5@0&AMnCx~5x?u-4`%hf8A?RS+D>V#k7U zR;o9lxV){8vNbWCn86xh%ec-t@5FOz zb!UyBNDi88a3$4vFR<&g(l1Uoa1xGr`;~Ld?^eFSew$w306LQAxbwYM0>7&4oNHGJYaRWWmlm#~&HfA`J<-60 z3^y&m`D3H4B?&fisF{%usO#tJc5t8dkh(IMKL4)x?u#`lC4^DqqU~s-c0cAz8=BSw zp~S;_tb$jl&cYbf$*T!#K3jqgnuRiXVIHz=$1*ErKbW`FU98q{>xrBGA}Z%_sy8fR z8=VNLNGur&o>S#}RE#49De=v3N;^gs!pN~8DKeOSi?)J|L*IipCwx8zEj&iiB)uSk z5szOq(Tu&XqWoIrjxW0SX#))sX$fO5-&T{VQCx{J_`*_8EajTt|74Cms9rIX+-Lm& z@kXF>gkn>0z;#QML9&`Exp*5H z4KsFmrrlt9x$pM1Y&Rpn`PMC&kV_XsQs@1Vk7mEKu#~k)=}5oq+zi245LPagLZ*hp zNlKvyvl;}sthKX-m)iReFy879XmjqHi<6!&+Y1Drw@Vp6#Aotp-rhwfoo@Z-=0~o1 z^JRN3rO&KMo}EeRlQ&$*XzwNSp)x>gzzE}k3CiAkop&(sKA0i>=z*Jxsk5S+TJu2R zlMLsG1owBQJ8nYf#>a1_QOI}iT_P?~%84~HpfLlX>@^~i>Tiy&a+ha9(b)n1e+6`@ z%YV(<{er@?&f3w$k;oZ6!3EqqkP(EV144%roxmmFTG(@dVCB|h#>9MRDaK}y^yT*^ z)h;y*#p4cMphKaXwrgwgN1!dR?x~f|wYKh*rJdE`Y}VHWnoMX@5rCX5E6s6*&@*rw zsYbz!EE5FMdNX|$wXOy6Y~lq{a7}<$30;Cz!hXuxygkmV>QKjYtVM{=0L_bEo>)qffsDcQ(3%RKxK$q~!lx){E=_?Ys1ca=PuoDSJnJ?$j( zyd)I#%(G`N@-tkF+-)&5Rq96U`-N_mmo!BVzXC^$m7xc_a90HUcnc z)SfkNE=KqzEiNe^ox5;-X`SI77Zfu=DyC2Xfz;PQUf5mODE;AwNQMuoh;P{MGGjfx z4*?O^0I~crX_dpNA`76ub+l<&oGw0GMN4MoJai4$Aqi5+61DlQux#G2s8k-f1(X(( zjncd^`I~S-LFrZ)LsS<~y3QRv7+~gcVY75`!x-(O9t~jG+G5#^7Us`OaE=|C(U&To zu9(~_W{MTH^OhkXX|aYX;ep|{^QcRAlfF}I3&}vevX?^bXJUs=Bq4VLyj3!$nqoCZ zn>KR<-{0<$pixicap+s0{(6hX#eVR;c;q6N0y>+G{>UftY=se^hFbpe^LKz^0>L&e z*W2auCrBx;#%{=cokg1f)T3NUrCQXuS~d04AE`0Vs+CXhHqT&n=w<~_=v#Kbo6P#V zjZ==3C^F3v5m^<9d3if^2QS2n3pdblGMeN=2b2vJ&GIgK)I)GqD&h$xD| z=lNgl4;Vr7XyV1{D-7^>Hz!b!1rFEMrR3R~dzd5%TK#;&K-U*~{qbPI5by*_YBA$8RqN^sIELj0!USWbU@z8HLNqAdk^ z(Qll`I13x74)XL_3%k$ZjmTrVMFaehYbJ)lBmvQ4iIO3N6vkI?1rG(9_;t(ll?WVsX1x|9}*p}x&=(uMFgCL)kbm1wG&j&WlgZaA7AEROpmZgbTe;Ya?4Ypi%b@Ah~i#yg{F-3>7+1FBI1RrkwEC6 z!9jcXvXz|l)J~$!k|=aWr{62=4b#C0lirX@CZaZ^zILw`GP;2(uuigtRXKRGm6e!# zuN*Ln%l1Yt9!mjo2NO?;HnlUb2{1E@k@DSJ;$x`HYP_J*0%i=ZMwYr!=Y6#~H1#Tw zQ5T$kCt_!%LUb2J3UBmMePbN2KH_mFNd$1D#m=y>z0Tum`I)&^biWSG)uAGn=_z1n z=iVE|r<2nIGvs-nkAEV`+}v2}j;?grQt7uSB*AWuGz(NwI+h}g>{lo4t?NC?UT1%@ zC*Ik!fIdYH5zIxE?Nb{HC8xbIz`rHCShir6Ea~LqWTn`{J^stMAu`~X2eOBa^mO+J z_lJ&0WmDF3QB$J_a*}lPA3-psM<_LcFVNW``b&#jPRZo5S)xOSAHvmtcgXOf5_d`s zY90W_gGqfhh9&RuIG2xLi;qeX&7yNpn;VJm?Xl$*`8}Q$`I)V4nrYd4%##}QD|Hc6L zan$GFER=53k3giY7@Apv#+KBPMPcuy45+zZuT!Hri8PdlKO#D$2ZFhMxP3&4FGp0l zTLM1a-Gf&+M5gzuU1oYzO^#1mvA2xslkvYrq5p%!SfF+O#I!K#*p!Vm#{YlXR#P|^I_6?;El zUn*k4q2 zEtX~QDvOd8v?4cj&oc~00Lz_(rs}HH2R}1C!Bn;u+5*zaJ}E?~1ra+%22{2(Ignv8 z<7ES(20Qs~OD^$^4p`Q1TaGwYxTw~L2Ep%UVf@mxByb^&I=(sH0P^a5(w7Jvw|{n- zu*=+cjaWl8@CSGF8oT`X?Of z?F>t~X!fwEk)ma%9B8xOXOqVe?VRWwQCg-&u1^7gcNv&p++V_d&^h6)BV(8kLG;Ij z=VTX{?{dkeRWY{9+~2iojAg|0U@+qlwV0nCv-zWOB1$ZWR zOqm!*wUMxCW`pkZh7j6U&ytfr&nh3Uok2hY5qWv`RO{g9kPrxg3)M1|RbEA7EtFwB zw<5L_kvc4u5Z(q^FE)lRjHt(#J<+M8bQfZsKj`D71YfkuzG#xFQ>-w7ahc@`Gwj`} z)?*lMyFt~ZS2>87x;h(o&1*E^se2vXWo7|UCABM~Er0UK&mxp1)rOHTy7yxz=eM2=G{P8 zrfJ}CKF6(IXYC2IeYc_}78^*tho|S!0N+yTE~}KL$eImMXBiSzZ@Dz`Itox%pMw@` zNL_FOnbJ%XxWf>|zMKSd{RXu0U^7ZT81 zB=hsEs#qR9QDpme##)(iT$J7dhTeG+z4N|20oC7)zNlhIXwPUFfeeCB_9OUtVLhb@0ATCh&93=8 z0wJk-dzKvK=QP9nCriwc06XI%(GS#vyfaJW=kYsS>(F+k@F@;9m~-K143MNE_bP!% zu^|t!!PC3-s-TGE!@aZtzFr&@Opn$;v>#pePtSaR;=)`s47>;f~?@1eHDtI0~Q z1xU{$A`DUa=6P9Dy5gQB&emTM8l;K#8piY762_XlD`*39IjnueB=b$&(RT3UK-H!& z0GDkuJed|kOeZ%cb+apv2JDR&fS6cpI3#aXrB4;Ix?uY4aSzRC>W+FnDR@|so=V&g zP($g!eH1BTP{6QQlcqr;eNnS{TnEK-tzUpq$-fMeub%%O#+E8kh;N1~O{sc#S&kez;Z)PFKv249~a z5>;17l+233LQ|-BF%v<#YRD_|#DQm;kaAx>rOGzQ0M2<_`_-x6+v&ND?8a}=Y!Wnn zz1Su>J=iFq*$fOeAa?bV98|$J5?&r-Z+A0c=SGLlQ9(x3^;};X1;XDtgP$ z=(M?FL83lY-Y^x1x*I0)6TIYB-iej3Q@49vJe@8bu(3WnVa^p~Lh88zWV4}bYYv<8 z^I`XyuJ^P8(m&>Sw$21(x;ON;9j4AE^(~ZwiOKgP98-3-p5zPEda=v(y z0cagiE*pJLN*C#3|9)m7F1~(Eb8bFWmD!3!hE`4vLLoAHdHfRGcv$zjkPL}4auW^3 z-iKg5TyCUiVJ)L4yQtv9NHb=I?1iTc{)gw1i08N=W{w*xx=0V?Ni8%eh z;FV4nP@F2iTt`$?S26PVvuK#OhLz6?MjB1-h~PCOxS$ZbNmmEzHS(z*jF_H8ca*VX zV5<5P`xJzE92fy5DUK|;QFgb2N%t<8(ra%lWq1*s-V905DtlT?$ksv2{155$W##o8 z&|xF;?n5jJ*WmXFqN3)cXO9B{t%~8W)%%9vVE*0?JtQap|VJyoHwkd%D6DjCm9tLIqh*`$(!8%BfS5*@$%g z>3G1gjhD0-4>4z@(_~v`{vduzTSd;GlwVpTfWtJLd63!*E|a0=M&p>VYuzU_Gp+)_ zhQ7w%VpD#m5RWDT!!pD%gu!LX)g>ZX+R?U3pwZj5d4T5%3fFp3Ui%a@FyX`2+DKwN zpX)C)H0(nWdzk!b1p{yYFf5#<;6+fvCL2x#oXs&c|7m&eGU}q^FKkeW^EKz^egy)} z!5p3AiV^}2<;1T7fn=TDMfu_0?(Oxo-oAb)~PNS9@te6TmsnQ8I-rF7kqBuQ!pVuQQ! zAEWR6?Ow?UcA!|FieMto`2HwdG#?7wDuY6MjQCVY*VrTSbL zL{OL5-!rS(Bi`cRScXvGNHv5Zvstz1-Vfu?zDK2Cwo`&cgJs(S{I{+)=GEdVpLv2- znU7qhTpp1aQgnB3jMk^XF}&h&m5BYnDy~=Cp_?=vTh*Z8|)Jt*2M;iZ-#1 zRQ5%qS5nCxXZ~^gc1SdxWDB{zZmaz(_495=L4i;NIwiEP2 z>M4FBrtoQ)+KbKY79XAa7J{(j?LFvSniGC3i`6xAN4D`) zy`Dp#Mn6z=SlU0n^?kCpt-ZH!8y>AUZzL7J2$PkZ|AStX&L>~5o7kR~6#vD`x52q} zOyh*5&NN?`&F+4nyh^u}Uxg^^mmDLw;(g6jLgl@mzNS-pC)I zXKl23baVDz1?rOQX5pD|dE~=6_^tVS4ukGM0^q9yC>d}fC5uUlF0S#!T}E9}wP(yl zgE^d{g}g^0tcBK@g+&FK=DVB$y${Ak^yA~@(4a~u3W_Ocr6g?w#p3AgNW?qlYJJ+U z@aNLN0_wVASKqiZW!DCRW#)Ewv6iHuG3@8>LH?qGnj#V5%6lp)K~yP@-qv^6G?h`l zQ6au~+A=rTb->nQ(!ZP-`_XVI1ib2xPqWD9bLO5tLJdn{20@rAVR%YHemQxHLw0h9 zoGtZsK^={Sf(NjIf=d<5l>LVfG>wm0QeR|_pLn1NTZU~yL}dWqqoI-Yx@}N`M}y!VFb4~waiPQ6)kea~qKzM{xr2DI zLZRTvm^&R?g}j9Z;wsBlUSPzq#t?W>sf6=aQ`{@vrG$c+OG3=gT+~MKT9KM z{_Dg|YtJM9yWJs|9d?dao5g*KQj!E6m0K2U(g*ZRDs^ zvY&NMm33r^+2F4qA^``5MLF*K-8Qv@EM-(m9zJP`4m(R{JT=EiIv=$^g0IJHwps?j z;c;|zi}Ym{Il@sc<+-!GN)9%MDu)%E{BM@s%-hNwNk$pbID0({{ZiM{H#0p^;e6%~ zF@WB*1e&(Wvwk%NA%5AZo^7-bOIVAih=V=ak^x$Y_KL&|9IK;PstdWF2Ur9>luJLE z2|neolAz0EJX?taC@2CLbIf}_n|zV=c~}}$#M9Jnc)qERV%&!Nsm0A0Nx45q7Z7S% zKP%&2>+-2Br*qW4NHT`K`idUe`S?5xQv1ubbjD$eq)q_`kA+_&0d0!aP z>U;1=o3i6$ghtoyIw8^6Ab9xIXIkLj_(D1S2iBgA(%nqrbq=q`)u~IJfe(zUkvQ?P z5Hk;(om1&V*XvdXETtXqeQuaGshO+2cjX}6}%ua(BH^@af2Rx zjXGy0c$Ag*ew-!jPNHiH%y%gD(EPo*n6{}hp9=}e2gs>G{mHDBEIPg$41)|Fr`(*Y zZ#$)H9C-)NyBQk}=~f6GZ2q4AVrCUC21F!>XuNg&JMJE%0)ZBA!t9Au5BU-Spuydo zz}vqv_DJE5zE3{d9$0UTqCsFky4Yeal-M)eq0SOZIQWkfptYzDzqho4%^2L+Tplz9 z5}x&b^C1z0d2v5p%TZ~sTjiQ%eCYiL09?2kJus#l{vaCZ7e^XrZErmE4Fznb6DP!$ zFe4M2TB3vN^pcy@brJEQV%&k|{RJq^-p6Shdg6;w_uJpx0D^sbr}2O+fBzX*(r`f; zrV_8E;AVP2>8Sp+wNUg|(3JH~;2Wg%y#)9L4gM}I_prq3I?<`wQKS8~YT&>ssCJkz zR1O=07zYsYHiab@TIlD0*(e+|8sc(mqB+ZfRCcTZ%)`UA0(mA~?bpB%AFcyPsJ&LS z78vSfOu=^m1y4W6k?stlw_c5D&g{9Gr(kg_zp@#v4GuCVD%_{fO-^gk7Tqc+KhuZAJ+jF8_*v4`(Z%;jxeXO=Ob1%X<0&gc# zM!TgaLoTTo_JUDg(SjSxQZ>q$x|8Y~8+-S12!&$xxOD86`z>&p@pn54J&Wl&3=o&; z2-T`iUt76tOYCUfx{-#yPDvVZCEmwsU(1PfT$ZuJIpMQgzf#y#S%Xx4C!#CGr z1rFN95zR*@-~EHk#dUo=ngqZj#)a9D4vF)T?~bo zGrM-}C@EkgeVYd>2w73-clwp<7VTNF1XY#NJrlyXxh!W=ey}RdEJGT9=OdxC8n0%? z>Ew1?A(cQ8MH9Kbw&6_1AbK-3fH?v*LIvMW_0jRcShEN{yoyzEg87GK^MYQ)XoM{n zJ39R6UVyAr3sVn&=LMQG>RQxgaFiwkHJHR5ev8|Q!f}sAPd?jOEd9mRxQR7W7#4!6 zhN-Wms-In&k}^C)n})pyw`te@0qhE)1123m-=RyV`!dCoKJ4E+G2S6{qg3m%Bp_}Z zl;t5Q>oB_7F?T4|o9b<$tznYPLDr-s>-al2S7k=SwbA9{zS#dkoylb#M{Lq(3KZNJ zQM>(@Ikr5LCN#Ac*O1&z)7WBc#w|Nbyxtpi?Gr&RxsfqOqG` zn#c%NQHDaKxeN&#lA%9j>#*op#@Va z@G-Sld9IKyrqUtLyU>v%%S}<&M$m&<=TaI}_;v~aW7rdswM5eT_*+dr<_}+cj+o!nUV?h7+3kj($lTA+{+iGR4kYzcNNqR{6>NGR-sIwA6VV$86#P3%wX! zvbOC5I{Sp`Rv778o?4vM#JAzz1%icSWzR&Q7j7a;V`M=2@S`V1@M*qLO5~xREu(j> zMb{2TPC*su836x30Kj19y2%=}x(t84gjRDpC1XGKNotKZ@Xw-R;StLuj6fP$TsnjB zo<&0weHu{FmM5MYGl$WKdLx6m-+#n~9zaJ%;N0l$ur`vqLb^x13@zBvl9cLiY4 z0Q)+Z=q{4|f?wY&7^Z7)9AB zWKs&j_tTYa83iJsVilQ1P2CR$#edzID>riKUmWQp&^GVRcqkTS{@U5QDzH;j9Q2A! za3is|!$L-aqMJWZ621Q%nm!Z*F!if-(Ke0>}W5)NpF9_$MJnlW&4^W4Zw)ML z>N21?s`T^%HnvRvQN3*$uXz?rcWYfc?XMJvb?MrNC1%UKsn1n0UJq3yNCvEE3EkRS z9;{jU8{^i+&1{{~FDM=q-}Wz`2jao6R;ZC@Z^3U*?L0Z7Sg+{ntf}a2ZxdvcI#{E4 zMFgkxoU*{Di*^&XgD2dh4zgxLgv$Hzeg+zSocs0n@KX8|jXI_ea`O$o+!`V-(Wbwz z3Xww)c1b$>Wiw;lFsz=aAaH@F6C%0MF20L(3`u8xMSUY6%1r^?|15U$@BMHSEZ?Z{&2cOBo(^W1-jP^ zdirbB0oG9rNse@?mklgYEXMvWZhblt?qVYh=GF zmB`rykRXITHCq1_!;#TN=^C)#46^>ysFMJr4l7#_iM>K7KUL{I+<`waD^x;6u%(sS zHH{*()GI<7#dK`7k5wuxeNsDJ zlPdU`AviVyw129nB$H8_+Br2Zj>@-`fO|vXh*%>XLJHMkBk;;&a4~cdPd~UZOmx_+ za^L_1JS=M~0mYNPXDp0l{shv5u4k zfFB%8qxIuma;((r1q^UZAVtPhoZH%*pt570nS;%gZHKey`r?- z5MrJrA?-tsM68|!gUtfhn!^r;d)dxPHmFi2`d`NYdC~|l!Masp`%#=B!jZ-RY7toF z_3q|E){7@~xZa*l@+E7_Bv)D`+);suLQMwDV^V~ZBDEqX*L?3dg-`p~u42$g#8H*9 zpqIJmFNyq?qkvYFnM-8B^xBn%db&goU~R$%4IiECqCn?Kg~rkpL3_O+XWyjE>rwuO z7wfQqa>tW8k@~W8uLxw%rV9<&CXxF(A1L)?usCyu(&wK49gR*?A8Tc1VZNOE_e`Oa zP023>eXo@i-XtHYST#sGC}0cK5H@fSC}@`-@;dlPxA3pr>-MUGBYtd{K_y}H{GI-B9q-C2tSk6t<`2dF&11C zwOgKj&^ty>{6CZ#kfewqYttqPp+ho5RIa?T*u#G}A6EV1O^cp_!H2&8^q)Cx+)SU& z56izu=cbe}ShIey2f__AsCSI%Vsb0^4?}T3)tY^S2N6k*H1G>S=|5LbEE-0YW~V;4 z^O{;j&)!R0)nUCxq9-AWAFyL$WMF%`>+U{fXC;lnRCA51%oHiHv#awAPb*^bB##!n zR|OotQP+Bu6YTRO;DRe5F#u|YChms_Eb*50zk3$*b*_V74!D;CLr@aDo@RZOGnYw6~cfUfmjh zVE05cuM({1o3y=GcEV-6&OCaora~+6B3s9mB!96bHcJ_tYXT3HiK47ebgGO~$cmy% zbj*|Ls_ZFr_2h?QU{ZJH#9ivpj`*KlVI9dx$g7fo`H$d#6y3@^U9;S6HKZ4M=Fkn3 zlY%`=CfD3fo$1mL!ObW4JBY#SjsIQ9xT__fb3hg8AbFd zks@vY;!^cC69zbgWZvcso~xdN4wW(pZhTZ6UYeiy6Q^~cv&!%Wxu;X9IBZA8HdBX@ z7^x72mYOlY&mmO>6K|m>00gIsa=NcTsTu9@JRkBX!ZKO4{;pr>l&2t!|M;P9t%l?t za#$(m^X3mgad%C{aEo7bf2m5|!9zl?orBm!@e1*M z2Vt=XH?8nlXBR1H{rGcs#dvGMy#_iL@(yUp`#2B|LhLf{H`*YD904fp`}?Y^bhkrL zr6xf8MOEv$zT9SiI+&49Ij9lxU7%ftsbG-p?Fdx~wl&1H^OhAaPYnon^<){6B>?dl z^*M&eRYK00Ndvg8ZlgwrrKv+n;AvC|IoqZ9m(zWoZ%VR+hgZ(DS$V47ndH^pE#~>1 zbzdOqfr!8fdAh$>=af9{qe)q3%-Qef6M1!+i;|~akfs@o-=yK)JKLn#ZS_Mg28d7T z%s2!PrVKqYO3rP0Z2dMSnumPZtW}jF$ip;@dIOn!7Dt|W224FSC0ben^(VK7e8tB* z`Xp#RnY-j$*PN;%r+sq+ps?kG%7E@cNN?i{**y&62OKRUisU+GUY9J15;o2P!PX^< zuViYna`BO52=KUoLa&QDoouz+1LYF^n@dXf9Eq(MU$)G?=4kVw=t}A}aFq<{up{)T z0p?wR`GGH1PZzZjXS)94EJ%SHR1aGmCUJw@sa;!z1|b7{S!_IGQQW`KfE=e$reXC6 zc05LX266$6LMj7eQ6L+O9*Z_N0)u7N*}~3naVoWhw{*KMndiurWLU?p-|t!+g=pH( zE4LZt%6KUq`qzFzKdHcWDSx(JcC6r-3#l$*Kje<1 zyldQ#ffDH?c!4GbJ2vg$Lt&vur5OdHkK!M5#gh%7G%~Jy5><7M0LK=7HN2Z;gU)?r zFU8;)LW&AM_d8FiQUc;(H(ZzoygE^}u^!NkwRV3=#qd4Lu;dH49}}VJjq$C91MGVl z{i6Hhrz2@hn8tuA2d>7w+aRYW0iPhy!ByjJ20e?L4STQkKlJp1Fh{0HA@dt2n@0mcaj<@r|m6eMa&v2z9sa&Pkt<@P4Vk3*S@m zrYj^1R;HTiPC0s{oX;#oH%Pn7D<=0WCuU_})r$rf)#>^|RC{C-`M9pnkN=jr6WiRd zu@kkPX^Z$w6yyg@?Ea<6#gp2^f}Q?e+c}YeN2<>YlmdryT2(s3J z{#-$y42>K5ol0ZZujj1GA%#$QJwUh!ZTU>I*d2Ex4V#1;8+>3;@uc(0wXJ$*PXUBs zF|%n`9{EPdBY|W03c=U{S9TmvCO%)vH0Soo=hU2tmprkXo5=VuxFrX5(Aky)?uwa` zB2b-&c}-%0+06rHhml>{FZU@8$*5X)zcK0e^Qbbm)7;kA+%~LhNVdE5?bk&R+a0uA zY(1Q%c$5#pRdTW*yFU_t=Ad7{$ zHV3QI6xwKnqTEl>kG!QQ8;Io_{@e?6&Lb8OM4H63N>lKXC<(?F&MoGj<=dnhV0fi7 ze?1tZM`gcNVqE?4#fmvg4sgR0AsHy1GF#VLozjz0_FhPv|C+* zBHZsw4Q~e$$l^Kn{h*%Y1Cw=|xy3iu!@Z!e5xy0-RSyv4CO?AX`5xUsZ-_x(bomR> z9T;$f5DO!7N|^kX*jA5m0ddc-{VY!DS_|dZsh;{es^^A$&|BZ{GD%*7)jJH#R{cclkVPGV#XMKywzZy zIpBp_EV__)l&TN8Z$6OPNvV+42QNR6Xf7KKT{auWufwrd8UXtjRC<2-J4bVu{j}tF zT3J-=g%sl#n-Gqs>Ib@n+69_>?A6cTwSuB!LKQ!YzM_oV#@(1|DrZ%5hgI_ns?^GG z7bkRk0>-H)?pG#oO#HfU;H+qYGjAl$yZBp0{RjLrRM$S1xDV`aqm+_~Kgg?QB1$l- zIuDm$HQ8Xzq7eaJv9Jawmdwjm=I%45ycOrNY|1|mjE3L$EgUV;5IJg0gy>d{H?~O$ z+5iJTQFb6eeEikRn!@JOy^PuV8|<7<1f7`^ZjudgvW9m|Y|Cx=gB6Ku9*IGlqWW04 zxI3=ryYT-+;O#c>Q1wUO+h0ROh zmBhFfXd5M`v#zS46ux+nx?of7qw}OJw;ae&$xe)7X}Bmo8+K=j@sc?|*l;4q7$cW% zAy36K)`e^=9gNHqxJ5jMgms%}?1nXn*ol{=6)AjwZ0IyP*o?3}=GlwD)m9y}PrOf= zcy7qH3pO;Z+~~Dr@ko>C%7(EiL5A3e9V(?`hME=)Y(4HgJkh2t znNWjZj7=K5%8c&3c`pvn{W7FJoS(>B&!#PwdHd;&Ur++`9Qj|5 zpZuywl}gZ0xcls+zf`L7yJvWe`uP*p_=XTZisu&LRI zIpgr2I0ibX7t2s@L&H#tQ{7YYPH27;x!JM6F;;NI-p-*%GFHvOc|BU6z=;Q3WampT zhUC9ghYB?y=A6n%2qhz57I17qC8OFN9Kb4Nrw-`HcpPp2U!n03n3ICukLaGV=^XU> zODYA8d2jawK(d}B1SN1Fat~JjZ6A@BuW0WvJCRBgqQ>AS1Ys7DZ`OW0Rp>hGqcw4I5opuy!6na6QZWO+ zQ3A{Ry0x=YOF0*eLd{Iuz8dj`0J zvQbO6@1}nZ$SO|j@xQ;w=FqSBjpn|aKTWce0h+W*D{^+?L)g-qHNCsFhG{@{sZKY^ zxGn%L)riv^mKRtezF!(+zlYRJPy^^7Up#OGE;TGyUXVj=r)_{Xe@w6{qaO#T%58WH zMkwezvK=(W`&Q~jO(iy0{}CkVJAL^*2n9H&e4=kc){|9igC322#TH_JA?jVO4pw^5pLEWA(rS88bd^Y8ztSU%LmNYan18=SoxYo%YyQI>l-n|y z>u>zho(490t8Up|#o7jig0Rp%@h%#52N~n1Z7`79HZENC$!smC4@G9^A4SqZie6(R z1A@W>we@D7AjEg{E(p9+Q=V%ci)xTLtjyfWbQ>8Fi!576XTcj2bG~XBW+rL+NEqkj zoXb&zj>C#KS85f@I=zAuoajZ(A+a)2?Bd0d&7)Gr_NopmR6aQ#Wd|I>;Km1JAl#vn z;S4a70cbgdt`9)xCZS)IPB&w??Qj(J3RvmJsC18+20JLIW-qCKGz1kffINT7=(eux zElRTZH_gkOQAZMyBZ(S6qh|tw3L*bg+U69gWCg_HxZBg!DNrW58rxbDVao`N{@H)y z4FaifoXQIS`*D>$xz(F+`le4>k0eTRI_pUDAOM$0xZ^D;8Tl-P+>le3)^hT2J1si& zFM7~4k+4e!I+>2D5SQPTiuxz@b~DveL24NQd#v-}3+EqF4{cN{ysB?6cH!=d-}d*L zqZsB^67Z|27@7@h?QIwCH;jDn2ln0vVFBtABvVb*OhwRcvn%tA#Oql@zY_StErt>T z-8G=3T^(c-S_qO3unfS9{|B@uJYBN6Fy?6fBD@AAJieDcou*7KTO_$Y6LHnXgClhJ z9r5jDTKX^KzNzh{YY(&h@qnefm zxsXmF{7y)BX41R-xy?-5zi=oDK5tVkI7qg6xO)^>olww0?agBX747F+6m1IPWUkuC^qQ~k1H=|C;uGA&Uok#vP zhNo}Y?g>R#LHHySh-5^L61k(T`AhRu zJ#-}BnW!@aAA71gP~2)m3%JZSKUA2d?YZ|$7-vbSj{~IpqrT_}M+!)BFXV6Gn|@jC zqB;IHA5U47>Is!xk8WrgOpkFLk)y@$vR)tJS8l4Qj-(nwR{3)cEHE+Kfs~&Yv2i$dN5_Ult&&vxkU{2ejPtn0oqN8yA2HfU+@@Xi{jCSSO>^M-5gE zMf-k;aQ!=bz;NqoU}9VCRi=Pd(Tu9|uxEF_;M~FRyV?PKrh5i3nxP95k&W^BtziBT zD9kt0acEVCbfh_M#}UQA$6>v+ERv6@MK)hg>XE);K1$0|(@aM1^_dGqm_8ed@>T;% zyLe*Y2&2`&TKuB@B}KS<0?w0k9chGH9wzPM2DYeea#~BYeX1Fg^Go9*p3TMH%}#`j z8E_ist#GYx>WU{#xE7hPh#k22{n2SL@zs7dMD~9iOj6pp($*Rvy`IGDsGEhqwpzY! zn{&EnL!Ju#1V-#X(hM}e<2X>6F}-N8LL%TS9q5>2(<^`Qiw$8eJLSnJ2Bn0* z3v}OZg4GqEe&C}xyx>B731A_^*n{qbM9N?6WH6vU-(Z(fvr~tot6}X%z;~0EtxWev z|4KuIS24fei*{#rgGP=F$FX8?~bGO@Mt2C||_v zPH#4`K6K7dH-g|jjuXCyz}H#_E#aB;-gh2}<`F)O$yl(t2N) zdo+PmG|f7_kmPX^&D1Dje%XN0<<3oJMzz4JY#_>vZjf|$bW`10ZovP$D>iO|Bjjec z$|JSl!N2o5oVd(pv)QXgteObVs+!#J++s+pgKR7X%v5IrO~l!`2R_tPq(V zjgxvaN+$J;xuY@!S-L?Z44!e;ovWkM@DLLLG^L4;>EeX;nOJn9`rM5~XPrOO;We4V zlS9IX7#DJ7>vCrwiPbTa2QAF{OjW)mME$7> zQvKNI$Mfpc`;L3O({N)!H+&fOUeSG|@S`6A*GV{6={sJ14!R{W9o5av`SHh{u6%6C zk!M$o#kO)HVCk*T_WkI`0r$%di^h-^5@lP9vd^nGGbe9A!Xfd1cN{2K(kyXX{MfdM`Ie4(y@(ZwY=}vJngtzUC@*%XNXal*5<<;L6WRPNM*G_}s2N*)B^V?y zj*4nqS3Ntdw;jaJeG$EKj+a~Zbn$Ox^a5h(1_jbd{ls6O5y+a%;mA4Jmt}7ar-w5h%HxC;# z659Yz^euvcInK&6G#l*JgS1TNFVcvwkFA_ad^Un-Z*Jf;4Kq*)L+ zsP@4`T8U0d)=KZ#d(AEZ*)WHSDe2;(w~Q$Ll0Rpt#yWtjPV+5cFcriN{}7j_(c-Gs zi1Z=XkAbO8S`-=d-N5OrD`w)&ABTR#HT|#tW z9Mx2@dJ|KP6#N*BMes{Bu#D9KbNs*(OJIPCpxuggQtp(Q)DUU2ooL6qXx{uVU47|O zhAPvo7CADJBy<$5?O8+s%ee_y)KZ4PpN{8Fg_g^0@3<)8fOvTB6Pn_Ff4P}Rmg03v zgE3^s-Ywc@0EJ4)?MIX2V*Y`^5=Q`{vsLfm)}+Vh7BpbB98B0$gyUvp1UJ+_2U&-P z0ud-AV;SwN=s5%r@hlu_s>PNMLmofKk(W%h8rS-pj4Kaf#q=3vTx@s=DS1s=HiL9E z^T+I%ohNcgp#e7vdWSqHX9)nPDdK|55Cg^Ik*EQWNAL4=I(JZ@ni0rODg-cjOe;5r zl``D$=r7DhL$8W7Y)N}2PiJeW5pav9yRe$EZK1BiNF%Uk`-`B!#ngxYZurH~o;AQ= z1g8izE@Q$R)Qf*&U^fQfeTLr!jvD-((Em@63*F;#2c{@#%253>L_sr@i^ldmntMzw zG71b~5n-zX5;8%G)cWYvsocv81vVY^tTu-#fU2P)H>w*0l=(vFA{w~Kg#If(xj5N^iqRmrsq7D z3STH`Qz2CQ(pmSL(V&&&hg;Z9PrDgp4M9HeB)#|hrSQa~fu`ahl^cM@(GS2{tyA$0 zGCM$ABnXBRgPmPfZ{Y;EGhI9$#G|EcVpD({HLvI{!$Yl5Z=G6(VZlD! zcD7y7TWG3y&$l6oR6K3AvK0Y%72ITM0#g7VpV^nyK=-_DD;=wddoLi4W-e3om|R^{ z`DvPaZ}M__WMbn^tP^Q3QjLR7C-#s`ceFS&2w(tw3luO;f`4Zo{cpKU12U8!AQx*5 zJ`+ciE^t^z|F_MdCQ1W-K~;F413b0f5)u9A*1w>_Ccb{wbzVgGLFhapn;T~9e4Y?f zR0&U{L#5iBL!mq^DpcERM7Q0McCANM&iU{BKe;}~I3gan587C;Q{#iEuxT8tk1l{| z5{VubX-0?&iUl`J)byR?L~7$$eGC~*T$+7aHD~Oh$AFAY=2V0$n8NIbA=LTWver`F zQp@&e3a3qXF>5Ds&NX5;H;nw#whQTG^C2%zCLd`)-{$V4k17dR;SI7<$IChu!%IY{ zYl2+Td}JY={kVA79p9A}{UlRk)6v@4z1f(nT(C2cd;zD9RKGIsfREEge~T*&Vp!afbi>@vE)SM*xi*Xnslw$0}7!sbY04nHH{%WHx0tzPHbmoJYrwhW7r zm{h_2-TmsfG${DbBV)*j#RAV-X1#)mxz;|Fjjuq=e4#nFL6U6M3Tm1( zoV)T~F~1>nXTRwD9ok&NXH_C{X4aMuu{=w~p9u-{yVM68i9KL4qM&Lr09%Apefsc5 zhMZo${L3PwMXT}XbZnz|hn@FI1dl1T99*T}N*c4gLA3lxIG20oTgY`x$>`(XYzZ2^ zdNQ`~bjCeNJ^3*722pcZOT%uRPZ~1vPsgtHJqCwtB`qF{^$P*au)6#x8*o`88OdNS zzsdIp7ZY|s^pU$A)dFxyvU#88Sm4+e0Rf`t_p|X}`0m9!wW&e(^B2bFky=R>Bm^tz z@A)L7|9nOr_M4RcEaEgJKZvt012$pP34D;z`4QGd2A&Z`?C0Sq!lhOb1%??*8o+&) z`!#Z#AZ9J|Q4h3%Z#VaeyntR))C<{M=evDZC72tXXZAVQzN$;%Kd=&z?7sK{;6Cgz zqk@+COSCeAdw7E9ij;mWRJCIVDeU;=geAV9(tBsFQzmGI9GTH1Zi2aV7rxB} zmxOG^PJm4xhOb(WlO}NRcg2j%!y&RwOPEQ4Mf&S{#)485Z0THYmi1O*v+2Ap`bZYYdH{l22eu^cn?8#FpfEF`Css;fL{b<%sP zS_@ba6ueOFCj47=ElB|{6^~!ALa}qTyHXguz@A4d^gH%>cfe!7g~XSQ5Y;H zGE)Ad>7ahtVlM(J8uT!Q#D?T@qE@x88oyT6rQH?qJLFu`v>jH>4Y+heI*3U?r6V9N zpeh6jM8N0p$gkq*IKjWf6&O>5=g|mpo*+GL!MKaQ&FcwiqaB9-GQgff3uir2sLpc(d}Z--&uR!Z`CAncO_{jyz8g^5JLpoVPtAvCi}Y z540OdXG#BlSwsB$agWH^TFwd$5QpyySI_btE*721oX8N}1U%ji8DF1YxXboj(ty-6dQf#~QUcsL1dr%>@LSZ7* z`C#gs3i=h1M#C#_2 zBGmDc}yS^gpb3U{v93V{FKIVM0YbMh5Xne);xFh8{CPYkx`&TQwauwY#gLP zF(OkZ3cOC=CqzWcJic*tnS#P7ZtchR@eiK;cM4FG5~j8q#fm|KRLZlUFM~2nUWGlr zgmyU|9qiIb*_vJ|gqniA;JQw@O;LiOW3OPQ zL82`GrwOox5!G6*G_56L)qcFgV|%Rp zZ1!$XSAGP3y=VK#eEe1E$7Y0YgA5Wm(8Qa3ia~A|^A5|suKV~fWK5sEfoMl>ar_JJ zYb^N2YzlGZICfHSzvX~r4N^^$gOrNuPOKnDr)H6b()ML*dRVwokIq-BEJRJ$`Tm>6 zRntL^R3<7+=%GIg)AU#aJ)8c>9Q&Crzue>rei;WW&;y5<$o>IOjJ90_XLNDmJg3zT z7$hNCnl|nMv@S#1_HelQ2Sc@W^_QoYB9m5v3fhG!FSKWT`EttnGf`FMC7&-1v+3yH zhuwxndF(mqxLg96RiuR0dB3xi4fB?hpsAH+p6fC^`^qp0+Yb;{pztgZye4Z&Ze5RA*Lrbs^&{x$x7m-qyLN7o^L>jpEiV}#@!z& zphI>~34O4jZYz#l3XN2W@JDp;eGoTkzDQ%O3RHHzt~L0*pkiJ39WZx*-_WpqWEaY#5DZrz{AS# zg=0_fEA&nnr{T(pafp(osMS(h@-#Bzpby;lfcKa;aU&RL+BwB8HrxlS!k#?b9792mf(sF--GeieobEC7_`l(h} z++|N)agCD)qE)?R%0gM|D~|~yseD3jCRBf%qW##pO~x*~udK){B4)wH5cRvSGJ8TR zWWoG6N_z-BYOpai9c#7tDXme&EwJ_x;Sb0=AzW}pv9gc@@X9wfdO!N<4)@00|9uHO z+m^E@v@V*GEB)4Q>R?eO0$e9JU6}pxuh4HR!!mLRh$RM>O7@E^mls$^ePH3n6UJ4F zcG9O0Lv@w5!3zoDh>wdkenP}UEi6T1y4q^N1zKI4*j)GtDG{Nmb49(cp1nDp5=EPA z&%7Y?n<@NM`05VOdUAo%q`5vY^$a&)fNCPBG_@&X-cR0XeyK6_lER_viA=df+HrW- z!w!U_O(m`aquJpapkekINte06=ug=f$4vepnJzR0WnEys2Kz-6 z-{YDhvAQi~0A&&WPcGs&Wpn~?26i`0|8D2P21)%4K!vIj=}OPnwys*uWqRZ`wAh9u zkOmy@iM{w_kW!iirk<=Q-cpch73DB#m5Koa^A%y)3fR-z(1BEeCTKlKc3n8ejA0ME zQ^9^Tu=ql`wBF0j7(eWJY6k9y;q3Q5OT~${52VXg3_|8bs#KkVXXbx*H+AX;!aZg3 zO%8E%tWNp+poRcdrp84KPSw4rLsKJ>u6(6IVZyv7%YjK1!Q7&FkxVscX<9N$;Bc%D zyKFGSp4K@aifx*~R&EjE@$~V^2ZF=>aAbToJ4{g#sA$Wz@jzx{rJkJxSA^GJ7#+e~ zAl9IbzR=L!fm~4f9`}8^B^aBp&S0PkPpbBcKvYJKQtigOtBL}$1BE{K8nL|A9{-YV zlt>%NCwCnZHOx|_1`IrZpi zJtn|b5X=R{t1hz%cNMkVoDhAyIs_wCfRlU4ma9;JCFB0DW9&NKKRlTlzyqWp?Qkg_ z9dWA9x+{e<5Ep=aMiO?@8s=9?(%sXU1LpAhN60HVQw~mclV138QjZjH6wf*&uIQrK znoN8XJ3`yY3(1(>u=_3_@K3Db3-on&p=Pmm1XbwB)X3pEr{UUcmubA-HFM}@F6;f; zsw?$|U6NyRD$Zq9GK<)EZs4v#{U9wwnce$1(nvP-JO&g9dMYHO7+MtO=cv~5`Wu#h zxg$A5vYr?Tj>PJiZDneOM#3{V!lh&OICOwMeHOQb-u;~EWnI+It%s!CFR1ktkx zag5eDlIzMEeRpIz{zSYS)evVq7B@0YHNTJlcg8@K)a9z6bN3r)R?=KSB-GbWYtFs2 zX7Z5hZY1PC%wJ95muJO#?oMW%<*Ve>M#=1Yna5mN=@2hB6-Zw%Pxx-1eTo=*V-2SXF9ZuBdP>XbHSWc-CGRkeL z1~$JmQ1JWqW*> zaH_iaE5JsKNm6RhO!!6AloSGw))vPjBfp7xpZ0aq9Mvl=9%Y?KzJjprkpm&QGG3w1 zu>5zEVL6Y5W6v6-RebxQ(4B$V9Sj;y=ucUM40l4elUQ|Kn8`l48Z;vB4lnW72?Ucx zt_}H=7(NjGTlN`?;A#DG5 z9&F8%g#2#32jn=Af-AWU#bKMjGKd8VHJ=`+)pT6z;sKaYv^M6dBD0 z9BALDDVxD*4AjJ@DHsu_swXLn#Ngiv`TdC0vBO5UV)3-s@JF4UcYlLeRe1XL+BLH7C$uG}@%wuQOGWf-n5sg;NZhwx!_a0ru_)*Xwr!Ki5 zS~u97(`n;K?`YnuLR}x!CuZTfcIU!Lt7$n)#}l#0F+X?w4mC_|NmT$|inGN@4$erg zn;R;`br6LfWYEnMFP-t1r^y<&yi5hq@lx*ER5x1eRjPL_l#!H{=$zp;8;aKaH?5t! zpP3fcS?;hAJe4(;?9}$U*`+AnB-&!e^589V#t?kMalpH>Dq+WlEHm+mE9XwVy=f;r zq-g?-o)syUL5VJx#B$p#%D#FW!>lzIRsdiSZnHM#xep_Qv~Hn{(OHMGUkl8Bxd;Ud zKly0=zT>4F699MRv(d#y7!F@4bPhW@p-b5yT24H3aoPTHX6J`O>rYY6MI?;PI? zCXPny4>qhFF0!YliVaLbug94k{_+NS{?7e{ji|1`3$tQfLIc0-A6a_WylDV6^q#E_ z|2{Pr&Re_%%9y$w&$kt7x(6hSbnoRH8mELZaNrx)eMT!Fig&%A~AI>*?YX1*4N6+wnqiA)#?Ae$n54 zGr91Nt+^8LFj>5~`)QgjR}o#5wW0?r=YGAsZ91q5|9G})g~Ok9|4mRkMY70VVvC95 zjBzUq37lx04+(X_7UOD~%n{2z(`u9xjL+7xmn=3q+j&>C%X`cU(@wSAZ*9UwIinW7 zHkNq9s9O)yEF&o?Mh?xkyR~3FlkwT2GVeDXu2`;W~ z*1r{u$QMGdmNpc;-|Xr3?rT<=4e`s~u`+dt>!S@)iaC&pb4K#cwvhQ!6Npc@x^>j& z9DbL&>bim`6PK2dqF*05fq$0y$n$iPhk<>B>K{{wmCAUwy6RX zYlZ#GDu59tU#N_`-tqbf)83MOv#A!|9n3NH1({ibu9fZt3pr-AF~hSfx<5%JOR_C! z$sp5&^1z`!v4W!eXYpx)m!p+{WtaHCMh)8APLP%& z?hrMF7Gb=Vbpkn%t9uRY1ABehHS5wqVl6c`;CsEAwIR{Z-!8KJzg{%0-YmNx%Q5J5x)PVOyA_6q-LdtiKSQlIBb8nu9CTEI zRuG-zR+7}Rf@1CvEcqXX@-lCmCK}?oI+>60;PXu|cq%qe^fq_#Z)7X2%eqrd2C^lUcepcYO(N6B^e9U)?uTNAG(_ZlqMG}0Slg( z!dRh8#e8|Sincupc{$W=sH&4|cH}FWh+W#ZJNp&}H~;e?yu1kcIUp`aqk`3_$0#X! z%E?yshhhKX5_=jy+)~V=zL#DxodJGVho|5`2RT0n5}pL{N}DX0T=+ecxjd&tPdz&I zTViHwuN*z>QZyq@-MgMc$$#b72Y_A4aY#lW#P-}2ERt%9j zx-M*o>Smv)G!>Hwa82yG-!8+zl2&Zdm1qJrh1}R>Kt9*hh@!e8JovjAN_;V|cBE_y z;UJ{2@rlJhL}o_4*BtR7I1%l>5&AUnLIM*(!07Tjjo@@mTFSIQ;BKdL`o(Nzz5xW> zq{#7CxBK9k4XO93@tOk39lj3M6;xiKu~;modf{H4&M#Ym(nN8MI3lbr6osab!F)dn z^+gDoC@9B?%}&BpXZK$f6v~K53PV0Q9MUw{#Q^3%zSv*XVPBCewO@1$=O%PC6C`VJ zd7;_cb$CoJEqm0Mb1$r~QN*a3*ZySRBi>m_a5-RDEYP)x1PY8kBDMfv8gS?Bg(_KW zS{(!cC}=>HT*oPm(AINTyIIy+FZBeAnm+71xe1i3Q?GVTKES93_omCRFg2HX}YrgKRQM%xJd@yGXvJpr1;ZjoMx%}x&TrUN5h@1R^4f~Kp z%~_#mghT{Uo{j8n0{InX?z9qwMDYb8U^SkNN`Q|}7vS-*eEXqG4lS_3UB-?2z=O|_ zxwx2uH2^Vls+dJ79Sp1j3y6tF*GoJ1V{t1rLbbTjwZ4&y(zbt8d*S0S0g%eC!M|$S zf^9#OEpeOXOdx-~X(6E~(J!pO|!gcDT{Rn+~YOMtN#f{yLHBmhgANo(HKFQhvSv>wz3Pk(WFfzFy< zzB^q(Q|(qcX{5W>0njp!#yKMDpaKB`L(_>Sf}HBun8bDG>?wvj@t01kZx7)amWY=|wq^-M(Mgs8v()_sgQ+gp2(_~bL&{^p%`5NhnS_UFnf`Ly zR1Qn3{Tk-py}HRMg=n>F7P?7a7Wf1^PH!MB6~T4Gy$tFT$IK*l=2ts0kw}ab<)aOo zj81S>iE|xK2>KP+o*XqxNc(H`{WLEw(hanXOVCD}+$WLBroS2IFfJY)#$i7>PFG?f%c!zGM2aIS@1<~Y))p@s{2}Ye2C6D4 zgPRFBSRloe(CbG0*7+C{y#N|_Cs@?H%lY@uWKRaP;aRplCHM*ydh^S5QATi#FSz;E z%5E>{(DiQRet@NgKFT3SSpWh+{lBrJo>#>;1takX8h(%}C^ZxOy4QEr?^|;t&e>Lt z3oSN_FIDt$yS}*yFoGBT$q^tseG$InP+2ctH!cu&0D0?=*sez)8N|iRsoqg(lhho@ ztK+!GlqC!`PM`woU+tL|)$06kuoCX?L|gUlX`vA7Y+nxv6{}#(1ipFvNP{&xpBuv* z4tsGQu7jI@?548C{fi{nYk9)D@#$gdw+!Gv!`>E=08;VYkSkA74 zi&DSv9u$I*1~zKi>V<^Q+?eKZ-e%;i0I!8ZBu)zX;I@ZRxo-zSVW$h@ zK$}<+ktYDb0w(${ZprmAx`soeaHT1AwP|KjX&SLfT_#gEa)t>j+UmUAf5g=zjI@Ck@5oiK~8d zMIR=aZGzuIx|DL!lP2=GZWAdyRZ2zC`Q5#>dbb8aZ_?hxEl%cK;9(hc)J7rJVsF{z zvoo}V-QIhOdM>KuHpQRoqo6y9O$5y3tk)~?vuL?PL}F&}=@N#j-M6`MHV%;ne?Bqj zs2<(9K!J{Vn*Rl+3ZF`wZfi{@)bwZ|I52?J09@^+Kr0=eWIFT{Ov?SpGv&GBDMh14 zo!d__TZNLbXWoSKm^D32?!`D1g^y|7iXKn$%~Wq(OB_f$qrl>d9bqg)Pj3E#3&ro8 zAKu4qNacK1T#^aUBm8`4Q`ekz(lRUTS*4ymTVmrX3ec)Xzvsj3g(pG@$u7=k&L0;4 zrDiIOQ?gv^hd=c&)SQruVaP@18S7*P&jt0n>qubCiZM)MkiZ{YAr}COdN>;A<2J6q z|8fAvbn}GyHJ%E#*Rg^)v(``mgH{(x9f{T(&my&6L1;aOjv-5S7Jp`$c(=8K^Vp0- z_`1W$W5=-)oNGs7R;!JGe|I8@NsRVGV_H_x=Bs;5&&_e(tP4g&`vE`vor#F3Obtuf zQF#x(r)yKmfgV=pP3mx^^!$2!?W5}>9SOZ3682g(Z+WyK3UVy(HU4z@Ci(=$3u5P- zR%BAbSv@{kY5Y_E-`JN@guC{AWAzL>Omr!#%>TtMA2;P|C18pk=^AS)cU3l3^bz?( z9k8mHkEpLx(|6X+C~f#)D^6$P2(cEE8z)DBaOYyo=wGH^{B~@}Kq~CjRHkI9Em2~Q zyEt^v`|c@uyA+xs;ITePAv$BSRrq0u5U(6#jEG zMbaA6Zx>Q$*v-5}*G{9Cc7Ly^d0_7UX%M`n!feL@-s-OV6y%-q?4wzUWUmn{&YZ&Qe@A(n7tKgp4E$k-Y)e zl)laB!|q(tQr}YqcPQ;m`mAzTXxqetfyUhh8Y_Ji8$2gdS+u4^RR_uDS*PCD2k5C# zd{$@JN!IV2g-FmMrKN{pi$*;U7Po60b(0%9zOLt>Mw80AFkhhPHu0K4-4D*@`~<3! zApBS{YykC(s85#$n|E!>qLsWT&dD zr#-26;q{>|h(AuZHsQU_>l@v5#P0~rxo4z;mRV8UBf9ycwK-EqT&u#3s9s}AKM|ZW zla?A@^1Ev?1qT3ejr!X7km){X?EWjDuM6I)6o+aC#0VJ&aDLmJ*b77-P!Aa*k!$)p z7MKM*AQS`jJFs`+0@qlyJh>U>&msgazKQn~fGjs*OI90JtMip=_POG7(c0lv4x4Q2 ze7jeg?)7+PF;_)AI%+GDPC%CEA>YuniBX2{_im?yi5;KVzsh3^H;=`=^<0X_GCNIV zS6~i+qqq7}kZKO8Ca_wl$(HAh=9;(bZH|gIsR>Rw8G8p0G%SeOu+9CDPb7zZ)*d1T z#safw@aV31h!sbhw;G6IEi6N%!&G{q$V4h*%uQ~X8}P%ou1X$Ms*{$gi#IlPq6}I` za8>^Tg&8g)^r0M-!I71>e9;CL z-T4oR51UDA6sjsv3)rn%Ofa$fF*})F)JD1J$wW&W2D*4xQ(kuIx{U$l*%EPcQHxBT ze+c7etrBAKHoh4qr;;38QuZbzJGh3NjH);z?75i=o_#EvznlmVQVy-XHau?hcTuP@ zkQ7~SVTL>+#_f$Gg#VJBNoe*2VUvFM@z4Xl|F5iwB-}L6{$dT#2d4$ygq!*eDyVqa zWvM=(*>MVWcy~a7!hND1mY_*iw(7b+D{r(a+6M6z^P>Gn0h7s^g1qtb(X!HOp3r1r zy%A5tj@jU(?K*?Yj+*Wqa1kZcW`*3Qu_(qLv9JPM-}z}7&}vIrmUe*(>$1F9ZgC3> z#BD{7zLflh0WQ2@K8GB=IZ=crSGT4T%EX z4PGgyT*n@PQ~WF|ZkF-NmfA?jV4;zA@W0Q~^Tcr8;@8JIklJj-;b%{iHwL`^P5&1OGJ9-p@$^be4_0~v**|5TtR!^bkU8z9yV=KLy zim)idJzw)jGEn%`iS1{BFz2(FPKs7@Ul)6?Qt|YbmONkn&0G?w#V4X@HTeh>NXEh| z^-zYI;t0?Ppf>mS5eRh_cdCq!a>?0tT|X}4hx*HXUlGsibJH?xh-x^*4EX^ly7pQo zdS6qf)c>>y>jHMYg;e}G8YHZ1c4r|iW%8?F`;}ICd?pUVzW(EA^+|azZHSR$wENa;&yKkQ_~E|i)vRa z;x>~Toi9CFYnsdBZQFuHAdvP|YkhMTpx0py22#%f?)LVE5b%g!ZiR@t-CuQw$R5o2 zfrVsw4!^%6&Ma~UuswrFkL&U>n?}WB%rSs5_ws-ib%QO$p)i@5algRfq++W1Dbj`m z>vY#?sAn@5f;fgswGUH|OLV_7Wju93w3J3e1#5oumT#@-15*8La8k4 zbi-62gw!o*ZK#LEr>AkZqP3M|$mq+4xFOz6w#hL(*3&ST=m5GBc%?w&-LMe90TN@F z%G?ag^e9;j_=Y#aHnqE|o1#OAr7hyMV&d`ZYs~*7>QK-R0Rra-(t zCPYLBYUK%bRz7Q87}BzyCp&^1ehkm7g|yIBqXYJKP87C`Bh67<;UHy)$<~$-5FuOB z>2M~Ldq9amp5`%a;_f;H9)qfoWLMa{0R;xL>ctBmGu@;) z++--1R1K9hAWmA&>FoM!gg^^BM*byze?P3T=gw1`v&u5P>u}1bQY_0Os`Rd?3Dx;-JZtk);&b^4o&n$&*h-6BBfR+HSs$N z&<6Iu2CiT@q`3q5Rw{RSZ9r3ig|d(5ioZ)p;0t>WV5FgBKhti56LO2OT8+nGqel!fO^8~aQpLSeR6EC2)OSsQd_bL0N z?siu+(^2xS9WNU`KE9R_7Fe>s_!ej!97{qsT<0!^>cSs4qeh{*PO|{4qAdxX#;nC6 zj7Xu*nSeZChkm*jRlvB0@#4-4`bk29)NVDhr@1GGv~Hi$b~;Hr+J&PiIlsz8H1f+B zO#zOFOmF%a0CSK9FJie3RKP|Xo6cT*P~zDmkFCOK-KE#fkX|wzZ3Ux*sBbDmU4YVE z(Bp5hZ%xXEe`SkZXXXY4m0j0SbN^0?C{nPy7%1Xo>AdmM#_M*r4>AjbInHw@%Xsi2 z?!I_s4^eRwvFRgvXg@-{YA!lQ1J*)3%^F4-j|<4qTPeG@sb21Ycn}~G5BPt94WyCA zPy87&NlYa^$W6VqQ|eJd=jpE*VV}X&fy=ORGM73}(KhgdqtU%PPk1-f2v$A^3(S3H z*vX6j1-+h2Kuc7pu-YaJ0JcI5@X_&l45%$T*~^Dbs9q-@5^a4pJCo&u^$q*c`pXp^ zwqt9|nqq1&#w-2qdk`NLV+-YSR^r?XT_L|EN<~UJkDO1b(SbNVh?BTO)n#%!$2rPU zftiY_8}}00kC(~~B@3`F5T}td5R|a~ke_l(M;V$Qcm*wPAR*6_Mb`RplRF3o>^iX9 z3r5*4JQenwe0?+JILE2)_d=rR_9SQkqSI+OE+5zrM!L$kUd_30Q;gkp?I-W1v+vro z{#MeZ<-u+MMVow8e9_j4su;n!dqBLb@OWcfMN)Iu*rB*xGciuG-Nxc>!zB%9v>!PyNV%uz4M98u$^}G;jZ1UokmfDw~PMw}~jC zJMoE$6u27}R$!2ezHmnmg@UZsTX@YDUn^4ITCC)O=0zqygqc(?I{nsU+%7#)_%o;n zwE%|TrjYvX?uB7P0c)C{f=fQ!G8)r|GAS96y=JQ~X+AlWVTai;$dH@>*g`@4(uMT` zZuDDvAikF_Fp>(>hS4T zdDQTNJA$hPT#(tc!|YoE;EhwZ!c%hm4bn<5!Ul{5byFxA1!_c$3pP^T(r9fe>M5Q$ zOwZUyzkIy|K^Kjk6m_(?q`6seRutU=vvyaIjJWrG>%!%8Th)cYb=nb|KTRes&0#;g z$4o5*=pT>vTbCk>qwE!_=!IJw9S_)2bUM1}bzGLm>N@4Us zsHZL8S$Dr;6m>vhS_Nidvqy@dZ7YV?WxjhY|MnMwPxz{C4@5tUrO;NGuZpK2@zOjdqLJ=Lw`df%WMS?B|(4I2}ywvMFWy+0F{$vzx;b z#L#IQ6^|{!Nz#&Pr`VqEi)La6K)`RAuC;@IfUJnYho07=4Z)oI_mOX6TkS)WG}oz_ z@8ibwAf`fi6Sw&fBzz#?zI$TO=gZ}de81uc0c^4L{kr93*hCgZt zaoax7t%osvfC^Aj{rir+1V{C#DO*6EA1yMSm;a%t^Bi+kwyVq1ep6^i`U?6%XDGI?(uBMov(GRVEbM!z;SQt(a|Z#ZkL&S4xir-p-w29LGS>22hQp zrp7@}K-}qY8!xN8`w@7SRdEWq6JG)U!U9BSZo_*pXOV0b_J@zmS?OJxqA+xejJ~R- zN8PBEU`xkzu0TIlMC~aK#*>I=P&`ZMBanYFu`)p}#|vgm0itiYZA^oL|M57vQs~R< zE-7KtNRCn@KAamV<1+K!XfPJa<^&!4Yi_iXd^7U5zPvUde&{Em=i?ztIr%wHv$4{( zQw;9<%K$Y|-79er`&OK-A+T7%s=8E3LrPL6I;>PqwbqYL={pCl7B1nA!shJvCwsHb zQfu4XT*GVwr+3a80l*W}OvB>_%sV-|hJ`3!i(K(1w?6LV$L@ky5oajmIR;2b0#ilW z%4)9MKpvKz+ZLeBoU|yNmX|GQy!L+O2M;MkfZlZN6H1JpIUm4aI_e@D1sh0-^me@p zc>6RBy83%T8V4E@_P?ThuDxm#DnXJ@Sy~U9h>7_*}WA=QDryI_6;0#1P>%=YDj#N zgqOmswxjuQkEWnPaHdI6p;A-}&W-_UGz0ir5|Nc4zKx?bWc%m3FD^OAG8O5B$%tIf z!B*v$9G8h|rnlfl5B4CYA*gh|*NyJ2n_tW39^ej(VFS56VG%_6a+<@w7_w3&L$v(p z;)Sekp}dFMeY-fYbMvBTLQpCd!~OC8>{HstJJ`fLoZDiqvN0A-z^7YY=0*>|G74Ul ze;M=|J`XoF8=-el!^9O-|1=)_a}EyzSzCD3H4l%l%s};*lF_OKPo7G?G~~>^s;}pI zq`BH7?iKLh_gK(~ZpYCm4hs-MI^fn=NmTKW3C@f!`!g|@#@lfSI*|j}7?l?wDATyT z+$rvyVyNEj=S0iMp66of2l5Gy~8P??8JC4?E zYt8chKYyqxX29_O#d7wRLOCO0(O&z8rIVGk%|8}xQP`BIQ0&*^33mQ0`=JzInz|VwzyV8M}_K(Y}7K9h;B5;Zl;rk zvK-aEd^qG9ayF%=zs8&|atmjItbmdwLtcTf@^?;mfZUWB-aLC}^I`%_U;B+C$^fDi zE@aKFO}5u1o+=_*Yiz+dd7m{52}Ub#ps*&sx(U=e9!$2?RGrdGSSldo|4>Koo}a3F zfFWPmRgy2?eq+-5cKFTj=Yz+*d%176c@xyuC>z6_99o-EVvmlo`?U{m+tKLk0dio# z{TTcGvtaS|i0lzn$wR%Ew*l#kxDU{E9beC4d`0r?EHk6E-re3#2r$QN#03q>p z7AdwMS(e}8=}75=N$M1XaHsY+mOGamy`cIQ5?tcU)XKx`U@^@An{lEvG2OA zo$h@sfFT#J@GbRdx#V^WMv~CYtZans{!|vz7rsT$>6TrxOm?Lse7qry@MFG$8Suqq z6I%YtCqZoI9%TgjSqZ*-A|M4+5YaP(km2yYHid3EeURbZ;*#x@hfFjh8O0VK+y3b_94g-DO{m~R@k&Mlkd&^3+UaL=cYGG z*oe+R+eFV=RAiT5UwEccu&OzP!Z<;(2TheJwA#E|pzA+$cf<`+rPX^EiE6m zla)$3+4-%>>KCv@)l;ODpoII-tepg3@SwU?xmWT&ptrJ*^<3jfAY#3Cnx0SxPkC$g zdG#7vS9owdDYk!hh;={pf?80QPFYA+_H5_^7Y-o}o^2bL{0oq#?6022noGsuvIuSw zW?Cjy_U|p`=+yri>#5Nc5W|8*=(2{~>Sd{p&k8Hy%pwG4*JpHKkf0@21#BN=w}gw^ z&w3z^-gfkMQjE2Vlp#rfxwx>d|bfo&*A!QTi6z@N}0?kFZ1tvnJP}1PVb=rZXB+=)!MfY5GsCX+F9&?cjqS0n?2vjuaOR_ry^ zG;Fl$hZDguK$a@2A{$7-uhAlIMG2)~;v&<(KMSZ#Xhzv=`7I@t9&HU3cnRZVNC2MK zj;F^oTjy7JlOujRgGzx*0~P-YBM|f~vL@uV7!!WY*fUgD9>bBCcMkMtNoa#KP-Dlv z%AjceVXLZ!AsxW&@|EI9RH?R{qU$H&q9@YN2`|kM3F;$2ymn6dhocMrR{w>XwG1-S zc_N>dPfVfw{23jOLMcq#OElq+*Hj^l+ZoBNUnVbeCsx0@w0XOQG$R3VnPoCpaofo$}H`@@{vHPJ(=lcwt`Z@GadX~@>51^_kGV=6!WyC_dzt`aoRJMu!`Ylse3jL(d^S14{K!u1aFmAlh5Is z*5b-+h?Ycsu;0kYUP|VB0-*LFz8t3Jv7(9$C|@^MKYyW8?%9!_r?#=q<%A4M!5*$Y ztlhwQg)Li!c9)HBxAL%18&Js5;>iSph&R8}QKynbs<;JRVUcAq2&S4%J6b~)=i+&( zt{cF=>yZC_X!dN4z{)G7ut*z+U=syUp0uOm43;AXJ1Q&StHp2#_zO4oomO#N0E9bO z@R{6~7}OB|=u*i_?Fcw^WjpMnXC1=6Yp$CWn>N?w!D_R9W0Ix{gmmGjGO*{x_$&%6 zI~(C^;Vn~MmS1Z0YQ`1nQc`jw@-u4|S>urLSb^B>5L?W7Gxa{M)3h246d`xE*Nw{J zbASdjLue!3lVpIMtSzmPOm0+XRemFHC%o5+%zOG8WtOC?`Mb&!6<7e5i(*}EjxmHi zw4BK`HJ7gGVB2Yg;k<*hxL;F+Yws^ksoYLCIgzsDqoEhcQ6}y=150MiFKqj|7kVApylW*ipn6 zdig`IW!mZtJ|L-q#3=c>7TN=WvfkB^HQNT<`;Q4z#jm4ok<;dh{BM!D$ITtEFVUCk z5jtnr%Z66klS9mZ1>0r^+w&lqP)**+kivwwvMJda5$LX21BajJ+#SuvkfDX#aIsE2 zrbP4v*p1W-7*7KF#@Y!VfxR=9yb;1UFn6cr$nPHhl`3ZI#HxSKUS$t9Rf+M4eS;6f z6#=_3zjG5Ztqc*_vQWs>D12q%l1_FH3oH{T^mrpNa^Zb|wklETz z{>2SS#a=>=D@dwnOTTt!?rP)t1)2o_<~Z43E(Ba=QOAK#JCJ-SiHmUNi}|2r)63st zIoMagmk`6FkMUz)i58zyM!bvljnT*l`BU_+)&93!>iq}|x4qNzkQ6WMDWvJ~$Ne4x zUC0f1WwN)==0K8VyesxO%|wm6=IwPi$om4om(9dMiiE%$;xiW$QX z%{R@JKc60irYFt6^=|^d5Mhsb_iC zH%7^~uEj1XK^mKQoli~_eC14E)#z+7?0DPr0vV`o6+b|fKH?*m`epCYatl)ZJn@7Q zr`%h&ZtLu^mhkQ3jA~^?jrhLu?^zO*|0K3%*sfH>(E`%{$c=pd{LXDRul}9l9Wrj{ zqDVh~ht5(Dd*OrstQ&X`KG&5+A`cT)T{=yvF!+B(#nUwb{TSqZ3PDpV< zq`%UH6PKJqu=8%u2Pm!Fm*|=w+2D)y-T2R*Q;ZV&a#a5IB3RCQs8F}R2kwT3jW&#c0fDcYV zz!F^?8~StafbXw5he5+~Qt9osbhsd7TPFvFRN^1K+Ra6K{+x2q9(&Pm13*QsOV zZgCV0nKjo6MXj%3u}@uKVAD`JG!1ahtz3!)8@Z z#n2tQ@6IcQ<08^9SQj$3SM9)0x_qy$C0PCsQOhFwq5-LbBugsouDR0%>Xq7^DYAz8 zbQiT7ezdK;=2rhNPog*D<>}|I?rqdazG9k(nr4!7t2_4xV+e8xGA-h^K+`Xj{5pc?ml?=elWnK!9eS5!WA9hG=!?3tgU_TL!* zLh<|W*=m{TIdN^=`yp##z*Iqsqd7IEvoMyP1WBzQLibtAwXOS?j`Q5d$%5~B58H=+ zeH4RvHZoaz*fumHB7-(uGS9m5w$zb=Z-n6E9qevk>BH9Md- zh}M=qK5MX0Sy^dgV<(Tj)sOgxH;xahkvIwsqilg9fdp6=8qre@Z^V zU1&6o_3BmHJP+2KV~i!Ga3GQ%S3z4Mb&foK1q|x5@b~mww<;EkjGqauW)9r4xhi?wiJ5!Vf=i}MbsmU_ji>?2Lpz3ZB|&E5H>RLqMYuz3#q-U2kN3Dp zz#|)@9Tg8PXRvXnXb6^kY*GARcuo5)=l-t%mTem7@@dHlrHJK{pm!P})ueGu*5x%J z-zdAu1C+2AbROi)(}G=rNtQ)#vK22lL-B#iy>n5CGFr%-blMW)DgE(p)3v~)`?TRJ#hb@4Qx~Hv>oY)q=ZFt zLk1n;zJy*W-UyC6if_I2Q-){0J3gJcr;kz2d>HFd3X0+rv43<7iOk@K-1I%FWR_wr zWyH>gF?0MSPe*$YW!prZ{9}RDIzX;otwl0o2q*IOIus|!Tae~`QnWqar~&ZzMz33h zjUT0Lj2`LTuN~w19t=+O8Z9dWx?KmCxy$qZQFo;Ubxp}E-jIz*iblsf?^3t1a~ND! z>lQ#=gJR{oQ2os^M~cu3+qQF<^F*p5lxOp7@XJ(BUJvs`0Z4r1c`BXEGBU^7Dtq1D z-OP)&w=F{=d0tD!jlQ?`xuz z;&t9K?{%sTcz!qYzyY`&rrAWuUNW#|C4#-|przrb<9okb$^%18kmOIX>I5Pb^9?JB zVs|)wG}p}D?z_azZa%oAT^s_?ebhm13aKDbw^U&tNUtUKxGxIi4*XGBI5LKSU(9M& zdH{|2NQVMYsuhla^oJ=tPO2_;72bks-{rXm$53hSpfjF$vGK*w&zwa`mxvU92Nd%R zUpGWA-U+NP^Eiup%8-(H>51hF8u-(gP?Pt`JaYVJhbM@L{gK;0o_Pch=t1>We2QM{ zgE_1~iXQNT?kd~pQNdWGmQ)a6-Gtq6pd5 zVGv|7`+5+-x6xdifTvDb0iV8mj{)(cLAL<&#i8mH;hb{l)XI*Kdh>QZKm4Y5nER27 zMli$N%!n)VBxx{b=LYT_{axf37eUYCr z9lL!Q=J$klPPV96KJ3cVpV*f9RAvpta%-gUz95FyK7tVSv2DPKJ?4}jBAk91k3)Eu zNMwpch?FN3vaV3``Zht&2OLtwUyYw_Wxx->CO%wJf^#z#-EWM7h4!+O4;a<~;Nl3= zdK%>^fud0=e3{lZn#wO1{j-McBVfm9`y9rUDVns@Zdg$}R5?OO<+*Q-WJVUrL@i-` z5y_0I+B5c zu8%5|=qfpVV}r2Vra7S4lZ%m=8+?A%#cAe-sY1YKkEp{qRuHog-2j^koKL#)?Xh{k ziuxLxG?VMY+N(2TMSnXx9a2EWb34Or>#9cUMWP<7h|jSh*K{loz@TJbSmX-K;Gh)` zaj76^ zc6L>s6HWPwjYG+RBrJi}W9N-&9!G`=r&F%@%a>}jZV0m_p(vX-LjQ&I-)T-%tS(QB zr0!iyITd=iAwp1gzHF%sCzf4vsE_XQ%?RtXTU-Pzi(GS_>jC*xpp0!K}T=GDjtV$V|?W+K>n%8q9bNQ#t0=SMvi z0)GBSy1C8G`HC*WCfs=TW9JZ_s|vobaCx;?|F)@Q+1HT1y*qN0I4vt1W{i|PO40A? zbT@ij_Cwv9*5ErA5F}QSJf;3sp_0>4uQs<#r!me-vS|5Gf1zKBgWxjGtlX)`V)z|R z1%# z!PR{l(7l^lZ#ABoqv8N0{eH$=g6!7Bsd4V9W1lgFktc_Od~K5%Q!mRZnmtO zZyGPFI437KimY{(q#zmFN@fb{*W#N%vNa|!9B1t?!1`of`Phx?65RY!p$AbIjJygF zCqFa$=4~RBd+uy#P|0AYy3#~TNY;J+XY|)lB&|3eTB=NiK8s~d%0yvbg92;-+TCNK zi*6_;OfkxcFebI423#b@@MEimMjhwC)dZK2*}EIdS-8Il`9b~ps*%zxYIJmIk(o;u z)Zvy%5M)lLdb{${)1|q?eV{2G8$3Ysq*f)ZPB%E>AImMw<^}r3l3eUIHjR#o3tk7pIvYL=l=Y|Wd-GEIVYrTG8GvXjVbWe6=AP_?3V{>Y?^Ch*2H)eDbP8n<2 zy|Qu4yc&G3D9jj$PQyQr61n>LB%6`1lTnEjdZJ?e`xKRPiKsaXR}okKoXZ?pg~@Q% z{g0_E%vJWO6;-`KrKWwbp&pE2(U==Cgcs%7;IJV|k6N0h ztD%S4eQ=xW%8&S7d@4?0zNgLnOjqY~!4-~p6QAEmF{|)9<(pD{1=HyqpIYf^x)nfc zAkzJ+b=FVgB`K`*-Jq|jlC`RW%`q<40~iUo=f2|XjNNWb{`eP1z+1C@UNY8%W=;hO zQ(ONQ+FBcdho?RVM0(5gC9pfUn`N&Zq0gaR|GAf*TDZ!@;0V){rU$x=%F-OEnu9@tu^_%cI75`^X{VMtyd6C3-Ya^Vc+1 zoDx6HiB%2lDPZf3$Xuh4$bYMEazLQPc2074NTEN7cA<}d{X>bJ$g>5P#)9J#A#dB| zO*HGuEBG`rDuzFJtyXwE6XTM(87K;7j5?MRy%*q82IOxp-`ue}M7E%|vuDBE?ucDl z0-k^}*NM_L|CH|jyrD|;(|>3&(3^&fD~EWl&_^f|MA0Dg#Sx^$FmVh8ULM&l55o|e zjOeGM-(;4jK14cj&+L{t!ESM=9EqUL#UOinz%`X`&NmNj(b%Re8jGBhlvERmL+tDD zV0xaH(DG4w`p?Q}D6t+6N|QF(`b?8?WMa=9S&UBEjx|DMH4pdI-}sJmSF4JC&5j$@ zEqjCpmlz-3zR06>L+wIYaVF(k1!~R?z2*NK*?(k|G+@AT!HwRZHwR%WK;B( zSQI9*AtA;wsGl_S=g0BvnZp5?kgWNc$x9?RI4;YwV%nh~BmoY8*>GiDJagro?=H6PBQZ{<*S8R2;r!mVOejzsF{s zXr4Qg=hZ69kg10ja+Acyn*d$VB3q|KaH$@0oJURf^@!qH{=bzhmzH$(J^_4W6fDT2-6@K3H*QW{BitKuRrkZ-jKo*%(8Ul9Du<>2B5bs33R_NwSR&U zy$S4cHJ{SkaFTP}U?s;}_Mw36BC7M@p<>1MJEY|l89 zg}4UZ*O^%`8dbWAsR{xUX%Qvp_2`(S0K@z=5-v*edt|dLl-Bf8nL~j^+|`#T(6{Kg zn^RS71NXW!)&KeGgDVQt+nB{kyE$9U^mZG03Vw7l7hj{q5E)sROQpS2?B@OS8TRj@ zER?7Pj}TLr){V&iGsjeIpkFHc8sD#B7`ieuPx*pb;F_5lL}{jM9owsX=e;6&rn0ap z{ns8-3DXj)hqIaG2H@IxRL*Z4lNg4>EhTi}+uoiOxsSY+uHj&JQ@-l3UtFSSr3KF$1t-;vL{0)2(jUf>NlIs+19PO4A+=2U zq^WA(M2PDa{6OG4PL?g2?!1qx9J# zE8@MbaH_}?4X*vH3`9IIh1yW(C$$<>#nupE&VGpp+W2-?lPCU#iz9ILzE;L}32nnp zKM9Ybj1J;cn+h_y)8~{BXb#*B3T$A`!edr#)H)yjHuuCeDpfY3J_TvD(ln;!(rdAw zKN?X4u72&6!A?595k!zM>l`}IJ?)LHOSAQsonwv5`2<52X+WkwCem`_h%*z0P&Wt+ z6R%6Bscg-yKew*(s+y=tme82}P$!ft@@vLkJJapD+sI=l^ON4omasai^7H1PW@gBch0QJ~uU^ov6wfM?87x&hCeS>I|QvgUl0g51CVFG9nd~rrz8tWBg z38@jedmMSz+3_8r82&vQgU_lI$=N8oeNdV6l~5v*HM?6y4f^`TMW{HVBqjAOuayA@2!)9wV&0Z zKi$G;z-~jnPl(D)lXJA8btK9h0!uwzN17K*IJKrRHyjam_G?t#1(dz2XQ|@7_vxss zbl$c&Y}$JzPxvZ7t-6+HY~pz6@hf9j1QV54>?soW+R-rUJja~Aj@)%K z_J2!_@Ey;f1(3|mI>c5cTL0gDeR?`)R$FrD?OK-$M(G*aA`cE~HGkuX52#q{V|oK& zE}DqBN!6Bpie>D!QZ21DxA1KmwTGgJQ#Qz;3%4oXuve^ETrI`;zVzE`y0WBF0z6E9`aNxyLnPyZ&D8jjgYBC7N>E@dKBd`)FDHHMK6CKZ|gv&FkW;7RLb9}71Ch#u=Y?Yp^`-1noz<09_fAE0D#cvy(0rGZZI6{$_UgjQ5D%%B)Xd5sszPykso zLEAS1opC;|kB(y{%@IiUe%YcNLL)>h|G`XcEQqyRb6Xrsg%5G+yrB;W+sH+jm4P?b zQn-MONHn%1_Grt6mJp?^R93NWK(TN^{`*9TuU3#{=ttj0MafgSnxJPD}S zgk~9cLSpzS3zMVH9(4)OLhQe_?vxwDHzSV{-j(I!UY2u`ZuQ+HFk%Uw{<$b~fVH{f z#eF!zGAhip5y7y;_TjV$(HvENv3OMebp1+|M44R3B%Kmjc3$I0P_fPLX;|KPb5>gG z^`?TGQw_VR0q;t9sevRrQ`9b-utmIepk04Ty@#BeoV^5ze<*280dl#*@onPFa#RKgH^T=u?yU%iizyIFhJ&^HDuGN+b5vA7d!Fkn zHvn~xvzFr~&xb2IRC=!J+;HpT91k3M%#0$gIgtx z6<3c2^QCQRmPHv=^2*28fGk%#=(Z%WokP*h<j_I4mqo~vN%Gtq2( zlH;biQGo&8ffbP)Yv>L`#oA&o4lJ~s@uSN`B?wSKK7W^6y#dsZ6WiwBGm42W%8u7# zt#KTSPxdgBLLE-ps>ahe!MPXoh>t|vUY$Yp-E zmLf2e9D^&RPKA(@d!rE?B3q8u&hcMhPH!BiW<|#u-~`m)72;kP6}F-JHZzs7Q{AT-qEi}8n5 zKxI3U3}$#MfP$1kPT7*}=NUimgLDL!PA^piY3+EzTT`K3BpRxC`c4+!jFBpw7T+8% zn|eT0>Nh|V3vm6WVIZu5EZ1TFvxpBx_OiT&V_-&AM*>U5~nx#UbG!O*v= z-=i&Nd$!kb!Y4w-6SJo01H+1wq+`895Ii?Yl>H_!`x6-q+LYCBW;W7)=N zw*>RUWx*_aZZiKI8E`Mk+t$twU7Xn8hTE;jIMdFTX*AT+Bv9eX3~_<%rT7OkVN^-w z7R6-vvsMj3C!8u;D}JQLrgefIu_$pCMAn^aNRWiIZqCruTwJ01M7B`Q6&~mHQSx5~ zXG~TE=pb>yQ;ABo{Gw^G3xj9iCfHEco*x#def4?(MRmtcI;6I6!KNJMrClu;P?&ID<;J| zAVh6fk{;wDsb$w44ktn7P6`ZUzVgWC>J!LunVDJ;7SCen8yMzoT)o&eKa6?NT8ByM z7(xFy#w+u8KzP*(h&hc{p)v@udP`>*%;(mFZYP%x%t#W%?OQ>DWR`Ngv&DYWM->^7 zp)VqW!p*|iFbB|PdrE1Eu6|O@JRyW2#A$2*0RKM#z`SXK6Mz<|ZhCZcTSz6A0`HzU z+KEw*s=T(<`6s&HWKAEG#aazU29Z~@GxnI!vhL0&k4`$M*V&zrg@Q>&$15PuEoGR* z@)Z0|e?~m?tWtK;U%fWe5*%r=1~XMfOiPPDliBz2Jcu&6W2|XuJuQmHdT;W?KHKPY zYeH87*vU|@rR9+4P0`ruC7ifB9lJD=D|mfCgutx1Yv(DyT~D#ETA&DOwAFyhEcRWf z=u-gQp}DD9GJ%Z*YNXORXDi)CrPosg^v99Y6ucC9MIXT|=+HefaR$ln>qj^6VgtgV zob>{hNx*~*Bz6+uOus1a!H4#ojzwWxKfG{LjnquI0R{J1JL&c9h_#%)1-pX(o=~0X z?P_**2{2!|S|IZQ@u=Fns9_sryrhNr0j{+Qj_nmdoGtu15-GsUE09g@we@tsdCc|Y z=~N=DF)@iny!35Dls)o>9mn$B>@AExg(mtl(wX{o3pXYAty3N~47%AUe*Fe^(CqFu zH$`&tBbAVnW0MEIYv^#X8al3v6t(wsijx#*FczC`W*7h+C;zFCr#@vMotlJmSxr_R z!s>`yt%&;393KzeV5Fa*&$41DaB=96o%XF8IGCjd|I(7u=2dm;dMrc>J_jFp4U;dy zHP4x+1zu)PDgbE`dv5w~A2ufV&bsp~KKuT-f@8er7H=iCCNJ`NF?|UP?Fixsh=ckT z#t27N#r&9$Y=*~xw{x?l$?vZ<2bss=LpZ&gAf)%-C5* z5U_&DrPgHXVUUkg>&^DzFBYhFF!W15z6W})QKz*9c!io6|MbkTEvotT$l(> zl&0-8F8BlGl9WmF8L90@VGZ5iO4MDD1zhqgOP82W16~lR;jj=T`o!zx4cAgTiW`I< zeGKc3)DZTAyO^JP#vvBbW_~*k)?o0dVjO~}b~u;tN!>1=NMxQP%)ZM#3d%72BF_@& zNw5gG6C3(!^|Oy}ere)=xNE$~+VZaxEG9t9_KQ)DJX{WM#v9cUBEK;SNmvM#? ze`UjP6h`NLu#N1`_V7l>ZD-rel|=W74{05)$9?=KmYQpWjR5J;pK|gITCZ_^LK$j) zuwi4#g4@g?Sjy5U&$7Vg`sIb69uFp;Mq$Hi14T!7KN%0{be3}z^qyPM2Q^)1#G!XI z-l*|DR-%iFn`s`CSzrf0lbpNI5U9BZQCWWO50@!`7KxTBZ)-}LBLVdLa(OMC&Nv(Q z`vEUUckV#%;YcCV59KWE1D@i0ZK}_j+paNooiSoASLo%vfrXY7cr6|1!d__z->a)< z5|wI1?3J_VcpJ?RVuc7_+Id35_DUrHS<_~*6A95GI8s*4fyB^(^ za5v@chS(O=e4G~KFBc1-eA1MSftDbEBjuqEIoZGn`-xkWOapwJV7p|>$89g%(_k2; z!MijP9g-Zi$&P;;rg6W%Xr@esM$x{<*L4(UR2Z@d$Dmvsl}XzFiQNp4Ek1PieD=24j)0``YG)DAfjfiOZo70oiK(>#+VrfUa6aEia@Fq0hAD%l?$j0Z@KiZMBO5n(6Hynu8 z)cnFBXRok!&hNqj!X8S~1(;8r;3Bwd^y=czAODPfp-Abw7|}Oc+b-i53K^rhU(Q_8 zXM~0FaPgtaM`ANIglFuMwy%J!_PScr43w$Iu%wmy_1F#)t_B>6w)r%0>#82gR zQ5+No!Tap|lodUt(y$E)u1gH7a-awcXA8M!kj{M+BaV1&N!K&RXv4nd*0 z_$O9poXMY25kHbFC{?PDWdQNfT81V*%Yi3USRbp+wVm3P(JGJN$lZEvrXz@l>wwx-4N9Q`rnnZ8iAk|b8h zJIsv!5BT)nQ`u#719l_4dfyHz88Jf`{)REN;LVJ)PeJq{D|F6JtnYYA;d=&5`TQqI zKZl17?*3gsi-3)ZcaUa$rLtK)@dBh~y7ee)k$8nF;cOf5qd;h0UTcncv}Sie{@pA; z8@HVw*J^G6xF5xX_D{INW_Q4~6u6wWxLK;R_!A1RD{ae7;qS&M^L=rz!oOLaIM~j| zA3*P&bsR8c5C7aI;6;Ddj6+J`Tj&%?lV&u+2v^x9NugS%5E5~uii-UA5`TE zQ-M=Z)iEg$D}V(kC%cz7XK8?i%VLZAx*?rqW-ye5qR=7DS%${1xv!AWK)|S(sH4s=?xW0GO1(f#IcgntxHi2`Ao769f{(*+>0V zi<3RaYxyi9c^iiQ>ep|k7Tc2u)jfcrU}xtR|HahA4*SS-?b}cn*8tv2DFHXc$jhl0 z|5e09tcF-S7p6bQ1GN3~hzg;OCycoOaRk7V^nRx6H)2PlJkGJASIpuI5-F@xoNwV( zlfl%JmQMuSm*W?QP{S9UpD+E{v1>0#tLSn8EB9w zb_-;1fqUv`y%}2CbXddISozGz_=7j@y|E^0Yb&A}f|-^7=siz&HO})^k?{H*$n=6x zZ4_Pf)fUyxfK(Cp)O2pGeK@p5UAhL>ncBLyZ35@tGmwg1`efp%GA0_%#T8mHwiLeM5E?DZ591zUNHZ}PWvp!>-Fv|z$PKGsbPg)VqvZc9C$r@?O6GbU zN#UGj`5ZsRhptuKahM#`)_oXTt)pZo^AQni|v9^jI=%$6NNvqty z^tIjrxb}7WMX7Vc2t0x6o;GC%J~(Yn74Ed;X7&%`{MK}0!fm}~Ap|-!M0gJQOB4L3 zaIHfe$hZ$R_ME)e|9biw6|_lCoHWcMC>s@_7NMCz_@?pGO^vCo=fruDU84WX-X^av z^GTe$TtmKkyEWRBK99kTSP**~QB^Vl(R;B_EGh?*^b*v-H)s?}eA1}L}$)s7`gQ=iLwXXbvsQC8*jWiDVB&>KVD63>Dt}gTHZ{BOZv{sVKTh?Gxy_W^LAmmU z+XPsJgJUb2hN;WQz=*Rwl+R*Ete?s%e?1wz98RI?yi+%q6UmAy-X`O5V=u1LkW#gdO%oZs`e1`w@Xtn|SB zB#FOX`nZL8GK%XR@<|5!SEZkOw_m%c^Hb*V5`h+3X^SJh_jro1(KCR?tH-;2^)Oqh~PT za-oeGDij)}^+`pAAC=f4@u@4M7K#0|B z)ii4frjIu_WK2nX!8s_UGDPSSlagOKOsAKoNM>pD-J(M301hahp1;M8R{thnQ&ME{ zZ1}&uwd{Xl*x4d$kJsR-!`G6N~QHAIre?Jo9Q7j-8#7(DDs z^cZr{EjBfbEDXcMEfA@oU7f_%#zZiHQ7{A<+r5qlpZgdkwBv)}i@I3ClSq+jwmV+z z+kv0Onnpm2cz1FKzP=;r>JR=1R6wWA|cDuq4(!1sprD%@2tr6k_< z-C6=|f*ieAZxBkE9Ydh;U3orVv4dl^+gpIS;<(Xr_9>fROg;1WG6k&|iy{rq!1qtH zy5b9xR|w^2-_Zb@uh)BlM#B{T=I!=X{FHI+W{_hhi!nN)^o8#cdQD{*C(^V)_-jId zE{i#=uNNk^6e!Yc=^A!=bjhiJe)TF8xK5UHJ>Fg5ViES5ZA(-W<8-sdkiU&*KAtG-b@b3bBJ~m{NI9igqy`(cPPBO$( z0Y9F3<7Xkf&J!W%F9ko>)jKyqaFI^lW{C7?(o=}jo2CBde>`+B!pKv=^AQWp06x%bUIDeSo7P~2 zVWbu3o(Q!-vVzzD(2|CICX*ECMg2xh^dAvH@$@3DRZ+Qhw z4%sdw2Zyw2ViC$&8zAH|zLCz%n>i$vBbJzSy%)TSUudC8YI?rPsL{onWf(kOk)k`2 ziP{u$1}l3!sQcK~kOIF1CR@Z_LsCoFD)?s`?eft#jBa%VS|!A^9|rA1Es^{6-P_hJ zeNWyw|1{l_AMa74@RctLBD=}O{pt^t`vXGd6=Y&53YwfDv1Wxk?fL3ph93d>OYiwh zst_DW%9OYaCmY=3hNoWEW_ze*OX{T`yAk6YuKSg6D|VXFaz>-KtsrOmS8h7jJML~m zKPTu;%Zq!qWr;^Cm~)O1sp4>L$7{AqdkWg_r$S7V&1#ubyCcQVxe^S+ENj1X!Z&8h3`1@@++W~Ls9tgW&FM_hDvvtM-qoCfY z*A36VR-|V0ja0k6B;Rb7FMBMXc7@y~6PpgIQF{f!-93oR3D`+LhUG*O5@T6Iwvh3F zyb!2WvMA(4j3Z-mOqPaCAN)%uEg;7hx^Xuqem3Jdl31EaoN%M$-cUmVrnH%|$90GF znebC=xv?kW#Q!1KQwfJ+Jxl*U=ot$F0y9&bkaG;4##tdssC1e#$!#t>Aek&4bFk{g z6N2Yj4RB$#%7UkVY9I)G7r|w3XRrD}wHOmo*S`f8GeLSNmCX>m7**_t;^~#fY^CdRiuSklqfyzYE5Ga!PGk90e!Ul zLXKj=t7gn`Agw|ym*sZy_Ih5yH3~uRu@sXEoyHDLRTS9bKT95t5nT)tp#YV=bpzdh zGi-yyVb~?d+*08ai1LjQOKmJtd(kXIHqTjtNP~eV{v>Z=5Yz8-#FI{|Nq)e&5#p4< zuV?f^PK~r5vc=(JEebt>u4|r;TxO1Ga(5-KU$mB2Qf8|OUwL#j;}Xzm1Jlc?U}Ek z1~)dKb&c2ERx5I?u2`}xMBIs{%L1~a7C|FzfMV6q5d*SBr1V*&>5J>YNv?|;LlYPs z_CQB>2iW13i=*RevKd0WPZb&iz6BSZ7(Q}XozICSX6p^ycK4C$rJo~7Ue5F?O(dhy zx(IB2IqnB7BwF(xuRNXNWlHENtJpyH<8unLy61U%r&BcF{@N3NG*U|NF02~Ay*Gk z+Gt_(uepo!5zVY}360vNFx-@Vh+k^3RI%$b!(cV+&)%typh4fZnet$65_R-+&B>hf z>Z?^a0L<^C{57Xl+z#YW9;tzEU2m&l>(l3Lz=6&Z!^ZB^IY$d)@8~IZbpH;j`KoT} zah3jM)!o(iMLWqzU#y<`%-fSCab%P@b+D-Oq%kdxLRbC8jnj*yDJ4^+w1* z(b`VuW8WY-8*hS9+5jgm z3Z6c0>Is`2%hrULcwAp51UAy6rT|;1AcH7f*O31~p4sSq1iV(o_VX3jPW;_NQZ$j% zWy))cTVka_{e@(mxQMXO!>XFWU_uYncB;L$Bgf|<=*@P}B21Q7w}NzoSr2tMPAxl4 zxG=QY=RJDh5QXLbxJ-zG_d4)bfJ!Y`42tdv*8lrir_?wJ?9{nQj~EASS5vq)&~w<; zeD`CYx;^}FL&&*dKYkc+y^sv#_-?(7A=AI*HFBB(cGP++Q3>W^POYJUffDY^n;jn` zd*YI*)4ggFjrP?m7LS9rtwkz_=fYM}pAv}v!P&F^K`wi{a zx_vssT6M%v=VuS6dU1}c4N zs_yIQck+;7bK{Ng+{a-#IzWq&i`~|7PH8^|srX2fahT%uLorjVH_H@%5B1c}lAx zi7{2_eRY3yv_R(an783Bm+*qFFv;n4#+fiRfgw;JlEy&p5~x7*vko@$f|V}~xnE>Rvst=wh=#m^uIs^!UWBv&rQ`y@R1sc6%M6xekHsL&YH^rkkEyS;1M4i*kSDFDN0Rx_kF z_o%gF&QBt}CsjVXbzs_LpYW?@)_L1~3uAw1-g+E}>J+3|dRmg=OG-ldv2t~D46f1q zrZsWtcd@g;bf7diISrjLN@U6=5#u;9^{Me_Y0{)BMkv z&vES1q_Gbc0dVM(mTEIFjT>=$2$}l+=h&FSmuNz_Fkk98O)11)1FGu~Kp3_K?i{Uw z3iNV^xIC}YBd4z|DoQh#MQkem4o&hYtEFhK77o$N2_ zoP!fITC3ZGlV{&>b9C90jO@O605Uo!K$mQKn7R;?rH_VR%B)#Ws1K&?-hjuG`bnf> zrA0I=i$?f4K=4lM;?7-*vT9Ifm{ppApgLejIX;T0V9n~-EdPjK?Cq9k!Cko-ukuIzr%#e(4mCpxg}KWWZ+3$_t!_FW$yxQI005^F(CFbUgTz z%;JpkmC{1HPK^@2I#ie$%vtvWG3Zb3avhFnMDN@N%ibIXeJT<5ldC-$lsUxcgge=_ zQG-`?^)z`#WCMs1Mh>eJWehzTk3W*yZTjbvN*O$oK>uQ9W?Tt>V)v0Y#vu{F03YQr zuo-RP9d3=6pu{umKoiG>5|^Wjny73H97=XOOya3iV23Bn&?0t_7i~<2uzgmZD39^4AHLN~{X1wh zR~V=nW?p`R8D5crJ%2#Pt&hVin5}VnZouf|Oe`WRIwyx|g~04Zg74gG_Kj2xV5JjY z@@ZBhulhXMSe3^Yf|4m-%St`IL{54smKGGi{Un+T12N;CD5hxlvhx5ppn zL5}&Hkb$WhhS;4%wdRhnMF%chhN9~XD%6zLq+Z1gs>c^nmuD1jq}Y>q#^xrC7uBZQ zW<3x~1=Z?`8V8u5Kh)R`SXSWbsqFq}O8#I!5%OUA;B{x@w&c-ndeSqVT}cm|9MhOL z_;wCSFcio*Qd*^Xf43Kb0iZs+Kfx<^sE7pl1pWll1OEtx* zE`xNZj|aZtiG9N=y!@|!Z-j=T3*k_G(L7B+8en?sL}9KYq}QGoW%ROLp*(UY@~5{E z2>10hFK7SU@rs`U&8Z1hvs!_?<~%SfL${7x6ln%NvVMNEt7d4tlrJlrviZ z#2)(?hQ5Gfexq}xq+%bK9nanjl}w3P3Ea~JsAX8awLv|%>|Q3fudzaQ2!#Qh&bPSg zqiuF7ho#42)pPcj1H`f@|Dai=At9&W&Q=wz9v0&zaR2o-K!}OZ(PjSU#)mvz zj6tg^Ra(&|8}ohXZkT>(3R&jebtPPu3$^bY$Bz6*UxxCf9R7AfD6JSkyyM&mws`THT>4ej;0Ht+0Ua!^&7;ww8 zg~whT2#9LG!rCWYfQzB;-=Hy#D0VV}&r2z>?jcS(Byz>9aC;li^mZ9=0Sn641L&&S zC5;aFzVKG6HuqpZN4n$Kc0FF?M{4O5a`HGnHgS)Wx}V_n*s zZw`gp48Y;x2bLkJCpmDQT`uGQk$t@3w?bBYj>XSf#W)cRL{F86G!xXnj~BY$>8J%4MPl0G_P zpk2irTD3`X_V$KKZKzkaI|J2hr#)&aa+n>{XZA5)Txf?hKvfi%2zbQ25WWo+ou@We zhL(8d5|4nH>BC$o&q`SUw9k6~PjGwhzk7M;5_WG1hi*7Hzn2~-A0Qa+UkP_f*%!uAnlLOViihpcJ%{c(;7 zg=LF8hC_OF?6f_DjUHooy~;uA;WQnK%Y!Am_NPO4J0sqDOJwjvcJ5b7VhgDo$TOs5 z9aU9(c!B*j;`LiAwRhtuwL6B)c=B@h-Jboq`W)+P0;Sx7LXfWT@x# zVAM%=AQp&|k^%ruGyIWiT!2YW>N(fD*>aev5|neLZjcrWiB*SiN7r;f(J56jzbu7nMBkvqdi6cKW41Uy}?7%WX+j zg3M@J@x2`>`>$h*W%2nCKd#8x;d=!>F$5**ml309^aDL~AN@M-&=fpxbyIbgbUp0~ zc{k1ZJ5l{JB}x_?&FygJBAs_*>(~{M>6tAs?hg-BhE(qTHjKu-E9#=huHXJ<=FNxp$`|*@iDpQg3djO)KOv6{ztK6uIUuK7uZF&^ zGnO?bKkS*AUWK@WlfMwS46s&R^>8_`fG-GyLmLoqm4g%h2el?^BRqo81&^4vng-$p zT^uJGQjj^Wi}7O5KT^1nD8(%%>z@c4y204A7|$%(NOsZmJ}T_{MLAKCo_wjzDCqf5 z*x$Ko$>G>{j5#0QOn+>v1s|i5OF*&lgios-ch-nxlL?d1mzcd+(5LAZaYfp}&(Fzk zAM1nryjmw8eIOd|>8z^|7pU{^VJ_hs$R8Tv32(NJke_O@Brh&lUU<*0&r1u`Lzhge=X{MUxd1grQ0Tkl|ad^afCzUGrXc6yi-^5EW_+2&DiyJ z&WrabW%cLxHkd>i?%j>h*9Hv#K&hF}7K+R{iX3>zY@FISa8h4N^G+5($uT_H!YSOZ zqrl;ErgTM9$uq#7z>Mi;Np9Z1h>Vk%{w7sie}Jw!6{0oi=N*Jqs~r08fJBo@=qNj z5`<_BAp9C4<7cIrSj83@K@BKDgA$+#>i^oTRmO3b^96)ve{HLz)oc_%UK;GM{9BVe zQ4FHA+4$uvo!l_)ci$&pVYzKFISVBG0nr>EcK^Y#$|k#~+u;Ulq0y?{$m9c?0pERq zuq%ZPHu3*>nTR`-bAQ#o#)=am;s}3A8U}4Tc!!@{qcFidoY8H7QcLa%p{>a8pjtJjB%pUy7FoBCy)8#&soUyf?- zS!al-ZUhMsH9*bx23uSScP=(rH(5eB#eGSj^G7q$*YykZ`yncj978){tFacs$yY&> zVY{LkW&B&ljN0zMedjz{eT@Ceh#>b(^GZ{_Nl#ziUtH;Q3hGlEnC7{`upm%A(=-)d zy(VhNmmR3&CZL>9K#?)c$sv%TH8G7~fsJq}7n{s_nU9l=k6C|p!$xLa=5GV;IuQfA zD1#ZzgZM@<`KMA$WBZoeKcahNXz$&ty1ThBN7Ag*%o4(b;kp9q;X0n!~Vbzhey|gKSdQ z=(OwbdpmckkFg){{qxouQH(BOZHfPq88aBSTcaE!N5}p~nLTIUEx-%eZw2|9;VK^= zQsg-FJd-47m?oNbu?tZLlGn8ff!R*w%wl7OdjnuM!ue-VC zyo*YX>%5^Vnp+rWr*^2WNsn|xDL0KXCAS;ws!h6&&Ts-W@!pQkT8rxtIHrA1%G_KNa)rL zt*`_)D{G5}39g5Et#sD>gk8DcDB=>WuPUU;l`l0TSbp2pBC4!p-xDbrVi(F)O|I^U zt@nC_Pg}{J?%UhtPM3Gg*A(LGy|9gfctn z-rFetj0!UpT`~?G=40mD?Fbe!v&3AvR6#k;4lFuN&BL?8LDB|-O+}wAxVnNUBpP+@ z4^totfNbTZ!spQ=^46I8GrTc%gJs>ic*Xza-yt^jP|T=R@>%`2xV2R_fZz;dwre$@ zJoMMz#3VPKpf1xY7ClgnQoJQmK9&<+yW8p877sRZ27hP>S}fr|crh}A+q|UFMh31X z+-EHxsW|cJ-|w`2XxK>;%;cPsQ-wcMcLQ5Yw!4B$uq;a1}Nz5&1wOIj)vs~jzpqW512l} zIFY;%fAcKBjC|Iptu6cK-?4nmsp16E%4=fMep5l=-Tow}!vL0;085bX)HZ=r@#Ih= zFkh2^fhHmZsfRD}m(Dzo)$t<=XLXlrG|I3vM6!Kw?L)p(dMX=Uh5;eg$1Q7D_M!!OIbLAfA zbD1~&*XkzI6?op6w?9avL^`%MPs*jcN4|ESz};6Ajz$HgNfGV#tvR?BS4T8!+VeB`#oW?cOapKgCxSY)3UvA_|oLrbJzO zy$kJt5lqE9Q<%;dlkKS9r7dI7$x8!|kpg|=h}d~+U8nYIu#_AYyW|u1_WjDZ3yqesf!4EM9+BW%M*?sJvVbZ|fdgjk zWLaf)hF-A|`tN%y9fmbg-^C)?g8JNjR{uz(NrH1goG5L*D9Lld?W^L-GIvup?O2=> zn{(?zBO+qYbF;lvFl?Day&3TuE>JS@slsrgjx6M}&WbGq-Xcp{4C88U^-u}>W|t$w`-M!6+j@^;&No@bx&vfVwDh-iE9VqwlYiJi}G|v zuN1w0-yYUPv4Nw~$@}Lgs$sbIf;+raHIU@RKo^gPM4FKSrcb24AYH zW}ZKWKeOkKF?6|r<+d5|BtVi@(G|fHSqyN_%Ke(}#-x*4a}XW;5sM8ffN~0LYxVw? z9Q&$di7N$fTsREAXTxp_K75wbWBLo)gIdOOb_W)pz4`uq$!ata^zu155L9GI5MB^^ z?x3#pV}By~yFkl$Pz?}1aWPGlb>mk&Y+fOh~EBc z`FeJ9O1EJV3BZgDDcylu8KVI5-Iajo$otlj9roguel}-mGo& z5nNuX?OLw{T`hKew^n-`ZqgQRrbN;L$p9MCzZh7{izl;t;XTIBhjYy$hR=lvU(?*a zioNWD5N-kay1KSgTx%cow^?vKGfL;2r?77vTP!+h zP+#v0F&@Z}Au%%%W-(v=;c23~w1GP5#WC{YhKw$Y+tg!yhix74T2V4|N@H@}7-&r$ zobcxECA?{n1zhU3s%cul-TAM#6%({lWVwNW%J37UXPEL3kDGn^2z&GXLd6c~4y%Ah zSk6+&emxf!MfWg8XpGNoe4aE%RO&Nj}v@)1?C@u`;lx3r`SLMibN5};Pi8f~>b?d2v@$lCKO(e=0XijUcCQWKXjG}q}AdZY2d8SzAlgZ{->P_+F z2WYp{un0phBji$oCHvT~Ztpw|7X@-|&*Zi~`@UMp0sZQ?=p5LDR-gQuHT0OOzna5T zg}fhpGP-$b|6d8{Wy3SA)zCAQfu7`OmJJ!ti(J1J8Xf?}HZg`811IzE22D@v?b``) zD7`;pw=$~#LsTSOuc~v#4PT=~WnicIvL)3G>B*B$Ptfxpjxnm{QF3YVV&^#)rw1tO z(#sgeHdY8+4EZ-3&r+C8;3Ajjy>m%c&sFi2@cb!`2}uh?@4WwI#b7;elvrxG1_<;k zWiv~4D}HxE=oxgtP|w%Pmh(AjoDF(5bUBA@9Cg;n^nw)GoC}An>!a8z(}XfF{~$-a ze%F{yXYps56~ZHd*Mkx7-@1P!iNb6;^kOV~MSVX1xXc~o3dtZqr;FEYZyECN>QqEf zCGY=ISkhj&kCx}N>~iu34S?H0yphK(OIBDJI?R>*i+Zf~=C)gJybX=c$dTk+$xUT# zYS)g9cB8LfVYB~k^z z)`Y|XO(nt-`=k(72pL4>i?LZ)$@OIXLun#r zD{(uozO_e&TqLg4MGPmBgifTnUNp=>!d4v{pSH!nYNc&3Se74ES6wDc9CMLEwvspn3h5t!0p5b*T!7X~ zz;yZ))Ae6|TF63z@$`y=V1I;+U6mos+;W@Ko5N3GiDj_-hkuJbX|G8}A>q+tqq338 z3l4=o?4A@&e$w(l%bR)1Fm9JSH=Aw=1B<$j*>Z*+m~|)_mF=j4EYTwj=jvU|(Q@D+L$1JN#jAPNd&Hn*bqhFcROrcG z|IbYgLF;B4wVh&|3aJNvc&}@+q&lRRN;MIwpgpQkH;aQg^lBY)oItneZqM>`vAxX2(RPfAme4r{migD! zB;^Blthj6IH6yDD*knDF1yX1Se~2)|fAcRtc6tE<)aQ_z4S-pQV0W4T z;}&H3GEBeMPMWdvghE>IjCe6t5l)3#IAGJ1Ou^I7~|Qz~2+zFF zM}dv%rEP}Hi#9qXTVg&VRP26(5F=;?>zX?e{F7GUozq$!oBZ+?kmUFvnt!W)u44&T zD4 zZwvHcXj$1b*?#CKY|!Ar%^V@`G#4m%#6^TB+qI|cXFDZ}7px_53rBVRtdip@Nn8e_ z)wAa}klbTUPqYsLz}fk%`HyPU9={YBGivKLVYAzN-Cn+3wbva(YuP8RRR5kOh-qdr zEGj`f5zl!dFOzI2nyOc|U&A&;FUhVlZ~#T3`NK}sNmgaZ>RnRs(JShFB5cuk*ZJtp zu&K}PcxaVLPMOYkAs;=J_WPRBF@5$4jB4TfP~5E&(oJb=*R3CtABZ#xPq4L+K~@9B zC#UWmzfe{EfNy~+v#uT}+` zN#|(&N;N~&J-g0M(>d-uy+jkaP#6tFua<&&)If5ADK^Uj!3tmqAnxC{%$yN84<+cN zuY6EvZhs{9ug`u#5*JAU0H5)En}wC_!YJAe4;~ruB0k(=;=n9!STWx*3r8{R=5AE$ zyd@E~gzoPQOQz)jP9{M>@t)adR=OI=tE2-bvk3zQ?g|~c(F)fE!<1P>HzVo4l#AGT zssC{&{JbEGB7zxTY2(e7^utJv*jb~CsL}y39N=CKzSbmp7?TXyCAJH>bA!EIuk(Z$Cr}nuD+y>Wq{p`{u^9?89-!L8f2N@gzv_wA-uDY1#mDY(LJzwqgDvVj#WA7P~zM zZfan#H*X*O>Q@a^!N~&tKrru85W()?2x}M$3VL6(yA-IfTG|CpJPbZ<@`w1Y;522) zW*r%M_OH3A+Z6i;SJMbi@EVxTqS=+7m-=z1GJNRqy8xrp@b|iP5<8Ctn1a1BPkq*X z1ogFn7MV;Ca^VGtFk!hqvhqvnMjNOyXq6(ubib>A0r?pPOvMS8QaUo2D?VdMvb6Bc zB6<$relc?CcA0`Pkxgu{^_?jkTolEJ5Co9HC^I2@oZHkWH|n ztPlq#zYHz-R*M$W3_8~9;cgm zj*kEQdo`rp-dY{W64;t%0fG#g{n3fLU)7NBJ$vq;H8*1c^QmSS3kP?O|zzjo(;@hj$WHjjgzu3O(`J7z8?nRpszB^wWYG4=h>85-9ckxmH} z1#R%h(l@r4v}M}>boZn3fyJ+`p8-9K*zLr=;_+J(B&LPoT(}_-a)d1MD3IRi{YcGgQE?a|27v>^e43FVgBtf-6N7<;)b2mG{~75vHZBuG~&i%}=C-FrlO+ znA~am3-p=gJ|!I@yKG7;(5VA`9upE^y`I7q7;!0V#i{p7StZ>-N*4|>$-g(784 zep|zztD3pqxQU|2_psG=v-gYA+Wo7$dYPd_DZ}_lj+;cQj&TiJ%Jtf?Ye(yH%%aE-{mXn@G?SZ z-RmASh=cO&Y3W3jX~EZp$Ul>_$ThmuQHGv%KL*hh9C{I1w7wZXHpJ(|Kn0(hrFfem z?(+bcO9LhBc}HpI zX|y)=V3_(?j5yS3`Xkr20XhC=)1y3sO#{or~QcZbUYK86JiP zif>XvnU&%z0#$hk_-&~1>{WY6Z@YJ9Y6Pe>8B`s9+N*un25bxyLN4BGv?gui)?TSE$s75r`j49s47B%W`q zXAyV%Pxt2hGg{mGgdGIENG*Nn~&7&b@S)IMvR zi@+W3Ps8q9ch!Z3CNXvt%e;-7ff;b%>hI%QSPb8K%{H614F7ue!N<4M5v=|-Hx0BM zZbpaytFld(SFZf6dKLa*f?$G99IM)606>&)ms%k*kzrC_O3v9t6w(6z1gVZc$L}fQ z0N)I12Wee)1y7&fr`ekO<=^ljFQ-b#>)a{`jovRh5xnMLCFNg zHLllF2>F&Z1>4VSXP(TWPpaQN=35a^&d-51+i+aYZ*WWDKU_iD*j1iM?N+lc1 zQ4T@z5^$*D%U-G|zSIP;BK8c60_VU)!SAWbizSms`)6c|@$xulJi&()DeefKF;qSt z3T6h5qr%L->j@rvXL22^3w?VSqQht>Tsx(4$6#nW8hR_xg^c5$J39(@G~x9^n%G|SETDEJXPzCWW%Rtx$}T~vzAoN zkk#uy6@UtBZYH@o#O~D<-rGf^Kf~TYvKx$)V#^cyDT@(Xqf7}Rj1+izu>|OD6LkzR zB{hT+iGh%P2(aH>4}G&8U#|0NekBqu;chjvICxKM%#Z85tzg~HFMa>KTp9R$qS6e1 z7v#pDx=SQg>Z2$?l08kIzUF55pM#%#x@FZ>s$e!8A{f1g9){jZA>~A}>gjc&W}YeS=q+Jz(dcpMf^?4M^Lm&YW;I?hc0sg!D+u81L*5* zI$kA^eL!AIKNr*ouja8g3_CwnE7<2*oWV~1a}qCNOR4r)z0;Pyt+d$&l}_2=x|CvG7Udt!|}Zt74zrpm}1 zlrdZ-hl`SSmew1cSTm(CTS_A^sDiXvtz;2qTF#w-OS9=bhXgltfl&&Wh2(Y>u(rXd zo_ID!`ujRALtHzb73qmTB$8qkSN>BlmX)YnrVi>nB&cI$pZ*#5b`rk)TH4vEfw)Cb zs%s;~X$c$w!>GoON#@9U1?}d`H9jvr26m5To9U55D9k$Tr(O!#!P#gqIfsz&(HtF% z@f*RGtsMa;5gA5>7v8P4L(~r+o%sBW01Ygb@D~a|aZUscv&QhF5t#2CS)c~k~Iv2@p8u&R8tQYpVX*WuH)4%mibOa$2*y{QHr@BTHe+jXJ3V!ryw zVWeLm-sA*3>btba<96H14BL?C(DRG1-CU@*jvF;1dm7l@e;`VG=I!g!n0rcaqrnln zeF*RAASZIqobtZu7_o5%!*ktipG2>UTv7Okv|?<5zV3yAooN`q}7>|s$WJUwD4vH31D=<_fRYZR82FMS;7LUj?4yiaSd{(vpz)xB%P%Ba^M4)(y^7}E z&J(`UG~zW@%0+UWPDHjPLvX>SL;bWDw|{o-v#kFU9w}m(C{eT!X=NzNY4F$~QCT7R zf&}LGsL1g=4TKIy_3^^4(ysPAkWXkA)lqNK<9T3Im9Gg6=O?Ppm-$&*xfVvZqI~3J zrwSJkXpVxWT+M${f7L8`}djYrL3{f-z*S4oKLuwuBbUJ?f*MvMj7s(-eC4 ztz~|`$UbS!>V{W|%ZPIO)g-7_0HsRTZlX+|sxR-aeDd}!$=K)$QNL+vYB#lQSYt^$ z;Np8jXKtHf4?Qa5e#2;RATxPO%6yK14UKLLdbRB77AtiJ3aAgDA&H`i`5PLYuKR5N z{5B~Lf}cfPFx}73A%rlsx4xxdTA;#kx0f8k(OBLgPKcpAAs;g}jqF={Edz@M%Uo`LI*WpSB4k-}EE}vhk#$1f zK^+UENZv@e9D7Yti*&YXU&vhx&#tW7hE|Sc3rCP^%YeZc*o9h$(30hyL1G|iRre`F z8?B>+hpD`A%R`Kad3KSw+bilu3ix38I1Wj|YJBD84@c*Sp*F}%m{kEEHD`4Bh`MPx z@^esisi@&aE~gMr7d6V>$q5uUBwUq#X)7f((toq`z8^W~rJc#=Od>JZL>@D@!NlHh3Pi6Xb zECY0D_P4C1g+yW6F`==wxp1atYvVL0UOB9&L-MBxd_-ASj82{*A~sQfJCl&W2TEbg zN>}0OjT&@n0IC!SF5`}iLypPf9UB*(A=7z)MQ>7PqHUxWD89}sPmI<$+CDVWxXg0* z_}F+rLMo^{i~*jkm5tDb!M9(;wcIDF3_UP@YeP4th_SVB&K$}>7Lp&`ATEV}jl{>f znls)jr6lI@40tAa9N3+^x8+)7Cm}B4V;a~E=bT+%RDzz-6=bTLO}@fA4(Nr>oyCIX z5!h1&tT{1ybaN$w=iPkd?WNjD@@M4p5Zp0-q0U0h*Ql*QdEv5uXUm;u_c z@_r(JJe70*GwFfjiZSvoTpFNGKRFY~h9-1as&6T$bcoXl1iDyrexolxde_i8m3;u_e30t3hWg1y~lOw1Q+WF_)mDwLI)x%l^~`uA=T z^90v6)SHmfe#JA{ncq+>`m`hd?y;cFEu0i^4~1Cvh$rHjXj>45Tq&pG>06aR%11iK zKv$Y+;+z51?q$q|)cwuHuS^%#AeV~#bH_1(B`N`CTuZQ;zR0WT4AUdI`LU8NAfLFySEO)X2+FntFcbHLYZIyhk%=Xsm+{ra zEjiC@&fW|ZOm_REDrFaVWFjMik!W4%-C+SRxIIb#PJ8h$No<94&^;DYT9g(Zp6^C^eoQ;)CtaIX}lye6101~+RuLqFcWr`*y%xGc%NC2`4ghg z*VSO%0Ocuy_cR+qk9!7uYMT7^kNn2$xhy%P%QGz<+KbOf)mjUyWb!V*B^<~x^ijaOTZv+5 zSy#wobX_Xr*MSyyy1k>4a30)gP7KWvllBO}wS1cZechU$@2J;ENv$)q+U0Gn=o0M~ z3>PkH8qQ1OZATV|bV)9{Fi`W)SQ_JLsAj;lC&b*BHbiR1>`7+E;cJt6GZr5_d|?`U=WwByPlghx=jl zUfiLa&%GA<`d;m{+r-_nzC%2da#(z`RnK`r5sGgPo0$O;wiAlQc1d|D$?F3SXmS3f z9C*>CUC%A>BQY4CtW5CM%5Rv=ufUXGwR%tAw`!g&ND4tQ&8ZQv+M37g?>fEoTwijj z*aH`KdMCOTUI15h-qQ{gPxW&DloUK3ZoreE0)*3{{>O1?M+RKM&4*QaiW&4;C<1~$ znWWMQ;7kvw^Ju01mNf1qvJl^mh)Sv4J7=JFGy`KMsf|{qfI1TCx8Lt7ovDbU>Th9( zeHi5Lq?c)Jf;US$VdtApFba+x4076cp`J=UrXPbAkTxhHHY3?AV`nKQDC!sS3fp^r z50M*)GY(mMx_#mzFPUzcX!0}T*u|1WlEE<>gS-=Sfcb?}f=;q%ZFFMJ zNtf0^%z3H$-G^nOFaFQ8BkgM)#@Nsi1^OwQ??e=9BSY(C*zydo1Cz%E^asPm00wk< zdlf61)QfIXy_WUGe~}Cz`SJx*x21u=}gW$2^b3R zVCvnXm5C$Dgnt&)J}C-M*U`UE9rJK8_t6!wSbI>)dH6r z+xxG8Xb@??T1|)xZxM#K%#2AVGwi&Bx#%vflY4#6F`V!APiUd%9ConnT|UWr)DWXcDwZ3?001Ya{KTr1r-Ky%pV2~mm$OM+iX=nJyZKQ&F2f|oWg z!%>qCjtA3f2BIjc$L-nXeXbv&WK7W!n?()N8_uNeD#gSUcGEZK_WSF_6gvgB{*o_< z7UGYvC(VDCm6EA4gEKiuAp{6lr4Woi_2q*f`8A-NRpFj-gi6P-iDlrj!OGT1z?}{^Z8+e;qnsFS0BqZ(0(JO1~`FMh$>|VHFl%1U!iNfO5 zJJ2Fu-8`X45cP}Bfh-R-NGsgeEi$ZxyAg%BrU{6q5>g`Qqcnz29i9emsr;1r& zKqHEkSZS$n`WRF!Fk_C%MRRfZJ_d+1{NAbHXgvDT>^o;?rQ4on0Pa2$z@mb`_eq0DL;Ip9tN*21flvFN@yPi~=#? z-roLT!)|!t?Q6EJ#$*XhVpct=32-)f%I1NAISUhAYb%`#m5)`ZkHMZ7-)iHFA1+m5 zVoVe2K9|>nw2!A}{fWXgF7 z?`dD5PRvMn5RO1WtG;jAU^U9!jtUGLls@bE5cF>}5Ky#Qtz(|FlTN@`9du$2VZ~8L z4cj13C!hhb7DPB{uCo#7TvP`Wdg1G*;8j;SkiclW*bGZEq%EWSmgUhihhYFIs@50yBa*;B6{fbo%SS(ET%PFxHNJA>W_53M}35c*^4KoMzo zt?Ls{wS#j2*Qc9o&WBu3Z0%751i2f$2z<#4|F{Xp7z*)+x{+tWZ#p*)D~m)o+R=%t z^g_9S6Oa%@-9KB4-8o5aE3p?UR*kUeDRc|W+zYnNd!@Ccu_qCI0}sHU=ZyK zCROPk12PeZeQYIh%`*m;Z{|<@Eycj#(Fe0WzC6c}J0R2<4xGy>lJTR1(@&lyah*b< zpjn@JAp38}3!&l*_VCN4rm2d;^!3Y9qUmhG2N*ho9K#}7q(_@yb$61Z&D zZqFjtO1ng#|JI>M4ANzZrB(azKf#0*A4yau3B(N|0^7r*2-Oj2b z>of=dn-?y`9z`7sSFCZm7si(9Ulxh=I;k`F!Ho6gqUB#D&)sppR!=NO(kRlmOl0Fw z{^}A-?CZ9M^ZfrEJ>ZCY@~!TE^?n}(z;_d=ewsEjgZQ63Y+_KoRk_!qEq50^i2K9P zWC+l$=@bn6KU3qPB&li%{|WdE{f}3SX$nX<@T;MXY+O5lJ3#;l0gocd*0c<^)aM*t zhBU(>n-s796Gca2r0_s+bj*R8u@kO3-E+=5^e$4UYc7Naxes7bBnl&$uNFw}9O}4N z3tXJzdvBCH5KMU^uI*t~JeGiN$ZGLfV9O%L3d5r=rEKspwHiGz59u+t1?ZmAL*{T) z`{;zyC1(5v4?=G2cWxs3{k^LNh#ts9Dq^pu@xnKkp!)UnsC7H%dVX@2ate9;)0#5w zz3L1li?Z-}t*RohMW5(Rn9=?#E;KnG(39ZaOSR_q3uUbV10d;Ze@`Zo33rnGNK z9n=fDD==Qfk1oA9B^D9q$n8KKevEwA>trVup%co}6EV4{-vkBO^a~~66BN46Tw0l* zO!~_XjDWxCZ&XWA;t`XW`%|omccvRy#F2qZ+Kap`EUc!>N*%>ofk;N6IHD6wqM%K+ z^u*KwE^Bc+Pu`}Azj+>Qc&p^VQ3^!EIQYc1bbn`VJb7fZScfCo>;DS$O5Ym@!q6)+ zUOs^|396!DH(n6z6~ACAoF6Cy49$pVPo#tZZTX-xC5&32fWbfdREXUA?iHl$T`J8< ztNUwhnSD7ZFT*xN;HzUfusNE7j6HPsU!+rkaP~2+^U)Ucs8CMlY`5`>i-p4}$K6*Z zBa7og(KX=4zTO$h-jwS@o9VuAes%6&04OFiUZ(O#xp60@+;DCT&@5Pwy&h`aTXxV5 z?l@1|Fg5S(9z;M%D}jqPt^DF4V^xNMFfwn8R&x$Qz%cg>2^@8ZX?tyS|5QBFXkNW5 z5qa?kbYTSBD;z~S0PJMZQN3kNEG#NQp7To+9_)AviwP8JdkW-I{aWh;LWWH4rIG3- zk7LzVy#qCWb^B$W6y^^9{3O%UMMwpt z?-XeY5rHx|idTCBJ4glX>`0AfQb;_fyv~cKpAqWo0_qCawEJ^CqPwR&mixf&uWPt{ z#|aZ5fXGV-JH!q{IG_t@G)78 z5(I1_c=i|?w|4g>tA!L|$tHk*J?oU0P9k#ck75ucA9m~G$%f4=0nE&326vIpWRr=- zD+1xdHE4C=S4i3g5`cN1Ab4SHRQzL?zj4iBxtaqNBH{ekr zRwzqP(_FiV68K1e0?}14Zsli`Aws^Jp9z@dx`l<{T{qUd;wrnR{MNtNS@2sly zCXpdJ-NS|z>_?*c%fTA&Pzt(=TQOkVR*N3g=lkWx{~}v&$~@R_vh>55S5`rxx;|Q{ zVh=6*!X&!r&Ny)2@N?3>KH66}VQ;pj(OaGB2N~D+@s~iO!9v_ z3V(nRj?)UL7@%t*gSp}%2DLUj8mt7N%19FP#;xc+2<3&mEmp3oedYd7(RW-+v8W%y z^`5!S+DwBa;9Z~w#vyNY{YA-EWC+h#k%$;2lI_b*Vu9#4tfiR%_(jIO_Cm;@C|PF6 z+#fiQA@3dYk^tVT(KW$xx#7egNB}C2-q4o@9l+g8c6P?3mFYtO7c)5amh{+YrqtG~MD%C*Ad= z7aft2q{DY%?rkvTsbkczkrUlQ-K03CZZTY3#ul5=ZgI90U#pK6o`m9?UA(&YVth;j zH8;l0=b7sz42`TQKnDE1vO*azUHQo$d!a7=sZ^eifj==;)EhErq)tx#{Hmh~7ttT& zY|I4hI#o!Tm;0}JPfOSE1`9sT(wp-ztjdkVn@4kf$wVK2R}#?o1YSQkJLF&^MkDxnJ`GJxy|g`%xChzdr;SB&{0E7}vxXilKE;Vf zR{3ENw$^Q~0&$BRzMxRDhpa-`c-KeccFSEAv+A3l@8qS)u^3n6#3+s25NaeFvLO~! zX%0!M^1*MP6n=ck0TzeoEL_}Pb^x1g&r4f*H3qZfdr)EXafgv}BO8>O_j|e*3OcpJ zTk8U(LAc#})hlc`sjI=xD^WXQ63PkbceEpy2@cXd2NaAtR68+8shvRSLz(t>_cbUD zCyL>Ler4$c1T74yQDY<+ihRme%X`Q_lP0B+@wXN<^1H-s;N~oRPv*=EG-g*~M6FDX zb^_Hn79Mnecgw?860>&BEyEBU*Lk77V9rs*cRs#V{AD{dN>~JrW5DZD@?hfR5n20` z;{3=8+g^k=$lT?M6B&(6BybPHj5X5t4)wXrLicF5w{&FV9toG(qyprh18StL2O%sl z!EfWq)n8i-e#|dUT>4|NFVY3{0R5lq-uI41JyfOa<$q89T0N2u=nyTcJp2izq(r;> zzR8v=%DD2rK1b{KkQlnwhV~thwtUm^`Ocxnro}HyAV-{+;$P3MQp8f|!Qnu>_(rq{ zrf0OnOK-hs%cDZ4U*;zri75-aTl0lVLxf#($wJUxu}cmWGse{E`bXEPROW`El{$bp zWp|26!`JK#fs>v$5>4YP{aEImrUiV=$3scO*@X2BzrcAx=;bn9Sgz3Y$pO9~}M*q{0-7${&V5OZk0n2)G-H=xI9ANEA+Bp;XIHppu)_?~<`4 zJRxtlW~}xhiK1rDCzX}l+q+=Dm7CS4#$J)lhieZInT0c(35VmWMc0fz(*^Z(1xTHc z<-CX7xCd@>>=dgW_8!juXp^Vd4NHW5sAkp^G}TgrfZ|f9hOO@5_7Eke!Nj}16=Y`7 zRCtEum+fw>Oy_rJaD(}Ehwc&O#Ky!*l(=;;)$C<{2mG5*f2I@kdS!egH6I%x+}I;+ zZa{g-_I+6Dln|1xFiVVL`FylQC@kXPHrGduOuKih|GHT}lbG{$4|-oF5|KlekU>^C z?BuzSVhL)<>QAR>{7wf?yWn#L3sXYV4n~e83R?L!8)s~pSn)y`a0koLdCsLdJ>QWy ziOfMzGB{(8jj+P7ow=$pTbj;Oosq5g)NG)+rNjSGlq&2h1%RVb`nrB;ItoVn$*EO0 zLPU=&e&LzmssZM5WXY9SEG7@e5dVZl481Lct%f8i>yM)p$z)Kzgt-c)CJ4ve0m&66 z(SbLdO;&+#r9nRH1l+eTJkx2nf{o6$Dogor)h&DTY0kN)D(dZc7prsi65(x9+NH1A zM#)Y@ZRg)H{7`;9C5aKhh1ECg(6JET|GWd|Ik4>?^4=^dIe3TL03B@u3G%x=Ym%nf zG!^Ck*Oh3XBNU0&vvE!cgSASdw%~QEBIhb-v$U7IS2}oC9Pxn0o1(*REdb*h`Di$# z8>v2BJ!=XG_C#BCzSp|e;j0vzTLxG~pzNLcEj_PZWPVv>SYk9~HyPqV8I-R(M}JjtBPk=~_bwd3#9cR`+6_Tj1@OaO2*;B+q^1Cb z658FcqOVjPH;w5y&awt0W{-_-lr=ykmDI=}DD3-1lIr6Qs zEi6%QOh`?=UG@(|R6Ivn%GdP1zKZ5hosL>npq`lu-)iFGC2*!qiT5t!%ep z{JMiWl4-WZ3s6D0vah5!vNGH_ieB>(foMk&Uo0zvE{gGgz?pT~`j5jR#+|Xv>#TRR zAhZI8@M~hxe>RYgPQR^C*q2EMiLX9-rE$gskcwBj$$y&nUDfC77t;X+SxMoqykUX$ zsC>$$X?f|&yVj6MtDFr^do1XzJOHqFa;ASf>y^G;Tphz(KojT8gtkvQP48oXfXVBa zvSbLf$QOmv+ma*VbZp?G5#*$_$PqEF(ZCp~QMCncIwlt54fJxL6#BSf4*SQyUV4!| zjG4duPUT6V4}xGO{f)`g`o>*MG7PtcjwkynD{T~#WZVFB1ZP(Uf5|8=U6s81@mgOR;MqV=^kPx&xs~e`x*_h{$RYdgECd0 z9|fwyN{r`WA+f%Gn|8*e_EYyiNw&`iH?)h}Sa!l-{MkP3)APnAJ&&I3f$(kIiYUY` z$5l*tUx2DIP+^nFVm8J(OY8aUgyh73HAREwD#9U@njmGPAJr`Wc z)kW+>G0!1YGEu>nt}Xf-qj6q8k>alEyyYJT^P@&+kO%G?<^jK7%*@MqhxS^odCx}$@;jgBqYd9}i>f)hbtwN>W{p9RYgRK0o#rgw<3 z6otXpDi37Ni>jiQtgnsh>A7Tx>G7%zGm3+k?$TCo!fT;zA(zzJFX{3pG?>r8qP`@s zY`?`0S&nkF>^7Wy2L|;=yXyVGnzioJ+f(1=Om;de%sO-iI!N`oFp+EySIzXu@<(FV zQj}&`r^9m6cE@cD-OQ+j9xZ#iUO!L~C8h;{m*0tj$+h$o`+`g}vZ|qRJ)5+`OOs|H zpvbzw774cMWF$9tnm=%Es>-ra*H`b~_e3Fmr;peHyXCbiEvrzKTO2?}iwrY{wM7RSPZ z+&q>I&6&#tFdhQp-RjuyrCq4k7{vhKe7c}BR%}NgMW`8taNl*c3msNS^HJw;{3;h) zr!+fhdiHe|{neNkq68dVFaKa-$SJ`m|G7*sD19(STv;yQFz}@mTnn=IkK;GH%p~iL zVMro^2mQK+FuqZeTFHh;nktzBCD~zzPF^q{`;uejsL0pynDr-Bc+!Q2mtF*LDF>AI zt8CIVc*n30hc8sg4k$6ug!JYz@W;3nQ2*(Xi&B4hSG0*xj|4mc+mW>n_}|b;$qn4G ziOEx4;vbe|iuKJL#;rnuqVB8Y&JbE18(Y_1El3s_E;2&Q1Q*%k($V^m?NMpe*=aZXW5&BT!Dg2^vz<%W$ zN7G9kxqPhVuwPw{8-_tR4!+waWt4(D$5nza^0L9`sFu0UQt9Yai zELU6mzf3ks31gY1=!zC9qk^?Z(`UIUZEkL*bnnRb?sM<^RSAvT3yDbRlV=CGTKF$J zSZPi~&KX=>cy>{x3QvpGh-(?V$@dLo&SS?20@lZa*^2*WBI*AjU!&+Zg@wEo(5p z9@1%v3VzQnKEToO8C8h6Xn_Zjri|Hbnev6hpB>_1G}4*V?3&G>w%X)=FAokjib|)F zotv61ARI@zB$<%;jby9h6X2!5iC^u8b~uQL1J`)HsAS>6x@x(6%5Gr&wp9<7==6^w z*@g6KuC?!M+90}wR4u&jqNRjnnrQ{TjY=ybG56{n>IJMFeL!ZoS6~UhwLf}IC@!-w zyF|OlMRbo;JmxXbCb+ULT~JC91^{c=hJ-(aWr}yxIFl^zu}88v`BbZ>?1ZTH2-@>f z3wcOT&)i>{yin8!U=O5KS zE1V-WSKh8NibP~_i@*cvLV0zxVH~xv!a?~fz-JTR7*@A-@VHN*>da335;OBh(%L7k zR)ADVvR8xZWFu;B9;_+o8 z(o3!RTk(VA7?|IeyL=`K9O%2Htlh8-#THzKsB7t-5EheR_$*!DmCfb7ZOGL6t)48h zKE>M8g~fP1lUcdoSL;&aIQ&{qD)jk z&e^T`y0mXwazar13q#~XOPcU*=eHzUq)AfHdV-Heu6c?6vlG&_v_~PN&2SMZ%X$J_ zT^#MP#dFVdwt0?gJ0EhljR0T4SQ6xc>xycT|7dUN|=Tbei2N zIFeH9$aBgQhpG`r@0o_r4$S2O(9jDt_MMr~)c8Dmr%}6q02&$L5n_u&w1bK!|J6VF z6uVEKc7!(evx^GSb{bKvKqFmj4X64I!c>&Ge`!5}-TZ|^@PB-Oh|C)zz{)BTOulAB zFT7CQq%w2Z(w;wS^r_Z2C(1zyt#$3CGr0O{kou%7Zb9Ts^_nRUWJukkCCR4@Fv)zc zS%NznmVyS?lVdVN%i`@H7!8|I4Tx?30g`T1VWK_Rz65SlOxvB18AF0|7-(#w+Vo-O z5OoJaC#5%FyAX+s)HR<~*QU|Aib+p?#I^uN;GQE1DAO%0=FbPATQ}vKcU^7VV=&r(6Mc ziy~Gu8C2?aHAsW4|6_x(l@JQ*=_Pq2;OTD4a)f|>&3BqB7b5|Y?()73Fl@R6Qc>Uz z=SiGixVV-6vhe$&KbetCa}_PX0qIfIaB&jM`!^g9(kCGi0hlWZveXBnLMQ(o&YoU? ztc4>?LTFyb6pU|N91t6h4Q`@90w}95>c}(w4tN2;G2kQ0pnu{;Q@Q!j{me*>-)H<& zrG3{veS+4dEFIx^Kh|m&Ux@Uhl^Go$w;#XuBiy^^qW+^J05=Cb7KyOW=2W`ILIjoY zZqg8NMTii92Q*I|MQG)KG?Rn5w7@{+H;CnQqK=}Oc^7s~FQ&r5}`4Vbu zkMiceQ?~cPvO+C-JWMmlK>(Y11aaKjeN5uge}XTL#0GV5z8z&V;bd^yE=^NP8$8x~ zMV{o{og}~}FI;Zd{n)_ez6GHPM@>(=67~6CMXUSe(Ve|Hz_iW>$TT#2w<$*eVQ=E( zwwy}(x!>SM#DN}B6*Cy6P!izdPkDe+TD%ss2{3I@QT`0h>ZY3ggH{vJ(~J>}f;jG& z|FM_yrKTu$vncneXL|V;@o=`8xCpnnO+)2{?VhxQgyiWickWPvSAa0vXR+tMi}A^C z8X*|Dtq!3VKmz2OLp}4Yv(o&hP#lt(Mg?H5#KEc_0Q5=anBP+DvReq&*6DQ!eN$1X zQd-B;?f|IFw7)qj_6V6io!o?>w>pInYy1D*g9p=-_pX2BBwUww)HL4K0yG_=za(yV zl|N}eH2nb3)cn?t`a@60jjsD7+i+z$dhiPgC6~X& zXyHu%d!T-aZL#y5FlLTg2xO?&zgklPJNHBjIVxiPb=oE? zF|ZQ@Yb@$?cX?*~_>9PPm!J^(ddSTWif5ot{N`b>tPIJE!9x)O!HVgK#txm#x zl*JAOjE}_?1}4C5X*IOX1lQD7$Sd+rfZCjcta5>dSaZ6^FOUhyr|_M^_nKgD==i8A z=ka-~Tc3+oB1BrR?`PY+e~mwpV^^HaPzx_*^dPRcl^zDyRM!GzmS!188_*UUT`=<( z_^pwYVWRBPYI>%3l9g$tVqd=o`cw)EGw`QW-!00?c*pt} zIfm;wf;VB*lx)|N$_LXO1#dXP)-$0VPn9Qy2)#a$nhy`M=d$`H=DIC^(f#Y9S3>UU zy@F`@ecSIaS;d_zzd1(b2^5F4y+V9_j_7--dtIZ0Sh(g@rPv?)3?WAEywyZ0%I@i+mjs`9=~ zwh}i$s!j$bmgQ69%q0W>$<8Ppm~n-^!yV2T-na%8rQFVfeEZ5}=Hq_lwd1b+ZsdRq zuZ`%v_sU+PKuPnKWzsxU@$l*1A0$pE0c`Y(w~55 zAu;Lcb`I@KtdPqmkh*^_Y;#zM`9MfHz0^Rrwp#W_k|UhA)R#*agW(SZ7zWkkPL2-j zN!S_nbP4Mza4qeJePOC*-qYUz`6vu3@D#XV`)tfX|F)gy9i?*?%j}QS(vGR#`*ww< zwB6?i+Io|Kyux&ySb}8sNmju<)p)d-rmAfAJ3YK!hhu3ksd+ch9Aze; zlG)NgSrxk|AT)Ma*4P?3%0O90tZ9Ljm;WV{V^hcbWL-3c{k2|BH`b0W`g#=n7UZ?e zI5i9*wX>CR^%QL{bAoItM66B7oCEbzW}2IfT%JAAN6NAx3c>edM0Jly#@x$B|KUZU4+)h?y$P^at-qn>tkE;o<9MC#r zjBkhscUX*${)$jr)zKziyo(mPo5J@;&)*rF7fVS%&BIsPJ`h^Dq;|$GA-|l=c2Zb- ze`)w|{)aU^+R*S65Hvg}J1&}_-okdg!@C7N+2jtzU*h>8Wg4H z*?w4d%)SH|lH|B@P04dT?a2ul;$-i`m)g+NJ#bOQdwWbob z%o|PUFzN5hqt<~xD@~5KRGamTK(b6^Tbt5U(kBF>Zutb;dhI)atZLa3;%bfy$5q~# zM)MtSm#^xr3$`}oS4=>>;!-?V+zS%B2w>#L>g_UwA?8Qdf#{FT@RiCFpYjkb2cpfV z4UC({fwE^5W?-?*|Hu5$Be~neL2%3xx?6*__+>~}7!m}+lCA0owi@7!3$Jw(yO3Pd zKPc29L;9|Y<#!=S`a>Tw@ui4uhP8V0R@31*8)c+2!Sv?o7kR;waHqQE$27PxUFK%& zu`a?o6%>)fL!(ITX4YpYRG|oy_Y^wx$2wK+98b6UB~RFea&n%b6=|m~O+P%LXC&da zGy87jKGTMuerDcnNWLPMbM0tMU9!#@G;Gc?JcPf}PXV1(zrVm&0*k`-6d{SNskpzO^vDzt$-U@mx-| zDjmmEKbthl^_K}EFy&|}LQwHK9PPj807GF`xi3drn@fP%_ean8bcAxugqpumz12~V zXg~Dr_i1&l1%<{<|9{#mdNrUaVi7i7n|ZWNVmRM6L1WZ`f94WGaw8ps<2AG=t4-Vo zKiK-i;NSeWO_JCj_MDoZbMm^-KGRUQ!v6X=ewSUPu^?^YEw=+h&tO%MK1E?znt5{) zvtX+Q6cYbF?6`)TwoFg|dMvGX$=mW(~OF)^h0*EB>~l zshaf|OX%~wS#kU?4&VXXk@18l|L$36lPEksP&uJevV7fhcgS=;t$gYy}=gVCfFZRy6Mrij2V$EMfI*+~NoiriPO?Xi93IuZT39YiEF z8Q3rrfJ%*}$tSG`OQ*j+3~Ka9Q%39@w2<(LWH%Le>5eSg(O{$)tY;}H{gaA**{CLT zXs*m$?9a~#AwCP5J|9S;q5}gRJweOJ5FUbuRlkNEv}Cded4+0FhSzhD)FdKyI~MLT zstaKxe0mfFp!5&li(Co5;`gMJVFdp=b#lKObm^$~ z!+t$PG1z~?J(_$soZGaXF=38eO;x9gW%HJ^jJJML+FLa(Pj^E=!^3jop6Qz;vJGAp z{(no>mU&%x@4Suz2vArTdR7Sf>J_)6P9q-fgp$H@swUWmAq_ZC6wekL9!~qpCJadc zW);+(hKDv*!{K89Ju4NS5kx%Q5N;REbcilGMvGNd?@VkeF1w&-o3C2j39&TeuiOx3 z6T9wf6w;qzfmU=ammX$B^+1H(B7M-tsn2JCr0X#kn^W|{Gr+|ZYnW`R{au!Fe;z^_ zM5&0^mKJ3O(&RPfpaDiV*t=N=u7UIon8TILy_BT)cYEyqIR>MW!_>uwE$kAHJGWeG zN;4pT1fmV{*MZ)LT6%OAPb)T41Jn%Jgs~NMww?pf$k%%{&^;)ViI6Nl(d)&cfv1g> zlK>VNseN&#GEX|89S~t>Cq(`sZ4eyrxg&ZR28fMZ`b?*saCn#6uGKcij$6b+66EhV zKyG>5^h{!#M1m{KWA+}g@2Wc+hTWUzO^rYflB{4_DF(PnWO<|OIS-Llo#V0M&8-yL z7I9O$Lyj^j#K`Y`!f&vUt*XRl>k?5ytA+Y@1F9PE;z8hM%qlNl6@9FavA2z5VA8y$ z!1XC!C`)zvxv!9})Mdp@jH~BE^$S%#8m#Qo!8~)S@&KD!nlG~!7fp+11xeC-mLwe( zbw|@VM4mFfg{lhURXsqebTdmUtdimLAySYx#mSQ#7`%K5#s!0o|ASN;ZA?iEnfIJ6paz zQ98u05X&H5Lh?EqD8-B2lp|c3W=lC}j`4K=e@X?(NXRfc& zTRv5TYHIqb>u75(Wm&YbVkde;2@XjwyUIlb@dh3ShuL8zXE40DfeGa)2ry#44)3NA ztHo?*R*-@+g0NOsnUDU1(xG3L$Ir!-Z>bAm>vqbDC$k1U(E`EEq=I_EwN;0dv7q!ao zzltFELNh2RaAZz#?VNj;$7bmihmvo_omJ^(q54+^o_(YMZYL{fggV^qF-CAR>E-Z3l(o#!m=O z;t$fhl!MZDWDHHVK&vz!=yjzia#QTLzNskkK~pBFt0|pgpUtHy-f4a7LXIv_lRW5# zmG$xJ7Y{(C^_h3MVa9GM!O3VrRX+EV@w-ZtQ~i2>eo)QitHKPVZahnUYl)mn3{%CN z-xyvXCi-)cbQ(`PIlm4k;ZU1`S?&8nsexMFR_o`poJ_0JJ=I%>2=POf#V|q!cxv0~R!f3qFoOA)+*jer@$yL3J-mta2x7EDpV?p?j(fHn`1`=; zd#$FtT94r5?V7l??whg6v{<(uuWfJ3a>`8V;DjAUh~hDcebRn!tcAeJSU!_8_Dmi- z^%8I-;ryoj=Q2kIo4sa%3awi)|D3do4v)4pFw8|dGrnMwI*;9q0E0rst%U@t@R;49 z0@sg50sqx4coSp_$QLi5L&xK)-O2 zpdNls*OYb4nq#P|dUw)%E$kG3X*stj;#OE(@gUl@VkOVgqLvAgl31_yTY^!C=oM>7 zI}p47`YXo~XC?EyyjFu6k0+P&HH_Z~%NY~kmT%!&#&^u}MBftsWV3uq3aL8TE6J(3 z@=Hknx1Qu^URHg7%Oy|atc_hN_rJtj5g22}vXWq3RV92Ltx9vR%aE)X*wHtV?>K#~ zK&YIfoB)ln-DOYe%;s;qMohmK?VB$5A}~^%(Z&)%?y8w~i8|NUa@;yu3$3hd&=kj@ zabPM6K7->OnN1%y16HNjw{J{;)X=# z+}R9*KBHJ(Pkjdz@z=vUUnsZW>Q)wxGuaWOH9!^EmCUp6r(4(HfR$<8jq?K~O&>GCIX%mP<8)5&YR&t$`AH)^NJ~aPYT6lY z)hECh2Dl7#Dl{#(uKG;){{MXmd+`4-^(MfNpy&5+<#0~0RYvV74F`>W=^C(=7d@&B zVH&hb@F$8$vPI76JpsyE1b?%w!iq9TtfjBbbl_|g z97LZc30f|e%7jxyN5T?2rlW}{ujsck-Gg3)%Rndm+gQ%{`J(aqzB)OpdS?XoLzlxm zi?vzGaYhYk@&7+##JXz?f1cN<+}Kpnn8Lp|StW*6-t#C3e`Kui&3tsrmPLMhbaL|* z`VrKHlHrphCJbl2rip4Ei%f-oA*x|%q~FMH`cdS}MVoq~&E4d8yZ7g(8h;%L&pk$w zd`|ADg`lveNc(cn2tvjXt;#@dTN@(piV+#kfv@~Pbde}?UK><%Qvqb}6nKuOkD30Pf5)WEWCOEBE9xK5( zAB)*CJDDxn*3|r!(8uWWD}#Cq2=S)P(u|){+)4PuH1|tm=Xvz`r(ge8HmVBK?uy4a z%U7thE9)_a)Ty{Jzejt5jqg6`uzf4M$M152!wk>HEuILrBiZ zbQPSTL@Qg@I4g!4Z(o%z+CpPMZ?_S_&0}dM;1#jH{WI(d9&2Wh6jqftB_h@}jv=q% zShx3CBS_XIwJ164PKJebd8&~9Cs(xXE@Rqn2 zgpl03_Nv%90bERk(Fm_Ah)=jGrYkTtsY1tz&S1DdFnN5#+&Z0XD^!7O+VsyfL2}Qz z@w=r0L@k`)-SMIfuF;J8e?&$mGt5YE)R%k2(``JpA-y(_)I7|SAZ*rVTt0+OQKGZz zyIpg%lo3@$(JLzbm{!w0JHuO*7v$q zikY}bmLK8r1&gC0FlusA1-TOO9nqwns&MP+PyDwO=ht>I_7J{IOudiT^#&dP1Zd1x z+gM#&9O(9zgKGE{4FC1OJeH7@2Sk&jd3uHtIC8Xa&Hu>Yz8{p)f^9XT0T=w_L*mM~ z6@O0G1F36R_Es|u@$b-G#$I^JH)_ZuN_sT3Uh;RdHQ_NjpvkV09bJO61VUuWwwD5^ zp(W`@h>*PJqDYgmJ67+=WGtZn{+32iFVeV5`}GEu+Pz2(e-Exg)g#mj#uZAyvzVp} zdLpOoD;oC21OANb7LU%p8{_ljRdZTQdr*fSl<9;gsdsbl*+KoD-W%Q*fH$3VC-^(P zABy>&;)553%7h&%0XXKaNtIpvjGgPGto%7^CUt5ZDnq|+-41#64WDYn3?Yg|Si+5Z z!~O9wUW|{rE1cQ z*;kA_bRr9JD#!S%aA_RUa2E#%BG@Ih2eEC?6TNE4nJ^jiC$3vUw9OTw;pYFb2EqnC zAj*|PVqjlS@q5@2B)}R&)fWi2(G=C%MCa&gZ%q~%pMo@|StDexZNBMeqS}>qVHhqI zPPv8=m_OW;h`85NgRb3U;04!4}*j1+*`k#m_3kxIk1 z=_gdltLmpLe-do=n{A?%0kJVcNPW%26&W6%xtt0%z|P~n*Vz9+sMg3QUA>kq`CR;h zUz~T-PE=c~P1?CD&QV$$^s#*RIw)#aCwB-o@;ufrG2I-WnJVRnhyFw>u=^Na<(`E9 zPY4gu;8gM#!oWCYkf#~q0yZgJ>O&x;ioBmvjg`O_8gO#uvQh&4Gyr2Di(HH~ zt+Q)A@2kP-l7BiXFuP`Te4A%LiGBGlMY-`D(}`IG$WZ!?l~M>8vz{~%31@qx;+~FM zSP^?-afTzj*dkXj)KOH+^#vbC>VFw@pXQ9gingNTfAdqq4*ZK#e(w9P(w+0aD3{*9 z9m2gFS4VZ!uKGtHD99y0WrHl(A@>m6qhYTjRp->!G|W~osk;~y0Oo@Mef|Ty5MtTT zWhaRL)HO%>!#cmguhln_aTxL(pI{$x!*-hDotfi7DozoWXI{8(pal+~?+Hci>o8vd3w8KqoGBp#+%Vqv>BkutE_d7UjY#Ybha)5!TQTY_(*_5j&_9<7j$a=^>#< z;>GVu@6Eph7b6}{NfkUz{!cCmHyIK}`Hx`{hSW&OE5r_%&>-@jFEE3WeJAY~-sB-8 zxH@TLC|CqI2qpmg*wSjY%YJeZ51WnLQwBC+KAf6oSZWcWGbFUsyR&1@nNDeu_=`3tn)NvHOKu63h#|P3F63VG8_}wDt>=3_lXzy4LQK z;X}~)TXySfcB-S}yELz5H}h!O>bEuj12^L$|4z=M=rM*OGGa20D$F>ZQhi&=RC289 zHCKw@HUE~(>BqbXP;gJrO`pzofT_L82T&%Z{jVZhBE9dHNlyY zT#z8;vS~0}^DP7$A^^5E${yvP6gk9sniGQGe{b5)+>l5JMY3X?`+eT{wI1J5>xZ5Z zL+XJ_ouWSo;C_s#zW|x3P9wDQysDlH3F6!ZP5327|lvP`jI}f$ap!CqDuIrq`iSf_ac6tV+xuxkHj3 z`B_3ycL>G0S)-?y<9@Aq=zzmP;(B!@ZNDEJ=bubH#3YC?bE3xQeHD+tnpH9^2#>|g zduJXmf*_OCP^Xj5yvME##A7N-%;TS+IC-SK^=3qPBCehDr8Bh7>zq0SaAsmF2^iU2 zr^EgQ%^>bYUr+A9rnsvB>0O6EXpI>GX6?Zqp zE#1H{(Ai5m_Ub&2Z23g&nU_1{!>qkGskjVQ;ueQTvtZO;UfMrUf-b|=>D%~mkhg5| zdk?)P^2%vj(e*m<*%=kw_rkP*y7=nBnfX`csLKoSBI#H`Amxrd!5PGEQa} z;_2iN`$`fzm_?6?hxStN59G5SrPsQ(DKw5_G)JYX8yhJ>ysi&>;hVohuUR%0+ z2fWi~ICh12$diKmcZV7vOsz=EQ=ZCem5>U$#&eY7MDW_p-e?Yo)KWbKBb{N6j3yIU zR0lU#mD4}BCX>G{qnRK~$4?CLi{o^omO{)(#x82il>5C)K{rOgFZ%-&1KsjcQJLpt zG99oAqYId7POX%QVX*eR=peqD1M8Yr4 z=(S3oD$1&7;T>&tgj=V~KD*gjzHQ}Q}eBB za3-&x4U4!Db*GSP2VT5XPp2ajwaX+tkdILjlabz&UPP|QMpS~Gsjk+=|JYzCkj~U1 zQL+CWSjMNNRCl+XrOYW*O~h~)utP#I?}iQg*)>@$kCm0#ViR9~;o2QpqP|);Wr#U1 z7>ZK##!v7lP8#hQPpRxh;UvBA35lXxkkBZJgBATY0<5Rw7a)t&VyDpLmUOkeF6@UMlNZo*{NKb}qys`zR;)xdwYXa5}MITfT$bnGsp@e^gbV1O zxYbh>G| zDf5x|5~9OSIiPX!L&=9Fmt#(JoXg>~cEFFbP*L2r)61203BVF>lMpZX^|mXt{W?-3 zvjgnAoNuZ9WQ~s`QdBK-cr;TZI@s4PG4JdS-s$eEg;^D$TS;sqDp$||3sm)4}pPQ0f`BL-+ z5~UjZf4EI+_;-L_Sv@@}R6b zDDc9XFxaIjGTgv_<58(_57f1fPQJV&`BDTPji@!qU{#;-F>zc`1VeQkTpo`S(#)#K zE;&K?Q4PW~4x^Qx=5r!0vZp=H&u9~zNW_}L45!9zD&#BDXWna8s!;r3r@2t*#J}@* z&(@JeHkRTCW%^MQVxp^Mh|7lPGKyRGkI?D=zu<^wtpWAtLE+-+5a41pUY#PxerHfV z`?ClY#Iq1J9RkA~Gm*BIuck9|y5yA8#-(ije4zfubFV{h&(c)VG2%4jd;s|mvbh78 zzTG6REn*QJVC@zqpJK7fp_Z&1N~AJb6d2TG%K*CG+7^GDn2#BrYyYWnGZnpmjKFh} zk01tj9Q+SE;$oQMIRn~0eAr1d)e#}34cMfj zq=QQ37Fmw&Q4g*H;?-{P)n|KdSGUn!`n^KTXg>i?H)7xkQ4B_s)_xvxt}#+t6}SNc{&ujb);H3!ea)jr!S3KFkERDn^z+%|n>jY45w2V}Z8r zlTJJC@fWi3{6WC#TbxI(qJPplf6t7Y65LsyNj&DR|HQb{!X|M`CX^8I^JJXJI z!ezmG?jiE%1+u$zZ1LPuPN8!M;@gUpwAnBLjedGG-rZwaCeo`vpQGjba?^R6!Tm_i z$~F}(Z(Z&&GIXndWj3y-GSVih%6i6TD63S<5)GjFcx5SH6U>GzCNWd;2?*L8I8Q8# zWotwoLiW*7rb#PIEL81{u3yNLW?7{FxXmL#QIVI2|4QgpAeDZXTSwP?D5f<2ghYJD zXMK1G;0Cwapr!rTykU^MM}va^>f@+A4MOvYCH}6Ft~$CBG_YKH5ZW=vHRT4BNPsn8tG-$oDzjcf3DC7CoFDg-|RT5wn# z)GG75=zxS}U!aQmza9`YY+f8$*f`5KV4C<7IpS1$EeuB{5W zNL*txogN#3imocm6V|bm5)oQ6@NCEHed{SYTtYpN)t_;ovB2i6e4M|2pDYivy zf1kg?zoP>D&Ox;h(+SH><6K;FS4lQR9EYR_V(aUl4t*DFpp_)s&1)wWrIrj5N6s`Q z=z52N*W^THj{G(vh9AdcAr4Q|mAfGMl+Tf80Uxx=hp64BTt`+3(Uu^DS_z=iiuS>G z=>Q5jH%G(TrMgrb6N2mVrns`@RuyQfO=wdDzF&6|mZ8|G-;>luQDeh6@T59djJr5> zycNDW@tZZf=k|+NFtksNlvrpsg{knzlpZFA$Xao*3{0X@=!?*~wCkzFk|SO};;b&= zej=;QONv(ViNN{w@xOsB@RD(gck*<6(fUka9o4*7-;!{DxHE-2#POY3G!TJ&(uHAe zduQg&T)y(@k2lBpmc~IeGbx3Hc+cSzw-D_;GYspuQ#Fq&|M>3`c1d-s zg_xtz@cgm(Rhokw{<|1}&Wn$lYAKHjQZLuS*w2lesU_exC46nig9NgZ`_)nkZv_RI z0sKz9dd4TL^SMH!Ze1NCo@lHzuKp2Apy04&AGg!nhHn(Xa;h*xGh3Q!j-Xif3h)@b zjLQkuO*-<{ozW?Xxtwd$db{Zh1NWtqIIjkj0(oh`pGbcp55<}T9@4NMUN+r2TssS! znC%G2x0v|aw6L$^1ckw9$@vi7BG}K-858GxScxI`CX03+{Kd(i3<1r+UiSxd988F7 zOMU@wZlII=LlvLTx)W%sT*5#~n*hOqYwK%fOAc6b#?B2}Bk+Xo+zzh9#VPN|5ooXp zSh_k@#mUI})zf@GaQ7yxUB1wXg{{MiK8oi3Q!o@-?`a`WD*3J=-QhjsrZN;1eE!Wa zGc53e=;e}u-1-K97Sau4_*D&28Z)Xo=ZDrmjSYhLrHq#~;e7dNer;mdD{YK~e8j#Qcj~ zx5YhBAS)}S=+VvsmTw(st)~9$jf~FV-oOdRg6>UY+rbVe%)(pHubJ?k-|CTE*~$$z zKAxwawJshYFl*^E(Ajjvc_%CK>TKR<@R$wHcpwG8RK_~E8@zxvTYFvNjUHnOPhP*7 z`SKk`gh6uNt&r}vftw*sJwP=o7}fJCpoPhjW@nb`&LI=9+kX)v3Lp)1h&8^;p zB#L(>Lt6eez1PeKC)`0wOJ~y5UuBI1sP?SR+0G$YKC1u&}Y-xd9OjF4O#Hh;^BUDGQ zE=!kN^Ya3uao6WHv$#W?1KZcE%$~3LU|B{bs|K^$Te0UawDBr7a?_VW7c8*hTpAia z#L*MZ>lPJg&e}4R$v|zTo}PN@{8t*GIdjRPnF7-qwEr>N<%{~nA3{HpxM#IEgYaj= z=K`+70$-E_F0KEk#pGEHT7T8qowdLhdX7i_5}A#lCtHR z7V6xl&hba!)cc`d$5SQHL!kD=MCh$2!my-&mOUaJD6VgS!`V9aR5DzzLf833y+TJC z#q%M@UUIb#J5^n?OJi>%({ANHOTK$dj4@FVAQ8aEUo+$Hg!C5S>t1+Pt>&j{b@4lu zLDI>olJa3mD zMWB>!_uMW9L{kr)b^jr=D^3!2g{y%1F@3G{SWgbf7SzXsD_@E(YX` zn8h>=A9L4&yGqU@3HWRN3?<8aM5F*odK7X_HIw4PV#!yb<*d{9@tl`_ByKf_#R$v+ zmzX*&N$oO7CI^ZGYM9x(fvZmuoY z*BG?O(-iIApJ9Z_%ZQ*su{t84W*?F1b)GTZQ2*E1wM{Wkw;Ir%M{+o@6yZ;KwlVcZ zyhBx>FV)cL5Z6pSYZ3WPhbp|uqO~erKtF6nl)qVJ4-vl&8Exw$ocP8s)BMy#2FXU% zTcBTAgGqF&SYluGe;5w=c29qr*(GOUQe0}v@z(zDY!IklKs@jJ@3x(ALcBBkk32q| zVg}i!fdMly#AgD}vNGQP%5zlu!~6_l6cRBfvne~&jKpZWvNGssuVD5|St2>uFmY>c zrTf}ie|rKZC;YsHj~wL{s9xuThd!u0*U7vS>YL$zcTye;Sglc}bddX^myU4SQ)wMt zRnq!#5eaL9oQ8Em!6o44!)?w%+R82&OO&3DCDpL^4Ri?zD~Vljtv|!jmw78EAV-qy z5>LGm3cM+|?$5&NTqB;1wIDu{5;kMRr6|_}T--E@`xJb(t^6B0rhmy_5NRZ%fbFKc@rS z#!UZ&BcL6R?>BD)B$~r4BNPpXaoYD=#U3O_)V9{trrE~es~u>HfXlr7*c~J$v_Jh( zaPUaWt?SdMmjr0Ka}b*vk+M}O`I#Ap+9OuFbro#ex}Rv;JgA%5HRGV}Lxn-IOVGno zR`%jqD3s`rTe8(@xN}Fz1-po^8D0C|au9LGPlyxtF7zJOa~oo^A#UfYh<4^A$J+l4 zz!@0;K7qBQ;U`;tK;QJOV^3b$MHjC~xR-ADld3CS%W^Lk^NQ7J&nX`?8_x>kX@OCv zR~cPL@>g$Q@g;3R>Gu9blg51mzScuVW*nU)ma>xk9w!>nNMy6qVw4dldbo+FWeX~u zCmz=9{Iv1XD&J8xx_6Nnt%&4 zR6FE-!83Voe~9sdU2F(*DCiwH1T*RMGjd*4_9I(Ty;q;_Gvbge=5?wO;0uiQo^=)K z#U@c%B44fpigaRjT#cDK(sq*&`|n28lnuTTB^Bf^&sgP$gR;DrI5ITH&@9IhRlprs-t!~%0r|Fmm> zbFKbzf8-4AH$7V`q{R&KfVE*=?0x%c<%>u!;g{Lbb06w?vAug)oJc1Ae0 znygZ^mBB9l4S?jca*g3;J5lqjNzavGu5vy-gjWSWL#vnaWH7-5LPgR@7e0|uGKfk4 z+<*ypyx!?H%A%H#MVk(A!Ty-gE!;VcXuLR77~Z2cG-_I|VC7;B!9CTRM}8~(6BM!> zfIzAEkjmwy92N*_9QQ5%9Z#`8-eCpdNFQc%>$l36(V>+2TwFl zKfmOKxnWx)MnkdtAcCazcV8iA`hoVf6QQmk`^Rw?@8e&F@|>F{QP-YI6LG>K$br!} zy#4yZaAR%#qw`kTvWEu`u8awu^asn6cKK;cwPWhZw-*r%VfHbjI%{atI4S5>#A~aO zc^P+2WePU0nBezm*}y>>PG+BhQ=#3qct^x7DKc43jj~MStLi1_MYA6(8WYlz3A1Xb zvf*M&Zecvrkj9kV6qQ9=pW(q$8kObY8?m-=-ATahNODqTN z7vP?}V#GRleZ9GDkux5t<_mk55Nao7Mw_r5|6?WB#~}D5!i^D-6WnsVeC=S8K@Si}qAszqD= z3Y#Fz*zl8OT=x4iY#KW98`_JX(27zuYWe(ibDHDe`x&x9@+xX~LVmlHz690C;!t8L zLKOm62iQTW-7JQ1*&lCYt4so{VSEz#nZGz3qEt=&oV;AM3Sl@}Z0z~AX8{LHI9r+w z9JK1M4TRr&t3}X=%FmAs*UD+l@!VEgBkSXtK6x@gM4&%kkB-aO)CjR5TWo$jN&OOS zZ%N|49Gs#AnTZo^*HiE3spW{qWe_M}hLOyH53Jmg0p?G`*=gqN5pj*NH38r`rEWvUElXb12 z0M%+vVcT&ButmXMpknnWLt)Q;wF29jQL7>bU5ydy5YLXh&L-yhF9tPG^Vdt%!L--D zLllId?tJDsKN!QW`_+l8T5C_qa)|f-|C`lXz_XiVpEL%3rq76QZ1?fdevx@z*DVb_ z9Jc(AtC?FAt8zTDS!xdx?dv_9HW(@7REBhR_R_3$2JQ2Wo9p2(@RiJgxuJXeY3nU4 z4JH!XtSf25Y7!26s891wyyV@~Eh*?OlSxtf6m~G?rdQ%Gr{dSVgh?>1 zsYBt$t$u~_3YenAr5K%xu&Gamd$u$6VRbaP@XF zRierzKY3Y{d1z2m|GL&jkGd!ZYK0)bLkK%C^5wx~gN4{Qj(K{ERyl9^*ZQFLI%0n6a^f4nSj!c(b!DbbO8m2S%ANGX1@8DwQG) zJC_tpYq%e9A|H(_G$b-pZ9s6TL25eZdPX3Sz72Ji>ZA4E6WY%qwU!JH|An{OjUz#Y zhaJ}pi8|_DU`y?yh#>i!XT|@g18w~jiM>$Jb925Zi~P5+adiA8duVrUU69YWmAP^N zt|+trl&AJL9D@)GqPc>4F*-u)T#01S7NM|Nj}H3}m=3jhIv@Rt{h zNoc%X28o)Fu0^D&02~4j88$& zvQ$44@oU^b?PGD6<~RmVi*q6K@`Ep#nepb=14NN2(B`ln;Xi7rFqd{Pw{KaDs%L+1 zXn|Q#Ix6KJGzFiii-HMwJqezWzNGhsn;X*zt~V@7#Of8hhho^u-Em#ffjL`mgd71r z7#of8L!C;HX8hIc^M_RHIO}~omL9rE0Cwv=f7%kaXk`IqSDp$ z)tn+T*e13EyZvf+AYYWJ2FlxD-q0`)jF*Mnj%mdF+t(R^pAqucWWc6FR-&wQUUILS zEof4E@q`1XHWG7VV(xq`d;|U<&TVq4_d)FV7F4zI`PP!%Jwiw@dbk+ZsG3QD)r8^4 zxR359N6v(C27`aj!;g{O4vg8&Mw;ArTUhPT&esLHKMhtyT5hA99K`}W#3tj(ugfgEJ;V=Ivq|SU z5fn2?oK;} zA=)21$gEyzx99H3x~Lc5yz}@!1f5Vlwjc_2z@p!DTFw@n2_eD@$xQ+)Y}wxh`*}ag z+803-SZa^6D2llX0HKS{;RfHm8C=tmM^wFj!Ag@a|0=S)&@wrVhnL+xJAgV&c7SmE zbLX^cgIvwlOX3-$aDF_xk;4V*)DTqwRvQpRU)11K)kaD2ON8jxfO|$6doCW3Er;y@CiEP=gX zpIKp#Mv1Sy;7z%57St02^VaBZvOT=@Y7`-O*L{bu6b6KGWMJgX-w;a-zm#QN+&3 zzkfn!>2N|(kU6B)Q6!{0{2qwbQ#ebtSESxVGx>+)7s>7*m=*;V{+|&j8ap+5LTDf_ z8Uredwk72_XyrL2TCSqjT*=QOYGmD)8{N-!c`&>xAd4f*jcd8aI5J1yZ~(+}^-WTM zzbgWdds0UrtUFT0z#WBL@+RtQB9m}Qp6Es~K-4q^cK6wJS9=qrFzgiO_5XQ0-7iMV(>MsjxfLtIvpW`E(u zHlmcxfvx&@eRYgC_Iz`lUO%V!Ppf2hS;<6dC*8Bvc*&=cA3+nZI-cWF#$_np-aD=p zeZeTPhRQl5$9|f=)C?i$Gg(ECPI&CBV;EPDb^dXURAK-+?gT-#Ip4aP(Yu?`1_tmz zqRbb`#We`uyHGT*LJK3Ve&B@r1UbA10k( z`aAhzV}$rVe_7AUYWO&=*hD-K=AzSY=)~GQIHHwwnF|2>L1R>>Oe`k;5hqSv0-(e> zvC{(u7ltZ0e&%SUBnE~PQB>rLSKSS&(7{q(^PgYh&DZGyCKc)>T2dS3VFfpdiAv7Odu9#`(2OwKcQ>%+x10v5v=Acx?*+H&!vU?*sY1?=s=@Iv)YZ83 z{sqsygLV=TO=*vdbeNH=NZSK<`K_yzM`=N2E&^k5zBt$<%k)BiDFd2s_KtcKvQfni zPKF!JT@~_eRzYvVqlTQQvrCX=e-B%BBdr}422z9ZDp;39^t=D{G68l8KI)aCm@}%(5{TJ8GE&LSp0k7OWO+* zTo%}4->Sj!r;7VoU!0NO-p5|?NP8W)XKjE%Kby8Wv{(Ew4k4(KbYwXp-H{xylBQqIY7u?!Irkv3x0{Y)jFPH3z+b50%}SU#hSHVN9zB%Q6sXfoIu zKygnq!=Dd7pwF~MQEOcG2mpwY5nF8Jl}SS}HJSWS znX}S=P72zOa2VKZx2wd8$N&?WVN32$r%RjCN1oe50&D2$@7k>?WalO(wbQh!I5C{R zcjoPWj>@gi=>(lA2;OzvG7(|K{fKqpUX6dA#g#vl%xA+AVEP>nEx%w%~*k#-r zjPva7oA#PG*_%e4Bo$j#iE^Bm(v^`QD4TY;7>kuMz%YYOU`hglsCZF{@(al`-vdLT z7ZBwr2d6y`r?Or_R78AgB`9$tChQON67w{i)Ah4$wy1xRR1@GkAh5*PMDG{6)ON~* z*htmr_d^xrxxSpSd)-3MQf`}eui_v1SB+|BhUGMMZd(feDT5!WED~cp;pS|l&yu6w z5ePC*mmik6I8+LYR{&Xi{8*=PhoFdM6*n|(OUTJ%{iw8zB^{YnA`AWuX72_DbTgxv z2~Ja^8GET=Kl#zg#<^4K2gOZxIfTwD85ejK&^fWSA*@`I-ZIRq!@dV^=A*SKASZD~ zR*B4b{=C8C6*wL!#d+y}PI(u7O!!ru0%KW3yv1PI>F}VjzjOV@4qZe8lT{f*+=b+f&_B7DL>r4*%sOXW8Sf{Ncxn-&dT?0>M?in+Hps8n9PPe4tPZzk3 zKK(kLj}%HKi2$sYSbiBlr3#_^+-PN#=Cae~--w54z<<5lrZ!8DhZ=vmpcm*=d$!U* zWVmdOHa*bO6pf3lB}>ou1AgOp+9L{;VZzB6Q_%l?-4OtxI8XO=gVoFs8;ZQ1&PM7$*QW~yeE-R3?ImqfN?|T67f5ZHLVA8a zo!%7Y z$ez|{f(Sa8oADMPjBzFI+soE1Ua~09Xh_U)(W%_SS?)B#VgikpE+yC`w?cJ5RH|CD zT$;Ov_PI0>}5s|JcW4l0~(A*7Ix}K`3KC!A=L}C&`I`9*Gpc zTRO7{kTRzbN1yibG6+GqI9Ju-Qi08XDCE?L*M#)dKuz{R9Cy*iP#b{+n>U4r zggc`c9EwH^Q8P5uYV>B0$P#W z4S2M)w$goJjj|bOdALKSz)n+`+qYdxB2Ur409OB2)bWa#AYw!m53&nzosWYl3WG5nw+*0kE%DDmT<{ zp@s8b{OKf5tM!pPTs<%3+WB=~=mHh+ZojkA=xbyzsceo8QU%i_kjsciEha&vHe0TN%7p(v-5DkQ=m;ja&e}>Ok%EdLiF@5E7Z|M44s9@gD`AHD^qT{E6WX4} zLPNt+Y*JKPiEW$dqijL8Vd6hg^;AWGm&I1`eZoo=l>Zn8-Ko?=$Lc`uB~g?s)gv(y zpAN7|BI?DUg11DgNcmjv8_<7;oZ1*x>%$|F`x3rSZMMg%^B-`xJ}qHbSHxJuSLe^jV*zO z2iZyJ^}@W`2~2#TCIh>&pR?L7 zeF7n^iZD}HL!3!uYxG)jDiYFNFdemF+_C-(k_9e=Uv15uBLv+D0{)oPX`?Y)qPk{} zjU&&mf`5+ko72T|MiWBuO@l#%wF0`$*m1sY&5le6j#;f-^2rUkym2MB02dhBIsz{i z`O*E)2P-DK-FbGjG^syvAXJ=U5-EZ-M{rs-!J`zP5CsWy$1tjz&P>U^vJdq&1Ok>R zHAu(i?usFyK{me%r%qpI=Mpi(5{6Z5F9=4#Fn8uwVB|8~2iaB8(ZhWny?!yxV~3qnmjmI6f=tMwbh&VOmfKqni>5jrKz z2i*x(sUVX4l0+IR)WgRZ;iX(1DkG+;CtZIhW{}8b_WReKRmMs(fD2uApi3DAYs6Ga zDIZs7xg37(_d*@<4K8#-9Y9x4JRsJ|F^ z%ziOPb)niP0M^`eGjI9Z0+0TR3;PI#fVn9VZUC%AA7lSYYpiiDs0%zUA}AdyTqkwC z{VHO&cVAzx>h4=BA7L=-&M;I1ocG$mV|nVQ>J3}?t`4XTDXeFqUrqtw2Id~aNG7Qy zQ!{mc>z~>DI3Ei500RHTnBDT#LRjBl9loE$mK$|AE8F-;4(Na9(zYoe08*eGkMP4V zbG+Wdg-<|<8ZWIY`aTF8Z2?qKuNHv6I2C8!bgdX!-8!Lp^TjQit$5pILOaWvc~zzN zly+&BVFLgZDG^kk)=N~Q1k=knSD@45M|xlHw;z%KRu34ujJRMW_>@~TYjHMT!g(5H zYc&WF<#K$$+9Bvu9rZ3jQh8;Nz*6od`(QB6x%VwRK0Gq}rTY+n>b&-c`C>-#9|b0w zCJ`K_+UC8~p8aC<(#MYSQG8OV>>wCe23IEV7RHyr&Vp5;A$e{`C1;aXR?= z{gpMf{}Wa7NZyvBdSMmYja)$V6-GbsGI1<}bje_kZrYm0Bjb(bJmFOD4|){B^mut} zONQ9Kzgms`GhLF#Qhi+>71TFQwA-R zHC^6@=C?M+^+DrdGJ&~_xBd|N%JGEj#(x<$T_Ay?&TinK;B;UR_d~6Cq9Xux3|+TQ zl8{0ojbYSNk39Y1;TXXJhOK#r_FMrt zt>yo`e8twk8dzo*{u`QLFKll~4lAYbv2lSZqwq#>wBbJc(6&l+&kA06WUz#h` z5=~gpzYE|g0uPDm0Op3~?J<$6RDYd0^+mqXx7GNF>SjaB@ix$b!~^FZ5ea z1M1x=-e*G?^ywHDAhA)Q*z$owqt>ZR!-fImvvL)RbleC{_d-p)w$s1s83)*VcQ&~yb2Wp(4I>_3 zVUqJGxm-(AaoEd|X)8=Qbxcaznk)sa@{Rk=i~E*>(a(_FZ^(lUhd0G$Q<9^Dk&Yyd z)WMe!`g*LrU?SS6E6SP7cWRivXW{PFMhys@>x3fpXS{u2QYa7|mxB^ae@c%R`Ked( zXY07d5++Vx4IZu+(?VGm=2OARE)S5)kifqciJ7C_3c;6eoxw1O=G5?JqXFMmXGToz z21ruP22@UEE;5YYMc*T~ax>RX|6Yv|ubX37=DekqMJpQxzLhFm>=1kvsbf{AP||1UB;8D6~wd|yHoh( z?x#{0MzwFwJP)*!YG1oA8I!6J9l737R{^HCi-uFCjg0koqWRp3`*WMj5{m_H->Kc} z-pk*T=L@m<0(hLsBGFWN>uc~zIl?DOqzgFFAEgs-KmYrgsmAY1cA-Gs$0E-YNw4+> z2Im?ihb%aK+-1S1k5_5s*sw!+H)&YWAi}rYaAi6=qqj$fnsi`WB9`FMqVUxD+x4X) zqM#w+w=}1*wou;$J*T^R5Sj_C;{G6rx8xGo9FnsqN7wnq{hsl+FvG+pumNC?HMC`O z_@dnAT3~?!(KRX7{T99X5f&7+Tr^VhzE$q9reBj>@peXXF6t0c;r4+SLB%9g$9Rdg zp=1lK<%KH$y_okQE;z77s3ewB>8t%OYz#ijlgOm2X~arfq7oSAHS!$e%LU6ATpD?* z^cIoylvn^`{2_Qm;);XL^P;K&z{-`%YKhnG7EJEt_cA6!Tc!PiVCmK-ji>65P<&0DEx6gXgGH z_}uTlU!Q_{eJ2msXuMA4_5ej$DF>6i1%ko;CyfD`8mK(CKqNPlg0A(q`@V)27l>!Oyjc{LssmRYs=OtjGDPf=J zN5Rx2aHTwnM@2FAnS6R;ii6n%W?p=K?pQH~5HR;*i$1=o8@|h}!ogOBNZM;Y)ECJ3CETjjEr_TAlv#@S zQ?#bH3J8@?2R~ytL##}=8O@~Snhz74GZ^;i4xM?&wS3}b^JYrew~$f#I~pTM1tl5@ z6d{IQVbD3Fd{ZMvh!fvJu3n+cP1KlcU2*@;vL9F*a{9`2E7W&i&h2ySM4>z7%AI?F z@Vt;MBd7;ZXD+6Rr!c4tl`CKxPHTeTr6p6FSgdaN3UNhMCf%*v4=W323pI_Nm~MUe zy`8^LOU+wG@npT$ESP`TS&*EQoBJ|3zJ+0QRaL@-hwYU(P)sJ@BUTJ}bOG#%R*Zx4 z&1d-*q%k1AvDp1plVLZTMmH^8{dRIhS(qmFm$l}P!y=_K57D(;up zPW+EL{X(+HQJh(1;KBkmJ;U}c6uMIQ$PliO48c2S-=N~5VS(we?z@yP2niX;SeLOGNCufYC$vy)DxPTA zh43aATlCJnFmjC9%df*t52FN@5&0Nue$j$fiE!Mi0r*}1xMO%->u&YucoO^xB zDD~tH(ra7AQ^YK;Qb019asbO?wRgsH*Hq%B6l`+LlnT@au+;ZIMnN%Si>&sQJQJFy0LCk_DA%f?to@sYEery=o-4Chj3 z8aR9It49DHCiJ=%-xuwjf7dvdZX6dBm^}5&kCb*WK&C3iT`H`v{fiVWOM2=qfl!8J zwBoE^%ZAsR`b!4T-EnKYF@riGn5Pc)KgugkVW?iiVWR`fV5HGbL!adCkDRE$)n;1|n1Y7;N zJ7dk83gBUh_LCcnffJ=gfGo_eM(zkzVho9KyGrEZ$Zprus|0Z$J(mwhZX`(a&ood; z{hEQUcYH`6`!VDl0{7CYI zr6ix+UC#Vb@N$MW2G8E99O?Z4DFF>6*H6?5crx!S^w(lxo?7f+3w|*myd+OthZ1oe zc6iktvK7mbk*6uHkiGMKdvLF0s_LRBuB-Ve^@Pc@AyjW>xZm3BnM(&ymk4OzngRap z6$olAjY4u(lOxQ6Fe|$?9T!q@RtZQ=lEuYOq!5tq=6P7+MH5qcOnt?s%-W17U?HM? z5}@^Y;lQYRq$%NO?DE0BC?nqs6!}4y%zWJ)tI_R}Ct(-vK>Dx+eYVLGN3GXWC)J1s zgxWmVqjG8?%wII0j7*9_6g27SO{@Pw4a-Y*cx}1}X(rG_2Z5%aS7sXe+utn{RVqO2 zrXB87`t^}_Q$@BUXLmUA=f$BP@Db>S|sN^wu5CZNiTkN`+gA zDPv@26!4j9+Zn)11AO6m!V-~NhtRGjXo>u?m}oFZuv9;Axug;Tlh=^?%!Mhd4KQC{ z&Sqr>t|y82)rve$d+E32I>ESA2nQ3L5%R{Z*1}L(nFP30m;*GEMZxxFWj6w>jiY2C zRwXd)SV{PW&Ft&yGZQIRBP~uD`XOc1G!~X!SnwMX!9!}$7PqqY&POy(~`7cL?h2eMlZ9Qz5+5w{|k?%nQ)$AWJ5#H;b5 zirkXuKY$J{mDONPYgu^ls&y*Dl}=+{li6x@qF4rTgneL~F`}PQ+NVKV>~t>1^?EIY_Y~f zk?H8-K;5zL9fyLsMR1ro9zdbQrJ1~alb6weRnd-maoa90(=-dwcp7ZOQcg1qWjF|Q z?}cm!Y3FO?Gi&yy>yK??qis0xc!z$%t-bl5#5%GpW>dQ0wA3-PWCj^ zIT=i6%xu?{TlvqWA~JfZoLbzfg>?qucK6K>tR&L?rq#d>m7mQexA6792_(7!jIgFgPOC`ley5bAf}To#))NX< zVUCDz-kh+HA1FWINaUtzL6lh%a&_>oBjpTbdb+_=_L7reU# zzxG&tFbl-BUFAQJcmZd2Zu_v2IaoRa@95KOYHf3Spqp?L&#VSLnCYWu%@=Mw*k4e1IHi4IJioes>k?yppv3SEg*Wh^1E6PrC5 zA6N3Uq0u9?p9OmEa?=qM80UJmYM>9AnY=1NP9!YxEh!-b!p3XZ=~E}-kyQuxtIu~M;2iElrVE@@Rew5HzrN(1e^<)r#Tg#;wpeC zm#s%f6XPo*H?sr?QPy&Q?Q>iehFht8j52-ek<;9!UnJu{XN1OgI=pLXZkC8vnrHq5SFjD2fyrld0?8-&YdQccEiu`Ge zdSIpnqlC2v5kF)ar-$!wz3!SA=W&iObxwQxkT|gO)_mS;I3<}w_YBqDBX1+OjZG+9 zPOeLXp_SsN=U?s1uy0Nvb>vHUuvrF-=xmS0eMtsj%#&CmSTA%eperPH(W#81n6O@x z)v6G@Xr81|L(*){8bo{B_Y^#1%f&g)Lw;3uKIeV1cVEzajK%Gy^hWBt)`F>;tw_&> zCT+-|kr<^9=I*?q#3hecIQus$itNBTwSgZRSg9opHkg?)QdmBd-WS|k7ON|nNto5D z)vM#Bo$Z{fIuX?(hJ7Bk1lp!j&Mgk(dKAZ}7?V|T3G~;!gyFb$lnXMN{n{OP4~5A8_uw7}P>73Y(wnxG?jL*k7*!9M(?2*|ZV$l8Kb@)U1e#>NzKMDE{(>606mD9h+dVo~ zc*%S29M9mN4dI%UxIM2o&9C;0w-HU>{bIKb7DIqbY48eERrf$KV52lF3Mh~QR}j`> z4wgS@!jfq*tM_u|`?%I{_`y!SoBE%ya`vo^$Zu7!2-V;I(p?L)m_beo?Nee@h9#pF ze#((x%LwN`c+5QJ#7blnYhv~Ik_zGwIP7cW9nF0eSKx`UskSj8>-#1~OkewAV-|rt zix?`5DH&lwD1XLc3~P-2T*I7Vu1>!HJ;b_WWx7nT59%Hqs#uCvTEN)GOWb;qMo^Bh z6SbR$R+Qm{s?I~#J`SiCP;naVX^>K-n_mw{G57O{sb_ztSj0~Z7r;*IP~P7W2Go)@ z6{o}m=IdF=7ed#Y+h5QO=)pctcd%F}#R@V|x(636{Pif80|>uqMe8gK$E$TqBC+LY zMr`xJ8`=sfF8(kZ!*=oHz!PxFdVnaT*Nk$$*`M(C)g_Zkp(6UrEr1lj6JvX`&{hZ( zhn**XOUWo|@UbcYH(9Ew=ubhV1o}En_(wF9e00wowES{By=Wdbo2y<)bUIZROaG8c z;)Rf_!q7rLv)$;neoIstOLVG+&xRAaAd#d-)s~Zj=7?O`$pepa4Vek40*=>qd|eS4 z)J(3ng+L#0R|)&_(D+w*o{EGlq` zI9h`QJn$ruf?jF)z#+sybSGz`35CT1deazI_*7>51v0Y3>hJ3Kj2JdlS8QEoaloXg z+;*;ft1Y$i^N&s=+IDF?j@}8!h~I4NACH}@p&w;{Bfm|MPi%%m2IaQ2k%37i9{Ov3 z*shF@lm1<_g-*bL>Y}AO&NtRTrLC-OrBp%yP`ok+5q&^Iys!`>RBFzWU{jJ&zKF4RID?9)2!r)BsRu|dx%hjeIFB5jYFTssv}f&l$Q?**nJOA}Z>F|J zw)3qL4iSmum|L5h?2jW}#5N%3}t^;SF#_57oBjZ0#hnwBuyyRFsehe7``Da+L^%50{s zwA>*)1FY0Kp?nm)yA~CLf1lo?KG8cM+)Q?CbQ+3M}2J zdE$Pr#g{Pd2;WQg(zZs~S2o^Z)A-v{&zyBfT|FYupl{qRA6wA8o*`&6aDiA=X6{z9 z=qul@ij;)+Wp?|B00aT1P@rbjpW+R0Uj>8?kABkYf??t`Ng-)qBovB2I#2!da0@E{ z30^P^aWeCIQl?gNvWz8L_G_BL#|j`Ca=&U+mN}AkDY{U~PhiY!Vbz)D5mDR@>O|3> zT9GCE>I_}@XI7G(TEw`pcW$zzYF8d3kx7Dp1NZa<4B7+oG%E6FpS0^HQF^^(llg42 z{A(tn59;oUYK^_hhwK;}SrUqx*k_sq zlDMQX8NNcyp7}eU@>bSa9{3rw2ZDsf-@m5+Y$t2PYkD96A~jWeZVZ#wVp;pn;D zo-yEbmaWKlfDSRd1T`ib3r*L)X9%mFrzOpe+5S1p$(YLC4oVTdHx&dW6s-}{CYBM7 z0um_$()9xW+9HDzf!GpYPsn~8!7u2e1lSX@zT0vfJZ#i{4#xCz6sW#VCr(HHOm*< z4UBX-{ChZboiRlXRO!&b)1`uJu^tjLGZgQ|*=@z><9&I*CH(+13+j0cTa|YEt9Jo< z+cE&v(xW26nWWMstq1q|!4+Yev)r}_C!*2Uyi9BK!m>dOY1T91z8Y7^7}&O2Hc$VY z@#XKUQrgJo-9w+^VIMKw$%|Cxzf)UW%Fct!puweAKM%TWY8LUMYGXCDLtMJmRj}dY zO6k|3_l$ryh=oZz+rC)b8<2(uqO;Dira77w7q*OWtEOw?9A%+nCV_m|s&Vp(($4Gf z!G4J(v)`J&92e>4hAjb~sn3L5sKiQoxQJZ=6>QD9m}k=cf!Vg$;vg4vIReI{z&NzP zu))ngSVv$K377}NPpIjM2#F<*3h&da122+7v*gB$(vHjz(kS1;sj!Q@_x8V%D&O|% z16UiwbU~tQQKWP`H9R>){b-s5O z1rc2~k2IO?H%wZ?0l8ZGHezW02;9YWkR@1U-@gwXF`PsYIc#2snG}MY#vyH1JA6Xs zaxnv#^|uPJ^yxCz|ER`Q@g(#{6rs{9H_NhZAJIIi-gq3T19&3m4W5=6H~(%lSWCks zb-H06w0Rh{*e58;W&at7WG=pqFUZZXxj%LNuqK@FR3C`<5lW_5aKLv`Cr8*36`KVP z)9Rxr-CyA^^)C%1nT3q0G>o!qH zOet)$@(Y#L@ags8MN$+MwXoUpbZCgF7Quuu91R@tujI6Z0@NC&GSR z_DAu@|Ddmd5R?-jp5VtgjF)($J`YD~oydHx-9B4ql_QvEKOt7tMWm3`V^n~X26h^z z#@$VodDUcsxiax0DYPE;z?>qMHA?y8H(9FDa`)9+4C2D*txi-yf8AnIGXr1d z^G%&DS&`>WtHqL(D6VKS0W`(=%8nNqF~A_gcs9#_zF=1>s@?wKv7I1cO}#n6$D98K zk?h6XW8AdxKxQBt=MqF%b6!beDa1x`s}R4+5>5nR<7Z8TIb`)sXH9F{vXq0)CQL{f<^j;W zoQ}=phH#eE+7epwMi)MzBZ_mcVJx8RPj)qYSw}E8oHEXKVrJ-$3`?PgA!SpQ|= z*r=5jQMIXJ=&&PK^moCjlGa6R%^TPlCtqtC*Rr$}6}Bf6mbyyu(_cK^IKKGA@#fbi1F_qa2TF>+OeZJg%p+Ieo2{wQ4L`yWK7r!Z^IdyVW zQnHhae@evt(_h-~(*&hI^X4s61T#C zUZ9mdi>%j}86E2fUuELDyiXV94YKBQ_DuROEvw4(Zz~(+0@i~@uGCH|t5@cuJ-|Oy zRWHtPSk_3D{<<=K9j{0MiNEgXIOXw1P}|k{2Hj!6Vl=(7C`X*{$S0d{BrE zUJV>HmQABqHiDYU%V*)Z{F?=t9KO+ zB0^UNLN|4htX>FZ>#w?Yn=P!Q051Lb$EFwVeD5)LiL!ofZCk8x=OKgjq#)!CRv~+s z#*2+fR!O1P2@$K2%oBgIgC2RKjeb9|b;%_(0sYmQG1NE&hR7(sD*ug;WO7MG3i|bE zuI0k;YQWfHCFaGvI1EvHz(nw+>Ikgbze{%lX=(-ukT=TgbR^zoDex(Ke^wc*Hb=Ii zkm;FzAXLGd(6Bz&oTmS^PEagM1qTDAGSHpSwKaj3kyj;tv*R5SVnH8SuE{TXk61=9RlgYdny3nm!7wdJ|DrY zhAz&YSk6FPV2YCsrzMbc0CMKAO?VrNT#m(MpA*=nE>7iRksuCvpBZ3>y#gEfs95mG zc8>YYi&`gDL{{#XOZjmel80gLTWxhXWTxsMY_ z4P{^j?jW>d%Nlj?Qncol>O21LNOg~IZRoW*!+zl$R_Jv9JZ<~>i#i?ypaeBN*fyEi zGvm={jd*GMiE(5mUhgF76%|GHpV2=I=`~Pb0da{8*e3CjVC0SEi^HkB3~#~;U)TzslU2GC z8yfG?1~UfnGr>y=0{l(+5B@v>SdF#J*&q{|^zY z=a0kril+L_6k%H^_Of>yiF6Xd8+-|{i&m9=Rc70B7ggp>>GAilA6Bv5{lZHvgu(mtgxC*>V#E-yWa&CoY0 zC|~5gXAOCssw$HzSA#g7bpt(9axR~|lmXZD;NH&F9`qz^YY+aumsMSlQPjv!B<*gw z|MHE=+m%&y$q(lH3GPT=-{u>Bs7X_`p!9ewqNCQ$Lmi%%9%5%fRsZLQr7f}L#~G`# z?)m#Z`hq2e<(&9sxD2$Q9@IS+kHxt{POz~}gmI8J`}|)X>s3zSkmm10!^7VGuc^mF z4Bh^W(H7)iXEqwdy@b|8V$jF8=m z>=U+`?Dld&M{$<4q(1&`cA}{hw|T-Hm!2=?``N*2a4ZMdKMmQef-eJ3{wFo71NKe+ zLj`!GhI@~_E2aF}QLNOO5ZH$(gdl*le&MdsAO=u7x2(`#+A)A^LKUR{i!bUx`@CLU zjeTu5&a6)_EtQ){4a>r6nxEKP?d*8+| zkN=XyuKX!i1_r3g9AT_Ym-dV z?Ob#O)ZD>; zm2#RF{q*kFY@t&!o+xh2SnDkOVl;tTO>+xqnjHUf=zmyhdqilCat9Gd^$am?r&NiRN2D1*9)aLKj0IZS`P8c zhGuuCl@yaFTsv1IiFv8iC$uGB&~q}qmRDo%&tkxbV}>Kd*X~uja3qL;z5S_|Tm zQHDfsBv@U-akawUMNcC^tPwsJ^LXB4+daC;rDtGT>qe8?5$C zQ+{`!#f$0Afjyg+8u+WhS^rQbs^D1gy8_RWg@2u~#C_w_@mHi`&REJA(tD$#Q`6od z059LgvXHeCAFld3Gw3qC4_Yg#UhprG^thK4lkgnXV7TvjmDFF1o{CEtfCm391xBqM z41b>-#NmXmd$}KLQv9dRqoG=G&0VNvup}!T=Uq5mwRV(HFmaO0in3)3ZjDT@VdA6V zjV=h`((H?+7r-ii|04x6vI0hF1LUDUSo?XKodO^VNd|mJcPl13kl=A)K!F?++i^G= zi<*U@*Psw`BT+>?&@t+^POTJKG`@MP?^>+obd#wQc#Kl!TKg$ztP`4|pdKuuc_Skx zC(Ub6_2fS0N_lp<$hxMtLapxZ*$;P`a6;&fHr_)%82-;#;NC^dl~(bi4hFUV1TA8V zGf|?;Nk>X=%`NNkqBmws{x=WIIKug zGO`oqVCs#;VGb?$MC61Fa$VzAHA(t0-n^9T!@*N}G)^kIFe7#f!Eh_8;P-7t5l>NX zOOYFb6lzGhm}?1a2mwz<3lPC0FpZGT>z`4Wbt_E>^Q>m{Hl6NP)y!~+rn4lu;~?~g zGOmi^E%QkICMUoEAM|~twF*VGXTpv?D~CF%1SJT10o>Z9g(3PWgDz}p8-iwKDzQEOX1yvVj|}*`G(U5qn;c~V%hHb_0PS#mpsO( zy?z?Scnn_kYBxkMtsd#lA9DI2M9ZcHG{glPl)vH5wP4BVsHJJ64G+}JcvK$fGXtA?8W7UVB_UoHj z)~h-v#u`x?wX>2eltB&P7_I@ctNR}G8{ z)u&;%z@)ql-a>yDUj*KysSVEkZXknFy-7SYFyaWgj5t#+6z^be0PvIYTZx$|9z@%G z#EWmOKk5q7jEzB7Z+X%fE*}Z)&tf#db`q~r9GRwKZVyqEivbwx93^2AKDy?EEaU&~g8t z5A-VkRy_~2#eAo)Qen_0-;(D&mQTAWCV?+sJV~KPsn|yAI`~9M)S>#BRgw(8BW~mm zZWglJ%hblTI10Dcpx)g7DxVhdyGY@#Ty+oN7?^DF7pvvvFSAQiBBt+h33G$?kdIWR2_L`a*a|nD`+G_64>EjWE`h%(`-f zLp@&cn9j$nH?){Tx3I&seR+iBk^Z4QBG$O+q}C~J)!#GB3lNQj5+UcLHAC;>oglwe z(ptL_j9{L)eWHN}=*OHkZ`)ZKh+W(^obcuejA;!NW~BU$^7~?}5N`4qtbLg8t$S!K z&wZ(hRN_MgD&be2`)k3=031ZcTv*pdSF6`TCgtJUFM`B$gfic!r3^Ku!uuL15i}VicGO^RE%1vzq|9 zM&0)rnX0Q1z8PTosAG=)w9Eu;4~K`h#B0DG!@C`j#MJsa9$jX zc}$&fsr)N$%!6avE0s_qpRV$7IB{>IB)RNm!icCskK!~g4<1GlKs5DfxHQvMwP;N= z$gvUW=jVJK#E-CI<@YavBPCw4_DADUvYQjKL=FTSbuKRnmbwOu6B&sF!;0`LWVJ8B zG~WK5xWxrz3)|3Go#}||7FXx>T@dmQz|H-+FJ(KyJsP`n=CtKj&i?uc#MyiMm*fQ< zRO={FYBQhD?OJ+#pbI}hg?r?74a#J9dEL*@E>H{o(UD^;CFPU?8dngr&WKAf$>N+q zAJ#Bz2I8NIAlhdCa2Q`Mjch;?-*TQj;4c85_#Wy=IKzkizah`c`W_1tk%_~pAiL=e(kq)ifX>8&G6$%X}3@VVf} z=Ee40Z%-sFn=u~!<;X9V=Xu6xO?4L3KY!j5+G1AT2k*&>;Nq)K~PLXd?tPWx1o?68=SW*vg zP7*SJnu}6>stV#qIz_iWoXla^GXrj_CgDPkskpqv-=Kj|xLX$=<)GL(f>vY@nOZVq z;hwMmaU@x#Wow$k8mTQE1q+E_gX%T3aAho~&U<$dy~ZDp3@1}>B6$Y{ur>QfBO$K& z>fe^l8|P4Fk0Ge(bHyMZG=q7#&t(=#yY3yP0)STmW;aAB5h-p9x+{DuE8` zihGqnde-#p53c&xS)zjFW#V;eB7F>GW561Q8qe`LsF;rX5EKh7%>x3gf>npKjxhw; zv3XhSaAd=eZP~I=H@rA-_Y&tBW)Z?(AGiH19#jA^V}1GeCVVpR1R0JO)N0F~HSDC0xR(xmu`OdvWUzA9<6=MGtUbPQH1w*H zxPID!lB?yaCb<+v63h@P8tV@hFRX32w!;zuM_dyG^aD0^gx2S^^|v+h?=T1G4zIaY zlu`E1dfcI^wT3xchro)B6U8J9E&Z@Ju8zl>yT9|`4Yi6t&sDb07%TBNCKwe$wM#Y$ z_>J%ik>30q4< zLLj$GRN-GY!mS9399307^?T=c7FvpNPl}no;*f=B(0!=cK2|C{hz|(sVsor0yf459 z8|kAM)hy(EDi?wlGXy=!$OK~Fnl&z5Z2h0I1jN!Te`LX{FvkqS!IVR|U5um4t+`OOHy)>ZJbf)dL zLBovwahzfw7bfD4wdZR@q+dVlij2Y!Cz|V+-AUGIJ47m8H z`K?WNC(c%*ZFW{K#*i$*yMbr)C*!F=DeIHMQ-!5-$vHTxYPPhLykrwQGe_lkDoFlF zKT;)`E%_%BgN`*hMju5Y)!l4Ya1pP?x*|~*+Zly4Q!{vQW77l4L*~2uxGXDCz*p@) zBh!o88W&5{&C1oSL{Z#uA%s)VC9=KB<&9LH(0+82X#*=|ba(79-w5^gpBeDO&CyJU zeGkv;Kf~Ql^h8OA5_#+sNPKSdiX0w#B%t(}1GD*``yKeHO6~1zcEvURAoG;8EH{B} z_rN}VvKClF)v`R?Y~UH66?aE4t{|ATXh4;@>nt9>QQL&W&-e%MkX&v;so&WOWvFi} zW;;VzG=g@QPr+VwjC2LL@vM%>)X)14Z|^V*$D0-6y1Y`O6YR`M^~n$NbCJ|7IRnG2 zb*UMMyU?a``#RHbKZpI}uK$U6vTo2TFvST!D1}>7JGvjevHx z=G?YDVpwQ+2bV2yqrpoD3ay2IV-}}TvFgswYr(-$g|Me8=o{nv8@SD=r#d0LH-|a3 z;?E@)!3yLk(B@+)$Q=MB#J{vU>E(?L$I7G%EMh$U_8Oi>FK1khT9O~v=4}9)3&cjYY%5)kx2m)=6X)t@vk=xx&gw=S7m|vy zM-K-43c6~v(C!jhvadcYa2Px*#f4?Ae_RN3S&W8o?n`F+LE+6kQCYSGOsPoLS*`&{ z1rvf4m|Mb#(7PwMof_YHk4Z9Dq8^$>5y;2p9%O4GkVmFv^9PW!ul&4}6$;h^O3+DI zKx%wNamZT?CS-AuWGxq<)b5!6g8EfXMWW=08D-w_OxLGmM4^E!1;anOvw08*5p&QGRvFik)m*XghY?)&Wf>xGea}U5gNa>Qx_R^EX12B&1Z_2 zf3TZJOoY{iu}`_-cXH@p30bSK99S@=rgDA&9GjC{&ALj^S5@PoGxdUNjU?Z46>bXl z&L1f8tArniH}foKBLk6||1yKaJoxn;4ZN_jX$p@M;n{=#rlw_{hRYDW4<4y%dm+Jp zms^#T)&A?AI4*r!&Rfr!3r%gry%ulM72u;v*!aby4Ta9ypKSZX<%cF(@x}LLE~Gt| z_ZreJ`T@USE81L66q1dL_SoETeE&dvW+aPnc-Svr8sarL1;_a0OwIKdLOrXYOXGL{ z`QC|j_VPh(_ExJK<%*{e=CJ zMxof-44%*-d_WMYB)IF|KTS@-?er^O`AE%3B)4|X$_u1Yxv`^7=Uva!qPl?EZhj}= zV-OQEpNEYd*y0@f5wO@;Fw~D{gIBNK6-J*rlAzlwjAi%EuWQyRh<^<&y{ z<{_iX+A>YNZQFFOrau03BopA~U<7Rd%FAk1`5ZD>iUO{J!07EYn> zz?t<-WBRJfQkVL_<)sCPbOw$i7e^DYMT2gC@7QQH=?3;NHe`-TcbV}X7j72Y+X#ok z585gGUCquDW03XY6VsrghRB{kvD@aK9@L7Guc;4!LkWbk{JqL)0hAW!M=7$XT(*`L zw?`QKYM)<`D=e+}VQx9bGIZWB^`O)=EUg|SU&b6tPl|LC*JqswgH3zAl9Vf=j|rP* zy3E+Wx&WB`(d*DriErw;%F5viG#m9WN+RcLdJ+jFQ0Sy0Z|K5*eN!#leeo|tF*tn4 zc7FMMHZNUhD9{vs@1I;gUt`8GhXhCXP4EYdtS!XX#XWzYZu3&GO|;y$8u#E0;Cg z`xYzwo;GhSio4~xhLNib3H$SmR-EWNM{@8(qwIX^4G8y;6a}Z+`iVfB-n5k@0HjR- zGEe7fIp_emX>!Nm1e>71{1Vw;+IqC;Ob4PEx@A34loFKG9p;Wo9Ci!pLi0W1Q^fQD zur}=sfm{Ly7jzVZ1mr`o2a%qG-cDMAM{AXgporaC@i=?x{GfX^=42~YX&A|>TrZf&63~46#QZSs+C?mgT?Zv zkW9%hwqU0iztZK#u&u?2WC@_Sdz^|d2eR+fJEf(m3jhKm4kS}M1j5c|?X%D087?3| z$Q%bXuNDqr>y_U^J~nZ{>!5jaKjD%{);YnAn??bW7ZIDTwCTvdK6}Tq8_{l3_b);) zV%Uf48a?L2rELLmt9H6EeJIPvh+f{Pgd6p0rjLnqBE>q!kJ?p#w)DWjVd2JoL|Bc- zm{N!Ba_}F`$=Qub?m&L?`NTY~EZ%mhy?yJtHfY$Une6tZp@8+)dLQp#q7nG(Z2sMK zR^GhFi0({bcQa{{oh0BGqFo(Fd5;5id&q(-R>37P_?^33)uyOXnWK1de`xfct0f~A z65v_Dyc?q{eSy3v_NnoR$1gjXDDUYmRMuh$vYN^LcTlc&Q31s@=QO6^U<>%tdXmo zOmebAh>E!9^a(j_I{df(P}#lovVi<5bwf!ozl9dvX&Bkjj$Q~#oDn<6hm(I;x7>q~ zPJjI>ko?nW8jwv(&|}KYL(>&eqZqcx>4l|;-k%QH^9pR51XDu2re5XYQ1a#3n!T2M}K=1heYMmZylJOSwktuA8UAg)*4`yb*H| zxEt843XdupDdVCZCrT)vvyyoz5%5A=UmA&bbC4C$<39dFPcIL3Z2ccr0q>aK+q3{+t-ISa?z9!KF{xNQU<`&aGGSyF|LK%o*4j(5b zGhv+BJ=PtSaPbG*T$ExRH{4&AIz&ap{Bcj?_>d_gd%mGqaX0s_H~ew{cQt68so`Yu5DPZFrlR&DgO1#j95NyJ7%fxtR7kr zeqJ@~3p||OgDnT@c;ZkO=a`N9gFSDgbEBtGhO7mDQr}I_$Fo7Y)T4A1pg?w61snoM zMth7q)9LrTr#wP!BSpgRNMUWWJ-HO|i3l5;LOV_WK-JD$l&8!!!Jx36EK+$$DMfK# z=62PJZQtj2Go_wpv6C4ir;+CFZ4+CR3bak5)Vz2b=S+E%q>~5;blN<4YKs!p9BgT& zeO@Ib2qYsWn}_52nTX^Sr){D*PGB)}iAT*-kl3^k?6$O`g&&++Ib20F}ZIbe8f?NQd9Dj>v81IJ0gREn)^12 z96D$n7qX+-i}~Z?{U|0;W85QGJ((9P??~Az$OpqbpwXx0ryqhDqVqya3+GSI%F6|2 zyhY+SY9PF3keA%EA17%D1C<3>4w9`FK%jXU!fqjjO`CctJzcf?$goP%XEl#W4N0fe zwX)yvZ=dQ5dJ2&l32TK6Z-Z|Z@U6xtwT*uN-H10(jic4ajBh_N811RY7*247R*kny zEztv`*f>+1X-!?%m9@_>C)Q>z@Fl=U8kV;w^V2$a3sJ&Y6hv9jFtUC;kvBR4xLl;O zJ(T{he@kih3h z(9Tf%*%*vv9bwvifVH|Nkzy${F0G1<8rG)PbFx@;O&ehvW-$jcKD_sGV z&M}T!p9gH|LEwtjrKpA$1R&e{?TzzOFhjyGi?D?4s}glC5N>`RktsMTbrDkq<)BH> zUJy!1leGItP~x58a~Y9-=Yf#{{6^Ta2s;RExPcu=ckBp!g%YD1g4#Vo4|?UwxFeF^ zBM^8A0((2qm(0TiQc`vb4zW*FZv@=ty3Er}3l;!;?I_I%EO5`~(F7Q_W ztsJyiA*|XGU_Qk@?6VQj(6D^=#^ZwqnhG{BM3#+`1Vbf?F?ER)Heb$tAN!(htqm#dK_^b8GdsCV*0=~?`r}@ zHW;a-o66c|mPWVzYRSE!K&PNSG&b&k1UbWJRb<=%ev#SSDYD_g4y9W7eG!F^N= z;PF?6QOsbsMt=w=ARFF>=jWkfOsBVB+sD^buPx+ZT9P)!*ptlEjv3Yz2xe0*54?9r z^PQ!(CiV;?bG5>Q3rXC!YES3KTEetQI<&Nks_W9sbCds`d$igF)id;U{?YMT!0|0F zf2hI{pFQen@ie#W$Yn@fVppEr$>u=s%jd0{yG$GRh;iYNCA%|9Irf5(iiZ*G$OE5$ z|E>1e&Qh*9>$}f^Xo@||sz&`VU=XdER75*-v*OQv)EHgtjyN|3Sv@96K9$$aXZ4h7 zk`ZyDMuYoqJ3MAj8rrT93)mVS9yw!aQv-t!yRHnlf~;HZz8Z&X8kW3y`|UI4wuJsl zryC!vN|9&#^~}FUVA=X=ggSRNWlC~xGk9`kQcq#l&l2R|sW>#QKiaWQLiv>1o|X-Y zSfDwDyy@nA09$UK9$b)^IXjGVWyr>-X+1?>ZhR2}n~p}p6D4@z@F&>NIv4!T%6ynB zw_!pk1f9m} za&(n@_Qb{LS1EIN*qz<#(ik;}RgeWNMxz+O8G*kU=~BgsEQxm*YELs!F9T#n7sF2N z)AS4f_`*=5`;J4U(XRecAPo3QiH0aIXN;yZp95)`l#=R*RMg*n-U*7>$pH&&gYcI% zgoGu6?H(UW%}q1ZhQ_*T7TaU2-fPXRrr$MhufqNP3~(4h>Ru+}SoOg7fEAF)Av;f` z%H)g>0@0 z2VlC+0l{iTfH2fR-*}+ig*b^?AHYYzUhwbl)zI{UfU33Fs|N}phAY-8q1oZO`SaCD z0d-^L6)^0Lw4i=#&HItXw>8WEVa@hwpBHrK=F78%tMkbN zu$Y*@-zu~oLMQy_6AT_RD7Si*@gEJ(up1&!XlNLj)v+nqng2|w`g8OzJI0*w+T;g( ziY3qa?vF{}ou?BI#|VuvWLVlNSH?kbs{%XtKdrl&+m{Nx&$q~r@J_KbzyR1o{{k~n zb|}RhrYu}5)sAip{}u9e5cnFRi`6E*GIC-q`Jtw(BDzFOv@4)FtHx9xFIF5p23!p# zOfZJUbfedUx&fgeDtgy%)00@Cw;-k}ns=JF$wMYgk-y)s0EYzg9FgC8Y|{sc9l+h@GOj{`)6VpBX$_mSa~&VAIJE1aIn_^)hB zk)&o0EUFbQV1Q+`eeSI+Fm(!v{1d8CCLq4X z;}qtRkTm?0?_$$?&I`MYxu6mi*~~M6`e=qWkvFR=i0a(uaeNLk5Z2$@78kRxgBv{2 z?&Kf`paxe&MxaW1LHO<8qFHV@?n=_PdC5Lj*PZZr*dL4F%)sc>qRd6=X=exrMLp&# zg^8wB>n@8NC*sn`3f3TNs<6&9^k_XtJB2v~2d$~Mk=xv=VjbrdA$2y{sFsa_^)PO&kOWx&l4}#?1e?XqY< zY3$tcnLIWq(Q;qAuqx6-rb%(QmC40r;L9UsAiUdC`3hfWmfS?LS={gQu&y(2IU z%nU5MTxHR@bD$UFIiU;sbR_s})d5gIV7={|xUTZRLzI<4L9_05S@mM0iuz5epLdW`g%!Jf zaDP3R9$VB9c)EiNsP-5S@=)62_N39`jIRb6|0|ZU65v9+*W0gfJlR0dy{karXz@Fu zc*Ol|(54bSfZ(^6pz z+l;%?T7D(^2m;M%o%6JxQ)c+S@qLA8+RB;G3WZ4Bcs=Uj0j3avg&+h&^h%9A26qljG7+2IcQT#RXPjnVLM<~JFD)46nRo|R}oU=gz<*QW>xef6L@_1O-Sd98C?)Jg#KviU#w2Q8Beo;pC* z%X$OM`E*ZYGp1KGtc<#aPKtf0TE`@o5R|Q`DDVoxa`5D|hI(&$a(7NS2DFiPzx4dK z)7#57OK!iy*;!C;^2`8~SEPY_DddG$*k0b&H^Xp*v8Ku=xqIWq8*Pnl5MgvB+*pJ> z_0bn{W>@+Aoe-$|<9`3`FEotz0HQRPElN1B$4Qbc*x4cM>@{tA3_&gmA7KrKW1M<` zk^f(|;7|jJ5p&~$z0DLy3tvSc&GqT>Z8l_~^r^oYEWp{bKCo$qFoLi%CFN+Wm{OAjE>#<5@n;+ri)=MS?4!Aj2FD)PX z*{L)Dy``a9q7PqM%jdk1&-r?&aP=p?=*THJCwlxmS^)TV>4i$VthdmEOjI9)GT8Ph z`e2`t3HFe(RhsSlsub#j{iIva)nC`D3F8g{vqdHzwVy02?4kIESI1S^m1- z#C?DV?QQZp@k_!YrW)#N@B^2E%PM77k5LhCXs_l()>x6vQD9CYMduyqG(km0xnPy3 z#tQWi0#3c7_4+Ne5QqHNxoJ?AA}}e(t&7G$2jnKtPB_~pKO?JV-1hXB9qTOvII(gk zIY!bB=*cL?Y_S5;bix)#l;Seu*do}&>dm1rrU%EGzOW>ho+L*+vNsBc7@)w~4sV>y zL`ywGa-VM$3YjGXZK|~oc`r_8e6i3LARwXGfm&x~4vb-z2!EAe`a=SjPx1_<;}pcW z`z&{}9MMp=*s}a<0K)3qEPm%=hIruf%L55G+?=yv8|ijo@e2A_!Ps|V_cn$iT;QMQ zwiDE+%+B5G7g78O0?RD<1#GgX1CD1}Z}@IrVMi9g7~z5PBNh#_(@jrSfr0ApFD}ZL zRfAl>_NaW(n->|txy4@teNVvd9IyL5M?JEusS=FTZijs?ONTJTMm}s5dB#R9n#&1n zoj4fI+1BIR??;=VtvT>y5%y7T=Qz z0*B-W4TR`c4GsW7(OoewXvSmG3Cvbt^pS)T84>M?rsnrd&x?q3Gt77YAKxjMlgQJ7 z^`#_plhfxa{4&f^?wCOAT#ND1MpkID-dce&SgCFAY2^i76{=r zQn+b)x`W%V>;7z8h&&T0-2^{%=!oR!C6%HLBI%~|bF=dqXC$TWL@erBA*$K$-aA@q zT`0q>Yhj$6e%U2wu>#_IGUBIQl-MbiHM07|g_4er66;JuJ zZTzfst)WN!TesalP=NA144z@u1L)Q%3g40kYPBAl9X;SPPfwO9Rit#xFtF6$Z*1xN zUF;D89wB3UKaJ9xt6l8xh(R*vP3Z6?{pBcFgQ;wT{UY>^)@1;9tPGJl$MLso$^>>; zVRbJH99k6=$i^u+8a5?PmX3gYypp_FKF+}r!7$a_mFT*|zDOB$D~Kmm0K2&2lI(&` z^n({vdFmq}7+jal*u&@D_0LlTuewY)XaW~5XpLM=?m1*Mo&^pRmSM%weK9zP+4gXR zeWLrREO5vH0s5oGYy*qL#`<)C2I7UQrB6l>rfPSm@ofBVqTefq&PMY)r$EZ$gUPdl za9b40q)u&5z#2fz5hIY-9+*Al$(J-)Uei&$&XdmAcR(CJ#sZ9qU2P|!o^miFL1O_Qq zU}4t*xt6pwWi5b*`M+s|$pCAz4Ny5u*Nc10xA( zueWCBS&vy5ake#6^`gFK$y`_pUdF>Z9bd45RH221(9ZYCd4u~{tCf@>_j|ryd5DC?>l_E8lmQ`_b31OvPD6Q zrI!EO;UtUj=1V!;*|OgxKdVYlN}r+%-64~|D)Q!)V@}Vvpo!DLjez^A=f|&3DMVTg zUNJIxV4#MqEKZ#`ho|4qbAV6#pgAU`ms%Lc%st3YU2zIg*vQDZ3QC76)K^WKi=hMb z%Ux^HA!KF|;4wWS+slN6sRqYGV7rosO^`zqpb|j>a!@gD*tZdHyKo$iw=3}*Y=)0h zW=XMkp*?zq{9~(-Z6}P|D^@zea={7WGYa|6OrcnmvxS&A$Fi&`ALrcB_-QV`9)%*c zP?i3U;vY;PjtoQ37`hdr3cR--j_sa9UQCp}6!jnu zzR$M@_EC5a;Xk=_L%e@HzTJ&%##eO7vOWI_M)*w#qpSq>V3Va#S&zgH|s!?=EH!~x-JOqmiJtVa*f(a z-!wpMQKa?Ry$dTOE&!ENp!glk-k0TEA#gTlUu!osLx7gqp*^|i_p$i=34>_J@?8x}Z9iMTnJ$qCs*ksKlmdmG zi^Lom=@=Av+*Vhv?_a~4od%JFI5#eL8*7m~|BHD-eJ=5UiYP#LRdK)h>P2tW#k{Vq zRB7h2+J<0_%fc80`~ctw@$jTLD9rwyWW;T#{(+0G=YWR1o{wrtuU-OHpP|S(V&=|BbySj0pc>x69Cv#gfH+(Km)4n$w)>aH0^TxUluv@%2I_2#g2^E#XOIjw zHyD?ua{V{(`f7O3c05$?D{yYmy8pCrURt)-OYt&4JPbC;e7&RS>J1$eM0*a&V(dP6 zyY-ygff3L`RZT0;{6JrtU6LSde8jzaJ$@=ykET>CTHVmy)^d3Z#(}GIrdHFn(Uigd z+xkXkknl_*%N{?%;!%b-42y9|QxG>RwL6-0NwK$ZWuBDc0EE^y`Rh)NU_b;SB7MQy z!rg!+K&{kK5u7+|W_Hdie@}@Kc`~Z8w8e;3Ibt{HvXI*w9lSox8bhLkuG0jlM-SB> zOT`T(zEX3RM)EfwNbI%zA$>& zCbf>6Tv3_%8a7E!c8FYnigNL3KV(XHy{;F3i3$+v3cYL-Xk^xF1u38-e{Q??PC-*- zehM>|*Ghc8N>qi43&xkdKQNq6vXT?}&JbCF3<=yYhQ;7<3&VHI43G1q;_7NHT~aJ| z)0?7_z5%7`VXjJ(fS@!Ml88O>B0BdCL-N9)p_j}W90D5;gbnUXnNqvK$34nIWYmno z2&dysl+F4}e5x>|1Q}J zA*dN)Gm#$qZtcB1S~J4Ihpe+lAs~-?{Q~(6aPE6j=4xYe0ndT?n*nrCWp`ISLdQZU zbhOqj2Z{rTP_FBlKk2L2L}+L|m=rcNk%!}&iccQ^J%p+`Kxgyx!h!35h1x9V6(#~# z#Wxz|cI2&Iq8Z98RDhzw-z;_#8!&sFQzsMGD{c*K(F&qxjc^YlB9cJ3AZ30mbPNQ9 zS_nE9ebw$fZgh~wIr_8VE^Hn(i|Yx-!G?QHo-UIhuZ?<}fpJ^4PCfv0()85xq1HFB3<*&~ z<&+MJn6kr?S@!b<@J#VnGWxCZ-k^qE)(VuwuF&6@zjHC7dT|IZutCxH;TvM)dK zO?ErD&&f$SKAvNfuoOicU*u=z#%*nMedXqN0+=C4FedM^>IKtYD$PB9D)rzc3Cc|1 z*H=g80bC=b60NWT%$yts@!`iCDdK+VEkE@dMvR|!Rk+?7Xrj8aZ~`ve!QXXg zG^4{atX1hd$h}{H*>(@v&-4-E=Y1&BK<3rx=4;%cuxwQ^pOnXn;w>rVREVUS#JZ|^ z;EmoA`|DAhyfNZC8{h;h$RhAx%=Ntwog}lITo1o;UBBKmb|zPxCzHM?9y({9J$(E> zPd3yVUsa>|>VKDo+$dNjU_wko{g;8^eEYZAdVIItB;AKPYd+Plyfont`K(00GYE7# zni?jb=`j*oSS*uKRhV^~^8-f2U8g+R=G(O;rtbLbVdhProYV>37!$QwMrmL9Yhs~1 z##6A>+)(Mq^dWZ5=c;6ZTh^Z^BGPW5G1W>8MJ7zQ!cBus@?v?R_(}I94AQvVocsR6gV8TW z7yFizPl^)4ke!)e`)cA3blXL0k&+3R0DFqKK@JEAZ0j016 z_3$lg|C5`NV>q4AQ+co;ls5qEW5US6RK@QbO@eT;`WUU8HB1xaj&y2C*D7#F5g*1w zCHZM_A|5TGyuVA$ZF|T}5kk$aFPSNMYv;oFFcRbjGUBX-Vg1af{HrJwgV>M--+91u z7nyW0_UuKZzc!&hZ|r9wDz32IJxbjc$F2s8Sa<_;wl{>t?FWGyr#kI~F;k z!}<-=u60oUXt_95iBb)SH4y$SQ=&92jpPTnC6J!hgca0w?Y?n)s%pJ*V3$y`f#vX-v!J2gNU!ZU+klB5*Dv>PstSkxNZEhFB#MU8 zt)1#n9f?&S0A<=LX5|8{0*X3j^^jrRwOcmazT)xe- z$Pw(@TlS>$t~*Cu2X7f2%yam#e_g)IOwjC?S~ZVdXwa4^Nc$NZJJ0euW_Fu;SQmG8 zEhjS4u0cA@f{zhfNvoZxbytm)4*}ZFbphAQ(_ed^EidR|$<6rI9vc!4;==zPjB4F& zl-q8cIRy83>`=^A+ZTe?eJh$s6>)DgTC%cdZXi|~WZ>d*KA08hpvr%un1-rHN3c(4xLiT=F50=5p!ejJ9*O*y4ED$haJ{&Qg zN%DYPRq3p^#L)m-8wXSy+(;G$0Up`sW-{V+Qr*_3j^%b42@cJ`|0Z!#3(h+TACqLS zlrL)3Jh1Nq3!z~Wes3^gP9X@dYpM9s6MUMJ=v~c5I=HmE#M`hVEdsoQmc*ZKk1PT6 zM>#oz#}iEpBzN~q*$u@Y;h5^(Px2z@oQgNv$THA}z)>4H7eafznwjAn_xLO(t%VTe z(qA=JJWk19=g%g`DT#tqq)`~&)f_F1n?1(f;ID#0m)Rs{uIUyoov$P{*3!41Ig0zk zR&0*8G~C4{m$Uf;si8w=3Qb>py5X|SPO3nWIoi*pCCn!KplyahEz(?_0Ot8&_L(|u zjo~x`cklxG+MrCd)NBSG7^7QPp`l|s0x@q(~YlOQ5seMFKp_uGc-53YQ6Hk?J6=CrSdFW2fSoGJX!|FKE^ zIq6Ag(OsYq_7Y9y@T*&8R>lx+kR_{V_b?KS?p{kcZ}E&PyaB?Cr`V@ zmcEh1n6`NiJbW6HZe`BZj0}Sq@ZZ7@$Zme){J~d0MkKtjuO34D95btFvO8+gB7cma zy>K?xU_PQoU4MK+nk=)dHcV>L0?bqF8Z^r+0e!xfk9=~!7Jhwyx*$XOqGu*1x|vR< z!M}t>_)C$pk&=s22cLSUlxE3cN9~bTTX;G?glI6ew?+-yJ31-8zY~7V>V-Y6adzl+ zjB;_^HWzjwJznJf!@OZ9(RIM`>MW9CmyzRK?{?;KA{9VCY__Nosx><$hP(?+yEoUa zcjV@1RAja1W|X{>R&^RDWN5nW@I2`1Gy<`SiKwnNFf1nkVxBd9f`e2;3v>;g3n+@m zC2EPdpT0*WGVeO>o7KpZ;K0$|LCd_Z4YnHW%@yZYsQ$R%30%N1#&rd*L?GPtB9pSn zPrHF#t4IgQgN4!KHdFZ_WXU&vws|wLsz7j)X)&LZlMd#G6lelo^HkZn0O^A<)93;j2w_HpEJik?( zZ)H=IwdY7hZd}?lCrjgD2^${eu`{^Isa0MLU=d`3J|y_%gD>(EyFM+pD!0tJ$_pYf zNc=SD+#4k)A3vr~K3~h@#Sa_gYv?#Zf_rhtN1gTw-P}|&BaQCc5%LV6m!wk}_xEJY z29={+V1fMad8+Oo-lv*}8Y!(24&tnyqvW#2{{s2|S1O{6|3|FRcHk0YF5?7Bv^xn8 zYevFcU>nbK8>Cr2jXdTfuMH~l^@wsK-WRNUM0&R{^drr8T=6e{?cq+RD}*vFq(?03 zdWI#An|@QW6Ith^0$v@ScC{Gb$rBBTV3G-LCj~+tMAg+%S{d!dS>=JP^KDB`W=D?9 zU2jB)DS8kw#nur7H$!i;>(tJeQL2l|9ZYgv4bL3l)1dX9^Pg09os3w&FLhz6syW~o zhg{+nxyDG!1;Vo()pl#|RYl4zS+lK9LGG=%#?EZ*YyP<1OX14-B76_mPO0C%u!I&_ z%kqw3f#6S@ie>@~bH})6_7n_nVp%;@5wW5aNTL;QKiIPNR8%aA&tzc4qevc-cv6)S zUyK)^P@%Bd&B^-GlY3a}KSk(yGy_291d=RfrSq~PmH4Ay?i;A<47;#DC*sW5FxO!k z#scKccW!3skoA6qDy13$fp>uC4aVPva&5vUH;wimN%V2rkhEdtDJDgXs1~pt z>OX4)I_u}!hXRr?3zw*LlVSO+W>vdPO!#oKf3Pk`OTxbI>=xifckWvGu@vMjwZ5 zpYI>G{6XIy-`{udjW&@7tcG&$ffIL0cvW{?45jLze_~6lzly5w-2%o6c%)=L(XfY7 z3)oPf3of`n{E{qWplKp!^Q4|jf_{cqyjE2H9i{g8p?*Pjmy&}58yk$Mon!_Q&%~w~ z5xc@X(et*aNkW^aNf=A{!@>ULkm3y}DD@9)3k34!?#6%X(kh%_)do%F-vol|zn{+r zBfzS#iWWj^7~${m7Z5J_0RKM#z%K`*kP4yJY<(O;T3xq@K@p7oKI}@fQ*UxqSzwmk zX;zXh1OdE`mw_sVRiJ&~llk)BGCpF#nkZa=PL=M>7=697)H;Lj=B=GS3o8`Au!`~r zK5^O&at?=3bY!hJT9{Q7r1nFKEz+Enk~%K;f6qS4Nl}UN+XX0pvgf50(ovOqR_cf=xBO!m!~R>0q~)LoC6JL2hv%Y@nMv74E? ztv5NftS*SoLDK4WhD)yqCuG^Xh?bT>0+|skE z*m8|@z(BT0xt!hHgwpUq__(bfJ11O0OkyKn~Kg20nI=)YzXrn#145XuZ_} z3dV6Z77y!=tUPfdQX-=pJDge?Q0h5F2K(C_uX#8Lu!xAL52OiC7+gvQqW?7SwK3X| zaVUpgz6G|%TE$pDQ+4^^)^ z#DK0|+RAy#&~a{$8aVia_cnf86VTudt{vdp3Keb<}^-q@BGDqGyTdEu^;BK9Dun z%3paHyq1ri&)mhcsb}{gILx<6*#mE*zNJ}961|rnn%gzj} zFUBSYbA}H(n6bzylqE8p!%DDuK7xn`R2n&{rYyg zK0EEWrY$@I(-dBq@5Ua|cUJ*}1)nZ4BDH5+(hJwWfE1Y=vG>PBVf47AR1pZOiU<*Q z`82au{P9`&hK|=GE@g^C@hHV< z>{-4$g4*r!KU)IUXCGLZ>Aul{xp4fD&J@Bh=MgJ?HXu2_oO6%a*2A~0c!@U8l3!Su zE|7fRpb6F)xbUg-mEKWo3HEW0Oc?~_(79B`vGFk-tpulKfW{aj=6!5wR&^c_a#G{r zr4jDCutlqbcMJ&D9WcvqRl*oVwrjE+OlMX&j}yz~?D(&@u;OS~K9|H|&LU7Jeuss0{z@V}Nj30QZh_5lN&BTWLU~ zi~3Av`9C%R0vtbz*~r#rZ^p_Z(`~heUCBB)vdJ=hKl$^6D!AAkf#tvEi?_JQ&)60d z?nYgTH?_JC=onybxsuj0#_l4!M~2iNp9EnsmiB){zo5`HW>2iJ>CKsF( zlR`$P<|JSrlN@-*fn~SnB3@K6o@gyv31YjS8-dz#VOu^hsB7KFi>!<&(h*Ry!9-WYvg6zz|Ue2n|m((1HCZq4R-e|z9@Cd z`?EVKtsGZrJc_(QN87VeRk`#ur=~m(QoW;PQqt2ExbhTA=h;*28A9V*kS8gFJT3Pzic! zRplHwpBcpRod44p(28L1@>Dk69g98By(U{=e|;j~MWRW3jKIc(k%9iZJ$l`Tq&b+z($& zGLRo5dKE7T`r|E1J01~5Vrtpbf~Ze0M|qEnmj;x%!Nb2wq7V|Q(XfdqI%Uc5sMD6$ zItHZ$q;}`781zCX2nWZ9fTgGQwNeWg`KD%Q(g$2g}qTE(HbWW3aJ6rVJ z?H5O`-2Mna@4^W~6FVqC`?DvI6l->_KG-ZhTCIlP5k)~saHXV-_o6|WlI?l2(SPh& z$F+yiA7!+-078`Nf~O-rKWdfipRH~&ZV$?2!qI1?CKznqtx@ip-U1JXHepaLEUR(l zXrvElJxl<2LR2q?Rwgsf;OZ_3lSWAUTUOUtWG_?%A9p@U{VDx1hO36(udOt5;|#Eu z6B?Ts9-cTIe_LY2l=T!*>?CLmKX)rJc>t z3*Oz}ey!t4o?%XU$TaWnqlh_$3(yDUZ%|1hv=nkDLYe#2k6Hoi+WOMWeA?Z;YAVPr zjeb?Wr_>c;Ax*~#*V?#97aP|UYDr?~y03oacmfFXVl30U0iw5q1i_ko%tXjP<|l_7 zj3ud>ThsfxDJ<`7@&Aqe^Wxy)n#pvFyhvX27?)H)DetXF{OjoTnrzqd;J=hL7qbN3 zd=?w-n1}9a9yd3-SHX2w$?CC_F?^-aOL#(31K~`T>p#PNr%_Expp{IdV5gA*VqobU zWa`JcOQG^malO8A02Wp>>rJGMMGhn?OHicg1h1j#@xh z5f0-eal=!Q9UNrQr>B(K1vbYtBXKV-&`@pi4CBTuo8nSR>m3fY`B+!GEL8>jMG&>;cE z5z_F^Hh*NvYuMVh9@UyAU6D#LM6o2ra1WZi5+Fawp2nsstG{{A?grt>c_ZD)hc;CU zGq+R;|7aGmh(7y9e9&8|znCx?6&NhB@nN%*4U?lq(iNLA2EPhwYSc7}> zP-!qIsN$dJ?IB*9hDJuurKQ>FtLP=9wPvrxpJ>l}sSd0}7jvw2J=V``YyI9u1ti%-YhEn85GIBP$w+^XYQV`z0d7Y2+` zv&V4BhfFcPMJ|b%UGr8HOQBfQO~FxdiE>2fR_e6&7u!UiL-9s@w0j;+(1ZeF8hIR zYjWBZ1r&mVg7!8fCvy8kOVYv1L#+jE9ZsGi2PSOp1Y8`8`G0qrt|1~SY&i{j z^}?YUs|^fZR31%@biZjWfZY#sp2<6b{tP#UnC%)~p6etR>?R7j5vU?di8{^>#X?XV z1ItVwN(^;$JsNPyUZE7pP}QKV+AnBR&hCF%`gFlyEHH8i-a6AF;vO_BhDWCWqs(S969?k-j&Bc= zLLK@-g!yjHr}5QPfix3-HgqkVbO?`+OQ`xzy@|S+oi#F}d+`J$_584bhBW%8tdWAu z#)9$kgHW}$TSNJCCzpT{kBU7LK!7R9;KMoO|T^Te4| zek?0-I*ASbhl&ku1Medo`pa)?=@z4iRi(t_*RWwnUkvyv?G6{92pln-M2rK=^U@^a zdm0i#rP^w{NaM9Ue~6io#D#^F<}>-MU?)M)e^JBk8$}8x)6UP6WSDzO3V!6yW!qeyEs70Qd2$Hjb&*1A7*_t0sMI$__ima-=@uJF#|Su@o(&1NqH8EQevFz>22NOI^v#l9(gq zg!lbQ&wNZ=Nsy6-gY7K7v)G2AMPpbi0`d-FMB@}3<*G_rqE!KVZ#U}uMKff_LLmOV zwnX)C6LNudW^5DKL6k#@5mfgKROE$SSh4bl^$F#ub{uHK^6tYf#zxy+_x$o17tp(N zTSGv_;LBnRU}r7Zk||W(ECz?7^|m|?AiR;|WAs#ew5yoy2Cx=pZ-wte(|DuD0OH%4 zmbgKp#`c!z5Q|pHQmEEAj1*CLnntj#Q}2K{G3;7LIsvAv7hDzoJw@-&LEOM>25*YE z4iy;Ujd0~fBh&doynldOoD=WDqs3n3IL{M*(qk-Y9Uy5*xa??W4*+~qy9&t!hRN1@>dL1-2@_Tuu_pVw6+BH-b7?RR}KdI z)R6=zti!E4tiDuJW%<|+xLPp_3nQR$$(}1NR!8dEXSDF& zrK1U!J`8<=%o7#&(gpPP!m+P&dU2Qi!dH{v!9B0-L{IWV{AMk%}{$qVF7PFivCUm_kZ=yP&{Z~Y4J5G3MrrZG$lr!FXwnI1SWLjch{xcfG+g4 z>J=3+|C2D^x$6MN^4A}?s2K&VaS+^2Bp>(b7CFWJ1vV2@oj4>SE6cF%egB@5pyxut zP_`R%)-w+X&}a4}^5Z0{a#>+SJz4&==F&I7)@e=sZ$y-64EWOnQ0}- z(Y-iC2ZjD|Wzs4~nu<$M$=+{XUJOrTcoSQRLm_4$yE^eMc}0 zmxWS4nG&p4rC%9OHp=;D&1x|{%C?}Wl3yUX38I;cP<)1#^{=R2sb$&{EZmljy=q4* zFYavOg?%p}eCQTWPyuVoF#{PG`0$-X3~cX}#4MPje*4iEd+i7imFF8}Lfp2sNya12 zutFT~tOKjX_VhcvGq2WYo(^&qcUs5;m|%jAU@$)N>DEhcvTP_y>S?j$39dyCA}QF> z{m;>Uw5^mrIFM@S4kqkY=}OJ5CYmG$>ZJ9sK(1N0p8G$kOx4*xF{ZI_>ErE&-Pi10 zJ)b1)Xa};lfBDg>806S9{(N`?JKqjkqj4#=pXe028~yIus!N$|FHGg#DZ%@4VXx7; zcQsmBdXHkJe3$G`CX4kO>;aU-H7Bu?&^XM=RJ}vasc-`xia&LcKXaq=`2%3B6Myv_*wlinYCKNy2_+ z#l;39_JzO?QkQfeAtR^3?oZ#}hGU{&Dk!L9*cR&pjf+qvHVO`H z{=}jG0u26^4Viyz1nY9o6h|V-9Y>%d*$MmNd`vs3+AjR@^fd)ci>DaGg}Dc1wV!7d z7u}kzWq9Z^|G9jAdRl((M#aQ7Ur|q-Tf}#OF@vK(bzzpw%w{LM(p)_O45fMajkseW zljr9RnDeFFef29v5oldM?K4~Ek43;#&H{@Z z4F>vVF^;zAr-Ny0d{ACmnLqm6p{=ArPNN#^EuuwaP@>?*@r?N>w>=bAj2P(E|s=orLyn(&Xc1S-PQm$Fmgv1daf9VmUoWD$FL{)U&3eW3{ZVX!eOfl(TIO52sS#p-Hf`<6-g7-#tfSid z8nNa-^*|bwqSr^0m{}#g@J_=`g(QiImET^mYEYGB2i^JA9M#IQOFT4!gJ7%HXrdfd z!RSGAgMv(e=0Vpd*FUCnHG}p6t$X>U_ZMmM0aV^2rwwdx@9N0uL}8{%>{S5Wl+ ze2*E&6&w93<<=`F!H*eyc1B(DUbJuEth6)xOdkR;8Ze4146?xGip@4(P zK#oihk5$oWaCO9))LF^m`i~VtUDv20%on3R+>n-ziTC35%17rm0cSn`zw$w}n8>)p zy?nPm?7tmn&vN{9c(@t%>*vCmFRg9#qCMow9~N~hI!u$>Nd{2`a$=vbsX;Eeb>yXZ zZb@D8<~elcV|3TQ;ZD>4+9eDkjo-7_f;*X85?vt#TzMf zdDo_p;9LEz!RiT(O5rN!VnNt^g~DjC%rgJhTTVm9nUg?IrS zx`kE@C6y&pyzFSDs7#A8HuAsAyCn3{d38#XK+TO>#|&C5Zw=%`#Lth%F%}c38egcv zK#*t2vu5seh|!{YhEHwJnM0o;gU7WwRaXN2QdL@0h);^1^bAJn89DCi9)$}vo-d-3 zj=A6pZ~^N}EY+z5OAk3zzu()9j3%||`fitDw_T1Atijx_JjL^b;%CH44K^*U6iO+_ z(2D`hM$ zi^OH)t>|PoA_cBJg}@Pj3k7l;dCQs{Z~Is0efj=tkpJ$=6f&+)P{=1T=6N1}eHjc~ zSvRp;h^zPLXUj~ItOT`e-XS)}2ob0i8LCkn$N1~~XTJ5-=tWWa8AZlt|KHOL@Sba( zEHxv9(FbZpep$B~+}m$aa5=ZPK@{iD^30^!WzzeodL2g_`@1cSRytehT1vAtpH~Px zd~(+1!lu_ZNnUkb{?rRaPI^jey|Cyh6}C-ZbpjOG6I%gCUyfE@r{Xz#1@-+RE-+1; zO$i4dZAyG{U?cghf&bnmXLky?uFpMf2Se z@ehyftyYilz(=D+-Zw*`2STq>YS(r{2kW0H)ybG%{?cy6okqqDjROpx0B@%TD*bm8 zh~{@EBJXVGjBI>*g_*cZ&Afc#zk!a^Ea8CzM#kT|Ph9D-(C8;jxQsDagSdg4e;|^j z4!BJ)5#N5vVz>QD5ENwm30Ez6_A`Gb7|Ho}EL7Qiwb1PWUr+pu!QntgF7?mTcKqoJ z3Rfvx8g}C)uPq)}SL>}0u!fo@K*Qf8(>ZLimL;LklL_9#9uK%kJU3~7+f*g&v1lWa zJ_wndyQA+_cn>bNj&(j6FLoeGcbNoPAdky5ZX(?E>D%zD_2`E*zIs*WFsnK6p_5X& z1KYmD`z}7(bbEKGo$^e(fy}GlcF6Y;bsBy(TE|!?I@xg!4`LUc%$Tb2p%F%Re5_fw zNV)N04!JvQWUv~kmv{HZF1=U+8to7X=)*yGrq9wcos1%e8OhLN-mAR&+87TNeMh5t zDfRI1So)D2$a#Dhv{C^zm(~pIuL}NbO%O1=OWp}bWHIrIbK$)c!HrY&n-13oxY1mX z()1qcKqu(uW=6nj!~=s31C5VqcoRa{CbYT+a>U_vkzb803G#PZ!zL?o&RVUkOthsA zA#v?tFALKV;sFNdVDRKDOwZoka$CjAulJw`Sb7LOYyOM@e%nXC(y#u_TZ!#mK%{IW zbBfDo#)fIk?*#OPqvH_EAybH_YcvzB$|K|8By~*9ZR&F4m(7u4~KtLP?q3_ZZN|zku2t@jC6#bAtVqhZLh%fn; zbGs8~{uMk1HAtfbDBZ&XU`Hwik3iU~)Wlb`_2x~*5!^_{Bfnb_QZ0w;5%Buh$Ht2XKN& zKwzO7vd|5yrfsR*ppmNc3bMCnvd5}H^-|T0J%F_~LES%G=UvWhgn))5D3_GRF9h{u zKizrmeIPTb)(Bl>z@Odp&b1MYB!0CaMgNU}P8MzlO=upt(LERAj>^P4BSVEM0Q)wA z+kCwBwC)2bUztE$c#DyC>Jt>Gp3-Oblf9*u&yDh!_u!qaEP4Ww@QLP;MxGVYw(N-_ zVkU`!-20O57!ageZRtd5U`iZ1OtT6CEkjPb`s`U$4&+jcF1zd$j{0^VVO^m)C6h;JSmQpiOWw{vMGh{Gjl21m?inm7 zy0z&T#pqp1lbj=h>@433UA4Gy&R!y2|36F)@GP}2K$A}efpK#WkLKi$)xtE(+y{jd zG>b!6RPDb0FLz;ElE|E*9#k$3`Y6fzCY(rD;M1;wHV)DiiXX@Uaiv@Q2KpmIFqBW| zGfnu16?C`wabHRVQnLf6fL1!v6?AgQL2)>9K@}`qE#uh%U!lWWTvm(v{LWV&1!H0y zN{nu4Jn5EvSd*XPS%T#RXrw2n*w8bERVpPZ(O>m%&Y-}6nw;0$tj$OmSR~y)Z|VK< z!vro0s0M>gFToB+@s_kh=J+E<;X3#i>_!}fe>?VxAnWbA?V6^}KR2ssY9Axh`1->| zPerzfuR;b6mG=xE=fU6#xdir{rrU5^7+2)Er&HACUz)egX^tKO1!g+NhG!w17}iT( zZ5t(iP1#urVv3`8+^o+}u`mv2*OV7#03Z4-<=V%WDcl03!KnU{lH+E@5KjblYa3(z z?JMWNh@;$9NrGpS((zWXLXjxbwlRIJ5xnZ=Y&uD#Z~o=Dc|?3Eh#cdN?^kPn)4YcD zzGqNUq}+%6^5}e?Oc~NR7EH@koQ{;EeyCg4O0=I5jz*fRtS{d?oK zn@N`-VziQv5$!#C>fo)+0!Y&x`UhTybawmQ`3aV>R7JM4%Zt z(d1owH7Qr>Nm`26c^Y&0{7DAdR~}62-Q*l2H@2!2+FPyCAG^c9jngbXaJNY4@$bUg zc1fvm)BI+=J-fmVww!lXPrmyXJgN>H-#>O4w)ll?oF3HknjD5&>M>pX8|ao;m3>{* za)L%(UD+BdLRRMPQp;A!o1P1-Joo)Ep1`3Hripf!M(f*Mo%-nz85jL8tNFtJvDy?I^7j0^sfr^zhEDj{4>8Tqj?1q5x8A_52incAzBa6m> z!7XNrR6`7bMSr-IH$HYl;-9!rdW{R@daFmA$Fv&`~}h^3>YIUKwh zS9;&?W}QkHy}Qd|55NqYP4YR=x}6ST4l$oW$s0Kn4QL|$j2QSwEJ`qa^A7|Y<5cww z4|z{I8c|1XYc|6A`L=&TJqV#>_8u%ROf6Uxp$}<%B?L$qzD(lh+X^seU=k+?J{m~7 z@SBg!e+O^YrbSiWSgrX38q>b4LviL@nwAjrK~;5#$#gXFd@xGI2x5OQBjsqv=0@Cu zYCooWC4(DtVO43QG)QGy-k0wAf3bYoSF8B}@ozUHvP0c8K`JQ!zz$-1x)n z)m^Vy$iH|fx&r95e`tSL4>;?@&ums~^X|FkdD?^Jq^x`|P-vrAB5StVA1D3K+o22J{OtdQR;H8G%!My_)02A_u}`-{7-KN0zesg$Wv;~WCv1_-_y zzk2h3B{)Tkd8+1j1^HjmT&GMW9S1?^BSu2@k{fYMwy*<;;}Lt+rB&@e^r6ZIz^zqi zn)ugXFFfwaYncP*9Ezem5mxn66I--wEHn=wffmr$+px|{DENKJu6bc)vR2UM$?pDU zbgNCS7^2NX>}lB#;J<26Bh_2+=&&8ohaG*BDgy~FlMDGo&a0c_A?0<6OT<;h$+}~Yb2t0{`m zGMg!z{+I7=bv1vLOTaRxWGMGV`eF4@Xm8nJWjmL!UT^uXY9f1Ay5xL!d1V~QaV5$v zr&}1PEKfIp-p+^O^YIW4Je&TF%;_8D)XQs|gC!-p)^t#uz9wB|neyOQZ0JeI&<1ia z>S!k9#B0V5g$xGm(=U7)FO@tMm#Tlf-Qxnbvwf_Syr&of#VK81q5yszBA|5ma{-?I z9rL(cA8G+ZSbdgOhvZ0~6T{d`sL5-B@D}`Ia~yuuR~@~l-9GJzX)(v;rV(YQq{n4v zkRv$E58G~_y|50TxnR4o6chml18QDr=E32>av~r>2X4~S(eZ>K0om_I1Grzeb=3!j zd2gRyww2@?jVF8Hw-(z4uM-Nb*=*wpf|QfFhD)_cK`m*-v+hUeIMa6U2 zOhLJayt<%4KjDA!d%|p!hBVGV-MmCTlRqQf$}o5TX)YenkJKRpi;6$7`k2Rmbx0$_ zTrK^|-?~jq5H951TuIZGAYVgVuQ{;Av82|WUKpg;#CI`cmfQ-v8yik^8pm+O3$KTemTzv0>>iYUt zt_pnGK66ky$#kFq4=zY!Sbe4nn*p2dMjbB_f=;>}cC6gQgXa;N9U1*aw)D>nvb&+o zSn!D(8cM448~fUEXO@tjs-!$Ed)H-=M!l}MD*6`3?b1C5=a*aj@Gd9{xGh>mSPy8{ z=uP3XsQl*@rJPCAotW6mS^ZGLJ8C9qW7Q9U(9E3XxSRGEk8I~=%S zA{pohEDxfh0Am)@DCWpEc#?@%4~W}r8K{!0CZWRkQo;tTS@K>9Fi6JYt;-HkoT;1J6oZ9 z3Ot|7tv9eMj}InxwL-aJhmY0+MH+j6uROP(Jnq%-q-Kx@#{MvMaZ^x(|io zgw}wg=KXr-m=rA6eanDZSHBIQy6aP2@NtJ{Fa2GITdPd!1d9h%fw@f$vBqHoE?!Q-+YYruD?dS;>lsTxi&eD&ffO1B8GFTiOV0;>sA*pcX~ zY`H$my;=4(I`vEmcujDJ`>r1!WmF2neU`=wC6H;;bxX4PBESD_8hi`CIl)^p zDmUSFy|fU-TIXn1GN7cU_${QmPi{qDFF_4M)l``cQ+T~XC>nlQ?~N{e49vWX7D$Rl zDJ}^$=>w?W|Aho8ILDOGv3%IHDd!X$UkEIH>UZP{dbL(Z(QZE0vnS9C)7Nk20LMnI zE%3>2EM0duw4-wClkgXHOg~PyGz4Hq)pF7|4H$jv0^xiFM*a{ggRA!6> z(@<%DZ{PJAS0Vn7C$jfsXU2WU`AV#|J;b2DTe<%)O^#g*wphWq>87A1y zthr#jVPDY9W`o*p!qkf|whhuRo>KZAgR^YB&(Z;jk#@1F7Z%kQT>C+Ve`=D1mqVZ-qJRyx!>&@cYLWctXyB@(R#aS4{8zDgcI?$%BO{ z5QiV#d&B*jd3JdkxKUWD`$(!+VRI-tB%6=o{I!H&a>nI;NAf8{2b?V zq-~Am2Vsqj#+J#G-@jQ$Z%8Uk0Lz(G2UTs#KwAj;+a0mmy)MY-e1D_nbEamm4Xt9o zY2r;X+DWOt5m+En$l2TiS}8pa30-N-^@i@ct{J&~m5M`v!i;D|AlQ+MGYmvW^QAY( zz;>t(Lh@KT2q5`*eKimQ%RAaOvsM0U!EDJdIDRE^`X8!zOmxEyj?K~t8QtN)Wb8dB zngy6^DdrfmJ?4_NUUUT)3rMVdXs4MjCUcnivZvcZ;=4>tVL&70$8Ghh{~JFb^K5N) za2J#7rMvm<2aQZnp#DqAZ53C5I~}6d6J)V)pcnjyTsPwms;Fxwyo7GJwf3@AvVEnG zdJ#BNb8~x!fnyM}$vaPeoEkAJ5j_`YM2vgle93xXw&;jBn?RSU$O5KL4NdOJ9!_6b z`#+Kg%{rG~V|$A`#o(8B&j?veUH6OR@h{Y>)0@F2W=qR`DKp+x;xW$m$OfGIYZ?4S zZJoQkfAh5L>aEgEySpwQb?_qm0H|2PlY`1X;DTYd$vaExC*i}Qg8HtNh-)C3;tms5 zKC;LX$^eI!FmmFr%XO-)bDjgs0_ozImdK|nsG!JVvR^fd@x6X-`HON9I*u;bB;5pg zCXfcLyr`vS*A!ehk6Nn7sf1GW`($==e8rLXC(B{VZaOMkO2d!k&J1PtYGICw;&h2U z>sy(l90J#)3wDD8rake7JKI{z7hC+5CGL(iKsO+0^?`fVDEDtM1oxBc3tuVSYY*km z-Gt0e>iMD=U(3%#;7g7zcIq%rqMgGw1js8Jxz*pD4M%RfEXA(+dh=+*sdh(7L`)NHe?i)(`Qj0UAPUn~7yM)3VnFkc1i~9rT9X22!s_lwGSV7K9 z3Tjbt5ZTflX;ShV3Lz_vu6x5D_E4McCq3Cf=%dU^a*!YB$G26uMmxa*x%Gz1V%iW#KrduoR0 zkV~fZv8~hT-__`|X9_^^BeeP(lYeuq(6_@^PXY7Lj*Bt?FD@nS?L*bE3BDr$X*3|q zM4^+Bzh9&R00k`uGXShSo$F`0kzn3wMVwTH!0OMQ9}U_7?lf1TxmV@M9RJtfwZ8sr z+AVI+q4DjSQ>7GLmf4;TD^U5tpPu`2Ai=1pZ0Qv^z8wdJpv8R@Pg+(uZqKGOOYoiJ zfO6p^Abv<;I8cBel9>e1JVvkqRfo+^*n!^Vc2>)gw1i(rs>_7Yy& zdy$mMH4|r^7j2A)$U50x8N&1z&G)~l^R$e5brY=aT(v@K$BS!gYGBrPn`sF zZWPDb_n>Q~+fkr#AKU0F2WcLIJ0CUl_o5>`==SC%~sw22!cy@-IUboPjMQY>nU9*i!F` zJ0lN-57a3icFrCjuJO}|2ciR#8R2+Xp%5r#;hZtD-jMl51e~Zot3Vs5Iocn?SdGZD zV!$c!=naa+9xH0*BgKZ&=KUcWQOdtQG?#sg5GJ}Hn|scJM(S{O7~v7H9sHy4+rLef zpiVoY&8iBAfBiE)xBNeh)69}f5G~*F7$GxefZt_7z||fgKYH!`OVJU5k1vkF2w5afgsq5XwH`Rw;J?8pwqdWU1!%(qNNIwC(cS2;>2ou zDr43;k&!&C1#CE{yBXIRaSnsqtwU?5velam z?BU9al^JwXSBtnP=}cnKjPDf?_d!P`C6gn9l-;Qc05`rF(eqftzn~^#qk7vdUANtd zg%G_Mo&7x~WmwfiMmeskv?EmsWcgk`{} zaSBrP(?q31T+*UONrM-r*-LW6nqZG*b^^ccTGMV&Ddb)SbTaY-6`7hu7yN>l;ww>H zh?BwZk*}Xt;mhEuxMkMt%of3IJ5PupfP%f#$a7^xtlkedlYb}>p-b;M=Dk^*_XlTX z9Nj_G1Ty689h`6IW=KLK$OGf!C3AVnL|O%@QqF)5L5~oB!R7Fxb-uObN&29NrP-Td z)}i9Ia!A5a`M%2tp2DQj#$b#rvX?jD#I5Dhg-c{Tr2nwB7Y^Q!`~9Y>{~yJCt#VAY zM_xz83ffCyYJtqh#sxkTc%&ogK-WEL+3QxYbEpK`K$Vy#^Iwh#r(shth(JussIq21 zW75?@A3U^RqDx)NDi;ZFwYYHt(T|dT@8!h9FHm!vLQO1)G_XIBC{XaTfZqHU6<3YY@vXEfk}01!yL@CmrxKM*#%Y^1UW1OBVR_ETy=dPZd*K zW%TD*XwO02uWnhOb{fRe5qY{Ti%y^9s*WG^06;id8RTWd)QXa>+z8eIG4tDKtT5UF z*ihjbaQ9xp;B#1@es1K>CffPDEYT=EaLE>|katj;g?~Ykj)Rx@JfoQBN;j9#N}VPe}-CnhQ2N0&Qa-{`#48&^>kC6b~QCJdWFa-DV9O>swtC;`1C-@YR1Bvaky zyZpS?Adubud8e$xUh!nlD(@$sJ?e^SkUQzHkOt6rj_nE!!!{g~QMlUL(wcf#ircCS z=Wi`95t}Phwr!lLWklJxyS0+zqrXbyn?Yw5vV7#aG4Ptt`AdB&X)Bgn|b5L zYX&;=flX!UAcn#SUdMOAQ&SK1|JBLE_F!V^i+_Pm6mddZzoIa?3jaz(CDB;L0w;OQ zZM;|#`Ycq`8buBJh1ulJbi4`}rHam3i-WxhmT1-pEW#{5M84OKg#$*{;6z+lbCLrH zyIjTPDV9pn^v&2=4y3b+gS!hAX`W`&lk}8S>g0bH&F1WFxR{cGJP%_mi+Pd}TTV3R>RB-TARPry> zllI2)43FkW)@TZz+pjG!OR*YMzQA5%2{%mn8mr4XCLcmhkdJ+M%bFEi1NBqDRP`nWX+O7r8Xci&+zzg{vn!B4rIt%Qa6 zALmc-JDT^Fv!)B9fKuto&`}5&r=W4D!f(tO4whYG6r1BM+*<*O5W{CLYi);*|6i*4 ze5NYiEu_i_9j%BFh^3)RQDxEWiQ=~WQ3jWGP!j$5wh*MP0m=gW7S;A*>>dz(m}>JQ z=K;Z^D9DqF#E>prB8TVzE~0&E-)x)bf4T9-i;|#C=cjv@`dXTGR-)9Hd9}Wh4|r34 zt>~>jSB#ZMKTO5arqy#73(syvm*VhnK}SZAdqLhAs8bSWadG*lYxtR3 z(7vImSG^euMXax1r5+AsyjsmJ7*GfJ7sQynW3*SiH1RE)+#lICrhMM+uen1?w)fba ziW7`T4MTVeI8YrQIXFc<3#z`WZW$SL+;tMrp02YOja)cQ+ju zjhiXiRbqreu$O*-aL_UJZl)LuFN|N~#?BTPv=_o((sVWLb@FR^ZwVj%K&ryz{{PPG zK22BQ6pxTJC90ptp(#S8`$+^HMOTI}aoP@s0EC^&rH|act(tYfv_+ocEaCGnIt^4x zfE%zY$N&%F8@i8XInryhYLy7sOgsA~@*B#7l~Lgj9HH9XiEtN2n%Y$_oN_Bhi~|$Q zi41%m!&Q{vs+hK@SX&=~Jtd&nw()V6R$L*XLkNyHhvumrRjy{wlMqC9P+e3Y| zhhisv-8&tUn&&feN9x+Q>NI~*Y?fv0mo`pS6L3u!C^948*|6g$09oKm!HW%%$gpc7 z28+M_+JP`qtZBuC$!`yH63yBBbNsUGr}hdA}Soz_Mgc7zT@8HNW`&Y zfXpQ}*UP>i?q61+H%}C`5GvZ#?~J1S|67^1g~A5l=pTR$YayjAd)9LDSpegD9B1|( z=TZH7KoZ-}$_wd9Q)pRf+8bEh4Y^>RNw55Yj(**QO#$VuV^@JJUzRQih&8WGK_^Yq zx8x!G?f|7lD3wekrxa)MrF-n*=7L@F%ICO^@i1TU(#YMFU@-_b}s369jqI0dd^FTYdolO(Z+@7$eAb>2-$a0gic zM#WEZU!uF)EMIuXO1H!)~ve zcP_WZ8H}TLZw0TuV}TQDhG<&E^@a*8Inbu%uV46uF&MaXZ|`s1H1fygXnOoGFVs<^h?v>H!z0|dD|aSy z@1)UfU^Zmdf9fa&-|mNfw#s>g$13M?aAcZ;Zhx2ZR2Wj4 zuaYd<%U=5CWjqIE{&|UZc_ykuqQVhkC=_uhVL1RCD|1jjr<9a$=L9QST?KTWz!E= z2&o3>l*Ds~-hi!o(xbaPRyn{CA1erLE-%=Ve{p~}CeGL~*wRkGiQS~n_1;a6%>&^R zCKH!byL;d;jWviThDZ4jmhcmJ#reO2GcnxS`FI7~h`S~+<=(|r;?=>o=%DsMhlnGA zMe~dzTrGpizU6XD5E|7*Y|ejS@yvQ9{(UQ^;@cZ}=Tc18q+VZrF#P3JL4X32`z1f{ zf7$r@vR{;Yh*Va&&9e%Pn5`!w(aXC2tk7HLTiuU={9qk}4powef`r&nyXsu(CSS?<*&oEKcE6#j%@(DzSaX60-LBf?9UYjT%jCCNohMLwt%N6A)qZc zgggb$mzOAWFSBltSNjfzPLV-jH)DiBt8lpv|LQm3F+%9_D9Okcd{Scl9s@){?6)gALq`CH zplDV1V=Cmn6_HFEzNQh(QebWx9P1yB@LubS1NhPGbUu!Azboe{!SlNzm+cT3*i(yW z<+9>O2}3~!Y8kP|3(Zuy&2 zzIZln(mWsOdqz4dyAY2Lt>xzYMaY`3qH>Y+%LMn(8xV(l8b~zw>SMbO!tYy~NbwYF z+sdEeIU8psK$+;zskIoU;wHKG6+5<7=2rIDsZBHJYKEcpo~HP7&B4Dq<+>X5jHFlu zwIW7fT(G7ZuV9c;)apm-#OR4r`smkzXwX%b)pQvpYwEW>|9Kc0E}lp5+fAR zI;}t%B~+~qFI@+A${=3l1?c%|B!fL|FufA9(!-XX z%)%8teQ)wCl$$1-WbvW&hxk1U(U6sj>zOmhj3!l8Xo%<1hcv+|^$&7%TUZMbO5g-H zFeC1oRQ}-qoU_%>(X#_Fmj2cQJD7`q9lahR_!H8}tAZWpdp9zb1=H{X5wY}!gIk90 zc19^1g#@h?UY$Tj)e4c4B)A~eDqY=E8<(eC$5x>^Y=Jq)z0_H^i6U$cKM@-)mRB3( zVED`BJ0ibE5y11{HW}s=o3U5y%Dne)L71*3z3mQ4_&@JpjOR>mPC36)KEdtB^lx9? z5rHwFJm-c*u;JXO{W_1(zFHQPo>Y>L|8O5Hy2kKlT@fRmChe{L-J25nPg(7k)d+IQ zsymDY->$O~OdNU*Y_6aPKhFVU!R)+3ct(p zFrhgdIus4lDci~EmZ+^z9g8i=2;d4TXExa`qr?-7=TOkIkNLPB3O2`^)-HOe1~T*v zFoCyrw-&E^t0W_83dd>$k5p~g3|xI&xb`GScZZxsIPFOU0Q^q9|HUToMWN|UX;aS3 zDPKkx1edHJ39}~~m>;k_k*ff*8QBJ&JFdbR#t!Q(RylCQ-Qw;g-c*)$QvB2Ef zp}VZEh@O@uhQVw#Sv9l-EK+nS@IDHPurAKDeoeyKfkXHx^L$cr9w^x+I;qsAi^xE# zD7LkT1S}#j5`wIFy_00ANXZ=)0rA{et&QJF(ME}#o#s@=+gyBWR1p%0U@N`THura! zN|bTudI9|bhn#*tX0&DTcvMZ?6t1LxYajTU|7p?r9an)6$Y-paf>_@eQ<6I2QV$)E zatGTLwl2EtQ;Xj#yhY(lEV5li#x-fKegq$|eJYu>2@{XPGL79tFC3=?PEbEA@4E0D zpB)k-9u6?;&2NJ!u;KuEMJ+^9hl}*!s^?OIRxF?YNdTJ#prN z3C$2Nfp8)R$LYqf9B&R9lzLS3(AG{cNJlm_oN7HyMm7*ZUjWm0TwoGq27|v=)O`+l zt)+{(89m+%BM`DJ#Mi2 zcs(Kngm06`6-rzh$XR2iCNp>fk%r18tBDE6y_sB3dN>En?mclYxDw}NT)M5oV`KUd zT?|J-q~8RH;i{d6l#gSO1B0t37>2n1BG7EpocSVr+$x}Kqn3)qg;Jh{bw#$t&=YD6mJQ zn@+-$IaCmd3nJX>pH z9OVTNeN8FB3w7YQ*IW7Mfb-wYEuav##cM+j}HxN)KOv*0kogHN7G5JLAehg^^1xFr%w}%IaqO zK1=22-X_I`vbE{hlbM|7{wfDEq~=%p2SWP3`y=Gf7Xy36S^^?7fViqs-uaUy&sX;; zCnve0&jxi$IaaGK?D6`W1h8rAh9P7pDf`jf=33A&=|K0AD>u2#f_&jZ64@tMLt899 z{OCqrpgT#KFg{L8%r{pSLlfse7!~Vn2tKW*4Yk+Sdn?q@qyp5vl_gpp`|CKhlmKCf z5Bnv=!D<-2D?~P60Y;?AqLbk70Js3gM6XFuY6pIqY@E+JjNPuJefTRgXi`|->l>gU z>RX86KrNX=BQYz%0tUP868QA5D6liPAC;9`?B^|kEfD2}jg9efs7!EEli7ofE#=rp zp42kRk%}2{ic)XiS_C0l+jOsBWQ&H*Qr@Gp)Iga%S2$#1O;DI~sY`a-IH*6^Qm7Iy z4WZj@m!tyOp{xh93NX15g!Jv_bme3SK)7Vo08d?Npj?33VJ%{l`?bx+bL-iD3F9%BAJ%fr4hpQZ(F=DYu<+#{o7A_MTz`ABZ&;6 z0{AsOe#EooTAJ&}TfV^%MEa|2=S%TVoBgjt{ z8vRUuLokuxRceFHRG6Z2ohL9;tAZ`fx*BA>GacAl-c6pMstIjdy!3L%DPxtFbf4yd z&EkyXZ?NlLPSDbPl&B}Ev0yH#A0B1ShiT5=0Fk-a^uDq&t)>Wn=H7Heun?ME>)lH(ss?Ce;o|iOXm1W(a ziV+H)W%f`mV|)V?op#0VmVXY?f{!&D%z-iwCnxt(eqUn|M<=Yn9W zt42yzpb87dDwSK%ETt?+CCfh}rS6xi^sJpP;r$y2!lA<3{l^+4zP)8ZZRyT&Ol}%K1cIUXi#*ckLfUI4f)7OA*)l|4Sj8Aw+9F^ zVXpgsq_cjCL~lIh0D^U%788W&F$!T%gn_3pN+6mBTw%IjF%PqtX+U(0mqo^!b9lEH zjft#)iH0Kb;@s8eDeB=sV63j6{%8;;VD0ivMeL-=-o{hw_Ic7JezuiuCky4ck+itN&M)xB?iwzp&eTR=i_~q|bAKWw{}|wRJx%* zaLqDC`}*21!TO)efoSD^MDAo30#ILD;@V5%6fuChC&Nivg_l!U8fYVO4df~>BhGo_ zsD8PR!veKVA#5q-92|_q@IZtzqv)wJ{@HlJa#Z45Qi!je(NsGtFz(`mX11Vdy%3j1 z1t$1jXhT>IOfZ3{EfdEAlr(1V`^e0>8pq-_RtQCM6wPAZyhG*t9fgrleQD16LsVk~p2$|Wu~LrDA409Q^NiVrFXxU>ORp-p z^fu}ljB9Z_%5>9Qr`wrAOLU@2B=LB#FS7R?2Ycj*^~_oqhd#hcnE(V!-NoqIzcL4* z9HJki1H$7@dgJ|mSa-RHBw%b?pa_^ z3eu@%$$-su|3GG*P)7=hed^16I*xDG{wiI6D`TQ|mGKRTF0hx_n7$>J&&SH4kh9$| z+SvFyJXFnudy)HAXSTqZ?OpVDc}BPmes+7^hplA(bND^;?dSU1G`x-v z8dc4u2T4^JSVm3A{ez>W4{YVBwcowv7HDpsq~Y$k2ca;0cx_g8*Jbz4g;KgNw|-UQ z%T`*r2~s?8DS8HTg`pUSm%yyLFmmlTZFkyL7m?yS>LnVO8?$RZ&Fc@Oi?)7<5CMXy zrIy|J5_kDzweo!RF`@@x(MRan+VyXGkzF84-^MvK19i+dXtJH~n?MDcl#N{Uwu=$Y zfwdb1eh(gTYFEe1@^p)|rE#q|uV^ca8*c7Kb2w`-cifM-RuZIG@F{|~5&RNNb zYQ>lr7REUtam5kpX+nloUve`$N=P9;o2@p(6FG|O4eFwe;SI|T!zh>`wYGy(fQ7%2 zBI@6>;(W80+;ua<8`PBP2-eq#xIL@72Q^qgBL}D*68!KohxJH`HQKC3(oTZ}af^S!{xZRv}b~a=Q`1 zcc`k; zMX}H+nNY2r79}ern;&OjogFdcVsxigY|6IJ`!o+ngA`dPU$0!~Q^e%hFZvRa;pFGH@LX9>x=k-7X`MkjE zeU*^H$BIUiu0E{4qiC- zz%Ma1NeOioU{`nuL{A{ChD;0&12!w7DNZGN55qt-$69wjacLn!noTd-s53Bzz5>f5 z!t%rm2kyms{VQ?h!$H41-YU;$FWHgF&Eb`Jf3o(!VJ0HO*2WhX6`S;~lyUMUUO|Kd z>@lMc`-$4ZYIk$o_C+<|kK_MO&uAB*rDfZ$Oj)5hR?FA*}uE@a|cm95+@y&SbstM7uY8|vz@0T;bo^u`TX?F+z}Pi4t*B;Ej(okMrEPd zXj8agwH2ETVxt4}2Bl0{_xh zzU*JR;zyVDG>tQ^#W1Swo|$8=74ubYueM+ek&6@peJe=;1=5{W+@42B`4{T(ol~lz zo>JSW4@EQ^+Oj|Hg$?ET2gO%8boiFk!PQ!$X9NHdo^QciN{BEfZ4HX-GA?V0rT8={ zX3TxxhLV39XfNM8nWzGDB}NSv?RXsELe-q>O>FUN8&ij&ji)vU6RKJqeX&XG9dFHy zpEVpqAA%a(R`$%L^+GCu^~WvWQ*?_=UCe~O)v)Zj7ryzC7r_*qs1#t|cPMCy^aKSeWQop#(7%XItx<*O{ibtc$;YJ}p~V@P*wrR6(5$eSHQIDQtm zsK6>Bz+jciwRbiV0H`2$HYcMKBb<%SrWBe=`e#Vg-6Qpp2Ed)T&>>kg0DsIiGJz#B zv~~Ul*bT2aacEm+10lR7ujeMoa8HM4PFP`r;EJ8bs781KrXklI=9M(eIuqcO#(Syn z_p_ToxW#5x7zUYkiapV{X_;aJFYL7zp*NU0`_$UVs$!_t}JZ(gU(7Wu@cm;3pNc_4v)+SLP3TIES}Xxg~gVVUv-TusU+fE+a7% zaI>d2K?8Rua6*K9>}kS%fWCubf2$x7ic;GW93yYT5PdP%^i}3`lgt~DXy>%g4bT>0 zK=u#jD+i|txVAGDvY9#0eh};iwZf#{K3jzdm z7hNM~_~B0il2&4Bv0}i96Do)P&rr4+2Tw*_z=59TxyuOE|6oD&B#E6ZG?^tH6wY|| z+m>1Jy|rp=X<(Vy?!{?r(zs$Zrk}(n-J| zAst8)-D(ZswC-xOTR7tzBIqBaZtMX{#LJOi+)6BuAqfmg#oBB>S;=B>QX`?{#|{mM zp@XNQ1ocqS-U#JFP6(5k&!H(?-Fai&q3TaPRLlt2Lu9{5>5sr-*T`(fuOdI;YiMHP zVr9Qzq9ziA2Ml(JAk^LuFMxCiVn`(d2< z@4#N4l5*1dlw9T2C^Hg!O7BzJijQD9mp{P(W7!RR#iXsrsBo$9Txl202*r96oA#y_ zi!e4|mfbUv@Orjv8No85@@eO)$y-?ytu8pMV@aoct*iDo=&(14&=8J+ZV^Itn<=f(DScPb|WA~#q( zN)isGy(rnmI5t_rq67jCLE>+*y#~EXV(v&DY2A@~;*X!P*xfA3-$mNX1w=tr@b=)$ zD$6!reat1BQ8tFeO)tle5-q5hJpAb@Y7yM3jE|zPST#6P?wDo^w;``dAK|B^TNCsY zdO;+N6p4oghJ*go5L@v8qSjIj5(V*+}0D*^dClxhE zL?Y_%qU9}tinKVkt$Qa8Jt3rUyrh5fqYfyc<>f}i{z#knNoK7yhCXeFDJwOb0C#@P zkZ4q^P;VU%v$B02QwD<%o6Wzkw-bw*35HCU`mh5zz}1%wZmiWp7GRpu1hXRE?hQ*w4Nmg>`{INb!N=iMWOUubr{EG2y~YcR>iF}JzL z+7J3?Fa^xLE>AzJLoJ32Fu}i%+AO}?RhXozUBNIn04gfdhE$qnhN`W)wgwD~c0v7z zoCiZxCpx(H=GWIWp9^PAtQqwl<0i06j_k1%yNc4p4p>lVkrYD}Iy3<6A|uj;lw$jvZi5fizTcP z^$N-YI3PBaIp({?Zcv~J9E1VF0e=Wa9;gYlW`A3CT_}OV>%XPtp!Q}SkXpLjA}>`+ z5ZpCk8XX#l`_J!kfheQc&xK~DwBU>|8$QY->y)=pQi1pN$}$W3?Pylx|1e$$(4xb^ z_Iu2}v01}o=<{m<|AfF4;T?4(eSXc*RLJt}giA7;+!~;-d7D$R2pEiTn-P=pV{ZigHT9K6U{p2h)OCDi0R< zrst_57qgW2k+hVmW{Hc8*YK%`2pWM~ryFfeBj)!+mJM}flUEn&m1T!c*9)SG`fopkRiYB#8Wma6R?|iZL$y4Jr6nSnhmHzqR@aCarSJJLKk* zQYfS^EQ{4>VfT7fpY5)YQz{=#0uBNni4oppqzp1aR!2E{fYLeVEac;D!g1B$Q2#Su z3qNP2YGfLxrZB^&Yi@+RMNj3V=v*P0DWxaxMs~?wn~#AI34J>zH%!RSS$yywDUA2% zx2*?hneWUxf(77h0h7HqQdDR)%xL}UK7S&e+vXwLi}qc|dwqJ-@U&tS6E8!(4L^xg z0lLARHUO$58}g-lu;yh!E@ws#aq3{V#*8!PbSp8Thk(={+(H?3lbwQ-ju{J_1C3yC zI$pUNdk@4PDj)d_5b%yNP))Ndt=HKl{A;^TmVHbg%BkO33MYl`|MwQb5w}@40|oF% zbH*~0V~Sj1V!29^{s1*eRci*&r~9j)3L*#*LTyHieim5Yx*2=7vPwS#0*ZQB!tH1^ zRY>}(wga2nfnjWaX!xczPm4H!$(Gb{Fnt{;AY|PxzNR9S0I2U0b}b(#m}ZTkfWlvBi!%VFJ>aPMk3I1BWEA06U8xSnlcC07xNS*csnhIFX%;@L7m~qk z%F74^frmRC4)PJ{z^q5{fBv*~v+uHvaZXvisepnZ8^CJ1M%L|EQV?}q`YoI~rDpWP zEHbT)e3v)_q9ziJu|3)=*UvNQ_u&PFcPxv>*7{TZ7}N`8ccvyeXZDxdg)N!hmbdKs z?P!D4?rmq-LGEDKrnJ?o;ca)$ZE{C$Bno*pt{Fo5srSblMSkuYJ0UMN zZ0@<8@Yldf&y|{#s3_BbMn3nb6zQyEh?N>T$XC)6N)kI1XkF=r7io!)m0+XG<@ALp zi8VtcIS;`Xt%I+Tu7>${P)LcUDSv{42-zPh=14bzYaR&Zb~E}5;)L<=`T3hXr@~<0 zS;7xG0B06bsU3GNMrR6KHg|Uz{}Y!|*)Qjc^qp>n-YLPvG&)IefLS-0uX=`RGBaSu z^*A&wFf~eLyhZ&L14pMv`xhu$?idvSgna8^VUk;F7_DqGzriI#ihQ^vx`#qq`sD(> zpk(F5PHcsL?~ZLm*50{#r<1fyB7Bq)E-(RX(-daK3Rg9r0@sfnSFhioPMkZ4g(0^5 zyaSdY0wjHfHmK_4Ub5_~T)x#2{dfDrrhqEqo&wJE2V|%3ojRC~K`GJ3K(ZWa#JM7d zVcp9)+j{3z)#x_xf9+cEEd}>+bxK-Xyk4QI(5n5mriASZQv&`ZBMY^a7pi~Fuy)mU z;KzqiXJM+ucYC?xSoaI1^$&?o0z+6joBOHjpZ@5rg|VO}*k1NWP6SJbJ)j&?ExTY~ z{iAAQ6=b-&tGYBcXT<C}@+f4cqN9Z#wk`%C_-?NU*axF}oC2$FXQxWSy ze-7P3A|T;mye3kmd~MC<6#BUplJC=H6d@-wpZ3MV=;{NF;YG0MZA_l64yJ{LdrisQ&5mDwnS3RXGv7@ez4lDfmr=na0hNS z%nVFU+0{N|E??BhNZ@%EnEJqwQ-OC73(BGfT!n{KpwSDp>CapEaEJH0`D=S#{Y z2Cp?@349OkC$Lf5LM=iS(Te1^<9T3BH7AU6sI8)9L&?vgX=?~4eH2USWZ&Y3cJl}| zY+~4z)lV_EhYxAqyvp)CjbmZ+8GT_Yi7d1m01g|_&}id!%`Cs8U8_qU2^MKwUG0+> ztsiRZJJ$=@Tx5_YV9|=foc2Uoqn>eMCp)ay?{RdNESRH^oR86`>=o*eGQ(IuI5tw@ ze}QJ~eg7K>>j-X|dUITtX8lC=MUa7*(awivBTMVn`w)mE-)S>?-5Q|GY&R%G8TB*H{33qpv2-c&-?r?z}>EH zktS;UF?T)&O#5#&#$bAbu2zYSJyZGt&Z5xdHPzaqNKK}@QxD+tA#p@Easv;J70j76 z*V|3GLbh!m1 zl%l26^9rAHfRE%CpM$qVO3(a0Dy%&|=D`STUSQhr}vVRvE50d z@5gdmO{Ww)wB~cKwXLM<--{ID%i=~2Du}WLxdWA02*hIsAWFuj#z~sx)1=0wO8e=E zid%JR+lLw_X$}*F|490s0vxo!ver&DP-smNGuH0cSDsv^g(kU%htb){ukBV=K(UQ8 z3wBgy3OTFbo6dBvYJEyTVeK=wcMZst(U{Ct{mx`nA&ms9NcXzDK_J^Yx_;S7tJm8}GBGYzh# z@#Kl|*|JgM0NmF>`w}lZQdQRhHIl$((ONIfnSaNxO0gkq<gR*D9AOmLPZ%I>>qPk>R*>UmqdbjW-z9 zP1<@7awV$0XR(sj^aM#BKfFztj2KfT2GQ9n%6QUbS2BUdJ|qX=d=x_-AC}8HWiL3mUB(u;VU^N|vhL#J z?ixRckB}Ox=xpnIphKqDTs%V>@bJsqB?ty<3)8U@4pU#=us%!Kbt-m&gMUJ`0FwS% zMB1R?HlJv#UGAAsE1?<0S%NcgdUQM_#Z#a8Cv6Jy<6o6-5+wf=_vVcxIw;OQWm6|{ znrS^X9Ib=#q<7>iYb}HK=@ea{#5oM}FXG$Lt*rDwT5pLq_IT3o$NRN+LeePU0Ya8_ z>v?U1cY~IrrCrM$WJ*slShopbc<~n1eZM{%5OsIc{a!|jikdtf9tuf|B)B5x#vC^1 z$f0}H<5swDoak#BH&Fsj?9jI+qIJUSWIRmp;SJ@10GBch9n$Bb0E_V>%ed{4_Iw** z%_@Omn!>7Iul*G_Y0U1-y#FtD&8+(lAoA#akaHyB$e^vzeTx`Q$-b;n!PNKI_fiKE z4!}u>$K8R1KM}aYjbyp=iJs-z-sx3{E<&Vex)I4FcB2%w_Y#ow!CP?p1mI&RqTl1B zw>_YLg1BRrSzwh;lt~NZ(_Tik8Bk`eVeFdy1nPF?pC5p1Ett7`H%N~^cTe{eolkaZ zHO3_ML>aTq@-9s`YUVYF#@95hMQrEj)S6&@{%19*o68T-I%Os|wJK6OXy|P>O`Nbo zj^IO7YVV=T2D`02JE2A35zGdzogM7lzzBqtsQla0n+qKP4Vk`Q1to9~EBM(F4s%m} zZrTKTxyk2KOemR##Nr<;)iiQZJ0?#hl3vMSsm<^7^U=BV0m@Bq$O zlp~KELOSaqFZ{H+h?A00v-!KkSV9RcK9Z~0a4a2K$M<%y*QeO-C5IJc?XQP ztmq5I)(iVj;>I{ie0SKx$lOHhfkbRZhkZTrnC)+#q~j(#__HyE%3ZKjH@3>f9dx;E zjgS8tO<%R_ce<^t_93v4E(G(CN0^Xk0);oVPs***abZ=CSPWbBf8kz%1hhUsA$vEL9Nm)HBof!CVA*~B7XR= z+b*k#yIPcroVzsM3R9N^$%QS$(^U9W`tdhF6)|8N&DE3QRmNe*%eXU zJe#9oso=u1pDvt5U>?s3BxPZpdzYnb4iqhO6D9{Jm@ub)!DyO7g8bg;8UAC-wD~@o zfMAhA2bZbjq)%I(nCa_h&+Da!5kcG}(pGQorv`_6u4O7vy$sA7x%l_zehzds)k+Y(hD2lHdr?_vC-43_aeU$=F{$IAZ+#&?ps^+lr8FestzNfJ1kL zNA+$46XzoZYdkh?2&T}>u6BCc4NGF0GDo)XTonzU$Idg;XWtdL3!}2+NW4NBx2_g@ zc=}+IqBJ^%0+VeyIy7+`%6pK7m_tq$6gw7tyJTGxa_FTtPHSOTSWX;Z#SoNPbqc-v zC;QNCdSj~R=?U(-M7ipGr?HYi~H z$43oi-H}Us3B?Fe%hnt!Qh>B`yP6+~1Ygs|pMFW(h;$nb1ZZ`fEF^wHm#IgX&^^>D zzzs`I{V$}q2jdrsSMya@w2%PsecxV6NBBp{u6;AgJhcQWUqyAQk!UFM2@%KM@0u=03N3OhGxveq;7*all;Oq;YlXkrC~z2Mm5{= zPU*g6RMu;FKn~*vJuSZsAwiiwxxG+YI4aEe`P-#WjMiUVIdF?j1dU#~8+$Ze8#kS- z>lY`$>#ivP&~Tp(phifzUyaTE{r7%&8X-UdfabjB7yCwzshPEPk;O^?$S(U+h~{1T z{++o!ma5ZAp}y`)D0o!P^RP01{kn$fm+Nli_HpHpBzr`WwPK6)tRPfU1#OBB;4|G^{{(KC-uBS{K{o4mhd=i+kEqK`5o zz#o1+g_6U^rgBd(a!EU-?JD5d0P1rrno4||d1XP` zGvYBk_A6tf`3e#SVF+72ydq0CPaSBD|1sH4J;FSt_YoBRv>X8c7iz5V`VuSpJYr6D zdLw{-dAb;GQomPKQ#$f0{7`QIZo7Z82X8ypl=VAB3`1XeGIjnH=mzD6!s#osFm;-f zIXE<(pLuLIdk5inzf!O>oH4u3;$tDCgezyiojH3^I9qTL(fQfbNjdjRqbH|bMlZ{| z*ca!6`_r;U^-<1{VTdK%R0A)N_j{zcXz?+mmD5wcH6zMw-DRg|ik!c)k3Xwb zK`sYpDo`Kj1+`jGqW@O@^4Q975{ulD_8>G8|LXgFc|L)pCpaA3{4;Ckn$O0oF`Wo3 zdjkq#6in&$fOUYQAK!!sgJb8&G7WJ#oTs5Das$u9wG$3toWbijQg)VqXe2R;!#}E!hv!zi zsg_jpFOM_&0u#q%b@#BVm#AXuWV(bE(;%~AvBX5tn*Sp@q(XYy3ZupYAj)ypl3sy% zQtv{bhs#krKquchOYv+B+V8!J`53duZX3T!;t`o8v0?dco_;#8GD-nY?_6|B-(+IC0Dwil?3uw#fUS%&{Nej1E{Schn@J?mbfU6pe zegciP^AI+JqvThRoXmsW@J9b}sSo^#6n_B8dX}9hC_piTz^8<$L$wv$%~y_?&aME| zEe=4YzpYuPh?l%_`T>d@zx#Aw${-M}4EBEGZI&E_2v`F0qj6kGrv$^BvBK_0W<3#= z71HZH-4jHEA<}H3KlkK{`m8$@>yyBHAVZicQUYIoA1A(#(;%EAO)_#wh_b8V zIE!n^HcWa1+nvMpwRGMJ7*UyWb^b~L^!=z9KJ!j$%!(`sNdu^4JJ(Xqa}EdUC=1#{ zW5fn*{^H+9b!;;RzCNlD1ToK%uKZ;2)h&)KK1#=f-CeAvDEuh~{$(Zgf)# zHoBlV@6?Iu9{vHIJSM@bHoZY#@4Kj}^B`+HK+NFkw9%H6G}B3&*+isV;! z7eh|h0)-RF+{}F$I8!V0wZAU+^Kke`#S3e?aTF*YM!Hl|gw>N~Dzv6F3jK+;#Io$7 z>6$}xN}44>K~lY0TW%L#b|P9`9!AcB2y2(3^^tTc%U=jb%pYo$JTtpxVn_rR0TJ87 z%7VS*Okq>C$Pd4pOHSpq6=yu!6PwNg?#~=(2jrA$~=5?ux+3o2b_SubQe;x8r1iK6XJ@A zN>O{j$tE9K-E;ECsIC;j)i!;({v{afwN_x@}uw9||_<)iV3b#o8 z^JQdY$h|e+D7hj%PCjdc?g#Lc#flumHl;&)^!jA03b#)Ezb_0V42tIji)AJP9oNC%5E!$oeR zsO;Mi#@Y6FwBhVXV$EzIzI8L%_san>gv=sx~=IAW{4EH2ycc7z(W&=J%qXj$KuLT=ZL0XACaOpxE)$=l#R^ zuKnfbeA&u*`gTDnGNL;N8adq6pYV$XzD~g-4QLr*6xWxI9~E8P!~U@^->|Lwh!nLD zAnDPox>uzJ)8|v(=K2|mk$Pno$<$Zh;||&hIqk&(wbpbfiy?FnaQk~O2zRkixl5QRV%oeaDh`6*<&ugqMQ9ru#ql*(q2vAq_(^p768zqL)f@+Qcr>s zyB9=}4;RAw@BGbs>8y04iAQ4u{VJYy4oN50sh@0t7lSQ%RQb{!O0v})Wc*A=*6(GYfvAV_ADTGrLl|}v`2}r2mEZgSc!Hw{%o!HG7IVB zjlWe*$p<{bd1+ZLAlTeS)`Byb3-Wa64JiuqyChlrU`~5)@&~fxO~h!`*{k_ByI|#T z;82j$R;4Z?`iEC(+}7-m6}eb5X*W>pa&g)mwl{dg0Bc-P%`8Yj*)@}M<4p5pneI-e z?5dR5JVI859)J0ronYw6*?e%E;iU}t!zd#V%~IXRgO{PkwqQ;Yxra@@i~uxMAe#Vm z!$3ttIaq1=9g1>OeGRZSx7U0UJq{zmzJ-oOHGPFzY~*=PHSw#(;{-^&Je}H{Ku&4t z-p-m8w5R44cxxoO>AqsmC5a%-xUU3X(-$4VK2m3~+H|%eGiWjA6xrH`=x@Q(>azVNDc_C=c^CvQ=qNs|a zNWUy|M==wOxLXZI(yaMHX>JxN^g{WZn`&y1xdT`%D@3fEENVi$gvlPQnMxV)F%?$i zGvvqtof(94^_ks61KafRx$Q3HP?JtQvTCi4|Js3HXXdZv28H}iAUikR39e_!v~G(| z&T;r~7+?s_TIK_LeIorO#+bZbPu_*W*Pj?e}UjA+HIV-j`ANizv?-8%O<=G~rb45NKFq5U#v=X;t(z zPB0>KtgIh66h8Ps?Ld3Kt6;g*9X8IVt{#d5`pt#Es`So5u)_v!ez7Fisw9CEk57#5 z%?EcA^DY|p3P^g1!d7l5XSb?@Hk|-)HtDN~36P)h%4-+Elaa}-TCW$nF1l@$1j};L zq~xIY%J}|`&LC@e(=!oY;6w7z$p@53IJotngD+LkOJc57vS_LE5FfL=6<6YCjxPf~ zM-KWQ@5mP>lxZ4Tgs5|@g(*rve>+-Ys&Dvz1^$pXB-az=y5vSL4wG{`H@lFll8&qi zS|OK~h`v{D7dH6Z8I(gnf`jL-0~UUL|8$Jm@@HvnYTI`&shI{9NNpPz6v2`IMvp7T z*VJJjgS+Fo)YFUGsydI9eFvBcJ5!hp*qh6URX%z}1A*rK4K$%=i3(0ATEF@#ioGO? z{BML0iBNGZ>TMiWgC&`+a9lwzI{P`4H(f_Pzn=oTbMo#T}C*rnTP|yMeaw90b%0 za}SlO;kbol3UFe0=n(@}I7M6}us|Vbag72bgb!~XEZn~AK9ep`GdKhv=QUDxAnG5B zW0zMTrMSwtsELHyd;d7INqBnBX&7sGx5>pGP00t&LI$5T9h9M7{w~*w^FlCLQ0dx$ zft+YM$Z~;Cv)SldXISgQ>MbT`Ml)P8ee)qXKVuVG@-Y-nd5ZYw%te?-BV}H!AGnQ} z_CF$<-Dkbkp){I)SSjWApNABLt)@gkK@R2Zr|Ky!WV%2mTKYU;X$DEaz;$Cpdof!=e? z;dMJa71eXGZm@zooyYFc7a?Q#9(;VqhSMtZ{}N;wy9?yn&1-i?O|&FR6pJ7&hu>18 zTl@t9P+}kxEAwZ%VeHfX(>xH;dsR*XpNQF4)ZVD@AWMg%k0vs~g4x3LBtKVpVDeC)CZZntyhV*9B(P(d4L)F2kCXeqTrByELn*+U{ z2noh)nb>fwYrqbqq=qhA7 zopL5$I9OL&HuVaeo?Rl5$FTg;=I0I1T8lff!fgg6+2w@*`}=%GrXJfcNAk+wHhKHK zJ8n{ZO>T^(y7Vjy*yhY+t7I3=^w(UH2|7e=xL^B0{3Njw{c2rghwVSi^{>u=N}^&l zVY6h~fS~DsxQWzlG~EYta2ZTxS-fj<>Z!$y@V3iYMzL3|6%!LIKe(_6GxaP`6W6o` z>z**gXgB1X=Ke33#}u2wxz4|t#WC!wl0Y0NJ0ivR@*7PdQUh6{6PUiMAgSH)e~R zl4V~FwOY^6%=wMa=*c+Vr2ekwu*LHbc;SX~TD5fwcLUQS_F7sjlo;$_AJNo%YIVl2 zMp8v9D`m`hdB=_jWtIg%cN!8&!%eRI6OUht2W5Y_Y;2uJ6?Ovqa7#sTVpk%~(QHOH z43mS$Cw-x5LiE447Xz=&5c{BQ_cY0bJRi(dqG7a(;F!3hcP*$3R40jgXy-%i?il1T zoDU)$6^;{qq!^LM(lvdumvwn%5fr040GoSpv=KaL+kdpuz!a2GUydWf|1V_WXB>bS z^%5PbCY^)ZwLcSp52l(Ac*`=Rz|wsu@jid2@K#ZBAS#mPjz`O6x$dEPsKzB@tOqKx zv-0rs&!=^%CL;LMSun$&@t#qmN zRvH0l7Wj3cHhvGsv_a}gShGT=1dQ?vwPoAw{#39bvAb_H@M*SH>|38+S$J#kT_M zr%6l~Qm6gn8e`D*r;`UD#%zY>g&HD|8KuTZn&5H8NGj!(I>(WPKJUs^gG&hFi>w&u z80ke@EW7d*K1!rkA|gz&p*?)Hk7ojQXUcsWPA}~S_OBhN-8swmk3$<(1JKc?jNtl9 zZ7uF}e!XT^1>K^gZ6cYb_(-AodiHlx8-Yuvd)5V~gjG&_j`jBFdSMTVtVQ$`V6bfU5lD?zuyu;-#yG>T-D6C^&>0lQ_#Z6u}i! zn~X2JfcMqV1U7kV^O979s5gwVqO{}`4pS8a|A@Q2xF!%+f9qTz7fTrZ$8SpSMZpJ zi={{ig%hat0X^Lfad%{AC8aPz$D|2xxvhEyeu|c$ugi#Dmy;(ys6<_N#M);tjhl{ASkyd9~~OQk!Pjt98=Cv&u@Z zY&BE^ZIRAUL~RudA_V!Pxup!)xG_Hom*8i5MW41vLx*vMZzvl!7upCIPN^!&$Txec zDW=M^K4{tig3pm1MufM>n7IE;6_qn>j}~B_VlpE$1y6jmbwY80*pxsrmiWFUnaDad zh6;z_LW{pfl+v7w$G}^OEATxE3tK6$RiFh*q87z2Gk4gc26FU|RGgP0y-z_ezOczM zBYRWZWtGAcF%%60K;O;kw2o-FBMpELQmd`_&|P$o5^lBb1D|R`o9Gm34XSaxG7b!; zB57dJ%>A!ymE*xAj@%7%F*A((zMZHcBDyRf@*NJ;*XdCyV()e^oKu|^wA=&}Gkurx zM58f=`Z%P@XXV^OaD& zahB=fYJbJn}(IO55vgnmpfegv@_ z8dL&WlU7mUFMTgx9;>O?*{$-@7$L_l*LZh-W4)@&VB-~?hq%dx@?`5;xLMfD-zQuD z&Y=%erT9SZhLl;~_~nc@Zt`MsYg{%|Jj6}apc2e*&G-5e;el%A;1(szld>{xhveg* zG;8MqGGW6@du$7ew#kMW4>pXR#yW`U*rp)s`cA5YnYDdjh%lEPkP@Msc!?kwxqN~S z0}oqvI-}{==x(;Jr+7CC@q-Hr^49|Xt%N{Z@?&(^Y7IYzZd5g5?x*sluO~ODX@U89Z{3QhL6~+U$8%lI)l_nvkRd|I6T|C+%kVYq$fM250h08d^58e$&Q8GYd%EjwaEB0@UK4ii#Bn;mRSLXV>XuTYfAyC3d#O@G|K zqF@j=Uj?k&PIc@$i9U50x#`{<$)d#wY#3WzUxW4|N&=IS0c-*nZl|uS?!qS%Aorax zgAFZv*7GlCJWIaeY@*A(|Y z>5JCORF$^3DNiIvE4A~$W|$cMwY}2^+PSUQ%Zj^C(nn#%^H)?)@MPzR>yB;ded&+8 z_R505FDuNP-AGUk1cR7Z_$OKPP`hGuz{SpIGPKgxDAxWP33z;fRt{XXB(o$Ba3J`t zqY?}qCG%NMZZgBemM7uVJ%U`oF4B@X1@2ERr`CBH`?k|f8(q=rXOv@74KQ=yHMO&N z?Kbn(*cpp=)^XrCmEMC4moCf^44uZI6jrY`7 zZ$jLRAKTPujn5(!ufzml#@sG?aK{V0$__=v(OA;!^thCHS#&Q+K%RXzC*5#+{Es#b zsoC&gx9l{ngW$scoTGK~*y-BbracWv9YCsIHFKYBJg(-2wKqnGQ z?^Ty5n&Mnwjgz-`!a38r&-UKi>;K9W{aM~2;c8TlA2ES_07NoI1!7k6k5x=?iU5TH z{_+K5NqVr<-6D;HX>{w_Vu~|Zr77s^Xt`!xI}`=AuE3DgY#qeUfcy=crIl0&Sd=25 z_Wq!e^rZZd0P|N}_-{&oiV%nAZ0@w_g@$#laU^eN%7|QHiRIO!%wx3!bDr-S90h$R z8;lDIF?Z0h)W)TTn%~W@T^TEybiCcE`geyqt+}vP$kg=W)vk?X)mBD)LE3}!KCUG= z)~eda-}CaaZY(SKM+r!{i*zxhQfSect{|HE>Ta)w9aop7{CSH;jTebWmR&okA z)RT)w6Nu523ObzJ2#KuiXV)C!ET6$HWj*dif;}Pv&%5tILf#iBPThYNHQDZ)UJBZ` z67R=|k2Viik38w0aR2B?7{)vdH=g2{_39)uEd zONzZU*(Xpq^~7V*4kigh@T~4b_9c23;VVXPQT(5My+L@}xca>%ugs$}9fZ*9T+JuK z2CYV_fm$YBu-_Z=X%=YtG>OJa4Qwq25TxRHDK0Au5F;<)C3v0i_E7#wNRUF*7@LR^ zZ7o$l+AWYE6nOnC0h3r%1C7b|{TrqF(%8<#ZI~^G*R#s^{CVyN`&GJwNvD1BbFqY* z6{m%pXi)lgF&|{=MvTc?XY}Nb#uw=GiNt5j_!RCiVvGWON6ENT$0^tJLVtw2zq<1w z%~VJ?y@g2GZ}(l?GlTUu>HSS#w$V?Wapre?H>kJ9N+FkHt!lu>m|w48E>!!Tb;Bie^A{uD@un$=1C)YqZs?xV zRi=c=MtDqTw)- zNh_9Lg6}3{GwxO3pazcZZHlq5tP`qh*p5K&qww+#XEyWS0;YPg?c|Hf z3n{DMYqXO5;INi3H^zgf(}shBwqdmqg+l@a96%}1w`AIju}D9>@XtqCb+F`rkvsj` z;RmGh;ZPIE$=JIOJ6@=Nmw23B0sJiHP`fsV5U9mLEn0ti=-Ip$D;Vl~vWH1dNT@+G zhrv&17{F^7&kBvt1sgK!=#g%@btKMU5~w-7dBO=sNE^K9unO&p5788;n)u%MIbG*Y z4~Iw3S@l~Ry}jjo+olz%B`Y@7&qt-d-riHs9<+dR9hLIli?U#lsQsl=7#Rbwpn_Fp zF@M_>PdG{ad_^jybazZ1TvUKb4Q%*{=G|YI4XHZ96N+Vm+1_ud$SFn0ANJnbOTjm# zH~yK7*#0i;6^iG#4itgVOJSi+-@8Tt1=G(H7OoJiW{ACAk^&E`-tZ}})uWG>?u-c$ zR@<`Kqu~6h!8tq9^1l%=G7#814s+|kDKzO~6eBwURGuGOc3nlZo`8)p(hVqRRiI7H z2c#Y(59c$kI_T}2lT^?Jkakh8e(!ukHwgq|Rs_O_sXT^?tl|cw!l$^jX2@_{r;Aiy z%-NgU*YF8;d$r0JsMy1vydH;O`9m3OvN9?k*x?Igl092^UZyz?4~2}#deqRVS2Y{a zA7HLwFGy_$=%>5HA89ssi`?*e!}TP%X3!d4?Hbalg%Hot=XEbGBodlPby~j%Iirf^ za%MD$s|C3|h0%KD6+vNP*xabG9P2BrWU>rg7{=axkl%B(zPYIcH(u2MoM8?Vi?&wc z#x2C*{ttH<%X0y>^950T&uVvS?UYE?w_WvW82T70zpe$yO%oDZh9=!{fwTYZG3z90 zUIKmK@gga9Ft!w}oA2xn&f#OfbYEc-idJn&=u*HM0w!j^DsFy<=6>QT(Vb2#paCj3@=mKnqKQ=E)NE@pj82#jEZ)n=FJ7S z%9U8|HAVhO=}Be__gNrTmYKD7P(>M}0Kk675wxLo;wZzLjf_0MQohixE{nb*98s;Y z@n@PurwHbN4Ty8K`YuB4U(!y$J4Vo96ll*VN+sUQs`;le3|^+0Oerjn3%Z)N?KikU zPMKqlsojhub7?Wa3zP?y?PVvOJjhXfazP*t=%_90y|Tw&aANWFQ%LQbinCJqqtloX zJcDGHzu>f~Q-Zo_+gc^=i2385hs%cpuz&hd&`B38Lo&BZYioLEVih6gG(n+f^39F8 z6{!Ne&lS&WXrf$q5Up1gU6nWr+`d^Rs4aTgd{RTeTdHSD;Zx@YY{_R4JJDtvi^`Lk zPm8^mFyL2ws@erAPD1w_cIr9GC@}Haz&Bh+%s?|yBJd9|#%b>5?@UyV$8KdrWY0g5 z0Xp#iAoOZ8NhNEGOZ;ny#2wrMakC|1atKBX)}0a!7ANX|xRO-s+=k4ou~hrY{4$)J zu4D0bh$+-Ysofx}QT1J(m)%?C?{t2CfR5r z)nyzbnib9UOa=o%?qg?os7(>y6gP%uS`w&KiP*V`fA|w&V?L)vc#aCG{$e~s_DQOd zd(yX>kDjBu=ZQjgExqp;f>vora=APbMcqdPy8CE~i1vg`Sgsdx8Oe*77QUWLE>qtq z+@Iq;yU3zy>y5hI|@k85hJOV-TB`U00Mn^LI4A<+o{2l!K3>bMmEJ=dYlV0LER++dqEyp z++(C1-nFsP-op0XvC7pO^fE$rl(w$^}t}bR!*5&pNv8YLo}SOM8H0A>wod z^SLQLk%L9h;V7Q|0y|1&L|F=64GM%ETqL>?Z0o{837l7bmh9XLFfg-f!9f(qRMQk3 zDukpcwm11LYDYxhtPE71GSYscw|i_`2_1< z8|8F+VBd=fzH8$7x6L73Mg&Z9M?OE4&vaLI2l5ob#cVf(|D*FTWbrK`;ynNK2tgBT zjc*^e7hB&TL@(D5x{Oz$3H~*4aC4j!`}!8;Hz~qXd#{ zNNY9wV`*AAvh|qApES+)Ky;+bWDGg-3bKS6%L;pmOcsBNYGN!W@L2T_V+-w%?XYy(|FAVO0{!&s zOM>M)v!CKK+$P^+UF&(LCMZYF>h*wK^b4c8OhO8i$XQP(cq30d#6er8d35bk7hWd9 zf6F@Dk4Yn$a>G=pgy;$xDEU;*xM|0~3_!~;xp06~0uBoDQeuvZ4YiW2JqrM)R=BL@ zV$CZ(-By#|V>IG#b_fhzA%|t-vCSvYO-c(q68$@GTjI+xR6dDOYb0Pb>_|7+fW{7o z``-BHLL5KG6fRmpOj3Z-9V{dDMrAWU@S_W}kSbve zke{&cTw-1wnMrP^_Qhps_Njjk$HF}$w_)2_k2HV^L~ zOqBGtI6UQ%P#R{pA~|Pt7+VO~{L?pF_GG>x84O+RB9(2T9> z1&%E|uf7av^^T1p)t2t}zutGUyftpshK8k5x@v_h!oS|_B?dk82S}xV!D~?yyGjK? zs?&SSgQh&fc6V`@_Nqf1`!k&!dn{IkA4_wxqt))}(Gx(#E&x=42CP?bLbp)PEFuDK zHuG(K4nLk!H$7nNHmYP`1h+{>RMVI-&|Lt!4p_G{BNvA7&dPXi@H>fHTJ%PgjcOl? zTa9=pf8syO2f!qF4Vw8O(Tv{;5~Ycwo}*{JxFmSNVizPoa?jn7T(2jG#(5a55DOoP zCzC3OS4nPcg;a?)TF-K2A<$=g!qTIADrr-p^#AUU_-yu0*M|lwO(h#f^MWI1fU-dx z?HaDM?e!cAye<>w@O8;pnGC`M+{~?5Q_|-&t?9tm5JAh#o}G9VBC4&WW=XAtJcTw+ zh4f%_7|DJt3CaZc5l(t5mge-A;>&O2VhKD&N};fkJS z1uz~J2e@^!5-TP(?`W-_6BfK=Oe+gw3KTKV4WMqT9H@w8KIN$}N7hbwkv#HpGiP)| z{$#J^w6uo{z8H8xj=UrI`RD)X5S&;ns@pe`z{)fUL!w$zA9xJD{$1x29R1gu4dyl{ zUeNzvy(#f`7!#Du@fxQx!h7xHAgUfjSJa>1QW^S}2QT#x(y&id5gWbs4BF~*A(z;a zx}fvzCET~}evRl-s?E<`ptD>O8mu#hL@)jpy-~#WTK}tRPvk~JicHJ9%Jb+kPX1xN zE8?&@kxLS{6jONG<_d~RwUDeGj{F2WjQ^mf*xIMz+9NnIe%iMcA-69PgJjl1rr!b3 zm8i-GSZQ>&h@0hMOP4|vyPJG;nD`Q{1u`EL0k0%Xoom0UsbEgr;X6X}2(JpW@X~8| zlxI7qrlosXaLu-yz{FN=rP6dq+cbzYNdr!{M0WqRBQh5*F4TAJR!QlLFL`bR=Gp4~ zoE361c8lte!9|S^u60NZ_K7mpRvZb-v33f}2w?)j9US3(Rc*f6R@C|IiXK?P3H=YD zvi((UyeOtm1#NC^4*W#ISH1mtDI#HHwrn!vTu8Z|J|ViwrJ(kTAh2=hVY=h0DjeC| zRY-hP{s{0bpkGw$FfBvkc(2 zceN}EraK3L#C=l+sBcw*Rixx}#a{Aab&CHC`vR~iiGdDrz zlhtU7FqE5^yi+04j(hSay3)0#bjOgAk+~QEFR0cgKM(w1bc(e8HCzD5;jI8u%gcuC zmDF6}&k6ULR*rL?g}uqAs=gb%fO&kNC6oXe*;pTGj~(Kf-6;NC;AvS!!;10RyZTdO z32*L~14@`WR*JAgVnk=YdX!$oTZsnhk|yve2h}qhX^xdRGn(sUiOZ+mzBasrX$76;T{w0$OFp!?>Z68W+es zqLvF_YvPWPP2w`FnpF;*fA8vVec}M5?qh%&oa@f1OVN!e2L2rvdhuTL5WmAUwS@W7 z#$Ge%pYn8>li;O&CxHP~f=Bx!I>d|2>NrKSzw!&I;)3#S^xfjm0Vufy&?g+Jdc}eL zP1}nNZ9>Dk{|P^qBIILfDJLGn{G*im;rY6jiUwbBq$Dm^Iy70evJ#|d(aWt8ln~s~ zc~*1lD55o+KK$6tP}jLa1+ihMb6V)dT- z$X7ivljoXtwUN(~Fk|~$FS0Q>EZ@b0a2^Xo`QC7Tur`XgNJm}kM1kze=WrP*!J+Ij zIvhwb6eY!TcO}g%Pv{ zu30z?$GGEy8!0I)4S^o_c5na6eiJi;r}G0uUg*vYrpw?3>?R+VqlD)=oNoGh=1%j# z`Dd|q`Zkv~)G`N+xgio%5Cvu2U^dtXc5>yPIJ?H%YtIlXi$96DB53#uTGGS|m*@tP z=4|(+c?)nsT#)hapgrwFA}voC^TYUGyM-b?*3(wkS$K>BLG>Qo?8t)clX~b8*wB}B z{EfBu8T#0^-? z#4S{dj_x%H294NP))t!zKkarFN74K9s>rZJxr-O)0kTE!0|njzbHKxN1pLrv>c{yYBxu-_WQTvcnEWMtow)RI`f*&CC8Qzt$gBTE{igM^ViDp9LZOj zMjMwQZd(I79-QeQ0a+|}rT}}@!H#3}-a@~TxZ^1r#0Y)Lvv21ECfssioxdnkTg@sw zgfIc!mS}I2iF{(;<9{E}qS@`L)4^>Ta(sEup)4U!!dg#3Vrvju7&I$h6RX6rGo1~)2AM?vujuWqvDp9AUHV)IfUd{3UaK7oGie!$ zz>AJXr9>>L4_zsGxPqr*Bs>5Eud+AAGZQ6CPqa;Lv#T@>6?ncs6Fw~;HxSlQ(T}C6 z8ut+N-z+|w{8ZqWo{!2w$rcEM{E zYam_kd-C^m-ZfOrHp0Pj-y>Kv+pboE={YLOYS+oeM=>e>VjRMSy==1^=cUk~2cT16%(6Y6R+uaCWvT zkdb$$l4!8*ltM2Kr;|PjGDkI@a-FJcN-d^TQw57EN&!$N%+XJ32MRdH)w?DOY~s8? zCnFtWEted|e5IwM;9a8D@wOa_pfQMxFDWL5j_-HWCj`P2h(MtF4GkBI4o~;vO}_Iw%xkR7iptJI+242@>!2{QD@g^egHH|q@ms#2_D>srYis~mq}oQ zn<-4zAKCnOjo;G=OUpuW2Vsrm;9xaDaIau@kEQo_>d0)1v3PG?Nn-WL3|dwyiD4vs ztohr-Y}t2UU?oLN;_pa zGt-MIO+!b6t&5-aa<#{ZntXslh}96r7q<@Xb?@|d>-IA9;p?z7=5#HG5xA*@+%VYJ z7{dFr7i>|X>)#X>6vMt`|88mraM@Oz0hMrWQNSSdXs4#2^6914Ekk(Nt_yAtqdQFD zzNKTuhWgkKdNxaze3jrfzItI9`&NVOWE9zqt60P3ca@MZg5`@E_0bNsJtau#Hz_yg zPiIygd!-{Nz`Y=Yl2_a|pl8M;^5Q*gkYj}HT7>oRxSg{*wuL-YL&Y;*dte1;-!riP z@#nGVp~%xe6b9jh-b;uoAY#}Sq`>^zFd?wd;O#OLTJOvX?BT`=cbpUKjL>KWsF)Js zM2ti47{$?H{Iiu>MkfgJVR!x@#!;bs@h`0p*-I4q$t)ja&i*%3Y4EWgX zKjXLs-K&B{@O|P6Rpo)>e8tXQrA(T8@?uSMro}MHluLylOq78R-_})4XNE8t0kTkA zy}PR@m^*$s;-t2L_-DyccJsPuC1meUg1um`#uIp?RMf!l26OMGyDxXv52fHk-;oUt zvuk$3;E63CERiPC8wZJ?Zdg!}$+_8JW43}W#eQk_vP$@T!b%-si_rYZ_&65y=2a>m zBa05c&`{;FvqeD=1OumH3iJBomTriT4v>5z%PLh%68(4_Ys%U%lcDj$4|3AA20I%*32 zj((4+9K|zL_JSsfZzGII$BRqtk=LrOxe%|pV&ar5?&A1%G=OqBVO)qJ>Q^8q>=yHK zGUp;d9)CJQ=z>C;nh;{ITC796S&1$Yyv~{EDW0FzrC|~5>3;)n-lSr1)8RC(e? z9_A*7_GgcHxEr7V!?>NYr~jh_vJ-1pwzK(oig_v3)m-u76B{``{@vII-AmQWq>YM< z3bZ#XP>I_tB#izfJTHJvUGwj?bxCDjW+~8HzF^SkY!=;~jJ;}AwiO@F8{k8v(Cx|W zZ1-jJS^C)!zx?lX)o+U&b;|SB#MK^^Ryx~~_382pvveS7|1KKkjv->*;F~Po8tj?m zFQ&V6@bQ@KasZvmRdGLboy*(B__Z^G(OikB2~yN<2z}fGZHKY4-O=N~QlfIH;!6dH z$g2iLcCz<5r@7h=EH?`Nm&qvNw?$cisyw{4uK2!(X>Rw6v)w5M=uTQ*ob0|i0Oo+opO z!<)mj`R7|woeO_VA_|983fNJFOd^$PQ2LR&yf|&Hw^X$NZlINLj(B!PHd2H6C?Iu9| zr<{STt*b~j5g$^4_w${I*dB8BW|HpX&Bk8UarHXMRY9E?}2P4$1+ zw*fg0zJb2xonC$)`uh%r?|K_AS}G*~6_|FK-XekIs zLp0E=o7)tAo~{L&9rZO^SmMta@KFa+ajrcRtekF7Ci=OmP`|h2Ay31WRZdMOhIyL^ z>-Et!mra*CG^9Q;&&`6BoZ!QbIJI0WpA_yJ2|=P;q7kPA*mo$&~R>to&mqf znM%YBhfWRKKH0wQ9s0D?q$acw8yJ6#!DHEgPn?(Nyzo~Tx~Btyw)4c97iMALyFU0O z(fS1^n)c=eDE+yW3Ox*-Hn-r`z4&4|V{3p?RQ&|S^8BD$1Q&XG$N=po(h=c(&FU?EMF(Cs^ zvAzidY zEf*w^*nl8Cm7KAdCcV9sY}gQU9U=K<@!T0a)2cugN!>v|xD?fwKYBK|*&!)3*a#^+ zVFo~%$^pMSQriqE)<<3O5L2NmhVK97UJU6USK+boV-|pT-;LMm-a0rq{#O)|vA z)UJyp80zMe>*psw1L3leGGJ-J{``{@;*lU=Ejt?SIjEm@ahzYh=2+()z$3~bS&i0Ibk>p$ z4KP74&G|Fp-<5>+H0&#gk*PW|&reX|c>XgMr@?^iVeD+|0O{nL7^4;~R;HPsaX>4x zhe5ND29?_x_}Giz2VU6g_#i7);87$sk_mAz4S{^gEvF~whMMBdfr#iJFQb?L81_^0UZM3{kVS9fz3=} z5K1*H!e!)mEYe&SL6)g=s5tqf7v1qYb!SdeV`nfq$ZH;K;j||L&Fq(P){yr1hgfBk z>QEs@^8w3*|5dkKv^ME|LKw)P0L9mkr{W;3tSZPE*HC!$RK|OTLFR5)Yb@LU$Y|qm zF!JgEu~xBVEmlTE_q zJRv8(wDEcvxZ~<8bGIyvL@Btk{?a5JZ+@TG(MTzB18>=qno(rrW&@a%e3O<22{6{E z-~e*yx&_L$_G%uqI;WJAItlBFPZ_!Hs|q)!nN&;&XZ%OOUlK&1&m(J$B2p#J-+5wB z;s?+hbDX(EA@%NjNhZ;$TZ*z`V8Q|>FIhAOJ$0P3fAQ>(u04yQTg4JeJ<$#OY(g3+ zko-F*+^ziqChV&pee$?qZ+1ZdFQ|#4Cdp~h zQsIf$d`tz;m?5u1651#i6yYZpLS3>#gpM9mKLv>;hGSVcD7=&y2MP72vNfRG2Tb@Q z0eii!8qtC-sw`Su{5XL@AppC%&`{*%*o3=_lH#?5u&<3|dkMHZQK6p2ZbN;5D6s12 zkitTta>4Dsx0zo{jAdxh>>&VI_&Z{>;E>(<*n|\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=::/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 interfaces=wlan1,wlan2 \ + lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=1.0.0.1,8.8.8.8 use-doh-server=\ + https://security.cloudflare-dns.com/dns-query +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" name=dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat dst-port=22 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=22 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260506/20260506050002-Diff-Config.rsc b/MikroMaster/history/20260506/20260506050002-Diff-Config.rsc new file mode 100644 index 0000000..38c8906 --- /dev/null +++ b/MikroMaster/history/20260506/20260506050002-Diff-Config.rsc @@ -0,0 +1,7 @@ +4438,4439c4438,4440 +< dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ +< new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +--- +> disabled=yes dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina \ +> log-prefix=VPN-all new-routing-mark=To-VPN src-address=10.30.30.0/24 \ +> src-address-list=!NoWG -- 2.52.0