From e8cdf8e2fe69286290b7fbbbd99da333877406c8 Mon Sep 17 00:00:00 2001 From: Steve Pemberton Date: Sun, 21 Oct 2012 15:31:11 +0100 Subject: [PATCH] Fixes for shift selecting/unselecting groups Shift selecting/deselecting no longer causes the group to have its transform re-applied. You can no longer drag a shift added object separately from the group. This also fixes the issue of the object jumping on addition to a group. Objects in a group are now rendered to the upper-canvas in the order they are in on the lower canvas. --- dist/all.js | 30 ++++++++++++++++++++++++++---- dist/all.min.js.gz | Bin 39333 -> 0 bytes src/canvas.class.js | 17 +++++++++++++++-- src/group.class.js | 5 +++-- src/static_canvas.class.js | 8 ++++++++ 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/dist/all.js b/dist/all.js index 3156b405..d352fcc0 100644 --- a/dist/all.js +++ b/dist/all.js @@ -5422,6 +5422,14 @@ fabric.util.string = { // delegate rendering to group selection (if one exists) if (activeGroup) { + //Store objects in group preserving order, then replace + var sortedObjects = []; + this.forEachObject(function (object) { + if (activeGroup.contains(object)) { + sortedObjects.push(object); + } + }); + activeGroup._set('objects', sortedObjects); this._draw(this.contextTop, activeGroup); } @@ -6382,11 +6390,10 @@ fabric.util.string = { this.onBeforeScaleRotate(target); } - this._setupCurrentTransform(e, target); - var shouldHandleGroupLogic = e.shiftKey && (activeGroup || this.getActiveObject()) && this.selection; if (shouldHandleGroupLogic) { this._handleGroupLogic(e, target); + target = this.getActiveGroup(); } else { if (target !== this.getActiveGroup()) { @@ -6394,6 +6401,8 @@ fabric.util.string = { } this.setActiveObject(target, e); } + + this._setupCurrentTransform(e, target); } // we must renderAll so that active image is placed on the top canvas this.renderAll(); @@ -6700,6 +6709,7 @@ fabric.util.string = { if (activeGroup) { if (activeGroup.contains(target)) { activeGroup.removeWithUpdate(target); + this._resetObjectTransform(activeGroup); target.setActive(false); if (activeGroup.size() === 1) { // remove group alltogether if after removal it only contains 1 object @@ -6708,6 +6718,7 @@ fabric.util.string = { } else { activeGroup.addWithUpdate(target); + this._resetObjectTransform(activeGroup); } this.fire('selection:created', { target: activeGroup, e: e }); activeGroup.setActive(true); @@ -6887,6 +6898,16 @@ fabric.util.string = { this.upperCanvasEl.style.cursor = value; }, + /** + * @private + * @method _resetObjectTransform: + */ + _resetObjectTransform: function (target) { + target.scaleX = 1; + target.scaleY = 1; + target.setAngle(0); + }, + /** * Sets the cursor depending on where the canvas is being hovered. * Note: very buggy in Opera @@ -11771,9 +11792,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { var groupScaleFactor = Math.max(this.scaleX, this.scaleY); - for (var i = 0, len = this.objects.length; i < len; i++) { + //The array is now sorted in order of highest first, so start from end. + for (var i = this.objects.length; i > 0; i--) { - var object = this.objects[i]; + var object = this.objects[i-1]; var originalScaleFactor = object.borderScaleFactor; object.borderScaleFactor = groupScaleFactor; diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index e2c1a5f292b5cae5fa72c4b25eb17618609d86c2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 39333 zcmV(yK4H!I17U1zE^TRUE^2cCj9PnR+BmlVD#W*&v4Sv=+1YysM`hcz zoyTp{?k2NsFJZa{L~v_tYRh>P*w21{NAg1^r0pLGlB~zkdHl}9?jE%!c^J(Gt$)YK zOq!1OF>5W8SsuwuJbC%@->su=_voPYBABG%lpdZYtGhJ3TBz1>ulGNl<6i%mx89^- ztiq(_{+_4dUF-jXJC(_6-g*_>hRfFJLZmY5-^=88SY&Pp_nPy=U51gL& zv)BKdv-Q>8N+$D`yj>-!$_|8+$1^z(V>xpU58YzeYwW{#v1pb|^QDZ{&Z^?+O&HIT zo5r)DYj*I;m7;9$;(=Kt%nuvfo1epCX~&t9Kiynpk&wNT6G z@k#Mt2D8T}UGp zlBpn7P8hd#H!2&?BWYhZ%wC3{WOR21tq=v@p62tpOuxocVL$Up&Zqf2iN!pRr_hbq zW$UupN?pm;G(`!u2uYGtDWv}K^}tnhw_0QvG7YW=Z_vLn%}J2S^YDult02wfZ?SUK z2*-yi>#StjkxOUH`#r{s-Irl>Colu_sE+A6V^1Y7lN*_yVlTItdLv1-tEr}oz4XIO z-9@r`rhCqKvvJ}iT?Ub3CS8Z}=4o3u>+TODl67tmi8DncPgF*d+@{8Ga+>O(C<3AGAZ{BZ6b zgsc=}9z}jC)@H%rue~0hB*5?g?)A2#6nj++ONmjmIK+6loZ8whGqLUu`uyjg2ej@l z{T_5K5u-8BdEjS4h{}!uwwXvD<0QsYA%5!hFp>)D`|~7qHJZ18EFp}$w#9jQ{6W6i z%ujNbi@ELw=spfufNtWg@@(PG*|s1rJ<0XvIgWZ9=w`rp;$;9cw_>E^s#Hcd8_LHi zQ0Q?wlqYH+ALH+Y22L=bJBkfExayYiaFoEb#@kviG8>STy>Ux=Q&@Nq#yFvBLI(!a zTjHAXS%I8yk}NC~GWgux%40 z?~R6}i#H7}CEwWKj-Ng=VNpy{Y(kk7*z znVM;dc3ZKnWywANzMUz<^;A%^gg>c`!=)cGR_pY<_CwebrnTL(XI#-lCVOD^rPV!dCc-D|lX>T#vn`Csh#**@uw9dL3 z@m)bIkSmbv`86c+GR&~6gmK&(g2u%BpidfZR6{>KJZyAb1QbpiVZyFkz+I+66yd~1 z;NnSI#kQ9A&J9b9Wn2~auH96jtV1~f<}XOsV9llxOc0We2rXywELh5>_Z}Y}-W8-0 zBdeW+;?g=kvgKVKyHC*GBFJ9f#Bb6B;e@)wBZ$th+zVE#2qOSv4vW?>kRb}ArxyRG z=BA3)!NZbjkh=f@%r8{b`|30yz`g~W3+q1M#&n3#4#4sx3a?@}8ZE|P&w{VmplEAWaV+ojLHglg zKuiD(oi30V!c&)A4r(r6*Y;ejuc(60*AKmUm}W}v;pcuXpr@J0y%?07hX`}xE9mk; zUkgNA_XV;FA^K2f3LvcIj9hUT7hzF%O6f(xn%tX4L6(u?F}AKXieO1fHwPVlxq6G^ zdfO0&88!{GKwa<|AqYXWAR`W$31!m8@ldH71broUQ?4~7gv#YWocb)IFu6AiR8Xe1 zzkIk}MyEl19b~V9IJml(SGj=*Dqr5cOuJXyxr`k{NC4Li@mIvq36YqAgrGh@8s;9w zDY2p?uH4HAGU7QK>^xoqV$IVW{?VA~eVDH{+HW1?l%@CV^(%n|!R&5uF9$m4Qv@C* z!A#B&fl@FPNhJ}XAr(RZn%alruCfe{u(VfcmhuTvjfpTHf6TAJe8)6*9UYkattqa9 zE1ZJ8G^R;K&_d2}$GhEMw}LFQMRHTjXZ)bKf}9B=+g$=Qv(6PD1kdXGtI@*~$HUZR z11k*NRe2rixfRL#&)N%P+8WLmQmQ63>D_vF0aY!~JD;WryuTC4Is69)W!q_>v?pGF zl|-nTOA%s&OWYy-(6OT(*6n(Up&UZ;gV^99Vsknc+mR+o@AUj!tSP=4G-EN7q6bl4 zR1RL?EE9Us11ca0llu}JEcGS2qoDKUFXN*}U4{$->Hg}rNcCZY2uxHXN-Hg;tB&fk zwvG8O(q#F-nrg*SnMFRFi?{08?TY&CmY0Aw*mDHMorrl&<_cET0mvY7?fE7~fAJc<bokObPq`Cyt{WHCq1eY$|k8#3Kb1!zuy4+I3rm82aU>d4B+d07xI@ro}+Hu=q z&ejk`BDqL|ID^tGchtHnd#qv9GMxfx298Sppbo)~!y`hVa=d~gXFIYqtlHgSBN zpXw34hD$P z`HJ2v(Fl5+Do9fWQ8a@pc=<1p+-#boAODfd^v;T4YA0wOQGU9+XqJ3T4iD)+Qgh7N zeg5dt-VGl;+PB#Qa~o4DMAgTg7Z-dIMSItNYmwP{!OI+XP~@4m{Tf@{@>{Xi4+mO! ze7eAjsgh|naGXl338`-OMIMD?)Cfx|KTqMoc3*iYG0_SFW9acop&o1}`B%G1|K1#f zYAba)&zyNhVR!mmE0R?JLARaD8Snnyo+TF5xHDJdY_C=RsBIs6Cbhj!M+e`ZeBm$V57N`iE;a?b$?Cgm*h z%Mw~;nL(yrEm9pqXv-uoQ;$;x-JTX(oyHS#4V%rxV4hX$00pXYRhvz5w5rczK=``$ z65o%OY*B}{s6#F4wW(#1aLbEj_3pzOOH;43eYiNvtpM=XZU#1Ox0Md+sYOh(zXGc? zZ&mfCSUtc+)#Rdjkc+CxMNIV!tCB$ zx3tz#4WwLGE!(^5)><`7`!L z=K#Wa8caW(>H%l7>CV$&DWS6)Md5;e7Zya_&{XC2d~aaVvU~!!@Y{@0#P+S^!lY_G z438pa9h!8fS>_Z~^!>{(FpHvC*YR|juwx8kO{+T;F2@Q<-`|&V76z>hYh;XIBcb#W zH&{0p73>-qX8Fyo;hn!KUIY&G%f9eh`jqO2$iX^+&Tp3CY=(=pT{U!^f#aKR2&h8Q zU)}n8C-Y95`VMP5+XfM>q8CJ}qNlS=zH~||lH2`+=@;{Zo?mPZGX`OE1b~ADD3b9O zB*|fuO|9bM_b#;sEoVHW&SVwYe^qZ_*!CwM&2ffxoxFqciVzu3! z)!LB*g)sLg?O~8%1Wg4wK2@;dMoBv@3srEuF(L001s^a0`3QlbZ7`5Z-RPxKor!xG zA{|4@M3vp`0}$Ao`+FnHV(ZBEd2`kEhwbq#xIK> z29QQ;s`tT)#(r48R}gh_?!NUjDA3Dq_Z3w|=qm!cHZ2r1a`cW3b{0>~t7D+h?(**O z{SCUu*kb3s*v0+#VsrO`0yS(;W%PC2Zu`cob;{3Asz&#xqfj&LS8XsnKxSCJY3sl_ z%|&@{KPWz{kw@=%P=1l(Ry(z;&sG>Fd}r@f z-{It-xdSas%kMNeMBjX`LGQNA_gN!iFXCb4EyFB>LH|O-I);s!Zz`tZEMHD!>PFrT z&A(x7%-dBpE&WO-Ym$1rWNxXe{{&)VxW}jMevj|tJtiVMLF}ksqT0Jni3PGPrU-#V zq6;StSzF?5j(=U$Y-^p!jsGQi6|tW;p=$$bEmUt}<*kX`{5` zmr(*mY5Vo8DgK<4>OsTXovT%)vatZ?%xfD9PUf(&ps=x^wz0ghvFO`2_C5Fk+lY3x zSYP8its#arGn~0>Iyr zBDRIq*+Ko^y{cHL_pN*Ycurqcj-2Xwr}Wj%xb6L9xro)bC(}V?8MJv$WeGc5+T&O~ zYL-pM_lPabXb)x96WfzD&HI1%AP3d3+&&COG+xiiE>FPMqBcY?Y?$N8)0m%T@j=q>sgub ze=f)*bP0vPy7)GgPeodOt5kdrf|dhWm7mozz7Pe*L{h<=&Z#a*DZjrE3tjQmpS%ux znm^TREw}mva6#`KSfTzsKEvNN{+7Br7+QHVze5h{-$%MkKYcx)BP`1(O?_xerte2~ zcg5BZPr9lQYyui?#8ru4lam`D*u>;h&&AbfGUn%E&$UcB_PIwzWJuxm8*|>{`ghn& zjL!M(*vR9;O2-;CR(C$kJ%p|UDhHR@G-A#((0XbF_zBIIqR*cYznXWsxOW$g#*-S2 zU$)!)?C~dP=qGW;_!HyQ&-4LJfO~BN+~fg(dtC$ESzDZz`1ZQSx2=7|E0_a)W9)w7 zXGSMpH81g`x9$$IY({248qvkxNY z&xHL2i7%r}u0MR=3oZVk{-^|Qg#_2KGY$t6ATkl-kZ){QETApzkpG$aM%Sy#+(rrC zd>?)On|t(8_T%t3&F^-;o*>6;m#Q~K?ci7O!DKxAsd#2uo6UO5Kh}zmD9*$}omKmq z@fSwYQyE6?N5+2>FS;N7XGIuQKdP6XwP&3rJNk|BXJt_Jg0Bi`zUNOpm8{G{9UEFJ zS5+{^q|pUrN6SeH}g#cl=$` zp>~#?e)ru`p~T(ewrh^pRo#&)-U^Hf@NqaXbhCjA?yNcwNx1v&Tf6)}Z%^CawvFWH zyIy!!;9l@EY>OnY7~G7~ocwGuIa{C4&{{!BRkrr~ zYCdaLeOs2;@YZn$A)Bw+&H6vQzbbuY;SHP~n>%4)n&D$z7?IB6Mk}heBW>R=lqe=G zY=|O}?v^iMyPONYj#B##X%Skwb3A~r(gMAysOU?juS{GdH*AJTSDn~trSaUW{t+G| zXa(@d-WO6-W;^wIRwdG#IZ4g83%ULAAa8>+La2quBB5CTdzSJZW>r zH02Jo80Oe4G8%Yn}jI`R0Jy-?5b1hf<3Ppgcfj zy+V+OLjiP9y#O&>DZs-T+@+paD2QV~5TF2Y9u^$^j(y6`VaP2Kt?-qE0e1(w60EV2Z(1e=Yap4Ps$XKI_9;jr|~n}ZHb z>ftwDV3;!r!)j9I3aPA+ENy>^=ZjH>e55DUB}^035;}T;4o;p)DGjZbYl(CMT}c)s z*QM?fq|?gaA0<4+DzQq?LrJe{@THXVK*}?mz_3h{G#J#YMz(>m=mpk92^C&qFhsNlzi(Ml==z&e;xgz7^$;^*T6`fd5=p!=hI(K z&xBK`E^-HtVF^C*qnFX|zq^l7#%3gA6W+aSl8%M=)_Uqc@m(b*zw|(ktH$X0-n9p! zoHndKq5${Yhwao?^BTMeev2IL_|JSN&C{tv-GQ!@u&?d|o;JzHmA+s)aE}0&#)y!J zy7}o(qu@we_q)4ChC_m$hfan^U$c+HO4b*^5#Y;_)T&J)XX?OPxqXA^Dc>@l07DtQ zh@Q4S(|8<1&H_d%g5jSGP!kBhzH`Hz(7}UFNO40#y&}E1kL1-|| z*DQfq+qAxoWY`1Bbt)U-rgAFNv5kkD3L7Oho8Vy~F+|7(`YUC@%KV^iTsvn)e99`D+?x5>pa`AeaOwE2gM1$V*hVwPCqPsl7jD-peJ9-B zcODRJvP5is>uo%=!V3u!e9~OP3$EEnDUZ15B3>Z#78M9iT!y`faZ1VKpbCW%!$)bD zfw;(4l|PrrK+|P4moN&oa*!r`X+iP>ez7#CQteBVDmet992_wlu_w%qQqsnjnMwXE zNfXK+$N`DH(7}zu5f#p}Y{q~Y31xN2P?gIHqNMC^NY4Cn%aJX?DEX0)Q-UR`ccDzp zAwx}x)D6TQqWY<5b>}hX@$JY#|G-%7k+|RBAzXTp_ftRWc}sM{#feH`crf?|eOz@l zT9#(W5n%1<$O!>1co?RRj}R_pSc*U<0P)7B%y*!ubLvzDkgkuM0LlPsN+L7NO*zqG z?&NSF#5i%=V6N&Q@S3F|+T2rOkWimE^eISocb7tWE~b@xzDu15cL2l?;7Wi!L+*G7 zzr@Ky)~gM*>A@_JDh{{@U;WyTZ5!UzMh@@l{^3Q_p_Mhfn`(GBa*TdL#gUFLxM&`k ztE90^lSfsF`IW2G(G*DkKsi3VJ$dpB@aF@IxeM^L9DnL+d9Q$JxrB^fLmmR*qCjJwNmSOE2HS z%al#=?{tbu@G~8CE~?!DKRO&b!yEk6O>a89`F;uyKTQ80fI#9dsTS@y(aIT~JGil& z1CIV1Jpu28Sd5P;K2GUzijSNgIazmy-#{O}fy5yt!p|mv)vZjMaU$Acq_*Wie)vJ!=SY4;1@eg^p?XKFRFNXtY>KOW z5s5e@g<^;i*)a#fLAN!1>`2kt zG;Wlk8BGH(1p|MT0K28>fUo1(XKQzlFqQxv!IjV_8dWDcE~48!h`J^)RYcS2Q}`C} zN4gJOg5;lv6NXODJBjYpAmLSUG*HYW3H%eO)|68!K6}CV#$dAGRj8yf6ZJ`0fi$j) z%^KeXbqeqYc_$J&J0DMnqaa*uhB-RMR^QjW)`#vOJjHd;IiIGy7_FD5-PR9rYx=nL zY_$4zgC^$AKOL{C;+%fO^68L|_MA0pBiGXy@O6#UaNQaVCqA?}Y!4@U-T+%?Pe-Tz zur={#6=xMl+)0{eUJG z@%PgP+X+8uNPK*o7V(Xa%7mAQ#+oDcEHhkrH>FQ`%u_Q%f&tq?4piM{_|05w)+(Xp z2xhCY>$YH!V^OQ%$`swh-?P9XxVL;6v+PgX-L$@4RcZWqIf_T;IpbHfb*wUaZgliM zJ7c2V3^3Wc|YnUvB=3~A7 zdzah-{S<}o2xsESWt?81gQrd%GYrIZp7Fv+FTV~FC~LDAwUAl?%eB0f?g>3nmb2JmPsRwEY=G0MQo?R9iyW3tjC}PT_Mj_cfaCm@-q-6{ zYud*i9b*ePsq)dSR5Cl482LmWA9*a49P&XLCat2MyGwT#OoK57T_f)0kgwMnhz=CP z?THMkBHCAPu0p9z>|WxAWX0qPQWlszFP#P@gvA=b`!~H96U|N=vQ!%60X#7h5jvX~Bw-L&n zunW#uev-Y3CrO;<5jV0Wxs4Jd^@0^|h`_%XbY4nuC>K&` z@T0s#aPt~45tfc(Lz0y4i2xR9tL4eO!-$itC|@NbX%^GVRFYzoY1024oCo)VdC&-@ zupT00*W_lBB>Q%%WPE^0*pg#tuo9s;gMMCR$z-RyUdvZH2dyMB^jjx+Ofnsk#8N<2 z;5rok93CEavGb`maIKznFYWeiq2N%&z?HmE6^O7m65>7|K&=p;pdkMAI`W}KPf*w8 zhX6EMkJ=1de4e}9^TfW+52MtCCy5}fJK$k?(3Q5dddg3ypB$w91Xlzw2Pn4SmUo(< zId~aMAnB`?K`yXIU2cF4^C5FA2YV}~19Irv*rLaBicB|w0-4B~$U_c%rGQC+h;v(q zWgagY;DA&M2JwB3N(k2921ZE$yaL8WX&^E|;usK-K&p802H-#n!7w2;@F@Kc4H6<^ z1=^!+1LY}JS3>uw+W=jj;a*n*4wL@{u-yk*w_md34H%Zp3dWldj54;&ZNSUf6%mDO zNRxwHAig%cqCbHCK?yOQ>=CTHyD|(Gzk8lJn=HpoV<|EW@}$MJuOJgnvrS5d!=9(b zKm{@)NbDqA>BEhYLBu%w{z$|az#}Q&PY=qWW$cr5_ErUDR0a#`8tr(3Datp4b`5--yDCEH{!5D0ya zWN%F07KyM5e1%a0Zyt9?eg~DLRYsZqSIV%EO2}~0N(p#4p`|u39ez5i4JVOv|DW=0PTv+YPG??_Jmu zZ6AZaQ`2}lo6rO+HXX-LgGR<-Lh{rwszBRR+#nGRPCps~u}4LSq-zA07zzz7Eu)lP z&*_DcZ()k(UwY^6=yZaCAj;Ze_sFzp%u68jaTO49c@X!P$Zxn=kfY0TT9Vbw;B(bT z0KPS60G-!?K{S9hv&67SAj@TUG2B66o-LTSvPi%gpvFp_`{1PsBD!Bxg??*bI$SR> zH)~X{m3y=x^7Nyf*q4WGS{iYu+DVI*)f5fQT>nxrtPP4b<^4PIA}(2LH1BCf!#k^| z(o<6kZHviZ%Pzx)@!dW<8(4(9Cns#j<$xA=Q2UW$ue#V(HR1r=qtS@ zsqJj#lf3<)7T2la+5za`jE-UOFN)bx6Cz(Nrne0Iuee=~5&i{hOLvNFgG3L=Ul}*v zgcF4SHoU?Bf*a{8Q%!YcWpK~^Q5b>vw6~8B*&dwa4!H^J(0EpJFNAHELUZa0{yv$;>(W#lZK7+!pZ8n~Cu3JW|DXx`q zkCtPH26qBS=>N=A5I>k5{Q99)VUKwTAl2<1(9nccZ;jvHUK-=xYywmY2jc*CwShaX zS*dKlR%8=gHk5AYS6RUeW9t)Xkc%12B5`R5Y^Z>?)6)!(S@B2Mw!#D5u;j`oJZP0O zm*5@@JGICVTlW%!HP$XUNrPqEBnx&Qv>TmBYoC)J3oOLlUHpr>Ftutk3e6%@)!NMt zmi-J6HCGt`Q~*L*-j;+3c3w^tTbl<3Ty6swRE-EN7@jVS?|`>Ig9lw`A7IL?Kx;4(giuGV_wUJZTW=?^|v4Sauj7f4yGi6d?bl3>#GvKfEsB zJyJ5o4UK0B)Ot_klQuTwgJfdZ^?aatRa5JAs=awF$P`7D6Y?gw`qy{jBwN(_@S)y^ z4^4geVDy2!oYU$>>w$EDF1Zo=WcK-+DPg4uFm*Y(K&bYpExepg zxcN!tHWrzpse!Xz(+faGrU%YIoni`*Dbcuba!{2GovMrz@_s6KZa&(SN~Q-n1W%GH zhYkvqVWSu=<-Jl4Cu&U1B2tN2l}MsaJX>7GXolv(AK3;xMHCwRqX5Bg=Czl?9QWq}fP`%9M1qn;N?C-_u$ z)Ei(J{llpJ1N@`#meg5Sfdojk*XwrCye?36BK1(}hZ2g*tdh}Ob$ct!RvyV9_7U5D z!l>CkOJb$@l5CIM_~Y#hcgx)Pyk-p30Os&x&S1tmqozR1;!M*7>p*%3}|dQ60+V&b+s z=a64>PAoJsSo&26Z0pTLcv)Le7@l94U|eda_A%0^_b1s7kS%5e&cOIr%nZm8urlQ} zeOq2AP~JT!VmhWl0oz-#xl@(WEIX)^1>ANyg&M^>2y3`edOdoY8jikGMIzncu}Ipm zb))u4nB%EqTwy#V8KUY?wthF@rg>4M4U3|kr6Srk**Vo5&CKjbUxbFy0nFP#(i)VY zMBMqX{K!(aLN=T_)>v7{SsDg!{7-{S{ILbyAAyYEYL1a%3&z58x`@!*j*E!>!dgsE z2%T5im$!BSGc9y}C0m+Wv08HI{1+0CT0uJ%*0!Pana7_M@p`LwHx0IwIFB0+jZl+4UTKgQ z)Z!mo%<3_XmE1+mEZhezE2AP4woF@b!?rw{OoTSkG(AFDR#jNqpOqORxKkA0gJFss z`)+4A=#*Zk&Mx5j05>uHz)e4&KzBHtQo0pT*{SAH(w?*8GMfz4gMAkG^V1V2$e>(h zYH3-jE+e$>j1?(f-ice@YH8q6^eqsc43!j(^-{DDN0tG>ApcQuU54~!!HpIc6JG0K zc^x7Lk^H-s?|JkIzzw`t0dH6cTx$9C(eVjz>)f=iudiDeJ)yPauvcL`O$-!<&4BC^!&6=9DCp{G{V2y&>N(k{XK?lhb??`TP-G9X!VRn_#J?mpe0QuU101w94)D^wApn20Qd+(0uX?U z_C+&hH?un-G+|se4W9wy92y{cAmQvW8xS$>?AqNAdR-iL97Ut{ zyspZAwR*!7q7$%$ch)H3$dcG1m(wk)Jy;^gT@H*fz}^u_22 zE#5u7z`d+@1}#AcI26@=Pp@B3K?cNSElul(2dE>OP^M4_F`-cir)SFYpE@S*TFqS?Gf)LE~YAa zi6PxW3(G0OVEa;FW#U`>_lNvH*9mG;;>VBcioU9lMTzg6e?MEFXVa(CF|?B5b8Qq20f|hVn=E>CEV!hzulniAp%Nf2g&7gx>PJC?_;k>*k z^HB6Q0PD^gv5 zODS&&eSyMo3dptWZ*L-Pmhb@;^^T07;Tak~lI7@*ir_kM7K!y*MM6-A6)J{;m-p`@ zw9yH3gMU)4eMz)#tTO3~&Uj<3EEpE?#+t{uQhgpXm1i*|sEJ)SGS!~wSh5I#h)x`tfOu-qI?sgAVXO3 zp#})UpT!NxaYNR{;)BlxbFkgT!!K8le;g_|ONhaIQ6w{bR)3z(OHvV`LQ7dF?1}Gq z5;CF{BH>z22G(Gxz)eXNB}1(uZQlg9-R?Rj+by6Nm;5o(m?Uv<9x>r+5H9>BZowr7 zOL{k{O`5E_~Qk|mbpo$5`1JZ_EJ$SIvJ50hO3}*(& zff4CX-Ifiy0wO9N(PJH|Ml&TEBA9|OL3hvS{wvd->SwWC1H@7p({QGhF^4i{ybLD2 zx<;kR#qz?x?p>v2nV@0+HAgd}WV&cTY{s|;fh`mtPXB&;*8XrS6K(q!ObmaOteopa?oL?TO`9J3 z$jkRd$pI=0-1?_~-=4Jts0PL#8b3VamWdVmU1ddwSzI)oHE@i#$M7Fy&lw^K{vi>! zX-=Ej=Crq5X%5{QtFj_0D@@`wzRk?x53~r2MCV`gt#-^>+NR>D5EKF7;+y9ydle7D z+WqcjC@@A85Ty-9uj#0|@&+#JQnVHoA8`AqG%rX-0-8cn{LiQ6+nhX*Tswfyzf z%kfcZzb7J~0)GZFB-23E$eiy8fFBs*eFF36Kfc1TWhV#FKlq62!8g7sL9}lcsaX{r zJ^%69yZ1l65bM?daLRvvI1Ad7C;g0JEzxyZ>w_RF1y%FQch7kOzm`^=U&LR|=mto` zTc$)+MwMok)?-#_kkYG`KXN3maLHV7MA;TkYAj`o-lLJ)QFcooa$MWAclf@Vq5g}G z;D9vfWJcGT6SEXG3Uau9c+22^;x(f}CeB1<2<)*F>|H7HpiD1RuSnQb-OlVv-$SB! z+$g*PsR{yQN5e^k7YT=|I5ROPU{vH_=GtJHl1Eyv77dwc)DNtrpKvYv(|ei*L(UoOWd)Fv*uMyw{XtA zg%_r*RV*dX8=FSCh68A{OfT>aal3}2BHe_pQQYaM*Vg5 zO4QG5z=yokm5}o&nY6A&z0Ub2jbygkk&g)##zf<~m zLH{Q7@0?UtuX);8$Ky?hUqRcW$g3DBRcIi_Tz9+)wffIqcoA#F=v5GI^zWGz6v-X8 z6ojxe6BcQXmUnl{2M>-e1T8yRN50~GHtKqkb~e6IR{+OpI)&KXOflSCz^6;*IEk01 zi7AZVWHVoe}T7 zsHjD-mE%Qg;%LG(GbgKG^3IcvYX@@;Q#=G>UCJ4tGJGXOrBXiXK+Rw}F#W&#c<0_t zvtqhP?^esj=3<%CU-S`hmo66Bs!Z<+G>D{-3~`$72o4rl!TdgFOc7hm6YZJ2<8^33 zh7-R0KQ9o1{_NG)Y>v*6n7lIAWz9(}K=8u3xTd+vnV&a^1lk^BIOaMS((OD({b|%w zB;{M*>-XEI=u6D+1xN95d3|ww<_V-d4MJuLl-DX2WsRpNtML>luf^#UcwP8sJdYP! zZZ1^Y6}omX1IU#^9N2~^ZXugim|Vz~-yyXF^A&Jgtl8b&43f=+07)B{>o~XAW9~5u z=-R7V9HTG-JV~q==7z+hLj~2w&e@+&;fwJ#EZgh&n#&}BeTMH(vGneHjazy+2*MY7 z*ocK~^st94>|76fL}8flYN82huYza;2`}`piy%6uKEI7`sUwhtH9I=rS^~nDR7tNO^WTc2ft!ro0=HTR=^h7#_-m99*NeW(b{MlI^F=HISVCAqf!MYSnad7Z>jguWr!RO z9A3y;{ru)-bgc()tN)9T>DFQ>(R$Oge3cZxtyj?op&oX4A(`;Nh~aBB(13(WQkrdM; z3oR+RWKok61g$NPp zr;J3yWq`~#L+JR;5badxdxPH_^?ftK_>qdo?~VGVrTG>XDM6&jk8LOfVERcTjQ)oa zuRFXM@t>n`!$UX2aKl44qfiwYS@oe`qUFo%Iu%0^)n#HSACi~Gbo-)qQ6FytnNpIQ zJ+=TvkJa{;09IN%#O|?z(E_F-t#c8idud0&Qzf^s?S-8NnxggLt@ip6X@rbaUuvRH z@GL=bD;zbX8;%oU-^;Kc1DxDVJ!-?FV9si}Mi}M6#{PE?XRnr(;s;8Co+y!jg6ltr z!!JQJTstQ-obs$U_A==EeR+tL!31iK5a$R{IMJ^-TKC$AygEpwX_8;SB^qi_wsMK! z*sO7lZ1C@fR_dCTDgHGVCIS(K&@+3%r<#>oPIgta?I_$?X|7w2Tl7SnAEsZy?|v6@ zq=Y?U(!ZVJEV>MPbgLs}g5dbRC-8nTw3U^uWI3t2m*?4xl}QIT_BtzE6R-CA$o9$deyJ+Sj0&;nII zul;JhsIt{!v#;K^$lAtwMXr4{wq=cNS>r6b&SvSp`uZYcAM0az_SM#xwe@9f=|7v( zBOYq+hHuIZeQmbk!Z`;l$BCBygr|0Pg(ug`KVijR>?r<;mi!4%y`%Uidht(q>(gRo z?P%A=frI9z%YFy#O6&#*-LTLNgwnV(D^+9>9Cy36B{=>TZ3=O=D_!iWU3Ky{nkykz zWaHE`SldjrGK7MI&Wjwzhsaik?Kn^MPm zP6647-bSn@XW|11Wc*KuZ77(65{YAhTJ&+ZWw>Q&r)IE#yMD=kwP{adY?#D;!SHYNx#84Yg_9{+eiOuRPR6B4+9#s)PB}KAWqzgrjE_YAQPfYk)13ct3e?!A`$TkhkXuLcr3BgFHt{?(b0)PBv zXBhl@i9&P7@}N3V-E*Av^mXXZ`LIf!CKKbV0hecD2iTL6HTRtN+SPg8U5K;mmii`F zHyW2GnbI*@#wnunui=khV%IYq2lvqXunj`=k7M>dvHM;)`d&2kz1Z9LH)!IXUo7m+ zDU=%ux}Y+YAQg1QWT^3{FYP59*?6sni4lya`x1j|b1gbtLWk2JTr|b6L&8CuHV;^W z@s~~U2{5A&ziOOAu{Tx?%Pq7b7EKY;rie=|qCRb_rfFOK5qDk6oP&O>iVYV5lkfl$ zVAusBoTm7v1NM}AcF_GtrPMAy3U%CgJ^jj~M0D5DFa46Uo9Q4S@?J^pMRMf(^aeGQ zDg^8@BHmn_Gtb2QVpqManDm-`HIYakSxH3p*eS)W$kW6rQe04{^WoGeV?tVh)e#M(oiKbMprl5#g zH3N3V-Q95X7s${3isZqG^tLt`M5D)#?NK|;L;PPM+e+@`lg;0<>e7@p8<5{5dS*v` z8VEa((=*}qK`a7ND(*cNE*A7YE}58K&aDP~Jzk$YB(&>_(RR!U-4f1ZAF;37{t&JD zmiSY1D^07SXj&CpdF~bIoA16!;{M-p`%XUi{)gG^FnqX0Md^^?(7C^v|4$wye2C(M zcQE;YPvois*y>RJpC&%{ReE;&)%H&QhNAx5&t&pBJ2+i{Z8=5qo;VI#)hQ#&0s18L z!gJnz{zS&=Ih8x05-+k^$fy>=Ut_D&M`sh`rRmXG5Dm|^cGr*!<3Eik9H#s9n%z6j zUfV^XQlr*ohz`_HFbxvTYUxiN+JTy?UJp?neo`r43?1!vR3Ugfdx`T0=vk`N6A!h- zLo@Lxd_?4(N<7jMkIcl6LU}%`Im$vfwbgW#=I4?=VG_()V58Z91}4p-D{bQtWZGvw z)f$8ma(s+TK{T3d`i$OXl*2TgkkM1@re_SqEQhkD`J84W04aP@msd4~73Dy74H<{V zJ@h_Xt{1abzN}j6k*@U*_Vo0RR?6!1B+QE5KZ^rm)Rc0sisiB76dyWD=q03}`~yFi zV=k(64Y%frppFc>H_Pog++G)S0yFxMkv@a4#s5F>LY0IZyhUCu=tqwAIkY2y7)fEL zMn?m2`^X~nZ-#tp1QCvG2u%56Jxiab^JKkXJ~c}$j4+Po>jnNUU{R#SkNMNtEW<&^ zu<0UOy<0}4u7Wzw#d1+TJ%{ptWK~2*!*H2@lfu=MzD0844QY*;Dj3>CIbG9og?PLi zSpa{>WCn6L(6rU$od3ww=IP?<>3vl+^^aPpZzc*k7#Mc;>0&_+MwqKIEY2EtRpK{h zgkMX#vs`*EO%_wOw~z=_UyZardk&2G6YfF{$BTs^MXav6<ybYPM@F6mZc=wd;3}7ItX<{uB=vH6 zL|_gStaq-Oz~{<(yB1{j9;`ifK*G7m(G!W+rC$<7Jmv1FGK0vbEn?J-yC>z_u%S^n z7Xp_Nb(zp&@5aRamCi)I`*?k|VCB3@au|og0)nh3Ao;blsoEXSk;?ZqNA#Wdi=PQb zk0bz?awtwtVbRe84HYRqDCVZV&A4g=kaAK7gsI@{%*2xLTr^XTL^PGsHmf0?w@@{< z)BVp*#XIE^8 zkUxi1X~C{`enNjFe=;l=DeW~Ln)pN@tWuKsTQ5@jb9nTlp=94P zwaJEbY+C3bwaQCvQBPVu&tUvYjO5y-A-zS{>)4%_>z|6uGG^~~u?niflw6Z)Rl(BI zlejOS`T(P4Y}L4qDOOwRYbHHmNyI5_1Zw3O;dXg^2{5M)g(^%2xHD+Q>$kXd<@@52 zRJ3%{Dlj_DBto>Bo7Bi!%-y$4M;@pflYN{O$tPlUoWf7JW#P4$W_rjL;oONgrFW z{gygT3H(t}k<4aMIfP8jmEE)HVF@E^Pq$W_`yCW1Y=q;6MYCQJ;HZyJZY3TvFg7K9 zu@jCtwxgW$tU#SGRxS(-TzcVc1?>fr5nG`fM&=N6 zIDsl0geJ)?ou=P!XrQg!V|6o?%i@6|UZhFEPhHo^hFIy40$+%Hd=F5^u6{FXHP^~A zYqswJ-hzD%74i?E6RNe^cb02jJHU_e(Q3?zK02C?78%kYBt1o(wj-rBAn(bEr%LxC z&u*l5HvXJelHa0hJKoMi~88z}}=Cz>xjz!BRiu6F$5d?2xWXxz!15Lo0o zao#+^{$-*eO4}?*%(tC@j-~?@`5v7C4D@Y!PAqW5rpMEDoWK2I;Q z{HLV46jwYOJ>sM2H!^#UHPKYw#bSA$EJ)mMFIk;I4R>&#lhht$Tl}zNtw)Ds#)itZ zAr2ap9@+Qtt`mXt2Mx3GFJDT`6ir=FAFoO~*#|XKmq%t)`8g7HRiMa5RK_nP0R7QhAEqoIZ4aQcqoOKh`N^?bn0;tJzk8iWJc*Ik;0~I`KTI5;VoCtJLs&$lx0I zDmIApv2`J%zi)QHy9C1}^PpAwo~#?63;%PSEXXU<1Rsfcgzu3ZY2QO7YxK+GigA&q zj4mj&{$U-jn8t9H7BxChv)vHvEImJp5XM#d^i@8X` zOMVsMyR6;Pqep1GzMw#%5t3f5-q4EzpI|<*`1-&qNrGrCu7s498_?8>OyXjb!jRZx zHc2IBaL)RnMm^PB2fLd)>{lWDCr=sP*Fx`WraHveqS>1t^IBg@YmC^$NY7Fv%N@32iwXH!HtZDUiL3L$|ii4TG7=G7Dg|*QG#W34G(yu zJtQk&8+MVF<$t{W@pTj1rc#N6YnQnmXZ1vaR|Fa5YXDbzwf8Q>%!q|qi5%2`!rn42 zVgq?fTxDa<^wr<`$RMk7MuqNR;OfK$hyJ>K^F(Z@qoJsr-BOqMjHD>f$i=;FjcRJI zarI|6Cqa!)cip0(E{=m<)g7T>b9x#+)p)5m1}H!q%bAx~H4fkOIF_;AphRWpVS zg>`x1F|;u+V@Fw#cYt}QE=m>MEVBGJSK8s%Uw_@FSW2z+c}M~5TK0~0KINEV_#G{x z_zTLhs5B~JdSI+paQveaDc1B^T27xlqnC(T>l2VZt#27A_FpA*iIZi#5e()E(#wb@ z`+Hv;W?XQE@T_C^YD}5()$s|DX|0>sgSp+%zsO1$7G~v(t5vl*R4Nz81LR$iHgXy* zS(0PHS=6Xov{4g}1BQf0vXl|=!M0GA(WDuWiN(yKm$kC$g#?c4lGJ?j*}Elyl;5K_ za!}TJd6~^^xh<8x4bM@5>fI8E#@uZTxvz9?rQ;|Xn~jbB1f$T%;>vP_l37anWyI++ z`xk{XTXl!y>`6Qrce`0Ynrl+UzC@;n537m@_`e-!2Ori5X=K~TcNVkF7TbG0lR)%)o*5J!da z$n6)7SI^M9TCU4|(UD-L=jt5F5nt$E)MzeYY+q$L z-0qI><~ z-B(f@0RQ7Js|g)h5XCRf}@y&X92^EdBAsIa*uN|41xUV2;sA@N#wmN_ z^;oCGrHW`)^5gXt`Jdy5WciF8&Ag0YQpD_@EYYIM462jy8R@m6^Ad_bh+xprK-&1*wIW) zb_@{+8@ya=&$Gd8b9vkF@t|ojis=YbCdb7Y))J`&t8EaMW<<*s9vbJ`}qR4obv3|8`mMNM$HDO;(WK*oUd3@9a!D zbSrAu*nC6cdSj#^7vJ(F#(6L%!gQ{?u#|oKSYD!$=rfdlDMc(eq+ILhHob`oL>k+` zpG{bieIq@Q5BQ~EsDvON{5&gH#Mg4qYSvcHNk2*GWuqr2wvSl9n8JXcibIsH6{&sc zFn;uNZQ-t0 Y>LnbGr$_Sn|2y5_9^`6AwYP{ss)z8Q885kF37kB$1sl+p%L`)3 za=b%OTI?G0T{<(i@<|@1L0y>JxPtip$@%`taagrv`a08g&@20$hP`9&T=ezJM=A;* zw&vNLXs&tvelXS>bH<7CcRauXSj@E0NqHj91hyYv78Keodg)Dws2?jxurU)LFe}7w z^po%%p=t~G=c8TMVCm3SVJbP4&3IW`P4^p2IifY7SQe#o3Q*PE3@+qWm-+)sMW=MnzET1bKiP!U?2=H z2llItE+-+h+j|f;q)ce7A~HAkkTLPqHb!9yWn*zdk1I?92Qk3-a=cjO?X#k@g$Aj-F8k}ec7gqLJ@v$@8~lxB$NL&O+K*2zcw{F^rU&( z|H5X!Z*KPHf27&GHPVI6?zz9>6zu&PV^O(E;&xbTd8Ll0{cY2owC5JpZ?3Hn-jz0% zX8qMtqsGJ~mqT-jQxkFIlotJ)-Vlu9249uoF66HiD2yx-Nr7<(2)b7>D(M+Y6FI&d zIxSzyC(reR2kU=YrXx@(!T(3y=}6gs4~1pHS$X^Ngy-MA?(BK4op)a1Jk7LVX{n3c5wXp4K8J15_8KI49Oy-@gZ2z z9?TTG&Tv>5{cMSPuz=t^MCTrYP|ObEdx|*2OW|ta-QBTYg*OpbTf{;t8Fwz?-pe>l zE_{pSH5z0hyo-r64Fp@Pj!Je@!9Hb;fI`_1_WfRbzYkd#evJ@wm+y2I^gcppUfS{@ zaF-?HE)lt!_)4A@IZc+Px=gDCet)DNA@i5SU)kHD`fbx4flA>hC5vyJrQ=a!^L2Gw z?ka9z@qkOJFSGDyAYZzX$bAQAqR&r6;Sg=R%PJGy(gel|oDgalUP#Dc|Gb(Z=S$|9 z1}^}_Jjzx{p>8PHPhCAuG#fgf%w|?u>Xy_r=9t2#WA~%@&nn=e1@LA`8CBNcSJ=95$v8i~b zCW^(gwXzof-i#L%N}K55QHJLI;O!o0cOKSUpO#J(4?dA!__w{XSEycs?fuj}iYXBP%;j=bZH zt1Q22dExqWaMn#j4}K>2v%;T>1ewRfZ~=sd0OvkgkY<%A;U$$YS0&7430a&;MQCzL(Np1Q$&v>&YW~1-!N;Z_7xC{$US+(c=CD04x9M4q_a5QFj&63{BlHOBELFC`3 z;_zN&qk^m^3cSYxRkqhOzeIuw`2sfJ4cF??=Q4{iQOapqHb1aJQ$g?Y=|KZupo@%D zsg-0bD`Qk{Ty`^rw#MI#)8OhvHS)wEoEGxnRL?1;z6V-mb2+yTWYo%=CCwqfU5W-# z0Wi}?4ygnzo}=RK?x@g-U3@s%&l^$G%D`-srnx0W{3Rl6Wh!BITAoRAwLIc%5-FwH z{Lz6OH=|7jFrnEw;20JThSh)qx86f4ax^io$crSdoFZNzv7W)7Jg`w@Y_Jwn-L6J( zNaU6j7p-4C8B7Kd+!kSqtJ=@mcTRpO-QkQHBRq9 z-nQDhq{pE;iCkyry`JHTu*A1M4Uk0&m7&lqkVj6Og*jKh&|G)#dQ+6#xBjf?tj10j zXxJik6;#*TWIa`Io5yxCF_=g*@*#|KZqHPniq@ai@@+Nneb^JSo9mN=aQJUsW3IzX zxWvbV)gPk7z2J_Yj^@~C3f|FBawyDRK*jo&lSBvub-}s3R+Z5E_9n_*@7Li5!t2l0 zTZtm7sm<0{K;y<1lua{OsCmIpQ3)B{x5get2-Ht*K`SvDnNOQ%m)T&l0ht97k{KdepV< z%DFLY6)?0J12*(#*)<$>9!E{AhNVi-CBlNzSNm*yeJ=Tj2$gRm3fGBrjFX9BO z28&!RO9plB(ME$)(X*<&N`4dOM?dFkyIC#3QL>lY4!I6*Alk!yvMk|5`!J3*ee4{8 z6xd+d_~g7?E@0k0E{d*DMF9rMt0I>EY1(=dCL71DMIcLlttKEX0|;5 zsm2y$E^xH#cn8d^E$FR;+ZnnsUvxD63!wiD0Zn*}q;pGEWFYq=%)9Na{yUR%p142kW9>2NPw!=R}l4n== z=66fh6oeWSk?Av+!@}yxXDnE(Rs+QIfPC=(t!Y($f$33|TDI z6@4R_pv{F(_UUXRngjRC|M*;Vva zN(CQOZNP+h<=x#;skJ~_upp!dbUMz^Qmr)F7+|A>SiGU{whN(5b*vCt@tPctB`WaY zNxEv|kDohs2_gJ2DiFO7LtDrTF|}9?oY_j`YxtzC%k(wzkAXBcdm<(j z`&)B{wSM%~VRJd9!!TzI8^_)f*rx=QZoE_0(bkU`a^_9kMpNj%m>Eb7f{1?@oG0>b z(;{1;cfB>AGaipqgE(r?bVQYK&5uzM$)SJwj?*$FsxgKc%$M#yQ+u^0LiO&>-!pmA zVGvE6g#+T4Sv9p=WgQ21$AJ893MnQ6iiur6Mi>o=3+l6Xfq+A1tfjlY#qz>m_padZ zfrW_h!{UfN>}WO4(SuJ>?WxQ32F1_A`e~`NTDy?uSr_tQ)i zyqm^AV!j6KvlL;o^rA>p;IrQ(vn2*sdh<{CtKzj-Xu%JwuR+cX2cvNK_+f~EGlSk=9tR#TvN;i^!3TDMIm7U}>B)T!ZSt6};4UgG zNVlTjVtNw)u}5$Hw*aSMU(b{Bk_Mk8VJ+qh@NbuC&J63K-Xk7G7PH?b_!tdkNEZOF z5?BH^yc#KW#?c_xQQT_+`{Y&+{L9djz(Ftc0Pbt^(I8~{EHJ2UXq%m`QhzFtu&Oc$ zLN>UCYobLfg5$cj*lJ*Z-nVEa(7*3nRBemqzs1)>ORa(y&O=KZ^%fh}mNwQcYouFZ z?pn1WZCL}_Qe){6ULzciEns$$bbPyBIo=8@sm=7$!{Sg?JID1Uz@Z9O}88PijMGtsFi&Va|~!s%|&PoheVNvoI%b zd|G?*Fg?wM?zu4n3>DpB_JQM3^FhOxpfDI(kj_0l(n+T(WCE2k^`TT4+~F!F_LwK zE9`(~jYKg9oy~>Teq;#X)aF5?;1=+sn}>10#6TS6JeUI{A{q=HeOzQsYf1c+uyvDq zkRPZl#u>`STm^{pl+QcvGh28z3=(C39XTXr?+;qNh=-A0APyk;y? zK;5THOid}j%+xH(OO0oj3o6hLZoY2Cw{eQI0apR~nJ(gl$z1J#7YU3|*G0-!KrP&L z{8Q3;xCu(%jIU1{go)^kSRkT+7CPK@fLcuK&Gh<$9(^4?^iDm#j9UDypM6fW-w^`| z54|y@;mNyfCzzRNnN93~$QxLBXRz7`h0w|`SK-7J$TivF&WTuQw7otw#XAYi}{x3{b*%xRvc6?qUy7g&}nTzUC26blZ>3K>PA-bAH^^5waT z?7A?u=Wz}(eLh3%_JYqKu_eHzWU+y$G6X(zI^fVW^Kx? zXqY1`i7o(7={(X_$XQd->n)vH7Z*F#Su{IpZAi|S%SD>xo<_Q);gR&uX~|a1I%K%9aoBZ} z>Lj@Qvdpe{S?`v0hveo){|045aO|SewS;Up1#073BmA_l`rXGj240)Phk0{#(j8V! zPS;o=Ul^6((HNo7IAF%BY^v)g<;L-6dwD{Bs6G7apih{}KmEWiwA?;2>zU%T582v0 z8()8zPabu0q8exyZHqq{)+x6^$j6e)k+^7<*%`5uLOc07X`rvlPSqZTdImP&vCbu# zS>D&OP#q@&v6YOP1uk_xO770f&1zYt`MOLM(zP#euIu^WTmZtz8UH;$BglG<70yOl zLS?&>*IUL9e#$jn3cFM)s-w*;9~G?wVZpnQ<@d-WEc_VEK>zf^ex?k>Nw(?M);p z)ovbg{*dguwqb(N>)uVL)}{6mlCFCjM+|CbV7^2si5sKSE+J!LW#m!IZMfhyHs!Rd zR5_>3Is2m>c_9*VUpDp>T%NqR-FZvxu$*Qia4*vu+31$zRg|=T!^pL<3Ic zj?nZ}y=s9b=SE0jhn&|#AlI3CRFDw)9M{MK$k)hHdD!ILBB*t!e)oP}k2bX)ZE8KT zLm=0e=#fUH7`KkJp;3|)OOdC6JrFiT{OUkpC^+29!|t8&F5lMzVvpr(dL|gUXjbhN zgsV;r`#QILl25p*7W>9?(Ma*$O7R{zIgM@}_O)s>VY-xdF2gmO{iODgIIq7TiXM=S z+W+}Ke%DWcOzjrk5_YcM%uerdNbz%5{Cg3fbh1uqWW><975Y9<9D^+$6TFFTKg>yQ zO$^6qj76+VZ0BYj9as%fciuGuyAT-kM`P20dMZFV2H^s~IOYU=b@U48r|ZS0+Y}Qp zZ|n+ZLX5XB{c&l8xp@6&BtP;^>Fg~Nkm(ynDt4{Os_<4BHV)us@{>u%X`d+L#yBuA zBQD9GpG;Yf%Q&+cw9~57IUCPA@ntxFG6j-o5zo6*SfP^~!rJSuzi6-T?gl|r;CF)G z34Vv^>F_}{@z^MOk;ewmJM;4pf#{x~TAE)0m%7~!A84CViQd?Q!vl9D8bNBWG&Pa3 zliM6C_kUfDx*x%@(bb9XQ7H9ljN@b(?`WugeCR7_?GMpQ%^KFu5dU=LXLqR2er;K3 z+?mF@H6E05A803~d<_%tb$Dn~f9>Os`rP&PQ9)z#u5XM>z+5oJoXX_VzPa)JUYOJJ zQ8SWGo1)$W4U`+-E93iDpj6=2r~)JGx)%06yo$9ZhZnKxQn=BCABI$Y;;Aza)~c}Q z_LQ$jIkoz^EBw(IvQPa?`*Jr)O>Ut*o1@F~E>O(f1>78E_Y!_hX*H!uL8mzPn}wTl zbEdu^Tj!#?>J**(XH@ldt~%FH#Njn|W}?RXWR*97Ld>|k^Qpl8sJr@%o{Mb1s{>HT zldQYaqT|B&NSUT`Y!3hosE5t%EpVzPJZCn8YdUOzUrD-maUz9t5=Go zlO1v5DMK0+r9s4Ay4~?YDeGxTszUY=S~2Zg@!WtVQNTFwEpt@*GTd~KdJ$E|6$pcn zz|&-6ay7;^8*kZDr696=F6%YkDJh)3dH8!P{Jj@!C1{%{0xl8$&`&wh%YpiSuX#OC z%6EolHEM3f2*_&4^Igh)8hMd1-zS73p3B>l46UV?J_;~x^9sUQs)R!aO?S`tR;WTg zE_&R@Btt`Grh7EhSs)<(_N&Vs<(eU|RHOL4?)C`V+tkBzh!n%z*2!}T0>i3qW1KUS zVxbJn))rUWLr{Wp!Sz~I=&wA&hdW#01U6c$v|dPj%LNRY zmj%@Hu|YnZuU|U1j6f$er3^HpU{VD7vq2Keie$J7$c5vjVMd;_oadBtZAY@4=ads@ zjouHUtdUI~)J!g5@K%Coo&skm?i7oe$zy+8R2pT2@Qp(SA-+1vq z{wYozO%RPW&Bj@Hnqg>$p&5o|7^+~JcZ{XmgK^_s=|+-CHF-{$YJ!`pnvw~!2xo+2YsUmGBJhV4QZqia8!HQ|O9W=HkX+R8uq1F0HqKY#4V}167^D^y z!hRL<*SY+)@B&qq0EM*B&$ZT_CTE;+K)`u{fn(#L!}>*u5rRrHAat0OBlV!nUxPlf zg5o4hq}NqG8Cqd(aKMlt*BQl#VhTB)Qyfo7wTSc6DH&)jdblFsHed8+_`?`FihL4_ zSoo!)G42Lhk1;ox06w3@>BL{h^c&B}Ao2^SKZ||J-=*?`K7HNL*A1Nw-J+esa8YzO zYqR`o;Ev1g5|S6)43FHhQ?%D`Fheb9HQkAaG>CI(#K;8Zp2I*Hv*cLjx3Jcb*^F+N z5gwD_4F43{us~8mizz7P9AeIwRkgfQQRh5ru_aYQErOSZE^$L!g5L0KCr*YcUiyz7 zcf|$EwH1&8R?l6dw)LQ;1Q4SjAOS?)R_{@C9Jkd|Q=q>ZvDL;EIM?A6&aodQOW?xM-?(k@7THO*g5N%Z11@msdF|`TXwg~ znngm@vGc+l(sR}N^TMiG_4%Clxzcl~s4g4rt9qZWRG+V`dA?Guzq01}N)5-AH5^xJ zIIh$@Usd&*D^+u4)m*8XE34*8)m&LMSE}Yp)m&d;S88ystQB^pCgRGPh$}S_SJp&a zsfoBMRL$r0n$K0u=T^<R2?sE`4Az zzuY7LFOK|;*;(sg*YSF=--U%#;;fM)bO^ajioR*k{&P<@mC$JAIchn-TYg(Co1xNp z33^ha3@jQ8{*+iGX+tw)+ImaAT^1N~NK1H9y$tenTT?)1O7kw&bfHHlUfgRbH0ar+ z!OChpM;ucApj}IJIzJ1iz>LT}3Fjh5w?qMIXTi)z{b3MZ#vZiC>rBH{>|M~WadNsk zgPo6mVh4AP$N9G+_*fq(x)zQ*Y3JArj)SegK%m{zOIFzB{=&R#-0NOw6k4i6!xkkF zWp8u8K6o@2Wm;Sld}yeWgtrcxt7sHj8X{3|2>V!S&)*=(RcXkBCp<7>Yv4=U5Z~Sm zqhWY6f`2ynYXiTw%+eP*K@_jU3WUMp1_2n@%F0%<00wflX^Cb^p9w6V%N|$_4KoZz z{?Bt8D{AOPVTyf;Ps!3Y9GpqqPHuAPd#VI4)R2RH?`G(Q>8Z>@VH*k?8eumh3>%s0 zDD0sKL#C7@>s)e9C^=@BX(~vKzTN6Y>JX$iBgV1b4AIk;mdL;y-SAW!I~Bv+Vt=@Y zWHR34Wp>mfGd_~5d;~g0|MFaD-p8xxXz$dJt8PqD*#dQhy+i^-`pvcm$x;`wY$Bjd)!rUif&iOWISAvmCd1f!x5_ zGyAyl(cM(kFm$~35Vb?M!KgSOeS3F_#2)(b8){F1u)6|0GgQb1L*OXU(u^>T9s>J{ zP${bA+h4wOnc|(`5Vhb`z8S{eacI?d?6r==-5 z=SjT&6WvyfZecv=dQacId-KCLKfinN@%7VJFW$z`&emqwx*4@LBh&hv*$XP0a>In2 zmxctXgeO#6Ptnc{)JB37BZ`WlJMJ_t+^;cf(97^y`qNI^;r}Qp$!a5su6_r3+CV=e*aU=rC!z z?YbUQ+jE&LBWRDbH+^wc1=gk1U~SH)yV!Ynu!^F3%{z{R;}bR}t?5nd4ZPNLLw^d` zs-1shLIoEe`>bTjxQwU74ez?T!pgq9974~_=BJL87^%Q8JoRlfjx_2;UQ^sxyiO5Sw4_VMjH)PP`H&ocKO+1LX zGE@*Zpw!EF|5;_A4hf1(SQ&L;3CpM1TFEt;wnx^g#E`w09v#?hE7p(f=?$!`R>9Ci z@Sm=L77>5%bCB~|8jf;=ZX!c>IDohx2=}4xZY%>c%ltA3s>@>eiO$#;MFBh<<7ZlM zy#Ay3M=KGf;rUdg|6FH9I%_5QtOX2aD_>Tv^As{)Fu-DeGO2H*?)PBFf8-?8_+Q2yO6XVX{nZMMXvGW>WXZ*V&V~}?CDK8@Sa6KZ~ zAqRcM(;jxzH=gB=&B100xP`&M-X(mFSe%;7<$szyk!K7s?4fK3Or1i`I(Xk@5D(|EODs z&ML8<4%#jv@xNxn985R8SS+$tS>IATd>`e+lO3|7QkL|~ZK&dg$f_GfQnBC-1#hfi zowdK<*@2>JWb7|^Spi*LpHEWVL}ry?v5CwIcJo?%*pS^SZcOfoieubSv9Y2y_h6ii zwI90IzLUk;jWbZ(Xdna7Kn-BP6sF37W5vPrF^J=X2)kwjtou=TjFvM&4oqwP8i3T4 zo9#_ErcM5kQaI?OG4q7QPH`em@rF~fxghvU7=K#;k!9jNhVZ^;PA3pqj%(j;G&CQ#QFVOa^a%!5t)&q+h01rlK znpFNNT~&A{pNZnJu3DMJjnMupIOK)PuRnqfiStcpw44RP*?e@rf*U2;R%Oky?OF>Y5ncc(n`vZs z(J8w;(4b-~k?VHVQAom~7i^Fqjyk@4=_on^>t(0>_a$dGyoEElUo{MGY{ z_PBC}RB|Z$dk@CK!dG)xvPx7P7bo&DhdHMG{SuD3cgvM)7u$!TuB*a5VpF)}1OyC> zK``EkWXygQ&r!V~ddi_tS&W2tG0NHSWRhh4T@M5ykpBqr)8`qis1lJ9=`1yaoQDm!bJ4wgnYj$$AD2Vh)2?>5-@TnI=udg0ZYGCqq=X0AJPtZw@<##b&A> z#b4&kmE|`xu=R7-WN8a=0y8@o<;9jfb7@X(MF+{3we!$!>aChQ=HI0dQ&yfV$0bZz zaazKpn|yFcfg6kWH6MsYh3E{%bp>SN0l^rj#wY2NFPer*zT8Xn?{nKAVTzRF28mIm z95&Q01vtW-cLK_$_g@K+>d+ejk{)^?@bfAC18xFMlFw=hs~E8+Jrqyo>?evN%QzFE zOZIc)@e_hkbHJY5-3<*L9pE@*5X{4`aV3AhXPB*@sVBo)8tJDS=hofwSmza!yRVpB zzhcV9E2b9HaK+%V`TuX2&%R;&Ch(+#ZXBas>Z(C1PrDWV46iVpe{@$eNq7-ox3Bwt-p+&0Rr{*%XKg6y z;>i$p^Mz(KdI9%KJH7}r_=nZBiD&&hJdaoK@29xC>Sy5#2+G2@@ut1#oVTapP5cRd zy?|fuAS{KjDtrxLDTGzwv)F&veH*mt-;V#fdjr4m-|)A1*nigTjUJDGBdFKkV*Wnx zQftv~!5B@s*AV|Q?!IIRp2oe$ZU1fOUC@2W3;U6RZaS}n&P!HT_)3Aaj{KYMkKxQIIY05aOS6S9XX<%h zOgGL^Z!j1Ja4dYU-+14^GX3V{r|~ypeg0Scs`E|zdH<*ITlnRF(-{W%HU9qeo3r@z zY4~IKU*Wg33RmImY^$xY_QV)}6N#Sfq3Km_bky zUegd4D6+hY|Jr}3tc9!ZLak{uBPIAUuiwg075F5`_PhHNRy@X@tvhjcT7aQtgX)Zjbhi}0CHZj?UWjhQfVg6JVrs0qt<+aZlbTy&nHq-^uzC;Uj6st@_JhSvr5iR|E_(s z`xhB&mMlU%@aO#5|D)Xm%7BPs z3_B82194^Jsb=9Tu4?#-Iu!wDp6sNgCQh!$oz9F_mWTsFVqAX8aCR#+zPX(yW$G=w zDC@)((ljOh9ckot*13ehRWK${iZP{s3F&$A15#hA(s!o&UY5Eu*|isyhZOed^uRqy+b)Kf1?;;d64NjQ&7`0>>l0RvV@GOj7)(OGDbc0R@r&!{}Cqq7Q^ z@Ue!!3H+TyC9rZ3FMY08_KY>{F>4xC#H(>u!mF?;oH!p%@4lOh>QYV&%N*dsS@q&mK4$oFN;W(V1T1Ki$2xo9cM|JY4}C0afdEr)g@$085(|NQ5>>a35K0UkdSgoeZ(1yRAT{K~^X9N+~X;HirI zr$=a##_;2ub0p!uNLpzVX3 zr<2hP{N=0zY0sd%4%<_7Nc_cU@6&sg%S)v)d6Bge|J#e`@BiaPh74m{#MQPz`R+j1 zJ%_uHak}c^;O_s^?sRN9PlNLx8(&#hE0CSpBSLB@dZ)c0k9?M(jurm;51@5pk8l}1 zT@V!>2?Ye0|HPrPmbZI^pMb9v}_$<-2QqnpOO|><2SZFD(9S2^kPmS$gm@@4H z#J*}|fqs{qf@@+(bdi}4ZvtXjpP=$&O;2#Q+T@* zf;Uk4I(hA9!QI`GtsXA7gF79`1~`M4p9EF}0XszSKnGUodgO6JKNEYjFRUc-5om?uzMW3uQ?NXN5onf@H4nb%n`M4v_S-g#2_xA-~94dzG2((7K|) z0v(GV{z9WQ(eXS}i6`#4<2}XQ#9&0^s-?*z@_%H8$pbs15m?h zIGd0_yn&SdlF~50qp)@1HyjPwnGU;7UPRS4{u0meS$>U#SLQ;}5f`$0oG*#`0gB@) zMcEN@O;*Gzt4OTG-|u1czeAPY`U}2@+4qJo(z##p>7v(Ufn8D{_LvuL5B@HJ8bGS~ zMvhoNCo30Ua%HJn6xohqDO~2#e0hHobVzV zr&75&mCEE)P*@c<@l`h6hfbti56#9vz=H2|a%(K4w@f&t$A1i2?f`Cq<;Ps$5&#`{ zfUD!?!ObDqgsglE3z`Aw1=8tpt$WN{56rgJLFt-Thw|5{a!er1uy(3gWSU|gBj8KT z%R0-5>qV#Y)xwA@s+ehBd|}eNtkd4jbauVvKvQ@?8aI==K%wrUcE6}@29UAiJ!dz+ z*V)O8o%EFkE{|gbF>Yc-5+BMZvJ=qBEPBK&BBjvs6szckEg~93n9e9_%lLq)KuXGi zGg(X5OJUP&3=iJ2|5|>60za4;K)}1%da64w(9o9Bj*nYY8;?n43{Hgh+=Ji{C{4!> zPR$*ho|%Z5CbXj(ik3NPySQ0r_|?sWoUSF@ihH`+9{CWFc5ffos~P0y3qoDr4<6+Fol8Sc z<36Q+nB%VWYq$Q9w5Nu9TNDLXnWKt^rA_p|xayZHuDit;Gk%=QjMB+K&NeNHn+W!s zeWOe&80Q>bmJilTGTlMvI%fDgw8Y6|FthL}x~U8yQ=P0^@c=ncxqh(&*Crj29CBXL zT8WwtOFRJg?^V7swqY_OZwx=vU^jbQ<}?N`m3tvE78$=E?!RW}bYXks^IO9819@9Q zlFgc~e?F^OFglGbarL_na;h@bo5*sM#wM;QrmOo$%8i^vUY*9{&bSRaPBdCb_bxe{ zpH0*8ba>lKqE12rQx3f0$eoAN{LQE=gTwmfM`&X3r2Bh7=y-WiX^y0pX4?cFAPxHK z#JuK{dY1=1Ngy#l4X)8FPO@*mD?4S)Svdq5SNS zR?wDqe3N;!e$i-%)$Fbj45ad4VQENav8Kb-PPMGM0+@*4)s%795vk=ei(|PoCzGNv zsn)KJ)lPoKihHjTpzsD>m`p@hVcy9ccwjOO&lIL+8M}(*Wf)oBJ5k4Y7J0&_<{dn& z-56$aHtVw#MR|=Y+kHDR|6+9##>lDD8uevkrUAO6wv1T&E)#U>+3YyYs7AO&(<&1B zRa#9(Dyoa{+ZqWoy}AY>jEQNqBSzl0IQlSVPZx_l1k9e2`82AMjr38~!>P%p%(!P+6>BrUqt3Aq<5Iu-LXmUZ(Jaxa#3a`ZEH23pB@pYF*twQn@mP_b%6 zGCk|FWj@a?EOKEe!(MY?%r*9aN}khF*b~CiE4Cmm)3^+*{D* z9ZaX(Q`-0&!8rQ6WN^n)2FKiYw{BZF!!3Pa#Hekb9J~CDbCKPF&cuNt)($PBAOVLc z)(5+{2@O$tof18Bth9hRwU!qKCxh7C_sx1fuQ{jYai6k$w)_<9ae{;}YXCxt57s_+ z*+@T4;CA-8fr*OYw_voVpzP{`cwTJ9_^9|Jd~X-%lZh=+4ss9*ds7K;5b8Di-e?9L zz;lJWXD9eZky+$1uQR7#X@aw$b$}RH$kJpEcktT%lkvG#>54dK-rym~>_ldFf}SVX zZL~BUq|*y>s;^+d51;_dAL3)L<01|C&*&t`IU$#kg?0`;9yUQeZ2lR3M)%F@&M zw{qOfQhVna#}^Iiy)^E4)M9ak_oOhiQ3A%5YGgt$27bC03qN|b7@#a;iP5mK8 z9(#%)uEm+?hx|G%s(lNQrTW9q5;4DFNfTefSy95-QQ}M^_9Cs4f^5M~OFRzvH_kl% z8L5!b*&lX5u)+Au(}87fn2fjSDoggw1tt0yPDQw^PsTFtJ#6Ddbb61!ZnGKa^oGMW z8+roDjN!l@48%+=JC6rqj^F@){P+)>9vYv|oE^%$YjQ>h&CcjwIz4#Xx~7OW$~xxz zBZ>97@t5u1!>=E9*6rS3zWTb8w0pz9ejW6Oy@!v7V#+AZqpvZ|SAYGA(tPz-Ofwoh z6jO<5Mt>P$n#T_xQJROtpg-yjAN{ctJo-H|JZhNYZ^-^GPs?)OG^><{Ud-pJ>{R<8 z7iRyO>sM8}8~m0Zww*ZRD?$7k;jiC&L#kFpR;!w4T#feU-i4}!=Bx1aGAs9zWR&R8 zInSxYl>Pk|&NS5*mKOG;oMwhS3DaE0e(y0;t1FUxw!HF#pq&xP-HA(1bBkX%`{nPQ zeQH^x8reMOG|-n)g6`b(nme<_Wi z4BS;~(9&I^`uW4J(4bu=^9DCwXWc8;=VetuZKEK>6!WGOBavd!l;ROj(Lk)gY73W$ z$mtV_k_b9vE{KiA?`F@a*O3~4=5>cN`?>23^RjjI$Cz&E-b0l2mVvJR4)WB!ze3C5n1)z` z6dk4uRvL#$d#`rF_((rrzL-KmO@XO)i2V^h<0Jx=8O!W<)r#~&Ppww|@s`y2IM66x z6P~$Fc>r6c{DW4hC<2!t{8sA|KD5;-zy8MF%ROsxLWo?2WN7TNuk>9#4253rVJ3F8 z_jf{9VfU5d4}Nxzy|AT^p^8?4QZvY<(lg-twJ=+$;Bq;*SUDoU+DUX zY>Te1t~PvYe7h`Ileq?kq4dWZ^KV@LL~N!!yoJjf#wrrqHY`)PSJ5cP%a`cjNIPz= zInfVh8O6Tsb68Hc3eyi}8O^@6Q(DH*r*>M)3h7fnx!K6dZ{rl_OI!vRXSx>2@Z#(v zo^g_9prE_ht9(^gf`KspV8PGlWtA*m%I3v5{YD5+hkbimPVr5+>ZuPNdyWlA3OcrW z>O&}#&@lcupTn7s35;(ejfySF)|sh0xh@22ztq(}96F{@0-gw5<1sa{MIb_=XBCqV zdEan8BA*no0Osv4l{(R4Wc4&caYiXlvle6AH*(Ijc)6+&LyCw2hGZuk7+bC_WpcC; z#hFM8Z=&l&MVb=SAh3sk#@N2RFb1(itX8qasN7>&7i!sr=f$1f*;RnriTap9bH94Q;d7B1gnD zyFzwZ-(Fe=7GBRGQ%}kmo>sXHwyZO1@z(XPY|PBC5tNdhG<%RKD_W*yN*?H>t4g`% ztaC7>rmNn63tupyi-gZ8PKL2BtjRDf!q_0R#rU_a6I7MO&PkUxlRZZRF-MyD?~u3% zx6QAezmWOMCplrkl@c8%*CvPEA1?h~wUNXf-TzQ_{O;t#tP}W?Xmt}zoB_sXyB}(U z&#xz3s_9KStyM%1)k4LyB2`Z9Kw;-B-5RL5X`ITxDsGm%m<$JjmEyggVq~WHX0a~x z=!Y!YJm^nv&mmc)=i!{H(X?Xne)0iJ(Vr7OTk7pM83z!v$L(d zX~fz1`;QT}UFG4iQ=;&&W|3B~H{YU)ZhjGa%+axjAQuO~oM^Uje{+{_c_m&Dj3;cN;;EXKQEbwi=f=v3<^fB~_=YWMb*OPu?OPi6? zGlkR<50&q$k5Z;}WHSuXx1x9-6yWe8j|~uy$?)|$0p3o&UMI}0=G@Oumjpu2;ldWN zT_3+cv=GQKafFdHI2w!#Ca5?*sY)2D)(y@_<}W()j)U6*(he=aN4N>&cwh^>fv#w6 zjwASYwt>lGMOjJG_R^xK8|p!ya~+@RnKUN>7H`BCixN)&WvLmf7{iUuu89o|5KlEU z;h@uUnyk`auNE}UY`Ng5AY3X;IJ0}4cRKQ%k*h`?QpUOwE<*|bV2S^5kQZ1yIL~Vn zqknxeAFq+DE>72MmM4C4$PBN~CVZUDP$uyoA>LN$nC66y+uAvm-UiO0*~V*}#$RFu3PB9+;DRC9Y z0uc#9^t5;rh?E4p$->bQ#`4X@IVCtIOb-hr*kY4Q3G1uDH8MV`wDni&`Q)3al$P&( zuvRD`xbK^w3~=PBA!Z_1BiJ+Ty&K?wm}K~p>UEQ!7OO-V>ne{liifxd2!%-Ib{SB*d~-9x!R=n#HBRVG*`+As=M#sbjGqV5 zEijqFT(j14(p1RF-?VTm`*}Fcnq&y!AAqqm&1rvr^OE%u8PqKP{@uHuq^=G5?gBak z%0)DWWm)CP6~T#RJyDqV-HUe~#Nv{~*zgw9MJhSsE}@zH%dCVR;j&B71F9FAPbCnT zBh9cXmQz%%eevwa*RS8a`1a?wFP=}h+Q4FY;d^>S)Pk!bPeu3UaLvtH)w1PvGOE7= zS0Vhw4oHv-ECdB#Wr@%iTO>Gfn(!~Q#RJxR1$#F&+sDQV4pVY%fEWS!bUEWrQB%s8 zqIWQD*mH&@!6H!!PK#xtges}l<+J4sxBh5As%9MopTqy5)Rj%PkhkoD3o+sZ>NU3c z`H!!D!pSXSvV4{RAU9Ww+42g`gq}u@!wu*<4KBt#~@iECgYAp@Ce z02vwU%8O`d&9Sqr_a?DIz4I(jij6jA3RxOD!ip?x{EJ-XLpYI-WWpU*G!as-66*%S z?^}nFIoZjobM@~Za(dbEbU=;|lV1DJER1=53bjU?i>6*7*KMQ|*V!VLzzGCE6DVgZ zV4GGiR9bIS3>5gBuN-ts!+-MAFEmfTivDOV5|9^fr$x5X&PrGnA>JQIYN^@6P`&Ht z%h?8o@;X_tpEApX2jZ8n*R}@-!MSjJ0z7C~9VP++q5@nO-rapQ7$E2t{2?%O;-}FTn`<=`7K%+Quy9Q4epcSyox=hd zEnuO>%vTpkDKv(jF|fuIK@V!0y{HO5OT``!OF1MBh@Py+KfV4AmSLJ)IjmoZ>QIH+ zIbbPJuMphmEr$$=ch@P9MaG9EbCC*qZMriQyRjTaLs($z;|}Mw@$Ibnpaur|0C2^L py*XLB{X-ziYa9cXVAmiBxRCpg!u>iEZ2e&T{{mtmFPx7i0suzZ%(wsm diff --git a/src/canvas.class.js b/src/canvas.class.js index a914fdd3..23adf8ee 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -344,11 +344,10 @@ this.onBeforeScaleRotate(target); } - this._setupCurrentTransform(e, target); - var shouldHandleGroupLogic = e.shiftKey && (activeGroup || this.getActiveObject()) && this.selection; if (shouldHandleGroupLogic) { this._handleGroupLogic(e, target); + target = this.getActiveGroup(); } else { if (target !== this.getActiveGroup()) { @@ -356,6 +355,8 @@ } this.setActiveObject(target, e); } + + this._setupCurrentTransform(e, target); } // we must renderAll so that active image is placed on the top canvas this.renderAll(); @@ -662,6 +663,7 @@ if (activeGroup) { if (activeGroup.contains(target)) { activeGroup.removeWithUpdate(target); + this._resetObjectTransform(activeGroup); target.setActive(false); if (activeGroup.size() === 1) { // remove group alltogether if after removal it only contains 1 object @@ -670,6 +672,7 @@ } else { activeGroup.addWithUpdate(target); + this._resetObjectTransform(activeGroup); } this.fire('selection:created', { target: activeGroup, e: e }); activeGroup.setActive(true); @@ -849,6 +852,16 @@ this.upperCanvasEl.style.cursor = value; }, + /** + * @private + * @method _resetObjectTransform: + */ + _resetObjectTransform: function (target) { + target.scaleX = 1; + target.scaleY = 1; + target.setAngle(0); + }, + /** * Sets the cursor depending on where the canvas is being hovered. * Note: very buggy in Opera diff --git a/src/group.class.js b/src/group.class.js index bf440a6f..d45af461 100644 --- a/src/group.class.js +++ b/src/group.class.js @@ -210,9 +210,10 @@ var groupScaleFactor = Math.max(this.scaleX, this.scaleY); - for (var i = 0, len = this.objects.length; i < len; i++) { + //The array is now sorted in order of highest first, so start from end. + for (var i = this.objects.length; i > 0; i--) { - var object = this.objects[i]; + var object = this.objects[i-1]; var originalScaleFactor = object.borderScaleFactor; object.borderScaleFactor = groupScaleFactor; diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 1f29ef8a..bf62c948 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -524,6 +524,14 @@ // delegate rendering to group selection (if one exists) if (activeGroup) { + //Store objects in group preserving order, then replace + var sortedObjects = []; + this.forEachObject(function (object) { + if (activeGroup.contains(object)) { + sortedObjects.push(object); + } + }); + activeGroup._set('objects', sortedObjects); this._draw(this.contextTop, activeGroup); }