From 8ef7ced59b6fb15832febbaeb5b59826bdd3d1c7 Mon Sep 17 00:00:00 2001 From: zapata Date: Sat, 22 Nov 2003 05:09:21 +0000 Subject: [PATCH] fixes + preliminary html tagsoup support in the tal template engine --- lib/README.txt | 6 +- lib/tagsoup-0.8-zapmod.jar | Bin 0 -> 82962 bytes source/mir/generator/tal/TALTemplate.java | 21 +- source/mir/generator/tal/TALTemplateParser.java | 18 +- source/mir/generator/tal/TALTest.java | 11 +- source/mir/util/XMLReader.java | 824 +++++++++++++----------- 6 files changed, 451 insertions(+), 429 deletions(-) create mode 100755 lib/tagsoup-0.8-zapmod.jar diff --git a/lib/README.txt b/lib/README.txt index a1c58aae..a49f9bf8 100755 --- a/lib/README.txt +++ b/lib/README.txt @@ -183,4 +183,8 @@ url : description: Extracted from struts 1.0 todo : update - +velocity +------------------------------------------------ +version : 1.3.1 +url : http://jakarta.apache.org/velocity +description: template engine diff --git a/lib/tagsoup-0.8-zapmod.jar b/lib/tagsoup-0.8-zapmod.jar new file mode 100755 index 0000000000000000000000000000000000000000..bbf18dd3023d0b4353b36c5934962cbb4c52372a GIT binary patch literal 82962 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%0DJaNdbvep`dw5b&v;d8oN-lG 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

f27ZAJnn|ebN<3f1b?RN_EFP z))4DO=OM3Jsb3^$DnIZA1lCJ80iXg%UwOL{WLoJMTJMIytH zyGeOt0rY95zcJT=AkuKjCpXxE}7uBO`Bh1DiMA#b8AI)EIYZp-EDumb`W4sKpDbs9zQl?vZjuD znu|3CYLD;G?gE7X&#}TZt8%&vqPw4p$CRpx@!{zoj%z*t1StJE^u`e5wa5C0hV&0& zX=UQ8D3|wT|49`D9Rp;d@_kp5GR`%_%;zGN2((|0K6lnW1P*@9e*A0LxB3;@p?|tw zMCE{zIBU~y{d?r6VSEr2GOBl`kmkY-e`84~2$9qo2?zkjoU+Zadx=}N>PF%w(+vm0 z-Y&}v_l*kVbSK@X!`atm2Y*n#Hzd~aWV2PMATQO%lg1x|o7YBtr|wRj>!xbrvaJ1I z;$Fal-3G@k*7XdPp6giN0BUcA_hAp>gAypMXx>?+6xoB~2wAlfhjF^Y5)N#Ut9HAX z_k~+``}CZ(3y&ug7!d%rh^yC0_xd2^(qf_X%1Yk`2m?YSPL~L;Ebg_0F^S{uM0z zXCFiT|Ix?%tLfEWU5ul`rgb_Ug7=X3Aa|1@*qWBSqM_!z(AiuFf}*R#1mXsuP?IQ% zq#j1+xZPx~& zA7ksbXt@4LI$A*YeFn>^GdI9@q(En85dnk$QB_f*@k=8d#5 z-on%`avc^E(qcxLsm!~{q9ShY>0Mol;$Ge#4AZJc2va2HSNHV*xGcqEB5I@LKv&)F zN%*A=53&#<6}k_=LPtmy#FBFvI8}qStZ*ccRAS)x``>7q85T${V!u>*%-PTg+gcIf z3mxEaFQ6)+V#IX&{oSM@;}3r~apa$3i@<@lZZ)7~>PW9jRiGYfTf@nE2ju=r1y&TH zN;EEQWkxMNAx~mJ9$RRwMNQvzg?s27l-c0KN|FxH@H$xyO%I_ypPobn(z|;QHl`SS zRsZfDA+ngJ`w9;b5g#iH4Q(o)>?EIibK1jeuq}^8W03*REk**G^4K}V-gQ7xGk1dt zQ;tyT$&O!J;x4*6>i6?)`xoRvpfa&<$F)G3->S?qyCWZPqrK;!(19i)Q`+vYkp@$B zKT6u#vzEw#!ZW!AvZIr^qJ!AB=0Qh3PbIW;W|MofU;2`GHm8|Fe2^i7M1rtfC;TnW zmaAwSwC7{Mya)bH7oj4Pj>T_mJ^A0T^?#qd}WlQUI z7KAVA&oKUO2{;_rP3306&L5_*1)@frRClpSCh6q@ZN!Na>fgyCELW`v-Jt0sfapp) z&F##UWyH9G6X2Uk&bD(u(g51%54&Ei=qRzj3UjgyiQBklt`xT+We+EGd4W9d0Y|3D zJ49@f1+Cw>qJ%c7s>6^?0b4jWcqQOuQyIs;tOJijy8uU_Op?ep<6F20)WR*8%C( z+z>QmvhJZzD?WsT@9OX9R5>^w-_p7WZ2uI0y^j7rvG{wm@<`teDb)d9gyAaq{sNCu z$6nQ!U!3UvGT1$`7VF6bEj3oKI590x`rs|%WDU1)+LLKgDBvKo7 zB@Rkkfzk-24J9?C=f*Rs^0*S7JBf=D9}d6*+XpOl@T6*B>A)FDRZkdVZ%Qdko*5zF zhsGy3)@?MRv-}>*o9u^>0w}($d~z8m+Re3%Y6R^TKR7T0QsM-{P|{QhKRQIgK1JD? zv134HCj^5vc)c2Cpbo%{A9^#9ipr35M^*6#-ZWsS-ze?vL{TH$;(Ib5$-B=Ru)U$- zY7@rL4Ajos2yafwSq_*MS7K+2Ms3s(N$6=B9YH(UR;IF<&{acGKcDHN5QP&GFhGQ|C?u(r>Wv)>-;IV8d4ovd_=cyi%Nv7O6|2f0J*bxdSe0NG)6HUUv5lzbk zTLR9y=U1efL($vGQVKgY>KX>c;6iouejmTtD8rU-M^8F!eOLMi#uUA|XGz``E-)6$ zP;64ihMi~BiWl19%p3$CnQc2Z=;}q}{syW`;0M!CRU++e>n6R8u09T?5*LYaMXmR* z9z=a@>o_eJ7@JN;KNV${cXyYc3K>;q$xPL9y|r|Dpt)>%Y>6{37$DtPk=FoPNqlFf zkN&HaiZ*w{2Z7G34uHjn)fK!JxVmHsL6M>@k$fHIS4Jg8%I&K{JKWDBVPmicW#}%& zuCnr{kFPU0LC)VT@jc2@r+=4^I<~dfBy6k$)>Ok4k5>aU?Nk_9A*bO(L;$wo+Kpiy zFs&+s=<~)_b<(H-7MIKXmeDn-cd)Wi1x${Z!$n< zoN4zA7(VG18YtXUZ~#*m$&(x?ENzbrltt!bclY19_AWfblghNa z${tzS?u`)R+@~SPRG}#aA4G7Qq^_iQ#>g)Zp~QgR9C6+oGSSx|at_m^y%yZ;g=_S4 zMZeiNLT7G@I~6rs;e#T2Aq7a+a(g|CTU5uB4d*u8q}k4Pz^B>cghis_?+=q7 zGT2UIz!0?IOdoPlgdbLSSr8@u#Dh%E4;R2Q;g2f{#eR0XzQqIaGVB&+vkcoiR5B<9 za4p9DO30bM{TqJ9(SE5{`o5;0zP+6P&lvQdSM^^u%zwep|LqC=f4!>zw$JT7!*`kmI5JeBAA8n(1@inRga^J5pU<)`LmU}dMK|@@i6Ca zXy=@@&BdO{*CG#Up+E@u=UUL}xAhN{^+cLy-(Q(PpY*dl%j+5i0?ng^0esdI@gs*Y zaBTr11~KC*sHDp0b2)6lgyF>;!3x7>_CMHNl#FU8dM}7EQj0-N^OK`lpKoN17|tsE8pHB*_M)hH8x12W%x-Dl%YgDrIZv#EcnZpswv*5?p<+Z`2F>Av1iY zL`Ot0>bSr=$-3y%+q+VVO@uG?`!U>6+T(YP-O`dCQ-Bvuy8U; z`K_CT@)}a>6hDV7!@&wMOH+#K{LH03D3Ty01`6FhC;V`5$M5?%0_>Vf9)Fd5q2t%9 zpLe0cFGMYz^URZB$V&>Jz?l(>yE!y-eT7s#@}}mY?E?>hs6yYJTr>k+ZWd4J-}Jzw zp}GDwoowUW-O;Y8Nx+c^{q^u@p8fevw?avQc-KHTvGtH-R1z2-8JEIGvb5)uTohU}4}WzE>zRPwnP)*-WL?i4U=qogc6x8UvA^VWSR* z1ch;}G@`@Ga-v*A%rj3tu}}y33ih)LgZx;Q-`);Cv93)F8Da?`OazJbLQ>U{K~5T; z*j|@tl+srH#b>vle(nCQ!L7&A3-xoP>EIEzjrpDnq+*}Zbv=fPV{4T5ppHa~Dn9I! zvqAYraZ>UIA`x|XB4YZ|$Z0^UR<4Aa)p#{Fz?`qXyi3n82Rq0$@&-sg+~u}FXL6X= zWM$2SU>X$Dl(+p@qyfp^kg* zGD1Ty0yKV2fJ2=~c17QMeI}t0C?Y|e7p;)qlY^52QOR`c%Zh=CAt}WR!vYoszm&5O zmZHpOK+mDQVga8T)Ey-^HY9b(W^v4JdN-=pSzRBsZ#kYyb95khA4%$2X-VZ$@}Sr% zls1L8YL52a6E-EmB00la4&ms+fxP+HK8p}l|AH$JLHp(@~&s-iTFUE$zrPyJz1MJIL6;T1`)=|=b#oo}LTpCnMU zik71i=tW-ArBzGOZAxMbW0_)HXqN-DE0Yt-R1&l?Y$ngUBJ)pNJQS3vty~Q#vmI(H z=FAT`ub&e&2VK6%GLEt?cnrDe-p3gBVBj|*btKsY z+j9pw-UoN^?pH>neM zY9|;sl3)EKT&*XrRa1$ti(htz;`#gL$hU^ykk!|Fb>@-qFHgk9{pns7fYg*gH5c6T zVxn%XcaAl65Ik6qIAwYAb--7oShR#U8b>U#{8<$JcLhjF^FK~7jbGg(D>ld5i&_>9 zb25)mDsr_1vQ@2Y`(@0gQt{LXyvcS@cmW?o_th%RQMlf*OIt1*lFhfp19`WlZ*&8q znBoG=j&HfCid0RhJ=sQ92Tdy-2}e0&HPyg{FJ&0oaRcFcWVr#no0@scMI(2MpYVO(3s>rq7nE*d!!EoRU@e{;fpC;dJs$ceEz(wO z4aKT8^$q$JfV5oyym^1kMy$QN@;&A3JBN0;Uz&4Qtp@;YdSCq+D7xxhPz1)-WTMeS zWi?Tq60#V=X4Rn^URnCItY#)@kY)VQdy%a4N0d1cyyLReHopoOkCIb*{~q4(LTC8G zaPChG|M2KNQR^(_CryY|kwn^;XwNn+dj2higgfqzaB#HamTd;JALa682_~*Iv6}3e zY{09&^kvfB#h<^Kmab&os6^kR&!q2BdOc==F=?(2 zDyT=30QnARL4m|eVJ1gC=9e{nv!XK`=S)n=NEqBlc1%SNvq=`Dk;e5=X z1*66qzbEaLG#cT&+L_o(3S~LU~JOf}y^$E~#QTsAzpx+1t4mhj8u)Fm_+T;pqAr@vr?^GUX<#S`oZFL=Yybi4&(F5X=ZCU#2@qzD+N9&Ap;yUdubLxsi`R2hr&ky%f}AU%Qd@xH zq}8%SwC#TN&Bm+cueqI{5l31Ppl_*h-e1th1!4{QB-j!TU4CDFNJFd0m237>YT=C8 zDr)~RI@LfL#n|3%-$tqGKlxKch+sdGup(B*iE+7ckF0biZoqN@iqbS+Mc#=|ldX%h z8H6p#Cz+Z^(J}KRsbi%@e@k>ZY29oR)KLbcy+;Ndg*CLjDx!6k5F98jFGq_xsd#F0 z!d5NrlbB@iD`B2mf01c_x*(NOPK=92ytvbHvsUKP*x7uXcG&kTm|I-ox}_Y_Zj-O* zIhRSc6N5wkrN@yAy9A~k-|C|E2KC6s8~(l!^yX)X(l)rBuAspAK0rr3ppq5>OpiO& z4~AQOi@oJ7qmVx)$lalvnXKRLH6fM9Rp2}Is5z|0@E*0GT>cZ=Yjj>1FS!&3R?ODF zB$jCJR3y1>@H%D|el=sc?WDVurwYF>MDz8lOnwd#f7`=gF&Jl2kEkf)5 zjqlbPIbGQGt82O|AhEif(6^ERfl)w{5euZm39#s@osbV)T zaW*=GLR_0G0xP2W)cAVU3{5TK<0exoKfS`>yUkP6u0ox}!DY~I8dGD7U_AczoB9?73Y#c!`;hyL7+vq9iFn2|3g&Jrd`BWbF9O} z0Rx&PT)6iI@U>@!5X-iAj>4D%y&j}+_uE8?nR6czU2Ehme4XxQ)ph5de0KtPmMu== zHDptaN5nRa14abg2@6=C7Iv?s-v!{_Z__rmhtb>|bD*YI&sXA1D=ZBfZ93Kpf5B5H zH~FXlPXAihl=0fvRTrt=!%@V#l14iXZQYKcx9U3b1ty8uk(8MQi#3@+kCzxzVxN7* z916-m#SkIrBB@@mZ#cZhml|MV>oKUBwmNvC(`9!8Mxb9GSX{<-~g*kg6| zTe3fmiZE?1$Mc8uRsito!0qP`hYy!iL8&uIq>y|m)Pf-dHE$Q^EaZWycnc87E92aF zm*=UT&&uyD+tWy?Mz@y(QN^_(_)g;3uzSqtxd2z{M=O3WIwU|ED&H0V5nX+mx5t}F zSKtoRq46JSBe`@^^b=)7JV#z>K5Lx|2SG}h2;o0~o};<({S4S)KPc`!6d(k(Y;E#N zhMK(r(36HNCgcHL9Q2fT3gFkp~I%~pscwcMfJ?&H~ zrxaJp7xy?A3hgu>XR^N^t`|Harv0Q81C@1RjSSz8dPHzQ{k90bMSh93y~59Zp7Vyn z6^pBIz<+?sH2vNdxxp9eFH83K%kSlVJe7esZG&lgy0!tAz&7AXTEXlRN2N^Hq-rx#ENg>JJ(RM_*mn&IYG2?d^VgP^SS z(sr*`-1F@^P}=kHvOdwubUYLj@3?t-L(;uOqJ`0^91fwn^WLQ;?-mmu_8Y+qP}H(zb2ewoz%@w!JH@O53)rKfjKS_|MJhzBqR~-rK!m zVb1xCv87xd5AwWhw+gTr9HfcxQBBSR%HuGJF!ucDpy=vt)VO@EM-8{I8^@5tZY=$53Xu zuD=4y7*=F!d6#U{KnLMCsz9T_zYP4}cgIQgG{xOzWi?@Vry})rV+V;zH z^^d~F(#~j~1TT>@;#;yCn@L~wmROeaM_KJBFloNGE-`LyD3}+3z4nx@?0dPSvI7-c zrlv!4QBAk1DlV zX<}0pD}xs_>=v@G8V33tCopAr-IW8EWCrL-^!PrjX#!luPyg>eTyEa!dX85hajpy!-^nuP2y zw%~|b!&#$Ip?%pVZ>VY2b)9^d=F(+a>1Ir@XSXIa2HeK=A&SY+Plf{x>Jkl9=}+5W zN*GMOjIbJZZPc6w-M^sPB$?*MyOnvXCjqy@mOa2I=Bnwa+U6wo zF%3n5*5I&LdMOO_+Ii|PZrCNPbi(A{YPMCH^^eT_?)6z`Z!18udS;UAQeSSh)8ogk zY;8}um)7sqOz`A65vpM<^Tp##k$9f#03i&IM`id0?Yx;sbQ3Xh8A zS1J_EII&T_|E$2S6;6{89O{(^2n6vNLUtI53b2lXw#&HS4LI|eR`x?_(EI5zPJRA- zbz{bN1bD0cO=|@DDA=@Nx9659L%dKEc0vpKuCdBzqz&YPQX$>~o5it@OXCaz^i%4Q zD=7?`ZQ%l!cy8NurXya-%gZ<1gdC&i3O-LQMYHp{FPgtYyxGi|R}pcsu8*+ZS65K_ z6aH<&ID36>r7Bo`yCwBb#f4p+IlTw-#h<5`YHN|3Il1Sl0YnP7q5`{E{DE)Iyv{>& zIhi|lUZGt8V|W@n^d`*qzAM%m&|H->m+VGdSyi|7@Zl58@hIiKm20`%?g+Ox{GGJ+ zc~&x^^VfYKf9h_#PVFF>5GO#LZG|&uehy$ zV%O4)s4;II2V)XsX!3Ru5KyMoG%I=r#c8S?u2(h!oVLx{;9^ABor{-YcdnhH?AgvU zJbSqcRb-^{13#!3G2(u`brKJu^`FQa)V&|eK3%p&c!tU|$UUR+uNM=1oB|cv$&9Nr z`$Qs|?6r*eATKFf@!~ZL3gQZx(6=8%G)(aUH7&j4m2^_bLtQRI_nubndk}{2?5E74 zI0@s+&QZY&@EL9Y0V^Ia^>qqD7>EUzM3n@Qan9Qe>fv`?C@!gY$|+>@UGB zCH~$Hc4gI9LvvnvVm|5;{#&TG$)XQ2C=N%Ap%1mcuG>12+o+d(2ZbSrji3aS0SD|z z5cYfn))<8+sH(28_S|lZ`I$gnIjQg_gJ<8Iz6^7mS6zH!qwHNKEU&3x1yg-UH}f$9 z-46>9Z7bNiAxfNz9FNB3+Fyv`4>1?pX;6|{f#k{ZrE05P4nja@VXkbu09iRB6V1c$ zQCT%by*?uKV$`R`OjaJEhHdcY7gkB=2-#QPwLFie8t)QX2ny*jZ>T^0kR&6NQh@Lq z$6U&RL&&of=2Y&N>ICzG)JfeK$17E4j=aZ(OF*;(`XAosj~M*vtOks*#tRLZ(ibzL z)>@d%$0!V^QR(&pLW`S(VxJ=iqHL~%OxBn)@9!^;BkD`%V>8FWw(E>JG*GO85^s8el&lm$=B?bra+mW6j&xJTm{6!|hI7{*cDOGFL$PT$~b?vpv&i`!L^1S#1Zk6XX3#S|0Y6Y7q3r@Sm5GqCGxMh zRF7^oRab^@okc!040!0`veKV8t zwoSh_Y3tuJ#YwZ=m*(_+4nwf#eMwL?EGBww{3sCh9{$=)z6JG$b?TQMiLnm&BUmFaaiOsKYReOB>}IY+^Htlgk0 zQITWRqBs04i12EveDyb&-LH-3+VC=nnP<{X9-TM?=|W{Ol@Kc_l)*I{DaKz&Gi7y?&{6D_<|J&a5pT|p$uC@IJ zcjD)jzR&?c&Mx7$=rcWQ>7lm!b-A$lxN!H`#quXMZpGR z$Vy*_(6&piL4yH5wevCuk9o#JHkH@>_m{TfY=V>Ik&CNx>*CYWblivjgi4_fRHvGe z^Z;hXgsHPUn72Iscq(Z#VNgl89jJbD?7|YFRxwWr;W_i+1Vo9rUmcwixkM7v9AiW6 zqS0A&JVx6A2~B!FSBDh_m;5M~yoMr+@ZsDUkL$2fmr8abJ3#%Jhx7qfa#8kVYKX4JLPMV~ran&o&+$1m(+o@FBFSUw< z!2<&Gd-=3BXXc(4;V-71-dw%OzV5U^S+()J#vfYbt!s*Ng(kP`ze3Lha%#9d^JM~l z$nc^<(Y zdZk1Ym4Cm7M8C47vy{n~k#(D`v5G2OBG$6LFKY@>tuv1ih6(Mdoa%eJ#8sB6+aD&h zl@4v`<~=ugG(Qh)o|Zd}p!Dxdq*omroela5Qd!C2(J%Kt35_3jO}O*Uz+f`iZ6w#b zS38S5C%7*~sYEnMJ!vl2w!E5}T2yBbXmpuQUl!dGZ+v*Dt}Poj|EbcQ-+Zc-SPQ>v z*cQ6ezi-tO*TmMTdbHs16wH{8-(`MSTSq^9s|Ib4p;EY#$jbT1&INx~eG`LqJ^MYp zwLNRg1xK}c`c7r4p;9j)6Zz&yP_P!ts$6+hP7DcX7P@6ON@>wdDO;K+mp2-3n=aiO ziH-*?u0M&7vn)AX0&UZFFx^e~GpE^S_C`KdQ82@ui3j<1PMNmr^}Wqd|CtK@dai0a zxX){vQNL$68&bs>ZZlE8A_$9av|-gq-Ts(g9TJyUM3mF-SoHJzy1&@_xG*a1HPs7c zqeUk!K6scpU!BrPbyUzK9^W(kbb6apsqgfY%JXq7>Gk#Td)t-=Wx7I%ffo_z$&H2j*c-}j&S%5Pys>2G!!iy6rJpFo3KF;X{gcYj2GQ%qrR$mD z^SP7?=S^;JlRR=XT_{69sJqEwCueq?b8niaDA3M}rQGj(OVqv1F00w?gsJjI-b}(c z^Qwn`c3iYDs(vxX9^~jgmhfv>F51O;$Q?gDW28iW=+2PhTk#}+JO!z8pA9h_8rri_&~ZR3 zZ~YW4bleo*6rB{yYdjMr`!cMQc%BBmsI=wn$Mq(6ILki{3&tjQCiEGd*BKtKka)>= z9M`}zN{(Z_vaJCa7{-R@SaN7?02gx&UpO%Lf%WGK5U*RVb}c%Y@qUaa`PIZEeUCxo zc}2ZTCPAlPmrxyop&EUd)a?;>vM*1rSCzHzj>`Ad>2WtI3PxELT{g2xiEwB`cHKWy zF^lIHlSzRx^W4PkBVJC`TZr3LnhAt;Rc$YW`LtMcpwzT1@ahRa?zt^`(hqa=G}{PeB5Y-JJr*jnfHU@g4K(gW$aGje3`-I zL-VLSK@!%0N*VYz?JnZw1En5NMKSGqHRoOFu(Iz54?a|CKV6GGH z?46mEgL=;GtmarEpg7A0B4zE=RU9U&yU&nLA^;tN)}?tg0Z`1jWw+N zlNSakD*%d0;zh-*9FXruDrQdr-g{R3gahM++gZcKq}F;30X3MTvfP5u$JGXno9tQT z`g}2#9cV2JbB)?7!qe$(I?O#kc(jd3d>%0OIfOK^QP=t6oyM&j%JiBo2g>$dypIqv zaW)luD-_tmoEc73LcZ}!vvFi})FSHhb<6_Ap*eY;K__;Xg5-MVsQjWS3F7YdT=tN| zNkYSz;#{PdgoWkro8EOrRE_POV51`^d~{Y^R*9U>iMCEKVdg76JlMPrk$4R*oQ6iO zhrzWs8VAN7R8pHeA}M?2OpI05Wx30ex+2Y!#B}dWQ=g<+5S?@7{NvvJ$6fqtsE=l| z=ht82zM%6MwVbw2?>a9c70)=qalw^fRx3^KmSQe_wAmZ}&nTr!oM^x1%Ugwu-uGw= zfBgtyw+K>mZl>X^3%eMqI@QhMS!r#!6I&iQga-QOtA=u&)4KF5gQ-vY&{f&4v5PP&S|lOqM!|9F7kV_3iB12A z+OeUQ7_fa06h7ObN+7Er-HA0su?XsSC^F4IJK(wyAn^5zAl&{V;Z?DLOmVM@DV@zQ z6a)D*cix*DgacLxyPu*7w$EJs3;{Op8@}u8^Ab0l8U<-<6r#YA?j6p1MUN+gQyVbL z(x1QPqEUNu3z#Fs($+$M1$XaTCVha>HI^UDRJ~Q%i!32`jwDVA9}-7Vg*_cog4b*C5EMIV7K~C>uKi7|$x$ zpM_nr*qR{o_FiL#qwesnopO>@eY}csenjwh)av#@BkU0R5UIm(E)w7NLE>$YEMOy| zgZX~~CvRxXUxX*vDVuGAg(q%8Q+HwL)=Bw4MPjG^jSk(4fWZyXt=kE+v#s0|pM>LW z)&)k0tsSFrwp$isI($$53PI5zh)qnsP0kDM@~Ilt9Km-QVE9-8FD)OtO@B^Wgw4>~bs)V5=8)=rx0Q>}yRX;25~+8zwsNI03u*Xsxi=0ce|D&v+Fi zgX=&m))i)J*rgjQSaj`XfcfuR2S7Q~3M|~kDl2$2-)}9ORkzy1oE~$EeZ*9uk%2cx zu|TgS+;F5@#EIl01AOr~z$rOSbi*YZ^vdyX(j$6&ls*c8|Gr?@-R}a{BMc_5X1G#+)57=D9T_L+iwsiLhYMhfVnl{8Qf7$v1HuG`3z$KR zk7FFmU(h#)(^QYy7bwK(6n_`I2N>4#+5Q#+!?u(p1;2EZMAdngCS7Qih3%zC=RCo~ zj@qg-%%QB_rN*p3%BMU4jolC@LHIW+!g>c8`};Vbs0NdEo07l_IywlOJQ_$_I2u@6 zFIw1{SE*@3mY*{Oz=KiI-F1EEEWhC zC>A&?dNFT_x>aw5$_XIxj*A5@nn^>a-xpU{`b6tpuKP0Pp6J?Ue@*+gc6S%R{XC2` z&8C%IyLzU#+U3*W+$C;kMA2{~JIPV*hJiU&74u&GbO#~{`O0ot@`jvX=atVvdarj_ z|A8Mo{6ghh>e0=DdEXToRJwZjf`eOzWCs=ck9v10!;HLS*J4zlgyDU3v;^Js(t|(x0jm#% z&O?Xq&YhQehdXrW!|!^eC zo6P!KJh@;YbTZTQ3Um6ymr|C=K@#NM|_L-W^tIt;*2c`d!tuBssC{k_4#lkUePq${p(+IpJPfbk!3FG@K4+CA(Q$wE~G7VeJdTMeBo!)9=_(Jt9FQ?@aTV_W{< z3ZlhFH2Vx4PuL^*0=EtDbAn0#p}B((MB|79>4N=O8xD-d`E+l;=^)LvH&Tx2ve z#CS(1y()VWTcfcw7vTwnsLIzL%;y}N>SBdWc4G>3`o`4?!otay6L!;LdWmF1VwqP~ zTD{u=b*bCJ8i(lxQg6LLVJCt1gt)AgtREaTdQGnaq^QGahw&wXRwoD|*~ywxrzP~> zG5|QsYEmc{cJ3{#cNyy(Di?Tw>P0TF?OUFdH~<3rS50GxNgouitg(HC}l=Qw(|3vzU>SWhCDiulMyub z$S90UP~d7D7=X>seiFo#Fl(Mw$QXvIMmA%~30rv zl^gph{Z0Ch;mnsh=Dop)?pN1McLA2m1NOrD9f@r&x zkYcfGJ-@0@?X1{B-y1RK#sg3`08RbxO24ntiL=9uMo~eKa2Q2bS{?_}LLZj^=Ds&u zR?=tWN&Q{AR-bOnc#!Q>%NaP6gPscSGuR;4`KKmnYM62xnOXU=zz3bR7ULVdKz0TE zKcgl8=xMb-@UB{2t!?2pcC9(GzW8>kTi2Q{2@`Z|4@0AGvXFmE5O4$O&;-vrx@RFqOo z+;oa~v*M6RV9{A4Z@-JU&2qJJsAuqSvzeIR-~4Kb$=04F;2{s#@#TAY52E=B*UxYu z`E>l2*EX*&5x9b(SbKf^b1@B{fks7@c0fM1l9?EC4B8A;mu>koR2qz;n|Em0{j})kl1X#^3?4oc6C@uFJZ^3*D?TiCwHKhu4L7Q!KhBWt!DZ}}))y9S{G z)0{6TM&3&B&OJ6Ub)EMKAaL@#l-mJ`pZPUlNX=2aBm` zNiXl~BG&vp*r}eM!4d1#2Bz6?^z;VXSo!YE=)b+%(bu=#yS+_6WMzK6+2zi&-8BPN zAX@{feRoYF+kF-SqQ-ANmFoRz|DV|nr^K1WQq*6+9PMig1H*<95AUa1dv~~kp7(8@ALCYn7AYrq~@5ZRH};s zIdnv3AZU`>*uAPj#B3n)Lgxy?B&2xvA9O-!ghHSsB5b9MHv7ASFGsjFYPkmVzER2@ zqMc`iFbQK}>rWO2vx(UQOD0=#8v$E3x=A`n8%7Vt4xhbdW!5jj*J0sUX1uW zziS!2q5g2Z&>NG)w|l~HG(`Fw>OU;@EG`&R`nk8iUd|G z{|31GjtBoOZJR;m)VEB&*ZG}-Z&V{sZoa|lVPct#rPQfEDQJdagD05;UzY4R^gbk> zpqUq2pc#Awi*x|HlNTi~8SVvivNr6nB0ii@Tt^h0qTAjG<6$zsftFl6-IsaMo`eD!F&6s20iY#GV1;8|q$apk6<^S6$Q(y(6x4v6`4Dsurzn zWZh7WH24AqT;2D$CmM4kxHP9%&dE< zrMN9iXyUL3@?Ra7&Aont>fHqdRr0N+;VbomOYF zRfd**uXEKhMwlDSjYEw}RdX*(wztJhhDU;_-F8*+^N0H%CJY25IsY|1$PXk2^{2V=e;=i! z`kzNB|9=_Ke|DB3^=)Ttj{n+O_QRc6;pN^i&rbiLQcQBPgXxT*+!4BPD>!GUE)d7x{q=&J4MQGBhatX9S*uu6B1QQ#Sh7mm(wY2`{H)ZXPDjN`$d0+a|Bc{u{nv5wp=nq55syzg4yq%a~8yiI{)x`8MZ`Wo-$DzT&xWwF8!9T?PxoF>#u!&Bi)Q|ox0jZXvHEgu$ zG;+C5ag+4;qmf38w59fXtkAE`G1@3BiQWd&j$UXr#F4SUnujz;M4MI#5E&S`L>A6L z-lmKk_e1u^3KB&I9Z4tSh5{zBdE-HyovZB}m9DA@oISirg=uqS1g%jMYQs=Q92}is zazpZ?AwX;(g_U%9Mg$(iFMS&W1 zMSs*nX1TaO_ze}fI}t2!qMBD=Y9ooZ|9yf46&af8>x)e!v@cKKnj04$lIev~04Z^r z_soRFuJR#6IxA?QkaKZ{peKE%sK`c@FIq-(r+)8qb$Qb}2P5bG3r_FNCnah8kyB(M zr{l7_mcyAfZyndjx&Z8bqwZ{qU^Z*!9Mu=8p0pXximTIm^g49-tQb3^%S}W$bIws+ zy?u^3R(#&jebs)uXJRh&m9HuO$-jpke{ev|bPQpG43`fuXW79%%odQLeWnXefd8Zw z-^wUzZ;=Z=yF1&}9M%X@!z5gr&Izyu(@ROtpSXAvFFF#01P^XjchkZ$3b{Tx!TM_Y_vnc!2P*v9!Y(~*`a+;&=V9@4%FeYwVO zaosvGpVn#di)V>Aq3v1|SGg-WFe<0syU*AG+X;(m3ca9RuK*z!?h9pIh*)FnE9srt z$Jvor3~`ZikV1Wss)TF$A)C@j^6-{XRklkYr3@VZlID5;bYtO)&+tBxYeYq}q~~J2 z1itTF*ouFG6Wwnq!c?WPaz#HT!nTF}T;0bT3V$9P`(Oq|gaPe7xslhmoATK!>$8xy z3RF6KA11V=!+)#+#WBtGBZSy6{vH`srVjW7j}&{M_l&R>e+Mjqd!O3!-j1<(?ti=w9MDS^vj|j~n8V ze9y&G+rVy{_{!*0MK#T9+bWgY>;FpB+H!EaM*hUKj*~YV4w_IK+Gf{0_jDdL?^*Sj@*Sw?r!1xDQn=@cZC*} zJbHF*{a!YUSfdHO9i@4=NzMUjKGUuZx>->8yv{E^Aq!p{((LL)O-_AjVTJS&mf=VZ zW@1cz(-i{#ZmvFJdyPrX*ilpd*ujA8Fra7_G0KNnvem??Q5B>?@{!RY4QHV^lzbV{ z^uOUDp*Oin*263w9HqArpRPq%mZnrinq5sr}3k&M0C?8O(|1Ho4-y zk|0(|?i5LF80sj@y#DfAaNC25;p#=V7UAd8Uon&0r?^KZ`nU&zI6mZ+grBs7CovP?tK@j zp|b4i$I5M%)FpD71^)ee^v;4kh0<%pQtsh`Q{SwG;Mt=q>L+G@DR;R?7OnKJ`8#vU z56UM}y~dp%VVMu!!mbbwCEzjLT@?5!m?iCk6%G`#>V6 zA++a@98_87ris5{X)ioHxcM79ItXA4W?jI7cJ%`y8F@xQ4I;%PC-LjnBR0c;V0|kL zcwZ8UBMOdTeJtDfDT=CQRt|;6S9!aACwH9=f5Dp>xh34++=9m{+jnz98i(+0@M(=O zW)Ub9P<&m4kD#!*;gSJ?g+Gt>NYQ8!Sp1mbua{Y&Rr_B&e1#3OUBR7=^Za*Z>}6%B zSJErZOa?-ZB0P+tOoPn2_1O`nb2kLrnLZAAkx0--1yqQG@Z%W39R8 zFA}LHgL3^=+J=B(JrhAj6b89&^NA+&JW(&ZM%B|(=WR%~^{%PEP$@W=W|1lQ?qXP7 zZ6%xZ{$e$UA-!sqeitZCcZ;bmpgQJ+uq1Z0{9{;fiDe~_p%P`tPew+pv1%um*SDy3 zn+1>y=v|}5K7&FT%!QP1=l8W0A?p#0=yysbBBtIad!joK2O`Y=s}?= z+Z!9@XmFWt-v^Cm`DtvyDvp?YF@;7mTYgn0Y-iaGRuG;IkmwW7W~d;icrVpMoAH0i zLm@v6N<|)~H`xC^>Uw_ttRuG3o+4)}XD+#_6PzYbjkJ48c49m<_}~zxS_t6O$tmi( z7DFyGV_i<&jMPMvXl$(o!&+NRDy)?&fo)?YDHzasAxC0JHh|4z5gz7eVr`L-?@D9W z(?O*^wS24h@6F3X-m#Jr9pm=&9k90fFS8 zZ+K^UI@{yL+$rRlNCfqz8P*d_*X1<^b}Xl-Y5>U0K%f-wRZ`yJUdTuL*kK$DFiqr{ z<}-KO0%^L`nX4vgMwg2Xo32XNHaSd}avJXVGtYQ_s^626ZgTQwXi7hD<`rldcb6v|g(t(o<2_g8gZATt zWO0!!=?p&pBFiXa>O#)3CZ9#_X{pbu*+_3vQNvCV$ z0h*0V-WJ2_1p%2$iE7pMlN0dY+j7%#Y}Cw*hV04+v1(QfAJh+%MhaIul7)@Mu?lQ% zm&x7LBV8+5x(BHupK}_EzY0aY1*^jT+$GNyB-EqGI$Qe3#c2MH={rMS$*dylr>nfU zh#C$8&uiX^Tc~wk{Btrm#%-#1O_58wx7|Z7?)ZB4=)im-M+ax7@(a#iIMk~K%!0{=}r%Njl-%iK3%1r4DrUELx zr#qzCkh;j5>}4l^xBSu(F27>ipv_UjA(O0D=%BBGLgx^7T)#7GU_YO5@x*q*A2X&C zEB9yiUp8!@d0qJNg_rMKus=2VeT^?{U79%~(~R)edU%Vc{SJ>almzGTA5k^8c{`7k zA_dZbVZp(0zx~D)u1(8F2tQd1IK6s3P-vf#QQCpgpMk*s#%e?tvFAcz&l5Ca-s z?=~4bzpXlP{KJfL_>r9EWwEH^i(y_W^?h#qVwYI>VVkbJd9?GnojVg@u85M3+97Es zciTFsz=dk%DJN)WbvQywY8G^b>sLeN1!;4{aKldof-%;-8OPfI3ZY}ff{OQuA()2l z_XoxKaHGtR*D{d@Gd+bBXZdY1Isy$^NDo&l^2FLSj^AL~f(ArALUHMe@4!Je7)!(D z$i0P%FI_%QCVL8nYs$Ddc5G#ol><9tD3=YG$NYq}=!zGQz3*|Te@)pHOVPR@yEH?V zS>N6T6}v!E5Y*{AWK(rTD^7d`4J)97(D44#~$ zlh)1XE1I|P?dZ~E)l4ky#G7R7o#55hvJup%WkJut1&$z>ZKMt1fIICjWI5N7R9_}4 z(t`uL`+Nrb?Gy1eD`AO=@wnDt$QZ#mrvVVdR--eLHT*CophLT)#EaN6{&7a+7PlsF znJ-HQP+A~1F1V-zsq+b+7M5%_YxCZOZZ$7%a%*Nn+>^!MDQvWbFvENU#!1#Q zU4W@yfVrvr>Wr00$7!XPc<5+mXPavf@~RPDZ7>tEa_B0j0$CFnxbl-6BD{F-2Hk;X zNPLHk_nIq}+wsZBkjREDnuRSIVxa$-V^>ScKeu1nEtiO#Swee}438;NRflPl_1F}? z!SPM{@zeAa*EPqxT)cetWZokMnG<+h>Lj|}?%)<~kjmTH>7*eojCQS`M>z%^`}g&j z>X(X#Guk_*ad-2SUTv_U$z1NaaY;n%%;@7T1Ru{yM@UzBeCycC0(8^DFNWmriQ9gX zMX&kbU$h@9`2HCadv5T%uY3siY=6&0DG-_YZ6mN$b6xsG`*B%z?pstl=6@q%8k)v( z0gW(X|3in)kp1fPv7(#m8H#T0C`=9X4HcLOm7+6lpXsxcbS+@1oWv2yv_Qs$&K8^VHtJLXOfIFG7uvf88BfA=a z;RG|9){1|5453EMaz!sCVmjLppScF_d3hUX5r|nk{iO|kO^vVPH%1;>!fUS2HcLB* zEXj5oEXi6Gn}aV>8lR&3+tur31LsuF(X|-YbB1rtBrf^yH-4<=4Q;>>!=BxAlB($# zQPNcX$^f%yJsCbzTCIf|cugScxWwYO&nkV3Wi%E;Klz$8u&6%&Y{|QE&fSC?wZyK4 zHL`@5P<5teHSV|K#9Yl;f^O@ArSxPAY@adt3LD($<&G0d!R2rJ2B6t7tSs^po}s*~ zKr{^>!6Fw)W6A@=1f-8@{3OVfr;`Q}a>giPMJIqqzz7d}PMzkK>XK_`!np46S-?V7 z8smJ0Ji=W$_Fy>&+iR8t4_FwAry2Q3f*83Vd$5MGw$+_cZQG=ah29i&7qIhKOP!hS z4gf1(x@6ZAP8EwF+~|G-u5bx{Q@%uy;pN-`Nm$}E6Czo{2O2ukT)|Xiaj9Id9ry*C zJ9;J|R|^jB(dAq<0fRMR=UH=(7 z#9zZN50<>DL@03sSeO( z;z24tl1URogenQiK0u?hO;=9qe>93)rz}u>;F5{vopxGxc~o2b20;lohIL;A>tUk5 z>DA-n+jVH&QL_8-$#Bg{tI{zks(Vn#DP0oP2BDP;&zp$5_qerq@Uo+SHD7+z2`CsT zb)+An9t@P~!2W$r_uM*FOs~cGMfrCh*wx9AhKoev*N_NgV_gQ7t>LnM%ne7c?cLfm zn#q}VDn>C!dc(O8IicGHn;?R$#Cp&4HhRtNV)!wEF8*}dHnT^iRk%J<;K=uX*=5Tw zX1IWUxF<*o|I?%Te_@{}8ynh57}}ZG{5aJA^RjM9mW^K%gbkaSs=IOgqoCk@m|SZh zR2Yz$Pp9>0KrY98X+oZvaZ^zF-Gk4cdiYPyP?0dL-Eq#l&zny#HY{umt(glP z-sjp$2-8b`V}gURFgP*c1j0}}Rv6^krmWO23_Tb3OOxBjkqxb$$60uY)nl|4-@pnp zMh}}0JQ268p5pukuXlsBwx0+Shfw|`*cql2&K0E98#we!4;#d$qXk?(U>vL69pj9k zv#ZT5=@YjPh5{JIs=cJ?xGL5k{<&5uV8L9_Rx4M1Dopc;FeM02=(zl1fsv3COYivA zre%ys({7hda^57vekA+C8lbo~4@Q=yCP{w3Kx^f16d!nFo5(-YPWsBNKY33V4_SKe z!!^d7UaKTwkW>8n;n^giq+vhzNS$@#Vn-K3vk$j(ADnqyI4Y(Xy@#Rpx11VXxKbk> z?o&i~K`-^U6@MKvSk9w4 zhV2WUZ|Cr{7awM{v} z9lk1q!JOWkvVev16W}oA6ijDKufAqS0O=|CYOLYGg66KLACDmKW&0oi#ErM3`aXcf zzp(E=)q2sacVxn!5ckXv{NVpyt^Z&6X#ZJwcK^NTT$Lx{))-NB<$L#Ng@lDJQ&pu5 zBYp#s2`Q(NcM#d-a5m!MSH4~Mz%#;PyBdlfn4)Q2z1cv2(yOi}8Uhp6j1_n9{i^5^w{~A+ z*yV9djt;W2t626)y4~L8*MJ@^g(!EKxUbY;oX;*+T0!BKHZ2pw4@$a4H;;Z~7inJG zrISjuNVz1>zM!5`QFJPl`n+K;ne7@knD$M z&0A$~L@ih_?9R<`K2yJ;N<~DN?(X8->rg8|J7$da^DBp0JD(a2TUL+CzH+*ufYh@a zC`tvReTPujNmtBk-I1kcuOgBkJxLmZkj=jP`v80N5}x4~-)O;Tg2dn-{9mXhVv0wl z-5(LQ63G9wYW|lR;QtYv$x-+J4^;1S{R=f5*4BiziLS&}tDR=Y)XkXC5q4b@307oa zw0TOD7%s}m2=?=eM+udThpLHA5INfC`D&BzD}e_uy-pKcI#r?n8;2Mzf^2fkiu_Kt zYxOkXi!DDEl}1u2R$EGn2u1o)ko0mu?f?-5K9OFdl(cICZH|i2XBG)rsli|(=V+iI zo1q-Er8K`>h9yTL<+0ot^5WITkD-3HS~=l44CMw}2xxP4xbDB8_OcC+pZCrYR6<jZR5SX5(ejU8`_xHo&5RmtP>!r@nYv z(JNgmWLVLw2V>U2jTf|U`a{|M?CX@NKXg*o>46t}|5Y*>CU`@BWUU9$9&d>bTNV!T zb`qLsqbg6F=3Lwm$gZuZ8dhzs9!d+Oj)VUnI?H3|V+M)VUSiJq4ODAFIf>K(TD|$? z{_QC=*>0mfRWS+LKEpB;@84B}A{aJVaD) z#S)6=ad0cOzD;kX3;Agp##?`I%iGYL>|zq;U15;l!;nCFMVx{5qVvn`vws}252c`q z_`w^An?<+}r=W@C;T?%vM7WQnpo#Rs8<|^KxR0iwiR|GWncG;nkL8au`5g}mmw6$^ zlSGT;$Mo;%jL~bEgY3xv@#kcP^U;F02V9>lL=zYO8upbTt{=~LjleYtHM2{i?JYE@ zH}W}+aX*@Jj2WaQJ9ajIa*|Nhvc=Ar0N^~TZs&N$p_e@IuSYPye6oTs!=!tbzo=TU zx~mXh?Q7SEQTUyE$TIC@l zOu2g0)Ry{^*x<~yES*&atD`=G6Y_DrixMl{(G}1Ypjbu_%uS0Gq0j^P1~N&xygDOM z)t-pN4GBYONW|chBT1!@A|ERJsI?MQX3n#;w;jkWPP&`n2(BO-5#!bc1_WszzR_1c z41{i0K>30rcy}7kdjQF040RfzL+ILBRAa6+c5f2#XYb5YK{~T%E-R^ClgVu}RX3{Y z2s*F)0NYn%c7%BQ^vy!P={sWv_h08(@>KR{d{i#btu-do=j9P zdclla?pbW#`n69CPj@f4^|6TUt98K@EhO}dVN@p&gm0ZGZKFh`(-={Cpw__dl}O^? z7C=Ulpc!Rc-3qUH zhs9<0(VC?+=}GmUttCagKXZl5DHI1!HG;8zW*`c~7{Z43zPF(p@O$MQk?War8a4Lj~V?7>#v3#qZX6zOMX z+|W{C=oig(HbiEJ+BD=Ihs8h#aobm8Z8C? zBMc`8)}{|0X>78a<9>KXrVJ5dQ22)x_o=qQ`48(a@AgTj5#SW{V;)si>^Ll~ zm!9S4gg%1b*ny4f3=5%QOou*?Sy_xb!F5QH`yo%45%YNAM=er|g47B+SV*0By~fMC zYrp(|jQvxPDABVo2)DJ{wr$(CZQHhOYqz!Awr$(CZA|~qxnJD-or##4sF!+J54AF? zGILe_5DW#AR$J|+NL-5yNg35!))co2q_oPyjmz-DWZjOTUmcOomA?cnFTdT38&hoO zzVUJjL6#Ro2HEEMgW(!6`uplF0cDX;|aGCWlfzc;AEcjOr zlr6I6`eUeeFcN0G}QfvC31 zhUj&Z#AYZw{yo5Hq&|1iV#1(ZMXQL$Z)~046C0G;_?-J@0Y(j_vc+wI`<)(qQ@r3_ zF8k7cClOG-wh{2JY{yE&_m>Y*{G8WyB(J9fgDnUQ?+z`|;kRan?09C@Qq(EP0-u5n zViAzsQ*rUDr*8cGIA8Cn0|=T9L&MYbFQ(IGqN!X*g$oE@M`+8=R@V3=!@qRh^FBpr zDVGBo$Dg#DEpVFaR_|n%^)f$*e*-eQ`R;S6W6ph^X6np!U4N66ezL%8n}nQmOUzMu zY!+P=VNilI*v0Kg7SjvU4}*a{?hE_fOnm0QP%DQr5%L(n-3-wGV;}tgf?E0CK79ZA z-m1_x6gSu(Io=|b`1~7cO*`UX8k4Sm?ZH~D5mOm$@Q}q~LFVm``!B{lAX*%MzVL5dWZ2ND54hQim7# zsEEf4SE=p!3&U~ zzDwnu4MdhwoQ`MIltC~^B`++tcjbP6#ZUnA%Yv07V>2gY=g7{&iyN_bWC#S*h80a( zh*KNrgP^SuO+z~{YLqPt{PN+z>TfbM@3v(l*~7_DDq@7|kH5oD{zC{Pbc{Jrz9T|F zEV@qPfe)C}M>iwK7=&&V#9Zzqb;__8KpKbI{uh-1(XpWE=n~zn(v>;C-~5$4q;JT~ z8A+_=bK%NWaR_&|$G$9`9`qNSR(I~kSvmwn6xI*)b4h^S)}JXkMj`59jp$2ih8&CE zUz_*k0xy7;1=$WtIp|LUldf$;rCi5eUxcss!Lzs#$&Tx7L8(@jZRWq!SUVGB%miUn zARdlsxkKCIJ7OPE;1f;r_adRBMBRzt;hJl<;$TWG263+ZG$yt@B;AgCqHdDT$8bDVpJIr%c3K@gb{Zudk~0t-7-9f(Q}iGl`&MbpeAM z6b-b7VRLy)m>W|rA+QH@F*XG#7X(MSV<|8Fx6RUFd?VJK@{J5h&^&mtsYp_8R6Krc zhlYc?mQ3kdD#4vB?xP|_4Bp8`+NDo5m3LM^?`r$t;fCZFjU^v90!q;7YJei?-CBUl ztMKy=wG0R^DK>t8=`a~VE3^NbNzO|yjN}X=0<^^Y7b@#P}62p}Kdy>BI z8UU_IkQy5DL1CG~qLxsBUK#g=V>PzWnzNgjml7d*b{CyTb}E@%V&)rU4R6}z( zWx+*Xd3Eu^n`>}p<=O}90{DPb5@rznE7Q~Wu`;vfZMSv{eCB>o0#wvAEhvz zT=f*-z~B_*s>f4!4Vl}-PjI~2D~0=;bEIp=Q-#6-Uxup6Xgz(`<&xAXY~J^bpx7?w zMYvp^cAiGFEHoHArR<(jU*p%sK648?+V7$y z#j({%|7S+|CHEhb9n-!K>4ru(cR`A0)r_fC!r@i5;UNpc*1Cglv(MrQ%Ica0D<=+R zsv&qN9$%h=QR*hE{YjlCR{yyS6`4A&8A z2~XGrcqg=lzim4=g4o1vFE(_)BGfTkKm{t{bNJAuu#xY}KK?81n_fbYUT0s2xUX+#FHu={zTqHRe1}*C7)W~%) zN7v%1adHx{$H-tqx zpz6{+CPnxyzvSm1T4d9#a@G8{ooSVId)~))AA;M~UKeH~a-j^)*_c9Rd{tgT*Amh2 zL8xKUkK0gf50TYWiRn3c+@X_tERlpFw&4?DrndAgu4RMuLtZo#^+^7@gw7*nxxqMf zo@Qd2YgFQ0nN;70@U)Tt13jLEU%1j4nap1*&U~T1^Dr8 zoKog;GB+u-)F?zBsjR`02Fma2SyZE&3=ok?O(gLqi$y*(**Suh{BLHF9{Yb+Z=Y+oQ1V^P71vwAqS{&b-Go8iqeY#~~aiQ$r9O=y>^4W@%tQdK&!A^wGoB z0>Xvgj4DhjpMn;rLgoM$J7bRmk#>meR9?9)x$9Q@@G=In$!?s8YzZkzch!9KRV4HH zrVEI-0#G=Gx`B$>;5?vpH&bxH3Dc^YP#+R!1i}M8>(bKoysB9ko_`tmaSD>)C*osc zDaHj`9mGyahSt(s&X{#QAC^?PHtQQFT46O4Cjp)Dl*(iR1s!MSxq7{%xU?Cup!6!) zerVe$Y`9U%;!{GUrCivQ6#ap>l%bDciKMEKm=?)UInC)6a?J?|bRe$!QPI2gmT#Pm zAXWp(S>L-fkwe^&vcz-0)s56e`gD*qEma7lLZp zCxXIp(SpG1bUnq&3_FV-J->Y21ThvwXyD9?K*^fm>K?7DZfTyfVSb^}4 zB&>5md2#yVN%u5%+dbz$7g(3=c-;Q3OUDu1rP7?Y1H_i@_@Zz+vE{;!%{r&}-s7G~ z?P~#EMUTg?o`ArVGm&R}+o%o>7y9iH?OTdR*%O4fsoT`ohCyC3k(_lEt(Dn20QAm? zj9AWCZy~AigexrcK*p%#8J0@7bHIIhF+z2dM>Y19=Fw)aUZ zUC`mxin&eMW3}Z@yeTp#)1|br{e^*reqW3!)55d;i{1e!Itfn8ZlP1Ty?pT+feCzw zP2@LPvU7=M!PIfFfuTo(cT2`E`oGeAv3zm=q5{6SbGCd7vPEymUXq5?Dt`>>(_>GZ zta!O6FGqP}O{2!H7QW0)@p4V$;2!Q~X?bI4x_C2UuB;hE4ZmdbE++iBDeUogUij3~u=- zvXwXC@QsC5;9Jc%GilHh;w$uCM6fd=bVLLvf$87@{dMP!WD`&INDz9+eGN(E*3_+8 z$0?I+GbHTFJF6hvm^~i+E*DMbvt~*qcq}8luL;_<&ajE}2BvAp2$z#kMW)jSb3clA za^ED(s(lCZ(F0Pa?>-&CzDZul@-_j+x$|@Ka?I%^H%_I31$_+z@k;yZPyzclM!P2L zYx~!qcvUr9$~}J|k;v7?ffk~o8*y)+u=71<{C&$Iy1-F-xTJhuNEf~i+Ez#D>SZic zVbOLcu+b$EjYa@b$nGl9uqpx|7dC7+T%6iCXP+hUuG~$1?N>V>1wjT;OXZUi3aSIT zH%{O8g(O^-V%KKPqJew2{r>(X)iAdf8ap~rUghVMkmR;Hv4CY0E$A~PZ}dmCz@CUdO1-n)< z7#ILnCf@g6+OmJL=rBea?Vm{jC^^mDH)>_MamE2Cy+f*1y0H)kpj|O+ZlzILB{|)s zE<%ok#{m1zE9$t?skX8()a8I_W1N`(y;{FhQeWEyk#*2?#qnwO+d^Zw!j$xPLf2MItVb9{8_7>9c^Plo!3T?> zKwzZ0m>|4QymAP@oJd3G1V!nU%%i%S-*NOP0p0JLoT5E(uOz>@d}&`VLmsvJ5cW2h zxly@%SV*XlL}zg1u++|hpN*Wug*WWOJaoZZFEpGvfJJ(KUPFHgbw&e(2-#TT#x$1A zOv04;;c8*ykC|9G!ImS9I6tX1i{u|>RxKAVJAmVrBjo6Oi7F%?Cc!VJCL`WT!t>DLJ12aR% z#QMC8RL!DcjD9whA>JM8{@tZmG?zSm<4_nW0!DeJD2|RISPz0V4Ufp~yKbsin@i(; zUKgG|SqbBPP1%bJ(`2F?bmlz{S-3a@Xa>BGs)2+T5;G>nR=GEp2QVwqLgc^tmSwFO zQ9a1hL;XNx(Yg48NO8{5BNKL>)mG#jP>C6!O*D3itmgoxV^R1v_n_0LEOyjei~*z|caBaY zk+30v1;Z&4{y7|cya(ucNN80h7@6{yUCkXyCKZ?=Pj^uXou>-nLBHH zOPt&dh4tHPG2ATPj=U#V?axA@{Lbh71eW8}7y8d}+RwL1ubu>ZhS$)me1fI9EiZ*y zK^fZj=M@@|!7bb~f=*#THWKyZ`Z!^P`a6Nj@4?sqeDVpY-48PTr@H>sl>q)gf zjcY$8L*Js1CkldjZIAzf=LsCXv})9<^vOG-Q#zh@rc0&Zpdp;H#{(gYX(X!8t~OgO zoYAegUc^!bm8kT#3asa8tfDYl+lKB}H6Jh*UqZ>KZcSET8eqjJh`FN!B0Q9Nq|8x} zxw0UVd?f}dQ25YLFKQ&|lP+0#_{wg+bZO%oKZjqIp|a_6QqzS$4ZL84$qc0Ci}<8Y zVT^J=TVN=|GVm}QW|V`Jt@ASM)Wa=~n)yo}T8eH#b`7_)>$d523uEJ92{C#t>qd~| z8gdh-;2NEWInR=e?DQn0uEB0eE6IFJjK-7lr8!La0Z7HGJo<^`eiq=jzwd~X12_?( zrr5*!SVMY()G(8W?T^a&PP#{`_7#=s+-+Oc38ZHry4mp1fb9MvoPCx;gtdxas#&D_ zSQWt>w~Ub>3BtLlI-bo{1C6Ybl}y`ENDkd{5RC?7&E8Q&lDNVQo@kMDwNcjD zcK4*g8BhKx0LbN}g)%*Q85!3P4KlYN&c#lAoqX%WUl6#??4J(%u`%{eJsb>@y<0(q z7OPV)nE%D=Ab#Nw3!9-}x94fIJst(Ezd#kn?88#RWVlfO$8wQ$FVg4rYIq46j&7rH%*STXhlgK>UJ z<-qEwmZ%5%E4N>MS>74De1SOIzdb%(!=q>_r)W(=SA=>NIO2__p*nb^ysZ4Gus=qX zQgheKoz_5~^%30~?hSlm30eLho4X7;)JuGOw5W5J8uPqi?=4-P$-650-92!ZvfaT|$meOK+ES zEHrv<57u&s+-mC=6`V}1sa|qGf{`e+B=AKudB znqC#U43V4oXp#UfF8|F6wjLz7iM&c1?P*jwz+}~z^2A<^YMHH6vr4txO_i1o3@Oc+ zO>?%W{F-!#3N@11=9<~mOVUCO0J>-Ox#*p@%ufAg@cYC&en)kD+lYIr4;s!B&`7(` zHP8mYlcH7f|FGpS33BJ%AcmRBPE50iG@lK!87L{0l+$V)WH7n6`Lij-V8m zK*SlY&VOy(!NqwuDPJ+1NAG|$DACQGt8c(xxl&BnZ`%F6_EYUCSj5h3-a?S7PWHCz5FY1h;!^X2Z1zSFThe`e&W=r%haMJFM zqdxG3pCYl!wl*YZo_6Ry8g_YV){svkW!C$lp?#g|*aQ|i>rHD|&t(DS`!=J2%*g9s z;1SDf*Dze;{F)K}Py<_iRC1$AE<(X7<^v~81%H69AQ124#GM)&ZX5XW2ftncIIMaE zBml*fy<>0JFo;3;uS9MRHVwxrISI0=pxB#KqH;|9c~`BS*!{&^plW-QB)p`wi)2DG zuVpUSDRY{GCL$Cd33=nGl7=dc2ii5Li;}8OoZB|4;mFvZ!KwGCvKbb9n?5Ctz}`UL zQWOZBy^z1vx_v_|&94wkQNv!g4Xy4WN6lsNqzsT^XO z=V~CUx}&M*p4&*2P^Fz9hB#r5d650y6o|<@sc?f4Pu%f*QyhY?Zhu!eLHnt4s98H1 z@-6%0u8WFxy)1ZKcuq&#G{OHB48N?q+Ygy&y52qD+(+u?qtQ6^8bGFmnb>h-1f-?b zVBovf0>gDgN5ff?Hk<*yxDM`{85>NccJyUKM(P8)uL^=2SXXeFi6qd(&!jr<$F;5} zv?f(4INJWb4dj^PNV_Dg-t7kGhBHgwHy~yj)1fO#Ur6uwWf}g9*KN zzq#zn`u=!4a|SH~*LZGu=B##rrl=d+J|bcslbob6YMZmGtG)A>DKPDu3CmG}({1fg zNXR6`qT$ado-c6trv1zcubN0y;`e%9kls?V+M0W0%n2mMyQ{3ZhSv+40-0`-3#P>Q z5dO7)9M;VQvc>ghI+D+Z~F1;&!X((u4D9k2i-%hy4z zzluARX4N{0i!Sz&EAYsdJfZL;0{wHWIy;2_<)^VkEt%*hFwV1?z6=Gc$4O{~ony68 z>f&a}Sv}OS*d=@{@X!HNo+NWa(WkZ~SDZt_bBlMNJoeWTwY?Gs+QkKaX3{Q7HwWJu znyegb^at@T6BVO#(vM^8M+mGUt&u7xI$CjA+01j5lK>y`i%h2!EfzYwf2g4dUsLkV zEYh&if@&#%1r2V(J^bSrTU7x8;pxsdizZZcgGHCiw!1)Vj#KZrFGaJ2!)2Go%Sj#b z5vlEYRp)Y|+|9BznV@8rIW@sFC3JSYYbq?(hw zWl93-*fE*d$1IaY%#3DrCG-FosUfs5ploH58X@uEc%;HhbNys-cB~%J#p_eYrqetIBNc|L;7y4CH~t@c5@I3 zh77D|{HA?uYfTnP$aiYO8#^ zF``6YN8)Sb8gulB3g1!0+x$Isu}3Bz5UTnxu&agNhFoMjea0a%{>#Ul%qrqy%Z2Ic ze_&W3Ztg4ct08SyTN1v{2s;Q-$u9pC#k;5f^(rsh<~rXGhR^Omd4u`L+syx?&E zq?jtm>2y<1XWQe77Q`z9eqR^eR_nte8?Us{G#uL<@@W{2thF)z6l_ zx*nkmex$|HddKbT_Hn+Vdk9q|uHi&}TkvMB3T>-q^3bwdh~ z&wF~wB8;VZPNN7Wu$Uep(_VrY;gmDmBn)FaESDo3zR+pHl#dHmAXV}(h6H{=-U0Rs z6DO6pLvGek02X5*Z={{*#h>rt!Mbg?!cx2EI$Is>)VQ`8$k~5p_Kyk~l!;g*c4Y40 zL}Vh8>Qu6Gs6|4gZ-$wtmn&MYHZpluLlUthN|s)!dqDeC@nUjXZA*bnd=-}pQD+`K z)7*Nr%ahsxZ7(J1M(t^|a=ce|uzP}t!s|{IPQAQ2MT3OwEOqMUFeYhxt|QdxfAEvl zV5)g*$r9ju()OThzPxBhgAA5^Q=_&~jw=VaW7qV{gC^TQWT0}%9a$s5e5Y{4qo1=A zl8c9}IyRk?l7qz%mU7jK7dv#kDcY1qf_o8r9%ZdcuXvfgJOa=EHByQISTyf@1U4OU zP+c@vG64i(Z+kTbo?7P3u5b{MD2B@QHwL#0#02k$x2Q~~+dCMt)MegtV?zwll3%-} zCA`8aCYa3_0!&gEdkWEa<08~MJIvu=a$pe$Djg0^Je{)70IlYeSx~BgcZD{L-M;!xTs>?f6h@$R z)8;_=R%kEdh}b2Q$^0yBs{l|O-=;hni)Hwqp%dg3E`6L*T;r`vP-IhV(qcU7FjVs- z02T`DujYyo?`w{8CZjdIv{ueHAONSH(>YEY3^6#{kH_gQt~pItX(4ccWj@vCKJazl z_p`V21Nf_}BYow@vW=|mv#h%2rG2mC&0RlxWQSc)j&d2ayoYMX0E9ToACKk2Z;|QFjYQk{2-rp8RIngPzU~+Hq zvs!oDftD;@s?GYy(${ywhw%Bc*);gL(X(^)CTdL039ClwK>}uDqPI5P*!}9aq@Len zYwVOephb_N!-C`uoekDCYRvIN8Ft!&1yaQ*b6p$twY`-{K($_UZAHDBkd*mp|D`DC zdiGQR-im#@%H2#yR|fC+L!rGiOI-P#S4=ZU2dlB}%S9TwOj*HV9?`@DK`b2`ol=zc^rkHn=XBo zwr0$b;d=`?Ik&7x(&Rm+YQ&%W?X z?IUjN(N=#1N!R?dW@OD>_JpnR`H)G0yM&HxVdLW;R}PS`9F;U4>L3{>#$21b{_?BY z*SRosm7T1gE~L@G_e+ZIw@2}xo*H9WUp>e_2yPZJGlgeYt3TU{#G}_?sh3&PK7L`~ z(S88Ym>V5;VRu)C_gE2WIYl+pc*8!%Ko(j)CWxPouRrG|S1z;jAo*srWVXUI5bKxKL{3*(Ax^i7G~9!v!P3JLz} z$GfF^6e0VpDH4TyemJd=Ht|z=!e<;7`eLw@yoxFcoJWJ=|`zA@Z%MTd<>v96eE_!hVd*V41y6{DbW=( zzftPwyng1L<2xPt8o(YG{Yx#HN>TFDgLiPY<}UeZ=!Cho%{w*Pcnh+PZ+R?dY@I~$ zXK1(6dMarxyM^qy;fp?VlW%I;Ioj11AJtG|xd|V>#`xhc;Dvv-cV3k(U)iJejAhTd z9C74}k*Bru%LYh}*fWFipNEM1Ljg5;-p~x+ik?+_3(uX;{~FCV>aaob;{gCLss5iB zbFlw0c>ndD`>(;fvYfD-Nt}W#Faxx3&tE0zFAFcwBB&~;EdM|5S`Ah#byEBCb^pl9 zb_;LK)($e*g1l1eI1iExO-hf16;K@+VCWPQ$(yXo=Z+9D)+VLcx#8@9*&PjC*iZge zcIjhHO}n>5Us%h`$Sy36Bmcet_n47{XkFysLibKb=L7egU4DFgny4;8M z%BR(e>r=((kr{NuF6tiQAnk!pp0-(-t1gnGS)oG~;4d&c=Khc7%%i!4%54M!tKhFn zCr`R=tkt@np9oFFKpvMZvgG3OyGTJEE)Eo;c;5zjM5A^Wp~~hRFrL9JU=>1^Zt~Hm zAfS0oF>Mkdj41TUCLu$6wgYxEU#f&x)1bZBNI-?D2(E@K4c{= zybyjaORo%?0-QA4#|xS{=xoE1E=}Rtu#yb9H*9DUEESOM;V70%P7SZ)KY?QaK~4QP z?BQHW@XZQkexd5XpiB;F@iCH)Em+Q$|&A_YGVf?0Q&C z4JQ+CX#zJ2@MHkLwGwxU)GesvLPm5rl@OnZReQ+}eP}jIfp<4k-QPqFKq`3ej>9+$X&^h1Z z+zVBOT=<|d9#27&a;UkdGZo@W*TbS?WU^qx3vs&~eCLqB(c3UX9!K2qC?g#26eruxH8#ftla6l-1EP}JgGPk- zJB%+9&0)cUA9(x_f$a_Hl%_2f7OaCd;%|UIJ4{K<@aF;bfQT~eZH|Cm!vY_pZ zk@L)nb>hU59Uu~)hY6?KyTDdp#PhO297z6A1f5{=8&RJoZ{36ICexYOkJ3aqT z1lcdV?7z~pjGVB9sDzM!vV@$hl1ZF^Ef52=$P34i9x5a;^CkQ_U~P*%NI^D1(4g$e5C~CA#_YMAwhQ1Ke1&6a{6J=+{Y-mJuJ1DQ3e{~RL#G9+CKPYaPY*p09Vnsb1$~!yNjvVO zpL{+6S);<{R<8e)D6w^h?xEiuQvRL?EXY9h)5C}Ex$ua@>Ywv1i>w!6N+->m9!QqsBTFJwzO>+DY`wOP z9~-3ak<5L0oUK!NK~K^1wlv#uEy^a8`{J)H&TxjH&z|37;lc3 zcGWv$kF-UThFi7GTbV%~7}{wk4X;T$wrWrecN;r2F(&of z{wGkLmV*cX2~_z1A8+n|2I1F(`u_;R|Bqa05u>(aw?Gf?Yx@(~3+yqr$nt3lZOoz( zajNNN5e6@$k`bzGL1|v$F7SD?+TC#Ags8W(ym@lt`^LKi)`REj*BsVycvs7FX`7VW z@%7BRb_FNVh2Z3%L3%RwYRw+rcUYiWnkAqUl_AIzS4f&vu@(~8rLP~N4hibz0Ya_T zss?TAP{v=QA)haAhmJh>!x~FD9zi?&njCg^J0cApIkfp0VIjbwXMwyB=vXEo4LqKb zZi&9&Z&55D{ZxE)oPOrdY%L9J+=QsMFmF8WY|y4_u0HLYui7Td9D4?oOl+2!C$Bfz zD!hTuTA(gv`wY-jHsmq}lNVx0o8^@Cc}l~NP7N!9 z&?I39AxAA2MBK8L00s#F6+xahFkq~yfd~KNN1t_|Lu7{s zef)-~Nm}ngSOLRZVt(SNu)NE&QFi=;_`P|-gxw0zM{Qc#Dn9D)@A>rkBxZWl9F)_l zgj!UDb;4<_R$r}#9SeX*&*des8BrC@e=$5=YcCI2!gPLVz(39{z_@d*vr-Q7+zn(O z%dT(XO+B6frxUQB!agU|KHD=jB9N;NN(7Q7mG+Gqom12N0spFnmBO$5_X)t}`^)aM)bW7AWkhcv*l={W*lB z;Um{}2GW@GE8%b5Aoj9(REe@t)vp zfUFx~LGth0vCO~XSQzqq?+gc+x|;RI-SJav%%|CVU0+4_E%N3w);z5=#Cn=yR^t8I zhkxu*gnpQXhhA3@?82} z;q7qDk?zYityj(HaJ5|FUa|OCb%u>WF_34`CFL>5D=B)r z?Afv1R4=QA7JyIdoeEez=x_ES5cPr+4b8gsh6uaJ?xqcZmbZ)sX7BbG@zRYM4 z#7gO^bfc`p-E`EI0m9_^HbY#(XZ48UO z@{u+xKh+GxEfaS#+ov1SFh!&@!cm&gk$H4CsAsB0kvHTvz0S;IBZGIQ2GvD8KDnP3 zU9a9`&?10GrWSNE*oGzmy;nILxR278-ur9D7ARCw_`qY)c49=6ceB(-TXl7CVGXFS zb8&yva~fU-1hjcv6B*F%Pmu4q`W9OE%@-=3>@F@;b|LexL!Rn8Iv;WUTP?<(OWE}r zX-teOU@Kv{dPCuMOkD2ENgC>mVm4AHbMqS91E=qhoMm(JoZdljrj2#tukPc+6!!RP zO}pd*G=11GQr{015NBHP1aeTpHe*w zn3S5IRz4z^w`U-gSpAndV5mNIQ!5xe|kLx#d2}2%55ZYB1)a zsnd>R*5{R|Z5HgchNX;B)f6b8>;V6%?0bKZ#f?^Wa}B=)@nWJ+B!}G>EDIkUe;wZ+ zzXv_d)fhSPSKWTqnmW`%jn9qz8(yEy1FU~Yz|)Rp>~di9_86{uR7EJK-H3Y+E{IK< zPQpUV^^6c}`|2S$i0;J`FSDGPAG>!NT@U05GgEb;;N=S&YWZ`x=0w_E?kn9kvJsZG z$!+Fboq1v`Hq{)|HgM{23bsfeX=@87NA+~r=-AzT&lHjASGBh!@NvsOz2xShyD%x4 zV~Z+ZH6|m>lL*LLTV&#>)z%EhGWHG^-0BfaTP3vFFxFBpTcKh#;ap+D^EL(^>#IOw zLZmmr#*qt>v*9i1F7W`lB$XjYx={NMFIE3y1g=IsF@-D9!2RLuiB6eU;OF%aDg8#0 zx2>}@abhD80j}RFE(?_=!*}kEyuTtwj&v9r8&|6{k@h6CKbRyk>~-+#kHiavzTZZJ z!3^)czyKLM(Z7T^B;LMN)TS9i-o%n&t^hKygEc1U7v3>?wU~&|sZHXu5r;TcKF5!4 zy=ZSg?)$H?(U*TjI}_^{4bH@>1Mn5Tiuz;0dLr2NX<76>fd*NR!qU^Ryg2CKJSl>* zez-I&s~)a_YcePCG&gdaMXwva-}kHdBQ$X^1M){Hk4njA3`XYngEQ!n+!g)32T3v7 zoJN{=tx(5^F%5@A;A#sYa>}uXlW0FHL=p_O-nk&yhn#4yZ6~FXksqna)Ei_9AnSBV zo2yhwjVoqGO!KrPPEQcX6i*S#W)IB%InJ)p`Qp$# z3)s@_{)pat9Tu<<5u_kPgH#1C*-&pZ^L_#}(xiOSnlSpW+_19s)YNRmX(W|=38L$g zRG!YvJGEa6trcgYZL|YPt`E-hx2RLPVh9*O=%l(mFWf0VfU|#r0Bc~W_k%Q#2vel> z0V>sVAH-5*1`HLPJ5rHa18@R@&vM3%id?B|{aKL!`ympw!FMn)S4rv3%CL$M-d;cp z)x8Bl$rJ$ir^!+zn|$+!H0lNUn|Bu=F**@V?J~hEAqjTN1O?&3@aO%aA}lOS4d-1& zsf4DTN^e?s40>JkwZsh}|ZorkU>f0W-`x6AkIX6Wr= zrDEz_YVuSeF_VfNd)BvVohaWf?WOz zh2Zw~elf^6UZr*z^I0t9(qLS}neJv4Q!);8g@0E^4mrhffRvBTWh(X=m*^!(7Ean1 z-%f4qI(pI6RVQqQr-%G2&woSh`}C)Y9{5;}6aGR-`?=_J?(1Q$)tYmz*+;<^J`syM zC#Z&dB-b;V!+EM68f>}Zb6)Wa0%9dme+{2OzEE&F<`ta=$5W!`ek8ll%D*69YUdeL z`@%C6gPjs^9J^)lPdyzqZsB_}VF&Y67kHy1|U2O{RMkGc(e ziJv6X!@Qd?G@Zt*&0FfAlpxrfEOx*xS^b(8IU&}2BE}a;$VZY2P-KD>nIk3^NTlC{ zk~Pb7dj!RMhz6EPu^9yO_p68zb5AsBmk@43eNBt1$dd$s;pz63o-%?!-zW)#9(Y8S zGt9CwV!ER%i16IW&%F?w!fz}EL8DYd03y)kN|f$;K)53S@xlV;2K&ni^%4lE-QWth zLcmPjy7P++7y-b*9nhe_5z(p$fCLWIMk(v1x9a9^GpCpVR0OePE+{!b8 zX?se-zWw6z#5z+@Jfn~fIx8fU_RPYPTPSIFn1~q=Ry!nARXQZJgskZcS6o3JJ0w&V zC=Zw~KmV+_GXI~;4cMHPLmTD*09ghQtZlYG47V|qiXwk652-)cMY`a40ewuMBRwF_ zK7B;{zdZ703Q-17B^qlWGL1oGb6G$d@;oD`(_kRZVt?{Jg-v}R(o$NL9!!RSz#U%p zXkb|Skf3WmP-Nox%U2}&r3*3xmSX4AZ(h(M_QA`u1$oW4JZdl;ZzwgzL7D z+SybK_d+ftl*2F5puNlm=Fn6b&>e7p;7e7XtZ>z?Ft9Y8?C@-GeKf$;1At2jfM;d^ zEO-kMU~_W>^n?Ip_`XQ2* z^FuY$^TnS&u4P_<#ZBTyU5`Lff4j$}_81Uz#-NB=hFEjOxKTA<(5PjD6?F{PBClM( z=zN>^-{!FK%!ibW^sE;>A5?AH`(rgX1YS|1s_?1n7Ge9bsA(w^o>`>ULvXrSt%t#N z|LXDz_3y0u)~Go6(_Rr()vj{RV@h2SWg9uzu106OSgd;o1oyOP>r@!Z>DGO*E*pC9 zy1|6kima$MSKFIvTghC8V;#6o%i7m(tLthTknN=FYVSpN)OEHxE^j~JV7o?axi_F~ z;dKIZ)REbhC#yhG$2MFKyF$peV-bl{X(w)Dsm&%>Aao1gNY$O3JJQxxY^!M^VR`*M z#2?82fM>W0U8C533|c*tsvZ1myS=@sJHX+PYKLAlgg9cGl+FT;^*JZ|Cu;<+sXVmJp&4T4u~ov|B-0don@;Nli?CSG zCRLj^9Iuz~U|uO0DFJT_*|uYdMQo5vthQWCU;zsu+72?La z1qY@E>gFSnvrIfUZ?A@<=)k5yltb8lMB+YnizjB3HJ`P+zMLd4km%3yw&Swd9Ub&UFV0H2!A4N$VYf(7wA}9Z=h`v9Ay;V`IzPQEXI3zoE|Yp(Uq7 zp?0m&HPu0nhcs0|j~h4Ei-u$0jYd7hXe35iT!kIDXqDjFyn2r{*&EjVjbr4ehKcGDfj&eEXw5W7b=JQ}22` zQifus98zOl7E%`DCt@su4oOMT%=Q>p+JysZ!`<7lCEjX^j z3K8!|FH}{SnrD3$)4O;>Y*pOoc7={;hs>edT?w1TKja1C58hJ>H#t_{62V*HMkypb zBr&7eL8T9I!6r*=iYWwl5&7&EO_V{!uOTYM+2d)BGUMBb$v60N-ePeR&EP0uUM!mr z2knLNere(uFOO@LVX)fmD0yxr)Sc`6%tJOV;ma13WrD4(<1@R;eC3kqBnE7#Tn#Hh6 z_;$cXWVCytNbX=Ot1^tyeLveFX1}=IJ4R9uylwk-V5kq81NO_t&z$4{yBL!;v4}?; zBm(WSph?qa-{U+=xb`D`m z;@A=M2>#vMxg|V_i{$T{=ijMlCuP!@U@-=FmCMDl!2yb4Ntk!Dbz=Fk#U zm&&z$R(o)_g|i@9E;OEpu9`-*hmEieYsmaTUr{e+)ikcF#(UU9yK&RBjL#f>^6`4G zYwOVI)CY)*@rty9t7O54W9V&`DjZ+Ml#gb@DD zY!FTp{(b_ZjwLqVfK!vjBy-Y>grxoPeCWP3aL-{N{?`VdEiV>7+UGupbB}w&$})CB zp0fg(okYUYML4zV91~(@o=`!upo=2pV#B54E92lM{DJcX=2Y zfzrmG`bbfHlbB>UdsfTB_(FQa<6gsIKLNW2=gwfNFAK(;PQ~U#^V#|OtC?GGGb?Um z3ND?s@PNq^Ke=rqk+p?vZ6e;XGSp%(GnCSB(u!M8)mQLy!jENaxTRh^V5cwHx8Tvi zbIXQb*%7?i!z6~;ZZVLBGEEs`j$dH)2`V62!-4P2E!*K_PE=c)#<5Oqbji6-uAgeJv($#&9xw`=WJJIfp)@W0OSq@-c)2SEsXhFYyv(iaQS$ z8FX+V<2ux%Gh9Piv``XGeb&z&VV!KB_ayaBJAY(fypiX7L(avVMCgnU*s~tGR49i| zC*Y$(rU9>LGKY7?4q~bhC#te=iIn=}D(D1vU%otrbq~n|N(ogqFtpeUSd$@-8Bqyg zCt{#KS*xtlutA_Cz--7E3R9lYii5vcL_y@%vYPyw{7z3YD;-`c*>RC+<6TS;)|gZ>iE(rNWc2YX2&X-q&pN%J~tbEMfRYdb%?8#imj(^Y-hD_)!=> zPO)fpY$W+XMN>6&WegEz5&7=7RO;x;E{}quhkI6qxOGs%N%d!>{V7c9b1rJ?tDD1E z!mLALQnulY1Gr-9-@n<#x|DC+j1z;mK!!zsAXMScE<2=u_JLPi=(26Gj1{G8FH zLM>1o==$q&Q^L_n9pag6Fg)IYDB~k_3?r7a944y;5xmcQLR! zoa6X)XL-b7Z^vp3roGOIdl8+;gE!$cvAA8?^7;sI{n288u;o-EyW6DY?xc`ng+b^G zuLEVp+e5PpL-DB}?HtzDH4i`sitJrkbL!u|I`GC;u#8FtKy|rhJSmHiS6)yFbfwOX zU{db~y-yJlQgx*rZgof@nZ(;cX|*nqxQC|u5VZU<%vC|b{$2E)?gqTLfdC;C)&7Mw zVdl5x%cgMz2Ar`B!@aZ;j33+l3xXExxMuR-VpqG>Oi{4l^mNv_Dr#_?brUlkhJ|`h zW1ceJU&%NoWY5)PHp`oU4jU7xdYTI}=$@Ka$YLc$;nd1D6OQf+=cGxey*>Xn%@cLO z$QtX5kcEI8#f&E1?fBpt>BjHrTyeUnLMnmFFwVc;^I+dxbGl!;EjJQuHU;Q5?WvT7 zPYxeEXy3T3=gpN$;KooiT2py6$ZgotQD`KSam4bw9wy;ss3Ev;Fp5|CeLUOlqfGHF zRcWSU@WY^i)OOf{YvCFTxAqV;YJCYAC)7g_QojMvVzZU24n^vhOR)+r3c++X&G zEq*2Y(cP#7Y{^j_|4wl7jAO^efb&eEJgB>2 zX8DlvfPvm+XNg;aK8VH&Kk!HvEKDc^#^6@SdK?zXYHx5l--Z~l2o!b9;(OZRA|r*8 z$yS2d@NurzcR1^rPJFsBLUZuQ+vTsbBlg&SPYG*^Fq?{%lI1h$#-S+22zUjWKl&Q8 zma&gnCx#s^`^`;g@m?^+JAt3eJa~~^=AOM&Q*jsmzViBpLBvH5kC%`b&iE6oDH@lL zlLU_u1Y?%8KGvl_y1-(e{McVRHs!|^y^scJsn7li>~`K}Hq6cnU8U~wtkiV#3s|Qy zy`+f~(Oa*}K1&qiO74IHK^EIC>j z^(EqL*Y8T@p2A?cd(e1!i5U?tyfjnYMf5mFNJs3zXxVV5>DCk6Wlxjads;Ycn2Szg zT*(~vSQo-fO}Gh~O4A06t_`GcMPw{INb}UB|7t4DxJ1*6iV=(6_`0hU3<@cJkIVVc zBM`($jfEpS=SfM$3iYmU^qrz+Q&ZEpX9S25jNKrP3P^JxM7W}6<1HF#_8LnKR!6t+ zKt^6eS};se0f=v*$~QO;ybPfuYP)QXL_3UH_D=q5P-mHKsr0?u31zxXF|otE7>m9w z0tPc>s!&+UPBaLSG~{I;mLiOBXptpD-ZQVGK`l3Ja`M;L1rXQ7H-dpQbjrL4RAZ@; zZ;xNFq4oy_qcOq()gjGD#35cauO1}QG=(h&S@V)w>#&CA`wmkF=aJsgMHSsWKKMiu ztYd>FotN{6QbDt<2}9j)YxLkXLxTB9V%L&L!qZoMmyKw3c_*iqP}$DBGu5Kc*@@jHyd&F}3}kn?JL7fF z$_9(mB}CdV&fK&5T>JG||H%wP-E%@EWXc41X>OeUl=?3x1&XFdZ)+xR%}Pu~U@H~G z%qrr$QM`P}9e`MBfw03<(cCS;YYS(#Ju#tZEJ@x_TVtyWp-qmJd=eGxF4fBJ=8)Kj z{{|obcAvg!z5MoS#pk$GW(H3~=SG{z>|x2t3E)Tk@`qT$g~#iDePnu`dv?PHbV#$W zdJVWh>qU8hGEiZ)ewpnJP41hb;rF}aM1@mu;mYfC15n}QCZ*80u(DF18q12&0ZqmH z$aJ|x`oW}xN|Qe3^!Ep!ER@+PeKzmL=ZqDD$)`BY*|j5j@{OmWMJ?PQktSE^@5|_a zGnk|sCb&>`{#JExpos0q<5Pj_J_dWg8mq@ggL*jBtoH&n%VGQT!+eH3-KXWGP@D4g zyqG+FjVb2t|D^ujp`Z7^%sgj#E%V&Xn1J7GE(<#oI}_j(tniPeIM=)gG%`^|>(DF9 z--3TC5ib}IJ@p0}@nK})#Gq?pQs2;X;_y?u%f{`b%ga+z)yPKxgg9(DTqu6lkdbq1?gKdeWV&oekTrh{c zPw1TevqvgI+76ymRQKAmopGO;;Tn=;#IJCX*LffJt6O4nrE(8S&Fo}L%5+nRsVQ?J zSH%S8#TP*7@0LBrOwjVQs%_T*wiNfo?cmb1PxNjBY7(Q;MzR`! z8r#5m0_LyhiC=LeKhBVJAPal2t-aEeMFOCG?`kvIqryGNGx-*X>m%x**U6!q(_xxz zjO3+;;jp%a+8r`vxlIep{k6qJ|JR6UHJJHskIgfam3o40R z5!L`6Wr`l8d`LZ;{!-Ech3Qe40ZY<}_+mljD$jeHTPE+(zj345oftO&k?&he^e46vcsIjYsG8 zuWJccUJ3A7u8*OYi+QKJhph8yIq^B(F1=5^JqLMImMac#s{VfK3$hz&jF~z(RJ|PH z6e(%m4keeT#s2Wqz@jFv;=)|pGl#fZ(XF}k^dJ_sm$#Mk&iIE2SldNteRMUAoo96D zTU7}4zYMx%d~{TC;GsV9KU)PG=j`Vu+YKY2xb5Pb-d9U34M9)|e@wTQS6y$FA7-{T z+Jw70f)NoNh;S>3Qjs7pjoq$a@0<3Ws%&;vH-6?x6C_wL=t9EIl=p;6vWuKnZt;+eiV9y&IiEQ82Qy8K%Xx z&yzeI$Y$S@1%aU;r_`dLxc2J(luN~1I1DmRA@-oydmKF(0jYxFY8nROD~!V?tgkaL zg5hBX7GqygwV`2AJ*4{0QMI9h1RG&PK z5hUq+Lyt87AbP|;I<GBtxX4U$_!j7TdOxf& z{~h-O%WsQt?6;lIb~l%ep=+y&9T|6g7tdSILO8q|&#bICs#@BX_I7O>7nLkSmBzW{ z4ARS~J)7S zdzfq%eE%I>d>P(M302+Q(<)t6ky0#T6@wJ_k6z^t-S-NG%V(N6s}exO z!WZ%NkQGjJIizWtc+e0p$lx824vjEANxEQA@K6>8Oyv3TNG(I zzLih_p)lyShD}ZM`9K`!Xh(XB69c+Lk7Rn<5= z3K7Pf8&w&0+bE!X{k*ZNW?ilAV^e~}1ir85-7vaZhRjS6(ywqkdKDg1NiwZlm;(vY zlHL?kf?^5cZG}wZPRPn!Z!9(;QYk4AanpMkUd}4I@dQIz%fe`x_La!WZTkcQ2-#(q5W! z2flHde#b3ptZ)AW8NHT0yZ`}~#^A3Wi@X0G_y0ZSt4fCfS^W8;>OIAEU;B(v4>25s z!-_`{Xg~+yO_P!jp%$ZO$-U(0%irz^|F)Bdjst^PK*oQU%hHg*?W23>r-aMxahwru3%WeZojq&Z^;x-fZQ-U}<(B`dIA}Do8 zwMGocsr{m&xhV$NdA<1A1# zbl<=I4T~hgaEBy9!-mOAEDe5)SsIituc)dV3*)hhhI2+0kb(wSpsD?|hy)KBk@uiG zneUyISbEMEtoA%%e1AGB)ARmg5>+sBQ;Iz&w3Q!L`eeKz2qJ8SfXFMwh471HB6I7* z9L8>#1x3+eyq#qzoA>+&%0#4^*h|(`B zHiSoZ9RVH8Lz#T=0Nd8l6+}C5$1134n{cofQp_`f2#nFDi4EeA4iXkG4tHtZFFrd zDI+!^UTO0%PFGOl)NhNN8}FE*P~CamoT(b_BD2OIl>`y2^cuHhm;Hsa*tuLL-CKX+ z%o1S)ZgHJA3nY3-wa_`;xwJZ1V`&#TrkyN9a6-o=BdN&dAHt0GS>`x}AAM^QQa<_O z1tBU#CAbHT=Y;fPrWqAqfmI#HNw7}6Adt&jH8ezhXn2}KuA1Gcc)ZM7yxLvpVApo& zqo`PANtn>Awd<(6%}UhHl4;eXe728JcB)SWr|~Olmw~Wd^Vd%sJhIUaU-TxSLe?Uw z=JsWf?y-NV0VNr1PYBl?LmPdR#%CQWN*O0u#aX9{TbQLU*z|gfNZ#aztLPHp%qp8C z$iWAZn7p?e^>m!mtO5yi>du~jD~{UMOTk6abk<#pVAmJ2mdH^HW@0q)v|b_TV7UVi zT0+;lOl}CvI;QOQ6p(=%cN+FlSAsk&zhyL=eGp0a_=iUfL4B@I5kCnL>LKANf6)}+ znaC+*)Y?QgkZ^wyD0nRK-LAIqJpj5l%DcR21gWnMBNJ2{3KH%T= zn@FFp6R)}D$TAKwNZhRWBn6)R*~!Dbp$B2CF@AcE&i7t-t0^Ihj@rHZFdFK3+V0c9 zfM-GqnUW%3Tw?5u+w0NwqUo^_QW)hb#b~+LJLGoNk2S=pxZ9E?19fdy ztMfq3;#6#vbEfcALR_v@r-N&JlZcF2spZbay-W9xT=1)z55Ox9sK5ippWQ!K?7@#G zQ$CgMn0M^RS|{!z{E*P@bd7@PvXO_0aa*>`6P-j;l8$V#$!q7|rcphk^QF?9XK8kG zaEm)1o8W3)IDDq@BFo` zn#5_m%H}>wWL6eTt9Wm77EPk0q8jDQqFp&Ug^R&A2bN}07@9|hpVc@-&-Z)+)n2%U zeDZe zq)luwwH1LG->k^Wi~Y}_pnW{`vgWbMaOf?LhOx$?N*aF>SNx=n7nVmdg8tiS4rR?+ zFSZXqbwxgM{AzQ4NPB2gV=O@wuxoP^!ZT+tP1Lv^DHu4$=0W;&jDSp|=G&^wu?7_9 zr{hBPj-BQt-;-PCy95pc-A)9;F83;%NTl_RSpU0iP3;q98-88Sw*-g}JF7sootjWJdRoI=QrB`gYz4=}LvoDw#8?4J?4o~(i)z-@20|;5`teis|lG% z(wYZ|SF0l^;{@JWvCCAyzb7lgst&}1zH#vJm)Bm;!(EE~RGl)3!9R`m+~PxwMj65V zHIq>15Br<`p`w=l>{{fq#&&C;-Uupo)-C8Fmba6Y(&;MO)A#aO^Movjy@^n69xeT* zU?$-fcF5c{XA@Q$ly)aK=oQHWNosYYAOqr9Glxe!GFWdP20O$pkvv-GHCT-~#6aQx zSVtmibQ+m%XQKUPV5H3c0jt;w7K?U@g;tNb%Gek^LLH}q5celb`{)8xp%5~ul8tT8 z6*EnZ#t`eHqt#CqSUd;L12+A{9MJH!IQLC-kzqVR$CW_+I3Kyevps)B%tx;G$nr!- zp z+d}n0A&`*h9W_4FA@;U~ts(XqX}c`y?R-xRCM{~_XB+mQ>6+U+hzd~N)_(XAtJc9{ z3BYx zKSXNHA4cjpOoZVmX(t*%#Yci(9YS!Fp$r4@eh6#CqD>O-Gx@5P9Fcp z6^k?VvZJNdNLQG>w`0eQX<)m>_^oIDE!q{wRX-}>1W>GmdE{D#sZuz1J10x`aEOXb zyLf|Y^|*gzjX~>S(!NqJy?3+M~QT%x52nuh-GM;I>$s0{mn?IP`wlHq~(s%6sZq85z{lFa}9KEQo?SlaP zQ`4Bm8LSN0#E8n5j!`|LQ%(sl%{|op)q9+Pr{>}xhcqMh()`FQEBXT^sD z9ss`+GQ^qC&B_TQq8Bqo~sY|x+ulQZEp=u8ADFc6?1AKrtSFX@yWx;>hq=jT8 zL`4*p=%q!!BYba|=SIVT2k8f0He3gMx3n?((dO?tu6K3r2Zz4CiTPjIfWk{Z=(3^P zfCKijp?}!)EuZOHTw}gDJy<_^AugF&|I2KrYh-I_Z*^_5E{D2OxZkS}?0N|xCg8H- z=Pxq(Gl=)+cH{drnX6z@d$oH$k-y??Bl5(H|h+{yvsIDQF z0)-a-j;Q2h1^PWIr&7LP2{5lYK&}MRYpD3ZLjM8v$IDZ{ozHF!eqR@0NnnAlUdr(= zBEk40;Fb4Ue+%08c(!r}Sb1Umn`7St?tuQ#%S+Io?}`2vb5mZi1^^fDf1eNGrsDl8cDG$&%z<{q%p77s5pV*k# z0i{xZJ9^o#8Eag?d|m(_U|FsZl=z=9b!}`xHe^h{hfITC;r;}i5Q2b#Ul;mNiT?rl zd%y~KU%6qxIy?ZzejTt?{f~e@s?hy*(B;IC0<3_kIRv)$^@&{5`Xk`4N?TVjzw7>W z>g#3-Soj}wsfVo%ARugQE=#%mGHf?F0IhX}BkBjorSScY>oS7tJ6*O@d4=mgcIIY- zmlt=xSeI_H{@2#r1i<~t|BtP~0DT|hAGXU?vv3KNZ4%IA4(P;WKyK;(1-kqq^LL;d zHs`YD*-dQGbmN*4Kw4e_(n5O;8`I{moxEmteus>weO#;ppdJFc`}(F9vHvUbPs{T= zP$$ZI3{pTAV}KR8ZhCi||39Gr7@yw(&yrX+PXqIS4agSFwRtf2_$%-gbMZUeaX*Yv z5U_S17;bj>wfFzT{i)x62W%7BADIpu)vR9M?C{fw{|E3t%J_G<6#U!tx1fPjAkgXS z6QP;@SKKT5_;3-^ag{vGVqy6o4L)2o8N!~Ua{|0%^DLd$lU_^(_Hv`k%l*>v!Mm?bRxz*JmK1<$r+wQ3$RU zTfB}5(e+o%A9mz-gTGqI>$(7dd;g00%ar_rh5u)Z-b~^Gi0u!$)bIww-&49=ov_QY zU{~{&0VeGV`TpSeQ6%gt<7Ha2tBJmTnV?Jli@onnT_!oZ%5|9p>}viQU{774+Xvsd zex?Mw%6U1ot65tv^V9sI^snDJuVt(G&i;L7ewW(iJNxC#WPke^tADl0OSi?<{3pOh zy+VEe@?6n)CO7%7ra$;)G%sO>Pky#}^(_1!fU7SXT<-un1mv}(EB^@ZfB3Hkb6@&h ze$fi@PySy)yf?dlH7xkoap4l99qlLgkIDc literal 0 HcmV?d00001 diff --git a/source/mir/generator/tal/TALTemplate.java b/source/mir/generator/tal/TALTemplate.java index 2b031894..68a2c0e3 100755 --- a/source/mir/generator/tal/TALTemplate.java +++ b/source/mir/generator/tal/TALTemplate.java @@ -238,25 +238,6 @@ public class TALTemplate { else { innerProcess(aParser, aContext, aDestination); } - - /* - define - condition - repeat - attributes - content - OR - replace - OR - omit-tag - content - * define - * condition - * repeat - * content - * attributes - * omit-tag - */ } }; @@ -278,7 +259,7 @@ public class TALTemplate { aDestination.append("<"); aDestination.append(tag); - i = generatedAttributes.keySet().iterator(); + i = generatedAttributes.entrySet().iterator(); while (i.hasNext()) { Map.Entry entry = (Map.Entry) i.next(); aDestination.append(" "); diff --git a/source/mir/generator/tal/TALTemplateParser.java b/source/mir/generator/tal/TALTemplateParser.java index ba739192..a03a4ed2 100755 --- a/source/mir/generator/tal/TALTemplateParser.java +++ b/source/mir/generator/tal/TALTemplateParser.java @@ -72,6 +72,16 @@ public class TALTemplateParser { } } + private static String normalizeXMLName(XMLReader.XMLName aName) { + String result = aName.getLocalName(); + if (aName.getPrefix().length() > 0) + result = aName.getPrefix() + ":" + result; + + return result; + } + + + private static final String CONDITION_ATTRIBUTE = "tal:condition"; private static final String REPEAT_ATTRIBUTE = "tal:repeat"; private static final String CONTENT_ATTRIBUTE = "tal:content"; @@ -107,9 +117,7 @@ public class TALTemplateParser { public XMLReader.SectionHandler startElement(XMLReader.XMLName aTag, Map anAttributes) throws XMLReader.XMLReaderExc { smartTag = false; - currentTag = aTag.getLocalName(); - if (aTag.getPrefix().length()>0) - currentTag = aTag.getPrefix() + ":" + currentTag; + currentTag = normalizeXMLName(aTag); smartTag = (aTag.getPrefix().equals(TAL_PREFIX)); @@ -127,7 +135,7 @@ public class TALTemplateParser { while (i.hasNext()) { Map.Entry entry = (Map.Entry) i.next(); - appendCode(" "+ (String) entry.getKey()); + appendCode(" "+ normalizeXMLName((XMLReader.XMLName) entry.getKey())); appendCode("=\""); appendText((String) entry.getValue()); appendCode("\""); @@ -145,7 +153,7 @@ public class TALTemplateParser { XMLReader.XMLName name = (XMLReader.XMLName) entry.getKey(); if (!name.getPrefix().equals(TAL_PREFIX)) { - smartNode.addFixedAttribute(name.getLocalName(), (String) entry.getValue()); + smartNode.addFixedAttribute(normalizeXMLName(name), (String) entry.getValue()); } else { if (name.getLocalName().equalsIgnoreCase(DEFINITION_ATTRIBUTE)) { diff --git a/source/mir/generator/tal/TALTest.java b/source/mir/generator/tal/TALTest.java index 02e63f80..64d7f858 100755 --- a/source/mir/generator/tal/TALTest.java +++ b/source/mir/generator/tal/TALTest.java @@ -29,15 +29,6 @@ */ package mir.generator.tal; -/** - *

Title:

- *

Description:

- *

Copyright: Copyright (c) 2003

- *

Company:

- * @author not attributable - * @version 1.0 - */ - import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; @@ -50,7 +41,7 @@ public class TALTest { Map test = new HashMap(); test.put("name", "zapata"); - TALTemplate template = parser.parseString("

test

", expressionParser); + TALTemplate template = parser.parseString("

test

", expressionParser); PrintWriter o = new PrintWriter(System.out); template.processTemplate(test, o); o.close(); diff --git a/source/mir/util/XMLReader.java b/source/mir/util/XMLReader.java index a1be97c2..3e2f0cb3 100755 --- a/source/mir/util/XMLReader.java +++ b/source/mir/util/XMLReader.java @@ -1,394 +1,432 @@ -/* - * Copyright (C) 2001, 2002 The Mir-coders group - * - * This file is part of Mir. - * - * Mir is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Mir is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Mir; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, The Mir-coders gives permission to link - * the code of this program with any library licensed under the Apache Software License, - * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library - * (or with modified versions of the above that use the same license as the above), - * and distribute linked combinations including the two. You must obey the - * GNU General Public License in all respects for all of the code used other than - * the above mentioned libraries. If you modify this file, you may extend this - * exception to your version of the file, but you are not obligated to do so. - * If you do not wish to do so, delete this exception statement from your version. - */ -package mir.util; - -import java.io.*; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Stack; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import multex.Exc; -import multex.Failure; - -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.Locator; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.helpers.DefaultHandler; - -public class XMLReader { - private Locator locator; - private String filename; - private boolean namespaceAware; - - public XMLReader() { - this(false); - } - - public XMLReader(boolean aNameSpaceAware) { - namespaceAware = aNameSpaceAware; - filename=""; - } - - public void parseString(String aString, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { - try { - parseInputSource(new InputSource(new StringReader(aString)), aRootHandler); - } - catch (Throwable t) { - throw new XMLReaderFailure(t); - } - } - - public void parseFile(String aFileName, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { - filename= aFileName; - try { - parseInputStream(new FileInputStream(aFileName), aRootHandler); - } - catch (Throwable t) { - throw new XMLReaderFailure(t); - } - } - - public void parseInputStream(InputStream anInputStream, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { - parseInputSource(new InputSource(anInputStream), aRootHandler); - } - - public void parseInputSource(InputSource anInputSource, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { - try { - SAXParserFactory parserFactory = SAXParserFactory.newInstance(); - - parserFactory.setNamespaceAware(true); - parserFactory.setValidating(true); - - XMLReaderHandler handler = new XMLReaderHandler(parserFactory, aRootHandler); - - handler.processInputSource(anInputSource); - } - catch (Throwable e) { - Throwable t = ExceptionFunctions.traceCauseException(e); - - if (t instanceof XMLReaderExc) { - throw (XMLReaderExc) t; - } - - if (t instanceof XMLReaderFailure) { - throw (XMLReaderFailure) t; - } - - throw new XMLReaderFailure(t); - } - } - private class XMLReaderHandler extends DefaultHandler { - private SAXParserFactory parserFactory; - private SectionsManager manager; - - public XMLReaderHandler(SAXParserFactory aParserFactory, SectionHandler aRootHandler) { - super(); - - parserFactory=aParserFactory; - manager = new SectionsManager(); - manager.pushHandler(aRootHandler); - } - - public void setDocumentLocator(Locator aLocator) { - locator=aLocator; - } - - private void processInputSource(InputSource anInputSource) throws XMLReaderExc, XMLReaderFailure { - try { - SAXParser parser=parserFactory.newSAXParser(); - - parser.parse(anInputSource, this); - } - catch (Throwable e) { - Throwable t = ExceptionFunctions.traceCauseException(e); - - if (t instanceof XMLReaderExc) { - if (locator!=null && filename!=null) - ((XMLReaderExc) t).setLocation(filename, locator.getLineNumber(), locator.getColumnNumber()); - throw (XMLReaderExc) t; - } - - if (t instanceof SAXParseException) { - XMLReaderExc r = new XMLReaderExc(t.getMessage()); - - if (locator!=null && filename!=null) - r.setLocation(filename, locator.getLineNumber(), locator.getColumnNumber()); - - throw r; - } - - if (t instanceof XMLReaderFailure) { - throw (XMLReaderFailure) t; - } - - if (t instanceof ParserConfigurationException) { - throw new XMLReaderFailure("Internal exception: "+t.toString(), t); - } - - throw new XMLReaderFailure(t); - } - } - - public void startElement(String aUri, String aLocalName, String aQualifiedName, Attributes anAttributes) throws SAXException { - Map attributesMap; - int i; - - try { - attributesMap = new HashMap(); - -// if (namespaceAware) - for (i=0; i 0) { - throw new XMLReaderExc("Text not allowed"); - } - } - } - - public static class XMLReaderExc extends Exc { - private boolean hasLocation; - private String filename; - private int lineNr; - private int columnNr; - - public XMLReaderExc(String aMessage) { - super(aMessage); - hasLocation = false; - } - - protected void setLocation(String aFilename, int aLineNr, int aColumnNr) { - filename = aFilename; - lineNr = aLineNr; - columnNr = aColumnNr; - hasLocation = true; - } - - public boolean getHasLocation() { - return hasLocation; - } - - public int getLineNr() { - return lineNr; - } - - public int getColumnNr() { - return columnNr; - } - - public String getFilename() { - return filename; - } - } - - public static class XMLReaderFailure extends Failure { - public XMLReaderFailure(String aMessage, Throwable aCause) { - super(aMessage, aCause); - } - - public XMLReaderFailure(Throwable aCause) { - super(aCause.getMessage(), aCause); - } - } - - public static class XMLName { - private String namespaceURI; - private String localName; - private String prefix; - - public XMLName(String aLocalName) { - this(null, null, aLocalName); - } - - public XMLName(String aNamespaceURI, String aPrefix, String aLocalName) { - localName=""; - prefix=""; - namespaceURI=""; - - if (aLocalName!=null) - localName = aLocalName; - if (aPrefix!=null) - prefix = aPrefix; - if (aNamespaceURI!=null) - namespaceURI = aNamespaceURI; - } - - public XMLName(String aNamespaceURI, String aLocalName) { - this (aNamespaceURI, null, aLocalName); - } - - public String getNamespaceURI() { - return namespaceURI; - } - - public String getLocalName() { - return localName; - } - - public String getPrefix() { - return prefix; - } - - public int hashCode() { - if (namespaceURI == null) - return localName.hashCode() + 3*prefix.hashCode(); - else - return localName.hashCode() + 3*namespaceURI.hashCode(); - } - - public String toString() { - return ((namespaceURI.length()>0)? "["+namespaceURI+"]":"")+((prefix.length()>0)?prefix+":":"")+localName; - } - - public boolean equals(Object anObject) { - if (anObject instanceof XMLName) { - if (namespaceURI==null) - return (((XMLName) anObject).namespaceURI == null) && - prefix.equals(((XMLName) anObject).prefix) && - localName.equals(((XMLName) anObject).localName); - else - return namespaceURI.equals(((XMLName) anObject).namespaceURI) && - localName.equals(((XMLName) anObject).localName); - } - else - return false; - } - } - +/* + * Copyright (C) 2001, 2002 The Mir-coders group + * + * This file is part of Mir. + * + * Mir is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Mir is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mir; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, The Mir-coders gives permission to link + * the code of this program with any library licensed under the Apache Software License, + * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library + * (or with modified versions of the above that use the same license as the above), + * and distribute linked combinations including the two. You must obey the + * GNU General Public License in all respects for all of the code used other than + * the above mentioned libraries. If you modify this file, you may extend this + * exception to your version of the file, but you are not obligated to do so. + * If you do not wish to do so, delete this exception statement from your version. + */ +package mir.util; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.StringReader; +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.ccil.cowan.tagsoup.Parser; +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.helpers.DefaultHandler; +import multex.Exc; +import multex.Failure; + +public class XMLReader { + private Locator locator; + private String filename; + private boolean namespaceAware; + + public XMLReader() { + this(false); + } + + public XMLReader(boolean aNameSpaceAware) { + namespaceAware = aNameSpaceAware; + filename=""; + } + + public void parseString(String aString, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { + try { + parseInputSource(new InputSource(new StringReader(aString)), aRootHandler); + } + catch (Throwable t) { + throw new XMLReaderFailure(t); + } + } + + public void parseString(boolean aTagSoup, String aString, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { + try { + parseInputSource(aTagSoup, new InputSource(new StringReader(aString)), aRootHandler); + } + catch (Throwable t) { + throw new XMLReaderFailure(t); + } + } + + public void parseFile(String aFileName, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { + filename= aFileName; + try { + parseInputStream(new FileInputStream(aFileName), aRootHandler); + } + catch (Throwable t) { + throw new XMLReaderFailure(t); + } + } + + public void parseInputStream(InputStream anInputStream, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { + parseInputSource(new InputSource(anInputStream), aRootHandler); + } + + public void parseInputStream(boolean aTagSoup, InputStream anInputStream, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { + parseInputSource(aTagSoup, new InputSource(anInputStream), aRootHandler); + } + + public void parseInputSource(InputSource anInputSource, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { + try { + parseInputSource(false, anInputSource, aRootHandler); + } + catch (Throwable e) { + Throwable t = ExceptionFunctions.traceCauseException(e); + + if (t instanceof XMLReaderExc) { + throw (XMLReaderExc) t; + } + + if (t instanceof XMLReaderFailure) { + throw (XMLReaderFailure) t; + } + + throw new XMLReaderFailure(t); + } + } + + public void parseInputSource(boolean aTagSoup, InputSource anInputSource, SectionHandler aRootHandler) throws XMLReaderFailure, XMLReaderExc { + try { + XMLReaderHandler handler = new XMLReaderHandler(aRootHandler); + + if (aTagSoup) { + org.ccil.cowan.tagsoup.Parser parser = new Parser(); + parser.setContentHandler(handler); + parser.setDTDHandler(handler); + parser.parse(anInputSource); + } + else { + SAXParserFactory parserFactory = SAXParserFactory.newInstance(); + + parserFactory.setNamespaceAware(true); + parserFactory.setValidating(true); + SAXParser parser = parserFactory.newSAXParser(); + + parser.parse(anInputSource, handler); + } + } + catch (Throwable e) { + Throwable t = ExceptionFunctions.traceCauseException(e); + + if (t instanceof XMLReaderExc) { + throw (XMLReaderExc) t; + } + + if (t instanceof XMLReaderFailure) { + throw (XMLReaderFailure) t; + } + + if (t instanceof XMLReaderExc) { + if (locator!=null && filename!=null) + ((XMLReaderExc) t).setLocation(filename, locator.getLineNumber(), locator.getColumnNumber()); + throw (XMLReaderExc) t; + } + + if (t instanceof SAXParseException) { + XMLReaderExc r = new XMLReaderExc(t.getMessage()); + + if (locator!=null && filename!=null) + r.setLocation(filename, locator.getLineNumber(), locator.getColumnNumber()); + + throw r; + } + + if (t instanceof XMLReaderFailure) { + throw (XMLReaderFailure) t; + } + + if (t instanceof ParserConfigurationException) { + throw new XMLReaderFailure("Internal exception: "+t.toString(), t); + } + + throw new XMLReaderFailure(t); + } + } + private class XMLReaderHandler extends DefaultHandler { + private SectionsManager manager; + + public XMLReaderHandler(SectionHandler aRootHandler) { + super(); + + manager = new SectionsManager(); + manager.pushHandler(aRootHandler); + } + + public void setDocumentLocator(Locator aLocator) { + locator=aLocator; + } + + public void startElement(String aUri, String aLocalName, String aQualifiedName, Attributes anAttributes) throws SAXException { + Map attributesMap; + int i; + + try { + attributesMap = new HashMap(); + + if (namespaceAware) + for (i=0; i 0) { + throw new XMLReaderExc("Text not allowed"); + } + } + } + + public static class XMLReaderExc extends Exc { + private boolean hasLocation; + private String filename; + private int lineNr; + private int columnNr; + + public XMLReaderExc(String aMessage) { + super(aMessage); + hasLocation = false; + } + + protected void setLocation(String aFilename, int aLineNr, int aColumnNr) { + filename = aFilename; + lineNr = aLineNr; + columnNr = aColumnNr; + hasLocation = true; + } + + public boolean getHasLocation() { + return hasLocation; + } + + public int getLineNr() { + return lineNr; + } + + public int getColumnNr() { + return columnNr; + } + + public String getFilename() { + return filename; + } + } + + public static class XMLReaderFailure extends Failure { + public XMLReaderFailure(String aMessage, Throwable aCause) { + super(aMessage, aCause); + } + + public XMLReaderFailure(Throwable aCause) { + super(aCause.getMessage(), aCause); + } + } + + public static class XMLName { + private String namespaceURI; + private String localName; + private String prefix; + + public XMLName(String aLocalName) { + this(null, null, aLocalName); + } + + public XMLName(String aNamespaceURI, String aPrefix, String aLocalName) { + localName=""; + prefix=""; + namespaceURI=""; + + if (aLocalName!=null) + localName = aLocalName; + if (aPrefix!=null) + prefix = aPrefix; + if (aNamespaceURI!=null) + namespaceURI = aNamespaceURI; + } + + public XMLName(String aNamespaceURI, String aLocalName) { + this (aNamespaceURI, null, aLocalName); + } + + public String getNamespaceURI() { + return namespaceURI; + } + + public String getLocalName() { + return localName; + } + + public String getPrefix() { + return prefix; + } + + public int hashCode() { + if (namespaceURI == null) + return localName.hashCode() + 3*prefix.hashCode(); + else + return localName.hashCode() + 3*namespaceURI.hashCode(); + } + + public String toString() { + return ((namespaceURI.length()>0)? "["+namespaceURI+"]":"")+((prefix.length()>0)?prefix+":":"")+localName; + } + + public boolean equals(Object anObject) { + if (anObject instanceof XMLName) { + if (namespaceURI==null) + return (((XMLName) anObject).namespaceURI == null) && + prefix.equals(((XMLName) anObject).prefix) && + localName.equals(((XMLName) anObject).localName); + else + return namespaceURI.equals(((XMLName) anObject).namespaceURI) && + localName.equals(((XMLName) anObject).localName); + } + else + return false; + } + } + } \ No newline at end of file -- 2.11.0