From f0fcfdccb834d80e91505fcd2f954e4240be2a10 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Wed, 2 Jun 2021 08:12:14 +1000 Subject: [PATCH] Disable theming when console output is redirected (#40) * README updates * Disable theming when console output is redirected --- README.md | 23 +++++++++++---- assets/screenshot.png | Bin 0 -> 58001 bytes .../Templates/ExpressionTemplate.cs | 27 +++++++++++++++--- .../TemplateParserTests.cs | 2 +- 4 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 assets/screenshot.png diff --git a/README.md b/README.md index b7996d8..40e31a4 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ _Serilog.Expressions_ adds a number of expression-based overloads and helper met ## Formatting with `ExpressionTemplate` _Serilog.Expressions_ includes the `ExpressionTemplate` class for text formatting. `ExpressionTemplate` implements `ITextFormatter`, so -it works with any text-based Serilog sink: +it works with any text-based Serilog sink, including `Console`, `File`, `Debug`, and `Email`: ```csharp // using Serilog.Templates; @@ -96,7 +96,19 @@ Log.Logger = new LoggerConfiguration() // [21:21:40 INF (Sample.Program)] Cart contains ["Tea","Coffee"] (first item is Tea) ``` -Note the use of `{Cart[0]}`: "holes" in expression templates can include any valid expression over properties from the event. +Templates are based on .NET format strings, and support standard padding, alignment, and format specifiers. + +Along with standard properties for the event timestamp (`@t`), level (`@l`) and so on, "holes" in expression templates can include complex +expressions over the first-class properties of the event, like `{SourceContex}` and `{Cart[0]}` in the example.. + +Templates support customizable color themes when used with the `Console` sink: + +```csharp + .WriteTo.Console(new ExpressionTemplate( + "[{@t:HH:mm:ss} {@l:u3}] {@m}\n{@x}", theme: TemplateTheme.Code)) +``` + +![Screenshot showing colored terminal output](https://raw.githubusercontent.com/serilog/serilog-expressions/dev/assets/screenshot.png) Newline-delimited JSON (for example, replicating the [CLEF format](https://github.com/serilog/serilog-formatting-compact)) can be generated using object literals: @@ -112,7 +124,7 @@ using object literals: The following properties are available in expressions: - * **All first-class properties of the event** — no special syntax: `SourceContext` and `Cart` are used in the formatting examples above + * **All first-class properties of the event** - no special syntax: `SourceContext` and `Cart` are used in the formatting examples above * `@t` - the event's timestamp, as a `DateTimeOffset` * `@m` - the rendered message * `@mt` - the raw message template @@ -339,8 +351,9 @@ convert the result to plain-old-.NET-types like `string`, `bool`, `DictionaryNglG2bCXe!JTwB5lVs>7rzRr;l5@_I zLz8o8=)H`C-|SZXcE8&FZ`Hr6X6$~u-}l~o?g`I%&bj!@$w2SidUOj12j`B2xTpdS z&W$%XIG334O|`;bc{w*xQx`-y+bpTl;< zg~f*PO3|^xLZjz)IPwnpVG9Z62jedE?WdjG^y!(I&F7Q)`*qjcWEp$q;*%(GDA~n( zDoDuO#d{oie;VA24}Ov~+!ybKl%BL)y7-VxD1m?R{%*Lq&Bgl1hGPwDs2nOEm&xLc+59R)uAXFi!% z1;WVAiby^-{JwX3mcM1Xyjz`6oT~kgi>u$P=jplm^mkBs$$CF7F5=*Cht6%rq~%}R z9=l~$TYdfa7oCOl-0jIss=6m@4~N}jf3NaGQLC)Yu=~kPv)Yc|KmMi$=3rFu{W#|^ z*u3`lZ@(wK39S$45Nd?TDQ&He6d@Qs9$h8Y_}35WbVBQo*Os$miILxaAb#KY%^Exp zqViE9jjgjRtBh-6nyD*E1vd0s5?eHpUIDHH$huIF!+e?NpP zm#szjI(W*mnS_r>)#i7+m4Au1%Q&c?2x z07(UMy71}e@!Ynr1%FFNj(Al9U*2GjTS>A$V4}$Koyp@1SqO!1hR)rEpdPmmzY6`W zSxVd+68KUf(1cka28f*O#jkNP3C}{wAYn-gkG}uqee(48b>$Qwx;I*x!=<9SWsr-@ za`Ud8ElJeWDBTpw-;>F_#nYlo%hZ0=hnQjIaiI3Oo&NojBW_J}9M{uG4!F32qx|G` z8e{fU1Xws?Dxkr*GmhKs*e+?TC5%4unc5TNZE~LCvY5{US&A9&`_dN^Tr4y-HP=Q< z_JGkR$6@yP+%bp2f@h9%&G(M3AR^Bl01nQ#oAbMK`S-)uDs&lrl2vllNwnf+H8-JXK=b#g8%{E1jsY537Z3tI7)gn$?HTN0kE#2KfOik2Baz`ZHY) z);nU@`wVe#5G+S7^d5Vi+>2ydzg8>s4zYcbx)^6Gv)CDbB*TdFb>VZZvsQ)O`~J)j z=3mmLx~d%UXQo!ALxxPe-6fn4F{%1Z@VUcZ`}#`N5cZakkg%-w3QlJ99LrBJ60KCc zUlX~ZGLZUkWiY3Wj||+EEfGeyJtRl+>$|&O5E3?@r*Uw;g3CO=mMtWQplhi!C&$4N zKl(NFr%aPjvOAC1y6@rOuoHXS`DaWeb_qC-{mRk}@YsM_pI=XWjEMP<4Ga1G+g*tM zM{h)F|Nrqw|J4vrfvXfhGd?YiW0H!9W zpG^Bws)+q9jSmpj(=f6`cPG1!L2615r$UG7x7FfEN4UtKT={Kc@st6?#B`O9h)aTt z(@DiTa08h*7lKL3JgZkW+`w3$obd<_ac`6{)*NPJj>w8hd+>}M4oClJl1X$~wHpu4 zcy#*Kv9ss94^)=pa9Z?~Ql|fOdXWcu%Y^c2rv02_`+;D2jiAczX+hDEU_z&$17zc! z?qpAx6I7N=V0&kp`kK=e2^r>WvHB=uFYwpi;^2H}RfrEGGY$-JKV0sg#3ZM9-&yGo zMrxsS*DCIq44BJR%A6kWk+KDu%4JwotC!4YSiD)|DKW{KD$&>Lm(7`(&e^@8+Nh`W|L=3_L|f=W`X}U;2WB6Q09E&)pgKl;`uoPFDuHTyLeEWa*h$ zAeZU^o_;9L;7T_nU6)_Yq15r`Q`IfY1ETTT0qor45*6zo4e`?qXHW6R1Lx&ct1C)k znqGMD;)q7D)EvHo3g5K0|22dX+$4UEOQU#Wvx~lKFh{v5evYA2^S<#@=30h@eVw6) zu?jH9u8KAFhJIv@?H}uAzP!FkijN@E)`JPtR$1*(>lf)NIj`@aOD&bhPCYY~Wcl}$ z-n?o5_VJ26_w7{og7e;paNQ-C}+G zrbl&(0(+#i7Nu^lRFQnBDle~jMb$MWs={7#Vr<}HZ^~pENxuV&0NSQ2Z@uSz3fou` zg*`o20A)B8UAjvBv3;lIYhXuDnj1-UT$j@#*M|$J{rG&dpD?zrDEMn%{iS!}%GEA5 zWi{N66+aFBY9pSNk-wiotC^c@860;sQ(074tW7?|!kpQcr%}zwlB-xs0No0cQhd}% z^BJOCDw4*Z>R2j~!jls_kVo#LqBL=h?+zK497W+CQ>Kvtt|8|hex=w3Gn$-1c2D4| zP=IsB95gtcY2dL?$|~Jk`4X0Y{0gOV}snhx$r7-s7=K*and--{V^QhkuLX zlVXXq&HV(PSnO=pYz8`kTVp&(#PI33L_pCL1$VX6K^B1k3ueDL`g@<4bXV2@d(t|4 zZ6-`ROnol^nhS}Yw!$5(F!BvnFEQZ^LXH($J2oMX^Rwv_T@{$}+@0`8$VZ;uyng!+ zs>&?baCKXuC_nwmlG~;*KXgA=HBTFI{b%;K9Wnzhlk94j1NZp_@dOc*ld-8Yx;jDZ zk!;DYJ^Q2#CP^k}y@1}hrCIW*!en5(UBUIBe)*s@Zg}^oMFiTFz>PMUC|>VQO|SOo z$v2!;UoXgzd`V{9^#C@UZ^$L-K7`OhZE@SjHhH7&xP#)<-@eB>aL;2Z33?*EplhyhMw%N zSypYmF1h`-VXI;%N4JYEyr=whMhM(9?n579QIIq+sU zKCnIr3ry7E+wqCCpQ!En(Vt7=VKFf%oq8rYfK+8c3PMYk+jZ}V&7f_Mivg^kB{xnsWf0*>2F(f< zI2MOmfZ?21vNEpYll`IiN-uB69tl0=qhVYr6y~2Rk605+TPg|kcUI!3>5>=QdzCbW zMwxqI1(+{cSRG~-lrR0bq(s-nhx-se%CpnJ-|n-bo-=TDa}Ha7GZDm)@A8$VHq zLo!4=rpUbMVIf=zI~5)|5YP8FyP}AT!hR`js*5hlJEga4~(@bG5Y?srwG%b8bI^h9RFo2|?yDwLthi~jTp-64Gx?uWYMV!;7M&n}du1Ys-- zPic}}JatTWn7B?Dt9A>PoP3CS#(b8SnW^$dK7O=O_IUd6VYu|?sXfy~fjoKPoT!;E zJ|(%GR+;u%K*Re@DO7oLlWJIWTKetqzgLJ^(9sKEHtT2B?2C*xK11iZArH3Mj!tW_ zC$)%o1r6fy7tBknjy!#njk;qoV@}qzUSx|~Xj$TRPW_;a-N-?Eg|fDFtA^d%Se~*p0WVL zx3KLM7p5NuHOA|rrOOLGM(FHmeKyWjD_UqNJmphz{-*hk_BJ19FIr@N ze;}VjIb^6}1%Y%myqvAIIc|!i$g89h_U0HaEqS~@mtWeUN{w@ab0Av8Q(W9e^p!09 zTb2N2&#+)h^5quoe>9YeP-!ZGtf{l1KNnr2yT)HHk8;>zP#)4DKEN`Y+6f0%?2SK! z^W(y+j(|5DTVa96Tey~rKXBAh)lPPpu#HL7SR8L%YXMO<9jJ`@dmJ=f#*z}cEaMNTT!^q`zE^);Xa{xuC8e9DWst`o*#&X`grEe0z5Q)z zPek|L*kG(M?MalKApT62u| z>zVDo<#^|dFktDgE3|>&K*G5D%BZ?731WUb(7W6S-O$mlO>c~^bu%5}b@xiAo9a^DH!g!evoO25>9>NcP%!apU+l<8ZwK(BQ9 zN0|Gt*9b`i$q26oA_X?WE%q$oM47qTjbgWc+Q3i_;(Unnsk7ZGlXi~#XX4PgtNSH- zNp>K5*X`9{!OB}Q1HIh%Fy|Dm>1msRJdL>NKOB#^sdM3#hgHt@CQWgC_D0xgebUl} znq910L^ZnormE|NbC42`Xa-xr5ED}?R`W&4%7CS#ZXi#=9^-83q3?C4JrI#x*8He0 zOHf4dq2=Rm_n*STFBe#}B7GspgpUgq$Pw?PQ54m!YqnRY-te)K-EzV|G;X`_!c@IV z^)yW&EKXtV07_d6edbN!fN+mb)`10)bLLA-tuL~fWHv>Q9v_`uV=QHI_t=nqLDG+a zS!~@Du2CCh+n{$}Nbe54@_3AfOACbphm$2>s z5u`K_=X9U+gS}=!u*dwE+ zn$Z%{Vy;@Tl*x&hR0qpYXSJ=aJQmYqvTp~|8ci&r+-OgNg~-^j`ANT{ zAkxTll&87j+DtdLW^e0hZJP~ATHizV`wd~Bh6oC^OFs~o5udQPeP1P9Ia71O2eJ2j zr$6{9+zBJY_29DKJyaWE51;-##nhRz*A}>PP?0+A&9uUiNn$%U+@&Fi-QQ#9#U6xF z!aPW9F?MFJkaX0!@3+Phw!G#STNi5AMqI5F0_!B0aOqK1xvFRZ|Bgq4{G_v;R(=)s zD{SyU^FfAmi>+evd!l!|=fd;w?;6q7lOZJwj-4FWsP$+m$dI(J~<&3i964@VR z0U2bla=l0WNH=ZQ`s;goCdxm)kX>?`3xO&=cGf z^c}j%oeC+*&3jsBn1tZCyZuJ69Cs{Jt}6cf7Sp)srJd>9$Hi;puWtl z)~F-q+<(JXILjLwmZbMs$36|Q`K%o!+$3Zy@2!McvPwNJF!O26zABTz5{p| zsG%FYJtu7I;B`r~Fu>@1>VJC#oSw7_TJHTtk_0{`Y@RZovSUc;;?EXhN^hbQTazB{d}>4S zvsR7$xqVA<$2U9lP0-P8)Qu|x$Q-^V5d!}Evx8&O4_ZZPUS361`plFh`bs``BsY*q zuvBJbf#juWtLl}g+^v3~#Qz}N?cVmQgjiMi>EWL^FCOE{MT3kmkm@B_K=|Tk$=xTv zrZ0+EiI^L%#x8n>y~vH4IeWOy_By0Z+3vV~1e2)ATZ=r<5-uVVlMXat|3ZJ?m@6P- zgrU^M zyGCaOtrQ^MY>#)B6*FXrA3R9lvesMfO)G5eP7(=3W__jLcV23KFU7f#Go@X&;Q~Y9 z!C3B;a5g>-DssNf7>;3BYni6#MQ~Zg+Y4%I77yAFsYCY1AGG){%2t7V^m?xNqx@Sq zcf(69CJ-s_HXDd!n>WC6-V*;JEfAXa=oS#o-n@BZJ^AXi45ae-q+-lYUmZOHq4bFP zvn+B&q)d*wy`ITXmU5*<4v)R*K&~nhj_J?SLVd*aBdBZjI}&;JX4TnvQCjF>Thh>9 zC>w0r*8pWy0-1&b_Dl5XEZ77R0`d8j#o1C8ggx4ViX)bW6bD24i$k}GKv({Kag z5eYtlQX0Fd2(gfI~)APalX}F zzw^ir7=YW!{`QcfUiJN7P~^+}jGftn8OA z`>Qi1zkUw>4^d5%;roS!z^9-0|94b^|Egm2|4q;SR}KO7?(mo{#hmU8bm5w2ETvt@ z`m4=_DS|8i*ZSC#cy6AE2Iu$v2&2kh)HqP$SN~JpOkseY8|3<2ASs`lGx&$<2T#2r zB)U5%E-87ufj!%(J=@EB|NcFbdU3bZFSP}~a1H!AjR181>tKp%$E_JCrCYI7B(wAH zGRg1lgXzUs)D&_cj^VbAEm; zlH0tn_35{p6w6M9zOHfs?n&OdtCdyQB^yk_aDVFz0 zyh|?V4Q$0uaNf$Rn@Gg$HF_eRN$R>!g10dp-`d(wN6XP;wZ>;Bd6s4n?Iga!^~`&! zv@{JG8kr`;n{|t}+L}2L!(3&&NwJ)k3C3q;TQiL-Y+=4X{(9J#B!W8-zqC1Buj76+ z4=h7E#*^ituqVGov(=akJ zG70RaDhdjr?0?2wRd^#SD=Q_XDD_=5jg7)>w?_~&O)yajQx(%S|Dbu<b$#Tl`)cf*59wBwMi8zR7S+~&+P67A>7L#vCLW( zyXc{fR>r(H;^N(bw|xmHC&9kOTGl-Ms6EFpHZ0kMCu4DXh!*kn_;MJ^Y~C*dw9lBo zX~;@BL7#2yXd%CU@QFZYgs@tP(O8GRPVY4o*r9BvqSqBaZL~OdRfl$aVZ(yM#XB3( zSe1ef4~O-s?X95-x$on*O^XP~d7QbhQCHWP&2;UT?+$)eNieHS@yS%^uxXqpi9S^_ z;B?X4^J6aK2D&FDBV#fC7FEkV*AJMLvrS(?@wnL7O8qAMo6HqUPgo1K1~n|JLE#nR z;0l<6z09{Vs~C*y%{dHb7&CbEg_21%&~iU(X=yn z*1S&obcU{RIstMuC_lzOyJ^4Xu`IfXhSuF5my^`hWQwie6K$e;^*CQLPi=~Qww^FV#Ff`=f zAJ(ru>af&y-4g54&2Epam06x*k%z8#-YUKAd)TxhOW|Y}&3x#ftUym*j(%uU|Ex&y zyUx_G-6Ew9zqXY^q*m@&pDSE(j><`Fgb<{TBb8`(PM4;|6T6Z5<3`#=bhA}ovo?=S z2CW&eIQy6my>)jbIgw;0otklu+5?0#(r(VCv8f5oz<2A`t@X+c0oyD6&no<%< zf>8WVnG*-6Ow1y*zR>k(`z8?`W?9ywcRs&7Rf?3nTvKYQwbYR7OKnZT`!3G;zrGlD zYE73UfUT-Fk$yj#E|sxkcVC9mwX6?K;a0Qr0X}}^?Q-*VUitLbolE?hFI zvS<&xztl`xq?T-Pyv3wZx|ErH-%I;GC^vO^*v)C29;eNwUW6FYIXZ6O5d=VNns18) zOfQ;ZDXBXa&n@6Il|0q$}?p>62_8VLMz zu*q8l@H1ogZvfW~9Jt4EU!q0zo=R6a(TBT+hK9>GE?f^kLZGE5O)3)b;?HzyFg~Of z`FEsf@j*}kv*}5J0*~ptC$kG&#ZXA_5$eirSFjDxo)W*{KKcHauwNMdZ(0I)SckPy z`;AEuNx_f+w2=w8I=+7WW4hjVuQ&h2Vut{IX$>{&$CGIJaSrx_iaYaNyjrx|H7xNh z`dys9vt6~UpA&&XN#rRij#NCk*oW_rXBOtTTn{&a-h%x|NJyx0-ZQB#Rv>#xH@MGQ z-vIn|Dz&BA!GT9&L~=@@&snK29MdUl(O1}5&VzV{eS6xn4!nMcVXaE9CO6~C6h%)++raF0ASUDOcU@!wuZQ!W;(l(L z2v^uElyMgYdAW-j4Lv>DGs$wQ=C_f3k_IRUPQhQ{etHbNjC9m<-J|V!=l9Cz;hx9l zK>hF}_F&Xv32XGzFj$b|6^ZK!gG(fQoLZ%NXOLz`Y>qvZF`bGoXMSv zYzDB)&HV6)Y;*~)H}$Nk6Z>onF^|oL3<%AFJV&*5HRrz`anwhoh zTz{fjjUASI#Ud{@K$i$KG12_rr>~%54boTUQup1m5&2oix|SSD54WYwU_zbVw2rjM z;_yEQV$4+p{~}M^s7#--BaRh#%PYn|Qn(mfub>flSO%;WEoPzcD{4{lnT8=!UlAt~ zY3P{SVvb-4+6T6cE|iC{Ls>5uYOP|~IU@5WoQxKv-=j2B@GMNO2uwK%MNX_y*Ba_O zgBYbgBh_6=lnerDvFVTu2qC+>cED!=mFy4ED4$K`KVC}7%F3$v84(++At!g2loUzV z)z#U#-ks#d&f3%&&s%$TjLxe$ZhbS`5zE=t>fLNCO+Atz}WRE_oz>Fb|^Y@!6>CK#KccReNIS-0I%-?++Bb znCc&QIW2|EXoh%%QMh)DLmrdTm1I#eG7{A!C9cbQoaWSGrAWs6uV+RSj5dw`A&4-6 z`QVesSaeHG>?RXBXIZjT?}m;ZwoB(7>h)^g4b8^(N6iv4yVVi8p`yW>`|+7S_48?kux<$M{RVrgpx z`_^tC^CFtz_Bv)3c_6UKsl%iX;pDz|6G#?7DS)OYA{O(XX;(Rdj+}q;MS$E%L&+S# za1yn3tcx|pMj$F>c-GW3cT z%5lg>o(6oHxGArqGPu-}qMD;_IL`_~8^CxRzYmr7cgUW)U@Eo z3Bsi2n~E4$+v(@;R8NQ|g&ukY zd`T`aKJjxrR9wtP49zns<-IVMM~qKG$w)Ehm>XneV3gcMt@6;YFwiq*S2rIJ6tp&! zm&h!d^sifDp51b`0cuYB^yxBz$6>t=_IL>7i`B)2WZX8QP+B;pU@kR*2FfB{?HqQd zQ3l>79tGW5zg|z&*zTx?fByX3u=R^%r|s%^x$Rh~Ie^6E0KvwQvG#=9*~7+cP<&faA;f{pY!fJTldxT7zBbq#odvAB(Im}LK1M{ zfE=m-0rt=0H1FS54G#}zw-_%QAJ^1!C?7>x=KVu20X9fctRs#Lh^rO^Z7sVVvENY# zhg})mnRZBd@bsH}QZ@{If%)LA-mHEfVY?{R}10fygz>YklX@r zZ471U0eWg^ZWxpyx?xR-q_1Cpa@HONT?G=_7(hmrOMu)nt#}Rase!7SZMHCj39-Nj zEfL}`KC@l~6dYO;XB$n|tws=5YtD{M$(2n39%_qZq2zbA1Koqll0wDrdY-Ve+k@P8 zJ5ycZeLn{uaM@tzDa~TPfLB7o8Aw61Xtj?<$<<(k*=k_)gRs9Y2Kc7fPs0s3))eYU zH0YY>mfsry5a+34I(Y1>$Tpy3@oeuynU$W5oTDVI&F8?a13lGZK#os@5Leox)7viO zdzI=|C>dxoj0VZJy@xAk=u%TtgW&r%29k6=L+79-dxMpe0imEiK`tsREbQR058-4l z3}X|gvJK;^zb-`>k0a%*dww{!j{w7*4{f;M+ z?{kS+k#qAU=h-06>}AfmrE%Dln}mb}f&pY1jR3x)JvH9`25WNqVk)xm;o)Is!>rrq z(GECFpg&xB58*2rpf46+j_CZftD?Z00$Z_9A|$?l|NMaqS7!@#mzS4qK7d5SWU8hb zE-AYD+gg&<&-Llpfz5oBjhnk%sv|140`%2_JqCExV_4yGE6@q^YHdi}Im);Ai<{UL zbbHt-J<$Y$PbJqNH6m{QN9yFj~_M~oA5emLQe6Oqteyj@=36kp$()T24*dP=tkBnKnh!s>e zqQar|p&=o<6SNzkEz-uOFyKN7h3?#!mcZAQv2yERA6m+E1`akD-r8w&FAXvBd(0=$ zFSOjR`n-Dq(Z+%+&bct~FD+)xpsb$j~H zjTiTeMk2MHv*1rO{^fo?`K8l9ZES4x^pcs&G@F7chvY{zUxD5DwnwXwm)qVvCy0L9OxO=;86}8Jd|2;I3j`Dz@J9f3rMwO*H1{!!U5#P>@*KwW z_^~j@q{Ecv{(6GTdXKjsNzH`Q{)ll{XlSYgF6f{IP07{8o=-9e|FJ+J?}q=93w~9k zTYnv>>iwvvmjaF5^#ClH{Snl64F$+SHgnXij&uYdmYVacnt^#@R*-q=85zjrq3jRT zm9yfZ)So9t3Jn9Xl4f8F0d<;#XHmn^72KTltHBP$3we2tt+M8hj(7pL3II~UL!Pza z{UwZi6G+0cubF0ZIQ4wKYNxYL-akA0nVQt#zwZX zRl-}nni>C3D~X|jT3A>B7YRh{2z=-9qZ{H80BtxAAe2=EQoeru6Sy}3(%YMx<)jdw z%!X4X!hjH2T#`u2TO3+ts`mypv=77|fN-y!W}NM^1i(Xtb1H{ZKU)1BaNY7!Unt!V zg`qVq6)H2LE4QCWKlzs)iHS8>DTk*6WCOa|$3Po=CuC({x(pOtEkK*pgm$pQLX;{9 z>dxCO^vbs{)hkctvZm61ef4=xXuz~5xls!?k%qT^q>50qB)w4ZDDb87N^e>lCHAlh#Ff|y zF0ktV#Bf)n8c}cx;yeN_#={ZAlXc+s=K7C^eCCj`$<$jU_cRf$0XBq?P-$YS;{HGljWbisP;AWXPF5u+^^o{*j zS67vhD(5=+=TKK#{U1xsC;%*$ zZwNK>IIKGE4XC0$3674AHfm0Cfk5Qy+bLM{HC{0ivz)wZ@+{F%(tHe8`n&NqKk4tv z<4;92U62nwY;B|<2V=)w+sLcou!0Nu9wPa-I1|9K`t5e-{NB|2+==C}M=(1!x3oOu zwn=5aN=r*S52Sn!B(=3Cf%~Wdq2d(hl}P<}qqY7Xe%?~$EprxQ=971o0r$j=f*&59 z)bJ}|e)uL%mQzIu`qe-lS}PB!ZahNh$;QGq(409xs)M+O=`=rpp@pRH_V9CWyLA&> zv3jMen^aTW3KkgUejSklUniT%gOe!61_n!>mPP~wBj2qK=JM?|o7>vZQ?<3sUrG#G2n>-))364;wQ*aUZR<<38#R<4ofJs^2As3bZPTGacvRpVmh~FR@p0z z(koefS+JM4j22UE!p9Cz33*e~&I(14>5W9q&!;- zjSgcz_3&TIkrW+gO2b+Js!Ql9LdDjmp{a@B5!<`*GHcklHHfo?PA8SG6ciPKJ#~X3 z6ClCV&I=vSLSp87l0@9xcWpkec5V_n%QvTX;!-#Y#fUrPn-1lgj~2_{QO?um-}@xK z(Ek|DR!9x1TopJdu)PGN9B)WWQnRzO-x~s&@{Qnw!m27h@^CJ9Oc@-~2u@=NGCwZR zesqec(v@H9pkUn`o}xoi`tSALvPlh%p=R2P1i0%ZmV8e1kvrt*r=W|43wIyJ$-=PI zJv%*Fx>Y$ocV}N)vSSRlU@-g^I{NeQO*yWMBZpM&D>y$Qo0l3iC zFnWBMmy7@c2+bh{B=GGwv<>NYlfR1dU%7sJ)1yg;LRvSciibehi4(JSt4Z7KDQqxQ-9eU2utzda@_nGQ0TC3XBIIE6x4F8RGMTQwLsqf zwcmj4nOw(TWeC$(J3kl{f$8g7n~xhL&*!|pNYBT^mu89DcRu&d$&z~#HsFAfIP|f&wDg*y!`mbb29sj} zhDAxsgIaXPdGYavS3^UuM;0ZQl@L_eKRB2YDDa0%SK8rE)9<45&W{yksqD@F6lS3` zBH~L`z|?!&0UvS=LoQgAKEmqqd41cXtQ!`~y2B z;62{$M{}uLZ3htuhA&Ea6Qa|YhroVK35o_Mtvub8?6h1sr9MYX$zmmsa$A#M5`l(v zA7xiEQ`-d|M~*c#zrkx8!G&e z*TL-knz{a7VH%uU+urn0$cvU8Y@r3(UY0~w5ET7BypzufCBwxh18zz^ z|Id%DZ(NU;GmbxgOHEIYAt#@7JJ9NSG+4RpS?Mc!vOm4jZ-x&sbhw|HS)kt(qYV0T zKsIf?(w~)Ay&tnG#lWuWM_sS$?dV6XS?hjk_lfWv@!5l3j(O)l-z~$`UJhat;gIGK z$qzT~Yvkp^J?&MoI?K)Rm#ZwdRyN!ZB_bzMBJQ}D_zw`LSeu>3<}K&yg;9t5byObk zqh3}Xd{GUfaG#$PLk_tgr@4cz#Oe8ZOv4?)q9XuG((Uc-HoTV(_4eb2OH3p4NS8_* zgaEd+pDPCaV$03*qqQEja0mlC`@m}bV+{e&ECB-dvJLG^7(G`K(<~SRngJWe`o6Q-uTvs zAkr~<;S#766gz?Het?^VlvL~seV+i;T+L{ZZsurk`U{?{7J(Ms%=y-TVwWEB5)-l8 z#I2B_>SGgrn}Rrwb8Hb%ZveVjK=YPzL9qk?V3jbIGsFZS8qLZRX{93Gwlub})M{SS zmWT%>%}9r^2P#rFwzjpHZK)9wZu@kUycY> zEWcsvePUm)5m9b#ZeTA;)>Q3l2TDDo22ykUn=^rdmPC#!j6oRCv(uF*IAvylCH*N? zE*%pZ`ot1y0lO<{CdraMLB~Rx>YUbdgt-sZ16-EV)Gt>%w3YNGiI@GQ++@OS(($$Lg7j2 z4r}(H47qubirrXSbeq7azziZc#o4|xx&A0fKk$TWVS)VApbHj_oqS4=l@Z-OaOEJ< zUSmV6Se=9nAzFaoQMW2wi|-Prs$|_&)nYasQt!xNYD2k}d-QdV8&4h?Z{3;?83^Mo zS&NY4yArnedVSbsDTBzHRn_d)oW=kM-0c#iG_eIv2Q@gVTl)J^9|!;7(vE#{w@&$q z`SyyIi1M?OUdxzT7^_ad^>Q~Ni(U02+d?V-6jRrkthf5Y*<)4gcJfZU^W5EyagRd~ zOaeJwXBOf4*@pl#Xjv&j6;&{QE}etwl+U2x zI%QRV2h!IK0M>cF&2-R3b`33*U*tJ<{ipNE8cL+g>MDwN(-L@S$kJfWSf0D`=yDBR z(Ym0+#$+{s3=n)x5KbbVslBvc=}%3iL0?CHew!Nz(l0{;1IPFQzR#v0w$SlFc(ca= z;mZK0TO<^daYSv@+&A{UH2EEh0AOKEBQ2993)5mn$X~uXh$Y=D*5v>LT7BT1MP#6$rhG0lrVGc_=U#D|N7MMNx=ub-cr{&vlp{2J2| zUiXi>6l#_OpgC;;gl#u>HtPwH^Whsn*tO0>-8B=VNYd;lNlvqmRqZ0Yi<)jLNhN!Z zx|i@4o@>7l(V-=JFCQM4o}idlwBSyw~@iKn=PMZ z5e1JD5AXan63wqEg{ol#AyR;RQv!(qfgt8QMO~|=Eljq@ol-P2TU|pNVV8gg!~l@lkG+bClL29j+O(ICh(&I3VabT}=LNxTbzG5--K_Zh0|b1H+r^2BgWz zJ~M@j9Z8{{vZzU~v>#I!??@VN`f^2gV81hhOz@N#V|Bh|*CUM%oYCXGD2)>v%cfcY zsgQGex z!*%vyj&D5E-VM%KzMNC8ih^0s#vVsdGlpl|h3V%+R#>jf#&OA$xW@9S1w$Y2MOFT} z6=sB2tt%~T>7V^>vM#bD`+A6^fj{3P@tUT4K#B>kxOvjSaWZ)*ErN#8Nn&h9a2?=) z+>=#gZT1*Mkas_VPNlJ-ZhzxWyJo?1X(Ve-BCK@jY2c@Z1(Ai|oW2j#;f~G=D*QFc zCA@^0w5`BGT^))eEt?LcR-YqKksgj_lhs}O)aJBp{J0|ryZS8+-y=3Wj@6*VkrBsI zydG)ad{= zg)I8c!^y`fqHTB_ivgT$hT>yAXkp!{SGM?5%=Ju7e z^AHW*gJ*Id7o&28Oq# zX3=b`^N~8tcTD@hLD8;q1vAn=Yl6hHBc0_~C5D@O*a!;D{K-bPW}9TK!=UpF8V7Zt zzSer0UfWM+?43=!m#I|-O57c6Z$O`M9_#a6ANFe~+S2PGMM{H(k3=CMsQd5lV##&l z2xqP>J^hlRuU_R?aMTMxiE?N-1{gl?K1Ib$l2d(x`Z*-r4%^*i3}#}P2>ns8XRd#k zeY)FbNNJ98$0uj1-gsJY^!Z31&Gu8AHUao_#>zgIR^;HiIF;DWkFE36^Wb6lv_x%p z$O(MMma)h%r%c0WH@0+mzi+?O_%hio50D)!pe-h=SvGGHn!VN>7&uObb?PZ{{qF3bMSFMTliKm&cs8VQ0tX&!16s16{t zmEOM1Z2PEIW;LCwRSDW%^Ff33kdB8I%U;`R%RS8pb?pt!QuOrn2g`lX$m$U2>Ft|( zxAb6q5~PxMz857*f~?HsPY<{U_GBv2Z9h7|YwWagy}~p_=h&%7AEauKEUN4Hx9u{W zclMnDBNY#ud_T#cQ=r#)enQlp$hE=m9*+&{hKo8$2)o5Vjay@4A}Po2%QvNq(V892 zmC10;#&|P;$d}o#$lq+oGnj7;FQl!Idj;QS?YiIPn|+uVuibn^wdkLn*0yfJFxwQ| zWqt5buDxC5@G6QHxU|8LlQ__ciLy@#DH=8VoPTTU^6uQvo)G84q9Q{vZu85_Ger2n z#o&V+Xbo?)t7@mK;|FSXAhIK+vFzH$=z6lG{J#9Y5@>A$tjmDBKYmW^vUu)H4!2@N zF5aAqS^1p()JQ0G&=EkBmI)`N+UnLIbFOZz{nPw&7!xMMkbrzNIpQO z%uQ{4Y}!P(32rkbtm%Z%2Rm(T*nHrV9jysw8l7HmwQ3aENi{kZ!WjfPmsym3=SeH$ zCz0;+&`+A)H+c`P$=iEb!3z`hl!*2lGcQo5C@nuae3|VxA*E)kmQn1}e@7QT9vW`R z9G%*;;ey^CbzX3A%4vHJ)cG>f)9L8xrJjRCQajo@UdxrSN~!D&_I6MDog9*{P&=f4l@$V1kGhQ!j! z>hp}=rU30ZHI_2yN@_BW0J)%jvbxAtRP6oTv`0ZP?2OflibvTZ&nz1i)8EJ!bOaDH zX6LO%j(O<OmrxN7I!F1l1f4p4*QhMZ6 zapM8A`dUf+l^&J?uf6!w@v0Q!3O7sZ)KIG3H5HyA^&iLB9kZ+4+HFOWoIiFJ@|Jc2 zdxg~!HKOOyQl|<>&tZ#y{fu!Qf%4iZ`TJLYWf6it8l3xij^R?i=8<#PE9ZSFg$blM zC)4m_B%3N1F@{>v9%C74XT4aq=X#s-`ySa2Ci;S$>g)ngr~sG3dFya8z6AUwXw#!6 zFK=vY+*|6=|MuY$sA+}^NjE0Zq4F`iiq9$6Ft!GR){3^M_Vzd7(akntKLOnmAtcyR zU3}@D&`m0GKh2x&IH)0IAZOiKsCod#{rH zR(Jk>UvIC{&!+rB)|)IlFL=L$G#H4T$4t>8YU-|PKT|(Q3*UOFW$pSnc?@D~oJ$NQ z71t-LE6E;}Co`JI;08MR<#ftwM+YBIbqYDRvA^pUf==HbkBB1r^N?rJ8@pihiJIiA z^c)#E)a-OcgZ#({UPCy2wqcrBS!8iC1b9Q91Y_)=r;}_sAkao+#|2J*)M!Hwvs~eC zQi0MF8^%66E+Mc}6^{+4+!ze0a$&PHtK4`N9%U;hxYH?UKPPRqd}rSG@(Gz`I8_;5 zcZd&hi0deB2KZYng;E=Cbw#QHain0k%}H;qE||6+b=EDOtm;tj#F5Ws5Y6vqz*5iI zEK%}MGQ(`0+DUAtz;-4dJ#(&IX@yn0=IFS;T9fqN%78|RNqBTuzJZZZ%#@HI7PDio zv}}L}TN_QoGxQxpa1Z8cAup#>qA=hLLEbG0E8(%@L;*pC@h`gnf9>nsJ7+`L|~ z$}Z-(JcmnY61kPJD$OS{mR`Mjj9TIJxN5NDzHndR2Wj5zJ%P?1^2E4t`t>!2RX`X6Ks zPq}hp*<#%Fr-%vQ?d~)C`W~@nr>jw?O%k>#nx|x=b1b>%M7Sef@$$B<5>`&N+&Di!f|c7fAuc(cpntSI2h zxwqqRUtSc81x;4OpoSg6>tz>Ak*5C@H=e4v;#o5zLP$C_I|7+N3z{fGrWV?~siz*w z<5Tb*f;>Rx=nyOnU7UtxQ^t`@q&C4+e)A9CQm^@kUjlexyb+}Rmqcj*< zpH`a%f|gPa{oU5umy$6pw-_e&83vd%&CUzlf=`rBWL1tGhP}d~O`17Z3xlu1yxe?m z>joU=i=#Owskk5S7SJR*XpaVq%!<_e`Eae&8~zI5f-aic*FSV#)Nw!b=yo15l!fBL zp*NauM@p4NwmSrtj<4y7df zK{IAZ0!_HvWa&0>yVU*lqAM&sRr>846?jbPS)_J~@11aSn4R84y12NqTZjsq{-fOS z=FxQ7kylU%V|y*=?Ce}>Iu32{;cT>-^)!LifJJvb%gOuTGJ&^wK^-6otPlob?16fg zo}ew&8>lD-v*&8e)>zju0!FI&YhCRvlz>F(xyZW0G-6YgE7L2hK%;Jn@N7|ZMC*8e z1Ey*BO_Xm>;5te= z?0lZV=Uh8x4#+u!KB4vQx4BuP^0u}NrILohbiq@oAIuAELv63Ig3&1c7v^K?OOB2a z!`c_42$`7ICeo^9%}y&fv<`Y#1To-Rxhb9Ia*Kfx`_!9;F?zh+5aZ9Q#RNfqFTVv4 z8tIZiA6a79Pj!o<`RrzPZH8uzHO@21skj0gz(@B!-eI>+*T5uhUuXikTI*Jy`Rw*D zxH=X2%8sAEGLH5dVUCD4!EyiQ|4ulhl=;X0#;?r^t$MG`3dna@)s=t55IEwVSqz*$ zjN~Uo?P*j?+GC1HpW{{xZ_%)@>}`HczaU>sCd?T!W`9_y-fgH-|cJGR&Y zwkxmcsB9ozBXyGg60ududK%-K<=1e?fBM0ItwC9>V9coQwjR$A z8{F|QioPmA*Zdd7&YA|hNxya*3zX0TkJCQorBlVk@XUMdP+gZe`Z2~cy;v+O zoD~l(dcPQTbNds}S3Ltbo1eX^?jOP%_${$YVSkv$kaKoE=Gq(6c4gX04&?3$N**b( z(R-q^Rnd>DVV@XK`Ir*_?DS~OW;zDc_l0NoMv4~tGD0*K#i9I&zf%91y!$5%Diru$ zzI@pc6W!1YO;*-EqTDpx|ruML8A*dto8$c6EHY52xcK{Fi zIC<&PrOfn*!aeW6GOZHqbW0F~;sJz*nM_98t(G{2dFnH0zVc-r_F#naj5=Ikm|Ou( zA)WM!9!tX`i|O-%KUA1^T?>o(`7@@&aYH5U>Gd{6*f`9c*0W=_Q#w^g7gQHvF7 zhMLPB1-L3I?eVg#O;C;|{KT|Kx&C>HcR`47f9zJ<`yhvgjzMc+d*0BmrIVWVzREk< z7Te-JLKSdYc<^F&T*u&o=2mXBT@30qwP@D5ATL_Q2QUXQL%Y?(TEf>AVA9`pCbrG3 zl-pCfB!p0P$GPn_E2&yJAvqStE@jSg#@Z5=h1zTPRO{J)pIn*ef(g#u1%4Bz7$bLN zS=PWH3bJmwRNVglK8PR_Fu;H@JpG>S1kB)jQIi$TCtt{mwXfB?9vUpLqF7j1R8!c$ zf&w2<#t2{ZFR zOwqSq7?>kKqSH!o+$1^t<5>=D5s|2k$A-rc+Lev-I`mt99Q{uEr54ZOH}{;|v2RGb zxSfGVn%$Bzm+FaP*}*I`73eN7hukeU1^xdtYYzGxU()*KrE2aeFL-FXh#0>Q4z9S| zwdhY}ry}a$Y1Y~x$PgSVAbovBwP>}l=bA#VjN8I6hGk{@LxIXqTFiKwmf-?w-7WXn zi#PUIMl1z-=&f%?B#bs(gK1S^Ou1jEp9aV5Gs^`uT9YazngaPZPV;ULeaCe}2^_D+r3WWCB?41ZT$UmTwM{d+`mao93K_sxYfZT8OK=$y!9;SU6APEhAF@5 z4&RY22vp+H%#gtMW#LowcF&^_|0gx-bVn~I6lGwTl~;4>XoZr?%fNDLJQm0#Il}?8 z10|<=>;W?LFyyjVl~Gc<6Oi~dsqysWsAKfYRrD)Fm-EHBPxrM6%h1~+VbH=y9 z68i{a0=kM`N_K{bXIM-Wp~VfYPtu8qL{r6Yf^#K{G~B2?;&I6sFN~+_SbmjOhMg7p zRc^1j?s2F;2s}_A^%lVK8*Htb@O1@v)Own`!K~)Q7CU~<8E!kk4NZe~KNqWtinhY6 zIuA>0wi)dXMZseL7@=1pg6aUC#WUzMCx0qaN>4x zG#ZnV1_LU~*#euBc+}<&77J?h3JGXg7lw11IESY{+Pl`!%Dqxo~W zzQX-CIbw@W5O%G}&R%L1i3p$jaxfdsg}(dvNW(sWlF@Eejqt7<*Q_6Nh3yJ38<#8N z`3wygLE5&iUGZm`FrU7?i=ZAP6|**)2s>8)6Oq2*5R~5f5D#APl5w>{J@K+<0Y7Y; ztY{6s!dEvi7zR!@hfhH<>T<6#J6(>2Vir&OvI_w2;yBQ@Lr!u|6n|auCEE`jlQNoy31@l z1Vy1djR^xHi6K%t$epQJ`DUn*p@W@}{-RH&)FKkCK9ooWVuOhEX+N>J_BYgez)GGAT#n;p9 ziH4y~y=EOf^d1;EAj->sC>VsVjASI|I88#Sxv(>_xBM6t3Nmj$xHbmOMqb`>(p5-@ z=f(j0Qhz!h7gL1f80}%+dqqCQm$~~OliyRkNt|I5@3OO#NP1nZuVCR8VJFMlZmR&y z>5{O>+eK}cxwdCmbOFBR()p4D{3XH9T|c(DD-ZQ=(}?9An$oYs+I#g*h3C)MgP z`n2zoloH~~<(*Y=xV6Q;!z3`OPGms_{&N&)8ww;I6}Fs%!LcJHa}^$SKO?_ZkQWu0 zjKaXMifHV>PK_he&VbU4?Nc=O*;6Wm;V;thnnjG0&z<{8`11q}=f97fKCB-@>xzjv zV?kmA`(b%Kb~7^}{1=?E~* z4X@gKYizUu8NoZ+gayi66;m$(5bR{OV5$dz6F2w7U|9N-V7fcVTVVv^a8rSf-M01w z5%$ZtPym;~^yTML|9NCIUrQjjJFqqofUc1^M1U@{(jUcEaOi}HIOtwuSuOa{;P6{i zotquE+DRW~%Cs~M^@EbAc3JnnPMXeOdlh3v!~@x?#~~MbxE(Y2cxL?#CEw|L35*Q5 zc?rN#Twg-p(^vkjGd4$cw`78<6<%=Ax--BlHC}sBm1`*IvwUL=T?j zqRI-1*yiRYmC1|r@AO~IS@*`QY~+#pES>vRUmLq?EK+oBhsJ-HWx!X6;+MaV`|&{U zXWGSUj^uhuwi?!$iTvC-B6e+()gKM=#>kZYNp!`P&sL zpdA6aicvbK;UuonIff#+IS(TQKsa*ST+ymHuyE-IpZqOJ=Pafb%mIe-v zosHOmg@T!FWQgo+VQB}HM$>H7dYrrMk0KBFN0VoZx~3@bkD*;2vP5OZRWpAbK#;l` ziq1blnQCHF%VHoij5|7RE*Zy$4+fWqFtor**{J&TEHe^N2@&l>Lu@v!IQyTM)G=z1 zFIGu`AusU0$xQJZ5jjN8)YdqzSaHpwJhO8m%$WA}xG~Gw!Yor(`F8MwO#k(s7B{UJy32rq0M`-64n%U)OK>FJFegmKzD&=p4mch9(!ruV69o6#-rNS zG-@l1;MJM1AQ94+aLR^rrF${yb8V1e!*}x6yw#A5ZQ1oOV?X3swG;n41RVoZ2O4jv zaIC+}3W~^^RqcdDedJ%fycfX}2a}Dt_Q;UX&|Qg5PS? zLfyI)Ri)Jz)_l7)`Bv0&isR8%{FyQSE@l_cS>@T$Q5aw&0pKzMnFf0CSrcpD8RPgT z1~MutDnD41Ojv$)JS+5cU{Lgc5Bohni^OhSi9DSC1%+*4v{?6X@qI$66{NkI-&ZcIXPc_Z#1n23&f?NK}Mn5RW+N8tOcgOMp`YV<% zR~vt(Jz?2KYl+eR>BG|x--2#@8yKE%4*D77S=Tg-_5IqWr2>&iR60W;_f-CFFFgVi zRW};Jqpn@CT`=YRUp9z5?^p*hkghlXPM&RBDKXwajsQaspVgK`$|vgy#20_Og|bvpQ$-i;aVUnnPd`vZgbv$J z&l_f+Ejsvusp9Wun&~_Af~vdSwhX_cx%ivR<>CIZ0t{%DU|9>V_p%S&-j%YEs5-52 zeNC5wIgVSvn;~og3JO0TBpJIeW&_c6gHoaoZLi_Ztl%N9|BiNT3uv{Ot{O@w^x&5O zbP)ODSN(jVLz1;olBEx#vQT-i{`~nn60tBJ5EMTSsRl5AL0o-W62~|1BJV5>^Z_4k0 z`Xp8G@vw)l$4`k!N)DnS{|}10;qN^K-76ravTxp_r>7?+C8ecZfsxj4BoqGQVqWA| zn^%yMN&w=VG))l5$ktG5Fxd6gxVga9OV8jAZPK+>gp zyF*AB;1n^2wyylgJxWUb>E@vFtBBnVi2g$0FdZBmps70qbbkjG0~;GF8v4~e_!}Fc zSS(vkUZHwA6TzkTW9?{HY6G9x)p5?_#c9|W zTlX2B?(oU8(%;bI?=MR0I#BB#tDn28U5>y{0esR!Zf*^F%d(!{UYnaJ${SGcBa0Zw zA*o6hE0B;QEI$4WflNk)`k&|bEa#8GYXtgNhrvv-MK8OHw7EJ2N+ zu;+R#Qf70p{oQ?-!m(aBA#?Q!-tD-3X2)CQZq5CHIFiyEFl0q;FF)!AN%HOKbwSC1 z^cS`gRElN(lk}ejR2JzuiVPiL1kit-?YpMy-U*=kMLy248Kfo zpeGGIz2qMcZL;WNm&5HqG2jTE)=-%#$vFY6#R)vyqVUV#hYT4NaPu<4bc(YzZ(>C1 zCCQ18^}FDJkK*adX&(semn(W!mf4FoRQ@a(D)J-XuLvxK^r`bmK=z0F{HJ%X8I}$@ z>2GtFVBTWLwA9|JydFP2re7c9i?1kWcE>Z_)6>)NZ7y04HLq?zNW}Fd0Uzk*bc;;d z;21BAsBCU#KzSWx(EQ;ZJO3q3E;d6SxT13(7|lsEeJUS^#}An;)w&o>)Ls@9e_DS& zNE@F28&NC@8?)m_9!uyyYJw3YH!OlDeuk*;_s{HK@Uu23*^zS5g9Vuo>|A1*_qY-y z`&$B3{BLE)Aw_KAqo^Cm#$91PkEmI)>Vcho=H(h~ps@e0fifomj!d{w^R3u5;v{dLottdP9YX@K8dI4xRE!(ocAK~Snp?g|MOdc);{#rt z>*2zTDIm}za0G(YLKY~7_$f<}-o%8pUQBGBB9qyhAOB3Ep5cz^(3hA^(p8XhM8w4b zx2!hIccQfK0!)0SyvqSN(Y9q>Fb=PB{QMMcx+tq)Yr7zInZD+@KtqK;E{}L?3I4W0 z>EG}?;_=M8v2mx7IvZ?;43^W)z_GMdfLDp~dp>VyMYg(;5xX}i#Q!*JuTC+XRc!%4 zeR6Cc+rgiUW2F!XABNh-_eu`jO6sl}gHF}!YeP;VJhPVK1TkafzTsooubDXu2;>B1LAC8n`if|L0KguS9oL z4w*h8Gb997yiRhyaUd%z`NequnIc5>pscA@9##;$_UP`V>q58wawq8(f$AB^6j?)m zeNiLw@nlUfjRp2Q8sKJAN)*lZxEnCk*|b3&54$rzR#q4g1K$%PNM8`AG$@Uh3beZm zt4G zY={3g3S9jAf1to$FN6!0R63Uv=DyyIssgL-|?!yEoof1|3x%~NdqZs zbTtpfxAvY+zccK?$%#_wy}Uf+^lCJ2EleL~zqD3oAF|vWx*hbmEUj%7;*Y7&)TK)aV~IBe=$MHEuD1b*uE@mUV(ZBuWzyk)K4di zim9=yMhr`*+7O5U?|A0Vuf>M_hAqM5;5`r*6)iB$$Ml^kkAN&ZC}RedJ5bA>0#Xe5 zNA;~HNbG1(BPH)w7F=K`gKTgfDgnnY(_jj2| zB^vb-+?AQnI($Ep6ZLa!0D|`g?(Nq_nFQf3TWjITFS3LK0*cn5{@ph}Gyxc3Kv8~< zh5BSL`F?2nt$0GN7fs7N6Wwc=C%ojCGb0u$TDp0vl0rWlVBr3uQ`6*kj7XAz{a9o-=gqknW1J4xv-B9UMosO@$rg@+s z-}>qCfyP>mYPsDSUDrlshvU4|!t%%8lb}`&aRp(z-!nJXD8pvC-Mz0aXR=wj3<2+uLEyeglNglAxx;lUU&} z;Uy0QJY`xyr_VLgYy#g8C3p(A1g4mLOl1N?6(8i&2!Nx47W;BbspD5pLMO2sSucOSINH0Ympg=<>jPaJs@orh_+M__+iDuv`Wht4$z_#A zq}e?}c&YFDOb?a{H%IyL>O-Ee_DjYGr)lvvaux;|HGR?;g`OM$WLDXB?dVaW-b-tO zy1U&h0n4FNo77qF6daALDLPcw-eopzIjvUXd|zFwRz&Y(&yI_}m&X9CS@~60J~fW8 z@AxH}FTJI!s*Yuqi!%>MRUfpO^zy%5IDZq+Oz62HL2IzhPpfe9I~JkAD&=JB9K2VZ zuDig(`MgJpGg@q?|`PLC^sXboJ281G^H>Y!c;ggA=@Z zwsV6^E|OUlJtZcMH@Y&*9^70iHfAv=MG}D&J{DWeNx*Z_{&@jh01&)Pf$elK6E0Ri zvc1^fW|ez$^kRe=De`diJ-^Ou`J_XDM)kh1E$}h2W7E=XtphIWfU#NDEYKIXDBm-B z#$||`3vw_c_6>aerKQW4!5mO);+w-aO%wXt9578QgxBEKgq!x({+uJ`%zVUcdJW@h zYp|<^>X3r~)f7$Chlf$`hW}#h5TK!ScTzHD2zt@%M1Pcp4im1$ zB`*fW125iupf^4iPN{P`+NL_dxOOZ{D7BQI+3{s{Aytp4?KzsK>ea!3pCa`*l82rF zqAK!KLEq$Z3{Q)yw(fQv5Y<_q!$i*`ll?XF(os;%Kq~X_a9BQ2lZB5?q?bJgL<1bBB-|uWPWik$PgY- zWK|ZD3y(}8av|rQNmbF$)pe=RNzZa#~xh6p=y;PkJ`d3ha;RzXmBor&$a!d@AVhqv97*^?R0|3BcR8k%1o!fUj8Q; zMcSK8IAdpNkeEY(UBw7!dURhGVekCcCoYTv-N_^El?#N`z$oU0G68iFfkriep*nT5Bk80i_9hk2R1tp&NOIS zs%Sh}txjjFzV77I7iA{kuNn%?orIjx10t&sk7~JO=|a8KQYWf-8=sjRdytB#N|eEY zx>I~&>Ga5WqH=hP^O~mfhG)RoV0b{?!!NW8-xIf;nl!o`w3tPd*zC_y;SdpK=))lc z1oFq;Z$`19FJ=Y^M%7gs{|R}A$o~uEEyAbKLiMkBx9|D?9PbwY3-2~q1h+B%uVT07 z@tPk4(hkR3X*4w#!&|+}IP@>g-mgBj;iG4z zKY*lJ3^G!?A|4Ac*T(U@h#fJvL?C;P<1$+Qk%;xz!OxG_!W$QF?m?d)m^99 zkGh8Wpv{s{-2dk*b$4knZ;vN4kdvy*_Z@X?4jlnwIJ4bLfa$?X3Cm=4XBlaLcA91R z4q}`$p*;I=9aLfq{KHcvh5;aBWV$aj(ZXV}vn&rk37)v{@VTY7k&@5*IS*Nkv!yfp zXywZ8DFG12#cJd}bB7(vb z1Y9b5tHV?`8^VSdF39)u)ymG}CR}F|Zn`FKX~*hp+15E~%)r5`w59sCAFPk6+I+IerB|aL}S<;72MB>n7 zfoYT$79scWC2DdcK3NW-W{wn4QFr8P11sApw3kP-lQp)B^FX4G6g=#Ak2#*but4a4 zuA;J_1Lyvdqb=Ft;rDC*`ZVVQ72gl%2x2&mw%6{8<3fPsSI~lVka-Wb^ZD?{+l*20 z@Jx2uu1=^Qo)l*idd@E8iPh{Y7puz1XIpGRsj@%EbEe#QE(%8E_%+*GN#f99VnX&| zTP$C>aA42tzBdwARn%`!-;z(DkWpxp?+S*n$7ZvwnYy60_YZ&~bA~lMoE2pv)X$E9 z@v#R%118drkn)8}phUx}7ae%#@lWkZosjLVOeRKw9}d=3k)*gJS7W*#hC`kKgD`O> zL_u8Qw@mA~H(1Rj!)|Tp84>#S6}Y`C;^QA#n9EF>t^keN{!05&2mWZ7AcHWT0_=g5 zM6_)E#q|H23-8WNYW_y(WG!c_a2=nzI~0zIJz5PoCRELw*tU?Q7|(Nm&EiwRF}l&O zs7b5##T<1EArSgrqwq*X~*!=RU<=Tx=eH_Y)?j9RX^3 zn(^@xF+D;5Y;FIGNcYSC8<6hTBxBCvc1G-eb|v=liREhWrp08dr>bA*G*TH+|H9uc z>Jc}r3y+ANus`H#WaQOH^O!j+ojzx~2D~g2?f=Sy-ypKY1m}6`p}&T%HpQj(>DQEn z!yRwm`urAT5I#9Q0*2cvcYQ!y0`s+KBhDrdnvwb9AbqS)kL;H;V?qFExyT`xH#58r z-Rf`y*|dYk6vKA156rf_6dlhEywOjICD^li(WnU)zkYU4=U^idKF6j*`H9CMePuW) z-+JGk%$#5dUa*scx%krSL?FsAQm$b1Hk$5owsmw=aXzBrlc#Nw{vO0pbu*xbr1sL` zdBK|-jKf}Rl!a`Od=U|ao;qUZW@tlbs~7J7MIp%1KF~ih2*Cy5BXTK75^r}$vNXxBTeGwk{v@`NvV4NBgy^z z`ael-u^~L>-?@Oi0KSt-fpi7PP~bs--|tPH0fwUkk@rG7))X}Dr##s=zr`3IAFb64 z23f()m`3UOs`nENvK%v52-!cnHeYTE6MP552URp*UtcCG)9aE*)&^#Z__4FVm@T~% zVqm1oGMns?+_6j@`XtO;gE#rbLc8CfUQ~N|tW4IGl8h`p>1F2xG54(3FmpmHe4H+j z8wqokPjrf8PAZ9c$7VzMwW6saq;jXmbJv=kOCjhdA%HVt{Azte5Z2Y#M#Do#grk_3 zQiC-$RXJe19KuG@Tyq%}bktGZw;bW3$L_8%g2VeIrJzg)P4!iqi(FX~1 zNiMjkIUy}P@u^z_MwPQJyXaoKJ@oRf9s%O<%%xnXj2l;*Ip-iXS4)DDu1oUy^FGf4V^x_D${ZIc zV_Z+m_KzY!oW7jmX>>j-oELClHUs}OU{>J3E{BOGSB)6_^Fa_-0l(kW5IIVj$=Nmp^xP(>!Ke)+cR+yrn)AOJHKoL>vHi<6uZQ% z@8t(+>4Xkaj^+QkF%J*RtLRB{%jJX{Q8&=pl440iF;s2I*0tUZxG1o*8iFRvh0hl? z62s77gr}FhabnHJek+zBNfzJDO@o$&?1W$V^>^-fE#i@zzhmQoDM);S9{X} z*(9I3y1MG=eWJVY0%$|<4H*Ko1;r=iDN$5CY1bj`Fbi+1j@S$R*wD}b@p2Oc?$jUJ z#f9wVdL?;6qip!N@h8pSFtxl!)+Wt{-MoF4KVISH4cGUkCO1} zIjh;Oc(Vy!VxVbZaWD}iowu!S`vzRr>*4o*rc3*o0Xx&%TgKpq5JVL~FaaK;-g{b> z@1O~;ckI*V&G6*hr$4EfJdwa{)voSup8D|SXR&3TU6Q8b0y$yXm5oue8uj`)w#iC| z!ho?V)f5-wm9XGoONf_&JP9_-b6&p2&tbR)tqRMyhcQq@gZXmtk<+3Cza5o?m2*?V^3%|%)qBbC70o~vz z%N{BO-G#y2D&$LuYxMFkw}#b~Xxp&rDzT+!Zz8B$Z;Q&d)%NIyQ){0<6#ff*-KFlS zhel}uyF25y8IvU@vv;`FJI$sX&Zoa|f+Lb;jV^Wxa%75qNn!S{+_=Q_GH4~9b?7uu zRg<6+MMx-*(80!vC`icdOXpU9bp-#wgh zc*IQc<)1URFIs*!o8<1lQh#5}co-6qi|#V&rQ3rW9GMII(E`40hD)QAfJM$J+4fg% zA648Rkiw6!8}7=iya5)%X?tbVr=BhOTJ_M)X1+8Cf#Buzq2So^`|8ONFCqq2`QkJ`PyKpKHvD+EQwR0+ zZ(ENb8+LiTLa`CfF*&X)l|(;bEx@Rhh@pC+s(UN{GcFCgNoSj_A5rZCoqwVp{b&PN zjK8biH;N==N@1EdQI5USgOlm{C%KiiajW^F%Q-)AdgyJ>cf)A-J6fq|h4CQdBaQRc ztjs*mWBIQCSNLNkjJm*%mo-FP$UpO{_L-4LI@Dn5i$vERtlmCR{FaqK{aDdiU##;3 zwO?Rgc~>=3*k7VE9NzZBnN!`n;mP@AIfK0XM?K+5uDz{wq#K#q-nPuv(|qDQ$uE2+ zZ|s5M(Q&$@0)AOX-5$ihV9Q zN3ltl9hzrjh`pWIE8WqOIR!l@t}ig@x0PG#IUTlq&f;?FFV|CGk<4B5O27KbekR|a z09hZy{xnMO*5^a>O=H{l-?%1Z!&!RhI1kS`5=i;QT6_!y`P}GXYE_-8`+NI1QEu@Dkr1$30N*j==KVr4<5f}t!BtRE(DVr*} z@ESO&A-8U#+U3?!lumIe(1L2o#BYd!zboQmymv1V3jPxO?9G_8I7d<3R(6Y@Z!zKF z?knx=sF+)nE;N#x8Kb&IU%Bov+$Pv8(UKeKq;LCJ`jaEnm?WMKV6`5WvK$2z`JIpxGB#@`_@nXT|~ zD${gd@d#ho^vsO>$X6*a9#5ICmd!1u3qtCM^-Yu2v!$ryZ+%!vNE<}{W;x3#xo%h2 z0biJE_=|R6W(qX!0J#Xbl090ZY)$^O;7SRM-%fO6!#h0!{mjg^AlQghWXjMAzc2c-@iY`5K|t8Vnys_)mNx)AF4vL9+NQiuIzk`l@>IvJw6 zCL>v<9|YEPjMWk4eA_l4svwF`LpmU@+)o#ETZYBqQ(m_FlknmEo|~E1%M#l6&haq$ z{54JRpUONR45K%Q(T6kZLh!}>16UITE8Y)1^PmobPxS35WNuN=>zle$I#@%(7R1dD z>ehHn#DaHM6hEwjTqYWTW1|wc<6p$={Ju6z=MP^wLNFY;OrONwIYB<)zqnS$ShJi#<8!j{d$p>nsnfbX7I9%}?S;LnCy; zb(>5|^G!I{-eW0S49SWe2VO{Z{I+k_5B}Y1IF$^Zs_*6q7&)O2qZyTQmW*kRoWk(6 z)yn$b3%*icQhqa~Q5QF!iT(9n%L=+n;JLoGU2Fxe=V{&}p8K2g;J28GEMMkh%4S>g zr8KzuFW&)~_qZg_Ew{=RJIPm{p)`T9D4kM15{H1}=!cQ92q(2nh>S?=6wy|bte)O1 ztXzX=3s}C9%q$S36xNK>n*5s5jDMKWK)`|4LC8V9kmdcz^}GRW?Bx8(Mo^1&oL|T28fD@VI5!0T6tQ@W>E4-a#j@XAuo6= zS~P}As3<9gZEYa|n{WCh>SxOtQHM)Y4j4MVjyvz)zlW_UAc(r0E6G`Iga2l_F5D*d zVpX4be;I5M;W@bi5_va(scfwUZE^Tv;2tUw4bS2*Xje5Y6T*2te6t6mht;xfh#jAh zO@^~TYM<5V96P^8XDjNn8}fPslmtj~-cz49R%+h?kG65CY2fXckK{|-M}~v1EoIyT z*Zsr%_4J>H!=2P?B*lRLQUcv=CR*hUhSt zqLUsc%@2+`v<}k4OegNqHqMG}KWDHN2xUjVWnq7qDVfSSk82&xdcVQz1Z?jGv2nBy z<+MeMEj#ThojPN&Ca|YbE)7q9r{{IZA;~2a!r8ucr6Z&x43}Y4&@hA?Qg*s6kGPsI ziu5`#XB)p~*K+pH()(++Qgz=^A^TyH`vvH~-K-Kama9|}2} zTCT@lY(d;t{atBTk%*f9F08Dx)NqAAF;gfgnQ9FkE!~gZyVIRJ`p=PIfPFScwR8ZD zcslb8G0LCg{RqnZlG!*+*^q>0Qqo`Wlnv9TN%5A1yLS{<*)u z4@tpULx`6aa98Vd>8yVi*SL$+BY?SJDYMClHQf|XeGsy_1^E?$?mmy8+exF4dTu=} zprN7h^yyO-l@VwecJBZF1Al|tISC28!mG|tC6FL+@GwY3J;`u8J8l275E~_vd=@@{ zzy2rf8~4}F>Hq61cVGJX`AxeGn6(WT=(NDGEdk-tFoLVAtAqQOM!j54A(G3<)`F=M zj`{Zi&Jcti6oB$J8_sw|O_yT2{SSZ@gZ8@kJL(&LKEaEQ|H_X8a!vqMWPYHFYJrZg zt42OFCn?u67QuH4%SVbdR0_K(d<>yVx2xg0iFHDI-p6+8l+kZd@MK4Ey1iRWn&@;D zp+6{+LI@7H=e^IdCg$f$fd>Hczn=4;Ueo*8;EUvBCje;+MY9v6#r1DSy=VTjJ|R64 zdH56NCcrrD0tPa6n?*4B=HZs9!Dx{k(>>cBdTkAumt2Q+x*47zGPiYgoq>50qA|!` zt0;LQsi_{YxB=D>DmI=ArdR~#Z&@9N*^7gD^n3~m3eZ)$vR;OkeIDyL^^3zXs1X zFG*&0EtZ$R>eb35~&^uB+I=}z)y6Y+pexcQmF(SkVoffAuvdKEXO zU}x=g4l>XJGYT>ihk<=6G4D)pSom&uGRax_2hx}0KDfZ*Adit7tczeW0_e;2uu6Wa z_{IQFa-w;P7GW)iD%r1jc)aDR|2>GBm)lM}j#GJYI|@Htv!*)WeyFTBD+Bgj20>wS zIK)DCsyN#a=Y4XsEnKU&bXQ=g2BG8sNao(#Bb^?Qyp<&GjzM;|7{TMl?GVrkCne(S z6+2ogFx#}Vg~*dlXZ3(PS|^NnMTXz=;m6~(k#`9u@W*57k;a&|5{oaW$DEm)GqV}3 zcBwG&^MK40*f+Jre}@cW1Dd%=LIXUm6BF~mb{9zEjUbeLes4fi8omdaoW*y8kLd{h z&DiY-HYs^q+Y(H$E_BkO28D%{SkAOU-jzWl*cl&FyiX8!7X{l1iDJw{78XSwh5Mih z0b*6|E_%<69C8siVC1fD8zNBXdgAC1a#K%KshJV#d46?wvnMq0TU~8I97TcK@%q_7k$ z(*j)ZuZ52X5yBqZcyK-}C%DoabDtes^=DQ)!%l<44DJgqK7p{^5-Twn#0|dtmG(@f97thH9JcC z3rC}b8bF$?Wn(0OCd@E8gy0^l3uSOg%{Ycqvdd6O;QAZJn!TWk}Shv_ok`|n9?ih;yg~aU@n_7d}1Q|Wy*M4{qoTw}h zTbV&c2W9;bQp#JZ-^y5dvN8}T_;|C{f$lCT{K%1^MVi}wJz)n;OOvq(6(uvKQXL6> zDjlP^A8j!UCWd~Sn;J_AeKe^I6ZohO%23~Y4d1FS0 zO`R+!QCHW~I!`Qtweo9Ys}UUlnMa0(rvAJtKY!J`3+y`#_UkWhiA95pF?}ffU#3Gy zjLMrj{dgB<@Ng8X4Z~y}t}c0Fri9d_JXJ_|L#}4OnIZ=m@W`uOLKN4PL1+fbp+|t? zTs)Rto_6C5tpx%*()+ae_+H~lNerw^)|??HQnlB^HoLWnlZ_@~?~3aoWhZ}m>n%vK z{Wmg`ihbd+Jqi}13+jC)!C5S5s}B!1Pz;TbU$CH`O{v@+<_#(eqOIr(O}VMzoHFwC_}LB`t{&WzbyHYaO-Hp#bx{-1LX!3PezX(r0ASC!-!R%i#2Qo9{Z zbAF~$%&Ufa00liYD6H&wv#q07U}7uYaWMmoD^X^Sd}@86&nEWdq*iTPEk0KtbA$A^ zbjQ=xhs)E|S`e@$$hW@~a7^7C)hRmh5#hMlisc^jN~m*8u{I~V@U{{?WDLfyV|p_w2~;q6cUMCqbi8kcO2E(;i|v$p1+>zj-v=?wWhi@f^u z!tD% z_O4|Vj?v>nVL$zWaJa}I#JFVn-OgkA=GEpj;R9o&kKcjKT|33XaK-jXU&;{7Vb!X; zaA5o}o^1zJntxZ0n=R{&5wlOj<|!MTxzNh-2IR3zrYxioPB%yi-J^WpN3+u=Y*$Q{ zopLhspt-H(TF|fi+o%_9nh|2UP3vmFmSBG*%qPtzIJZQLRFpbRipdD32|h6Lb)vIT zw=2l!(Q%Nkp%$2cUbUIN`~|S&UID6)JRPTl{u;LqDTTj#vu-CNvBa6j=RX#T39n9E zl(!_E2+XYV6Sy{ojsGO=^t@N+u#xadbPnd(ZDEYG)71+uaThizzj7wb&bLDBW52ZW zwaqSA34S$F#PaPp)Pc&d8w3`!f<^)&($`*qFzxd{nbX8D|$+(hwnZQDJT!@d?>91X*BU=SIy<& zC@s8xeNhOe(0N~eVp@gautmWR0~j2LxhG3N?`SzCH?s+-s7fsk19$>BdUH_Sz5|f!Waq8y=UJcuyb@JAG#|r zH!bmBLd09v>mG{W3NFc`g9W^ehJGkUjOgd`(`$*z9`Tq{!Rjj<{{wOt18=YhHb*C} z$Zo?$*N!Foc?G-(Cn2I2AAcBhgtJQCcneNWdqVEEAm+z`1xa`fR)Mfl%5BnRZ^5H> z$pMKzu?*V`ny3ud_y2qqr-uYOh#s^z#-RbC={W`dg;UGjmu5Jx&3=ne>;SnISrqk| z;8Pd((Q^;b^@cb-6g)du16DYtwO^(S(5&?u`wS5WN(8;P%v{oyTVeM{!1^ zp1m$3Ie93T@E&?9zuP%NEh7yv&s;()&1vF(OY<2MTQEc{P8ye#p3if8hss%Td|7b@ ze%@GFH#<0p+ZBqv;vwHK^dMt^AgtAyR&^`tigL6%`Pmq>ghB5C%YRIqz+h+x3FhV6?^=rR7$UqT z5-b2x%phEqAhh0MZr4F*zIIV)28-h1DQUD6gCoA{en)m z8nKHAD>!(>yggkzikSWmx6_E|@rBKep30`_xmOo+lT2RD_PkxWDrU0T)XZ6}v1JHp zt;fR!BjVgGJg_uupoOMACAKimWmkFWo&VxKCJ$wbTL3X3xzAQZc`})#MvZF~xQE+6 z_6}u!AGEllYuCOdYCrKhlyVH})q#~;!$hN;TqSrgXP|J)Y!{P^5}J74j{hXFM(C~l zk7qbrUI}^a)(`$Z0%NLB-e{M2$)-z)IU?OHt`4_y>gR4xQFT@WFb>xweCB)y-AYwQDOAaEs}IT*wq|E$ zcGe~}8%3v&f4|lY@LCsx=t)?%Mgfju1>DO(55UPs1y%RVSBP*ihxQvOcpyR*G_Kt6 zLtR%6im%+anH7lme+MofwU}c#^c_Y_X;!{Z1*)DHg5+fer}02 zB)EIIx+vJeImh&Vb#qAS^}_KK&(xV5y=%A?bF$dzjHu-fTY7BOC5+71-&)2shakEt z9Qq@j&kN_`4-~r|&Q@%IjoxJMyQgs%V;5&K)`Y3k&g!_T@G4`6ZQ3)D!U!fgd^>zp zFIcWKaj;3{BS3K2jl>;GTbxrUqbl>`+5J|2M1yE|;bE!7xt|EmuZ_*@LnC-q{*6qHGU5l12B3wHX`mRT9^yEza0TczdD5zicrx z%X(T-$gYVjCmeD;UeumHkb8(QvpU+_jAO8-^IE{D{56T4fa@@mx%~2Q1D@MfKiBy= zp%N%I8^fFnm*EhTdfh0xPfkXrbdq}v+aPxj4V1ZYTJ#On*O`?NOHP^yGz<+utOboJ8*^ZY1IWR!0PZ5buC%S3E$ zN`S)9D=mn5$Qe{q8K+s#VrDgTy2w_?E;-%r;&Mx|nLU7lYTfUPpO9To#;t><#P>)q&kHbcBReqzhjD*on+w!N3s~qv!Lxz8 z>yCSL&Es(F!dtkodEQ@&Npn~`I9?_B+N6o6`TJ21R5VyC92te5yyeJBNc&Ucwp?%8 zbjAatvMST(LC)aQR$u)N)fEuYfH#ej$ghfA zs#AG!?jy&){G#WiZW-SZUr^T5gOg_yC%>x>;Q7&%=!0>`DQO`u9bUe}r&Cxe8*9f{ zoFEOS#WJNDlPM9=4>FK}h68ljPm{$%GnIy(KC2B8x2Yyf+Jd2S(KHGlCxT&n2XL{p zkZp)cNU-uX{&2>jzxDjmNSPA-*Xt{Hr}S%F3(m9$Jhq`-7`0qG-CWubu( zqIBWNVHw|$k=?5hzKwTu#Kzww4}a1)cjs2J$a6i%7jKQQ^CwXm)B?|FZnGw+CoDFE zAG1VI2H&@CBmy1#^shQ4`h6YaiQ|xT{uKGoVp&Iepx(sor zrN)udb8aW%b-TAM9n0iqbW98lQ;bGZd@F0>?S_gaHpwrDHg_@88#+*N_3Yq64#WwP z&c8`_J#6Z_w*>-zu+T2T&7(Y}cus29#|TjFp`j;9?vvnGsHLT~_5_Uk5~fy?Bwlv^ z1-_Q9zj&^Kk2(9G3zXZLH@5}JK%6xlO|sxmF?gzK?bhDUU>0r1muJYxXaak?!c1Ti za%RBNa=*Pg+O9v`gLJc(>KOscK(iAJ33tyXgGVLwcH4m;NWo&SPuc|;6wyc^e zy$fElyWAfku?HSUX=!O#SQu2ebpTS`|K<^PKL#EB#NYvCvPUv@W=`R?+zjOrcWDjJ z8m(ErIx?=sZFX>AfFI1A=skP$44HOu>P!-Drt>Fgh4!t+V5uVIX2yvDR{E|~(?{Vp z`>v>p)pVXw5DX-aea=~CMxtpJ45FEHj}I5D8JE>IN#WPEbRazvnJ8SA<0T^c{P{*y zLpWsCAZl-f&qeU_7v$zf9U=5ermALB3FO!CVo(NMz^c!1{amZ~u|c$Py|zI)hYR+j zr@9-DYI1j^+{g8-DLDF^g>@kYw==Y}dEN?cx{8YSsp+CUEZ#ot<88Ods-vfOv9^fv zFb@`7OsoQ;UtyuD3)2wxGDlXtcU;1Cc`1ZvbI2bj^~TDrtu1H_fRmNsxto4}Op%=_ zzH-OxD%u)n9_iUjhZ*)17Y;7Zp4)rn5*Jdv!lUBg5rX}O$H@g~n&jo>DOF!5r3rJiNIF{_xypCt3P9F`=@2MH zOG>Uy$YxYlR)VYuFV`v36-Vkz>(3l*iqQcDRaJUuNr^4!3711$s}nxM#Il2pL}mG@ z-9Rz?9JQ}eLB1R!vKbmWAX%J1S+Y9Ldo@Q+Hs-%tlv+U0#7b#~=l;yiuUJW%gRJ({ zNkufSrK_vr8l|0`9Z1AfhceUhs#AraIwg=uyn>fgIfxtVru;q9*@sY{w>b^rM2;3kEOK_b0$5IS-Ta^`^EOqE~+!s(h$+gs1#Eb6NH&?&U z5!nx2fHjCi@zB~2FT-<1*&gY%4!cEIP!r7b0=e@7(F+DbLS_yB^;;3h15nN1IkGf%@_U#9?d*QWhtEmcX05?yde-dbxQHy3=;M0oFqm@##=0? zTlngZF7TQ2!-M*a*MX87(BGBhGmL*6qVDqx38W1ZoCj+s^%6>%@>V@O|JI$$nnj4g#GEZAzxKLhS(Q14gbK#8pw5up&{8MO~LNXxJJ9=K!l zBA~H!a5!;Phj2Dd7eH#88tL-9>t~^VxogFm)HkYLFc98*DM8NJ%NewVm_4FBzC>&F z+&2cJ%pS69a0SOA_GK8jP-vrg$zW zY4`qGm-M=_hsQ3|&tJ2Lh$we)7avW9eXBlogP`_=rZhaIgz>wdw6|*0zY3@tr&qAU z4Mr3(_)Xi_NZtIc6_w%F#hg{|#xAGY-lvVfdtc5vUpQ#fTQ6K>A=SfB_0y`z8KTcb zx1u;$ccql^_DK>b3xK#GN$T*p_E29xFE`hj?F5MVf;sxVe>2E{;AX_#Nzm-AJ%6XX z>EOC%q+AVw|90*(-MyI)6-lK~=;)P##~h5QW{Gg-aY;xF=PM$SNa3L4s4xIr6MV!1 zpL?)$Ir!~^sRQUmse;ea>t+tHfZ4aZEN2FO2sVaJi1x4(hfc6#-{JtBST!`+u;~Bf z(hOvx7J+K8s9$h$dmyAg-o6Mry+-rsHd|CQ!})j=oZpfq2b9>MJKrjW~bqcq`pp`Fo?*bqLPb2VHwb)0paLF5pgr z;ep>FjDWZ}I|J-*0f^9A6cE1V7p;>ybyCpJqh@d+^q6d7NuszPmK%}qCJwZ72?jyA8phU}eB+jhzmgBPvJo^%G z{T*iO&x`iuxopkm>gtgXvk8-mGMt$s7&xZ;S&2cEN=Z$PMa(|=Q&9gDXvSGHPSe|J zXhaKt2aWqnPs}MwBk4S1MdrVQc*1~4P`$_1tdYiw<7@H~9tEz&Skg%lMRWP`s4zV< zvvHgMdDX=GG877>wRp9Z+xm*;Rc|pQ*7Ek-pP4Z$TdGsdA>Op{Da>H$BDq#xjIKQ> zcV#tUvHiL|rd}i>pr_^XW^+eI{C%$VVQ8&Ez3@PlfPf}lv{`#KC0op-IpBaW5Y&CL z2--RW{rz+D!g}LIKbgBamwsWl(HyhrNuEcXz|5H4_c6CQFF`Xca7N2=7fp8UmC1!! z)tF9GD%|&M0jqaF+0S+dF*#!X(|ohVxwD*XMgo#3Rv;&b{xe+V%zwA+-rQqn~!k`VQDQDHKOrDfqNDxIo%f zC22;g_Y=pJj~Bu11IFB+P^+0F6!73Zlj$Ac5E zB9cSCV9J%9b_mULdhh3sOA5cQp8x6dS`zz(5OmUPBmIaazpl~!G_bU3%E9onNJ|S4&J)XcNO>^FhEMG{`ILAo0Xm2I9xqwI(a4i zqy*toZ6q=n;eMS9Z7wdq0d_Rl(FD2`u5kO&a{d^guX>@N3Kg&$GE*_P^S#a#*zMrE z&d5xDd?x%GU{%mrZeN^Hr4Vcj69>_j2=&Y*GX0ZkZb)tRDT%dq*U54pWA&8i zs_g8$zL=J-hlc0c#ZtI_bE5UoN0u#@A}6NSlyu_` zbBc<>t&h+e^2?l24no81hNrI9*3rD4Y^0*PWSgEQWrZ)~%g)J(bfegC+EsSn=s`j= zT*L63%I(`Pc1_r?uzWJSPPN1g@w{2>^Qjg+QShjO0AqNL4}s`(XyZM^-?W?GE>b6D z9Hfd|Ou4X2@+t+zv(v+6Y}Y$dO__+7aZBDKlzHmgHr(Z|&5X)i$oB=+5exHNY=7v;udF@RQAIw&~Y@VWC$Al}&&CLaguj=yhEhq(Z z83>xNqM!*Y<3ZCh1Ddd2EmE!ft)3gbor!nJr`0Fab4dzduxqH+&hOE6fypz|VnH5_ z=u0vWk@$RYUWLrp#l>Zif@fEe1JgXUZ4IIcFDu?ll~A*FB|}SJ6StM2<15qJIz6jB zXKCu5X$QvW1`i&vJ8(K!?+Xds*5e%|h||_#-!gpB_6T_#af?1g zx%7fo-3EV!zyt2Cj*eK8$TK_k-{0L11F`0JBbdpU`FU$Agvn@@d|9ULTc$!VJr1K6 zIOiDlKhmI|U(O$lMXHhL@!AYNW?5STb+w|!e0oXV+}I3x{9&k!#jE9jDoeJMuBlJM_S$zh?c5uKEC+OZdmcpdM)~$B($Mf=XQ6KA*GjGn4{`*J&n=gLm{^tvb z{I3vLga3K`AHGgS8n{dUUX*8+{+qW^|I=M1yzR$5&VPEX@caM%=k^-=z_7=f+yds! z(Y)##NNdCh_%rn52YPxOVIBqgWi3jO*5s7tId(##<4ijQv=HYLtftV1f)uC@aiV)< z1n_fh!+#e?j7=y zGA3e@nhSrwmQ_JWh6g!>a)4?K2BkcqGXtap&&cLd7$aeRal^=c9EQhShaXcnHaF+J zfGW74pa7tVp*pXM6V@hj4?*YP47BF!JvXiCg6}4RS-MvF5&&T0v&ksVYqK$KcL;Y#j`)FAL0`KoJ*1?~pcJThsjrEp! zw?x;)qZsl}5>glGk6^pi zPh*;(Q6oNx4TAdM_i>Ws$8B%w`V>v;gbmmVmNizwpp zRJa4f{zBT}Q{?L6MH-T(KggpkmS8_n57>3ka!K($D>RcMQK8EbqL?2?c=|3-lBh=A z+8obo2O-n*dR@Skf405TmH{a;R7llKA|(=LQonCg!3;JmY>dlZ2RUf+OGt)lK~g;A z3>$pm)T!L`^z{0ABl=qAUvzYI)&9o<49`|D#$8+6O;ct*dx&N6+tX`GC0U;cn2FvK zA}rYrV?uUBkZ?v4esuDXk8b+l;GmBYIXQXx{*Uwe@)3VO0c{@ zk%8-LXVg%pD#TPUFfwZ8kvOeorpX?Mw2K3dg^~Ug3GamEj1mR8^Fx)6lZdJ*YQs}u z%ljm2gt2-I$x=*QoDSsbKn$v`u7)IXSH}2<^`dEG{mh#_uO#%tqm2g*u!J>R_)+J- zfyzJo;{66KJxz;WP?PmeN2tUL-bCUqikp+ekl&6)5f}rQfTJYPwHD^)y1Q1~?JIwh zFy9Uso<3~hNt@%n`mfOJJt;688Wcn_%ryKNQu2JLRz&a1o%iwE>r2yw|HWK4+hIS^ zS6mai62?ZkU3GN6i%2(t7+hYQYt-yQ^D|GtW?X2`Pi&Jvt`fj}iS4rSoENx^(3zt3xDf6w@CjoqBS3(&fb8 zo9=uznX?(PbDbh1LoKa=Nfn}icsEsHQBjil8x>q60LZ#beIi3t-auaJf`K;YekEv& z%*Zf3ScjZpZ}YqH_i0&kdsTP#iKdS^IXQ|aPb0Z4=%1Eoq(94(bB0v z%bVjhxT2lk{h#=DQqT{7KnO7oqvaj7W(^j58@~sYe}JgND9l}k5-X~yVg8hl{+gT& zXOT0~(4hHsNGhX^^L&=?3fxt`a$q5TvR8v-(-7n9GgV>#yh6faT^s)QgRYzY3h#7k z#6ABLyG*Utp}wXg1%^O{_pTG2j*bow7Z;ewKl}x(W6)x~&9C#Hcxak;jK9uj!YFdP z4(~aBoh!KGZ$$~Pgai~;d~ZZA^YK0SShTk0bfroc=y7^_Ii|)XonW$|RHI0i#|7XZ zi}y-^Z5UIvwPLtAms7nlsOeGfbBjEFLEvw}h=qR3gpw*}|w%YkG9R@(FOM1u?? zqoV_?UZvo(Eo>FF_^Yx~{4(sKTJQ-2(3_$+{tZyA3{f2-<=MgoOxMPidgKFp&t4T{y0?R=`t^?N+xu6VN{RZaN2@E%H8>fA>Pfq@ z#u* zQ_#M)xm;Ln+PJG@?3w;>Z3&q*PvKWvwFLCrqZ|CIHpo?5Ess3C{@hHes2~cBwh8=? zp{4D_H22MpQh^ndf}2`+2;<6^Q15HCjdbgle-OX7Jfe=+GLDcjD!A{uB;dQRz4GwI zcyWCahr^**~$&V3$kftu8S42s_0GUSRB=ivRHJE)V zIu2@%JFj>_Y#xEQ1mOj|=Q!W2|AH6@$8q%R-1}qgpwtJCO-U5cZZriB{cmdXwslD@ zOB!Vw!&s-|T$$VwNXGd(qhl`PQ*9uFNKpG2Vs%oO4Kv8eIdJp0m7Bx=L8z4TveEOM26L+ z_uMkBmO5E_F*L7i1T0JFx)mnQ<DJI9pKJH|`mMsk_ls5i1=t%1v`zmVM_>uq&G-HaO5r;)R+Zf2j zDd%yBh-WP+&l5xU4&r+C4-P3QsrwTZwcYcYn{cK8&v{#~qVjgqNK*-o%Wzs|CTGr5 z-ox)d%UU2{xJ<1QEIyFoQ1xnF2D@55<}d| z@o&je%wMc+ro%6c9m-K$=h4x;2{7+jW%<4UY8GcUQO!lG;x$UsZzuM@e5l3{Ps_#R z3DiApkQ@71K~w8Fag*6Ynx?4U0Es^c-zcou`F`jdRP(Bs``iPO)4uBg{ns0%n<)^O zIhHI^>Eg#>&x&}gc8c|VpKhJM)3@>JQ;mbT*JO^B?wEuHcgru^hSr%eAG2x%sFSFe zU8Ez2^}o;#MsxHB)r)Nc6kDi~Z`&UtKx@eW8IT|oVlv?y`Q(-T#@47M=?SoQ=<4bs zc!~q(wV-@qo)6*@%ARuZ?`$cL^x+)7qA0tZt*BTmwTEy_ zswr~F^`mW=*2UrPo;elwzja4b-r}d?|e(0MlzOVjhuj}YQ zjoD>yqfgC+_Bsy#)<#lj;j3R8*?N|t-B?cdnA6@s1qI$|R(5wAg6qZu2hu$bxdSgl zLEFN83g#9TIzO6~q7uRrvWqxc8!a5mBvfLqom&ihKVdR?u%BR1_Vc?9bDt}?>{Gh`63gC%l5+#?c zXm%|vdK$ml?u&?B;d6s*jBg>Ww#N7KWaN-H_Mqb9O!%H6YyzUOKu#q6dQeDAryiyE zV{`M3`5@v^g=v7}DIQaY5u`kjKRYFXkYJBsMG?MvG)-d{Vno*gloj${Ukx4PM0o=bWZ$G>h-tC8~pygEe`}VLu(YoTv<3f55 zX{SU3$V__Al^FJN=Q^7AwKw|P`AIk}#ecQY?F0WO8!I7oEv@(T7s(zsY_f;XN=@vd z(UMJH9Zg3|seEbUMeWC)ETIWp?*b|gS?NuBc&OtHx<%YS#0#-?)Eb*;xr`6U9X83R zVb=P{F|mG=afSOmrCQqbTLW=Mb6$~n^dXC`;Zei!aNWl^lj8Ny>EUvR%Jh=AjcBs4 zi5-cx`#m{?Q~u1DL5X@U=YSv$F&qH6$#IGj(Xy!I=GK9kyR5fSG8M*23{NsIf5f{T zA^5qE+P^gCzrc88DGIE8xaHj6vKpk7#8DKrc{d4*u{qjCS>V2I3q}NHnyLkEF8BW~ ztP}XS8?oE9>~BHXGp0<6XoLj<&gUKn9WPH$PnbRXPQWq3aPJL46Dh&3gyYc*Kz;OFOK z;~|u|nWHHlxna5(-&98IY8r#Cf&Wi8+UwKZy}fI|;fklBbBD7{Ru```%l zK0b$);_HEdusw@QFJxIq5q9i<-nQXJ@544Y$MAh8Pj65~4CkJKt}Unr?7$-y;RPVR z^r}K}l^?TtDl3%eC2r2?(Y7gi7bmX9sJPp)`)=1v{N`PGsWnrlH<-WZb3-*6(uX)> z-{CQYi3OSMX)nMuHHOG-Bz&qzPcDX*buVYU8In+ar@*HH`SUVDpT0GPSEz|;Z7xn~ zo6c?|hb)C}OZe)@kjU;jxsFTCm%F=uUPqZ3pE%(VXa7G2>tcg*BQ3w|FPbCR6> z=u}!^m@8D_oaeDDZ!|M8&nxH=QqX1;T4I5c@kJ&+khR;selvyewdb1|wdb#j#OeGl zX5~u@FbDZez0mazaom)dA^nLe|F^NFIYK7n&P@mZuzjN+hK$pP;m)Wkfy1Hz~DO zWn4GT1X`AWzrX?O==d@Jrt}h5Y){t;Fk@_s?Bgz8fN8zVXJBa~_<@B5dh)e`rw(fa zI%~y!KoqmQ-o2;0o0X>q@x1%8$Cs1zb5Cvz)wmToB)#08@H0l@%oLF+g_Z9XqD(La ze89EnP-@F)9%))rH_+6~G-WKkCWAAkHcEO)@L)q8yOV#dIoI03!MN1ob?AQ3r|@N| zM4yfFqSMV?Da8OXe?%oKglK+v`<4~Bc;%fAO{NJVYPV2rztimJ=6{QV;ZgCD#EMi= z!<%Y17urXSe5m}~zCXsYtMf^Gq7n~iknuJMugS%6>gw*_;lXk^gVBK|mZ@`Rry=a` z)m^?hXxsVZms@5IRsvW2z;Z&AiZrq293E4@;tfSA9KGguot&YJxy0-N5<$RUbtR|- zWU0p9P-#l%t|<22N=P#{pmG9sUf)vyt@&aTvNxlCz#L564Y`(@IyPK86^X|JRPxXp zHOMtl4M0F=`Tez-0+L%nXRDT~7o1JHfh15Gb*HfAs@R<==QPg>_RozZQf{t>5BRcz zmT6lpil%|11S>f`_owtU&pW;tsRnN(UWiBZRDbT*YR1c;EX{QAryUu%T(dHwAS^7b zYdGbLG=hb7dTNfL{4>5_xp&O*^-Te%B{(q0izCBwCQpdYa8A`6IV&LX{i42^9O2Dw z&L8A1;fLngx1~&DJ;J{h9*O631Zs$cBgAGLY9S-~Zh4aR;49KoK8Bu(tGcFgnyydH-YNK|c1$S@^>q(^6yp z@Us9S@`-H&zvyZKv9F>XL@9I;sut0)pxEtogmvEdP`GRH~vD5FV0`o zby1i3_8V4dAnig2X(~x2BrHrxMWv&&6NK&wV>>`G?(3~K^p#>wU>;_(h=12S)&!o2 z?mU9SDtjJ1=D5{Ij2~N>@^at5Z(`!fb=cq|UGA@<;V}Ipelhu1(194UOPo-y&HbVm z!;_e=Lf5%KMfZ+I2LnLU9)leC17|ft6FpM@BF3z&1am!EWq4< z2zUm}v_Y(a&gFp{%*hfo*js7h4S9ko_Aef?I?bdo0ZP+H45-*S&}Zc2*=On5X$*O^ zy@Q;zh*?RNxIQG%2MX}rT2PzFf_T<^WD|-y5ahGEoABDbUQu#@a)U>qAZ$RMvBmI{2^QXUWqVsO# zgj+@AKME9^8R%b^m6gq$pa%RJ>ej)N;j>t(SwGRFQgqnIfZvwRoy_dV$;0trJvDzy zXc-s?S~u_M_Jvb8&Fn~{U%6{Tf9L*vLAWoFK*8y^%PkE&Lg)pJNqK7VwqLx5sM~nJ zyct~_{3!I&^|(i{57Am>fZsDW@j=|f(*-uSJTk-Gg+A?3Ho8-_p_>l5B=$|1ZszY6 zOnR+epximgNo}Emki{&xn#6^s1Q8xN!MhPtb1A_7y+YhGIJmX9P?R@x^UJIwc^5%) zhr{okjJh>I&j+f6S#TvPf6zdL0#(aj@I(ULuxQ;=-oQ=~VPR;PeY@wb2{f^2*RzYn z`sId5T&Ak9Y=*og&SP+FEPvMOx1wfn=t!kwhKr!?-}6vWX52;NMd_?6=H-`3^Wp@V z-#`#UpWke5U|D$9yxwAIJcph1*v`;c-9}JMr%kMWQ233mP^(zDB9Tv(*G?N&`@)Wo zEUZ*yl@2F8bkl;iLZ#!-0dJvEaU#LC!61CV^IWKF0|AKkCs#z@2Tpi(?5h=#H)nOvWu~W_fDSOh`UtVjtufbYGu6=*O&AYA%C<9(zsvma z;ae*&Cl^-}Rz?_nd~^atOk*XqwFu>=sqRFwln=LPI87f>r6KoAsObe~9}XE!xQN9M zeLN!0GdrAD5=a(e>rHs=>aw+||91rs7x0Dqj&@8%Ay1@nn^so1HtOU8u-Nls$;enL zDN^i-6my|{;_Ec+a8zycOpFnQkJ?7Rki70U_pYb7v-)ZLkuWu32gk9uP(=aC0X9jT z3>so$qN4R+8dcpL4P?860~jHj1-pd0X5ZHxNn!%0U;73$qri2ctg$wGaNd~)T4({> z?ttiu(om$gqi}g0R5Q-M*1Si@YR~JdkbG{hFo7|+aeCwAx-)=9r>B1sR31EW`d9g= z{dyg%3_pK|G;{mM_;*v_3N5+DT{tGL18ye&XkBeBEgzQ*U-GRtfNsTG@XuBUE2_eb zPO3ZrbhXrLVTMLB)K18KNr9atoW@e_jCoipjOxH+109W~uY-C7h^;}++2>xe{n1+5 z6}JU>o-6!pc*niW8)As(*#KAl&PFxn_9z+-zuATF499NCO*6S$_`OtG5pC&?MB%+j1Y=44kL5Zj~T zgk?1dPo0l){&-maz?26u{{MHiXCm6E^KwZ1)RQNZTw_0C9dNL>sRUju-8V zske$i8cqtHr0P=FKMzZJgm`#nLCOf?eBa~nEGV^+Bp!+@N|@P>BsW5#Ew9$zcMtcF z?}yv8(141SSx2w{oQ<%G7xnGHvvK1`AjQ0VOiRrIwkE8?cDQ#Lh0)R0ekfLhoy`>n zd-6T`#l1aGRBe&&47Q3!%5+8CaVz77Yd0vRLR|+eXdM`>j@!zEE$#03B?W^YrU-6w zA&;u6D*v(_6xf_s-Fr!~A-L|a3&m0k{F9}+P#JRQjA=>3N@C_}Q4S0RJX1p+Kkl!X z`RMKpay+BI&P=F zCV!Zz#oDZc#bqk{iLmYScJ;PQuJ?`yAKsd>u@Ladw-xw#nDUD~(mN_U&~Yo7g6WW5 zh=Z8D`8;S!z^$_dFGHiXehsx0!`DErOUU2|w*+RBuduq6LFI1l?7q5{P4p#wWdgNK@(sv>#3v=?nTFN2)~er{7vQPi zGL!7tRDZUiKv!_1^pwxGjAcig2!23>M>WUrJ0iCPa=pGe1#> zs~1w7MJG^8Zb7e%t5x|=oBuhi828DjS95mgQ_s70^r>nlL}xyRwmI)a!|U5!`xeHov|Z&QlQk?UdyC4!n|y6bn2DnsIcWlqQRKZl6~7k^7i6fIyC5DtHC6I>;{;j zGv^%)VDx>`Yr&2?i=-SCD0OnntsRV_s6MnX-Pm}tH59&Eq2hRmud z<2?(S#2VNZPUFJ(!9^QqudIoHOlN~ZL!)3Sz~g7_gT?S+hbu(`O5}S&ND!@P9XpY8 z1kt3l&YZ?vQAtTD?X~eIa8m|;jN!_IKRNRm?n&i&b{QSYLaqDryw69OH)IzO8;0J5 z=yu!4GbhfdUr~U(br_X3(e%TSdJ7rQv0c9{!|WotT)XbvuLE5WXejsYWyLW(GZ$Cr z`H+Gct5Tz{g`Nh-!Y)9n1%B2Y>Fu_wi(7JY*o5p7T?}NrA6&+Wx&%>Y;D< zc$)7H*9hibWBY)9d(DmKwHdp7w^P@{>12++lrM|}A4%-BsPRQUDThE0 zN7q~}PI|XwKxdfHDMXOcZO!DvSjR|lb0T(RDxq4s@^D5B(?jL?d#WXxLVD#h%rpS( z4T0K2^{rL3MvbvG^K&2xd4jqwP}PGkd142B7Tan$I_`TdyqezKQJOxPVV)hJ4M># z+W(kn>0DHc(M4}TpC4!=Cx5>$C@hqndt5W~5KFCx$m0hU*4EaCweF5D>*_>AL?F;Q zMYP#GCWr0#(9*}p=T+C#)ug8|5!@P-#NXH3%dR2`)|#XDCH!{VhI`cC<(8B9gFSK2|k60FMHPzL?svHy7?NK%9G|C)S2pT28FgAKtY8KK5P4 zshHce8Bbw1su4lc&`3~R#cWz=mWnRd6@pYp2J?#)0{ zYs<|S4z&H=NgRx~LUruCUpPMSMXwWVk<9ZRkJ3AgaXaui6vTNdj+=*kQkz^&?R!Uv zOQ!dfyIOks`!h3^aNecCKVy$QxBp8GW4J`1hIMP(Y|Ku5CVHf*O6hG%N8~>#pU_Ci z6#RQmevWwa#x+mJz#!RZY87bo1$w1-=!uAYp8d1hKC3DeH$_C$ z_!i{VxVgD=#bJUEs&}9V85^g;h&~yxrQ|`d49ff;jiBh}pUTC}{lWE2>Q7yezC!%F z2qN`6@RsgU(2`l;^#|HFC@R9d5y+#?-~RWG8!-gd*+za{9TZ#M-@d2ix37+%i*S!q~OrLmU3e*>+^ASD0* literal 0 HcmV?d00001 diff --git a/src/Serilog.Expressions/Templates/ExpressionTemplate.cs b/src/Serilog.Expressions/Templates/ExpressionTemplate.cs index 28afab9..0aa42e5 100644 --- a/src/Serilog.Expressions/Templates/ExpressionTemplate.cs +++ b/src/Serilog.Expressions/Templates/ExpressionTemplate.cs @@ -46,7 +46,7 @@ public static bool TryParse( [MaybeNullWhen(true)] out string error) { if (template == null) throw new ArgumentNullException(nameof(template)); - return TryParse(template, null, null, null, out result, out error); + return TryParse(template, null, null, null, false, out result, out error); } /// @@ -60,12 +60,15 @@ public static bool TryParse( /// A description of the error, if unsuccessful. /// Optionally, a /// with which to resolve function names that appear in the template. + /// Apply even when + /// or returns true. /// true if the template was well-formed. public static bool TryParse( string template, IFormatProvider? formatProvider, NameResolver? nameResolver, TemplateTheme? theme, + bool applyThemeWhenOutputIsRedirected, [MaybeNullWhen(false)] out ExpressionTemplate result, [MaybeNullWhen(true)] out string error) { @@ -84,7 +87,7 @@ public static bool TryParse( TemplateCompiler.Compile( planned, formatProvider, DefaultFunctionNameResolver.Build(nameResolver), - theme ?? TemplateTheme.None)); + SelectTheme(theme, applyThemeWhenOutputIsRedirected))); return true; } @@ -103,11 +106,14 @@ public static bool TryParse( /// Optionally, a /// with which to resolve function names that appear in the template. /// Optionally, an ANSI theme to apply to the template output. + /// Apply even when + /// or returns true. public ExpressionTemplate( string template, IFormatProvider? formatProvider = null, NameResolver? nameResolver = null, - TemplateTheme? theme = null) + TemplateTheme? theme = null, + bool applyThemeWhenOutputIsRedirected = false) { if (template == null) throw new ArgumentNullException(nameof(template)); @@ -119,7 +125,20 @@ public ExpressionTemplate( _compiled = TemplateCompiler.Compile( planned, - formatProvider, DefaultFunctionNameResolver.Build(nameResolver), theme ?? TemplateTheme.None); + formatProvider, + DefaultFunctionNameResolver.Build(nameResolver), + SelectTheme(theme, applyThemeWhenOutputIsRedirected)); + } + + static TemplateTheme SelectTheme(TemplateTheme? supplied, bool applyThemeWhenOutputIsRedirected) + { + if (supplied == null || + (Console.IsOutputRedirected || Console.IsErrorRedirected) && !applyThemeWhenOutputIsRedirected) + { + return TemplateTheme.None; + } + + return supplied; } /// diff --git a/test/Serilog.Expressions.Tests/TemplateParserTests.cs b/test/Serilog.Expressions.Tests/TemplateParserTests.cs index ee62d39..b17b314 100644 --- a/test/Serilog.Expressions.Tests/TemplateParserTests.cs +++ b/test/Serilog.Expressions.Tests/TemplateParserTests.cs @@ -19,7 +19,7 @@ public class TemplateParserTests [InlineData("Empty {Align,} digits", "Syntax error (line 1, column 14): unexpected `}`, expected alignment and width.")] public void ErrorsAreReported(string input, string error) { - Assert.False(ExpressionTemplate.TryParse(input, null, null, null, out _, out var actual)); + Assert.False(ExpressionTemplate.TryParse(input, null, null, null, false, out _, out var actual)); Assert.Equal(error, actual); }