From 783c6ef5661fcb6f4eba8695fc6d7c0073733af9 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 27 Sep 2026 03:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 27 03:20:07. --- .../20260927/20260927032002-Binary.backup | Bin 0 -> 243756 bytes .../20260927/20260927032002-Config.rsc | 4337 +++++++++++++++++ .../20260927/20260927032002-Diff-Config.rsc | 4 + 3 files changed, 4341 insertions(+) create mode 100644 MikroMaster/20260927/20260927032002-Binary.backup create mode 100644 MikroMaster/20260927/20260927032002-Config.rsc create mode 100644 MikroMaster/history/20260927/20260927032002-Diff-Config.rsc diff --git a/MikroMaster/20260927/20260927032002-Binary.backup b/MikroMaster/20260927/20260927032002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..fb5d49bb6a2479b8854ab19bac507d62a3c94231 GIT binary patch literal 243756 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𝔓6`BT)>1q($WoA1ZyX8>>J zD~J4}5`4cBOdPh3r87cCS^0RX@Xo zSf29j6pg8+STkb7#iXm@!#}U96ZzTBRs3NSCtSy@0n3|R& zYuCxBa<}!L7yA;9V@Rr6w3C*DGlUJ-wgGP52F?=DuhkQW)DLnhS~PQ(Av7h9r#3M% zL-=#e52tjKeBsMbD5B`$yZC=@d7WhPT$kIr)`HVRv>Jjke?A!kG&HP!NR9L-;hpEt zcmm|a5>qXHS)-}7Hxj}l=Hc4)al8?VxA(i0WkW(t&!_f1&`ANFJNL%g!8P9Z?iMX; zDERCv$spS*u*XNd<%$&e=kh%%=XDDFqsGcIZn)M1xE$XG1B`Ah16)Ri)0H%?n`5| zVpR1(hmyMyzlQUM(fpa*^qM?;Y>F^E`6fPLCq_gn_4DWRdoxZN9!+^=qw$g|82^oa z6NrIC6F~FxQFJA0HFF9*;IorJtBT1=1wV8nxpaW_mxoO>i_piSDm#Jl3`Sr)1fE9> zT-4aNLUcZnBuHxKGA4Q3)Q{&c2#ue_2*3@T{JjOTOO10PW6YHo!14eEaNuA#v=P}H%zuV8A~GW4*nYDr!xYd$T>V&5rNzo*0--PG)H)Xu zUaK^n6_wHXSI)P0%dG!dH?y_LPN`e}syeA`=Ig{I3_C`n=$~QhmH@Y_8+;p?_d_4X zQw14t=Hh7=@A*-U+MgIW+g@y+SGgE2{E2-L{@gl`vws8_3yF{#Q?W)bX~4(qhC8V>VkhSArwcX zw@3iWM1Bbrkn)geM+^fF^5Lt#F32al5C%+lL@8kM7jV&Qf5>sgDraOw**!7D@EPf> z>WuZ~4E~19vCie_D=DwFy2~CSZc9w{4+PcPl-$W_v-s8)KX<=b0Rmd?%Gs(<;^~ME zWmxSf1RTBRg^)f!y(Z|%m5}VE2xH5&fPT*6r2}03dZi<|&3CVD4Am32XbTj5{I+~1 zHbDg9ZpEclNi-Mj}Bd{St+sC0BdbU@;suyeIbp zOkl3ZOIuOJv%Sya3(C|ls^-5JLz0a_TcV$t9&I#z0op+qIZgkr zsyupz2|=-+e*RMQg!i0xgi$S#=`e$DL;Dek3|A>6HQ8%IqU zB4~ThkJeMyY3G`l8liQEuDi~ZFFxd$a?|oF z!0^Q<1d#|vv?^NSfKr9I*lGpzx$ljy`6gL8H;Et}KYM4}@%^Y9;8O$>h%EdEtkWxl z>3}v(IIE#@$JpA*wxypsP0x)@T#W#;p9mvb?1sa_^7=rfv^Lr>0-s^2_!2ysR^p<% zG>08nmoC~?gY?SyWS0a-@=W%0_$npEojHtLx_&E=EMtBaG!cGwenMBocktSFw0Wvb z>NjOR@dP?RDbpfJ_CQBz zDYaeVpy}3@~Zw7Zy`%5dm(OVM!T7M-H@p z_1cK04`{`g6aI5;HhKU?^sW6S5B{3^N{4Sykhm>IfQ-mtzM046+!AgtVpX{8OatSF~L~@|hM~kDo4y zP=<8sHaiF^?TGdDtcd5>M2{sQgdn}<*v3PC%a=M}v3CP(;vL6AllfzMj97bWzn)fs zR|jE+rvnM$LW_nc9w#IHPTm~A)`EXw+X~NmXu$*^umJn>XC+LMSql> zgcuDo9c;!jvf5Re!c%%^f^^of?N9y^{jY6*Bb|_sak9q)T?G~5^4Nt(i#h%+pKndw zhA7#fOr~fVE&fl@k!(yk?S2IG!^^cVIO)$HxbP3vI9?dBf1Rl8cB+!!5>uaY1xJW< zNJ_5=ReKN%u+4qd;cl~p*`BhnO30n*D2 z(2%19M6mtkaKt%t#!yZblG9AWXlYyp2xQwGGvypS_zaPlLlOR)Ng1T}VecMeJ<9g1 zva$CcVk*{jp#OX{wkGHpY1MamifVa;^rBRiCArQOmUfM8qwXb=x=zf3K3YnrN+KZs zCg=;Rq-^VqPy;bF_rW%$zIBI^DSwPK+IX9s^lS$IiH7&vMHh6PQ<6`e~EhG!V9S6%e69uG(?uEe5t%-fE+KDWcOF3aML z{kSn_Vcw3%2rfA;1q@oOPBB>P75U-S!9Js7FCv?YAeYN4WmLLjVAUv6X!?j z&|(e+p%M)?ncs>5_SGM~EgO8rPN%PJQPj0j_zJtqoFXFO9ttFE| zq|6K+l)8;8+Zlv=in9NG+vd4k1$UHz)-lG}JA~A@=p3u&aQdbQ+Dsql(Xc0F@e(X-2Y`>snMc>tJJeE8k12(9GYLk}$3Yra zcD{!D-rV5-)8uoN@MEgQS=O41u$%fwF^b%@1j6ktjv7 z{#$lR+B7g_DX^A=iGIt>Vj<(e-ryX>(e>t=?_Wbu{vl ziDe3#Ic8BRQ~_{;cNJ`X2p7be1WoLjza<=Q1WqSyu1(-l$bwTJ<^NT<1A0ZuTA*LA zK%Yxrzpk}lVAaA5opMOj{LiH|HqeAOtcfch!j?>1(Ffp8-%&Uul3d$HqAo?B-m>9b z;QS=2Eaf2ff&8Rsf{_(v)z3<7t)=p~TzWq#-cbBL9N|<5ju7^dDYCFq3YI}h+QPf# z_CKy&J?#5>&q;WX@8l0@(@WFyC2(IG&r4mnY@qb9)5@_+AHkHbx(Je}$XT=!Y1B4# zSSMLNZT}YZCjQ?ap@%=b;yK|Q=j2L`3ikI)6Z<*|^zvfYpYaj5VR?Hckpn&9sn}lF zvZjBHlsn*^F9i9M9t-Nmm(?j9#hJsvHwH|k1oPkJU|11(Lvhx$aHVK4tcB2+7}J3! z%k|xBH|AGC^t)vNW7D0{Yeh+Ujd2pbbySKfIx#`=<@b5*zR^Nkx*-l^gy-$tR8%W( zLOWHYf+Yz#9A24#Lw!?;%n}iGym~Ck;_3Q60T*y8rpZh1Oif0xfHdXTBB&`I<4;WD z6c`@O*5!RD6AqL2I$TrGw4ges)m|$$tiH?f7yaU`An)j4-1dl*IE)=5D9drrV&b5f z7(uWctZCbiJ5wN|#z4m}Uq>F0wc*o*WFqI_S4bT4W8`ch#YLw3Jus~?fsa1R4qcqh zQ3Txz)`=0*9GhGx!UK@tdCtBY3?>yYbN;m`+Q}g=)lh04I!*{6+}Ah#Ej1A(_T`B- zlz*pCzCzG$jwSFcHf*6sRoc~aPHgdzefRrY)}io2<$dzRXXk8k>2nI06w}l}_MlP* zZ3d@4om>zkUb6tnuFsxOx~PG)NxH}+qPabZAKSpL7`F$8r<(?df~*bj&{=c6cIkO!`-$9j%d=1w0zhhSoF<#Jvr1>#{ z#S!Z$(_m&}112wrV4ft;N^;|fAlbdo5xa;Dp5}(-h*pPE|{mv$LQSg?ePeluE zREt3`Tfa*%Y}QItsS}@zW8sZFH|I@bpra27$1UMb28~y0yXJ}&+mb0LC!sveEUZYO zeBwB3fmF%A$aTa)VI!%xK%aK{E)k3Ph@;V&s1f(MLOSEC<6W7s<>LBwqlF9^$Z%$U zqN-wO`mn+Qbwp3KAzy9=~k)21xI7AYrLQ#Dnxvs;>yTOAA(Jd2FYuqv53Sb zhBMk9MMWwXECFbnz?^~T$m8lFvy*&e@Qz`(myhqFUy38Ilrcm-Nn7b_Ww9w1Goh1> zrm4wtc0N*Fnp*AH9H$PRC(Z4j=3n--H!-rZ!*TcW{+n$UyxfQSjWS36x1INDtdlvX zfM7cR6w7@Nwy`R(ykQ=9IAA#@300Y)TiTHp-q2-;J6 zqP-3BGs`mugGad=+TiF}fyCWqe;NodEiLs5(($2e+Rrq(N^&Dh$!M&o^gPwcTH93f z_#AU&ZQ5N!aL3o)O(W}znOqBY_^e^!FC>gPhxVsF`Yd-tFV=0B9xP%ZL0-xaLOdEw zFqZX!8gADn^kiMItM&L}EeWhIGijfyxO>5_9F!ZHXcqP{@5*i3{Y#1raV+;t?&VeM+@-`%q(>`$WueMbb%n z8IB(!{@F48D2Les$4RWiD%QX>LaMLZAj7C5N6=1@er5sHYnZOZ#mYeO@)Jv4`A&B6 zR!mJZS?b4)Jy6o+X4o?y|1nhM=cgi7i2j&W~%LozDN9bwm-OG zOuSrz9olO&1ay|l&)#WX+?Ox@YjmE&v{E4GaIX~quT@eBw|6mGe1x)f{M&$eiRAuC z-!mOUF|H*QNb4;$eFnOf+kP4vx`yRp&_l`_CkcQ~-y*z(sCmr6rW+pXikO3tU|~QD z;6+a*v;hstz4b+DuW84rNm5!8UBXv}u}5@YN^dwVz+%|$pi$OE&`s2}Is>BVO4Zb! zAMIU&!q>@tKT(FVTOkY~F7+AKj6(O2*IT>o*31Z0#1QwP_+JqNeI&e;e2?9V6ZQST;3{n$M(C zT5VKGTDym`H>&2C156$_p}z|KmC9nKh!oh?v?Ryw@V-!F%WGRfG5A8HMy z61PTWeL_A1aKYWVsxg9*voShL)B>FX9Y0+omF3nUG`lO^JMAM0_63?c67b8NUKfXs z+_)Bsl4!l8$n4qXetuEUj{oOyW=KFr)qRNo13l#>OC{L^b|sknCx#4+ zO)*N73Y51oo8I~0!|%rNTH<0_m1m686A{0fJ!k!ACr>OJok+q=}5W+ZzXCX?)$af4eu?;Y>NmyrI6V zD%;_*qb06lcinI@Tc`CQ#5R7MOnCEB@taCqeJ#BfV(Xs1-kN?v?w`F|yX^(o><@e* zec-`AV&~K?agfr#MwhgH+fY9rr#>RAD_?`I84&8n*il9Zvldh*i$`QKFHY#+NyuYhfQ4Y28-T-uBfwa&i^rY1s>>-1Os>oVpgX6Cs= z{GugIsl^`6RpM!OZvz`9XTn+bU_wgs^j(JWZ$6Xbz3CqEbyR+tpshYT3DzPnv4-XD zB+2Ji&Rml1h>n@B=aBPKs?(;aRDjG!1Qy(j9XH6$yaDo?sK zW$(UoyW|M?l;#+XrYZQ-S+?b{X8kRHEqnkx+L#}V;{>(C6T!fgIEcO|+D|R9q&q3h ztEzbY0@r0om2N!QTFa*=d{KJq>~M*duL!quTEfPi?Q?3i4OMm?6SF+8&bE=-*D1;k z(!;JMubj%m3nx;z{U;-nj?GZtw;psYXYRw!m85V;V)8|juW=Gd)HZ~`Zo8>r9ma)k zXsQz9wWD7C(b6J$2(M{ao+MNKJN|hN=i*2{CcW_*1|5`)AjE=8CytO9MrB@Ml`s{w zP$Wk8_*zfNlGO2wK(0*#r?IOL>XZdL(|X<}4|fhy;w}~ehT+mtY#nj|FA>T0>jG?A zRku~p^3wHgrY}EPo{Z_C{?|nDvQgMAbB1fiOgL~GRw9qfqV)swu$c>u>tucvnLdGd z;%5CTz|&Ai(s>W7E#-5tdHUlpm{EU>nm}PcW^W5=JMt+6gZj?xPQfq#&Bcz`cDjwH zpk&@mF!1q4P;>My7bsHbWvH9X$v|~Qs9EsA(sSqr0F1(U6;$t z&Bo+9t4M+wGu6;`z6#r5I!w`znK*Ou65t=Dm2~&!iS5X;hF7QD%m8bDtl! z?B80PVW`{~yf|ik159JELmnM(1Eb$oiP)OJ(@b-(1EI{{Ei_DR;8+ss!K=^%gLol)y zfjPo8!Q%S5DB%APF6->G6`Z^ZTL|JUq7jf62KgKDv|X5T%^HsGrW6LB_VXCEP8<%aavtau`dv%Kte$^gSt(Vbv)WtCR*pW_#3iRt0y4U{7To-mc}eVkc;9vI&`ssXAW zPA~ZSZr7|LApi45plW5m^H3Vas7}yI(iXfnQm=W`q|G}F*{PG)A(>*R;PKplF0UWm z6hgj?MH3ez5~r@7@vx!*OZ7tt8@0MVab^)B4g=Y6YilTQ0cnJN$Zv85aXp4)E1l7I zC+q=`wR*<@7Av?~6r32pY`{T`u&^lp<@fd9wyIywPG>{!Lm+$p90&_uQKYdHqS>i2 zVV{cnumIv<)MXALvj~92OvmH2cIL_`q59qbPI< zO3QB4NP9bH!ugz+)b3YF*}uA{?}nC?onP?vBZ`kh-pNdRoPuWrPWPijWhjqn;%5?Z zvO!CrfroBi3&i9{$1DSQE_zHbpo>WD(6|5y#gcj?)yWO9JCJ0!&HZPeCT+}B<^IhlH3!e!UdpR?dY&{4|&&A1}9JMA*Q_WUKDd|u(9 z6|3WT&y3!X&tY8qxRD$}?8&=in~FB}3Mhfp4JH(cnt7v0VgHm{;xCi!3+miouK70v z2fDJ^*f@7PB4O#!d|g(exQb0J0tuvK`enO}(eSy|IdCr@RqiWR!?UT#J{RMr^>RP6_$Nf_k9e}Wj9ni54$8BQ0VxsKG zfGsq3&qxp`WMN?x*@VZWg|;s)a~->7;t;=|HQ|Q^I#62VRPJL=$saE<;e`(J>=)sq zdY>*~S##zl6mZj=jAow?NJ^O`&FIICa>$P(pxk>G1)O#^=t(j0UGihS*FQWmp}A^w zX1_Tw3qwhMGMl8v+1>0S=iouk%#a;UMR*{tf?gNI;~c{n)zI?-iEL<5 zh#^0n2eadn@%MeF<{0(CL)n=?AwDbngT(j&DW6PX>}N6uV`&AnYKWpC__|z?91tG_ z@t+ekI1{T=8&WTsdr1Wq+0A?9amIemubz|W3C)Rc;jDzVS@ z8kDpo4iwxx5N@gw37A{1#hbe#p5ET&u&P0{abiZbB2Y8ZOcFS#0n1@X+(rCUd+j>x zqRK5ev`h(vcci9(yN=+GWmbP#-yTruXAO7Gl;s`0WxY=LuWbmiyiQ(w%G2Jd5B;t2 z&HKs}=OeWTMIpSHQ3_@p_Jx^zoe?0?x`WZV9W&vInp!^@vF8~t6qyq?YK1{keVwT{ zvn$aOcL}@1YIXqsKLEfVj&C|65apVJ|@Xg@PO=3mgFo~lHkgu*y=j=T& z#_>}G`4Cu9Jz5G>s3tsOkM3Bt`}aVIv4Lj!-J3b34`ax09r7FH9fksk=tnx2%MY2Pk0RVDonPF1_vv78&z9Pe+2D}xs&|5$7IM}uS z3&DqloZA|!bsjLw`Azp(1F2EnZ=34==lJg?OAC%#&;5H;O(1JffnKx*Fv{n9CXleo z|K8?x1@jO9UQ#5RMSOEkT@QsShTAcKsO-(LN*2D4u(YyNKfK4eMbz0WrXP!Muml?9t_&fA z%Y0g{)1KodJ$UyPSYc69;UE zS_h5p=HrDhpK@b6Nmc~Pf>IKDT@!~R6mrxUIjQ&GEHS`Wc+3y^##_oKL>kvX;r>9{ zqELH|2b*35@N6pTS0tB)a-=yKe7?ZtqM*6A#k}jC#;oMC$jUmsee5OhPnFo)NrAY2?ejs(9+bMloGFFYjSqe{ zPItW$6Liwp)>CjZt_w-1)|Jy%=5vAFx3u9Q=7*D1kTeBRXu{PJ+TxW(qL|q207Eq) z)peG8^O-RJ@_r?Z*d|0GzCX%JWJk%+kr=D6BBQz)w0ZfDdY_QS`Y;o7wy4D<$a4m! z?kCrj);%OG7_m?)caa}abF5X8+Bea%icVLZx3!=QMMz;3*7Qk0<<0aEmQ;qgJ^gU( zn!dOG%TN=>QGwVKZt&^1`|jr6{;#m_NnYoGJ0+jIscT^woMcK^PlLpnGf#+vFb)>8 zB?5JA^!u3c9X95l1bcTB!}lhFoWeyUkYv+$Dkz$Wu2EDbg1H#0bq-=L?ZJY*2rYJ< zHSw^muPBNg*5UpY4S|8NdHwM%+RMI94&&xf&Mj2|n*Fp(Ln&SuYe>xo|MK?`7jZrf ziST<>&1uYmeYLjg)dY)N!|_D%`O7Y2cX#IeA3fi(jHY3AjpQ zz3L(eL<%CkBD%C`HEpC(A?7_>zg)BOQ2iJpxz@(y7mY=0B$2KFzhlml%SB*MGk`!~sMi5FnYG7~IM|uCFbeb+7Yya~r){6Sq zWP8q?UY^+NG4M+=RWasyY;iD{@Yyr{7EPle`5#;ah|mFT8fdr$#dyNe-Yg_GPnmLxjM%Ml6JjSmj{yM(1dh7Y{)a|k z4_E*}KvTgTa*r}VMuFL4%%5cN|C0ApTkf-VS*(OBY;^zbEbhc$_cTw=L9*w}L3qp~ zcF|*6uo{y@>>f6t`IiBX`X}@ZTH-i-Xt(IGenZHoa+H=@?4zXWBVgHpuR;Z?pKeRD z%r&juh95?lz97D7z~{CfOU9MljiU$K7y@0+$5E_Tgo>D~fHn^{b2+@s(ow%)wfcBa z&!z=J_pNR|!W#92LYgj7Apw>?1<+S|miLhvo2{Y=(CadzA-ZFyXnUy7{W%lPw5eK> z-R@=eoq3Sr>GD(&KqfGDNKY%CK!~FNSxnE-??y5sMXh8QLf~(uih;7>7z9Zz#i^UB zMCrRa!)*6({VOHTM)x~NI)wjprwj{|9Im;F}atE@S~Y8t#zt6?1r0zZ{|M`0VT$ZzjM*W?$Cz~tqo zG7&Qx`WQKJW+yWTtdE0)6dg$}Hp*S$hC6inu|pk1nfasPx~}~A?)jZsZ-WIYN2qou z+Lj5$o4>=*D@hNfrJ_8X-(yn1S%}&w@4ai4aWHs&Vj;f~b|jEiKHj%j(8@bHBmo1| z{-#MPiy=>mH*O^27PEH?z#iGoFgYu|qqg}tt^Z40{IPK-Izi2-3u%o^bh@3&lUQ%WBCw$@4mZ*df1cf3U?WIZDVBpu1hE@`@0;57 z=Ht}msU4a0$>}HiuL3xoLZ$t9vVsWI)Z^c?5m4LVlm*2F&+zK&+^|18bd?`nOgEPc zyLbMyJd}|&yKF?=*W7XxEhVl2E@upb-mkA^!LKYwbt(Gl&kTY8#`$^MU*$T&D1~Gm z=X3qDNjE&7Rf-i~p7v>P8nCP>-y3|7xwv<&X_kQQX5nITC3rkA36_7Gdzfet!T~>-Imx zie!BA2YK}n{6x-%O6{`6e4xN)9OydNqkJf(Kus@S+cPNFPiqgf9JvR|G0^mlZU|?; zgKbm5+*L<{ts;O^-8go#vcG~ZO3L;Cf8J+Q%1wA^8Y`h64k+9)1tCI8P%_!ip5Vz9 zpW?T^#1Y96_NnZfxZsMSqyUjCHq_HC;na}j7bnfuWdKmyLq|4rVv} z%n!(QkA?DCSxeM6TO+lGT~cbG1tF3WY0K9Ckq>xX9G}97t)r#^xd=9JB5~4`!z9}u z;B|c+M2HzXQ+iK8$Yy;=xzQSDqutvDn|{FaEAHSo8z>&C@^*L<*$faAWADiav&Klu=X> z`BzS&Z*E6zjniUQDRUA{;DItBF`7j;)RQsXY1bAs_DPB6v<4%)Vy9QXJ^;8>IILq2 zwWadLwkbMa@`0UZ=@rx%6Y(UFhw?Yg^qdMvdP8{Xz($%Rus4U})#nJyqs*qk@(He< zk_;Q2)6_s^-}RK9Sy|fm0|cXO@gd<5Uc6Ly4nA>PUlflT1>yI8Kc5eP+er?yuhD_; z20GvN;U+y)5wcVy34xUg?UmYUhhsM0Hj$e{f2)=cB)ynRqUdn<{Te?dz>5dB!0{25ohO9VKKIuI zstntEzGZ@;FHM-*7W-)xhTFx6&1pVykLr>UdgaO3HHIV&bO{ND)J{=_(iOk&3y==P z?0xh5F6Tv15?R@bWXZz6WdovTZTkUEb||uo+ya*Pb%|7rALb)G%-dpmrfMg1KD4Bo zxu21rhFNWH=_7 z1)I#s!74p(jUC5E^-^%5(S(~j;--6eAD>>Gc4SX%X55?eN7%eZ%vI4}Trd60o zV`;r4j1ZwcOsb|7;ZA2celp@#@^}=jLtpXqTPz@DiePWSw|foikNl z=r}wNvwU%d5rl-yUw^IU{R(}drClX^_wJs-d^4Z34Vw*e^gWas1p_9vaCt1wm+jDD zMQ8F(#eVndfgJ$P)i$i`W}cZhM1XaDwHl}EdlDV^>U3`iEbYYTX{pR4Hv*Z?r%kLj zI9#_A@*+RpbKgqd0W05c)Un##k$6tZP1YfLilgi1;;>>J+! zu!}+au5_y%G$!lls29%a1)#Sh^8WTsUuGiOE6YQ82Az)SZBpbA;3n(KOYPn&C2SDY z`fjq3K^NhB&TtKaYiCkmCFb7-=9noikyuja;_VIyc;oF%*qWY2l_?v#+ICOIXqE1;w{c21tQN^1J>=R1eK<0}`Si(#Es0uYvqWe>17)3;-;aYe!mD|&+u>> zO>*Cey_kf}i2NDI#3?^V()VFq1_^=A#KS3bBMM%(s9S zSA&W2MfI~4{Jhlb4Cq``Vt))eKV&FwSTkN8GlJYQ(u#}uog*WfVLLdMtNe z)nmdp@(40*iBM2?|J#@uA)WBSxBPjye%fI`QW-9x>qMw7TB9))diO{X)BqU zef&@`cPJlF6b#I1?|Dqwz@|^BFP^5(X_q-PRPDz6(Hs%!sc*i*T?52O(5ILZ+epSl zA3{yzDuQ7$xELuY%Ha?XiWsQ$PeV)V9V6CigA9?U$Dq>KX_uSt2sIW)?9J7jTkMhT z3h}W+ZTB*d?5s?!`w1W4Lr0V=$W|inAlx4OmZdcw1{=i%u;fw(YOH#BX33u&mU+Rw zyNy=NdZ9Hfl5wi~#*An`igB@||B9NIQxpoAoBrsh(OTdYvr5XviiIQy$1@s2?g(nk zAmtSqWE3M*rEKRcV9RR-aDSI~f?Lm@XISs1$kf|X*_-WWhT0Iz?+M_Q#tYT&8sZIE zA4T~F&Kp5jw7tz1fnGkV}r|pNySk zVh1#`5$;(L2|%|wwJ|>vL3@T#A~^gJ5dtcP#`nB|`oo8dn=NLH%6T89wyHxW|N5|_ z*R~U)HiZnW3J3&(mQ~{oX&?2-lWt8oS$ul}m*7&9ZD1_Oc!~l02JCqnd8%Po<*qfn zfXiv~Rx#+!A0oEhbDy7A)oZ`;Y4rNF@6(nr*qj%wQHn2s?2_1f)FM9j!CRku2;& z9ZrO=l+UB^(`GXC*2!BM)fp^-TAUw7(X@4k`Wz5RY@NX?XEWI_q=0*()tUOVdCRYy zsc21?OyqXz>vgLk!gfU>!Y&v6hprC!vv^cdvXC7S`V07ruj5*3BqpP-qC>_-+3-O!qzn{&b8hzZk`5WC7bYxYs3q^IRr`!U>C1)^XN~# zAK-6GJD>kNJZe|K)()j{N41p{s2p=KnC!|htG1IKiu!BGw!aQ^rQo>;nm=SJx7H@H zw(A9O)nj?Q8lv{l#{`lv#Ae=!-Xt(7h;lBNO;$I_o!G1=(~XVQaJYa-4~LNZ#lbl8lOis&5h+=(f3*0FK83pnliAJ~#7Gq@EniYHLpOXMriqa>7|}X! zGGQ~)!St{tpjnhZd{$Q9YE%@54^R}S?&>s$d|cNkNWGcp%?jEVczVEMd5#|xp8upg zBmrxnk!i?T&ikYvXYfb2@@>ePTlkcDE^pcucS~761c?H6{lpDKp$EPu$;S{tTH@XS z>sVy(siT-(kz^HkU$Q%Wdris)=PD%Ax2!)!0z1s!=KKYrlQ)flMM3SHa~3TgG3M@$ zMwJ<$R4om<@c5&|(C0B<*ybs_ekBoVZ$nqt4h+(d3l`8KwgZncS49I+pij>S7kDlK zFNhVMm52~|0oW#{1@E#A?5LsVn&$6NpVwUWB)6G~g0*>smH_M{ABo9--fiNC@4QA6 zAVTr8oc%6%+9bD1lj?w+DkPx~FIM59kLcx3U>1IyVQfOYx^OBn91y-%E89Tgn}`#4 z+rQfCNeU>`XP`0`T)ff!R`n-}7Xju>XHepjXg+3@RZE5}JoiU2^{(_}I>v$*1GO4F z$??Q0hiXgmN^BO<+A6Kb$wF0JQ8d($#J?Y8%hWcOhbd5M{Wn)4m*1(bHr`ubfn6({)`!H>UUhMWN`c;aw?M~j)#9;Je zznZrhKsbPY*7R>)=mJ5q$&vGpCP@xLMEt*^ow~+->@F8ZBig+d2xmhbsid+F(G0K` zvjGJB+Q&~U48<+sNUtBxQUGdt*-xJu;AY%l;&aJVyZRs{H6pqW^B}2Jv_E{cHACJX z`GqB+64lRkWri?w*{rLJy1Tj!_`kNKrJV#-k%gPfX4rO60(8A-SD+9u9$Jk zq}7Hn5mCC`zMfcJp%-yB7gN6DC)xVe#5KNw>%&+e`ynd1ngw=~^UZQSU=}CaM{Vh@ zzAgRJesFyvb9?SB`J2jWKcaKb5B1At3Rz27y^;6)qTL3Y_1cn}gVirS@Y0g?n_(T8 z*lP9&v{6)#R3w>XxZT3?1G744#{=e=;-e!O)+XLP*w~P*!AppM1*_hA_;nMVs7sE}T;R4r z|1uLu1hySrF~md9%6_i|-gCcg=B#iZCss9j1KI`gF<$ME{j#Bec6!}Cd?08f-YP-= zf$W;0`5;mSE7M|w+ zM&T11si1ODA!Z%=!?`YU?vpOkX6>39-g%3dF4uYu?==Dtf=4G>8^DU{Zh;wJjbtbk zLw>O#&RtmU*7Oejmo{@AAl8D{x-0~QwQ*5GPEbwgf)vTor@tC+X#}SpmV3X@ZmR=X z6Zk@2qw!||nInFVdS1s20Koa3wE^vSt6@EJ-3f7%hYu~GY4upMRBfjbTB8C^-&C&E_j~(C0lqiqMd=_S?{FGd+U$7G*uW<7rsgQ zc#B%{S2C0Sf$BbXlE?~!pSpKbmu=)l7^QTcVgoi#_Y8U)`ii~617l;bUKIxpTcGknk2d>Qq@r|@^*!hFy^8lN9sm4P|TQ@YM7O7!eyB+7l3 z#;JX+#;DXJFBF+;YLipiu#AhnF&%Eh*4o8*=dKT=?GPj$`RSqGO57fGaS*^WYRih<8_}Qqu;0msP&%y)1=bc7-zzuS16lyFhm9Dt7mS&Z?d|Q^sP%aY}#Z%SpqB<(f@8q*OlN*nx~xvscUN zLOhjC(>SNQ{_0v?W#UKoq^*aa*# za!W}K4`(UpbbMBM$htM-L0R@U_m14CfrGHpwFq$-Qp5$WvvmxluSICg5(+mu4PcCN z8xvGnMOlol8o-QwK8xCUJRBH6}{B1+Ks`=iSNu?oQ;>Wi!Ej7`S3x|Y`O?W;-hB>?-nWU30zK13c81uYu# zKW3m?%u=k+fiu&F%nQ3sFw>_7E?t6>ggsWzku{krlMY${*a1sa z7jJg9zDd;Knf3HcpR)C=lxL7xU6sIBxuoG^+-)Tn`uN0245cbdz(-u|806D& z+UQ7+<7JNUL?;~1@7r>jvkILgzDD+$Kp2ko>+*LaEDH_yVf4ru0=7(;(XF=fl=xd4 zlA(xcJajbGDh%eXdQV$xWftjHQ&)j27Dfp){?!WK`wO+7><4S~y)pq@pP%iBOCcn#wOn$cW zk_h;bz9P#eELSsL&WyQz8WzpcI#zlr8J)os|4#b&enbby$;uA1dE*k)bLYChW-xm@ z>-1)QalM@|u0OnwfE!3n!9A?DR}fMTp`x#e$=LIpz56{BJ5zgeP1&!zp3toXfYrZ` zB9KYCDjZ2GAaf_W3Ur9~1~MCHGi2#05nf=$gWr@D4Meh&`Gnxv9gFi&TdgssZljQ_ zD{0VDj-UCY7Bz+?DrFZ|*nV3GK>UO}7O1>zhl#wHeye^`XT}KvU(v2m z2D%ze;qW0NGv`S^GxRUfFJNBSjLI4}kuE9TxgAVR@_ThO4F~fc{J5y4KDH zh_*pK&HG_Lo}1<}=7!%wg|7OYj+$m!O8k37?T6;Ab<9%3!aF5VA8U(eLiA{UvP7!M zENRFN%1xo-2yMR0KxOx6VfmFdr!VMXF%n5#Nxf&MpR*K7n6XGwM<#9Zti`1czP+sM z58`l{hzWmta)E;dvWAiH=zkYdUHvStdg$j);8Q3O6o@K`qOTlM@6g)>c695CaNK#c zY|Pt-XHFpUMMNG6PbEif{X0dW}A=jr45%&f?t4#RylKU<@vkZ9KRkp24?8%$So934_hT89s^ zKF|Q3`29J+G>@lXbMo;H9*pHa2RihVD>NaOizJOfDxOZ7Zp7aI`BWhbnDpVE4;W8D zy&-nQTAstJLIA&->{LR@>fwlBHWf3o*b6YwLWld2>c@fXlwqmn4K!DpmCH%isRz64 z4}|a55~Hw1_|;hX5`(ASZu05mH4;1Fuclo=sT?uT^Tm|+XsIUW3xoU(y0p-0>xprW zaX9V*w8w*N7Ps#q?VHkMz4#}Gz@R(~@z>fXBI2gcj`2~nCzG*n7aU-X4hSAg(8Qis zRp>7$H#}5}=3AmGH|0tB9f&FrMv&CJdqZ?LRDZL2%X-x=cAOSl-l{*!*BZfibK`Xh z;DxF6zTrOJz27J_4veLtD#YyecT`u&zKUuf*a<9}(b4rhsad4HbuAd(0^IlWaE^{J zyGtsPS2lhvf+f0of#dxhg~;&XoAP5bGN~-2NB_Ug--dyC7{>hcQCIqQBTn?ynMi11$F2)-=H6{(0L3Jq(2Ka20W>rFia|}*2nox)k57{k z=)n^Xc{ZO+8hZmGX8-VS(3>Git(l+sGvu>luZkH#Kp00EJeNnB@};iD%-hO+_7jqbc<)GY#HdE z%f_r0L2Q)JSpv-Ruy6{5NPx~?NRZ!UgQ#dZ#H8^y*1ea!nV z)a17mFt#}bOPR4^ z_*FEq6V-Sg$@#8&m>cXajU6k$p{a)0OWAImHYr_30Ac#}3im@& z$lk1Or|tA=E!E)haqdux-YRAx=>XvvJ8k9b>H%2RJ2=>8ZZqzY3?CDhhb>!3;Ar9~ zb^WP(bjkZ%aGD?XZ|V$^F3w*;SX&azD@K_|C8*DG|znmYqct4V0$LYDc{^Z#sN` z-6I-ilCV=$us1HtgWW75ZX=~caI3r z0)?Db>ysx8iK{(~Cu;Gf33a@eB4IO}XU&D8V7tS8Nyhre!2jNTIqz&F)#Dak%sPSE z{r=lJ`zUK&RKz#Y&o7WU0$!Ie4Uph35j)ZxVdEe|q zvbfIiyt4khp0Rxh&L6XcZ(`E6m-BquQgIN$UURR^{|b6Ze#BVi;Z#-(ckoqe zb{RRs;IKS5IgFHV_ugmadnOrk_$`@TuA)op%xO)0>9HI(6OpVDx(l=k0F!E-C?cA6&FWtl<6qFG zcVE9ED1^Q>ao`ZkGkvUqhQ5!l1}f2%sLQtmHm=nf(v)#^Z&M~t*&T1`ybVNI$dSn= ztp?b=7Obcu0T9P~WH;>-jIpFi%U1I;1*enPVj>b2&)WL;{gXoAD@a>wOV1(6qLh2c zy#JAZIX3kEP^G#PAx-ECd?T62=4i}Jy7P_*FgYdKo37fyD;34y1@$yID7X`(5B4v$ z0N$lSOV?%aN2XQGaVFZ=hrEB`mdcnO)bSm>R) zc5sOg%IgJyfbEMDLP!|}je#Lo{7HO{2yY!0lgJ$Ok_N@$hBc)wpJMb52KG#y4lT>` z-XTD&{o6%6H}y6kxk()X3HkZ~M@DwSA(ZJ^{kH#Y>(Bd>%%x!N?f4>z6oNjN3U1N6 zdQEW+I5n?U0n>S%VeqZDCxI;gw7Et%fJNq78?VW-Y1vlu1!obuaZW{zlil!bPG6XTO!mJ## zWPo41@vbpvn7geT;HE`Ez~3oE&*xwg2Xw3Z*3!d;6zE8*Gh`b5b;JZk@lX@cRgYaP zr+|YKai>huL6xN>33byEVmg0T5d6pPz@=$UF>|hC&nFJ!G2=hHZr56MI8S6N?+;+~ zSxF2dg{H0QT+Mt z1cx8S2VvkWlEW*_L(6W{n_(Fv^<12&M|UY#1>Zaqu%yT2DVqTCeZ;P=kv;^C2%Evm z%UmlDM=zor;O=Y{kx;{UA8@qMcCi8_zLYg;Kw3fxNLcgz5%Lp=p`nIj4M9ehv3KGA zc>910ece}Nh72w-l}(rTYVu3MEls_ zBPj&-b8wG%d}=?#4MZni7WKh2`4TR8%8KuNI)vqU`TOO{aTI0N0e2Ufn-K8C`zszkGNp=IvvcEf`)#ho-3^ z&tKc9W{V16Xr~LUWe$qTS0W6!dlG_IVv&E}kqHJ{@Hnhj*&Jj4lN9j|V=%M9yXFFx z#f)4>+__QwSyFrF;xc5(FNGN)gYVE$2X=bl4mxrGNN_q?UQjgOHlIB8VNP zI6UIOWNqs2iJuMDS@FQng3&=rWQ}Okd}Avzc0x})%GEU@8sZ&Y;etPZ7vX1wl#VC? z?yo#m#xqB^t~z{VGixwTC}RsY6Rj#X96H0hG%8p-=zePEpA;ft9u>*O?iI7YkCn>6 z4(RkRl+g8fsu)w#4f9R5llx0@ur_oGpzXM@6xNfNL^2sWvnp;e&0PAI476jkkt{XzQ=uu zm<|^n;`lr1cH5=DlK5qvh@9_je5mN;Q8Vju4?J-|to3Gl0F=(~5A;i;xzU{XJkg_4 zJ_ibzXSugQX_ zf{LY0)$qhpms~)GyD{5dXo}G=rnKES;PcVQ6mR&pfmj9b8(_G`ut09Z3eF(qUQ#o| z@0G;lm{I5GnH^=+4au=SGz(QW#oDVpVZalQTvy_6mwxhXMAII|g~Ls%e&cH3J_k(z zGKmozPEnF=BC>h|_WYUSRDRriu$@HU`w#WIpZ`=)z;ebxxoY-8)=QVwYg@r>29Z{a9n z#t;}ML3YX9LD`I}4(b*=GQTsKh?(%5I=N;f{*&5lNB|3*C6{#>q6M6JB2fwUcZ0vf zK$jr8u?OpOLcHV1&rop+$dlyIoo-^R?MJ;~6g(hzan*DbSC~I({P?JfFeQ>JPfeU@ zO>^prgyl~qXlJ-U(~MlK!7g$BUj?%7WHRexdTud;5A6o}RTs1*4jz)dUa4lWA6rar zRarpc>T`hEMvrk*69H)Z^;m2O1~v@2&~czzIR1edFpckD%iR2(jPzM_h>lr|8FuR9 zc1E6nLa)VxX~s!)6ax#L-Jnt-(^+5izU_%&zhFr0t<3iv>oqvU(!BT z3$hGO>d&|CQ@^RC5=kV-fO4;wVfM(?Ae>-jLUnQASf#J_Lnm`<$j0^!*$RJinD|J- ze8T1SVv$oaO-ffc#p{%UP-lb*^yw4WBg~Pw7@pF;d3&Z{C#JQ7!|{1Vg-<{eriOAO z_>&%k#W^0;5|45Zrwe*bJ=sGTk0^r!rID4UZE6w&vAzIZ)gphSZeuVWy1*G)INEk( zPXH>R$7}S-A?_D4)fxOW&d#c+aMS+bAr2PN;}zOo?CkQ@=x#k`z4~+GF;VT zTtmk5(DtuQbfFO+-KFwRMP=hERNCm)43>9${o`v#NJ>7Y?~txQgyE*^#utzm26hMT4cJ0{Jn_4LD{?`U$3sWGD0NhSEPw? zZs3n9g4Ex=eSDehJ1^(sWHoktm#E6_veH7Of##Vk>HQS(6q9ztGMA*btS6; zg1XdLN*^=hXBtP4s<=@1uqeGtf{Xu|T}mYt&HkETj8z3CBd_!XvJI<>!C7XUtfz`g z%Nsf%fmm zLk7e5;t#Q8x8R}|K?BAUcv)50!>KxQST{QX1%O509yX3cUO~2i9YW&f9X;2_wZ%rl zxHTU*>ri;-O^7MzLjd(`MUAyMFcArItO&LJXG7df)=(}p#r6_@0n~e?tPVMFSwa># z@A$mw=^}GF03O?=;UQ-zTPy!gmnF!_q$CA1Me~R{ z>LJb!X|>?NV6sDD09ni2n5`a5c}Tdi8*$OSc(f4SV~6@8t(z=#i@lNpL^^TGIpaqduA^oVGyv$viso-N33r=nzxlnp zvNxly{*Fj)xfe>wC+KbeU%Q=30jyx_jKJqymg@wxmNS(&1;@0d=BQyAk_q@)pexsC zB7WX>f^de&{D=IkYObB7vxU3x6Fd{F*-9M!Av(xvu5)nNUcbec|NA z;^R8W3K4&0Rh9S z5T=vnIzUkN(_>YwU2)SRG_~^H5ppe8Hfag-U55Vj`{z!WF-;LZ^>Q1U2`{@J@V|^FlQnwQgVsa0cDRe$p0BV=NnAcb z&Ka*_Y@uqFZXX^?6F(@Mmzij(S_m;Es^Db~j843ls{hBy_3-5ywY}uVY>+cY7$n2J zbA`x(EcpuixfiK`BL`10AN8x@go3INGsRWPywh(Oyv{o8#;V;54xlQApPWf|{1Prf z|C>BDO`XMmtccKUO}`+g#PyiVmzjqlNAUAQS&Gpz{@@&jG7jVWgQd5D_so>!XuG$0 z{2TLQs85Z7P!{OV|0AoeQ(`Ct9t3h?O21DK%YDY>QAg}0BwyK?8i8j6HfIIXb*C+r zP5fCP=U|aCv(?fc%v@`QSV3+e%XMhnPt4M=%R-3NB3f|gzLTVBt<_n5V#QiRFeYc0 zZoxQ-$BCW^$_(xqLLUWgG;d4BVoQKOvun16VBR0o8M)q=0Oa;bjwM$YBy{e-G!Mx+ zT&JOjja}?H;#u%%TRl&Q{w4*Uz|O@yLQNS-^*A=RB=5!;sPPXIi;OmCBtysp2Yh&N zEs134u_sac zCtwwmuZ!*RY7Vj&|3Ktx7RYHfnkw?}ax_l4jP3=GR>A8^^-O3ua8Mbw#iD6`|ANkU zU=^SR--!kDwr-f!yzZa9o-=Q!k7-${t!a*WYjZ$~G*Lx)RKMNZq&4pt%45XpHSE%u z25Qj?$ylMG-RGg5BmYCtMAXOVH4f+}DBFOhZC+k{wSTPS5Z~1~E5Gxj;@*LwgLQPX z)0rG0O&Y%%GUcG?o|pF2A+B(jb9g4Xo@_og}FBE0-VkMkTeHGM`Z^HXjqa?D@uq7(IZob^?;WI{!nUV z5nT|i-&6@k0Jc_Zca!eyN<`}NEnK&O6e_~gA5VC>NfKiCoJtU~=Yi*%k zJ{c4nWS5Q1YPKkOCu=G$u!~m#k0BGtp-=mq^aaJVsR2_l$sL6dt*)yp+tS%7$@fMz ze)B6B!=|ng2UF%+%XQS{)F-HKry<6@>%_cZ(&J9Q?S{WafTOZ$pX?pEMiAMZ*Og{E zJ%k;{Ik&*}C>>#A?$=o#00DjsN#6}m(-oz|BXb>6q{XaJL+LH8Yu23PqqHqjXx<9F z9TPfq%AXCYrQd7Y&vnu3m3A zYoBqKRh_JK3V&#IbuEe6DAdXAp3M*CpD19m?Gwvc__u-v{OiC86;Hzc7B z2yDj{>Lk~XoA{Rq=r7wWsXLIy8OvG!kSi$62r0;P1EKs7iCxpjdQ#)!OP@)&B3zfg zXk?7pTp>$6?p)Y~8JIHKtPC=8E7H6J>i5hII$%dJ9wxy-MS48`5IIUh=(FOB1E?KM z{cR21gqyiQg%{<@SK;Kos2*tE^pF3QGe<+1=*hA6%;~DT$0R=Y($_=xN|A6nKa@(8 zzzgEp1ecJmV?IF(H&M5V2ZI3rKLEhH$z+RTf8IQnSdp>kH;$CHU<`mySf-7a>U*1g zc9Cx$cn6FK3F=ZoRg8$!)ulC`i}xlIY#9J_S-NMh(Wh^Z(49;B1Oqnchck3OUF}f8 zX*@U-cDpLa2EA=kuj`#^T6r}@Ik-QZN^|{OLCtQO$F!?lPehkQLe4Z0pHQ{!7?_ml$O%6WHbVZw9@ETe*O($$dXbtC#_CSt0C6gSGMUyDqE0vBD&N5u01FjGA*%5-RE2%K3d zsFRby7tHkNPLe?&8lHDu-?Qu*cY}6FD>>axFb@W(UC4&bs(T0|{&n_kYS%}>ea`u! zgJNixLYwuC3uxKm5Ky2(u{dvHXfxd#qf^e76_`jP7k%`+Sn-W-m=Tmb}%ibCF_N%k{>yL4 z_MKCRLIQWlBgyK>FCUB_P#}-BOP(#M3?(dO)NvI1Z`TGKw9$wdygFj_9dZIn16!wh zc4C;20DyjC0k!Ot&aY~pYx%1|MLLuaFJ`fctaPy()TqJa9Lk4{hXb!-I$f^5pBg@! z?#e!}|4*xI-f~|Zg^D*CMp2h3g)s(sHt@M~({=bJM>%zW6R@kWB&8g?5ewF*G4|s! zlLF#WfoLOWVoPPG(}|ElFde&Q%Hx;?cc}Dxk6w&TaZWlkh>IRcwVxM+FzcDA1Xz6> zL#G=5wFDO0R$?Phq5smzJC2PLa=I}~YOc(#TDu;|J!ScjiP8I@~D0TV)*pOqz9{_yOdMjS?m)d07Vg_ z4{E$z|5t@S5O{9<8)C;qJ+51D9C~^2_ z$U8k9v`1u^4Is$q01o=zEdZX_Gwi`Z*&fZQsW?qN(9-_Z9LR# zd+LG|NFpZ4piTc=B2|4ww^hmm6XfA3Hbi}QrKDVM_c0#6cBpw^S6S>D(I|SUj@lGt zYNKAFge{{olj~)=Fj+|lY)VnMrqNpyk>>lQCXG{9T(t_TpAyu{cQEu?*NC?CsGTf| zb11$f*Lv-CEN4Ze+~#^{By+=-Hbv@hn|{816%CGUZT|UYlc<1!2_zT3Wk&CX^qC@% z$i}u$J7&g!LvZ@r*?pz}9}yc8R@#t$iV12}aGmw{O2Ai|k~3{evaYra$E z-V|JL6Go`wd}Wv5((ID~-3Pf+6M$pgt-y4IHeN!dHAjRNo-?#Q(zk zx3O2Lquw{wvgM#IX)Cm@r8gsfeDkZ0iugo_b}sFGY9_#A#OQ1o#BVOCB87Bo-_i0g{A>*dlMv2@V}VYuLiHa8G< zF~JDc@)FbXVVo-qIcB}MT9t)qI8r4!a3j~zXy)GK9pNBb*7ePNAOU_;8C+0#kodK3 z(zeTZIt*Q7xjk)NN;~7U|3AQL(|9AC~`% zj~PgrgD4I!{5tJ97TR{@W1IjuvsEJh`ou=DvySFcZO&^sWb|S^co0$XZFrf{3`X{Z z>^kjb=*3?Ncs*|FDhmsmJ8u?AtB1jlFWe8^Rv;9jBGcNgyS-M9Zk8>FIRl#%B$^&u z@bDPdnf^v;ty3p1<5F6!8y6u^gbjNo59eCy&W>|zXOZ#iQ-gz+8N!^YX&cKuT5mh& z^3EI+sN40)-5GNWVrAN1D3km?qBO&YnfaB++towm;vRcFKfgD^vxE2M+l^V{FAErK z^w8QX<5^*3rTqV-YVzxnB?)gsaW!;x0wlmyjm8@5@UTlU+LST$k3qE0Jdi?jhB0gk2ZyFe9Ye8^ zAk?p3W?&)1WK#C<|H%>7#r|t5mXz9(2M>)ydy?TeQVrkoB=DAS+PCD#czNh`PTm2) zjiI*(-c{jqE=?YR`{NOdbo*kN8_a@63?jgATT+!5)D`44&HTk>w7DkZS(_wy2`e;O z5Q4U#%;qp{tzl`uefd(Q4z~%3oX&2X>(0C>c})P0tQrxpwtg`%=a(Y^pahKA;}ehp z6`g6x)V@^Wi=iazh4QBA3mr)`DM!n(d|&;(8duKlo-_P`!V%hAA-Ent6o`4E6>r~F zpzo+_7sT|R^@VWSjtP60;hJbyv2R%ywXqnVnjs~d=fa>;)~_@`S6V*z-cL&9)|{kn zT95)rAnvyIgQJZL2@}omO4K2oM_pmgP4}1Lx*i}!*lMGN<&&PE$u4G)@qK`3NMts5 z-hW8G3i^+PUP+gMBBHeofq^|}#;jyNgQ`~blSHJGg;Gh=%FJ-os?ykZ^T+BF^Lk_e zdU3yQb(MVzMpo?LGbw|#M=03P*+qbN4KZ>%Opb!29JwcD#j`gUhNd&8@XWP_E%l86 zF}5Y1!W}zCL^gg~kX>42rvXt8bvx*k0`IAz$b6ivtS(ZicFesOCeV#lPLpb96ts#d@VnIhLd+tX}DU$9a zBtv|?%ASiui-#HG72LU^&7@`yD0KsPPBr;V5FOt2XhYf%1ua4LUk7jnh+O<&`_p#U z;q7R5Pdot79lBChJswC@YoL-aqM(9D{j?4tC9tl*uj`f>3@!^;^m133vW2UPNDQ$O zhIM=JU>A6iwOvLV`Ze|1t%|26-rL(d8=(}0Sq`ekPSIS(=G)KSL0n|1-LkHtTjQq0 zn>Bb4igTKyi%mI29ajAU9CdqerX$?}hSgbTmn_kD<=er2VAS=*oL}RI&O?`q-Pr8< zw3@L-aly-_n*PopzE}dIHZR-58oj^K=`>Wrr^T;QQ0e)}igE7rVrk2R#jT%elod2P zWmO|zwM8~;rtkU~Iefk;-F@*^_$6U=cbKEx>8@dd7qnbFphbNUk7Ah3hepHuJh4z0 zpoKVNypuyH;wKj?#6GoHcAJVdke$i}uG*GK9w1sdMbZ&$Qz;?TyYpm&`q5yVq$2Uu zi2k%(rvQWB`_7j%IFfY^KnK!y03a_MtESyl}%1b~M>FP~TqF z69aqBa&YItBV2yGt`wga2L;eLjZ1AD!9L*UJ<04~ILie;bT{y8f?AwaZ)!46&Q6tM zm6Yrw<;gg*3s2~C0PN@Yuwi76@791`vEe3I_?aPI(DliW*6rmtFF~Jc4&snV9l+A$ zM-Q>cX^igoUmzvOE!@xPCH0RJ_n!4H2)$)&++$MbOvCVY3f3udpoMgcoSM38jlF|< zRcS;e0Nt}kgGZy<2Ut}W<+v4Oh!?$lfAG(&#rTCYVT{8(vY=o<0~~#w!;@|GknU>{0P9%#h~c)v>%(m16Q1TQHSBeY#}6^d7gIDCDc6av zEPo}^S#ACUM%z9+>R0+=*9-Hjq(QZ@Rz(6t+k`@4mpRWo0CO zS6&lj%Q~>Z;dJjbWu4Jfc@e3C`SsLS0rppTbx+kTHuEtY%@69XGxpk6huP$H?q8Q9 z@JVvU-%56Y{tGhbD6>ccmCp{At|2vZcFm-APiiPZj9PLs<~Z%>n2x=&BYBzK!uly7 z$~DS~)S_1MI3k;DK)|tGMGHV;%w)1m@og$(i<*PaRpDh@Ny_9`{tDKnAV>y3VXbI( zO$RJf@5OC30W}<~xAZVyZrM9Xg=O%bur_I5(YV>5^`NfpUnkwjDvvkJxV?krZ22uK zuY~{G2Mg>A$oC7_m;;uHm9XKmx9VcXjKH$X%H#Rgd?n~x{BLs>wpc?fVe|}7LiFAq zr$$-=h{yFFK?tRgwtx7r^*o+qateuGZ^`W0Cf6E(UFOV&{$83d=Ywq`q`P1BhCZw# z4x$9SWr`fiN}$64u?@BNTo8@k>o|=ALv4_l*9qRy-nS=^z?WS;AR?g<*dkEef!j$2 z0#I)>%qR~@a?SgrMwhmo*UFL$AA&m&fo~@l@-1>e_Tp{FnMyWInG#AM;oi*sx%8kC zQ&hno4Sm!-RBo#aRTv-uMH@^0sRmuUCKdAP;+nStoCRZ6`-W;LGnmxgHZ5N&xsyO; zUcq?UR9jo5zyJnMh2n7$J5m@`L|NDOmjaA?<-?$4!yKY|A#nD1YN*{O7(J9CZnuf#mv|xmx z7)}4uy;oPk9m*VC-3=>pF4mAN9vZFmxAbc0z(VJSw=iQ{AWUsaf4CFh3dvPrl)-MM zIt-9~(+VeY{kQ%%{{nx`8aJx)QzgR>>|v(5-x*tsc_b+8*6a3rvJPk2_{zmqJh|~? ze{ZsuG+(Q07Tfm1!tD%|A^N?v`gW`gvrx?{4bAQmwjzK53S%Bz*h*$Z4GkJ!|G^S|aU*9__OqSLPAlKaXSx`G z8nbE8nVPiet;yONor+jPdG|+|)F%`AB_BSny<%BV6dNl}25*gCH zE35`8`f>dz9W5r1W;mV@^Qu%VAwE0hS^}`qh4eF56J&q zpQ1~*eu_c z$!-F@RN)K+#t1amu=7GAo-~u;_P+x>xR6_6Z2Yr)X_Gq3gZ6rFl>!{xNXe~0u{y9i zd)e&I+E-9EcGI&nMt)!(iFL}0m-)9j*k|S>EZQar3HU)WQwDD=tNj5Poc=OT$K8{I zvENkAft*wy!VCSKZ0qX60n>0b8**)2|6|N*9Z`!tRa=fU!q@GO@gS71ka$?P7dq=( zpIocIqr*t+JaL_^V%4CV7RCC(_`3s6Gm5x<9(0p}%kR5kX!VX6d^S_iz ziF<7nQ>66)I|7FUqXiz(DA4ctDZg#6`zwuMU();3oXG%Qwc zEjd+YdR4z4E0mM|6kyEL+UUwrP_d- zh}J`l_^H>lZNqp8tZaMp>?-$Gn-ElR~`oXgj4&=fI;F2sdHxKymm!p!prDxu|a|5uw0H zwNmOW_n+XFz9D2vs{C{mNuZ`$gTa5RZ(Hn+1ytc+CA>+^$4%?SsWnvl1szX@)lraa zNWsOK;Ca1m-DhyY+46wzdIb0?n^Jk&hl;qVMCXQ1H#R^YL)vNef2Ega-*)<5Ucb!D zg4eRI*#$wAk6U@#d}~N!Foa6>mPJ|;hCuP25A2Lw2wn(_M^|J1^P#WR6k1tDYX`Y16!&?Tfh1?le_C%z6XnMAuG%L{p${-CIXM6eEzwR0;mik#Rv z+{3-Q!C4B7yUh~OfHO%T<#m4I98tkhqNuveKx)Ig6}@dBJs)9 z=zp`M1i+Jss-JdY z3B!+{DT_#5v?}&wrKYL!65ZkLB*T_%zsPeGrJfH{YqlA}iSiXr_{}ut_Yp9AQ^%d}%tyw8%OI&<*J2aCTlq2V#=ub$o@` z_JKy8xH6&zT6a5+yy*ffcG>u^&_OJ>el;%ocIGmYhU;xa#{S#tvf5FF?=qC=Ho)ON zR^CjZ(Q>eZ>sV^SsgBB7Vn8Fbs&;UUGjDk$k=u5vA0v<5=M3YHOv#yBXMiUDeAkYT zc!5qDe7?QhSE6VcoiV^rV0i4@U*sy3}PrLf1W>3CuqhdQeLHfJjjm_vAFcz(@JDBY$kr`^u9_L)+R$kA`5!U+!DxE zaGup+cUq3^FNP>FQ)}4Qgj8!q6M@c4$*+s*;A6H{dMbzQky5Y$> zunsJGgi;Mqr;B>y@6YyaF2(8BKPMFMKIn=12s6k)AlG7+pTw}Yegb8P#sI|jyVsOP zU#P4Q=GvXC`q&YS$O5I^wftXT&<&)bwE_{P*7J!a6Bxf9 z)ia$W9Gjyo0^QlOwUk>x)g(^Ap=LL7x@#vLLo`~2c#EMG%Ga^)reM^~oLEMA-!t?P$6F+n?;u(K&erc@Hqmmio52Zs4 zzEi@4DjAb^shTWk(jd@UnE6+2D)ZCFx>8gtzm4WG@wEYX2p{+0s6Jh$YF8=!HVTsd z(rgpulyZ+&M)WZ1h<%4A_Wvo5*5`uRU|!WXb`kId(VyFYb{_jCLgOhx3)SSD_hSpi z(?SmV`8aJstq*J42DFnkw_xHJ(5z~h$oK3wf2#}_akx=bD`;?HL+>uU707#~%|*$K z4n#uu4C}fYs?Z%)^(8g@!0RApulX3rHwgsDRQickq>jdBR&S<{o%ty3jq_U;<9NsJ=6B?A>bRfhb^o*l7C-BvS^l~G#EUvSQ^Z9#dFl5 z%r;j9ID_SYQaV}jvfSZXBqaqW?#Hu6BlKV#-xM~$5VQZR$js@B84=+KFJ1!X3})ed z72z1K?8lA4nZu?btg9__Ts%N2W3`tl43@~iuwhb$-tCh z$t_n#xemQD8R3y1xX$<`gzjA}BuEL|GG1OU?ev0I!dT3dB~ogCY#r?adPklx-BB?+ z;i3tsa0GpXAAYYP1~kh|skPw8YaDNSYK9U>Ud;vT-rTw5Uuf4E$1U(I91S``>#sBV zziy~GRKH7#aDSzG=GBlvMV#Y`f6}Ohg$D!VCptC-i|mG(3&pE0MO-k^g7 z8f3@A#j!4hu`*RBh2DIeAK@RLSD_W#&53ss@8`kx^Ze}_VDhGjCPmmXOJC{Mb}Rq)sD9Fp}Aa3)w5BN7K&P~AoElC0xdRU5b?+CJ4HMfo&WOz? zlCMcg0lK4~0zlycf0SD;*VLQXS;5W!4i(Kpnx-UkP)tuKz3tuX7O`q}A9NQ<1!Zhpwn(BZts$8_Z`)qy^@7DS0Gg+T zQ@P;_4ITE*=Rs;p+mf5`5`!W@J{VV}0YEhx7B%vG>PHJ3*BM;sa4+7%rXij3As_B* zWOkvcx6OO6Q;C^24>X=vI`%(iHAC-cfa35FAm@WkB9;O}Z#Jt`W|v4kwHH-JW2k_V z%u<6)AIQ425gwGZ}~sXYE1QT83HbfTY{d!uuGRng#k-}>DB8HLh- zS2r?k9D6R9OBpNPfx|_-Wd$6T)QYSxz-ch?tkJaMbQ{s0o;xX|H|Wa!_x3h*Z8C{y z4Z`7(eO`0uv)UaX084ErOkX5#%~kDVsOprV>q-lLbwOVzE-qVKV z&I^(v^NngL*5E$)6mYiETtng-+ZI(Pzb4y`8;Pz|>%iMsGS8qisT2gK&bvSHdc; zD&mMMyOAbUv{xa}?mM&FxkqT%=6k5=CP4^jw%)$Eq5LJStACMGUyI!r0V<8saT~@* z?y$^Fe?b0||KheC*5wh?H{Dd1oPz`3M{Qk(xy0re8i(eL6d&D9M8iu%TDI=EC^?&$ z3Ol7aMiN(@k!ySqUe4LG(IGQ5h1UD-8&KiGqenq{%s>_sJ<*yjw4gP-!{MA2eZiRe~t4pwt#p? zX(@vneU96T!^@mnYw<1r3n|6+Y#8RK(9}Lr{n7b8<_>v zmP7)&aNoDD^(eA`^wxL7o7gQnx*UH8kg%|JpqVJU)>9dNH8!8iVgNfzmZeZl9rS% z0L+A4Hid;HZqJ`dQ0~-iL(@tDBn*p!%bZsq^lr~G$sDZd9N9q5j2$9(N}D2@{YN?y zMnu;PC={p5lsd{Vg0XQ%WUvi7ROq+2xwvs>K^lJ0&Z0M+?8HmDXN&7Et}EJx>2@%Q zM-_eA%yo=AiGvs=#p7d)bdyw5sB>5Ye&0I^2x_EZV-wUO*91x~59;GI;Z4d0YTT^^ zry6SKVoWR5^&u#zL61xi+KwNAa^e>GNqk&)jYz9uOPS%i&Mv?v$qm`l*P$1YIhvJ? zH~nF3S(gfwsb-A6Bdk5CTD|t|iH0rbww9AIBSK8;yIY)O)3$b1fwUpvQ`@whOTkv{ zSu}PL3@^7M_%11!@n2rJa6RjB-5O*A_lCc>0NAzyz(UE1)CRe7OO=pgM-BtQ6)JzJ zkaM-huSv^ehYTHlVZicS)2umKGJZ_*59mo}Gs02vq=gu<^=Cshb?%ZW2H|dZAZNy$ zsNB`XIQgK{;W7>9YhJxkxWO>^ z#5IR8D)7o^5&@@v96l7SEL-IBtfw$wTSVfx3Ygu7g-Qc|`VVC;@|oS!#hd|HpUoYe z*(E!lnpf8xP~LhU^ub9(l5BLvDXZ5&i(~7EGa}Qoas&eGD(yy*=Zzx!@k0%7v=X|V zM0!{N6a{v*Euougu z2&@}pg!PS?5|@K(?V7VDRWP*4S`Az5vZDfUl18^sHy7x#hdn+EHL|(Br!KAqYxHKv zsGjyS8;-(j4`$56Cq(>LMJ~aMgHZ;0kG+d=)w(Ah>C9%bxO57QTj}eu@3JQ?4RB3G zo5<}FU-a@&(f$MOq04oPRgrI6w>5l&c}d;hzMS*)x0Wm$`33Z3Lu;zG_@Z=P;h0K2 z0D?t6>X$t!lE?@6lT& zjfbY%x+l=5?0Ysr1&B#HJFFkQur}+~e`qp0sM>@>>Z~ zNml6sgHplVVrNK_QWe0R*#~v2#=rMac#9>`$gGf!5q<&S&vRDr1!Y9gsF;l?_We6z z8617soXC&oTh^tz)pC`@`dm~sKke=on`VxH6~;xRML+X}Eg0#Be^6yB$tM??|b`=LBdROoj^it8_z8p+9!6$5Q4x^0lY613#D-t%TsY0FYx4e~oZmD`ll#7WYp}!FKC0se zl_|vZU0t&=Ok-;nXw;Hz?M4CPV67JN>3|TB)5!faOZ= zR;Dzu0TIS&b>_5UNkHz9Y`ywywzv$0}BJm)byR zNkw4mxP#QtoJOpSHw@tiQ$A?B)Xy9|orH`7wdFeqLiTsKZ=Mez6%ton-TT#?Iue3Q zACOfB_;6yo!>bEon21&Vw@}83Du6^jV^&v3W^4G*Z#iR2Z1l@aB~_W9a~R-E%SG?{ zvTuLwGQ3)hCm+J4Ov4Yv4%n{MOj+pSCHu&eB$cyoJBBVs0&WMk^~~7XGB6xrX^uPa z;g(pg*R>ivS4u7I<4hE5Btr&7p1P^+2`wX$6WPYM*ozz8yosVTA;5i;pYg$*&BINJ zwJ~`3xv3wB0spx?AH&d&GPtKzMh@~DBX3jGhPWOwna*|Rkk(WcL>?IU%Kvi4;V%{S z+bkits{6pkUs2}NTDK5{sHTo;C%rSNC0FM^kJ$0)-a`p&m&A$DrksY2aKISBSHe^?GE@OOMrU5)$^7ku zo4n44U$EhlYr59DR4GWW|#wKtmPLG5g_k$ z9=)_9S!Uh!q)wyYu4hYfL!sD!oQIZi6HyNr>JD+GQmdGoPvPrOg#`htmXPXMKiN-N zE!>vy){J=K~UG=QmR>l4igC+OtSH=hOpw^%rcl~tron_J_)0@HX0u$)gEY~ z!FkB`n-t<|IM?I-J;hXCsph7;af3RB;}F-4d9CMdO2{-t_3e?|1hs8D84dLN#g#D% z5Xpo%IfBx2%78j8p8%7%07pi{+M_VDOgZ!I5QIMJHg30ztyrv7P7j!(Ui#LqpAMO| zAkdzAr8}BuV%y*^)jhWs+2+6-^z2-Uz}}NRC`W#Ky*cGshV)TQ3WVB6 zrkW|FLqz&?>kkc0X#m#x2MrLBGjYt-<#knnh-%I8RFHat_pSn}9+Y-G`Y$*a=jznF zFv^{dRU;tYLdZ1XwB_23A?$p(DTL2?jzlI8)*jV!h#TJx7=3+Uu6gqL3LMhDic%ct z(-S@$g@L?@7~(MvXIlJ!@|=Yyaa7J`#~#c&WAKTfkiC5O_04zRyB@-G{;v1JjNf#G zA8-^otN{zGDyk&L8;%P4PAV)&GqDE$OYJW%Z6o_#*GNq3PH(>}@MYHo+smx;$#!_J z9R-uVEl!^5MYwg5kDUL!<%|Z^8hZxm4z!3O1lN2%;>)j*Q@EI(;NzR&zzrp(&7(p& z%6_lXj*OC3!)oElvB+98#Sk&RO~@PaQ34`Wyf;11%mwYhupzsc0H8@f5MiBRr-KUl zpJWZjx=s%kw5OUz$kHxT|+`62b7*B7k zu;)@>3T$_Pl{DGI0r86Z^8pSQ%Rk1!8k^nekJ)I5J5Kx09Teuo`zf zo-o>C#7B`CY#QInTRRi&I)7X1F+wCG@&rEDOk z2Akt#=X*_>!mNyRKgDwEs*i9sc|r5NevNVuX0a66 z5EVT7#5Zr&??&-GsB~6H$L=y zG_ zvwboo)lfVVH`luNs;dvJ&YNLm1s}N>;&rD{chFQS8*AA(@`4a?7U1+Jndj7So2$98+W7pwWL(~MB?Tov;2^y0 zCi6F!-(qZy!k69!g<90Cs^v`h(&)rx!4qOukOwa$MKVx@t?N@Vt8E_CkrB+%hMC*z z&S`gePD~hUq06k;2yCWJ;p;byuxjs|iKlzki_X_v=|N!?w-2jY_PxTgSUAM9{vVN% zv27L8nME-(a9uoGN2naqd;P06aCDdL+If9^`g%hdKepBlpG34Lxpp~9Au^wk1dt*v z2uUs9}jp;osa>Fj9ITS$L6P5C!79^Pf z3P~6@^|1`Wvc3$U4jr?K8uJ`>wzND^T!@BfRn@a+KLu+Yw#b9t;!**&@{Wwy`+pZc^ZCt7Oi9b`vAZF zup~IFQ39D@QJFAL%^!ObB;+Mkb9yDONCvjvhr-#% za{Tm(Kd7hro?U>RIdQXM6qor0qh(^u7r%YYLS+=e8tp&*3g{J$T<0m#pEND-PVKcsO^;nwo$O2)9)f~s(#b3qlyS!`tcdq=zA5qBM=gNg zV|h)q{cNS4&TOLrGl!{p1aE1NNHh#dIO=-46!CW+rpE8YGC@CQKU2E{2f*$W0>x7> z8dEpOX+FqGWLFZ|0*>tm2riYgOQIo^t*fWs-sAzWrmA89rZd;kLzK(~XJ$jZCoFN? z2EUXd(RM@(!ZnL6?699xt^wJyuEt0CEfo=J{TXYL1|zReYT5mYAo{E>ck^IJzQ;?9 z^y7h*-%oeF%d;TPmThB?NU8rxQPGCPInQ8~6gNUzAW_r2$1o#3(ydzuKS;u<#k~;3^Wtl37A$H zn8U`Qw`Y)qH*bL99d(|xN$VV2XXc#3;$X;9{3~2+rPdaj;b4F+Yg-jx)9&k~(?(-< z`Z1%GuKmA;K~}|^DQ&~S`1hj-aE-oKZQ6;0)521Q#ZnfbY4`xI7(<02r?+!X`H38g zilpiS4b=?1l{j3x`CZmAI;Ia3Ftlp3;>J^;>4&l>6F8h%#3{QgAy5l(9$TPB(Z!dt z?L_DLsY^?C08^)iVvPkgua-7SD*1gL>wF8ljTj4wdRxiqDuvfYX#oaVx4URAUCnA4 zz_DMmYND-VsnG>N9k^X+5jI$Ao5L+9Fc^^UsVBRMK#OX$KrsHvknhbdY8l<`+f$}` z>Hm61FpG;k;n!S!Z!wtyo+GVMMkBFnqT8?%MQxI|YCLgY@Cz6?x(C|Zf~+l(5Q}Rq zf^}Gm-8#fxsMc3?`*SfU6_nQ0@Km3E9r4DXrf?iIsCMm7H|!#&xfH2#WGkWhK|fI- zh~s?hCeAd!{f)V%r8cGHyUzZ-T9mJ4JMkD##E3fo+X{i979jgN_5Hp-5?Wh*Lj#YA z>c`<9eBBet?+#@Ap4rxoo0QxgX{YKX4jpHbc7nWh2Nz^9TdmTh7* zg(||ok`k~8)xZvP=dBJ8%nTSxR1E_1b3h8ju>V*=91774oPdhTF;U#N(p4K-o->uI zJRC84+zd_2r+g}HT76ZGo0!Q@trN*v(Q6{Avo(F)WpY0H2urEKzDa|C91DE7MtUU6 z!1J$D?uGVg-oQ@;v+c?Mw;dxydlz;g9r>0O=8!?90TYRPcbQS$IZ>>qJ}wbAQv$4m z3xYmar z?n<2bs@+mC%kdPcsjH`F>b2SK>{UL@$g4V=2(rw!!dNaVDG9Y^z3ET$*2SdI+O&~R zv#dDF99*hRi%@$T^vY|(Fr(}>)%yjXh8NKuPc6{j>@jj++E3NC>#qc7#o{yS8e#Ie zW%ACp1Th4FH_vEis^fFax!dx5 z&h!E~l~-)|Ei_-qVZUhVf0Yw~qV1+l;GKxqTt1?}uUD;qYM8!zx|5|$Lkw5VZREGI zw96#-Y8`)q7#8~87q#oRgZga~HeuVY-|V&pmE0PFMQ$hjjC3VWIB97Vju$X~^0ukk z9a~hJg^N~b*HG&Z6p-!Pwd%k@Rm!X>fN2H|`3Z0-nxe@bL*iSK6}#=W?p<{9`z-en zU0Wwh&7?6Yqn91S(Jl7x%{zd_Y@c)tM+R6%4sympB(Cv;j&c|dnwm+6ylRflUg)@` z{yGpSa1T~sw(}Og0jTX22$E>V?8g{`lY9HL)v!);`DxJUMyV+l-KRxY=ontpk%q?Y)dTgbzN z|3ZbeaSp3u_+r|K(Q>;X)l@yQbOPOQ^0Gy1yZG{()&=@hbNUAZ;#z-1bJ1h?T85L(hvXLUGT^zP5 zB#gNtKb&=4WP)D{S411!6dg7qL#TK=Ua@N`Tb#boH`yw(?;v(1oWT0Ult(`gR)Q=Z z4T=hlh7(y+aN@fn1)k1nfp|K+a6wk5Qhr+pJ71H(t?v&CB({@)Cssdpy?5>hnams` zj>ctVTWXbfzJA$s_;5!J`#8zRwDC_ytP!(WG#)o?=Po(gvdDVTF1@v^7%OB&h~bau z?A<-G$Oqr8-n%L(UJ|9)_;=l7SJ|DG@>y`p7k8OXni|;&?cqYa3ie2DLsPSkUURg_G_ zz}4s!@g}$xLwX~@=pt?9n9zK&!x0BPGc@bM;?34{Z_R2=q!0zA2~}dP2G8VP7dYqc z>&gA28P^fxRq(7zowfthUArxu6>`Nvqy!oCUAJ?O?n>QEdxm}CPt-{Z=C5U;ufvay zpkcsdSUX_hIAuR)d7x3tGcuw~FmqPJ-}8Zm#}QBEJX^^YXkN61|9 z*+y0|WvXMc5ej-^s^c2hRx>ZWlLM;8T0r|+S^iadj{{#wFHatbT8oD~O*<0Um})9e zfPSHjQe@ie-paW4HqyLPX<8lFXp;8Gl%rS9So27$X z4|%A_4W1n!D((%+gCjr78fc>28SCO}MAKv)RFModCvV$wk_zaFl~|1G{?o{V&$2$H zjx=QD1S2veuLPe_LfV|hK|p*|*1N(xs1ZlKG0MNmW&N34<=s>`zg|F!!i{=DdlpYX zQifc|sdf%}7Hi*>VxSAPsQW>aByQ0<5@7;wlk-nUy3s}3x~fUd+JLO3>%Rigxx0CV zvBv;wQ8Yt+&ILDg>sK%0^Tt9-dT;j6_=T`3zcOPxqDZo;;`&X<47LwbUHlw;mN4cq z;L09ucjwKyNE|xi*{78G67qwTT%qGtdeq`4j;1(7POH66zme8>OG13lWns$I3sIok zJF`3S&$Q$v0%MYEfI+eKhiv!dHfgE28Ek&x0gM(PZ?_L}c=%sKAJ|g=YpOG}d zSS4(bQPm1o741grg|2boFfXcy`&NZOCzAA;A{DmPklc9d{0kd`-=Uhk^hf}Cy;4t2 z_lmBuSjaR2W4TGM#A&9f5<9Uc#i2(>Tisuh@LPY2tLN`{yxfIeQ7cYB5RdZnKH@pa zZx-2gD~O---Xi}iC5&>%MHq}=1YDfvZDm`TE2)v!l)=8$o{>9loqji{*G+OkH?Q05 z;0JuUEA?;~)eP9?tJXYbaYo{(m^e|joWZrj=gch9?3Tsa>Wlr#SJ^j4^w|j(t3|r7 znXBos|Hz;PaknbFwSI*k7* z)0sXSE;BkXe)C(6I*}I>*_V^o=EBN1@W=HEk5uC2``l|YtLS)W7@R){pyHKIu<%D zz+DkmWGgAUk>ga*fCEv6vIy6=%ok-wmrz@nYt@x6_nN2^@n>JAvVxG!jc`APMbw+0 zcvpw3!skwNuL!cye%s}Ew|yUwiEhhZ-K4RNru5C+XAlZpM@o~=sMr#mSyK?mNJ>-q z7f~~4_G<|^Py-#^5u6YNWPQT@G-@T#NqZVnZ|Ps&K+cOh{cxWwA6qFFVJ!MyAQBnS znPO=dtAg9|SvCpR6iBYYsUXm>OxhLLa6Q)5M+-TX>c09I>u66Qq-6=F?Cb`IKp};r zBOdcHXVtARi<1{t9{X;O&ALmOu zfCRgOT#cC&=AFBc#*j~+Ul<^w%T8K)qIc&#-$@FI@4d0M!02Zx`;8OXJdbO5R3{b9?N8K#(fpc9~$QBze zA?feT`E>_wOtcvdXycV?7!e5wH3*;rMIk%`t_b&)jYG6ZjwK|Wqi;qgfSTFaQd`yQ z=*XwxeOew1yJXl^fUzB6>e4G*2MtAobzRUW^hzC3BAEmgPxoFNNWEvn#Q05uCF z%TTIV*MKvK58dQ-k&5!Jy$J4MhCMFEF2jB1kp@PQhS4L&2DwQKpV*=Iq84XU%>U4|U=cN8YWyK-IkPDDt;3gN=5->nm@ zb{o9vfC7d$11DPKYjYS0P$GoKLUa>EKeOk|=|HN}E2a^`bD|8yj~Bs+CP_{L4uH`? z{Sw82VD%3>&?GYLlL-ksVgy-=#%9@qygdC!8h6#WOjwk?ot8#kI zQ_&mC=l-XeWi)_f`sW0o-h5~FRBDEr8GdnH30?_lO0nrTf>s*ro>c;CJolI#zpaTg zy^FgF9^LF!v{l0J2k}^Kb+)L+uoLudyKqUB?Pp1aqWe9g)|V4n*G2O`G(S4F*VY`X zO~5-KZ+)##3;lqtse*R4ghVQ5l3|j#aJS%2yU4t5($AM#HUDn%3@EIDKR`c9MSKkU zj?H)^!?4MB0Rcmb)*;^|0wjQ2Qh>e}cIs`6)Bz3;=y=7*iJU$hVoVsRtdknP_GKL# ze+*7TQNQdS7ze0$-Ril zufvtgkf$W}SjXgyg zpWrQhGA5le&`eg3jK@Hhc@k8M*Tg4+*a5K-epK2SmUEzZ+ujBxtu%L%0ym?qq#;*~ zd=-D%6O0#%MI2?i`S2gF&R_9t|Opzs^-qYtX#U5SS`pZ_5qj$%s|7A-m{nQ_Avvc?rhcF5S?!sN|`2V96y!H}b{ z9bH1_UZGa$Ni)ZeoM5xae8NGBAzZa#kjT=}3&K}08IVxK0y+v~vUU*VA5E%EA_C~h zsum$RuAQCUJYsCvorpbJb!I>?hBQCsX1NU^y2ZLY3dXi6;rO8`rW#tp(IE*q9oYbg zQL}!2A0cVM1FPiaA@C>=9;B}vYZOT80-^J^vr$wMSbr}%2r8{$T8X*`@e&hLvlH%E zAWV?Aqs5>EYpm*yuzLW_pt?|UdtPI^gKlbu+JvDqhk2d2ACohPp4Xl0Y>+0OaJWyz zO+PuX5~&b;%H#*D@jlO1B@XmZi2d%8cX0*Lolv_akh%ex<@65cDQLYRjMjD zFg`2S&l;s{Uc>9DHF4`DDeg&RSsMf2t%w8mq0SSka+Ssfd1C?&T|0by+9rz{S&6bR1qx zi&F`Buf>;RHP$w9i>h2qh=reGwQ)xT5!K>Oi}o)!g>VxPL+;Pw$K05VD?|-Gj0+x- zUre*#xUJc(In`6chz$j{J1_2)8<$06S@Eb z3~vSgl^n95a>4NIrLPfoZpj%w#R>93ASv7w7qD?l7PS%3lz-Cth9w>)V%2c!!5^djfx2)T$H^^n>c7pY_o&4^d(`@9i| zls8a?@}VE1o?rSB%Sc$(eF5`5+uWS!Kd5gXx?YI7{s>1vTEGX}?`}cC_e|((EznV6oo>nBf>dDk z^ZX^=nBbhXIY4`7ac=N5h^Mjn1W)ZQw%+ifN@H_z z$y`J}LU3IfJ%2Ta=Hsz%xa)>qC2eKYoP7;LBI*GT;DwgsDIW`)`UUQ=w&i!ed;$Z?wdIF8wj95*4p}778Tho@G z7{)AEYrtwFFrTs;cjf^tJ2k;uH(1SU_{75)e<_gNKl}u?^%ZeWdF&o_#{8WpCV$UR)>_Za04uus(jhPNLA$UKB$bW)xYaIq&_~H2>rY@#66xRo#rgp0&o%E}jKbq-#9!G0 z9m_nhl;MV=&d&!uHvxYGu5yc-$(goBa}C1GqBSB^`|BV4arB`E_rFEM(~Voe=X1k8 z*+731mDz=o}M=ggiG-sIyAw)$PUJf~exV6+)o#!m4VPBAdU2Vx9>I{M}($o9d( zT>`D7i>+__!|AN_x=9w-65wNTA(dl4$mx7dVI_)W0+H`|(- zWC#f=`zU(9i)9ArWWCMFaZ|D0Th1iuv}QF#!RMZf-w^)*XII&nWV+!yot|JH>KwyZ zY!I^p#^46W06c=$w2!Q3)>6f^JEf-ki-JVyFMgU6qHn)1E7fOmYuF3(?ds&pLROD4 zPu+R?R^z(r(jLZJ7z;o^&!LV$yTM~^~;#}#cCs3#Xe=~k% z!Cjg1Eps;2e^-oT5MMPy^!m%-XQNti8S)i3_EI&Yw>m z_%ndDFM;Me*4^xFV;7q9t^$8W`tcK-m1L3^GkVj?yMU67x(iGrYYvo`SHi~M%rY`{YB$1 zF!;yYahI(>=*6&!s~k5b@tEa zmx;KH>5FOs zIqbGJO>-IePrIs2e6uEWpiU`kpclmRe!)XXEnY>*95ZZp=-ow7jGES@H%JWtKw%2# zfkrpVOYgX5R`4njnvMh@1m3(DnBSUC;_*6y-#8y|{%EL15AlF%B9)AmtoHTk#^cY- zqsZC21T1~!dE{RN6O?WpzGYB=I^>~A<_?dj65``NFcRECxW(@59mMZr{?rumyzG*3 z39zrg>Ht|lw>hgjQ#6lDgLdyeVsj9g*nNx+m^G}w%}MIaG6V*G-CN`TnJX9S%P|_U zX`MZ&<~wrc{D5E~f`&!_DLAXps%Yp|OlI97G1lFIGwNO@Ln?lbP%5(_$m%ys@K7zG z^e9ywhwKX8c`oxZKzAJ7uOJ)jB^n#sPKpaQ!E~Wfunenv1yNb_(_@M_6}mRp3=1jF-d8|$eWFraJThIo9f-KfQ+Y*sexbeM3fkn} zm#^#5Q!pNo#iYZ`+dPSV1PwybGCSJ1Nn2ay6%LE({8ztZWN5{Vg_?P%BDT zx+-IwQl4IfsYnz-l?!Zu27X=Pa&qoHH+$`u*U>XP_l#x%(zQ~nJ((TSSP2}hcl<#= zn#J`Zrid)bnx>$Nki?C9BYz+_?Lr1bO|-qi9?|-JyJFk-sLin)IUEU~h$-tYU$X21 z1UA$w^jYNECy1|x>U|0WyKAs$<~D{h9SbOKX>!ccDm4A|V(@@`AcUr*qd3vC!^7bA zjd^aMz>p(Nw;%P``qs>gP>TxMk`X(Yc7Y}KJ%_CIS>JYmE$<^0I$9#!FfuvEbfA`z zOvs7CvoA9s*jX+Hxtf0)!2zWgR$7DW#%@>kMCF-{Fd`<#2kw#;`0qqUbj<8op1fNj zE=PW;gu~RStVnDC@TzhA@Ai$CLDQYM3|z<=_K_dC3U5wwmJyT40*6rd=fqNvja=SD z=yDwnTHoPyiUN04e4O9Vr{%?-`7Ed3^s3LD)RpN_nhzy9{{##j@nNmND(Lw{I|9OuP=nt!P$~<{im(5$Y+Fv`&E*ZifUPIhmnR3<-$&ZViD({!^(aKp~g`zI|;i*`hoU#Cmu|s)zA^Kc+}v! zK&6#s>*xiD0F6iKo__O%6>!)i;nnqyA+#N_{4tLvN>zu{{U<*cjisqX+%%6ItMQJD z1;*sYR+fs!L=%`A2EbLE3Hky^yTS4Hk$0QOqUewhLMasfieM^H2|N`MkSan_<1 z7lMg#dxdn;xh3x6w$AGCUY%3qVCG9_Gzm-IO&s#vj5bwjj|Z+MGl@Xy@Wc;o6D2cj z3B;=C`EWJ8J{;-_Hh!0+B(XB8C&;#cho^(NFp>Kh?DDGlovUao_kXqVe#z z+`jKjIq{ddKj!NQ-NLo>Ge6>%@iBRjt5;duW{Nto+upe1#UkOe>-YRYNy?Vmozsr5 z8}Ogm4jR>5CT(X7&tx0MES_rOVwT#P_ae7o;0_S!yGtBLO5)K$J?jkhM67T{+f$82 zLR)YM$nQfG37B?is|IGlA^_J0E#8bjvb+1N+c_UKs)t>S+CTlh7T6B6DO`s;A=)O_ z;*=Za)jTpbxq3nlPiXb!yLGXROhE=)YU{8m&(JK%DG|x?f!6bte_Y?mC9nzud^I6K z{wUHtkvSq_EPXiIFuIju5Q=cNL`hrY*nco9g(^dtb5_|^!;vNxK_pGL>C4P?>jjn? z*pqqQ>3HG^I>BIe*`+VesXtad8SxDZyuvP)D$pH~O2G z+*QCGJk7a9D)@<4DVfQgAjtokEHlEfs4lS8!BY3E8WuQE{=jAp-Ll4d_3Kr^USb*E z0gnHuUS9|vYKhRs=8@YgREDcOq??yrbzF%TEYfc}sC+tvTgMAbE-*~7385W8>Jc~s zqf>oV)UPVQIjU{lDP~SHPT@)Dp0i@GuCoOH4P=pe`n!1jD{)$#3i%O&P1%OtFFH4u zb|<+$ zceoXRY^|TV{$BtS5MT(ZF1v3-m%{G{-B~l(&KUtc9Co+8-gzw1pSf7v&x4%ZAt)An zdE;w~e_L?)5H0t7<3Kka3WojvUV2FQ+ev`QN_=ZC(xh2XQ<~d;CJvc?jd98w`bzA5 zYTRLDV?TwF9Ajm9;MZ6LFL&x)d~*^;y1U>4gESo~e?8~E(ga&LXgZV?9f3Kzfb7s05c5C|1PtZf>xZQ|DeCnxsl(XAjC=|Q|N zk>HFQPtq)X6{mvA3CW192*72$-;5)OASjQK3};GdO*-tFic)DEP3P+q#mA}@XRD9v zJ;uW(vLXThf%-|a@ik#B%wgLsvaA zATe9r3oF_CuEtmU9_i5Ed61oNPhuX9Q=ZL}{5N=l_W)|`4f^uuaN@E6+^+6#dt!|t z51dhwWo4*hq1W{1*heE#`cREgU1FCVRv16_7-|;-U6N@(Dd75DnRkyg3e>o|tUnJ9 zBXQ{uD^d5+qMjj?Zke}>h5S^A%z4r|^pZ>Ni?!}iONNUC_H zGX$uTlsNNXJ=!^L0oEb|5MdZUJp0)-Z=YeC@S$U7S#e98B*(8vhHx)cD1aatvO8-( zd>;_W3+NH^@aWJO!WVlEp@o^R@gLl71~F2}4yke;V@Ye&n;zC9--W zWT>?>F#D9GH0=8QB?WP|J;O^Vs!K*BT~0l zuCfJxhIAK`PLa#5J`v9iQ*NCHl7EUh6p1t`-B&$MOkyGi8Ef?sue@DQnw;f=(Cr+u z5n<0HRltXzaQrCMc#>m#f=D~itE?M}LREl2TbX7kZ9{*f@Jg++(sIFVe`c ziHIlkvV4op&j>oWoV8!Attn?VDfRD28Y+Ic8Q`YT?5Oz_lPwPP|CK98iW)112*V~< zp};Jb>RT7x;CPzXoL!N#XG>)Z`H`zt=?z{J4r&1c6G-m2in3lpG*0U1o4Bs@a)Ok!;MlW zB@gp#fMqZ)e1pd1UL|**QCD}mIu~yw2`iMl=Z*xIX@WN#1g(XzL+xbC1nMV=z%zk! zSXvtQ5z2N+7&mgY{#hrZhb*D!Y>sa1)@`EbsF1kR)!rI}kA={Io{Ds(By}zT>CPJh zj?Wxx{nez(gAZ^b#SK3MITbR`E6T;U85k(4yVL{2>tIN0dC_6H*F{;WN2$nWXR9Ik6keU z0zlho52eTAX^sC}!Th!J=)dXUpQaVsl(iUf1&3r9EV#J-)l0k}4-oa%%GzL^v4$RI zIzPFUqErT5w2cyb9YW9Aw{~)Q%L!B*dDw96vAm+LAo95+01U=7KkhwNTA+K6&fr3( z2=CEaepxcEY8qCjS4gswsNUyvW|3Q_)^wPQ`=U}WMYQ5fv`mWZG+y_go^GP)-+WmT z>7-@tq#%4`0(;aHf;uh#(jH|Po5np#iDr3C&xDRUsq*X*( zOj6pDCOlXs-|H#za|VB%nA$xg5tdOe^5)qVhpw+v#aZxFJUW#7-WFFDGs>!vBTDZH zpDC$nOKEd-BIGlsHC5<&Hx)1zUHeGCNVFD$5)$JWf)Pvg?mC(r5e<~f=dpBfN84WVKPXf{SNA)V(%rC;dn zdZ4c_G=8j}R6l=`q}>W<|87E0khQYM8lcpnXXTbxL3Vxe$ls5i~)8Q?i|B?h!bd zw0u4mxkR3WyL#_63Y>!b`v`uAn>Klw7W;oaDBceE(gLWw2Zc0XC1Ft2LgSn!p0e%$ zmKWFFt~0%j`5yDrf=d(@vYz4HifNgRRb6a}kEbGpa<`58D#$mG84@BTDdlFl+nQkg zG9?b@aKc|Sj1!ad)7)}_Zn zbnqVYe4!FN6iti^YQPun-c5_(dGg{w!l6ueXN1I^xAJML@Gw5_IS@w3aRf=_YciQ~ zE1U#scJXixS?9)Y{WzwL-yJm^Swvyh5pqh^g;3rXOx|56SehogZxyOBD@ zg8M-kC}Z559RV&3Ukq+1hV@6ecEHDxI2HijFr#0k_%4CXn6rMO55$SvBGWoP_r$Lo z74D)QwMpVJR!+T(%xscYm64$BAE8K``h#f2&t9pB(x|oRj#>~AxrdG_1)Uz&=(YrU zib=eq;Cm$1iL)BV!Np-)emowAc+n^U?z8znQta35L_GYzX5IWc<05gL%BvoqU#fLg z6+^2?{L4`OiQq4tMsB68-rySXTMya@p_>XwF*pcmd@Kss*8Eki3eCeb+Xxa9K%iX; z-f3U2xnM(zD)~0h{F^-n+aZ1hucUe86v^NHnGYDY4!m71a?!2{fTUbtu#>(IpOjtN zX;q}imEdH0$r&py+lH#&Smp=@r|@{g)a-L~i-e=_JfAZir14>;Dg1@(qO(p#fHS1F z6Or#d%3O;UtSOrqucH5sHDt6V5}97`E$iI3hh^N>nk)9|QvvLpCUvBFxNpfeJO_KC z-@Au0wB59SQl<>46s{6#>w|#z*|3f#Ofh>8=lCxnbO+zG8T$)Q+PB=CsGdOF!#%ba ztb`sFYmsk=$L`4aE8N^oC4Eg{g{+jMuH9ivF0MSwRFA>PWHA%&!EvJjQ6qD-UKyTz zQGKwYQ}utl3OB%-m3osD_?K+zsE6LH4SmgIk0478ekZC0#1svz*%?QDEJ5Z6)kc>S zSB8Ww@V(+v3>tPI9i&|Yy6R^p=(wo^wqpHzgfA%gOsCTpVZ)>6!kV@LL&t*G9$Ss; zk!&Xq3KL%;l8^dLPZV3&9YG=%;)d~~$jzC^p+_uZwV-}Utbe$TL_K8rjst%jjj{6R z_(Ea{@;e)_9=B{hj=XHGCBETjwfO zSlu4%4Olle+#g&UnD=xTWeXnjiZvX>&W`V2@-6~f`-m}&Px-gXSecxLA9B(3D?*Us z3Eyt#9&SKYvBA3g>=;aB7n_Q7_v@2i$!PYJvkiVuA8_xJt9(91R}Veh5`D=3`f;JG zqxV|ytVV?N4$V197N;_jK4f_XB*f~IeJJjA6Qx8xPfT0i zkj8(+Upm`B!XcI=nBLot6A!$TO}1vsZ5&H0W9M%P}TF&00PnSs`w`%$OYGb7S$0w=I-iM1NxGkpqP9coD7|TpA#v~3x zPcLv({;IU&pd0ydPuxPwI->>IIljrGShfvwQ?aUe3pC~!CuZ@wnJAK$f?+Jwu5*pf zIxjnyb~Z^x5%%Xlc*Ru0?^F=pya^W%seby&d&EH}+H(1wK#~G${*p-FuFp_>XHoc~ zC4?iZ`U`4B=S4i5a~uyMU>)+S0gsYhru=&+e(Ni%ArRBg^@{z1e$A|n)%P3I+}E1d zH~7z%w!!1MZOhag9in3rG%#dIS>(&9UmZ}mj(KKs$yKQB(mCmtk(A4Yp+}Cy$)}v; zYom+{;JDT!*-^?hjO6@m+paGFi1pGi4pu=+p9wN`>AH zXm}L5oT#Kym9IPbe7M7AJ)6ghV^$a2hYCr3=7=~($&VG0`?Jpkll5B-7^Qbt`JLE- zDSRMFIAAU39@YCJoe$hF!7>L>d3-HIb32uT!OqA;#h7f`WS{iSOAZPQ<$*j|`UgLJ z?&%vL_hW`Q=FeW+GM@vru$(R0@cKus^>Th znV6SbZ0V|TQL~ELaRlAIMtr@oD(c~$u~VtqB~b#`Pi#MAFKm6?d#}JM)-~%-TycQj z4mS_#9eaC+^%cfJx=*62WaYKg#NcYX#xGl#RVHc!ExTAgmnHN>cY9SLBtUGhdW>R| zU~kA}>@pkIx+z!4?pe zHp>-fQ0fLAM6*L0;`YY91t31K5NEtN-u-|+%6RB$Bs{d<{sm;}ovI}6TFN|jLjPCs zqrtuG$*CY=k~MYgJ72&5ryqP;2lqls(lWszF8xV?T-CQ|s?Vj6oI}qZt-&PAf4dYP z8l{Gh^KG7YD zCVLZ}<{)KSCUBa?K=&ZxX!$pxw!9|I&>wDm8o|%d8xXk)B@pyXywl4f0y7l^q~3v0 zH)ejbhl)vtRnt6Cl+yp^=)72H#}px3{|j#O5EQy?4LvR)4OC7I&0f(=4bXmLjqwln zheypZzpDH2Fn2zePM8-I)4$(ut1v@vaYK{y9{{se1c)sANoFIfr&> zavtp08VWdn(3$6HJU+R^eulL(LI3%uWo5m1Z(}X8a}}!1fAFBl@t}re?7Tw*y#3Lv zdnn}E8(zU$6(+5-XV8sAHyQ`K{#O)b^3wrbrY2CUI7W6Lqm7e*Qfjfx8{KA*AxJJD zc!PH3h=wX^zigHcKEz$(-5DmoCvP3^#Rtc%PZ`mXHRNu9{nqtCNI$Vs3$X@ z0eNCEj7WK8z8g(0#gsb~aDCdmu#{>SthawL{=8q;yNNwz_wzQ4Co!t(3W1-Pl(U95 zuv%-6prL$vW%Lgdmsx~BjZ(H&EMoHDOq0DX>H$n=0yKy9{Z}kb*AXG8UxqTav<7HB ziS9CwS;(A3JxHsh8*+1^bIu#siVw%)r`Cfg0VOgo+asxVGl#{r$^VfQ8dpvBZCflZ z-Z#=t@4*Iec_^cb>k9M+hLI$aW`J@U`}n-3bqQvKKs(0rk~FYlFqgqC7c2DPy?To{ zuM^+q#2^*L>LQ*#I&y@-)L5JD{T|LU&sh&JvF}4eS?z@kA}8rOpIMA1kpyD#Q`(d> z7g8>B22~4yeFvO#XR6dAm0oVBy(kn;X4J5omUawA<3Oo`)7n!k?VE%UUDk{tXiGru zAvIv@oTYqn>cb3GoA9?L5Tq1po{;+RQP$&FfF|#{7LxG~5n^v&xecw;3)~TmazKne1jjWa2K_R?1)iQXBi|umn zM$*oBdB`{@G@_FE+4>sf=OAHDH6-#Aky7~)ovVa92Pr~5bfL^TQIxSWLC2$A$A&E- zpt_hPwGvoee#n|W-d#<}lC1$XvSNIz2m`@wY`}NXj``d*nMmgaF?=$a8DD@xMqB`u zQ+m2N($MqZt^0~EZ08X888({7_2;*8fp#+G-a$`=d9iPwTltRA1YeSzSHE6}Jbr9P z;R!@ga7o%xgAt5Tt-lg53Z!{5=Gcoo&G($Em7}JmVa2Y75XQoeUDtAE( zI`{gc-e&2uUHq=Y8e}2FBB8)hfE^wQ>YLfN$d6(Z(`fxc11w7*nevOWZH|VRdiZQ} zPs`#?O2J_zr5=r^nLZL{7XTnS3{jx;JBduWG#TLE^JUYgBbKVQHn4T)sec9&})AA+zAE;BWfs^w&3n0`}L{eI)otHMS z2fg-_ItFyZP@{8d+~WPuO+s8ElX{<`tU%WeheK3;VT~18DYT+D$M4Yc830L{TWA5t z!4ShQsy1mvzQLJGj-ZVDnech88`19NZmwPz4h!79mx+Z7eYWzh!!x`xJ1Af=_%ii- zc(hMA5EBj2FX{{Qd}F%MtG?e2k_2@wA?6WkTU9$gDn3$b;?RD;O}nXuM1O*qbIvM8`2&x<0h5}P zNi8`7pxaz(1uU8-7Tv$D>jt=-TqFA^n$TYfHYj_^@2D@0yE?A^Qh>(u@%oODfI z<4}KygdudLVpmQLnjjA@Ni`jOWL*eyve4n7sJNnn#^UOX!whmJ1byR{4`ry2bYYyb z&^0(DV)Ft9fu=RGhF)5~lDzD17_oT@ zPd;%Ln#?jhaKwf01y4o-IC+RF13B>#oDDJ84>}E{<<*)MwMwUx#w$tE?FD7NP}?yL z(yxc~RUSC=$Pe*ZkkVO6^c3xj-Bm49U~Q-|Bj+d@&B-2u9@bs*`1|pKPjQ3^333)2 zn1s;7LZWmwc@}xr4CM8St)=IPk1B8nZ-Ccm!goBj2jp%7BDLMH)&*56=txtTgMZ}M zD)Lsj+C^fawYa|6a5qnT))h4`aqjHG+7~-Dg5o;*Z?~jY$emcW=FB^8a8kLh;_tG7jkj0vL)T%UDAfP3OQ`_ypCk;cjHDukQ3ou^F)_^~aF zD3r zQ-m>E4FPP%!ai%cHt9R-X9T3aj!q@48`=BP2qA_rOAQmRkxSMzKH4CRxE$!?QPrX1 zRX~N-sMb9;RuPcYXfS{Uv~c$-%h2B)7SBzVCMf~u_8Iou-PN6X$X80ELZ7j%#ZP<& z8e4D{QBbXIOq&KklZP~W3D$_Pu{b!ozfq1d#QW)ss^DLPGl%O&vXPY!kd)lrIyPaa zi@Cq~T@GPXPJShS?z*uWyieQ(ROVcjYt`=GDP0oMQnDkvD8XfAFOUF6xzjKe{xJ{5 zK|x2QSFZOW!?@%OtnA1)V?2|Y3-s#&pj@^4I@Vm*f3N*QOUwj^duloSf!>Y?aeQzs z%!bFz@E?$AWjJeMurRF{)MIVvz(7Isj4%>IL;247nX7%8K{$?3m7Fu--?&4+`{raz zwo7i9ZUBO6jRa`qlopS=HGvrfuog?Y_AY~(zd?d#+G3Ewa(wi7US8n&+ye*M!@*9q zi6oOkh!Mocu{hOweXSI{0Ed6=F(6Oc`UZwz46gAbZEtJTBfWdo23$j6G6k=N179Ny!4T8KLwM;I+d z|9&;Z-<{-@p6h_?f*NJK0&UN_+t4~)Or3Z1ggZyA)WrZx@-+nJ?W%MXvC_y5^y@Uy zW(0La7dSc~uYIJ1IfF*Q>fPVCpoHZ5Hj=xodT-zfz)Iq%@^hbuqBS*CoG5jj3s)j@RdV+!_E52O z$*^Vpw&7*CxXzvBXUMc#9208pV04>n7Ino`A2A6>MKt1ujjE8*jw9g{@#gSm2)n{_ zy#kRueNnNW?-zc~`CLxOWc#ITU~9)~`a0mTr;Vf>_>Dl88JVoUOo~e;kGS#^^9%pu zZc+C?_n&)4rBpKFdyXJj6YNJ2ZquU^vLKmg=*<<^iHLKyleCLW&r{qoibC3%2==@` zg3eF{!zPm}uK?#YHvJzYGh%W}ZLzcp(t28~pyJ|j@Gz3l=j^J|$y#II&DBcJL_gTPxjCYY9 z5a8DnH9hY@h;egzAn&<-lU)A$pcSAfj3KkJ@q}|qG%XNV9<}(oVH2Q+j-E{$$JY1i zKc>VDD_dhWA4BqP-Dpz-9y#i(niRdysEJ`RcXgC|1Ya4SE8WggbVMR)?h+VJqUeG2c}n-~_2)vvnWN8kNrhZ0vL1^oah4V=%U z)q#UPHlbjK>UX7+DPvZ6uu@bdyE^UgCkwn;I}(29%+D`T8ne%5AeAMU znAm;cT(?)ijrw-)*vdM@89+(fARL7yVD8S$tt_)!b3k?Br43mk@*{Z#fE+7xP8;U`G@_G+M^Y-$uL7Yr3(pPCgGy8 zjauso80asXx1%N=w&?>xY@W=OayxtD?;oKj7IxU3#As&GqiIRP_`igymn*Ag6Vy** zZV34H;-7!V;&(edg5g!wcaH9@TIlCxz_(kcqbtC;P7Zk6s4(&i=zn5!m%L`P@xIOo z$=^asM6Bmd(%rL%0QTLLB0$ez$zHgQYi4CScdI=?Ru8+~2t+VYy7ZZIt<(4DchfZ^ z^od~1SS=T|%Vr-+T`Lz;BE3!9B|Bdd{;{9i)QGRXu@bDghI{!)SV(@>^eEhF$in%` zgeG@mfZ#E_r3X6dQ~rHBMU{o5eU<8BY(2S~vA#16t#c?mz+6K0o!w@ z>j8MPvGiM8MV}_+ZH??l#f*PGOaXPW#hAzRfamdfoYfGg?`VF&90j3w@PWEqHigV7 zqw#5~7&`t`wTjranOC$@2ni=>I!_3V9shimp_N2?Y8sb?w)iJy?A_T5<3sU-A&=9t zBu~Ki6&h<5*02n}{qtS_;X-(2AGLJ-a*oWbewl)d^7aIU8;Q1b1f7Y3)@d1?2N7q+ zGCl9j@;okyu^h5ngt8E<_rNhJwnC!z$h2OcO~)yf5>1>|2thLENJ0)8;z!})RfGFi z+0DgR*GF5dN&>3&x+yo5eAay_Ge<&k`KLOM7}pAw3GupUDl?8S|4ZPuK_?3-z_osx z?%OyufGmbjXBf71K~=66NydXWSbS11=v#rkvsE^Jz5rjudKa{VIeg!W%a2*l=s5;U z(*HfV8cyk>x1$pNwx3KcT+u%4nEc~?_tj{|BdP_>J&iH0`YMn_XP^{G?cP#bg{VDX zLL(F44EFZp%{N^(pUE8+X`YFIKIFY?psco#d){Fb;)}rlU%Ya$UL#`I&7*~9I+CuY zZyWoRkZgi@u_->{f1)1!X3;|ar1p8#z%6Y2oGK?Z7d}&GSUKUL&AQtjd1*u?))P>r zz3bbD5pYhCva8I8$ID}UslCAzvL%Cm!p|mYe25Eo?e*5*J{ES;IEj{AZCObflwNtG z3h~?;C*{HCKZYglHtnB=RGZhJuj|W4z~Cwp7Nb%o0!iHKp$>7YY+03Y{4$xW%|l{O z;>5OY^o!wiJDG)*kvaBZ8r`puLiYjw!2RF||N{D~q>SBFIp$ zYSn0hW4V1n|FT13YUizBTt{Q-ypd79KG~6UMVt{WcKG4bxev~RpKZ^{_&v0-tQg!c zJNlD&Si<1;m;S5^VMxCWzIIP@Juyj{P2QK4>fd?iF#^0-G)fbhUo)r9&G81IA`O(x z0bAu+#$%2*@WyB=2(-}!dF8hkdtz6M@0dWauVKK{gDQgIJP zW2pqgH=7^aob@U@6Nn(}DBAft&q~jjZX@f2mv_%A%rW%5vm5kJ95(zO#_y#Twlvg` zpLP<6{QeEE-JivXs!F zU^ipUahhLTh^8UEbFs)`zg=&rb5b2Vuid{ zEgc;-vA3$TFeZ}v08Eb>@jmyqBq53QRnQ|S$+BRotXVR$RLJ?>v!)lI@8~K~b-xj0 zH(l4M&oA;%hiPn!8}Bc(J7xA!i(`G827(FnHcN1E%H>enb9YLm5t4dQQsi}$n);Gl zs%o)o(9sNSPjp>5i2KOQzl5laVlOBMFJDF*5d3IP#SZD9VceV_Cw2@ycQA3OdDK{vw%w11n*^BwP|q-x zne5)_Z&#az7EBwj`Gw|q)-?5sQ&cfc6GbbAa8Uz9wW??3uTEsY8jdIUOnV=cPbLT;j z^E2C8Q>>s5M(wZKOS!awdrsq#gMdK|Un+0q zY8jO=I(j#`bW{LN9Le1w^PhiGg{2dFc-FBKh#=}on?MENT-Fx2A5`lLxq~dgt2_N` z#Y_60f;jwv61y9|fR@CBB`;In&_14#m_oJqo*^W=-Wk$f(=KK}9pHlm%>ZRDnfz6kRzu(%08bX}HB zeifg_uv5rTD6arVl14Q%ZEb^v2+elOwKxK_KT$$-9W#{)XN}SbI&3zIJ|*1?zB~#2 znvOY@p(8T$0fBtEaNt_fl{;&7J?jN@*v=#M8Q%V-;pAa8HxHi+uu+i0inr9!DUL@} zC{qQXw7zwJ-(R6)tRLwBNOl=_n^_k-ybq%a8}x}{Cg}Q=!?~U;V@S%z zsokS}MzZkR4A#kvHv37uYZjnH#6y5$#cdRmr>CYN5b)ZwPNu$~4I9v|=rD_O!n!_m z{*Ht5pA>kqS%eoE&F9m`*Ipg1xJ5tAVbZ4+L=RVth|CtTz{>egjWj9Ycl$)0_pqS! z*wj62_%ysE*&%xeI3ExCy}ri}U*8yiliu1_23nFvZx8&F972A;Q!$k-D)=1<7Z?E6 z?czj%*vBQNYpA7OBm%?SQudH(-8>daYhqZ;U=s;_Vswfrz(z;SFN0ZsJ%mA72>=5A zRJos3P3qncn3-{NVJj&x+^dM^qCnBuoKr_BEA2&S)fBL2g~SqGfX|yPS|XV@_wMl> z`^Gj(ify+}AunB18LU$1+vY{CW{bU*qx*(2fID(VY2X%zMz-DVS!F&5ZJn_e)g!ox ze-%nhI58U9jL{l70gUZlG9bi!I4Pm1>5sxvsXnuYSWQ`;QJ4llLrKB1vpWcPTFPOE znvXk_+a#=EA-N#D@#>66R8|L2iZ4SDl9kTH4VMXjV(Ij!vLpN?<4$-Sg*S~e*omoD zsSSKXMSw^+*GREoS$5|%Q2jG5rYS~dd5NdQNr_SGcQN<_GSf(DtA`Q!Eau0s0CJf1bJ!$l7prdzN zOk${l#uO8t#A82&=$DFCji?)&FqV$um4(}vvNSA4^kOWl5p(7+pA58Zo@}rg=P>QQ z86fc&*^a~3CB^kbaw!olEEDxz;iI1abnB$zEr(TSQGs~!V=#P|v!eDHtJnv^g62Zc z7YIDe45yke2~{_KuA`!)m)x*anWv`c5AtHbTLOL{?pFeZdl*`5X=gbU8b#MBTH@Bz zUpWd@=n%giASJd0RGgAGwPilW2zpsf*R`{b_(T~Y?BJ|#cHILBIfP9JlaMLrfYyEc zl;_34Nu{jrmvzd33b&%f|1FD&%NpXJux<bYCUO>ScPCr2@ zUsXSaGJJ#|7pJ|enW2(%hCcRlMj^SG!^E86QG&D#YLNK))oCGg1{j7kZ?-IDc{t59 z>za(4HRNUz%c;1^Tv5yW+00e!TmFM-$(+S(;MByeq!*un#<0JT8oZpv>g@^WuV-8= zdN#Yjr-&5>;lZ5M5m5N=TEcN|VZgx(-x)BNC83Y`i-iheYqPC+cJz&kzz!I3 ze4~7@sM#sV(QRpQ2# zX%o&SLT4xAIQijCe=fa41P}S(x?RQHPk_Tm`%9Lm5bDOcecr@1%00*m!iBak!mm{- zq@;>{_N`&lIXG@-163&!+i+iAZi~VJszy_lrb9S60KwVD(!&|l;dkR{Ba$ZzqgO0> zt^nWGAP9-WQazo7iNLbR?{Mm*-DqH((VTGe} zLWE~6q?r!*hwLU2R$!?>?L*re&%K^>ZO#Y8H2n=mNj|0k#jcPRAqZJTl#196mC21h zW0c*L5kBC?SwNgJjVBPYh&>$DKk;fEJ+xY&t>kCu^eMr)TVu5*v<`tp7MO9pf!y-4 zZ4*VER>iSe8~|untR|h(76To#1u}n>dogK|^pv(_aQ)*zP?m#Bb#o@5HjKC+Lq~kd zK_Bj9s&D|gk-t1Nw(S7DKWb}wVVL$hm5)86qlg#E%}hEq@+*@H8%numUBi36+uXV8 z+s|F3%{8KnrW>;dnnnw&L9Oy0QiG&)wnc{?^R`t=N_TuTJte-6@l-Yh5PglTCp^HH zX~5*I(^7UD{)h;RHAG)X}2DKFXv6PPVd5B~1ACphJPy)dsC z2O5G2`FDvw=sA8Jf~zT~0W%b=fMJShPlgPcuA@s{<-bwKpK0d_NXMo;6OjpHI#Li& z2J_fxBohDPEk%1rqcg9+SPhAmBuntgb=^vE!9@`!Z4VTM+bybQZx2CwP*c8&xMf0Q zrov60T5?V4n@0GBZ8xP7U|cZGzaB7KVMh`jbaa>ayFcJ5N$XDce)3)y;wNj_tg3%E z^*&ISU9RVcn)=oySqp9~K^oRS_VA4`rKomrT2yGGKw-t`pZ^=3TX0khIaQw!@P9=d z?wTNwOndR9dr*C~8i5GW64=^UxvdOhOKq?P)>hr|VfK$eIe&U9ty`)79>`Ff->XRL zcZh*ftOA0STPVReu=q_z$v41z7?Lk$i;zo5*OLzNfnu2a#%KnuR6gs=XPyd#b4^w~ z3I5UFib}g+^^5-L%5WWx9G$+bmx{L_T9{bv;~~5M1XGx@hd`nSW{~Zd@;yl(OQ0L} zbX@}=Bv6#Pz+aG$F^GO&vzkbj^Dtz+xHix|s`5tCu#(?PC$$(T_mgHt?6bX;3rI~+ zDRPq_e9`_gk`R2qrGa$x9p^F~aNiRdXPR-6_+&=W8@}5Q)*o@&cT+`gDiv8wbPEc7 zo`XkRb6H=nor@mgr#Hqor((Ge#pgUe5xxPW80%f%+)rH)*v6-m*4bt@PD>Rg%?Dr2 z_LA`BZH&iufL*aQ3V?7<1i1GeQ`6lUCPYj7!9dR$VZ@LHvfwoOmUb{tj-~8)9$svx;znOHZdMRIKlm*alOx6!&m=0=M?quzXjmgUjcHQ(# zBed?vQw1Do((Wu+{%QN5KnaXF`_sbwd}h-e5E`_1UFbqy#x5&|uJ_K(xvAv9al5mF z<_&S{a{o)8P)5hdb?`$j0zNu1?Fl^Y>2u*0 zuzaUdU^PKEUs*%Ief?N1-(K>{#89$O6rhfmKi^WprIxc!4Lwsvgd*#7@Fuzhr+)Q+ z5Gt2A_Z9SMXBZF0p!umdv8HJ;MpF#OwWSauT}CQBoK2vvCnbl-lEXxIhYBxJ>Xt`! zu{7WmIgcf0j|cxz?I~Y}L}VA04ZQJ#mP{*Qnd$Rl25RI;g_iw!Ue`LxTAnNpM%mMx zvUX}7#36UTl~i9oUk-Xw=0o^}%R5dQ?r&NTDiR59oYX=_(|&&-@mo+ZlYk6Q5!ZiF zc^5P9A4I{7l@%gV^rrblsN24babLjwBvecM?qr4Wwzle9(AnY-$k&GhXD9L!YraY>;EvS#N{#Y1~%awjs|BJgc6_kpoL z2H;StC^*jq48G#3yY(=X9)y7_HOlW`najUc)u4N?q9MN&>R3P14(3z4I*Lrb)XQ?`0Al%1Mz5R24Q(_akzX zgF7RmCUlN%=e<}7)M2CajjjNaJvrlZaW>!uXAt%uW*%Jy*=Ge}Wj4W{uTJBtcG+f9 zdF>b2U8_dXvz z1qo>XU!)_u+|Hy~G~YL4t#>AN&uh#@w1^R>wLrZ=&+n;%yl#c|)6@&yKcjDb|Ghuu zpj^c4w*%?j#m4E>5pu-OHAGh^8-kQO1m|-aWU%9Gc9ur5$#FS;8M%&`;{GTbX0wgU zZLPTiQxsF`^z|cs(l%O)*4}-+f6FHE3iOZVj8Cqht@9}~5DzL-k+O)9{j(diH;80o zgMnTh^m2HBAR%LqwCB)RdSj%9LQhnYO@GKo1K01SD&nVhkj#b)8NU1||62(kr^6R^ z{*ylh%-N5>Lq+a=K|2ZpLNgfYy#E~?z0N8Ty=AKm*sr$S2n%z>6Y`L9;CJMa^^{~o z0XNHrF6bA{NhvjmBrLAFY26yz2Hg_tFcMDSc99LQMOYi7J~iqSn7xPsFev_xTA1`7 zY}uOTyQAoJXXP?F3iesH*nhLYMgfv;P*a@kf8Obdkpks`4*jls&!~!J+WTB$UZrpY zeaFiB{Ot@C)rK8VP+NgGNcT8y8zmGotFZA`1Y>?gS-q~8sE4~~d+d7BW}s;$IWD+M z;M=>;4jnp~JS>3G6jO|-_h?hg9c=U6B z<4+QqJV3Sl=a*Z87fN;dgcQFq#iRu7+AE+v!}`(!mNj;?9GCVMp)vzTZJDeZ{)f7@ zO&33V&S_uS>7dv!dEBb|tfP%{Ak9N{= z6t0H+eS>+d=Po=Rr*6ufwo(7X(UCm{OF;~Y4YW_)Ga&SFZ(R6Nt;7t zX-!+8@|wEDSjV~RRNr(jk~$ii@{8cUk}fZrvyl-D;Zb7=UuKnItaydO>TZ8yMHWhf zQdh!kCO04GRKd%y1Uz<|OfC#@DR_RODQkH9AY)P-MExkLt0~fXfSe;~XDWJI>9~!( zCP0MRHGZGTfhJinf|C`Zxs5Bp;o;; zG|meR*R&{%kdREcFQ#vhtWs-AOD-c^C!%WN%>TD#l1K0LNAjb0!6uKcduTvH{xL>s zhl#-#iMvrI;+!arIhd9J7!VoULZ`T7o2L#7DPBHzQK}l%HF{k?gCw1S@TRQ^IOUy`SeUA`mFfo!P zcJYNqY%85;81LoKb)WAz>(f9%mbcrB`n?tv!qG$|qhCpFuku@~24DcN{;OOdK$D|r zar1t`7nFUZHd&@PD_q)BJF5sk>59^=fm}e;T~!zUO9Z)j8b?WtQPcYqxW2*ItP4!E z?cdcXkQ{+VCl9VB^Ilx|*fBY?ST;1MvdaWw_WVpzgHeDERqv9m4tr%8guNpq#Kt~A z3wMS8HSGatq`^V>N)4kvTo!;bjhM`-o@IKbI+|KksH99q>;qm&FsA6fSbt?IxRT$K zt{v@g{aFa6g$;v#l*Bp?OTJ01ZQ7c7Llc4<@-Uu=+&a1juho#0!*-HGo}3~Yd-xFE z>BhPxsv*PQ#M7T&u+gdLI+u$Va&oPZ0~8H+W{O2xmpG*WwPn%dQg~U^d8$XwxI7+0$b$-8lMD8|V)TK} zSI9Ns1nK+G?eB1B=QkW((|7E$bC?mb=ZWALb6l$afTg!;hC<<EFXemvM)IaC5m`<6_|7Tt9M7nRGSFsat+6%!eS2mPzt zs_`00d(-o_s*E&4l;v7b3g|)!lqJ`lDq;+t&!HzQ6I5h+rRR8w!4hW!&MhH~-d}ZD ztw%!ZTq{*dD3CxK(!eb4xm{tkm%Mn-Vu6C_JgZ(JW1VVFwHnNTy2uYrm_UmsnXpOV zRNCC2NI>5ghTCEby=B#=mRQGiEB7L#8CocFg_ORkvr_L_;QeRhD`YBxAgc?gzF_zo za>6-1RR|<0R_`>&tC+`>W;S@hUKI4@f&OJCD#dtXkkkRy0%iRb2eY=$W8ghrLA#Vr z`W{C+;@M5a6X6TYTIg0{s`^(RO=&$3RbQmjGI=QOKwsYTM${Fh^^9WRD1hPHv;8pL?zb62!0I`p zTL9DnXM=gG@b$Witv-q7^WE5d0|Q~($yY~TjPmcZlu{Z)R|9ycMJc*{&R{iyY{&l)!uUxm2M+A@_8qCdpyHNCq9px)|E|lar zzE}lBP2O3JgoqjcwFolbHS8FxC4__b0YH~)GIWj+qC)=v&uX^v z2S6FEWXJKB*9>~1^sM%TY;Hwc?tr%Tp27SA01O4#H^}dT7@Sp136p{{qS{PQ1p;O~ zR0qq~j0gK4w@PwYY!*Gz5y_M zS%oA$LvbMAG?Vc%5)+}mQfP(KaXM^%j}t&3E|`;hZacfdlBWk)aV8uZ+Ck3JmvPDw zqJJm|ySUa~;NealhZ1agq6C;n+3Gyb9ORbgJFX(a7C;OENYC6=(ahjBN?^MelQ~fy zhQnm*W{`%#zdVRku|If_l@eX#;}h8C#=1Ja;o}!BfjX6=xnNQld5)b$K4qy2Y%!F@(y znU+>}51q`2aBWV-YXso08GQ}=hkZFT(~6=5WBo9@?>F*E>6Uw=$P`c+Pe3Ww&@kQw zxSVW%(2eSkA$!JR6@?JKF7xM0%Q0fNska)Ki=uY2kW#YjW=o!%839AHoiq0lCb&u6 zt8M|Du7ge8qY491u*ho-!4fd8Ub(=n)XB;kVeieH_jXShA>=D%g}D`7mck8i8+4ms zICe=4j$$;KMB*2%1%cTo(tA>&$04L?VnGj1Q7u_zJsJyu=*5~5 z4vWDDVCK%vSBn5Q_2!e*<)uR}@owmyl{gFF>SK0+bX~cs0j|=$WX`gePubHrLHbBP zf6r;|zjLLZQUq=X5JKI&`gK0tGxtqNShSGv%06yMq>j?b#6O$e+38gD%&ij5+F5Q3 z5nwnau1KEMc}k$?n5x_C(s)d z$;mlH_8*elNYNBj95-s7|I`_D>+F6k2=B2|mF<=Xv}n<$t3rJsX(0x5M=3&7RZqH~ z!#aT78L6onvOS5^VziIg+~!{XYQJkNcz*H#w613fCx&M zdP3rHWF9B1(nMKLK$2$w?5iOrwWCJ3>z=`(>vV`k4QRooJDLkVLz8z6I%Qb5iNuL= z9(>iY+Ugy;v}1X8fcyvqh-a~})X8TiiX*<)unclS?#ougD zHmD8CC|mdQKN$}M;QuuYh^iX~O0~bcW%e3977dP^85>NRBpCHc3V9HQt{I{;+^iUN^#*0aJ=BYk^1_^DiNQ zVT~6-s>U{La@gb_I-K_rgCUtxAQzghAw)3Ly^E&R5ExOVDz3*y9YIkguH6Px?5RfH zo;AlW=^rTt-2Igv_-Ra?m|V%nSdv+4dN>-P@zQ zu;!LaDKMG|L#&$_`nEM_X;@n7CGMwC&!^2^;|u;&(5z|cKfUhbA^^@HCTrcNT^oR8 z%4B(0AZEuEjJR@#Wq{`F^(a+!zokL#HA0VyoW_(BI_U&GRnJcaH%dpN-^Qb}i?Th9A?k{3%S(R*xxSO-fwc+` zDTWcnjgX)837r#)$!R~Q%jy-Ojvv}`T5raciC8T0GGvDAr6Ws^k zpuKwtg4{RZvbjHlk42`Psl`Z!AxfxeD?No00fsOfuwPe+ z?=I+o%FYg6MF9|TW@PyGO|6>c-%Vt6p*uSt_4IA2Kkv>J@ELmHE9BeCLxlByOOZBX zI5|mVX#C>zN2fk|o(3z!?+nZIL{To%BS8zJ$7_!@qy(0Y-s59c+EJOT57O~FBJ79#ec(m_>=|v?r zLAWEDy_qmF$mic3eePF%wrfFOUkqZ+KIl!-kyqkKb>J^9&|mV8OR}rP{~TN@zo1j> z$)00|exbgQqE{t(w%VprT9*OMBaX*A#cU!HG@T@NJIHr9S*9FvPFG-6wPDh3^09*Q zON{5K2O>6M>jK|%r?}Z$bRB@q^83~PRL?+*buJ3XPZDOXg$Bx%CH}Fzok_t{lcXC* z{uL+U;PSJEetf&T(Sm6jqeQxz5$EGAZ@i4du%mYv`q-A4C~i-6kUblmF-RL6Z8wPr z1aa)knC}iy&^!B}8gGOj*?F!ahYx#>-qj;QjzPgd7M+`YZjtYfBe}y$-_G7pt*7VacP+Bdhu}8*ln#@v`=aUA@5kySI-(2ST)X*4tzdXuv_i>dR~_+6 z;M^`zq4evr&!M??u~GWnd#pHul*kV9{g|s0zxZFE1VxeU_uOHSyV0SyHoT zN)+n#J3AHP%J7}@9@E_Y2=Qv?68!H|-pl_OnOS7WClGWIPG-hMXo`LBnYpAYSd;o3 z5kkpp!=(nu_g4asbJp68J3V2(^5$czH2ONazNiM`T`m@+GfQ|Ay9R!Uijjpd&TKjl zsGN70VPjfgi!CS1`QF-J-`M{8=LfD4uw{MBeVrzFwRqcpcRR!dx; z0p&=X(Qs)ISV_NEnHYP5p`yW3XK_V7v59V-(;K@}ETKK+5y@y-+=n!#W)xX>93~Xi zgk~>xDwSC6K~6^q@)Q}dJylxOqjG~c(H-sru2Bhmr=rF#p3heQQQO*Xqacmzq5jzN zkzu(3?5>YYLem{tfhKAZw~l|xfKd^8vW6}0Nct)c(1UPh&#JyI0oh`I9?X>+sdWH> z%bFa|5FFBU#{mBoL0AVbn@u~i4c&B5u(pfDob5Ic3Yy(IC1xK>$Tr6r>jlHf%moAJ zYOglTDcQJvRP2fMr;)R{?J`b7Bs*|*AEEXVB%Ylb+@=P7N;AkQ)^!T0f_MxP__H8p z@@WdnF&Pj1ZU#{igDdh#%t{3`S?}mILkXv@qqPc+#iI-@1*NQ>?(aJiR}9uM+Z7*P z^$RS&>ezwfhhZYR(mefsQ>)tnfO{QCxoH4yeyaQB{G>^Qo{YTOG>n;HBm#L{{+6@! zrtk{i^E1JdR3uDBOpYZoJX{^!RFOcW|KOv= zQ7xsF{!S2&T-mqIq1EG8IvKF8O?zVy99|Iygs)tw6ZRye3Ms@BPZ@1*?Iv`;%RjJH zgw$Sopim;8`O^-9!W#+Ql@^>Q-{}2c?_8@${2404rK@%7`;H?Np1lCv(Y43b#fA{KPi-C6(#8?0-QB_x_VXj>PbLP!yy2A5# zrJ{i|T(Cqm{gEIrdTEX=t(ivr4#QLESWize7Wz&)HB{HLLpB#=b(IqbbU9vFnuh!gD+YlW8aya(rN-A^z4fLuT4`{NXs6J)04HEM5_CW55+pR8Y)Ef zLT_IL3+EnXvfIxPImu;TXS7Q2a=A2%C-kgh&9QufxSdWB7#(hgM*kQtWceOyR`%at zzW%c%3T+raL?kgxZsy6=3#ViSF@-5NNhlJfhC_<7>U5R)F-#(7r0G3Z~eAUOH#TRDeVIkX!y6CNQeC{=?p z#i?{=%@bBMhAi-^vCH-Fl za(jgfyoYkhpO6|S_uZZGs>t1!ND^MIG4GxZE# z>7jf5oSwa~2}s{wurEP>P3uM(4F$BZB-Um0iO`A5o;vX1aItfE zh$1FZFfA~BzcdS|R=_#VaB6KutH0u*F{_r|OouKIvxe`OY5cECl<__UyN{ z?T?Scdivm@vG_m&R*Pl-XPO83*CwrB)U@fr0Bgyf{ZHUDs!G?TfSf2!Ybs}~vvVj| zMqR&5Xh)kskFV<#*xDI~+a}{q8n+tTede?_jsf3pr;^O)dT)w0Af_ECdX)KsDhcBT zY5Byu!reI{MzWu|Zi`;d{V1l$1!7pbDGx`tJ{TU6|0Zcv%?UrH{B~XGX$St{qL~w~ zt8k*MiA}3{UasL{L7|rTg`%4RtQ(>%#r1p(bi{HXnf9SI=W!_Mh$H_NxYJr>0N^@8 zt*oE-7sp}ZQzlwKRgV@fmbH4)rl11ltrLso+`d^T#zEZ?@$Z@#1Siwk{&7iDD zdHgxRE_-Yw9Av~OS=hX3l9ekE?>C5d#byi{iB7xU{O%k`f^y@xKwM!%e{wdH^9S$| z;`TD=gd1Op4&nO1#0!P0lNg1GzR>jRzjh~j4!NP(Cs%d5`O~L6IZ3 zKyO6-HyN0EC{_x!z^o(poFwV?Lw~&P;07X!q+o2q@5%Y6#%1R$ECJK5ECSOw72lu=6QhN-$`#cs}=&@ zAcx*6WvvdTGz;dZm-aU*?C;kx&-)Y2^aq`Up+bsoRX3&{S2e8fJAd%7&#H?uJfKCT zSEF#V15B?`HkEP45`=m3hj4q$d0$Z~sj#b(zi}D#gwOt$5t8>aboj|y2%0UX)29PC zCv5@rf2n!0uP!P8Mn6ZD9ziylMr#;ki5hb69pqmzF<XZ)G4n9h_P+_8zbJgS3rN%=&Q#6odxct`~i2TB* z$1o&@-;+4YEx_2T&iGE46|DMAMFj6`x5WLd9>FD!A%L#}J+_c&{YSDSw1(mdzk-92 z14KKS#Bv3hKzVV3GBM?(Gul|XP2X{QaZK)}$_)x9-C3X16`12}1Qf=mfHh0ov4el3L%@7i$|093=PrwP7XUtu8W3;_lFzG?Wz zs?#;Ja-6fgC_|>S1B!PZ-k6nfU3Y0B+d%(_3a)2BE&d$+E>? zWn>YAc%}Q6gJXr`mqJ#`jw$x*irPNd-WHAzQwIUNB$9RrI2!0s2wLwGX2+)?2Qp=n zyl1vZJe=NPtBuVB-gwS#$)GuleOZ1j{NO#_+ulY$D~11)x7$%liQ*}bXQ}5?VzrQY zrWic6?<}doU%kedh!HGK+@m>zJiw@n-qXByhvLW|u3K#X@ke;P`HNE)rt0HWm*y5( zVeiE+Fni-1cm=hZK(wf>Xy>jjxEIc0Yd@>r2-B|QJ%O=s(C!!I-)zY4-FTib^G^FC z{I$4vk^5lDh$#C16`t27Sr5mG*2H^ETb8cbTp4YR2TgqR&*GO$8{-VO}f@|SOA>^sngSXNJ{4%|J;(#zsb zjEA+4i^qFHYr6w>ZqZ?*xdfmlV1f2+y#(Q&V&Zf)(3a-R;l`8F0#{!dr&1~cGiT&S zmjK}}d}b2m@$@1AV2A!JiYxl)77}%cUwn3zWBtXc9oEhn$>FhCwC#2@DoULFj(Pxc zPpmYB?r=ML080)>!N@GNF&r>`;l~*4!KH}B_Q(7?E+`+e!iP0rS$bgM&G;#~Sfr}a zz0{%X9KWR+ApiWxqe;};n5a9ljM;PevMSS^4nmRIfIp@oM}qF`qW;0=S1 z8cUDdg#(u_<^g5l@VuTJ+k+pjhzv~iJ}r9s$-XBA3&5@k86GiXHme%rgqfB+Poz|x zr-ephk@#uSmA{?h!J_N7&c`4TYot6h7_%lTs_|u29)RSve2`J7To{W0Atm#z&5b0-H*3^q z#E&>1-8aBm+EUKja$1)AMK3$weVd1syf|)bK?pYfe1UM$>ZRNmLTDIdraRwT#_ z`?rMqVZjlnq6e8mJ7xw5QZ2mJiHC->Pp?R#BrO3dqdB7?+XO}Y+|B(V-yc+j!zvri zH*Hf!(f;!ygOSiH=0G@mSu6_5gb9Z%UJc29=r7xIEp5gxy*LhyFCNks^7@?(2Z{lP zNh!x;F0WTOO5|6hhQhrg(tYW0xcQIH5&4&*F!<9i3+t9DS>G^ zP!J{e-sGB^>#u%=yDmc+(E869bL#Q2H4k`v>=Kf^yNov&DpWwc->~#VN-5i7fUfAv?bS%7b$V20xWth7z%kohnG}S zBTrG$efSAwGyXyH@h%NmH7KYZZUAqeSL}-4n=6eOuDb3)9a#BHMn5!yK}~9i0Ddhu zb#K=mnS>HQMs}E#n7nmj2sRQ)mub=2mixAB3t8Px8rGF8c=<7nZwmpcXt3tlPJ<(Q zc_4VMhp&1`R5y#hIzLAQXRyIIVqi$f27M7ZjFc@Mx5fcdgS1f5mnTadZroxj)A@bF5}Yy@7-UxMu!Am zxO@y0C5p<_*2H_SVTjqIH%c4LqcV7loySh?e}}d~*O&CU0s7V3D!{YNSNpS%OmGb9 zlXbG)%K^fO!*nQ?3vJ3Z&_|mZlNK+~hB=J3#PB*^uAT>j8%{H4TS#0G`WvKa%P$c+ z*W%3qUpbvHn(O22NgN2jcmO*YhTo z;-dLrlb&ITx->qbwvy%+*XPX+|KXmpkrNky46>rFu_-ojgPeM#lX+HVnNT!9oS#A- zsSQI-Vv!**@pL3UB4Y(d^E z?dfVsUJ?@=4>;+8e^PyjfT(BxRpJ3+OyD1L%50(Ui(j^ymdfBlY_l5An8#|#ZG&0f zzg3TdVFjE>pGY;tS79t_JCL#-OsJvopNE8G{=?K^|My6%Q0-WYxbXtJSc4b zi0T3{kPZ`+kY>TF%gAm1lECb#AA`->dmv+=<-yTViIwR?3vL7(-!I={GT1{|q%SDu zGJJR=TpSQF!=bDvuQy7-Z0U=L-h34!5vMP@_-fBUGUJ7QefK} z7qzj4jv1~7;|JC-%ZZ-Lu`DAtb%4`zOK}pGL>VSA?0-`l^?ta`i)~8Xuu~=8LeFnJ z$jK~KgY5nAeae#s6SqM0gN{5K zY5ueB2d=6lP2mB+b`>KkUUbLa@V?ArBzAfz1B`zQzPT-I#uyZ~K2lBxz86?S`zSe+ z8rMg=!N)y?A79;1T5NwX;7~wtwgL6pTv2VSN&}R|9a3|>mpeGM0r~%Ne={kg5*9-4 z#12eoJX)o~_}IpppJJ>4?q*Jv-0H6O7q2|;jB|`BXc}dpq^8S#Q*W4wFwk50fJ>{+ zYNHbCf^X<6Kv>)i6o?do-Qnz9Rn8sk{dg@$hiXVu(95w8e+Oc3G}Uz9Z%!C+STk

k5^(8LyJaI|xp-h&Qnej9KbkF1j~Ks2iZ{}duu&pwTfXYHalvXSXDKKpL{=u7%0f`&hoO=FcR?mon?FY5oB|% zb13F3D^(lf(w{VVrlBQkOjaAn-22G7n( znL~V|{xi@&rn35)OIwtaD-2C%ajVcVVq#~wB#MV-!)OHnm}eXWwlew4h6_ou!A0R= zX^FKuY^p-0yZSjl$TkASC;3HS-3G)NGLc8Z=jxj(DJOPhZNhIuKHI+p4~d5S63JY1 zVJ2*j^lYPl_*N^)DkdtshV%6sq+I7p1!6pnj6@_kv&Sf(WN4qDOCohQ)e$gwX%wUzSPK1ghHyJL&T&%Eb$tmv4Juq>`dtTVv-^>9^KYz zUY^(Wk2ZQ%P^+(byETt5b$KR6u!{MFUoTZ{Oe+%lk4a>|%s|QWi_$W;zyPBbs9+$I zZ6x4N6y$c?8&ky?6(`I)oNLWbDKkM|V@%9z$0Kz6Zjf zF}!Pt+6$w=vQ*neCue%Ufz&CErTu3A%&N@)al81#Qb3fPIU@}v{DzQ<`y2A%BqL}= ztXyM^qSo4iGTm^e)6Y4WwiwP+;_Gw#=+R2tZZ#sibO;8KPEH_0}aRC_mFP}@%X z7eF5*oD;xa5=_9InfsU*4!IQwfHEZ@Af3a;r2pRH?$;M~)V3S@;`{#8Q+YE*nKLS5 z+iegR-&h)ngL&7WWT}q@K_XAWL_tyn;`S%ww|V%iPikB>@Y~-uKaDm(V($%RTwv+} zR@RtNrBkTtVl|P`j9r=8ZG}D#4_7uhg+0(uOzV=qsCFBVXSS^ob}<0|KLEh4=a|Wn zHn|RL8X<_LfCVU@jgqTdo;pG}f#N>n91T&&Onm|F92hORwnZkgLArAr1cz3qKn$L< zc_%_T_0TpK1@1L;RI8YS=c~pK*@`LE_IQ^SyS;rj_k>^<#NgQ~;JvS*d45W=GKW&* zx1;hGMHx$4f(f&PRo^}4wJbf;h;=V;qdka8IfKnFcxZc*W1FVa&}WBMn<)_mH>QPXv~03Z8QZND?% zkQTbqGh4(KC8-Q{bg|VD|6<#bN73vTtK5wm&>xdHf&FCsEaUQAjagcrH(wye#O$Oh zpR(D|1q>*&{(b%ElHa|*4oj=_I60O;M8>6NOz&Tx^HonrGXW-PnYRY;c#_KC&I-Yg z@=%Y8d}M#of>H}9kQY4x!9Ja)&2rw}-SRPs*ycRr3a-*{>~n3~C-DGt$uTd(?LIMx zVMFnevl;>`zur`D{&I*2ix;cSH@hyl&bb>~;PyBH`^sL`H=W1pf*lyTKfN}|Xqgj+w!8sZ#i z9-TF1tNq;jBu9nBL&)v%Q;@AwLNZ?#&Er0)LREu0Bw@vFpaLL#*fK4b)GOsEU>Ahc zByxj@T`97eti_5xqs-3At+1fX&_gbxkjIn+?gz=}C|#Yy96CxTT$(XSC?{1Rjhl%t z+i&0^$HHF*T~nN_oI1O!IO{W|KiYC^ZWJbxPvuK&GGKyi(+$s~^?p#f2Gd>HIIJe~ z{rUmc6}B;jJc+t|XhlIBs4VUntJMP;%zj6|7)Yx6Q@+N;xpoE2p&Q7IQ-?!M6Fc!R z$&(i}0#EZ4TV}1te|sqa)JvxF!$D)`k z0z!>TGKg8|I)$~GnnylI)M}b{I2ItSo(p-#C-_2WR>Ws}E){8yGZo|gH`(|&V<&eP zT+I#EM7B`RV7mw=@NaVQ;(msijRQd}xl=Cj_!OD=b1s_pr5%*rpyv#=`&b;)N#+~Zo43ZY|NbWymdzBj!bcic3s&Tw+11r|2Qauw$%x_5%CO>2d3Dj0@%p77J1F zhj#~y5{im7Cg6JX@^zwKVR{ZR&fruq2J2(fc&M4r`eE&d-sABe!QA3qb;0JvPu-X2 zftxM`WPgaBl|l)NL}%U%!rd7O1P7vORPpyWj4J=fNE_uh8UJ>U1+Ti!73ON%l5EnF z`KV)Zo%6fYEHcvit`n!9kWAE52)=6}=1oa;s4-U=T;hx;XUp1v`^#%uFv|F9jJBF$ z7Q9rxdX8pQmIlPPo&trZfc%3_(!;^uVK+i8rbLk3b%r*XPzWk$5%@jT)po_sajj*X z!HlbYjUa%5AAr5SMH2^;S!Dg$>1CQOwqvCCeVG@ox0nFx{sbSxl5IOC@ax{S>qtUd z78s4xCpF@7Y{M|l#Q^Q9fyFH-R?|Bx&l=*>Uak$3D17Q>v;`*9ag&+Hvh~Zw^jwqN z;vpGEN@r~-B%Kl9jE+*+Z*w&I+;RYt^0XBe<_IE%$m(b+DIN9m*jQlAw*ie>8bDb-x>_zK77K0_!YT8o^$EM*5fTC>9U8>&$5hLz0~qJS?rK1xs$t z7?!+c(ClVC!Cw~SKiMpxHJ(l=yZ4;iQ4rHHd(-TGJMTdEtUxrj={##_jub0USm=d% z^o?!0S~jLt^}Vlw+#AcD&>Lqx=jUo^C6B+6$WnZP29S82w(2X&vW z$tlL3dv%ECa~p#~ab$i{_$RhX@TQ>{F)6%tqbcqC00T07f_-W#c}tRu%2)~tqS3)^ zB?^Ggw;Za97-*rihuNen6`i9@@DH?5vSgrE$UK13P#P zmj_uN&4XN@S39|oXWthp>AIDYgZ~Pff?tKQCYrgMTj^Sb2HE|~Bs=`B-c;gV{+Ix1 zPdm3K6g`LR@PRc4$)Ly87^VNuZ|9ZAT>Ip}%Ckg-r#v%epS`UUgj=|p#kJh?ipz}A zjV;ULw#10Crhe8x}RH8(n*DEvqAY=tJ$YK8_c$nI#=6{7ng+&Y zA!B|`9HDro&Cohf`AyE@l-R=BOh5sV6kJ|~f1L}}99fC$vqJg3&_n>r->D6zU(968K{0i-trZehWd^M>My;w;c5~EtWv6oZKiY#$g37Cwh*rCM+Gx4X4#~Z zhXCofj3^>w)o29oA&`k$1xh#29KgL?(^SaU1RFGSFl5*TIL$N4t`k?nN%#*l($ z&k)w#9$YXJ&;gjR6>A%%Deu&RM)>DjYXthGRD_8{OQ{hi5A8rRG`{@UoXPg=Ts&mU zXuzb3=qAqUrUKal2dI)r&N7qM8$ju@+M`o>a=p(S7TG_0f}0NUSpGujhFC{w3WXNJ zUTAjo_)(rN78;1P2Y@=k+AHs&2@@U+v{Q1LM$#1>CnEz=VEkng zA3r3V*MT2iuE z5jJi&xc%tut}`i3mG3Ud)FzmDi4Q;LuaY7Pn2`ST)1`@i(rrlkW>F(VjiS_D2+em> z+t^jZfQ|QOlPPTbP&(ZHbjG=0qV@U!?89qYX5_EL@OHo)J_hbH!8OJAuz(O|V5_

0w1^w#J{%{8*H+9^2841EE`IULE}bN3khK8{0NlB@(3i8&rdZ(j@)n~ELYi|C zIE46i!1^bK1-y?I_(~TNJLxMTG~r_eKyXastOAxfHkiHRnU0ri_Ik2HP{_)$%b9E~dZ_f`;k7-Tvt?j}MlMa6VatT5 z)sU||-Iuc0mLmby@}A_HV6*8U|nwT`cV`IM-NWV zd(}5iZFenLQ8mR1RaUwmw@>R3l@*{QB2R$At5;^~sgv8iHp7G4wBrv8??%*EVR30r z3uQtq3fBB{5)kobQ7R&~2<(B1iDN1dkeq2>vnjGZejs$< z<~G#L>w&i*5t(+M>yU~2?hUs8V4X(@=4>}3QC8xH#nV7cTMbNf7&qWWJmn}yq6p((+$&#ncOJ}?`7C2MQ^ny_bT^1up3#SXg zU0h*G4flnO=7)2(-9x_zt z&XFM_4NP~8$EN61xU8Gw?mQvp@c|R{Y7HMKZ|Xo{z8qjxw9;e>N2tllae~CB#X9bR z%n#(VYQYFBEZP}RkB89@ft?EIGrhhwz$j!VZHhl3vk z4sFA+4K&C%e3);FI#Ooa1?i0>@ThdC}*zXk1TAGPRw{ zAy_lr6WDpBg<=_}Yu2#KylejEQ$?AUx=sk4jL~RTnHTyLdR6fR(#ybOzW3+~gE~(w zhMJoAi<1pu z!fA%Qg}Q1equ~e|ZMv7DjYAgmy0(MwPN^l)z>%bG9;cBI)c?@F?pde%5U;`Vq{~feMZV&z;%H5DHh(3-fHF zPRZZt1H>nZyI#ho7GxM?#2jm9F&`+Pi4kO+%mya3HBbncWvr<(*D=#6Bwue@cMiDI z%x9Tjw88#=C#3M?hCeNB^Ak0qey0S=(l#{rBRuMx0DXyqfFXeWvuaIch6yU-m;vpj zlQz!Y;eSSHGUC@zEn*YciO`6iF0crfT+RX!@fXtdMA+WXu3LWN{@S`J@|JIIgb#)p zbg~BlrNFCBHUtvGi^dF|!}g%PR!Rl=_8)yuD`OInf4{KlVJ`-}lD*d;Hpu>xiO|}X zh9KuA*13+%_<pfevG$yLe3ZjUe-c8f*Y2__$nzR1!Nk6Pf>>{ME&w{PzK*l%sz;6NVp~TT@5%DJta}B^b*t)`3vL>@+NKo2qJ&d7 z&I;3E3WcJ*z!=08e<_fU!5x57@;(ar_j51OiN1(cTnC|s)%jvx#TCt&J{jtLX^h9q zGR@1O9-Dr$;saU!gY3WKvL%6P<2cVG#@^7iy+xr(#HgL-WW{rQ+GYJZU_;`ktdgi~ zB`TuGaQ`@2r0;D0R0slwjDdEjfj0_k)Kqs!*ww?ovk11-eXcgs_e-qsH7=CC_o+^l zE&<0UwTyk8J)WQ>nlmsSs32Wrn_>szdZrtu1&Je02+w%b(hCHpHRc1fDP|QnN_3m( zIMDUP6Z&$zsb*PV>W2VaaR_a!8r)Wnb5*U~jv~y`ktUTwkGDw`a=o{g$wf9qRr$Rv z*ATT5|F5GJse%}IoTKGPDt|IB>)+b zvMfl%+6c0<9vaOuS2IXIhv7~1GPf?de3s!txe?|)v*lB55?hk-A;sbmY5cw6b(xka zGKERA-)OYBi(eO-K4`%GZ$~fW-oMG9s;YVVd$t+CEMl9P_yEe)QB>3sBPiY+HZlwX zMK}t2wgpDFp_xeuIF?EUn|eu2w_wb=zzG1haF7Amh))yn7vV}T+xBU}d$<`{kod}` zB_}WZl(WZEWRgz{^Y~`@6RJer{++n^<3ER#*lfoG9GIF3sQUq=YN9^8W$=_0`#*p`2mVo zgxifSke5GGPYPl}yqn|MgvBf`vF(OdOw+xfZTsjo`c(g@SiF%d9;R~+>&+e})2+OV z$tam!xT|M~md;>|M+vrg`BDr$Zi|91b*S(RU8pSQ&eVdA>}lj+7N^xT8=L-Pjj^zp zl^bXH(kpPHY&QfHrDJOgyzf~1crSwns2Jr-WrwpJ|n}ek9UqB z$Z~F88m$a_k&fk*JrWwlFw}=wh7rk41eA}CCqr)`Vj1qsQo#I6OcnAFdwh6@!sME~ ztpU`bdJKM$<#30~TerGkSEoBHQQ)tJ`APNl@)899 z$;*?tt|R`1kq8!gun7Dju`AkmcUDn`kB)fs+QjuuRs?Cc$V>v=2`vxi;pgC!JVJN5 z_Tmb%;5b>57S`_Mk% z>O?@ib%Uqw`Dgk0@gYzo`loA6>_3`t$?s~J?;s}ht5%y6(?zo_Kt> zhBDO7O(iFlC}6Pl4kJ{ff=MM)W+T$jvBT1sHhck0(;9l`X8FINYeL@NP!oKBDH81MGv3G@5}~q za>FuM5J&rzJae@xTFf$`&(q5_7+z(DNXdUxrsTFHZxF{p+ix;|;<4B%4q}!Z8_R4} zK;pR3b*?2KQi}u_3whKPG_cnJ51ne26L^U6xUO_nRtM3V@-F{*VJjr1Q+b9bnPZk| zVQ4K<0WR_DIXcg1$WAdIU|IcRC9Vz*wQAtH=#1$jmEZ7y(en0Cljsu4K58~Kv@3~t zAC7)WbhK{<4Q8U99*Y@EbmL^F*SJYB9+qx^PDNTk?l*3k2{mD2^D}FsgPYV-{xF?P z#ZTAhas^C3C18pViplSGL9(5I+1jVZ+roCDJgTj4(dU5@c%?w^fE3@n!*(g+E)HI+uPyok}z1acct-O zTF~YuGPk+yD;GT9c#d$8Y*(Az?VadzUXMfzXI7(gB$qdwTojjlSaQwVWNa}Keax^N z8cm3s_$?PW!VaRjTANpjN+QSZ(8essFC-KsDXVfzR`LeAkjI!fi*J9o}B z7o8}QVPD}h08lpW4WeWcbD=M-x8GS^%MXpp|3+TQ!GS_K)QU=I5H9kM{LZ`6xL@Ar z1iDW@d^XN}>5+!WWl|zh71Q&1H^CgQpffzDe`h?c5ACab{_AFbJ^lT9XH5+jvW6wl zR4@$kx{+&?S<{Nhg%um}%c-ms_V?70#xt!i!L6XR#DRb4e)aBVyhUY|cK*7bB1Se8 zvA)*ID&7kxUyhMiV(M*%fzu#MogI!&vYrEerYzD4H&U(_9lKk6+%k|bXD=t{YGG!Y zG#V$>9DVfJ@NJ+B?c=p^d(rkB^u{t%?r_-~im$Rn@z$z|S)iXbwHs8wSmx)PjPd1JSoM=r9`Q;7%2{${82y(K zD@PQdSCIc==f|-#9%+rf2wBC{e4M!=tH2|?Wg^nuA{4^DWCnJQAD4~{ydQfm8dJs? z=-Pv!{X1UxwiAk9f#eVb=>mYJn1B98IxIM5o5a7!<{SETW^{SIWm=liEpo%E{g>{0 zZfw9I($l#@9dW$&JCG2HWJ0Gb8>Ib0VoOk>=x?^dk9aCv4Zlu(L-L5Y>hf1?JPp2j zgbEV(ayZ`YY!~QwI#U0AY5r?wm=sTqa&uNB_5E!^644vRVNE}%@L+(MzjE6>9}QI< zvtK@S>6(kjYW}tk`1y@HGI>j_T-rs-`}y7Xi&x=w8S8h%-l0 zus3-CkJ@>*4nRRs5Qwd6X!aL11K?%k@_c6tWmANzw*+>~)E?pYs6q_AFD#Lff z$__RhaM!zg!EczMdso?$K7ecrj+U>bw6gAHl>n^cah6JjS39@YUzL5f8GWh!7AZ&6jR+&xdmWE$*9lFS zEhBd1c*sWhF57LrM%AHf(b2v-J9&~|U!-bX!?;6k%hY7p`;hS*7;I?efreG^OS%@_ zI?Be)5GnF4g`XBY=B<0&k^CPTb@feT^G^o>qGk;fNC*D|4(#e_&I`at%fUL_R6fJN zhAl(1*$e9U#M`4*OCeJ(R>tB&4?KafJ>cpoz$d|zMS$^pEd4&y!+ZZd=6|#=*#}v~ z)c(k@74ia^sTRV1D?5Ily&3Ym?0*MH0U+{B>2S1hzZ(M6i%E^%!()4jgqb$Y=#nAS zT!t=HguDF{D$zHb?7aw5%Qw`nmkYJ>*(h=DIH16jDG!k!wG)bDkpM4)IhqAlT7L05 zS<_5)o#m6n;&qvdci;n>g0$~q`i?pyIR%wMo2G0{^RsN`1K@B(oTfwVd+}(7L5=~e zu09>s1CjBdV)Y4fzd37CB_u!v>xwwvfS9YZKECy#+Vj)4m7=dnKeT3)j3hp%)0kb<12CdCAVh*fVNVf z42d{z-MfY3x93>h>wSNQP%kf7;M|m|c6%fSJ)TEWn*|_#Y{d8T_QTIFf*E%RzmiQQ zhtV0?{fR0CxW$_|5jhZf=ivsntRgWypfBc;l?n}lrZ*4Gr)~Msr$T1TXo)udznqkT z^Cqq=tr_`XT~|8CuK_hQ$NJFhL80<=s2lU1$1>CJ+|Ko@3-aQ2k5l+kstMf=8^E-8c zd1DTavn;b{L!A=8r^w1j<*I6ff^8oB|aq;KV(Zv|9B6L$?9V;jJ*6Q4}(-mXxyrr<==ZqJ0fO(D+@W=4wSTA7#n@S=%JpAM}`Jl|q?dVm0Z*Z~GHt;r=KAKQtBzJLiX0yB%LR&Mu0G6IgDNYQ=Svde6_29Rk`hy8#J-UuvD0w{E+zn;Y_nbv$Sw!e z0r|cn?nW%~N4!ryakq|$O)@BO#0FPVTJL*?9n(2WyjSv=VoC0F_K~Qb)aeeYL52b< zPu6cFFMAI3wmq~R$`8f6&uy*S9_{?#*-60`b&;e=<3QfA!;N6FR(vHMjKTa z9YS(sbU-DEG>&^FS);?QpqXK;_#G~2K>9lclY?)knVPrfzuwU^AA9o4SH<40znkn< z@)lOr(-b((zRd*yyJ{suM$CFO^GbLU!59-a16(R!JW$(gZ39N&TsjS~6b8F(fFmm{_r(IfRp`ZV0*BjJQfdge6Yrgdtz*9I?r3 zZ;%cdjq*d#LdTnvC~qs>(2< zEjTK)qxvja6Pkm>AGqWyjaNsqFIE0Je|*^DZSi}TMGa*yWeJjrzKu-#-&bv(7dvSY z=&#@+)V@n~X@pKfB}-zcVyMB}8~qT0|4!x2MdXEwpr1`Flt9M~owffPN&uKqVQqa1 z+Sz=3+6m%?6qRc1GMjeK1Nj&NRKw)mL|7u(r^K9)_QM%bxCf}cG&8#1c(UV@&)_2= zgT;`J2n?r_4edxvlEsGDUv61(&nNQ_(Hfs6Hx8P8Oq+g|7VR?2r#JQD#G(DjT;g%r z6;%RJ@|!d#_{sbh(iEX|Nur;HFZ|^}5CJ}QtShTjM!uxJ8o7d7I`#yfoLYq0X|pBg z0sav}{G-cSWLQ*;oLXn?IXH6l4O;bsb8 z#@GE#A0N;CwZo$DYE8q_V{e5gLb+*YyfMb9V9K7BxT54nWiN>Qlt3`g08|sd%A4RK z?2}kac{?R3!A=1;2q3*ImXVNQ2x)f0CZvOvm2Jg{I@M1+a%23}du35NJCF%hJXFwXy}m2A4#ytl(|=jKfp_+2z0ZYP^7Uf_YIHM4G@OIU%hR z-;F=))GGJ3!s?Weu7ZU1z424IiQ-*qvP0^OhR!q7e=>~)^5I#&6%;26>rOS?5T!ar z(dF`OKX&XONIlod1l6)BQ|HBua_7$<)S_$sT>vNp97Y*{P;_Jbx?b>cD;voQpi}~@ zr3Ga^{GH2bO%1^Gowc*IE)&_O$9U#xgdna(Sw{}ARRU75oL=)2W+m<&T52BPDUNoe z#&+J1Fcvvyw?DM&~ z?=U;Aoj$#fb>bE^Sq{-YNxM6YqE#n@pN}E-5{Qfgbv}6cGh87 z#J%*FVMAt4;$0s3PXabF*hM3kfmllm0SB3Q7RI<(PLzoUX9Fp@qk1zZ>0%qiE97H; zGzBV_bh0FfCM1ApP&16YYzI^VjEeLM=yWDs?81y47h2zU&KgU;_rq*uI81t-iBQp4 z)*sp(y)su|-8L8B29pi1L#JX6>Yrjb47*^l zt^O2{iPA*5r5p_b&fejwa4X$oqgrc)>&B7+V%lzHHJ(ec_b8ofI^!MM{c`8e!JASk zoXecz*4_&W)cs?L>{gD^Yh$Pd%S(6e+4vk_IbaE=_1X!>X*5Hb7qPnmYYIN&-c|!4xMl z{RO>NXbDPmO^wPxD=pc( zq$PShdn#q_R`x`$sDF*!Q{5-QoqKs=6w4*cOPlS64?BuURXS=dTtWoiWc9a$Fgq(y z$|OyMhaxsA?OE}hOnPIKBMKn2-Rr5))BF;N=v6Sr$N7Bi0=eWHxhM%P#|9=9e({Ad!opf5RRCfIQPt{ zK8th#rl}6G$qDgE3VsnN0$a%^kcuvkHyxo+{ z11ByhE3oc{9t9uRE`jI^zkQKjnQuFX)`b6RkjBZwM+(a_vo!+H79A>SCJ8$wCZ1dq zJr2>}%u3EJYL63VT*(%y?F6wgSsDOW!Bp~1hXO|PI+QTY*Zo~U;@Yzx2>~#Oa7ol#p2MwY9ZV-b>H!lP{ zZ|uN@F3-kr=^dh>0P$yaO#HIW%V?}1Lw|YgJ<46I!B*k%XGY4u$m<3{P&%&`Rx)_)ji^>{C?X`Zs2zu|01O96S zo7nN%HNKHm?qd~-&w-1^kIISU`3)w8F6Lt6@>+X=!2;vuTJ6+%ML}OWH%_05HMu2N z4SnE0?BlWx`-;-haU&69c$E^`m`|4A@R~zrZaOS3!L=cPC6v3FaTi3=1Odct4mTS~ zFpAq9HwKESVRpor$rZO{k5T{Tr-I(#Se3W2MZaexA z;q|o)ZF{7xSoNUY-XJ@qfYaN!5g#g-NP<^0yVUiPSOVV3y+BFhLGmlJ%K~9+?pa3; z-U7AaSF#uK;mx&tjyB$q#-f_Q2>YwyZ!gTheUUlWNWh+1n{0mpa+nc7QVAQwDeYfF z`@!Lx*3ec_tEC_EkMNxsj9dZ)Bd}(^pn8M=zzLC5NeEpW;~|i zXz53%bbXdK+oud25f`2U>-m%|Zw%6P%}E7<{jcQA_7b1$-0}UgK$KdhPqnao|HrfB zw)}wf45Y7t+&C8fiT#I;FRY#_d`<)&&O}S;JOKF%-ma>8$X?*;)BATwiitFHit304 zp}9J&@96nu3S6h0xRC2Ybm?NIcU?yig`1qX2ivJI*CRVM~qJ{g@Ig0=asR)+l$}7qAXemtatjr-of*1 zMS|fHmb;bEi^lWD!|LU0_u;*LYKIxtXX0bdyb|)TF0;h^sAjmcuIPhwU?@ZC*3||X zV|B-J%u33Sesv$#yHBMrWb8#%l~Rz_#BR=&B+)*#d&P%K9Xn)_bI$MhbmOPB2pi0y zj_3i>J=JxNqF^p-nH5ONxy35Tn+Sfx=MWY4Ip*(P?A^0kgdf~w2!i!lm9tYN4w9*A z_Go(h>%fx;QxTN^oSV9pX|Kw}Cn)kj?`KMAzWom`fFdET#3sy6j-IY8IMA8Yo zVs9$Vp?0(Q89EL6^{lF{h@;MCE4}$qbM$Xer^xrEu?-xr<(NXvz}vptkfWQ7NAdTjJwR{%K}eCS zyCP%pyz(4w+Q4lSR#V(L0x#;JTvG&BWbC)x)gwGZ{iFN~ftBAM;`P|DH(4irdDqtH zWp4)iI-}LMH8^5r;CfpNx{z!oob`>a)zR8EhMl>>%CNA^b$|xe;_WatjRNSbrp9TR z?&dS>a-_J!%~Z;0F)*>EL%o(UMk5BA$@S(qx$NQ{b~oC`GsHZlxWoT&bQbis+h3em zX^e>_4%*kUie~>v_rwyT>Hg*I4G!zt#VVII3|~zK$Emz7?;|UzA_;N%P|OGzhZK%& zmL?FPd!N+ET*10F#vY%X952SKd?ubtq<6@v>)iZ5@{!+UJk<^m<-CN{c-GMB2bsiA z#ff-L^8={l3CA%J2-4RYzO^3>YI6LXUgUZ$3phnkg4#-&BTtGGI&dc+=|Od%FzR9b z7GpaFV(fMbz_O>E2)ry4rUddaMbN*G5%vC-3!uPqzFzc%kF1wpZd)WR%~=;7xKfxX z&DmPtn!wOuhHtk=( z7@f%Oxee8p%Y+8g`c zm}ieIn)l8lFYhb(D)@_7T#NY4dDz>u)(>ULp5<_Ot{YssPmlP@Y&XMGZDu9Rxza_B zby$TF(l8jKm4_?=dA?HA4$7X~qwd1snEbd)7v!}-#TS(4T5u?mtQm>3%wEP~7S=M9 z3i?HKs#Cch*lM53s{)3(dI!~Yqir-g6nOGP1NP3DDxeje^r}52I{D= z|6P(*NkYE<0p=PlB$aGk=<8$6PvQZS0FJ~c2%Y|jiyICOpBRroH4re7-@-VY5=8MS z0pnWr@vfSrf>vmZi9)ZDs#-8H9o%d>oF;=}Zh<5O@(v}tEHU(vvbdljl+#)CIu0l%!5X+3fdX(BWQ7?iDe{TXQI ztbF`!9_b&NO8qW}_c!1x*bo>x+%vX+zHhV$6h0<37;w<@U3q!}LX67s4kuR`w@j5X zFY8%}HJp#eyKE>Y2p85*BHeU!*-N%nkAL%7Ub@%XKrc-!?^)xk0&=~f`Qboa_~5r2 zUsiVx4h+VpV**fdu(m^S!n!Tq*Xiy=7RKMhGJbbD;lutji~B+MI|8uo0VIY_O=oT5 zpUT)Y6x2nY;zEY5^g1XyEEh!ol6p_-%<;+>A7AwA99FA;{mh*@AWrWs`?|Nm zCC-`0jI>WxW7eb&%Nq!@3}eU$fuF_z!@&oo8JL|@f|A8WDe58_r>&omd=`{Ug>~Q( zjRPo_N*?!(9X#hSKPoKGj zPY{1vIS(H5^@{1#$y1Ob!#}UaYM`o&@f?jxo&liaYz_~juW*_nlhNvW3lYeP9c@!a zra2x~-gL%wWW$HpjLeU?kDvWvpD)<+1u;R!MYja_roq5uH5qb`&czjn5dLJm zdwL3aRTsnFajDkp48$)<&_7mmy)(X{)?nFqzV9m}14>>Zc0xp5P;cfSp1 z5}{Z3rPn+{S0l0pz#>!4Xg2d*;51j*JmgDAP6LO>FDB~%#BMhz`Te7<(5iI*`182! z($RR|K(jRC%Q6)*_@hd!%t6{W72SA?Jimq-2;BkX*|x2SM02tVcFD& z>0*^{nQgYPWH7z2;lp$H1JA#cz6D3Xq>0*)BU#|6w*E<6B2ZsTD;F%_h+AtU3{%CD z2$4o^p?HD6fcajUlCDo>90^;sw6ENVpl7-W#rs4}L3->onvDB*O}?x#KVeNJZ5dGw zy^ycxr(^%4?p2E285}-?P%g^_ZJLh~0JY<{oqhc~bzqW0$ewD#xhOTlpC=GuERD+> z)=`!Jr8O5NJ%|5Qroc2{IE>7^kzZgLQN~;mB|xAwiTXUi?oF8z($CY%U-vKe=86a| z(sK+Ab7`A|e$?ldvw3(xU){(SygM*5>}ZZ?TH08gd6A_xL7?N)R&{y)#fvUj1^es1cItWSJ<1Xxq|xYw2)Y@E=F6Zb8}ua#~VX-W}hS zj5DjeBQiiy?IeWD60n4Za;s~D&16F*Mk~@tE?l=!zB_xY*EJ${AyW>h zl^hgC>tQ$RnT;`FdqPOyh)7F|a17vej=CiChk-07c}60y+BIn5O_!N8jPqesE--(} zlzcWfgsVa-%R1AUzDpTU*ARdP$3x?U=(h1@Tk~AeH#i zRHfk94sYXsaq4jrN4*2G7An#UZ?&-!-hsF>-&}&Zm`lf!8X}w%-(L}Ag@h6p+#Nlt z$(Q~K1ewT+F0Q%vSIZj_d3L)I$EFb=nXPAx7rz*(f1nGUYb@G{yBm&A;()LBlyg&Y zan!KQg@D!hK9^jwa710LJUOw(WoQ3ryeg0p_D2KPh<4F0Q*LxIiL~H09kAiMTi;9x z`yJ#{zy_^JK}mO1-oj{I2{FQO)-gd7;T+h%B`S2suTYhEY`~meYx1PSUw(n0nB;o6 zO6JAk*J?Gf43FW?z2(lh8f!YLLG)AWY5K6M`Uy}Xn_mH*is*BWywo)R=sR9Z0lCEy zIYLLrW=N^5(%hPZ31n?11qj}2SgGF_4n0xim%VCTU_|L0xrAYU)LT>}Fb{3^jm0e` zNZHo8M&^IM1&ldLsH_ASX>b+$(Cfm|;=BsTIpg6d`d=zCiLb2&DioTFQN&0fKDBckR zCz&KE`RK`wg5AvLj7iZpN2@2Rhx7My9XD5wRS={V9677x8K;~TI1{7ugeUH&A4<;1 zZ-3mivv5RMkXl$TCT?U@DfwuP&eq!ku!9 zGWhJpfVqG>}iNboLJ$8g5yv?!QXTrcVZCxHN2@L0cjVQ}SgU$%BPp1Q9&vh8poMb6VyZd7p~atcVDYN_9s0J zJvKMa%Wi1)(d|J%W@nM9<5dT~=gzRk??KT*w^g+_>H=G;uWZXjQtlVo+WCJD)4}Pj z-U!#?@tFx0{3lAuZ%!>IxQT`I5lneHTU)6}BF%zvE{5fsJIiLpnrM>UV#ZS0JB$Ic z;SWS+wwRo+h?eoeU@kYg9XIBA@z4%3{h@S0yIBQ??wcX212R>x^RNGP#rIbGP~hDwdOdK6=Qlr|{9zYed;ip%dH2qjb=gPk$xOVr_1td5i<(z7s#` zh9Bn5;Aur7;3k*s1@Hm{Ws?f+3F;^ey5g{=qxCaE!$ir-DJL8U?pKczqq0< zGq1r7(N$mzwf?M5R-L>sbE>THtPl?<8z5iSN?mQ#);mE0f$4U@p>|MUGcvKWQ#SImW_2Nerz1r8MM})L zA$dkdU(@I4Y5_6_Z|{wnl9^zZKvbUEi6t#*QQd|yc&N9qmG<@Qki7a@lm5B>qo31J?Mv>gmBG#cgW{n1Sub@ZX<~kusf0(`T^liMD%_= z*}jEE?x+5tCN{;1yXeE_le|LBvC2nan5jq%^eP8-U$oXf6O-*x7JYojCQfjMy=T(| z`JbBQK+Fa(2`9v&`kD*HK;Gg>liFqu55HcR=iy(K@<+^w$bn3zlWp^a;T4rzbG zBi>t=zvJsXYzxfSA1!o>gsC6;Wi@;{J(V4j?%ra>M(?n@Il^dn^A2obr^|(Lh3B{6 zZoV`fvJ}<+=8@U{O*m$`qdlr8GW^cwhvp~yYar1SjQmKf@wQB!W2vcRpJ!W4J*GTi zCtZ3w%m}oXW9c3yBsLFKL#yVmN@hd?;e)9IZ`jJJhUPe$sj{fvOGGHbnn!ptKWQP2 zMWFJ&XPT5MBd`HfYR> z@<0d$-4}*p4t5o4bhfFCBoZT|k(A6ZH^ISl#P=eF{+u95Cm2dee_w)t!*yq!{!cS0 zk|sp{@RJvRIR{ZBiv!V+DecIeLF=7*YFHe4O zSEwp!7a9dC#}0{aH9Xp1x~Jc<&|r1ZEo=vQA4f!WQ$F8jN};?RCByO^1&kxAfDQw2 z2MP#Q*o&Kh7j;qeMAE3(LeuR|UbF;YDcrc-R*iuyc0Ach)4E>rBdvQ~pk5XmEN8;$ z`JLoj2UFGzDI2IdUeHD zNSWupEu#6IXd;?aAT(BI%Rzi)kY5|*^u|a25}H>&uHZw!i~@>#c|^xc6kml$U;z@> zHV}I7EtV2K-y3YUeyf#*Am~ejHiEkBX5~AgXMUdG~^NI1l@h% zud?7PPO=qkrEHXQa<>^6A&95%+tgag=ja&+^IXJY&Z?Qa@Hf=7-XI^n8)@W*jb0S? znOwf(;!_Y~hsG|VKFCRW3Q`d*7*Fu>$A-PE=|EMXArXxo+sGh8Rdw@5A>pT9GYG=V{iS{w8?h?UF?a+14fa2m=yvEtDf}HojKpm7pBMS3j;8 zr=^Kj`@wA2JMa`g6{&61#zu)F*0-;*Nxr@(>naJ)HvW&(G{}y=Kr$U{#02#DqcTt1 zI_j2MAU?@<;m+5g;3yci{dK`=r@egrV3f6CJM65}*Dad1dBa!gVQ{1Y$Q?Rr=nw!7 zw|CFu7c%Cht&{2U3mU1Ip?Zu5+=z<^N}rJPs_;ntFr5r9?>~~KOzS(Z=(kXMeJ(+r z?}Cl5g_Rh*HhVkH8iy^sXt5Pql1IA()^>Stfg`5k91ST!3(fLq9CUPe-iE4zdlL0& zEKnzoU_$qoL(1(J+C{#wNLWT9NufrSS5bfbo>X43rOBMfBl^I`(rH4CQ3jw$!uOC_ z-vo=es9)pqXMbRz#sbhIrF+2(U6UEJTaMlBrxbm0YDEh|-|W;YtI~4*6;dHcnbxgm z%CmGi*st<^5sD-$4^^a5k~$lauD$)gY1KL@m6_BOQ{ z=U9x>tiGe0DBeN+LmI~TRjZY)J)^5(->g>Qmgt&gr_B~4hU`S9Jpy>BT z=Q{#c5YMcNcs{9kMJKzW3a*lEdOF3b%s)J>M+Oth0aHrc6}Zk!k(#&<+wB9`0-KSA zNZS;;SH>m&*@h|+Sfi+ylF_}_c$KzS{)3luJ8}IT)S$yyjvi^*@j3)_MV#B&h>F9HyPv6uT%opi?b+rvBsL<;dQJYi)jK#A1^a|C@U`Ddd9jl8<&S<;^--WEC9aNy;YxG2QD6>sc`(5 z>1lPLsTc<2LO;p(Ho{X)tS5*xuOsFfmKb$SBdlY5n5~yVvQzeYZeFCUUTCKf0?Zss z(&9M1p#!F9%F8g$<I%rq!5ZJMgp7`ZNp zM$CJD8%K8pjdNp%IWGxFuE(?+Yfw}9Y(tIM#A3v%Q&#C&ID}-)_HI( zrDIig+u)2)mjUxAM*#xyVao-Bhr6D;Q{|M35KcPhASuS97@WG(f6SO!U!FMi5ed12 z+`uWuXf;ruGSRbcG6P;W+~uaao8MzOf>4Dw_ub%du&vxhQwvLS&%w@QeObodUdCK{ zupT*FyVv&UqX3k_nK_piP$dwRL821!hs(m}Q_cP#;N=daQ~bN zH~uX}T?zD+F0Fm6XK66k#~y>NyNnSBjO_|yM|`KiAz%tB-;%dZZ@hyqDFvT) zb73gdr$W31uu;)QYp8+Sp!8+m$%|vw4AV~lYxgzY2uxXs;&BI10_At)W@((#J$B`t zk0?CCetB{tR|tF&{3qAbXC3`@=HPag0F>N+>bR{b1c>4^a_xtTYp0&p#%ba{Q^x@G zm#5H8$c`Sw_Jpqn^sDd*MB#U*Nf}TGg~f1>ThARb$*}|*5OU1gVnV!vd+HJTR5d03ch{JaGa%jvEdfCFh z0Z9%p=!jD3JD#K!v{C2hm$KJ&P|lQQmK0P&HMQ-0J4YFW|5`nVvD3eE9K?#H$L1jh zaKM~8RrL*8t)U;wAW;iqpu!7JT=HnDm!C(UU^R4#x5vW>4JZE3ifx&D1J06QWd8tU zX1EcT6waCqqU)TVo02&^v&b`Kg1L7I*Eioe1jarFUsS+O?JWw4MWxyS+rWQ+r!iC5 zDPy-Y(AG%?tgEiO3yeR)j^Y&W?4y8yirM0RY8aO?hpQD|5Nic zJBOi97t$7Fu6*to+vjX>I3rxptmXd0@Iz&${TzS;RglEEt8WAFx0pgqI5cpyO3@Z%aZ}PWDg2l5FNf(Eh`n{qjFn#qtpq z8JgMG&Nnwi>Yk7k#)mj3o5<~ zaS~}pgY?i2rrzT@A!Q7Q-ky0+CwW4lqm+S*7!|v&u^eaM()sLt-)@>k?JjGYKaw<{ z$-mW&4FMY4j7y^J-KpsU1WmP_-)TlW@7Rc-{2jOlWR=j7F7tY zI4i3I(Nz!gSNSCdGhJHYOhT!(H@g7kTGRmmkDo;YFF)37+h>g`@LW&Bct1%HZrh-N z<^%5Ej%LySRsIBl=h8n9d+c@_6H~0DYj4#Yy;De1G)ZkO0PR`?{GmjSrs^v`Z_|IkJ!sxoR4EBJW?O#@BiG}tjD_V3yK)=O+>rTdQter$8R!mot0!- z0_-vvS*YM^%_J3@dJ^pauZOLXpZMR0>|x}J1{LRZtRk>jaWHkP#9V1Frt@W-N=l!9c*{1d&ZLNPV#D+Cb)}0i~~rkbFakumO#vYn_>gP)@oQHMXy1W-B8mT(4>{OdCeq4v;(<+?z@ zD=+yfLL@l9%s^fOU!v9waegLdY4=d{kB78ax4S74z<8wrLCpt3m|b{pA>X(^<^5GJ za6OKHAqCHM|?h^zj&IZvsQI7y741&{OCWLND2ZOSkS|pr7c7&e39}<{7DPknSf=;Zwl|MR8B!ZjpsMJ@3Q3_8^0x)Abgg0 zn2~;`J4o%m2&-aG@9sb-!`uBR2L>3Bi?^NbVaU4hZ>SjU(t*#gEWw_d^Eahnln~8D znc59a1TXD0hRoH?xDOLz301OMX(^&07IM~GpdpJp&CWS_mIUD-!_0Nh$rz%*PTx2A zh7*j1_?TG15-U1NJEmA&VNoxXY~P?+8wCRPWbXc;Y1Im>+DOCest=4fwh)~vQ(ucb z@!kDT2wkZTBPEVJeC~0R{f2DgSgJ+dz?R2a6q6_AdjC zB+X`{#q8ocBfG#xlnPzQg>OQdp41zolpGUH~HFW|L|q2mcKfDJJF`LL&`>4wJdIeIFy z%P?iXQJk*Y1Fr%}uKRNi#<4#HbU|@T$*h{*giQ9NnGd&Lm&WN+aB-_&EsivgsHg=% zJ!cePo3n4KcA~*D?jIox!oi;xng2TvHX(Dgg_(Neo0*|-M!kH(L}GAu8xmz!vQ^Jh ze*u;;g!p#n^JPDxX)S90qPZmG!<7XH(LB-05FYaXNYtqO? zpwJ>lzdHb7-7YV2Je`&DV%&hxEhlt0Sh@u za2hqaak-DI;^(8;54;`oH~vJGf+y?#7R|FQdB)aTXpD`tulg3&MBNXeS}z};CJpzF zv>=)_EoOvqgz+{vE1pVV$@F^pOp)Qsc?aSRPj19>tqkGjGh#G8 z1QqVr<)qixQ07+3^d}XiiQrrxUJH zPEye2!|W%>Z}l(WN%%1ZT!ST;J~$4-V31=-+Pbh!nn1mw&jBsd-*&bwa;MlC3_Y0X z*MjO8CR*?WXHsyitAw1AGc{jz7F3#~s_;AZ$LzX3)oC#cR!p*~+UcltR&6|h{kVl>?>d0WvmL5ms&70gouK1L38;t~B zvQR$Tqz$uH)>G4D5Ru$YxkjH5%S%F5ap3Z;H0mGF%|8W4S|7C7P=*)v%*??QCw38+ zEC})77*hFR)1>G<@o23yo0o+LzbV}dJh;ThL2)-kdc51SJ0yk%I_U%X#4>-LAU$WZT0ate^zz8@Kv_^y|FY)?8 zINfLboyD^JGvOAKI#t<6E8SgUbrMOYsZ9ckJiSu)G$${1Qafk@7V>tn2mR)iNQV*W zm$xN5NL)#}^O&XG%1j^K_h#M_I&8svKg^(sZQZ|bkN(pa(NicZ%o6Y_ZU5xEW|-%? zv@^u|LrW3$Ji=}P(-Q+FEH~&ftQBMTZ`a5s*oN8{H>kva;}F*qHea`)*F0$D&zG_7xDpJ|ewSmR@?b@R$>XPB?7=;F6djJiAH8A4K5+$64gm zU#)*$Jpb4}UvD%CuxoqFYo(yU`vM6_)@`td=s1)h^*YZq0BcM}r016a!IVm&3Vx4P z5Tj&nT7~a*@evRn@}*m3x2>-Uc1PPOkjQX$@Rwb=#3vgS|0x8NjmAt2K;xU!oSBZL z81aK$w4g=$41@6+vAoP}a-ps~w351Q)r*)+p$P%ARa%TmzjHz;F?%b94d?-|OfR7e zRcx&fm!D|bINZRo63)77tBRzB&$vdLbOVVL=ifzwM;j9UC@-v`T6R|>l8%pP%&*5w z&iAeemL%YMw;dh&Bx#zjZn38&TkINtR2(GRef6QED3W zd=-OJT6xv|w?M3=z(_J9Sr6nV{W?XR7|p;64HRv59AjJH=2FiCb+8u!4A3{PLvu~k zb&}AeaBLr}!q3;oC5lsAyGFUDT0wb3&f7nqw{o2Xb7E_Q8}6x0VMArah6Au)foZQ_ z4SBC+hzH(3;uR>2F=AfehA6BwgBM2c-r4pC%<%G4s3&qCPZ|HgtkmOO$kXYUfE^RU zXp{f7RK5sI_fWj>9|q-yEAuEUtlCkR3(@t}JqU){AK>L_6V{)dOQ$pZG(`ZK?F?*o zgC424$oa+ALoo+d8mZSpf5+>~4C zc#2EYm}gmPrZMi8pi;ryjy|_F9sf0kVgQY6fgNyg@L2qYKML{~7ECgnc``8?RbP*nJ)m5W*x!3jOJD{Ey-89oXaivspo z0oKc`zXTHQUWD~h7#;AWFC5jG`dsIgk+qb*vVnmPoHA#h2t}|4L^s7cp4PJv)*rf z``9DqJI8m)C-EF!7*sv1k}NE3kDL`$Z{!OJ@7a&^8&8r`g1DXJT3p!!PeZGXrV5Hw z!}t6fHnB9$Qn_fI%s9{nh4^Ka#+oTUhYG*~zJqb%-W4k7=&Df1GBNFY#ND9HSC4=2!>fH3krlSmP*`FNI-JQb2Th`^P={0GQB)fan7*-Ilg4B(Do8 zo7ED(MdT9qSuE%kKuX3W#5v(BpaPL(bdP!iufPY1k|^?qwDG|>qdu0%NZA>Y5Fkw9 zRU~llY#J-l0UXh?PPqpM9?eq_JSlPK#6*><#D5qQ}DhGcd!f8;v+Wl z(ow*k1^jpbR!x99B%BU-xvy7a?-mFdu7Rfh+>P+ywKvBQ*=Zc^+0Y-yu_)^7rEQLA zRcW2X(YE@?^NdrP*?Cal}0=l;RwQzSa;J^eCuoR=EU4k=qHFm3_2WF9uJQkB$6 zxCl@VC@{g@__v!qdaIT52_EkN9y`Q1r%2{Wxh4qB@Fkbs&}Fq^j6 zQ2T>z*a#jk^pJv?49GS{qfGX5-y$|LwX8&&gx*~9(g}DPx0pHO4C4TXog2nks21Gu zrdY$rFrb)#dKX12koHu@kgCDllF_n=FxG@hN@&R3oa3Na-J_rYvcvFO4jvR5=Wpfo z9zUWGO^^=&&bH!LwyLP&jlRFFKB`=CuP<`D4T8^$j)Dr7FB-XJ`fHwQ%RHSioqeQY zUQi(Ycl59P?+?OnFGB6&ajqTL$Es#HasZBZgyo$E0(~2A;!HaZ3n5lLG+*y~$;@Xc z*c{)*!A#?%l&3n6CHcF8O-C}E=?8Q-9@*sFPkgETHu~p4q(vC7UL5bWmd`Nf&U(lT z>cAM|!wD=K<>4RO8cmTiYrXc?9EemkB>%|L*)moA(YG+Cn6(@O!=H0Zp1b(~M`tjT zCzXUm%#ivhSvv6!cLRBUg{x`C;&@rSP}|3R0`1&4`eP<5-z=mb07vF5{1|2>0N~t> z6@g)(cYuLQ`2~_dIJbtbd$A!s)ysoK)M31t+W{}Ry&cJH9D}nj0wg-!Ah%m~LFfS$ z=d|T>a2pejWXK}|oC+->sUdO+4B*rg8(Ybfr4_9wzdS%mdCVDY*Bq)vRAPKa`!aAN zP^LCc%NHiyC;0_Z5!)3a^4&bbzFloE_ei+J zA{GUIRXV}#PIy^fPY>m|gTM#h%B2??J1*8OUJE&32jf*Nw%;}%(vYq{xBj3Otx`y^ zC}zVcZm^!-W?GE~7b(XgY`Dk%MlfIAU${rxa0V&10@sqpuW>FDxugG2V-pcAD;aQK zO+#$s*w%ypmAh|oLF@Db6kWg(W^3_Yf01}Gi$A*CokWeANNur+QePAeNa}=Q$bb_R z(jQOZTGL?n=UaHJ4eyc3yVbGE7>X@srI0v<|1I5}u$w#^B5RqWHc8irU2pvfq!cl& z4$GnYmo$Otja$DXKgfDwZ?xv9v1NwnrCYe%VC!j=_>XRD%~T;mHAR0i&1F%n z@L0cH1E=DCPuw9w=Zn1u2KJx7)`eidwFotvX`y=C<)KCt>*XcXVrtnLOGli!?el@= zEB@#iuCEBE!%)8x+wRWub&PDW6}v;9a%<#=6T})K+!yq2HZJPC!+;`^I@?DOkaF%D zukpD8v9FSZnxAUdw{9ls^^wc$8NwLEIdX;l!k@RfH?(HFXtT}IiumZtOtMq;j)$m< zv3{!7)w2>a%RCO&8)*Y1Q8B|0JZvP}Nyo#ZcN)z zD|)DDw?2Bdlr{Ky{OK-^oiACj0!Q>JdZ+*(@=45Vu9+omJ+!iTP}q~0Nrnx7$v*MO zb-DYG?O9(;RQgY#VwY`riCQRCYLu^hODaXWM(X3aEfGW#VPF5kgTlR>*+;=xtHtc| zClBr#ntLo0-jF1JfL2%JRUASY!>1(tClYQN6`9(CIg*vE04M|6b2Eb>4*_28uCusj zBh3%c{yIZ6(|{_#&+`JGgOxWvMUY+HWj?d^Xct&+!2#sG)7rmHXN*O z)wK|%XJL1GMaE4rw*#@9N@`If3-w|O)q3bNV~Y668oA8DT-fa?S?*yZk#=RsBofFx z@>Q&=7qRfKT0m6;raF@Yt6!rOqLFVBTk4UDlr-FbS~t7(KLy?AjUK&=TV|Fd3N7*J z2ClRjU5xaTx||?|QWNn-A2`QFh=DK(bE3)O0$d>fBIq2sMvH#Jv(i+NFk1!-;{z7O z@R^cy=o$xcRc~#0S8&`KLfoTmCA;H9+|0hdCNA z;-CekIE^DM0|Fh-_7ND2+(4wbD+1v+DKL*0G5IJ)VeB;puUZ#&0&V}6Q_qdO%fs3> zbZ}-Ys4%Q0=PSH?9LAo&H^S^Wf6i;Z?e3i&I!_vSn$;PT&ODL{2!aKZ2BiD*5}1R+==6v)r)yxh&Zq}0Z-FZB@GzrbAVo=wO*fOb?dz6K}yLW z{gN*EsCrUjGjAZbZ)-;#blam_>GI!8ZOuZJyQe(udML?0vXXxJqZODN#UjWqa4rFK zJ_0#Uvgr1nf)pS<&GI}T;A_x8!)v^~p;Z%YFK}#M3&yJ&(cKdX?YF`vN&j~4%}?z) z8`dpbce65Uy$}|liMBf~k<6SA7abb6?~4}7GR^=bm^8t{t z&LU%@9uUp=`d{^G{MUNuNq5~t;a>&+kNhdHk=Hn73aSlL^(5Y4PvCX@v6tkIG5*k; zT(0fDY4`BRjg2r3*+DbC$cgU&oe~xZIUUo22#ZbIzDr8t2Z;lb!u30d5eiDa{2PBc zc;#3(@2$k*@dm@iKcDN^8yJbN9+eC zz2#s9cBc>FbNzkJ2r@}<58XoMf*!`ltF@VEF9W}QaU><>-GT8UZ`IojEyHC{M*j^b z^Fzt9nN|wOq(6_)=;ATAF<0j#G7%F40trO>FD{aRfmF~j3pZPmuGa`a%7~w zv#@R*lxBz4-N1q}eOHM%lC5&Gi33?O-&G*^Ht)he%``SM6P=`8_r18vwc?h+{e1)m zDH)!oogYo_$)mvtu3^v#t>RRA%ywZ4*# z*F;qn;F~RpJ#i`LYZnaS*OaUDrkZ-1u{0dq3-U5H2z-u+xamO8FnQA9Ymj-X(+7JZ zq*7>JqSo1~ZkB>}zVMIJwkbIYl#q`IjQXcC?Mj|gq3 zaT`U~Sxry4O}(Mn>BP5QvUX3UpD*;kx)d>C7qs9$cJx8Lt0Wba<<8<~a z#e2#}zV%uI$6D@fht)!Ro5VF&po4mSfdv$&_L9bO8Y1+Q#z72%`ibs@#=FX#J%c}g zF=Eh_FuMY5L@5Ey+t|G(r$EI0AC;JY0jkwu{z3|LL_d(w1ae#+!%5NNDo9kkKpgn| z4#2CNz3uBIARCH!KUOo4{~b*;)Ch!Q;7izYIS?uKn`3YfO&?1bCkEr+U5pd_JuQbh z-%=JS5NhWuG+o1kT^?xD!$-TNfJ%hcL5dBLcHU>}u(d#C0asd#t==RYOMvl9OMST zLwW0PC9LTNha;P3NQmJxdhaxcd-7%Pd;_Jxj&u6Z(5+p#5@Gz@@?u-%F{-r+<8gAE z;4QfF{R2>ZMvhXhA2Hq-7Dx>EbO7U!RIWDSiiUshMb@)#?z|i=VfL@RN}f|pQ5mZ! zP;S?5onkZlZIw5XrdSMlKw47#ejK7Z&LK|D`5A*@klWt{GAjOvXsN*)Sb(scb0Piq z&-2{Y$=M_DjCNrGz-x9m(CukLt`^;q9l`8q=)@=v1=Z-T=;bm2YU1c}lc1}1d!ji` z{H)I>@lWb#%TI^#4YmAS@V2u+v7F$AcvD|_!smwv=zpX8{@1;*)V!3oUDU*|5L)z} zt~ytWSZR1$i0m&^d`_UiLBKesj1s?jMxp*e^yJC-C8&-(dju$>oacLqgzRTSqrXKB)D!(#lLj^fq1bBNA}>4 zLMCUwR6DNbB%jO+CE2IM3_Aa_LmxPQ`8cN|f1j&+c{x2lT_z(D(iPJGkQzOxvi{k6 z@{pI5KoE?QFAg4m><69$t`W7%r7l7=mH+jaH0?_@;X_{&4EoibdmU)*9=CgRW(IJ-xFpqS=fE`1YtY%ElLcG1R09|Ig(HbPx+XO%;_+Xv;I6 zro@TUOVK0VuQs#miKx=^7+~e76PSy*+E-yWVBg{j>;#^&Mq}ibL-){k+aoEL_YrXx zp>feOL7dViE03qV4^BIBsibPD&ro7(D$`k=h^qn-%bYojHFgW`ws2SZcvn{hTr!Hogy3zm7BzQsEe9AJ?SjOhS;vL#y4cFikOS1B+biC6^vxrQ&Z>@u$rZ z&ve0*3+{M*7=Rr#m0&9H*ckHGX85<|7Ae2 zj6_b5q|u-I971O!IrYKJu|s^N8HcE4h&SxUXZpoj9p~z5zrI!#R*Q+A=eKl>M1plI zA*oy9fR zsPIqcsIEuB2D;nG%4Cl={sIpJHxK_p13K^t>>j8Vd%cIhq55PW^ZUz7zF9&LXSa%# zfAY@l*!D@sqWU%|4CS*cp-i4j)A+)vhBtRb+u&*yBaOQ<-x{Q)^?u!ej0lwI6V`df z(N05(>rwgn_3QM~%-%)-WjbBRp|9N$*)>KP*CJd#9atMxB%9lG6Z;XN+4g4|(Co-} zWA;l|6?BBgP8V*y)N}zU@scy?@#ze?F#U+oIbq%dL$*W!EgN$NI!yKZI=x*)^z0CB zIE}~H{Db`mqLG@QBJE`5kIHu5W_grX0m@*>aqAs_P_XepcN)f%oa~`3ma2*d8?S1@ znW_HgY+LQto+nXAT>;fI^9O^1q_c}(zql?``u85 zK*N6zAoO*Fh@#F97tD7070y@5Er<_Od7X-xAG`CsJ+|5Q-0^^FEDGeAu-e%5*JFvy z%|Yn8{UJM;72tPl?z>|-BW7Id&txw22O-h(v{ou+alf$%A~c{`Vnj`JP*i#ks-A3t~ROX*3jN^UtBzMa6X0Y8qt|RHVGRP2P0YZR61DY)`{M0PypeGAykhL&bk;A5cgq>c znDJw3yEAuyk~5(NsEU&THCr{sSl79!ZwV_^N^yOth&;%IO5-i&YmB>R%aMz)q$L1i zR)tbi2be$b$y$A5910ehnT83XN2_PXfdv#GoAuGzw1ZkMBgw>n-zXgM+d@&EG;NEX z)0m}(aNf0ban@GDSDXe`O}8~vilgd%rUhRzNfBIh9bG0ykH88eZXm3YVWN)gyt1UA zig@=_cRb`SHqRK!7-q?|P*;~0n8%Su+zw*B;;Wj;O%?*YbIu*CP1V;&#wv^D*v#dK27SFPPPfjU1etOf|q} z=va?flDTwQBag^xuFbHsl6*}hhm|x4T34lq0J%**p6)yM`-T3j(hV#7RC7JSq~&wq zmiPPnj8F#JBzz;&Yr{$oM93a}-EKYVVYn{d#C*J1gU4tFXopCp2{uzf*Z}>k@>0=M zF)S*k?KX!TxmxC{Iyq<^%lps2)FRD>q%@I_T_iDak^B_dsN(JoV*t5d+>n+}&>Nvtij3!#igw2b zTi0syG6g2oNL9NJ_@LPMZc`sDSa0&UPJgV{t|NPA&n_mR@!%~_P7NqoH-|{$rS5%{ zHC_HCSA(fTb}*(}F?dQOnze#qO`UWswb{I(J zVD`1n(W)oQ_hR`HFQt>jfcV zskXskNx~NL0q9$UN7rBy;TjNIYB*uMnd{}1PlCAzpH%)HBTjWGKx48-iFkD;3x~zG zl%j!aY5H%6T2)J^X?bCC+c*4A&(+H}&#iu1GPNZ*RN)j(IAlpe)QWERT&cG}Z;P&h zBqJj@PJg1(34bbVjFof7P^@nG^XVJ7_;O&#>TNf}8%QhZtEdW`cp(P&9J_Elj^WM& zH!~dNl`Aqkz^rk4cXLqr34q6%GZZ#1-^MV^W7)b_4KY{~$H*@l+E+gzTrz^l2-OSG zKQ9v(HC^M2RJQ`;RRVLX5(7>~KdGUk2&CWz&x#cbj)`EP>;|SV5Zh}GxE$07fKC!! z;2!x&!g2K0DuC$Gx4R2k?TK9^xfZTeEJBJ@CDyrBSZO}X$ShSQQDVmB4Vl%f+#eb2 zIzCMxHEmkliFem5{Tirmn^tl{b{HBFo~z7A;c^|uBISO7<(K+l3OZu?i4$IXAHk%F z??~$JHU{G#c$>#-zXTpLM>DfO@=|N%b)0iC$?RdeyFBkamWT3Ovnx#Sm5#%Qh6RpL za@=F&mU>6pqtlQOfdu#fFYgD%?)R?dRgFVi?>6q0G}7Cxxf|!)qdfu@h5XlGTtvl@ zS)$tPEkXhg8M=o7%9l3ti{^+Xtv?ITpMfGA`ab9`X{Wke&U-z9X9-wET2(B-l<9pS z<4ZvoQ5YocN-pB3R^(UQ>UPYSZiJBtNqaI`r_3 zSp%(tTfC8~KHe6%X3|!|1LRo(fA}f|p=a4?POCfgtNxB^7GaxEyO=a)?M};~z`f98 z+1|q7!0bkQJ7Pnp!bNcQ7D^OJa_fe954*cZCa-$_%TvX{@n(8)GkK|+%Tw#=@D5?a z+pcx`ZBt#NSAv()0ruG4|F$mi<1H-;h7VbQ%+H8kB|v$Aci|Bk5u4rB~BqV-Rsnl=ku~{w^W0dEPkEV5f+}Z-3`Ax091M zG9(x7s#?e-KX*42V%_1a)Q*}!qWkcC?cUOZ=(E%!+g!F=xq7eXtGlA**5aP&p_T?D zQ={~(&#(mFr=N7?aJ?erBUS&=BZ@aKBz4tsz27%{10Z(kWRuMU-fXx%AB^=){uLLz z2w(ODXoB3PV(Kow%5r;}3Y=h=#mt}ls>emz|FzTumJ{39=t}+^no3RY_DszjA5>nO zUEKTV{^>JvAgy?N&_xNlIQqpyWJBr0i`w4h*srZm{JPg$AxBb-BzY?40>S?0-|o+=FCe6b$So85#O414yN11#?Pa4(0bvs8uUCa+ZIj2K z@}Y4Up>uYa%YIOqyo2e%^wHl6IwX5;p~iLIS0P>LYiuZl&WfR#AT%W=b4Mg)L7X{J z*Muwk8pav4bc@#>P^7ezl};4hzLudg^3}#O$qZGEQ}*5V3Y^p+;lJiWkGZqEQgYNA zMwL#%*9iBol=Xz|<+YwgAJx=dKSVG67fhI?{*y(j7)f&nj&t})61bD1fF$qWGu7;Z zbp$b%FXvD}iM7p8kj-DE_w8i~KW-aOQ>Lv&atYE4B~)oBN+y#6|Ba!2Q9(Nrb?SK% zBTHu(*j(!^;T|$&-e$L~t|Z0pZrX#){U&CsHSV0*Kvd2G8ROtnfo-f4-g7`Ss)lhs zzyVUo?ZK01e>&MQM=6TnUHH3gV0$(O!V&}svnG5E(MU&jk@zZqq@807{-?s{{#Q)PL{bb~A8V?aJI}bDza$-S%O%M<6;gHOlam zYWxMM0RN+OTL&rbXb1YeW#V)^m7@}|uh0k?Q)WnWlU{UvF-zgo4n>Yn)b{9QGduqw-(c>5S<>vr?7Y1h}OS-&&i3vs3%gSFR&JczU0VgWBzeajk8qHkK;MG}^$ zfp9D4(pYA|(gW-+QxcB~Rl1kU2&mrZwFxG6W2=kNlFzr@J5VmwhPGO`gT+s}38{nc zYP;EwaeT~%q;0%v-@a#g{8Q$akIl6`brHaM(M&z~sShK{<7va}gI*RND!H7Yd%;qcN_r--P5|Rl+QEZ7@v>dp7 zP>001gE@UAG;u4P|M(C3R);`)+oZ@-WI^ch30`fz{2+1h->RiN7~{)pT0Ll|=W`*+ zYt1Ed?r|gsF_uYu&>FG~>ags5)oyg4L@}I38LbQudRa@+&t$}0Tc7tk7xAf$(2&rY z&ckR3F!TWbKLEg@_0AW@$j|9`M_+1^#2a|6xoCzZ^G3@#XeFKp4dH^DPv` z7LDC=fh?E8|5AfUU{`~TPzuZnaT4Ak`?K+OMX3ifa+Ey2`k*CuOpahXR6$>=HJ&3y zxAbz8#KK5R%os?pr7>9D_yo&!urB;+TSCP#)bwla0yH5wb1{(b=M!u*qkXl@*s`tW z+-ECy_(?@aQkl;5FU!M$9kxS~j1r57P!@s`=y5CLx1>%(5NW9oVbo^MyO^LENv0?K zXKXgqknWY$)Pq)kq{&8}^pt(DtrQKEXvq4s4vII6lzq`DtwXBKaa=3BX6J7~6bR)& z0a}t@EBzKXHv;|`>oZ1vPx^$IBXT%%UiK1eWaJ)fW}8ijoyU#rqyFTFu~6}LmvS;F z!}`j8Wim?Pq^wM(&yRl_InIv8Rj=x>B)^w+-*36tOJ5Li!8mTDSMEyXQ?ixbXJ^Ds z*dA1V8z@S#8rT<7mk_$m0#`=m>;mrzICRXL8G=^?Ea!#m^R=nD#m(^C4M;^0YikYU+=}Wi&lhTT()E>W(_cCbY{zNn z_6B!6ZeDaj`=$`|Eqw!nA@?H=J0~ zLG>A%S=@Z^AMe}I-_*FtX7zclY0+DJRexIY3yjG#+o3A53!ce7)5=9v0kXja7!txgPjVY8pBaTB<5t zHd>Tldd;SeV*yA?4r162uj#9??hZcn$%&jdB`B~B20?N>bi!tKgw+b;?jrbZ*0if1 z7V5IJ4MJmq+hB6EVw=MVNp`jBFj!VhuiUKga*N6D@TPuT7KC~kgZd_%BT-iuQbxuS zWWFX?% zDIMh5Cz$107GC>Cjt96EmF~70dVc3*dre2^G)&spw5Pat9w!T+RUA{v%KyBA>Cr;K zhWf4S7QO~V3c17fwWW4+DCS!D1!D&$Ka*Fy%a|56YolgT>wr60xY=oCeNeg+Q}W;z z^*!KG(l%5i_dj~Y3YJ3m)QQ7ZNC&83a=ji@C?5k+5;8a`ojaE(LH>x*H6Xvd4JC8e zZwu7D{Rzt&v~bglyr_jVAv{ci*1BK$?TF_+e(G5`d4a;jhqB_M?un`x{w-~3@qCZ- zx8)Fggnt1B$;Agga>?TCQxwt426G%rN(l8uU3p~zzrWctjUaKP=b^N5Ki;2DKJ8FE z|NJMd!e7r1Vt48qLRj^{tediL{^T$Aq-m3F!ljHFv=g>bbp;2w5u#tn6qZ8&6I*u@ z4ERYAV^DG~Eo39XI&d=l{Wtw*s2K~SP;VzTNV_4kSNFD~lOu}aTp$t`xx&^m*J^{b zU0G*nq4tF>Zv)<~wHW_NMtJVJYgG9w2+mTcSx2HR5z4-0q^{EdxP{Y=b{K{J@cQYO z82d@aJ7yWV#l5w);@)60vx^oAy5+dS`IhCypj;I6wd*ify{ai{^O_Wx{5x!=E6G`< zyp_2rSzvXXML-YLXW$V^7p^^4O_+$Z0cj<8sf*F+fTeEV zGt3z#mdk`&kGks^g3UYYl2#bcjIHAi@Xi7}CxOaEz91LQvQ8i2p&5T=l@)0j{1gz4 zR$2*9U3dz$tv>3&RYR^&I4@OurD$2fvY=_@b@fw{+w%e}`r#NI)C2cgz8*{^y>vc{ zAbT@qv+y2;>;`&3KRd2?FXI#&_Fc51V5di8-!?JXx8teW`cQmNKc5zUJizRn#^Cx+a?!}V- zqyq~+KQ?bLJMT6PSb2xrU3l~yU+(%cdCkHlH$VRV39ku>@Y1RO-A3n04)gKNqx>zSGpq4T%;t=jF;{^ZFiMqs!nV!_Ct zM2RQQ%Ic%u40|T*M^VrS#K?%)wl@x`+l6aLhOeTY>Ya;1jl|nm*pYj%r_{f%?o}b~ zfL$-!F#;Ib8&X%TD1p_q?x)}9xFprJ`&|MgCZyJ>ws&Sh^f@V17ax zEPc!-=+x>)Hw*2(<{{vEVkyl7Ng1HL*l;dNWETMRegD!B;6(K&c?3kmRInbPDcDuHfC zGWk{$vzk=suS+$3!NFY>n~Xp8yKa-(Gb-!ucsfzcSo?E$3!C~z2Q~k#8p419C zs{m%B4?Fv=WNC z<~dC6=$(gJ8oula``g=@9|5M|fSv-XT;YP3>H;UmFeKN!=*1CeAcyva>BaRHqA*FD z$9^QbzU{;5TUgbg@@eF_b1t8Z6cNxklMXTcXwCLfL9ZqcM62TM5I&b<be4#zZ zz_Rkh(vW-=Te5At&@EK7Q}}?D)7*biLk#s|4bZ84HBG-6UMfsfR3HS459+);bqSD4 zi)T!AOv%&#{-->`B4S;}9K~HP0mK+^esr$hsSbE&Gz)~@sim}4fo|P1yS+mT4ul#?&`#!LfRu~#t5(3!% z25fT0bP<{MY2fBj-L}NsxB^{SQh|p8or_?9C`OPW8g|!#J4C1Kz5uyL@GcUcchQ@B zmFWY;rc?o0TQ{pjRvTqWvvZ%R_r{)ASW?jLd}%%nGwokOm#KWobK^Fm%I(d9oE7Wa zhwed(qmJ}P6rPLd_M9_v6}?w#;SPXzRR@p#(K)fdLms2tBT4!z!F$84(s=6R#Zm)2 zFsZfwrV{n0BN<&)ru2+HwyJfFG+8}h;N>3EvM%DeW-p~`~TDQZsjIV@>IMdN? zm0?92rf&Bnm9T`5* zI!IN5GR;o1-dyh7GbI^kb&^VuZpszyWIUhIa%O5dcr+EntO(}<@;keQJ8sx?LK!C& z=^*PaR+~RMW!sD_{nlwA$;t)1gFr4!TB8iqVgL)pKno=eyJP*epKsVyM%!+PoZhEd ze<+aQW&x98aJ1}K-9mA1z9OX2Gk$M0wHFUT%#L_LXMU!wK2hwT&Rtv2m+g11qDL40 znMZf%_?u5T9tNtsA*XvRkO(7!JoJ>%0k_+mW~9UrjO)4M@oHew5+rAODVMglP+!+R zWL#`UAu;_g;GkI@i1^uKG^L5?eWMBT@m zBAY82AQUJ@is*GOr%1BvXv@I1!vcUG7Iyc!#;ORo!Z9kyOGBhBf_(@%`#es3t=aXT z8uRP*qwFIJ=)dD=*Xjb3GfMJScaO(GA1BcGQ6x+QHvcY%xoSes5<5%-q1yNWAk_q( z<2_sdmRketS^`e)6=ikI+uh;-#oZ8MN@G)@|Bq*9hC?xd$B{e}N5&fJB588jUPSEp z^QumaYMe&pxg{x>sk_aD8^isp$WBOLS z8)+2QbxRn_>}sRAYjj$PX2FCH(9XhEfJnn}o~YW7W+MUu=Z%rBy7Wfum1NQpo{Aobir~dfXZC0)A z?94m_3Yw>HWc)RI_(`K7z#qf&x%u?{^DU@(FP>|#RE%QP3`S4Yg`*# zlqSa55mam8GysFKAJFm$$rUZ^vCprSHfCoAo-Ir@1lgSkdWPL%VK%u2M8k>3GgJX2 zSO&rhDoQVIP`xBSe$b?-Rg#vHdJ11*{Efwdw*@wMzCh|U z9;v{j<9Z8cQenpf3U373{&GB{N=mGsVem-oA_zzs19sxRDbe8|l{yfNFulplvpp_h z>s_oNo)&G@zRF2}*$bR8-#>r7z=1{2L=r|ME`8t+v_lUQ+54OS!nbM%oyP8@{f6NW z8&T{W1ctfG$7A1#xYtmX#>-`FEti`-1Z#nhAXJf4V%|l*nY!44%_W7LpSpMAbskfn ztGyh75~$0(hJxiJb{Q86{$6jpleZ4UBK}2aIHS+ljK0d%>u^2XJ$)9``FYHd407KY zRrtH`)0a6Jm`oMj3u%mGbw@c1PfBt)lZ+-q(Tzc20o@ci*yD1(mr=MDclu29 zQrda5d33qEbH4QG(0;^Fis=ccFGIesyEr8^^oSi*eK9;fzw4-ZMa5^zx@0T&d#KVt z6;B6bFM9PqFi{g!@sTb(VWa!&lxQE@=OR`#jC1XU%7x(8mmUh0x`N_Rj1%|*qLrHi zbUFA3C|WSdrU;(Ag=j(j%OdEhJo?w0`kOUMPuCT2uW&ERtUH`9_Q~Uk8mX$-Z(uZE z9vvdhehiuo!9hZ1F?cotu~ zCiOh=B~6q^2-Lv=1e|zGMeqwBq+zve@-dA4FU~qg;9`I|^$#j0CKkA3;=JjSE3Cj34#Oxy32u714gyJNA4bl|__ zW6VEo{!yPubJh}yXQWIk)|d&U8no^`K+V)5ee8tSgZ`h{zaUk7tJgew$N?oQL%is} zddZ5MM3}E^E2zH+$Y=qT^p-gS8Y`RSJ&ca?4Aksb(nu%1f%1?LdU#GIxH6BnDbWJ1 z&mKsgFfNFHq6TXcnH~kk=qoP)S5~a;Kvi*~&06;~@%^&(jzAY?hRs*5{%HK|-4<{v zEq@X0ZYdkt3U|p+g^0E{Bi3a<(ECt{B_p%M3!1@JgXtNU-^L?Nxp6lQc+L$zfJI}^ zdttYC087C4cpW5!3@(bvJ0hgf{{Ckw=&5^jb5JSyz^$6-IRA7^LX;@p;<&n|xHGxL zNP^XTK3z>*KEyduI!tk~$=E`HIikAnn*~?KCTC<1BPgEh93iTGqU^II;N(_vA#T7k zfMY9i$O-dE>sjdj%T-A(xxQt4m+xD_^#D)pYdU7~xW7r>?VRf`cRr2AktkrzIbKYs zwID}{3?m_)`nlN(r(rAMp}mZY$`isZWVHXrsNjm}8~5QCp9*pQ8>p;r8M3oIgutg1 z&1&k5X6@2;^;B2jA{B#I* zyF3Q{_|Q*A4)920=y)V)N(j^}JOO1iPC8X!wZvZ*oM*#cO*M>o=7cs120sRXx>Ec( z*Rw0lW|7goo~-4O@1wc?0uOjB5t`AYL{j-qWz1+st7mmEt3bBS0qvDyPij8d>@OtV zQ8!%-KX+M1>~~HaiFC$AEqIfitd6X2sgqo6c+D}+MZ~M4%0R<|<2FI5C)QCo}bL7ngbNc)n1<03H@zcHhNR0+Ip zY>*FHDR~Ts_xFkH_OnwhTW(JPO{?I<5#QUcm-tR)AF#H1Q{!M`cMSS+PnkwA$k4uH zxeXWKLOA7;q|}lkbKXS6QRJS zzOFJL_Gj0 z_w9|!dnZ|>qH;uYS7>97NKKEEK4$HqnhmB}QtJYA8k%pN5nWN)pCw2$kd+g}KXO~z z5EKYd2jPR=a3F27`FMLy`>q_}@EAnksQpa0Uf7wg~D(eUdxN~dR!YvEWUv!&h2 zx2uj>)BF>Sh}+-Dtn|L3VNtDLfc z7q{dGO1hW|SyfK(!7k(dfK`r-TLyz(rdsed?h3q{V9opzfuH7@#jbE9H2T_dXxv)g zJ4S+4b%pGVi#6*0Au?$rh|Vzv30Sy2eSKP@t9M5d#ZRfnJHfJ&UI$z%-DH#MH~D^t zvS5-9p$S`NoHfs&g{#o{fwI!8>aMY|^Zkm~mE^X>1N-N%l20LOHTiMiRZ|hO6uz*| zRDx>>}W?yJC9Wl zfeSqlpb_iAYt;h2w!;dYeG@yI`pa9XIW$cE+BBE<18`R_VN1lC2=>^5Q1|+%4;_Jo zBm2LMm#za)WB(M%K_vF&GrhfX3rF=ZTfbI}=~FXK)$hBnG4lu9lFH6)8C$j5e@6Zg zS8%_S@exEOiT6dR9Li~Sv`tUWY+($8C8|=ABiT2$Tt%F{%WJEvS%lkiqm6Nq1$OK6 zCC9In6JCZnKUUZc?k(8J05qGa!iSWl%=Ja@D5FIn_WoQnp_)hJFY(y+}GTnb>1R}N&EJfP?AEe z;&pQOHzXnruGK!dTQ+To#66>OvEDMOCX)C_AcO?U+jZAgDs_W7&!Db)GYSPmu|*s5(V6Jn>$b{oRPTG*e-#KOnb;>jWY9aX`@cg@ADpX--tM zly7}!VsD_p6%z-8u++8oG<$aa84OvC>LRUwB28Q6TlxUa96hFddLgIK^SZU5IyUu4$0- zK^}LlffC|LNoil4P^AKrjRS;1hRhW7c)2iS%SB*l(##jI;BTM z_B*hZIm~~1U4^YI){}nHF@zzt46}*~XtJaS45jKv)9VRKMza4RZ~us6J*_0%oi$5A zS&ENxaE|F!)-AK9hH9GKI@b59PUai`5w#Y?E(F&`=l~fRqVmHtUJ-?YiW>~D-KjnE zQL^>~k6wj+|4E<$f0gE_!}P6oi6Niw_F_picbkv1Zqcu;+A81YL95!x{l0Eu3D};w zl|o*n?waJNsg-ud*oS^+e3TYLv}MKo@J%S*!@9zWS1^fBvD~Xuza}l~TlSxBni$iQ z4YoDP@`Ie@{+tvIZDmNp?0=9(=Y6%Wl&UVxV-So09Cx2#y%Ug)HLo z9H*k;cUx7|HI_U;%f`;j_z;arfOGY;d}HJ#iL0P1pDQp1hQK$$o1uK6v))~!C;3|D z&M4r-0ujH(VbW0z*fpDaTYW8Hr(@EOk_0YQl25v~;-vz7z3Hk+IC9^Htw&C5+XV=y z59!R~{`IRZ1xYyUhoPU?&;gH(5+peiGt~C3GKm|2YF0Q8$=&=B`gN>!2i-4)?u6F) zAe2%8`hZ~@J*Ibr8XPh-(f;yfQp&7@I|0*tQkhZ)b*QjZVux!udkZg_b>3{^gEttT zQ{66jg9J3&Z0)GBPJgbQhZ=e)IJ!vyZi~Rp466@Qkfv;2N_nNJea*(C!M^kqVD^PiHk|hnQ$Od@>P-u87$hofcX2IfY#b( z1d5e#1*4T308PDAaC!V6AW2X&qTKtD1atFDTUnK{t21CuUEgTp-;u$1k2}%%lZ-+KJk?{{tV0 zk5zGH+{+mO@n3_6)2v`eujMldgH11RYrwqdxB+^e;C?_U0LPWCNEcs>?9k{pWG&tPkE<>+>vd2kp!km10J$)@-m__y^z;x)Ot6?okYpptIuU3g4q>{NSG;BEYVBqD= zqXQSNrLgQV6Zq~>Hhf(?YotW{XLd;ZM%}<4`%NI+_m2tSg=!Hs%M;mN<4D6(fofSo zHaC|8ixFAJcZ(2ZcV3WV5TxJ(<0;nt#SZ z51COFxbw#s;3#bSYHWzp-IQ2K(6?~fi?O(_7O&8*;FGsy0GzZeCKM36Y)qVeXpdGj zl4S&%*IwdMWaZfpS4TWY3q~Sf)8-PSmmVz%R1I1m@bOZ#4D=|Bk>&*P?N9FxPGx8E zJX25OuCf>-z*V!^8+~X;KT4Ap7{ZfBHU#xQL5!R%TY3{AmNC<%rRS~PI+!8{k_PAj zw;C}j^Gc}>2IQbE5&;<4n^~l1CnT&i!|ie0zxjKPj&38Kaa8ixH#;zr*1UuxPwg3-k>|F zf^2o1tTjUVSu&C+0f9U`@y?iikmnv;aO-0DqiF zrP7Z*-BOm21Ch(O-~(31OT&^d~e-P}@VlB+!CX7)AX3z||p6swk-mgW-e8l)QqSlk>@$V^*TPm|@bbi@D}E zNZ%EM306fq`(v0&Z5oHWBRO`&yOoMR2j=Gc4yFz(w@kL<13&ccg#?~N)qfcyI7$|P_ zW7coiRS4&m5>HqT7~S8vv+K9qkKLS1xasRs$&RLd#4cC0K*Clf;ao%MP0M9{;Ql_H zO#6!Befkbq`6pj-Aoz>S92E^LsE&ZyMc;K-=OPC@0XibFT|684_*~DBx?&QlQ37!j zGb}~vu0hP+F`D%XDWe(Zwr)(96W53gA0;0Y2I0dTEWpnO{4rewh;$#tFE*whF>tk{;jayrIxsXE`Xu&cPq z--B3G3j<6v5W>?%{Z5APO{@x2pKl%s#QjA%F!|bWXY6vWj-Pu@=~8$mP(4kkprII^ z{S>=8FXY%2n|f27Wag7ZEZ4WsGvWv_CWF%aZ!v^#NM8(l)$J5+1V509ESIJ1>xmOh z@vbom2MfAQh8`HPbJ`Is{2j4d`as$$zEiDM+Zxj?pPW6bmdfnYqGBX+ObKkC%nj>Y z&sp&F^;JtYaMhDQz+AWlB=zl*xt5A%fnHF?#$9Gm66CX#J{x8*dOyk@WMlX}cum*JX;K3^NqkzKFE2sM{CBh}a&m%h`?ZJt@bU88I zxy|beyaj1|k11b(SYPqAgk*?QrshmdzQt|H&7dk|HcFIaoX0X9Jhg*+*N&c48Vhi`rD@-S*T}$ap|ZAWRHwVF=$V_qk6DUWfc;*VJLbM& zuxFtw)Q_O*S+v8x`61YNHI_{M;zlCCh#+$#+x5Dy(c2|KpUnZNX1lcv$zLLQ#Ivpm z|JK&oZ(8o!8NFZdLEM27ph9huN*v99$Tklw8PdLjys%Q#-hwrr9&QdQ%9WBAN>fPv z^&0$3&N58D);=HNNk+eq)Q#d1S5Hv$1+7`8Y@k|Z@|mdWo=Stm>P;Hz*gePe1fWRR z#i2|F>hI?z#Jp4 zk5oaF{6X6)@mA81u*+babDovfR$%J~@sgTQha;eB|5D5q^(_q!#9gbapp3e}z5L%t zOeJUb+?^!LMhU4Ltx()@yk)PYx4Kh89%Z_EiRn{g6b{s)kjTw7jFvT&ypH}14 zaH*nbih7}uq+v@_ZmyO?6(Ck#DERsQS!KP63QSRLPjk-Nmpw&UeQ5vR1Ln^GJ0Jgb z8<L0fJEqE@^e5TsneRVV@{-8|?z;l)FRE?moc?^dAU5!g)qVV8RB&qk@6zs0tGG zeA875^x;lv0;}?JbZRodlm@%8ZR<^CT3?O6+{`jcJmxA|kQ>+UAO zI?tdeLTL2BJXNdLMoN4hwOQy$w4Cf7JE}MNfV_>CxWO{6SvLnwTah)2UtBy|iz_R4 zDSFipp9UN_;D0UB@!iZZXx8D&2FU(CZ|O%aB7MQjbY(eAwZUvSpI>i|+MbKJHctz( zvNm56+tsbB@gH)aP3sXsK<)F<*{nawBTRJOlRu>990Piklu)9nug%>0M&ebNmL0MS}BFPBFNw>RMA?Hp_rBiM@*2aJm` zQl@tP$N|cA>e|6M>!~072<>a6_k%qk{?geC+w|kYIkB9DSQwa$3LSG&-{CA57Z}5+p2fg8 zW&iiI9!DPIG8WM6QSZf0fsEc2>{vu=&6InJ1sDFM9p81~lSHi!hbx(G&cDMEgZ8wDaS{?@FTRznE|2_;UcIJ5rkB3pJsA!VP^-Sdf^KY z+;>;3bRAD?N;8nDM>hgoY+%XJQqN|ppEs>Ux4x$^Vv5;DZ?|&BLBv;^w_aEG(GVEt zYr}fq5KQ##qktBkE~dU)V54?yJKwF1tn;m#X+8V;x%Ix6$Z$qLMW8AZ{s+edL?VZ(%aT4RVC91Q-(8J)=5J#bqvRJ z4XPQm; zAsZ;AXeUvVLn*$hqGP(yKQf_pWj`W)#IGpPl~2y;j7tcelm$GSv(Z=KrfOhhVe=gG zieOP5Al|(($gw{*m#gh=H^TB` zMdQrt#O|L~J+v`R@`9NyFrEX#P6W@z39g0tw_l}v9}B?7Af$HTBCBjxdo?8Ne+KKf z6lHiZ{|xxIQ+Ns1);3%2kc39vulAXlWb!W*;&UYmBinSw!{XK3p@E+BeEFsb*)qpXdO~R%I7-c#`Jt zTH)T6jarXvx1coxiF?WeT3@y?yc?!n77S{9Z`?`(ZF{Iud%{lBJenF9d~9N8R|U4M z^!H||<&KW#g35M7g;_&TuEX}Ec_!-D^QoaRH`Q?gLO}H4GEPc`k90ZEE{;n{5_RDFMq?CLOSu6Ro@$$^Hp`5qx3dwXDi5h z+CsS$6}rLrCh{gO@y?cj1_dBb%;p`49-??z&r&d|S;B-OAr>yMVHz=wKs;|ovu{bV zE0Cd87QX^PwkWdcce;F{VTE~&=Mxynj+0^iE;~;()J2Wlp#2-$A0&o) zdLA+3iE~%)+iu}~R}dX`E}_&uzLeTtNDN8Jb&yc2L;k2oQBAAn zTeq#Pfg$>Gr*%i16@T{Kc)0)xo=hX`tBGJ24B0-7+@`0&@7qF)#%6U|s^<*5&ge}4 zJUd9ldP4ge>KZ*pSwV3yj^{F^w9yS`L6;7HVk*5&{ZL8Pw z(T-H3xttbYXl+?}0vWI~4ZT`z_!*JL*iAy-?5ak5c@0<}q|I?)#KS~q0p zV1DLV4q+cMX|X})SoyXWvTFTU`I{PA;LSbBt%=6aFA$p%0ai=(+;9LOTU@Mmy|9T? zuF!YM94A1dq?|_p0wjx5RHlQh{6K#q%^mBO4tPF!23S>;J>A{|^P_;rOVqX;Z7TXm z-}h7<<)v6#_`J{QIHB&0I1OB@z?G!NvUQxuSaC8G)hRTs^>2p!+ub#aHT%JDQHuNQ zxPuV0R#z8)>^#DP8H=Bi!Oox{jN!+NkS`tR-Fi2?~O z9fDZBXX5$$PATz|A2_R`DldKV?yoxW4k%s(?jgL{Z90w#B92SR%YQy z949=ZpoKkRq7X+Fmjr0!eb4FGiV;hZBMCpf+_m8Zr#DX@}ft zUyMKB{Sy$~bJizltJ9y zwDSuMXed?dtez(UFTZ|(zfA1izQL$7dEbOFqYyw@)2WY32nj<$PY4@#0d14cs(S@Z zz&rN9UM+Y_^ui>6=Sk(^0L12DldxbV#F$JdS4foTFh?XJW^UAYNIFRSwe%>j}E4bFN8n%SX0G9q_Q@8%TrTrdMdHBJ@L=U(r(DOorM-YpF(#ynEH9 zHPH|w28jSeooPD+uo460vn4fKf(uPuAI;2 zcaEk_G@JK%HcX8ag`rE-t(aL!XTenOpV_g)BtZFp$)a4O!3>NEB7wjEr!=&1|2}cM zqM{euC?QxT@wd~oF9@wOp;9LQUbqY2At>6S(FuDItQB&V(Gmhc49*O&dQa1g zGb$jXH89hiN?ak;0-;^^YT>|*7s4rfhZGixIQOc_@*_-D*XAg!uXCJZL1heo$AU09 zTf4;q^;nL4tDecZB*tBpgv{85+!YX~m0yNitq>uJ<~P2MDoDr-Pg^fs+77ph-04tu zTXyBH4capr>}<4!O`#52IT{dtIhVV(Hhd#Cdx8tSW2I@zl@0{aZOH5e-LbrCQ83XI zEfJ~UW!Gp98OAYTR&N-1LJ^>Y07E+;dX1ST z3}MUyt{YY8zI>fj(_6g+8aE4058h}898Cc*5RVRSl#C}JJLp!NE_)eRq@Uh1n8l*< ztF;B7rD^06XpwPwVRqOf*b+B~IL6uE*mb^pR&Y>(T@YHTJR=0A^E;G|z(A>4zo!vG zTNgUO=Kc3n_}eKoX(Ec;P}-(GusLJ4px-uie(J`>YhS`1WKsy;{W5Ra!Yf^kFfwp^ zhpTy;w-(13)P({jd+PZrafx~3BPwIaHfe{np1ULUVT@*6xI+C%BUIi=6C2KAv@$T_ zGgh3EUI{b!`)1^Q|MO2I=|3#=vr4>CZmS|Fh17=jG+P?php2ch5gBc4pC;cOnF}ka zd!fu*Z#0-8DSp0c;+{_d8q0o&z)?8%SRjr$Gc7E1q`y(i2;DyD2}`_wUrZ4lC&6VZ zKs=Ybvm5{MaMpx(cFJOs=eW$W z^pZz~{kUsKF$-ec3msI$Qy!N{YN_&`t{;akQl zBd@u+<_m__j}3o}b9zoa!1{-=o5EXA?0k5dF@b!`S%Xdh{@EdCVTX40LR(!5y=Hl!H})D&=i_K2zVyM+rAe5BSrhsOWmDXWSA4qLnF<{KxFYD2+19)ntnwhG z^az55QR_3R>gIw{TXUpTrQ7~hTY^s8F>quU43s9@64`i&Q$T9zLSE*D$+-W`(Gky) zEXGX5t>YYT-b72Z?49(aQ40M=KzXEBIwBOcSRCLG(&kgDBL#qYpFg$tfRg&tr^z=2 zEH;4;yG^oCm>E6sBCSo>_XP32t5d%$fjV?Mdl0=}Pq|(jt0jJCj9iZr0iRwRzIOW- zRodI?;gkRaLC_5Ba!Xrzwy%4;#0_!iMNvw|yi;K;2TjDl86*!FCEu|vk3pV?oTU#y z_S#(aZKViYQ+}pL1U`0j{Ed6NKd%<$SP3p3Suz09bo#w}%33n*4GvZH=bO-w7$kav zDru5da)ZlU?s?B}=hwkpR&kj^6(@;|^bM|Fmb;NpzlM^66{ea-W}j5Q>l3ip^e3l_ ziU>O~z6If$_&@=)Q6iCVJ!ckWQAC_`B!6gM@Dnr!;oewbGVG#Put%fkp6`u&wtsJq>#G5 z6x@#b@a0MUrNnsrFIaFMIAzno>T)-ikY~5Hk<0I)(b1#xVTwSu-uXG6cm_l{e+Yav z6!1x`P-MIZxyn&FKikJMRUz+SaQ1JQ=M0fQowVA(z) z)eF=BE<}dcdZ+~(+k+tS>8~@ge%#uWWT6FRfh2F0oVJ4y-%?{XTw*eQG?B)&di)KR zrxxJ99>V>#3neI{%9bdoG}g~&6E5R9KikP(z6x>OEh59alk2W+k%`v-rQPtldMO%b z=dg$vIR;mb84aGNy_XuofCzl|=VNZ2{Q-h?0i3^a?5|_SJVK1Qwa%drOuOJ$J{qUe z+}B2@q=V#%&e(?TL&C`zkbLiv@|pFBQg;_SMoU|0hEtfLqzAsLY)e6C8fGz81MT&9 zcE4$hmmh6>Wl=9L9a{mFdUIk z|1>QFwXaIbxq$f`x`(}@&{WMmZ+}Cq>-H9HP){8uY}nd%dl%QL$}NBK3$59uBk8|w zr@e@1_Rx|!5y?LQlsgn`(>5p#pr-<4EETGq#Jb54-n&dm4*Ro^Kb!`o#zMQ-Hh;zL z$Coq)Xjx4^+Dc+i+KT=RN3C$}#Dn=x7?1ht6#BL)Cr#Cu9n3Lnc%zZN!Dq{tdG3%J z>fb?<3e2LiW7Y`mITuaSzIzGDI*`WgpQayy9h@ljBH!DTeSU|m zf#usUAraGH?QhEyUj^KI4F1fmFW3{7N^Vm4TIk1!he^kmIt0ocgbvDd$(S|pHD9fS z1kL&1c1^2+#?@iku=SHK{PlyG!lTHuDvhF#9HJh&{s7GT4%ZHydlPJ}RyBrc#&_LC z#Q=Da&@N9DZ~JNC;jp11)47I0V!6b{hbhG62}1M~GJ4Z1HGTVkD*JmgS_zK4+4PAi z(+noFGD%t{N#+=_}#=swpV%gA;8Vndw+h z2sdt}msCnESg9Km($DP$iBkbuA+1$4Fh{7B^IeLGTY9%9%akrsjNsPT8n||5WzsGN zbxq^F1d^rk`a8=0J0L{ry2o7Y5^mCwzQ6>Y8wgCNKH^QaTC90hG~uC1b8D7IOAK)r z(GbAaepuP$h{RK}7qfbZ!|VgDLvo4_36?kTm(I z<5#BQ$eV@Dq44hj{QptY`Ph#i5^-_Dng}^iIZZ^}YweQ($1G*bt!`2>QFvYzysY&y zb{C2H5|$duAqaz02Pe70;s@r}mmzEc=clfybCHZBdVb5rLWPfBU+|z)tDp-X`TuJhi04<wg2%%tCELE=#7O2pL-8i97gn}XL_}~+_j$3FeQ|-MUPEyG6V)Kn@0HN^`9bXXt zZOzme4srO3`QpOh4EzB9KLEft@NCpHN*bcbsT$$!A$oiD1@sLu8zgKQMEJ|U4E5uU z(nXI%*EVS9{-Wm(eg_qSi8;yvMGj%DyvX}+%~8QN|A;VIa@YnxoE3U5!8pAIaIY4wA zU(M`q>wu!@;v7P>O(igTqEF-MsTM^B@aehJn|xwXvjiO9g>nHvna2-*P%ftWpjM&R z1!mbzs}tCs;P4q(CFx0O$(OwtyQbyG$Q5&*QHR2`FJKuCvFpsk0>i7qSUW7wkwh{EwV2qXo>IYQ>r3^I~;iZ*zvSX2$3%2D9Kar9YOs251;zK>z_d<-Yl2a@) zuT+#~|DvJj$z?uG0z^&SYue(2&u55@TKDI@-W?M;Y&ub-K-^$#b=!;m-@3q$7VLkV z6x~*za62(vb2LZNgx2EpX=_x7Uv{*(kC|b@j2Bo;;U6uKINN#l~W)6=u@P zz&Pf3U*FQIq9ch7RQU}VonU*|MK)?EFSCJQ&iPU>{#ubv2QWSpOA#Lcpv_HlgPa-F z`-$Nq0`O0sST`zGZxPO4O|xzVt5~ELlx>G*Hc>SQjrtml&AotOKAFpuc5BaDjOf27 zZY5%Ul>NOGC(uIcNR+0uGDAq^(ws#rF&)sfI9(^aDWlfA_?In>QGCs+2%=6jlgqM* zQwbB(kOS-DQ|RIU)<$^HL3%*G6o-)V6 zGHza@<)e*Q#}%1qOfiJL{7N zZVeKR5S3C301N>%Wv7+A5`5|wD>g>p#Y(4$rWp~i;t;m+oR$FEMWvfe>r_ezGe3uj z6p|!?{F4@n3BW40yQC30wy?p&R<>B`Q=LaRwwjFDr~4!SW&XmnV(rxZ%X0|41O6J1Ly$H_#}~?*UqsSLEH%`0uay zeBoO|SJmTrNCFL+#BIog1CR?bEf-OnU|Z+vuSz-O1!*PC8QkC_?-UrakE^s=Uj9T;Nrj?9{0!DM0!? z=9HxXMKu^KuhV|r^qTEx2=t22Y8vHI9FniVb$7-XDen3#q(|e@qsv$AMbW*rF#LyK zKEtp?Tb&kQjNT<3;^pBM19q|yMd`+?1rd}9>xKw82=~cy|C0840Ko#hg&S2!_23@$ zvkGQt0l%R;3JSo5_?wWImDHbX$Na1vhO2`X2??})5t{VaGx>g{X(jO(a^S`~-67)J z(yp&OQVJWz5hdt||56*M24GPdNct@d=qAbJana+BTZ%ZW>rU+1SY{jo5g`PeD~ah= z=7sMGI(j$kSlX*=6O6EF+@30RbW|`DoLLDnty{$OhKa zK|0-8p=fVRtc@OHm*#=OU^Zka)6-R}rv@q$Ex~ z?Wv~mmd0xjqKY#Ab=CFD@uK-jDTK0G@qu4GyFqg6LD^1Pkbe^48yl(8K0SC~F8Rn$ znri}JWqQNF8kP#<j(Ffj!y6| z_+BXq#pHvVLa9lJB!%rbvAyZ3FP$dzM(6u(&rR^JV&%?RocyIAXa7ExKa(i0S`&)M zQllU7rm<@ALH7Vy{w}wRm+$--S4cC6^AGqDsA{mK*lTwTq^U5`OrQhZ+0^vrtNDs8 zp|JAiF_&Eym;N>Hb$ig}y5*Sxvu3in)GNCW`>v>DmCDx(|Cpn);gXx z+NMf0u5YVxu6;c1ngT{W&AG^H!nzQ$OODcXdAW#l&YBVthJQtpkFEpo*2-#u&BRKI z!lhFb+nT@PCmd1#Dd*qLJ;lvX*o+`|%rdj!O2`~a|D(1lLb@1qcyJP93WHA*kCCG| z5C$XyU>J-d`3XNP4LUUc>S_D5kVUIuXNa%h`Q56%oE+cLs(K3u(^X{hN}w-LRC3Og z^fLR?QXEI!)ZEFHB5TS5pIqeZ#&eH$&~xNFcr4blAw=|2tn)aiA9FnH&{FR8kthD} zs&8Hk;wiu&BvlNlcv>DTlqz~UNIsDt={FlyxQ&y;@M5`(lz+{R#~`_HThXF3#PS{O}v@4 zsgW-bh8AiHu2@$h+)bDvaHJPHheQhSb{f9DA<@Ii_!GXhVs7B_e)UQ!QVMy9Qzbf4 zpAZGH@Vuei7qokvhRj!#AtIv&ac{6f5XSvHz@I?g=RUv4%7x?nG!~gVIN>V7p3$0#0b9VyY{2hYqCuGgNtlN19#iONVoj^ZK^}} zwLZJ28PsK;NPe=gHEEX=mH2Ghwqxi21Hv}u;4Bp;lCEX2%^+Y~p0kka$|(L-*Ae(X z)0g-K@S5ZC5LJVss?NEN$>IF~79;-eQx*2_KoFXsnP!EqC&$Bs|E=~;f#u^(i8;Oe zhdhC5d8-S6nlsEkc%<9nK2FO? zx*99};X$(iPp~`!z2%}yFyiI@~B&pm&nxG$9@x zoS?R3jIG^5$ZoVQ^ZgAiC8Yw!bt5OeTkjFbsh;zWx*$QJxXLti(*-y#(xo5v8@ml} z{ym)eb`T-(w80p)2J}GCFA;0He^CJo_%RH(+XNL;g#AQIz`w!1%+o3rR;TC>4WXNwh&qmDeq^ zZ^vjuACl7s*Su_&WV*oodJk&H{I~Tlb!~Zs(AZAX;fKZ~m(e!Io-ac{5Aq$fUz5q{ zIfPc6vsD&!-*{k@I$Le4`D7!Si0_`@STtiyg3uiFG zspycN_X`DEO%Y>lU)0Xtpqc5Ww$-?Bd{%zW!F4u$f@hY<$PO7FRzWZG3;zbL*zvN- zl||>S%+?YZ&gpsDS&ow@`>deQ+%ticAMcG4E05GN(Ad=Su z$5kxXZpg#KJzKaZf;>ax1g&n2TWI4YqBHQt%xkA!CtC!vupyBsc^CJgm|lGxxI8-H zw|9wQRn~1_6SQ^%%TxVADZsYJC-+*^Kt5zlDs zrIBd`Pn+m&yXF4soTZ{_UQVYRVwjL?klTY7TXBK(nAzfCVV9=;nSG|ISW5K?cX=PV zTeV>BU7@oGL&>GT1!obhtqJ#O8HrIsk{2A27wd=RV@ETGj-6VZ!24an1|}L^;^tIs z&4pb)cSNH7ws_nLceD~dow}-k8mgWcdF%SY+8e@105*Gq7V&{CK0)&Vre2XUv~mh^ z)kBRxK0lzsyXd)kY(u-DfEe;4(tXm2NE?V_^5uM#Zo;CC+Woz?_;zASsAC?B279Jh zzBK`T76_2Z&>{M+A@xlGHWw}>?U!9mHj3E3kUKe%-=>S*YFy>XWi&YDE-@0ts(*_> zC-SJS%DHA{y5K5wFWEKx%OuwDOVQTj=YyyajA<4?rJvt{u5XuC1Zzf27QN2Wt_gOK zT#1@5%y1k>L#UWBjPbhxqccQ^gr)&VJk0Ha`{zcK7jWU1T)B6sV;s4K8M<~rBlC(^ zljVOo^WpL5$z2I=G&oQ6al&^#9K)#-b6gK?WdqlSqR79xjBm z*3G0SN|3yZ0nxTW#6KXzBwry((Y*L`v1B^fMgP1b`0g*uz{s~cZ zl!(<8fL#5`>5DS)cR{z!yJ6vvKVJ%-Z5P1N+;)<#9OAzpuP344QXsuo{%b8GK9!2* zZxSj_icMckG?ijo0bI&E zMbvNkRp9{9e@01WbfN1GfgnFN#3Lp%RH^_Cg87~n7^cO|| z`DTf~V(Bk%+<@b3Nqx|&rmv8Ck8JjiZ70K{*V#9k<(Mi0a|!wsi?*aNa9mxod#d=^ zkp=_m2M9!DUd{DJiJsqIhqjH_8^?zpXFHotsF=LsYa^?s#B>cnXGT}ep07)pqi`WG zOdE?)-1|b2v=N!ywe|0qpoto-F*q!<6-5wO;?a$eafI59-xN3(VMaZFsQ;qi0EnHU zUTA%Tryror3U@JJ4>lckw10D7Vql8)V&$pvFXj;Fkdg zy7ZKd-j1FJQhtY#NF@YGY6gLS1mtCF94no?Evx$U;bTy}$JdFZA;GqsIArk|eOeRK z-5TB{WLVOXobX~+wt_z5j$NT)QQRXdz-?<|SM!Wu?3KF5Bo`cz2gfkO)6s*vvHswW zWQ)r^mLEdEWUj{jVFGsnNtSRw)ARC7Re18ppvef z_;&)b2fn1I+4Cq-Qv|U56GkT(!UgRl$aH{y{SG<({xNm!au$dc6!Ko!v2(jM zdpQ^_3~vnoQBS-|uLx&XH5;U?vF3*3?TCb>G&}YHBuLDAKU5D>KIM?e0~V~mKb1zO z(c0fz9Qc!DQ;KhTlI+B?@o4xyTQRx$)h~c?SRLRchL(BXLKT+|FQ|#i%lZVj!2{Ts z&}3WCVh)*C*-r}uGNplO%2f!41^G`sC^xO?%0+nYR}euX#vOQbHP&$mhA73NQ~ZtH zJYMIyaM)Jd;GdZwOc>F@r{r=GNG0m-BtpMl(P2cLzRrrp7%xmJ0;ZT{R7#+RRdP8;^1WVbW@?MIvOeZ{SM ztjnQNM1=a=mQ#mD?&1EXFCuU;#5<0j>zHJbV<#W?IydMud=@+WLhZeB9q4IG*BDxS z2T@|Go?W$uj@Wkz^+?#?E}6wK;>d~Q)oEDBel*%_G6iV0+LGUlU7?cii-JP9`}@Ht z&U)7&fv=Vf87AsE4x|UFx!eTmN96yAo(;KP#U?2Ys|QM zp_7*khP*UlHF|KQ8_OxXH&_NT^zZnEQEV=(3s~)l<;^jjI|B_E<0HBbk@M3LY!ss1 z=%}-TU+H$P;f(|1;v2$x!P0w9=u%7 zKCXh*Ogn3Q&+dz$c}aVXpm5juFW_7fYIeQS6Yll&yEN$*MYRR;FfN7zVOZ~Uf)mOs zMmlAbelh&9$93TW**?J{vJ8`xTi$5zI|U7sIG8(x@JN)KPe|_W=}f_)S6@zzs6CaU z^Kg#?Gyw^oFT~XFQ{jG4TIB#G;Y2+rH2iCpT~v_?&xAT^Q2@*H;g1;HnL!E?Rjc3Y z_ZTONx`2S$A% zc9?_-3?cwKt68R_$t^#?qa@AYu^h|39=W!Od}@GYX>^*>LG~-tiT;L~)j*yTdz?Z1 zU#A-v#H1(UwFqtoE>-(AYpBC$Ws>GX>vewcYN1qeQ$LFO&nyj0#pmvAjIFpSft56e zzRBy)k0HZ%Mw*eRh7=aadw=|>!e;mrb*?YOy|5Arm<(#Gw-1Fm zT-(x?&>*fS8Kon6{3X%VL0p4j$-xQFkN&-$C^j%sMBwK&;A;*%M}SE-N@Gj#SB#2^ zQ{08fasE54(ntJFct~~r*475d{F+}nePz?Q>XDb~z!!Zm&2nZV09I|LHmg`b^C17O zBv1Y8O)bKmkhzyrl_$pTt!qT2E0gV(&%MXwHilX9+3%ut#~KRmfUczLkGzS1`Oy%f zDK#K^A0Eq1HJwOV`RD?r=E4fdgvx#Elpo&?R~Hx=M({pVkOq?=aJn1TAasrJx9A}4 zvgk_Y^Nr{kJvYfXnvh7M;P;qYACvV!Pq0}Cn;`(P&plQX4@MGI-b0IyPJ8D{X1M7x zI*80+BS_$%Y0~ec!#@trm9e1h$di4riHt42%onRqq45emtBZiyCHU2gCC6B;Cb*tt zy?E(TgQ4J6E+g*R2}J>PG5 zRV-YOT#X(?V^dPTh0igVwR{5i1aigzMxe->6FrC{p?mx|OljEQ=3d?YeKQl>nV7(v z6=Ku81V;p#A80~8a~^wBBkHF3@v|>F+NurccTMBlUWQe_@mlCx_!#4wH@ej7v+rX6 z%wDE|J4-MG=tfMH7jKu}R?a(F!nY&VBJ@|$8J4Q|WD`hLJa{py|R%{nrTC3rVR<2JEkM4BT~;@^PH~KwKZfiwMTuuYv=P)pri~12pnSa?2 z8Bx|xCLB(t+E_JLbZP527F$;&@B(m99mp?6fptF2G{`FjQw$4>2$su&e_ow*kpvnS zh!vPV(vutcIkCAwj+5H)WY$>EG#oIlkND58r1WCKnurP;2(j4OVic0oEJwdKzCei7 zG<`h*iA7O_%|yM!mf9@!ke8AD70`jB82Iut25%eo8Ncm zM7#Jz9PNdjthnQ`E4~>yOs_QDoa1L+fmKA%Hbg;fliD)(1Z`=9aU=v26d-Xnn)@DW zZEvu&zJWS#nR351C1({P%?)yCl(?~wpwmcQXZ|Nxo&%e{>Hq zt;|<_E!7oD!9P?rKbb@+%F!}5V1+@F>y2tz^7c&H(v`T~8`s1YMik+LB)HLF=H;P) zgl2oUkRK)_cz3U6gn0x&a`F1)0J=WynQ=zz6ASMl)s(89j`L55-{;HZEBz?=ASkY+5=h zaZCiceOiZ{0AbN@MSnr`+wT@3mCAcIE(B1MNi6f7Tz$Y0_!~bgqVyNZv;fk?U!tmx zkF{{P%jdoA6QHY99?KCYp$=>Va@iAqQ?jvryb?L@hTrCeJ&fJfGA+-S<+uR6E1@mF zbqio!@#(yYv^z$7(yP)xeMtlQuQ!F+;sF?bk<0AU+FT5u&eGQQ*cLNq=gmlev#~vy z7C|4f`C=g1yuO0WN&~&RcgZ9PN3S_HQyXwR!3cc;eMC z&OKzY*r9Ow#{groW0{yk)}Df=^^#wn4zKv*mcHp1tN($I_>Pv;Yw|}CM4xsU3)-v8 z{QcmU>xMpUHpau-491V!WAdG~72aB5pFh@`dy+kcZBQmcEa1^-q0fVLyZsfaH-=*+ z&s7(AcR(=b=W<%GDpDP7T(l_SeGUf({jcf9wlh)6k#||`OR}z5NEtUPM_VwWeXAb^ zoyiez8Iwmy*CDe>e3@b7(m|f$(kFc6{>i0yMaiSrD@tR>hFNxi8T@Sh%Mn?4Wx#6K zX)X6wDE6iZCI`UzW8-}riodU7^+04&A_N7f7(Pzm(7?jdZi-d0)l&uWab!?lY2xBo zIEtWDX)t*mG?4&{zfDJ{&)Q==M|LIDs1Ax)WZUow`Eq7{{|i>)p66N9)@EUI>?lgB z9gJxCz=M=|hG8MHqRp1q00Db>@Wh2){b=fv7kvLPB!EvQf#yXi$e1)pn!pr_rM4!B z;qU1Z!H^$}k~N0?*n;K;N~~rK6v3Du!cp|_7#RPKF03^x;U!k@3#TcN%?=u*(E4lB ztK)*k9ne?}aH|l|kfra;6`SI1G^Jy4Mj8xikX5^A)e~vW7{Xa?*s4(T%%&XUEZvsKzTSO{l7^1E~3L~O_4dY zJ`wjvReZ0fT`!9||lt={_%vG$McHj_|pEk|6@ffzV^u%y3e$mok;5Oocy@mdp=Cgb{ z2rdcoR25AuZ;GbD=d2<9LP*H~twQfl$q0a>U=t6wv@Xu1>3BR!hdVX{($YR#q=c% zovNt%Ek^&v>GYLL@M!inn~AJLYN*U(u-m1*otHOM^q3&Q%o7fx6HN`FF`!(Sg~env zNwK!&ZR7CB=&uBpx^9FOs`P%Vx>8xYYP;IeAPU1Pn&N91g@UL`X6Tj6Ygm-OFec@XfOnk3a4^Q(gQ@!Q^FS9g! z)Iw{0H*ysJbA=o+utPBGF#@X||BOkySrt)o*r(B(3q~$nq*V>{V$fYuzw*$XAf+1h`UZCG9F^RBwjy*wqwzTz7ZPm_jII&@wmm!s2{W5aXyDF-o3hxA?-- zZ7bCk5x}2$4QVa}3j9=ZkiRSL{?hxmDpoTQm^h&a8T4J!mHYo(^a;@Rm|%GVxd}8| zHGjP9&jj#VEi2h%oF0%mOLJvHxBFgv&ryj}=!HQ_pPxmqcW9kh+uUMa)v%$ws1*g?J7{4EN|eUR-mDRa#D0s=CH_LG8mcKOE(zss#ZP~U1o)K4xm_<`V5#+# zWD|;!4B7l{J!508p1inYz0$&B?ppEN?~e+P0iCe}A8<`2dZZWUl7r z2T9Am9nP-qQIC~u6cUqIWqdmk-$5)GvpN%4iY*1I@{jww?8doq8BT_hlPMSl4fS}V z$;)JvBMWexIdTw_A}+{bd^+`n`+9&c4aEgOMdM$%L|G)i8WT}fsbe)XK92xC-P!^z zz8mu5(u-`8;lH>(xr~cpPO{VT0S>hSZ}I*_!S9FIc4qlq?CZbOHJ2#h#d{Gu&rRqC zX_tdx`vBY|cRLQ~*-7(u(~6!Id)M8=MKy_0b2o)S>ao`EWyePCoAu%rbvAA#z&CT* z*h+6*zQvPTORwKCMZxY>Sh}02_4bc2 zdVr&cF=}OLDpp1P38)|LfyVYU`ar9@s=%jMLImuc3B!6Jp@hrk0IVQf9-gIs#}%(c zyPx5!Ubx5zqz)rC4YMPO2`<0d8+E=Nz|^Sq`teNUI5(6p>-_s~U89ePKGM)Qo5VU} zc3GoCl%^R!l=z6G(du>!%qI_&I*)eoV&5lSjXD5jVFeNpygY7e7QoX7SI>v!W-?Jqen?$ zt6om{Jq6oYhlsumw!^Xd693hLjTyuii9Jkx!OUnqwqC`UM`-{l`&r|DMIC0c)o*!+ z`tWQ8NtAk!r%~i8vh8i&+$uzF1U*CR67p+P>P=jPFjn81KW@P#gaE?rdr}ng`c6WB zaz89BoEFeg2Pg`-N&vgnF=G*?s^EHdOZ*t-(?dxIj%hXi{Gz~_W>fgR!(B1-H zo^nd3CMjoR1mQVf?eeKbdZGP-hH+oG4v zI3uNcK+=}OFJsuIVr)LCRXzZOdoL96xR!%~T#oAW^7s!BZ&TAD?`7b?dlYa)X!RR| z4pr3Rg~#DzNj6jV7JWnpXk`xg#=2-PWBy46Aun7!FjyGVd}G-h3j_nf2e} ztbddR?DKza>0?9<2LMd3_ua@lDRXi3t`IU()@NUg+0N+*%U1_AO;eN9ay6?Q$Q>iW znj#%A%4qe_@b*L%%sr{Bbl}uomc(EFMu7En5Whq!`Gf^}C27Uh`W!m%IkDgngK6b3 zEdnGuzztFaHi2!4ptcE@REq0OCvp%AH5h}S^?_wQhjvP~pEucY#kRN4AVnu(y~B=Y zLkRPS_`mhq;-TjbL9S)*$IP8|sbqStt7L8~eqw4Hzsq7OWGWyiue(SRG2?dcxYvs1 zI0vPfnb!(HvM@DmcOAU=&MQ4gNDm*9cX4hM)lStc;YaLG=Ocb2UIa~t{u-J-tiE{g z8?C{rfnP{wyaq;KCT&-Iq(bFE!nAt6u|hRhB|4vzrKNCx^Hm7No#*+T8Dc;JiU1gA_cbUXxRMahe%(^>0NG_h}MnG$E2YBt3^xc>GC7?)%eeUBkUj~#=t9a$m|}j6vMN5&Z_}D~jq1@35l|HU zFgTgp;^s=T?|Y9U&0AV5JaHR%Z#+Jx5#{#w1#at)ai>l{i8l|R$^dPbXSujLx5Z`^ zXN&3s@YL~Iwi9r!j}@}aKG@%~ft7A?-&2r1omB~NJ~kl;9b+8sdDd3pw=eF;-ZC`` zgHG_uW%Y9}@*(Ol5t9XHgpg|;-_y)PgCU!{;-9UXIliY!m}&_1b|dYF$8W6C2p%0h zYWe%*nnu8RdkW76KAJt3cSmrD^JgzOf$jK6FUlr_N6uk7cqnt^#SP1mv>N|9)GC+_ zhb}yfPZm(sMknaG>y%;e36kDRx!Ng?uJb5yH@h?+cC6X@a@5uM;0<}6}O(fW<#d+zHV zB{rL@seJBRh36=IEAy|U1_H<-1JrlzsmYWeej3?Vq~K5moSIGj_d$nC+$n)TW$#|| zyj-g`x3*^XIt}vw`fSjro?%D7=V&lrs5I}L^@|yVkZ2$@D}|fR+KsUp;bkd`Wc^*d zmLn&QCd~voLO~F=YJVg*zJrVY<%y}E;oQLZ(H2#q!C7VR30-GdtqM~V#f;}w?tvA| zUf>=@^<1e0Y1?0L^KV=?%ft#}8Y^n5@8ZoFeumdsFl6)!lSbEZ_R_YcLVr!cK%pG| zDyM7v#un;C1b?OU54iQlDeg2hka3%gh6Z3k(8by6(SaB6n_JSe&e2suuu2OO9MQd+ zzQgeWP7V=X{CQxkgvq9_bl6N}Ft`fn?QBxpCjYXX2s|6B=xuR^H^D}v)qR2@b{{Au z&gd74DGug>@5ZWGN*J-6qA$D(fFq}Kc3jO)EV&q}{6+p`=#ooj5_e@HZ-*R@(0m69 zt&0MqV#fmP?==3QV5^IvCwA-60O8>z%1FSksOv(!(ql+ztumv2cQw4t+LqD^-XI@= zXuNFcehdzBU~xvSYMRDhiafJPk?8#O0d;MC{A`BAK(nLY24Rp!h4vri_*}p_| ze6*W}s%8~^*3cOU8Bdkx2#x z%l~}uIM31~93GVqlX!+~>{+i`l+kA=T`%*7U3w-U^VQ~S`j1(=$snxBaXAr(G{lJ8 zv`{0?(rGhFPm9dUpABreOxfOUBD(0N;NR?S$U8h=NnpR!Hi}CKgG?Wm{bJ>1Q-2DU zM>uJ0A)20QQ4$ROy$XdF;?c^)PV0|U+yMiu8ZbmT-p8hMvbi5>7uIB|COexB=<(7V z$Z*#fHv*by#Cf(Z;=Oop{$=g#)W57pVhi6MV5jcx9?f7!2v~Dgu|h?kaWQDeLq&h9 z%-#Y+OIT$>j$)877Un_)rvfV^ahEP|`(vv7785*QQj7hRH`-^QL*i$+nq*A@**`EC z4XLT3j6{w@De3oAh|`<*EqKQ>7v&5X9>0>ZjfCtUvaP4$7@3J7gpJ7=k^Auu4$_G&}dU|H} z^fJlCb(i?m!460>reBT&>hNc>Pf-1@jUJX0LS*uR0k|No&Oe>YThjenfsWrsp16Yy zN+*{@*#}9v_`3W}8mqVOF*!R`X4jSs0ZV>)D4L`DuQd<*A-^~uVh3l9Rp4dk5h-Ck zR0G(fALc2IK@F;yeM;DH!*Jo>UN$clhOUUIiqiepY~FwnO#x`; z3M`*-grm7j%vJOSFJf8-c|zD7@jcjFH`6H9gejaU3?XP8X@VH4dGMFT8o^}OFlm9r zhx?XULqP7wN!JuS+j!5Z)4fC1#=Y2H5G3@V)NDNiAO5TE;l0W&>`>!vcO_-!WJ7o+ zYgbbH6`)Oex>D3r*56NTjJ^XkL=GqWMIRJw|g8d1;jwt>#G`Z%e(C0+@mbC?t|`uFTM}-M+2>9>{X3h1xF-@Ym|4NnmdvA-uGM%vA{0uru_Q0&Cp9%8&SDD zTCo_kA|Yve5eESXjP8KwaTse8?YWVFDxm_lCc+!(sF_0sgXnRGV&3Lxhz5_ZG^few*07BMj%*O6^abMJT;)Jtjh<^MuyY ztYVIkb7>#XK&}tK)uCvO#ByljJA^Bw472(7<-y;gYnk_0zB4Q}?_ZL`s*X;DS*)9G4b#v$1 zABiB_8bjr&EYVNqyI%tM!f%*7l^-;iuKEZx!I6>}s2i5;55mj0ZW1y5qO3lcIKGd@ zxqhcyWO%quxXV)QTZ#V7FA4pd^IBvDM3-p>xhk!>p347aPnnA{N9Laa2K$0|dpv-=jY?pb!rd`)%WMyF zZ=+3zlq<;Aotd+~o)u&~(HFJ7kr^NL4wFpFIvA@}d8M@ikO!qdswwd$Y%wDq@{E6) zYC7KbNL|65#EMXHu0uQ2L_tyO6ee4DXSK?ey-Dli`!iG+u-a)dik^@%Cfz~{Sl;a- z5--rWtS0!UWzzSCThVa~fY*JY#`XJa=T6=F&#`I2fnkyReoUUW4Rlu@cGxj-bO= zmf?gT2LH&3gzAZQtwmJPJDVX$80h#Jy-{k`!;QEd&5)SUg-GHk-nC37N4JE-6Xuc~d&YoSPK~#Ws{RG$s=cDJ7*xio zi+jM0B~(C=?-`e2%)g~42ARqvRJEzN*>%D(vjJ-N6E0WpXAQ>j7 zX=1Z9ckO(a$iTa2eJZG3UkFuK?N=LQ3!Bz^KnIOrs~5 z5N!O&vQQCBa+R|vDEg4{OVau75D$Q1?tvdlxs_`lQS5&3op|>UZ2K;25e6wi>5o|S z#y~#4*t=GgUFlH9ss}XL0W}(> zqi;CjaX4|3?`egBlR>R|&TqZsc@c?G=Qnt=K5&gb9WgTU@ednd`#H;H)X(5a4**=U zrU=_?DJW~6v0)muzi1d7N4Z{wL>zL7gB@?5)dl$ z%*BrOkzW;{WfRocfE9IBCOK*EsL%WrGiumHra(ih=ehv-bo8J(Aa(u#k<0@)buUxx z@jDen^ECk8Hv`jD9Y~57d)`6kO%;zkgf(?^LV7uIVGwKs)1EVr@!&%v-VD8u3ftn7 zfHHesEzPagjx90QskMz&j1WdMta%z$i@v^2F&tW=l0l5benQYL|XjxSdsW3O$IrNsr05Z`yytlE}7Qk;NZft{3 zzn=`QNfkt&+Tmx`V`TzF8E>bu3yLgQrh(|*iHQj({1F&N1`0==4_wZ!rMX>_OgP< zhiwECFYPf<5Pn1KPIj{p2Rp#W&ilO8q!F0~INXEop+RXd^Up_t3u7dWCZkg^9p+bD z935EGvi*Lh|D0&M{_wJgev`|`Gc-J2;`behzIG(Jc46B>4svp4qJJNRq5&2F+!QsXcG;}hkfgw(yYvGv*|ffN zBwWzCNlFc#Xb`o5PdH7NyBc<}f&^Tb-+0@6bdPXRQzlg1>9E#C%N`Mhd}Cn3Qr#_V zmn%FdhYxziOnhF zKPi0M8c!o4_qIId&CP7In!QB56*ZYa`cv_bh?xnyiU-RMAlA#F>Q20vBOvqvOZFdi zEzDDIw1+sA{qX!m$R_p{>u8!ut`#QjC8R7hTTBOErS8*rh*# zg8li!`4aYE>f-LP8nel2r0`}(W>P6iG_Rc2CmWdWD5yL@=tQPkr0^JK&{Y0!f=IRt{N#XjcOb6b_^lJEY9{PT2BoJqpozWo|?#XtQ7eed`(i0l~gawZ8mYd6c>G;)jzmx)h%&TmxPmWDd2_R1z{y~If9y8zC zea0wn=V#jO0+Lf$H9x*rL)H%3O?8>L;>lcKO1r~a4OWF$%c3tUq)JZkAPio0h0+4? zq3{;7cg9oB>tWQg zf$ySW>!*i-^EV0s06#FtJt8E2@g;59J3Y9q51w6R_K~{_0g#Pou5EaGu~Y?)6dYyV zX|uAPqXkYuKjo@itOH*^jGz1oFcMk&FDmQtPm6R%UTk+4N6|F1g0Nbb_jt?I5j2HBWw(#f zMBe75o3yu6Y0i0MSy2z_`xIH@Lr+qp$9hxjn@MdvXfhH|^sy$J%ESlJDR8doiV;x- zg1B9Ei?ew_P81_-DM=W7itP2JiPNn?#OCP5O(Do1Qt!x$tlopI^wt<5mHOn}F=Q3Vk)`T-Q0RLe@>nd20+&dEDyY*9-2Itybyi8aaY3AH3Z&!q$W9%Be7gxsF(FMw~ zIkwjQvw=UwZ;bG1g2eQf^e9$wkwG|SgVda%8)p#Q_Wm(_)|{xt<5@njS8~^Z?o+F| zButIN8sp=Wc~Zy~&!&WtVfLRbSN+%=@s~t1#N6FMr#aleC&)LHdZZE$2WXj9qCyNw z#45A(CIkK6Bgg;4p!+515zL}l*zi=Bi|cmXt6m@v%1&w-sK6x{k*Eg$OG?VR^!@$# zKe`h#ST4YMvsLuAkib0UK52bo`P%bK{6H);jS1Ou?kYK(LLOgMefsVTZCo0OC7P9v zaK#ug1+>bjja%#VyxY4{HYS%aOh=W8LP~9gwEOpE&_$I;q@qI$f)yVe`se9n#w0Ma zc0}P1C_CS)!I)H}+B-A$dK$W%ysxZwVfbZFFkQtxO6lqo*lQqs{4)&JuUhCgInsY= z9cq!Q$qvuV$7~xp_7%O-4_bUy&q_tJYoX%}BrG3{zM}3G6aaCDRF_I0c`f(l(d%zq zJs-5^SyqE1tf!-QQG+$qifE)AY2bXhv)?9@<_Wo%I|gsb0NnY=3dy9LKQ zHlzP(f--I-?fIQN1W9bkH7N*Zbskvn%W^`P1YNS{M-*m&sWZgeZJ&6gyf<%O^z2j4 zVUYJj-64FGEb_}VlQs85{x*>ABqQw8Rhrg9@~ZHSLRS>U95hhP3o^k=_{<~t8=6`#S2ErHs8%%-;EFkW@ttA zNWX)wr`08#k*!C7pAI5!5{+{H1V%$4ihU`^3v?4c8&}PXUU;0LfaO^aG(`619I~eG z2;-rqv+SWN?SMusJwk@f2YbpJE^>1)ZX1=Fmw^hN81&rYEFDR`$vBS6zhSY`andr4 z9zMY>?vXSpi}KxF{Ee0uZda?SCYf|fxV+Q?I2s+9z$~Jd>w!q>_$`CxLn;Bx2f|w_ zGTIZS(pvz}O(T+v=GcHHA6fmtsb(Honk#KtVhv81XJ79H-`p~e;E`nK3Yg$MvUUN~ z&m4-1xuSwwF1%1$lK}gzFKg2~Ft;0;6Ab-(^6USZG`g4Gu=`f}tpc7P7@QOTV>DD$ z;bEvECXh$%|F?$>>vcopYmAq-50VE>Od?1``W+Tb3=`1Z6#Y`5}a=`d%kNb#mp7ftJ!9JdNA+?#pVi9ZUct! z0WGkz(-I>f5*cF##p-RY|eioYp^J*C8W%T3V^dU z3YhNw4EWl^Dd_(J1jyB#VLR z(v3>A-*Ks0i9R#zg)yiKNrLxp|F~{C-3}1ze+;txSh1+NnMaD;Gv|UOd^l<|By>V< zCqJO5_eZp9Z-EjuONWD?eK|!1jTR#j#K2o|uG$cATQ>yy9-Ep0U0#o|J(MgH8uL)fXRuqC@m@rG~x zA`+*|dFlM4N0+*g;+x&E^lw-l@}C0FJPhGD!n-BF6+crhB`-WW5nNL?yLg+D&BMw< zJX&SR))hSY*b8xMjdYbojM{$(?j1BX8Hh=%vu6%2kSO0Yo-@-}qz z8I_hKYpId;Y9AzJU}x7bqttG_@#>!EPe{@}7Og$yN*5`|7qSZL)1qAYufu*p!!v6d z^?d7#2^_g+94P7r=dz^ew_jAZO}yGFdE|6 z2%_j$Vr4TZ6U~;e+Yx-~?}y)LvIt2Pf86&xLjF6(=bp&Gq}wIz1o<$b^_bf`Nqs(b z?1|qZ(Z>=$m%4j!2x&LKAT*#jAHCG+`m*;`gJc0zKt3Hld#&X#0vI==<-KkiR$o@d zr8F;o;IBg!#A!fvQ2CAlDT?23H&aQnbO%8Fq`wMm65Y5&WN_Pmb{3$5BUpfVmf$~B@OnG7N#>mLwRJkFM6!C{$yNp6b%xtarxqMPL({H z%Cg0lPq%ZoC3eEdFXFe0C`7-=`PtJHJ{IDDCXcH}m4F6i#s;a(AssfbcaBcuWX^YS zY5TPw@V?lz*FPM9qFnC)KHrr%w7gOr%Ce#MR^$v~g_caxt&YC^K*mEuvvB&VdyXdCBIKSjge_DI6x>GoH;9nvsAZx=2;2)C8MGJT2$9ki7a$wa$ zRmp{s(Z{`Dqjlo_A!x!0sUH@0pUOl*uhbH(Rs1(?hVAFi`gOYX+GoUU!9NCECJ{BZ z3cy8?q<1m%0NcurzS7pA9fOBHDM*HmG3;7xaaQ^L9J!pVMC@p$(2e9GM?;E|a+3;#vc+6E3xHWm31=xD3lA~VN0Ybs7a zs=j_a&^EQmo1`mFOb1ZSB)xySkm9m4a)i_ zXD6M z*-KMn8jl}Ix7#=Z&3)JvQ{ zx_yu-N=Qfcyg_lcm^!T{7jY?fi461MNWp;hEL$!V-aTQy^n#v+t9xDr?R!Hj9r?{R`Gd!6C;-y=kt|P+yW{V=rZZm4aD`17($?xcKgm72n0}B9-S6{Illbry z4t;((zE$w@u0jYdRf;$`RD|<#SP;1i`xT$*7##{7hH!;ttxyI-NQrOKFx|E<1c|uY zT9lrv+m$ht*-!u{5ly{{`AV-z04xksrh~zuGL2R4aYIa>uoqyPLm&slXdJ3%6IQfTX0Ncg)oN? zSE*fsIMU%X%pG%#JJr9vU(3wAET#h5lnXopt>Y8J6c8ql5_y{k@%;lP%|zfAU0S_) zxJ6D1pKS4ZOs=hJLLC>9g7E?iT|(JlURsSGzLi`BF98VX*BrCHuy7yb3wzB$&5MBq zz;dcG3uD)}NrSRX`uOvRoL^fA?w)`9fSdf)$BUG5Bn7RI9t?O8yst`0P~JURmZle_ z=pr5lr0pJrD)@Kn9{W+46v^pKH}K%4B`l3sP5is?`Ej%DO+PX2`X*9jW;0XzRc;E^ z`6+Dys9V7I#Hzy#gTOX66r4JC>{*?Tk(&o&y|zu8wRGWyH#e}J9;Xgt)V7G7zks=^w^$JQ#+v(szUhYuHwBFs!g|0TVT+<*swxYoW+v(8 z*Kp0)5M*zf7txyCBa~B8{RGe%<~P7C8hn;<&w*V_7bwSNT`_3A|q&G_g)^1Xv?SwEf#u2Bb8x1qe2BhpJDTVnIir*6FCA2xFB{ zky20={M-zSkwD_6Fp+4>(P{uEl$_Fk`nI*806L5m=iGR)0dlk8K0+qLpq z_ityr9fsoGt}reYE}eFJ;BiH@MSNDm!G38X+lueFY!hF1ca}k zb_w@qcRDyUB+#l}UIkvsffK$}uC7C{5>@TSJk`B?#-{t5PxcGM-^kV4UsxTe8JA&c z8!-S(r`zdE9TF(VI>s9cf`X$6MsDF=TQT|csi~Kn!Nqj5@p?^qnz$-+hnxOuDG{it zBe3XK$mfCvKbjjkMiB)aD;5h9hlTDv0tOoktB{R_?L6fI7n3yt=V5lfL%R8{{A?y9 z=(c8+*j(1rJlzc#`ZP}Zj-yqLmbTZXMM(8%=dcoWcB)zIm+|YZ9`DgL*0{L6f?@ZQVN814j5xPV$gv?G?cE!9&L7k!QdOSW?p zMY?8T-p5*&fmxock~@0=V+)>NPY_1DxN9j)s0Gjv!v*!vp}P0`y#ja&;HqIGh`;;p zu42nN`;-)mYmkhTBWSn1Y2vX~o{ZC$L8~W-&O64tYFPklwEtCNbr5vOG1cj>^Z~YJs)Ir0$jG&~ceedoA3Aenc6pwmtvB&s&#>z=8*pNHsjx5A*2w2-D*4*nN@pyC`c6x^Kz5vo9JnVor?*|cc&&%XwRpwnwiybB-a zC3#nRIUFUxEiGJ%1r^>ub zVUnJf8?Pp_9|p4~l@=%GS_rJAo&eA8Vg|AwOR%?9tS)fmG{S9%Uek}PfRHHAZ_<;% zlqRHgj!>HqOHNuAa2&oT8pQwn8hARBT@-0f(bO|X_cF=+5#~0%K@u>N9LacWL5r7{d+bKXvVUy_F0hVrtX#gQY zOSi-h&}zkOCHzLLb>-77zBA0dpYgIDlFH!FdVk1B4rE*~Y{@n#v{`dbC$_QObzK=W zP((wjaUk=hp@+XtfMYD(KSg34R!XRzH22Gw7?{I;9}Ll^t=(t&U(el(2Mb(qnmFrMuR$|Lchc=cRl?A#0ELE6H^e%TX6tymK=OV5Lo>ko~&Q_)gbFiC9&#B22-U4Ky!l@(`8V9x9Sz7_?j{$8xA2Vy z6&onXS{hP(TcNg!lsjSo;chq2f5e8X(2=rKlZVE9;kP(AU*Fxe284z)u;|PtD?JP| zI)8EgzlFBF@ex!^inlG$N}Wjg=LF|MnKuzvUZ8)@PH-TdtFfTvkFA0?do~aoS&5}R zboWGdA|xLVq9{Q>TwZ@_YIQ0#7MHTMww_uoJzELG{86oT)T;xX3A`y7pVyC?_0OU| z+7K z2=S0I)Q0=)l)_`2LwG?{rR=q?s#e|csA*%~4SiMr2Jk7jx$6GRbz?v1EAEi_-dl)@ zgRHKcxJjypBX*I9!jj;SshPkSOgPrvXLx9Mkc3s;%REy_v9;;AyGb zfQ=2|$mX$|UZdV}xG%v$O$I2o>2adgMx%%H#CD3g8;L>qNo@CK_5pT{+N|b}jxO5= zEj#_@K_XxWfdis2-AnD&rtX(-y=evMf_H0A^STS>I#VCwW{U_Pfl#9l5a;>i{eo_y zin@R$Lw(}7V8)Uk8Z2olvOaGVPU=sv;^y=;i(RgEQYS_ZR9x9S2e5;NqNGiklVB$P zB)aAkQW2jU76|C0J2$pKGTo4bFtQGGHI6vniGk#VSPif8GvAkH)4Mh1}Fn7B^Pzy-AS#}57ls?flL z=cIAc1B}#Zj=UW(RV(As3~xwRo#&yOKy`NXIjxJ%IMkU=MmE_)8v=@9*+lGNZ2Tt( zh)1&o;*37f8biDr;V;-Cagf+JD~$2RV{3yi_C|X8Cj&ejj0dte6?z5)(^dvfcCt`R z-Z3iE!Kza|`+UcyIG5#iyhyuk&F=PhbXbn?r@V!aVc)iifspI&Y(lss>D&vHC9PW} z$PXEH40-w^C5MTq_a#!DhMW|=G~ya@_Ys-2D(t@xqRn*~JSkBVh_CIcNoQSDZyRzD zPl;l6yyfOw6K4Se-MUv%kMA*TL~GZMj%7MmU7pnR8V>9#c;UCRIl&$D8Je%D^SwlP zy&5S0EUEBo)smIRhENv=xZRwPPQODfnN^M+6T~}G_DXT4UURH`b*+9_2nFV~uM`oc z8;h?G%cH^{qA_raQ>?Xj2=Ym2j9Sfvim4o~tZt{2 z;JK{$Aqs%#@KpKkgjGVJ6^K|@N)@k2ieFbTA2~TQ#U}+RnrNLth~RbjfrS%uV32|# zLjMLmNg0hNIlDQGYGLxeO{$8H_uU)7Nlfbz)lO`_@uXW z-O3Xo$qPnMRa||YcTo&9c#5O%i+^lYS)`+|C9jN5&P9A{g$JLpG~)gm%ydHP%ayo^@c=r3-b}9*UBAbxNRkYTUPyXO1}XloQ!t z@9^-i^kGvomF8nKrHqEAnes7lku6CRYd^41_U+`&rxgW3FNS|I$95j%X)ZdQ<{Nng z4w_*~A>A3O(jy!%%PV8PK~8)e;mJFe;WhZ~tn1PJ8(u}-d5T{F@qERiPgGgCJhVTo zQDMGDBs6u4b~T)2+U89rQ3ix!x|dEH6<*%@+_)}hTQ!*<_*(bmlw_$6b;wlPrb)iV zvi9R3sXx$LGT$n<^yu=GcI52}x(?X7bAH&B19?Xt;Q`V{RF8V`4R819~ z1W&Z_&;(}-D|P4Vv=t-mfS7(oCRmpQqwh5|#+?Sk&)Yu?%)Kg%mlB%1)4+l|Cz3V? zPcDaxN@)@L)IZR#&*R!{^By!xKQ@&|)C*mFrqk@yC@>C$wn#Xigw3-mpiIfI^Ci$k z065NF1%|YOu|b{rQAOAlcrmsqR>PF$T|z`}xD?pa!hHI4qGKiLT#zM_k4RYZnRr<{ zQFUe%3k~;ST#9^hh7K+*;1w`hXq)eC-2PGaNGia!#98*`;sxU`4n&$3HY(#A>WhA_1&8Q0DO%G>zxu3Z3+`5frLb zl?z^f{$WXm)I7>MPPJqW1NBJQL-q%OO(ND&>ZCXa(bI{TMt3t_$8J8n2XVQXkO%mc zCj_?Z+knxPAjWnafI}45>ZmrIM{TX+zek!yf%|+ixFT4~1?G20{sNuj?w4v?@;yc7 z>?8RHwtQI5X5;=?q%}P9I-3h(y0|e4sLzwo1ziQCP~nSl2y&Jl@dwkHb>u(`BWa=D)8`rm>$ExpS3+*Cy895deCcs z+Q(8Q!kGM8MEt!;Vp1}1$R$ZdAB+<5{2hc)0cCXueQ!(rKLo~khJowG!qVg9Pk3P2`*;Xl7k<=6=Y-u0; zIy*YkN#-{=!pcezX_YovDA6+$Sl{QIv81KjYx6KL<(+4duXP&73~1lZS)EFG5H7Mm1(9$+B(m z5um0$TF!Zy_zCCkB+^Ek@GA)&K_${!9u5$&PugDKg5le~=UYM@??TT&?bf$&S8g#c z<0GE$Qe5(YePIlFm0nO+_~8X}I)k7@K@@TXvC}b5)`#b(J%FBrcLa5{fK*XqI3^qb z1Y=l`{I>|0ZQ9+zoP8Oy%MjA>(5q^dkslxJwh8~@bUH6D{*TNrxr+BQXHR>Mw#ZMe zuguF#b^-EXu^+8IwJTa|HaO=>fle-0LKO@`R`GvGyi}EGa6+te!XObeaI8_iGKhd7dKjeD<~S07g00 zS%#)bgmZVkv-|uUuScsiba0mMeQ{lVk@HK9k5pkphLbSHzc*{xK7wdWh=;VO!czI| z+g?C(U3;bNup3|dW@2R8269--OV69aYYs(HqFIGoeiRRGe%PuSmn^c9avx0?t)VKLY@lJNt66QeI2nsZSH*vFAEwZE%I6S5NzhX|7;ubqs21M*ob7|LqpW z*U^s4Z{o+@^Q?Dg2(ahMr--^`d-7BtWqrN`{LR<@)II7Ud0Umhw|kn1C(m!PkfjXz`$z|VJko6C`;T1LovL2iatZ1~(b=MzCL=oDaTiC(v ze$eiWiv|pTYI;99Xwtsz^Rf_igYll%v+4emHA=m(eaMD0}*6 z9ug^l>PxEL!AGWjZqSnBtmWs|I8tv9&kS0gTkT9Z!1Y$R7`L?65z}>-O;JxWCpi5O z1*;ZSL#15M_hEypDXSTD{Fpc$y%df{q3XQ#*bYVJ2K8BBWFoTc6szVcq*UEq7PGvd z1=>$Mj}pId_xU$}TwqRXytRH#dO5Mf@s-`-oe;O4L(yx#1~UrpyWEWinWTZe9vS@x z8pZDH5^LzUH&(AcR7vG8`p9(sv4YFQvBx3e5HhLXxkfB*8oz!@=gacmC9Cat7z8VDDYJ)gxpAYm+N;5A;ifbEovo(Cep`u)k z4kQ!D1)nAk(*N8A(m*WlrE>;48L_e4CeA^my5F-Z^~3SijSj5GJW9fCo=B_ZxHU=MUQDgKO#0X-1ctHVkB_IN-BSwa*lfD zJ)Ax!)Hc$apb!iAr~UojVOFhuQ@qH%$c2&2-2ZxhpbU*V?hs}Y#)w65jnr~jIZ6f`MW;00T`zFbK1%N4fr@w zKnHVQAhf?!;hjz&*o~yCt(@F$*Jql7rgk0Z;e zI`bx+(`r+p45I1Iof0rd=C9j9hPB3G(VDrb6vb95*ee_ z87GE+=c@Tpqi7!w)k&qc-)NC{L7r)W6EJ3_Jmt2Egc(;Id{h2_T~6}WH%mn44K8b> zEg&G3rc`-Ji#;DD@?n-R8O;_WDbIJ!(`3^V+7Q1fr?Mk3_qQ210E6`fy&d655VaXN zyQ#m;L)s%}AIiK6rpAfPhVr3T{F>j4f5tx7NI1T`9~YDd%>#f+V>A};TK~$_|EXODeiV0$6fD)1-Iz!J+x zA>--o;egG*kfZNtg%45tz_jV0woPlj;jKXKb#wa_2R&Z1m*5Y@yLdfO)cLArdI7|Z z^t!_VxrWJ60{(jZvtFkt(A4apowswbx0+Yf+_;9gthaMvJ>8qja3;<7N_ zK#s1$#%1H9(U;TuoKVFv8oVz%GVSxYaKnbpTBY$2dE|}~`d}Kv2{uR6O(k<~szjUY z<@14KEc@ghg3M2geV>H3ob7w;U0NikVnBJ&C#`K49KeqsnJ-dzbX|6Yc2yt17-Wh% z>x6u{PrI69vw(G#)fN;51ctw#`~F~4Zjs*js0mh%J+H9|C}U0&HS}5kqqYGq6M2OM zY<`1BM5Vh85fsQVZFspODA0fcS(=2ukpFb3dO&kjwrM(Y#(r@USJ7SW9Pp*MQB1<8 zOp(O0bC?DbYNvXCPVJLS5J&(LhuKI6jYDY71sX$A;qjSPZuV#SH#Db}q57FcY^Psu z_~el(^R$x{olX?v;{W3n;(rZrF0ff?43r;FeQ;hak6~K)CYs@8*4L(;{HRTN+7%BF zJrM2!T|>CA_|%_vRiG@>+*nYA;PRQMXkYDhMf8`qT{$g$VnG}Zf5c$-z+QZ(@HKoy zpacLY6pQ-OuPFvFqefArw&5#X-6Qv+1lrqqAH(%3!AoJ<5J=Y@{J99xL`SP*e)`!q zgUY~U^%5Q+Y7_A4PkctlssE49Apc1O%}QaTltJ^&=BU&`s&I6GZdr62Z=N4unP#&@ zAtV_uH1mdx+=UK((}@}kRoHvy^C)MYv(xJg!qfHhDVv`{#Ja4 z2S?oFl^6Cw9hoy;@GJSM5CYdUPn=@*bYh46`{z+6J01?k2?O@oRF$lw(q-qC9XOb< zw~|YakSF5*8I#WWY7Pkja#F2Kp}hJkH1?+`z-R5ApH)@+rsY%=b#F5cKHMnjQ)Pt z3_Ctd(fNRD8{~m@nJQwon z(I9xcA7rz;nfFKJCrnrRa2@Wd%O@Cc$w|4k?Bdk~RbjZe7<h9EZvWMaFx@K|Tu2QB!vKxW17~hbw38S_&@yl6 z?%zWlRv;;stR<50FNo^oVR7Rus!u|MC3B%N>e=4adXz5${5@&3c*_&hg%o}`R=!Ck z)sO`I%02D$^r!o^n4{r$&YTj-B$8}WDIAw~%V7rkBf0U$aYSa(Orr1{rP+9mb)N@T zu1n>gj?GmPtyG1)DoIGlmoVVMf~Bf)ZHU3Jo8h;5x)@#UuT+r#Y^A&>-kY zv?d(O5!MK(}oE202t-=L2>rJxgAur#h>k2XOWibXHqiCWe|41svNtf zimxfQDI457W*VK1=I2Q-)46t9ZSq(!Ffq;VGD*L>qMv)2*oXRVld$?6vjG@VgN#Sj zhk_)jj7@Tjwk32D8pHf*On?GWDl}kkA3MyXK-T<4d6Pq=BEWm>A5^A#5xyyf@`3U( z&FN2tft4l9Ey#j5N#L~s+JiIYu9FVVg$T+gdImo|5@A^qA`C#3-B4}yYuY(6dRlhUXvKmg4_AeS^41zrxmnZr?iZGCqC(qKbzF!2aiq6XjQ z8eE!xzXR)iB@_L)Ng0+N*5dhC(Q%ruj&7x8)dUs--&|G^xleW^|)nw0z0m$SiGpqm%W-Fyu6Uymp=%E9n%abF}E{_=Hzvx7nRMZ-Af;1{3aEG4;mgROXzdeUP*Hz~V=K%<_Ev$dV~ zm%Xs=@!<9ud+TH&h58%XL$ z$Ul?D#I)@v$}Sbq#3bt_?i<3oWf-MME>BBP;)1pfG6RH|nFlN-o6wOL@Rzb(*uSC4ZcWp34z znfa!LSC=ID6oB<@5O;SPi=xz{mH_~{NsiEERiBST?S3k)Tl*2DiRIbtndEj_nm!&T zhhl=!UdLinX31J z>-S3z6AU9|AJ;kj%D+Cry0Pk1HtMBCW9H3^DBqs8Hm1P2+dKM;?s$?{f$xlNb7)cR z@P&xX&@KY?T80r7Q0I1W&7>0_ED8|4;c^Vf@@|nYLex$@A@v~zeLEHcN;b!hZA*k#(+eMSLjvLnXJgqtn%uHOgp8p7qmH3bMX<*kf=109(rl6^WW;z z@lErAgFqDasD0ygQ$WO2L&^@a@-xnUAW?yVT!dc79s6p9#`wtuVG&i9b$VTW1GaBI zg1BKWNQ-o3wBZ5r%~!1Ih(cvJ_ATWC8n-WVxtZD#Fr7S6GFAwFq1TI;qxygu@1j6e zlv`KUo^ONK%p++$p(La4ale6XFVZdqKK^myxk5m$eiboav$sXA5u&_7dS_rZ~YPO zdh!&_PLt04mT1ep*)k$N4}a3&LA+83MWjqxbaHoDI$UdO%m^|w zSeMBIJ1ea^4gJ4cWu{nN0HACL9eAdE$WH?OUT_$5#%m?etDeFuorl5D{j(t)h_&um zY@3xQ>{%RghRmX+OON3r3OjmX>YyG4t+(T&k|0OXdYfJMN6X1m%!)#_`|+VTjd-2{ znb(wYO0(lbP7+-ZwT>!Vqcz5%PdG?@WbsO4YI(;P=ag;d*}dYn$mGU&{>7>Wv;?@! zYwVWy^q+yNMh}3udrX)UPtxbOYG?p4iNU%H#v7J-QB$t59!vl5g7M`MY(oEOm~zy` zu77UuOZ09z;51y&w+3E%_F__=0_-(nFgGi4bp)5&cdMLz?8a>t%{yL%vNJMe}KUa zepzo;flBZ?m@B1#tA4j2w(X0036Im#?)(LL0tGfIsw8V~ePH}PY*bz+P(o*#nE%W>F1fgRuCE1cCIjNL_DUi{{~sDMAlM zjPUSS)(3}(C#sSiqwym`nM94M=J*Wjd>RX0W)CYPNta{_-_q}iy&@WCT)cCxX<+N5 zkr@+pOe!?5oZni%=pyvu@oKmJ=n_wAnXyv^cb5&HNk-TZq1C2?`dyp}D|mQUVw{JNlXY7RjUI7VK+ak@HCf{sBtpQh&#j^|A~O2$h0dlw8(e>MQp0QlN3qaq-wm0f zrT(^5_02XQ!5~?bVcD=kr!*uuB+nK73S#Q=79A}M*)ULFr z6s|v?NL5mr2=5V}#$FBQNMU0YvQrv{%<1U>m#S6mnfoo(+h!iJInWVt&2>5k#`8Rp z7)sxlKPmo#ErvkI|9^pz*X^M`e@9bKR|%iHIQx+xS((&~fWq{B*i>U#s^@v_`ayLa zI=KykRR@UmM;ciRq1N>lCCWTniF0HvwgHRWeT2r60J>q=f zy`(E%AgA1+GG2b>ltY(=00?EB>Vm*zlg6OjuHcVhX5kC_#0#<5^M$e{R2tt{17CZ` zNoTk-ZL!z0XY21CUAJ1VMVP1!L&;wj38qO=8YmgLk34%eWO^6Kd$Ir%6JgZ4X>9a{CfA3)t|nw!5L;2^Ki^1*q@-b4>|wj1|4a0M={V(1zsL# znn+ZMHL;0^flEGc^E3fUc$@p@My^Ci>=Z~=g=f9Mlrv%l1w24#nN9t0+4B9b%&)FXTPFdUxQdpw8=5o|{I z)oNbnOPjICSK}>7p~>OO2*^(gEGh()i$%nc5Hl6AY}hs;M&l&6jyU6G*v)89Ng+x@O1Zg7pd?J2(uVA6?Cp&*wwj z@a_5L&B;F7n*C{UJJJAH(LnumTMIM24jWw1E-&daD{*nsfBQABzCEXi1&jsIjuGjs zLoZ1o^X-69GLnIG7EUerRp=WJ*xX5XHo)deNR>@`w>b1l=!z?01}XdXTQsyd*&A2f*}CBrbhtmre+W3Rig8{;_J$CCc7AdtW5}#fHgVDhwE|>S|Sx zLg4x>E6J=&vc-T?eepH&_e$^)c`rtZA}hr!F=9nB@MWzRvhjOW#n#`P(N_iqs>mO< zgU4Adq^sjo%=PYe;be%lTF7l)Wu)OeoA$x6%jbPS zV=S&42zatzpl>qEniUbP5U=J0>NSs8NU+772KzxL2#xwrKaRLqhl-<>#ZkDdibWXmKQ4bErHywyWf*SL}W*I*9< z7UhEb)mb-Y3BPp<-#5HI@RWj zV&Hron`pCwYm$yUFiW$Rn5M#9?(}x2uqY)jYfGu0IiZDa40SIc zUuPGi_wWQy5y?@LB7aw~Icn1%?0=|zP@zgrA$!&uj6a$FiyFbD1HoB~^GrjtR zPnWqk6P~nY5uC11DznDK83?S3X3wn)h~GM!jLd1(8iX`c9XN!Se4BD!E!FLqRg9x? z-QZRM%B#*5LXXwH)5v(+26ZQcHs%r?FXB3kh^7bgT}Mm|B+@Zp&b2Yn{N7bp&sK1k z$|=0lMe9_awNr8o%kn@g@4Z#ycaesfx#gnn?mn)KM?enaVUyPx4%lFt{%72bMQ!g4 zlres|`IQ~BRsHJcTeywNI7NwNBSuTN6uX8NBw`DP0>T&)A?9O~I+a@W#a-vzyzbW^ zUo&abWh1Kv>)hXdDCeueQB24VA#E;jXXcAkdV^nu^2kX$miw<(4ehxFm6#3HQ||}Q zLy&>PRGbQf49N83MV=YkoqEk$7WNWi=t{qf5Qa4q0I#O*=&kMbqBM!R1=OpYO`ktt zd6+t(>o8>%PCf5ggv1aBX^&JDXKSLgLH9X2TwI5HUti4ANEydfCd3KoHZdd46lu4! z{5KG%aY7YaF;6*)c$%`<01z(ec=O=!p}~x(&_gk$&>RrvX9tqhiHBH*s!1Yh+zPx zjfRA+t1Ihn#KQx9pp&?xOeloLiAd9yEC`DA1Tkp#jDOKUaXcS$t0-FxL{nrDw?|mz zE(ehenHp(YC_1P&Yj0Q0S*_epJ!=`eE?{rzDH0sCZorEClo1joX~*BNEQaY?=Y_`sFII z8JRhIyZHIluJ-d;IT(Ef)*D*0@7Ij`1OfO)Kedsw)jC+c4?oc3)blts-g=mo^otJ* zc}k$T4_BD$C%7j5{c|@(?P|jw)V>TZS#|pm#GM_19Z93zba`%xUn#Xt{diKu)wvj{`C{np0oxAuRji7x zH-j|C%D2&@ZuU@VCj38URF z$xUwvEOZ27W-M_PBNuqD&!NS6&JlDk1gmW-5fr?yzSQ&i_32oIw!(Q$wBqsD9T87inTWGAfT(!y_j@k98syOQ-8cy zvoUPF>Ew%i&LcH2?;Ad$$^AiMyaRIoQUCL}@v|lpwb~V_rpmIEfTVwMh zcLC&~St2qw`t6$rp*0!;Hl4Khu%6GAYSU) z`rXWa1vH?KTr=7y(;CttQ|w(PQ0(IO+Z@%d7D{pv#3r@b{}AKv#yiOnKq|T6W1LzI zh<4rEftDoQGpt?M>?%d6Tny)XRFxAZ0X{oBPsY#$D@Hsg<_RX2o+OkJpX|gc?g5uj zG`i9o#hJ%mBM`!)b!y=b)9leWjw4m%91SrIjvD2+UXa5DpGdT5-U}dapVy$&CBXzS zHS^DdF?#dpY%sz4;aa)>LrW^@osmtuLREsC>B+8*^}}- z$3uWZLoJ+|H4RF}`5eP&$XHQgprcEU*LEFPLPa0rhU9sP1_GH-d}*GPV= zI3Ruz?nC;}=45J6VLC$uR471^iuQ7)*cWVgvX2woqs{CId*zpU)T3m-wEquDt%6Ei z12*N8Hah8b7ctk^Se2yFDXby`-4ab4mS#qC8BkTxkVpI^3(c)6mT^QN_lpFroC0^m z6T~~4C-Y4f#=9wZvI_v7$Dq-|52Chr%{1L3@+al$JPs{2Gob#MZ}I&!E~@X`x>HRJ zGQ~CrIslkqmL0%+fo7J!pJ$JS5+Fs1W-rJ=@`b9}HwA zi9JF*$=`jwq7ag@H9W(^p>qj@+j_|!nwNJRJQ{F8j*rbd84f$i8IKmp0Q1dBEZ5*f^4xvEK4>60tz7x-)y>RGoW=;euAeo|`EM-{ zf5RhBh$*lD759U@*2%Y$CLG5QfhCV`ZRGDe!mN5{p=C;}`1&sAWnS!CqCK;9)&+W% zqMvW;BKEL>#ka5DJRF{G@#?%?XkeTU2pmOlEs?!H7T^(FZ1cci4^cQUV}Wy`E`DLWp#+;bWL(FC?+FwVHj8LdN1_G zg!2aLqqIYX2o<>^%A4t-i1=Mkb?^HOaH3gPo;sCH#*y73)@=5U!4ZyE^9`*>1gQcd zxMSTB+4$ucscnRNKMUayd^g3RQgF3=a6Vxh=fR(ZEH4-B-%b=b`uXud{?IQmmuLca%16{u{x5@hoRPDz3-nyjx zw*l!1X>h4}{~)M8jl87PNx>@+cT-A*JwLd9X!X?OnSzn5#8P6{>zf|2U?To&K_y;0 z8|Lc7(qA-o!@SPvnp48zFi2eMj>z{_JxAY5RJqK?&kTFmd-h zOl_{aBc1+O*}c|%ah=!5iA$v^(iju!#}Rmt{8qiGcG^C@59U&O{o45P7rOZO2~WPrLS83v7cCR3g$r=k8^N4@ z!Y+|Lh-kbq6Bz&PIU#mS!)FM6a+qU+1ekcK|MdUce@yBwJtC?O{Jyvu26gK}=t*Ja z_7VTdH?bf6>>oa$#7Qd^&-s&=k@T{VJX9g{woJynXO$V0Bk}^2^}uTa^Nb=N@wSv^ zKw`nQ5}OJv02IPvui77i;!> z-(|m`Zf#4+z*6y7TBHN?Guxe4IV^JvMc^)--V<8+@B5K5%&he|b<(7VWd-|&&40Q= zb4W}Vg1SVq{iPc@7aJygfxWa(e!p|viw7az=#G>*>~{Gj!&MMB{Lx>>zmm^?TS%;3 z5rUc8@;*<54@_8wDa2TFf@P6h{WNWR0r%+sc|%*4txVDPm&q3!?qf;g3rvXGw630U zwhHGvlg6L-0x&>7lXgSeat)=02F*{TRZkntrpM< z7K>7k00*}&8nT}4@ze>At#h1oevuQ%#{&~*k>NLCae=7um2t*c6bPSr z3mrlb#(qETxFsq;<^ifUkC@C_`ozrnJ9p#KBq@cMR@*uwK0|%4~-h9u-3F}*C>u97U6riC5ti~-8t&7f$tBgK8Djea8 zXW7FvqYAOp;<_LHY$|;T8Le^3Mfh=2!jq4QTjzPQ6dZ?@jKU)ZKGrpzfKzFq@@W7r~&vry|&(> zvShlYlqa$9ZBwqRJw;yZ32GR#3oi9E*zdG@t%cotGE+WS4~Gdv+a@hL24;wF8m>=8 z-=mCuR#TP;knUA zAD#RhTvE8SiI4jD$@|LttYNIdtKn$Ic8pZyyjA5OSYW%}1WYS|j1q0weBd>lrzqHY zb38U`=DauNf_SW=B?1-d&(o!__2@n$4p4-aWP8jQ%Y=iLexi* z$g*&6E^&7#EY@Q>zT$Z6JHW@KHmsU3`5aY|b}J42%Qf)O&xu!ztqJd29`Q>?57p0f z@h2jPjkZNa(-h7Z#sct2p5$q4{N-Vxa`6vN70jjgxm0UQh>O-~y_-{c=}JY58oVqyq1x5tXOxnZVV@O(Aye(nL3I*0jyp`1*HkpB7GE;f5?BII z;Kle~jYt^uHUFoS{emci-}eYnAeFsSY%AR*oS(^;&926BkjggQa1@KjJ%nU%D2lFB z9e<593ZNn>dW#i-EVY0kmGIF4!&)&g?LAPTofvDr3@&q6oV6MZOM^ZWE`p1RqeRoV z#mQtfhqONnz;LoNJfnUr0v41D0%q{ny*5@j?>HwEJSGS8f9B#m-do%{EW&ZVO!UIo z-R)%u$FOr~qa_KWGHotpkA5ZVUjftify<}3IM$G@&)VUOTuOz!UIJwfQ3ZD6YX$l$ z;(~eC9(s7`f0lLH9$m4n>iMQ8#pSUkF6<=41T6-QL;+&`#6@ei`Xi`eIZA$L^?#DS zQBB0qv`T~hALw#s407CjGx@-7nmb$8&F4g3eQ{Mx&e}KSA{bBm4IH&0D0@)$PMGK- zSna>;A87=<v$0VONSv?|`r9i}h z?604-pqZaj>QDdVuEz(Y!*?O@3xt(gBlzPMt1z%3Wl-KI%hZJkg9lGUZDJR4)AV%L zw4cJHk|`&$#209atV`h)<-F1aZv&S?wc=04d)wwUwbz86`d@R*pzm=lKo zw!QI^rGg-j$6G+B6>xOgShqCIedjGBI;R^ARNgoe=UB%z-uCQ`d-$Hkht=Pz^r#oQ zJ{@B15(Oy0{K}L9n{D&gPDHD zK3uVM!nxJvz-AU(-)^e1NT7`{H7kzw!1I{*rMUbtacHYn2b}GNXo5alm$24&+uZjY zw0snoaMR+bdq8JArb1Lgr|4@b4HVy2{gmZzI*DY{ph2IdC4#3k@$#s%x*F%o^h%gi z4vGtKIPoi}B|ZV2r@cytpJ1D&(*qMI5~+o+9BX*=7~YXneF4h{d*Wp9u;1k7Hi3%F zqL+YW=ad=_6x6Q?1bKZNw^s_ay;yq&I*Ep~Z7-l^>J`{!1L(45Qw|eN1KMSoji@GT zO|NA1Uz^yulv3-aBQy?GU2n`I=83bwxB2>$e>n}yo)(2i$daYw179zjPt^zmPNSVo z%+xz>JaW(EV`lqdV)752Y;n9y|5hNSx|PGU4Y%&6kR18LtXVU$bt;!T+XmtEqTNHl z<63|FElo=BNDf)2MV4X_QsE{l9nJ8-TwX9;!6M&#bRadrOa!Ko8|ExLex#|7t6BjJ z7HI$Sdg_o1uMGT&KRZsJ@73@U9S|2m<^LTO>`q8PtBn*qe>*!a&4(3~!RO!PGGj=` zZbYaXq^Kd1X51t;rl9h~+&}>;TyaSDi=1nJ=W992RZ?-z4{?7U%nUmckmcV{N21b0 zer2md4{v*Z$f#O68>NOSqU$Nug(eUgq+waM1ta`yl=NqbPPEtAfJtUN4HDR>s4kQN zO9$bWR`$Hv+?`;l@K+#&z}JL)rF#D{)3YHl1CXecl>1|lWTjNlS@Vc24FF+O&Rbzn~nEspz*2gGYBFn z;F8Cab+!(dm%@Nr6+y002`bb;{s}=wp~mT~{iolC1O9f%7G zA)zLo+#*O4q@b}Jw4T8{NwQ&^uxak4VA#$8ibB^D@hz5_%T*~`{qUY{%Is9wH`FJr zSt4cBttdd~_CeWw$1M8Uh@@W;n^AL}JyT-vrh{Ho&ropFjoXVoNzO-qLkRWi=?RjP zhjgzfP$NliLb&PG_&Q~R)csF8aec1m*2;$6(X=YABMdDjZHB^GkQ3XPbute~@5jfn zyyuV>NN`n~g7IZby&VL18w=tAW0OOwY0iA)2|$Z&v2FrTN*Y zt3ZsI@qAmr*tZJ(a6FTJKM5VgDZLD7vpLp0g>EK%g(GI=hjs;Y8AQD`-wYdr%nXj6 z$q`izVusYjf~a7nXA~0XM(d9{tdk`%emp7h45H5QK9kPmG9VI`>`Kk#l9?qfO~r)u zUww=o3lkemG?v=La#YUeV8D7xWla(mz}_KDe#oaKMUhdX66~$^q>deU7#v1c1EefQ%l>t z9{5C#LD<9C7Yr2YA+pB%Pf8r2Ssb)VW4 zDdLm!TbJCZN)42oqX}O~0~4@jRYJ`nsvyz1G@lVdq%!dXIO*Ey%n9eg#T_e@Mk$^u z9$dL_+I&{9z?1?|3N-1HoTrupez1UPtL$2~fJ#PO`Y#b~*v%{tD1Oj&lAL{jO2em_ zd|r0{qsI8DlGu@VLmlxdX(nJicinpKGRCkJ?}1%99^81EH8Sg=H^fe!udEsRFlBp( z`k9x+8b?xJs7b!7DR9iblYz(fP!c@s1EdT3q`(Ygf*{}_>DN+x8ozh1+_@H=j0gI#?kxsON+>J_EMTuzM!y=qB&_Eg;ZS%h!`b_GwP2 zCx>hzn*7ZwT4~TPV$mj)w!D42f7v|;-X@f`NY&?<$56tBYp(3-vKMnp+}?LLt-k{h zcijZ%6XVl2do$f@4)gxZ*=}TxVdpJw)VfvIS>KXJ;|QXhOY+zC6Fa_FFM_Xy3hmm; zS{VxU_#vk1t5>EeT{!sRQ6-o<_6Oz4v&InwUmJzvLLDWcOOmRlNIz$7Iub#r2;D@V zpzCG3d%b#4E~*B_5)L{EcU1+GG(EmCnSJ=@0&X^A~-oXq@#j8x^QB zAAnIOYtakHPVR-f>`@GK8Hy23aZUn+IHyR50xe8DVGxy5i^#7##%*%hX|H(Yg$H`k z>R_n$hpR5IEZ;7soqJJjnv-N+k8>>`qjK%pug!!F+!F2*uk0)zaX{x5oekCs;^V7K zPVI#ajw2+ww)Xt>13-UV&-5$Rcn9X2@8yO>MY!2iKS<}QV94mY6@SNnQ! zWr|8RS7Mo(>`BQxJhkhB31E{!joMuZam{p}^7yPC)CWm33sqvR`?JdKOT;i3%J1#e zc#52iLn$%$O5qUwzIpCWT0*w9iV(m2)AP2cV&EYrXG0zH=g?d?`3{F-sK+A(SM49_ zfp@`$hNDTVg@8F z#U9Oj2T`i&9^R#j+J~Z$tl`nBEJ_FdOG3Pfr+8x8C`%wx%-&M$ebm~Me^TkcQn`fJvOzaeuDUsFgj{ILaY(TUDTANfX<+b(f)-h5Wt3K9;1(D_fMVtUD z+6@W}QEUR4_S94lWhO%HzHi>vMP4K0b&XD=OC#@!O{Pph{uACdtf>w z+ssmCwrc;sZ!kMpbB7=9zaqJBAB~u`#-D2wiGJ)NR83DIOW-g^7(oGM_}_|gC^EhX zRln*$v;7u``+^iM#FpJ|TsLv*x{fy|5j<`Xzf{p3l(cV&7a-TJrv90)a0Mj!wCGKc z-`b4{Ktx$WdwEsR)Cpln%O-(D_Yox)dt{I(9zS7mS5I{;_se@HOgR2H=-g+H`Xo%y=Anu= zcg=k@a`Z0e=+XMZI7egnU`v8$hAvY!Pn;<*+dBJckN z^C-!%^Y|)}fLcJDl&qUxV?S=NW0&vqA-i;F=vC_qN>K;zwseWg_oF@1@6_L4f1XJX zrjxypI9arzKLWMs1MO~hGTI#VYf|z8eiHLCq))y30~u0h#BJBa$iuluYK#{jW(g+9 zXr?pVh7g+z62P_D*J8l4xd%&Xhz-j}E+PQC4k}9WL3L0BwPC-DXrq7VuB2vMRk6Qc1g$1;^`OxxI%Au#W>?}Cr zm49MGgb3CCOEGBQAFOcPor*DU?0U_sbzV!R`We41CNW9jeSmhaqHpvY$2=p4m_KYH zb!ck*Zo8BpAVG0ARskO&z2p#%V)B)$#awY*`owSsu?DOCB#R`Jz0x}^WkleGrbR6j zmtEd%tMs0}jMF=l5hNC8kpNM0DRbDL!3h5pV(xZP2@z->!Idz(W)kr32n%uFpj9D* zqJZ;02OGje^GbAbYwyeN)J9-wzQ$Z~mt|C&=}BG*SD5=HI^IZsuv<@YzjqhRfk0t7 zG7GzH>WIDFp0=s%6_nEvi7R|Hp6oS8-c_*3$w;ixp0up9H1uYZ(pb8}18O0+go=37 z(NKzTKDsw1f@2Y#YmyC#Ix?^e6OXqd%I5HP(! zn96r-L|3~UBh}aZ1dU^))g5{+h#^xc`H3y_{`<{dzb=>oQbXsdJVRCnwui4UID`jh zQk&_0#o2vMxbSC#A}k;L&16hBF*q}#MG8~O5JJ!@GYi=~1U@E4k`PblnAo8Z;7xmzs27ovk40TwZ9rrbP8tL{EKk(4iMcq>4fXyxQF+ zKVtUnoTgCnOYn=9qmCnG7BGjvxxDot?z~L+{kCBeTS7cQAQM_~tc!a&Bd+@}7KCKD zz!A=8h~3LM3#Qn5lNt1x89_7W1QUl#U>XW46pz$_07i6Dr$*y}<$M-fG?NiHNVVXV z`QN(={7t2qiaLW5Q}j*MRIUh9(G?}ClE}!bBIB%X%!?f&QJ!0fj8?I13j&?TmvC%b z_CB{zv{^|DtLSkS9m;AS-S9DXP4ZN3f48P@@_E}wzlkgfZ;M@?Nu)neh6S8xJ!m>gd(4=MzGVw}&6T5{E%v&)%Raz))V;M2awE;gMRcS=e_v~J{d`zq< z=oHX_io>6Zalo>DmNt6~A7z9qAL8iPX9`GE@D_D1_F&bZ`oC{$S+PBGnZ!2_wKJ@L zksR?gISJvBbQ-%gU?#f4UL)ZiDIa#-mWL963#pa3;j-*loAI{u;8pa_`2V%_A}`dG zEh4$fi%adF5~K}0&Vr}~qJhpF@~0$Y7Dqrkh;9f>?L#S7G1vS0AghwP{5qmQXOb^wzz1z%3cU5B zX^(RJEM(>NBbvSGgSfS_xr+@}Uc&}|Tc7$V!B(&DvY#*-zzYU zQ|3zF;{&xbXCx(HB6dqtG)pKI><1+wdJw`wg35Br&O3oq@R2)%GgTiaE59>kl3wQd zfM%n#ULIHH;qDH@o>yhFEXlvoP|H4Zke^Jax!Ix0zXk=o=j4q$2TF zxs2YNLVm<`Hjl7JZlUuETcCR8Q(DPysRdU~3t9^T zu2)33_0}2mK#V`v_Z3c#1-7^W3p=;*#L?6K9z`1L;a6=)pqCIwOC9Wb zg7)p>$82YZfLdT?S=C5x5cY*1|Div#UM(szr1t9PW{f}}3%q`p#t{CHjt#b~ucM~W z4$cSkheK|VK~32JX?W4R9B9MBxIh`_FKYL%)w0I+M>(4KCSR1u=ocjoMom+SZhuMe z%*Pd}@CsbDHzNozsInwJj!hnd6QDzIwWSM|6JFH(ns|0DDkmh)vg+gkV-sRtXV7zR zSkPb9S0yA)=vsj35s!lJWg5-@?F+t7o;PQ^jN$hr(P(g=fg6`p^!8tmH}5=uF>Poj zNI}pwg616t62BjXq1T$+k1D z&Fq8;u+q(kP0L-?s$Ku`MI`Vi#QywXqHnBfp+wwp}edG&Hs+Kl9JNMrPz(4A^2eTiy76dZ5#tTRwwq z^hGc2Q-ZnrglgCq(|S;EwZbkY#WvD>CCpT%oOVv_sS*n1m*iH|knr6sCn|X1L{>=b zN`G(lqb&JB?veA{u*B79%!SS1nYjlJ$y~ifU)sZKXj&%ec$N5Zy+DQhv&Ad6ynu(q zr1oXAutJdy^18426|xXxX;Yu{GVDU1ckab9WLw$*M&z&=p|{m%Ig@W~>}Bh!oRPu^ zya*A4E>Dl~D@#$(cZp1f7u~|yBqMi$LPS;aO&m)YO*?6FV5OaKC**hj2k)<<HucVtKAdh7j{DZW;uH->>}WtKNKlvv!sFe{*cckGugL%YH=_ z#1O$v;41Ud3rYfJWqNUa3QWNUrYY3xce{8knuEhj(`VRuwr9SyE30D)qNwZDu+Es; z06E;jF|8?&uIUp_1u-BI_SjQ7vgt5pP_vxFmtUNIiRk{cLPj9kU%Y;h!jao&`Io8F z$kb;U_AbuQT#VSCbTgvE0<;IaQj)#!em#zJy-8Z<$~CcIhm1o*WlAwIXyFy|q4{oD z<=(Qw_?`+f3WCUh5mdC8&UZ*%+|lK+U#pgc|$-&iWU z`y1KoQfvU~SniPULk8+@1izMw4ryU+O^*)xrkFnC*bR&OZedsw(ZeLwjm?o*+ozRZ z4Q}Vkh@H*(Kxq!FA-PgiZgK8Dp0ZVO_giDbF>w%TBRb{BW&}moUh1&aWol0x72!f>;YJFL&1s%J? zD9JeI(;`#tPYG@$jCl|H}noHrV%2xFjDXz*@hr@m>4aCitjyH*1fzOKw3D#Ghx5PNSYA*6RKKT@6C%t}brz}a3m1NS6^=D7 zLFPXmT3ch*v%_rvo<{Sh>605beg)=(G_u}VHK-kY(V-;{q0Q8f5sXd=VZzS;s|1|B ze2wpZ&D{2>O=Jz%sKp+9QW#BNo1S+TinOJJgf{r_-)R)}TUNZs#8XRcjA78fxiELQ zqfl3%6_o8C9G2FbbPR9~=(@_-$=HaK36h z)%itr+j`RQo!1*5d89&EPY<-fgHFmaW}$Ex05(yoB=vTcleA~?=Viu8Z69fvzdb95 z55A=VJO?x@xyTw$5+*9hKCLs;-yOj494)gUZ0tMj_Lj!$5ar*lK&SV^Dk}f4Z8v=@ zQ?;plR8v=`n9^gwD!MU4D1Cn_P>$;Grdq zTSzZ+Wjr&A_>sF3dYO8Ih-{v0!H$hz2mJz0|@pfF_#Cabkr`=#R%8D^zAK$YIUqEEm}#>}h9AP7Cjh16|fpy4a=|L}%r z)Hkfa{fZk88m@Su%y=7pg&OneCaKEEimr*e)Qa?evOlnBnj5=S?MyH*(Th0?y$&#?(@Un_~Qx&`zN5+bCV7?`88&J-dU^EPY8hxk?s>Vfvl=sFw0ihtdr1J~2zU*gANt zZHur=9TuPXwiz&*&G<)3cvBcCFj}XK1$bKknG8miRF}3eRndd1;h4yyiSgC9s{sS~ z)}35%8v1938D>`eHMOihXBFNPP;^3(FxG1m7=ir?^j`2Sy-e{E1ei0dZHU|+(xMru z_`sb#?jt8{AoNwvP+aV^`-7umnuX~P{IZaFkD&y3Jl!KZ%--SM>jBN3NjDo>!=PHI zk^vfI23xQwWt`CcFz`gE)vS!O%M0@MUobE z;_sVho@SzDuVY{dp1ZKgn5S0tdY8J+JQ-`qXQqx1k6RSrj|i2exiF+ngfRem}~fwys>Z(S-d!wt6@dR6QR}IGTg-WTWGJ zp3s6B_n7sLEPyY>ry?~b(CuSufEN=9237`_IxBhpygfqSI@Y%TU)@pnxEkPDld2@4J(%hx6E1pC@m zLC_8?5clY*vexj}$ZINk%5l(_do2p^c0Gg?;griDIB+0H;rgjvk8 z4Osz&jdKWKDr!Wa__HzBK3Te^&lNS&dvfx2Km1k~#=R70R;-visk-?iF%$A*#>b(P z&UAJC8Ti6rNbotM!~sZ)u`p4R*wazDHpZ^z?t+^V*nadH!)1ePRe0mU#5s+|?r?9* z-~RJk1&IHQJOq4pAF}g}pES^iezAS*?`=!@JZ+iNi7^bbu>3kMCzIJUE`Jj8?j7#k z6(1r)P&i52^W_)&^2I*}Gf}_ktW&!!W^NbY(TLTTZQnEuNT-s~JLuv2!6C#ER;FTi zW15v9m+@;E%;v(F-`mR_W1uhVX02%nBc&w6FhSC?L_Os;xnC&D&6$d4O4Qx|!Fa*e zNXVo}5OwbP*}%|SF;UO|*A(4^B~sQ=?<+7=45!&fLEXw$SlDu@?skTcmu82t*QU3j! zorGy+&g$y9q0Dp*WH;{CD*aCbPIdHoai*7EwCLk`U`6n7qYjgm)A3=5euQH^a)`b_WStfCZDrig+T=Uxdn>*8 z?5km(3Vm-zR!I|ou*2fZPSSz*$%Q#w!WzwgPGq`Ol*iz7=p|_tNoy<4UJ99DmZX8=R|mAWE265!AG1MKYSHIsH!|9*{h z<=I)TALl1*ka_eF-Rq&{BSlTs2RWcI5bYIMkMa|ehv7_lA_pbAX??BcjJ?BM-kA|f zw+{{F@F(Cw?wD)7eqZtJoFT7FOc&OFKw`VYE0oM6sy|89rNBaeBs3^oV@@!%Yb>|L zA_Y)GarLf~IaH<%W5IE;JQOOt_WVuB~;zWsadM+g5n)@h>6#Obv7%+@^T4Co~rPEJ!! zgyH?_L_4vL`ij+MAXx3?5cvSJJLqX*QrzFHEw0y}$y{uVhXF@Z4i_>4u3XT=Q59+> z+up5AqNTN^bBN)M0%qc`NRQG{HM=?77q8*?w3+b-(K_!e5a=2=aH^9@*nsjKO43v^I6G)I)e7D){32!6U}na5QY#4oPo{B|7E?Q z{{|qGjfc$UFt7`Q$QBM@YF!sNiT2zd_lKwB6)#B!+0W8eqY3RnQr z_Ck=G7~>`&>TwzHjSo2M)Eu4j!0VXc&J?^*z*~7rv}+f4s9 zz-jZHqoEALRB&E8`Oo3ejtB3*jR-++FZq|Ce zL;zhRD0eW~{{EH+`S&iPL+zn^sJAU$L`ilG{x(+VxI1< zi(BmDM>6}jWlC~bw zsN?ioxQ!5|bCi4uC-}+ZLL5@5D_f5iP86u&&Wi30wz%6p^Ok-5#$;7JJc|-<`t?EpJF%9ff3~ zR{(?~{Tql(yVWo*&@-(?Kr6eb^DGTNoiu?7gcw$k$zK|RD;T)|=?vt!H+eh@)z&;P z{MxTJOQNkU8|3&ZDQy1v$_qZpsmA@}OK>cuSlIa8c;;Mp8P#S0v%pMl^SIIXCO};A zQ9?rWCDk&tWhN1VW$ta(PWe7gk97&(b1H_q4lMDKjH5v1ZAiPS%GNkL zu`xqQrr@Op!egt53!I4`_WOoOHJN~SO3eb$ZM2@%&kDTIxREtv35gSFqQk7cE9C=R zQ?cgi->vwdR=QR>(OObUFo~)6QKl=87M3wp1V7zpV&`fb2Cq>}u=@N!1l{-p{gmnC zIJ{-}dmYXK_E~Ocm%`=;UAsI_Uit}!%e<943v1L`ueHMTJeGGw(~9{-bdS?ocMd;6 z5GR%03=tm#&>}UJtwMmN$Zl&x`=FjZq+bCne>1|ceN~#OAjx{0gXmfz?UFOtv2q)y zgykW!bOF^LcSjLoFSTJqIY{~yW+1D@gpUI$W);x|Nzgj5oPv*Eunq0M9aKh4?;3N1 z4Ke-wd1u0L;5>!C#Y~^{jl%pkwTILwV1u$-4}JIzg6^B@*xQ`X_oE9Jal2Y5;2b%* z4!QVTAo)bogi)sAUu|Jq zeqru8q}Wb1TiK1&Y&iJM@W!9l>+wNc73tHQ_3OJPjF=r39tCiGl@W?GK99;-z^S*k z(r0G{K9^d@N+9Wgm<%-rGk)gXNpVV-nZx@YO88GT)>pH#L;+@7n%HkY!D%%1R6Vsj zGNrLn@70ZBXZNyCZYVyn zciAf@P0q)+d0v0E&G&7Q{9%SZV#;3x<+VX(z{)nFCs;9_huD}q{rU~J&@a#q)M%i4 zaoZ_?abpM5m^%!uyMpIKCYa5m+2m&we-W5Nz}CVlioF&GwVb$v2C|da5s_M$8pDeO zgf}T7C$@h9q4?F^1%=U-6HdGsgWZaKuGh6T&hq2!6SA?}A#d^vrtc*N(mkx<_lmtW z8xq>k{iHtbRdN3DmD9JCTPQ{;eoW6Ok`baV+y5Z>ilj2Pf3em@yzRpXxm*;g2>)6g zsdhmTR~Y09_y;2e-F_?(w4vs&8m~_#*=})D+rM`fy6);bw%h>!KLEg6oT0*p##Q{b z^!>(f_X1|~BJK>zA5~PY?@_cL!qI3ym-PaNk%;+j z{`z)AMxi+EG5g1tXTqczk8?pZ>;u3=!S%CHFJ-l@x=?01xtF2h$lSDx_IC7!7td|uUqggCI))NioqR2E@nXw)auF^_ ztLEpLExh|;iOJWczzn;4Ap1=C*B?azqLvE36g_sApg*b6w1)2!*Cu%QjNP zD8%{?1`Qi7MVzxWRacP3eev>mjeAUtRVQo4GdXSH#S@dSjh4N`QQ-;sMq<%2i_~w)5 zycH}4_;uqgc*a}0KRbzk64ZNzm*ZOgyi}OWQ%Um3p*bTS!n#uu@FsPJ=Fo5hTd0m{ zt)9i66o6|`Km>2zjd%#xt}Qyv^W!r~#0(MjYBRt*jEWK+&IEAWjbFeel2dwF-Vq<{ z)86MyUR|YffuRpBCA)IC7rxrIq^-`W+BTF=JptW)_ger~b_M6Pn91Q%9kcG>m&_fWb@nY@`OyPOCS}OH;oi3h4Vh;M=pOzXsYw&o+i%oesr{GKwIY{#`{-xnhTKXuaPw zd5I^({(A-tZ~c1o`-UESJJn7b8EyRGTCC2qNhX}o3m$kk8o}GiGL`bp0KtXH>oEX# z7FhZ_3jZBbV`obvef%FRAo-n1dN|HL)mggwNaZxy1OS};TV zr@9y?SbRMPEs>t+$Olo43)F3Ua8vQQ;{w*w_E~j5pyyPCnI{4t7k&_8um=e}aDt;A zyErS<{C__t^k!3hSN8?fTPd9#)cuwpjCMqsqP4(AmAnIdBwzrbbrCjicM+~bS{8G} zj@~S_#oFXpCDRvfQr2CNrVm+Dr-d$Jd$DA=zfX-F;ZfU%w z)AEp1DUbctR?1?wZK{xu2|!=m7%qxq%#wTFcCPL&Tcykt_#M2y;hY5i<_dm3F)AIx zMy?Cih4EN!TCoL)+Q+=7f2aY;!WyVa4Z#lrbnmxK7pT@on4sF__j3A)aFgyHTpnJs z8Fzw0Rt`Hh+hsDxm&R-ec`({%HK*kcDyAJmCOY#-com~(UxtcmD{deC%@2q`CDTM? zyGppli3H|bb5ma|q$uGLQJP3mds*Z~A^L(XO4>S?N10}9+8N1PYKiXHFHA!u^1|)g(u!7$DlbTzquDiGQ&nu@@kq>xOjVurlTl%tfKe?jUU~QkTY^ zm%N3`<;H(iCUHh>5(lunEno?;8F`aOsuhk95l^hi(gCx`=(w5FpXuWx4)&L2E2+sh z2wgcq2CI@PUAZ!;AMTJ;(#z4UjkgIS9Pojk$sD*U&<|K}f=*N-H&wE*_uVh_faU1F z<3V+Kg%_M=VyOdv!wLm1S0>lnA37!d6m2M*eC%t)tZc}q;qhByM#wZ=!NEx9L|?eZ&U}A_ z4N9P%9`YP*H3n8p^!UXke6Kp&IXbzz4hsuE5XZ%rmS)RirQ05D%+?;1 ze}v{rx%0r<7MZpO*|Jaubkk9g`hk&O5o;#5S8!1zw&!2a+{?A3Ff6UA^#?M|^gYa0 zLt+WRT%Wx-;IbihHs-s3D-t+qmF%HvFkNS`lt_JWyv?$h$Tcvj=ucFO(cGf&^$F9& zA2088Ww5qt#h?G9zAV)A2Jt1a-!I9&IHDKj#lbyve&>~%KZN3M7ysrUMeOaHD_lyJ zy1Ux5s!Hpcc-$pfYRymo4?*p6$c#sybXf3Ixw^uo7{f(w_U9Ie&BcJ!`41fS$hjKm zeCjDQgDwIAtL_pVSx5+41RFkkaso^z!c)&t`=gf}M^~pOU535MQo03YuNs-~Q^m7o z*GN^gBZK9Z?Y%L3bhHUn#_|59Mb#y|`GVANpY#%CXv-4Oj3=qu6AfmzSr4n)QI@~@ zva}<5qZLE7YN6ua>ifv|!(y8ETzIZEZ)G~`#7J&ILY;6fN%k3*T#_|HpYGmUP!M(;8Sz9gG7UIZLcYQF6aq z&AhGYrblElH8?zw-}mjaBHXovxW&zt9Co%2N-DlR5Z`zUcmiD&H7m>JqgIX;DH=iR zHQj*PNCUcZ&WLB43(ijgd+S{gwngULEr4z_K$3^b{s?WRm1eI?H^Ur24Q-a$J%GTx zt5rEvY-HIF4<+!tn2UQ>7qt_~dUI-lW-d!u%|h@nAeG$h9AGLo9SDQ-jVQiTDB}0} z?;xbGrLeU0&%9JTbNhYrmx%*zkZxLkEGHBs9E@!=&EsWaVAr#`O9@c3WEM^E{q49Sbqao;bTFLW8C%*(z4i5m09bn6GEC{J{f+b0!LGg*h<$m6*Q85& zZ=J`{-WGD7C2w7b3&QQSxe)Tz&Sm>mnu9tRnPL3Y#ziJyvzwwG7hFt8V5s1gwUj(i z57;OT$cZ2zzSUHpow0%$#P`Hwg}R8@y75Xn8>dv1#1I0!bwaW0JA--| zw0*m&sZ0oOXlbOlp^@TV9C}fI3-u^r&$_OBcI&*9c-^GYwSMo>BBLwL6m|u zn|=s6$BX8KL4UdNsqX#E=T-C931RcZizmwU_nz$l86uA2T&pLN+mzfP5dbzY+#sP` z=!47WsZQ}VBnTo=Yuhk+J*KOg(rk`Q0&Iy?AVzE$-Eg0m9y#;L{{xP%+DaR#(GH`{Iv?`g;lL@_i!ZY zDf8VQ)9S2q2P>^-B2mbOx07%d+-@$#{?Y4#qs6@gJV1L8L%qrEolqzMxwDd zw%7j!EkM0ZjO$TtauxfcJw4w{Y{OHAN1cxjA96E6Hp!Lb(rbn_^@jIB)lYcgE5nsF zgOYpBpgfgjY#r$gv~r5r?#in_d4Ws7s90naaiX3z0kUjOJl?8|Y^!89sS((VHwbKfubYMwqD9LOr_=|#zV#4ei030!s*`_4sMR5MT;az- z(lKvZH;63LFai9(=0Ks2Hb=K19?kJAU@*&UwlFnc^m?6TnE^_D%9555i2ON{Z#mR+ zwIL(;=N6Ai##=T2HRnwhvipl?EE|g{-*$6?D54L6$wduRUYi8}zcT0EcBEX! zT*K>0cDIA^zXKG%XIa1^l=!EQa*HDMAQ!N%;yDV1Xr%t|%+3S@ab9{Lq+Cv)t!Std zQVnlSr0Pf;P2;Z)5CQ)tz-su$me1*mJ^7t;yage1rWoMu;CuA|mp?uDe?3D!>3G1VIUoI_ zL_@y+?ddr|Ym2xkO#H6EM<|S3XOyNIpL(baIRy{|rJ?#gk3=wCZA_|n>KbWGFE%2AW7G8*5hH%;9C|0 zx+yO{ymzGlFPB`Ynqj0vz^BPy$}j!CrMMSL9(dTu)$#ufRy!Rq$onl>>}2^UBS%Cx z#jM<&qK0HHl25H0ef&|Cg{Z;>S^sSczRF^-FtZ#EI3(+GZE7;9XjP00J1n>rhB74KEX+CnocDNy#9 zGtc*%S!nz^znpxZSlb81c@9t4>(kPin802~T=NzS1n?^2b^u!e`)K%5N9{>PW$qz& zzzSmft?%~T-QxegYWUQ_PP}Iw+Ov*(NL4lMx)m^%lWC7=1TTtFxi4e65WH3t3Wfmy zD7E3cfN5Zee+F^Z<5C}(q4Uz6Gu;@EeMVc2D4lb^UMCkcGiX@Pd6(@0T{&y;G8t*M zyZ!z9+Ze%XW`++T9xe8LRTtqwVgQIP#Rq4Rp~bWBTT1wIwxdxcuEB|eqYWgl&S1u!rYiMZ zLe9e|3?6R4ZZHIg-RiMJC~z8PHC&=3j6xbr!Ag$-6c{JFB{D2H)IJ4)n?Oaa_|8bi z%Be$1y0re1L6j`O@J{+x!}iML{GK=&5Q2sXDA9`Q@?AOQnk4`6CkNrb4&xkXvcE%z zM$AijwnM2TxTUgl;24PmA&Oqv)=27Sfifc>@~S4Eba_A!dBc+YjEVP()#mME(uD~M zG&KTygDk)`Qa#CLy?MtA_>$WQg<=aV6^Ar2`6EWY0IwL4W_gqiou-NrBmAyqRdj{3 zL_GBw`V!dDPMH1#*Wi8ck6`aeC69yxWmm0}V-~CVo^G3x7g794HZ+;b&?zO_r-xqjUD*<#<*xC)}T(ib^jH386|a$Ipd8 z%@}Zg-|rwcAP%An?aiIvP*C>N@UBG%xf~0Y_QDdzM9)gy1mX^-lKY+cwfJ~4_j)<$Fk$4tcOGb z+KQh1=b;m=c*G;*!HG~d8@Z*7tg zFR}%G$!ivk*qe>lC$L~6xFu_Vfs?6j?1%&C*34@pIaQ0%qnm0LUC0<{%G)jsE;$ZM zi0@YKGvx*1Y|p73XMLDjX@z9VKF|^gFo`zDIhD)nE4&HKsz;vk&w-P33FE7KjTB3d zGDb%zyvUie1))Fi+${G&{G=?F&WGrM?EZ)c#Xjy<#dp8*9>z<^<+x6hu_aL~i=0nj znJ>Q3xX*v{R(*rclHFXgfFux>TYw?NXJn`T%c#?|hV=(##!l+a= zG#^hCz+MIS_0kOTDMW&$h#8tm!z}Z-o1V7%rl!72vEe4BBZsctRECnU3S}@0*O-yw zyIA_^xgI)OL@?Hr$`Z04Y9s%KV8$|R&%W=6!-fM*y4au4eiF8*aj*$bNfdUCwa)PN zi8RoMDf?cNLWQ+b)qCuSy*{vG+9E^EATY&b#mRRI8%PGaZSiR>6w~vNUYCX) zwA*{ZWN1#Ir9~|+aE$gT;{_X7vRQWN}Am(h8i#Rt_xtuoCs3I`yUs%tR2`6+$3zB@B{3?ZgkVuX9Q&tl2Muh_uRlZ40?=rlq%938uxnuU{lyaR$ZU&Y&)>vJy*~L&0U&n$k={+T7pbu*@ zOZRRuh;D(&vN{qJk~Au@wM^Q)@67XtAaaYXB1maD&9u@*E4(8AdU}K83deOrt*Zfy zjdN33PBFX|Z!|2I1j}SWn6<&=wcAOY%;)^c^J2LYGI;nNvGxKz0NZOekGF-9L4cvb zxw6VEgc-yjXsf^>X;uWe5IzNslXEsXyINS#WROAJX{7V_69lpinlrxsHH@wYX29 zpCG%*qW4v7`-SWiJdOEaVJGCl{L>}N*V^bF4^ANAgaHh0Sv2qs8>%*+>uudmMnrCb z>B1~Ubof@o>Y7da3650%4E<#5DbbrXLB`^Sh5*ZlFC~S z3`7q9vwGfE?i#a6D@Rdk?-BFAu&e<66Ya&?%K|$s00zO*=dW25^vTKtt z`MQ5zv})?T(#N2N-&Q67W=|YvLm+0#2x9oK?ko=Cpmw5}c9h=ZY3RMXcrNNfJ=BiF;DGH!JP00+G5phcbeU`R3k5LY3SLxm3>g}q#Igx4_-e@%*}b)3aKFgB$^YbcPIRc3JFt>XKX{sy*QGim zO%+(#i$m|l*egf(vNCib?R*6Z2mR>>=sZVcyxHA1k4Hz4H8#0S*-!Jm!@j{*g#>{} zcR#Ty9EfDacXje6P>U2m-4-YFVe#G)z^}_hnMD1)hJPEYUnVT{zRgcv^%0kLg13RH z_^Gcj`PGzbgx4I>L@xOcfn<*zz3gXgoQzv%+N}gbF=Xi^ssW(ARuarBHEb-umL%4W z)%>i2BXM4mI6`5}i@V5m8tY5%xUMWId#f?d<1EEK_huE2Mo{Uh@H$Es=Opx@Ege&v zX^l^wC0bXJ@)4mo<}G zfy05Ow{j<|bz2zCC*h6E1WcWNx*0AnvCI+18~(q%l-YNjkZrb+Ne|upK2VvSYaMAN zQKoODX!jl_jy`>~prQUbOUIdPFPX@K!s5@UJ0|z#s|(XlK~}E?D>&2rbC{XCNw>K; zn>;&{{{)x^4XEi^ebjnu{e}mCu`X#PrvNHtwaIdkRgdRWh4){+$ZtlKnt6@A-C7|G zk0?#02fZkoNK7pE@eTLqKa<1lor4t-F+U`}meQsV#t^>B94~ait@2ca-M}|8rl{Tq zRjHSl=HSeJ9{!7HE6ooWYqD<7u7==Ci86lxw69WYjWsg za@a*l_@CMIbqc@rLQ0eZD}~bUk=};tFzaL(^IkW-@_^$G65AqX7)K2?{9xKBpMLe) z5)g~P)h}akr9@E?_JAXdU~$8I5Hk-CtU@`$9Ap5&A6v}}M%xZ~2x3X9%76fXH`fn0Z-+t$M6C$5)2s7j+QmLd$ndkC{gncMfxL{!Nc|29(8PBm}$!0d}18cRY3l<*bt+=SS;_hOYC12ED zzSuIm_Bqro#hmyWgxUoMVL<(|c&k41i zmrxkAFnz8xo6kioi~2)r^bcJ6i9qi%*2OZfa&HEhlJ92)bx8M_KZrW1X&-~eo<>)j zgrW5yqUJ@O?3m#tEi*|8htrRNU_2Mk8ZALF%-%)$?@uu?kIGp@{S}dn8276p~z2g@9`~n@WES z7ywGrSCnDk_D`-n#YXYyV9-4a(=aE^Rikl}Y>qY+*F!Q{sFNQ~*YhHHn;sovdFWt} z&<7V8G$~R)U-`T`&$nc+v^CR$&URIXm_Pt#=j{B0E6$q-pj>2_)gj`I3msK}GitH8 z2yCIuj{Q(1<=EHsKo!`N!@H7k!5I$Y@B)-G}Y!?y$+1C z4Gh1XDXj)`EtoRxR(8U(3H|PxY1q93N)U5IPftq8_nMZ%WE3~(h~3}^&x7*;!80A~ ztiI4XN1T+j9ow=LOqV(rlbLa8w@(WK-TOL71iH{c4KH=@LEB`I*|AlQpK9y?+qTJO zKhe;9+UdqU0hn74Avr$dvTNrrCtv&!BFAZpT|(!nmb@je7(+cr0vkXBa%yZ6cWRmuhaaA` zEgPI$1cu*kpc&s7B^@t_s%VLj|$#Afo5y!t{gA4DAP2naFuENSI> zLiu(YKY}6f6Pb~S5;x88YQo7^J`7ffSi*u>&SKQKMz5sx_K<9yPV1~L`|5dcLJP*dAcjFYeCyZW9{A4{!2#E| zHRs zid8v!)py11KF^MQ7Wp>LGzK(2>IRHAXVXtGV)-IW4Hsaq0E^Qth&D+w^&Xb*BBRY~Uc&U+#u8vlJD& zIesFwp;qKr57v7<#^ltrYC9$p3|wRWR~NJTWSxA`!6PmZMVt^$-$kDMHX7_5(cp<>y$vv?1gpF5={;Ivtk$lLmyGFQ8=#D;+}c8F_4|pc99jK1JuBoP^z0XV z#Ro{qz6Jd3)pQPVstwqO_50cxL?vz0=}QZP**g1HttaB{*JY0|m#9)RaXf+)ApokH7kn(t zw~oSjO3@k3sdCtJQhDyp^WO3!a?rNtjDKfRuEP?VBWr%nnn3jbz}>(2Q}7;RogllP zjPN~oR|Kwz4DpTWGp)xgj1lP#PQ+EvX}te+I=VS()hI8sC82r3r-CIW9?(+$qv^sh zY+3+rUXW3pw$Jc&pyX!_55w%Hid+W-so#4-8b?%aNW&yG-bh} zbbW>mk-DfC6Jcmn4^L%FAd=1?Z)rzB)>H< zClKv+^iUyy7rs?UkYcVv6dqD$&I~I~UBBF56Hdrx%ZnyZ1QH`Qt^pR)qW^kAx zY=(5J1?dEKxmX!=@2)tFGc|wwdcL#*$AU^8v@1MEZk|F!cFUd(Aq zf{$}Ytp4whV6sH#&E)XoC+nppguSmR;nB8Ua=+0 z1&j#tRol%OtC2kEze_^HqYU9*LIS`a!iLvmF`j^~`Wq0n7Pwi=#sQV2wR~c_p?)2F z_v|C7i~Lgk$k4rSGry2J_oz&=Y%}@N(hnzX(2m9~Ds$E!bZFrZ9I-MTI&Yn;D|jn5 zZpb#ws2FauObWk{#?bHBfuYA4Nina-_Qa?NntBDM{KoY;sNp!~v>p1y|0pg*Sr(XyK zc70ugHWZ`jRE}EomzrF|O9DvYA!cBM74z%k7?YT1X(5F5n}ppGBYaUZ=Aj7@1}%Nz z%UrxP6;ZaRB5lB9a|pFWH=%2n2tjsgR2}0DI-idp!!^A6*2GdJ^^F$QChc>Y;Z0Js zd-~nv!O&?`)J#c%G4i!wr!iREZVF?Y6Avyw$JkYL# z>4*L22?6G_yc}@b73V`~`hnpCXyEkrn{_bD$rNPU%R|fOjmxQ*4frAn@xtJXF$Sr0Hl}&jW)7FxgPJpur@%0f~u(H^k-G3?(BnpOPq^|SsI(>dltb5Di328o1*M}UlK~k)6Dg|9-g2Pv zdmP3fxST`*lINy(+l(~pn{k%1MiXzXiaYP|+Y{t@?o0|{wpA{z)+^X?^e<$UuzTO9 zwbb;VMc9-qK>{V^MD_ARWPmad{Yu$)_nh3NZ{#);pXk)fVoez3<@A{qGD%gEusgZ8 zQCdXgmW0XF=*>f;h+8P^SiRz^p8cK+h(q2D7W&wf<~{0g{3gY+cz30Hg|7uMX$WMH zAuI5TfMm>3-ZY9qIXiFk^}Je}FxWGf7i$>AI)x#VdeLbQ9XfY57cZSKz;ZK#Zm%(# zPasL>+pr&MC5x)mTy#8dtFo({7>6Wvumbcav5AqKNCB4tAE;bdeHD4IOFX7bYuw(1ZaKpj+LL*O$wi+QfifEk=IO4{3r978}-o<7M2f)yN6w zg3<<7x~S}@K&s6&7PuVIF8sX-;i%(8yIh@=Z@61fGFS~2a5i>2{IjQx#tgj;wYBC;OJE8V!t+3GqJ@BzTq-l9-GcxDps`p?z`zWsZ;5PBc8-3t z$@FPZCaIf@#JPw1$a?pUH~RjCMF;JkDCEo2&aEo{dEZ%XJGEy`Qz4?_FzyD5Mflwh z$mC82{0G7@Vq-tKp2yr_ zZd+_{&(ICZ@C|8HM|Ww6UR{o?C@)WlKbXB={(gwk%A%@Mq~wb{tl~erB2GTS-#4p) zkuup-(^Bg?uiou~c(Jy|m0csCzucJ5i1>*!W2cbedv%wRg~t*sAi7LFJ>Raz~d2Q>EwZ* zJ9Op>x@V}%5a;?S-6ow`-5`~xMcz**@ zyq;wg1@FKxnT#djFbI4A3No`=(W7lf0@6p!5IH`#U4VearZcafc))=1Eb!y;cJM3> zx8%J;&NVUCRDGws>2foFwOds@A;|H&2<#SviKcC`%Z=W(o8lenVX=o40i3rCmbb+GvN?mL<5%@V-@w2FLpkeTa2Lq~~ z^xAnHt}&GfAb_@gT|7igA!R0g#ap0K$f1?QDU)-4B0b2?e`!?5DEW&FSm+@J;$Hcc zae%~iUao~wePd2l5oPmT^i5tB-cc7sm@OS3xz7#WL}EV68GS!5k znaLHQIh#`~ZT}=BN1QdHz9wP0nlLD$z6I8K#bQe;sM7@H9*8hOgr032M zEZjU;@3syxqR|2!Sv0!VD(pJAdXED(=6S#x*X#dkQUuLo$(Hyto*D85GCj1VXA^5wf9{A#U07V$LB4O{sW3$K#;NTm^N*42HDEHhLoWk3sbf9Ht%KRMZ%nhQR1_y#Jw<vOpL3qDCPCoZza{75zB zBAZ3<`Z~N#on_14$JDd0`I1ezEX>F4f=iOkD`!w{^hPl0#~sWyW|l50WK$d8eV<7H z3|`$bGTzr(Ha*BIZ@e*kOCtpB_Y<3#r11G+8G5^c@>iV*&K<)OUEm51n(jMpKVjN~ z;=2N=8Uvsm|V|D=oaWe85rR=z6`fxslroKoX}AOQpY(toQ>39*sTm((;l9HU5>uj&zD zza$5%TBq0q2))T3e`KoK=`fr1Wf{9hqJ5^NW-AwjL2B-S&{s<14do0G|7#0Ec1$ev*-P5vb&Np9Vbw?9jq8Fa zRN{QPgn_haIP364U~#&Lw8%p8g#Y z15d$*tJuNWV7f8oqsTyYE~_nHhm1zol{~es_%=fz6}i{D1nXI+-l1fN0fdm@B_-4e z^>Zx>%3!sINapjPJQ>6mVyDm@wVE!p*qQHonauP@P77|?q`4KJyD|+RM*eo6M?GQ_ zpzgiRYT-!CGKJ1#_#;6kt{zTLLnHSa#O50;hm$&@-QVwF%iIR{`D;I>(3WHNWkQ9y zJQ9UHqj4eOjy$=xMTM!-3(ulBILdQM!9cTLT!KD)F^Ap>btp)q-3$dJMTPozhpuT0 zwRj{#l#=$wuc{vnGQmgK?M-hHLAJmSG=`T1gIB4tmc%-aB@zqXZS5>2^=N`*^!UH6 ztWq5p!m{!=+q;FnKy6)j2Sf4#>GQh63KQ)}%hWO?fobjuc{es=h1Aa9`~k>UNJhqO z?_|&uO%xcEo1vXlr^%Cmh(DG8;8>mlO?!m zquU)x0W2<=?;Q}Y6keth`m+u=jHxaYmdp%9I!u7ihO_IPA_xwX5xiwyC5fGMJ*v?_ zCxT29o29QE=)%k1tx>LT;Cj$$h?s;B&`l{}?H^V>t+DirxeW_u3Lrh$7oamaCzyKs z=3mG3$B4wNAYLWvroWFfpKVDh1gc$Z9ZDiNy49z&^5>FyOZ7jbDEZR^CfQM;yp=x# zv_A;R;_z1&4-UYr1wNH=q1*A#7RfwXM#(dU3Z;PGTu)dfZVvu*nKJvRtvKNwoulJm zscJos63`jgaQ{nY#JS@SXK7jPFxNKXTLQje9S`E^1thEW`|OMV!(Q>x z-b3K}tTNkl?e@cQm_{T=M?9 zti=1EE+&jMv&#q%d?~bV9R-XC6L-;oclE)-4I8@`=jSuNW%i|$C4%NO6B9e}ND+mf zG-eYc{#V)^QU}+p83Dy$LI&L>10pP|)R;xUfAs7M?5sny2$*wNyMmZ+9vW;i9EdB> zw7PxDv+}r3UAomPX=d{QEB)Q90@%(jF7B})Y4FRw(;~@CQT*ieNe-{J?g;HDGa&rJ zC22vWt30W6(ED+WfOTmU>Y=pW&F2Fql~gwzM4RIVO6cs`{1(OluKlZUW83&^c>ECk zWiChU5Eh`scaz*kk06hL*z>}fy8clF zOJ@$6GjLkP9)p{FhOtcfB83j%^-z7BhMX-RX^qDi#$NPu1+R(ixLCGo43ksg~(jBTX5u$fV1$Mn>gO|1p@9fTRx>-$SF+hWu_!N zH2rft%|uVmb2~P~#xe`jC0)-D8DAt5D}RYk0gy7~kQN{`X0JaELz8vTO%%Tp$NcSr z7gG^_s+ePd;@`t9nwL-CiZEZhGoiE)_FFx@urA58DNIu^4U|RKAaqPbNAnplLK-^= zn~%(cC*|nxm#&|;ywg`tr1jr#|EHt9sWH`V>@Dp)5=ci!$Srf^hipdyq8AY3&;^|R z4owo-Ak(luASRzp07fG*0pT+&C89KB_(7s!*jyy>kKrfL@-TtUmodlQ^#o8Iew$V+wEIzJlUu|y zXzusklw@X(Csj*#>M#0%ZuT4xTo9WuSH(gl?*64(TXI%bhs&qh9#0|2SPKyBjNiJ1 z!LvkYeCCEOOf6#O>D4}ymzKD*L9X?mjOC>+=L|81^&i4+?OMcUuX?SK|K&24+oy>f zmdaM{&IDauv=CT_t_YK7NfgY1Xy%`$%nVAOmyrBiB)ZXGc~sqzEvg|h!|Ku_z52do zv)k_p+*S%_3<%o+QB{MJ4Znw4^*3AQ+FtpNM4_317jZ*D_DOneSZ?*z=+ z;7~iCM8ORwKqa)-lYv|mW5L(fuWqw(uS?uCtYB`VqDR=eo}h|wIOhkc65M#=fk$yV z$atVm}R{L zdFn6~Mwx6aJVsJmbS}XVbjD(MQ00L%GeB|iDU9T+?vX?k6~Qi!;K%S;KUZ#8*+Znlb$t2Fl4|T%WiBUkaDpf^wuC_tX;xg* zwZnN!N9F87?%JAv&7n1VxU&4%KgJRc6y(`B)LNE(Urb+%%)EYQ140LMN4-=EHj5^7 z*Df4^o>+pOj|jpWf3Ia}b`w-|0)PI5|U zHf=zL&wKtv(9!}(3Y#1H+v4~kIkO*q@Rb+rl+h4 zXI+#LxmJ{!iIzSt=xPfZkYe+uLT-kAxNRf5kf<)pORLS&?QylaNiZ>q94MoAKUZ3H zJ2F3J4I21LGnl*NlwdE@OLS*fS5#XZp`hCxChJeG7-`k?s77QZzPS|FQ=Q&+x#z@8J8^XEYV0e}&cg#@Gb3v2 zMn627>RK$0pl4DjI=(HAU8>FG7IZ;|0Z3W%aO25bL^~2z+J=91|I{a%(+bD1KOnEA zjYr@qebA}7n?;-)1}4zxup)x1xg9)~T3Fb}o!pi_yg6SS*eE$?6H9MKGsmvCqoeWZ znLPT%5Clfrz_f@$%}R7V7Mo=3mgS`rUk-Vnt#X?X*XMRxr<276w=!>haOB{k;h*R& z66fH3sOIU7c;g-VfJqkHZw$8-X~WPY+3(Je!Mt)S*GK zvXFvKCb&f2rgFZ%|E?Obmo+aTF~X6hA)#;vc%+@W`Q?|Bp6}cQY;8^Dwc)67yfElr zreF@GesgOb>VNI!8N?awvy%yx-@969C5?Q12fl>hP>l1+2+!`dzRolqGK^Q_0c9D_ zqxA_v@8A5r9ZV!=?6`+ET~VFqa78}!r@)_rJHY1ZUJ$7ctAl_6H7+kUfo!)j6$5WGFiA78xCzYU$dZiTx9gCsj2bi5;T}J~ZZ`R`oH79b--6tN%^gyiq7-e#mn^70 zQ+fiVaK46OO{t{>=zrTl7TJPsiA(KTlSyj5V!b9me}f}{tM_2cb<*UgaBtmfuc=F# zwtulEr@`im_#)ED?Occ-_5Zk`PRZQ9PWq5Cw}h$GU>G*GV;A!M+<6@ewV zhuR?dev^y!V(63>`18?5;Tol%JS}JbLq(tIt7yr6^W)zdf=>o^cc+2oavrowi-JgO z0&3qvlv#J`Os5q_UpRASgb$zkMoM!e7dY}s<;i1c0>K(HeJP;glxKB26n%`U7!g!( zT#UtqzmIRG4|2dzM5@C`j-A@?-D|UAdAKN?m9^N5gd~XgUxc>=n_7?v*`GaXSh@2x zZPbl$XU?-?b{_EhVZq#)lQ04cDPxRdgF;n&8c;p67dQ+W##ABfPh9OCI64h&=SjNA z_n5eBJ2A-TBoJ^lFJs(@@xA@%WC}=?Y$#p?Xt>R0c+3#L4Q$jG;}+}PjUx-QXc!y4X8b{^U*h&2&$EA)lMJA}wJgX!uTyeCnAQ#}CxKLEf$ zh_@C2wUmOnUmXvPK><7v;kEEwmIU zFql%hEN7_Y0h_VujM5mLZ-qg}Hz?oH?;q+(b$OJ};NILG!#z)+uS$Xj`GjxbRtK9L>5gl>I%6AIr4Pnn8{*_-PWVmh{kcy+|)aB+fFtNE8naQQLzOD zVVSVa0o56i-$*6&|A=*$tM!k%=u3uHRVCEt^+Jg(L*8 z%Ei*;MU-c)U5|%QEgho|yp8YkB$Q|9d+|0X0{o$`dDAKE8@F$9i;@D;i4$gNY$O3X z(013B+v_ju6TiOzZ}BkQo`HqGs=`0DH#7wEfvF<}Y`B;sV44uyTwd%_*ct(wHFoz? z+rhixvqn*B6o*E-Kw#$);2_XyZnqNNv;uh}Jfx!kDI6e-)V~oPVoSU@(N4y8IZ)9* zY-3VHmd+Zv(~5+ggwyr))OT^*=NN6eHIY9bN{c3&#NPi^Wx;wuV>WcjgkNX-km(Ir zgjJFa3Sh0dLzo@$Bn#mC?Vv2~%}g$@%H3M&O>Pd02N`NmDZ(?`~HpTlvI` z>`=nBbZ&~xHL{?v*c+sTHkrfO9;7J7hSj_2pYC--wDph~3|Twige=c)W)aLomH|YR zrh^d%6VKH_JL7_owz3*QMGd>SO*=k5baMi9egv80SBYu8QPBdt+LD_hkh3&13cZCa zVzXCd#ny%C4MH-}_`4@JyUM($h`kj?q}DO!s3vw6F2RyT*Sg@(-gaqT*B`o%J*k-2 zZbLpL(j7G7G@8_z3#q0+xJ)8+>+D)qGC@{F`2xMCHXsbCCyHSYQhp`bxO{>7yK_rw z^;Cc<$+yKKHO)+%M@OpKyB2I##owRL5QGjIRI^~%+lF&u$k=qRX4If*8LzIG5u|bw zZk$t1yAH~#3=nD`cp~9T+3iQ zGzv)tZ|glpya_}6Dp_y3PLRWaY{x<9yi{6U%Jk9PJN$4uq@ z+lAJ9AIx4qv*GtbFaf3L=Ea}IMx ztmN5J6t-r|Bm8m9$+ZxO%dr}dl`+CtKnF2Hr$l0@ftz_AwO{~&z?Bk~Q@z`d4>@kY z$8oT!v8d5;o`+9F(Py$0HA4Xj|Lw2t0tZX96{=BC=obb19vBi1$sIk zj1uHcl!O{t63t70jIpDS79ATSK5^RBz(iV8pqxwqx^3qV}+Ixm>in^Q`B{vG-XNV5C?p86iM< zup`>qD-TxL6K&Kymn{2JAHFqLeC94EHrv4JsUoEWVXp+U9m2ngTFQ};*N<@W>v{0{ zc}+{;bpl5d-$n(_zxVgaOsOQFQ)K5oUNeP4ieE)SgCl?jTxxtd+`raL) zEym?e3yDECkHbkC3MdXPg}jCowrZ_z!wfFafuo;~Q z2BEhmwxVL=U~4&Cl5tn2{4}7oSec@UPEBsObkYQ1ky*8$)j5M z!k?N9FENkUI;)^Wggw@u#o4~Q-bZCMh-NBDmbqd1gB4f!d$ibI+lH+$4!{<17m;6H zV}j86mLBtX;z=?;;WQdI$my6b%Np*-A<=Oj6=Bu{7Bm_8>Z60Wu)gOXaTDSK$qmOc z$oG^=7lpdl`*klq5+~_ayW@dysG}pZS~NLJ9t*CEEQC@&Xy_{5(p^8l!QxPJNt3g)4CiP(vw(Fj|mRV8eP-D(?oBdQa72bxU@omgM6dFXpc~e^uWtIkk z4xjqC+_f@cA!DkoF$cH_kK~wW#Xj9bWz*EephS5VydaZIE}T2TUkPqr?qV{pqq{Zo z)9pA!b=K?{FhL4zT?Qry8J20K?NRJsS_-3mqo*rc1F}K!whygY&=#n7sOQ4mPa?n1 zw#vQcJK0O)86Rz|g!L{UxEUer2ZNg*BD0A6Wy=WT4p_GM%R;TAd~6g3Pf=q9SS$MyE@I5&T;3 z&#oMbWG-vxhX86GR=ozR1*mbe?N%;aSus?D%^bIv@HUtU)4h%l^YE&7`3xLvnWGA3 zZYlV>>jOgw{?KIwt!Byrdn}x4=ZTALy-b6c#Hl^&3a*>z>~GK>`zX1pLW!y~Cqm1j zoIg?8v05ZN9w8HuXH;f5KQ`vVvF@2}A52=X!EZ9ZbmZcBes=iIHYB0XvQ#GhA_-k|ESAm|9s7vz{6a1#lo@E{x zNCcqgwZ2eNY{Qn}k2{ScW%AT7d-vAM6A$x4{yV-$`mxt%e$7aFpw?~@m_8ZHC}@m* zoUBnL%Zx0gG9{v9xJgo73(}H|f2O8Lb0?y%(Uv3Z{J$c;lI$hw_7aa7y@Rt#yDcg- ztn2RW!w5|RYhph-JFI=}DIg1VZosr1(#TgyE>gv^u-ObMrRl^pT-1Ew`uQ*tY^X0m zJ)0tM@UHE}U2Hy4C^TeoJ{oDbb#p>0m)WGzdQ*^>r(6FC=Z(g` z;y;*@a6#%|_9%tSiIN=5b+m26U@kUJDW(3xW!U|}Ck7K%o#9p6(~HQxiA^0Gqn{?< zA)OmFzBA{UPg?hYO@CNdL~?qu^?`y2E*G0~fj8U&8RHT*8)EkZlGA(b(lRzNvo?CJqgAP#k(}Bi-3O$m-!yZ~YQIA^)y}+*vvF~>mE}?1` zHA@=MEtRLasmzju3~J6q^5pNSX@>Hy$1r7p%KiTLgY9o})o1mu1U*jV-XO6yRkOV% z%LPkz%v+m(A3Fr?!KoWLvCU-P2dZErRWaol?*M*^80q-GyX32p&LA@y2c&(j`@>$X zXiA>bwX2kwf>`@yO(!TrSGY%bb8wc>ks5uRbZES)8=X+R9*d z6lRM(taV%(d(obW=Y3g?|1ps#&UE4d-ggMfXNjTQ65^33X>xu@pF@1EP5fq$HIgRV z%nPz2G6j%7N=V4cBP0Y|K1~O?%ZD zyaj&^0wi55GDmw&1F-7ZiFuWla3%>J#Sk0RL08z+t1fV55EfQ1fcAXi(}KoD#zIVu zNA=pC<#yTo#@J_KKv;Ts$tCA7Q`0?GEokpy2Uorn@-BP_9!wpmzILm+cr*p6Y}Cg1 zO@gA75{Lw3nuJqZwW+L_ld-Dy*?`xAjhV>3@@ZbR=3uZ4uu=QzQe?!7W*75px#^_# z#aay9KKiik0tLx~w6g}6R3=OXzRW5!D25-T7`Fz`%7(|%lv$D*tJ>)lzln7|P}F*G z>o$~h)kRPWN^a}fxtQOsbU|D637;Dsaa?5iVW`L|lZovu$yPuhABl6ssjju(^v44< zY30Mkt#2q9Cb#c`HwVSg?S{@PliM6p4bU6p=7OU%5ZLVT+-Gjq7Qrr@aaax-9)~q& z=FFZ9nlnf9os#37FE zl^aj3(#+yo0%=xR&b4bSCmb01A-lOG{}mL9Np#>(H&H!{K2C&($l+BPy8y)fZ!&_# zvb3EdY3q1~W|7vTP^>Y2_Cn$$q?JQz9U}=LYkXtfAYUfTH+#wADddZuxK(5yg+McC zV>u}j!C0nu%#{GzUpZMh?jK6(m7fW+g#;^!TK5AMn)qgRU!OCf3SUu|-wzoWk zaRDH=y4q6L?#|g-WS<3vLn%Q!u|K}uW<1K|EWYL6o8^*2d%FY@zK}*K#$Ni_eb}2` z=S|3=)X?T7Fk(c-a=Fm}gFvu#M25kql|W|u4rP!H+%nuHfN;|w1ml96&)K`VuM7H# zeGdfJRnSuCRT;u5<3S$s&(S`iu zmNBq~EssbZ`cg`-nly1i2)!gyc{0K&7Lrw?{nErLd|T(Lxd1%URu&Gw@ZENTX-=?E z)UXuWY5c4*so?<_uwh$n2CsiJEs$};@|d?c_g65r1z3h`uB3AY5$C1Wa%wG*Qaa@# z)M>M}(!O4Z=wyI8cO}i#iY5R|8$V)yY8|WpwqGNjL7#4FgQv?LZK*GX%UzH&@QYc7 zzIY=caaLsU{Td+7=L=-I2v{0OKV+iI*D1Uf{`irEaO{C(LYg^d4}Kx6o+l3C`Oa=^ zpu_}8pxqO{o{j=uW|gI``Rq~!Jpg;0F7ZizXx8<&m*Tk}8J2-|tVcYma~kx>HmK{d z>zj*aPN-SwxIg0f8jQ+9J)l(>h<}hn`7;GQco<~eUSHnT3i5wGf6aO>lGir9*PS%T zwovICrTA}B=p+fV25wtN+J+ej3x8+6`W4U%0rS)(`vH%$Qe9dvNkUMZOy=M{KEhIY zR0a>_&Q;RVDRRwV=f9G0d-P`KE9vtC=D8Uj)hx<|YBJK)06Ay|r7q9gOEF9eP(7xo zKk3Cy0w8ut^}d~ZEB@}V)ayBhW`cS=vAc`BPWuMD+T6;Oiwo7pg&!(2f)FGuvH65; z+#AskF7PzZ5YkzjYrU8|BNX^4JqkcnNW0q7FzaZp$JEj10WM9kGh~;>?&yzj;r=N2 zBvqbn48GTSFx3m#k3Pglh4fj2X~bV!u_EGG3iF#GL|!syIwu8JS*$eENJ46*^HQLxWT< zk8S8e1cC+%w%z=BP;)aRg{SJh3B{*R#VPxfL_eX%Y*h-xx1Pwd$xUDO*@aO6pJ~60 zF2ZU0TQH5XrHEsJJ*DN{v9NAwUdc!3E@oEC>r%m`%qUmb(#?Hn8ai>!1z|-8>Q^?L zTgfeDr2L+=VYR?qmpQpb+)Sab+lk!e=pkqmpzTG$glFUfaTEa828Tz<9f25`{POEZ z+q}q0`ulophPIuhUQ|&!Rh;gc5o!=s`x~y5ReD^-5VgDUxNvT9KmLQ`GV}!BaD5OBaAj3cVS8_2Zqcm{ov5Em1~ zn3Mu4TAC@wvI?`osIKfpm3LI6HjL_(W}_-7frMfgnjpo)6n*v}PKQ|bM*5wxG5Mi$ zi5W!6CsHSwRHa(JmeEw`OV=xtiW0r)l>jl{5mta4AZBNQR72>oDcIG`ciE;b-Y%Xz z7FE>0VbbZsTsUJVE{NLJk}?{IL0F}YME)^=3SxUxH;AfyX2JQYk|eEv{=q3*yO*jh z0X!edVQIu!0OV7$Erwzfx}X00VOU)M-7#w~oJdzus7I_;XLL8U1rq8X=2$-S=fe`# zU!!yicMrNJ_A%R-1}ontx-=sgn1?L!;jFsKT3-iu5H}N!%wMzn+r(8Z{Kb%oWXB5q|zt zp{_;hlN8n(rwQ+}CI+=!nWnog0B`KM&-5J9i&(+7Bp^(5+Ln%$WY#{)8M;#(Y0YFF zb5U-Ko8O~E+n&OnY17jj^G|BWNnEL<#+$qziAk>11%h%XW zFDe*@`E-&tX`z;wKLk_7hk6GXu`b6CyJ$aoM1+C?-gN@VY*6o2hv7nnpt1|%lM?T0 zfMaR{RpVmtBL7F;FHqX2oDQ*j5uMB=W1;E_>ZH6#;CGJc9&CM&B6OllhnX*(|J!Eyap$@}FCY;)VX z;~U`yPHt{4&Wfugza?fwI0EeFc0T6y{ftYi++QJcd7yu@W9N zmsoj5a%NW~ewT?qv(M}?Hw+{e&7YfxYX7H~Cp$xSVv8fRw-$lhL|@8X!;=IwbwZ|2 z%*N@eV|3IJ{3uZeDd6pA7NOthb%p-~rg&IHIEpk!E*SJgtW?svkytz)l~U!+^nC|V z$RnQR0rAUdwgMlD(lk;@bR@IV(X(GzuXicD>Vy7D?|mhz0Tuly5B9CKArBj6el#o) z380dRb9}Cdid3OeQrkY>wTy1gWQccG10bt47TaVIM{~Tf_X)9qzt(K{S^X8>qSTM( z^Llco=#p-YTuItzdP@!Ta&D=t*C0uZr5=bK8X@BWtXPS-jigbQ{8lG2U}le$;b~1C z*vV9}Fz!SHsnoeq1v65nhE}0}cH!5@WiKdmSch)xQPR()C5aGnHuqs5P8jhkUTmg5 zuc-)Xe*cGFV*_g>=SL~wHfr+#{-~xH z3l(t%b~6wQl0n~s-02YwRF8rBtX^zrOUIFw=SJ=*&h8G%DzX7_rLF_i_SwJ z06>wRbve%zeTv<b1TEcyfI+nzii}u}G?D10=g{sc!gtk8uH3n*`uZ{I?4N25xVA zn)X8ytbJ|;%vvLjUlp4X8#(H|;T%I9jYozqZrbt?>$&T;HiVVZ{}aQV=zcbtJKLbj zhY@50jEOJT+SsjaHDxn3Q9jMxQjapkZ?Kv0huZFga!+&;{uEkgyOznk>F| zi7pg zn=ZTO-bzf=fc^*I$8D+pch22+<#YC*qGY(BpuD?401P0C09mM`*Si@*&@JqEDKTvj zSbncgs`u&AifRSr$^htLSO+E_Lz11@Jq#Ec35gyCM;wWHf|VBH$sS7fv1;Ws(_*$d7eIYLhvWv^L z^*HqMpDmz%roFz@9!8#^6i$UavIW0J6h6$NLeFv~_}fZ67dJ~B-8VE*h+Nh4P|Vi3 zGPcrnz}cO7w|`a~No_m!IK*CLkr?j1XdAckKPH8&#WuAAH#7vhe;zZ`{#Pm37>^hW ztI!l3maxkO)*1(VBqU2oJg6v<4=Y*+M>JuE;=;-%vEWpJs+}UtNN#NX4vj6$D2{8t z7;I0PwtnWJ3PgvOSq%%|pd9tMo$z5ku?Ifi+#Xf#8a4`Zd1fkNDW3aeInk(uOtA-= zI7)L^nYcjxD4#bFwWacFs+k#f0ebj=$i|L$aa)C{Xk_t9oGhn5KajtG;*5Cnb6b^~ z((0SZ>dc_vx3eCvS*hL8P1|THfpr1{c6Bka_?is^6cW06w8_$=4C)GrD_y zRRf^5d5!;`T8*5qEC4!lqPPI{Sd@KKGseN_tPDclvdumvi_itdE+2M#4FoPDJiMnL z5-Lbm!$>W!W53B+^u$>Yr7sApy7woFzD%$ji~%ek$baALE_i1*MG9?l+*}xQ6fSI| z)K-%Xmhk1p!2#f@J^(OT#E0k}C&y*Ts!hVaX-p{HheZB19hSM3aOh~zZSnxQ!O zd5+Rq6}AQa1J?VTuUwQniX~<4?%1@lXs~U`U0=&J5ht*GrhLHg?nKvfoqw;_T4c1Z z@F;7wRirm!(j$Xn*>Q^j)y*k#?+~%&4T>Ag-Zm){BRa+9NtcNicj;+EM^oIUOJP`I zsa~Tx*oPob>TNhgH`eiRVl*)?8FpmbM$@GxBV z$b&k&^M#+^Qtr9(g=|1ewE{GI&AZCC_R<(Bz#}=Ip}qyr&#btAiE6%#82WKrK7o_k zb3#Ffr`dyErnilIZ_SOYR+3CcF89odQQO}GZ#E4GNo?8-*BhbQ4XTdgaJbzjktNBI z#J0Vo@`0o&xxw5p@!u;P*%dl0-dAV!E%z1r{uc>UXESx0(#6D3lKh6h4sN}Vt9v(l z=86xc<73l3O5U<_7rgVO`pihs>{gJ9lrRrrX`hE?^W$djt8zUFh9!0EhwBiD?-#&j zw=1c8)s|NwOvt=#)VJ3C%4C90ua9zA?872%j+%vCE14oZt>qXrx0B+{Ju4Do4_Agf zB&%KwDBS|UZXg^ia z_ZhUh#gkyP!~BQk1I8@Fh+;K9(dv|~b**E{>J2MEC1~ZL-=?xmP`A<1C{S;U;kett za;3@G0}|W#y(A;w2V>7GH^SO%14K9!7fSIUAaCEpjHZ)Kix)N^n9wIWDn}&vK-}(- z<&BE=9U9B+7AnF8bzhXatqBoFuyRTdPM*J^<8+^pl&?JlZHMB=9w$8#(glo#iR38$ z$nxul^|1a!+Iw}POYs8;T0R~Nl}~b=u2rK;UOifzmo{+*&H|8Hbt>TY^y0-19+^`& zO}8%CCZhx!D);*%H2GM7uR)TQUN~=C&yANIyE~H1rfP9C$-BxFNR_(uw|;dh|K_xO zNFm0GUOibfRLW?qO4gblYtuCJ$v`7C@US3lP2wVMRIl3f<9kt74Etr>^C}eCXEL1q>fI zUJ;@nZ7M(=Si0(On)z{K0*^3@D{r({tBYViWcPrBpiI1t!dX33$RY=%=-iH5C=)~e z-TKq;X*O`Lt4m3n>Unjc)fA2;ZSq8=gy{u$upLtb&OUHo(9M;mzRl)4*@0+=DE@E_ zO4T4ihQr9(E_~H?A6~|`vnbX7j}^!0*zFOEcE>MJ_vS!s5<;~nK%k^ZVN7E9?NjUE(dDA)3=94Nm%JiSIKBO8DwlB@ww9aY zBOa6c+lFzO^N2D5P&{RM`TT?TX0-E8Zcxc45TGUA2pM^W!yZhYYJS@{R7R>8v!Hp* zFm106dtVXe*S4y-BRQ~tAz^*6s}d9Td+VGCj1((0Ub1s<3H@y3PLi;0kL~1<*AVb0 zDxRNXz;pGc-jv%ZWziu6a&3c@Kg?U5=4@Bn0xk5^cR;2b>>Y&xK`g2GfL3$B!iG}-BBXl0xT3#LFPk1 zNQHzXIUyH`58lB4OjMMH_Aj-ur$(PDd{le>3HK0R$Sk`D-Be-NdxOLe0 zq7&qoNQ3-!A4Dv@LNA3m-r2mo58=YW&gVfgI~}~_$6__yoSJI#H0Gi0PC8)ysHVnvu8Dzl#!4-4zyCl`L0iy>HX*ot;0 zIeLR5p1Z`Z$;eXR_1^07`9c|&p#ToCh$HC$*WdPQoScdzf$O}?x}SiY<@(t#b-h|i zCObl1rN44^|G#S-7|X-tCJ_@wG+#pParY!?S&UHD!*ku=IsEyQg`9z(#T9szUj&HU zrzG?NA?e0D`KPqu@jX;-?raXRkFGu^5k($OtJJ@c(vbW%&|xH?!aukLgmLlz|6E0w zZTd42JC`387c&0uVX?uhrW%SISzp8{vd#H(d?fq5-1{#(_y583d{*9~U2YUZ(x z^UuSarRV@zSt>}e7<*riJ~Ll$Odw~O^fSeo19sk$QXSJ0s4k223S)sR_)8?ZpPbmh z`gw;ZMaH>7<{l*s-7dQ=H9NV6y_IaUl;mL_SEI;Ar|cGpFnrxzfr?c~=> zUhJrIWS#L)Iv==RHBF7UUSP6!E+i<{EH`Kfl6L z(5pF1k0GY$Q2bLX!}_@G%zt`Yn@q%d;%sIVVm@2A=K-1CzoA%h;{ge79%_})I>FlJ zDf+Xjl_watXPnlHlcD25bT#rcW$FO%V_;NInB3uImq>!rS9?oIXEm zWXl6m0ErYnfGC7C3ZV9{wErx!^XWuA+T`E?ZdBymj9CzEoR{rRL?ooc9Hx`NdWh+n zyWMC`MqptA(MKT0DFNSgIL(Sbj4Mm8TYOX{V?s3mM_{JYB9~o4CIfAS{InfswCeLn zjX_*w_q|^yz&8hNQO5UwW;65@F7x@mZ!e-98>cuR;ZRqt$U^t$?O`*DKF_Wjc^0}5fsXu*582O63cE~eKqp(7rYGN4G5L;v$YiV;I z^Fc*aH0yOX>zw$kFV!|Vbq9RKENj&MUhh^{rpFucM1TEx>TRC#ri&1VO7^EM!u3l7 zQo*S(TE-=}pfff29kNKzmYdKvI8pf05jb%;#6i!yY&qdu%j&<2X8^UDY?HpmG5);P z<8#vYFBlTKNY2GnjX$E`8RPt>*CjVNGiV}%J7Opd9c1Llcei(H__kk$LSdMm(z;LP zj(pGBY`P#`E!t)$i^X3DWH@OMQJR%I`V7%Epc=JL3KB1qS^VJ20lr~t?U8A`D7z^_ zWaCyP*YQsv1_x|reVEAngzsjUr4uOsW;2u?@_?OF1{KWABrxP#VeGP1DucYmOCO4K z&Ev;SH=tK`u5OCjD@RygpFJ*f(qL^ywH}hNbUam?V|xi7f`HlGf$FKc)y}8Wfs{+< zP4d%voNH)=v-<-J;p6ucfyjB@v!?|q0w2Lv{;&jXtuWH7R%MS<3ag{GMNoe$$i1o^ zq#GH&ip)0cnjve&K90amqIR*7il@&fbj-Hr5+riH4Zvy#jJ~5+6QWl`!>-!UDjGp@ zEVfO-l=J;uF^XkybI!R`$vhJ71akrFJn$>|{>Ag`fjA>|fq*}^zng528zM4~Nr$|- zU3`hYuUkISma|QnC&RsjGNSr_0095rd972HS6Lc$4i6 zE85?i?n1(@n%D0=04zN$GW3S*dbt?y-JXXSrRUdnNF>#Q)!ML!ZxwE?jg-cu!CnOw z**5KX0#af2oq1daVM2+0rn^Lg zvl;jD7=)iByN5Gl6_hV+yBEA~ReICot~vVazu?gaqy&u(r zZulGL@KgEuF$slx>suA5_X5g{%|R4j^5KmFaviQ|b%-M0XD5byl;VixVkcg@`Pf2! zqdOMS#5ICT9x$n^M#<~}e0{+R3h10JjINRJD_Rvqyx;n*?&}Rip|-{oKKbBUKc*92 zk+RxxkFB0_VoT`twsq(wnU?zeay!WK^>p;>BpiOo-*tv$U(Mv}y$wVZSLf7f1l!>} zb#B=Eu$O*)*Uj$iSNg~r(PSkVIG2!(I;M?>u%J+Y)%Jf0cJ50-pQj>*v%c_T<(ST3 zb1>Nll`I!hXd9vhEH=Ch)YJsI9KhaYO+aa43m-B2np#&U3H%xr?ynR}A)NbsZ|MOY z2`6;|CG=RDs2N*^#VXSLS|SGPdW(j%RVDg&$;!FO71#GjbeRvYwEN3gxHsDdeg*fQ zwW|0aDykh)`s7uh?m#TMU#HkyD7ETZf?XEc_Xhacc#HVw8r@n06^t-YZG61^3MWAM z-a^>#eskFM)+YhNlBf9QRGd1sFJ^rc>H9sg-rXWi?BIrzaNFSo(EKLTSai|u=S=AUa6mls^ftlV?f<$sucKK+PozEp{UhNQY^3UkseY`joPTD6tgRjfHbW8 zGkji*wAU*ONd`lafZ%+>g~Z*1M>=#xaw9xa3EULr!o&p8ivh>QuXmUj*?!OVnKL_Y zW9Hp2ABt;P^BRNsYE!wi_9m{~tFOw6TO9ZE&c@m~yKwyE5k)CXxpNJ)*(!uC?d>EM z`4U&>GBI)L^^2-e%uEEYTAAGlbJSVgn1?!M#=hhrMg?`|36H28d=FgMCWi55iANvV zOUlsriApP_?S~3ceX4>39$^13g?jMXNxFO`5Z}=ddR)<`+~9I!;2UE6}5V>=Q+UIK)f8N=G`K`{Pz6ig3Hf9O6cS(OF& zyDqo2tXFvg9Oa_nTMT;b=}Ye1QA){yXkvpN^DkF?*|dyx9fxxM6;U-R8Jlnd)F;dK zi`&{i`>Jw{-X{MsZj!{Z1i_PoCDS+}@sH&?EX=M0ZQ*q88NLyr(eWCtZc(@(?oZxu zMluo#DbM|(S8f9AE-@%)*$`6?5@`2W$FGb%63*o;<)L|(=_Yr9LtDMX8k2ubT=_S! z&8usmhJw+|F;q}>o)7ZRb`a%7Evj!8Dp$8aTJFGIehd?m5UwaF?8Lfx>2P;CR;00U znmzzz(@V8lwa$qL(jiH`7*KK%?Q&jp(b1rcfNCmK7_u8bxiK>w%h;PE6WKjL{@*l< zAS8$?_RZaDsD5UE#Vn_3^xH2umk#hxaOE0_A(b0(z?4AbelS1DQArSV`tG z8IglkI&VQE$v&@n5OnHY*Z?owDP3zypj+1pc(Or&&qvDVFW7l@0Muu78afrgKMEhX zhWaV=%4FFveH`N-C)PaEkQKRw`{(^H>vK`fC@+)NV8ABbgv7h z{TFk+fqAqDB4@V%GlQYfQr#gf0@nViXedAL_a8_oN9^^#V_(8zYj}7k4t~u9<%x1M zN3pFS0$|EWKy$Hbo}o>k@CRXBPb6jO773%H)?k$Oza&L;30JG*ZpvH-IzyzS-dF$O zdQ?lK@Z!>kNf(}~ciKuljT-{*c==}W)`MeXYXIU7ma(^adcBryon~6KrTgA7*hCTX z@v1e18!2g}0|c5>K10Ur5Q# zl0OQF1vz-4l?YxXkb!$!e6j_z$7*(smyfI4b<7fS{?(S-FL$yxg(kaJV~{y|N&+yF zwV%eWb4Y?+65rYH1YNKGSIbIDt9@q(J+oHIHGp_(W@Q+eqgDtA9gs&h$$PNJSuV*% z_&k=aa?Q~ry)Ck{s-GcE?-lAh{pT^v@SGTFV4)Ls7y9}rB*)36)>7GQ?NP3 z__5Q4kLBnLzCmU15dn0PPPf)@J4!(dFsz9W^;Edow=B884_UM(w9LY)GT<%fpH(+c?=}S_JK=Qv$m%7t6M@Jd(Ra)=Ek~} z(zh#ltl6lD)k>VZXt$ZC3NVtW6$@&Bw^xRTPut&wN4AK#FGOZW1b%_6*3!Ct-=;$<`Cx2lFpF%9`c@ibLik>d8@~; z(z(D3Vf_JNm|EYfEwt`i@~B2{rn_rffH0>Yl#1QI z&2r*A>>Hr&8HzInkg>FxsQ!Ko8sr}yz(yQN1Yda!3ZoV)7y~XrEKET%6{7Au7YVS? zCVX3$GY*;P5Z7!Mo<)+J7!ts&Zmz#lxR4mSe$iE&x11e^2OJVOCTG42upKPizPbs3-f+HoCF>4zfF z^lQh9U3{cr6+S5#r}1~mI9gBjK}3EM5>qHO3fb7^sGGCKyBTxBAHQXKQ<)eEp#dQd zWYO>mf}Z@~jxs0d*#U>5oZH4fsUnAF5ShOm+`y&7wQMz7W-GX6eMj%s!gc1MF2R*y zS7e@@Ia*unwYDNUK@G~Zk|pElEf;sRH4uw4v|M38&@cAQ8c~zkPEt?Sma-{@G?cUn zJF=!Sfk*|#l4!|f+B12C{DcEGfHCC-nNCKXMez))o7BTYp!Qz7jGDLVYvYz5ijsPQ zV8IJzCW-pvB%I^g*$~w|BmOgMmJ1okJSL@wace`87N^ehl=8OM+WJ^u`XIkC#w$!G zW{KSWuS>lGbBHyzM-RFwPCNA=+XUki@8ciPz~>4hP^nYg zlBL6aB5BQs$H2HB61map*|1iUUX=H0O{H%>*R&Pl`%{Z*aM@~UOTQ5*w#Y#29^k%e z@c*z2HW>LCkBwK`&7WU_FwS^`KA#ioPnJW}duif_v_WI{=v5g4$FB>1q|lNcpRao> z?0XntuR6dR!3}*T3LzPfB4*orF>Bz7z|82s2j~%QT%b`&h6D8fvXKPN`=(i0=qd~tA0c({@&d`0Z$_-s6}W0y z3NW};4M8n@!h;mXxZBbWDPjhyZlwx{(?EIsS*D)6)+nJE#2V)2iH1N5LFu){ z2L&1uBZBR>Ausla);fQ*P@>$~dRS!&NMAB33+*Y7sqm$OvOQa~=pi!Pn29mRTK(JAEBcqbzB#_(XS#@mg6HKIDD|#_nh4{ z{4M`a4yqA|`Z_IMgG^kXmP&F_Pf77M%xF833Pi;hcShH5bvKFC$@L{MeU;u?GGI9ai-h^Tdl zDc^7oPZHG$b_j+zfT>H>wZA52IbAQ8O6y%2*>;5hYH^8u4K$t(37HxHA~$+jUbK@LRl*6e17} z{gS4cx~k2`faUn%ZYE~aD;4Vs=o4DfqI=7LOE5T-Xex8Hi46h4ss8uVd2daNmmU;bFC`;({@`bOO|6Q5lV|_$e!WxwW&dK< zCZTgk6Zutof9vi0LQs5DCU#|-61hdj-R{dx*q6uH%0f%O+FLoV_OJ(dSaT<(Fm{_tCNOho9xc`GQ)i}|k44r@fF(HwZj}U(ptpeZ< zazjZ6%5x14D&$}X(SS>3YK9)-UGu_Rc6_#seJ9@1hx1y@NCQ6LCFHW;rUWzdt6hGW z@jTG(M%r#Y?0nAAJUPieuuZ@DEK{KekA!o)xke3-gnM1!Q9QFQ>dx>O_xRVn%#^jh5MX2~nR*7P7r8?u$2Zd0}INq)>!>}!JfWmBAUey4M1f=)gbmziWGb)i6?N0~Zuyrks^4O_4Qah%jQ5pFbh%1!bN0qf^ zCxy2UlJXjLLSEe7`Tq?(Nvs=Eh~0?ZVV&Z=@rHTbt;?Qd!07h%9W3B^rNcJJ!AVWr z=|Z$<035P>+QJEax!69)_?E)T6d$Whw1GMNfctZ#at6U#osWN=%eX0R2C4Ltepc;~ ze<%y7MNF%j^oLFZg8LTuxfhq>*`JbOa2qd>0K5Mp)r%S41%zWfZ-!EllsDfYq|=|* z@~*uB&M^q8Tj5dO--Kn()NtY_%Ruzvy79wjLGLm_H#O_BB*f+aStU&@t3%)8&}eKX zOPElkfzbQPq63}Rk?JZ25BN*peeT?r#-AeT>ji}@yh|)|XllwY#=PB%B%G$sVL;Xg za{?S7x>R!>q2%g>M}K=B9LW2#%;>NVuUb64a91IxG_{8MKE*!u{y zAiw>{)S#YVTHJ4=O|SnN1e8WjqLr$E-xB{$^kziqqfLcV1ZrVN4)E3m*9eC>fu0*D67{IOBhvH zhCVTpyqIP|ron9pYqV00%b0TaHU{brcQAO3OW-ps7;)JCX93MCa$ISNi-zd)W7jX= zUeoH%ErLgJXspYtL2TgavuZvu;H}T`8!ML`4+jKIaN>_4#*$!~F}zI9*QCswL!*u! z%kk>lWwww97-{>y7Q#R{-8<|G-us7}8ZwS!$qz#;8G=FLl1JFACQl?eT?$nMi8OMLJmYM6nT>_1uiL zgGR>?wldWH-2EV{6KBGfaRivcxV&qQ7l7h>0|`9>};eGhO}P$`RE! zxpYYrf{V}_#Kb9zL4>{zGwywvX0>600`sNkP&_EW9VcdVg4h10xybwq$YxHCN`G$R zDM_4Z^B36lwN$Fc01iKEqYB4r(*BEC%d!LxlXpJ49`+*M6fzK-6!X;lyctA}KyYv$ z#Mm4*rrkr^SOYa4O`&I-1(ZhBrcs-i;{qQw~==dxl;`4~cPp zCc~95w^wHNgR+hBH0)lWBGJ0czf1WQhWD3F!4}?k?(1yFd3TGqWV%~DAdk~)yxUGs zZh%MQ7fy@@JtCv~T*qNyxnv=X==;Xwhx?>x%F;_|DTJb<8k|Y8%Pe|o9Bh3FqpZiF z=gCCIq}g<+yDO04s2l0^Z_X^{DvX{e-W32*GTS^9*^i=F*oMXHmdvuX!Wy{BiNNLk zXXOb9^5Z)t@H`hQ;<^yd#eJy1=fKulAEZZ%OliURodP&UIY2zMQy}Rr&b{YR z+UnXjAKzLRHz|LTB-#0-E1e9_7+1~J!BWOrskU_5bpQgM1*X;NL#Dv)$2uBzlIL-! zWrla8+Xoatw5{*o)`d%mamy&)V@@S!IYi%x+ieiFc7(K%bMVyq(c6tRote2L8m{p@ zEeFl?Q0&nn7d8|pb&`HvUSqq zW+njtKLEh<+>7?+A3^26Uf0KF2%yKqBFZ@t#A0XW3uTXsVPo59L+)~4;@nk~6B|pn zm$V{h;_k%luIs3G%xZzB?W18LEZqbs95u9$s0PYE-iwS{h+1Z^918>VJWEEwihd||D- z3(BsqTXMjekRImHf8{+N_NwgaY@n;KfbDzLB&g($*~okTBrV=1t^cqV?i zGxvK-#`vQLC)|8&ak_&MJmH+qgRDk!n%5I()#aHIs#?;f+LWJ>@nK5Jx`+41DBQ!a`D0p#4&4NyWtR;zp;uaWVii%ErlZVb(Z2@K z42H#oDHKAa$l0cS@S5{Km-p_-THc1ED)w=aMW#;kt1WN%J4ff#405tN#kUtkBd?j? z0)@!q0yc3wRl-eZkWB=>NpE{-ZCs=+0k~5l zQbo?!FOXtIRU;bl+!Jcu-T-T-TOfEa*be5F?`xp}vla#2VA~-3`*TaMc&%_LXj~|e z7=W7Js=bAzbF?1lm@C!1rjIng9_fWbiA3qJ4a8->U+q{(fkYPq?fO3}bm{Hrv{7qx zm1@8pUOOw!y}?W>V^=44@)|6!XFpUbo%PMX5%X$gZUVjI5;Ptx{q2zH<}cPzHy>C3 z1Ng^-gq<>RsB&#b9w_}D$#2ho>Rs}kXv=h++#e`eWB}j-O)Vo3B+Djv#O<7V_!t9hw+W#ocDyRl?a#85uth}3>H;3=k`A0*wHWqJT>_Ls( z4s|$NZyh971(UoNfu%;*vM!15rlJ^i(o)xlk^WwCw*g|#NoPh4LWoju3K2KkTd{*Y z_kNh4JzZ);joazo`f{>SIS5XuH#Skq9Svj8T6HgRoYV16_hxwwZO}f!B|?Xh7~}8v zY5#OXR>9(~GqPJUt?o|WaA7b{5?Z8r+htAp20Z`FkZfpZinXoyjlr{vyg2FVoiQA* zMsX_ziQDGAlj3I-!xNH-aB}OkGhNI7Ob2^Vvf>Vl;%ju!cIX=mj}omSA^bQ=ENwW+ z6x~O-xG3a^{nC+W@ykG6Hd$2Ek>}Wyu~OUs9BxEemMc{vYk2JZ8fWs+f=vFWO75i` z@4FJWo|&>X^O-;FvU%~Lc7{g*#N`)mcf91cdt9_b$FZ&q65A!+Bolbj=Yzg+Dk2F9 zcrNthE$D1$Wvq*)>=uAdJ&B}ch>JwuS%KKgTNmCW`I?qmef1}i5>ARla?PET5jY!- zcUJ%)jLVjMDK`8zn{9jEy+n9#5}9nrV?PUSnM-nFL_6tn7b5HorWv}=#RNsaR@Ive zIKuebq3ZTUnRcDNGIr$*NEwQrJnxOuhn0n|6&sG#J_vU~rw63ZLaulZ%IdSY_zcWXRiM-Jo3|`Oh(|Z75obn^3gonbwe8ffoa_v~ok8J`@XFY?+1D= zM_Y}FCoRIU{-KNNxulqUOnk~Jp~2qwYuvP(-gZga@a@D@)+}s2G@_+9d#{?;Sp542&B^5WXJq49!w7@N-N>Meg3S6~74+sYp__=ZgG;o=iRLA2 z>|;K{QKT1AeS)l+$Zo(RgB_W;FdmOH`)bMRgw2rNWbc{0PMjFkan%jDN8^Rzya?zMoaIHO0!|1gF!ae^RvA@PKX ziV^M@*jXXgE0R26X@}>+Cd?d(&QS0X=sz=4x1thGO;$KgGaCc~ZL>u8(oG<5W1xv& z#jYj31dY!#8+8gD^A&6?!5~ld zbmRmRL(;%Ce8!bQyy%`wf??m-*W`J>fO_(D3vV_HAqjwjSo$MclaU(SZ^-I=~KY+j1 z0!Wmu-=f)uT$`VnBUL({EtxXUv*lDngosnHQqcbYo9@;7sXbUp>BZsC99XYUw6;^m z=}aYYG0+Aycqosix%%TmFfoR;+LrD>5`g`GDZL4q13O}EVV~Iil`{0u;mN#h&nzXM zWGG2CIC8vo7D!u#oE7+?^EGRsLDcF*K0><;#y7Sw*)`_-njY4~)y#`5*+vW0{;<{| zpsuGke#T-r6cUELuk!Q_o%IC}b4{mpaRTWKAz{*9tQex#GgySX5iLI9{Q{(Y$5Z`^aLrp+_k4;l+Ka2#yLxWCL|sZVV(1m-J;xyqPCUbO$Obs)e) z2_`C;S7~IXd`~3z%|cuBAqxu6n+upEar%h^0_wP}pxR^*Hn1*~`T!A!8_%yK1alJ?OEr;aYKwzbx(Q|4Vod9+2< z*bei)*Zaq3h{z7eyj1qi2_M?pL=AYi)a=wA{tsW87FbWE3HSu1$NVu));nhG8si8T z7MqkPmho({Dw?t^u4yk4)FK1DfPAaCWjizHW_0&+A7oO)w&7H1P2*9bpeV|CQd+1i zmM>rw6LbN!4ROd$!%p)>>DT5j4rpXPMyAmwzN>eYDP^Nvm>$EnVNAH)5laFy7rk4HPCN_iH2z0$xg5izBhO*v(#J_p1;M8ti zlR6K@XiG8x5b9IJ2;3v_3M8jGC7qV^jl{rtMhwl?FhM}?zt8-|5ZSK<88h5u1Ge<9 z`~a@hBgYh?6Fe;)LXHzykSC7|j6#LN;tA~ijWfDCK&gj>_+F>fgt|LsKi`($^qms` zlcZv@icFA&9DpPKINGT;DQVaF2U*;>IatqfF-5_}2-nssZOt(GlvVh_(=DvYs=7d`7Q^}338jeB zAe73w)lD39%r2pcQir@f8r(3Fbipzs0hwX0=xr@nC-ki*enwB@jS|UBWh0ZZ1x#Ns z3rom02=2+aRJ@U+Uq`3j!tLfk2IaTvfyA0#&&;p=J)1I%fdE<>)ZNy!EJ3U_W( z=I+zh)gB}SQ3QSc+dJMh7>ApUGyUFRmb#k9-(tWDGNSRXZ+6)N?&o%;C{^NPvPz^e z(h;^uE2xZ%@X*U{+?E9`)mF^ZiTT(j8eP2%ncL7~uNmshg0ApO37y^GUxg`R>5-x) z8vBBpqg+c;X!LxcZw($o*UNTG0st%3_4f67c3VK0OuR}7{>OLveB%q4qdP7^1ehTlbyrw7As3#udK844q z8#s@?PB_|j#ZDLI!Oh$`YBO@^78a=Q_5aAnIk~vHlO6gnvk3&S!ZH;e!QCUWHbq!f zO!s#EKK;iVANFiKEia~m#-q=@Ty!}CbH$DUEHOG7Lv4-*ClRYEC<-)l=AGCErbFw| zJUa{|-tL@zaOy5NxinE#@lSy0>JD;QHBmm?@rM`(628_^U)8x9xkNE^rJ2x;%L za$C2*#1VAlM|QS}(F-^x3_YwlQ;yBIoF*;dhGyojy41J!^3%c*gNP47gd{{^_6p7K zV{SFK2IXI3{!1fIBoJ46%{%=c)M63#t2Yejz^`Epf4p^TmHyNi^mwQ8fYfE_l`Ak3 zsKO4Nlrid|f*Hb2EyN2|n2AFxWXD)}ix)X~5CM zrW)V<&DxbBY^(%p-*_hI^~}P1tRsqLiI)fiT6lhDCg<5@tMz;$5fKU?#t&`Uc4-fTN{)Mm3_LHfX z5J;jEJl8`gh2ee!KmN_|nfEzVclb)ROi@#1T7!==QgiGP11T=B;mdq$FPmQs-gGl} z`d1f#WOsl0DZTo9>LZol0I|!l-$c>SwI1@+!nTz^uqC|v*UC1*-wJXa za-kHwhAmcSkj+XUMtM1+7w<4A;wRzgCR1=84G*eVNT+U#|L8;q;hXGNhNzWwN3Y(v zJ0ZfPka5y#J>=lS-;0wn=S=#yVSL6!d51iLi53C{h0XDg5n zBKU9~5#04oW9kyhHd!N?>a^ctM_QZIB_oMfG@4Gd1dG1qSz%HYT8e!QfiR@T< z{lHUb&#e8jur~?RLuT9oH{%pmh!H4`@jnZ~h~_U~;9ECpRr}PZzzrU=Z1jX>t>?RB z_}*8?T-h$|XcVa)PWcCAZlgv;S;&}g;!8`TGh#2j_QwdlzdEbPvlJiJ!>$+4_^3-n zPBA}3_#QoMwPaz}iFWS@YJWOOU%X&a{q#5hl}M3%XW2w+4q~%lf_S#t#X*V7nTlA?b<0Q=n5p=b+;QX z5*fW<<~SnfR||2f>@Au9$6w#pP6i-_ZD8BHibPu_HzRo}F!F;w6n0yjf%M39+ECdz zJLT9HF!v@Wqf=16PzdWS+x4lr0J*AeQkri`Erb}P>R0$wJmob5{M|D7wNsBfWAuhr z-Y9I_eMiOZXYGm9Cf20e+`a80#wI^dF~}nq=dsIIK*eFyk~|EkD~IBch$lsIwyiE` zpF(ljlueoUW^UcFR_LbQ%X{#6KQQ>_H?(Ib?5$%EFyRs~Td*y*it{E@JD^J*>@YiU zZXG`4=TGk4+8+^fI<$NXVhe->TS1iYs3!RW4O;hnrynIT&#|d(wNVPGO6Tb;rfOUe zd-KN$NBv-2oN16FRaC&h{A81?3YK;4Tk1v==xFkBzdl`mhGeg8Q^ZH*?Tq zwfOabQLjPHFVM}W>TO%UPN|*eCPWS6^ALF`J>Y_>(AaX88;97SqiOvq}2w zozMlZQrO7XR$ND+w3W6$CGsI$osA8&_rw6|?8M*p=Paixbm4HaKf5;~wlbl+ub%`{ z%IbSGy~5xb=vY<4+NI<}l$|o&9&ZV7lq8mXfVO3o)%YnU6K8}%NQPO&1pSq>D)>Ol zW~Z#>X&zsxen|wIlzj^!GqAo=l=m-h!ga~6)KL<b0c&E{K=(x_4 zVsdXxR7$KO>L=ui%SKBX9#t>y?Z1!kxoc;82lDjN{Fa;W4Sh+ELj90RnoVwdk&+AF zda=K=(hLT$87lC+1p*|a;t3qk5e{ZN`PUXw2KbKza6y9$J>8__md_m^|B}yuOYUOc zn(+f!CQ5m+YTiAZ_(w3U3r*VIc4+`*t2n`~>Wo0a;>jpkGTbY∨z5X4#-fXgXiN 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\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc 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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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 dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/17176/0d89ed8d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 14.09.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 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: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\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="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +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=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes 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=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/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.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.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 +/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 servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes 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=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +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=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 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=2ip.ru list=Test +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 comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=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 comment=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 disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 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=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru 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 UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +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=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +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" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes 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 \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + 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" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" 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="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/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 route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/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="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +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 packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/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=time.google.com +/system scheduler +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=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260927/20260927032002-Diff-Config.rsc b/MikroMaster/history/20260927/20260927032002-Diff-Config.rsc new file mode 100644 index 0000000..f1b621c --- /dev/null +++ b/MikroMaster/history/20260927/20260927032002-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5180/20-Ceee/ac/P(20dBm), SSID: vados5g, local forwarding +--- +> # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding -- 2.52.0