From 889f27e1a3f75ce51fa3a18be28d71bc58e96327 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Tue, 11 Nov 2025 12:44:18 +0100 Subject: [PATCH] added fotn change API and examples --- README.md | 47 ++++ docs/images/font_family_switching.png | Bin 0 -> 63976 bytes .../images/font_family_switching_vertical.png | Bin 0 -> 62818 bytes examples/11_font_family_switching_demo.py | 240 +++++++++++++++++ examples/generate_readme_font_demo.py | 252 ++++++++++++++++++ pyWebLayout/layout/ereader_layout.py | 99 +++++-- pyWebLayout/layout/ereader_manager.py | 41 +++ pyWebLayout/layout/page_buffer.py | 82 +++++- 8 files changed, 732 insertions(+), 29 deletions(-) create mode 100644 docs/images/font_family_switching.png create mode 100644 docs/images/font_family_switching_vertical.png create mode 100644 examples/11_font_family_switching_demo.py create mode 100644 examples/generate_readme_font_demo.py diff --git a/README.md b/README.md index f5b7485..876c5c5 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ PyWebLayout is a Python library for HTML-like layout and rendering to paginated ### Text and HTML Support - šŸ“ **HTML Parsing** - Parse HTML content into structured document blocks - šŸ”¤ **Font Support** - Multiple font sizes, weights, and styles +- šŸŽØ **Dynamic Font Families** - Switch between Sans, Serif, and Monospace fonts on-the-fly - ā†”ļø **Text Alignment** - Left, center, right, and justified text - šŸ“– **Rich Content** - Headings, paragraphs, bold, italic, and more - šŸ“Š **Table Rendering** - Full HTML table support with headers, borders, and styling @@ -138,6 +139,13 @@ The library supports various page layouts and configurations: All 14 form field types with validation + + + šŸ†• Dynamic Font Family Switching
+ Font Switching
+ Switch between Sans, Serif, and Monospace fonts instantly + + ## Examples @@ -151,11 +159,13 @@ The `examples/` directory contains working demonstrations: - **[04_table_rendering.py](examples/04_table_rendering.py)** - HTML table rendering with styling - **[05_html_table_with_images.py](examples/05_html_table_with_images.py)** - Tables with embedded images - **[06_functional_elements_demo.py](examples/06_functional_elements_demo.py)** - Interactive buttons and forms with callbacks +- **[08_bundled_fonts_demo.py](examples/08_bundled_fonts_demo.py)** - Using the bundled DejaVu font families ### šŸ†• Advanced Features (NEW) - **[08_pagination_demo.py](examples/08_pagination_demo.py)** - Multi-page documents with PageBreak ([11 tests](tests/examples/test_08_pagination_demo.py)) - **[09_link_navigation_demo.py](examples/09_link_navigation_demo.py)** - All link types and navigation ([10 tests](tests/examples/test_09_link_navigation_demo.py)) - **[10_forms_demo.py](examples/10_forms_demo.py)** - All 14 form field types ([9 tests](tests/examples/test_10_forms_demo.py)) +- **[11_font_family_switching_demo.py](examples/11_font_family_switching_demo.py)** - šŸ†• Dynamic font switching in ereader Run any example: ```bash @@ -176,9 +186,46 @@ python -m pytest tests/examples/ -v # 30 tests, all passing āœ… See **[examples/README.md](examples/README.md)** for detailed documentation. +## Font Family Switching (NEW ✨) + +PyWebLayout now supports dynamic font family switching in the ereader, allowing readers to change fonts on-the-fly without losing their reading position! + +### Quick Example + +```python +from pyWebLayout.style.fonts import BundledFont +from pyWebLayout.layout.ereader_manager import create_ereader_manager + +# Create an ereader +manager = create_ereader_manager(blocks, page_size=(600, 800)) + +# Switch to serif font +manager.set_font_family(BundledFont.SERIF) + +# Switch to monospace font +manager.set_font_family(BundledFont.MONOSPACE) + +# Restore original fonts +manager.set_font_family(None) + +# Query current font +current = manager.get_font_family() +``` + +### Features + +- **3 Bundled Fonts**: Sans, Serif, and Monospace (DejaVu font family) +- **Instant Switching**: Change fonts without recreating the document +- **Position Preservation**: Reading position maintained across font changes +- **Attribute Preservation**: Bold, italic, size, and color are preserved +- **Smart Caching**: Automatic cache invalidation for optimal performance + +**Learn more**: See [FONT_SWITCHING_FEATURE.md](FONT_SWITCHING_FEATURE.md) for complete documentation. + ## Documentation - **[ARCHITECTURE.md](ARCHITECTURE.md)** - Abstract/Concrete architecture guide +- **[FONT_SWITCHING_FEATURE.md](FONT_SWITCHING_FEATURE.md)** - šŸ†• Font family switching guide - **[examples/README.md](examples/README.md)** - Complete examples guide with tests - **[docs/images/README.md](docs/images/README.md)** - Visual documentation index - **[pyWebLayout/layout/README_EREADER_API.md](pyWebLayout/layout/README_EREADER_API.md)** - EbookReader API reference diff --git a/docs/images/font_family_switching.png b/docs/images/font_family_switching.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd23e4b8bedc849d13a26a6e07942ce8704290c GIT binary patch literal 63976 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 literal 0 HcmV?d00001 diff --git a/docs/images/font_family_switching_vertical.png b/docs/images/font_family_switching_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..6b271b421ca0d07f0d2d15b5a9fd30c9bf53dcde GIT binary patch literal 62818 zcmeFZbySt>+AoX=iXccMp@@idBP}V?Af3`F9nvZ&Ez%7F($d|EgoJdbba&@G*IaAw z{q9)jobiqCjPreeypFLJBFtw#^N#EK)&2O%$vnfjNqiFp1qI`|xQGG@$`#~)-e{NM zUnn0$>7k(PKYlJEsQ5a5ZNk}2Y6u~)#S_*M`BVIpH=U3-Wn=8Hx}-QYo{;G^!A~OL zqe>ATB57$QC26nBbZAY?pDXsMU=8SX|rV7 z^Pafp9L?1Bs!u5=9GY!+r=O3;$m8M_?Y7R=NSuh~EAQOkyUW87Lj8rpKZVN5Jzhys zNpco>W0~ZJNdZCj>pUC^VV>=z{wc&UzQnDKn9Awb(v%!j4{AHK)na4lNC&0NPNrTV z2eT&DaB55&UjZj1Hf4~c>tnSF4LcqeN66l*966;-b0^{bFDgl-T^DPwIZh*#e^J{1 za@sN49;#o=T(uoXz9r+=wc_$nIb0=8W%mskKXvH{rR*@WsE2$E`i!i(`SThRbW1G} z0|;%a+KYlUp9;4VipO>%dpT3KCnfCW`t;1$0eN4t>H>bzD=PJwkEq4Utm`jN3Yp#K zY-PxkYRx=4Kb}|5BMy+wkI#L$X|Lik+)g()L!q=^>SHLsea&|}C?YkY8hv1ys=6@r)q&Nor*_9aG@smjtUNa+BE~OE)xgxKH$P$I1Vv+L zK_Mues@8~Wv`;7tOJEZXZsd(z*Fi#!+W4>MGV+R1kvk0Z2zR;6Z2nW(*4sA6$7u*Y zmGXVf$w513`%A`DIHyjgY{@FK%{RAK8I0;Dsr6#3l9aHq!yYnY=emzI3tenhQ_ZYp zo3)KL^eZ1*l^-?{koYp1P!g1vMqsWF`&x5FjMEnS#;%Vw_KWOMm)j07sx4PWbPk64 zh72yS*q8|9TtiJPj58ZhWMNzxnF!o5(~8p|N*G8j)jRez!WBKoQYkpp<5wcMeC5jF z#zZ?WpWQ-Wc{%4p!o{wn&9QRE-TtX5#Mbl=htUVG4R5&VTtP{Wa$npC7nkv++Ed`L zI-825pVO=F3>qD4T@d5Tbi6yQGl3nvdW?T*RP;EW$jUnPMebn&fFHm1<}!jD+8rAv(1N- zuCk{NA>sx`MuQbLvmCERU%R+`B;%`+P2zXx5kz@&J^!Ho+q}K)_VV1!;4ey2(m7a4 z`O1hyExWSF3J&BZ35)jSzpF2tl-IX*Gw13T>J{A$&-&YGDLeH_QFF(a@sw8BTZ(_w z(DSVsk{z)4r}X1G?7v;v)hP~Iji?OVl_>X3nF~ccJ|&wwD_4=zaNHQrI-mJS%A=gG z9dz$UJx_(Y*4g-MOK?{L&*6NOPTh9%U3q!=$jC_F+bB;-qufhQ)$k6BX+BcnG7$In zkL^#zk;O(MT*ZFnz7Nkk&J&=~u;b;)sK}PpD1KfjI|OfCTEEX(KSTw9K)Azu||WCmZrU%W=-UtXUV%Y3wc`A z{Ks=RIAI8`OShi#*vvHYY}VNA%ssz)73DL7)$(gk@xJbh$OICDL41VvHwQBso5JJG z1pHuIL@jOENj>>iY8&l9_RZ3Sv}K+NgsTdp>>Zq**z#8=rK~ssS$Bim^1ehU^D{QB z(Mt!dDoGeQcka6KyKvD?t_}axq$>LqpcN;Xu~+Ek^v!eg!CL}@(}Q(x9nYP)RzI9a zSdPDKSNgLgqZkI9-4519QjNZ&o}xTeH9n1HV_DubTbL3p4h^W+aS>RZD%zA0b2ieA zD1Gmj5q9?bmg@tK`ze{2jzyS`2<=HjNjFs^`+SbG#OnV1tSnVFyU%!b?M$Nbo|Cz8 z`O$T*hk4DkYHDhOgM(`-dD^w3X_5rl_i1TpPPSXfV=@j74uZ+}^b#$n>dt?0PJKPW};emvbqghKPu0%KdP{ACGnzJ)XzupbGyONZY zbJ}SJV0s1k&D=D?$)qtTV#?_Q`Q zho3tVc*7*#dkeYe z*V>MeV&jqatJkj&GSR^suU*&I*FWwMm6Q7M+d7TBUJ*O=9;(r z`ue6^H~FX%!~zLz7CMMdnynpu#Xgc`alV;zI^OhyOKTSDi6Sn}HA+m9<*4UuD^pWb zqoRgjDZ_ik!spDUIa_&v(!V@Xw+bs#V1{>9OtL*s^~8?q6wk3K{k)nWiLCFeW@0^K zzC3B6-!fl;rJcR3J$-^UZ)kQiDpWv6^%2yRy-C;2h$zG%*<4F7IpSzG*awqzw8~+1 zt~HDu-vbtHf7T1n^L>?rfa9)-8fR7(7TdMq!Z=Q=vI3^Hm6|eA9!I8NX(=fxspyxw zx;E1d*G?jKc6P`;js#PsbV>MJ?8hr?9zJ}y*OwuiM8;)1x73rGlb6U+8IO`%Z7 z?Pz?;6XCw~ThKoRla%|5{D;dZHT}iza<|XnL+k45cIXg`DJdzbst(V#Aa);6!0uQX z$cbtum%%ta+&tXhr>D>D!P^QC54T(FWR^v}O*Wn)8c?X;(q_O?n{*Zs98AvV!uDd9 zx!-KxhukAmzKXe{qhr{3Q$azYGfALJ`*TT2xO>mY#6&{YJ#$*R>%W@X8Bfcsrt)mA zu)jE{Eotn2{NTX@3W}N0Qu7X4iV*QxsV_ZzHEzc{newU8vBAm8If&gPgmqdN_EFab zENUv*#IN$Zmr(ji+UiuMIH%lpPge7FYF(7l6cV`XKAaN?Mo2VW6sZAEuLH7QQ4OVU^0e{LziBVLizsTbK6+E#&-VZDI?#5 zCr>Jhb`W*XVFLMKLmCcXRDXP0B1vNOQCnS)$#Sx$Rg*T27AI=F%7 z7&T{m{N;I=86Vx*VoDyv4lGhJQPFu`r@f_~&IF$Nj>g|V`uq2)H|zSI(3;xchJrJK zC}m=0<#Ak7g>n9(U<&;sn1n0E{qcy&nQ@Z470&r_eY$j<1mztKjWL-7?jRB_+leX% z7%t9Jgg6R{+vhdc{rBG9)DaR3$QO@n7FoqTv7JLZ&F$`%%i2SDM5t2U2_j^E=d7-+ zEmQYdZ0mHhzF4*+5E?rJ;t;*$u|F}3fp1U{#_r%`t?P)f9<~1o)ZSrP_`L0835qli zJ%t$9*utITlajj5EXQC#;Xayb_B(ktRn^o6TvU&`-uE=>%{rOc+3m6#cfyqiS1PA} z_~dI<9~e?yCy$7TpjH0*(vzu#imzWh1K=W&%QnR zeGO7>`^;QRs5r^OK1E%l0PI%dtmcu3oIUDW$MLbD&=t8Uh7m1-#}jF6bye(9Ur zr^3&l@A30{3>WCGUE@FcePyAHEY&qLL}oO~eq=Gx+!wLtwA4L48!WI;rH$BI?t_7a z)v4beNnbj^iGqa|?w-$ok>PpkJmkfJJKmY7s3?(r@gigWS;NKG=;m^(g8Jj&<~n-e zM+Y%A+1c5(u7}$79(>Hq@{5;C??%SP`?FfEUY{WSx*hSGk&79Pj*hO%Y10Er@j=ie zAPtp#?Ofg4?7h!V54HjWZ)HakvYoLTAu8X7)y6()AFC}?Mo?TqsrL4JJxnDSk&yiI3kQ(flR z=I0NBxZhkPqbF8u+{zWeemQk6?b%|B;kvZ4B2mZdzPliu{c&$)z#JBOFu8ySG@?qo zMaQ*aX3q<^gJ-v)a%zv48(jHD+ge~Q)w1xUt|0O0#9d~+tEZP&p-epcNb)%3?C>za zT-4T<<#HuNggMUcLy)dPoc_3qgT(*&#w`GY=;3yoUAgQY(r7m zoT~5IpRSL>!A}@AE-P8(66;Hs9+A!0sqa*5j){pWRd_p~bd?ZhptZGidU~2z$E9Wb zsF00ysg3{`pt<^0R&t#yrYXFdsEWuoFYDT0?(?a`_I8iD(Rpy`ji7be?TfBA zm#&=bueR`>!?a(=Al_?dtmk#!`I3@C!OF_|`0;W_46FH2p8INUdElw&%b*wTu*Vm; z$!C|2JP|EGN3QSg<4;abu60cq8yFlNA3vm`ij0av>~;x2XBwZ5LKw2X5%rdz=qDUE^~H{%6R8FCiE1aE5)*lQ zdwV^-831DK?d<^p0nqH&`MZW-J4Q|Mp_qJAc=4iDMffxS&yKUCq~cWS6=?CA=*9K% zkrydE2i3$;g(rubT^@&kAn7&A=EAtj%E~@`Oerc-NDV)Rk*dH?WHrWgZFQP*k8)mZ zc#rNK{KLoFyCCW0^mNt26PDuWDv%_##Rf5-G%7o2+3XwV20ZplShXDjh_fFKHiM0g zlyr1~=WQ^+$4>dm6yK&kVBDn^{;FD-qU`c|x%Xj%v!E?^$Q6^lHS_V^#x&!u#OC+J zDBh3R+3}1|e|tXR=GLyT7MzW29o>N)!tcD}?L1oJygQ`hnP5KMllrVUX=AKBn5$hlQPxLGHR?TT544hOE8PHu zS=DTdHxU)+DVPRyHzFj3w>F?`H$Z1J3-R4TV(wl~U-d=-( za#p*w8T{sYOJ^qo71aU^s_WrKt@X5!goFgtHdQ*y9nAoI`kI;=7k-r=v^7?>`}oP} z&gc6>03oHt0+CEmm z^8$8DN=nMn_?l+*huh?dpFV93*&)t$WsQuCl$9eT(pXqo?X0brMoV+*>k%4OweQJ| zub>F~!E$pTdwL1wWpf}=NJxkj2>|XdHX{TmpOeKUC4Y!&qo7QLhJ^tH`Nhl5&JJCK z`rS1Y3<8Fo%Wt}&9CZEop%2IgGz3RS$D8kGpn<|t2cBzVW5ZmmYGRV<ZWbk5M_aN~T;s@`D?le&&1 ztL$VVRwK8=2`7gMbfnTmKmqtT-S`yhKL8-d?U|-`?=AyAft^(EYqg%@`OY0?4(=O> z=Zkcyp5t}3-Nmjbi8N$UJbz{FdA8jGSmVm&%hzuaZc$WSg^PB-=`UFug8~e-M@U#0 zs8C2kg8NM4joY_xFZgtr_vC7n1AnarL1lb=9Lm-4(b1A7a!R2@WOy3vj#t{f8ZF7% zPlSu1pyjQ#|NMCbPzTEIl1^!Pad8}rp?@%g+F*&Wp={JABQ|BxEzes{8?f0(isTCP0Hx^ZfIj zcE-6pq`KZO%zjd}0KciKq0z^lB-7N?ByhGR{PN{*DBEy9j+>KO0N&*Lfi1vmPfN{* z$}C29pbDfBfa0W9X*&-ff!zbcZ((UEIyBT41Q6S((Gt_Jq@<*TgmWkdd#gji9)JyA zt`6n`cZOjLDlXnFdo{L1;Iuxvc=ZtfG0RQ*1P27rNA*Jz}54WbD-iqt!KAilJgUpnVyzcR8&+_YPzUw_4oJ30EV2% zcM4sPi;HWsW*0!PlT0G-G4N1Rs}jIe0BfY4KaY80GXsQ8I_aDFKsKKHq$L!7_=#ec zB1{)-2-viH0Z~4O9m<=4{yUui<;xe% zDtpuEhWFBO9JLfHsLgBAeea|hQ`pognkuS2rsePNNZ|a+!lKG?{p9>`DkCi|A}UJ2Gn1J3s zzms2g($>`#JQ392-+!0WGCU%psj;!dVnl%}G6G(4cZK)6its)M!$LxkL4ZPx|rWM-Zb* zi;6&%>I1&KXW7)&M#ILo2ZYY`V9j*AV*9RDjl6=w4iEsCtD$~H1Xj4je2HnF$JzF? zlgN)*FEV-=fo8)q&zXk?(gWG{b1Ii5?#Q-~F5%0Svf>Z_f4fs8&Pgk-4A6r>jc`0x2?#A&r zF$`d_ea>5P01TYud2tN;&8&13;KaG|A36|J1-<&Ci_^^jk(B$wA8Pgz>tdJg6+6Fv z-S3d`IoTxwQyPVFj??)P8wtN##rIN89GF#rVx_gUwVh50@$r~syhr;(I+?|^K)~GU8n;Edz(`N92}8mXiO8n*21#M+?y!Q0iCMoxQixjiOa~OQ`7M9Xe_FmmAU{Ugl%G5S>t|spiySgQ>hgp zfp_OliXzSW`ns^NFhJGT_@#~BwD!d$&rUibEUeGFERmfU%WE{VP$SDrOQ8!GXcGx| z)YR7tbOoS;Mq*zKdxsR-E$rE)AxQ~|bg39UUEO3p{KOt=Mn)t6gEkK}6U2Lc0q%39h^z=xi6~Qll&}MFJYa`}y{2CM_4MiAs zo2HhQbp6Ka>Rl2N61X)*8q`~apNqr1FU)=Y{N!mOfUHyP89;3Y7LJF9*Fg(P5E8Ba zjJrp9>wfKx;%1-x{7qoqV!>puKqWLZEVZ6)*xTC+dGL(GtpDfaq{nP?kQiNS#7l3| zjLb~&Mf;>DHVq)mffxXS1nidNXSvEb&`GB9w0PbN0kR5)j@5^5*A!V$Z~d@LtP?Ae z@|JfH77l+4gAls+K;`AM!y{pnNH>$2q(^gauA-u@jz_Uulh%%0p_IZJ((wL4+SS^7 zbao?2Dey@DOG283_XDp3e=&n7f1L$R#jLC>vrJDUj5`C`>j;IRGMwBwJWS%UqjDA|)-r5wZ4Hq~0|7822_Fv+ zcn0Yc>!+!Pc`bpU`F!~B0aU8GloX*{<*sFapoPQQgJzeQn8@A2;=D7*Ir&;2rWB~~7abxXWZ6nNpcQU4-?jRL+TgJ^J1Z>T z52^;Ni@SI4jzRNgtUG$=EJ=As6lxeg{vGb;uiIN%i~&%3#vrsiY zJltR@RP#o&U5jpdX+eQpvK-hi$rTkxz|bTk=_+0Jv(pT%2C#IsJ@1e2?8j|Y@&*=mH z^nCg9-uY|Tfv~qqO8UEtWMLUA(tsh-*w{ETqnD*9fuL8+82||eiod;&vsh|Li6T`P zER6u?G-w8USbLG~Am%MBEO1(mi_6LaN&_;?k+QZrS0}$A$OM3>wl;|dD!3pwP6U%VvEblQK3(;E`J_vLT9L31 zCNxLmL~bswS0hDD-47k82oa<{F@xdZxc(`rVEXlnFhphwcJz zk50g_6+iR)_ixyN0zl+pZ$fd5V>1o)^J@j_sc-LVPqhNTw9+UDVSGBQGD%NQ&z=Z# zOkDM)^Xh7UR#-BR3?Mt~p+a14pk7>U*I=`(*_J0)ms1&z%mfg#(rKpK#(@ ziE1TRNPQ=x`wOlmRwn0um}TLXH6!~psxEc<=RhcgdF*s4czwLJh8Ogcp+UpvHn~w9 z^Bcsa;yS^R!xgZaG?Orm?3|obsBxhtKVn>1TcZnWWzeb;5rCdtv*cPi!A zdAkgULu4aclL1L0VCoMyr=~y*fC~2FjMrsv3FsF(KAp9#EsP6j_j?Jbot>QuS>eYD zwJ^p26l)U<%=^-Vq^Q8aFxK`94t8>KS{x}v`YAvFN=ocOH4K-J_WMjeHZo$GM0U?U zblg)#We9i+h*e1l6&2`n&>q}j=>VDq5STD2z4e?B!&@zf7K*E9i!P3z2&}tcUte)4 zsgmMiSeADaf`IS&G>6U&uZ-)wrsB|jo_J*%2Z!Z>`tO^#Nj3v*@+DM1ri&SO1(7>A zFrYO+U(@pzHw$5iR_FLzQZ8FcJ7tC0xJqIy&?Ye-J<9O*zFK=o0-dWCxDdeHZ7>J` zsKK(WJKd=E^+gM60%aM@9k6Cz@2?DiCi@C?;Z z4||Rd4c<2%$;A5x29f{>QtjZBTpnA6C8VsW>2`kNu+SeH6Qd?B{j)8cjr;B-foq-nu%xLZE5&)zP zJ&?m{l6Tz@EunwR)5+-&$hwHAXd!Jqv`$}nm*;t9GzL61Jx5ltNQuNs~0(^Y!IyYyK zBizzuT|K8`hP@v;V|vRp`d6O9UUDT;{k@o#-`|62x`PWEE1i14>B?`Ah3JoLfw;KQ^4Zd1Ns8xUpA4K z2tcyn-QF=JE2~W~lpZ~NxLw~MiI6@2_Vx;FcUXk2Kt&!&#~N5#%G8&F`3X{YF3cHR z)7jY>4H zAFMRpqa^Gi_35c~b&{3s0`Ua+he3a)d~$L!(jd^UFzHDF*`kdf?SFQtJO~fm1W3 zzhChns^zlvja#?E+vhcP%!l4&4w!LrmVf&630Cl+gU(7R?0Xo0|J5NqXvyP6hV4<2 zx1-r#UpqQEadCFe)vm3|lA9lV}B@M|6q3;dLEiAJUp&5jecN=mY00d@u7Zh!``#qZz0U%GTjBF*;On@hwAAn|!;WMouUIz#at z`l|M$L<}7rJ+*uiSiJ6!4-=JkJ|0@BR;gk^y&E*A{%_!t^&akkbD(B|4-WRVm8Lib zX?3$b6#HQC@|v5|fl>qzFoJ?Wb^8U6z2=qa6+#5bJt-Y=abL$-&E@3cMa>}C>xZDA zLqqQH2c(zbSrdw-kY`B1lBznf*7CDKzZe`DK9XYC_zD zxd?36Po0Amj`+flhCcH}(Nj^0Whrh<*2ZCx)T+6Fd zyIH`fsG&m6qzn6g+Hp%zN+y)wgcr}nwS@9tGsuNqc`~%3JKl1W-zWA14LiFM#y-%s zU_e?>*5HajJVYo$fXl+?(AAxWCJZ8zg2J8JIRL~Yq@;|R6`#VwirtQFW28XH<11C? z1M0zLw_sB87(W0SlD3>276CzqA`Lje67{8eP5uY#V=YZhcmxD3&CTi>8W4sH))xIc zN$QnEYOYYf%u1{Nn#gn(@h84RUVj>s>50rU&7XX;<3*md$)nuP`&b+;5h`M9f}^?EJ0sn#4=q%9(D?cJVYw>j48W=` zDk$*%_>rnBf0B-#j*g9;9rolq^<3BuFM#TS@~~VEZfYr@h7)EU+FKa!JGo{gOuc5r zq9ue@di8taGBwfr&roDAhhF54vo6W?z4?-!p0bvc0Vczw%PReXDS+rd>}CgB+tDJ! z0QFo3disb~19)$}Nu+7wZr`nT5Jb%G@67FSb_DWM752YUyeMtMt>53dT|v1O@|@>P zn$G+igA);MuLBbIUI?3rD2v0pv#6`P(EKZO0H=lJKZ#lEkA5`Lp{EtxMsk=~>A^WR zwj(Wj@g(G)o``SXo}O&O5{-~BT()x)%Eo3ef+>j#5C1v80}!n*Uqw-Icx)^zxQW=$ zSnlP3nS+VRQi1M|r55m49H2k}#;#=1dGKZKiOCmK*CS0=w&bSG*vu+%f#Co7Ql44aIMA*vmWR!vP!x)5<> zP9|gRfzLbhkM`*$f;O|U61M*|;CY;OieE{XX5{+hV8CaJ-S-LHxjq<~nr3aYadJkb zWCGcTS_A4>m@}AP+RvXq*L($SKhoL4&~SfiTG&6ua-vE}Q`~1EjM_SLW_x5kGqAB4f$R#AMwT z{uts=U>qUei`6Jllc62}y)Is@n&9vZ0C+_jJXY-V^mGWM3~cZwHO}Iw`lr0}@`7JK zhfo%9K?^A2y9=TerqAAQ|V#hw>RkGb`oEX+_*Oj(D zQOyZ@IGB}EZ8q0n^j%zCp@=Z370rQ+2w@g3s0{84QWPQ31BI=a_CNgB@V5asS&`PN zjS*J;`~lTEA!lmt=cUB3;iuCu_)+4N6ufE7oXiC}J(ZNn*e78`|3cp`hD7DV6=~+p zR>0T;gzY7itXgHC6%c^#dRrxDz^d*zy|(ro6oBNDZ-g5W^VL})Sj6KMU@t(G1th}4!s2ndUJfgIhsLc)XfyEBvqskKqpOh@ zVGI96;<7n+k8g`CCK`5={c=n9H;y{8cn1l%`-CNxv1@|7ckeU4_`w&oFh38erc%(w zMn^YmYHI-pbb(*c&>$o$D+{<3pm<|*bKSwH`5ixzO~QT4KS!wZI>tFq!y|`%BTU`5 z>H=?a_UE;8&nB{b_qL^O+s=ZC3)2XTWdc-0@J#{O%4)xttw77+;o)gFU@@YAJ)EyyYt~40 z>kbJCQXK{t?EvrwEI99uA+#);U7_LB#oHBk`o>C)=>+8A2SH!&kwxaB1 z9(L9A#$}$dR#JJ^Q0rlC#W!BRX{hr943)nkOi2PzKqbV*f7>BKVq!)BmmH#ut62~iISFNBr z>?*T=P@*34w0gH=7Wa0I*RLzm(jIO;8E6=0)T$~0nsIh^2EL=m!H6*oV;_$c{}tyL z;g_>9WG;7;m~>!B(Km_#EtD1la z+`=U!gb1D&v_9rV(F$Y@ZT^L>8=P+b9vM{vD@;HD0VPpdT>PF>tFLr{4aVC7E+K8A zLey;mU!pc&UK=MT0lNh$MMYe#W7x*Bk-a)k24L!d9d>h~!+i7b@$oS*e9T#6WyAI6 z>Xk7SUXGXGcTVG!$7nN1J!Gln`et|ME_Jv&hPH@EBVZ=Tp6Z&LyTWpTkWm`MDR4zW zE&dy?JH5+Y@|V0WyhZ}v4BiXexN*?efm6Nz@IfYtKfzgrB823L^>6TJq+{8D*B!x+ zJAVC&abiCa+c1MS1@yDfnP9H3&kAq@;)jHI8L=PT!Fh^e)Ug~ZTZf?IyLa!F9*{am zGrqbfCPj|eyT`e)z7E0D-7jA#Pi`_g<0Vd0SRfld^sCLG{3IWrXW)gOyE9u{|Aj^l zA|&h{Fyz5l#N^s76*gr#I|lemAC>C0bo=$C!lax zOCnD>{V$F+3D*8zT|NDdN={fJ;o#r^`MNMFX^4c(w?}2Uyqx%63< zX1t>#@Z5pSX=5DQPXs=YQT{xTurtR;Y?_SDWFZ_FlEN|hqw5*ixdUBKj|bYdYp)(n z@|$D=EFY_KFn4u5C8&ycdj&NT)X(p`Ik67YbKxHc~E^ZZ+gHJG&Zv{G=P%_L! z%kl1F>nvc(KWsc+3^cTtdBG-K7OJX*6Grb=Jl~_&V$(H_5Jd6){vh$SdKRna!Ca|#v2;mT}VFDF^vIE zR(tj*Cu?NI^D1!>MQh5T`UmCu4~vZU{I7kny7+jKEJY;abBXyQyfK`iCua+o5h z<3QR*G#KgV6sd9Va#&C^Fo3sm5&BRP4o*mz_?+SE(yeVP;O>tYC(SP`G&eVMm=CT6 zFxK7UtTr2<0g#aX{;$n2so6E%JEQ%kpaIzzW-8}^Q&SGIph0UW#AmwmOH6uz+u`l$ z12~UiHO?Mb0XmMf>=wOQkn#%HVW8qcUI1d+KJVX$v<&=>`{V%kafCDnw@=3b^x^LA zZXk$&-ZKYQ;5yL!7TO|^r$4~4%%Ju+^_Kk{eSbH}B%%G&u8%q0hYc$4Crjg>4tPVo zo^SMmo)aV21@B5~miKGG;0?QrG}F11kU|)KpbPo;?e5P2=Q4Yw3;c_?p~eEF=*0q-Kk# zREz>!xu^PtNr|$ms)?DI3mh3JRj&m(0eWs_RaI|5E$nJg^Uhw_3?mNwvHVq@o0-wH z)w#5R4G1DzN8k2r3+lCNSpzHo;fzJ`UqI>VWrR|qk);UTAXEjw7ZISTgTWUH3QPIB zM)l$*K3g!K#Ix(*X6@R8?FIh9oY9D(4iE_`s)>(=ucW&dzbcHM_ zDXBX+I3UlYDLmet@&Y^T*|TR=*okj@k8-+CVV>? zzzO1hh3Ia|4(+=eNlN(DQFlN$XE=}+$EC0t&p0!!VYm~FezDC zi-FU8Bx3zgw3GVXG#|dVjlGh2sE(ZL4yO=dXEME3V~E+ZaLmZ>aIk! zW4$qH-t>2f`-yxYcDvH$J|_u$!f%(= zIxYIhmSTAgMK|NO*)NdOIXE2Q01V*c1n3k1bC+>y@A!QIl5jn3CIDU3{X^HmfDW7& zITbw#qy1L~whN`hSWnLudVFAD;FQNHJrk4MCJj&#I3p6r57Cj^0%xD)s3RG)R%T{G z!^1^Pd}?mw6)utHPZ|;J2@1~QIeK+49hbLSLjuv(*5AEzY%DG%Q!I!WrZDJ_kUEkQ zE$v-@OZKjr#igYweLI=r6LeAxW&wjli~%#u)lsqLUoeUzy4bJ_2Gl30RWO;8lar8H^a~1dUoRaR_R;g& zQGO*(P0S4-IPf1d>_Fo$NK?KO-sKSS{(4V@udgroWYDKUn#3Muw!|R@C$7=M!q|9m ze!i)A1TvjJ4Z!Gmy$}Ka1LJ0NWd)XWC-1W;cU)00K$0$W7QoB^QCXbQB{-Cu2T9_# z$fLl*vupTp@rG4p7HEPC=sgfr17nKv&T}ClAyLt5S`d#>SkSl)wkDJia~m1w?EP0Z z>_72P8MqgFy2VVu%VUWNe7*w&8uX5xk$Ax?Z0{zgO*W%7GfvDJmav!C$aGtJVDLcH zLV6v@z(5Y)&)OL-ol&UEE#E)SvZ@FK@zhwCiXjUD8qc-l(*LA!EhO>Ip#?5Y2*#hZ zD26&$z*9Pa02DH_2{|`_DUfCbn{ATq@t}srT+QzC)DYHCO!U~CHueTXWbvM z%Du zu12PBXlTqf#w+KvO*@7_&ljPPhcxk|zA47+%cboY+Wf$OnHcsHy>|GmC4DOZh)Bl< z)i^O;wRQ$UFo*Z1D1RDau{xz@N+KfOaJs6z+zAeznV3+YN5WrW5Fl3_OyePgfE$Hw+Gf zc9&Xzwj&8J8Uy2A6wE<*RMgn;Fq6+3_)+o%;($3t~VWD(LdllF}kUnkgNysJM4{Hs?4DT^>*WkWO*(mrZVb{duLEyjpjva@zA)LnD zD35^Ccg&>I-Vuq;-q808qdrxYMuWR|U+tunC+#u`MTZt*Q%-D3G04HV>ogATT~JCNYk zQc@~~fFR`7oF<(!@_4RwZ)sLoC+Ah8d?p79h^7up0a@|j&@(J4uv?}I3k%`s!q-)q zODNya-v<1dz^p4NVT)h?-#qo=HIbXUy8xUIYCO5tr28i=bScfCV`5^0BY<@nZ?T*o zaF73{x`skb67Iew1gAcF1k4`Kz3rF4(vA_YGeN_>d>O?B>_VWU$fs-UD*}w-N1WL$ zm_B`qV)y;$&=4mjrNMt#SkQ$3-EWeWS9Eqh1`-7)r(lwi=Y=3#;4%#g(B$AC7NNVqeZn2U*!j zU;l-?{C7Go=t;;xQ@5hB@*wavhy%xRys82>er3gMCmfsOdxW>QoASRnUW%tq<3S(G zlGUCq@x}>~Qn9tOd;J$fa=z|u+!^NegZ22*=L-pGX(i$FzP|x~VGBw za+UMpGzut#5Z4Fo3|15{XejjhWek5OOE=ERAqE=HWfz^{&5u)-miw2s6Ad6G<{q+Z zD(J-E527U9`!xI173R^z#01$lXlN>kdloh~k-An80edWjVZoX?TFyvXassYv$O2WH zO(hQK2(G9*=x~*lm2fY=V%bk;0vLZ5QdqpBy>Wv%hR4Yg4(I{f4vmOlH|`|yPl?w0 zywJlzy^5A#{A{ut6DM|F;ySdEf2Jo`;K=j;WL>P(=A?#ECWBFi_}#tse~#aY=PErRR332ar|{hrf>G%ixs)h)uko#PnnFx;G$j?4Eqg=p zTAw8(u#w4|z1jTwiz=X&fPXb#og5w6BOeoibm3iHU29*Y+u_Vn_7g#A|9cv+$>0Ab z{OCbjU954!B%klcnq*QcPFP&_Bjx{K0>o9fcUql=tZzwppk(?$sghnjv3Nk33casG zA5v5xpDN%+#K&u@tB>aE2poh0rlzH(T^%WYv?~GCE;KZBsRfS5gPs6U4`x=@G2n_I zD8f-!NQME`@wr7Lq_dIC#lyo&Zx07p%1+!?2kCdp*h(xXT;O{s`Iu;EgiJ5rfNLt0 zeDBXa_j?K>fi%;Z1WpK70zn45&dAU(YrxDu1?2EsZ7zw8q`7p*32K?My;&{|H#l0 zVq@`h$)d^p3L{5ZA>khzVqzlCN%0e*ST|g%$0D}sVKl30pqu?qRQ+jW5Io60Gicd4 zIWdT(zAp+{*uvc-#=syf=l;zCkpwq5`OnRPuv}VuiZT0HIR{Q~OM`?05lonFK+ND5 z92hekKj0hydk@ZdLh71|m(yWIQMfvr6F!`vj8Gm1wzg-CT1NS9vqN-_T5ap^zgroY zZPsqKiCFQmj|5Qqxu6)s0RkmUONQO>Rs9JI@FURCB!Er7_t!cz5Ns4hPt*3$Xz!i?drTcs+(uD-}yNw zXBGGmWZv=*&E0=qn!b6N>&Y2%<{lxN&tG6X!A+XKhJ^o<#8wh#24EHBv16e1@c9V> z5Wi4?(*krsz;VFIaw{EJYp_k=Kp+7&wyqokx;}i&y~z%fr7{NXnkNu-0`?Fg5dmk$ zAjbq`0gJeY2*;}`nHkK%OkFICSFa${_m5cFKJ*!)9<-$NrS=o3AH#59XYz%+eOCFu zI})?3hNE%aao%to_%Cy9;~E!lS*TZEJ3;}pW6yEAzTCD3Wo!+;gc_2fx+l*4eo=k6~~m~RLY=c<=N zdqV25_Ld3lPzd0ZnFE~HIe8)SXCo;p+5ts&6He6&C7TRn4|rbeCS_;S*dlAD9WJ*< zHz8W`6&J6k(bbTM?ui3Zst)m&%F1IndR;+$f2vo|#GgaA!5b(l1Rb*cKw5w>=LsC# z(ttl|YV?r3a7UmzBbS)CP+l}3R;dK;Qm`@T)l1MYF%J$8A5Has7Z`Q>@J(!qmuKgL zBW$dOTSd?8;dC(IS7^jLx6lyri!KSY$6#DcR@mq_h+q1gC@w9H2hS&iH1mMN_6-!q zR`7d(dSo4*Vy_-kp}?v2KjT+VpMqO*jtp5HcRY2Ugp+QBsD|Wk9ayrk{9k<=2W0e>%qYn3z;rN_^=0KRwUVuWr_QGsNEH}3wELWJ6% zk3oE$)^9svyfR}}x}XuFcrvvZL`fAyCq<&JOfWZ4u+~RaR$_Lh>n%=`Ghu{$2%`4$ zQq6;y;Fv9|Um3~-U)ALC5gFn%tTq;pH(BMhl+}MkqVuCO9?`|0`O&lI5MI9@fcKl}4o#tUunAc?Ba+a{Wq6_VNGo5wDz8#$v24K#Rf4z5mp*(z z^!@x$e)!s$+VSrTgk}du+-JhMN923yRreTq=;UT8tY!^!3~Eohb6Zg{!fq2QCnUtM zALoveBICK=Xj3DtmNPqB)2Su;e>T|86WC61N|Po~hluMFWf{xnI83#lVB%`9Cre2; zMJn&q@hh)#KGz&8CNO7X?zh-`Qdq<+YFdW8V-yFsvi!Y%X47&q#Gs>A%@?hj3;L_* zyX~D9+BH_L4jz;BlD?Niw8irwFwXNceS|sA{(Fm=|1IE4!@3H2>13WTpdllTZl(bePA%jF*O-3EdzJ=t?7No8q7?bw6O<1}r5n(D1* zA9QqrJO|z*oY+)Ul;s;7_g9qI+u=so@PBr67%*ayl1j6yg5F2V$e8iBXw92D1wg)v z0uq1!ehHZcaMw%K6JlbrSP^irKtiGoz%E2n!B2xD-*6Iler-*YyyzT+exNNKeeg(+ z9GU7XC|kYl{PQXEK|;ooJPxd;Mh{pbqRTAkZA_olEA3N5q}1QFJjbpGre}X8m5^J( zz>=X%PC|2xGnVCtUh~=L`YkqGIPwS5Wk=u4%nXRb{iea6>pry_fb9K0*n97IuJ`_b zT;o)Viju#f6jGv!rSZh9FNC+J)pElIzfPk#~);E0It9!ku0Q~;SAfic7zIIoK(W> z)>HkA32^3;4GHqO{e7}NDR^|gba8xut7G)2rN!dh4~=C_|M>kBUd5|dGc6Bay?)`* z=N$r!*TyL6E%`dins>~PIp%&#xiDh4j@b+7B-){;^70flu%JuK~@ zLK=;p64Vy_kFd#PA^)@=gNzvxCqG3eaZ7r;(z@9V@Q+T?4?$Vh39@`v$Wau^X?nKC9C z4g=l`=a0(dg1H%#`g;&hJM-)1<~I>2WZ^q9MAsH1gJ!*_tIHbgH^~F9p$W(VWR?IU zJS4Qt%tnWYPnrG5Y$XelL2RQ>2INe#>?*|Gva+@=9U_tyQ1*gsje(s*K;TtQob%Ww zDMd6WBIa~6p@9^>Ritd1>>gS*qC>2-FayKM=2zs#jIQB8P6@A1%H z6^@|bVB@uK(fD*@IQv%0FN60u`A+5;P@kA446ODQ?1>o z7jYL6E`?vdfX8q}Zr%l`VSrJiJtdRLwl30xV1V!$!^K=zpd5q75Cp-Cz`$?7-`~7> zL&qsiv+MYglS>_%y75tHu>j%1cn4>Re3(dM!!$)s3-$mA)K6U$reo zSTJ))NdovhFfcI8a)s9C<0dP>uy9`aIv8tdO+-+Z<9froBhEtxshH3RC4&2PlK-wq z+24kneBgE2_{@YE3*UpFCXvmDut7L5tnrp2L@8w3i&RuA3bWKw#>RsJtB5V9LV)-%sECNq+KK zr(#?X@5S1Z_;894r@f)Wbm)2z}_l!W?7FrAvS@zXKkJBmI@#t50I{wuay( zhvN_;b2Xt6YJ5kdg~+L);PSFELVpWi7|dPRi_o57SHP800r&fjElkZ9UTrJgu&#${ z$(0k2cnMn=+NN(2sWRu!XFAQ99k$y-wRW{$gu*un)x;6 z*JQ`X-!w(&NO8KrHlZW8xlvhgetiK6AU?pD!8=1SJ!@3H;Pgh24&bM+ch*I|e%%cs zX=ZW~)@ChPk?VevM_-7as7cYgG+U2-jHuCEP;5Bnz#k?}jm59K>$wRZ{ynAJP$y!l zWE!@@AZE0Mw)djL-M^u)+a{SZOwdE-lsH z;5*FBcVAq*{*B+D!CE{&A>LeU!}^YP6<3k#2ayU!0ljM&>a4p2+;4GqB*B>jsYu5P zNG)8wq2lFd&mu5r(`-yOOgwksJWS8`C#b5jvO(-MK&D-ZC?K_So-~pO6P0UWMMpy@?RXNN3P0erk{Sm!y%f6V}pu=^-E6X@Buiz8MjM zN%}*uUBq#kXQ}W9aM%{^Y%u0U8iCaY;et56;bw)51{TkBvGN)E=qTAG>l-3jIXS84 zKINwih>2~)WlH-WHEG_L>!kUCDF-GjUp*puo_<6pskScHA_{YgWV3V2<*d7U zoB`z+GoZz(G#u5rSoMLtWi-XQwh;2dFL7U^B+$c=s-qej@W*zYT_$6B^;=zNu-8u!?IrcBa_N zQ<9FBR}M511^EQWQaxdj2XOB)Kwf=!9j}m(|3Vx0o9Z-I<6{B>ez_Z$erzY#E7ACf zdEtVqxi*K0N-env7=DP{--U$*cw-rP)yJo%;Mm6JPau(wX|qo=ZCWh1r54OTl!1~L zm~KT5*4?n08KjK(c$Zu!!b?2gzS54H{biD;<4HhL% zhTg6&PWnekFfTgd6$}iGN#V!LG zHqR3CT_|Cdew;deTIgl-{NsRGO-3KSw?7X!ho5qwr=#PC-T-S8?ug5majJ&ElIM)? z3%`82Qr6(|<+2%_lr)$@^h*Ib=S@|egb7tC{t9xKApT@${|Sz+E?*g5>&rfg@M+C* z$G9vGa9i~uS>wa~2wz`*d`i?92mCL>n|=B6Wq`;idl519l$rGsqOOoa=H})m$&s9v zh6Z8@_&5j;8_x;Y8#t$*<+tA`+OX4$*An$X5J*Un9&joVQNYVYjr;wA=p!WS6dsa) zsDzEiORtu`F?_e)hG&X*V z@VE9NUaGs1Ff6_=XpV*03>iG{>USeu_`Iqrv*`ErRFQ5aV?y{%n6y^k_1uh68XHs~ zH9;=+{A<<`9CrG)p^J`#vc)uLCVWfhyz8JhEuagIjPPZzO9&HgKKxHoUfo^frTb%ZCjR^bi63F~zGHVv~N4?Fwa@$Z?KTY`@ttW{8&kofj3 z;X}f&b%=-OeR?|UsoNIF-OyCsF6By%_C6F|B!qd`><+`FP<^Mx8O02dfgWtXg-U}k zLUvd~y-#&FASzam2*SdG-oeb=3W);F2qZJzM*h=s$YQ}lFN>%*@Fyt_czqlUC_kf_jN`PHJ}|vMnYItkYsto&`_vs@VrmL+tM(p-d5png4{ORe;^;7LU4#(QoI6vhAVde2wh&_d*VGe z#PL}ewWR3bD%8-}-Mku%IW7`a1XX6B41j1(`Rdh{)>hc@U@_|@lw*i@M5fQ|!HPlS z^x*e12*W{&UT^O)oe~;^_`o*Ti>?!vlp|(`tg=GMFGRC=c6bM+KIZU!lbx;VBw1og zzlYvU3|?+A~DimK{G zihkDYK|w~w0O*duMkkwydm>Z;GAZbZiT?BE$GbSXq1yt(@3-^=N9Mn0)V=!2S$~29 zALFhHg~MDyK>;#oU0q$QXk0A6!)kq+8yg#IYb_!FQ&v_+4?+ka@w+D@636%aYosqY zJLBYvCT~o2M3dT%tq8?FDx6nPk#@b@44nd0?|3C+EvZC)G?80+;X)}MDx#g$FJG>* z-0xq8x}Au3pFYfrlUv9zx0UngDScwSB-Jzv5i+GSWZ#!BJ&Cl=|A&D9^mkE zb8#f~61a!<=ZB1~R@bftp5F`84m|oL^#SGpX;8{X_W}FRtf|o`JTi3ZdD3gZAaz-E z+qcg|&-n(3y>xuj>8Ua%uGUwx!A~h?O3(1-Q1_N+H7RY!kyH1I$RDHTrhkOBTI5=c zy#b?H?bD*7A`AzJ54c1Q6(Jc7KxQ*J8Yx=Nxljfu>gw)YLbg>M*kA<)TbRJ$XlUq*5~?9fRYvpk&8&@O z=`?*98v6I#DM!N+4B9tl!lWasi0Zjv>OgnhhcQP>SrGL~<*~++md+m3TJM-_W zQWr%s3LE8Pg?!I5Y}$ejTZ2L~cFmAjfl`xtXVlI)3<% zLIM_H(@<8Hp1ZE&557JR*+e)Sf#vFJATOc|S>QHRhl;BKT77$a^&oTvIL+{bjk-ON zW_#@r8kW5(5!6Yk2*Z6A8`M>i-E_FX7|Z-AsR{zM<@0MFpglH zSqLE%G;T0NLjjm&nXx`ZpV=8|ZGB37Q}`%aaH8~J@B)ZMpaIO*x<*DP@Rz~BTUD|~ zJgPZ=%c{_D><@Jvt$L=dqUR1v94Sp0qVbi!J+oQ!)pgQYKk>5PKDaDHdWC8A3xPoq|9jyut@ zvYHwjXW#sEAD{`GTfXOQ0Fn7zRVJyUKavki2u1X4UKtvd9NQr~oWM9<@D@)VKmOw7 z%aoAdBU%!Gs1ds13(+(^Jx4(K+{pJh>w}1|g4JI81CL*6U`FPL=-SnP)&Xp%Za;H* zs}zrK12K+}Dx{sMetz3hcPtSj5D?FRq8T+mDhHhJl?IZIuO?84rW-d7;udUaX@Q*} z<->=n^78uKd}{a!kY5*T^VcKiL;}cK_Kp+Kc{v5o)0pBkL;5eO7|5d#dyGIeKt?i~ zP>18RtVYza-ogWeh7i93Kn^8_?OV56;HN?M51o-23<2v7OUnuPh#KhY!|4_n5+dNN zFK_SSk`HgO!=x^jf|XT@xA!G|eJ<9II0H1ZtfXR;ic3m97}nm`&@i}3?L@1hJtVV} zUBO*8lOg4gV~>m0HdzUU763Avd(OkztssQJWo5 z-^a~;j>8vebTvr<0Rcd@Alni+sIRO0u=p3sfLeI~L_A(c(}p>3d05`kD0bD`-aj>|d(-*z}tXvd{8i+OKk`0Egy#5sd zE+dG@+@^(lhqtx0^*|g7B&hLi%BLm8ZjYZakD%7kI;L{{Iujhx)_rp6qNu9$<(n`q zqO_C4;7OJGzBmpwv<5Ads79Wp{>y>Wmt&NecJG!G3x`@=U~RZJUESl@+CJ3H$x9XC zqut%QUeTy(RAvXUn$QyCz-junbm*`%SCFs_h(h#C9`C z`ik^~fhhh^0xk&-Miz$gSfS&CirvgwN*m0X7`Kjm92|*j*P|(uS+}5Y=9;1tZ}bAI z>AbF!n_qCSmv=7hBRqFEw>9K%@YF{}e$2cI=nmZxw4nVaOlVqSlu(;`UniRvW^OJo_Tl~en`YM_ zFB&F4?9)~^lCJMhMVhjJ2{Sr#VWg+v6wJ)ZN(5B@I|>4gV_Zr~9Wk9jOX8;Os8ILk zCOJIzsa>1)usc3g?Y=pv9(GWYxs!vYS^{ZUmz@o3`oRYYlV(eW@Bff>Xr>e zROg!4zCr4*nnW24lMD@2+k5l+jv1n-#F?3oue>yyr3#ooh|wRa{+po|~B95jMJs{pT?e|vv#fLlva z8sOM6RAl-Ufyt<#(Q`wwq`={;AjH1IJIk@y#kl#-FH z`38sM>FdC1K#(~WNqyZVL84burX*3{JLc7=B-;bIa6&!$l z?9MRJ8&TGOJ*uE1t(&HpHl1Mae)Y2b=48c2l7%HL@t|NKJGpCCv{-0ko-?P6S9^vr zKRXdK~_KwRJi-?~W2y?EgtgNi6>NS?#OHW+p zgzo`qk3bY{Y|^BunA|@O{xF&5`XJpU!q_XYBX8B7BW5>9TPK+4m?-o$nVqP3k5J3B zdr)uilek@;c{g_hhT+tly+;?{Q^uMHb~RQ)s9#s|w0p{!zqY9<8Ff8!O<^{Hi`MEe zpnV~@DC9*K@X<-{-VNh8LUEO2(YZP&3>7bey+qJWoIJVo>Z#~aVPS*z5o9=HOA{;} zEHh?pBAAWUul$u9itY|)Y=-G~sIARw#&6uX5u-GKVjr{sFdT^5v47g*jCoi7=`b4?U6luqVOP~{D)@~bzgT@eLG&jF_z}S zJ0&#62f%f+x7 zt%JiZ#Ep9H=FgA!P>kt^r>N~dX?Ms;9hHND7~(q$aIAvcf#(x-(LmR`Dms+PkFypO z%>_}uAQItSVj?v1nE8SDK|x2X6`8Pld)R61P7XVSB3g+OB?}59UpH6h%VvaRBc5XG z)-$fhLfg2U_qf#<6b_-c(`(hz91a9(4Y$>rHEXi!;A}Nro}c)AepoqfsOgyGLE$1d9yw9D=~p#eDL=?2`Z|nkHlPw|CY8F!R}70|>;s7R5&#Nt@>wIhE2r)cJ?9*lyp( zxmu}cXVabcokD7PQEb+jxs?I~AYyE##5O~%{^SYCUmxA&^vab4ap!uMi4^_=l~Y)-P)&uOpMzcKu~y}J7LC-#q3`@(06<2HVsJ;k zWljuk2xp7eu4n8(|4rAUw9dV2wz?spqHn)|z~uw}*;!e6nX+frRMHZIj%MhrH!kAp zFu|z?NCXCaK%)Y>U!P%J&;nLGc+guTB{%oZ%JKrXH_$makb%y<(%iCX(-H=nq2KP` zb_3jQj3!~m0=5Nw6PCkI%U^uW0Psk^qKjoA`q;l3zMKf0wP<~@MF^~h7$PR^8yb4b zs{1^UJ`loCoJ5d{(w1;?9`_*`hu$+NG5o8AYdVso6QQ|ym@#cf_dAvqEL&Nq@P=(%eD(1D;)f* zL$s?ek-@Z2DJN1WdS1SR z2Vbe|xpn_pwn&_t0ng)he;Sd%s6blFIp;;mk=|7?L#pz3 zzw_h-?OCV-E>RBOtl<+8X>DjA45s)EkWTQLhd|_kU%*mpjM)#!aOf{aZsCpyI zY9AsL@lpZA;IB`sp`XCH7boooV&yA_&^XP$JHJ{z=O9Cuyuj>yfx$Kw& z`4^K87I%_*RJq32BsQsc@wR|f2vh1;3L6knM z)+jZL$fX_`wWM`-s(3JQcKB)dLNTOtr zLgj|I26PO#U~lyO7&vw7In?~InMXrisbDX8cjW*g2f>RAa=keC>08c;6GmC>iKU;^ zWl^Iu&F``vgaL(~Sx=KJNiiU%;QYP)YA2dQvGYWeb<8wclW+fi=;vgf7_;r$?{!gL zJ}x3VC&zW7n9&C06PzlZE>OUz^9Bes(&sgyvrcmg3=Nf0YygQ4X8-r^pSeK0;)r0bhzR-J@zPY(MV*5z)w=9Y@7Ekh z9A2QK#1hVToot|b=~g`#!xbAhGf&OkeeVbc5_u(vKPD6Y2OcjDw);Z8#gQLTH3Xl| z26Me_Qj;^>ky}cqPy1*`WM0VrrRh=s;ktXd)IOth>k0)Jgnszn-d*!JP_xj^wu&w+ z8dN-$0O#&Ni^>;OG<|Fzv9i32 zfBpEO?nAwA@6McIPVU3aIYK7_6Bc^5oMd`@ythFfS7_!}HCG6tkmy_g6huwnQuvFD zdg9`%oO!eHs?a-34{h`)EH3u2koXS#_tU3)F38y{7F1GH?Ck417tseE4$B_cLxn2+ zqtCUqiaCUr6$4;yeSNkEgI186fcm=e+E388kdYk`7DgT#FwW*oj*s<_0$sj-9S4ng zBYoHXGZ>aajQaa$Cz=02V)y=&ce^|Lhwx%4gMrgxXB@8o*%bCu8kj4->aSs`)8D@iCqa zKGwCwYK6fPj3!o*jJ!Ofck%S67w=C+OtZfu<-NB%b6cN1;v=Mu4P|9syKh{-9t3A* z`*NSa#=@#%gE4)+k9W3gs@9nJ;choLxa*-fOJXVM^*#BEQ$d=OSfh%l1|jHzX%I6= z&p(av9KfP%h5`_vf*==H31}z?f6%NOXlQ7FgcG+v>!(vFbXi0ICqvc~t5XyS->C=V zX0n@m8NLjvmwq&$XW5AKhQQyg-vBYKI1V##_U-dnNZMX4HUeK8kwr zI7E^kL2HWj1iyH31-`rALr?~)zZt(ffBWLju1$pk8z99c?t?Bw41jC-^-E&+K>4mG zmX}Kf-!Fy>ZAK$+pvnOyehJ~4a=DLjz6N1p`ek9YE zE+o;(znbHlY&X@?^2ISBMkoRSFJ-A9am-1p@XWk>v}X=IMN;SmUA#7uB>MU?u%Uo! z)oL1EEwYK>F@}K`cjO5uss7AI(LLG%Wnp{N+4ZD*ER0*j1d9DTmvLb|&hl{!Qdpsu zmQ!8Xf1{|tkiq^a5v#XKPjd~?K?3)NA0FfRfR#cKbnSq@r-w)F7^*r*8xg$A14lNF zD|cyq4EHMKj`&<$j8g@pbh1#6Kn_roGXpU&0s^^DpU#Vp{)Ot57+h%XVPR|Qe=!CZ zJJ3&p3ql3bGGsjMQ*%}S@tlvstxC*wX7FbWF(z3a*uZd4g}H)@BoSH z2)KDiu1r{0>8$|@7SLT4krD=Vjn#_D=lXuKcdottV8Z}zUSP`Q<>dr$i0P$sWe;Ty z`6`6AhDW{WBz+cBq}8)|`wbSx*0lYnPA!AXCTV5YH9H`b3nvBAZ1s+|05?XVmtZ+& zLAyrc{FV_K;fInO*K==M!c*xa;lQ=?gc0qD=iwt)g}M_n~hM z@+-w*7bfZ~LjKm?9-cphzQh4V2zXxLUwB$FoB%@bHj(k2g#06f!IzlTG&cIXKsTeC zu6pA?`^^!vn!fB7fN0>pv31`m@W3re02Drd%#L-8AtM%f7hPQfAj1}~CADP?58v{M zL&Ib6!3mdKO3G2k#~VGOQC3v6EFtFs^H6+!qgc-@#tO8eceR!FH`uy!+Ta;Hh-koG zEARjy39No??Q_L|%62oVkKc9W!A@NBKh!g{tr~n21vUZwY^c*M75%+Af_T1^?*P3Nk8} zxs2LWAqvK|WRt%gaZdD)n8z7&SWb=yZ1eGCX(vd>6T7x=Z>(8=teif2t0lqUKGhCTE z!xqwCb!13dQu2t{D@60lt?VydC#&<*vC&abL*jNz>UHm6VRMpl!hrcQ_pM~{Zuzh{ z@i4Z4$8ygDc6qhR>T{}grEb(}HoUfU+j%N_<=X08h2N~mcL$Xg=9=cDkCcOg9B5 zLn2fZxHUF!+5~x1)4ZZemO26^!vX{GAiv5O0@qVbG$R_5laE9Kn!mZDWI%fYZP(l$ zbQ*w@c>^#gpa)|jezgjw=C&sqZgC$H7Wv}C@@4roXVmp|sXNJ>kB6TO?Bdd55RsCU zC?;WQ=ZM-L(smDxYb*7K$%;NOWS0PI&uuKQy8V z?R&i~TFa({xdHm^CMMc2mb!3R{T%f@`@YM$23)&-p~4TX9?6Ba`i<8*V1&h~$8_DjfNZ#xtni!@|M_ zGN8{mqxd2&jyvL3D5>!v$xzUcvXakJmcO|F&z25n#h-x>9KQX)fv44Qx)WUmkUF%B zz10z8h{c4sCnV%xKsk=7^L(#y~-!Cbo&9!@q&c{{sVB=P}vgTEp0yfKa6k&R&} zC;ps{-G5dCWe#BFJ@k*lMV&9QJq~O)o;L0&^Pj$_|GFOeMuT_4o)$PL7kDHJeH$*muVrNjWJGqQ%${grZRRz7 z0t4=bJAIQ&5DG=S>4yStTa_es1seXv3YxrdUe~iF;zg{AChjT?jdrMTFj-*3hD-!w z;&>(yCf!o{$$#hhUe6q$-9YYceUxb@5<85&f|FSplzr-UQoiLrYL@2O#{PvK5gj-jQtU*RQ|KfE>Hm$_W56h_%1ck~!(>B=u0b$Rj0b zC0eY{H#}TU%+}tXf;^7~V_Q&pk{pnwL=p3S!3zSHLts0K6BcN6$&Od9G=QBgEw2y3 zL%KKH1Y~9)A!wM9T6Un#Yxc}HFqMb?h2Fy{+^ruZb_6o0e{_ct5FR3*Xg0!P_6W5p zJ!a|RYztUP>IM$?!q<1t4sZM6ZOs_uNIRQj}4z4WEK(r+{Y)9Lnjd+7)>5- zL9~qf;UwEbDOqo!T4I18<9lqR8?h$ z>%}--1Q~LGNV>;UlAWZUNEi8oEL0O2$)@wH;_~iN)5#QZXkQG2rE_(Yfav|TtuYJzbe7`K8TDBQ`0us zD3DH!;6R|_OY`&Nf%4?2c@)AZd`_P_MZ?N|uY@5&#P%(Canuy>5dfLPE}kBOT>(`( z#>1Yj&j35zv{(BMS6dAYx9&SjS}UouW1inO_*mFp;B19RN@miJiH_f=5yHQe>$#eVgToO&Y)qV2Q&W1;l)t3h$B;y6#sA zwa79tG!!$j3gtH&tC9XDv_aNqC;u-jTS8`U)#HUx%4iZHK;ZEbvFd(UP*5P=GB5E; zQ9g1wp#U1Gz%LxW4_(f5@PK=ff^rK5xdH=hRb4-SzQ_58=|aiZWcq})7F^>Zy5f4I zI56>g8qr3m{XldKBD{mr5uC7pQrTv+k(9$ev-w%x-4gqj_g}*QlcN;pY`6sxu+XEO5f_97 zi>R4QB;DK%``fm<{n(IoN!`1#i3;+OA3P4nK`&S6gxe1{U107X=5Cgg+p^~H)bX#pcqm^Tp5&o1E)Kx zt8pxiLH-YS$dP7M&)uAY>k6&!{ws57nI7@CE_1)v0X{y1b}L)k?Y~n~r|W_7htk;vTnNy1>`fw%8{jD_%6|JenIJ2y6CLJE?)8^kz7{udM=h*86RFthF+(|I`h zu3v9~gbLdhR9Weo;s2yR%Np}h!Cg7fhL8^QLm)w+g)1E$gc?gZNh1ti49r4?h71XF zQ;)7CCd^b?3Y~wrj?yBSMmJ)JbgV;YnfvCZCo3XUALG5?i~-XFs8nn0b%VDev{A&; z{+wQ)%tDMdg9QBc?Rl8lWIS2G%(&7WY`5muRi6p z^@THGn*dl0kEz#~y(Is^3$NVkG4)Y8Kn-WnuUwT73x(%I~Pf~epmXy`XGw$;_0u_xUz)VLw)U==- z+4-a-<504F-J;*RZWpT&NfG;O44oLvZ9m6mk-3`WyBA>WW*VAqYn#MU{)i!q%7TcB zN$Fh%8xra29=+e#OcFnCSIc?zfIqO9sEAQ0P@xh*?5sRQaE`c5*Wflifc!AbD$wRw zO{H+<3e>AOvV%IfR^5YR>vz-Gv7%7W7~z8HYYTqzqAht&!q%?TXTp%QL(q2fDi}>i zVB<3SN3hg@I zXuy*wEo#vD)YKO)U4nn3qK$q=;p_nS8P>wzbl_bTA}NXi7|#6gFU5{Jd<{bcJ&Y{41sp$!xKq#~gf2z=RimVSCb ziF%W=&hGZ@;|uoOEH&3OTz1Xdupd2Y1;Lv1%tXuwqtHJUrHf08L-I{@zlu_e(ld)y zK*iq!mZK>l8ep(A4?~W5WGTB5aLg#+3~*jhK=*QU0>^>C)ckj4@ed`V zaV|-L2P3pCFt0bXW$-Zkgvr)a47_bb9=4-%XuU-)|lI1D)Pe#$L4wLoe4*Q8r z*IN*ZV@w6q2}n!N)UM)=|90Vxa0HqKFw4kH1z`JbF1Kw{rASydL`TQCd_6 zy3x+Kd_-5(1}!+wv5sWi?nP$TIY98Xuc9+A4xe?6+5f&`4@X$0z~##1L(0?FlA(sA&WhG5!cJyuF15 z&*8%{!lv5VMzaDj9N_Iml~vF6@1Wcwo_4=fl)e?ZumlbMOs)#qw8 zOxwcNbQ(+Q98z~irW*#+?b@~t4H^ovk%0js{*okZ6Yc6A{^JVDei<$u`E2xprw7zc zQ4}Mj9#Oww%0xs&Fn*X`-=`+OYVY2@DHsl6rE)?`fKT)6*;Wiq0&Y*oF@8VgNsWVD zg-`zxl~ncmFYVg4wliqefDO>nK9ug=_A7Ggu-hb(!TeoaNg$HW9$Mo07j_6W^2w8+ zF%a@p$t;V3+z5&@YfXFPqKcSMD^z9a8`DpRCeb{xhT(sV92>v2o1XKkc@GR!q3$NDJw!BbHB=B&j zI^4T*W|t4`zztd_4+M$N_dN0+s5|RgME6iig^r#9opMD;~XM8WQ8FrLBV*bv6eDJ*2uuYiu&u?{#T z>h{va)VRFFKj{cg7=bu^;hNrB7?bKOL2qUGKjkkPM9A+%N=3rMgwycrJ&%L$ z^xw-`A?ghd9eal9PEBFMvJg>zSSdI-2vZ)4XGp0aD$7f_cKtd5!(tZ9ztIi)8uBtS zkbd3By`6mJ04=QV&B1?Hz*VOS{C8d5eQ`1vhJUFvOWS%2vi=JJg3H7myINa8Sg<6T zSkG?%S!Wtaayo`Y3#H-ad+gMn2uAGmzagSH4olN=bB356%DOn@XN-x+1dBk~a7 z60pP!sAxc2g@%S=^$n4K^)SA$J$2ID@Ih8^<4I@q0Xcv%VLBl+CerKObI1Dccps#o zQs>y=Js>Z*`V83v?L88c^{=a{Vj|@t06vti3{r; zu`5@X<;T*2wnaW%GFuh{f6)XXFAp9M4624IKaan;g}5Tt?}cm;v6EI=#Kc<^E7KWl zeAnLp+-Jb5(kG;CCix)CPKGp~mTj{?RchA116>a@^H#2@(xoS}YU&GYu!HRI7C3rz zgVx%++5c159eu5^_U=0KzXW0yYfRawsA&A*9YVtLeZPnZS4;#3T)M6mMb+;(zq^MZ z+uch~i1p#=6Uy43Luy@5bvO7=b=Kd?F;XE>hW+n`X~BPqf7Y&oOY^_;2KeJMV4Qy& z5&yFg{J$^$E5n+26#sAOWB(Tv_kU~qe=WzbgJLq4-xZy?NWNEH6LY{c-itx}^NxMN zKmGczHk{*s!*19uPQw)(-E4U0i14EeB=vpQe#!G2*L>!sOXAmNc;vz0boNp7wDx-4 zn7M^K8>_w`1N*+=;nhmLQ!7QyM|vtwbeu4l9eQztSoass;KZV$Vy8a;`#9OV%INoT zvX}jLlKiu^ubqj%_55zy7X0fB{j=Z4$@$fFzx&GnKfX9JuD10u@0}m|LIaB~yFR4k zB@iE|&LiP};e$oCB-y-~+0r+0nN`CeZm#WgGNt{3S?x()^W__}8&BrF8t;!$Snp&%Y>CK7fQfzjP?u}=3ZoK-(f5@!~ z$=&5}R?ptKKKTQm=F1LfBtl2Zf5>H<@@>*kB1G~b9^Ld zsea*>4-N`St_Sdk{`lc;s`Ka6Vw~f=_~dPOo_L)T=YP*5D?Ir@yuexhIIkoN`ITf( zo4LhI`9R*p@)e^fbCDk@5$0Qx{DX3mPE|9WV9Q)*S?`+4{N`+JLh4-n;d`){6cvqd}X(@&6DUipW2p|RU$0%C<(jq%Fd`< zTC#dO+Hf%jP1`(<2}o-X+W{K5YC_G)FCw*m7O-4 zlNVPZyY%*vQLl1UlFL@VEH%w@<}q{Xmrr-89CEga5IcUJ_fy@+(8`6`j+3@OSBwNs z>j-cAV)>!y+a>2aLH-^IDYHrp>7TnQMPpCn;TGth?!PkOKjLvNgK>8Zk5_EJS+=L& z@N(=)AO2=xhsHYYo(U;d)xI^&?8o{}PXEk^*uDHop`vCqoVK!hlK3y=_RBMdZA%!TGSpH78&YgcOuD@f9)L*1u{$5e=DRjA zNckjBI9D2Pl~UYaP3ayo9lmLF6N-$)$>okqNzKO^DTZa6_o)>5JO~j_!lhkNa1k!S^hBG=FIJwN6^(fo>kBX4DXD;GRcMg}$W6!wAzY6*0 zxlVqEv&HqEWq!pfE(c}1_-v1)Gzs>x@N2IQRl)~%&)yQDmZjZ|{xbqYB~BPa{p!%cq@cF@nsm zI3Q$&eBy*xbQw!Tp1{Pim#V#4Yk0Db;@{sIy$I zO=ZcUDPEqOkDjdi@zzOxFoN9N@%=}Sx$+tx8(QgWv^eRacm^*xJ7~-}r}rcr7RSc% znEOGeyvBwnETqSwxf`^_{aNXzjZz*WPd*%b|Nhwf4VJr#t1j?WckbqWXKwb!^lhqe z%4Vyb3+CJ3RFU4fb)U)-T+U>cHGUQ}uM%VEp^LpVbjT`#bR>cz`k-lFe~pN9rTU_%{Mv=O za%+a(+rhJs*>Ybj2^1`Ln#VL7dGV40zVEbQ`;k{29;L~n5*cLF9_TdQB}%Djt_`_G zY1Lh7{?}*qiFDbSMp@hDaQ)E(O1VM~BSyXFTuaER zR*7jVM%(JA-+vICfOTr0%D0$+o(zh^REXHcq|^Yi#(StS;An;%4*-gTlT#7`(X+1G z9)RA#mhg)>Sxau{jq6>#ne@e@r3yJg$T+* z1R6^SY7k{0A98GDcEok*02?vm!}4k6{sR8@@W`3%r&z`BkcA?s%S!}-Do_Vu$b{a} zAcdQVRmhqlWEYi`@uDpY=BIdajZYiau$$3QOndn9=kJG5iW$8qWW!sxx(g)46|YE3 zmtZCeNJU^a7$AyW8xjx@XZu}EuJ44Ms=R!X)12$+=TWxKkmyk`yA%N{u+}auEI^zr ze`50;M@Ppp^U%QHjiSy819W`^%?Cc4$ohcS4#UH3Y<596gCBu_p}4niU7alcpo*;5 z9Ql6rMQ#Gmb;AL^r+nne`R9cd!*6pm^+tBI>dMaM3so0HJlz(Oe(n{0$^q|`@Pg$_ zcCSu_IL}-Y*Q$I~E%0HoZ&z-_+uW+`P_o3nKIJw|zc9dpPm7e5_!Pj|Vgt;rb;j=| zMp>vv8xHJY|2qeu0g;iB54KQd?4|&4@rq_Z+zqVW1<^i-b#Vvl=-KixRPC)8X5pAu%9^L05bEyC5VvaWXVGoyTn}XAntKFrnHnY z=!MLX#KvwUkwAHB{nUeQ^>~?$@BR(=8l+EnQliRLK!XDp2gNKkWDH#z1*v_y zahTS6b+p5vW59XvMWK!caP&SaQ8{FzBHHEZ4pB&5gJb>uPR-scgc{8!Y!tax2oO|F zC^L)mLEkMk)YQtZxtf`1GmMUqwSJuI0fWS%m#=`Jl|=;v(J~au}guLTGH*X(#+u zWxbmSx4S$V7DCvXLWq>sDa|j)F`{aG3ndq5T<1G?VEVg;VL3N$kU^^8VfT8ln(cwI z8~zTg{%3GGyXMEv7@3)^K&_Tp2_Xr;n+*)0i{_y3!34K4l zR13^ELOnz=R>;gnuBt%8U;&{+L~N`a5-8^I`F05!KEqlA%8eTvfdij;%iw8P+_;tE zt@>@~j(Tg{`)Q~JwF3+C!=SqqB{Ycm2eEPBvEd-#yCO;%JxsaJR-n5ga@c$l%rxLZ zK;3gH8V(+8-=N!lyM~A|0vR7G69jl4gsU)Q07yqmox7m=`Dd};gNz}!Tb+M0}xvwwme=$NX(^$ z)>3V~FleO7cntA-W)MBPh4gliez|5paCf)pAQduWOtNrg+mXf%MMr*c>fzfA`_pS` zYWiz-6&B5nqMo(;(oam)Gro1J zA_7Njk?7f$rUz;Zo79<^nZZB6efVtwGCV+hhwQhgdM}2GxrP@!%34Te8_?QckY2AU zxqAZYUaNZejveOO?D2joL`ybO)rb>IeqPv4R%T@;Vehi=*3^`g%mK(ml{!zKTWKrB z@;y9g0Y%>P=LIer9!{^TQFXzKGCU1J7z(FCIix|{{a#aE?ydQxFyapUYRr(Hog_w- zdwQ<>@ZpEG3Mg|tw8U?^K&{j7nVy3MOv1Z$(c&PS{mAh2dGrW0tPYd|-4-2!comaV z5#(u(a*WL^-~+wz*7V`2UzGVTVz?o`4Iq~a2MeZ1L5@E+)XaC_074rgecrC8V&7et z&wEK_uERxEE+$T%vbawqJ#9($@Jdex=n1QcelYqv26(I10c#fcI1nE`S)TksdD+p_ zpK%$3w5q~SUs7yZB-o#N?fjf;g~@t^SMSln{>^5rD~T6I>Dj$= zba^I4`2x(a=_uqeS65$IvrWG=-$S|HWA@~r$(IjPeu|^n0r*j_3*Hh*?Do$Ybzm;W zVT}`Q)8@@~Na5mpo0#bH@ZnFf)(uqSzxIsy2{Hz_l3hxX1-nxV{7G%vIEGq{zTLel zAbP?zs}q&*vMs~P71TGM@}^*wM4-%V*ehnMAq6>js=p~#7N-Y!E_QeCQByoMnDlH8eD&Ms72ux_fLn zyO(jW>!MI`L+q-(p&Z1I&O%3>12 zksi9zT-W970w*bB(;N?rCU{i2bbvs)QuofLb;oMw( zhJ~5=z_QsnHR0>~R<2eMgjr0?{yP_hz92{<1b)ay{1Lb!NR%5??bm7E`5qD+jD#ix zxT&r%9(sy2{GrA9r6ucXXXPtbWI~P|#(@?ct-UbWgN(JMJ;Qd>ZT20AjbUn2 z5Z07-bi>QJT&^eq>OwFvH6(;3V*w{3!^_E}n?7t};bBO2Fn{~wBxR-)ZSdP4VR3PB zh056H2bvqAOI6ptw1yTh>c-kX{+MX)4k-EJ8aVy19x<^%6chY4$=Jew`bb?v&>duH(eYwydWvEJXVRi{FZk})NrOl2w&N>YeScgBoq;wD4J zGNj?AkSRojZpu7VZc{?Xa6)Csn5h)0Ol2zbyT5gQzxQ{BXFcor=Y9WqT4$}!>YTWJ zhwF3geeG-S%v|R;nd9*8g_4fMMtDHuACWAWIX=Q=%=gkif6{2+j*R`Ibr?Kg{w8Gy z5zv&Q?_6AkCZ?DW@wa8XSmRK#981Im+=WC^EWH8xco>F74f?`tPk*&)^CZ*-tC_eO zd)b%KsUPfI-2(j%M)~ZhRa{&jar)qwjSb8~_P{iXC{7z?p+il@!jFlsThKU<#dJU+ zG~Id4_>=%n3SPwn_!jVaB|{{JeO06(qMep7EBZ42Tq3h4S@|X|@3W;>VVsSpuE0*> zY$vT2&bQbebUJrLO>Gcr7G9r85>!KzQ&UiO3Gnm7mGJJDt7pU}`MYwGlL;Y3AMpQp zKOoRF8X(NG?5uonZK1t>XxA>jfB$|M$e%p<9#UsVZ1l*;+%mnkq!lay2fBVdzF*%g zExf_D6?*Pm_-W#~!lD6O78J&wxWIgg2%M5AGo+*Qc7+fYpJUN}Go6xkL{wCD=`Oe# zUXK={qhrIbx3;`=t}6*$eo7QCJBX9u@~1071@6Pd3PlblYVMQqKpb$v!7m9bQ0sB!nYHGN}5V78uUdpD!8^?Nly68bR+mlXp^>oo4BNsn~lz=3WWCW<_e?}1&y z&rPUyeKj)ucH-BrT~Ii{A4_$Iv4VtCZlthgE{h{-NH$@8#PV@x`_@(Z*2C z;Wr%+5^}~e%f-nlW}lZ#i7@=`eV4xZChom}Exq*|9A}XD4f!#=q;NiC*D{BKnJL_b z-<12lsjCy+v!~)$&k(Pizax9(V@Y**H2OZd`NNY7< zm<+r!9RCKJ=^`)sbEZW&VG4W`*W=*9gK#vsew`kkZMS|wG8f(5_bEQu=Ye>*&N4+8 z{@2h)!bPK~q(n$a$QMls#5lb;s!&LW;LhrkX=`B6if@a@d3a=mFkQhnfdURJ!AoPL;Hmn4UI3T+zh&V4*@*`^t0hw(DtzlDc4L7s3IgARsP7TRA)H2`&R~#l)I1 zAVi`x!DIyTRa0Z*8yjVF9zUMNcIz=j0VgDUj?LULfv2qt5ESn!*p6Z&dFd0d_0_FG z3qaT%K}L?D_(`aM@yvGm6QMb8Rj?RE2m)PwzH3?Fce-?&rk`m`jmQ3{6P|n9_Ut*2 zl}3q+cA7&SKN_L~r#yogjde&U33^CaRgOg7t!b;9Y>xn- z=jY|wHJcwk08yvb{<(Jx?wcGW%7S_HIIlnHY@m1E$e@O6uw~f;GaP4@hf4*l_zZr88-q(9?1Kj&1Y)d3PF`7*rROOfY?CUU2!T;5AR! z7q>8h+bgYw(&T!(z(WZm7B{o6FkQH?CfH zL1Z!~L@%O#CD~Gl739!Ye8F@W^g;4DE{_KEKKU_DXf_pCB0Y-c?RSk4-knCP3LzwKs(+z+J2HZ2h9((MXo|yOseU1IelLwn=@MSDEr%XFTT?7>{_+;@% z4nW=LC-%YfMOJ9svP7ZI}>R*0=7}6yOhY<{q(Dvg60pd2Z zwA7&&xG>2wTdrHkVq%#V>`gHakTb9?EUt43S4*suVH{C@As5!@M<0y!sq;hGg~TI` zmSSXN0sKqGjf_TXiY}hizz2tuV}#db1k}6~>62Ms->b}1G*R2oFt{YdF3+~us%QwA zYj`*bQg{`Wm0qe2Ha5D&_Sgm+OUp#|aZf0(dmPyyZ0J))!KrC5VJN$N*BflEE z;$WZ%wh3A2$-_BoC_Tdyp=QX1e?veUv+#5@(@TEMH3hOek zXcrL+u*g{FbqXe?`1f!8gJ^N&VK7Fc!O>j8gjQ2qn_gCyU=;)D(YH^{g9ODiGlMz} zYZa7iZ!V*3lhcllzBv1F24jB-8Oa64^-x=4gFO9FA6Ob}JRi~0;(@0FFbmF3{Eb%F z;^zO_P8&gP@bE5Q=i+&kCh6U~k@~_=A}lHz=)+8fJ(Fe$(3rCJE!-crAat)p|90bsQ zB1%F)IhS|!}tdTnCZTe_a`?(lGN7S4aZKvXBqcJbR09Oa#B{VZf*l-;F*pwhTyhs zfvHWJJ)(f~%_XbiJytbzL)E&I)oh65UmvJfnOvxy21qiMU{t&qrMn`j2N@Ayk zU`ZwzN<;SN6&Js*syYSE&TLcFJ>sY6?d`2A!IsBWO~K6UYy*p}Y^oI>1txu?dQ@$E z^6m9EZvUF95iBD_IU+o+Y`?W#*S=FIWsQimEhu6%=)m3WCUyiHWI-7S!E~=W|+ccYAJC+|JV)sIS<;6AA1Dd<8GsAxh@48lWE7)5ge_ zGyN-%d}O?%jZMwsb1f)**L_$sCBIm?hMmZ3hyV$K)yD@(P`7U0eAV6k zq8|ImsMnIFzbYzo`Kcy$F6K7c(+>rm6_7Ku)rm4WE6yg)*B?XcKPBGcR}=hh_5r8} zC>`t0QAyeKY8p1AuIfYcA4;PPSzV?L7029E56{W-!e4MPk*Si__5t{t3;=0sdtzy< z?DTUEzug=BS?Y4WPk;}oYN0$)*a?aOhnk#})I%8i;S<(Ho0?SP_o=BV3CptXmX@l; z!MIEry6E8mB1p%(E)Z+|OTW$Z-PhH@m%!jg`T0%s4{ z22p5Hk+1+)fzH@4uk`W8Mpvf*K7B!1%hS2%787R)YMXb)F3PwB${hs-}@Nv*>AEX2NF5(!l}lLQY@tyf~r!Lo55dVJ}5s8}0B= z3{51C`B-MbrA#05Tj0%+x_~lQ^liKb?K=k#j}LrL&@G}D1M2^R%Fj4-2$QGkYGR;| zE${DO5oUt?nKqzZAQH#mF_LTiFv+ikRc{8ynXt9XJ(j1Me8fkhbP_X!^&SUX8 zur?Uyz-Kh$G(FLll*G{TPxCx7%wC)8>Z)1ik=0?8Q{$*DyyyIvyP(CqoZ;lAS2Bar zg=xx3jF3l05ME(2U~PnRqZhU+*cZO7S>QHgxVW7Mu{!s9%xoR+@1O`&f;f(un&L9t;F41AyX+%{IM+d^T-UITIpi+%aNx6` zjX=dje+dXyG=;ZWzpO~KMVva*9rq*)_9l*wW3jQ^4%(+q-770w#CyVJ1uvBLrY4ac zJJ|GCsTLYs-2EqC9$gGo)7NL4>n=@B#;3+BIjpem>({UN>_3}Jm>6eA<>g_-yXo7# zz0|dP(I)_EVpRrb3YV;dnX2k4qfU^Ym;_-DMlhllgO0k=@9LvzqH4U;0F^x5D&86-tOvDMdSO|1Ch)}W-Mca5Ro;%n>kNP{AX$uzy-C+f-XDJr{1#y7$5}LQPWk_h zrtqx<_TQuzhS?L_f)8Wg1;qB_Q<1O)2)=Qn(^GDXh|3s%<-uK5?-4FCK>-kH+ci6l2fpx}V!^2ZOUX&q{s zs>or#Y#CV$DoUC(OmDuH*J!)HeY$Kq+69i;WLTyxgoOYFF|Tz!n!QJ<3Jv%M$>U0B z4Jb~H8-omyIJ~)_a{$+eQR@E-L^b>hiFMnK+(Psa#u}Itz%f65A?j#sir3`F z1Ek2@TnVrH8sgD;aV;1FcPprnaIuIaI~keHJ5SYM@>cPZ(>8gXzm?)lKP#9qENnrr z55VciPPrnW@8TQ;zt-1sb+Q6~fn!-s4QXqd_%CJQe=qFyw8JtDR+Z~Ft~$~~YIv83(L8u<8LuS9~n!!v$WZytzUJ$j`ey)&rbwhJe|SQGh99X2e|E#@Q5(7@u2kb zw;UaLr@A>nbnU~=oeV<1j2AUKw7C2mx%S?)0MYXV2_}BGK@wna%<);q#J6l6bN9Z> zQc2TQt?YPR3*Uq;zk2tt=&FC|iW^Fg3JK>j45sI`u%FDs$%!}?(dg%#VkT$|s}@zy z{|P#-0yBSH_Sl2tmkSF$>Rm9#9kxIX)oPwZ1tPXIPMy-%)m^t?gB<49?h)_-1IY{@ zkcU`(+`G3M)_rq*)95f!sm&i(<+59i5#Y_ut<9>V-2T^RbZL&I1_lg@wiQPdkl{qNwNf;e0+U(zzO@gq@rx3_4dNk=7zmh)Y(WU5?uWiN&Rh(n7uN8ZyPV9|DUkS-;EV@BNyiqmoi zM#fkL5AhQ1bLXT~NSLSTnOccKT?AD;#r>{hK=HoQE+d_P{?Wk6c6 z@x+r9yb!Ta&a!_b@8QGr%uIpErwOuPYC0}U5%W96IbNRWyHNRHD+mSqsyPifOME1+ zpx_MG8I%Ha15B0hX2bqvUMBb;0K+R?K`^*Lk8{BouU@4joVT$w_r47#fLo0o#mJ0T zS5=+&@(MD$&3mU!YYq+_TOw*<{jwdmi48iQT zr_-}=3qV!C;j5sVhYRuGrDVw4gh z5I2pzcS_l@bvae%l5Pt{^W@uWT?$X`mPA34Zom92{5= zOa%%`PDbiNo$uh0(;NK|ZJA$G)Y0DV0Yw^Eb2wYRyV@KG3v(!xUaZPyCvz(K)hFlX zj(z@I$Fsv(Nq<#hqkPnEw$Cd4AaFJI4#cv$bD|}}!Xnt7>92LrsKln!wl>oQ7@}0U zd^SnVt!EsE&lRXZ;9XcJmh{5C= zhhL}YwWRcPsKDLX1;;{kU8uJTPV6oUPwU}pbG_lT-A4BF27g3@)_|bIubJ8$_fjHz zim4KFIe}ffT)<{{%|5h zing-p85xf;nMR&5CZ?Lrv=}vA2nfOGqYiiMckFq5-<|a*20Uj+=xsbF;WixX+h%k2 ztiCC;3JFgpyg4w=*WV5&s6WH4rGDLwo2apNE&PE=$RYKGRE~3kJGO?-IX)GSD-=Kb zj7=tQ8J>-AyJpc`$#=%%uVC_mPyV@GGBP=tnXGvp`N=vZC#yJFSiWM2jqzwLRz=&} zjb0olZRj)HltE#=?&qg+;ewn(qEE*WO~3r!cnw?A3{rPX$f0q*wwyv%o1SENTB`+f zPhmuV9|akaGWU$~M!0d{<9_=?hJ>~be3)6Or-5c?`^`)AJVo?)-2nUD|cFy-{v`K^? zKr{sFv`r;7z)-!ti%9k4x3n}bIC~7{IG9aC80*;kq}Zvi0#jd-NkDKgD6aPau~>VA z_wMI`f$AlRyPa?8Tg{p|UMB48dioUR1&?4@1V2zkMT|rz=Gjw_S3a(?f8;vD+kXI9 zBc4GqZTSu_qsX3ns)oh4ZtVw%0;KG-{LE@%Y2R((`3ZBlt$wD;qDS-;W@!ql-oO-i zjDSLnif$a>+M&$iP)!weT@KOYVGWHsaK4CPe}c5UaP~G&4`q6>R(^;6@WYB#Cg0ro z#D+(-HIvZ*#xa#qWLBEPWSR>*{Qg@Q~;|9uQM{NKFmH5!6#hbdmh!GYbg! zyaW0XhdG?*K$s92cNeSSNgfjxcKqzw9fHLdF!2OE6NGjV(p)$lP9h;3Q>REnhz;Yz z!~2GYx}ZseKG| zhJ41$>kP+%Tu|>opCSF%_siP@SSSx)MrsSpZk}zlYx%8e7_IClWJH$|yvXFu&Z*jS zK>-1nt>Ze(e`bhEai1igyTSG%b~lv4WFXLYtApz3?L41QR?+wULZpCtPJRRv^}3+} zZw2|?_U@Y#Q9FN}Q=PXbR7|sk?yj1KpGBs7e32tuQ0|o#j zoIVJaZhMpU>&7p~-M78rYTr=yYYyaWBj&$u0lSFl5KN`ALzrK=HYzD8T`DP=!#sZ7 zZn6nx%@AWg{vr|O#=#Z9)3!b!I2`G_)*>>lO8*4HR@1#hsvtIq4Mt2A>25}e)Jk2+ zRO4y+3A{Syo&airdL1zrp!+Bdx!*3#76D0wyCqlB1%$HvPtcZp8V16IVuafsZne)Y zRu2GEnPzgse44-f_hPrg`@*6M3UMikrOx-<7>gX!@9|_XRl@0_ zz(eJ3a>t)h)r&Q~B@j@;r~i3krQ{7N)k;};`GteUX4=h@n5lOaU1_ZE98yZY>UMOG zQ}%K)uTpdrZ2S>hh)1aKc`s1R8b-$NE}QqB*R{0#LG#K1$U|4|o^JY#a*57!C2jXT zA0DIsoLnKxg46vBC|Fp^BZ(CgUrc=R`d}z&) zU5_t-s3ND`{d&dr$ScIS0v-T3FEO3Q@cZ{{%VWm~JyL8;%pL^=Ag1k{Tt9||HM6Jw zHN(q(KQ^}CchNh4>MsZov$TlsVT|nCG4v2tw%!u0-aJW=cB4JdduOd3$8XMs>SnfX zwh1R&B1l4o1obkW$kTTBoxXj>m66u^_Oa<|k}#y4?mVN{3{x;=7SOcH!w@h;8>yy|x--ofRsc9ER-6%Mi(7`w&xSR41sL$@% z7`w8YV4{IOvw9h7>6$e`P?xY~2tBH#Cnv8hsz)!FcsWE!QZmd(Lq|NC$R2_1ABu?; z*BO`uATfpre-#%;IEBZ#bLqLcgN`7`2oNzbxOMARNGKs9Lb4hRBMC8Lt*#!BkkAWJPENrhw$+ClDv<{mu$Gf* zTro-?%$jQh2V78J-@S z8|WZqY5Gzk_Xm$gF``0|Vgg&P;@<6wm+F?0x@<>Og^Rsd1Gh!uem0KkZ?;jS?qtX| z^kU{4HVQJ_#pD8)uGkbP8uB1R2W5czg$oE_Ojw-cxp#+nc;az?YX`=mX+qfbBh2Qn zeq*G{v;H347zS_=U3-eDa_hEj7}Mg>&&*DUVHUV2rubGq-Fk^rrL$dX<*HT8f1XrT zNm z&1j(WLXL80n%wjmss&S1(_Kt?pratB@wdV_79x{ct(ZOMh?q@}{!X zT0Q0KHtDUeX=CV*=I`j(r{!zUb-r7X6M^XLXIi}>nE+116kN?~*VHgL2R(h@0Eh)y zg*PaS_4V2VTBc=?q+*IVH#;kCTCfAgdd0=ZlHEMNjlR@|aP7g`)}w3&SPMXBjR;{> zSqy@3%Rw&<$bQgwh{Fp3gN2A%X!S4@>X_R(yj=u5L-$onvt8AZ>S;O<8ln(DwGDej zr?*On57TQkpZGjBFmU?#@w=qMet`xh3Q@#s5q|BGj^+}{CZEHr@4TlcSo0+u7?9Uv z&0rdwIm$bFnSb7{lEf;!-p8n5G#! z-&PK1DOQN0Kb>(lzsBY8_JY`Ice%>JjsVcd`C4z~1AflGY82IN7T0`auX7U&m54fc z6J>(~3k37rpgBK{>f5{=f*|7QNB^qNdqB78vf3V-<1qqb)#uRX$1y8wZDT>Ul96 z?rl=pA7snZ)77oC25ji3ESyi9ILEXUn3S+&$S|;q8m4JdYp!?4YfyF?80z%P-D5Wu zqjZIB;!uoQ;%lcR*!OI&YB}~Ib$v-EW;p(9dExt9FOljuC>_=L5ziI+{Btm$d%y}T z2uc!TAPfMYsYk!Vp-_(29k&60IG+u93Eo_`z`u@~a_7GaI`f45YmkUwO1gcF`R06>UD zy$C5BUQt+5y?2~?bwmOlm*)z(gaZTr4sGs#S=tyrBn+VNPiQFJKJxFFt4=J5EDyCN z3f&L0Fb`}@Bptk;q6o+hQ!2~6Gruk!O?00!+9*yvVfsjcT7OsNw(VT#&U`PVj6ZHP zbwgVOw%-RfFof!7?_Ruv)%SexjN=eSqeHs*DfBFK^s82_0=NU)iO-KI3tZiV3O%up zf$jptqbCk3M97%D@`8?I0dnNP`s2Tt%2>`vm??3tZkeGx0fhg64FWUJifZ{Uk{ zm&_JWcc}OWe3nu9jWNni@P-7HuNEd%-HB9fAl_~cu*za_F{o`&)I7r%?CK(9tBeiH*Vudg!!#_n zZ6}i+g0^uAqrb-t@mY0sy7&EqC9^QyBC)w4GVCImLd?0oOYmN2;w(0%&h)FY$Y1R| zcz0f7b@38?e(V!YncHU+;;w*bhG-B{8)!G+laG0YBDp_Ck7B@C`R{0&Vb_ zayMm7I)M5kc&t5$iToj7F}d#n`ZBq)u;A?#SiHK4bX_ea|T_K`E(lAFmyX ziV0p*2htco7Tmag9pke*PzS;85MTo_yiJ~dy79Hv>?p5Z5z(0sz;SD71$X|&-(rR7 zDc)a1jNW_n!T#&Ac6F#c_s^Y4#}q98oC5>h7Cva}@CrePVlZ=9{Qu%Cd6KZab3B}b zaZr|{&z{aXtY)OE`(-#5nn+qBzOjVG6D}5(-y~n)(SvY3d}7%XI*f-Q&|AQylEq%? z%YG8wB|}MMd_#O4od9X_@iEEeN~SP5x5nqgj)}6^Du+L$l`B`SEc)+EG#bg!qcupUjoX29gZv6b-#seYBrg!T8z)XQFm5uyp zxkrF>e~2K9uSUOVn>s5Ne?LJ&wLL_2^>7zA`_z}dgZ@@v(M`+Ve_IsHjKARfIY>J8+Aa1p<)i4dAe zjBW{f^vPPx-<6wPv2d3%kk=*tm${Tl3y%3eDfJ9Z%dpb|#S%Ls2A0s^N_NryV{k>8 zK9VNH=PH_hBek;*vsDxi6S!u+evK%~n1xU0sOC^P{uDXdkNyNm%GapEw$SQ=YQe5R z0c_&5no%}Q4qZ)3>+Ce48q$xLBs1#>tDTOl(b5wS?3Q<~u2NGM*3I6jNw0rPhtz^O z9;8zU)O?nWxL-(CPbrhoIl!3?^>KW1vY&Tll-f02Ot+Gqb=TFe$Zj>S{$?Piy*yUt zvTj-9vH^(h9zA%l=i+=(T}A7(IJNH}eR!S9yJyT#baC2@5dMxBvs^*u1tc2i+MS)p ziSUp5H#BlYX66u<{&3{MV;*NF$k1wg!cB|Rf_1f)-(CL>YOH+u;^v21-aWVGIs={% z=pPFX&c)tvpu*4HEnXE(^yL_a-x-A6>i7LwIgjR{LnjmqmdX|un^j1|I*7xnb+jM!IsAY0l z#`M;^-fYtL%c+yQ6^uEPqdjFi;thbLFh z4PqgYQXgeDgT>~li3tpgWMtYfV6%$B7U^#wd+mr=mDl9y@`V1y+(!wNMsn;lgTWcJ zCvaHrO+H|=vN$(z_zT6El61(1o2sGg zb5mDJt64GMN2kQ9B6VlqI#FK;oWU`ljU-^dRwf%4*PgQ-lJ1WmK5S}h!{SBoAJV0>9$i#JLpfyk+jE~(*teE=IJ!fq zb;T#AnCGC7{%xGTP=#TN5%|XKpCE*-!VLuC;%sq`5-L<~F3WgS8S$L7VViO@ZKI+x zyIrfD`p>U1 zY@p7g?Er;~rZ^K+%eHN&K|*jxWhEycWKORcXIBk#j;tBH-1a#~OfENYFN00bFBfMh zE9xX){2K`LR%|*lKs-GINrsyg8Uw?o-OND6;&g*X>kU{bkkk0VfdkQN;OMM9nGXkS zvquRDM2rT$ef1)|3z4HMfT8HL4%i-OrQBnEB(`ovDOAe9nn0d{R6ICOJ)R}>6&NF_(t_c1NE#1tn)=~MtActgO z4f|_N*S{y{_T)q<>@D6DMSAsEgVL6sWt@2^-N2tA@uy6$X8iSF;l;(7L4q6tqdPl$ zb4^1{&2b^Dzk@9A>F#dXe0pF!pX&f+g6{J7kK|6HR+$5R!Zw}1D9`k-u!Xm=ZA;o% z*_=2)vy9AiHIudTq%^m}mlMDPcM%K;3E+9`sDM?4b_tHN50}*ci}}Vm(+wLpc3~X> zgH*5kq?-Ri&}J@;6CH0aA-94ir8B>HDk&Da>auDH$LAkK?VfoQ#Y8R5_<3@RXeDLrezXO46f)A&S@hsC^zVrY zr%U=6EaVaHBrG8j8W50AqJ0n8A(YlSP*@Sl&zHft30m!6<-;2s`Yo|cELdeT{uo* zY)J+r2~YPN4X#U1ON&wT@dWGv9SjBH_l5&&qKG+1U=kF98~krelV73Hu8&eZZ>nKK`yu;=i-nB(o%NEYnskX`IwZW1x)tF$;eal;BkVDY^@OcW|>JWnH=% zuJ-VfcJ-vKjS5-bIg5#Nho5SCETb+bV~W@OKZ2h Font: + def __init__(self, preferred_family: Optional[BundledFont] = None): """ - Create a scaled version of a font for layout calculations. + Initialize font family override. + + Args: + preferred_family: Preferred bundled font family (None = use original fonts) + """ + self.preferred_family = preferred_family + + def override_font(self, font: Font) -> Font: + """ + Create a new font with the preferred family while preserving other attributes. Args: font: Original font object - scale_factor: Scaling factor (1.0 = no change, 2.0 = double size, etc.) Returns: - New Font object with scaled size + Font with overridden family, or original if no override is set """ - if scale_factor == 1.0: + if self.preferred_family is None: return font - scaled_size = max(1, int(font.font_size * scale_factor)) + # Get the appropriate font path for the preferred family + # preserving the original font's weight and style + new_font_path = get_bundled_font_path( + family=self.preferred_family, + weight=font.weight, + style=font.style + ) + # If we couldn't find a matching font, fall back to original + if new_font_path is None: + return font + + # Create a new font with the overridden path return Font( - font_path=font._font_path, - font_size=scaled_size, + font_path=new_font_path, + font_size=font.font_size, colour=font.colour, weight=font.weight, style=font.style, @@ -216,6 +235,49 @@ class FontScaler: min_hyphenation_width=font.min_hyphenation_width ) + +class FontScaler: + """ + Handles font scaling operations for ereader font size adjustments. + Applies scaling at layout/render time while preserving original font objects. + """ + + @staticmethod + def scale_font(font: Font, scale_factor: float, family_override: Optional[FontFamilyOverride] = None) -> Font: + """ + Create a scaled version of a font for layout calculations. + + Args: + font: Original font object + scale_factor: Scaling factor (1.0 = no change, 2.0 = double size, etc.) + family_override: Optional font family override + + Returns: + New Font object with scaled size and optional family override + """ + # Apply family override first if specified + working_font = font + if family_override is not None: + working_font = family_override.override_font(font) + + # Then apply scaling + if scale_factor == 1.0: + return working_font + + scaled_size = max(1, int(working_font.font_size * scale_factor)) + + return Font( + font_path=working_font._font_path, + font_size=scaled_size, + colour=working_font.colour, + weight=working_font.weight, + style=working_font.style, + decoration=working_font.decoration, + background=working_font.background, + language=working_font.language, + min_hyphenation_width=working_font.min_hyphenation_width + ) + @staticmethod def scale_word_spacing(spacing: Tuple[int, int], scale_factor: float) -> Tuple[int, int]: @@ -242,12 +304,14 @@ class BidirectionalLayouter: page_size: Tuple[int, int] = (800, 600), - alignment_override=None): + alignment_override=None, + font_family_override: Optional[FontFamilyOverride] = None): self.blocks = blocks self.page_style = page_style self.page_size = page_size self.chapter_navigator = ChapterNavigator(blocks) self.alignment_override = alignment_override + self.font_family_override = font_family_override def render_page_forward(self, position: RenderingPosition, font_scale: float = 1.0) -> Tuple[Page, RenderingPosition]: @@ -401,14 +465,15 @@ class BidirectionalLayouter: return final_page, final_start def _scale_block_fonts(self, block: Block, font_scale: float) -> Block: - """Apply font scaling to all fonts in a block""" - if font_scale == 1.0: + """Apply font scaling and font family override to all fonts in a block""" + # Check if we need to do any transformation + if font_scale == 1.0 and self.font_family_override is None: return block # This is a simplified implementation # In practice, we'd need to handle each block type appropriately if isinstance(block, (Paragraph, Heading)): - scaled_block_style = FontScaler.scale_font(block.style, font_scale) + scaled_block_style = FontScaler.scale_font(block.style, font_scale, self.font_family_override) if isinstance(block, Heading): scaled_block = Heading(block.level, scaled_block_style) else: @@ -419,7 +484,7 @@ class BidirectionalLayouter: if isinstance(word, Word): scaled_word = Word( word.text, FontScaler.scale_font( - word.style, font_scale)) + word.style, font_scale, self.font_family_override)) scaled_block.add_word(scaled_word) return scaled_block diff --git a/pyWebLayout/layout/ereader_manager.py b/pyWebLayout/layout/ereader_manager.py index 316431b..8c25e1b 100644 --- a/pyWebLayout/layout/ereader_manager.py +++ b/pyWebLayout/layout/ereader_manager.py @@ -17,6 +17,7 @@ from pyWebLayout.abstract.block import Block, HeadingLevel, Image, BlockType from pyWebLayout.concrete.page import Page from pyWebLayout.concrete.image import RenderableImage from pyWebLayout.style.page_style import PageStyle +from pyWebLayout.style.fonts import BundledFont from pyWebLayout.layout.document_layouter import image_layouter @@ -154,6 +155,7 @@ class EreaderLayoutManager: Features: - Sub-second page rendering with intelligent buffering - Font scaling support + - Dynamic font family switching (Sans, Serif, Monospace) - Chapter navigation - Bookmark management - Position persistence @@ -550,6 +552,43 @@ class EreaderLayoutManager: """Get the current font scale""" return self.font_scale + def set_font_family(self, family: Optional[BundledFont]) -> Page: + """ + Change the font family and re-render current page. + + Switches all text in the document to use the specified bundled font family + while preserving font weights, styles, sizes, and other attributes. + Clears page history and cache since font changes invalidate all cached positions. + + Args: + family: Bundled font family to use (SANS, SERIF, MONOSPACE, or None for original fonts) + + Returns: + Re-rendered page with new font family + + Example: + >>> from pyWebLayout.style.fonts import BundledFont + >>> manager.set_font_family(BundledFont.SERIF) # Switch to serif + >>> manager.set_font_family(BundledFont.SANS) # Switch to sans + >>> manager.set_font_family(None) # Restore original fonts + """ + # Update the renderer's font family + self.renderer.set_font_family(family) + + # Clear history since font changes invalidate all cached positions + self._clear_history() + + return self.get_current_page() + + def get_font_family(self) -> Optional[BundledFont]: + """ + Get the current font family override. + + Returns: + Current font family (SANS, SERIF, MONOSPACE) or None if using original fonts + """ + return self.renderer.get_font_family() + def increase_line_spacing(self, amount: int = 2) -> Page: """ Increase line spacing and re-render current page. @@ -787,6 +826,7 @@ class EreaderLayoutManager: Dictionary with position details """ current_chapter = self.get_current_chapter() + font_family = self.get_font_family() return { 'position': self.current_position.to_dict(), @@ -799,6 +839,7 @@ class EreaderLayoutManager: }, 'progress': self.get_reading_progress(), 'font_scale': self.font_scale, + 'font_family': font_family.value if font_family else None, 'page_size': self.page_size } diff --git a/pyWebLayout/layout/page_buffer.py b/pyWebLayout/layout/page_buffer.py index c5b69f2..0b95672 100644 --- a/pyWebLayout/layout/page_buffer.py +++ b/pyWebLayout/layout/page_buffer.py @@ -12,31 +12,36 @@ from concurrent.futures import ProcessPoolExecutor, Future import threading import pickle -from .ereader_layout import RenderingPosition, BidirectionalLayouter +from .ereader_layout import RenderingPosition, BidirectionalLayouter, FontFamilyOverride from pyWebLayout.concrete.page import Page from pyWebLayout.abstract.block import Block from pyWebLayout.style.page_style import PageStyle +from pyWebLayout.style.fonts import BundledFont def _render_page_worker(args: Tuple[List[Block], PageStyle, RenderingPosition, float, - bool]) -> Tuple[RenderingPosition, + bool, + Optional[BundledFont]]) -> Tuple[RenderingPosition, bytes, RenderingPosition]: """ Worker function for multiprocess page rendering. Args: - args: Tuple of (blocks, page_style, position, font_scale, is_backward) + args: Tuple of (blocks, page_style, position, font_scale, is_backward, font_family) Returns: Tuple of (original_position, pickled_page, next_position) """ - blocks, page_style, position, font_scale, is_backward = args + blocks, page_style, position, font_scale, is_backward, font_family = args - layouter = BidirectionalLayouter(blocks, page_style) + # Create font family override if specified + font_family_override = FontFamilyOverride(font_family) if font_family else None + + layouter = BidirectionalLayouter(blocks, page_style, font_family_override=font_family_override) if is_backward: page, next_pos = layouter.render_page_backward(position, font_scale) @@ -85,12 +90,14 @@ class PageBuffer: self.blocks: Optional[List[Block]] = None self.page_style: Optional[PageStyle] = None self.current_font_scale: float = 1.0 + self.current_font_family: Optional[BundledFont] = None def initialize( self, blocks: List[Block], page_style: PageStyle, - font_scale: float = 1.0): + font_scale: float = 1.0, + font_family: Optional[BundledFont] = None): """ Initialize the buffer with document blocks and page style. @@ -98,10 +105,12 @@ class PageBuffer: blocks: Document blocks to render page_style: Page styling configuration font_scale: Current font scaling factor + font_family: Optional font family override """ self.blocks = blocks self.page_style = page_style self.current_font_scale = font_scale + self.current_font_family = font_family # Start the process pool if self.executor is None: @@ -207,7 +216,8 @@ class PageBuffer: self.page_style, current_pos, self.current_font_scale, - False) + False, + self.current_font_family) future = self.executor.submit(_render_page_worker, args) self.pending_renders[current_pos] = future @@ -234,7 +244,8 @@ class PageBuffer: self.page_style, current_pos, self.current_font_scale, - True) + True, + self.current_font_family) future = self.executor.submit(_render_page_worker, args) self.pending_renders[current_pos] = future @@ -296,6 +307,17 @@ class PageBuffer: self.current_font_scale = font_scale self.invalidate_all() + def set_font_family(self, font_family: Optional[BundledFont]): + """ + Update font family and invalidate cache. + + Args: + font_family: New font family (None = use original fonts) + """ + if font_family != self.current_font_family: + self.current_font_family = font_family + self.invalidate_all() + def get_cache_stats(self) -> Dict[str, Any]: """Get cache statistics for debugging/monitoring""" return { @@ -304,7 +326,8 @@ class PageBuffer: 'pending_renders': len(self.pending_renders), 'position_mappings': len(self.position_map), 'reverse_position_mappings': len(self.reverse_position_map), - 'current_font_scale': self.current_font_scale + 'current_font_scale': self.current_font_scale, + 'current_font_family': self.current_font_family.value if self.current_font_family else None } def shutdown(self): @@ -338,7 +361,8 @@ class BufferedPageRenderer: buffer_size: int = 5, page_size: Tuple[int, int] = (800, - 600)): + 600), + font_family: Optional[BundledFont] = None): """ Initialize the buffered renderer. @@ -347,13 +371,21 @@ class BufferedPageRenderer: page_style: Page styling configuration buffer_size: Number of pages to cache in each direction page_size: Page size (width, height) in pixels + font_family: Optional font family override """ - self.layouter = BidirectionalLayouter(blocks, page_style, page_size) + # Create font family override if specified + font_family_override = FontFamilyOverride(font_family) if font_family else None + + self.layouter = BidirectionalLayouter(blocks, page_style, page_size, font_family_override=font_family_override) self.buffer = PageBuffer(buffer_size) - self.buffer.initialize(blocks, page_style) + self.buffer.initialize(blocks, page_style, font_family=font_family) + self.page_size = page_size + self.blocks = blocks + self.page_style = page_style self.current_position = RenderingPosition() self.font_scale = 1.0 + self.font_family = font_family def render_page(self, position: RenderingPosition, font_scale: float = 1.0) -> Tuple[Page, RenderingPosition]: @@ -453,6 +485,32 @@ class BufferedPageRenderer: return page, start_pos + def set_font_family(self, font_family: Optional[BundledFont]): + """ + Change the font family and invalidate cache. + + Args: + font_family: New font family (None = use original fonts) + """ + if font_family != self.font_family: + self.font_family = font_family + + # Update buffer + self.buffer.set_font_family(font_family) + + # Recreate layouter with new font family override + font_family_override = FontFamilyOverride(font_family) if font_family else None + self.layouter = BidirectionalLayouter( + self.blocks, + self.page_style, + self.page_size, + font_family_override=font_family_override + ) + + def get_font_family(self) -> Optional[BundledFont]: + """Get the current font family override""" + return self.font_family + def get_cache_stats(self) -> Dict[str, Any]: """Get cache statistics""" return self.buffer.get_cache_stats()