From 00d5d817b1253ca2f867fe328ad34f49980957ae Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 7 May 2026 09:00:39 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 07 09:00:39. --- .../20260507/20260507090001-Binary.backup | Bin 0 -> 288968 bytes .../20260507/20260507090001-Config.rsc | 4599 +++++++++++++++++ .../20260507/20260507090001-Diff-Config.rsc | 22 + 3 files changed, 4621 insertions(+) create mode 100644 MikroMaster/20260507/20260507090001-Binary.backup create mode 100644 MikroMaster/20260507/20260507090001-Config.rsc create mode 100644 MikroMaster/history/20260507/20260507090001-Diff-Config.rsc diff --git a/MikroMaster/20260507/20260507090001-Binary.backup b/MikroMaster/20260507/20260507090001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..c058d80b1213cdc49987017188b788df28c33b50 GIT binary patch literal 288968 zcmV+aKLEh*sF8EXXaoQwJ~wk82P{=HDNEHr9V{FG000O80004Z`T(2&Lur`TN(|6c zh?Oneuu;QH{|XyXr3*#R*nyeCBCv`+xi8KeYMl6sM|+slxc0{&dbNIr0+g5vvhPYT zUM}HHKaMETQMhF=3Ni^<0{Rx>Xw8}Eh~8*;vL;UjHBAdZj24#JZbovhNZ42T2napH znVz79@FqeT`Sh&9J?@n#^4=_=98ZG?Ns(9*8REB;JUK)O

*DzOcb_^F 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⋙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 z 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ϝhtW`iWAf~$lfmt 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ξ8i1+j>W*P+pFg>s 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

~`-7?&=7WLWiR*F3 zYrC;jk}lR6Yv&iy%0t-P*l|%b#)Zne;SOos0VLnyum@oL`|{g4-#F~#+>$({$fOF) zm5(Ut=3XWHfpxu~y0r*ps&Kp9+KV3}%i#TICZ3Mz_Co71_5##2Q`L}JO& z((dSUAkZ`^{9+q0OcZhy(d%p?2P0E@|CLE4A)EMEP?GojL*=ZBkC`-;_PFyJnv-A{ zt&xZToPsn(-{hJ{7m>~jm?H%AO=t-)(3ky6xjuyK#9ug}vx({g$Xqw=S>CI4@WM25 z3gP=cb^EP=bnqtJdiCKD6l1c;iV01DIzxErs0ubDc)_%>D!B+QpO&`^vkdJ{ zV84#EtbvCpA{!~`mz7OY0bhCu)$&{v)6jYWa62O^lRq!@n*plo$3zIpCi1v=DDgk#e z`epv#h4hxYdQx881G&0)Px;cM?blhH!VbEdPU|YPxvi9B;Oeenn9jFSO(n>r3xoQX z#mBw>+ZgtoQIJWZ8tyda6^l&(+J+D-{Ol`~{Gh<6Z7%J~@w>MdTZ%OdLt_6GCzefo zf6OIC&FUIw^wIzB5srei@}IZA6emQ&Vo#wUmv0}?`T_V`dbx=zNg%~G7+8uQT>DYQ zgnPjz6mW=OtqwCf$`)L~Itx4(gvMG2tBIv%KqVx!7 zL}n^VDo5(w&tU}>vk18M6fqNVWib;f1xoZb?jA!tGY3*~uid{EoWw#{*1G_Q9b6Y@ zFKt{KS3|gW7|VmjMgR?5%CuovDTqz&3XuBe#kH*lbx>Y4^h*;9tRgjJ^B88Ze2BXH zFP}&1!y_;u874)^(rEZ1*J>_t%X`&QJ)K_*!o^8RE~kjpOlB7AA-~;p?lf|!EhuRJ z;>2;VzN|NgO-$SdtARHot^e;NQ^QMeNlX!2Ckm-&!x{x(Xlh3Vc8-0sUcJNfKey>r ztz`neYz9Ma?9h%omM2G_+&#{E*?d0zug0*fIsVzi(QEIv89% zF1S=$k4Eb8=(`7-1|~9G5o^%U1PGG>J8AgDAFf#`Oh*&@Pzxy_N+F=UtY;jiUKSPbF)Q$BsIxr}I%4tvjeO2qeI|dCgMhXULN=_Qlk#y`uN~inwGm7Ckj0vSn9aRE7rc`kHD?Kp%%s; zOQD$p;4wetBH5mAiGr9Am!O=3fJb3uMsBxZQw^1iCLxt0EN^FYc#p%YC}lfz+VjQa znzl$M6TJLby52~0E-V)@e?$lw^?f;g(9Z;%ZLNl?0WBYR!$ zh}}ra!Trn2SNgDI_C>#LpOR{VbO zIX!1jO5Y)=`#~{<|L@?!0(z<6A$VJ~CdfC`Suv3}5i#E;p`Ac(j^LCkrww@VTN34H z^m<6|>R>SF92i3xMN}BInITdwBT49$v?F-(ahgM>;~dW52qrj5b-jmPpojA6@<1f}J3|yky(39% zT>DXfO6<-bX6|h+-XAKrj#N?jNx!AK17;9?eXDIs(v+lZE%WdN@?aNVw=k?NGB(O> z8c9NbUj@EQ5rG^KQd`-++;M(>?`&;Uw?p{=hkU9dQMw<7YNI}Na=c+j7sh1iU+N_} zs5%EV>Rs$T5%kF(O6O@ADk z#SO)Zw<>#WqF-W~ZCm&|jGw8%>CDvY#S7pMzaN|a=(!hai&=@@hi_3AgIY#Kgw0)3 zivfas1%9^Bk}^yV^L>~Us@_7|m}m1pYwydzvd%O6lE!*GAp#^9$A5)b0BRS-p(6G; z7+TFJq|*baKC@v1@uB8YFcy)IH`{lf|I;7EOd;={ymfX36>z+$jEO;!22Y*ov|AQD zf=|X-r6PFvd46-`Qo1lN=sU93YUqZ`{aY%QJzEsRuQvmjcH1q#t3N{S^M=1di-jfw znXc|22m;8hz#|;XdzL8-;gmyRkuW%#;xAe9Usb(rCDvIbtD5i>3qppS4Ch~}x=;np ze2wpAjJbOLym$lj3j_*Z%CT$3WrgmQyOnMNX203w+M9w7_`ez2V2^lit3B;z3Qnrz z<1a)_j^_SdRTz)2-Ofp%axuyj?$W`q6nI@54_y9HxY>)8`VK3~lrejMK^sH&bAa#C znlc!)QtC~wsLV{N5U|gilswQ%zjx2=v?5zp0o^+=-B!9*U`n2lFd}TbE&;mVS&-js z=>j7_0-koq<+_Zwz8I$H{GvK~kg8y35{*E@0Xv1CIJ(8d$OcY3>|O7zC*HE?5v-U_ z(QeE#6E9zE1{Sl;7FE!Oo1rm~xr+iBe)t*d?qyhZ7=8fz-2xJ7HjjBm@EL(PnB9O| z^^H#b7_L15Lqp%o!hF0YpZVR~xIHx{M@nI(em`{6n;&z=)1+oQQ$mKC`F=DSnisUkz zPo>x*X>_qGFOiQsMFGi-H)EBz7v;ad8kp$SuIaM{0%*Qg4YxhbAfiH7ew| z%rB7@SuRe8t(bvV436gJrK*gOdlP!TZQGSo4%t*1g2!O1lJ6DXI*P2v0?X{E@(Y!N@4x(Pk;{Zeu^RlNAky!= z359=@7jiAyh|noCEII}2+M>9WoatLrd8m+9<{W7}dqx6*mNHq;!O;hZpo$tRc53u6 zND_HlcmxX+JZeE&4=Wyf!g-$}Jp}l9{(VK5t+T;Hr*Tl^U+yCBi22&A{i~Z3&FN_L ziMGE29rqKJv>eOWSd+qT=F!179^jjk4uX6rKCUTjaJU=WD}rIfLC}l;9(H3_Las3r zZiyCok>26ZfILmlhkhUw6^y$$<`%$^B-qHR|8O5_{QP_ier32~XY`)Hpl$wl0H|e{ zusoeIU(jw8w&oePg^65o6JUa-YB}i8{!vcv(f3vG zpxbj77!1_>WjWg%oV^E;95lJzN*lmy_MX|vc=ps0&b6~t!t__MAGa_}sVG_gH+zeN zFCm}9<~itkLY6}>biYqH^&|Pc-%hSb?IFf~iTSk`|L-3?La_9_nv1oFqu6#RQ$seK z&bV9^(iwSv&bHBVr*O%)J*106v5#XkwzxB$6$%$JsQ5$agBH|}o8uQL{kdGO8~-mn zunHK{WA9FG)rOi^0|8Tw>vKueuqAzJ&29~pjxx_JdvPqOrauOEdDE0SwE~7>3vH9Df0uPEUawb&R-!k{h(x~($K+uUFXa% zTC;mzKNVHhN!>Mkt^(qHqnE!)r42lY1WMo5h+j`!vQhEmC#qHqc1$pvBJJ96>Z!)) z_UC)|Ojw4{IuHzR)7{b*9QBfA9KW~EnVcb*E}v=1(O%$lLXlc($Au1QaN6Jc3Bkl{ zWyNp0nDeP^v~+ZoYuz_Xs4uT*6~8oz?(;=;EoM%Ju=+y$HM+wPjSIaP4tN5h2nY%s z7^b(8f*0j$?H&@U+pYK^fO}-UwrFrXvM*GxT=3zZa77t_3?|qHSgn(^Apn%|1n8KY zv!t!)kNG7NKcdig4`q)XT!kxju_@4m7?HL#-@}Joya`z%h2cj?4)+J2_sYQj$;3wd z81|@cbEk#1BGNeD?Txja!H_k-+}SY{Z%?rMsRf|Zwx)xF$2udem7iCs>7Bf*$JbD_ zdmH2kgo;dC?L%A4^+B8uYZBAbA#&oC$hiHU4Hsue z^Ogj_D`C&lm0fcE0X|RYd3C+sl*H9!957-15nKOmFAP&AHi5d7s6x?Tj+E?*99y}y zba9gS9J9KA6%CfG*_^{)wlM~48cw0PzmqyIqnz9ko#|1A!BT!1ctJpbOLf|^UQYqr zf+@7*z{%s8P#MJ2EG>~!IB4eS$9b)!$wUU#Dmoc3_%sV8l21?j@n z8Wfn^k2sJq*Yu&of49LO5QXROhPxs4b6%`SF#@w2%nMYF<(|plmiC(1)&vMfL0Bv* zasWV0@>^jjIy{Tey)Uc^r!`lRX=3)s;wRiH4|80#6b!H1vIVW~aiO#Daqt<3^s%|b ze6B&X>ioulC7V$Xv4svwJP7d+r}9=$-7S4G7|50b%r-Pu*qpL6d+vpi;c>;E$8_}w z+gFrksloRPVAa#RiLR4yql*z7NR;?Br|gT~u4y$bs?Sosr>#F5B{93>HJpgL;n>|$ zQg?@2w~*B#)cNzOp3fw{#?0s*?Y1~ICuPG?+uWgRI6HTwZzi2eH*P6Vri~-$Om*SR z5?vG9Vo9T|@ObLzf6XF(*UUqholqAUTm(Z}VGo~D0gug2Wlu^#;YG8FQ8?MK0JH|Q zmDfnrW>flL)O$8B05nu_l6av-G`k=rzP)!B4TvPIWPnQ`VXna5;&2i#sg=Lb-{dKK z+ZpEZhRB|&FQL(nO8Rv-GTO&^0N}00ow#zj4xhZox5V;MGjCHyuoch8Kkv$8qO zgY!qJp&^4P9i-$#Vq(yxgR*%{RqkB;uos1jLxhevu%WLo#3OTyum7 zy3SDRWu{2c1y42=#cKKhA9Y6U-ntECC9_F4Mb|(Xk@|7nGRfwe%7oq2g8Ba&NVp z9(JjS?vS1VLPSj+;5Yq!P;Y>o1%bTMBqkXRA!E$in-~ckqGtDEbhMxuVajy^N44D=I!9+e?7U67& zL`e-tG3O8f>wnSxE;Q%J>2l_`*>O^{pTH9keChweiy5aPo!Jsmh_s(Q_Urn8+2YFCf!xee-!55?ar8>3%Bc2QSINvq6JUK;g1X98$RWd#QFisdrBm2Jz-*r(m79H5E22#Ol zW`4SAq-sUGep}L}Ylc#5cIc{nEwSVrCAt zqSqtw;}A=NJI=uTzrVO$L@XSv@WgxAD=XlBdzg1qIDb1-GQ($OmroImBi$t?g8+x> z3}9ugr3JWtCsU8vUQ@mgLWr9*ERHXA3V9^)IEng{vI#nTPEFz~?m+zfIoIUG%@`ki zhv_EB`k*6(EJjA<$eYaEsn1J5vAMN99*mgA7Ju*3sOp0 z((={9_i0wh1lJeShoOa=9!)d3k$rhqba2P<=DSjNwiUXqxY!+U&)>gym27;nwwMO& zYhdYs?-wz}UW+B3SUZUEyXI_=x(wN(0_%&4j$4^^rkQvN_2Mup*Yccutc#NuPM%K-!4ha zTG+dWbBN`7r1Q7PHtZl5cOaYX!5b#9xzCs5ls zlsD&%qFXQ(D2~c%eSF0X1FDBo4OQuO;D?^d6J!OwTjILS4~Py{VC8T>-_fHZmzu6j zumAFxf6xU31OM<9BNP_4AWQUZf|IcIE$4`MP4)tgFw2>a&-#-3e)lSZ4X8BW`;IXU z7#i8d$IK(}38)~4H04#T+;F^M`x*t5MYD_S#Ga!lr<=U+VS=2g^VVa)~OwqnmDPJ9F^7%0buFTS103wJG7p8+d6Q?&8B~ zA#sTtXs@r=5<2E&-AC~G)9(@;)qY%nvIZY~Qfl8H08p7UXaPLsR?4`9VDTq;VqBek zPFO7RumIR)n+tWaC4W$6iJ>3q#yA$3$7g0^Xm%Sx^Mw?{_3ty)86?WSGqKQD2AG9x2N{m3}^%TW_?vLS*iUf{;_FDt(!T6*{FeU0J zk(>Z%Rv$j{HG|$bZ%xoh9AjFh$glocF#D%HPs8&EI%=g;<~TXn$^!z&3c{oMG*R_K zdBk8@w|(?-32L>%r<(Q&+n-N%XWo{R;}GGiHxFd>c+^q&p(HDr3dScVDi>C_*FXWB zYJ!rEyv8!_xdi)tWckmai z&WCyk!cqwUKyO2%mg|d9VOrAM0|4|K6JSI&sUe%(q%*HO-A1dkqn^^U86TSVtaE0SZ zRmsi-qVR{n71cas#F>y_0Q>UrR%$q9RvYzDWga~ObzdVu@H57JYjr^ol#z*hm7zwo z**V6VW-qFHi}aF9HVbe-;;68jyMc2#bw=?62|~E3dl>5}819hXLvas#NY-_B*9y+5 zQTiiI02$z6p+CtHOEOx?@RKUE6l+y#>28(R(2}&f>sb!OQB6J~x-2(jcBlT9a1e$y z7u&0w*!SiBZ}v#*Fpez>0+IH3>wj+AtzJ1=K;8q}5rSyO&)K}2Wb zW&i<(quVKBR-f~xbd6e#>zLR{AN91Cv;IjE)7!0{T+MrfcjbeFY76aVH&wO)%0&}n zpTn4UT2O9-w{72@S5G=4P2IG$1Rz+DDt2KR2n9IqOra<#VC0&?)0oSQrvgH`l@Bq2 z+wep_3BufOUHC+(HfMcAp=D(TdABlycxX<@atPE9k@bc68$p(FnJxRt=X^X;CYz~$ z48(i=o!g3Rg~kG%h8W`w!a_aswO0JB30#mcbV2D8a8gCXlaSw)Zkb^|i(ZQlSl!nN z9yusqM#wd*_l`XA(?imNP!A$$XzOxwwOmxkAy|Bbq^uc1*p{SIFlgSn?@;Kqg=J%U zJXC4{ZNAAvbxIKIM7kmUHJ^;# z@^CUMF5`-3_Nn?A-ndCWc1WUqd;k_t@;;X{=YK)?o%#h-PU~K_Hi`u&_Eu2ry8?^C zpuNb6FVmmoiMMY(ob!W2J^`dB6gjmgCyVmqH|tMJ$sUcrYYes=NXM)nYe=q^0$}bM z9@E=>{LIMt_=Fu%y_w^2;}Q3C@3e;?r(vGiq^rn zz>E^?=TOa=U;jT%Ju@~vJ3WN|*zO@5^zt?>gr&9b3O{Rw$q7w!-d0_aXk`lU#U_-q z;N1CXwN{v7W>P7dmgq!U0C1f80&CgWqM}!1AEYMZIsPk=#qu8fA7or$n7`q_zSbfrv*4YngHFH(-7EXvi~CO)@ShZ$fHi2t+{X^RNy)3i3vuKjY|Nns1#z z#ss_myY^o~WzT3^GxiwO(5pNx17{V>2OAFysYt37n#SEDfH>~K{CSZI%8{F8rmQoh zyFC{bUSRPZn;D+AjVGFYy`0M1%Vmz1p9peKdD^iW4n%`Hsc_=_#43Q3#HTu8E@^bM zKL`V8ajeBM89^7Bk{EOFituI~8S0WYu+Vz^e=!})2^zLUDC7k&eYmu@+|W~)k3W=a zo#E&U^^)}c3>ckcK%ldmR{s4Jnf7wy0%C~KHBFuQe4Nen#+Jpj{#h-0#vk-@3qYTQ zJz^?WU()q9P}k!T4HPFLxL*{mwvLH>GGNEMB$|S0elJ|mXd1S`z%`9NV>&@Fu3FSL zn5u4)C};{vRngbzoSV4E(gj$EAg0JsU)A`i=sz)viji{p3sL8Ob>xy%inY;Jqaetq z)A!~d1sUqThA45IgYsq+A8P3d@)*APMYETsU9KnE2$%fT7V4xC|GW~UZ^4qw)!c^= zv4NjblPh;taFdi1QwWBe1_$p_?Dh~&g&drPvFN4O-GyvwE*~p={d{Prs#EK7A?^;D z5Pjx9rC(Jybd2|p-1h8s4@ZFT^>;Z8Io0)@5mW*;W@O>~LZSe$;p1~O(l^C0kyG<3 zkAh)f>uvYbFa%VIxG=xEqg9^21;fD2E1BtK-lt-`>gC9D%*4?b3fVYH3B9j_P}&G%m5`_tPE1k!0j=( zE&Iy8P7#7z)#m3Cq&Q;!8lT4%eE}AF?ZLndMqCH+olYSMmRru4K#hICq1;OlW$e2S-kmG+Pjy!1YxbZz;DNOe`i6#D zDY#n52M^?sSd(@4hB7R0k6OoC*XS#l>fv9^fsd5CrN?7qclLe@06X*#@D}BAfYRq= zdcWX_p`$o*AiM%BUQyC;O*@<|UTY!s+pqf)NL*jesXGO&R7+zLSM?XCq{qLk}eWa2V0B%iD*TAvb{_{1nNX_*>RkX zi2fk*;3@e%BZO@rArW||7dEUZmNT?#c#-^wt(GSk4P6__EX z{QI^h+I>ASpqqY2F=b+m^)S2Bi9aP}7I*nr^P;vLKZjH1$TQi}$Hi+T>)r87Rtc6* z+)eCf`isU^&`JyEs02{b?Fg4bkZfTKz%BF|Dq&~Px!+eZ#FB)GydY_DW*hWB!Xv=K z_594G;mENw0#z{EzR`*%aJXBUE?} zj&l((8NpzU*f+U!(0HDTkTUotz{zP>(j2_IbK7b;#ZBMs>u8}dnnQ#6zk8zt1* zO_$@{kZ$gCNl~c>7kjET$9$NSDz?kE6`r{5wTAo(8@^T3n3Kj2X>ehYm|d1OmJ%Z$ z%q->hs|BuOe1)jQy>e6CgqbK9lpm3uRdSiMsN(aJ<>E8mCt&}i_F zd~8(!8x+)VrV2IT)q8}+kufNR+$2_gu$`&%a1-B6DoBC)A@@-rGclmtU6N^(NL=wH zFyqnD0#mq_$L~y?IFhhEby`t!VP3t6GD&?jcOs2vM`vaEk!nbS4l4<#Fyu=Qx1(>jc78qD*xBBzt_yikxB`wC5{_Tw9 zLqaL-v&{5x9ro9oH7o0Qv;FO!i`DKECu{B=TZmk9Gn&_EGpxYOYYM8}Vqt9D07e0a z85UOJtMjx_3fCZ?-G+Bq0&O{VLJ4LiBaNmgj>q!2LvM$oA@1v`h&3$#w&TDrdI`+g`pi(=_XP&&*yR zd3KU-uRjsblJUv8p16N26K{dupy(6qh-v?+DyAyJ=}+qZ;^1aa`APrv%KYV`xIGTG z*VBe5&?msO9zmVTnsF?D&+rB2^5WFT3y%aM{JxS|`V+but(WsUBH+`mZd%yOGvj7f z&)eS%6szqf6Y0x*ortlL4y#Wy!W6l5lN+EnQgoZ>oj3;ZU3a5h_~eRUqkNG_!6y z#xtnX#6$*~@6=~blXe7|xG`mR!~@&WW`J>p=)Zu)Ez$<0TMpw>#HJe;r;Au*MA-;M zq55Glt({(gI12z>X?D+20d49`6rf zpo{i!=(!waB?02Lo6`LZn)iQk6+kb3nr3<28mh119dUh=q6PYDTQOg}rNZ#IMe%#& zIK$eWc7v9BUVH|)PwKqq5BkYNeQk?;`Fo{-zd%W?0)H(&F)pCJ6ehXR^V1U+&qFFa$vT(XNGL=ImnzeOY;L z-FTDwSabsq86csny&ogJgS9ED>PGi8=1@Pv|KX;UVuuq`MsnJY=Zzb6rh8x!1&)hk zT{F4?JTVfbeva%4to2wk8s))=TK|3fYJ>wsYzv%ro)++sikFs~JM{TAq4qwfZfeAn z$fo*#K7P*z`y=G4G+LKX(g7;p&HLDNDhk`y6+;859_@z%Co`KxBYaNB|K31hPTWyl zj_6${a0EIGlcT`!+iIx)WuZlL-ojN7bE{h5w8$njOSrL5`DA1W8PCS2E3l!&X}>)S zx;c6b@_0SBX?b8USe8W=A{65%KumaHPY$83FW~nqA$qyNx{@!E&D8*yq?1z>vN#^N zNh71;F2)z#03wjn!I}m=K%ANTr~#+irU!~xS;Xf4QZvlQpW^CC}4_Sn3oS-z4E>ubI#zR&btf$ z(V(lCZeQFEz;_MvKVN8eZzj6WvyAJ5tCrET36Y&)9RK@RG6GrPN6okXEemuFYMD=B zv@YB;OvkHrEpxF7*_Q&lIwyA}>pGtbjTkmCRe@KkCdZ65SRa)a%M<+2`sK1m&uL7@ zAYdX;S|}0}i9_{s4_je{uW+z${$AfD1}E-TMfjW-xG$AWqq-D=RTKXb^-*E7R4lBZ zxk|xBAfn6#zeL{s-9fF}QtZvk^=u~RESxlXN#kJI$GZda0Tpj=dv96;gk++?rb&piY5*ofr8)#hAkx6ny_A?crlfXej8|=L!D`<>NKNHN{>CSQL=o0oarE@Ooh= z!{amLlO--*Ck(`{!$Z%V9cZTR+L>K1y=xXhP{DqTr=rDqPTI<30z9X}X7u{dfEZBk zK%8^U$2MiFx;-km@90D`EDzFU0XXv$26?^nj@V zr9|FydS}b&ipPS}okYjoZo)*=6=YGQd%clV&J!BZ-PyHI7=Z2Gq)DUnko>>0m-@tu zV$&$IoLdVb!zBnF#cEE`(bWm7vtLHb9YmF7FubS=unFPja-0dU+b~%e2x4ESBvazg zJcv)XPYUah zqPNboNJF~YGav~y6rF5)cE8ZML|)AqhuMTP38V;fcrGSFvWs9XF1mUsaB`SbxT{UOr8)q?)LYmrDV@L+Chfo~ry(W+-gz?((om&f_91s*had7pDqX zBps+{+{3tZaFhydUUGj;fRskX2)j_$bSMMdr$9CLh13{DmAF6RB~Sg!G8sZI@V*;G z8iN+-aueu0GAkciq25(b7p0&l4CabnlcITMSK`_B*xZd^Ts6X`iV3W>a;_G#VeP9JkY>(+SiSXG{R*5K(JNq^-@j=q<*b5gP$2d=LM7MZA z>x&FAwm||t35?Y9DHhb{th`>-O?JBrsA7!^HDZXcKNrj@AjONc_y6QQS~xEy2S+f> zx*>-QtYLc=rWMdAw;K%X8tl>lW$yy9Z=hd3XQ%#4t#b&f*8P2~_sZu!1d}ClJsF>* zj~`k_JPkmx1Ef&%r@`XEEa;*Q`jdp}+G{13F!ZdQ-1$^%JAVy#F&tIjjILNhdL7Ae zfg&~G*woz9q|A;=RsEU(EQe%1Qx8YDAUOh7b8PuNBW|1{{ye%I|u|DRaNF9lKs80N6-#7-tkJw>O2>3m4zS;XO1Mtzt{@+2h{Ebi@EdD zwi7rZ4UfyNsZpOsOwcNdrr&ePU4KXRe|4>?2Mw*l1c`+Vy{A0DkmlvYIhe%**{KVr zLEXI&%43z?cQ>T0eax^?n5E=)=|A?7sd}Oueh2`A#!;3gsImVUK6lH+u+}cyr`Yc` zT{*KkHW%^6+iqt&C%e%PfKKRKO-A~2xO}cF3ooIidTZYiq=a)Ag7th3hca)$GafW#r(U}e*JkV&FjW6hmI}Iyn zXTcPNU!3lv>P0qqZ4pZqZhNr<>rvQ5uO(E|NNksLi|Vtc*IUh!SL652Mw9zY>nD-U z^A+P|rM}ftSg|!(iLY|k+8f`$BjB^$)me*wojZdc-=P-Rqtq8AJhuwXsD4v8$;9!j zwCfQ-wUe5s=+Tb>Sm(zs>=@rxuR85QU@i(IP&8Vyk7z1Mmp1Q zB;KGGv7OpvYg}9U7s!JkDh8`QS}1!&?iUQ^hI@P1pt7v$h(qh(84HWBRwpRzu?;gN zT_d_xo_MUkt-O}%Clv1n@%>8x@c`oU+sn^$=D&OIn1H&T)9|X@Xqy1l0&zwd z21QsSgoXd&a2vdK;B((!M?W%UlgBVqDFxQ=f1k+F?F-?Cg#9*vFcBU^V=7SbE{U1< zPx6a0m7^aZAnm0`ly9(BdjAbD;tx6+Ar&G`RSRznz({9}JFh+7Sb<8YW2^5TX>bJq z;_1PPsP>{Ldj6{6N$3r(%0npY ztb`Dwf%X;T@nyHFU-asEpfiE)H@3YN+n_KWdm^j~XW!txNAbjyn?4dde|V7%yy-ya zeG&{3$Nhtp@8-C-Ea4?951S$)4ypnB*;augUs3tM$po?zB_Q2U$d%2V)MLFiMCe*- zXKSlZE}A-5Qa!8x{pkH<*1JIl$rZX1x>tv|-o1@5dl#5iA0xIRhG>v9S> zW|{)s_6l${R|FC`94RPn$cu;Qp>glbl%D94;qoAS5c0%IFL@u6&(;%YZsCbMtRB(P z-?|$j+yC&|Y^m31>eqED{bkeaNT?)ZpXT)!>Kv$AZn0*!or?WgDoJK z596T`1sk8h8{fC;7C2~*D!y8KcvDa(uOdsC)g;*ipPK!v6;+5<7~x}I7UY(tVob6kFt`0Hsc^AH@L z8NmOm6QBXSf$S~4J$@}GJ(yIkiXztp>4I#a#Q~@3ZloqS8Ovx4HlC>EU}s}MSNb@4 zqO`%{on?M(g6*XJuk%kXJ$A@XW-749P3bs$CXHla6XDgrHSAy&*OXFX^b!-xLCk;I zvs9#n6+=vVp|qLg3rHpov*MZ!i@kFgxNG29tnH9vx-{vM@oo__|aoe}&n_ zzUodjuLrBzZ;Vt+sQi+`|EB`w@5=@w;-Hi?s7uHug<$ra`)$Ti1Lp$RxHDalfdOlu zL5kHxnY^;+Krhufa>_$PqVglxa_dib^wu}$)J&9h_;HZZE{(a9-o)}I`p1U-#(qmV z8SQi{R9#4*G!Wsdxw>&8liypiipwxt=$}+@Yw*Di<; zLcEeEpU*cb5hcj8rWzHCJ0Z_fauHe056pLBR(tB9UO59{X)}Zy5N6}XivUm*xe&QV zW6;P26gmum)b1j=R)ypz1V@G$db-`!Yn6cr=|Stod&nmsnRD*#b%ERp{_Gm)G01zk zjD1~<$BUNM6TLHBIH{(xFG;^>i^k6$%X;FuUCp-pL40H`T20d)11+*ObM>U`V6Em5 zhPnHAsvD>BswXWjfEFtHl_g!}a9QwNWd+H^VsDn6ga3jx!%_;81?PG&R%S`}y zG$|{vg?`_^%0}YKJT}=+U1z-ptXG-7(;T|U-h$4s21gdTCc)SnxiNJxA(T`*ZKH8O z>=ixN|fl!|SDJ zC~*uWAzK+=qyp;(6$s*+y4_fN?bIi4-5e2muUY|@w{v@fv4cxh|#PA z$msGCgioeI?&73xuPTO&^r@2WA*Vd~H>_7$&D5ixgD{d5DxLVN7u{q0=zu`zr#*tJ zj<3YU9qXPU*a*^I_#Djous1=r^ejGaq9{8<#Y&H|(SdHwJ_C|r+evPp0rV%lS8yM- zYm!^cxBGoAn@Jx=8-g=&~J#p;U&RY8p@VD z6~w)T(IAwQMGzd=%_zO>PFQV2CnWpfSGupXu$q=#Q)x@;Sv(wv9-H*5FUYl#3{gI# z46Yg5c$UAaGNR=0(-TFRQWS#B{_61L_3OPBSfe6ii^L?a_Hcbz z9`p_@o_sJ{$_4C$&mQ@>H5Duq=)P@VD_Q01Ls8bod00%G6*BB_s*pYsF{ibW4frE%jv+%*CkP9=FG~Y z-Beu7FHSw4-j~T`wP5odXUctCz9a8UVPi>*t(J%8opK=Rzykpn!NITJ$M-flWs_TB z_#di@VCg`W*w1VPFf(pHhSE(EBCdkI(U0;hsfLQse(4 zr)3V-gqjkp)$HtRDCer-0LaN+I!gbLec2(8urN(<@Uk>%ZeGoZo|1I*q8;0(aK}O8 zmFjh3uDTu5y$~UVJ}KheRm&}+xoXLhZwpL+G1wXI-;Wh1fY{(!YSCiF4iC=W-CNJq z73s_Fj?N{lF^~(=`eDS#e5``r+6QxY*N)_sG^THHUrgcA($2P6RbM=d^0m9VEoCR% zcm5c^nVTwfN-c1*5Sl2^RysP%n?N4hv?`a@aJq7avG25rJJzrif5 z1a300tZ%P*2L%|(T^;;FTXYMfsLm;GWOgi8VKyNyEjKsrK+yb|Jn6K$20cNpKFjxR z?qj~k@`2Ef`&tL(sCWTGmc=U;lqJKYT#f-!X<-L)-j-QpB%_y1GKOE-+()x4~)Ls9BlMJVQRoz00!6(%BrZE5RK-?Qk0e3vy<3LuY>QBgaUyTSH3xF_9~^SePy-@=u8AJ1XR;Fe{Fboq&9{W;cu`%pR6hx9N zYiWFFLGbbgpgJzoj=;_OGe$*#<*n`i41~{c*27g=Z zMnHpe44&wQ03P5^kO%kJQsNnt{fr;@U}g~8s^79L=TS;Feo-@y=9|Oyu+8O=0N9@u z{5^Rm@U?A(<#%?A9nReUE?q3E0%>kaqEDZ!ER7vo#O`#Bnx1^RW?z0mRhHBibd-ku zO+71iYZ_4Yx=+NLk|sqD%tb8NKiwdu1$8u=in$~?vATZ}J$^4VF4i4!Bj1NNZnvH}`lxsLl0RB_!4lTo}czXgSX>FEb{|+m%Oe zt9J|7VVJ>12qQxTBwzRdX%0x@02;>PmuO3mH8nm6-9=_~&nyqGlx3@XVRiMY6&c-1S$Y9 zp&AjF2eVPYjgUy1o&O-fy`F8Eo{neb%m~i9v4_No+h0gNh;nt6qm`ZVw-m;Nm!4+hWVOayBubt z6Y0O-pMa~hm&KA-d7OCzmq>BSPfpC&SGfaxXuMkpm0fK&@bLV$PnTIB#Q+~Arn0Sg zJT(kxEf^b}tdN!QFIMN9gTIMGunx0RM$92lQgmq&c6WTkZ9<&f#q3TkEPiqmxkM!} zEzr0kV2Ucicpi{aMu=l?iDvD)Kz#wFsiiq_jo&Hf&x>MSpNTGZv)E&LNezAV8<>!M zXMt?S7?4kJZJXZwVn&Fp_RMX`pGtVVDM^6}JZXP-L}oET|1F#SPdV#}AI1UYrHtq` zLYU&~IVJtf|AHRD9~&@}_#N|A@HVJadxSDmt^Aa$S^e}(uJ4^!HnHHNNlwq7|4&Q; zDcno$b5_}u1}TQDKC1ckEDG1RY{)eov^w`d2$5c%Yx^up{!OD}h@ndX8x#~(2L`oCp#qq=<4FE*bD}GgDH1h9D z8uy7&Szvt;m49_7IPy>Df{RK+by}gUB3m>Sy$N0z(#rUEv!SoqXh&{oY5oI}-MB#i zVM>X%qpVs@o%P4){tV>@roxQ-L%^>Yq^U~&*{_kREElj&t;R#`AW~fUZ5Ukp2?MNr z#m_~*601^ZkXN5dCARd4NIYXgrOAVj0<@u2x?^0i+XaG$9y@wpEDvEH@|KxrsCSB# zct^>6<$gyOn+T2{K6v?+SkUGh9{XR)+do@N1mnFvhpiI?DX2TSB7|2nQ_gS~ySP{? zCa=eX-*q#4{p@OZ`96vI%SMCW&}2d`b#4V_bOzxbFipZ5cLvGas-YeduEJ0GUQYvO zO|EYxB-lx7o&kijcQnWWn7U$w@q+#}U||Ms^VhIza~QHXc{>P$C%c*F3_bhD7V&zE>D* zm&Yu=;=3Xx^2Uey=S-a-yY6W!THclOOUXD{&%gH_o(3HEHzCpf(PX*FgQ$F%68yL4 zdX;AcrYNw5X~wp?LeGtC!sZ#m4eBj&Kjj`t$zD*yAYfbWLSTa4T;pO%CUTfX+x2@Q z0t%?v!k3+QFkd`~UdJ)TCDpf;H{D7I22&~)3B3Rx;MRSFHp>@S1Sdr*>626EcdQa^ zQW96@mpag29O8m*rkV6eu%gkbc858fe!WX_MntJ=e^<=b611 zJdiTEvokSbsn!qH_LL#%7-6k+okV&qpbxIONh@evt|awlsrF^8`=dHWLKAtQCa05{I~U7KI96GiRj+&=Xkk;A8MAVK<#0we zV%;6{Wvmfpmr>9^Mfk^%-pxeCay03Y#(0dHl%b#&u zuFWgTY{|Ltg}QAuC%jyD_uUSpBhT2BPKsZ$)7}IN7F6;!XMUw}oWHhr)IByesT@MA z&4NgoU>!R2RnzeSrR}-yRkdYOgTpm+#e)+ut311&T)a8%;Er1?7B0Z%rFBSdfoj-M#|kg)s2d%>&M3Ur?{g$fxd~$isK` z6)%B_N~qjtL6Z^UsGRYeRk0MInYdcJhaG~PW4d8zj|W>?97>6m_vPkIqgNFRM33+H zWxI!9p?w7Q?4V=^lBzepp&AC`8XQLoBsl+z=eHU=^i~;aGvQA7Q%c69kYBoC5=JR> zzV{_x@|(oQ{^e}oRQ8NWFlB2Ox@_8No#i6Y#ZzGejWuo9!&q(oMBAVu_NOBF(M9yDHsr^x6Ds)X z7<8o$+)hLCqrFyn(i@BKki;jBu177oIZ0i?60{C`fe^X)A=%(LvNRk*{!aK2oLQwn zXUBpgwRH4-|3R$NZjp`8jdiTry`?41YnV8`$1cRLd>!By8-$GG;1v#?Q%p;)zmAxGf%Pbp zg-(jOQ|X#S)~irr57c=CJnXP(!2Rsm8E{J$i*#^B!Q$MBN9g#`-E<^ekBoALDZUrp z(ZKsdrE3$Pt3H1?{$hAXJF(od5bgdKm}wYOud2hQD*JOV`WbhZoYnr67plRez7H1E z#cjzs(lNt=d!7uI=qdbOPAPIDE-^nf`${l>(E;yL^jd`Z9EGE&So%)XXQFrOge|wss|d?yCrA8pvlp)n(WjSm z7)|xEW&Rfu6Z6V0Hs{uyBsDU;fPI#izTcp6fj} z!%2rMepH1|wVKV!r`2^%$%U z4x)8~vjGA$Uz)Na*5sY`O~G)&BQ!ICoJc`Yw3Uc=Q0`2|vWPkRPh%5Jf5W27Q6C+* z8)VabaLT>;_Y)}kl0fh@W;u1Q)u`_5Ht6rsYe1D>o8*f^VfjAe1U98zeK6HVL|)!( zuDa4DnKK@>%I4mksY!KFEXrj54rhO0V8I7nlfXBuwFq^&VS=$ej3WKc!6&LW4gV{g z+DZ0=-tAK$^LK~BKEKOiww9NqUy1F7ot}0?eLJxLhlQpPce5Gf76PCZHsa~l7i_DU znVWM(pfUIX0BVMGnxEeQKMaocv063bho*xAJg!y9+1u*7%i`Bl^tGsLtmop4$pV9H{&lO@vK?LdI z1)t}>YgVLIKyJ>B6|y%pSDH@cre0(vYzM3rs4e{nlK_qG3kaMzl-7D$xr=}0 zH12^DVez>&GvomOKLEfgU#~YC%4FtN_x^Nk92$U-egiBB>v!pQs3kpUjWIw4CNw;sTNCOAxRB`nOgFot5V|4->8-k2+(QMB4(%*R9zY4H@9jDTz8rM&`k}W1(49)KDp!;Wbj% zRBrw{GG07}^@f5eZ2r^20&j!!wdBW;U4+DHm!$iQXY$5qM@WJ5nSOn~!d>Yt3tS^~ zcJ{g2o$j`KholR*kUfXuS_#ER=I;U_TTggC?28j2u*G@(X=VB)LtDZwG-{hJOBOX= z-kI5@c<2u3tV+xb)KQkQAWwCgdm^g09wIepK+G*9i8M9-YiCLMj3pjkZRv$n7HP5M zt4#WxfcUG+gt`VY;LLC}1m^=S+DB?$uEHB0;o^C&QPu4?SHtZF0O*H6%U*>f3$x~8 z<4zuBTs6hoj*QM-^>l`g)3u)9Z=U#Y-@cckV0!*`h7Z4ON`1GBkBWsdds+DhKX|%+1cVd#{vGmT{E9vlBYDFNqFH@Jncv2j&EN`Bwv@g|8|X5 z*%ks#O|6TdIWQ19EPPr|^lNQ8v(0fz@etDX?1o?wUnJU^2FBMny2?4896_e~k96BE zNVOJlbHx(Uv3Dx9{jc3TFHnm$3SLd2_W&)b{ZMm<0;lM3?s7)*t$!AS=~vtsKs);x z1)Y}qnM+eYt}KIs>OpUo$$jDxE)=mRzyuU>{yuv3AE`I6VR=j2)z-%oHMIY>jrlwL zXHFb=a#p`nUrJ5sxQ&Cph5KqoV`wNb)gBxFDOZ(PqgL9~<7lJjgE!Vjxw+T`RzlxC za|`^eX#R5rS4)6+MR0^Q5>nH+K%maQh&4dx)yx`sS#VgmWd?D8#Js_Qp^44en5Hqi zWnA^y4NoKTFFwoOX@KuBlh~g!_X(md7%Bj-anTHLC%Vq8nj%PpF^W+zA<>~8D}i?0 z3adkbquMV1p)?Z=s4WPKC(<+M23w;*AGH8R&}|dM_bAy`-3HubmtiF_#Bl^tCH%oH zVJOf=G+g~LQ|NCB^oOda*ROU1N~L!;vy3KNh+KJCwkIZJM-DStcl0IIO*MM@e|i9h zCjvvZ+X6)5n}I{UuEj!xU|k$0hZ&D4XNNCN@*Ar)T|ior#dU{)>jdokDP^)yXw5k;O83BvMby0Tp1vGkaw!Hc!MdL z?aZ@sm_p`#6hqc5-P7C4M+3;yz9G>*Ipo{yikKf*NEN?uD@Hh!u=e=C z+16j}m2e_LRX3Fzfudo-Npt7x*agXm!g<50@TxFuwqB->Nk7{Ns7DoebO?ffbjeDv z;;Eh$*m7j)%)t`PIQ=I}Vr#88>MX4=JI3s^+ijKM!*tR;cWK)x2UZ1|m!ov(+KSu* z9T9aRGIMVI{g|9Ni$gpq0gVUj;lqTuW$~lKHZglrk??*cyy}Fu^iXn72%QG&5wc`W zrt{IYaN=9wV{dHgD)zifY-BpSNCpzn;H7Q^QWgibP8Bhs)6e7#`b;CBJfeU?Z`KT$=GksAZw{pjqt&K2REQ3h;!cabpdh zW{MQ2@P39PROUdi`6A$G^v2aQ8x0Qgy;;w%yK|HuUv5J|X(Y>!ARH(R~y0V&e`_{1aVmX$C z#YC1cWbQ1-L5uF++qVM{^*{Szc0P>t3@is)=qrX9#(KD!OkM&X=XgU5k8qh3PdzVz z`iPZuc%+S&yDewk3V~spxw5QQEu0i3rizaF* z_w%?edvd;M(X(cvz|~FbsdWTP)4kHp0|mnO^hAQm!k-^_%X_+f_r6YYxlyAMgk%as zg*XYZ%rNgI8x2seMp#}x+b_-WnWDvjq=OxGaec`9JGCWG@YYM4P~8348>(_hg@led z?M&U3S*muWQLPb#5J2|E3YbL>Guh&Cpa^Czcfe_3(CBdb(AoshTb2Q{9jMbS^Tj1x zu$TwJEuv?AZ89XTUo%^_!Jou3@;-v1Fntc9W(1ROp|NPI;^w`LnJR7e%n(KsL392& z@uE}Djs$hGI#%V2bxSj}Q2x<_56Kdf36uE9FrF^_&wR*}(IpXvE2wQi=-YA!;NA(M zY^NR$)B2F5T{lfmx@{$Pij^rNFY`jk&I+8rro#*D;gwZJ3d=I@!KcDqcUsmvJq zP)PYdIKu2X8zOXsE^}pYwnJ@iMXQl!+%^r$)tjiWK#>xQ=E11^*nV&ZsgY!6`MqOL z@W?un0SP!OfQSui05n3wMODrKI5@Z@5-@pzZ{fmlpjl;gVYb5}n)#t`GdG1(B-tCD zvPR{@#Bj!s5&`c^3#!=ZEw^(5v(nJ<$+IyS1wMs(-nSR_%My`jtE5qv34~-J!=c0e z`gQR(*?&uf0Y}2rW%RBg`(mY>m0L=3vjWC=53RCEdgTU&oC$ zC5bTNCprqocr`*)eg^?+P_r!d`g<|wuVA=baZhq;c_VC=bg*I{eVh~&Mr|p3z1vN8 zL2wzkhPth7eBE_6+Z(~Rw_oV170AIHvyR4!nTbwvntcUmYf3!L4tEloWA0q~yQApc zm~~>j+s$g6>f3$48)l)mNpl8wnbg%fk#uW{9_>xhR=gI7oD{1mE3XeGFkBTi6@Zet z0uWGu1}^4fNgL}uv0(Y~dX)p*0#4S~dQjAZS6fw3G(c2-?f(vS5kH)df2h$)Wy-F2 z3*uQVaOzL^@87%3m$!)TI!>;p5Quf?-?(6t?2vTA!<_eW58ZqL1NZi_g;xS`uSp!e zuKDfLu-l>kKZY(2eXKvdn8>K8RdInp9dwyiacUXKyJVzrp4GAWLXh`EhgkVoGMU zNHB4ySjH`o0vM669_w{PM!!96>p1A6Gt;b9AhofmN+6q7k*g?~h&)ur<{yo}?>X3p zdi9g{+$yc-m2UfThFWD(>v+Y!x?XcT?HH;-kh^yPN%pR~`>jvKbkWk@H4x;Ru zQUJWY%TaK??cqYI?NDX#H}@0@g&s>5ShdnC=9`b}+3!qE63CBCQgQN?1gUWx<6Q8j z=Z10ALr(wiB}ck%KJn`c41+pKko#A*?|p&@)`90?>*HB`P*e4INNqn%l#39%PKJKZ z{J5&*6Gg!Zn>>+n%C2F( zMuhR%J_Oc-t%Uz$<_UA#K$)#-NXV(FozkiX?$C!YB`Bb+tDo!P3v<8=VS_utt>vTC za|Sn}l=!M)REYc#CcJ~8fy+bXLT%h`UA?Fi<2Eo8yklSqLXc3uvu@+i_6{+;m6yvw z=PuYQEFd4MvuoI(|3U;~)7nwAw%nG%`-(c3qbJ4N%FuY1u1DW8Qk6-m##I54NA1eToQq_JaGd$B-YYir{>QzPUn9}cP!ki_M1%h=L&- z5Vk$XM03r>hUi>GwHBtIFuG%}X~asM2}T2eDUli_s3O^HT!06V^WBwaRR9f*f>{bA z%a=!&^`G(Un1r;IM7*fACC1%Gs^9*IjvKGJpY~Puya}28Oex8!3wsF zj(sylj=(ug{x7PwY1Wu6BOP|`RHcyPYxVt=+!1LR@RvE>myqiS6vkwG+VG{1CgNnO zHCQ+e%vMcAk7tN@?O-HWxvxBwi|T2mIOO7mNHb!Qq*mu9+75_!H?2$L+M+=|K33XvBfR;_gb`HNix!Zjh>_(bQ_`c99KhUB9J| zN~NYB7_Kk#DPZ$w<_^#c2}|QT+k#fsCQ)$;^6ik6uT?0tt8dE!<{FL(MvFUg&Jy;% zQIku5Q$?ox36M_~*}MH#7nX1d46o?R%j1}Bo1SK&shLLo29qF;rcYe(ACF6CVYywT zbpoDB=xaCIZBqpiJd(*wch--pAV^V#AcW19-<#%e-lw$ZzLZ&hCRwTxFJCwBkJN(U zxp_W)_Ta496BE*|;7m6Kz?MU%4IcSb3Khh69=+HnT%6JGgzGT{zP4QyQ5q7joU-<@ zaXPqjmMC27zBIUEiv(UnRq_}RP;+Og*J?t5WfFLXV}YcCWp{^$sR4D)pddsk_dknL z*j(GrrS-YJG){SvcL-H1%&^$S22f zTds=37dY*TC)Q=(eV3ba7o5krQ=G8kU)47n3g&|n?Q+zmI}FdM1FyAMmY1>A8SuPF~&)9m% z!j*34C$p|xEveCrK)Sqar)L>`d%A?4!60K81&~D?v^M?YY_{tv{RsUe31O^x-m)MM z2%Z~qdHO@y8V8ekMc5rS8c zO(;;8lh3@R(5TPWRdK(j&>>1Aj&To47qc)|5A~co@U$S{vfedbfBys5ixJ$^LQio! zw}j!m=rJ(g#{0eIr@9W!otafrg$;9JGBHcSHjP*YRzTy(+^|PHcM1aF=;?J|hqkN{ z0%#50j?fSY;Ur}yv^_yVVjc(iJ%H3JDwb4h{xh>X-@fhU6fvr zY6V&HrdoX>7hIg@qPrCoO4&Uo_3^_mKGVg(QJx_su4IwK3n?1uHd zl9`G{$p+SHxJ~UNLb9^pEF~I7Oc0*pW;X9x8}aIx^7~>sL5;QL_B4xFk1P5>^Z^Oa z^Y7I|Oq#Y~rcO`YM#erb6!rc?Adq82Q37H9CY9oTu-$=YA71_6{mPL zObFTzJbKS*Y=+@b)+w^j*D6i7jYzRLGVg5A9 z!~s4jI-ktBwDZnQlLzj~lH6;({kv6OPf#F=(g`$_ur-MtrSG<`W7K8cVGakDJ3!52 zs6VnuzOI+`rdusig!vo}0d%^UMe5R?olUleZ)amkdGHkmd=+hl3STQ zeQPkynhjGxzBl_uJLUWzdlFI7{!+!a80RppO`Lrs3uEgPtJ{ zFBo%dId47LN3gAB0?CiX2xP%}&p#i`@mOR-cZw>Kggc9(C=jD#vCojPK5>Nm7n=6M z3aq0${i19-a?TV0&z`Yx@8LB5GhA6N+YRD|FNhON;qA#C$7-?OvaT7Kpc*Td+cMjP zTcuzU4{n`kgXJBG%F1`?IML$-KjJE258B@OOp~^2_g^?zj$0CYS;{B^L-Vk5BN;S` z-t%@Uf32oQy(tW#V@oau2dignN)w>O{cbv~u-XxCqoek&-G9}x68^Z-S;p`supJai zMp-9XR?Dz;RYRhZS=j9-Rlfjrq$rcWp)9BtDuw<~JqRN602;(hYtAnP^2~|@vQ-~M zIzR2`J-IT5Ns0oK;pVM%bLDIezNq7!WnRUwk(9ycN%Z9CgQdxvVD0jIMf%rwQUx+q z68X?i71p{ya}0uYMhz|oQ(cC3o^DsaeupW@F>BU&#=VN?^>R$f4k1y7a*0dc>v1O- zSZY(pY6K@p2`CRhlP zAl2!ND{5wygROLDI#rkEZ5{8wEb*uE&_wi&m{!p7#LA2GZTs$}9>|l6#{Hy&pe_Jp zJ|cC!7A_M@BFkclc@W-tj`vRb$TOuJqajk?5mZ#{Mz^V9?f449*bGZ9Ked~1#=>8H zn{CA5nQ;tq{F8N+=RbpSra=Nb&Q+}=frK6-<%Q$=YpL2piozu0kJ_!Q1i$N_-9Kf{ zJO5}X+pu81)u&cV7pM%8Pys7ogu8yQ>*TXnZQDS@Zwz1!x*tAbLRwS@Q-W+W8!8-7 zEbF$()jmOXP19vUu0vBym&_5yedkA!u>DjoDK~TKOgf}lBL&Xw0g!z)+>eP7KCxa; zm~x$hr4H|Zy84}Rafvdk55z)Mk)T4?0I3lLqT1jRh+?$P_ZZO_ht4J#@yZUoV<^^u zUA_Pd<BcsTYTj?$^-H1P zR=pRx@(QUr>YY@?K@%(u6n`clnu4u z=6m8w%6I)u$8K|DC4zRG8gf(>*@sYGcq`!^&HZ6ejrIGKT65ags>VG&0`5CFVNd6f z&$Dvl4MTc*W-ZF@pmW@NQ-8{^nEM1X((L}ZRg$=_pjw)pQTVlG*IK6{r|7UbvX%dE zO+huncT(W+uR`H23_0|MdbHc2@x@Z=|@I016B%|h+&_ehZg$5C33zJK`^fa3Ofn;FA#kbCRrlHh|KcLUy* z+)oQ*C=FkdA&nd;sG%b0a-MRG(i0q{B{TCG7b#=??LeaG#PSr#f_9&Wd=pAhg3j{K#u7_R4 zC}}YcRvykeIpJo_TqmfBEpTS(o4D!mg~ydJ@opC_aiWhVAMcUIb`N;X?zX zp=?u>?ylAF3F;dJ5o5pR16$WHYTAR#qz=+S;XCTt!rT>5s$rWC&ZecYOb02L#NXx? z7Yyr80ZayfXie5vYYkM9ei}s6)NBbnpqjyLQt zHQ&yH@6KiVb1RkN8KNG!C1u6QIU+(f#Ik(8!e zI6g>A1K$kJH<8-^K=-N(Yl}P(YQmj$cG6%`;6bP`p*u%qEP97{0g^cVU|%XPb4~b@ z^~$*U?L}-lR!q{gVd+G*Snw*y#^-j*2lR-DdA<^EC(znAf_9-RI?mj{i(j`6iG zF%WXN4Aur`14Y*3n8usOt=%I&{Jz1)er@Ytat*_d#$B`%ZQL*U)cbN*1BKPJC&b#( zkD<=I7z+X5lo8?8&k^RXw;Vo z&42^+YLLAOCBa)dH|{ovBN0Eee`_!(4r1E~(A!go)S8ZJ=AC#okk5ji%yG(|sNc!m zYXNa+@7Rn4yeLr+m4RSd7~bYUDXWUGtcW3lHnweMt4VK(G1KK7pA?QOVjx9BaCrOT zp**yNkWB*HTFVZnsGShsUdxTokW0h8-G?O)hSO)Mmil$(uiT!kRU|}shnockA!OGo zj&A#KbUWp+yy?8dsEnPaON$%Z&Qj_Qf@20NcPr1YYHxUg^-+L(OJ*hX(GAea#>Yfs zhwR#GSpAi^FVCL4bwR8iIw)9(2q&?NZ&$yc%{V=r{Pb>Cq#Xb4k<1l5pk7%(7YJ66 zb~T6ciHyo-%8Ho{Xi4-!j{TN7q@Y8kPyLX$;)Hx`5GEMHchTezu?@ra`+pb)vpPUBK`vK)kiyN`6N)aE9ldN z4%%#?BU|~#Ja;qn^Pp16PQa5b9=87bM=a`7y4&f#+ddFV`e z_*#UfT|nd8;#b8cIo%43tEy4))`xrmqDf3WQ6482Sf#h-rvGZC=4-dlOXy|6zlI3F zDyf`TylibxJZ!~=FOi3Xim|Tc`lK@RF%ks$T8~^(Cfxl4CI~Y3iAQJ!_yS4HIg$j> z&rlL~T{C(pv-iG#f*_#Um#-%G&FSfP5?%|&oPS&D$R0L@@Yl!ilyrSx<-(h;2Ny(Vo&=1iaIVp(fNTMUj&TZB-cb1{QVlkRxpwlfh!ZdL#NZx zJT>@>v=emykK`QurczosFUhH(Ql?69#o_WB<^tEdj-lTe$0(x7oGWTB*gT%R`n1DY>fJR$^xQ6?xu&J{4!bwF=tT%GyyjNf{M|;0sbmcn8x9v<$upyi#uQ_jLA(Eg=!FT%-WC&AEP9`SoHP+dmm@B|I zth+S}${^v!U9}6I(cAZ8;jg)G2SWSlSe$r^C5-XmAMTc_3bg7hLmp0x} zcRJ$>8LqQXoZx4K^CgL|g3~V@Fy*b%sX(MslBUEc8|@k|MR8g1;o7*E!(8tR#SbJb zgP*GHWt0hrL4{!QE$a$VW(Vih`WA*u`Z_0VTeu#rU~~AB`^hT>;H9q)Kgt?WNBXMh zNeyPDnQ4#&vH43|K4JzXZh__|(dpGG-h!LWM;PTR`O_5iD1bVjxgi9;_->;K<5LP5#uQZlT*eFdcb2w%p_$hsV;o+iFV7%m-lsD2zU~8cqETC z2Cxz-mRtmVw8i}Ko~b_Dhd-5`5&s4yYL#r6qNBnR?sIP|GnOBmL;cUP4W7H4RusL> zeZyt<@mJ#FX^ggR2L4UT!gHY*L)5{kro-Sx%U7oH5=ftr#DFu<_ObO!>0C2;+3&9@ z1O2XrNT1S(T6R!x(?(&xgZr~@%{-#3nC*OeCG=hznz`+xOu?a~ zP28Bc3`tfQ1;-Ek+*}c<({lTJF9^LxT1C#QJ5C+gP`PQvO19@xJK7d#bxQ?nHl z&9${^MpD_8z31QJ17m>OZDAnrMT%DSRF;Po*C2(R(7fLzJKc;aB+M<3z9MSls%5G) zguicM()GKD(^VFZLz4OHVqk=eL*=lN~Dr zR?QB#0R{xO8uYuAe%GG5S>c#s>%cG9f1<)^xitzDM*x$v98p-4>lVw{9*Pp{v*t}( zd`6zMxcEYuF^k!nq>=BH;>~9|PEmF2bigLeZ6eSvluJ;qoTd4}{hK!oMZAkK<&s9m zvs9NIK#hX=c*rIP)0?Uf|m*5Mj7mx3UFvgAww z)5C50#o!1L_Zh~SZe-#qiGq*znfTld-*>Ms6@%T&DTEqU_NM8gZG*wtckH8J{p1nn zV)N0Jd!;!;9rY#;^0EQ|x%rgv;|n)PR1@b8#*03t+U&=-sdBUEj7T(~71aoKLbSa4 z-1iO`^cpAX1Wgva(YQmgP-{<=G!;LQ{`5%m59P^c+A&(f`OrTf9j;2L9=+xvPqSO{ z06X6fnD+FdP|He(j14)jE&&ip;HJRZdTNgX=pijJ^m~yEl)~2+>oyiryC6%F?whLM zqpZI96D#8aJ&!xYqG2rSd41gjYoJjoOU2=|E1Ae&=`7+zKW<+&_kDgCQbQLCP;#8S zZjpSd0eMu+xU9}^e9;#FOswX|hX(=dt#Q9P#NU9LM<1!N_eR8+AK|_$MN3<6{BEyq z`+<&Fg&FU7v3GJ?Wd2Yvrg6Zc$kgswa!YwQ-0kd%%r5~B==aqX5 zef0+4VFkV+)SXXeMQVLjd0D9G!!T(-Ej(c=yd2sIPD(v9p(oWIjtPEsl}ZZQsdnq0`gPKRKUHHoLeZ$=KwxnKQa7@kSUu5 zT?PMz!xim7MDJ8gRn($XH=+oi4GCAPb*B?vn%0}tu~5eh8iPdkn~j;qw*QqGFw}fs zD9mhpowpQLiRL_=+v7wXK?%p<#G>sG(+VKr^m|mv=v6-DmfH509P&QjxvDtK?&{?7 z;J)5)h1zr9sK-YB?oRL-NbM9udhx0pErzYS>I=M%36gKOFI?8cP5@j|hMtW>7`yBN zg^Ntsqh4qvN@qI3rQ&R(hjR?#M7YQeU{Pn7cv~s`$diIn96u#unKwYKe#s3x-{*4> zMe=5A@QswZxYKNKQ=Z1deol&MFFW>Hb#39ntzs;_WYLyrZ zEVZ_5M%~6k)=DToL!jMs3Y5A4tS-V=^fq%_hYdIi$2##r@*`N{nPqptTIz z#?v0fP;Q=}$pkeeTZnEbk5D6yHO<7aC!Mkym(+rScP1c)fCS~GSz$6*Y)lok07l^W zD0YyFY)xi+8Y5XCQmjn9F-W$;XUFHZD8L=Xj>|Srh6-US0{(qy+LCACc=(Y6NBG#27+_DBSTaUBx!%0K7$u2yQL@6`h$%HZ4%pKzH>+%y@;*b$|*IAQ4MA=bBno zf$kfAo*)sImMgL5z7JOByzBC&aV7cK+a?%BMs!c~;P?uPpF~~%z?l?1fO4D=3S?(N ze9a3Nn)3Ib>$TTt0~>D@CW1-Qk7O(Y#kiEjZ{nz9&C1;}VmHq7lEdkW@u2u23QWae zfhXwPJHxz5mR4(OVZ6&l3$7kW zQC;;8UUQzw3C_eG@+%Vm&G8UaLd=oWSP}_GCEhx^3D=~_M$NPdBCWbshSBq@9%>H(4uP)?D=IctE*PsvmnR3yGby?QgeHWk%` zm+!iqJ+HS1pZ_0VF@Tz-Nc=s4#hgLR5Xo8EB|k?SAM|Hk7Yv3ThJYI+I~*bjt=q;r z18;d-A3y_LSW1W!C+Wv8l~G9CyMAV4j1+t7^Ud6w`q75A_i1;!l@@Cn<2jco?&P(u ze#`;J)W4)b8C(ywb@k2GUsnrlAQa>@x_v9O5%TN7#aGF`b1eZkUmBN~%5irsePh%u zH5Ed|O#dZ8)U9m3p*U{57BItC(Ttf4F|dhT7v z%?ByFaUwa@H3@4%ICf~{tth^72v2S&W`a(^79bxaif&uo5QOt<^de?t-)ewu6j~C2-HnL(@nS!$10%)j)bi^O|#jt}k1n=`Iz~IvlxiJ6OLk%l21dY=P zXkCX;T#VAOKP;Xovdc|#8BUg69GQJ z!XZeytQAJ2O;bpfoUJB$O}e37ju}%(Z1T4XK$;h9c4Cp2p_8E0)+ZV-3O?Czp=^RpfCZSu=pwb6|Z36AyEU5IvPD(n4j^-K4NYYzq$|EEep# zY|rQ6+>!Bp6Ox{URXT>fwB0X?G%s$jK9CnV*Yo+EiyS=ikTuMVg-T^zm#1JTG}TF$ zz_Ld7+DsJ+pLw$X32}EZ2k|ts_}qQXXtUDhDBAubCHt=n|S`1sqx$*PJS7=6I>a zExmXnd7myVAPb}aqGs4Jawqt55lVGY9AYhsr)^Zl|2I}Nk=HD37?3Ofcid;(U{8;i zLB!;evfwl%KfmM24gqL+pb@Lbi@W%uIxsu8;Eh%3H@m!&lrsQ~tJxf#@~_$;HjS?M zam*Cmq8AutPwT;t)gQs(b54Vlgl4gN1sIu8ah zDu%YCP1)8TruN*NI4dq7HkR3W5P0dd(TyUJ>u(x|op`?A6hIm0X=)~$12|mJkvT(p0^DpUc<5qGU!)+kQ*TnGub}Fu?UeMYCb{38sG{pb6 zBm_+%tWNFhCn7E0N|Q{hx2m-H zoVfiS>u)dr-R$nKsC~hb3?XuNk6%9MN`7?~&-J`ebpf+V6$A%FaU2=LqtZih2rW7H zuNUE$)E5t&lBiA0Zw=fm?NF1^ z256<6oS&RQN8B5PCr2kHz-hgYCGd7&{Q&h9pC0i$I)WwlG%&ohdoBwiEWqSbkXivH zD|zj(C}+Uu;+&}KNnx9xetGdS&>(&VUA6X8?Y>G2iZSd|Gj0@l20FaB6KjQ#8>$5` zYaAqO`Lo3{<9*2J)e8_yF?vC>`TfwBcuvCPgXO9)^KAvpmGh42w>Rwo+Nt0wLfDJR+JJ-015frK4v{2VtW$^H8Btum;2(T{1o>@$)=8x74 zXVu|;ryfq%u3m8ghkZ{>o1*Wi^XQ@eeQmEtQ>u3*$D|Z4Z&*`OKZa@+AeyUNa)u`ys|R|Hn8o87tW zI4hmwwtlP0^rj3BT5rmjCBy7pjCxmanCU4Ud%(-S%zLg}5cDh`o&V;93M}xR0#^kV z5=wS_M!;K?%E|)ahy95(=%Pp~rw7Sdt=mLd*&hKl<`pp*I#U||-rvkhi4GV~QK%b< z87Jkd7*r5j2I3E`q6B=&I7kPA?Y|CM4mkV*bi^^%_9|^MCGTcLXauGei;rSdwDg4N z_lxoj2&Hb3j=1I(+FG{w(3)nxG+lzKq^Pwx8DLJBPP=~4o)^=+Q#$0zfX*`(j6w7< zqeS8DzW&eEN8!+66&n)B3DgktXr%!diQF+1SODeChp|+@LpWD0yGqbMBG&y(ozN<< z09Lb4#1JmKy_Wxe!4Yd!s4)Rckq>(|b5Hb}~x=f}|Fd`<9kq zD@Xu4=s!16o=qP9#aZ!xqi|Fn7w5J8m1jHy*G0`z`ru$FkxQ?H^)o)o5b3z>dXRb- zx)$KPnWYqFwrT@th4SCk2#v{fClv6}RR2ynBN>Rr9z+m>B1YSCJUYKzWiXE1s-I(U zKO3*M%-;oWK4_LLe`^J`!y)pY&u1|8|fTxp>IeA({p zGtOmsFM8Ao{4*_+$|EsEfBN2uuXYB}z}A-pji2ejTn&JR{8b!aSTo;WR6#ZPyH6V; z%hdO=+$tSAq#q5xKKl=oJY8@@XO`E4pC=k2&07O zG;~h}^i_hLyN;c{X5|xM>QZ=k#Ga_6R4R!m(jEH{_BYFbYc}pQ&r^wC{fp;5mn$Z& zA*muHu?s=-IsNhTGE(_pv4UOdRj@WEyK=2MpFedHcywt&H_z_z4>oI z+!AV^@~}K7@Qe}E8w?zX_wyA<9<@R<^ipNORh3m;k5BfH3O~+wXH=D*r_zbtt_9({ z*mcs-djVJQp&k;?7uLg@--bA80#i=4yYn?Pgj=d;fT7Z(=Z;2eWhRq6u5&S7@#=xV zaMn@5k;?G0%)W{vsQho!H&^kEous$dP^(VI=HQ&$>>EmNl=ZgXSu&#F;3?Mt(=g95 zKva#a&?f{-p-zH0C|TW;`b&wC(@yXH+auHFZW?#6*KoQtZ#ttN+<|cP zp-LM!?>y+Yo0|FNjejQmsuWVXSFfn?$n^qNeM^p9ZXkTf>atlP4@Ar^3-rawenXuU z5q1x}02E1)`}9srfil?zPp!m%)ru7X&Gfl9crQw6J{7d%s|F6jX1C5l?GTxw=)nU4 zib8l}{6O$#m?*0MgnMTRW38#a|HdxHu}CQ zm{KHCph+r6NPN*(^mCZ>UCn$DlHGy*S+SsN2#@Yu&c4b;Sc>R=ez^tGDxjS?tR1N( z%f@XhK@qHmZm~o=vuNbkujRkWJYYORFCDpE^@OX)tje97zMV5f7-%Ll`8R6**zaHJ z2Qw8E?Fe=b2~7-FZOhj$jA&(sMR zS|=>cGY2vLN;aNI7A@)OA_5_%s3O;Y(lGK`FdJst97l*ya$h=)>B(duG+0SS`(>5# zr;VT<23lk_50`PTuaOAY-L7?U-82!5uG4uIt?LkzW8jZKGdg`ez@VP|*XmJbk|ueB z6mOIhs5UVv3N-`PQjQDIsamq3yAF?u=(w68c|$(6YaM-^qpVCDS)*szTMKW_jPZ1l zuP%n4LQA3d`ef0M*&QixmS0Idnf%xpHSb%#EDyl?vECwB-DgLinlZIuDm2nvGn}Z& zhBi@)hZ$j@~MvWamIJi&uZ<1X@ndx0%99k~FG z*(Jl2<_Tl-r!z^dIEqg~)DJ;W)+tO>FtP%U7wRC~A66Hg*$NYDmeziG8mFdoR5ttS zEPV5ibXR=6Xg`bC#W6eNDNPERRa~geeRB?CnMj}OExQKg%qgH-?kBsrAn^55Qd4Z5 zvY}8;?=i7iQjypX-b0hbG>*Q~G(L}dO|V8`e?TI$xb3n<3TaoE0x^8e8_yH#nG3ho z9e);a7PTq%p>cq9&Y$Sg27=nJ5Z+#@+Vxcjg?RL827m55lnE!zAtL@YH?Gc$lX8@9 zPh$b#omf#ZrFd&sn@pnL=4=bTK~wMh-`#cZ|<(a?GFMXjmOKG+JZ z2L($CmykKa0LJ;y6c91WBLPnbUBBrF=%4NUC86eye3hbxW1WW!qM<5Oa%z0OwB$sl zXfBhU$V_Uq&h~z+Nu;1Tp4*Dv2&fLjfxfA+^zSJuRA60p>3x*!M44K0>IRJcBj(Dl zWAQkwYP~;`;!MbZubldf0M}?LE4qYZjmh*Bu;{q~=jo4+c1ETOXJ_GdX#g#RcdT1` z&`XpbRm5jnnskv_W%xS071D>?IU$>nt9+`+@JD-{G!@k;Iws^Bu-1$(S@V(>@lPIy z8XmK9wCylkk`@#(wI(EObnz>eR~PA1#f}uJ)srL<&b=6|ftZRkwkHBeS&Z;F*Ewvc zH-wM=)%C7N-kTPV0(U=#EhDdti$ZlEF(uh)&=^OsK0Qw%0Aa=p$(Du!j7WFBWNoa* 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
    k8PLpt+Q{zTgKxv|X9dVuF{K`9 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\"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 Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\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 };\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\"; \"mod/AM-\ + Certs-By-Ident\" } 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 (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/633/2f6d4158\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:35:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n# :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log warning (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" .\ + \_\$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=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 interfaces=wlan1,wlan2 \ + lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.4.4,8.8.8.8 +/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" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=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 src-address=!10.30.30.0/24 +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 src-address=!10.30.30.0/24 +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=output comment="accept WireGuard" dst-address-list=\ + VPN-Server dst-port=13231 out-interface="ether1 - Unet" protocol=udp +add action=accept chain=input dst-port=29185 in-interface="ether1 - Unet" \ + protocol=tcp src-address-list=VPN-Server +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +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="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 passthrough=\ + no +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-list=\ + Instagram new-routing-mark=To-VPN passthrough=no src-address=\ + 10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address-list=\ + Twitter new-routing-mark=To-VPN passthrough=no src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address-list=\ + YouTube new-routing-mark=To-VPN passthrough=no src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address-list=\ + facebook new-routing-mark=To-VPN passthrough=no 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 log-prefix=VPN-all new-routing-mark=To-VPN \ + passthrough=no 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 passthrough=no 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 log-prefix=VPN-Net new-routing-mark=To-VPN passthrough=no \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + log-prefix=WG-nat out-interface=WG routing-mark=To-VPN +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" log-prefix=2Amster protocol=tcp \ + routing-mark=!To-VPN to-addresses=10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp routing-mark=!To-VPN to-addresses=\ + 10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp routing-mark=\ + !To-VPN to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp routing-mark=!To-VPN to-addresses=\ + 10.30.30.33 to-ports=22 +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=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add blackhole disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260507/20260507090001-Diff-Config.rsc b/MikroMaster/history/20260507/20260507090001-Diff-Config.rsc new file mode 100644 index 0000000..6d438fc --- /dev/null +++ b/MikroMaster/history/20260507/20260507090001-Diff-Config.rsc @@ -0,0 +1,22 @@ +4376,4377d4375 +< add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ +< out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +4380,4382c4378,4379 +< add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ +< in-interface="ether1 - Unet" log-prefix=2Amster protocol=tcp \ +< routing-mark=!To-VPN to-addresses=10.30.30.33 to-ports=443 +--- +> add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ +> out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +4386,4388c4383,4385 +< add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ +< dst-port=80 in-interface="ether1 - Unet" protocol=tcp routing-mark=\ +< !To-VPN to-addresses=10.30.30.33 to-ports=80 +--- +> add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ +> in-interface="ether1 - Unet" protocol=tcp routing-mark=!To-VPN \ +> to-addresses=10.30.30.33 to-ports=443 +4391a4389,4391 +> add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ +> dst-port=80 in-interface="ether1 - Unet" protocol=tcp routing-mark=\ +> !To-VPN to-addresses=10.30.30.33 to-ports=80 -- 2.52.0