From 5d9cf969a64c44dbe6d37c2281439a73e9e699bb Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 5 Oct 2026 14:00:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 05 14:00:08. --- .../20261005/20261005140002-Binary.backup | Bin 0 -> 243756 bytes .../20261005/20261005140002-Config.rsc | 4340 +++++++++++++++++ .../20261005/20261005140002-Diff-Config.rsc | 4 + 3 files changed, 4344 insertions(+) create mode 100644 MikroMaster/20261005/20261005140002-Binary.backup create mode 100644 MikroMaster/20261005/20261005140002-Config.rsc create mode 100644 MikroMaster/history/20261005/20261005140002-Diff-Config.rsc diff --git a/MikroMaster/20261005/20261005140002-Binary.backup b/MikroMaster/20261005/20261005140002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..b9841c8d759330d35024f09f60dce914982c230f GIT binary patch literal 243756 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

p^uwvc`mksoPm3cpD+aAs=Ugyrv^&rvV=Pkld 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


$zqXW53?Zl&P= z)>X8;F7(0vzMSSnr@N0|WNusRv*#L5&XC;^`pm-G^1_kz3}P37Zm#1f#)l(2U!WK~ z2rpG#Ml-s^#q8H_gg_6cZlH=-1rb0zSFOQL*Aq>)DEBTTP)JLBM}~+GN1?GEy)hA< zeLZ76B+lNw^=TOJDPH_&Ks~;$@2q&Ak%r?}ULT=$+8Jpa>~keyp5@Zop%5>$bQIq! zPu|}kB9@`9pRAKFZf%AJd&$0jZdZgiNsubRXf>VSD?zfUnVE6yRFu)-?{YR`Jskr2 z3%eYrW7W(Uy4a;61>m1Zq(Ub=LmZLIY-&aA0N^{{F)!>dEllheG+&fSg3xCkZ8Fd^ zFpYCctG1%3pjgV)8>2|wRB2+>u)Fxu3X&Y=aYjD&U$b0dAujxy17X4JK8>|!RE3Pw z0DC*;yFeeR75a3ZkbCbdRC)NP+KT%U?-_Ok5Br3B{|~Y(lCidC zU@lq8SicylRH}Y#NK^V2VS@dfGv(dIGag%H%3oa+tkmMgSopgb+S+_)=o>d&>rKgohanjWQd@&rwlSj9akvSn~=Z!-8@@ z#zHAW^X7Hx?hzLMnF(-M3Hv1e<=YdxMU0S|qC9FD@ATfAOTXz_wk*iqeqQ%oocSns zNX$^JQ8$Wz2Kx>-xN&dd_Ir>h&5ZMBZalTsic*!!UONMr*tj3Oa&%6P}_Uc2uvoF8y?xVVf_RE|z zNqva}l2+XOuOq)lu6aqmH;LjWqzvY?j87C)Z}Jq9PQ_xOGJq3C=N_|^qYP`2&Z^Ck z#50oTn40JmI;x_|NudjQp(h$k=-a%8m&{lUSl?Bzj(BR`WWD6Hde>dSE22HraqP)| zjUqc;1T<_3E{iOV2Ob1T=9#pIF3mXy#k_L`gdSnSpIaUP7G^@|dr6EuOVZ@ta&(6V z$7WG8AQ5YI>T-4ddyZPOd*oEHO~=aMzywiyhgh8X*&~?;m@9zB&lKjm#~PLqCidLN z;crCJtLP^)^_%@;nU^?1hXYQtO)FR{9LJ|v9|BqdtAV?E1;mOB3T3v$-5DS)w;_T+ zY`Y@OpP>trcoo$EGFP`0Q+RG4tw66;!(6a>9aT%eS`0`6$^hn+Z0FP;DQBcc+7uHq zMl%N&x_j@;(G=a9*iQVFx}D1?5>;0h^B#YzsupjEWnV@F%<$Yt zctgTyKk4(4I|(EnLEX>$U8Q!V!lQ2I9L|YoO#kOwsDB%vV@xCUgF+NkY-&eid^_LX z6N+bmh2Khi{Kb3YUhph%?sbeuXH`!qq}&2mYr*>wsZLHgc{H^c#C@by=VuF2`?4@< z7hWreFhr$7tFX9=VRZo`6yTR%rCY8LFJS~r|JoP;bwIvTQOt*p?|slu_z|{PwH$w2 zynt(qdw5IL8UV}&02(xC-!ajc1iHfqpn=<+=kj(Tfs!gd)kM)H(W<1zF)=Mh4=InTXK`Fh)DNr<4MAk@o;WMc& zm2;UB?OK1pM{prWk`RIo%Fnty8g#%+@}8{10?>8~%6ZL9Cbv=RgSVy7-`&(gHcFKO z>9v+$P+-77h_LRX+0ZFfdO?%_r`Sutkzyo!XgEBgC5Bm@%Cbier}f;M?oB7lhx(vn zoC*cqnBKK(ps|#p7z_Yc9G&9N#5*Rt;E?KAE@fBbtMD6qdHr|X>N`ltfGd#E@eg8( zOE0n&^IlxrUc_xt2g0|17kd*6&nRqC$xNuW?ve7DL9p6@7pxqUume{1fy+5f!LDp9 z%jejsy8})ZS~aAX%V!cpGS}JN<(Ewz^0qaO^?aFu_N6@M3Aov@H*l*4|oFdjaF6yALez4P3o_!<#x@c3`6j?liMBz{4i+P~*`K3V`9sIYh*}p;!UCys- zNP1|@Dvq-($*IU$OThKaJ!W>s_~^ltW%`}cygF0J+|_n5Y;P3t`R=J5F>4b>Gn#BW z73<$Kz*lNxM*#vC5sV>vxWg%&Veaa%UAt7IpT%2%c>LYmkm?>xfuTQ_XI_oqJJgC= zyKJaTgidewwi0a4du~ZWSlWGS53`QY8`Jfez~WazD=x)W0pKT$pTRfJj`(L@F?O&FdysVa&EIv^KT*?LkSg4FoU^nzVHEC6^%JaC!4=V ziJ)|PgQ)NgWPauD8fhWF=osvGGgBF35(<~taXY=BqIi38$;77Bcur<`XHDZ=&op=z z@Z4-X$E#+DN8}Tm#oZ=N97Yxv#XQMm)J0GKDl-CQ(WiyxC)RZwb~u z5s1;vd$P8ygq_RBq^#|h>)X=9XH$WmV&`a$)jXK|;ROd=ft-fA2ONWQ7|FL;yVIaX*WY~yHIPv}$c*j8bG1>+JH~X3DJ`A_*1kY-lg2&b5 zffJf>B=+vD=@l@v$EqLoGIQrb?D+ANDU>5h^>gd>bL`Er=cDhTe32B79SLg-4plHv znM5KMFuboKvOaH|F(YB2JbSZ=%6f!55&eS~m|Ge=b*^E#Szf2UGEEeq*#K+}v*5dd z;+LN&R_+*64wh)TyVAI})O>UO_Twk7E=YR7)>nP0;P5|l4|G{$UglN+rJ>e!&-R^* zQyRD*X7sWzmh-Snqu*cXP+A1;mRT;ud02D2txq_ZL$n;tnY)*f&vjjs}Tl$;?zUS1N`1*L)-f7<}GHYBdqhse3;Q37M~ z&A(J@t42NF2M@NdU>VCCFIu$>z$g3$yH+=B349-p#C0w4^7(x)L3{TY&@T=*)`#_Kq_BiH$$c4JC?eybmk;*XkjHS!;kZC-4+z);Sxe52=a(px{33 zekXJgR;;9QN~a7bPvGXFQU{UiKH8KQv@|s)1s8v?u`zW4(s-ERzeMip4^&C#iuS9} zWP%wb0jasFF%W2G(j&@A)jdXOAXEauc}=;eWOXgJ%j3UV zzCh2i;vr>sfF+gaiqNU?_Vs|T2=wf*=;KBck2J&F7;HO<<9l(|bOv$FN1kW79!CHEaRi{JKQ;Du6}fYpzxfvZ{UigUMmE;F9-*kG10lYic%C(JIxQy zB}DpBIYf1U*)J>})6mXP#61C(28zoZc>mNB(pLwa9&-q!q~QY|O$b>*PCER!Mbf9? z1i*s7VmxrHd?>d~9QJ6C1W=nyvjY*UayBy#6Z^$*TD!zqzNf&QpNbLH!GRrK?lJb{ zAvL;y54E9~9^DHw432AUgn`i8Dy!_0I+;KTR3Z~#szM}sGL^fWsUzzKH@-==u1QxY zAK|2_?|?936S^+M)gj3Ie6qaXkT?ivcZtyX1&8ui!Fr$+qcQ{}9|G=5(h%~`_K()% z&sTeixfm_IpCs_{z2Aq#v(JY27q_*jbSz@Lrrr);Ku+T%+vqKMeNey8B0h#&SgtZ) z)!O~GqUb3qwv#L`1O2U%=HTgS4E{bh0#K*kRK)3=NO>=}W?t|-{b@4K>uo|n$)0Ea zR3i3V=A#R_$m)yuZXwH&k>bLF!)63%gj&dxay`!eq3g+LMA57hfl z2Pm)i(<>v?&CrwyT;Htq9M2Y$<}KtiZ3t3rn8=X+!_<1RwJpju{&R$cMX<@-U{xBl z;gcs)!@IZul+>0h!4M#yJ8!du`zX1tLJI<3AW~16P^?{hp_%|lbhMf_V}Wlqr+?f} zRO;_Py2g5L?V^EQ#HeheOb-M}S04uXw+dC3*W*g(dH2zJbYrBGizdm6^dX__GRP_h z*$_4JMx8Su2L6NXFp>A_ep@Uw06ZQX?~IZ+6ixk`{b<_it74_ zhXK19v@}}`8MdcC;MivoKGzveFu!`}Mu$)(CQf`iAId^u+8)CFBu05u8|0}#bS$QD>1QdDim2PGK=r3j#@W-(j4&>IPXk7#CT=&+9N`!F%8*4v1gfR`G? z-#lpd`G3PCThFFcJd6NT^~ooiN=$s0smiw+>9d{j%>R^NMmbUW{`Vd#T4m8+F3v{< zXE*x#Y*&wxHE?4SFVGVMlgoJw=~vEA&sHJm6{58;fLZYJ%m$b$s7k@+n5((3>zCrq z<(mIQKU&Lv=VQc@V0px+Fg2vf)jBW&kTbK-lOw$n&Z<)Aw#~v1tq`nRGvTSiK$@}T zkL*MY`bQG~HZWBwc7p-5Q1MXMnIlg~-HpI9o;}|I-o}FMVZL}A=1{tjB&4HXv?#Q_{JdJuTo0!-&^)1lp1&i;oDx$r_)Gw9) zK1o+?uV`!PqMx1FrA4S>L@lV_UNkYq4vghBn2?Gi$u6V-xF?8d5N z9Z>(=Iixz$s^pI_fPNPOwcvoFXD|N(XS(pP)z>v38(Jr0V}g%It%?pZm@0_X~y!Yo%8_Bo1-54e5+}u zp4vQ$Y>^bJG4C9!COR^kjH@Y5@0U0ETMy#~4Z3h-^CIQIri`N7JJZ94ITQveOFaaJ zj%aW&nqbwMT2P(94+7^{W0wF^yoOiI(Z2*1(Ex(Zuk2wcsv5|!>qSqPw!i_~5ibL+Lkc|3*tj+7H#zDr%2 z!vzR=4%n~Z0V>WL@L)+b^@Mtayw)ipRI1PzD*X4%YGv5!cSk+i=vnqNFEm9I0DU3c zGHc4vYk^nsDh-fKk>7K|KnUnt;{$sFgL=f)H}U=;myL(_C`FEIU~T)Swf%qRx@%FK zH7d%QIdDk=uLXYSQQ#W0T3q;>@oYY+2asz1Bmh=6Qdc&AYRZIFRyV~re$f3D)^u;L zqb1Qqv#izzELb%;yRIfl6!#6}obH*0kO?rPm(OIhIN!>g=g%rBzf4v2`RK8cfhYk( zpoG%VCVyn&YW>fSQdGCznk&)uA;4vZvDq=v4BL{MrqjZ&IWT*zR@Oy*5p4!mf`dx$ z2&K9*Xie!Zc!R&sSVgJEh9z{MY@W$a)qTC#^u?A`S2(5+@ZD|$vJml?CF8PIZ z7TWFu*huxQbk$(NYDdEh3t~}|AU5k55W{yDjwYa5<>|~ zz3pIiwv!-hI)dyd5pN=BeyH9)g!=0y00?vxxN=Drtg~6^rEj0=J zXcT(C)=#KlGQST0++bdr+EcOx)9Q+^Dlzq|9l;^Tl}fH3Kj${2?=3;y#0h5q6xf2m zfz0v~7!4{j)M1i=U82Z?FXFlg4oW>GrxgWBeI!L|tsVhw*C#gWr7aa6Q*tVO6c}R7 zOKpKZkFz&ipQ>2ttVW?QVik=I`h!L%{uE1yk0*wvF6soXpSWCaK-ggxshz)zr6|C4 zf4RNlw8wwyH!^wm(k|myLl7cgoF^x2VB~;=@VAXL zm<9N|E(syuE?dAf*fzF`5m`hvH*^*BLN-)R`eJ}6JEZ%-TewE&T6r+*sUDG@RFkGs zd*-X?DVHf_q7O!f+5)`5haZnY`Yz>UT|Q#Csky}|no$?I%$aZ9QNn8#FmKGe>wNupvbG=(%FN^bJv=r4gwES5#|* zw51VMT_;@H5d{m1oE)m5;nIZ?F6QDJ@TMwiJAWx%eunWhoqzOoaqkU#bk2;1$ZVTBt` z<1_&OKLEf-!Gt_XCIUp|a<@`ypE;`SWhWcC-fc)=;V5=w7s0#XWVzxC*)m$jMR*Q zy&&Ojv#u*!d_LAS!ZobgzXNzh{8dC+A{>PHmM@as_cQ2_Xpy97-1$7#qk*c^W-5~& zujQA?CoH}Jr7375_B*?d#+UM=^rd4HM)=0wroCtg_yJ6F%&@kO134cECA6xxOOz^g zJFAU6IN(k(I!48nc|u0|JHuOXS1dUKN<^N7V>0IDx}oaYBwBk}uRS%Ea|X;cbH!Dp zccc2N!dp>6vA;~x@(73##hpBq zl@o;O;`exrW#P2hYVMn<1={K+Nv`*Y2+y_;Oc>TZw5kDCjiHJ;kJ2SBT`$C}DSA8O(TIIGdAuP>?Y5mfbW46T{ZcNg zKgD}kn0Cz7tI~Wxz2=`LV<>2_o?ZUVc?5iybpn`zXv9d)Rvxc)6IBh5Mp}Jqge6ok z&BPs59YxGm6^aWIaBR3V94k&CKDS6lQJPp6p0T=X%?Uj*Hp&Qfe6sGY?e*g+(vOE_ z^!!k4a+>L}Le!rQ!0-fV+SDS+)wr|CAb$^C#CC=g9>ARVXa}4z8dZ=St^$0UBJ-Kx z0AR{B*t;4A0y$D`a#KhM88Cmu%~%1;zJe{Ai`ZYHf5s#pQ)wk(zN zor<(JdbxF1`mo=&v=HQ}2qLn2t12LLOFYXv2|^H+2~_k;RCg%;N5(VP@8VZt`*59c zMy{NRBBcOE+*l7LLd4D`Idpxe=5LY{YlK}5K)1wf%*BVVN2}Y zxj6_t;F3C30m9R7s|e%7$>jhzUb(Owg$jIh>8#CyMQ^F;jg2}vYxn3vB&aZ)9Tfye znWTL4_x2m7p-qqOajI!x+t5*Q$ZzWdKPnH`G9vCX~o)~vR!Hi~dc5DI|yU$r4q{QzMAx_EZ1V!5uF%~Yx9 zvVX(IL@azG9W)XSPNOoizLYT&^2-vgrfy4X#&`}!ZQ1IJFM8#) ze$)}$;Md3mPDS3ig58u~JVuJ(qV)${E&b%sYx#MVUOO$B7s}n6?(E+Q4xMO9+MRDhxJqayovE zvla>rU6E{v_6d@RuvS#WsDqJRXON>ROjGQtHF?okp}H#oD=t^K;-td<0%(e0(PHZ} z^gmeE_@ESH$Z3^q-6aZAR3Qrk`0`|{cn{oBRPBduucgW*)VNLPUIKz4=M0RIu1V6lT_DOc-bZpPaTQU)XRNPC=#FR6A)G(U)j8?=d~ysw za(TlKwBd@PCYY9d1j=qYH_MV}xAE(8d zGpq>S{BDw9U2GwcJYx0fm(}cni49pf!zxl?KuiYwZ#5ekX!Vzy*;JXmkj|NF-;;f` zZp9we_xP}mH;^?MJ_(tu+a@#<%P7@!GK;IM| z5iUXn)UFh$I-q0P815DYPXUsnNroVR-nKQaj{cPg^|r8}8d_koYj;Z_yiNUyq%RZ% zRcn~iH*zC!1$84cZ#di?*c!~U1(|77j__9Zzn8(~hKX^5iTtM%2qt;DMj#u(1VsnX zK}^8@>B@lKq{a{#`%rz6RjL&5c+2LxhF&#_n|!G`v85b@F;zY?FndeZVUI1Czsq~h zO(_SQz}|QgdZ7&l8d?-Wf&U>V7fRP4-+NZ|BiuzHaNcZYk0eEz9V|@UKZ%5f&OWDU zw0s4tcVLD#D5Sn4e#SBjeJ@`P8oq^WrVfxZxvz!5_-{(1!`<~Vuj}-gqqhKcy5K9h z*EZC>RfE?KhB8jdQCucYnO*GNI07JvS4XA!+o%CU+SRO28cpIXM; ziD<+sAiWrWpzdzydxJdM~BU}(sV zZGYvP*HIzo_Bu6xj*40 zJ9}hMSHvN`o0pIu&#Tqd2b%}msJ(f^Zbg???>KlBeMKV{AEEHW#ZLmMd6cN*F+ow8 z8UM#Ui6bvlR?!(iXa?0j5(RVx=tg=Mla?Y4{oDiVuNDC_c=)0iF8weOGf=s0>z!Y@ z3L?xKcZ5C-IT+KWzY)Kvc>naiL0K4)(21ZsrA*c`w}Td@Ho0D*972@&7u`Om0nApl z%kHy#rmOj|NiP`itBu+bW-IsT!yBywI$yRJMw)WI_m*B3fs z_=%57bVRlk*0r*$3yfc53-*TW_FWfUnm5rR6I@mGUN96Wvat}NXMY81!FDI1% zQjn!bBhAp{#Dz|MdHQ&*&^#V|c)A&9kT&Sn(h!}_mZk}R0d_kyq?&Rf&R%%spDo2I zj^wvds7ev_@8ose#J;y+J@wD{*Dg7>rDz?7?EYWk&h9jcB5{>yVFk4f9gC)Lh!UT@zwqN%ly!iFdhXZySe z7Ln4zjmCD5)XB8$4d$1(p>u~YQlW|k5gPiSKn zy)|79sN7GiZ67O=-Zs}Vm3nn(VT+v)KIhM|Vs*5c=?ShX;66E?8=mTKB|*W80wG>p$#HRL)-vkb%63%HQU^_DdK+)!)q55Wv#6BW{d_q7?J3Tw4FN7wjrd4GSdj zT8bxF@!87i8c{W-q&+2b>4UUV8T90T$pNUuT*KvvUWqXFAHOrLx~li=AN;s!-y|Az zHA5yYPNy^kdDVhegTXg~z5dY(k2B~hh2RK^NpL+M2vU~(JKs{Z#+7<$D%Nqea3~Ld z!E(6@FC>nHJJiHaGT}UYw84_2L`Reh&%0gUCYB>2>N_E}&Ov>l!VX92qdi0tpxFTY z*B_3}o{%<|IxK>8TzvH6%pC^(+?#KV#!Y$<`%M1lhhn*|FZCU%N-nR7jOaQ3tGzU606!r%4)gLI#AUcy10|Z!w(*IN36;+@XH-EkM-EjBc}T6T z<8Vnyey}CB)$?yA4QHwsV=7C4yL1sn*=FurMJ-A*{xNvES;N;e1nS(c=K}Bu_>d?E z1Ab5#udF-?BY3IiyMM)bz;D0LRdt>RJv%(vKmo@uY}YxAAj-~dbx`t+LDlwt_~jgF z{n*9KcR>?V9!{(W3+h}7I+#}%zOY_LMqZ9? zKo!WwbIUqWjj`kV7#)k+gK?eatg~D^)b0oM(xTJ?zJKVI=6}o%^F6#<+S=NWY%S7V zr9iU=+4UDP6O5Fhb$9stV|v*_-&mQrxi{_RCjzB0%A`30Yp)y)YB?3~MR66kPK}f| zLjeHC7cn=0*$V-T_`Wq6iD0k}WKqFMe(~V=GMF^X?n{ic@YPfh-KWvIK{+Ch91T;cQsWbi*9w-%kDvF#1Rd;>TQq;*q<7rfrBY5nhBcY@`i#7e3 zXSet@ul)I|V`GY4w$bEpqf(8#h_3*j-Yikj*_^q!gZYU1A+{R_#XK!7AjegRT;^79 zMJ^e$-^7Vx#?+3N|^a&M;4;7hz6qs61h1TL^FlXD@{ zUM@g7(5W9B$A8sIzT^yJkK^7FXMD(XqTv3XCIN>-r9{zf1?%qY$7&2OtEoFxs7-X~ z1&01XH8hGb+}~W*GyAU22PJnRqUgS1rYluhUmAGb>lpjt!rl$P{naHIe=PZKf1%4K z2m_kDnoKsUfWsJ(4B?~L;p1#>m5m!v_ec4UkIKj)d8&cxVub;!6-D21*e7vdwPznH zKij=TTM?qD-hB|R#J2mau5`>5i^`LB*dTlBG(^OnnB&OQGN+%%&jpNIV;Y!3=rE%$ z{4<;5L9C4Il$&k{#}_rmq07i)KosmoJRBYJE+5}%P|Wr4?Aq!9_5W0!USHO(e;|Gh z)Kr=70=bq<3riuLxB0<>w;kE>$7niI-zVS^=$Zck1{T4x6V{yS!}I>eg`RS&=u}GT zp1B>4wQ}x1qZ=@1m3axX2Ad-CC~vOIDFVmoEyLAoD_7#>w&s1F01?ZPcd6*!QjAb+3~yNiAmAJK7$Y=>d*TZMkh_?)|c^SxfC>l@#yB)m*yOgIwdV z)AjWgUnI)TgfocIRo9R5^aX)h=WaXwWoRg)+G^ zs6O~LM$mg`eO<1)F{)u{1Ph+ZA(|p(ns1PA=E^v;)(5xT7BZx8AVyn072z~N2$N@K{2EPauMwpHdoOEDGd z?;e89+b_>&{v)W^hs^0}e!obG$hr_#>>`<$Jtmv(iF|q05=?3X{+gRuDTR>qrz&kk zp*DCZ0dk3mul+>WGWYeID3e=;M+)ByF{53^*XN|%RpP|RRS=7{9DOxxcn>zqm9|W< zL%JHoZV-+a?tN((H4J2kSrK}jIKiqDZq`?HtTMKn*Fwn6TCN5pj8c+YvE z&9n4@OBqs8D`H0>t_7?HuI%CE?{t1AXBd2q(i;v6e88L(XSN);TiJ#o-Nt5V9w_af zpD?`v!$A8mP2`Qv@QuPA7%L|xL7UN_&|D5QyIL}5%lb}gMAMPK>|xg z6ANj;wmFKExL!*Ar*(Gxz7(Aohyv(uGfMZMyTZP(b~;RGj;FFAFh_J-IZ{hr%Sgkc zKe$BpAxf2sfpL<`8SkXEw#J$e7}s#=$X=!S^tDA(36*xM%23lA+AAvQUoL;?_2mM1 za5&WL2KY8hwtzn{?>gp`76NUi=)g4@VEcXttz;nhCO`BPT3}`?G}SX#D4h<2KqvQx zg}a@ft?kbl-aH+#Qoq`Qgt3ntu#IM;>AMOxGhkth<1r?y ze}4?ULny7ErrhubKa!zb31kZIDS)cWq1odE0jfFWUc-;B&#$!R-D^b+ zNI8wtpyru-32R#nlM2AUb}28YK$A3~TplqkuzjR!Y7UYF&C7vCH`{uMTn)AAqa}nf(5DK#X4@ zhnko>S9*@l$JuTBc+aGl9;F#|8X7IuM9}@ z?T^w*ikC}X26eFb|Bpku-fTbdcsA`@h68Y=<dA`WqZ9R@V<2{?!TQwPy7ooWUw7zJUne}k znuV3cM+`vw(R zbPE9cm*0HAXv`nC91@dFooO^gHjR2umBsJ11?#nRya5*~T+|b*-O}6u|7=-0zG6f*0I<0T( zx7Ydm)LH8B<_0I8lk8qJ_j6koZ|8v~!(?%%DMMoOF8sMoOqZPARNyGCH;2HU%RQQr z1q6>uG>ZqEoT>8-B|`@dAf+bok8tG!Z7rZr1Yy)wSmR^&8zZgx_*W=pww)!$ZY|;h zNdC$aIpG1(1(~!VAO*iB_D!}0^~o5%E+S}mg^vMi{^bqub0Vg9A}E|ONaEqa!G`)S zQH{3=NEkn>1|^8|ILecoe%E{Kf3E@|RA&)KX;4Nun6O9wFT96PH7`pkIUPoQhf`eT zh7UlpP{8K^EEzZ)YIK{#AGB&Hzjb&}+N8lwDU`?BL2)*?dQz zA)jF*Tie!ESd6VMH!T3BOE=n=BxJQJoN6=S4$v+P-vPpjF32>lX)+ya(n)xQ#TJX7 zf;LQaI=%ZC?&8dvJ`wa%0M>NYs=;Hsti@UN@Lq6+bTKjuK+u}0Y ztDUT5lwr@CBNA^{i$-9v0rwkCngb*dI8)q9jiG1h!Xpqyj2ZS7^Qq>Ayp3%U6~mKxvUt(hsj`xMu$?mC2A z^Nzg!F{loUFgNV?Ho64;AeCZN{<=KgDa*3pfxIcxmK+I{5n`oQmhzaKV{enR-kcul zW`m_grw`h*;zZ_px41-}iEdfwREG&5Z~aCXtfwWfANF0I@w_lmXaGgXVYN(nOM9BjB)p>9D{W(q0Z?Eo$q#(76d)QU`R+=&*>MlsfG#gS-b zk;&EqZ~>Q-vBOGkJ|46xtA_he_q;1FC9`E?$thc0C6rx7APzqB2(G%!QV%LvF}9Ct zegwU|Z{@hjfW0TKWl$@j?I!KT+AS3#QNa|d;QZf#W;l=njpH}I9#IvOy8bu)+DG2+ z25sBrZHh8}2oG8^cW)F)v}vQ$>-jgrPQc);G@ZP85Xv%ML%xyN#f4?jMiawSyu!3w z)xq=aLF+GOH8#EuhW4-MW-m8>k_3pl@?8uwA<+kKGehncqY z!?BFbc#(2hyY4?4THe2^7zU1~`tT;IG{?XBJoc;KUXjzJ&1Z zD;P=|;~Wq?g%D&~sf=o=VPU$DFK&ybz^?p2XT+$_Jl`xdgsWmP*us8At7Palu~Rj# zE+>rSYBFPq(f6uyUM^$La3Cn8R66S7hbQ11t7JjxynFmE%eoGbKSXTj+B>Nld<|(= zAO>IfWP8DAlc`QPzuDK;FjS*n=Td)UfRj-35=d9z*cp4};&n>jWP`v*0vX5~41Q50 z!a}(;S^m0f6C7^n5>3Gf(E4nD&zWqztn!!e?kBkR=R&Kgt0DvM%ue%*M4_#Kp?c@B zQHPphsv@W3^0~PX-Gra73ZD@8#CsA^jPn-%(=`h@}!^(W?*m@{P&1-<+Z#m~i6`Que^&*&se!c`%H?{2X&bnK$ zKCIsFkm|%0fgkXW2JLR<=g$$1wuD&I4Zu~|8Uhy+vIHDztQkXs0 zKJ!%-ghs)RT+l!e=1xe`Bxlf7b7`q|qx%~%dhaalCqs)m+?FM=dR^+1;fCdB+n!6v ztuUNHL#7yuY@o!pbDbI!BmJ%j$w|a@ekqtBr=NU<8Q0Nf2f6KARMxmzupwPd>Dz;| zWQL5uYZ#EN5MAWEJX7c3j{J5`s|Y9bi_Dm$q|UU^{I{d7?*vUj0#XZGe(qV z;JeM}Xs;5gLle79e=Sq_u-w^LuW?wu++Uol1g44*2ql&tOzE?>5wPWz@S;Z%ykk^@ z5b_Gvb$_b+U*IxSnS;faCCFoRy>OdXs2mZSa_{C?(Wb$)aIXoX(k8(>k~LoyTWso& z6=vduD4e($60WY?E9cr8mtXbt-K?9?=aAfJXh|<8bPN-s-j}Wb`d~vRa;encG)vJ{ z5t^o)FMyJoamCr@E5*qIZX%)Wvxg;~tkG;9ZZ=Z=uml{tmkN^yvI72(&M>nKnqhAK zk=UWt4tmikVaXGVE339;gK)Dt?)scknT52bg#mZ#bba(B&tfMLB7NkN(D$cr2bN`G zV2BP0@_E&L3OXnZWxzjKCAK-4^jD29@ccGNpgO}2uu{!1U(p-FN45lRpjCxQl>v!tAjh_i`IOvE<*V!AG0)rXP`7n zD7=jWrK~2S5pGQ+vh6ym+UGS(ZAdZf^XXOK?du(^DsrX!vxU2*tM%cDc!Tpkde z?$)I*efs;I#i}jvhG|INmm@tmvbTDCdTFRUXTs>uuh5l~*}O{n&%VV(=XYM?8j~9y zFWT<4ryBD3-3H)1tPye61y;|N=Hi&yFUkqCqJNiCWoa$?TUB?AX{LT9N`A}?KOL(C zxb$GA(XS@Q zAS}>l6ibUb$hbxisapdn102l4eS||z<$D3bw2g?Q;)tMW5SY#_(VBD9?7s+3DSLUuChlBXe757Cg!9x!o}LiyiFmSK1P zD-`t~-uXZP9(8|%6^KzTyAnx$|7t>E3+p#giXL;AoesV7^ z$Ljv0AJJ{f;eA8R#R!w4wEhPDUK^~$n@E({8*|kViO)uX9MI>(n*tvEY!OoLai4ns zI$AbzwvNBJB2ItzBEg+W>BXA{NBiT&G#W^$4va&$gy+G89FpPm7r()4ovin`6LfT? z=j77EA0nhq^hl2j-)z5E4E`b7pzwq^|GlBw%G21xcBkTJmx%iL@ZEOic43^8cEV}f zc??+~JrmOg7}68YAP^um_K#6iz`;MR9=Ov9uV!QdS!+kg zX|KFnTLQ;;N4l}l!v?^Ji1HQ~I3nhmySnWS9ey*f3(@^zjh)e%sS32mgkz4rkDZXf zp6vCm5y_rHz+IHk7EB>6$T=F^J8Km}m3ZY2ANKQtF6~L_sJFPriaWjG)>|DH5&&$N zBa)$NH)jFhxIME{EMXoF`bH_)vuDV^`DH=f#a=$*TGreO#0r~o1ZK|h{@&zpMz4~e zJBkz`Xu5V=!;OrVK+m|Sr}QX?%g6Y(Azj;1q6e?;5CFzLRvGANlLX~J_2@5Q15*Tx zq(dE=%lF>iq8-GNZq!m{l6xS{tC;LJ&gDEI^zBV9?L{{p2h?=j;BJdqs&3SXd51 z=$@M2(A*D@diN#A@ck%k!SX)pIN*rsA28>`84r+wvB{=9d>4(`fq->h>0MimnQzb& z{ybv%8TcgV-kpAh2m^+}g8@Z8K;;*-n;p^@Y!;wWGq zXR~yHb!LVJH&#IebrsixqSIHCt$k*%;ldN=y`Jtfa!rUZeOi2Rq?K7Eo-hx^G_CJ= zBI&AA9=7(8)u!93U#$`54@~|JP5h{2Te7Yi0}sC_|llb7pqXxCwfZk#Qe7i%;`QB%ZWp@qr|+ z@0AlKgd)rfdT!du@@Ex5dUD2TuB~3it1F}wYEqLi`!lk0?D(L?&2Lq0h>SH+Ay*(N z7t$joJL}h1kSt*+s^Iymj+st}*RmV4iL5`*5WZ%aVA2wM2aK|bVlM_78(~pV+@yE7 z)-&FGIs(zh1OX(6A%>d@189Sg2ru6FhLZMZ3D>i~u$(FP-N?$fA+nWTa&MBg2?)O7 zURLrxyhYGJ_X-K01}svIIS zMM}+7vuK+OD{>bh%do?wCd$)Wzlnt@~w7wD>wfpi;)8%(F>kR;_NhC!Z> z>Fxe;aG+;w-_}X@dXT3t>NdP5b8Yk77$?6HE(I{ve-^vqz@UiypzM8!9f` z<)`Rt67C})B)@~-szb^iqtlXJfi0P4QLR6UXrg!;=Y5qCHbJ4VH7FP&G5yn{C;qTS z1!>sW@XJVIjHo!W)CQo=?8{f37s^*ldzn>AZN}646GH{Y*Aj=L=r%B{?dSh{R8{z( zxei5nYz;?d4iRiOm8Dd^Jz!%xh7PiK<5_!DNs1S0uasUvcrtZnaEu!d?-b0^Ru=>T zy9su@S)8~~=2#L1Cz=)}#~x3+RjJ@f^j3Pw@n{@*ivWgHKNImg^LM-rsx1e>->KLc zLC48&67d3g_2i139WBb!qz{RHQowJOZhL!QRHr*Wh%~X3 zMUvnhSanZIOfFp)#@{@+UF*D@Z1&DXXB1vX^fJ~YzkP^te9$K?G9y!*KfeZr5MQ*_ zCUyvN^lWeP&+$axf1GK#HSp)E&sH<_s#I-Dw?ZHUC*6JAi<_-)g7sPGldn$Nm)P;v z1o21bPgV7_90vcWZk24Ndcb4%R#V7I)R*K_>tFmIPLZC}Ej2nwFL+sTsgbn*s8S3l zHaP*KOe8JLql!H5qst~KO{indtH9=Ym7Dz7&Mg2vro_;Q8U-L2XIv>SvTH_R1xGP@ z9NKU7T15Au|IS>*NVI!rAYEH-{+Wq1F+tm|=9U!AxxvJw-!v>fLHvbg=q>f;8RkWb zyC{Q26jM&nBW-SHU-yF0o(06fbis?%f6~+u03^4$l5i!w(bdzL zosEc5C8Emm0n^w&X|!bM$&c>z^1qvv1LYw1kE2ptR{g#7U79)DjcWkS}t+t`D zM+dvsv%t0p>06XS7w-vHNqiPtJG`Ebe}6@clLn$HErZwWU&A#g$8`UL;`ngvxhjJ| z7|&);{)&j!12$o1;T-?~609A7SiJ15_Tie=0a9&&wb&Ae7g_Si&kgHdv>bX%;s?Y` zqWe`9jVuvB_NDCwUY&Q^%V?XGLXVw%e$QI^<;kf5J`S2)UxyD3Y{wbT)~LSeM!b;e zzs1cNm~P7@_g2nj|5lGy4TT?pOlR|uI`wRKyBoWeZKAHIgsd05IMD3G6CLmiuF&;c zFK&=MdvW$P+JNQTcVw&&6YrwsU`9 z(i*H0PD}+Bx?THwD&9jbn4VYS8XAqqGpN*g@4Mdw8W+@IL*F@9yA0RyISZ|?P+Q*< zKn?b3zW32YQS-q@TWh>{-j6MMH^=}kWzJC7A*&Xe6CxTrcLw?sGguO2<&SN&tF=+M zk2TogzgRm z@>Hyf*f3za4D&bW5^UYsZ45G9jpl&}A{EUHIuZ(Cm@WW#SFp^L@GpH;A){_h$Q5Yj zWC+Kvf!sR3obp|BYT~l2CO`P#gzOb^oT{+O=`VBZ`7LiWdt#wB?F+=2eNB8b%d%rq zD38!BRV~r3Y5IhY%>a6cdQ~G2*$Q`GO(yK0$=8!AsVA>uCmQr*{dT-hn@ZEt2J&9~ z9x&wwky$t0vp2%?x$HX&P$^!eF~T9wzOZd%5ol=b`k90^`mc{C=XNMlD1!m~Ww>q@ zLGw$SaDj70=+qWmF{eCVGWjUEpw8$K9u_ON!S^$h=QO>@2JE2v4?3)Lnk3D~8;jm4 zJ=M|d5Q(-5Q;O*`RC=gc{w^itx)o;DI+dT`g5n$%Wc2rt#VHvTjL>e5YvLWDFcry4Cw2UvDu2ct zx>Xt=X_LEfxGH$;9?}eO3Nm3Il#6gay2YDT7hN!_|pJxP~L2y-Hzn z6c&Z?7c59IQK+h!fB~>xsWZvS>^Od;Vk?++w(jOG#FMqXN;C6jkUtlO3|vfsaY9A} zAQa8RM#tt53Nka8-u_enYw39v2~1Sp&;NY3F~-l?jFh z?(~*QB3K+_U6``z?+4#42#-!uq^yRvMmXkXNAc6ORv{FG_3?U4m@y)Xx-P+d^Q&xy zCY6jpCuDnpd-(EId2bLfzpXca9F$Dx;7f||j{;ekV}nZihQx~AR*l9-F6U(727Dn4 z>grj(bj{3ggUa_HvghKBjBtY0<}7)pSdL*ZuWQHjA#<5b0@!Ygt%ng^njYm6F;V#;(^GH%QNizNl_YvD-0aJ(QToj<4=r}*n4DT zr1i^W=gpm6PbzW;dr#YN!j}mNrW(HGGzP&I_&)mJlHV7r(;Sd(ji^}HBx#{t0b>hN zUCsO;>B>-f1K%^)W#X&kfqM#hf7#)$&(c=Hu^+ypf(jcHTxXolVd7QixE5% zD2zPupy}q%HSmc3wFd*gf=mhpleX1RmJ}gB?TLYAD53D9@-H)LdmW?bBELr;(_m(0 zJ-*!?C~XUVMSg#7@WDrY3CpaaS?GeQ7nDEExO**cL1grM;cvRbj z_|YA}48OeaWjM7Wju5-()g6S*^tU~?YAYs2qfWY95wWFtwlgd?ql>ctJ75}-Y+U*J zpqE(;^j_uy5eyuPwhs?JhvojQ;mX?swtpXW7c!;xb{dd4fVu#iCcwl# zV$fUfGwY{Haf3S9PP{x?rtmUelgE(y7S)ts|?6lyTA>tYuxYT?5bizXS@zyqC<+uK*-U{4OVfA+kf8mLH z7up%Man{w^|B6roGQgUHrIC@&dz8C)h<;FrW264eJVY6cYo~;+#lCu_49mvoRBe2f ze#d7o2-s;y8dO^rV}<)q-|U*YB&CTA6X6`^4ydwRjOTo^ z0+zHup55aiJ7p11ahL9oZS^*ks^|E>n$%>j*dHC&3Dxr6A9B`uZXYR&h^`PF5lt$`6S&eQEPdI^Do8b>t`_H%|!L(7R~`3 zo;_SH(Txt4)yE6hk^ppow4vcoUaS_|qMt4V1NMW|?{T8g2es9dEJL{cOnymOHTf<4 z=XIc2_nZZ5nPz=^Ru^Rw9HTp4tbV`#%=kN|WuhC%aimJG;5VlrW9MPdRQ$3i#`wUF zfz_9v=|_*{;w=zem9J72xvSHeRd)-RwGWC%txi%-N5Jn1I2C5;DVT5ael3u&VpUTQ zOeKN|@|rn~;Cmll$fb~SZBqZ1*RPFt=1sBvrFBKWBKu#^dClzK*3U=09PUQ7Wysz6 zB;T0faz~9l_qZX_UU2@6<%tMIFJ40eek0figS$`_6@}n!a}5_Y&UpG+l~`UB=*<7` zYlD2f4eN9fO)$(F(JGj@6>x33U{quJLOZmdhY)#z@8NO8Ke!UVeG%PT2gTSqZ5!~k zeN70f!p_OWmUR{~ZBi8RILt}|u%$Li!M%ik-rmic4C_~w?{jI0GN1S|aCjS{a|&Oo2jUf& zX#;*ZL|aqXq(o5Hj&8fu-X$VQ1PF4N2?|v9_CbI`AzuAx=do{@me@^%PZ-*9Z!{%O&j za*UJy3k({jn58$m&ubZ2qdwuIE52sMbK9^J-0~P2f_ecRRK>O-vD_+&WVESR)#q)r z^my;Qzgfj2BY3R)!UI1?v=>fkM4`PA4X$opD7=lnB+s@aOe)Jluw>m%)H`c^31n?u z*jccnyl5`&#gbhbG7F|c+MM2u8E-@3De@=A2Juw|EmU9`yNc<6w+?^pY*rAIP$a9+ z1;X9ZXK`-T{{xL1=)>2#S+-{LVlJ58%w{^GMNeIPm`s&5FRinJ*YqBX@>tybh!e@= zx~Nr9>86nJHM}ZJCVWa4@EiR{PhCgUDzKjg>R3vFQ-F@!H5D)MxEB)2y>1RP=@m z)rlytOQ|g$D$`fdb^MQP9a!4t_#Y7yvHKQd662TgAyi*Hw2yq~Fs&QkZa%m?x9^N& zwAaMTsEs-u@-M6Eb?&fZcdHiVC&x18zJ zTg}FToN>6+cm_7mfm4;aQHWaTHP8Tg;?O=#L6w5@_Y@(iWgoa&8%IX8D23DbwVuiN zE-~BgAh=%weu&^e99lxchCZN{sUu{05l#-;^$;CJD}6DCG2>9=@p_4eNDGVw?kTHg44`9`D~Q3xGERS{&trS^O#a z3^lMPlmKjsI;;c7WwM>^kh8r3SO?_7)bFW6kk)}2j}YD;z|4LFZaVs-9r12`2M6)^SZ0Bcj*JE3e3zc|oJ3OiWblE+KrF<2OdY z9BO-w)!N}EGaJj=LT8i3dGv5{YJjFSKVD!;AzzsNT4RteNNc?3yGviY+CPnq$gNrn zog-w_-m{K`BF${Ipr%;wJ53h18M(DpwZgI@9Z!rPP`Y%Az0l_|-p?1WXN{iV4AHFXJhZE;krGSZPei~5)amuw&IklAa zBXr}hnC+=)mp>P(GTfG3^bBJJ;Sk_G0&|+z<9-x32`ca6??F|`J=k*9W1!=xg8$c^ zlKojLNXign$?vzV%#wcAauUqd&Ezz~_`hMy_xFYq)@q+`gf?r*OOeD8%ril89ES`1 zRQcm>_PC1M%r*|$rj)pVWd#IVhU!P!y-%(R21m<%Sa$6d+$t?w_j{ykwhuD+SWj8{ zwY4Jp=_7{4$FRHHT-u0oRw}j=1{~O z+Vve!P>QQ_wnVfG=X$z}mg9@8v=wY%UloanUpYZW$ye8HlZA)TZkf>)dZU`Kec z7f($Oln!UoQ6t}ZuB3wogAiVuNnvHL-Hfew>8IGF5R>hXEbzVn6+cObbrfoGytTUM z;;FlgHW&7SJc0o_IK{`u6@7-&JJ7TwsJ)4;GhIF&@F38G=0fO z9*OEDI!$Xp7{LkOaGokenhD7c0e+C80J*DdxpNCluh7E5rx=|Esz2Wo!w-JVFX+)- z2)*DOI%X=lh|XW_D2kmI{MyNDbzmd&<5gYYCU!0hxZ({6vf=ttnD5;-_&Yba*AKPN z3aD;C-o8xQFEDkB6{104K{rkd$OU`F2Q?RPp+OZLAger#Q-ENm!C}#X^SruUu*0_# z0B=-Rf4roEF+EUH!~qGzepgVN2pd>C43yp8GU18)EeyN^;h0^RKUpl61!e1&HF5kg z!F%}S2ZcnG#?MTwNm0+5BS>u+=fIhMM0{d0SlejL7=KCfWxH=W3Dm^YiIJooyP<{l z^MK9CM)%aPf)eiA=CMG?P8SSVdscRaA6e8yJ2Oi^43+xd+Xs#UduUzg>GLsWaJUV8 zqpjH{MbOgK@1*CGN1lOySTbw)&pW-joNp1T%GqA(dNUP^%5>(54l3E zCvVU6HoI#K0-pJ)d`+-QvP1jXA-r}X6>3DH@rJz zVatfsY0yYZ!(1aRUC<$jmJut5aAslFp7plR?XL8+cg;$H4oK-a5a5Y?kPbcBqc+$r z_2``1$C3zTl<#u6Dd8qCn9yoUZdzTVt}}<|P(2vPH|%`6M+2z29jN-am>1&{k)EOb zRMLigZx}0mpD4V>+AknficgM} zj-a@D$n5(5G4(hKrNNA#Z%qy3Pz#gMA{mH|;Y^HbSV&=AjrA5Y^b#5AU>E51ZS>&& zP#oS_&oaX6N>0nK_$?mibn)+b4i!rHdGfafQHQAs|3av>Q`2? z4yVBK4YEP4n@(BJw0HMth9TD{?A`h-l@> zqASh?5~r_h*a)ER+LfW2#r&_T8-H>Z4hvo4`KQ8G>KaAllg+ZKM5J-@7ugd?hcHBl zSjtH`$sUpNQyfEL5lPcee5|gW6q71hT#=dMG#YDS3_q2ajqUbob48n%oT+3EuUrSj zzo@n9o;-CJKSFEk((sh$OD+i*+m_J^jFoJyH$9)#*w-Dz1b;DDBS4iWZ+nMiHWlxdWC6 zY=qTv0_GD+)vI~ehj1Y_o#2GV@T{}V0}Cz3DG4UciwWyjS};gyk8%8fn z4f5Oa)Pr3_;4r;zY@dDcEc4A&`t|}%*4Qdf^q3^3w=UH3dX~C+%)^^N`GYvU+z@6k z;j>GH-6e;{{I^XsGI=lohTGVX(*!q(r6gBIxjk;r`TL+DHlvoK6BOI?)~Jj3eJ@y* z%G|7QZL@r0An*%70mpXDV|?R_gf896n>R7=7|KmzMlxNU?7ii|5cTeDPc>;@o5-G( zz!*@@MG311F_GjnF*IPqFj1@|%=~^2Xq;dRvW-oFUi88j~W>5gM^whn)r z5=d6afV|F(x#50r&VFr}KGU!DuYSCqiTG+-^2-aKm{~B@K>whiW6he8U;fe(6RL>s zcGS2IA|erAW;*llPf}$??Aa$C4D}{!aQ2z*TxTmxBeLs)31y9^Z_#>|(?C3^@FlRb zZu{u{9~6{A1w8kYg=5y5DZSP&Yp1%Z(@2ASZj_+KQF?KxQ4hENsGgI*Wtc(<+9VUf zCvn>dEsCg`ZJ(cZy-!WzmqLm{J_r#5ef; z3;SP%3)c*paZUZgm%<@~xb|Lox#t^AEcRqsR6Lb4F@k7Gi1h6VC}&Cn^h_lgdzQcU zlZozv^4tVBn})N0po0%yPrVyF-kBmtT5$?}y{J$~3}liQPm16bj&?(ULdzJ|EO=#m z-ZM&$(fX2NF9mcDX6Wzok5Ay~{hqlf=?kOK!GNwt1?!3|SGFC!$~W2!pd zU>TVcGvq^wfHXc?UAYD8~ zg96|%op|f85@qF7EjxCm!>m**0mj0H?X@2veMEz-H%RZLQMX{l_5o0ObOd+7Me!HhhCw;`5_}X6 zC_`2{{R(&jo9!k80^CrHPF$%Zzf)<)?I@1*G~L6HFPX>c3<`U!Zgl)}V3-=8Xd)T5 zlW!3CV1mNUwKhia(Ue=$?LZ^-6=8&&-JPRH*MJL!O$_mAaD{M>HY77c?4u`2Y97DN zd}keKCHF^n8_uK7$%}iTkW#;_=s=LrGTW36TSm{@Y1W92lcoGp<{39wUs`=Y#&z)@ zpaPY+?2JfpVSC`(Aq1{CmBuryO?2hNBK+yU*T;Ij-{;&ta#9-;LaV$dp5Q5_0Q!+y zD$$fAT;5dI)Es@?QEzPCD0e&2wy_A_Hq75BeEx$Axq^jO4@{>w6RecsE9p z2k?rN|9A8=CK`)8r6FEOUds|2fJTSyo;6*Tqfp6P`7oJXr?~Xbe>IO+nuqKyx_GVHo?eygyB@$E-0^ zA-Bpzl1Yagmmb=BozHWhMPD*AK5Bm;H)RzL6udAoV@(yh;;ZVKv`Qq;x=u7YR0mnLDax3r^Y*s{p4Q!=Q{o0YxK ze1Nw@kUlJ8{Q6beyd1}mEY5Do6HB2GZW&W1kj{Uxu3XW-KtCR3baef&alnsR$!wXU z@xGDi$(naOL8?2P_?fU>q;%!zWe_+Hn>kkgDSv|NKgXeKKu3Xkf1>NJPTQ`f_DV0~g@Bx>`(<`U4{ebGrH!LB_t{|MQni zpR8&KmF>!xxWhTb`s5)15>z>D1X;bEBJbex+o@y8(4hGZ+}ac}C!#X>%1mlPp2UyX z8_*ofbJ)`bv=V0m0M!APJ%(lT<3t>(9?IT&hk<`+<~|5DB{sckI8b|R1QOKvW~GGm z+6Dtdb4}|gd1Vmv`OzF=%a0e1ZO z_@9|iuA*yA*lb0c($M`vB;HF8AF6Zwg>gp^tB2Wii$X~m_LD5N9lpahH5G`D9*v%B z(1EvJg8lS)M6cY7Hg_?}oBnOfr#}2X{K9>5NkzYd- z)8;-h_&wO%QTB~)ggBULo|vJ|g%D)K;_rLu3Brw|E5E12#8BZS%^Ps8 zjxgmV13b}9rrC;xSc&RVNc<0xaf5kT;iy|qEAE~BN@K(26&);`+|sB9SVUTP%#$AE zFW`-b@=5j<|DOzlFmp!uW{8$^%hpqEj6_mAP35FIpr%Gd6}wxdZ?6Y33`3kF8EGoc z9||K>Nr8rt@iFFETrA7fuEN)UV`|dmw?X24|K~4RiG2H7^Q}KGFqK$mm{k4ILLgmcGda_K;Ko- zSH;!$$|+O_y{pMs@)c;pq4^_#fX}iyWxPbKbQYFrG2dJBwTBT<3lEs7Ee07pz>uiU z^7#=j%aCaO?=PTt8t+$5H2RJ(q9Gw*azHs&45gVjS-tqC9eVEBItA@w?YSKO$w!1e z2&GpFZinf*a>RMgT=#E;G3MNjoa8*X7HnK$32wHdXHZQwdK7p|VC2S;$=M7K)VUJ* zLzJ?g76bza$6I=_VAZ8LyOio%zl6kZbWj4)b#z0iLengdS*cLRob-W5DJ=OjKKO@} zl3Au}N37CTN2DQ&Fsi%7p0(ljKgCKkBS$@ze*>H(j;qzRu^E|}nlw-pJG{YoOx4KQ zUYtAxVWd~=b>hHmEOMF=&OEsYQ9IU8Aow4U7Xyl;A$+k(W!TT3=F3o$b^}Fp_x^~t zcI+svxY@waOT5xE-;b=Wmht>cY6QP0l;j+gv|o=NKcp?n=2Kf#$p;{2=U0`o!Ag;k zNjqO!35unJs_A4&AN+6nkz#Z|%CHDfPNJDGFuuR0jjRzVAh3%7UXjbwy8`{**PxAf zNnnUX`CD|;WH@Y6Tkkm)vUO@4iK#sUI6-Xu7!bT`rA@LX&_yLbbZ?&bSS9qEVRf11 zA&S9^3P9bx)e~I*z)FOXqStG!qSF|BZ^sM`&&J6&>BMz)0P}o=4ELj?ICpEZLl64^ z;P4WRPJqT?t^%r}{bEBd(3bIXV8d3%K-k~@WFN_s@U5N{9lV?qQ#lic(P5W^fx&~K z-Wdv}>1u=;4)kJa9*GSzsr40CuwZpv<6bo|sR92fq;RMFt_J1@#G5HlHO_5o%L{qV z1#e8-b?zziDnHG8DUmsE$sdh@NCT@O!{UwfOM(Pco(w5U=hX%Ou)#5Hy_z0jo zC}jzZvIZ41Lcg~z+TA@nk{{o7+_ZHSoYU0;ApQxo=T2KdGk4A3ot$>z*ZS_Rk*9k= z7hyXLR%_*Mo$&9bE^*iZnZK`yxDvsU841@h?_ z7A+_4gd7+2MDW4_lMNXlj!=d*SdX0#_jS_pcSmLLOqL~8+Km%4&GOogeefj+;*sRz z9BH4skG1(iP7W!>{XH)4qNfT3UYAZ@Gp8K%O7YVhVxPhlOO6a2uC61zLmX9O;@D?X z#xQ~^_l?AB5q`x~>iQU*J8a=NDjF}aP}$WaFxJN*0Y=|bWpfFpg<9RaJSJ=q7r~Gb zCKh}}J0_+jZ_*5!?&V6OvWmU8IZ{zXI8R-M%$OW=wGudlfaJ!JPl^ur)9+lze)2Z4 ziHcyVqC>_fkRbmahmCK{LPd2Z<|Y6^UjAgInQyJAK4`eYRQ?k&SghknY4xQVOSx-6 zCABLELaXQx5@tzx&rKpTlNk}EI$gKFGyMILDR)c2;MkzyX51(4@f-+&n(w0j_l1EB zcBvCoZCjc8Kdsq}atl#fYv9yTeu}a1<=Iu9q6^GM6~toEf!=Dr@3Li~gWYHa@sjkk ze~HSX38ckS|3qWX>Zb3Y1!>Z?v`i2XJMWrur7uJlun1upAN}#T-z*GmR7)N53akPk zjd3iWV|zbZ6S2!&W{C44OzzP|+{2Wgv0yPJ(hyDecTbaSsAaf+3Ut& zZiF)pKpEX!CoaXg~3hANNu2h31YRh$!p z@8rx;QOt8ppi$C9>j%S=CcJ!j8~n?89PnSyZq-W-ZyUz5eq0FD-J{c1ftK{FhUCG{ zE9t0a9ZKmtFU5duy==rRh+!6 zINuPYY4Ve`#7Fg3W(3*$p}$%~j(gG5KL!W*#U~J?YQ@6nxM^n6jgH2<(c?1=Rk(Cw zxoPky{~Xouv>}W{z1rJfB#q7-yK!n?2FroP{jl^=eIlE~>y^xN4T1?VZG$Vo(ms^I zT|x>#QFX$J1PjYVP%^EPHSnF2NcDM$T6Jt-cwx@=rBCJJ{P;Exgr07A`iw|uGWMr; zdUmE(-w3KI0b+lWe#2@n9T_Ouh`rMv>E%HG8KhYSur-g^sI>Ww{r~nD$fHf&D9$68 zxzOpKgH4b_W|S`NeB!=`_c$FIvp$NvGc7t97xTkm<3Lu6t9MNUp9U3Mdc>dX=o4*k zus`bH^dvS>?rkocZ4pZvl!*SmgffBwc7)PH2tM@*ED8j9c@(RZrJI)!2G0?iK z2FAjkjU(|K`mS;LNpJ_5q9Wn$x^O0LjwE%S*R>W(rX{JSRGy&5mE!xw>I%kWlqlr$ zA+T4T0X+$oS%EvDN;~lnLo`OA#R1g}i-TkliXDTz#MVVx{@4>|6$D00O&kVQhm$sF zpu3`u@r_lVhzgwC(v+*w;T&ZYfi5Z6Sj2ViCK1Awl+R7;DRP8C%&Y?Sh9#)9q4%k#QuM5v&@3!wssD;&@kYa zLdyLLB7$r3TxlPC1F#T``q;6Ipv=g-3RSYZMHfARo^r1-0#W;l z<`gNKz*dLcJrIQ$b%p~qM7aO`Pe=)1J3~8 zN7W#FNFiup;J1BnEtyvi0Ne8k^{=7Oa|NKjtQbkH^^b?ZU8Q`T-ZFqD=`CV-UNo|e z@b-LRO}p{Cr>@!bT3G*67NhdwY8!5+drpSNO3b%K5Mr(Fck%`Mjzr!qrp={-Ktb#; z`N+WBJDjr*B)*hB+^r!2#bhfve}wf`T-vl-c*> z>zNbrz1)YAD?WE{&l3n%mJJk3JL%Jt{9AtRmJCQ%qh}Nxesz7#!NM$&jjk9&g%VtY z@KAs-=>146?DvHHg!$lUaHUHYpeo)%2U`c=9BIXpVfl^%hr) zu`{WHD@GuD$cI71Q){WnlNuP@EF@a^qq3eGx7qV=T=lj4_O!r&STG@idA9EyKdo1c3ArT_}I6 zic3gV_{gBWyB7!|#7vLbS|6crYro$9v!bOC~|sglS7DJZZvkG8!$Pw!i#*Q^E+s)Ji_ zj<2;Wh-a+`yIg zWl;NSsUprGS^j)zt}kRIMU69n4V+QgC2FMIqh5Q+FjhD{GjIcK$`yG0UTSDr<@ga| zG#|*n;fFj9$1AqcuT=iKML0c=p<@*)R0R3^Ysx736EY?TGP3g7kUBV+IhHFDk}&hE zayy_e%zjkU2{a^v*PM~4s zgrpNc>*J7~uRLUS+d~mtg?UI$wV^^ZM^Y#f@kVC64(`67el+n5;bZh+(9cmDW-M{q zA5c}3JLPlSl-=%0fD$;CIUmM=4apV&PIt;Imu7!pwk~n9$fj8>uD4zYI^7j+Jb=>< zrJkAOMlJ_gs+DE-hJ~DQD6+R?6gKBIJ0xwFLdE)jY}sinJWpb!H~&I~KyrhOtM?EF zo?tBd;U4J_Sq9tS(KLZ=@`cH9=1nv@?(dy&)D1*3i1paAck}WO=0ZKME5FZHF1-~i zW)(9ceLHN5{Jkd-5?9ta0CdX$cbaX8npn-|fLSDWkOjrN4Tb^5m;ve$)OxzdhuP(i z5v=riTEwB~R*uwkk!b-u`nJLEV=*sBhUAbd-dUBLf2(=*BP3$Kpf&TyxlFNiwUdN3 z5+X9B1*=MCq2&ngXWM{FC^NaE??xkhrfJ+1UJ^yaBDQLnyaT$e%$i_ubec{8H6IG^ zPk~<;H!~SC4ac=gL3!6jmto6&*s?HbV#i5bfoHg4`y#q63=MFYtrsikR8oJ&vcwj2^ zx2@-6U7!%ZU{JlRvNitXygG+S_Xr%o1BU**;1qn~krjhR065eauEsv%a6v?cuMOc5 z@ADEOLOJzpL$*+WPsMl0Enf3wONj=*Hk#g!*?R`BVVkaQyfchC*~rGy7C*~L70x0p z93OnGB@3A1THRzov}oZt)%7269EH7VvnDf=)5q7U5jy$20n>&Ys$CJQE6z{m#@c7; zRx}$DU9`nHZIwi{yC78T6VP|S#{XrRFMZIoSp^uE)n;_&|jqI^AweObCA z!q3yMEBWGf*D59W#B&#iua~Wc*~}!+#~JKY1Q>EjxrBU_u~J?Z>Ldgyc?eTeXPX`1 z@$)nGc4K+EJ#Ms4Z7IJpoVG-<NdPdQizRJTyl8>$hN;i#(MOyiko9ELV5fZB&*(b(Q;%uZerOV(^gDFm3VuQ2(Kp$iabW#X>+T->o{EC+opgu_1=l_LD#O529+l+c)z%eY z8*MQp&8w><%p~Ukt&?C_^jb;@DR_HF5?I(D+qbU=Ej~1~8a%@lLt{{*yjF5R8@{Id zzeb3+{OjQj&E*U5yARqOxUM=5sQ8h+ONrj0xX#z%7pIs1>@72UPMI`qW@Iv9;x*rp#w8`oZ~$RYf+wOxo0xiC4SRn1Kh1yalaUv6 zm$Y7u8D-b7SGrf#gA_m*1QH(#5u6ZOc4A(=tW2h++3n0X$P3nF8V=nsV46qMV7};! z=yQlcC#-UiO@5gaInOPDv^~9@jg@!(Qac16e}O*95&xnj zE$}=P{R{KGvE|W+Z5zg_)VnM>z|eS|!El%1%wzOp(zA)S%?lf!t`N+c+`PaOX;Nmc z?VJ!D3H#pd?2^3-bwWq$EaaH3OunYYeK9C3{DAda_yF$ve{)F~YDX-Wl_470@W*`S zC=%W*Juz!HfE3gN5XasPX7GgHih{F^UUP>HIil~~z<3{IBs_gN2IxdGlZ=9BJNe0A zRwB`0XjVv6_9u_HXaEOKfLF4~Huk?p^Dv7(Fw8%@dzulX`(sW2_^<=JSl(^2AS2TI5cJo-E5&vaD2)4po3=%?1#uRIiXWD9!7zq zm3ONJ(IRB?@+B@gPDonJ6(}~`Lq|ThjW}5L&AXyw*k5LC5yC+p;^b^7>d8cYYSMoQW8(Xd}0bIOOHq%GhL%chUpGSVyxo` zu9lt=l;8lGPaet=Q8^T`CGAl`kc2=60Y2y|DQ+K3w-qcLt5RTZwE#b$SkVNSlkvclr) z^nysto1a>*ru0}8^POg!>qhQ%uu^=DO`ZElz2lD$o4MevOMp{?l$f+*Vq`VhtKKYw zWkU*Ks9>{$XagO%Q4aY-Gx0K(PLf9t2zMEE30H<6P-lU+z}nZJV=Q&611+bSqlJc|#_jRy|%M zv_50~cD9PV{o;n{84O&(jShDM*=MCb(FCHx>2U~|I6YS3Kpylx&s!1W8yt=9M9)5(M!jzUePMm#Z}krx?YAniu<+k6~@>^(ZiaL{Gq_lt7QO@tla z=B`n$CHuN7Hd3?ZGh)ui4OqUgv*i7vb28Fqt6MPLm8ardL&b$=+m-eD0;J57|2x$P`5uN2=ht3YFJeXTq!$~{5(?Kv0dxzA8DWjt)eC3tNBq5VF6A0z8At8 z+crut07553)q0ZYduw}`wq_~t=#iQTEP8#B1@xjIO(K-yZ{~n zi2o)you?)*ZOnfT&O*^h1jMGm223qFmYM{X4y3T14J&r<&fcE%On_!z=!L#u6+xMJ z5A#DGsaYQ+l*I4ldhyOhX>1RMe5%HX;Yq-{cSa6S66?_BuJI1tjRJ%>LVsx(&Y*bG zz8i4wmlv=FHs%!UPD8a=U|ZPfb`#QVoZ~fyk1L35>D+x7Byb9w5%;boF7AV5c`ILp%9;h3 zHwsGj7nsDEzF_HFs+f@=32&IRfU8U|a$#}z)c>D#9>Ah1_j(gqZkb*p^0+8!G@&jX zTtX>}wd=a0CmXPO%nauei!0QBnZm+VzKpPT=O!k*W{5@lt?j-XhFsCqzcq;8>tpHT-j)V;%fSd6)t*Xh*J_odZ#};75Z#U@J_NNF_d=btt(VcxCIOI+D4hn? zbf&@t&5Y(vUCTnct0dYyd$|!7^hH#jcl`2@uI!W=1xdD>vT%ny!_)F-oGF}iMw2Q> zLn9NgKEi2K1+o?W8vhE%g3%p>H%IEw5S-poe1oJia=Z{t1i)m0 zohnq`sD4tylAxP>`&D4ySmai|=opHNJz4@d0n_iH#g|Guv5cb^^F37l@ZKN=#7(!k zkmrsQ9r{S@9Sje^KDtDttRfKJ1HS}0o^>}gsGPG;`CP+Zf@Ei5{;=>OYia$S#8-9r zlVVoK&jVF^i}Avc4x$8*-#;%$;v2^mgcGnQP|^hc=R~9?@>1mX6H`|HF_`{YmgUCl z&6&1Dz?PbR_Ij?-8u8LNG?Yg9z&FNov7(z2A!cJD5y$5xM(~B&K*OX*O1{TaKE+N~ z1XsP#Y5b1adOSrDSXy3MTci_xHqRBoi27JE?{m?P-L6}(K9Wrmusg{sC2qq07oA^> zar;V>5f@9RNKt2|>v-GWT!T@}(fy}Q%vG~(KRUKVoW6tr6RhfWP8yIq8O$*cYg+5P z=5<|}#NRdACts4B72i8ZHRx)`*~6rPjcD5hXrm4W8s@LrwL_$+3}I@Go zhzHwOP|t)k$t^06NLK!o)qGi5v)$nNzhmy+%SkHL>p%th9()f*RrAna((EZKbBAMI z3K6CarLX5d3VD;tnJ%shH82JpZO^KQ@)gU@K;wsy1lro*Ko}x^Ug8BQ+r@5&^0|lD z)h{hJ23(kr8;rV&ZhTGag2}D(eMbxK5Y^#vbi4W;tNqtU0(Z2ymLFZSXA2>Pw#+4? z%Yk0`E8qPFiV3(IX0F=Nv<^f>!HTAF;le8|hahHVMGsQ_Dp6A5#@!;14OJ?9Q~20G zMzMeRXZogxS$M4VndR5!^gjQTcBp(dAXGH6skMKSxW6ps#SEM|^&CK>rKdjlm&z~G zu~@dc(TbEkW{KaLu3;8~>K)w#d;gP_7Y%4q*MJXn!_F&<_fiV4w}^W0tMM&~l2_9a zn40WAQ@_lorPF1C$K8+}gJz(b-nhY7x;{Uk2#&^1q*q$=vuR6izP&I|LBayX39P z*`1uonGNUPft^Kz{UU!Oxa3*`~)z zppG6X2e@E7-JzV`%?q8Zk_S$NaQFT#9?Pibv;{w7PjN+!yv>zVr#chD?=+&{53Ja> zA@e-<`Z;X|YEx`$U7!OF-tfMlrN@I#27Es<=gx?f9qSTty0sn1OTcErn56q4#yWNq z(!v+=&wE{y%_hcxBzE7AS&ty{qau8=P)5%NR{jo8{5{m&`{tnQA>X4v=bfMX7S3!E zQ1}5@ciX}gvGdoLY10N$wE+*VL+$Bx8&mC)CEj>~<1ce`*yrQVH@&GnV_DaP4_-ru zxRGqyV$iZ+>EdaPR2MTZQv2Q|;KxA1O@?AG;~MkxeVtH+6WtT*JvUXy(TQO2H$$Kq zMH(Z8^`|bm$VaDmKBI6GzwH%OVqzeXTV_2x(u?;VVFU3Z+Fu7mBrwl~`^f(c-~CgJ zLgw)9FaY(#Ax)I!QD#NYQi%7+19XsYhCGar%QgMdwDerx~fS=+)WI>%~W^E9K92_k!N#YRpSAO&P>c`RJr~}>h13_7V^UPAo(V4 z6{a5W4+t)4b;mZ~W9RZxSXgaujIE(ANd~dd)=Vcpn1db6^A31PadQ>X^;Y(}h5X3_ zbg^iICAnY%yW+lP*RTw zS?$?64jMEnI4-G}uf447XEV&x3N{(T;PTexi`wl9l9F653tAHArIz=ic<&V8dk`aD zB#;GgO;Yfc@#811>Wb74sG@~;t?4FEDxpG+G51l!`Bo#eW^XFLSY@4A5gcs`y`gX!*6P2*Wj1qZbt4JQB>VH;D`LK&C`1*m4zy4 zDnX`g>O9VndNssjzX@b&0WUNG0`P3$mJ;USmn6Me&JB}~e1p}+@=B;%zjtZV4cIRJ z)As;6A>yYjxuV7V>jhm(wx4k=ET!+2!EE;$U6i$%SATBKE;z_+q(N`F`9N3cNi79$ zEnqZD+W>pLcIHCyiPrK7BAazZ``y-x6JY2RO;zpF8?!f9 z{g~rQ1g{lziw_t&i=4@eGQP`wS=T{bn)QL!5wZUWHBJ&odQ-!=B2<*WVkrd{xQxtX z{=0xdXWj3%r{EEY%hwhMmVij=s7PcHD1ZU^)AvZ}2)Uom_77d=XnPlwwlOrk4CJ8p zhy80fpoC~q0pqBD%&57Pc^ik%&}b5oQd?z>MK?A!l@#;*yF_rv;b4ues*qt#tvvdj zo^}Vq*j(rIUSX7zwhC+F^{d;J)13G5<^y3=mABMd+6#LrE2Ld-ZQPVmWuQpVn30*; zr2|l+OXDAs7zZX@7$T_q*x`&5OncG5PqjEJZqIvx#=#tl0>DVN&kM!;|%(~ulqDQ`wJioY?55M4O!BSY_IH$el&QlzaNkF-gAz&Ctcor7%VE#7M^KmLBh3v$ zBX_yuBuQaDI81|Er;dvn$)GqEQlj}6hx-nJ86q>Xnf&fCin3dX)DCN5xpGYQ?JEdc zW^&DWbv;Zz@MbB2Z)-O#vW|lE#JU?4mA9uRLG*dinAz2|897Hta@6ys#5BZ8oadj2 zKf0;942v*vLoo)j7VUV<{H*@k^+->O72Pv!s(_iJlG`%*vqgc7lAJtreStu-3o-b% zK3@6;y&EdE-zP$r(prg6y}Sm}+@fnpdpbl&ksVc%u^Q9evNBxGoT;qt^zxhOc@!2DNQ| zuWl={549S?spb@F?#_)G;tOQG@qZ^Wmp60-{=>2}(7xL3?P)l&@hG@8+UNNrz=0GX z!{BF_xPLD4;TS4#l)v+zQE5E_b5*?DLYaRuv?|m^Lm+{%SwG0|GwCu>+C=k?uzt9Y zuK?5LBqE#5DE4R<@fJ3j@{n?rUlR=HTZiHuvA^%lZS*_Cm#r?-j{>Vpts-rV#@gim zwK0ngN%hyF-rzj><7mMXPcoq!7T2+`Qm7(2b~$z6z!cA26I#&NX>^cDPu}|Z5Lo(C zFixk6Ew&D!JEMOSN1eDxDM!NOlgTFdR5v?|(cFh~z&Sek{R0|33e&8Gw6f&=c83b* z@hwR8koHiG^ZmT?&zo5ys-X(20F`0mZg@K-S#tA>iwP=TIRExYT=mQtG6(IEuN9Hk z`jw4TC1S=j&pD6YlX!xvUe)loWko1rQNUy9oD^5kyKyM5@UDF8qoiIhkwN1zjst0L zmxemf;xZb>`cRpar+`0zPCjD&?(RKEmsK8mk}*Kd_}eJEKKpT1G`hRs(^*18mi}vg zT+;p_8ddSV0XMiU#3Eae2rUeLGj=$)03tS#&;wxj`0ER|pSBkBaR;%Cz5;7@B>4 zUch%Dn@hKwJ9>PK^LX|qx0LcNYDaf;ieK{dqHr4`^p!)io#o9+t&!qxArq?$%Msx2 zG;WE;l&mC%NQr2a_mn}t_bF&BK{I|J{`AU=LGQx~=FyTHCOhYN9FyKef<7H#y5vKm zv0Eek_Yo3kWE72Kv#xa4$Ab%MJyjc!@Ml#b5H6voN)ft1V!|>YwnBcPE^d?nzwB2r z$!x<(P|PtHxR|qGRH1@w9x3b0{{rrcy)9S2Z<3(-3x;|5oWP%*#Gd3a;Z3xNpumYq zbI*MhYuGj~7MDN1%Cr?mAi<9&(D(&^p=g+!m$lZHen+o+waacr(yj=2gd|SBw}fOk z{z3n|o@raUlFvl_90{WPSbHnQ?jOo9g9w_3`Sbe3%@vF|cqzj^i#7m6jyhf?SsPpp z-vi`~COc*oV!7Y=Qb|8pv6-|hu=%G5ipPy^vFW`vN1X#z-4|nyW*lyCfs_<4uG^IM z&UFVabDTQG2T>OiFAPrHW?7cUb^}IpS0e;6JnqnbTD$Z>4&ZYPx&;~*a4Nk4e4{(; zs^Ai8wmPa5LU+c z5rHSORoVo2Cvqm6t)`=35G{-NKQ+wn@bNK9vVI~pHb_k(4329I0)}w&PSaxPKbt-dQ39F)=hvs*XnY9s4VmyCX*Td{L;d<5iw8%JSiW4@zRBC#Q+;ZP I0g4-xRYz)sivR!s literal 0 HcmV?d00001 diff --git a/MikroMaster/20261005/20261005140002-Config.rsc b/MikroMaster/20261005/20261005140002-Config.rsc new file mode 100644 index 0000000..5cdb470 --- /dev/null +++ b/MikroMaster/20261005/20261005140002-Config.rsc @@ -0,0 +1,4340 @@ +# 2026-10-05 14:00:03 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +# channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] disabled=no mode=ap-bridge ssid=vados \ + wireless-protocol=802.11 +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add disabled=yes listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing table +add disabled=no fib name=To-VPN +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/23316/087b7d1e\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:05 05.10.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.33 name=prt.vados.ru type=A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +add check-gateway=ping disabled=no distance=1 dst-address=192.168.0.0/24 \ + gateway=10.30.30.85 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20261005/20261005140002-Diff-Config.rsc b/MikroMaster/history/20261005/20261005140002-Diff-Config.rsc new file mode 100644 index 0000000..4546c55 --- /dev/null +++ b/MikroMaster/history/20261005/20261005140002-Diff-Config.rsc @@ -0,0 +1,4 @@ +10c10 +< # channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding +--- +> # channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding -- 2.52.0