From fb93ae8b8f6e0646ed9b95d4d8d0abe77d601a62 Mon Sep 17 00:00:00 2001 From: chibash Date: Wed, 28 Sep 2016 00:51:15 +0900 Subject: [PATCH] improves the backward compatibility of LoaderClassPath. LoaderClassPath is modified to show the same behavior in both Java 8 and 9. --- build.xml | 2 +- javassist.jar | Bin 724191 -> 724643 bytes src/main/javassist/ClassPoolTail.java | 3 +- src/main/javassist/CtClass.java | 2 +- src/main/javassist/LoaderClassPath.java | 49 +++++++++++++++++++++--- src/main/javassist/ModuleClassPath.java | 1 + src/test/javassist/JvstTest5.java | 7 ++++ 7 files changed, 55 insertions(+), 9 deletions(-) diff --git a/build.xml b/build.xml index e2b8819e..c4d00806 100644 --- a/build.xml +++ b/build.xml @@ -83,7 +83,7 @@ - + ^}6o+zQ+5y?(1HkV=0rT@C6Tno+bo}!ofk{;GkgA$poB8BurXe{U%39 zMY1dtS_Tg+NUVG+f8LcI%YF=s{W?k(#z+zSCuk?|hN?H~`!2Kx@vZmXi+i`7o+RFg zRj1=rJ{oN|OM1z}h^UxT6M&ADGAQ^*y;gZB*}q(Sx&7y{>S zBMs3F=vAXSDLx2tIjqi%%p8QcY*JSo7s^k0OD=-uTK__>ANMBjlL0wDqqitinI4xS zcg(%EKVd(-i}S<+vh-KRckS}~uH^;LO7H*|MAomMsAXT!>A z*l_5?t6JT=LqxvoJk76OQ02a)x9PIm9Qi_~h$Sd_Rqgs6C7gFV%SG6iA+FR4#d_T~ zYt{Jn+r%-iq;IkFds;tcpOKA<-2Cjwu5atBHGhcaEjd?)-gHk`Ym1~m5IRtow@DwZ zc=_!9hwzdWP^r4Aw(I0DxBM*&Gl7?h(rN95Tgm}Gi4GcFO8ECOdRYjBGaM<6)NC^d z#!!o!j$;JQ^7ikRcc{_}?Q{yHx*j`r1-pE3A=Gx1WFF70N*5W{)LM#pcowJGC=;1H zT|6y|t}5ZXH}YwOn-E_{bzo#RA6rBYS@LgnbV%AHxT{%(mofZeuc|4@N>fK3D&53( ze`=pOVvE^~xY#YAfZ{QAWG3mL`?=v!0E@2cyhts*$y02XfcDC1rec1-K(Y+oZ(HMD z$22*WTD@*!gM-}ne@b#+CD=5n-#L7*&M~6ahgNwP^2liA@iVV=s}3A>Ug$EmU+ zo=W@Z2QSu`3^FgSMlvLq!Jy8MgG_%7;k3@z#QCNDHog^m3n}B&SADW7Z)li0GSeM%87tdxerWdllQ@40 zQb$^bBXGCv;$rt*@P+qoi~oKP24}cSmC!1Lrp`;&-2m-X2ccMS?&ID6GvfMr)ns7t zMZ&yi^UF_6E=$iUK5@5wU+#M$*@*YxZXwRE(niys2eh2s34~kCW1*)%LV~4BSDA1% z_N>((o5{9qw5J7hC#tSLOrm>eEd50ub~Lctx4wpS@zHygWAx(@u9HJ7832q%vN#=gK zo`h&DzWrr8S&i{SO0ji}FtboWXz1RwJhj7bGACq-a9NRqDi1xSng*t^@iI0mx(WO8}kR%pTs^v&;-)9Wm?Y2Z}BE`FQuyq9S%_k+v)LVaoUg)Q=OE`VU8McSD)V z?9*feFFZug2tDov;Cb8+P*pj5*m84#^MMs@d@(_~h}&0u0)-lZ!M2y4qQQ_E7X(Ye zicCxODiQU0G!Zn`z;8T<#3^=l#dBT0bIJ5$VV@s4dSdVH*)3Vw;irUkV2Mxc2C}kJ z=u=~FYR@??MZ8DuSi6T0G^zO-rXKMX4*4*W2Q1$LCjzkyd3%IoV1qK59_kBoQIJ7K=V6eecXj#&D4n+|OR-`@Wt_o=3?`>bZY; z|JSw5{dO)N-Hs-!pd3;nY(JzxACohe`DC^!&v!A6>l#K^p@f-c45RJM;=!nWc0hVq z6mIAx9*B74?&>Y|+975q!`xzWL0g+@mrR2Mf2#E{729+6nIbPr!({q|t(%`S$oA01 zr|FgJcv(VEpTF$t$?RoMaiUG&DkOX3z5caZvZc?uordevv%+T;(yt^XPppQkBl=fS zo&l;%Evtcd2!7tc)5KTD%Z+OMDezj7g?|;3p4w}`BmBlY{`vFBM$JK65xC|IXDWql zz8|!~ZxPaeuSzl&Wjg{YWvS6D@Q{0rR$VqzHPG2!E+cw0O0YjE4t9%{;)(oo&jMx> z`9evGp*oMU+Fq*ffQR-LLE?&4OK-G|_*uEuoYit+Q#-rt)LK9ssx@yUdEa)u;W8a@M(4L> zdbec-<+28$mV5~6!=x;Wb{gg!`hQI8T`+3gLw4$a?l+xZF4MiQKKetuU9ZQp{p5Rl zR`?1p*@|1LSBU9~_2P#mRXSOLg&*t$MGKktn^^dNxxt|)3oIQql(#>3dV?L6!_a}K zR`))(;+d!sE3qUFkJ{lEyU5Rhj_6)|tfSP|Bc2ltA-sFf?(h3#7z$%|Pi*Ad+C91H z`DMVetji379q4u4?05OJ3~M}RbUu4X&3y)*ax_UNx~Ql@lH9b83X_J+QR78R)2Y54 zuFzO4GINV05hdOJNL1p}Ve?tIBcgJw;2IebUHJWQto$>Lrr<%&Vom$O_h?1PIGXfa z*IYIC+QFD%Aiu){-`ffA3Fs&5(|UFEwd_f!4bme?^RDlyYR%o*G&3 zI+lbDt8h#wqp4<4OE%|Now7H_B1N6Q(cFIh4nUyP=6VI1 zEBwi(lpG{1?|JLWyL|}n4>fk?y!N(~>?DIX+nE?<#)Nv$7wbutJatRGe45`u8Y4_^ zPM4L?-)@Clvl#6qhTBd)d)q{nK6Q;#->c}4#238{D7f8t)|pvA*&1z z!^!Y0ibv4G>`e?j;?Xy>=yk%>xo=pFxW&Gkw}gZi_Sd6WhG zft-#{f=2o&eB$LjZDO5D3nJdvGwZ%7G^(`o#jI-8Qs0ds%;uF^A>9_R^|cFa3@cj* zxwXp8veo1JU8~pw?>9j^=H;rbeXqy5OPZ^DT3v8^^in7c;T2_%W)vi7Nb#gxt1ylD zWpIAeJ6x*FAplpjuf6L7Yw|0x6-J76b_&04X5QaP_oKR9x=dZ|-u#L8$B|?XcVUhf zR)!ig$C@)Ir}u3c(N2{~I2Es!wolQjUUn31NqW(7inFT5D$KFNEU~{lzxIZqSCSW| z!}FRaXXVXq4{sY4dOhkJU3yTDfyd!*r(qwib-s_GKHF7%+e-a@TzuQTL5{?3>kHFs z24eKD#b7tJO(dC^Qq&%eL1(>`V8LHfY{I^>=C!jt))*2Wa69nxPk{Wb~$bF&1N zABX+zvC#RN7sR4J^JW#E51O}--+XIeW++(rwMzQygS85)ft8xRO$JG7hRzw!1TWUb zsOpl)F0E3I{IW*0Ni-=Zv3;*PS*e6-^hM_%hR^8HFb4ke6W_>p?!#KflTS5t-p@!PU!I;&G`o;jua)#nd z|96iiY)9vdh`+DkJ6A6!BY#km)h0#D5tammDfv8gmK*qp-Y47McOe|R8+}|Sp(`C# zWKXGWFJ}@1X$&`Qsb8qGp%odo9>6K5oYsNVe{A8`IJ*OSCAODhOegRorD9t$<+HVc z_>VfTV7|Mu&y2r6lgZ>|4R}TRjY{9?B73F?c>r}6&?&dRfc)nOdbJr>ryAz?ED6HF zv9Dv5jRB6AHFCs|t8-?TA_v|T@m)I%c13s_Dsx|*Mc+QM0bdc+Az#4+f6t;Tk?256 zN*tWEI^rh@2sH7RoJ<FDU*G- z-H!cnYR5Z5hg9nQd+usZ)B3bTvwT9!OaV{r`Qx>y z&l9#m5P(G6IyE=_hvVD)?86IjnB@>>6GW%3@mQ@?0JU+_@Qc-K*Mp-=JjYfF+ zRxIaz93s!SM-A{ozNN$_umn3uHsLqIWmREeN!mq?6gId7$^`{Y z(Bs1JpQ2)Zl%7?~cG7_cHynu}Ao{TsER82!O2sOEdV!4Y(%l4T4@O!w7c?Ur#oy}| zr=+@gefLhxL5B1Vv1K?DD)%!*^aKkWES-bKm7NTsiQrs)gOyM9n^w~c9`LCYUS|JN zS~D8H{v2y2wXRom$UFAIrF}$^TlOa3(|dRXl%9C#N-m8R*s_TtSHIv}(wWE~qdA|w z{e3BKozx2qt&iQIs|}jg<9<6Mm7D#{lI9Z)9YUw}Xz~a>%ZF7~UwPh-+2f+`BI{y7 zpHb+VSq7PJvNtPpG^?tp3`42B?94@HWs9eyn7=Y@XScHJ-s#hIWDksd%YS#=CE-)f zddq>+T;aawiTDY}(>L40+Vp{5*G<(m9GgzG(votIZ(7ApPqHr&(ws2zn>GJD*2T1G+A#|?E| z+dp62*Pki(ma~f;Zx||*i2vMm-PYv_0`hfmsUfPuc`J`c&G@uI4iS>rv?S z#4-N~;(gbH@ruH1pUl-{cMCGhvpR)P3Y=1~oOtO0*>aHjub{?fJBZx;yD(Y2$rbLt z(;yYZm&KY+-zKMrY)5P6Kdd?7G!nrE zlZ%K?V583!NLHCbjqdAry--wpEXDdk)xC-B3tM-e(TzU&rDF6dvn_y<5gX&NA9!6*P1&iZ>2^b%?XC zD(7-+{Mo~472NRlzJV6*%}e|wb%^HFdbbpD&G$AX$yyfkXXhn(^iqMI_rOZ?NQC}( zu0Exn?8oAFTRAqm_M$(#UfVr*Fxw;1*Ad;YbkP&}PGH0}B(m{IG7pE&PN zMqTOooa*^4jK0J9}nJVo+PA2wuhw){LiEL^kaOqO;nvj61)jC0+>rB;)nNbI7vl zJ{;l2&5zU`XC4;VxHo==4YNh8`^e{Rn~fbd*lu%q1Shu1v2O+&2A4Q=gzL^{R%)ZF z#Fhx2TkbrLS}2EBhwjb~KU60}>*NV%ye%ne@+155%B7LwL%I?#!TC>ByG16;1q($S zS}?i8?Pb2w-cQ7xc7jT?ipj#I0t7kNxMuS9f+%uWGU-Xp!As#!;eDmZ2!>h3Z^?=u znj_kkc-tcNGj`LNlyYCQcF{kx;~%J5Vp3}5?J}~AR9_TgT%WW`_{jaq1l>bby?$-{ zyOe`AE%Ok>2LExe+~zSTBb>qaxN7joGObe7dqk_CkKto%dSdkr8J3@Y4FNYcUm-YB z0(OS?griu?d1Fv=$;P`Sd&0=NoSim%%H+vpZ>hHBnwO+o8{pX7#|pZ!IDd+u)@!_3 zu;1{|Hgm-`+m7lOKe01-4jQAko182VcVCC-ZN5J~g=^t!w4%pQr@r&ccg0E>L{U_C zKziUjZUqEq8nHpK(hCD30*xnCYSFAGydy6qND?&c_HT0Ar|0@o)F~8(Meaq#OhyZh zO`4;5p43gH{M2>y%vl{cxf|f6sI%*PLUPvQpG$rMa`y}?9RCKN{fzdsZTGjuv59;a zt8N=+%KE{Z3fZIh&GR;=SR@#o!u0#Wag=ojTjaw8&Ss6ZZ{R-2qvbSNY!A%WXx6NuI1{N zi?*tmS!VtGI9ZUdL@>uiG^Vb!WL;nX)jMRB>668MoHz8VgjW7f(5Yr~jTh4Ir^sTb z7m^1aF$w)5LmU??7I{#I2iNOuWbKUKtAFuMw|C$}cp=Z%K^ncXj)}pRQZtrR)${Lm zibbs?O_MJSy`CR*ycJPwLtseC3dR29}z~Wi(1la53YR(hKs57AHEjBovr5Wnde?|ih4FG zlx!#zB7AH6X%ueut-bW7lA+O;mkYRr=L;9Ps0uZ!?zJJ|#gm*~y!l>BmIPCSNwb(R zGuJlHlP~iZwpm18Vs5B7a+@uaaia*ABZ_P4#{|WdkBjrlr)a=m)P&6QQ+2eBu6@pYTtR3goRa(>$`(gH)M{{D_4G9 zPMY~e-uVgdnRQFFWAzYQW2KfJ+VNxF5SJLwc+vi4D7s_a^3zo9(rEmex>6NPdsbvW z-;pkg|I#Z*basBiR(_7M`g+gZBn@{?BhSq-^!0Rwm$qcy5W+VQId1qv1oN^4gBwI0 znqx!3so6v^&*uD)@2-AeFpf!5C$+dY5%jE;ZQlgfzo{E-9cO(+!r9t!l=QUmdVog_ z8>d{=4YM4IGphA=Ta7)2TuS<8>%F^k{!}xwxlG4n=>q=w>a(*RUG$#cNfu%zE-p_~ zQh^ppt&JddS?r#iR+x;z>H;&y+-M;>OF3oFf59rTVT^dQj_u9&t~x8wp1*W6?YQl= z&1%gM_l_zw-?)!w7IYnYW1l57M+05*miMHoPd}LHgFmu9srQTrN69Vkm9?!1s^k~X zy)Qr0>Q7S0y%vii6^!pH$-jUYmrt>ZTP`##*Ed4O$bU|+1|AbWzg1-2dGkkbXYH6t zxk$Xk=Q5_i-|Kvx?hN7g-sn3&_*$G}WKU)BbFS3C3(ZhZRLnmtx*h+C1#R?o(|R_T zm^}s?(WbvSocklD>sI{}-yPOR&9`Hl2%XBeWu8AE--<{?80#fKM4agOO!ik+wI)nR zYn@i}9$sri6X~(AH4NUY)!_-tN200pmNpKDaC+IDTDqTH^P1_7Hw_Zn>1~XEZP{-@ z%c1QsehY2+(oe>rCZ}SXs(@y@_?@sv#4@~%zbQBSyg{j5wXmfOg;Klhehl22nuC;pzmz!N zP$69>hV5AcTFso@G;5l6iz>oqhS@|lUr}aj+!pOqDgFXlUI*HJ8j}0+rlkYC?-!h( zl$QM^DmLe7Rog641<|Bcl48+s2`!V{5aLhUQyemc3ty4K%u~kgM%XQ;vfs7LQ!Z04 z+s7`XwWQ8?CnCQ@T(hBTJ^6Gx%u?e;CdOOoPEO>p@qNeXesi;3GUfB;1-TKl%&_(6 ztS=1ch?5&rL1|Uu8`P!rPukoL@4T*4S@~8)i*TrkIB#&b^d%dWM2YlJowU@2>|ZZk zDiS@Gan{R?q&PgSF?s|yDIHU6{!M#O+IKta-XC}n_rRRa(W2(_3Z8nmgljGYoecBuP7+?D5XB$9KI$pqHD!E%W0)`Mx7?%=`As1A4o5;a>blV;^UcH4VFdM0M(_1uB4FA!76vb46lK6Jame2_e@s>Dzc zioRJPiuc)oJwK4IUQO1fmCcvRAW-Jp&zRlZj^BiMYp>s9^)~n4oh_qdIxp_| z$XdbTmZ{BfXFA}GpvYw>i=5o3q|PekA8d^Y=kKzn2Mj$a6FaQ;gyK6ZJc)Ed1zkf< zoizjHUVX7W{PCoK+6J6U@^zHsap@^5ZvqwU_8%;D`f?C@`QpEi-oW!;a+adb)n&r; zS9_u>;^xUXaN$7sX9Il2Ilef%x^Te$f`Pc9gnu6kr(R8qZ$WTyR1lbaK@cTY6$L^; z|8~Y25rS^xUQt+b5HrAApaKa16cIhh9gr2m0{V2N2YZ_XGzaixctIvWzjQ&6-Ia3e zZ(-0Z&~Hi{q(pornMMs%0E}qY1_c6?v?1slFye*@NEe_UnSt~H>b(WX7@)YUK@O-Z zDM@!h&VZ%A-9hW{E8eOf=nlaZrTzrO1W0y^2K@k9?UF!RKx<7l=m?Nkmir&i8wx?M zuI_BGcZ)zD06%2QK}tZs@Jdh_;D1ySZFA85YNfGxJ)&fyuIFr-)6ENyTqlmKEyfrE*x$!3;=a=;E$EEY%=eRi4o%a=?!rW00jC@(D zZkt5J$Is@FcHM$uy0eW1(AA2!ENJF47(pIvik@U>v4O5^D(b%{osck}D2JZY8BFqJ-b(xT`M9oRKCkwlBc z^#t|J_?h;-k;zv%!f|D7w~+hcS;CoIZjw&LEp4t8*AE=CZq~lJzj;((^QQaaw&9UU z)r31)npr)kVkGZMzpUif7KZHmU|m*QwsE0dube5o$KEi>oS>Z+(>K}V$f(svqF&t1 zT%d<{ecS^_L|Rh8%pP87yyCUHLzZFcwrA$MjCt$qB`*{|uDvR&##0RQIhBpljzny2 zZhzVNY^+QWDPbfpQ<{=X>C{nYRq`@~_H)bnQ{&xpGulZ_o6%w_b}PQumAL*MH_Q&F zzNBZ!(Eh@cxHsF;Q}NUNt#gKc3XxXwFJKlIOdURK?C^4d|j5>B&CP1|@txxYPfI%}v* zjglx_5fu!M_9EEm)`QYDJ!t1y+Shv0R2^WlMOrnJ5Z*wS^qj(VUeL;nw~4`2ip3)7 zPuYrl2bBC3bfj@H)e`ORZEUPIeyTL_@ z!_BoV&mLmr0p$E1&J%n{{x0J}HFUgPGHq5_q81idh9)IQ8qe5#3@th(OzdOU%*M;rg(w@-S_t0jcl|(5CXSN7Dd`88yciajP2!t3C@=nS1R5 zwzxGK7Mzr-6CBlRJI+%~;QaO6P1&CJLH>cqa(gTH2TBF7>85X59%ejtTU7KL@^(ak z9YmsM8LWlZsXMNLpNx#KRZ;h)(pElSdh&YIb%jxr;yXHt@Ky?q^Cx+p>0UcXloLc* zE?-8tF#-N{ak(8%nAA_VFJ>=ow3Cq4$c0d=0xM9_I{E8grMLrY%)C%G?+F#prM=|xx2ORMJ7}3XJIxr9W z_<14g(S39u2P@}Kbn(f8jmXWTyudg{IkuKD#JP{+Sy*ZtYwY~XlPSLE8-hR3E;e~T zSc}2lC7X-~GZ{~3i4NV4L?<7wLB_dF6y^}2G6@1(mf-J1<5V(#c*#!qKJO{1kyw_> zE>l|GS?HSzdFr1y23TF(9qoR_Cw*&CZ-sq!o27Su@(E+k&o7JO%$g=0jVCtog~Y2uIu4PA zLY5HH?M9z!>6_*WS)R6{=-*!NtmwyYYkZBCj@ydvm=LHcq!u>tFnLl{NXX$!+nXIM zWgOAiGN#F^I@o9+mA|4upiWn%_O%g`6X{E?v+dlaWbij}zJzU3#v+f*8+cvfTCp&x zj>V+cjjagPk*KQAAqS-+Hxg2PEpQ}U0*wwo=Ey6(KZ?G~rah*;U&+j;jS#7JvCeav za5%;{TAA7lkK}+gq@p3IJypapfuR-C6xT|{9BNqtZ6ZeQhlkMm*!&3AP2PEldGjI@ zL~t5?d9Y8kcbZH8<_E1N`_}LN(LJDB{iV!~#TRL7)Sx)UD0}4f0+Y@<>!`ci1rx;w ze3QNr>J*^|9Al!=YV(DJUK zv`*(tG(qs!%Qp(V#Cw`$zZR$HZ->~I*%{wDRC@#&TQ-LtU82YB|bDsaQHb_iusXoepRpaZb+8D{fQyfFAjL( zz;eQ>GE!tDbKr62{`ni9K`#bxHFIxEvwOk!mT6^$_axhhakB1?^pcnILPf7-IxI+L znEznzc>b)xk-+9-HQV%SGICt&Qr2n3Zau;RRj6Me5)n@CvrKFT4 zYPdEXR?_NMfqGIhjm1Rg$?S1-NMY~+*D_2a|V?=f@U?b4=k z$=5w$bdD+rrWCf&HX)UZLKLi_xTY6zs*BbIWSDCHqZA zQqKlK_fd)QsiBc>XTuG3G_TgzQyiY;o^ab_^DKNdV0grk+eq`9!XDXHef&*Hd`6?5 zL7B*u<;D|%Ag1QHHLjA28)s*+kSImXy(m6L&tN3^QXcyCPmXV2hvjLue-j#m*FG)T zy=XW85Ow?#&r11_B>v~nJN;6XJ2mIb@1AX7(8=e22GIzq8G$P7&)tIShX-#n1Li#; z`rj29{2ksh~|y5l>J@|*Gw3zLhwx1=yvHOJh1A8 z6NtNPE}h|`rz4&=dT9?i4$hyvWyks zKlyA1-Z!TCen>pQ#rpo)WBcpU;n40ZWHY$*3t}!OK zVEDn4bDi5B{xR?2>?|oOZ@aZ^PJ!Ch-;+Re?C)64CW>?ETj+e1F1n%0{E)5au8(dA z^%s0{+iwj-e}2-NPw6;n<=x1OI^(7KW>(qkBxsxa(S0vtRirBW%c-Ke_=39h^4B2a zqL1mH`%m!v&NxzSFS46;L_GtlaP zd%D+(Br&ujAaQh~pf*8~w#9_OplQCpT(pH3bF`*LQ64cN*ISQlx2Ci;*u$>s)y^U{ zTH?Ep$yPriOWmO9(hMF>i=)FkW423e5Q*-~504gnYRy$ZzlH)rqWI|F27I&E%sVjX zn`td?(#g8#LRWu%&)hwO+)979P{f1vHbWTq4$|+IT+o;Vna|hc^|inijX$> zr;($#XUdi(4U5J+(Lvnm^)XA>#0ElYu)DJg!yUyiH@UGYRU!K6rNc2}XPP>-aT3mq zCzUaoW)za2DN8JFL5hv|=oa7fQOzBbI@!Fv->Y7l=r?^nc({|}Sf73FN2|g<^<%H< z^IWMUKUy!{d%V5yfF0QwbL(D1NRf+I z=Qqi%xg8=hsfT3z*?;iJW@uyaByunIKPe{fv(%CPb{RblHn_PyQt4>4Uw5x`VzBXs zSqJz1>luDg=}OJ%b+7DR%yn41KBfDn`Z@UQ@&ETU->(yE$PC888NNLAGUMQ2I7UFU znEPWODtIIXs{T|66FUY{LZ=f{E{BFjnN9sr>vN#HkKeOlvpjGeKX7PA(0OD}PeAKI zi~Ki^l1JC*8Xx6K*S&b!{CF%u+K)j}H1JywzSB*F@`r;@5){5wemV;e?mVpZZ3-hf z%Zaw<$6su)tT==}8SR=B7H19OXaBSd#c$hF{X?B%rb|-9S}=tJcd)OZT;=YXl-8u|MF=(vYQ|r4PFqNt-c zk-Rc=K}G8IHl^`aRjsPwX3|3zd)eUg|GiJW+@`900Q~`O5mc5y2;kJOzYK!o!f^h6 zRh?1@<+=R9z~B22s|}DZaPFVn0yP6S3dwt*k$*P|zd%QbzxNIG7GO@`YDKZd*;e;b zObs5U;~SI;6OxG{$F@Pij#pz#*im3WF&7zl1h|YiVFEXRul+4g4yrFH>@L3_vA#@H zMNB9=m>;{#3JwKb-8L8@0=H`~1%UMr2z4R6OdQ;AITD6 zOW+P;R~oEBbH$S|1AEh6QB}U+UBHZ7G*|}ke<=jq3BS_h`nI{E@p7K1ApjSWa#2K> zk2xq3?AIu8CxFJQIPeUhDLM_@2aHQ(L7ClwF${(v`RUf5GNLL{k!9FlMmUIei4)pPu0jB{J z?i_d#pf(r4(LgAbqxjSPFA=|s#JmrN|mMT3340uF&)iQSxdCQ*7R_8S!A^#pR+ zJPIbjI&FYk0Xghj;2q{G+piNq2mw1ei6O2)D~1GOM}5_L$^&7ATz$fSx72Y3=TaaM z=Gq*X8ml4zVF5b33PGlTE}5~Dq)#qGvx3q0fl_0h3PJENw@NROiWGw+06Hk7AYNow zl4Ersq(Bbj89;Oam@z{^c7&HcRiZGrqc79*c^QfxD`Etp1X5eq90CWzYGx0q0U*V@ z1DOOOxN;9-3AD=j{>PD5{*W(#VoVTZ_-Zm>ot|9&+ULrIi>Htd$Q4>%E$?Z?FP+nc zV%~3DDn6@3(PANK5CyTGa zQ&|Yf0+Lwc6+{-WA+8oO2T;!SkPv{{ZiL(byrXJ^V4zn}?_Yks`i2+>2aaKsf>2}7 zvk*A;QzxV!xS%YZgwz1WSk6M~VOJw&^NtR=FYOn^yz_n}CxQ9<{C zJQjVMVZ?rE`W)=PU9iFQ&|83jL-5DmsLP@=0>+FN!>$BiPZ^>4K=5;!p|^p4H%R)h z8kdURA~AVx@W1`ou$pX8Bj}ae&-dxfGlWh6 zviwY--2f$R4owA8tutt-km0g-KLkj%+vZRd2GV?4zeug2TtII*Tc|sruf_q|4)A=O zptk^cn_Z!20I$gd8VgvX>H{qUH`FBaxfU#npu0xUk_xDSf8^h4=SD8;U0(}mMZ5)Hv zl3(#$*P*5WuXh9L3s5p!P=A1G_y%PLsQDcz3@~%;ClmsJ_VoxF1wfTX*hubo`D4dF zqySWxR*+#UE}#)Wvw5~pB=G&@Z|Pb{!}KYR{N&s$5$4;IjG&W9(*OOql26 zm&NEy8%z&~kYqQE7?7mZ{~t*0`6*%QTBe z{+)O|AH2kT$JtAT}Gmj*7*aD{S=6x;xa_o6g>0YJG`39biF#2WBm0GlM;OWsx1k=}c- z@!`^}`ActwG09GFPAsJf{2LHrTr+qe5WXi)@C?9D`up&I6C}+Ieh%=`z2V=0=|3T0e=s)Mr^?kfe1d@fiD7-%|2WgplS}`jDQ!5Q)jzoU~CNTzY^pZhx>`@if3Ge%Lv#TP=YIRr#@Z)uaFkn6rHR1+9$}S&5W1;1Y&p(x=k*P)FQ%!#QhV9N!&mY zV_Vn|w*mDGJcuXm!6+oGbBHRI~gW`y4fC`pEYyjErB#-#_yxXLR00XV>lo4rw zc2hM(3?OAq3n32h==2bk05xogxD4dq0~*`}u?zThY>LPSc-a=0QvN};1-tPNDlr>G z4{-iCzlT5oa**zbKR^vb`Xf#O3imPM0ML9MhPV%S=Ng0fx5D@)BH%#3M`?&~z!PW| zV(C9MnHtXdPv7PX#4w-*n~!J$#`u;YJ_0uCRU*uR-DYJAf(GCXw*4nYf$a!4U^VzU zgop*K@gGN!0Q%yl5dOf<7rKlv0agg>O~eGCP3RlqE1-@30I`C1H8E3(mVUju-1aRfaw6@ZyX&@l<* zAuzU23i%YEEToa9fSYfWks1J4AXTIW?4RUvIM+XcdRoXa$d$`Jx00!J6^M7q~m`S%i}U(1PYN*%K!Cp*CYS!r{=K8WP*Rt%H#6> zL&viRSq-{^*2EZM^7gX8tX#s&aRn{r7YOe<)}jyD1;}C?Kt2YRp8N@9BFR5l)Nq=V z1YClD@6PHet!NyH-pEJ+Z|c`(Mzt@QtL-zHEYi~tMky5|>|Zch)n8GSOZpny+`}EPU8&8PNFFU=sIWeZ%Q!|s!r*zi&Ivi~%_;wqm@!&q)Vu@K(&f?FP zWe@01UGkQWFSx~}=c&HYra3!k2H>xE-U%wB^z==!RntX#bN+@s_h|J?y(;ZqG-%nyF`f8KY^$hJ-uZFo zwdXL|)akRQXr`Zc{qC=dcq^LTWS70ufBn2!$(31|{|S@gm~ws+t)ZAwvQ9sO<)O!I zeubM9#HFPRN`(@#thXtA!tsBq#dnv4pEvfO-$>oCwWp8vQR-CtrmFt3ltEEy`EHFo zWiiJ#KiHUj%dUIGo{jnx{(n>VsgxF|0y76k$)mCJMMY_G4`8S_Lyp&W?Sr4HxrRB1 zJ0nXs*~ee{I5~|4FAYEVGBlQy3*xae z?_p%WqgAeUTTwwj+mKnZ${x-Jb4-3eIWBNxI6FR&3Qq_>@=p6aenfrxTLY4YzG(S>$xDy+ytFWp3W`3m2TOTV3(5n<>*A>HO{U*j0knd6*iM8H}7~uWK3&$+TW6DLmD)!?z?+F@e+Dx zRrUH~k;u&syj_w6wWd|?U+3f`I3lwWAAJt^^>mcZh79}#)6W0zF;U%HU^pLnS#9zm zm}NMM6SEA%!$l_;47g9~k;(AqsI5*sD~=HGS95+w7)fR(60Q9qw$w%8-c;+FY!Tlp zI!QuibQf-o9V864^*l+Dc3wYUo2}+x$9I%&@$mFy`;-WWKzg8~y&!a5T8NXT^mE>7 zZ74a!7$OS#Q?%Xu{sySX;wFinWk)Sp#!h3~0z;0UV*uLufs6|3MSE>4%S~SgG_6q~ z=>x{w4UcRidB^DSSwCrPe0Z!oPp3RB;4M?Z0B2B{o;TZ>)gcQn+;=i;_YA9RqkBE7 zA*x<0J-=)2(Nr=K^E@Tl!jh3xI^k|+yZuWACglD3$7G4nF9sGuojITQIaV^b28@;l z-lrMh>Tmu=w>rfpKf8=%KFfoJ<8tgdJ(@*lHND}{D*3KKt= z%o*>7dUHN6Y0pSJ7oG#{1JZt(pzh-RzrvmaEXOu#Z@cF$4eg<#y_Bu^Lg)*r?4pbc4Jz45 zAvA^3Em20HU5aExMoB|PqK&UY+bTr=xu56hecvblfBjuo7tT5NxzD=Kz0Un0&uUB# z+9s!gAOn1;$%8NmG&OedTIc5%xwvV8@+`?euU7k)eyg1m`5o0dE(w*It{<=@c>OBf zhx)pOU)}v2-apx4yQA;G&lP%kvU__ZKB#G(z4M<&Qu40s3Fb}ZQ~FHJ?{;t5!b*R? zS&)@5cUMrGlykFNNP*-R4LJqk2_%B`Cwm2%NFFR?{iHZgf{ zSwKW#tElGJ=tavmBzJX+>^u{=-ST!=uTr?_>=>7&J=zaXSSg8>^+i9jQe&H#!b8o~c$TDD}B7a_JE5v#;V;e5R_a?bE5|-Md*}{JVdThq=z|aq;|_pL+DT zLTmis`)4wIwTg~>*^U(wA=llZE=uZr)Q9g0>!apmR41;@@LafBc9N;X`r}Sk4_&VM z`bPB#O!}PXaY|{&N}X=MmRAzlYjmBC_M&Zs`#0;p;xB*f<=ZxShoao zqFZowmML28N|*2t zZ}){%OL}U&Qq&)tc{=4?wCID#Mp3oiIleO%-V9sy>%iMj3sRE(9|hWZ|3(dF>qTz9 znQ5}re{uNEAMR^TSvIZ+PXBr}CT;ANq^ON+n~x^Dg*0t4TKH^^-PBI6j6CDgvr9`i zMh7VB2xA|T_2aa zE&ud()!U=FvqFSTN58X=kPK{5ko5}Q)p1<=L2HYv=}WmsCh79W&Q@!yMW`H4Kd-RR zU96&P;>Jy4hw5a%&YUN9Gk9wBW#b7kyLVI`+ zRKbzESH^AsaICLj>o4=y5;29wJv&?bTNLjG$Io4+n*UfBs_;_h2G&lMX|iBCQX(ky z06wvh6(GkZ3fVwN2F|v$JojdK;oZr)tKtI$irDK-X1e_QFaP1N@AsFSK3%yacInYo z8NZgPUsLbBC(&%Bk=fv})JS5K=I3hxPw$kJ+^n$(3>aiJv%2K%?;V&NUR&?`wmCDL z=$f{2Yj(%ECw3k4thE+hc<*xf&Dn!jln+_QT)&^8`Q(fE;anx#ij zchzyzUE%4nzH!pXUFjm*@}t%_22L&->5-SUQC0EFirH#T3FlVT2x#s#kBm0F%r1QE zVc}^eGCh55wWU<%5x<`4XG#Pmw9==otXcUudz)F2*q@|@huz*kvC4UyDdQyl`d!7S zZx8k!{$Ww7qhQ%GapRJbyc>H;Qvx)-M`jiG{84M4-gn5UuCs`}A&F(GCo*X2* z_u%hGbDkbIvYXf=^Tl;WuJMb&&<%&nZp^kn-EL}l@W-sgD?cB;Jn~I;<3F}N)0N-% zT1{W!{`$Xyc`7wF1LE})3s>EU4A0vtYIJY!T?OWCvGtxC#ljyUf9Ilgu7n|~*#sdH zmFZwL#m4jZpDV>Xa*d3yh+Ggkv0QS!Y-;C0+jto84m%%|du{reCgUimHo*F$+gmyL z<*}cV!W+8E3;GiLPx%M_{?j|^o@IKC-6I?S`mLr%>WsVAzA17N?o*kl=A>WUK0?DWqu>z;YrgzT%KaK)>wmB*_^M9Iq`i}pp5~^ zwJkmGFGDND8j7S6duIF2FplWIGUsF1J_o`R9rGjv1IH2_CWc1_9M0@ll`QpxiJ|CN zTX?pLSNDX8JJY0!>iAP0)&2ZpcS>TqWTsf^iL`(%Nqv`#E}6%~Y6N6lGr1ME%HZ*g zw0ZTfWUoc1_ODOPDtVNk>p8Z;_wKf<&#(WA*=BX=l~~%3?`Q5gEGczf7QguRiNcqk zruDl>sGlFVJta`z;9GyB&yi}~;@>h(u6oAn_2wQ}ptpE>NKVTG3B~JjFN&+CWreJp z5!^8`f0y@v!FiF7K8VeG;TU{IBlrHdw!^Y5e?Cnav>1D{_e^oH_@1doCJ#4lGb>yY zWH@O-RNAb-u!u#-y)R-Q#Oqey2buKz9bxmjbuM&k&Tm_}>GQMmGeW%{`SEyH@z0N5Z=`TnY^qwzq2Cw6UCdf9KVy6(=9x z?7s0&pK^eCV2Y=*m_fAYhAV4gOS2s>y%bU2ckF@{->vD2 zX%<-F4nn}s{PwQkP3K6}%-sA*T7r+Kd*o&R`3 zeKFs8u^NMwEskRqB&&l?31t_)7y4zUy|wInV#;sCc8!#JqpCF7O)m7q76(6xzOs7$ z=}EDd684G3G_7GS421IKy@^t)(nIEpw5$~@5{{6I1XZ+Jj4hk5zMZhAj>oH~^d;NF z6``{PQuiiQ^Uv%ge1!So+p0(+keJH-x+<~@B&LyDh=@P}zIFlG#ADqK*a^7%Z5wB| zfW;@nk3Y*weyJ2$1QW`9CambU!kQ>3m=MGF1}F*x!vs)zFfmabUmpyJJqEpf8dO@ZrNQ5m$QgXfoG;6phd4WhWlomy4x!h#2MI%PUU4}g?gWsG}(dXh- z(eG;@3O+gA9}1#`wxWbkg1opw@yEY5AQ_2Kk~vJ{<oDvYu=rcec@G>YtCnpn)|7#NxjkU^NjWtdR(suNlATvh=`fmO&vj2eY9 zj?y7}qUq#acMvliF5a1mpmGjsI!YLlVvLL;l==PUvrv@{OA&=8(C+?ueeLs9aQ9Bg zB20I8+alj6ViMUn1sd};F2(>^WV;+>ipZyX!n zuu#<-!Y3G1P-7TlN(xD#ybS1~2eV@)kGqXX}CqsO>k6VZH z?J8iQ1$RJEJS~wL6*u?I`3y1?gIk#{mAi{9PtuMjUxa~_FF*pOr2jlXp(hC=auO;y z32HW%vXFZjs2TK*Rufn5e*mK`hHl0%L{BJVp`2$>%{@Mb7)7c%tk#=DowUEWf~GwY zOVi?tW;bwz5nPTk`RZ1Yv}4i7SXu_%75j7VgNn0Y@>1t;#Zz3xbCOnhJaw|iJD1}S z%eFtT_yshW0}3!_ii!s0f(TvG!AB8j{<@Kc)-_Y%LSMil)BS*W-@-!Ydss3?!!+#0?NPz?J5A)z{36sH}#I+Y#Ux<}Bpq$3vfemQW-^ru;1UWW_!XN&<-|5MxLw=Z{?1NSa>dJSe$0hl8h7 z_rcI34=E@vMUO4!Qy?3W>ZHdBU;PLXD+{9qii$WtN&6cgaoZs83xp6-zCh2vCKrIG zR4Efr7Pp}YjCxScLCF~o&r7ngu}6}iM`tjIKBqsNEfp&{&BW1|i-a7hmia~CDEN#A zweLBf*k5e9#r(q+IsJmC?aPaV0?D=;v(CDR)!2N=G5oh>{KP9+oaq=WKu zw#j9V88M>WYIwXge&EoHp`K)Vz;@g$w0{P28^cJ0W}Kg-{ZHA*_cCN&H6wmOG*g_P zC#WqaeQeZ)MqZ#SbCfraWHu5&$1c%BJ^d00Z7aotzb6e$J1^1cc>v>c4LEpMs}2n! z&Wnb>j9Y7r>CH$NWnKmbnx+^akEUONwA6l?P$I3udG7#WYs%3P2hqSp4!tf(8oOZM z#|bj9e}=6HGuu{9rAf{BN1`8>X~*9^p|rjl=FOPD^6qRKOfQGB7V%4v34xSSGzFww zX-}c1rx1E%uiW<(!v#!*l`?h%ys*$GNzchO?0yJ4)O>j5qQlTdcqK(T&Xr#j?R9`R z9pb69aaB^GSIKoe_!X%Hlw858qTk~C@d)t#L0IxLBlp324n4e@7@9__FsnFs3MJ^t ztDAZnp!&8_D3@*g(%d}Qv_~y211+Fugn!lEggCteSkuR9pqO)ch1tzF?ggda{ziB3%zPGSmj4i^r`9en*0go;vY>x z;Z+G04cmNW_B%n;?E-n2*=O)1Me2$8<&jSYZRfxY;F5G2No9fKB{B(V^e}@U3rSHu zMh(PsP@1H&U)2)|?P0=Hfcb%$?_DooQsA8lj%>IHcIJ$Sn~yXSdSLvOgWD!B)Z)wF zG#bsNclziQp8#f<2xeeT_?Fq2ejF)^%EfCDvw=zkxQ=CTRnNmzP}6>mUyK|1r5Q`Z zK7nlx!P-QdL4PqH8QBl~=)L7A9KA8yRg1*oC`1&xA#khB>X>LN@*Kj+f(fMLDjC&GMilk=xuol3U7d@)erae&+s+I zZxxCZ-U7ja$IuCp*mdBtSB*l!Lm)}+hSmq8R%l?9Au6~|uM#RT^yXL!IzvlfB-&F$ ztHgK}#8Amm7t>pj+QjDrgBDm4W44>d0RwCk62-a!sDmaLrGr+Tr+ak7&=HmxDu*I( z5Y&iN*`VJh0RgiF0#=vN*_?Uk*$w(Mi70@!aq}@?G#a^3Knj)JrltMR)tS}=<0u=( z5i_CkEu!ep6%gbDN^}=ZpuC43c0AL}GA3OV1T$sN^`Vho_e7mz5Jy7xJuS+|Bx(r!V2 zo7Q818ftVAV54?80wN7vg;54>n6)ZO+yHNxB*82sO6@kF{5&ZX`OIm}Z93xiVAR$v zJg5$D+M;CBT8tm`<-sf6p)EM=4xrMu^Pu4I6t$F%$0+tL9uz#6qQ-TfQ~$`Z|LcPJ z+ddw8?;v;_iO&v5Db^MOKi?o8{JBEf1Gh0s{0I+fppX_&`7WUN!+B5v5wyukt^pXI z9L2#4BlY88QO;JE`$B8@R@d+pr;#-20WxK^4xZVY4(@vg+a_kt%RS4X7erT6=mlVM zZ`e}=(YgcLFth%}WK1uQZr!6-QQVhbBSsi7MuvY1HHg?n#8^@*(<0F7VH$?YB9jaO zE%G>k6!89$8R2+AF9bPi8iUJ@EDpWmumgcVn4j-e8h@XjTdvJFfA9oGnKtOk-1i*I z=a8x(g#rQU?0^)l>OQc_E#&D+`2nqmG9`;eYb{$N(l|4}HDNAywBsz(65 z(aLEciw4`^Wm+7ZWRb4?upz_W5L`J3Dl!)@<392>dPIyO>7O*z@V$Uxhfm3vTl6dK zJoMci;4iT+bSKw~x9-e`29IEs#9ZuDbn-MRET(rr5;9dCxgeB11O{{dtNzSGuU0~j zUGox9vhEuX>Ocv-myE|Kw?7<|%>QvP$9?-Z+}c{g==?JnL*$D-cnvrbSv;oG$)d-= z9NxEb@$ll0&7H@&j{=7;gXftt8wsNKk7;EFG1GfyJa|J3K@l{&lpx=7BZpGJXPXbl zpDCq}hU|_!-kk}?y9yp<#!c@GW}}g@PiRFXo&e9bnLOzEPw13E z5+DQOONUvt6eOS7;45a>Z(YpOC}WABBzH1bF9W6(%b0iqxs}m2*pKm&&OG?rW%O~@ z%qyKT>p{J6h$n5vfW7R;LoZoQ$k3xU9*F$wB$W2CwQN*$&%&aLM!=YD3Syi-C zGAf{dw^JMxfqdcw#kmu;WF_Dm5-5CQq9ANjp(*Kd=)KbTye_q%X-7eO4vC zR$45(8y@CUTL9+R+?Yy{Zb}oB<+83DEqMXcd%%`~NxwUjqTiFnOTTW~^Nu$V8*LK9 z6Gr$|iasKj7M-;E&!?c(^#TetrHY=6oT>m?b%%n&J5p-FUWlO^A5hR=RrDFQ`ZIv; zDWRZF&uBgUt=b+x{$KTsD8r<)NW&%0dcO*v+vUT`k(myYpHd71pA&3k^qii0M;)}? z;soh%5ZW*et@M&ZPc2HHbr&nU0%<4&FEewNRa2zpufPzTQwi=9*WvX0Ybbhn?@FE8 zd%OURQ5^+6RWB&d4WbH+dfY^zh?j&G&r}9CX?8COHG^S?S=QUv%~9A1lHzyv%#-hB zxWO#)4xRg4cKF$@3d(*-ujhZhgx(|Dko`+S56!Hm2bNndc=sP6T`3eGSAZO%o8BC zb~OP{T!~}X06gcnkvMH~_>yrYnjkm#CYa|qWD<2oT#ZI|8|YJnUTDiF*M;uEpGdEf zUKCn10<^D}g66$*8-l@8a%0ad~4!1J?UJZmvzeFI0MclqBb57+ez>fQwJ3h@te!ez%4h?DIt?hOm7$0fDqulT7~XVB9`y?H z1#NG`LQjJs)lL(Ne%c3m`6-dx>1_m3se-YY8B}KyMH=#9==i>Ed!##%t_4!&DZ!~J z6lwhjI%)@@4c~k-3OeZ{Z7eNY8%=3oAO@l_Q_sYi6zS2KBI17~`O)GlUOxo?rGuTB z@eqRUeI&+{*7e@#p0Wf8>fyA5>EuWx^@%>;n*RyJ()yR`E9euwtvG|BISVN$+eU;y z^`B^`w_{YhErrr(r&lWG?EpQ!go66E(`+I!^yM-NYP?)T3_We9*)(EQ@d^s1zEXte z0MoPsP#%sHYGVf>5B|a~MuD)Aw_@|7YHWO~ehT zx`Yq!_8u<*58y8YF}*$DfzEZnx=FQ@4h)S?6SQxEG5>)h7^Xpmw_s9LFP@YFam-{7+J-l#?QoB#P{N!K`H_7eRY<=${!#eDM^$ zNxX;%PnM$2ckUh}lr37%itrTUy6y7WI&Sy^d6M#>7oiY>=3q7Eq&X@fwucVEX+0p` zyYujGS>)M6pH~L~kd=te^bixsU>^ISaElh$-4cRN zX2PhIf;7jRm1WA&xX;84(ktGdL89|j7@&jFt3=qS@H6d|3XHm5jZrE{=nJj4@)v-P zYerMQ5c;GrcDe_Z@#pInfC-tqp%AqH3t>slxQp+o2xI|)Ggyczu~UZ#+WbL82@OII zB*WN%aY~m#J0sXEFlnuk$yd4(aNSo(|3)K3QQ%kl#`!je9EX!UfGD7&0-{2QQzwERyD-lD?&t1G<_$7dKTv7C-2i@WIe1 zD-Kiw$s8giE&ui+1R?!{lXK%jUN3I*_V)7o%ZH`FnqSNYimMiis-e;9?1|- z_!BB{km*mlM%C#jh$XcY?fFR|jOtxQp>$V?s&KDODluxV6NTElT2vM(4bV}fHvp(APYShm zfUd|pQa#bR6>=}$u`y>Kh0PpNVRUbRK2=_KQ1R&{@Uj?$9CNOiy^W$5|4pwMKY94N zWr49~LtyAIjHkboB3<(vtd0XW0RF-^dKU#O_agM9xABCGd_P< zt0-zXNGQ=G=Qa@Y<+q|Yd~E8jpUn?|*iRUsj1I!rZ%MJ(8EVryK^zBAgPChxzKf!s zucE4dtuJsUW4)1Ue>23&;J~$M80aY(^Uq{2dVLhKljQhaqj?&!qkC;=|g&haj}b0A3@+R%ZF5 zxA1RtPKZrauRd{_G5;E^By;)+mmJ1OSOUs~HVxHszIrraUq19W3L1}RNN_@$+Yqf4 zW>Y7_jBiXZ=;KE5(BBhgQx&)M!r;vd3ppt28H|YtK*MY}P&V=wVN<9mj5@NI2URIT zM@BbB?OjfxqD0wH7Pl16qHuVSmRThV_{^0YygKPi?sqJPU-~GxVp1LSU6ehF{2UYc zeFQ0jEypLmfkN34w5PZ)?uT;`*+h}14v}&mUc++CkYS>g9u%nno9+-l&qZo%wj3)Q z9b>a~@!MP~GVp`WZt%&4znDaC!Az(c#7Z`3T<(Jb+GzdILon{czu^L$-hoLK@l!zR dRw76Y7#QrPpzs246e<;COA0*a3P_`L2#SK_ zhrHh3z26`EJoC()={Ygy-BXy&wV26;udNP&BC)XGSXkBg&?I~|L=`?%_3{OAP(rb8w@OhY%Mzj3U@UnU*i zzd*%ys1!3EkW|e+LXenb3JgFvS0aOSCjyRM zqC>#{A#=D8JpaIL4Fvl?klzTw{}1d;LvUY#e=W)Hy9WO%N3S9NBlb!H4O#;m7a#rZ z2myy&QR}5aMi5B#6@Z5BKp}_QCjSv@3YZCvGI@L?3WT+Wj&+7HM~1# zWiveFFZlE0&J6v#_COr%9t9FuLv@6 zrw?Bp<0WZHX}zdc^wJ+=Pv9jzbwXt`NPPbcRrLDc*5mfrS>4;AFa2JQ`v+lszxjPG zJ9>%2&iGY9TlILxHlNx30Qt2?c2m=(^{Y5<+|tdahU2t!32T=54xck|18l`kFDm zPozj)a&WgB&zdTNZ2X3GcYTPc@60m@b>cK{vtPujZAQwg;o65Yd=IHTUMT9_kB1-H zR50WJB$+_1&|R*OI3-vVHI_AMp|;CnO`dtx$3PUn>$nMeZaCWYc3{k$XQml_yJvK_ z!7R^M{VQ@9r;;2UP9WF8*xtI&VHqau6MFJ^4ZCx!qIVC zcY9NOSNs>PBcb}c(}h8+5K^rXhVS!UmzNhur|(cLUf#dH#qxrTgWiePQnm`{B)rr| z&FutXx9%KA_%9|$Kb_;~Z54E-aY8>^Onv6nKjuX4C2{O(M6uT=o!S5XEyteT0XGh^ zc2M5$NOB*GE;Yfq!n;4%(qE;wn;?~XMdjP$1c=$R!+WpQQyobF)F z18t_E{Z%|zHF6-_asFkfwAGh!ni!-p&TZ3Be^Xe91!$~jg~$VQN71$WPkUlq2roXz zV-~V9NA;da64zlEBvgVvQ`)T$!e!1+{rf>jj<> zvYExB74tq+ddIx)Hssj{yOQMJLJj%Ky(7YB;2MWx=D^;&8XPprXjH*`&_gX9+vkTY zun=}6%~*au6*qNYXc|-EnUe4sg>(Nw{Ai+T;%i@nN9DVs!e<1|cE{2SpZDXfz7igP zO+9a33DFiR-Yha!C%0`z4!x=4y=#v@^%aJ16ncCS=4Ehpzx(07QE-=4d;@bDRl7Hn zE`P?xX3YkE4}@c3Vjm?VlbAp_5jHSH;MxAcJ;RpMr_|=|R(gt^IDZ9a^=`tQChGI{ z+fQob#Au^M@4zA{SIH_(?5ke8$L+n8q8$I^@C9OXx77G0md!Wa_AEz20_=idZ>BHP z^pBik@3`$co!vHFUJ^Nxkv*s4-|ggzt>t^3SoO;0771h4&gaz%)R)f>S}wYTckek~ zu!HZstUXU-q>U=Hvp3mV7sAIb80+wyk;iT;n~u{rpG&naR|WH^P3cexo=<8x zsVQ@+^4_NzeuMNrvGB_cFPP!xhM;EN-Ed`PPw|?er==_>2DQ34Z2R$y ztrM*B2@H|$$9IzbQDW}Tr;^?~@f>AYRPr6A78)MgIX68$FPUfU&*?hypRdgOXlOV4 z@EP9y1^X}bcUyo{u}Lt!ann0gs4ZHd>4$*l54ARY-cxVx zg-^@g&z~o|ti5#kc8+S)l;@ecE5Ic|HB*}O9;xY(KBT{PD2ha>dH6nefHvA>lPZtkvDphy17s;C61}`u!e;4ea-!~eKbXjH` z>RjX}q!(nqlqbAUjk{DsI6fP%v7X@N)N>YSI1BKg<)Jc4tMjZBHfxEm?C0a2OK59T z_DdSXy1^%ltD+->a>E+dF((o?nA@aLM6633>!|(FVArzD>6{Nj36kXU70WPR=5{{6 zWSYo}dpG*o;;lI??!BUl!%qcKDIYiTlEWC6)xlXF`k)WE9H_*3D3|SS6F>s$rcucpeDS!nXbrj%JFcsLL<2_B*O6SV1PLI}o zR#b9=we~5lz?0JC?QNXmfuw*3#{Coq!^(AUQ?;rr_-RCR5Rn<73OeB=%fag2I>Q*# zV_o~{6ucxHX$gPvtztncybanziwP@ydX@Z`3u|(Q);&~Yc7gqc<>C;3jeQAk?v{G+ z6JKTAcdv|$Kbya;BwX3SJC01!bLKXPm*;LAXZ+1tAGBCa#cmMabqA*x{`wo=l-XR@ zer2#3c0p#oeK3c~W;VUJrLbDBgf9kW6XiKX?BJTd5v29BLwrS-iv%s0YP8R>Q0zA^ zXKTaf9|}iphw-YPyc;@P9C$qR$|J2xy5N-e($q4FlPo)$sx~`J@w@doM>+3uE~EM@ zJ&p)b-Fi+bCH3S@juZm7Wr3CqEgs#r%U9M)S)XHjvEJS+!dO^E!>ywjhRBQxb$j@X zo~lMaHW*JRFQTtc2~1^-@V4hQ^f-*pY@>UG+eDp&BK1n9^&!~%P*2|%l71$|)hIMH zQ2)L6Ui< zF4N=o@GK4ZY_9(&>o<0~?n^z7^2rT}pm4Wo=Jy_3nyrrx?WRVx*|-~@yQD~$?s?un zMej9ex1$_sV*kq^dRZ$s7stFp z@qo)oxqkY2K?J5?z3$A8TBw? zcUnH?g^!be<}(hz0}B6e#&B`+iP(jK&`S#cG{zYe?eC3WjHX{hkEyH2wE9n79P7k~ zB78|+#B7I&1^Y8tXDhXU7Meu#j1Ep4G7U6?NXNOBpl5=3_ZynKJWc7IN@{ps&0MKROUCD zcUQmvH>zFeY0WnT@_>!(fRYMD>l5OIJb=ywCcj-}Ut67cnlmyQYU9fD%%^2Kf#rbK z@Sq7}5@&gH>M0qHhbM0dBuz|ZePp1-r)fA>qeEB%B~TH{f^us}LH)3&;`>v7;6wb? z!m3g4vsFprH*u|6Yo*L{!G#=_8PaAQ*|PQv+5c;i;eQ*}`cD!mK(px}MFjMrfwHW) z*DdNRwGiy-!UH#?ICcaSkVfYfTt)>jk1xx&(C5;U z`(@Y8*+t?%X|Ly#mj;Ju{TPg3`H3(of?;u!w}aI;f`QlqV|eQrGs` z#*4IXQ)${1DlXdw>g#>MTUC1UI{2q6s8|B0zE&sFLuiH1>q)S?;CpT-Saq);UNcU+ z^^*7iiK4jb{Q<4PSM5|WLg9Tg zuAt~pm_H3&(!sX@8Lj}hBph5g&DcYiy?W|`hKZlZHN~FN3G}rNg z{i@v-e#JoY_ph+!elzs;5x2jlHG@5X2W#Z}rQhJffsAh~uOsOJh~uA`>61|%Gq*xJ8|f2MLFeWq{xzSHfaDOa}J ztMQX`n=PRwYX)+9nj3c;!(n*M;j+}jJ7z%+tH~jU$&xmXl;3+)tF2TX>ZF?Bl0LX# z`b=D6gI}ENSEcuXz2(W++p*v!G6z}5lgQoM>ZxR9(f-RhEBqSEl3mURVU4IH^r~Z> zy1Rgnl~s>M;yFdSfzNKYT>x7$U7hBX!w)6T4Snlmn~YO8SoY`X-TOW2&iT?Y1UCXw zP{(&$HNSk5zj5T0R-|9@QcL&GXmmp1o2ryA4XH&O4HJ> z-re^3u-x_Vlgnm8Ti>_Q7I~a{eP~Z4ImVOb+`peeU?jd!!y>`q9CBge z^Gc5-uE8Jmiy{NtE8Jzd zN-mR$W>ls=LPv2vxrq2@F5sbJ5$#~i*!+le1N4E)1LS<@N0t17meq>9mZWy&L&9Vt zLPU{CEcG6l!jB1td>OZQ-2A)@G9@PBu#=`W9eA9=KAZmUhOjuDjE2VWi1NMQ4=dvO zA2Dm`Iy;XR{l8sb)ie7HhyWC&805id?vGa!q>EZ#_y<83W*k!J%aP(35#Ly_$o4Bq6 z6$XFV!qXp|a4jr+8Vi{wG3)!cYz$i%nWeU6rj)baZdW@yiNl4ThEP~U zh#Q5jy(2$UV9SM^Jb3S0jX5{b^7;Dg@SIa+;!YSRuMkw{N-s z^;G^nVF%M$UbnMB(_*<*Rg!}>iS$LkVS~HB*(Oz{Y*VkPyqB_AX3sO5h+J_d9Y0YZi&IOdp)>SbCFe^^qxyI>hy7MfDl@)Z{{8vKm=;QhjoUPaaccRpn%% zI6{AtX${ME$CA4FmJXtqc$-cu`w3k_Nom8aMLSp`Pr*&6DDb|(nSsU$N!#uG^ufDq z6qbNcgas{Qu(}sJPn_g-zvKgn{S&63#{14u>(SLE+6`;*8hf}&Ev0fD zqU0O_6Suxqgi9>CM;cb_o&^YKmax!1Q8ii!Qo~O-TvP6)&X@WzLO{x~n>L!gmlZQn zL^xc`uahVBX1ll8*KAQWzFcC^bBJq(W0dr>AE~e}IFMV&G;h&Gp*Q|e6I-QYb>hI{=RiSQiQkd-J&loJ=P$=XoJj>S3 zxhv`uGZ}SHx5)fWJr$?vUT})v%Q8EuUXMU|Z1rFBd$r!h+(yhIu|pLK;gP+jE({u@ zgQt7H?3-PPn|wDuZ&?TS>tRHsUeAe1{Fdz*TlryiT3q^6eZR=(IC&%|Q~zCvn!$v!tH`Q2Lj&YgsjsGVTmGuf#_qvSU6n^0jrZ#(=#x#j=ZnRQ;R zeIsl*7rG&r$36SgyCJd@O@qyS7kHhhrm)wz_qzH5X?_PepqDgLFKSY!M?XyX?)2jG z9khgBT9E7{k*rg+3>B>0nPYkphWWbY)({XOm&={+NT0Kc48nY!Sq-{~kwck*-Eo~f zf^$M=QA}*C#!2*uL;VxUkB%Rvq~lj`^PALP1qiL#fGF)D9=j(6I%02abOdv2DnI5{ zM*ZXw#w(Yg0dLX1(yd}?nOSMVuIat$U7dlU80q#J<>J^SS%_XIjSpzjEw<=k(8B*P z!Rtlrd3sB~@VP>(y6CSWlEKjzQ+FC^E?x!j1)wad@7wIq{V7ya`QEh_%BR}KefV6# z<|0mumZ$t?(KFV~S!}&Y4?aD!?_+Hh+Pv;cuR`o;^Z2)2UMCaYut{!u5hYBDGauV= z?iWPO{@P$6+QX6<@80oX(1}dVLl~b3|5s+ZxTsbZ>$dR}SJA#Fsq+e-SH$e7LwUa3 zuG*$Th5mYAHbOLSEP9^p!wD7L4;VZDc8IwNmLaJQ&ukLxNwD9-&#Mqscn$G+&qmg{t8pbY zoGT6pw0vn;(;i_vd_(bC0!hB56M6CC@!L%%ly)}0cO>+TX?})UP^?|lJ9CMT!9e>k z?CG!GK;wXnHD5B0Pwy@2PM~2M<~1^#u1lI)8N_AP;F326gsPts$jdYx&=%v% z&PgIdym9+m8y~+f*w6((FRZn*@TlTipV>ZyMAtUEFvfAFNt(IM`x!>d}FqiEkRV6*1j z9RJCzsy@g*td~7M=a>*9i};f_*-4y_1lmn$87B2e0~p#>ic(sdq}SB^q*$N^!(&TrLB_Q=$iJ_k z+9W^6Ff)(y;m}Y($yWRh0>;5FR~d9VokPE8EnzxiCTO3D53BE6R=oIn$~vS?ZbnBH zgTf@mc_*eWX*ulkh`p0=p=a}wx57KYgcp38RfI4I3K>H%b{Ba@M{HQRvX6Grfq1xuE5a>Wr6D+}NI$q@Uk`%`v)LYNHoi821%{i^%7P-p?f z$7f~AKMuCI^9K_Lwk>kC{4b%X()%)FUdEK@=k4JN=*v}{OLejfoR>eBIgFuG9TLq1 zA|3dAP|=AWXHx!TPRud9osNf>^9`CgA>A%`dm(5GGV^dh7i63TWKP9&;M7(4vOIyF z?9)EUaq3+!nFGanRy#W`tnGK7$ZDZer;tmW|9%ntd)c6qp`dwvqmaI4Nq7yM{u%{t z9ftp`gRe2oXJ^;94j2p=!~rF^VpIK8{aJJif`xSlj<(9eUW^wB==SwDbW9cnh!229s6kGEK)G9>d4S^<6X*+oJ7)(O0^Io4g;EEGg+-5rg^o)`-a=LB z&+3xO6G^Awz6`@w2)cD^1s@+#8}lIb5m~_;M;Vfusev>7^CF%Tv);Mdl6%C46j>nbk#Of z>F`m@!%d)~d@P@^?BJBl0Z7{ZsNKF@^6w39Dl;LP*<+ z2a9GaFXxt?P!nnKt>hA5 zw%RJtU}hT~bN{eBLoqqOu%rfW%wCVuM01>1^X##^=}KF1f$|0So#s50xam&X zKUbok{_avOo4^$UTaCy$`VEUlB2A;bqg%)GR54QIc)v;un(r*yG&k6E|3 z%M$-YmA_nwTg%kM-@lZrM}-)(Rg5kYcHcWRJYFQu!lIQ>vfag6)_3PCPa|T_mnj+7 zRp?ew9y1c+A)saG|BZ8^ZYz;QR_X~7RFaN0wQT202>e!5X+?G3jH8(9`m(w8RSV+F zpN-0a_T%D7-`d;_)-+^eYP&o5SS5eVKEFcgBF1(KekzOz_$eD!!VQ1L<({ESCB2=z zGZdy&Bo9-aP7JdbuTZ#~!Yzn{`oBLYUEi2u7~g@Ip@^&LtZEiAxMqpg=>~D5yhsfw z1D%pR2i%dxG~C=^j>HmmB4V{z19oK&vqUg*KtQ!*H`Semg|s7J@yP6f_MfgP-}sW- z>v_3{wC8&XqYv|NDo5U`)~8N(A9T-Uo-TO#Ec_a-xjb{h?x1)u`Wj5QH66q#A+qu+ zBGMh|;!ed*I9UJq({%9HPaC}mR7=+6BelIKso1Tk&T+o{Lh2MoGOm)P7h5D|R`F z^GT`_bkvh?GGwb<^=!M?emu&^b|36#U@OZ@IH+~d&QNNg~~X^6y_AN5r7v#l?S zB{SiRBr$f6Zl}pOdXbc-x%DWJ^FYa(VX=5xou0XO&-3E1pXIV<&r3v=aUDA=mzy^= zB2qpp&BgdGTm01FoMGj*7gW2={G0+S-jq%`pow)a@Cf3S3Fk3vUZr3~n^y)Yv>7Nq#CS^^Iwqt}I<#F(u^ed3gQn&Uzir<(ca4`X@SN zdM0SQH=4|`a$i!`sdI=&f7U^1GHSCkIzFl^x^nUQZ*&4Q&sM z?~rFaS9jpXrtA-?iRzmtTRdrgsd=YLnnMjgmZRKsfadC-9yIV}krsD&Wm|O}1Sl$)hcQ`5wf1*)iBaJry17wO<{4v>%Aj`dn&e zCrOtgMZcs7pDT$pFAZ0Vn6xoce5R9x@=k? z%4sRleSu9gRc@job0>}c`#s50+M~GcMCPf;;+`9@;jikDhszG2TA%c%4}!mh=sixd zJIM~se8Ov4$!=%*dFj`=NdY%afn_OfT8~LoGf!FrZ1%G7wGmGi1?tK>N$1M4Z_T#0 zwtCj~lM>ryu3q{SIbVcQDF=NyZ60@Nn8ag@7c3(GIy8%}OCsTHP$TndoF|iv)V?XfC`h z{Z2g=N|!=KdJ1Bwh7vxOE(##Rf`tNVSLwzZ05m%7C9GM)hXcX#mv2>EdqMbCcc$2t@j zI4g)6F%E|Ei70yBc(12<;dSg23-MEYwjasE=wd}czL;P4)duzSd%qmbW?L9X@L09F zF^dbqFNVNPux!3BL0|75*?xUS0pkl&=MS+z->IGkK9PlHJBT(qFD)ul{%V-lXmyAd zkD46|m8_+ib>VH|jAL*UA)TPe`P1JBGX1cOo_1?qof2`YpFEzA=#U~m6?!^)+$UT) zTC1q&{PUr4wf_!k@Q-(tiNC)n&kz1d`5Q=3g0Q+A9_89MgTIYT&CVG<%n)Fy!fBUF+K<>O$qHB4Gl4X8e?MtQmPKT9jd#U@|_J%f1;A+5^eq zF*11Js2ZPD@#?E=e%tx8HHpcN<$7-c>H9*NN`V454IdDm;r{nX{r3Z0;cvH06bN(p z0n`A3|2^SlW5U(YwSyp0lo(o0&^>u<)*JGwG+Ai!;PmtITA*SF!Qn=z#@*W0wU$7pulbkNsA}*; zhH_iFocwp2dqX{S{h;?^_y$6c)P9XG-+Pvt|6JB$&ESo17Icek=*z?Qh57o*^oe)T zp?6Cyq@)bjGzgzcx$dLLObMJGX+CmYgW~W=(aaKf)^gTfy!(Ug^pIX5FJ195>778q z#pgm2#Kxzh#CG2Fonpy%ZkFqb$KS1AG0&8FmlSc7PD9Tzk;FLs;MrSs^_>@CdLq?_ zLY>gH5{!F63%gfSzr(V)n!jn$x+3TPy6=X8?VrhzHx1|HE9!JPs8X)=ya>fj4H6ep z+{ve)*ol>}8Ro5%VL~#ARx;kIx42|R+%dSuxtBlY6_S21){~yt4WC--O0IsaWY+&# zzx8Ttpt-`h59zR;=@FT(+?rEgZTb95msw@X%^j6*{%3*z|G`A{xS#y#Z7>$r(AD|= z_SM;5c@#v8zWfNHg29mCUjkatbi*J;6dk2;pCTlow&3gQcvcBRs+f_t9Vxt&KhozP zkG@#Wf0VK39Xze2d3syI!kS9^ptIbwdt__pztmg0i zzb!Z2v6+vhiF?f{+Z-{5Tllc-$Wj|8C1{0VjEBD{rI_;xYsg?<^Lr=3Z(TQkMQOaw zh?!J%K^pOpISp7-_6Vpo<1vP>gbBQ{AaOky&`aQb7%-bYP_pn4Hb?lFmvRT;Lrb?+ zt1)dX$PWs&Sbjmx^7(cC&6zo{}OpL@RXcdI29g%RB{IkDhbL@J1 zj_N_?WQc_1DP+ZOXD@%Kx6f;%SST6maG6?|HJWB~`C;6!PR;PSe2I+Kfs(1%ovBxM zT=5*aB{KqIEnd{U?^phOw=~{aYMPw&C6nZmw4VR1ngq&T)-N)TVGoZB1D~r_vPSEY zjM-y_^1n8~b4^>`lw!tv9F{Sk!Q2NI8gPwUW(oMJ%D~FD*}uPf85i9=r#e^g*@Z@L zBf*c+QpW${fBt6sx9R;d4mwBv{VI?7G7o}-u3O2~1rQ7e8~*p-^B9ITkUQiWo3ROM z1sY7l@1T!BgURw6^c#NNVA5ZL*nk#N4Fb-&9#^^z2P3bEdnDkGKp)zE3)}?smtKtE zcA)zdV+LPfU#k%31jhi>K5p=H#5J#>DA*KeQqMSEJCQz3onoam^Dc- z8O`;;b3?EjE%Dz)?D36TXBAgZ8{#Oiu-MVTF<^R3?lW)~V2f2CSQ^kFWNPI^sE?E&ipxb0prAJAIUeE`=0(C83Y51_IPgEztWfBh&jYo1ZR znv$QjEc9zNC^h;KIg|u#2Z6r19>)TOssOgQ;6VR#w}XUM z0(vP4p|=3ZlH|}>K<|eeP#M4$R zt1j+d)!9!d+BpzRg?>m5CB?AwK>t-+A|KS3#v)bVW+X7F~rIhK*iY#HK>a zbs{M-?`oiJz`(#dC@rv3W@DhYaITp<+M(?LHMkQR3aG<*5B&zYTEMRyL~{&6cdrYE zdI?XxCE7Fy$A}aDaS2%QO|uaP{2dE}DP%s?x56Autbduxl8uEhc8imIbD{9zV9% z^%{ZxD1i;Q_*N2I22gh)jr|jV4&|^}fDGPL!F~wLF_bR0F_6nI2H0{yvTmAVrvgD~ zc!r%12BL>a_r$gZyajn{MX#K9p6E>bx2q zj{x#`ZJf=>)iwB)szG3M1Um?Dp6n}&qCGVh)^iDpP zcrslD=_T~v5#>rXTFw!MgBi7li2{5`N7x0BA6z%s4zQD+_`$dUDtjPo2#Dq}3U-A1 zuhg02U_n5EzsiLD`v|c25;g#gY|Vycs$QQHjn-jffE>;(*e}R+IF2OlM;Bh@*#?d# z`~jm!-3^vo>c zyyyBCv@dvYJOH~%0zUvenzFBLSDg_~2DQJrLIKI&)vu!%b{7UmT1I z-LZ}&#W)DV|CK_qD7*#`VV=Z_k0F~q{5$A+UzoMs;CHpfCImSR{|ySx&!VAY#|Io@E9N%)uV6{Ky&vexF^tLNG-t)fo&yi z13nIDv)_Sl0@@4@;mg-j8YK`GfRG$0LIP+aW{D7u07D8Hf*JX*&UWb#selP#w-EgR zq;(rn3^;nkj>rUEA0R|igIPwe&WvOrbiyqJCAx_d@%5jGF)jr9S}WQ?3~_c{`}X39 zUw|x2Nkk&h{QZ(b7y+hhDI?T?0A#5k)Uf}Fp}L3ochuk3MqITqe-lTik0AJW-oV%x zAwB?-1n(pI0sae9gbwJsw#xPutK`5HUa=KGq@*uW{&}x~q&_ z9i=e-^@u*eHRVP`4gjq+A^xq^xGjhz{Hq}S?WHIB5H*0n@P5Q8uoxJBkgrm_YAxG| z(FaWk3Und_mk84^fVhXaUh%AMXMuD{u&|aG(b|mw8H!<_ymIhL=HDRqtRd!ra2IYN z2Cn~Pk8$~pxDEP8A2>p|UC$o0EEGBU*I+aSHu4+*V90Lx-vj20B zG&S*L<`@m>3!zikR3-tp$}Kz4zE7dcw6?NNJ*)6#-^eH2C@hdJOjODz6m)p_`O9f# z_n$N0ODvbTDoXutmi?CZyJI5SA`Bw#Dw~W;K8BOW;KLg2F;K+<9&Xo9sHe#Fc+q?1 zMcYlCA7Nfaxe2l5Q%O9EXI*t+C_UkpZKT@KmYGbR@td55qoT4S+Ecq%i^rGLqEfR| zdvs}bk4?St(z@JzTPR)JQ%oJDr}Z#C>S97lo6>wcLwq3&o(@Mh6(@^Ohm%%6N6{(U z&j$G%jZAjcmpyjUBYuh99$lI4U~$asq)_~^UNrTwny-K5gZpwAdpRK!14?miWb5~& z-M6r6PlX4T{WmUJ6;p`{(49mjHU*<9@$4@P@3LBjEuV|lqVsOz!}ay|hzrGJZa<>K z4a1AQ8`oPJcG0}w$(g$T(2_3d8Dp36j*4p0D|!WqC7W8MSK}$aZUmPjfAOtZzov-( z-@CTISEaiI(Vn`IFmKVA!geR z)yp3mG~w}PkQ(ZFOD(@PTX*)z^GI!^$V`}f`H$ZpW_zZEr4WmfeN;+sU_dFC>e7o@ zrL2X0g~gSMrk&efS1(v}49Bq&9t<9U%l*5qo-$N4mn`Gmq3pX152XB}X*Q5lx%TtZ zXU$tex|eSvXqwAb(j#V@6-^9;=X#~_@8dc2%iCl~^k(37tN3do-lQih=iq!<(i!s=!#Hi=DcsCShgCIV;-W~6RKTi4s zd?v3B1FDMlFN)&GPOS1YXe8kg3|}nF%GK2AQ@T8*zdatC(vkR-H;Q1RiG0+@+S5cp zJe5WOiz6Uu*{Q+M=Z)XfO5VKX5!65|E4LPK!!B-zXvO^u$^0At&W>asdx>&}SnSVl zR6I+T3E#l+vuwOtwJ?2B*d1g#M-jB zo%P-IU5hL#;1ZM<{G1k#i_&<2F|;mNjesME(pW@WSetb8;hT1vw|0p9eZCsMt0XVR;VgoU$11ix%dpL5ltMOGf1dNJ#E&EUl{i&dBep>2gm*fE z>kc(pa&6PD%JSVuJjKk6J2U5QB=MQa8o#n>&DcGN!mAe@N>G&SEuoJnCEVUWukqdf zelYcw$;ocktL;%oku+5{^gV2grLLdKm^kBYNlUarC1U8ouASx0^p0`V&aSSfuTStw zu6dPJsmKQ~?qww_pNE}Bdt^?WCv&i6qv!mK`med3lrEj0KJ0$_G95Im!s-&r%h%og zd~|T4?iF^U;UyAvARc^AO`3p%qQv$kJ4lpY@#EVagMxx)pl2+U9%!yvhOoj%m*@$p|Jrz zOc&BC&m~@kZA^FbhU<-^DDEExM|PV%^h`JDld;|C^fZ5x-JqOE3Z(ksygjq{-%mb& zw-HZ#Bq6YMMG+wJf%9$#5fTbOxgh=DIzK1*kjw`9U$REHV zCE5_l3vBYO#z-67>xNcBWU8(b&1r>{Kxtk5Gw33nqDETFv^MHh&|Usw7Fv>pTTD=4 zesKqfMy{qznMr&0qOJm;nl9qMk!h5?P5(s9ADNAtB&HUzDsCI!dx0*ehx5bcpA9sR_`5i{l;PT_8124otU%7}2{rxf@ zwxaif`n2C^J)?fC)qE5}*B`Yf#~HMiInhaz9B#IYZmXR@;0PVunn%LEjz^k{iZXymOX9<%DOv|B1y5Zo{kX(57=S z&?1wSweg-4UxUzbR-d|>x;kJe>Dp3E-Z(~}Oup9aoX9A?&i)NmEM{yxPR@1@pZRKb zl|$Bh&0p4m947rYhuK0y@oySeLm5~@{)e9Q@-9f9rh8fi^>h|mBiwegpRCuoXU0TE|ZiuMq z6PXln{JqG3`zsqc?P%reBMlxd33rxXTJzgWU)C^MIc!hrZ9~()LGrd2?`y_*rnM~^ zI?_ABXq**qR%XYK=Z?-3q`-?pK4cWqIN|L>3lDDWB6MQix>!`bN=oDhwLGcI$^)BN{bsj4&=q1 zn!BW75vGRDZlH9Lhe)UvnC7;?uiQe_dZDwuePYF|d|TP2&gb_{Y2BeIdaT*2%p)=R zdh5XxC%zo)ANyuzV}P3DV8^ko{GZczugul{=Ru)V__kHG{w-~1o4-9;R2wL|ml(FEAIee| z83(SPIJR0QHoSLeeNEsDucHe?r5pTJ=g&s`#CVg%%S6__0-r1tokDDsbLd!-VA0KL5 zV5w-M<&ub{Y85mw3@O0YZ%;QmCmJL@roYdA9s29>OEPnEr1ke7XW35a5K3UAH zba%1%*(ZL_sP_6S*Q&Ln3{syIZ%SyoJ-PCWX2zifPS>x`_BNSmusE~#kFvQwD(@VO zp4ct@m9oOQb-vTEEd`M!Gpe^uka=L@qNTp`c}RS2wRM4f|LW51W-`(h1q&?wmR^4S zI_*NHM*7=kcV6Jo{P@rP%7=csp}uTXoJY@LtkEJIf;&M?ny6pkH4q7>Y-54 z>77!V-^p$9Wj`&FUPX?GTk((FWk(}3wcii&W_ZkAD=%Mp`QTCewm;l+U?;xov|jnJ zBG!UkJW~mj?h9*^i+8U?*6pd=IWxpnHRLBR*5>P~b6Vx6-ei=N$o$Gyohz;Po7Xw8 z?cwl{#~SBz{OfBj*T3|ye|Y@HjR5|p9oq!;Ys$@63g+g;di2TldKnH6EoAIh-ueg4 z7F8D*9B&=J*4k|E&yy2A?g?V0-383#&cz1{GOnI=p!xYDqC`i*tx$}asnxNg#k=b|(1&l7ICyA`kg=g5p}2lAgbX#F%) z)K4;Bf68Rgx1W(~WSbmREu~exIZwYg{JO+Alsb%Z2Z_PO_w>DsQ**l8+D9Zk{~p z{M3q0)5bn34~A&lK3-D0te?}#j_`&vW0HL*tG=3CbZyVdB}ek2bmj;KI&2SV(c`w| zTGp>*w*(Y6%m1d+uMaV zhxyK&USRK~tM%o@uALJ#oL7w5^xC7MfZACev82(}NF=;^Z@M|P^x%fT!UVm^x{Yfl zt%<+pu||IKq|In$XodgHA4k1zDJT0V4W}NuZZ@8gG)imXui5`De4m%#t!MFKp8NQN z7Z>dReEqdsSiN3K)LVy%>XSa}-`^EJ$!VUR;7;B3scy&oiXDxoy^5#OLdraoc8Od* zH(k(c{*qU;tNBLw#iAL{woI$a`5f4H>57g|e?L8`wux+a5^Sh*yLMb{bIHaK@9JxI zxt?;4KR0MUm=b>BS5#w)>DtHNl@i}4QU4XnZ_+&x8DDUE=ZN!{9_EaV_XzEn7%v*M zbaG_QtFZZB9X-$huW!r0iTwZWxwlf3>9nQX$@q)9Y3=;7-)gy27XL0b({}l|%hDq+ zP~ptNQOo(!>2HkxTxdI#JY=VKQp517)E7pzqFG@c1(ix}1szJWTKV5|dsXYtGZ_B( zo~e6w!l)r(N8W0!_B`eq+NhTCZ>F+nw~yTv{+!yik=y&ITweO?(bLWcW6s^(-854E z$WY;gb?F(GBepJWw$XKUc5|_nx!+<=(n3~3j$A;lSVKJ^+m-1Xs30x3=k1^Y{? zq2sX>#n2PWfPPO3wSAV-RdjXcNviT;V;K$rv0kV90P>_!@F8h^4v4p}Xh~~nwDzsE zE~+YHHPR(*lt$wm<|Lrme(ez=mDCe#~Q=X%rwsonj1k#lfcG-%p;U56nIB8*DeX!4I|L$d}_|Zob zcmo{G{!)YQ$i__J^+SRCDUm)twDEA!xON6Ot0A~XET4o#YOtO#=7iKhWS$P3cupE4 z@_zXfIHQ15Y#8QLP>lI4)JEAmD0&+f<>N#ftAeU_Py=XDxA6WG44_{tfq$@x%>Gh? zomFGTDC?mW4NP_LcQ4an;#&k~8E|cg{iOz{tD#jpDPw%XgW`8W0b#IHz7q<-R3HX_bpEM7Mit=mQQr$rO6=u)?sv97(5 z<1WVD(c{{JOrT^Juvd#ya>jQ2ZIuDEy@Nt=#e*C0J~Y(>Q%|cA>fv5IRjh?B zbigtP`(`NA4hrQ~`H>c8A3@6t_JBNGETL;*xrZ_&S~1n%kWjt!c{*&}u42S(0707e zQ2L~95kR#VOsIAdRA0IVcV_J2>w?p^K(GgL%nlzyST~#T)Wxc?l25}3Qf)yTLMwXX zx^R^;bWN_Hg`03iqcFP)8o!t7MYA5LjlJOwL5h%_I=z7J&w5>4<*g!sUm$>_>a0sCgL`cfa%U+ur-mC zp#knb`W@}pTL{MEE@Ti}4cti9%wc$oBB_3~`WCF>_FS55Ce}PT3dp?|&}0>~H42g& zcjnQUykj{JEn33ULDQNk5nZ4{zupa}p~D^mj?(88_-Qo{-CxNwp!1vd($K9Ji_O48 zyMdA0?L1qL?Ds*pgA4N82LTzo6YbqcnbGyU4g|i(ZXO!4m#2Yd?&2xaD(T`SPAu0` z1eJ54!|Tf_e&#+}zz{jdGfwxFYF=~=e8araW4WRKNkD}V)H;W#RZrc7u; zJ0_e;LF)UdL9`j$9hKycLUO%;6z|Py!9JdwhCKH(Vp02{)!-ekyF9o*`2A6Sl9ejf30vBz2AgO}j_L_oNX#BMmi(H^f z$bk>~atql6m&{n9QUvo%JO%uSpuSoZ3u&RKt~tc#rcVA|@J}^#MMj+Rd#hsp;dJ!) z2bvl;LR|1SxchOqnhY?P8oGao>Fyg2L0M`22(@=SGfK~m2kJ5-Lfsn=!$0=!6--?Y zmyNK71%o6N(JyF#bd{;Y0DUzh(AdLNZ<;y}Q$t1*YGfBR15;m*B~-Z2tWER&!qh=? z2o-K13(&|T%;4*M1faxq-5|KxERW1iFhPm)$}4REGd&=!M{~?Q5XcHCp+f;MM_*OK z2u&RN?!6ymnlOkBE5`ufvy~L$R&mXB8 z0;LGx_@6ssZH;Ax6j9JYNf}y*E-L&eD4m$V;?n5mQA(W-K?R0BCKIUjg`^ZxJjOWC z^cX|OpJdS2QNco5 zXhkxUt|_;Vh1!Ce^Uzswol*6Y<(Ee_RS@pow;7=cVdij`6K<#pdI~Lj)lJB|4utem zm>e-rfl3Ul?}o2Vp)_cFE}UJbo&_C!<0J`*{;V~)x72E2`9-KWjcK@5SQRCYlF}%( zI1yhF^-g698I%f$j#3vQK-!9Y`TvPxeCo%6{oop7*uMD{{o}K(eV+ z^-V2wf6u{muG^bUyGoQsf;5W0fQL-rfrX@+1x7T`!ZgZ|wsrD9DNRw3ecwTeDaY1D zLour*odGpicGO5r&__BaC_S2LeFCTgOH9>6n@=#_h{DwE(=b&X6~G@fZ!Mo`0` z6}~(;#uO@m=L6jQ7`l$|4?M*<-RTq*owR{ax56KE_ZE+-d$tg2&}P04sS6J3#kkRh zt}yc1z>J4G{dM0-_+57JHIeOU#JP>( z5y36u_!?s4q*Y~Z3Bkjc;h#C{3Y`44M+pDm1ilJ7e1=k^oiTEc-!NV1`Y*$%&yC2a zqbxre+UaPEGN9<=DFm{~pa#+&@y1l^ES4&d>@uMgJRzW^?qfXQEWv+gFk^vMCQ#>H zBvj{2W;pi2)S5g(O~_=DH6K$&`Gne<$t<-#OD>&o0ft5y7_|&J)}FYH~9F?qYJ2_K}gwrVQw^X9Qfz%Ydk;!X%12f8Nr9hU75Q zZqFQ$_4-9*-8=Y(;&vf^qyo9lG1fy06!uWIT-SW4hUEC+c{<=Q#udSADT2ZP7_`-u&Op=WV9~f&p*$&@S9}C-7shf zrBMHooC@XY6V{u0QcB`g@z|+_j%vVb3`SUR_z(2O{HAE%1!hh$sMoz*d=vLFbUfUN z*|&a})q&1?>LOGt)|kk;!5=hrEvD+56Y5|yn1nBEWV}7p?cDO=Fu&Od0UN}rLH-cT zKY*Uq&~47*5@@lSfT`-p>k>0}*@LNplL+;39wmnY9Hhunf-bub<4>Kt;X1iYuVa-9 zkhM!UXzVm8rMRn1)eLnCD)9?|;gAU2$;vXfZZeN^nS^h`>Q>BRApshgM`_ZDay7|% z{!|#XE=)Ll?1BIW*!jlPIp20ZQ@e21Niw zmwjRVfnEYAcMJ5=1{@DBTgLLsqPojWpeLBr+_?Z|OM%(kR+QyS^T%C-xx8n*p7@2yOjX*BQTMT?cK;ZQ|!nt4h}Lp(Y+sZoma!OT)HliO(jW}vnkl$m(lO*gSs zH$c_d90J|U29ME8Y&?>@K6di?U1 z`;YX6t@jx)vEa^F&phhJ&nsj`L)}79wdfszTnk~YfLAJ8G4*miE1-rt;UPaNE@X1? z!?Mh+czX618XR{9W6{70_2x{c@vKh#BCh8+b*hOKQ$z4Z4yOK5Oj(!i{<|?30&s_t zkQl~^;=|@{LN&LUr3L$%4%!!YW99jmZv61Tj_i@ly92hq{N4>pzQc@gS248gFAJ&u zKkG~Jqr09?H`@7LXakHeA(V$|c71N({)I~i1MOt1-&e0j#cbVeo|cwHbp@G z7;$pveBn&M$9bg_KZbCzI0oD@(TND1h0(&z<5f4`ul&6#sxRqjkBbds1n0?70>f#C5bIk?)3skTLg zTKtHapS5D@^b$fH{FvFcoBkN6K930%o^g^xt}INgeacdW==)~;Smb*GjAdSKy z0lDTyKPUVyPnb1Q(#e21x50CJ!E;F{W#*{&| zBI`&o8_KBuu;Yz8_6AI^dyDC6^#5rif>)yI$f}%a&y&jmPk+zFg($kbYl4Jv%?~~C zNtKia?PjH?fdBo`6QA{z=~4YKUf0nb?~qnP8E^}MsbMj2@S`PU(EcCNePV586zJiY zR&MYNgvaY3{r_My1YVhvt)xz`OOle{Vm#C5_V?Q?G3x+y^%>IzR$>KD#uBRTb7lj< z_Bl{<>*8rRQ-a9cN4~UuOhfb1*Jz<$nc)jsdOme9ZV#+LqYhznAHf`{R^cW zsbI96t^h5Ywqd9*8njJD(CwB7$va*paHIzi4!cUm^PZTxA&5{DD=Bp*2YzGvzk5+q zHDsw-6*JLxtpe(|ctWi`DkF=+t0+}EPKg+@O6UevR52Objv={YEF_NvZ=f5-R~6i2 z43hUl<~)HBuRo_-O|2*VTkGL*a75R%>+nlZwW$F^I;iX=bAm2@yxa3|b4@d0h3CBF zu>IAy6UnNO36U_j)#nsA{WD=*4XkwHlwVcb`5z?C0bu72DJdwinzE+Nu7iq5-u;0^ zwUI^*Gg6w?0ClcBYO4Y7<aa9DI(Q6W|PCD4)8g1 zy5WoKy6TQ0g>V)k3(QJPT@k@j6_EBT#t-JN0CG$tkY1Xsy7=hwb&`pB2V}O!;-339 zE7J*o-YaG;nmRZo_dUewFa(3Uy_8%=ST~o+s)~>3qQ(|mJ3vxhf>zp(6XViy!aw&l zq$cj9x4ec5{_~trGcXmOX_jEB<_kh?`A=3TPT2M4n*#oY0n-KM8r=NZP{Hy`BbPVK zsey@;#N0hFw=!DPvo1z;g#S;itg^U+{qqKj{wzYu?;xLszh#zvE^mR#Qz6vQw@go; zh^gPy2=%|Wls28V;wRfZy;Xvg-ccjzv~_w1qLSKJR0{>df6&w;m}=3RQ0;olDWKYS zO#jl1p-x=_Dd+)Y*#(Vz4^VPn0&RTHR09qEdV3Z)Y6{FOxIx>9a^5r5_=rV&nWD2G zh4ky0F~YVUs0kKCVTOeqg#zoDYD8gZ$_N6@A0fv*FTmaX;QIBEc){oaJqmYg==vxk zRyqpq%b9*)G+KQCjeeE{3bX{n0=u9n47uA8$lFd%9y#u1r0Ot~Ii5h*$IHQrwF?^Z z5ukGu2(L=qqZ;0h_|toTnVebtDKNrD8tU#*LvyxPiRHIK!)2gZnzQtM{Z!|6}W&# zCq!`r*wX$Ff&Mly*{F>#9yZPb|*zdVDUZ$-#FL>8HQwF9wYlq9>oI zK4{fKId$aH1ZChRxUdPJHXi~VYGS4o1`WfEu0kJe1KZZz^!dGtu-dH#ud{Q3acja2 zF~1q`a|e>&>lywHkVwv-m{R9{f>JxS6UZh&PMKcq>fu$NX>sjCQ}F#3*t6g|sSQ2; zM3L>Ip_f`k1<=2^!WeDL@%*B2tW+P_H#5z2K{FJ!Jc<-`CQ43`P9wS~Uv=Y58%R`F zSXFS7bq#vb%p6N8w1E7N!$jV(g~HFN@kBBK==`dqa>(MCoG~(Kr9^c5zhHZ-GZZ|b z3ZCFzqC1TgTAAI2F|8oG{FEHJc1o^4+6J<8ydyB#J_B~FZ$cZn-b(eNZ|?*ijl1>? z(nbf;hFi_!*JxgCq;OrX7wX-{=o!=odama)nCT6OlwTJXfHB{jG^UTPb&(%n^2-Nu zXh?~i1=9M=+*=y(TCedQ_<0!knY-8Q{g~!8LcX6V4Z510L#I!-0#AO0ucqm9ViNF- z=G8$rJ~R83PZYOr)q_@}uH17h{ZR`SeVOAq-7nyJ*AM6@{5QJsK~4wde_>1v0urx3 zO8COuek#R(E2EEHe`|jQd%pdZLs?Sr6$96=R9`weQGprXB_XjqAvD~}pYCY?SIU$Q z!%dLo#i5s9sWEitv3Gl)tX6PB{U~aW^a)Set>BTNy>9_?@YY&3EuYr2!UIMSkCzBO;Fx76l7I z^j{F=`g(^kVbwMfD3C2A+^EE#b?8}??jXW1`-4(5Alq`<8!GzD5W)3rW-|r)^c@4*JwCsn9`k0Qalc?_jh-#gAxF{J&<7YAFo%U?klb%( za%lP+pwDx=L4)VRWo&%mjMf^3afkT?-?~7chAMwE&_@hC@gb1@A7&jB_H6jV_t2Tz z!hFeywU@qS;LEbYm(l((^K;LgT8~bEi6StO+xgo26aLaa%(Sq72%AO{lRf?0O7yi$xKc@ zVlB@53040uyI|V>7w8ucV!8_cUF2>2bRcmK z1YunE0*mX?P2dTpp1eq?a=9R&Bq=1`(~|_KG?zdwl0tpxZt$X{*XDU=d?5m>A!uCJ zdEG(#C57tfBQVne5b;5U+C4(G>x=?eIZU;b5qg1!s-h>s=0TV&kL z!S`$b$M+rIke#$p1GWATKp3T=BDl0`(xBWAt`AWdk`|J?Cdx8Eb>Op98RRS@By%`_ zTh-j%kVZH^_1Sd7Y40F~`Fo>886nwZ#ve3U4-UkaT(~m{ku+g#hH~g{pTJi)6p*s4 zP@PwVp2!IMqp7k&6?&)I8-F$d6eL0C!c{U$z$%eLslZPgbVU}bo+j)D{gM^-r&a9_ z^S*oq>VpRbZeN!R%Mx65sE-`FssQJyTjUrAh0B4ydr&zRf1pJ5LNB}UMvOmH>V}&N zguUsiI12!Jrp!XJC_(_y!(DtLhH55bs4uFU0;^cI^}LiFF)j;w<4-V#bC2TgI%9rY zx{Wpa$K6f?mt2P)h`X&*2=imC_09~a=9I%sn|!s>UichruLc<#PT2BhVtx&jJ&S_z zP1w~agiyhTSuCW0TIN74=?5HmzD<8e0QCI^Uz&3C&4i0QBH;jZMFE>i(1B~ijv9CTmh;1` zMo3{TxTy+M({XN)2RA;4JD~~y4OS463wO^({YaY*1LZR diff --git a/src/main/javassist/ClassPoolTail.java b/src/main/javassist/ClassPoolTail.java index ea148308..3e77f250 100644 --- a/src/main/javassist/ClassPoolTail.java +++ b/src/main/javassist/ClassPoolTail.java @@ -245,8 +245,7 @@ final class ClassPoolTail { } else { ClassLoader cl = Thread.currentThread().getContextClassLoader(); - appendClassPath(new LoaderClassPath(cl)); - return appendClassPath(new ModuleClassPath()); + return appendClassPath(new LoaderClassPath(cl, true)); } } diff --git a/src/main/javassist/CtClass.java b/src/main/javassist/CtClass.java index 716b459b..162ce48f 100644 --- a/src/main/javassist/CtClass.java +++ b/src/main/javassist/CtClass.java @@ -69,7 +69,7 @@ public abstract class CtClass { /** * The version number of this release. */ - public static final String version = "3.21.0-java9"; + public static final String version = "3.21.0-java9beta2"; /** * Prints the version number and the copyright notice. diff --git a/src/main/javassist/LoaderClassPath.java b/src/main/javassist/LoaderClassPath.java index d516323e..daf43c20 100644 --- a/src/main/javassist/LoaderClassPath.java +++ b/src/main/javassist/LoaderClassPath.java @@ -47,11 +47,40 @@ import java.lang.ref.WeakReference; public class LoaderClassPath implements ClassPath { private WeakReference clref; + /** + * If true, this search path implicitly includes + * a {@code ModuleClassPath} as a fallback. + * For backward compatibility, this field is set to true + * if the JVM is Java 9 or later. It can be false in + * Java 9 but the behavior of {@code LoadClassPath} will + * be different from its behavior in Java 8 or older. + * + *

This field must be false if the JVM is Java 8 or older. + * + * @since 3.21 + */ + public static boolean fallbackOnModuleClassPath + = javassist.bytecode.ClassFile.MAJOR_VERSION >= javassist.bytecode.ClassFile.JAVA_9; + + private static ModuleClassPath moduleClassPath = null; + + private boolean doFallback; + /** * Creates a search path representing a class loader. */ public LoaderClassPath(ClassLoader cl) { + this(cl, fallbackOnModuleClassPath); + } + + LoaderClassPath(ClassLoader cl, boolean fallback) { clref = new WeakReference(cl); + doFallback = fallback; + if (fallback) + synchronized (LoaderClassPath.class) { + if (moduleClassPath == null) + moduleClassPath = new ModuleClassPath(); + } } public String toString() { @@ -67,13 +96,18 @@ public class LoaderClassPath implements ClassPath { * This method calls getResourceAsStream(String) * on the class loader. */ - public InputStream openClassfile(String classname) { + public InputStream openClassfile(String classname) throws NotFoundException { String cname = classname.replace('.', '/') + ".class"; ClassLoader cl = (ClassLoader)clref.get(); if (cl == null) return null; // not found - else - return cl.getResourceAsStream(cname); + else { + InputStream is = cl.getResourceAsStream(cname); + if (is == null && doFallback) + return moduleClassPath.openClassfile(classname); + else + return is; + } } /** @@ -88,8 +122,13 @@ public class LoaderClassPath implements ClassPath { ClassLoader cl = (ClassLoader)clref.get(); if (cl == null) return null; // not found - else - return cl.getResource(cname); + else { + URL url = cl.getResource(cname); + if (url == null && doFallback) + return moduleClassPath.find(classname); + else + return url; + } } /** diff --git a/src/main/javassist/ModuleClassPath.java b/src/main/javassist/ModuleClassPath.java index c41161f8..20f0e430 100644 --- a/src/main/javassist/ModuleClassPath.java +++ b/src/main/javassist/ModuleClassPath.java @@ -32,6 +32,7 @@ import java.util.Set; * @see ClassPool#appendClassPath(ClassPath) * @see LoaderClassPath * @see ClassClassPath + * @see 3.21 */ public class ModuleClassPath implements ClassPath { private HashMap packages = new HashMap(); diff --git a/src/test/javassist/JvstTest5.java b/src/test/javassist/JvstTest5.java index c1c10d9b..41b640c7 100644 --- a/src/test/javassist/JvstTest5.java +++ b/src/test/javassist/JvstTest5.java @@ -235,4 +235,11 @@ public class JvstTest5 extends JvstTestRoot { Object obj = make(ctClass.getName()); assertEquals(1, invoke(obj, "run")); } + + public void testLoaderClassPath() throws Exception { + ClassPool cp = new ClassPool(); + cp.appendClassPath(new LoaderClassPath(new Loader())); + assertNotNull(cp.get(Object.class.getName())); + assertNotNull(cp.get(this.getClass().getName())); + } } -- 2.39.5