From de2f67b3a875e1f8e32ef1454c290b77999da6d3 Mon Sep 17 00:00:00 2001 From: fanliwen Date: Wed, 11 Apr 2018 19:53:57 +0800 Subject: [PATCH 1/2] cache alien element and attribute class to make it faster in OdfXMLFactory --- .gitignore | 9 +++- .../odftoolkit/odfdom/pkg/OdfXMLFactory.java | 7 +++ .../odfdom/pkg/AlienPerformanceTest.java | 42 ++++++++++++++++++ .../test/resources/testAlienPerformance.odt | Bin 0 -> 43545 bytes 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 odfdom/src/test/java/org/odftoolkit/odfdom/pkg/AlienPerformanceTest.java create mode 100644 odfdom/src/test/resources/testAlienPerformance.odt diff --git a/.gitignore b/.gitignore index a6d056f2..c1955ab8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,11 @@ bin/ target/ *~ .*sw? -\#* \ No newline at end of file +\#* +.idea/ +*.iml + +# vscode +.project +.settings/ +.classpath \ No newline at end of file diff --git a/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java b/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java index 50f3b984..76a43929 100644 --- a/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java +++ b/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java @@ -52,6 +52,7 @@ public class OdfXMLFactory { private static Map mElementTypes = new HashMap(); private static Map mAttributeTypes = new HashMap(); private static Map mElementRenames = new HashMap(); + private static Set mAlienTypes = new HashSet(); //a set for the element which need to load class from incubator package. private static Set mIncubatorElements = new HashSet(); private static final String LOCAL_NAME_DELIMITER = "-"; @@ -116,6 +117,10 @@ private static Class getOdfElementClass(OdfName odfName) { } private static Class getOdfNodeClass(OdfName odfName, String nodeType, Map classCache, boolean isAttribute) { + if (mAlienTypes.contains(odfName)) { + return null; + } + Class c = null; String className = ""; c = classCache.get(odfName); @@ -147,8 +152,10 @@ private static Class getOdfNodeClass(OdfName odfName, String nodeType, MapDp6bbHHAQXpE2vVfQ-JPPrt!RK0C>kj4#i3|R3&piiio3f8 z%gOV+d!P4z_J{r9d{`@4vu4f8$|Q6D=DM%ZQpbEkj)sPdhDK}@|Jt-qh!BW|hW5{f zDnfH{aIx|Bcek-{cXxKMvha3rbLIDOwdQlP@N)3tb91+GwRW?5?_%TX&F5|7=dJbs zX)LG3VCv2g4eg(e8r9ev`}Z!Et`-i?Ui{ww`z@clt6i*?rpi-%T6|QMr)sK-I;hts zG&FQHTnyB^0J;1GG&IBSYKn4i{BjOEar}(8gSPH+mrAZ_%&~<($pKZ-SYL)~6mh)z zsHXmrO{xx7mHX@LZ@sgmk8{7~T)S_rTm6{rdaB~=)zTj)^?F(t3iY};wzp9q6=R>W zqJ{5tzW#O*F!(S^gZAX5yTFQxn(_8MTxHt)WK`U46ahc)T+UopUrS|0Z<_x4Y87yW zUH0B2<1fH5jjKs^noG|yq)e}3`cbR$P5DECe!0$_LbXouRm{8MSBJz+uhRbS6`SfF zlUYNVQdyZla};nu642EAH4(C(?`t^T1rTuw5|Tt>1!g+`UDRaNuC} zm{EDK-T9OgKR!R6-PCv8be!QANj!!#`h2d()FOu| zP3m0^+G&%swWutWo_TN_Ei_$f880vx>|wP6HV#v+dw*ZN1VIe;&>>aMVfW^nsHU!| z`cpy_1&Xtk-prAl__uOz1eG5^ii;^f=skHmEML#}-ny7)tKBhn%%p z^KgH99pFd)j661`D2%4uh0ODoylnZ2A%4n7kiI7M4f+>FZ^mZ{>4oujemqZkFwd||Z zsd+kB+j7OEbY^E8jlu(@$cI)~=VrQ01{Fv1+LARXof)0PGE|B%qS|f0KN>%!-pRB| z{&R>ww;+etCwRWJ?kn{ZTN?!Fqv0GU+e59$m^C~ zn#D5HIMA;2BfjtZ%i-6NG8(_-yF!^HIhTJ3+md0k_itbH`MobbzM*qFdH&u0lHstr zZu}zZs4Mey+$N|d#g3;w*m=fUlSa~I`FAr=Ld8jx($PpF&WOVqa+~_oxqz+Udh*i` zyZGDKl*g{4$2a;_C+#=Jrt(TMb)uv!Jgo1gy*^ybwA%^Ni%W53(_yUlK4b(?UPL)F z0)HC1b6YY05O@JD*pQ}a1>4h$eR45!I~Hw9!VnaT$5Ortb^Mr0IB&};gf%@ zBL-AnpZKd$O~HP9Fz2Np)BD)0&k4xQOB4|k$EP{|!3xJ;YdGH)G44z%7JmgZjhBt; z9Il@nzA@BGyEXtzXFW6IRmh_6+SmvLOJDXS23~bs-MekERn$!Kgq1O`#FT=PiX((| zy;vqn;WDP1Vq^W0(IwH#T_?lEr}v{Xw|1HxStJv$Vup&Y?GIdUXmEK%Wds$_AE~s0`m8u4}N(m@kn-)0}PW^+jjRiVmQ}Bz`>D_JL;n*uC9K zubJwH2dsKW%y#B)KYKYL%0Ovze=)o%7)}G7E!a4~aT*|)EAK3xaa;Ul>zx*cY%=!npG6uzRtnjua zK7dl?1$sg>-8pYVm&fw`Bg-#@8N<+`E^Iox`>dLADrD080f?xjce=SrT^?8R3PCbh zo*!x^#{v}TiwdW7bq}V%kEAxQGYtjU1pFc%SIwl4%1<^&J7#4Uz$x@OxzZqhc_u=F zK43qKcFO|btOyCZidhI2!94SC{MwaRu+x70@Cto&remc_0R1lSF6TY9viHGK$&^l8 zNAgn&9pr_K<9-mU(|dgZF&S;`->T2-3z!`2&rT-5M<3X6!xx%MVLyuLq2_PdA0CeP zyL{Zx>s)JWnyR+cuS4)OKSzb{cxNgOF{&#Cg;7BbU(;f5vsv6bhXo-dx4=Z_J#R2C zbGEWW9%fHIbHBn>3FT$DV^|u&GEKe|N$>xHFo^kMg?zOX(!xX=6rBD8x1|=(biyCK z=MbUl5$NuD*OfcY@_`2?3Hm0DuskC^E)jXer&_N+`a0HtH_CGIx7OlUuP;Q1G*SKe ztw$+I1{!$%bXjA(vwzCSXCmvR4Hoa*NXU7}^miF$LHhgiLf=Pi5z3g_hsa*mY)<^{ zo14hp;ZyfRKF3T((?`72V$P!@q@NqR0TZ6%v5KoQerlPOUDtJLVwXe%!ZzLtwpfE) zA6sBSi{;S$$ z35;L(eR!GtN}@n7pkgCdlYDD?9lN1U*(p?({rTjHguUy_QD|&fATc_*G30?4SLO-1O5Wi+@iBAcFSZ=vVjEqFWuhr?sS6SRbw`*d6T;uw7Dcl zU5ZZPbPW~PxTDA*X>eci@urbFKJGUg@)o}HvYa9-)EzR zY<%dl*CkZ8(k5={uW%;LnFL0&oc)XrTZv${>GsM-B^Bz#VRh=ahr}EKMJ;r# zkP>-ZPUrdI-(l74ex?RY8MAW7b|K^$t=nTcyeB#$jFk?5*MuhRM)T;}MJ&z@EU2aV zJw;3f8Svh;|E!z9SmtQXH=J!BFDb%{`@8V<_e+-UyTkJVo>c+~-AsCX>ue#0D+7Z# z7!1prOecHfD(5(wNFZgvZN5w4Rm@mUXR_L95?4Qj^&{1fcVjaH9)-~_`}%qlnpTFk zH5IbMRXvpWOTKT9T@Pz2ODBRD8I?iXjba)a??j$Z6WGuYA8ix3$!9+w5G(HNhG2xcGyUMC=fao=mPE(k{;oV)%rZal<-WTV!$MEbm#M?LNh4)je6eWyr=vTS zJPVL#e~IXU!=rIq(ODDUx*nIpyfr=bq|WE)kq$-V;0C7+~J)1%qT9k=>B&P zv$Ues~+9ZwK68||p}?E7fU_oJkD`pr*%V*R-5=;HmlEFbWg(a*R|nDoY* zkIhrD^9VH{X&adMdVEn?@eYn532psG7dj-El(xlp*?&+2gbs))^`{23gU8t!1MdfN z1Bo>ruOJ`#ow$e5VrlNtCB%k4tbY4e@cOo{pRuy4A}cqqDbUe+{#2wU(D2h|8iKSo&=vCpfREbwQs<&Yk_sNL+p>S}fMX7-M65C;89cqM}`A zYqk7|+dfUAU01j9$_8mwz|6ls+o;nn*hYkE5}rIhWtHY^q9C>ya!@|Vn9 z1_STr&l`Jrjy;NO9kP?TJii0&pCvz*4!&xcnSm9uKfk{dWfVkDZRkC>06G=+d}qkN zez;|ZCTV|dm%a8k#dvPEa$yTgLYzHZZxTq4xYG~yTxzhs*65h|`F@(^$y?oajb6|3 zlAd!@QpI>o&5wO<4~J%j)N-lf$*g!()hTKYYnd5sS3w+d0r%BD4Oax$K_p?#EM{Nk zycvh``1M4dNlesLDg+0<86KU2jdfUd1Ood0IMPYTly)8uT^C3+mn}QJ7sm@fA*s$| zbthqrqH*5qBKk9eURTdzeXP0u zE=lwcSLgUU;5b(I6PE#KkfO=6PI!#(tTJXo5ZH$Zm@q5 z;MY~iDscx%r(xKr4$ghw#;BBbdi)4A8$QKQN|qv`|LArv@MjKABpk%Kw5YW^??iqb5kmO)<5%o5-|;8(S`Dwquvf@CU&Cz`M;J3^(DvvgDl?T>e;6E^)m+z3 zJGq+@oW0{MbDK6Cd8dfsUST?^i#<2PGh6snnsR80$KFsKJfCYz(5R8YKf6PT4Q49B zGLKa1Wu_;n8X{7SYJb&LSFzAGxo@)^p%28(R+umnt%7vdD7zW{g^w2+R&n>axq?55 z(0s$i4QOJdl&1X5Bu~Y^%n92NcU;OAej8?v$(s}ZBPFU`fA$SsM=;NV2316Z7nYoA z$s|#RQU6MVFsxKF2d}YtSMqr_7|&rnvwU!VuP1i)Jke$S5mW?a>VpXP z3hS5lvZ(38w&~UC@?IG*XEV~#7>`qVKL0hW@kTjzu)1O8N9<0GOvdGtpZa=VCkOug zBv>q`r!Bk2ljc|3otqmZXZYe9QLyqOZ}CMDQ=d-e>lekpjSlp!cxa{1XWFZ(E9z=2 zEg`SmM2m!KPBFIk(0jee+I_xdMpMIcNENj!#pkQp{qN7W6$I;=I`RJ6(o>BR`*j+L zOkxSpn-*vE!->aCC4#~lB#imIK=6L;N67g8`{z1TJ9)HU9|~RRnZ+HYYU*U;%tUe9 zZlHi0yLWc+F?KK9x+*(0&!NZ%WVKUS`^m2{9S&0$aUJX8x-C^^Vjg`D=M&4~q0@E1 zy%noEjrVXa{1H;j{ z{R|n>r@pT5yfEZ3tj}3cr**cwckS=jd_WF+(f8$tZRF5_XG6}>(DKb5f{Y(@IXM^o z(ni~D(_O!%@T*HDt^wHszDz&O(cRymG3hheJ39nJ^?TXJ3_Azd$f!kQu!{M<{%5r0 z`yU&T<@<*Qf!KwFc~kAQpu1fbV#x7bm#ji#*%s_mgHMA~PJ)j&oO|PcAXoVaSV?y(4zN zKc?Z@udpmoVU#&Mzk3^L=c1zaJ<6Slu9G_9Q;w}?VT%l^Untun7kpQkjJ0Ch66S1J z-!2vy5#xuyF`6|O$>w;CJCaOB#XhI6!V@Q1xp4Bzf4v$oa!T#Y>lemMz0TmfG_d>H z+vT@rVmfot_!A+I`{(oT2rkop^W`o<&Z}Frc(T=sC24>A?Yn)&o7zuI$`x<4;!w+% z9~61t0dK2j&l~r@mmZ-d4%&DoBC8~`?IQ67u1M18GesF;O8mpw)>JCUwd5+FC2w3_ zMs4@#<_C}?8rJ=E&ENO^RN~zqHkmMMev@%q9NS-qNs2oAm2W2-&SqnzmnZAyr5OZi zp2iR@*Zkg9lU}|S%aWB%5V^(wY*NdT{m#d5(F0%Q*{fcHUyl*u{bUZBb_;(eD531{ z+4(@J&tTf)tJANZcM9Ly0z<%N})as#jUyE_RWpJ){sNKb&w${+m<#@`2n(I16awR+>yF#?1l+v zITH6N-WHx+(WNYWw-L|Ik&i4YclIzV0R3{~yX96Jr}gxoQC%F%-F3`f(|!Qcec^W< z?q2j)gC#bAX0Pj|;(nzd!r=+BDL{gt=1$Ej(4@rdIJ zKI8?-XH9FdW$d2)+Oz6;7T1jGqy$-ohEcIpjV~>je z$?fsY3`5GRn5N{ha|~hwX`X&dT-rREW5B1dM@&8dK13{IvcpAkTo7j|n7_%_%(PZ? z>s-7rjYa)3w56m&w`hFfV@~r=BWqY zYggB&;o{4h$414aG&hKt0RA6B_9hCV?Cqn&hLhyJ2X(nPg(*9Exgy4s!noJxoslg;*1HaZ4WHfZ#38DkOhU1mH7zsCm z-QW7y4)3|t;cxdC@_cRgiegM64s}1;;3OIiag`GJE|DrbB(5(R>PLAIBj2)Q9lnqH zQbK-ZaDg7C07zo`SrvKV+?XT#@~z+-Sw@dm`bDTO&<~x@Tr|f(*Mlh+8(YERWKy!- zWf}a4=pGxz%nfTlgdx8btA$(#BB#e^Bt_g^y+ONT4sD-7n1?|Y-d}JiDi{NAJ`LFC zJyim|AKTU?v&#!uwN`hU^6G{htnGYIv)fw;Rvnw}jptH{xy6weW$cHB+$aBb=G}v> zm%@WKy`y^lwp5NSMGC*wWqmcluJMpt22@?QBjKhWm8TZ3AKxMe4Dvz>hiuHo z>1bY;E^pe~^WcWE8SIY0AHKsMul__}Hqh+2Jzn;Ysgv7TYE`=$C@HYW_b>8ENQ@RZ^DqLW5lYgPJ&p=0q1QKb>+9w>7!TkUs$6jwU%WCP0&fnWbaRF zbNJeO4X(?<^!{6Q@WiMF<#fNpk&Kn!DZOER-crv-sGD?-8{087Li}dK06|EckHz09 zawM;YOe;r5EmNzgtb?9=^O4V6OgPmR2-g(L#vP*bGtyQwmU@d|F(`qI%r63RS@Yj@ z4p=p08}g7^rgrLHPzFjQ&&FV>wptGl6HSO~kI5Gi% zreZNt0i7WsOGf*~=q-(E>?D$U3~I(7KDWIV-_4ck{n7U> zx0GZw9ci#}KaH5Kx=VW83=;B>j#=slN<=CIy~u7cc(a%2o)Tv*EG@4^8_m0Ss0obU z?8ou<@TN>@0f^7@@1w_+q;kG1ESAT*@h@QHqovM)AF7iUviN6+=jCI8;&pRIdz?6A zls}hyD_72z3Ox@eafL41yJuCG{4tCiVD)qj;n9>+fl&#z;2cQ`H&&ex7D+y(pm_GN z>g?7;jE>6|r~SD#Z|ZQi{*DX#J4V?`VOj!d;~bc&ScVaCTg5 zGG1QMm?$+ZK2W(jGE(S9rq8<>E1HIeM;3`<4rgZ6i!WO>i+{u1tF6)P==na1=#@nz zGpU)~VP3^eMZdOy0LBkj)XA`$oH(NKGms7BTjx8jtJ^#A1d zTqB4h^WvgpDn{8RLPFhSASKGzQQF6OYZD6bK-#crVs@Bhc4D;DM#LE){_0{m&tIRs{N&zv{wRBoYpxXT zuSWi3Nxf4t%uelfzrT{Fkq};_d{_7NMRSr#H)50Dw%1>|_o(~wLn5#A{dhz`yPb7e zAba|>U~AGP#^*+6PG ziBWs$fc}($#~QL@pI#Hg>8aK-n-;ID3UUI^a=m~l248y6`};KYLb>eU-nX6NXQYEK zWfp7R2k26N7&XbsY8pu-B!rG`Hwb#^Eq)eOs+x+hBkoKH8T?^tr|KDNti*cEylV%aM>q0fyO|bW9nM^`@oo zZyepe7OabdAB08<*?a%I=1`sDQTsq1Ado#CPEQSZVPZC0Vb|vLsJ>M*5K=@YBhx8j zHvrrQ0!yl^R=*=$V>(e&B|+QDq%HXdi(%F^>a3CQaB67(=O8Nn;&b=IaO_@fA$Zpx zsqx`IYhDHP<)U?petfU9{0VzEoI*2K}SA=Ts_U>*BGT5w_v_H|P#4wRFXS(^76IBXoV)8T{0C@7Ty3H98EV0d}4 z?D7S3@tqHpDr{l^4eO}g^18gd;FezY{Y6GfvQqYNQzwf1FXgNNvy%S8Q-q?Uds&D% zM@{i=K>>+TG4y9-W;xS#Rk-?)pEMv*5jzGOC%P~IyXZ&Vn?MscFqBCs{KJV3k?F42 zfTBds4}o{&UkpXE6MzvZb&p-ET(#W2R_12gFOkJ510R3(C=!G(Z&P^gp3bS}>t$2* zcy{*h53+bybas`tWSi$i8dB51Ybwi0>N9u!%1Sh5Vzx=g^M5^@hAjeM7QCYu#j;3R ze*BYw@Kx5v+z`a=D!(^C_e57U8i9~yc94^_iKmF{Wp!}X`8>i0OYtztM z<*MQWN-96IhppT}a`v$p0CK(EUyeCh&|X<7(ncA+=K&A#555aiwv6hMc%(w!(+$q< zP4aSJtfbdDUzi1NLRz?6kFOSQp7IfNn%{#$9}RPQpT(7wTefqM(TPlc*_8=HlfF5T z)RzxvW_Um4$Mf8OgH94xO?#uBI`Y%d>zK7XNAZe?hn=N!%NO&Rg(fLws6*MU_Sxwq32sRV^9&N(fUDk(~N*Ia3F>P zh?~bmc}eHu6#V$EI@Z+kLxz zr(&jGH8Vr&Qz9}i1kn1$_asx2FHN#tVOgvWMAldb@95UEZmkAFq=9$DLZo=jhhdKq zfw!4d`ACW7AZDOEGHg$>_GOcTtoAP(epA0%lT(23sx!OF5@zokB z#~mEy3TA%^%HBPep(?xTzF*@OQHxoNW$|4qzJX3r#`~{KMopAsA;VISRLQN$gsJW* z?{U||08l3o;cK#iJ2go(;$ zbFDvhecjFa&&Q-`V%aZkrNR`Df(Ha5uH~JA63|k#53jEijBI2*4h;Am-oL=P0NnY? zBLyWWBl#|##C{JBPXgQ$>zZ;G%lX+xEtTIuLjw0c9mrnvHmou!36m4e-r|FpA zOty#h#H`8&7~DY_OFN&#;9-vn{C7}XM|277eE6^U*tAC$><1OIV=du*Y61;wyd7DQ z`lYY=I1@jHhu<7KB0U`Do2$Ac zL1-oZsK%)w=tam}NKpY&b@uw|3YU}{ql(FPH8KbM(=Nh6LakSn=z^?VQHYw6Zig=H zk%fE39673l{H9FMu_miy)u4@>!9vy*#XJ_~-w^M(;f|`s-G?K8vGs3R%kYP5ohY0F zs&>0%krhmXQDm$dq~jsvc3?@#sFONY3dqru#1?-id%I0gVbbH8**zP7X_8``1upq5 z6dA|Ct(|H2t>{nHGsp?v?FvH|?cdF%!r5fAyCGV_M-LVTgWK68^7FVy*v)>8QK?|2EzP&+}hLVIwf(gvGW?4c|Z@l-};)0cz z?)Ut`m-{dAnimMSO69J{mmCWr#_?rxm<59djSh(fO!)%Gl#OwvZi zKEb#r!&fEEy@HeK%{$r3ORO>~LVBa=ZPB9XzZiZuL=s9&m6sBH`vmo-v69S<(L9Zf zs?t3t6ao3eU&a9&mV%M_l5we* zgar>AB^%$x1(1Ige6zM;@+CjUl($W!%hM^|y)AT}&qS#k0*U=76%{JAOi)CaFKN44 zvfAYH3ke3beHykH&5@M)EAD!3Kq4U>f6ls zyAB(d2BxoV1*s9ldpe^uwUY}z@@;0JlYElGbwdda92?{H1J8RG!^Z9_4LdI<%PAW~^~6s5^2rk-4UO-Wdsa}s(}AYbI#@sD z%?4E*M2L%qCL7O(E2=bJu)+r7d6)+AtVrF;*}{6*AdHW|3GvAUce!ufV8HJy*+7{@ z&cZ`EL!J-M;rD0pW8{d9QvUM+Zs;Qm zf%8+Bc}M%iVcd5G$(`TblCUx4E*Jc~A2h;s^C`czk z+hhwSdW5!4qLv)@tF8=xKiW!rb^$Qk19V$tf-lqyg4%*3Af6A(H`W1Z!7`w^H@bRC ze}?H+VT+9$Up@{2YsWKsfh}(n>9r8nY2e3)4cMyPpcxq)B4o7O#SD`4V>lhyO>jCu zo#21csn_iW@m%b?v2J*H*n|ZgbHh6V*C9e}B%rzA#;w~;m^O&INY^dTI=e;Ds&%M= z2>yCq$NL>=UQpJYH!Ec?chLUHz&LaM+lZTk+FdY1EO2%emKe~tSljn596Ymo!NEM7qx#7-BzF0IGL=gJgI*SRYxsqS z{ofZ8{l{%l83(8?P+!(8E=$0D9|b z&?~woh0Auh7$fW~tW?tr+~)FQo`z0NE`JK6*-}-yRMv;WlH}MK| zeXsYDkb0A>N%ix-7v@bh1!e<40^GPZUpCR4{BkU@!1MQmK)`m(a?-~Upi24rOkoQ_ zTo)loGJ7(|o$-*+H53d&Z}v?e1A^U|N3NRBZmgeJN2fL${$^I0gPbXTqqvYT+5V>L z4>{Y#D{cA7nTuIyb2?BCv&^1-S`;z{sdtEg)FWQ3!(v&Zog=}@io*3IAR3b4vO!=a zr2hZ1Gpl|Bdb&M(@wuvMXOOkJi%48nl^>tk_zGDZJOY z8R5TRuI*=K5VeF$mGW{6<`D(v+hfqg9s?7fn_ChI&VANia5kDWVkK8+*Cj74{(^De zp`Ts(3mAi)y75P~;5$JGCwaZZfWu`+`b+^nylP^93N@0oFaE~v>~$7pV}EY^BIWu9 zriM>qv(!4d-aI$VT9*p0Ig>gRdo!G1`a$cxYO46R(~Mn>kKch#PqF2+Zmiw%CpVv1 zx*jcX=yLy1GLqJe14zILRWrelQ=4NUM+9(wkX8vmFz=->SUTS7j!xWbbg+{?3UVe4 zHwpG{NAh=lEi*V7GdI0i#bn)d`ukdPu|0pu7kp^b*}wF~|IRZ==u?KKbWhO5(w4q~ z#>-WhEV7N_mRCxD2dKM7SL?_H6={)ha^!x72U&gO=ij|_Y0vuW!@ENfBH*O%v2AMO zqSD-0Qy}ZUKYyUJZ+($ zK58C-2;Jo0Y$zeob8&Kx38cpac#gg*gBqeQ(~82sri=3K3a zxX{P5V{zPt*dVjr*P-9S8W&S$od}~)w3rWvXG<*0{GH*vBR2iDA#fCVr@Bo@O+WY- zh3W8-!C;Jj>K!0jYgLRaQ>JQq`?Oz?=#yKV+Hr2P*F-v$0cy+g^O2!|<{eqpoKWC!CYf79bH(46He9(S_9E7}-p8i~JUb2;r45-p7e=kG zXH!mI1CC?>uR~{CvTuy@dhiwen9PoG9?YND$%B*0Iq&F9uK?-zzQt>@Hy8fLyhj?O z0VIUcEK6KFvR{b*hTLzcINd-AsQ7uV0hxp=t>1foHi!*%!SAPJt4;vR59lb^ey~G{ zElIoygx)Ooe;?Q9%s^i^WD{Noy}(fw`Li6NhxE9O0cPCC#5x&|n|-Z7a_q%F_P$;I zv|c-1djfFlxXRvq#2nRc^F#iA=wCRUg_|77qG4TT^wl2824D9Ps6Y0yWUOdtH7$WW{uIQ`NVNWM0ntz*p;|01l;+g)Oq)IraI~(w znxm;QfGGQps$Th9Kq_yPh1zXxa6rXE{%ff?OEW%%F`jK^Or=1+qLiD@W#SwQ0#Y`~ zK$HN6dqO@2_%gHVQY~TpXKFZoG_Nqbvb;?CnqAiUTMl#nmoynSB8h z^I{4QUlAPLK9l5olv(0*IR-nmzf|OqtI%8#4eY2x27uSmSH5#?wetQMhu)0s+*g~0 zek8|p0U1x3f;w$b2aMf+JgCwXv2O`%hi(xZjN???FUsrBwa+UyqCTl>

Qf91sYUL zxJ6(s`Bg)vDIh{2nPAft=-w`S>n5UX!;ojoZT1ucH%J1(@o(I!{5R_TpAoKt5cGC9 zs?d2WW6aa#jwID21C0IQ8GQ8{xU0V@n1oFYd`a2<)*u|5zQRh!k_^9pdA)sYSrudg zdW!~eRZdT$G8)?c=CwpF7F56+`hW|z{h3#fT zkw=sEJp#7gTqCXnzd!g2sqYXd{_?G~q{h;Ypz2a`zbpq zr_=g@R*BO3by&>-nGm4~`L*EAJ`9fU?}*^^r&f_c@IJy?I}}t*x~5KBJ1f65`z9RG zbYs0yLNttjVB6EA_it?fpEPkM|8Ic*Z&B@kaG+8=<{z5)@AvxhUuLlWx3*cQ2$Ypnfjx%R%|)eG2LjAvL`$NAX|4d2&!@J3jn=VW97C8l>K9 zKRnn4gm|sc(-{Y*tQqHDhY?7<+c!8L@JAcmfcbJlgir)ZS%CCIBvMHqq3FRd4qRjM z4LFaQAq>a-0FsH*x2nmjF=y1hNMx<-+#HvaIGmmlrGBl9zu9ZSe%(9_1WvUsaxVY+ z8?vLC9%Epry$XBkyYL<;ZSafMtyEcIUB_8p-qbJ46_omFU9)8v2<4{>~ zcB2g#)y2tQ&eQw!B$M>aPjh9m7b)|N=s&O>RnO6d_dNQzZ)Okl4 zpw#BR=r^S?^q}%QOi@7yZft}D^%YiUmbzYQb@$h0FH>jj5e5)tHc2nouJd|3q=6E;N z<6wGeZ+o>dgd=x_Bjv^51F1|3Tg;fl)A5k10=K{Q)fQ8qWwkE0HppdY<+#w4Z*r1; zL(WEJ#6N_e{rp85^6``9I_Vk)wdvs(&W^fmq0r8@YRtV1=vZW__pmhHFY`LIX#8|xie+jA`D%=CwtJT}`>;F6Sw*!ZO5c# z@gTmjh|frBXsPFy2(CrOte5dT zY)o8cLD*wmiq>Mfa_m@%7mdum%v;~aAfgMOF(+>astdrB?sy2#PSnM(XBPk~mv*UV z%Q5&)aB)dUt&wU6QyAb0Es*>$N$ zuSavFP$XQNa@-5VHZ5D1g6nCbGu_mtgWd=$rrf`*i5{$Z+-PV!##hM!LbjGL( ziR#rPmWz*j^um!UYf~3(mm=s@)1sk#Dd!4fW%so)gq4}SFrQN^ znZ6hm-qV%jjyh-kSjj0_h528++Ah4HeHu==boZY8(n{JEr}gf|unKw$mBaI|&lc+K zWTo*($m=vggNGa0q_xb7=EuRQ6C!d!yO1~k_3&h*K?fB*(Tl)#UI(4uoJEXgMpWir zOL{g!#U!u3ooZBGa-VD0%YONrZOA2$rUshH@Z9Vfm$G&9#mN8 z4SF@@ zPle*^W*ZF+smMK`94=l*bs4$PtbzG(A}2wxo+fB-_)}BG&v!l`u8?TAD$jej6sS;# z8G-||vkvmnBLcy(ExKJ;a`0e+LcSA}@q+G`O2Oy1@6t-&i360ve#F3_T-jiv7%|lJ zPwYDo<+1-HU?|=LjFFd^&KLj|&h`P%kLln!z4|-q=L5U}AgIc}F;MTHsdvcOjrAzE z7TpGHz-3@s`DUX^>Kz}PXXd6Q!db7;81#0!eqK@q0jbZoXm-lg<0MzyzAdpu=_ea| zSms&_D6MOaK>lJ0v`X{}LmRN(28-{*>l~&;@B_zF-qgkmCp=T@4yziS_*WE&%Ar~I9XHbEAPP*i`b&}b1$2sKQ z%M67%*cir&g1Tc@U&p%X7d_0$I*H(fex@6(KcK-jAuZhA>xXw`oqPmA52pift*?5t zsp5MVO^D#e=4A!opdewjo&twxR5M#@4ja%eQ*{y{I%90O@py9KVax0wL`a(mp5QR> zOQXer5-pBw^JIY8cl~3nJ{;>N03wt$;AOljkY zmT=UXc!th{$C1=&irDZEX>wzMoOQ^4AwkK5_LC0z!ReMmYp_zgkrzHJ5FxvnwaxQ^ z#1DO`eb%72W{hxY%I{T;!$2ogot6S@oh_Ihs!Ll|(?gaaLN3B#PtOKcP(mFq-5QMZ zP!#oW|6mnLu=ziBrj_dd!LI)xTI&B2dSw1B9NHoM7si@U;!fEAP<7D%J*%GnuQv2M zTj3v!^UwWP59)gNFU{5J{;LWV|3?-2UxLs77KQ5A;rA!K(AhV$S43AIxDnP#Fx$TV zPN&m>+{&8`$4s#8TR}exkUuhS(e3^!Y62yHav>iEHuMl1EwnSYcd&uVvw_mR+7+0M zj1TJ0c1G(?Lx>F*N@?OqXFuBtcOPER97>qb@YL}KW+Loe2vwq~3hiEd9yy2*8|%zCGEv3W{4AC8+V~k)*Gdt=Qq5eN zLqLOG;Ogc}(lhd-tQ3q#LTW&CeEm`Sh>OW_XVZ@C-=~CU?HR$aU*^B#A0wU{3x5p= z!B2o%vsKkLzZegC#E|By^Y*!`G11|I++HBOD^|4bRnTvt6)w7c0WQyyWQQEry70%! zuSZ|5>rclIjJMS=?f@(D;Vb9k;Sw$yx_-qzv`Mo4j_biK$BDD1>uhr&2RncMAvuE1 zDWxE0D3d?uGOImzlZAj#hfeK;uj}#)K}dOv$|*qKg>S6ahm=6$1IRoFjYT+!9mYnN zs5zn(|7hijC ze`aT;k_QJL3zPNkRXP~1?Ul;l`@+=eyC#eh!PjlNR=rd2gf9Tp#@eVrfff3xK8@!v&xlqCBd? z5Q6v_1tAxZL!y(12nb86vwSavf>7;f5kK_9UV-*9fn&TkQ1V_$-uPP@A{=7b8?A{D z5tq5IAEDv5sI2jmW|IPgdzFWhk_@x^_kw`SVLE=^8{+VCmlpGSwhEU(fu76&C4Y>M zIncF?-S|h$B;*e(C>NsaPd!S3q2k<;W#1}fyt*AksX!zp?56u`FZM{njl}^``4DTJ zEWa(A8Y@6YS-^cgk|PC*QT8df6bSeK>30oEsH@I~lFBhlMrd^Ue)F4UuS$TB$5CLn z3sl@;_zsnzG%*ggr;mKf-S2bS9Wq9ZQTd~fzf^u&;m!OS?xeESK@x3P&UL3deXWAo& zcrbPrYIHdiOa8wLUKVinQ40{Z3!gDj)NleWHEX)86cA|Cc*%+@M+ky5_t2H|F z&b7(kI`E`H<4~SpV(+8w_nZJF?X^C-+(Gy^+0iN&a~%~%n{SE|rGlrlNHj+_bP5Xi_9+1Cz1mw*B-^g72287tV>^dEA+a-oH zI)fxjPX-uJ8M|eaZ~NmI5b9;&X$A3IsOxVg0ZCf7{1yKW3^c0xE-9eT2#4se!u}uD z-UJ-#_x%@dSBOG{M930R_N8WQQHW@f!bBo_A)+x#mV}Tkq-n9VD4{HgskB%^CHpee z*s_mx7~|Z}+xK_<&pH2d&UOCR_5WPgr>6J%Joj_oulses?#K8toM!&2Rg7$tzaMAa z;2v$R<{oG6r}CacR4UqqYeV~ePcw*0zc~t6fqe=3rUm}DyB)YA_TLORh_lu=7E95 z+%Vw0c=z+*;qJb@5$0-VkLKrZOgKX8WO>g!p7_q?cc|)&WU6{nrL@U^xBE5my#j+K zf9C3f^^PuTX^Qgp=79vCp9kiv*RC5H?lcjM9-gXhySQ^{Xl=>gZrep$v&99Xx7t0u z?!cr=qHQO4k~{xvcWMprfWy)+1<%#LPb_EbEG*x&^9QuxewVKHn{OJ~MQLkxPnc>3 zx$MgHbAAZ05qwdz!z*DdoRtE^TfhNFc^v0FwrpVU<4@xr2C#DctRdy}58$4;9T z!diN(S*wvv|FeCub6k)d?GbHm2nC14xByw+)O>@cbJ8d2ftJ1mAIP>NLD0xbeRfgi zM|K$N45DpNX#8*gXi>n}-xVzbOs6wgY1<8QVMi_he`AVPe-lJzZ;vS91eIlp-u!%@ z=g$!7I?Csx8p6CYK@AE!q8$6^s@mF2#^>*8M0#`4;j7Q9q#Mi>>D7n`dgcV-d{WJ& zIAMi7BaSx95$V4Te!Q5deg=fmaqm$9h9f_(Q#K#Y+ThQm9D}BnYR)gHYj9Q83M!!9 zLpaT}qhAv~R;3Y@c=v7ud5d_eKVb@DJd^TWdd`pcJ3G*E1)!hDL?0|dukC-cNs;d< z|F(W!)3JeXgG&Qx~ChOU0e)a9_i+Lxcrn!l4**tiTz<2Q6;Wt5ZkLpC&lBYFd zOntLB$3_0)d{Pv9Ty3634EJiYddz!`h1OQ-j>LVAlBqSYD?LXVTFh?<%34kB{BgZy zVVF*|(@Z%QZa-GO>~<*cy2EyI?O!1U)|ot3xxmAUt!^$)zpU@Jq6FlekbJ*-eqNMX z$8ndr@ut%WgVRpa&vwo+QU;1eFG`*ojQSfq*+8){u<+8|x~e$(!jomX+(4P_$Drcz zuU_*y4B8h>&PNy1_7p`aO<641S=v%kl?qpo)|HRHCucJqjK`xgr==l%%3>ab*M5!(Xy*pRc`b=F_vT-g1MOKi_m zmY2f)2Bq0cN4{{3zm;R1m%8tKVfk|FS338>Y31^lu0571BlwG7@_vj~ud8xaUMe40 z)5J<45W}Q~jvcs6t1shQzTEDxpWEi$KCQPs_+!6BB17CA`W>ht%jaCOpIR}$X_lnd z`(>P&5WO+F-7ag;`I=(*@be(y(SFPTMjw;@51QWP0Pf z@j>T(K_lml%tV8;ynO4O_Gb{aH!QKmaA-M|HSZp-Y&@87s-tu8!;g!SBQgvtNn z^x|;8Q?C+Y_4doE$*mJ5hTyJ7o_@!8y5@~dgy(7{-IJ$qd-8T= zHS>#soCfsszjotYdVinDchXumP+m-KAO+ONp8sdV-NFpmK(EB+gGb7%#{^u3K~09< zhm7&{mK%QT@G0+q@|cttEWwa@NQB~OPRuV&dqT+OC4_>rs z-5aO#rXYOQ)EdPYoIVS!W|x{8qqh=<#`Q*ZNvW}}M!7A=asM7gh~~Y3pHgj=$o+2Q zqT%94JWzBB=Q{A5m`JEM`pB!{n?(E_bIp&!=nydEpR$NPT5n`wRcBO9q$e?C{yj$= z(k>}>%?tVoP&dokg~)afVqMk$YKqZ56&?>$b_2JA6K}GCM^;Hwpe4K>mzq3fv1WDX zcOk~pZ=yj4y$MgefS4K|`YK`J|7Cm=xsydvCKL5~6OLk<%N{bZX@O8DUD=RGk-{+? ziz;m~3EaI1yp-h@Z`I)xi1+X#(hEgo~& zL?t{Ec;x%GewWE<*@Yj?SM~l*o&{A?BTabh@sPiHZ$y#QT_Hlu+jZpJ#vu#6dz$h4 z%2_;=VKK$_X|3lf zy(3!e?T68pU=3ltA_4z4)@vq z;Y4#>y%$A9Hr@P=<+qncUIKhUg7C&H&E5m;f}N|##5L~Y@?`S|J$h-Q9-y6Wtm545 zk^fx(P62}!86r1$`Ca|Zc=|l8k=M*C>bMr0A&7g&rN5}<2_Ig5z;JBbz;K+p@>QDm z2xr?ya`Y`HM-T?Z?^$5A!~fxr|A=z`*_CzWe+G4#ukDc`GChb-U=GANp;e~0u0)T z0Ac}jK96i!zBEq@`6QhH4MkaEfmzO4cJfG3TQBQ&c$?`mUzbDd*L^SH!lP=IMm$Pn z&OFJ-Cwmk2!(LV;w_65rae<3f$?X^URIMj%Djou>mC%W|ky;;fC;Y`6twEU6aOv?*or9IDwidS8`sI9*b`FrlMYOq3O_h9nJn{7vd-+xc z@f#rVv6F3nYv1R5K;GH^@$(LcfzhYm z>Jf+CAa?n;dpx}-Sia@azc@*+kiUwJ=}>Jp3vq@#oT%>B$*SG-xwEs>BKy>>sG_U) z`S6!;f^kY@W=<`6xl;f~AU-t3I~=&-^x!K0w^?=1{`*PSG}#$6XIvSR?zap-7-*5# zL;m=FqLS@!P0O29?|1&X<>L?9YXf7;?Wbn@7995}W?a3#I9Oiy@>SaPPtw6GAGztX zez`x)vp=ibHJ#Y$;(59G_bD-+`AMooi11Q(s=we#hO#RzJ9> z`3W08_4y#ae{!`)i^-7i*rSr8IK}?FS7%xFc!o52wcJd6@dn=~dD(M|vPFXbU_)DJ z&=H@hc5I2~lb4q=;tp4U>Zh>gs&BBO(f4uH_MMyN;_C(XX(YZaa}2_z zCoQeJv;T+rs!P_~!8%Iu^8U{z54&xg=C*reRdH`e#noNOUtEV@TxPto^1eNFXl}#( zo9Endb{4uIG2z{R2FGcvHovDV-ROR|< zE;%i}ozv+3$sfVzMBgmWSI0I_hzcm!ogTw034XX7b|cE!BRL4q$O%3TP0Gc!gZK@L z4X@~;JI-zw95kGNyY#J)LiDW;-k!SP%N2L=HD&oZ>+dwTxdMZmx25DE#rNbgl2#)M zEB1dQJR|htyRVL_*DkT$f9XBRda)Q=`Zo_>))~Bt{hwkCp(~g<79)_%j4)C$(Wv^G zJY>a)ElrhvP;x(3Z@qHJjjHc$!%Cv6Mh!8}Luz|?3^zB=&@Il0E9rmVEIsrx?eO;f z+AY;af~uyw_8#glXyVt}u`9X=$jdrkIYC+ezd@%C?D!gk4(v!47QD-|b*J(l(1|s(R9LBQ}n=bp#;Zhp& z;lQ@$z99XmyO|y z4cbXHMw8;*g)<7mX!jKS;{YlDufm>4&S`<~$-sjSJXAd8YY83C{^P!#9oB?XIOA>s zi<%@?|J3l0zT#eT5~8Z+rN2bvW_C|mJPAl?rSXJ+FkN6@+QtB#!b?E-`o2qD{ZCZv zZnU1p8MmIpvAc_j?rxgbj@t~RZg0mf*w{8sz_~8l9M05y&m^AEdM2way4zy##`H{L z>@R`_b=3P*c3~q2<7w)pc=h@|9edp63%KWb{;yMgB>SZbjB$HZ1Pn*n$@i0{EDGId zPZZu37at1YAkx2|IQF}i=>6{>(fefB!2?Mr<{j;wv_jLK^H2YzB{80MKUf`GD>d8) zkgmFwu5|&YnQ`V3p~`6UrziJ+?EfwfT8CN0lBePp9r1ia-1D3=BRvgWy=^$bI_bYY z@tk6sSF@r($NMLoQFEH}JCSt5d?&ZzQpcP1slj$~qD_rQU2Q;|t)6uJZa&oGsz8U0 zC-;YH2}|$9Hcoi2v6VWqh002&?3q~4DZP(R-@=~sU`McVf5PatH!T$E)0~Rw8Ool2 zy?4#4jh3u*D~?r~?7qGA7jqq+l^{JRJbp9Kdlu5gj%W}buDf-oUy2Y^+uS_F zUYb^1wXn>bqi(&>dHOMp`1@tLHW%N_tpjVeYo+T4Qh$kz=H{Mxnd8!5Z{C$rTRWMP zKA}IcomT}nP1o>aT6cYmUH79dX7g#=hdUKKx8eA*Toz0SOMyH8Swu^2!Vw;x4xIK+ zc({D>Y2NC+GjB^IPpEsg?KOVP*}rBY63^K2yHZYYb<4X;<;J|Wlm{wYe%schyS;7- z)L^AhX6x1{3jaRa!`iy;{-ZL|d{O?jcdtv&FTUbVGgk=r-lDgGa@)U>hCgDwAx^+% z`-i=!J}(TND!Fsf<0jtH?VsY`kE`;pZX7P=TD{J#>o(s^=9&eCp`oPt{8GyT;$MCp zhqGsU$A79$(~BiJxGbBmU9QbJyJ|y`=a;0*AB+zc>2Ysa=HKDsz8dz~$aJszeCbs9 z+LWO=E3vXVp7q}Y1OD#c(X+1N&3=v5+$zs9$5*YkBCnbpy>h)iNav^AN3HqQL%RR^vzDcnm635bF)>aHAb{=pZUQ{U+uBv9_3zn_?+s#D0Nl5SnwH19a_xR z8wFR+*%wDDosZ=s$0e-Nhns7w32&gQYPNr+{j!``Jop8SVgwmK`4luRG1+}h~8 z{kr(C5FP8z>+265Xz3HE(yzpC<&+6*Gr3tCxK(D4iv_o6)#66auxQoma?>xq5q>@4 zyDgz(=2+E1`TVGSd?|lo=f)6umE8q&fv6OL6D}fG9UP*hhyJwtWZAfc{ZWW_OC{OQ ztIo(2ye6(O3C!GaFyx%fX&gO#=EZEKceyvOaKeY@dkHU7Zr8%M(54hS+2iG;*WC}P z-4VRG{7rTR^Bq6#V#b+~N89kpvLwpP@K|=R*TT%dph51pq}czP@9+J;{-WQR<<$o^ zPK@?upHhV{HC}b(keR_Ny>lTeUzogc<3{Y;m(iL3`i~PnxZ4MKUGd#}-v0c>3+Elr zIm*O2pF6j)=fb(TbL*6xOvEoo#|Um;b zS3TTE&(^)_DB0FMC(F4xTiZH0Xne-}?{{&XpR4Z*KCI4Vdt=ac|L|iS%h@Zlh5w%4 zyFj&HSoLMv<;=q={)3W-BJawcRac+nGb}uO?m_H<0pfvy3G;x-rt`^nX763rn|dp7 zN4k6Cz}A=}6}H!?<%>@!6BU7sG69t%heNIQ$JB5Rd>Z(3&jA-wuSsy}ZI`pIczlbu zqQ)YeVQe6Grl-^QOxs|RW!Bl>=k&|uUU!}CG1~v8@N?0^pJ*IUmH*VZT?jBXRc0&Z|+soBP`PBXsFC7-AfufzDBg&EAZH&kW#C2#O>x2A*)3B zlTS6+FWt^k+8O$H-@aB(4wc`y$hSvpYTa+PopX)TkuI#6>-e}epE`StcXW&J4q^7r z2i?{Oh=I=eUF!M{Ey~hSJ)1W+5xnfw^FI_kdM8;SxXToWVJ#k539GHfCAWY1G+du2$e&)%&-c^Y~4tUqjvT<7>k?Y79IM zE4|lQt=*_q?k8@t*l1$B*|+vj>!$TSPOCG8*1e-h&rgK4Jik96eXcEa)yZ&$D;8p9 zW*MVf%+^FcYuu2XDf`_0Y|2t-vZlsrlS7BZNb>t6EJH1uJeq_)-YG~VeU587V;}Rw z*sI?8)0eq2Jey^ItvC1jmqK68^ksLO6lU(`OD2tiDN7_j!fbA7H+1IGsPNg>bq3uZ(JH%FEGvXH0O5K z&$ENc)5Bw{*tUPT7*2;TcoPr#_tq%->At{_%RN(K9S=U$`Ix$8|2clNC7$E{!Ef2Y z%gmJEC3-^T{WBBRZV>*aZIi{SV1xt=dVGlwE2AH7)1 z+1IG|v_0-Pf%WR$gvjlok8Ez5{H(w2>Cu&!w%+ZO#XqQ7KO#$P4Y4N+$b@WuNO=-X zd|2?##rLW|S9wasAujpcGdI5-{P@oB<)GQejI~>}30^OF6TRiK*+0iQRD3DpIr2W% zST~DjqYBUY=Z|Fe`c=ss^K;*B`1(RvwRrqKo>H&4uNPFp$7H9zWN)*RjLo;n?VGHe z{kq-7Jv573{1(5>R|2I?)uuh@&(Z4rKjLbuPu9G6y*2mq-X{w+%ArYjedw!cy>GTW z-+PErWN`N4r&8Bj=NP=4YX-`SRrODQU{wdlTEBYl^KaT-;HI~8UEH1+jr-B#QEB#1 zx(?$!j z&wr095+zdKl*y32eg2_M+hb!LVB(qyFDE<>snsF9av=ZIH`09L%QJQGYnb97e^kbM{kTZ~ zBl$0nMNFMN{A7E6>+nl%C%WZl&3kOJza@VUT@C&uQ)F4{uW|8d-Zx^gZ0Yw?!V_FV z6=bst>W}$BrD4n6wOei~txeqKdNBBEiL{oo+{bYCUEIwHlaBk3D+S%XEk^65@?>>o zy?L? z)f*?0cFtA%b){n&ulLJTqUQbVme)t;w=XxGNISu$DOP-Tzm|y5limRiOP?U6=u)f0 z8B;j>iB%^#59S-DYcX?$UUn-@A1%}3o-8s5ODVlYo^Ba^;PJpS;o!MSjtFCoKyI$J zb!T>8@nzM0a%{D0pg&5svg5o{nAdxMVSdw-=%IXgl!pDt9VVMR?#Yn=MMHhh{5uB;Qj>r?>SQ*zS0Fkm8bO>~)*hzGri#nZIuPH=53!9QCi0w%p(RJ@1Ua z`ZziARik3OcfPxBa!FOAqHO;i(LfE-B_HOc&3DGVqW=bPfAdlQHsyASdFlKP#Xt?a z5=}dsn|~QGm*0={ULESc8nF3}fclrqgN_=$lfrg4yZSuxwa0q>N1Uz_x813%j)^}o zx+~zHRKSAi-45||#(nnhy?hzcj%QCRDLr3|&V`lz`tn9gUuP7tO#`l;kz4~Qt zu4=4*^M1RrA^p~~Sogl7`h|UlG0jA73DL51raTP8a|+x=`?>}M(dLS8}=znH~*;#NkOooZL&rtn)6W?otYQ2_%o zt)0FPYW}^XMuxiZ3dgJUkEly%DJ*dwY*wg=TI^qZ%KqW9eRv}ubP}r%xWBn)6%c&$ z23M2r4X4_$wV^zW+0oA`&q`-Cjvfg*ANohsSizS#`1I!}Z23`g4P3r3)ssuHPkV}g zu#^!cwjDVp_8yz>Y-!Mzyo8n0E>)>u}G*AB-f2CI}14y2#pNZ3fZ3U`z9l34!2thj zOWtMe9)5~>R#wAZwM&fJ(Yl3&UTeiz(IxtrTNlN-czKN8W=^>_F^0XAMDNY- zFMZL{uw3KMjU&x|8U459LndAwq3a(cEu@e7keQ=n^yxZ3#xp`!?yT_Ko{I8Lo8^VZ zguJ=M^b}|3aVlk*7Q}MAwm2(auh}q$TbK`N5Eb>G8k?n$SqKa`57*B0Mvd10k)9ms z&9@p}`d6AaKGFI&#dm4!-^{{n8$PXxG*eFfHFLhF>2t9-63eeF zi1;i*x^wwPcX=nDo@QC_;^5Em;NeOt)pK^Z<4FX0xjBNIr_dl8{HNoE=)$ADu~E*o z5@s#b9rtjb@Jum3(EvTIvgL`tH~j@fmwqo#3gDON%;A})e?uSBsY^YLbu*rnccg{t z&Yh%9qDyAOZKDfL*UEyKAKwSCLQ0uMzy7){1_obYOycJ%jYM}Y%+CJ#!zTI;8Z<@B zA;sXUIaK%N@#VqKxipH%XJ4_gx(nz{b%RzsMp%{OxOJ*1_kEhD4jvG35#!;lU<5qRNVV9 zb8`}FjOddeINA3vP{7E`6F#X3)a?^*4NF((Gw&{)gDpV~ebFC6P_*IM%A8qZ>@7j9Fx((716YZk@23w~&K zd8eW$;{kc5okS+r#Rj;TQ*JL?QC^MvEzUH>1{|d@7MB+qmZ#P66W%-V6L||w%LCNq z@!*AsU`82*nX)|Df}a)|i3lE%(_Cy7ZHt)8>mC&dTC8IXbqxeChszetr``o`6Qwjq zqy!eevn?;T?IJEs+~^aDs9Wk1&Y5di_&1?vmo@P(XHJ{dRb6Ryl{h<8SMVp-Yc73e zta3neWL0wc*ih4~1A{N6IA^iN9N$zaPK@U-iiaCpiiex>QbgKVvt5A!7XGoVFPCe}`VKQT&Ml6=Up5s;@2czjSJpUM zw&d+-O}0}=FTXHV!2EkK**PTzjJ>EjF>#dn)O@z7QnW30Q9gq3A$CcUOeJ%T zlN3dlpLKQO`{u`e7%x~89~CJJ%;_n`G12_Mp!r=HYG^$gH-?278A0*b$JU#s=#;V4u*M3Tuj1pl#WOy|%U$ zfj*^yi_;&vSf5C85&rVzrO9o?$$wVC^rnW2`97;W5<{9Y|7TEl4&TT<-s$p< zPwWYXFAQf*;aPvZSc_CqHLC>}A@o}JTt<~uqNwsC5gJF;cs{;b(Oz@X&`-NcAd$>wag-)kqnNdh zCP6qx>I;n`Zeo0M(XQQ8oKuezWw_G07n%DaN5u$7Sq1&YA4L@C+xq5oo=eep(^}xi z2GnlBsbehpur4k*(Ngcp1}`+??CcdM=#seAig?-R@p&@%g#2*gAx7;O8w1`+Rg$)$ znN*1~o_5u5l=b;^sNykmpRl?$oDwyx3^vj{D3Hfo&IfK*OX7rDv|k+3FoW?rHS>uu}8G6dxk&edGOS-RjgzBCcab) zJit_hshN}Hs*K=07Lk1t1WVkmqcpdwh9L`k!; z?$RY>wX0I%2+!lmCgo!1)j38psmY6Cd zWN3jkYX+n^7`N$ew@yfi6ZA+fPIY<8ulpt7qd&bGo{>r1^CMnSmJ())R*vq@JP0#+6VG!So!oVGyDm0wwU5`DO)h&*H0+l(##c8W_N` z|EOx$g}ruJ2w;I0p|M)VR>{}7yarKN8nvD_-(Ktin8R2G?)Q_ z7llI{xpTF8-0Ka*BlEte*H(xz+cmn^5Y~_iCbX{+drUsWHdZNaMWZGt&lQ75k=-9S zxuj0*MdQ2$FR5zi=a-|^%cB7+rW%9G)_6_VqcBK|bVY9RvND(9n*ioxn$p+MRr|~z zr=h0_CEcpBiX#`^AZT|Gd*nXlja<2|xREkosLDUFtw(@^Jl6Z6#R2^J(p41n;1GPl5#KWlP=mB8j5!yO;r zY=kk5XKd0%v9JFZ&}TE4S}}|lEugwwFy}87@Xp`@@VIbddig%LN833Vf%Nm7zo}^a z1^y+4@y{b62%hA3=vF*n-Wz-wPCUv;07rAHD)ukYY*a@sYSN2E$IyNhyZKVE047!A z3Pt+YRN?h`G;mW3k|2s4OOhkRdMMM~tH9VnN}RsCFXHo2eppj0t)sgL2BbG`q)i5@ z;62o?-e3AV7?0^~*v++$ieeBxA{XKn#i@QG))l-Mx)O$7puxo`{HYR%_nPtx+;wd= zgNGhfUMVtdX$WQ)98$OiQ&ziXFBO=(3tpd1kTRdh!>uhB`xKWskW)0=mj@%5pCa8~@h^+i5O~#W zXgUx0mQ^BIc@oS}<8|{Y^4T1-99e{DYR^*#WuoB4wQ8aWtI7BHLt)L-9*`vhAj0AZ zFPXX!^?)?GC`?kcN~-n1pHQk0qK_UuwQ2gaKJu@75m5;6i$87>fC=X$k)IkOK=&NK zbPc;v{T+um!JwkfZZO6b`DGpgdHssgYWAd863AHaeYtu@*60j+Vm5IB>}&w%-z}Oz zs_UcWC=EfTIK)u(0XrRH>_(sz%AC~Lr2xN-%5j4hc(d|a5mzN*H)z)@2ypQHF#Vma|O?(lhQ~ z=O(V7Z~HXf*|UbggWKE;p%u&sHY@&Mg@shx-?fA-tb#`S7i)qDeUv{a$H1MAG9oeW8E9`qh*wcwy(gY=8abDQHL@l7W`cRL67my+ zS5nBYwL0~VA4Q9LLldPu>Y9~YRw&@=ba5TJ!1Z(TnnmQ7IYL`eZUI+qi5o8vV86QIU0zk>%0(T^WU z7DX$%jqxRy5$2+cLg9t=l=2e1UlxDt1~P74bB2CVmN+V; zS}Yd4_DZ1GnK4DE~uxgzHlh@wZ?#^hx`d`~v@Sq0zrcqE;ik zAqL7KD)k2%bFSEn&ix*pI+0dFbD6GWm=*B0_qbu74X_i{LYi1RGUIII%a_ZGdi? z+t=stdT!dk8REl&wA0ZA5yLlQ=PM76&2(BR30zVfBwe}|1tZ{MWq#oT5-0G_;(FdD z@)`rkaOP^a@e+{hhCeFCvl~DvYM}jF1sSl&BBN8Ia}9x;WiP`&aU+k7Qt%BiJ_pD| zk*7Zhgc3MpInX3FGx@dQQ_D>P`vn2a4iJXA^Qw|XS`eRJWk*gL+OH<8C2^Xu91~)JsqSq&f=C%h zYBh4yGtnos_JU)QxI;0=ECr;1@S^yxFg%XNU4S6eqO(tvimK5hjK(U%i> zijtHY0^^p{(eCl%5S zWW7{bWX(Xu6H-RVnq~;3#PDU^9ARz9!KwGKT=r^C&)JC`klr5*(UL&c6EhJ6Z%;@t z2ejGUX9V~TgFed$8w)}F;+q&`Um<#w?UXXW4jgdK`X&URV^!8Kz2|tGqD*kx0IEj9 znf(shh^xs`?gAIz%;*}OdRBP|FjZp@aAGj%@FgQ@Y=X)OWK=TTfE)(%-Zpri2Mig? z{Nwbnp&Ck|+jL=!QHy2}|DcqNmpF)04n-L<1dQ|S6dODb&~gyUBjC=!DO^zLk+O_| zY?)T)M^0aamYWeSz+0VbI~{=~;1V7poGJ|>iDRQEL@5j{#?G}sv`uQvQK_^mm`?)F z17#GH9dE>7cw|G;APsYiTr5&48;U#Z^>)Cr<>)A0fD2+3iYj3_fSZP;VbsB|j_jL= zRc8oi!kO+ZOtWP~UI|6opOJ@BTD$6du=FasZyO&1nvT&Q!2fU4Q(^%WcfiBKgz>W zM_TTWR`3!FlKgj5L+H{gQ#zTwt{=OVbJ|V^Mo37&;`Jf(o_Ib~Emi)i z);ECMq$H9ztYkA)>->GvsBBvcuT~TXn{2~emU=4ta~eu;79{6AGT@g7qJ;8iP2vs={444j8X|YPfpbyZr&h?m-y#v& zN57)Z(kufzMV99MgBZ=bRxSp3SRxt03-D|*S*kGvEs~S$z~OFG*ng{b$2{D+M)Nop z!j09^z^880k3WvmfV^s+l4bK0V}id2v5-;2<4>a41q^XRv=}Ic6&-mcwSOSz7=kxA zFa}Y*i`qA!4rvj>$GXO4-`>J?DUcUyft(KUb>;?|R4-N+lsIRXC!lv=)V4PRD@qHpBsV0di8}$TlR>LnU;JXkj9VOYLE0mLh9<$~w{a1;*8#xQF0R=D{^g85g3k?Lg)+`dpc zhBH0;q|ZPcLaFiy)f?Or!9M`B#OVVG%*xh{sEAG=mwKIkf@ctYK-!wWx zqFYQ)AavR`FcHyHxY9JJ7skC+d6i)vvSg^WQsM|U$=+gsjZj)y75brCUWW4RFoe)< zTA6&`cR*FQD*w{7-CF=3L0+MV06|mqtQ*IoirVk0h8)k5Bw~681v2?X8NY7V8 zC=KuLS}zS@2U$T1V|iZ6%}#%S#R<_pzP4}t4S^1!+94RvM2Jhik&Ym_SkSG|A_kR= zjiV@~Zer9q<<_kfO0lRs1YgTfPQ~bGb(iB$$cI3pv2;Q0bM?at80v-G-3S0JSn{SE z0CB{W7j0EgV?p4*(3DGB$-KE&Kv039c{@OrwTa=mVL=Qd*tV~no&f<5VR|Yz8;YPL z2~M2bWPsI#XL}(RY+}4BJLilFFq*S8nS}_*_&W|Rv<49TqtPEjHGl&v<|BnKoS2Y* zO3xms1o%}8Qx9AeJgThU3X6Nz8#-2_R*8PBF-L^Nk|c=@;t9Aq00m^wB0vPLKlPyy-S%sHW*L%`%A()u zU_~%l%}ZJh=&B{@;Y#W;JMMD~%DBx8PqjapfOpunRgfwn)nZu!Oqi;L%IPZqjBKS9 zbJrQ(N32GdC8Lb5$$J!5g9WncX~qp~V6mrID+Rl>90irINIDw;^Fifp29-DX(w)8* zO+-7wnXY|o82_SZGElL%i&7SZ`wvlEQQazQ%u&+P2a9n)6e#YZFyMENfnovJ*dYk_ zK#lSX%Zj#N&pg6Pg2IEneo~*|3esga97J3TD(y|dWnoU!Xla=J&$l9^0skm&6kbVS z0opeO(WT=HqmoWgupc93#DgFU>H208Va4lyzQk&-a3;;QV1?Ewz_-9*ii`h}-+c~-Cr!!H0b&Yyi=^%H8j?>YQxEh>Ra*M{41Qr$r6ZTgL^>l6Jz}(&S9|4{ zpU9CI$Y2+SAf`qW(~FPqf!Y+Ju#MvaqFlhNu;LIv z5=uOinph+up*v*Dww|)G4uc3;l!&Z~6MhcBDK9Ti6DNKd zl;k*aP0yp;6#Hs~sPf7af)oGFQ6wBFJ<7u*vB!}xD3Z;(-PlO-ynHgZAiNn>J!K{d zy7+M%@Dczf^^!0iEZtj`l&;5?j%6X}rs1m))-nG)PD2GgM2Nq3%p(-t)J_~3 zafCi+l+}>;>_}4tlEzN==r()#{Ud}E=!nPI^ig)Al#GPwfz|^r!O|2=y^SLYIDMHhcGFOI*2LU;LhBDjVXX?cT`Y44KZdnxU%xYT1tooVN&G^9^`$jUXhAD zWoFfrkkWVlgnw<&Q!SJl4OY9JK?`YLMU;a6&kZ zii}mQjJm8c28$2YB|$gS^~gg05oc4O!rH{>>h7IAg;-%I97}(Oh&Pi)pHjy7YlCOq z%G|m{#vIj<8R5+qgP5W@#-%QaRi`j6BS$FGplf7|F^Mwv>CYf%VkXX7(ZKh$aU7Jy zOi2RBPmn+hck-b>SouGTjim~Zf0fG<5o0|0(EJ}p9UT>?x38>9*VvRcR-56$0oYM` zhbb4{1*>ghG@g3cUDtV^r-9&< zR9KdA1o*Ei&0m^~Y43O*41{nOW+73q;faU5^|5aJjw&$PUOw86%m zo)TY*5s~a_^0**|`KNHTxe6$G;lyhJ!g71pBP;MzznVFs8uPd#<{TCC$pz5fsPgix z%W2vOA)tP@2@3%Qnt?19va~Q2K@L=gHIDkpXd}JU5rFU!TnwhEnc_SAA3MkK9K@ja zg5vj3l+=p93_L@HE)uGDT`;_XytAybE_x#>kb1{14QU_=^afCH$c*gMhF~(_S^d45 zmKar;fW*c=}SyKTgLxc_ff^N~9Pz+hcoE9V^ zUG0@nz7ik+(#@-lCGt^MtKx;>4x|f%H!3wFZl(`MzOSel*Ah;OV>pHsH`EpgC!UQt zEw$oS-Mz`WD^jF(XWB}Bf{2qu-7h`TTmKT(xc`bmL!?k+<;zOS@G78ZVse3camOQ! zSa*e%906GlTy2ucGYEhW_IW@+Yzv^JbSxzGJ(B5S6--hwhlKJk4CAZ~3i$uf z+s`n2%DXNujJ`m$_^gz#UH5ZwD=N^*Y(A9Ap_8X>{RE(lhu(GcRN6`xqT4a46Djba z%n=7|L^ohzs`sF-00ePD(+Uc_`gSG@s}9T3a<|?BY|&%+`j;SrsmHo>uz3Rz7np;( z_1*+*?r^yj#uY%$j{>CtT=ugI*ue=XcsR_gIP1N%@i8og#c#N=R_i{D+4>7c38 zrM7{LjOdoFskA8#fxM@eHe^0HXGfjY?S>{9t;{JcAsf@x#`6syR%88|sNDS}RV!vu z72hTcHE7&tXyAag{Yl!%+BgzDRo&3Zoa_Tse&qs`i_epdJ!>we>UX zQ34I-e1JlFq@pC*CqGpF(_m3tS>^I-p`;C1e)233+Kj|GYPVzEr&~zq0Y5269kWna zBvlD)b;0){L3)66=31~vKLq8z*7V#|9!!30a=fw<)538lSJD^Ur@T_5s9Gzd7IY}l zDphHPYj(}piD9jjh$vUf6)2psL=MA4ce_+BfV?rB$lH*2{s%^|U~dAFAM`6CU7Nd~ z>imc4n_{dFG5vS9z}_tAt2x8UL(>)ndfgR5XHoay9wr*Kjrj>pA-t!ws|H(QTv_b_ ze$Ps!@`rH~G*-Z`t1KBu$i{jkZa*^N-i{mKJqiy*OR?byG~}7yLKTi^Lk?D9*^*e_ zp^Sm7mH^)Zjs-4N+XuCGsNbfZ!6-wSTWv%XK&^u#U#7HIz~hR@5nlmBjlW$bu}9=@ zO~ArA&yeH<<<23RzXW9+(zNthuggTFbkV#x{fd#K7F88%hQk)3VJy@H*en#f&=Nyq zV>+3agss$e7IiyTP(VXd&P~$@+jEFmu2w5@r0F*2tFsCfQ%W+6ikRG zRAYSIv4!~+i#0_Mrr-{+*C~l$6)X!=@Azp4%$`8RR*$vMjZ_cv9cW!#5|p2?N^9sQ zw1nN(^AgSzJ154c4 z_A5GJtC<6j3c{%O8J`Xy9$OrsoiBwH*tl^A?HG(s;%$%eL-hzUns7&C0w!g`pf1ea zL^}rH6YLzo?t7%PNeCR();;GJ=%YgP2<={!&w)=hJNB7kT(0A(Q`$;Ij5K3AFyg$< zYs;>rP_?3jwM&@d_tnpPHVDMF9RH&gc1Hr0H=nfP6OnTj zU%91uH-9Z4cIA4yENmlKN9?fQvn~4u+V>FcnWw+B7dcdMf1^H<`aQNe7)Qc}huyS} zI485|HiV>O&BSbsqC}0VNL8Z5>7AcpsDXmcqu@-9mvZ;K^NF z7~ve}Y2I)gAtchSTpl9KbkKgui#bzDe)EbV;UAzK!*v{;bKRrIQC5k1^8h!EcL>OJHRY9CCe(@d;aZ=^sb=(OTD?mP^I9 zFf{zkWu#&#qi9GPS~0Z~ASASVKnqMFV1g}k$WQxwj1GVSKlC(Ln$~{BjsL;GqT?&5 z`;XR$Eu)8f&YK#DGbpIL2F%f(6VMY{&5(@0nenrF1s_3ydUP1=A^;_=o9jPfaBh-d zHE^y_qCnIA3~Yx+NAz1Ev?E8ZO7!OiS!HD;H`=N?JYLbF-)HD+YC&EVqki#2JAg2+ zs`Z0CU{-N>+itUr6}7F|aYlEAowu5CuV`cf9g&#O0R_?<(^yq>XMP3_fO}fO>u-v-7$0s1B~wsx>O9SYNS*n4aIrK5+vI>GfCk#P~r)9sF*@@f|zn zLkey;&LAnx|8j;I=1c<8sJjg-D6SoU8wvaVk1`D5%x;?W*{CKS$mW;}gh9s|`;bIJ z)hwY4w^9o8qtSqEa#f0IMUBcnSY0!7&-goRC<`ZoAyyjK9j*25)6m)rCkl56!uLNw z5Wu1P2rYoO=4ZqYt?b@Sq2hac2WHjGvZI7{yg=u zcJE!R_XImoHXx$4iyFf&gbEupu63x{hd!J@o5Uay`td*khWSf<=8973?)(NT5&V;6 zS4bSSE3ILrS0LT_6UkShOndW^LL}^iZ(J}&wIJv_HHktiy?>~$H(+g=@oS2xjlPMY zT;ghg__#jFcaa!~aiSNd&mtia!1e~|;5bZKd6nnnh(TV*`;5M$fYB*&<9m*40j_PM zISaHO$s9lwue$x&ex5eiN=8h1lW@2md5deWv-cFZ2BqvJ*CQn8t6OBGiQ5W*li)X$ z(WJA*u{9ZX9D9wdvBB>Tjff&ct$1K z-I{UK>evRksIT|~h9=V2K5hQK36U%RPcN~;om5CSS=p}COGDIs6GOE`+os(VUcz#q ze)iJ>Pk=R!X7)W<=@xBg=-%7dg#g9D$C3#BeRUFoag7>GaRlruz-2ci6B&w%JJ?;-y9V`gqq;`pV4b%znqD$gP@e=sw;DBTktQp95YgU|^V-+} zh$jQ%24wKBewOFgt)y#_G(<1p6sIAiEG*{G2R%~cDUvBB7U4UBa31T?i26o<*lY%F z0i8_AK&+$p!c-8&EFeJ}hl`RF7HYG4=S-1)RyGn=zwzRKtL!?!n#z`NXwr+)B!ZyG zN)1Snri9Q0X^J3%AcPQ#3nUAPlm%V7Gz%cT2rNxe>7XFQI(~vMJ?Cx9;BGlJtOw#0Ye9f3QbN;8EkpJtE=d(>Asx0=GfL?Jv~0D zLz$n*j1}?}nebsoPjDp~@ERN1Qz>3CfJ#Z=a;|3W>G3!{ibV_@&I3vSywl^u{-6;; zXe(F+;ScDM!faU;sNaQ9@V~n*6Va!@;*qBh!zy7Wcz77X>X|+pG zO}he{*2Biwf3me4*v18MMdOg*7OkjQLUD`?SM#zOU7*_$+97Jbmm^A#akyquWi@9s zO;mRfqjUbRyf7SDe|XtMu<^r_ZXztmtoD=Yl<(A?BUP&8U#A$Jai4Xwo~3_G6DlO|y!*0ao7jv;Nn9ml{J6E4RI5S{67=5A?&u)1@`*PO-z2(jWjW@5VcZk{R z#bk8lrCdD%$Bd+&U`6DSRO%vpvn7IhP%wHw#JY>=iZSVkgmTQs)yExPEpHbRbHDO`}LZ4s+K5vBoeCfR!B zsKoQ}IZj->dN%X!Pk^9*v#^Zr#pCJDUiNM&kHr zb&#;->RrD^UculRqV+oV?8y#lZ>Q3k7EJ_ykcfUXHl{PvAOb5uC1Eb&aKgx3?}hXJ zT)K!{>rGO8MudL2+gFZ-I=2~ZHfAGPy?~SF);@%c^5OAn}CWBU4LBo_U`5`E!Q) z_mY#7qpPaC<+YT@do<0^#&u@FH=l&h2Dr!>4QfCAQXBh~y`wML7nKxozqY7xa%GWN z7BD-Na_HtG*N(n;a^D=aiN){ZgvvP2No;bNgC6tyMNz;eFjRxZ!I4_~p9@yY5gqD;A+lrNF+( zHnC|bR+JW%!9IMJiD*uia557w^sr38srQ_}e6D{(K*gna@YNs4v__HHWh+9uH6O9b zc^@AddT=uQGK%O0b8?YTR9t%S>LKZk-KXMgpT!IxGt+`e6jd(pM2$XuAJw+N;Zqrs z1&5DUg*Dq&o39vVe`vlT)GU0UOyD;;)5*NdUbKXPA+t90FY=2k`cL>JYQmJ@77p`6 z+3gyE;*Rt2bgn&Jnj9R^n?vC+u7S0*2#kcmC>h^1v+tgzVVezE3=<4-MDOe2c^*)gS0p)U?DPb&W|@u|8FDm$ zyrMREVvPx};Xh}nmYCPpuxg4Fuh{>|v>a+;&%6@;*2A-BE*yFoiK&(1+-C7~IG?QM$x_`ICy4(Y4##O;B~GY#*RF2GK= zZffO(g-94G4w)ADzUY@RgDJW+z+*5WCpa4d(`+o9vYuO#uM`D02K7k%%52{(b5!g0 zLDi|1PK|2qLaoMJr4tW%7?8%3Vh9Ae-5_Ut%`Zkj=OW_$9|AEYVN}C%#jH}UNdA)4 z;!3w;Z2OOUb$9m0iycMWhsqwa51F>;%6cGm@mBRp;TIaYl3xU#mj|=f=XSI47-3d3 zEEqd)d$DuIF$oIcZ{K#R%^CX8_CP3y)c}pgx}-`it3>loGdo z#v#@ts^=>)g(|Xc`5h#Yc0 z3wfdUqD@A=Y2m-ihiMS}5X-I9!w}vvi0`@b4pS2aj7N5ql%WL+{!ioDxct&0;+_42 zMjZ-G0k1~wjv54$7*0?7MWZge3Lppg3Cz;tLYX>OKZu1Tw2?`-^X5dwL=dh6R>n)s zn~Pl+K3ni8W*qfi^H8$l|6?DD*{|^+n#SK3<NK`?+(2XXNWnkg@(r3zhN(Xw(?XrG%66;pb-t%Fkh8?yM%5$ zd0B0aZIsQiS#yaxo$gj*rA^&Z=FyYOcS8h5&?qmnw+KyXg*XB}KZ<8_h&snl1A?|Q z)>2cL#RM$xciyj?o$jElIJE{!6+)A`?t^hZ(Mg<@7V>$b>P z-o&DX<27_+RFxffX657)IQA`!-3>(ndw7*6ZF?7kp>8if5cysg`H6ZHmx6fGZYoTt zl@9p|OqIBfdQHE@Ki<%B>g`NvyDpyJzSs=4&bLI((QqhD2u^VgzgT#!KeVxS4<_4l^NqqVnUE}sAM!AyGZ+s8U` zW4B6^$w>azh~m6@Q+bq_$V*+PviA}yRj{YoM3td|atXmCfsa=Mv(v?&dAf-!+r$M+ zDYCc_N-{;gl0Ka>u0C4-O6fOUmgdr142*}PG@KVFe4)x6Zx|iS&*Mn#rWgXz(%!7s&t2NWV!AD2%FHpFw`pVq4P_n0d^5IXFAw-H|wFjGKq7G!lhEyP$!e7Ju+D_8ih8jgr0bw#ZY4maorx()NioIbLAv9qY0^{W&k^izE*{s@3X{3=kN=sp@mI zcyooF3Dt`;966HUkd^aU@)GCG+%~mC{lbks2u|7fs?9HADJa?U5t?-gGwBj#HEMi0 z;Un$cIHpKMXcO!CMElVAqjD63!vqlG4K5U!10nY7WV&C)a z^cukm9@`XZx2vAV_l!FohuvzDO4xQWzvtRHeeAwLRMKu2<9p7X$hn&{=00$~9h1%X zoZu~e14pn?x2ZehpRo1=oc$*BTQAub0)c?Ix=mu4{}j3#Wq0?SZB7UTgp+MT?ICF= z>i$>`h`ZaAyoa2Bpzx1{?e5M4dkEV`<^NR*Th>37w2jg~ma_qV&%h|1)(mmvCqxzPVZ$o`21cA7|O*4R$JyHIgKHWa>umiyB0f1Z<+2F5#0ZcKv AdH?_b literal 0 HcmV?d00001 From 23513576f9872bad4b6acadb5fbcfef1cc78f302 Mon Sep 17 00:00:00 2001 From: fanliwen Date: Wed, 11 Apr 2018 20:05:26 +0800 Subject: [PATCH 2/2] cache alien element and attribute class to make it faster in OdfXMLFactory --- .../main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java b/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java index 76a43929..23cd3d50 100644 --- a/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java +++ b/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfXMLFactory.java @@ -152,10 +152,10 @@ private static Class getOdfNodeClass(OdfName odfName, String nodeType, Map