diff --git a/CHANGELOG.md b/CHANGELOG.md index 62cb17a4..7ac74c3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Breaking Changes - Behavior change - TileMap now uses 'separate' as the `compositeStrategy` as a better default. Commonly TileMap is used to build levels, so this default aligns with the common use. +- Behavior change - Font/Text now render more accurately and faster be using less texture space, this unfortunately is a breaking change becuase text will render slightly different. ### Deprecated @@ -32,7 +33,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed -- +- Performance: Font/Text now use smaller texture sizes, improving performance on Safari especially when rendering text ### Updates diff --git a/sandbox/tests/spritefontalign/index.html b/sandbox/tests/spritefontalign/index.html index a3b860ff..a245baa9 100644 --- a/sandbox/tests/spritefontalign/index.html +++ b/sandbox/tests/spritefontalign/index.html @@ -5,6 +5,11 @@
Text should line up on the left
diff --git a/sandbox/tests/spritefontalign/index.ts b/sandbox/tests/spritefontalign/index.ts index 621ebd95..f8862140 100644 --- a/sandbox/tests/spritefontalign/index.ts +++ b/sandbox/tests/spritefontalign/index.ts @@ -2,8 +2,8 @@ var game = new ex.Engine({ antialiasing: false, width: 800, height: 600, - resolution: { width: 200, height: 200 }, - configurePerformanceCanvas2DFallback: { allow: false } + // resolution: { width: 800 / 4, height: 600 / 4 }, + suppressPlayButton: true }); ex.Logger.getInstance().defaultLevel = ex.LogLevel.Debug; game.toggleDebug(); @@ -27,7 +27,9 @@ var spriteFont = new ex.SpriteFont({ spriteSheet: spriteFontSheet }); -var loader = new ex.Loader([spriteFontImage]); +var fs = new ex.FontSource('./normal-400.woff2', 'Open Sans'); + +var loader = new ex.Loader([spriteFontImage, fs]); var textA = new ex.Text({ font: spriteFont, @@ -40,7 +42,7 @@ var textAA = new ex.Actor({ z: 1 }); textAA.graphics.add(textA); -game.add(textAA); +// game.add(textAA); var textB = new ex.Text({ font: spriteFont, @@ -53,7 +55,7 @@ var textBA = new ex.Actor({ z: 2 }); textBA.graphics.add(textB); -game.add(textBA); +// game.add(textBA); var textC = new ex.Text({ font: spriteFont, @@ -66,13 +68,14 @@ var textCA = new ex.Actor({ z: 2 }); textCA.graphics.add(textC); -game.add(textCA); +// game.add(textCA); var normalFont = new ex.Font({ family: 'Consolas', size: 20, color: ex.Color.Black, - quality: 6 + textAlign: ex.TextAlign.Left, + quality: 8 }); var textNormalA = new ex.Text({ @@ -81,7 +84,8 @@ var textNormalA = new ex.Text({ }); var textNormalB = new ex.Text({ font: normalFont, - text: 'font\nwith\nmultiple\nlines' + maxWidth: 50, + text: 'font with multiple lines that should wrap' }); var textNormalC = new ex.Text({ font: normalFont, @@ -95,7 +99,7 @@ var textNormalAA = new ex.Actor({ y: 80 }); textNormalAA.graphics.use(textNormalA); -game.add(textNormalAA); +// game.add(textNormalAA); var textNormalBA = new ex.Actor({ anchor: ex.Vector.Zero, @@ -103,14 +107,14 @@ var textNormalBA = new ex.Actor({ y: 100 }); textNormalBA.graphics.use(textNormalB); -game.add(textNormalBA); +// game.add(textNormalBA); var textNormalCA = new ex.Actor({ anchor: ex.Vector.Zero, x: 100, - y: 180 + y: 40 }); -textNormalCA.graphics.use(textNormalC); +// textNormalCA.graphics.use(textNormalC); game.add(textNormalCA); let currentHue1 = 0; @@ -121,4 +125,35 @@ textNormalCA.onPostUpdate = () => { textNormalC.tint = currentColor1; }; +var sutf = new ex.Font({ + family: 'Open Sans', + size: 50, + quality: 4 + // textAlign: ex.TextAlign.Left, + // textAlign: ex.TextAlign.Start, + // textAlign: ex.TextAlign.Center, + // textAlign: ex.TextAlign.Right, + // textAlign: ex.TextAlign.End, + // baseAlign: ex.BaseAlign.Top, + // baseAlign: ex.BaseAlign.Bottom, + // baseAlign: ex.BaseAlign.Middle, + // baseAlign: ex.BaseAlign.Alphabetic + // baseAlign: ex.BaseAlign.Ideographic, +}); + +var text1 = new ex.Text({ + // text: 'some super long text that should wrap after 100 pixels', + text: 'Tsome text qpjl,', + font: sutf + // maxWidth: 100 +}); + +textNormalCA.graphics.use(text1); +game.currentScene.camera.pos = textNormalCA.pos.add(ex.vec(50, 0)); +// game.currentScene.camera.zoom = 4; +game.onPostDraw = () => { + ex.Debug.drawLine(textNormalCA.pos, textNormalCA.pos.add(ex.vec(300, 0)), { color: ex.Color.Red }); + // ex.Debug.drawText(sutf.textAlign, textNormalCA.pos); +}; + game.start(loader).then(() => {}); diff --git a/sandbox/tests/spritefontalign/normal-400.woff2 b/sandbox/tests/spritefontalign/normal-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e9f58b775ec05aedecb58eaa34d0fd2a8d5d1aae GIT binary patch literal 14380 zcmXT-cQayOWME)mu+U);1kqV@7#Pe?LBv3OR4gSXEg)0EmcY=&!_lb3*>55!z}2`s zq;Y}~ce5V@qZyM5bGrbG0&8;=drJjR6Q?v&OelNR4GV??`)f)9ukfDAJo)CoKWE8_ z4XIKRGWtpk=e6!ePYGXjnwz(d+uPZGipz>aXKj9eyOwzU%yr{w2YDkBD=!6hZ#U$7 zXvOCq&ttRg+M}~;Rah={{QtH5)b;Djn|~kR@Jx%A`*lsJJ~aIM8@UaO8k}0!2-Kvg zOj2L?Dd~=DBhwTIKHH0a{2$)^N>6_u@J%uG%p#TKwDh$-p@rW%&&;&=y(!FUd!fwE z#JR=QJKtaX^MCcSubwPS3QCSbDf2|GNqLsc+H0`O#O~&&cVfNwMXz2f?RfiCOI0Aj zue9^TJGVf;`uUe@-k)YEY7qHxD!%$)qJAS!(3`B23nVpPzVTRCcIXJHX4J5F z!1JRmmOJ`n-zo|AZSVf7w+6Z&H2+g2xy1S5t-l#R{C}I~r0zc9;LG|t@W{sIcNz`f zTUIB2{o4BO+rjEDPcOX5YuWcZBrj*rs@W#3?Q{6EKk{+pMo4ONn&khK`s$s2u>4Z5 zhRqlCf_EhXHtu~)nXjLC@?H-=mU&k2o8s-gGhP<=W`|kVC?8v0_lnOv=F$F;gbu6o-R1uoT+ E6T zMgASG&$wK#aI#;!dMQBlQLg_DS07b&Z^zr}*Y2!YwsgPvS&0)KH)33l9{v=z%HvXF zt*2K|(yUA|e@Xv@`J$6cv?u*uz0Ng6`;bn%h4Yz`u=yu`O=|q;_Ezb%>1^Sz@@Gva zcSd9fzFHirRj|H`;-Gx?V9S 3ZkO;qSFo7i68AyGXWH?bTgY zmDgJwHa?cJ;kgo(CFT?O*0lELx)^&+vrE32w@*Hei@34#v|vWeRtMHwx{4QHt$KdH zds>3+=G!c>&-T8W{(sdmHHBx6XJ_*-e7IQrp^&koxu!-d`+W6N{>mBWFFxbqXg;}M z)z9ymraOI)Y6?x6mMXY)N>=XE;{DEFPk&eb@s{gH+kJ(s+aEtFy{q+adwydh$KMaF zH evfGFt!rZ5 zEq$ s*+u#2v)O=m`w$NnFQRaZJm*xkWewX{OP* L|IMvt=2#k;?Syi*w~f=Kj(ymEV(o?Y*Q` zl**w-t+OFZyWCt>K1_)%I~p>je|F=f?suWzmuKcqmFe>Me?ofd#b~o{fnR=}v`uP` zRpYrEcXjI92}OJ-!(O;gpMPlW< 04E| zI=<53SIOE}!q4@T1&R$WOMSFD7`W>BU)R_$AL-?%a;I(f>X2n(k`(9;{Bi8@^+nIt zu6(qS?`ToutMLDN6~`pDn1md^ETJfCC}ibaoY|f#QMB}`=a~bI3;4Bl7KA)}D1K1e z%JQnmv!_D0ny0sz)oJGadmT{pQstn;IWgzAyjMDk&t>!{2sP?No!lq5-=Q->@JQf{ z_xJwu{5bmkSVd7m$L@U(7Oc2+w&;uY#dSt6n3BF+TDIZaO~DekT}L>0*VOTc>fcMA zaKQLWki+H$X$Ms#>P_ZIhwo9TT%4e(;kK=;r^x2Hmvp+vj#t$M3^nTigKjG5eSErk zQ4G^e&%>8?-VRI(h?CcyHfsCHX`5U+2|x<}oDktUGv^b@oq wv z+PGEtMX9dE2cOg<7kB5pzkZD^DKYw_Lqzht%;@{EQw1~ne@;4aC#q6f oZdm?!Ze zlj9+iwQDyX-s7{-wxTonK%GMHnXggZzfbp?ANs)R%2cWqEquMV>j)Da?pdx zdCkAKw?boge-PTfKQ~%QX@&%+yX{7 ^n%j*BIWMsM-U3(;H#Wm|_Tf>h_Htv04`I@K8Lp>5Y)RLCO@^)rBPQ83< zUu@-L)m4jLG+xNR7%A*{|JJpc!bjelL|IDgRsR=rM@!wc^ONndUmk@gcdA;7$P}a{ z^|G8Z+VMuX)4FczfeGKju1~G--0U!4tg+bJ?XUAglcUe?Fh2VE_N}&I-L$3C!ybxw zR&;N*xcK}CD_>0j_tA+bLQT?m=6)?Hdm++Rq8fK;Lz11wd(N4c3a7tj$S~5JJgtlC zyxWGacX@X$7b*2l>zs9e*Q#SD%;!t9=5efvUL><9Z|0BA-s^jc_D|{V3c0i_yS?(H zqWCSpM2@XX)*bSGA@+RE!lne%gS^_Qm-_v_oixwcw~TuZLy+#rDObBMY)RXAD$IX( zg0 p>oeYbJ1>-RIo~J ZWku&o^&x{JHQn>ta;KWht|{ zMgh5BdH4H$Qd&{>G=IU4iQHe`-} BzSIA(3;g)yeB;-9)x1xPT66Q8 zT&K)o67EU(IAzg?j`?l}Z4S0ZL@q0vk !?x1_JuwL9M7iq&1`%0`QM6=XTNm1pUE)uyL`0VA1>jx@`1&(>cTe$ zEJxG-&VOJ(*|9!!qXvKLqHo0)IF5_WuU7B4Z;+?={9g5rRp<2 W&gP3+ zZ4yUpU;0dEb?vO)fBAvJGWp9T8gjX*%?Tf;Fp6dSzbab(#no`hKK4h_A(gpG>t5Oa z=%4gInl()|%y-VNZ+DL$Srk7{(Du!gi=L}m-c398yng O0{EywWa`_c6Kis$xTd~{oC%Gw`hGw-MJaIX0;@SoQvX|~K)p1FCc9eIJj zY^UGOseF}|Q}u%@#IAn%rHhHb9*eP_vz%J|j>VAeo#;xDzjrTu_MEl){roLFEs?K_ zZp>$j4cC6WdS^}gtEnq0-aPk8RZTlobw)8{qu _CDymz zW5w x52)(glCWE{SIk|>c(F- zhP+kDFa6B-t8RVo*SvHCONq=bmg^7y3BBK#{7|fVb>h#@NxAi>Us=h_I>Ia<#5}Q7 zc= tS&Q6Td~dt l z-^VBYzjEQBHJW}G&atM7Xx1FQ^w!_-mS5@QSqY+A@oclwukv?Bbp1MM_;EfzZ^>$= z6+*?g%8#;Nc%&=dId{ibCt<;J?aOVqsu{RU?zD|oHRV?0Rx@<|@Pyelt&e@W_obzY zJ05JF>Oa+AV*86VogTaGRl_u<|8q_1VKh 5AOZv**K|P`{Tls!lzuX>-v_iZF$>~Ig9Pl z?Umn_KM9_D^v3B)Nz+9){_n_e4XfX|%IMq!n{Qn!nl>`ue)Q++FM%UQPg35jnUoRt zztV6<)Cxrg2Hqo}v4EDO)~(rQ?EW7GB6e@-Jv*`cy?vZxP|FT>QD){m-&5x*JRh7? zTM+y>eZ5*noX!zlmRV;xe>X5!a30fK_W7pvBCcb6WsMV+eYbMdY}J@1WZSBBt$W&5 z#j1(V4fWer%ohD0bokQEM@{p3mu>Y9_ zzV<#q^IcVwL)KSubVFx;J0?ptjjAeO|R|#4!%Oj}pQkR@MEDH cuI~B8uw(m?;xiH#M3dL8P&mI=>Di{9-~PKr&&Bcu z|9-P`~(cKcs7P~I}=!BTg>X*CfSn5J}IL$*EKh=F+e7(WWV%3LO`y)TMPME0pGxX}` zm9M9taY}g0Uhv*HXl?AXb&=n!KAb(iAniy+dAq!*bJOeTo!(C+3eJ`AS+TUVon&B2 zNQ;-ayi5B}hJ@4Osd-aV`ki*{<2uNzy*vBQ?JcXr_ZQh~E&H#esH|kS@@(+&rr-J< z^)rmO+mv#zdiFn5^(wd6{LFYx!%3?uzb|~$DZQcd{=-?8j9;0KZ>kGzl-ZFseFyV( z$IxQ=6Uo<)W#sp+cM;#T<^LP`-xE3KC;prE@^Pqa>3g5xeddqEv-(f)c#6l%h9-Y& zUbyp m;`TW{FFIB5bbC-_ z>K>hs*}I&S4zhhsWKeEi*Z!<)>xTUMS;YprclQZhV?Mb5?(ca#sr#q!Ijzc1-uQ3r z`8!(2QsbW*y)XXww}9tH_}lj7ap(V(I9@Jg+5EtG%fvlN%^Uc>+o`WMyCI)FU-nAO zp)XC%=K^24rr%o^^WBHLqhoc|%kvx3Zn!&HvE|Kv@K0#f#XIl)HlFxW)13F(JYp*6 z(Xclkm3HJwW;EV9RUUXv{jvnlo@SpXrp^|J_X(YUD1O-fliS7r?aE!AJrk?S-9OA0 z)tMy_q26oOy_{vsl9k7Av%0U3Her5duC*}W%_0qHyI?DUZFSXJS>5Y>dTtzC@G;}# zltW?rqD}7J*Po@AC%&ug#np4E@|{{b?aTD ~-{%LBibZphzmopbxGDo Si6*YB>7Qm)x$;+t%ey}_eempA(M1xq%! zzuwPy9&tT 41}%tCi9*P`Rx(WcA+8rgom58$dx5|_v_>Z zt|a=NHDWmXNM>`sy^G7`gcjF%X5p@~sS9~mtK@Q=6ml|Z?m5%&W7m(l{9DD7FR6N! znXj!9{&YfG<>ThK3+i&_N-lpT%)iYym?!f?rQFQ!u-T!F@8ehQv#;3q%KG{AlHVRW z`}SSfa!1bV+I&41$xHS61$htl9CW-AYxhC)`7U+e80I-QcC79+DZBh9F=SQbTQ`%s zygzSBLps-=){^}yQ_Sk6KX=I;i96rK)Q#MuqReAvO_sdA<%_x3 Ukr-pG-{Y@ zqIF%C_0`m+9vk!JLnrp`@ky_9ySn$irh@URxINM>b+(U=mGgV O3bb=YooPA{G@wRQ{_1`t*nno zJ`yl=ebaD%ombux4+Dm0lKbS9_bV{>ITb#Yw31S_-y84y%;s|alUt7^wx%Cmao8gJ zQ`#^09`~O+UTW dw`W&8QXa} J56JcztrMi6Uno_!q3vu>WJG%nYx8Va@Y2KkJuw2-gi~MT5O%7vID#F zOA)W~JE1H7C#c VGeghtTJX`HVW z=32TeiQCn>&92(|hMA#IlHEz6LosUecO-Qzdzsa_U+tIx mwvH{mD&w=%hg(sXR@oWFUN(vFE)#N3%gUZ>;`TsYx9I0tzUF!9-|kl*vJmiE z5PQgkE$QW*`7f*=N@dL2l`6RL^nssewZ5^7SMO%ycTV_Pt(5jYapIPRi8pfsq%7EF zx$b{>?HJvCZC~Q ilfhCIHHNf$2kzME=!O5x=NOZ&Etl@s2W8$~@gU#qn6*o{<{JN|OJJuEIJ z u>hxinZ znNokgC9@oTu0DP4zxm?MCDYj_1}LPeD=~e~`o=VMxwY-9+hMPiUOJ?`$h>D{yi&FO z{u_hKvmd9ZB!*P2pMBK*nW$k}UG(RpR%c2-`#wIr$nK+Iu1uD=9b?vtv{`*eKBsi} z|IKn-#rE>`qqO>GAJ2q76uiuGs)X%SRG0ZN<5mv~Ry(E7Q?!(eCt9Ujtk{ !-=bYMdSC5pU zPe<09wRU}ToZa+yLC1rgH@8Gixvq0v=V|U!>(55X3eA%_d(>|~()2#(wIgrh_N~vZ zvOl= JxKTV$dXSS?n*UBZg zwl8lw^PNYQ_5H^1MN2nIxrl}?lgX(qZ+`buW{tCWYqQ3x%9j&NF24J}M`96o)v>9H zrrgU;thNeY*|(KDy+KQ@zR3UbmJ0VDl8cW`U9T-EEg&*!y;*2v-POxKk}~F4xVn^A z9en!th&vNg-_<2Q&-Oi8bR?+b_U}G<^{&?FzfLmS^UQVTGavSQBy%}#&El+kdlyu9 zu2cQiD #rJY{#q4P~5H{(agi->`q_!IEdvjf)n&*b?7- zx@8AL-#U>~G5 4u+Y>vk-Vc8$F0-dZ^fHsa)#L3N($>2F zqNP@5bS^FSXRR+^{A3dQ1L?B0x7?<6nOXK;D}9(K-jI6w_}Px_i!;~eE1sUxTj`S1 zQ!LqfG`MNgd|Q_H7pJez{(P|hQpJbakyeVgBifY3*CapjUBIp!#uBo!^8T0o8{a-E zeixA4`tq1zhE-AC;R$^q*H)&wdcL^w>sIK^`uzdtQ%}^_>r}aP@8x+Zn3M6=r9Xuu zwRqvn$CKCI{d>Rvt4G_P_x#nrtly-1{Mz_(+MKwylG7WO=Wm&=`11I&=%OmgOS*^W z?YkJ)wnTn*-pQA#9_BpN%hakRCuNrGQd~b>@vgy(nX}%cdMvy6vTaXXTgl-C=~ 8+ES$E=AC#A(p $iTqB;OXk;vd$@?2>`|k9{B(O literal 7099 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_ts7>k44ofy`glX=O&AYJO| z;uum9_jWFOdGz&-t?UX`EAOdB@BN;qUf6qj^W+ k)PGYst$Nm0uXDCbY2e=P z_dEn#YG2=G|IWq0_^F8{_twGK)2F>v3f|kM&o@p_J3lWm Kzc%9 zb8FlZ-V;9#E#^I8ad ke*NoVwT>rUc!6AVs>NUH>*(VB_BR4 zOZEGE+$g<%L(+R$?&WHcCFiuf*Hv6ww0YXgtKL7?@XooN{MUAV _XZ_dtKQ8^Mw%Z=`- yAf4(oBKMAb*~6s zjo^A&eQn~Ll+LO8FZRw{eM-A}>+wtN_M7f(6`r;DhVX0Mt=~ku&qY~15&FQWX|pSL zZ*^JJ!-J*XI)AseP8RN&Z`gT9=id`6ZP8ED?7sN_J>L7cd)qA0Ptz>_t`(Jw+kQ?r zKeFg*eyzi=Z+nt=N-x*h_$7Q=% *+31U?dR6kZ@h75 zDzD>5#>7c8*4)^0bz0Q_-Miu?c9h)s_3h1-BPF@F6CXZtsnx50zv{r2KMkdMw- KkQFW9}?`Uwd5XvN+e20-eC}zFLPpoQ%GAGk!VwIy^m^bz;u1 z?W$pauT45Vf90>(Uk~h4UIj_lrFR~^UF)C}JYPiNVZ G$w6W_ttt%@}ZKy zdoGmUXPkQe)$@nzUj8b7cg^yzwN-KF|2=0;)<^%}SRa}6Gyjil D%QElejNknADIZn+BeUMF&MTMsG5hGVwJVKUTklz4V-NVb=9#il<+lqBQ@m79 z$6Dvr-hF>cr^IJw`bty%=$emZ-0Hi&Jl*%Ve(Rg1&C_oEXm`}!TsCQstkB$@SFE`u`jGS8u}9CSH|&)$yZW znx&)cOuN|3eJ37qoAX!c&Jn+Nd$Yt=`3#BnDPFFp ?=9+98 Fk-#r}=Y*e|%K+zkb)!@mSEQ)V1rYx8J^c#MFD d zfqT8)wuH^|> l$!51aI| zHyJPAKk>AfpYJtq)oJ#NADrA=xn@qI@%^a#jr*e?{tMl?Pv*`^Q~j64QyUk)d8ff} zQR~c?Q|;;vD%Um^gyfm3HO+mz^WIcul>}a+X@BN+U)%nlS@y_|HxJLPoEGypdUL=H z4xP!X<0^7C?YbYD;BjG=-KUNBw2cavsfO)+!F0HY @7c-cd1t=?&o_w zk;zD=Yi*6+RmrAqPaj7Ask;lKwv@X+4-wyZF539T-dArYEPMHr(^w?_z{H1TZNkE? zmkvG?I$zMqwX^V)(eZz(%eG&rzP@I{=lkkr^}(Vq)!*kVIG?`Ed#3xpbVk>d=Vy+F zX^9=V;WYWNVcR0j%BdCMMWMgtr2?(*N#wBVt=?T8m6P}HStjeD4g3|Qz4MG^7EIkQ z&%(jnws33TjHBW?C0~wA*~zr*+bY%+moGL`z8%tCbXQTTlY53jjEma3#l>A3GE5r+ zbW-O^a|%3WE1zchd+*VC5z8$WB`cL2dHly?<%G?L4o6?B|03Kd8NcJ|qRrDa-yfRc zbg?D1uRb#~qfhg5$^1i$qq*D?)pl+B>pK5)L{!W@zq)IdSAX@_FD&=bs}Hm8XT9{o zvR7kL;$s231AK|DD&cneT{BKfyjsPYqVnaBf|vFDt@mu-NBsL{Io*23W~VcHYqVq} zxA08wUQw VeCuWc&R!iqz`=EZQI=y*{Xc*|Nx zrhd<^oBt-%ul%}R( (l|QY2Cu5O<)6GPkeO_^X zy9>|j9l!6W(ssDd@W$?FYf-7rm^SyR6`zgL8dCJ-_3Y26_RYGfsJ!U;>wsG`1lbS# z=U|xLSRKEG@1${&>P_z7DOOVsM*rWf#b$PbPcePrAMb7Z-w8~99d~`_lcnsNuKRJU zxbwF7+Sae y|%XbcS2=NkLK2Rj%AE6;iX-JdXFez{ua4Zh9s3#cuV Ou)E{q7e zC%$`=(S1Wb#)+Adsy^1-qw!M!1#;K5^ zw|fhEPe!Gkt63d;@TQX5b??&Yi~qZwmppgs%D=h|x2?Nmn^s#!Rqc~g$ZOrV*n;&v zyRhq
O+_4ZgnVShcQ>jC>#doh=WZ8h 75Xie8wOMWWNf1 +jghl zn_Ikm|JEnJu8Vr`f1Q(7c5=myduehem(DNRcqm42%R@Hz=WDhEm}D+(v^#y*Dtkq& z+;JA? Kfm2@+I%iH=h+@Bp5h$;8(e)e>gyLPPCD+`fn$C+Cn zuH>yhQ~qV%Ri2w(1)a~^f|eScjb`;w=Bix7kl4EU?@5NPbt{XXzK<`pe06X4w3wfB zN_|QW8Shy2=4kV=_l#V#mIVF#+0C#-u+>JaVM>>4pn&R?J`T0E%P;5sbK9A>WStlv zw}g!xOV$xV4Uf9O1|C<%epZE_)!{0#t~I)*4+I)mBHwOhdZ} Pmv&DL?m0`WU?LS9HkFuag&D{%Ic fhepRlPes zMp|M~M9>| TK?1$4WkMB_L;%}+mv2?=@4jz^hTa&BAQ)V+iuiKEc%>S9dLfJVH zOM5zQEc<`s`K{8Ujd7jg0rwWq`uJq+5}}Szm;H;))(ep=}ovx`#i 0WZ3kA0IVTD>{ESZj%3!j0-lHY| ze@rh@Uwm2IEB9c-1c|_P4si=pR8Pmg-1z09zsXF2nhL+(DII^+_f5O)z30H9ghdzL zm-)<6{mR+QB4F2iL_|_p(&>uv1!bKb=XC2odAf*;ybC$Ws^Fq_cA^2FK;TJ_+cuSb z^Ngh&I2bSewio!YN@2!+$6dNt=I`16CHE`C$FP*eALJ(=Wf0*A4Y+%+QG2HCp_f*c z!unzdY@X)F7aV#S>0P_kdUc`3
i*L=b^ew8=gzLvIk0=rp3am7x64n=S-E9_^0M-8XN2dUziYMr{>IfmWuH}= zG#q%_sUQ6}D0FMXWyAMtR_F2XaK!L7Ot|-j(b22Z``3$YY~Cu|-xt5Fe hcMW)=EeCcJ_JngHh%zDR-q#PE67o5$09Z|5rvdMW?k!<(k_MQ1&JKb!4HG($z2*WG!)j(Hv3qc&eh&d^6$ zKifcIok7R ;};de)X34%)Aty)^o?+GP5T^cVa-(<+v$m3yp}JrcrXU_J43({EN*7Oq$w z{jZukZi{YhtcaT-#NqvRUdEyrlajg#9Zt`gpTGLk%gb0O8Irz9
4*dbO65AAGMhOTSC#J~sEr{$&|OJ0u#*o!ZYh7%p{W zY)rcNXh+3?py+#>Tz>9Jycl5D?tbK4n$S* O3##OGe z{i{V=y5#&>mN!@|{nQlYm~ud2#nS`p#DBk&TvwnWbk(8Lw28^dZqDXj&WX2ozqx)j z@BN#pp<5e2b$r|R`iRKvdl&w*Yn-zDxO9m#hl&(q({0~Zk`vihiFM6aa1FfXAbs-a zy{1F^)c8KCEf8#t*->w6pup8~u11|V^xr#IZdEm}kByxt?(R$Y=o-z!A)aT q1@Euu8(It%nDy<8^nC9nfm4@0`^> HK36K5OR=TP@3UHloB6lM0#kMm$_ZIE8T*3J-LG00I zbIs?y?(SRq%a6R@`Qd}bh03^x4|(MkJVJh0^1XlPahbiH?f zzD_K=$GX2<;>jn*z;2GK(fN~Scm4MdSnOuV#=kY{qLxXkhsV_=`xl8`S>rK##u3(5 z&f`MM)wm~A^%(sTGGwlqQTF}|tK+ey=R01mUFlk0`b0kB4QEum%{qVe*aMP_gx+)+ ztE|wt&8$-V%UYMg^g`x@X>wT%b_yOUu7`YQy^RRm#r!e9YGRAiC9O``xgI9_yjO;7 z?U=Fe!c;wT#Y^8JlEOA$|IX~tQ760jPt{fH-5HhpA0Iq*u}C0f5A&U`(TRqxr&|9W zWaQL3rT1<6>&w;ePxSO(3I5EeIP=jFmhGj^O=eybL%ZX&G%K6;`^}Zp-nsbn>136; zC$khTJ=-^hZL!JneKMOLa?as=Bco8f#n~fAb=uA~u}_y4wM_nB_LPG+Wj;&nDrx)s zxj(C?Up> XLOOCT&NnNk`0)V@X{CeH&vFLoBac z`hBnb%ds!5e$$%GgY+8mMO3{5%AP2@uDlWKC3E6e;mX#)n>;@oWPb0tqkZ)2olkm< zOrG06weD(gIKTXA$r|^wEFl>tncEH;teAUc%g@D3DjgcTXH-UrU42^XZFJ|!_20Fk z3YQ$d)~pLM%1N@gx3tlrX`{B+&pA6(_N;mGO8jr1LoY+1o1jo{%7wB?j>cd3;+hRl zUD7J&=wq_{74^$St-HCFndSb2e-U#;E#$L0w>({Y{4BRkSIxCcg3O23@hYAAc1}QS zVfrn1UXFQO?3TiAe9Ct9d(T%*GEDit!gu~8+b45lc@vx+Y^ Y1f; zOg@!$@O`z^UVZ7{xuf@%dVVXqyOnwB_3{VIrIQu}Pn4QFmD^5||K7s_wbzC7wU=N2 zx^BUuH-?NyRKLCq{JQb=$&DZRSAG3#JB_(MH0Y@4W}Cd=D;xs1lqa5Vi%CvBocAbk zqCR6y3rDE+lMn4ocfJbWT(U!>_>+Cuj{2iJ@1}a~5fga6_2R+jYkcG!7GG47Ym^M@ zjN7?3XtA-%`jUpzztzKRv=_46eemL=gv%6LwFZL#AF%}r>sR_bD3EwuYN){X_f*Kc zfLR)Qj5p3*{% o$r{?lF&ePSmMJ4dqnt&=m`n-AqZv*zMy7ffZoGlS7cX!rH5_d8T>gue^; zKk@6~wH5!v?k3+Uh)iDCmvdERrQOmyJ1&cUw|JhSvu;;Ig3**cilv@^53dqux1D|d zz|{pAE^{SjZo9BGqe)Kld-xOYAlW!8l_=%<--}vb-roI7b*e`AwSs;&0oB=jwHjSX zO9Vd!O#VHY>Cx1F!_Fnzg^t;bfoIux_pX~SboG#A!(UZrkNa^|P6z!3RUXb2Ojva8 zfxvTyXZMyE&$L;eP#n^5$6~G4@)KWvu3MDJGUezF7MG>_tIIPTDkL-fucj_cYtQ&p zWfv;I#<^nIahG3r->) *^^*6tfL5FF}QKqb;#Y(SFOh0_(P+;h f5mgZ&hCpUi5flV1w7Ju!;7uD+Jda+?iYBoK>U#S90Hd&$oPz zD-^ypZ1dmZpx*8rzi#(*9kcYQVkxP?jS9Oj{Py|WFeO})_h43akH8GU!yU1Azbtz_ zqxkuy2Y$9sTV|a9Hf{Gm9wwE9>i1O*9+m6*%5D4lPxEI8b!u}|L Fx|1L1$vc-j%%CcWU~_)Y-zzywA^C7P!p)^7)7-` @87Fl zAyzX(Z#s|nt|>XKMs^lk=gEt-JN$KME6Tgn+-e-e>N)v&4_p7SSWoG>inDw;CmDyb ztK~D+yWCZ%FK%Jez47MGRk@ovG51y(yR@%X=6QW}>W|4X3-*4W&@iEG-4AWvkl4!b z3w7$R*h16|zD)UNVgDp4BZXnLtJCXmG||2-B#Vd zN=Ul+!eb@(G@Vt8PQRY3*m$ej+$i#h`rX}2&6e=^?cKR;r`@-hgDby2R4&!m<^3Oa zvc-IN>@2nxb`PV=pJ%>)7AD#L=5B5)`}L4&Uv69X=kLpQ-RQDtdH+jx>1k1)UZ1cD z-|m(2e=X|QzG7f-^hw-_rHh&Ua+f7Wp6Z;({KcA6s(r(Wh@6t0>ta@%Z7@=D_%b~| z EkK;`i^Ps{FS=@Wa?hg zC7ygYKz6NPXW%3+@>f&o`dYua@*W2^W?!)@NOj2Cdn-kd#VC&{K0Ni#Qibr)gCYyf zR&3?j6nu>L_U#*|SN;2~?8x@D_@9sTgu=Es=?P{E2h$Wh_J2(%|5aI=b?4oL`PWUh zz01Abuq96~x@ftXg6_;?*X}Oi^?3bklWKVu^QB3dId^?;(Ng-KJilyZ_4d0bDi|0T O7(8A5T-G@yGywqA!Rqq> diff --git a/src/spec/assets/images/graphics-text-spec/font-text-wrap-win.png b/src/spec/assets/images/graphics-text-spec/font-text-wrap-win.png index f5353bfcb19573d672df3733893996dfd431f714..a5beba24a693684b8a9b7825c37455feee14803b 100644 GIT binary patch literal 8073 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_tY7(87ZLn;{G#Ije!9Nqfw z`MumpVXNOYS>I4=Fgz k;n6Q*RWi(#69g();+R_cKR5|_cr>`bxGEv+m7z8z z;eg0xLpC0X%P}cir*7GO>09}~iSK{qU0o$T!LIk+UgPvvJBy#q`FuV`Qu+KYdrKL! zd4>iCe>Mm99x!k=(<);)%p;k0!p)3HI vEGOuvu)!Ltbd|Rg3HkWRn zx9;{KGxljZ4n|^%kx?B#!xul@sQp!9Q@t;D-CR?*Oi3fT9+xG;x#$1MUM$rPD1DJ1 zSpBJYh0Tv73wPhfqKcp=3(Mu4U+@3Vb^b}@3d?`%SJ?g1lGrDhQTfB@> }=luN_&tEP6H{sRx{~zrYqW-V!d;hL~Vo#aEwM|m@=JqvZ zPu5MC7JAS&GqkT&Cw8zNP;vZd %vEa;ujS2m+(!kSAz z{4acbSRb(Qdd!r(t^7Xuyf(9I<@eb>U+{VIbiv#oJt>h3XY5N!)lzcWc{*U@_nEu& zcb&DC<$Ql8`QpYutVg8wUr<$PHEcAOYgwG7qxH?!y`TSg?72c2OG!sb`%4**nCf|+ z7G$fjOuN$`@%g%?XR>d+k|5s!+d_7Yr9mdAN)GIO>1X7i?Kmr>>5hfFU+Y87>ATm( zpEFy$gz4O_PJ@(&-ARg@FR(6NBJ|N=bH`$XAHuP}Hy-) zl?D66=R9$}pZ2X)@~&{Y!%V+`O&=^T-t3!khUxn<>q7<8jl9^O7I@A#znZz^;zZVe z5@%vQ9xh%mM>S(sx!kO0@eO_b@lCOI$D;PNJ^Z+ocS-27$S__BwMmBzwEMy@M<4Yr z3rLd+-pt9cuk_=#DwBKPf^|1*c1zAmvGr>C d{_A%BT9k54V>$at zj{xzh6U4Rja=CT(8LvH?Q~u#>`-1fL4tw922mRMJ`9yNBs;kk=>icUfV=8>%+nM_p zO72&7nAOB7ygs02>Fy^eS+h3oa#m{W=JrXMzn`zIS@HXkuwh>Q>eBe)CsPevoSx+V z_{DNo;GXu<2P?#WZa*Kn!t&jEp;Uz*-;`% w{#|P6YlOG4< mx>0sW$h@P7gJvpWTEBWIn7k`WS^OWoTyuGb70ieZ67unWLeKW9WNqj z$=NsSW6!JU5ALLR?@cQWDiJe0%N;uFruf9^Mh0p^bBz{k+oXB_aQxosn^(NJ^>l&7 zCZUxzE#dq6mh|)%A4#*iHG#3bZ j!wKb*7TyK?!q_}!iv^}IVew%gVVAJU$_pk#ORWwA~7OpeTJf3zxRx3fUS z)3`16|M@q@PixFl4o&-i$X@x@jOZz1m&Lnyw`-^`T*`g% ?`O?*2JMEP={c
4UkIJz>jl$M0b6EkD!x|KoqrsrB9guA$46S3kIv%YW%r?d$#j7aiC5 za!>ffIV-u4*C#o&n->=ehn)W>8 uYMb|x$4xGMnAuobt@gg>*5m(+ZXdCF?YEb6-(CN!n`W8JZ2Z~%syoA7=FG(6 z=Px(8c>l`?I&dQST-;dNKD8}{a?=GVXc@;6ZZ6zlDauJs%%F5P-r;XnK2_h!ot zr{pT1)m)MJS-nI3Y(mlYgD<8f%}5AvUl7joFe>T$PoALe{lZtjbSd8NoG7`-uP$41 z(hHsiPbZ!hjGcb_edw8r=h6IcD}OJRtFF8s)pkMO{py{2Hyd}ne_v(dyhF{zzC^P_ zb<6&W-QS*?-!XH4edlOd)3Kob4?>0Mmp^20_`r8CX@%CO-p$t~PahC}A-&0IU#ZTI zXU!RvKZI1QqAu=v;Pf_n)8(|SUw aATL}LaR6bU3%NmUCEH=ew@AV*G*39qMy}O^1fb^d!Wj4#Ob{)=Y9TX zO%?7x-!0F4yd`#nARou;p6=Dh^x0-A_SyVuaXYg!I%je`6QB91?|(E`#09UJa81r@ z*<1Geap_!hxu>$nFZr8jY8D@KeADuUx2;me1@5n~dJ}X+DlAJr&MARq)y`DoH0DL$ z*pDvt>t{LL-^D9d^_?@f{sQxbSlcs~FDFDuF8Vq@WACm{?&4jnyQEi4etv1QZq@It z<`tcj9M@TVs9BjF-CKU)-N$zo7D|uyd0a?U7A=?{v@mSSTLbB|%%yqrqYDK4ckDP^ z68psAjmqo_-cuzEB0T;4DN?c0UTiaRpDGCd*S!6aW5(0cTN$fwJkN1y)tsn*pRGQ_ z|3bi$=hlCIN FRo-gA3 #7-H_CAU0Rpy8-L;e+eMrI zOnbL2xwbgk&($X(=ftl>LG7ghyVm}A>7~uOGDhd!65+2sn=Y|G%HnZZ_&0RfOX )$=T_@ezoC~qmSn?tn;3^ux9(@%cqw9=-J-& zJJ#lK;W@pX%LKoCcHVDrL~+42hX<-xvaIZDCG|coEOcBh-}z7F{FT^)Ul*7sCw4{n zxH&OtA4%X!KGSnyt6Is_Ge_s}`EE`UIiZoYxJs;4mH)*3e~BJnE#9{Bc59t>+!A$) z?<=dmr`zELiSC75hZ99_H)jhqZCHBInsvM4iYtoi%D3t38a{5+E9pA%Db~;7WSIRF z@#J0KEYw|uz17dIQ@7pwV|iU-howUW=icpCvYZwL1;<2wn)mzot(~$f4#?>S$2@G? z%%WI0Rrqj6=Z%MUj9rfU vZR>e=BahpZ@FB+{!uk zb{v~)w8lEzK-;~0h9zra;Ns4Y7v_1cYtOJ{(g~IQB^|Kzn|;~RxCghz|2lUC8fd#U z8#nwuG^cd-sWUgky-G8ax7hBnmhV3x{huXQ=!E~mDwUnb_p=oj><_h5?tVE_QG9QZ z*Rn5L;vTE6X`XTLgk|~5zX_a;j?MXYEKH6ewziYg4{;sQ+i|e(QP1qhGt7-OmL9li z`sm7R(`Sw{?b|qBPMNfg%g4v2{k0JD#|5YUo@;dui9a06Wz^I7{Y*0Jq88<&4qF-2 zmwvjQ{Pg9?t1mb|CR|cWdH7U1cZb)eRZHLavq&XQnbN)S#Tl>vYVIN_9QP0WlJ*z5 z^QYJG{o WA(_21Qj|XYH=Vx7z))Ec+t+kE!?nSYb zjw_}q``b=4|GKhc^ dbOS(EcV*9&u+IIlQ$QQlNSc7eM2o}!ZpAzypf z9Ofu%mfaA3 nnKYo)#~?7*jsw-ut6p&Ny5(7f#OH@s;NS+sP~IUL5^uUpVzx(G9nG$qUbSr`|Z7 z8htA#J@JOPT(w8q4U?ZKw$}~UiTiAyKD&@#OU~x|p-(sE;(q3oY@T~X uBM-87{zWFy+ zZ=N}8*|#Us6Z6;W>DG6dov*sn^gO6SrfK%~DTimSnswVeTKu0R-$v;y|3AC!b~~M4 zTmSIt0`B`tD*G;dI+2?6cfG^Y#{ay%hu;(lS=mRi?0=xQ#a`#uzL=jvAAYz!xLSR1 zqtY{{2<1($YD=~!o-<&Xp1>gTVx#HN?asA#-)R?J^L0APf4+5d*`jY{Lhc`O_O(as ze1G8IvQIIb<(GD=a~xBA`oYKj<+b0Pf?H)uE?vC!^dfVIb*$yCKF1foQW)L)=I^MO zxO2tyuH#ol?i^A)7WZ;X?LlMJQwHWw1lr{dh2K}zG{61w){@<=lYioR^Bn%C=Z-Jg zVf$mz3$w2BT`AqRt(MPU&z(5&Ys87Rrs{I>@9PEMzBjxO_c&tX+jSRbH_zaXpW?Li zmFW@z#>;mmmkHJ0KN>ANCFsGTQ<4XrjjW8$%O}ZHPTJL*=DsL<`r_o5PAOgP)oH3x z;<6Jm3)cnx{d8nj_{)ra7J}~-WOh%Dc&uDH=j-t`QtF$tC)sfxo0)U;`?ph*Lpn3q z?+9N$fBAy?@#)(FcDfq2 hxb{tT8`7u zj^Eq!zhB<^BXigHn7x%VyVLr)|FEUJFmJoC&44BH^IKE#Dbuf6xtv|K{_z1xhsg8A zwkst%85sDDKw|;gUv{)jv+K;5SKRjVmC+H_#}iCDUfGJrTFV}lv^{imN79xTK1bf% z-2BeBFhK3FW2AZX=1VTSPxfs-dPCxp`TV+|8h;s!REwaan?Fumf6v!;`CXOACuC-9 z`69zV$8cTYZ3oTZ!y7C;KDlkoT~`==S|_@#BD+>f*7U@SUH)J7>QXhiFZHL`EaHE9 zqjTpnRj0b@kZXGvXYnXJ74Y7uKI!8_eRB=TZziwfjF;Hg{JIjA^xDojz-CL$ZKdpK z&hwwHh)=w_bbVV!$T`8;U2WgYl;ZcWu3E%nW%$_t#ozko-$yj~cG_(`)9~PR+xA`I z>@6HdAE(Utzfn7dvEKLk-Jd6uKJ3_*edSp}?|r?iOy7UxvfS}n^mpm)uazR-I-jRC zCH0qX=bLdzpsICeyY`1)%vJf~x9@#BvsLL*vHY5?T5;zmT&+`VD9_D6yD=hR;` zYf05VnAvR@z3|fl?$pN5%To34eiJCX>fiqVqy3A|k`Je@U%oV&pO10op?H1P^KB(R zH|nvbCtP*h&$j(#M9I-O-on+F`HK8+Fs`+EU3ffZi|#H-xyBZ4ej9n8?Wc-3xT1Fc zuQZy`E2W<}-^#vr>FGYHzqZ{v&qFm?`&y6X-m8t7ulezGg@t>5qnDw4#UzV#x6Ug( zfnHCK@cmE|p0D7ixFvJ{m5pyDxN> )Y{L+uvs~I-05t{n@ zztdxpB~QO8YoD!Ks^u-yY+`k0uDaKup9-(iFQ#rg-1Xe&$xPvSwi_Q+n7YWS+2zf> zpHO`|U6#MgWZCWJ>@(9|{y6vM^cLM?;!R(pw(Qy7&-%Ey|M <3z^A7I+?PuJwSy?Mep*HnP{l%{3N9BaK?)W+XKXX=D^I4(f4cd2Ryn4*zd2F%A zO}W?7?);|v_ip-E7@!}?v+(1g%}Q6!zHN(M^D}$R?w=uBY^qv+R4c7?+w}0yvMH_n zTeyTyINUk7|ASO-rHOsP#(PoDA{I?_IyW`=>;N`u@vDZQdmR_AX!WG=4hsMuQjm%D%5J*E64Q z-D3OMyg=A>@s{3?GW^dH U3H5wbkmv z9qaxHn9S toF_Z!4X! zt fUs#9ev^O?T$ z7qi%Ou9F_@r^>8?ti^o~I_= *?Li#Tf>m!^p@C!j^i`*iumk~*d8vM+4TB_#nLa{mjj=a@7dw6_~)ij zh-}fuFAp6G{AX&)v6XzDJXx`1sYbfzD_@_MD94?zW*T{4*mshHTg^|+&?PnMQbP*+ z+Fd-74oneVn%Y|LLyd!97;{cZknwY5c>8hLo~I@GF0budYroyf{B-wo@ACuCy!F-Q zB`0vacq-C-(J#O2@+6;>UAFsDR`0#s6Hy(t@An;^iQ5k;Y9yANZU5!lb7`|w|G_|O zPo1-C9XGnF8Gg8DT4puH;_@0VAISv1EnjnDEB7h?`5B#2_hI{ng70m!>y(moYRe|X zS=t7CI`-+FoKODLvL7E)HypqHerH5Eht6%2|1|~j2C21+*RaQkzbUcZ`~GG5o+{>Z zPg6Ktxm{c0+^udo^sil f@#k$*^{Q$M9Yr3d;j!> z_bn=Ndz!+bDXXL>v{1~&b#-UWUY`diBo!9#2(!pKo}HgN<#qe=m?tH=n?-m&UfX)> zu-AUU{nCdbU09VQUyJlE)6~v4;-4qLzs2Fa-0hw%>3v;B2V#4VT(R9$H?wK>=DRi% zPaD16V!QYK>+(HaEA{Q2R~>6gQrDSxW66rPD|;dotdF}|Mg8YI6u*!A`H7POheVc% za)~HknPhY{V9mqNQ$8h}_dj8}>z8u%lx2$#1#Iw}x$%t4vX5D;(~cUgeV(^|kzmt7 zw-YnxaIhbEeCNuJ9M8XHv!^S@EScLBT~ha_=}d!_#8c& *fTwF{?s zEq%J%P}{AsJ+;aE9lN=7#1E&}o9o$q+{?@~jek6A_ISv-NbmRjKa(@O7%xWgorqRn zo9k?H@PKxCwv6(#_~rxIp9LpWsRozXS|-g=nr5-sYMO0x#R5*lnRjD0OT=I6eqZr) zg;IV gU63ZI$Y zs}$?d50Nih`9N@Y>Qj?bSq|2X#v4Db+kElU1=U^qUfrB7zGkx0)};IYot&!fbac-N;XpJXkJwwSw0^$FqKVkXOzW EHTQnWo+_n3uQj@znKqWPHzdX`Ps$^Xg#-qkLn&th2_vFZ=FIWiDRUS{DA7 zVcyJ_(-b{Fa+l^Vu;a|}Sr^{&t>b^^YKMk)w}^fG7lJQy=|n2{oeJJkJkihG>Q%<# zCtBOX3q3m?-cYPt@3DRpf9bL&o{MtPg`w>J{^?SGIoG&v@jvbl}g$@r$3$us^xW zNY3Qki$@!bg1i^DPmPQCHT6Zrmva_Ojp6SZ&DCyS^;j1 3IodS9;p>&l?{(Y7`rC_UD5&3HMg~*kd(K|5Bz2 zkL;uW54YCz8w=FD7CbV0zf$D-!`oGp5RZ&(+JOY1$g?+;_IS?22hzG--x+%G=|Ip0KVE=V@BB z(eY34pZ#)QCPx1Bh|Zt z9=||k<9y47FV6k>ul@5=+Og-U9gB-Zw7$*LewUY@Ht$NYQ_0^M5^*BJUMoXv@_h;o zJ~``|F#Pm6F7tTGj#oc(Sf2`A-!9QR$1yBsU3O4f)@%k3kzP~xKXM|Kc?W}T&EN0Y zy(gwp;`zJ{bC1RUaFt)Jdn9{@=A5M7#*&jMLbeC3X0$gR2%RmlJ*R%*|NTz4lAPk& zL?%aeFLv=sJN`naXy4a6exAz;{(5wsKP6(*ke6j`__azl{Wn*??cH6^Z@(7!FLhM$ z=ptvAxSw*%4{tuoFA%jWK<8Cjx5?X8Ji_ +|9*2-yvwugg-*2>Bhz` zM@2()t~pj|Uyv2fj$HeCf%7#H|DD#4|F4hOax~`mF##)v)M* P3)?UfVk?Mx^>s5`5K`DaU|Nc7w8 z_t$v7oU;ns-4em)Jl*5#K}|Q+`D-Wezus_Z>fyC}A21f4Ex5b&QFZlOVdp6iMB7%o z)D(PN^Xp~g(l@GV3uOEX(k+W}Hu!ZJ8(h4(jQw~)<)%{`-9NnDZ2$S5fI|0c*+d4r z=iDxiFWX;5{901>f4BPE8E#$^cNzXUKWU%gk%vs|&FmqUs?_;qGP<<8boZV7qgQQn zLC4G~BFOwtk)vPN{+<%)B=!e>E=nI|r}=0&TtCSkz2NhPXFsxo)8(^WYqvR_RQP*- zlAYm^36hUiNUA?dGTotZ>z7*L>Xyi5b)O~Q%b13CtLmMr*~YYYRbk;j%Wj69FG{z5 zioD*k } cPEb zA5N+Ms%}k@dU@tmVbtFgsnWkQR-E4RY3A*w8GgH*8egdP3x23pKXbm`{GjsLJGTD3 zdf{ 8J_!u}(mU5JIALF##$h^Rm2(|) zmh!*j>#zI|SJ5)i`hUH{`+)XpS+AArjD;69u}wR}{-2$5eTePPV_HjfF6{}wzfS$| z8mYw}MV>vswxp}JzAxzZf6I;O&t~8I_%HZTb2Q`oGs%e@YKKd*vTB}12??EPF7a9^ z6LH-2(XE;6i??{0tjv1y>)|br=IOs#rC1*)D)c?N`*g{kx2Hn;M8id#?@Uf>*wGj) z;G(_wZ`QQXtTP7>>2|p8IM&srHFwM9LWQEaiW}1=&NaJkd-cVq$m7XJUT)9yas9n! z**mV(oEL1jPi)(C*6XA~e*KDN C^d~1ReK$pV;rTt>vX>+JmbXW+n>xn}{;zL+ zDlTmHWr@VA#955;jfrhMKLoz7X-aJSlCy_x&M)bM0>5_|JWw_|B3h#?VRR(fWW`l} z $@NnZLZ!K-!Dz?rRd$L{qxGZgRk2ks9R(JGjs*y@(faj8wxh^0Ah#i_(L z5vjR~9@1$i1bC_zYPCxSWt6lj XOw7%7o literal 6407 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_ts7>k44ofy`glX=O&AaT&s z#WAEJ?rrS%YT S)@U$!<&b@sTOB5bBuTK+lwP5m}bPL&BQDib!nl(^l{ zyOQm4PFFAE>g|8eN$&laVWQldBK;-TWdD!fOD>+Ne!s8$^v>sTyT$(hwy(^LDc#Jp zuFc_ 9Vp=Zob*H4}5k3O*;* yjj*SyYomTEJ9Uw649 z_fh|@#>2V!-StP!?lo(h7C8!u*Nfzz)+%J5#r2)PGykJiXUSguf1=T
v!GKj(D&=^B&i zU-oJXSr_~4(ajaQ_i@{fzm9g?pS$N;YR%l3$obyl#LksFE1u~JPQR_a@!#V~b0q}J zgS%U{{qc309VhIcvd?Z>jh*_--4*}DCrQ1VT4ScVZ>hBErJs2hr6PIb#66xpl fTv(|6fZkshM%L@^uiHsmD9+p{Ep(_UuO>1^ zPF`K`{eQO&3-(>(`>1 yO2@l5|}%g&t170>i09Xa~n>(w>O+@{&_ zkBy5y9v6CRskAaWU3JI9RL(WGG$T&@_$mA-_J-obb>EL%-m)Mi&hObIxxFD%9TqL; z_kQ+IK-^@<$JE01XP%Ef=}+46XEMv}?;bl|*T!m`d}z0BskKS?q1*rU^w!5edhYM_ z?Ba@+?fX?5zr{W(+No YJ6CYJxw6_zQZm%=Z_P@~mLuU87=NebOQl1#oH~;taya&%` zb_RBSl@t8 SkH1?0B|w()&ry%T=~~ROMWA zSN%?-t@{z TYV{Jiq~4V)X1}}=RNtpd#(AOJ@3nhYs{16q?b*o z(beugHqG0|Yt8!=DQbDe#?sG|Wp>v&efqg4 GOaETTps;0 z>~XV@bNz>wpSP_l54|bbq9;%vptSp+;yjPdOC4hN39yRD{|Hl=u6xthqH;sD+u!wh zt4yZPVo6HOUo(&StCa26i79eC(eoHq>^X6dKXdk}TLQI4H+xd#Vx~v@HxJ>y$9h_I z)9?8v?`}+WOa5-c!eref{AlLx9Tk7{rtjF}XeFmN{d7@LqLmU~ z{Qoe;J#^6~xtPfj@_Wp0+-!dIt$npr+06q1mtVK5&iC|K@|yYNQS}w zy?MfX%W=p3d)N4^%(eI$CkW^ViW;(IZ7r>SSaQM9>*!9od)LaU7Ob4uy=7)WRnPJ> zmsX_9-@n{+sN3F4@1Mt!r(*nmOm}vcp6|96c=-O)%`FGcAA9F@e{YPL!JKstJGg@l zJ>#s`-qdGV^mEUS* 9Dq$K6{d*R#Rk-6U$~+{YlwV&U=^rS+;Fnc>U$(ocD{iemTOFJ9kTMUr$vi z*L(jW<_X*RFAnpcewJdYoVGgu J`7{A!*jzh^;| zo;uUa&hH61|F3ItugLy%YW=L`JIdnEGObiOGP9;%Pasve=wiFjiyPW2XQy|@CZ?M* zvc&9Lnh{fGwj`=Tu8`s4h2rC^6LxCfP+9m@|I*oSOoGd w|2)w?y+jCNY7Pxz}c^T=j%MV;EWwto;S^4T~}ZB$nWO& z5TO-IZ?6`U$XIjwtyp38%*_W5>^ZC5b;s(gtnOLq1Fmb?=Jl7!FUs$iX#Q9And_KS zi(FXF#f|Gi7*~|AKKDp@e%qz#p`V)Gf1So{db{SOnF~3can@jP$)7j*!LHgz@mEhq zbS0$dIR^-w*tmaf_d44 ZxI=vQT*})ywQMG+{=0dhfZqK|woywQuy1UQYNjh#? zjaue!IqQxkNeL^&B&@l1w;Y)7y3Wz|gwe!cW}A4Szsnv;r5KepPw33Q7?r!}#MGRc zRy&(@IVCZRmiKo&xg_+i#(&Rep9t~fWlT=CcUCK2VUuopAyxcUFXpW9!bfYK6!<4P z=cLB5eUxAd=GvdU{)gDQG@mD2XD)s=e0neV>`RSJidl_ F(v&o+) z (zp;Z76(<7-7q=1J{6@p}RztKZUu ziIJimva_ |Ca}IqDo1C1q=6S~sWp0&AU-gPLetiymtFdCuqd6S8 z{bxBZZgspLm=vZu{r2HAOAT!&Nbc91TwkLzlim5q*Cy$>OM PK^|@=|%ph#W zF8;;3EHmM3@wSdE)y9-}v8sBkG3$O5b)J5HJ>iqns;NIjKFK`ZzQVC5Aw8ChMXNh2 zVb+H|SD#D}X4GTZ#IRvO(G#}Ehi>Uk`M0yRYU`z+3`Qr-8Sb^F#O63P&5pZT{J2z8 zK(+ X`Ts@(j!4|TSG@Zzm{rn^ V^glG({YUXq<%77x$%hs_vaFDMVY@+mfp%j|V+GF^`6Vh-W?d@! z6)zMPE;s9Lb(UX1D7V Wf|st3CU~2}|Ddd%tp9|0DdZ zhRV!kKVsaz+f;rH-;~PGsr-EXBp(UwGP^rD2b3rI25bDgx?5$>*HX4M9v2=46>|Ff zsvYH>wCA3(;)-=!&wJX<725qh eR&Szh~EQ9N}}C z*DLH~Tl3NVq`JDKu6EtDt4$M@-~MkpF?!kbqpI&d*l=!nf6-!JvG~N_udgVsEWLR8 zZ{9K1AU>ygyp0#Ow`;#Ho17Hlr!ZA)!>pq#zO0GbzdnseG&D?gg;b+t<^BNipE4Vl z-gz=Z^|y2r>vXO&A}Vbg79VtSagn`Q8L*h+uB6IUws(s=!qnpXIwP1~ig)mB&|G+S zz0eEg BmX2#5z3s(4&i^*8 zzay_EDRt3GLi3-h^obbH{x}t3IVM(5-ivxyytjPUc*yzB%;^54&J_&@ezd+nvb|(; zi`gEBSAqxJre9y~_-dbkxbnUKrt`&Pw$JY{&2&lMzi6(bo$`f!vjaF3N{iNS%5?kJ zax?$?