From 909ec38bcbbcc8b49866bdd99c9b16e132039825 Mon Sep 17 00:00:00 2001 From: koral-- Date: Mon, 3 Feb 2014 02:00:18 +0100 Subject: [PATCH] getNumBytes() added condition for previous frame backup added minor native code optimizations --- jni/gif.c | 87 ++++++++++++++-------- libs/armeabi-v7a/libgif.so | Bin 25724 -> 25724 bytes libs/armeabi/libgif.so | Bin 29816 -> 29816 bytes libs/mips/libgif.so | Bin 72768 -> 72768 bytes libs/x86/libgif.so | Bin 29848 -> 29848 bytes src/pl/droidsonroids/gif/GifDrawable.java | 10 +++ 6 files changed, 67 insertions(+), 30 deletions(-) diff --git a/jni/gif.c b/jni/gif.c index e492993d..c30bc456 100644 --- a/jni/gif.c +++ b/jni/gif.c @@ -339,6 +339,23 @@ static int readExtensions(int ExtFunction, GifByteType *ExtData, GifInfo* info) return GIF_OK; } +static void packARGB32(argb* pixel, GifByteType alpha, GifByteType red, + GifByteType green, GifByteType blue) +{ + pixel->alpha = alpha; + pixel->red = red; + pixel->green = green; + pixel->blue = blue; +} + +static void getColorFromTable(int idx, argb* dst, const ColorMapObject* cmap) +{ + char colIdx = idx >= cmap->ColorCount ? 0 : idx; + GifColorType* col = &cmap->Colors[colIdx]; + packARGB32(dst, 0xFF, col->Red, col->Green, col->Blue); +} + + static int DDGifSlurp(GifFileType *GifFile, GifInfo* info, bool shouldDecode) { GifRecordType RecordType; @@ -543,11 +560,10 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, info->infos->duration = 0; info->infos->disposalMethod = 0; info->infos->transpIndex = -1; - info->backupPtr = calloc(width * height, sizeof(argb)); + info->backupPtr = NULL; info->rewindFunc = rewindFunc; - if (info->rasterBits == NULL || info->backupPtr == NULL - || info->infos == NULL) + if (info->rasterBits == NULL || info->infos == NULL) { cleanUp(info); setMetaData(width, height, 0, @@ -726,25 +742,14 @@ Java_pl_droidsonroids_gif_GifDrawable_openFd(JNIEnv * env, jclass class, return open(GifFileIn, Error, startPos, fileRewindFun, env, metaData); } -static void packARGB32(argb* pixel, GifByteType alpha, GifByteType red, - GifByteType green, GifByteType blue) -{ - pixel->alpha = alpha; - pixel->red = red; - pixel->green = green; - pixel->blue = blue; -} + static void copyLine(argb* dst, const unsigned char* src, const ColorMapObject* cmap, int transparent, int width) { for (; width > 0; width--, src++, dst++) { if (*src != transparent) - { - char colIdx = *src >= cmap->ColorCount ? 0 : *src; - GifColorType* col = &cmap->Colors[colIdx]; - packARGB32(dst, 0xFF, col->Red, col->Green, col->Blue); - } + getColorFromTable(*src, dst, cmap); } } @@ -842,9 +847,27 @@ static void eraseColor(argb* bm, int w, int h, argb color) *(bm + i) = color; } -static inline void disposeFrameIfNeeded(argb* bm, GifInfo* info, - unsigned int idx, argb* backup, argb color) +static inline bool setupBackupBmp(GifInfo* info) { + GifFileType* fGIF=info->gifFilePtr; + info->backupPtr=calloc(fGIF->SWidth * fGIF->SHeight, sizeof(argb)); + if (!info->backupPtr) + { + info->gifFilePtr->Error =D_GIF_ERR_NOT_ENOUGH_MEM; + return false; + } + argb paintingColor; + getColorFromTable(fGIF->SBackGroundColor,&paintingColor,fGIF->SColorMap); + eraseColor(info->backupPtr, fGIF->SWidth, fGIF->SHeight, paintingColor); + return true; +} + +static inline bool disposeFrameIfNeeded(argb* bm, GifInfo* info, + unsigned int idx) +{ + argb* backup=info->backupPtr;; + argb color; + packARGB32(&color, 0, 0, 0, 0); GifFileType* fGif = info->gifFilePtr; SavedImage* cur = &fGif->SavedImages[idx - 1]; SavedImage* next = &fGif->SavedImages[idx]; @@ -871,6 +894,12 @@ static inline void disposeFrameIfNeeded(argb* bm, GifInfo* info, // restore to previous case 3: + if (backup==NULL) + { + if (!setupBackupBmp(info)) + return false; + backup=info->backupPtr; + } tmp = bm; bm = backup; backup = tmp; @@ -881,13 +910,19 @@ static inline void disposeFrameIfNeeded(argb* bm, GifInfo* info, // Save current image if next frame's disposal method == 3 if (nextDisposal == 3) { + if (backup==NULL) + { + if (!setupBackupBmp(info)) + return false; + backup=info->backupPtr; + } memcpy(backup, bm, fGif->SWidth * fGif->SHeight * sizeof(argb)); } + return true; } static void getBitmap(argb* bm, GifInfo* info, JNIEnv * env) { - argb* fBackup = info->backupPtr; GifFileType* fGIF = info->gifFilePtr; argb paintingColor; @@ -900,23 +935,16 @@ static void getBitmap(argb* bm, GifInfo* info, JNIEnv * env) if (i == 0) { if (transpIndex == -1) - { - int colIdx = - fGIF->SBackGroundColor < fGIF->SColorMap->ColorCount ? - fGIF->SBackGroundColor : 0; - const GifColorType col = fGIF->SColorMap->Colors[colIdx]; - packARGB32(&paintingColor, 0xFF, col.Red, col.Green, col.Blue); - } + getColorFromTable(fGIF->SBackGroundColor,&paintingColor,fGIF->SColorMap); else packARGB32(&paintingColor, 0, 0, 0, 0); eraseColor(bm, fGIF->SWidth, fGIF->SHeight, paintingColor); - eraseColor(fBackup, fGIF->SWidth, fGIF->SHeight, paintingColor); } else { - packARGB32(&paintingColor, 0, 0, 0, 0); // Dispose previous frame before move to next frame. - disposeFrameIfNeeded(bm, info, i, fBackup, paintingColor); + if (!disposeFrameIfNeeded(bm, info, i)) + return; } drawFrame(bm, fGIF->SWidth, fGIF->SHeight, cur, fGIF->SColorMap, transpIndex); @@ -1175,4 +1203,3 @@ void JNI_OnUnload(JavaVM *vm, void *reserved) { GifFreeMapObject(defaultCmap); } - diff --git a/libs/armeabi-v7a/libgif.so b/libs/armeabi-v7a/libgif.so index b9904dcfa63377f85a1fd530d57e961e2fca4b3e..db33ffcf2b61294dafd00306286df874eb9cfe68 100755 GIT binary patch delta 4421 zcmZ9Q4_Fk}wZQM4nO%0{3aF?n@@IAzls^Is3%Z~tz%Ey)Bv_M1rB;_e#=)S~khJ=e zmt9h=NyLb`NgBl_q_O@j5}zxIhWJ|UWXQ6X>BynI<$T2@Uu^Y}OK%rb3> z-^bm%zkAM{bM853?hHHLgU5StYrR%@5Fz2g!`pV~hpP~ZjKg1So&AynAss?!Hi|;| zFqaq6YMebwvkW1ly1WJE1M~>qT$5u%$fK^Ff%$?Jp&crJ2y;O$LZf)f*cITB0)*D6 z@|!R>0h?9+8fFtps>L<@p+@Kp~V|8}8O87fw-as}{x5X(lD*8{f!&r`V$I1&1$ zT#e;%4Wjckv)o(2W`e472y~i(YgIlDJQrdpQu%klRlpr8Uj!}(VZX{B13Q;b?O!QC z05}DhSLNZmwJ`zzNU^yvl2UR{%rL zL;|h>E}kae1MC9!tMXQ09s-P0`8aSK1el_7m(Km&g=?T-pQiBDUHlF3#%c0c{dYM7 z*fULDau+`ge0-XG+YjzqcnbJExEG4m2oC{&1H44#6TmzimC&t`4Ez`HdSHkv!UMpr zD&K$TN^x{uO=IJa>(C>QZK&Z;-S!VDOQUXP=A zKHWa|f=0P_Qt2!_$5%Nofx}_i5MRZlPSW%7DaoIV^Q0>nE@8v>ok!i9et-}ou;hBf znnq-1!z<}T{1x0mFE7m0CMc)%GCH}?n7D2frJ?Xi4{BpF*k;ReaHK4JlUo{_J=Dj677ibzR})e#E5@yzg$kd>;qft)X6?mo zDDxkENwCJA#&6+p1znh!h(~E*qJv3TN}o<#;g;U#Oq`%07QrQ~cgSMg-%i!Uc5b&= z>ZPu_hQA66gy&1&>;Cv%h~D%)$93U=@z6%uylM9@ch?9OVS@u%bOCHb61NdaY$KAG zr;vn~aMlB*cWz={>SBqG{IC(5*s%8;LRo{7Ba!HiMUw$3#S=vi)9Z;%?#JMK`#FsL zFtP^2RVZU$hladB<`b3bE+D+b=HpE|+ zP&+0J!L*6U;>$APUktn)M67;HcL!z0^eajF{b)>EF{vPVB%)1=Zx7mJ(Jfous~&MHU~Gc_IWZ)KrD#Ot(7 zZv3*u`8!}-mURAekn^m*n9-Iy*p}2?LW+r#%gSgey7Qd1#j-0o^Ux?%8uq zDQ2h#pKRb-pWAao%IBX=!f87{8-O4nC<#IcW2<66sc!&+V?yNyv=)l778JfLi|fBC z=~};V_A2DOUS{a;g_K_f#V^aWATzZ3g^!#+bM}|58er0yUN+s)XAc+?m8)sAX`cIN zkYS?Q@EE$Jp@tB{9wq6~dfj`3B2DPPjH;n#eG-`wSWh%ZB8}yT zs)q(7Ezu| zk07Z1wD)Ag4GCH8- zXerfo&mv53cEuj2Uckqgql*4(4YS{6Ufc+Flsup@Ly9J}S91)C#OXY+r9XxccSC^9 z>duuVD?5#1JP5bu1dI}HW7>|CCHMBho}l+_eRPgF)r|}-5^HUdnD!P4cW5NkitppB zDCg6Dwhb34Re4p|;#_J(8QeezSqx3c(vh$Akw(0BztVte&F3GtbA5(<|oWRl-oz>Rh5+ z`=pbBrj*4uCpg7V^Josd?2gLvK2es#?`z1uj#z#kNd}D-LmVmYG!Zk|4qjd0wS*Q} zDq`v;q?~=wHDid63vh2m zSCmTJ%stLDg2LJ3Q6vpyp9l4;*&|On6>WytVP(PiRGJFlP4r$E{qPL+ageJgXx5@5 z_-T4!k!|tL|0`SYYZqj5zbtP1*LUR@*N|3{Kv3r5URnGRH7(wX6X|n{U*{&p{t>z) zZAtoLBbiXdG*VsP6_ko)@$xyTtLv65|04sT|ADdjwk#h8Zl=v?P0O03HwAxu@dA5S zEU|YXerm+NA4kkyS*(vpU9Q+JWo51RK>^#M!0~#TnZ9e@Qg~-Fz+lREJK-%n-1H&p z9x9{nrdQ$~DyJ9VcYFmIw-}sH7iVq7h#t!NPy9zZGkZhwQ8@DXPL#c=ce};r`e6W> zD$SGPE5qb=W$dKbLic4a#{&IB_MC|kf!a2kAm7@CUYd?+Je{AVN{C6e9{y^#|?Qwk|+?VvU(zDBWi z8S~c=EwWbPy>!3zEY79{xx1KehUlr>YW+JyOdy4y6np55yoLBzbaCGO_yzhz-gf*j z{W8y?q|CM&N7E+T#QgJvM(+*_;w|;DUG0sN;-*2xLp9x>pN@A@Z@vvb?E5PJ30&45 z*$Y`J%>M_UoR_Jd45C_NEZwioV&p>A-*)iyLjQ8Hv?84 zbo|MP^D_fIA&*Yj6Jy8-%ChzHBt2rsOw$V!Q!_@QNPEq*-nWGz zq1th}VM4rT#Io&8Z?K^%Y|!b(Ps>6+)T(uEsYiCd z731~fUzFWvU>=3}bd=X){fq4G=;-hi!+eVMdR!4c36=P)bR{V&XCfgArD_&1yIQztmvAd{{z5se!1vNz>5b6E0Q|PX=YXS<5o%Rf0&YvD&#>{1r&17#R@_xA zLbH?^GeYtP;3kOQro>MH9|krm{5Rkafr-K~9718Ka!C_ql>x^A$1D6e@M2)Q!q0Ii z8x_J@+^sl%1%jg>h*bC_a9IXI;mYXSf%E7(E&*rJ1}?$TWPzDcv=YS50pF!?j0#pD z51~?p(|{kzMUZi#xJAH8uwv^KUJiU7c%#B=fzzS3X$n^Zp9U^fYI#(JXpAb#@m&r~ znxc6gG*OVFO5r2GM}ZeA{5#;k1G^Re2>3G8cvayGz@LIx9>2T*e&9EOc_kjYB|Zi< zyrD8wMNe8Z3v7Z<B;Er2&q@3&@Qq1)40zY_o6r9N*j-A~)bUZROAxXu z-S&Yynyyo4GVT@h8Fjp44%AQ%8$#Z->ohQ?Nqueu?wrJXfrFE{6*zZNP9Lyq5?==1 zPHrCMYrsz6BT6x>7CBJjvYQJLr$wj$xK0sd0iOcq6|MyC1cp5`UhpR1u1WC*;1IA+ ziMxQ^r8iH?5#S?GV4@Ol*E)Xe_!IL`{C&eRmKjt*x$Q3se6yCx=1)eu4 zUc34h$1Y$ioP`3V!smgX1fHYtF<>_^?8fmK_!Dq1Fw`~9J;0&6ygRf-IQ;&H@7uH) z)o-e+d$1Z+dq38lxJ?xUIzoRPop7L2OIxDNx-f9ae|q|PG{w_s{nS6JrUEC?D13*v zeA+AypP@A~Dwuzd(syPgCcHYrllI%kdb;!tuRCIL4dAyyT zo0+aY1*fic0Uete8<#MIQc&m(Cu(NW*)BG{AVi%H`%_3E!J$%WnYAZj^9V{=+qG6y zo13h|_NJ216>dS~-0R&OsBmaCy*Mk$#EqES@?<`aLmv#I6mu7DM(N*o$AgbOj!)oF z6rC9thyO_P;)~r1-s#D!6!l4(%7vGWtRlC~dD>MIs0# zD%v9!xOzlu3-bjIT^M>W`LhA6&h0?6QD$rh31RgD58|KeMe2Nl2}ADneOMQE&faH;EQZU$Ok+qWWq+}+${kgm(yb|Ob#MUOu4v))>q~0_kdRXE~ zo!=+Ua$`e9NXl2)e4^f65!$`#XBLUZ*UJVCt14SV4E9hDPvh>d!?itKYo zkZv*7&BLqSDGB;9dC?2@B${jwG}N%e+8>C z`xaZ`JBnaa6p--ls+zAH_9*)W`?E!@9mvEQ%8I*UyEnQ-##yvo;$P@(M4DlCB%PpS ztsm#GBDbFv**UDp%wk2X=PX-FzP%!=b{0=4!axxQiZD=wf#S8IumLV?@X8Z@?SPc) zY*=cC!m!Gp3kNJs<3Fy#DQRiC;rFND?U%e=5TRygS$z=UUiT-Mr z$oVe9P&!N05YxB#?A_KUtzVWD_AsfcE;g0xSVvBhh20DNv2k)Aw9+um@lr1nscFW; z=nzMB0fv3H2nDq4*^Z9_n5ix~+u;l7wH4R*=qS2MRDox1J4|MgFn=ZCnvCR}hwE8=FRxv3jIPryV-I9=H<(h){cr0 z(p7|5Jw0fg=D_;>B5U3+GA;W>>{f}`g_m+!DD%=)w%G&4a4wv`IrdH~O6Pi7h=w2o zOZ%_s#&=#hTzMINQXxlTNIWTPizU;^400bFCKrtM(5RWr^Rsqj%pw=XBiS!6i(TGe zb;ACB_qxfRMT)@NN|Q}7co$u2N?6u%T~n3?d)$R~S{c}Vl5ldAlk@Bu%0%d|Lz48J zAW5OOROBglBtMNLfMV-)juf;R$ixx0LDuE;sA+jb-KfePYHuw^=&|o4shy6R*2E2r zAl~4QNd zc3NdMLvq1m7@3%+`S4+H3AC&5HuXLSbM-ZSb#@beoaQ83l3RZ$nSRs;v$Om)h4!Q z3`)}XY4Cvz+IjdNLmQw2DUalw6c5{dGYY2XwnviOcEnG#$hV@2(F2$7c+_T#Y?nPN zJ*({4qJhLN+MK#=+A;W8vI`nhy4?yNbVHB4hdS01YD_D~L-fJ4`PlD0nl`}T`{_#= zTW~g&G9JS>=wox&C3FTk!ndKh_jJ{pEVd1PWGFX|37-VXV0q-2@E-kcZazLlvoi0P zSr>$>GjU9?2WR`EOKS*gd`?t9wB0%;?4tK(#%NYTd`zgMk7ec*-vhmx+rm9^pQYe^ zI#{jryiw`7JP4;rtNM}Z;UMo%TV6^UpidhWG7Z_YgX)wiUE!Ylp`Tpn=dNH1ynY{; zsAMpZ=8yevB~G~#ZIG@o&zNE!mt6+gm~e@1Gv_cfg7k#B9KTHk^J#3ON3*suvja3X zd%f;o*BO5zKPC*(o!K+-7xbm654^7%#)J#K8sfL{@cy+3#IN** z`IBt&e*8?b+2(p!qu*XzoCT3%y*v?Nbvcsj@!4U{Xhcp49P!ogdW<&bWI++a&RSPIDs=YqHr{^5lLnqu#UI4t>@?dk+n+0Q$*6Ft-)5`y$d|0T ztB@=N&%5-qT*K6Z{bo30CcAz{E^4`-^|UE3E@@-GhO}&I^qjO`hwJ)y&8Se+Z>l})>8+^<>9yKn6dDy) z&?|W}nY4Z?<{25(PiHMO;%~f57f!+0PVdaGz-zp(=I_P$A#c*+J1~BN<}F!+>*;|d zJMnJsl%)|29;I=G)%Y6SQ}_mM_of!D!Fa!SPw`6}&i76)E!O1K4oU%SK}Me)?Dl0o zf_$%i9TD2^KXO)*CUeUz+(}=oSmUsNBsoq*c$`PTo&sC@vE(?e@i<$+y4`N48*D4< zadwUKDW~->6aI3rr$J}!1pZB!^WAfjiZ{9CoN_q=Si&ixlA z^6(ddPjcP|D&Z@-bJauMx_h)ZY7zXdApe>m|BxVmHIDW^b?+4hrfO4Ff-VIDa=V-2 e>O1HwReII<4-fQol}RT*D7Sazm^WDE!v6sku9Wlu diff --git a/libs/armeabi/libgif.so b/libs/armeabi/libgif.so index 5e0717d32057313e2957ac18fb57b2acc5dbdde8..2e623c0ff9e55e8878c7288f78875242239dd18f 100755 GIT binary patch delta 4456 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 delta 4384 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 l&@xuCm6je_lPqyOKEe%hiPz3)58^{p^j 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 N;%vR}+F0qd^nZ!G8I=G4 diff --git a/libs/x86/libgif.so b/libs/x86/libgif.so index bf18033cc8b66652f6a79039004062e303aef2e3..5f7a09942e1211b80457ce1ce6ad1fac1b631fad 100755 GIT binary patch delta 4986 zcmZWt3sh8Bmc4a(lDAChLoK1yl2q#xi;qw!F~vtMus}qFQqh=b68wx~3`UoM>270E z62S2CEJM~wdO1mE#?hoF({=|sxM&j;!HSTmi3lWiel{94RT^5N(Ke3bn|+J2S7wH_ z^t^pO_k8ZT=U&(yGVKnT8rDXyT+P_Z)vs(Q8SXA;Z0O%BM_WdFiy5247#q#*V~atz z7tl+llGV<+jIA*Zv0nk(J)5!U2;K+mh0U3$A^8E|rb5O_LB%rdpyl%zTM*Ij2HxXg z>_kL<4zztfW$_a3Rp})j&ttOacRYT2`4q-}j3{k~ad`q`C6Ps1L7S#Bb}53t2i=oM zw|Q!wJ(;mbB4%EW6o5xZa2@a-;G~Gzd%)c(jO9o01z>wBZHS8ZHKj3@7%`iN)cS#y z2;K@j2n@?`ioXZ8J6X75BIS#~+kxXF@^KQ}0>g7y-wWIgyg!0h0B>Kw*vSa4kl19l zJ)JQ%!uYi?c!;qK#3vl+z$}N7qCN$$uT5hP^%{nD_4;qC#=d_) zwEfK=_0ovg1pZSBJs7)(|Kn6T6T6Np4w@6UiQjcnQ=E-Aq|v8wseDfg-Hj{Z{Yg|} zoyp%xq8-*gzS>DE$34Rb(wa|?d&ZP(>%;OHs#c~-hSyrxt{toVM344UpKx2DN)VVK z_tO`>v}r=V4?LG%p}Mt|YKpc^%?K{|(J-n5$!i&_8_+6Mr`Dy^??VIC^(b}k2->dH z?g7=A=25NsJV`H8t@yMljor}M)d(4!Sh^(Dh5Ul8*9-$;bVALd)cz!->us8=%WXFB zLo;lNKFy+bc~l7^7W@^|wPRX=9rm(dJS-RmmM(lV*6EIB>$=<$mK@MMs;8^KD%e_q zQ>k4nmcFLlf}!B04+Mih3D-*Pc0hferLMhlq+Td}ApG>6&y1-YrAcb=nKZg#vqx7g zs2iv%rZ*?5(l7rTapjJWv*?@LpzqzeV7s4{K+ZEeU?{gV?Y4SD}^Gst5Gxuu-)^eS;Zw z2v^i|Yp4nz0_mj|pS~=^FAaoOEK^hb7KdLl!6>8SJjafgsSf2&UTGaZ>`LwH!Y0nY z(NJ27L(%#?Yke{HyjabEflbd7#HqBP4{Cy3X_+5gbISyc3}~pzjtel}j+Tm2Y9GT{ z(w9m4Y^}_vy3l7%v_ndiaCT&yYKOB7Fl~B)Mc-gS6cwsfseM=&EtC$5EPDGh^O=&r zA8pBm6y_PIP=6WtB!Gqi<7HQ#THTv*RL%Bd1?_5$mc$C5Ok9y7uQ+!@C1H zrU0wj=j$4jme|ZP)mAwh=2jS6b)OmexYCX6rR=$ArLD)GvlvD$za`73v}{GKHkg!_ z(Vgxnqu$H4%k^H9cDp{Nrqfi@F4crgRqtY@3=xK@LREF2Y}%$eYARH_NvRVZiLEYP z@%R&u1=iKvHk4X1Sv#={;y)WpH_`|60!fe6IuN=`X*`blI_o}Gc4>DF!zY4H?-3I1 zRy|VIPJ!c!G#U08n|ah!FK6Bs-?sWf1d2-57ji9BUl`?gOI2U$&r5o$NKjNLlz~csH^%CY9mW3=w7j`b#IT5BS3Y_F( zH78S)bRjANffcGwy+|?z6GNGKl3)v#Rfy`^VWld&m~bF$8jp!3G~YJ-cgCMm4Y9N1 z91kyn^@l!P=n|)vBIdW;g_(i6vEbS74I>J38Vz7IReht~7AvDcazbxmmH;^X=0rU) zoPZ+}X(%thh&_o~FM}nfyEE!Z8GM)W@}|2!SUf33k{wcB5mpujh$x$d@=*A5;USa- z1wBp232e+4H%JVEwuthH5Jij{3Y&;1G3Z5^=ZW(fg9R}0_d=}aTcDXElF@uPwR*l8 zQHkl{(l-tj9xywfJ$Jv-7W7wa6lXjKDmh3S116uNQ8PeIqG3T9sMr})S=lvKLxj)NgyAWh}u@uZmJ)ZjeLjl$;H@MWWv~3#QpQ7s;|Xp(MzqN zBe3eq8_MI{f1$%~`VZk5IdnB((z!7OY5%0*@_wXI9ne?M;Yrg*_lu{2MYNm^@kzmD zm+8)=d3@q!8lE^wdQDt<{j_R03#Vq8?X^a2f$ae+DXVff{MAspOySu9%fC^i|x zE8I=n;Icw3#8ni7D1x~mIyc!Ty@^$5&=N~q)k)m@BmJxTfV?jhHhzSTsTKU{cQj+l zCh1W;MZ&IIr%d7I>vVp~WO+qU=w&ab5eX@){@Z3eIvL)&w_!1sl;S%FX7BpR?YKM)_xIq8rNQj;~D9VWx zW9gh@DqnsEBr>|y^Fi+xjU7k zf`b>SB>5>G7^K$Z>D=8%SCcbFc<>Cot}H)_cVuxNIa8L(U!4<%t&7N?@+5D$K(|s< z{?=b8ep{}d(v`OiZCU?DX;=;Nj{G-{?QCx?0W7t*YmxA_;JQRYMa{BM0U z!L`_a{WGE7n~!})i=pK_=F?k55a%d!@01P3i!u%gj z)54tPax3hr18?NgA9B9r+9}dzJt*((7Q7eS)H&;Ke8#8EM`o`vjr;3K!@x66d96J( z9h;A=R8i0GPExk}JimT|9>`7PADy70+y(Lp=vD{z=g`08-sZnPPXC-Yhr5o`mwCzZ ziW5SVolPU=?&YgKra#WDlCzEr-uNs^_56pde=NXLne>gPc3j#=qF7aFdO@Lx+1rKv z$WViYU9>fSf&2!f)q!VS^hy3TzNnKr3ev{gJE77M%EwlPU(ri~kHe@sF#91IK5vbD z9bz=cOsbmKBxi@ggqbw0@SyzcF(Fy;APp1_$~7MfuqJ~p&QG@u4}^E@XysyYt>Kqk zh8V;Q39a7^%naBbmtW4LDc?O|bfm1$`-p){YDAEwo%ljX14#LBIy*&j@IB+uNg(UJ@e2AL7v9?DeO7_ZM>dWjuSFj(V^WK?UK1Aae z70Gv?R~`5|g(?>1bETD<7bWxaA5j0IJA7>`on0KyFML3EL8MlSUlJedXf+ITIDY&g z0<;1D?5(tT$t1qBmHuhTOx|~h-d&QKq#|GO#}M%&E*vLLo)f%LVGd(9P!D)Hhbg)& zK6)oa=NO$`K91&={etJT(YmsDzOs#WlqE&Gu@N~@Vc{tV-2u8*mc(BTQ2f$(ejq@z zmnKc$jrQ4!rz`V}bQjj~!WW}zhCQ-Fidtq{r_ z?@W~T*x2TiOS@&Cx6v@x;+|^&tp#lY^?>$)z6IJ3dJuGTlVN-fI`~J!u;BjO{2uf` z8$g$XHi1@v+M5kyCuqz8!#D}*1^phhyu~oAxXSmu4}DPk2k>{(7-N*<<1H{YqsZN$ zgNK__pBO!|dGP6-QQYF8=eNX1H{rTzT0(obOp2~3W2~Z#j^oo^F8;RGd~M5bP5%Q_ Cl7Ynl delta 4497 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