From 56c8429d6ed0c163e0052e30fe39b82941508a05 Mon Sep 17 00:00:00 2001 From: P-A Loizeau <p.-a.loizeau@gsi.de> Date: Wed, 11 Nov 2020 12:18:14 +0100 Subject: [PATCH] mCBM 2020: Prepare reco macros for adding test - Add STS geo file in macro folder (to be moved to parameters repo?) - Fix path to this geo file - Fix output path to target local folder - Fix name conflict between RICH and PSD hit producers - Add delimiters for MUCH, TRD and TOF local reco to come later - Fix lines ending --- .../beamtime/mcbm2020/mcbm2020_reco.geo.root | Bin 0 -> 42233 bytes macro/beamtime/mcbm2020/mcbm_reco.C | 390 +++++++++-------- macro/beamtime/mcbm2020/mcbm_reco_kronos.C | 403 +++++++++--------- 3 files changed, 408 insertions(+), 385 deletions(-) create mode 100644 macro/beamtime/mcbm2020/mcbm2020_reco.geo.root diff --git a/macro/beamtime/mcbm2020/mcbm2020_reco.geo.root b/macro/beamtime/mcbm2020/mcbm2020_reco.geo.root new file mode 100644 index 0000000000000000000000000000000000000000..374443276a0b577ca7cea020876dc79b11d57e98 GIT binary patch literal 42233 zcma%iWl&sA)FuwWU4y&3y9aj<5Fkh(KyZR<7~EZhySoPl2oAyBT?ZfZ8{XYtTU)g| zRekI9=|0bS`t<FtmOIXlj;>Hpmw8Z7P+y^-3c--n3y}pO2^x~b;2;l6D5#)pC@9JX zDCogTtBiPitm9T>9B5qR?h8oi|JTn8>K#bQQo|k|iv2%ih&L!Gcx}0F-!0KxEnQsM ztSuecoZs2}A6Y2)cPmIjfEfIMBr!<(&l<v2{r^QNum|E9#*X?wd(r<qufN-)Xv<qV zs+c*LSz9_I$w?|`LbCQ~?*avch`pt&^G`!%q@RIM)OIkQ(5JqLK6pBJZ`ld~Q_>$) z6dC@(Df~w1L}8GXC^wJ&@PRju5GIJ%&cN-=uBO7y)cA?%wESngyQHzf%Cb6(T@Bzo z;<e`><>$qOH@BlhZEcS@e=fg=mGk6%j`z9X!F>AGc|BPruXQEA%Vk(xsOdx@Nb5kk zy3}wzLG_AYt1`dYiq*oKub4(5@Dm`vt8;-pl{4&IP@Iaw9qT1P00ra@TmtmSuOfl` zvH0bl$$=`E{$T=$pcX(T^?F1r{B{jii_A0Lwl1JYW|bI30C2(bk7-5Qp2TdCeP-Mi zc^2AS!0J(Ly>|p=gH9q$`Jb;qC*h{-&lhOGF3?Hv#(AqBo|EbG<JL1C@CB<Us+F+k zx4=e#C!t?Ih$QfY9xE2;$TIO3<N0wr3~LBeJS2@ehMFw4l?((2#GuNF-uRfc@ynCV z@A`)y^Y#nYM$iN1Gy1><$20m+4O|cPCG$WHY7hKFRc{S)4>iard?Wlp6ys48%TY>% z5QGA_mw3kBh6b4SU${N5120&$@kX}tK8ojkoL~UPQm><c3IKnuF*cXd0T0l?CyG~+ zZC_C4uMN~^t8EX#b3KY~Y|aPg*8oBvp#^F=!7LIi@{k8B;5F7p4B?)~xs39S2Q^)# z+e6h*>{Z@#?-d66EE4^SzYMDAayO}y7H|bqTCG`H?epP~`(fA$I*1-{jp-lKO1+JN z=^@<-?}PzlXjsAF9J#pb$KZ0J%sow49~Q<Uk9t5T-L56~U%lfo|7%6^H8I$0?U&cM zq_0CHwVbGfwCH}`>5BSYmN=E1=-%fr!rK%V*zI7fjX+O)Z6XmLcrwF)u$o?Jl*2i_ zsS12ptR6rs5{Mh%AN&9Zq^A@^2c-k-uyUhY5kRtlRH|+`kU8*z`aJ5v1z6jIZ%XA5 z`XCN4t6}Yy&qBiqs`C9{G-?m01!gy2T(#by{DtO=Kr&(<`Je?f#_S1e#V|iqJjVtS zP@DXEkODRVCS^K_K^K_hv4mc!Mq#b!pl^T$i5B-zW9&uR!2jFhO`N88$;p2Z2=&Xs z*$*n-h1~dupw+7rSusIzie6=@v1Uh#!<{*LjPXESa7N^h`YTSKD@{(g!audg@{(ef za^LL76L?)O?t`kk1e!Hx*)$Nt2vtZzLQ3Bjj-ENKzkeYe?Lu^FueVIM9E}rNVR9=- znk8ITOdqdcG_I?!Z**6fL;fWqj}-2PKjg0H5Z&Nq=2zTY+*ld_mhN1ULf)f@o~vtq zfuYFo#0>R=!zW(=Ya&zlYP#^&+5TL@{zJ^^rbk@tT>r>a9HEH`j+@WyA@^E)p%7K1 zo+vB7MK++jRNnhyz_ZeCo?F`lA8cw^$a!LF&-qY_l{)o33aMSQ%kJ$BPt^K!GHwVK zP@~rGs}=iX9u0iBybocyMT=vrvN$uOMz;_Mo{tf{_|-jdhGDOHp;UsB{}%h1j_KFE zV*d~B*sb3g;;~z;9u;ee0Uu_9_YE<SXG*c(R8J%cWl%7vqM1|#Twwd;emI3Ojj7~w z6q9^YaLd-}Ds0a$EJns*gob7?!<%C28U#KQZ{hev$o(WvZDDstb-}9A8WUh~tJXQ@ zV=U`u`dw8T5}I5zP?p>q_JP+Vq%TBAO88%?4DDr*LxB*fUtNi!&vT>uBww2#vovkv zTN(53{)WFG#fPIBOjCxWk^+HdjdhOLh#VahQ^H9zxy_vuU=ttfPObuh##_w{*n&+Z z*{6zU&LKmk7GU6DUVAhWfyZ0~J101lS(*7V&A9efTqD`t;=E)5C*k3AS~#*4|0RQ! zfwiKN!^snUX%Qjg20t(uEmVsI^9oqk)ORE!pxQTb?ys6KS3@xGXMk`uA?D1cRL4d) z%nmOIuA(q={eU_6;xrs82D4AO$2pI3hZt!gt^-*6WFV|o&S-4H`P)`y_&6eC`It62 zxrmo`PKQ|unP~D``}ddhq5Fj&w;N;=u|C&>+|VTZQmzF%E?C5}L(B3DPyfCROuflF zT<cI;6*I~#OiAHN=FSkn(2Ao>nOz;>BWK&}xQ3groVP6!@m^r{%EeE5>zOuPhIH`_ ze(f|H`({+*$8mB>z>~q&lcLt8Sn|(N`^Z$v!6m8slzEr?)5oWB#dFp6f5R2K13J8N zq$jJ#{z(y;+Cz>^Wj!>P$OBFoq07NCGvm_61_nCD@x8K7u(zNvn!`jLf=zws_7Z_R zy(uZ*_QKGV*1A|L72k&y@B5k!AG?JsGjm_XuXtJuk8f^%2(wMP921Kb<$z2$L}{Q? zz&3SmM5|Fytd8X?%wV&9WxMZw6*KRbmyA@$6OOk#A}BEpyh|JCZ}R|#FZpu1UcKd> z7taj~f3=FoOW%g<?{iv(Px5Z5?;@@xYLxss1@9EjEK*So_1${@rFy0Nd5tNnt%cTZ z-;SwwQWZxYFm9?rgnf&a0?m`?a?h5-?Qgd+>DyCB{9hSNYETE5t!~Ao&!Fcjqhpp0 zUk0?A?h_QnrRPj$w{IuZJAa#i{6>~ZMtqv4CFj-=dYsFby(Nos&$X;HCpbsGq2bX5 z{oy#@V_G?pRvoP}9&p{vrpt1%d8>*A=7<#u^FDm?j;vp^gD+ajUdje0HsvwQeJI0E zAwEPBGeo&~wcGV9Pz7<z8K1mWtT1XQH`!;^$>Vn1qqw60o${C*OwC(PZvI_eMPvkN z&?f5Y=z94fsyI1&h^;GFY4-SnoE&pqp9dtG8Nv!fPx0O!4X?{;UiRkpWE>DHoW~Tj zV*K#;)D4cDzvN0CpdP*y6u>ILq1-^@A9f3=cZM<UN=OkP4`+T}v2oaliDg1JIPGeo z+n9en9DgRL`ZPi+_^N^Sfek15TMYgE-;sMYC9Gue2c44NZwmsiX%<7_SGfIfsl`PY zRBG`$!mbRF+=4TCJBw=rR9~S8vtZQUs#v6D0z|c-#qg!W(XgO@6~cT^sFa6e_yi4D zg2pX|S;YIzfY+-E7+{3@tYa-hgnA3*dTVg}rxq6q4L3e`s|?Cr>SH|e7rkg|Ehv`T zFWO82##nMCFpEcjOc<e3yg2Bf^YmM0gX{jwu)RaoX+sH%ZvK}S!|Sa^!qJ32z4>B} z98g4dnhmAi*DxFGtND(l$rO-{N&g>K5-yaIXj%ruPl&J9dv(M2>dN;}u1l=9U*!I? zO-24f4@`#;^5S5Iml&lopWzdJ$9MS;-{HN^m=YAjJjCGb9ZrDaoz3+-+-C283P?+< zkr4lLNcqn1hYgIx-uE)Zup%h^<3Inkl|=!*b|#qmonIc$dv(iqhqV;&y_y&!qEIR} zWr%q1rnMaJ;F15ic6xXHZphsC@4fB%DKL2z+~za7N6-)SY{!mwDOY`T6e-?NpiXnF zhd4AU8wq8JC@pTn{sB}3d}^nfs*GnNNvNf!(9r%gxv3<fi2(H?Ok}yANKV3J<v2*4 zW<>&Ac#<wPJE%pa3bLQHB5KR^6_Cu?06UVH$en7|<-pNx`(Li${@{w-?X5(GCPpYH z;Q$>*s35fM!j(#oSVI5DOVp2*cThaPV@^zQNigwYD3mi}sG$B8$7f7M?!1^#noVtA z^~SLp+0|bq9=vcBn%E^j9wyDEmJ$7RHCl=Jt)K;{uHYz%_Sr2<WAL>@-pD=Y(tR^n z8klqtzKMCH?>6SQ8b(vuHU2)Q0hx6kyT$J&c^+#7EzDL)Nq}om*jJW9_om?;J20)n z54M!QOw&7df?K_>QWMtJN2p6yXq;ibeQVgOz-M9m^V*BY918qL>e)&=S7hUzw)Qf} zbQ{iC<|q|T1|_c-IX|$9=$Vk@;WM>}F`4-=nCoiLTFb7VHn$w?@AQeCZtjWC`S7!A z<rzv_wC+E4#r~7w-9MVrJ|6C8O5=lM>4A?)P{(5NrT!!mYf3-!eoUzGmVtMvWjME| zOVzl`cHC!6lx(w0QcQuJ{`6&TIVrQ&X<6R0qU=kLmx5vFn_HT~+<?cAw)MGxC46<E z-0nvK57nr%)`;pJM{#RM&&xeld16C_`-vxnp`Hh34DSBRwgklo2N|<Y!pGM%O%qyQ zKZ;&#y!)WN1=Ag5wEGDY+1%2K__UnD%dC~UyP5rSFz8vf3TT}Q{&eH~+@1-&P4%I! z71N09rR@a9GN5%am~i;Hjb1Y3sFxNl9?3^U?eiw8p4n{bW2rnLFuj!hTI0SUzgvWP zL)p;;^kbri<2q(#&$lRcxq4L(TzdBP6;YweF5+TM&vn%8h&$=Ymi#uYl@8Yl;n>b+ zHuO_2?hm|TR{t9f4`r%>ZxE%*aVzPqo0zTeM9sa%iozKJd6RMUT4`x=jKTc9%Ddk2 z?p?1YX4^sBF;LiCd12%`>z?(tByUgOwBj@Ce(T$juS+&u-+ghZvEt-c61%Kw>j9y1 z{N#|h4AFuh+E)VdrtI1CTaA^ud*1}ZC#lg#lY@fh9iOiE+W!CPH<WEhAG<f??T5gy z5Wi)jhXu_Q7hVcg-XBwLNg?E%UgO?tV?4cMU(hvK`igHuFrGEuvB|FAv3DZ8LK=UJ zKKk{&!zBI(v-b{Dq5=V5-+Xsj@D4Kh@D5@iTjh0|a{H1MyBu@v4^b7~bwVQ9&7VFC z(W;R*ksh%Br_F!YnkLM)zr@6vJkp04B{qY@qQg!2%6^iB<HSGWk>5V(JW+qdjDIwx zYtjqK3Z=TdoD0+2i>j8ND^|@Kbg`^FFuZ+xse9Yvdhu5&d8?^;;lwyN=jGk#^yr3) zu{$>$#?y>0cDWrAy7$_MsxO{-TUdBa3v;<|-&Q?3QXO0)i4e977AEp=WI9jsSRQU& zVQJeDruT4UJa?bS@HKL3aWNdgA6Tn7(CAx^_b6mPI8#x>_f|FOClA%=VJ_Q=5IR>Z z2h3ii&x#}qeYd>yWnA#AQ88T=7MRz$p8T0Duoth3&?G*wTf^HfKL1M6rlQRpe6$XI z>B#hLW;x?3z|z3Py-5OLOaMO7p?@3^F45RXJL-(flhL+44th&El;b;1WL2(@5kY5G ze{2HuRzaoDWo^EVr#W;#_Ljv!|KIqi`@5MDJ2JK~H5!<VulN@(9-v+x3W-)l`>9rj z@%bXPhQ~ZyUfF>^MN>MN2%lFY9{sZ?$b<W9+h18U7W~kU`RUKUN`OV+_V)fVn1<vr z$V=)Id4jp%XjN~xE`PN76y0F(Vd8V;`H+q&vE=lQ2h{Vz(YAl?{va7{BEKS~&Nqr} z$uQnhh6JL#U=@+Vj<i4sxzNOFCGGRag#ni=@O=l+?^UV&>94Zw|LgXR<*CPD;ln6` zlsc5uL*h`7`idQ<;_MrB3y1KVn1;E(>McF_3w|m0(ww^`))p=L&Q{nLGV^KA2Tr`- zuNMOYz%FzVZFF=cS-=vd0J7ObEy8ikj@25}nt?hToIjv~<T-Ud8`IdMJ_rn-OGWVt z?`CXCOdME%Y3y3>##+4W==(MIm<L%hoPKe%SINTCfYO(=ZzSL!O<L-qeRLvDP{Ltl zm_qY6CaISNpg-i5YyXxKf!QE!Q;j)wZ<prpVaSk;7=#Y`>`Q0y8hI?@jFRXzDif~4 zR)_Y$d_>7j(TFVh;QZa~V=WP;VHkxEC%E}}45^J0DR=Vq@OTW#UJ6spm>&@;U2&QZ zZp%V2W^2oBnhkENzlCmy`+7<YZfnDcJSHHHAn4MMTZAS~1D#X~bN#HF4Mu7RGlVtX zwO$JeW*xbYJ2l@0sgET7=C=}3U(b353_jPlSqDm_MNIuvqThB%eZ||`NJwi^m^tAz zVds=cvHT=qQeP9KV=+SzsX=k%K|fa7e`0warYE!S<0U)`Y0x5)IjnUB{RFHvJK$4V zN*s~~VXC0}N@0>Y^6|l7bc9jJ%!GAQB25h=iQJ$_0;~vLq%mJ_=XZrT{`A|qNFYh^ zym4^AL5nd3eY``G1nkozhEnwENh751atOdt8hY1RBf%_JwvUORevp*tAcFo)0k^e- zMnXk_`-?*6L>xDiA`b&6Fl-wW?xsLsR6kQ%8Z-ZP?^h_KPz_y8wwIboPC}vYv61?} zm+MowI;zKPuTw9BAUXw{{}eln9HZZ#I(BCil8RXL{nUfM*w5R~zvk*Zb2Z%Ug~0Rj z*S;3mZY-mz0`vWE`#T9?CrgW%AvX5Ct(b6)(x5RBpcH0)Q>X}>nO5QY-2<e^H|PT; z(qZbXWlBHrJzLNvjp-0MJGx5Gocjnka>a(n3=FfIE&M_@B_G9woc-}VU|JBAxq(?o z{l{8INKCS`@PjbN*@_|IYZxb@M4Eo?_k%orX2&2^{G4@}q&h=2t??|Uj+e@iMDQpp z-7*SvRit$1dZj(>BJgxNb9H<-`g(*k-vnRyLH<9Jy=GlSI(f4zth>XCB`$-6oG_4t zF?z0Xdm5{6tA@GA*=szQ{O;8*M@u^Cn{U%UM>cyO#9u)Fc|K2i<PiT;V_FTua~2XV z5JQr(XZOSPCB1$7%Q`0hvGieJgfQ2TzE|)Q!?W$9uw)fXtg11*J9+|Hyn9*PE19HE zGra?rS~*UgfHe#1-j`4*VVypWzONpD1k&HiDF)Xcm~zU^nN5p)%L)g$N5!igMYXS# zx>%|oB4cZC(q*gd;tj8hz&Ar0Z<Erdx?3ORy83{6f4K_9L}=aqBJh`lXd)t#J@&S` zz#XX-EE_P7q8PmN(4t=W^3!AzHo;Iu1!@L;LIb@BZ3o`knNCO;<4cGZpmmEhI5;32 z!$Z%`7)>eB@>%7vVdUk^hpdNk^TN8xLfv*(duI9}9EU>BYBlTaD7-lll@h?KtG%X( zEjEb3-flx3E0}6DVT?<3(FAzqs!=u$w^-+y5KDCN?}H}<UB4h4TSCv`wB$*f`uZXq zk3b!NaGbKn@cNo(LM9>liU%^uMxAAbDFusDHm(SL&8tSvi!sIvy*`FIt|O2ce)<b_ z+~tRO?N=s?FkuH%DnG{wM-O`ofx)UcWTjZ)QeQw&$1sv3Z+{Sgy)B12-qw69?oC0R zt$-~>IgkfM$iu5&D3rS&?Gas>;7EwZMZ8Qqa;w*%<((_VFwO`EWfj1ddT*gnW8`Wj zP+nNTly)R2`91`p&JH1{w-6Kr7ZH`lqU23bQh)RRj&Qs)qqShMOs1Ke9QYV=Gs~$U z$_49Y>}AU)STiB<k_lzY*mQ+DOOK#FN-Qi4d#eCFt7(KjF5&A8)igW1M^vizAumPO z*&N|`13_I0rHcmkwhVgqpKxbV;A10{?NPdow3WX9*$qU*6Caa!>3}-6Ap=K29c$1} z>FN28#oebv&(_n948Jc1o4&(ebE)T&O0XJjIuMmkLZGYsi#sRL@=`=GybiwV`{oiz zuzHJviAw#+A;RYc%RDjh0K>bxN9(+93W&h-jgz}_l>oxlgw6gLt)QDBK*$i|3DTuD zT~A6drF(z3w@|Z8i6vO&d9}FIP4OXuHVH%^g9t7z5CID!B&2t4C)2rgW`*~bO$G++ zh}sJ6>rP*c5e%_isr;GHxoK62wDno=GSeBqB7GRCxki*yRQ@^jvmMjTHn6S%+4Etc zkWkb*rJ=OGyt1*r5U@thf4y@Yxiam-b99?rj1kf1a!hRHSDT%!3e2jL-CaKlKEt`> z)oynRD2F9Dc(fl^#V;5?E2?0|6n33>Aiwm7^Jj4=7W|Q7T;0$|{|6M<LfeGrLXfJf zM=^6+Mm3|eO=!VpjcU4%E7+FgmI$Ax-`3iAGB$1b!1h@~<CP4YD7U~?$;diJo+a+* zdKRS96bejN%EA+0Z5--M&DjZ!9pyhb|EV=}!uPx*y;+EsWhq)DnAuT|$}Vo4C-ytX zjes)=z6!UJ!#tGxK2ym3&IKTjcRGUMg<%fyo4ba`*uX$LI=6cM+tXek>^wZ9|3&Zb zWJkwbQb)(^?)bOL8I?+79l5zS9S(!Z&spS*69*9%{7&-zOQ~4>6Ust)fW5KA>=d&} zC*BE@h7Gx(#z21To!n6#<I_+|mwEBmS*Gl?n(CPns`(7Bx9lsN;K$`R-8nB_(Xt+( z@0$U;i16_vH2rJ^yZs6Kk64ZSTmB6}i?F;DCQL*E4{Uvnkxr6vMKi<l#Hd@6E%=&m z=mA|SZIvV;JX@7NFlut~0=A7xqKk@)f2Xv>iS-c!*y4Uo2VGVt2i!E_1G?vLL|mJ( z*fB3;8=}9ed$MTaj0!XtmEJ6_z4DS^rdtY;@hBD_JGqK_R97s*sdd{*lNJ;1E@Oa@ zD5od37bg-cHZ=)5a!28&1PP<9E*R~3NXX$3^o52JRG8jegi}aP76l2{tzH5b|F+LE zBi8={IcUV}>iqdCB>xYP_N+jvphGH5pe21yH8R7>D`>s~GR?4B-Q$%>E_6xg=tQ_) z+Nn9^B@635Z(R_0yZvNRz)7?_an74@dPQ7HOX}L+P*F3T!A)mGbS(?c?}4G#%w|&i zQPWK5GYe4K_gZ*MeIz!bj3m7$PHo&_x$tP8Wc|gxqgP$2Z=&0VkLF{->k>cyaXQ5n z@1ROMIFnjAX*hs$^lv@Ro7Zfk_rs4m6L-?w%Yiz_xoS}J)8(CcOi%l3;Gl(Yv#rYF znQJwowobL7Nqmz1lOtorooW5xNAkrx!v_~ZI~^m#hSL1z%J);oK8?eD?s>vDYt||1 zFM@=k8gF<nFsp6`9hDeAetBm#t>}H_YxsWjkddLuWY`fu#-I0n1aoTms0zGXQ{HL* zei)8TtZUUok;RhQmQ{yNrbaPbW}<1Vp{=fI^J7P>%IquXQq3cqK|Mdw7*UM2PLc^Z zA-kI5FB&7Mo}2S4b;Ki*i=ait061`aQE7D=%u|%{4-6L*E4MLsI+(e<8dxZ|*+%f) zsJU}(sZ+gD=VQT;yw5|rdGBwWi^GRcJBRwQnKwTu+<bOF=D~{;<ogVl@6n`%=RbH& zvCFM5DcP3mVwP8|mBzF!iyc@Nbq06Gj5B3|o(cH<YifAy#P!CAgol|mzuC)<C;U_V z7l~Ji6%#Ji7BwujRjujr%XV)@%*5;2qvmeEz$vuX`!8{%?}o*0UE9v`WsrSK*F~pD zI{A_=i($0?!`|COf<kaip#Tql-$ex5an`@)vvGrhD!0=JZ!CW)F2}~uwpB-h3MGO{ z#kxqjmLLaVhU#mg{x*i_!aS)=-8F`6&R$}o+KB)&-$*TU+<4S&m^V)?uA^=l<#v+v z(HCXKFwLOJ4>Xp?CN$};lXsj3VKNDQpV(QN6@=)BVB*x~@Pr+8h{g#*(<&H(CuBx? zFd|<v12!++eA=_B<2-_6UvIJm`RD5@(B)a=T$NQc6^EPRWVP<#W*wGwT`TSB8077_ zCEwo4E?fpp$}RjEWS%QIaMlc6gG=VC;C))Hl|KX@jS!gL4*S!+{vgaHA@~k5ugepn zzmwV<<0bIDqS@&3ed@T5>0})H5_jQa-1MZa%TlASq0}TCZ@E=U%F#qTM%v?lx0^n5 zFQ?0+bj#qU>>_c%ayNN;f8qU2YqaaGqtR{snKw2v^GdyX;`f|hi$c5qJh?`!d$c5X zJ*K^NRFs@@%D02+?P<OH$Hb@S&caF{<775x&)pvSF7j@Z1Fql8;Fq9($J1XAb9M)K ziWyj!5#g9Rk^Fq;#n#E~eCO|ZUncQf2Im=ktMMNz-54TWKc&Kzg^=-=Fq(Oc;Z1J1 zfksO<E@J7?2tB4sD<+@Shs?ZAnbr8JheN3*afdEeS$)f0P{NnnezmP$XvH#BRkASM zxB)&Y<0tHRjQo4hR*)>V5PHq6CYb%q&^<!``@!~?@i_JnFl>yiD+(TNU0Su~*d$K; zWpWPXs-a+x;NqvSz>$CS57oI}xd!$Xf)*Ylwif&-C}3C@r^(YH<Skrqc{FRv++Yk+ zc{5d{t;MOi>mX_|Ndr{zg3CUxLUDGW)WQ|~45@|~Q&H`HvA(teAQk4Z?X_jwt6@`U zlDe#aH;k(8OD4Cw6lq5>(RM+|13LE5`q%&|+IkSr7;I|jaldDdq5f3e>T^Bjw;6<W zlQMlpFKJs9iLC1Km6v%bTj{eRzMGO1!%><tjj$}_+Xe+zdI{Szc?sL}7vktS<QLd3 z^&UFL%CA;Sc`ev}DtpvGd9?OBEuo2`vzBn*1<YV9PmG^O)8Kz^BYx3x`$tJ#FQEAH zXgNIhIXXto3f41$5E(?V(?_!^*`_id?789!$$@U$I1jB@lUs<<)tviUKFxW?mPqaL zJoBVq$>k|OS1R`}b`}(vt))!XN*3d~(tM60@;a$@ckACj&cf*`(X}`;=$elEys(#S z#rC|n=EyDB<oT7e$XQ~1fuz}5Y&ynN^fgyrqw)i-5f<c1@-e_~!Pa)rNB-auZsN54 zFGBWvqQJ$y1*gBVx2^KXSVwqxbqq_TK66)lc4f1(@vCL9@{!d-t2+7pkV)-R5+T3l znLIN7i#<WWSJrV#5Hsg#dvj79$y7tf(T72Y*T6cXh|7>=ME!=aO%jh9i`0#fR#=yx zk8MkQ!y;DP>ymDat|HHgH5VQE3T#|FQZK^3&Ez+)Nw&%pac=JNKJ+e5owE9d`5U3( zi^a3si{pRzGGNrl=D+Zb@*7bvhAPV11x8jGZJN8dAJFHR+AEz#f^~Lxe!_O;$_%A{ zt!5cm3FGn+(pi>+il{AEmvHR3ybv$bdJsY<G-#CJ+Cw|<)XT=P3{!=4%(7sIZ6a=& z!*hvU;7Yiy7TEK>ONRP4CQQU1nhwe;hkw7Gku>KnMXvq6aAJR{F}9aOSw((^*EO2O zZ*7HU{ZZFOm@vIvUuC#?r|nh_FQ;m<_wB8CJBqcoc|71o*w*FC7?Nb-CuqI}V&FGs zM{I;^7s8I0WSSd%0eaH!a1kBne}2tcMy;)+a^JBp8P*=8M^?Bp|NPna!bOxsR#Cx# zHFQn`(eI57%u!7no+7M=d#C6O>5noNC8Lz2rlji4;zk)J+s-A;LYLWEI>|Brq*~QG zU}jVaK(51-Okbu>t<Ig7v>ATC@~f~#j=;k+?9U>Qf4$4|ZMpjBTuZ_?I8lta)?OnG zSsYo^o9xv~aR?@~wT2OW_#-DjQe@{09#OK=POd4hWME)3P&d>y2z<loQ4r+E5`0ZI zVUIrWkNG1$gD|1rH1f0VZyTVkbwPe_HQf0;PR#mwDAl^;!}ikjSdsm6!m+8y=;s_0 z3n8ruA(~{R15m){lQ~AnHDb=1e@N7{M_D}aj3=Xulg{}}nu{;77MX^{R7>wG`}EM_ z@r8vt0Sd>GH^rYWfOn!ygRs^ss`qI~t3<HmC$I3wV#WF#M06|eh8*n96CpE$P0>=- zxJ1DYg*A#FX62&R=&m`)TdQR1NOuGVNO#tfeylFg=IA;5OilN7D#Co>_H^`Sw{Zw^ zBL*?W3d!zYDn=LE`-!-hvznEU$ym;7*ehIQDtA`0>K5>J*pUWvt=P`d6jS`}p^i|L zt_b!$b<*bY(HmuvV{shf|ISr@Xjd%zK-bqU?}J`S>VSf{%lxGTI;x61%(g=}I*N@T z&R!b?#J{QhN6Q<cctd5g0l7wXCE1Gg4-Ew@-1N;y(c0PS%>gV&>GkogFRu^#8)W`` zG0Okanoda1Db~8XM&Hr2(bw^3_|MG1zS!c)8vj+!cFo(~@z6$xIsBV>&xl%TjK5%? z0ORPEacC>yq@GiJ6scG#mZ+B(GQ0X)+5@RdtI0kPXtD9q6D}&NdUx0Y(`E0CnXt8U zzkm*KTXPk{b^}|N)lS@Mr%vpR?P0Bj3NoLMC6*s6za6c?SHSVD!ZXWb!Ch+;BX0+B z^Qqv&j3zL^kqmtPNZpDu`09>sGP@Q+JG{#s_lsB2nBjr~k-;f}7<CCwJh4o}{PeX3 zssdJrP&>vizwa<hszmrpfCspe7vs$)$`n6DqbHo(JtyO@xG|DNx&XQb+v^Ml40ZgO zoaLcNS+VO+crr#t17i&>qpm{8*9OIK%!r<=()h5ES00fHbLOP5R6M}y-+qIqu`frG zVR!1Mw?i|St;8drKe|=SCNCcC)-|-2)1mQW+9q=9`F{34pyaGu|8Zm~gy6K?OLX1L zFwRuPXxR$Vi}x)OK(}T)ztQ75l2djCrRo27>-#GjKZ;-ca<`6Icj55V4fP7Ltsv(G z-M_FcNteuU#)ca+q3~jf=Rr=7o3olL2fE4CX7Am`h$0v2!m8yuRWEZ@lh#x;sz2+b zbfc;oS2zlx38-D?TV$t-?@#<|(`qJbQ-t7<n-$-TTpsr-rLdmfB3}2*ikdMeQx(pP zk^z0K*P_|d8_VmtG$<o0Kx+TiX|DV5LKi(&Ugvzy9=flXZUIYKdS7#Ej>OYOXYRpQ zj4q^|BF!M5pX|;5`-+rSC^Y88a{VP<p0yKmKPf|(i$MPE^sJ3=`Y1o1V(cy*bq32L z+TK^Cq3C23oCE$$o-XodOtacCf`WYL^Xf^lD=|-0lj`}8N-i(LsI_}^i`XgP#}6q| zu?MZJR)RU1u<=Z>t_CnOv=SlDpC>YI5`FlNBz^dXA$!X2_g}??ZMV{H9by_t#8C)c zFNnq2GSb({dfOHq)A1?7d3QevGbqG;lUaL^U_2gdkU^$fQI@G>Bo%Nm8lh@EWO3eq zeqW8lA%03c_-2=&#EU}F-pv5j-W@HuKEo_Q>i)f$GWM?+mpmXBaq~mDi<JW|7Rdw& zJ3|#?VkUgqIF1?pd2W?LhX#=01AP|`esCYp{tJomwf1vib7vw8iHGcD86x}R)4E!X z{cK=t&p}>u*NPA6Z)rN{sed~m->FfAGiqzuCyxBH!(2oFjCet3^f%ue_qR=~LOH7T z>L`(yEV*1?+0}`EMd^9bF8vNeU6(y{hI)M|+y+zrx%M3!=rYN{=lafi)yOf8nJF~( zcY2zzLi6xPx4dy!c4FDAf^s0;6ihsCpY)II*gra6zo{omVJ^9uzO<|fSdi$Lk>Q1c zNnD)RIW;Xy#bUE}5!Upw=E?<_Wt_14N|o^Cu)B-{t1s~YuH5#4QzR{A*)l8V%&K3` zE(@1IrB%q+9CT|@%SV;SiDwnr)z|82FFI#qm`&XAZLO(sY}|z>ZraKxp2s4&Zm!G- zpMnEab}j>&oLn7O)HioYsiS`OVumBF^?W(K;BYPo+kk(|w;~utm%Gk1og^ywb!Y-? z2wA1$BskE>P}Fk$$|}dbdab?5gS(QH6INBUaJ@#_%LjjGW(R$jfdsw2NpgESNXXn< z6W%YID39`M!e;;KCc7giLnE%XcVexmbGRvb|L*L8p(ww1&3n+7v)fN76-RgttEcz# z$6UN>s&9WVyF%KUif**M0w+I8lPy0mA~c(n3|0D;gQG9F1!H7@UdF*B^x(opyf=nI znK&wD9nou7qaLsL=ZqxXS#8$xQXr!s2cQmv3Xb&2)Q|ZsQ^0u;zf>6=tG!Fu#Yru) zj^FZMqt{P+h1&#Pg(cu?_!E+ePXi&e3Ef38nV=Q2HeXo8_eU;*`<oC6@{wX9OK$(+ zh^z8~A4L&~tn_1T5w{%pAO0asxO>Z^GrN07w~2J^pQ*MTLB)fw0Vi)ovGIs}`_r}N zEd^<jJMn(w{p!IZ_3h>V4p&^3X7ekUW%9ffS|dXddmCX6i2x+r$LQ2Hd_yzvLLJma zIL;^xZOpW3`d1PeDJHVXxcJ)xbtaRrzaA(7Wr<JCu}eY&m6aP`v8UN3hBBOIjD@lS z4e0tBykXE2FomD?@MT3s>B-)PGg_UQXup>~H3&`cTnL<JJH9zDrwo|R`m=FAw#9zz zzZbge4F+6%F%Zabi4O1EG%f!}Se`(RMY4Lgaxet?cD_*KbG?$%S#`QR*lhZ?1W(|@ z6{{xl1Z*yu6ycOwz#ohOb0Pbf5(z&8n7i%XzxL_;`jXPNlJj#Q++OVY%4t&6RpWI0 zgIbQ~L){1ze7wkwgp5uwTG(VVl?kI`!}^<~s9SRT&KF1i>I}|QZv0B&ezY~S$xmx$ zu`e?1!JYkCs-~LH93>43<AIhxgrZ(xv#Hr_z<Dk7yIK{mGuG@Ai+-A7-xH?pI3WX2 z0!+v}9%Y|VgsEoEbt8yB>khEe+M>*<#3F~<MjhA@3mWQ5i}W`BD@Ft}Tq&FILZ9i6 z9a+W5DwRv#O8cc=l?HkrS>WcEc}jq!RH1Ett*}U<PJE;a(Q83hd9sg`^x_Mpo$#k~ zbEi9{70Dh7;i<<Ok}cAPVCqm;j{6hCQTn#bhtbgze>$*@Ag{8RR?_RN4Om$QtE#fy zMmvFgK+D1ociWL?d$<`eSY1y8#Npj8kZ8QZ8D`3X`;=M3aAP;d3Z3Xi^`SO70Cw}M zQZEIi`%FNI0nFpqhwZ>}-FCZPdT1M+$<W~)ltB?7Q|Mw(I&c2bsK|KPJYeQKR-|0v z!T=7>cKSTPv#WcdU%C89D7qEvt@)p<R+P!_Oy*wbs_)RSg`Y@L8Bo)P&je7hsnC2G zQ3X<sU^2LFcuFcDZpEQ&iX!2QCqbC0%)mf<dn}Yhk9xYfYvgEw1^l|dr&*qOzFBge zy~NX}*`9zQJ0L-Tfbnha9sUcwAa|gLCGDfyIL-^bRs@-eR%nYn;-<lodjMwUw_Y$L ztXzdh;>g~g`_2SdxMU9*(Z?e-7I*L*Dk6$UL6~kOKI#N^GBck$ZGVF?kb}{;Qbh3K z8~ulnL?}$mq6w#<$SSZ*5%Z&&GBj^SR%N!(&K<%DDEdD}>%oYS%%Njbvf`){`tY{E z@z5R~p&>X>q57c&xT{XP3XpAMhqhX?L%<C?4Gqe%2o|Xz$bNRb+ivp!=<$tdVvsS# zvQ0jtY|U6S?s{BziYGMJ_eu~x^rRvVtjwn;CkE8Ea7dJ}Z*G32P%xr`16FMFj~qpS zvM?Aphp<&xDs~`S%R0HwR+0LIQxDUPETKV0ZI)$`Foxo&02zh{H~?RUjp8&jHyRQn zuDR_$WOj*POE74jI=v0kKnkqpnE(%cm`552Z#qF4hG&=ncd=<6e8=`eDN1}i1L}<V zZ54CYSpYMnKgOFUr9T&8UDV0(7>Q#zHOZ|a%aEw>6di7b3krV0$7lhf#Qm;#U=~C6 z)XgBI=;I^)k<FUND5>VSY}<QLE5Iq~-eg?21CN5w#-)&5o)jtC&5Lc#Y|~=Fbd1Bf zQke<>x`TFUsVFj@nhr;>JQDBhII(iNFg;5uiXt`u+Fm5>o`Nb9l|<M0Iw{q-TKnTP zX!tE+sn)_<UIVbUUEAy|krwnNizKA#RL|mdHq%KM9cEfP3yuzx9zFScgC}I2!NSg4 zG56wblic;*Xa`T<ef-?VJ7x-44N)~=MpEnghX6H&U4{H|!gUMc&t4-NJ);p_bEipq zH6#D}In%RZzz^|N5<LTjoz0oQ3+nPa)>`<MaX!#*@?(|p8Apbv7;${`C0-e0OSSX+ zdBB}oVtP%Imx&P9@T(HMhZbg-Uy<Dc*_obR7$N`Z-7vaVaya!o%rJeDhxS6SJ|pja z?qX=SauHelO400m6k1jc2EF!9Pekhmv0!O+g-Oh!FZ!JoQq2ANAhY&qu_l|a;>p=k zisJZJ<s>XaQ}QU!z$Y<dC|eBc9(QaC*|Xq*<#3e(917{RPk<sE5|IWh>Qpvl79Q+J zX=ZwNuf*aGDonSqni{*vv|@Q$$S`QUkTC)V&8p@~d>;FH=v~iiZrh?waXjI>As=W{ z5H7~4DXs@~Y?AwO>SMcL0(I<HmX_Tzodrd79OKe6qi#+jq7^hdj`#enW${8`MTn8h zen5IQ_{&opm<QJFPXSr!eXiB0h2*h>J_Va4*G)@KCi^GSaugsf@wB_cI=!44&h4i~ zF9)$t5kDiOIr$w61pgZhQ&L9X^50*ho3CLnV?OcUn91^U2pe<L)wr+eYz@>*(6b`B zjBY8A$BHK_tVI6^UBcMOG@M;y-qKw55(L=n;izzW1!Sk8&TCyuYMz!t9|TL2sG!D~ z#SC@;u_u%AO88ZHa&Cb>8D)OI`P;o6#5r@Vcp-7cBYg@7^Hiw9Xw(QTsf|794vGv+ zGg}1Pn6E=d=Vw&{9Zqwrb>yiVL9(!H-n_F}pSbr4r$XZ^$sAt?Mh+9-oTnr7<j59o z`rtO@JfqB0I+(|<QOZem3V`zcCksyprb&~w9q^<QYaG2LOuq<g13o`_Kh69Gs)I>_ zlh+a6Mu-&S2S1vPFh4mB5TE#xZj`EI$(8cBtqtKBDnPeA&B_8GA)-OKJUL#n1nExy z0<6@fE67anIA<es(gv1l7(JW2i6@TV-?!HuqL;&{?SR2eyygpl#Gx3v%K88{WKj`z z-OS)?E~@Ele@Y7Rl$X2MxRu;*L3(DHrzJ4Y6D$0-0<jY<vb`mHsMXWKc;c)r&>KP+ zVM-eJx?X~H88QjXfx@R@#}EnOIYl9yy&N!V!+;id*VoWeV{-u~t;X@u(Qk_|RrD@~ zb`oQg@=0bH;GctHo>Tn7GFnaKzFV2)XQ8Wfn=P^Zpx=suqM4#OZ6Yr>rxK#Qh#yoY z%QYx2D6LB@oZ87h3XFQmt4>;l4~f;A;LbFJ;~}EH0{0K$b(n!JL{U$A7&auBo^vjH z0yt`xUv)-_mMaHdi3~YwW$I_*H%)-f29!2>@t*iV{Uc1A^_XkkM4V0YW{>aL&oLVu ze~`)gpsW3ggQgb{8f?S*Ja`kHHg<k;Ap{|1)on0Zsp1xzjp06!VTG~BjkOZnWtm&G z_Vx*(UfvQ&!f``B^P4TvT}7%dgw<U6VbLr_#;?g9U^$GofwhF2l7<GSOIP@Pw^7&C zVOv~9CEa8?F*+-v_TU#72J^e^h^syszjOXT4vD{t<m|y?mV#s2UxP30@Y+)^Ev|Iu zR{K;9uI#BR(oASbn48M(7s@8PTw+opO3joF+)io<6F|{lZGWAT{j21~vx8FMBl&UD zPvW3+fcDIy;VV(#d9OzL^s*?AdXA>LB#(corG(wAQcpNdDBNP?)HgHVM99Kj3B6E< zti?|$(5PvWQ{xPCq%T^+cp7P;8Jpm1vcb@C4Y;X)*vB}K9VQ~^IaVt2F?P^;Q5o8E z;E3JLVL4z&)@853NG`-(=QFor>ecC=B-Ezs`)9cmFUMPt|3Eg)-W&j1T03XP+vtza zd55ycX2W&X|Ayt(@9{LBl|Yk?f!yvPBbyTOfnc<nKS`21mPK<-+b_6B*MOI`@4?SR zl(Dr^r;NyfY88R1mg=kNp50NgzOsWaPZ6nC4}rJ58LtcKfCJ1oE!=HJr_KP#wr)eS zASOwgA+wvA;N&0>r8u>Ez>bojJe3X~7vO<?s>fSYUT?0d&-L<1lJ5HB(?8Gy+1)X6 zddvu&SiPwE&zYwS!Be|#wU5tVf&+ax_OPAe_XD^%!K|Ns>_-CWA2pK^@5_2NKbD!M z^3@bKW;lG59KQ4<k2%$M$^w4QidCljNZ8kWA4EPbh}7VcXOvQTl0P7PE8OaM$GQaa z-K|L8CX4A*-7L5B_qq_8V4ykNa|<#te)@-_;=CDwQT^|mSGJs<%H~_Tmc{{3f7+s; z@?T=p&F!cvJbADfyzBa9m_+g{yUcuXgpDKyt>*0cI@iS4FOP3dyq?j_?X4K{j^@*? ztGVm`_6qE6Dj#3KhtF;i%5OtMl_fJ6e6<Qo_cKy|k4`%RWU|dSLZ?rK1q~3MR26M? zO{C9O){0M`xS2AaB<qhQ2Jo46?9vSAojOJ<ccegmd=07zO=UzKV}?eZ5v*hF990Hy z7(6TD6$bRF8#j7!m(}wbLi&b#n^GQ4^E9abb~W&YJIYl~#cu^gVi|t%h9~)rR@u9f z{a!o6!^&rBN73}OyuMe}^M<j~ui|GRh_=7(a=RyL&cE8ZfQBC5-VlYirpMa_sto8` zbZ^{uvVX*NRW!w*guap!8^ux?ukbeOTHGN-RXIx8MUxU>4bDr?WVj_DuFV-%c$i;g zaN%hAGHTgQ3vXHcgXpW%Us{c;nrf)Iq|)71jCQFEjKJwBu908+Kg|k#@#AmydRr5F z-GmkckC3wo<&ST5=ISeX#(3a?5X7#uAM*xq#ok;bW!S3+%F)OGw#+6!*4+#BX-*=T z;$3p}ogABd=7I)py1M@*?4gXLSokg91IdcqfNO>HcLH|TALAw^qS*Zzcm_%X2E`px zQRM6$Xs-D5xCkg7laurQV2>z*_th*0NEMiAChgIw6Zo#-Cx3p(sXNU_qUO%@&iTrB ze*<OZQbF6$78$;@+Rtdcak8nP%Cr$AWnqi~2Ts^qRh3Cw(XGw$<R(o~G$P)OCvsG| zMPzItJFs50MDolzQ%e99`_l|&nn;14){E?SKP%WV`Q2qsB%bnTtM01Mf4K9eQ|dG( zj{6(>w=5ZwZU}-Jp*YTm>oKeK(VXnkMu}EtMsqn+a_Qbene}w^^yX&q3$?>mNIX{p zJ2Dv*wuPnKqTDd#6<M|UK+t}(*XaT?><g|!ll`j$O@s2jjX{w$?EKkvZ$L)oa@+Zc zY;ZX_=1csX>DG)Gd%3)Bu9*SDp(5z7ZT=^=?|d4CA<Bd|nfD!)S09>JhB|lJix4-w zzMGt0S7Ge*n{Ql(gGw-7F1HNDp31cxh@M`SktQpx1RrH@*897_e_{Uo$vhr-61K>_ zr+<JBx7HVLwK=blRx|~y2|ib4rmlm3p8npiL!3NziY-(ULZ>1Gxp?KKyZQqor&6&L zF~ZcNJFZwe_7ydR&KU730P6j+Ma)ABEaiq<*XR=snxv#)P^h^k!-!x7y4sm6jPl&b zre3#D#|xgJpzJqV)t`N55wS{<Of0lw;o<X!gRYX2_gc4+#xJ0nyyT%$4C1uMMIoh= z0v6Q!@3=)a19JyCo>+LuavqBT3%2N_PmKPqKXW4wHqI|6nNyOZR)6@w`6fYm%A>0W zY15y4E)y~+iSGrWHjUOfO;>zVFRnU**U?E<&jKY^q_7***|w=U)gvel{3)&<3}C+5 zJl@=yVT{3G)3GltQ#~2WqYo={V`+=sl8-<C<do#dNm^M?o*nw{2FZYnmMxCvONux5 zD;~Ca=AJl?-9IO%e)rXmf}4a$Am>iTwOGPr+(5+*-%<i_sZraeH$i8VaVW(#FVFtk ze~|7abZeMzDJb?e_Mw`VoIx?nIK0stZsn8LpwasMO}zYNI5T?3)$b3JhKsv75{lM| z)OPW1p{HNCr{k47Q0!?wn1;=wyPuNQ$%hrW*4|I1%GgN9b%6fNiC*S@hxCzsQW-E_ z?kYMa!6aV;Z%L;BdH-sxtBK0=tyM!UAWv=MlTSgtM#rbFrri>YIP1Tow+%zEWX2Px z8e<D}1obc=qk7C!yseMB3liM7^ASPbc9rO!hgEgF@m_YrpUTkL3R~vwG4^kM2GL4E zt0teLl4ZA!%Qfvq`4%ICyBT&*AiIBM<G}pT^mdq2ZJl`>83P<N8RKOHDzq=Q@zU)u zq7xRXJ^cn$xZ6CXf7zaK>=WDt@s^Tve=7Yz8sSmVpO!Ms+_CG+YOxH=_78`#w(Zm0 z)Qo)6;xV&ONY=`zEo6)`Rv~N-1|I;@xG$CdsvsWg7tIw3d*Uv1r2e2s9_za$`<Tiz zu{rIxAPo1W;NAr!g?H}4A`Zsd`e>P9Z+3a_7gPG%E`mI%IdxqlVzl%l+J;$7`-32H zz-s1JnB@1#Pyh~BAKJn~%B_6R{=*hYx+*6_M0q;54Rk+dupsQF5%R_tbZ{CBYRC|O zd==|kJY;E>bK%sztqi7VHd-oX2k#0<_YxQ_OyxOz>D>61duQTtx8j-@)ICY`M&0=# zL(Go|av3M_kW}~+f5LEnKFNa5Za3b&!N7+jVEPcWR#wiSHO?f{w;3{6l{Dd$_3*mg zs=4p{)`AF}Mc$`EM!7^x0E#TPuF<aSv|}x`#st~B$SGlwd^M}OSzJoks?&NwML8EF zF`^(MTOkj!wCK>9Sj?&n%ZaMv8y#5qE05hTySX%Ulg3XoV_`z`k8={7zF!#*0~otW zvr0JPys`+|lvENVI0!iM>iXJ#k_>d!0~a$~S41TjHPJ@erX;0OxcpuI+i~(rA+MHy zg4$!Ar)G~y{8eh=TPB{*;hz5Rl|z%Cpjr}3M~!02nhLP~iN>Yvjn(#VoBME3MBjjp znBQ6hZO^$Qe2=G>{E-Q%^*FY6*%(5%EZR?Yy^aB906AYso4}p+Uz~bEi?hEnxa~>X z+f1u;U4bMyALXOshk9gz=8hw3Gb0tV)YcQGv)aMW`vTp@RC&&f6@%CNr=moYEz|&F z)#8m0Lp<bVOEs)4kvn#S=6B2*Wc(Ur&-|eF=Feh3d_X1yYdPZ`B2JT~ur8zKZ^<iX z;M#nJvmEdal$hDrvbWX22DX`gBB{Xb0HVSctxDjYxHI_HX#a?j<HeAl{%#fAbk8pO zDqeS>_t|HDjQ>7D^l8)9oaJtI@z~DPmXEIu8wf`FSa!Fy88)ePa1*;&B{Cun_#n%h ztLq|{$IS*sDTrmBD{1_w=<U>==qGfRJ{o*#>87J_1xx<vKBAG}E*8_<!1#7%X%u*K z7sOHstQQsDN_0Y@Ozh&Y1}1V93B&+74Q`Ui;Z1<{G8hU(82y3;VNBCn9sn3q$SKf( zl43%x_0F_RkLR!&{bScmB$<KDv^SM0yEPVzthgfd))Lh3!ss6=fi*jP`C)})^nkl| zV`x77A5hPO_*0%$!8_1=8UZ_D%P_?3IiH~RZF-4~BzEwqKlBz8$NhqOQjo>~8zvqI zrsQEH6bi8felpfU-Vxtx1`PWK)5si8YNl}@;ZLgxQiI$q<^7BWr*mbPj`;wC-fjlr zAa_)<aT?uJ+GG?S9?-w3dGFjCx<Hmj1z-~6CAzt!XF-v|6b;hP0$s&mqs^?okRtbd zDK|c#(_6^8g=Ro0_Bu6XIl|A_E((0?ISE=OQA^=1I){Ri3QDFKmmx6?KvjUMS)cbR zKIf7f_mK2=*2_z)d9iswapW~*fA3)aer&fR0_0Qv6|QGQouN7*{k;NfqgFbkE7Qbb zwZGhInGx94u}t+y7IBNYVh0R9!%R&|b39a<ZSvxWU3tQ`1MZe>)0`dU{q&h8=3FA8 zp>)><JT<n+q1L9W5<A84ng@)#&I1k%sSy^H38EjONX-qx!T(r>X2@RJOB7fuu~afa zm>o=H^k;TqNWMJwgAGzI#CZxOOH>(-Oo}$19^*R}^8l;K-krKIsjMvfXu>btU}C4B zci@{@!27Wo-;5Hqm`#|zuIBgUs1ngG-tBux3&%YHzPQ^-)9wHz#R%Bt^flgXV#v9h zmB`sq1=dB=J3&8Ukew0mx0U1aPF;^wmSX?t;fu?S<}ZZBF{o($|6IZHZri&9ENP`7 zG#kTozcMPnq!}d>{|6roM`rPa-Y6aN5mIPtRV(-Td$i4RR9I_?Tqoqu#=Ta*Y=9n> zSg_xVB`8%-EZ><o_9~byW384~b8cXL;f9>q0rZwAQ<71+?FVOa%%dMNc=Nw;lWnVq z3Uo!1QYqTMx2K<HJMe$Cr=NFQ_PxE**D1KgZ;31OZUN&_xSnaR-|XJOc}8W-23Z_N zEg)KaPYIC~bgV}RpAu1?lp+ob*p}_O%CD{O@PvVgwN~zcG^Ka9WTJLm8@T^P2I!PA zwDDh0DN~D?zeDz7nH7&#*&;YYq6PXNroK5mk}lXgwl;P)8{4)vwr$(S#<nNe*tVT) zY-eLT*_hwtz4t!P_s`6!a|*w6x~HqUy7~-i{N(<Zc@`lOLi;e73#Kp75x6&g-|1Dy zHBF7UtWlgDk)@%HZcTY7Z}(r)8XV%x%uua0H#5~jn`nnGKjDJ8;|JEX-?9vszmqG# zdH2a|q#X?Az2es$@DJ-;>JP<VnP_P=70&gXx`*lvImqAE7#W!I3k?NWbT=TdEDFO= z@ysUF>qML=B;+#ypP$rF$dNO#kuW`Pp|Nqrej0>o4b^#yN4<OQnq`8UfqoWazFuNJ zA6M<zQic_4od09)#jEu(q|mu~RjGRH8mVvfZ}G;f>)=!*C6%CkZrTCIym)>67fF6S zwRl9xcbJN0yj2O1g)j1%*uC;MFz25v@qHQ9??7l5SWDDbrz+ppy$Y&dGorJ{bnDUo z?<rs1^kk6$h1;@-c_-IN$kyQIS@XyIG@(9j$N5Nvysly!*~0>wv|jd0A98oOK{P(= z2@Cqz%mtIf%H^a~OU<`-UnXZR%or*v80<wC5*wFCntQOKg)o>RyFIcRaM;8WD;71p z5Tv5{L#3ig=m_+#jB%X#SF&OhXjusWtQuyJ4M7PEcdYH`-5AS}RM8k#q|6<+y>?)U zt98WGcN@@i0_Ic4v>ki@1=n4JF8fWAw+uPX?&89`C(EB+Hr3iKWPD2pef}Y>0DChJ zSxN?~_Pjk2`{q66tDJxR$~7*ri?<(FZ;!h@H#GHA8$Hu8zR!o!-uKV918m=tIdA?z zO+&MS<&qm~)nH1EhxvStdPZ4aZi~}q$jFy*)j9vv@xL@a0}NGr8;xVw9z8_+a=*P1 ze^z}e%#jh4UC38d9>a5bDrsh?szk|Q0t*~pNUWnznazp$W-qs>``IOYP2*sE7n|bD znK`X#sgzXNZFY)z2SMe@_=CaK{=inn><LJA&@o$7+25zPGm>JbCt40I6lG9D4h+NJ z6ZYwBNYh|9_`7Vw!Xa3Z^kd(d<x8#hsB$$VC$T^WWu%Ubi4=C$P?_SkBsk1f&aO*l zw7Z@Z@-7`D6zS}*<2ufC@KePdICR3BrnH4Ar?maUHl4xoRK65W1E{B^GL)8ASC`&& zY|$%a>pman*`*DU{FLR(SBa79IE!%Fi>6bmr~d}W8qn5Svi!3op>jyC1ELkP<x=*T zQ@F-RYON$?O_6+|B3^75GLu;U&vA@-%B06f6rkr5vg?M)GFQ#2<Q1))QKxOU61h~v z=dfV6jlFu9tFvUo4dd19>@do1<4TRca5Nn)O`ua9LcJ0)7$JC9&==u|5%b-pq+x*- z`hvAOlM$=T)m_m-i)F!@t&4lP#Nr&M%;KDBhXW0%2x+*&Qt7@jFUOg?EZ{mTxa&89 z`do37(+TH;ciSo~>>RZ7)}#mNkKgD!27eOV#B(h}qbk%?Ds>f_@U4S?YW{Uj#>t^B zG|tQuH;IQy!+Kf(L*^L3$-yD-1t+_Mw8a9v+Iro@5Ah&Vvb;srdQ>4_h!ON6NYBR8 zQ`LMAc<@Wko<R~&?#h4E#5Au|J3o|89u3hWOM#_A{rmdhv#r|W|8k?L?U@E0X76<| z``1WanxWtSvt`chnW6j7=hF*`?Uv{MCCp*^#W7Oh<>o&hD&Fe$cZqm^iO%tBx`>>) zICny3{|!1Hg{4ToE1$xZh`(I>yY6ER-Er>)vdeYyHtlQ=yIcGj4I_l}Mu5#}-S?E0 zJUZfgM=-g$@<;#Qn^A=q9sM;OuPkX4Z|$}3sqj+PW94d<I>7SvGj#_i{B_W|pOhZ` z)TgzIyb-jjL*TheLYD``RWE+RucaLfJDR`!qIBc7x*{Pg!S8r{S(3!L!p(l71H$i5 zpFcOjJv{YTNZ<#O?zyMuYvoj=Ryt|4vI#qnue=4iniZk>KXQWB9_;?PLUg5qtjGi= zxs<cpkwR?hmS+Z;fvMA_kG~V(@;+*4Dt1#g`G0h(us$SjB{|*H7LrP-HiWuam?ffy zBgKq-vs36p{U=d3*(w^&N7aHbTEQy*j|(SL<i~e^2Hy=U!h;SyLV<326RwBKh){wY znPA694N2aj8bYyM%l0$Gl&4Dc2#Wg^j`1HiqdHj{Qa(f|MJZ2d0RVbeRAuiO$<)g; zJgwaiId8}u7ba3dn(fMGhlpi-dBNRsWanR*$CymG0cyz+3{lu?Yv*V)u1A%t9ip@6 zvU!IQhR1ES+LGo95u0F$FyZdThY;ATP@Le7+CN<b1yPIRWubW)+ePcwN|XQKO`6lo z4^VIZyL5huxh1QJ8C;je9VPyWTA@=bbrlAk!)1!oYxRIIYW2YHrv_k#ICg{|Ef321 zCipp^gFnedDKRoa;f)|_k+l*eoPLOpo>)?kwM2&q2+EXB#Bf%Cph=-)g2ss2!vvGh z08e@BDp;k+4t!OyjbF{zUf?3jhOBbcqVY69N@r=#ZsQ~`4-mR6qDiB@hTn%Ji*H4d z*zI6+%`#PfQHcoFbk49UM#kh#&*YCIO%$1I>|Oj3QFd938PWZ7H^4xqPhRW?s${G@ zX~XnEv~21RL#DndMqu#=ZUSis?IA6dx&nQY;Z)A|C>Yb~R}Tdh7dU5&ciJDxZQFZ7 zu+oqV8%48u6Dfqq<=+e_C&qUY+L+TkcuR-DU=%n+!<d)dcqzNWd_TJiL}Fx=<_mEr z6m>2>*?&_r^PdWctD_~5MXTaj+9ahjF43IOZWhO))_Yhlt_)D-MGhByupVt7^kB|V zNlBMW8IrfJDjsf8kNsKAgoB$;Gtd$;&m+Mgm{3tfmPzx)e8Jb$ml_y-iASKYW^qpV zwQ97e0y{O)XNy?{|9fbxJ(RMZ9*dvM&|$$yvc2#W%;`@B)CShCaLn<cv(Un8*4%!i z?FVKK@IP}`_k`e93M>KpW#?>-IGh117?U7<R=Fdu+vvYqQtBRjZ>c9|ZJ>&YA*oO^ ze;v4&Isd>VsKU`uQ9HBm(bQlOJW(c_n=v!smlS0M2UCv{?eJxYRgUNnoJEikmqLYY zWfpZ3B#7Hx3zm?fspvQE1RGP8!M`?ep`0J)rL5|J_CYR<jQ+6j&(7ft5V*CTbaoM7 z^H_uUAVwP?x`^7}e_&c-f19O^M)={tx<2x)jRS(;Z}9^LdT<jf=Nis4t?s3jH;N;d zek(Ch<{e*F7?m2ElbM{@n8pJ=wl%kav$l8E1cT#m;1N!RJvv7c(hXr%Z7=Jy+StPM zH(MKSI02W?P`?dM^J7%87Ipr(ennb3@z~uzJBbB=-JoGVkIg|2JEd)ztrDPi#iRx( zfoSA9p7?w1qVV88eM(=p?#e@lLty&(GPg28KGv8uEUYyt1%H%6I_zRFd;*6Izgh36 zsiwn<EV^SkILvWtL&}_SgQ;I!j8dM_3~VAogKvc4hJ)jvgz5@|#l*-IJbWbZGbEFf z28-3s=O|l3+VI1Iu*e9B)P|swsiPXZ25h&B-PiGITSGlNF%DP6oA7%|3j7-e3wT5# zwOL#k#;k?UPT3O?|9XL}ul{ygO#YHi08zQKoB-_#!Jn+z5+-PSSyv-gWab<$=SSly zP!IT{U(?J-+lCWd`?!bro5@^c?-|NVSzHHf9(ZRwPfqB1Eea8hQ8hnXj_40n_FUm< z>`deqy$%<U4x<Swz4o1hYde4yG+I=KM1_#TY~a7pzYA}JZ)tl#7`;5qFNOz!A&U#F zh{oBbauU9r@C5sXN96Rs#^w>7iZG~jM#({w2Gtbh-Teangim@k^t+o9p6WcFKm`1f ztVz!2q`Y>x8}L1b#&0J^qU3kVD^<;D5piO;DOd&t%&2Y%=|B;Ba9)W&&7^d;rM?~t z8r;Mo92b#$or`Nm@k$TZsk=!qoASFXa?h87`qZs}FD~2t#7FmNHNkwES(es2!5OLm z#i`(Xq5BR2^~NAWGVZT-2S>#H5T7Sddqc77n}@8sTKu5Ljf5%-HA>4o%QeaIo%Bvu zE2R_QwZG$}e=d?+ujd73Tft){EA4aadj=7tlXshi*w0evM0a)Vu$lHU<IeF8zZ`T0 z@`P|aE_1iCJV!Cy4cux0DV)cmB8C61COPKRV??X_0B6R%(pKxHAz%G@CWW*S<An3K z(kuY}o@J4odrNuO<0kfGB7y%-sGev5TAJ@j)`X5D{t=hRizs6FmHO{$yGYfDlt6o; z3=z)N?+t5~-?^Q@9%{6|XD61M?g+k35!K>-+-U^K6N>yUY#m2cgYIy1n5qIhFWtjo zdYwvlkRIY?G~7sIL16_o_j$-_ya!V9mHIOaf_DYJ$3e*$RCs@d+K7@seMejlHPHAT zGUFZzL<FWpkEEDq*=`&C$J%n|*%{M}1+&a-+&ZU%tdNaa{$6qZj<sXda|@0Z&lcQ5 z`cTx_M#<HuxN4X$-=Fzt6q`6WZ&YGxoPG>l#a?Tvs?w6kb)`gO=pW!nQBO|#jBVs~ zKUL!z6Szk^1f<!@Jv%Qo#Ni)24t~c}w*|g?@;b8Lu_FcNa|J%>51E{vHJMi9ASJ_- zI}R)gzQMj&18ZgdmF32dN=XVO^Zkh7mZiLy<n}Qs`cVGIPw%(y*s?a`Mk`N3-m8|l z{LhNyq`oq@t0L88nGNKTgT@UZW@yHKW6(<M-6^vdaHD1|@NYJeVz^V>xeTl4K2Qnn zUc`t1_;R(X(xGnoq)9n-DRv%RO4jcYvQwFqi7M=MrJ1plaw24aY^di|^mTfsG-aw) zm%8xKiXccp1fO8Mne$w`SV|F%`U|$}Ke7Tliav{cxYOF)0TL-wwkpwtZ^l#9w8W5| zKGkBFsHEMIv5>g>E3hpUzUa5NTm`%v^9<<a&z~<zlq`xc%xW_J*}@G&-1r+fTg7Dw zFH2TbC)yQy69*r<AW6~{zL`t6%4L>xTWFc7jqo5*Y7#l+#v01<=17w}BcpAsTiYCA zKA|87*5Xs1oBNUF@8x4OX7oC(_4%nYJy;fLELcYo_e^Rdxbl^ycLIpRm{M-5JAr?j z2jPPxj)j74q~ybkm*vh7guu&H{Y?%J3p8D@dVCJE+~T>#MVKK<s2zCMD#w}N89K^K zH66bnaOouH2P8BIevg{t!P$d!f&QVuB=_$m^LAUKv)WnC8~=v&SA0EV%|Se`=494< z-7o{E3vBq1sylQE%Ab?c(9+t&(`abvH*h!PZ?m8|Lr_aPwT}i3ka|7=&{1P`zu2&@ z_%vqeYdr*zF`Ep)t?Bo@Yh%b-I=pK&(!NIT`BunLn_HmaeVc&P6Q9N^R?Op_fnh0o z?cv@Op^fsWtvfPiCWXNfRaZ9som%%N?`(d*A3)+&)-F(}9HS*;@M3qTzesb3oS}tc zCz2m4ioz@^Q*##zJJSYz&ng91$M~QxatlP-n(83l!nuyGAC9AUK}%A{($OVWyt~o? z+@`9jx9U?()TI|#<Zl;HcObPf`6FM%T6zP-+L{F9-U9-wEwvT&kQ_sZVHO-qwj>1~ z>|B<=VF2wulzj?n`EibQdUFk)>pD2c(Em43L)U@iMzHR0#Fl=<S`N!zFF(wT-WH7= zs1<GTQTzTY0|nC%JOle|QoDZn{CT_o+GKY9ReN~|G#en^NnqO%YA_^dU+s0-TYv>? zhsG{YRy_h>v3KK;jnM=8uq3-n-cE{LxW4_O*Lt`LP=Uxf7TOs)S8D~1iQEE?uXpZ| zzKB!?M>Jhs8xc+d@bksvzfjS5JW338H(8o!ivwE(u5s!kUi2Lw&Y)9oH#OIejd8-m zF+V*yV@L)&Av~^n;p2RZP3#(0c|ULVC<GXfH&+ry=qg&Di+^_dSycE}aefefOq)&C zw;#|(UQ<eBrlme6?#_Zk@IuhrdpH$dpu%KD!Dy4PbFRPGdOV)3gs8up?rE2}M|b)6 zwk#u5_K-h>;qEFw{9?ougdAhU`__hX*PS>VlU3*FT4^gV==27*73j=YZlq~I+tFO= zflfK8@R`|psF;ItO->tK6}G+4G89wLi%bu?IqHNy9*fb5U`l_P0lbi)TWdjw3fJqP z!lEP6EemA82&Pv*t!Q5-T#kl`w#fi)#}1?z-LCI@dAO9?WJqg(jFdn|v_y>WE6L+F zB3(`if0a3(NC=yB$P?A+BOsDPQ_qlg!BY*@=^GFq$BKA#!_dL5_9gC3e|R1wN(fpS zv>74Nq^*WskCBaxL=!lv>^o&h=(Ul~AthHBdRaUeb~=rMa*y2${{Q`c1Lq<@aTbVZ zf=rCI|1s4FeqfcJ%kk=<*XERt5GDsH-a`4>uJ*Jnoe||-oI8Sc-n}ZdmP*53L6mCN zoJi;a{d0e{XEBWBVWo}s+u?RHF3N-}8Czm$C<~`?5;}03A^@4uvQ29BAbPZ5;v{N3 zd%lRP0E<8+2UgqMF#<t#(r17M)YM9q1wgW)22Jy2{Sa@4o#A&gS9k6Y#RNj0KqpHA z>t$TW48h(%2uEHcBuU-sk4)%}Qt0=ef*(I4j+GOpC4eEk(Mh1;k`}{wx=~=b$!Jl! zAV$&tz|Z<8&H(a|R;O*BBf7TLZf~;3wa0KWdFn>accN0~2I%dSjWbYDTCUHn3g?En zFN#Ez?pe<8Xo9O8{%0_9S(?6qJzFKBvCj?{kD_gJJV}2dhU!x{g=I+=ZePR$8P87Z zH9Q;rTY#zKuv*lzesD6JC2GMy>?fc=L?s;V-}N6!$f;SEoJQHL!e&;ZE7dEi8;Sb} z=LOs?xb=@eR>U8&nq=Cyr^*R`Sr-Fj(52WSfp77c$(N>DRA-*>A$Nyj>PU0`ogrlF zN1AdOC(Lpg_kcL`<>8!P_H>wA-eHP}y4aS1-t8+}iml3?(7d`-a_eHsj-YwI4R5T+ zJ3LdqUxOIC$h!B^x+@c`*^jAC*fdVWMl@M7p0kFXnbAL0jf6vM%7dq)zmB6yoYiyq z(VBSn(~N=moiHg!K!V@fkK{>)mhIOxd9$~SmmcNnxu+TkfX|u?z(*4?nPWO3mXcv} zIwf-phLwn<Vl!4V1F(U*WD-hCx}BASG;bZy{18c;e7pB!$76yxr!GsiX^*1f(hC7T zaN-d`Z9pe4up=5RU040XqS)Mi%}2h_BWIYR=&<AyE2Ueb70M$<T_s0QAOAf}3u^6B zxU37KJ-b!)Nwf*>irEUoO0)vytM+jA$NtSuSe!*;+YNu`m7g*Z*Wto^*T?GR#m`i` zjpkJOEKlXM&XUJCcKvi@N8;l++}rL`uhM7&KF2>JrT)<hH=EQ#HveE*N)A;8u)Q6b zJ|DqJdLsUQ)S%_AbeqYXR~I~806xi%&P}yEvm(L~Ftt4PauYusIjy?SFw2~E^^0&X zUyy-w`a|cME2-XeUtY1{mC`s30U)z^$Z#Q`lFhdU{l}HAIY^<gT8vrD)Dd2hYi}&M z7Q;9Q?!2^XI0he!b#yD(nZRq#bR>^l=FE%M?ssdedwmC8w6n0rU6LE*(Q2@<A+1E8 zi&nNg-CBwroWBAAKh}o0D(xg)W;6zgo37=4A-%%Z0aL<wr@gt8U^uBZ9W?nvr8n_c zI7m_bFE(Hmsamt&{UgEJXHS}*7fwJP5_@d~dlh8r2A{@`hUR<MnVJ7Db$k#^Z%G@2 zNmz1ZHO#J$%?I%w3L5<Xx}FJ;)uyf%K8s$~mNDsdVC;6XZ4D+PaFN-?7nI-m@Ys17 zrm$W90v)mSKLY^u%7->lnri3)4Cs1o7b#&i5WfE-)nB4`*U&CfwbnzQ;4qqH#nUS< z>s#IWx!SZrxaD&-uU4mT-5=F;iyWg`1A3@HSM=pRy^o60^nlq1bN~WpxevHZRmxzO z@!7!9xYz&iXj@k~nEShUIWn=Cr332w5gD6xBD`Po-dm*o>VS$lde`>#61_U(p0|{U zzASO{Zmdc9+5fHG$=!{9Nc_)5@<e!#Q~f<F(ls!hhFWe(8=T*IKz)=quJ|OygPT~_ z`f{T=gI$(q16X5T1JOla{&uw5>^-KXsV3<@RIly7jxN%B4q6=zsxw4ik^h`38u|UQ zyFQ2h5+3)_mt!P<OkCJ&SVAk@>I0bt0@-Z;<Mp}++z~DH{=anra=aGZFUxdS&4(i5 z#lxDJ03(I-s*3$bE2|B$-v8FbJIPz}w5GEAAtnSK3mgY{bR2xWC3(Hi=+i5E&Z|Z( z5+spUq>a8DJRj*LS%Uz#$cz3tSsgGeXz_{g-WfPb*7G_cYwev2{Q`ZT+<JtC6^Cw4 zyM+n_<R!V`T;p4oQrVINj6NQgw0Cn>{m+t=kh*9cfk@&8`I=T&78AENzebxo2Hz*e zOYZ1H>F35R&QIxjH(#VSnl_d5I<&un2Z4wVqrc}h`#~kX7Y@EeAOFs)dInRb4@Vql zr@xFr!RUAmyt+K2==n<n;|@GZM>HpFg9spUZ;1`jF2u$`AZ8&{jy!YkuV7@|AOcVu zCG?-=l0n&(8-xF(emJ7}nah7QN#=*Fr2FNO>b~TJBWT`VFj^^V2kw1YXBt|503(?& zI6B}gVnVOtMe_gB)&to%xUMjhE_}G^DVx893=_91#Cn3wj6=1)3_3*6yedv_8>N$d z9dFBFjr^^!3>tu&p9YXz;!8a)iLL!o(iX=={<>J`Lh_~FwlTQ|A6lU+=1YG|7il$q z3y^3A!f=>r;NX(QmyT|D_;0K(QJ;&xaJ7`_Yf9u;aK=vf()a93UrS>I9J(y_8aO1x zdnX_?u-Dlg^8_nz`431;T5E(SqTSazp^;t^7!ihM9eRAtA5iKr)Hz$!n*Kj)D6PXa zeXwnm{{{Yn#POgLUpBz_swRd%T0+kdyevl}x6q->bI|we$lBHq%1(I8{RfK*^^uTC z9*AW13rR7x4pWuPJ^RoX@sQH$gqd|}TmGd}HmNm2^40ghIk)%UFJTu01K^c)gb126 z(bCQ0uTx;%57j+eqc6`3VE6^MaSY}tUBh8*8p+)RxPoML8b+?R<U2;1NKYE61<p9f zbucf6dE+{VS${6rlL1g(^Ex5o_4y7@R6Z0d*Iukkl7u|!jHJlUDBq%}Dmvr-h1z=f zzG>_CN!Ow_96nAw8#^^SCmeu28CISCY~u`v4<0ZhVQTOEx$F5f;`7$KhZv?nje#_f z^`Xe{;)eC@^w$${U0sL81^d(ntW^aBw_+=`0X_1HF6&r}$nYw;yA)?`L^f*rK86z7 zRq!H@2`X-mWmvRxs!p$)TporrW0VAx<1g|qCFav)w1QY4dkG_Ns5z+4kfD>Jr}H0A ztSvb!m+^)xBSLtdE7^YRWd(!RalT}Lh0;B0n~oaG;zrP0Dy~IQiRhH9A=?=l?SC_k zRRq7Lc4p&>tP-Rf7~+AOp(*B2C-?p%jOk(l?^$q15&5f=sdQsKJImpe`r1hAdbw4$ z&~}zF4&G={C?Dl?W^%D#ePjLY@j;X9&7PcY?BaU`MN3MLS2AYPCN+-jJ1o=Mi&vio zI-OOQ&h2XZF2zj#(rV(Q+Scppgdq&2r}U^9($c^UYEFjbicHURxup20S<;dp`@rTw z5OtBywpX+|5?i-y{pu5x0Kf<q8{$!tef1(xM+&V19~K<RCk<Jf9LE$Mq9B60)cTsg z!k7v8)|7mFE)t8Q@I4Z-olS-P4|-d0`6G#??5l9sBROCt(YkBa9_joPb)U<e8-ZPm z?#Kzm_ttL|%M6-DB?9+u1QXeX{>U<a+_H^7(Q0*}?_Xuu_Dg-?<y5!x)?Hh@V(hvy z(_+i82T>ypvW;uv|0bAEtN&iWAim19RUwIMMs{!2LQ~X0Ulbr_c#3r~WB-tKEC^BH zCi0+=E~@vEN*beGQ2qgGsuNryKc8}jL=J{hOvBHpG>|f>oT=9)v5PKMv#&UA8Vl%j zk|h1jTC0QTb2^Q0>v=GiFHD?lw*wse-+0`j4YxS#&|;cKogD)%&jw@*mV0p|uLozL zjNQj^mARHjvWy0wvwDtiBkKiyl{~sRaRLhRlf^l9_55sSB1F{bW<V_(aU5m5w}4L? z5--X<1^wQm!$Bt}l4Q#>w}_c15G8@O?MT-y=K2jkMaRzEuzmkUcZ0`qRQ7W(W#gZK zqI3=k%^D3?YFW*2Rd(xsaoDZYrDth4S<UB$`mO9K;xJE5^J{0`lG_QQqVYHBYWH<- z*N-td{iDP4EcK%pQH-AqZGP|_>bH|%2Ifm{&L1;0p2q8muY4P+*?Q}fIC3@nvNqC} z){910WgP!L^W9<(UqtntW#_ee`jGz_%YW*kM<Ve$VbMG#bQr%p6|-0fpNqaRJ{rnI z5{SG%S(b}1E4oMs6SlFGus|&HbGqd6$R;>sGj0#0__WeoC|i*DG>{Oq1Ud1T6SPEv zny+y+2g{jc5}bJO&oG{zdqAb&nu?PKwe|{Fkroi7p%xIt8PJ<|k95olge=wd?6T-z zw;4Oz5S)?$2rl6b8U|DoCy}te0SKmK2FzYo6OjIq0tkvr4Cf!H8av}i0iN1#HkW-U z-`ldS-1eW2z|6!IH0{w*MyP2$;Qz^^6$LxjLc~@G1JBY164~T>_Jpyu>(vDEG>K7m zF5n5eQ`a{Je0R>U7;Oq6ouKdXoMYO|ONwL@51910HSR-ZDVtL7jFYJrFb<$uRRG0= zamKr4oHw({LzQU*<2i9HO&?$NF?Z2uC^+delhkM<Nt<FSumHDy*yYt&jf!&rcI*<c z4h-QsBnT_de~@({V6aHD*P49}1f{&k6}smcZO%fm@BBHLr9oC>zr4ZBL8%oq0SBb> zaTpwYr>HJLyl$)|urab639zMJk@5OQO=yO?F{SJkHKZ<w{15n8WerwsWUd=~IZ2r1 zXP#d}_;CPzAVxJ8?SsRR40{xr!wq8+kUYL~Fm)yCg26y$(cFR3$n;5%peT<~3Hjfc z3}ZAIIM`GKbPH8YsjU$wk7_`lHk?Z1$P*rpr18|4C=$@rl+X&BmShcd1a?XwygS6R zyjnLvr*J{q!zU&R9UWln;ET-S`9cH8D#Xe&g0lUWJ;4P^2WyMj+lIi(lN&~q$yb1< zxCvOF6ahfJ4Aa2LyU701*8}a8tk(wa!0wP@m(O@l7jE%LYEFoXN$YM9y0ItIT(o^2 z^d~E0s((+0MD^ToG~<Mncgn;$njwciZXzRM-|>+6uN|=0jCZPWtNiH)vpIR<NXAbs z4I5x*DUh`!pf051hqKua&n!=gM@=WQcJ4Tq)fy1<EwRH1(Ob@WiKvJA{Rx*;Li2j- z{+0Z_|Kq(+&C0l3+LMvpsUO;>$oE7<8{L}_$+Q6Kt>v3CfsUvfDiQrp#lLt$=sAP~ zoVqYnb#Er%4rAE+@Fn7E8$WJ_lZ2g*B1SULjhUJYslq8}1a0PqRL7t>Yc&Od7qzjy z$)HRqBbrUHOwd(%aC>vHqsib~kAJ^&nhqviwsJOHmVGP%$DJ7pg!Y6BI@+5u(3dyl zuTkmC9gN)e<jErd==(%E`(pS<k0f8Y;Z)byDFE!j&7ly1(Kz5_kZ;qZ2cvWL)?HMa zF^_kXx0J)yljU#g2;lscS#6c&e>F7qrgF?Dcy~4#GOOqjWpn(8%4-YQnd04fBJ}4L zbk>vQKXKFM&Wx#zJ=upn9PN*z|AS?o+W9;TMriLu+q)7e46>QO7Gf>daZS_t`ym)P zs09<7Bp!pN&+f2Uz}31>o#Xi@0?kK%)}FPGHHI_Okh_4f4T`g#06`rRJX`{H0r97w z?h$BVZ|91&{Yi58IKT0f<Ks&zITF}y5OZA{YaL|6-;=}c`D!wR$0{<H^r*}ME#WXr zqg$Q}E#ZD?6D{dKuOJrY4ylir(mkp1kHIR*ot#usn_UwJvrDMAv1vYsRdOtn_8s~h z4DxlWbJNAx&W=kTP@`tA72%T)ScQfx?^?pIz|8N((etWJuiUtsz9jp)@4k5hiAccy zWs=P$J`bJ0GG=XRfMm6OELp5-X?Jo1COqjG9TG8YOZucvjwfB77zfo~Oi$r<M15(C zZaJyuXM)d~E*j8={MMyKK6r3c;_qNA;7G6C_Ern)z2T&^zcPeUfA3{y@JxU-Fg_x+ z{u(I$L7ITw12GWg81r%~qZ2sIn=+d&iWWUgN^a#L$v7)YhKkXLeeiyyqW*ZnqsrIf zd+1HRRq<T>>ZYFEBbUux(w;iMn2|{L4aVTWxHh%c^tT~ho~Xu%9tdC~Y9#DPuUc0~ zhlF#-8n#B-z38Ftwvt~Ez901s{CWj`Dh!yt@GBcno|L#Kc)iLyK!S*7k1hB$>K5^1 zW%ACz8N0%F{|!9uhQW%Zpcl$JoUk&B!Gg$dD8ikTHnWPdwr?sMng;syLgWg-tkrKs zM+{fFwL8b!4t)kZaDHtM!mv?I!9X_p6lj{T)r+8)tLMbvAuVC_6$AS}L9WZFP?xI> z(*FtC)ROG=xtZ2J^rKO1rq*gm8?4wIwFd<$Bda6Ht-mfURVTM<NQVdG;cEbIK@C<n zUweOzkkK!p{@8(n4k4_@M{j=2Vm7TD6l1}IT{f_E5?tPN9ZOC?O=FEm;M9J`m61gn zUaLZ*h?Ul<BopmtTgk+ixDaSJpKe0MvW87?KpZBA7JB_F9{`T~AGt&h&1lI_^<~qV zk%Q|g{Mo5@j|sK9Z_}$mg`j7%HWdYu!}x9cq^2Wv`wZs`2<~}ID#11B-33_Jr9>-~ zcT$v8to?{aNp!GvEyv|J?1;Vl40IfjXz^1*^5cnUvHX$&-frCkT%%e3Yb)%&$P;%m zqXVa4FNV78Z(#(+`eiectok#WAu=2&3yQjYm1tnxNcm=F6AjGp>X^8^5u&sIjQUbM zPuk-bhWvNw%REg&tKStSUIBr>z6N0ZK#Rn0ycWAe=xM~6jdQ|dHljHni*~!tkUr<! z48G0|<od9cq?*z?=D1RNinnkqJPT56-;w-vZTq~ql51R033y>;5Zk9+DfP@6z2t5N zB}!#8$B~F+LAF#CoeG@HAIZ=nwrOLro??ziHz%C4{>BB*UP)-~H1l25NoOg`^g9($ zZ81<Sz$}iXNjSZe;{RB+zgRDUtj9k@t+f7+6%p9WPsls90B3mG_kRekfC!!fZa9;` zDT%eFr!pH5NQW}QTp;5yTj}<~G_3D5l;MM`;=ryyedIjh$*W{)Dj;)M&z$QMO~SZL zJI=OPauCjlyC&0VVPw$Kj8RQ9w(V8%-^r$^S+jS1p1MF3K%!<BM9NO4`>i_oNY3D7 z<hFv|80nl`vc|BEhK(h7IgCSb8x$V8!Uq>*3_@RS&w`sE(bTs5_z`!Ug%S88&n{Dg zc-IH9a{8X3G7-?NpD3}?#An{VCF%-I|FRoBeHm8q)a~S&1s9-*88E!fC=(ma97Xwd zJBcxca=vgslv0pI+=C-2VB{eSzXPRU4bDukMBd$sYkn8zaJR)J?ghP`5YPlMb;P1f z)<0|?9gt2XBy)gD!HJeeME-g1BnYaC6jbaG{@4HHYP#b!d7PUj4+YPhXN7Cn*Vh9o z4cymyV<3E-Zp5Gync<-IQ~nQZAC41|IZ2HK`cjo0-Hxga^d*5$vfQ?a&Tn?q@Z<Tc z%Cc6I_d>^8T5FgeN^GRRvWY!<Ac)-pXspl`Pr;Z8_m)uV`!G&N4{%2bIvdWGW}M6{ z!fPEFCd1JAE9nISHR4myQ$i|PW*6pzl)!mt%nQ9TNrg|#oUPYn?(aUAL?3YfW-bZ! z@Pk=PwJy1UR#Z)8Hou8fN_Ns$NxuDJ`MC1e1SajHxWn7E4w{iubT$?Hhxwux+vrxL zetbZzg^k@O$<>tElvZ2yBDSPpN9MwurobOHY<!nXapxf<;Ph?RtlF;(g~xkbU_NIb z8+)f*-;Y?ayY)|yUlFn7IY{bY|5kJ3?6B^%xX%sGLno<G;6-*YQ`AnsxstANW}Z(w zYJ0^!J$N}w-t87fa!%jx7EEcJhw;yTV#kS2M@+K}#F{Rpr;7!#a9)@v1*gyPYR}RU ztGx)^v0HP6^YS2M02Pa%Ly0S2{ok5Ld2?A2u`DG1rUQI-(&dxt_nEvrfo{AN_>oM? z<!@C9V0@&%em@<+n}q+k{2Ruy#4q^KUF)a<%xHIbu9nCPd|%xA?L%}FmTu~A*o}x! zh3oZZSVtbCXjA}R00v5>-nv$XcDHyE?M`nYj1U^ODb-OuY@Y~{^Heh91ttxCr0WjT z@tBRn*GDb7@-!`U%AelUNwxKD&s>O8rs!!c8l7@*MNx^?7`jd)GC_iTVBg=))yFqq zTTIz`^rg6|3UR@DT$nQ!``_=%Atr+6t6fke1I%%)!Y))t3^exG^ut@O^Nh%rN~yx~ zO!`pFY(+GOdK4pjVktL;r#yLjki(AOMF{2Vu|;j&TzLZ>(0*v3oyzWlLw>|JmEghV zeB?I!-;QbSC5jVM&M4%QFLVOLQEb4uaK;WqEhIVM7iH@6e0~VZ!C@rRM+6Nf)#)dH zhu?^J<%o)=K8O?<L{diq!~{~x4=LZv#-LF^_Lx%Tc!{m}mcSF!1Zr@vUmVIA)4Ciw zPCueyBhX397H@hnmLl@udyI^;OX_^L(K(TU9J&UVDcWwEuhIF)FqVtx#Pja4+sms0 zbf3Dkk=6KkY!Q_<UUb>L{#8vOTgk7!a!KZ8#LjObKjk_!S+L&9@R+{Ep~?xQC}o6< zgIOO{=}vt)<(^Bj@(VCkvFXF8H-cwJG3{%Y>2Mqz6?&<(ZXU0yH|scu+|$XBV)g-z zORGw}r%(HK_I%OrHU~`r7KBuvZZMG6121avblbvI;&;&3?;PJr;=RU>3_?Qc{aj*N zZ%$&~yWeJ(Jz|zkF}X&B_RaffC<*8MAe(e`e0;VxY@c9NWL|z~x-kmhYSaLWD~Ng3 zm}<AK6&LpUymm)DXph+toRpFG0$09~wMwdT(qNW8fp+aZUCf_$A(YxtlDj@aGc48y z4oSclm98KBvW5Df+77NUApKtOrb95%h1Y9696!PFlv|DSea3pIVWjLVHks&xKwJU& zX-C}QBj`_`BY}UplKywmSN-zy-RP_5w+>J9&Lad5-=p(0j-&ZY4j2y3Gk2`5h1&yr z?&Y`6%a@Zl`sqvQl%c>N<=vdWraob~U=ZUtfFRybLKpI^*0<}+_Cn{SvbOhXX}<jl zKX=XPa!7#|qndM`$6}%u`xw6abNwrytCY}{r3H}+j;>du^EClIR_BrEXH<#{328x- z%;sA7(V*Z-^rI7xU9&o|qPgZ?+(6yn5%z*r!F<MdUW$q^ZIN=+_w->=LGO?h0hXkW ziV#&n+}7E}UbQ9V`(uF!*6aOx`RN>Ky8w6!^`!-hh?t~fLE=N|EEZKg8nJQS5lmIO zfbXBxm*Wectpx+hS(V`}wLkPGBC)mTXP#bGCSU)QRY=`6p=Y8xAzkt=pUz(?PbG}| zU0ZC~&DYO}k2~q09B0!u6hSNtK@42y+u~dv!gYN5W%2O|(?xijRFGZnYqcw`v>rX` zL28Aw-5jbY8~<KQD3)W_+WleISZl#x=)9(2A~{<(xf{!60j`T=0-D+$i@B8I{M5pW zP}1>6Wa0(2gxIlb+dFGtOh)(%Rc#v=dH;h?N7&0m;lztCx`9^L>=Vp$Uqyb%YgQp= ztsIgJy2Nz{G`IwxICEX}ijZ@;&I9iG7|V@vY;G<&Gh`$y(GQQrg?DiCX`ACQOW=I? zy+eR&XR73uP?gH)vMJJ?UnbW~%73*sdmdPfJ~@7xr6?kORl06MizNwLk9cPZB^WH- zt74XGCIQLml-o&6a2l$%S`y)YJ`ZE9VEa@2WFiDaci)Qeu*lIhw$>5BEkK!$cSgTt zAS)8~NU+4~WZdJlJ=+DqbJBcXXl}s1sI*m4PEt%#*%MUsi?c^|Lc`y15y`Fm1d=wc zvmi7HL%|XZ7pb%l<mXWzb+FIsTPa3iFIIT1j$!BcenZHGL4S5{JQS-38%I2g*Gdc< zXwtr<kN344sVVO6g?9DB*4S_Ck=+~t96uh!K63d!qge@*BFGX&J<jY4QiywT@AqNo z3w^Ga3u{uuYWL5FLM9$0sZYpA_jPBC9s!okB6t4iUH`+*_O#e8<%6uP;cK}?)A^SR zn#{`y-p>2K&ru66$qwb@(<^Piul|C81-gJm_Milk+t0}i>34(b2k=u@6g@GHR%>)8 zU@esNnyCEL?>_d8FR<4k<xqyTQVOUoAjk0<71NK;RB<80en<|2o5uQ6AyluE{5>^_ zpTdUXA6b8BapqDJZ05q)e#_v2`h)0u1oGX%d`W)*HomkKPeCkYr#`dx6CHR%$g-pv zygO<`2p~hV#}ngEnAtG%3N0y3m<GJ`s-SNS6u^nR3OoqP@}Wb7dF2W(10g4-Q<3UH zGf~K!nkl@h!Iq*y`AV+R^xC3}%Ck|=lu*@Ob>`nJAPQU!(+M5@e6z@cjPdT{C4|$S z+^%!P#SjS<omOgTqO8VBQsGpXyD%)y(EQY}Mg3DZVb8=bpqp_-j^W$xyPZk`i_cA_ zEuVnL78l#|vqsPARvf|VTEz`buKs=&z}<F8S$3Hxs;BEIF0A_@jkaB}`M>}wD$uHk z*4%{9b<TSzHktRMX<e_p)+nrH>pcnM`MK^j=da^>FmPX?`4R$}8$dKN!P(BGL4Yv_ zp^NCHU70`|PwB8z4N7xT+geJyiLa4t=)=CBmX-Xa%o3r0yf<BFpUg~M-yd-BLJXWZ zLT|3$*T;2O@V-HYx%8TY=HP;M$jh~V&RTJ3wZuuImU5XjYz8>9V7coh#x{S63H4q6 zT7bHzpArI7x^mKzD_$5XZ$1v}7s&9!qPb5cbLx~5QH1i@Sl~e_*10Eih4ZVZb<D2y z-n6T1`k`vAp(R&Ioc}|tZ0ggbNv+UIHuaBWO_P!Nanu#BXXlYyiTr51D>xQiI6)}K zz@LIG_bKbo^}-gS_Gv1f0;`pw>FT#q+@fVGd!5G<4zoc*X`SYap)TG)HKT)nVx0Mi zLq~&wF>}SJ&|Bn*nDXRd6-euxJFsMUMRyteh6N8~n3munvL5KBF&J4P*R|o|aDWHy zRbxmWWZ!OyJxUv|zENO-G~KcB0W&JT=8IS_+|%Q;h9}(F8;k~M94`@#zM(G{m|Abx z)W~UmZB9%8#<kbKIyjxm=A3V}V18EoYU&|k1)^T4mjj;UXQv2;d+rW?{fmpe-opIp zxZsT!V1`QuP?PFODz*Z#U}g&Mm%^cwkczzs?Vqra>=bb6LeKJQ2J86&IE}f7#*{XG z6A=oaQ1@4o5-{2`Zl?MGsP|7&5zzB2N&_hH<Dy>rI54x?fK9k_?{B?<_LonXzX{j0 zW5q#PGz5v#8mi_C0&r-zRUlI%fovepMzJW`S215rca`tWgb`n|A9hSFF<)9h*c#WH z+2PXrz*N#~)^&lHFcm5zpG$z2;Co$2!!8C$0wA}FZs-Ij#cXT-lbt6uHhP`>kMoDg z%16f+EB1b%E*ImM8Yr6Dl&>*H(O-X2ASVn!MKD%sz5sz(li*i#vwiV|($q%&XCM<Q ztfCto)TTTSi&g0tAKDjxflh6OJaCn217_iD{LmSLAfpuxmPLV+>(zjK5dE*ixzBC? zYr4H2kZQPJLTKnKsb3n?OMBP8j0tjmoIiaBTVV}?lyT$gIIR3{Fu#}nYaIg0;LZiU zxC}DEyn(CV2Ugr+z*F+`OCbW}66%-25}Mkp|7_yGoilvR$DtU$+1lpIx{uVaDonQ; zk@RY=5nYh<sRF~M+u2+*{$%7jg}<`)a<9gm)6Lzo8=SCURwhJnJ^0Pk(7SI`pTZ@C zxvoME)N2Y#6OTwE(8oJG-(KIndCbw@@7c|PMWOa`&TIAQy2f7k^n;&8Pb2OB7`0ec ze-*QN6YrkUED&Td^nRK?g;7k+V9j6J2lt3FAUJ?;Hqs<)JH0_;p%V~aI;0u*^reKE z(r+l|%>M}EL7uuDF!wcmAYr?xKH;+d^X(VkH?@u&m~*|KJZ#XVZOZ68wDcLAm+BQp zEy;AN4wL_ChV?k>tMc9^7Y#y1&SSQwG~dTMgI*ushd<8f<dIiDjUFBG%zT=7-9EvQ zb99?K86RHq%$w6lp}B-<9ZPgE9r)YtEe;l<4;+>;1ZstQs|WiqUUV7YZy;qTpbJAr z2XCIYk&^hYJ21SrFm~~<)3-Kd!|nOuGHe6>4g145E)&z5UwzxXWae}|N88=RCB7WF zKIrI)r!PW&6AJ%)`B6*!e)W#~Sz=V+DdX^t64yepiMl&F68v;yN9;EPqi$=EL_@73 z_J=^~?Hrx><1HLzI-n(&0d=>{RQT=G=qa17ul;R3Co0Jo_swHRP~;L}$)Gh5!B0v< z#0}P(a+3)ABeV7=BF0iHO9&ewJ@ww!x20h9U`P%~>(jITOt+-kVs#j6s8p%xEb2=6 zK8CBT5eT)kVATf>Lpo1f21GsL$^(D&r6WwZvq0!z*Byosj4g^v+)k<76}n1Qu+LBW z%62Ei#bua^9X&&~Y7{lJ&0cA>`L*WS=AK`s$zX=MG0PPnh}F?|h%{aoAF{wA5- zQnFj%Eyp~Y?tGC~AtNF81$%EN1}{!bzI9>zY~uO{4aW_^cX@*)bqBD%WypZdS$faL zZ!Kc4aC2rMjmw<2O<~K3C-0(Oj+^<9A}3^C=cc_iGP@VT%y{)InS#w>0u&TU;(Xsz z_LGV7ryhk)Uc#fvsF&8_!xLd~&@s!=Cc$~_<iD%XMstu_9oIuw@hYM>C1Y+;TQx|h zk&Nl<h^XkvnyPk&P`<R!3XQ2n&M7yCDw9tpk2;K5v6#AYnx<sbQv(xZ#WGZ5e$~Oh z3A$}A%D;(foe$?_-0t00{0yEi7Pe5%o*^Gr?Don*HKwedIgsSD)xdJX)22Z~=b4E? zoT5{%+->Ut^t(G^&Xk0zO|77ha-Cs7tsqv)m$dZ?nH$Ecd7gR751AegYfS0tV+BBS zrF0HXZn{4TwzZFXr1W${fME9(afq`(gKyx!6k3a<4KIC*3=y&m{5XM?b3&seyu)mZ zjQl<AuiBYMEH~>_rO`(M>ARtHxQ>FAZ|NFc#$YdPv{){xOu|$sKeMp_0_`aGTfGE> z1bY*Oi<8vp1cp97$EmDR)YtMTRKn6sVq*gZcFGj?bdf(HQoR^;Q7Qh#E4!z)KE+lo zu6I_-@-Bqhc=$e4kzH~26cBvqmD@9eP8%?TPHbdR9p*^MbUePQw47{<YDR`1;yKF! zsW7fuuQbuj-s1FuJtd}Z8csOEm7YJ|Up7wK)SaiTr8%sLXDs6MlSLgfUmCyaPN;?< zS+sf2>txg;B(KFsYOi^?xHuk-61_`}41l)SWW9G*mU>5}g=>wg64_@5&`#exbW^A5 zcebjIqCgupv(vffQjM#KT5gTW;HOCW!CO);=cob~Qjq3wzqVvT-N(n{%SNtDcOUb{ zI6Jb;u|%3V0ubZz7OJnd44M#PNW2wuo{rIvZXt+XRAy?iiIB=;7(RcN9#f}ibvKi6 zxO{uI1M4a)+Euj{LC?WW$$VK`i#L~a<`X}yLcAlcyOC;>C@aZU=gPIbN5ojuHL4^l zq*In$*}R`_KlCc*5MwUN;Yp?~OcAnyp&KI*j?ySztcbDkwLX=!y|dX%kW6@aF>_+E zwI!RDI*sD3sn4Pj{Y1$garCmzIN}q%r=7-|9P}diS;%bWn{gQ9b}vywg<pk&(CO@o zy(_$6zIlvtpTUtyHOb3T#l<ZOn|W6Fpe%NJ1}D{9K+)AHWKUj2K%64T5IcvWm=YRZ z&MKo)WSCDab{`rZna`yU-a~Aqc}kV4CsSl-6(Lci^1@9z%<0^v<<uxVqi$qrnh0+f zji|`jD{VyLELpsSN6SPpDzclQw<YCkChVN3vao@oIKpp29RwP#mFv%jV8EPoX6>sc zQ8j&gDyx6i&~HVMP(F1Rn2n)#_8;yrjTPF|wg`K2R<Y1yI3^4uL-ff7FTO0*3=_*U zwqHi7o-wFNAYME|m;8Zxc;P~@c~{Qk9z!8z=!?Y7>=pIgI(~^O8iJCxhkA)&gJJt} zse{ViFC#~&8oOFtF~3L5wT(c!OsqCI#_#T>>!j+v-sT3^RI;9zmt&*VvAqbj{-*ie z@haGq+;zHH7e0>tmY=2M0aPBn+(b#`J<X{9G|p!`Knl7e>F_Wv=ciK)7tKgRiEtxN zP<!tF-Q8Igu1YprVj*|tcSe@4M2YXKnR(M+xgh7ODe>J8mk-JsMZ1PjWSEBkj*VoV zQ9>fH))U%B1Y-_Ksd87aW>4Z<egS&L@x2mdjs7BvnK`qb;W7NErHQ#rO|D&_L-O-Y zXn7_lyhz+GxdJ7WXJhCXT3z;B*eHwafXF_Mktr=)To|KgsD$v?ya?<Lsb~+5Np#{* zYzl<@8nn@fFr!j5cM%L<K)h(>uJ9J3rrI<z7++Ml%EHS=+M@I#>#);}43{%qy3>PI zZ}{Z?i&GFooSuGAZV{I<y_W>9bIo)QccX3Iio+<eSU8<RW&Uznd`dxmrs;3{3svBc z>S{ug%=uSnt8(l|)C}1Av!`T#f(e=u6_4D@gi2z3_k6uq8WtazI1N7n8`_$bs{5K0 zv6#kWVUtoG+dw;7W?<28hGJB%pkRs<1W1fI9Juzm=zM=Q?@mS;kIY&&h;r`Gna5G8 z%+}g!th-`bur@G-fQsjVt%2vCx3irwSx7z3EQq2Ej=sr(cu0mMRGma&gl@h~=R^Ag zG^OrSxsDvmTou#O2P1wjook7}e{p$MZD|15yFzVw=XZ@XUQA_eE#}^xhez?aDhpqx zwYRm@h9zsIOqFcFkI{@(EV5ST`fiG+cA*FaJ|^k%!esDC$0pSf_8;_iY;!xR%Ht28 zj~K4pb4CY`RJp#ma;n%28J_UstMSJTh&keyD<Yju-E-;)V1;SZgGrs+;{U`SFg&Nn z|0w|d1hD*=;}=n8I;S42)@bQ}4Pm!)2!4ui2}E;H?Mu;8K~h6NJt}JnUVPp=gr+#p ztWokrYCZ7G8aFPrLJ!|4<n-}@PYzheu<y6S%8t_)&<+}?Xf;O;kjJ#Y9>9Cl5XtR5 zfO*>1WXT!K^C3byvL7}yb;qZc%qvgi+z{e^Jdov_!8~)bp+(Xd!+c10!~Z#uAidED zFj+xxZgx1(WYhm{RCe~~K@;<`4VXQCvV4yCXNfm9Cdp?>GS(zpaayrwEsYDXLX|kO zn~HCqMJRwH_DbBc6m=&H1YJb5%|FuS^pC&^3_|dG)eHDRTk6G8G|H}5G|tOYs|LgP zU3^nMkgRvgho~t|Pvx`IUo5wif<vl@=eCAKp#A*q;5P&t(nV^<4d=K@>?dffW+4Cs zgt!3&0tCdb&Q#GB3PcbD6a*wN8w3Qz1X4xD(%A(;*~Q7!(ALyR($35tRn*?q$j0-# zjisHnsR{7Q*+okR#)=rE&JV-`^g<Ut9$(z^GJD<o#5Iw2J<;^M?pnH@OuL>q);6Op z$;7AGg`%**$Ng5Mp@XG`<Vu>Sp=7<GZW+o*PZfJTgb9MN5C-MDAS9|1%2+8igs|#& z;<A496qN%>r4$7e>Xbm0KaZb(8`c{*yg9tvS*l43GXDY=Wj_5suRdO{2&H)+G-qj) zz`}%xIICMkPse)(nH+gbx!q>VVpBKjduxc$f>Kem9e4z0f~LD8m^Kp7{Qp6_Z^fD` zx1K5bx$!!CwQ4n;-ECOTqCw7zILxTfftd|H5WL(I&jw9<i{a*~bNqrOexaBtPeNqh zkz=qX#3RaO9DjrVaE377_wag^?zktKBN-S$-htkx41_Vbo2QvXIercKHI0VwB1Pa* zBmKTXnwOzBMFp92#-&O;$T(HS$wT-qDgja(%(;kCwtme=h2TSI%vp?7GM#-L7}y{O z3U@5*0t%ij@plnrm$aMCY&m4|u&+8kQ21NeQxjr~K-`t=g$^@FdibqMu!hWQgja~B zDhiaHLmLqXD<~{6)L(Du&5TSIFNca#shFCALhU%7d7#lVE3z#B6&Ke$4P@&7YwN3m z>hPU#aXHAr-Q793ySuv-io4sP6nBcdQ{17ryA*eK_u{nZ<@diY_u;<8Cf{ymvYE+d zza(fwVW8W;o*{wL;doa~{2RtzgGjGP9L6R=LZR8G@Sdu7lMRQq$_Q*B9DJf@uU-U- ziZ`^16AD>%q7x{XBRL%KW1&!zbBt+&{@9K$aBHQd#=RQ(<=##LN;i1hpm4$|J#kG* zpfEM0fAwlB+Sg0T%ENJe|4h$eV1*|)h+_ta!=TQO)Qgq(>ZQZ!qvYL;?p3Il<)JSO zE8eP2Wj)g*FdJ37Ogg}nAx=hCR=LTGPV*3d!+8oUmAq^xOZ_VpGJsYO!IN8nJS2V$ ztcFNnmukc@8m!99?NOj)-CafHD2><p3x7pP&19s@XM|}n3cpl-Cp$<Z#OIp)ms*`< zg;Z!Qytwk5TPwN6l}Q#<Vc<+ELIR+<KxhDCj|+v~9=G{U`Wmuk(FI;FgkxhzO6k7u zIxupVjQ1ji=*IA)KuyqOr(119WrM`giS6K#UJ83N_R^X=T6?K=f##su&`81`oqEii z8O39d@%`lC?vUXWERHu44DL$+eS5~NuHlV&=`@T_15M54{WcBADIX_He8%<4f6p;4 zAp8FBw#KSVPa%Sohf3t5Jm-0Vm6MK0>J2_5u<}KhrZ!SNZ_WG+IQyjpMW!1WhYDtp zX$HdMH~iUL9#_$*f3S@?w*YkDy5Nm;>9?PTW!O2U+g?!_;zk?KHEAkHa@EJzR2get zEgDGulMA;l1AGb*;Zi{1Vz@tcP-yXsH~|Wl*{-vQ6&`M>kePfV)7o9~y}zP;3rC#t zuGR}aF!Wc2-OFp&c32*Aj#wNV#3j=>BgC6#!)ciW18eR#=eDqKlO&5rJ_UcvJFLOV zxbfm7#F=!qUxra6AqqLpa%{6*qsi#cj!K!ZJ3Rv@nMLP#pFm8F76i2&IhnSor=pSC z$zloj(g{w|t?&chB$a;AUu5CER~`G}*Y3bRoGZ1mIN|tbcp@TbLDim2t{(_135X^q zm&3+N>a+Lu6llT$Gs~>~J1@s@uNGKBV~Z>6zQxyPn=sYR)!S!wkvA(duYjX>x5wDS z(v)PwV9RY~!RGjLSQ2YZ5E%5ksi`z9sLB~Zy3Y8pj+uSL7S1{+JI|xJ+wRV9O7L7k z+*whtYFW#y9=Bbz7&kxMBK#VW|AYiA|I8oiJ+^^+Z%1(UifQ!-RZ0-~CvHhXR1g<| z{~hm^Zk0hddkCUifW(e&?U-$l1u4NtqAF|nDFk%QH(Y0s5FK#RF>>cQ6!_9hTjR2< zekq~)58sv)61Bx&9<Md?=#i2#;QLcV(w*%PIiQC`n%7CZ*qIq4Kwp8MoRn5Kj!w55 z<V?NzS2`#5?JCEZ{#di6;}x5M<<u2*ZC}Djmiqd7&&Yh<2W##~Q{k5s)JHm$2qUtg z7S6BwZ6UQ>H^9sQ><-7FKD|uN^iHfKuYK|o_GJ^uTa&LYfQ^m~&N=ySIP|01eTNy5 zic#rA-5*V%4m3DDgetlcM(^*U;w4O>U`{0mcYeD5Ul=eR0i?;$9nSdvVa|}1iM3`Y za%FT4k}EWj85%}QGU*8k<N3Z5F2I1!zLJW4ey!5v;xfc#!7)XcaH_p0!nve(mX4gI z6Cg@Ri5}g2M*pSCuBU5WT+2)Lj9)w820k=!ohCyEJ$n9+d~i=}72idxL7kN>`=|}G ze8%WbtZGjwxtd6CS<5Z5s8I$N=Wp$3&=>xTE}iBy{{G9RVMl8xXgO;9N=oj|sqB@P zFagv8m&Wm30@xnh7LCDPl#ruDvzEZR8%F(L&eI6=sL2p?X*#h5+k@6a#=P&*?-JG- zC<+m@DOXcS?SOQ`1Oy1nDBng*%Zh^z-wBE@iMe$yC2EnrMaXaEncp{o*(}I-EsaQ2 zC;#r?+$xR@6jzr5ppqRtjmy46%;v`JeV=JO4)x4@L?T-Hkl~gLJF3?;$E1Ut;b3*> z-iHaVSx-5Y49d@bxPZ9X)?*!Qz=fkiIu^zJIzf8TV6Jh%X$Y&s1D$|Q3iC-1_EQ6- z!Ni5#IP1jkobrtn`hq#8_^KvT89gkrAfbP?w05Ztlagb#h%h5Z??rM7*DkI93H~{O z!;obl@qAmQ!MuX~%hrz<x5*YTc1%HzMLXGuaMsmdM;Al8;&oaFzv%*N_eU;r7+OgL z-s-|a%e@LzQO8)rK7`nD?#wc_$Vs%rvSD7P+}wzb^Jg4o>1^Rxuaebq4|WWdJDBaJ z94Ig{0|lp1UV06YF$Oyo>@61aWlppCaHg5EP@8hv$_fCU8zv&*6IE&^H63Gq72-^R z5n$12ZCRxitX~o`6h7CKp(|P)^QWlj+csyU@7|%qc~Y}VtRvFH!Kvctud{BIo7k*{ zzVHC9f3J%c?q@>JFvDlI8ZYjBlpj>>Sdh1)g^Il@5nha+c(I00`bJh}G02na4NgL% z2z{ZamFyG<ey^|Pxh8c-8<gxcLt;}K=N-w(82|MEb<i+Yk50x{@@GPopvo=k)@r)z z6)zAF7w;7|RLDSMp*^z*tvGgGSVY8_JnhJsQYi&vCbl|=EvVm&lb#av!#)))ZEqtg z=~;sK;QMZe&;8*TS40LjD}%4Q^Gs?dPf|}2Y#d7(BHEzR_L_-f@e^B%J~TdAd6E_# z1-^F?X<R(;%|c*c34sXbNj!U?g)%>jft7%qfKh<$;wS9JS-PyUzvVSU0Wo=+I)o`> zU>*isO)N(mg>b>LQ0CJkYMU`O#+To|APXs0v^i;J+fx0`--GGr%V(XYWG~#$sGM{y zhIAT$v8-0cCubd&*@FAlktft=<5PWiGgb>FgtrhQ*_pqAUBRordgOnQZsUIKcESdI zW?K&Xd{S<HvRHC+0Y^j3l6QnposPKkNBpY(+fyt82@q3(dpHyy|N30C{O{4|6H_le zfCq-G02{Amp`eP=?(O*D_YUG1A^JAe3M3^ZKa8iOdjI-O&$=%SArL=SJU6DBC6pDV z8)F<sMrC~*g{0pti{+y(CKGdvoXy|g47#4<J`a0TXHP;vOyuV8XRb!m;7v2B+Quoy z6ceLLZgwWDW%mO6NU{~T^RZD*7GS^JV)*_>IHmpP3Rf^$-zUlblGTD#qvtHoA!roe z2yIg1lHWJM<#^s}xEG`<3Fr0$$yp@buFAoR#jQ_%2M^AscdWb)X<fQ1TZs~tiP!Vn zhln+IlTU~tHxsYDRDmz7(GQMLmiabhfKp8!XQXsTM~Rv^gvNQPHg50z^XVb9uDasO z=1m39e#%mOcgjDN1i><L%A3G2PK@a~qNdP0@`2F3!a#UIK~e2b_oRqKR64pg>|eMI zwf;y5WC$uNRyAY>Jjo<V-NnxxQBg`48pK^I&2u2)0EW2b9VPlC!74vCepSL{;X=TD z;kkX9DJPZh_o)j#UJ<Ihp`XTW2R@BJDHT6l6*T|u)v3Ihs2;#kxH26e7IENby#qm> zL*Rn7qbhcAjORcW41wE1&6<?IQfN0(y4P1^6lmkYHdtB|=o5j@LygI(F_(i-Q^W+* z4N5n@;AF#n&3jmEK4NhRp!v#Qp2nyV93WshsThT@KvSPIU~c2vm)xOzDTas({x{2; zrQt7IKaPA|{#<&)1<iQ5b&%QjqSRtY`GwLB?-f!0Z1cOKE73gS4%z4*B}^mJQC~+( zO9TJ7T0r*legjbh#nG$<%ePy+!|cSiDy#i&dB+_|ISe=6=}jRrvv;GCCy`s>i6<6d zACOeHq_@YzQ#9)M!yezR*aW;*=pBmCRHi;yXi=T9vt!A<L|RE8rYv(ii+)>8s4~IN zB?{>uEAtLTX-Ku{E$T&gg8#Oh$OHBccrnO;?J||If1pQ2rQT+VLwuwfDn2a_V1KyA zdB_`el$~0lib5>)tYABK*xuLvuq2ULy-x$l%HmI4UV26gjBcAA-!Z<SPFmt@l5B8H zvBft>5e#P%&^OpvK`jH%8nxabTCAV<_ohsDg)v&B^%4`h180iX2M$+rG9A*Skh6J# zA1{LO-j(8eYSLd*6TE|C2LpU%wc}2C%YxVy;cyr&ki)Hb1<LX9-K|~3>nPQjljh~} zZ0hFad@tN_O7a%E`g?4jNDEvJlIFa2(En!NpRfB(kvV#&{LPl5UX%HpPZyqf9(Hz) zjZ+VMacrf)e~IGN7|$+I_-cd$#Oq8})xRB6ZC8UROHY%;)3sL8@LmMX{3}_A?Kaq^ zS>aV7{bi8U|6)#q)VJCfTZHdf<yJZlB5-OPh&!6K*NwcJ=jAUrHtJv6%n}Ai^93rN zn{Mhd7l6K@B)Yta`XiM3^tU%*t=AHt+d&LCVNwfguXA(5b5yJNqZYQwop~k&gfqyb zN~H*2tx||m&hzxM4^>Y>Ve*hx^y8lh591T;N{#o{iu)5a>dg7t>aU)mft4CD)<qHE zfHO$I;aAJ7=P<-FZHuP*)BX$>Eq&aW2#&Xw(;|Gb7Qx;1Ev<Vo46Q2cixTsk@CG<s zo=W<tN!O^K*z2NVVWV!&i;-0r=&YB71nBX`g3_Vxb%I&AOqAZtj%26leJID*ZvZBu z2to=;*9%PniQ*{S%2S;f;M7r<{b%SVMO?gRk^7;&$Vj%MFr&@RU_RyZJ{A-PR^<G* zR3lhJOqb~*n`xf|zNEEK$@p_bGL>q;!9SSz(vHvzhUx{0u~9O#CNbIHyzimxF;s4S z%ai~5ixxul4gw5$q7(E=IV}T@SsVfrFhc`)5c6yPIPaNC6@2oyl&WzW|M6NM<aS&V zHYU=S12>$OE(z#PCoUt3i#WpNGZusN;)3}sY8WQ|@uts@hvD<s$LMyFc-cGpGTB(Q zMb#nsCc$V6p)O%XL6m=W2{oM@>C3z#!NI6x%6pDV*=+wdmp>(u$W!(uq#XM_IH$%e z={R2c<*U0Rv9h;<AVbg1BEM$-b7PeM77H??p+1&cm@qCT!ZiYd-->e+gCdTmmnY_F zk;K5t)p+0#2cXo8UHKR1-m(YOeQQ#Nok}99FT`)hm>1QWq6~qZ@_+2JMhK~vAFYB_ zB~;oEcvU5%7kRYW4~M2)%=MXZeYRlOy3g#)XQ=N91aC2WT{qR&C?L%41&z&&j#P{| z(vs0&$KjJ{J3pTG3Z=uY6qFRHklHKV*k!nI7DI5uhHtB3RERS&E~%MiwGff<TQ%#7 zpouq3xD@Z%(b9TC9|Lqhv+;n0&ycfR;lhD#>@mzZHW}+(jm(I-%QfvSrMHS+o3gwA zf=&7vDa_qfJBX-Bf4d?FxX^e7r=YrX91yu{{KT=PtJTfsEOzu{G*iyDq#1IEa)B1W z9dWR2YaJ@LRNpAU=c#jd*(gbiHpq4yZW~|s$VF{6n<)8Rnex3E&R>tI>ef|u<?P}j zHLKo}n@w9I276@{k#T6Wrao%l>}ypCJ|pNCrgl`Qky#TbyhWl=;?dD**~P)(4ypSu z{4=@{*`zVSukh?VyM~<WjRkG8!dWeq$?ozRiX{8=g^gzsi&&<xj~@L|$Y<>J`kBGR z^_etPz1_;X34BI0+DN<+RqAJ|5>wNEj*0&D+b_Z}*X47Pr@o847d~}i?`U}2Lz74} zGc1OS=JdOp&cLI-H+%oXwyLz00@j#&J)MtDR!XqR#CXu_xbRKI7_#?skh$u?r*z$F zYLB!}j*~t+Ropv}nEIfq7I8%j5}oQAMYmOHA9HiauBy4=tjbLB8%L$K>|O8@sLh|{ z7yXTf(@=l4DV2x6s#K-J3}f9xL{sbR$%#-@dmX85p9_RJ0Fy;#yey<_FgN@bj}O7! zB96b~3JgYMW|C9v*{}Uh0rNZJFMV#&)tiFvlQ{nG-7vRS)28to5a>`V?zxv!{V}{6 zt4`LI@`wmjLx)S0Tr%HIoj}GoU5rZU9igAEM|<-SmK-c{k*_vlhd-LRp}3zH=XW_D zAie;mC84wxT2-!A#hXDY!8uEH&N2j&>KTmOeIaKcym+jMcr?2TU(cQMw_^Z;O}{nu zb%DA^yL5Hy(EHIVu-*H-1#-o3W2Aj?!H6*rQ6+V3m%W0^rNlLM0M?m4cGwY==CNCv zq8~oh)Zf`SK!DXwNpF|5L7JGM@3{Q9X`FFIBF`IUbfv&%Dbb$?%st=I^Ld{zN>K48 z+;qRG{yBtr!m#vI$&y34^+dBgFYmO%-#mutZroY$M*!{LQteY%6<sa3^sT9!G3B<B zL$YsTNRNb>UoxVUhxLp=b=I+<2|V={zdft;yq9@%F_@f1V|*-F;e9N<vRtsRo`-Bs zdSf2+4%&4;!OCZd!D__q(wCV4J~uZb{~3nhFoP^lc0<VDp53(B*&vMZY>@K<S>@=W z!`Dcu87wPg)5r{DUNo;6@M_WHM>;t6!r!)tocO4kn90h!;qQjZ`#e0t*Y%GuXWLN} zUm6E-WG?#bb|hMCjd*ugHQ4T~a2#d7TJnddb>dOpv5q8IkDEKz4Iea=fS5f>@33zt zcb9Xd&of`@?~}a0VeqO8K2SVWYTd)YZc5G%T&QFk^nQCMHU8PI3k^)ZAuE4W^gR|| zocc76rL%Aim)IHyOhi5b!4R#s&Lkz=7gIyB($UYWy`ycKySul4g_)7R9qC3>X1U&X zG@6*ak}Oobup3oBI)ON1gPAKX#BtnSbxE1fTK3E%d%Z3aO6brg<UbsOGg96mIqXbf zXVINv0lR~DAJ1P&m>+f$rgzcn=-(nexlz#QqLC=ll~^`oS9pF*%Vwj|M|1^@NY}}@ zIz_}%l56oGq1_?`^I^@+Ranv(kNh^)bSg{4{bB$ldJlnnaW1hKxXH8CK7vgtNn-T3 zco+QT>_3ykBA;m#?Ba+ZMtJ4AnW()jfpaUJt=Q$gvT{qVABn-uC;^2ywRd^eYHo>s z5QZxg8y&0--?puu{E`m}sE9eBuq%Pzcp(Dhz53mR*x}r%K9D`)1d9YyEU1-?`yN-L zq2y^<cSp}AXYEVc+JS^D;SYbR*p$Ts34ATI0eYmkgikx%vqK9A*!ZDJ&GnB8fa+;> z{XdpDnPIUFsY!mFqe8ppBkcQEATgmc&Ein7A3Kv$vRP)?5l}zOKJ)}%r*5?b6uzMB zyUeK}PL952N1ehZkJe<}WNv=cy&7+MMa}Jo#M7RS4ZpV<9@YaR-#=ZFpk+z;<lgba zAeeA;_>iDBhOzyN9=9KEs5UB6E8dk)b+7!)yASjK(&`?t{Oqxdsjm2f9xH`*@iZ}u z=I!I8rwyC|diJKqCT6-ui2*aNk7WALnrDP?BR1po4XJIu?0CP@SX`o(@dA5GY7UjC z1;rnj$H^4ezF|kl7&M4*#tRN*=Tt#Ha`BD|(;P1K)g}f8m^S5hB+adYvfEGR=0amg zGjc(>#763g`LR={$}~IX2doZyMv%BPX`W<%V50z=&Nc}I{F*fcR>t695JQ~#AQlkg zmK?qFAA;bFkH_w!4uHg7#c9UGY{}rnWCCPa6G7VfnkoXfX)*x@?tO=`?`mlwY-nl? zjKM#X<1?vr?WJK%rL-XKwDoSyY&&f7#C9XlA{1cUYuKAe6KW!zWFDm-pjA*S_M{w{ zzS_9cdJ6}6LxcCks7Z;JG0ZqD=CYb16rc>E7}n0jiT7{_9hY-xD+kC@omopgikSKS zE+o|^$PbV_)pV^ldJLuqan`$h?adV4Hqto*q<8bl6}1Xp#$r7hufsXiApT%h$RQVK z!!H%sQCK3DNJ8@UVu8*6VfQqX)>!*CxA3P+PQPI$R~~a3eKlLo#1AbHF92LcW7JM5 zY53cU>Isngr=#cx>V)f+Z<?Tr=wm{Ex9%?m=i{M!ndHIK4kBrq`pDB4&nAylY8EKJ zl(ufClr~g>46vJoCATdxGOM0!fg&-J!5P9;X~=Ma=fFC&i!XKIs76%yv+#7n<cD=- z@DB&3Y`9n>yj2(wO({1wkFPx+(pUzUv*V!64psX7rl39_hnYbzpNaihd`+u@<<a0d z34=f3G$!UddK?<&dwUL|;6{rv3T9jSm?`k5%Auroyd;e)YsfK*Rn;Lxc}Oc_7qz(K zkldWqzIZD8H=a1{s`i708^94ib5)-<@xqgB^n}XSWgV)zZ1Ozev_<-|Bo`|Q`4M6! zVk9dpYdE*;=)1u`iXZC;Cs2@V+<Wv05o|MZqDRgHe0B*+?^zwS)vwYCP8!L+4WNL) z4I38r<B&J%RvF)cAsE{f;5Wj_>oJcs-OooT0~87gD`XQ4ULtE21Xx7=frY}<ks7@6 zyT|&JaT}lXBZAjXxHj%^0^~ULKCX#<%iIaYjdES*TjXMxJW*R#Hh(_07I%4M1<d{m zO+uC*p|o@|0-p$=;7~twM}#&E*z#=2-R$>l^M(wQ%kBk#dWclH4!Bgxb2}obF%5ho zB&#P+iBTJm%d}hQkbUZHRFUioNU@~+q_p;#GI&;{v!%I(C|4TOMpYz8n0M&C;#?`i z!MOWk?p0Q0U1o1EqhP7hE~8>Ja0SmVg!*M665bT%g1X&Fa%BrWg`sIW*<8@f5EJkx zCE?V7HLNFBEAn{-+if4%*w|U|!8lQk&M%Gn!^nFU9&0An;Hqd-qIiQ}=4xvKLP`gm ztplO#QhV?SnczWYw^<+W`3_r6&~fAhk*4Xp->EoQi_#9?wW`LBXOLwnam5br?Awo# zQna&I;y__!a4O}8_NH{b$+_P2`w}gIs9xbQMg#jO?t49C5n+FI%PxA^d`Z^Y;;H<G z=-GW`O%xQsf|`bSJ1vNlw@t(UuzAVY)w*LzX!oD3Q#2zlLO&|oiUn3%grJ~dcgz!v zsj%oJ7*gG{z{@50uWX{N&{!=a>^-knzuT0f=RzpoCq%QRSe~Iw0mBRB!9DwFcS~4< z&MLlO!1IQy1FhR!>}vK03k@tj?pNuURkA?AiwXYFOR4nguhlDX?8lnkNR35kY`S~- z%{0hJw}VF<zvf_)h#4ME|Jbi)T+`lq>Dn1EL*q`MWa`yMrTjg(PozM@bvLe-VJhnm z!?GZK<Z135Cv6W<*VtqN3<OagI7+)(o!70-5Lu6}x%$Yi<4A&*1|Exz{z&!|p%om} zCT7i!6&ajI-n?)L3!34dH?*JFDL-g!qtdA7FCUXkPR1NHqZ!)oN5+tK?e`*E6Pon4 z>7w59UP~x8f*>^2zHERG5tNn(?&bt84_;7M3aiibi~-34$J8MOKV!B)sJ*|B2AI8l z76+30d$l$?&gopf=i}IaO~-OjUqX9XOf;u~!^9nw>|cZI6sh?PXTW+l076J#c3sWK z_tsFTLb8cO&pQSsja7$zO-*~gm=Aew&u$d9tCl$EuME!}K^k&M3Vnl~k{Yma*qX$E z(oQKjFQ1J7+_JE(z?&t(WmUqbK_bt>LC=pDP|oq?FWtXnaamWJw2yb2YL4#kcS~77 zOG<TH1Znwa!MXRH)3%4ar3Y2_JQq47f`g<EZBfcN9Y($3bbmy7WPs`_D7v<Utahu~ zp1>sh>_mg=D;vmN_Om^P1A)lUUCpxHgk?7N9T(q;N+|=kGLPV#-f>XCy5@<pt<N;p zz$Byiy`VF@5yUFt@1-%-Zs{G;W>Dacn4FMqW^X)iki$cujJX8l+C6c>GWCgmb6Acf z$d1MiY_nqY^FtmAR8fJ5N8o5v%c1#YKHs6X2MXCiW7BL3`SUN23WF38kL_jNFzMdv z@K=+KGF!T(!u}AN$l`JcUZmrn+VRmm=8$lRGfs42!ZgT+lg!AWaGN|NsTt!&@oHF> ziLPJo9x{PK)C1FMH0FR>sM$$2eFGx&nnrawwSKC=S@BiS<5k+|OS^34BuSbB$nVgA z6bBB}Cl2@~ZHOL*MHFy_5KJYIB{hSHfknqsY{M~WLX85Q)|di)Wz?J}!tZ&)aDo|i zeyhZa$2L#15aVfr9@$C8g})ZpQWh&hf$ZKkOzdAs67iKsz0(&1FXqVc`jk02TS&u+ zB_B!Zc{Vs=O_nG&)@J1%vM{s&>pL<KTPyI1DE=Ikkv#$WnFDpXF=!r#Ow}^=B4bk= z?vmD`KV0kI+)IdQC{;ue8~mnkc6(9pZyc`1_6h=;Osh+ArM6g{uf2Qx+0kcaf7@fo zf6P^6=gJ)So?-$9;t-&9;@FagJ!nkt<#zC8G_|<+N_NY*v-b^+ki;^AsJ9|h#2(~^ zWZw?O!re7*mW;Rgz}x9U9aiaE^D_ITnQ@#jzcDT=qP#Y7PK?^|KoaHhI~T~|-l8BE z<mf=4FTLLmX2zrRYoX|-Ogwjp4hBdxa4Nb%>Clq8djnxHkFbTuJoDoy)<^LY@n(>< z=9K{AVW*EoFk(>Q4EHh;SDW-)E5SQ5+JS=nP9Ln2HpWoByo{}m6)w!AtgZzfS64yp zQ!`xH79&_i1xoM>jJ^<NHu=cP9?K=B!C?Pj%~cn##I==@Ph3iv2_ql=QLrH{YWjY? z#arYNzZcFr^Ce?mp9&=;QI6$Wnd@({uzBuj#TwYHoqA~w=CIYbipC8E4*buhn~;^w zzU#{?zR~&?&JOe13megpLB)8J?Gm4;liOBL@LA`gotCEwf?<wJQ0s?U@WGpa@|B-S zxUK0&>^0&uV|0Y$N36_5q8pCxMYq|C6ek6IukyoM&XL1WmRI^9aHWo?C*n`s$%#+{ z0=VLq9j2sU`IQu<Yx4zzLY9%Hp7}#e(|wx1jc3um(;|oa#eR?B9o`Y>p!P}5aQ=_7 z0U`E3$_DFyl#L?Q|4Z4Bwz0QBakp@DXR)$yVsUkHa{p}quR~zZCj`ol@_!Ja|5_ln z{(~TC%2+rlnL3(US-2udi^-{fRvl3OE0BFkaIkQ9_4(|^_dk7r|3_c%e_&Y6|DV49 MhV##hD;eVd0OVEfkN^Mx literal 0 HcmV?d00001 diff --git a/macro/beamtime/mcbm2020/mcbm_reco.C b/macro/beamtime/mcbm2020/mcbm_reco.C index e28de7a526..1726176163 100644 --- a/macro/beamtime/mcbm2020/mcbm_reco.C +++ b/macro/beamtime/mcbm2020/mcbm_reco.C @@ -1,188 +1,202 @@ -// -------------------------------------------------------------------------- -// -// Macro for reconstruction of mcbm data (2019) -// Only STS local reconstruction (cluster + hit finder) for the time being -// -// -------------------------------------------------------------------------- - -void mcbm_reco(Int_t runId = 812, Int_t nTimeslices = 0) { - - // --- Logger settings ---------------------------------------------------- - TString logLevel = "INFO"; - TString logVerbosity = "LOW"; - // ------------------------------------------------------------------------ - - - // ----- Environment -------------------------------------------------- - TString myName = "mcbm_reco"; // this macro's name for screen output - TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory - // TString srcDir1 = gSystem->Getenv("SLURM_INDEX"); // ------------------------------------------------------------------------ - - - // ----- In- and output file names ------------------------------------ - TString inFile = Form(".data/unp_mcbm_%i.root", runId); - TString parFile = Form(".data/unp_mcbm_params_%i.root", runId); - TString geoFile = ".data/test.geo.root"; // to be created by a simulation run - TString outFile = Form(".data/reco_mcbm_%i.root", runId); - // ------------------------------------------------------------------------ - - - // ----- Timer -------------------------------------------------------- - TStopwatch timer; - timer.Start(); - // ------------------------------------------------------------------------ - - - // ---- Debug option ------------------------------------------------- - gDebug = 0; - // ------------------------------------------------------------------------ - - - // ----- FairRunAna --------------------------------------------------- - FairRunAna* run = new FairRunAna(); - FairFileSource* inputSource = new FairFileSource(inFile); - run->SetSource(inputSource); - - run->SetOutputFile(outFile); - run->SetGenerateRunInfo(kTRUE); - run->SetGeomFile(geoFile); - - TString monitorFile {outFile}; - monitorFile.ReplaceAll("rec", "rec.monitor"); - FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); - // ----------------------------------------------------------------------- - - - // ----- Logger settings ---------------------------------------------- - FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data()); - FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data()); - // ------------------------------------------------------------------------ - - - // ----- Reconstruction tasks ----------------------------------------- - - - // ----- Psd hit producer ---------------------------------------------- - CbmPsdMCbmHitProducer* hitProd = new CbmPsdMCbmHitProducer(); - run->AddTask(hitProd); - // ------------------------------------------------------------------------ - - - // ----- Local reconstruction in STS ---------------------------------- - CbmRecoSts* recoSts = new CbmRecoSts(); - //recoSts->SetTimeCutDigisAbs( 100 );// cluster finder: time cut in ns - //recoSts->SetTimeCutClustersAbs(100.); // hit finder: time cut in ns - - // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, - // noise RMS, zero-threshold crossing rate - auto parAsic = - new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3); - - // Module params: number of channels, number of channels per ASIC - auto parMod = new CbmStsParModule(2048, 128); - parMod->SetAllAsics(*parAsic); - recoSts->UseModulePar(parMod); - - // Sensor params - auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo); - sensorPar->SetPar(0, 6.2092); // Extension in x - sensorPar->SetPar(1, 6.2); // Extension in y - sensorPar->SetPar(2, 0.03); // Extension in z - sensorPar->SetPar(3, 5.9692); // Active size in y - sensorPar->SetPar(4, 1024.); // Number of strips front side - sensorPar->SetPar(5, 1024.); // Number of strips back side - sensorPar->SetPar(6, 0.0058); // Strip pitch front side - sensorPar->SetPar(7, 0.0058); // Strip pitch back side - sensorPar->SetPar(8, 7.5); // Stereo angle front side - sensorPar->SetPar(9, 0.0); // Stereo angle back side - recoSts->UseSensorPar(sensorPar); - - // Sensor conditions: full depletion voltage, bias voltage, temperature, - // coupling capacitance, inter-strip capacitance - auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); - recoSts->UseSensorCond(sensorCond); - - run->AddTask(recoSts); - std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Local reconstruction of RICH Hits ------------------------------ - CbmRichMCbmHitProducer* hitProd = new CbmRichMCbmHitProducer(); - hitProd->setToTLimits(23.7, 30.0); - hitProd->applyToTCut(); - run->AddTask(hitProd); - // ------------------------------------------------------------------------ - - - // ----- Local reconstruction in RICh -> Finding of Rings --------------- - CbmRichReconstruction* richReco = new CbmRichReconstruction(); - richReco->UseMCbmSetup(); - run->AddTask(richReco); - // ------------------------------------------------------------------------ - - // ----- Parameter database -------------------------------------------- - std::cout << std::endl << std::endl; - std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; - FairRuntimeDb* rtdb = run->GetRuntimeDb(); - FairParRootFileIo* parIo1 = new FairParRootFileIo(); - FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); - parIo1->open(parFile.Data(), "UPDATE"); - rtdb->setFirstInput(parIo1); - // ------------------------------------------------------------------------ - - - // ----- Run initialisation ------------------------------------------- - std::cout << std::endl; - std::cout << "-I- " << myName << ": Initialise run" << std::endl; - run->Init(); - rtdb->setOutput(parIo1); - rtdb->saveOutput(); - rtdb->print(); - // ------------------------------------------------------------------------ - - - // ----- Start run ---------------------------------------------------- - std::cout << std::endl << std::endl; - std::cout << "-I- " << myName << ": Starting run" << std::endl; - run->Run(0, nTimeslices); - // ------------------------------------------------------------------------ - - - // ----- Finish ------------------------------------------------------- - timer.Stop(); - FairMonitor::GetMonitor()->Print(); - Double_t rtime = timer.RealTime(); - Double_t ctime = timer.CpuTime(); - std::cout << std::endl << std::endl; - std::cout << "Macro finished successfully." << std::endl; - std::cout << "Output file is " << outFile << std::endl; - std::cout << "Parameter file is " << parFile << std::endl; - std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" - << std::endl; - std::cout << std::endl; - std::cout << " Test passed" << std::endl; - std::cout << " All ok " << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Resource monitoring ------------------------------------------ - // Extract the maximal used memory an add is as Dart measurement - // This line is filtered by CTest and the value send to CDash - FairSystemInfo sysInfo; - Float_t maxMemory = sysInfo.GetMaxMemory(); - std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; - std::cout << maxMemory; - std::cout << "</DartMeasurement>" << std::endl; - - Float_t cpuUsage = ctime / rtime; - std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; - std::cout << cpuUsage; - std::cout << "</DartMeasurement>" << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Function needed for CTest runtime dependency ----------------- - // RemoveGeoManager(); - // ------------------------------------------------------------------------ -} +// -------------------------------------------------------------------------- +// +// Macro for reconstruction of mcbm data (2019) +// Only STS local reconstruction (cluster + hit finder) for the time being +// +// -------------------------------------------------------------------------- + +void mcbm_reco(Int_t runId = 812, Int_t nTimeslices = 0) { + + // --- Logger settings ---------------------------------------------------- + TString logLevel = "INFO"; + TString logVerbosity = "LOW"; + // ------------------------------------------------------------------------ + + + // ----- Environment -------------------------------------------------- + TString myName = "mcbm_reco"; // this macro's name for screen output + TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory + TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; + // ------------------------------------------------------------------------ + + + // ----- In- and output file names ------------------------------------ + TString inFile = Form("./data/unp_mcbm_%i.root", runId); + TString parFile = Form("./data/unp_mcbm_params_%i.root", runId); + TString geoFile = paramDir + "mcbm2020_reco.geo.root"; // Created by a simulation run + TString outFile = Form("./data/reco_mcbm_%i.root", runId); + // ------------------------------------------------------------------------ + + + // ----- Timer -------------------------------------------------------- + TStopwatch timer; + timer.Start(); + // ------------------------------------------------------------------------ + + + // ---- Debug option ------------------------------------------------- + gDebug = 0; + // ------------------------------------------------------------------------ + + + // ----- FairRunAna --------------------------------------------------- + FairRunAna* run = new FairRunAna(); + FairFileSource* inputSource = new FairFileSource(inFile); + run->SetSource(inputSource); + + run->SetOutputFile(outFile); + run->SetGenerateRunInfo(kTRUE); + run->SetGeomFile(geoFile); + + TString monitorFile {outFile}; + monitorFile.ReplaceAll("rec", "rec.monitor"); + FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); + // ----------------------------------------------------------------------- + + + // ----- Logger settings ---------------------------------------------- + FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data()); + FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data()); + // ------------------------------------------------------------------------ + + + // ----- Reconstruction tasks ----------------------------------------- + + + // ----- Local reconstruction in STS ---------------------------------- + CbmRecoSts* recoSts = new CbmRecoSts(); + //recoSts->SetTimeCutDigisAbs( 100 );// cluster finder: time cut in ns + //recoSts->SetTimeCutClustersAbs(100.); // hit finder: time cut in ns + + // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, + // noise RMS, zero-threshold crossing rate + auto parAsic = + new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3); + + // Module params: number of channels, number of channels per ASIC + auto parMod = new CbmStsParModule(2048, 128); + parMod->SetAllAsics(*parAsic); + recoSts->UseModulePar(parMod); + + // Sensor params + auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo); + sensorPar->SetPar(0, 6.2092); // Extension in x + sensorPar->SetPar(1, 6.2); // Extension in y + sensorPar->SetPar(2, 0.03); // Extension in z + sensorPar->SetPar(3, 5.9692); // Active size in y + sensorPar->SetPar(4, 1024.); // Number of strips front side + sensorPar->SetPar(5, 1024.); // Number of strips back side + sensorPar->SetPar(6, 0.0058); // Strip pitch front side + sensorPar->SetPar(7, 0.0058); // Strip pitch back side + sensorPar->SetPar(8, 7.5); // Stereo angle front side + sensorPar->SetPar(9, 0.0); // Stereo angle back side + recoSts->UseSensorPar(sensorPar); + + // Sensor conditions: full depletion voltage, bias voltage, temperature, + // coupling capacitance, inter-strip capacitance + auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); + recoSts->UseSensorCond(sensorCond); + + run->AddTask(recoSts); + std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in MUCH --------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in TRD ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in TOF ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction of RICH Hits ------------------------------ + CbmRichMCbmHitProducer* hitProdRich = new CbmRichMCbmHitProducer(); + hitProdRich->setToTLimits(23.7, 30.0); + hitProdRich->applyToTCut(); + run->AddTask(hitProdRich); + // ------------------------------------------------------------------------ + + // ----- Local reconstruction in RICh -> Finding of Rings --------------- + CbmRichReconstruction* richReco = new CbmRichReconstruction(); + richReco->UseMCbmSetup(); + run->AddTask(richReco); + // ------------------------------------------------------------------------ + + + // ----- Psd hit producer ---------------------------------------------- + CbmPsdMCbmHitProducer* hitProdPsd = new CbmPsdMCbmHitProducer(); + run->AddTask(hitProdPsd); + // ------------------------------------------------------------------------ + + // ----- Parameter database -------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; + FairRuntimeDb* rtdb = run->GetRuntimeDb(); + FairParRootFileIo* parIo1 = new FairParRootFileIo(); + FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); + parIo1->open(parFile.Data(), "UPDATE"); + rtdb->setFirstInput(parIo1); + // ------------------------------------------------------------------------ + + + // ----- Run initialisation ------------------------------------------- + std::cout << std::endl; + std::cout << "-I- " << myName << ": Initialise run" << std::endl; + run->Init(); + rtdb->setOutput(parIo1); + rtdb->saveOutput(); + rtdb->print(); + // ------------------------------------------------------------------------ + + + // ----- Start run ---------------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Starting run" << std::endl; + run->Run(0, nTimeslices); + // ------------------------------------------------------------------------ + + + // ----- Finish ------------------------------------------------------- + timer.Stop(); + FairMonitor::GetMonitor()->Print(); + Double_t rtime = timer.RealTime(); + Double_t ctime = timer.CpuTime(); + std::cout << std::endl << std::endl; + std::cout << "Macro finished successfully." << std::endl; + std::cout << "Output file is " << outFile << std::endl; + std::cout << "Parameter file is " << parFile << std::endl; + std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" + << std::endl; + std::cout << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Resource monitoring ------------------------------------------ + // Extract the maximal used memory an add is as Dart measurement + // This line is filtered by CTest and the value send to CDash + FairSystemInfo sysInfo; + Float_t maxMemory = sysInfo.GetMaxMemory(); + std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; + std::cout << maxMemory; + std::cout << "</DartMeasurement>" << std::endl; + + Float_t cpuUsage = ctime / rtime; + std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; + std::cout << cpuUsage; + std::cout << "</DartMeasurement>" << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Function needed for CTest runtime dependency ----------------- + // RemoveGeoManager(); + // ------------------------------------------------------------------------ + + /// --- Screen output for automatic tests + std::cout << " Test passed" << std::endl; + std::cout << " All ok " << std::endl; +} diff --git a/macro/beamtime/mcbm2020/mcbm_reco_kronos.C b/macro/beamtime/mcbm2020/mcbm_reco_kronos.C index d099499513..ab222e0430 100644 --- a/macro/beamtime/mcbm2020/mcbm_reco_kronos.C +++ b/macro/beamtime/mcbm2020/mcbm_reco_kronos.C @@ -1,197 +1,206 @@ -// -------------------------------------------------------------------------- -// -// Macro for reconstruction of mcbm data (2019) -// Only STS local reconstruction (cluster + hit finder) for the time being -// -// -------------------------------------------------------------------------- - -void mcbm_reco(Int_t runId = 812, Int_t nTimeslices = 0) { - - // --- Logger settings ---------------------------------------------------- - TString logLevel = "INFO"; - TString logVerbosity = "LOW"; - // ------------------------------------------------------------------------ - - - // ----- Environment -------------------------------------------------- - TString myName = "mcbm_reco"; // this macro's name for screen output - TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory - // TString srcDir1 = gSystem->Getenv("SLURM_INDEX"); // ------------------------------------------------------------------------ - - - // ----- In- and output file names ------------------------------------ - TString inFile = Form("/lustre/cbm/users/ploizeau/mcbm2020/" - "unp_evt_data_7f229b3f_20201103/unp_mcbm_%i.root", - runId); - TString parFile = - Form("/lustre/cbm/users/ploizeau/mcbm2020/unp_evt_data_7f229b3f_20201103/" - "unp_mcbm_params_%i.root", - runId); - TString geoFile = - "/lustre/cbm/users/alberica/cbmroot/macro/beamtime/mcbm2020/data/" - "test.geo.root"; // to be created by a simulation run - TString outFile = Form("/lustre/cbm/users/ploizeau/mcbm2020/" - "unp_evt_data_7f229b3f_20201103/reco_mcbm_%i.root", - runId); - // ------------------------------------------------------------------------ - - - // ----- Timer -------------------------------------------------------- - TStopwatch timer; - timer.Start(); - // ------------------------------------------------------------------------ - - - // ---- Debug option ------------------------------------------------- - gDebug = 0; - // ------------------------------------------------------------------------ - - - // ----- FairRunAna --------------------------------------------------- - FairRunAna* run = new FairRunAna(); - FairFileSource* inputSource = new FairFileSource(inFile); - run->SetSource(inputSource); - - run->SetOutputFile(outFile); - run->SetGenerateRunInfo(kTRUE); - run->SetGeomFile(geoFile); - - TString monitorFile {outFile}; - monitorFile.ReplaceAll("rec", "rec.monitor"); - FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); - // ----------------------------------------------------------------------- - - - // ----- Logger settings ---------------------------------------------- - FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data()); - FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data()); - // ------------------------------------------------------------------------ - - - // ----- Reconstruction tasks ----------------------------------------- - - - // ----- Psd hit producer ---------------------------------------------- - CbmPsdMCbmHitProducer* hitProd = new CbmPsdMCbmHitProducer(); - run->AddTask(hitProd); - // ------------------------------------------------------------------------ - - - // ----- Local reconstruction in STS ---------------------------------- - CbmRecoSts* recoSts = new CbmRecoSts(); - //recoSts->SetTimeCutDigisAbs( 100 );// cluster finder: time cut in ns - //recoSts->SetTimeCutClustersAbs(100.); // hit finder: time cut in ns - - // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, - // noise RMS, zero-threshold crossing rate - auto parAsic = - new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3); - - // Module params: number of channels, number of channels per ASIC - auto parMod = new CbmStsParModule(2048, 128); - parMod->SetAllAsics(*parAsic); - recoSts->UseModulePar(parMod); - - // Sensor params - auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo); - sensorPar->SetPar(0, 6.2092); // Extension in x - sensorPar->SetPar(1, 6.2); // Extension in y - sensorPar->SetPar(2, 0.03); // Extension in z - sensorPar->SetPar(3, 5.9692); // Active size in y - sensorPar->SetPar(4, 1024.); // Number of strips front side - sensorPar->SetPar(5, 1024.); // Number of strips back side - sensorPar->SetPar(6, 0.0058); // Strip pitch front side - sensorPar->SetPar(7, 0.0058); // Strip pitch back side - sensorPar->SetPar(8, 7.5); // Stereo angle front side - sensorPar->SetPar(9, 0.0); // Stereo angle back side - recoSts->UseSensorPar(sensorPar); - - // Sensor conditions: full depletion voltage, bias voltage, temperature, - // coupling capacitance, inter-strip capacitance - auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); - recoSts->UseSensorCond(sensorCond); - - run->AddTask(recoSts); - std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Local reconstruction of RICH Hits ------------------------------ - CbmRichMCbmHitProducer* hitProd = new CbmRichMCbmHitProducer(); - hitProd->setToTLimits(23.7, 30.0); - hitProd->applyToTCut(); - run->AddTask(hitProd); - // ------------------------------------------------------------------------ - - - // ----- Local reconstruction in RICh -> Finding of Rings --------------- - CbmRichReconstruction* richReco = new CbmRichReconstruction(); - richReco->UseMCbmSetup(); - run->AddTask(richReco); - // ------------------------------------------------------------------------ - - // ----- Parameter database -------------------------------------------- - std::cout << std::endl << std::endl; - std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; - FairRuntimeDb* rtdb = run->GetRuntimeDb(); - FairParRootFileIo* parIo1 = new FairParRootFileIo(); - FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); - parIo1->open(parFile.Data(), "UPDATE"); - rtdb->setFirstInput(parIo1); - // ------------------------------------------------------------------------ - - - // ----- Run initialisation ------------------------------------------- - std::cout << std::endl; - std::cout << "-I- " << myName << ": Initialise run" << std::endl; - run->Init(); - rtdb->setOutput(parIo1); - rtdb->saveOutput(); - rtdb->print(); - // ------------------------------------------------------------------------ - - - // ----- Start run ---------------------------------------------------- - std::cout << std::endl << std::endl; - std::cout << "-I- " << myName << ": Starting run" << std::endl; - run->Run(0, nTimeslices); - // ------------------------------------------------------------------------ - - - // ----- Finish ------------------------------------------------------- - timer.Stop(); - FairMonitor::GetMonitor()->Print(); - Double_t rtime = timer.RealTime(); - Double_t ctime = timer.CpuTime(); - std::cout << std::endl << std::endl; - std::cout << "Macro finished successfully." << std::endl; - std::cout << "Output file is " << outFile << std::endl; - std::cout << "Parameter file is " << parFile << std::endl; - std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" - << std::endl; - std::cout << std::endl; - std::cout << " Test passed" << std::endl; - std::cout << " All ok " << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Resource monitoring ------------------------------------------ - // Extract the maximal used memory an add is as Dart measurement - // This line is filtered by CTest and the value send to CDash - FairSystemInfo sysInfo; - Float_t maxMemory = sysInfo.GetMaxMemory(); - std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; - std::cout << maxMemory; - std::cout << "</DartMeasurement>" << std::endl; - - Float_t cpuUsage = ctime / rtime; - std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; - std::cout << cpuUsage; - std::cout << "</DartMeasurement>" << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Function needed for CTest runtime dependency ----------------- - // RemoveGeoManager(); - // ------------------------------------------------------------------------ -} +// -------------------------------------------------------------------------- +// +// Macro for reconstruction of mcbm data (2019) +// Only STS local reconstruction (cluster + hit finder) for the time being +// +// -------------------------------------------------------------------------- + +void mcbm_reco(Int_t runId = 812, Int_t nTimeslices = 0) { + + // --- Logger settings ---------------------------------------------------- + TString logLevel = "INFO"; + TString logVerbosity = "LOW"; + // ------------------------------------------------------------------------ + + + // ----- Environment -------------------------------------------------- + TString myName = "mcbm_reco"; // this macro's name for screen output + TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory + // TString srcDir1 = gSystem->Getenv("SLURM_INDEX"); // ------------------------------------------------------------------------ + + + // ----- In- and output file names ------------------------------------ + TString inFile = Form("/lustre/cbm/users/ploizeau/mcbm2020/" + "unp_evt_data_7f229b3f_20201103/unp_mcbm_%i.root", + runId); + TString parFile = + Form("/lustre/cbm/users/ploizeau/mcbm2020/unp_evt_data_7f229b3f_20201103/" + "unp_mcbm_params_%i.root", + runId); + TString geoFile = "./mcbm2020_reco.geo.root"; // Created by a simulation run + TString outFile = Form("./data/reco_mcbm_%i.root", runId); + // ------------------------------------------------------------------------ + + + // ----- Timer -------------------------------------------------------- + TStopwatch timer; + timer.Start(); + // ------------------------------------------------------------------------ + + + // ---- Debug option ------------------------------------------------- + gDebug = 0; + // ------------------------------------------------------------------------ + + + // ----- FairRunAna --------------------------------------------------- + FairRunAna* run = new FairRunAna(); + FairFileSource* inputSource = new FairFileSource(inFile); + run->SetSource(inputSource); + + run->SetOutputFile(outFile); + run->SetGenerateRunInfo(kTRUE); + run->SetGeomFile(geoFile); + + TString monitorFile {outFile}; + monitorFile.ReplaceAll("rec", "rec.monitor"); + FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); + // ----------------------------------------------------------------------- + + + // ----- Logger settings ---------------------------------------------- + FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data()); + FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data()); + // ------------------------------------------------------------------------ + + + // ----- Reconstruction tasks ----------------------------------------- + + + // ----- Local reconstruction in STS ---------------------------------- + CbmRecoSts* recoSts = new CbmRecoSts(); + //recoSts->SetTimeCutDigisAbs( 100 );// cluster finder: time cut in ns + //recoSts->SetTimeCutClustersAbs(100.); // hit finder: time cut in ns + + // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, + // noise RMS, zero-threshold crossing rate + auto parAsic = + new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3); + + // Module params: number of channels, number of channels per ASIC + auto parMod = new CbmStsParModule(2048, 128); + parMod->SetAllAsics(*parAsic); + recoSts->UseModulePar(parMod); + + // Sensor params + auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo); + sensorPar->SetPar(0, 6.2092); // Extension in x + sensorPar->SetPar(1, 6.2); // Extension in y + sensorPar->SetPar(2, 0.03); // Extension in z + sensorPar->SetPar(3, 5.9692); // Active size in y + sensorPar->SetPar(4, 1024.); // Number of strips front side + sensorPar->SetPar(5, 1024.); // Number of strips back side + sensorPar->SetPar(6, 0.0058); // Strip pitch front side + sensorPar->SetPar(7, 0.0058); // Strip pitch back side + sensorPar->SetPar(8, 7.5); // Stereo angle front side + sensorPar->SetPar(9, 0.0); // Stereo angle back side + recoSts->UseSensorPar(sensorPar); + + // Sensor conditions: full depletion voltage, bias voltage, temperature, + // coupling capacitance, inter-strip capacitance + auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); + recoSts->UseSensorCond(sensorCond); + + run->AddTask(recoSts); + std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in MUCH --------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in TRD ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in TOF ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction of RICH Hits ------------------------------ + CbmRichMCbmHitProducer* hitProdRich = new CbmRichMCbmHitProducer(); + hitProdRich->setToTLimits(23.7, 30.0); + hitProdRich->applyToTCut(); + run->AddTask(hitProdRich); + // ------------------------------------------------------------------------ + + // ----- Local reconstruction in RICh -> Finding of Rings --------------- + CbmRichReconstruction* richReco = new CbmRichReconstruction(); + richReco->UseMCbmSetup(); + run->AddTask(richReco); + // ------------------------------------------------------------------------ + + + // ----- Psd hit producer ---------------------------------------------- + CbmPsdMCbmHitProducer* hitProdPsd = new CbmPsdMCbmHitProducer(); + run->AddTask(hitProdPsd); + // ------------------------------------------------------------------------ + + // ----- Parameter database -------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; + FairRuntimeDb* rtdb = run->GetRuntimeDb(); + FairParRootFileIo* parIo1 = new FairParRootFileIo(); + FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); + parIo1->open(parFile.Data(), "UPDATE"); + rtdb->setFirstInput(parIo1); + // ------------------------------------------------------------------------ + + + // ----- Run initialisation ------------------------------------------- + std::cout << std::endl; + std::cout << "-I- " << myName << ": Initialise run" << std::endl; + run->Init(); + rtdb->setOutput(parIo1); + rtdb->saveOutput(); + rtdb->print(); + // ------------------------------------------------------------------------ + + + // ----- Start run ---------------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Starting run" << std::endl; + run->Run(0, nTimeslices); + // ------------------------------------------------------------------------ + + + // ----- Finish ------------------------------------------------------- + timer.Stop(); + FairMonitor::GetMonitor()->Print(); + Double_t rtime = timer.RealTime(); + Double_t ctime = timer.CpuTime(); + std::cout << std::endl << std::endl; + std::cout << "Macro finished successfully." << std::endl; + std::cout << "Output file is " << outFile << std::endl; + std::cout << "Parameter file is " << parFile << std::endl; + std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" + << std::endl; + std::cout << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Resource monitoring ------------------------------------------ + // Extract the maximal used memory an add is as Dart measurement + // This line is filtered by CTest and the value send to CDash + FairSystemInfo sysInfo; + Float_t maxMemory = sysInfo.GetMaxMemory(); + std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; + std::cout << maxMemory; + std::cout << "</DartMeasurement>" << std::endl; + + Float_t cpuUsage = ctime / rtime; + std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; + std::cout << cpuUsage; + std::cout << "</DartMeasurement>" << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Function needed for CTest runtime dependency ----------------- + // RemoveGeoManager(); + // ------------------------------------------------------------------------ + + /// --- Screen output for automatic tests + std::cout << " Test passed" << std::endl; + std::cout << " All ok " << std::endl; +} -- GitLab