From 091f26248a61a4cfdc73e950970b7017f2d76d0a Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 29 Apr 2026 13:20:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Apr 29 13:20:08. --- .../20260429/20260429132002-Binary.backup | Bin 0 -> 318109 bytes .../20260429/20260429132002-Config.rsc | 4613 +++++++++++++++++ .../20260429/20260429132002-Diff-Config.rsc | 380 ++ 3 files changed, 4993 insertions(+) create mode 100644 MikroMaster/20260429/20260429132002-Binary.backup create mode 100644 MikroMaster/20260429/20260429132002-Config.rsc create mode 100644 MikroMaster/history/20260429/20260429132002-Diff-Config.rsc diff --git a/MikroMaster/20260429/20260429132002-Binary.backup b/MikroMaster/20260429/20260429132002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5168ae9fa65c8306af5b5aa7b6dfefe39a219844 GIT binary patch literal 318109 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Ⓢ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
W93{Lu_}mkEv&*15_? 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

;%_NlT}1`pQ8g~E&o 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 z z+Hteb%FFQYT_@uKA%P@+jp&(a(~c}&o1p}`JX5Z*i!|^7=TQBn)_YPgu+p!_?VJSL z)M-|C!rI_5F+GUJd_?^BaHzK?acRe{K6HieXUAHwuM9j^iLUB-lkoIJmV*g%V*Vxw zQ7Y#aB^8JrbJ6laS7WgvGY_cG12kpVvBzRZug|AnSSqe*+p+^7!$!m_Laf8a|Btwc zSm?+T?yOgpX4p2W_1GcZ$(Ha+Z_<%cC6O9X+BY9S1JAb}D?Rw_n@{NV@+8>3r@e|381E z77UvZ=4euIXp|_~(seax|D!;-S%t&Q^p`@*@(ZC5v`7g2=&OhYFt+7(3Kbk-g{yf! zF3~-FsWGf!am#aRo#>Hh-o`2bg{OMv?cbQNKv77B6E;C(Gja<_13a3Y-u@ccb(GVcy zKv72xgw;P8o8qVju}~2L@FIaOBmN5>-dItfyTXBq6xhfNYoI+CA@1k`+dBcvc3LKA z7Km{-`*A1j!}0m)eth05o1iz@Ljd#^3c)mRbcS=_K3#A>+OdwrS>)-PoZn_MP1`Uo z*7d$R)ZbSRVlARQVrvbyM+pRI%6%x=J7>%yXs`L(Gxa(tuLFVO-Sf1LQDta4y17zw zL6@3up!H_j4nw!gTn3vyAq`5ivts+N#+Px#bGVM9tZ2`HNe+pCwQ#-fpx^gkO|e(< zU%MqZHJNZTZa_*<8Kd`?ckMm#hAJ2w6XttXMcw&|>XL0H0Viy3LN26BYd1tF3vFC* zo;jHP80t%CjXQfN7bUg~JMdn0??crbRK_{5jHPsRsC7x}ubxIo5Bs@0ORb_* z7CiH^_LCDwH!~{+O$T@+kow4^cD5d%XU&VL)c0~_2*E#grfx$8?*;LVViAOMW>%ae zT@blYTg;KmDD@U3u&xalHIhv7mmCStkqFzOh#TP0lH-j$ywVj(Mm7+dEr@AS9Cd}TF}|~F|VD9HUMIU z#kr$G({h{D1ytvCj!$3sbHLr#N>*K_4z5|s=!~a@TM@Q2e8E0nKgLfb|Ij)q&x+9u z-AAxvXOam?8^xIapvh$ay0|lZDOEH0n>S1n!dZ1k7DuIWt)jnflzS+k+|rZ$gPJ3Q zcV?@>EHOg=Zh!1YdcV7Jq}8EQ;kLCDLYrX!j_Xxi#YM)yobt$@7R6HhVV0&2YMJDQ zQf)-E=>hy8gh&bXSK$NMyljzqrwrgzlbM=q^TFq^`v>cTWcNBB_jnQ`=`mSA5B5-h zF&8|Q;GeSx$1i13Il%zb6N?)kKGw1$&UYK{lN3}A&fkKws5muTVjQyYa&<+u_6@(d zT>D(ymz}@blk*ZtEQ4I!kR{!H(I<7Y?zx?;D@ys+aikhpHGPW|GS%C=J!Q)7L_ z%JNolCp_Ow0G`)9AWt066>M-iq9w?H1#M9HT$%q1EsEZU8gwSUqx}8Si1>NauDYOE zKdyrwwvK7Y2WvSGe_jUUk7*mOrQEfdQ#{ja`M@pg{Q2%rpdO6FaMoV5dn|2zd0ZJX zk*Qn95K%c^YOW+b#-wO#rib${*#BerMOdbDj{*B~rF^I@+!2<0%7F zI9N7OaWqAWX_KvH*n^=z1eon0^6U4K+2awZfbk$IY{A49&K~|*9U4G5aGA}MsywC- znlFmjSYW@0yPLZ4yi9nuK7;EtkT5}@g^2)+TI1j`9V z0;Xs=ig;z|H*T?V6^<8SE}GMDLmk1^Ohuj}CpJVYEVcPoopZc}8ko5-Ywr^?W)%!C zr=S7_oFUJhp0P+^9D5JX+QTz^MdTe)FuQLh^ODuMTmp_DDrA;oi(PWhALmMovZ&u< zCL)}8zGPKSIHj`$O(@nbM{JXuvJ|IDTcsDYpm-$Nr4wn8WGU2~4RzIXl(DZr)qmEnm;BqZcSM!FYj zge^Ufew|4DFyY6*`UcmC(*>*%YIa)#2*}&(-paIqX~Fl@3@m>KQuJVNi%2mg-~Q%~SpLpzN3Y8K8qr4J&E=;1RsZ=Xc` zBwp_UA0t>_0We0_hfw-3ghotSQ{A}X0`G(m%h>tJfx-ay*pJL zt45iUZ)RY1i^f!Y^?m%r{|oOmELgst-QJ*TJ7>lWt{hTm?I=rUwh*(cs6t@eFWYD) zv}1DxluaG*MQ35R2}wDD!$SOmFXX0#5y~QGXYO)gqcR8V{C&7Abu@W!iA-j*Hal6) z?X;Sp@==u zaDS*MebtZ4WHyyvaZ@7Dk0J*(s5$Euq>X}9^rLmJcN?+#G`Vq=ON65MVM+ArCZyn_ zrh0l)FJvs50_y`cYX(9j^U|U873VAe^?yCc?MJ)$px;84oQ+Vkbu+-gU!dEUpxt8o z1rRZ%&8;qhKR=Ts%X0H;U4Vv;F_X!RsyV6IpolxrmlZA9gb0J>k|Qx01R!q~6IDZW zk|M0QbR}-l;l@>Sg5J%|0Ao}EZ#j&hv*N|LGj0?rUz-Y;ERJ{T1VQQ60>oGZ3&IZ( zOjQ`#6>R1<&CcEF5sKn|23D<6b^oh}L5tDH$1OUP} zeSqIWiR)2$Xkp4YgyQB6XqOAEIV^ZO47yN3DB>sivHZks9L^2fR~A`Zf>1ddlH6D% z0Qzt68pnq%*v7ys-Nlv10w^gFtMBMG@Mv<1+j*H5#+xJn&DR8R`RTe^8JJ_R#z|u> zS*)peKd{9D!m)ud!U6|$%R{$Xih_e=SMr3kt&GkVHK77xe2+fR|}QA3fs))G2$!=(#Y4zmrZ>*Rr{0NM_QDdXQy(%>m; zz}e~6j(|*J^3PRxeG;GczE4fqKX?{+n^^oE@e(_Y+I~h?NH~S zBX$Iz93$(lfy?q7c6Z`Q*&$I6Voew_sc=SOiA@`m;-+4vsCh^e`XT4ZX!37yIJRh46kd%mFt=!Ng8e%w>dYgfS z;VEW`=a5S@&m|Q~fOoK(G;;HjEdX;|S|iIdYM_7y+@>A@&BXyCx`!CAli``rb1g?3wz*Kz(GBJ4+>B!ug_N;e@fo(5$HUEPyx7u%A zC=zl^pFvOjb|qYGaJppz4xFNPZ~CGY>lyj`_sOeT-a-;->izkIzVk+yLJ&u25OE5C zXy-Xy$|B8n*0Z<*ORLq~dKY)c`UtI)BXaI^WQ}=&3VCV{R)Z6H!50HC?J0&Bg@Dz9 z5i*=SsgyzaHy=a8-_BcAutHYYOx(z*UtT|(j!_o=N$>K>?CNib>rB2uq(Vl&IDJRQ z27soV7u)23YWl2Ue!>X?M@^|sD6I1k-;VhvMn=O^jKyGiF)?Z;e>}Y-;ysf9l-;3wL z=r%D8W>SA5vjmb5B`N$!a6DviGOGhdtH{WwGgt~I@{sYM?`4)$wMD>44;KgyWw9eO zo10s80)rJhv;LY2h(V0`INBx~C|^Tq6IZ`kW!|JG2coy=z;;Mn1N>4Ji}@e1pz|^R z2{fw^P^C{M_31_}()s!yHihw#fv)`pHlF(lyjZb47TLxpF3<5f{^WS^f^rcAY7knF z|D>uMM|#d)oGM(AvZcEr_DV%rV}cup%~t;7NO_-botJangCHkI{}f^JWjlRadLKZ! zK$s$pAI2@iI{J}l5c;{HNTBzY3e%$T-g;YD>_y$ocZ)Y_iGg8`SAyE6q9E@r$iw>> z649pgKe{SuI2%lZ*QB*<8~&3f610Ugrk^tyyQ(&u`UVdGJ|2ABaU%-*ky+e$I`X{* zKA7}SiIL~Z@T-9otX0m~skcGCEprQy2U*UIqKTe~NNp2i1G2`>>5;MO`HFCO3p8_Z z`&Kr!syA}Tfur(QHGnUdPR41-6jitxE3Ty6AS_Kzdx_5n@&(XK3FAJ;DO}Sebjoo@!IRCaU2!*-`f72}rc~`vd zNYuK5S`-`JSD%x{e>DjM)~%ooazeCFuLNaf%NK|X{WghMfWv>ub7P=t z-+To`-oXzATR8JBw9u|D?4WL;ze$c7h4Bx>ebs-Nta#1PUm?z(sEV*gM}GIJv$+Io zmtTQMdDD>LM8`VSYyt1mi6ZV#JALSN)36w`$47!6zNV+p^-TVSkg^sNsa&Kibd^sX z*QJFC(-7C~+m1&sGeQF~f;nsFeL`G?8VO*7b{CU+SH zn4c}kC%sM=;0ifd0D`tC3x7SsMa9q$OR>$EPa3!?aJBKB;^su1r-O~4Sh3cUd@F`J z>M8i}iCGCqm`<9_g>A~OsPt`Q zwsZTSCVH6Fjcv&-q3-L*9c&vB(jrW*a_x?{u~?AvM@8kM7N~7cy*4Ll7KB=_hV!FnKkDk zQuLo~83^PPEGe<|j466Lz}Yw_-ywl-P-cUu(7${GwZE7Wh|DEgsp=Pz;nFJF- zh(YKVAfe6CF~jnmw{W_dxF%8KaU~&%$bV+N#h)Rv01pNFgDbDH|IpKjhwYWRZ#&c! zsR}o*&u0_?^oD7#-P5z{NH_r&X~Byg^DIs_Al*NUSy+BoB%Q~#*FsgULK_i%Ex5vpXNr)ssK7^gTUx!j0DvV{u1buVC_>RDl+!(E$hpu6D=EmMmJ0-BanD zAAyeq&88Yd*9lV^MO$79xm?bc4Etm5^_YgtOLxCb?ww01hL+AZI~71R>lDcfyaS0; zhis3a%C8khFn)0oD)FW3sxPs-j|nGz#%1?EcPmu(Zc6HeWWgX=pRwZ@0k&wrmruds z!9Y$&PjVfe9Dt`6YlP06nX{V;T_}~plIvv&hVz!QCt1Pi-=}`A(~KF@|1%M~LMkNG z8&;|I!?ZZK95Q=!^;_`%Bp0f5*v}_&R(Y=Zj7@q~Gd%27n_8d~a!OsE1?Y30p6Gh1 zpS^z$cy}m(%Vs8xjw|tz0@+84S$DwG-P#}gi<(n~o#W=AkK~QL!JYQ0KUpBW#R1f+&a2LkUHuG^1jK`-|1YBCS6Ow_JY@!4*_TY1i$ zLkouhUv0F^$5y1>%yXNs{&hQ+b{sFLX-5d$8SF*$Q3xRu%IliC$VrO<1gnN|X#TtV- zZ8<}|8I;}rwo-Zq4+z@I!(DUJT4xM2uR6Vt)$q4gd4u9$vmWl$QLvu3?%h_OO{q?1 zs~xK{%*pMq`wL=Rp@i6nmK2Rl4njMl?R-h5-?Z0Q?0(G1IQFf8{=YzIi3y6$z58`K z;+?(GJ?6Rz2O*lY8we~YB{hwsa+G%JLFh4{B8QL$EvU#@bXohj)I1ZVkl`sQTCTfB z=R}Md4LuX@V?Y`%5LwNBICrhR3M<@va7D8-DKkbBN!yVboA1f5CPfYPfJ9N;^r19H zz>R=0yrQNh(QHV}+o^Re2}lt(kJKh0U!AxNC024i9{u*vqhtX-SPwl$HC|NS)tm{a zWX1(#)G)iDQ8Bo`M0DGwEbcvyb3^G;kDG1;7Tv)8r0#ClU@QE&jx<9Ycx$1ie{WC} zH627Hy-yyeEJh-WGLp8%N;#4_V>Su|+-x+_Z!|j*5VUQZm!hdoSnno(Xk@(4GHsTf zG)=Ikd+jB9CA3C{%8-(@IcvDzI1P4o;GgWvw&=!6{gelsY|-RH^_E7QQlUtssvI2D zt0w;169T+mqLqSR6BY!E_sGW(cO|uw_H*+jr@oLJ@*RRFXi8zYGq8wSo-p z(pdq&yhLz?=J0MbN_E)0eGnVq(Ub1Ff`RZSd_&>Q?#Nu2JV1nM%YZgMQlImFBFdp! zJNaO-kpG2fB> zVqLj1nC>ludyt)pyM+(GZea^%g!J*#^P@g*t#D^(ZdR`Bw?Y}oinAuVh1VL*_I<3;;a<>O%v+-Gj8^CO{^ zLXRlXZS9pp=dqp9l1_+B;Q;t=FoCE<+4)w;g<}-NW0cDlqcOxFAATYROBA^8471OB z?g|RPsv}|iXfIqA)r$WSmyOP~7o7n`-R|kY#-6xv5K#`^Vuc98oAo8&@K=j?csg~v zbwWVO?s%4Oq9;2FG%oymbmIr4y@RPyEUXJh&2wA$U-MJW0V)G(f9oGdgumE1w5dr$ z|L)&(6K(z()V(TsF@dg#FO)HfA;oNQLa&SNsIq6EDND-Y9<1u^ZN{fUcSIF|~u$7>S^KiXE4 zra0MNw%m1wZ&m;ZRCzwA?qT$dTyh>5ah<_v4}(ZorzHPeYPJL~U-JN^Vl2b)wpfT9 zK&a6h>>8#YMq}fA(Fqr%t5FFCM}QH>*OwnpK^CDkBG-wlwSZD!G)OcFT2kls4v3k2 zIa8T;)p|6rbH1sFik*s#O}!|rOsmttmAf{1#xv6&JSWvU!)2vqp@Y8X7=a{NNb2OR z^0#yNlRR+jqiGr;Z|PZ&pN9KtynxZxA#KwJQnCSy`PjMMiyH^ewP<@9i*6DIwVGC?%{MR=+? zm+VC(kriO|Ho2*LWI_l`WT%>7*>})tpU&vIF?porXWr7c@v|tNn#}<3U={Gb4a-PN z2RzTB9NruIZ{*;tRrZ4e1E`4}i0w!14(cAw?@o1o5vL8Xy3f zD0IuvP4%;YCNGU`@b##$w#84?l|sX(Tcf6`!wVH#WOl5^fuc0mS!Jl*mGUob5cU_K zCM{Nqt^gD%7sn)Z1idZNDvw>`3v@U31lAH88c@4sv+;p>Qc=xf>?+8nE-5jD!M{sx zwjtZ5t7yv7ykC$^&8aNbfbY0dCJyy$ai9z{882!tP`KB*6J|$qIEvn5K|$yE!;>g+ z0*&~DfIK%5|JlegM}OXX^kC9CC}BSuPRGiw6m2pLBdZn72Q2(nR&@G?J)v1p5asAb zg>VhOk3K9qkZv@l7O<)bNf`QG0-v?R&&^&XQfjo^z2f;l0`{}5h+1Fi!`+8EG-}{9 zQlqOYRm;Dp3dYCQBjxB(Ia>#u_ES-ZafUZ4y9CcTvFz1QCEqHH-UC5DiXi3O0Ixio zcK~AzMO~RT*RKvX_a0H5n=P&8kpT|~c1!=a7RD8SWCQNIL2KVl8YeQySgg0ng2>-q z;Dnngy_&PiBlTmAs_VGOC2<}!ZmQ!ZVyh8x^jB~rPaMI!nX0UillmoGdtG$#$mBmIGXD%5Bu1vd+Aix6@X&ez{FQH6`^p2 z+ymgCconSUum}R1S#+lmbp4?=@NMbA+;O%Xr|L^ydOVi@7pooLNv=xDhgl}dR}HSc z6=W|9+9{GEigdBMh&@B#OTzre+TA=rUbZ+JwWBBBM%EVgtuFJ^Z%BBizY?DzFCNd! zQ`Pdmu~tebou{V-Ol>2-bqDUd)6mjn>FKJPxv1Y}ge73%8zHLuL};K6R+)VDdS*=9 z=ug804O!bHzKML6L;GNVb)xd~Tb-JOBFBGX>7D55K`1$AdrLR+VCU>u_jCK3yI=U~ z{IqOM%#SMwC4skD{l7iWx`*|DDNxj?TL~Z~@uR_Du>ha8g z`Y$75Qhhv6icWP73yd+Oby$q$t_zmHfB5bxoJO74q0(O+aj(q+gk7H%^ikI}?71;OOn|L7#;k07Mfa`}01LB*DeJGVjiWLpUBJ0)nb zbK5Rrpx#tOp^{Rk_cg<&kV-&V*wrO?p9xw-Ii^yxO)cWTGqGN3c4G0;_ZziP0?P1? z42atQziAX@j_+kPQeo$B9bMvh$4ND?`~(#^ZZ!j8meJA=vB)`fXar!2Lzf&s#-L?t zZ$U59g7q?(Yf**1K+j0DATisu3Hm6;e7i(Hdj~-#XLKey56f+sYPtSKnt2Aby-d`! z+C~tZqbw*;Ab#vJp3Aph??eVZ@h@84=7wVF$hbqnt>Krl$t7ABI6=U|!fHF>R0bR# zbH8iEd31xHsOEj~{;=J*S{}LfHDooJ$YR+b&L1?l3*?$GS`StJvqOVerE}O;{qTyc zC8D@kG5%}Z|D!Efis5`!T%XYMK#I>Bi%D&2GC0S1jRs`%DNEfIB*fTo6r666M=ey! zL0+oK5HpojXuUqTWc&^Q3=cG5T)50|ics0uObxg{>#x*_GJ_(gDimvkAp=7j&VmRo zf4}7;5+aWQwB){>b6MM@5h$Sjd?|qi%QBt8ckV0}#yXS`ey9Lj-&Hz$sUm9hWlu|3 zEa6>Jn*S-QjfA(6*4<8(&6%0R^@r_;bo!P;FMf_3qNZX;&&y8tnQOW2)qmbEY8*c%d5-J@|w z8(-p{e22TachjC&0U-FcteyK=N*mh(m9bvMN;C%Ql8w5rZ@F!lzwe5plrEBE@(rON zXm|57Q73}folD)E;P>DFHfoh&0zM*~n%)nsXY4GBm(J%!kl(*P&SrI9O@nfsAu2Zxw)n*(#}9xHbKyz}21QQYUv zA%MZn1c+(skB#fx!5JHp{`egH-ZMUiA82in*MEzv()8ipXq_{^?g~OcZ$FIq@vk3k42Px*a+u`HC;+#~?PC3)}w zvinyy3Xov1>x;-O6vePGOO<|gO-dLU4PD8$UpM%Z8=`KHz#0hxr8fHwD0huVi5HAv zv2MQwpr*@cg^eCfd3dS(1ky;V)9$45gWGmoJzy2!LvtT3CT<^wd;3CFg{_Ai6JQ$3 zHn1$Pq!qcB8VqfXrZ6V>!M3CH*{N;!)yxOYDzK*I1U8W|Y#(u0gFJd3u5DEga99L@ zYKsne_{$SiOw#9MK*Xh17Q$|yVlh>>p?{iIi)osFll8Bi(0AHYzjEM8Ew4v~tlSH+ zDu1}GEP9{p1<1RUbmg1q^hc6Mg7GE0?~8EB;FhpMEf)OPJ=J=Y?%|@5T&%umlvs$t zyE>6RB7pa(W7LTsXG|}GYTk+Y@QCs8>u*Qj{pZMWGwDkye{=gE3$=}1F%)y{aePq# zS80Wm%TIU1IQHvKB=k^{oJHM5u^crAa6L|@+T#-F;d#y)`hjL&$+7=6ho(!1w zQWSm!&b=OuWj*0_<^o7JyRv~wUe&Bd2SQRedmP!zebG_giD4CXcJ&sR?{5c`;Ws4jL;@uiNHPKz<7YD#h+GGxPq4ov);$Wb3T(txxt*J_lWrmuO%2~1J z?kQN~r$@al>LSGp0nkpW83+EIc_U?#pNa^s{ugrbCwOu-hpy}~^~-Q8?+N1m@Yppe zoxH`y|;?!T>NG2X86(EOsSQc9C}X~o~BiFg`P z`xg_>#H}qf0>*R&6cmEz{bfCV1vZ0as`s(=crqO2^0XOu3v4&Ubm^+tfDw7{f~>k= zjB+9Bovz~CEqID2Csc60g)+C6!l`#isoCNev_ij_#wM{IWGU8r_8-E*M?uHqX#-eN zyXFnR*<&q8+3s{Qp%N#4&}sIzp)^u^XpV)VV48kQ7W)HV`OlXo=#8^GBK{lC*ZQ$U89_z1mOXZUvC}Ld`xG zRXHK?%n?uV|1U+_wkn=3;b1X8XlO|2D@En5oO--zQEoyznC+X(qOwxw*Z7^wqK@mc zTl<%4+o;f9=Y+ML%G}uS{X60SFR${v&DOCrRC~p3NNdoP>W2vNhAL|*&LdRSmN)M* zv!)O2;F9l%qynUC6QQ>Wo)QSI&wPDAc0QJ8K(YZEbXAM=KcZ~=e-xL0t-1)QJPiy} zq;7WO!gXrH4m&+?Fh&We@Vt<5V@B}pFPIY~71A)kCa4)1z1v_pdkV}Z#)F)A`FJ%s zRWd0te3g@_^@Pk_21R2MSP}#$xeqf7%Q{!p))pguIm<@U$c%CD`*xO6?A+RGPb>p6V9EOvP`N;(-?( zabyr#l6?#__%u^0YH(us-iB$8fKY%5fudb<;+qd$`Dg`$% zZo6==Z!Y8jz$mfi33t^e819@Vvb7jZj{!kY5yBFKJSS|;`DK)dJ3~G6{MlkJlkW?k zGV{A8@o0LG&zoc|*Ju028;3axjB5)%+%LR)n{>MgTi<_Qw6B&J+bdSf;kO&z*=V7< zNW5OIETW8rOD$rXS*qCbsKMqaO7F&V<>mcLt*QB75LxYOm@7zjU+_SyD7A)oHns8l zWO9?>w90--^8U|N^N;L?3Hx9C_eMqeNBj{dXz`5YxLoXr*1MzZLY2?5<-h}Elc`L4 zSm9^UI#V^Rmza%fLMZt&C1jlgk@^5g zzkO2%$+(X3Xx?XT?BObF0|BcnR~A)YaiOgDlD0~N!R`5A%_0k&E)?7tZ#0CEVFtTG zzYiSXUU7+T2+F%}Ws+5mshA5*a82;yd-&Y3(KWc2BnO7{Ak=_Zuj0BxV%d1dmEo#w zjc(84U@+NyF$8aL@s|oPk zyrpxV{e7RNycw9Q(>Xf1wb88LzR=>h!u6DGK9WD}l~(Hirr!SD-aRp)k-&gnO4m~s z(y$%l5cZ66PbogeC_)r#bjJ!Z&^`&VhviU$FAEG0keZ4`4EIcQX_DSJ^=)reTqsiJ ziY@j)(eHFA+0b4D7)q)E78_4lP*!F~G<9{C;4L=IW$neZ(7jY57Nv!#lLG$eZ?aR| z2@$rlK~SZ&v7BU;?aw4CC751Ghd4cFh2U>e0D$qs1hQ^F68KlYa zjVf1m^MXg&BEJ-~6f*kNoihn;qxG#Ai^e@EEc#-k(Tl+-c4;uN2yUzuAcOA&*{@ak zLh(rsA@Bbpk|!y9vPrsT7e)$gswdw{$o8Fnh24ZPzLs!LH`Zw`fe`6t5{lueV$^&# z>w+CL3oy#yJWXXC!(_{rgw5pcN}8)jea~NWwn#qr(dTJSh|y<1e%b`-om9ZNVx(%~ zGjXc5$m5jfDNZuFR2;=o;^QBb`oHM)5p3QQ_c@h;sClVif7uA!4mg@?Fn2nKsUHz@ zSabZY@=hV=g3v`@KlUH=mD;DJ3Di3sMTp*gOH~(@REPlQ*@>!0&zmu6Bhz5>E#c-| zdD%m3q(v%g3Mxk{oxs2ArwRQ))3)tm%h@tKTO51Z!-VK5e%BLSlR(=SOu)h%pTbXp zwlhz0z*t%*KZpV+AZv863nY$uO0r(E1oNo=xO1sP1BFO6+$@%%#x1qpa>UCIt&G0II-JoeWvo(%yfA~Z40XQPI zIf(ny2xykUl)4}*0=galxgS0mU1dW^R6XojQAXMYd9L^Y!Om|uAsKf^RB$4_)W|zP zbf!|I#jG6iuO-?PgWmV$ws%w=yvN71bF?E;&gRris?Bm{U$r4ox&mIB2EQt(+ZEUg z@{I70jh*q?o1EiN&PSw;u#>}etj7h>++5!07i#7*F|h9O?&m^R&K}!ch)ybK4?b|d zD$LVbcVP&Vw&*yaM%?{0Fba)@4nQ8>&e#^VnlfceHx4fr$*(VuMc4}o6P$S&5mQnT zXxmv(yOdpDp&6pLDN?GX7g;;s@Mwnn+znhvE-Jiz*9dMLvPwP7l)2p##$(vfEuyDU zld7>bTGgfxH*HbYqLkh{bFVpU|C9RR#g?_#@ASvZ#ocYHG+g613r5Tj^UXX0J?dlc z^vt*h%fZcIvd3#SF8t5bAW@!a-jKYt5blkYwS#qlQJK=}(x>XQ1s<76xO=4cv@oF2JFGiCQA#i5TdBA#)yDr+TQbY^p$+v5(|c z7#emoienUeDLk=;5t|;7{1s0X7=g;72@w>5G(_^jt&_qd~_$F z=Fj5^s!#N-A}_-1QBQA7(R1ugRn$1h_kjLa4vnF~W(agEi0$>S9TGn1NsIrj?UVdH z2+VsUaBEXu#-KfY^21h_Nyi3Pyfmg{6~vt38z(pJF;yPu;i@#YIk|B3e< zDG118O`u}rZjclJO4_rSe!~H!vL*{Dvf$YVJ|ePO2Fd?0uo!JmB`;RH98a{r=td&q z)*2P#DJkLIDuVz@mueHB1=uf&nid3xwRl;B;qy1tYW0o>FDrPg*ELRu!pCdqCiFlS zG%+?ef;aXB*1-=8cdY5xF2)BX>Ho9J(M4YB{x$!~@y0v1PiY-xj*6i*x>yKru)7cK z()pD$*lsV1Iz4R-Y$dDKQm>(W=Rgq-CJBi&{1o}<7ciR>~DRm%uVJIs58Edz$A2#yhe=VN^6 zfhCb3|Jg+A1$tL>5Q0j1aM^1|x|$_%s~CKknw_Q^4yN2^c-CA~e&m$oXt`-;$_aO< z02dMGe7uIWt+^B2q8K|qmh1|ZmPWb`i93RPtYW$;h!+No{y?{^efzDBqDr!1$W za%{CcxUG#K>Ny-urFM%uCj*fVMIm`nlR4L)1svwzx#}rQSxG3W zjGq~fw;!!cOO^v@ZwjF4m(|9EBTb z`v&PgKxMVh<#u5AnNC?q?TfUFc9UR82))^x0~ES>d7vf>V1-=c8}|^3(dpLZA)-?t z@t(YRj7JJjFK`0QD814^00af2QhpB{c`^2^Gf7;gZ-t~kn&!0G~= zxTCat5z(OXs=n|kR5d*b`Z47cYXi>nw|#yDvJLuhT~THQ=oI;)(R2I3HMeMxXs?8AqKo4m%(!Eu{-CMV#Z8)^%PuA@@92R!T(y?+*YYU3HqfM{rI@vIqB40N==hZZ9^WlXo%4ANAgNk_OInTm>vvtyU zJtt58pFVWF#Lu?|PDAUe<}41~p@l({L{Kj06)nPViPH}ouTmML#OgpzqkRoV- zViBS(^1J@E7zZwB53U^Lc7HR$QXO}vT`?M%p;G3xM0DV*Z08BnAoI5%!b3hf7>)-H z&Gul#9_jU?oE(XFZ{9S@)wIa$3zulWS-Rd+ZDFcBgXL5gY8IPi)FAf}V4wgHQe6u{ zMw^VV4C5`n-Z1S z<+lK!^2$9aF9%%`SBFwjJ~PWTMC9Us>XqY$VRRVG{6_dy64F4&Eg5i&xS`!npx0$N zn7?LU9*AUlP@L}G>m?b;!+RG+0;@-nYvA!zY+(QDyH}5!D`bEj?Kyf~RpG$3W}n{^ z3E8SEKG9II;R=yC>+}i9m-^=ozy;i?D0>kuW1}8Q%h$gtqmdguwf2RE_v59~Br}s9 z&vXJUqklBZL9n@>XsDm*A*fx(mDeEt3C=c-{~DdwOO)e`^U37_rzowMyOccJxfaUy z-E^a|T7Yzjas=J`HeYtJd7eF848dqhDGPuw&_gDVt~(V-=1S1pCW4SZi*2=KqCQ~*5%&Qq$j95cP-fs$;Oa0e zO0JuClr=4mL3{iVHubt^$VJvORf>74ql#Yz)r^xzU;3FliI)kid^S4{Tl8)5CC*A; z@nzLi*T zOK5RGEMGEHO(VU)49&&!TKd?oF4!8VTvP7$bm}2Pe%yjMO%dsrMb&oOXM$cbZJQ+> zt_#Pb6f4l@f66l8?D3R5AM&YmDZ$2J6A3kD!7S{?YleeFNs#3O@&EM19djhJ)CR{y z#CFg(@H4AEj33bIT#10@S}4Yg2H?SJD#;IfIDw;kpOeDAp_wc~$}`sEm!Cajfm*1^ zlUPoJ8T*p-*0(KQPwRt>WTT5%_~0e|wP9)QkWP<|L^nVQ4a=}Ge7*n{cJI;73LL=t zs=x;2n?gbFZl(trhxLobrYw1xnOwbwFQ(OjW-<>gALC-hb4hhCKfQ?CDJ;*_+X4D{lQmX1+Hr8LihmE4;8*lBA2Cm<2YP**<9e+x7o7oKA_uD6W)GFec*lRu$s6I&YQzY!tb3=S#1OI z4muoVyB$z6X;I~JA%g~zn`Q_2dG1ym@M`^lG$D14uConlZZm%WDDsabZju*=hZ8k{ z9bkfvIV)2%OheItk+{AVrH0D|`*|#5mawZq_dlB{U9G$dd7|%M5OlHs444RcJ5$-C zUTwwLLMLuIv2$#5pmZniJjS6rOQW?iwcHNj(-j+O{YachoM(fU-~s#WQOcr9Mgkv2 zV!+=@=A=ZlgngN-eT)ZW1e!Nsfh3p<|Qv7 zrZV}$!kjZN(K5Cl%7dfYi?B4e&D$CV?}+exh(2Ct!SezCEk z;D3b>jS-}!@RkX{gSwd8#+Mf2vl_m9g$rIqnnuzM-_kC>oeDT1&T9_hJ;u6v0$&@n zXFG%9lTiqD!x@6|GF22)7Uu#OQmcA(hwZOsW~Gz}FRVgt7K_haRujv>$14x*=P}-+1H-n3Y?HfN-kL^Z=#JF44OP;L6eU3Cpn%i-wYU$c6Zou zWfzKO3d_L8?P-hQlz~aH*Te@uaNwJ>f?TphH$^vxJ;Q{L4Yd$&DexC>t!*~u27T_z z+bu2E{_ehmI!&Qpg4d)2QSU2(MjTj2=ju2#DUj3i)T^pphvWfJ94e&jH*NQ{n3KCV zuvrE--)g0IZ$A*;pc=1`YH@kY)Gz0++YE15ZRi$7yP$GM+B^w>Nqb~cx!eY#!H9bH ze;9BOhZB{5OFe2eB9KyXbHMEu2N!#WI?2m7({R-^bAG269mUrb^i8rnbBN-Sn|)SI zFC;$7jaqKt&o|iGNd&|tt`apy`0kCy1qLeiI?$Ea;R8LC?r}nHvAAiPg35|}@ut#1 zVn5rBMkJ?6Dt7scHO~?-`GqIDK^DF>Nm(%Lo<)bJQy*bA`pkkHSk2!DP9@^Ad9}rb zr_ENZld;&vs}yf{{6i1`bhac=zopwMrT7Gs2WCKJsr@+os+F1iVHb%08AWV3{V)}p zWZ@2|byR=-2}kK0bes+R`InR|gleGc3oWjs6KniWT)?*DEPU22SFkgUY!WP$ud7Cm z){1Skd5oq*1u#Oi1+`m{{fN>?fi_(KDIH@gncqsaM zK;hHaIiXKQ<+`%HO;(h)-6l$L8Mh>vJYtr?c32$Qw<0|FxbWdnfw$!J`d*5cRr#I|oz}RGMb?y>vpk3&{n1%Wq2!MT(D-^LEINqch?w+#n%By94 zpgNbHbg-4Ri-K?wY;U8Tu-dVSLFG%GO)3u--ij zV&G5YA}HyKX4H?;A53tnr0I9s?yl>j*qw=Q1~$N_H;PACmWdJc>UL2@gmazWXO36& z(*nd&2>eh@di?eIJ)n;f(qf9(=LZP(11rzu+&@M97y?9^riHw&YdzFS#_|JaF74Zpb;etZ zVvIQ4V4!O3HCt&)5{1q#tO;-dzb2NRR$){`f$xG4si_qsgaJEKK%!g*RwHu@%qNkh zt`X8fFu8SjuAua?LAPIP1|Mt_OKv1#cwrc*(nf?M!eLNne*`SUGsg?aTH8`eK31 zxy6>|nDi8PDm3e$S1du|+LpZ(V>hhtFnALs3BsvVJ&~A5SGTJB$xV-qiF>&hV&+lH zcN45@um9glt#bK}J>hDt8;t17@C<;jPJ;{$_>8qCmGr;wKg7Xjf)`Oegdf4AKiF6nEwk_*oLOp3naqVRoZGRk|WGcXR1wlEIh5$z+M5%8U$H4SdUG^3s zKf&DsnO3{p!`&`;%u9o*34TEGCiX&6aOq!b6pz@s-b_)x0KnWSW;ljX_)fFpF|$xW z5ik~KNeyM&*nuE>5CdpE7zjqB@d@c)Ij^)UqEVTh@w$J*3YY$LY%w?Yo-YhGX$NsZ zskMm$_C^@Y)uT`$_Qxc?fWq0_b6-`(Zf|$Tj`sJ zmP6G!xiyGSt_?1A7lAXqJ;>&nR}wc8LM#{B2MKw9#9Nj^WPg&BA3@p&o9_GIrl1Mf zK+`^AhH9FHg3t`1oT7KyFv{cO*sg2yyD+tPpcjQV5WQJ5s*2?=1 z<9)tbMESbJ$&5*MV~}f}t}aZs%*X;dZq&F8?0Bed#6MYH8GMln+Dd|%31Z-AWkwoq znbT{LW7&y`P&tDu2{F#{-a8kcodRnYu!kA<&2JPu=B7&s$X^tf_iiemg`baL~z0Qa*OReW?0t*Gse4F=n=|6I!s-SbZ zyeAmd9YF-9Kl5ZnN(DKS-CUJ7pk->-KO#&ma77Jyng^k*UX8vG*Mo(y0rXePME0CK zn46c)$h0LRdihwGpLqPJ+JwVFFoVEmfMgG)we^`soj$;KXBk%j2Npu%D?CCm$oDuS z!F-~Y5IH{G0Oyc8VmqiF$ypR)RUM)5pzG$zf;Vvih4}?v8tRN@xj^nc1J(}+u(mL- zWtifwvlti;16wB}L`$Au%!B*k7k#ammD%CUH#^jsrlPm+rC0tv{aGbqNXE35MZMPS8{KAIF%i z;%fi(t!T7VInqT40K9)|^TMLBFYHYv)k*?1cfHo!gu* zXqfS_atX3R)O=>Az9sc7C7C9`@jUgyQ6^jF7pRUuEQOqw3`GWI(?nNKjItLxPcr*D z>g)ju`L*64!qm5{AvNOdW`eh!SUw1j-->o=irDHwMFZ!p;DdHt>&1ud<9&|rq8?F; zSn#NC8i;Qn=r9y~PsQo%E{~R}hu>-Qy~$_p7z60Tk-AmAQ=&>*jpxhma<1(0?)^UG zE0s`8o4s?jxCRd1X-oLNnNfM)uK-08sKJmaJc^#<%VVGBux@;|XzLq;>1`G{kFdEw z#8}~WCJt30`6S2w88&CRl4VFC0a9p~8`rWVp~Q3UjV8N+z;cblXaIT$9aV?Ug7~T$ zrS8?uAPb(T-$`Tsq(EBY#jYUA)jwJQQ5l=ClD{g=M47Gwt`hsEL)t59i|a3%V4Vpq z+#e{S4?~=QI#5pi1<6H2=CN)to;S6+yJflw!ne2LNb!@Evt4s|(tL&*{ajaENT^Pz zI*%!4n_bt4CI4$@XQSD#z#2GQk@2!>WEPlwKOYTi0e8Y3uTY%m=G|k-F;#VI9<(b_ zvo?(D{`CB%#2k-uhc2Ko4FNzevqVai$%uO@ub>$#nr~#9A)L$?b2HSQTj&*HVIsb4 zarcmMsi?A0J|NdVM8iqT_eS)xVUGYW^GO9$3Muu-u^9mm!N0*L0Q;OLN((ekr8dN# zW|eJ@M54r61g%);AP2S`sgAT@}~mk;?F=v%n!!hhJjpy)<^WEu$3NEl%O9?OYVXMBd$tiwxFx91KX) z*JeYuF7o~0q*PvK@=x+%rQNgOtL`Al()L--R<*Nc+3_@jJiGddArnx^^Mz8^c^kNy z4#^SSRfDEZb6{Mi&YOCGQBU3feecHUf(J1FoY3;oB{qdwR7Qak{Ru7#PCm87nUoI9 zuj>@?@kpy)WcmR|d+vk{iOX`p03yM4C9K4PyiygOh7mZjJ7(=ANNev z*8`pW^8H*LOll3agRIDemJRO6C(>p3Kj9pu-OKMMrmbog2#z?f++uSp1`@b`CkUK? zIfHrK7tkuo;`?0=zW|4uML2_5#H30ZdhdCcSy)piA|%g`az0qbab^#@z#-)#?z1f~ z%Z16bM;r#r$|=)bVx|qd9}5R-yF?W$dCzKR$! zR8p&S5z_>pB-Jecs3BO`$LP zQhbCzM~XXuBbgn3B=U>JG`tY>tcc!PKEU|2FZrNOd~^5dlReRxp+p@rGy@hV4bVOq zKtGovnIMr_<|o93UnW6@gSf`AlrC9$*uPO}19UM5O-*F}Ia|hoUa0Aj|LnyFP^wb4 z%=vXu3VIWK$!w z09^dR;t^k2Spv7!dhOurs20T?2)8YFzouWdO!%%-Np5Xp0rA~Y&|ByA-6lb&Q%|AT zToJYz*JR(y@DHP*)cLtb$3MFSL4dRgBd?tpN`69|uosDiDIUqhp;+%A0&Bg@r<3EI$+334wL-t0A>WnZH4Hnb4VBKeDXyIKJjj@ZxtM@eSjiIMV$;Yrr%dz&{} zxt)m|4Gcl==K9EjeRa7yH+!u#jz~gHi#;TX6igKo1jTO)5JT9Fs8_wOqz>@Au(>dG>0Ed7?P#I(3_;{Y!p+G@X-as?v2#R(5sQeU>1I%-ZC+T2 zK&D^&Ko5vydnl<>th9#+Atwd6>}AzN^K+nwp3U<&-8{xkrc&&Ocrmby@x_mKL{m2e zHw2H2)Sk^LYoT3G0l5i7mOGx_l2B8zlnVb0>B_*CM_(&qx;RBdU_fNK!kw^)PO03q z77EvKQ#iGfJN4MR_bdxU4Cs)dv4NGHXoGpsS#OlAU-Elnf!Ky!0fv?F{^>OKnmAPQ zb>M=SzUG^lY)+y*^_O?eLD9TXT}ha7_r_tKce); zTG{d>FO_Nus{^yHYCM!+ZbcwrR`!j$jhl1eGt>g8Fr0dDw|R`#_S5U=y4FKIBh ze~?Za0(XZ{*{lT&55{q?$5sGu-vg{LpaRDv#sGOV;te^rd-yFIta%KM2o^g@IQ$3n z3}uJC&TgIZvKjKjC2_1nwV5?S+%0P|h%Ycv8p6Tug5TkaaxmlH-k^NBD9@(CgvBGK zYa4`}fJC-Ri;SHN0IggR>|@1nb@=}2=yPtiuYZd8ugzr_w2nE+1Pcpd&esDHsGSzm zcswNT?7t}+dzdDr^G*cGU>{3Mh>uyEom64PA9&rMc&JPqqs!2$$MmCnK zA{K?2+X#yFhvEc{Btp#my-1ods!5E%Q%4#1lCBn$8uQYll9&7ZDV}m zu;Ksr!Q28g5m*{;r1S5@1j>ugt)-Q*zH>P<^4or8eCzIzLrdo%7KxT&Jh;`Jx!gmE z5?eI<>cJYF0)eQ?vyHLaTANBh=@6%+*w@tud8)$6qwE$xNKIv;EqFX!pk6hMyc|nX z)8wNJtAQ!?nK@3!tX?$F&?GcDy3h4?=p-us6H3B+BPLI?Cq~+?%cOZa-BML7s?_LT zl@9F*KgqC^_~862h0wnY;ny}vl*$hY+I>9)uh4Ye=+YA^Jkbd@@LbnH>T{uQlZ zL4F?EH(3TPhV9_abLhK&CxIk<=i2*uPedYP<2zj9@h1_3D5}1vuJc6piu}Ctj}~4# zma-D)I-JvgL*|qv+UA4b+@TSIW)h@-XFGqo3_0y11##Ag$wOo{lVJmu9p;tmi>1)^MO< z&_bP|O%H%`lXIELu13;435OMW5uoDN@row$ERqQWvXo-F&xKx0GS}8?5>m+sS<+{g zX+toNv%q&0f`>BdRyvnrNaOhXczOFw{|3S-h+62F^ww#Wf^+is{Fj z(PHGY@tTGjvo~aqfn{`5>5C#GhMGEu@K$$kuXpzex~_}6&Ulx2-pX0a_pycSNoOb6 zE0~i66EAI9NC_g4NDXZeA3=vO>uO3=ndjM>NV>Ql0TzAp)H6cXtdS0wNp>H7w1+8M z*I7sJpxZc+fDr_=984==wsQ|7VIvt{VmYwm$JXMt{)av4mX`+QuRj`g!McHF?!pHe zOgU+E9mPMte4Le`v&1}?{cjKfraY~8B1AG33@1}AX9JuWV?#n7+`3&f?#<-~1gQOP zv91705w3z z6{05nR7nM?_~~QFzsB#qaw*sz>fSV&^t0nTJA{rR+aYCdhNIR#o*#||uIvmXUPAI# z0Zt)KiC@QoTwbP>@)2!y{YG1M)|@MvDkZ5I_j8+R~P&zLJ%#%90ZD zniI6AzH@P+KSssG={F(bV{7De^u0RQo1NB$=3%F=aKH}}*P_T#9cG3jDwo481@pu_>OXRdEfo?{P6gqFWrYjk&8@!rSrT{xMc}^WVkG zDusHyt`NsdwT8udZ(N44EIf>03<_Si30Y$jl#4TVf}VW06i^d9io`Q}spdh6P$1>fFLPE9S)jX>cK()I@ zz~HNQZ`b6d2)aaN$)aC;F$0#mlpxf})Q(CEcD-i-F0ubb0l50g-lF%^T%Hya=aKB) zdRET={@T20Gc&|=jF`Sc33%3jE8S&;JoV}9vJ}rvoFJ{=-V~1PXWw8%dW+(*+fQEZ z{NR+iJI03u7k{zu=lBIsV`QYuI}YMD&3mpvY{4)bL9;9`{w?H{L?V{6&08)2c$Z+ek zt*^^>o-=Ft$IGvwe&N)h=plMRDYJxi;-vM7HqfY4aN;m&6~o59h&qc7x?H0oq+0tO zbk9R_%i80jF-p~z4?vgAGcz z*Cd+L0C+0);kN|bjvYJ=$DKPe2_;<1s#g^wM%&`qn68O&jc*JRVuj%zZzW^gC-|~;e!0M+Cmfw?nu^+34fKw(rhhCA{88u z-T^1bXSITu_E8g;9iVdMW$s>RO+mw@J|O0aQxRACUA16wqxq(! z{3@+flgP2R0S6Ma@-iUP3C2Qwyd&N2xz8B#J5X{gG2|aNsGhYxOSd*TAcBp%>^7$Ni!cR)$i4_iXf!OMcfnTBk#~Id z?}7PL!w=!nMRzez@H_}S-<}48pqdltYdw#;3Ef@^o@nd@&@GyMV1-}`&Zn^-pgLq7 z`%_s7mkFeubxno1p(IGeH(CdQ726>fQ7)Mu%S(sy{g>yR{g3jVZU~+@+9a-EW zum3_6_2@hz3wWe9X7S<%+}Kke!%BwlR8+N5MEgzjqYvI|;yol}JhzM11#y{9Ij}p3 zj`SKad}n&^?To_*b`E0(o0D0N-Caw+`1K3Oyuk2;O>?9KkwV|jH<|OnK&U4=fM^y_ zZ+!fd*I@U6_zf--I+>}F{D0BwO`IsVId)-&q74k7yz zI}REs`CgwB$vWjPM#$Qtjt7B*Ze-OTDrdQ`>WE@Ye8aJ z5|Zb?Au$h;>>Ky}E4cs#93I}X)>LTo>eyO&Z;$ccj(}L|B2~n`-Sx}5>EiVCPx4;y zp3?p6#SYS;BEM)^iIjF`4nQtfh7GQ32lMDqJy2Hi+)VT95PrSuMXDU6uwK zd(47`fSMclDEuT4{D#cd(nl4bUH=y-RHC48(TkD&hHZj8-;4g9(TB~tQ=7zCpiRI- zCc0uZD^BxtXr8avJu`uVY~j;A2%CJio7H=}APk>{AIn^mCp(<{E;>CqXUcaEx8Y~% zqI@#K98*Kxp}gD2$M7H4QQ5b{D1ob;tVUD!zkxRKoGHWU{ca(b;` zDW&+S1%|Tn%rIYZOE$}*1j@J5eck>Ue(E|~`hLhD0bKL3&~eT_x}JRgo*_J4uQ{G; z087YG|4L6B(@%PMbsF$n9*C4tabT}!LNBF~K%GRS0Z)WlLFy3=WfYJB=g;pkC&mVo=!aE1KGk4 zj~;z5J53y1Qf>iPq7 zg#?F0sgJ~q!H52vS2rWSA*?pqD}|(3s8e12=v+?m^|v{-M}ozBu<1RD!k%OR%Gt?~ zr}{QfE&*GbGiyh6+eA2aJ%1$puH#FPpu6!fZ&@PR^6R7Ry`9HE6rdqUgUW9ZF-${d zc7$^+zT~;^jEi_XAK-`!ig;+~I}5R8k<0qpf;JkWJR}#x+2z)#wshrk(y=sd-#FAj z1cZJ)o?%82#4x3fB&41iv0EBAb%q>eNP$y((28%)S5z$>+)zkm!pCc%0tvi%L$2gF zFLNuB+n&QGC?TiD4*$d|rTPCmn~IZq)ud3(bnsCM?>m%TvpxRZp{9hs-m7MD`>l~5 z6Ya5FCgdniXN;YP1OU6%H#xEW_3TsX&i14yjPD5j^%Ywx0jZLVED^>Z$VRuS@wtZh z0PZJ0zJID;qEGb24dt?nax)jiWh_a!Fy(kJi<_34={xm|D>n@h?#%GVMv*FdR;77L zI$3$tf1`dbGqlzXzLI(=l744iP7_m&Oqg+PPmQ-fGWeajIwE-#(nj5@IG_e#Ix8`- z#h9>*M=SJ4NR!5ibkiK-c=g#%WkKU#tYSTWd&xcg>`&0E=QJfn=u~bdj#4;>x|s=V z0jWIB$SL;=hdTL|wQ83H*FlvJasmR#wr{yR1_5g!BnrmdSjw38bP()u?QQ4G?%v|s zAeo#Mj;HPdv{5pp<$m*5VVE}lqV`q_Vf4y|`E41D({Y{ypjMNwOC`>FkY0cd>hota zr!EEa!=w3P1Mvi|JA&RcX&~|Z-E$-$8Mx&QIqFuQq-%l)pP0Y$k`u%#D2nEzP!CZ^ zZ;S-kST;|5>Zsv2HIYt7avxX|9q7*+qt4&?a2-;nGMcfG z7`O-kzSvaW>^Bdqv4R{F=7jzmWJDf%VdK2fVzy#<^lK4Bt`<_0QH)$L7J_$9$c$M` zQY%r`Pq7K=y4c(J{BS%Q(u|onya`3P^u<+g@kQ6F9YVTcWCDXv>a>b^iZcrxAbJB5 zVcn}HH-J#BBKEB{6C5VLmOq2%wAGQl3$U$NIfVXxJ|Hn30l{3-dRVLN%o9y^Mu-N= zmO}5McMAq~jsIgSUi6mN@8-;(v=jZL z9X2ka@+6?wq_@+t?v(>b2`XhwM?3O0-M0!`rGd96TeVTuHJO8_wLs|Tj5Szb$6Qxm z*sqBBZ(xZ&C3NJFaK+_-q#IW%-sZ?7A=NTMh87;wm~kl}Ap=VA;iu@t zKxZ1LtG%4G^?5sZ(I7h{bRBoA#`6)M&p}QDO%v%EN_dk@$Ki$gPU~qV35U<4D=wwj zmL+=dOJ3xjcmx}UC*|eKKgQ~obi}y;UR)+9cC~~RtfDdz0OeYwa9nP zNxuAZTh>Aagm=BoGJDojFd*|!xg7j$L%anrOI+*mYlx)%w7I>-noIvHjz&$%yJuJ_ zSfpgV{FCEx_;Gz(Up!-Yr#tITBMF0;k61d5gr=C;1(1`t=$^3RQdTosO17w=b;B4Q z0x)(7;}G}0*R+9?>$~z9N|>N!b#XIJjIajpT@pu}E%m#jcNn5{^KFiO*-%2zMpnH# zjLUSCFV>;7JfRT9<&t!IGX!M!R1r@MCQw*p8F9JC7S%*k4oH%CCrvoUFNHIedMkv* zXMOAE0`v&Y@5I<*#|<&dkH$`xurznHgzpe$hK*xOUs!fU3f-V1M(WC?w{wMKo*E+( zJr@0n6R(4V@2^>GDX5eEQGY}OE9j95GYu>@`dl~LrprFBLPylbP;@le zY->0wwiaRz0Rb1DRA~KH@E1G#(lFJT&1dH46e|?i50uxWzBX~*RF5#g^p3~?0zm!0 z)|2|&o)X0$**+lsOXmhluyqMpM#;fYXlz?0cf(-D){5vE^970KrNdH~844gNwYKNz z|H_Qj4J6heUJ#_bJ$qPzm_~;R~((0SgdB*b1Cpz=Z2PXE`qXFD2HW=PGm(4)IgmNjv%=PU;i}h`LBOTDCED^-Sb83(8zVyDJxN*b**AH5$V}}|Gt7&A3m-Rcvy@<=l9Tq z!_bQJyxxeX*t)A7=xwGMZ!&qo3k3~tN0|f3gI#G{$zF+ zrBl+wX9~N{{#ufP;DWp4)pnkdW~8z1>_*%r2n25pKtW;E*>ZLfP$m zIuFX1SxlIU*wAW(J^nIAB~M*etPA@At)hiIGe-uua;9}2K}!*C*wg8dzq8$2<_yN< zu`Ngd#ovBFzKLr0I#cTMs%+UTh+G(WLZjWw+9H7$J`qhBM-f@n!X|X4= z@DebETtrYXUnr`3+Z2~s-D#?#J(ukTH5Iw9q`EasMSlTtuq>{fajhGs>Pa9S79*w3%ak;Yh1#MUoJ*OvscT*(uZBHR1YPKT$5J08hG_O0vG zu&duJ^04ntEAmLv4RSuF1#aTrA};kU#jBkDq`e5m9(EcVUAK^ik23(y<4w>#nG{dY zu)l7>Y`jJhaJrV7W3iYSbn!zizVkb`S!gD59L2gVI{Wbx8n!31fb1+gmEKI4*pFy} zg_bRy<{-TdBT?M;zC!Ugl9^+;r1qBu5L4bmN~c_W~!c&TnU zHV6LQ7I3$1xA*lY>HTyUZ3RTIt3%Og%jHmgqE&)bkZ*hU!4wruHgL(L0CyfdFvDmq z)W(qY+K70IwM-F+sTh3p&qWn8G`kf@q(11a7Qok%Klo&bAHbVJ1;c~~@rTh&kzzFO zYm&sF9;e6a8vK|`wUc)@4Vf1quR+;+!v7lWynjdMlkC()W#HVtk}qpI?h#f;;&=AvjvH{s{+# z7cp3$b+a505oyK*vHvN?inU7FLq?OLM|UauI(HJy^%APFOCmi_faGE=rer|E)<*)~ zha_asJ0Pt7XxK@pW(C%8qx0J@D5~)@RA>ACv>{0yZDo^hNayGqj6}dCdAKVKE|-rh z!~&O86Ot$KtXDsD1E4u2m6lIz)kxtbBE+!+_|ovm+4h=p0bN#3+?bJYk>s(M@8NHa#fL{pFv+E-M_=Mt~14`Gfa1Zl zuQYSRgis>uI*=MYbR6*FgMO=XfU}xVmTg^ZG1hciMy{Qt^hFS zIbKNwOBP39&eCO4!}?hnAjX_N)H*e=JD$==%`OH(L;y2Hi@Nkg2PxQuWQ)s~D1b#KZzcr>K;%g?!paaq>@s~;;N^zo+q({Qa87edtxFnp(p-<(a3`>8`G<; zx94`vBU*Q)fmi9JFv8i?(M7d0%(v(yMEvm=Jfnz_sxrRY!BviN$;bkG)wr)u!`>5r@ifJ4ewnS69uBM$LksOip)?VN+*F9daVA6%Z+sC-ra|fTP%83D~WT5`;@4VB>yGkjuk<2KUvNx(!kxSNc`|yy>hW?^-2%j&46uf}+ zfbbgYbow!^5oT-nNQ zMcC6J6DA=c0Z}%E-igqeGb z`2R)L?4AZB#6Ew$7cxd)LQ%cng8#5)WmzN)nRo&jvsI3)GaCeo)(@@G@ZPiFIQ*$y z_#vguBwE;)D+|gMUuZ*Q0k^?7gEGbW*_iM1!fcI3Ek{`wZ9Tmd&`8p;gsaj$kCjps zWimgYC}grjSR{Sh1%_5N#PO;SlkJKaMmQ&-#hkXDVuA-q@m! z)7(SgE)Jfn71`Z`e`yM)xJ?iNi)kPvAqU0z1L#uLBgJ(3sMxN39I;zrQh^0=L(f93 zouz3RLz5UO+nNAxXnjN*zCe}Pk_Y=4Qtt{)7ej7p08SQT{6Q@)4=>@ULkde3lrmUV z9Al*Fy81p9TvOBz?hUmC!OZ+q1quLVPOwNN5skRcM8iY2ukK70Vi@(LOJw3-G6X*i zU&u)6w7>|C@{OIsM}}!c&jx|yR7wza8ZaGWZ8Mr4F+!hMa9bia8nIIIR)h2}Q$I2I z+}SCBbH|*iT~P!&U{yj_*e8F{biSPo_<`e*PgT4u1F-g9-p&>u_|{ictPEP&xH0h= zch$&uAbA11Y^K_qy>+SKnBF;tkNlGChu%u~7X-_a$B4HovDSn=1;|SHf$p+vVS9l} zyrcy+$)p|Uo>LUa$qg3Yrd-#?IVKruv``SNp4RuWSW_97JU}LL)PTFKKRwv&@o~d= z@afU`XUv@V+=dka6zoVP9+B#sDE_=Q?FvATAp6|g1U5~zK9p?XP9DB;2f@0)Wonb^ zcacKG_lOYFi9HXkC=q)gD#P5s%$+XX49(gV2hJf%7E1-&rEwnm?GP4!g-JdC1{aC; zK~W9t$ELy-<%emHh6Y*`I5K{DGB@7wQW!B4P2ERV>B2TXivDZW%TC$I7kI)v5^lQs zTq8iYnda@gkoUokfe}c=GtdvWg!1eGC6SR@81eo5yuE8WgKxEofziSUawbQ8Hfjn>Z=!bOa#mlFTfq_V!=F zQ?iq=6)1FzfA>>aM$FDcwul0th>YI8S2$bhmGJn}zjg-=B=ZYT7dI8;jkgzZwWpw( zK+9?>$^ibMrooPZT}wT_?ZKRH$BCMJxHAO~$7}d)As7kC=RDw6Y+#*(RY`D&)^8?a!;1$k(4I7TQhFCcmMB z2bW`|IDfQ9RL<30xX-8&#~RdFh*IBo0Tr2!b0(;E6a#66q5NH>2+)_Sy0uy@b#Q0x zD{-kP-{Q)~958BtquttYs6w@KS;!kG3SR!Dz;KWOAl_HwAOG-k{VQVznP0>41w zlpV9KQ62%fQe^YcQw;x(3%ZjD~ zk_g9UU$sobsFiqLAM7c02lx8)%7N6r#%x1rmO=Uyi60MNUE`aM0M9#A_I&HF%m&Cy zt^yAQNqr;GC9&vr4liJJ6XB7RNuW~GHV++6s0dH=>a~P_0FLl!{|zxAD4|7PF+vHH zNB6}o0()Z0OS6joH>WUdbSTVubHP&N=k_v0V`^Wrp@B9vaJo>*$AKc%fu-}(rXoNQ zwYKjBPJ!*6C7kR{7W0dyS)&pJ{iVz;79j}rWOgGFfhQDFV;#TFHqv*;5?hp}SgxB= z=}SY{EtzEp5VoI<+W`#4{V(QOx!DHjat~L&gAr8R&&)Ge*<^9o2)RX9J0Q7xvKT2)QAaXA{rw(LmZOQxS8>^c>04h7Jr+T*dz4e`^Oomw*0Jz7m1 zeXeiH?p9YOw9I*ltR2qhB{*_nlpP4W%1h13mv^~*(5EO5`b#>gpA|1@`stAQ+*Bd9dhIiwDQ9jAT`Q zSM;2vJRL~b+`ViX?YUCeIO$<2FQi~b2uV-ar`vA`9FCWk3R-hVts~?eQa&tm9i>>X z=!^51FQhHO@MEi{y9&cYthC)@9xDkegEoy28i}E7i#qjfimhkELvsbz&cj%TNT!gpwS)0dYhcg3 zex~v&BcLY2s--T;S{cylDe$N1nfF1(9kgejuU(B>Hb;EA86AHc1MY{)*tX(Tnn~JM z7?8T0a^nIJj;a_e_cdKm8FM~W#BY{ibg#tEORGiP7YS81p!4Nio5)gu!F@vi6gqR{V zR@JD^3OGO8ElZupUpV6CxOfXd9|8{XchYeXgC-JZc{A4xtg90iVZ=O@0qZ-SHfRO! zR6h34%1XuSjrwa&=NPrb>%!@v+_ZNxMnatmfACMiVzkv3CQk~*J#JcjZ|)hipk?hO z>Ibx)NxoQm$T`7GbSPnwn5|Zhb2+qG@(qvdq$tf})peYm1z7Eso$*=XI(RJYcm~nx z)rJ=wR;$|V2s1$iIit{H2q1&XHCC}FO#9E2K7XJF#<-%RM#rquW6C$rWMR9k zec4hp=NO{9ceLxy`ED%*Dyam4aRNgaWK&zbmzLm&w`}^d>c;H@()hOU z?S8}bF5jW|&Ku*BcH6}##GlEH7~{|VB&1A=BvxOtv>;6!*E8M+y8byfO1ANqgpDj1 zEKSzLf7iFXv`S`+>HQLuHn@b!BXtG5EE4)&Qxd?F@$2sT$UGb*D*Q1lzhd%RqL4>` z<|kQ7DHv-7QV#7F24HsnL|1cg+T|{!%Nx94#zlCD@dreYZhrz7ySD>QVt_d#J+}^v)cfOI45Sl6AhqXGVmKAlnbAj#QzI zHp?CVynSgr2M-5l(Ld6j@j3G@aiIVmE90uN_$NEXi!o(d)vblT718b-(jUVuiGs_s z6(S}M`SIAS%U#qlNMtWvD5svwdWS?e=iqXobS8=jw9XaE|9V)Vn6lYA%KPM71KHOe z(e<42i5yWSs^#!mp}1wz8>m>fm<^p~@r5T~l#T5si`FUnf7acs5+6QUrZ`-JPY^3^ zgwSqfD%bsE_rFd|6jCz23qfnQd<6UBi`QrDISoz1Qq4n>bgo9PhA^IwfeEDj5$e$Scn%55TFH!S1Q2) z&-9w0$&Aw=%>%E?hV}_}f4{TOI*50uXa#j?HbW%NMyP?jPT*Q*r|dF-f)jo3ol^#9 z12)xbY1A#D`mo0uD~M{nKK!xo>vnm`;;Gf*$t{=+KPL>Bi;nJ4OAUPCOWs3JSBIi=KFty7 zyL(y}#DDC(6uPV1uA}su=J_}q4=~WEwg4mC0syT=nYxjo1NgKoqw~Zre1yIimy6A* zU}t2-{P}5arbk4*8NwVFdu1kB;qVsjVkSvi@|IBl9!}a|B&28qlGNMfD>$krMXuqXPYI&Qi`$)ET&uenF}rObI!{k-tPQi|`v6mc zvUv}Mp;hO@f1`Fs>}%zz4W2UjCX_M*33$(n%WU#hGtymqHzJ5@UzO|;-Gy&Fp3|2Z zvf8p>`Us{m7oz$3R5l`Tkk3*8v{b3XalzBO&uhy({H>Q!{-QitEt%S>-?EX2x z$hp|6UDI9$CWtg+@)HF0vk39!_jADIlxvt3+C|n~qXl;@U0)Sq86dX)jVa#k{9U7k zl@?G9g~8~F>l9-tkK{exJXjV&T&B8l*{E-btyK)}%ES`87_=GjiMBx)aR;sfZy1}p zDfQH}td5i=9g(JDAb1!nLNe)gaq;~m6LZi%$J6AWRQOx zCQz>avS%^xe$la^R<^{+e$%ZPyTcQ^O<|G{u@+c2{KPB?83?j-cm}%`vqA92SQZmG z9Q)B$1vq&)E?}dEz>IX1k}d1pJ@DJ`Ix!u(C;v@RqnZddop6w^|3(Uev#>#7Tt5u@ z9bSq?u5Mm^T+2bLXB>zih&MiVwI6c6P!8LKj^*nnQuKiLyXvt_GU+WSL`j3Vp;nAm zmMa8l-~RIKTIfJC3u?f|G>$A^C*@o;6`CMHu!003BZ0VBTf_V%7FJBfOX;j~N#LDA z?DVEX9dQnw6t9{U_a!)s@Ye5Go9%$ssLr|WwuDsAZ3H5cGfCk{5*-J~{aDlPv4{j^?QY)nc&dfa4$1L_ZHthAf>mU^o|3j~W6g^IT%2@95<%QE-=V?B zLnTF+Q)tPb1D5ux7$fW_P#s%}<64D93&d?<@;c(Y|0+AZ&y|xC?ev#rpy!BS)nv!o zL}up2fA!QLcSrst%xc7Vpqj@bJkg>h;gt=^{$-MQ2vS0Bn=5bG=xIzrdLc{?1Mt3( zq1h=B&Eo|)pAZU4pd|X6W23KQ7WhiQre^tZC#ObKn84E+CH!QeEQiC|9Ix!?_z+UW zfm^}lR!^T=EcVey@^PU?I}T9qm{Jp1wSDdogk#2oP8>p;CwDbr%fPuy9k^$<(B@|s zO2iJyJmbZpM?9C|xkiv_f3#*pvQg~TMs-mNWZTJW7HmIlA1qyz+J1=M(_61ujsyda z{_pCX=o%ZKm5}JnH-CBaTm5)PXN48$0QVf^fcmrLst4BacJCqa+uQ+fRpvASy|wGOo!YgvZ3?^_~_+ zOpO|*+<|CLrc-gYV|vPK9O`HUB4m4OMyKPbw}@hV%z;TQWXR%`9_8nYCX)?~)z{$^ zbQhu?J&B4eDFXgSpdCr%eJbIxQ{`iqS5TA|Dq2tMD0KQ6K zEs+`7*V;*2stwc?zx01k>3@gQVW~n@jT8%)%q`yLIF?Yj+*j|~mHm4;R&-&aB-`&P z#7${h((-Su7otV2EJ#m0DX~MM1_-D4MQ<02X)CqZ?UXpDV-btSA~M$~Rzg(QZv#JB zB=h?*iks2F`124ubi8)&KJAx<{7;xu-61!ASe;53r#;F;_lhC1l_mII`hW?PIpSGx zvRCCiDJfWYj%W!c*3fR;X8RwDG2O+=B1>ut`Oi7cXtP{2$*INwm&hd@mxt!qQH(oZ ztr|@nZF_`?2waUa41<8pC|t(~R5K!rLr!P(lLHJ*X@0dt64hpkXElJMo#xhr2ySVlJ1G8+rcS{ALg|UcPM&B<{qo zUq8jCotbH~&0Opv*WMuq%niN8CuyjNIO2V;XoyhAVYSvV8)9l834mUZL-L3pb9Ccu z7sKl%Z&vrofP#qoEI`lh#5h_J0sYWZ$cxoPj6M{6IX<_Y+)>bx!0o}AZK7k0{=JUt z9-L1l+w-f#AE^$Qckp$`)o07}{7FxHQWW9*Z+o^(u|W-TuKSkHAnKVhOXaKW%*t{3 zl!f3=14uP$yPATbgeiKkFc2QS(ZfLB5CbF@YDSX? zS^wd$qhny$BwooXEY{iqzTbw9;8BevSX+Oxif)>|$BlTsOz7#p_Z`s*1jnVi5K4^c zEt^Z=#4!jF+V+8g!!*`ZKK4D$n7Sc503Wl+P zV^G+K57mC+jI#oSAFV_emAe>jF&%P_Ot+kduagaLD3eDGhfj1{ zMu!mnn`a^FC#FKd|9$st61`?A$vUHKxYo?$NX?t;uQ&x zYxqy+!Oe-4bN7DMAdC;bafh3EctX&{DS4ntkrNM7u8RL=&pgv*VHwqhTJekmrHndt z=#}Cu0H7oKWy$)rNm66&C9meNF$&qH?Br7h5MZIl2-C;m1xdzEPWt~?=i8gv5HgPKnIEg6^0 zU)$j1)eTugMYc#7RLaVjxLM?3(z*{J4RbMb9l z$>H}!vf-ugzH{>N*XW`e%pt`j5Q0f@a_@v!koreB7lB4pmAlz`{I6E>XzZuCnaI(@ zl%MYAhj=lAHcufm{8s$&vx_I$o*5NDV^vP!kS*Mi2?9<1#Iq}TgxPDZE1iYNF^?z` zg?foZoIi}Vf)WQtgc~D`zbD%D6$_P{`fC#6PWIAsw=qk=@*)a34Obr+n~LYN1nY}q zf06LynEuc7&O(qJshex+RuD7U)_PjMHBw)nGscl68!hrG@MPg_JYEUbvZQq$up9ZY zhn3NbNo*25I&55wHja(kFzM>EuPXw7 zj6?W+=@al0c@xCgFDKS|M7XqLb6AYLcbQ2Swro!r@5c`bq>XH5o^_($`9*Ca1%l zhZfn7Yn}PR?#7NT13&5STP- zjwxdfIe#gC6H4HA76I;wtv*UqP$SkQ7+KUIc?-K@S(u6}HDvrKmCDTi@yV2P6zpqY zG)(58+&nU@NAOlbHZeMTHIvla5fX^O>TX|b>=%^xGR^1B5F@?=UVjVnA~D*Cvei|R z0Ht4G!cl>-R@I~19%4)bZdEuv?1gZ27Dmo~N2Xxb+gYTd8qzZ|WW#Tbp!*IWLu1cArBPioq+Ta&HI)|A+Al`L zhCk7A48_nC^Y{syN!=IcBPjoXQfinB%@P%khWDeD2w9Fc1}y zVPsNQ(DjjZC_+|va15K$Na3p~uj=QaTS<(jtCi-xtG-X+E)q^Pn~8;g>+#C6ZVW+gXNijv>)JQ;1j!Y?c?_x3x z>WIqD>!a{tH53peh;|uYa6N*ojT9!u8gPs>S3F8Umvv<<{47Q?bRwZS5;MtfL>IMx zwYU;C{AiA$zLQ>*YmX`S5ltUjv{1Pm)A(+iU%w2v$Ps*_OG#I`RSUH7LKmgKDUQ4e zHYiMf4DM=qq)mc>La7y`q#Kgr`N}B+fUQp?-(DuQ_9b!8Bs3lg<1?VQ+1QsTT4&Mr zAgx!a&p3Am-bg$`w2F&dw`uEbmYtk8jPF78X_}DUpWax@3tP)H5H?#&=~lblq(J9G z5Xmx?!z2<={Z;+63b0#uXbCbSqedWv#l7r##xYKDfDp^U&NbG+{4&bptWKB{lx9nv z@*e}Ku6`E^xjTVX5)UBqfEk>GMr;+4x~J~`;*D0u{+-hn{rdf$3r_TxSvs?EIEWGW z75I&vNBa<;BOG-%Hi=?OQY3|RG#&mjHzR)Vh(B&fe>jN0bJVK)cX{=8cSV-UBLq@l zf~TB8A~~|%G8+LuMt-`aRz*;mAB3aZq27OSM)=`F6j@Oe_NZ2opz98MTQ@4=tmAUn&np(rcA_^C39lmPpw+2HZXMr(`0c0|0`N$V3 zJ~*_a&u=|B7THMTem$pgXx9jcboY#Td)Rk36C|pcXsQ^L=p?( zpjk8qo_%@bZS1zQBFwlZU~;@@6*G+!_#++q{o)o{c(0A|pc?6h*>Q2!^#yqe@=-L- zx#!ujLb)LwcM!HL-zqEY*c5FR9+vU#X~5j}wG-N@XBb_vfDV`BT2yvCuY{x}zH#MJX;+c{Q4< zM{+P~XN9eh0z!>wW(~V#v+=>z>077tPqLz4TCB&VhaV$%$Y9i(`+#EW#ipD$M8M!c zfHPJ!VR~o$(M!g5JKTadyYfq{mBzdRXM6wswS@WP9%?<-*R-T5HwRMujCVsjzpp@` z`bsk!1QVLU5PEjaaji;&jZ8lKeue8aQFTdgJ*tWd_`NOihSZZPq7#dk4cPu>XZH}; zOtFf6f1%(Y9{1~5H?c)SKo==AwvAIum#3jL+y`6PwTh-+Z^XO@KLGC=XF<2J&K8q` z-&X3&@ZAf4JqT#vF+2toIF;#hip;{FgAZ6t#aB^>XxxZ7S4oW|2NhjaA-ij&W9oU1 z{u1%PDtyV9XtK_}m}hhYH2G6&V@rpYPFn;@^U;I4q9Msm3NL)c8+^-HlZ|cI+r+hM zc4C578Yc*@C-Oj z?Q%OF{DHjH?eO4Qzo@^s2AZz9(VIB#yNUuZ9MoI@C~hQVF}jhE4ZXaS0@0<~@XVr~ z@eg8Sj6}8mDq0Sf_ODoLr9~`0uInM{I^s${A_ChGa}9Vi`MeI`(cf*BjwX7IU}+7{ zPjBQ*(S4Fj;s51wJB>pFEjd?>xSW56sKmyL7^C`U3GRwECa>WXKOrwfa(I3iu_Y>^>T5|7uby13<^9-bgFP4o>b0LIfDoBmRwULO zriB)=(PvW$1YeV8wh&7W`!@oKzyFrW?!R zWB|P?6xDB}P6_k6sL#_vN==O}fw9}oqKtBw2Oj!nSE86Eo>)GBCd}R3QAipY8x@Nc zzU=}r$9W+y2n*b6xbs~ro!A=d?iaj%)N9;j8@=Ma{j>Kh3i|uOp!_sB2ub;|uV!p_ zuYdJg-bB@lk(Rh4-Ea|ths`?+w-q19PBychDx&X1-Cyxi^4 z3McAK9kjPVWrc?>+j1?(1`K%-XTA1keH-EPALeKno7N&L!}UA$K4@W#r9{!Kc*gtBn6@wjOi$iS%V! zPWM-Etx{|t5s^_GYe4@#qsvl{$36I2fcZk1nm?9H83O&AC4I$nx(TH$a6MmvJWQJ8 z*a*;U@dURabOmd4x7C1$1?WiRDr2n229b=gG6s#PU4uf!g86aL!_RvTnH~Y!Hk|(q zc2&S99GKro(w2X%_(C$2mkH}=o$MxgN!%9GD@Ts5(i(QQgQ`UA$SA+*KCq~2AhZ9s z9I$T=;bNmBs#sd5pOb%nL=p)_FJ?-|Z*9Zh8YPC5baT^{{d;-QBeq9X^vLtpiXZUD z5)br>04|dc+2`z!aizKwKx_)&=K~?^!&kE2>0@78HNUV}C+KHgEAUS>BEd9xS~!HF zm)!W%yZap;l(?8ZMc_GAz0lIEt49zOSPey&wQVxL+6ZIIKiCi4D)K_~BKPKC;q7*P zC`!mt0#;DyCerftPtN!@-$0Xf1;cAGOPdjto@07gPSX+o#_gg&@C*zOcXGKJ&Sn}bat2#e+%^sWjMu=1T zruZNSP#}B(kE`^-98CdST{fZryCtk!dRK-itY>PxEX~sLKd1sKE;zuT`mlkM;TcsEeC%RCtLL)G};j-^w4GKT( zRpe@pc@;5>U~x8{$CD45T0tU#f^~NVh*EdcnpzYj{UC#eMHw(nl$tQzqn~b-GBNRx zZM*7{=b<`B>kh-Xzhl{@;&6kKFLUTJ5WWSf<=$=BMe+i`fU3`$NKmIjaulW=0iOPi zY?^``27M{KxG@>r+11tlMwF=_bd;abO@)sL^IrXfDL+CB?Bt9Y&&G zC)W&X`PTh%R=fB9K8Q`|p()#B0$70q4pEyh653C%)yd=HR%|Zyem*k@MMpJFX~{VG zF4?1NpQJ-t8Tb71^q~qJvfV<%hU{-^j?`&ES3371Eb-dXgB#uc-0o@H6?ulVr70Nh zP%E*sab+@xT8-hX_`&#z+iz=;VBwkKF;9_Ch28|fEvqW^GON4wh=3+F}I$AolRe|>B@)l z7d*DTX*;6PF03}9ZZ@Oc^T$#ch(jCI6uIFnRb&*>OcCF#Os(jnS~)-8%*O>S?Y(>(l(lj@!g_eRV=|TCE}gxj@m>yB42*iN`S!U@6Cd-nkB0 z)}bRXjCq5$7`Of~C30T162A?DF|C=N?cWCsah#^5h*g|3iSZwKj?42%5p4uHSCP~P zZRPt8vKe#uft@Yon#~_ox=f2>p2;>qzI2Pawv63Sg&d1YhUZng%ZmS~LmVj`DV}w3 zI`CePg84!($CWsnW{*CO?nW0R%}!h<+DIjU|B{ zTko=0^vi$TCp=~AN}dxKP6doVHt%-2FJ)H|bcPlBYqdUMTBMo(hy{SH+p!kKMjan> zj|d~>+DDNRL#g^0BOsT&4v?rQg|RO73CjTipMVF=fGj#Sw$yT z4qhC@GaglqlRv36j;R#_(coy0R<}Ah=EvEEvHHg5*Yiz3VpJtY3mq<4D_qOgLnx$% zn+%FrYOpugR=2HFyrUB|X~M_vt1K&V_Y`c6E?7g;bZgOap&1q;h7gr`X!$r9s$;Y@ z8{M4tk$7^&Ry{!e$LBFCwJS@;jvH*!Y&D;fR2214Z?H+Y=XU;!x+LDn`L)gmow@`K zzUfI6K{o!C1Fn;Z&Af+8>miR%EPww%&;peOHQn>A##H!Mv^0ky9)u z|793;0J3Yj!wH9k=Q^ygE+7h3u<@+rk;kL>t_!7nMuY)K+OFFp?ZxY%rA z>EV)HgfI^kSxyY0F+#apFK7liR#qx!-1^|nBYBQb>#p>UeR$}qW~i|UKe`yx4FWg0 zs|lkM!M>61yQbqRA^J+z@`N9V$hccX$uzH9D6mT7?O|$I-i1ad5;PCj9hbg+;_t(@ z(oGuY$jKOlu)JaUn5VLMcO?ug(C<3fsk*SPK`RL984> zO=K>zobyG67a3xqA&D@QL~R4%-?rtVUeYuv5-1@Ar4P5bI_7;IFg>e2Eh>~gdBRZ} zb*}@IZ<@b-IUK9}$Wrnr6BG{oS+@v9Ml zH6@^4h45W6HedTq`VAQE!gOj^Q+pd`B~>DMV-&-Qb!N{_S4C(03^>G2@<_vKFlsva z6ZNnOEgc)Oq~q(R`{x%>;Y0;0y57wmwp2XKZX{CusLUsXBsY<9rD`vzQlz3X3W4iQt#1aR9nxYU>C;A|~13XL6QGZis&qK$1HEr~WZ?)vk zdz~VWq|X)@6OCxvY+;DY)<0A@Lz(@bBbS=0FgXqOQw-r_eGo>%WrpW^$34?aNUNqt zp^d%yoeQA){ui*EHCJqa2}wBOso~&$C&UiG+qZt8$M`m7{z`pvB2!4x9ey7w&fLiz z+P6#Fe%n}<1%OOV_gP8%0XT`m3w~#aclI&+R+b8LK|ZcE|D|TkK)*o#sglMym3LTcEYt$=E>BT1r@D=iXD;LQeZYL~PNtN`> zA>v^zW$S-_OFHqh9>!;E>Rkd32_IFHGlY4!v!^Ox|8-hbgcjH?K?981c&Y{}?-K$O z+zo`~4N(Y7%uL59vnHxu6!-(xJM{WUBkB0RDl`gW%i@Lw9{f*70PWzm;Hil`kHocq z^R3lcu9u&T%cmT7-Y$JreC%;p(~kd--Gk9x+DVZU!vkj9Jzjpt*br@ML7;P$X+r1Y z(=_7h0%DFwosFn#(I`$PT12(}rfr(H#Vk(DC62(X(Ecz;!HVQ7YWjmn0UgHpN<;<= zzq%KkK>R2;-#(54dkHojn>izesKNiWk0z5(l?RFNb6#GG;iFYqpkG9l3qA~iz;5mHH@DRMtN_H;Oq36Gl(rsNA+V&Vmuy{&MdV6uzYbn+>)TTh@I>Y$tK+IG zB^~~dC|=&F=Vj~C+O5NH5=@!LwzI0HB#{mO#cAhD)-@6Tl^F-MH35h*P0HFPQ(R{{ z`pHirGI;m-k+eua{vSAO5D6}?D6v8AKzr}2hx`sSTx;1TWBwP8itWv~3H#1n;D;0_ zi$CJX`aA&tKLEh|8>LTXq2NiFbPv!S{BbBiW@3qO%Cyl-&~9@{FuRz0%EW$D*P-c` z2E)Z+U6^oMm6H&ervB!$?-6ZdMQ%Zj$cHgc|1}^*Ehj@9$mw+0^E_GG0;nq|>A(6x7MSlaZ}6=WB*^SpDHsZ)+5^k-Y|r$L1Z?-RNkE&i^3 z7oc*?7-LWmNy8q~x|w#3uKQ?yYQ`s|XoB{-Ja$mFWyX}-5_TG7|;`nEv*JUn7q=h-27@OY*&foJGJl!)Af zV@96$O_~8wq6V|=By0QGZB_4vGZp2^p=Yce(AkBtnhMSzeV|f_*ncqb|8FgTuX>)e zv-s`1ghTjDC!`N$%=f=et21|C%fP~htXeJ<0oKz@C%a)zr@JNLew-H1!#O ziQ}NQzG>d~ipwss`P+Tvbd_m%VPClj@?d%z5vn<2HrNY+>YU|wl0PM9=JIdCM3wKH z%`aqQ*Gh^hl3GulYIJuIIr{$~7yg?MF?Ee*T-N4L%%SucfN*~gKm;Q!r+uPYjU9{{ zSyH-R#41-cWoSR7ZVfXneJGhLz_0_{heYS9bDJAh+;5`AWtf(K2*uGW;W+o1>xmby zz@J{sL2vwK30JrCC(>kRM4U32v{+Pf!8)iF!6GC)m(q#A24X-1c~>JSnq$G%N7Bp zzYzY6w;~H}?O>Ewi&Y&dO<9TkMJYG^k2^48UGW_6V(I5_2wb6TFayZcOu8<*V>rg6 zx#dD@O`fqRaPf^7dZ7u#r---jZ;uIMPL85dSVEbIWMR4>*+av?#z<7HU{qg&- zUeP>KO=PEhIQE8s;EU^ zcj}R!T@t?{)eErAjW;oG37p1QGFOoCQFQ9D9W+K*Lp93w_Mzx~w=o9&S_k=*8t8LY zu_pocL;QR56b$TMz$(cUt>qFv+6W#IM)9hpLXn043R*yPiK1@Ao#9rx-vhy#CE*#! z)`J1jCRC~r#J|#&p8VGR1Y?LE;{nuP-oI~aMlfHn7X`#sF8s=>jGoRx2whx{>3+68Q03C>#@-GX}`ryP+zVV?zPANfF>J6Z)Jj?_B z5nnMj7Lsgm2hI5z3fXXR%=bwiG<`w{gtl-)lM-f0k>t8JUJ0?P2Ax8I`;q&_wY?;W zn2brLvfAu?KtH@Io&OOT)qBmm#6}#F!sttNH22ROu&Ll4Qoe9p7J0L~@#!nh(G+o8 z?5;;2tZdFvowzR=`-8=gs}5RA3)uteZ2iDe({4CTO}~HqI6(`>9~c48Ppk>=LUj+= zKo{oCn34Ue;nE>aSPoBXyDAM{-zJ&+=nqFLYT{u*8nuAZYjlDwQza-cqu)=oN;s4@ z7M8D!htckYE1&#|EkTKZzTEE^I=!F*dT93r7t0d0p_%Q+EmOv0_8zsE{vn9sABWbj#tVNSez$ z7&PHv^Y1==W(l|Gj?x46NYGaD8nwG1pq89gAy0CCicl03xvoBKgBBl{>Tju)ZJrC< z;=vMAqQt_k7l5_}f`&m}+GIA`juS(+N|U;q0Wgv7_mk4)CSpA5!lmIA;N@$lqw3aI zWbXWfSqwqt;M3;$ej9MM^1|nMnP6PFX<{)K$76$r`_Ej%kRkb(a6MP#C%suTflf~* zI$ah%{Wemkoa=QxXMU;+N!v|lP#W_d8h{D&;8B?5-sByFx(HJ?(mK}zg-1~J$_WR& zFxCVDqhjoJTmj9a`{%l%un{!E_?LwNli*LILgFZ2-X%3=G;7CV(h+VD(7!DJkhzu8Nr=}kD(N{F0|M04pN#-9rY_M|L_w_!`rdl z?Xb@I@F9k3vLvBp23T=5*oqeBP%9_0K3tH8M5R- zBy1FYK4b3aHIS)jMC;UGV_({3-m>Cw+ObXOoFSLNqjLV`>^PGa`rhd^!gdU0C z)XE@z0I~Xm_eADFjoiVhXk~tf6|EY5KQm$F=4BNE+hhp>VY14aqt>10LYo%QAK&}G z9_?j`G4Bvg7IBiG^P^YBC*6524Zq`2b+^33;6gK&99RM>X{$h|KYDMaVs@oTkURO_~6OIyf|nbbd)wAw1hR0>Z1&= zo7}-gx|HM5i%VZbUMQ2BpiOpm6WiA=u{Xs{V?re?&W@3YK2og1NG-gj(iTJ^DRXV` z;QZ?2^;5hnm`Ggbdsc9l<`!K3V}z0o9_?HEu#=2Vb>E5$73b0Is%4s0CoVh{!JM9Y z=uJHH{Cfi&_xASMrH7t;Ic~%!)y8#wCvw_W8%jNM3+Ro{#+-JmyYJX_@Xzp(pG5)( z!?k&oY{k3WH!Ef*K9eZ!8_v;f%&xMFlAeTU#}zJ%Dq9Zl-~A8Yh|d(Af) zvbZ|XV|f3oNpAOuI(jQ1`qSWg)4t=RtJBa9PUoo-8TbU2(L=KU*{D?b^cf^bFPm$4 zCA&URear4AH3z(iyUM7z2u!HTFAHlVHz)yMU6|WOf8SSq-^bUc3OEO=E}RjMWjMav zd?_v6UvIl>xg9EqS2Sw)Y{`92n3JBkYDuY;IP@PBNBj-E7?E^QbmtNGxVUra`W-I6&T2F26XpnkXO8OTfPZ3Hyrfare)7AXZas0S_s6rsGy z_sA1Bma^p%^N$r6jbRNOvj)GG61`ZgBO@Vi%|fkLt8RY7uZC6;&?^1*-qx-2!#~dg zePElo|695RipkE8n^9&_9`haBA6tw72ly%@xLLf)W_h;qjAR6@Ic+AC)~SCi}BGy4{^7 zsFB5Bmjo`VoL=dV>>WK|Hl?^WSed~VsMdYw99byDoMtE7f7uCSg-$Ses|_u*aTTzwcq^ey4ulhr5t|1Ss^kY8*krb#tb=7u>wZ z**`n&37C=#G-=eXfsphsbX77(xR+kp?9;M>5vC%YPpaFqA^=}I)#wU;S+>c{QYcH_ zt=8z81IFab9~Sv*oWC^;2nz`cMR;?U39_v@=%+()uXOzB35B>@!9nK3he~4ggBMhV z8S9IYOW}#VdDm5UpK&=OWYlE-u=FW-i7AOWJB}3hnB7O?K>3#FzfdfH~Xrc zkNl21%AT*bq14>m@kY#45trF^x=*SR5oP_hN?z)nxXAoklaQH>)}~)F!D%6YVdZ;3|Qt@d0U3`x0NbT53@C?#nD9`DJFCUq98NlpcKKA)lYYJISo6-$#k%MG+hhZ(& zDVW~yn8W1Xn=TJCu}+jk{9cv`C(R#P{|$n=8<5~E-1^IZKYkWGgU07&mSwFXFyUs% z^)&E7_Zy$WdQO`-`3Z}^jI#b=XQm#?I0bDx9cHtBf}4)&Z}H`a5&ggJfRw5-m)TSj zuW(Uy3_WZvU=j)M;~mXO%T7iNaAMK_N0*}KS6`fjE-}HUUhE|cFXTl&Xzd44ZN3GL z49l6yV*PX)r6;`twH#9`34@Hnmb-$dcO+hJf{FJ6@4{B7{?hJ$AVNjpbu@@JMF!=% z+thg>{xJwXyS2Rg#NT&p-a}~K-t*bvJBs-5kQouy5h*;UJ7zFN#RZA1DQ@RXPx?4U z8ib8{tXY7f#9g z5Q^5(ty-|@q6TZqGd*~TRo&%|E!qdqQc>6KV=(D*L7@cgbZy_mBX2=Z zqZ-Uyqaab~6XnX1Rn=Iy8!mo(;BW$%MX)Xf$Ub{8S=(p!**bN^uULZ z_k-0Z2s*ti{W&~8yko)l>__Y&82E0PMG!=dxU{hWhXupiiD^cLlE1XBByvh@xwnCDv|5!&S##JV_xmr3RLRNRW^i3veTi#hb zM^7d6Lt+H$VBu)iK>(95P$aaVZ-v)xWQIWk4AIHgub{WLvg3GWWd5H8s9r z)=ZHvbQ?Zx1>inSYX&3j#I`n?6+<~k$_NR>P_B8hd6Au8#PuqWbDYLdHgSA}nd!Pe z3x{Y;*5MK&Wavu2j+<;S{@H75cEX9-nKgY7@LjLST)lsG!e~JX9Lur2!h?Lk9s|^w zgny>$8p7{Djbot<&!7EZvsrHt`j%H~i-<|eX)05KUrt0P0dR-D8sja&I9vhf2*WCy z?42rKS`#(=J`z(~`6fbwp&GjF8QU=18L)xtQfMhP=Su!9f5|))F}B=Uib@nWs9T7B zlV5QYyE(3j*L}2`;w^YEyM+d}o!`d6LX#$Ru{Wv05A81Vn8A1JLBz;L@8yv@`VmDo z!(`iFOfqy{s8~ahnC<&kR{VqzRuy+Tw6!5)qP9u^<67Q3FnOsW(LTB!+T&`7>u8~d zAxL=u?Aa}(YXfoR%B686g;=pi_kY=*YOc-V(-&@G5wggLqAKmL@mt{RPD{^5zGAXJ zko=CcQ@=Yq6IVEUh~}agimb^Y@SmM59~Qj3DYQ~^S91wf@JnE9LC^4wvqi%JrH9I^ zk+ZuA=$BfID z(7RXE3{%szlGV8v{m=4_0fVM)^jshvM36HMxt*VT@7D@FvG4F66&j$CZSktDAP0=H zaWSLlxCAcEP!0r_#<{>~Bu7ZL^Y6)qCYV5IVOHc+&a(cUpBL3o+sutvCPDv6#l}Tq zBobw~mIjB;#P|{IZ{Ef~Ag`yqSnp_$-{%nH-4I==ibvd_yMExUf~3u_C1ywgnF1s3 zJ;2L?z=W3{L!|F`J+){{#gS`37Rg;G@2aN`0l8#0`vNfS8DLgu&)0=qs)?0N^GN4*FEKD8uy@rHNU(0_DfO9U( zUdG#`x{Ub1$`NfL-xqV|hhV`q*^U1n9I6Bv5@YV>1wL#WiV&*N?v>$lidO)G(?-65LJ{(5{ z%#uAhfdRuPaB%5`(;Jywy6K!s;5yq@)al~q7Jd}o<#%~5)jV-D7bXJ1MuABWh+&67 z=tGe=4?lrR#ut;`f8>xns%3zBn7hd1`36kE>(4Bb!1RT}Z2njXI+HM=p zQryDVVtjUfBhGp?5H94-UeB3_YTA_@I+fp`T>g|emr8JX(^ANmXx7X+v9ux@hfBVh z@t_zkkUu(q2WHS@LF8gTuWk*sKO7y5wx$j7adEbdg;PEX0?{4ZZCglA=(n`o(%t_{ zVMd0qDYyuC*(#!$M|w@N`<1+;WB;8^cj%#9Gn3Iz%8$1rGiF^CT&f*93?a;Y_Ws}7 z7L)j-_%e<`xBSQkv$+n^7~9w=nwp|5X&|^w)vkScSvIsr84&fOQ3I4m2;U@*-C+h? zKjk8?`l2I+FDOp)coa)!ba+b8Xn`2lazsNnHW|(nacV9`F?qb0G&mmjqJGr(`lw(_ zu?@fxqL52J=CbIjv})%2oA7TLW2uDvI`R0R7(RLKoLkhV!XrYI)| z3vC&-2X*S)RlvTbYy83l$##L#;BdgSG@PG~#epc^f3J>30nl;Au1=F83ySe-Yr-3oU2!A{ZXaooE+eTLc}SIwia5Zq z0f=Y%k2vHv&tOJ36wP>gYdL%P639J(*Tc&JF)v!A8@A zBCyT2`5z~HKk4D)KvkUyD$>#=W7ff$cgX=Jgj3ziH#sAZmH(|Xqs3d@>rgMfEO(K+19(u*oYOzKHLk^ri<@wDI93LO@ zx#1(K^+e95NB570YGMO@!PXQQa`w)G0>hv@{7S1OfHtJrYmTy>B*a&5b{!xcNtNPw zv01?NTV!RB7Mjnh^><<9dsk5hl}Jq76$xuW;VG(e>H`pNW|l2ghZH;r{z`s{*r_a- zA3EcaX_I4xNb1$@WZ2`v76PbA`RO4)k*&Va8f$g%R~s-r5W&d{0{X-tT)U$0)^}HL^hSNC58Tdzq^RSm8Zc1rXLg*XZbE z5>M8zfSig))X1y#qBlC;*@`Z)h5fs3qh<3q-FV60CEB9VJxeU*3E5Qy)_$NoSm1}e zKu_iUQ)e#2h=S^!57EH%d*VsGx&fT}sr4c|8ExX=T!Be-5MPlNR3EZP2_BeNP#Euk zRnFqO%uRjJIHMySU#gRFZ<9HIR9xa`9lD>5r@ev8tS<=e7n9X231vIza!TQK2Q0O+ zGl=_L>wSzCDc)`#a6F}gzs5FOp_Y)}zxu}W0n7*ECW9}oGbe-g$kB=g59jxVC}SA8 ze~v5)J?MN*ws@n&xFXLKSTnQ)$?-5Hi zLShBZdeu55e$CmOm9X`}l0n@4TX9sA%cFF)Y{Nax$e07b9?bM~5ntwse^UKhhPoN& zg$>q^Vp}QN{~t;-DxReasD3YAb*oY#1|@`qpLw|_=FdBy8guJJhAjP%Ic0oO?hNe* zeV+0D=ll6=VHh4rp1I`SF58~2PI+gFSd<-vS%@q_42S6jCv{&dL%aGa9$RF6T7T5v zaXB|_e6d-Ba&WSZdzn>=uj_;YnX|K&D`Z=*>{2m>S{*^eDbo&qgZ71xA)VT;?(|4C znC4B<;$zbJCufYlC$ zs-Nz7eu`IKr1TU#5H$z_kCghKp?S&G-H6-K{qjggyVZrX892A0CyJ3Mjm1VL8@&!L zek$)L3QqG`OJCZ4KnhQU;Vd>sy>6^NR5ZZpFQ#31yoMS2oVBKB4?Cj0GhSC?G2*Ph zEezLaiCRrOu-HWSX|g?Ew&!f;A9YC1ohm4IZuWaaQ0p&@>r_<@tj}w4)fbbrjg$Vj zW>I8VkF`r5=AS4ZwVfiCKyfLbIazOMFxFf_I!F<$m-(>#HtXZ0_}bK(8O{>w=wo+x zAGN#jt^h?hHm&fH3j_!cNFPhAI6n^X#!zVTHX7^yWsJ2j5^U1&+}vY*qM1w0o0az| z&idhS?YBI=o+9s!YUq4Cgo(xa9Q_})* zV^Zg+&5N4?*~r=Kx#IRH;SIkHsnB`^o!p#IxhSXhLz$b<5k)7HAu4l!umpZjEe`fS z17maBb1Y0+2ziaNh~zs*Noi*`95tOI=}GG*eWDkXlyipWn#_B!>7Io1IVrMA6{!CtefzhsnN6^bLbqEj;pFL+(STK?%cZ^}nGk3|yh&L3!U zf`u{P`HNv=ctoppcOl*mWtWw*b4z3IIM4T*M);<<^qxgInnWPt?Hvc$9iPmQ>4-CA z&b3(XI-%?euCT&^J<^u0@5#ogOT&_dlE>d~O%oo=tvzk-F! zxHUuGcpj-~e2!g+<)Bt7KdoPVU9+o2m}5UWO`yx3fI6_dp*Q7=%IQTweVdlJEBX3l zs%d*JJmMovibwGVfCyz1Sb&8_@eCNAQ73C`r}NAASq-vnc9ZFN`ZzifbrexYtse1S zYjfz|=4k>}zJ5=!^oWHqwaWNuL8E@Z2s@)YY z(TF_M?je$60!6#$o>DXD+2saZ(_>v{fdy&Is(fCwF(XIXU>$;lVpoQE#_Jy+E}_!mDO8f|GsX9tPMJ<;i9Fm^{ZJ zhX`6T1Y*v#G35^Hh?~6GKV9!*?DCNh5!M~&z&jzkgY63uJPSX(6)L-ojC$G%PnO6! z80D|m=?l=u1`CnOQFl{7!o}Y$KP$ru9%X_(P;i9KSv2p3a*0oHPp~xoolFp^QrlJz zUq5ge=~-ix_0NRjj9-{4TWjTfmYAW*khcL7a!G3NyWKTO(-$co97%^E6`Z8TY4?cV zn}KKPEiV*)B5I*2Nt*bSQKEVz>P^+9dh00tpE%QojF)Bsv5$WT#=KSBdxV1F#nW2> z8LYO28YV?_)EmBjw(3muwa!GWoUhkoBXXl7mws_!$^!Dj#I72#uplr@tC(mr~|pF}e|zrw3hjlN0B zaO4EUMk*{{P$+E8cwJu|7oV&;xp#fD-{C_Nmg%qAHkWJRKC-?K&t(MM;r#Aqf|ZpA zg+tNT(}ybLqEL7zdlhblVr>YmjUtbw_c39nDPhRL4$~j32__h2ty5XAa#PL^g6DWH z6@AuWq95XDYGnE|4enhd3p+PJ+MlUS;A(*Rk!I8W3*eD@l)F5H!hCONPqsB zG)pOj34&T=HP}&u7Pe2U4io#jaApD!;rc2^%@-ncapxzj5jt~wksTO+zPG4rC!KaA zUh3KralC38GHfykGXfs}EA3gjep#lmt=!8YRiMOoC4);wCHUH$cA;IB_KfH0CpGZb zX)Ma&IE2R2Um7p>o}|jee{Y1NS=;)DVd|RT&%#eF4!}(rpb2E^TSCe^!*dPM*rvLX zA>s2frWrN?rCZ6x@qoBHpG->>BUZ<)T#342{*@jb4+703kj=-vc*tFb@Q7-48t>_N zXLuerT(UK4T^oX&?Xf9*=4$SX1r5BpMXT^xVdL&cZSI^H%?1|k{Y~hv zH%rRhk?u}0pj1WIgywaRCm$zPDGFGMlev{>7(vl~VxD#}1KFua^eR%?^PX!th(ulJ zY+ms1wz=?|anf9`%Q$LN$Y?|R`6nZ3t0A@II($o7AtVd`3$=O|qYXs2tEr-0%%(nD z)331Zdc2etXO+Z%DyV^x_*>!AQ85u!J%M}uy|8_5O9#=I7oM@?`<3mgmSWOZB~A3Z zMj9SyRmF8kcHga~K!_BY;H-F1B|#BeqsGK*Q{=Q5vIYzi2&AxsSixv-$0qwS*!hSf z3tNdQR&$ni`3ew5D~2rERFgg1PIBIiteb13x+K31S~*!rVK-M#)@mYNC%v*JgBiQ< zL5U!-38)IE{N8Mmn4}Z;)`f3DJXgYzS*P%tZ1Kgqj_J!IQdFN3)nqU0lb0aXjl%37 z@yiYU8bNt0`*LoUilEvPraP8ST^NR!#-$E>V8Oo%p6Z<(v~rBBAMK|Oehl)70A~wp z3M$m;z6QZK2L))6tJL4w+}pPFHfJe!>;D^PcQ>kfuz@ZC9M<1z8tM7`bBtW6!j5u( zTH#JVFNu?g(|a)VneO9BI>rT5d|O77dfeO$^pe2_zwC`nK&l${c0At(%g}HK0sm$B zG0!Jdw_OiScBd%{w0PfWc$qKDqj<5aVKAAz8S({$iKH)VQaOD~`A~`-veTxQ15r() zc_>(DtWkOa2WpSMZ>VjJC9Wm@60c?EG|oPNiFw=$XZ7Qt|ME;oO7`5i|6ubYkC3KN3icC zg~p6iqr-)tp6K~Tu-*O!UlQ>b;{`&i2t5B8^jF8W1H&k}1@_otk!wva%Z`gNxQXlX zs62m`#EMfti5e7ExD39EjB$tHFCW+yF}Ud3IqC14M-t-U5mhqf&e0u#3$Dc78dN zcAHLXW)oe~8azV9b5MVbs&*dl*+Y6W*_?0|1|XVU|6`!P;&_ zL|W1%PA`bnhfe?@3H&YQB|?Uf(LSbs4CrvDzL}xvt-pe>_~oUITmMe9$bd z770`6{f0W)5f=OrWM!ZJndW+eM^blho6s&uO)E%k0oV?^tkr2GdZ5~{Ig{;1f6b#> z=EL6)gmh~{y#{D?-dlsV@;0U%&CYHQ7+0T#iyx`FD__<#ftTOE_v zKv}C1pVk#eFilkl6yPH4q6L29+qcT6@J1*8JynmKT=3mY#_;>OSoI*!!WNQ}EvSqM z8DKfKRg}xUb?jMaBI=EDz%sZ$9~}qK0m};XmlwQrp$)<0H;Q$ZQd;N{XG%Rf<(wK) zUmUqIg|-m76UeUgSsI2;S-yrHeW?u=qkLbw6{^<$t?N^J3JxWai<^AoMd+fHVnNl@ zYT)i)#_6&G<8wMjcZBO;Me%yCXLjUPC+#xMPt=OlGpHw@`I$v}i@vK6)*j1rw7`wN{{!b^2T)_YK%hYD2E%3)|8R07U@`etv5i_-La6 zG0qGA&yc0}+V>PwiN8ojy7fjRUd(7NDggh82(et&+2UUpAhj{&oi1cZ}~oR|8TAmBIb9s`BrtEF20O`!NCx8 z?-{BuQfpjA-c^&AF*&{!K<1ALFx%C7VZ10s=AzC%ARNvQ#Or(Xlz@w`92PNdz8_cvKoo!QT?!fLLDFsE z$oD$TgPzG0?~;ONvIvSEC}>$NzEx%JX&gEH1gtPqrl+l5@doj_q|%wY<^ASkZ8n<_ zJa*Li7Q4W2>Xm7FaT0ic2|<}x2MdPcctE}WPBw^iZl_1)Q3puoY_DJ4?&uf8`unGn zebQaJ+CG<9J$2xo@P@UWb+qMzI~qvE@30ff_9FExwyki7nn|$@+hcd&#&40*!LWmDP3?Ewl5@P}B_@OR*BL2cIX_+@HIc0nAkflcap=7vsov3w zgae-=**_-yKec@9jsWgac4@qCx}%r*QxwmFfnjApVHbB)QQ~(qdAPRNeb;r=YO7xn zJ@Tzb1<70AL1EzW`+*nUf|V1d&_pS#%cb%DTbsp>?ZHe9t}1vbz5u|&*4(~js}ef7 zdKoKchVTTz@XLtuimN2cD8@Xhyk>X0)jlmozA0Q+Vv{^BW>|EIp0uE;kvJ?0nmLu49}XLVR#5-~AhR|3 zvA)NpUld>l<3jH%$Za|PwU_tokWhx6lFIwU1TJho;bHE@Tm>qvq61L)#UKNE1is)b zi@AxL$yH~rsC$ec5tCQhaYace5%0Q7y&ghbQip!)O@@t&8YDi3xZ0dvk{JUnH01o$ z;K7-BpiWvH1Qxaqgx=I5K(p}ebg)f#_~(xTX~5Q9OBDT(HX41!yD@PEM+nn3K zgwOJfgV-5>H}-vZ4%BD;UP8rbwH}tkKwBS`R|QzJIWRuFMl%g~x%`N3 zMS5p+f{mKLdfb;FpeMl1VSoM0(kQl&(JrkSS8ELhNI}<{66~Nd%_EHW)4`@ zWvJF%-T$9u6ETt=ey2ybR=`2xAH*ot?FJ~5k#{nJxfS2V1xtjal*rvaWR0JMAnQfu z*?-K(Ev_M~&@$Lmj2UwMZlNHDp@!aA>>PrxV5h|C1Rk9P+GvI5cx(m)ZEE#XlC zfqV#?<)Lu(w@Ew_^is8WBkA&CH1g)_+I;Y?I3KJ-cc$@LyRa76_GL84xv+(}*nFDU zQRMZTxR|$Mn(0ib*M>qLo_f* z`{oBUeLK76`@!+|)!e_p!GCoJOgNv2iaI1Grw&eRIquRA)@|wPPHta)M-fNxXV;@? zejg!a!L~is*4F>K9$&DOca!HtgGxpzXmkOq%Fa(|Hy`IiV`LO+EP690d3fQa^-ivw zG<2fpn5n44@z&1c9}~e$qA-o3_u^xzMz}P>FS;dW9(4Xhpe}~nkAh8%w8l5ASq5?0 zt*n)~P|k6NRU|4{%HzoQ5T_O>7GrcKOm$YCzsEZgzl4_=IBJ7;t|YsvQ`5T%AFFbt zQzXWGW|-!`PEJ@zX~cdV6lF3*QaC?6hoDLz9-AR8+C6r8&)ZF=5y=hEHY`iosVX%< zZp|TXMM0V5^|#T_mFBT}pV6KQZd%OJa_aQDtA_af!I zb)}#jOLsyK7QxLVfVX%`QAjC{Xu%3X?n7P zTjt-#jxh?VY%imZr613;S&TKob$*}y^L5alKYPFX?bD>6k``r5x@jr6xAS52u`{HT zzHlg`*kDuHSt~^i>D22NzmZEPL|R@FzfGj;hg~8licV5pp-m<6$u3f7hx2Qi_XrWK zEj1!Rdk%SZ(4fbCE!LXZmre>>I?EEK_B2^^kP+~1>CS$?+c^ceRX0K%C(|JB z10V+QufL0K>$I!m1`U`qil*?QBxrfKHB77v-?yvnp1UvQ4fqhtU6xGNI4+bC+(Ox* zU3_^8FH23KjRJ802w*Ra2a~{h$?Q0Rff@3{@_qi3A6Ik=R-kPCj86CO9(Y3At{%3> z1H`%689Xc?0=Sl(CKV@^jCN*(bDQQWg)lBgW+@mtgp2U&%I&Ti;op!@dEUbMLf|B0 zuZWgvmy`GtNYiX0bskf={|!j3wCFSm9^fQuzj--9%9!n91uu5Jjui>=jJ{Dk;Qn^6 zvsHJ^Q}4o^Y8(!!HaIL?J2bOWJ7orqAb?(j3eLz}bjAw;oF@Y;qqC&kb5=UL^Xvz? zTYDj|2(DF*8CrZ31{0jP-ZDkmo)x^SEN3s+#*jr~zJEHDGgoc;nr>YJ8_R4bWh1YI z219xX$}dP5PS_D(8Q4XYJ4!U^?-lyoZB%>O1$9&XD5<-e88!tv`;5(ZzRqk$=HNNl z`mb7AB^z3*4&cXtLw?WfsD2C3baWGRiZf-A5KiX0Vb+3kX<$fD)jU2i0i=0Fz5hf1 zrPr24VdK%EW(Iwh!0+pcK##M($TSXqUg{%6f6wD!NuiKOpNYLpsHV+bn=m`krkTf% zDCuw?O)FnW3nhDgo~@f%#3%ZvU^>L6TS~o$V=}ZZiY?;jz9zXhN0P5{Q}3qq;v-E@ zS8Ap7oRnB>j9FLosIZJGo97G6$Cm|mHK^&hUAd>{q`F!2rCYNoxeBIO7fyJ!2Qed#`PVm>ahCi@VNzH}Y zlE1)jeI&rREPn(a-8k;RIjp`@8rq88_X3J(H!Xfa_%Zy(&2Wtq zMY@MM`dGgD>;YFg_+srB+LJKWV}68zW5wEv(#%=9VR%wi4IGRzY6EKSX()NmvnxeP`IzWM>W)qR50$6l_kh| zS8KIT53iC=)mRj8ptL`}PM3#1kizR`#5*i_lh?u)fTciCXfA7I$U801$gMXNzwqL? zy0KIJh%C1Xs*v$y%oo-E9oYU#>ZyH4!jjCd+;LLcn;IqGVYuzOIbiuZ_+S)OKvvC|aNa901((O5_Q*?g|tewP9T{_4;H8mysrX7}1QG z3IYNh%6RIqAj~nBk{luv)6Z3dfP`quLMf%tK9Z1+I0rOkeN!M0#L8Ak)4$Vdcd`WQ zZ5rQKPx9gWZ-5{TIOb0mJ4iYXwty{7v5%`^-q&mjBov4R!D`N`fZc zob$0i?aLoy5q#@b8W=1&;5{fwbKaV9k)bvc@qQ;fr^aY;KD8!RvzPbezC^J1_*{VO zH`e+5bd|vyQ?iAod5m4xFYnYRC9y+zG!*u-0rjLB;DO+I_vZg@7*(!k6Vusv2oQ+u z<(f3azy$cDF>VS2J}PwM3yyE0w_?A-I{xw1W*);NL?Ja85UXOxh@)Nxq3dt1&^wD5 zuA5L69bdhrIRI;oGus^ps>IeCKq?fi@;-_^!;81n0I&Kf{7V8SgF!GfKI@ zC4)ABjCSMBRrXfeFM&QEo|&0UHlP!mXd2Ji>N5TEy|*oqlG?`S6uRc;j<#DsW9l*c zN-!y5;M=V_esvvHFXxM?$}!i4B@n)`p{i^*RMVI(emW<`R(z^<%g2NCT9^~!+c&p` zbD?%AO4SC-dhb6Ix)-XVJ?bI9Oplb97+t206=u6K$v-6J5T;k^`@hmZu}U% z1gzu!MfG15?o56@_?5W?sNVTD`Wci)I<0QU`DYXCmqW>HKV==8>@)i^KOkVD zy+5uPqrR~Vv});;QspQa$-t^lfjNa$05=>6@vl+zbF_6(qY73~FcnQkcxX#f3A3|B ztj{kSOC-?K0_?GNn9g)NGHM?l7E>J80D#h~b}R{F-17-uSYEkn7FR1s&$NO@W=ju8 zpCjLKIUVn=ivl@s={Y$c6m`n&6UTg=j8-sS6n)SSXe2s=u3x&jFZejAVq zP#@c-9M;rB>sEg79ym7i5WU0i+X$dhjWZ0mK+$M){-qT_8rmQu*`3S?Mx!kOFvo_9 zm0T0W2fQL^A@2f5+_QNu51JP=P(Dh_51Gk&V|G5>Ign3{vGp1l_iZDK{6uBSahg zwZo2F7uq0cxTCKjt(QdYoDYjSAK{EF{0!7<)?;s+r?U~+OG_GkfAJe@&%ar%g{%`( zcvKjtVr9m!5p_s!IFq|+7it`ppIX*)2DBT0bg-7sios>y>eh&M91tmuwAh3lk63BxxsRq9{?<0OIA^nK5Q?2H zle71#T~_ZX4z)e6CIFj3;RexaKa;rEshQk&cD?94=|qrNHqNd+?fun*Y|jaBtauF*@sthaqK5gFgl>(`5v6?A!P zH$=3Q;4j7K6fEfc4?^ciNL`_^#+^Qu40LX>;_@A5#O52q1+Gl0Kt}pOK|O^gMFD|n zhmhyV-}C-xeQ{gDwX!`SxcBP@f#mbmVH3Sd$=fcEQA9!(3qZFU&!bZv8(T3nJ|6;ZZ2l{DI8*>nX^u(af~!^5e5Zm zxs&sKIMePsO!5}%o@;WxNtV5vF|{xGjctWYZo)tg#|T#%SgfhzUyKs%dns*B&kkG( z%?A_<-zYSJaFv#oO*|)T(|OXP4HTeFc&YnX1R~!j)OO1Ko*k=>{m@!Kzko3c@IpnN>HTzwKGh(tSQ-=CQQNG3l}biFHO zFtUV~>wtUmb8%oefqsO{B?_J6+8MwmUnAf&Uioe1FDw$r81CQK9M{#KE&pcJEAI_A zl&_H&f)M$c)O9ODm|oz%!TBM*>>gVx9XwYd$lLm~`HmvDaSVe~F+quBqLS4pMzOCA zyM9e)9rbkRC@I*wsU|8*7GK&7dIJ6 z?HS)Uf~@%tESd_&OS6io3!J})%ds-M(|Jun*l>Ll{BQFmY3_CmR1q=CRVLbwaCqJP zX@09G5Oe|k$k$|G54nLSPa%cnr>be9@vt53*C2s%I?s{USOy)ahZqLf*HXOJfCJ40lJtGE3SxK$Cboo# zD(v?d$QI&jsJ!(47?|uzRIb``Ay}YVt@(2EjwSPwvU0&EJm!bAm;2x9(QBCob2A|oPV>FEfx(S> z=l-#-vnxL5?sp9Ds$2kR|9puH=@I_z38x17uj}+hw`5XG#4IMC4jhFG;j!|<0hGFt z22&#-NT%$OhQLhaSQQK6vpIHVXsg{f`l!T;mg3gX+qOHU3?;d zO0(Kt^08+?x5Vv4Th|%_Xbrwu@JGxF?l&Z>=AZ_5NvYjU0Sx-)DFjypc`5$(8R_j> zeX^3LETBE+y4x_tHU-+qFDi}-7cf+&s3*=4#8z3yb>%8^x|*isd4%R=cS21488z}R zww1ex=FBaND6ZmLwNlM+e5Oq5~2R?EBN z^wcY3dcyOD8jI2GrO82?=4S#)mhWD)@f_D>JVr`iBs%^v2I4Kl80|e4=cUuqPK$i8PR12{_WCm|PdhO^{icG&k z#?;XDa8k6DUVw*^5YO8UZSf`sX`RZbu5aBN!~!4Zqi-}ekYUCVH;{N$l`S&s9iB;r zxFn14Rx#9|z?2^}M9jdvw$J*5f%V}C5-S{i$>xMKZf;NR>Z!CWBEcr^nXibi?MRd+ zF8X-fE8394`f0wudJ@!I0uRxrbF-%%ZjCaRC1C zKXGolP+);7Nq`mvNC9(p7L{q$Ax+yhexlK^M+)^U9mu40@Pt68WaGLKEUSN$jy`va zWTU`sK(mgkv2F;=Z>@iGAP-4g!7(x#c0D9guFClPY~Z-hu=9+x_N7d=GO8EQ;KrpeV zM(IFVNjl;9^-(!5@YeRX%x!jA7rCX<1{Ht^MbH%<3?8@wwwBEw(9l%bO~@kut7J*b z+UlJPR;!)l-)BubMKC9)$3>xqy`K)X> zHpoB@)<%De)}oMl2_%Kulw6c1*q;5CUC#ppOHkss^igo^&sXq1ZY(9y1}fgbf)o>Y z=dSOy_-okKVOeyfv7XK6>Pa%0OTq?_Is|l}v_;0`CqL486IKj* z&~Vi@tr~l&7-L->XcJvRQ`H7pFHIj3H>(9N@bm6$65fk5AkC|7-d$C+KR zm5K-2A}|Q5Q~NAmFefh#F9|DOlJ(|QlBV^GRyT5Aw}Yw))4#(xegGx2pXL+C0FUH1 z5o@4#_LT?a1uF}ysH8qIQyQ*+xZBW(GdTa&|& zC(k$K2;&`EMjgq8%c(@q!x7JZFXsKcn(KSNmkE()e2BwUo0O>dPeByu!nAMvoelQV zMse282Wv1=c%xuk7A_R`A&3z)dt{R~s^WrxD2#uuyD3_i0er_j!3g*{`kL#|*_d{B z6J?VYyADtDPBJJXTN6+Gwj=TTY=@%J zO&jkV<}5tamgm4ztd1YKv;`=*?pJO`#{qZNCc5&%Pb+B)3mtX6w92)$=OExQJ5==b zJx$P8INwWA#INljbo^355%2NKHc5BN-U}2iEkbrcSE(|@vh8v|*DT5~GWA?qEWnY7 zs5E-%8#}&P;R*@pX}@Nf@xlD0QzUd5r8JHgRN>)Iw)V+6wL8|7*<=diXA*6m3=vs& zIBKEKSRqpUlc9z?ca@3`+AJ;%dU&JApSlMfYn4@zO8gZM74ikd_Oba2K_Aq}sr7O(xrq`?F z*wtRuY9OjPMDbq-0nm<1^`0ao@nDPG&c}-sAvINt+Qm(L!`}Br@;k+qxMHS@en>wH zZ9j}J8;7ZvJdci*Gd}#k=qBhEw${@`J&BRvJfc&&EvY)norV6Ttr_{U?Y$Ic2cW7r zpZ_(@M5w6?n#m=6xld|Fjr3>{{iwn254ICzrMtb=jCe8}lLXvT4h1%jY5$2SZ1&lh z^hPaiTBU94{E`Lzk%?DpGNuu8N{y3}U{6(D_;JUb_Ouur^Z1WP01C1Y-oEEl8Pofd zt>IEK4f8?;ew9s_kVP+iX1&L`w~TpVI@AThqu8!(Kq_Uh$|}waJC5He#zyII#UlRZ z9Qs;Z)*JX&J*6(3W!GtbvzB?F_qItLzib% zJ63IBLnQb8P%W)hfXL{Z1(@;9c>mN~_;@$LetMuAA|6(%d2z+BNi3kgvn_(0gNU3C z6BKFgs;P;I$L^}TGq;3E-rV_sN*>+YPi)!uLZPgCuUFR(?uoRx%#i*avy%v7N)jqF zGddnI@xa@-pj%_`3ED}s?{}vGbuqMHQ|o?iW(koiIqzOEk1@wBs;%lq5e)DDvbi4o zNEZUECtxQQ3n_Z=juQgGsPr4v>=5Y57g^RvU`!>BL)Y+7{}R!=`WY7nR+wEWuxAmD zRu)9YJa{dI5X(=og2dBA;4SL5I=F|$3l>Ir9|K9THbPeiiuAdO(e$gx86Y$i{Tu0@ ztaD&nyX4StO`M2i#nJOXQ^@z!la_=!X<_))R_~3S&>3Q=GuUun=(B@* z%s(hkw}i`YzbjBP(j58p166j3Q1kF(7TQwuaRo~Jw#vxESpJV=r2?^- zw?IJk=7c#h6N=keva9^vcLhg@GzXQOh;`_rqpFQ#6@*{iwyeFuBxCasalc2;$6lX;o$mHQfS2)Pd4k-!5Mg!w`N|X zSo@Mbsm~Dc%H(%OiViiin2t+a@fxtXx~e}^t*Q4|3(U~n@8ghZfGiE{d$f=BanI#s2U=-Sm| zO!B}QWF#vuYcrmO>3B+}XU8gT$BPoy&a=sNasFJH1>(7HMvA_sc?X4-{z~u)U0iQv zHNkvF>q1Ml_0)7^@G^VQQUtxK7Z}G*>tQ|^^5Fvx#Md=VjJSuf(Nj%2Ji|^S|8-nl zI19_NUf;Vy-Y*i#LtSooX(VL3F7wZOj3Hr8meA1In&M4o%24=MTuQ-mY>G`RfCpU! zhI8E@FqpJ*&F)hhjtD*t0;&C)9#_Rbai6FLK>L>O+2K)$+l#(5{Ya=_N&L#|Yo{wG zCwvw8b;~2Hc@rLfLHESI9&3?bdfcWzmdJN+pAKhnE=`l*TW7i4_x-57u={!)7Y31) z86)^BsysvpGDx0m&-+r#0=5e9r;Sh*@0ZxaXn3I$|FZ&@dccy2DvbmAY z*;i#XxwtKvC60oHI0)^!mkXfO_B*N4*#U$p?GmIg$b)~ha14v2lu}eq{6RyfN9{Ry zInutfHP>gLdTOtL8E+#CJ`lioFCZ|>79gaK9Xm398HwCaM_@tRd4exwPoPG*O!($t(Njv;y$`F8T%XP0$TwIvS|CEoJ5n|-~-X1s5 z?-F^lpxvtXduh;ab;dB*R~<;is*Bp}dB?l<`5H)k%ju{(z?JmjubK;vqQ_bOU7Imi zQFl)6!b+Z4FKtz>6GPY2<{;OfPpL>;F09Ij-OV8@+*%|(5gX|ZA4Nwg8@O*9g$j$v zPn@Yjo*V}{al-h|4YBT9;eStau5n&bhjS448C(**>-WH1ry2DjO=THpEZFJi=*i-zn6M~k! zZSz6JGIb9kbkQNWHgz7ZFo-_uVXfgTivq}J&{`5z2}0gA>RRDtF?v@Slaam-YMzb6 zb+FwqbM{BQsdRS=)&)lBYVeEFNsha?cNeK0z`N|M<*44mun>0c^ws>!k(`ol>5${7 z+G@)Bj_Zja*Z9bWCvl2!I`LpLDF~0M4E4?3QweWDu+9l-_~Yt$jK}FWQF+WBm3v%i z9v6$I&#aabF@j*P(e59;ccy$mCWm>C0n~do_9Pb?xpO=pFcX(o!K_`MnB_ z`bm?Y@+d+1mCZs>{ZlG+I#M49gWA^QZY)$bBVq1^F&voRI?M$*Q|`D zL=x^jG82L|fjU&AJGuv8WiQmIrE&n?*hG6s*CKj(8avlQWvVU_uz! z9X1%DXmVViPgDt9f`1(*P~|^42A7%+3jtqbHo99)vGN54%r4{hMk$9y2Ynf@ZVqJc zUI#xyWn!Tmy_RxMuyUs_3(vs27{Df6;uwfX%Q3Nt8XkpzZ`q>mMtvyo)OQIQj-b2aNmDWG# zs>_s24rcuFQJ|z3{(*ScSjRH;%8;zg5^mM$<>AvBs=p^3KXvH`uv#}K9YFc}q1c@&w%VHGbqo9tzOH^1r6x}N zB0J@%N{vy5(By3}$933L2XO578iV8n_E1%XJof%MK{t zBMs5z7_YyiD4pY7$nNZhXT^1fJf(f!cQ0+&Ra4W0@ubBxt_Da13a_)!SC+D99C-fe*|vXrv+~L8zn<_+2ALeQr3e zF>OILCSs`1N01yi+j}LarJbJx((w(YibpT&Tw!Qlnw$Q(u{wSQYBZ^5j3F@hG;?YO zO4OPv{KH<(kB=z#%pZ zk!hUr*0o#0`nJA&flQV;udh0V?IDCkdmC#w*HwG<1F3Ix;EgPS_S;_^gFf~jA$yV{HuY`2JB43kD+7MY$u%rX_ScZo`;L9P-!8Q&JHS%uO6j=ZE zmV;3ASD7F*ajU1#iEt}{PGB9BDzT3wd(e~LE#o0g&4gAWBDHn$N1~rNHHuG6;uu7( z*6yw%6ikZ43S!f`5j*9-H6v%yu9DhH9{O?iYdc#ArJ11P@$w}%Y;~MoTHWoS*Joaw zi^sXd$8KW5GSCyN_GU+VxZ8fr<}gO-`BQAY0o?-IMjwt#zXKa)m$c-?Y#+}jbF#QD zJxuh%_-!YfB{Y4VY%r+r^X+dRdLk74cPv)pfM$XCUbGavjJTBiYby#yd=<<|xmL$Y zsyk2cDRItaEf%Mn|Bk@5D5JO9uS^8AC}p1Ai)_o(;_qp z(I;4^2^0B7#COAlm{*RaO1AQ-=c3V1ECa%JoPpQaoi5A7Z93CGL7NAwubJPnB2UF> zSgqflT+Gu;m|w*fB|XcY%9WOb+iG?DC_4m=@ps411Tgcn!{6&ly|hrAO#q?fd3zyu zD%3JK{9hu9&4{#2|1B_0PCx?Nr^;w@ZV?0NwqrP@(@f>6!^b^m7+2p=xU#8f+GjFr zMK}^fr>(~`NdA3Gc^!m-8c?E*G`c$kEo$z}WQH+H3gs;+2zi@Ny3y{RO2y)e9HM(H zG_R*2vPy%{Aug#ooe4T*awY_a@N*72{@EoF zHm`#%RltY%?&V-|B9f*Tw)OC|MH*b7mf^{2ZD#x z*sv{ilyj12G?~okbg+n;Qp#*Zng0#u`+*83UgEahO zU2{D-O{1yR8lie`pMA8X_3sz9@<#UUQPD((tq$gg!DwTzNfP5V2~bRuK$>p`TQ;f` zKpZwBGaZm;F~tZ<%3gHh=6*XKMOB-CaCfx#omM2x9yOlmx$7=fbbs(w8_f+E^O>rG z^9%;V`tPq=bH`s>IW0aN(EoM~w|mEtgWr~5H!(GghdLcPVNy~ru_ggM3gPx1!A*NX z>z3^$yyIl3m0C!6&pEoTQ@I>P`7jQZ%zL1KE&;+N5=Z}Os${~^3FiF@n?YnhcMOcc zst-!*g_w+m^2G*fyw(7D?hbN zI9c6#@SiBnz)>`-24eh zLSeAE`SVm&yd-smEJ)DMnn_qWor>s2K#+-Cq(wleAi3NN0sxGooTJn}>?*s>a6 zFn9|yfld*h=W~9sv%?RI)o0#qFe{}~y?l>ox4hSa6U^Zc0*CMYfK2NsSrRIIA4iC= z!4*FE00{Bz)4v+TDkVIIU0xNUmD#Zjn|40B6;=eKP6WI3fEa8bAexFnDmNWfxb7W` zg|mP~zqp43Ik(%Pm;&u^@DM_6UJC%e)yLaD|HOS>4iv0sRN$EPcD!0U*~RSIWF=Qf zRBu?8zRXzh;3%j?MkK!`(Ty2P7D|0}|&%tD!WNHDe2%siZ22#&0;O0*s9FUGx& zv3C#jE-WGk*K)vc{9Kk7rec(vbP8Ovupzyqf@5kk#Pnu!e;O^_Fncr&PdI|$tp!r| z@DrTaOm)iyCD;oILy>j5JZZu!kK!UeKXkGY0W}UT8-=4`UPb(FrvJCPHN-yUV1f~9 zH;3}4+n(HYtgxC#1S{*~IrzHn-1o?qI8@@Ga%652x29s)CbhS@eO^FIgDAt}pkgy? zMMX~X%YA||cfEi2Pv%ov+}hdAIHty?@Kp`ih9(0*E=d-wXzcyz(4F&KUM&25L!=-m zYak}N1TG3xz6g~S29e*1`X*yi8CvV2sBl?9GHz%x{zEH$uv=@F|9LcJ+D?S14;|`T zQsx&0<0Ai=6oM1mTsXhn5g6Xy*klKUfj7l`$T=_+G{M-d-2#Dj@Ax_#mt%Xy1j*4M zWG-Wra2*6p3>AnZ0n4Yzy^NSraOj#@o1L+aVIFHR!g=JX~D4)-c!>Y>SRj%vd5TK53ZV+I=9$|x?5+jLbE#A z7Q##g)89ulR#MLf85Up zTG$LodtE-Bl0$|4vw^q%-WGZ)7?4?5RkW}pAS1wphVdH?*uLyWRbfnBFVVvw?(V98 zgyo?+1hgPJ*9FdrPPUFs3S|xy6{DZ9;pA>^ZK-xqkXlmG*gxy4enH!jYKYzfXyP0^ zLSQmerpwf4%eJ5W`c6eSzO|a*QKj~5YFpPxtbSG8= z+4`E7)Bad&)$h|4JDBPDhbHH$i09LqGd`~?`V$?pI}5Zit8*yR*xq*NF#NTztRQi- zFFv#+!Gl$WQt@4amVGoH9C`4~W|hnIM=o^3n9SD}GyCd&)^nBEM(flUn#t+V4uZYH z7w=>IliO$qfPM=QT$&SUJ~1zBy@$|AcfX3Qx&(DMb3WIyRiSkP zAcs>715mN2IpKExR<%U>MgD2p?C9l4N2u)(a+$L0@hK0H&dC7rZvXv!i_HKNQecvz zrsoe<)&##Y`89U12Ci*Rlj45h{gx7}gCBuZtl8@W;bGn>rRcLo+v{pGZ)$ilQ?V5W zjq{>5V=u}Tu6~0f-m8Z(?5C$Mxl6l*u7q`lp_eOf(@zQkTmNJVWsMzf|ZE*BFTkhqULAN;L!z&LBCq zZe(Tyht`jK`*_adzVDme@M^EMB%9}U>|ato#O$%fP>=YCNR#A}c$yReeq+zJ z@bjTeBP5?x|7ZN=a0iS@^5LrL2;b$=3rbkHhm6}d`)Enftw>w(s29Hm-meES`buu0 z(mkL>5DbOJ~C>Wyk&&nd$706aWV=zL>d}qu~#}1Cd2ALbd^ma>S{ZV%eW2F6dsWE6gCO9{0#5n@@~Lc#w#m z9Q9M-oq*19Xhu5>FiKp0Hk%HqjLF&rs4oQXqX0a`eO3Z8c0%hX95;k}!ri3-+6I64 zCKlGo68$nMzjP(t@44604U6yQ;0~fm(oi=u3&MFz!(@Ii>pqiIS)mw$S)qPBGz;&8 z3bi+CBnfYfIZtH{9056Dr~6$!C z_ZtJZ!pd`9=7{k!MFx2JvHF(qDB?n-d9Cw1)LyRm&xqvgX%!1dor${6c2+=xR&w!+ zD#UYFbNzwFHi6`-fW`oxD9r(n#HiXo>wA&0TmAT<(@bOeV%B*>`<+q?z*2f{H#2`K zb#k;V25Wt;2jpr?FJ25qX0p1|Sh98j9<`GxV%pn`8Leu+b>wo~agk=xmRL8&{64O+ z4Ppm=7yHEav5sVc$L$w$YYj1_U9JsRibL>znzlHnI&Syu?(XZA7Qj?szX$T#^~#Zc zE;ibTtq^I5gP_Rn%u*~ilS@{A# zM0ncUeCim%>d{OlLj106cQs6y;oED-aj0wTjXKAQFH4JJQ1={|+PASPry_qeUn}*4 zN>apAzTAPMwbZ#JeK7n>iy@d;O^@m)+zV1Mi4mb0*Y7$-Q*WNNm6PjZP$~${snYa+ ztf+$sl0NjRa?TM32P_I?sEJJMhXCb~ZW_5mJoApI$rJ4&s7#)E;`sjNGDB#tZ4zx` zWTET80Xoh?<(w-nupO-r5bpyYf+#A;LDDjzsIgfe>p##pLre*(xKO~5n5Ftmzp3Xl z^{v$cjdiJzARRTQQs`XSe3kmjJ*)%-iv1d6o0>tx3Gssg0kUYsE|+j6Tx{hs1lvf( zB3imew>2<;k#tMyFI!DlovxT`N1nQtat9*b#4z%@h2Hs}`=>82KzFd8|B<#AdA=smAPFlB|y zgVu>LV=pm?A#O}4EZ!91!!`xY_4u-(!h=il>M(p)XFSi5Ih(LbJR#BGPKgD#N_6loy8l z{PkcGw#x~U@wd!vz2s=wm}`z4BLAB{18t1!yf|nE-wCVD^B{u&@;t6-yOdq!dSDRA zs&JM!=VAev?AQ`@%Jh8N{zg9F+f}eaYzY3AF+}faVvB&{_sP(n*d->((U|ug`Fyf>M5_oBrp5_a2u*`xvlqY| zYyKy{hwEk+F|%FYE!Xl7-i`|qBmcSBcVPSShc@mTV1;-!gFeU%(btHbXZ~&SIC#ny zfwvhQxNf8SKFMpX7sR)BHYiUoi#Oeo)*bHQ64#tj?>7z>7mI6Zh~p8!BIR(oJT51q z(gV>1b9(PXC=w!GezK^g7{FFmjelKR^w4`PO)3d_@?rS=fgHBtVtXv|`7eNzT}@FW zcD0Jwr}U+%dx{O7qX@1Ph~8&P+&%16wr;;Mlv=QHUaw-KG5J|qoo z!rA_mbEO+($5fm{9_~3_C074G2C1b2b^3V2ln?>k@@oA!W3`->FYKSKtz~E%o0|T_ zip6qAeZhK?EUaEkDqxarHRC(k698%B1E_7+O6feB$+AQ;VoBzj-l-qDK-|SR`2ZC~ zu5F}iL_*@(ym|><`?^89C|;J?jO+joPwSDcY{|l1l^E>;m(3xlhCWLJ+G7Q|w7J~J zzqFn3^n*OHO*k8}Wlo{Kgn`&3W;E~`ByXAo7exN*l2ej${p$4SzbP<_%XDyRt6JgV zejiW-g5_U!JFPVaZ`D7o8Renpy0>*mdmLW%)*T;xV+2sCv)dR#i!Nd@2>;~kdwqUU zyP@4=l-F|09-ky?cE5FS^Pxz!(0)_g2?{_)>CNuw>%BOziFx=`&;gxt{=D zW-=ie_eJGwk~vljJG)30a$ZPe1h~zXk2y3$GuZj#ABM_>T3t08?4BpVh9I%s>(ofoQO44q6&fqQv z!Dd9nH1uITxWk6VN+j0Jo+cRG(gl-lFIrsPGa2z3o`H@sc^jfkkzwIp{qANKn1ISI zd(JBt!hKMJzmXuV*=^{a*k*0K zclqdSFdHGOyHUXZ1gJ65PJDn;T}iXpM+byOMJ`!(4=8U7BiM0I*JMXjREFX~V$5Bq z5W5lUFdo}#AwIEV-Vo!|>>UsbL;x~!%+|)~h0x$OiO$rwF8WgiCUc2T2rB5Q5J7$D z9uzJQjKMcwZD6q^4*F;f?wR-)q+oY$nP&o_gYhwQTC&p7W8T|k#=`g(MvHJP2Z5oE z2E1SqF0#NRn(Su7qr-f#&SeP? z)zDV$6r`&S6Y{@IJ(r2>uLJonvp6~;p|jv?d^uMs(_s|av@reTcrQSWJQ>wQcC<&G zKPQI4LqFSt5GLOE2DXRiCd}=7QXwuK)WvHW`3MiQ)}_Cn#mrQ~GC~>;_09JE)`-n+ zOU(SH#6LLdS7xTHKm4!PoK-G)a^Qb~O{6sX;&MypYlIoj9~GF2)tvOpy~&Op{9AGvT$ZzgK+Mwt zI$T-=nXUxS(PZLo5@nXH<+%OQLA}zsziB4JFN#!_#*5PEM54t(tv{=A91+ExQ1#5! zoHS$b{#HN?e(4yhiiaCZhX7Yhi7D45ueJma$^$Y!%Oa$z%U&j&#T3dyx9QXQa-$Zv zt@2T>5bS~(bX_DqYLfWZ#ny1X5SaCml5UCF-S#tN6M&NUaoKwB`=S*|<-a|0+tHRN zQ|H?8t&GYn8GoH&)?NP8a?BEv>&ma_F=Au-CMgH?T+K>4(uu^h*k?>g+C^bhcW}t! zl$JQW(Q@BH|bk)`3 zk*a?9^3j)dG(<=-Uqh#VDDJexBD``l)=fEnU9_?EncMGU38&#M!BRS_@CFb`hjD07 z*DglmvNdv?szaeXKK|uyK7~lilD}CSK?{=+PdvX1b2G0GlAv}r^oeVGa_i-L3TiQ1jjQ8E4c!O^ z*g2=L`Z*3XJkm3<^6=`Enq+0kwaFJbj0H=D7-_+&CNn(_EhErrZgZ~-9943)T7C3h z)T;z6^h(`M6}qpK&8~aT0ft23@aWaHb^zQUnXqd_?ghP9wDLp|UnO1GcMmk|T3#^S zG)MIyPSh@~TfGFu)M*B_wnuM3U)pf$=k^#bh9AkmcXe)5QbG86><>`KPlc z_QqBk7E*G-jaTy*SPyA3S&xURlwv|Pm?C!-2a~{lkOm?N!ltAX13n|3SP7GomE9kJ zNX)NBMcKj#S$E$uLC$T9?x@oAl*A!dO-t^)$|f9)U^m2~yZq50z1==$P9{tu2d3=h zsDC1Ai~Zdx#Tsr@M))e)laiW^{a%ZFnWp^WZRp`+}*J4fZ%euC^>g1KWyB*%!si!bkgj zh|0t!vBbD?-IRkR3Z2;t*39`m&%B20khd0tGcZ^>wvh2ih<0D5M4;>G+Chk7UD#eI z*tID)fa$Xng98hUyZ*E#n+Cye0dmC8>H=IEA%YEfE7rwTM6O*{Ep_OKO<*{lA)C3< zlYGE2berdqYUJ1 zD_Ht`&%$QUXm{=5Rk%fpOr-yRir!01wsk{(5GnaY4ODt9O~k}1et=PO_g+vn1Y21* zIcK!PgM|&q`UHs05YQNelphI@jXF(TZoN5VIopr&eUaM&KZx%v%Do_}kRztV4RLK; zMC-!bAbxAO%%0^90n?v4iZjznvIIWT-+f9Mvkc|xmJ)O9>ew1F@gpH~6S-NcSUnNw zKs(FR;AN)vUk6MG*UGD>oQ@ry`B+?M;qhB#?hZpCD-B!vFG$YdeD1*dFNs$!1Ort5 zM~dt|%V4-H2Y_1@Lx!KBP(iiZ`F{{fA&_15!TS(>+$Xm&(`5w|o?_Q}iT>IroY1dm z6|*Q0gS|P1)3#**LQaUT*S`dW26I;W1IB8!Qsm0A8;14SkALN|pJgmu zJ=2!$Jh^)$tfxjI-RNgKv8lKm$h*mQpMlyV9K}OpK$`zhoV8$)vnWHDc=fK&)1CN; zkh82bgf*A8wiY8$0_voIeY4iaC~0_rz;QT(F3=KyGTi3G-rg&MFhdS+j@V-d zWuiitvye7>{y|VBz1UYsk|R^io|1NyOs;GCSLqgse2yKa9$~$JAz||)@RiTjU}J)G zqp!HvwXGB{u!+TNbmkG*hv^hxJ;*%Ng{lFRiOj;Skq6K4BY*!!O?P0!92qqFN^U$b zHb-yzn)Tj}N6HZp24AK6MYqs9U&jckltSn*8pXAP`>|Xp znc!SmmfYp{PoZ7KxtB$4wAHW^wk58dvX{m^2lrsIgfl;*yw&HGqMlv+uR_Vlpvx6L zCU_ixgA6*BD%YM`ZH$?aAF}9JB6$Az1muTn% z*;AApXF~G#plZ5E68)E!=RFwGDp47`wKL1?@9Nw));Q1%$PF7^x7WKI(ApC&~vQejsCTvkO74A%A|Zvex>u# zs#N>-TAL#iR7;(m426?_{nAccPL`{w>o7&b@N%W0ReoLI42oLL(jpm_49DiQB^%Oq z6R?J;dIAqGR{|Zi8V)HBg58H)^QTFLwR6qK77mT-8jThzbp&9yG;j**Q!u|uV1-6Y z-}1m`GrrS*B_Kx%X7TPvz74aU0;GgT44^hqw9Bi>GSmwxbf93L@~cpj1#|C6(dc|< z4})*;(IK0Gj$Z*GSW}10pLjNf0hyO@qTNe$5Ca6Q4$ zvS5UR;`We`>wU_I%-DjvF2a0uhV|vnVs+F@aodxGaGV?EoJA@>GT*p4=Lco~h?oB= zMelI!-258z2kbMSLi_cXZ~|B-c=96$7+@&T633F(u7H_*Ki>w{AZ1i)=9=h~cb~r1 zNh=OJIjF$GXP|cHn-Z&2Z!ulM`2dHG4btuut=fR47V)dT&X4N{D*(fE?Ph1J%r6O; zJhoo{b2@O4>csZdWM%|_`o@9YkJ{nY@FHsQi>0}%xV zrm=@OKJuV-O~-1Ln6Q#{6JxDmp=7#iRN9FkjQ zMqU(2I`@A_I!VWQ%8|NS*5w%orcYm&qmA%x1K$|^Y#K@MV*Y|A3Sdu`t%F>xH~$gV|n5^CAYZ7B8;^ zxp0A2`QOlHU9i2l1y14M@9^@)QYDn5(cVVVr8YbWx#;%W&m_#_&j+x75oLb~hrnaZ zaM1C*`Y}|ZOy3=vsAVezY6@B%vrRIlsNMk#zdnO!ryTcm|A0R}5MC!&g&`3nPSIMn zz}m*oQ1L-EYxjO)7LXDa$zYW?IY$aO$v_MTRL}PjZcc){nYBUg*H)lunHi4|)B- z=^i^+^$|GzlcGKb1uqrR45Xn_TX4VovOewc=TTf3Ko}?OrM_8pXTLsy%S-84djZaxWUFXB)FpfifM%v4Q>DG&N++ohS8?B zJaIfxWgUP>-5*~V4%VYY<=7|yLu(d(pK(fMyis;8?(+@4`WCTk#fq5rrK#n7IS zxN`H<0+k*y+A~n^2w;Ycw;Q=_=;Y`HbGuqeNsf)>0FQ3yZa$?Cl@&zr<&%1BNHBY! zs=ce{jbH9Ne;u?Gxno08l=&)BZC*$qO;e1y!NVQ-AkRJ>_dK@FGY8#t6sJ=sZi~ws z8tQEjtJ2&P)Ry#B>Kc-;)?Cr7g7F2l40&1MRKpDcG961+4s69FKx$yk>M0Ppg8`>H z?qDz7+;WYBU77$8x}df?%LbHAa;QK$dp+vFf3zdt`^&%Dx}&v7XP=~KvE2*hOS_`qolRD(SBAtPjoBAtK%_KyHA*mEvo}5Z~3Trq_W;E4t?*%~CR#YN>pA z8Py_sGXU?s?Y7Hd^Ydxupmicp7NHt_&2`!Z&ensYQbXj z0OjK4L|US)UPfgK*#uHFo63<73EheWsTL(S&Z&vTW!G!OO)r~Js{4l%UiEI{;46oj zP{I6+Asba}dl#>q0-mcZUc=zmP|LxjF;_-Wtj|N8{8T6{o%|eN*J$pM%wE)bpo)uj2G{p?XBKpTeM`U*WCrK= z`pNDFYFGjjLb8+|b)rXF_5|3RH_-qBK>fe1?J#y|w}FL^5SpG~1kiQ`nev#IpiFvT zegz)rUUPgN(>gxgix!B5YflW=jTYr!Ull?0gjEC&0hwe{K&?@}{>pB0=RXDDXAZ<5 z&*=2LGRHkJ8a<76+wa*fVB7%Z83~)b$)}_$+MR*4{`}#2)PQNZd?}pnUv1j4lSYbs zs|9h-O|DvNcX8jDdGRqiJn>;!Ts|8b9QIlrYs|(DW@N91|!$2o&)Olf7!Xp5- zcw{PLgiV{|4L+lHC_Uqc!Mc32#0sF?Q>={qf#~9HO97ax{p%*BLH*wHrLduSP{= zpV_sbQOm|7fvzyL&SR9Kv&Uz4isC(%jpF|j^@KB$rsaWc!KLo6)>_V|4&tNzBJ|zl zB#}uA166SFqa^C9u-6p);TT*(b7#k`h=&y7Ji6$;;>$D;`)Gcd3%o5!J`y0%UWvh{fhtB>;dA-gG2!DFc;UQ@7SZUb=+SApZ133YC zGU+#1;;~|~8vt=c=Q-uv@QTLi zekif8cI#WG)-!rAF7-w;T&f7`-LgeS8(uQY?)42AP6ueo0Oq7xXCG=t5%9Hf5>G>{ zi<#X-utk9Ib19I2+`?N?`YyU;Q^;GcP>I`(`moR^S9IPl5%j**CnR|^cPnoTiL_2I9Ls<*R?#JN)(eQiYNU%{tPsn|TJ4D)P8m!67GXmSgv)kZIjP;T6Cs zKfvj>fUjcP94GhX4AzJ6;otO!gSp-~-mH+gtxq8fRw0bB!O|c5tZGk7Ms|T!0KBtU z^rRj@>I>(aO`4JC5fTM1&)j_go^)gPu__#?cc%1sIw>x++C{fqMS%#^Lyxv*OE6>F zGcCShHzr4B-jRZm@@VadF|5Ch7wNPOBz%dU>P8ua8sg@+LtX(B{~tG1&3#s+?zkif z2K!iW1W&*7cJNgnZ;|Tu{7Nl@GD~}WC^)pAgp2kG8U{@ovcmAO>);<&}q)_6+4rF3cIuXi&+s{xV{uB{8VdRIb z^w+5X^=1eP(0O#?MCs-;8WB=$M%8;0y*7ExJO2=f^$w5XX>I!u--{OEuLp+#;3)Z2 z-#5fb%s>6|{z}Q)-mV+(!6@RY@M%6q8(@bY7;-ceyqGEuS&T@-3@S|^l(kJo6+_X- zdpq;Bm&Khzv@0jLE=>BR+*0RJ#}bI}DXICwWfi6Ze+_Rcq(_hD`QsBH@ne znV}5KxVpL#4hY@SCbo$Ih+EpM>U1hO*!^5L7J_KYgW$v`YkAeU#>R+>KA;c~s=1rk za$NrZ^xnu>6VU41Nkuqa-p=^rwtmfXB*C%(zfR<4Gx%`kbFDUa7t*QA4&tqEIWE9e z1l!ao^EnSR_7=M9cdE*Q3Z z$fZ()TJsW$sDVbOtJLrXqWEz;kvbWJrQE(dlyo%-=L4@Eb^>EodEiQQ{U-qp|53iT2ZARv{#_6FmUBv_z~MP|Pr#s^cHj0$7`f zYJLsa=>PGBfB`?`JI!xr-A!b z)v;!OlW^!K&w1*(Pi^0=8D`~`ck|~kf3V1>T|%sxBdX&Of)qfbp@={8=7-n|u5zO* zz5?kuL;6xY4G@-qcBPE3q_SOp{lrqzWDSYdkj{&)($L6mV$w0YF)Bj$+qHJ?HavOU z2^b^maZ432$c3P*u9eT*qSIUsq0$2|<}V)QDYDCA+hC)}@U&a!bArKa*!sO5z-k9&oirInRdAe?>#xwfX-pHxQQ+e!cKkH%B)gUc!`hd1~o5pTkI_k|u?BZHjJIplPS(@26@@nb>wz~^YO)!z7O!g`w|ay)1Ac^jgwqmWmC=%aXyVA)nJ?!8Vp# z0-zdrZBZ2Bf+}D#siK9!cCJEL{QH#}S9TImgxJe>4?y|jRyH0BDYPoeCjI>QS$oL4s89zk}UFPvNFR1Ry=7r~$#slaMTI&;eBd!U|1vd0-p%otUWzpvv zxg;+kZ=%2CL|+C7M?Hq0-IOim+0^?D-ulGnei&QZ?8)DhFox?BI?9;K&z3y~UB(od z(mWaShW;+9IWQ+JTCtIl{fM07!8Di0t;cm0>>Ih>*Owux5;PZhMjBav(uh0X>ON^( zDP{aoR4&=k@BUU_+5A0r%Dx#+1U|z$$n-VJiLx!4iEp%UY+t}%f{yZhIb#!b?nn}f zQ4WXAIBDzcpxOOvm#~wPpKTQZI5T0y#e|I!(snDV=;8?VWMD?rxwg_wdh^p4yzJ?6kTXV9zZzPqADrH<^>W~$w4eV{aq|DrxPxeiArbI ze;{7JVGK#EvVLw}kNF;@s}(l-axL&h9R%)=6CN0Gf)B|Mj7JT@1Ip|gew)a*?Tjq% zXt3Ehx|MzL#vq__rPKu?M4Oo1Pw=3k=$Omh6#5BzUwY4pGEtrVWlb1e)cEP?V0c?sWdAZoW@;Zik@w)8+K(8mfl=)P=duH&`UO#W;J{p zwz#eeWYA1kcNP?4xry*tyX37h?l4s-dVPKm5>Q294a9Ayv3MbbF`WQGeNMuWV5klG z4oU*O!*q%^dg6~+sMMCCYA)tjK3`$6&A^gZdZ~|(8RuFxC37lbv6}-DR<@x|-hV0& zAhW+U0r=q7r7?1=Ty@wD2~n9%dv4i+ z!@i1sf}+ZTE5!cNgTzM3$DJe6k8&^E*1z{`;$OCKdjb9j;~3+w)8<88RX389^-AMD z)$gVBn@)TuYgIXn>rZ$J85HS@Ey;XU=uTXcG?%)khn=(Lf&CN9D)%g>^!4He#((0+ zmaK9WX-FB3cs>3bL>;kYzbgJ?`w6pLy9QDeRhj&EG{}P#tk3xLc&Joc?)$Crt0!q9 z^S@tn3tIi$n#TF4rBzoxoNMAhfW0ny&h+(-eH}tgA&tVZ7zW)3q9S3wxuG@vTa!+z zWic+PlA3Or*QU0+0$18TvNj_@Wepp))XIGroqDH*6yJYrHxS!<7|;@uvvo-C+bFAz z;lv&a=$G;!O~_l5hy1PCUyn$eUfPTC9EEJ@vTLoT=6Svzh!k^>CrVNZNy`n`87=;h5U*(smfFgMrw6MJlCAeDpIE` zWFgSXYVh9T@!oih{|-!@t+3aXSMW~PCYF*4#a3G5y*mob_05GeLUR0Qyf@EnymGwMPt`DRJVDfuU9G-hQIug?fNG z(si^^QQ;xEw>ZCcC}?RS9EJ%AthK;;gCio@56H_Za_Pf+O%BQK#pgiY_S<0{0qpZt z=NAv#EMQtkWAGR5a-YWK$~$$wGr$o6ZnU$Ez>Kgk9gxbQE?akxp*6||ppgz!2l9uV z#{fS5!L+@cIMX z7g|1^q%jta|Jx2-=*d}VlFWY#|F|71TVIeX##tq#h=QkFW+=)tF5Vt`!f2`qW|^+C zW;t|Vo=yo1;)aoTyo?_Rm(#w3i~Hh&_b>Rh%sRA zIaK%biRVz0g5ATX&w+H84^v^8a2KL#jqJyA-@{>w*TQXnqtewVs-?jdrkOs#BH0Zq z<2*1Fmw%bq7S;8F>3`<4oO?v99H4aov$RAb{?5eF&cohFEt(eEey#XwVv5h#?!S*l zx5*k_iMT9=KcojW(7D%XPuDKWnPde&y1|i=zzQ8@5clhx}57|gL_|HS?nV^WZ0m~AqeK=UP1kPOVWrl$^R(BqV z1w0TaE$#>S_EBnvw7C}8YQCP}1}<;%hj5$KUa^_D6fAHjc z*Bc_(g4Xh8a~Q)_+c-i5>c@c8qK)iL^~w!VHyPRH@+@7dAft8C%8J{WCk$X8%IcfGDD+2?>H zP_g)a5li=S3r zg;4eEJv*}QcRL^mIH0_E$OM2pa_~#&#vuDquc~Ddb6T*MU6c$AsPb>u0_62>Ddrt` z<0#V)&jLUiz=0$VwTz5sv*Rlb1l!NiIeFWG=a$<2ukF?PDPhTze}C+y1t>Ht1Z|tw zlf{t=pL_w>&Dy?Yb37nt5YBKY#;z-eZToTc!Ndg?n^g3ya$`|fP$W;&=um%d$!DbM|9id+{>3_|UE4n?E zE^HJ7Y*W4DxX@aYbA^?n1)pp(=D0BzQsq9m9DW}|b`zxnigaY`M=T#k{QB_X*EqK> zE|f|e>fB05)B}6sph6JU_1?0}vUg#|bTG?Mo7x#79Y}hO*Yjtm6 zdp}G59s^MRnwqt$k$a+ZB*`!KJPisBIhwEtcnj`Ui75=K9GtO+hoiZ|{_E*X=M9Ck zSD5KO$os(^ypu-LHd8K_i|t(?mj(yu!qKDdqnI^N+iyOuaPUuC;A!(<5k6`CLDbg&6!6l7i#IZUL?y9a)HP;g27$0AfRQ* zBFxnhV|0Ots0?y&Sq0Qu(+{Fv$>#;?f@P}Ax5GVC&Cg%q`BWMPp1+hejFdodU}=e8CGK49F`y}d z^*ke<#WxvK0~GTxaD7$BIZb4d*?|LNR;XyuavJW>!}cb=Ae)%-Vi}&Mpj9li4Pj|! zpPpp|R%8;uI$|>WoteYz2O3s@emt5+K8E3K2WObdaa4`84CH#?DmWfmO70|I|D{~-9$x|LB(Y#4!+hGKdf!=dtxxQZmYay}lx>53P;zOdG# z4esf1Q{FUf{tyz>4%x@mZXf@pw~qP4l%L50B2}e3GM>IR3SWAUy=Rp!^I)NTIGz*Z zbZG;Xi`?f`7}SPjJ0WATdz|7;dCaS6*;(dG>%kEe%xVZTK}pe*PRk`s;;!>&@8w6s z6VNqn7@TIA(gLUQq;b}UCjeE~`WaaK!-S#1TNcIIDmX`g@KR{w_SE1T8-E!hI7n0yqw7aqjXkJa#ElxuX*p zW5T`_W0<+|R({e5JyIs?!G`wwY+3k^G3h~qKN<=k+H9v272IxqK9~GwH_+Rp)&jD) zwNq`MB5>>Ha9@4QGqqIlH)-BF;nsqHk}Ky0_vDdsauAdH+BYg%WL41#=kjem2Ym^( z;_7+B(jW!>eB`GWJkRhXIQMZCHR#2QNr3B-k?68BP`^5S58`EsC98S(km7aIcY=&L zz!Si$(mkR}OMPAGCY~p9$iqC;;%)-~PN69i<^vu(+_D|+g*01R26N5n+s^u>GQ+vA zQ=>Sy!Q2dXlhd`OzJPo6pe4$#nbN9~kAW=#3%=s>9RJZi;iMlUhJzE~;E%reb%H7; z3h!T1LbUu=DO8r&q$Vaw#^bb*rRfM9bvNVVGM#<57YJ^5MRWcR>42XEoA`=pJ^=rZ zmKt_yBe-h7Ao6)U5g zEu!1VebU80`WAVlgMQ)2mz;zX%^rFi^NxMNPySvY4Aqn-&it8{5GXp0laM8+6}TI| z4Z*pS8>Z5ho?mj@Oqx)iC~wJHGUYA{^jRJL+MvJM@jXM3I8s(ngOm z<##S5-M;*sJ)g1D@Pbsr__S?NIkJ7mXYkO>6up&mI;CcmpZ>)NiTQ~dj~LyqYDLHX zRstBBKUMv)9kkweNw>Ni8|8&6(da={l4$HR)411g))rHXv%%oK&@Y3(l4!49FbUNd}6_SwvRwDe;nJuX!KC?4f z4nP1m_Y12|6Y|GKZnON4C5R4}i;>!CIMzLSO6IXGbIOq^V>{kRPhT&?w)MKuCL#}p znZqy_JC^@ftGO)r-Pqxu!=&Wbu-AxJ-h)(vv%+2Ah$gAdIv>(q%LnG%iT@_CeQf}D z@9Qv4wHA!xt;;sk{)=5Qbj=utdC{JFu#A~E;yYdMxu|Gluu#;ito+i z?@?%M8iu0>M^=q&++$IyK6GPduQBj7DDC1cePHLVlIM#CR*#!e?YqI=oL%0ShhS)3 z=1@9?pVL)fCSQv!8nB|_#(%erCe*W#5DFt_FOy&Z1+rY#-NNp%oQ91iSD>*EjE_OO7#q1n{-sO7b3GBP2~ebQ}YIY@+KGk?g_02k$c-D$OYY%O44fvtXes!R&t3bve2yx6Nt!gS3_J zJmVKR>a2GoStuD2o$!cqg3cX&f6WVfy}VsOl;_W8wxbZ-U6CAGl$&S)h)hGKOxR3Z zEP`lx0`7EoAhzgBXU@Qqd4YYhF4+znV#EA+QKuPB1!TEhw&1xmbGjfX8kYWf(BbuK zjIk4)tuKXUvOO26T=)VI7LD3^+zOGN<+W$v@8LUl)EB8Ip%8hsPnFdwo|t;!nQuU; zLhG5UEO2eZoh9Dzx8PcE62k!VMDvDoL2amZ4_Kc6$I*HzzsXRGt+6_sjpk&uj@InHKj9 zG6HS(Xb?QOHMwMV_@Oa|7I6%luavK^Qa&48b&eVWrQ6a|xAs@^Uv~HEH6KTk#%%Re zHjSpXuCU;uegQI&F83VBJDX(C&t5#TFPrXRXXCs8F@r)&Ov#d(?_-?k%s~8B8f`Ql2Nx=#3>0=k_9y@ zLd?f`h-e^&iir?w%YDi&-SWT{ixvKHdK`C^@jWCWgfj}63BlX}82dReKYMdnF#V80 z<{Ct_f)G$z4s9TIYtEV-K5i)5RTcq-RCx;R`lOB_iz-nSV`%iu-dOxP6qavTs}3{} z#`#PDA3O0na^N|7)AaL%JiZ4vE`@=mYWv0^MnMQDT(Rmt13;*~>I-Ds-YvG1nRLz9guZvLoZ6Pox|QCl?nZ&j==9MN7oB8OH|3D! z_vj`?WP#BQvzsE#@DaEW@HR&?;dK(p3RT)AGJbz=vJBd86d!dQ5OS9|IBcnPvjkJD zl#2=nuePd0Mm*{i*w9Iy(4r6jlLsdYF>a;;T1{Gbl(CH1IfE)914@~UU(8513Z%)Y zw7K8&ZBUNnVfJpDOe$-AOzC%a0I z);f6Dr1AKVTFTqpx`hr8N+XTQcrLsyEuW<@ zp>$GuATj%&8F-3kDdX7E)+@7h*Shh#@_MR}=mLOrZubxgvN0a6XAJFXTZWUE{NTbK*qHEy zOF{@xAlO@WitSyc7K5#g5U-OI{zB?j=K44%0243CUsM0TvS0@g=)v)L&G8hlnz77= z@jX1(h}=tZfZ+EcHsN&5B5UCK)Xzn~T2|fQ4G5OeSRyexg8kBXaa;2*aZ3Q;lSaP? zKWu;^l>%wDxNuXgC^robAY(A7*q+q#1GX6;bZgV;PQs>7?V`2g9`!V>{sXPdt}*|z zchC%9YP0=XgJ;-2@1rlZiv%GL(gs_?pm!b9J3pG;F&(K=sux>>PQWPlSXtI9q`2xv z2*V#!tr*Pk@&uVX)AULtAMlGi>7#4J4T_Y8leO_0Q`&WQadm8pF-5Y^ERsR|Xz8sX zOz{-m2c3XVB+?2KXUNvp`-To$1D?65yJ;ps(6ciM`w$9lCxk^;H&MNG)8Ouy z8DiC-r8Epc5>r(QoZPWu1TsQNlj}t|GJC(eET1{v(=J`E@SkCVe%w!zBSg3@4&y@RieV(qlmb4l~FNdo%$^gtXpfv@rUXwp&!p78L3Pk_a7@ zZYqx@$>bPM?N^n^B74L6hDc4#oKkaZVRTISk@*~qGd zl)Cf|J>7(3HURj-3!T;wy;z_w?H1HLBfwzq7D!Q*x<_8e#pN57UM<#nXc$CacuK%v z7-fQU0I9VtM|@MtsM^wd7ib=vq^04=dV`k<^gowDx@VtmB6~RX8@>6auxD6bkjq%a z@i+ldT^+#}HyAhZ6q@jYh>2P!*^oSDxa;8+es1;cK2mXh3I@jVd9h*1K@?|G3o5$A zgsf!TuX>xtyOU?7GT-aj;ce$3p~Eeu+NVJsI4QOkm4U)XWRK^yQ-52Vq+$Chrvpg{ zj@F}KZYQrFK11&=GCgAHGChhwKMZy;g%X?R7DNOLj-r?A_urgu!O(I0POjuaFa9(N z^68w6|AF1v?n|7mCWw(5JwlNWu&_)ha9K(8g=Rs2`hCm2<6rVM;OBXgMn_GS4?nm-FNh}5!!3L9Fu?!H-aVNiFliqd$b;Qi8w_(;<<}y(-QIaA zNY6*>H1o;*LwyU_zVdx^-@jHkWy;lP(Zmcwvp-Z%G;$N|d-tC=%5MA)NiUUj3pZ5x zbSG?^zBJ3*|BNdzN2=154yTch8my1zck7duG(=WJwi$obEy$jRa1aIZ%B0aWA0jic zXZ(-fc@B?9xS?;&^gxzcCzPsvEcVthd{R7|#JRc4d-bz&Tk6LiDthC0(((4t#ItMvZq* zW`2KrWJ9ncICF*&v50<2XCu^z~Ut5ps!YdN1wQwQ6V&1sMM z(vZxwPc`ygC6FNwK31Im@6l_w};^WDg_pH{+uGdDt)~%b!;?AD$|}AM6AU_NgBRtqO>{# zwIi}aSThnoiBJmtt$jFQ2CY8yGG{e<;vp#Dddtz+j^uaHkJS-dfrV{inD-12w^=t@ z{0$%6t3}yt4+NqUUTf}j@%>zpSN&`KZ!Bcgz?E7aJmwp~GYp(0C7)Pl=t;h@1#0Gr z@rTh!AjQ)c*hOJte(3@*Is8ss02nG2n&h3;(2@XAbRS_Ks3=WKLGc!DVN_;89im2W zVZxX=F$0h@Ov*tig_?`^Y#;2F>(eLcd%Pj*$J3n+ol;Q4Qrv@(!+h-b+)o%E1%i?y zylo6QCq(k~*1SsEGTH!Jr^wl|ks;Enghkb$_Gz;7djqy-{~J&z=SP<({E{pzf4?<| z3obG8STQC~t0vwZ3T>o00Pn4T(0*5;?rQ+6EOo~dAV5NUOf3+Sx#2U9c-QDH;>6bt zNwsP*^9V+7FLO-vMwjds%It8#M|>3+;592%>4)%lPDf-$=PK;i6wFpx=C#MZVyo@Y z+3j%WaPbJ(#cBkxN0t)&XE8??0vRz3l)1pe8lI*7i(qU}lVY9E@noTp+^ zCK05ukf98zD!f`%eA)=4xfAG2J4H)A*oH}C@@PRtzH?f4t5Dg*8pVV$V>jP(0__A= zV95797W$+9DT=LJ+EuPg;_!LY_yl(f9`-s#em4Z7Y3E75=O1v$`uccHCMhM~g^H28 zv9HDm4z~ThbYBOB)Ymg{jH_?PG#4xEUl6uVuv7=y6tlUdircbs_6HaL-YK#M#PHg{ z6zOk*u4Q_KP#7Mv?%0X3uP{T-i$FI(Y4Y09hy4?#MxGZH1`@6 z%CC*Ew!C4lFB)unMa@T;z0q@-z-*#S5zqd#t@V*TGxTBOsqx46Z`C{Z11;5#-wi>X zKX%iVwehPyJ~vCc{Qm`R2)nDNO|By?0kUi;*wc0EgX}hgm3I-0U5kg~YsV0-*6u*_ zkAU8aK}iSKXJ&$JgFukqzuJy?H0o zxhM`=Egi@jpUoUpVznMdLbqoYqLa>8Xa2Jo2DPLVih_&E_{^5Irf5K|??>##!!`}R zB!yk47lfCK7uWO?P`w0a^Mr*wB8d(_&A2ZuR~#awlw2g1ZJ$e>p|7{&Sj`^(jNAuS{Nq|h3g5aooRm}@;gU+CoIA+sL>r6ld>qZA@n3Jn3Jl{;P7 ztN6GSNi{TBlvOXHtd%KT%#3S$zbI3YKHR?uo6E2?rY=qFRv~L#ZFlb*TJrtUC}=Z| z3YJcDXrhNUEstBF2+$m%nmx3Ue*6hUUTwr(WEtzON^(h{xGYk$rTuFoMy2BS9zgsd z(oApkhYIhA#63j8{hMW8=Dv?QVUfzMxd$Qt+9&QEhZqK~Ym%JzR;>{XVr>R)+hJid zW1%wTyE21S0bW)%!M(^if?IxDaeleP5 z<#UP%l+$e!rTC^{^Sx3~6)4i#>MquBHKDHZTfc#+tWqx{gQ(7ZejE$dR!cdaVo@1f zQ%KP8^2^AT;xLvWO-e}gxh&?vETOkSP&`Yf7NrA-&8HPj0Kb2Zp#+A0ome|Ruoz=c zn6&b|mF{4Y{!PmOy@mo3Y{F;7c-IKo^Wij0x=F=X64}o@{+ApmT@=nZjOKM7H-Sdr z+-y`#@0GZy{tvS-rcfyy#INhC)g7b1`-oWkz@coANlJj%Jrwv_8|=?NZ0R>iVTqft zju55s_4#ka4-^i^PeG|h4(#la^lC|Un(oWK3o$Pv>iCIq;(mwj`f{1s*yzBdc@+4T zsGM#HkVzu$4uDb{)x-OaS|blQ?GCXFxm+&YWie@&U| z@0+3E;Hr*Z)Q_;t3jKFV$9O`fXP&j{_~Eu&Nlvk$=0~D&0Gs))3$SHef>z{qnzC8d z)GF3DWG4fif(U!xWA%*fhC9mT+d!7ix=z3)5!|t^yH|S@0kzGoL#}5`R3pt?5M_UT8EN)VM|fHyadxkg z73EhNOg?+TI772qZ95 zS`o0x*Yud?>o9+eePOOHFk0a_Dq`wvUTF}I9pE9x5yVbbkG0S=&^L$qY&%()4WleW zACWpiBm=|)%>8f?Iugbr2EqN8F4`{EF~txeQvi^}JD_m~^jYixY75j z^j%ZzgdE<2sqBcac9qv@&Q=DCsJjkj>CM`dL76|S1A5`Qlzf;Vf@prjoEnDuK+VP=)>aKj#`780U4wW`W=n0pgR zr)!_+hJgDdP#$wp6ek5m=4i|zmp`{4D|={U%F9zu^#jyAha(zVom zanX~!r?hTuOBAF9>_~Kmj>;#gm?a;_V5NyjO#XqbA^9)L*tGE?Wf^97i+oH~0-eYz z5Q=_#Lx^BFVkSNntWW=33H5eb5BRda22cWET5|sCrG9@3Um84sbQC8!AG(cy;)mFp zx>!tsJ1#(4_Tg+oFG+y4(4%HuJNT|9pAHcV;&hPHjNb7SB|6aPWEMytaHLLh)3;sZ zh;NbE$3Kc8u_N~F_V?ZO`sq3$^sc#=90No+^`xLD<2?3nQoCeeNZ8s~tPAX=EppQv zr6bO-E~ZDwTS3-WXi{p(C1Lk*_Eo6@Bbqrk3JolMe_1ELv*&_r901JJ*W><2sNqqj zwktRfV{H9#r~Z~wo%Ps5+G#4yOtE4uCM6KXoo~3cdW^`VB6Tp{4EL`hX`AyN{&}M5 z!)*^r`o?lE@#G2W%X|KWb;EWTm0>G(71Yk?&{l+A~nFvkNDw{~np*h|7T==St z9Oa&}w;OVHDo9AIpI;#s>af(k4JJf%!S7AK$q~I`_!~@Jr9n8k%7FI0QgdFkJ|MIM zLl85&e2c2u+ueCScD+%aIIYxp{r`>JGb&{Tr`Q^_DXD9^qH46s%8`0vVqtW0$nI(3 z|49Jd#ZH=N9Aw$?E~alcYw@-f-VI5KQ7(`j1cuJ`n|!$afcs`ZNh~P+|q*%mS zLK-W8*~O)!yjXV7mM-3pSX)7yg~(pB34-t!K5knZCxksiRYdSJ>YDWCo^6bg9Ati^ z+TlR*ahvu^*ow% z*5eS3#{&j?NMXc*hH5<%P1@g^Xt!F~5^ZDb&UN>&?CQ4k`wKwDFLJ`j7Tk9%awF@d zNmEAYcBL8Dj#7V~D3?*V^=VO^pf8Tqo@$O!zyoN7K@|{rCUc9A8d5_xHNY9@eHoDx z8Lya^r3-vLg6jk^PA)m!5h=d4O?oT<_``!2OuZ$5WI_Nem8QewNzF$VsszX&vH(ua zA#tDM=m@#=xE~S(>Tn9sSB{SytH>5O001n2;hSa)-7ofnnnSe+KXh#EfxwD8lJH|H zyu2fTIHd?BW8CR^PIqCvefB`EEJ~$M`PoM5)-+CwIpiMAF~%a1J)n>tYY5kqr?4q? zx~ZL+VGmoqCH;VpnHF$S_i!5i%t1uYM6Y9IG8#sYgb^I;z&(c1ur)Mc?WDzl948q$ z=F!e_AmR$!x2G(Lgtk58x&kQMce}B>!8d-aRwC zbJgtaP5x>SCc4qCylh=TvhEd9u~gXFCUUZ*xYka9zIjc=XD0*VvB1gb``@NDJGnpR zVVUN_Fw6KrI2)-sFlp~^yvL7`pg~>4#g}$$_*Niw&q2cxcEmJCmlbFg?siOqm{o0AGJoOE$uRncIUGP6!By~umdFJIx z{@jPYW;k$GXVz2Q#5t2=2L4JsCbYeCB;03k0)T>IQ;Um8p5&#c1&^N4#qmsd(CckA z1zHrOyx=<(^bmV>G^%rQm5_A=Y>gf(Ro~%G)ZjYhGC$*3N!fR#rZ}5E1`LT#wE#0$ zE@Rs-MvZS*JAnTcQpz$u|9kv%E*W!q6~&c4J|{e< zK0#dSd7ozaMO?&E1a$r+LFNO`UNS)8lqyMec|xE2&l&C1_zBIzLYiF}l-~x?(Fz7d$qMS)53_-VH7U4Z|_7;TNS^Ez$pWP&RM2C_>|6= z1gvBz4mIw#C+)2Syq9tpcyi7LuXsYNu${BT}q50lW4yanOzXh85FjI>js{`(f z?2TE+rZ3kXx!lX3A^&MI4o<*jYO_chHvM7fV!ND>RD@kYww3eB;3%`0a4o)+|6Vz+ zwOw~|Z?)SIZ&}0Pa}RO7J%nfpg+h}H!-O&6p55C)&B^%Q$6RD5&X_6&AuUvG_ zy5X{77N#SSus$N(dQt04x_*yx76=|bBx*Mbotw#IGiMB(?avLAu(paiJGfv|qc-rj zH3qiHHXa@U*A+4vG*%oWWRT-&YJqm*oX9VXNtj-$kYZf`7X35uy6`ef5{^Tw9hbS_ zqxkZ}JE3RhTrZ>K*ww($ZR}LWm?B78CXWcrAMUBtv$|glLh20p#>#C-Rt@2~sZADl zXV#h>>;x(``|j{Zi88!|)b~k_u(4xa^nA0h`CICR1`rC0@M!pf^h?|ddt7-vW+Qlr{ z1I0iEk@!vwKD0`E-VLo1V+R2mN6+=+Jm}CMO--a}>N(_Ocag5rQvFY2sPhKeNYZ!V3A@YJ{-o+trE`6G10vholJ-ybGMwK#f_^Me$I` zbqCL|+pCO#ZLvlKv}l;pz`r|O5b_#Q!Hw{z4$nr}tPS2c#_L(A7&-h)BGUn^^#zo# zu^OwYzd*g zthi5UlfexCo`Rno&1g!@P3G>-p^j}msD08?k3-j?GIm-t=_G??Y)e=q9`cFRm)DwF z;`xc93Yjbhbf>r%iaNV!SeVzvRITD(bLr=4Ds`J~OQg(c>odbKa^GHYx_*PONq zy|VKZwG!9#!FaHqPu6g~OydseKI6QxaG7xW5;kKLCvx%|R1WyGj(w~&@FM>jcSEkr z;4aGJnOE$YcHn76ANgU&?Ge$WEwG|z?N5akAf(Y3512kOf(Y!s*V1^{la~xctx=bq zG106!Wmv!JN>?W`s3+cmTgUL57}HW!+r^XrrNH*JE+ zJFPj@&))q3uge{a1CXKfk9m$Dw{w)R<*Jg~rSJVsPAq?HK3&Tr>c z-b`WZ5K14!S0f`mRCsqIZ=#h5pnp_{MzR4Rp4vbAd6!&Rf=-gR6VQ^!B9y+LRV%&(u;=I`d1J(%e#ckDt~PXlgME z(UNS1(&cl0yDL=waAc4_>*y7r;wV_g4M*no3K}&4O+6HQ&@(QtJE?iDRJ9eSg6i=~>+Sg||S* zK(lta7g=LpMK}J~{5AVqkP=Z)FCvpa4XZh!_NW;&6)Kcr!GI#bVdT)~B;B`zCS8r^ ziNJ|v)1=RO0iUglx~5O&%^(cddIw&9npoJbC@g_hfrx)|9VRrFzKLq`?Q9CkdhvCy zXjK4|~IB|$&|E!(b%`c1p*_EB%~&MMbw)U2LI~gN6tM=JXS{m~g(jpDLR6Ti$=^KnlL{et$#j%9F&lcm$Yy7aCYulhvLiT|-D_nq@EgNv*ra#ljOt=wqVa`P zf?116?qr#GE*9eC#K(KuyxY;E`DHqbu>yA+3WNZyw)*c~E+&ugb17uA{7l=Dj|cmR z+}+z0wp173U?OvkE@OF&-ZLfgXxwd;4|lsys!UN63~5oHa8{9h!KR=ZrUioovQnMn zHa76liQ$DlPRa;3PfPnHbc-oyY+C92UW%@ zaxt$$D|s@g17d~K3qOR<#5ns6N?5oUt9+O1P=(e5sqf1_H}kVWPr&O1~c7j=>IW{p6E6d4CE0ujsiM;@}) z)`gjjnwEpX@ATzxHfcp6Omz;OL0XNYCT)F#?+0+)&Q3(jHR|o+na8PLkRTz3B|195 zp-*D{^H8AlCO{3zE0orW`kf^0ZK`7H$VyYQ!pY8F@gwGH6A0%kGSKrNZsgyVH?!I? zW@q!jhtgiM;u-JVa`id~Gbn-_(qzra@+Ettp&RK%hF!?EHeCV|a_=m8$`79p15`U> zoD#PvWj6Pz6n%DO+~He!^2D*OeR+b^K7ADerB8e^e3S+i^=O4}ZNfP(#Q%UZQ6lKC zr6ctAT5#yHutvXLL*5^34{IvZ#r&c46LuxzxIAeqpMwz2;?N(DP_^HPT-a`I&T|M! zpZX^}@LRKASsN(e&|CTtVv6(pioEZoDz4bBzs07(QLq|83Ab^?G)1PE3NBxkXzlO{ zH;gj}hO$It5BF1^XEbvd<+CNRkW3~4LJ8Tyyuen`azAF*o|(X6F@j&tS^++KdMf%; z{G03uqP>N`{)zvxCdz@f^muo&lFp(FcnuMWJq8VcJPKxTL?6UH&a}e!s%qUNvhIfWb{B(WBN18)-t&8Cr4pW?K)g9{m`Im9;X-B z8clOj_RcL6_S?X^@TRwmEh`yMhO}%C@EsHfX(;7w$4?Y^&O) zF|MeO95^t<^N>75AM%e5)d5YIbC5-zZUjcW+%r;dmcxo0ZoMKL>B0jXo2ixXq9Iva zq^b8nv5Nza7%m3E1j-Rv3(sUphFq($e4((JYmH8@*X{sL=8;Q+Hv9e5zIJj^Tgv6z$hoWg2ckZkDr(^dCTpxXbvi!ct8pX3&6aoz_Ah;vearM`I&{)Qd03xTpj0TnnK8&j30&IhV z4HA9T*q!f#x*=|C-c)89K~B-Mq$tfsm``y}nrWs@oy zV_f;elN~5dB)L@;D}LP4F$D8kI;c9*#J?xG9q6HTmePNb zu9Cp#l)tMb=K=wFAFA;0BI$Ws^_e`#fj)RYfxnFH+gK;q;e z#0+%b*M&|{%|_8mWCcCjFKLgiU!rlMzg9U5%SA>abXbvp6-Cu3{709Rkm6+^2Xv!% z5gsnrpXgZDmSEvK%*Qr*sv(fTz#0sqO%Il8=Wu>0uz}@4kG_9NND2!J*_N7BD`i1S zza}p=*YbYEaC`DB>bQF0q#dr3i#m|r_KDZ>SJj7B`oeq{5UJ9A=aPr1MNu{{-ClF0 zbB&1^ruArQFyX(bT}H~k8`nMKrU-q#!vf9^MZ?g0t;l8!+ZI!qri?61q5bMh>>;xK zcx_9yw39ytb-dqcQrkQ1SXu)`4ha?N_Ubz;*Fwoe8^&N5fv#C_v}$y|#rjvL20J;a zy{81R)_TpjZ0ukM?7$AAjD#_ZlbuuF44NEue3eO#fr=u^!y))qzNN_ywrKgg{9{-# zz>(BNTT151WH>gv-bBtR^FNA$7WAy+TS_XY(uL-%9cHVbhLK<+zL%4$b4&^!j3 z+$cMajQkpr`u~GkX0w}@dB0g6Bs;EjJ9aT(A{~L=<@f|qgW|0zceJ2aLw$Gf!b$f7 zx$dra>6HAq=?k_>@5D4Hq_}Q1$`r1XLt4$=(WsH29*e7^?rm~LN!{_QV@4K$+xZO< zt2<+ScIas~hSsIkjf6|0tXz)Q0ZPJsV4e#fS42ZIqeOIH!0s6kNh?dkV{Yr|?>{X% z*Cg9Bri`(_=n+(89n~2>3yUR^=??b&B@l|ZRaO@%XH^(0=Al`fL;5R*T?pom;rKl4 zj(YM*p64qP%>dlw<0GYqU)-{}Xh!zF5cbq_PG^HHSKU=)sT0tH!LkqLR8nRy%I>U# zUV0>tE*&$+Dd9N2

SOS%tNRTle@z4m^@{7~RhC)p^8e6ksmp?#lXpvL82(Y{{2= zyUF~AWuE_@3_B5wiWxQYfP_rk6fayNe_P%oajt_L1B`m|;HskWic20_lK1jTKuKSN z5T%TJ4)V55tysqSv+F3Uwk-~fRJbI{{)oHi2gGZ7?lt~C#B2Ty_lUah|@`C zMG@MsSU+>ol&YRQjqxCz*K4v=o#MVRp0Dod>6E1|DVN{ ze3@TF#JyOsq_Zj3F=QpYy|tPb5bApe`FyiqgUZiDqk+!8Sw=XQ=zr1!%}bZJ+|`Q7 zMNt;9T=qZ`c)j|y26vgr`!bh$c;(SgI@kF<)x2pSJAO)>J`cPx3C)i0CKIwvvc;3# zSVeHjOfXt=wxC@9xRi;6;XCZV8@7dD!EC&PVH+u#m zMlV_a{AjXI>^~G^POQmbV1&Lyn{KRz+Ri!1O_Jnv9zkr|8@k)3bj_Wn5$spxTN8cF zBxcvmS@M0bH0Uw}8ZJ?SuWMx-<55Isr*}#^YWfKnGagV1hQEp4T3A|)GAIzw{8pIf zd8P~I@1q(VRl#`YTp<)FpU%x>`0%|)wXN*fJzQ^-X*6$;i3Oj1Ot~AN%ZJjEyB=&r zXZB=4ClaUibzfhcbqkNNpij#J7+>(lKe5JRy2$n)!S9yqo^MVWUZ$KOuasgEN(|gF!S+`$Q;7r^2tMU0I8ZCNrx!30xxL9AxvJotB~N2%8xu z^V7XT4F}#h9ZE?RiT4jR`M4@q2sEE<23M%)9z47v2vZ#o4UX1klVh`K zcDR&8u#z#dIbXDLv0(fA(t|Ez#MK6y(;~#ODRb;&^!a=_4uibEXeBNd(uBQy5=G;* zuW8B6fqu8fOpJ+ZWbiS|Y+5h(<@w<@8Hoj2h)hSNkxvn}Hu;T6cetI1KmGYwG;1?A zN8Ao}!3?X_Cm4Zh5?n@R8nj_I(vC(U9I^ad6J1mfKky@|<6X3 zGlU=FP@wgEsGmQEn(}Ia86WEt6SRnJ())em+Z(yhNN59s6}pv=Ti6klN+h3s0|&Ha z8a)rUp?SbCUw~0NXRMQPo3b%g!koEe7c$@ib~X2vbbv9Ef_;TclLc=KMER>0Oj;~9 zo+WHb?<+epNi}fga0LBS0P>b~F z10}M=0z28)=d-I&1sTj{;O}Jc)!{@yV>V5_J#FC@Esn&(ni0Hzb3;I%@3`SW|?6j|S zB--3e#oI|BZJ!Xz(OunBE@oO&i`7SKcdNE1vN6&7K9QJ9M=d>KAfJ#k{x6#O14e2olG8SlBZ#N^>08tPnL+( za!85rej|gPj6mQj~Ly>1#%XFY%2dsqNKkCUX4H#BJx1IWRz!@<>TtH#d4(aFm5mFWzCk%d`{4S6Uix@)WuB zAEU|LR=IxNqV?7;;Kz8AlW<-e~#LQ@G2S_e;0_hMv`NHC&=h#xf#{ zC`PHwz&?qtRKMtqWqLEJ43V$oFi}%LE5+ay*>vdZu|I*a-UB_L!FNs1H0*ccrJGm! z09UZGci<}vX3csp^e~$Di;1qZF*7d5a1Adoc_>P2JgO(*8r$~5iohgJEu)?A)w~|b zqEeWr-$Vl!?|BYQTiKeN^0H7(!3#kiu+s&CkM%mbV8VGeB#JES?lU0r*qPrnALpSe zWH9Csh$ANvOwINl!sNrl&is^5nvi+%y}W8As3A++N=goV#&d|^#1YJtk3)?jR!aZT z)^q${squeh#PYglQ1+wYs1=aH22$5UL8Cxth9sMtn^||*0VL>Qp7!jr>KdBUEO$4* z{y4IfeareWFw1g{0hsb|mG6|1RLkQ|g~p1Ao(ho+$Ie?ljLnAT>^+q%MKn1An)aju zRqqD5@ESlEr*K}By8=g8$UqC03baiRilf$arXvw-VY)v(!I>sGNYJ++sA&pnA-n1E zl44dP6!zcvWw#go1(ZG5`K!2O&Xet{i5XQKn6sg7a2wAT8Ih}yxi#!=#4VLI@k%zQ z0VaTmnUr!GpUv~XWy9}*$IQKCBomvQe;b9LEZkA*MX1Wz?ga@KJQVV}oh!SH!U) zxuW~JLdX3$YYE?JFClssIe|^+S~(U{m_5HbKUpdkNuI6gf?QSi9!Fh9@+3r7!&P`` zy=eq7ytJdVJl4LGjRA!6vrazvdD7K9T=?4V2HRi!bfNEcyo}mof954B-N*eT;aAHF741Va!tNnMI{1lJ z^)G?B5_^6Iv2(el=uiYB06fg*-ogBjTP5Dig=$Xm4l(xBSm|{^QF~PSNlKFrxky1I$gL`Y?T)wVc$Q$F8KfO3o4pz)RIEaJLY5&b+FqB^bh5KTpa8M6G|DubE1y?kNsTxUkEl(23N_Dt3qwg2JVhGKE z{%U)(*68OoNKLhdoHk5>T49hJNXZVbT8C{G?z{B_L)%(O8YmCG;u=UvR02`9NDkzJ z5g(}%HFHXN*?ivKsvu4rtJ5yqa6aUbO)~=(2zUDI9E4`L?8%66;K2;0{Byz6cx zIgBn^Mo*8G!NbtF97KV47UI5VEt=-6hF82l9yO)kSH7z|mJtBvB%w&F2Ry0yn}lvD z?LA3pwrx104{B`QDT$avQ~mCtz5=-@@u5^%UHoMPTr6dNKOKEbOann5fc~iLv#3_t%7~kGPh~@p2-?6dQjC{-lO+} zv8?hNPNtx6UO!=P{*|}3|62o3Gr?@_t)3n2ZbE9tu76-&O~U0sFTSPDhIV};J;n>K zbtB8bdX3bmw`v1&0!YdAFFO*wRJDxWj@nHw5FzvdOBRT-9yTbB>}WVeM3c&KV!^mt z0s~Ovd48~!bj1Z!Z5v?FdW$?rD#mM1F8iejONbTrzCmV|$RlKSNVcj)k)raP56{e% z51cyYgvj@QD)>=-#76Q@9SpHo&CY#qK;AIQRsl`rqc4_#n#^4fM zb`N&S=Nf|e=5}lMXG?WhtomXqFlOvS0RId;H{3Q-jvbvpB#Gol+O{d7_$2E53Q2cV zf7}6+c8omYx=KEEy}_nh$#!Aeq5|qHKEObnlfcmV9sa=-q%r#ls6$VfQvBaMBxKCi zA0Q2WZJ;e5l9?5gE12$VUf!tr7-J1rG@>*qPl0D=5l8YQSFOZ?LpGeP(SdasA^H_d zFs5z&IN|twaStWNX>h|wJ$g?Db*=b@&e6DgvATYL(<*Jm4uk`Z2%4McfSsuG;xIT~ z*h)JHx$Z)OztV_?q0YIpLtG??-cXoWu@#dXaPaaKQ?MDtt@2(zVztM@86XeyIsUDP zeeUA;VsS9~bU>*9@swYHfe1QxK)13#}@)rD+A5d9UWEN3aw>nJVCDK`j_D# zXr1SZ0ZsX|5u{-|MY>zjhg?8HPeFFBH-9pz;l?yHE| zl6pxVbbvKpubaH{_lB!3J!#+Pm#rF39L}l=FO;(H_sEdqe5gsL$lJlCMsKulP^nn zD<>oOdp<*K(iCID$sa**H!2!|vL%A&6knss^Z{-=rSQd?k%DR|@SZaVqSjwuHZdUL zp*xmM+>Y_zg$@ zML3$@$tHX(t3-7ZE*8`Jv)8n3Cd=&bAD%`wnf!sn{a16z9v&j~0%nyPc{V81D*7by zeE$~NCno;jHRo8UegfXn+BB1&4HE#feBXBwb&sVsh7t#DcQyidCObuq3po7bBn?l% z*gUtG=p}%abe3BZwD3tv?=n@*S6I{cT4ZBfoG`HnCed z`kZI{A4xL8?l39|;^_Hvr5oCv7i9z&m<^DYR0;25Fj@V#{R%rL7t+=c`s8+$f;#nO zakU{STr$-gemgNPrX8yB;3ymR7bdhaKP(}a-kBd0JnfXxA8;Vxj6|gtdzM_FEms#Q ztWEG#(Op7TUt0OF0`fla193hZ9VL!$A03S)rj&GVNa&THQwDMJrwqa(a}&e15QbQj zDLp=1Wjolpw7OO5&;bmc1QLtm;3sSZX+R%`_n^l@8NH=!m1xRHLT3(ul!e83V>-Sz zjPK`gx({@~$Px&?KRyaYv1u14gc?)o!3p6L`P6!Q7Y^XlhJ;Sc5Eg&eY6?O*bikm~ zH=N)fi#6r~HzfU888yHKYtlkNEG#h2v=2EKfxihP#H!Ie8GN=&{$ie?tLpooHNgFa%%4i=gTJaPH@=ns9B=Pb zGYYNCmfcE8#9T@-c}Q04u~e^&(>c!Cg4JCP*8vdX?=|zs7pKOsep#TqXdNvZ>-zcw zzAAhRhk>q-K??h=IzU!(TR@pR%nNF#_YZF~CgPR$Nl%eu(r3VSL7` z66UF3iZBBOa$>-+IXJx<&r7_SL!D?7b!}*N`oD@>_j@?bQ18@N8vlz@+cZ2 zi6^4i1yrw;!cJb!N*q+VL-e1ZN-WmF?-k?7Gr)O6zv|E6UP-B3bXYMHNsERG0US zds}1wcDCJPnq0O|eVfSt_0vuh9EZ~ji66%Sgb!=W2~9d$d01yy7-jVGXX!4}cMseY zd_B0CDC4LxtRP~)qLOG&mp^9@UlfI$=$0}~fd%TNR8hy$IdK?YKOPnwa)OjxBn%X^ z7Hl=-WC9Q|=-+de)!oaFxbs=)a8C-mZa-`=2j=RCB!2nRs|O;XHf{0pgG*NMc?mPP z>yR-qz`gf$zD9gETF6RKY`w0C3g*cRn5A1w zTWL`*8OG^i{OigD2b`Ts1hp@(<~5e6jn;6e0oqf^u}(^G#)YhEhQ~FR)LT~s4!;U2 zxeFc^;s@gI0Ii0O2L)&XzI&e73XhNeZVCZ0U{qaMSJ*gd+MctTto3gsBPLTUpzJ zDYu|^N`{}tf7C%Tlt|w94+&6w0FK$Qe{fLQl{3_Vmk}7uh{{12bD~Ls@_z*nZg|cy z|BVJvxUe&2)a!4dM7hx>@v5$6+xc|q&c%$xa{W&+{2h5kL~ICl=brGA4SJvz3;o2_ zs=aLcaW1T$>B5K2Ez{!pAquV9T#d6Fi`C)VP$To+%+0}PgY?@FI?9}Kg7WB2^fN+y z{mBkplU;lC03wo`Excy67(s%`|JG}mk&%ZecOX=Us~k9iI1)bW1QFZ$vPXK7%ra5a zjBuC$bO-yy)|Y)2Ot{yJL%t0fp>6lk@omD~&(-?4ub!|wepM^^T?LEL13GaLwmy-U{G_u3l9{KYTIdWWw1SO*l2 zSd2@HtwfWwku@x$-SQ*tJMkmm@(OJ=)GgF>Q{)993*@H# z^WG!ryOn5gIb4u&SBkQeJ8MD#Jecd;#TSce;OAdId`gPR`=$-4?2TRKbCq7z2`7AX zK-c{?3R75rezL@otTJS8K6KnQj$UZp=+YSbBS}u-yIm1^UVIcxHvikcKKS|T^7v;+ z>ze?`9wvhm6A%wZuNmfVPyDk+ktPc;03Qc}Uvs(XU6%&cL4csiwQn^63^)Ln6jm%}I#xJj-< z{M;WQ_o?&PoEP$|;g!Liaz1zNI_?Sf5Wyk=MXG%^5^}P+{{w)={v9Ffp0jy{*z)r> zGgNuqe{MF&W5_pnY?>jc5(t?uM#h9v8==hVTNijBZsZdk7_{@)g{Nr zN-m=w+G-dZgdgA%uSEt)t~z{7(ol3rV-4daER7Okm3Ad4lMDs1*Z9J8VYK5Z4Z}xc zHlG*yOj4@xc+9HfZacylu8Q~d?cEl6!>$a*kpcs@`93a+<_xC%8H-uzlhkt#u6Y%# zaHzQT*)ycbSY9KsC}24@^=F7X{tV>|#JBQgwbfu=vIJY{*Ga7fx1wvKlSPgz6q(ri z4(Y0x`(k&U^mr}E)dvXtR!pK{0`lQ&yDjnfARCU)zeyB;2!hWj>TqSPM(TOs{t~B9 zPP7~f4~|0`B$3{Lu?ukNok@r`ZZ(^A)FZb(H}n?9s1{Y=X{vU2xr(Q9A!Nq*H<^tU;iI@YG}Sb&UH$>q*FXc7Lsq z;#f{$_sw9{^BxN!LZxH2Jr5$cDStKwj5_argGhr@yF$^-M=ZX2GXH$$11X}v6OjtK z1KxX;Aq2I|5%#`TrFyAOKSi)+KjoC;xc_U0b}WS!ubL&Y*D&IFS`9D^%Sr$Aq@uv2 z>L_{TAeFOQ0-mu$O2qsR$oR&~rMfZe!)5xSR;P{j6eI5t{5TAUlVT~?>Pp=Do2!QX zn*$1VmiDb8FaW;404dJZi-x7Anb{RE=(P<#DvD+m-L$z5^rL$fORRbwM~NhhzC|bT{7HaqtDJHvvU9Azj9O=(IICnPBQi z$3u2{8IBb=6$z0MI2PBD zmOPs}>_2`P0ey-!1J2`K{4@ZvcFW~B(k-Qd_%OvXL<(YLQ#zNuy8ZnCFb<=WYBK5X zJgG;$%sfbDF9GZQA=Fp9SlO{?0=OcDPmr|1VRIv+%0mA}{H9Ou{+8+c&mj&)LEb%I3= z?wwgHPaUz}J^C))giI%>F*^8WqXS>CqA;P4CT56wRxDR*Fbggft){ z$FU%wC{E7l#=HNpP!@LWxvD)-w!-V&uwWn`ivs~NvmWscLCts;&LQ_5%geO;ORdb9 zz7vz#2h#WWNEx91fx| z!Nbud3&v#ZyFusHc)2!YHf&2FO^%H6yZXLoSY(i*5ot)xrcHX8{&Dr9Edh!cZ89!pV@W>BF$;Y<8EU0YND zv1OzhKpiS(iv63g&JG_5uLC3_0KKXUuf-ruP!({RM=k^V_@a!cY{X}cga{SPj3?ko z@?px6t+@w+I%u43Z1@R0Km7goMia!{ImomEIk{HCJ>1YakhO-qFU2qw-FrB+Q#7{| zOU;luf_%ORVo86pid5RibYgw*c;K2So^_u&Aw)8AM6!|tb2Q~Y>4m&usXL_iuP#ud zIDI&88_54@!fz1r*-{8Y?9Owe&=`S#!!lK2`+P1j>CE|feFq^mwAUWK6L*x>tHsRt z+>GfexIy|&Xhxc$FuQ;-=lV?*QoZo`Zu)MaUCx6qDKrv>)^=lYZ<^Lc;aC!fHU57&xp^Z_lV(}F4x!9Diz?71}b zj+?;9SQ&f6AF0zI46_E(-UA>0RA(K=S+M#q9I0|9y2gg8cEAJ&ag{KwLO0X83oGw2 zDRdj##c1P%UUxZX5)H+Hp(z*#p=%{n7~<0N>m{ZbF$?@n1JpS*@snTqgr7-ReB#Bc zTe7SUqW;%4v8x=|vh=*uH&<4cv)TggQjcMWTf+>00v_nD{wq+LgfP5I?&@qQoje>4 zn>PPr9ougG_h=9Hh83CT)k=$X=$hi-}1xGA#+*SaAgwzYe64cuUSatiBXUGPZ z`+2<(xrVPi^Pl9B#@{WFmlAuO-9|Q=;47^v4bM&s!(7=JnSegdq5fJTypcBWNjUDV*1ZS zGl1-`Eadv|BzL$OIq3UKzN;XHcN~&X^<#2n!9y%xgQ-h3Nq&A4ZHB4P-Bzn8dkgFk z-Uh-}EDBYB8C|m~+Qzi>RFC6oT-nrv6Fuzi>s22(*PZnu={tDF<^5h7ojX8qu^QB^ z{%q$?RSUjogKlft;VOf)d|4W2SkbMFnP4QVmg#DoP)tOsu`4D_IT?Er0u8D?meWS? z+5J4kv6UxK&tO{2wCLn!EIHgZZyjNZ%8IO0=2}+uXy$!~5-|)2!#E8Ye8tG)clH0zrUJ;w-Y&i|h$@uL`wk z<8027{iuv%20;7->oNS#0tY;#b~cFtwX+bp5>)rx{u7|QKm(?izELo6ABTgJHSgZL zCPbofP#y2s$OLIGCr&X)o;c!zCo&%fLwwyhQN4h%y|9+4lZtyJhN($c+$(?r=m6D5 zZx*204qDkXhIy^9P;j`dDq83g1KIOwnzO%89 zETb#w17+7y@D)vLgOxz#r~&7)%2q~Fdp17NB*_duO(*nyydSNheEJu2@h7db!|(raC>{^;yRq};|-&(QyIeep2z?3@{;Q%kDGIiU<* zFphHreB}T!=5HXdzV;xGAm06iEySCrt5SFcR!WAN#j%HH)7 z=I~Q!3IYB02YKki*Fhe4Y!CSOE)!1i(1?kpJx0_$)hkmna;0Wq)f8vb0<>{-Au@bc z|NPdLTcwv-T6=t*mC2d9*ui+>?eMZD-JBm{UCS8F+MLeSXRiY+3Za5DnjRB-Bl zA*oHNA6QQhc>`nn6?U`Wsmk+szixrPVWQ9+)ZM5$261Tuia_rH8b@eqG?&B|EW1i~ z8+x$wBPqO)f(HiV4?PN?PeeaoamQ_IY(S1vU}U4|&JB4)_fU?UrkN)(2|I(7{}{5@ zF12vry6Y0P-Wf`O1ZV+|$!dGOyLmAw&J{TrH7GKS#!Nx`fsP2rV4+UlXDo!Li_6@` zPymSMYFcXlCQVR%z)kE4rE(zd9w`*kG3KP((d-;Ry>nzg%c#_++vnEWo(DGUXzu}w zTp;;Bgy!hQeTo)2#b*vi*u(X2@^R~1az>gpNW6P^Ul#C@?0D8*l!kPer)YhSUy4NL z254K3J~4!iADSYDYs?1!GMmaD(P=cQpr;b_4dqbQ;+_aj`>dZ12eg|{qP;1km@jo>e|ETmLX2e$@bPggCC_w@Q$-@WV zrF)iAj)oCX99!_m@w20lm~-8GgRuRuu#p|;NaMu-zKpSlN04;VguKut<)0MfgR$q_ zc6U_aq=Z596RJ%>Ch0q$f#IckgyX_e`bC)Um@9%28_W>4x0UQKSSJ&izfcy+_Dx)HVRZ zYuuC!>Z4UTtiOj+pKGt9NCHrqGC6=)m{HrJpGta$WC)XNE;1J0{v7V4Rl=ad$dvX# zA(Rnz>-$&S;;G3tQDnk|szu?Z8{*x@qHyRw1F`U)@6;MxEBqyAk&;U0YzPB$aC=iK zlyL;#hfet|;ehDg!d@NT)%pTj`F$$KG|*=OT{Rg@wtx%ldYgsrX*Cb5b)Po&is=j9 zoBt7Qhc!OTAnf@iIUUGE`NR#$T8;>Lvw|aU*H<8B4bF!&1L}8#DyKuEl!eQ#t3GaD zyOi_VA;%Rd8ui zaQN9f2}99Aw5`sS@V%ZE8-8t*PJOH44JC6=9HF1oT^yzilN()Nd~aM)lLz3oGkL@) ztJ@I!Oh@2{%(s80MYxn~9*3yR{}iVST^pJa9%tI$1vcQzC$H=4J-wN$q1aBa!5w<+ z6se`y8V6zRDG)%1VL_h8FrX%)k~hpYCHO&6(ZMRoBy?13!a0Mbwq;$9ovavh|2{Oa zu&!ur|1LM#cj$`%CUEkn^XexIWofr5O~#qNTsRmv^>m?% zF-d$({HzB^Z~?8Gf0DrRt|jSviD-M@Fq`#nd^KDP574dDyN~isuuOwoDWWb=0>nF# zuH}!)$^SQTwbAEz)=~5FVQ!D3w!i{+#0kG-CLx3=U?>HR-(z4E={tPD&hwAFTRE8t z6UgJj!z`&fp{yb;N=AY}c9&v21&hyG@^(wCW2GTTA5&}ki2lg8!yK&s5e?(NQg#~1 z!5oea`>C#e>x%ML8t7tB?>E|S{V$=Yvj}Y@9y+|td30Gk;i0R--x*adgt7du;q>qX z+n(fVFiMloKZ&XQy^YbDYM+(!bINJE4=eH0bYshFi#XaR2$7)Y%NOQR_V$JW*nFE^ z?bvK~p@I38>D~-P55SqF-QMRPDa>$*s`Ew?tf~ALq4DYn^q&LPa`x! zZ^7QG)^YdR>60ncCZoCeIg3wNY6w~}2|V{WLa2l2UjnJ*-8-)MX-4KNrO8I9Ld&&N zk$br_H8D(ml6D)t_>n9UX|MZbZ_2a}&?d1vH%ojgU}5QjcB~M} zM;sK0Fb!{TzvsJD!YyAmx5{ul@tcNDk zV*bQzdTBx2iWWrepDb`&ZeHtoKR`m33p^E$PPF+XfpJWMgyAJesoSK6#RTW%J+&Ife{H%PXIPDs;jqK*kkfk`3Qcn zAxotjlL>%zIVzzmSOC&R^ucaLIegC51p_S@mAaiKBi9KFiV=JQ9{>VC{lCWmfzuT{WXhM>DsHeqOLYUC6<7rt;*gOmGy?uAlIF@F@ zYzF&x+a4{D%*~tYffE!bd*3Nc&kOw|-59o6R*v1(=GZIgiqJZ~-JA7r|TKb$C-zsZf|m?~(I2`oAEL*Mb! zjTCEWPYn)AN`EtDmsl2rl6=s}KI-^+0ThSu;%Por=w@uyp`J$vzK=_V0lkGW@DTrv&$TN8Y{vR zPjk~u_26{Wqg?0V*>gU~zpsSt#h~b>ic62!tnn8(J)h#=s>7@S{>)vvM2rJiqH|Nw zVAz;Q+axvy9`>ei%k=Bpcr6u^bi_m!l3Kw3c!w%LsLKsclVM#o%~G`gzTLHSPf8}7 z@0zqJ_JWG~ziq3)vT3kPTW5^^o4LF`{3$zzvVsPA5rZ@2l^x<)s3xs~f&3X`yE@#c&(xiu|& zq%Q}lhK9;WsgK(A9q+LC&qL}WnPZy(TV(&A`NM$n*vX?>a>%EhCGsK^B=(yKW>vrd z11~U-N3XdNMbunZDmOd4CwM(7*&dYaAA~HS%<6#-%GAL?z5qCU|ntz0QMO04ke;!0%yiu!|NqhF$ z+T@xna@6=vC0*CEgi1~(<^gk~+Ih^t0Ys#T$7T3%IK?$2H#0?O39IvE|7>Sz6G8Z$)$B?mclwpq$>_

bWf8{eN_>1@rq? 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260429/20260429132002-Config.rsc b/MikroMaster/20260429/20260429132002-Config.rsc new file mode 100644 index 0000000..612fc38 --- /dev/null +++ b/MikroMaster/20260429/20260429132002-Config.rsc @@ -0,0 +1,4613 @@ +# 2026-04-29 13:20:02 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/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 wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +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 \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +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 station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/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 security=security 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 security=security 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 security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf 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 datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/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=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-AX disabled=no mode=ap name=5G-AX security=sec5G 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 +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys 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 +add name=mVados 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 +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +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 dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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 dont-require-permissions=no name=AM-setup owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_RouterOS Setup Script: AM-setup\r\ + \n# \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## Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:if ([ :len [ /system/script/find where name=\$ScriptName ]] = 0 ) do={\ + \r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# :global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n# /system/script/add name=\$ScriptName owner=\$ScriptName source=([ /too\ + l/fetch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptNa\ + me . \".rsc\") output=user as-value ]->\"data\");\r\ + \n#}\r\ + \n# For run from terminal:\r\ + \n# /system/script/add name=AM-setup owner=AM-Setup source=([ /tool/fetch \ + check-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" ou\ + tput=user as-value ]->\"data\");\r\ + \n#\r\ + \n# /system/script/set source=[ :tocrlf [ get \$ScriptName source ] ] \$Sc\ + riptName;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local RemoveThisScript false;\r\ + \n\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n\r\ + \n{\r\ + \n :local ScriptName;\r\ + \n :local RemoveThisScript;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local AllDone;\r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :local CertSettings [ /certificate/settings/get ];\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:log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\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\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 :put \"Add Schedulers...\";\r\ + \n :delay 1;\r\ + \n :put \"Add Global scheduler...\";\r\ + \n :local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFu\ + nc; }\";\r\ + \n :local Comment \"Setup Global Environment for scripts\";\r\ + \n :if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] \ + ] = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-\ + event=\$OnEvent start-time=startup;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Commen\ + t) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEve\ + nt) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Add 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-ScriptInstallUpda\ + te\" ] ] = 0) do={\r\ + \n /system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Commen\ + t start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n }\r\ + \n\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n /system/script { run AM-GlobalConfig; run AM-GlobalFunc; };\r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :set AllDone true;\r\ + \n } on-error={\r\ + \n :set AllDone false;\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$ScriptName . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n\r\ + \n :delay 5s;\r\ + \n :if (\$AllDone = true && \$RemoveThisScript = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :set OnEvent \":delay 30s; /system/script/remove [ find where name=\$S\ + criptName ]; :delay5s; /system/scheduler/remove [ find where name=\\\"_Rem\ + oveSetup\\\" ];\";\r\ + \n :set Comment \"_RemoveSetup tmp scheduler for remove setup script.\";\ + \r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-ti\ + me=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$ScriptName . \"\\nI've done everything, and now I'm ti\ + red... I'm leaving. ))\\nThere will be an error below, this is normal.\");\ + \r\ + \n }\r\ + \n};\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \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\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \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\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\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/266/c0a5c627\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 03:10:03 28.04.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\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 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 FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n :global LogPrint;\r\ + \n \r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n\r\ + \n# :retry command={abc} delay=1 max=2 on-error={:put \"got error\"} \r\ + \n :do {\r\ + \n \$LogPrint debug \$0 (\"Trying to detect public IP using default s\ + ervice: \" . \$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={\$LogPrint error [ :jobname ] (\"Fail\ + ed to detect public IP using default service: \" . \$Url . \".\")}\r\ + \n #:error \"Failed to detect public IP using default service: \$Url\ + .\"};\r\ + \n } on-error={\r\ + \n \$LogPrint error \$0 (\"Failed to detect public IP using default s\ + ervice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n \$LogPrint debug \$0 (\"Trying to detect public IP using fallback \ + service: \" . \$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={\$LogPrint error [ :jobname ] (\"Fai\ + led to detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :if (\$PubIpAddr = false) do={\r\ + \n :set PubIpAddr \"not-detected\";\r\ + \n } else={\r\ + \n :set PubIpAddr [ :pick \$PubIpAddr 0 15];\r\ + \n }\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 :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\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 \$LogPrint 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 \$LogPrint 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 \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint 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 \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\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 GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' 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 :global LogPrint;\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 \$LogPrint 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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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: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 :global LogPrint;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n \$LogPrint 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 MiniDateTimeStamp do={\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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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: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:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 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={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\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 configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\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\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\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 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 CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\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 CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\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 :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/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=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/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 disable-ipv6=yes 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 comment=WAN 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 cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/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-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/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 interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.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.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.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=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +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 +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 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=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +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=git.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=ros.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.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=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=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/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=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 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=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/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 disabled=yes +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 disabled=yes +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 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/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="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +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=dst-nat chain=dstnat comment=npm disabled=yes 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 disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes 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 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/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 walled-garden +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 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet 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 +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 +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/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 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="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" 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="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +add comment="Setup Global Environment for scripts" 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="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +/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/20260429/20260429132002-Diff-Config.rsc b/MikroMaster/history/20260429/20260429132002-Diff-Config.rsc new file mode 100644 index 0000000..a0351ff --- /dev/null +++ b/MikroMaster/history/20260429/20260429132002-Diff-Config.rsc @@ -0,0 +1,380 @@ +695c695 +< \n:global CommitId \"main/266/c0a5c627\";\r\ +--- +> \n:global CommitId \"main/247/016960a4\";\r\ +698c698 +< r: root, in 03:10:03 28.04.2026.\";\r\ +--- +> r: root, in 03:45:02 16.04.2026.\";\r\ +750c750 +< \n:global ROsVerAvail;\r\ +--- +> \n#:global ROsVerAvail;\r\ +826,828d825 +< \n :global currentUpdateChannel;\r\ +< \n :global ROsVerAvail;\r\ +< \n :global arrDeviceInfo;\r\ +831,832c828 +< \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ +< el) do={\r\ +--- +> \n :if (\$CurrentChannel != \$updateChannel) do={\r\ +840,841c836 +< \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ +< \n :set currentUpdateChannel \$Channel;\r\ +--- +> \n :local Channel (\$Update->\"channel\");\r\ +844d838 +< \n\r\ +853,854d846 +< \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ +< ] ];\r\ +858,859c850,853 +< \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ +< \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ +--- +> \n :if ([:len \$arrDeviceInfo] = 0) do={\r\ +> \n :global arrDeviceInfo ({});\r\ +> \n :local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};}\ +> );\r\ +861,863c855,868 +< \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={:local arrDeviceInfo ({})}\r\ +> \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [[ :parse \"/\ +> system/package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"\ +> Error\")};\r\ +> \n #:set (\$arrDeviceInfo->\"devUpdates\") {\"devCurrentChannel\"; \$Cu\ +> rrentChannel;};\r\ +> \n #:set (\$arrDeviceInfo->\"devUpdates\") {\"devCurrentVersion\"; (\$U\ +> pdate->\"installed-version\");};\r\ +> \n #:set (\$arrDeviceInfo->\"devUpdates\") {\"devCurrentChannelVersion\ +> \"; [/system/resource/get version];};\r\ +> \n #:set (\$arrDeviceInfo->\"devUpdates\") {\"devUpdateChannel\"; [\$up\ +> dateChannel];};\r\ +> \n #:set (\$arrDeviceInfo->\"devUpdates\") {\"devUpdateVersion\"; (\$Up\ +> date->\"latest-version\");};\r\ +865c870 +< \n :return \$PkgUpdStatus;\r\ +--- +> \n :return \$PkgUpdStatus;\r\ +869,911d873 +< \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\r\ +< \n :local Status \"\";\r\ +< \n :local Update;\r\ +< \n :local WaitCount 0;\r\ +< \n\r\ +< \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ +< \n :return false;\r\ +< \n }\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\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\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\ +921d882 +< \n :global arrDeviceInfo;\r\ +925,926c886,890 +< \n :global devRunning;\r\ +< \n :global devCurArch;\r\ +--- +> \n\r\ +> \n :global arrDeviceInfo [:toarray {\"section\"={\"key\"=\"\"; \"value\"\ +> =\"\";} }];\r\ +> \n #:do {:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system/package\ +> /update/get\" ]]} on-error={}\r\ +929c893,902 +< \n :global devBuildTime;\r\ +--- +> \n :global devRbCurrentFw;\r\ +> \n :global devRbUpgradeFw;\r\ +> \n\r\ +> \n :global devRunning;\r\ +> \n :global devCurArch;\r\ +> \n :global ROsVerCurrent;\r\ +> \n :global ROsChannelCurrent;\r\ +> \n :global ROsVerAvail;\r\ +> \n\r\ +> \n :global ParseCustom;\r\ +933,934c906,907 +< \n :global currentUpdateChannel;\r\ +< \n :global ROsVerAvail;\r\ +--- +> \n :global devBuildTime;\r\ +> \n :global GetPubIp;\r\ +936c909 +< \n :local DeviceInfo;\r\ +--- +> \n :local License [/system/license/get];\r\ +938,961c911,915 +< \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 :set devBuildTime (\$Resource->\"build-time\");\r\ +> \n :set runningChannelVersion (\$Resource->\"version\");\r\ +> \n :set runningChannel [\$ParseCustom \$runningChannelVersion \"(\" \")\ +> \" 1];\r\ +> \n :set runningVersion [\$ParseCustom \$runningChannelVersion \" \"];\r\ +962a917 +> \n :do {\r\ +965,971c920,941 +< \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 :local RouterBoard;\r\ +> \n :do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on\ +> -error={}\r\ +> \n :set devModel (\$RouterBoard->\"model\");\r\ +> \n :set devRbRevision (\$RouterBoard->\"revision\");\r\ +> \n :set devRbSerialNumber (\$RouterBoard->\"serial-number\");\r\ +> \n #:set devRbCurrentFw (\$RouterBoard->\"current-firmware\");\r\ +> \n #:set devRbUpgradeFw (\$RouterBoard->\"upgrade-firmware\");\r\ +> \n :if (\$devCurArch = \"mipsbe\" || \$devCurArch = \"arm\") do={\r\ +> \n :global devRunning [ /system/device-mode/get mode ];\r\ +> \n } else={\r\ +> \n :global devRunning [/system/device-mode/get running];}\r\ +> \n } else={\r\ +> \n :set devModel \$devBoardName;\r\ +> \n\r\ +> \n :set devRbRevision false;\r\ +> \n :set devRbSerialNumber false;\r\ +> \n# :set devRbCurrentFw false;\r\ +> \n# :set devRbUpgradeFw false;\r\ +> \n #:set devCurrentFw \$runningVersion;#:set devUpgradeFw \$ROsVerAvail\ +> ;\r\ +> \n :set devRunning [/system/device-mode/get running];\r\ +973,975d942 +< \n\r\ +< \n :do {\r\ +< \n :set RunningMode [ /system/device-mode/get mode ];\r\ +977,993c944,945 +< \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 \$LogPrint error \$0 (\"Error in Function getDevice!\");\r\ +> \n :return false;\r\ +995,1023c947 +< \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:return true;\r\ +1027c951,960 +< \n :global GetArrDeviceInfo;\r\ +--- +> \n :global WaitArrDeviceInfo;\r\ +> \n # \$WaitDeviceInfo;\r\ +> \n :global devBoardName;\r\ +> \n :global devCurArch;\r\ +> \n :global devModel;\r\ +> \n :global devRunning;\r\ +> \n :global devRbRevision;\r\ +> \n :global devRbSerialNumber;\r\ +> \n :global PiblicIpAddress;\r\ +> \n\r\ +1032,1033c965 +< \n :global CommitBrief;\r\ +< \n\r\ +--- +> \n :local Return;\r\ +1034a967 +> \n :local Resource [/system/resource/get];\r\ +1036,1040c969 +< \n :local Info [ \$GetArrDeviceInfo ];\r\ +< \n\r\ +< \n :if ([ :typeof \$Info ] != \"array\") do={\r\ +< \n :return false;\r\ +< \n }\r\ +--- +> \n :local Update [ /system/package/update/get ];\r\ +1042,1043c971,972 +< \n :return ( \\\r\ +< \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ +--- +> \n :set Return ([ \$FormatLine \"Hostname:\" \$Identity ] . \"\\n\" . \\\ +> \r\ +1045,1046c974,975 +< \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ +< \_. \\\r\ +--- +> \n ([ \$FormatLine \"Location:\" (\$Snmp->\"location\") ] . \"\\n\") \ +> ] . \\\r\ +1048,1060c977,987 +< \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 ([ \$FormatLine \"Contact:\" (\$Snmp->\"contact\") ] . \"\\n\") ] \ +> . \\\r\ +> \n \"Hardware:\\n\" . \\\r\ +> \n [ \$FormatLine \" Board:\" . \$devBoardName ] . \"\\n\" . \\\r\ +> \n [ \$FormatLine \" Arch:\" . \$devCurArch ] . \"\\n\" . \\\r\ +> \n [ \$FormatLine \" Model:\" \$devModel ] . \\\r\ +> \n [ \$IfThenElse ([ :len \$devRbRevision ] > 0) \\\r\ +> \n (\" \" . \$devRbRevision) ] . \"\\n\" . \\\r\ +> \n [ \$IfThenElse ([ :len \$devRbSerialNumber ] > 0) \\\r\ +> \n ([ \$FormatLine \" Serial:\" . \$devRbSerialNumber ] . \"\\n\"\ +> ) ] . \\\r\ +1062,1064c989,990 +< \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ +< \")) ] . \"\\n\") ] . \\\r\ +< \n \"RouterOS:\\n\" . \\\r\ +--- +> \n ([ \$FormatLine \" License:\" (\"level \" . (\$License->\"nleve\ +> l\")) ] . \"\\n\") ] . \"RouterOS:\\n\" . \\\r\ +1066c992 +< \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ +--- +> \n ([ \$FormatLine \" License:\" (\"level \" . (\$License->\"level\ +1068,1078c994,1000 +< \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\"))\ +--- +> \n [ \$FormatLine \"Running Channel\" \$runningChannel ] . \"\\n\" . \\\ +> \r\ +> \n [ \$FormatLine \" Installed:\" (\$Update->\"installed-version\") \ +> ] . \"\\n\" . \\\r\ +> \n [ \$IfThenElse ([ :typeof (\$Update->\"latest-version\") ] != \"noth\ +> ing\" && \\\r\ +> \n \$Update->\"installed-version\" != \$Update->\"latest-version\")\ +1080,1089c1002,1011 +< \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 ([ \$FormatLine \" Available\" (\$Update->\"latest-version\") ]\ +> \_. \"\\n\") ] . \\\r\ +> \n [ \$IfThenElse (\$RouterBoard->\"routerboard\" = true && \\\r\ +> \n \$RouterBoard->\"current-firmware\" != \$RouterBoard->\"upgrade-\ +> firmware\") \\\r\ +> \n ([ \$FormatLine \" Firmware\" (\$RouterBoard->\"current-firmwar\ +> e\") ] . \"\\n\") ] . \\ \r\ +> \n \"RouterOS-Scripts:\\n\" . \\\r\ +> \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ +> \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ -- 2.52.0