From fb65b94ef425b446e99ed5def7fb2964f054053c Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 6 May 2026 14:00:23 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 06 14:00:23. --- .../20260506/20260506140002-Binary.backup | Bin 0 -> 279058 bytes .../20260506/20260506140002-Config.rsc | 4677 +++++++++++++++++ .../20260506/20260506140002-Diff-Config.rsc | 4 + 3 files changed, 4681 insertions(+) create mode 100644 MikroMaster/20260506/20260506140002-Binary.backup create mode 100644 MikroMaster/20260506/20260506140002-Config.rsc create mode 100644 MikroMaster/history/20260506/20260506140002-Diff-Config.rsc diff --git a/MikroMaster/20260506/20260506140002-Binary.backup b/MikroMaster/20260506/20260506140002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..22b3832014a15c6891713d1200f1133f341f2771 GIT binary patch literal 279058 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®*nGo~%q7D}+}gaHn0Gi_z_# z#ae_`zLsUH69?LcMMLE#Jn02pQFnqA0SMf)hzMN*Nht5StN*9gzTW$;a~9hMD!FrC zln+D3AX=c7ziBKKKBcn7ID}V>R5%W9SoFifvw5w_V@MnJcE7ux|{Ty^QwU8A|6HSmv0 zHyt}2Hdo;fdWx~tr&yI^nPO|GZCN)lEqn5S8#e0CQ;q2nu07h8Ys64>)OPZ7E;Y@} zb$gHV&n zZ5hnH&KbQ@X~QL}%M12vt5l8h(#c(u#OK_rBUOaBSqa|tX&@$Yk z#y9}iee?zQe6Qb0?)%}B2~#pR0XuDhG{L8nSx8mxXEJr!f}g`a2X92-r}h*#pd#8T za{X*maMvXKgrDKA`@83?gxLD5SG0Ak$E9me{gU-U#KQUx^$O3#yaug$h$dKQIJ-q< z4YG9@w#ja$eIQDlnVMxiTSmbk!^A$_eGf)YEjsM(K&#ukPG|_3aYAe>JsodZ4!ajF zf#Z2imOkCMNsXX440BDu6~r~mjco9TQ9rrj^M|j;*!*vt`)4yBjgaXc>W#a3$%<2y zOq+V^`Ccg!^SOhSO2vl%omUjrkgEKZHEWALQeSPh^+59xFYhTi%M#y9F9V5GXTngc zzPD}t0sL<=D=tq}y@GArRvd>4@w#`lBo=!4U9xJPrj&+D{PE^C74b;H&|v$%{3sqS zpKQYPUhFg=)W#M^7K#r5S0Gk%zo`^r*-k~GNHJ4@o_OSk?7PRq(FIY;LR4)cs<_WM zc12$tG{UPk)tKAX`fAfDz6|e!5U)+U<9#H_u$ECuVJ5U@9KXG&vKcu!{0C$c znqs+>qO1C?iQ0i&B^6*NHNc`{!MUrXJkc>#FcdEzFlO;SHiqgh+K2s zHzYyV!Z0*G$DYsq3K2#(8ibQLD38$wYU?4t_TuOxLM=Ui@ho_w6sFWkp(U83wljw4nO=A+zw!BU9SI^%|vUNwTH_62r4E3qX8CZy#vhJcw}*5 ze?e>h`7Fjb3&M{M!d;Hw_yu;^T4MUOw-9eaa#@TVHA9Say=Y|tGI6ew@E`*%$Nheo zP)-H5LNcbe+@D4U>_E@vwHheW5_>35E6}7~fg+T$b#QBC+h8z^%J&OKKbLReL8sf9 z--Yo^zx8pFqJ(DxnGpaP+Dus#&(0qP82VtizUQO*WwQ7Eq0lVLC-lh=3Wrnh{=9GC zI=v4u?ytSx4cG(0m8YOp;#?F1s-V&*mij1(}lIC@;S z&046UX9DeQT`}Z&LA^-PT$?djce=8x^aWegV4o&78Vm_j?+$5L%*hdQ^d4{jQ{uzf zwv%G&X9BJwU{M{J5~H2!Xok+QmK~y0_}@xBH;rO)(>-dB|1@#GD9a5*kM%oN|7&t{ z=Rrpe(m z@68!lWzJ(xAO=2=0i8`L3O>~imb8HqwKrcd>@f%}Rx6le_Q6ofJbDa%ToQqz8hdRL zT0#^aoHW^<+RpY_-HtXMyMBV^PD~2$MbrPM4vo(Jka}2JosaXNSUWBf%mEV-XoS8U z+CQsj&qtjnbH*6jz!l}|kipFGb|B~LkEOFE?m-ZXcBRRLruD^iaiUj<82j8^6VBz! zB!-uSCJ!zs;p4uAo z6c^K$OK^Jo$f9ZuO}GZgtg_=jN}$0cLWW5^aW>#1V#X?R z#E>x!CHEIKOy&3v8VIBv{gzSSGV@S@YfNXH9OgR^6XClJ_91+y3W>>q9Of}~w_7F1 zM=wn>~Y}#SJQLN|1oCML+9K9hzxx2vJYAEg-Q;s7efDGXGqMcMa48m zAwK)Exl)X98le|10h1wt!?i#cV+U-V_%GaDxLpAd{5xJr^S4Z4DjM%_-wrc z77{@mCKgS>3~$?r+=^?^8LYM!(hXMD*3>%>r%aX}@~rtp(EySA71mMTJ-k?0!W+cy z#|)}KR`jJC#3jU3Ayr{j7ecVHAXW0Mzi|@9L`y!pR4Vv~;>QZCL%bvZcXpphmyXjD z`_+?MijCvVA~(An5!TOP>8}%qZobO?_aFUlKWI>5!_OrNB8Jl_y45(xy6j-4?Ib# zKsr#SooF}B?fa2?m8`YUxT*q`#H@F*1{Xg!X_1uUPP#Q;tnVYH5&Z%7e2mrpV;a5A zL9y-%%mg%Uc@l~v&al^f;O-=d0V0-`9?30E~nRhM&xU;$aFb|Y4TiAF8EcW%&dd1(#KCw3N1<6viN6BJ-AUNS2t+=jJ zu_!*2j;-u}b@_B@XBoDHU^0$|H;qnR(%Qyw(l-VSG_@Xp4q zy{b&t!Hy22J2&oYidA;()yq>p3#%`D3io9_%aBO)dEs63z+!RPqgha01+D-rbY5Xe zgRfLJBaxZ^sEWO(U1Mg@NqGPnkJKALUm{Il%=8w@v6`vE!%@{RX=Rm0C$?_5?S;!n zDAD;s1Jww1 zL>gxICrQCi@!V3aAX?lCLdF6L$kt;goxTowD~;7x-gO>(iA~JOS6mETW(=k{zV zpd!YVu8&2pz4}~>wjbAl=rJhG^mnJRc$>F`R8&)S_)OsYyzQ%+=HxQ;+Q8Un|3*nrj_xktYSI`Wt!C}!<)r#E# zXamgoCT`%@hxl0N5pAvcEy^+e9zPmhxkx92^yrvsovIZSi&C8;d^Z7Bm6Ls|i%{K5 zyoof))&eDqFZq9EmlgsH{@u#0NgBf>Ia5qu)(dsBe($fZit1JeFPPI#IqR`u@Bn{5 zOOtf)f6DXJ3^Jb0+U^*_UYKkC!bS3ckK3!5j7YTmwKvE2sybj$IGgM4H0!&c>6Wgb z(A3*Drd-P*|KmCQt+C#}1INK0O$&#Yq4gAy|4#`q#e76)uP6a=z7&DeVS*cjTIMmO zDZ=m83LtiCq-XjBS)tcatT#AVSKTR4sLC(>L=Lvu{HpW(R6kAFv0C)Ci539dj5r%C z=5U|w&di)@Sq;ME**Lp7mz)RPl4~j_)_)*QCl#(eh05Re7I(&vOy0?RH<|ip(eczP z=ycpJ%?HnsM&ZH^NxE=zt3!b5Li9SLkqSeA0ygo(i(rTsw#R4m9H8CK08jnd zYRQ;ElM&J>ujkYFFpc-@_`7kBaYu68gjBVoI+$3WKT9ddC#7?gDmi0$k_;JnY9mZn zCPUUqpU54z70pRaL9(-gKW6H$=I-ZtcLDCFtN08F#l%{V$SJj|RA$r2fxR(hP_UY# zm=ANT>`jEP#ZNo#15;D8#+HQ@4&!BD0e56_h2rml>C&}CEz?!=8zUp;1C(4<@SwQHpx$I2%1^earxBt2 zB>KnrJVW2Z)b6^YCzL~hR@r0TT^UJ0HgcC~01zpDRfC8X3SwESY$I5Lp=OwMzIUNK zUei!=cS8xGgBDb=#Nj`Cj_4xXLjBoXma3 zO)P$XE=eU?-|<0d2k7fU(y)*0>`(rn;0Q_6Hq#_;8e!=$J3`^K9Rc6Z9j7QaxI@Jq zM%8)PLrK)5`H2CeSqNRChc>*21#Jf=F4olcG7$j4A?^~k zHNvByI%HK{n^zKaI3HG7NCeGuS7TXh;oHdP3z8_PsfJm*ztyC^A@lYHHg7oE zA^K3UMOZjx@sap-{il7V!q@bzD;hyGw=Uc-bwS2|)Yzv-MW&r0c`}TPAr}~>KxG$Y z9B_X6^d@Z)*a_{iE4qtMdsi8M)6;{)sJ%$)vvak3)kw+oRH^Jewo!ir};fzT5445?r#%!B2n^C&DarPVh9Y$D@ET$z+k_=Q9t5Lpje3ya8juQ^l zQBX|!R8%PUrR%uXM-gF4Io4|SfFf< zTmnA-ZEJYKRDZX7ociaGB{|pYZ<&!)mlVmpi#JGxO zPgSIyqV8r8B&6saZ@`q=)^`^Plo|kJP}@i)?Wa0KD0Y93w-BmY^Z z_V;gRkxEc}o-R58GXq3OGb$=vI;H^h2ddj=pdtYm(itzk+_xgbS5e54ueEzh)R?K4 zyG&NM860HUDW=zKn>t^qfCc;X=Du^ziT{`#9;$&Ix@7lFHv>2O<`t+)`Cz*N+I>MD zJ9xy^{}nKTc2Qb5JR6nvDA)eZ_?B#|4(>g1T10(2VOlX%pTdw`~w;5^_tBTCveQfKcYw?Rl<_fflvGxrUe<>h^^Q& zl4`N)k)eL1QE1f;*5|jNzR-^-JU-a0o8t$t-bEfoz=LL<^A_T{q&@NrrCOz=M9(k^ zPdKquxY6hDvOa-7@)h*@GK`8Z2#KXvz=PC9plL$SgHKuPY>ta`3eaD})YeBHcNX7)>c9_Lb%*1YAOsh!cPzO{fz|(3O@A_ezncF?}fhYY56f+SYbAk##GF4BD&$ z1sTwA%P#|2C8hkaVPYGC&GbC#oeUrftgU3!75s<2h#t*iNAG-KV){LWW{i1S&*pB_ z--uD};hn~fZUwFm?1cZIG;e)<$S_NgFKVd* z(b;|7_k&icBbmvNVj~nY1lkCZYRS4?OU;L!_A!^<(2jcgX?@+-VmnrU_%BDCH`y$3 zEaGGh6J}l4zoUlGPQX=q!?Dz`!8_&q`mdQ3QqNkypu zrd8<$`we0_iu5Jx7DhLWTJmuU-#Z_MmX-ug8zjH8cwoU;dSQU4Zobx*t4TWhw@<0K zN)USW&FrZ-tH##)#0J9X@J(?EqzeP&N-dYpbDDXwTE-3^=&f9cUp?sq7pe!)KA1zRmp2P@DmvRvmUPu0niOlfL}KvuZ3EVTe%6< zP)3Airw$))YY0)_HV0E+I>qaT@aP-owh3FnOORn8;gjvd)y#&+5dljP4bhlDo@~inkO)<(r(x_9b;c)cAB^^*-IaCG z^v$R00>(iZJpg5iEBi5jfPRv-WroQ5&wDF12DkJ~MS-UTg|GS4nE!BA=}(?Ucj+7t zlbD2Bfp5fRKFZetlaTsXK)UE0pNe#@LURni9VDE}=#~g5}X7lV&F@o z>tA&QJo3l7e*@rR;ITRg$Q8+Tk(Zy~h&WsMmdpGr|I@q6(V%Kh>g^_Cbk+u}=0K;!m_#0<gDjdk~*-m$t@Sc1&`L2d!I1n zZvIv5!>6`jjH7bn`I63&{l)9C^7l&d5YAPeoii^NaxF_5$*&g7(Oc3|@AU)+iaN><_ zeI*XL1c7q^#A=4Xd2d0yT_9S97ZN!_{BaZc(NBe2{c~3jr0j$)u)lV4sY2}mX{r$8gEPu*{w z?-T()P{7Zt?Hf5J)DFS z=J%2I!STM0B5 zb%Pt}Vz8cxu7W%VG&j9q8U$(tI8wkIb8_`F{C#jMvdk;*8dF{wl@%qF6bst1l#Oi2{KwaOHiFVb|2nQT~ z0?0YoCqdkc%0|TT@H>u0#{^^?fy(7M)Feh=nM_?|=WZNL`u-1ieH=-Q1+ga~c&P4B zeQL~pJWBE>w@1uv2nR1>q%6Q{DEd7>c==S8;nz%!zAH%3m5Dt;Yqct2G^~6&hiw5Q zd^u2z{AsWqebW*jAq% zZLAhJYch!z<@kB|?^|E^VUD&t=ddQSOF)ufCG};|Ci6_R0}sO6pp-ArlgkL`B>uVw z$flM7LOCV*qgG4r#sTHn(DSvPPp%R^&$$ej59aglLN}E*wDF6H{Pg@nAzgQLsPPH4F)jj$lbCcl`&S zeSJ2$#_LSNPDu}_Dm5^hPT&cs$7l_-eT4SCa9DxhhVc#}scJ8=(^B3sDP(wK(|!wy zalXO;cASt4scv}bc&t5@*NaTKg08@~*CKLpR>4Wcd8vx9BfzZWJbfm%3avjtE^lCOcv1e-x~n$E zx#Kk68dLoo;Dw8MJUf=KbKJhuVCRf19Q>=UEmHVK2_MLOWC`s}z1@OsYt$0wUc^;!TVKW$Nd@JXd{zs+( zhxRR^ylwE6|{wFP-h73 z|H40yAP*9ekUh$Go1hdWwk36*Gvzi889@U4x)b<0D088tT>UfJ4#cM+%xwKlWkwrQ zknHu=sTc|&y_DX|(&n%tdN;5_H;xqWVIet|2)J%jPB(otw?+wRN%=z5;VB^GL$>S) z#LeRL1iqX!a;O50>>%om{o)6T`}HHd(CrQ#uiFM<3(6pANXYKLsB`s$G^qI*jn)jH zqTTh4xU=WBm-ZA!Hr}zcWq@q0F_Y~9mg#C>Sgbgp4*)KbjKRNS2_@!P;HQz}GUD)W zFr{xBN#t|UBYi(smu%zvdE?nyQtpvWU=gI=Y7A1?h@O7!!@_`eig)mT>q!k!UPav#v$A9)jis9F$ua{G+l4a6r%6xwgMosx$oFOa(m>GkCJR@ znnq~>M&T7-%?C+Y`+xzt688p7s*b+)D76~gRLU;I>Vm}tD8#Fnp=ZM# z>fy@Q$PmVv-Y{J4H*;7Ip|F6W;r(wJDgrZSe|kbzz=s%iz1&9fCPMLi(dsW=3a9)K zYW*VGNl3W3gYLLJQ3Q*%0}6Mr)ZP;S-!-3`jz7IYW815-uLG^jrHtp-eUX zR3k@}HwJ_!DNFHq8+u@g+1X6({hy*I@PKgbmhkr?2M;QF3jp&p@rqq?N<%EN;*=kx z%xD(PIeC8E=3#wbhD&2;s98(GrJTC zzbl&)(vYAnJsW7D^d57YY}92HPu#F*sh5iQQ2PZ=hKpaoNIhQnx_fUQXy|4IMY7i- zI-r*=V;{t4uK!WApB$wn*wWAkmWV2^U!`33gQm6VlptarYBN89Zihk)K_&*|l~6v+ z|G)cqU?D>cI}4qfsQ~%fg4g&_9d)p;e-LVF_BcRmxleMyh!iU6oNMI_cZMQYUAc!0 zWOFwfIA6nl zqaV)}FG$BdH893x>m6{28VsMnh7zYMy7%(nBZu8%edWZ*g$DrmkMKxi{l&>zcWO}T z;O0{(26;mY)k%!9+KT?5TXcDBNmG7JJS{G7Y<4Fp!|*+poKr*WaAl|e+~Kx|JoNa9 zu=wbU|Co4+oIR>ufCa@!f?iStnwZ@S}NLwi|YW6gMoufO0DZJ`&?H zlf{IVDABeLpaGy9E@S5(ZD=xbVN(8Kol2~7%!lvTAnLF{jVq=89(Bhq-PQVsD0Rz@ z7=jvO1UsF}srwg!&yGG_6J2IaplTsfKd}AgNxxC8jVZ7IpvS(&hbld)(2HsBzFYco zR5$*z$5(tG#1P_A{|jr!h`ZnCNA%_UE zIIct(v!5}0>~=kcd0+ndB091b7)}ke4s!IRI7L}BUq;5SyP+FB_q;dbAWEi(FTF=D z;A-_Ah)z3m@er4MW3I{*7c|1tEobT5aA3H2Bu*;NB2?oZYbU!FHT#ySM$v$)UI5yU z4c22bs0(gu4EX*Qg=FY#yHHQZOn`aM!dQ56wLc$?BQ~_mqzi;hm?fAJuZ8mR#{Ck( zfM~5FRTqT1=p!s_7DduflHX1hdi>>i;~6RQe@Z>XLvHW>9nD&VZ%$|lN>U4So7`pq1#ZP3?ZLkU%lr&{~&t9<)`{E9#uAV>|=5B}o z{`vUBi-AO4p0mJgusS?rF2bY&41#%ja*X+zI&JnnO36{lobxDy9kM12>75 z@j2&Td(dwSnoo45a4PND#pn8K_&iu`pEQLP`R9YD#8uG^?lwaCtGZ+z0gtxFj}33r z`3xJ>^TjVRe8R+yoC#1DneyJ%`7$kGM}*cAP_hGhL$k>2E-9Id{|ja}BGb;ff5#ST zG+Nj-lh%7^vG?=~{_z>y{%KHc+f!*I?AM9E#bshRcGF~a3eA7X5fyCkOZdaCjHRu;w zugsO@|E)CMDKD&~%jQps_ST(sUTY^*R7aBD6ENM3`CN^jU)y`_@aEmTZSet*x+L+@ zwy!O%$FtgzoKGinP){&6&d!A6ZWO@eVZv9%X#t^G4`T~wyGPy$#bKi4BEa*4;76kD z^eufK?6-vFH?(>@#9l355QOYbWj=d?T+6EPdkUUa)8R$}bl#i-TMAM7=1%hOGY{=& zadc`-DPF9JQxcuR_*W@`g-d{}@W+E?H2P$_)P)abDKahiP*p#EIpNUUGrQ_%D+!VO zrd<%TuT$#a>9x42(4GrZkm9=Z|_PIr4_tvwM zij!;Gs`&)uY+C&h7jMy z|8`P7_2+q36A_m|5|vd(_&G;9MQy6w%I%3WLS*AM$?a8sNz#WNfl?P;38DpfY7qQC z+?yFv*s_r2Ewkk15_q3NQHIuB?+0(4&|@-YIwwc(oqycJXSGcKlVZ@SwB;mAN=D`$ z_YqK0A$T#BfS%NU1>R#V$SY0^zHMBT{ku}|xl+lJCv$;ZVM+5dIHwN`V+ez82Cm1} zK7!vG^Nlgy#}ELco7Y1jC!;;5qFBqqQnb7c~3%W z6d$k;cPA2D+}xKkTG5&COKPv|69%hV!MP?ytII9bOIA+w#-5`8hS-7lx0$-YdQ?)U zu$(xZ{|L~@=BV(idqgce36@c zn~=O83SRO_?&C>^pH`KUN~GwNZVnsF?&cHOY84HX+F^jtkM!L+aYPFK$zggB_Z=1t zo=tctwANHrhx5^u(I5OrAF_~Q`>A&*P zN3+GA4!-4Bv7MUb6Lmd2Z`lzFm{_KlWA1F<0UE`1eC0)K@j)=jHFLTm8KI3pvPT(G zQNl4=?yR$rJuw;&n*m7;SzMd=KxhoTmKI3gX_x}m$7|gt%=!;#SWnkl&)?E^J#Tw? zlRJ3Gw&(ZLH|Z3zXHo6KyO66I8GshLx`QOp1cOkRibbWF^;bdVu zmid5J=H>z%&Jl@`keTgK3(6l3wY~p&s({H(VnLRP?o^Ul3wvNgj3d7W`E#=TCUusg z?o{$>+IGeF!BQvZPr4Kj)wIN?lF^&(N*sUZX`IenA7#p{9Ty$1B|Q5au55be9G^a` z)*c(ciGsSuIYHbI#^iki`(VA89jm}iAmM%yt5u~%9E++n5vb5jnSrX!>`wQophl_h zVxNOAlY}|4UyUx#G!O-F{yKcq-qn7&kTzZt!_d2jrybP;tXY&4L`;%xT=##}zZD6h z&V=IR?1$I*z)U1KfMWgZ*8nTB5qh&As?Juo(+KBn)?vni=$ro~2T$F15C8A?=2U;$e zZhezI#9%cH5QLe|gWh@keVYKT0(%`NwCr)p24vi$Ol58{rk{mCH|I3tXU*PfUbcJ% z)2h~8g68P)?F7b%?_ppE3cXcU2TT0+sIl#v&|@vIX2Yz<&RQ&c=UVDx^;}yt^bWg5 zuqQTD+byJ!v=}AuXN#E-GfZRECOG3M!YeIU!v$qYVVm`DK!D%8uL#5KC>?QV&=%N$ zp)%DcMwjgOIumFn!AK(3UF>n}X#uGL;d3`(r_Ms% z97}tKBL|*IxSNxN02m_As%oE%QF@9IWIsEUB8n<&CX9(*eGC-N+ME{0jkkFEmDf$G za$Smw3NYKCt{OsJkS} z`;l19r@2bSwmJ-o@lXAEzR|rO_V?e) zG&8Wxw)Qb|QVM}4olhH3xJndqKh_X49>JyTmr7I=?sTLyZTb5WrV~8`30_uaAcj6A zxEDhpi#kk*Pi6+^s9&5|MMo_0SyC}Uk8{G{N<*@0n#nG?%Xm|^rW1(yec#yp#Ckio z#*ho&%x&dFmkpaTC*ZUB*QtT4#tu~VisJ3J$UgHQ%q;dQp|R1ha4Ah&YbUZQ;B^p$ z4T{b2$1$MfLQLJN+S-l-mWiBM)uIb9g10X*W%!okOG%n*O`@)zWqP12u}MJy1#DuGx;hl=)yRXp zBR;W*tTEo+DCIU3!%G@|otH-qtS!s?)b+ zwm=60eS%mbWJL59p)0j?-6@o-PNY|{O|FgVh%?^@Il*>#6Y4e=-TnU1Ya^jlRuvPp zO>DbcNCI$(!+I=3LNjj3Lyim)-~cTUl=MN~XKk+vvc$*Bv=0hM3d-EpXAC^RT6|^F zj!xR1@|;BI*^hMc+W?;Q=lmUd$J(9M&{NE~b>|WYD58@$`P|;y5JW{64Irn-y&d;v zLw%s(ig7cobeQoNLy)E49>={>40^g|ezn=t`zeY|>W9e=LxCyh`T#}Jw_}hn+k%2| z^sH0``%*Ncfj^E#71Ms3@mX)C*L`&{Uk%H{2$n|IMk+~S^y$F!1To~U#}v}k9mp43 z#D5S`p^zqTUAax_D7>!^(NW(g%W^Q2lo^kM3kOl>Xaw*a<|8hiA|y=i#!|}zooCkp zaHrZn;0xwJ^rJhwo#&miM%GkGon{m@AW4!!f+42;vmLZ+LX8&?igcj>g;?NZvV zcXy>fio9>=EOh>GZi={m8i%ercoigky*S)*xG09xhn0oDP;#s`<$ia;#+3$?&1;qq`BeD`{1soG zr6}(U*U{?RFG1@hFJ7bcN!}iiNv;r`rdQVSmJ^o!y3I!SlcVYLL+;}r9Ywa#MMJlJ z(OtLRvj9&7{d6R?3c4EM7Lo>+Y&U`x0c0$p@Nsco&R`yTHMOo_0Qfhcg>? zw1c)P{AGQ)&_wj7kQr5k+sDm?L0M~F&VX}lcHS+eRIl_f+msH{s{CBxO{%MYKEp>A z$EM*eV*TyA5uP3hg=)JBQ|*M5lv*e)Hr;ErdnDZJ#ZCL%U8-9>o(E-Vyhl)YkV za$kqP5zMT1silRDdF(E<$m3-mFm^t>=`Fu!jbnIG)9U`h*Vwoyh!u}`%qPo&2 zbKO0AG>6Sx&&0{U!L6nH`!)SbuC_czkjdz4HwBYaRDf1X-y*OR; zf)8>yzJ`+qqU64&N2Gs+r^(}>$P_#QG__O_Tq4fu_eu>! z84RV^%-3bt%g^ zq!>V{WLm5!=dPfK5?lEkH80RMm$%D{e@3$^9q0f*uo8nwp3AQ1U6 z8cLap7!e?R^cd5cZ}1ox!o`1h>)LwF{`}6y52`@*?y5oemIGYI+zzmOBzf%Jsy-*B zvQ6KpV4K2V6uuR6?wXAnNd-UVPLjwngkK%d+TDcgMzhU{7a%NdbAP+_SfU zBLCL+dx|)>Ml?Wo`H^&=hhzV0&&sN$a6>Ev*tlCBCOAI0v%NgR^~)>997PJ?PXni+ z(HDE=kCJopoVhwRo&w72>MlH!*(T17Db!17z%=jDLP}0QH0xceTd}1f9@yJ~B&9ZM z{;8660h(^L#U)BCm4leLIv~_DWx>oF>UZgHY4g;_=_*}BD$pM3RBM4=rC67#59o&} zBUF4G$}`iH$Xm)WdwxRosqRFxDkt!|!F{!3s^VBI#Yvn0pBR_Wu&vtgnuw08l(ToU zT<2Q%pThHf?VF+YctH(j%5MpQ{=-hf8LgTqZX1v3yo7UK08R}1FtKi~I5Liiy;N%) zqq-BZJtpYstdj*n6vUOeEubj8Baec`oEgv}deH@_2XEqwYv7xSFKER(_Vw<;0ewcTg1~6LrMfk+IDZ+r`@|#*spIP{AL5WqB^KQ>18p64y%r8*QHzAmOo%foS1!xU{sEL9~ zN=ct)d@~$OG?l#85izZTY8`b->D@b8!;c*q4N()~<@~5Bm97Vg-DNDrT^jm*w0|y7 zRuCwt5#4m)z(Z?6%&=MpDqSfkM$X7c(+1`E5Jm_I$%PC8c!sf}5sP|EKWTZOe*}Ju zWr*xb)e)VUqbzqe>r+vb7WSiws#vw!dyDiYR*6(c?z+=saOo=zJcuEw??tJ+z@%bdvFAn7)S3kcs0 z)$#|{)F~Vt%^CpAO}!bvHgh&t@kg(p^IK#UnOZwc2L87rqD1Axv+>OT!q@sj+fH@1+RE|R(l8Gz5Q^oua$oNqMv)EZ*~w-uB( z>S&ZcKn<8mp4W|$la_?mA?U${KtOCTO>&{p$5NaIfUeUlwDcNq zM^eW2wskQJuV^~52@heB0a0ojY(n0w&fN$S6$OgEX*UJ}mq!t{HodEP<*nuj7KE9t z!CnAxz{5GRCIZQCX!4~F-(JWb@y02+fBzsR>y2{x6;e>bp9F21!IRK(lg&Z57P}y3 zU^wby3=0Dp3eOy1*~%3YS`YiH1x@?_5`@?0>Fk2UimhaDo1>*G4P1;EDXCjeg5uQ-O4b7^o%UG6wSWp`w|wQQeO*oa?k(Ah>+ zQ-sVB&ySJycQWB+k-oV4GEjYhaQgy6v^)r@(Yj*ZJ=c-$EqJxI6fp&9A|Q@SA7x*P!_Y-nNTT9ypZdM&Muh?DB5?WKn5H z)_h1cq&hwzDknJRPpfBH%ZoG%yPFp1GHu{znuKrD2U`RpfoaCE)cl@nB4R_ii2Ls3WQheRiR#V zp=PJH=no}I2xrIZATdW_lWYPJZ(@_4Au#`!0Q1g$i#tW*{Vb~ZWc09TaZ)=Id=}Yw zOcpV~av9z(`wY!$IkH#$wOCvTA|avdX~^+zo`dr3bOJdiLj&rYi2V@(XPvx@soisPafR_?i{5 zHJ*_YyfRa?TiR!PrM-g@Z@d?)En@WxCrsAP6#F4&jdmamcSHHb3B9occb`{QLe}5c zR)CqmfH|OhT;;(eDN2Mmb3INims_GebR|Q0P}xoi3EDEFi^V!Dhe3%g<|{6GjW^Ee z)C4X8L5xM>8FaJN`|*8oxZA+<<~ikrn0XMu{OsILrnb`t4TP*oIs*I=D|s;Gek zP#dnrb0S#Ib%`w(CfdnY4^&S2S5WQdJD3j|X4J0c-712*QP9(i`6Va1JU}w=hw$<; zd|8}j(U9V02L^8(`swS2oOn*xpX2!Yy?Yyj%NJYBg`FT?65K|M9^X-}gxD+)CF)wZ zY1=0w{h2xk^(Fa=BRWbc*k7(=hSCF zbhCMq(&p}E1J+l;2fqMXo3OWK=j7pKQ>BGF(oq0*E)qn zlPdk$Q}ad=h;EKqBtPaoH@Yv--AB0w6b6|H-34oBZfB{?{Y{Xe&1#oC4P}(kynINQ zONL~S>siCes6taa2d!WAEE1%KW8sHD45B9zfV4p5;a{dq1o$ZG3?IYBB=wi-#7slX zN+toZDi=M0@gX9aRMw9lstV<6Sj85uS@xlOm+|+y3dm zgrdX}FV3mttj1iEY*LYgMmN!p!7b-XW0kw1rOMq~&m#Xc8f>U>?bP)kPBpwm>`!># zFdz2@v{8I&x%Y6Zn$3{))%{|H90&rewG8j@9xp<=kiM#Uo190 zlLihs&Re=4q+jCcNs#3k0ig72>Y!6%4nK(Q*&Lo7H~qI1pWuN1WfuD%DpYUXJ;1*? zN5ZF-#Pu3vVFC2_6*?U;>}yI9Hp50EeYy-E|JDY1W!`~ERG z4~6(|H_#D7(+j4PRHmqh5;lwQ={-wV6cV+Rx(a5GZ z^OzpjSngZA(GZ1gYRaZ>tNVt6c89H~u(}&#*<1xh1v}_OrNK0(gQRPfUCDw8+ab6yA1w-NY!$D@)lh=<@a;fabci4a`X5}tzqsk z6{@`2gP_GUdwOD$Fd_(u=MjC3tWo43>y?NWPx(1r%)q!i)dB~2g)x|C^$(lZlJXyD;UD7mv;4CTf28L|-w|*Y8O1lxGG}}Dg;U`mQV&n#kQ5jb zPGu^l6gnqTdWIw;w1ny>yI`mhv}tg{UnX~D4fV#Lfw#ZQEi`Zdya8g>^p!?ElG5}e z!r-0(Gy(|^%$eff5ylrpmuNbs^)4)5_bcH!cm}0r79`8F5AP3AbP@>nrOF#1PpSi_ ze#oXR$YYv~0jSoszGV&@aMcarT%0Ocaipg9_9OxBWYT@! zs2HHu>JJGaHo!L#D z(t?VC38#96bvVAo;O-DcWgq$7noiu%Ir-5&;|p8 z5^Pf}hsskt#x6qcK0E_*(PIl-gX;m-~NnwdyV$bRznn< zlM=oo&0kW(RhlxB%{udwtAXcd(KwsE(KaugDEs;jaWeTr9gCJWe+%(H0DFu^%0W~j zpcjyzN=Y}Fda_%=YF-y;`(k)>r{JEVDy2) zKrO=W-?IeD#@*nebFx8IdKQtoweEcCT^D4gL^FMA2xF%ouSk|i3#ZPp3B7x0>{>Eh zSdRZ+^FusVyLV9QnI~t=aXdEhUHnktRI1REr3y%v2ev?VT#4f~!W>2i54(PY2(3K* zBNs+j!GnypYZ;fS4~JFw^QFLivYUZpbE=5QSy*h=;p^QPyG22ZbeKAOd#fS$z*p<{ z)bd)x&<`vVnep2Tjn&<~VV&-%3dh}S=0fKmn+suWHD|4Fh9>dG5_RNfW3!BQ@Ou@S z^X#{HdLlQ(Zw5L%vhjy(LX}qE{Neh${8y1XXVBcWyi^){L%StPl6Z2B^SJ*e3trgg zpVeUdnJzpL&VEksOe&JZ%1G$~LI?}ZOGJn0;m}7O?Y8Wkjh29FK^0OTCO zJ`8e=NXN1`Uw1Pkz(zE|Z$#-_SlT*Wdf0GxB_p9v=r7OU^Zypf zvDZK6sKyX#A^mpzN+p0X6@bXIVgM!0$M~>Crf)cT;2sCEP*&ZXNAc-SHH735vQsg*`0H<3J1 zzLN;^Yml6a(shnTfi(uBJ6`0wnikq%NZFvGKDU6S&uhcQw z=ySuS;#jXnM$`E%Zv9k(g6njjOHnpmYu7+ZqnC-yOBrpN<8Gr!2?Rw^Fmw{@%gHGp$tsS<{Qf>od;W4|VUSxlb>3Bm7kjf#$-f4DlgQJ7`{Y|o2 zvKEr&kzzP8KT9|n?wvDL%O&Y~&c1_aI5tK?iP`XyUnvJ(b6aTFbZlHOawAX<7%2or zq{jDSc@yuXqSCLysA-JbD^+cdU*_<87}KQSazr-rxZv%omOswu1`?wVdtZ0xpRNUZ z4=&~om=v^TTglxM<%>$5Fh+!|e(!zAv?QPJ3>1SRv{L;UWKU#>3LF#R{KYJV>W=Xp z2I`x*KjS7m5{US8h46h# zG}7a8+G*}owZGWf^_fQ%+>Wx7YBT!YkBK6huKSZBe%|ChHI0$$lY&20Um=LCxcY)$ zT$vd;v?x0+)D-6+E#Lgb;xXY&?2_``{=LX0;EWB&30?WGO>D)c`SHp(sE5CR1t>r% zDICh%i9b_c{JviM4SKI39l+vpu3~$X2f(uK4eMyhFZP_J3=hS7RNd!slf2gRr)c+T z*3kVxih~IJ&wH}Y@g9j7?N#C9?JEO9Rq)?^fN4NbF6Dk+%A_O|(R<1q0A2HEug1Wc z56wVK^Jd2~jL`DlvdwDZbVw#)12B)M)hJx7Z09XK5{Y6$p(`$j>S+y-YA-wz!6KfJ z>;tJSLL=;`z6C0`@r#N_qpM?XEG0kB6BLeMbu3ioyfkUU@|z5Z~6Mn)H~qs-~j_Hk5j+42>!jxJ|46DrL|Zzz83_ z)E@@-zIA-UgZ;Sa=ZzK4>i9A}Oj9Pnd|>{#Qi)TwHwGWv=NNH1r=k;L&V~(60U-DEB=Z*4RN1 zGwM~OqGST^Q{ z3baGd(0HGESyW&YogFBzXKKF|uXcAekIB5q5lZ?Uns|~=4$7&A^+HQ2?fh{O&EMVz zzsQt7HAH=eZxU&ZF_G$5(GKQ;*SP=vOg+WJ7{E|n`rQbw%>|nhSm>#n~LAPJ= zw4KtK9mp&#j3yKueawXf8cqA+B*QPKuu;L_-;T&2s8MQ70*@?$B3cLdzZq#x24okA zVLHMw1)lM0A#*JDcv-z2MOVdbwre3A$gUQp*srRcYoIIU@${qyAU(-uQ^#b@egXPI z+W=lJ4nWoS+q_=ey%MylaEv#cARFb{U{Z(my<%)q4}?sw|Ee^9%yQrQ zvUSSHk7AfSYb~PjXKbTiR-YF(mxM=-@(}v8OJs4>yL33@2Ub2k!m{URFMj{^z5P0+ z^l~p4^IY>*CYXPYis#`1@=`~aeKWYLP9vaa`?1O0i7~%c3MHkvUBvKF-AK!y@ zLhWz>b!ah6~g^F5?RahZ@{=3sQB`1x};d5{^gL4f_;qw~{RjLbyR~nYX>PBwH9s zzze?^4!HhRB-4IB_$Vn#H+#i93b9#U!K^DJY3RiFxy1oK(U5g`=>Y-eG5JpDb>HS2 z7eux-v#~0tO7PvTwSBz*$LdxU(e6|xBmD*uc35O~WT`I`o=E(N1^L3sv1P22ns;b_-tMC!bHCzVIGe?pmm};H+JE!zS2R&X1-e_{N}0jHVX% zo^X~oCA*Fu&bflzo3u{8*{5*u@a?(A{Oa(xPYByv)K8R^A*79zd|Kx)Gkzn=>abW7i zK64vnHnU>~^wKY9@AyeDR@77kv)WU09P-IC@$RAR4ovSlH<*gUF-k_)vhi!$7)+E6 z<#x##356D3G*(7kW#`k(ses2nwnb1@;?JPpox11W5fuJ|)-O+YGM+^iY;);aGZAsD zuXfqS5OKSPU8Ur1K9Xo;i$I}o^mD5;T4vslt`5rXFXp(G&y}E77zaEQtN~foCNp?6 zR)qWCV~l<@QwOYy(q?*X^?nu*29gXx(1Z zT!lS2VfHirbYfI?V?PCsMg9IYpn%E2#Qic}m?7Ik9$PreKA9?-G~*>Ftnbl-|3K7A z$XBj&(xZH>7o|%;KB^1=E%VB|Q99|jox#Af(t+BLEw7II!Nrr)uT+oplcJVRFmCp# zZ*C$2-9>c?7MFig@6z7=T#Kr_Uqgx=!y1+EVeW(8T)AoI_b9wfcF>LWOdO3+lJn|y%*gG?>Ty5d}&cO09uJ#BOq+YjR+>>TAUH}lS(#LMuQ z7G#kv{OlLKFZ@>2lDyL$;c1{XJAG6Ek&sSH-xHkSr7OR4RXCimD+-dza=*PjmM#E| z2(^u-4DSe(As^BP44eenSmiL6V3Zzp|4q$QZGb-^kJ3C!%c$++J28#3;~94iN)!OA zsi#Gf(K@07Jh{b9nz*ct144gz6SYXJRxU~>Tq3D?=v3hej(Z8uAH~EM3hOi4r^|_} zMqc1!)i0m7sB!Za_dIUW_mb<7#Rdu@qf8t1U)u}*y{oQee9g|Z=F$GXR?mGvAIm%Ol@98)HDXC5C zea=!`ZnW+Oh&N~T^JB5K9v}el!^Ej%$ z2_?J(Hey-mbwg4D*l;}gZs3X6S*p_T6 zG4NNsP?u77((|IlehLrpaLtv>)OQHvYkA@R%OU-o)bb><4zs96)z+evopJ|6(r;B=ErO`M-@&tv2X+ z&YNGL75tQ;>cCp>M8@@a2J&XuTg68h0c^A@zj{#6HD9C`qu#B$LHgi}_h%%}Pk+)r z=lT}49f4ENc0>C&ExT43P>?C{NW8m+PV8qgMPTu6ZSD=io*z%zg%wBPNp*h3V6YPP zC^n@fK2{il`Klp+{L1UC^btEuDoVLk$v08scEVMRYB?K@g@*1>5WK<;J z%QqtenQOsX)NG8)UH#~a=7ka;OV|n=rx&kH!UJNLK~wEZRcz4FfREsHijLRfY_ue@ zB)L(P0LJS4}t~@;^;M{T<(5f)j$-R_=5q@?mOY=N7v&54rZ@;1SwEs$5%12pfy)f!H4v zh{Nn(zM+T&I=w|(-Dnmkfk~0LJJu$(clG3))8Cm@S)4H;zWYSIrTj7mC3T4*{#9b# z{jh@`nlAxhONdgKl*q@6??eMz#bo1e+kApS;X#D#}K!acr3nadv=OSdTLx z?g40*eWO?86`j+5+bHuGQY;>8gsXC-xozzzZ-*?2kB8qZrs5)vI~?w?vLu_Q*vOx< z*nJnkXco`2OK(6>#>3}3wO(EwF)HF0aFwSY!&-|sX#7I@Mz1J1j@#RV(K4YS`6I)#QzBXMWG6jBHlr1j#9GFp{<^0lWuN*)|ATg zp)N08QtQQZV9ECVlWG6<|4D4GH${qD8?^|Npd}Z|>Dr#Q84rOL5KT|cM*9Dj1o*ux zdh;gVW3p}9O;~K6J#q18mMk)`-#tg9Q`fZUF9G@~K1&*)0uxXv%Jr<3@o+hmCDP=g z1B|%WsSceN?u5CFLn=CwiKs;M%I?(PYowKbKf8u`>aUE5tV<&)Ei@=#jJG0pcRpds zvC*q50UwZ9jC}2X*xJL@n;O$T(p-`~4-zCo6*1?;*FJ*2TnQM#H2Hscy2LK47(h<8 zs4G#PL#s$q+g(=rxb_y;68^&9qWu$T)2@Z!Z@%LP)1EE28C*v=O>e)zN-9(X>Tp5l z)8NZivwkb6K+b~Hir@TZsc2(i#s*bLPtR5EJ|r_1J5l9>ngZukWa~J|SL3@jrr)eO zA3RPl%+*0K zO;!66$+DO7fq%q@Q1Y#btB5B*$ zYLl7;d)`8n9j6vzF=Q&+am;%9&P$hCeh0|Mm7X!!xaT4@$)eGc(KF9rhgb z-gUY0mDJhoo>q=k{*IzIL}#eesV!6YK~zMG*1_%B>0xG3oXPHi|FdV@GJfY=(g_TO zKQZ9-*>Qfi$8_P7Tw!dQVEMec^+Qa{V<^JanOz(=Z}ls<5QEa5I=1CIIkQy>PlQtF z3xwsp;%c^fu@vymbi!~&cqE&z`579oi_%HsUNDov+|PM=2?y`~_m61Xzz|VQCQm2% z0(hQ#i@qQ6`CN+k&~9CSzGTP;3WPf68JGR&Gb{|Bp^C#hWY!r0%pIOy=*J(?&abkZ z-9A}-@}=(v&=t$sV^CvhHygc-tcA-V$1y)V9UPc5Mki*wi5#SOk)#%q*> z6JEvvr(Y($zk@Q5?J01w9(aTL?l-U+BvXpCLnY^;iv~zK3&s1hmm2QXLG~qJw4HSI zWN+@6Sj*owcWN&>+xVk63n*Y%PM5#s#(jc;I#&(ex+mR!X*<;1d$N}^%^zCCt|EDq z6A!P|mKosYsx6$c)`#C8lkFeEApkH_cFhOja{;;U#>Ys(Ue;rD1XLmd|1U|RVFUaN zup7k#ZuNMPMw|AT1SGO=A3=p-WB5Q86M;#l3Ib@v19y5toL62XN*%oFXAfK1BMjR|=a;i5{&W#Bhpp?Mc3?E>O%!x1KRTXN;7dRn2``QTR^QA9 zrBjjstZOunv}w!EMnjEY16XVnEiPn@7VsOw{8f!CnC1|WJvd9;+US<-c|R+%+$q*} zoIs2O4s^Mi&R04}ZCcWKYnEfcU0j)3S^>`{0%z7F*)33?6Zeqv6+!x8TFVVrYavf< z`eAy$t9z%KfG3Jxqc2>*td9F`HPL$+Y(t=K>_`l0BHznATyb8;U6@B-Tq&iq+k9?f zbE_bcS0BIN&&9?8^Yser2YDFzSjT2m82<~9yA!M(w5vi1k``i~i4y@{xgBdOVnf=p z-!j2q9861N46R&dC4eG+~YFl`gJ?P(qm)K|Q zmcr7;)_5ZVGE#&q^*EVV!{O1RzD3CZ|4Jtq+rGirJ+av?4fq1m3MP-}oO*TY@FtS^ z0M0PMq9bXK#?F9Pw_C*vx|WQ45E$u-?{uq*A8I5K|NUXV7htEtY!p@@EvReOl!ZZ> zUI~d1fmKB+uOZVmlcp}!3kHw>AohAQ3*x^!&}~M>tFI7%_V4IZ-ZNylJKP<>e9o#77x(> z5}^U!FJ2q!XX%p7P;{O zpp=_-y_#Ch%xN~R7Y{jbNadj?-PfQ|88TJ>6fY!+Hr0cHGuG^kJ!J8*Mz`Ke^=ClkWC# zZZYrCr(Rh##@2-Gx*mC3jmL~?4;VFX%z1Zct|z<|*nV7-H4m}vQ+`8cv^twhNzi|G z6|nLi`@?AbPc?cIH9;C~;}=#nFw9U9!1Yo312nsPaxn=T?+li1n5JQSZG)M#E@Q5V zZ}B611I~(P%YH(7h%hEq!!owsN5D6YdgX{}3Fj6sE!s1_^N+Y)4h4hpScv=E1^0bC2NuGVG!Ho4`Mn{yM?ARw4Y#(rl`%S@&LtlJ%_N?f<=McD*r z?rrN|#}`-`^E3QAj8euXlKsZi<&Fet5MeA6Ftb}m!+;~b(`JI?VWAB_swpDE*>mK1 zd9DhH?Zg22pdeK^>Rg5bW!-Yn zo~A@E>ENh5eZ?_=sq4D64Re2n#13WE?JLo(y(Zzx)jz2=PC#eV!QIRB&<{llSnTl` z1Br@`i|^yX^Q27T>duMv1nL#ZpJ^rEm!BozI8dMiKdJvPE>@ z+h6{7SE?r=qs`24T4kPcpFaY!L*0~S&#ZyRf&+qW{le-O*mm(LEal}M**m=|OOX=f zfl3X1Bqh^BMq=Wk*QLgHl(VY8rSF7V-(NFe;s8DT~1e~-@v73egP)u zYkt3XWLvjARsQn+(CMZ+4Rt+UK=8iISw_>#;@>e)hc^EqyLd+I%lV)CslxVKUbs*_E_QsG2? ziL$d3NY~x@iI5$-gdUNdNqvyqK?baY@CeDaV5lh~Na#Y+(;}Y#$)DUo@$4+J4gedD zPRj0AQ3_Oc<)OiB5^;euVf7lVzl^KWowWB4*(?uv_~i2Do5B9&b){wFMZy5l8mcys zb?%ungdd(Qr4^z_%0Gl$ItLREGuDX!9Lsx>7D58+yK+-a#UhCY$;;<4tZo5X6PnoA~p!7jt z#^0eghhmoWPzk?2_1u)!9@{DzNmZr?7}4$aMU$5Twq|0qb$`R6Wyi~Bd{H?DIwmlR z+%F8mV+Kh{3y``b-s|xo9kT(W3O~nKbPSyLl6#=8)4$w%X%A;){f;9l*WtgH(e8yD94q&`)5%{4E6Yrp<5mQ>P#GfhRgy9`sq6A%G|w>!z1Q z>3UlgVk>o;DqX*Q83Qf6&JQM-b>b=GAv*K|2W;EXswNFxJ3@yEOYR4a(z`1QOy)+W z6xH>ylZR9nJX)tXCmjfkOgq6;ggWMGd~)pnOQX5wH;oubRm%YQwdMj%qa(}5G6?Br z_|m%%1XIvfm%~&%yfcAZZSkGKODS^E5%&a-n@_g+58uir+2qfd6hHww$$4?gbL1Rd z*>_;LqEhtJlYhEJ+*o1@6&Ku1JyZexB#1!5u2humS+g!LP%8u#KqTK<%t5Ql+>}k2 zn2Zkeg@n06BU0areqMkAt;9m0vZR2!|CHQd28_aiG{Q(ARM;bqRL#_Is%4xE9urdD z*MUJ!-snJ_XlwE8nobGW;!yl~`E^e~l7pRW05zI)MF)^2I#NQ_H+Og|53%NvTIHR?_ZFivTFg7i^v9M_Eu2 zDr)xJ!Ac9k4!i|%`L!q7mDrESo#ah$>D!*#HD!qst2IfA-nK$Tg2(_Jbn+pzyJ}hC zpy!CQAX22y8wnVnQdWqt$`pyw;#`A_x-h8g%lSEmp~Fn~K3~qXV1NEPsH5x@Cc0heS2>o%B>Lih;ynu=|o;YWO7u+KuN-UGj5DaI7uI zF}~Ay*GO6LnY;r!(BLj%fL?S{tBXjlkI%-*_1-=(SFlItqZpOjHd`0z9W^tYWLiWI z!^6!ypv5iM;Fb?m-#mlZFFr3GJXbv)1&4lt%fr6MC(V_A{?$;!QfF*ffu1{Y#s2D2 zjmtT%6F6u@B#du`cptOpd86O}=^P5hc>n^fh#;NQ9FS=~Y&qan^uY<-RtH4oG`5Eo zFL~(x{V2cHYK)P}8~IgRLBu<9@ZOH)V`u2~&;Qx(U&n7#x(ArWLgUG#aqFVw`rZWl`=VRTHB>z>nfvpK1v$OFNW=rg_={n+jUS!^cw`Pc->V1(?JLZZ>+S|ROOe( zAie<+IrVglW$&U_Tx-MNLAl4U)><>F_JGKGu+Kq_zZMygXe-l1Vin`HU>#g!0FG@P zx7iS%wIdq%hCuXU${$U8csNf{dj9n$fE{^O`#$;0x%ykc{kin{P<1FEC~k;8$J3xJ z&-(ycJo@!>@vC91)gZ)lt*p}WRl(VjR~bfb3J$Vf)29zGMGBl4QKG! znZ9eviUQY85--O?XdXY+Nbk+kqcrian&SF18C7eKKB0hLwKjq!BRE8{tl^(QG7};J zZm$Off`tHN&JF6ujmB=t$}UR6d~kbZWrulN(p*D~73MK{3^spbS+wDE|7RW3?GvZ` zvcE?8nZzOv3;)oJ0tmDH%VM{wTM$dG@g$l&{JBZc8@L~DEQmGzY;Jl&&_C0gQhLXx zoQaZX@-Cwqe>Z=6^d-=xv1JIUL)J|x?^s*a$+L6+jNqL7m?XhC9d{qj;ap@c6}peQ zI-8EFz1OJEB#2~65?q7A+XzLb?%dxKAS?kXzaQKiiJzchV5NHUVtGLot;ZA}Gsg2? z^Nnh>wN;OSpVp35+7f5qR8z2?YJ}4+4_RKXqPJ7&DmJCcPySXY(r}QB&%gF*RK3}s zQ19K2-siP}Z~u~Ixf3q%+sTo6egzlHD$%>cVe+bLRGE_}#01I_hPX*FJkf5J21L9o z<2*-4T3DhhuayKZ&a9eS`R?|I9eT4jIC5;lnRHl_$?_>{i%%Xl!*CJtm_Ohd#<2pT;i#IH2w$b)K0Kd#$Cy7E zCzdxOF-a*ztC9DV<^X=KEEzHG)~vql#Q->2qK&iYvgmk3u?3l8l#%K((opG?Z;Ngj zj{<_!9$a0-7XuY9s=>Ia2h0(dCHo5pq&swwZdT8)P4WYjhr|`w}Xfv695& z8U{tF)6jOLdr>(NgY?N@#kSyc`E7tnA#iCL=ZYXx{aggbW{rP)M2Kal%pUL%<6rN zFdX!s07frxAj?t<$yc72m-!JLm1i+VdL$*-L}yPa@fB*Fq{*O%OEPpE_+ z)?hKxE8;2BHIa&t;o5YZQ{>`o7+ykk5!9#+TZm9MM2F-Y2PdB-8fgWF)M6WF*}4o- zYXNU;A#&3ACzv=jWNzrF8`-s^-5D`7u*m^dxE9JJKFIAQj;M4B3rf%Vgu-xd4{2-4 z)rtje>zZ&J$X9txDxtSy$UOwQ3yN=S;mE1Yo?rM6Z?4({T(9&_=$==i^^x&Prn=R4 z0Yp*;#8dtN8NNHG|0OO}UO?|&7s>iIof4z}j#0e86+2#0q0RlOF+TSooO+(zRwp$# z62_CzfqP!!*W&%J8d;&}mT;?{&KK$8H)Y!oNx(!@UYPARv|{RAqhKzD1OiW_U9%(U zYP+7-Zr>2SryHzJXJfh$EzGLJ4*0kn|VBCVrTejjHl{8l#&7!U8*85Tjde_}YK z%D1fRAo~r1J(9Z3Vr`2?)&#o(LJtlh@bczg1WnA+hJzi?#r+Up9TD>TWlBye*7L#7 zHe|Ptv>?ZlOg2mLjn2%|QKi14xpBCf4nwW$P;yPP0qaYAgigWby~}%xMCVz+xY}Ix zO)?f}rGdQdKU?kn%kd-S6TfD(sYarF&xkcSn{rL*fi%IcS{i3zA)S67feQZV+(o?- zjUvT(ff?!sh-Su|G{g!tkN}XKWLxIxiMqld+Ou!Et=Yo`Detx4QqI3%xQ;|?;?n_I zFDwpK{V8miTUR(j49*(fpYX&)Y>t?LXi;ZpOQ!F<5dRyRH12X~@1G%6EL5Nwi2PwA z-k2P$Z#kzutnu7wt@6GAtO@L-PMx`Bym0f)`qcTYybotTr z?g13Byv0Vd`!4Z+ooa;_1;D{$7}lpkn&nw96W{2I?QgWOWT3Vd;KnE7OZD3KM~rdE zUc|K^+x4z*0&giI6v-~rZunP4fGF;ZFk}vvFKRiMkT!=-At(7N6e+;; zz-|W5k>S~mE8KpN&txg7mFL50{d`hPkHsoyrVAiv#ux|x0Qt;QLtMjr(}yu&JoAm) zum6o8a?X0V*^v)jk?0G^^YCyWLjsk1aoQnSsxdxpo>t6XG+pW*q8t=2?mxy{Ea2ln zxA}pPGKZS^n|2yG4#>;Qg=I%K8!3b1d7N;45}Ue7?2%u;)N=$Xv&mPCw%x_V0UHNC z(=uY@M|OgRR;!rD(8rusm~Ki(DWp845gp8_FJFxVfDE*@7pa;Fu4l+qP#7Je@79DH zokp!Mr06lEQp%h^-u^)HpF7`rH){o?yAlgNY{91C_=qpvt+l?ZYnveTRABMi;iMi$ zuI1o-O~fZ~;E@Di^QJPQL9vpQ&B&)G6kl|W>*=02GMqBPA7uL(&s3()Ld$j*WsYGP zDqtJ+-<7@?dXQz}1};0AbK)(KB?@Myqr~;KSr*z0zy^%{gPz}u1jcDXM9(mU$le-* zW8HV&kG4WLnCsFNNVl=25kopZf0`s3et*aW7G-6i7oUrbv}piVYn4ZgZ#x(m-dpne zgdE#2^Z%wI&Fr(ADpQo{0~P!_gaW13R9^Bv1K4SH+DztmfKhDFVRTxbndWb=;P^Vq zC8gMZcf}7WLS6-YOLQ3DcqX8J!QVboTTf?d4GDSTl=HiFI{-;MUtrAr4@W?d2Wu~W z`PjkFvMZW!H3(~OM83; zn31i_JS+}lt*wO5Wt86FB6zm0|6!9@cV0t)0i1#ndbeHI3ltP$o5a*9xoXQTu~3Wl z%w7mHikCnyB$pED*306r+z zO?*ty70U^dw!H3@|XI~ zcAW)WD6Bd-)ZXe=CA-)g4nd(t++xfcr;?kcEGRFY zptIy%ul&Z0lK$Fm7!QN?Tjcp+Scvqym2YgzMT3Yyba!YL><ONEp56-Q(Giq9gGuG(EIhXe`WZBoZTkdc&44fPSVx0VClZHVCE%spyk z+(T$L@BtJm6^$ecDGoa}abP|G4D3bOsMbbWYHCmJy&?l>yI~eT^*#_tE|{6g2m`sF z72Rxzw@r<`Dgmp!X}g?9!Lc`Okaev=KeLK`5LMv3c9GpV9|K)RE$!H8kfzRwmWC`A zpMoKCRqVvkEsw4!ZohV`3*g=FlihE5sZ2}rS`bm0ebx0K;4LQSi3|sJ6%E($P;N?` zMSjeD%{~Pk`xBa}p>HsDQk{{$N)XE_-A$5f0j#1k$E+V*cQK|C zn8}&JG>D5M3u|+ZXV2>}sW%aE*(>>WK^20FuwDdv1A`9YKL}M)QKa?_@N;;`Ix#e{ zh6aBA0K17S+P);RO?UqTKqlbU0b$N2nmhtLn=3m=EfYPuGvE5!gX0o4xkVj*4?f|w z$4jW2!kPbmtd6H~T@xz$`%Xu9a0@DvDEJ6%OxJ5RO5l)cIV~!eNWQOeF93iD)C$qD z)2JG8xQ>BSI12DvLoCf{SLc9k$BqmS0pZ`ZR>jHllzoku)uLkFC1?!ri^oD*%~NpL zKnh7#Rd+ZwKr;ALqTVwCg?M)bi+N*L1661N3vjX8&=bQN)fs*JE$+qr#+>iG}#c=sNDKOsFNi;`c|tj1;N+p?JflUm63_t5$Hi9x*yA~;VkVqN!4060~)FL3&G z5iDsT%|xjxY<1-A!c{jS_+14Tb2N94SpZpR9QZ(M1yqCd-?asr;VGVJ%9Utao?SoA*J3=9JPTo2`UX<*(7DVs2aD+g0_2`(q1v|RZf;x#N zd;^XK+h)`c?6R)dL~ofP3&1iTr-qClQZKDhL2l5rwpdr?AaT&d7HxDTN|6`@Ypr&c zQe~;?YMCYV7-YL&66V8%82+Rp`T_|F1s?gz!bkpSr(HLkEPVmHi znFi2p%8n-3~@MV?!ALh(_^G#BposAVCKi;)zJLP--mwf0IiSX8_4HIS!cHAaCDN%I>y zmCMNei9yK1ROp$0CSoHPfP7(EEe9N%jF*`=4wFM%?ik@19;;Ozd^ErFs6&8ffavdc z6vK+rcA8H~v$#V;Yx-FI;w1U8lt{!|DN4(8K!>4n9jU_uC;2ox7iY?1#q9P?u$y41 zyrth?1^&|}?|BfnDN|{=;bA4QD(Ku@TScL^kJM9%_jLWzBQP?xqd{Q}E%ZWdw))hN zDiDGYR=2Nhu0}8B$ws_32=65oQ9WK{GDdqbPuB?12S#*C>{XPrk*!2NsabtW!n*K}&$}OH3!RlFXFv7N#VQh-ZY(M)HWlT!1*5l*R4~A!& z{&b=Q(^mmTSy+!#xFxs6$z<10P^cvybZCiEj^M$@i+3vw2+tTD_ST{3NeuH~3YFYv z-)!~iyV%F}Ms}LTFVCImQwG1{?WHU=f1`|rWpsB1ur`GdvcnEL4J979dL49K>;#}n zImLY9+fliE>)tN+(DnY%l^OC$|DoYSP~Z6fw5rh%?)C2dDA1q}5@lsT!B_4?6Th9F zl%_`ked)=-Upox2gLO`TTvkrm0QLRh+ITcdbCkA3%7*{xv(uu8C9!o|x1E)E1}?}H@7*l51oS{P+=&+Snbvxv>LSPg3U0`5)7|4TAs#jU z4rCc_3Mg++4o}fPbN;ll`i66Q1ulGUhj@9Sah{uBe4mndSCOo74&)Zb!)v*?g$&M0DrCif;ZS zqvq}GN+&u{zxG2_-=G0(VCycawoG7fn?S}ayr=9h5i|fK!7%g4&V1dZNwMca9H*Vt z5j5stYGJ^#RhrWCQ6A#${d9NUYSy1)V0l5Ydsl%7E9}ZfY45<9z?}5SfE(qF`waQ3 zkBlyvo$!X0rFTGYL*v1QNBYuOKAZnXuKX&;N7k*A3WdPkX1d+8OFJEMaSee)mkX0t zO!1!(mnrbL&N(k!ke06@_8*3fAG6kAC;`ipFSI4zyOvdL0BcvJK67w@?Rfks!@h#_ zUK{dG+%8>&En8NqicE-BGvrSvw1YffU~YS3MN3>CzFC==42M-8yL{Cz=)87>%pFX> z{6Pv4n}i%UTos2e8*j-H;WK=V%w#PoR@<&Vpc=qS%G=2}l>~Nk8ZY!39{$3 zd>YeR^@-KN5l=5?v^024IW!FeT9f}tfb6<%Z8vPBUMOzBWF3yrG@#P} zi%O>hJ~&5!JN?h2ti1el)d|B^0EE580;2V4F)@G*0-K&lmGm(9xH+f7vd9xHCT7z) zf7Ij4&rs2kjrj1vvh)wGE0z z!#Wq#dmIh&HQoH{eeDBJyFQ4E!LA}Y%lI-(u&94XG=p>fdw13Jx@L@@!{JZa%+f3B zOnl6l58*~1+%&#U_GJ}R9-+#8GarAxEmbWX92yi+M94a{4;uOXFvgl z1JfuYMhE$-^gP1p%QJ9yVXc{(idw`ds4V==)J#gUtKF{p?+7t?U^uSfSU{otg0D+h ziDEfFeG}BNCW2PGsxd|TCUC*JPQdT+|Go9kg?V5WHPf+GtpW@n1)!BbaGciS0eF%$ zQ*sKIRD}R`<|z`JNdJk8*Yx^o$nmL)p6=%8rjcDAI~0Y+ebSjlcrAD~yD^EN+^1Ub zxSp_1q;sFBM~)x&Ea#=g#n3tOYa~!N*~@n^TwBMAJDvPd!523@K=p|B4^-{^?@Nlm zsB%J3RR_5V9`RC%sX)~G;TV`#AfSkT=%cDXpv($D-3M5fASg@}tKcM#yiX%3kfcXswOI_hHhpAjAN5XpBm zigs>RLA|;zsKM`a^St*|8R-MJX!vrYFcyJ2M}S;VA_AIpo^l^GeAdP}I?_c45UvA% zd?7vz`=6D$B7P^xJJ6gB>gRtUuc`=X3R`sFdc%4Ql?IJm;}pKH`5gRV*OGXhlWKAd z+@nbpQyUY{?}Q{FUkfXq{{c&OJQLZd;5~0Cqb$(6jp@=d$ihq3aF-0+x-F58K138h zo|&dXV1d*W#~w|H?ZfsZUr%rLxg<<`7<>XXTikbima?p0CkHn-eZQUbAhqR^f{i|x zZ%;uq$#c=gA*oNq6@>BjAH`_4y`jh=#v}M2{Eqrdu4Iro;>1opW32&?;T6b&OFal9M)m+*>JgzYV$P z`B{8YkF_~W#!0n+3y$ybj|-P7#NK0CZ|3%mc=Wd(%iXMTDfP(dPViw{ICj`(Ey(#k zD9P$arHBlIDi_>EOo56J1qZD zNoiTnKn6SAQ6Z>q#Cq2iap9N+Qfkj<8zptnnYu^5DBPVrr*q`LwElgjQxs&eUb$Ze z9Ium_WyH$_)j6DlUz@hD8b>8nrtRh;1`Y<#MEk@J0?2Bdio>*)fcf#pvcbLrC?P$= zQk~?vm~!NxFFQHL3n_h@hyAhHB8>Vv8DfhI0pxW&^)mxIAj;1|9>*-o`ELr>?L zEUUPwhBbzjSER?li$^2{CZT7%%#?k57MZi`a=V;IuRtXW#Bt_5=D-_7mDfz*cVZ1! z{a(jLUevO&5Ujx5n|pUmmpY-*Sk?QpLDLMIQLi`cnZgI>ULnfwC~??eNR8JJF0wm9 zW(5y)H@_uWBtGQsoo2Tf8@z@znVIVf+@oa^JeL=Tj_lp`O_OU3C4+KkRca}L@00_k z;b2c*D@7xKOHg`u8@$j9hmJ14QY=@SY%f-EuK6y9h2`t#SlHVyGOev(cx^FAoeL(< z?!c$&B`S#a@Z;Fo1PM5L1=7o_QUG1?DP6w2c*-eGP=5k&k!@8oEs!U#e_28nt;!V} z!8W9M4T&|W!Fz)nm5%4^KgN6reN(91BumP!j2oOT$c#g zi5#@PcxzVTO`)W%5IH-HEdiYfX#G*N`u!$OX1)5Li?#7^W3;-^u%#=DCKg*b8^*h5 zZBOo22=|FFPA&9Fwt~~Qqwyh%D9lEQqpI~#Zef8eegZ(kl|Ih4?1ak_{k63c8{x6q zrcq7>aU=B;*w*rXUbHglux>5^$7;JQO9#n%K!DT2K}wO^;Xg-)Ail7AqcDpus#z%* z+z!!r!=pU=*7)m`PcAV8vW71zYvtZ$BPc3A;e&| zLn&{-&t*x-;RQk4*dAdQu9gTyOf!bz`r}Q=702^Q9N>EhUO!cV%Ar~ULU!e;tQ{{& zgl~Q@YDh67t<*#D0*~$MTAZVlaW3oGCEArpy;ISAL);;crq2Kla}b1ieFl&MN{`Gq z0B!)r6TP!_@OVhmZWGZpV-uhctH5k#&gy-EH+m{Gf#r5R8vGsl`-&B3EuWD3~HqG~gt zAwLHdeD5toTkPR-R3QHGrUSncem04GvE>hMSk^FylbNILOYK zR=I*~9|T*-KNWG1nvHcH1fi~Ty#FbEnH*@~%Zs^lZoew5G-^Jke6PL!i4nG*yly)Q zEj=90z>r4jL|!zx&@fDW_PuXoXxjdizy=N zPnF~hS!!A8f%;mA1iHfH@jWf7P-UT?H-#5(cR|JE-`<=lSin>p#R?oy_j!25ia;ON zA!a(|Vw&Txy3ri(WJ9;xuX}^)AAl1c4buh#iET%o>k7c+{4AJ6O-3&@0nPrX;!Gq| z_Y1!f8uO^~{Z)b3z}J8qZm+Fc%`>#7OHx%h7vXHl&zE)a-W1Y$;PNMJb+M~v$~pd^ zlHc}YYD9vX2J|?pRlV1*-R4@TIb_fXU&KQWXN3RLQ`}hF75QMfS;JoWiO{VKDB*{p zQlh(#5HCw_FoUkYyx8am-8+f(6UGnj*-iQ8?valCz5V+K(B@99Smh3SuWb|E+Tw|- z{Sj{aKTe^XR{4pMFiTx^Oq}XtQn_c*h^j&MU@P?h+;Zh|IzLno(8-Ts_TE@ws{pQF zUU+5-lk@msd@IVp74!_H+jT_4+31Tz1=+htpz=9T+=@w%JeN?55SCe>$;qWQhcC{f z)Xz3w?h0Q~%tFl!R{5NwsGlzLCrtMpFBCkYOD0ATxzhtN zMf@g?dBR3nyRX2sBs*Ccff!a&p}^1nwTC_LJcN2r%6da* zZmaT(?|?$nd~Q7lWNBOamji5c@MG~m1@fF^e=Pd*a&KFh6Iy0d)r_*YYXUm&`&^2SV}fJDFK7&~ zh$se>OlNT#j?XaCk1H&wlLL)n(#W~;`^?#Tt79-G-&&#tR@aQTR!zzBIS=ZhT>Jsv zg}Bb@vxo|ObO9{Rr$i1X$1a_h5`@4x&0D=_4ps*R#TRsbQFLp{bNO6RL|FZ(yb>Sf z+5p_p`B~Gp?l`S9Pe)j4@Ge(YL zj0TNGL@QG}Ud`77nkXr=VZts^lL)-8i_72y9@4~qK3AO|`8U4vX0wxvD?hwF*0EI% z%s?UZ;+^^9p&x&+h)`*1HW4eQCAY?x@f^p!!s-7+`~%2P_eM_`SBvDe!6+)25L+#c z{M-FOMaHHUD+VcL6}TLB``IpUUs#g8zG3^&`CX;MngK|{c>sSwi?lr z4HP4!cZ|QBiSLGps8+$mVz?5A*dgazy@s7Lbe~xqFBMbQ@IYPtWJP9eT6DAqCzMWO z_Dmr-x6^6Yn26FLdXCIeGOj>etBL;c^Qmjk3kzAjhulSREtIHppW6ewVbsVPeSpbu zl4Zh(-2n~d(7u1Jqt4pF=b0{4@1YhAGCatJKW`Fzd8Rnj*9w(Zy}swTLkr%);KCT@ z3?YX{3CPZ|~H|%Whs0OO3eBF+nHLhHqioD$d(LSZ_=BwzSi|#q3A-@dQ}-8fGl!^zX#LR+Z@n3D zrvva*g)bVA)oB|!x11^9u>gW*J`hZKR|r8xYcT-uVc2O2=2a8|43U^m#JN?fHo^ws z<34$vQcL}hhvo`C*yCetLlpPHt7_;DX*SQ^3@XEXRQuZiTK6?vdeka=7GK9C;MoQh zzF*m<0@j2n@S?`|RaFNqTl=?;7I7Q1pWH>u)F5&5{6N0UT=jOkHam7um8jzxK$(W+ zCR$#qwoi_?t@M!6x6ZEd5tk%IJcswgu*c!env@{(td_q ze=0wv%K8j*rOe?jny;M)nnGkNu5#aUW|DCEOt#&vzc>uUA7C5_xql>;StDKuM-?=k z$+@sq>C*FV<-%8od@5geB`jFwj}K+st|P!FAH?@b5A`OWOs}uVOu|cPc4#xh^7#_Pe?SgOt2-jt931^}e}06Q7ks z&7y(4+5ovEXlziKw#AxFzA8=mcXNsHtzQWIP5Nt<-g3kxAK!1CgkF8gO7}CYAMA9U z+(~gkC=gE0n#&UdE2>QWM}10+v1>vumXXjDO;OzZTKPG0t~}2e)Ug+RS+= zaA=ZCiiajDMvyd|^v1J2UBs57nI`Fb6#CE3Fn6tqZ;=Wq5Edc?jgQE;$m$01dd{Y~ zMBLLXHilU$O_&fm$jzo%5bY=D0R%i9ij&(Yk7!*>k)dB&n;UP)_-i~48hUXWde*a{ zRIh1G@^{6@`b#05&>yeH7GI*K@mK$az|Rzp9cr6a^{*`y^uUY@B<=eRtpXE*C!4MD z2nyAHPxbb2Qo=9#@nD`%M}84%6(&a42ov#Q;CGX=N7$5$B@q)3%j&(bVqypWfU&b+ ztJ+te_?kj@s`x@uYeG(vlHU+Jy^Z7bJM`AZN04_JOx7$GIlomR+4hlU=>bT zA1&Xurb`_P^)G#DJExsHh6lk}8p$ye!u-G%bQdj<;+_Wgnakx`tnz@7YO8hsO`nBL zgFR?!j@A9=2)hGSdYc_y8L9t~q_dM^;Ie!7)ZBf&AWFfCMWKfkQD)ihOr}f2n?n}! zH!N>!r;RRhj?#44Y3map27Ac5gw4&c4xS)g{jtc5klnk9xQvbr%OiNbvU1mNk91YZ zZ5Y^iIxeq4iUu_fN}4n_-PjQtIXv~n`;FDkW8?8LN|RcVNJ7xL&*8TtU-n(R5tbL;Wn-(aUFuDVm?MP#Exu!LLJ2A58bAN_QO*&;~|cF2{-bR8-eq)psgCT>|0u( z&_n8dkY`|kjL{UlruW-@1hz3Z1>d3QT@$iwucEKj)Q5+NDkAVgXXmI*=M4(}c8I9? z3zBPl&A`gAAa(Rec2pv1`TLklrIo=Gi+8EbaE+*VJ8dwCgpM}qxA;#5tl*$>ywhmf z+8Q+r|K2#a{x(l!kbZiTCJvt~$(^1C|Br z--oi3wHS)U#hTZ_w?0&bbrhB&%+P%xhE93<6EHD??d()E&uRMJ1*&9JtODj>M?lz4 zG*60?V$wEbS}smbf)m`2XDu6lx-re-8V|CMpjzdSDu!l)5si9*T+M}`9`qn^8~k@P zW3VoZj=XVz_mIOr!xS34{8S8ez#IusXfmO|X+tqfs3uK%gVB0IIH{Ag44&K8Lpi&` zZx1oouVuaeICQ+w1E~}WT6#mjHec*cJ`|cJm6-O$ac$ z%`3YL!x}exQD}|<7Nvs3swi0sj}PgSP#>hGEM$Vtc1cZd%}~WYn*AJmb9kfa;_A|a z!~J&3tM}ApNN;qWAm8RAn_-57zv*;Nn_J@1Vi|k#&4-TO={^u`;55j!&s0E8q?c32 z8Q`N(GhF1mw;a0aU7HCk_gin~nLUNEc~{rx=zPni9X-FkKd&Qu%D`99-x^r$bCl3; zj8T?;(x#{FlT?}w*uEF+jFuEiY;>?a{SiY&Ps67N$xsPc^ zWq%Dnz|@O$M;oYyo`>fvx9Lel)b=yzId)h^H87g;PB5U7-H{an>Z9krCniq$_Yz>) zXkMi>7&sA!wRWCPI7h;U0*TW*0EwD@gFzYqDYbb4a%{8!x3Azsdo<|TyXx$<2^)}( zZKQgKwe);iOt`!++*}hFi#E$!i9$@W_hZNN+V7O3``CT^-Q%K3yiIg+ekXJAQdk1m z|K1}f+lN>+pX$FDq0fV7mDY|MGfh0axnGDi(dJNi&hCh8aLc9{b+#pQDp!!4@Y-ej zd_mYRTJptyyx`91DN?EQa`u}3k`G@JO=p#dn$;fEL@PO-o;ry|Ss`1RiV(D@`!i~c z1xe(n<0|y)*il-&k|irIfgqfwvaA!11uRt8feY)rW@kOS2}s92!akF6B-oRa zpZs0gWBmhZw>D6`n+8+rEkM|=e$s>u#UELW>xYm!Z}@&?E_W+N7kFd)bx&#VQ-JAT z06%K99&3_=Ig?C7*E2Tr)d&;onUa)=k7Qk!XVM8TOx+%?sX7B)zDiFVv zA1SM1fd8KJwDy)i+G}hqe`!HOAni(0UpW%v)`WVm#}Qkg^*a4P+_T`wJcfx$Ml@#E zYRaroF*U;xSEVsvx3ZS?b%&dI>c101{Gc)Q^6W^7fOSqD-58<5x8XQhpohd!k`3dt>0^jbzP$o6)_U+28YFZwXM<0X1H=w^R&_U_w_(|BMo zxtGY2@f$uE2l3s>GVN26Mj$sqD;`LxHoYThz1X`58J@PeZ@Um78KNZqIJ@&eXm&&w zzKAUSZ0h%I89MZY#sp51?XdGyhf9M0DEL~-gAW8nLVJ}As=&i9}pSQCgEpJw#m z^?~w@_N}SD-{+0!zk$j&A0w2%HV-EcG+*|Tps$xS>d<*Kp&H6-Fw9&Ljz3UDa+WD! z*OZM%gFCmFZ$mlAzyE>YD;e|mj7S(7qsxQteASCJNgG1rKF zeQsL`H@|_r`aE?}bFTpqfY@LX$Gp|K!P3$cQbZgq(`Rt36f4zt*n=9b{zfWq=>s99 zj2$htNG@?}*rOaNgdafqboGZ^byzAx+G9Q3mkF3YGa?4o=}4eaTpS|JW>p7Idy zU<%YfZ;w7(w#v>TAI_PuTQ!6<=toH0Y8vF8_B=WN3W`g z0R*oKsDh({OC7R<(qsxL-wtzGsYtDA3jLk$RU#ZNJzAgb6rAk42!`=Z>An=k@Vs!j z?Z$nz^;vqZiRKbI4N&A1{JfKq65oTc#ziU_GyO2!MQHh}b#ZAf>zcmpCq5Aa_u0I4L#lqZNhC+5r<7Lv@aFH%Zf$K zc%aNTLoS0u@Gd*6!Am*J(I`820o?_`$F=b^mhLTzZyMH|`sL7HB82th`EW)rIttp< zdIG`GRoeQrq2^Ah}#akT0TL>r!~Xv#R8{Q&`u;$*ydS<1B+-9>|1rWW7?jkJ~y1Q=s&MREDB zIsTheQn13&qg%?KiawLV+Y=GzT79B8PJG5rrN!SdEL}_-uRquOduvQK@h~!3>lh1l zzC5vlMdjRp&qiMjMW^SZJ6$))EOyA#hRyV!qt`VU8{(-5*q^{!9C!4xyD5x{AnYhS z1P`-$rdZmbdCym_Gj#(=9L*0@__IV7)MB?s>BzuBFSj3bt93&))&61jn-`|t{5mwt z#B@%5*rLMAqQD_E{M!rgOBYoh1jt8a5c~D~$8}08#PZ%d@qVy@qA_S?xuXQ`Cn=WE zzRlOk4fNL_)|FcPHbek>pztI=2f#_uR$JdME5#Oa`fbUV4MIpV`!%@PZ(FRPq7juIt6U}Wl)k*U*@V1(V>229F{hd7lZUR{%uBPCsPpD*61)pE~xMl*573U;EJk?FMREq8-0Kk4a zJQCiz78DGJe(*~v!dDnwQ0caDSD7cdG;}|&sSYJb$G_>3f9^a`S$cF@; z(FJcG95sV2ihb^<)p_G=E19+6UbX#c+q1>Ug>GU_6R)p+d5Jvy04aV=VyWnjDD!kB ztdk8;UmD=H|JL@F^UkB}aKN{5Lw?P)6o>?`FH0|bTjg_lG7w(l3?vm|N>jj*it5dE z8x^#~I)suNhZn}Fy-gRu1}#LY_a$PpT6>4@$S^I*0z+LR8U^ldEqzAS*JWU1u;QcwsQm9Ik(amg5-EO?O_LMdlXlZUpS)CPzY}J& zL)Qmo)wa&=6MeEdvORy57N(O~kbKpBTL!XrF{COG7R@A@H#@R)jsQ3WFsefxxtlV@ zZz%D44-?a~E7Vq|T8+G8)p%rT)Fp?T#6WWR0l>_ctZ>^mG1|m)BU5YOk|A)ktSt19 zf-L3LQX&C)GTiCm<#aAkP2>Od%%l7*DnTnV4gg#xtagdcrpK&s>>L5*wkWeq-k=%d z`GYx-h^46g4GC1+bU$q*>EEgU&3jHat&RI@z%;ghboc>WbIEbUXb-(!YiS%~Ls7D4 z`E(0(S{i5SaA#;3TZ1FXLjU`c6Yd8&lec@gA#qfgU?m3r4LNa($8^D!_KjOIpANsy zCQ1A|4!`iW4)>=elhLk;2EoOJ`0{b%4YU;XdCPEGOuLBeS-!t}^B!Tn1tXb`nk=KL z?Wnh}MtH$!UOM^x%-bp*`(Ln=L)R6hNCE(zaS)dIZRb>rE-8^_jPI3N0VU1XsG-V3 z3ObAJDf0)zV}t*Nf4#L_#Rti(oB*KJL9>M@8GoqnZsltm%L;og!eAfzbfUK?NM*ym z-bPQ#<7Gu0%%!&mwdgEh15<8kAsfZ|b8SniS&6A@q=~`kT^vB39P+QBplG+fcxYDY zlIx!%TKbM&V=)j?KinujdO^IC^-VjdoT!gb*0_D1A(sLEoFpsQpK3E1bs#YG zDX-5+W=Pl{GB@@Hv>IQ*j?9LNnw!fNoGhy)rN4Ru=F3twe8~}hTCfC+4n1L5RF?eH zZY0rPPPh6d<2S{Ir!bRjnL9GS1(Zus+KN6FdwoUS^3+RACeeOQcvOtqjPW3oTx)fM z&CN&qIqb{P)%-`` zqOb(?y{09$=c?Ub#brbGn~xVLMig$`V(oX<-I1$0GlBJf>d9W2(Mnc@2iJomgr4x7 z%>o>!efQSf$=?ehA}@>1xzsBaz=nMk;w7b6W2L}w~(mb|koM~FpvxrX%XUs)$ z$hJu^hnPbST0e3?w=iLhGT=+JxrP$*8NI}CI#1TlVA}i@N$zf)opdGMeB|~Pgfy9~ zC>ihLPKq^5U-&7mr5O*?4!_7Hf$bwh2jM zuC(;iVab2i+D2@k2CZ1Qju8(c%I{QPq7VRrNdF-e`!E033(e?JP7`zuO-&$HCKadT z97MBY&h7IVkeU$|Zz@DJBwLrJp5{PN{&n!z*~R;!1?G!uyGM&p1fPUK!*L#t__+uw zCTRO#ir#5m-;n6xpFYz%(osa>tozvq>wP6j&|*h&Q<$h~B}?={WgeqZ##T!=4=b zf$Z9e@?cd!@!ICSjmvLYJ8IPX=a6t*g0my1IN0(NZ!MPcs&Ui6g!pY5&6qV z2;5-;BD0O_o>6(tDdDQI@2UfG?!b|RCs#X&^& zcg3fp^_Pq~5Ab%MJ)9kjMIT%#82$YW^fNOb&kDq(dsH_Tc{rCO8tx1|O;;!iJ3E!S zk-RiL{-JKH8?D1H_7vrL`js(lX8rK4d&Iid-E~@+k+YMa_BibYoa9oWoFn+{XtV>#LQqB$UA4xBWV(_Oj<;t`mP9ju zQaIlGX>#@}uYRgR_;=%C)ZE&kh7#Baq?Or2KiS=-Vt2!mV1wo_6@nm`sjkAy+$Oyz zGb4)(|8_B3s)Ko%p00|hgSv05BEY-f0zb_b{U}6nAe;JFTdz22k$*e#+E%EwZNz#ks-+KuUP~}pV0rGjVD+-1 z@GXCx<^y9Rwk$3wXTpn9)xh_?f3XSph;x}hNIJC7xtY3~Gl;vy$A|`mvi2S3Ry6ak zb=vX6k)tr%o3W?~6gPU1C8*Q4ZK#9lM*VSjh~>~FX_0Mpn_#xYKB98h< zA}4Fm%k{a=>UgdDT^&y>-#AW0K8$EN+^R{`LSp9N_4!I_q;5Ft+k&aEWXHEw9Kv6d z3B!jxKsxwcV2ISs(SqkoRX~qnp&K2_hN4132kz}P zK#Bq%%AEKq^-Fi2 zk??#cV-X)ofDL^i+pY$Dw0hGp|K)rAFDA68KWbvZ-{3l&$@`r;X2enrVBrKJV1@2- z64)U69qk)8 zE6CcM-}7CZLFbIe@!CBKAY)Pu9NgZy_6XdRV`I9tY|Y2NAITLlb&&UEI|*r_aVA@%L{ko*bK8eX3^pZ zO<~eCS?s9ta&LW(DjSfH3MhI)SBGh7u@aqC7I@z^NrKbkSg;o{0-=s|ES4ksJ!g{o zlcvgXu~~?rwnF&c=Br`oG?Q-I^CTDaX^pp0l>g0kXpRpsE^fNK6I5GZ6C^v}1gP3K zDCjGnSfG)fFXuo#ytJh~{WFWe5%KY%nEwT|8%^nrl-(x4@;MVf*^+<(6w=AUacC;A z5Z2e9A{XI!hil-+yX$`MAXNH;!+W32?1sssm~6^~ESM6P=r38|Q%G|rAM>t17U6!; zGg6O86`>H-$8|afG~-<%q@i!v=_%;|h3MShrAyN&Dq*nX6`g(}-Zj8*>F=}>2l&5w zXgCegD)?>JO=3QOJZk({Hd&SU`vZzB&zxq}?M9=AX8L%>W`6z2lSKXSq;eT>cfauB zD{f51tX`wixrtwGUL&uW~rdS_sE(Z(BSufJWN2Z9ajh!p-K=!xSL<9s3zE!8dm{g)WpgA4*8 zy*wG&xg*#k#Dzy>kF*oa1429!j_uyEyfIldq-~|c{yAb$9CxU=Gh23OaS@NhIduPhGU0(2CoE>Kc~(o_{FfF6$P?HO&|E&stWz1L{@Q zUuUAYy^GJ+C0i|DnwXR10a!{SB-R;z^`2^QOP%ge$ss7O7(F{28J=~eg$H4+*&I>d zwVA6SgnSr$hofDCl;SfqCmRLhZ6S({${%XBMxSl3@MtU*n;VSeCgveWm0_^El1knc zIW$)?3lBI1Me1tq)SQnVyU^g`1OHQHs>G!*sOgVCbPHf_cO2-!`nqv>BQrtvTo#|! z%)-bhOoy8*71;)g?#--gL{M^|h2uiqu?y9Z!#H|Ss=F8A|HGykAxhL>mK7WbZ_}(* z4^6>0TSy`%8CIAa&#j$!Wk*5A5`m;~UCl7Bgz50H(UOSnS6tnhBC@({lpMZ75DI;_ z#2OzdXbw>N_zxustp;1htOg34vlG%};@5)$0*)EVK*NchRhpB8*=33=%vLmEVv((V z-b|RFBNNkrn)?FV!>HY^B!l`nP(6WwN7QDm3?5otYg^J0sZL8m>QXxh`9AA5G2h_HU}m+dBMD7|gfA!md98B2QS8#sP{ z`p-I_py%Y>Et}#psA`)R6R`aU4&_1SGvClW7e)1BhmaD8bEAW)ITJdHI|RVgRy`+wYas+&nG$WX4}ul-KJg=#aZb!UB34Jd`j z*sM4)-Zei<2zrE)7+N0J!wVz{Uh&2WX|j~ins_y#GOYEI|H~BE?2)31o2!4d6|dL{ zBGG@_L`hg&-%sTPXd5{np@bIII`Tb+qv+2V>bpV(VWF_L7BJxGrp>uEMY2N0-+|zi z8C_FwVa&b&#P!hI(QV-w#)g4kpTP|{A~EiNf0P4=pX6avfin>8=A##(R~?upuC`ZX z&p1{Y_3JiCtaI?$0qYI0z?@~awU>K~OL!!kkUGcYE*kR!?A(p^^-}b0pAa0a#03jc zP(ELxt{n;C;w8)usT>5nMeL-;#3F^l0hfrB>Y$Fu?c=d#%f5rXil+tBJDrNL#yRPF zcqsmMXL>TT&L~26Zz#E(ok_(U6HU)1j!MiYXqtv66>Yg5BYu`UzJ~FlA~xsqwAXSU z5PrkQ9Q_RP!Y%~p+*I~Tgb$XIU$PAlSNm8y)t|2(7uv>_5W(g!12|A}0?G{9#ovQs zD3zhCSU*+I31&0MGb3`GXK-WWx^UeFVLG|YOfg^SG`TSl^o%d0clC3PLVu<+#r4RD zh9#=?v~YA^{2Z_k1VzZC7J;ZPOxpqW?~$Gtv);I;!w2CKE*%+Q8KfD>huuK9-eFy& z&Up|xo4kSq+6f11v;`D=R|7V#Rx8dA*6+>SP$iu-%=h4bt>~p9Sb{fO8C(H*Q(6I= z(PLY#BDu(%0^bzBZ$q3$lHZWt-D#0uxt$c%_%SCjX>T}L%Qs5?ti28{+eN^Q!kGP1 z6zf@(gA)(5sH7%(aG-{}BStt$19J<_`{ou4((meZ(wp8L-0m88tfIW>t+a;QH)oFm z1{LU__Wb!4VxOObPJkP6j@^x04W)|Ueop@N;F^R<`lc^opU9C`nRNEH`w zVD{R6Ik%`Bb@vnK?hsfk9f@^3GOkPWp-U6Ujxxgp_LoXgX3(zh5sOMLtX?hf3R$t- zAq6S-(dp_rFX0s+Bd7}6*8y#yFG>~43&@w%2-+YOjxjKf<3(YY0e+RX9g2OD!G#G%JF)~e<%>Til z9Nx*qWHv`Hqq3dO)My~)zHE79P(QPV4tkxWp1}QP|->PP(;yh=#va<;N`d#w9U(fFF;Rr zJRMozAE(9UO+l!!F$&x^tDmjT%y{_(B+BBHwGH?1vXf~4n0yF9L!Ms@q_%E=tl{DMjCjcaj zLBCrgsMMZ|VYGgLY)G;C4fSIOvF!cdF5}~{$LMKVW#n*No)U`xh|RdBj(#-7iPqLA zWHrlPcHMMf9H&N_38hF0EhHJ#Iz(>bZBfNG?FV$P$)vkXcI(Se8f1?gDYQTz3OcXL1B^n=D1-c={Xx0*HTxvVRq_(`F#GvTCpGjGnYe{dxg zb+F7@r!tO}|KCW#m+7YjdLa@b>o56oy--th6D8DjufsY~JoIzkv9Og)ZAz6&0L-;o z`64~c@3~V{j|KhUFFmyZjUp#0N2fd!_L!vuD*{ZJMreb>rRnVG_W;`!@W<$e$b+?k z>E%z%d))@WLb8lu{haV^xrmr@!8Bd#t*t>FvPD=NWLLx!j~Gn3OT9`s4WhXwypb#i zy0Xp4?D$#`a3%zDd1~!_POYB$F~U9vLFlyztw%~(*4wiaSLq>R6*Q|48WXP%#Ex*! zDm!*U4Yg4m3w`8|jiB#5{1{J^MC5Cv2 zbVbm~FX1_$%mx3(XD}fnR*S_ESz~~K{7sYlAhUS|6qpfs&nNyl5c0YG+Rs|%6boql z6+KTD&H$b$67$yy!~%vl^NpY9NU2}M$aijmbUg>my=O<1)$bK=Y%6MY2!t5h8}bZS z*G{VNpE005gg;bqXCx+?=f{t%4Go$WCm)7LmwXX6SvSSb*Y%%EF}T(0s862-aNZ~)-5r6j#K}_+(@^uzw}Jj=C6t)66NP!1YHgAUdJvcioK>9$xXoOxw055cc6C}%8ReFxj-#GC|C9J?D%!v zBZq{Z|>tZWE)P-KzrW*Dx9u)E;M3 z#wchxc1B-bD>D)CRVW%#_Gqgw^(;V9-0I0tmy6&@9TKg|`}i(t)x77qt_)a((vjsB zZu3UFiCZ`*%ouhFjgkGtAdvep4N=z2Jp0-6k-D`&P@!LVni)>^Is1k6i<4@`=|eYU zD^5@3uV=eGuxidI%1B^E14%FX2GHEX-0@Z%IIZA;e^Fl*5xfq5Rd<`7j;*%QSE^tX z9b!H)-(Uy9G`YC!Z0Y#xQn1IplRez3vn<{f`k_K7$z{}`hj09S9~dWg0T6%`n!<>$ zL=0a#&9-RYB@jY;EuO_Gjk5}lEahAVd@3ZrV||o4(th|s*;r~#wfK%JDvGkokeo_P z_tE6pWMl_3N@P0ojhA#Yyu`;*lGuW0!v@mZv31tUht9|W-S1d;G?Quh_>)p{>P#|405p_EO(;&P_`dN=8sv>3-pYMJ%4#d|Ii!i#K(q1c zFIVn?=1!h43AS9lQ!|3EHw{4~_@-lCW%d05N|*bH+x{1J4cPUhSZqnCr=_>>L%%?M zY#=+J@Ml!h$7?rDJL%O$*9ibgiZ zqY!RMvIZRqK(A06hryoDBeO6aShLk>;5J@>ZMDyY;U=3Bc_Z`nWNdi%9}jd-94NQ8 z3r2+aE-VbpF;QJCLpov9rb_Q#m8tyOB425!MX&Dvg%Pv1R#ubEwBR|KGW04k6?P^? z;Dfc_@+7|hZ#yf#brKReJ;T3T+rLIRY(FOP$Q&WD%z}NL*tOSdtm{Y}3MgY1Fl+AtpB+WOERuD~e8LAs#TE zr#~c=c|5yA!Mc{RhI)Z{?HeX2`BmPq>m>_)p2TjF;Gy4jTi4X>Dc|s9&5;k5wqZ-O z1^CT766!IWck}qD$0gPTSZ-wRU1FPo$%E8(o_cAU1GWNduH~!$jOn{{aaxdKTiNg( z!76qwELO0;Z;dYtpTH|dnCawG>M(^F#VcD4oUNDID!9HGAwuj7aLaGmV(o@t^9>h_ zR9keJZAOzNe0V6yK5T1;^4v%bMo5Jz!BxVP%e?G0`|@dw61fi*tX5|K)Vm@kQH~A~ zqETK{5kz}#MM~{4IL(ShXv*JPDaehNNE;asd7V?(6{5YXaR?K+CPX(d$c5_GHPR)}m4WM9_*3?cMm9r^r ztw%YnlB>yB3}mXL21Si*3ml%4!XXCWT)GUCDkwYrxI6o+gI6NQX>LUDXze3wW&ibC zo3o2kfm2UyY2fgd0dDF)oAwnCo>yf2?MoFGac?n`o7X)qn(K_9Q)!rV zXu^%xG)%hKzNzpjM!YQO^DRnKJPbtqS(v|47^8AsDi!wTV~#}eOaO6`v@Oux#menr zn}x&xRg4iayFkE|5NZ*K_!lDV3ox!(@D$>_k`2^qEVkY=s}d28QMNg^3ttQSd~Vh1 z*<9YBOT&BrA)4h!Kw?$5g6@Zfa#B=z)}4Gmj!7Jysz7AamJIO zov-X4X=;&Y985Pws(}hY4z*XzMbhvPNBBrva!OWPQ6oJqvc1AsTfS*Up6ri_L0Wo~ zhXkq{j7nd3Uw`nKxbdH_*gg(R@&kz9$6cV3?TByyZxovRV^Wh(?jlQdELCLuDJVc> zgMEN_P?%s9`K79#MoaOSMA&EeC%EQQU)~zb17XZ%dV6jBI!eke z%woz&5h5$nhD%C7I-mRerJtucO|I5A-4fX?(RN!Y3JRM!#9G!Bu_X*BNN)?nX(r`S zR!-d!*E2&Nk&#=6n636OGc*k5Ha}1DBPW! z25Gc`dMiF2qM3{9Ezm5fCb=lpHzo=v*RVJVSBhF;Hn@!EM5Z|hv0LiPd@4{%Sa--B z0t8Z>j75ssfEa2hQy(Ol?I*n8K~%EXghl3Jxk(>aG#gv6&}FiiP59(R+DFtjFRs5V zKD(wPuPePL<5V;B*^Wl2n(%lnhYvJCy5Y^uE#3he3xqIS+B;Ysb!C5T2o!*^U{CJ5 z{-DM`23II}mkqGI)I5i6*#3a)@fN&R(Mqjs=47rD39{QJSPQPu`wWQDLfV#X&g6Q_ z`0fKUoq#2iDt^kUC8kJWA~LoKc{fA1)-G87!f9M=7?7s#S<|z7wy0_bMe)RpOOt#i z&RNqg{+ZC{gej;nG7xM-jwIkC*S(2z`cU$Ph{~hqVlnG`1um4nx=${jGG`ZE*^fu? zJa~mqKwKQg`>8YE+O17dp`tY|#RoeK8i@R-FfE^mz)znhJzBQ^2p=&--DKTpq9i7XKtzuPbL=c+kU3x4M#}W^irwTPf)_wW#txvpuZ~2OR>X#cIZr z1lo1_Xy*pXH!dkC;G;thLt$qc>QWej%6`2vvO+ja7dF#XPTl%7?OgVH-VZ}^3Bz5^ z^N8x9R7RC77MruXEVkFH$Xb>mlMdN9&rpLpaVN8zvFu5wkC#xq+Ku_zopg{&7JDxi zrXLn0tnMX$M`3KsYtXzu7jrN|$^Ehz3lcq&Mi_*NKjj!w5*VX$K8N+%7~e`}XUrI+u9*E;K+FF7Aun#8H({y;(e^7e2@p(4x!e;cy!=spf>x z3*hp$F}b~XT33k4*z>ND>L-eFo^^j1EMAY<4oDv$>SW<1?uwkn0k;X?Xy2{PIVe9MP zXZ#UM%Fs7>2eZ%uK-1|mjKn-Cu+q5zUH9f z%^#25ji64D(m4_6-fF_NcWjv1En17%L;JE|i%t1>Z3WcBC7roChEubJ4DfOMHL9i1 z>(;@SCB8kBzDcSt)|>Eo_V=Fzqiz<2PIgQPs@Ngz>F%9zS?T@csh4k1Vb3ZgulxBhCKv+J~P)htLGIhbcw0R{+G(u!@G0Is`3pQikU!RD73Ew~-B8?>5s; z)TAjc$*IYO)J3&Wb>fwrpMB+YWw&Ti1HRuHqp)-&`LWE*{zNLN2%j3QMadz^lQrH4=^dMXVKbe)w`D8)U`+)IB z;T2o*DUE$4lIj_4y;J#J{}^^uF6gU@7RQR>$F_qx0t!SFSPCc98yLTOb-xgK-Nas+ zcfjn-u0EiD0Iw%a7qi;vse2U;DjSbIsOq2y8r&q!qbtG5A<&J2(h;WE{zRHx2$#yM z<1~tBtygrHouj^#{P<={>_7T&xg?h8bljq&9!O8ngJ1u-)p2JV-2ts#bv(SGhE{Y> zBqD|kB`Nw?VoJ<`XcyB7TQ6t29VB1PGL_c$cjjb%A4jje=@}w#>F?(M;}K>aEK>B4 zCol|a2%fOTR6rMKkR zJ}AhTOEpIs^VgB5>t_30<2WXldQ|9%vM3=O$pyCOtf5yH+lvybhc_%Wlvui=2%bdr zh`U#%yA619tqfvbotSFn!|oX8R$*?TZ*9(iOCmLq_F`bXE8FvTJSw>-hDS{;gf$Kv z*jc`R@oXjzWgCyJLZ{HHLH=0#rB5R?A4g4%xcDI~=|_)sd)7WLkK$?xQnTunc!HMN zEku}aAv)15zLeF`shw;~rBfcV&xlFE7pLZK&AQLwcJpZQNm>OUbKbjjj>(9bj>9*sO|-0>_ak#@uj3I$bv#gD8{MRuKG%t zOxM!S2a2Z+DE8+0fClS}MtmTSMbB!;ku3UuhIHjr4GW$l3phkYO7nx%^Mm4lm3g4| z&+QcFUzN;(--c_n|H9{-?JW9N)>#wOyujOL{!?1x(unpPN7_2i_WHg$pUQfo?&3$V z?dmXtICMZ?BV+7qUTn-4P!_fi)ji9U^rhYp^v0Q=_O@@JjEP8`MVcP2G9>_Iu4U+p z^i4KB?QVI$a8}5LaWxTN6$x2R<^oPjq!qk^`$w@BqQq3C`qNa04q!Oyn`qAGwR8&=h3Bqb0>PZ2BP)D_B&IC5CmZr}_30^~?>@|T44$4XIw@YV^NmAt*P>%;%lzed!(dE z1Vzf44>u><|L1;IRMVraILd=~RM&9H1tRavxuGj;Av!XZDm?x%*z&A>`55QHHaC2@ z!k*+qYDD9Ymx+8f=mI_$V!-@rFQU&W1oYrnuds$xdSGPVs&6j13@xW``wzz@#G^Jv z3RadS}5#zTht z5ftqKfgYMMURC=pfS?y}!8PD*e=D0GcjuM&!lk(Ln-<^C6U=8?OshkUCTB|;6Phxe zPn2%0uoUFpxGOff`;%Hy-6p;aW)-Ba{5%>{K>7C9;CB&GHrvpX=^r@+3(_6KV`qJG z!7gIeUNPE;dHxrYvzTE+*s6}!wwzP{o)>LD#O*QP-*AQSHLb{`2UICPOZQ+d)I0O#goMzERMf31uxUFrP87j(1;Uwrmj29Fq zhJmFR`cnXQEkv_XPw1aKs|u20;;AFmJlREdf9I7%Zdage9}B_1_(XXzeFJ5(ZUo4o z|KGE`xD|y4Se;?Vr$z1DOTY-kG7R_cU)~Wo^gzi$5&Qojwlcd$|T&0j!qQH8pNU*3#?1-Ca<55D}@Ng@I=XcGYq=x>oGJ!)>D%2go%6} z0jhIvg*#vrE1ffZ*`ZWVDU2^6C;?&!#{i%zkTX`cK1ahpA0Bj{tz4M_xCjox)Dds` zlddXJq%Q){|N`%kwk#-E|`3F(Mv#Sg<>12k+7}HhQmc=hfsa!$rVYS*_8AH|+29D(=2Z54%t2YKK$FR+$f;zWj*J z0lKiIfwLXL7ai3)vtZw-7gm3NZeD=$Rnq;z=$E4)3`q5^n2V`HmRMT%&rCxePh4dK zL^DD34DNPBXopP1Gg#c|{uX8_vnSVMdRM6iczdbFy}k zld_`35Sa32%UQ{ON^uJ4^oH(x`0xoMAIf6d-1YX9{QuXvS6QU`nPjF5 z!aNwC;;7;Q>?Xmd(v?0{(EyoQX!PCm))g+@O&Xx>iL4p}dtz50Nsa@MTxb?vw`U_f zC4#y?=4hoJ?IJwb7*5q4BNO5I-9j}{j$l$a9~b7j4c8j!5GGH25GCHwqXD;4c5QuWosd@$y6( z&xYEXzuowe&7oaNla<{nobB3=0>mubLc6o~PwInE5%?ZrKdn#cSQWf>v-hBTUa!RJ))MY}^O0y|}?BRi_^SQEe5Ve`L9)~$I z*ZzY_G;|*1eNcUYpa+d=PobfmfdtElI7_K3gr`=XJM~#5r^?OpxXi*j6**4qIcF}I z1wgu;JQW}ucOV!R4$>!pv4yYX zdKr4eqTm68zAnHF_5i3<$<7arQQ@`T9$hlEc|4ZfMHg@tsbd<!$i`l=~EKn^=qcA3FTjVGeHSL-~MP_MTP6@S-|MuT2& zs*52JN;#4XZ9Zz*^GUop*OlZ|)(*xx%;t6#I#AwFerFM*KhGhD#yI*?!UwK%IK-5L z5#F0`JkCuj>ytv)4p{1E2|^Q~At{Gaa1f$5Kp*MZ{p@71jJ4dO+J99HE$0L+#MN1~ zl+`G=_F%HKcZ^MWKp*qD0}r84oO%L$jNm4>jIS@--?nA(7zC69j9))w=lXF#P{ibD zTZbh`$|V={Tpsu*i(5OHjLYx}^$z{~ZkC9X>Wdjba@of%MNJyrruB76-VCfs^TjNE zLM`PrvHwZjr{r;czo9k~j6x7d1f0&C1}4msspm-UjvxnY1h6-`T2?a^R#j9P#;diuqW`q_TDjk)neZ8?<&?w_<|RlsJ_J zB0S-$e|`@gYQLk3C(=O<34)CaFlfojGi|bFN)?pg18fyaJKI4cFMI$E2V`ntqTm*g zkB!t52{r1=GYH?dFgd(6rmpwqqw?5aibAC;?PGYlZ&a9cB^mzhmsxeBUHmYD+eE-n zk1mLB6Fv5h`*MO3Qs$3PK?G6^)%hS5i7c^Pz+{oKTIdIb&S%(j%|b!S?0C3j%@yzI&+B~%bHJQ|cdTS0eHKX+yxzIk3)5cz4$g1JgA>s*Q zTuR&aH?c*8b%7mre-_=6!w|AOsTg82s~D1~oX1FCUu}<;^VwibKkHmq#qU331LuB% z;Gs>EU?}l0X_X;I1i4aKPIM&HX-XQ&VBQOCmv`7(Heb#R-9D2{R~CW_*r4-3vWts( z@Es?A;WS!7-Jbsmh+Tfp&P$>vc&~2&h-e*Ci?~cBRM1or-X4YV2-)s(WmJ<+gd%Y< zm(w8a{af(@Iz`Sz2PYwVNirj_(q8QiA&GL2z>{iF6niOP@cdk^ea}pBbFAKeKjk@N ziRocoFoYPDhYL??DEfjDYW3#C-@~iHh8`c)L^09xDIqHrv}C?y*Lw3cLiRDEaPYA? zy~Y!bLU007Z-VD3D(A!Y|3MeOzv0az(8i}aq|xN0_@^K-yDr)%;~hLSt5k#R=A8qJ z+3s-v@!ENl@=e9liywjcpdz(EmQ2Ko~@@GYZ! zYLdT#1XF?q>daP@^+EMpQ2Dli8xZ)qSLkC^wKey2r@^?xu(+$rIeDk>tc_V?pIb(I zE79h;ZgggVP@Mr*Giih!C;@fiJNvW6OeLv34+bK-6BNln!w59Z$X=jhI-C6`zF{ZI zfWqN~5kYBDj2Pnou{(KoP>w{_2Y;bQ+Pq*aRrx2*m=m`^%6es^6DGX3DjRzqefq<` zXR&Sdfr7Zr)6ex>+D{;CFg47NXnHpsm5tJzv&3zTY_KVoy5{txrf&tFu~=VSFe5kl zvP=0skwF^#Uf-eI!qi356rtz#7|AMbM&=hX8lfafO4+ zM?`=fRUt81^@(Y5X1jJGpL$Q+%hyf7(^+!s*)Mm2l5sCxrjUgB6~e#9p}#n=Pv;Fh zB|6x$5SjvUDQJV_44&^F?G71A0%nOzn4Wiojr;n`blJ@e$8&KvrcKJS+Qs_p?8aqV zke0x`*y5>cOty&1w3Q~%JJ96srA&*q9ghGO-dqosjhn+n2DLfYO4_RiZuvw@{WK-giNhwtymO+1JWf;DgoR+NfA@WJafQA7|#o=f&PTv>|hSQ?7;Cj(= z{n9ef)G@iR;*$3V!0wATUpr##qDFT0hmYqERtu!tFmfuHRzQjdcIH?B9GmEWiu|JZ zeZ<@fzjXJXEjL0hc)@@d4y%w^4?(Hk?AXPw_e?&)H9NGfh6>`W3R zHJ!CnmYqbQ&*#QaJ#n6MSCJ%z1gxZyB&d)}2Fn5uUn2Gp62c+wJEo-X1+%V$ZWqLx zkN?dx=dBOntunsB-D6!y3J`Eb(gU>T2o>4b@=sEstrPboll?p&=MFPp%3d@O<5pzZ z_V2Z(AV`IvZLA8Pe3*K$q=j?o{=$^*5(Rk1n>Ak~VP>9{uFgT5aro#$U3OGRoFv6? z!GcQ8MyCRfv|Phugm{rWP6o3C95Rx|bebb29CJk?j$~9M=o$AA)suW^y1v?hthIm% zCh#CD@1<(HgM^DW|#hFv-Oem5N%W&mY1}RR4(9!z9&40_vI*(Q(u1 zVq46+s#G5Z2ufH5QR8(OVzPu&o4AWW>!PC&dv{1xKEx;uHf_2vTTcfJg3PjMP+Ueo z##7U4tc)XQF_q6RV?rj9p#G#)cHi+$5Oh83Bzm~r($Msvwg$k98BMa@ev#i`wtEVoxI4Qh*@3Q0grj?@K0W3 zpbocwxFU&&@5G7LgS<3!H!TfZ4#|7){1{-$HmDvOV|?i%|=ma z>Wc+HT$B+d?$@(nzO@&UGZK6APC9D47LYWKJcByUTzpK30V*4`LIHYbVr;U`?L(?CrfFIdPDr^S#!oNcZMuEp5067_Tuj zD4Cju5>RLFzZQFT)6#xu`SbKa4=BA4-R*>`Vg~*12{5!u1yFA_UvKNlz^Ko3U^d%b zkb0y_TQvd^kEAG6NHJ03xZI^1XzUl#%sZ@wafz-1zk!_NG z9_PTbCcXBLs;j2F-XD*|vF^`hhd+I*$Tf_BrQ ziex-A&JOA?7e|Mb;o7k~dv69*(ryBZ4QvQc-aX{Q>RrkK!K*lL2oFz2{cmo&SQSiC ziuXTyQ=UH!aEtN1e8kb1M!vMgYONL!l}Yk~MaPlJhtjK9tW?{^H`R4o(bSKy<2tv7 z4jc)qcfr0vs?l3I z9RO$WfKvQ;MTr=t!F)wCk-(SI;R$_Ek{yyg5@8t#EPcSGjd5C7!k!je}1Qt z_v7~a@=a0wZ!=$3@oz3E=VyQPh8~!WSEPS|VVE#n+yw}g9{rQZxN#ynr=F~&?r~$X zL`|}GQDW+34aj~J%u__8@ARLB|mS=8`(!B-HuW_OsuNrpa#r(Q6S6sI{gNzn9Ez~XBL-NPJ720&!^|imxd&7X~ znMbFqmjdFQM=D2+cESgB_U`sS;Km(Y?_?qs>Bi#5=h*AH`HH~GG(p(3|3vFT2DX&a zt?m_QgGm8wn*2D{a=P(xBJ2UtDfZ<2U*(CgOLhd0+n=M#BjsI!)~_o&3)`=AWXr-MMQc^*ZUnn5pi> z8U*@_7+`hcls_F?--2;aT;n4^<<9)`y>;f)5;&CoBynI*iFndmtAUR8 zhkg6ml4TzxT{K+2j;L4Pl_{6}ourjZ!%r5gc41F-M5uNMvH-w-fdW*C8TgZU+2q{17{0|l zq@uf1U}R^Bu00}lsy!5kbH7&}DI7*T!nkFza1*)rSBXxLw0rICqMEcr9a17J2qaaj zaL9`9@hk#dAR4oHR*e$@q^gKmmyHSZ2RMP&N+HLN=0K7;8pl`RCY{?=oUozwtM@1T z!}X?zJ8+Bh{q${^89M)Z@4TQ+v$|9NAS6Sd>C>LpBMam`v46cDh2Go#v zv|(ee(FFp{ywXWX8em}>T;*P*z#onV=$7NGy_;Y3ERERA{6nC6Sb9KPuEeQH3v)-9 z@+^MeGaJHy+6rkT&2Zrg&iU2OXz^S3AZSd;d>XeNxbtV*7yIbeBFk8CL5KX;oN%TG zgIhIZXZXkaLwe8F7DcI^$P@Y03b}US$D-^A6i7>}2}j?a6T%_|;y;V4+`5YMrsPqw zL+nOACjx1o)KXa|P2>A&J_>^)^mjQfA^b8mnfRQ1RHZoJ`{4VZ6d=5)-(=>2Gl(;P z_!?1@U(CCX`}7?@;mUJSRhsuP)R-4MO8T=jyfL-6TjU`AV6kPJ&jAe}G`EI9eo-4HYYZ#P5R{8;BkKi zq;CfKDgtv1d@t;>jWeWB6hk$aw~L=Y3IlXwT$%U!bGO%V?sonwnavK1Ceb$sn>)GF zSQ8=~ze+lb9j|oQ%|v{*AjroeJv(3$NAMdeJDxuf^0Zn=+0QG=v6J2SOZJ@qata|1 zPk?g%a>KW~HnBxooEZkpHsk%8Yd8fixY*9hIwnNoaX+lBN&pJ>w{Cg4OkOgb8pAB8 zzHLeYA?!1HHhjUJ=zHsYZZ`ayxeLp}!(7Hvz}TT~f{g>0qg(RCF`U(EnM5$<{T58j zkI7inCvxr7$~l=-CVegAkz|39FiQA+NPmQvHpOyt_4YGb^xa;iKqXyG2-Ep}+J7ay zV(Q%GUpkAXZJYfgwON^_6x{?|*cg_&HQGqEQ*a~Bt3NFTx3^b$wzkS=2J332inXBo zO!r=N%366~AK8w}EL(PkEL;{Xd2*K9NK7~SG%?10QGtWm9`!();V-0Z6Q^;An}q~Y zt|!>YHQ?in_Xc$w3q~6hS=fmY^=_MH6W^0WCiG7)H2}`9$(00d2+C@ArGDHN z%gKZ$o@j>wg}_#i)cixed8zq=p{N6<1iAsR1|@Qf0qs2j6R7(U?1qEvnT0P$d-n2j zc;TU^-$lHQJPTBY+vO)$dZo+nB)x9;#{JbmY4{~Jd}9D$msi;*T!I2UlqT=Em5(#PXEt>e4>mQB5QU)_HGAWE6! zgqdyU3KX*3-ZidJH2q~NJW#G-qKQO&#Y+tk56d=>`?ezNs?j`s=%a7s zO)T3)_0C6RhU^p&Ru?rLWU0$;TN+=`09q$a(g$0d70Y(qQUaL-S zvG(;;?!K$Jyy7^RK#7|i50A8&dcBCwtL*7Ac@ZsJp;)ST!Gih(MzRIuqNWMIj607- z7(}3!%6F^S-3z`D4&!9Dd~~S+pan=SecA#Y_F%0#c_viK=OGlJ2DI)k6r_}r_n8n2 z(?km5lD5X_FvP6`kG_^tLkV=D+;2HFS-J@@-VnJGuTxVCDahK6-={+)=h#F~C!AD2 zL5_MiECRrABppCf9S(15y&B1r5J=59@|wuY*%Euy+hXaH8^Q=DZC0jscg3=AQ*z#u zh;V~=`L&g%B<84eQ5|(k6~`~|auu=4bzdpG`t)qHWz5s^#_wE($!i#seJbtyx{syP zV6ES7y` z2kuG~pH>`p$r@Pa$E_f)MkY#&EHDh8U&jkp4qtYopr?Ojpw#l2a3NhD4ZJ)5UVrU0 zogc8gnf31SRCShuYGoa@-W`aT(Hi0T^v&JQV{-Mv0VraDG2lkA{P`8-CMc{qwZtEL z)S@($uS&;q0V`Qkh(wPhs)Bx%(;w1sw#1U>{J&>3*0FeLHdn(+1aHGSWkFX8Gzu@J zN88nLs{3y((4XJl+Q2HaD&u*c8Su7oclFGF`A!6~!q}8KhBihiLgolPfYGSZmZ}ZN z9<+XMW2tN}N!u3Pvh(mq%O6@e8SG6v)?kq4HpxFwcFfZG@6-TySo7UqJmqs7NY$B>WTcxF|w()&p+(mxj?v=t1`U5PTEdv z89X+(ma=*Kj6cM*=gVr?t?#3)tTqpZXud!pyh~1bzX%!{+T;0%a=#8%V4v@PhvVe) z>di~hZWL=7!|XDDB3Oy45%snqo7Uo8IjF_^w^u5f==h5qSou%()8aRVq05auTT%64 z<~xO>$UA(}?P4&oJ7Yk>V=t@V1ChV^Xw=xW&@I-~Z6Q3eU$Dec5obsgqWhEJyG@cp zTfeN$a&=#$4JIH)rq1N=`_Qnf*&YOwBJRwFC4)>=W&HA_&{ikGnwLu5H&xoL!H%Cl z@{U}Kb(&%6Fab??nyTmlo=1!XN?FK`^y;qqC_g%3 zv>6xU3Qi+B849lK3@-McwYP?aKCpa`5;qCqA7z5QdZZ%Ngj;lX{6&rwfreXH)QND! zlm#gA%Hrug>q?7YV(aE{n>D8mQV?5E=^$nUR%#4q#VMadkdC8R3io+C%$!qDJP%JQ zuM$|NKZ7EpkZ7m@4+L*fvM{(%r8^X|mC{n^=tjUsGPztKk&!kK2~>bOeN?r>F$kYZ z88*uLpHM!MYYI}VW=i^WHv8gr4I4v5X{rpEtnZCql6QHS>0tuf)2lN)9^Go%Q}SQ* zH-4L#hU?KK4GR~mO6v7HIIcDb+jJ>EE!9CL%VLAFbU;V5DqJ6+2paGv*2LiNDhl|j zDDorrnV^Mn5Ewc*3KjwDlsq~56;>)&}cvbA!# zzGq?H)?$bihz_U~)qPZ*5ijsEhyZ9>`(X?!5fxpJ?yqg1LxZU>C@f+6v1e77+6;Z(Diko(07@pgcCqQ_vO3J zy!08-d=zgefQk^(PlledhatEvDBaw!@b>J0X!o4|(>sbSpc{~`*mN^qHpnh4Q*l}L zdr&_0@mRbb%G`KI;4J}rmbnxvv<&)A&Emg&;??j#S)-SJt0<6HgyB@%a?}jORidwx zbSj$^;LVN;$cKIB4#wwPC~p?&A%I-vmUXVww7{-mio?*s2mmay-oi;Lr!cg zEtNpV1EjDx%@cpZ&gNM0!4Ki>=Be!L+x{In#B=mT(|mRjo;)-6vJ>~D!=lo(ZDUNw zvi1DdJ~M*EduS3~UVqy~00vO~*^A@A-}u;Gnh%08FUeS$%PHP9_RA;LCtrsrG27N> zyMB}?k|=TGE$>5idqJ<=#e$ZY29eFuEy7SD4XPN!1o==(&8YSjl0v`VdURN1->HCj z+CVgA9;pMimse|$Iww}WtndLKoAvZZ6a7p-Qxv74wQ54 zJVtKlYdCY!@Oxu@il9F&ixK)X!6ms}rL#kA9qX_zFxfRT;9G)~+ecB_b4v;6(sWjZ zrg+5SPLtB-%tO#4w~{}Ahc5bl-u!A}BjCxf%wFC?zV%i@O^V;wM6cdBRH%4+BW9>H zFg1=54CDp%bG{QoO())G>l(_~epJmHg-(gKXMA4mrJ0cBQ8Da7s|BHms>Hs~1wX$? z={HD5=K;LY@asvnsq~T7X}m$*tr^{oz|VzlzEytLiH87eZzntp*CJrE^l~XHXGM7@ z%?c zKfpNjfZ_>}^zRZ+$ij}(gG5vd$q@6$jd`2+tBl>YZ?fvk(xk5ExW<;AcGb<98@5Jd zR=VhccT>t%c>ENgva@A9c`6cByk%!vQbJyOgjnwt+IZ^^Uz4%F>*qo(x{7TZztSiq&k1<7Ll8nQiAjK78wgQ=w#mhW5bt)byN_sV$r37qpf1747pCFu~H8gEj%v$FJ|34(TR#9ixbHs`Mow5>m9Fk?U;~Kd(balOo+ZXQ z;Ab$AEbW6I_aosiu=(DTJtCT+(vh7vhmig*Ae9LtXNAb?V=N4$tQpPX>e_0lw)TWj zpTvjY)+8pdEnBgjPN*M1x*gDHCmbHF@w zTUJMD7WuwRAoyaipu4Dq5zbFv)ry$~TwG_w{O=@e}gz1}ek8xs~!csfckX7(Ou^PB)r2q&_zgzYa!ck4s zvepz1WXOv=*o?8u7$#C&-~1bU4!-7Yz6R?c?ZMqw(IqV$xE*`dl#Wi+A3`HN(d-EtQ8VzYPM!SgAAKKN{*?T4{-T&bYvA&@*AUq=mz5iMJ$WgS= zsy>aX0z5i3ke2)>UA|=g&>l@N(f+;z81~G)O8LWvXluiry*YxL22aQ~F8q_@>&12Q z#l^hBRlDcO+4>h-NjmVf(QO7n+Xvs8XY=hqfYMs$&)4&y7VV2-#LJdFd!ab^G5Xlk z;};_mWCSGP#n_K6M-eVsN+9)ts<)nR`~t5eOe1-hs?c5NLDIf(SNtU(-{A6(;Pr6| zCvr>>bS`1k$h1teydShn<|1R!GsCWGNx8Adl&84=mgmm@q;mHWEhfghxTPL~+vu*P z<=wW$i3U@HYo%XqZ?jGMOvth(cR>ujMjW)jEehamx|Xy4vco70XkMvw!Ml}#NLHWT zH5JhprSP#ym9(A__eo)aarQ7ZgCx}^o)g#|qU+9okI()2L52-nXc&!{x|~{h>)U-7 zUaW>bIFBSTI0Zb(d1qR zFT&>V^%WIm)sRd)%-ZrdOo#x{6By64cGB8L5HFyCuoIhS7t8gMe8qgNMWzW9or?jP zN_&m-WF39SR>8$nwhv%GtGDV=BUioT|5Bvk>At7aw^)HZMRkE#U|_du#H*9p3_NN@ zN`AEk&|IDjS)kK%!a~Tut5;rF#)8%c z^mg->T&?yT8tyk2?rA4MnV4HNJbx`9GTyGzy?nsk%M8$SeKS^IC&9b*+=@*D=0zF- z;g9nzC_PTY?Azy+9#ldRtbT0`^KR|QmrnoRCwiqBNAJjp{8eZV(3*zB8BOq?gum{N z{`x@;qLh}2(Q|BSFMBKev5uG^4<~a#srp#&xiRk}tl!-!FLE001#acV#^0twf-r)` zU5aF_l}<})u^f>|EzulEKYFTfXgEd5&^uF<#5H52TAzK~ajIOC25QCfjrrFqcR-OV-wqU9 zwft1)=eFd^Ck$}x0$MuvU=vIrENm%op4WsR6(D6fuI!f}eOg)%#L=>0v~aI`cV+Ex zz(WY0bMi;wAJDWzSToJq`PJ!So=pFn)j_)WJ>-qB&x^o{dn!H>1#|F~sTk|z92}RS zX0T~h036~7Gt0Na5@p;_aD$$ID>J;P?Xx^Pl(%mC1kKM&BQdrL8& zv2p`9zpZ6g9g$`dk*#_N&wH+0qc1TM$;N)X+=3mI864&eY^_Es$Xi_VA@{eSlUzzN zsmya8H?M#<$Gzy-#2=jCtrg0Q^vyZTJ1GVy0^GAHKn`|ndI|m)G7BRQl;S$-ha$u( z3i}#A(6IN7*PE~_slTu}O{f7$)X)rs462^!ZKMjC2{;wGFgXuRSXl%_6hX+o0V%S2 zK9XT(`?rz%nl1Ivw{?Z;_kwr$&E0$&*VOAe3957W`Tb@PObJVZI@P=;QzK|0S|lOL zaewgK+_Q`OdX8=#fIK=qc=?#4saQ`+*Q@D;#n}21@m{^H&FX#6`6c3DvI~fa1dP#M zeL9Ai*TY^BtO53A0NdTiB@+hf2M#|mL1cm!_r6hB^lyw}x9$_xm#pt66+<3XseQ61 z>{1p}ioeIihNf}4BrtCItwFY#1^f&gpNt=sd+~TJEDqIUYvzB8I6xAqqZj7B0X{)| z#tD&el=i`JT010}B=v=qO{5cM_<&3-#UvLiKLl51pPU~GhoLs)4}~CM10y8w z`>t#KfYQ!uc2geNc;_axM}8XqN_mANX}RCW)!2n~6-JR8IX=!8^kpK+(gfSkftcaw zB#bsRN5!;IOLsdF42^#ajTiR(JIL%C8~zzQ0J9XU{3ksvO>WIawoOTJ2(WoMwC4gT z2y2x&jE-x!bg6iVQFZpv`^q;7$C7MPxVb>G4EeddlF9cPe`)%`SJ1WN;Y~!lrQA12 zikzW`j7Qp%D&_4+h@ZOkAu5o0QM{#@{E6$~j^n9k>lLtkPo$LK95EAC9&||0{R-<@ z^20Gu@%V@h1~5@DI+%Sop1N42C86*~c|j%C@9y7T9i+BKji3gR2&TmMTytixCP zA|@;xV(BJr)7#rMwlwZ5&nVOvF}U@CH>u8RPiy!Ucu8W`EXgTW1Dy6NNfDb_#i~Nl z1!u%1SZ^l-xa;K;p5K9284#4AY{hkkL1yBxU2<@2@RT|`Z{dG3p6V5hBi{rcy~`v# z)uF5w0Qxz+W(lip_rl6m4?djLd_*NKsaa!PA?2du^t&()!r)bet3?fD`49Gk)2`bb z(-$%gtV zDz6;)G&NUy8lsRwlJVD|k*bR}t}eZ6O6SzB|HctEl;QFQxfLvbd5c}%&wBipC=NcN zbC>H-aY1NChtz|hXlq==;~vao4V@~A(!Ngra^~qDkQ1(g$Y@&zM-26j}6ScXMn5_6b@2A9lIHr zBDGO2v?R!13kK_V6A+!_OpAu`?x!6S)WRo@%I~;1dfPynIjye#S~@xV&R&p1lK0eb zZy-GK#e^^o(nsyLdUQMgasq6pZ({ABjad{K;PkOLe58hUj2s?osi^=Ji@o^*_Lewi z0X@fSX=&pbOCOxS-BO${;@CPoR?<(~{>NDkBaXY5cnPwqs>q*t=|nnv^g zE$Hrr4|A@dXU1KtRIUvysRFf6u!UAVeTt}%f z-=#v1LesWu9f33!kU$4*(d3~Hpk$J z(G>>M&P&rV%wQlr0`W#dsy~_qA+f0#nEL}>zAd>XW$p_LtxK+Ok`p4eZ$!Y&Q@Ggi z0e8jKc*vqSag`j5LoBv9$erRFNGgq6hJPP=r?POHr$i0`cGX;iMKR&u5+ISq=i{=c-s(>9$d3F_U%4s-@Zp@Mv*@PlmgZON1KOoc#}FU{Cs&TlZvRId#|~+BZlO-?{78+B>;0 z+o`%GA$b!Ax~ysC6vzkA2d+2UwUnC7Ej=AmmjgYsr*=0r87nc+jabHEZD=y)ldw5p z;fdCxM@!i?c@2S|(_O@zt2#=?W&>ELg{w|HK7#861fjN+ov}2rB*TLI?@6m$ z(3{1A5etd6hx|RrEg_T`_Mv<7veYai(2PZKqtym{cb`mknqU2jaX6-6S8z%s_W&cn zWY$xaN^X1=T@0~D)pV$WfAsF z(2WL3j28Akj8vTA=!Rdbs0|OF1*q^wpjcYNK}C#$iTKrx)_4+PyqdO3CPX;ypl6D4 z^0i8>4kQYBshfv zz&y8KxQMlqazu2yfdwq5;soKIB9<=y9KVw|LE<7klw~V&!DlN!*}^9ph;b% zfu{sXSmB=TjDrGgx>{70lW_r)T?p=K+N|G17wnxewqpE*BS?e?6YDjqgnn0=Nt2S= zW35haWx>$9QhBcc-HBx{FX>VvL zwP6QkME(dCmQcfw+IZi`8lOAq98(~R>m|>wFx9yeqXt~+UR5M9cBD{ysO%#n44y_* zeIj}7v2|Mp@Qw>x`UM{5w%ka^_84>P;`F8EpepnOu)qt|2I~uZDt}9I;egckF6ZS| z+YS@QGEE~*!BP-lYP+;Kr`V$Y;E-x0ayGvfQ6t}!!aJ#mh1L?%#XJupA51Q2bBXV% zH|bOaW_C3})YR>tr=CMC*kdSQcZV7Hb7Wznfn#S+x?I0& z_$Vn^Yvqt=Qw>x=PjtPddH(9~5=ZxmuWph1`3ry|fH~7kG!1#c8G?Ppx9wM0Q3hBzP;Pd<75{-KH&k0UYT7$1nV51G-uUGAu2f^se z?_yR;@C%u$1YaN%CAvlO9H{nK7KS$7QRKH`N&mlhSfjG?zzzU? z*dQb@OC}SpO=4l4vCSIlB`m>yc>;K2;hHh>;GzjxPP!}oEKjUM1qLn%#Vc~Bt783Z zT?20xgi{z~um#dpOxvG&K~w&Dg>PlHdGe(tej#Uf7YKsR4FIr1NysPIi=?JUXBRs4|YW z(=d9_0H=7+HbCCv2^`_+6NVncXIyi9*SQH9>C87kKDT9SX;7n$ z3W0ZxZ%j2LGV5W1;nbxkFc=??lO1 zg;XO;`Rc$*1y7I{xOx`R(t`YLL8qj|0IB}~GO#&s^pKYW)`0E4a>TLD!qV|6alxmk zuH1pB;hfnAHsi@PX$m1bv8}Z}z+N(`Jz9rJgDzGqtLBR2<#u>@NwlNV77Pwzf}s3q zr>ZqZ3;2j%?+NOB`&Mz_@96a<%?!$;BQ$VJvTLm%5^awJQyUU|^f#KWzDYPIw!GTa ze24O`thzs&eX);y+A|h68w8pwC&3bHrPf2h<9bB5@^$rboD=M4bpgA!0s@)vSR@;$ z4Bu~`pBZEIO5>f!3jf?8H1tn|BT(2q?e|lYnBVTvQ>J{fkXG@m)iLjsVO1bqwiM~g zN+~rufSXRn+gUrC9)KVaFE85z?qAbyLBq zweDFZS87p})&k+Jv$yIa--$czQmWO(+*+v^F9P{&+>Iu6pvIUrbPClx5c0LN>kvgE z#Y>j3u*%P0DU05Ei|S}iOEDNBu5VTg!S!u}&92||suU>6o}+3*LMNjO6?BarsCD^I z%pB?jBI6{jNz&Nd^7RA!ZGO^sCp| zrNE_O4T*}K{ea}tm+ChP=9If&rmAn)W;_Q-Kw^-Q-^riGTI>{ktOJa zKpv}D+l7DW+sx#s66sj+_=aoC=VwBH@%YI$qJD-qNBQuq&1AF@q%fUk_RvWcFG-2I z>la5OHUDV_m#3;y(j@73-!H6|UW9~LPN&V=X}b997*ziIuzg>wRH|)Yt`i?&EKS!d zl7ZrP5xw8DEjGF)OA>h-72nJ=yoG=&-3^u3mkT7>sI(72Mn7xj$Tp{eqodL<#)enH zDlqQ$SwR(Pzm>9XbK{Ga|K6MucJ6Fni@li7>@w$4(H=vQknZTXjQIt49%0~2S5V;7 zlk5kzkWGw?SU5h4tJzGG4JgOqnDIEG*QJJIt1c-zSL}W5RxSbl#p30zK32>R6{$>u z45(YlXCL#0cWkFzxE-;#CVA-A>e z+!!g-X{c@H)%$KE?T;fOdv|P(DnfgtUYU;jS$NsqBO%C-XO#n)j46J{doUR9J8TO^ z72`vIEk+?d9g#t5dZ^A9Eg&8VP2NQB-Fcw7(b~uDyVKm^(SktCdcj93-(N;R7)y&t zfzU2#Ne+;a1euv)Q5P!J%i)c)dG4T^n!qx;U;yA9wS@NO+;GMtqR~Sm?U$H2{V`R5 za+;{&=oA-@W*0FCJ?v}*``=gT*=YOcufuc=JcN3Y|1UeLC`Stt~^|TIK0@F*o zvJ*`*+QmOT(3N>BBjsXo9H8Gfwr;;k#Jvo@Q5?=Ktv6cy7aK!B;ffXJ9?!335bCcL zT=q|)@_seTB>-$pXz(cldFdgvHA%f~`4!z(Qje3_m|A72ddheOErspS)F0mdDJW^M z6QH}kg@ce~g0yq}yR0@s^@6Va>VkP}c7Ne!KkkCQ7h~IjYBWcJ^!-^GSbdAhq$+OW zRu+?pMz9v}y;A5z@YjA3_no5b#BQ9uhruYp21iUHUOS4QW_>1i>AZI9ZMnf}74%3P z03OP2oeeErt6PW7if+=`Y!Mi=6y4o!gq|tp9DB%>IhvH^Q@M!1M&N41o9QiOWm?)5 ztke@>D6byK7$jAY#_40X4gRWxtL?~%ss`O^(Al$n1QNb3vW=0f`_L72KhoSQo}>N| z-MNM`WQ6~b4VBg)@1)ThMl+&_EV#YkOICcmy%mxUuKIK4%N0NpYi7r+dC&G6$*jR0;aEfw?C6MM@XON@vU7 zevAXn{oKpmtankfWf^rkbp>cXX=;9I99@5v>}igP$-=FZvA&yIwYyb}2fO9+3s z?S?HDS)@QeoaklXj)L5l0z(sd$yeug?`cI7Z)xf_r$%OA*+37sWemweS%_S|0H+_< z0gf8+0Sl)V%P;vgEPMh#j2)UBEQ-0Df!B!;W*lACbm&%^-H+Qr7W9m4)O22gGMksp zpe|gmN1VmaF}9c$02wczJ9VBmPR)yi%UdMqyQ`YK zV{;IWqB_Q<+tI_#5d_p`wDzLa6D4Gig+iN7MnM+kXWB-Oz%gsyMD4FcinorHQ9thC zC=8|IIjjmULH6wIagoK3Vd%vZ1~8BoSHOXX0c$uA%eHT!!ZCBL&dv+K`G{`l!K$SX z*k8qs#w^==yKvE?aRpYO0X%xK!nD+`*X)iYPm)>NDa%bWw|iSwae;SAk4bL);j~}L z#A+w{l0D%5`Y4&QGEpR*^69tHCjwEjGti0(D}p4c&s4=?OKm!4emfE{Tg(>G5n)m` zUhnmw?0xRmUksM;8|F_V23+>{S(BBtEwi+KX7jq{EMv|_@K!GR%!BM08F6MTC4$ZI zdbtgZxB2Z)A;QfLh@({4;1+|(HJe5rfdC8cy};SENqFNaZ0`>g^1M; zlMoTokxiO--6*ua&33i;;k9y|jLfFdKyVXF$AHcWVw!(Csyk55hhpx|ABuO1zXWiU zN7K=6qv{dZly49TE;{3d#A4aV)3?Rqr4DX`&cJ@Fx4Vb5 z8d8pkIG#S1-P6}KHy)lqIQcFOVB2>kw&M8^XrX*-NEt%&QmYfT1+a$AE8o|pBVBpI zTT>NhHrFz#JKVce7P1YM08mPWF%*G593%x;r=IyKu4_7Vi(Reug#Nmd6C@ricA zAld}(hYof96~GKlALO?S`rIPk!W*(`O2*^O09~Y$I0yIZI`2HyHX)vK^HQAXy{!)B zE#N8wPk56d+NS(da*|bz&Qk!c<5++`nl2~d_(Xs#j!`?wi!4$pJK;^)Fu|rGL)|z+ zTd-5i2=Znlz?Z+0oaH4)IgjV1?nvno6Su!*yST}FX@tO71{XS6si17o1=@ry5l~OH zed}WICcr>K6Ifla=za1-uIbQA^1PT*lR(Nww?RE-Ri)XN1+E93xjFU2M-;m+?AXb8?h;D+KO?wOgg3 zNWM2tadAQFLT(o2Z=RncR}=0gDL!C2>0|qf{X5LT@}>R&_ijpA2#3<}D~RN>lRXU#^{PL(aO~CU5@XmAt5ZJs(nW z0hK$3VqDEi$f!iV2nT|?N--a9872r_@+iS%q89TCJi*1|@gP#CGNK}$d&vQWpEKqN zvJSt{vfNxI$fD4fb^(==cH$*=fk!T3!&YI<4hTy`4YOsp%;WreJ7&7IVx5p`?03;3D()M;yt_dE2ll2B*%K~+*$ekmDl^>|%CzWik}~<|?Fv)@$Tmcy)9ag?T_O-BAQ8{YvOud5)EU}8URKl(Bo)*c_3 z(BEWK8GBwB!}TX~w6PreL6DS#cs9yxFu#ed-aui>n4GOOrcsW9pM3D_6;VIHdK*kJ z`he-f=#e7OTm?qPt^o^i2{KSi0zom=frDR#E9}^a6Wu9)_T#srMA#+gnAawMVX}SS zzs3%?ZqFlUj2302JM{2~B&xhgKxV(Kp!2ReOhA4uU$5lMF=E!AO5*oC5n& zF$I<-$yWmE_72M_c@2j`e`}dMw=Fk%%HIAw$Eq!* zHkA-3H*-d37bg9K0CqCh5g2wW$rN2FUo{2O$(10X3s(^N|G9C|E@<@Xooi*eA!gi* z4od3b)fwMyz?d2*o!+NTuiQ-bO_5hGl|8h@XwgfMoS`B0Szfoy`?LfPKs;KvgIc(5!^C? z8@+*oi}Q^6xYP>46rz&MieS*Jri2nnB&`gofc<2hBu3Z%96S%tl^t5w^p)BUNPvFu zUbW3nt>e`Ceq>A+AQ1k~E#=it-3*_ihmtXpD~m}b>CNoTB2E8#+qm?B1P$e8W&G)2 z|LV!0^3>?|#}DvUAXW^k#r(rz7Mi2m`?_6UZ2M*O!4gZO}^lMh>qV0 z4q=$WExM%AVK>s6N&3-cALrFLjAi$EWOuX$#ms$}H*U$gqdD&(63tA=LnJuTTZ+XL;V1(BuTPEwY>SPZW#}iK86aARjEL;RC z8Y65kTBNx|>g6%Q)upIn<{bZ+FjuQ4WWqu%kxxkgqjqASlCuEn%hq^?+UnAwQC+m`(3MlD!7AKZGqrtOy8-%_O2P15*y zoxQa31%~oPi(!=I@&H{l0G3ysvNG4LR2`w2|h{hu4US*OQUa(oaGgKMSLHn6AEw$O{$N)MFC49`v(Il_?(D!m2EE?i})F}QIukk*Z@hk29lKeNnS3mf!ibuce7)JvM3#B z(8=KhEm}A zXh_s1+4j`tXuX*FG z7LRT3m)xRKn*f75a0f~B0~4J%T;smoV^wyz33fv`I1R0^LG(b*hpAMjRiKnj*s1c( zl{*fS$B$RLRn)GBW_8ExFOiFu&HK8c5oWRX$xalx2AJqDgWwUI*iyf>t~+I9MdrJG z9y$ygDFgeJf~%#jdAoW%}(cTve#f z8Ff_dua%xSAyFzwF%T;dEdhZ!m0~Om#pJfbAy08`8d7Tg9}6?#(oe->mHUT#_dv}3 z=4CJlRor2^6>bQ#t5#O%>BtDpuQh$IqB8IWY;n|EU(n;Qg9e<|R$ZdNv$Z1@M|Y4F}~M>_r$s~=^5RYpR9=ps949=BXu(Cor~*+MJ0~c=xC)=;5%i83xn{x z_p&$bWmvKgFjX4Pc##NQHtt`IBOp{Zw;X42Zs%0w!B5TPs??wu7v36?vwFnNye2)k zTREi6r7gVM=$Divfbe=paNha8q9V61fT}w(dZKs(R2{tR-@9VWVq#7-5i@H;ouJUe z>y>7bou2y(A^+H_0^0R0c4zS4@3mZx*C^BH`gH|_M^WCD$R>?rmwuT6B9SpvjXtw~ zSk&YcSWYMn`y@S)M?yP+(sdvauyvr0=)ug!<@y?ujF`lqyA*-h7b-p6Bv4$_R`MD7 zU$-iY81O=WGQmTBIs!HLj;t-;kr0YypW(h#AM}C>jAZ_I%X-#(bDwwHB4%5sT7t z6_5RQOF8EO9V?u&KLNObH5|$>oL1KBYW}UIB4k@d#g7YP+f1a zm>^pc;U(A|d>5~5pi+jb0ek9KkYG|C zqu+Th2#_;?WexiQ*fh${(z^k1M&JMGH~X!cvh$A+Wy9>v7|Swy!t-w#n4r+NT9j6r zx1aZw=K#bad9p&UQGj(yw!*R#!hINwpai9>Zi|;5n4cMcG0S{Cow@s`EM9ZNiDc?a z{)#Jl12Cl*^RaN?yq_#;K&eaApu1XSU2Yenm;``1W7kv@k}5X~2F3QpYTrlNK( zARl0_t)BS!jDgq`er&|_9dDia}siey0|@TzjE-O@nM1d>nDj*^9=eYQG6&HM4fM# zDD;ui&@4M5?Ljwh4=zrm=RMbh@vFF8Xrm@F2KOxxcgR1M+$UkG?@@ZZzhvJt(?*|< zWN%x-dn>KwaI`AX0|0>?Oa?DD(Cg$ajflhN<~+D)6U*Hz&#Ha25?`${{N@I&$h96- zVE=2%g%Ivo46$alDMhaP7VD2{_|{ajR=|p~);aoT-rgnyG0CZ`uxXcKq7*&@y5wwU zi`VVSY_f~hL9!dlhDCD@g@KMEYN^`n`AXmOOZ)Ep<}&8CI2atrdk+lwJXqM-9h~nO zc4bR$t<(&I^4@IIL)nrU;cRu~Xk(CZWe+-XWy_iPjU(V%VnLd%PBcb{%N8=PaonGBnnQE#h@I%Oh$GbidY@iFPB#Q? zO2xRTM<`{`wCkK$L5HH5%Rjw!#-J)Q@<3aN=8&Ay6GVm0Hd>I+yl?7WzqL#z4Q}^-j5pC$Bv?oYAY&W$AwDx^VB7E& z<#Mg}5gm}i?^wN!n#&9BuY7}?Dj&t7`Y9T)rmZ5kmAVE|86P$>k%*N2j&#Vwc?|9> z(L$DlLX9+wFVm@zsi>_W{PQn;gNx-J+5>sjCP;^604jk=R$h89}8`K0Rt3 z!kKa@u|^UHGA#T)LjJHsQhB>6s^J^Ma=1aFIHcQ5zJQDIs0rXCdmX&hooR04h{KfA zTc$Ma1!l#?8>gvpYy~}GQtlq`9L@#^+{hs?t;&Vs?deR()TBY@)GblPgEcBDUOw?G z>3i>NWWIY1;`-DRjA5mG?HN-_jGP~`V-c-m*VOe@|6(8~DcjZrALP@+-Qrqtq z<{qYmoJaQo{i;kQQcMF}x9UGR0a9#?_Ak8XMu2*4Xule8J&&kkFuYOE+__0BuV%E2 zM2>VSXHFu!=yTMSDf4nGPOH?4Knb}?johgxP9vX!;@(N3 zE3<{uhI;{{)n{dP5M#Qdroqmb2V!5Q>#Pv6v;?D-Eo4?mg!>1ZP_Y^scw-VLvT%{G zV1iiAmTTLYr%EO32|jnCcM|FuU#iaIod;)lwH>Bgw_BRSb!=x`?(!LhX>Sq=*Zu1? zN54CLbMX6$Qj)@o>=V&Y1N3ye*V1FT^z!Lu!zE#qi$YIR>Kqx1_=@BX8Uj?i%}OJk zm)Rk%L)Golh`m>wO4ZPj2)0brR^0Gmb&b&M73iU(E#;DIxx5mO4?gL@)L<5YQ!n`O zCw$_D-=J7N3+{4v9Jak3Ld}m0tdNejzTmW^M>#c-g5Ce5Xk%kNh7@6NlcXn31Ou$^ z1EdnUS;h%svP&^1GA6Drg-I&z$!C&15`5$d3pXwWA`0z5S&KmKrQl9)JHH$Ve25>f z?3a>x0@g9$iV44486g2;$|>Yj2AsN;+ww?pVn6S4`h8xy>g*|+Fq|%(IZ$~^Kzp?pbueTj%&L>b zZSq+asl(&SURQ`AvZiIPaeQ{3sP$Ps6EyEsKUjYiZd=d0l8J^dN-_B{i(kx!06|q5 zKi=9LQ+=_6!Yx(32tJ16*XB^W`-a(NDO-6|C&oL6?dI@7MFfCOpC(vf9C&K0YJqO{ z_i|Xoy&i<+^Ghx=g-EH|rz%q5n<97E(5pWidZmuy(Bo}@(E5KC_beG1y(O+HDGvcL z2_3CM;E6WJSs%$~s*cX;yGJZU?&1Ry`2?$Ji7{9VYo^qK3Iah=efi~%m575xbXUlH z&~GiicR79nJhyl4h@EJFvvhD#Ws5$lD0YlM)a5GD^v15Q1ZJTnke-iua+|XGR$5*m z?HvUjt{v2Uu+gxz$Z0hm)eW&cTwN-+QGZrU)`*vB^8D?G7}tm`&OCI0oN2~_W0^Z| z-Yc{Evd+1!;53oFcW7~tRY$uI@Y_}e7`7H&@9auF2&jN@{e+6y{wZoHKpUzrIkME& z-}kZdk{w3~$$2cZ>DiR(n+L;1mMdSM|G-5Zuq@X5}e^XMQ!$*g}@A5GMMl~@^Xi?4h zwLYjaH9vt&=z2gYix*#nb0r>ElGt9a%D#VgC!Y11&vaW<9!c;`I`d2-$^5 zSMHGzkXS{Dg=AGm4Ff6SvIm1I$i0nc=c(!N92@Kqfd z$3yRUv5RLk;xfcNU(k4*I$sZ+@N%By>@>zfPZ`gs4$^;H;G}Z08`c*;Xoo7KKLNK=Ez)TeqoQC&*&_0wd+5 z=E|OLpLT%zI8lQvgv>m2(&|w5NZ85(ohB!{jyVZc?(5;y?*EZpOUF~8Vvr}cTFSdn zx3=s;oUPy`DZ)Tkki?w1u*qfiTghmS#Z~&>uBo|d)VcO!$IwIYq-VPq7}ttoy;>Rv zk<6>0cf<-n5m^jYNO~}a{`KIPI~rG5nDt13+r_hHsd3PapnCwT+PG~@lY}GBM(s2V zFA;Kij=|?QF2-9kkPJe>tD!)QU{D^ZH%Lh<=k=RhD2}{x1a6h*_Kx1jxofA%Y?)t( zc_^rx<@3@N4gA<^MJ4uwExY%ct&ctLf6R(Ko8q0<4okN_oB(QW;fK({wpN?~dQZrM z(Sx|bwgy6^qDsvpM&=dc!-Tl%hN4Kx^89+?$k|-6lVCAsr00%t;QvW{PJ^3-ZYs_y zNY*Ol$!qxVz-s@~-X&519GP*k#Bjs%M5Fvvzr~p(RD&yj&R3OQRS@vyK#MWW&hx`> zgMe}?%SwH@z++^nSq#6=#iKR=Ix2SOYWE);D`Kdlt5`%N`|3lB9+U|)pV3#oj zE#9gzSfl;&<`mZ^SffZEa!Cr=R5W5Ei)-^G`g zT7T?mZsH9{0kODKdlcG5}1gZ!X6CTmbOmO7nGbElqnb9Ds6vCTq>|GbqJ&% z;uBuJ-q^3+#Y_rJKFxvHk_B_J@} zYS@Ie*H>mPBH+f*+ZP~EbS8O~y`n27d(*5so0BWOEIAw;DHz3uDs-@MtTd0dd6p`@ zfcj0-fJ5dO*N!12>A?3PvobhGC7}1_b!E#>L1l)}CI^a&5*F?p{^pz@!ix@rqXN?C zhPx}aQ$2~IjiA8INDgO^NY>?RA;N_RSrmB0) z-qY3!%>KnhlWQKZXWPRp8f+g+dINbamUs7PQBmg-p}!$uVFbi61dnUL2_fOtd2cWv zT78$(FHP(;HC~6S;61YJFP8`L1bAQYd>oV!Xx0>C8m~a?Nqe&sWVDYvf8*^7Ms#dR zmQy3JO|`b$z&yUo_9`eJV)7#FcTlbOqW6CtqApZV-VQ)=&tHFtTTe}54@$y{l_s8f zk)n`0VkwFD<%!|hnv4UcRC%HL-&jXFXpq_0W>>i~a^qwc<9~$W^3zGeyi{~F2@=;J zPjo64{q{4mxaW;|gM)gnN&Pun)dGWWC&1+lM=i3-x)2;(4z*6I7T0I09%kUG0rC$m39cbEjXOb#vOLAJ51Umhrx8#ch=nEiyk>!X0!6LuF-?RU z^mO!kWL=uxq~V`Yjy`MsQtxm&Z?_n5PWJTE3Q?pXEniIe;+}973f=zB3q`WG+F^Of zfu!pPy}bd=t>kw)mpgJao=zy)$;tA0LN}s%9fhQN@uq_q7s$j=2R#|}`>+nE>`0R4 z!K}d0B~>VEc|pSV3I};$CARsOPS=R={5`vBBl~#dPDlbsn^|#fe9`e#{3kN_=A1=& zfKa(Hd1^272*DvNOt;BEK*{wRx4o}$I(Gey^Jy=GdqbYB6jGnB=wB^YLBMiphP*UP z#|vfAJ=U|R{@w(SU?N98AmbJQsTT4cTGv4*NWIv}#YI~=$Q}*1ED$WMHFlWe1>ep1 zdFP@E?C;S~I84^K;5qrOwk8tcG3K`p0d}Z_9IGfr>`_cJtJ_gGAK>KeC=umGM!(h0 z6eXQd{Z2btJjB^)OWdh%-PzQ+v!EKub^AGU3=)j=S(hDTRKR-7Jq&undW>ZJV}0%EhCF%=e4<1>_TK zK>WO$+-&eqY+FX#$>JtSo z|L(x|Mc1CqiZOWXL>RW^ohqvY*wn}3E$pFkJAH7Zss$_Q?SqxF>E7*ULPhXr&ds^2 zVZ+bttYL3dn0cMdAMS|I1o=JNK<>IGnExy;OB2!L8g#xsKLEi0C0$?h{FLFaX$dMz360upVy}9tYL?-J=EHmV$GyY5lPEwFWppmoup;%L zn8x0Qo^XwGL~8{u(r+=>d3hZf;I#)f2qEH-G>|1Gz+yBcA1HT{2_u-Lwuuatx04G= z6zMAA$RYTr5g5RfpkpGNl(L`@UKa%hoJrv$pkD@H>#|xgLj!>}1QJT5g!&dTK#+_@ zA5}7#=XO(}{|<8ck)@vCAxCEOSfc*B7cmX@_gB6F*zP!5BH7~-DaMY*orh+XPt^4D zOa`5bic{z~NXZD#@RGR-6waZ1nHS%|Yz0v%H)7c+_BG*xR#ysGfWM>RXSA0VrV-d5XDT}?q@H@LA1?~X<+wG6ZD5F^k&aJYc7BogyjNbB3mMR z&kY4b4P$8K+BuxX49&kS^WZEbG8UT%J4@C_D}xn>bhts2cBEnaJX#qR6?gS2NJttp z^^1Ecy|UntR_eA#v>Xd3D1^mAvTac)Q!&JgY?6B7r8uln|USnqZ1X9up6WVs;0a}E#_55_ES^z@OTBF8u7R7JqiBq zwz1y}i8)fLGeY-jr-r_xtl?tcnnIBqKruvtDY>H)x4jUE)9Yv& zCFa49uO2WjBl2|w2yOu&5Ovd0&J1&(Xhy4Sw~fB4zzyfL*<5_^#y3eGNXVItP-&9Z z6cW=CCF(sY6P?3Dq5{!$uGzgF_oa)=E9@r(Z=~OXTu!MxT{#HnMwK+|+ii1=`v>Nx z1ItxEZ-tOPIVxI`X{r|!r+c;X&5oRQ-9jj2&F&1v;K$K`8mQi;0;PN8{md%KJw*rJ7JP*M9hAd$iZ)@i^2av$5gDs zRR`ub*J|>$Sbj0leu&5*C$d5yQ~Q{+yv>g@#o0jY(q-L}dMvrv*|Tmul?xk4q<5D5 z7xk6~(9QS<48ZbLf=YDZ{AH5{35V2PbLyYp*Nw8cY-g80lt>z%`60TR#Y231L1Xw$ zTEVWUIIul|8mnkw5|69Tr`tj}l>VDaQZFuU*3Cvl+6ADqKmLo__ZCNI0Ubx3Vu$bV zREX(7i<{NUV6?*Su=qcz1>0x&S7o%n8rEN87Y*S9DiHfxnX&HPx`_G5+oe~*129KQ zxS_+4-7I+rW1?Y?&(FJnkaC~+0Xel(Kbkv*zNGkx6aU0HcX9E-%Zc3iFOnSEH6DOf z(IDsCH$Di>#d)8Z*BO1a?f~~%2bSp-lJKa;s2;x{IT5Fs_W+e^lMc z1ux7LyFk56g?i;G8T!5BB_pd^`5s4(t-TTzY>#UXelnz2)T)c(xDi{8Lgz)wYd%rLGs|ATs?t zDQ{hY0cQw7Ck@U9DV`RB^ri0%IY{fHt30m-TJ%lqC2g60E^WL`aqMVN9k%?b<3)Tj zBqw&YX}Ckpe*Mqj)-nG}vJj{Ia4!Mlp;XLySa|4t1fVL6Qcz&k$7Chw#8IVe*A~ck zPcg-7wu#B>j2fn8jz%VKZGi*pf5Js&)-kV20!o^D(6?2p_1iQvA<@6!<}0=|B=+}ot| zFELG3QUJ0_xxnU7`kBezm=bhBacFLj=Pl2AP@^s*uPU{~kZG*e&(gV=u|7EE!y}VR zB%9by+4zI_P&N5|!sw-Yob4(!cDET9pNhRp>^{;xal>d2({zSKKMPEMdL>Sx`|N-Z zL0oUN`8wA#cgb1h4Of9lo9jy{f;?-#C6K!ebI zR}A<9O!Hy=4}NB7tiRsfzSuMuU#z4qI!##)`P^SVHhET!AjKw%bny5220=x!5&H#U zMSJ%ET12$p;Df8E&Hi0|S~RWx<|EEr(nTIdL}k4P?oH+?v$9(y9kh!H@z`F*As z+)_8nQgeO>d%%f-y!_yF(!AvGnUVi|WMzRI&n3%$@#_UHmM(RdeNw?rxAc=27iM_R zQ(hle;6-97Enk8Y5iX;L9G!dGoAIM>)9)M*!brYe^v^D5x{HFJ6NsZsSXheZf+!-le0sl#% zNG7FaE>F-h`^ixGb2(46Z-eSzUo6t7)&zs?2S02W3ZId7Tg1s296dsx7RB5Sojg1D zeFV+$R+~fh?dC-tK4OjO;S>*y?C{z?)~27>v9;kpt)F+^5jo#i#bDEwju}j3CiTR_cS~`hq zg%ONzkmD2WZlh3($(yR5{YoH+1w;bA1d1nMU>zA`k9^ATACe?R&Yc5u`{?LfRLkOg zMFE-t1IeRV`~nzdyeGU`jd?s&UFW(4G%u!|7|Zj$VJd^CFj*&stX9qb^b{5qC_)(H z@#2ryTV9IZ48XL{|K}Yjv*!IKqcC7X$f6AnX}v|alkh-1Ws@_u!|;uW_rUV$C&mJ>GJ4?fYFm-A2^ib*kLOOzbadus>VYBbs7a z>^MJ^{hePW^5Tb4VkQW|UDRvgzx=`J=eLq$Di)UXC3Gj7cM8E0#6hf#4>V`iunD_G zuzjzypiewkL6Q1rX16|{B9k(6e7+5@oTv+#yNAJ-l|PuP3>~UOC%_xcSS3pyF0D4M z=y-*!(bg)wHEFW9$3|sD@NqSU6a~HGd$QQimUnH7yVV1d-|pYZX~O-9PJgz^4G|GS zg*W@&HNaNH3SwVfs%psL3N0IhfmZ8-L=vuK6JGJ=hV8Wc5YTeY8NR>fuU%_WxhT?j zU`zQpu=x+QyDYsLGD!HTX`_6KIp(BrgdstaT=-6T1< z)#*3IKjt2h4eMZhhuvs7f( zP~RE~3~985_wCiR1vu3{Ib)nYK9haxTZYbsCn?`z>O9oKIa~j-YtB!LgfKdb3D%!u zG#$|NXFDmOXrDYjunKq=_|bsT&3(cJyf5cZd)f0)lc%@RzduV;;3<%^+4nGE&*N>{ z?P5m}@FGCU!S1*bx1I%p%(Zs?Foeg)0JK>wxxSugm_EESo%sps{%jw3_zF#RfcO~SeAVJ9IMix= zSH!gi>T8lN&2tl@L!Cb#A`pRgz)7#)aUe^oFt|PTF5dR9MJ*iYrq`sro*0VnoEe2@ zdgE$*8f*tn2c(;4R(<6h-RrLwFj&y_%ao;Kmj%Ct>7&skcRCIz0|`ijQB5bna(hDv5w;P3-KH ztSzY+9nw}S?W&m+Tm4Lm8xsTxq4#B1Qq7iTle9vc0tEzSLW_kWhA>Wg*m7$tE`LLq zPPMq}69hK#ZE`$Li@oliiR7m_I;UTXd|YVBM1*W-=cwamr;3MFzv|$c{1XW4T6MHR z1lq7Y*h7wQyy91gKg_VTa0yT@o~QV=qi%0qa4q=~4(y_vSp%lGg|dpUl7J-(r*rg? zChR*IAx7G^Kix1WRXG=!Fsg&s%}d?VRiMd&5GeEh&AeBttn3v`6ND6|oidn3k!T{0 zf}Z};R88qVw9^LFS&J}YvA^DJy$uvuZjBiKrk$i$;<`hTzUB-oeg2`p{4M^L7l;CO zn-3=vIb_#pchWUYDhep)k8_dD+DE z^@)(th_7NsjKGymjzzpOMtY@p(m?u<-hkN~S?)YsGaEn-kIab+{mo)Z4#BG>HuCgE zz*GbtcS;%JPci*QI9v`=}vPe#7|N!od#lS9?TDlKq*(jY6_pf;q$|@ z*KO97rS{fIy{G0`;ztg&LGEknR{+p*HV=I}1G`W1U>gt`At7{}1sNk!Z@5F7u^)a6PO}))2bD8M*MjIjdsP>s7%1JwuCz<`0ox z`@!6HwY4cU7|55MNP<$VQfGa|T*~+4&iXr021pIp94)J=6X6mFPj5=pV297M~VChlr=SUnJy=uQeo?di%szt8)9?Zt)zUvA3s>z1t zPfjz7`)KYZ{8H=Rlvi@+YFIzGcc$R)eJ;;YEdK7jO+cx8#;_$g=QKyKmh4A{E7X5x zv0a+hOA0k7TE}MN3>QRwC9bB>aAV=%H*kDdM8)z6XWFUjJ_-9}uTNipQ$))9#?_jE z7LW^_B6e-)Bk0ix(H2h?(V#niLP2foL@wP+;5B5~=zUI~Acc&6y~>#C#>nnjVacGy zcZ#*Kal%2&$Ws|Wog80>YvD~kl(Z3zy|@8I7fP_Yf)vKNR459bdZckwjt6bDLpL*7 zXN*N%iCp|qCF!QWGz&-*VTuG4a74A6%y+C@%|*$-6T?pNGMrX2sk%I?tpGpi(zCPW z;5p>)(`&q|@3o`Ek+BI0@XY=#9pc9hgtT#bKmO;g6omFD!StKJ2)W6@$9PjVJB;RN z%l;r6dP7c2_=fyLoWxFKuO12&1i= zdDOZf$0fg0fB2i*D$j%)pNZQ4;)kr{_6%3QnKT05@z2Lh61D_f!+@e=Yr06IIc z@4(`=?T#eCSK)%>UR(yNfZb}_N0=aC0fg;FY6OLUmL zcTo@uhy39J>A(=|FGI~>WyY4MO8lOf!2o!nrNi}FJvTHsZ%)f&3CD4~z^4=0$d`uW zgU?9Apl5z(8zKZ@XnpcN=43(J>0!VK4$H@*YpN*c!?gPtPEJ#@C4q=4&l0G1O)3_o zBHIKptO6P_9G-l|^>-=6Yy3Yh%t46F9-8rWjLTWcy}*L@U`_Xere4GceZ3qLO{YX_ z&FI~&k~sDn;7R|inNM_Sbl-Xe$J8jg6kMl=b0Kl_jAMVvhz8dBneFf6D8NHxhdz;K z@N6Cb%mVNqp&67g3iUR_MSR_Qn#!;zxBExXvxrR0SzQ7`9<1t^x}*$e_Y8B_zaIXE zrZAD1!&G~Ze|fCWNA_fpfSiLQCd0n+#=F(m;;uzun^q@W^OuaNt%P31ArCED=w}N0 z$;@yR+tG|;bgXbfKs|hyv2q1X=`mO@VTZvXO-Frxz_~On*}ffcc5Emd%O};%>_Z4K z3D?cU0L{qNS}|URy-KiM7COkne`0(!lhmJbeV6K2q8okxyFrw9)@W|A6Ipi9i8@e- zY4_d>=-dQa*l_8e*Z@hYhtzXE5H$4d!t7k8q8w+H_ItgFU$6#X25x=gl9+NvZ zM>xX&YL2;#eanAvd}vugh(o!6;zjEr0H!oEtd4Oh3A_ILvl`c4LLUDlalFhd#?((T$$rv|2^Z3blU3Or{+9^ zjL-y2Btz2-8AOWXSDs75b9Z?I#=qKTP;%!(!x4v8nCGd}mucnnP!Z1_~L{S{nc*5W|YbquNT^J>HNqS7`eZ z%m@ip=eQE6%;J;YjH(thE*G0d*CLLULXMFM+>>xA0!z)uo27H|ZS%g3x^N`dChYCd z;A5$8beRTk9LJM?%!4sif~pE72NOx-xS~1FH7KqY^L3{#R4aRt3s9Z>f!B11@y+nzW z13XhH|D;H3(<;+z#Ex-x_}b(>w$nwIBCTz8?-;F}0E~3BXeggMZ;(Redt`>2GH6;b zFN!vi=X{ROrudLsw}{kg&`b|N;nLQ5Ae?}KYi-fy>;>N8?U_Gy;at+A;_0Fj2<-Ch zA@sQ1aEC7rjkSNhZdu1Ilc^+S*AE-J)INR(EUIJIp5aRz-_e7;F0SVKF1AjEWm7r? z%uS?yv~{#Tb(|%W<8R2|_78#=8vg6jM|(7#)i{(etiKS5qh7%9ICR9*BF>zp8bevb^}mMIqp0z7H4E z-&)9#c1ley&pH#jW}=lo>yN8^nl1F5n;UT^XjpgMFAADrvyDX=OggLP{;DVoVtbC+j>ToZS}HJ)TBlSNX$-Kw z?QvADYlYP4l8))L!j2k>5TsI^Wl~dE17MQ?2SnS6dt06W5-1W>T|x>1d8mope-KrO z0lK|nM%!dsaVN62ZE?dT!2>3Oi)1<`KHxZ9G)P#~{>C&?a_Il-@{d~vnW)Y-IF=3l zedkXx74rD$ONP=DTdfUBq`{_I7;!j$EfVkX!mlhvE#wwh?>N=OS0kdZn8$WVYI7TV z5yHE$(UBUG*qnNn(Di6W!M^k;NS9{Dv{O*i3=U&(T%0A-3;-R4Gz=ppv*B@$PlL!%wZ`+jEq=N^O`&L7MMId6ywN?CMQfI#35h zEv6p0Vop4XL)f~g0pD0eeage=URFQ8JaF^@4o@SUIrNj8PNuLG29JMnex3GH zWm6<{It+M7gLBI`>_l@Kq&`vrF8Td>F z8+N$S@Io1RZ>|okW^CtZ9d0yX(hllyVVWtGt8sya3P6=@kcO$hjDFw*3FpJyF|D11 zK#iW^CSr_`Jv?;(?)tpXGw*4{{gRvG9u`Ub+SkNthfc3}^ff;FVNi&L#wTbnBI4M7 z?;4&|#+SA(tMlPOd`IjQd7^tYz?&L8*W^?ovuMZpMZdKtSe}n7FG1xck%Y3YQke?? zYtSElf#g%;@eI$-mC+!7jB?s(C3}Lr4URk(&It%KQ?#M(TItibv0nSdGV7?;T{K|| zW?TfG2_)lHOVdNf*R8Ndd~n~3ma`N-Qzu@GHO5vc#y`ctb=xv2(i4Q;z>*AbnI zxHcfNc;Cz}!|rEway@E0?Sm6Ckl)D`@G$R8-^$?*N5I3}T)PdBC_gc2BLH$ejM8qY z(??`zr18K&3^ug%QDgP_%ClKz5OfF*MwDH+L`?Es29uFSDrZ4-xvaTA)=$p)d0BQ1 z_}(<>T8-d*9-!4op4sP?4b?}w5ER6{=&D%MpqEhplaVHk4>oCnEpOlcV>{~r09v&% zUWm_C;1fR~A~QYgui#x!L#hnXJ1XD-_VNt;4&|C=jk{6J97ZKcZ<^fZL=+A9wK@8f z$CdzUGwRsU-&mf$zzGXM1v;UXW%J>-)q_DyqC^NXhbVhq{U!Af10s`+?guB%4F_X2 z9J8g@Og4-Rsd|)D<;6q2nBmK&K@xu9+Wt%h*0E`+Lgbj2uR~(?9=E_P@0W?!M%!O| zwgs>Xl<%McSC<7gsPUN@vOx$#EWHC;TNCl;U1)iV+iQO&+T?~%{)t4QP^$J5gOPyW z1NS!SM<~&Hsdu|g_xM%?o6~l!;|Bn;PI+_kc~#lMi;rj${)S4tAwOK?>47`#o#_Pd z!%UNc372EJFn~D{o*3igk*M2t`KhH80XM9NBd zvkv>87=4KuDTQL-9ZVj(t8)y36&-xpPvn1|V%`dwu{K*?b?LG0Rd(Sa^D#)zwxt^0 z<=g?LvbU*&o%wt~G3d<& z`Oz72(OAu7NV*}^<(bWlWHn7S3$vDS?l6JS;Y;QoDNa}Q_;`cye08UDyHi~#;K*9d z7<^+b3y88p*|M`dSY>(d7!Wxlf8=zXzO+s1G8fKW;ucN(G**~eF6U3&Jp^Y?wgbeB z&i|8H>`@>x(@^`G7`#C^8h}OjDcKxdpJ3Nb=!tNgPW+H*PosV(A7maM9hMC-L|5L= z^!*qp<&2DCb{v_-fM+$VunIa*%^o`1OnUZ#(jzP6Rh5CO`MtOp_C)#|^8OWxSr0Yt z(+iePW1w>5$xEyPwyIP151N25X&Qz7}PVl%3j zYWAERt{9fF_wWi?a|%N`6dhnd0C~%!iauuJ2RFM7g)M-42)!efkJSSxV}b^fC1OlO zg>kD2&lA)BCVTBgv%m@z}G|o>F@GGJan2l@sNOr_Qc(m2Z+FMK66%<$&lLo40 z_Wv$G+5#?Q*dpCGyqNpR87yT(_V-aSPlKm(97$uKa`JaKT%sS7#6y~WqWp6_O1q)V z&jBX2ilT?84qQYxjSZkh^g<#Ub0Z03^&RQfw6JLcQfg5BZbZytfOp5LIuz6p=Y7QG z=1-_}StG*H1dl&?uHkT3ictOjMBwi(F+AkbaKP@r0|$TJM!ix@X6WE(1q%;Npr_!T z)2aufKa-|`kSPP^n1xena671td*Jr3kBY-TD0`y5HZxJ}1b$bD2l2(_@oq$G3G}lmdU*o2d(9;s-cs&dZ*jZ zG-iB75d}naff;{!%HX)$bHw*U4UVeD(I zd~+jq5yR%PkZ(*$3_KgU{5I#n>UyL{)C`6={X%yU^=#?$9DA&-6}LY9&bVWBdP+52 z(#4rMfQ4T95r`$xSA^WVVWs+couw8cXs9Y_csGwneyGOOM&JIK1_UxNnN2Jmv*d#8>8E9j}{?E@%lPvEcI0bo?0G%8K$(7FDH7L5orQmz*)S>N-gGPLj9ber#z3BF5T)_y4) zu3cSY>8ysR{uAO~UTB#BAHrf@Wq@%xc2D(wibB^N{|x*KXxdgciMH~Nx)QQkK+N|gDyH#xA$=h1>6PTa2p zN~Ew}Mgxy0$7iI(<6mN_Y1s8f8C#!7^_ zoq|4(vtkVOV@nROWmPdtB#K-jU;1#`8Bo(>5A;3Qtpz_pm^8SjuQXNcoU zl(H7#`eK`TE(GKJCf|p08yY(7ns(h(K+qI9V%M){hKv;x*FA`3rtiGo+CeqXNu_k4 zqhI{2mj1U}1ZfQ8=`@vPY#HR$Epu4e6~(E4ZTV=^ zTz2z|f__2(41-CP@L^-GDy29+-7?Im)nguC)nZ9;4%5$P(@#EJRJ&_l9NChesinq( zrbu86k-@Oy=alfYG%hDY1vs9;yYs1ZBXj=9u(PQ5Wg*aQAohF5NUIt?y@N%rMTQx^?j|XdN%7DeE92Cqkw;vy@-t-EtznY9SD?7=*1qoVFBwkWDR7u z><)#*I z(G_RXf%le|-lR|tERFsvLQ@U*4gX?B$sZi6-;c)*Z^$}Sx*b1{d<;)W^y_6)uj-r6 zZ;DIfEk+{>+b@&Ll$0wHYBFjKpEajz%X`PBbDO*%|KB2VYpBfN19l**O{BFDEa$zf zws@TLGr42U;Q;LQl|vj3rB*fP6wsI&i1jPfl6uEgWh-pPsz5>JBcbtR+xclWMGOTQv9<=Yo0tN6(B_@c6uTvueMi0gh|FMXe zcZA@YVK@X!lD5<2ZhO(M5G2cz6W9gQY1Gz8;em_n=rQ9WqyZ|e(GL3XW&#p7Iaatl zr+?BZW-ss9d!rv}d8ih$o!5@Vs8>X{jCj;;#Io|WF4UmP08e(dsT#)oPcW8!QC|OB z7>BXe5Q)sR&RQW9m~mT(Go;$U3-&JMRKGRuXg6Pg@R8CQV>BkVPl~RiFipCHLrm>0 z+>H`E&y{it6BvOF%}~h^=m6)B#yad%)Fy#Nw>5>=ypxI2^#ekO>N67O zzx&e{P^lxX42C-)%&)FLuFseLMej{< z00$fPs($-WqMj2=@$XwsfwJ;aZLL<(f9gAbr6_3Otce1wdt(gE?{Y2?WYwD?G9`tO z;V~z6CYOQ{+iW(G%j=k7#JI~_TBw)|v#~j^3&ZVum_U2^hsHRb27AvnARYg_-IfDfu>su3GEA z{rDQ5D)A;{U`&eiJ;aGE<03yT)~Ujr08D77@J0M+8Br9Y?MwAVdR`otg^!d`+$5S~ z&2cQ~;tR*4X203F&uJ$oX2jU(RsdVv+74@&>c?m>*ABptIwxEU{=F5A$K$uE&U`Ap zQ#s^g0l{d=2m~9nIu{H@6+1bLt?;-=|~GK zpoDm?E{lJ23CG5QUV+xtu+2Z?mj}mkvCdCSU(JK1CMQWusvQCXeKb3TLgd9mvqo3= zl5GMnX`>-R_N1-Q8;w&&-9Ru78AoOak{zV$QQvoLbS7|N2;5ufZD;9d9Nu(qD{^gD4>)>eW`45cf$K>X0Ee>iaKun z{N+;JyV<*Pm}z4TLl?`B45x3ojyZ_#TKwR zwbk4BXPipW?RVc-OJb8>(dHiZ1-RSlbcVUhYd8ii59FZtraDxm>$(JE0T`6ZvM40Z0IJ_ec zib|+I6H6f5z$hcgnQzsj)+yz!kEoVx@^EGbXXGq03=`I})90Dl zrtPgtLDSzU$4z*Ul%MvW7En{ll+yI39k81HmVg)BXAboLJoOOraBI7SK=f=C@#Ftl zl&H}^i^|;sPg<=aXlu5LL*{>b>DSd+jyIWKuO#g>xx?~25Q8nzVA=Q)H&WR1u(ZZ69yrLm^VZfaY*^E*! zf-yPzki?bkEj6_ zp*&vC-k@szv2*aLSi%6y7qGEbd|q2tU*_n?mEipPM;qgeNw^3h@@Krf%tmN#ZL5FcP?6zfJyI5vcggP%)+)HM01v zrxuQ$%f!`o^kgWugvw-cr)28PH7v@$M$ubyjvHtI&E#&fS;gc(d=HAjFez22`N0nz zdWEX8H-ybpIMNzh!wv=116+yENk?m(9_j%3he=-L^m(V_ZaITjqov4kS`;6Tx9Mn3 zz^C|qi}KXWok{LKSJ@t7#5ziqsTzQ(lz-F0rn>nCN~|4s`Y^a%s~IoCZ~Xn_CXV-n z^@ev3iOGCiTTa%Kx}~mfqp~M3V@_qepIwNHxmIgvq41aU(aM(Yh>MP1-q3WO(Tci0 z;3APHE`IT!FVCP)54MOio*s=DV)TLC9{oOwwSN1j82Cf-ZzPCb+=s27GRsGZqO#9W zB24U#4dT#TR=?xaJS%S}N75cgq3CrLYdDbWrV9BBG$WMi9L(E+e!xO#t`}Ho#4Ig= z+nVW~kgJ%F_rW^aXtl*$aqf@M~(Ow6{w8lf2Dl8spLM0jS`5yiRC zZJ-YssPIg^Y22tppW(!sSj$z3YqB6ajDu-APmz2SzY2X40563CXb78gwIj8L=vOQ< z!+hl|h3-fX+`|K~ozv+w2!}dfhB8B%_);;fFu%BFg0Pq+D=#YkHNa1Lu**tUQiJw{ z+!9Q;V7sN=Ot$sT1y>aX7*WeJyn_%`C;R1`$}{&v z-t+ZFeAKK-M!hLyk@30mFWr@9?jZHR@Mc{3HqF35%AG=Mtba@f1O9f=LNZWRz z#MxT*$D6oM?LT&N5W@z?^V!^xf^B2Y;RC*-5`?trAT||HRPcPj`#GZy7@hs?UCPE~ z-N8XljBr1K(2q)}`>QUv@{L|v5c7T>x!XO!{$8%!fX!mGr4-wjQAh_KDNUybvi&e) z)9Gszpt61zA1j^yRI{tK6|+WFHaS%ROdwQ?FHjoL0&@au8Uch9=_|eKmg3*eB1vTr zOY*^Q$keSDrYf^|wp||SR~dc;bmaQqPuSu+%z_FlENp&^x-jKisJ6>J;-F+h%Jc)C z?UvI`a^^xD2_3+F&ad@d*#xp|(MLky`U@x`aql}}YlUG?K(I}GmViSrr_wUm-~KT^ zs!HvQ!y?mPkDufh0$6E~a2K9qR6%qwpLyKI7L}6>i}$k7p4vWIUzm!At{uI^^XPoT9&t} zOp>;oq0xHO$H7ewZ2mb_=$0-m1ug2?=P96 zn+_jA2e+~c7#NT>61{Yy2#_9b>(hwbBjB}cYU#^c+5iWCZE^f=d?g+yZ(2wq;iNN( z27eH4Ws2|b$Tx}X47G@{OB%gR&juoSOl`5WAPykz2qsF9)_!nCox5%U8iF6UwaF6> zCik9wu2Q6CWkd-|TvcrbYYD)wZu#&w3Ft;9v(o;)OoClJ?TI)euW$QMJm8Dc=zc)J zvXV6dp$~*WEQ5KA)kdTA70g=-YN3N_2pn6$bjw`lmE3W?Jns`~;~XgDP_^dlYB?p2 z&iTo0>k*gKg!W0zpIE8)$t(*|{L18|QG``|2TRF?6H$dl9bcivEMtg!bI$@bkAsXCWp=|3@B2oV&yFV7swDaCeO8~CN6 zUpG|}Yg%6ajCg?nCMvg{uy8d7Hq_YsB?FJ-9+0~^6zakjaUeGD$aeOU;AJ<`VljL` zBt_Bc46>i-T9%lkmG)UnS%v!I-jRQ-335pZHZc4;N72<#dOJp?9qD@fE_pIWSLiKE zEro~LxNsi;V#sQ>nb|)S1p1z9+I?Rw%%fC4LyzOR$f$yqMQ!t$!YZg6UEKOAubI4a zG_F_FzL4NTtEGhVN`YA;5zU7RbQ=kZLJ+C1`6%UyIQ%Q%J*n`HDElx`y4B@`Z0a@t z4>*VYZ9cb+7wIBH?gswtZRXv72D1x(juX5bI=ea(oUt^V9Ary%FT^tsbx=FE~RiW~g$6A6?G?&vF}W1EZ=ndD;-WM_E*#UbFE;``rbv zjNP>Bv6{Nj$hFE7Nd+rbOBb_l41h9U!xkTq5_Q~o<@s20#W#dM$o^sB5zd_{4e#v z5@erxj0LLHGN-ZMxk?!VC}^x!ggdzql<`)v8eRqHnUJtSrBWDCbMxlXXu<928H+07 zvITNZ((&2{2MQ}zL9;iB&tPfuokL5az2LYVe6^Lf#^lQIQ@1C>BiPleSz;rA61 z3L8v_cB+ELd3{w^u((Xgma_O3Q97>^gav}dl8o^k{7Pl7se9BiEld3Vg`L z()r%f{J3cc2YzrXCD$(J!4T@MF(d|S3^Vhd&*S^*n)aCDEm-yZ7`d*33c5Zt$ z-1YMhISHgQr;~WYHY*{(f#BIJ9$`uo-*6NTtaG>HQ80IHRVmECVDiHj%XY;htYqM! z*1UFLfrE(kRiQ?Jls)0A=aJtOu)7|}^FZ-+r2EPwKfM`+59+3DmhTV4n)#Fr^ux)< z&1S3?HV`~?y4lv14NO-1IA*xiuux6ob-Z&%c1^;Xt$exLG`y zAN@V>i8m2h-*T5jiT$oo%~6MPdL$+Wjp4=g+39m}PGZ$gWBhhtM96N=(}4w{xe4Gw za0~a=mW$6@u!8+&92(<`+(g$bY?0!rZ-5Jk-K9uIG9`kYgg#N6>A<=Z!v6K|SDF#x zp8*F{p)NIr@x>?p)!>G&0?Y915FIt8u2{3i;?X}3=Md>|L6ghXALkYY8sQ+swrsuuq$AzYzfa}~tm0c>PK;aH`rI^DH@ z4OKg1{-l#dJr55k6_m(Uf)cPd)`Z-Lx|iL8%pL9ShoJ(N?s5>UV;2xaBDUTMYFZ66r(Z(Gw_eQx-H)tjM`Bq{S`mwbs{!ALnehl2ds@S# z`^?Hu+u>`M987=~5Et~ff=13z56@0F!`{n3{S*od!dD?zCMHcGr6mX6G%Xi%=xop2 zxw-SNq)`w1b1+JA{KM~dISRNKrx*b(W~MQbo9jde6K#|XEICb@I&zEEE>*7$6Xu@v z+jHg)!?vU9<_x>f_;?BvFl{DEqr9nKc-c~>W`vyv?t4K&^+9#5|X;j=;?uVLrU>yVe}l`2u>?I{6?#qJ{3#fu-kMg3bT zl#lnoQ_FsAE}Qi@C5>AdCimfxQ!DNWG|;oiiH|9`OJ@pai#|aHO?EBwnsVZ{)4Ua&<0* zxa$apStKg;85Cg8jmwgr)b>)AdDCW8Zd7yj(fd1(0Wz~`0*IVp^a@hMS(tFEa0`Z> zHGsinu0Wy-ucMqrAlDlwc&#QuErIr!F%k53XW;nVOXdal=^@RI7y^JVT}(-#2J+04 z&6LCLpE1U49bFZ0rMiawE#>Jg)s+RAM5B)L35QcxO0Q#_V1B%I4R>ncvWL+SriZ^k z$Huv>kDUB`&zWCzMas4>h(Ec36@TQUBAItF(rxxV00%~+z|amF3J?%QoS)$8Y6 zUcNr1Og$H&Zg2LtRI*0>1|d-S5eiJgUA8NlJd(!}`iEwa$S&D<(vUU?*au1O>G}0e z-?=46M}}2#l<1+e3W_s>nvI;Sr#K|eNn>L&dPp$2OH;lk?V~c;mCYDA7vpQK@`B{% z{$k8AR1b(-lQhM$z*y{{K`8)YBz1c&l;jt8@T`~!&3S;FpJjVBKXF%IAthtn z`j_G+$vl~smW{7yOL@j56*QkMb1vuk*Qax@xR~C@;HDhR*8%Jfv6IfX=aCsLiAD?t zo$u+=4Q8FQlwG4;*prw^Fw%Q8*?P3Jps*CNaQO2Ty3poC#jbN&v6mZFu8A*HGat2; z8_Q$c-5NzGoWB<6fe{T?RuN#=Us?$ojI(pKSTmy|1W_)c>&-)B)detIWT-Dnb5yJA z4TLTXRL|3v{Ylqm*pk|^}9PT z>{8vLS4qL~@MZx2KLEhJ2au+HP^o;|&K2qiex#S}M*97^pLZOW>VtTkg+svZ+&KF8 zZ;Sj5E3_5O*Du&l7O6!@*{c{}izI{#)2cCt)Rmk)LjT=!AjNXfcgzX21h)ceez?fE zya;Q&S|0=@Gb`HB7nC9i;rp>Iv1jO*L|W?x!*|MD6Y3^0&>(p1S$8JF1e7z!_RMGI zIZK*%>$+b={AxJ+=!&4xMhR_#Oe^-cZ1R)&dct#N1i=430J~tP!jvro2oyFAzO|Y3 zwry=+=i+;btIr#|+EsnYD#9#&A(Ic?mf7dK>64E`qYI9R$IS=U%ldLk@=1Iz*uh z=~V&JK3g%7?TbgNnVzzE1&;|B99rT~XgP__;dJS)|338Ln6^>m>-nYiUKp5x3>bDe z$cu94zhiD=C`JHF--4gTRTGA>dgO)CuhIkj&=wJhOGbRp>m6ZdJ*XauURrp%TK|UB zpICN{RYfxe6<-}|UnI9!&9^sxekws(Dc8hhXW(l*){dd1Y7Qg!vv>d=P)VYF4wq29 zI7T9??q*(>DpLuXV{-47g=(B0F8Ln=_Wv#jL-;Gbxhpa-RxtsTRgf8D zvvg>_;5^5ZRdG3ygK8y%J)zBb2bI^+s?Ec0%Ws$H=D ze8oDE(2fvbvDEB_H3C{zGeRCW*fIv?i)Of~5+yZ3n)Kt*K;T%fXTs0DZ{p-zdb%ts z2|PQAa&3>|I96LZCzV3SSE^$v3#LJwG<2`Vw~Gzdun zwU@E*lG*9baHk8A0mJRia^=yqW6wlt(!UOR>+X*U{)|;Ru?}6**6o>X`zq9e&$-S( zJC+c9(70*%oVK2oLg7?V;kBS18_$XRPRpg_)l+XyEigM6&M)P%zr)hDn74<;%q8czWe>Gf=w}k*i%g9SifQ*cv$G|laFu*Bg|hCV z0VBP;AkLmvAF~@jb4MW_nLXM}9h~~Bh#)j>UzlQbf#)ckW7MuQ;wo|d#5O-uR z*%bA%4%ACGltLWQlDFQ{*YLEqilO}?xSr(OohS;Gw@o1vQopbgi%iGIA^Pq>Y*zKU zjaTHD)sWF}0doOLpXu?L1lkuURuChausW>#${o7YO*5(eEE(kYA~Hsnx8z{ER0_Y`z~72mp!vy=M5`f{xu>>}DRGLNTPVY%0m=A2Z@O2vA?IaQwb5r>6gAZgHD0pXHJtl# znQQ{}g9mD4iy$lSqyJGP4XEZxB!B5vw#loW(t@D`)k3#8#+h~TrP@}CnU}Vkp>Gbz z=sapQ-V9dVwr5ju-I%<;sGvRwE2AtNyY=mkYdKgo7Q+bbtGin_U~lWvO&RH@sN>TV zY&O>WlKVdRFxX1&2g>poehx+c+{9@w^RrFsK#ot@pAft4tG$b9VH29YgAnGVTLJIAJc>c0rsn1E;#V?=ZSYR0*X~P_=?SrcO*+%KQ<5QsG^56tLpG+;_D48NB=16t6IugW|_zb?K6K>_m z00hr1;xe}s_8EHscMOd&24^t_cZ3Hj z4cs@Gv%0FLlz_F#Kq4&brWg5NG~`l_ua4UCXzLi~G^TS(dAiw zBGIoTvh@0?A9#(hO!zd=|3BAf9@mQ9;?KTpg-px3YS}Wv#+4tKRD`Our?_X}e7*{Z zBu->2weIMtyq#mM3aF3KR7ynlp!lwoD^ItI5?0KXC1@3pBr~tgam#p-EZhe(h#8ab zY8j2+eSD@-+;?7g!h|sMaeH$cB0h3Y#r|x6OE91Y!?t~&PB=KL#67gv{E|`tsg{h@ zD`TxuVaN9!M8#8kGG7TWZ=64p9n! zXc5kb!5kG~j-#)5GU(~tTe1`Jo>Y2~*2qbNkRoEWYX=YOFC>&qs&2dywjLNTZuk?N zjQyvRt=+CF@K8FABUM%OXl59Y6nr5n_Kb*4N?ApkQYqU${@!<%fFl%E+?v1Wwe?{i zz>p=ucuAH$?1rPAliIPQoc`gK%m0qZ8*KhFn6n z_e5%9y0XZ&WzMS&f5+en2-M^EKuE5MPIG8Z2aSR$zWkxI!W`<_maFdi67#jVbfz16 zbM{rO@A0iV&6qvxnIg+bbOb*H;1g5kuq|yJe*fk7@<&!bUz-7`EUi=zV24nK@7{Yb zb{XNycIvrxc`DM=BmyjA@|GX#FwnDxk;5-EI+ zbp>pX|DbTV?zPk;b4C4~`vp8eDq$J$TN>a%4{3Nkm8W7=xyx8!9~~qUdCDq*2qy&# z%ZIn`pKpR>EofB-I0%pkdR>WnWrfn{x3l23$*>;p!pQc+UkCFnx~XBX-)X_|FD_BL zo*z*KflWaJN&X4z%2`V+^uG>Z8v!~olw=pk1b;%te z2aKe@u0V-GPbpJOBiI=Io0vwpeCZ3z*E&qA<`NMySeB;C#Z&V2ZY&@Y(?bMlshh|g zxD=0HZ;O^3K*T@>3N;+b~6$9Xx~#x98^ZlDSc=9F35?f}_ptHm1YqCE5Aa0|h zqT#w=Wze>4vqwdrWO{?pNyeZ)bH2@8nrU7a4%cK?)`8n=EUhcB02y7;k9g&&7c8>U z2n*Iavo32K_eBqZTV&|A;s-K#-(Jz1##<3~<_hC3?*j|XR_E47t%?t00@3M1zPgON z&FreCMBzSk&!gi#!#)}C%OFUa!t)sYFIK+-={j4Jymlzg?$HQ2c9=P)6@ADNbF)f(c$Ou z>;Et=gy<#>5c&tqUx*r#S55s7NUfblaK7y?1C#y(NbrITQw_ z&5OOW>cck}pE4-}cwE6ej_)Q?Q8}uZuBT;(1z)^Cb6koczVIV5>{xgswalfm6jJ5lUZU1!+=cBZ=1j4(WK61lxsRGU}l|lGu#-qJl0EQHs-(Mf|{jB70%FqninUvF>X`u#O-O z5|I z^uNJ^fCo<0wjkYrH(G7Zt1*>??3=Lwp+B{eL&&chPQc_b)K8>&Wr{9-)J3Fe$2Nq> z;=AT+tltQ73wzoqr4$Q_Pxmb7*6ejsIz_qzXfCUE@uX3VxprHq$|Z@f_(Zh=Bt ziL={`U7y8~v|-h1qGyPx7=90gA2$rx6&XjZth!h*Vy^_lJ?mTC_&K<0!|z(Tr{A{I zg7i$dOZ+FR7vg|FK8LX#z zYwptpoOW7!gEOiiupC8JqLscjAQuUEACn^?#Ut}cJh05!jWiJ6tt8@2`Ou_TjTJ2i z!^y6}(>cvF45br=h*7~0=V82%CCvm5yAo8X+D!7_H6n3fDxfF&yl}!S#k_{q4t{&= zin6<9r6d<})6n$`#e@vqG%)|Iizl`@e-EFwD*NSJeSCrrcIpYRcpM@Xq5rQMLtCV; zgo)?`<#RJ4)5vM{IH9MSc0B$_%@4$Xz8>~kSj)s2Y}E*CwWCWZbZzFw%!ixy1EKS& zcq$lwqY;wm_ANVKdvfo_zBm_>G8UP5iVUx5-DQrK=t$v0WY06ooxOJFEbkvjzn)^? z)@-Rie1zp{WXYW}vO(VGiaee$oBi)fK}m~*AIh77C2S5!BDQ^syEMFKaMLB&G36-< z`l_`F;6!cepZ7+tIA>a>9|}S8vc3u79Tn0bmG>L={cy0O=>FJ+#OzYT%56Rub^>cb zbZfBQ=3hnGXdmb{_V%52n}EwoV{e{a(myZ^q6^z+H7)GDBg65|2tOu-{p#AKL3nYn zz%b)Mt)-9vvufuu7(!&FRhNK-p8R2bnGuy3?ySzD-PV5$nY>C7?g)|DI zH^Lm}Q-zoFA5pp^RHYeafm2IBK_^!)UDHHXK^Nra2xIiU82@RWTdm?^agy*yPwmj< z_lhaT`vJS4_E6WY4tX^8M;O{PXc+}}t_h3jiymysff*~r+2KG#wNXjhSIyEAN8FSk zTm)iULm9vM5-RBvE<9DixK#0#1NsYBsd)vC>H(I>t2gx1H%wpS6YQa8nIbPGr{ zx53?@B-AV33((}|=^JbKG8M*O5^nK+>aDQt>&IAfb$I_A5bq&4VJv=&QpYQ%q6~#2 ziI-`2Y4eY&k)KZWNkT-3`;TdLkpxXpegHyRl@sxoK3O+b(_To?KIMtU??Rx2xC1-m zMb8#Z+}Fh!PTlcf%LDFIY*n@TS6B>10ku#sD8nzqr1lrdmp>%(#+X)sZPzUombS5# zmlva?(d@u51)04HVElzz1!B|MS))QHn~2o-*LuEZV=QmI!AihM9-a&I9pb*kn0gu; z)bLc(oDYkW_*?{?oDYGB%%6oU!#(u_A22ZjRP?G7TUEo^&NM<5;AjcqbPH)XxZa9W z@?(`6OKVw;n{J+fFbW`7MRggA6(#+x>*HEPUFEzH+UiNvu+U?Y6Q&m5yhwVB3RrrO z@inXKgf>c0>Oe3e!(Z%kOfCu`b}U`~Y0ltQuKIq+bN!2P2yrFlx{5P+r|kmPRA`WC zZuH`^^wXacaOfB@DccuX2(=t#@%<7(vUT4DhppJjXb^dVOQcz3+*HPJxULnmzaS=l zj1OM{9}Zgf(o&VQYz_tKi=TJ-lJF@0{54d6J8s}a=Zyd@t*ZGFZV+2As>_TWhhi8O zRjZ7=I(%5>_#dDc^?kojG|iT`utU8Vn6_qlg>4VY*%yyN+Y+MU!n-RO?}%1}oe8N@ zdy$ls*r%EcJj9hDPfZRQ&}8wmc0LRm+vn74;ot` zCF<29(m8ueO?1mWalFnaP1;+`KM5axI1UoVDLvn^?|IF+Nqj1m!aJW#`FF~u>5%Ga9&UXGo9LHhd;Ubo&p zcacIU2FY=%DVk;#U7y);0K#|O=KB>C4aCtc(Zsv%g5doSivJ`>Sh6^&O(@R?M>dqz zf0tuW3PIcpSX!@_(k|+zotX#U^AKNf`H*5A@7$Un*fh$6G)@qivr$CCyP`e2ZFZ%H z&^;^fv7;kQqMxgq)v#JaRUnN?Aay(hhj;96^$V-QtP%P7&VU>$`cbYqzKk~%THhU3 zBSW;L0!G0!lQg_;7XP5;yI?|^O=w4~ckT!_Y+Gk&Y`}1!x+|8VtzcPc3k^#}i^l3x zqXIhFD}tdkyl^rxng`0}1_QLnj}^BSIjUbR?u?}zA9f{wm);{_^?%d`I}dDE*`1AT zj9vY*>~uxhSl6?!)BU7Wh-hW0n1wQt5`J;GZ8?Dn%;qEvzAh>@qDbg3u9#89B;~DY z6MgGx9!=V_DVK%B* z=A-baoOGFMQrH_a5VyHYNSD*^?E9>jllRH3vcTHYHAAYA;Ag%!e^L!E)0K=GRGb@~ zy`P{^hbFwRs`Ss;A50RHqttrxzNs9!c}jrE=)!DI7CnI|)MRC7gi`^c*5}%S5KS!) z=bDEYqJ3*cu*=OSr}vhbr9Q?jXP(T^&k{!4!eg5PI}>rQN-?DTP6A~lTfim|faS5% z70tzQT>r0nCcl~l)KtCBja}F>814@hM$)NKQbIdJ(J1s$)H;?De8n>)`JJh)gZe!A z^eCrM#|;hff)E@ZC# z#nkRRXFf{4nyg=%FjwJD}TzETlOSnc+}uR>vM4+BMW&zlcobZ zbw?O>;&Jv>$}r_hONVCJ)|3sfU-aC}A>DtCFTavc*ZxNV8eFuq&<_U+@#CIcY0S3c zUS%1ASfCdUFws{QRIXp)X|5ngrHahQ-v(4>T35S6q zTxbdTnyy}912jnJ8`yP&A!SAQYm{abo`q<57l|H{8kqW~`)infYhUNy6Y-&dohcUF zv@)Bb&`bwV)KV4rlp!dudLxDAMvp7}xEJn|T5kswm`E(>mnT)8kW`~YG9%{#hsnW$ z1MtV$c(>3c5}Pe|>!UcbGm~>AYtWA6U9b^=ZX9>D|Mq!=6HJfwt?h%r)W(Jx+c~|- zZUsLtNo%6@T7MBwcPw(+X>EU^a;1Ug93RO_NnE(|}v<(oq44+ehh@2qPd zdE34$;9l4-4X*Q0y(hbxh>S77(dPd)k<7sip0;YpCI{sz@vUn3DVOwxa>>^kIU4o2 zq_$))T16N08v!_E?SaDdUkVw?r;zJf;!hfWJ2>4$gc`(uV1jWyb}m&woB)3`6+_J> zla(}JIjnApcxL$o2{DM~;7CP7^eoWN4~Qy{z5b)KGiguYxH2dU2|p;So& zL`C78oU7()48hYc6IXadtAC^^t7uS|)!?9D{Y9KQ9_1PE$>L7m*i1}3ZWnN3huESv z6|d~l-FD^S71=|@Bbl~G{3Lj@1wYDZQJs-|K*-OQ7DYh7SNcv6PDoOlH+y%RVB7=| zM|NzXHJmQFJ|w^Rw#oFKUOC8OaoYun35=zpv3KEDwc;mhqjA9uJcun~7?5&=)YSq| zvZR_e1vBD{D5vDO#YxO&6Ds2o`A3d7Qy5zG;L;TY=p$zmhM`aymb_&*ig}AuyJ9%t z#l4d+5#w%rN8(WNVl5P{@zU4c(S6zQZA#;}(68oK7^}^4S$q=aKT3plA@;6$7qq8>B zpbMzehCS;=AS+D)u{G*SZ?Dddc{U{@+WA8Q1fP2uI3})F z=i9_XpJK_#>tQt61|x$w(_O-u_cJn*$`suJ0Cu2zB48g`iEHg&1N*d7ebiZzy|-i- z6s4rvmb=OZI2h#fqQ|UHsEP-EriDlzo)jf55}V?F>Okms#x5WcHgEK!=7(Hy!( zl8u+*_MXhZ;E>8@lA3q^%H4AnJ5vSspov_xQI;)l-Fp4Pr&(nnR}%o-RC{YHpD6YF zx?x=%5vV&upp!-C`4oC8RC2uElYg_(!??4~5LD~YA`B6l>W3GHoeDdGKwAXRBkunkDQQ_*jVC1P)J!Z_|@k>Fp4txLOyZmSURTi`=7Xzm+I zdW=hYKCtmCK*3?S=konZT8%~@Jm(7)_uL{Q_Q*(1o82Z*bhcyD#=u<1eQHyiLgVH) zp%PFT)9!rH&gJ4`4*U<;Me)OL?D0CKIpl_uMy4=0mYG@mKz)v)75r=m-rS3JxIeVk z@~;5Ax(RGLm8{A5gdjT1Q3)*J!2cZG4FGgGRO+V_=KeUs{=A+KT`q6e0pw5-P$L%S zD*b;>4?nxl*zZ?Ho&r^s^$`gfzi<&&u~G(FwuqX{GKL&9g?oz3dt&HkmGzC`dgfcF ztR!hjkn9{HP2r#qZ%q1kZ1HIZl3oES*QOkzdAAi{fvFhRWDLt1waLUSoIfd_uDdV= zokR=Yt3&)%q&zEUBg?yWb`hKhGr>Zkr$xf(t*|v&ukbSsLNog~%Fe(`iG%^^recD= zZxyP0V*(t?7;drEbC*?n)1DtT zfpVIMxeAhh_{lQKkDbk`M9L(`v`JMJ39hQ7exe428Y(X%^+D7R(d(j_+^Q<<^b6F^$+IfCt4l`t#+|2)idC{9+)eicqzXWbEY9>OPYR930j?00axV^62Ma z<|s$i<@}b{b4y>#!((%gINlr4Ca6MM(HXvB;qECxC^5r5v}NKj``A?Nrk%R67uDTZ zWbr^MXB!r(&MqZOLJRD@9kR|6KCPpS18iIE3GmQj{NtXcjE*lX+{A)pqag1xS{xuq z+EJHooos=-@o$fgET5Gca_J5)q1sJX!VxebrKdK@u)pR?+@~SVD14T!eQ*7uQXqW9 zhoje)KwIhKURXc7V%h}Dp!t5s9e<&trf2vLt|1UfMR~Br7TF@9_(j(^Y3;s|YIFpX zowo6vmj$nwzyGV(mML)0Y!P_4O22fMUqPi~GPY$~-@b*eGQ1WW>hfQ!d00YI+3hD= zR2EWj?3=O6GeXrF*dU4ZeCcK(ftqsGT9J4vBacavD3$pHuG_boe=6~q`PD{%N#1}` ztW9mQsVxnf11XIC5QV1NkS(ZB`C9#o-i=1D&fi>ctkiV> z!{^Lihq24Txq9GVE6=XgH^JDJR%tbd_eVh9s93A8Uz0dOiud?3xefruf_B9ogFj7e z)Jt(`g_ihj9v3~3EjJsVbwuBzsgnH}pdc!kSLA<9hAD(@c231Vp-l1j%tb5>)IV7g zBFu+li%M)6WN#-ubtc98zT+xZno^4e3RMuM)64$2l;&~tTGn7rH1wC6BR2n>oLp+f|T;pZIOKu5ZWSL{9Vxg{eZ7Rs_o3nxjhhMcRw~<-iT{vZF>Aeh_gmKFTBP_!IC@h1^5gT|Xn9@go)__IP zg(2Rsj0@0HF+1>)+cV#{tmQbfeDZysM4C`zZG=yN*)C%XY$uTu(F6UV4}Zl@|FrA! zANzxTMpD!0y)U^g98|#=VW4Ew47;XiM|pND;6v&2dn3*+j zz$Ht5kBHEdEKDI!;elbVVo{=|1?dRUm8`ru8wIX_y=qYzpTkVGk(o6M2P`<5mbGC=39?$Q7xj_5uf>e zz@A#FK#6Jsi0aJ^jZD6CdExGhUT6qTV4E|j0hI56TgHrKUz{Jd$BU|=qo+VghYN_q zGEmgyfU#SQD=XV5lznL<^|GB1V#naeaCb-lGF-}pG)>8LmI?XZw9vk`F~<9F7Bjtl zFpgaJ=P2t<=CU|ENM^AlKt-tFQ5>tuCE{7qE6vb`wiae3E4yBe%f!;=*xLOp0T%|r zc172Gb7B3#i~GkrY)pv7w0rxcn1RNfMA4EQZM#VnyHhKlS>iUjRG@58UfS=ymN5a< z)+=_m8zLto2d2>nNUJ67oh`@qn#KQIKgy}Iu(8coA|S{8ACqj(hCxk{7`V#lx6dM7 zvx?wjP_HU$p6<{IKDz~x%^4dz_h()u-(KHR)rfV9&(n0xlwo|eaw+uwkSF*ud183C z7A$4Z5yETX}?xOKMQZUlxS$W)UZG9eIdc1cgWh95f+O2H<6|lD&lNzqWQwo zqqI(vH^_Y<3||(VO#wfjV%tbEuJJ8dG*!HhtvSe4+UCpMRs!IZ7(+Lg(0lSD** zpJaH^SHYQBg$q9U<7I(h&?=#rSq(WGugd3Sg9i3j0OUQDXP3VU{@4;coWPa^IhW?c z6R{m*2DC$6FnS?{NWE^$aho(heTc}V`c+PMXRC#$*Myx@XAI>*a7a!y;AKBl)`;6J?%NGHUYB-7390m{*1vaT~*yh0+fh7 z8Wc*KY$3OGFU*XB63!bB8}G?y?%}&#(`#-1P*Aqg3ITRdAfQaK&+r7{nyIH`|ACmF zehHm2%bp2i%`hE|$DG35?`^zBuFy$4-rG0*BVrb|4tH4D+n3l3MVix+r+EC9-|$rDv4e(?=Pa0VU$6Lc5YD7A?l^7k_41;xoEq zu4$Gc{$MRzt3CD!9p9`gU4Ceb+nHw-Q39L9h?K-cr2)}>6md6jXQOl@;L3JuvmU_31`~E_)nHBnmsv1I?(mT?_ z&;86GRmA8B3W5DN(xR(EIdY-M*g@p`t(~L8&lDKO+E|h&XcwdciKfQ%jK@B<@9 zOdlM`(JJrz%GO{}JBu9$b!(zq&_1=H`m=*=;T02OHckid9R@A8=aYqU{^;>Ln_Us9 zcWKQbq1N8X4{+*pB`*RmNtNA~K_Iq!MRkk`Q(U;x(;h#l52P#dcHZJL(-s>f_d!NV z+llcNj&6|p;uR0m5Ik^6&h5v=yUEJDhz5dLU2_yn<6SO~qzf&{4YqLw&CghUp8%b6 z##o6{_%^>GnxfKtpLCF~(>}ji?K~cY$~h=z8%1nP4oHemw#c`|wogTwzR~UTJ^|P; zqGqRgUO1_Dv}z?7DFrbOozK{#UP<=H;DhzfQR1&TdVW+^j6#|;0yQ{$(3Yn@D6ip? zr}tr{<5>>k0qkAAT+5;0Fa^tF8>qw)UE85cdHv$^^vEx5a~P5o2e_gs5RSsi)AsI`$> zD@*YAkJGc9by+^I^uM$uabQ3X!{ix1%E`v_mT@Q+%!BaUcr3zPjs3q2{M?)Fl}#O; z{u%>thWeM2zUPV4$3Ns#^8hNO~BqaqsJe-AZ?K;-*G~_zAuaO;p3CwKx*{*yWzqV;e zjiVF(rdRx@q!U#UI^ex_gZIQL+sK5k9OSBM!GRgiOS-pl3T6gUbaou#)!k)U$Mh2X zJ3uF9vzuruMiFAC*2d3EMISpLI;{jVhrvP>@hV7%uzd0!rK>&oVE#V;+_U~@Yk9aDBfrT_?$61ewKgVYnf3p zQp=3sLzZ1z&Z>cVdlkbG*6FzsLxq5_qy;@;P{W5qM60V*;>^I9vVeUt;z|&oA7pk4 zrq*+}(v!If3+^-7OvgXZAdS3yx)9UZ29#UcFHIg<#)sUwE#Sq~@M+GYr`DqXUQmbd zbuS`pZf*_DJqR(c+mOx?=g1*GL*-~M&ds`VwbC87#f-562JTHRMpXNsXCSAqci$St zHSnOmOsWv@%`JGP0E3co{#L8JCgc)F3;tj`*f zHsOhysV{p}yPgsHHTLCMw6a)TT|2$%E+67@tu+7SiaZXk7ljI@VftRT^z z3)Y4FX5FwI&ABE1dvLy*OA%c)E$XmO?@^D|NuXt^xH!A*yGGEqr5WlQO~f#PN;te= z{QKK+HlxAfe+ohN|I`xpW3s|+JEv23|Ff&DsgD`0eCc;fv?vHvu?uhN6!InvX|Cy& zyr>q-7O}U?93-FOc`f0+K>hmDA_N_qQ`}M8ZF7%H-c%?SX4?=s_EB!NRl#TGjli4B zm28s!|6q|1z|9O@PqheNUq??xZOF#Y)rK+kqsL}~X4b`Gaq<`_D zZJLU#{!o@)9>W;;f;J3iXS)XD3lDt7LqDJ3!FWpN5MB1GIBg$ceuF!Z!&wEE;gb{w zx2zJ3d~H@Oy#doe0x4h`nwSfbcipfpA*KiO1LURlJa~o^aPn>R?I-cD5-pJ$H}piL zRpKX?e%JzW8C-rfO)Xw>nWOx>vNSw&WG(c+Mh$E@0d5_UTxjutrhP<%nlP;_ zT}Yt%)O$~g)jn51!2sUw)<-U_gjv8&1`)w^H0bR=-8 z7@}lTHqSo_RsNL$PZ=^)Z0WhO?4UXN6YKW8ijcVwKD*qW#^7vB%zfhZYJ(>#g(>kC z4?3K8?V=HTSwinX8N^c1s~F;IWo`qgQV_F`^kZp8y*Iv(ecBMzCnk^uJU`tZRy4R2 z1+cxPp7`IVS5~__seMx5%C49*eF*srzG>{{T0rsX=L}<|UJnqmRiF2I@q431ZIWt` zP!u7rA_xLEax->^N*6Lv;-z3@v*`c;rQmYu_x%zX;3H30wLC(Zzg25ML-oegnZxHM z!LkOxm44$CLXnjUQ?dvluq-)OyG@DAKXJ(2qP%`(Tg}fFfqT2S8_&|AM`8;zJSwGnFgDc3U*)^xr=N?6PWMT;W_4+fs7L zwtz6;;l1o9STBW5^4wr+SU$`m!DZ6fkj#XB5WnzNmU1b3PZ}-eQXSh86xFLz+IO@W zz6Etg@}eY7j~uni>s|wj)S|3>&No$G_epGeo9;Sm@zD)4;AVqBT60;BbC5no62;Lc zlVyc4S%}t)$OT6+b1A;Zd3AxoMiP$N_i%j(wey$`J_rHiv+T>im11<7=+g5PuTb3@ z)yC8|0fkEhEmQD)C-DOONH(bJ)Rf0w;a=tSj}BIPeNslkbJe{B(EtppxV3p$8~wqV zIkMV<*-N12>Zl-QoR}6VX#yskn*c8i{wZIN5Uf}_^UYUyf4E|&+2Z#dCei0edAL<` zHD>W#z?z>@4Fob);+0ebVeQf}`syEx>C17yu!df6U-!x&Zq<@zleVw2GrUV_n6U0J zV&MyOu}c@TK}J0670-D^;IrcX~ z&W7+U8du>!jpnJdRF8u&P1BrM&!aT>g0s^t#CXR`h9V0c(ri+BRyymS#0T!QPL+_; z9~wrUmv~We01A3rn;|G!kBsg`38I`sS4CSfxAC1Bnbw3gHvw@H3lORV7uEVI_JZG@ zq{;Eo5+Yax$FHyv!!2DcEkaB0_BUt`&jN#i=P{fX!4F(29bCBM=(HqY9`|Hx1K9`V znod8Zj6DKB`Om(o3*D`-{`??utG7$yT3LTrwB?AdSLjJ>Jj#6^+@gc|KnIi6tVmkG zft^ch$Hy5`yOCfB5dF}+Fjcvo&T)`BKQSYqYeA}UQQhkj(W`TV>(R3GJGY;0QrV&N z@a}nS)g7Q|aw|&n=?{6OD3I#7@P?P&ul!&z5J4xZYMjy(uJn%j64umnTVuG6icpw3 z^SQ1|Ph#Oq&6Nxqefkv2$r<(txT+;zev=9mt29i&@W`Vd5l)gI=lDQ2L2*}3iX<4J z_rb=NjRp_9EJi%M`mVIyy8BXdw27XKT3T{3-5Mms=RRR?1yhqA_oveyK4`1uF^dbW zZAXt`X|eSAP$Ve{Y@Pu%L%&Y3e?}phllsK1%dYRaAS{i;2at0;5AzhU8ML4wh56tM zU5;G5ZJ5qS0<3T3z(i;)Ru{8r=8&D#lq+Kt0W7d-)byj*YZ`1Za z_RU3JW;RkGP*G&&QD(wncS~?NNwb5MZ`)oQ`JnE+YaQm*{7Lc}##}ipR~!{`lIuQ8 z7a?4Etp1t-MuT1j?D2o((Dk%k*@)IYkO|^7d|fLENXJFDGEWlttpawhkD0<=sYo!K z%V6X!xxZi6wQ%4Hm>Wl-WBR|pV;%HZ3SIe#(wE$+n&tQzcPT8)+H#;w*$fl#ye+^m z<}hRe*}_XpGlhT-mJK6G`R(-f;Fm1;dm)J%eYz38sDQG|0X#5pXnu_TU{qEqmYFBF ze?Eu4iAOYSlQ>PTh%4e6>`?r|Ark|Kqt3Cef~dx8`a`X6+TG<{QudOaic;H(iga@r zFn(~5-}0~;dV8g`U|_3hYaxA3CI$9F$O20e7gx&ai3ph?1}`OMwSNC83=CQM=pviZjNm{q|rDCozcuCsHf0n zISa6fD6^A~&eOX^&*4&svn^!RWOLH(|2~=#mWQ6IN6&fao!mE%NE7tF0;X?L70r-F zU|?osG9tQ2_32Oi7y$0boy{wGEu+{fI!}{sS0@1aP7#n{Pt>w31*Pk@6wD5;P$e;> zUJ>fTpt4m^%wXNq`p03yo_RH3hIy#c+c}{iZ!d$zHP1)jPCz?$2aTNT8&ZS};#BG5 z6>LyLPzdI&v+zB-^>hXl=Cu}zR*(_|W$#3SoJSXJK5;Q(v){S=wLqd3->GO*o#5AJVf!VaN2xeu6? zGpT%Th0L59`{_U2i0*5SjHd&|Gx+n%npc}HZ<1DZ zR(z62S+y@*>T!>$F{+MG;((|=6AL_9W+WUx#+Eqmz?W#gaZdbNyLMoV&vifRrm~Z* z7oe%_i7D!`;(5X9dB3Zz*i~W5m%x3@c3e^t0{5G60o7Kto1bk?e9?m!2w;<#019w# z7sAqJD1W@~NwP*!4zU0k$ zEh}|0|K4#L_|QVe=kQu`4&xSS4|NXN9@f0iWp+thNS2df$fJ?k{v-`?z6+Xi;1Q<5 zHT&;#n!IUAX7WhZL0aRNy&UW$euOd7I+OrjtNh?{KB-MWz)ku{IDl0UB_ZxPp7U#Q z1TNp{M)XuOfxB9Ih%~6=_Yk3K@I$Y}S%1y!8{y?v7Rlgc6LQ$MhP&*X7^(hsbA zm~QCaRC@+6Mjz0xtDyqSH|ji9X#hf3FN)0=6oa75#T*ngJuDRZr#)A)3lHei%It^N z!ZWZ%`Ev!-6;Vp6+ALH^r9(~s#dQeRiA}6ZKwdE5_8EhyZxSqp)MI)hA}WIB;IJ@j z&Hmo1TVaQ_c1W7@G1n-Q)t`Cfcqp#ZuvGIn%~^OT0aFP8b#_adhW( zLo!WHZPa}zYr#o!)W=pr0IH@(`+(ceJE{?zD^tWShOjBpb|YsN&)M#cfipGdD!=tl z6ea3fiYP_+rLKG-cJIXs&%OXNtQfdpj3i~#%}|DL!X4~OOp2e|lV13q#1 zZz|gyD$Wy_0TY~s890HmgW!vJZ92_GTG9=RF|+Si{yuud!?_UMLGz%lCUVlr)(WTP&_37#x<#it^wOrN(xo)^>N={^PK@>R(k+ya zoKR0w`_=>1sktsjTqA2lKT9*iFM7{%nC+tbS9}s}!8ytRsp)=><7e~j5wL;0KN6;@ zY?rsQ06AiV_(Y751METQM@$%s{J>nyeeb{S>3McuhyDnzV1FyW&L)sK`UREeMgZW5 z&&U3&0bZKq8Jc+Hn7hS)0igi@KLEgC&9YE-Y)s^gb2*x5qyD=?6d1dS^^q1pZ}bK1 zN45~$nepMWCDZCHN74Z4 z;Sjzo9Se#=kG5R?+7u&E<3kwh9Y|<-yzmcLf#rA?stV>n2+)p3vP!aXsIq&VciDE= zT!^4FITkRyzvXQ%z11{>u-3Qhlg{qN^^22it9^~B*t7|MycTh$x2=a4VO(KD{)(8d zr5$%c9dJOYzJUA-dlQR-+BY)0k;s5w%r+65X*b?%p4rn*NL&F7Wu_+K@3a{yPy+|& zg)U6 zb$al;2YtOlJfY6EZy3(t?1cw6M$1cE5y=g>e(TL<)+CRQn6x64m*ahJg)%AU=LtTu z2p?`SR5HP$g5v#a@l6&JzFX$QUnM*+ifKhg*MQv(Cx85J{zwS$o#&wBRH2&Xg?Z*E zyo~_}#WiQuv~v`GLW`XkUK`WiFF#G&l?6{;v7sh|xUR>tOYx1A(&2q5ocZbUE5B@={oqYub^-Oq zu>p>e46SDE#L?nD4~0qXE3f|^nT1ug}bbZ0Xy>5$g*PrX@&f-Y0^Kg0On>O?cnPVt4m(}G@e6j^x-O% z+}SW1<2y%C=19$6BA7M$4|^r1EF=Zdtg@~_S~?13ZViLO8bzMwoN*)umFghf$`Uoq zpd|pmNyV_H4;%rXvMcCd+T^SXz(`Y%s2xOml|&yeabkD^17`6?+V>AB1qyWhN*Q$7 z|Xvkc;h!+N1%mvRb73SgUt8j`Kd)$W>+ zM{&YfNz1YiO8zi1D}G019RLAs3oz^odVNUyVSVCoE|-Li3;_sZq(iPbXHLtr?yc{G z4j)q3(t$`6p$-Du5&>$GHo0e@Pb;*Y6P;iWVQSm5aT|W1y&79j2`Nb&@OCq7ZteRx zG_C~Hyj*-e?6}Ntsd_n|q#La_q|5-LK1)*n+$CNP2&t?pK_Bp3RLdZ0{o^pcWLjoq4j0q$b9rYcI%nAZ(v%;7 zElEa^aG_kvYDYYPFy5wOvC<8plMrZ1Trj!9R*R4zFMH`{#JmSI zFe6Ax6cgvD!}UInS=9l4Fw6bO(CUq(@hLxXrY@s{8vHX5ZN}|@ug1Vw;}nWg2iylA z4?WUbL!r{ZHFDfUjIziBSwMd}>X^xQ$JB_AI1|u|pZcu9qgERGvq6y9yH5sxyh|@d zX_7(OVtk-bs{$i|MnohS-E&3G3_TC)N-!>(v6FO!0$F_?Xp;T&&Y)2EZU}ZbE;p&J zU%`wJE^Y^4LgJRO`bRZetZ)VZU?0k=1s6hshO9!95>k5F62W<0G@eVSes_c#LTOG0 z;s0z;^B-+L-@|20l#4GvhV=cicrl@a3CbNDf{40O&a_v~70YjPbv;>}6hovivRR69 zh7{5C%rTYy6a&409GuEw(o{~T7`x>~d5nP1aQk$Y!EMFF%Y%IsG*w!mN&G-1zLjpu zAZ(e7Ep3S?g|XAQmWkY-O$3olbMll<_ndrR0XJXED+Mema(Gpd5SGbpF0~r1vIW*Q zdB|rU=!?H~onP;BKLWTts7>@N=_@1nv`|zQfO&38WV=Drz0RTu0xJFYj!z8iRIz@h%GULCsKT{8sXXj63$QMnZ z;=PrdejigRF@B*0tKLEN z#1D>?SigfGhc2!W{JgWJt)aaAcz*;*)NcXM4JvVcQ9wOcm2IRWZMNtS(Fmtd4T+yj5>xX<;7_KBqJbeyxoLgGk2vtv$naadbzb{uF}MhQ!Q2 zf<5n^Y^2NTq1jIul8qqQR+juCnC6A;Y0^QsYXQ68xIbg#MaCwwgh?kinKyz4GcFrbOviM5L`DH9ow}U}5a5HMW z4+(7iH&G>iO`2&bO?Gs|?tXo2uD-fI$sef4(MixF+_N}XtE?qux;yI7qM#_l!{>og zOHhFgZ*t5?8y3Nwqh@&^pr4pn6a5E>Fnpt`{9=Mye{4hC-Y5kdz(CvA$VriAV}*bB zB+U}Pz(t_mmZfdLh>X+^1g_`h1n`%!{%lA0SO8}mG@xmm2Dbo7cN@79p z+Q)8TIEj7B7;O83aKXc2-QwZ|lld}HHgXtm3*mAY@SgY%oW!VJZB$Y!i4O2lBnK53 zTDZ3GK=2&A)$A59c?*Ca54dE4-0F;Sap-h{1^K*z9Aj7$_t>FZr; z^4~B9|bkOS`u43hS*Yc@PGFm z*BrRt%3zDhe);3Df-6B2W*C9Yx!pcs!gS2+Ac1RG`3!8(WU>~SkJcCG2ot&P^ z=zU(HPLDrukh5YgZeS=)&{&)oR* z<7l-2TMi8}i!Rk+6vXdFz5zt>7bfG3D4?Hl_;b|m_uyg@q-vSBltk{PuHNX4_GI|_ zHaiyD0_aE7dO3-eGl)+*q-9?I0&-!ATF-Q2#-1YG`anMakxpL6z$ZQT5E6JaYZP<$ z2(}!$7FkCTVsug%3&vi#yK3vQPcE&_PK}n*c6bBc{F-!QSoh!GfE&^Im5UUUPT6;m^6va1}PrBgWjU|F}xDK7Jw~| zXQv%pQU@_ngO+JCLCqUqzhfl=7*MqB=C={7M6$V&2OpU2B;GE)OYvE z!$2WC22L=nZ;w<}IPNI^MhF{}NuM?kjvErof)wE1J`R=K_=9b^p-X7*w2tL}H1{Y_*4ZJWO;6_b==COR8X;rPZqd>q_t>si*9yH;HECD(v@E{2O2j0gkVm;(&7s_}g=jrO>#ae3^wly03Jq9Ml7?J{1l@Mg#d z;ZC8kM{Qg7Kj+fGE8Tl90NOu`FS1tHTAvSVS#rrT$P z9T0!TpSD6VXh`&ctiJ5TsO^rjG$93@1ZQGtV}0eL{Mr=nP_QSYjJ-vt{t+>ty)K_<4LO4d1l zXg4CyYAa)SDObv(7YxfP1Ro+Ha)ym1W5c-W_l%_fcmG z)H`4Amn|*gm*ur66h9U8jAh|KsM%T58FEFgY3-B0!fy)mrBp=B5GUi38UBn%vTk2$ zX5u%7m<|hsOaElF*4c}&1wM3EZSB8}hG|@OG(|K~w9-_9iX^Wc6+?ymy0KXW2)4z3U8YHFF2E1p^uUJc87l^T>OJ0 z%s2WZ>&KxvRA^Ti3@sV@w zjqw_>j9ff7k3VKABqSv=JgGg?e+Zv-aOqs9KE!Nfn=5Hzu~;9h3~A85F+|^kJvV*% zv|n}eu8)N%6TV)&kw4IlkrLMuPuE?`Jb`(p;in>G%_jHW#KY6xs$YH)D-uA2L=MAz zA_C$$^fj%th2_tfpbDQg(~R+EIgLvc4dOo)*gM~Fu7KprzkU7jEDG(L@%ImZ|1H!D z5{yB;$QJw_<&XYT=esmXxcwD9c=VVUL z5m2qlOlEf|4KGizLB;(72Tie&>_)uta#{_i`NW7Y4R z2JQ{_`H{l~a_JJVAQ_vcaszefWFvNO2npUBJ(&%<{;MGLj&kh6@1su|@A$x1Ax<5E zzs{WgGN?^BU4Abt7g(I9KD4T+&Ipq?2EvGvE?m9V39dGlJsD73*&Ed zBB65s@qkcX7^xAyN1GFX&bS%7GHnba1Rh7?YG(+Nua^Kk55jBVV8=$ixN1-;e!l(Q zq+vnuZ;H^5{eIKx$Nq(4*A1#!%wS7Hv50s#^>VIF?T*%1%5T( z?sF6Vo8NjkpKsL0BN%M7q%9p6e=24a7?byIsn)b_m)9pAc)AFjzGJI}%vI{dj!NhgN-q@IbHG_4ca?8!9JDV$0X2SAZ9#|Q< zSisGk%3dcGzf4kFb7tZ$8_jEm73o+ z)d>nzP5@nfRxyi6=l&$6npXIyiaYj^r2k^r1-d)TNlVs@vyOR%os%bRNY)IeD&}im zyn~5YDA4=$2&XKd5v+RJ%N@WAWw%bX`~}h>Ava5S=`}9%MoDRxH&hhXDh~5@J&UY{ z2R=&z5NRQIzIo9OEOOw}kt*Y{ZkTSPeMkf^$?7_}(lEWTxdk}5mM zjx>z94TvYEDGqGM09z%*I)3r%-I!6)|@ZubauB z?Lqe>9pe~tj-m5kTzn}FT3JCMZW{mAQ!|R27 zUQL0D+27NmyK?Iu*zY5Oom5{qdcz391`00*FyCxL8g$V{QH08p@4{i6dkmE!pEu!m zdzJYdd?$_T0~#u8<7BXT2Zk5U%#1dVvf+1b9S2DnClHY9Sae1l=0ks%F5-}m^+~jn zu}>DLeQ3?EMhyO1dS$*D4msH(@w+yNrB2uLA4+YFjWGxj0Ru*wFDim2`v};Pmb{6~ z6M%JTpwaas*)Ki7B_Ks4JfRM(8@}Q^PZ;Grj}K=AP4E#xsC&Yh>b|-D{YvBRJ9h?Q z$yJonr3RY}}6{*eGAI(s(bTj0GU^gnlZ4CGlyneb7Wh*0ruM+*Ea3>X!d15U3`m?-9 zQ(s*aTpS--olg^ViZh{1-$R#^EpU_6f7Z08@Z9q4+y=DP!R^L>%ZPYw?mXO&BxKPR z>mo`1H7!|RJ?hLDC@!@UKEbSVg&pnXNexy+BEm%jE*Q^eiW3=ePn`bzfY?1F>+PU_>Sd}_XvVZBk~zOF zV7INZgzXnx`YL{|oj-iNil)*YQyQt5@=z_l(9p)(R%IK}m6l8NK^fOW)O zua>%$!HZBBJtSbHHV^mbV`z#u=6O6Ea}o`%W|!zo;&1OP%=5B@`kQZw?L(3emTa?s zd6y`ftnF7 z5<$+vlx=u;4Xni^WS8&B-iF^m$9={TT0d~Qbs(qa`CFg3PUL(>~^(+)FX$Y%3JvdN=)=o2tJoP)=F2s`C}MAT(dJ`lUHSr5BH!*n#V?`17CBsH44ES{qH?w;_O z;N~oyI?h|0->rzYlG(!3Uzy%|1aj^LPz5>x+ip%Ysnym`q5tousvRZT(2>NArXO{2 z>QMpR;>1nn(YzBB5DmJGuGbu?sihc0BL}y}4f(7!6E^v`!v>?fPFLX$tug)Y zd6`zuXnUAcfY zQAs3m4J5c8YD}#O;2tys1zj`YpdfOhh4{+g5!ioqBfLA5yv#yQ7Ty`M$Qf~51bE#- z7hs~ufW=e#VOx7>$0qV7ECBw7`|u}-s-n;5*Y;E(_rR_1B4SkgU69C#DvLojAHBoD ziaM0q^0>*={xou1*1@)3{SB6+K$B&_NX`vU03{NqlA4OP6N&$>;LI**qZ}%Xye4m- zR}Uf-DF+d>wf`Uf$xGVR(Pjm=6Se3sn zjdoHyoI~i{v}zcBF^?sLFespNlJ28vNpd50ei-=;zUhc)qvO*DnRLtPEM>Bt)f*=I zu7qKkcQ*a4#jak-)XF0Bv9q@Dc3n#1m2(ay4iLrdcj131`I1lz0*1l?n%IGWFZ z$r&7d!6yX)*?SkstUYkNnkxc*?7MIvR<1Xx;B4HdtldHNdKWK>9=AsrV@la|?=@o! z^-!ope+*o!EKy56rgTM#Yc0FUxozwJ@0)oz*|1JqDjY1=tYF&xQg--^R_@&-Mf0VC zW=Vl(SltF5q6F+KWH&iqch<@O*#~vzmTfhz`6C4LWw<(&-8$CxF(475=#3?CKq2}q zL$*_HuCC3PWsQcqrOcUn+L6eeB0{<~C~`JVMOOKZ{?J?9l4{aBb3r1Hnal(1071rj>a zNv$D3=q6NW9zo0y2=MclFj{28Dfi^!<9F9lw$Grvs)12ASXv*Ka!doXewW9q_Y4<04~4Y@rmWRbKs= zJdrwyk#+R6mrVc*hU8t9*{mIbJ`R0n4?nAXg)C4Il$$Q=i_FY3*@)Z?3UrN?9%O!W z&QP^9;#@mq4Ka<)T!AOs91~jW{6?#Kd}BC;vSlJ2Q8@3EU;T@P5}ueWYMNHHxzf`x zmk0}qxf|?aRNy_TjL#7!d~gKA<`gvF z;&Z3R>84nKJ~=4ju(-x1SbY;gLy#zcIvpF#_eTJjeVNSL{Q*r>RUv46s%bJJ%9W2N zXcl#MtYLj)-NC=nx$tQLtcU`cAp<%n6OnKHi>c_~tGV>L686?O2}D41W5yo|x@Fgm!qPoaIiaN{<-U%!No@;EoWe z@J6Bx)eDj%S^#w>4RG(CPv-3_Wbz-&XJi93RHI_RmkcMV!-Cc(frNq6wV5{L;Ha34 z(SaK~g{$K7RpEPm6{srH!L&CuMER(Z>YL6vxqaMl&qY*2o4<9rd_OTy*9}720fUi( z=o1^Y&V@6F{_(xJZ5p5BgM*`1;s>wF92b9&6&7+tP?jPc6^aYCB-Qw9 zQM;8>mq)xqZokh_SwVA&i=>cl|LavUVbSLh)%ii_ec9Tu3nj1uc+{>HL&c6iaS+wt za}6EM#_W4_>Tl(!G(Lf%x}}&0`hTKI zT{H9@ay)p8n1e9(4qDa&iLZ!-Svey#4fRMEZXo6`U2#Oix81FNU=7!+8RPuAiJ z$@py>e!~elL&s-y4PRR&*cGpmah6seCfBCUb0vU2_4($ZJGHM*6=vT|*l3|A+6u^v zO#&hkmaX++V$p#W#xedO;AM(@aXAlUhQAh*Kf6WLn7zOyxMRrDv&3l~o=;cBrB{#2 zA*5MjOAXt!IwZVjaY~uTfIx$zXu5>ErQ-$01^;!$16T00GS8|ff-UdD3=Q%cjILxc zT8x$J&$-R?fxv9KnPy;gpQf3QHixCVp%(j#ORsO(l`f%R8h@7t^KUpo7G=Ph?FK_K zPhZ?3RlB^kAGBN~tA?U0twTjoPkqK_kVdCjYQJhoQ%~LTpw&?lv65uyx=!1Zn1Mh6 zFQB;VcYAq4#9c0q0`igMu;cXo$q~Ut29(+s;*hZp3dL zuv+WQTkh#pSbOHj*qHO^utYjM9?EU?66c<*HbCu#CVIZnxxd2NnzXDP7c`;~2kDAt z=!N)(T6#PK_3|P@(xkpbvGRd=`29oes7^5b*-I}{j2>`Y#XXXjd%M|y5ikpQaN3-U zedngzhBk(NI8F{l>1?87I~YJpq3#*Z=SyNu_K3z&B{`X>tD&bYNG*akrM6ur~79 zAbe9YV29h_A^L1_;N7?wn8)?Ou!f&10*A1wJvc75fVWkvR|2tjj0fSFLS3+Qnr3+WD0#2BZHQ?F zO>{kCZ;;t`6XnTOCZDJ2$E1ne<0P3Qtmmuw^ka=?j{X&R^>^n^Dv$XzHF+H;S#g!? zPz6kMrJXenUk763d(GG6YzL9{z3NYe>B{fR*^(YFur6X1{{v5S#*jTyEt|veT3qnf4;cl;+wdT0MdpI(64lEa_;gB&$c69UI^d z|KJ!Efg}aiZQ4y1v!D?Z7h21R8@>aFe>#U-gffjs6|!Y%Gj+j?ehLu5lZu)Aus3`S z*vLBU*PoOK$wIhz>=3q1M*TvW5$g}~*Uv>ND8T&u?ekqv-&p&pBU+;^&Fz z*Zn&qaAxpBamM4CQH9C@Y9j~fCv7A~3X^ZSS7y?bgivZL=&%h8T7@S?e4rw-278_P<1i^E*o+*omQ&?DQHb z$NYHPzH_a6D(#p3++ky9_`*nI62V$YzaI;aX9gs*}%ilpd&}34qs4_92dk6wgNvubyKK{Z3ozx$sVVn8!> zv_CX=@Y_K=Bj>(m1d6!N^&k+9b=4J$GxajChAH{M3kL>L#P}p|Km#@toTX7POVuZK z!JerF30J$$mijpqx{Kv%!Mvp)BF>8hrszEk^hP~_I{INULp+!75{_K`ksIVa@gJ0DzF8vppHUgoVrF@mNwnYm1AL2$tN$Y?7< zdgf%;R9QmYJ*~z^j(m_!Er}aAA|aqdhHC7;d0SuRFZ_n@#qIFYnyUq?0V~FfHuf)D zOW3dvdx8{%(KhAF)?j&Fvt4FI1?}zxKKZIa4c|t_@C>t|J5tVUj1i${)s+gS@*Pt< z>;|xI_Gn5}9kUC_fXG>tE43Bt?|Wxpz{zu-8m?peE%v0r6uk6W)Ak6I{KGK^q(sm`;n*`RJ1eQMDSb9q32s*kp6wPXKkIlc{TgXP;IdI6FVAMl-Ek{Hu!{klq zLpQ1QU1qF`%`FuQQQ&7>n9YK=BA}Gkpe@0X-24*SKDfHAnKD{idp3Nxl68KB1xw&n zYYJYFTjjuwW?w52-H?>O;*OS1IHI)?v@!ub$d~BTvF^5F3d|>tZZK(RZzer?Sd_}@{uxT{6}5?|j45uEvlxv4on3&^s-KO<2~a)@HNkmDmVV<`ji@Mq z)--cadKz;73KsDJPtEg#JH&7GKIVpqZC|1Iy46!20Tgp=pi3i`Y_BUY=Y`)X)Wq^% z*P*YWv1{KkyIV=x+OEVMmB8`=;r!WOsDYqQi}?CT?&hguMxGWkvbh%$IkzfTpND<5o29_0(Kf@}AF#O+X|Y zijYSxYeZUi)xcS}W5ipOMC*WpXa%jEQ6q|s8xpYoeTxMd4 z^&KQe-)u|$?Af#UpGa5EY*;p#WSLq;0wU`Hq~CMt(#=z@(cBRt$Z96S6F2Ez`_M$l z?|@3mxe}+up$ew8dG9TnCUZB|f*iaBNtazIfRhkE-R-blVqbx%L|(*OgyfHl7u69S zzowmV)%5Dk0x>h_U+<^v0 z@!3pt>#b5{0Y14|mI@~8Y$ed`oKk&Wk9w3#;IoQg_GtFi$8Ey`rA!AZhk`LjnT9yftnYsR$HZ;!}qMBPUsr6c{U=uB$=}^ZvC<<}wg3 z<2Vb7!rddjvS|`KnwqMYI}$AD4duCEI@+UJp*@3?p@}Q6R-?U$MJCeC7d{#Z$`Iyv(gU6ZoF(RcP}@yCHI zH%FxPKu#p5MX>$(PWN3b4!<*&dJ#2>Jf?0bj%W~*C$P2eriYPP?j=MFgIFMiCJm~2 z<$&C~R(GZ9@`J=&rJ-brZs02ELh$;Rs#dFu|*GHmCl-*CHxtI=(lr#UB&jXFu+vGU0qk?1_KI{1!M+clw$u+lk`H& zl-FvVMihA====gw*3-%V+OyE3a*q(o%qNK-%kU>wPB}{5>Fyyf(r~#Ajqm|8_ad^qL85^Ti1SGavL`12*#_{)8W}I$s#$hi( zs15vDhbb(x$08^7;mH0dV2t7q5=_<)Nw|MC#-J{o_#`H7HZeRTtgM(%Go?ooZ7 zl&7lw=?>RWOw{uaQF%#?{oY! zMb}VR8(Ao=KrVbxX(?b`3Lcr3+jb@=QVlk=bZm36Z&DrqmLiMIpN8IWtVsbCOPTdu zJ>B#l-uUROw8W#AG(_xZRzxLh}$p_(X@oyf+m{1P#y|KklNjhkwcHZvN*TbyCrfj9k4f26VIPk8*1j# zAvb5%9ry>-NyKWoqE6Y{j==(<$b`-S-zV@634@x+OLpz9g+XsmSD^wH(NhlZKVxIq z9qU-85tAj9<{tfMA8C9?<@CeymR7Qe$iKl+Yue>1u1INEtdFOz`lD>JnI$jRN@`wU zH8b6vQ*0=L5&>%Tyh;$S5Go&+D83~B{o{IK0flg=h zD)&8lO+^*ez~b+*E$<4*e60FFOrZ}&L_rS&UI zq~@<#qoEY^-^djcV^&C`69%Rp>1XEJ?k??usL_FI>wlzSM3wYeU!t>U2Z<4I5AaK6 z){-+1%Uu3q+p3ci^6U+fQ~>(B4>GHwBpqd}jDc?Jl`gvYf2l*pLjt^7g(t{$unC`< zfgtN**MG+l9^xQ!Rg0nuV_1!GQGR>yrxDK^$2eoP z7Vz#yBgw2s;nd@%@ijb~9P7#!y-JPf&+G&rFO1#b4?*uGps-UiIP%L}Rw(GD4m%o3 zLA_vt!L(+xr6w$huX;?vVBl1$% zZ(dXSwA`O(%o^?ZbueJy3yo28&#_yF;H=Mko%f|baw^Qh#!S3`m#rSj4<1^@P|0SO z9?{D9Ni}m2&z2*NX;C-0Z8QS+Y(1fLL8l31GF{KdkVah9*$usow3_NtGNF& zJ5QELTW}&qJlBRpRQ34EOe3NJR_fL8bV?@D$C-cLi(S9o8y7GZ3-)fF6hcBNmSYn7 zg(h0)x17$XD(QBoMKPTU4fa<;dH)=6A{xdqkW82ZG{;MSY#K>I(KD3XwY0!?;-UpM zXyz-HwBZSC!uU*#B-+WqulfXY!15ydJfvg0@i`vvX9T174H1?*rw3_(<^sELjwYn8 z+uh%I&7K^_p{W(H$3-+QMt%UOlMzhVvZk^HkrNbW(C(Ui^{L$A=t@mW^P_!oc#7er z@Tm|Oydi{hRCjnk%>E4tV-;|^eia0K4O7m@K{V?A;l@zU2UQSt9?`v{J1m6Cjrc#s ze%{ZlIv85Tsw-U>N-{x%%g1t8S1V?;qf6o0!67*d+|FC5Rv7uz(e3Unso1oc+HTre z&yuehZ7^-5_k9PvP4zru^s@y=Hh|FN(nahgQ^{3(U?xAoxc{eK5=mTi=FiE|>J13Q zuz11*Cxhn{Dd3<7Pv*KmL?|9a0F60`U4%ZnZya|3fsB@{Iai#Ll}1&Jd?}LZ)pQ`6 zeK!QeMdYK6x5)FiyYdC)%D*8UxOc{0kQPoDreO6c&fNLG@w zqtx7`93AAbmg78*+va){!FRFR~J}(eZxb!HO zoaX_w3;@aM{%5GhDuzReiWV`L*T^oSm{0H+(?4(K=}d$YPrN0~MPW=I1Lm-4$6 z6r6c(VzwGOG#S0B#_pnu>ljTq@5+7SaA;NnC6WZARXuIz`g`|Ftw}8Z@*#A9V*y7| zgOwGJu!L<>YmRe+f@<&92wBhp7EZ~vxBOPfEB`FZuS8s}uVIPENWeBBM$C4iwS-7c z+$~fVU@epRjzl@78i*@kBDT<*aiGsQGrULt>xk11B1=3ej z$$zUf-<2uBr0JY3wp$?JAvapazya%}h&uVA;(<}q!>E@K$SdU}I3+eou~6pa7d&_c zJx@tKcYLGK_ReZ$qs$O6wVaUS?!_#U0Qj_h{0jXHyI#$Qi-o_NtoUF2h%lZ06 zVjoiX9?-FtKT!eq=;izbL%=f;Tl^MaEzk0B(FC3+I+A)+)(AwFHOvy)-4ka9TwAFM zsbka!Mb46C7v}nrz~eJj2Dmn!EM_^&@^Ms|@1StJkk4avDxPv2!9_G-6(E+s?9yN3 zjYO!c6HGRx4$IhMFub7-t%4!Qs#V!lDr1437^-UhG)!9@)XUCCYqqFs3uq4EY za}3rMSCyv=ROU;O=ZMF;psf!aPbg9uBhOKzwu15JnXH8s+ESSd-H&6h)K1_u#b0f^!x5!ol_X z-G!OwV(Q`d+2|+z$*XLwA4`Ez4Br^)MUA-gWPG4I*FsNA-l_Ie;HK3L>DzlEw_1|y zaQgziSMk*a$%)`UM)l7jQI%vF)uTJWc#I_j0C@6Os@y-QU`)e$vcKwYlvU&hw4^|@s-GK3#HC0Wr=$Z6m`4kB$&NID8b|o^qSoEv+6caNCqRW- zgDJTXuT-;_*Tkl!l(LiKD$1Rm>eb$7pX`aisE@`U&WpSwoDVoBvw*(J;D4a%DHU8L zR`G<%$(|1~ViH*oO^ruvIj1P0{r8M7^L7@5r_)si?pr3;2*6O`7PgJ5f^}`s!U zkG_C}q<9f(%fJ~{leAN2&!O7m_rY~I#kYdIPNjFcGi3&TCZVv-nD#a#t=Vy-t|H&c zQa9b7Zfh1S^qcC_*vjNbYgJp0xdgBEs-d&s^cPUDA-=<$mnsF*hm6dNL2b!5vYEuy z0#XKkWZDZwSh{v#Bj*=d1K(8Ds_kM@uk--_KLEgp@cD>L<^c|VR+gzt^!GG`qX}+- zxLTlx*|!>eb*5V#$!ZT{pz0}?Psa{VAw@+^gZoeOB<}&&b1*l?JgddGjqE?Cf}8L# zo8vuxdBzoJQ5xxBYg{a(>5~Aa7_Ff@y-*Qa*aAY-;3Jd1sk?2i#O{?=cXV%w3N@Jd zXH|}qIHGo+1ObI*jc15Gm;4V5`J~i6DL4diP|PQ<2;);`R(L6T647XWz`+_+|DXwj z9utd}=K&qYf4_Mx-*XfnlbaLkRbL24&7H|xe81gDzCr{&Elj4;Lgo4ALe(=m&c_-q zKQz2WyA|MZ?9Ki`vwFpd>bk&YO6GtU|Cl0eI%^4dr28a;YFu0w=AC) z=DOOJFi?N2nTUd-{Hp%9-sj?wjD#VDKygwv6lhL~q0^L+gX*;;3Ngv-HkaI%M5sNj zT>egcxGovL(*GK2scbGR0LUN*H~?3D{+~i56m@AKVCA=UzOxZTvw_Z8n76HywF7iI%S)+;k#28Lyjmr9Sqy>m6sSFrC&*Q(#5k_DBt-x_9(!S&vb$jQE5y_zHMX@!9HgEiD~U<0d&Pl$*0(J7<6vU!Qc^;{ zm%i*OJC#SErktK`A3CcUgbh57|MEZl)ij1jBdIz^d;7BtR2{ZTNsX6xt@ex5xgzgr zHPE1;_%etn1yb^&z#@GAuLU@#D;N~f-=T($(*ZEun0v={?Z+)swTnt}#T!c%={8YH zcCR^O`#b|WDATHyuR&Qg11 zxT;&n46zkys+%1)tRCVN^~wJS=amzwbu1*#ITfae?Ih%RwyYgLDEM!#54WO1&~^#Z zs%ijrUC^6PJ7@xk^kxL`owFDNoEyiq@<;F3M67~e+1*yNH*}xN^?G?^*{alaM95TO z-6GWw__-VBUDA$l`@MVoC3QJChu}qzvxtHsJ^In4CiTx-5Jj?-=avg&!dRQpsSZwb z6{~>ULKnE`CF$M=@KFn_=mBv5y;u-m0Pg18x<>337h#K`)8+7ui|WA(q@^nNLE44?S2?WFDNdaFZkKCt3* zwKC(|lgkAiNWSR-ci-FXNllr%eQj)&LVhUi-nXH2HE|>!P}}1WyK+XgW58`haP|K% z(NC3_ypM<2w2=Z`8k%6@$oKb?>Zxf!Q_cF-TDAL#CMco~3Vvw%4K;(qW9>csD|g0B zryZDwz!zi6-uP%7h?o;0ah1^9)YkAhAKcYqjM%2S1_UJw|0<#=F_Hf2HGbS!!m1{y zOs?s|6xK3r^O9@zgrE9?G%@YrH8oC#n%jL`VxQi$YMMZwthk3Wr*I4TXp+f8w}U zndak|J|z8vF`|%PX)wNr_6k!X?o8vjvc7-hq>{Mt<*9r;1w zV`HVZpP;lX|2atM!YiIk=~C57S@lsP9i}-uVm70-9y|5n{wFJFq$^=-MQiu0oQJHt z?L?|}WszKV|1UDdmhm1<$y?Z>aLn&`R<^~#UUx9JWvR|pr{x2ni8d=c@SPegW$Ik+D=Aizd_$@CRla`3IX;W@la5u~A2VCu53kGP7()k0# z3<{n*6Y4_R2Up@C#)w`!QYh^juBkmpxjRG0S%SWKQu26SJJUDt_-k^l#Uadg?1RY- zrJ;7I?`^WE`CFH4pJ^*}UPu{Odm_Qp$_O0oi?3gjZthD;QX@NLYDt`?osXt!K#cK` zDqP&{&b@AASK%hXDp{-PnA!o;As!`r$AU@v<*;=^Av%hD)^xVmkdH+_y3VXXQrOmN z!~p>Iktf2F3F`9uPphzRJ8Zn*UYXK+K+yLvi&^&M_>tVWG~QMWL=+z}d8fUQ`@3Rw ze@p^JgYme}^x($!F$U)(-~`KSEXqDMRtnrhMBNlL$Otnn$jMuL5vKKeu<2>LpuGrr zG#4Xn0xIfP(P9jQTjA2-NYToxxbys~Efu6LFN2d|IqWQ7(MOOmXE*oEuRlR(W9Kp# zO8b3 z!MtbslmLpB*A3+giR@k}!>G1kt(h4!9cz=XP3HrrMOzwP;U3NK?Y(erI_1q>Is4m% zBZ(y&qKjgXo)&GKa~%Zhm1M4Tz>C|ygz**0X^GVxu-JhwK9ZI;SOqJBU6pq5K*$|^ zrlM(4ZvY2|B+mr;c0jvxX_R1P4&}LQL?(`6G%Bi)A2H69hZA2-f?ucP#eJJo_+BoG zfd5yHjCCkphASws?YEx6jHKhI~ql^(;7OF5)QYLfw9TMdZ_gRsJ^6mzfBm3M)^Qi$l@XilVa*5kzp#|kEb+Afw`FsZDa~acH9b^(O_#9K4t5cUg){svU6OT_wSsxH!y~!MjX|~ zq3M8P`dll$$z01QLR$#@yrfe!(jmzTJSX;Yn%4{J)S7DeSn2wXORV#k%KGYBy}+X6 z&FK|{?u_Q7AaGg|n!q{3z>ocKh(LyDspW}=#wfIL|IsC-A5~+#*ix`Q&;R5cAnl;( z2Rcz08eS>j`5xb>A?r^3t(PXARaM@r2B62aC5Di|2p#gTpW5(MqIwL{&Is%ACBoCJ zY7D>ep7hv%$ckWYDv+6|I)QcWbnDH*gbt7jdSZwelj5wur@%r5_092(5W&8Mr~Jau z?#nGgH7HZ@tq3tB^Ics4(0e&@;u@A1o_)nI%m@j_(pgScDqj|g%U-uSj!bSH%!eET zT+}fF1OY(d0=r$rLz_uW_8|7^QdIJHl)y1e`6K4n(q;vHuUQF4FTpdbLHxHKY40cd zJrGOYRncpR#%B9}00~QN4$xv{E8&IFZAS9`=>{STq)mQwx&eMp!Wx-s6W=jkn(8HH z1_Bap75X-rIHyVSCqWcMuS)~9G0YBvyL_`)Z)#AljCL$2W%R!&UhfeKC6mv5wKpIw z2avRLB>+VCWZqM~L#aE>uFMpGz^a?BaKcW73|=-`*!7d*>`;g6u%$d3Ih@OSVibF(<&bkHAM zIIOFToi!Pmm1T8@0Yw3dix6?ReRuaTr@&zR4u`Fc^adMyHZudi5}q41)r|9sci#z^ z=q?D&aAlj@;x_w_qXcy3X+qIJBmky`RX(wbR?lWk)C+41M+lPT7vvt8N>K>f`Sm|c zZMTV{~fCuu{*$S=u}7>h&Xf; z$W;??V4{F9kl-VQH?}v6XzeRfxU%T2VKjvk(OBtv_1TX2s+dEkY?5BYBlMgw|LYE@ zD=hO!e259J>Bqre19iz*p{qG6-QRqxY)Dk7hTrV*7{zDkUbtUF!65F zO=M(^Y8~11K-s#z$S|ds!J(MeSKQ_1kwXoxGEm$Yz$g>w!5i{mK`$-S85Rp7S%3N9 z22cy!H}y8pRVL@Z$6q6#=Ky~Uw&Ykn{oSBWx?etI&K^x#jKJwlYeb{{AR4n541TqNXVYl?KwNPe|gvjfH;V*nV(-1Jc$-IMM=C!N?4Pj88nRtb~_r0OB#*_N6{ zHJ;i|DMWpY4_yDDH3Vu`d~08ZlBna_MP?ll(|K+v!Hj4N@a_rcQMCW7`!21aeB#iQK{EG&GodaL^g#icgJ)UipS&$2N9pU5$cWo+Dq}HYLC5zC*oTA z7YSu-nTglBYU}wd7PE9Zj0!gVDRX|==oUcG9{lf{w^q~!`w++8E;{f#iu7P@r z<`RuUEaH??u%a^i&PP(DZFw168hv%)6D|Z$da^qa#=!c7wbpW;PV_~=n})0|kX{#u zmUbA9VMzs_8Bbn#iI6p49LN-5V!I#GbPQ*0mY2l^vU?^;OH4MvHWwID-45pi{BK`< z5q0t{OCF09xo<_jTDsQ>2`WSwkpS$)%1fg&7gTA%ZkMB=+k({k8j_PLqYgR#OY}I& zuWNnMF8ig*mV(H))13=ohM|gWDIDhCu;eA=kE0L=oAGn@(tcBz)1!!h-(X_Fd&&B^ zP`Q@#$4~vxQ*Gv3HzKXMOj)`AOOU>*pHXG7k(F?qWgv`g#cjn*=(ZhE-C&8d4u=m# zk(yKyRdk}m6y`UXAMrQeo;m3)qM56G*Wr;spuv{#yhkk6ZS6d&zFA`YJ8=Pp9$Ly_ zJjQIZuF%m9Q00pye)dv3N==<|<2QTzwp>QCu;3_wQ7Ewo7sq9A(&}zj4_Yuun*1c` zfKy(9?~t}pa9UPR?esO|`BaA$Q8aZRS^%LMrB5~aBh)%=DYo;p&X4wk(lY6P5~#5& zpF4~rKnwc#-Fcm3`FV*IxOPxbRxBnU97Mz&`S{}(%Aj}BZYF;HBnDl`zu$bC1d8k{YZjVbc#&xM^~mt!;^FW`sY)@<&7tGT7d zuq!g|LFfJ|9D?DXu>9{0VJ8XP4f+f1qcySQjm(Vf5V#lnu^SM?THe`Fw8vvS5MP1v z^E@l5&qp$y3D!~XT@k?DC>PgoHs&FmbwS4qmKD}z=D_si0(em=1tvLt&~qTres6u@ z8|5X7S($Au3h#%I1gm0vPg=t90PJ$8^Y2UIs5-fposO!E!RC*gp>snb(5fHReZ+G` z_w$mnmt?9>h9GN_|G4U^KOt}eiUp*CpNUPh8V z&1MI^Z%v8#*lq!)TGj?6A)PQk4($Z%T=3rAn&}-cqwOt?MBnZ;#=V8;n!EYVFU7ab zWE~>P{kd(#Zy<#nRsH=9G30uVWk7`evpr@-rwgAu23fY&xr!CEeX3MXHd`;H^L$elF6(*M_X!|{? zpNMN=>wEP(v3GpE9mtBXtWAK==(PD{MHU3oJc*!=QnICdNwMSzZDyT?_rIc#mG$+< zvG85FF+fBNXU)%%QEk-F-#}pctsVr_NzYBE))lHXN7n^ z!3t~gIJ>8ZxD#3J{$GP@u{8s%z$Y^;uRn+$?lkHAkn80V;Xz?uYPyNS>flsAhhs3c zA(joI+WFvB3u=ghx7s5x=hejesmu%M*PBJX4qz%<65fD!ndE3nGdqGABLLl) zCf!5$mHBw)t1(=GCliE?KmOuXXCEeTm)w*tS#2{6{}*; zOPD~&M3!8*Sw3GHnO;fFkwC*U7e~dI*7GpAh#$y$@oPGQ_|aU1_X)f}P|#jP;Nnbq zzYnNTL9JG-hgaoK_NK zHqRsBnd~NCAK1?Z)F9m+ZQq}ok&EEGOCIcOFuAs51)cnMlCFT4(8LDLXmc58s|rgP z(~^NdJ>VlAV%^+F`}yj~t;BIw4mU{QIq3_5V2R`MJToM22NaG0fcPpEtL0`?I5}vP zJmmM<#wr%@rE>+Yt5+b^b^#aj^(P*{xCn8u*98^hvQ{3%tPF$g4C-+2xH?QWXvxLr zj!ovH-PnT%l0Es!E>ar|#&C^J4APpmD4a3v$O#sY(4-Gnkq^fpp_*GjsqFjUvVC3p z&bA-kCTu+p1L#^xQjYtre+U7=G~XU@(m{{$l!1m~YooyK0u1kSvjDjP-l3*uOkt6|afEWL{ZJfiAtMn7!IKoW7_{Md2*UQ2afOhC@5aI^egHX0#q=(E`gliMc2R@5Bzi@mZ!F>qPr4Y`-9 zcU*EJST{9S*2~S-_e!Jk+?w3j!gcg8E>qA+f9Z{ENj&Q2219c(()j#~J}RRkND^yE zLRD&iPIfp%!F)sqf0oeSH5;|t>n=q%M$U#|v1EcbjV$)>f{VB0Eq+wFYia>68$|I} zMs@UCmPVPdwvDT_TLljP=_x#e{JI--*J8R|Co+4e7z;e%9Aw(Q3U{|XKFq8Jp|8j) zJ4qZsrg#%1o*Fe8+jf__fZ)|beif7>p#4Wu<-(&bpZx3(=4)y>ul_e;6oclnyzl_i zL0yP4{p2{+fNjnu6BN7rfPL3g|KD(^qomI0s|XBGt2o@l8aV?#SVt;4A5TJH`PMt< zfk!54imaLt^-B!%Z9EMRXgYBi_*ESlRxS86BsxRe=SKdF)-S zOn+(j8kJKO&5Lpr*4z=_nW8Xwa@wIHkVlvDwDVZ+F1e6kq&U&f>p7!wz%l{lB;cY$ zBM&I1Ntv(lGg0!f2=jY~yMhj))wu(&pw2?8jTGsYSky$^h5Nf9WqGk&_m=X^o8a$< z0yW-cgbod{STZeedH(h8@A(q#{^wM6ERv`! z-e(he3kaATw$n}Rms-#h{Ce&wLoZ87d}7nl(RgLf2B|940FqG{^V_;STMa2ke==I7 z73Ob>AgeWL+T@k5u4V23EFXXrJ?H2MSGYhFW@(rgP`#0A_%u_^tYS(Kuiq}8Y=$PU zisd8zW)osVK!oCp9#I{I*$X!jCpCmgkjy0-x#dTcq0T<=ixd3GqzH^+;k_Q06=A;q zo*L8ya@PMOC|0zR<}SpUeH7TneNUl=b{UCqk(fF9E{OCK3PNPfG_p){od4=WI6J&3A} zsE2Hap5w}WONDUh2oxkt_VfHhG;X?P*!3zN{xKe?V%!t9toQ6Ut(HziT%`WWEWq8V zAyqp-uA&6XR`k#MgPKytbI&hg2-l}}T&qmWE;>zc;D9 z#`5|un4-}{P!#`Mm_z=d}ss2>BvaP`;UTY`bs+u>9K>^ZZRIae5_~ghIK?C;Z{@rMj z14_@$2k943PZglyr#QTXAMsTdvV+07sN}lw7E(lV!c(o#sd-i_nf^w2g=ry+xa3u&kD4uF!w}hrcjF}$+vDNc zkXcw0>f_tl03(k9Y3q%3xD^IsO8jn?v3_D(zG;GsHZPhsN9;chq4_o%;~W8Ky;x!` zkL|N4O<*y}k?V1B`CdW3vY*Z5Wd+kl-wb?p!cWyqTMWzr=3PM5rLv6XFsv2~1g=<~ zB2v8C{dCKu?#rgFR4FjXek=p)qhUJsGRRfkJ}GlJFfTjsNvdG~yF|<%EH;`zu3c)X zk)8{HydR|sI!o##ZL2-D8F8LeTJywK1?nnMF{W*{LX5YI%2ou|x&8er%pZ#CHEKOS zE5G^A3;&vk7I_~T4u=d1D@`lczjn@QTwCfsk_yDjGjAkukJD#zIKReon@u9p?j>GQ zX!qD#OT41b7Sbn)NZ}~WmtWd}?&?(eymH4+>>eW`gNXC(FYpwc%-6axiui`ocarqeFVQ8jLJY?~oW`eF`#)39wgFJJI1 zf<9)K#VFY(>VzPMJh&xc+P_tZr=JXwCaacDp^H?-CSS0UQX{a$_PZB3(D+P)rV|U& z`rZj(icR_%z*2ZI6g`fLUZ>8=_y)C;okETpOf&%BESMQBl8n`g9+nrJ9` z%_6zNV&l;DF<}kNy%7S&vMCORYw?~D_8+Bqkuqa*XL6M~}6~Gf2Pw;`eh23z397dmb+y0M${E*km9?cBKN;P{& zmGjn(`shTz!wLakQIX3AWl)h;28C_0hd>q+b5mcR-(LUWT5F;GJo)}S>!V|Mr*-^G zZ#?1Et^hNF9;P;EJ;p)~U|vfS;lV&6R-Z$(rVUx+|d|pb2?PE3J^w z)PIXY_I4jz2HZ_L?f=W{;A$BH$UOx5j7dsQQ&uFQ3)Ul!j%>V1TBqdhHZ}xgXl#?= zO`oIn$MN=npg<#WDw>^JMn%ghU`qjKlUZ#jWLJ7NT1(pqnYT{E$4#g>^URR--&e?3 zsplUAjtMDarK|s$I&=UkI+bSXR_3DfpVn^cOS;i#94*=(uLrM!TY?-#ES8`54f@5| z#>0|6T%w_T)+JiAY%JDm=$uTlW-ltxo&*b8ili--&(lLL!AjJ+lz4wf0&hjNQ8XE{ zE?xE?r5G;xN4gu@e9OxgYuH6}(T|GvTpEP5cz2HW1Q0)sA^6rQ=Km#?u7L!^NiQR2 ztQ$xiq;EZw*nR44XcFL*ZX-H}oIzz?z+4`jMH&K+Z7#zx5?&ucfryY73C;|1| z!q!u#jiJfHo<0Y^Vz_>_s@vdcIU~<&uR{SY5^85$8!+icbC1z(l~)y8N=ejaPT)|m zJO9N(eGv$-O*^3>4pm(nM{*grrRORg%1^KZKeTbE1Q3__e8;aYczq>Sj}`aLpc@ke zwyn=aA96wcusXM>rH^?O08ho-(9wx zaVqd<=F}bS!K(G2~ZkW+nS6p+XHB5Z!~|Db_L`;nV(nDi=8u20@t`rzdM z*mKeoo20h+P;AV0FCK$z07@rJ;TPgHMM1T4$NtCyX`y5@XF+o@wY~lJr?Q zNhWYg3(}=O_$pt}6Sp@&!E~f6aZZ1NY+45`3x|l}h5{YzhXEtjj_W)=PlR$*5pC(5 zcyfo$>L$MlEg+{xV0MfuJ|Zl2HrX!nP0|ghxw~pQT>zhlASUhCAMBF5{d9%nnJ2-)#>SM5uqUUsJI! z zYr7Bq-h3i~H+h2DFyDg>BKYbz^D)jRG;a9yF4`M^8wGN(^;?OC%#+VmhNW*hTHBs> z;QB@<;U=|zp+$luCBAP=;Jv4_ZRQ0#*X?f86srV89tb-qfv|+QO=yJUJHGo|mW4)T z#<?5#RxHhx|OG zhs-~-At7296CJ*ewe$D+znCSq39A>22RabFs%niUciy8A#{{TxXjlv2Zk<4_YV00{ zHRWPDcr%v!sv%gfOJK{RpaR*87Iefb^Nso+fYy4)*~D8XYLsmdS3D9t053o z>X1kDlTmlsuX-4-TvoYHtb*2gwBPYYTb>ST;sEI+OD5FqA|^v?Ab+SD@Kkz-t5X42 z>HoULQTAyka5qG&9ezulf%7t;>6+x9V1wX-h;VJsez(N;>lmD7 zF0DJ}>naW8s9~(Zb$5r#8be5N)E}_YRVVvpjm_9vPspWGmj~o3f^fWZSRV?TO1Moz z(7+Rf9YPK5`Vl(TZ5|-Ji7byOKu@~xBAWGaJ?A-HP8=*0`6R=Rn%$1kamO;#+kcw^|NjvF+e1K zGxYtO8?%6OrU$7-BOyI%=a+Y~>H5~D5xu88=sIt^{uLtpzkW-F(KkYIW;!Ku<CFcdQJ*H`Y8Z-lN5NdG-EEMv*>Q>CKs^ z2!$ibl)?FK_k3;sJA5rrO)qEpgrB?GDH%S^rT~9J8UWMH>ITFBpwm*&qm%U$4BaCz z2H0k6Oi8avpJf4C-5C(k&(kZq>86h(%psN0G!r3j=qJ*8-7k?D&?L0nmBO3h=86V6 zNaGeXTxqm||3ic*w^-6Vm!yY`LAOlU0L_x>4}lMx5W9lrx-cujF|n8M_kaSzaXJnk z^@Q_qbyJm6r*gXawIaHEEMypbwLrNBzu)nvTzXA)>#70TQ6{US0F3uOrQ4P~VUgVu+QQr`@zIM)(Iz_(yhhu}dss zvrrMaF^{B-oN2XZe-5y}9c~DQ!1SUm!G3MnK?hlbCh#~zScb3=xxdNsx?t^d@1bvz zl*1Y7dL{%lqFuH`H0zt;j|Ugd+>3SSyf0QiIdZw93Ux}}7L992&}mFe@nlwPk}3JS zueP(0%2cS~WR1h2(vC;dixNUVQEN1f7o*9pSeS8BNT?yHA$oj?gdl|OXxMdV|JOvlHhc7h_k8-0x_+y5$0+Ll+ma);Z2#xgW^M&MUuaZQhiLnk*UmcW z={mJ>T?VoK``95}k)RTG ztVegH%oKu2tVDS_>&@X#$Bm9!z$q$k^g8J5Ki+m2s|3_rh7kV}c}feXvP(oDq!RfR z5u*YmUXV3huv7#Stu9Ljf(n^Gi%xZ+ipM5JP^X=M-uH)$b***(iS$~mEI;?ydPn^ z724u5c|>Q7<dkH}{yg4;xJH1qLkMT; zH@lyQUo;6p^`Dl3qZJHzJAx$d)1S^AIE@#4hDBM&A`_p|F)s3{0_#!GX8!3#bl*uS z?yYYI8E_yltK#D4bqKd-Ayq$S*$`33Ti?62H9*clas=0lsTsfdPKU~#6vK>o6M!uq znUK{2PU0Fi?xlW!5AL9rn;|9({b++AD@~#vPzNsS>h({$($w3at%Mc#Ce(yKE-$_7 zvuyZbu20VYI>W~DVy7O2ayB9ld06w>$-SP~NW>2CVt0gWXFlVfzAl`NS^+W%T?WM( zicn5=o`;@_i)s^5ETw@m7_o!v)vi7`OQ29tNM;})ZiAYRWl9|Yt`qBmctnlYpDu1g zk$hZRqoavGMLXk-WL7VRr0;RJnvE7=?%Q5!tJVm@MWtT8(V`61@_%p!z$a`!gP54EuCsH-7iI3MZOJk?iwO%OK3}Vw z%F*;$PYSE}>VQa(S7oNp4Ot|CrzsHL0o>(xZsNq{y%VE0Tb4w795D;YiYr_kf3

vLG?cr}w>s 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260506/20260506140002-Config.rsc b/MikroMaster/20260506/20260506140002-Config.rsc new file mode 100644 index 0000000..2473f49 --- /dev/null +++ b/MikroMaster/20260506/20260506140002-Config.rsc @@ -0,0 +1,4677 @@ +# 2026-05-06 14:00:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=::/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 interfaces=wlan1,wlan2 \ + lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=1.0.0.1,8.8.8.8 use-doh-server=\ + https://security.cloudflare-dns.com/dns-query +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" name=dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260506/20260506140002-Diff-Config.rsc b/MikroMaster/history/20260506/20260506140002-Diff-Config.rsc new file mode 100644 index 0000000..0a2ec9f --- /dev/null +++ b/MikroMaster/history/20260506/20260506140002-Diff-Config.rsc @@ -0,0 +1,4 @@ +4336c4336 +< add address=10.30.30.33 comment=NUC list=NoWG +--- +> add address=10.30.30.33 comment=NUC disabled=yes list=NoWG -- 2.52.0