From 037a47ca2ae7f2a3d9b49f764caea6ecc2caaada Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Sun, 2 Mar 2014 22:08:26 +0100 Subject: [PATCH] TMI-38: Fixed a bug in the getSourceCS method, that incorrectly identified non-subsampled JFIF files, as RGB instead of YCbCr. --- .../imageio/plugins/jpeg/JPEGImageReader.java | 14 +++++----- .../plugins/jpeg/JPEGImageReaderTest.java | 26 ++++++++++++++++++ .../jpeg/jfif-ycbcr-no-subsampling-intel.jpg | Bin 0 -> 41453 bytes 3 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 imageio/imageio-jpeg/src/test/resources/jpeg/jfif-ycbcr-no-subsampling-intel.jpg diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java index e8be131d..98f26b66 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java @@ -212,7 +212,7 @@ public class JPEGImageReader extends ImageReaderBase { @Override public Iterator getImageTypes(int imageIndex) throws IOException { Iterator types = delegate.getImageTypes(imageIndex); - JPEGColorSpace csType = getSourceCSType(getAdobeDCT(), getSOF()); + JPEGColorSpace csType = getSourceCSType(getJFIF(), getAdobeDCT(), getSOF()); if (types == null || !types.hasNext() || csType == JPEGColorSpace.CMYK || csType == JPEGColorSpace.YCCK) { ArrayList typeList = new ArrayList(); @@ -266,7 +266,7 @@ public class JPEGImageReader extends ImageReaderBase { } // Otherwise, consult the image metadata - JPEGColorSpace csType = getSourceCSType(getAdobeDCT(), getSOF()); + JPEGColorSpace csType = getSourceCSType(getJFIF(), getAdobeDCT(), getSOF()); switch (csType) { case CMYK: @@ -318,7 +318,7 @@ public class JPEGImageReader extends ImageReaderBase { ICC_Profile profile = getEmbeddedICCProfile(false); AdobeDCTSegment adobeDCT = getAdobeDCT(); SOFSegment sof = getSOF(); - JPEGColorSpace sourceCSType = getSourceCSType(adobeDCT, sof); + JPEGColorSpace sourceCSType = getSourceCSType(getJFIF(), adobeDCT, sof); // We need to apply ICC profile unless the profile is sRGB/default gray (whatever that is) // - or only filter out the bad ICC profiles in the JPEGSegmentImageInputStream. @@ -499,7 +499,7 @@ public class JPEGImageReader extends ImageReaderBase { return image; } - static JPEGColorSpace getSourceCSType(AdobeDCTSegment adobeDCT, final SOFSegment startOfFrame) throws IIOException { + static JPEGColorSpace getSourceCSType(JFIFSegment jfif, AdobeDCTSegment adobeDCT, final SOFSegment startOfFrame) throws IIOException { /* ADAPTED from http://download.oracle.com/javase/6/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html: @@ -586,7 +586,7 @@ public class JPEGImageReader extends ImageReaderBase { } } - return JPEGColorSpace.RGB; + return jfif != null ? JPEGColorSpace.YCbCr : JPEGColorSpace.RGB; } case 4: if (startOfFrame.components[0].id == 1 && startOfFrame.components[1].id == 2 && startOfFrame.components[2].id == 3 && startOfFrame.components[3].id == 4) { @@ -629,10 +629,10 @@ public class JPEGImageReader extends ImageReaderBase { // See ColorConvertOp#filter(Raster, WritableRaster) if (profile != null && profile.getProfileClass() != ICC_Profile.CLASS_DISPLAY) { - byte[] profileData = profile.getData(); // Need to clone entire profile, due to a JDK 7 bug + byte[] profileData = profile.getData(); // Need to clone entire profile, due to a OpenJDK bug if (profileData[ICC_Profile.icHdrRenderingIntent] == ICC_Profile.icPerceptual) { - processWarningOccurred("ICC profile is Perceptual but Display class, treating as Display class"); + processWarningOccurred("ICC profile is Perceptual, ignoring, treating as Display class"); intToBigEndian(ICC_Profile.icSigDisplayClass, profileData, ICC_Profile.icHdrDeviceClass); // Header is first diff --git a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java index aa5042ee..3b8af721 100644 --- a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java +++ b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java @@ -329,6 +329,32 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCaseF3ju``6ujS5NJ#>ZH5kMCN>2C zqg5|Jaqja^YL)f_co}C0L-Zl%0H%x?AhmQ1Ab(f_Kti7ZL}63dXo7jn077#pz$e52 zkj~5lToZHv*EuV!4>u|lP%Rw)4@zbTyz@eUA%EN0%cTSS-+KX{M;1UBt_lcBVTX+- z=HLhf(XRutUq1r@k;H)NIRx-MQiILpe?6mtzQ7KUgBHp3yNE&?X3iv_}nvw#NXdHj9^O+Bj%^3aPC_GT7t^~+Mp8u16OFaXOY1&|Y+Sc>{pP1!;(w~#f zKw3m2Os>0aH-Vz`w?I#^3Q*MH0Q9ak0!8a#us(xEGC+}=$Uo^&`5U0%uoi|upT7dx zivs_oqXPOsR?g}_bkqc@qWUMrPZ2?ef0YdH|BaUV$2gO;0>O2`%Rv&K{6Fb^QjLBW zBoX}(ToEJ@>5wcNGZrMC(vf`i-?;)t)888eUi^nn{i_(Cp8$3R$B&lwOq$HE6xC(q zUMbtWcQteMW_#sf>FQ?V
    vo8vVHmmmknV*m+eU;dhye?Q>hVK;<~f{KQYfdjz9At1mbBK*BQSWABx z1|Z@h;Zbu*AmeM8q0qPxa0eyiq0&m${v_0#IHBWt?;4DT{*s88gp{6vk%^gwmycgS zP)JxxT1Hk*UO`dot+tM?p1y&(h2;k;Ya3g)kM16xUfw>RK8J*cg-1jtCMBn&rln^< z@(T)!ic3n%%IoSI8oxC)x3qS3_w@Gl4-5`XPEF6u&i$HSSXfbYtpciiQV+9{ zP^y=E8#jfZ6Lhxj3{*eUcc7iJXCM%Kxm!;pjQ@mpPo>a#obbe}AD4mg44}CufLxvK zH^DLFl|}KRCj_J8{fgs{HemaeGM>r^Uz2Jj=LS{aoVy~X~Ve)A_+=T`sO zNBb55wMRBV_*`RJ@=~fcAw8o^a4+DT z86O~$WHLR1_gYLTM7)?^YbW6p&9k|VXM^ha5j_r+r5)xv07fZsRKo*#U2>tjaqYqN zRA~@x>mwEuM%{yO@21}3o1E)daF$Bcw&kv$nses?E*<3(sSXuak<&V>cPu%t)k=aw z-Z_JHuM2rM(^?2k#Qz@_m=uKtPtOXnh~2IM!G;Gc=F*Oahw4jC?Njmm205}1qK#^iKn7TB`s9_%YyK8 zAVJZLkoV>)fB+~40rOmfO_m`Z5M{zyo6V3(mz9T7rzW^5q3_K@$%z{2_z$ zJ<8@3PWPTXqGK|uPi)R;`k+>gNdsnr9L2u4Q8p6X*Ot98UZg>Xqpc?U0;;^cyfTWH z8I_L(=ntf!F&uWGnB2meOa}jLvkXTP9IWtz04~MfXY9u+<%|b)y-4QHY-u8c5ONSM zo;7j41O!Mo7rM-q8f9u8DBKPrT&Y5!_5mW|cyao;R-XX_q!#=}K)N4dPP{D2jB4fc z?gs?1hw&Mhlb2Fp2!xv>fMdBV*07~)DdaVZab?kex4~PD5%3^e$EbVd+Gymj4>Z%1;k=z2^8{4rh|*U=vr5|K3kG}4o%|! z?xTgouIa>1W3>8abxQJs(KB#BS_zG}IO?}W#6sCoMnBFR=W2n%(?`^aAB*E}@P=|r ztjwlIRx^=coLS>ys4Efg(30dzV|o{J^NWnL#xU{%OXCdGB9k~>-nl^LI31G^FD8WB zn_!52ags_)k~-5(b9orgEK+>P)g|d|gr%zjZx4SuT68l3+$$2^zyw()oTCmK;3*f~ zGD3p-Sp29TZma`A7|N_zic)G~OH$5jEBoJ7C~z6;WS%*yR?#2i)gT3P6mpv?(km?6 zf3US!Fj6{$K1gLFgZrwvwIUOJNWMB5Oec`VqvfKSRw2;x{z%00+*nA$btmGZ#nU?# zC)hTztwz#?J@0I;Hu$bYj=mdzzx#}H^9xZl^vJyS8)^oxku zAgo;`rj`bxPo zBgT=HSRF@6HL@LBi+S%wx8%^BEl2Nvx56|!>)nIJw^q#pyq*SVh5o=a}xq3*}Z2vvZfIzrH3u5{Vh&7`?h zP$4Q>v3danjl)p?_R~nxR@6#`Kd7&$Ub@=K)`U)f^JOX>0Tru!hgj6XWli9S+s$m* zr7}UyZ>6)i{ils@1TET|o(2w0zy7=nYb_m{>+sJeO{*;+^-maGULNL~{P!t`i{rJq z&XSuRM^ppDyMqVtRe!n?&Au`{rs|49-;HS8m6LJmiS!`iBJ+x*eg@da9xr7+rQ4kH z>OTWI;Nx;3sdTAzug;x>XW)D3S2t8YZQuYu08!)JHujAYyW5c9Luoyhg`ih;&*eGF z4EXLsKa89FJM+}ylR@3%+lde411WxTC0x%yToIMJ+(i-WL~0pv zYSNJknbky4;hRJ&(ZAlx|C=*+ZW<}w{%98H(FScWn8wQaQ2S>+A|RT(kD-^m_cZa zj84$}LX_jbN2WNpt(k9h_xp21#LD)*rrgS%#j?RU20b%2axnVQ(iA*{)0ZOn z<~~OoR5Our1cl;P3_)Q&;vBGNi>L|^G9-W#{^qO27O*dlRDW5FpyVbG^$DgL83)AZ5`3c3(7B|y zak@1NY9dT9a}}Kwv~LYx*jlL2wKdkH=z(u3#HVj~v?kYN;K7()eeJ4not{%x%vu}6 zlYMiiML1xTy6>ipN?{Gpa3GE=&je398;ILdh{yqc{5VJhLw-#)hbBQWrBvkzJ`0G9 zb77Doi#l3JoedmZ*sBv+reA*f^>jGhy}z9#?`hfGu2xz?WzGI{_DONTZ=?k~no|NU zmGQ2OYBmh_JT33km#cdbyVMV?XjJ6(a^qB`Et6NX?CK}gXiC_Kz8a2R%eH3NV-as< z|402ejm9rWMzTFuOFZI6nK<6$ky0=J_cazm&S~G5$Aa7;@!{_KpBKk>V3yN!d(iCb zL}Q%-)sYi_Mef9=+0N|K=_QMa*^CqcRo}T`?R|~1!ka10iJ>6Q1zM8`E+Hz}eUQeX zsamQ_s7=ZOdcY*)o@eeTt*4Wqjbtd(a?|5Zw`W=G8L&0^u%Oj{9E-BL5qH0f{^-WO z(OyAet?L;540N146gNBrKU!41H4@K-OF62J;M2FM1XLcZc73QuJEfvGG+A6c)yjYU z=)_O%Tb0Wb-M>bV{e8l8-+f+Y-InlMv0Che@jwM{M5%?yWxF(V-Rdc;%X9j>BK?iK7eUqF`#m%e*4rIL$@d=q7hB*1P(AX<`G1z_q+0c7bX% z1&sQR0|tSVRq;$DuLg55T;_+~zJ#X-^-}lmO+OK`C+E*g>72@jt&Kzt_j>os>u!VZ zH{EU$S$BBEsE1uc?2Rpo9xC*~tE{Hqher;ILdta4ap{3>Rm+zJkvH&#Wo^2}~(4+)_4*5SUe73Z);>wWJTT#jsV)EJrY&^4+!{ zyzP1GZaX-n=CQnZo8>^C&;Lhuoprif_K=pOekOoI&py;H@r}LKUCy3qtMfOa#N-N) z)Ib$$8%34>{D^kzcRexf+w81rWTW#zuHi)gHf@}FqwQcB=xe-qxMBn&EnJK$1RB~Z zKzieoI8GzL8+{3-c9iX=U7SqE5rlH#HW|Dpx!aCU4-GU|GXQLI5p&<)sUv=>QMJZp zvuj=tj;fXU6QpNQUS#G4xw-@2%jK`ENX0Wn+fB06}aL?O;~MUEH2kg9|7pY z9`C1&G_zBOg^iI|=70?3G-ji|&te=wr`z3h0sB(edkXn2NxZLS|5OM3*~cz8ec02F z-AmK%jxIy=`Cnw)KD@4g7PA5#RV*2zsq@YYJNlw{^3pIIb&YuSF1G)yri~bh(T&X8KA<246kjuW2Gcz*4Gx&@Of$xF zEu6EQM-gLe!uM?Z4J(lll?nI_{!yRXQmtoz(s=j|{gD=79a%2Au1rAT8SuBc?mIZH z{agzD*fP1We-d{ij>WS6sL>K)Q&c3QjB{Wf~;+5nvJNoUEeB;%n;kpDxpdTZDlx3{XA1b>0b}~FnpUzFV{A)a~Sv!C1 zg}y9ONg0*Xxp_3RYvGL%HVoaR_mk{2${Lkx8aDm1Ek?I$%}7qj{MLV^wNvLAK$t2? z9X@O$=dUJdJFop`Yz`9NIxGdh4hvH!egh(}Cl)Qzlr!BFii*2dZ)Uz^}T^$O{|Rbe^I~vvWFwyG$ew??TsU ztL7V@{(F#oQxx(0wlDj3cbpt~m-cMTm$e%z=WkM-9Q~4i-1l{`4{)ohDr`au_>Z_k z-S)&ozy8cc&bA5s5QsSiM;b^Sf0>K=0^qtMMHXMS#`)a<3}Q1j!m~E<_DHMo_Aq!C z_Vgt|5P8q6iKk{^b`z0P6O;wW3-uzfbqV11(lqf_X)*FfvJ0Qeqw`>j$*4z8V)q5% zQZ}FptHbmAYQbx7kWUgnHiI@~H-2SfWW0M*;GyQu8^oiy*pr4!u83GLmsdDp)Yn_w z;^ZEb6|+0TPUs7P`-J%^-glC?;orgq-YdN^M9^Rg38Ipt&8M*2r<4;vt>CMMR2o(X zs$CN=0lAFAX;df*|5yU*PkxAq0^8Q2wv-2GuB*=c5H zUN4-pF#z9b+7G=oW1ncWJoVIR=o-ev=LEC0TV2ovq+AJ_61cH==s{jX&e~14=TxbQpvl+qhUm8p-cWh5W0 zqo<658VshoKm^J)Sbh`1H~)sSMV}(R z2=#%Bdpzjc8Ku#$VZ&d4Ry7W?k*UI=7paVE#3MtRnz%WqN~K%I&3{Nnr(3T=elBov z$tFj5Fdj6<;KLa7G4Ak%BB5D&|Hz8sqd@3au@zjhKaC;_=XIiyoem=1G=~p^OPAf| zXBE1oy!HcOjn%*7T@R`#{9W%pcJ?O}wi6Bz8s@$2GI|?rvUFw7T&+QDh zD(b;vMCoyAP!>Fq6YZ@!w>DMWY*5_3990a^UCkvP7)^@IBq*YeT%A=uh=9aMyHdmu z=2rNv)i8Nr^_mcK91;%;1j1?QOcl&D>>bkG*Oif6h{o+0-9T`ACR3R0f80(PPZdrb z7YEC*oYv}~%ywp;`_X;9v_xZ%O+I=z^14U2TQ?*lpGDET2K{?%Uqn1tH3@h4a_6J_ zFf(S%7s9L~ZhjvQ1d`I`BQ8i8mr)F)e9cwBw#daOV${w$-|&^YR%T#8e(U>)<|y6- zs^zx+rvqG*5D^(K8??sVU;6G8kF}+;Vk(k{pyg(mkj#`o%r^>M@J+8SI!9C($L+Ie zX2Mhq9N5a+8^E`|!}Ia%ZqhhX$ylxS&=8gNwy&=3jfR6oH4(m~b{d5piR5;8fxM40wN#{E=U#@yKsv#yQ{k z7y3u32(UGKH^bsfAHkQ;KuW-EcQa>&Sx3Qd(}WG3G~U>{?_YoPrag%#;L0wc5yM1vfadS zT8fou7y?P|S36q->HVX(1d$&cev*Z7 z>l=@WP4~$B4wfRxHIMh3&qedjMLNig9_Je3UQ!2kAOJ9o4#c}3h?5D6b|aHt2!a%q z3r9oi+5QoX6=_>v2^0G`y=I#7q~P*+)PG7f)G4^$-l)n-NVxe7NUo2)YL%=q{k*<6 zpM{ppP?OQa*phFl8_>9^Hc&V)>|V|6s87}?UoC6O+qHr5p_BtAyl8d&<~s4!vWJl0 zT#^n6Tvf?3u8cy};dw?8F&?r4jOif@t>$D%N4g31#_>87Bg+y^(i_vHSFb19C%H=> zXZ<)g-q>{#`e~f%hgZ5R9Y6}70qf@XU%Tl|m% ziD=NE9r;q%N3?Ob>1*u7w}Q3k&cqRnR7s@A7*dxi1CHX ztbu%8(szonTzE~V-K=dEbdC^+%)0FrvdB^4#0e$)x#G6ZYSlHj+Gy_Kp1&}hZ5OM- ztL&BZyUvAII@k!(`(pyX@0M>+Q`p)z!xbS@H$mIh#?A338ci#clooRbR*7<0Nr!K; zSy?|bWyER~?&X`C_XuU1ci0Ax2sFc6Q8mPR=M}00*Lu`SUYbmOxPUtAb*YRb3)eiQ zk|$jS0=|KJZF{iCJ3O~79N&1ffd{yUa`I`5q=RPw`xa|Xm((X18wK)fFoy0b7rD~_ zF2OTbT-LgIo`#d;GFMV~b)1_4zEm2o#s{cgDMENH?^1p1s+^sqz7jdI9+SK=b>EXt8KBREb zjEs{($ky;O6j;LJT>XLhceEb@sfc?KC=1SWUl_{Vvv3?=Ccf4-)e%Lx zy!%j}IjusCLR(PykDLvhuGZB0jJ;Ju<_95No2v`H5TDmQnkmeGe%y}r3e&an7l>94 zN%j32EByl|eexVV+cUFM%uMYY%p5rwtQkEe_|nSPl0!{hv3fb_ZNFL_25GZlJ@TM+L~G;Y1*P)<@NQY z;ENKv1TkMPDrO=xbe80|P_&V;YqEaJ$c3hv;_M}qZRwnKs|N>UO(H=E#fCP0XYaVD z(%$nmo@~(!;9`>z|ez z^v?t0n6)MnLM6WBSFUJ{gRJI{_`s1w*G)Vk*K(@OEfC%PKT|&nbNW=5bO&8{4+HJm zlun#31cJZyPpdbKH+SRUD zV@Ru%h4lsPy3A8CmZBW`XJ`6sN9T>-TF%HS|dhy0b1(2j2L{tUc17DBGEd zk27_lrvxnRbyWsfQzgf}x81)VH0?%r3eprY2vMhXqZ!$m=}Gnxsq0DSMU2Ia@0pp_FX3PZwl^eXiNBp%C{QXEc}$ddp=Z440DSB0=x%L;6l9AQ?_C+ZrxWfB>xn7TP=Q z1qSqB4oOT5Jh7TsGLVt`&KiIMh~o%9w}bH65f~#*tSxC=Uh#%9yYwmKB8voOsv}y~ zi+^Sm^%;jR-43KDUk?t$Qz&GYdGE^ni6WD8HW0t87f>VR4YQ3-636c7tRJV=cibGQ z#!f?bJ$~AKDgk`vC>aUWUXVc#7RwexyJmV7$4zSTsn!%e%w8gY&qUG-!tHA>w`yv+ z6g`M~p{Wa9WxS)&v2Ckw}UzVh&DX{a#^wJQl3-yCZEJO=5W zJZk0+-vj{>>(CNpKN2I}kmY;D`>Jb|o_D8<&NX%j*fu6O{syMLJYTNW#y}XqZT3nH zO!htU??&HvHrok!L>o1SKm?;WSx8kP<#*9UEAEVk&ODDCzif@~W>cXoNDzJ&U{tr} zpfoEt>K2jQ6m2i2OQ0p26x>vDch2GRrvIf6|Ft6jl7gXR&HB~UhB5zd{cr1M`;!a$ zv`cu#aim6rsqk_U8HVrNKbH(ucg5PJl%|S_HBCC%$9{o#j654!_bzA(?lYVTIwD!O zUc;=dj1qCFD|^>Pz($;jn%vO#tG?qABEknYTQ`=yI_f(6y|l;fKz_a`Vna(7<qz+pZ%d;Y);jA@wD*p4a)WRO&72FlZf97LTcoR~)7n^wp?14Yf_yM2 zWAQG4@2=#<7AK*$s@-zz&KHBCID2i>ytiiJKM)!NCKDA0&O?gf#4%IpvISygu*rfe zOY%@k%aY%&Z_t12`=Yx0aCNHkt>|Q`f39}kNWsRx#8_Cyxx*O^SUr*ARF_2+r0Gmy z9>z`hK*+3_q*cODv&{Zo#WvtL=t`&>O}1`3I-qW~;32W>NkoMWdq4C#z ze!<|i&b=h6*8cnGfRMI;>m(O?@-7y_j`=6-siu;p0JkjX8NZg+2GKjy$V=n)xzYam zZWoFnD)u@#Z4ulX-G$#fJq>)VmSue+LqE-b~?K#1sn3Fz$)t zjixSG*0xP^yl-ftI-Ar*=h;Qu_YX1GX%xoYsbHn`dCQ`kM$h!^Ay!KNrVQ_>X@Yvp z>6;M)$^#rW!Y#$5i zo4!iPNoX_<`?rV&tZV^Wgi_)%7yHFc-fGPs!wq-)oLvFLl>QR|_h$h8!77s5)J(u2 z@tXcdY-Ll^D$Tf0g72n}2ivZ|Vq{SDgC$ZHxmV=hT*H^V|A*f(5U#LVrc@S)gkAx&vPi+4YA z)a@qnG~X7MP>e6Miui!$3x0enElq`d%4ZU<33x=r_`dM9aAQeS7WQR$AkjVAg%#Y$BZy1eJYT(d~Z094( z7`4i~krPkTY7Zqg=lJ7{Q5yBban5&!tU|h5}t;w#tCbhhnu7DKPeLW-*_K&P~9%ww2y^2Hy=#r-M8HOan1x( z99d0JqTO`odM#_S9V09!Bw4-2HL7_4PM(3cbiQ+Yf@~{jaXLjH-}(tykmc6sp@M7B zrN!<$4dwAUyZQCS?R-`PPp`{Ux%kd~2lkc;bPT=s;KQm_6&EDIH8{7faZ_khn}NY% zq?u2eJNnTkytE(je*8xb7s$XmtyVvVTRy7{j)WJ}(I(Ie0-zPc!y>W@fvZB>L3m8$ z>PXGvnq2Y?%DZI0?#B70PwR3tWO}3(7}7(K+s?OE{IO%YAaM=6^&9*5V2)(Pwc34;Zb~H7Io&kY(?7N5?y~lenQOEo z_h^=Yf&`-`-l4BArlQaX`0q(@N((Bq+ozZQndBKqT(V#L z5=y&D(ZzzlpR%&jp7$+f{knVqj~qMVu{ee}A)f=siosXN=$=3~)6YwkTFUj7T0tML za?Jv5TT{rJihoVbsq&gEVaV|B!U#jI}GPWUn{8g}pVlLVEDSnST0OsG;- zAj|~6=F)~s-Ci&>$bX4pH*j6jB{pc#z(}ZfGb~MV<+q<55|e5nBb|8#^8oDgiD(ik z^zy!mAI?E`BMArSz(cJxL3IsbbaRR_#X9j8klhFwPhzNJR=+Dh0BK9jAagJ0SC&1H zC{NA*kR)4{$h;E?O>rHeb$3&)HkV!Ii9Bbimxe-xm)fvchngDFmnvg-x?A5YLCLM7 z|MURBU`_FlHF`}&E`$11H?f2hqEA}gIyCypWb-J{rymzovz@tTY}rB%9Nsm*LEXa- zV=RTY8MC_68UJ1$M(J{T-i^@HiOq>#yjMAv-R>3}b4UI}c$TU3`EC|oQ%TS6$*L`J zJ)kN&YWG6yW%D=w`c~X%eA8$Ny~n#4H5-DVKTD9AtWv9tb5_hytrXf)(eR7P=_TVS z=3YLldQtqYPD($mwIccA7GuX5XGGypo-BqfUnn8P1%oA1_AVBD-N$K@J{Ep zp9d&}`;VRLXaCH$ey2>2`$}I>2*~yYg2p^$?)h##CHn80FIfIX5;?soGXA6Zk+1b) zSbk%VXPM@;M7ul}P`aSKJIoP)J3m&E+cM$Ee zb=omSMWw-|n}uoHwVgi)GQC%}D;XV>Rh9wik!!@+J*!W$-?%JU3%j-BM;7Bc4&N#$ z^r;b`mN5?&D_PpS;Nqrn6UStn4TP1LU`o1L!+CxPB=WF^`!S9Xv>lI!kR%>faX8Av zvU%{)<&(T80{^;KE+R?t+S}S^z~Vz7`Rp0z3Ov^VEz+a##7C|)yaheUDPt2kOr=># zkKDU@99E&35I!h>;`w;9R+ii_lIK?0!2Sw}A5s1h{DUnI_G$yN+s*5)00$EaziT+T zClfc&5p3Cua4Hsu-R+&tXlgmsHmueS{;_@;x1i~bAX8w2`=g_%!|xf`WIBBY@*uY( zas-2WVI@xd$2Y72Rx@VJ{H#XWhPN^SHP1kTpo-NxDEvVl-PE?e0p&?gD%`w3?`_}O z)0N$}i%>NuQITToa%$9(-0WJN5f-+=+m!nb)8EHVDbW=k8-N4lryvu{G41}A605-q zS$qNeITylq!ug;4A0bAT=`JQQ^q%G;m1CAS=0#@NdttcM1ox2p_Ubs69jl*KgvZt# zCHcDJIjDdfw6 zere*bzIdz~%FA+jl?1*n@R-clY^%AV=8d_lQT)weNy|DheR|IA4vEty>v&1p`aZ}t zI;YU|79)em{G__g?Wsa~8WwQ!7=k71>gGz+sG+u;ZWsd3fMe&hCj%wiDQ^L5o@vkl zogwIgO}7Y(aJ1;#OVi*-$<6LHaAXnf6Ft4#<9#X0xzBOQ&z7Zzj}8Y+&p`TZMA%PQ zLSpb4;7HxeKJ>IE+j2t|O_6uh$TzCkjcE{DO=e2Z9!P~jnr?Pp*> zCaj=?Xpy9|)|AztsNeyXx^`990H)>eci6%;Ml+vb;;4RZ}5@ZST?<^heJ~?R*_|P(~ zFVdbFHQ!!ij>F1`|B4$-`sCc52oD=(&zZc6q{zyS3g1OWbn(%wv1f1e%#RZEo zdFiNOcvYx>bq2e$GTFOR#I3)!JBc>IT|F3$ZUx<#U;BL_t`+oxk`ojl&LJjTPI$8N z1lpw(cP8!1tdJ#|E7e#Rrrx-eI>B*Ozh`6 z^yOOINpHpCOIXpB5`qL4qXMS0sob`q>XfXHuv`n6k0IqqDR7W295G_`jRd3HVISx> zd{h{#1;eaXCZbbeDY%MAvYym_Mee*Mr&3T}>_U@%F$upoER{{5E z-TbHbW#ZkdyP;2a6CYoiZ8;q9vR-DWo$=nr|LJ`kI-7IGF5r5SOzBRE#andy68gp` zIXq`4QdPlG%rGPEiRa{ZqS_*#ofqoCj!`cxrPrT6N1^OUn$xezx*fZ(AHdRiQl@B< z;B+B$a2y+e@^yf;5I;wLLE#zDo1?1ot{-!~1D{=jq*r!*37YNrDjJbH>^u2mebpaJ z9z-1yEG<1<=U1!hSe}6u)y2-!g>#luF+5OrbkQ~Ke8Ere&zEIPy*}Tb0VJoMEqAAd zG@TaBR8r;FSbaxp+f>&>sLw!_H=$Q?LuZHrr_RbPwQ<@FbbczRclG zSX(a{%DA8kZCESXJ&}|pk2$^sZR+mc_yi0=B5q?@YQB|k+J0!olK4l88dt#+(=_0% zX$3kE(WvCiO_B3B%?K;C8mjk-ouvKLo|8*88-+BXsYdjpWf5OsrnH`jn?+&65C0q7 zO`^?Nty{VY?R1r&n&Yd^uaOp7DX;3j-r-18i|C+W$A&S`hzuV+G|~_4u=!D}r8sm; zMdw@{Svidl$apD*a7!U3nh&QRS!5nX{fDrNj(E_ zYUhN*T>8HZbCzs`?NMe~nUZdqYGkt!P~>htzVDz(+ht8P??}ZBk4qG#y#=RuFv)_@ zzuu-_PgfVNRnwUr^)<9HW+Y^gj4IIO80b>;Qwtp^qs8O-KoC_fpwz{^i#Y}WD(?@C zx!FL9+4z1eCU|X>DkOZ_V+`b&NGfeX-cUCa)*FYlII@aw6-6>v-}b=Phyt(f(o8!q zoVyp=D;;$|_gB1UF24WsbXFih5tsGE@IW&CouaudR;p~5oB!AGghzwD4_(Cr<5#n@ z9P{1)g{+fDqgvtV96pXm-J091hJ81mOlghHxo%b2xt0F`IWa?I{w;H*Uu`J&aSHrA9d{`G3p&e_n#Xcj49EGwHg~_pMx{{^a=HUD+ zA0}v39Qn~&+j6PQY_DV82i%<#6Y!>KRud|sUtU$eXe^Mp5YiK$n0h80N55Ra$i$U$ z5ZO(rSOhZ3GVjkbyG+mS zOuZ*4$%f3nQG(udLhHqL`k(095S7+NEt6p`$W`=@0K;0Nvk@-0n|;^~E{;8n4p`i} zgTkCVj736gMdEE7$KKV{h!HTsH*P(6*ea3dC;~mLr-(;tX=m885a||@G@_}Y0B_<) zRoe*r(#h{$9wZmMJrdL$0q+&Ax6_+w%wV~$an=OE{>k)eu22;O;;wj1-awl}aR^?< zD->Q#&kmXhb+@-PlW>vZ2GJbC>UxzZ#Z2)0z3^C%OmN^V;0?*1_+Zl4WAQ=kTi#G= zAzA{|WW7bZmrVu^7m~hY%@F2%m-rz$&{L;DUzMQtrxFblPT9A{*v_<{6lA&8!7m0&vZAeJ{xkMu_v=^bZHuDirDBx{`>c+noVYHjR`6hFVikzt51Jk&Z!16Qi(uE5~*}R zQ$+!XXyi_^8j*Ld$c_o+U6l2m!D`B%bi=lf#4NrOr`EV z!nQZ{%Hb;V(Og(j2@2J)xQIcpwmkSoCMLs&Ew<~ezbjU-yDHK&MIHH>fV(LQhfXry1oC7rj5VTboxOzvaDP`y6~>FvuhooMKsZxBKHA;oUqA3_nqFZLW!L?zeghi63T5jk_sHS4V#(X^~b7nR?s)v$h z+K+F?>%)C_>VipJ`>=a{YT6@>Nw7yoR_4$beU0SL%0qcvbmjXhRU{fEq}g|=9U~ZV z7{81MiKm>lr#QA{Anb2?;2a>*POTG5rqxTk(JWpb@m=gC*7a7xG{kN})2B*z;5tTZ{^G>J zQYaPK+5&XQ{PR&JfGjGEUSF=>>cSRMnmjvZ+CHT(R3mze)!oxR&I*^t+to$F^EUWr zr|5n)!zX_Y{uhtE+Jjr!KZ24hbE`B@hC*K~u%4p=$4?mPeHr zzCDB%G?j@&urymIRg8MLUgkK0Z;lUQpMcMM+IUUr1X4@fCf*QN2Jle)7h-5ObK-Ij zBO?UKrMqS}I0D5$#t0&ums(&HFKUBkYZA(t8ahlx=Xa+`V%*20ocj8*m|9{xzW<}h zMK0RkGK_wR6uxMOO?XoY_V4;DZBUhRWb8ILECA~!U`4dBGrHW|}!2 zbWe|-ChK-t%}hHL)q)Ygmn0L>1{v)&Sa;0-F&@$>JcD}f6jgevl)v0{OkQrK!9vb! zsjU3jhdhmT&$RfY%5b7WtzPZe^aOk8W+-Q^0bBH@{u5t)k1Q_`#A}?xNN3pPzvi zs-OB#OcS~_XxUW}0+g4uU%#9mDzhQMYQRm>^#rEq^E~}!^w}}mKV;BFx+$lIAwV@= z;8j>mQRlncqScC6@!}1~C%uiH_rOh3?uERLhS+H_*cz09v<&H7Rlay=ScZI*Wu*HZ zrdG5_WJz4TuihpCnW_^FTPq0_Tk%L7%4v?;w!gk0yz>4)1Th-3@Z)fbzH-@$n#t}r zHSlAC2@1LIKHGu!?;-Qa~)V)AcGx(;UbMHEF!a#fHyImR1>v&im29<6* zJp*^t8fQx_B?jSDQW>m%C>|C=i9w9#c?Us(WlniN&m)Mba3jLD?II+}3(z5c2wF-| zwINWW;*;X&YH<;tEv`i8j|_$4B%O+LSI)?%N{x@d8sqH|RpSkFb@m#oqWN^0iv-jI zC=8(p)z#9j3wyO<95qz$`suI^Z?I=!9x$_}a{MIO=!11+NEj;Cy?0dIFKGuJMt)YlR_aC=>52-I={x&O1G3#gO3E9uF>UT?iZ!? z!QqWTQ7uo&Z%~ry_E_)+smL!yZE&j2JmlW;ajhL<--U#<2nN;mP6zxu;XNdEHj-nS>g>7wk}rwx_Rg)!4s(*`4n zrmL=ky=7F}-Ma2gOIupBEl{LDiWe{Lq=n+v;vR|zcZZZx zJh)TbEu^?Zad&rj*B~L!$+O?J*V^Npz239WCk6usgCzes=Y8MT@4BYg7L$rs6u zoz%2-LBhR8=Y`zaZ7tT9z+>^@fQ<`mnZvwjd3NM$q74DwU*QoA>eOsBo~{1u=*cC) zo(g6>Uvww>bk3LPMOTEpw|1{25=mE_lkXGpmFG>J6VK~8kjbcUN@hN*&E(5YzY0t7 zw#HgHL!JjFsNU4;KPlPPg34&kMIEgPNAZDQkI|%qqsD|>@@2mf@C+uqlINNYj9!FV zbfqL5#IVSe6^JBPnv>8p(3Ck0q4^J6?I5zULaCh$bbWn-y<1_h*hNllW`sd}y!Kuw zMwWKFye>eAt;UCJ?SV>^Krv$O+RLLbXPdw@Soby3Nx8TC>%LyF zq)X3Cdh+jpB;t0otmo7Agca>b8ZPu_GFHrt1q6=uV)(-Qf4`dkH1LLr+}7qWzxe8h=6i!8dLMi!Nt)5v(vYvd2Du#HH7iRH63e9& z5YDh%VGjNqUnRQn2nXWP-bAjMM-YLItUiwG)NeSPkcox+-S`=Zng7t57xI?3I~P67 z;7ZUBR)JuyAW_n7chkxA;e*lgZ>4ECHKa)2MP$xwsTT>?GuSr=bH`t+Y2r2b&pVzyc{REv>H3Y+#a>2SJr);;0#b{5_h*-h1je9ALLo}sI%dGtTCeJVi)2yO{W}&;yw3gx%ApVV* zq0}Uuc~Rf6qBH9~M&N(P^k5#L;%|P)V^XE%P+qE%T?e!Y{ z2^Wu^%91ij1N`6-BWGIP`Z7vCC#z;4lMjS}r*%-OH_i?pw!CL_t;dhHBl2`btv0o< z{5!r-FI0Yf29CkloS=_jD6&8oJw=ubAw*LzWx`{X+8LDMLQHl&Rk>Lu`$}jecO_M% z@KX2&dW*|{hFh5o-~)x`-*5fmFa5R@>A4S8!j7paFwFwPxC=2-E(^yU%|n8Vvm>*_ z$lYbYHDM4T-?N@$ze8X%$R}~lC(dK5{x-rU!lmFa`%*V;%ZqXNKV&m3{xd8E)Wqpf z8zz_Ty6GK3^Bv)>=E%-02xiETa5i(ia>|ZBc)%Io?{1u^B2bJ zdyWw_0`YS@jiEYZ##%mr0Mnya$^of$g`nEty&E(uAb#IiP^k-)Na?gfoTyKj!aVon|9 z8dQu{Xk4r+@cT&E!$}lcPpcR`{k@)$PmxQK!7l=nA&Rh!6Z+-rd;PgXEY1-ahT()RU_rN1y@E+8yvRUgJnFK5q= z%sUfX7$={0ZJahqzP68!{0L0mx4Nz594`0%6m~tEn0;eZ6MERH*@z_YCCZWF3px1< z1FI_XaOJtQFs`iow%$fs&K77>c>^@MNbi4Frc1_KdUb2vIYpwL(9;WH!oe@Uy1648nti_i zg+cC}?Z_;~6 zepLIw_Au&;3dtLPcY?v-74@7r!GTvuso0yNs0S_}j3Q@;t>^6ZWBcn|uOKvcrm|(c zBiZZiRv?S`S)P#zoQ_YrjTPbEsBJG4F)j+X>JU?_bpxCsEQZTpFQv&xH6eE3qC?*K z=CLD$Kr8VXubh(#s&@tcLBG4?mvluz0}?w&pfyG)D-Ic2+UAN}uL(NBya=<0$G~DX zjL{m>ugl5@<%!>mpAx1jB4~j8cEdd+MOu1bN756UopOgM_H2tJU))FVH)Z(E91*_^ ziZT?@4QxX*6O$(ox}l3)CR45R^iNrJ5RN^TT5<{vBK+JtJMCRs!61UhXfehdviUyB zW^aYh3S@6k6bm_LH3maIsdRmFQ(Y84x#Bsbb~6im?z+#4t3Q`7A>jvmB0{JpPcKzm zj+=%L)=JP)vW($2E$nvCh>i<8<)DGlz96p&8`42HXkqWec%2JVUFcjI*!<#W9yb=L z+N6tmCW!W|LHzKLVQ!8|RnUuQ#7HKp`dZr+C;6h!!q+R+%wWh%0O*0jszT?WJi}Oh z1k&&(bo+1i9 z;@b`*M%hbqJ^itvfj0P$!c^@nFX=Nj)X$E?@okFDHU>FgiY?{Q$nNIBoZt)G7>)Mf z(*vwh(10^?eI~6hjtC*#%(%{%Ruq+(Ij`itL~H0v00rE<#9D5(>UTe3>zPldzb8Yh z;aaV-kaJn@VePLmQ^>4 z^(^y6wp6TuiZncr1qv@ba3yDJRCIG9XTGBU&3$!pN!$_Ey>_aWX00$u(@<;du97Bg z63Klg-OU8&|CGy^kS2lvJv@aJAxln?_nltLfhw&>*R7XHDEP5xgTPZtOA4ID0T*F; zo=Da*#}VoQ!egs5q1n*7;<9ROLD}PlMhN$0gqw z(hzNA80{ACNJ)^VvGuKb-J9g3@L4LU``m)Ei|qJ4Y5lezK0Z2ELOr^2GL-aq0BDuG zaXzn!mfY%w;*mwfWZKKZNezj9-kh))yC(izz4`-Mtss_%{N@h4rh)5RA6ZYOae_48T^X@0AdUJBkngaDg4(Rki zkeRjqh6~t}Mdm3eec>obsd+7XMuCwgtUC@rn>b=(D*}Gk#zKi2s2jY_KsJL7 z`xnM=&)C{c2R#}S;J5`L;u3df)*Xaq0$j;qLMH_}jM@N2^e2Tw}|^BM_LhkX`H07cAJH zo4S2G$NTl4;Yw8cXF;DA&@47NvVwqF0yTQynh#+{_CW1L`UMJMmyoO~fJE={Gt!wg z(%`u&XPT0f^MY))mz5WKWhEh!Fkyq1apgPu!Ki$vt%ptEDPi=@2Jew+GU{7g>$T7@ zPR$wQ`k=|zwKbWmfD9>f;M^KU*qJSSV6!*jj75vOvDhg(}FRw-BA;w!X-=|u`iV+ly= zGySph;4*08Lv#!*0Knu^bW+~SrVdx0Nq00bY~6pXPl7y7+W|`M-K5-lyAf`A_&mT& zRxIvEP9K!&zA-CjwOOsat;Umf_VlKi7CAjP%xIIwyn+unfnKo;37B5iLz>w@OSLOb z(|LYBU4GSf8dxTJmZEI71{1kl!EXib@cmEW-50n$WJ#0Pbq!^9LnwLEb5R-b4;rDr z%gN6g5(XS>#aeR-1M>~@N!;pR3r2VQQh4yRsps8 zs$LHO-?v6~+@#y?_R;1%E(@=YgA$9jQHFb8?#ZR5nw5@}K__G4T#alWtb~a~b!j5L za;{Y>wbNnoXa&kK&Hhk(@?cpiYe}8qnHy}{tIC*C1vMGMaX}*fA-o)F{QSJj!WXQPyWcl#dlWmB9PrPGwnu5} zY}C9**l&_fOWvX?zJ9c5rbxuCZ)7o^^@aE8hHaw*p8H zZ1TF}zFbBPP)I?3Wv@NV&4FgIVecVQ0oyl`V|@h3 zXCPFwm-EdDZ3+5((YXqHU^hEG*MISAJ<+f9FnkJCo4*%LM$T)a`ZZ#ZQ(eXNHjm%f zeJ|BSbK3MapO7d2;2Yx*(NU!i^3eS7s6N{5UdEe#V#Yb0>vS;Vsz*n5WQ*eGOo78W zgOLGh_V2D@8x24FOzA_ zZ$(0{0X5yx8`9|nI9itCUMi6+D{aJ8W_-9}Aa-f%W1Kb&W09HRo#Zry68sV=k)cMb z-IZNu)$H8E-jfzy_gD=ijL;bi{159@d7H}_u01B-NRjX1WJjskXLR9XmfR^9`?Q~R zpxaITVddGTRn|uJZe*6Ym5&UDaq#yQX$6}JU@c_s#;8}I=h_Q0jkftz-l)cf+SLz0 zY*cM8*HywQwJh9YAC2Bydv|%JkLQ?cf<8M1U>I4A6LJ+8W}?u5Lx2h)*ISCImzq(~ zGlkEuBQE{ob2rJ2sP}G0X&5Qe6~FWksmS7_Tf7Sx!jS4tmT(%P4okNn-B3_)9R0*R zPR50{)=i?>2)M@AEX!1X6&0SdKe=3aeFNlAG-w%;UUWSsA;R^%_!v@i)_Wk6*?sc$ zBSlarAOJ;i6J)!x&|u=Gind?={3z}5{HW$@ALczQUUYH>pXG%#3BKG|>vl8QiK)jl zKU3OiH94sND(p(vdnzOO%)AR8m1F!;IrP)0)w(VsPtU z77A8HZ>)22=Kr$3<5+9`bHYT^G(FmxCJC3eLo{R6g7SP42w1)%4t#pH1q)s}@hjt^ zAe&zL%}pA=b3b&KfA+UT2h58G_%O?|(5}%lDb~v_RmhqAYa997??5GS=HCG@Z&cKI z@-Wpiz=tJ$2zhlEiu?uTO7pE(1hYLrR#V#b2^dm|jX?qHOy`Z1OmSwmir!nM=0&jn z!?`kz4o5!A;jL&+(*wX!E%d{*vy?3&RfHLvQ~;>~@z4PejrO&PN; z?2f)Ud#}9ce1Y3)=O~?Z{|<2X0=^sZ4B>dYaJzzvX&r1As&(3#_5j56WavCFkDH~? z7EFjx@!DbOS=EeNl5k5j@RkRTaw~Z(@mNzN{9t__f4!w6GjkJ0e^@Hb-@NH?jW9Z3 z5RCsLKu<~mXs>kJ2WK6vRQ~u-fA*xF?vWK>XD8z!riCQT6xH_}U1nTDwyg+)?_SUS z#^Sw!sk^!|=!akEaZ44&=9tyfh0EL5%B_~XO<~Z5UKp5uE(N=4OO;u)_0778a<9Vu zTi4#7>8T6{l$JU;aMJ$xbW3t3@<23ms7Ds-V@Fi1W^l+0$-YI&rrWZ^>8xwbC*vPp zyZ>DcezW=mJCv^M@w-A}5OB2+GhLVK5<1wsJ~UxM6K#PO?i8Oy_a>2LVxMy~a}wun zjvMx$y9_9rn+nOuzY9jh=)i z=@?SS~zz6H!0z6 z#BE0NDgJ91E2W;or8*sKkLc>Q)-L*Dzjg~mX?*oYne0g@tH}W8)ceJuia~JQ)O;tO zejw|ZF_X+#P0gZovqg?mf)n2%Pfr{aQ{O&!u1%vt`ZrSOh75M|TiW5;$<%Q1p?H%R z7dS_$yDxx%LtezI!(gS2mFtya?>g2va4zI49=y=GcPwiWVXMJW3zFAiqaSSZ0sP1( z5P}N?yrRRf=v!h#^|7yh1`bg@ZL@{zcK5J*RF??n`kRBIaYS@9fk(lS9$>pDF;wz z;$HoR8NHW$s&%&22VX*<$rt=bATIXuwJtN9is5xzpC##ot(i;yC(?;*u_yd!{5tTf zXN^Y!ntJf(9e^<&T3%=wh{j*TM2nXq`2=yDe9{>orl(A8@+yw1D94UxTeIt3nHT3% zx32S3WP2bV{sn=xJr!u{HuKCN8HM@$FwQYqXkPbbVgKl zLdnj)j&ns}44&=I5y_jHxkpRp-?lqnIW8MM!uX;`{6yVqRAclqa<2RNpf98QCfB=^ zKJ_`*1Pr~4h$U&NtJ@h;S!U-L6k^v-*=Z?D1REJ@r3&L(w1IkRQj8UwCJj0Ck!Mdz zr?Z4+ffF`tS%y>Pn}=|4JlM-#z0#3(#V*XD4-vrdiq*gM#aG|YBX(ruCGznwV z$g7^rOzhY2uL?1_%}x@pbPTFOOwG~j@r|v;qsID7sUfaiA#a(dcX5bo2IF?M$g`Y@qa( z{Aqa`3(E_0+Bu?CUsi%@9|iy&Ow`h=A3=2mSZqPu(e47DdgGne{-}|s z%$kI20`~ap90`iyOMnEQgZ&S;F1TVv`UvwKt;74b5lwpa#&cjq^V}})UWU+rpEvrb z7b$tFb5kk5^4PCX_lFVVO^-8hV&wqDk+Jn^$R4%-u<3en&Lj-r-{*rpDT~O{dj0&{ z4?GC>HYwV%35{-uj%1h6?40(8mfASJ@kW&CaxR81S3_-CqARy+p-&wdeXX)SYSOrF zHyFRHH;^uyRi*DOu)lrQEcCVfmz$XWLve;1^pZ#<^3c@Q)5*mVc&&r_xrSw34haQi z7Fjv@qlV8|_sA0E%BQyZ-qe23Q%X+P+L|qws_5)J@6BQUnwuRCz_tk;niuK zDvOfF=C;;rzxw=#2gIpE)S~!`Oc#gyzN^=cuDEKX5hy*RvekffHk)%BLeY?40~#VY zl0())%}>T6<63#_u!@cx%vwJrk0zVqImwdK3`*7QljrM(e?QPu(d4PO#O+;^G%9R} z`6{tpQGZErcz?P&!t9=o68S_%)6EC)X&@8xj}kri!hRU>Kc|;vbumQ&(83!>)478> z{Frv7FPg)_ldhEAX6r3&?l^EY-B&mcew`7<^Okev zFhsNm^|O4c^oO!XuD$vh)|1u%apkEz6xufGg?e$2J6};#yI~{s7seDT8*L5X7a2=2 z*;C@Pq1F!M2+phZXEcyM9o=HE)`7UINF3k3R@^4Gt>2^gFd>TD`O*`I*yEq*r@O~$ zJTLwmlMT+@zIPc*=!LcVL`i?6B>m0FO**^)oZu;1tTU_g$=Eu>^{qt$58&f7mMN(5 zQ;QPXtzz{e9la~Mg=2K2tki#{jsN!mb*w~hog0^j0*aLGv^TayX6wWNZ-NafR7>l~ zMf&@-E2w|h+DuceKJvjUE_s!toX9wJyETm)mneHVu-MG1mUq>Qt3EjSLWkLSo7A92 z?UFGmd?jW1L!Dm03PU3;4xv|+%+(ZWK!3&Ww#%|QYP~ZEbmciOC>TZkd(s+Sb#Gx) zwOPUBI?nQjaD*Dj{Gpox^OX0_RlYNhYmm8PI4<{iX@;%3)`Pw4Q(-Dz&*8}i*#gJ9 z6=t%@FO=A^^2oc#(wGAjztx{yy(5sj177vuqCwt4G;Iq)$+Wm%v)3M?&sf#c6gV`z z<1wj7)PUn3Xw)YU%`C70`@M(DRr=Np0F*+q(*#tbf=c0dJAuF}N5d(yVFnvd>_2Il8co z+10!^imHbd@a|N?2^4L1xo?`BTQcgpjYu4UbnhH$v&m`atNp&3;fidS$zKVmJ{RR* ztL+-#cvGxBOj|L{d7+)quH;okhxiM_@Ekag$&2tXaFeEr7rd_)cJ|HK^ro_l(iqS! zQC`klDZcs(L$sMd+@|vJ8Q-c<#Ku0$UYU0hA(aKD**s8eP77ZqcTQ$-5>~Sl>PDT! zkMqO5_+6HROoFO!wSGg^n;xUYFT0p1SYxQC40LonhqF~;uLx*|*bNyE9 z(x(gl=_aIxFoC}&jHeY?cWIyO%RLvP3mCP47P%6ra%O$K0ll(bndF}HI`wj_l?M9h*xQ847q7ZygG6sFgusQ56yY&TJo zHOBTMiFJcg4X)`16I`(gPfcpb97qFLpn7t7`$j^Qr)2Q*Z@oP+saRcYCiz;!KTGSz zT()MydG~2^E>87J7qQ&*%`1jh&yKadHLz4Tu|>{6Tx!}}mj07}4iel)jzrfujv}AW zA8<14UG~{;;(HhT0mfPb)4YRTe-o`C)6{K45uorQE7qXqzq^F+_IPjLHzZ;T4TI*) zGVeBD+JCx&4^nOv1C0y7CEODtIB3(U%Gk89kB8|Lo932o-7HRFPrZnoSRL?)D*jr~ z?zKjC9H#-&>k71UagV0l-Q@zQ8&IaSN2L6lQz2MyE;|Z9@48>&~TY z+MZ^(#0)#;>2rmRlkC||R~T+`v^~?yey&t?+b67GTTBa5V>C0^mP?~9n9rrY?Z?&m z(Zno@=J4r@y^-dp3D-q>{{Cp6`DR~ur;P+s$sWl4QD=+g!Af!55L|XbD>GAKi=DGS z^c|?vpQoh~$+MK03=>i^`*+yrpxR0Iv3>C5 zxGnx6MpqvwSUgqDur%?r#R5fiXdDw8UJ3nn15Jcr8hb3&Ht~Y2e!9MgHb4`}Hu@LF z@20mVWsPR_Lxagzwi!3O#CHk$(zD;P(@#{-kPEM_pn55D7A>GtrJ82$p8x9#`^O?g zFSIQnAquBsoj&o)nEJa(d>whahFHMYhv^4AUr5Gjvq+cFtSR_<7fl$&%ouOObd~GJ z?dYo;0_8n6=nVult(eeIC1#hQZwAy(F=yYvfv5&UcYTbSpdd1 z%K%VR(T)@+sqErnx`7B=g{5h#!cVW0?Y&rb)mH!~p}bCELNZw*LrL723^*l1rT!;B zwP%X&@OEmaqb0WBkV@tdQJEJ(o85QM*3OV`Q@p&1a;M8qJFjYVv-Vz!wl0Wxnza-# zuk|PUtFw5agQ`jPP-ZcOMR4xJG#v2>BzK$MB=!m1TqX+N(Q*5H& zlT+lJTcNx5HJir+S9L%BwLcZWz#pvUC6Cjb8)3(57NFe@GOC9I^2r>7)FNfGQX8q# zLbY%$I})eW45Hmca(tLa!4ktl7+8l%EOR4r2NY^#e~wNX*=iVlK%2vZBWU6*KkZHp zo3>mqIPB?BT6-f2eTa;3(96WMifkb*z_gNWmbya4y!yiSAnufw&$vb z?OuT#c3Y?(vP2|vi4-N@O|MbdCV8m(9nt)S!KWd1bwz4G*ENQ)oVOZ*H2c-l-bLP115niN!FuBdDzoJ|Lxkz>xB7xBD$u zDCv&%8)YuE^oYkC)^~sq_9YSOIK%3gseLWZ8;Yw6y%gs=7Xg;qUnT*fo zK>DRdFTO3{9X?R!Q@?uC1UqY#EKLzK6-yeI`^GuPCj^{beD2{LT5G$z*;oXDX`j0j$T`_cXTXVWWfOeuCp1i>EAf%i1Ake36iT{pB;|xPaDl zX1$oH@J}^P4Xs_R&n=#I-sQfQYyHE3zk+CgyaMxZsnnw+h{(RRx}{nM&<}Eg+H)8h z=Lb$)r3qlD$vc}Olkrkp_UF56pXG13(OaS1snwYn6}d`S;u^|)^4ksfTUDJ4D3Ig^ ze3Nds4wwgYkuQ9xjiKaydy@m=19fH4o__@i2d^vW>od*c3_v>3;v3fLd+ll4oC{Zw zsT~G()~6<_2&@vKyXAe`I7fv7$f4Q#B3v}-Y)kd zH;El)vX@n;<#Muj3+#+vPXMZD%jS@;WYVcC$MeP0m8QsqzcAcxDJp*^^h7T8PfzsW z_Kqn8S@qDwn~MFUlJtiBPJIiFPuX>>M=9WTS^ePuxy)nI(&&L`O#$YSj8w zsjc#Qbf#3?m=prwQp&v9xdW;)0VkUGiyEP^hZgyov0o*3T&xTEN6Q@JyPI)8W4`MX zz!Zsnu*w&ZmCv%2&T^++)$HU5j)*kQ9Lk@q0Zv@m+hn&LW8xhGmsD6*I!s7Y{=zUD z7@TLlb6X2Kj9r62>%&8}G9u~8E53bC>eIR2uQN` zN!BqMkAL)C0K*kt@a})V$>+B9I`fo2-p6L0#T^|R?)Zd+4nOA6dF<8K$QwLw#+R!P zTfw0#()+%V?KclpZ|u~IFZaEtyvV{4kD!`66XDfB%{+EfBP>HDFLGsdCzFrc<(}M% z{k1?5>)g~2G%2R^uo04*oH9Me2$!iSlECAQBkP#&{oP;aMe85se!I~;(Y9qXI*mJE zFFDfz_M$unPnEI4NwaR8 zHnBv-lbO6%vr=`^Nr{hDgPNIU-Si7DkGby$|0*GnKcXQ5raopK9^<)|xf;T`Zl2By<&TxF@F@7Pye`YeZW<^$ z^2AoWXz}CIB**R+7VhDFLx(XA>EC`9gu0~a!SiD0s#pFV5C_7hQweV3 zrAJ_wL3h|^0OBdo`JT_=6=c#Abb;QTS6Pt#n!swT;DY-G*YuWjV{}(`FHoA-rImO( z5qgil>3BC1^PAWd7>L9|CWm?5i{Dgig@l)~$)4bqTSHc?r~1U`dj{6P-mSwsE@HR? z#%E6Q)1b|0f1fkAF2rUs??D`8%W!#HWEZib#}#*}kN$r3Ucsj4WStdr&grP~^vQ+w zb~T$L+WH3EL(FKR5KdKp`wJMF=95CJ_4gH9HN4d9-MxXQ;BK)Hj^3PYR|*2T&V2`Q zkL3I}M0^%Fgwin~Jod^pnjn+FZkP2q7}SH!^muIiAB30g1k4hd{5V;z^rnZ`1QY z;@*Y-jU(y5pA!C~b$=ALuKd)3iX&JWW^wHqg^7)L`Qrd};IoCqb6Ef2Zmm=8X=zXx zBF=piy>*8;j9*PtPdm(=ymS@uvvJyf2b9GGOt*N#aZN9#U-XQjo%X{X-!iX9*U`j` zQTSl@NH=?^^5YFUao_o?_>l7(S;p`Rg-(T`1kBX!3l z?U`()de8}N`54eBBk<0+WQ74%_F;#l_Apd={AK*EYTs$pJ^vN2no*?6X-50Xb9bV^ zQ4!vJu!>)#7>+3+p!BCLFa)lWhOO2bL=+w)Z(KNR(H^mK3&;QS#+v~b*05c%}e0+FBs5@WSxHr)G#K`WVRn{<-89k7*5Tj zAF5zK(D`-Ka-e*Abe&eXmng);s4#H^qxGr{pzX8R4qi+4!&iu24Oo@xFC?nT<#2Ig zaMZkG>xwU4k>qX3$!~n3dr!h8Q3oxqdnaQ3k&ZPK`jPIjU=jF|7dqj(?`h|EjGD;; zJMP4Vz%m$ba-z{j=%{6KltQzJ^>D7} zD$U=~8p4Zah**MHc#phIvkf)|CXd=gpTM><`pWfx_k1h1`RaX%>@u^G@89 z1a?o0S0+%8uDykm9}Ehn_JJ-(2k2ekmQbyVQ^sBJSt}1rHs5zFsALd26YD-AMQN3M z-+Q7%oM*G#T~R&6CqNKZ1F}4APz+x&ZxDCijVOiP)+XL*F4?CU=t;`yPoZ|uf9{5g zGiN9uPxsbjX1R5h;^{KneEs>j4cN4{Im(8A8^Fa9_~nt?yC98S?ZiP`T`?^qdEe~x zpp6KwFoern{4h(p3m*8Zd5=ya29_MlkA@NiTzfW}PhR7{AQe?4h%bSFirAG)<(J9J z{T0sWgd!?S=4xW;lBPaRS(ni@RGU3>Z>qCph+g_bZQmp|v-r!c*z@(gW#1bVi9yh~ z?Kf-xr}Gs*93ehrc(E%0Gth7gV<^+bmjI>V6;HH*)Hkoqg-xZIWQq~Nmw}3llnp`Y zAZw)e!2~N`EIy>BfN>qm#$q*%-ZuWm!u0|BYdp)J3SRu$S40^E}CXAz$bo_O8(5Vg*%;D&rqFBEr75Wki+B6++F|E*7ouD#}0j~ zo+%i8lhwO0W8t^ye!(b-W>cZ)A9ZE+i3kEO$MbsnBn13Ti3@=H&6ZT?Z+qrVMf73~ z=vN3i>P#cyWl!WwVBS;#pCPbL^RBd9DEr63GIQP1GbzJbGR;AbPk$#&)wZ#G?zo8# z%@{Ag%grg(Z+$!@%t3VHuMn*xJjeJ6Nm!dyaItgFJBFRqpvcQ|w@*=SZk&t!Qk`LG zsWGlCyZrg-20F6gZU!d*L0PW6b{)FJKYDOj{Z?O&gKv6WI2a9-zI}##V3`b%nbZuc z|D|ZFRr2!R9mCIe(O2sfIvYx`;QkQBBlwy>(I6&qb9)+sq%Qh(Pdc!RP*5e~xISLB48OAl6&#DPLl* zJ0ADj>1X-CM=Alt9>Tm6Y9qjjkk^Q0%v8-1~HYrnAPFx&3%Q?7G(buuauV&6w_tC?qk-D6YYf~L9?Jx+|S54_)~@m z8o3zq3oGgcJY$5(OYf;N3-^(LMs39qQ^ECQ&W*k=6IBsmS`N%tVC+8ha|h#me#fZ0 zq5tHR1*0pUHcruz+{}~G&Yu(y;KB%{&6qm%Kbt8vcVzUi-mzgzJaSgXJ;~s5Q^CFQ z!r`u7lE1mgxdJOH83c@`%$PQ7f(BR&7ljpXE(an0$FGHd2dL=ryT@# zPz`{++dIt_Qvv+XC6hXr=qnh`ecuf==eX-|D8c{!cF}5|AmD$#hR`h@QlebTmX{<6h5$5ZJ;i>AmTun zWjV*uXQhnlu%m{`ts2tbT9zmf1*W&7%@S5%#S$e|m~3J*w+ z(aq`N$oBGhK}LM8&QvFybF!zVs$t5P#y|>W(a=;`aVm)KF>3l=gsMuh7}Ji@3uuTO zs0(MOMQ!#{LTGizyEHOSl$6B6;k}!1|BiJ?_)`wGjBR7(HAVal;Y%-eNd4n1v=rxH z0Cj5eb}ju212}kI&@pF%$O3fvDkuWm8^q!vlv`;(78biHSi@L@9-*V#ag5{5D21m+ zgnQI~77gc3Xn1m*(h@1`&Eo!iJz7-j6vl`rK_%Nu6L!#&ama{u$q49`?B}@o0jfN~D2X}OJlSAUkJ<%*rWZTiiYJ26;YTHcEn2)dBOI^L+Dd z-_Q7WQUAHH2}XopAkWmzq&bp3**u30%EmIJRhYEH;uC4=10h$AIq0$2pK(Hk7{CAe z;-A?CHwk}RhcWo@tJLa-X$L+RRl7D74ZbQZRt>kPQ`G0q4y4H^&n}Uj%UOp<05Pu! zf)F;2p);N$rQRjg20{1mU5Lbd3l`S^{ih3h_l!ytk1G+&FA1^wz}{2c8wDk)=VI08 zycQWb~-)|>+wQ+93f<)EgVK=E4@nToreaG?zbR4PSV*xA-^2)yhX3$pw z=2>BQlsv3S{^V!Zl*-FY=fiypy7u+TtDSC=#gVYIKh+ZG7}y=zZCO(O zeQ=%Zs_La)R&|6j-zHmm^?rrmr<)JRP8rC(Mu zlh6Ni@&Auxs>k117H4&rE?B=sA{qe0v6`4d5Zphvoc+6yd5m!f1#Ipcvo(+Km`_)2 zMO&C+8}jx3!mIY84$-RpfAaf=6oVX~O{1K7{3?&aUy4-)ejal=QFy+j<;-}NU;UQ$ zB8e)leRVwWz61C*1p}z|5Lkbh>HKSRnOXJZ$ zLrzyoOrxLaN-Q>n;8Dlw%Im|D9BJ9ld((iE%r#zG2%M?|C``0Q!5!9J4KgDObCO&s zYBAQs7ID5>#!4a>T&@=(@ozp^C9a)O9E5L~+(n+|eG|wx2;@U%I6?qVyag1S zG-*@5->8BNP3$bp*hy?Qo6FTr9Ou>61yXX{ZSOAb2;^t=>^rlLFMq3JsSj zl3e1(H&SoVe4A%H8UDF{+fg`LntIH+>t5G0#b5~M(}Am3tjbK92 z=-zBs_Mqc-gl;9Dw&u=qmCR6VQOQ^8iq3b{>d*zAcacCXh%Q;5CJ^Kfj_PZ#3{NMI>W!dPezR(`HjcK=$zV%h zLvP*S2Y{jPg;&NOH+W;4seOlz3vc3TWKX3pO-V#EGu0uG1SQ{lO|jiPvGHHDi2tW2 z6RqpuPDklMN&^6kaGpm}cKF%@2=#T~VeQShA08*s9?5x=5lBvi7o)`Z{rVjc(2?HT0!Ach{wJA8RHS zUsBg5fDkWJ0vBepJNargxFW0C=%|ch&~Dxz+{i8~*=jb~gc9+u4zc=)+`q3fw#Cw` z^j^JBy=Dl5y4N8_&{t`ZFwOwvFdX8w977??XorH3h5|dO-(6>Gp!7LSd}t#9&Ej7e z9*`w#$Oo{Ncl)o;Kvy@k?T!D6NIUXZud$9oGo2LR=ox4)aylXJf`JA$Y3)kQIL(NM zi~xJaJ0pnp5z_^@7t-h`RuaH)g5SU!%ud9vBRi&-5EEcSGIk$mPBK~v2rr9$uxa9o zye7?haFR?)BW+F#i+10hYMs$plswK9c)*9q>0Hx~`jE4CtS`|xVlCuA(&}6 zLE_oF;5G;1@#8?XWC*%k2jmGSRc+)*zdB=C&G^~E{HH^ALVU$$J|!N0e5^XL-7|=l z^H{Vbi10^ND5xo-`7V7Ll)Ayyb02cwoL+LgcV2!D>|B}s)#XdYt#{)ngH$x)YUk;XOH#jt#BAl zm4KI5VG0x0lolpPR77O;h~CUMD5ysTPAuf8=%%zS9H=@h>4cuemN4+heJXMu63wQn z#JyK*uogVliP%Z6{*^CbQA_#1+Pm^-w(>o0d81Uk&@w@zs;NiN7=zkcYC1)VT2ecu zwRDV7Td68xY_W{ALJ1wTnrfR`iwasD#=a%CSX)6<8%stegh)E~oOjN9@4WL~U;Eyf z_m_X~J@?+<{oe2I`~BSS_Mvcy-F}lHnl;6?F7P7%#&v0o^zQe$A-;dP7B9tmNM0Zf zJ^N14_H~8&5u*ldtr~BA%jMUj&EL^AXi?=~4yhf&wa=9eU<)(Yn4H-Xn_WYGb|v9{ z^RFp8(`w!;JTcG*Aqzav;hm7gse0137_~)e%>m#l8{L)V`}8ZF)*?P+o8L8DtiZa1 zo14`~>v@?fnNEZ|tFVnY0Viv=j?u;(%g$%T1d?EE^m)X~uj5B#4Al6+6SRu#)1Ojv z@bQd?Os-+OP&q5Rqy-I3GQ5e2LF zQOxQq>~cSd|J@Pkp3B*xf5O%Z4?+VHG?8T!JzG!dyV79BY0oOP)JU2U&j|ItvVDgd zHj}uk8t^6@IkNl;NHj%X3U4WvhHgh+5r`24bzUjm%5C{UTLBs7>$mxEw$7~FB1K<* z=Nsq^5{_wCfN;s_+*E!MWH71%`>l)sN_nVL4bC-N1)-XJ)Jt9$9FXWfWwkXR3JpQN zj}Wki*rf=)?&OV34iuvy=@{4TSJ#lcNK)ZQ73RzKq5Na?sxf0TGJ=g^;Lo@!(iv~l zVzUC*9;raMQ13i3&+~`qgsCTCnP8+_&Ei!Dss;a+K#U<$u)t7M9e*BRhO}QDX z6;|wU^{I0Nx7PTIV7tmVM#+FR#5%Qe@|wG%%RP(*ZK-4_EFYMMXs4~z1(P&8c>M-l zx7|i9x#SfLW4sh2+k`y))Nox~VC?7}!FNEm&Xsr{6h+JiwJjd(;W>3FZ;L$>w3V=7 z7|y!z2O-n9TiR?rJz(^!8ZLVY4|$ECXpQj3sdh%YSi86GS}FX;1Up=4dTg#A-`#sD zS`oZ^u*xnymsxBw8bWIdY;c&yEDZVyoJK$y8Qcexi!KXOLtOdD7ao{AoEIx?B?(}l z_;U^pj0pzF5*o(KgG%FT@C;!7bl&oCFDtj+zO}NI1Kd{xsU(UV#rZ?`a}GE-pX=Us8+1CxFo@czz2Wzd0P}Mo_a|Kk5(UZJ zid7VxOmc z=%lGU!o^`w$mBeI-p9;X|1d59DT}ST)vP=gkJ@pFr$?dPnUF9a)tOey-~~?EnG^U~ z#p>%hE6R7zYSZh6Yw*c#@!B#Z-~NLSuF)5V?D)S6h;p8T(N|k2;6xR~ygq;jYvRao_SlR6Y%K>YeM&cWdgpD(xyT zT7~8p_=!A(fUfqt)RCtE% zw;b2SjSx+0W&qJue(lq^k53RYa}daG7pytvTfThGlnCQ54`P5Zx?eir?ZSk$B5%2$hlg%ckD<$d4`d4>~8D(*a#TV=GU|2PD94@44F`#V?ya!Vn=! zy^h?dZ