From 175fda9cdb16baea5d7a1bedc862a9c65c085bf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Trukenm=C3=BCller?= Date: Sun, 17 Dec 2023 12:36:39 +0100 Subject: [PATCH] added set() for channel-based and controller-based effects - #28 - work in progress --- midica.jar | Bin 870913 -> 875702 bytes src/org/midica/Midica.java | 2 +- src/org/midica/config/Dict.java | 4 + src/org/midica/file/read/Effect.java | 516 +++++++++++++++---- src/org/midica/file/read/EffectPipeline.java | 418 ++++++++++++++- src/org/midica/file/read/MidicaPLParser.java | 12 +- 6 files changed, 842 insertions(+), 110 deletions(-) diff --git a/midica.jar b/midica.jar index bdf05f80b31ee976c7accdea4bbff1deba697c9b..53dea13a51f6ff5b705507d758b2823bce27d9ec 100644 GIT binary patch delta 93076 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 delta 87925 zcmZ5_Wl$Vz(>Cr9+#MG8;1&qBxVt-xyTgXy4vPhMcb8zn-GaNjJA}Y@p7VZHugv_I z?yKeQ>6+@Py1J#ECn%W*T}2)i4h0Gd2?}Z`F)|UI0ro!+{vUw;#7J$Z|8c?nBRjcT zv;S}Z2Rhh+#K@!%7@9_L=%3L4Q5rvBNMZgPg-`kyO=Gt}B281;L_+|xncJJXxjASU z>XS&}2GT=&HnOlP$}uASol*PBsVh;v_j!$PGu2$;(Rrfs-DOpcW5gnx_IaK)92Y%z#$zcNE5T5m3Mfj^z?@z6S zR+h|Ph%V#5^3wEZD(m#&Wa*I+JT^{YO{bH45ti%)b<1}%bgb+A_j!1>@VxHqam@_(w|;VahmkCC-fKb75fLYiaa9Hb@;hfBPBn)Yq${93K+VwUX zVykEmv_8zghM);(-qyKa(E0yEtr~##{U56FFtpwOP+`ZQ{r**3|A~cx`|m8BGth8| z|NFGo=Ot)^|BC(Z3cC0HsUT?;`qTd@t#x$+8twmJY0mrqI0JT|ssE3m6}%6v_zbol?rY+*^$ww9m?TUV~3-N^neoI?Lj1_)epsMgG^AhH!+2-O9%Wg9Gy~?i>t9n%1KV1E1!|4TJI@sP&)jH^BcZ z{gZJX`CqrX16Zmw_G2{sR#8b9%YT!n88RUMS7__76if-~f2C7};rO?he*?r4Vc=Uw z|4IIDqg!V+VayT!wbq6r{u_$YYG?ox0{5TL)Nk;lsirUlU|nSY9(C=E9sbzbIaCHTqk*%yQQomq~#!#K%x=abNIX{qhBz&LsUH*HxlDbyUx|WvRd&VSk_Fxm=)nU z)VcGJ=-7wpWn8*$T71r8Y*Kd4$X>uR$5KtWISs80ZX1s?l|^L3YQqf;!J53-(P5d} zIdM$7_@2F)^I%8gvM08#LSj?Y%di4;P#O@rKZJBDn8eVA5BxM+S?3SBnd{#%oUH-M zaO1mpN-oNn$!fcCVkK4mU~v|RLdHQb_!N)uyz%bbso!B;>2R+VPMjs)r{c9`#Z9|A ztD|oTCNIgGk1B`x&5=zoTW8fNv6G7bRlHuvkAPWTOV-H>Wdc&8(=6_96gi2-kfh^k zV(d^2Hx7R&%b^Xs!B(qYa0icnpU&IX^oR;ya|~MDpP^p$sZ&3=; zi#!AjyZWAef55IKaDLEb_iFo&ZOF8}_^^Wtw$1T@_s7Otc%YIQxpJ#T6X3q9go6PU z(Cy#&1Ta!F%rHb!Dey}KYA57sDmlgOr=nKP43*VjOlA#MbGxVXo?2+fOkrrkXT=p2 zYNJ*qh8SX7=IiAulk5-&IlIDz9W|&2nJ^sR+Pw3kHUS+I_L;tFVzl<_S94awIHcEu zeV8yD4hmqFV1O=}>*AtdWpKVO zv)`b)1%nUCei}_pKSWR2j)!I##$2uMeS zd$iEgh=;JGI7@ov5(5YlaGTFl<1D= zWm{=;F}=AIr&!1JUSVMnf4k-C1D;&*{}g(>HudhH6=#220i6;BS$|IUggGoKKZ1|5 zVkj*do12e@VYe*PgMEk+t1Svcc-x#&Fx;o5|ETEgu|cId(aqOWBFi^1=K^P8@-w#k zk4_#M>>zR9*Kc9+XPX`Ymk+?zs4uYHf}?@z+Ye~^saBPwo5hg7slBbA&kcy`=Qd0N z7)*vUpX2bh@Vrq!Qo9A3CXS;3)DBz+dVFC*zSP}X-P}=zfXhJqERUY}&suL{+u_e% z5{n0@A&rjOpN=-8pc^iseA>Ryy1lN!Tx}aF70gP~k}J6n6|)06GRMFveJigbolb*b z6#s7@yN1V3eK@wCy!>b~aaL2hjX&cCv=Jr38cUN)0CdZ z$^0(XM(cN6kz*qxPwNOCw&qy5rvF}CUgJH(G z?ysl^rPvu}#cJZ}mIe=NVC4=sH#_b{>grO|4Drt|VoifWejOGo z2gD|p0v({1Jb?y-Mjo#r>>ZmbecoK=vaCaw2-~AH*afg<@e4r(cJt{>d%M6KK;DW( z6FbVTU^4Q=AyHDz83CqStZeq@{F(mcL)f#8z=o2KSMqZC_nPh79DK`^uoE&vtKsk_ z$pndxq~BPP&4AT|25r;|Dtad?H)Y`|sp>Dyr6IDH(esa>&zsAFeak`X$);DRw)7nX zay6)vtIOcr>{C#AR=B?WJgnk?w9(}m42`b=shz*Ib6wg9(I0q2fEOVAlT2IT+SF%9 zOxz;rsR~2at~2U-pzvx|pbH^q?`pf80k59Y57&HMUf+r=Xom)j*0t7kU3KbVT}B(c z>O-CV`-S>JCx5T)YBHN5REPD2?~5bmKh`!HTlB#+_U`EU_b}uzYycQPj#M@Fi zN@~;gJC;0$1ZqCZ80U;*h@T}n*`;fDnpiu_YfD11zjx4r(rR4;oDEc3L)=~fHJ>i9 znpD9BUnT6Qt9NqZLTGtWR|_7nKQ9~8+hm3y4mOaiQ`-DgPz~;{XIDoL#PL* zD}7y!)ug%c$G|f*77V+}T1Uun;Ge}g3gMi7p6hb{Mr{XWgH_s&JhTOm|M zVfDMxrcbrcjhK(!w$gd}=dH=L#=3Tz2j-Zr{6_js(((nz<4%jHEH=Mh{(bSCW{ODa zjugkeLKh)Blnb-J7}}wKXrR#O1H*e0|fsDE_$8aBkF7w{-&__OO^f3apvdo zD!M3OqPtal5?{BOQtV}YLehB8s{6_d4t7i!umt_| z;;5U4Yp7Dq{Ajd$g9QE3@xEZTzonj*-_Go4VD@@mQrgLWieS4eeYpFrUN-6M=!Kw9 zwo=^5KDwYleiGlwezo9>Z+52y{Z>_y)57Ra_gh237o+S>eflqDNl&NyGVZr~f-j8O z{y=()+0p5feFFE}alw}#N}@GMVC9qjCHGqrkPqAyNHj+{5-bvWm97@?h2n}ZG0fk; zN+QZTZBja*c(9C5H`aH=YJRCgS4^^*B*>Fz8mUS>6f2@UIHniDBN7W(hCx#&Tg?Td zzhFz_+@)s@=UJvio z?ULSh;jw|sQPU;~lCVv};x90AfXh)|A`Bv!Prx9YJesnYk57+%b%|E}l43q@+(`Vu zcaJD85=w!Usw5ElL3z#7-xrU()fawg6vL{Rvr2OW9*sQ7<=NkVQGIP{d_&ECi&T1# zReI-U%pJ1M0)L@+9o~BeyRpAt(Y_D$&D^Qc$l3OfRFw;Wc(m2;=1xuCMU_tH80kUJ zoE_W?dmO~Y>4vG?=CHBkPf?zXH;P}aF|AjAEotI~6%wcABMds5@!Hm7KD-@$#nj#< zW|2Z%Uq<`n*%$q1yT9;ykH{cY8*BRkX*b+vAif?g*F@kw0*^l&oMO?>L>#y9rnNcX zG_0)-zo>%#b$^&=K7^y$oE0#mAT;yUi|VW2tX%kvG<#vTkwkKLxZO!WRbl+Bc+ar! zD+=dejFOa88W##lve`fimpik3g39`_s+LLN+;>Ge0$%2|I;nOt{S=Yq64IfEG1>LJ ztX~)hrERJ&xO|M(V3)?xxa^X|wn1*Z){L572Re2~zR*u#@&H){6JRQ|ihZ~B5%%96X&bYSQIc{patjcyy=H_FSEf8vPc zca`@Q%TQJ@E2DF^^EZqVxv0#8kJX#T&a@##0VSMx^&3$g1sT5+wek*mp1itw*Q^qs z=VT=jsYYDUXE6SqD$Yl-G6o$@TFuG zXW4oMYO6=rpynCsE<+RMru`9X$NWL2Tu-JZvc{op*F{PP4K9u%{-CGN(IVGrK$u`lZAW>r8}di<>_;kdY9 zbiXT};!@7&^#4^QiBH41wm66=xbhE-43U}o{@aHu2zWy$YvYJz~BC+B1P;K{|(c^R< z@hN*N8AFWyz`98{2Tz%c_GFya7iGN-I~5k9gs)BC{P77Q^vc-^ZCKORE#D=rdJDjh zvLptR9oA2fs^A&4B9?RdKwOeJiS%N*51e0hLJs8Iv>dz5=0_w5&6g8+H=`K?{&1d_ z9hq^5$42>-<=NOK4fPM1s`p==D3$H+-klyUk$f5x_^G7=byu#cpA7S3-tC9vQ9GiP z5{htTnJGr4jfX8p=xsREOF`m8i@0J30Y$;w(jqoQb zI6Lp3saG9m87NEPG=7-IVZ1h++4!P&_!p6bYw)ad7A>&&b;YE4ijsZJgomWbs45(+ z#k=fZPtL22e_$RyWtK3zi!;=$r)a#()l~4sJ+{6*r0;Kjby!Nm2)gvN&%#~WHk5x? zQ~pRBRabICL`_AZ;$MXpV#Oxi&IwjPa;?}_`hD>5oJ8t-!n$@qvl5AgkjD@5`g@7n zRwq6sQFX4JPi6a8vIbm=hgseN#=e8#H|@T5XOuJr^?JAi1Ifv~x$^I*B`*fFtYQhP zZF!(!UX0B@WzlXs2vfm^-jTli1danwFE6|f2V=K_Z>hPtzdij2O)0^wDj<5iIo7OC zUal=`QmDrmu6Liso@Q)2(iZO;Gs(AmSNd0B?Oa9)|_=W_E$IlUf?|(of z5L2k!fkZOO%#9~?Y7#QZ(nDIm@8n|QnE2*U$H;wE1r%x-=*zVQB!-jYk2P6C`8n=M zJ%8)Q2o6^!{3Q%X9JV~dJd*j=IQV%LTlCMzf9Szjznb6mSWr;nwEsm9;zA)IA^m5; z@V{0Hj8JKqwy*?gc78CpU=KA_<=-l}?`)aO%o|}-ibN>Km@STK@ctQ`R1u@V1psDD zyw}D?+p@>FgWW#jb1?U}A;i7LFJs=0Jd$+6_c@!t-MX)YjHjoKx4L1M2XJuIfkZ(4 zwlK8*b1d*QSuP^%k;fCz8%yG_9L?fBhDx)N!h$ol3i@{+8cWzI7>J&ge=Zv@6mWtn zgS_eH`5JI~K2m>eNlA!ym4Fy@O{60fEsTO-#cD7dTM1=E7a6y)_q@fEa%Litj2x>HnV0At?e5B|1}#0`R_;nU&ZkEvbMv2J-K_Hl z3O3%NPKVX20t*Dg=&~)pLg6P2Q8(y(4dt&0c~58nRp=HTVUd3v=ujb4k2aBfP^FKi zA>?zjyVuePNt9l;L`JJltT`zICy=!SA~Pg)WH3mQSAcXIZ~ttm5Ru#v2sVjfpr8W& z;hq1(Isey3^&hVJ9}<%)?LYiuTK6d$dYV)OO#8o#=s!#@3DUnDWMUHhe{qm$)@Nv# zt(u82>}dZQplxC4(yFsz@W3L72Fb&>Yu&DG46X%cgV<7at%UlLVp3RWdG&xJ^%8nY$TsGap-iU zz}ZcBP9ai2WR*~HqA27jP6wNk7g>i^5yB>USsfONQeQS-ElwE;sVNQ*SqdGNG&esK z3nbQB(1bYB2170vSSKeFha^EwoN9}6b;R$)p;+2 zGbQrSW{+6YPFWW0Yg%pSo*r7CfwbEQI0^QE=LuAjH}{|>wqrr%WAObV`~1Gh zN;?iJ17KBCsL!mEZt4)n(rf4oK+tZ-TN$!|k{Ml0;Xp3j%JU34={XMBup|R})PY@Pi38;2Ieg}?S>GI8|~ z*jeLhZcg3#iyDXFoagrDMFK0y*0UMLdD~qfZgq$}WokbIX8ZD6m zaKkdD9R=GDOhe}z_?I;_<++lp9m#Sbmfx9L5#X}BMJWAJlf^d+P90h+B26AMcl{Yw zg$Ps&syc}}RkK$+sPr)Xx;T95m$ABg(alCXo3zgm{+V>698YF zKW1qenjiJOp?z@VryL}>9f6u1K=kYGeJY6~t}>NCNcVymiqly-gTlY$S`%uq*@z(+A~81^`~}?KiCeysGuL7Fed@BWqb#gt@7FT69p#IQ|ry zc9)unU0LOU+w;V`5V;3<#x7qdH|O^Y8@u z?7-C4E&*Nf)M{YKoEePR|KSY;X*ZD2!BecPxrTWIZMqN=EI($Q-oEc@p+5~F`dCXS zd#Y+$Ivs65P3KbD>IlbRfVOUTTNM%k2DYc%Tv&*oL0^`uHQZIoJ~{3BC)d?SQ0h55(V?Ah&G<)5~RXD5Q;KRz*@VVAoVRx=7KE*k%JTH}6rs3~hCy?e%1k6XdQ;&S++C~G9MyGEHu zy({MoyaL|xLN;Lo)QZM#1vK;F^QI3_H7Y59x8z*@aIfbaEJ&=3HDxS}+HUuev=me? zpJxct3{WaRfpX<lHrv2ZMM~P5O|n#Cw8?8ahS7PjF?SZ}4zq zkPw%oL`qsqAQZEcT_5hi8YCk^S$>zE+DI-V?72p^)0R?Vt|nqyVRslz)g4}x9&wd! z@10M5pV~x^{rZelQ4$Dw6z_wg5a-FJIf0@@d&Ekvk^qp!gqY^38r@cL`j?VbUjRmSxy@S(;Ug9{<|h= zZ?lSEOS%`Mt^PK+lknF4jhyxbg*IGln5#k>6%ZC``i2yR)7&r^tVGLK%HgNr(|a7*$i}O7G|rR^|5|S+ z1qzAJ?bYqe&VXqJc|L5isZV5qLg*QidSha_R3{*yFe+@&ZdBi3icPM6U|J5%NqfbL z6t9T!pe$a#+OYC0DnNun-U*ta)(_y6c(0|| zFjCSgA)5vZs)lUF0j}U!ujO_r`8Ok5WPR!9yuSa?#2Z8%mmg2U+oCyPtNNj-xqL6G z!<7LG`ULc)!1qVG?{+mpZiBB~rh$l7?3Xt&w(&|NCSDg69j`Gw^XfJemMmx=>&oV; zhgR6Xf?;&f!{d_EXak_-yI``7)zET8Etidw?maXeBNewK?F!Fv)izV_6YlAc}9S|N{Lju1yO`E>ht&&>D^(5cB75Qi1(?!b> zFxx#<7a7x>_!0JETh<3A-}?=`!3C=s=$%l4!HM_ulJ6+5@W5iX9{E@1UC&C6>M8~e zf2e{Fh&x{%Q4l$!dwSnzIwJ8-D4dgRs)?`P8PmnSUo5Ie8CrrMD-o&W#QK(ofTV~i z=UF#AuM!KQh|8UPJTK)@U&@ZwXssK*Ga6kd$){lGSsMq*6{yiyDn`T-kSb^d`E}U@ zJnD)mgsbQZvJtQE7glJ#|`>3%-SF;Q$rL}>`@>kcGJ*(%$(M8yks|xd32%LXVH_X_V@+S z29LJ_w);mwt&nFQ%I-cpx4uJp-cQKjVxzxPZ7H%^QO{Cr-F2kR5t_gjq#I2~Da(#t z?9qyZx_O#o>~Vm8R7lETEzroBbxM>mpC)S<*qjADi!3q|T8Qu& z=IHuf-RI8;M|o)u`0dddlEfyWDli?b6aBwi9BUBrr?}H9Lkpo}RYb`yGeYvUO-n(l zdC~B;=hF#jA}B(rPo`o&$e6%J9Y|ThaegZTknGU=JLh<$`##JVLr(i44o`CepeMN+ z``kQrT2wyX8q^?SCmcwd|3ZnhR8ajJ2}+atIn!v3*ej2c zHGN$8x2}eYHv4*sZlwmh1pltjayay5-sFsYa-Je;j*GEMaK-8R+sWV#&4$cG&z~iV zu5fC7EplO(p&KV?TLYu{V|^}E)~zF}v=Uo=o`Qd~+SoCN_eQ3rPemXXlBZpIi;QB~ zP^w=+Kw0-5izn(AamCF~BRJy06{NTQ5Rr&|8IOL>ST&|V3q$2N<2>Kj=@PhL#= z@Te%%>;`4|M_Nekf(2M7IP_0gYVrgIV|{Mgxh`!_86r{3b*MUSJ5aYI4d91$Qfn(1 z!XElZz}+&^DD7OcsOMycUeTUU)=54rFtTe8ZMldu;w2>NWPaDg-wN8_6^$u z&FGA5y)w6E`4n8*Yr4g8$?{Q#Ud((X+k^b*jAnf;kB1V%v3$MTz3cDZ}or&kXHs44TCTGzRm$HQHc#Y1K*KcH)!l=oO z9folTe+}!Qm3SJ8wEA((b-cl64Jpjs`}$eo>+f%5P_@z2uIjGWUOyTDpGn^Iuc$R@P-)b-c98i`wN#M>|@@(h&O&!X~`i_-K|Ox zJKVY5&+&BjGy*WPDu27_O=`m}vzr()XnMBzbC1&`ABI=vL)S3eIxZ3) ze~$BWN5G;;R4qGVKADypJ^6m*Ay*`|RusgY8&QE%}ZTBAHpD z3H{L?ey)TpdyiQvH*Yg-US*=Q1Tp*J9WAGK>LBlafOn_VZI&328bC#sDH(*Y|8i-) z@r8Aw{MMHy*B!$i{tIPE3^!?E#e{XZj~Va<$l8DEJ3~nNH(|fhn^5j60Ymzn>}U_q zH9z=d0kTvkA7azVpoR+BaS)S|r>XhS8(q2<{PF%OA5(-5agtQS1bP6(^a*7{0>C1I2DgfG2_-th`PCE+CMz_6FDT=l@k2M8 z2unX|4+{Zb5Xw(57GwmJZub%)nxT0=Ts=onDQlbN(Y*+D%tsAwc^m(0}f=pZQ_{nW@bTnPNG11cbJM$7kmTJ zJDzR;7BGaJ1~T?c?54>F!uLQRLEUUr*EMLU`A(69Kc?BnjD&!M00#xWn8>~7qSW-T z1_Ra?o;SVY80A!pm-_aPeD5RJM(|{_uxQ_Ts!f;P!xEO`9f@gLRwgP@VB>!4wZ16{ zfun5{cb^{lL#tzlyN8Lg(~*}>r{?X2x8)*pduIlX9W}|&@d6CO_Dre{wb|WI6Nt?I zVU0oV7qg^EFDUV1hd@36F2_%?1}qwthR=1Ee*oZb5*oHA3r`dWXUjEQIN(q6??~Y@ zJPw9!D@pWzwNm!){Ak0!+L6ERb3;E=Ck2ARl_ zSbv!9-`|-yan}NjZVBo(*tSbgJuY~`$ge(ilg2^3uG)+Hu_{%yvhRWoo`z(OY?@&T zZW223ZVvCf%j1g7+H0hJI^b^C2PBreoc$}Ih5oSz6#odc8)1uQom=GuDl#HDVv*G8 zUUD*FL5hmdnUso-?&LS-@aFdJ7T4 zR{+bs6L47$WMISJc)Kf_Hz0@?~MzDTbo=&$rZcJ~|s4XMhd zp@rzg7f^u?c%pv5fblRATW52WPR^X42fysAd{HO9MBPgua)L0rJbOX`?%Ah#SSw^# z^GZv#6c#PB#CfI`U`UB6Y}MiA%V-bAr|j~(bkax{$N!XZ zMD&!Y!YSrQ9xjMa)&GKd8_to+KNy=be@|}?fUYNacMD>jQo$ducb9O<&H)Urv}II< zIm1YE$F;c?^DA!`qdzB0@<&xR)f(43U+qZIgX0X_RidKnGMd6ty$dW9&8u`37quAK zh5)(wB`TTXUUcj!yIkk$VHu+kJ)NOJ5=ss2pxBL#`2{()} zpK9DCCMPSx@$;vpdywUX!|9fPT2H+irJiUik~shl0TfOHdIx zzYDxb-gR{Ov`oe`nZ54L=o+>ci4q%{ijP%V6n|WtrU!9{vN2 ziVxtPKB2l$XB3slsJ4+uVX}vYHcl<%!bAuqHjl(a!q=xLuOCdSYjy#)8P>$xDB9Ml z8Oz_GYYD1o>XqxbEYMkZy9VG|!TR(h?fUI|RB?C1d_9j>dqb_awI)}MkHq}jh}*MW zk%|&qYSKZ{BX^S-pK$*O2G)~+k;P?_bsWsZ+XT?+gG)XDgXBeC+V1|WI>frA(o?() zdD)vS+%*m{)lO)dG#L_NNvZ0Z1hGd0XJ)JqJOUij0v@(b+=A9vZF%0bh!YruS+g@C zroetlA;4d9MC2B3n5YD(vkPpovlzCygej%2zqVg(wL$LcB$umJbtxlY=)+=v!=e@5 zj^JFQ^)e40nOxg_?pE%@?ME1^86@9F6P^srJ^{=M$wbBG-ls&_g3+<1Tc=yvaIHSKq_G>{8&)~who2h25KEg9x`3ZMGgcx z8bq>|2$@gO%R?r$F;2(eWJ+HZd)Qr#4hlGyAr27Q@HS$=-vXeU2dd=T_C*YqbdKe| zd>~y$#O3G%0v0wQc8o`i>KtLL)a>})s^q#3C`Q77csnZZpm`RqfF5XGuqLPW;b6|C zkf%I1bLvbJGlA>mOO37=8JqtK+{=(OWZ0aW!E}@i0qDsnAdKCAY zkYJX|tw--W^*LBM);OHUyZ9(}JK***Q2pYi)WD@N(FTzWnlNNPVnlNfyW4SS&*V8w zgp$?qB_$@vXktO%(L~vs*9%gXjZ&DBAogXI?H>yZ6ZM*t!uHL|nZxT%PpuP$ zcq|bi$_7TeaIoY|kp_9iKzmd}qzNZO&Do;IqcC+@V~Hh8n2Y|jAu~45=_GN>zmg?6 zNOn0BPj5EEh|!WoErj(=+Hrj2T$C#$j~4XA%AKHUQ6&b~7q#E^{B4Yt5HFO=8XbkE ziGNKnC)wteKA7LFpE>SvYS1gH$H;VG<)^X&VG^cw$oqnA<2 zjxX8(Z^t8?ov;k?ky*lw#NJ!&Ar)m{3cFMdYLN?7%i2P91yczP*gTrMg}Ph@5^~wl z*@Ew+)Jtgy<0k=|%UgU}+5-G-zvnvbNc$&eo_-D7Hg^V0!m)Q3X1lD2{FDMNHPmigjx%fYwflW{C zuYG%9!9ZTNNW|hBOhWBG21gg>ghxqkvh@-j{EuE#!^=6tsu>&YNWOd%R{w?jfx6C?jPRHX z7OB2DjcKaA-MXl7S2i+JYzyTGOd7gsGgpd-T1_Ht2^n&fMcY%BD>+PkkENjS@D+jj zqhTJ;jeN->r7quzfk~G{H*CnvzeQ&=%w1HzyISMj4HtzbwXjGEY~j|lSc3LmxW{5G_4RXxDWENT9>wgh@5;louumK zG`uWHt_f2T?K14FwyQ65{YaUsQVTaF^c0fOYiTbsEX{Ir!Amz!FP<|fiF?fK%#P7_ z4L#~pm!l(Mz01RB*cA_Lhd8ep90-6)z1@lss)(zkoxdrXL{2QsRSl7WBXP~oy6!fWJ?Uc1c)6Mpv3f`JPa+}OdHGMZfl*e`6`1_U(qqjxUa!1h6 zN&Vy`SvhNLPT%q&=bZ4O@RZ0l^iK>es73cqx5gg@>#t>)b^_uV^ck3v*1Y|Bd-W|H ztiTYGj9qWSwltGI;ZTTa_J_iv&<{4x(i@9AZfB*#lNq36_(3dq|8ucVDzSzz!4r{6 zQ8vw_+k%hij0VMCgotql0VOYbogi^vifLCDlky>QN z%yayNuzGkv)*tA^Ym&bkO5EgM%w79co+b;fs?J7LNA+~&q{Ce2 zW+!x(LR*QnP!AS3o9x)bHlXf%W|7ZlQPC3&bUHDzq&xG>R$n{V1-xk)v2pSAzr=n* zHdQ_{M@uf*YiK5%x)f zYdNGsTy5+%f8=L7_dg>aQQXEn#%}u_2Ysj_;2*-JqWEFOHr=M(pmZnMJBM>%tEcNX&!R$&H9R4}`+*>QjP{}**#+zbB zPhmRH38^+xi#-TQ93JRT_bL@pccQbl{@XNoeNzK-tzga!KRil9ShIY%@s8iN`!(#F zC2(BhliK2v)Gs@p@^IN!eO@?rt-KA?w0RQ9RCV}*lpZ!s$fbwr)2{xSe356079TS# zwJ3N4l_Pcb6xhjBLT_hF5AozJ$nLtR<8oQ;B^)|6&kNG}1hULW*wrgTs`c^=(yHyM zP{YOVDwKN@WY)jcuM)jL$V;OCb}@A+Xx5CgRSobs2T~8 zcs08iE8>W3CF!YC?j$W{!V;uJsRBAkxGwLQatT zpyM!JD(CxSjk41PnvFZ>QDp5>@WO)R@m)LTjG|a6>IWJse)+k3UzbgH-*^`?WFh^* z<=%A=O5mKICk;;7NU*BrHMKhH6ak$6^T&3f+2kxArax^Ur5IYlKUYCGc>#xa{?tbe zVnqj_H#sb*H`E%52{^KX{RBzW*MN)BX7jrnC_pQHMOn@B5&U=!=90sGVhOrpf=d`# z@9;rU;z!)?3qZGw<|#cVU6P{aS-}a-<06T;z0WiJ9hP#BC-bm>4BBot4XYH*+AYa; zHut=7*94i`bFY^1o+&Or?7?Tp8f?Qxl(KFM5{Anob}b&HqUw%(?*i>D9xx%OH1B~k zplsUeB-Z7Xd!TgJsNdaVzKr!BrdZhem>`BV_h&@jQsLlS^bZ|tS@|wCVDu2G*0A{l zYa3{)ZYpKb=h+u%C>ypw;CZdhD%KA5q$tASk=WEisXV4kYS0p04E8`?w3E)7?D0r% zB^Zp=9TBHF!kg<*bCKTDS#GIOIPqqF}y!oYCIx z-9U2H<1;;OH@Kjv(l7F0CZ{1D6Iofj@U}>2A&D)%adRPZe8OD>iMEIL+8ncin#;A{ zY`gXh%iSm(^@Rcu!Pgo4+2z~<>?*y6Tft@*-&wmpvdTHM;=lZW#tBlktoqX%7c2hr z!o1E*QtNdM<+}E_N z8-IvX4fcNDkLe6_Ml|lLrFUu*U~`mtlpJ^(JC%k1Al-&x3#KHkYzLThS#;U!)&kEo zQ9TJZ0z3qUJ1H&XagF_W%&qft0xtrMnwDj3VP9>r>rr@Hlf}g<76%p?k!v3A+3B9)fC8eP z98V^(2G6qCz^jX2L|TuTzFUa}y!2IW3E8@`iF{Sf3rrEV><@1)j|C?QBfCW~u?WmZ zimK#Y6+Luy=v8?dAFM9MkA9QJv-R4v*8fs0+IqwH99_BwyiEzo>o1>b34EZ{8vIMW zvUp`w7a}R<>8$g!%kl_s>G5~V`|Y3y;bm_s8+o;C4*2^D?~UPhd%aq$P+iNUu*_b< zT4?A$3#dHV4ubyPgw>KJR-U4>^|YZ>GG}mYGWPM_RqC7=EykLzzMPO@m%3IDLz(j~ z#gV{ek|!U?dU?aNng5IRwd$G(%)NHk69HOwk5psu+@6=t?pMc?e}{#B!(*4E0V z6jq+{8yIcv@}fMlP-c_ub8N2dQ=+Hw12f@P{!ff>lO@}=ze2(%t_#!T$1AS1fKOx> z;-hI|vf1-j-S#Apoc5N&lvb;MfPRGUo3(bggRvcqO>QFLkk_VPQ%RoPB5K*@<%!Co z(JO0{Uy*sa^;XSi5Z#emy=BDz9{_MbkH3f?C++d-)w@psf9F*)5GP7|l0DhE#F-7o z27ggeQZi!2a>IRU0zs%f6}hJ2+mVv_CCgP{YR{1NOnZOz96aj2+{a&sm2`4ng?n~r ztU%hcQ4&kPj<)S0->JRxVA?Z9;A!kR(w=L>uEDHTyE97m`!Cz4`I2Wig-FJ~{< zn~?Z)(_V;=e}I}-!u*yiJJkfS_L{ncZ65#=nhv^FiLb$<37q4_>IrW{Qw$uCZ6An% zUvmQEHhWp>#k=o$9In|F(q3sFgwN42kYAiY#qV3%{wGnTE)g_5WUsR9u(Vg>n$6xT zC&o4L>ae-4MgXxVqO#vtvA~CIiB*k2RsR=3M|VS)Zz1_eLfzi2GxR9 zKXj^!LBJ7)-KcF}=tx+J5^hlvLUO2WU)-_Ie^?{H#730!Tv zf3!6&P_K~fo27jVzB38>9}OojSnS)ReLDtUJ*!hl7%o>t;`lVfZk6_S_X@Bgyk4KG z+ILC24NGQsEC~??7Pjr3$x|MO$^ZO8z0i0RTi7M-d%d%4_lb;szqB8)A5_YENJ~7S zWltWd;mJbh_7N5EVQD{t3W(>y<%wAGf8oJQ`!Q)h?w-&AsY)Md0_90*KZV;KUC4X$ z0Ma}o?Pu-h+~>bqrNN%KB6JcylsJ;SAnh03i;84(w*9hajqt8VAFO&uKzKf7+pqc# z37i20x^s4=j=u0T6`FWm+Hc@BO4l_VI{TKi-^OiUdNl6u5m4Td_Pe+}u+_yEe-Lf^ zeM;u)an8}c(tCsGJ{bL*I*BUsp|n3jSKlKVUsNC72(#n7L2!Qdz?$#mx@m^lf+n-Cb+8&9iFQxsJdaj%DywIgLw0~0?>s>jj zn?dZ(AJX1!|B07pU_j&O$(6N-hzbktkpU8*VE(`^;_}e6`9KSB84v*jrU2hnC1Ooj zWmT*&*4(Uqte%4A#eW%#z5C7(f z*-sK+&-EOid!y-Vacr9TMj%g$d4YWV{n?z37n*ipRPu7VDdD~&_g4`Z6Bug+#$hev zQ{LRqj>YgTB<>4Rem1P}Q1?WC-6$IFa{X~rV6t~N?K~^=Hn@Q)f8Hqj9%Dcq;LQV5 zJG_`p-Mxm!+kxpF&JvQ3YV5#F?+8RapT~l$F~;c|m?g#VK*8U5o#DpzW*OffAHggK z+ZQO7fjR1V5Ew^o_;6C^$v}zvc|9&BZLR&k@3R97F!qn<548ge{rmPr6h;ip!y5Mn zB~ZQ>a;&)qb^?I|f4nVY3K@U-v>Z)Gl?*HnEP>wR)1UB$)Zd=&?eiM*(*jEa%dEh1 z8CVfm2^!hiIUW9XH4aW9`8AT{G4qHeR^Z^&Z)~XDgSrohti!t&kT9@HT95GMb^w2F znw%}yu-XCq;aiRK9ShIeVp!$;ls8Z-18ZCxkNe4mm9r5Yf0cnl{OD4J=DpC$HON4t zy8TI7xk7KB5om&_{_r7o0Kexx!wx{#=n-}Rta;|)LvSClKHMCc;hg2=1gw_=8)RUk z`kJ=>sIMJ3oDzQc5GZs6v@vVJ!jhtr9Q~t!oH-?>#dhE*Xk*qAJ8(3@5<74#!cseM zJi;nFaH2P%e`8aZ&dJ`&Z;Y&gmA@{MNKqP#n?=WZ*&^(%_no8v$5E<}g?lfvqxdao`f?O+>7@ zxG~YZvE9RhPHrU@hMR^e)@fY=mjy1j0$0eumH4tXf7l5RY%)Lqa7)O0wG3Q?jQH4C zU0b`S2n>WlyM2Ra5mtwrL%1|yNU9yDX$NlVNJXm<2{+fns=Fom;MY&B2iJjJy-fyg z$F9oiNEC=`lyr8W)q8*7m5OY@c+dUKjvctunS0< z?#E8{ei#6AiJyygzL1EYlG8`2YPj`xX5DXx>a6=oTAg)2s;aZ@S6khR)pvogTnbYtCz2!y4 z`2Dj25S`zVDGEp5h045%2!02$9UKK>wf!aU4WZIQ*p$BJhiB3gQ2e5E2ah z*c^Tav})O+;!s(68ID^Lf&J^2%<3L@O~F8k-c==q3!E?L&Mux)UQryr`MWg$jCW@|x|iUSI-{yz4ncAJPD!uM z7?u=NP%@!2r!&1noR~a`RMWJm-GqWs=ww1Wuey_Y$0{fN4^_HvBeC4n|DjyUgB&be z-tm?4f9{8V0X)6a`mn}X|EoBu&vCGde|_7(`0h9z9e?t!N>2NmB|AJoRi*doSh~|S zI_y93`A2uqUKst;SGpIT|8)TM@K66w)%|xR-0%P0c&Y+-qDyKg*glWtI(^xAAdVgRUzt7GAqY(~f7?Cr za^HTX*$~^Tz;6Pm-;Mac2&7IrG|Kn77A(-;{#n;v)@WSo4(uAtLyb2 zJW6w}e4P)S1XF)lG#X2TYbn9kdxiD*N`_LH-3_{$t3$=*xcz`Imh8A4wlP8HN1Im=C-H`L@)2;8l|0@&{gn{Oi8_8<2m~ zmwyZLZ~OB9fc!hY{JW5U&zHykeUMUrcHqO5`m+NcrPQAt__$sDpZM~he?tBtnK{|kc<4D2T8qU#hp@tP29;o3;4G-3EwT87C z9-?8RhRqtT)9^42kJRuO4NuVU6b;YN@Ei><&~U4UmuYyFhSzC$qlUL?*s5WhhWBWA zzlINM__&5oYxul|FKhU^e}->s_@0IzY519jUuyWRhCgcfiv#iN`zrsthJR^1)6mo~ zO~bAlW@^||!#)}g&~UJZ!!*p(aGZt{G~8FiX&UaYVWEa|HC&)!xrUV*YCXWe(xG5T z!)guJXt-9xn1*o;*K2sVhI;<-uUIH}l7^>gc&>)$Yq&+jM>W**e};cUK*66h{8hu< z4#d9&prFvu)=+Agpu2*J`*;L#=1{2PG7|Q^Q>v-lySn8or>R)+hX{ z3krUq;U^k?uHn~OjvNh#YM86xNDaqoI8nnX8tQeUGNW{4hN~OwSL~^TXWv(fY@<{xPk8 zOzR)l`p32Y;fJ^t)cS|t*9NG*f9LtBZ%G(Z3^U_#uUq{Dr>! z_mJP}%l|+E_;rC4{u|oy-<-mqhCjCS@;?Gyl3bJnFaACJzaYP^UA^5LKKu|hLi{{~ z&;O?3H=R=Q+2Eh>yMs51qdojjkl*af{|xdB_2qwoe4a1=Z^)1G<$s0zCBFP`kl*6V z{|@=z+tJ6if2)5&yZR@m){oEM{QbZ;k~oj}3eCg+LDUl}Up@^#b*jea1r1-<@O=$G z(eNt`f6?$a4gYc=eoRwAp`oQ=R}F&>#Lp|Bp5djQn!mGr^ST@AtI_kdPQ#5F9;M+i z8Xm9VNeVLj6PpTlQ}f604`C|UOXvIOe1D%_{|Wg)e;Plu9e%j3H($fi3RVz`k6MBA zFUZ{ncrfT>UfvEu^XOf~%HwyDbWC-}R2HUs<3D}zpMm(#U?l8=|BS$YM&|W}fBJ4A z=1wx^4%PY|_;)r+O*az(ek?%iNLLyqL3#-34gRb@ttW$N0~t;m$w=^P<7g9^OxKZV z^k^~*fBaYxJ(kR+$EQIxB%RPbWG;lV_;=D^*zs>(I>Ot(5X2BOGjrljGI=|hnmI$k z{WA*`EX*ucaBgOaf(tUs6kL>9so>(wr3x<3JV?P%W>~@M%!q<(GNTHv&1_IGmU*ax z@yr$l*Jo~2@bJtd6g(>PXa$eWJYK;QGf!6Vf7Hy=6+AQZYz5EFJYT^JGq)&sapt88 zUY>cSf>&o=tKhcG8x*`L^A-hf%e+Iu?U{EexFhp!1$SlMr{Dvb4=MOa=3@#zk@=K@ z&tyKQ;0u{ADfmj}YYM)R`IdtJ$b479_cK3K@Z-!+75r!B7Ycrr`Hh0#W&WVxzcPPT zfAHU#zbW`f=AR1g2~vs)%7fHU2`fkgD$ylK(^aBdkakyzV3201M6V#tR*Akr+FvCG z2I(M`7!suWsKoFf9ibBWK{`q$#sukjm6#Z$lT~6$kWN*J=|MVEC1wTbY?UYq(m5(I zFG%OBL}`#JU7(ACv_d7Sf^>;WEDh4-e=4yuNDo$tRYAI1C2E4SRwe2{lU1TVNE=n6 zDM*`DA`ztPRANJr9;OnTg7iq0*c_zCs>Ja@dZJ349HghJ#OXnLrb?V0r01!`1wnd| zN^A|%OH|^rAXWN7uMX1dRO0#|y-_7@4$|9H;*KEQt`c_z=?;~+J4o+UiTi`}e?gUa zI7pR#&?kaaDF}TgNS{}U7lZU=m3TEs-%yFSg7hCM@otd5uM!^y>BlPZX^{R?CB6vK zuTMo# zK{ib#W(3*(Dp3$*g(^`TWOG%bB*+%1#KIseSBV3HOqmY0ILHoEiDf~yLM09gvXDxI zgREL5B0;uBC89yLRwWvOET$5N23cGsT7qo7N^A_W!&TylAUjGWjt(-Ve=Y3zAXD1H zP7X4qE$s9lQ`*AL4zhDq;`|`HP$jkm*~KbxX^>s65?2P<)hcmqkZn_m8-na6mAECy zl-jU6f=sCmyDP|)+OWHWY?n&h7i15p#6v;$h)O&bWKXEXQ$hBON<0^2FQ~*zLH3GD zycT3if7n|=ru2us8)Qm8e~d;*cU;j^oM;DWJ-V74?(8%hy5I6N`KgI zL8kPF{TXCRe>e?tr9a$gB^PezRx8=Qou{>uW4H5kbVC%~5PO;23CUBzd7MTv=;`2o z&LBDTOp;5_B4g><9zBmNg00a~dI4EQFC=yJBGLp~f20j`E7?phCMVHL z$XWDKauL0ZTtP1<*TXjEc6ue*Nv|Rg(yPgn^cwOaY-!%4*O3okOY=Fso_tSlAivTZ zDWNw}o8C+_=qs|K=wtLF`Z)axFh9{J z>7Vo|X40owH~I|gO`m0h=yNQOKF=o57uaEHJCMG@R?$~kl)lEA>Fexp z`UX3WzR6CfZ?OyL+w5}s4|Y9$huuNnW%tnc*dz3P_ALE?f4xROWbe_B*gxsV?0fnN z`;C6e8U2iRq5tGP=;ypY{elmpU-B{ZD?WvO%?s!^d_Mh_SJLnJO8PyI&>wgs{gJPy z|KgkJPyA&1Ge3v^!Y`)(=GV|)`7QJ}-bR1t570mOlXN$KiT=sorhoB|=^p+yBm8GZ z`Cp6)i*b>`e}u?ph8WCDkGI9&)mIu&k6w;c;T`gyb_B*Emg~=+Sih<*&^F+;|CtNZO_+;U4i0k zCF$5gwrJxAALz(;tk}+1=Vgl>Ji^^n6lAU6f5~G&N_eCM)s9Q-?(3DZtGMMkm3WFlKirn6;a9$QJuSct4(tH>G_Ce18D4rjIGM7D;U!=mIuR!=Tt z4di-uD7lTr$##|?ce569AKO44VVlSk>?rayJBB>ZjwP?M8zp``5Zgw7J?0jmne~V}u+d?zgR@#GIO0(HzbO5`G4rW)=Ty_l| z!)~UN*llzgYo!Hj7cF9U(PGv{4`4fK1-qLr0kg20-A|+J0onlOA;BJ{N3zFN{Jx0D zzI#ZB*bu;5)?AB^vqWEu7h1g7;w2U@BV;$}3AjBZ3pOUHOoaSFPU!L*F=ku*f8potwP}{%zy;?&SAv=MQ-eJf@hc9Hv&f)a8D{j}P*vQmN1Q>Uz$r z>qW(Mfy?x=kLgv9=?%s7XNt^>f2L-Q)NFccHjtXlO3ik6vu~+vwwwKjPnvf73{EI0d4UzsnwGG7B$?Bw6NTtE7_eoEoud*S+bs*v<#m+5yO z)9zFzvbHm(J?)sz?1V|Mc1*F(m<*Rm*h;3e{e#d-;yNqRd}U-%bW@4$e_ljGE`yCd zVK0yjh;0V4x5#MrE}6mJC#CFTFdQ$CF#CcW%DyItv2V!9>_>7D`-N-++%0SmxsOxw zEWnq!MLyyI@&ov4!qaIt-i;36-RUUUxlQL;bOG;8mvf7*;sfaMd=R~x52f$(eVD;> zSsu@4<$N?t@NsMlpU7_Df0Nh~0H5RgvDf)jLh%n3INk}i_nhEsh_74u>aC<37~QR4 zbn|zJ9;JEtcaiR`{DdtemxDRYx`O2JR?+JUlARBWwoUX=P7EmB+e8kq<_EhO7p%ZX->tC$a2yX4AWd9`8<-z7m!}OoQ&laWHPTJ zv-yE!0bfQAgYDqSX)h3e0kAU$ylJw+9k=}eW z8O)C+L-{deG(Q%`?l>})A5W(96UZDe`1ANlqyijn6+eX>e++$I#ZM!L@Y6{>KZC5} zXOa#4EOHD#n;ZxFcm_D+v-o*x+`1AeyCnZ36h9S4xH=GP0e!`{UlY*H>jY?iM&RcBo#FtHqT4lOFa}4SQCqxI90-;x-?3g8e=qe*&Tb!Y(}X_=v-=Q9=a0Z@ zcob&$F|sdrf&`1O^xb3xP4Vq(p#N%8=Mo2nSEF$lwL{dF<&DCl%u#J3x^2&MNtV1FqMmOTy|$4x3;D=45xatP z841=Vf4xn_Ddg8*=j5$6arnqqab%k~W~5_`P8j*XLhLy(oeJG719;jfU2>EzG0G`1 zN|zY*0LF&~sUVA?X9!OeC+neENBYCiyi5%KD(TN(Bg6SyWE6j!OyKX3Df~S$gTGH^ z@sG%S{xK=z|0ETHLM>mACHz}Z`tL|B|A92}e;+~NeTv`#NJKPEOGE|k_!RXZ$wsE{M6kf1ODx{2kZ-; zx?&hcEphTVH900s%&GibtuO-Y%vdqbQ5f?J=$Z}lce*m`2Wqok&S&K1Yh!DO8Tt1c zf7g)yfC!4y+r*jR6(FrF{yB=?ZwpeL5;>Lm_ls*_#zkJfPd~ zt>kJqo$foI&PShc0ahyRFdccaTFK=utMWx#?r_*HQKH$1x}4AClLen_7*3fkVy2iZ zwvn#T@MXltoZ+>;g^bG*TSykL_6>@we_(-Jqjo_2#4KYAKc-b&f48^^RrGey+}3Tp z35uo0edMNg&L0M53t1?f#=E1o1;t&kz;Ic0+7{^rZIR4&ZRO?n-ywEvV}GgP-lb}N zBui|?O^motSD&W19=t>KzPgn^mv2C?9+_&=sa7_4+$Xk>F4?AN6VE{2dYsH^e-$sl z)=s>#g-rTiWqIR{EMqH?IK*$`l>D#d-`mE%tfRPhI$G z8~G6;BDeM#t^C-nWc2@9%eULef6c!2)~%Inb88%gb!E1zD=$Aw><~X}BkNkpBW|hv zTj@MEJ)xDBy6NGqUudXed(51A$UlKG+^StR{%iQ(jAkx$MRBgy$<6uCf*B{zx*K! zV44uC=tdEyCxMeYTdbj%e~LPKm59>oL<7B5#OR%(iQXj=beCwMkBfEmDY2fuBsS2u z#9{OcaX9@}Y+^(l!3=RE>miO}eZ*$gR~*lB#R+VLIE9TCr?Oe%G*&E5XI0{Cc91xq ztq~WndT}8;Qe4E26VlRuUf7w68_3V3b1N&Lr z$SrXbmk`tq5V!LEMJrz*w)1jvC$AKD@fD(tN5$Q|QQX5fi(UM9aW6kl+|Mr+5Az$u zWBfMpIKNXo!5Li_+Y?6pv}gs07Tq@D(eJJ+gJ{+7&jBdCF5pHe_RPVLx01i;AXyVC2PFQ z`?zr3%*(B0yO(*amF(~`J6p*vF9WXSLN9X}>}$Nt*=Pve%yDRO+{}7hq;BRAT#at# zAaDNwnMK|P0y2f(4gxZhy)6V}MtFM&$n^6z5s>NT?IIwI% zKfIj;WS;l7e-e;+2%M;wxf23bFSD(cTV7^sD^K$>r{}v)5i*m#GeI zy=&>GtN3HF6MvMUx!FqQ`t7+vl3{SrU`d<4HzrL^2JE+zd_s&&Vj4kW89hl4qZb)u z^d_T?Y%ErpYK)=FjIp%V7)RsAc)Hn`KuN2ESPy9|Y9k57H{FI4nPh-d=X30#+S7sPetM zRiH{Gbg2`4ys*oMz5eE{WPrCw6h5g3s)$}C5I^lO1lF~F3%O5aymdc7x$VnIx#hsQ z+C_n0P1p8dE6LZ!U@P>^u>@N|O2-UfKitYxe?u0wye8QJXL)WVU9>Y)xc4>A_Ha6U z=+|nbZ6Q6pDsA<~12^LSYDKcz{#x*?4wZV+;BfWR^>?hfl^?N%;6HW?*~c5mUfw{ad$v;Z!NjlCGUl`z>8Z_2r}^zhI*N6kT}_t4x?T0;w9dZ2MP4H@^+h;bi{8TZqK@gQAiJVrMd&(On+7wK`vOY{We6?&ubD!t8kjox9r z1-9UA`jqhwecpJFzG!?zUpGFcUmBm#uZ_>?FUA*O8@{H08s9T+{J?q{KeBA&ejhgF)4EjCTI!VIu#Q?jU;&eoclti=qn!^|G+NV6x~Z1!QN zn0?uqW>+a)d&C^co;SxRTeL5k)B~TJSV7vQ zi`Au9*Nida%r4z&ciIo!eU~9-e?OW{yTbpwQ96XutW27b(XA^@^BX4oOLqF~Y@|Lr zd(?B^xCa!g)X~8mo*P%l8il;XQ=uSt15#9_ZR8kFmy#4yQR+N5o1|EZQs%kLpcn4i ziZantyr7+0rjJL-K!Uhjt7g*4%pu)jzdn_unbSy?Ih_nNXOKK|CYf&Te@}|cS!9V> zKn^x%lP0r}Y%q(+DP}P_$DBj1G3Sz-&3WX0vxGci&Q}ATM(nH}+4x^i7&+5B`yJ;5 zL*yfEDbdimD|?V<-g|S)iE;lR);&w?gGuVm7JF1QhRi8sh(L#_hxCC zHUTLoS4PhcMYYj$OZmGTzZ?>FsxRu}=k&@>hmOgq|P{J)PvY$q_JN`4* z64R_FJ1LilGR#v*AM;d_Yo4x}HVC)uUMX!~=^i7IyR_oeU=-)>`0{zs z7*gqp;X6MPcd&dhey6d|s-ILVzxZsj(z4;1kZh#aPomy>RqX(Tcw#U78ZFU`w{ zG@%~z8W8td7_A$~e{l0g5c^h`(%VRZxt%OD?<5Dps;xG6>Z3~|)0Vvl`8$JOgwvfl zMIT)jvHYFJn9E651kiHnHj>>hBXBvvw@Su%P&NcezysEq{WFfb#vS5GdWicc&r^rt zoxk}cvCXGQ(0q<$o6nO$<_j>juaME^>tv$&2AOTXtpv0Qe-CEuCcXWKs{#BjjF#|q zz`=|W2=)KSbA2Xw>~D7R+gO{}r(S zKa$muuQPwve}SfudqAm8ydJg&Q~W>03*^b_0y!Pj$|0zq?Yg~9!#^^q1I?=d2NTT) zdE!o2w{f596F6h0%6{QyXQ}LmDfgG;VwXDGyQ?eBhp~HP;YbV*+4UpwxU6iXfrnf}~B&_h`YwXT&8aZu@5Mux3$ zt6S;tBrZeY%35iD5|^WJQ$dj&oL1l>t-vW-GN*%<@X1!T@D4_QOc`nSc2|vH_Hh=? z77h`Vf3VG%H&txg^LUnZ85z{WD9y4?+-a1ZG1-RxW!ZJ22BgX|AvM`dtvxyERjHG{ z#GBTswtCQFEL9CRWJ4CuMg!RawGUX99l)6uJB?+N)3O7Go9^Ou#A_rgt<6~JwUN~Y za?pe;J}j&*j+kj6=C(bjwI7M33i?N4FbspDeeW-ARL$Nt&!Ia+uYV9BcI=r(3Q5fD29U?Cf#gLi ze}}wo4I&>{gUM&s5c0h>l>BDxL%B7KN^3anY30&^)(ASn%A*skd^*D#N#|Ol=mFMf zy22VmBi2|Nx5m?RtV#5IYhQY=HHAK4?MGj>rqMU7{prWnEc&fgK!3L8GQ*n3h5*d9 z7O+WHDVu36WOJ-CR$-O1gRKMDA=dv9fA=2nRTSIf_?g+>@0OdeBq5a0QYZlfT)K#W z6cvzwQWXI!2&iCJ5Jf@7PE-HOv9QH(OZ~Y$TCClsLtRd}$b#W!bi!*@zyvb!%D$#U$H5 zFar~vxEitpy5$#4qgPIw$g_gV)NDX7q2Vsx{U8|T4&M7D}R&iCMEB4b4$ z7kV(2NMZpbmo3;#e>x>xrbHr(l)Ko2PDBQcKrSPkH4S&B5u_>f7tZwh zgd$(q6y^de%mZDx4KjrJ&{((wS_uotFf4?Ga5tPL+yiF_i(sg5Ka3Y1B6##LOc%=F zI^hwRD=dSR!jt|u8}!7AS__$Gre>OHT$kQ`9gbBZ9ILnKSOwcOk}o|qf2~hwEQ|_` zlOsKy>A_v)@Iql~Ln89-Y7eHDLuK+EY>d3S#)A>%@KCCp5P5gKPatm#Af~?okx$__ zd9@k`bsAU8xk7k}4Cy8?h0V}Tc#RC>RybAIMwa7t7%S`~!?%kp!QF6|@FqMcyba5Q zJ!Ba7!gIoYcuRQSA5IIDe=1S|o7Kp)1^Rzxnh;8_2M(o#)xic0l=_&{mx&%naC1V; z3B@ztL@tz_bzdj(y-3#9IFxwFlDF0oA4>=q2jO$V;=dr+@+D*oUqhbo9l@4Eq?icpsbf7@_d*anXF>@Htd zqsNV;ndRJklCwbtw_tHCl)pP9m-KB7^3c5wqnuk56uQ53ZGLD$unw}qy6DjeHG?eY z9ta5X#5yprTOc7^b*))CP=&^)+|f1sDyJ$=9?|EB?4mOfy7YQS>Kx#c8hZao9` zWNN^2>kJsXCn%IQU`@li$ls>H2zlXSIABkQk97v@+4=`eYyzU#lnhuN8L;MLz*>+2 zYe@#I6&bKXGGIkyz}k=jD<%Whfecs)8L&=dz!GG@y8gQXf4elbN-hppNr&_Sdp@~7 z0;(Hm>EXMzbz18iONf0*YfmSw?N3@e0P@5^P%I8kDo+_&dJCqeT5xyRf`LL>3tot} zpjkP$E+w3;Pb!jPum`p-)v}lBw9HpK#F3(ZaXfSrFMu<| ziGC}2U^84Lf32D95%#5^nIsP5A;R^miy4}eN?YlZwinrz$4NnS;F z4B535&4>t8$!$)s@bRHZO-3DRHVG&KLV9?aMF~w1NqcG z`Q=J(OM=5CJP}5j5)maNl#rPc1tnB}6Hz0LCWCATf1 zyLtsXDq*-rV4Z??(iAmM;dUirZmfdaoiJ_gZPyHTXDDQE1-G9H|D`tfK?o9|0_pN}sQJmlKkS0Ox~MwrlCc?XDbB{j|8gaby4e3y_s z_|E2je+WyAuD8Tb$unkcF|;Gd)VvH@r!DEj!IHMQU&+6us?@R$z9D-s$L4+yzcI4j zZ~XB;e}gSiJZP4d_pcytG?%|Y+$%XYWuVt|I=^PbG%{or+)+Y7;x+H(d{_2?Cp%^b zX9s2eiC&1RT{g07M)~H6mE1oGA90_6%*bguf5ifd4&?;q>KnL|7>LSGGw>+LK(NKP z58~OlNNp@g<36b1g}6W`T#pN6sw;Ro&f}&2Gfxnwg4bPjJ9HsJzpDlkgsYPWf+`if z=|N*xuhBc`Sg65R1n*sGJIJn1I?KmhIY`SDd;>ZmB55n1m0WaaHpO!^gOb-0gVJ1r zf4(F`ql8I+a!agozUcuEX zITcuOI_TmIaK$U3nRpcxh_j%*I2(G3*F#_N1~^^31%`@q2rHXQSlO*GS)2!Rf64D1 z;_dK&xBwm&7s4arU9d#F8y*+$fhWX8gtgrZPmA}#Ch>mQCO!ynix0t%1QmZ5%ix6g z2$ID|QCxfsWr<5r3vnrGCoV%>#m7;9aXA_$u0ZFDPoQbyN_3653f(F`h3*%hM$5(3 z=sEFOv|oH4eJZX+hs1JpRD1#Rf8si9i50lBxE}WqH{!A4W;{{cg0B%@!MBR9;=9Gy zaGAIjKQ3;^Pl#{e=fvIkd2uh^AnwCE#Qpef@jZM{d>?-)euRG!KgCtzXACEP#mM5< zj3s`~OA33Yq_RULogFC|>=-G=UMSh@C6dEVlNzwsNiI7_YRE27zgg-97hJuld? zC!nLi?IPfqlj&-btF@H*bI*)_*Ot%5j7sJfApf2}A4C9eSc-+qYv zT|>SSqe<$%(U00)$chu|g;-TMRbcLvOlt(Gq7V5?g$n2YTpbF$z^kc`{C_Nzu19lM zB_$;076K#UAlB1lH2&16P%9I0b}&(Vd0$*giVkdzoNo4s0OQ;#2) zlp9^GlAlnbQ<((@P_9?OPqg{T^s{WkGT>cfi%Vqm<|R6gf9uO?weF&@by}3OOD-SR zsZ`HjQoA>o*3F;Fe0k|yl?ZZY_#^A`75vmv%2->)rP{Sjt2-uy@}kqx*=Tr@@&<+& zQg0BYQz1j@3)xaXXeJGS*3uvtAe{-N(oh&L4TDM2aF{8LfZ0+h+#rpF`O+wON;(hL zN~2+)G!_m>f8*eobOFNBM5IZRP)wSPY-tKAk}gJ_rAyH1(lj(gx&oaoU5kcGGtdZW zCYmf=i7u9|MpsC)(ACmx^pJE7DwD25o^(ChA>D}HA>}`mZbn~8bJ5Sztyq)h`9k+f zFf-KVRfHC>S!CUj6+&0Kzb;y~tcK=EA`$G82QLJEf3&}ip4v-qL4bqFIz2%obn;UT zg%JA>#r!o#Mh=bxE~JLT^1m(s&@oLZ_%*2%a1Rn#1F}NTEr_g~=^>sGAxzG<`I(jc zRcHuGu!t-n<}KeWcx!?W4OMdjL)9TJ&-+{NE-%nuF11K!C-tC`5aWq>?{eGWRf^x7 zFC$hYf2DcFRj4$tx@u@^{wPg_(!54ckVx}7mFD$On%6>UUhv>@DyN6=xJcg+Ih`z! z5md_8lTtnr!~0S(GypWD*@)ci3#~;-@v|1{UK^sWUW2+`^?1JsySB*Rc!(_0>ytEz zTSVl#cay>ne`9L#vX%VJw5Lol_5M^{g(Zm|e+kXEn5IIa7BqwkzxfsXtwhx2<|my+ zjdJdRAWbDX?%|>ufz8~=&mTqPAhVLcGhw+_Q3ZdOYf*}~i2M-xcs~)8T+5e>i2zv? zCR#CMDTnC-Hx{NIA_E_!%3Lj3WCQ;gf>@*EF&UrSCm|wQ+>Q&&;R)BO;FnSHlSYbks>ooM7MBeXV6sOMv#cpVk?rx!tP{{=XeG?K3M@JET_0cNxjo2a{2jgyn<~^ z%Em)Cr9@`Fn;91?_?3xF!ZO^<_3RUgxS#DJuX_Gmn^3CrC}ooJsYLxWLGQL{BUnpp zX2+M<1pS{ahoy15f`6WjUb0(FQ~gUOe+rU`hmwi1AW>rsdpVp(sN223OZR~zJqQh? zhagufgC^1=kS9F~Ev3hxSXu%JX({xUmJy2gI1HDbfb*qQaG~@ROp%_3OQdJua%nZ8 zde6aa((~|yv=*L`%ArDf0k%pn!rRh1I4D)Xw^AkiB&~0LBOdLP{;eSmJ44x$I8j|nyW z3_T`&iJp?aLF=S%(d*K8XrJ^w`an8_K9znz-$*~AU!;(pRUc#u?u&yh~xe+g1GzCp%#j?CcuWEL-%1? zDn1~`@Mp4#za-_qm*eccH35^7q z^WAED=+*FKnvhnjo@74%U-Bo01b#jx{1{b1OJ6#iMhW^+5RU^Vw@stg2a?oU+X)=B zBf80H`2}1hUp}Z{GoK>bNneF1rRM&Rlv)p}sPyR*J-+8RlnCYA@+8p_>F#nl+c_=- zUQfYcT(3?t)oWiaQR&Z?f6f~H*_!Z`-R%j3DT%QqCR1XegiYu@${<9Zp+uglZ-f+( zg&UHBDw+z3e1@AriF~Hb?{YJPgA)SbcT--%}l27_RTa5vP17tSfHO+6dpVYBP~TArr}rG7+GAxRv~m2?x2(N@$#P z?{@H5}7G3(I8A6-N^JH zvhF|0$8f`-MW|&*ax|0He>b+2Ca^2Ut zpJiz(WQ0vt8!H4wo3M;Gp!=uZRN%*1#OtylI}O>B`1!&e;QNl&-~SNnYCn-O_}BeKsXR?69VzSL~3kK`*iXO3JU}Y3M0#_JkdP4B3m#eEm5KsO0-6ae3U3~n^V`V zmq#LeO|&8dVhd&jDAACjT z_*wDKcMC)Qzlr^1UKL zM%)(bg{Wq8u%B3;m)#X=_6=(lCl>5Upc_7S`hrrG9nQ*&&7ThhL4G+pg;W2p_JRy$&PcDV0 z<&p5LJPOvx=fXO9G;Ef~z(IK&d?}BIf1l+E@V9(E{38=>U7m<|`9dVglaM1%Mvdet zsHuDrYAs)kisVaBJNZ)7RlW@MmZzdY@-#F`o{lEUGtedSOmw4sC0Z!YLJ!Nc(UbCZ zXq$XJ+9}_R_Q|)P59C|X=kh#sNWKmIAl0f06tU z?j}Es2gr-@nQ|E(AwPo0$dBU5@?&_KyaZn-FU9lZW%wTXaa<-Z$4|*m;tF{s-Y9$c z19=txT7HTFc@@LUPcx4E4AYMMmdLA_-tx1|Ao)4wGI=dCo2Z(%$(76^`6cE-c_Xt_ zewlej-psrxZ(&}Rw=xIh?aZh0e-7rbypuU0?`9eKO;(fNV)NyFY_a?<+gW~}JyrgI z?Js}Co+BS*&yzo9$I73xv*a(>8{{w9o8@oWyX5cLRq`SB1^EZ|CHZG|t9+Q#YDce@H>xP=(>n zQABRMB5@ZfGB;h(xGNQ%o23}swMvY;K{2_T6^pxFak%@GIJZX0Gd_h6pp1GllDwvxHlfvxR$mxvk4rDCpfnb=CXTx_pQ6%)!df3c6^8}i~F&?W0% zs})4!xCr9)sRO=7(St=eX{;1gGfqOcK+QnMfvPw zKax^E0IFd<V4L%oHjf=qPtsh|o((%u&Tz*$tCXta0#nGF{ULiAQc#Z0 z3T=XkzQ!gvm)qplqnzSta(``}=D}qNDNRCX z8%hXbjf9Yp{3G{tNuopDd_}33rzGFlLZ_OK%@v5~HIgvVBEksQ0EV_O3PuY>{_hP! z`*7E{2N(d#4InBvLtME9+A4FQM7b4uD)V5JaxaWlZilhTe7Hfm6K+x#z&vFktW@rS z?IiD;$^)UZDPK)*fPbJ9MfW|A(DCfG3P5VbSgGN_(50>mhCq#HLq%0BM8TxXg+YioSAVS4kn#03L}FcOv+pr? zjPq0PxDt`ZiQvH&CluNixt_Lkt4QBDz(&pmxSS^=2fE@r{_CFD6SYv@K<$;?=xk*V8l~(-=PUcr#mYPA4&{AxpYj2EK{<$CRz5~s zluyxT${O^I@|BPEHv%E0`2ne^hE6H;4`@#c{i~o8fq!NYmeS5Yp6C`3qx=)lIWT~2 zRZYl_TwmefGy#Ati)!G2jpnIkHv34*hHVdl@#ME8zkm(4sg{5hiQU0_NT;x)k%$H- zA`uM;;vFVBN#yY}qHjhX_eM@DQnqI`0U{{kkX*7KV?-F>N7;BRzkn-diKa&V1x5`? zYH8DJlz%j`{HT(~Q6()nmKaJ^vmn`zDr7;j8&$=EWP7TBamiNIuX%A%&FfAN9EKin z20L!TpwOSFX(V(*jqTT1$Rw!t3kb^Zkfr34~!YOKzk3!8r%gWVt z+vHDxojj=?9`MD0C*rj5f5O0|w;8-mU?TY)9^q1h3)B5p5`o`}%M%7gR$g-&!m=Lb z!$;O0by(T977#RrRz!3t3J0Sp{g&DpRJ98v)-JwYB0fPx_nA+R#P-kFi zSbsx4#MB56hzHVI4KPXlk3*B%H2+2ZsSug}B&bX(M%^MPc#3~WUBnSRZWKd+ghc$i z1M6Xf3f5%z$Y#fvumzjR&kEoQ)+7t$L<+={yB7ZTEyb*w-P=v6fH1-Ktr%|KO3BzT zWsvWR+iPLrkZ^#7ngK3YgIsAPbje|tL4QWH3obWokO$}FaLeEdWBXZ1G3t9Kw(y%U-00@P7mh!W}|A1m5|)D4}07(&%BD|u9!G+@}7lIzGk z=j6yop;a2nV}S`#{!Id-QNgAWl7j16Fd}@{%N9n4 z?`Yh*#@u@0To0sz#>{$QtOuO-!AW3zO20%Apwg!5PB&QQtXr2`K7P$WWI- zw)!}fIKQGcp#2rt?1)$Vh zBf?IXKy*Qa{S$?9=92>7Y=KHBT&+lC!sI%w1b#4T=^;i*kO^#c+{-FkDD_QB;qRbVYsL4V)IzGtQ_lV^K0#0JFLrod`c@ z6h^@q)du_C_*e>imRF9oFn{TmV>3+ZT zp1DGCOreuSq{n)M#v8&FrPQ)fEvgYu(}(`1I`VxrhMv&E)K~uLtruqsrQeTDc>T7VCx(&`!x5G$v2VAZ0g1PD& zgqgodsNP;!r0#<<^&LX>-i2q>{ZOI453i~R2<7_--cb+2Z|cWTrGA1q^;4v&pP@qa zE7VE-8ue4ZL6g*P(SJ1cJ9M{t2rX8BK#!-Tr>T$GNtwMjRC$OlV#I9P6^EANiHH5oq7!S}GJX~Y(1dYd+Ya*VlN%$5`#`84| zuhMi}t{M0xErvhRO#Gu}F|uYenigj=v<5!mnFTGXp?iuir+@xX>9PvC5Gt%62UG<` zBqditTk@0W(n>)N`M*Fqjl5A1{WlZ!LJ$xC%DvDrx^L3VXX)4Z!b`t^rXPd0#{nM$ zF-qq6RY|_iY!7YHrlfX?ccgZTvxAM|A)!=8s9#M0ui(%%>B|~SzR$fwe4#|BQS@y& zS{Qxnvf(MintxxHag9u$V(nLw+}9$#XR$K*DK5v^jFtJ0I7d{;<*P-P+~KWb8j3YxEx zp7`%eOXtc&tNWsWrDs6`{b<3O@UXj-Y8!0GathYaaph8)M3a9rnYE_679!M4b%NAN z&-$^6Cx0?`VhdkDe?wOO60`x(T0oZ867sZsXr~oGiB<^1wKgzSYYVfr4lqaS2=ld5 z;C`(H9@RR*DlGxeYh7Wj)&pMBdcr}i7aY?1K(%%nlC{%OT%>On>&e^l?6(zZL?s{ zED*=(=9|Cz<@iY&PWL+U2OWp*daI&pkp68^BC8(-HD1_ofWX|DW^p<@rGhR91+~9? z+keupscq>-CN`?DQn+gf;VpNUK||lINw}BFU$Iei`bx;#2k6^}=s#s;>F!j*V=1;! z64_O#5SG@?xcpyae4=(nufB{MK^(#30VBdF_-b_ejXW&n5wLkxjsbgFaJw8^{sukTZ#liFu z?TWdtX}aIkbt$W0jkJ;IbZB3>@M6+@PN+;;3%(${=qv8GP^wcv`_ zIb`(@AbOK6yzCRJP6avaME^lt>FDb{tr_^?Qe#x7k_pI5k4uw4Wu7-EzMO{d;9gVdTft*ANiWqhkUj3 zJyAQKSC5Ud@W!Z0;cd!&2;%K27xq>N@7F=UgZ~=+K1rb;1FH#H+a&CO6-Y-*nfs7| z9;Lr&B##J2+6Hj6jnF`Q4H{`%AzynPI%?Zs2w^b8wH+{%JYS=|0k>$o;eRo053JDM z0Z)4mp3>fj)!K)!PCEdV+DC*0{so(~k70}U3GC87g?-v*@R9a8e6D>#$l^EftM)DY zt$hc_wI2wH{1NHePsq@IMVZ=fsFU_P>Zu(;uQY$@ssD(@$lEs2zQ(e14Iy zg(cYhB3}!mcw!4*_yJ*Re@gg@V)MJTMe%RzB3+P`yT8=x7%l+C<$qp)gs1*$b&o=N zdg`ZE?PyyuC}g0guCj(iA!m8&gVwMpZ(SLMT-s3hR8$VN|o&Ds=&Z1LnZ)~iv-R!?4HZGVeGc6jmvYgZJq+mo-c z-iku@c=8l$Ulj7LCy%h+i$Xr|-+5A% zbtnq?(UX3#evU$Z@uUx}-=dHsp0wTiGYa|JlU}rrMIrxq(sJuW6jJR;_t*$UK#1|A z>utnEL4qe;Y*r&F3Q|0&)J9qqWO&kPHZr3i+mqVcC>{l6dQu}BxlvG-Cn+|{iGp%H z@u-cOL_y6w@f#a8kAhly;yX5K9R(G5;uaefML}&nakY(#qo9tSxY$M|mmm`Z6o1Ft z=+r3aG*29Cqtm0H{+^hy(HT+DAWv**qbLPJXL+JyqoGmIa8E=w8W9DJ^n}AUIyVX$ z?Fk2MG&Twv?+H6?bbb^x(G%9$Xi^k3#S@m>=;A2oQct+sMwdrH(>&oi8%>XbW_rR! zHo7Vbn&k;2Y;;W&be$*kvC$1t(0@&y(9TA4qM%znA;(6yMM3jDLAKGIQP4t<|Jz1) zM?s4`{%afE9|b+=@%wD_a1>PL@$|aIDCjkhf5t}9HIH_9{KGc-B?|h@<8QUmktpa- zkDqR%zoVdI9zV`T|3pD2JbsXksv{tbJid#KnJ9?!_!c%6q9DoRZ5u05kbma!U}GZ+ zGCl5R8{1J(+~Yp7ab^_cdfW~hXGK9d9`~Y+9*s72iN`%|qbPkwD?IKl8?B6jR(agD zHhMY=TJ3RDZ1j8-wASO!vC#`r&^nJh)kc+3&<2ldYonK=pv@kaZKEi`MY}ytveDa7 z&|Z)I%SP`+LHj-SD;s?f1%Dmz*u6G77zKUev72o4Srqhz$3AVNucDxDJoX_QeHR5C z^4PgH`Y{Un*<-J;ac*=}n|SP48#jxBntSX(8@G&tT6=6~8y7@DMIPJS#%-gZ_8x25 zxI+|lipNyjxKk9=#bbW5an~rQyT=@`anC5Ix5sR^ai1utugAP#<9~ip&;XBFX5)cT z&|r^QXyY@ZptC*Z8XHH2BYcj>Otx`p6g0|XhTHhOC}@nw^tSQ1C}@Jmw6XC8QP71R zlV#({QP4#mBii_qDCjbeUO_oE3cA9>U)p#^6m+GB_t^OAC}_5aU$*hJQPA}sy?OJ- zDClMnKWO79Wx}_5cz=$Kqm&8H_wY0uM=29t=+O&Dqm&6R^6(ipzAp-Tz{8zv{7@9M z*u!}?ek2Nd%%k_LE{%d7_s~fjuZV)4^w5ts_M)JtJoKTBpNWE=_0TpON0%sG>!ETR zN0%sG=b@!GjxJHW!9xpdyfF&eY+(C-WmmM^MBAV8}EpMc6q3mjdw>u zZ+WQ5#(ScmeI9CP<9DN=_dF!nIJ&m+0T2GLadd6tPdxa-#?iHnzwqE~8%NhR{>Foi zHjb`se8_`UHjb`s{IdrS*f`1p@NXX6V&f=xJ2)Z`|GFU zbM=1sQoTREK_7tc(a*rk^?~?BeGuNR55^zrL+}s!nYcbA$zAjiCv;kX4mRd*w^)o*bnrJ*&p;v*c1AtTui@=Yo=e$mFQEs z0s1sT9`qkVQ`Yi4beKs%X*YFMXYxyGmI=+{F zJwHspfuE$`$j{bq;uq*Q^Go$x_;P&?zfGUZe}Aao%Kxa(<4@|h38sF#kf+ZVI_Y-^ zXXtkdWAp{WG<~5kN54yWP`_JvO20>VSzjdV(eD+$)bA7i)bAHX{Q)sce^6|rKP2|n z9~Ot}i^a)$nRt!@hAOpv07g)S^5g8x&DOIS$|R* zsDH1N#_FDQg}zFft3M?@q(3b^tv@4e(pO7+^=GB8^yj3%^yg(sUn6JhYvs0jxqPbr zf_#qtqC7=kCts^q$am?L^5gn?`9*z$yhDFU{z%^_|E#~PfWAqw_038PeT&jXe?=Lj zzp9MWUsI;*Ta{b&*OiC$ZOSwHc4f1^Lx0()?^M3lcPW4CZ>X}qTg}nmRNLuqseSaf z)e-t0^&)+*dY!&cy<2}rU9P{YuG9CcJN5U}gZlgGVf_OQ=^tv2en4xff21Y!gW6#I zV{N?ti8e$3RGX)NrY+V#*H-IaXj}BJw9oW!{QZ_UVZ9dmSo2lT*|%cK53QIQnt%W0 zf7buM|K+Cb^xTr#vThP?S-%`HZW4Y7cT@`4;`Du+I=3SFx8W7mQ?!sN9#Y8C7ziOv zNb(hK}n_wbu!bp4xVYiySi)KF6YjZm@Q!O{PMuKM4E zf*pl3^(q*qpMa4Dzyt%qO$G?<>r_F)pXqkNOt(ujH~Ti} z70Fx@#Fxb*q62p%xfR9ID8#jcL!@3uf3V(1+0ID?R7m_3du4HC8-z zkEV~+wGs2Z_ku`R<&3|9Q4{*Kr7MXQ?C$N!AUUEd#rP;dsLg2psoSJ{+JB(N3691* zx+<(7Ayfa5q@SLGTxDggicZus3W{%fS$ku-y8fKBkJR?^1?tAVBIpPW$}3YBmEg;L z{;yw-Q%g>+(c|ekMN~H@sV^>9uw83aDl+voGEN&QG%BTcj)|N<$!RF)c-XbjDbCeXoX4xNn_(0|=%3H^;$FvTc@=|&Mj>GtrbQ4CKQ9pH7N1a=yoV3(1A zH;t~a$LIzJjPCG-(F1-ndLqs^6*V_bM@7Z}RBQ}HU5!DgzcCmMF@~VajkC}!<81V> zF$^s?hNCBqbI{X9DOzWYM6Vg6&`#rA^t~|}{ceoGmN5?J7~^qw<9~eI&$s}eVNAm3 z7*qTu)dw81q#8vdRJ5+52RA#}laNPkp?3B{MlZzXo`C-TaZZoc$3Q&+r_#f>*7+oz z7P6nsfG#2J$_Be0p}YFVUlqdTyESAGmZP;TH}70Z#)PKjDLsy;cWn-aRL~G=)nNH zQxL^=*gOUfjv64aO_O8BbPUKA+FkFMp>_Xu%+RHDWP(w1*)*ykxNJIApdt0>YCku~ z_+PC$zRs#!4o0}B=qyPd+(}pTknp4bcS^$7q9nnrllr?X2iKsssm^#~k8#)lgdy*jDN`iP#5yX3%Al@?s@m3SWdzK*Ha|H38Cx};05bp&- zM_zgN!dr*$C7Zn=&2t9e9(34NlK;t7c*f@xW8y}-m<8w5|_ySEf zzC=@vuhHGc_vlgM5L#;dgjN_oqi2l6Xsz)(T5lXd+l@cbF5_<>(XS<~Pe*i0RoJXv zs0s|!3x8EZKTrcRAD^g@3}KQ+tm#9I$>aD0^a@DKF(48_K1m!0m4>QP3?a7~jHIDZ zvIc(i{4032V1U3kV@S>QP;EQ}5B7e+7Euv7-NnM@9w2^r&B^>o2;}Rny^d4WZIT?6MY?(aL3(Q}76j1Sy^gqEdzVitUalXVK z34bx)6`A6kO0ji`#JXbO6*89dQ>CuR7MDZ9&qx*?Q|w3CXI+`RY#-;%o~X`+3UQv^ zvXDc6ZYUARk8lkQnyzAgW8&`lF7wWl2m|Y6D2~|a!hcSBhA!RzDDYAz-PM>5i$TrF(BnL_UhLv( zZ1P!P$#YIza=8p;z1WSK>FV{G>FQ}_y7cmEwlnnuuQ65ZlrmK$^f1R&UKD#RgWO;q zsGADwdzs{{=N=ihUhEsNu5EscH?loO`E6h-#R0U&utTNf8fS5i;aPUv9a)FY#bbljfY=j z=fgj-iBKK85JBuBB*rdAM(h$~#eXhGZfq)Q8k>e%$F4xdv6-k_Y!>Pny9)J=U5zHj zW~0fm8_=z>8_`{{o6rNXo6*y;x#-#0JhV1;8!C_8fnJT>gLcOjq5ZM@e59WWwnIH# zQWo4v=eytr3Tj9wG|fB?qNY)AO11|p$U+sEtYK6WZmZQ-EX+mE>d!w4d4ITy#*`nM zI8N44da(0jDP3(Tp*K8vbJ!LK4WU=`g~oxpEe;uMi)Rg?HxI#{Bv`h^p@aQk@b5-I z!wG0Ky|^z0;y)vx0rdL5np`6Ys3dhMC-p0%QG?f}aj}v0+-T~rY0{h^>N#0sTDeG1 zlf4qTCv zfzIg6)0pZKb>d@I@@dmnm72B(sS6YNmFYc*HA6g!4DlR#8)6M;N^p_=j}g$t1T==; zj93G@lz`5l_aoMTE+6a%@Bcdjnno|OPn)ml_1!=#&J5Fx>wl2oCu6V`6$Bv+=*NoEwHseVj_m<8wioQ!KFE!|L#W2Pge~od zF0uEZZ|r?SF+PBiu@7Nf>;PO6`v|7TK8E{ZpAjnYIjo3%0nf$0hnHf92z59NKg524 zqp>4|BK(1*Sa6q21{n^252Okj3p89FwV)}?PMfU_N!G<)OMhmITIg;I?u8En=~Vf< zALA%j7OxGuJ)~fB2^(kmluVY4!N$eeWgw6~50N@?*=3NKUsNgHNXRFXx>CLq$wNd2 zb}d~m0_B0CE0jY|fAU=0a8pLSy&`p; z3DMqtk4#FzeSbB6Bw==;98S0t7baEmjjnMeuF|jE5m%D7uWHoxbv@T*%B`KqO1_Ka zVo%G^$UijbVr{W@QC*)#50#R3Q~TZm8b?i}-<0ZbD>urmh@3A~i1&HbUwNn@?esvu z@Gq&)Jm`1&tYoJj{x_X|DCl$|>~X?3K;|cuXs%ig=YIs0jV;kV=tu$Q1^|Wv(tB1G z_DqdznUp~ZQ(}}efB0?yKHig}h6heL^LGu5XG@H@7S}VlxUpV*w06zQ>KU_IS(3(e zLNrUOS`O7o(Lk!>!7~*$aTg+^jXXd~{GZ*eLo5CYzGuUG0!A`R| z>@{1!L9-=%Yv#ibW&s>A+aS|yi<+A4QFF5c>T8~Y`kS56FtZCf*G!;UW><8h*$v%d zc1O3Gz0f^oZ}g&hD%xcBLEFsJ&|79-^q$!teScz}fxb5fqQmAObj%!#s?9TTt~nGp zGl$_8=5XB6JO?Mt5xBouiU*n_@d)!=Jjxu6XPaa3b>;;8s5uEQH7DZ7%?t7C=478Z zECBZe^#jO4go-z0`4coS8YS*TS6CGIsp4ahOP*Zn;!l&+FeMtj4Y8rQaP&GDLe#1t zmw!ecK(T6&Q<6iS`~ZISxpjP_WGQuV*9c(zOHT5rt$ynADbVu$+oy;q9o$4IJ`r^T z0gEyn^9m5n>0p>Mz%{Q7uL(nbaN(WNuL<*oJHoHcq4y4u-@Zhvc_Q>|5?A^Wv#I@G zTWYmBxX|~~EByBkh=pq+n<2g@r8yUP^M6(_%{w5|yc4p`1<=%72))g_2;wbDURGze zPuslc#O4NfGy*m8q?^^_5gCamX{`2FclZ~4ri}~7t}ZBt8NOX^r=$-&0fYpD4c)UT zc@tL+A$9mZSJV+VEM0S%XK>G-`50*C5;BO7lU6T>M&=4=Y_5cS(}RKLDj04)1%IQ> zr^!-z*6)D=tVV`7MuxaMVJ%-JS&I-OT9HHgHJ`GU0_v&8u1&dL3@M_YXItkNg_G+0 zv(`9U@GigE-=K|)abY=g(&gh~v43kpIkTT`)oxADV7~dTlwBb{LtWXoqxC7@iDbf{ zv3*C;D+)r=dkam4zQ`txcD_4dm4A!Rxt4E8SyNNoJJj{Q`y|~Y@{FJ>mD=?Ze>V*Cz6KIn?d zx~SDQ@8RnLKh-3!WYhdaM%7#hR_3Ey>IIiV#eXWI0h{zxz@}jd*+Ua4?;wbnnO%lP z&gBs8vJ&Si#Wy^RSsL~*;$EY>I(18V&*wyMxq1*Km) zI_)Sa7EG-{APRvX`iNY4B@Fss+Y;?1zm>F#RK0<4edI@rjH`>GciKR_SE8p6Ou|Te z{;(vL_IxnnKj&lQnZg^0FBRP_X*8~=g0Q3u-aG$(ZK@~=>#)A4EA@jto&#t}NVfrte!gKTaB z#oPjM^A$p&Uxk+DYlPNqBeZTi3^8}WNOLEgXYM9q!JBZAxd*13d*NDhA3SWn153?! z;c0U}ylcJ>pPC=QA%F8D_|-g!MDtUmm|vh)=9j3@{0b$^uh9VWTU2U(ho+f_&<*Af z=zjAjwA}m|tu=oo?EiPd{*Rzn%)hW<9>ZDYKe&;3lCb$|oNoaxvJmcMVVtl;+}%>} zKug6#Ed!rp#qb2n#1~l>zQVHcY|FuOtxUYwYJfc}8$WI3;D19_b9~rpf&a8xGMZJy zWLRyOCRRHp&+5puvQA;zSzVYCE5XdLx-&OgeV94c>C8NDfkn_ z7&voPhD##>Wb3asc$L(6|AF4epxH67 zv2q-SoP;xdk){fIurvchi>to}TvB^Rf!vdj(|_b0ImPC$0_?N-wltb-4PS2( zUbY#=k!5$#OM3Pc`AjFBYx_6TT151*i0EU@fVedivaKtjz`6>GtZV$yHUXc6f>h6r z5lI<|Tf|qwHdKafn3A&?8We7a^T|@o3RYrah0xN2vr!=t0m{YC%i#2ycQghqTk}ZP zo{;B3^MAC$d43@?y~0}e(^|IyYu!#dFdtm&ZfIoP2YJ^0(7}2DPPHC{zSbi!%z6|? zS&zYFYgzKPD7T;q5jZ|i3LHe3706fs+q__NkDR(edy_$TSwc->1$0++Y6W{Qr4a;> z=U=1OC>e%y2_;5msN)BOgl=84&4R6K#^0W)Ui^wyN4Lb|Y^C^Ji9kMIOeq&1QLID{+Eexw9LWTL#qk2f8Eop`mTH8cZD|! z<$n=K5IdOiwI~sfTNV6U9vq+{ULtw@0K&ENW|F)IJ$N?lx+uwmN9(&+O7UPWjUpVt z3u&caBs4$z!=*Heu$COjv9+QI`;rkYL$96^50}Uubd6p;rG{5eskODz-|Ak%C+GU}C&z`jI=)1Rj1--p7saB*G?X!& z+doqq+;KLt!%Zi#S0{Q`6aR7vl`U=RQLN{?n*XL!07CZT7QGDPHG&UzTrP2fGI1Oi z2zHYqD_lJ;R)~LlusEA)V5BibK0IE!Hf}G0d13Cj9JiN+R|sVh)-FE*8vU6_0e|FO zi9=q|i=X07g?O@4X0nzNmsB9(L_@dXc4(aumoMy;6=&nF+pvN?BO`0Q#Cu@TSjKmb za&syq*_WQk`;2%-X53saDPHxpb1fn~bf^0RR=xWJR@(jmjY}`PdIk}~2NUIrd5PJ{ z>}KaPHZy@aBAm~h&-_Y%Lm}Y}n14X9;C`4l=AYkZZjFZLJrfomEMw(s~$f zZGdyE%`m~*0#mG4;3{h?++@8D3#@H$ueB2%w06M?>kW9q+5^v9@4^e#et6Y-4|Z4| zz&qB5@S$}OzO+7tpRLc}u=OSUX?=@S>pRrY`Vlp<4x=X4FQ~coD{5u^hJOmI-%%Uu z2s*|36ZNwGLSw9>XrgrtO|_1r+15YkdaDX8v`(OVtdr;ws~SCN1A59vXoHQ>%Qk~{ z*erU>=Fx|?fWEOM^s6nSzikC8wu)Wbznn!Yk}- zyw%Rd+wErfO*;?2Yq!Lo+kdU`_jW%1#V%ktyDg*I?HJqcz+~GUnU;2EroG*TImJ#e zUF@z*FS|Q)y4{00!|urpxBD<7?bDbEc3QE{pUGTnpUvE24`mkE zBba;aQszGUJZ6bKnoQ|9=6QQO^P)Y0dC9(j*=bK^cH0*+Z`qTWkALh-nD6XMnIFhE zf3>GGN9<|LpY|1O1A8W$V_(VU*;o4<<5S45f(*JFfb!_xsL(WC1)2U9X;T!F6e2dD zyvVH}$YiY%)2X2L9nH`+W+-^Y_C)GFg=y3v?u!sr>C!sY$tkxjL)AJPf zU)D=Q9FqT7mOS+(5`Tig&OZ)1J)yP!eHj`YG6*!IM5PPyS#BpVK4+g7UerD;zrc@0 z5DAmF*WX#ZHjt$&l9x6QDN2diH`XI&lMMMqlufKbHM<=dRCuuGfoR_bt?k?440}GD zZ7&EJHTnn6u4$e04lO1tfCV)r19d0z2fg00VF787?{I9A)PIfsrbZaMB=s?#$Sz<% z6jqKK^g@8S9mx*knPDucnUVO83;$Jc$NVt%U%o3+Z%eV9sd7bX$d-_bTqzY_@xA1R z0#`&iBk%H|{=Sr^C}$L!CInvqm`N`_5t4zu>AibGcuLVV-xabeBqJgE@tt_DdLzAp z`@4ih@9AS3Cx0ZDM#ABCyAmzq3Pk#l2nj841*-HK1d#6oiByrQ%A-*x!ZeLcrMO%W zh0v=Wvyt6Ds#3}z&E;sT1y=}LJ&LA6eja?1e4D3@AhM-@6{8d$XjQ)*C96_qYTGs9 z_)ISuyq|n;h0E1o#9h#gOw!W?Bc1`vUJZrzv(V9A1Ajg3ayXql53(!Z9J>;(uwR0! z?TxU=ei_Q_O|Z<~3@hwc;A#6+D7RmO?eBKb#4vy#N{e23 z6pBuO9)B$GDmaBe>0uYQ>o_#G2xSmS@))Q@kvIW{!0wOUHI{o6BvZ1&Ye5SL zq7n%AmG5oeDs4>N@G8h;aJq<*VnhGBPlwtk)tokQXbrtwv?#&)Zzb}ItPhmnHgdbj zbY~@aKk`nqa`anKAc2&lKZBG}j*bN>Qb{@5AAh8^a`Z_M#%MNa-s40}3GWQ5Wt1vq z*D*>ZLf{aW3v3D^#spH*UMDWFNikeXT8g-QQCuK$if`^i@SAu4?mV{R?C`ZWs2*i)~RN7Dn|!` z#(!M#UpGeFK!=4$_?f%c%J@j=s+K}qn=AdhX{_7DF%wWU_enn;$-BylXOI5z( zf5w|ngUXq7yg{u)aH4cJ34g>ExEPUi}@P)&}FOC3zIwE2m30aPe;*Nq^J4ADL zG&IUF&=@C%E^$nBrDLJ%92?Db9DlUHiK8+n13l$rqSa0VRN=U2htm*!>tv%JoE-F< z(+K_Lrbz0(EoYwe3Cm)wN1$dQHh@W$c@LNt> z{DspF|L(MBOs4}AcRDh8P6^Z5>BMw%Iy0v_U6`RxH|8p*J9DGcgSpM=$$#AK^kN=z zdNa>Dr!sFjeV7BzY0SsY=}eW=pQ(1vU~Ok0o97H-`#3|`e$JWfXyEJT#yAtX%bW|j zE1XH(_0DAOCT9wFhjS5kmw$6H_o#CTx7@jud)1lBeeO*6MS^=FQPA)Nk+S_=F={Ot zdO~o!>{ugurb#BrBuVNDBQ(YFV_-HU@HU9Z=LGE9CFEbrcB_eWQ9GUzttEO)3RFkX z>G>xq(}0$4+(mE@U9?m;6lF^A^Y2o3=7H?o2C8#A zWH|F7%UJ*&oP{vdxd%o%i{NVK-sD~Cs$P6KtPPeG>h3}idcK}Y9#80M72bY~sR zaw^~prY1d-eh<$hX=E6!oF7o& z-?>_r44PgLW|ewUNzr9Dmr%3QI3MSh!wi>=^TkA8;Rn#5oqwcQw;(B<`U*d~Lh3^q zWvD9T($od1Ym#XA`|zqPulf@Ynz{nL0#(FxFH9jK7d1B#3*%y#$-jbrL19!^^dr$b z+o7Ga13EizKp$r}jCS6J$<7|Q$Jq;I&OTV?ya%51K0NDu0PCCsu!ZE==6no0oX`F7 zI|Zb6)sT~lHGdqH5ZB@1xB-vEO@CY) zf#Aqhz8-V}1mtTugXx_PLR0xDM7J2QG$7@el1X56;K~ca4f4T-l$FYbZ1E6}?o#?) zE@YwygMVQp&o%i)G+uaMjxdU9=iwkWrKwOw<>|&MpFFJQ3f6el9~Ifs8Nqf$f-8)S zYBG9Y>I=i_`FvqAd|?e%`o|FQT#({Tz=$`6jCgbC5YLCM@d6kbFN8_)BA60y1DC|x z!`1PQWaLWx5z7LO-ey77#cZE@ggRt%qAI2Z#ebZ|uMO$ixbUo{VSYg+f0YLg?LEPv zc`ln%!IH)4+cD9-4Kd~7;2-hCPX{hO2*h}QkmCa&7C(bDb0E0!!G2Q&!2Jd0&a_D4 z{H$aoaWt4zDEYHQQ2PIC>`cI;DAGRuzEwRl-64>`q^c7V?nB4~MAU#05EKtIiD*y( zS$_^ejSH)|BA}umx5}ajA|RKD1Qk(|06_s|MZlFy1&;+6JoW<>Pf$_7?7wOIX zd{i5%i5b?m%I&UxpR?(UxFRFGrJ9wEXMeHM%&d}W7+9Hfh85F`QQPbEwf&v6ss@WL zHFFhJZ$v{MYOMOwIqGI=tNPJ}sy}s91E`A{Nd43x8l-Nav1%~#`4C#9Zlk5@c3P>5 zX_dOei>hvBuqZh$CMxOLVBZSwM#SpkZ?=sZyJ@3JsuO&Y-+S)u23$Ro?S~VQEPpQX z*Bcf4eJ@515B62kGX?Q3Ul5yVe*+SVs~ukg;C(qa;^lZ>Q_WATHO)3sd!3Q6rr(7o z#8(RR^Hvd<0WK%oEE+H-?^C7Eou-xv2>3bM-Qrp zX^I+8)71oIi%GOjO{TYSen(BE?dnlF0{1_u$LWN6g6pdp98*tnTlExQsDEa2FZDDJ zQFHiqHP_2Z1!jNKMnO$v?WtZ9T^t`ra2qv}}U+~nu6eAziGHFXKqi)AHJP9Q zE1sg|@erOCgaK7SFd@jbaBPVl z$jrO4&EgSdsZd7PF^fkk7nV@Vg0qbQ<MdHPHq#4gE4`xL zMJC!#yVMTat9H^pwTnJeyXla6pT1EaAXDw3U)5eF^$~~E$6QDKlhf6H&Qu4vq52m$ zQU|!3`kXIU@x4cGp?}m!yu%UtMp}Gc!|&AOBw1cJWjpp}3EZgG? zGEb7Rw+XL9GI-?4Ff(q@v__5_lgM#$EAAo3i3O$h;HX^~U&xRj+d@e()2rePGtmqY zwKlY|AmYtbirUvhmPhSgMSVii@PVQ};i!FM(V0T8Akq4?2Y(wO;w_NygnrxLtBKBC z2?-N*?v76vMr+BrCou)@rFgrtw93J~rpk9lc`mA1%ZWPoduLobRz;-086xKAqs|y} z)wk3h5w&mghSA&mW^ZwT|B2E(EAaoJHB}3ltDFw^oL=LbFQ^+IDVn7>Q^*? zkE0p)8=7#x(`;PNSCzCu3wm2i+Nr~|M@MMCw&}2T=#)-kS0{5bU7OF-b+}NcaIsG1 zp}HQA(ovqK(|DQI{DO9QlTPOyI)iuX`g}-d@loACux=>Qbz{+7Hxcc1Q_({=7e%^- z7>@Hu9e)$|>DJgSzAdU5!fP1l@m%8prF6 z->7}wDd>=99J3pw2rxsAmDHLzVrCzoUc8g6qR`EL8?>K4$GTbOT*}NgTD62Wt>X=i z$%)A#6_M=D)wJCDW;vGbM3(MMj_yKr^d*#~FMp*bx_hDlng!9sHGebE=btu{opHX} z_}eLS{%H#K)OZSKS0!)eiW+&qdGrh$UOTxpWd|GB#DmzALi#!c@p@{ddr`K&kz)EL z|BDw;30onOn1Y>YYG^ghofbheJ>LCrPOQS2c6sxaH7Xb9@iTis*z3`V1Yz-Jr0XFF z%YUsD(YKSWi~U{?zVfu64Q+xl6(0%hh#xhvlpc#ZGvXRfek@RS^1UhM?D=2E1W%8k zTKZnndL(q&;=q^Qe)@K-nh-uA(Q{B?WTmX_Uph0_1fMpM?F+JV%qAc?r~k@$YNsbr zuAYKQVyG7Dx9a|_LQngWqID$q~Gg-xBa#-3SfPdDPZt69O>Tyn+>Cn4HQn{vEL2Kp!`kaHdd43Jsb=l0 z7L3b@3hDH0)LD+)ofl15GgIGHow?*hofl2ty0apl`OWwD5v)+v;@UozPC?vyid;0K zo=%zSwK6X?wO3lz_1rvFb+HmJk+y|$s{dNlSrtrb%1ATbC4R1i9_0+RjDIe!X}zp! zy0!Mw(5RK#OWc~S^J}^@-8+%EI~BN7ad&+}fnVXX_~ogn(HirLX*RV$zJ899^-|>P z=c&G4Moo1Iwbsi~fL2gf{W4vvS5kkyii&kP4b`jZuX+tVq}S3UT|razdYYl%pac3X zR70Ct=(pL?TUhI@+)i)fo`1M^qu$Q_^$wn(ck%+gi(l5e`8E9>Z`JSfcKreWtoQN> z{h>HteqMrJ{?Rs+7RBht_VN;lD&&vFR#u(knS&0A6C+I5Ee1HA#0j|-AO%K$j zf5dAXUYRXdlgj4Rlx_}<%w-F6Xq{b7Idl1mQrV`$SzAJ>UWEgFXq`8~54wWC`DB?r zI53UC{o1lj-U48jqrih;9GCzm`)zR0`%0e>|CTmy1A9+#26nZ2uJr$Vd1g0f{ zsU$GH=!=H3a1U8#xqq)auisAH6; zf2QvG7b?`h()Ic{-Kc+~zWR3*yAyPaK1sLfQ}k#32i>VFX|zi;-esER3YzUoTI^c% zq8p-eH%uGd2yJt1df#t+VqE8hix~7>$$0%<<{kvZas8;1ymf( zx@~Z`;10oqySrPE06~Jg6Wkkjmkb1lAVC7bCb(O0x8M@oUEloV+;i@`@4mHIP1Ps6 zcI~R}HBwXM@JEJ!RC(j*`?|yj7spv(%ilo&!qi16YUTEIFKfW>6 zvvDyk$2H@`4$Ls>mT~F}=5ITwzqrOq_Q=Ho`3A{q4X(K-%};fd{h>l=!96pZr&abv zqj-oLf7RLKCp>hpx7w^@QOTwCx^zLnl%{r4J93JcM)ni-Bm8#&b~Ye; z6@CmK^;K}kp%ML0l;1Eife7u|Y*0#2@qv9EN+(>N@J!I7fv-z_mFO0zv0Usz^1kSgI&r1L&Q^X{}(t1iFZ!W}>jX zA{D0_!*xaY5a=6l{l_4ecLxC;2%^j-K!xe*Kx89|f!b)NK0&-8PJ^-t_F6rDb=)f& zl+)q3iUUG|r)TVhsuS1G6@#~WC5QsG9t#S_HNw?Kn+c44^{J<+gDk+gHzyDXu51UN z6d+ka=?3$x3OP~!M0AB;YTwF5pno+B^|fIK<_Q))P_Kh@m37s@iS;K2AcRN;?`aw6 zf%kGz32ZQe^28IuFnGlZ6Jkj50KJA!{K_oEleig%f)VoV1FP5<S`f7d@9Sg9s$XBwX5G2b2?dCkh7= z1-&Pp7i8Hp2FTTLJIl12Vyb!w#~p=Xo0P>F0}ilds>2dny86WR0!q-R1bafMM^-*5 zv;Qn^q=)T$Rb45Bl;Fk;WwfFI?}jab=dbi^s5x3H)uiu`M{e8-t$fJ%jSzRtTtn{G z760<<+Eg^;M|>wAtOBpc#E8TtcMRSZC33~ctnFI;ZU8X)?yXUU#WtKW*y>*A{H~LbbG$?n)oQ&QGLjIeB=eSLUZ?V(?EU z8*CZWM)|yFxDFm7l-m*t(Q;w0STjx#?fMoZJ0?J;TzN{+pZ}>gn{EO=TY=b%XmbMl zf_5}tSt$Hzg*!SURAp_7rK(xA}(<2&Hk3GOj?R?@vie$k8baMivx87vuh zShUm}zPu5?>$i-N?w)XU0;&aJOoscyo*g3GrNxia`DQ*1&{>mzVZ9HP&Oy$2qDk5f zkSh#+6Dxwfd(qIJ&njhlr_NOjL~C6DZ^F?d-CeamiWx@6UDWMJtwelxm2xe1?9sf) z>IaICrB&|4FY?Ky9q;5X3JOdpNUI~rK0Zm3KX>cYmI~`k)}LUk zT_n?oV$I+3CR+d2C~|R0?_oB7??7Xk$vnE1CY0l1hTuTOx?O+vTI7R4@8M>uZ+3Io z;-KxVuTD39f5wf37w4Z}P`|~|x8u&-TjkKVguL(#nU2@qIpcVI#&E*t|IC_*{j)3+ z=v>+~_5J3X$(qdB(B%7t6*PK+>x^Z{kh4){hIF04dOCfE+bWZvonYG_);bb;hSsXp z+9SNB)%vb=aCT7tBem$N!5LMn_|XRO7F4Uee@Dv}YXjLHpkjk(m0?10UK~(1Ftp%M6BsXq zf2v?eHT7@Ce^A;SU`YRm4Fs`af^l77B4A!n0%PF*1rKpxfT!JImZ||n07nm(L zm|h4M!g2_g)m#|dmxysqXi5;pG7LPJJP+pTFWd`Tj8zyEuxKGn+1r;m2(!O&pq^t$ z59r2VrqN#Dpdz6u!4QBksDD@g!NUR5ufjC_%l5BaY%tL}O!7+`;HoVcH>tnK5P-i7 zRNlhE{Ou_@H4+Kv9|j5Dh6oo z4D~g5MjY0X<;5ZH3sDK;Kn1a$qvC=6onV7rRR0_RNAlSi8tyNNx1O+)C@)=c3WjBT zDI_LC5>YNtiNI6Auz5r;V9IrHB;b^6*lFaK5QvNh}js> zB;YMSxGgA{F32c4sX^daKEolS{b%+;?DYX~h;T0fFO2>P0EJznz6M!_!)b!kLgAAB zrbCAFZ#ro48Wjf&@vi@M{5uWo90`XC^A8jlGQH$sUqB(F_OG;+8&oVXY$99~^h*dt zBL9~Xh)n>(6VmQ3`v08)7Au6~eZd3$8wH$O0@wT^1<0@hj^RaEeR{~ym))V_f}1Pg zT>ehke+B^jt_JP_>O~ZY_DFxTUPMK2hQkDhHo)0H|66D<#OD6D`ho|kVt}h#;o_lS zx*_8IlLj_whwFoRslJ5FK0un(>xQ!=f3cByBa(yYA5l@kCmV2-L@&rfHSpvhr$dIezswFpGI&G~85}$+*zE}}2>zufP`(J{AXN)^I55PKiT(oda$7@!QNdf-@FWN? zO<`R^n))XWWb}jz3u=8r#RLlx!^8e1_y2m4z^-KQG0^{?TqH0TCHxNb3xofnh67fi zhVOd)!rc2T~z}BVk zV~8&(kOBVtsDQGCG)tj|00-KDMI!)ztAU6AZ(W8s5I`bu5bg)H@TPxf;!AJ;%Yg=& zj_{s;=kEV-aJIo8|4W~LwebRl22zDbLjoIj!pr>?>3^iH^uWLWoA#pKe>DVA3LXs} zY~K%$LHVKxunP~lBma5KLrTn`Tm&=(u-E~-=8Ns0ClY9+7BczTkKmmMfiy3N_uyP# z-0)8dtu*5*=!*SjHZXuYgx0Xn45Nf;PP6uSR@|yq8mRgY)LY-S@bfq2 zexnTvzLVvG8`pJUa8Zv{njDRLkbbhMS1Py`^*KDrM@(N`A-zTD$*=u0ZFVGQ20PDo z3#NL`I}kJVw0^91BD0@DeZOjy@+oni!az$$Pg1?WZjD}k-re+PAb`%b@%tN->^xVE zyV4m?9kOTdklv#+-B_4z#e!EoCwwl_pxA;>jV8|PEJVba@tQws+HRgYXr#TBJY(;c zH84YYc&0SR7!Y8FYRmo;%QdqQh@GOAS9vO+s$im2Hq1eJ@TlBROMc|pm0hiFZ{ zmz1&Lrix4|l{2kaYt-UQ-0whYeGZzce5^7oO_`aAcHeC*)Y_6SU9WJSN6zx|7Zb^{ z{f(z_KK)cL(5?m`lm@>B(GI1nH=-y9FJw1i<7d})inTlQlGb(_iERjat5`V7k#3a~6cESPW=MIJ zk+_u$jOd$5-Q@=|^)fV}MLCO-?cXV=8Wp~Cnu^?`&V+md(1B2NCs=BKWjf6eC!m>y z*S5A<+4f-qNT0nqJnCS;{G<7SM@p!4#AzyBD%B&LD@vVF7e(iF%QrbY^ir3phI)Zf zwLgptPF8-!y||GcCA9wJ+}4YXYP7wMP97Fi8$o+-+e4k#dd9fE zf{kaVp+i($R^I3SA|`dKT-apc0?o|&c(_Xr z)XIpu&qb<>#pQM0V~-Mn9{$UoauIfA1!T~UvYe$Pe2sKiAIoIr z)*dX6zWp+d^ZuB3z0CasxfiRaWTcMD1V7 zaX}edf>pWGC{N$hqsw$#LTqO4_OQpFs|yU&D(eAx(RZg^&$y38FqL4NIF=x*%di}) z6*u&XWr?EVpN4tUf_$d^!Hit z6MF#Nb4xm(UoEB)I&G=p!?jKlasuN+#)%WzC87)Ms&#YrYpl=axl(-GCo04^ zZ{}9P?QPmvTV}3;%j*?plBzayN&Ym^fmO##^EuEmgHQ{|^?Qs^i5ecH z3(o2jQBE+2V^P?!_MJC*-&=L{tQk7$xD^4$H=2sIsmoDnVO2ZTrS$^E<>dM;wT-p0 ztytq8wlr2Cy4tUDNAdNI#Y|X+`jc9tDb!zH*KQV8EJxZ#FMBUL*JxS9QSg1u7I zu??wrcdWsKMkp%hR@Vz&C=YF?WU!5$m>J`-rF7E%rR!s3>zPr9$;V+{(NbGynNbH| z@(Gw%j4u!^S}?21 zILgDHttMU1x!MU;T7$lR4=9`}nF^F8yWr2{2kP$R94LLa48f|h84hYk z8OlJd+V3eJKE`3TGC^^aRk^;-lT4&F$HUb~QO?qdDxEIm{_1HlfMWyyXJv@5*3Mtv zYq^;KZC@P<1$mH`GQr`ehb>%pyZ6!11a#@gtTAwYQuUcSXk?_qd1-rYEMyy5!E!Xs zK;vj;H|Y(zZNuV{+H2rU*tbT(@*Tsl;-(yGTFwU!VeW3}IVw1_iK*tKq|Wu~smrQS zb0nNMUuzT4!*Ov&sNR{;RgZ^$9?dcL6r#mtdmFHkq({AKcA#fW7}!?~J4s8!fSmlT zRudPn1F9A}UIw=Z)v)Z1mZ@j7%EjA0bP4YOig>jOHeCGAN(?y) zZt!)b?|FQBW11&!E99LCyT_2+^63bzuw&0gWSCB2kZTlB==uVk@)kq*CGdsSEyrH7 zZJtp>?Py6GyvBd4aIR2@=7IvGsEQiW)#mbse!&R;Izq$C zKI{w=+PeU?yi z3G*9qBa8W=c^Wt_ZPXCFy>DijOmCyf^a85S&n!oH%8O~tf64JN=<*;PUNC*AdXKD# ztau)UHWJ0})l-AAQN?!_CC{n&3q=w2m!9f_L7+A#0lmlR8K4W^+&6E=$Q}0tPKGUgXVW)%k%k|XrXRxTEK8niW+85DGQOTqXw@t?*`EnH zaV;*j=Qn&V=N>vc%jtSEbzU-!vDkwd2c~i&CA<7ehGLiwpVu#v4W^ z#2z2Zg zeF1GJ3HoIREs~<;^%4wlW&xN)8%{$<_aJ2m*UH)WR{-h>p)sn7oRQ@gC zpnm^{=JMIs@D5tZa7WQFWH;JxSCP%{8>=5-5$knfW&1^{{8ptx{_)<|tM8|Ul|2`3 z^1J(fyWDB5l#x%we!CfLel@IqC`FE!g^pbphpiW+X|0?Lejrvq-lEyNiEA+r0mabc zr3%2U_2DwjL0-X8PQg)0VI?DFIVEK|Go^JD)Ji^yL0w3GQ3y8jE@OSfEFyomeorOu z>oW!NN1cqnpHMNn8=&^iJ}b=Wz2HQ;k({YH+p^NdGr8k8yz^8NJyxvjy+CQbP*Q5! zQ5@~PP;9;6P;xvktn9uRY<0ygGCVCLW&<8eS^fBm49^Qk`!4odFNl<$`#`O@la4nN z^O#>9&n7-V@9H&edo*18{Ji!_xo-M(FT8v&Jbf?RbuT=4FFbHBJo{LvsCJ=M4(OCcWBwz*w>oF zRy32qAM(QIv~r-V`U=Pr3U7~@K2z@E66aOJb!K&UBW2AMVhf&X7MRny zZ(2!Xlwr47*D7Ny$qx~b&Y^Oj`?#A}ItI{Oi;)(3OTUjz`IRzmRwG|(Sl!eOvF$k@s)4<-U(CGI{yyhsHCMQ)by#eMmH!|)J}5R2e*2S zTcd8)81(@`b04igm{(16IcWEUXDG-+m2^4uaZR`+;5v^;B!K7!vv@x~7fB=x_k;l* zMDB$6fLh$aT1Dg^e7=hDlK^-MVO(YXiC5nh8`EV!6r?=VYoyp^%k(OzisE5tfqj7F zbH_rBKT|B4X_hvNqGd9Bapw3ee$$V)cqY->D)k|kCTQinrE`T&iDf1yuwz+x0q+w? zZMVzNoT$EOq5S4BBR!ab_897Ua63;FXa4G&HeUyK)YE*Q=!TKxZ1e-TU@jro-ps@E zocfyMI;kQ%Iohy`pTBGGaF=Rz=f?X8U$l`)4u5#!M!{!?vC|7#;LU^*R&C4{w$+Zq zL$Y0sRTU8%vSo*pIb^je1P%6S5$N03EZj}yf}8}Qe5nE~+VAOucb|62f9}TT@2V_a z{29Oa;Bc2=b?3wTSO5ZA8D$(Ct4`fsCkYZ3oG{4kX%LJ?<)$eI!|1RlT|-VuloUQY z^V>v|a)p@$K8-(b=aZ*B6=ysxDq6C!5ytoso?bP*B5e_RwJ1ukSlNDs5r||5Re!Hu zzGT|sZh5~z8e;`-$+op#r{A20<;t0Qu*rfu-)7Pnw{sV1rIbJJKRsS(0TQH zsMq8Tm|Cyga-$lUt@fL#k?_t@h~J%e7G})r^PeZ3tvNeD-=A+DJ_xwYHuw?jY_26| z0j`ovsDI?t)|9KSI{DcBUec4PGZOcY`KV!E(V!&ehJ{x2;q+E%!otwr>17q(41qeK z-MmFTbaFVjii)SkbUS#4)QbNZX#wew_USv$0#@5Ulqxe zC9_~Y!D+$=mW?u2QR)ew%&rTxMQ+;|KVzszZ&d?ypBYasOS7U1PYol@wUV?~<26jY zUiX}#Ms4Zf47$*N{-egknyYOf^`kk&WIoKqi?HVmIciH2XAn?ja?I6UhB$&vyzqO@ z$fCCVa0U_RKVzsdk>_cP$o%jPGP%X+IU|hPQp5oUKhS@!RAXAn*KUo8+~QJUdVX+> z+M1j)X%J9ja;7tBz%#6jk2Xi6b+lvtyiFQeh+VFjr0ACPac*71`IdC+4FA`bW6Gc? zJ?L;O9tL$AHS805!OwsnA3I^cQ{?Eeg(4WCV|0o)lal-rY&UMEV%o5Ff<1<%J9E_@ z=3G?=mI)oU)2re<0`EOPc&2#-7kgrOCSQlJda>R_ABQ>Lve1GoR9Fn39e-_=O*uF0 zuAqVRPA=Gea%m^bs8u5zak!{e zOdN5VC?lw-Tx4n0*f)p;hNVBx*n{DZwp2cJvlf)LXt3J-tpF4U$J~7c*X)`9;qXD%EhS?`3HH4;%st3R)GxX zAtr4L?XM^<)}$&ZDb}PIj1Lb?FU#_IdQRB)en+lv-%Vi%#i^O zI(ZJyQ2`e?upttZl4AXHK6ZsQi@yMwWph^#h3lANA2avSgHQcC*<_tV+04xz@W;{p z98DRsPa#Xq8;I5jiB}7dM5va|$mpFH9bI zj^3#X&}APf?qZ#~whf7-`(Z%d6!z~tjgMT%d$h(^Mi;ymSeZqbXKXlcIxYduoB9Mq zDHyp{4I{mjqDC-K(YUh6e@Y5-B9`p?H0kqhHcrK#Uq?qNS!tRQY7iesL+Y`rHBUusLJWV``YPC_~a@Y3LWSc|-Rp zVbj#G4kVO|Ys%H7B>Y<~njv6nFy%U=z(G2ncks?h2PG#9_ZKZmZ~Vq)U!<=ml%a~W z=n?A0#)y=t1NYr0%RF)qo`a6jz`Tc#1RbNn;}5_%;tidM!{3&OQ6rGhJ zsSj_pdn!YdZ{3{G+sIhfZC9QBVLo;_h7jK0qzThoB{{o8P%PSJJQ^Y~k&2W)?s=aiLSq8qli zpa+8|Tp$e?&e>cs8gRV*^MLR~`keSY1gtMYPP;la>?V8oz@G9bJEts z^%P&SzSxr&6x|hqIT(Ud7V?@7N%1$e-KVB8lPoJb9u!%jx4=Slu{6SI;tqW)&h9!w zBBeiW77cd#1fKq;(YPi$_R^+7emDuM_pgC`5EEXDx%L6At+ePo_1z$@iHBDv0fh<{ z%oei=hF38GwVu@HW<%7}_-MP^aspaWEdDcFcJ(J}nSqs_Y=wvx4Y3$49g`R$mfli! zlguw~ddnJ2f&c++B@NkVzo{M*L${j#_a2eHb@EE;dQySj;y9(V-5QY18P&<7toLl$ z^&jb@DwNo}_E;3kTTMi5L+IT|pvyI|IH4gaa6=){FzW=9y z%W}RkZygP7$0*72YpKG^P;DbWy3zwzHG2hAve(?RE-Lkjmbgh$YiK^cQYTjOqLm>pDuEL$2ldUvh=sOFtsBH0kD85YOOVVK}IM!N{CqahF=3?Cl_=TTk5B-r%g^d=s8aLiv6s}nk~228&QOvSj5dX z_a|KS9f~Obo=7I12YDl*b5l=0npgH6OR|p)vU5{-Be8SSama77u;0^RzmLXee`n`q z>v_)N`CrNS`#WGr8pad&3D-ynqs>TlMoq}JTWgGr5SZ8kJ5r|(TbZUj&}`HUC-Oy#7X3_?jzGA3*OlGQ zZpdHm!taQ`+#LtdzWK9|l~m)SWpxcmk6beJ6Jin>^%GWMJ3GuV@WT{*lFd-~A*%&g z#RGXbyj}|I^j!T3d^>8P;fdtm`DZ$}$1Q>Od$`gMc<)H!+?=0SSD3sV zs-HMxFv0CspBQ7X!5yvZ@91%C^R$8AFohk)CmAG9fLO0b(i6>4retgH^`X^6GAt)e{ju2agojKc_w8w>sI@_`-5`XS! zU7AO!xw|*Q-mcj*UHNro)$7x@f@00RpCe{<3Oti5a2$VZ^ei6WoTBS7FPnP+k=JwH zry@-%zTISa=QNa}jCSP%^4&|alvbxWnQAe)8JCuK>e58<4f;j2+LMS0IFGbIam zt5p~C>0G_G>|b90*pQ)3cOT(nZump`h=mLU(;e-c>#2N1xttW-ZRuQfKoQ=*%%O;$ z(6yg>f`ZL|YM=ycTKjq>8&}=`_8G1v! zuhWIUynCnTK<0Pt!|fcC1>e^dEmaI@~p*DK2}qE9LKt@GA zg}sTVPXXR@zD)o`#6(K*`}lYqm$u#}Z>6yXM8B-VoI9^ohg>N&8?U1DAE zmb=%OvM#Rq5S%?1-CD&x%L7PeS$|rM4i+fuFXz!=vv`9B-AS5C^_T8`_d~YB(UFvJ zhB3_9Ihl<_EQSMH((%*@hHG$t0791Xq28 z4;MJ227g|E`)mPo&v>q&_+4 z&7Ebh)^k9}9o$l=FehsxdR6guD@%j$IRBTIBR2>`>->g|JLkCK>QCt2D-k`?ehhVl z3?Q{$qCN2@tZ72Vg3X3*cQniRDG*m=GW%{xFys*`Ze@7h7Z%eJJ3danY@PNhHUq~xU*@G>qaXJy{&XQrmSWxA$u6U%w-PIO@wFy zMLWAO0k~1Zadt+f6;tb;E6vh8)LzAy6-`KT4))I~TnNf7RNU z=vU-mvhq!DK4*_-S#fFP{+r+prW@~yV#QX&9vN5B{*AwlaHR%wv&_;Ul?`^As{JvEUmp9;MtKNc_JfJ;53qP;)ZX&p!QP2I24K(;p* z^P_K7B_|GUg@s;RTY4VJCExHdB=iA2NsunG-D5}%ix9_H*Hn@p&s8-2`Z4+_}-lW16_}|oVJLKTR>!Ji`%oa0wA*UM8g;tI%G` znpkZCQcUkStaY~l;_b)|jmJA)e?cb?KFVv?8h?5%hXGd~an;bFS|#n;j5WaTY5e%9@qLX@%~?d z1~X1(PlyC|u_4AYRs^Q8fk-pjX?BNbJz6XzcCnIhL>S?^*ts2F5C_ZsR^@CB`9^*P zzpsGSw#UuqP!8NL|K=2}32R$nGG~+8&N<_MQmTo3tX;DvXp8<}J#0SorH{l`WZ&j+ z)LRdsDsU#y4v28WBsSNqYN=2th+$2zC$LCKB-DJMY0PRQg(prM{m`!!o0R(X#I|HjVYUfl*>jei3mKk zmBwxnDZ+$7Op{k}pliLFqKk^+K{jJ}T9X!`2_{2Y6mWEX7i7CpjXqBiwyC>}wK~H% z_ti-;b@rP5oyDHDC*_whqlp4D%*!@JV%w?kK zt?N#d=>e%|`a+Rxbh zoE1O`@0>rWbwfuFby@S1&K7HCY< z3%fKkXpe?^o$y+{1p!s+>#u14m(~=nA^L z5pQ@c?a{6uGtt`jru*2HrY!;K#3oTEeQJ}u)E(Y12q^~v3f`wMUi#uM;)KE(iG144 zlpgM`{qxk|&7h;0jnn<#^lb#6%?Q_hL54#c_$@LBxaTr?Ejl0N3QkN&LM3&(X+%;1 z&w!C8ZSn#I-!RCAv%Q*i6;_VY>VH zd_#A*#a~ud5%)bblG~i@9?|f%pWC;1!invm_U(`|?1{;$xrIy-R;2|ID;Ew|l@|k5 z4z5mOm!SM>1Ubx$+51L}^bbbL!?Ol}um$}&1NVqSQxD7JLo&PXOUarGE!q`J8PW$! zb87CQ?qONOBlRv$L!nY0Dl1|6tP=Pdw!-NtQZ1*44d>#1is&#C7Bv`~<1htl~ zgRSY+RV@nTY&Pos!h67|S{OI#@C|)kafh!Dyv96D)m%0bnmYrDF{op}oj=ojG*t1> z%c({fvfK^$IV$ps><30j@j>t^&Ari7KJv|&2yAP8nQC-tdTm#UbhOTgrZBWxj2;~T zX>swpx!09CPtSK#&O>jWQ3s>&x$qy7hqSdCOTM6FxG_-W6%}Bq^K+zn&M4FT?v`^; za+DydV8_5Yb$3hTeBFCmQn=E)WM9n@6N8q2YWt|x4;A)6Gr@v9`hXv5-sKHyy-HBx z)j$>454n0@xuay1K z1=g9@L*3SUe7ccN?^!CczBuPtni7uEVkG_{oZ9T(?8zcHP93se);)EO_KaQD?cP5c z&Cu&^`npjr-F!U1CRE*ZDDhb@SEXc0myfW8`uGmzR}|!!a3|VK=Io1yQ)So0fmT?} zJLi;n+yrYwq?UuS+#EmdUx!2*`?kg@exxyVmElNNMEzjL0EVkrwyst<&3i4ru~xLV z2a9<#tuS8>1l8(}133@Toa$T1M(Xrd-`pGg9BIXHs5=gCIzTW=exwkxaTGVbWwWax z4+I~|uE7BJ>^D>XB>vSo0l)#BPP>1UTYZj2%c14mt9vhvbNo31A7aKTLkrG>4|8_+ zn(n#wR}Z+&eLhkIH(PT?kFCen-#6^Pr-3XvZsNZAOu( z(N;Ki(2Ww6o#4Qv5RtniB@iI-L=gIbgnauR=M1o<-yBuzH_T0FlcEGdC7y^vAJC9* z^>EHS=r_sL+C{|+A2}DkujGwC!D!6``GoOZBYn?>Y zuS&-RJ{52`7w?iQE)i|D?LZ+5tOp$bWQ17~F08?R%6MO}KKYT5pa9y`4lju}V8hQM zSPB?_)0#3}0FxfbXsj)lzi~2*cPhO7bU;QyQXs*>IreszY(m=Y2XDm6!|a%iJN38W zbyn=MhvY?vev5(a@CEyXpjL-!^rC1y`N_o#JnJ`6KIXFT-krE|wws4R(R>WNaBkl3 zm_H@C4sy~x_Kcf;+vn~A-{a!?pw$XWw(tV38G+8`;p!Snu;O>gRn&S^NpJTM#ZR-$ z)d-}b`iwqx{UR5OVCjijtfIbz?6}UPQlz9XrHDYY;x3U4! z*TIC|uTu8J+4L~Nyu1-f%4>`gN5bHRQNOsMXBLHbO?y-S&X?_2^5(LeGF_z<#v_~c z>EaZ?$8{%ZF6`_2;|=XwNykxiZ5+1@x}5Q{`#EBH>;0N>7S1k@#fhrCTVksg(+ zaj!Lp9Ued^k`|ki-mbv@nQ3M?($qW4~7URf)$JUjDOysJlrEWKc~nxrh+XjTCupi zDufa&!q92!+CY10Nd+|pX&$yfB5pq{#gh-n&Y_)j z%%Po<<3d;RYU`Yhqszs;Cw%oQJJshd>(0g$jhq;J@8-sk7~L0Wc)kkEA62##e7{mY zvhk*0I<)Z)v&;Qnl<~btwrOG2om)7sZ1>0aqWi{$fWjp1VSV@1AK(3t00SD$yqFn% zx4uN<=nH3XFA1IL9euERz-&Xr_7u5tq29Qb(FR z+*BmvM}#O{d?Xe>Tf4bu4lwR07+IhkAD({GE72>Vg8T~;%DkBxKKTYYFFU-+ckgq1 zu>)C7)ktF4Q$gZy2N7ospbvRDfIO>Nn`vFwWbRW;Uz{p^3T6D|99C2{%z2#0JeD&* z@f*R7dS_qyDFwE-7SLl0aLNRNX2C+AWYs%@4hNKz`OkmsFfN zWASEk$f+CRnd>*;j2oA^`2{H(TLIRozjeQrA55`)nUR}{m-<1M;f>{xT(shjSE|oI)D9-UsrHu_rTrCclMvc{bhewuHdTdTz5y``JIwK zLf#4k^sUo55#$%e>mMG|&F);RcUjH8JgHmkIGQ^?X8qO&SkEsps^y;PuO~$Z8tyC` z4Y>DQ4(qlba*JIA*9%L}2tg#KIN(#(oTI2^L`3hznu^?8>gYMN9HT*@=w= z^$_*l8=41Pb4=5TS<+RYvPn>q4SLujMeI`R7>$$I7X)1<2bi%6%!`y1oA4Zl-Z^39 zgR%-6`baoWHk_O&PszFEtjSqLYB<-|50x zD72Y5eg^a&o>%J+ZVP%ikoYI^QAxF>t-BZx&w4}i=fY4?GP5Cb!1zd1wi}GGvJt@} z^tM;EYZKtk5%l<(Wgo?vSme!FehP029HqZ!b@xwpxaSm7&OCQg{Y)G#WyIoR(KSB5%#33SF zzwJ!yomQK6(;sJUM~$C)v6H2+z|=8N(?Y|i>zDY)ThZx8L9t=^*xtf13~xzELyPG7 z43%i}e2H~*Ovxz^DO+*^C1*=|2d^$-zb2VvNU?>#7g>k!%-J#SM}BFb*N6N!QlfmO zk#hj53l0C+T7w7!<1r_%KL%%gz5OY=oeZ2F`=Gfmjta&EEsl{V(%-%M3pW2e{ zF6m6BCX-N~O99&8P~c|=s+S9nDO=p>jA{bgU63EPC>*-@R++?BnambS!5MSNQ=l{( zeHDQ-GPIaCzW76Yz8q45p8=Y1EM{ndigRm$iu3Y;gL44n zg~z;fVA-5oVA(urpzYjUd)+}^`(?Ya&yaw~Y~A+W+4gj_?jc6bEZ$G{oLC|)A( z6MLfZC9{i*tRXqyJg@hao8*)!eO|i*F7tRBphDdpKZa$nc^TRgk~K*ZTF?OlPD*Fj z*KvwTYd2Da?j{^x^8C1U+{+Ue}2E<)-JDR_V{5*f2roOl!qYkuBayo5JM{ml>q@|C>c0MMywkaw z=Xus#B+UcTL@6o~N(hOBl%f(sr84adMPx`c7~Y#9%8)69M5Tc;RwObH-#Yso)%AZq z&wHPz^IL1Lz4jXR-shb4?j!7V*Emc_&(m5`cetXY#ewH3s}hH6uZ@e-c9oZO4U`p2 zy7ch+V0$d0^JxAK{tw$Y{dW!~8;g@)ELG_2`ORFk`8-R*BH1^0*!f(cG{yCtdD3@H zw%!r$RG#-o^XtmiqsqRwncgFkXLk5z8TC8+Z%@*GD*Nkn%lr!l1%3TB4J&G5n;Q>5 zRhR8ZN}qUdq2dSs<&Fd~t8CUMvj)BJTcsw~>UXT$)~p^_oOw?=Qos88f9U}swer<3 z`j#mM#IL-4WbN$Q-zwo9#Si9m>{(G$GW+TLpVMQT)PJ}x_&NVaZ?`G$gXB)7gex(d zJl1{Namc+W=~nniC)v`@&6g&miDv!^t0}MUL_OIeNh5L-4=(i>@q0zy(n1@WM4MH!K=*o>rgBW*;{`yKjZg$f+y)h%Q(8llgOa##-;oS_}8~Yc)@u z)t7X9`_J@#ortMPF)2yBI>LI=SZfdOu+%dXtj8J88GEK?QAJ?w`1z)d9w$Up4y_13 zcxLIM4C_rT1ugg9HOxC%-t=(MUhAyP$MWUurV-Yj)2sC(BcI4d$(#>rzV+_m=klT^ zSL=!PHR|e-R5Wg|Qyy6O`y>T2qqX}cVMrrCScqKBtXDYi|SH)UMx zX4Uos-}eXWww>{6ueJ7kut#fCrGaPCl9Z4@vwP}ATNfsz9qan_jG^$zeeN+0&tn?i z$C~vXscn60(AVwvF?Vc0ZBC`Xh-TT?B{L_LXzY=wpMNp<&&kM!#InH2O^@Wy8~+%(cUAn@%3iFp=cx4U;-ta{tKvS%MD@RU;Jf@a)4DFvb7oAdxOt%V ztoE(&neD6De6_4?W7sb`>k}mlM0co#D@{RdoiTeGmIRx6sHp6@QRwe@sA*MG;T*@x zyPo@=70p1m$8x83>*%+*O!u&SA+{*>o#pJN(nb3e42s@*27GpT zo|L4MH(a&Jv!Kvu{+_q4?G2@yWBqeu>l%KV_3ZaWaQL*GqK+4Oo&nZsN%qwgFK2DO zZg|D##`Bn4(Y8qiS3GAfwmlK_i0JN);hYt&iSb&wZmI( zcL(f>3?v>evbW5x>h ztEzvS zqt>?(Ns8ynXB9~N;C(-(W3gRry=AxJgwRX3(f1CE)VySaM$g>acQ2=RtD4Mvl@w-M zoV=r3czd~X`;1trR`=wroT?*7t9|OjMk_~48mhX<_!NjKWJ}59Xx40-GC}iEx$=UI zt`CT9o{{jG5zBF_Lgkf`8|M%&vpuKgO}MVyIqkUT%&OoymJM1Kl;5gA2a z6*{E$Mmntjn1On2I|340r>6V~KYm@TMm}VI;#zZ+w&&X68W$I;Uel{t5aMN;n8^tl z|L_AZSmck-#}B4WqCpS#M9cMTSn_a9#m-?hBa-ZfJ-&alBHtcftg7;5$F&_I&r~l9baz1UKS~%&~V+Mwdsz`@zoCZ?QRu|Wv9DH`wpvrZkUpouRQJSBxy9PYM8>N#!V({wQm%guNIC1^T$ZgMy0iCkmDkK9^Rk@LtPA&4#Q*y^ z-srabtQ$uex_xD}ZBcE`r}?&@I>yN#)Sm6*w!Zu5b`_tHwjz$=(Y2o!`)wNDU3a1T zR9%Je_o8LL9{oAn_tY&;_JP@0+X?lzBc*;L3z z?lGP8>(9;4{z)(7d*il>@O7x+B- zeNknLdhD4({(0rr5B~i1%a131ZX7eWesb<1Va4#{YnE3uKe2pTv^ix}d39Anl6TLF ziL)KY?&_LysKTfyb9s?%Lxtq@iSFpWeSk=y*dxtK<1s;I76JX`$LwnAvKA^G=lx=C9Y*OzjmEiC8&E2{Fd4QvVzT?RZXVx{w z1)fE#{PTEwj~8lMX)D+6zA&=$quHc=E0fko#*ePpvNBEn0`v4U#{x(5l#-wFudgIj zOSYO4NS@A^%%-=dB8_UT^w z*y!>}EG*T1+2i)GOWncmdvv3dnm{8gLFbip3kY&gl&s1Um+g-e28 zo3q?zPP5Xz%bKgdd&$Jw{8wn~{Y1+wuk4Cv{j+u7Y<%|3bhJ&H?G?3q;nRtStosk| zOpM46@47JJ`-PqjXHzbEggRZAoiu$yD0fD1?V>M#F3)$9I+RkI{p{%e%l*rDRW4B9 z3{M)bm zic#p+Br}6rg_z5Uh6c4kF-eybO$};C*KJJVx+N++y>Th^zn=-V(|+?Dzb$@!`%6{S zPi95lA6EF+nYPo`tWEps6u0gVaq8Qe+}lYh=&MlN4vlq}K0qzPAMwbqQbk*~T)y;m z>62@|Rrh}Cs&*V{cW|CatjX8y!)cU62zy#-L@LtCyJG*mX&68#XbN z40CtSdHlqZGd;P;GxnDAz0DilW|h76{yg$*rW?v%U*M9lEG(e@Mu6LgZ>y9pY@Ibe zNanGX>Y=1@(v$pn&&Nrw^Vr!xtFLL#pX_@}8}prZT*@giy@Ny>P8?L}ne{PIWkl-o zWlAlxleW1p&R)F3?%frSrRSmAe$47?NlCdEpGO21P95p-r^q{a*0@`<-fSrSnd!6o z#f)=rjFU>I=kx`*o@=gK{X&Dd64V+w?tZaK;g6&5jNc#GP@0(hy-VYO-_M?Xb*E-L zepC8cVU@11d2hRzQ(O+yysx@6p|{H^?hvyyV?*ZX8B^D6+VFT)Zxie3bT>oco)Q5?^ z4idw@wXav-tHj&WsJ^!=wKySqqDDw_YU$_d6^<22Rm_Ad;SFD^d5#t35{sW#-%0FU zp`KVNvG`rJ>FQ`>iNzhMSHc_bGFSGt`#4pkLwD7V4i#6KX=xQ%5@!AFzojas)m<31 z&|iPUk+)Uz>-T(r+0F`reEin4M&AmxJ?``eP(~&QC{V>0E-Fr>o;j@%-bX!=OcUB z-%p}pvv_a8e3reN&J%;(Ri5{^Pr9E`xKaC?$GQBcnu|5{4%jN024}xHp!cnK{=`=4 zs2kSzcXmtn-0-`f|5M9uzUzIzVja5$6WxMNq`yAQlWIA0GwDE@wfCp`mz$-d&Q`b? zD^#8?bz9Q2@%6zy2TJozz53yQHmKb8x>Q0+*r?zuRDs2`o~`rXHJsKzE?3i4D|CwXQRuy<1EA$UwmuM0b4yT(aWI`ww4zW#B`nVOO9X7L&5 z`ndQBIoGGeJ7{LT>5H49?t7!dFur#Cb=B3GPTRg(r%iv-wLDj3Q?HrsmD&0pX?Oba z`WdX>sznF5#vpl^6Wh@u|YWf zXb^Ye`@%x;U-7R#I+KS1u56a8SDMXW%xYo?9tOx4@?%O}&*1PS7RqArWcU*& zGpAEWN)=CGnhzdJrOD=L@>K(vh&sgypIPU-l*#5d2QfqFqoyL6di+@-%nA6UD1ON- z<_hW{Jlq9l_MXGsO$oqfU1>%##reDl<_D?;oNi?OG$J{L~1idxG2L?2k? zN1lC^$mH>}S27o4$$a1|W|Ky_GJf1TDU^Y{c(h46~ z6*`Q^M8|nNY5wQ!%u0OP7XQCICLednhf}^D&|@PzCz<(?N14UcQCM(bp(WN98>6(G zNuc=>Jb8Zlai-XiGqz?)zyVt4%b69FKKOvVHboW(?LEz;4inpa7|#9Le-RGvs*>bM z^4m@`uTnjL2?q%({8trBB!)+ua*-LTgq?#&5iP}2;;TMke!%C@A$+_V?m}IPCypea zFh%(;P0XpbxCOYL7OEl5ljAqYuv93`@NsjJ@+=KJs4I#r2mWGtmOm!);qth!6dd3c z#2E6=4&7H|jpp-JSi7ZgtMnKcO1msi6_we-5H)3aTz;V`>n=XIkiWu~MW37pC!}FM zWBw>-mI`I9&^vTn{+4m95K1Q@@~kvc9)GwyOH>W_VLpd70{;Pyf{2J@vH2NuSZ0*T z@WE_=ariGISc-q+id9REqArS6fgQ>RMVQ+;1D_**XBO)<&Okm~`cQg5*v9Ih4u1sobdmD`7IVn?ir^K5`>r|#eY>ba3>oid z^-yVyEsY6(RCx-hR22@xn+qQ(q09iGCr$me?-(4=hzDM9isi(Aae|dgxd2~YEMv7( zs=%e;ARqdr4mlysXH6c0&C&qu#5q*HFqY@1`ukKDID~PrTd0r-%fQ2;Fc`PKM z$&=#Gxys6?41^~KQfI!!EtV;k%!lZJV;{+(;taZ2#~OOXBuoJaQb8XjJcO`|)`CGc z)v@A+95)CJWclkKvQFT$HK`mSg`i>DV6Vt#)-OsrKH`%k@N?Q&hp7`22QU=+lJy)b zf#3ldeL4YLcm1T?ZLloIw)cK@% zO2C9g`f%o8n+lsg^w3R%O`Y@!%IolRHP}C>&hX_~Ep|BNb+~*(5lBgV1AX>LiU51-8*-`Y#C92SdDP|a<-~BdC*Nu;Tb*(*zRVxbHlQw{4^Jd% z1}0JQVp|LfK*=OlFky(Mo~W0^w0zm#L-<0?0lVzScBioFK=wrbv?=Vl_>vEo{|yi( z@N1^AQ-)mb3}LUPE|%{E=P#|&t&U@q%7I?{M!-iPeT6>5w(wi$d_5j z{zW-!MLSmuCA+ZI`TmQ*1*8x7e$j0Dz)Fiab{&=cBCFYtsMG^j8KX8U2vvnt_H4?t z1vUhhB8DP2vAM`;6ddh%Dvb??mXhh{na!c7e4rB4xL2jKmr^4Wa^!09CAP2+%3|i| zFTlLU8s^j22iSeo@@ICEt;-iGVZ$lAq<(No9Yc$7TMIs$KJOE&0het4h_keT(H#R& z4KPvurSt4U%BQ#w5<`Ho&=MO^ch@EM5(}&W*@AD<%dYXnz4hC27E`Bunl1pPPk{a80L}5(+A5V@q#`qJxIXaZBmR12ZbU8;1Mccs~QZ$LPl#PX|1#@mwEGJUI z0e@LI$id;gixj2CIdr_PuN~Yg34*bu4 zV0qF$Wb+z)HJ}aOcLnDKWr_g|ZE*w{QSqFsl##90a7rl$fx~GXoSb0uqMgF=pa_F) z-#YO)C@+=s5cf0K0C0JJ={k-sWh|Bb^l11$*K=GcW4WYpmQ%w?cBd`DZ%OAYptOL{ zDWT3z1w%(se9%H4W$)z_;m+`tlPg$lX&z@O)ep95x+_neue*ZIL#S5D1gK`{1az5o2V_J?M2RL ziV9ZIMGMFAq*2i&&NWg;K0t5)Fzpa+6xz-q`1zMPdDLzN(oKs$tDTn4KlF_AiLx&Y zO^aXI$+4r_Le%Q=)n9VlD9s=XwD@UnI7ZY7u;eA`9S?Ts{J`0StPQXRMe5u? z)T!6lIW9I_QGT5Xcl&_K+NjI}CWag{ZZc(M$O1hS>cJD^JB{R;2=cL!gePp<4q9>J zDP17WO!*URxSs|_Y08hb<8Hy@-~;t6H6qOS)|oqd$YtUft}(?2wth(c1)(r!BsLhN zv>w{;1=|Ig1nw0|HPT=Rh9Lf5GWQteFz~oOMT8jBL%)-_;;3W-q&0IR_dAtJAX6V1 zWkUR~}cC+P#u4A-fjkE0l60sJ>H9 za&z!1&X+sO{XlhwRm}E*y_;h-H=eQzo<4Bf*2`RXN?TA$k3aD`SB2UJ{2iGnKl={X zno@0`83Ig#|LY!?4iAWEN*BcSgYECAhuoD^`a`&Bqx@zrkKg))yN8lOVtl~rald?+ z_TLWpN)Ji+!yQQWb8d?sHVzgbDFH`F=d*}~Lwt`hTMl7Q2`!rowzl999F#B_tX4@7 zW)uPZj0tSMssvG@h(i!8u0v7DL8F8zJRZ_BBHrO1AyT!Go0Gn8$xkjMZY z8|hdO$1xjrQ&j-mvP1>&!G{BJRV=;C=oows(^{}j~pYq{>7?J5F-C#A4-V@6ow}cGBgn<1QI**B%!T~ z4STYI(8qs3;4ASzH4tu8pgOb=HW**oLOA2&(nE&xR8V~jL9OClErc~b=3BRw7>ECe z{QJjA_=62+nFsZzbqAh8e_9C#EXk>jP!Yb&K~k55WYLl~g23C?H6+?cqor+xoF;5) zgF25jd73#e80{Mv4D}&*n+!&n8YSRs8=;6<#YOW^Ife-_+~ ztJgC^1`7y%1_I_>rO?8^=s6NqxK5$7t_v}ZCwU7A%Q6N&$q-bPH}zdGbm8z?;xT$F;G=1DoHI441 z`&KKRmuLe0`ilMA)TWbSP3jb4qPkAnL2aaz%2yOg`vonm^Y=Wb%^syX#9rMZ|HKFv_VFl0h*q3F@{hgM>3AXt?qv zA*TUrN>Iq*{oHRt3`QUfM_0g%z39VBVkBl7ic1c?VA!LSSA>i}2#`{Vy+>>3f^lZB z84PWK1`EgrmRRb6+KwF=!0=X@!B7)mQb+e+5hi4Y?R*Vd_m34uE_T9-$b6iz1lsa} zAg}{}pHh63$Yn5&DlizD0`0e>=+}ff&d{pQgo@BiB=m+*6ws240M4zVtR@(@0h7Vd z7Z8v`HW-CXZ~F#}d?^44y(JV-)Ehz_qgzN+FN8v8gb2%^g|<8b4=XdFTVCP%HLX))5GI51gWpMp!=-p6|Cx(=%hN9jQ)Tb{tzlEO0uAq9l_?Dm^kTsF$ zh*%08)+M)9}o7Lk`A=R6LB z!(f26;80ZX4&qc~iwLTEA);XV?~J&RHKpY?9cTsu78*@ALGV2oDWs~#qgD{R_aH84 zD<6> z?hK`^{Y%?L()8{P(kRdMlJNTn7&buhziHo>ueq_b9!B;IEHBt~gaQitKu`~7^FDyR zx2uqVI(qT}v>>1IyeH8%brMxX@PQfm!SQ?c0ZChjB2~GHilSlGqQg*jA03VRNct1A z0s4@p-$+u@42op-kwd>N&GwR?{V^~fFlXA>lwDcokj?;3eYXs-H(r8rm5xhY9 z`q@Y5p(Psq{z#0(!nwj#B1a$=q96%0hRR^@(~;jNf_fB{0w2f}F5ZdqKM|v}$mz%A zVB87<^l7vHSEq|?F_fh$rj0gE;St!ya#MVl{s-By6yi;ALRHeoymAOWbTbS)1~>S` zjyONpl))$t{&#NEFcw38iDF9Vct1=rya1zSI8U+Q zse$LFoQGfwfnZY+7%VGN3^lG6Qx!-K^6NR|94taaiJ_bfF?o}r$pO@$j%@*7zX5#L;3qh@Em}_V zKK%kS5~)0x3UmLjLQ@VGKqE`~=rNzf{UjXu~(i6H-#% zH;^=KD-FYkeWb93|8BWRmJcM$*&Q?seCJ2X`=1#~-~|VCI^WaJjC9v9h zSX2d*A>#naPbI^WA0Qz2Fv|ErP!F&!k$`0pdiocT_z6HwF*5lHeUhIMnn41oC(x>& z(1Zj|kidd+bn7q24-yc)j}(6q!?BvtqC6Gh$z7=67a=DQcVzl~RQ>U3HcVSGuwV)< zmg{f}D!0cw&(dB5_Sytq5{xC=K2ok0G7=N#APtxhahGPlL5H6VWGM>wdhmrIJx%hq zA^htXwYQKkS+KGQM(|XaixfMnkCZjU!5$ zSGu{WD@f{rIYLm{dy^sjvA~bLkSPSB(kuo@ni##L0;r5LiK-$M2w0372?Od)qww7$ z6&%Zy7?Kp=PBo|z=4oN{Er~`?rqB@bl^+@WnB*q{BzEKgNdoN>;mPAgV&U+}h5I0o zx*(9OhGZXuF@Gb;uaDr9Nkj7JmXO+_|6sP?1PhUw0RI9+@>4gUIKmV5BTFVvPGD9b z)3%%p|Kk*q{In8vdkpW^RfInjkWG}3ix`hu)WS$K=kNf^-4O#}L+&mX=Y?0?g;gKZ!o4wB}S4k5wEmgKOgvT1D#Mu4dH|8Zm2$szpk`6VVQ6Q^x@ ziIlhe%mAH3euYUI%R6W(m*D{NS|BuZ1Z;G%f#kQuT+70zvB*2c*8k!1ZX~(X$qzSC zV;x#rpd}#iaWl!PhI*MiX}o%$@AR#xgaCg4k_A@?XD23-@?#n!9~KOObi@o6Peo*k z3x;LMiUjJFQaK5~aRoS%`M>j1VCw0N)gb&a7)vk!RK_4lHXQ)IY_QI!aU`IKT7sAg zs9Tyg+%X`D#CcNU5tJ|}ARZ59Y0|05zkZ}DgWz2-OIrvGw0i>56J}CDE%m3+?VuDw8TX9CLy8MBou^`&$soLtgqP05uo?#{2!b$`wbpfUs4Z_hR+!KRg4b-}x$@!lFIE*yQ zL}2ELV2$AdmN>HtYa@rC>_T=>Q&k?R#%h`dhw+}+Tu7`XToZ^3`ph?5v zB{dXeP`P#oBnW@nOrjcyJ&b37U1Hd_XF?1p5d%U-2`EyMO|p)~TrmeN!xF*XzF=>` zuuI)Rbpxdwa;R+>9R%c!iEz*^PZuB|NuCZ?Pwm$?hg?w45Y!tzL>`0j3UevoVh{wy zAkwHzfz~lY5<2KSL`uPQ0~~yBN%T@Ni7FxuDV`QKb6aLv*<(n%_uw)?GizTPU=<^) zLkKhtrV!j{M0{$dpG=TB3!A zIdo*2LoXO3L{O+SkJ=^WNW%!CMNpkA&jdxuv!n-e^9M;15~oPN6@irh6K<(Ur^Gsr z5?Te%4~FY97oLjRVgP@m|tlLgW#{Q;5|HaG6z@V?;+ zLNJ-jgV(_*L;e|>ko@l0>&kK6lV;tkKTCZCpIJf2Hbc5(Fb>d75R|)6T4HhO@*wWV6f8~&LD`GiV8Fa1Y0gtI zZPXw|JAng)KyE%)d^(*kKa4#l`JQX1>a+T*PBdC_aeTX8}R|NHf zirg`XghYV*b66_>Gp3DauN)&_Op77l1)mjcr<;&PHq-+n3nh^BeE}s2SJI$mO0ZiY zC$G&U?a88{G^nzH{g)Pf_jhNx?uI9jr`q7Lkpjm1xNNYM5?b(gdarK3(JKjBF~Hh_ ziER>(LX~+`V&^MEzbFw)Fhy^mY6sio4+&pdgJG*3@wC%JNmEFsVAKQ++Yb7bsn9fR zrq3BHRDO!3g1!QbZxtnS<)a@$uEJC7f95K)Oqv(UdZ+P3b&REm+BJEiC|Qk1xip<*c(EHZn4!mN^q_l4 z_+lOnLtzjTxv0~_^Hm30+kQ+Nh2p2va5)Kc3+X0MGDPhmK9?Hbs)DH40k#+1=p8SdnG(}Y!u+<=E1asXW{yLDR^*_&~=9Xh#_(-oN zk1iwA1f|CEF|2~1&`1^~YSId)leGMEG%fuO3%*SJmxk}rPgJsyRzFK#Akra1gU$u* zYnusUl7=7@oORpjCIcl(vUqpIEcrD%6WnzecD#B5!`oIx^?}Z7f$PceZ_)y_mffIX zC|sfkk=*Ji+1ONqJ@hfd$|W(8 zb7KS^HIT8+^A4SK4~A|Jk_Fv#ieRJl8f-mu+<?MuUlpAu0uV>xZ$?VJ(^$ ztFXWT%rrxajm&k2!skiYQ-+OH^x6984@kz`!{EiB$R0U1iW&~D?I#YWVe);U!W3mT zBYa5|)_mwA;4MJ3iKU6lRxJLPLEs6D;M2vu%IMi}o;nV@{I}t=4}+6>;3xP*^_DUl zNm+yTZie)vHQf-@ys3g=dvw~6zWcpR!mjEx43%gsWMV`Q!QKdH7c?==0qrp2$*@SX z%k-t~M=nONlsoHS+E_#w(@j*2p~+=E4BH|oSmU5Xps~qzXToFGI3g`$aP*wvGzZkM zaZvZ))<4MBQpPk53fed*#DquSUgg5Z+}>#do#vU+^vmQG2u95&(9F<+jqV4s?U9u! zJz_6YfVYjL;r-*;OmxhY*7Gb$6CX{}q|JD;SViNP;Zc(4k}0T|VM`O&{w11+wB}k; z`V$T`vF|T&mgkijrWEmn6HT0LPK&+ivSsZ!)N2l6y<9QT5!IX1YQ8lGRsM{{@HjNV zg4S@l1;7>KG3><;ZU0G zYPL4&wW5=H;bE?*2PE`dc%UvA|4Pw=t*FKB4+s-Jw;V-}g4qcQ_^77>`|`Ro9>Emy z2BrqVr8PB{WOc#Q-R|#NzJ|a--b@KTfvt!`em3y*E$al-ome=4ilL>W z=|tE}lExn%Lb^Pfr-XB)l_WhmN|Mx(k_}H05A2roy4V1?r?;K|@2i5s<0LEf26C?R z#l_n_8H~?`|K9d`wx9wVo;B{F$p(5DX@I`i@C-1ZWeY&zDCA_zqiQMQNkDEi2`Hgb zTl)S;e?y>DB{;DS?q%%-A}ien{%=~ICl=;l2W`t8Nk9v&vg1*oOwS_G>FyK?rG;$N zV8=7WLo0lB>tHJc;c1zFA2t|H9N<^MvS-?Zl<)vlXAgIe6XtWM)fG#5b;Oe^1IlSZ zgbCh4M+TDo)WEn75U34MW)ZfGqd*ob()&~r&I-k_(ctSATji-IcELa|z)weDz^lVB zuPW+wpwn(;?5m^aA?g}nB!UZP#B9tfkD%635_vn)kreC*eXf{C)1c;&Qso2*$3zao z9Mtuf#&H6g?qZq-HIUkP=+>8Y~z5h%5 zP14d<(=^Ro4hz}2(9d3Hx&X~){UA*N{cxdY4!d}JlnevQg`Y0`2LB!1L^ps6ObOfo z#|Xz2gss|4)1V%c3Y`%6Ls%yRrHp|T&2ok3JLF0iy!DlX8W^M)eu7WTax*E`r2QOK z>U}oJUu1as({6~cOo&y@K~>-{nJkL`djX6Zzey$e*_|iZwGb6MU@{iG$@#I1{b$}$Pq8nrB9BU!bmBl0~gLvb3 z!|@Q~l6fh`px_Jm2}VcxapXE4rbH+ar5<6Wj{^avCn!|X4Jv8(Re_)GjibA5CFv!l z19U24&D{V^yfc7u&>|=+MJ+I8Vg+1OS8gkYIk{Qv-x8?~_&;h%1*$rsF8S^=C?6g$ z+~(%k(*!uB4t|1eZ@NFwNNTW?%Liw?Qw2j$hxF4HaE#4ElAoF%_cmY45Q5o@oN5GL zV-+@_obf#BHCFX_7*Jm;)yIF zwW9}bS~E2~9L5j_1`y1;H%cVGEf!$v0Rj%GkbnZpG~-HQLts)eN%GgENOmK+GH7@= z{Y+_JzN5%27;`QdR?xG>S`gCQiSmt~?0 zaEpZ%xJ}ZXjfT+89D&aBqUow$@UZ0v>Lpdjl7qZx$x%QN&NLrrNg3-RiN3ZRKw0RU z7f%OwrQr>vi&g_9CYt6=$M#~9q&I&E>8LkP0ms)>v#i@>$&C->nBXQxA&TOMB3wDd znLsP7Gyz0)MGuges4*4HO46~snDkW_+aZh^c>m_O?23U#xTu$YU!gJM$vOzReelx~ z2)!|@DSpFjE)UJuq2*f-OT9Z6!eKAyJY0ZZZVkl`)xfey-Gk=O42-dFhG#^p;VqwF z2-PK1{7@-O8L)aH3{5nhLZMce*y%$LTEYh?7JDfQR18ZZm%m$@Fp_j>A4M{&=1L&X zv!HL85B-`hYTq$VHrS(=U@)MlVaUJ9hley``_eB!jD10#dkICF=}T`O^!&A-D8TxB z2)rb?K7T2tSfLhK9*-KwLK7)v-f4=&n?!Gp3?~6vbdExy3R!NjK{82VRt}IP5ELjg z(alM;8QW?PCCqQ5-y;o zf~kNcnfx3eu~Exp`YFoxeTOHLGxHWOl3)mPO#*6S1wBblK zx&hQ@Gm)YPt+_;3@RA$AtPa`;CX=N4U<2xva83Zs@0J=ERz*9lcKbUCK4U|VgIl6HmZD_kd5Z0!LX$C0iFT90>#|+1?3Np7R#L=Ch|6Gmw4FM=J^|Fyge)@uI5 z5}|v@m(kW>Ou=2!dEcQ8pgdgxzyHClPTP8}*aR*5U_U1KYVDo>KdmHC?_97fxhi92 zzE1;Xnx+nNagj|hz0yn!2HLbtnwA_)?}_)2u<;HWhU#|eZtX1zpF@MNIMRXA4BU(D zbf7)lJ(LE;?@Vl9Jc0|QYdbw)+^4{hf~g^zH?&nXNW=}ssD6rP>B6gaw}1C9d-l-{ mplqJH`-H-Gs1(0~TtjG8XM{jLD_upaLU`8VakpSLXZ#;}-FGbj diff --git a/src/org/midica/Midica.java b/src/org/midica/Midica.java index 9f48a3e..2ee4bea 100644 --- a/src/org/midica/Midica.java +++ b/src/org/midica/Midica.java @@ -36,7 +36,7 @@ public class Midica { private static final int VERSION_MINOR = 11; /** UNIX timestamp of the last commit */ - public static final int COMMIT_TIME = 1702142047; + public static final int COMMIT_TIME = 1702813163; /** Branch name. Automatically changed by precommit.pl */ public static final String BRANCH = "sound-effects"; diff --git a/src/org/midica/config/Dict.java b/src/org/midica/config/Dict.java index c106b06..31e7362 100644 --- a/src/org/midica/config/Dict.java +++ b/src/org/midica/config/Dict.java @@ -217,6 +217,7 @@ public class Dict { public static final String SYNTAX_FUNC_LENGTH = "FUNC_LENGTH"; public static final String SYNTAX_FUNC_WAIT = "FUNC_WAIT"; public static final String SYNTAX_FUNC_NOTE = "FUNC_NOTE"; + public static final String SYNTAX_EFF_PERCENT = "EFF_PERCENT"; public static final String SYNTAX_CH_A_POLY_AT = "CH_A_POLY_AT"; public static final String SYNTAX_CH_D_MONO_AT = "CH_D_MONO_AT"; public static final String SYNTAX_CH_E_PITCH_BEND = "CH_E_PITCH_BEND"; @@ -2954,6 +2955,7 @@ private static void initLanguageEnglish() { set( SYNTAX_FUNC_LENGTH, "set the length for the next function in the pipeline" ); set( SYNTAX_FUNC_WAIT, "wait for the current length" ); set( SYNTAX_FUNC_NOTE, "set note name (e.g. for portamento ctrl)" ); + set( SYNTAX_EFF_PERCENT, "percent symbol for parameters" ); set( SYNTAX_CH_A_POLY_AT, "Polyphonic Aftertouch (Poly Pressure)" ); set( SYNTAX_CH_D_MONO_AT, "Monophonic Aftertouch (Channel Pressure)" ); set( SYNTAX_CH_E_PITCH_BEND, "'off' value for binary set functions" ); @@ -4312,6 +4314,7 @@ public static void initSyntax() { setSyntax( SYNTAX_FUNC_LENGTH, "length" ); setSyntax( SYNTAX_FUNC_WAIT, "wait" ); setSyntax( SYNTAX_FUNC_NOTE, "note" ); + setSyntax( SYNTAX_EFF_PERCENT, "%" ); setSyntax( SYNTAX_CH_A_POLY_AT, "poly_at" ); setSyntax( SYNTAX_CH_D_MONO_AT, "mono_at" ); setSyntax( SYNTAX_CH_E_PITCH_BEND, "bend" ); @@ -4526,6 +4529,7 @@ else if (Config.CBX_SYNTAX_UPPER.equals(configuredSyntax)) { addSyntaxForInfoView( SYNTAX_FUNC_LENGTH ); addSyntaxForInfoView( SYNTAX_FUNC_WAIT ); addSyntaxForInfoView( SYNTAX_FUNC_NOTE ); + addSyntaxForInfoView( SYNTAX_EFF_PERCENT ); addSyntaxForInfoView( SYNTAX_CH_A_POLY_AT ); addSyntaxForInfoView( SYNTAX_CH_D_MONO_AT ); addSyntaxForInfoView( SYNTAX_CH_E_PITCH_BEND ); diff --git a/src/org/midica/file/read/Effect.java b/src/org/midica/file/read/Effect.java index 46a52f4..c69afdc 100644 --- a/src/org/midica/file/read/Effect.java +++ b/src/org/midica/file/read/Effect.java @@ -14,7 +14,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.sound.midi.InvalidMidiDataException; + import org.midica.config.Dict; +import org.midica.midi.SequenceCreator; /** * This class is used to parse/create sound effects. @@ -24,44 +27,33 @@ */ public class Effect { - private static final int TYPE_BOOLEAN = 1; // 0=off, 127=on - private static final int TYPE_MSB = 3; // default: 0 - 127, double: 0 - 16383 - private static final int TYPE_LSB = 5; // default: 0 - 127, double: 0 - 16383 - private static final int TYPE_BYTE = 7; // 0 - 127 - private static final int TYPE_DOUBLE = 9; // 0 - 16383 - private static final int TYPE_ANY = 11; // anything that fits in 7 bits - private static final int TYPE_NONE = 13; // no value allowed (using 0 internally) - private static final int TYPE_BYTE_SIGNED = 17; // -64 - 63 - private static final int TYPE_DOUBLE_SIGNED = 19; // -8192 - 8191 - - private static final Map channelMsgToType = new HashMap<>(); - private static final Map ctrlToType = new HashMap<>(); - private static final Map rpnToType = new HashMap<>(); - private static final Map rpnToDefault = new HashMap<>(); - private static final Map nrpnToType = new HashMap<>(); - private static final Map nrpnToDefault = new HashMap<>(); + private static MidicaPLParser parser = null; private static EffectPipeline currentPipeline = null; private static Set functionNames; private static Set effectNames; + private static Map functionToParamCount; private static Map channelMsgNameToNumber; private static Map ctrlNameToNumber; private static Map rpnNameToNumber; private static Set pipelineElementNames; private static Pattern pipelinePattern = null; - private static Pattern anyCallPattern = null; - private static Pattern assignCallPattern = null; private static Pattern noteOrRestPattern = null; - private static Pattern paramCallPattern = null; + private static Pattern intPattern = null; /** * Initializes data structures and regex patterns based on the current syntax. * Called by {@link MidicaPLParser} if the DEFINE parsing run is finished. + * + * @param rootParser the root parser */ - public static void init() { + public static void init(MidicaPLParser rootParser) { + parser = rootParser; + + functionToParamCount = new HashMap<>(); functionNames = new HashSet<>(); effectNames = new HashSet<>(); channelMsgNameToNumber = new HashMap<>(); @@ -69,17 +61,20 @@ public static void init() { rpnNameToNumber = new HashMap<>(); pipelineElementNames = new HashSet<>(); - functionNames.add( MidicaPLParser.FUNC_SET ); - functionNames.add( MidicaPLParser.FUNC_ON ); - functionNames.add( MidicaPLParser.FUNC_OFF ); - functionNames.add( MidicaPLParser.FUNC_LINE ); - functionNames.add( MidicaPLParser.FUNC_SIN ); - functionNames.add( MidicaPLParser.FUNC_COS ); - functionNames.add( MidicaPLParser.FUNC_NSIN ); - functionNames.add( MidicaPLParser.FUNC_NCOS ); - functionNames.add( MidicaPLParser.FUNC_LENGTH ); - functionNames.add( MidicaPLParser.FUNC_WAIT ); - functionNames.add( MidicaPLParser.FUNC_NOTE ); + functionToParamCount.put( MidicaPLParser.FUNC_SET, 1 ); + functionToParamCount.put( MidicaPLParser.FUNC_ON, 0 ); + functionToParamCount.put( MidicaPLParser.FUNC_OFF, 0 ); + functionToParamCount.put( MidicaPLParser.FUNC_LINE, 2 ); + functionToParamCount.put( MidicaPLParser.FUNC_SIN, 3 ); + functionToParamCount.put( MidicaPLParser.FUNC_COS, 3 ); + functionToParamCount.put( MidicaPLParser.FUNC_NSIN, 3 ); + functionToParamCount.put( MidicaPLParser.FUNC_NCOS, 3 ); + functionToParamCount.put( MidicaPLParser.FUNC_LENGTH, 1 ); + functionToParamCount.put( MidicaPLParser.FUNC_WAIT, 0 ); + functionToParamCount.put( MidicaPLParser.FUNC_NOTE, 1 ); + for (String key : functionToParamCount.keySet()) { + functionNames.add(key); + } effectNames.add( MidicaPLParser.CH_A_POLY_AT ); effectNames.add( MidicaPLParser.CH_D_MONO_AT ); @@ -121,6 +116,10 @@ public static void init() { effectNames.add( MidicaPLParser.RPN_4_TUNING_BANK ); effectNames.add( MidicaPLParser.RPN_5_MOD_DEPTH_R ); + effectNames.add( MidicaPLParser.PL_CTRL ); + effectNames.add( MidicaPLParser.PL_RPN ); + effectNames.add( MidicaPLParser.PL_NRPN ); + channelMsgNameToNumber.put( MidicaPLParser.CH_A_POLY_AT, 0xA0 ); channelMsgNameToNumber.put( MidicaPLParser.CH_D_MONO_AT, 0xD0 ); channelMsgNameToNumber.put( MidicaPLParser.CH_E_PITCH_BEND, 0xE0 ); @@ -170,11 +169,8 @@ public static void init() { for (String functionName : functionNames) { pipelineElementNames.add(functionName); } - pipelineElementNames.add( MidicaPLParser.PL_KEEP ); + pipelineElementNames.add( MidicaPLParser.PL_KEEP ); pipelineElementNames.add( MidicaPLParser.PL_DOUBLE ); - pipelineElementNames.add( MidicaPLParser.PL_CTRL ); - pipelineElementNames.add( MidicaPLParser.PL_RPN ); - pipelineElementNames.add( MidicaPLParser.PL_NRPN ); // compile regex patterns String pipelineRegex @@ -183,11 +179,47 @@ public static void init() { + "(\\w+)(?:" + Pattern.quote(MidicaPLParser.PL_ASSIGNER) + "(\\d+))?" // pipeline element without parameters + "(?:" + Pattern.quote(MidicaPLParser.PARAM_OPEN) // ( - + "(\\S+?)" // function parameters + + "(\\S*?)" // function parameters + Pattern.quote(MidicaPLParser.PARAM_CLOSE) // ) + ")?"; // optional pipelinePattern = Pattern.compile(pipelineRegex); - noteOrRestPattern = Pattern.compile("^[0-9]|" + Pattern.quote(MidicaPLParser.REST)); + noteOrRestPattern = Pattern.compile("^[0-9]|" + Pattern.quote(MidicaPLParser.REST) + "$"); + String intRegex = "^" + + "(\\-?\\d+)" // direct int value (group 1) + + "|" + + "(?:" + + "(\\-?\\d+(\\.\\d+)?)" // percentage value (group 2) + + Pattern.quote(MidicaPLParser.EFF_PERCENT) + + ")" + + "$"; + intPattern = Pattern.compile(intRegex); + } + + /** + * Determins if the given string looks like an effect pipeline or not. + * + * @param pipeline the string to check + * @return **true** if it looks like a pipeline, otherwise: **false** + */ + public static boolean isPipeline(String pipeline) { + + // note or rest? + if (noteOrRestPattern.matcher(pipeline).find()) { + return false; + } + + // try to match a pipeline + Matcher m = pipelinePattern.matcher(pipeline); + if (m.find()) { + String elemName = m.group(2); + + if (pipelineElementNames.contains(elemName)) + return true; + else + return false; + } + + return false; } /** @@ -231,7 +263,7 @@ public static boolean applyPipelineIfPossible(int channel, String pipeline, Stri if (pipelineElementNames.contains(elemName)) looksLikePipeline = true; else - throw new ParseException("Dict.get(Dict.ERROR_UNKNOWNN_PL_ELEMENT)" + elemName); // TODO: Dict + throw new ParseException("Dict.get(Dict.ERROR_PL_UNKNOWN_ELEMENT)" + elemName); // TODO: Dict // starts with dot? - pipeline must be open if (dot.length() > 0) { @@ -315,96 +347,374 @@ private static int parseGenericNumber(String numberStr, int maxNum) throws Parse } } - // TODO: document + /** + * Applies an element of an effect pipeline. + * + * @param elemName pipeline element name + * @param number controller/rpn/nrpn number or null + * @param paramStr parameters or null + * @throws ParseException + */ private static void applyPipelineElement(String elemName, int number, String paramStr) throws ParseException { - // TODO: implement + + // check number + if (MidicaPLParser.PL_CTRL.equals(elemName)) { + if (number < 0) { + throw new ParseException("Dict.get(Dict.ERROR_PL_NUMBER_REQUIRED)" + elemName); // TODO: Dict + } + else if (number > 127) { + throw new ParseException("Dict.get(Dict.ERROR_PL_NUMBER_GT_127)"); // TODO: Dict + } + } + else if (MidicaPLParser.PL_RPN.equals(elemName) || MidicaPLParser.PL_RPN.equals(elemName)) { + if (number < 0) { + throw new ParseException("Dict.get(Dict.ERROR_PL_NUMBER_REQUIRED)" + elemName); // TODO: Dict + } + else if (number > 16383) { + throw new ParseException("Dict.get(Dict.ERROR_PL_NUMBER_GT_16383)"); // TODO: Dict + } + } + else if (number > -1) { + throw new ParseException("Dict.get(Dict.ERROR_PL_NUMBER_NOT_ALLOWED)" + elemName); // TODO: Dict + } + + // check presence of params + if (functionNames.contains(elemName)) { + if (paramStr == null) { + throw new ParseException("Dict.get(Dict.ERROR_PL_PARAMS_REQUIRED)" + elemName); // TODO: Dict + } + } + else { + if (null != paramStr) { + throw new ParseException("Dict.get(Dict.ERROR_PL_PARAMS_NOT_ALLOWED)" + elemName); // TODO: Dict + } + } + + // effect type? + if (effectNames.contains(elemName)) { + + int effectType; + int effectNumber; + + // generic controller/rpn/nrpn? + if (MidicaPLParser.PL_CTRL.equals(elemName)) { + effectType = EffectPipeline.EFF_TYPE_CTRL; + effectNumber = number; + } + else if (MidicaPLParser.PL_RPN.equals(elemName)) { + effectType = EffectPipeline.EFF_TYPE_RPN; + effectNumber = number; + } + else if (MidicaPLParser.PL_NRPN.equals(elemName)) { + effectType = EffectPipeline.EFF_TYPE_NRPN; + effectNumber = number; + } + else { + + // named channel-msg/controller/rpn? + if (channelMsgNameToNumber.containsKey(elemName)) { + effectType = EffectPipeline.EFF_TYPE_CHANNEL; + effectNumber = channelMsgNameToNumber.get(elemName); + } + else if (ctrlNameToNumber.containsKey(elemName)) { + effectType = EffectPipeline.EFF_TYPE_CTRL; + effectNumber = ctrlNameToNumber.get(elemName); + } + else if (rpnNameToNumber.containsKey(elemName)) { + effectType = EffectPipeline.EFF_TYPE_RPN; + effectNumber = rpnNameToNumber.get(elemName); + } + else { + throw new ParseException("Don't know what to do with effect '" + elemName + "'. This should not happen. Please report."); + } + } + + // apply effect + currentPipeline.setEffect(effectType, effectNumber); + + return; + } + + // function? + if (functionNames.contains(elemName)) { + String[] params = paramStr.split(Pattern.quote(MidicaPLParser.PARAM_SEPARATOR), -1); + + // check number of parameters + Integer expectedCount = functionToParamCount.get(elemName); + if (null == expectedCount) { + throw new ParseException("Expected parameter count unknown for function '" + elemName + "'. This should not happen. Please report."); + } + if (0 == expectedCount && 1 == params.length && paramStr.isEmpty()) { + // OK. Special case for functions without any parameter. + } + else { + if (params.length != expectedCount) { + throw new ParseException( + String.format("Dict.get(Dict.ERROR_PL_WRONG_PARAM_NUM)", elemName, expectedCount, params.length) + ); // TODO: Dict + } + + // don't allow empty parameters + for (String param : params) { + if (param.isEmpty()) + throw new ParseException("Dict.get(Dict.ERROR_PL_EMPTY_PARAM)" + paramStr); // TODO: Dict + } + } + + // call function + applyFunction(elemName, params); + + return; + } + + // other pipeline elements + if (MidicaPLParser.PL_KEEP.equals(elemName)) { + currentPipeline.setKeep(); + return; + } + if (MidicaPLParser.PL_DOUBLE.equals(elemName)) { + currentPipeline.setDouble(); + return; + } + + throw new ParseException("Don't know what to do with pipeline element '" + elemName + "'. This should not happen. Please report."); } - ///////////////////////////////////////////////////// - // Define which effect can have which value(s). - // This is independent from the configured syntax. - ///////////////////////////////////////////////////// - static { - - ///////////////////////////// - // channel message-based effects - ///////////////////////////// - channelMsgToType.put(0xA0, TYPE_BYTE); - channelMsgToType.put(0xD0, TYPE_BYTE); - channelMsgToType.put(0xE0, TYPE_DOUBLE); + /** + * Applies a function call inside an effect pipeline. + * + * @param funcName function name + * @param params parameters + * @throws ParseException + */ + private static void applyFunction(String funcName, String[] params) throws ParseException { - ///////////////////////////// - // continuous controllers - ///////////////////////////// + // wait() + if (MidicaPLParser.FUNC_WAIT.equals(funcName)) { + currentPipeline.applyWait(); + return; + } - // coarse controllers (MSB) - for (int i = 0x00; i < 0x20; i++) { - ctrlToType.put(i, TYPE_MSB); + // length() + if (MidicaPLParser.FUNC_LENGTH.equals(funcName)) { + currentPipeline.setLength(params[0]); + return; } - // fine controllers (LSB) - for (int i = 0x20; i < 0x40; i++) { - ctrlToType.put(i, TYPE_LSB); + // note() + if (MidicaPLParser.FUNC_NOTE.equals(funcName)) { + int note = parser.parseNote(params[0]); + currentPipeline.setNote(note); + return; } - // boolean (switch) controllers - for (int i = 0x40; i < 0x46; i++) { - ctrlToType.put(i, TYPE_BOOLEAN); + // for all other functions we need the effect type + int valueType = currentPipeline.getValueType(funcName); + + // on()/off() - boolean functions + if (MidicaPLParser.FUNC_ON.equals(funcName) || MidicaPLParser.FUNC_OFF.equals(funcName)) { + if (valueType != EffectPipeline.TYPE_BOOLEAN && valueType != EffectPipeline.TYPE_ANY) { + throw new ParseException("Dict.get(Dict.ERROR_FUNC_TYPE_NOT_BOOL)" + funcName); // TODO: Dict + } + + int value = MidicaPLParser.FUNC_ON.equals(funcName) ? 127 : 0; + setValue(new int[] {value, value}); + + return; } - // simple controllers (values from 0 to 127) - for (int i = 0x46; i < 0x50; i++) { - ctrlToType.put(i, TYPE_BYTE); + // non-boolean function for a boolean effect? + if (EffectPipeline.TYPE_BOOLEAN == valueType) { + throw new ParseException("Dict.get(Dict.ERROR_FUNC_TYPE_BOOL)" + funcName); // TODO: Dict } - // general purpose or undefined (1 byte) - for (int i = 0x50; i < 0x5B; i++) { - ctrlToType.put(i, TYPE_ANY); + // set() + if (MidicaPLParser.FUNC_SET.equals(funcName)) { + int[] values = parseIntParam(params[0]); + setValue(values); + return; } - // level controllers (1 byte) - for (int i = 0x5B; i < 0x66; i++) { - ctrlToType.put(i, TYPE_BYTE); + // continuous functions + if (MidicaPLParser.FUNC_LINE.equals(funcName) + || MidicaPLParser.FUNC_SIN.equals(funcName) || MidicaPLParser.FUNC_COS.equals(funcName) + || MidicaPLParser.FUNC_NSIN.equals(funcName) || MidicaPLParser.FUNC_NCOS.equals(funcName)) { + + // TODO: implement + + return; } - // undefined - for (int i = 0x66; i < 0x78; i++) { - ctrlToType.put(i, TYPE_ANY); + throw new ParseException("Don't know what to do with function '" + funcName + "'. This should not happen. Please report."); + } + + /** + * + * + * @param values + * @throws ParseException + */ + private static void setValue(int[] values) throws ParseException { + + long tick = currentPipeline.getCurrentTick(); + int effectType = currentPipeline.getEffectType(); + int effectNum = currentPipeline.getEffectNumber(); + int channel = currentPipeline.getChannel(); + + try { + if (EffectPipeline.EFF_TYPE_CHANNEL == effectType) { + if (0 == values.length) { + SequenceCreator.addMessageChannelEffect(effectNum, channel, 0, 0, tick); + return; + } + else if (2 == values.length) { + SequenceCreator.addMessageChannelEffect(effectNum, channel, values[1], 0, tick); + return; + } + else if (3 == values.length) { + SequenceCreator.addMessageChannelEffect(effectNum, channel, values[1], values[2], tick); + return; + } + } + else if (EffectPipeline.EFF_TYPE_CTRL == effectType) { + if (0 == values.length) { + SequenceCreator.addMessageCtrl(effectNum, channel, 0, tick); + return; + } + else if (2 == values.length) { + SequenceCreator.addMessageCtrl(effectNum, channel, values[1], tick); + return; + } + else if (3 == values.length) { + SequenceCreator.addMessageCtrl(effectNum, channel, values[1], tick); // MSB + SequenceCreator.addMessageCtrl(effectNum + 0x20, channel, values[2], tick); // LSB + return; + } + } + else if (EffectPipeline.EFF_TYPE_RPN == effectType) { + // TODO: implement + } + else if (EffectPipeline.EFF_TYPE_NRPN == effectType) { + // TODO: implement + } + else { + throw new ParseException("Unknown effect type: " + effectType + ". This should not happen. Please report."); + } + throw new ParseException("Unknown effect type/number/byte-count combination: " + effectType + "/" + effectNum + "/" + values.length + ". This should not happen. Please report."); + } + catch (InvalidMidiDataException e) { + throw new ParseException("Invalid MIDI data when trying to apply effect " + effectType + "/" + effectNum + ". This should not happen. Please report."); } + } + + private static void setByte() { + + } + + /** + * Parses a numeric or percentage function parameter, checks it against the + * sound effect's min/max and returns the resulting value byte(s). + * + * The returned array consists of the following bytes: + * + * - first byte: the complete value + * - second byte: first data byte (or MSB) + * - third byte: second data byte (or LSB) + * + * Single-byte values only return 2 bytes. + * + * @param valueStr numeric or percentage parameter string + * @return resulting value and byte(s), as described above + * @throws ParseException if the parameter cannot be parsed or is out of range + */ + private static int[] parseIntParam(String valueStr) throws ParseException { + + // TODO: handle TYPE_NONE - // channel mode messages - for (int i = 0x78; i < 0x80; i++) { - ctrlToType.put(i, TYPE_NONE); + // get range of the sound effect + int min = currentPipeline.getMin(); + int max = currentPipeline.getMax(); + + // parse the parameter + Integer value = null; + try { + Matcher m = intPattern.matcher(valueStr); + if (m.matches()) { + String intStr = m.group(1); + String percentStr = m.group(2); + //String floatStr = m.group(3); // TODO: something to make pitch bend easier to use + if (intStr != null) { + value = Integer.parseInt(intStr); + } + else if (percentStr != null) { + float percent = Float.parseFloat(percentStr); + + // A negative percentage with a minimum of 0 should NOT evaluate to 0 + // but throw an exception instead. + if (percent < 0 && 0 == min) + throw new ParseException("Dict.get(Dict.ERROR_FUNC_VAL_LOWER_MIN)" + min); // TODO: Dict + + // TODO: check + if (percent < 0) + // theoretically: value = percent * min / 100 + value = (int) ((percent * -min * 10 + 100 * 5) / (100 * 10)); + else + // theoretically: value = percent * max / 100 + value = (int) ((percent * max * 10 + 100 * 5) / (100 * 10)); + } + else { + throw new ParseException("Dict.get(Dict.ERROR_FUNC_NO_INT)" + valueStr); // TODO: Dict + } + } } + catch (NumberFormatException e) { + throw new ParseException("Dict.get(Dict.ERROR_FUNC_NO_NUMBER)" + valueStr); // TODO: Dict + } + if (null == value) + throw new ParseException("Dict.get(Dict.ERROR_FUNC_NO_NUMBER)" + valueStr); // TODO: Dict - // exceptions for the above ranges - ctrlToType.put(0x54, TYPE_ANY); // portamento ctrl - ctrlToType.put(0x58, TYPE_ANY); // high resolution velocity prefix - ctrlToType.put(0x60, TYPE_NONE); // data increment - ctrlToType.put(0x61, TYPE_NONE); // data decrement - ctrlToType.put(0x7A, TYPE_BOOLEAN); // local control on/off - ctrlToType.put(0x7E, TYPE_BYTE); // mono mode on + // check value against min / max + if (value < min) + throw new ParseException("Dict.get(Dict.ERROR_FUNC_VAL_LOWER_MIN)" + min); // TODO: Dict + if (value > max) + throw new ParseException("Dict.get(Dict.ERROR_FUNC_VAL_GREATER_MAX)" + max); // TODO: Dict - ///////////////////////////// - // (N)RPNs - ///////////////////////////// + // adjust the actual MIDI value for signed types + int valueType = currentPipeline.getValueType(valueStr); + if (EffectPipeline.TYPE_BYTE_SIGNED == valueType) { + value += 64; + } + if (EffectPipeline.TYPE_DOUBLE_SIGNED == valueType) { + value += 8192; + } + if (EffectPipeline.TYPE_MSB_SIGNED == valueType) { + if (currentPipeline.isDouble()) + value += 8192; + else + value += 64; + } - for (int i = 0x0000; i < 0x4000; i++) { - rpnToType.put(i, TYPE_DOUBLE); - rpnToDefault.put(i, 0); - nrpnToType.put(i, TYPE_DOUBLE); - nrpnToDefault.put(i, 0); + // find out how many bytes are needed + int byteCount = 1; + if (EffectPipeline.TYPE_DOUBLE == valueType || EffectPipeline.TYPE_DOUBLE_SIGNED == valueType) { + byteCount = 2; + } + else if (EffectPipeline.TYPE_MSB == valueType || EffectPipeline.TYPE_MSB_SIGNED == valueType) { + if (currentPipeline.isDouble()) + byteCount = 2; } - // exceptions (default) - rpnToDefault.put(0x0000, 0x0200); // pitch bend sensitivity - rpnToDefault.put(0x0001, 0x4000); // channel fine tuning - rpnToDefault.put(0x0002, 0x4000); // channel coarse tuning - rpnToDefault.put(0x0005, 0x0040); // modulation depth range + // handle 0 and 1 byte + if (0 == byteCount) { + return new int[] {}; + } + else if (1 == byteCount) { + return new int[] {value, value}; + } - // exceptions (type) - rpnToType.put(0x0001, TYPE_DOUBLE_SIGNED); // channel fine tuning - rpnToType.put(0x0002, TYPE_DOUBLE_SIGNED); // channel coarse tuning - rpnToType.put(0x7F7F, TYPE_NONE); // reset RPN + // handle 2 bytes + int msb = value >> 7; + int lsb = value & 0x7F; + return new int[] {value, msb, lsb}; } } diff --git a/src/org/midica/file/read/EffectPipeline.java b/src/org/midica/file/read/EffectPipeline.java index 3b986b5..add9b99 100644 --- a/src/org/midica/file/read/EffectPipeline.java +++ b/src/org/midica/file/read/EffectPipeline.java @@ -7,6 +7,9 @@ package org.midica.file.read; +import java.util.HashMap; +import java.util.Map; + /** * This class represents a sound effect pipeline. * It is mainly responsible to track the state of the pipeline. @@ -15,10 +18,55 @@ */ public class EffectPipeline { - public final int channel; + ////////////////////////////// + // static fields + ////////////////////////////// + + // value types + public static final int TYPE_BOOLEAN = 1; // 0=off, 127=on + public static final int TYPE_MSB = 3; // default: 0 - 127, double: 0 - 16383 + public static final int TYPE_MSB_SIGNED = 5; // default: -64 - 63, double: -8192 - 8191 + public static final int TYPE_BYTE = 11; // 0 - 127 + public static final int TYPE_DOUBLE = 13; // 0 - 16383 + public static final int TYPE_ANY = 15; // anything that fits in 7 bits + public static final int TYPE_NONE = 17; // no value allowed (using 0 internally) + public static final int TYPE_BYTE_SIGNED = 19; // -64 - 63 + public static final int TYPE_DOUBLE_SIGNED = 21; // -8192 - 8191 + + // effect types + public static final int EFF_TYPE_CHANNEL = 1; + public static final int EFF_TYPE_CTRL = 2; + public static final int EFF_TYPE_RPN = 3; + public static final int EFF_TYPE_NRPN = 4; - private long tick; - private long ticksPerAction; + // data structures + private static final Map channelMsgToType = new HashMap<>(); + private static final Map channelMsgToMin = new HashMap<>(); + private static final Map channelMsgToMax = new HashMap<>(); + private static final Map ctrlToType = new HashMap<>(); + private static final Map ctrlToMin = new HashMap<>(); + private static final Map ctrlToMax = new HashMap<>(); + private static final Map rpnToType = new HashMap<>(); + private static final Map rpnToMin = new HashMap<>(); + private static final Map rpnToMax = new HashMap<>(); + private static final Map rpnToDefault = new HashMap<>(); + private static final Map nrpnToType = new HashMap<>(); + private static final Map nrpnToMin = new HashMap<>(); + private static final Map nrpnToMax = new HashMap<>(); + private static final Map nrpnToDefault = new HashMap<>(); + + ////////////////////////////// + // pipeline fields + ////////////////////////////// + + private final int channel; + private long tick; + private long ticksPerAction; + private int effectType = 0; + private int effectNumber = -1; + private boolean mustKeep = false; + private boolean isDouble = false; + private int note = -1; /** * Creates a new sound effect pipeline. @@ -33,20 +81,382 @@ public EffectPipeline(int channel, String lengthStr) throws ParseException { this.ticksPerAction = MidicaPLParser.parseDuration(lengthStr); } + /** + * Returns the MIDI channel of the pipeline. + * + * @return MIDI channel (0-15) + */ + public int getChannel() { + return channel; + } + + /** + * Sets the effect type and number. + * + * @param type {@link #EFF_TYPE_CHANNEL}, {@link #EFF_TYPE_CTRL}, {@link #EFF_TYPE_RPN} or {@link #EFF_TYPE_NRPN} + * @param effectNum effect number (e.g. controller number, RPN number etc.) + * @throws ParseException if an effect has already been set. + */ + public void setEffect(int type, int effectNum) throws ParseException { + if (effectType > 0) { + throw new ParseException("Dict.get(Dict.ERROR_PL_EFF_ALREADY_SET)"); // TODO: Dict + } + effectType = type; + effectNumber = effectNum; + } + + /** + * Determins the effect type of the current sound effect. + * + * Returns one of the following values: + * + * - {@link #EFF_TYPE_CHANNEL} + * - {@link #EFF_TYPE_CTRL} + * - {@link #EFF_TYPE_RPN} + * - {@link #EFF_TYPE_NRPN} + * + * @return see above + */ + public int getEffectType() { + return effectType; + } + + /** + * Returns the effect number. + * + * @return effect number, e.g. controller number, RPN number etc. + */ + public int getEffectNumber() { + return effectNumber; + } + /** * Applies a **length(...)** function call in the pipeline. * * @param lengthStr The (note length) parameter of the length() call. * @throws ParseException if the length string is an invalid note lengh. */ - public void applyLength(String lengthStr) throws ParseException { + public void setLength(String lengthStr) throws ParseException { ticksPerAction = MidicaPLParser.parseDuration(lengthStr); } + /** + * Sets the note in the pipeline. + * + * @param note note number (0 - 127) + */ + public void setNote(int note) throws ParseException { + this.note = note; + } + + /** + * Applies a **keep** pipeline element. + * + * Causes the parser to keep the changed value after the end of the pipeline. + */ + public void setKeep() { + mustKeep = true; + } + + /** + * Returns the keep value. + * + * Determins if the changed value is kept after the end of the pipeline. + * + * @return the keep value + */ + public boolean mustKeep() { + return mustKeep; + } + + /** + * Apppies a **double** pipeline element. + * + * (Causes MSB/LSB effects to use both bytes.) + * @throws ParseException if no effect has been set yet or the effect doesn't support double. + */ + public void setDouble() throws ParseException { + + int valueType = getValueType(MidicaPLParser.PL_DOUBLE); + if (TYPE_MSB == valueType || TYPE_MSB_SIGNED == valueType) { + isDouble = true; + return; + } + + throw new ParseException("Dict.get(Dict.ERROR_PL_DOUBLE_NOT_SUPPORTED)"); // TODO: Dict + } + + /** + * Determins if double precision must be used. + * + * @return **false** to use only MSB, **false** to use MSB/LSB. + */ + public boolean isDouble() { + return isDouble; + } + /** * Applies a **wait()** function call in the pipeline. */ public void applyWait() { tick += ticksPerAction; } + + /** + * Returns the current pipeline tick. + * + * @return current tick + */ + public long getCurrentTick() { + return tick; + } + + /** + * Returns the tick that the pipeline will have after the next wait(). + * + * @return future pipeline tick + */ + public long getFutureTick() { + return tick + ticksPerAction; + } + + /** + * Determins the value type of the current sound effect. + * + * Returns one of the following values: + * + * - {@link #TYPE_BOOLEAN} + * - {@link #TYPE_MSB} + * - {@link #TYPE_MSB_SIGNED} + * - {@link #TYPE_BYTE} + * - {@link #TYPE_DOUBLE} + * - {@link #TYPE_ANY} + * - {@link #TYPE_NONE} + * - {@link #TYPE_BYTE_SIGNED} + * - {@link #TYPE_DOUBLE_SIGNED} + * + * @param elemName element name that caused the call (only used for error messages) + * @return see above + * @throws ParseException if no effect has been set yet. + */ + public int getValueType(String elemName) throws ParseException { + + if (effectNumber < 0) { + throw new ParseException("Dict.get(Dict.ERROR_PL_EFF_NOT_SET)" + elemName); // TODO: Dict + } + + Integer valueType = 0; + String typeStr = "none"; + if (EFF_TYPE_CHANNEL == effectType) { + valueType = channelMsgToType.get(effectNumber); + typeStr = "channel"; + } + else if (EFF_TYPE_CTRL == effectType) { + valueType = ctrlToType.get(effectNumber); + typeStr = "ctrl"; + } + else if (EFF_TYPE_RPN == effectType) { + valueType = rpnToType.get(effectNumber); + typeStr = "rpn"; + } + else if (EFF_TYPE_NRPN == effectType) { + valueType = nrpnToType.get(effectNumber); + typeStr = "nrpn"; + } + + // not found? + if (null == valueType) { + throw new ParseException("Unknown effect number '" + effectNumber + "' for effect type '" + typeStr + "'. This should not happen. Please report."); + } + + return valueType; + } + + /** + * Calculates and returns the minimum value for the current effect. + * + * @return minimum value + * @throws ParseException if the minimum value can not be found + */ + public int getMin() throws ParseException { + + Integer min = null; + if (EFF_TYPE_CHANNEL == effectType) { + min = channelMsgToMin.get(effectNumber); + } + else if (EFF_TYPE_CTRL == effectType) { + min = ctrlToMin.get(effectNumber); + } + else if (EFF_TYPE_RPN == effectType) { + min = rpnToMin.get(effectNumber); + } + else if (EFF_TYPE_NRPN == effectType) { + min = nrpnToMin.get(effectNumber); + } + + if (null == min) { + throw new ParseException("Unknown min value for '" + effectType + "/" + effectNumber + ". This should not happen. Please report."); + } + + return min; + } + + /** + * Calculates and returns the maximum value for the current effect. + * + * @return maximum value + * @throws ParseException if the maximum value can not be found + */ + public int getMax() throws ParseException { + + Integer max = null; + if (EFF_TYPE_CHANNEL == effectType) { + max = channelMsgToMax.get(effectNumber); + } + else if (EFF_TYPE_CTRL == effectType) { + max = ctrlToMax.get(effectNumber); + } + else if (EFF_TYPE_RPN == effectType) { + max = rpnToMax.get(effectNumber); + } + else if (EFF_TYPE_NRPN == effectType) { + max = nrpnToMax.get(effectNumber); + } + + if (null == max) { + throw new ParseException("Unknown max value for '" + effectType + "/" + effectNumber + ". This should not happen. Please report."); + } + + return max; + } + + ///////////////////////////////////////////////////// + // Define which effect can have which value(s). + // This is independent from the configured syntax. + ///////////////////////////////////////////////////// + static { + + ///////////////////////////// + // channel message-based effects + ///////////////////////////// + channelMsgToType.put(0xA0, TYPE_BYTE); // polyphonic after touch + channelMsgToType.put(0xD0, TYPE_BYTE); // monophonic after touch + channelMsgToType.put(0xE0, TYPE_DOUBLE_SIGNED); // pitch bend + + // min / max + applyDefaultMinAndMax(channelMsgToType, channelMsgToMin, channelMsgToMax); + + ///////////////////////////// + // continuous controllers + ///////////////////////////// + + // coarse controllers (MSB) + for (int i = 0x00; i < 0x20; i++) { + ctrlToType.put(i, TYPE_MSB); + } + + // fine controllers (LSB) + for (int i = 0x20; i < 0x40; i++) { + ctrlToType.put(i, TYPE_BYTE); + } + + // boolean (switch) controllers + for (int i = 0x40; i < 0x46; i++) { + ctrlToType.put(i, TYPE_BOOLEAN); + } + + // simple controllers (values from 0 to 127) + for (int i = 0x46; i < 0x50; i++) { + ctrlToType.put(i, TYPE_BYTE); + } + + // general purpose or undefined (1 byte) + for (int i = 0x50; i < 0x5B; i++) { + ctrlToType.put(i, TYPE_ANY); + } + + // level controllers (1 byte) + for (int i = 0x5B; i < 0x66; i++) { + ctrlToType.put(i, TYPE_BYTE); + } + + // undefined + for (int i = 0x66; i < 0x78; i++) { + ctrlToType.put(i, TYPE_ANY); + } + + // channel mode messages + for (int i = 0x78; i < 0x80; i++) { + ctrlToType.put(i, TYPE_NONE); + } + + // exceptions for the above ranges + ctrlToType.put(0x08, TYPE_MSB_SIGNED); // portamento ctrl + ctrlToType.put(0x0A, TYPE_MSB_SIGNED); // portamento ctrl + ctrlToType.put(0x54, TYPE_ANY); // portamento ctrl + ctrlToType.put(0x58, TYPE_ANY); // high resolution velocity prefix + ctrlToType.put(0x60, TYPE_NONE); // data increment + ctrlToType.put(0x61, TYPE_NONE); // data decrement + ctrlToType.put(0x7A, TYPE_BOOLEAN); // local control on/off + ctrlToType.put(0x7E, TYPE_BYTE); // mono mode on + + // min / max + applyDefaultMinAndMax(ctrlToType, ctrlToMin, ctrlToMax); + + ///////////////////////////// + // (N)RPNs + ///////////////////////////// + + for (int i = 0x0000; i < 0x4000; i++) { + rpnToType.put(i, TYPE_DOUBLE); + rpnToDefault.put(i, 0); + nrpnToType.put(i, TYPE_DOUBLE); + nrpnToDefault.put(i, 0); + } + + // min / max + applyDefaultMinAndMax(rpnToType, rpnToMin, rpnToMax); + applyDefaultMinAndMax(nrpnToType, nrpnToMin, nrpnToMax); + + // exceptions (default) + rpnToDefault.put(0x0000, 0x0200); // pitch bend sensitivity + rpnToDefault.put(0x0001, 0x4000); // channel fine tuning + rpnToDefault.put(0x0002, 0x4000); // channel coarse tuning + rpnToDefault.put(0x0005, 0x0040); // modulation depth range + + // exceptions (type) + rpnToType.put(0x0001, TYPE_DOUBLE_SIGNED); // channel fine tuning + rpnToType.put(0x0002, TYPE_DOUBLE_SIGNED); // channel coarse tuning + rpnToType.put(0x7F7F, TYPE_NONE); // reset RPN + } + + /** + * Applies default min and max values according to the effect type. + * + * @param typeStructure map containing the effect type + * @param minStructure map to be filled with the default minimum + * @param maxStructure map to be filled with the default maximum + */ + private static void applyDefaultMinAndMax(Map typeStructure, Map minStructure, Map maxStructure) { + + for (int number : typeStructure.keySet()) { + int type = typeStructure.get(number); + if (TYPE_BYTE == type || TYPE_MSB == type || TYPE_ANY == type) { + minStructure.put(number, 0); + maxStructure.put(number, 127); + } + else if (TYPE_BYTE_SIGNED == type || TYPE_MSB_SIGNED == type) { + minStructure.put(number, -64); + maxStructure.put(number, 63); + } + else if (TYPE_DOUBLE == type) { + minStructure.put(number, 0); + maxStructure.put(number, 16383); + } + else if (TYPE_DOUBLE_SIGNED == type) { + minStructure.put(number, -8192); + maxStructure.put(number, 8191); + } + } + } } diff --git a/src/org/midica/file/read/MidicaPLParser.java b/src/org/midica/file/read/MidicaPLParser.java index 8edd9b3..fd84c02 100644 --- a/src/org/midica/file/read/MidicaPLParser.java +++ b/src/org/midica/file/read/MidicaPLParser.java @@ -244,6 +244,7 @@ public class MidicaPLParser extends SequenceParser { public static String FUNC_LENGTH = null; public static String FUNC_WAIT = null; public static String FUNC_NOTE = null; + public static String EFF_PERCENT = null; public static String CH_A_POLY_AT = null; public static String CH_D_MONO_AT = null; public static String CH_E_PITCH_BEND = null; @@ -527,6 +528,7 @@ public static void refreshSyntax() { FUNC_LENGTH = Dict.getSyntax( Dict.SYNTAX_FUNC_LENGTH ); FUNC_WAIT = Dict.getSyntax( Dict.SYNTAX_FUNC_WAIT ); FUNC_NOTE = Dict.getSyntax( Dict.SYNTAX_FUNC_NOTE ); + EFF_PERCENT = Dict.getSyntax( Dict.SYNTAX_EFF_PERCENT ); CH_A_POLY_AT = Dict.getSyntax( Dict.SYNTAX_CH_A_POLY_AT ); CH_D_MONO_AT = Dict.getSyntax( Dict.SYNTAX_CH_D_MONO_AT ); CH_E_PITCH_BEND = Dict.getSyntax( Dict.SYNTAX_CH_E_PITCH_BEND ); @@ -634,7 +636,7 @@ public void parse(Object fileAsObj) throws ParseException { compilePatterns(); // organize syntax symbols for sound effects - Effect.init(); + Effect.init(this); // look for constant definitions isConstParsRun = true; @@ -3765,6 +3767,7 @@ else if (3 == tokens.length) { else if ( Dict.SYNTAX_FUNC_LENGTH.equals(cmdId) ) FUNC_LENGTH = cmdName; else if ( Dict.SYNTAX_FUNC_WAIT.equals(cmdId) ) FUNC_WAIT = cmdName; else if ( Dict.SYNTAX_FUNC_NOTE.equals(cmdId) ) FUNC_NOTE = cmdName; + else if ( Dict.SYNTAX_EFF_PERCENT.equals(cmdId) ) EFF_PERCENT = cmdName; else if ( Dict.SYNTAX_CH_A_POLY_AT.equals(cmdId) ) CH_A_POLY_AT = cmdName; else if ( Dict.SYNTAX_CH_D_MONO_AT.equals(cmdId) ) CH_D_MONO_AT = cmdName; else if ( Dict.SYNTAX_CH_E_PITCH_BEND.equals(cmdId) ) CH_E_PITCH_BEND = cmdName; @@ -5277,7 +5280,7 @@ else if (note.matches("^\\d+$")) * @return MIDI note value of the given note * @throws ParseException if the note name is unknown or the note value is out of the legal range for MIDI notes */ - private int parseNote(String noteName) throws ParseException { + public int parseNote(String noteName) throws ParseException { int noteVal; if (noteName.matches("^\\d+$")) { noteVal = toInt(noteName); @@ -5354,6 +5357,11 @@ private boolean parseChordNotes(String[] tokens) throws ParseException { throw new ParseException(Dict.get(Dict.ERROR_CH_CMD_NUM_OF_ARGS)); } + // effect pipeline? + if (Effect.isPipeline(tokens[1])) { + return false; + } + // chord or not? ArrayList chordElements = parseChord(tokens[1]); if (null == chordElements) {