From ea2a0e46547aa26a47d91fded07c376924c54eb5 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 3 Jan 2019 19:13:19 +1100 Subject: [PATCH] Handle IDAT chunks after image end --- Tests/images/hopper_idat_after_image_end.png | Bin 0 -> 60692 bytes Tests/test_file_png.py | 4 ++++ src/PIL/PngImagePlugin.py | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 Tests/images/hopper_idat_after_image_end.png diff --git a/Tests/images/hopper_idat_after_image_end.png b/Tests/images/hopper_idat_after_image_end.png new file mode 100644 index 0000000000000000000000000000000000000000..70b4a64002e854548b0d698cb5e76dc38d21ab1b GIT binary patch literal 60692 zcmV)=K!m@EP)&~Bj5&;P3*yX#kf<==esOCR0WmZibK&m8>J*Pi_IzxY(AI|I(y<)>b-WALl* z`nliytIvM*;ge(CE8p-#KlWp7S?Futn#LCm-&zyVP&-`lC+_C@QOZ%zw zT0nsbwfE96?aC?d!(ldTx3H`-VI4#XgE#;dbix2YU=edIMoHIT;IR;J-~|APv>+lX zA!G(dU=S2Q77`!<5%I);2mpu(mn;#f|5Yyl5Dy|kC`w^yj4`B$5Cu^HfB{9sF^Y%) zA)>Btgd_kYA^;*HBA(eJc#--?>Tdx;W`_zzSi}Rc2!IeXS2l}-*cjtn8OG7{)a?ED zKlsHjd};d+y!1VP@_&!Ju^rdE?CPrzo;Yzn9}Xv@W~fVNfiO&>vBibn2S4=DqfZ{W z^ZTB6`-`r;>YANek%%~uW*Dog>@Uo@;ZmX_)U?`P9c6;RTgD65o^gig#8Jm4@el3=s$cfCvPH5P$_y5C8-bg@{;WGpsM&j2dM1 zd993yfOrvMX77d8z6Sw-keHc>Hg5nU$@&HgGcY?s&)^ZP7t7!oJR%Apf?{^47|;QF z07gVX5%5XUcBOOP2MV};7GPv=&O>Y1)=jr zUW~TPOe_xit7PIvGq1QkHQkz;ZBFjaogM4WF7-!Y)F|^jBu(O=vI1TKP)J4_>zoLI z0zd>H1Q1{WQA&vb00;r%8fw)$MTpG20qz=B8$hqm$oeL&?+pTo_rBggBH~S(hfp67 zB5IbZ{um+xT(~ciN7w)~01yZQkRT%gA|ncdM^u0)B1)-3DiHxxrFD-y{P^7ILpNSE z86|O1m6avyAux%pd_ffn_If>~lvYind{qJg24SPB@`c4-I~1ONd9ks4<=pbr4dyg>&W zTLJ*y`!!q^5n$#u`q;RhfdFJfqKvwlYk6%1k>4jX(u~uF9Oa+P!B>Sq;yeK1+HMDJpEy zN<#0Y)#@44rmq!GU39q)YiZ~ofj zAAkHu|J6?(xbgbG{qUb1KY4cX&=AWV2>z(38x>SQm_e*_1*vov1cLz0zhOCCrr)>;MxX| z2JiqV05xCI0vpS6*2#`1SMg*L5o&^yF5gFE)`T8OfRwx=tA(9X>h+r*-fxU=dzfu7Z zfJPt$1wtYUSkdUJVEk1#lgh9>fb0(Pj=)??ioavjpB?P(-w`Nq{H-9>jWa z3?c}C0ti5BKo-$!w?{$5n%yIN5%JywDR|EI5&$47B8})k2t*?*Bmhw9XrxtOj6&qB z$U2E8(Pe2-DP!WwQqX7!t27;kN+oe~%a-YEG|aM0>m-VmwL=v5idWwCZ-4f!d-v_o zD)`;s`CpdpfrD3huHN#NAKkZa>)hPgkNy2ewr$({;_tibg)e!rgZ#7K{Q3i5`bIwJ zU2||xUby=oJa)^i*MISzd;a00ANZ+vyz#}iUzb<#z~jqb`OYIxKYM;;z0whacoY^T z;sL1!3Lp|F003YV0s)TzLV{3pe`dZ^2Gr+kwsAqN5`YUT6A+OAV=Yw>1OT6_N@@Y!dcJbCoNfA`Kezwr52-}1bh%OU*D-+cTB?s(ym<3}6a;J_6-@W6o| zd&k=r&pcc>|K#C6{M2VZF+R1sH!SXd@Ud6i^)gcMqT42(f7_i8J<Rum`rb(pn`!LtM%%g>~Wqg@6%21MoW1Frh(ENPchwr@WWs!kFRy337wu9ZhTi)>P`=0#lJ@@59mjo@b zMXMQARaF*M(ukeSQK;5>K#+hKYMqE{UU8A`zgY#^q(-j&S(Al`2!enBOU;^4;G#vg zDuk;>Vt)I#{!0>5BOzzgiScea8YpF&jdo~EHXO`Mb)6l0pBDMRRz(zOan_c37@Bso zk!K@qFwlg+>@BlnX4Gp$Z4@YE1cxXhmeF}|tyW9G17xrJf!ja+_kX@)N83OK)yOF3 z{_^6fqpNeL#+r%C3iR~VFMnhEmYu`?D9^HVeqrh8skt-DPd|G6)U#*O<%NM8J@Dwm z#+YomSM>VZr@ND_AP&3&Yb|$@NHIjfTPMmNxbv!?e#`52%`}bV0hNkekq^hm$FnpS zMiH#l*7b#(`TKK)?FE$I_`N176%s*h`l2EtLR5lEP%)4o2@(LU^K&GlBrq@-EKE#< z|MFkH=0z{O`On_}e_r&0TQm|1uoLgS3GiRM{-1R)|hrJ32fDo=;KFi_6s zp35LmNWLfv5kXMQOy~n6hy`GY!~zb<6G0F}qrq^;j;Z&*{|{}k2rvX54(5)3*9fKYy0AyTiO_%x;~$;>s<1uD<%r=R@V*T0!%i;bjR6uF3RHgyn~`Gv(+ zI966pYb_v=(UlZLR8_9Z3xym643G*B1ez=r5~G4VE2Aj-^Y{OWrcn?R4;DWCk&iE* zUs*W6c;EfsK6(DcsIYO|isD99IScChf8bw;4)1^DySh2EbI&vc;1vd@1;vWb)B7I$ z_DgU7zL&iGj(fiJfX!7iXgvJQufP9)+wXh%%V)RmnAv|Vuyd85fhte0-re}&yI=aj zzyCtPsw~l%hGkn5D?n|I5df1gK&}7RHWb(P?S}HR&T}@10|Af)xi-I85S3uit`#}2XU8XXe_j#F=4cPx43T`&34J)dqi z#{jEW-SyHi3_tzJPY(P2$;oz>7mZeX>$V+7o_U5)DWw4FZzb{)5VBOBD+JHXiU5GJ z)L*s#`k5`$K+>B#{k}hbPygKVgWrAV_{noBgw#UNfZSHO?RVRggW>AE_usd)GIQh2 z*L2(A;{2(p?fc8z2Ab!NJdM1(fA8*oZ*eeODa*Xu-rDaioSz^3*`L1uLm&K$J6`_E zSKRdj*WGgK?6y4^K#~xEfBr4|zx>VboFAH{QDFsxq-D#Bgx1Z`HFhlsBD`5?*;t!t zV&ja65UC9$mre3{LoeFQz5sxJ_jlg?mY@7r?M~Ea=pf+I4jz5%fyKqSAT(O*EX%B| z;w0#_qg!si`o%A~`T85K`qMxC!(aS`pI%x#C0ry8Q&uA+J3i6*7eD;EiHWYYRz%o~ z(IGI37mb>P00zi$W7N?bM@XmVADoS zdDUa(Ey1f_|3j9NuYc>IU;6o9{x84yE1&qwKYRS1e*!zmd*^Mj`uZP!_43kOr=5h6 zcCJDcAgLLK!nK21JHM3AY!(KWZV9cgb+JIC6$1*=W@DnhQU_7PRvsa;&TA8nkIlaD z1uwntJ4cTk&Y~a+0@vxrVNm7i!p_}OzyEu`(dleSNA8PX_}YUHJ{ZPPnwLdUHj-9k z_;s(n@iP<~P6fwV(eFzXX1G%~e--8{MOaA3cBe*~cDyz-VBvZoTQimp}KZuYK#j zMx*h{m%LbfxZFz{t!Aqk1;$RzjGsEQwEw`a-TStcZgl6%?`X%ZkAL(dPe1zYs}EfJ z!)M;~iXV7GL(yzIxoZ3P>6Q6VbreO`D_L`}(3+P81qES~3HJZFHuRs`!&)B`5GX`h zv#Kxph zRydDBR(2)p7w>!T`!u!EvI^pOI9z0LlU*~@fgig2c}E_CxYa&&5z$0uQAbHt6>(^6Rgf?M5vrQY0}CQ*TJt~2! z1rkJKU=#WaAPWK@YL@8yeE-PN)6VJp?tSz({@ZUAg&X#A$2>jO{Drsu`@8Rc@%C-g zWjP3vTGpkBtD2?!4n>l7D^6ZO{Mw7r)(KT~?9v z-YSJi0_XuPp;O{2XTR{x?|$SnpKK+Dlq;&d({5+Z|LU**`cM4$-JOp4zz6>FSN_w# z-?wMyqmMr1oV)SHn_HcUU-*Upq~eK3?tlD~pZMI7qbDDIQP!vO?S&m(#(G4tKT?s^n?hy5+c)0N9FwwJhEfgG?CuEecIZbMdfMnvX{Q< zp06I_)b$3#MiiF$Vk6-z_wH^cF;~%5`}Z!*Fa6`E|H)a1JE5~xXb8a}IAn`r9hc5$ zQ3%Z>1aOF`0+SboWO!~Ke&aX)-@^AK&#Wr{|UiSyqbC-RUPDd*J35 zY&9yX&>?z2A_5{+M+J}o_<|f>*Fozo!HWRO@Ei-d#&<-x5MJ1{VE~}DPOQV#)%?_% z`LBQNyNV)a&We%vDvrZXedeFO^_{O?b>+Tyz3V^Sdh-o}-09-&FP?tc%O3mqr#|0G zl8Kr2O*d`5>G~`0e)(M}JU@4q2tM(NPoF+DConl2r0lHGAimOpN2#hR_dXMwuV#Zr z!zjSYRfR3XFlaWrrSoxXYHp!-_WZHK#};<)+*-QqU;mr`Ohg_)k+D|NtW4rgkWp!9NDToa_mH!4qJ^#X=yd%B#B;p`(0rezWOz9{LSC|%};;kE1&qsuYCVqcVBt% z;7303*UQ6xo-G%p594Gs$j}z2jvcw`U_a<2Btj^4un&=tYP)HTr$3hh)`BV*f%_tv zy!p?~6mUTXgmFgztk>WC=7YzMp8?QbyfTqzSRD+FX)dn}4<9}2eVk_aTfgn}vl(RBi>C?h$tJVDI=f1jo_wF~n=}o`$o_f-W^6qGg-k*LuSa9VMc#KU2Qx^@49hd=wducw3T zum1Xzw?6O1+qUm`=IEjM^ZoO4k3D$bH~ycuyzMP-ev_sojN322^RAD4?DNi3TI9}E zai|Ccq^hj9E;Hf*T~QWs9F}F7_4CGf(^pb@o|xV;7>vR&_Gssq`^{!!m{uZwYGRv+ zuP4$^FLdi!WJuzskFvfdhF7ME8iCdZo1NyOyCfA=?|On@Q^lJDI6 zFex?xrRgv*dSy91aq3LFGyeEvPonC){tZ9!HeIS5@U?lr$%D zn-g;sm_i7(_TY&$fk7YvzZu*B0BgoUeMlEMN;lZdMRL2oWIgi%Hnxh&vI>I8dt^^} zR%snXQB+h_RTa)vjaEC$tqNLCA36Q`FMUH)SPG3wms=T(iptp_ioGLJt*zVktn|zO z_4|MJj-UR8`yP7iHLrbbqti}{)HxSKMr-Y)vbIEIG769#`^q~20#u{}2DDz{X2XM5 zkscN!hkk5qe13Ha6rl-#uyQ^t@}-sK!d7`zj`FN5OV2jX^M1cy6h*(^UszZQg1}iu zP+{B{4Ra)Aomdakv(uIJNI_9rQl_+3yWLKrxXe@WP7!EAsspY7h)NikpTjpU%R@HK z)W+8)U*4MI_ab-R<^=#66=p?BN^4^rizafuG64pGcFtASHk&Ok^v8elUR1#-&!Q-H z0-`j47B*#-6T}EIKDp;x-+t;_-+gSDXTS5m{%~SumdQJ|gLFu!EnDk7C?dkbTQb@~ z6@+nVy@2+PJ%czV0?UOC5EIO}KnHQVk@>=cb)b|{%pfFMD=Xd;Fp6HwTp$rK#sEN7 zIT2tKU%4QNyf`bM!)TCZ3?u?NNUUeA0&7d9gD?z76)O;hsE}B|I*wvv8KNk%uGq-x zS+k~OlXGnozga`=HCQtMC_*AaSaZ*@FtY~$Btk%T^#+g!Fl($$sNOd3t+l1rL4X0G z8jZ5Dg1m6rL=`ilA_PGaG=Kphi_l7+Kl-r`l|G6aQGc}3%T6Ihtw>i@rM0fZ7qw^u z@d8j;AIE`!;;MAcYaIkyDI%pcqh)4UGbEMPx)~;ASt1G%h!E5sd+;J+t))89hoWj@ zNTCQg?=_MT3TwySIY+3KGL>bvjxaz4!t8vh0v(y4C<nrW zffX>QBTb&gdhflr-WEksvk_28Yf*Dp_XS-(7pMmK25+e^*oX;loLoz7;k8d~+8YJ{ z4d?}U?P5UWwSZ2bHH(yG83sn{z&Wo>zzB$XBQ=8o{TfliQ%^nH?oMR+PzQ0SLli0U z;drdTa~uT#pa`rNMyT^#>K8VoK$we4yib&Bgds>_y|~h;$|*%P1QfgVC?FxCV_)MM z0JXqe2A$ zz$JSx-mzFfhp3ZgLxA$qC2_mgUnH!QQp7?m$b!Noj4VWJ`(G4AD@u$e_Kr}L0;x(a ziWWjU!lc~@O%Mb@6oy)B1z1&8Q50T~ne#knX40BP;gqyUMP5aD`kYf}mYqQVQg zavKBzHF8`+B5TLIP9huUYg*9&49Fl_xQ^Q+A`zggtkNb>y3S$p-Uq0eSz#S+RtO+a z0oppDjKP*w-e`6Qg9ULMHxmNyN=G1NmXWY$3&=06P^=V!QtJZO)0$oN9JkLU z%%nbfVV5pPF`MZ|HWVjKClzghk+Yr%(IbE+K}D9JU?4#8 zoK;n&R7a~g>4La48|BmOBniT*$c#eq9>4}joV9_8(sV^@j-qB+^n)nL(p+mID;hispl1|fYsZ_-IFiK3!GpVA^1_?< z@7&W=I)KU*nJtTED`~eoq0yuO5gdCHsW=Wz6m~{!@7Wl`)@dYWPr$|~6(}Tdt}1Oc z7z`p6FiTl@k2Ywj{rjfJW+rB@xbo}YedMu69?go}qs{;YSRs+tDlj7GnE@FA5gnjG zk~&Iui92)65iQ~o>kt9~z`7w!B7Q?eZ*Y7-K)?-wjEMTSoA(@f=G?F{k%`i>Qko!8 z-irc<3IiPi23bBxT5ZeLfrN_LGcXb=ga~+qXcb!TsxWE0%9qy0jZU7fdSD98sIpO` zm1P!HK~QO>0v(ZqE4FXHZr>j1uS|^vH$Csl*{z*U3nNXCb1RHB86wS2JRy-GrK3=* zpixx?Skxv73?@kvJdcL`?${Url(rfcWp`>qlT<}M-kx1uT#S)yF=)i$C?CbKM0vS? zdOW`Qz_sK0@Tt?^dGv&$01f3;6|@tfP!O&2u?~S5v|`TyRLA830BMbZtTFU@Q%FDr z@IpStx@_3U^Q<}kCg!6QuIEzd|M*Mqc-z~5E)GJ*k>hgDj=kp>S4-OqNO@NjskAzY zu#|b>2}r4mO9CR)i~yn#jDQ0GB2A>VVdq#xP%8o{y)C^PYql8y0OBZ02br^W|IR(P zUU#q|R{P+Jt>as|aXX{{DqogSpb=0hZB!7L*qD&CLd3kP08p7Y2m)WZsw~T_^4`a- zcEtkDD-1(J{gq+vJ&-7*@rf;~XU~Y^DlZU#OKVUxxS6J&zGjz#vhd;kPoJv5gR8XG z%*==YgpA%IA`|ILwVDliAR1oMyA!_cU%%zbYxn=cFaFyq8@9V+VGxF>g^|PQo2Ios63f4_P0VSY80ube$ zAShD8Tq;FIdnv8bP*fQU1VO7TM{$&Fot?OH&n{OEhUH-QWP5sc0#KZDkwF0pqF5=V zR7jx8ibuuBImaN4MvPi1L=o^_oCPJq3=1nOkqLC=t5GH*tNqob;b2tdVH}D0u||tf ziq*n|S`m5g|cRbmg0ciB=;H zj4wuPRJ);Owv4NQ2BV=MYZnv1sfBs#oh@CFJ6|~>og_(=B-^%ci5sy(3v$!(X?sTX%Mnt=I?O0e^Ov^$%f&w%u8x-1@?K`(! zwVI9|$yV|_4wORBpqvAT9+B7shzIo?wf!P$*i07n#!#)MZ(19nn9KgwWma{^#((ek z-rXPBC!cuWzI(q>=A$s6B;zVSLybVip-OuTfg0BsIuYkw7(}G3=b|&#N&6$eG7#%DK!0WV?Bcu_Q?MKKhh=W3 zre|9%0o9n?GJEXIX(!xlwOd3_9X;WqX%j@Vle2!sHsT=A3NWzN3!w=j5p=GqdHrT^ zU#ewpxS&O(&Q;#*eSP|c$d0B}8j3lVjBfTAR9HnWOtmWGH-c4c+2w760f6#x>EQbYt- z?A>jQ_BM9Da?WwH8EQ@7guOzx=+iPCt@aoDtD~w?i2XD>cJgc(oT!}7s!GR6fe^M@ zp!N7zHxLV9OiFZ=h?Cd^ZMV?1aS z5>}%@TY^d?1z5Ct*{i}503?C#hRs&9aq{$e=W%ut;xGaRtiZ6=p(0mUDF%a;K{^~1 zqs-9B<)u?+=4Ym7XJ@xgk57z>(xNQq*|FnC>|pT9SG;azapmEM?w{Va!xW7;9@7}K zlW=^jMaY$}Sd;~JF89_MQu;!15^OGsA)-xA|BbMWtXl&$&};sqE*NoY?fhC|1b{Xn zM~x_mTg$!tUGMrYZ+rVYoUKNK#i_||nfJS`;N8FR%L@y|k!K$J(1$)$W>!o9gd_l1 zS8`h597MXE$=R9qU|5!A-+3WYDC{e5OV^B=fmS}vrzV;^X2-{xT619(4Tkxt`BTTw zt}OKySI(YmJ6K*=NeLiOVHg=w&ROuTn}p-d#@?Mii1+?ktqZTX*X{F8V8*6)7gqaU9dp8=O7z?Muq>8UNh@C(26?|aGBVq({Se%EgWqlP6bJR)}EB>|_9Z|GnSH zd&}Sc$`{;lzQ4TVz<~p#Xt2C$T{-Bj&d<*ud-hDy9{)E#{WFh0bL`y8@O^*&SLq-R zm7eX4ce|ZyuD^QW)XA@W@*m#*rXP9o;Uj~7apMgK7gkoYDr@Q1Ro7g(GRmjg!NTI{ zu(7Wc2h35Rt*~>I21Ru}(}qa}2#Dg>EB!V~V(@~HLSe|o%e)iPK-TRh) z0}yz)|l(E0iK`|rQE$QwkVcc6?0a3~xG3Ve3^ zi*KEpnmlmzp7*}@1Eb+WQE?JQo*l3VkpgX9uGn3*`-+{@;Y>FvN2_VS*I!vJavlwH z%S(fFuxqya*0;VT26g{^4;_By=;6bMN9lmsI-5W5#_R8V=?l}|f-6UjQ2DZ$KYxyt z@*s2PU!+xXK@J^0Cw zd}M2TvK#1grw%VJFFCEJ6P%gp-gwo4XvfwQY4GsbUeer(;0tR*r2`XHWqGM34C{jT zB94ENY}l-%UPJ*Kl0#=1ojTn=dSnr(^VFxl_LZ;R>-`Eq`VXJ{)LY;DquuU=XWp_k zdez-`ef;D1Y9@pr(4li&*%H{zpFeZe{_)<*`OkgsQ%^kpFd+wutSyyNK@drWicG6B zuDlPuyYs&U||19@d>vAW~MFU|&i4&q0jIsW94V_BA2TPlU( z@#zz%`~CjS2lhib>Uq0w@2>u0y3$)QQRrMDE*-3{T(##wS-`N@JM_@w*KXT+ZEzh~owIem%Zcgu+J-@WFvXt$Z+!7}7Rr|KhG|iDGzTN6AZ@K!##|R6M zG|i0GVIwIkyD7;29M(~vMqGz`eSX~#yND-kYzg8<(0Hx(RL?KCPk;Iw!&Dm+Cdp); z57RtVlzr?UKKa_$zPj0LojboUy=BLbzVS_;`{KiMOUou4Q$dJIiG?T%+U<6dB!fZk zi(mTc-1*hGF>OrT8xBxWpcDZ0hNJP;RH!H+x^C|k>Czc*%>Lb1cn*Tr_?h$lq!l8! z%Hi@eN0xSN-+A=V6W;Pfw|Vm9Qjy8d9i6?qc22b$58r>^bi3Jz0>5p`YC76?_5Ll} zwmGTh&mA9ccM{cbglEh7SKo2RVwz7(j32l1?NjlSGV>>3N#-il< z{Yy(L{oYEkc&eYSoPPSr)khz{qq#NFS7g>HFQ8D18Ww4k#C$ou<|0OaK@wb|^>41T z+>jz0OF!}CLa$f0T3Z*EhNxB2Y$=xr+ukq}FdzBY7vB5c_r2)$mw*3jf9REWz2dL_ z`tO010FWYE`ZO&OjCVLWvGtCZz49+V@X@?*q^r1*Snn!pBN9fm)+*th(=+AD;Lrn) zqIHwg(^v1?%PQD9H8nXqxx9F0Y3^({#MRTs_jTgR`7qM^4(^-Xx&?q0_}w$@8+W{{ z(~K0dGUmy{PaM4EIvj5slnGZn{nXPhzUitet!}%ixvC42Yp9;9hm71e0u^E5GP zVyqJcYG^Yz>UWa3JJw2j%V3meJJo5t?$vkx-N!!Pn>$mC%~;cEwOU!_%gRMbLr5;G zS8m>b&2pI5asI*u8&p#J;?|MB{?UgH&-MBv<|t{kfRG_8ohN~2bDXI8r7zyQvPxh4 z{6qivxd$d^$1osa$;&L%CX5nrvGZ`|+~W4_+i$q>d9PlqzVM}QvnT>o#(3|ou!(}A zD$A_w#ErRUPfBLDZ{220P-;la^!jVBiUQ>Z+}<*N?(k`4nbT}64tH$ZcFlDMX0~og z^HG0!xe*yD@@+Fyjp@nNb7#G9Svj9)s?mtYCa*bob5_|-r@h)AVjwpixHhxpzP;O; zjkp?Sy`{y4b7!}1+k!@~q&+dpA{M!22Ict5EA~Z6yu3WzIyIrhkyaJ3A!LPx_&9F3 zs{H3S;NmD4JcrS5oZkrG;QFf1>!syY9R#GstFp9}=Uf0#X=UQ?-uw91zy4Gs*(%%| z43sb01c#(`*H@hS{-0N%sg zsWYZ)%3(g%><-gGS>|Dgkgtw)#%Ee&8cmuUD+h&YH>PH%W_NDCV$V(>Y&9kmt$Is~ z>1Y%OF~rTqh1D&y+q>gaDs1P2EDocnHTLvlPuzCPO}nn$E2mB#IeBRJ?wz5w*~*|C zrY=hbTx!c8F&sugkgyZcrrnic%1PYWvU6KuPb#GwjTVNH2R*PAnt%y%b{gx5|8sT$ zzenT?0C25p{(>af5XBd5*qRVlQBYQuHabs-aU;>Z&XIOTEGB;_Q}*vdrh_=SD@j+V7>q(bUA) z^I!1_$kP7Flc&y|yW*;A!mt6LD?8?&dV@DPj7graT zT46jK4z&rZ-qNrM2@HVm0eRn*i2A^BcZA0MM0BNeAp9G7T+MIgdifI?MRz(KAF%;8ZkJu3~_I zVg)L2kZ~yiXVzD!f}mAdHjG7DG8v7b6%0&-V#!MgtWZ)5bE`{ZQxnV0aC$t+vOzKI zMPynOaq2tCc;AnLMw8QFu~JoRS?P02OBBXYcjD?BZ`rbQD~NM8ABlB_rnYZoAu~>$t`v5EmGY?LM~2M zS*L@GbtDZ61&~CoUBw>QF*ADG$v-Z zcc->S?JIh|GWj z%)a!2ri(4z8q?QXYivMybN_-%31#iz5;KkJ<_L`7ff+1=WpwLt$P4AKb?qw<3Ic=F znHwme1+}0S6$hbMM=T(oK&oOy;7LKAXO{g=G@Zx^Ggezv2J7M4wWRJ35z!MipWL!VMM2n1WL=e3 zNKo0WGqX=V_IPh;8Ad5omUMs&RhAdSw94{yILbz;wKgxS#pTsjXADSReeE^7_UvxA zTT3fFOGzdscUXB8txXsOCe+$&!0S@~^F&wlzJZ@KB_@yRjN z%6cm#t)!JSB5`iT!_v}Hmghn`3?r>gkc0)7G`kStIY~#p)c(0@+8J2l>YOE6`<1-V3{xXCbt#!66 zgxjhyGd5v+*}{p_SjhC2ol2SG$B!@0pFe%(gsY0%@3_5*VZ;ayAdUhj;5-zLORMAN z9k<`{z<0lU?C>+Eo>eRT9xB|iYy0lKyTMsf2%fVvXB`+FSjX0}W8X{r)|F%J&d{2X zN}P&G8D3}Z>JqaSFV2Lx;FDO}q;<0a*Nckrf^D#I6WBPTi4@fU24Hr~mc_2g3aLGL z$gr083&J8&=T0agr@G{P8#b@PTWz;>z`kBnmN55C_A4 zzdbhI&x*npXmqpNuAH!S9-MQbQfkZ0?AddRU;D~ey@O`64M52L?8y^%-+kBinQdvF zxyq_EMHPyxYT|d!QBk?dUVY`&4?pz4^#`wSwHl?Zl2!v1EUzq{AORmW>{Z@%dqB?xL9Gm?3Ej5GzzV4 z5sMHDct%DbAp|5KCAAM*>SS0Halne1Yl;9O0Q3Y(qer%E0|Vl!hJo*U$@A}g=?fdx z6TWaRA8C@(Rtw8ZZJUj^r&VdQA|*}A7(`^}!q_N<=av>`Cug_s+ufd;QWUlut)i&T zoI06R>D1QQlV{JQW!{~f($+RXoR_>v%e;t`nLm3@Gl2EW3(H5IK78BrZkgzGgx(y2z^0D~0BGc z167r4u-6~F>UDR&vKsVrKZ+G-040oymintfpn9Xx;S$BsRFDw;ho z>OrPZG%AH*pf!P@a?V`}`se8No7mBsO6uXV>w8jwt@3ueTb1mpa(t>?EU$tG9Z+PV z{%YFpbb}zQD$nAps*1xvA5EHf~cjKjlTvEi6RMRRcNs=^L ziVTZmCms+1LBM+t;89o;p;&KojhdutC9R+R`G32A?~cLT$(f0c@s)T7EG&+c26n*Q zY_zMT#ZgwyPEICC(rUK@isJ3@Xf*PiX>9_fLldO^K}f;M+}zVo9o{iLyKmPXSCr1V zM%+mAY`oFBVgEI|rnfBJyb^}t^z?L|=Ydg`_~q55t=qS~DY2d;IkL@%HTYr6OFe#A~I5>t?E0doybnkX(S*W*d0(dM;;S z0J+ff;S;6e41))!MaV z=QUScdHq$_hNR;lB!PCj-5%?jFxatc``#<}E-bFD_IgE8BuQkH9t;L)nwDj$!=RCL zM#Ca*cUDUK%wjg+NDxVw0I4o800ozD?TY|^&2z^#(x&oNueaQ2HrZPd4-R@q;%bB9ry8Plx#)_o6l+DRvA^hf>KZDU1$ z5VhlHo;-D8?$pkGyPY8)C<=7a?iAKFn-i|Ak|c^d-LWhMpx9^znO|Pggkh(})&)Uu z`|Y;_$Y?n1j(ZCoZE0TC34(AE2An+czM_7Hjt-ZhihRi)N?`?i_e zZn?4D(xiMNG1g^BAcRaSZ{2&}@e?Qez2O(X{MEny$Ui)K_{eg9Ffl#l95)&b5h=?&ilY7d z_h;ECiXui}W@~K_1SlZRgCL*+ksu5W()9SmSf{JkdS+k{hd11CgE4B)uH91;lVjtZ zR-@VP_eJE9hadm!XTNa##F_IeeMnj^9v@*t1c@10*o$Xy3{Jp{x(LeO3)452TyAYP zgE#Xr0MNbOToTDc_kY8?yqP4cgMmW4{Y zL%5;d*b8|bd+LwFwc~KV$QD_GJ6v2TaR#-W!DMZ8|Y^>U)QI;Qi<}iu= z)^{HqmM|>KtgO;BH$Y>pcFr>09glbFrVfcz-XEr=J^k#dtSBQB`?6?8;qL7_k}&8k zFZV~o-e?fEo1j(cZ4d&CcI;@k+vD9a(ZC=IX`webzp%J;zUUR@OMd8O zM^dvelmf$ulwxrJj0AuP1fT^8xb9+eX_JD>tCgGgN@Tt3^JNz@AnI1sO1VGY9h*Bd z8jgB#6l7K2ZYRT0?`vQEDk(G89_x=rQQWHXveE3OMHvKyh((^a0%=464F=~A9qQbm zeAY8z*CGU3TU(4qgLb1KtEj;!@z$n6s5D_C3Q4HfA8Hd_b@jDZR_1j2oyVU!_M%(& z6Oj__t=qnJM}J|pX<}<_BM#=z%^f;?^xXORIBF0m0wDI!bjFe>Se!rag;`T2Zdi=M zIQGI@w{D#n8=sw>z4?~wlO&#+9Y4FUurwS<5H&gzS?OlSTf6q}KQXs@rVMrSDsfs! z11LgO#}frn2!KFpFU;jAU^62BGZrsg?&BLv@0vak^2%K=|Nf^By*~(4!Fk06i~Hs` zzaB+Vma$`OHm7=nAsXeSiU|S%@4eE2b$LKIrS-z0#}4e@Ui25j$%YU{WU$151TDwD zK|T*$5lT^|e&Os1U6rBG%F5uxV)~`W=O9dmx?{?fg{9T;P<0z^QKqoG_nK=SdGMh; z%MKrTc4cv8I83+BZb{;{F=4CGs;X*radoAibtkv%+Ou=}?p=jVv%KGEM3(&^PX}qL zA}HN(`{ejATUHHXZj=x$Ei5I?Noa&acAfUjbTBzLHweN;SsA8KiP0b^=m|WE7pK)) zRpCamTOG|+O7mJR=~^jdy^z#}{0Uxn9BnE~!n!wCZ6zS;&wTb9-SO$Y`w#5Ba{s*# zJ`lB=tE1(uTel2GS+9384#z!XncFZ79XkZC0fa?JP%GsXF_X=i-Te=S{o|ro`I+;Raa;z0KwF%Qv$t-16RAm+#3QaJ( zZFYHK@#+Kny>&?#69!rb?bcYc*{(|Oy(CGbMEaw?j>A^a^i`5(y&^B;IP6SK%+Js5 z*t5;r+_UZVGt-{!53AK|=oRW#;)59D>AZ|dD`&k|k$@p)0uR6>;E`#~yKosX;Jx3h z@56>Ae7Wes2G?3wjW&5hKlR10ed(UB{J`tpaKr80RaaZ>76srCELe-X1S!Sc9X_l; zaSJZRy-0DVxLa{|_u?+ap%9!>iWGM!e)22MRmR9&ZZa~Go$Pn5IUk3afbG8xi)sP3 zwhw7pju)`h$T=D~-l%~!M0STMS^?2!#(wyqBU?$NKL5*p9F=&&25EyQHalhHtZ=h7 z-A!e)wQN2LL75hx-IG$`sMAWuti}TmzCZ7|QMKrohvS|MPW!za+45M5Qc=w?6Fy#U z&cpa@=8##yvVX_Uk1w6(aRvOkXsTMZEUul)ia+~lOj3Es%<(p&Z~*qZda=cA^%3}S z4-jolDU547m`CVQaDIp)m*RFO{S9tJ1f!9Gk-^NUCj)pZ#cQa_vC?KJO>o6`|i1goVZO3Bbh;j@* z0}=wtFaxIgevgsZoddVJ@#)NjG&0+2*HnOdFD?}yOGfq_wRSGEl{hS~%Q`*Nw&qZR z50F+HI*yT2-}-^z6-)k)$wezX-9L5JVur%>B17Y&^Pc?Ou^*v3NLMpXk<=Jb$^ovoN%v z9u9PfV0+b^iR|s!!<1!&EsRQglCT zRK!j3(b2F%DLy$j`lAnu=1w-EvpnTkG>v9xc{9VX^ksHbIu>7H%ck><{k42o^*{&0 zwW7O*CDgu9@^m0yO|yixNw~Z zw%nU$h>-i|gYyO(*HmR5YaFaJKa)_!aAhFQD2vPw`xYn)!tmOn7kzijobOzVPH3%@ zoD3)WT>Ha<;Y>so9)7h+ERaM125hCDNpHI_d^=tE@;R6Md1w;Yz={^Fj$xO4j z3bydUp}dOsr@VzmYj5RKna|}8Bx?0|@&2kCnp;!azL7q~L_9-R46f}WGLwGW5`qQN zO$IMAe*Z^q&=c4$O}5e3#Ql-KKK0Si>k!ROcOQVaI%n3c{vuK-G>TjhdHKi-FIDqzb&EK<>;VREUNBA``ei)vQJv~{SdV=4nC)1lcI3VN`}*oYpMEcUP54>w;5 zDWLZm>QHFTH4oZgT79O{m<19fXh*o)37`NZle`Q2N=+VI`%xow?Ig*vt^S)g`c&%h zWY=V8eKk+or;|#L^elmLQct$V4iE@8=MN8<$3{K9$nIN*#@p|)qDSVCTi z4Hk^!6@A%wtbOiJe@y(6D;u)NK(0JJ$&zbCfj4epNG~JCdt* zFI+LA+Xz>7(lYK{t;jxf)i)9&ds|r8_;zJAOO4F?7^f)T5I-&-#4vI_FXDd)r&q-X zD<;N&9c;d=?}Dw-%kAdFGTWOoO^L2dm-gFq88!8$f?Sdl$rm(w$#?D0O8os5yoV0Y zFi7*jRE`kaM$8oHw9vLwC1BZl=h~%iMn9j7{PWXFh5ybTOS6&Z?}aXNL`z0Z_ZB~t zMqRK~yD`y;M|ib=+cv%!-?^yS;1J9E`DwY~&k3D~%Y%}g{dS)Ndk*u(nfPA9V+S{YhsJz4p zY!XZ`r?jxq`lPFsdh<1Phwmh=4N&iF%3~=}E;OSS-=+ zR;g`KdaJ)22~@;zN$hj}TtHPyn`jCVC?aFE8pD^#2xbQPInCzj8whguiV&BUDc5=k z)gbc!f@Wk2_`3Zbt1u6EZ0PmG+e1D9u8E6Fh zfv0#Pp(Ch|m)SHLZ?x2_JoM#{eB>V{b4FxHf`UGQ7Qv9(x2>lq^)L2MzP0;N=S6qq z+YJpN>|Q@~#GeAnibi&Zjx&Dl$5V=4TyME`QpC9H4K93CRyyKfU=k*_=r%I8aZt)0 zG9pBQ>fe@Z0}T=h?irY23yV75gO1EyC$0M`N*}f2M5Rv0&1b~?EbrNS&T6SPTJE6D z9|>x03UB|>cX;aukE_053SB7fDA zVH4F{he@ofc?&N=Vgl%6@tiFWsRCc0xAZ8G>jM;&pL% z1gGY%jPU$3w<~O&P@F*7|v zL6TuRFbIu2*_;a7zfQEg-+P7LC5wOW^H4(uFi->>cz5GG=DkFW+_l_TL7F@T4V|#! ziPLGPsHUNp|I~*V@!pw*Kte{B5i@okOnrdz^RPk?i-Wk7*bPu<`Dw%YFLx_6rPjq) zjXtSD#rHnzEfuSvqc$;Ze_TzciQDPZdXw5yQe%>TK>mN5?N)Y~>6BVV3fe9+dTd=& zHCNx#N|yD+EhmMtZXWaw7G4H2ThxPlHZ_Sq@7MKxTRUt+#Z8# znq7iVukv1+tW>DH7vFZjD{x3%4En$m1|E+@M5PQY$^Gk0BH2aqJzdri`s$uxP#et% z_yB;e)-Q$FCxrHq6noGvi+8%~q|B~o&>7kmgoEXoQS-49@^ww$8sx(c+MUajnWn6^ zzmmO4Pfxq-s+W4B--<56i>~_aut!TVo17}_?DdMh3`k3mT7nkBF!R-=idU@1TyqDi zBO#?gYP#$wec;T&Cr0spR#HQ+w^68m*Y+^y&Byha^2$uLS>^2?9$cG_D61Sk`v#pG zn_Qy1_P-N{zCAB({A*G1RYQ%fu6Mz2*qOGPq7%8jhHXS`wpYFF+45rd4O8x5vZY}l zq?ayAkwlz!1QIRwP$IzA=6P3$qQE87>qyJ;;w%4(`$|KpgJSjQu@XqQqJm%QV`vQT z(ZhyUEahIu-gX_Ht{HK`vZJ}Z-j#TXKOD4nW#4~I7z)%G0$D4bD7fj_T|oZ&2`Xi& zWg}o-DrlPPzN4kgYwOO<5OOnn8M?n_@9`4|&ktO-(}=vp%;j1{vHuIULEdO+nqW4s z;R}Y=Vls>8@RT$%ffVelq#R;wKYE}}Ppx&;YiX!yJUW_;#^l(dV1+0$BRb?SqPKY1 z(cx6!*L9CYoRF~y02-KKP(VIx1%+OGVAz=4|fe}D( z&CuF7f+V)Bc{7po^y#MHy@r$j&yPCB$j_7aZf7rs-DPM{5(6Ftwm7h=$D^Zu2r1k7vm;im6 zcQ)op-mS}-ZK*sQjaHmAD6Uz8#vY{oc1HJ6Rdrp3Kcmvqb$pB8^qjYbKQP}PBomXq ziP0#%R3OfF-ws2 zj@sig)7EpDdQ{tc|L)7WVD~$gj4*0Uso4>3UHwm5l6noO(fKJr&6{-;ScwgWG@#n` z$5HRuudZB^un1=`6Gchb^`tIYG7wFnva~ix zCTEe|Qgqn6^~8ifZbyc8(ylPNB~Z7S_Ny#AOSeZkz2lwu|%di^t$wunaoLXvA@=*@xaS)eHRf22} z&v$-@=lQ{A!K}iLelO8=-M9I5<7R(DigChCAuiaVsaKftp>ge(Gy_oujz{f$h3d9$ zzamtjX!}Q{h_L)jm|kD%G?y2};Sl!ye4xW$z=uou17*yUkvOtC_VA+jJ-0QXh_sn0 zj0D%i>`CHhl?e4bF*Oe!Cd{K@QbaA<-}R=geo`cL9&XUvdSzop;kB1>U5iMiWbzNJ-(8R$j+3Zi7E5q-3B=;c6v%E~uG+ ziZA(Q<)ziC+&j{LId9QZ@qEbWavOakPQi3NAVsJC$kd>XmI`X9V^S>s!!S3lS?eq# zTkPX{YEI?ZB`o;d2uv#0-fU?CBs6m& zfUqO>n&&F_#M~R{o8~uf8TtqiirNm!`NagOqx6!K`Qk=yk9!0aVDmd~p0VyTE;oPXlJ-b@T;K>vEc!0AvXfcal~x*BUc4?EmYn>nO@VXra|7t&maarVx?iIkDwHJTj?TEQ%MVmhYbPg#IS9C~#;gwgMTU=C1JX`N7Zb zdF7D%-~2B_PEYG?(>2wn-)z3m6`okt6h}&Iiw1hOepqkr;UWczQX|P0&8d|u9?3J$ znU0LP9F?Z8t5rl$k5?Wl8b5r-m#NL2(^om}N*D+MFwkuJNZZAzg>E*?(s z!1S9qvHPtHt6V8OWhIA=M)Q4w$J*SC4XAZ1C&zSWJ{t|d$ z&un#vO2>sYLuJDww6ww`6G{iQnei`L#}WFh&CW6)N4x|zln<<-YPeRl=&P~o7t1|W zwe2VOzj|Je>iiErCTr+FOkl9FC(9oTJt9mle|M=z1JLq(I2ev5fy47)H)ppEeKTO=Wib;BnIRKt4$FJVadcYz9 z(`2SJwDL$}%Cmrnf{|U3^S8graBf{_xW3O5z2853{P|LDoZtbXlnfmT!kq&$6f5w3 zl3s3d1sF-%a$_RZ0~-|3KtWc>^5rX1*fOb2Q7KnOcF6?8925z2A%(Uc9Zuf+!U4Ce z#^QW!&byPI?+b_SVwhA9SeJ*zwB4=ZpR{3~p%&Pu*HSIvRO%e%`mKr#dEB4w* z^)e^A^s6*08FCut2T4&8dqJwmzf4;q?*ZvP8XTHVtVZvoYAG<51dVY48_{WT)Bv9j zZ3W+NGHO!eNKyB26?gZUoDO}Nru5knHg<5MH+CDnGj=_vN4cJ+&Fn*BV;=xFY%ZRJ zVe@**?(kAi9v`x;>Df%xUMB1jSSJ%Y`uZOKyJ&xXs{InLj!~ZG6a5D-xraqE0vq|e zqja6EXcgsMki^z^LOTG1!55D37EDA$DWp)kR%c*25RYjJEIYS7;7d$eZeXMx>mcm^ zD0+6^+j~*PO+lFG;luJpEJCX0#+t`=B=YWMXQgR`xOE{WDYf5u-*YKh(ED=XWxw}0 zRs5gqq0)XFY0cLotk;X5d9Xx$V{S}v%U+)?twBUNa?lu{Am5A*A6FWi&P402LOHib zA_7{UjjHrkHc@mCUl8>KWu;_~nfTR3Z}&b%Uchiw&+F<@9lQO(I1}bTHjhX^T zvO%hDw(xEU5Ho<_dMwb&=4_f)ceqEXa}Q%>D~^H$;yk-d-1S!|<0;Pe71Y?ULicW>2aqRg?m zb_fJ6QuoIjXls~I<6OSMI!Sb>3?LL>WN5S;Q`I=ye;@mRWUg$;foP(^`mUBs$}IE% zd?_9vf&_rLo`LWZ=)Q@KRuJfkLWrGri+bn3-?_r@k+i0(UVx9_xc3&z$!`>IbS5g& zs`Ui3P{4+F&3t1(oACPv2{W@3PEmu)#;K*yvDfoiz;o}>wA*ryg*t3}ZQ=EBeNdL` ztpHM^4UyACs-%1$M<*RhC%-+!*;KtR!GQ}v`=h6G5<9=%0jc#gDT|DiGC6WUsO4e! zAbkRAR+;GEPW&4mYE$YkhE2j1y0Vg^lM&p=ws3~g>vuwD5?Vv=@r+vV3G^@SP zSkJ?vlgB7Mp|*~$>3qzGATCW?1_IAm2?JJw*nd=tjsNJD z?C9g`ZE5LU1p-zg@^3C&{Tr$%`SN=4Xmi(s?Jhw!iv1No^kVQmgdAplaYL;2j2Wc%=ZSM(k=`NR1=|?0Z=Z0n4nN}5pY8)C7KwXnAEP3OOp!!|H^p3EL>LkEI=dvWOJZ0z%ET^gOa=IRIrw;Uh_sw$ z<1uYZ&~E{BED8W*>l)unDRe&cMZ&xUPyz?-zsy5Biqg}QDi9#C-z!l9Hr!G2{nh<8 zSH$1!EcNm0GmE3NkbECO+Y7ALMmsGoN3_FfDea&l4q{jWj@gC|EjP3FHy28+w=d4U zdd}p{wTc>Wy^91a2*TNVArIM9}>;t=WSm zPd4ti_v3k`5RPV}QQ`rB=hT;?w<5UK6z_k0?j2PqWWWSPH_vQ&#YTFW)pd=wkdSD; zF66|>%+hiO1Nn4GszI(p1{?%RqL##ZoKSVG2G(JHX%02*mAcI<-Xb0@rWy?TIqLj} zm%NvZ>4nMlC#e7d=i>p{c}g-w<_%e9P%u>YEI#^<|m(*``y*|<-7r0n`~Kg1|I*GFRj;pgvl zJG{p2ZNU?cD9lGme84Sz!gH; z!AGSU6mHi*7A0vQ1I@G^wX`%Il8qRbT0&`s?8YJAz7I2fuE6EBd0od*_)+D%udz~M zC=$LqKVhX*k?&zOg8_B8pD9I5h`)AzITL%D^yO8k%YQack0 zyDz@F-&c=d{O1fE{#L!wM2QrH4j{ly)CO^HG^qG**&l|TV5330iemp_Ehx->*O8_|>dwC!UWiCJ)s*PU%a@- zMoqHmIyphbo4^&CAoVEw41Tf;*nin1=DQPuJykOENt4+SMO^RaQl4*9UhH;<3*KMP zW!CC(>Ni8#Jy(crVj-K4kCeV9331q*NsuS z1so)4{W>hXOKq{Y`o86|7Qqju`BCtn3J)0$0v?FQdqy^V6C-GuOR=u|aJ=)(+oC*m zKGb)`1C_|?gJb^rUWlTx&DD=7;Ra4Cm#Z6qs-VyHUo{-GLTn_}s>*BeJ6G|${+8v{mz+C;kPpRdggTSHILZbJ*hHpESi6}#?7)YSj(_w=Sbw0KDI`N_GG~e5y>=;b z=iA+|{j6rLPVF66wOtQZefv>x?EUv+132Yv z9JKNCUM8(l)FsO|Us}KTUTWl34#pPEmFFt`n4A{GVT>v)4H22CY4OU9kB<-djbZG0 zmGw)6pI--GhJ2Jv;@6}R8}hRZe*66*+i?AqUC}Mb?!YBu8aH^G;2!n#Sr(V^I+b%I zf$@qf3fD{r=b>_}i}lO#I!d1@v1eyNZH-`IuKtU612G^lI^x2o;K`!F{*STr&NAZf zww@~o_9v>>KXv}FS2cYl^6@9>HvPhQLQ7hPq?#$Sx`GXb3=Tj^SvglcKn!#6eV%V) zt;w7oa|v;1^Qx*LTQozu0xv{`uRY?LKd{H;dGFQnc)LTt)X1pFP)~^a%WbGs8T2zH z0YFV6bUU$q%|<2&$EpZi--?gJ{<_|A{GXG*!gr)2esk65e6k-(WS6WTl2TJs%}3+9 zj||Vee?4x7N0<^r`Kf94vs+qEb#-;7oKz8QTN)d=czLw~baMAiiA!ymXj(5L+!I%k zm3seX@c%VOj62F6b#$f-_|c(>VgTNAw?jk5Ue>Ole*8y!$7FVqmJ|PH8A2Zh-b9Tu zfLQ+*D@!}kC=kc5nlDz~)=l{dl_>OO)zOJ9sRPu@rZ4i2hS$+?y1LFu7vdCL{`oe9 z>VZshHi$8b1{5q17Xs!`uv4G1OwRZtkeyBL)S~z2&!1%OrU)kVKWdpZLH{M18)FPI zL`jtA@^xL5XWh^1ovG~UnScwS9m*EPE$ywFOAg$J&Ok}g`z8+==sy2tGa!G&2vF{W zWfRPx+PB+4tHM;D3AG*zv8Llhhads)liUfouTZ{2=?jV?>N)JUImn9dUKtThl6wLe z_gDTM>n#%0bhF{Wnw8B-a7t_{Q$9nVx7lB|Tb7JEVehSDTaE?f6ReOc&F8tvYUX9N z?zL^sx;TYt0(WU-eV~KnhMa2W;U_u(+xELi=j(pdDc`x@mBZ4LfqRXN!y2HvQw0Mj z9ZM%|e};FoPBrrzgt6#osj3eKyt_I5lZgF>2F*y*B_3C zd$dG;>yRp-Mm!xxb7Wxz_N9muZ`O1>EKVk8^tifoy7on;X~n5d32wh$ZE* z9=_80?G9(<@VE`YO>QbPE#u;(Sdtl5l8Fl4aSMf zmM^{DqfiIoHitTK@=$6Y71ac2ji`wiXE4BC(_o-%X8mHt>^W z?%sJnoXNb4U;s!Lr_6z5)UeUf>-S-cX-_-)o8ISrylbtF$n5!cqi>q7n0OXvS=rcL zc8y<3A{a`#?ph$K8i8YBJhM|X?Faq2gLnK#Qr~OA)Ml|aMBNKAprL_?8@}p&zZ%~7 zD+USaT*y!@3)@t4E67tlGjv1t%VfVbQh6YLqES|yep{B&#GsKP!br>SG`n6GjTo}r ziRc$Enm)xeDRl*c19@q^8g1ecXeULd$Mdzy>m-KJ^#JS$n$cXMfLYN5h5eJ#=FEOv zo{-n|3hHS$`z$@?U?a;9>jK`FrrJ5@=PUBOw~HMpj+*WHR;KT1Fx{KvXz*JkWv{dI zVw+WvP%c;;PyCLSH9!8`5{)2|MsJSlYocE~t6{=FkI5e+@G1uZRI~aST7u<|?xP~W zM$3ycNOq!YIj*UkOcSy$~Rj=k-z@1x6_7 z2LUCaLAb!ZmMse5iD{q@Vfr2|!1q&pct@L)4yf>LPcaaH>=MPyPnqJUWQ#$qbl+vV@7Kj5MN z%XGs0IT_6{FI2O5f7bO?GB9}7nn$9T3AR68F;{<9os*mC48@I_!?$)wnU_Xa!;_IT zk;g&_$z&XLAs@XkfpvRkWm&B5SyXXF6*e+dR$d0WG`TxEDl@|B1R09K084B@Xdy$c z-|auYJMr@a*iPhiyQ`NL#4c4`qSEmwj-@a7(m;i^2!+-t2^<#;_*T?M7c{3#8my^> zR&G|3=Sd(GA=1hKBK{-5($19qaRR8D0`Mfr`($?0?g<8V>2qp?#6Vw3#=@tPGWdW5b=z|=XgOLp`HHamebxUM1U$3sN z!fK|oVY?so=Ph-9<`xzf-rhpY(Ta+zhln(dP@ow$Qd)_8(^2wXH zit$%$2V?t=-YEov8ljqD8Gd!WG{;EU2}{su5N^dw{aIM#*kaAx5qXRvbbS6W?SS>e zg7whHauJ4`AZHp641lDlcDK zvrGNAV(J2QEwZC1nu+NJXaot)q9<=iWCFj5gn-QLy0}R{nK9$3ng#pv{CiDxcM$z- zFxp-@UD64wfk{`4GN_eT!^lj+k^+B!Kx$ zz+=OF$8>}iLY6>XYDP7KNE(@_iCv@b!rYzQKhs?+#s@PX>f`!FK?tQs*&69*kB9iE zFCiFp@h>-*Kb1fHAx01ii}=Lq)**+2W%Tca|8>tQfIms7sK=Bi3~fF$m}Y2s0XUmb zA@MnKi@Z=0EI=L*U4e%Hky7{MG#A~VikF)|8QO{H}f`YMs$XnE#*0NH~GDCw(j3l^aQ`aG1-GH5d^)GfHUE` z?u&;o|2m!#@J!s_C54~T zTi?(SBrz5!3Bo}pn3-m!K{pG%KIj9)aAd~Kj?J496;&O6aI}xJtzZbU$B=HFEd^7v zjxZb7=0jeQf)UY&RyHv^Zk-y>qk7v*#?P0TAANiDwPs}N)M@ZdtVAu)WNF> z^Tg)FSRTAU99u%oap{6bvbPd*O4uAfW2dCQ*#wkgt-;z!4Gh%BvqkRR{;bN~dE^PY zTXNlVAo0;NPlVya=BJA_E%Z{8!ZM%&my>qa{Y}3+!;*z~|4Vao%t<(>`!56( zij;&Kko${NTDotJc#uVMdwLqGQN^zJkra>^fqZ-W6@V{EtcF89d33NdyeFCOak4$1 zNX9QNDf7#J*SBr$c}~T@tD!+HZP$c{oZ^_wJViaH%OtIEOok4LNZ>2>VWr{U)U&Ru z=@z>s4-YEp=-DOaN$g2G zh^MM$XJx5X8J%HcA5GWcE38;ra{Rs=(U$Q}GNb)z6k7vH@(lxyM3Zxbqtm&(09dx> zBcB5)&;2v%Q6hvSnnnx-snm-koJQn`34v~PedXn8dZYjER)}IcLjJEaDp3zi9R2<3 zsR(2=z5SY&Aal{0lmVzPz*&sG_;)0^+urIY|F^x1^aRcBhP0K}`P4@3pDlPuk@uIN zP{&^{+uOs@XWe&{+{~6mV~;S#tK0$=9RY#0rRO&`Yk{N`5y5|`1xLHb;i)~($7_CN!-u-Otgi3=H-jD`{U`mX;!pe2U&Rr}$)g3oQ3KdG31lyPB*mm1 z2pvnrd1o3dkNTKqSrSErditJX{1Mx(m|d|2$tq6y3RVlS zCxcHoLGK}ENB|&0V&CM*&Sv;;XBE3kT=y87(9V$V4jUw%X^zGnnk2$#gn8XJ2!X_d zA{K&OGDt3BbF$c$KLeyKAz-eR&Zdxsyq@24w{uUcNAcVArY&>Xil{8`}gMJ=pw})mR2$< zO}8-1zKT@#yEdY~Zk7jse~zy7g`7++YA}y#r^S;CllrbHjih2gKRFgG;~Jw?bY&e> z4=_AWr{D-fuK%>&6j;_^6$WQSmo#_czLS;?cT*Lu;i=$je8ZAx>g3eNqQIQtvojPn ze~ijKiH+UDDG!VZ_mz=ylR-j2qr`aqMuJ4FYX#NS=a1#;V43KswOgV*TzFISR*goY z5LX6CHI#}9$IcDp$dlt}??|DdEHpvFi5n;+Kvy07J@?|g zetG*?bopS_S%g^0DYo7;O9H!yZ-%r~)n?UgbU(kO8WWH1PiOah*>Bap{RNwZZg^Is zu4ULo$}n16j8msX8BCa^bog2M@wf*<%2f5_*u%96O*1Gy;-X2FBMC?Y-(hF90>^o2 zyov5mLOzXp61T|Y_VJh>0uZH5OiY0#Ey^{aKlUe=9aL3THKj34V{jtPVgTw|snNeV z+g}&)0N@YjJ|NA~5ip$@Kpj1jkLpB#sKY}1dtVS9d77i>f&?kr99W9%KVVpLS6T?! zQtYvhIKK8kt}wlh)EKWxLZn?;k)BlZf_6=)=kuQ|O2`rTXT_}nwg=&(aI)VdfjN=X zak7Q2%%=d?^zj~aO0}*#bS(6D)cf`-KmfHg04#k$oj)#bVr8|z{DV8Q*|utLYb!7U zn~`q8rzbFlD}Nyz0SJWZo$2qB?U6KBsp93=7e^Q8HTOgaB(^#b5fM2gGFy!NanTc` z8h8z_b~$|nyrJd+;7UbN>zW%n7lUGJ{j%JJwKR&<={^NkC%g*_>|+8ZtAb5~$1wX? zBeg&#{d?5TWgLYzzaIXEIOIr9$?ki_iG6n|ne*s)M*s8IM3;D&Ay8qq{^Vgyf@$K| zTAgeScBq(%9VAI*$Xuv;M3Q@pM8--J$|P$Q@r{I+>nh~YI9H^l5-((q=c5$x8%b&^ zNskIcpgbcEE}gX7H1z=WLFV|>e`}&PGN11zPyUg|upC6mv z<@KUUD$!8MwEDM)q;j%1TmW9i*a9I{E%fe+@xGW2oW#O_cT$Y8)vT#`zF3ZAYS-30wEDM)q;j%1TmW9i*a9I{E z%fe+@xGW2oW#O_cT$Y8)vT#`zF3ZAYS-30wEDM)q;j%1TmW9i*a9I{E%fe+@xGW2oW#O_cT$Y8)vT#`z zF3ZAYS-30$>_Ri>S_YCC6%;f y8vEu(0RRB5x2CR}-Un3xz%v`e^%~6`8Gsap;GguFKn(UQ;Dd~^bgh(0@c#hgWY3-e literal 0 HcmV?d00001 diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index be52b3bd1..5f0113070 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -585,6 +585,10 @@ class TestFilePng(PillowTestCase): self.assertIsInstance(im.text, dict) ImageFile.LOAD_TRUNCATED_IMAGES = False + # Raises an EOFError in load_end + im = Image.open("Tests/images/hopper_idat_after_image_end.png") + self.assertEqual(im.text, {'TXT': 'VALUE', 'ZIP': 'VALUE'}) + @unittest.skipUnless(HAVE_WEBP and _webp.HAVE_WEBPANIM, "WebP support not installed with animation") def test_apng(self): diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py index 04161a56c..42c570668 100644 --- a/src/PIL/PngImagePlugin.py +++ b/src/PIL/PngImagePlugin.py @@ -677,6 +677,8 @@ class PngImageFile(ImageFile.ImageFile): self.png.call(cid, pos, length) except UnicodeDecodeError: break + except EOFError: + ImageFile._safe_read(self.fp, length) self._text = self.png.im_text self.png.close() self.png = None