From 6c13e1d9cf0855d287f600e47c079c62ed3fa235 Mon Sep 17 00:00:00 2001 From: Kael Shipman Date: Sun, 18 Nov 2018 12:26:29 -0600 Subject: [PATCH 1/5] Added extinfo to list affected logs and improved documentation --- .../example-graphs/service_events-day.png | Bin 0 -> 26147 bytes .../example-graphs/service_events-week.png | Bin 0 -> 27980 bytes plugins/logs/loggrepx_ | 14 +-- plugins/logs/service_events | 87 ++++++++++++++---- 4 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 plugins/logs/example-graphs/service_events-day.png create mode 100644 plugins/logs/example-graphs/service_events-week.png diff --git a/plugins/logs/example-graphs/service_events-day.png b/plugins/logs/example-graphs/service_events-day.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ee90662ff32e40bd52dd14ca925b7856faac47 GIT binary patch literal 26147 zcma%j1z1(<*6so%1SLcPNeRI~LTMyK1QkImh?4cr{4KkXSMrA+xu2T21L+IhV`A=(S^B~o4A(h3o8;S_bzS(eTzY2A#t+`JoH9h=QAqvTVSO#t z80c4Lt?0{J`GSBz)ZrIUkjaKJ+V>2VdwPo4jEbfxUm)-<=Vm06ezLkWG_-!=_TZh- zXUin`%+ensn;t7GD_69%kjW%b?C*zk@ZUvKwpq`#pDkJMHB&3FX2!+!5aW~B9LBr4 z+Ik(c;O9rcsfjt(BDO&UFJ3=FJSr|h0B_7jrpD;Db|HS&8yu^4z81<>h^SYglRT zsU(pJ-RIArTXT%=ew}!Nl2lWR94@;vDy@8sLFA-A858C#HjLwLl|lCKk5Bh8_K633 zOP&P_m_EI1wJg^SOL`GIB6u@+1jj1goWD;_Lt{+0)WBU{Gg#`XFA&XZ+CJ(S}cO^TeYie zYX?s>M2OB`iMrEM<}ON1LV|5Q zzv2&e30EeYa`v*#svcg}pX*BB+}~MZ4*O<~wLmU+b9bf1W_QzuPe6c$i;MI=TH%JZ zbyh?Cjez37;Na3l_o$k{l)H!7**RNkZ7QK8C5<%pS)u|nU4_|$ISTGT;xxBYA)EDCf?@1x< zs)_9gJeX&9*sou^hO=0@p(8CVedgRbqK$rAGLOv>f2uM0cYH_n_4SEJNUA^F3R_;t zAL{j(oSO2Voi(L7MqoGHinB4~=^1pyEj^p#Zk)NCagt1M)&AZNtU3$Jo#9F!Rbffg z=47;$^-}2u%jL@_U`a*tnY@;ZpZjXjSN_b7c+GuhAs;?_(;S`d#MIdkSn={m7U?Ukam&XH9I@L5PIRK@RZ)Cq!0-X*xe6uf0y$4^NEt16E5Q2ac1d(qV0M^s`u}Y z@%>)=A!Wu|p*lvibuUi)SoC4^hbz2$3T-)LLK%Y{7J7y0(M3hupR?cDZm*h{50x<( zHOE}j){gCL<160oe%rz_E~6(9ZL`1YtP`v7K{nrVz&wPXot*%MRF3(fawZ%c98A39 zd=Eva#J-S-!~8j+a0T>rW#u;uLrt*{Hx>u5t=Gw5-6Rwg&>a(qJhLs?>F(t~pke*KS&|PdtCXf$oW|?Y(>VaKgSlvz=|y1R?@=39kUR7gV2ciY9*tGeqK4z{q=4De~k4#ER? z=IfhiHB>g;o=g%e^orDn;CL0rqR;%+E^Gi9Lqo%$n#)hdZ*FdFjU&S2Q9sz*^TGLE`2{^9R~v!`tl8HpPxc`X<8QILp?!v z9BwL`^&Q+abcv|_?6aYR{f+LJmdU1Q>}+bL6nogUPs;CebAPO_>@1ZtX=2PP-|?G~ z)6x>dPhyn~$(_w1vJuSCid{r^&s{opnpv8-&f6IxR3pqq4A@FQF0x6}W zLu(Bx6R-PQV@GcsqZev5gDuHCPl-`9FoI4V5H}U?$;cq;P=iNybvQiFG24xbnUvC2 z5_N|?Y(eA2Xt&S~d zwS8u0YWgxZHu%ez%QZDMdXtS&M8}WY7ars*C6Y*|XHVSNzP3O|!SJ(!H4t8@UKm=} z)2C0#PoF-DN=Zw5)@E$CsrQD?BS`)6}5!Yb38l=z7?g95fJ;4Yp!G`MadRZ`l}^es3)<*+-Ag($dkj_4EX+OtoC+iU_(G z*xl8|0yoBM&CT<^v#{z8gS`0Jv-npYH%dA<2%IFwS5i{qao@Is&AIh?uStaAn7TU8 z+}ca`4F>2AnWmmbd?NGIrao3>Ka=;g8R8FroWDy=5=TKIj$ayQgmxMEK#_elzz>`G z9$tD;hhwlaNasG{p;lc=Ybi6w$H%Gq5Sa1i?OS#DRB~Ec<7KPC5|y<+&$`+m>R3yX z8BvFJJ&I9SpqK)wrZ_RKg{9feAJ@f@->h6>ao>~IGX-o%ZES25Q#;`%!pDHnP^$;! zV(X!#cJ)a|T-RnN+V`20WQTs=k@}#uo;|JCSQAWWCWFLcLSiBg>~`o=M{nQ0Z4G6f zkB=|6X~ypD?MKB@rCa4;uU{+b=!Cp@aqLY*gyHTcHhp&E2!}$9waI~;u7~sWdNku~ zA|rRFVK$26F7D$TyHUgV@%hPNv-(g`A=hW)l-UC2x1&6Trp6>FUzOZ9!j-#))d|6^LDX(@Wnk{oujdzPbzN&tKEhqTkJ| zX)zZ_%FR7_^ytwz$I(GlEH1KooTTrD;YB>B%vaOEkWNZ+EQ&x$P~d=HL=+@zYmz(b zU0v7gx!T%VQAY?g`n*sk&DWkOl)(F*YL3kr@J&`cN6x^okYzv@EA;ynTLU`+gT4ml zn{|_lxvon~N#UM2aRTXR{zqdJ;1@Xy`|K>rx2l&oM*P$%8CLR>4=wugBPQvkr)zu} zMQ5ielEs&5=H})SJ53WiW;ER9Oa}!@pLtjg>1_X!i&%HGcY|9ti&YZixQj8bWsJX% z&S)peIn6sQlmow}_31jZ{Enq1{oU<9Qg>3(C)FeQ=15 zW@Ctb`KHb&ad5rKovG2p>7GYcdp)a50edsQ4Rs;h zW;5Hcp8Uj#r^CZ~M+gb~K4Su#10%x2M>|z@Ye#E?uz-*IEKM^%eX5-8OnvqG_0!H& z)ufLf>r5nKg$|!na2&hr#YY^Lf`lSA-Nr>6yH&m<=Pq5Ug&D?{%zOwc?d#odea;FXzc%!E7{r`v0L z9cI})O5eVfoNDe8xUBTfmOP5mO2N>O)zr)kYI4xKceJnuWv?pq8<=bjByN7M{=rXs z{LSsN<4=U)BOh&W$NnVDY4g2#BrsRpl#{!zug?rn>(#q=&sSINPM$iYy~dcMKzLn+ zs?nu%f$p8VD+@=xez~G%;ge*!onn#0a_01jF$h1xWfj%<*rW!1E3@|3oChJPTHoG| z`{X9?1C^?mZ}B_cUY+E6c=@!{_3IR;PEGK5=YOI+m_f&9J!+tWX-9u^c|^!*`HYUs z%vnyY0`i%enU~)l0;rI_eVaI(OZ!5PReTM=+ZX!Pej_k8eEt5t>e*3B^F9DjY9&s* za8smXVnhk;7ECRY-q&R2zsC&-!C}_95RvJNWc9Y=Hi+}(k zRF~8e%z`LA9-4##B}vJYp*RXwnKNh3pkTYf4>!-&*47@lkgk=Jge;lR=~uJwoUW8= zQEt3qv)t3xL`sKwALe+qKN%sarndH4x(YxasdN=qaq&Tug9m7;cX1{cvj%8geoCzF z(>{B_=>B)@=y-E1`jX&t5pmMh-i@tZtZfqcXY}CXTUyCV`jt=d)ruW1A$S?C2Zeh5 zpY=##M-1m5`<7ym!vjA9dVX)rm&<1ax_Z~=&wG?=Tq375v~XR0IZ5AtB;J7CVEQDo zTl`@=_utoAqHLV5nSn8W^vSV`CPB@m+VBegLKtaFshk4Tw>DV4_A%WT`apQ)s<}an|*YOnM#e-kJKJn(wn_*a~#>U3h1>AShx|Kg?RzK=~ zxHz<`RTx~^dDzzK<<{PW<6^O1GI%w$ffC~NA?o(w;kfdrYN7I8gvxst9WP>!49o!~ zO5ZVGzMOz@JX>Cl>dt7!Ss*H~L}$-R4wZGOBvARKST84Ee`0G*xp-&v?AfycK|wiU zm5qN_TGfRHe(c;X`y{c}^$+mm<5YsV^Z0EDTO_95ZCc54MI^zi2L}hk5~+bX5Slf^ zqTFBAS2h$Ek3g-@V-FT#LC@zEbbQ*P=5t%}L`o}T=Ezry;c(5gg(VLTk5Y+!wZZ|dfpYH+ zG!+y`+3!Sp<>vCi{3`afsRTO_b9*k6f}Gq7>fKnlrlpPg z#rQAMNF!%#W6eWH^3ROlZ|r|wUM}%MhIMy$SC5Yt2X#5B5nE>Qwg!;-bNjh2{gEnP zwQ>(Jm@LInk`@-1p8CL+1^x!(>z?T03fF)@7Q?z@4~>kjCn}x+G}D2;TMvjjb6+B< zqY{cwj*iui-{YaUuitEXxPPc*Xw9_mXN25Eu0!W@y+LI%qZlejofgX*o!RdCDXX>D zmdP6%9h5)8W_!6 zq2)vQHUQ!zQo>XG^5x4sj*D8zKvGmhdr>8=0y+l%&O+?wuZaeW7IMej*r=!(MY3+# zgBHz#L#X^gQw#rN6y<|UWjV9E>zaDYdM3@4^8M4jGfy*0)7ks&o>zE?0`p>;M+-|E zK4Mj$;}fmvuBDIPuA=I-JpOl`8hIzwU87%`)zl`Ztgs9Hqz7X`$E8ye5W*m80EKh9 zJCn)O)HKUu&!z9dbk5_ZFWRw-DMN#Sf{wl2y&sV#`uw`Tmwt8HLTln^_fGkNx;>+~ zx&4q*3|_3$-1Jbn#AHi+XtG>{!T#>nv}5u)Nn_)4ufxJ#y?W(6KK@YiJ=LsLi2KvB zE`fiPsiweU+>4kts8cmnl|B^~`8b56sA~TpU8`%}52h-84i{-_psR!(F#`3*D8xu( z(#K;8w3%QP!Y}3;!Jd3F8h+x`o7lO5@}bYRL*jZhM1SKO0NXq?$53hc4`grL z$aWC<-G>j+%|Kwhm@AdHxA$}hnrwS@#s`M|5uk=hH`cb;baZve(p5-e6}m^MyGj;1 zQzNQ95(WOFqPe&?sLW$+5~!(26pqp8S-6jHwi)xan&zdXq*%-8T>gXSPeY>8%Y`1+XCRV{}`$o|(`Ifis9)B;qsRnLuiG7Nm9KwRjA5+GXR5a~9w$3Ifi^TY3 z(n~B}jrD+e{s=xk^X1F!@8U09)aRq6prdPG8+?ZhSd98DjKj^M-UG$yfr|4&o9)bn z!Uadg?`qXpH-#Xm{OWsuvr#Qdf9bfx%EasdEXvDBqVXv_!}{mCOBvcKvAS+JFHW;I z9TtXB=TW;+J1*qLUx#lXMZ=D7p|rZfk)iZS!~Eh&VovohNBH^qzcx2xI&a1c+kQ-U zC`$4`U|M&UAtB7r6;tteV|9VLOUfc@-VSXnbdC6u2c8X z^y?&f>x2z?8mj*S@54%=j9n_k@IW`(-| zRn`34Nf&*OpbC_4Ch(6T6+ARz*2Lunx|St)Q^?8g^B%q1!ln(Olqx!C(QZ4Ck^{J` zwscKFOo0^)kE6x)sd@PHUNe`KZ|Ev1od6~P+5f+OJ$b<-F=$fGk?=35&D;L**6ufscmM);8mqp3ek{Vm zr{TYw3JRD38TKDTF~I0YU}pY?C|c%+VB_hjzKn{U!xCA~gxB#Ar?9Z%$0sOB-#Aoa zo7QeykXpi*NFV!GnQ?8m*Ig?5T`;6M&HITOBXP`oP zR3fn%wfPy779DcaQ|k-K+~syAo`0{A`>NevPPw|hv!e|zUo<*|F4z zuCrL6W-v~%qK+ZIM>|vTO_bB7{+Wv;PSecTxxMAf-J zMdIM9@`Y2VgpVHyQdKi$0Gz92>IB1_fd=gHr*TkGyA_mp_t5*G}+ zxQ|i!i_Mq}Qqg#MDS*XDNlmSWUW&hiz)+oP&jXUH>om)Qt`$k4P@r~}H0=etFXjn5 z6;pDbJ0}US1*Heng4&mdfpVd@C`T*2@owI}EfvZrrg7Ee&OZx;?L_4-slBFqpOky@ z%&3*_-+vVz?pIYM1;jrqKmREhF3w%J@SgH;iWjkQtgWxa)10pH6qWy0wcEQk*uKIj3#4CT^KDp3+{)W^H=Ax+VOx_Ra5Xdfsrk4p#F8}h6~<3%R2bW`#q z)G|7Y{+_3DP9yUaC)MFR^>cU52GdY+?4M*b+IWZ)pOj#$VO{@KnuU@`v zH7K5WSk~vMD#?HCVUHWU62#z$T zcHE5>@l8oN=bzWE?Jz38VWpee5}o+3`ga#vx2yKi-J;h8VnBrhF}(4Kt(jjGX?NHF z#*9E)`TiTbvBJyj^#iL`Z*Ti{>v}Rc_S+Bw@F77i64}f7yxm%qs-KjY` zNZpKH*`BMgZNbSbCAhkiwz*b@^?P7sTdEZ86Ky^9u0S)!iE=Qm;{S)2kzZVT9(~H) z?cJ(?WBMV$K}9x++y2GOfLt5U5_kZuuLnc`=zb`}V|r2CK8u^1x!5 z*oJcxQgNbmJWf09J7edX8gpmOGgM7&mmN4f>KPp2K_?|9RvI1Xww*sDRFOG_Ew(^W zpBkBi1EST7PO9Y+InA8a8EqV|Q-m8Mfl zd;a`+wNe*;z{LNYeBd?xDT)ra+*l=+}mFIl7T?8JdKk5?K!9Y@A$+p5?sG`@0F(bRVY7l;hdEqYZ;Sx z!7!}!>6sRnKYWx)vgx%tsMYJv&_>u@4GmgQZC`;Ngb=@hI{|!uyZ~sl=nspof1#V5 zz!-Y}Jt>Qc?{EJmO2?92IH|N|+wgdzlPO>V=YF7qF?JvML&n^<$=;0FG|MdYb6qSX z1X+;r@|7$19z5`Udr{Q@$OlUbL}5i#Qy{saL)QUo^(rooH0q9DU7ZY4*=E|4pYE;S za{D#@jYhznCWJ{MBrS~-QMfU&VPQT{B$2yQ^G)L5D5pB^hmRVX*R{gMwF)!3@seJry8rVykc84K)d|eVw2><0b(52XCH$grbsz*oW*_?kXl9|yN;&jMW@-`=;3!l%paQ6bBQ*~5AgQa1?Swm z42-Y_b775>&3S`NT(to5?+tOpMMnq0tH7xXxf;Oli>7;f>zblr&< zMb<7MA)z6>3#SoZY96;u>y%DYa9_Moh-vmkCJThL=%ZQs(vhCR6${oST z!gSds_aEF~T!o}0dvzdSD~kB_h0H_J_rwWQP_5BFa8&42)|^PJj-sL$bPHAxsX@g4 zRoF2jUw%`yY^LxDoloi?G#e#IrdG}vDNO0K_5fR7@2#^Vt}E=(J8QSiAGZ1WtQ?PC z1?mMYKQT}#YZ|gZ3nN9c-&WF+i^qZ%o*7`rP*0SwFu=%)xlB1*QcI~^vr%9#Kt?ZD z%M9!av0$3BfyI@s;v8WK+ zP+Q8Q67@U~&9cAv^39PnHRdJ+z_fh(b`3fZr)rtW0FW+-DdXP@J5G1+h>Qg4EHJ%* zj4(z)-9LUHj)zB&9t8vjRyIamp`fL`(6e+@tuN~LbXR{(>5bNcU9oVMgA1J~mTn96 z26&I8goK0}x;i?H?~{_UjoVmYz+&a*ZuvtR#ap1@QC+4sd3kvXI}5KG zCO|f?d~x~;2ztkTrM%y~ISI-)L$sh(nW^XhNLV{hRFn?>QLIXoLu;SPB_?|P>a5I)GS5^c?u^?^r#W61$ z7k|SZqJ7yXm%-9ek#MbRd(2=eki%=K43B{Hh)O2BJ=jY_=fb&lL!k3%Dp{D0jgBU$ zq{1YhsFF&-#I%%q@Y(9D>IqD%gW11#MXtAOTwvGv@0n`2Gv_aIq(mfE6)ndbC@4|O zKuh}^XczeJjIi)e2f8T5@>Zel9Qoh10ht?=97ZiL>|6o`>_~HE^q@I+5zoNDD~%I? z%s9pHkMjvecL7Iz5GE8Hu{9f2daB_4XR9L=@KI*zNJ2(bb3CDlBZ2t#&0QBJH}cI1 z>V*3odQG$@&ECi$@w+;>wFe5$Bm;BcCLY+`-F-c^QwrUYx9Q7og~)OMb&sDG>-}3h zEK$DeBy=WBUGsbm2j~2S(kwM=mJ8o|x4&YOKnU$L1p#*iOJCP9qiXFSQaVFD^IcF( z)zZ-VZ#gOFF^&vtYnj-~*h~AHjd90+bmq01Nf7=n2_j*e_H2jT?-e6l_OLa(Rlnoy zZF5Ux=KbfIpps?;2GRUIc=2g3T$~Jm`rR(>UXw6_y)Fm6Aye+#l(NIy( z1O)@RpZ{V?7Vj&RfGR8MxL5;ikAi_A_$Vd&Fk(0Ozj3r>J6>5l37?5KSMSeEcg}gY zh=)zmPuFP5+Su?idhXhQ);oe&4T|jNP-^j47~y4a1W_S^v$M0a0!&PQSmS=xSf}W- z*wa@YCm7a;puD`iP#{&|Wer-P{~;sCtP9G5u<$>E3p6?@C1rZ{;L0Dd_bHkClH2SX zAi%oz^$Jzyev7ZaF@>pd7Dg!`^rv~JnZQBO(Ayf1ZwA6_-{32ud&|BknPvXyqcfPR-{tS^e(-Li9(~&f&X6H?7@? zAzGcrG0v;#N*@hv`EW~eW3h`c&b)8ZnzZEZZrzF2a5N4;82!sp*5h9(5Z4&gb7Egy zXoFy#0yLp`E-moEZ+QoC9sZlV6YDm}`+E!s_37vU7?DGmuWsUx-;{&eZ|eXIQu$hLbjumls>(TigF(4YZ~dCdG=DkXxAx0S7Lbj-tbCG za?(aUlQ)Ct@BOKYCIe4m5H+_96la8ef>*>vfwcB2CgugG)@&RceJAo1J#FVHSM&bC zsetf9k^tmxuCU_({;|`zV8419&&^N@F2dzn>UQ9E3pTF*t7iP>8(07cRD69^(XESD z>?kL@q^b*+JdoA?KPi-sWRl?}D~n|E_>^;!>^T_uov0?EwzAT^wO3=ZFtn$3zJLGz z>F@oP^McXB{tK{@DV^=Dq7Ix{wj5cGnS4_qaPR$ncMn-j^r6yw^G%->A^RN^#ymUY zyxg^=n!t*W@)c$7$U8v@puY#FjzeC?EsBEGYiEg2!14$w{Y$^WnGWxH^WouZNck$U z2eESm(RBgqW*gKJ_vOd_KW77Vpkhu?Qi9vmd#P-P6e$6~@n`?vNRBN13Li3DCN~tl z2;1>eGO;5i2jbS7S;%`F6ah<$56qCcAi_gimC@5XgPPlOxSf0goUQPYHn`5@u5lKkmfgGn__Vh8*ceg`5!-i=z$dh?3FC21Pq4i(EbW76{ri5g?v!7 zSYc28zf2$)-3<4>tsm!M+DPB4e3IVvw=fskRG_Rws>azK02n-C{0RWQQb2N z`E|NY(C&{_L7v)I{r7uXcQ13;-E5p$g=x0Op|O(Tl`STTRN$suCaip9YM|M}kko5vzF(rjy|HFQC$PMa#w9*}ZtLo*v;`RE3 z$@E@#xz|)2-aBIJTNeMn`<0T83m=Q zDbD48Vj>6q6t14}Qs|F}Er5pwt}P4K|Jx+bDCTun0{`P3oaPu1;o`*7T{skud~Z0s zu#NZsv}F|@dIk1LDnSi=304V^QeoOeTpEar;_hA9d-vKNEb-3SAw*qTH;MS_p0q*; z^ivEtuK&sXQ;~4(ZL;bK$gzq)&UtWXoS>lay5lFuAiCZ74<$kb>q|n7Xd9QKj)Crs zVBhv+IS>=;-(7XS?01~b4+c!uix)`_g@UQ^aXnyD5VF{&J@4Z3)>K7-4M@+U-F@lN z50-keE4a%K3;5!VM8yg{9ux}fawmy>VK2zMpz#I-!N$gxke!`f>j18kR6d(Of|9JM z+34YQvIr4o1n#Jv_^;ixpQ>h z7T)Z|j$OG`vh{YR=^*xhpOg`=g4T;=aqLCFWaRCW(lWUIq&V08aa9?=vzdz6f0<>t ze57>_9+6-rzYWD-y^GOy)ZtVs+e}S#(;+Se_tGex-8|7rD%^vm100L-d95zjaiZ2t zrdDMyIa6Ek1W}@G5#5O~|HaU_dGdVC0+_0r**va)%FOgvN%dX)-W#0cU$!yZ*^uo2 z)&B+K!aoFL4sphp->g}fuhC*n+Fd6s6Dc_qP(Yw5E30WT348F-9tW$$g$oz1##K9s z>=8FBpau6>w6{J^eYZIFw;0I5RJ=Ip|zmRNYWf$7p zerexK>16TX6(g^dbHl$LAwsdW{C{eHe|5=|h4d+DU~BT)b}^amoB`lj@$faWg851%ae2}SPOiluip+dW2}=e7x}A^ z<3ul=+4Ed{DG^687$T`IX*`>rHU?)w+iwkGb(OD^LG_$@DE6ei+q=&>1NPKekAkX^ zrEuSDwSMNg5Yy;n6+iGMAd0#ukWNdz9A4^uz zLIwnY$+UJp>DO;K;yZU-Y^`%BC2UkI=SW_vw|??D3U1D*n%HdX5vdPo^mX>I#O!Pe zgy$==`_!@VBYO9q`z?Zoi3a1V_Qc1vt?Cl1hsM}?$Jn(j+ek@GD;(_?GG?hwtu|6C zRl{5728Vt(JH%Yc=JJrBpVy6t_HOJ`&j>D_BQlo*^WRb~{Yb1FX@O_$vOe!TV5mKq zPqrW%QnL7G=!836^J%I^U3gdTnt!XzGvCPJB}bpTeooaUFTnW)BnwTj41BE7J&!ZZ z1*k}?cSu>oIRr!Ss5_0nl2z2w+KsNGEb{jNC;7Q^=Ri=)!GfbibeENDb&$?o zw~S*f3=9<3i=g*LUNIuw-)iwR02>+NoEqzR5feiXbR>?6iAlj!oa@Wz=!@H%1)>6r zk?2T+@tMt=YgXi8LN>Q|))x>v`xT?+Ggq(DgA=0Y`)RR*-4&;;i3qUYnk(E&R?4%M zmj{31xwp4L*MX1lZxo16gb2mQDCPnKMN8t!371U8@{?n%H8H}rIqMEeUY{c47(d`rphBi>^x_QGN3Pg$G_GA)C=7NY(`&l86|C1~~l?c0|(Jn#VNrYSJcP zP$7qT8n~hGbN#@2!^+H@SSuv8bZR!jz%64+c^HBLyf&jXsS4+Jp16GkpA8W7)Zi%r zoCyG@V0z3py@!YbVmZh~)`v35g7`*2O7En7Q2%VZmX`Hyz3gXCpU9fP`z)-iypO)0 zL?Nc@LFXxkKF<%JGa))mW_Pu@K=sf;FNYG?ilM_)RaGHIJH>P6doX`R^62BLRP>89T= zgMe1B2~10F3Tasw;n92eJP z9=B;H!xJ1eO>Ri|3Fab5>L7O8zA=V{@(IBqOPAKK$S?<^p#RP$Vk_(^b5B6tdS!v2}Fd^2J9XZr)(QK@ z4ZAIO*q_{Gn=CG?)B1BOwH@`WGA}A1v}4m}k)JnB{oEG_ekyJqphX|+L17a=UA(>R z0xGONsHEpEUc3(T3QBLfHBrcIlLs}tJW@>~Vs{R8Mo^F%NQ!#k&LQmJtZlQNJa!4h zevr4JSDpuA_*tG=H!ceK2aLq#y}3uBDMMaNDZ2iWm*E+SNx#yDkt!#q-n)_jGlEf<`~T;8Sz!NNZ~|2w3zUK|z$xM<(eS&^g4!#2GH} zci0V=HCALB<2~yDtiePFG)&-!4{S)C_X6?W&F!lA_B1PiV#JGq0_S|NRoNB+5@7Q@ z5F=v|MN)zgnmYpkJ@o1?B2KC~%3^tT$|p~rv}Wo`K;i)s2i~yut;Rwq}h*#98)_kiWs<~0m&1xoV z$m8^VvO^&=?fTMCC{m-#cYnzRaZ6pDL_tmnOq0xFVx_g6`|)nSjutsAJeOs3J^~(+ z_iB_I9dm0``+;Ykkq=cvlohcCLi8=peO;YE`Y8gkrQFEh-o}@Zkg%I+$A^sPBS|)5 zu--i*XSs)P$IQ=o0(ZC|=v0ww(t)@x34D;SjPcscDrvol(0um>cHl%R8pQg#^X>%CtBCEGbY2K5a5qUBFLoz%b94_opI@N zP~n$S9Kzx8^@H8UcPC`Gk(Ef<0v(kHl`9MVE#v37Kjn0E22W6Eeq2#~>k>KP1hs zclDvIU@ooh*|MCc5nKw5mJM@KRz3+P5<~zW9W~G@u*QMhqD`T00CdWP_wRA7O5u@U zLp{&H0Ea^4t7E4xAAuFdj#T!m*cwXA29o>*zOX(`JtqtFOjHHTgUj9J`=@~91gaAr zKMDK<5ID&xDScqKjzTh_9`?mp{c- zZ*ov@fU-hFN?Hdtx6t3j5XKaYQ2O(3f(|dDH|m>`HUed3Wye6A0fAQN$v6>&3;@=R zJSiuKXiUXOwLcbaC7!W*-4k$_BC0WR&yoqv%*?Rh0v-d&TM{gLgAqpp4$HH?n;KqwxSbPeC!+}zZ>B|ZHH;9f|GX|OHB)y4q(SF|d`A|OBo-ajFTPz8O7fp9reYXSU}?X7FV z!pCfC$--qL4%D*k*^7|>I1NqhM!dMYM&3VHd)F*m#!`~w<`WqRXMzUe4cLMeUK;Kj zA?MLof4l$|4?HO$*;TKq>;9;Zk>B(r^nWCkjHHl}#4Sn>z8$O!PnAB^jD<>s4Tt-UnnFJIrh^iKCiR&R6Fa3a?gW( zNH=n}cXS{-m{Tnah2nu6B~l~qUd0{}-(9}GJHhR#FZ1RMq<`Vv^TC%Q!9ljOXMcK3 zrYwGG-EXebpQnKhpFdjn+=45i&3GC7fIY7-LTzaeU#7YO$Uypi>mg7;s0-x8fsH3> zX0cFTM2+1S>^fCRch;iv^KX9z9FlF(C(sxxy5Tp^Eu&^OkgvyJRu^Jp*k6KiaDitA zp?J6Ib&e0|`hR`CKUg-b;HP=r^HUdj08GLvCIkaD3JQc5XopB>yf@dx39`%gSWPdYKZH3wcyJ0bcUf**PhcYwz@A6(nD_9&cxebN8=UmD zbD8CquAxc2lTte*!Q4m8(sR0sIR0@BW@scB3@l9rbX!E4zq z2s*NAX6aSF?kcglW{_4Laiuv%*vENgQXkB7$dmbaC+caOm@6&{0(~~1%p(35B#8}K z+o0uTYb3&qoNbT|RtdyD4|kZ@;0@EXg7 z3*SH1KfFAW*R4|xq1Bg>k>^rmZ+e26v8}b$3mH$KDdg2A8nwg$#Hx(8Dhq^D0+5;? z@Z!bEA2TEh3dfLCCrp?KN(N5X8oERxtaMb`S|lYUWu}>@5wx5a3}cg;HioqrIwG@l zz@&w*vU*4kyBnh8KO+Zs1oSv3ixUzyqtZcD=jENuF4=V5grhH>u$rv7kB(T`S@-C! zIgX4nA3uH^L><+&P&z?UB>7+%DmM9`a;?kxRad1*7yO{Q0%wZ_JE;xJ7eHwpLSZbF4)Fa5GRgQ0gx}^ zB(3xzOu}HgOfK0Z(hh^GfJWR+2#(Td1q##5gWc>yj!Y5FpH0NJR6|EcXMxVFhRCP7 zT>rh}%RuG0K}`V5rjG);c+%*Lj0gqZpPf-`V!yE3P)#l5rakwj8j=^;mIET-ZbcS1 zJf7UW{<81_#pBDca_Fx*k*BJpSG{7Dg_S_qZ&S~Ju~B1<lVe`$ZiFyDnvTf}^Awx}tlLk_)Ti<>@H_ithHV9@{e#vnJT0Dgu|P{(2OJbfFwJvi#ow+(GKa8-n$@DJz$h@wBGx;Ig99{k8yn z!eD(At)X^5mcLW%=wI)NeT!`|g?$U^G~zfb*<0^(nojgL-y!ZqF$r4I1FWSuaiZP8 z97OL_eUEN!$B~>Caof+n{GICe2g0&K_zmj|cr6#%D>}Swl*4vmAlrm38v61jxgB`R zYF)L`aR!yEcOha^35_^*vEkip+NZ_8E5a>No5XkHNH?+`M!_K`^z5gM_$yjsgjpjS zqq|Q#9x?k&dH2to3}g>fU279{6HbC4J=n{u;b0IW2<5e^2)e`B4@f>~f4jSU6!~;e z(O5HL+~V=vcLR)aP_!No(HEq(^{vBs1~5+q0{cP=yh;_AMR3&2f(h~QA>uxYt!F~; z34Yi&wv?gM|8w*4y`B8zGZX>X)4UGzYDk%dzJ~dd2|;*iP-T~EDDMtelS$O*?*F2G ztVn_IF<^mV1sIN;*#L)~EEvhxSFFu1nbX&WKxuTlXqndIfTu5S4+}-`go-&Uw3)x) ztrYN_$g;tjSp$JZg|AjaZ1&->K;&+VV|f|qhxT*jmIj~M!+9f+`Ae_8Qk|J!=Av0m zJM%&K&qiqJRLF$k8XO`~I057Ts{7|m(FXvIoEGxBQEGSJqS0tP6wDqkAu;;&Dej$U zf#WUWJ82d%@87dD#);9vu0|4~vH!I%<7*f?8L17R*?`JWpQT?7yjBo6MF-Y%%G`HY z06#hctqMcV_au@vkb(7l{7&aTKO|%mUI`YHMp1%nl3lb|}3tZiU7bH(*I3 z#asnIkj2Z>u$XgHmZP`UaxD=?FgSuxB?~ZxikBRj#iWQj1svC>m6-P~s%F%%hF*ON z-q11KgYAe8A)*;ODo@!lE3hNPyRV-{fuuqK7z>&P*PNC7ap&{Ze=594Af%P9Wp*Qj z2m;mt-M1#oQKR!}l9H0JaC1kH{Q>~>I0}x-kOJI^c#8PVx*!yTOP+C-OWC#L{Lyrc zJYopjV`Tk^XDB{TaD9*^O6;A4)`VbOsP!82OLxj)@P*J!SEg<#Kmy@lpO*?oSVz8n z*sRvmt;{G%2mnL+10s#uT}!6Noj?7#Mksw<3ZWq(bx@Om!$W))i0_?+rOM2 zY-~q-2+3q1pa+LSAY=;IVDx~@MUFU#bD2Gltca(1HNK{ycwIq#&2eHu5jrkMfsMh4 ztC~iW%;0#z89>OX98#crgTctS1uGCu_C$< zP%yv0ueWaJEoQ`>@wI9t%BC*Hy~Wizz^w%cFC&|=y5l9Q?Q-l*LvL&@opwo!Vz4!| zoUCJqWOVHt$^-7L1H1h;$2=uKx-eUhz;4a@@}&x%_wd3(@b~Yxf%V4&UJ0g1Fa;Q! znnE;>5W#-H8R0cVaQmmGLhuM5LX&|&xC}#chmQU%B7(Z4qy#x60kQ_~Aq@+}ix+%l z|G)rtb>{xVN00O&Kq2J0e-(~)@q=eJ0-;A_N5OY3!&+wL<2wnDUStXnIhU#icA-Bw z(w*qY7yb>oTr;3gaO3CPIceuQ&2O74vSHP_J6zbzMfB&FnCSzA7_wR4cSK(8j z+URR0&xe<*9lYa381GZ3fV?Po$UH6L`N_tWWpHp1!Mxz5)_?TK7aDd&WhIVebf_>V zXJf*;(jJfKrhVh+%r%?V4j~DJGH6RT|4R`JKu(5U&E3BH|!Bbx~y)=4F)Lu7$1Pz_3B9 z^Pp(#)Z|k}Gq~Ew=)#$HmcPD35=`j`dVqlzb|0=+N>X2s4bFh2HShG*rPyX$+iRix z@KYL_`t3f6YJY#5-f(vC#}DMVt&#GBJ#M&k>4A}!%UrELkCV1KbMYSxPF@wHURApy zI$77x>B5oG@^+x@tjE@`M=%1PVP(YwxY6+wjY-lhxSXAL!@?rHa%}c#v#m%=({Zt` z#*ji@L0iKwq5~7RzBEg0KYzoeiiwo#hi3@~Zqy;1NsN#U?*9Hhjf6)@tFEkUJ^>I` z!E}P}ftdv+oxQNq{@RrDl3iT%3QPE3Z&x@`6ox>eY(?Y4hOKr8)T>yKe*JP$vj#j` z$Xv9-Aqk&|4EPpL$u#{zv$$8$D$-#Msnv8!QAj4V}E>A+o0)v?3@Dj{Dk!Z!8(9YU(bQU?V^x#BT2H_tez`L3h&ws!A>2k^x-3 zyuhF$CnmsTzd4;0x(u${Q7{95OV}HY=15CRW7`q@P|CdJIHS;i5>9!5mB3IXZsW?U%eif4%_6PmwTAK+r1s z$6$|#3vT1$Pp92YUa;&#qCO$t0*oRMaD@2~!KNVMJ)aDJ^X3Q>6H`HPaS{ZztNo78 zVQRJStEH!4L-nNFm;e#M4=#Og{YCd55JQ8Y6ms6BQ8icvAO zHyn-#npF_|=^M5M5v;1Z8cr$sESL`~2p5I0g5lxemQmN>NJ720oN&k>%wx*}*Y4ao zhIm?_&mm_VFf-#I+!x3sNE#0kjF2dnD_gtRsl(}MJJB_za{ki#?{puxVcB2qFc<#Ks~k*{7v# zJn1~2QlZJvN0rp#Oq4RDmB8=`leiQxmGTqM%Y&cYtRI!b|c7XU~V7AOx+?V^*GmX=O1jN_m{l|obiNI2eu{JO5L zE<(b2OC?r-zze(y%E-v5R5j9IFMt;g&fDD_3w1i!+h~LO4@VLiLMCwYXNw0Cj6~9m z0s;bnVPdR9LPN=*4f*%4~$DhGCdnZ=p0pwyJ(7m&bkX{!<}0SZY{zHFHI`t4ig z|0(Or<6_SH__)$jy0)S%)wbA#re;@$ri0vuT#Iz7c3YLoNVmi)(WKBO8l@OKLPhDA z3WXVLhf0U08(q`6)#&bde`BB5dY*s0yk5QLH8a28_xJgH-pA)XsFpOuD!i)YlFLPH zgR4&7Y?+d(5XE19?i73TxqEX1l>1=3)mpM7sY>M{=@qSK(Y~Fzi`4zF@-z^y_PKSt zD^Tj*bMGcha^BJCEl%CF{^MN(2$*A2Ph2vYtbdN8-`L)M7RwO%Xk!~A=F{%vJs8)| zspqJBiiWej*xzGAKGjhm3lr}5IABO1DCmO;m&Dkha<7B$?C>%88h!hV=u@LSIKoSv zlVCr5MfWq$!?6prP&L$lZF0`)5%B~``vAWPBZYL=$rbb=2pRe?Nn*bwsGJdG)Bp3` z3ZmFJI64w(5=7heP`_6 z{${eM^Rk+!NP)q!va+(@Cvzqz2da5ETCdUZF%`6~t`U8HT=L0o)}P*yR)zyXQzJ~_ zxowc)!gRE;qGsEwxfUIp5aVHNHoOrMdU|>!;R`bj65gJJ8*c3Akn-^GfEQQ`v(D5r zef25{GeK-9X?8?nMsHF0_FJ9dXfCQe#?jeE#>UeqUl`P-*2)HSy5pahbg^P=2L1g1 zCgR-GQDe9>2n%ZxI3hXDF0wlmk1>^e0>pEm8$!Vk_NXqcc;Xb^*?DN)`t|uGB`I~T zr;F`etp6J86N~wnYIa&!NG@Hvln~jnva*z#V}%%>Bp$_dgubIOS}Jpnq)GblK>Oo7 zAviPj(7PY^&cIANv+jd2i$>PsoQhO&P#i(;B0Q~idpMb}xKm1>nc-R=Lp)7iMy%xL zA3i;gGw~|(%RRo+cz2*gn^{lx8x%d%eB%6AZ$#p&s?*6&X}lSEq}Zh57C})T6XaBR|%cDp^+A(?gxbcy=RYbXBl7}lCN$5Mtrq+DKMK%=YYFoLR@MKoPQhrZrSoW5?BTrYDf(M zijsb|43;OsiZEc{*hS7F5a{o7vFzv+Np{|L*Ylg)#i+ZRJn}yX+s*swZAP|w+uI(# z61;e!#b9tu*E=Zu_k_gBOMiVl2IhL+RufU?d2;W1OB3bc^2A@Wig}_< zZ6TkMx#}qni?A!{#r$?cZXhvG!}NGKk7u}7@h`K#PmDY7XYqC1KJP9|1PMMRP3y_{ z3S=yOmm3d;4?|}2rzewnYr3SRq*9UYOhARMt_%=2EEXh5sJ6Bi+n7Bhcnq478r^*z z-U!nZIqU!sX-Vg)AA!mV0r833L1xhO;mhS^WpiBgD&*1}QP6!pR^F{`$BPlc9fJOk zO;n3L=y?{)GwSTWfgnj7bkMBgnbT5|llib%y{WAY2UU!uvUpQJ0)6G`hDdY9mWIKA3mIV1dp{Pnvk-p8hAG6pK@T0KEJ!0~LBxZ}Xn6Vu?QP|Tgz5<3dP zcV=I7cGdMj1#X=Oq7z6kFD_PARu<{t@WL(UY3{aZhNDaX*Mio-uhdLG0ox>Szb!;@ zyTC!^4w0w{%@&Il`2v9;VdC1N?cIQTTxrt!vsmxRH709<$c=TJNV+P|I2 zEZ_eU9z>!}-a{fS{Cv;Bh;Ho=D8-OXNAozt!L8$)9#s`qoM$I$9v_+p^AvFk{$PIf z46K5$CW@l9*+>{V#CU}7jOX+{w3fNc!cc(_i}ws*d~ted{RL;upN?u*_l=RIo{FSB zz%h#084tGWg_953sj{r5$vvNVhyLtI&IgTbzu6Oimwin@46i>am~r0jU?RB{W?wK9u%zjA^wO6lB^&YA zoX2ytut0@muL3+3JM8Qt!N@eWnoed9n7^)3#X!!7GbYue!6YxUK^uM}eD|$aSMFSy zfiN7cP)Oa55CeQMzUhPcyNWm`PzgxfJj77DMMI<10s|hYX}SU41_D{5MoPWU3i$jC z&$FV}!)(3BPhl^j`41d~k27ji!8OHsw5@ajVI;6rM{-5#y~ui+w)Sjd7(xEu!q$GH z{$CWdgH_f8^qOB?c@l=I^o)#x*RQ20MDqZum4HV14CjG{DFNX;#^n}EqLa#H0cYm| zZxF#{YU2j~$Mt(b^4?Q|#+gUr9f;eSPT#kKA#&9_jXG}|H11{Z4sae9<}2_z2Uk#K zWu?lhBMUW*d=q@;1Ox;g2yE@x_?|5B$F8CFJ((CxDQI}q zlb|Aud@NSY9L7+-Xmk}4T%q!l+dDKgbUBym`SBIVCWZA?Q8^flk|cJ+>iCT78ODO)58^z}+HLO=EX=1ijvO28HCpbqX`( zki>G(Ct&{}6pSl$4-J#aF;9ReDYlI@xV|1#8LPywZ z3Op%9Bm%KWjM-~WN!WMSW}68?25Z5&2V2gD@j`lYndp z%97g75-lkk(a+F)AdbymwQ}Xts;YUgh+TZ|qOrRCSdjr`tbKb>nQ$_#MQ7GIw_tg8 zRzjP(=I#aDoTs02p`}9@Q)uh+zXWp?nxo{e{f--&f4h8h%3@m_Ur9;H&rZ$g(grI# zOG}qGt76TZU0tPpd_I|L-bL;F-7JyvM*QGb#5L^-uj7JdAxmR~-zhc6CPrKvy=4&* zXz@&Tj9oc1_^zz%cc?6FN4L51AEc$73Jn$fbR|{NUO}77X>4pf0h&1x*WKT33r|12 z&9w&iycs7WPO1YWbz@VL)>s`Dk`wxG@~h~#vZ=w`mIE(&hPL6gJTGY+SCo>}2M=gj zB>*olFf*M9P{v02!!uDDavry%Y}cUnuzKo^OVzK78<9wcl(43RiOJK|>czIy~`IU(#wkd4YLgn3S1xHz|laY~;A7*V57`S+6@*mH#mxMk9 zC+IVHkLS3+U7?=E<8|b@9v&a@%F52}3p!TzzUk(Yc4gu@6pO`i-U8f2LZE&~t4tU9 zS~s{N%}sy-9HYto-3`tj9(tX(x-g~~+F6y{vDx7jw;&_gd|#hLasx^v+6%5|sb9on zul54)?x0Z*A30(MAOKV}=rjm|HD8bF%{JB7m&Y7d;N!1Y00c5OB05?btW9Y^gOm2w#VbcW4fqSj(u(eJ+pek?#d>hLLV*GzlTqD$ z$Ofn|%eyOfhrW!>6WkKSj<&5Dsk|xLn~Rs>@a?d%(d~>K{8d>A7LwxC0v7o(4G8qz z&o}oB)ou7Z34O*y|74xNk_T{`Fd}1iAUs6aqQ@6RwT4P`Q7I${(GMRrr=`fU^nZyo-R zAtHcR>fRVUg&zdws>;_=P%NmM*A?!1{`j5jWpsDz2xppGT)>4-9Lf^<%J9t_>auv7CD9VCzG9(v z$GKJATP7{dQ&v6pCB-dT^L}!v8*)~bmXPQUKXFHa46+x zW?#k7tIxkaxWdKtG$DcZ(W6IZ4*60>8!l3U7d-xqHD;xv!{^%LntK0YLS}-==+{1z z@L$21nwmz7+73>wlurf+1O#Z?8LFwN#icMj9-Kd`Sd~&-EOefRrm3}+zz@6mM4u-( zF_At%;w<%^NY`4ym&`CV_tN@rIKM}WaOLkTY208rA2GR z6C=L1v}++w*iD=M{(hEAmrnL&X@-=RmKN7vRF0Zj=t+hvD&{Ec$B%n5*oAb@g|v`QSR+3nx1g@@aAIFLFxSw{ zjN88_>zU`fQwdR|v_dCea%k#$XDrFC>}ByUZ4Zf0`UVJEw3;n^Pvb3qSx|>1R(;K* zeN=(hpv>$SxVJG6mxPaU`qe=@<}vAq@_+Y^t+};zX53?PV4;+6pN*fNyr`(?f;?KL zHIlxKUuaRw*Uzui;dsd!p5Pbx>^O{7x)Q>De(CB`GBaaoHWwryqYH%V8>?`}$0t0~ z%#1mBVmp*SJ)mbAl$Xc5{b&3cyll4A|MAEPEs&1L`Zx5VG$J6rVaeGxc{Tn)^np%eER3lK;vq6R!K?P*|uoCx|F1(2-u!7 zqTeW|-L?Bh^=L-8QLf*=f5*hffACdL>>h~yB{h&I{dj>QJUqP6bKN{cytDT9R?7B4 zAC24o@^fXTM*jMPr>xh48#+2jQSh-)=h@a$qA3)``SXFxLj}kx!Hx}=Sd;&$oM+lx z=)oV#H@>E&6{BlnTg}gBToqVRA<>Z}Su%cFIdFl*I*T&B@$=^s0fgkOrkKNwj%E(E zcvO*oZpY^kQrZ(FBqWzOIA%X)r91^21_N0C`BHP{a}WtHHc`x;E-5K#3hvRSFLV0$ zNXfUMj*bp3ZS5!7*<2MB6;lb;DK=;QMYj&i>krjwzr((SP;zKoWq-+8vT`R&gH!nT zuOvxV0!`Vi^JC-V_ib&T!GRVxE3=DN1~E&Ivkg7Ae;cSJijj47bve1aw{9->8G8Pg z#pr2iQRL?3#kRHN8J0V3E$KusN|&iKKY8+`0(~fjnu6UfEH1una{tS>Z?_4Y)lFQ2v9xlR9SB?(8&i16BfImAYhc)(=GgzC< z&X_C8zqj|c@4n}@ae#l^+O z1$S$+WN~+sA3jVkmnDmq!(KrjZs{SuLP*Zkyt_Vo-_mj*Guq!D1&gihfxO-}C zx~T$pwEsLgIZtNf`_EFb{TXoc3xeh+YieuvS}rGttFd2mb{2$=bl3UqBlZb9_j|OQyeWiSudd9pof_Vj24Cti zy_u_nCkY7NWo8nzMKdFT^Y4Re17#}{we%So86WcVm3(~V?B;{)hu!jiHjbEtgoNoHW#${VZ=YlG`CUX^&RS+Q)$oLOLLNT#d!p9Ri_@6C zpmc-=?AmjsbO;I83{sCnO^tdvuUKV4E@=At^)!T@>#GyBV4u@Mj~BEKu*(JCSSIQ* z7!eVXPeeQxZBapxu+Z2=j#sZ=zq9U6@tg_cxVK43LE+ymk2Bhv2w_I+@BMhI5K!nm ztMn>1HchXYYx>P#GBwO9?j zK>7Oh>zG>^-@I5lapQC*8XN!(PF_c&<#>2_zUS!iqppGrJP=Cw_O*m`2L3J7AKqQz zJWFut+-X!pSJ#=8loYNKX98ygI7|U>2(#2ffW@7sl%s$wD4tl3lg>!pHnzp9G&&wmUnUcd!E zmIPc-SXvrXT`i588q72N@bRPep4s{I+7=#JSw<3So`(I^`e;ICUkbxAJM9rZc6Oz` zEMoFyuhMs&pw2A22Mz+n_hG*g7k9!A3Rx%bBpY~om?AJuT8CBKQ$-K9JpN9Nk zIal`P4PC5#q*!Q3P*CH*0M%8CWCJkb*cIKpdqH2msMw8FoCPnD!gO^eik}*&+wSLF z%0eUGG;fchJ_AfDcNho1#;2pB(=sw5rKhLwBc8cBJNFlm*F`?QGs0FKS_we~Cbe{c z37){dmpM*OWJczGITSZfwGQWZdXE`R838dmZ9OZjt;d4R#xxw^EE8TA2*z|%2Lg^{XQduRZy^~^MdCy z;ldyHuHU%9DkXJqZn^wh?$oO7kd>dVF7?5|!KcB#k(E^j$rB;#v!~MkIY%lsZ76mk zs^MXPr?0OJlh@C)!^6WQ?zj_szo6Ey?uf3Gm62hv9n4iwP{8~A`SatWB>22SX}#-D zqOCjf$Tx`=Mp;`+3uS9-d-CK-78VwiuCDHtD^~>a)N0c2vjZ@`PL!}4%dID1)_{sn z6#q3Mlt4;LOG`vdER+my`H+)y&B1~1ma3{@k{9RetT$G|WhMmZf>sYM!d1`7!w&y4mAQ_f(VQRK&H91r9=l{Jx zkIQgDYunpOkg%UVeLA(Wk|*RZOlf_5X=Vu(Rc%q(-q$&Wol|b!KE9(n_5MQ6HyRuc zvxqh9`UHydwz~R1{rFPq5eN{vIqI#h@{lBML9>pk|YUssz35PBp zR|YZpq%&0wg3i2M&4K+X7PtQ~-_QMyMDbz5ln^D@V$@`Wg((3RA}&{3TU-2yUf5am zzYjU7j$@Q8Qg_z$ym|99pgLj;^Mj8 z^TLcb0S`PqMY49ZzdDQLlGnV3KR(@rObqcUoQfNaASNc}?Z&*5+P8|$XD#NaNXoH) z7b4>*N^z7Up4N>$|0-AP4EXr&;m+jxprK=_C$E$g-7^~g;Fm8cxwyCr-B<2izkXeS zQvCj(FMk@=lP>-tt;Y9p^+8suO3ldF-NB`slAN5p4Gwaah9-no*y@v)G28QoiMsWW zv55($b7Ak*=?!c+v&}77xw-G8WQdwVA^Fkh*u1GQiai%a4kZmF<5Panko_gVY98L( zS&jRpjQeQ1dX!P_kj5oO-MhJ|(b=UgMyaW)dd=LN?Q>I8LYT)+$#k$w#lhUu;xtRA zGN(+|>lbr*uLiyj8yXr)|L}oGM@Q$|rGCKTVEUOa!`j-~W&u7$TC-VMeJCh!?6Yd{ z$5Xj=OA*58ix)2_E?oHV?^?}=x}pwNb%o(t=mI?NsN*FVDd9fi^0BK|h>3~K?Cm1~ z{(+x2eEUXx>eQ*s*s!ek?*UxkLx6u07e|xg`}gK97Rv@vLr_o)oJtu1CE*bnlZ$ii|%uT0Ani6JO>2eC6fK*Ga zQH}j2>&1)s5PaY!q8TL5ojrRtG%BhUcQ}b_EMH_t-#`(fl$Divj4CL4dV2ILoYH=v zx`c1`^`vrl*~=_QN+)AWJDU@usA%KE?$iqiIYVq8t8ybDBO`nG@F9|v?dPsWC*=b&lguHjqrho=~L8Q@P6T|3Gv3@?TF4o}Ur(k3xbW})r(^}00X<0ZBx zEdlehnI-zRh*{0Nm-KS;TGQB2`cqrEU^^ZcOcD7?^i|^)zuv1eyg@lZ++?f--OYV{ zeLV%H_0(}2B_$>5w(j1_X*TAgAMa${&DSf3@D?{adn!ZuA(lTw#3Y#O3*TE@e}N9p zJ< zaXx?jc789VLh>iOx54&1*5;{%3O*+_BmCn#5^okqp)SkhS9DS+bpgfX2faOrp_B(t1Biq;oUwk(1vt+Ct%?S{xhPALHB_xIq z^kCOS)2>i7k1Y1{zfwz5Fe211>io3H?LfnIj;05*G?a~@)h~*~2I&;3(|AhOo`zUP zc8D?B!zZ8cqKLc3XYsc4>hZ4WjlGWda}=ZdOOM?5fIN5EX%S?*TskdDt0ahMuJM`2 zbh6MXio7t4BS{rup6I#yhgeS2=10F zNN=iGThDB5ZC&Bv3B1mRhZ-IkQMhz2VKCnF(IYOoy`PjkrgaR^Z_tr+Kg+~4F{4?a zY7cwEby!~PC~AV9@tf%OQ^;wa?hnH&E85?N=o{L=} z+Zmp?b}h6~c->)LX1&sNo-1o?e}5mUv3r))Iyt(mLPF>0#U1+FAEcb7k2`vi^n!YX z>M#p^oNP&WDIJ*#MP)U|7C6dubal-)es#u6xjjl8GB-Cb^xk^JV^DlDKR(B0h!K~IRi8`l^M$d>Xyi227zHqx!}P}FT*$X_{_ zMS!m1kwGG|we1#fwKeV9J3Cu4)e{ArXRebn%himRL5&s~9hD9 zakUp}pTnMT2(+R};hG~4vvjiVuVpk!Q2G+&-^d5c*jlPj=g%UCMqs5~UDt!Bo-Qsz zXP9I{4N9!;Lug(p%Y#}E>NhCM3m^8dB|nuAWI z>a{iNwbY94KXP=6o9{~6^Rr22lzb!)0n8~uS{*DfElBb+(bF3;r>-(Td?RYBrKROx zSSXMzA7XL4H3R3~Wsgcq);RpJQ;?M06>i^;i94h}F#!fP_I`J^i`jGSTY$tl&y#6U zX|RJobAR&usrF^oAd?Bw-cJA5T&=P^&O;2mhu!G@C5}#WX@^i}J5c{u`@LC<*b*h>zpvP(*k5O#h!Qy+_KvCv~~YQ!THY_vH6E22Ht)8KXf z`jrHUHsoA}hg6bOyv5w$)^B3k4G`~-4a=dU)QbyqHBSr$APbtqYN>DEL>E|u=`@~aPrm3?}+svA7zid_59__0061bK0?}mq%+u)&gMp!UU8VY{Ce=4 zWH^Mg>&`=>p3s@7;7Njm;4lqJ2zJk+NM~+;JYQK^iQvNY^ouU8uF#ytr>6&>lVs0t zNr;d6;i{JH$K^`TpYG}|wPib6|CiG$cUbArV+5lN=fo!@B;5QnPG44523YG$XQw4# z=CRGai~}0A&ZO}1qiVr%OR0YrZB4a--?Mk`=5hX|p`l5KTAg<=_Vw$}ot=>hp0>xK zG%m^3H>Ki|rXt{z>TvtNtzq`ZP;hwwNe$e5d=A1N^9l=Nkj?3{)*NAyaa-YR-imJO z%h&9qc=tSjicnC{f^8eS+9DEXBNBK)hH_|5`#l5Y5UTBcglat-{yfB-0(%^C6O04( ztY*jszu(>4?vD5JV=vp8jIuUP%>aAZZ{L~y+QG42g6oc-777Ta==;|E^5x4S*Le+8 z17JZ4TH24>nXXndGL+P6>|Kx&$h$PM(6b%QRE+&CMm< znD1_LtUt68Qg}l(s&)sXZbAl|nuoOp^A%qVw{MT*SH64q{LJiZ4^;CJOtN%2x_O_W zZ=m_|Tg9>4JF1NP?`>_Yzns*JUlxlyx>MhJwDWqUWz)8=Xuy$MDK`2Yn3WzbdF#q; zowz|a;+a(6zo)G_;-Bp9dUhm=lS5S`f3$lM@EsZ5<2!fmJcr)uix=lYud}HoOO-~B z#Ky)Bm)X<1xVTKs&IUlBXzc0HhAJ-NSzd;rAcyT4vF*`NuRj}LN?-mIkHAE$F5Ifc5X9_lEb_yn2d;s$RC=l2p*(+ zwA;3ok(p`!XRK1c)>~95nkf=$=W?5uF)^s;DuGnox>qlqV`XJknD3sBf91TWXQVX$ z`|+`(#!Fad-N6}ePijNYXBs-uNP(9s=Lcv(huXV`i&C86)~#D>P2}>QDy1kG86#or zfb^TFsHpU--FeyA*y6(y1>|E70_R)0XWP*7GdFfx%$AkX8s*RlyYr^c`2srZN>lvl!9!LY0PW9WSW%6EN4e)slJ^bNeedwT5BK^aW|0|Lonj65I z0;Fg=S^q8*)zFSti;K@0mOJQlX{5^fh*@VP zO3064@kokkrVLXZ*B=$=!PyQev;U`>moF!g_&9M;m6M466i1?F zHb(O2aTJ57qG#84Dl)DwJw08}{)fnzYqu=)`^H03iU1ldnC=Wo)l95O4SE-}B-TzM zQM(A!^59E>Z{6pg(l7r-+k9EJq%*6vJ4|3$P`;4e3AUKYY^<7b^OT);^PN6CMZII9 zb}dv1U9)x3qzi4ZOewDzc)nRQbC6tilLDMU%hYs|*MsypLh;}*!jW)b1h0BzpcSlU zmRjqBq^2Q6?)+*`G&OhrWA59#Ls_%3E(U?s0AnjlZN=Z56BHLgp z^L&G-x}CJ!(yMP1*?zF(l^`D*x-9P8_k2|ZGPrK+piqnhaOd)Y=R*r`_Y>C^e6qoZ#)Lw)_XnVG=} z65WA8UhHEc)cNtw2x?7`*h+L^&ld~@csF~nw}JA9_BZsdEzAgI9;shBM!66^#Jk0_ zj`J?E_w2?+d0>|N+bc~2IeK^~2vyB6+PEt>*cX4lMXc{TZha*BEFXE>qk;j??hV;v z*pACx5Uxqy5o4=mTlekUI7V5fg;b-L&V_wFWoL{)D7h;KDDJ;{EWO<4a%A*+DBhiI zkqOsH$)Q-Jx{25{R&E`-_Arl2H~e!U>LzU*`k5~Y%HOC<5I{(tc_M=goXKOLo<(>a zygW(DjhI6-Jw^2L=Ylk2Pr_`_v=;Zr!BOM}NBVgtmz`0-I*vMW0QfiK0s3 zrdXj;zZPm^IkUaJjf_0kqcI1_D@uR!VKj zkMF;o{&k^1$rO^8-EcycYF-`SqxFeLWKUYvWB{W>4!9uhz#te2`5C%Sd`D646@BeTC zE?-vKN4Wxfw*2}y#C zt$Vni%=P3H4@JC@0$`ki|Ivfti*{AQq0Za$Ckzb^vT<<{_w-~tvL4$a^Pcsky3!+R z*RfwyeRZk5n6zcg&$GLXQV+BabBJ~C8?Q@sI41_wtKzy=`H^~(*}pgJuAbg3jLsJN zvZA|I2j)r1RUg+8L7V#v&x+ch^`xT;3AKTwmW`po&WxW=9>D2mF$?CpnTdSiZ0m;TCt8vHTAXhw@pM9Weo> zzB1qI>l-)uyNn}VWuM>OSyMj$Zuc+)U5gd(pL z*C74oyY4&oY9jDuC1u&xq|&v(j#SKvi^?ZBIU7RH!WP`x=C07j;16024$sv;+YbUG zxctu*KV!I$7ZpYygvN^u<9Utm{;J~of z#@sMm1c!aGdl@=i3S4n)ax5vxQQ=;N?_XQ=;BtA?kqtPaRn4e;WYOgdxDPtLy;-s- z67c=4dIlH$h7%4q95$JAhchFYXdf(im2kl3L$8Nc__&)#lWY`7tbHo`fzI%3eaI1s z0mhuIc*2_mo$5!R7H=kSxKaE|^oT&k@qY506dHp>3xgtcWq_cuxTvr&?U77KV54RB z*EBTF`1<+^*beeYNJ%Z7Zw_-_|Gi~>-@+k4$cDB}JV-8fXgh_XIh+GToiBII5n7W{46w-$ZCeYqi-lBI5C5sc!^}qwxK}e`j_7$ z_%d7P3w^`|{Hhus1R9eEb>2_}@8qa%6P_1vlW%gI~;~O7z)W}i# z0@O)V^h29eOP!5D#rhVL$Y zgBQDv6xL_r_t%ldj%K%Z$YGavWt^A9p?gO)3bEq-X8W9re!Rikoz4j)bY}Fnwg%@9 zv&S_a2fGi@^NXN8Zd7(NW0>U7auT{;YB@J=ZBF`o*Bw$DnEIWn7oR|x_;i|KQ#*Xm z?Tk)Fn|?z#o=IdpIJ#YLatK)BY5*V~rfyFL@?m*@obC}#+ta8X3f7ISp$2+Klqq_o zLWJU_Fvl$3K4D?Cop{&D)M+%UccY;5lg|inoXq(^)6v->$?iakrP36Xf4z$x<0EwN=o8sb^s3zap#H$NcK-NmXH0Pih||&c@wxe$;y@nZ3*{ z7%lm;kmq4;@^KFBljkS{QXS*4MkWMp6H zgqo+QMt{a2r2@S@dso=M6NYk|V+SWb2Hak(kJ$ANWezSwr0AI`wJn{d#gL# z{sh@fa|O~!J1{N4HPwe7wIsAE&aad|NyQLYb)e+-JIsVy-$yr2${s~|Y)l00nh5TY z^pHe_k(@tXmx4r-NKL_)u4+bWki=uCE?h~x1Jge*_W345JY*&m`XjFx zovBoVIKNzgfAeO;HFCV=L0YxeFYOo4PSZXaay3z&n3DNJ^I2^y9(sU%z4Dh_iFi7B zrd``1m>L5%(TJoQh<{FBVQy$|!uwC?g)I%X`jWw_KUYe;`m6R?gpbg}&={{ds;QY9 zED{%XrwIeTUO;gF4TZ7mO_L)%n65$2rK z7;FP#!>fMn)y`^3J7FZI^>@R0Oii1j!;ag5NDXB6DPcE?QQ8dnU#BVAfkSt8U|_&= zd&GM5dpI0|iEHa;M&6S-jOiFsmO zApdNJwFN;Ko_Yu;EHF42;THh8r^0(H`+^WJ-Zhk~Q^##GQ%q)j4e;2I+@ zkqUu$v5&s3$#LT38;3)|llc5+nyuNA6daD&DF$zfnPw)RQGx=4$eq+~wd!`qz2V`G8B(#aP8+PXLklrRBDG+2vg zlhkVUVvIonBsQTj2_hfYnbx1tJi#X|TxHcn>+Z6dZY<{9aeG#eM7H znJctrudtEhnB*U-8UC?476RgL(X3?bZxV z8k0VK5FZG(=CgW=jm>{&(y>Nw?5bzd&eeM=bXG=*Pmn0!eC8nk-1u~S#ns9jLAn+V zd+T`@wQP%h@++sOem}P8nf&h0lb}XX(${(aj5Ue%`B0LoXk7o~G{jKxQZ?TVE3-di zt#e6|B9$ag`|V^fdTf&Jq<3pthG2J^^km)c3C|667U4cKp|S4jix)59JN~SD0z(3U zw#Z2x2&fMi`orz-so7byypLMJ)OgD9bns9Z(b>JiR_nCn1rsE3@r%P;xRUhL$SEKP zC@og@{+T^)S_wOo9Vf_%3Zt?Jb`QKRjO4}r3A+m1TvYHr9h`oB>r|N?o>k`w7gsX& zra69^2a}1B&`t;}2@-xCwrhMDs)9r;wv{;^>s{OWaA|I9O?@LM_Z_K|i%_=Udc-m< z{C%Ug#sqhixR(VudrKvN|L2EQr^6?gpA>$GW3>$@9Vn&xX0QGG<*!j4{(`oq5avN| z!{xax{k1-=&Xq)Fd0JZDTCLegMbp-;2#xW2M(+a=dsV;W>x+3^7Bf0Jk>zh}7PD?+ zxS0nS@BCPJe(j8KeB;;8r*$fIR+xl4cVfjxN2|z_4}fts*hHRlz$CgeflDI)StobZ z&24mhsqUHja*2@8$*ujq42zkS1C6vgCMRcw!4KNmrZg0!GudC-@m*Z}Yh;ogOi?I# zdHJ6MbF5i>ggWJa{n3a1#l`NU%TM{rl^6QzEtyq+_Rp~t@M->YyBNm5S|JSmtOZS5 zrta0G&kpFcUv68H8`1;a*G-sbrEN`de)A{~YP3v;UwEE;p z&YyF5e0*!%T(=LU0xBBLK8scL>mqG&i(D<><38!@8^J}XS^N4&#iIJ?TRmLo!JUly zGc%dYCe9(to^C|$lv#TAu=^cvN>ofj>_^PMcVPa?D(LN*8I6xq5BRzibXACmg*7+>KAHQx zag57mp51;uBPA$=m9ll1JlL%qS+Lga`@JmIp1H&MnDan9JX}Y8)N39aB*t;=2k^qO z%?*X+W3i*V!`>eaTgr@_`I2~&oD97UE9Kv${w$R{^J#oyuq|2RC`X0;ReR=2SN-b% z^r?rNStF-4mfiEB#anQ(ZPp&S!-HL`cXh3-W_9k8lMfV-JTx~fC!ZM{90bZ52scJ? zeBBSMoA`xGivD=zw2QrYjfyc&j8xlE`@;2YdVc1_-MgPgP2!GxL~VL+MDwjU4o+St zFJbz!no#iXZBvgp?X+L#EtWQ_SK|xta_6fN?q#Jiy_V_2UTj>65ds>q$_o8c{?5(TW_$Aeq)P2G4Af^ z@?3Sw;Vb3cav?`S)N5TTgfCu>mg%|Ha1L@mtL(u2 zUbsL6EClEoKK3Fl5gD8^gzC+Hw2YO5gHTRRE?(4@nt_qg%^`jJ@AwC8fBoE{3z7Of ztylK73$Lh(Rtc_??vO@gGiGdEwu(Iz-_VRbG7JrpRkCrDG}b$$8Rz>f<3kkwXCuU; zQ7599IcMxOOt^m-X?Xl~?_G4kb_&WB4*hben%Tv>=bhF{?`%9P__F6>`kfue5GHx` zQS*f4tWDi{LFXF+L%o_AN4j!@3b}vddmpJWkQH8?jo-ad{><~s5o>9i+J;|7=eC$* zP6^Ij@E|Fv-}I0DU-b2Bnnv`*CzJUejhc*m6xr0KMp2HcJyNRycMWa1`tafGjyUJd ztnMpZrNPy%vOK(1zgqdzJDVxboddpGA#gllR(R>srG){dmFU*pbq`T?xd~^PT<+{h z2elgZ0)kn_w#mbI&zG3&%^?L+<%rc+g6mVgW>}d{ZvEY zU{3YgCwfXf26<7@f8(*biF($b$urE9%<@c8m6vZhx}n1jw4b{x)O;)vGRV06z?h;9SiPpT-UvM&WJn4RA705fsm<1-FO{cD zOT${vl$r-h1%LjfA^W}DarWZP$V-&+bH2ntRiGG}uw)2NF`><^4*}0C<_VqB>yrMfSCaz08hT)| z5|NWDgYd1|{;qRQ2eGX2(y97!VEe?2kDsxQ(E5kVD<9w)a)(1Sq%N6bUZc+ z7d!DGhE)8W49_)rK4M$7Dgz_dZn=FPrHBhX=EfUnDS9{TK%O}D;m403Rn*k31NHVg z+u2NwH+l&>$xxi%Wvm5S0^XIg^>4}o4@-u6fw7}S8lI3$RF44 zyt$wa8m9F3?@zi^)(?PiXlBM%lx0fHWXj4CQCr$JmaT;nASGtCGkjJLNGHIF{Rg9HNk z{r1)$jwN?+@}CG^Fe*cb!6C^5&02;e@_B_FM=IU!6qXJ_YlL5pDRMG*8ffQV;$b=478 z4<@3z1tyV~RbMxNv|zN{Q5*G?%v z0h6|GDvXg@Tl2qu&Eyo+eFljLNRsRxV}Vh(299qAyYna@RBMY_9?byb(K{yW_Kx~W zU)t&e0`QqI2hKl#{=5*2mX?-AsCqD@0i9b5!u;*UA+&2ag2=Z?W&-Dn%5nQ$ogEzl z7OkYef0X95cmt~g5pe=vQ03;$Cn}dtpf;C>$ocsALL(y)sf%wSQ-bxCzz^~uCIq2l zyre68FgdfsW9;ngtn+*qV}@MIoV-O34unUnAm)%P8=2TGj)}%CEj>cyiXcQ4PKMG)qV*$^?Q;dc} zpT*XPPf7lk>-}^gvg_}E_Qwq^-eVKEaOTQfE{yrgB&3jC)nMb?M(59pCu8P&YJ zBw>f$(5bK$6F#f5;IMj?`O+qG=&2`!PHR&N5wyaYE#7V>@rj8*RylG1{{3N4pp|a| zx$}&qq$I+-0Ya3Po*p6Uf~3o(+qXez&dJG%{ElJ)x6``swydnjodi-hu>L9>BUGP zU0k=Z;mkLxe43TweJdd>`hwsI5RF}s^OcyHnenU~2q@=N5 zet;N6G*g)cU5_G+0YQOdDM2h_*G!4X(JMHCNM(TbADW8Bo(8W3sn#hJz(+(63$#Pb z;T8?~JKcl7?fmg_eo}B(Yp|7ye2%{6<#)M|fN~aulF8B@@9OGO6p|?J%ua_e2Lt`T zZtoYpFDx*~WeHGfZ$wVR1gr_6$;BpAaCxc@;C!__(;nH?RQq_$eWM~}kf1<;UbTUG zb_UdW@?hbyalLqEzd8~SaVTODV>MnSEnyVVk}M)3=Rqo_0NeCzjtV80>CF3^aTJB{+{DwAWOaz41nj`FT zh37h(e=Ggrd{^=_%l6mzAz438&_P(Xwms^|ZF_DxJ4+U#2*P;|3<~0u z*8_1stXvxe@Mw<-FJ*%-3dtI5YC^)oXX)sOLCgUS_D3@4{?egRW^Zfk1dtTT*`5<2 zg0GE@YdShqAnEJR9~zp6G?XOmafV!G&0lC327YHiF5k?N>iZOYJh4NNhL$!ASm*bF z1_@l6p(WY8L%g@S+g4Uq!GLGZ42@(cjDea49s+?}IIIJr!2-8it}$UmC_oUgA!~)e zB@#k%MES?WPyjug0Tk_`?yD1#dZvCldnq7pFkc?b0}ZSg5J~Y+moHyNRQmV9004u4 zrBlN3!JmVpqsb9?Vx8he0PnZ;@EKUtRtA)}y*e3 zRW3a~cc1OK3XEo>aR>AA2yOT}TTc#R7}bAfjbSas?0>xHna;7P&6nfg;J7FuaRFk+ zH#gufUb}UR*sAjlj4t`&1EWE>gTS)h3{{YsXKsDHX^TO4s*rsVdNO)DbXsY-t9(m7w4 ztW-EnpFnWp@^X%yBS;GXh7SMu0bFCU+aK?aWMyPrMg-It-2NoUWD7ri>Nkk4+J;!} zkcN+fcrW1cQ$<2T!fbbKdKW@etatz7rOycZ0@;)2dJB!Vwl*F>pxPhHKgesBnI`7u z=VuYe01^B>qb1#P6TMVRA=)Tr`6wC_&$JdF09E)XKqI&1JX`KMIXN}VM$1RRkR#Gw zXAi3Dr?8u-NS!UIS-~RXH(@(~iwMs!G^9t%g#$qsbe0RHCXCR3@Pwp=@LD19}g716DgFRtPa>v4qg^7UfYRWRv+S_8tc{n-Xy zUS4f|{SUEBI*5`A@RpaC7wzUy()I8B_yY3i3n+kaqLv7oxyo10ZpLPV7Fol%9##DPUAPZm7s1 zl1}sK&q2tl+%tMj=+BYjdBU-F>$OYfJ1Npuyn47869IeK9Bjc_z$fM3{CkF(*y0O^R{SQ_?qu~xSZ>JZW1K5NMD3s4`So#$6FuVC!JfL)?34w-m$tXJ&no3; z{*DB2NEryY0*YM`28aIFsO#YUeLH!o0TpWOO+d0ncv&6E(lk&@py*Tw@{B6aef|0s zLFp6T%e-?wcL&7uhD?lcOJ;d)gZEZ%{d-2Megy!<3}AY@3+d5?Hht_6P*0$gBI$y_ z{v+r_iJ>gog$E_PTGiGWH8S>bJIo0v9W=15<-ULD=&d}tV5r=eQQBt=I33DhV1^-2 z0?_~TP`kRj%)X$^OL?>V-g0i~L~P-acx}4lX6FZCXB2`d>TpLs@Wc#ignFD`URI_A zCwk`mXZulN&Z9{aTsB;1?|(j&mtLe_W@qqT&e2G$QE$%F=jZ&q#n%^?hl?#qV8;dg zu#Y``eDFcWlI;BV=gnNxdL}3r8ZDw_2_Ui{a%O~Ce}-8u0uP_S44B)GM$3ofzk70y z4G!uiR3eTAm=>P zNj4nnws%!kbjY3}k8FV$It7m#2mtx~?P#!h>nDMMe->G z`P|J$C`|S8jT(ncF_94wq)5JW^6=2hDUp8QqS(;ZM#!O&)Bq2TFayT{f$3X7nsQ53W0e%8lV_>`;MfbOFkF+Ij zJoz|y&N}ijyqFv|u@feZ`SZ@jZ*OvdhWsPUOw`rY6Sv?oDb3Acl&6JJ$kRvBNH z*Kd1+n5b28Y2Rr#R53yS- z+f8(fxzG7d{^uB*3PzXC-5;-V(=Rl`t2^8tbsx>n!9ySHI)jjV1|9>^2z@TYyRvsq z*}gAPs-iGswEf4_EJg-?!INDY8XNH-QwLmUvnhXF0q2BL;DW5T2m=FynWbgMy0F2; zWYOLr)Utk`G*)RcLXOh$;X^HxI(K*XL48#t9Wp1VcA;I72HOVD)u5AqDcT$M-)Bkp zSlRs1(|-5Jrs^jJGjlYrVHtu{o>B86&jk6qHCWm_Fo4>DCn-S#VGSMy!OF`^29+}M z*r8X4g-TMk?@7)M7G-*DM%ER%dkeq6%?X$$CN(vB2qEf7>0e9+<5oOW6&|M0)(ENSjFbNV-SSAF2&dp6jS`xGAGq?jES5bb8S=m$* zE$zeqlm8*K3cHk7>ANQ+W;g6lE`RWSLCsoy>(A+b7eHUSHf#z;BBWFA_diPwZbsGh zlt*Q@2UKLg`3YzrG=MG8P%`Y_)78T_8lPJL8MY=-sudA=G|D{ry*LtHx|7j7g! z&@Fe7(J$RmDLE`B=jI>Kzd$+j4xVCTsby0@;E6`p{V8jv@vpl|>YoWfnK<`JX zM!`>h<<8y^6VS&4q2Xl$OcLny7#WEBL8*@bbuhIsAefhbke*HOv#pW;UtL!M&1KrYf5t>AD%B`^nxu`IEZL1LMYND)mqv_z-x4j73`W+7 z$Pz*evJ+WKcG-8b?;%q7UytgX?>p!FpEJjtBlYvX@AKZzeJ%I(+(L*&*Y&Svm0%r3 z?Z+v#>Lw^0zk!n`>lb|=ZK7(Dnw!i2vz7fudhNy-L?I!*9)f%;6S2j`m zL(U76q&?h$VaE~{i@c)s2Pg!i<>iTy_yXB zS3g&a@!UJMx@y7j=eq>X5F^f>T_1B4Oqz9jIrEHLeIW`-6Cj3t(9#Z7wKNA5lxo&NtMf= zhe}pICaw0L=}tJ@{v0-CWKQ)uckeP!)?GezLSCfKgWbfiydzZesm+s%SW4&^#wjI( z(dA*SM}-CrjgyNbuFv$zCSOXUk?KtO1S<~Z^@C$qpI`f8O<*c;jpI;+L#z|8R+c-0 zo5*cNZyF@d%{F2it4TeleoS<*ti!axYs|*ad*=~73fwcqCm0(WOPG&(6T>7>PJpy(hR>aw6FBZzQp|0@=1GZD?Ei|vDpvTlBQ(jMc76Jsl}TreY1}W zh3j~Ecl3jbK-z`7Mv5Fdvlv6yv8KblU;Auh8~n`=)*4iehqBnDg>kR=IKS+Yw7%QX zkNl@nj+JTJy!j?g;&{jY8|(UQdAYZ*?4^KrJZ+e~hMzc=A=(J!igsrAR5{&-62 zf8O|+)iWxh^=73-^iu z>EZ_uZj_2Rb`9m7a3};HVAD9+KA&AewLEF14QRTRgJZMQxFAz@hwS{_E!kBA1v#p! zt7Lc*c}YAI)|-CqH1bF)$bG zECGoet@d;V0}p$k_#qw-i31_Yig_sIEm>B3bljHhOuO=SQO;^;+#}m?z!`}@k@bY> z2CBQ-eOwD!ujoKa5wlqR#XI*#xBmRiJU4Ur1_o~D*?!Nte_*uc{d<@auHOYoMuJiV zY0pJie;EsRo9-z>3>7Vf#I|6e8MVJkc{d+E`fsM)&lMA9X!iua)vg0U8?YT<=0F+* zmx$fy?_-P(7@U`mma?=wg87F&LPBJW@Ss|fcJ!?X@b1behHw+}a(7W(Nr&MC%c ziHZIN2h!2d-)Fgo37D1~yMxlw(nxsYsfwxD%WLgNZD-!TZsTt~9IK18=G_Hm&)NOo zYwL=ywc~iFKA7}qeC!xJ5Tvk_tF^rJuT7G-^|8_c1_~%Gd5kxwYUkboQmsy2suE5; z{PXvzKaN@LD;~n4E8X{38@`s;Hddh5AuFV#z?B6X_HcV9A2M&q?g`i~ov11uQ^$!J zbOibwcbw)V=oES$MpPs>Bn~gV3!Y6rlFDQzBWrw_@jkM?GG4{5foHAUTAd9 z*48%P3NHgeFyUFdBW1SjE7_tD$4El=2#x1aR3nsXgt^Y%G!gAQAJQNJdQI@BivMA0qc z!Bd4^Z|_hQ%33c{qxodE<2>*%W-*gpBHowZx7ZYX}yIhbY=z_NaO>@e`Qt-fPpX?h(FwE+EezA+u}6DnLh}g-v7jhMd&gFP0ZQO z8+fILUC2!ut0-`q=YRi;z>RaD|-InP!8iR zl^PS&wU+1l)KKA?-#VEqU@`8!Y%5*?g_8SAs9kxu$mTQ?;Z|808BPfa_RSm;G9X`% z0AI<`e<&?2O_<<1B;Y4-6zdg5pl48|vx`xP71a{aAR^EV8h|ne7sd*xN>g4St4GGr%0W-HR10gfjqEoM% zo0-63a&t6mF*gCaau5Lnq~O`7jhGSt*L6u0!LG=63l*|p2MnG@bkZpwyMc-zp2LSd zpjp_;UafZWxO0aKayI_D#T-XN%ToBkn&2{sU1Y2st=z~vqfX5r`tJK%d_uxKTQkPT zp{A0AN@P|N9*}T5lqfVFMCP9CF5C>1Ig%&SE}Q*8qz2C`c1ql6cv~j-mvAy0UC$0FKj=5NlUM>lhLRC0 zSxVmkb5EW;`R_6%KSdyh%wu9uCy)Pk=jhe&Rss2A&1T!NA<3w#?}UKm9~9()5M45t z>lb9BBK$gq&R?bT!_1O|uc5#}D;pvN;T`smjAVdTaB6o_oe=@A5P*vs8nz)JGVU}YntB)4 z_h+JN9~LdRo}&c!EOfbSHa0fC>+OvY;}d&&@9iHtn4}VzrX{g7ct%0tW?I@Y655J* zzsg6F9HdO3t2v#dJDK(BHGDB!ckI~fl-vAF*P_W$WyqNBi0Evnuuc5j0wStN-ei2d zoY5uzK))uc)Qk*SdHFX;=mePt-Ms{wPbU}eJvza##)#?^v}|=A_uq?3%m3?m z`v{i9nS01!h8Ih(HtNrpg%+Cz8Uh(CO{A;OSyVVqOg(`b*aPHD5;_N~BTRCY@{rlZ zmpA>(_6_TDY)81vn1tWRPMZ5Gver(C2{r2TTHgvEwPuP4QHxW!nrl4Yo|6`_Vqv)O z``JX*mTa4SkuH!FL*qwoKAxqfO5J@1gU1G-A|SJT6Fdu|QwrHz<4+}x_XDwJkoUL7g!jgrEs5`Ve~ zFWx4RA0Ly^nf-5AtglLE$4r}829ucD3r3;ORD#;1X+*bG_-%l%)`;J6BrYU&V(DQo zmqX^;y}ZS$p4o57=Pkh5;_bZ=I&<6?*`dFThfOo-zrRP5Dz$Be<&gEUCsN$8St&eo z!%3+N&iK%UoLksl1Bf71$ z#>F-@mNeAYZ`r!Fu5aQzUhb1NdY^BZX&9e6L2&)8uee4Q^aN@5D8uags@5%cui-nz zp{7xbC$uy)ZMM|u^GllB*5hC7tBV(Rq3 zbrbmn*^B-mA^Xg_K~fsRynwRK#mlSQR&agUnS=@>RPr^J^OYe=1 zyN3L2f*yd<2+l@|ICa95G8{2ScsOfw%C)t$NMZ*}5(<+uKM|8%XD8B!>q9&#t2Vdx zadRu^YH%g#sy<1jz6N3+8BDq3->@&qLBOK$Tl~pSW4=Om z?1s(Gz$b?#h2%}vpZ++>i+2=aLG)Rk+IS@v4z1QKHa+ z2o#MA)R!F`0F2PE+yIh$j5ef;H9o5$qgLF!ebP$P6K@J=hVVEm^_N%PZLqNi*pKRx zEIX^M?Sl|?P82yvyl7`-5kpA`G^htevzVNmgoyYCo%{<#DL~aC*`j>;bBwA7c93$| znd{IG9T(&8563Uwhg4V$CKoag#T|qe1AuWr>OG_gP9yBO2Za)5HBU&^Nl8hhERz&y zY`XW=3Q+)e{&8h}+bgq!Rea>WL5GD9{=#ld4GoDAKQnvy}eUj z-lQHPzz~T025=?JhW8|ok}Wb=jVR*ljW>0UkpF+*Bg3|(b#HT6&V1T6F?#9m_@$k- z9$nTyC>uEk=Z&7cbHN*b@FR*1$x2!uk4UGN8$6IyYd=`>BAd^1Q z#c^jtn4hlKw2BTN4c=E(lSkV`p=`<^X9WDDY7`sBA8l(MI%3ffPyY)wwN-ENI)v=f z!NHQpuk&bQ=XrCRsA`T$jBf&UFF;>Q9=9?p_23-}-gk!KCjpVq*!;LgUjkv>tfKat zn0U3M3a>AtxM>Xs+lHH1Sz0Ctg}f~?KgetAuNf&O{F4<>+IF$#{MfPqFIr8ROP6*5 zEzs+vkgXGV<^(($fG79x^1t=nOh-pD6bW@sBwXTHs7yK+cU~VcJcMN-Pz}-Rl!RPy zEKXn2jr=_nz6WM^iMwQd_tSk3{b-C1`KzUy@FI87!uM?P%KP?b?EY z81DX^-D1JYYT@}0w#mxBLGz=sP$Lzub*u?Lvnj|LV1*JmA;Bw``$~tg{d^XkC9=vE z{-T|#v{`TcR}kO{8{$q9M@Lq&mR99||Eyg^7m3Ly6M2+`A>~5L-kTqlnS7Y)YW;P9 zQgFo(9xfxs@+{AGBP@|zIw!7S=fL+B6{kNP{jd6zY3O!F>*L&S*$o4%J?P)()f&0v zo&T%)-0r+Bw)N-34>JtPPf$IO3_T7?gC#6HCeQNkFzH@9=j>W~ZwKj6yPSsDV#=lv z2oA-Llp#~oLukstGFU>)f>E^xaV#=u-hLJ=XjQ2Do_O~Wbyb!s9Tw!WFiC=gy8@Ef zL~JQ%hYWmud<6c^>kzB-Z9SUV6r}mo`UzU(ek8M_V{q*E5o)=BJ+g)0x9MyN_?G7u z-4euVb&A4SMXv_|<8^ zY88Ju9JKEuidOw5v|dqet1CoXL4)NDv03xmPMG5yVa5&kz`?@uG}Av0JTUxRgo7pd zR(Lx@1^g0uXOPT{Z&SncCIi1Yl$**hdGl*@nvUn`FW?8 zSo()vo%cpE>HWQm(;yENe=7y@*&`_U8(?Gsznp_?d~Q`sklveR0O)^+5d;i0&w&H? zuTwpP8HF5X(fh`ezG;8b5Z*ANYvR$~fi%$%S#U?w@16i{lU?~6gA_dQ=fo67Q!@r{ zAE8x9$~9mIi&zDk7L;TLkePwRogNxHoJVy zvDe2m#pkOL16qAc){zipQJSbexXOTaY)y8O=_iTNfNQ8JEEk9!xh~u0Dq?tOsHmvm zKs=$O0 z@;V>_8ctLAxwgZ#w*~S#6e?JBs`VlsJKqlon1SK!GD2g)txLhi093DT!D~RgGk6Rh zNQ4K5CYtJE=hXFmh4)`(mcRV#J&88NbKIG?EP(?~l5uB|PgDO2E-wY)Z^$`9P(B~& z_=vR?I<+iXOe=hbv*2kJLdTKhY>8`k@$2hXKNL2siWy_{`{$qJAx5TwWU~seSoKy) z5%T;iaOO(mm7n=GTXP~&mD!aYAPG3`H3S|AS)7_@R0iK6UHYik+??&TuM?R-gCrgo zMj47;Md1G9HiMgBq4NY2)gKq4BdxC9V!);tQ^&7yLqtS`3%(ru2`vT97xCzz$T;?T zFij7H=vFlCe+;02ZtH$qYpvr}Yyvw)?UPkCK|#iFcTMNfFtD!2tS~W0EKGJDbKC@< z53K1N5M(3LC$O)aXTX*x245?M0$QOA4jWz2d_>*E0U<(Td4URh$!^3h?o5a@bd&Y6 zzWaxBN~St^<2DV~sdv*CP4iNCy6mSZ$aAOF7m{$mIfx4!sgsyHYkUyakioW11 z5_gDUp!Pm!UZR$glcPb<8d^OnK0ZE*duC>4y7q!vdV=yfakNyjcwrF>|3zK*eyr+& zqp)cbS`#eQ`8UC$d=q9DRCe+kZGrW6&vN_w_fK^g+OBD7X%VaVILskfCUW4mDn*`w zH*%iG5_+BNl+HT?SJD|70wQqNr$>wGSJMQTR zf2>0#GJF&g_vs3_h4sdZU6)bMu{)C!U?{J_=dk$LSz3~$J)%dBWJs>e_<{Qq0J%iJ za-S6kXW$|5Gb_aeeFOL;(;lyZ-`DsMy}lAJasq-=0=-QK~>kU zcdMV)UC8qvvVbQNv=2;v!=2@|P9twxTX#Wd#St;GXi&gQ(Hq)Lb&0>@E>&T~d{rN2dp*cD?F^;znpGgyQ@4QE?;+`ReAm8(~A!(VmXYXxG% zj7!48^=Fe~kC$y=CCB*>=qO@*_lrCONv4(WeBtlVvdBWPDLOilmK-OB;-=K{p!$%L zGSt<1Qo`u}YQ&6*oC6Ir`w*lfZ0daq57T|S%>whW$aib4wZ%Vp2(s3HBB_?|Cx?+! h2!4 + =head1 LICENSE MIT LICENSE @@ -138,6 +179,7 @@ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + =head1 MAGIC MARKERS #%# family=manual @@ -245,7 +287,7 @@ function config() { echo "graph_args --base 1000 -l 0" echo "graph_vlabel ${vlabel}" echo "graph_category other" - echo "graph_info Lists number of matching lines found in various logfiles associated with each service" + echo "graph_info Lists number of matching lines found in various logfiles associated with each service. Extinfo displays currently affected logs." local var_prefix while read -u 3 -r svc; do @@ -266,7 +308,7 @@ function fetch() { local curstate="$(cat "$MUNIN_STATEFILE")" local nextstate=() - local n svcnm varnm service svc svc_counter logbinding logfile lognm logmatch prvlines curlines matches + local n svcnm varnm service svc svc_counter logbinding logfile lognm logmatch prvlines curlines matches extinfo_var # Set service counters to 0 and set any logbindings that aren't yet set while read -u 3 -r svc; do @@ -306,17 +348,13 @@ function fetch() { svcnm="$(echo "$service" | sed -r 's/^[^a-zA-Z]+//g' | sed -r 's/[^a-zA-Z0-9]+/_/g')" lognm="$(echo "$logfile" | sed -r 's/^[^a-zA-Z]+//g' | sed -r 's/[^a-zA-Z0-9]+/_/g')" - # Get previous line count to determine whether or not the file may have been rotated + # Get previous line count to determine whether or not the file may have been rotated (defaulting to 0) prvlines="$(echo "$curstate" | grep "^${lognm}_lines=" | cut -f 2 -d "=")" - if [ -z "$prvlines" ]; then - prvlines=0 - fi + prvlines="${prvlines:-0}" - # Get the current number of lines in the file + # Get the current number of lines in the file (defaulting to 0 on error) curlines="$(wc -l < "$logfile")" - if ! [ "$curlines" -eq "$curlines" ] &>/dev/null; then - curlines=0 - fi + curlines="${curlines:-0}" # If the current line count is less than the previous line count, we've probably rotated. # Reset to 0. @@ -330,10 +368,17 @@ function fetch() { logmatch="${LOGFILEMAP[$n]}_regex" matches="$(tail -n +"$prvlines" "$logfile" | grep -Ec "${!logmatch}" || true)" - # Aggregate and add to the correct service counter - svc_counter="${svcnm}_total" - !((matches+=${!svc_counter})) - typeset "$svc_counter=$matches" + # If there were matches, aggregate them and add this log to the extinfo for the service + if [ "$matches" -gt 0 ]; then + # Aggregate and add to the correct service counter + svc_counter="${svcnm}_total" + !((matches+=${!svc_counter})) + typeset "$svc_counter=$matches" + + # Add this log to extinfo for service + extinfo_var="${svcnm}_extinfo" + typeset "$extinfo_var=${!extinfo_var}$logfile, " + fi # Push onto next state nextstate+=("${lognm}_lines=$curlines") @@ -348,7 +393,9 @@ function fetch() { while read -u 3 -r svc; do svcnm="$(echo "$svc" | sed -r 's/^[^a-zA-Z]+//g' | sed -r 's/[^a-zA-Z0-9]+/_/g')" svc_counter="${svcnm}_total" + extinfo_var="${svcnm}_extinfo" echo "${svcnm}.value ${!svc_counter}" + echo "${svcnm}.extinfo ${!extinfo_var}" done 3< <(IFS=$'\n'; echo "${services[*]}") return 0 From c3305389daebe5416064f44db5cd40620d6058f5 Mon Sep 17 00:00:00 2001 From: Kael Shipman Date: Sun, 18 Nov 2018 12:49:40 -0600 Subject: [PATCH 2/5] Added loggrepx_ example graphs --- plugins/logs/example-graphs/loggrepx_-day.png | Bin 0 -> 21749 bytes plugins/logs/example-graphs/loggrepx_-week.png | Bin 0 -> 23896 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 plugins/logs/example-graphs/loggrepx_-day.png create mode 100644 plugins/logs/example-graphs/loggrepx_-week.png diff --git a/plugins/logs/example-graphs/loggrepx_-day.png b/plugins/logs/example-graphs/loggrepx_-day.png new file mode 100644 index 0000000000000000000000000000000000000000..20f1228fed2e8ab379c72c576d6831b7251b8b71 GIT binary patch literal 21749 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
i1gld>uFhw9Z_`e`{d;&Li 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 literal 0 HcmV?d00001 From cc6600b48257a3ad15f563af1f115db7c74f9015 Mon Sep 17 00:00:00 2001 From: Kael Shipman Date: Sun, 18 Nov 2018 16:49:16 -0600 Subject: [PATCH 3/5] Addressed PR comments --- plugins/logs/service_events | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/plugins/logs/service_events b/plugins/logs/service_events index a82044dc..a4dbba76 100755 --- a/plugins/logs/service_events +++ b/plugins/logs/service_events @@ -8,7 +8,7 @@ set -e service_events - Tracks the number of significant event occurrences per service -This plugin is a riff on the loggrep family (\`loggrep\` and my own \`loggrepx_\`). +This plugin is a riff on the loggrep family (C and my own C). However, rather than focusing on single log files, it focuses on providing insight into all "significant events" happening for a given service, which may be found across several log files. @@ -78,15 +78,16 @@ Available config options include the following: For plugin-specific options, the following rules apply: -* is any arbitrary string. It just has to match between _logfiles - and _regex. Common values are "apache", "nginx", "apt", "syslog", etc. +* C<< >> is any arbitrary string. It just has to match between + C<< _logfiles >> and C<< _regex >>. Common values are "apache", + "nginx", "apt", "syslog", etc. * is a string derived by passing the service name through a filter that removes non-alphabet characters from the beginning and replaces all non- - alpha-numeric characters with underscore (\`_\`). -* logfiles are bound to services by matching _logbinding on the full - logfile path. For example, specifying my_site_logbinding=my-site would bind - both /var/log/my-site/errors.log and /srv/www/my-site/logs/app.log to the - defined my-site service. + alpha-numeric characters with underscore (C<_>). +* logfiles are bound to services by matching C<< _logbinding >> on the + full logfile path. For example, specifying C would + bind both F and F + to the defined C service. =head2 SERVICE AUTOCONF @@ -100,7 +101,7 @@ will be something like /srv/*/*, which would match all children in /srv/www/ and /srv/local/. If you choose not to use the autoconf feature, you MUST specify services as a -space-separated list of service names in the \`services\` variable. +space-separated list of service names in the C variable. =head2 EXAMPLE CONFIGS @@ -197,9 +198,9 @@ while read -u 3 -r v; do n=0 while [ $n -lt "${#reqvars[@]}" ]; do if echo "$v" | grep -Eq "${reqvars[$n]}$"; then - !((setvars|=$(( 2 ** $n )) )) + setvars=$((setvars | $(( 2 ** $n )) )) fi - !((n++)) + n=$((n+1)) done done 3< <(echo "$vars") @@ -208,8 +209,8 @@ done 3< <(echo "$vars") n=0 allvars=0 while [ $n -lt "${#reqvars[@]}" ]; do - !((allvars+=$(( 2 ** $n )))) - !((n++)) + allvars=$(( allvars + $(( 2 ** $n )) )) + n=$((n+1)) done # And scream if something's not set @@ -223,7 +224,7 @@ if ! [ "$setvars" -eq "$allvars" ]; then >&2 echo " *${reqvars[$n]}" fi i=$((i<<1)) - !((n++)) + n=$((n+1)) done >&2 echo >&2 echo "Please read the docs." @@ -308,7 +309,7 @@ function fetch() { local curstate="$(cat "$MUNIN_STATEFILE")" local nextstate=() - local n svcnm varnm service svc svc_counter logbinding logfile lognm logmatch prvlines curlines matches extinfo_var + local n svcnm varnm service svc svc_counter_var logbinding logfile lognm logmatch prvlines curlines matches extinfo_var # Set service counters to 0 and set any logbindings that aren't yet set while read -u 3 -r svc; do @@ -354,7 +355,6 @@ function fetch() { # Get the current number of lines in the file (defaulting to 0 on error) curlines="$(wc -l < "$logfile")" - curlines="${curlines:-0}" # If the current line count is less than the previous line count, we've probably rotated. # Reset to 0. @@ -371,9 +371,9 @@ function fetch() { # If there were matches, aggregate them and add this log to the extinfo for the service if [ "$matches" -gt 0 ]; then # Aggregate and add to the correct service counter - svc_counter="${svcnm}_total" - !((matches+=${!svc_counter})) - typeset "$svc_counter=$matches" + svc_counter_var="${svcnm}_total" + matches=$(($matches + ${!svc_counter_var})) + typeset "$svc_counter_var=$matches" # Add this log to extinfo for service extinfo_var="${svcnm}_extinfo" @@ -383,7 +383,7 @@ function fetch() { # Push onto next state nextstate+=("${lognm}_lines=$curlines") - !((n++)) + n=$((n+1)) done 3< <(echo "$LOGFILES") # Write state to munin statefile @@ -392,9 +392,9 @@ function fetch() { # Now echo values while read -u 3 -r svc; do svcnm="$(echo "$svc" | sed -r 's/^[^a-zA-Z]+//g' | sed -r 's/[^a-zA-Z0-9]+/_/g')" - svc_counter="${svcnm}_total" + svc_counter_var="${svcnm}_total" extinfo_var="${svcnm}_extinfo" - echo "${svcnm}.value ${!svc_counter}" + echo "${svcnm}.value ${!svc_counter_var}" echo "${svcnm}.extinfo ${!extinfo_var}" done 3< <(IFS=$'\n'; echo "${services[*]}") From 00737cf2fc2320675752502116a15eec6e3419f0 Mon Sep 17 00:00:00 2001 From: Kael Shipman Date: Sun, 18 Nov 2018 17:24:42 -0600 Subject: [PATCH 4/5] More perldoc compatibility --- plugins/logs/loggrepx_ | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/logs/loggrepx_ b/plugins/logs/loggrepx_ index e1fa38c3..69c6ab4d 100755 --- a/plugins/logs/loggrepx_ +++ b/plugins/logs/loggrepx_ @@ -43,10 +43,10 @@ Available config options include the following: NOTE: for any variable with [field] in it, [field] is derived from the full logfile path by simply removing the preceding slash and replacing all non-alphanumerics with underscores. For example, the "warning" field -for the logfile \`/var/log/nginx/errors.log\` would be -\`var_log_nginx_errors_log_warning\`. +for the logfile F would be +F. -One good way to get these names is to run \`munin-run [plugin-name]\` +One good way to get these names is to run C after you've configured the required variables and then just copy/paste the names from the output. From 1d418a1e3a12e103ca9d455e54551caf1ace6cd8 Mon Sep 17 00:00:00 2001 From: Kael Shipman Date: Sun, 18 Nov 2018 18:08:44 -0600 Subject: [PATCH 5/5] Added check for logfile existence at top of loop --- plugins/logs/service_events | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/logs/service_events b/plugins/logs/service_events index a4dbba76..3f08b88a 100755 --- a/plugins/logs/service_events +++ b/plugins/logs/service_events @@ -329,6 +329,13 @@ function fetch() { continue fi + # Make sure the logfile exists + if [ ! -e "$logfile" ]; then + >&2 echo "Logfile '$logfile' doesn't exist. Skipping." + n=$((n+1)) + continue + fi + # Find which service this logfile is associated with service= while read -u 4 -r svc; do