From b50fb53f27f61e81d18f73526422a2fef3278ed5 Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Thu, 30 Apr 2015 16:59:12 +0100 Subject: [PATCH] Use image fingerprints in functional tests #122 --- README.md | 4 + test/fixtures/expected/exif-5.jpg | Bin 0 -> 23194 bytes test/fixtures/expected/exif-8.jpg | Bin 0 -> 23260 bytes .../expected/extract-resize-crop-extract.jpg | Bin 0 -> 1120 bytes test/fixtures/expected/extract-resize.jpg | Bin 0 -> 506 bytes test/fixtures/expected/extract-rotate.jpg | Bin 0 -> 1056 bytes test/fixtures/expected/extract.jpg | Bin 0 -> 348 bytes test/fixtures/expected/extract.png | Bin 0 -> 5396 bytes test/fixtures/expected/extract.tiff | Bin 0 -> 10846 bytes test/fixtures/expected/extract.webp | Bin 0 -> 4862 bytes test/fixtures/expected/flatten-black.jpg | Bin 0 -> 996 bytes test/fixtures/expected/flatten-orange.jpg | Bin 0 -> 3829 bytes test/fixtures/expected/flip-and-flop.jpg | Bin 0 -> 15028 bytes test/fixtures/expected/flip.jpg | Bin 0 -> 14918 bytes test/fixtures/expected/flop.jpg | Bin 0 -> 15028 bytes test/fixtures/expected/gravity-center.jpg | Bin 0 -> 5347 bytes test/fixtures/expected/gravity-centre.jpg | Bin 0 -> 5540 bytes test/fixtures/expected/gravity-east.jpg | Bin 0 -> 3873 bytes test/fixtures/expected/gravity-north.jpg | Bin 0 -> 3447 bytes test/fixtures/expected/gravity-south.jpg | Bin 0 -> 5364 bytes test/fixtures/expected/gravity-west.jpg | Bin 0 -> 4455 bytes .../fixtures/expected/resize-crop-extract.jpg | Bin 0 -> 1390 bytes test/fixtures/expected/rotate-extract.jpg | Bin 0 -> 1627 bytes test/fixtures/index.js | 57 ++++++++++- test/unit/alpha.js | 21 +++- test/unit/crop.js | 35 +++---- test/unit/extract.js | 92 +++++++----------- test/unit/rotate.js | 34 +++---- 28 files changed, 142 insertions(+), 101 deletions(-) create mode 100644 test/fixtures/expected/exif-5.jpg create mode 100644 test/fixtures/expected/exif-8.jpg create mode 100644 test/fixtures/expected/extract-resize-crop-extract.jpg create mode 100644 test/fixtures/expected/extract-resize.jpg create mode 100644 test/fixtures/expected/extract-rotate.jpg create mode 100644 test/fixtures/expected/extract.jpg create mode 100644 test/fixtures/expected/extract.png create mode 100644 test/fixtures/expected/extract.tiff create mode 100644 test/fixtures/expected/extract.webp create mode 100644 test/fixtures/expected/flatten-black.jpg create mode 100644 test/fixtures/expected/flatten-orange.jpg create mode 100644 test/fixtures/expected/flip-and-flop.jpg create mode 100644 test/fixtures/expected/flip.jpg create mode 100644 test/fixtures/expected/flop.jpg create mode 100644 test/fixtures/expected/gravity-center.jpg create mode 100644 test/fixtures/expected/gravity-centre.jpg create mode 100644 test/fixtures/expected/gravity-east.jpg create mode 100644 test/fixtures/expected/gravity-north.jpg create mode 100644 test/fixtures/expected/gravity-south.jpg create mode 100644 test/fixtures/expected/gravity-west.jpg create mode 100644 test/fixtures/expected/resize-crop-extract.jpg create mode 100644 test/fixtures/expected/rotate-extract.jpg diff --git a/README.md b/README.md index 89aa50f1..1b667619 100755 --- a/README.md +++ b/README.md @@ -669,6 +669,10 @@ A [guide for contributors](https://github.com/lovell/sharp/blob/master/CONTRIBUT ### Functional tests +Where possible, the functional tests use gradient-based perceptual hashes +based on [dHash](http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html) +to compare expected vs actual images. + #### Coverage [![Test Coverage](https://coveralls.io/repos/lovell/sharp/badge.png?branch=master)](https://coveralls.io/r/lovell/sharp?branch=master) diff --git a/test/fixtures/expected/exif-5.jpg b/test/fixtures/expected/exif-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63746c52e645a15aac78e98b4a3ba1c1bc192f90 GIT binary patch literal 23194 zcmb4qRajh4@a5p{?l#!q?gV#t3+@^;!6kvf;BLWfa0>$@xO;FW3_l1i!Ck}h-*5L} zAGi9kZ};u5Z{4nQPF26cUjG2_)s$3~00;;G0K!`XyutzU090fYR1{=XR1{P+G*om< zd`wIX3`}BNJZyY2VsdgaVp38{8fH35Dkf@DQhH8$CKgt95IY4O7cUnZFEblE+y6|0 zfQE*KiH=ExiAlspNlMA~|81{*00MNtIf4ul0wVyC00D^r;dKZ=4FDh_A-oyj{~9t1 z5-J)Z0s#H3R|+41h=7QKh>VPkf{gUPpF~7LCIFxiGVl?}qB82*5c7LSqA{hGkjORn zp9|Q|Z36W!1bxVuTT0)CQz8KV-?;$@h)969&3NnMBmf}383Ga#BHI6XIRYX95(6Qh zEHaTU3Zo6bw_IduN&or9=Ibf|8wufU%}4}*cYvY8E47+Duw_GB7K^!@0mvj6r~dEL zw&KLIh<2gF^~_R6r(?L*MqyRX! zLaXIcYhoGpg3Frb;R!^%nyBl&PjE{wZyw2Bsg9113K`UPGe`2TVVX~iBSFWGx$BUK zr|Y3Fuhc3ZDAP;v^6q|V(jd@WB0%w16gFaYM*~{hJ1BGBv28t{z8g$h4$EbD|3f~Q z_7&j%(MolmUS+$w>it*5t*56yVR`siqCLyB9p#o#RFU#(S$zm@ardcW61N!e`f6^h zgfYQ;SK7@C4yQQ5%z`X5%ANXK;rd*0^4E@Ru5`Df5ltovRg(Od9S8!ssWvC*Y_z=cMr8$cepNH&n$6c@ zRU<9*Aj~{lW$*g>Sy`mfMC$Ictam799{gh4pJQxum6+&u;xz5eT86PP4l9wR{XoK~ zt*@8}`ke@j`gHV7!OTT1;z%=+X(e=q17GLcoU1FFo3UCeUnQZ1cykk`SjTp1O6j52bCLRb)w2vdXqku&DeID;g@r>Fva7j z;+0utX2_9?Z7R5>?9d;xVzocE13|O>IQU!Wv#l47!EBqNEvLIYp8%Ewk|WaMnMdPY ze@t5~q`0P}u`aEF6cR~bl3Ylkg5+a91p(Y3!c0l6jC>xGH*fqiE{oITnglEUn@W=L z!ElS_gYilHJ*A=m4k{LjUbLSpRwokX;;4mKD3+5Nh8@dN{|R#MaQsIVRm)Hp7&Sub zoOQ}9!UeJHZ)g4IZAC|u*)Lr7}z)KjT`9+)b}SuaI38aQr!%n z4G3Ks@1kEV)S+-jaQ8)^Awlu!P}FgC7tGS73^bAnf3|D5xWN!LvdoDrZLq?@;S;!efGb}ji;|`pn zeRJ6q>ppq&$}Aw&&qc<|!IsC)%W$cA7%ucI7Zp|MuY!G!@ZbZOz+IzCU^`!l-K+W4 zse%^r*e#I!wE`FQHzKWGRn+(s@1!Q%sILB`J*x%S8kb%JpRT?%Cq} zsX>-T={@y)4*V6sXbPg37(I0K6f#ei1)n88tA8V@nrzkNT^vA?P|9-b*r8LWll|<2 zxwq=bCq&JuK(WH5xIPK|35mLVq?o^sU3)CHp8S zUICjGVK%zy8hTmm>`a;2+J-;!>M)QD`>D=VhAipNjZE|GkC`Tq_;;g_s9mVlraXdO z7Xlb}j>UR-0zIuXvlTi0Qe)>;&5V#<0ge)Xy6mfwpYL7)7k|4J2GaA&qY_<>M3b|O zda`ua@AMBoQQ0QzbIBX(>2MCve#_=7y{Z`c7+aog%8CZdrFxJ=>@yGq5@{ zoR@Y6ouPyF$xi43SD}z-(sd`UW%Wk^aGm(z7r6++_alaS$dxr0RKSRett~X33H4Etrv6+YrM;u7hP}BC%O3*hC=Nt`oNY5jr$gnr zUQaz`re@GA6D_n`>TckS*iiQ-&4x1RHVM)Ik2)%eHHKe3Sj6yhFq@~ zno_EFipxVA22-DKUYeO?7t?DqmG*eK7}vKq3UO)X3@Y7ZX|1wl9}3?6GRE-rl6O0# z6YA_CSe}z2=AF(SXC216(K)M#q=%otF<65x4GJ^n%lKiMjLnpoDTBuzPn(v$#NJ0W zN!)4voXQ+NUe?ORy@$!5p_Tz);kR)I6jye46`D5l!~P9S0r8qn1{IbyxC_mC^$GK?J}y4LzfWu2vbed}_lCDUZQWKl`|MN%Md}2Zq1NIrpY(vfUkff? z`(?6W8-j65RT%pJB!`eGO8LvxONpwpIa0f$j6Z%H+E4y(&2(%D-s4mo)H99Qq>kB1XM+IFG5^W|jreX!lV% z5`EfYt9}H3BwK%sVSwZw3Ckd;ukoM}4ZQ-=t8`e?eW6^)_fbjKUvB=xEn;YwpmW>2 zA?}wkIgOug5P8~^MOSzA7)S(S6OiQKqr)tBR-XdM`7M588i1kpA|Jl3HO)i5n02q8#bfdUAVM2f{1|!=yei zC%PoWv&Ql(jqOKKsx8(yU@bZir<%ZEL09oYEWv_eD8d$##IX_iAU6TjD;K-auM5GE zhhGhIg|&@0)h5dHqCWhml{Z#S!F3tMt@*I?!dnG8huQ$YJJS%2F{_XC*9Cjqb+@y? zH-8?u^7K&T)i^_HtS4P;%cH-m3}|XM(Wkm)?f2Y6_xPm3Od0jmA|`r_ML@ET0Z^h{ zF&slw7wXCP4LMwS(m6V7kxgg)y}t3FbDkKC?8W)HS%XRZaJr~@He5F@~9dj;tP(EV1m)!70k=7l9qs4XBHRR6jzhq zp0c!6>9Ek|E~iV};~ z30zBtaz7-<^93Cb@|tDI(X0b7>|04th9jCp+EG`elF-hzKfCyrFsbTMtmBqK+zza7 z8KPg%4q$b9>WQH7O>xtnS1Xu5O`z?1;#g8p9UZQZjyF^_!q(#{7> z5^=hiSHQ56iaR%=g-6rLaMKm%#Glf}Jd+GG=Tue1K^u>+0C(X*j8fC>RB9UR3e7~Q zXnw$y-FG^)9LICu_l!(pbr+T@NWxg7LkiCH*}v-5wa6YpZS*}XT`XDD_c$ojq$Wm; zi14O)zyg$MDnv|HJHx>5aNC#gr&5Jn;wb8J@8YIYbP432m@e^k972@=fa9dEvxC-A z>YQ*czN@^>eN2cKIr7Lm!FbmAQ$FvsYc+*+iII~pOMh7D%FPCB+u(xK^+A(xnuZS& z@Bth-aQbPVoDBSIsBe{HEURFN3Ccc_RPDqWzJ=~z_v<$Cx!>rIoe>=gLgWM^vDoZF zUy>z#lS^tK<28^iu}Cwu(pGVKCV*Ve^bzg~%{jF{4RuF9g@^W@kGWQScv!fX26yIG zK~S{4PJQXNKWo;;;`@NRez3XRT#3Q1pID&{jgq+)i$i@zM>S5PZm%RElsf(tmqK1Q zO|E(PS)4|IEf9Hu)ZYPV7jEs*|IVYiaL#zi;YS{jAa47>jlGqfYW3ewud@)doqCI3 zypv2>g>2E3k}V(z26uj|aBa%KL{CS0!kNaROCiaxYJEP7%0j2QG*z0y4+;1t2o5{u zhc@veeA=k`My~+6@;uC3yNW_p{cUk;!XbCOW)M2sE5L4igNln%lLpAH&z9vcLo35o zUEkU6E+quB)r_oatf-P%A|X(~a;E%-Cv@T-oP#kIih1*^MPf_V7k-h1%=OQr-7hRW%rfM!IFwaN&KLTuKfAGGI}p$zFu+g~giOEQvYJhuu>5(T-x zm^M;~&|?)moP@j6At~qVd5;6*0eO7$+$AJC0L1bnA*@8ppWnpNQp;y5>Rd82VccIX zNs&^+t3*K|QMCe-{utYp<(k@v9SHJR&p%!Fo^D4ueqrccPAHaEm9BRtov{DdRcyGA8M_)G*$&-CjmfK-DA{GuYlmKt4;7H-!8DijGNr3)@gH$%rucz zrrW6qnkwnFXx07CL5_^s5JOrU8bgWZ6>8T>+jluu|B|7|%xHoQc{a0J<~d+zaekTd z^$EJ*;FqS$sG36ZHbu-a?7ZRVI*BNyZ9>OfdlJNHQNoTUg8J_fUUs+ta*{Hnwf9uV zvi(dc)S~qS*YBWrOlL_U(zVpPZknkdoVO*a%H2n+GbP%nn`>29<|*u%{3!$JR!G+R z_xKd-qodPfP7XW{-E6vs`bank!ucN~_SQ^Z8c(9ECn;5rK%1tHRhWdLg#&-x@-5EM zsv5)#ovYkIw3sudi0Z0BFjU}Kd)4)*_XB>OO{vN9ltDheCmwB=tqR*%t@Xrp6EDt> zG<1phC+|pXJ+#GEuFWRI7RqXuSP&1N=)^6W&apf8_b9Bhc&&}|yI_Q(W_XawNnMWvlu*Q`w?BnOcGLFjFZkBVMC&7axpjWX zk9cz4(oH51@s~p?s?9oRWzz2K`W`pJ&yr_*zZ&xG(UMoz3jQTAe)KI6cJjYGk}lt_ zp|%iXpmdpY>9`q%HB5h7kT2rml3S#x&??86XZ40q1rd2IU?2Ggfm|7kISCe#=hS=} z_@VYZcgVOzo=2i$YX6V|-7$f=!q+z}gwH#~Su*Ei# zpGNl~%O(N@MB~u+k)=K8oxw zFv=huqU46zN?0YhN=r@IhX1|jz|uG> zkG%34J^K<>jzRX@(S4h_qPDK8s<36s5Zj(3;;2l;a#^Re&&zuQW%q^Mk=SQ^#KC}w|a`D->PhI4%b_5=m6?NVYh+GQHE~^p(xtMAoJLxtF=@;4z zlfF}1c@P5?m4vuu{*Qooi`$)x1Kxe{3u=LBR=pp@#0}cnA2{24d&3uq=?Er`^Dy$* zoC*|dwPVw`GXm&MUI85@G|P9aaDwsF^85IYv&zvnC6y!;p4#fVS~sbHc{JM@BwVjP zD96KjUFlSL%5tm$-+LUEXdO{~U+d+QuzTE`%vugZoim?mI)$9;RJ-8MKAxeWd^nWX zwMW3J=(zCKIMFA+lFvLr|h<~s4z_W4Bibk;+>N0A_2a?d9za7@V>9dp|@ zvfOuQq9~Y_`SFUzY64t*c5`wT_t%YpJS;?)kh^T6{uS^-6y5-%{l)TI!JyXFoXsh# z(7v!RP)J)dSX6T3u!nQOSZ`kp2~5bCR4HtXI}DGF zM)5L&li1wG2L3thUR~AV%D_NdG9ittp|sy)1SM$9ddfbJ`KVooGcW5-x)dI~S%~4V ztc|eKh1;cW&~KU0sA`fC^qHJ=bqL|irdRZr>ou1hjmAWMXZLhZ$GoNR^s@l_6e&wm zO0P!i^>p8{*M?2P*odFN_?W(}2pVnj{Hm_^VLe9L6R?WK+=51AZ8MtKwou8Ak?DxE zxo5dAmQ*xdA?6ktewfUV?vy%{5AzHpzm+fpN-8I+w~Q{@a;lo2wY%fD;qhWnds+X; z0fa!Q;Wq>Jg_o|8{f=aycUiE&jOAW)Sx&{6%%1hAf3Wm;aPyqBF>yJ&P9Ghw!}{RO zaAoR$B>s{%YEd)Gof~dMuK<%eO_SNOf#?V;;fM{MrWY+{GibIOhMlnJm1#$ z^VnCdcn4f>K|(-tF<6OBZV0obNVi9j4)N3Ey-gbCIPf10<&jF3(2wvaCmzjsx{eha(2-w&Ap ztP;4g4)pP>a2x8*Tg@_|%1M{ZGD9wkT+ib59hBqBLGRu$SoQo8c&*UHmwKdBl)h_{ zm;;g)`iUk60c_SA=RN`$AhFlb|I;g6)B&$Jy0rLH03XPqN_}5|);o&Q~Z)`RDlZYef zc;L+IVfxk-8B*HrllF?AcKYXq4qKE*3M2=!K&}N_YwJs^UB)~33Z?3;V|=uSnxeAc zDc){O)7CAT$AtvLr#@o`N)IUEQrurVLgj|S5_v^VEg|kF)b>Rzk&<_wm+q$pmta-U zu8IS1nF`PvT|8u?q=y*Qc>7CX{;-#QY1F!xF*H3_|u=lPNb_bbIST9oqGt`w;<5KgfNSUg|(GNuoAA){7Su zPw+eb8x6!fVx6-8$~m7=%^-|TW%%^@@DO|!<62!UFdE=I@TXR@Mc_9FP^0`Y&vaE)r@HO+s_NJ##az@F!7gz&5`6>?aZWyj_Q8WgKlYMu-T|+l zghH~ykr?Yp_} z0DIAlHK|AYNrK2Ea-PT9rEsqvv8k(B_8{-5Se;rX*6DxSM;{7%-|+;w9N2+Pj!Eh? z5`CM17tsWx66#D%S!{TjxGi`R7FXe~0CQVvCY;^yu`0Usu89W4=kao9c@uQBU*)G1 z22}8W-qgC2IwWNZap*re)^dg4Nb1vzl6X=yN#>?3dGZ9I1Xg%Q(p|fB2UqMTjnsVp z{2vfl@m8o%`M|Az=E4gTg&!CH$|SN z+P00?+cApfD3&(N`LWlcV2$n-FnhC&dF85NS>gl<%cv*!U~9+gBfSAyE?*Bftr@R5 zcqF_6o(JaHO*s74MCr?d)~r0m$ZPjVT2vab)8n>S2G#Ih0ULD1qL(%G3cmeZOXdz= zguWNb3d4%*!p|ah8j3V*m6TI8`)4s&Q&&fy?nad)4NjGG)k}BvQsCp&_V04!L}BZF zS9aaW?kJhyJm-q4`q(=6y^|_+s)CM_4R;b%6(?|-FOMEOb<1z%-6Ra@Y;y1qGuNYz zYQws@X(wHJneni-2&Jc|?HI!NF1PSMcID%&YL3Y|ts^E%^YzCfPv@F3bPmL`I)fx! z5|g@ms^P%IPZN6M*^nPDt*sXygb^XWbZ=-`RGmIJwWgAgvR*uYNE3~4H3w#TIh=+ zWFYtfa6=y+ufV(9&I>ApS|wM>{Ot^Z8|inVPzTJ+*{*Raf{MtnL7k?hziZZ8!|4l? z>FMfEDAH*-H@Xz>6Mx((W| zfyJ15e`v1bEuYO7s3&^y^ebf{`NC=CKBB|vZ5l|f?IdQ7(Wl^ECNIzBmu3#tN~2Fp zR^`R-GO#?LC}j$CS$bnQXCE-=^snK#Zjia{fHFq{UaWHH3Uu@=u9Hn#8W9?tv2--A zSmrO$n*aImdeB*~Mh`_03}x0#&Xj3;3ijP_XDgfB;jHG#NRiKnA$YC70xCI)Z!jsz zbWF15ygvvQ4u-=C#{~;xUPf}2wEVP5%+;yXvXsnWRG&jT|0I|6-fh}9|XglKi%w#90+ThUxM>(a6nN(_qV0;}CHc>T$UShjGs zz$ckXO|u|tP-MqiD4OU&e5Ut%gbJ7+McK2VftR2TBW}%a!Kgo20JLhrBhL9#zok?m zxDp!F`FSWMt?8#T_8Ow_+R3AB>=<+A6bCye64j$+-`VFf!4GWU(vdzfNA<(oH>m|m ztH1q#KkrLNXJ|B1Afy&ZDX@@gG<@32(0Oy#yalV*+viLPWMyYA$LnuqxqC7B2UF)V z_zX$IPd$_p)9ml{__-xY;aKBKg+_d@Nr0$r*@gSmx{J!FcEmsCZKz@v8dmFjxG{L510UA&<${u%*Sh>GjbqHV`GNomVWGr#640P*|ET)ecI}z{=jW1 zmln~>I#HuZ-Vj$7gHDc`_RX|$jJZ<;h_%JuD{Pb+@3#&7?+)iQ?7!Qaw=9k;h)ESQ zhpj-hg_LnZWqofyO{%F7>cX~XTy5m4?$QA`JnMywel3!0nKpiUBHwCOlzc~AhwSP% z-uw6wev0=(ZRlG!<3bL7U&H3%sIx3-c`E_8i@P%0Wjmi6WvEnIs`BXzehQxKPM3%e0ELU!VRs^5`_Tw5yfK;P{Xj5Vh3_@9jU6Gr9m>-xK`6?*r7KJh}6%-i?}T zog`%UF*{JdC&@Q;Nrcj`!Y~X}t>bc_jG_a8L|0{zFP;9O_qsBk*(*ccm^>YbRd zjN^$qTXptFf`fM!Qjoghyl+cO3tw{AMuYK9Xl_i-L%%kNT4%9BZc(~PQmudqXo1|d!q_atPl-C1d!Kq%qv{B=%#3iO8+JpNDY5q2BqOgpw`zYO4W5A5uA2^Jfy zHLKBF?%G^qk{_W84_;sYiaK0D>NRN#8ChAwQ-}ZklA?<5pJoS4X_~W^*5V!b*21H! z1-ZfMq)+czAmGZ2nT={yvvYddSuy<+3LzWvQN_>C7$4FCR?CO7c| zq4_}uei+*_T1dG&-=ps3NcOma+sXjE_M)nZPWEQoFpP%YY>+&EQ@NQJ%5naYg=YH+ z{ue6V+{V^wG^rhL9i50@nTR7lf4ygbIGovl(H;u4I=ma8{`m@^*iNf(nD0BzU*9fT zKywr-t!z=t)}=s>LF_|v^A4B&a-EcMW(XRY=|}hC$w2&w1Qqav{F0|!{i~LU$>(-t zDDorzDR}$HET+fXZSIb#8WOh(mLu$o3x$B!_QpYNgQBxdnIXR0xEc_<#nlkcdbzmF6%|*|Q`7nkQ zEq<#;2on32C^n_m_}x}fp%#-sXy-Uz>v?u8B~kDbP6`HB10h*1vCAVnhe*vEFl%k> zIZF5DEAiqZmJD?Hc(i#D`nxswES>(KtoSc31yv7wvz1psLde+?zhthfG}#NkWDk}KNS^qW|Ya`asu=|4}uXnoL}L4A`<`h zF$$qUn6XDT%w|G!C95mKYbhW1J(^u7Ye51U-{pxEmKgk0rcBJXcgfJ)1OL_VyY?F) zWaLN_@wrc`#Y7iMto=R)P+7U*t-W{`IEj@nE@|c3Cu(b#sdL5*dUw!OoyFuP`ExM@ zOnGTbNo3Ad&IGK5byPZ%7>d=kP8&b)xz0Dkp>Kr?or6K)YS)(yy&ET&$WY9wOHGCf zDgFu7USuEbcJlWNX#q+AVkfw22kk!m8<|dO`9x~Teemz^%^Mygqc?O{N!6ePbxHP$ zSu6%7n=!P%$;u5eE_A4BdJIY5#)e#hRBOIof8YEgwmitxXd*FG@^1b4-+h!zz8wDp z&lp;7BNSDWptKl8T{zn}*xa4COMoj{+TlW_FPT9niz>Z0T($?Hnw=gLOYkcL5E?LA zcYyj6N86_l%Vnb-POULqD1q|+lv8X_?>){vYf@!c!uc2tl@5>{DcPO2RB19Vz!x>M z#Tj7n3iuh?@vd{&kus|*yP4b5+ivVI+Jo7#93LfaRpirTiM4XZE%jAomLwUA+B@HJ zMd6QJ3X{~AG&tnoNm~>s(rtgblhh}dLkj=Wp=PNDo~qrmwq_GG8^kduB|^N6#Ff8~ zn|u0cJ$6bU_FsGJ11#c-4I-WJ;B(%E(HJ52Py8O&yj@I#SNbEQj{N>)S6syfP-HK! zv$!r1UoN(sBYU@p#J(Mzp0DVxE}&|T_n^}+mIt)ETH8fe-)Pdu&zDea9UMN$8Z&!} z?o(`A(2;#?hUU6fK++N!5OEBd!6Sxk_+pp;;3r8THd*tG%>IOv#1*}l^eHu^yiLLY z+Jl5krL=W;7SRcGz0c#(WE_M@A z#$CZA967H5A!;&n6Bwa%cK>h5L*m;^f=$w$AZt^f2Zoe7Wyoe?rferE?B#`TT1p{~ zJ(H7@QwE0T9&AJ^ZaWZ~=m6igws!{RN(>EHlHppLkd#jzIa zUB1T*y0!gmILC?hFv7J+w9^?=QBx^T`S2LoAPZeVhP{Xl`?!ywrfUe!a-!ZkZ=rkK z_6??vUt|PCa+u>)x$Kq8rJMG*cjV2V?Ch*5x3)0_ruQUIA8<13ZLbxc5cC@mgQA-t7R(EOGZ=wtrXT4wfdzXd=lyP;4(F9*ebpWe_k)!UcA+SMx z;8=gIR)K`~W07FPjMd$AHR7bEWi!c@hhs(ay)m04i(Fy+E7P zZ9R%Hg0$(0hC;ON-UckNXSU+}R-H|@+`OW;#&ku02g~GM=US2G6P)xiH$-3*&#aQN zuUon+fS@eZtoYTM9K{U;ZwTzD}X#a#i80t8708Uta<3N?Qjmm z32@du+}H~XfK&g@zA%XkNn(g80*wvj4zyY9xWuL*La5m3yFz{I-4%ze^E7SoFVHkzaDys zm#4W@kZHIZgj`8Q;NeaG?hl^nuL-Cz=4)aqz%8A^9czg{w}`0q%wVlfYp{mk8t97cZ2jMgKn8j0LdNRA&{zf!OZ{G~Gp#k(Arcy2!1r`-0Ly;gg{3z(; zBsyGfFzc91#*{V0ZSTX|9yEvNnYuhoqFRs0VZH8V^z9f`;_s{93vS8Cu7^tbX$;4Z z*io~XB z?5a6aF+nvMydrqSJoKo4j@9CmwfH>FzkY2MZHWaYWic*^Kul;Ih_v6zk2w_^yvkPx z_C{6)v{9UR9SpBVbGp>g`V0rD!P(5^Q3|@yr&a{t;Rh(sqBL`<(>O=z6#tP@X=N0e zd}iH^l!^{0r~EL})-OtkfA#hxF^g}KR^Tu;Uu%}s{EtPe;N-J-I7`9RW0qyplnowo zP@jRp(w^{I6b9;KGaQpW{9n3wNC(i6C3TgFJkudLy?*A zE*V0!YB%oX5Di)_1n=?2C_2jvjYKH@A=Da8P}DWI;HSV=lQW+#(Q4vG2jab-`FD@Q z!h@9Qmz(Q8x1oA+vT^d&R0Fk$N0pLIsfa^BXt1pTp?kPKL_IBLr|YYiqGzG0o0$Op zd(LS)`dKWZ?w>g4J*7#`%vtPqY{aJ+$jQAS=Dy$>@;x)7Q2f|TdyD{_Ftw8=#6jXi z4q)zkikSk12(9gqAaZ`mB0r;CiU#gj4T3KoZ5zzh`JX5T<|Hs?KvX>|rVU#oh`kvtkAjS8>+FX2ZHO%w8I&8zjE5qW)Kg4e27f zH_ywtJfePJt&?C$=+{UHm60I29p<=@KW}Lr@bk*i)mnOxY57U~y~zSb3LOfL_Z{H} zM>`+cV{^*3#omn`@$_|_dQpVYF7I|e2zh8sD>F^_Q%K>?amrs);GH z<@sRisi@?-kpK^2VPL)qR?y>``I?RHhw`km(O}!nYzG^5vW5Zv>I#3ay?1==>+nZg z)2abxzS;o7U*{=f3r7b`923>geKf;QZvrQjL-2Pki~G&e__C(fL6Q*4PCVARFdRox zQJ+8i%f!T`=V5RZ4*1{p?XbPr`quLA(2HM*W*%RG?TVLQhvvo1a^Hg-%>5pJMvMIG zJ{9e6b;Nh#psHiZDPrdvub}3B^!vaCKk&}w{6&C(`JZ;iBewqq|64l8=`dd?V|5P} ze+@om*)h9vKZRzQ+HkkiGxt*^afiVa=EfO0mk9ak(Wbp}k_J~2a26@CCTclHKa`(x z{r!7AsL{e3ZB{;Vd{jKj1Q>W}{}c8UFtSx#=htu9qnJn^Cpct2p>jo4s7k#RFnPFH zpDFZxYE&n2x>JOzFyJf-e^_89T3oBz8CD?NvlANn&TlZYsYqHZa0YOQ%6sJsGrJ|FVCTC9HMudknGoIGHoCEqKU9cSSG`(Wtd z>$i2ge%CZ$21#>y=WmP5pQ@9gt~$-k|j4 z%!0MkWzyYb)9+Q?^wKJ8%z{8B{CTe9j#X8ijB-Zd~Lv0sp9{zA%#d6kxV{T1Mxs`&RYCpoY^y@|+`^A4c+EGb%Q^&sn!!2Tck zqfyu`44Guz%_tJ)o2Wjrm3zM=QFmf0J{xiqNGki4!2Udo_W^!)L1 z`zQ=g;uVP%;E4}X^EaukJ{3MX}JA)#c(Rswfm@{2Qj3^t74p z6WyknSADR^&pF~+17Z^}tWa}8SbMkckMQ7$3b%4g?7JbqlPn(Rs6KQ)FlFFV*<4p= z9ZI+6Itb}H<`f%dzrxX*`3^31ncn#nhw>6}eU=1qt6{6&hGaPqUyd&X3&D6q=0%wdXZrxaUNB*XMN z`UI!`ltn$Z_ZO+3IoG&?Ahy2oK;ks;EQ$Sc6*d#MRGrv>6~%Sp9`vEnLwKo~?r6^O z{6zx0uT3EWB$QJEn&R@>2z_Zf#qQsk0-;FOoFo26j5L8VomeMJ`uIkZ*h|Fh4T!I2 z=6<&3l2&INf!zHvkt2j(W>8}~ov(g;jh+`y){Bl7jNtYX)QlS~XQA8inHct0*dbi?EgN2kn)=8rQtY+HT>G;lr~nzqD#@w-6u`zcj7R({)# zc>B`*AuCQ#`S2He_pu4rV1366-|qu>3^Q2`E2v34RN*f=PtPkr>z*++hi}nNQCi=| zZ7Y!8*&bcSdGQdLCV9;+j+6;)4`92N$T}sqv)w!{g)$PgQm?7GNK~xJuzb?l%iwYI zu96v2TTxpPyL>8SfnHZmCx5bW7L7d#d_|EMbX6(|LCw#x_i7KOuo0A6tH%c$8;o|$8aT--aKJv2ZG>+;8_EHP5bc8L_y`8ok(PQS1Z?y0I z{`p&F0f}G_wX79Jmm_r#??h-$3fkX@5fezLyr_#;1RdO=Nsr3m z@9SF9Q-TD#W`1Z)^4B)x`b`@O%p8egPnjfdAbPmHSAGjb(o5|&@DSf!PIT{fkzpPg z$ruVy4HK9Id92^yBXC<`s@CNawqB{&rAnboA@LItweWf48{>H*Gp8oEhs7#8`UlM`FKTR|Jm1~qZJjLh!zz( zb@pbMRol5H2T37+1d&^^jBnaxr7v@1dGL^Zs8JhGc zClz%fi-Dsl#VKx>{Q#=ej;Ae^!+4buW+!Bt$o;o7?iH}iXgYbQKq-U=g7m)qej&J- z^hJhzM#<_Oh6xd}YaTFKUJ|4)jM6_cOoi|je_Gx>g~6`)158S8<|BPeMF+1E?6c{;VrdoRVLp(c83${rl_6}#EZK!iz^3~}4q zT?v+<=Nv6#!-kEeq(d8)a~mT#)MQ7}@*`idEi4RIbM%p+ZcIriywm z=D@vjO~Rk!6p-2I!?P>73Og06aI#O#U-`R%xRjPwKgOD-jCy~RXWRacudVSgS(6K0 zY|<^JVx_7`Kzt3alCv{Z+o)^{!<4yu=p(?>%gr171tqss#aMHUaj)-b%cPP6R3O_) z7ozrQaa6DLLE0(D@!?C_US_7AD&C%4#wqc@OPuhA&GcDPjYBzPqOuNL@mtp~r*Z+3 z4maBUxw`FTVX$hCOPUKFo2-#Lu?s(ZQ^J&)4VwFGB07NoMc(43aUVw1g*eDkgT^xef>5>^l9f zrE|p!FMZTraM&i3rXEA!=1~eYr@LlUsx8XDK~jQm{lXUZ-|*s+m>>l;h?&5zeGq9z%b5gjm zcww8xHoJUoA9Lz(U!E21~=(-=O{G^u7q#G|A*j#Ys!fPpV4-?K z@cnxyc-%r8gRRY616}yGZ-ILQOxFX!$coy%prC$Au)uwq_mM%n>#kW^<$&ox~MQg{Z2PIcl-_9-^ zj-;$h@0J=4l`eGjF}<~eVOe2lN{^gVT(qdF((rms%4m&t?!0{9Y^;duY@+_-l-ogu z)G^A#A?T`gCro8ypcjN7Xoyg@5b&N!SGo#u;#cDb&1O!}j3IeS)J`OvhQO{`t0Wi} zPY`h^fa+kn_*`RN-0i?y40iz7mn&8|^*RFvi|x$c9Hbh*-^ z1bg?zf1)g`g!P%YTktJ`H|hEfHT5WE3D(5O^%Y>y#FGFv!moOmYC%78;gFS9K9MC) zu9L$!AGOk4zY8`);d#uHwo|WvUXgAz=!S0j>k|?Q-jn(zb$gW6a^$lSmB)3HzU}T5 z+#Q=A6;enyw6&x6!x#Smql@`OjZJod9L3#Z`@IWDMtg)~$eIs&yi35O<&&ci<6<7< zc}*w|se>@K)w`!)YxeR>{NZ21z3wDf*Yji$@iF9vtR_}C;xv7lopaPi($@NYsR3#z z_8ADB9=#ozG>mMqNJAhf7C6abK%iD3=+3F`E)&i5x>MyH( z!9KU=3tBkoXNIN(2;>mkl1=?_JvDtNQ5}y)L^oI6g}wgRl-Di9m=$JHMDZH^bmvGq zN*l6}EO++8`kHv)Lh!livGRgZDJyaS6w)RRD<1%Zpm zFQ{7M{PZ|_a??^0u2qOhN{S_hXV4zk*jsW>+l(ciV@WeFOQBGthEATA#}Q^)WOQ{J zWB?FucE0vKjydHSPMmZ)b=d6C!Cx~+6B;;_ZKuz!!*YM)x27IsO7su`DujfFW|Sdu z*nL;m?}T)jj5Kj70MN*TQZ`Xx-G$R8b|pqg7%^9f-GoUH+H@IW%-pJT&z3>145KB)L1^P!`+z+ZJha zDv79Lr^=}5<5o}sL3tlf1ORnkoBsGi;|dCog`>=}$eMatnN^v5<~au17=F9(aQ>cC znq2gDV3eZnJr&4v6-XtLR9BI~0CxZ%Zg9$;cqXThO)N26<%|Nvl11*D0wEf-14)V;RTAJZS z(}JG3SO{ugMa_ePtacY2nA_jB8>IyC#WWSLmY&S4#X_)ReAgbn{{Yts>+@%dNLI0F z=ZG(orWpD~P3~>Rp?^{OVRX6higt}tIUu7X1gku^f(V{ikQsV}cRql96G7 zBd221Eu?}ZH{#diexxtg7LE5pDVsg zMk!;FLjrALF4pwNbkzYe${`{<6B915KbTu@wj%KzVS_BDjx}i7CS!hX4#L=)hD3)f zqm&Y7)v1);`cCBj`1Kb@#!0Kte}+p`3A(H#&^0QR8=JtWL9jLG;5s zmr$>$JD@44uiPF_>3lEDWR9CSrkS-irUbXBzW5+1{{V_m2=jM+HVx*m`eQv}3D{hE z<4pWj(Jewv8nBIp!0s`Z$mLGk4_siQ*&`;w6t8_l0x{CY>`C>(2~ZS!AY*tZi}>3)|G3aVx9aOi%}5yEh~4h;^x)nE(-++}_sr#H)5a z9iqiy9Fd-)lc+E9`+afj%vR<_DweRmJC0geR4ho&LDb#sJuod;i&zShoAKu30ln=Q zH!ZIC8d{|%TS%Y+P3|wp^!+jEnp&MwLl06_x#{1`J^q*h<4EaN<%8b%moA;DYQ7;J z?HDDz#1rZ`?}+e=lb?`X1XX5IB_vQd1hVKFyw)L)2aoH8b*>N3ax45~@9 zNK@fe$zL#yMU??2;@AHG*xPQ{3FIQK?d7wTvl0f}VW5{tBYEjWQT5(X?;r;13I#sP zefxUhRa2-IHeI=I?}3`eg-1Xp*=<`A(A3Rjkx~+H^HxyBb5y{ zmXA)i<5nW3XB8nETzJz}@Mc}=^9gfUs-92GM%v+p*x#M4du@eT6C_!bRP_{1QxwFb zl>Y!xLFBIXxaWK;q_i|Djk7Vftw*1x9OSGTXwzwgK(Q`uZUyW}+uIWMAbbHmMIzoClGKAr;FDpP1MS z8(&hV`2L#~?=%mB8l_S<3TFtak1WK|WF(#adQQdr|VH`E(}VSDqBI(ME6 z8-H(-t4_o|C!@@0^HTYOh$>{ff}F6|5GLRrSZ8}ou5v20n<*);WJB~lD5Jx?k7!6iDb|d`0JvUZWx~j^}1OSYe;XEi^(IO0!zxL3{fR@v_@gynzq$ zS_+K9p(L@Tk3&fds_E9^-caA)407D!OpU7Z49W_sp(>EDJmpqt2?tYu>^A3qa4uPz z<&Z-Fs)kAC7IG1+8`%E9!Ju`Q=zZU7yC78b>;D6goZqgtPgjjLWTkt+`@0G-16H`}?k zDp6{c%A`#1aBpjcUN`&TsA(fsK(1JypOJmI$8?^kDnIPQ+>F&#~GChM>>R%GVZrlzT}>Mz~JLb>Gnxy zrs+}*%RDhnU68{qG|`&%Te2w(!pCcmalf`N9s$d#;zXKrD^*;l<~j21=ynz(w>UxJ z`gqI598sbIHqy4-e|%iBv=LOPi4KPOn3Bflz0NNjZtbxr>Mb;bd|NoHg+UT` zwjqd_{67h%1uYhr^KyIbi9A%sIVtI+3K}@IGh1>y40V-8ry{3fP)Bm7QRe&q0H0i3 z=>}BO^&;mqPZ}$YnU|ab)jDj$Qj@b2fM=Y^Vm7wiaxw0-Xi5T01F<8w*9*dfW4d~n z>fkVHP*mMnwz>P^bnVic%r9eOzQ+(!$g#X-#lSZf=LBYCIC20kce0JKD&rsx@@E>O zl16)~vW}Pqm~+o#xwaU-Tyt7T>RPeKn3y8dZ6e~pzQXn#+W}-*d6OuMT{MvfKmJH- zY)<|6JX;Q4wJ1!H(gj!%uOV;dJOk)=^aH**vPts$LtaiRa*AlG!_xyBsu3YF5=r9s z+V}5@{$c`2(~X&y+>?FmIm1etnI#k2MOd412lHEtV!15bKD%GBy}`l8rQ|J!Qi+%` zi3=$fzhQ{0r5cNAyMd%y%YU{9hFRv2taBX*x`-#`_Q#S_$$e6?>KpmC`(f&y!~@Ja zNjN%|Kn360=Yj4vz>r2#XAz6Kn+x(y@baz*CZk6M1ks%isO?s83J? za2Ajea_06o8xia6jHZ&Yq$^u6jp_?On#D=l!yc?HEn$+JGO#yAzXR%V%+jY$A=3#U z1hj*4eKyBb^#UDE{Z-To*?(`}4Z5^$hcZ>9Dv~ou?g%cWiPC*G`rzs++9$12VQB~? zgjFPNIp6wiisd_r!H!bJPU6RpOgYNuh7}SkDENKFm|o}D^NC9up_44to*v5}r-(8s zhEOEb9Q6RTtai1pd)nQxUd&{MCs^sJVW*9Tp<)=h?r+E)fXCJO%DiPEmN$`*`K)yU zM&O%q+x5bj;~E3JnqQk+ztmzFaLsQkY%W*OY)C_c+>y@%ZZNrBzRt3t=j3BSTJS{{X%qLoA4~pdeb; z#p08RE|_IBl0{QeY2DStAeM;O+W7LCLoXV(LFPnqh?}#R;cp#3>SOv1F>`w#t z$FRn+LmDY&Ve=E*_dl)-BW*Sdq|29si82sd`Ava5f0o7PCvVMQ>PTDZ1K%0%g`Y)C zdtXqt_`hXH=4E0CI(wU2-yLL`CyMP*?<46$(Ovi6))R!Rz0RtKtCN|C+^@mzv+ zj>AvoF5agfQby2au*w3phNT_B*kFJgEuE>VWH%rmDHh}$3F274AzMq>xF~xSxAnsm zaFr7oBMp1m2*f$rR>~>ikT8(|vGv9=U-A7pT$YgBSVw)m@s>z0IVZj~j~YVl;pn7m z>2E0Zwldf9&bpM5esCDkWECnH0*2S%U}D8fU*@(Ck`r>_PtYC40-R|;#@27v{qZ!$ zZov)6yKlZDA#_^AoOa-w05``E{+;jp;ebOT4J3_-z@%S{6C|uw-q?sK?SuQ6`C}}; zTQger$0=@^09miVI}A#7tVCO5$;Sy9I*1&P(+FY~l(84mqss8BqBsSsj)nP_rl7Jvf-6QRs13d))7xks6lqS4MzKqLT~ru1PGM0rRG_Z zL8ddYL2ZB^d{^bKmFe_#jB%~40B2ijc0Bi zIXaSg*k4f9V1Bq&AqvD2G!uLMaAOlHr(QxCj>pjAJklcZ9sK>kJo?)jA+T8LJ|0M& z9Rd?(7TBMB2Q^faO7~z`wa=y?SlH@DBo*v?9DPiw)FsuA7PoWhigBS^44R&5i5$R; z;XKUBFQi`<{{RWqH9cH)h^%TU!#g-lcWV)QakkvyMq@QzQ%3P5YaPNY#xrolF*iP* zpKKG9)ySD|LHW2+w=$b!2l387%D1Ng*!2F zS&9B*d`}b_m;g589TEJ2vCoAPh1rWb}U%m(w~OYa!GK+!6ewdhBpORpg?0>LF)R!L57auMogyjEx~oYq0{? z0P~Bl@CJ5Nkqz&*_)}X(&ouDPMz~N7&&oaVjAy-uJ!;9OD z7x2uY?4`Hk9zdF8Jy_Y4jsW8klv3In(ORpgXq<(=JYZIiLvy5+9r0$(DfP}7Rmu^u z2XJlQ0=yxYc=5j)V#g@dmG=e@Di6xVK7LEBMaEsF+e#HH7 z&V;C_>b8f`+0>!GvBy(_jnp#h1qzbHGcxVA=D__15zd_smFQO;33yAvX$jJ$hW>N> zqt_opLnO;OH&v!UGzA+2-s27E5|NzzL<;gRn^Oh0ul+*X-+!hpJ{hBqYSgY){{YDb z=m9=oaq0B;#54Mpg<6wrnk>mogf^&?Vgm-Ze_wCg8zyH& zVWZS%nc;GLr+W?W#jUab04<6oZ7x_oCP$6lqW3`%3OnBS1mBIlu{?gUWDg4LM@de} zOs27B>Nq49Q*L$x`r-NyR^A548ZJCGP(&9OqK@5U?0UOqtUMAAIcOjwel?R|mt!>qk(B!o=y>r`9r z48wbC3yNAbn%{}2Ik$(t%n{F$|0?VI9-JxX zV5Y+T#j#b656eoJCG%U#gPZzbgc8eB5>=^h=RS?x;T=B4jN0hB)%cM!dSdj|6_HBY znrfvpgdVEkU-iRJ0(hPe4Yb*WvuX}RGtnW~Fa)c851Wss1kU_bl+t9Bi;=+;xs=g? zKA==bZLBS0>1$$*TbEYlH81gW=@U-6);_3Wz4zYW*!RTNH6+xL+_Sza4Vo{Ab7~1q zWo3OVaJ@xAo8eJ`j5W5`>tKIUaHV9Ut(H2Pq^g}X3$Y?K2fmSGU8G z;|2J3mGe5;W?^Ji(yVsc{+L~s()>(|7>$CdW-JE46aDwat1f8hRbdhZX1iMai{ZV; z$l~=Fy{R|{#goRQ7HIA7z7M6#X=0H{M3UR=hyHN_&m@X=Zz#AI0@w#Q%*7P|nhDpe z;Doq0zi@pGuliyA=5t3Jq+hZO<1K)zK}{7!h3p#Nd|YXKbxwsz$!XtD%1iD)Y<_s~ ze2CR1W2I3Pckk)`dSgPTm0TfRR`=Lpqn1q%pAyF^PR%}}#{)H!FQon(6n#p{brJ@? zpUzG;#dpHKE1xaPArzOEj*^Hx0%TCn3TYO5F3qIe5pBhd?|fHUSAtk(fr`rviz+b} zvnvK0eMUK1-=iFoZL>f{2$rFHWXc0VtdpEeRTRQ*n& zbrl^xm&Dn++H~pW`gLjBUY&OSY(UQ}O-Ast#Pn`th152o<}aj+=^!~Ry5HX0VDmMW zSo}>|a)d+(Y2uty)5j{Kkh)3pwt=d`zyJZ?a&5Yrrds18%J1;zfYnBc9BSIdLc&m; z8?LQ(AOm7Mjnzq1$diK{Eey^bsoSa3Ru{2TuUe6*xM9g0ZGkE?I){>HX(K&Y1t|e+ z5-{lDPy^+$LF>sTXt?-6-;rz9&Qu4fdk!q3{{XH5mZ(Q7 zKB)_qELy_n3?>RVKt9+4WCrA*#S)9rt&8)T<*I>E;aI|{TaH@(xJei=h{6-*`M28- zYETp)i~}q{Ev<^iNh%Ar8yy*%m#s5IIfWI)?n;w!`)`W#M&>geii_NX?S_?l-kOw| d7!)iQeh9I@?}2EX2wzdw_rOi7V3qcN|Jn5yll%Yx literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/exif-8.jpg b/test/fixtures/expected/exif-8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d7705b49fc18b8ab371fc7fbc5c085300be3aeb GIT binary patch literal 23260 zcmb4}Ra6{Z)TSHv5Zoa^6KH7MHArxGcL~O0J!%H@U{k!03ahGAtNCoBO@WBpdh27 ze?&(|Lqo^^fQ|W)2%ngk2%nIUl!A_ml#G^~knj`u6YXbu5F?0$ikXd>fsKv<#PB~! z;80Ld&{5Ix(9!W2NC`<9{=eg`8-RlfxPTKyfTIDx-{z`gYY$N>O&1i1GA{NF%C zLO@1=hXbI#kBWW-z{9~K!6PCdBOxFl!Xp6S;1LjU07$sh?090xG^(Z?&Os>nw266j z1mZn27i!y=Ku$9{E(sUZU_x`~dj?WC!2g^6e=-2x*W-PR1qT5Cf8u=(r2joX96SyJ zH7+}%7>z2PDH4Y>ZQ}ODC8u~$-OSr6022Z3{l*b+0AB$8HVp!+QRUhh=A2)(bQR|fSJnjXSLG_%!OpykF~-0-_{wPZ!#4>$cR53;XL}D~v{qfk^icP?PdGVCGs@|#7porOd}r0VH^?T+X*wSkPuCET%c8~G zTVzx92<(DCJijoWuvJd-2Z7v)^uwA z2H?B-hEq2?{?Q5T5KmhTb#;88Xs-NrMX|;)8+nc}^VfM(#N7bRjXi>`KrSPO6h_tg z!5R@cw3#$Y7UxlpZ??c!Z*!C66g|AOK{gL*GS}%ZE3P!nZ{;en_3xg&R>5{+#+Iw! z%7S1zXFu=(1U~>6_DFAlvF%viABQ>g_KmZ%H&(O?m4z~j1F70YXP#>W3zfJAh;Z}q zKQi^7OecVxjKAlnFdPpWmf2by=OI6O4UDGO1EQ&d%6G;%zw-a&kfCv@L5eGM=k4ea zBRBWBc!3a_i#B=N7{wIU0RUoK!6<$KE~5=J3zPqlDeTt`ThY#Efvw(Z|Toj?uJinso0E0QEH; z_3#aSShQ}$9Uvc-6e{l?uCh`?ar9%F60(s@m7k5p+&iHlw%J`m=imtuF3Q5me>!fE zi+Kb5kf#c(_NqJK>AlhxwWn!eD;S+M7z`cM@e2SwwPlo`rOjAE`&p6WU#dU!CgZiUaA8Jn8R3C6fm z$I6*NeL&wPHJhKUk)EwK2z&st>Mec3F2sAk0~I0Ygf1rgAda;5gfp;Rb9k>DUwz%a zc##%~@s?DiT=#0#%cN|K;YiUAs5BagHgAw1+KRFlkoL<+sUmY}C(`SKUW_as6S96698OEiP;I<;AKUG-yVmd8UPxlQ#D7q^zzBH@t zpxD#pz#Q(b^&y%l_G)!}CtS~qHZqY&j|n54v>)fRZf%ofbEQ*7y&o!;uJXIQtYotA zI&Jy;Mk>+r&eTu;JW}-ZcCHs&voB~XGUNeW3QQM6KWzVU{v7Ru0wQ(tKW*YhHvT~x zAz$e%#6%sPZnvM^$c`iaRFsv#k~gdU$>G;SfYt!Ysbk;cvjC$@yVsEHjmEIvnTki- zp3#~wrlyc<&NtBPsH;s4kXqhtAUa2XZS(mM>E5U6*pFA3>me(P5TS8mY^MBPJR>8skKcAiwD#-#f7>X$mWZ44>pP?;VU`)~wIjfk`u-98!Z*MQ z!Zxai?`GRj0CrS$4sAHBm9mJRt-`fTW0}hT*Y*bBzo~$6TTYOR%_>7#z+dw54l)jQ zJ9v8s(e+C^Gry-^H{C(CBNk0zB00*Rs_NHg%ste~8B2o3ZRgQN1Qf!!GL17}J76pm z+@G}dpExlojA%j9w}JQznrw4Qw(a=x98$#j4IxFzW$W*|V)=HB1^SyFpo4mm$yT2=CVyTSevS@C(atirN193^qqERsq~3K(Pp&VRsCnyd(DmDw5W>H!q32><55UUhh?8s`c&4)Q!A$~yVB)ZRUhZ?#! zB8WNVYfNjTHt!7C88{&KZkgdm+x}g4JSk73OwX3LGiGVQ@((-XIc*VHKFWI<&$6!< zhSLB?VKw=jKAHYO(w(%S8MEF!svo*9J$HHoFn6~5d-V!D;vlMu7)+)_J2M{dhn+hX z(}P%YECcJf!SmC@!xiP0=6i{vwClzg4XwTOn}{?(j+Co4S>84PWboO1G_*83Z3N7u zi5q0I{R#i`7BUa=lXGZW<^sOVfz2Ogx8o#t+MlR>o@Pb*q!OxV&{Ss2zcWqM;{|$~ zt+aDQMPBvKZJ_)zPEfoYyIlp&@=hHV1s4~7eL3p!G}$m#U&!g-U~9_G%1Znz#%0bA z>jsIZulGMMUkwL-Rv|1F#tMbjLzTPv9!$8QxhS&(9~02Xc4W6QWG&$0a{X4PQ0$!q zE>$^*u0|y&ZqFZg?qo)&G+8p753S6+;k)(8r2*~&v2kwzqU-K|ayP&=#ko1VHAL~H z2s!R4k-_Cg^&NDfl8DPc7$8&+;rOPDE2tBEsQ^&|0>lqQhrwp1KW53Zi`OdwFN}2N zE$A4+uxTn6eyuL7Dc*oaDF{M-v_yDeCK3ON8L+@CFc~d?byY3f~{M1^s8Ml^xC~=Q*v$Hc(X< zT_f_FT<`C;{SdR)R%*$D>Nm^Ija_@tm89q8M6h-Ff8h+$PF)G_**?=VBj*>5*_?$ZW}`MN82CU3kIR1?ph~*%`E3u@4D0Ew{6$Zqt~nwLj)5{SeqIMrbuE!iqj#<1s;J*PPcTH>RtT9O^-ZO>Y(n@87!A=`c% zem%u{Q9eFi(?O&aAA6q-mC5ueth^~`EIGj%e`)(Grz;pB!1z!|&*S!&aGT>K;nLu0 z2AcmE5x>$ae&73Wxc&xEKx{Po3o<232DBn~-|-EWU$sx+X&o%&YZd0lu4GxDj7ppR z^4;uQcZ~hg|4`W`Wz^7v&mqVsN|z?Z;y=koh3^&ji+6&FrdSu6Q4|`lj039lWI7tXdW0KyXt!$njtQ4BnpeW)uL zTLpw+M2}h^$;FF3zIy3`FUG^A<3**8VtLT9nQutLG1ZnEt)o--b+atgEgEEnhnFbK zf|qzVGi?C+2W*qzF{WajZ4!5K`A=9}F1A)50CkALgs+*qLgB@~z=mR^NTo62B>8hy z=)r=Xqpz7?FMm-%3Mi)p zq>p?($b6f8>3^)yS)Z?CN02bYG`4>)Inw&D7I3dCK-_shG^A@JCiHRsW&2O{cwN=+ z&K90WbIQy2(vRc!Sb-u;kt>?x7`G`^1`=h@-_*sTbgyji5F6lgxu+(ZR>;0Au#p&fY_Zb=Tk|{iIypTN@FCi(mJHvY>zM zvbn|iNQ*K{62C^u+--$|3g3V9v&%WBzTNEm>1x`lOI-LL2W+T47d%>5*#_@~R-cd_ z%zCyrDLM@`Dd^;YBdYf`f-O7n9!SH>(QreiVVl-Q93(K4*nQy zkpuHkgPOdgFGAzG6o_2i*8kXySrPoDTZl~&BaMx*B+Wa7TnEeWp`ckyeJrp)Dq-in zD>p+bAGBRBu7D5#YG22G4qEo;#LT2k<<0Xhu0E2qvQDTADR7+VgWa{4T{ewp9B(wFHy{TaI8`$U_ zC!tE|sx`<5bgGLTw^!~Dy&UHGJh;(Xem~U5wGv=t=d!x1iN}sBMFSeb8ljR;y6z6G z`zPC&5qLm>Yq=7W>`bh{h;8Bpxa(W*tRkebIeKhKDl;oFZTl3|Mby7itgoo%CQI8m z&TL6I4cGbp?LP|IqUxFd%{f8_uU@&KQttOVKI_NbkO&ncUdr_fJ+f;y9sWv$F_@VE zoX8}Xf(zd(Z?M*xqoCbD^*i~;7!FE_6Y-|QxJXVj*|=*LuLxCbHVz zl~4-7e67L^j`fazkiKEd^{JzuyU?X_a!jsf{cr&c>NJkv=o$wbZ=gM#B5mk18+;CPWZfp_k;?3FXaPrbdG^w4 z>#PrPyXBR_Jg$;<8LC>*CPb@_+W*wC7{mUm-2+;vq4dva#2W+RsQ*Z{gvN1P3n2y! z>W>O$z4-I@d}dgf@8E!`R}||$FP=KD-K>#U%`M+pM)ak>+7Nu@8Z7rp8>x{2+T68J z)YW*|@mJPlfNZP?5;jYO?6(9Q8-g6OhHeIN(k!nA7%K7?^6mr_d+*4icdzMJ1{^P` z(AAW|Gy-81Bv>sj+4?!Ym~MU15kNZi{FzdCIGV#4->7{lr{tB#IYn8G*$KkdDq?Ck z7~;m0@zT06isrWme;y+yqdd}|cT!mE2zIV!qHBoM1TWY$BMeazr3I9WWG~EN8wBC7 zY@%=+;_@(D{ur~-MY8t-;sorhcp2uZZB?&UC$pOk)G&E2u84lLT|QwojSwM40AZ2? z)rJ%(i}?m~#XVa)R{JSx)n}r8M!N!_OtJplcD@EN%ArO?6Zw-+z1Hw;9P;I$3K!9? zDQqWz|G(~qy5SkZVzfo%V;$osGaE8-LLh+m(M%wTQ_M##XyON}uRier(J4)ReF&Y@ zgjrN^SfQa5b{}Kki)d0QmHEqM)*gSc>a%U(Y;IvmX@R@=)L~?3R5ya}I>vX$wHWIh zYmx;D2!WO)<0vE0q@sApsXN3j4&h@Z;mEgBDXq-M&Sm|lI=YQC@Z2)4 zItD-vXdz*pI#VvY;JH3!47de%qN;+65~YB6sbWFB*~f z_Q8k#q@n;S)}o8vC=zI;ipG94mZUoPIZ#?Qo0}O&)>yrFSExma>Gv?-pPjqQ%ER8>zI^pBh31tPn)XoWA0+I72 z)b-4`&fH!px>9R-I`622RG($g=#OaoYIe6k_T7^=soX z2c#$s8kol>*eZS)rVO(lAlh!mPtEyhHS}|>%q5T0>fW$TQ!ZjW|FT#5)7+f^c3$An zLx)x0P0xJC(32JRm7QIeEXW~bzrgvG0b&6cAz?>S!$rKi%4;paTW;=_hP6}xFt z^V9Pr%ZdAnNHxo;01v``%?3?H5I2e2CI1z&Iq63pV07ox3)@1O%XlY(D&k+@od?7K z??0qp`e?R(5^0ks(G(y_I(-AvLLdZUl-ds?7<{_MKcC??gxEJ;7R)3mle)EAUt+M1 z8CTVoa8%;{7Dr_?DdWM6B{3O_4sO{*kk)zwctG8yU36e(e(h4Ps+*1u>pOB8_qvUe z>SXL|1q4mTZ-CNYfs^okBVE?{jPC#50GQ0GlDxXWB#rBFY}$@f^Qm#O;gup5&&2lG z)t|~FvgSnJcDi}z0}WWK^+@D9_{U9uu3bdo#&~zEj-xc+OB*Zm=>5@+YKFa7YweJ4(A6+CF#mF_`%@8-gMM^w)cm!YF2EBYyO|hkI z8T;HGD`SBjSf!axOrz^z+PNrXzDk-g0y09)`Y33lrgY4@(t#A==Y1IpRS#noU6KG@ zwROHo9ns*(7jt0f)Wk=yN@FHj^UvuI08M?7vHU^78ug+4=e9Qo0)OGNy%b z?8K#xU0m}T|CIDZE8U22{eJA7C{b*|j2|;|+gK&y2{aVUxfU>J)Vh-AIf7**XM7E+vW&H+|?bvnVbWk`U1cVdf`;E%rH?IeD^Wysl=Epj#_QWG(z1 zJ>`(y*NDVXqEhpCb+%b~IM+cmtqfnp5*GroKvqIBQ-{mGQHPia$;~9I;M@&lk*iHfB9!E?E{j~TA zv zT0&@3z;6s3Yjbrhr<;e^P{tc5+O-C^$G&?*0XJ3SU{P1$oq#xSlxyJ(E|Jm~{hlIhU-5)S!C=)0$ zi`JFZfg0H5@mKri0`CVMxh|RA>EsBG`Y&ZxVOzS@8jrD^tt$bG<)t$=cA#Pj0~&^Q z%Kdz&?#w`AKXcts_IYl3*jGtFr7g1)3YCz9+sCdZ%-N_44!5yxIgNw_f@lQ)5u%$- zJF~9s_ElT*GpJkv&8JtdI|ilIO7EMNXY=umaM#qATYbPRV?7j2tvf;3OFhoTvoNlh zQyY={W7Qd%%9o7u7q&~cQ2*4QzXZ#m)x@rPjmdqaKe!m(=F3{8R+o4Wo}YEj`vY*j zxpXQRUW>%$h)U8N=*jb8t5{2VVC|&GKzG zNs0mOc@1K{#uPB-TyJFVm;nd?d>#eBFRrcOPGs{nooLtHMf{e2re(&znw*_y6W9Q8 zl?r}m$v~-i_l$48Z4-yyV`!M4cqoDqX@6w`ykzh(#%MJY0&5t8fvSig32uX`B$bE*=c~i>k z%R9gk?mF!H-_gUr6dv|*T*6BzQP`A;Vg$a5D-S$Cu6tMSfuoGSldO?HZAcWZ>zj%3 z@-)A6rs<}0^bnVGj1|QXk<@3NnkmyaMI1%$j~Q=!EUWwD2$SP4aL8(_{9q}fQPEwy zS`P3E;h2j5vtX_zRv?u{T`e3C$a)&ao&BlQWj;x*my`qFZE2!ynbXJfaa*m2S5Nk{ zRus=wDYF@CxA2-{LciA#<<*yG?4gq<&hn1EY&C;~E>CfiD!X6+4;k5+b$C0eP z`+mFX@B3qmjW)?+;H^w)>g5(d`9;YxHtfmN{+|SDe0dhX{5snSw%M1O^WcA&6F57n zR=#Kdtz%34ef6tFhA6|8%G!psVlsCP7SZwU&0+A(irEUEMWr=)IGoK_cOO)Q?2NgIV^rJUr zD^7(i{9v)6eIWr4;%43Ezac3hx3$F9!fS(a0c=xZ3iCr@e#k*b5K743)^1%FWl8)x zZA3QCrnBA?WwNq$NbrA0FdrYi5KdXVHZwuVf0Tv3I|3tHHC1srE;I5TZJ&fZJNK|! z1)p}qaif1buiib9Cvr&12*?9X#z-vVD|}D=o7b0}n<*{18n36L^ngC;8d++`aB9!I zwRa+E(m&^$zM?Xa8v?ZeNa*;K4qgxEk#l@0sqCVAf7K1)(L1$yLL(^!pC?ii)gaZq{|{ z6bR82u}^XA*L+q#Z3JoQlvXaKG}^QU@-q{=^Pk4zi+E^Gt~hZ)rRsMtW84)7YV>vv&WFa z$3l|+N@4Kt@000(I}o>GMAkwJ&MozJdG$UM8d4*sFEm=-gv4A-6TUx{x$nmxm0esc z`Ejf$Y+wjZnrF@V<)S#1)zShlp>R{(*iOHt>c#1nKiI7hGzKsn2+yjz>aSO%za(}} z-m56~`b#j90-xuO1pOoq-rV+<^GFZYt#z@D(mH1$pOqN7u&v)HSaBo^XT5(2a$P#L6 zS;r{#2FN>&{PIIuS_&A<#o@^Ux9|@UXOQ3TpoGJ#KUnyy+hhgS1JO14Za$0VfE#kE zX`+?#-D;1pm}vC8ddZFxayIHgU*Mb{--Tyfxyy0+XhvE3DH_fYPlccpA4S#1nps+p zMPiJMwpzGATmsU`heH%eX1Xui!%+2hXEvt@CaLLC$PHPwH8>{sY=%+^=XHcK@EoaP_CYBv8AdQ^x-Is+#*keBI z?hbA`=1EOk;d@Jdkw5EjExxltx1bMRBg1}{9{vel0&j6kD<*27E@;aD5{Jo*hLSp| z4I$;;4rge*cA1cg7iR_Gi*c!^jv@eK9VOF8h+w4$2Tx z;}|qGxvsGP;YDL9DWZ9$6lUlYIzE|JSC|($k`kD0*XHfZ_o#-i_-_CoDL8X#ON5kD z=O__4L7i+skkvI0(N z^t?PyOm_f7hbx2u^i{U9;%_)iUl zI&wwBL;c8k$`8v`0G1He%AbfIW;nR>Cq^I+7QuEXzY9&wrskDl|yfvihd z%5x+%dnxL2|0Jc!IyByoS%nkwI(9-oc=ofoP`lMP$FMA20MC6`)p^iro28F8VkMBJ ze3r3P{qNL~bHwaHva8z5PI)$`V4Y$zviloAb#?E><8}yBd)Fu4L}P&)Xpg3Fr6K<*a&*cJzWH_8Mj5~Eo0^pmO*rqo*;jcQTxNffR4S$zWz{4} z#f-@-txx$SF*39HPz$V90HyEw;PT1yMO=>C2e5?qyGuh27#JpOrGIs{zbNwmDv!W5 zY?IcO$W4~jf^zu6t~P#bou#duclh5~nGe?(kN;0Mz& z)`5M$`<`~uuH6u`FtbNq_k&}U*209l6zGbf-0mrTV`NyENO32#L_F#qZ2tOQ|W{5RcD1-vB@1Q<`}~)3#dy4Op)hu0h`_Sn7@R6EcH3g94Xu z)I~=yIj!4Qw_q<3_5_Hq9yeo-j5}DE4Lxd~WTbh(m${*8RAkapix^a$AQRS&rS(U% z3K+>Q6X-L}MF>6Ozq&q;GHrKMbL(ru)y4PX#WC(%Tu}kP4zlf>=y64fdG~#Qgy|2C zJ|Xu$sVqWXm9@3Q2=7!iIo>!e$=Coi6joD6*roBvu4i>(8V2)x(`o5#?Q`8il$@$n z{?g8ToJYQ#KeL*RkGhQ@#ph$$HGg1$PR)L(`Uu%@6*Z$$+D|-(y*EIn$?x7KTgJlD zG@t_-A^?74BV-NT2B-rpgYreUDs$@S^`F~Y{m~@(&r(;L+TDxVE~#RoGtt*I&gOtC zQK%}At(Lj&4ItvBk0im(gtTD6)70GYw5#~4erC83BR%ZBxS*%k9bm(I%GNqW*{aYVu}&8cJ1k>e)MZv)EmGw9h2kd zpAhvP!F~*mu?zZF>AD9`o`G!dV%tc|R8<#;{_5v*CO4ASiKfbl#u!fkV2CNHNz2X;D8~zoTXnFahLu z_=dm5(MMxbd;9+O5j211M#;&hBvgE)lKq5pbvMMXH%QL89>n;HqSS+j&ZSFySxe zZq$QMQ5S^x$A-1s2=a(PNu*$r=!1oJ8%rXcYrE6oe7nIB)2F3JM7HD=HK|~^GGXym z(W=@7yXBAmkg20!(x^6u!>1FpGEsMpSWTWTIOVkHGkfHZW18G_Up2XIb#dGngm2fE zjh=RvlBZPDEo1Q&ZCX?QkhmLv=cy&SX%;&FjB7j1*j=w3X7i6~2f!(dA;1Fdm#y9M ztJ+u+H0POeMa!?S%KuhSGGm5Dr?>0Wb?C=6!5LW^9W$L=8Z@kP!m{Q;YlpXq|F~k? zz;DaQG!iRsg9=Bp^rflxl{aQVDEoT?S#8#OuNIvpSf*AD`EY*_4o6l{YAamJ7ydW4 zi|~b^wt_+!tvY~5@L%&Tm6~Rwp>@8AMs+gJmII3K-B9iyH%^&zW3fjz^}_Jg*w~SC zy8vG^ob<5S<6lx@Gi?ZdVnUVX;tm~Y@ZM+2#h>c)X|7i^GsYhkf2=LdAu-Nze75gj z0AV6W!&wpuT{(97VW{jFGnQ(Ls1}}fEm}-s@L@PF0`EQeecmgR|wZP3McW?t5qX z<7Z)1`4(UEI6q+X)rq4hPAHR(DpeHv4Oc^{LLKC8fkVdK-Q2A|+ikMK34<|!WEOA- zX(3gmA6U&Hzs!D7eEG9zRO#tX#*z75cxc}AKshmHH0;}t9|z_ZxZWS5V{a%T*DnWZ z|HTo{7tNx#6q3>fagdbd;mAxr4mL9tUN+sf);>?tUkqN&RV19mx;U0%#aA!Z@kwf@ z&Z{ieFK`@hj*+cn4KLq48Y90OwcLb}bMhDj&|BJ#Wo%L>Kf{gQQ;r3Bp?PPiGF+0Z zD5eU$mZE!#x}})XGE9)MGTz+$@f)B_J84+o#GctMY1xC~uAg6S1TmUI19RUTXc%n+ z*w~$h_z6sWBG6Dqz)>Xz+M&zD`+wS896F2_;f)7dQaw=3hK_~iwN>!Vj?83=PJ3B)$ zQ7U-JvLlEOW}ptezvZx7cGt;BL{~6Dy(5c_BwUUTv}eg^ORE6QN1C9%0UTk>4<44u zn#Tkh3B<{E^X=}Sx)wny7}MOr;I~HSyplGW8OD^GT?EX%O%iEq+|ItT{vhUhsfX$w*_5>}yun-f-78+)5qwU4G6DS_@~T9UjdCahf#FV2s_ z1--8yri7S9Wd35& zEB>r>9wDEqGb4OnUd!|~!)~@8Y@od;V*Vi28%2L5_|*+R%&j`Kg$P{W0N}$%X|Z%s zt}QiU$?(c>$R#H=k$ma4du<)*oC%oxSA!%=-ZYw`>sM98xYe29i;Uv_CGCz+n%_qj zT8@iry{5*cW|K%Z|IzVg=!ojWg5qvq?P^FC$B4%KT>oq>@;M0vmnx7kC#|n|_nlmb znaCsD(A+aNb2c5Oj69Z<`i9=5v4TLFUG|Ft}5&uA2FH|QuHOOZXK zWX2&so+;-j1j^!Elqb&v$&}Yrr8AU3HZKfEiEZxn=G2PwwtDZu@bN|{TOLihlzP%+ z$izr%uDa`GEYeLR%7|~5v9tM|?^QxPYx8?#-_L~H+XG_Ce(C@T!|+9Xj_*!l~%Hngv;Xb!LFayWtu$ z>yRqB)T0w%jIAc%<4roCm@=}WAIL7;wzacDyYD=P5B@BB?G|R>fDfWss^t;H>jcpx zu?MHq$=T4x41+yC$O`JX{wLDvyM5A`?Zd}OzF0S6BTs4}f2`td=GFQ73){cVrRYVA z#@JjY;3(NbuOh`2ZN)z3tR|07y?D>n;huM;0Hn-G;m8pMg5QD1c6jX>z@j!k%j&{DG$ z!(84zGDF%vN5LzIt4w}-=tnHyFvh`dqr+XAwMP@usE8!F^7{Jkg_PZpU_G}eair)gvZap#t4fuX zp?FTHO;clpa<~0_;Tcj=-V(_|DTv?w(fW&Npyk8%qlFH9T`ki)a=gjRM+IPtj;a>H zKm&huYP|?N&?3Ox{9@hsaoZr%jU)FQ$)a(k^P3tIzAS29MV7+XQdydyKY^M=12w%y z6xAWjg{aoM6%|xoQHkr3#~&{M%{gq8D&s}J5S)G903n>M^%)O~?V7gg655CggnL{G zGEqG1@Z;=$W6!FRpiw4RJ)`%3pu7@x=@j(|m2=!Msqk;&4sIbH_lhUP`ea~pn2?KG zzf$v$t0`nll4|4axO!D_*T)jv(e$XuJn?N!9Cw?J8Yhh`Ei&g&jY$`UM_Y7{;-9k( zUjqp&W5Y(MKCHW%*If@p{xjabyw|chvP|2@iz;u4qF{_%&|ckg5N%%Ev{(C=QWC;Z zR#TENuQES+09xb`W9V4ci4JCg>n960@Y7nld%>42F*n9v?F?_v&&cK~{*kU4pIYQ< zR&h|<5%w#Ahq!cK<6SW&Z=A!^X+S!H0gjq(^pmcy2fkb84AzVPW$fVs9~O?7j5QxW zQ&rVbu#@{H|p20(Eg&;;uYYu5e-?T+jY-OsI>%R+dkpEWzUaXyrhBya&!{=n^h zkVRhH#hFqydce=3%+n;ao~N*GLG-<)|JUs_Y7y4YfktOJd)d@O>!@rbXnLToWK(|) zoj*3e`rB~^@qcFk9{PX6ghzZoY()K`ozl!Jt{;>)EFvVLcdcDscm2*-T3iCtIZ#B$ zMtog5B>a8c9w(3-tnvbfTVbu$n12g2IJJXo-fRXrs?Ap9@u&?nKAKPW@Fu$IDa0%h zNeknX2IqQw8I>IAc2d(2QaU0d(44pDqinU55|^*2piu}v9;@rbj%WXN#C$&2oKT?H z>2XM53|0Nlh=(RWHUG|u0`(7C(}hZz_*vaR9=3^Nc-_86Q-cIVb<+d1>Hn}I-F6-- z6VA~yzwu5!OY%*;cJEl{d^?^~u{tIZ=KvwTh`n3}T>Q*k+?S=MtE}v{m!)m$Y|Xug zdp(z6=V6?|2sxT3?${fqo^TnEw?Pu?8msH;08AgdN*7=BJ3x=qixb!g#T`&LUPEKs zc5&~GxdOKvr#NkoZ}tV=02u?G155&yUe9dc`XlZn0*W8&zHflko1RX}><3(dQm{ZM zq1ne}Y|x3)W(l!WjIqt(D{aDvygHdAnI4Tq3Xk=Zv6F-7rtf?AApB+3INXjSqkx+b zBEAhwka8=89ZpwZjc)AhE^pcL?N#R%kKsJxEi6c#{CzI)6bPIZFVLS}o5Osz%aY%I zq}qBV)dAT;(@$6H7 zF@ri$(1!zGn2R^5V-LGm&Wvx{wtU)!ZsS-xzWQh~6j++E)DQVDb#$N#?aDDj(w>WE zr^hiuO9R(v8$S)D#};u zKmFkkH3}37vuJ1;T1V%0Np^5YXMx4|e`jTRH={iUrdUU3NhP0prhB*;07UZHoB#`o++d<1&n8jv1tf{hp{7@{=asrq|;>;Ge(TL{M9C}kQlMjHk||m z6}T_)ucW~V?z)zcJx!qyGuA6wg4!XMzF63D9Cz_%?Oswl%Y$Ro=a?$-scK(cisdZ9 zGnDh@4>{b?f@rGh%J|CV6CBN1T3c*QoyN2=%Lm!VU#uZE#ag_ zRZrtbOF3pPs!ahun>boxo&F6y#oz!oDIDig2*DpFK6!TcTuXa=g}%3*snO2=`0P@o zYBPstIBQidhrNW)e0|o|;0DC-6|nw(1Cir^bY$DB#{(?xZhDZRP|^`X)_$-9&ID|4 zGwYu4JQy)?^ajL%nj=~8?JDI=3PCGzMSR3U6+&0}Va@f1ILYH?dO>Xdp|s$K1lrLN z=@08B1m`nPLZH!RHu0=wo5Q!1gSK$HbZ!>oR9W;dN-UN2>4-TWj=2p{1oaM{95RY% zOS4QP#tm!$u>!wzaCs1(cH4zk1Gm%T)UFwjB)@WS{V`@tTU0Gx+jvo|^z|GJHOpZ{ z%>2*n6|bZ;Dx<#B83|0H$ZQa=s1&s~JfOwKgV}$zcY$>t@|$-Xv&c_k`?x@5fr~#& z#JrsG_+2$BJ`!D=hcl6(SD~Gzh^O3t*t{gl1j7V?c?R{2M6wlOe5LGcjF)m_MLKxS z6=rZ`n|R+u7z&0zU996LU(a&W30t^G61Ys2R2LzaY1nu+Egun*Vbx6+b;{@K6Yf2H zP-OlrDa>N2_aHl-UsxJ0rvV;ca_3oU70{LWy!)rP^s9<1V93kE!m<|f&P6EeVhVtSvxO6y)8&Hb`D-g9*nt5vl+ByblE@3`xw~jpD zl;QHZlSB$RBGK2wMNBIEM^1fp40dc)?c!_m%TmF;IhDt5bu{wBcW&fM^<4;$(Q0+@oRI1JWa75~!8Gztgyu@?fRL9~@DV-r9FRM@i2$wc0 zsChkj!qRh)rouU4mx6Uwfy>~B=9B*vsup&QP5af+Q5Z^Mak*m)5*H?Y{gKLA=6AjRgNb3i_EXgpm4c7gK2a>s!gQ>N zo@6vlq*jZeLC`Wnu4{o~t z!ptF3XO_BuxMe$H(=P4eVTbcu+~blW?kbn#?!~zs?1flQ`tNQCm5_@Z$LL;oAb}Vq z^BbU|sHhCLB070#cEz-ex97P+^2|PGWR@Uy5B?kaN}qAwLb|s(+^p`LmtD#*(rZ?B7vwS zR<%tpap*qZ;zS8&zhWiFeV|Q{oNkP&BD_^?U=@DaZGie<#CqVWmX$U6?~5OOs3?Uh zwjfNOIfEZ!g*Cx6tt7vfP)S#nZzx{Bq3cVCx2IjbqYx8y@E>>jnlVjs%y`}*N@m1R z8}-@xkim(-qv&dNaL#}=mmp4+PDuAMN;W#3KA=^>~^Q??4o~Z&}9^2XcA%mm5$y87(0R^;)EYV80CE&{r+5*) zA(n&<(v39`U-7!7J<9*n}7_>G|9nD?afzZ#3VhjD}Pb9sJFqAQ&uSR5EQ!9|kG|nP>9V z=&OJ2<%6v?oVu{KB$K^3MGx>#DA}o#j+r8w5J+y30hEsd%Z4Z=AL)VC5%m+u3A`U z2~M!`-F?~Wvsu>=)!6X{&F`y@YFm6werBYUXMFRK{T3x?*q_g>oQdOD4Bm;SDVesd ze@p^rBH73wKH1PdpGI0<;ZqS-GRVrS&s%9u*L4?;8|d9#f3jBwn0Z+oG2mNkHgXqQ zZXE2a`&>93<)>48iV{%h%nHxLH}VF2GJx^Y9CiUuJMj3?X_FVvUH^z&t=LN0Wgyxh zRAgVt>Mua}7}yu2H?4cBjyqCfln{zRG0?r%@ympi1eXWZN&si1;e*G`&Fb<$&J`M> z&+ABpYaeM=#b^iJl3d740(2ax(D6ah^Ib+x!=Wo;LZ3E91>XRjNP4`L<<+wD6B>N_=WAB_FE3FIV{qSLKN8q7HHR~y%Ghrjp$GL_5~M2T zUy5lOlH_0VMXQ-)Vtj`3DsdT7s~uy-fBE7k593d{wl>=%JMXMsM(wNr1p*|Hl?**O zMiVN-=D5Va;Ss1hX?oMT4n3Kz&=bJn*8hQu$xN%2F{!Hm>QAD+YPv-{4?MS*)`bo5 z*hy=vRmXB7RjK!Ol{POzV(&Kz?zou|lf+5?NNUnWB%eraD$il33dbq5HogI#N_W_G zTRy;DWj<~U{k!R>fzgkh-2BF-qO_QME$X;_1I(XQQ)4lSA_eo^HfM%BZG)o;G(}3y zWuh?@#MWlFTm$YulXmTJ3b~Aa`unUfWYI;xALr_`N@`6Q&p?~^1{mQ!J2&smWcz>zkrIra_MpprS;9AfnaW&X0e{go#vSZYE$=*}$l@;~@M$0SrwTsE%(cGe7^o`B z&JwZ4C*i7P6!!gVDlHk|nE&wKgf~s=J~y79XX@WqECul5QRlFIZg|`7@=wJy(fE`B zO}v3(J{gGeP*aCzEAcyadSp$_fFO0ZPSGv=BD%gk>C&^^dbGq;Dtei!q5-3yls6#r zISorU>*I|&B%N$%>wFB)eD&SI3?odF#~iQj<)Bima_)%u+trDbbk@lKlL^i$E8f9z zxUCxv<~7MvGQ}8zfn~KsxJEF?J(<*WY5yeae{k-c*?k~gY4&JbdWH@wIccU4t0-8g}>BO&e0lzY-PuZVjUOiyZYnqjdwe+9mz+3Zt3IN&)wv_L z;X%O_ucmcYDMaLDl#J~EhT1WGX&C}u05fSTSjVe4nt#a2D!wt-wZyN_Ik9@^tX$2BE4w()BL#f@MkZ;F8 zhhr!S@p?2y&_w*-)9*3J1aT5%*9Ivcn)iINmvO6`wc!aHwMh#Tbk^6_kU?YCJp|vW zb%}A^qDvj_(RGCiKfV)NZ48r|hZVp0mTFxf|Qd^I(ZOO{HJ>6J=!g0k*U8oqYII^vCW039URmiBL^ zB+A7EE4Hf5roprroAPjK@iRhr7qEShgnJSx63bg85SIB)1__N5C z!NrqN)W!m&a01c|$Z>Ih+Yi3rDivy~B!OxvBT&)QJ;b)YzzhDrrV>N79{1 z1wsY67w?Fou9K?qnC>JRSwi069sR++At*~FIJzA=?0mFz`K0DMH9Tr8f)T4-hbQ0l z!>pknE009uL}V6bSi=*=uB3uCvHkFZ9L73GmKKfTbpfL`-+Ne*#~6R%tj3mU1bM59 zxX5i(>IiNw3X$*oW1BLXi~1Tndn8&q8D)*6d7GPj`jOnz-3 z+Vp-wthWs6iZim!h#cHTNRkZb$QTZUz<0o~lmE z9EIXh_-$|+-G|c>pEmv{Z}HCrBhM#nvqhqqxtMw3ia#~`kzzkni)K?_5<;@od0JHR zMx#+FZLjm&VZZdrsXR+7Q#CxX(w1NcQb>Vi1B*9oU3?vygPFsnrS@iOWIeL~xO zw!}Ups%Wyhc$FF>8#4k4+#QF@6Hv&JWmJ+Tqd09%&%${($EdnKGEUxx9vO2t-a4{t zWEWLyd{*E3;S*>%`o`suldOa5>4v#Fu*@ee3i&QY&zN$5OW|&1B2wnGvuS2lYv0rZ zxcu-yR6f+<5$5eCk!KgM;~DE4w!-++KGgKjI!=+0j1JzI%j9wn*8|%aC$hv^!9|6+ z7!in8BK^6+3sIq3z+c?%a5T(iQy~CvYYZYyJ%WNMBqeO1`}^Q|2(Y-Z6wh0(l7n-sYCi02YY426=F1e;ufKo;$}?}+7_SQ|pD z!^~MOaR*UM+T;VJz1WL=MkQA4a#azi>B$&pQbQFydjpRqVu1B564nCzVpwOVm<56s zay-ZTU`nAEP$EK2`)cC~`=*Q+msc7pT7+LSN~2EqxW6CgrX)tFtSo7u64WivO51_! zd@qtDijZmy2sb;f=?U)TnQXc4N3V zw>;YmYZ}*BkhH%MYup=i{qSV*OPR;271JoRhUHW(`Ph-k@9As@E4o#yN_2V7oma6P zi1oukE2I&$^svDZl*y_|6cS8*GCBBG{{XHPRm!RWaui#>_Qy$6B-6%`GnNu<<{;Yp z5PM^s@(oVy6SKrmea-%Vo(o@LM+gl1SqiH^^FIUg;}Fxctx89!e2=WLJAa?w1gsiq ztj-H*w-?(S->!odDs_o7GxOtvw)sj?uH296VjTgh5X-jSn_*pSC{`|#1rj#k4c6Z*H_Oo`mNf`9w#)&w#~9-> zqJ?S{M&ZG_SYKjE=i~vwf=Sctip@>5sSI*|4$$T~3`Uk@If5~xG?INEmD zlkyu)AkP*~YT-cooAB;ghUKvgMAUeG69^HNi$i&=Pp|p!i9A;A9JKVZka|&SEp5m< zfsb;fLy^GuP=Js@7w2=fE^`EBjJ1^!tCm(j69d}V3q6bql>jxB^xTX#@cgI@k_8T7 zLV33fwif4Ak;zQ0I4b&p`uhHuz$-s#Q6Qs_PT=Vy^2T2zX2)Vr7RI0Uk5JQ5Qj(&@ z2H<*gjLp~yO7Fe{(8*W?fN|5(Jx)C7U4T+Af@A<#_ZwrDDQ$r)FdGdJx>$h5>+Oz& z+H7n>jffZ;V)|}RnD)dP+}ivPTnaL<$z@rr7~F6V*B#U7jUFaNWjvQYm;>)E7-fvu z9!;=3b23Ov5%yG zc$#{2jwUuWDne{ej<~%eFbPN?g7sIfs5pBW2 z#-zJrHXTTlkk1m>IMZ@%d_i3{nF%U7fN5KuB;aTav&!Zd2t3 z=U459s(TO%FfpXzkclh-kdd(@@IF`$81&5R5W9n6>P_(Wt!d?>Q>jGp9RvUXYmK+( zkbgW)k!5CTl}I20RbUGcSl??4cRtw4X)T6AWYhR>HRNF1s~d}Y9{BAk+M=zV6l8Jc zP!7sIXA#XX(GnQcI)Yi(;%`BZVw<6Mk~g~owi^q7&L4GX&qH}CV}TYxrJnbbdyD%Y zt{CO@^zzmzT2`5fHUR-pExF&nw`^9aS!E280?F&fpG-N+YT$)6he7v$ga)y>^tL4| zYKBaKE_p^2gM&H0}u`mh=}lz{m>LPQgiA1-1RZ z;}gLNNd&8VjqTXsqY$<;aP0{pSg9MZ@AbzJ%#zP6uDZ^inw$J2bBHIXXkm<_l0xZK z=EU$nTuBlnP{$f-B}VK`?t7dxA#FAbq|1kci0TkeDr^bG=O$y;V9To4(!V@sz7}$o zG5h+CF`#8|zgbzqQ>T)680sX+JXQF`o@*&Es2g%cu?|eElr)NrZz*ME_U8ons$ROq za1`{EeDUopZ4O%ui=~aV1-A!n@IVQd%JkJPZs1=@9-y2J;#j}wk;G?9IAm-804=!r z;exr2reh>(%x~mjwjs{QIZO~pr>KBf_um-853~w!GFn0y5F-a~d}VSE$GPu~W5#eX z@boga;k>r=wldZPPQFsY{+JACvKp0FBSEn|4@?Tgp=^`eH^5A|q`*@yu}&8GsfebLoTyG6t2HjYJD~0|knQmLsV_ z003K$YznbEc|h|n_rZ}z(Tw#Y18~Cof(P$~l?1qDP*jYnEm6f!P9xIJqgJE2-rQdQ z0N}w9tZHQ|QPxR(k+s1CumBzZ0In;t)yXUxOs%9K3X$A_Zr`VGd~mYO_fTSk%)b#k z5=rcPcE>cKYq72LcPg|}YhteA_XofA!l`VGLx0;l@qkKW+0{JGz&D|8lDWp$L2lVrib(}y7EYt6*eToRj+R+v z0T`Q(7rn7OD&lwYE|QxU9AY&ng^5cs*pa{Gj;=}QEgXruALwfkc?Y%dK&XOMI@Bw0 z3T=UkDvfc0Vtx`Yjv`PbjY5TDd!4bkrfM8g#x$OjhH^+ZTUy?qt{P^Fk%4pu(>$Xa$mEGt{V9q}0Yrc8|<0w)ejL z;x2Ue(M)*Uo{E(vBEvk;#S0?bk2&+M{{Yi$cUhR3Dr17F-bmpZ7UY`_z|=>EE0w;OQu=! z+A4bL3bYZyD=cdeo8d@;?#;I(aeeTKNJx4LNkirYjs941mI{h&wIlnwl3+jRuDIi9k1I_ zAJ8Ay6NNU|V94oK6kR@TUSdxyZ@I+q!Kr`)Yug@ujd zD=RM79sMz5@h(!!Pem&s0Ijwi$=H1N$2lbz-ty{MB0APzI+ZsJyr~|$9BTnrl7*t4 z7AvauxW`^0fu)SAC{r5wO{_=D=#wW++}GrZf0{K5iP;`eQMuLXzkpf(^Z~`U}KaFHgge%NnbVomox81Hm4+#xt5Z zjO^kj40k(ig_R71!$fDz@ZVxPU}~76btO3B{qSI;b=<~VeTA{)5xjB|@iT%r7uyk( zQra5PS*)daHIJ`zSiHj<%#3-IrynQh@Nj3w$%9E(uk-i1YGRR?uXrPqH{2(q)V=3hFx*O zIgyX^ZRiFEq|F&xGg87x3EVN+8r=N1#9NbEK#&DBn^b^{A1?a~;zp0oz>#}zbH*L` zJ1K^y878a+M1ExkEn{x>BHx|?sHBEkim4!CfJzi!DPlObk}dM%+ZD8d9wn%TQYHTY zM{s@cL`f;CiE5NS+KDHg`{89?!x^>Fag#kcttm9=n9|PUQ$lrAMQ+7QZVnlEC&f^B za!GRzp^~MTK|LayDYeSC*ME^X8$I!*3S_i!WN=0^DN#j3$ebQ5qrLG;%rfeXrm4i{ zkUYzBkxU<^d9ktB;TAO0QucQ&-yRK`ABc0>SsJFZGN*^{Gfrj^M%RfN!=LqO2H!j3 zR1?xw%C$8V)6O&i%`Cci?`2u?W7a$H>R&9>y*hUfA)yqsT(P6H@%s1dGYPkpb3 z6x3AE$frWRzy6>wEK<)Vps68XE&|{BVRm_$Ee#J=8H!Xe(z?>cPjGMFn_<5*^m4}> zq+dKg;yMVKO(ayauonu%4ZUrPl`oIxj4%F~L_qj;19A1o=f4NchIXiOsEVLp-_!d2 zF`-k+A3;@N>vP-XhmKi3$Ipplm&DSg@y$+aHeX349Wo@9lc;M=XxyMIMk5!!b~Fo>VWG4sV2SBSj=rK;p05zUOnfxy3pCkh145iF0A%mZw_D7GAI21d3k4_|?+Y)6uJY zX}+EHUwkUa{6$++FNdVC4_hQ{Ty4DftB?)9m&{9T^5Y1adHCx80P*y-^wX)MPMdW! z>iB%Oz3sK_h#lomx|rr@#Vhq;D2fWUqTJf#Y9*|0FOAIBSWk$nrOCo|0@Ecxr>BQo zAc;a2-O#JHzyanT&3oGbR7z_Ml1}rqCoVNn!d}{B6)O#i<&coab9*;80O3PcPZwF$ z)b*G&h|xw+k--R7z>A&0zUS273X1xPB$h^;-dKe@0ICN}6d?ct$^k{$K>bbw$Puhm znS7O59CGE#e)i!i6jV*6e;uN{XI`LexAPVpZHn~Jh-8vB^8{j=h#qSjU-ZPOTP$)@ zx;ukRL4=T}K@u4~H}evAz6F*;Gcz^Iu`Er7zQ*V4HCc>c4I#GeNY6q>c3r3B$fp1}t9-;upRv~J*LARLwFg6|x_DG{U z6hm$-1_PQT)wBvnpcpl0iH|G^9+>!|J*|J4z;bJ|aA;H+RG<2I*VryQin>T!QX&f* zf-rHX8=gnY5f~Lt_83Pf%d;r3YMjPt(UMVhCgfp6!5OckNbPJ`3~RsxZ)^)th@*@B zF{35v4Y5m9%FAb{oTwWM@qpy2>B!8zQpD;e_9qOcHvUn7CPHs@7^0?YV%*}ns-abq zBv7hX$}CO&aFq~5Bh%mF!|H_v2(|&1I|~7d!c?gR->}GO1Ja47l@*%sMy#Q=T}dQ< wV-@y^%9zM1FSzx?8nxF?O{vIb)E4c^lOiET&UP@Y7ModgWM?qOlT~kX_QeM|USHnP6LsJ7}2qQZ?I~NC+Fc+7w zhLo6;2Fc+60R}-1h7^VrW=16jCP7AKLB{__7^E2(n3x$s&V>OcW(F2kMmBb!q`CkD z6B8373nL3NOaUX4AhV(&i;!brBCAqiqpH zKiz-qjcQHAmA5%wVe52W6?GeLS>qn+EPi)c%fXeoh8OG0zDY#QKlGo$(OEv(IpGqQ zr&Z>HDQ|+kCWk~G*Vw+S=ehbJR?D?3c{L)ge_n8V*J3T%n1w4N(`WI(2!D*;?*7`I(|?>?C*3d&$@4ayLk0#p{bV zPOf@l)Y{7xw6|5J>dDG}tGNFR%8#f0XJBl#np9Hw`0nC~lcwyvaO0e2CQqNXS4a6? zI}eAXv_rEVo%y$z?OX58gZ8XBKen#(y=M7o&%Kfr>xeI5>m$DNk4ZoK_haJ{?ZnZVPn zUV0PfUn%)ByQrh*#^iW~&C8~?w(g0vPrE0%@^R=%=M^u%X4rN4@y)w9`?79bbjI?> zCq*y&ya~$t!~QRF?vhpI{tc5H?HDrmE>M^vRK+LwjcfDXGa7bBoTr_Tn|k&82d{5z zmH|iJys(_(b)DgqvgUgAsL+GLUByS1tZ=iN`+b(4`GE+-nD0*ckM6|3p0S}m!uaUz zZP|%OzlAbSU%pv%PVU*{Yd<*Mc0AcUn?GCND%S>~tp|nwGdNvNnG*D%VeS$3jT1D2 z^7J31q*po3`)S=TpYwb1^T`Wij!t>YGH(ZyKwbM`>4X<29(7kOy6=1W@-{IYQ`a{J zo=R&o%Zzj?{#{-#uThiiq4h&^^XjFk&kyD-p3NM-xL8GZ>ZZrvy52;Z9GYjgZGzb4 zn@eYl76hN{yRrONd}*bE(D8kdoLBVTE;^^u;k^lOiET&UP@Y7ModgWM?qOlT~kX_QeM|USHnP6LsJ7}2qQZ?I~NC+Fc+7w zhLo6;2Fc+60R}-1h7^VrW=16jCP7AKLB{__7$g`Nm_d$30*p+|>_8bw0Y)%DmJwtU zQUpqgqe}oi%ft$l5EBH-AZY+HfwtUY;9+J2TFETPV9)UMIUBp|J%%lp7DyCmEj#iv zgC)JmbrO@7nigXN!-h3+qD@Dbm%8fOdTQ*obqP|NH$h6l(%WUhTGjRwXGd(77xQwC=~IMMkfTUzxo!ejyp*y@ZpCVU5IsUXc(* zk(iJ*U!%CEe4Vp=k!<>^lOiET&UP@Y7ModgWM?qOlT~kX_QeM|USHnP6LsJ7}2qQZ?I~NC+Fc+7w zhLo6;2Fc+60R}-1h7^VrW=16jCP7AKLB{__7^D~&n3zGXMF1v7W}th4a;gFhOd!C_ z09V1tB*?7DVkqRO6qqPn*l08ns7#U(B#&YQBNNaFpp>*APy!^4FdbxqaG>Jn1?7FJv`h+T;7}f{tHyC|$+qde==@*&yaVIh&y%%ph&}misW|{BZUiHoDYPluG z6D>E@N))H&*PT2$Y3hukr*CG5&WQOLl{+Kd+PgaW$+Vj>iJB%IyE2Vd9z7N6)*}T^8Kzptm_M#UeCC3~j3y@^;f|B_rRFGq-v?$$kXOcK{J zrj&{>nVq!On!J4DQoS=ji&W(=U#c`xHuJK)`RVPO&1P|Lo~O@P8`FAr)|Z}1xi2c! zH8U!YzxYPg?B9XHvLyaeTke;pq2|7t7gcw^*{*dz{?T#P#m9(zg8zj;%7Yy0rZUx6cHjc@3PBvDJp@Cx4mc>@MlC ztXX#M_d1(D&sTjq7c?>aqor}4p8nLxO)?b+)h_mJ|G2I2nv9L_va=hGEm)~^RX%jX z$MtWHhp+2--rjXl=+fWcY`2_F)>JFH{AbYZ@0X6(R7}|C*7~2pcH>;7Z=IPYR$Z%I zj#l#tiA`WGJCONW%}4iihGF5f+g6r^t4q4({?dBC@|?vw!+?Ls^6u{cqpEiQp_cU~ zDM78T+gz^ZR4>ou_|M>=J^5mE-szIdzqHrBaQG3Nb6Fxv`=Hpii_4^6tmL{>p|9or zS1eTI^qtJTFJ~^#tM3ph^$cd(u3g30dQ-LbrtCk3sYdo3k*ZlQX6y<(6npzczxLOK z2d1p?T(15_DUYwkrbNO-7 ze+JPvOe@?Lv9-2d;BQ&j`+}iutDlp621CK5Uz%SIFevKIR+y^5;2U|#Y25*~!16^e PbQ$^lOiET&UP@Y7ModgWM?qOlT~kX_QeM|USHnP6LsJ7}2qQZ?I~NC+Fc+7w zhLo6;2Fc+60R}-11`!4kW=16jCP7AKLB{__7^HxXWMT$76aiS+7@3$^fpXFUKyRQ( zg19WKih@8%F-9OjXacfWn3;g$;({0wj7)<6Z!z!yZDA5*7G$tzSXXh`>YrcKCYDcK v^QA3*T)y%$a?k3vzKGX?)0>wUWiw9E%QW_|6r1EJcwJ_~q=;4S|8D{SHmE(Z literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/extract.png b/test/fixtures/expected/extract.png new file mode 100644 index 0000000000000000000000000000000000000000..689fa1620c9156ddc7e0bc6c14e2e27457da9a15 GIT binary patch literal 5396 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

H(J8&1Oa4L|1Ezg*%= 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/extract.webp b/test/fixtures/expected/extract.webp new file mode 100644 index 0000000000000000000000000000000000000000..9165ab5a0681017c6c192e3502b3627c83d2f644 GIT binary patch literal 4862 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/flatten-orange.jpg b/test/fixtures/expected/flatten-orange.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18f49bb87e5c5fd010bc3e74a3ecc2dc9662eff2 GIT binary patch literal 3829 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 Yu5$~A;%qn?!SaXQ6z)jz-1pW01D1)g7ytkO literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/flip.jpg b/test/fixtures/expected/flip.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b56a58e0d47e861686c384d1b0e215372e8d473b GIT binary patch literal 14918 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 Yu5$~A;%qn?!SaXQ6z)jz-1pW01D1)g7ytkO literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/gravity-center.jpg b/test/fixtures/expected/gravity-center.jpg new file mode 100644 index 0000000000000000000000000000000000000000..592b2131a8e95b0cf7bab8ee0740af0d5ec9bd25 GIT binary patch literal 5347 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 ZSU)M6!`pdN_v2e^&$8KJhQjUa{{SV}@WucD literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/gravity-centre.jpg b/test/fixtures/expected/gravity-centre.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1efc4a14726f91ad9124ae70b04be105c53b9ba GIT binary patch literal 5540 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 GoBIzQz&h3d literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/gravity-east.jpg b/test/fixtures/expected/gravity-east.jpg new file mode 100644 index 0000000000000000000000000000000000000000..769eef96dc86b3a5667207097fe34a76aa7e3b1d GIT binary patch literal 3873 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/gravity-north.jpg b/test/fixtures/expected/gravity-north.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fcf199717bd44c39ef49daaca6d623c3616d0fd GIT binary patch literal 3447 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/gravity-west.jpg b/test/fixtures/expected/gravity-west.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c43ccff459060061d986707ebb9465740d35a5b7 GIT binary patch literal 4455 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 HboK2&r(-}% literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/resize-crop-extract.jpg b/test/fixtures/expected/resize-crop-extract.jpg new file mode 100644 index 0000000000000000000000000000000000000000..166e5e9671848197b8f898f26cc5661e96414615 GIT binary patch literal 1390 zcmb7;cT|%H6ve+UA?rgiVI-CvPzVq#3By3KN>~yEBnT)_Dlo zgyKXJnFcVFt+HfPzzP^kMMVLFB4w$h@${Vb^v~Y+*FC@Y?z@U7ig5tTaPx2jKo9^x zZ60>u2yK|o1yM1(rUSHpf7$s@A`A|I%19;C$0>o*!vB2;!f*I8hq z1vHRB+eTpMUwGm`+!MJ^0?lV#pNgsp59w>BWuhqY5*G=l@cS#z6R3w1ko2`5?mp`Y z0D2?bPuJYs|H*q+tITQ_c5|4URng?=ONV%`>jeu0Y0s^EAlgrKxVBCxhDIA;9+ke# zwRDMCZ9_TgyJ5XR`!Js)aZ}>y(ZXvc=*z1vT4^Z%Vt&r@+72B1r`+IS%QOD@Pj-wr zP}t|=nQhi>_1yetvjWXty&>a(-(9BIiSZQ)^{Tu_6I2gd=jGVSX4k<_z8?iftrJH_ z@fy0L$=a-jrn7v@BB$Bdjs5lJC3c96Vm z8>Lb<`L2B0wylVuGnwXasiX6Q@zcdZUQSn$)LM7P<_)}PUlt$Zq-vHyr@x5aW!zQ+ zPj0)7jmrdsur42y8D!>lSS#jpZgDp!G^MGoB2~8gq-6{zMSL{kvZ>lfbJYGN1PvQ? z44Dc0&E!Uj-Rz)nu{-tcP+7vD9a=c4qiUhi_qcLV40MIK-*Xt?o#<*1{@NKX)h)l` zJrLNr($&+`(Bu>tWoC-#cr7~dD0?ZC|4vX%l_`5+cI|UHF$fR1Ob_|dockG-f=pV2+!lW&|%>KMSjug+syRH;%4fmB|$;SNnIB36kdJI*%PJ-yW?$~SqBlT2S*~hA0C)?l)Vq! zJ5+t>O>gIWnm)n4df7a9PT=F37lyVdCX=dv1yBfY#%XSgxgW5IKU)JyzL7Uv|w)NZ@nMOZ)9JIuq;2+4^J z5mmMT-NdX6){#ut$bmj?Yf~x4pA&^i&$aY-l-b3R)O-DI}tZ=a(R%(tj9 zD!3UV(1nmSa1PPhV0)hz$ww73Xe_o&0M?bEA46s4|f&Ku3 z0Dx8l^b^1bpb$tD5`jV?QD`*E0E5L~3=J`+CLgWAT9^`v7N+LrmR2+yOR_!1+}w79 ztv!7mV?Bdp)+_*Zg=C!}|HeoSAO;i4Kl*ooea%{Nnc6D1~*%C0qJEQEa#K?nP{gBQL&l(GVNl) zi@C3t8Rar|z&lNOWp=x5QE8cD-KXPyCB7A`)DD5dVlTNL^J}j(pODC9a?%75DjmJ) zh8~crzdwh6?z>kcDSC4)Qs?SNd@_9CbJa3J;%noFYKTRV<*haQ!nB|gFZt+UO6_#k~#FmFM1@e6NWw;E6ix-Qi5?%TXXpPw_%UNq25cX8Wj>JTHnJ7aRDrrOmFnxlTJ;J1V2eja(LPNp!80TjIGk zC0R(lIa|L|({p`m1<9|U*yS!)J!nH^_Jr;8O{-;5;CL;*a2kW|EVmZL43&s~3}hDB z$}fA#;tTDk)VJ!?=~Di9a$&-xvuN%m>yT&C>8Zvpl2oCI4r1g%DSCi@lO3Qe;B3~k zo*$fxSzDiM%XbQ_wdl=kRb5MKvDXQIsr}gRpkb26co(0i;!FoUliqQDIIR|t8KIwJ zcAQfhledR)F%3TBC*{thoco=J!Vy)}{^C8j_<(Qy`u>=FzuAJhUf(|T-Zv1C0KD9s(B4uX($IV7?a98yFl8vE0ptxQD~%MeTxsSGQd9#!_w|UD zl+t6ie(S=KjPLkOUhC6K(=i<$Lar>P9nD#^o8cBjckXR28^e05e64neSeTD0{K*l6 zKh-E~Br=z)jTTdqXzp?Orm@iLJ6yC|(A^V6wYa(TMwh+8m3sS(^h%#M30X?Y*4mS+ouz11renHjSnQlCWfa0?f_LB(3`D)_!r8Rt_}bI literal 0 HcmV?d00001 diff --git a/test/fixtures/index.js b/test/fixtures/index.js index 6a47a5c6..29d704fb 100755 --- a/test/fixtures/index.js +++ b/test/fixtures/index.js @@ -1,11 +1,42 @@ 'use strict'; var path = require('path'); +var assert = require('assert'); + +var sharp = require('../../index'); var getPath = function(filename) { return path.join(__dirname, filename); }; +// Generates a 64-bit-as-binary-string image fingerprint +// Based on the dHash gradient method - see http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html +var fingerprint = function(image, done) { + sharp(image) + .greyscale() + .normalise() + .resize(9, 8) + .ignoreAspectRatio() + .interpolateWith(sharp.interpolator.vertexSplitQuadraticBasisSpline) + .raw() + .toBuffer(function(err, data) { + if (err) { + done(err); + } else { + var fingerprint = ''; + for (var col = 0; col < 8; col++) { + var gradient = 0; + for (var row = 0; row < 8; row++) { + var left = data[row * 8 + col]; + var right = data[row * 8 + col + 1]; + fingerprint = fingerprint + (left < right ? '1' : '0'); + } + } + done(null, fingerprint); + } + }); +}; + module.exports = { inputJpg: getPath('2569067123_aca715a2ee_o.jpg'), // http://www.flickr.com/photos/grizdave/2569067123/ @@ -35,6 +66,30 @@ module.exports = { outputWebP: getPath('output.webp'), outputZoinks: getPath('output.zoinks'), // an 'unknown' file extension - path: getPath // allows tests to write files to fixtures directory (for testing with human eyes) + // Path for tests requiring human inspection + path: getPath, + + // Path for expected output images + expected: function(filename) { + return getPath(path.join('expected', filename)); + }, + + // Verify similarity of expected vs actual images via fingerprint + assertSimilar: function(expectedImage, actualImage, done) { + fingerprint(expectedImage, function(err, expectedFingerprint) { + if (err) throw err; + fingerprint(actualImage, function(err, actualFingerprint) { + if (err) throw err; + var distance = 0; + for (var i = 0; i < 64; i++) { + if (expectedFingerprint[i] !== actualFingerprint[i]) { + distance++; + } + } + assert.strictEqual(true, distance <= 5); // ~7% threshold + done(); + }); + }); + } }; diff --git a/test/unit/alpha.js b/test/unit/alpha.js index d022f762..59169a8d 100755 --- a/test/unit/alpha.js +++ b/test/unit/alpha.js @@ -13,7 +13,12 @@ describe('Alpha transparency', function() { sharp(fixtures.inputPngWithTransparency) .flatten() .resize(400, 300) - .toFile(fixtures.path('output.flatten-black.jpg'), done); + .toBuffer(function(err, data, info) { + if (err) throw err; + assert.strictEqual(400, info.width); + assert.strictEqual(300, info.height); + fixtures.assertSimilar(fixtures.expected('flatten-black.jpg'), data, done); + }); }); it('Flatten to RGB orange', function(done) { @@ -21,7 +26,12 @@ describe('Alpha transparency', function() { .flatten() .background({r: 255, g: 102, b: 0}) .resize(400, 300) - .toFile(fixtures.path('output.flatten-rgb-orange.jpg'), done); + .toBuffer(function(err, data, info) { + if (err) throw err; + assert.strictEqual(400, info.width); + assert.strictEqual(300, info.height); + fixtures.assertSimilar(fixtures.expected('flatten-orange.jpg'), data, done); + }); }); it('Flatten to CSS/hex orange', function(done) { @@ -29,7 +39,12 @@ describe('Alpha transparency', function() { .flatten() .background('#ff6600') .resize(400, 300) - .toFile(fixtures.path('output.flatten-hex-orange.jpg'), done); + .toBuffer(function(err, data, info) { + if (err) throw err; + assert.strictEqual(400, info.width); + assert.strictEqual(300, info.height); + fixtures.assertSimilar(fixtures.expected('flatten-orange.jpg'), data, done); + }); }); it('Do not flatten', function(done) { diff --git a/test/unit/crop.js b/test/unit/crop.js index 644804c8..d40be672 100755 --- a/test/unit/crop.js +++ b/test/unit/crop.js @@ -13,11 +13,11 @@ describe('Crop gravities', function() { sharp(fixtures.inputJpg) .resize(320, 80) .crop(sharp.gravity.north) - .toFile(fixtures.path('output.gravity-north.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(320, info.width); assert.strictEqual(80, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('gravity-north.jpg'), data, done); }); }); @@ -25,11 +25,11 @@ describe('Crop gravities', function() { sharp(fixtures.inputJpg) .resize(80, 320) .crop(sharp.gravity.east) - .toFile(fixtures.path('output.gravity-east.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(80, info.width); assert.strictEqual(320, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('gravity-east.jpg'), data, done); }); }); @@ -37,11 +37,11 @@ describe('Crop gravities', function() { sharp(fixtures.inputJpg) .resize(320, 80) .crop(sharp.gravity.south) - .toFile(fixtures.path('output.gravity-south.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(320, info.width); assert.strictEqual(80, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('gravity-south.jpg'), data, done); }); }); @@ -49,11 +49,11 @@ describe('Crop gravities', function() { sharp(fixtures.inputJpg) .resize(80, 320) .crop(sharp.gravity.west) - .toFile(fixtures.path('output.gravity-west.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(80, info.width); assert.strictEqual(320, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('gravity-west.jpg'), data, done); }); }); @@ -61,11 +61,11 @@ describe('Crop gravities', function() { sharp(fixtures.inputJpg) .resize(320, 80) .crop(sharp.gravity.center) - .toFile(fixtures.path('output.gravity-center.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(320, info.width); assert.strictEqual(80, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('gravity-center.jpg'), data, done); }); }); @@ -73,23 +73,18 @@ describe('Crop gravities', function() { sharp(fixtures.inputJpg) .resize(80, 320) .crop(sharp.gravity.centre) - .toFile(fixtures.path('output.gravity-centre.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(80, info.width); assert.strictEqual(320, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('gravity-centre.jpg'), data, done); }); }); - it('Invalid', function(done) { - var isValid = true; - try { + it('Invalid', function() { + assert.throws(function() { sharp(fixtures.inputJpg).crop(5); - } catch (err) { - isValid = false; - } - assert.strictEqual(false, isValid); - done(); + }); }); }); diff --git a/test/unit/extract.js b/test/unit/extract.js index d2fc63f3..9a1f2f79 100755 --- a/test/unit/extract.js +++ b/test/unit/extract.js @@ -12,22 +12,22 @@ describe('Partial image extraction', function() { it('JPEG', function(done) { sharp(fixtures.inputJpg) .extract(2, 2, 20, 20) - .toFile(fixtures.path('output.extract.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(20, info.width); assert.strictEqual(20, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('extract.jpg'), data, done); }); }); it('PNG', function(done) { sharp(fixtures.inputPng) .extract(300, 200, 400, 200) - .toFile(fixtures.path('output.extract.png'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(400, info.width); assert.strictEqual(200, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('extract.png'), data, done); }); }); @@ -35,11 +35,11 @@ describe('Partial image extraction', function() { it('WebP', function(done) { sharp(fixtures.inputWebP) .extract(50, 100, 125, 200) - .toFile(fixtures.path('output.extract.webp'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(125, info.width); assert.strictEqual(200, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('extract.webp'), data, done); }); }); } @@ -47,11 +47,12 @@ describe('Partial image extraction', function() { it('TIFF', function(done) { sharp(fixtures.inputTiff) .extract(63, 34, 341, 529) - .toFile(fixtures.path('output.extract.tiff'), function(err, info) { + .jpeg() + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(341, info.width); assert.strictEqual(529, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('extract.tiff'), data, done); }); }); @@ -59,11 +60,11 @@ describe('Partial image extraction', function() { sharp(fixtures.inputJpg) .extract(10, 10, 10, 500, 500) .resize(100, 100) - .toFile(fixtures.path('output.extract.resize.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(100, info.width); assert.strictEqual(100, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('extract-resize.jpg'), data, done); }); }); @@ -72,11 +73,11 @@ describe('Partial image extraction', function() { .resize(500, 500) .crop(sharp.gravity.north) .extract(10, 10, 100, 100) - .toFile(fixtures.path('output.resize.crop.extract.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(100, info.width); assert.strictEqual(100, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('resize-crop-extract.jpg'), data, done); }); }); @@ -86,11 +87,11 @@ describe('Partial image extraction', function() { .resize(500, 500) .crop(sharp.gravity.north) .extract(10, 10, 100, 100) - .toFile(fixtures.path('output.extract.resize.crop.extract.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(100, info.width); assert.strictEqual(100, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('extract-resize-crop-extract.jpg'), data, done); }); }); @@ -98,11 +99,11 @@ describe('Partial image extraction', function() { sharp(fixtures.inputJpg) .extract(10, 10, 100, 100) .rotate(90) - .toFile(fixtures.path('output.extract.extract-then-rotate.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(100, info.width); assert.strictEqual(100, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('extract-rotate.jpg'), data, done); }); }); @@ -110,69 +111,44 @@ describe('Partial image extraction', function() { sharp(fixtures.inputJpg) .rotate(90) .extract(10, 10, 100, 100) - .toFile(fixtures.path('output.extract.rotate-then-extract.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual(100, info.width); assert.strictEqual(100, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('rotate-extract.jpg'), data, done); }); }); describe('Invalid parameters', function() { - it('Undefined', function(done) { - var isValid = true; - try { + it('Undefined', function() { + assert.throws(function() { sharp(fixtures.inputJpg).extract(); - } catch (err) { - isValid = false; - } - assert.strictEqual(false, isValid); - done(); + }); }); - it('String top', function(done) { - var isValid = true; - try { + it('String top', function() { + assert.throws(function() { sharp(fixtures.inputJpg).extract('spoons', 10, 10, 10); - } catch (err) { - isValid = false; - } - assert.strictEqual(false, isValid); - done(); + }); }); - it('Non-integral left', function(done) { - var isValid = true; - try { + it('Non-integral left', function() { + assert.throws(function() { sharp(fixtures.inputJpg).extract(10, 10.2, 10, 10); - } catch (err) { - isValid = false; - } - assert.strictEqual(false, isValid); - done(); + }); }); - it('Negative width - negative', function(done) { - var isValid = true; - try { + it('Negative width - negative', function() { + assert.throws(function() { sharp(fixtures.inputJpg).extract(10, 10, -10, 10); - } catch (err) { - isValid = false; - } - assert.strictEqual(false, isValid); - done(); + }); }); - it('Null height', function(done) { - var isValid = true; - try { + it('Null height', function() { + assert.throws(function() { sharp(fixtures.inputJpg).extract(10, 10, 10, null); - } catch (err) { - isValid = false; - } - assert.strictEqual(false, isValid); - done(); + }); }); }); diff --git a/test/unit/rotate.js b/test/unit/rotate.js index 58f473a5..d722b3c9 100755 --- a/test/unit/rotate.js +++ b/test/unit/rotate.js @@ -37,12 +37,12 @@ describe('Rotation', function() { sharp(fixtures.inputJpgWithExif) .rotate() .resize(320) - .toFile(fixtures.path('output.exif.8.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual('jpeg', info.format); assert.strictEqual(320, info.width); assert.strictEqual(240, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('exif-8.jpg'), data, done); }); }); @@ -50,12 +50,12 @@ describe('Rotation', function() { sharp(fixtures.inputJpgWithExifMirroring) .rotate() .resize(320) - .toFile(fixtures.path('output.exif.5.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual('jpeg', info.format); assert.strictEqual(320, info.width); assert.strictEqual(240, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('exif-5.jpg'), data, done); }); }); @@ -85,26 +85,22 @@ describe('Rotation', function() { }); }); - it('Rotate to an invalid angle, should fail', function(done) { - var fail = false; - try { + it('Rotate to an invalid angle, should fail', function() { + assert.throws(function() { sharp(fixtures.inputJpg).rotate(1); - fail = true; - } catch (e) {} - assert(!fail); - done(); + }); }); it('Flip - vertical', function(done) { sharp(fixtures.inputJpg) .resize(320) .flip() - .toFile(fixtures.path('output.flip.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual('jpeg', info.format); assert.strictEqual(320, info.width); assert.strictEqual(261, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('flip.jpg'), data, done); }); }); @@ -112,12 +108,12 @@ describe('Rotation', function() { sharp(fixtures.inputJpg) .resize(320) .flop() - .toFile(fixtures.path('output.flop.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual('jpeg', info.format); assert.strictEqual(320, info.width); assert.strictEqual(261, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('flop.jpg'), data, done); }); }); @@ -125,12 +121,12 @@ describe('Rotation', function() { sharp(fixtures.inputJpg) .resize(320) .flop() - .toFile(fixtures.path('output.flip.flop.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual('jpeg', info.format); assert.strictEqual(320, info.width); assert.strictEqual(261, info.height); - done(); + fixtures.assertSimilar(fixtures.expected('flip-and-flop.jpg'), data, done); }); }); @@ -139,12 +135,12 @@ describe('Rotation', function() { .resize(320) .flip(false) .flop(false) - .toFile(fixtures.path('output.flip.flop.nope.jpg'), function(err, info) { + .toBuffer(function(err, data, info) { if (err) throw err; assert.strictEqual('jpeg', info.format); assert.strictEqual(320, info.width); assert.strictEqual(261, info.height); - done(); + fixtures.assertSimilar(fixtures.inputJpg, data, done); }); });