From 6539878a97787c8c8291e68deb552afe0a6a7931 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 14:41:01 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 14:41:01. --- .../20260504/20260504144001-Binary.backup | Bin 0 -> 262601 bytes .../20260504/20260504144001-Config.rsc | 4310 +++++++++++++++++ .../20260504/20260504144001-Diff-Config.rsc | 24 + 3 files changed, 4334 insertions(+) create mode 100644 MikroMaster/20260504/20260504144001-Binary.backup create mode 100644 MikroMaster/20260504/20260504144001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504144001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504144001-Binary.backup b/MikroMaster/20260504/20260504144001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..29801bc1bdbe370c15c7a5361841dae679ad0fa8 GIT binary patch literal 262601 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

UqBSE$DCy*-%A`S-A+kaqI8VRB)9haa!GHB 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

C)4OG<)cuXRR8;>Q#V_K25twZS)T8CC&|OYHBn6 z)W?EH%~xf!?rC~3-BZu>QX!qkk;j{+9Vf0WQ}?qjpKWC{$#*6$IdLsbq%z;1r^T-N3ib{;=qOFNd%YcBbSC#bdfoCyeA;#XtIwn2 z=po@}%^X((!C4Sv!@e)(UzV1QyTfceOZD>~NZ=71N3fKq{;N~{23EcOc5k@yEpCeA zJW!(m_OyYsD$#DTll?i_9D!%j@-(TWbLcn6yH9LLyn_fZ!TDJyN<4A+=guD#g0ALa zDI^eZnE4R%skp7;?t#FiL56`hA;D7~&S#$MAg1{$mnY%HE}sAeDK|G-hy=cXxb{#> zjTC~=1TX?)Yl`CtsnF3|!#hWN*bc(5V zKr0uLnl_W~RR+N@VQZjR2Buhv3f6)3Nnc;Ot9|rjeZ?sp1Z8LTE{hZ#0({G8Xyy_V zX1s=hUF8mCga?e=1QxG_h=KUftqaTuY>3O8G^rZ*Arhs>(z^qZ^RPSy(zDRAx+RQf zo!aU|CMRCzfJSd3hJn>@b%^InEYjiKaYjEH4|s+viWn9K#@{eKymaSM=B%*!SY2Ak z84IqAPz{%%oC7mV=R}pK=IU+VNVQ{QBNvvTIHwyKTlyf^2K#8dT8dsQ5Pi~i#>E2NCnsVI<;Mz^DkF99$s40iBd^Zx0Kv|cWHw*9Sw_Y)>}rs|r;>`{C#Lf= z9WWVVGK%(TXU?>%GuTxB&%JW;PC;4xSO&6tD82qy+ei!_hDldfS)fuKD9cjouWTkl zXgirK((YlxXpjwHmQduQU?X5{Z5BE6TGQXjxb12`nQAKWg@x%*p!M4^%XUFi*MF+C z0C5zfl!4A9&7l)0pHNDL^WIX4F*-f-MIxZR{ZDLLA(BX+QMWG5J>rcH(tG=E^pMto zXg`G=aDn9o?(!2OB1OLW7g_q$asT< zy=)`0z-tV`$TBV~uN7_fV3PC+h+8kFEwLNFEGEe^)i;ne2eGGX} zh!lh-F+~bGJbX21p*^%TOYy-O@c5H!%OYTP=e8Y!HtjyIvS7H_ay+HVFnUM2iGxaA zkYih)V`Z~sjln%oZjVJ|S*ToV621q8hsyc7qIX7V+rfd}Eu$ttro)--j-kapM`+Aj zpa6Sj$a~9Fpyw*;uXNds%TpUwlOBR{Rcz)kF17W0sxFi^kn+DLTTq&;lj^TdejIGk z={8Xx>$_-*X$+X=X{6V}3i={drn9rGi%Xx84WAS>1I06wm}fZD_TSe9#F;5clG7C^ zH7H@n=e6yCwyqRSIxdZ?Kd{+h(i)t8kqLka4QB^H9KE~lktL{n?M|Lw{Yk6V%8g<* znI{7c7Ge^M4$B%EA|366IZLs@SHnhXXv&=mHJ`6h{z`8kKu0oA5-hV{z;$HtIHg#* z2^+-mO2OVFH=)5@gCe)e57YdmX{s+FvAob!SI>*Ny!A z9u8T;tPRYdS@u%IE>``oC?`)(2CV#75Z~tH2T(oSPZXSI6rXw?xAVf|2xfjI{|BD5 z4bcK~z>bnWwEa8zSH6}(q+*I64;2U_sBLSF?C=BQQuX}h67oS>OtUW_+vWhckJEX# z+xBl{&9$%_x*fPK3>oy_cTj8BN%mz22@}Aq@gS0dBjaOSj;hSI)4rrlzwL@U#}Y+D z4H;(P=X7hk;(bCxr8z%5(>?*mG!m#JeG_CRy7r79dP`1Lm@Q5Q4m%PeI4sRCkZO|I z<`C;j(1nToh9$V5MoZG0M!uU_CN(S#aA>Al`R+Ex(+4urLIBr`X4PF1@Qb($e7|SD zog}l?E_bx^UbC9==tL;6#<5^*j3#g$xzy|RR2s*OVkwL76| zl~7z$)3Am1e!z;9Rzc!Q5{7F17DP3KyDCaI6YiW}zVH9mZcu{M02!>$pb=P*-h|MzUvS@r|1Rp>KiOeOZ|JnD03z{gzE8Fig%D z_LCjcMc}N=V@>bj$CY$ zX^Xg>j98nHs{vy&aX>?j`hM%Fy5mS53aoQ?My7{~btK~yO(p~xE3w#=;X!GmoB3e3 zUG0=t11XK90|<(xk#BaM>T@A-5L)^=rpWOaTiZ2=$a$N_)%>`o!=ON1os9_y3OLTO z!Q71D0}X&+9aHB8qURpRrMVp%T@zKrVLfSFvB#xzI~zR8&pr_eZkE`i9}Or5_jVVD zxfBgL)Qt>l5NV=;YR)xH!|jUW56=s1g|3Eg6xo$SztowN*Wy?a2F+8Y%cCH*3N}DZ zbY>tJ7-S0DT8*V`6V5(E^ka!$G5X0KCZts0`?H(KI?$bAbWa+B(Yhy(A^Q0GYL>M# z(7@a|v-p;bU)`@7mXsNq>AsIB?*-l!g6K#n0jpYcyL=oSu9$cO`y|&O!?Gj-ETNY| zzY_jHm-ygpqI!`i!MD8N$+=4yctavihNtSEBbX^Fe=NM*A?GGdRaPo1#?d%Oh+)7& z2m^gtp~ju-J-2LoRX#_Qf0q6!tcFOlV_VT>?|L5;Ur30Vdoo5bY8xClAQ|{~hIZ`6 zrrwg8SEt+i6jE65PSMx1x||#3w?;@6D`h;JegbLQKBf8@M~fn!Pv0Q2jgp;MeXddk zCdMhjmcC_XmJCTmVO&;ZKX>9%GUX4nV-uI3A@X=&I8krE^;A;CeuD-x2{Ujo7%VqE)F@2 ze|;Ts3h`X)=}otFxPP@$U^aa*+{Q~pwA{7c)?hJO`4XQr zzH|+OpvPo-l6qgp?toE@5zWknT@dKoy!<7v` zNGbHs^C&R4Wm(vb+J_iz*=t_Yr;EoU#~G^z@3;Y>)4s+aSk1u~=+HnMDF>?b*^88t z5A>OgRey_-2Y86A7X~Q@ag6I;hs6?)iy^*E%170?vVC9m>%l4>9IFuWd!e^!pW+i{ zJ2|S}HQpucd{DzR!_%J0ndaoHCqMDy*Qlm@z)w=8${)(3BCzcc?9?RBp9GI0%nLOKe_ zDB)MB(_c1M4kqQ|co)td|AFTc(}(v9G=bz~p3P3pPbCdZCStm*_$%P;-PKwT{PcM- z^4Fp~=PWA_8D09nUe}2A5nJwDT>G|$4RQ_)wt$^eqJKjVy(>YsUgVwQ<6x2fAh6_I zT3;&fCO!$ITSNc#pnAZYd;7lDK4LU)+iTnLNUB>LD{+~S3DouUk+Tnq5hM8(;7`s;4O0@p>cNXN)x| z4I?L;txmsb%iaHWSRiYB;;F^2t~u7`8s|Ey%mT$Fwx=PfE9mHdw8mCZ38J4?UUm7@ z&Sywz913$SI5bp{@JISQ$itld(lhrQwna~r%tzfdniYB=&Huxvqzr1=Aj0ZXgw6zM zw@PgMltYj1ucJldu@Yt0ND$l$4N`*6FaZBQ0Klo2d2nbr zOoMkL_nq@+@UZIuUXh>Z{AFevB@83Rhp{`s?}D6HG)P0A;W8tM|MAlWk}=x7_t-1! zu28PiAq$&`74h0~1Wlt!TaN`SjO;uJ7#^rS6SOZavn7khijY_Gew!S8Pu%`Onkm(} zw{cB~b8Oh54;9H~!NSO9GM8>DG zvoD%cLO&^>q5JZkBPl3LWLjZo3l~Jrpg0xilcw)@u%QD;AH3h)Vs56C#Fm=kpmpdF zw7&fCi zkYTV)zZ>C6*9DL@P)|Ylf*veA$ye|nNnS=0`j17vXp--l8h1k0zT*f5&lmLVwH^1= zye~^_)&GdbTVPtNQx^(I0jRDvfqRt3PO<)unCiyE%Ty&nYt8E9XS^9p;Sqqkn-#t{ z)5%M|iSKX$&FaAqOcZ!l5tI2`T_oW@q2JR{ib1O5NjLhyh=&dgNM!+NH>0S{8LFv~ zgz{=t_J;rUeNP;J&MwU4f(;Z8mdm{wT3_c;9dPfGe`(&40NvzyS~R4dnYP0`{1-LB zHv%_`H+<%TSrc_3==O|XD^QPinCr&y)F^KqeZG=f3zIbW8W;x7Wb}eLjQHjHg*)Ab zeaa1uy5`^}R_oT4cSYg`Jr3;$zG{pR+GI9Xk`l|0HMo#2{f8`{8p=c_@22tEW^yJ2 zlhFN3VHIK&wCOL2U$`e~6s6`Pd7ed&itsORG7BJHVb5bC`Z?TCh%W8Dmal{!Z6}J9 zUwVvI!$x1;aYFflKN$+pYDOrreS~Cjj&`7yeoO06qN+Kge<0}l9v<7i>C=&p%)vIs z#>O%j;M}HlPShddjDQMee=rz0iJwmEfZ2=X4yyQ<4|7euK<)XW`vk`}conKY$s>U? z*ZY^HPgWl^m^TnhcZojYPV~>oAdf!@0A@~G4p0D1i#X`fSls^26)*ROG zkIUjew5>J$kkCH6){X(Ed|-!xALJ#LgsAU8JHo9LLRt7#elAir*6@wt6{s3VDa#mR zt+jpkANY#n9^TF2UqfR>jK&hJqVAGGcoK6~<7npZ6}IPDRTG##&?x zNIXS8vGAk}&5iXC5RE`eUnZNil<4mh7<{S<9OTXx8~x%|o-V#%YJPwH-uEJ@d7?wM ze4p7Gts3M_VhGccDXfN^X(<;Gb*;altWMDiaTYk|Ao>MFXIwp%YZMPRpdm`K z^*CEP(3USy2;hC8IL?xLi#duFKrXRS z;3z{Wag2K!pfAln04t)I^)Yh3mLm3s_mth=xO>s0%D(}P)>n69^z1&RInmZQTeXDF z2nDW-R+}UZX@G(gaRJRRzuXDme^5)$JR{v~$+`i*#8KSaqJcMgQ~JAt9|6<{Z9y>@ z3sL@nmRZks0O2SRGGmt-tEI`D&aijvo#9f$MvXZtd%n9m-i-&f;gW&UY_@`hC^MhR z7;oMu5bRF)d+|2{U?T%sd3<&!TDGkhR5#+72RqkNl4QWGtB>J-g;@?el<5{_qEC6j zkaBY3OGsSo-r5VRfh>;j3#2BUebag2YNFi@0E@sbh0#ox|MN*mZ_Aq5VsMxORs|Zv zZ8=>dBfgk%%dX57rKJXAu67jdfLD_ymuw*I6j7diBlQZeqB_-0qZkhS3e&-X>&;Wt z7H&efh0W~>W4zp&5|vI+Zwyd8DTGTQ!Z#}2EB|v#PdV9O^HG zf8mYBl0s^ytiHZ&L@dmS?&L6i2;lf>0Jw2D+9(+=&1e{=emR*pU5A~sWE&S0bS_)M z@%np&b{?bHV^A#>A&NJ;bK-Lo`mbmu+zb>&;>6{R6u+HHAfn+no{Jm)DpRSqK}`@3 z`|rI2>Nns$0JT9dAT3`kUM>M~FQXHd)b8$|VzkRQc=sQcY82iwG5CC!AREihk&|{B zl)S(FAsF_u4rLTL{#?KWjv$}X%ZJC0J{qgKiZ41_*CWEKB9fa(;A(gGU#>Wf@+RvR z%R{&1YT^x9+u+2(qJ0G)?A@FS(^RDvm?Z|+s1wtMStUlA4yZ-gxyI9-jOwEbi$Y>! zFK?x{bpgu`9z2*RL`gD)gM9-KI=2Ah=Bs#5qJX_m{W38)&vmrZ-a45-YyWhj4vu<5 zUM}WKXczpbr+(3tXv@|ZnlcF!nw^rZm9PMViD8MT6DZg^NKL(oB(GPf7VS{E6#zJa} z;tRb{q$gYp_Ty88UNJz&7Y zL9K*)Kw5rDO6}_abQrT+=yp%L^wTUD5Cut%?9peQ1dXV_!b?ChMSC*Ih1R-8ZytEh zPR`!wBFR(OR58?IfdZ#kH8hwWUCw`rc()?H>RS9^|C82#*>Me^{v(+RlMl=@naK}o z-dk^U2$)2S0}y~ozH=bG0SKNf;R_#$o>HxMkRN6B=dw=C`qf(%%(&w09n9rBMcube>i>>;|Yk?2m zPL_L8FYd4r$-t>1_sWI_u>0Z>uK!!S8^g6?pu>F*8NxYY3sek-k8Z1Aiy>x$FdsMH z)?chUY9G&ihj(uYwoEnnYRbV);Osg0K32omWdZqszfe9y>br!cCnxJ6@rl)oVM-f^ z$!;$jA+-mLP`Lqc@|(oIlzu9NwfBT4BuQ$qcGOVS%t`p?pu)3GykTy_-^ZK(^4%48 z`tEx~UV@Ds5@F?M-3CDEHrDvxryn32G|D92CCxjdtYhNlnH&4{fnT(}H3(P|n2AUQ z9PkD3s}?s$7hzBT&;(4vpXrB(aPP9)FWXB z)6%c0T$5AF(1uZj;zdR%aGP^P^`~vIj5nd1=p#THy!&wU2!YR#h$2WZw--OpJR&u^ z5ad1+p~;Wt_Ga;!QZIfLn#$5dJXK`^^{t;#Cacv5__B*ARCKtMRsm7XMxSjCY%Z-x zd=dPz)bf6W%!qQC1RNbl(4}OIN;;nKUl0X8jlu>(hYw}U%&B9DI5tyNAw>EC0trU? z)D#?R5||cYpo|o!&TS2c2&Fv~8}VkF=ja-G%d7teRP(3RRMU#mw1%eR4iTM_Wdu@r&8SE8&D3Re@12GVi3_0T}|4cuW3}&M_+teZqH9 z+QN60%gKDCHK><)6pgX}Jo;Yays}EF8VC~=97I2NVhp@~O;F9Bif_~;7xFtydsnOv?m4SjRIfv$uaJBI^zeZQWanUELn-^gvqLPKiU_ezxx~324B?dGwX&{Z^<%%%TtB79o5c zc(&XK3XIb4xlkX^^vcY#R_yVF*PVQN-=Q0cBCew6$G!6M6~cN?U29k^$5Lm-Cs69J zO1vbO_0pCoV=fi(fm~5d@7Ul*I3_MWZq4ow_Qeql ztopt^Oc-E7F>!&{_5mGLk&_*w+NyRVY+xlNlQrxj)V5%HP)#z$y`J;q+766fPhAQ- z`9z*u!H$+-SRuU;@7}_U#fu&RkZ+fE<$#`o52)qR4^0+|ww+J2o&lbr-9gz@1-otf zxHceQPMGsL&udAn&=W@=nq2d+0*9`G|`F^C6Cx7If3Sf!7&{9!i**RuEm& zsb}9{%^^NgLxs=^_B8=+^=gW$h+`CgHPvQQtzy+5b1HZ%MFbzx0%=}nYPDopvibJ) z|1G@;*_D_mr$YwJSWN<^*GFLg%LwZ~GS;xgEvysfkt_K{I9fH(d>h;0zHJo@PPo)^ zH~=0^YZ#}B`gx4~QGWF)WBsXuBu0i>QTZ220jokmW}Y6@SqX|ybb}Y1=3|TIjzIwt zPE}h06|B`003pCyfKkE~6u!yqI85nLK$~E-ReAY%l zHut7{alZ{vZrm3A$Z|h(;3W+*=r;V4jEJZ^p{0jgRC;Vzwu9o>%Dm=tVy>>q)bFRf z)HCLOEK6Y~LB=bMIRxuN+Qa9z6cQU$(X8b9_iu2l?BilYlt?^gHCg3*-J$O;3_m`%M^Yhg1eTH-<9hgHS-{LkSHm>fiPfzrm<(;tSdz0A(^Z2a@K|v2~$I+2pc`X+xWra!yt8dvNAi__-ypWw* zLjQo_W{#=I6@`icO?(QI@_2D&3#J-2t4?%rDhuBR8Ga>B2siaGv)tUjV=+UB^NTdO zGZbcZ<*QK+LQ1);On2D4lWdi12ke-TGZ3C52SLgY5^}@)&Cy=HyfQK;j9r8O%5EF2 zfw}mxK@~HG)g$aTsJeA^ ze;kya?5@kV*g9YL-3B2wu~mIrW&Nj()#>>vt&WePsI&<<>DPG9lAF@5J!bLo8N(B& zf|>(`P35@lQs^Gk1}55Hs%3aEn3HY_F6MK8)6cF?KHJ2`dyiArB@T6ow~nYhsbRoP zm!EM`&_}Og<@$WESyLMcNJY?_ZXe`im)qY5`;$HsV3(zZ1oZZgsz&e8JI?;^yl2IY&BHJQ_)86#v-NjhbW9SVo|U zSVcusfer#}z{4{9N$`diZ2F$d7(eRd^K#i?@{hYtY#KBcIu~vK>2oMc=FSa3!~m(2 z{u6FDYQRFie~F%y!y?6Ce+R~Dc5>Qv-MKeW-fAZqE(HM-JR$<5@;1&NAem~pHT;&k z@T0`kmR-*q)~jYV+lw|=C|1V6T0w$n1CJ$5*INKeX4mlu^TG>7#^r@`it`z)q9%xq z_Y*W22DVe~+$HcEyG7t*z=1cLeeleRDy(Qn_H#6%3+<74-CrU;^ow<(9CW(Y(7kdM z3Y6=(XBl?-7>a0iFe&PKR|Nj~rrx?Gqbz{SqOzk_b@(o*`$|l2!XH^9l_$aV6#Z&sg=mg&rT~)Xkmlx zr&RAAxfkO{u@b5Xvm0H}HU_;OKPH|$=)>18PXB456uKla*ijsmj8RK5|8AI2 z0VbGRw2%39e|h~&xO^fl%3+#9q?pA)HOW3vXlq9c{#8@E#KzkJs|(zn0-#Pc1J)EN zSFZV=q9E_E4>Dg~(+mvqH3o^l+Y5b)nxzeUuiB6JILs@iiWx_Q%R(;2+rh8tbs zs7}Um(UE+_ukFyi3Js{n|0ar5i>q^vopQu zhY_>gX}oK>{}f31OA}t)as4ji8z0a%{J~vgiR4?gp)45b;l6rEl}DBy*nxg{r?U~| z_I~wZUHa$N8sZ+H6?EuN(x_nk*CpXA1Kv(rd%3Q1G8In2;zRggeJGPnw( zF>c(H1qLkEkloxW`{@BCBLwlYyX>%)}dg!MkY?0{uCP^MNta9<^+%o`Zfitmx%M;tK<3L4`0d_!oQ zljB7NS;QO=5&l6|^5~`L48wldgEDUwK=?Jzt(o~Sw4suz1JDi-klua_=(>udAeRn3 zF*#}KBaXJu0&8F&RqbMsIRPWzPmnW_v)a@Y(jpS zU9u9oH{m5{33WdchMLJTJfuE2>F-MZ)df+RZ! z0R3y`(ZZyKOTON)@uECwcpE^YP+|`QYD&Y0J(X4y53Zr&N*KO2QC?ltQzg_r)R1$m zOQ}OY!z@8s57$~j&Mk=+=p^Ej^)66fZMGMnhUrECN?$7-ZrB2WqsPOr^NyKs&6j=;Ln-8Uow=dVzTC zvCQ^kJ4it2;UOR95V!_g$rVYb= z-{;(b&L|T)?3LD6gOEX-tACVy+~AuzUq=qQ zcD7N~r>A5`Kqhy-*VpEm+|olOH>}PDSZXs-1uSf?hWo=Dn1Z6ILalh5VPA_-jJr$M z?38koJr{WkBVK0#3cbk6ezIHlfe!Yy{AH#}Gx*mI&`d|+=O3gt_RgF+{;XBia{PQF ze(L>}%`0oo)m}kA(F8KX+>ZU^fUrVu0xBMr+8%svgX)-W|9PkuM&8bKU)tGdEr>-`kx65vHP6L08cMi zCx3_RI`+>-o2J+`a#IncqHbkx&Y8ojHsH?b4nsJMOlFdE{L(N#-X- zWDa%v{wV1%DpMn;_oUdJS$$F16wBsQye87ms-7v+RVu~jB@FQ0uL$=FfP3$?m1g*P zgnY*bAvOsR99vCySCPP+RcDO$e0my4=M0JUQ~Yhf>&Rz2QdBo0K{lo1YFN;rgJig6 zraW6VCT{ao5ibOc8UtL|OuMD9P70s3AbUrk5bPfEJD~Je zTO@kgM5JGzGHdpYml5wJ8$7U{^SG`dasoUV0YR{gZ@LBC=lba=`Xb0E?u#lr-O$as zUW8IcUVTfyswYt&4;tg*u3<5>V{#;s@QI0*i3|!2+MgW!4}7@Z2QdPjm|}8qh5Jss z*~Nva^cAAhvEuG5<`Ir2_ko0)zKd11X-y%5Km1N*Umm1ofeidPj>y(SM80p)Ki<_@ z0X2oSo=|`q)*AMY&==3vqMDmi)C|P%yv5`&7wyZX$bCrN4`SJlW3?l);@%vWzpwX? zkObw{AGwJISdz$R4}IG4=3?`(YiHR}uEz`2*p9}D(UgVj5?t_fYMJkU!BnWjP>03! zQV9%_3#&e-gt7ow#`#O@`E)yae_$=#$^Hu+fjE3mP5B1O6uTX8gPSl4QhFrO;7;AO zOxoDXSAE%z1roUsn$p!4$cHOnvXsV(&|}1wH|40VaYjH*4!05y5ae{YuLA_{$o1^W zXVT>Z-k-gwb?lT(5}c+Z>S&m4M`X^x6lTBPeNN2mhLevJxD>YWA}AG|DIw(Og@@h3 zoiZ?I8-IOGc zp1MnxBsVrx(Ka_s+*MMy>_PGB=ae+SVQ0JXW-ifyqsZ72oQsS7;1#np2L9A~>*qdzd))jLAW3nu(KgK>MZ$VF7Xi~hah zoWhU5>MO-YH-I|tAJu6W-+OZ2Sqx5=fAKFm z47O_`8OnGHXQHTWrw(#6&NiQB&fE8opKdZB|5HTkbaqga(m@sS|Babsszq3~F{$4)s2nX^)60 zs5>{6yD7KKHN`w2$D!2S_$od>Rq1A&5?+U5f+16xgRvFlf)O0YEa6*S=l~T!**(D- z5&SPeYdMBG1S~X#cu`GL-rum8`qZNjCR;42#Lp?*0aj+dy@1 z-9mD?WD<2E7H@TuLW#J|hD8ZH2Zr!T+jL{RZ@Gg_^l~BnYi|doUIwJTKHEMl{d`~W zq`QJcIbSyB456vHvLHp(CbIhAVvnOo>J9_GoJ!D1fG_awuuD5gD7~a3Jbu9i{K?9U zGEowh#{OLWT+WL-A#6PVLLZhmpibWg9R*j&-8biY&F2Flk!SVYn4<(#>hdYl17tlS z)6AwCd-b6OB*nJ`o;N=}6` z%;Zy9`gSq&{~~>iO~eZzdR4fx(;6PvwJX))?GL#}XK#@2FJznfN`TFGPJRzzSwd>M zT=4Db$-V$rQWbgpqUerz4^{=D=5k=19?^#u$7pt`d&)cTkx=OH=yF|cdNNavW|jqh zn2b@OQfxmousyBPMuz0c>@vFoV*w@;{~x4eqnO9;cpuVkZE#6CENAGoPxF2H_nn~j z&(^SA#$nRiA@19*s71+?9C4GK7Lx{_zg?s<##Ro9XQXxjo{%x*i$2d9q5m7r!?0Cl9;0MWWG^k0LvmA3 zJINwASU0@ZyQ&9a$JJDuy2vjTj-i=12-dp*q;=SfJeKX@Q7OL-aS8L~iaetn#k;o2 zLQ7FFg5FAJ6D)JFulMtIURH~*(WIT;@CvhFpv4WKA|&F{yqq>=`EN=$RgzyPXM=1u zz;t2vGd9MS^3|zk6h1D;x-T??VZOoBv+oIOG9pCqs<3;;yieOqM{{(56zwg=svB+_b*JA>+LeYKI{r8EDWL8-HlBMeAyfqKfg-(zW_y}KkBZ>~ z%)4ojqZm`Hyg!_`XVKSnW;OS=??V5dUDi=jFhnH;4CvKFYbcbunxsY{m4{5Ge6{lE6pC&^Y2yk=+G@ZGZ-jaNT zcsWf!G)tAJQ$=(Zpj?$HUIz^xV3AqK1L3mATLIkwi+%7+&FMW! zz+4(%rS0(5!4;9J1>4Jq{e8@*&u2rS12I(8aYKdWz|qaSa@(a6%9}2RwKQr>!$;#o zI?mz8VA5%l`#&(H!CI7xV@%-KvWV>gSOgFPl&t>*h@fdwj#6%#cNpvkq%>YWJ8tMu zapGGV_P-M`rxh`2{|N@e?Ce4H@a%loWl=`^h^y)!zE}?Hr@Ca9a*1~^`3lxgAZ9hg zAoNCuN+f+HAU@11f09~yq%je=7#3qzC0H0v&}oMmAvYU71im_(@?8dDbJ3he~j(~sJ7DaJ~?`fIkA zfiImLX?la(BpHM^1oEj5IKKR152kJs#1}rj_wnyInBz~7PCU5D$TrPo*R}rQC-%Ao zIk)k*ExnyK7lj|6lZ6K9t%~Og2N;%ru_CAScBtTzOFtpx#@tP9)QOY1#ZAl#vpuP) z&=jX0W@-7{(U?M#dcIZqM8cx(M%yMeH|3hSPfXi2Uz-enPp))|%^#ncC+Y*xq3$%o zIetqVsZRZuF@Py{B>&*F1fT*FC|@aGR(Fh8xkKW_)3yiC9dXRQv+qv5380b*3@5wd%0tG|6$s?u%yt82z@OIolsxFRgYU((rL6DoJJJV7m<0OqWyPIyT%+rjS~&cdI3 z#l;6<(Lo2h$+{x_tVPhk>hyi5*rPX{1<;9c+V51w#4e#by!o#Bq4G%h7;B&`sAwXQ zp6MU4qaV}wA1V_$mbgeGSIu5gp#IC|Z(`3y;9<0|^WGaWOH}A0G@=2V1Hw$^M$qy> zxf({#TCRt6B82UVmvvYR@ANG9O;3RVwmEuY;v^XrKQ85P(>=9ve#DQxcIPxnX&J0R zrgO8}nA};ha~#5++6o_R!Uf{Z9>adl?hF_tx_tL;vq=Hzx|lI!6QO$MvMMHu+EJYv zW^a$BpIC{mf0@!%$G6+pQ4LV>0-e&^ z+(yM&prE~}0SL%xlMP5&u&I~**o5*}_7oLuPx3}g{eBZQ$UCJFe5FoVlOCuf+JlN9 z@u-|&Paq>m;hm0Bv4bQ=BH;7)oc%-@Xf6dh@<`53g)g|Xlh6@WlJv&Fea?G$%{O8Wwmo{9Oj4{&!=szwZ(}K^P$e+4vvxg`jV9>*pmClwT#86SS z@&r_CoHBBEjBqfx(no%*iX+*bIjty(y)R%D$qZzlzg=gpxd=4o!#1nOvxmh6O{P91*-k;oM*z1st6PYI1$#sPi<&JDBnkRus%g*F8e!5YglF zj~Fclre7h6CD0(jr1YUYE+tN8jPU;A7fEHjL3B}s57PyTP zQL3W55Qp6a_hAQ8$&mqArkv=4kH&!4liw87vHZ*93@7_@ha;9DmVCpC8Z{N;U{TmX zs8v~tY47(!hQC7*;73J!FsHr>Dqx4*Ota@9gTe7O#bm>cUGk?({pepl{=uvBMr>U`)jGv+vbNRyrY%_`>E(xCP zQk7uL(0dc+Ck-@B009p$Kxq-0WdVKR(rw8sIQnc|cGgd%3SdL;vezh05eX);t9nE|2939Rv-c;y zhK-JDorB=L9n{^bm8k%j^O1bXv?$o^)>ix`g9s_~E|`XyyTI5D+7&c|_SC-!b1>!C z$+V8nIsKPE^K~Nn>i!j*3Z>Kh__ReA7y}N=miraoe;hrGm@#_-Ld2H}(+UJz!gGTI zT*1)BhZ#l5>Gw&+?~SNI!Qi2&)j1D;IJL?GIBeCs%KKtP8gRGd&jSdF#Ofb$qgvcE z-ixQ*lE}&5HXp7$^Q7D!%;k{QxQLRGbQDF4J@~Ykx~SRvNH=vw7ahwA=tz|p36i23 zr%RAi2I(LT{zve;TU_{#Qz_+WXwgVDxI3IOo`Q z)BH~_VL}ngG0G_#n&-Adb_txR5z@t@bGi;wEz#I?<+gnyk{@FA8f;h?D!p@XaZ@h7gytlBpYi{T{Hv><0m`>2I%5x zscFt6R2-4C&39#T%-2s{pXzH1RroO&R$_8U6NN93o6xAVz{O|l+`Ck3$ceqbwBZE% zgDzCsIvDi?(qqFG`Wj<rT}-X~_$K*K}r>1k`De%N7UK{-QD=dZ*V<@QSwmvz(OtB53t z^=arYY6W~i)+gY>7bVk(TYuGXVfSRE@4;Hf5OS{H%tl`tPd3+54=_s>C_ zL!?&$>6rpr#JGAVyReF`o`jGc;C28D>57!60fWPzYQcTEygGr9d-~2;B!UAAWT2~Q zybjX&$5KL~X~+5Rs}#}Tz_}Jl&4r!&FnB!3=oy(YEaunXr+V<+}%-zW4tJya`OtNc{-)T&kvCy zR9Z3grDW>%HQNNc71BnhE*yu4F$csx#O%7skc%WF3}Wd#0M(Gt|OoaVJjWAh+ek zi4gwJ3}0kg2)6+HPt^foJ{#LOZGHC1IIJt5ZuR9idtzEpbhF;1tsTh#OY^X8e7CEV zfZOYyFA?lI;oe#Uf)iP1WN$HG0~$NyB3M@A@1P5T{!mIMt$DDyL5%DvtqMQfSdVd! zPbZ9Lr;G)O1gHY&GpMKrMim4jHfYF>K$0>!pON4CzFLe8VC>^?Q#J(T4hjW55ixB?u%&no4uxhYv z5|ULrskqTl_z5%1aZJ zv^hK^M?OuMQXPey4B^5Z@(86|DJ5-9geM#f2X*pXmmCQ4jHTJ7pEvThGRRS|Ng?Hq z13xYSKJ#(idz!fI&F2)Fh;8oHzLA=yNKPh23Z-XXC_bFlWj5)jJ3cX|z(o{AkG$HVP5HlrBh>cBsA$?5oneW~v4p>JS<^7LJ89K&2?fUYPNq&LUqI~wL?Qq%E z@>qYz&UfN9WUyYbmj=Jq40Zca4efY4D933gWst7{*K4ehBh_0Ybi7~D?-vYSJn zpL|pRlrHTIM9SWiU0M4_0CEdh;s4nj!mPlK*Bwh!*?dSFrD!2<;->b~AQTH{R$p2V zR(q^otJ%uPuW7Kg8dxwJ0Uow`;sq0cy`@|FPAQiqh)u@8C*UTH#c#EAZmSgaN`o_0 z8xvQ4|1(-A??~X_cL+H7At1*?7{=O`xZ80UM0h!JtzGi5DqADu^SDxA&pwl|noG7@ z@Q2A~0Y-(25vHxFRHm_JapG{QPefG##|FVWeJF1Gt`XO7bv(%jT^v3JbLD4KR2_ZG z6tr;Rm`kf}2)-kuFMRI|cabQ3Z3LH0GP-}*DL8-{Y7Yisyc#H5Z5gXa^>zs^C1(WS zclVf;rlnMMJ3^k7%!T`{YrT{ghVwFVFW);$Sc=^hqRqD^m;&koGitc!l@#L%c=jFG z>wiPZJEi5z9Pb9H{{1m3)8Vl}K+JGm&T}4oi)YkDu!(e7h-&mO^ZNbgr2*~1%4Iq5GZQu|3pNP36U44Nvr_rP^RS{l7Hiby6K$#$ zd0bVY8XNxDXb~X23P=f>-B}*2H0^K?g_!aVYetR(hQ`=}>HlQ%1?Tb144)qJl`YQL zqNA?F9CwWx4Fw1ThA-Sh?7`!aq+!}60Pp6gYHzdM5c#OAj%WDu0c}|9I_AzS7+#g8 zf$xV@*ju-Z^v`|HxI=<(n1`|@zsvpOMj!4w#&M3y)Bkjv!_)l3z&A9Tl6F~4A;>z? z#^&y^nCMW297MK$h0wGz14wIfSKrr}3C6N1-|KRY89+`+AtN9;heiK(L+Oo6s+gut zahOsO7UZPs!2G%vLxS^00%z4@Ih+~KK?|fH(o^>fji<+&Pb8C_i(KbgjTM-Oalj^l zq%|)@?g^68i5!R`YB!{tJ*$vEzZd+XrcTxS&tW+b7JU^&aX1c6e5G-%VehY0!3>|a z0Pv*fE5oWhky2?0x4b@M3DUOWmcl z!$8cx(WB{R)Z~~a<@0%nlwSv;oEvObQcJhEhcXW$9x~Fdi%^As5qb18-{N{y)HCl+ zC{To`UUjg2`YF7Bcx)1}73^A}QjJoKQspHXvu)TF;aOj!j2&3-DIWqe@(VY6_>KiC z@8T4uBfJJP@tWKj^#xhphsH=&-C``3;mDN)brq8=0fpYLLpay~l-&IugWRHRaV&}+ zH<53>9s8|c;r){LfYnh%c1#4|4?OjDl75Knio!yqpSK1gclImtOy5RsB75ROTI``rz946QZs3IJatyKBPf&N^ASolQa zPwja@Ze{+4S`lI25J!NsukhHAZKk^KxN#~h8(sL5w zp+mm&c@Q9+h~6dxL(jYvh`I@i(;J4B+73mFIDN3EUpR6%A))y=PH~yWa7gn5d||$S zl@T#V=XCup8eMFlI(1*@-_TgDmbYH1U-3 z$o|oLw`$OIN4pxX|5`=}QqwB+WXn1F}ehc(vM<_cusVAtyl7nn4yUpgk%9 z2eG8s#Y<}bdS0Lr`$CiS#*%aVsmZ;7;R+CX_Ma<(GQbRP>CQYV#0o!g(z_LH!=(p4 zUn|wJ6m)6#R5r*8E1B1SbvLIgI|jX`-EZ%|MZcwJ`12HFe6u#2BGxGrp0BQ6`bFO8 ztk6pns1Epp>chP`ykrWBJvE`U15LSo_6~Y}E^w2Ndch8%bzwm(;gHm+gO@d3X>3d?4 z5|ZJ`KTB546!#H!+~P?|CtzzAy21eo!=@fEcuo5r7~RjR2FbIC0Q|0F(BTH>t$~|c zraUmDq=A4cP$9*9XO{EAMNUe*rLaIc9i}k{{l6%oqjBPDHjqLx(1{EYA{go)FTrTC z--~dZfJ!Y0Vp`JXJEfAzmYUJZ?$GQ~#W3C!kYVRy_U0r`q<}D&0-xjt$HS8GlCVUEP5AePI zRjdqTS>6?pI%C6cBPkJ5{kYae4nxsO;ksK1C9Y_SDvRZgM6L?(drcV5Ja)he7#k&5 zD6Kkl-A*DIZf=ug;J1YTNe)+>NA-FP=-6|8@V2xH+Dvu*hy92VOH{OAwA%5X!JYMu z`K-H0G#0Y`A;YXunIEf#>Hlfs^nQl$4Ea4j()yu)lOmhcC(=OFqU#aCKd<{K@^V8% zTf&2shVih8`LK^zY^9t62iQGr=J+v9QgTQCC1&)6F zRO9Oqicw|xrHh<{waT`#B4r_X zg!v+xm!C+E$`sY(t}Kkx62Xf3+D#gL2yHYkNB;S_l3si9kl3*tOqh`Qj#KS#t z^}ykNJ(icqVjS+L2vj+&=-2(j{!_8HAu?IL&6uytRqzw4t-8@&9EM2A16wNTAYwud ztW<<*BKKV%_FQ4|9Hsvd#%nQrq)OlSHsQt%_s<5&?g#E9F1Lf4P|-lBIJ?(Mz9dLK z>vV)Z2u}Y_I`rz;g=toRU82L%g|pz1MCR{TV$paYbY7x~AV5@+>%)Y6a|jDBkNEB9 zpnb6uqR&=l@Y28Wy4D!e)M#8}_73k)l{CPo5d8AeHg<#Nmv*u>5-OgFeX6!ch0Q83 z!6Nl>!ud#4Xe+|WEP9DtwaQxzAqE2gG~Tgk2i`|FJmHYiY{3{ z%>fN=gKMIb+$Mpg3qVb0jA&;)dNW{kQUgKc2?C~9HVTJ7fI*N=pmtBQ~6V?^G? zc}wB~k9znS0S#hA@aCk@bF}rW(jvVpb8K z4#bC!#}m6-axEAV3lI=X!#cK~2KdZbfj#%sW2i&+{m@ zSU)28BlXw}D=D^EFO8SvGLCNPVKXS*;@-k-*C?=cH=&IsJO`R47>ZZtn!Z+kFx71L zMCMqZFE77rw<~5|(>`mo>x`9=m?H!VGX2;H0>FD#2FUKA){C4J(LZF}e8srFGB_6S zC>6Y)qBA@mc%GU%?%+tWsq=&yeQvp9Ga4Cj$hK;B47dMU!~%DGxt8G1X8&~<$W05K z|rB=-{@#CftIMV$Xruz#5SEZ<|nM#FE6D`s8nde`=Q#te1=IE;G%aRbU@6@+uZ z_}nggRo?E(fr}}CM*~LU(&oEFAY*MC3WVg^)p$y${p12p*nj%NB6V`InGaqC(4c~1 z{*LNw$ghnE7{3QIT!3RssMrPB2)D;7stf%dRuUKfKq(Y8@Ajb#L$a;ntf;gM1%;X%SYdMK+Xq@!wa;sZf1slim2RfK>KYX7 z7u{Mt;QgPnR5>OcP5bKkUW)3Dl)1PVc2N}JRWh&0XL?gl{^5N|B{xt{EBC5OzcAMzHQ`NKtB5SmGXGi^KrLl`OZnNHaXc2uh!kv>ZpetyDUZL zy|it1sdLi9;NAV46~^%?;|qhbsT=;ZI67iw1b$y>0+H~srV3E_GsOGXa-=QO;XW1p z1^Yro$Vb_v=a*0{QD!K^RoFU>nfb-B#cbfn{pqx06RK4BaV-6%&lVQ5qRXU>^eA?) zi8EOgc_z&~5bKxlH5(~(eAvua-h!YbFiQ1LbrWd%MnMnKQ zu$fm_h)e@L{}SMoj#GKpNMI$p?NX=kDZY0WSmAD)F?^l9WuHZk{x|4{+~F=|u({Ch zkIL-(<0r~(2V-+t&R^kr6Q?JnUL{}qJyazuhcx!Ka& z{9|mWS6(1iTARJa7(V)r&DsW?Xc*WlIQHIbYwlyQ9dGlsQdAiNZDjKfyM4hD=n9~# z5|m4$^Wo=4V0SD_4*7^upw8B)>J`DnuD0|s%zxbq8h~FbLYrB0^?Rf6Z5JJRe^WN% zVM2N^$cHmS4;ak^dxMVXoA0xh{GPfOQP!>~rGDGo=L8YGSQ!R4wtQX2g|SkbSHvCO1L_>|`%S zi?_V%Wva0JXm?{Gcpg3RPzz9K#QA}`6H)DxqTqT`9Zb-vg=q1&pn*n>a@Yp6LQ7X? z#|WW#U(Cbi?&OKRAi37imyt`uO?_>o|;6df2c4)aB!0bvcd` zcxTdXo>tIwQ)P|^3umFZ!ztwsrwpe`=vaM@&1>H(J}76 z-gXx#dM@GPcZ0v!vK%HFXt_)#NXDAf1%`Y(e`(-actJXZ#i{tKo!*#W@-8yflOq~m zYV-ywt%n`ZFWpc(R#hXMgcRAY+!y?k>qR4dVDU_EG7OuBUnj zoh7;EGU6w2@}jLhm&~|LqdOVH-i5ge4;OPH=r2Txr+_zYJ(tG2RA8%X09i%EhO-yo zOaMYR=4>C;M3+~V)b`x=mNEIFoI3}Gve!LMfLs^+ky76p8KlPq0d)Cgh-lC)c5jQ) zkUL2MGW0x*(S3a32X+=OLZi$!<^bt*$u6sNsnCNq22y6?)*~sTZ9kW+9e-!mJU1#V z*WN-Z0>!$i5o@^6z94RpY$okNZN<+TqwU^GI@g$)AsEanSKQ z2Pwr=_pNT*Hd;WL+nP$}&oea+P~8Gyl1pn_onkl88Eje`Dy(Oym}|_QqPz5Virg%= z-g(mzcVGIT>nN{n3L+eoVd1joyXsl$$~-aP%gPLq5EYIqr5=NKk}@$K8e^Kdd?5Ns z93}9L4Eqy1VcZb=r2%I>=%)qu0ZpiC8EY)HUn&;;Qn2{|oGQ)fdd#Vid7hA7d0v_) z9AeDNGRWAd8SHIOajDBri6SEkK>zNb2Y?we_QR&asfB2_0bCI{Zq8U{2Mu5Rm<)+E z{QwHu8n87qXCD=d`_ta&FbJa{<`Ozgl93?rb{G>g$SO*n=+SW5O7(|~b~8PBuh+X$@vtflIAOp-vZ6`Ff`c~rM|o7Q=~wNcup zF$u(re{P27PD^q*Zl&f>fF<&g2MlWO!boGmIheG$>}|>vj4_)_+C5O&;=nOHgC=v# z`$Y8-YOFK`fe9##S1p-?J6Y zd6_W5v24w5Kj%!J3uUSsqr|w*@gs~Mu&vV^Z9-u7xRRZA0^jXP&P%m^k2yQ5N?(#W3;m>N4JDx7^9W)MF=r?#C}@ z0eV1%_lPUw8U@EkTVvr?Mkt4>L?`c4DlA#2ySEtD&BS(hQMZe}c*p4Qj4tv%>?*56 z*q^X_{eHwo&*4R@udtdIe-dM|xageH(#2O)XkmarCIFR?{m(+?BKeY0eX?VVt)s@+ ztc%9Vo0N~Y>{02LsErkCzfij%0^l~A`hH^Os6a!YiZd_o&g6amr4z3CKw6oYf#4S7 zFxtP=cZ3N>Fp)39wY?j}hWJH`R%Z_hEMc70vCDt_6qc&ZT|0t0;&}Ha5Y@qHO^f(< z+7k9V0^d07;{*URN{P0GK7dzjiW&si`14HMHqnugDI+9$XsRoLCW^$v4!+^%4~nDh z#iDI8x2j-#pG7?L-yK#cHcP$95{R*Ll^&aV30Zi>5>)!3SbM*QEzvo>V~D17-dkT= z#el2HF4H9N`Ojhe>xhD1}uMCORTNGSakogNs)+@P^iLO9N^?CoY+W2kf-Gvp3>zwhz zxIr{+7$C-_rB1~_C;p7_*oDgULddPmo{V>CsN>HjD9{eK%SlTzh$5+!H=l+T17rA? ztu<{)Asyr8ViEnlJJHhn?U?TwEg>NGJpyM5ML4V3d56n z@ENgb+3y@Z40YgWToKNW?#@wv0@6qR=5<(z&8_tZ%HKcAlBfx4*yZF#4RqktSl~HE z2&En#m9W&c`Z2CW%yI$bcKNctPM^S6$xl9y+($(e=%)-xW9k27NL>A8UGa12mK=sQ z>?g2zAzDchP0;v}#aI~(B^>)?&E?+(DdACDo zW0y`TWFu%glkgHpJg0(!!fr7<+P6l4h(F7^jZs) zV_hViMGB*hJ@;J0WavGV@tUC}4uHtIgW4K<{=yT&MzY!wQFaruKfW}3WB|TGPblhA zyK4WTGU#8wRyCbncbSB6-O{u(F&Q*PI&WV?{Ii@JJd(?&*b9%QlF^eDk?UZOVlU<) zR|@}4v60<7dG$<~uij5+!YO?%E@1jKgjvDIM}_sv0#wMNg!*q!W{Xu?|ZF$rDTzd~aZvG-Eel=o)POPOr^ZWb}hfjk2^P zy-TpLY5HnK;I8&@9eqqEWJa%L$Y=p(Ohs2!2cKCt5EZn4^E-MF^jgRo-$9JwA%;Ya zXuU03jCQX~u1z3Hpiq1av_2eWb8ehxiv^NoP(!AUeQRV!*%>F;GVIE*5 zzs%iiGVtlt3K{g(PNy<|_V@ivz(7pkUpODGg+3OxdvO)Rl8)%+0Xh+XMwumWNXT8X zN{&YOifb)1b1m_(p>486G>8HE3Z-wlxc2*@M)^f@OD{*Cgcm{lkp977yx)(&FBZ5U}lIkJoGm95cXSuFZi~xxcaMxP*$7u~~zRpH`ttFB)-D*-iNig^$ zanHojmq+}F&^+pHnZKS+ut>ZeF~f-^FDDbBQJOANywmdn7NY0Skgo9cnSK666J>g} z&Z&WQIlRY2Q)lviP>VL=UWy=uX8kPhq}rTH<aALi*c(h_}tmEdLLJtNafWawIY zf<)Zo|2y5vCKn>$BF*y0kdvL3WRP zkiqodJ}w>0w^Jr&&AaUtqON?`bwodDbQA0;QhN_ofG0lGkv=5=DiMr9BQup}yMQN> zww7PrNXGiT^K*}8?;)4EsU}EJb}d@@tVjApvHjDgUxxzmZ7PX(xp;5K;TJ1{W^K^; zJjPG$A<_=rh19psvOudd+*)V-`mRaEOa!J`HWrZXp$OZRwX33Nc-M(c(0>BjQ-q+P zFa}j|@lf*jL-@4-i)aH#B(X@Xg^NO;LguVk<2Y$PTZqiDW4RkQd;1mc{IsKius8#g z>hFO4W=NJDlXO+Xe-Q`%^O4pM424ybw3RUZCBl4DA!aN;!pt^$Nqu9#B*k<8@*}8i zg+9wf9H1wZv{)Zd*YahQN6J`OxAi&dG_&UuV^U2stBC*IFV^xNmZ^AInB|CFy^A!& zMe18%Gz1&R1NUTWT@Be=l^ERo&(XXaaKl0_2xg{0KEa^AZiW-@ZGRtf8j1PLmK2e& zw`BqIkRAS-%B!{>aHc(yKk5HIGc+3QaQBR0Z_0~}OaLj9oKTLd#QHdQ2~k1zDO!UP zemhEER>>FgBD*CpiU)tU{R&ks^S)Vc+$+)iV3)dW%yP;x4mHop=W+HJ3!+*0X+>za zDrQAVUT<7Hd6KMBlz&0b;qO4|gyK9_NN_xYgu38&Bafp!fFcx}uUTFx{3>GXEqB|da!u;hN z#%o*7JNwg-JG+H~L4WTJdt%)NBg*Nqs(spz1=MGiwjXM-fO*(|#MBZa{{Gl-SF8{k zk%WiJi4`5TN(klzttDIdGOWgb2tNgaZOu^-f-KfS19r{zz)#Zc2FgZCI*a@Ngt;@( z5IeQ)HCdnS6&ZS?#WoAg+10M$U@s^>dh)_Pi0G3N6$;qp)j^zN%SC}5^Dg@2D1jGO z_kPpbi?pzjd@0sYeu45uweq9GHNTPTFZ=Svr?x;0c@=fyirvuzWgTWF{l%j>K^ z&<;Xyodq&v#Akr1X-Y+1Lc_p`<2;YD^K*je342<^jpnxOzNI<5 zGk5D`y@6?W{81;Sw?N(%U!w~6*Lng`3f&U!YMWpkQIw~2*ws_E%Ul?m)iQ8GNIs=Bk z?5L<<4Ju(js<+2O;AM>40T#4!vS{`o-3>{Ti88UG!s5(ITPJT}+uU(i7I*kuOwfii zeA)u(p}f<=IA?Y?bP14mhq>EB05plb}$GC>iS7VIl)QRC#cAk#NwTOp#`oeCQ*OGgdTYK;hl6ciI+S z977hSnm>3I`TXAprm*}iI-43%VJuk5F`F6bBW$M_*A2#!%^ za_z6s)A@e7li0KQBWJc4st1CiQ#N-(&6E{4*d=FF(Y6n=%I$U1&TFgv>FJn4(E-4L zKK^zOVoE=jcd^u39M;%fZ4}nwY@|SgkbCQ}t2&KX7}~aAVq%J#Bx%*ghoPVSbPkEc zoYa7|__EddvWUYTPE$uW z`u?zy6c-1&+;faEUE2&@+BHzbs&kVe#)>?mC6Qx40g{?LWwq*Vqs5;+V?zYdU}>K_ zCvevmarjB*hy-QIkQ#(Tb62NcYZkthX$B!?5)lih*!H$@?R2=xR_~#IG$7f%2}5GY zy3DBbTB4B3 zs)@-ptg$SX>!-`n7$7OR_{wS{KdEb8 z9=5L;{u8BLOvtfco@9zUPFd24XkZH8Vo+)!AeLPXVJUVGI*KlbTCoboDE1Hl%wJ+70+{p=78J5H_;S+;3ak=sh3OOFfkJkoj`sTgRBa3$~;0n<|jnTx4 zLV!1<+(O)BW-YT%8Oja3t{}HB%%-B3$M##^$R*nWOZ{CR=gY0u=~wVZ0v$=k;{!z< zH55z?*|*^TlRJ7-Y;aY#ddxG;h&~Hj8G%k55FvRpFcC$F=LNaosaKvNQfe3RVkpIw zkh_vSY4b5f>RY${5{)XsEnM(}%LpYQx;ti)+4MsG-L5Ku4qS+-&2s#CfhR!Ra||tc zZs(uVe`ZdN==E#VE*!Q2B2<&1t0n!%`IJ)yY_8O%Z5rW82O&}f6JPV{7+#o7mQ5SZY5I}|+>^(7`- z$7<`m`P#g;*h~{6o8E?yMkX*aM!?aJ;vc}g5RHalYsY!J%@xVHi%J_?xEh_&zb6s* zv!3x76v^|Ty|IanL9ATDF))7q%K!Ja97puVC*Oh~cz@)ZQ~e|QNxVDdORqJBC8QXT zq3qB9;fD6^A9uw8-E8^Aox~13x$N_kI~NT-!7O606}w0HOQn=){;#&=4?}8c8|J~8 z360SnT3yI@E9h6E%f0P~B?Kw zKlr>#a@1GLJx!Xr%uEpJ=dNjpR$Gje5xPEyK>AV1O87I)AM$PEw+q;mJ`-_a21L(^ z7^5`9r0Mf9@->FyOMI!0!9m}hJ%)PeKTHH;pRtVBg6Be{zwns0 zv0|JT?F|Qt94u`8E#=L?hSoU|F-CHTlh977{LkgEqjA9ptR%X?;fVDj=#MXo z>X%THrd_bcWlrKjJja0q^)*Il0oi^SGho+UTuQc#d6B+Au~H%5Hjqmle?QK4wuK9` z*-F{sq$Y8bJ((Ja_>gi;P0RP)MdDU31LU{z)y~-=vQ6-#w%e8=Yqkm;+iZE>lW!WC ze&AjKI$~GjY6I6;X`k!=5KBsH5J4p*Tb_$|66!NH&hJw4I!T{0B&UGN@vkG7IW+jQ z04tzwd~UREUvqC5~Bh5Zdv13Y8H@RDh6?H@h*4#~{MO(b`_6tH_Od{~0o7Wab zqr?cCRZb?o?`wPEJ`21rbx8!BR*YXB;vrE{#8SVq=^wpPLNt9)f);Qc;cuNgV~6)Y zf>WdBghVIghBwxY6)|uD*g^Q$vx6;6r26_RYn7n&VP)jTUAn^*FX1!B81sjGc$aq* ziX?-z(6KqTG(R%{tiN7B`5A22I z^=xHe9nf|%v$gMuU*4mco2i65H;#=t`LfsaFX5zU>Bns06UZNtCc zRLQos?!994Asm&I@I>F$+*p-Y{ZfqTFE5&;OKC70E08w4%py&naM=N$YV zaMv`oq1hDi=S=%M38~5fRF+0NXL`+t`R#fo#o^gKLNDVg){Hoj_?KN)@DaeC=`6Dy zLCTUvx~6dB7V$@!QO^=|%^ANykiUaz`dx=GOGJ(mG3Ln5t1}=w?&bzG&-$6#uPmVz z=FTVaVm_}q^L-Y%wR^ehXEUx$ zzw|EtY=ZRRjhP#sYJ6kq-|1!;YXzULK)s1SdFLul>6a9rKe+3?52KPgQA>BL!5Ryw zVwW>ziHdPV?29DsTd#u`oHuVZXUg9cb&v zJtn)GI&}z?tTHc5qg2dC!#&QB^*lt|Y6){BUIj?OGmDn&b890ABPc~&O}cv(_w0yE zaaYO3&D78n3ELKi;LLvZ^KC&ils9J$*fB}TWtDVg;b#^$>V$=WBFi($Jp*jjh;FOg z)1FEqG-B0UORJgcT!-BhvgGr;{>TqkdLXW4N@d$DZ42NO`C~l$GMRn!7VnboWNcH{ zQ5^ju{gbAbIKUgh!LJq^)|Q-&e$&)=rNs%`+lm%)s4*`tu6?4}3$T#?w}hG5=(Y#h zT+U9$fsy@J>M4X%@SW^BZhw0f9^c=4I&XlrI+zDq3V{s+q84H+t48FSp>jW}mH$C5 z;tNg&nrprW#6!pNsY3qrqBI;(v#&ztaO`hhZxR7?3?pNS&K_Q>&r=Y_*NYX+tJ0jE zr0|@9GIV-+`ifaIX*=sEf5}{6ZnqAMCng5!iHm*N9eRW?=rlH!gYwwNzZ3&})OzvQ zB&J7YVC(P!YQ7F^LMA-L3iiB==HSks2H63Vk$gZNW3R=VHVWavxlaz;6*g5u+l~&$ zc1`?%8)0$RqxK||8SOvX*{tT8Xyw1;-`$=lCIEnH!#Vc5!Mms@%`>{BgTrw$DJyX@DVo{_+Ozci`~iSP<<>z4#={zt(S zHlD8fdOr{6@YA|i4~wLjTxYx?f&6y}{a_a6-F+;)AvjiH_vJiVr0(PT-4x4n!y2N& z8i>E)J?4H|j*bNaC4#LY9MQ|oQo(W}$#errBAd$1WfyaM6zz}l4g;o{rA-gRj>la< zHW8*qjwEdI+}J9?nd51@*1C21hJsu^TQ9`iy9u`7sTIPI?d{*W)Leba)0Zr1oIk8e z?%F+|?OG5Dt85M0lxzO#nKZ&p8p$1=Fi@VPTSLH={(QM=nn}PQ?b|MFtT5incvF5l z7fwKDOi|P;ZtT;544?G+8N3`aN6AGTcgJwID`Rh%ThM~{wEoht6t6M*`9`8R&V4-2 zbfiD66Oj}7#=Z|jh@PgPH(^YGm`0Qp&tPj;knbI%Sg|bRAuf9l%@48#Hm`T^qGJ(Q z(gqgoKVe<08ij5UlXx7AO&VHVgqstvtWC~R+30Y$6%`S0h89Yn4&KBZTT-vvX+sz$^hi<-PBg*sG2a8hHlDk#ky*S@;z@dj2uY~A(!pwh91#n1U{$-nzj|>C8 zolD!%wND^7hnuz*Q>qx!KF%fBlj&%UYP#F`pFBJIf-X3%3!q|N!!5L6>#&|CB4(M+ z`@qar1N|R@@G>F(#}ZHAl6Nib^bJU?izNAol{n?sxx^@O6#)5|DXy;eyzOjF|CX6k z!ilZ`V#No$^y84xh)>?R_s4oOukOXTsS)AdkgR{2S-4JEn@xc?Dua>g(!kB5M?omB zgPjqUyln-%`yW2){J-ApPze=fE^Din|8eCNF8$kFwT>LHfb^dwVCp5C%`+Z0cuL5cMLiS0V#h?Y+}>44IVXGQm-T z1L!@c!HO8^ibFCwNR0-0 zThVaX{_q7SA%DI7(k4;0Q%g!=Yvq<^LLi;e`_p6Z4wQdx!Q@UAq>OaEJq#%Th(wjq zwid*nwM$N|srEgw#w1NtWgbL@L7pE|RqDf*B+mXgD1IJ?QX4KgqKbF%FE`-k&Vmx^ z0;i;eXyNQnZp*x)VTH^sNIx*%5>}bA8Rp{(2)PtH;K=Cn59NCEa#8oOumB%Rq^Kp>LO2h`i57B*v|~GMpuaGN z^d>mR@Z0Afl*z?Uq8^uR0y8^~&uz{iJ&zk6fwnb|(cRbK3TV+l`a<69_5^=#pl zhWwTDl4YodwcN8s53ge?9DM9wmsUh#w`!xyFxc|VnQM>*!R8ZWo_ zO|RWjNQ2F<(Y)g4<2n1iOVN|ZGn**luPqCL!3h z*?rkX^<6l!v`x*4HennNs5hO8AKQlFL@J6aG%I7m5xK>$f%a==UNc;Rf>hKLfy>m- zkfj@ijH_QoFr^RszQ35QQy|H2-h;wVTz|1fz=eQ!@)KEm6?c$K5~8jq9BxRo4OE|j za)p3Hf201<9s>OZ5QF^f9%7BQYC|5@KCGK|sc1HVedJrc;Of{qeT5^)rgRpBbSJ}d z-3Unmit}DiQfaz?u&*TuG+HLP>7y0zL;<_N8(53>vr*o_^a^Z6wyXn)R!$j{((pl5$>dzxh8MsdNOp}(sT4+t!Xe2vlE3w5;n1DbG&4N!Ua1)}D5 z)1AzKC5_}$DMxpp=*l#+@KmoUY<$EmCnEN%pfT$VuUl-fi}BkU*59>?tcoijLk*I# zQ59;7sg4AgmMdycULGr^)`DyDwkcw-smN+MpEMMN3Q0A5uyjkY!t-FsJ=|1sfp&(j zPk2n0l0t3-|0OFLCFsf0W}4~*l-y~7u$EK?XYmlE@=LC#{+O=Ux{BZHN)mE%@OJw+ zWew|h;ybrWHFM5{mk@~dI5Tp$pSJ=-(T1jqwbnrR61R`3FAx1SglWEk!n(862$Vc} z{@ZybpD{$cQ&qsg9N&;Hy}$h@jg%P0JdNUu2*N_)S>7?X(t~djtTTis7mB;b7et!? zbeC}a!+v*Gw&;obohw;8h?8&@<}g*BI^B3$tz}_|Rsz)^bWN2#ai>MsjM)q7Jj|0a zLo4(sDgPR`)u`PPUJ)`KL9g=Eb$tRN)b2;r9nb*;s|7t`zm`}HdtoI>X_NVUp@Md% zF^(b&jg;O#3{qjLbWa8=ot-TrMG~Tn*LOm5uEm`5zYe(gBpNFH)5eFiB+_};Sc+2R z63*qWM#0z(nmG-sb*o>}QCMTd8i~N`X#1bBKuBN!x?d-D<?)0|LgFWl5D#yJ9 zM>k=eMZA$<@qB10XvqB%m=o~9=nr!Tn@R^Ps{&MpSIqHw5~9xDkr&pegC6l|kRXqr z83fU3PP=1x#^4$T%%=7~JhBn>txA4vgBkKpGDB&&sO7!g0>UzA???g~a2%ky!{ExMAyok z%n!&@xfAo2sv(RT>VgX6_GumYL5V)@Z@}yJ2G!t>H8L$#d=Fsx@C@WQtG|PH3sRgb zcMTNP&%?}U)H_7jr_CbD2vQE}YG*^KPRPFDgXeMbg93Cq_Yu>*0|gGa-`Bh7g1HM|S8NOA z``!X#M2O(k4p-HItsWCz5j~faiRndTFksiUhX#m&|LKVu#TArk2C0Fs6@IZt5j*vvG9~>OdLZOeKncAx$cQK+Xu-NYx`Ot?Enu76Dl* zVe3enNEU!6V9*SNQaU7U$V~mKOq0FVaPGd^P9D)dG?*gM2+~=JkDSYEBKO7~psKm> z_ob1Bu*j|g-0{2Aja)Tw*DaST1u1WL$g>)S+^V_H#WGpQSLjl5toyEHPAuiz7@+6Z zzM3}x-W*kUHMP1#kW&Uehb5wWoggkhQ;^+8uez#=6T_*C>;3#%qi}}V?`?ET4ZIs> z3@GcxM2T+cDgj`ikLXwy#xbHaE!Lov*kN%$RAY0>C+F$y}ZZX z+=`!)k_J%T zEFw6XiBJFK4PZys@w_H!>5?V6T^{){)y=1|spIbtzxxOVdRu@B77K+rY$$odvrL_3 z#pQ{g(nCn7SD0aB=?sG*(a(#d5oxaLa>7jGa*~4;L>^?9IrzdPg>JxWO@pw2v~>*A z=AR8nNygJsWHaey77*>tf|Oxqi4g?H=^9cj(CYul!E$3?yxu(3O4$B<)vCmzkxKdz z6uE^R9o$-EnJ1n%YiVbognBwB?~j13B;P0FjE97 zRe8QaX?YmVz|@#Q@;ELd);Y!{jPkCLuozeY!|2h*!iU##SY?Sr3JB7AybTXI=YX*i z%?gGh|GUNZhjh1L9Sqg8%EckTn1*UjU!S?1Xf6^dWa@{#X6M-2+?f2|o+`voz+I>6 z@Dt+pLUoXqB4q6y6Wl4V1wFrW579y{1*j}2Bjg(F7M6yR;kK$H*h#dr7Y<$e3S>VD z1b#$Kc#%HhsHBEbov*g>tNOqlJS*3Pf2isPg#HzL=No#d?f8XBTIU2=J48#%q5L7R zEHCFrOVops&vjs6toNd~gO~HPBtg{1MOVb_6?vq$R%bHSevER9gk?l@tZ#|F5UJoH zkIYBT;f|5}GzOtPMq5ut(qyr2SCAQ{$;rvaU`Be>Z*@DL3{Y=9EL8ZEG}87;QkNGy zD9BroFNpgE^bbB>-{BUXVY7)yA-%bV6aX_O+rKjI?GU3S*Q)k7GK;O+M6uNJo>_sU zf2%H^O^%ewtBn|R&d@*uev@1o4o)gke%kGJ7W$tQ;QRo-%2za_5smN#m`!qLg5&M% z1)AAB6?8~-4@VI=FCVa_oZ6I^+E8huA<6F2q>c>dd|@7z%|1B#&9*SO%|?>1F7E*i z6YC!L>pUkMEe)PhJ;wl{zNoOL6Jsehu`_Q%sFE0MbIQ5Vls;d8cXg2M6z>i;=7XS0 z_U70EqkX+Rxzb2iLjhyDmD-Sh$div6(3Ts5QneSBr)cIc$lEKWNV`Du_$UzG&X@{v zf9w4zII15K)QoC9wJTWf_65xJ>-AK1A6ayD2v49RAt(|F&J|R8fb-Obp#i@OtrKpI zdTYLZm)v@%1B5&EmPPp0JBD-Op_ER)i!Ukgp>j3H>C<0Pfvjd*InQ9Bs@<<4?{WYL z>^#)+U%?nw_RJp7=`-Oyx*haorQ27ipD|@Gf54}~qmcPk6Yi3-8=`RMFKcnJq((@J zihHYluD+Oyb@ujcf7LD{YV_?5>>CKy1U>_I#02+FxgDVt9%?}bqKp$Sq8#Wa=ylg5 zX-uH47ZHVs)i#ZlrWq&9feIB+&du?Ail6|Rt!vVH>QBGz*+sJ%+ggO=Vf-^_D72g^0I6tTIs-J8)$*bcqE)Of@L-UBkA@8{ z1eo1FVLNWPK9<2Yz+Rx9EOtcG40uO}(NBgg+7OoDhpzZmZjv*Af&$6`;p?U)`CXN% zMV@3~(jFGc!cTqv*55$DLpNCM^3NV7EjYF&UG#?U&1zI<31>e4peF}S{?`(Du2lh% zFoYwhTd5GOZV&NuS_Ei?oM{~L$(%|JYVadZ1^Om>EF8jlzf>69F^eSClUZK_1XYtV z?z%@0_4v_iW1C7&;G`f+jJX?-0UZzpro38KGm6qyw0&1+<)_&(W#t1ds=GF&Oe3}9 znX-6KW!1Y^hr6ZICLWPPC!clew}8UHoT1guQTOCeM46`JZ|I z6tqf;P0@7}LdnQj{Q8Fp>ooQ}AKiBGP5HB}qCyozHE?_vSTs$ctKF>-Jm<>Y+w~30 zYl64FaxWE{h1=I85uTmZ^B{!3bJ`$gwgYQS{!;sl2f80PZ|)*IA`xpy2GG>AAT6o5 zNOkZT_VzR_;TQXOt!PTdWv<)Pa6_mf2GA__`ZjGPyK5Ym&f&;CSt^+E*X%%AWg~KyWKW`t*>G5Aa4WL(*2AgDAJ_m8L&s}Gb z$#(3A-Y=k{A}C=q{tixL$=hU5Rxln>2DVnvIX_IvgQ6P7oZT%}^f~`xe%(LWmf`oy z+k|xWM{RE^khW^R9jmf)sN@wmPWyx7+6T6yP3gh2K!K9!A(JJFSHot01ec%Wll$Gn z98iVEw~VMtx0byT;N){tEQMNM8dFwi~YL%Y*;N_+Ch zL-piEt8i#;g{B2rka_}VzA22l$UHrv`A&xGhSGC|-4e_a&%b##cf6giEOuPL46d#E z7QnMErf(MBF)y>{Qz{00!ILNmc3(GNDgVw^=gsDdedS3rXSt+(wv{x@xr$dx3ow?x z@<2((DoF?2=W9`r-wiqq&}W*;$^1^-fNQ>^f|9CjWmA%C5D8xe**Gn>x>wKIXNo}w zCk>+cIVO?z=zIvLKq89SN(_IZL%SkKL{6oLXPTub_lwF2;9*Mley?fo<(F>jDU)f; zIJWEPHDNr~Y$gO8d-|b|U>tHBxO}M6OPVh}bGk@C>H$7S<_IxKbB0z;0_2C3V%PUN zxKHsbW;h2AP-kj)qOaG82yq;9?wFItNFMwcn*L;N=k~uW)N^;CS-_7?>l7I3T5mad zO`^&*NmIFl!~s)r!pX1%P&YfuDD$J_{B9N;_UGLx$ao(Q+q=$$n?7pfNi=@IJa@UF zUP(NKnNi^IC_39Lm3*ET+!IAi1N#Xme-W`_A?TpK1DqgRgrW#z zY+pSN$@uPEJ)KZf9Ag9kb8{t+6Quphg z;R8TB+1c`pCIb-S0X2|nMp$f3UbR#B*opzNy>8OBL^SrSU*>wbW+d&K=V>bVqhRDF zP9@~AmunTU!)P1f-v~rqW~~uQi=dm&55LMOH7uvZV{i`$qP!fvO`%cMzQRR2Voe}3 z<7+ZIZ}D`j9Zk3Co4j~&lKxOt^i^{3ZxmG zp(vx{A*5p;0RKM#z&Q&?uo zOYp7K)g_i@qB(LwMf498 zAfIcCW8C@`W2&(y!nPPz&>Ir=d6zoT*d-dXFWFSf(pJ#ZAawzoJ*_=8vhD82%g$W7R-PaGs=ZJ5gb>=McZTU$LKnX``vENHs)|Jh?9T)A8N82Vv3&l=^1XpZ zlKYNfrTZ0?v*d^Nj)cQZ;!pL6*^sY2VP}n4M_vyl+x8ve^8%mqoBb*}2*esQuQh-| zRa?!8P@RQ@peQX}mWA9wWyB|Xvu3T9i^O<#J0b_Tk3RhWy)r-ssfmKjxnh^xX6cH>#$NgFYq1_Ou{asgzYO6w&7KS)u9z~U4#ESOy-J(3URGiS!B@_C^PSEV6DWJ)lch!+nP<`dL90-)UmI0&`oS5NR*XLG_^w#n=tkClHY~=u&E`E{og3c9jgIaiqkwdkuk?0fW9FTB?XRo9P%W@r_9KO4S(!(w zeR;k#*MCz~hqC?x;L8W#Ci5C+Id{u}O%GLJjY>=NoBUtJdx*U@G8hEBP)o_Te6tnSGe)v0#Z;DubD-0EBe|U?9*<%FUZ!VI| zW8A66wGVsTRH5n(suO~Js)y-Dq|8&_kZoTbD-{A>`U+l2&0uSiJkJfipR z(oUG2(&gS>Ob;(t4Sa8#JBq&0C@%n8vRr>iLsk0gnhzpn>jA zYfKq6OmE7-qDf?IP^g>dP5Z;${Vk9bL{8pusjA*07tc>z)hApqD$_yt(0S%sZB8<} zQqZmDmy~x^h!~Ya_D&>i$&pL}$LD)TeXe;(Z;6MdL#xhd$kDC`?9d@HsVN#5S;x;a ziQzAYdZR?MHQFx)3zKdFxjxR8f=@mAB=TE64d+L1KJl}8<-@y@&ddjmLxYXv*SW_Z z6D|r$NEKF6tL2227pC%GAz+^!PEvM-Zcd$ny5Rg40$HO=t!2eA9OwkXctImwIsO2@x>U7Os^B73MN+=eHJV97fSOWDc)d$8mHLih5aBI@5n%cKPwe(bS zugTyE3Z{@pxu=&;uYrHu+((cfco3&pIt9(j&y7I-^`vd;UH8k)BfR3+$vZmofGz|z z^&XXs#wq$YfyRyzCD4t5Jv_h1RRe*JlEwvi5ABM>(ro9sZ#eW{?@Zj3ffq~v-iZhV zjwlS}2D>tGdmU29kXbYuP%HX8u5Z-G%!H=#rjI6Qw7nKV8mdK7#qBLx7fi99+-al| zhyVdDL7h?Pl&$OWRF(g88e@bhP!gtk&#&}0qN*>UHOqrnYj=29bPVk}Df|R0l52^Zl=Gm>RmDqYbP^0Z|J4?; zAe>%HbMaVVnE@qMHap~~egDo=^Rrx0(a+Q0ig?Aks{jkzCf!~&`mZRit5l|s6F8k5j9{Hy@$OTOTR$==*HNqmhTU%jk+UK4vQhf#_gDf-tUzR< zuillzfXQp2AEIfDawCF^Nhe~SI(O(5!ik$eh<_$zRv#4d?yfNiIvMFX3laN`HM(

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