From 6ec2972f14930693e6439b2ae16fa2fbfd344d46 Mon Sep 17 00:00:00 2001 From: Gitlab CI Bot Date: Mon, 11 Nov 2024 12:33:35 +0000 Subject: [PATCH] Auto commit 5721516c4699682a51ff08dfa3f126fec2097158 --- README.zh.md | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++ icon.png | Bin 0 -> 21433 bytes 2 files changed, 109 insertions(+) create mode 100644 README.zh.md create mode 100644 icon.png diff --git a/README.zh.md b/README.zh.md new file mode 100644 index 0000000..d458825 --- /dev/null +++ b/README.zh.md @@ -0,0 +1,109 @@ +# mmarked + +[![npm version](https://badge.fury.io/js/%40mathcrowd%2Fmmarked.svg)](https://badge.fury.io/js/%40mathcrowd%2Fmmarked) +[![License: Custom](https://img.shields.io/badge/License-Custom-yellow.svg)](https://creativecommons.org/licenses/by-nc/4.0) + +![icon.png](./icon.png) + +[English](./README.md) + +这是一个功能强大的 TypeScript 库,用于渲染带有 LaTeX 支持的自定义 Markdown 语法,专为教育领域中的数学可视化而设计 + +## 🌟 功能特性 + +- ✅ **完整的 CommonMark 语法支持:** 与 CommonMark 标准完全兼容 +- 🔢 **脚注块:** 支持自动编号的脚注,并带有易于引用的链接 +- 📘 **定理样式块:** 支持以标题、自动编号和引用链接的形式呈现数学定理、引理和例子 +- 🖼️ **图像缩放功能:** 使用简单的语法可自定义渲染图像和视频 +- 🔍 **隐藏/显示解决方案块:** 带有切换按钮的解决方案块,轻松控制可见性 +- 🧮 **TeX 转 SVG:** 将 TeX 方程式转换为矢量图形,实现高质量渲染 +- 🔗 **与现有系统轻松集成:** 支持服务器端和浏览器端实现 + +## 🚀 快速入门 + +### 编辑器集成 + +在 VSCode 中使用 mmarked: https://marketplace.visualstudio.com/items?itemName=MCLab.mmarked +在 Logseq 中使用 mmarked: https://github.com/mathedu4all/mmarked-logseq-extension + +### 服务器端集成 + +#### 安装 + +```bash +npm install @mathcrowd/mmarked mathjax-full highlight.js +``` + +#### 基本用法 + +```typescript +import { tex2svg, renderMarkdown } from '@mathcrowd/mmarked' + +// 将 TeX 转换为 SVG +const svg = tex2svg('$x^2$') + +// 将 Markdown 渲染为 HTML +const html = renderMarkdown('### 标题').parsed +``` + +### 浏览器端集成 + +```html + + + + + 在浏览器中使用 Marked + + +
+ + + + +``` + +## 📚 API 参考 + +| 函数 | 描述 | +|----------|-------------| +| `tex2svg(tex: string): string` | 将 TeX 转换为 HTML 格式的 SVG | +| `renderMarkdown(markdown: string): {parsed: string, lexed: Token[], time: number}` | 将 Markdown 渲染为 HTML | +| `renderMarkdownCompact(markdown: string): {parsed: string, lexed: Token[], time: number}` | 将 Markdown 渲染为 HTML,不包含 `

` 标签 | + +⚠️ **重要提示:** 始终使用 [DOMPurify](https://github.com/cure53/DOMPurify) 清洁输出的 HTML,以防止 XSS 攻击 + +## 📖 文档 + +详细的中文文档请访问我们的 [产品页面](https://lab.mathcrowd.cn/mmarked) + +## 🎮 演示 + +您可以在这里尝试我们的交互式演示: [https://mathedu4all.github.io/mmarked/demo/](https://mathedu4all.github.io/mmarked/demo/) + +## 👥 关于 Mathcrowd + +Mathcrowd 是一家由经验丰富的独立开发者和数学教育工作者创办的创新型初创公司我们的目标是通过尖端技术革新中国的数学教育,为数学爱好者和自主学习者创造一个富有吸引力的在线社区,提供丰富、互动和可视化的学习内容 + +🌐 MCLab 官方网站: [https://lab.mathcrowd.cn](https://lab.mathcrowd.cn) +🌐 我们的在线数学社区: [https://www.mathcrowd.cn](https://www.mathcrowd.cn) +💬 加入我们的 Discord: [https://discord.gg/6VMUVA5Yq2](https://discord.gg/6VMUVA5Yq2) + +## 📄 许可证 + +请参见 [LICENSE](./LICENSE.md) + +如需商业用途,请联系 charles@mathcrowd.cn 获取许可证详情 + +## 🤝 贡献 + +我们欢迎各种形式的贡献!请查看我们的[贡献指南](CONTRIBUTING.md)了解更多详情 + +## 📞 支持 + +如有任何问题或问题,请在我们的 GitHub 仓库[提交 issue](https://github.com/mathedu4all/mathcrowd-marked-lib/issues) \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4dcd5c116048f976493484b6bb8cc8af24cc121e GIT binary patch literal 21433 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≦YoVCJ%rVxg!nT}Xrz4FkwE7hLIEZM`*(9Jx$EYZ)>= zQCC-L-T>CE0O5=og@uCK`d_|;ZReeL^j156ug@(<&S??cfIn{S>;uc9Blim9mHK3n zGLBNt0HzbAMuJ94Gh;wB)_9U8K3_tn8!$6*DMKymq6F#Gps#=ZYqa&~t%an~47FQ~eJc8zJlf9&xv$?W zVtsDQyXsJMy)@J=NMa8WWBU8FL!jM)4u6qnAt7?%2WaLX1|7=K*~h^80>>J zh2$n4f>{JgEE_U4MZUm79aV>%ggb4g+ z_iiJvsI&fcFESoP$A{IykAp&xC# ztxl_`GK08=@d_SA&Sb5oA|AwVZ6=WGO=-;*Py-XT`|(d`<&{>Jn3d~IPhKb)xj1fs zwESwg8IZc%S`P47agc6WHl(UQoS=@JRr*gL*^U|oG%i*PtTtrK(#vau^7~i1X!H6x zBHhvzZZvW;-1X-xPwh<4P9_iTv)_I+aPZ(jJK$;4X|;e@S6wud)BSff7v_c={Cxbx zzQ>-syQlVW0;SW52eLjlq9Ej31_rm)My#MNOiq2(b6%p$hIqw@?vcKLA0&@%O&E|i z4&HbMlSj?PChN00Q9r>Hp6!%shCI~pRc*tjL#(l_{6sfs>5(I8ryX}v z1hN|{*~AqE1tsKqaMz!&!#ScOfY$zn3+T1rc%(A^BHn%H9s2mAkDVR4R)u}1opz)J z7g{KvgQ+N4I-P5kDEFcoDcyDK0m3t!pDb6W09IG@Y;nV_HH?HL&Zd=2 zx(bmFo?S)}Q70d%5gr6F$h-<$PN~n)v%Q0UfBEI~>8GDLyUGNf(c5f8i!HH4ZXPub zzJeBDVqFvuR0>u@PUZ*UD##2YtUwCy_!G zuU>(A6_z^ylwaB0z<=rcJW4NsX)|ZdqTana=(iVLLK7!V6tZ~W?&Vuc)fgeIVeVXI^KqQ6t1*z4t7DiPxANc$ zGEooBleF1*1YyU)ira%$LuRZ^Lz&%-jTwZejIkOTobZY-x&WS{evuV%mH+h9Pw9-) zPNmK{v$+o`mFv~37aeo-(KKiXegqmR_fav_H57d|*oc_)I!i1uLVjH9zmf;f47^r4 z@kE+FZCaL4Wl5v-#AKKRYIgTALK^=ZtXHst_)k?re3|8zqiuimBPUbTHFr@@znmm4 z>JEF!^&y8IOoImw(g9GNs=M#}2i-UBUZH0(=So&e={lMLa!%G@U9DYD^i{#}v7I6x z#%w%qs$(dwTM9F-!Yw3d1T*dzMwpzA$Z*sol*{9=Gf;uDRZssQLx|5l`;5*!<8+$c zIg5K{r%isoyw9)pq4|d{ApLoV=JQE{pG>~K+G@1b)}tN4fnA;a(Z_WB2`9?0SX<1o z%4s{CiyuzJEgjzS`KLypqM#-;lp{z?zwH16W&{hMH{M!;LeNSI@h!kZrI@QTh@Jv9 zgXszMc?Psnd9?A6ano(L)4%`qZ=u*}#7Z-K_;A``hhNIiuxnfwEx?qC2d-4ZH!l+H zJ?O}zj-=kbdWYi7_=hX5pl6?djyq0wcyDyde2v_WSTaPsVABOaY59mE?gwgfv2v98 zVRUc2>nmuCf|rVBlPjM~lUZUI8P$YM-D;y5)2Gp?W5&?TSu=zJ8vfy_c=ug*qhZ5` zIhC@;C`-!_4cc^;qrfzUX=w1uxbemt)2Q`EaVPf&m)E3;lj!{4TqyKx&z&LX^&wO~ zfHmcjUa}qnHQXt=dO=N(L$@aq zIr6PPRNi&Zz4X{4k7aV2iVa$TZ}EHWwKo&o_Mn;CN+f)584c<`a3Gy{(n-{gPa!## za2szOF1_RunuMQ{m6-A`Fc&GFn$cJ&mgBxJ14xWKQaoM@upK$K|mu8)0!TWQw{*L#NIisHZ~X3U&Hr}Gp2XVX6O{NNVL?6Cdzw9K;0 zx22XG=?Kmp#!D}}NS9uIX=VwD6I;c0#fQv<6I(A#RTRtk z5mj5xU=xITyk2ZTVD_EvQWLpwetC8me3HvFHM5YfgnFF@D=3*B#4{snJV49i?51ttPGN;a*Hi6@1}Gs{3>eHn(SIFN1#@o?+C_+a za`0zlPHT;$wWM~3R4S&n2bpGWbk3elr=G&A=x3iY!SOO3n}Hwx;0N@L)mINLn9mjL z4w7)^opz!{hYeSP`N;G7&%gdj*ZlqO+<{*e7h*P2&XYto-Qo>h z%UFuRqp?0s&@x4J!Oq9Nl_ABa()mcpV?Dp-B9*HJS;IqOV!R)E^66*jwp(xGM8uv` zb%3)MKP_Vw6}??T*8>SjY}N2me((MEW0zEyqzbQ;owGaX%rnoRX}mqj{L9=7?Z#im z2ADR#s)De1e4?^M&LlmxO zpSLA9-F!0>ndbSWt;nvs1H|5x-KLXZW}jWmx^@*(cd!D$VxD zeTR#FN2ZeJE}+y3+h)`Ff?0gwS^qwL+=yGjc<|O+Z>2}Zk2h{PDsmk@f?K?6>SgK6 zMkt6BdCTO5njY#lBteT)>>jH0Wn=z?nCN%4T{7b)&eplbC`W@{f8!0h?4nD#nXlMT zk8kNX;&A=8jttG!)`T|!X>ua+gArcJe`me*glvg`wf&PRQ|Y7=Pr$xJdc}n#=I8$y z{=*f&rx#v)(VJvEH`kZS*|EU*U|K90027aGcmgSvRcMjD6xpR#>3j{u4w*jGRk|^j zC4pl^&wtgEo@|;Ld~IM;H0a~Wlj-8${Dw{Ii)_`(n{!rj=phG7@+id)-9@Mbz0sq$ zrd3y6MG0;k3mSf;dB$012t_YC9m^5-6@KhOFn>x!Xne@nISw^5GT?H$Qzp6!?_N-j zdai~jlPSiTpI@0dCvhtlmc9|oG%NBG*(_024|sle#TE4O%P)%`nSHKSSYZX)?k7LZ zPgb?*CV;RhF#p49~sGe?qB64UD>xN1Bpy%qp{gwXpuYVU#!V)7!&<;EP5_w!- zZ4!|%Z+cf)@vF4$w%h8qM2NUhnUDXUcFGugiPt`o5W3L+&)#kys* zs)G3|S5WBli@|Tl@W(7>h1g|G+Q8&}xjaEj;FyD_RR<&(l1c0ZMyt@EPF}UoKJ!fd ziHX6<3|&x@H`7^Lc?1|}$otkq4n2eh4Hy`x#OgVI{CK+hnrj@<=X34YOdZTEg4L6j94YoxqH}Eq4#1oE_Ps*1}(L=%y zCb{2)41qu^bs9@{4ws8B$y%O!z6rw$w~!UNKTo$_*B%{OiSQleUqi=-U`|T z<}6|(MW{stPwm26#u*}&DE{|l7PVCCg+ACm_2g4%&g@zF>CrPr+m0ShE3UMXBN~c6 z6aW@CCwxcgeg_<&Kc!-lN^8jt~~8m?wcQEXGOu0pLT zGy!yQf@U*um>a4YP-CSE7{}bR`D3qCEo7q>G(U7I+RSJXxsC=s{OH4U*IjqYIa0bh zIbhI0I)Ia_-Tx720C4->cv@K*l4XxQ_M}CJFA7RFjK4_o`h?f%f(y^f--imanY!AC zKSzw`JjK~FrG*3&`J$391o>tK5U1)-q!JdhxCBrF_DRxm)s%fFr}qNE=|Aq#V@kgYRZAndd{YE z&iOUH`|f+WI3R7G5Cdac{8{JUrpz>BsR{U`Gw}qaG9@0JVM8HR5%;?SHxqM<%iPdf z1(WO*A1SuP> zAyCH=}GoG@edSprE~Vn3JYT>!OG8 zdpljVT+#nd)<=;7K-OFIx`8(O&$G|cpa1wL=KvpE>FCwLd(r)=Zy)_2iMrw&b!}m9 zP`Z$lGF~}@HqhVI9OBgm{@o6BAJ8(q(Vmlnc;Hi?<9309zd1uQk5d4lGZHzC0#ySaw~Lv zY2@!CeOpx$wZRHa=c^MY(8U*BLY;Dg9Fc(^RbnrSKmA>pExMQ&SG{}np<|9cTE0yW zN$7L_?V4-p>1Un^<|;>RGSJ96%^}M5OKb(cv8ETUKVGz%+%~z@vjq=pfVGJ!t~oCG z3JPMvhpwV^r*nzm!z1daHUv4Je?=oy(#6S^6OJ|xU4`n#U$?mY^2_Msk3ZlZ6sm5N z6;@o4w)@FXXb%494YNbS3ILxr+hTKCamB9+ztMq7lP1xx&pwk^CZ;++MYC&r4G*ye z4@N2((&7#JrUZV^@o_+f>Ucwbg-_GAfAo+NF2G}QE|l*Ou&Yt9Hh*?#63XVL7=**d_gEx~r(Wmj5unPr)X zTOz(!s!cvey2tLjQ#-fKFNn>WHH*$T{dD^1yIq<(E1z7}m6%w}%e_d+C_ z`ii#ScicEw;^CEC>a|=T7V2pE79XltWuZzR31@_s(vqWadr1H+DeV|&F5L=L8~*s$ z_19lV6JC2IGi>$;4j4#>9dS6fTpIA zP+ybr6SYQnd~yWp+KlCzLp7WJgk%$CEhi`db12Z=+*#wcQiM%ss z%u(`<&xr{;bl>CB3%pcyJb?L@`B#KVS9=b9kD9=s)k`1d zk^jbvT301)E3y^_T63r-_>}R(&YgGO$*bUaT@_)}8O9ec?0>-i%+r%jJn>}e)w4qe zEm?5ezvK2h=+Va>k^NlymI-v%dFPP8Ydb&c0KVqiIGF_>oBJgkX2xd^+K!>7JGEEP z=I*6{sj(+`Uk1mr$J`v{e&!Z^9%(y59P_Ln(YuG-54iu?^l5bbaVNO%7}ZlJW6ZYp z+Uw9o7hOoJt@d?2!R{o32Va?Z{PD-imw@RuEY~}C;q*Gk)Wh7*IuPF2JZk;@=AK;<(H+MxK1ljkJ))5{}Gp>R7jB?A5a%~K^Nz} z5sS4N5_ruJk!S%j25BqhXtIK)ltcQc9eb^X!db|C6ibR^Cyd4|0%4r%n}0eo-_eImHX_1iv$JBAs=X_flTib*vt8U3HL|kXn0EqZzBo z`u>3KK~+{!NLWU!Dnl;jP|E305Xc}2T0U%wD-1NV9V5YyK!9u)DNcBiO}#Ww^56gdH{CpTtT>dPJ6^f0#*sTHm;LT?diT9|<$?-lQ3v3)QWJ^5$i>V~!LuyR z9`qiN178*qE&vXJY)zjM_S6$Yl0i`M)dwb)60Yf3mjRn*muvo?O4-m4JNaPuCtrnn zTs|xT@jdYP8<`(|gdc&5gN)oC@PYO9*YLCai;_- zzDIL9=g^sFpG6;k^da~13n*{+w!7d%3JDdtPri2^L?#z3s^I0puDAkBCu&cB)-2kD znxv`(f<34S`6jDT&S6gY&RA_oN;4DoYN^|hLZvXAl20Xf8mU3hDuo1Mf)DunpJ$zU zHcfo%EgfKF((K&RPd-UkU3DeruOH@mHs%@-Bq5O8`TD zY4Q}`3>B8D;KVXVA~n^!5=>EN9Ilq0RP8{TE?=OYu-L+ZS0?N+C%pEm5a1F%k9qUh zo9MoA_pmlkUu-HP_@!&`B9X!00ZG&K>sZkQwGMRE5yoK15TDDGpH;{bw5YlYFyom@ z2v+KHgZWdf>9V@MCjlTXIw8-cB{e>CT|qHOQ>IRq*G~9w7~Uj(_Q@x7%<;z&euY9g zQfSG!rtr0;R#1Jn46fpskI*asqPMt8$JHt1`eRGgmeY^~tuj}RNDAEqsSfgqEBq_J zY*Jv6u@nOjs)|r=b99BDZ-4CYwbxxs_uqfNP|iF5e0ud2`@T_!Ky|BjT0=^Ez8KU^ z6mX+xlICv)3_-_38NE3mX$3$Xy=L-RtVGCW7flo0dNVH|yL~u&^6emgmbQRQs%zpA z>Q1PQIy-04;YS=!FLPp^bMCp>=O>G9%oWFq@YI%hozY7e{Mg0eM|$f8X9LY+lc{i5 zYNWCNaK&0H_MjTy(^)>3*-p-=jG5=hp@a@&n zUlX3H)ZNF1t1OC?V}K4{P4@W+H;zh|Dk~0&{V$NFhA$GxJ=1}DCz8|9vYyuX<+M5o^g3u_J0qp;)$?1?3a<}0uguAmw?1H} ztF~%Lx+}h!7l7qr&daT`6{7@@ZDmH_&+X+1FE!KX7ehhX24lt?Nu!RCmS_S`NUS1} zh2{@f+oKhb3Pl-O;VpydK<$?pDcamb^=g)laYMGy9Ts4nINtN0|2|Thk^_a)b8eMQSfXR194}1ydRRr|=rR(se!)=b$&23~He1J^g zwU?lQrmT@8kZTd9&g#}~@vT^PI#D%KA6(ZQ2;HD#U+PIlN+8j_-A$QSMsMbI6;ggV zT6bLTD%hr6^JN!)jLb(gn#g$b@uwzjFR2Z&wq_pXE9l%riPcgwJb+}gpMaFEpawTA zKaSI82LD#n98lyJpcVNPn#h}(c?H&A7C(IQzZMdqh@T5&2z*@7)?Z_34do)L7<$7! zXcZE3Q&Pf=c&tqyDTly@?>$N*p~QgXES2jjG%($R>F{;=?Rf)@lpYHSnz<3&lS1%7 z9PQxpPc_lt0-g3|5+t!5<=l!0wAd*L-xq$0V%GEYWETbRsu>lcAhU%hepv=ox#feGcPm!PJt;0Xvx zQ%w+0HtgdA7nN}1kdoqycg3Aj%q?Z{e0{)%Ukq{E?>B)T5GR)U07)rWJpPrBvINcG zhFkPB0o9;7TKH}zf$w8YFVYU@lz7@0kzdWN2xz|FDF#jC%0;^XD6<00RpoOHK_qOy z=((DGzh|>VbC5?=kG1K$=_o8^Rw|>H7;G&;V+GQOE6yEjMx-JlYL<+;N9x4)AEgA1 z4Ru;^?vh`38BpLCpsPx|DpwB{8gU8$t}$ya<$!u z(`BZr6Eycv;rD&I0m^-6nMYPTzX+;ll&zi>Y@)8P8n{n>hsNe1Y{IFMg89|eQV!ur zvY0Pgmulf*e128Hii)~qO?B;Zq&PrJl{yF$G?V6oc<2f$AdWlp=v9g0WQ^AV-H61< zDWcMKrD7fO!GwzU7CM4eLTy_<1J*2;o|}M`Q~^AvJ`XsvsPI_^iHjT!eu7zDf=n>y z!(!maIfjW;uyhI03JQl(&NIy)idZtI#KV-lB6mKTMl^F>8JSkDN-)R$O-+TivR6+c z+eE=U#TRAU7L6P(GWngUz!5{Y1lm$)w^}MgRVLSjX>bY3!IY$^1Mpd4c$1b=q9&Kf z87xd%Gu@Mwk?f#+G31*%BFMvlYnRE*dw3K1yx>nYnl`*aa!OHBhO7^!%x&%X+<9`> zLu=e2d|8*EAo(SQUG>HK|msM z1mYlI4DrH$$5#zygc>RFr$-jA{;BKbEV5&Smkfdv4GCgf(ZPypR z2JboZ{f#3@!a7n2k7%D}vXCG+!55Du71RL)t(3v%>28^OfHuUlsM+=C`HRjGGl;tjX)-_JB@x_*FcP@o%d-uJiS1aT?Rkl-X;SXeWt%P8yPp^VR3Qs-d;H;`8$EJMYlcDO23LR7NB&?@uGd6zlt%^I%Orq*Oq_!$rSk$ zKUq|z@|<%`xQ{;zKHvQFNqZJ2>x}8srKH|HyZ=pLlExcr@*zBIyk>#|Rq6oerLegK zHDt})RMv70nYU8`{#@GAQ-Hgo-9hrAw(LBD_~PLUa6z4bVRa^ti_w89$5a;Q1m_Vi z?v&e2jw`2Gb=QDz%|v3FTFq=5lUrfrfL8)2v)}@DUPR2B@qrc*0;^Au*kS@|-dzHc@f za&gpU`E=A^FysW>4k4?n5D)A5Rd9luhPbqfNXB*b{g^+2uIL6-4>W0_Te8nBK(m!9 zG#meKL1G?EvNuLST#=YQJK6z*c0d+ZoO9_Ytqx3`yx`sl&u&4fKCvu)6Wh6Zh;pBrQnCpfbOf(~M0|LH~A?n8P zy@-<&=thFtRpKl4&7}iSA10rwx!8~9Jo9op`CQ<9s4V4Z@6kcMdiSM1efm1eyhdyO z0mc#LOwbXg><1|besn%Eq-YGY0hF-dJ?J2{AuPT~HT-N36C>84dW$c3p(B^|twVQ; zU%4FQm6hJ|0pnM{bnMH5Y+l^x*`p`@{)*qzQcI1bciwr2e!Sg}XxjAYa6Avj7lhcl zA3=+%0&(Xa`#f~$P+D^F5xms3$#XE4oupn^@RfQ^h#Kc3#%h5Tm<{OC z>FaZawiKM8=8lm}tQ`2Y)_wNbn}&X6e(w4FrmMLQ;o=D{wZsV8VAMu=VpaeiCbhF{ z4?giHoiIjf)#Y=!zD@CqfViU{DwoVX^MPQ9FWOab=Vw3t1#PkA4@#sMfq$Pb#H=`tgMK6s^T)QN z_P2d}fpBgIG1s6e{1W=hS+1W|KwRRCR|i?S}em|ezVu^hQ5mf;5V?%j)i{No?f zkG9!{W_RM(gxzp0z)pi!U;P`j-A{f-OE0r59dN(_tY>zn$NQ;h1Po}A6U@z#yq`Pn z_+zM}qnB{B=*&EaOod&ti%X%tYh-gO5ca+pzz6fg?noL{|EPCUoCjQR@{zt)!E&Oj zu$T#N-M9- zw?O?6a$WS|q&)Zhb7}CP!F+q~=}x-h%W$GYgdXVyhBcyv34cz2M+L7Ug3d-cGw9K9d_J->E%m2WXzAjL*}DH4?m1L+-Ejr zCE>B}e)qey$)=mSIhH%4;|*G7>80tALl2b;27o`w@2wYrNBK~xKMmQQ$d{LKAM$z| z<|2N%FE0>LIf!@$Hw5@6QsN@TU}H-2zw}HmNCvaG)8)XoOeC>;-wQ4o#er!)XNFuA z%W^G~bdu7R;aUJIE*`1*fb%UMSQb4xDy}0b-5i|xQsm?6Q?3gDt*F7JzdE9a<`7lP zi!h6RCLDF-k+jf43uD;n!GVjb0GTig?Yhg(wDgiAC5YzIZ1*&H%+W_uzrOv1*WkM? z>R3siUcKq8v(KXWIN61RgM=qzO)6mxEoMvfdwyX?F(-wxVo+O+8sRN(pNp5=XQJ1w`| z^0en(dr+q&Z0K*+;rgdP`x&kEt#3;Q4_88FzwnvRD&TFwZoBPF;~pGGH{Wy0UCSb4ZQv6&ywt?s79?mx3{;^31d#A zyYIV?F8}>y)R(s@7o2|{J@DXzbj!^*(_gQ?iaL6C$lNu-)HnOpXkG19mn509vHKpo z(E|_MPj~*~4m#)TGu^|Zj)?};(m)#xPR#!O=&(Z$pobs+Kf2@gJLu}G{z8Ab@=Ch> zj@#+p`|hP*{QT$Cr%xZ1aVB&41oZ=9T<<$;(M`A9Ko33iApQN?ztdG$T}8LtdMo!I zqC*ckL@r8MSj2a@qW6vf1p-_1lNjUKWB?&#F7a}s4Fp|+;1Z?)CTFay5Wz*lz3{@b zd_wM*pl`Ls=CsyYoHR^_7Qf(#2bxpHoJ0%EKUDt6>M5t4EC~)=b>TCHd-ar>UPzp$|U%K>Qgpcrfj{>n?QjEjQ9P*IbR0c>wk5-Ov3pUN(DHg|=Gh z#Vg1_UX4eLSd!;(4gL7XKc#{F`_kJJC(`4OKS7^O`%L(3GJ2u9+an+JAqlb6{oH>0 z?@vb`jn{4i=-KC62(oJOzup}kbo}wh(O<8*j=s6ZTGY31Up~LHX(q=A zzcRAWf(y|>ha5z=+%lGyTYedq#KORL5Bb*wV2~2cr^F{+L2Xbb)dWanuCPCXSTBAW zKjMhPY5I&=)RQN6$|x|<`(8r|^L4R>iv}xu0G7eY8Z>Ya zUG}@*)3?zv=(*Joz8H zFvqRXqAUZq*`}=YJh$P)7o#=5u_nDUX(H{mJL_FW&`06>YiY7JOGbj^p!&BIcwl45d_1SGK>vWo z_cq#~@!?1BH)hV7$vS5@-hO*xgD)7KLmU&98#1WDTLbZ*r`7oA!w(zltv`z6p}d26 zd@y|HqH`G3_{w~P8;?Emh{WN|H{WV3K5XH}0z8Mq4?nCijpq#f>tFwFEVIlqjs62T zhT>yBkGz0BxN*|SV|ZRO8nb54X^gw?zQ&3xuF&Y;zfYrIzdjuMzAWFbvHWsNH}1Ua zZnoLUv76r5{ukRf2FSS{$m8LhMvord;8kDF?FT%c%{Kdi#A(1l_J!j!i0uyIdenN~ zX}tW(OKf)*@AMjt88c@!MsK|hpL6DeUMms{SA071!ppg!*cca0d%#O%Nnk&V9ek23 zki0zLw$zKS{&UazH9hs@Q!@4|-a{_Wdr9_N7;#(Jb=TeGHi+M^K7+6DS6+Pumn<|1 zA07;5&YVR@@YDU|DU+$AS1;m3mj@;QjxMsua9(BhXWkBa@BR1aC>~d^p3ML7iiC+F zLx#}qyX`7JtAGEUcj=eE+@4-}Tk^KJw_Jbj*=Q%Sxi#23?uOPbdVO zm_k=JtY#NnZ~={f>@l!1BtRiR;sU**QMN)2-qP$rM;>)F_3qi5{{8H;w9PhK(_3%9 zC3g_zOn~()$ak8b^Ip8It(_)Jc$I#+!w&Li!ClzpAr!ZOiId);efItpz4``kq4=R~ zkKK2t-h3y*urLZ55^G(-d-I*4lXmCr&h2;HDbE_X>*(E1%lIe8(;mDPn>KBlqd=8B zIVB-Jxpr=5FWkLH_i0XpN%Gi9Q@ywLJ1 ztjK$*?KzM==;24l(_eW5FMCBE6M43WS3O9O=U;rDPCMl^@nMA(SEN0EwHKS}!Q(`S z@m6Bd;fwOEeHNW?!in_a3(skA#4*+fzonoL;Fj8;l~-Anw+#!*3BTfxf20?ldr>Yd zoP13}VU>c1x2yT#=8ZQdFhOZ+L60_f47{_qEy#Xc;?d+Q~Z7)eWx zT!u#QR%Q5NBRG*4rVl^My47@ zP?!&^9`;pm@Uiia@{`_`(q3nsb!ki92Vq}&@<}JjQ~qbuKBeQ1IZD1%08iWEtE?ib zPCt0iMt}Y@C((;9h^e3d?58wf&;VL*)F>Lg)z(aDqkHbUldin#Pb|ZM#mSbXg25GN z2DISY*T434dEGOMAIPr1{_o7gj=MR6$BONTKbt;-{&5?x9PFFS&FRd;!Yw8Vl}{Y# z@9-)$@$EO67eoMSs)1Wrq9Mi%_&syz9lGFx{IGE-4d~ZbKYGV2C*L;tLW+NP9YDj1 z+Qus+%nKLWulCu8o_yv>dhmg9QXabhK6+r>y>$P5chmjce}d1=&$s`%T!450TZA91 zY`%tXfBW0i&hvqfzyICuSZ}-RFFhx6umkue?6Ei8B>Y%qB|&wXDTyqOrND5+f_0m# zSWwlMDMSKl0C^Q~!N%(boUD^hI$6FM1POTLkw4ml6$_sokUu;NGS7qez0`pf%h{;{Y!2qFi>TzoYp=e_+mpxWk;fk8+wbG_ z^gsVe&prPG>C)7capoK+PQqh|p|6F@>MZF^1b_@7}$c;*E1t zY}<P~ZLom;{=mrvO>GsCZT6VTEK5hK{jp=)vY^?2# zHJxbT_3tn8j^c`gizQ&^DjSuC$D1Lf zB@)!r%56IVuIr$CMp5Prfk*DNT>kLqKhdL)JSr<3Hs1L9m1B=TjyL{qy8x&dZcVuI zK$0Kpski{Ikd8R=NO|o8KE4X*LB4HWa`|Pv&%=e`R$ngio%Rg%L04hX1Up=?8sLKA zCrbL(n%@!{c+Hm1K>;c*gq2oaiF9xPC4^D{=`!>W%5*!+i|BI zsZZbDauS>h(E+HA27QemKGqwxp3uN27f1`D4%)yX}&v5l{>>`n{CQt`W{n#ZjZ=9~8%(MM3wx^C>*xxcIXEt+dtZ)#SIW&CuaCzfkF^6p*L1;vQ zHA)Z#$oap7Pccv!gj;@{AJ{{2t7;DYnrtzB0tCoOt#n?pNGmcRzdx3k@F{dE%5HP%>@ z4nFWe>ebP-8Zne+{x)&xh;f~;eoctW#(W(GDCIi2*vSV+I zAHP2Ezyp#T2OfA3ZM)4@tWWJ1AcorHTmA01;|@uTEw|W;Hvi!dWLRQ^BlBSaMFMTJ z&1m|+M;@X}fBPF+WZ{M2i1Sy0M0|C^1iJ3J8^pgAzq&G=e%h(BM^+DfU+^>k!F0x1 zr_r!si)ACYPz$^Q& zLBy7)9IoKRf|$QIRd{SUn5f)(kpb#@8%^Q;=(x@;5WaegAYEC=KsoqEYpKJ_z8dU#TTXHk3X7zea>05;DQU$ zax1JzpL{x14C{sN^m7~M;EdBxrPn6BF6+h)JM2V%zVb?1cA4ckQ9GEWhy2)cwbfRm zKmO_W^t}zg&pQW;5#o=SnWuc@|LS`Ta8wj`J^@M4V3;+^xD^kQL~df8{N#oj!L*Z< z15b4P;4ot*jlFTKF8#11d`>kVdh#lU>_H#j5sC)d0_Oyh=Usk6mfHxHS%WhPE_q1f z4tO-tW4<cxXUG7ONZr|Hj0(>8C&W3BCO4 zEBs*Dm#+B3A9=-JU1AB@+^VXAJm$6I4m?;U>eGfvV8)XBH@4K~_HJ~ZFecKAuW%$UuD}`7rm1ezB{R*WqL%ioB_C4e)r2#Nd#pePlt=Ul zsf`|b_+c8o^;UH6y?4ngEWATpZ1E*{qrVC*G<2vizVz}dw8a*i(=$&!<1Rd&C+pAV z$TgZ`f=f^KUsps7GOQK^9f6!oS?K}R#JX`|NfI*ub1ywlyY93Tz4zWbyk{Ijf8x8) zvdb`Y1gB}R;p_sPQ-S%l||pIp68Ki_@_ z-hy44okM-y=f%np_p1=_@}9bP?_S3y;+T`dc?d9>A%h0dq<7w>haY)_#_`j&P62z{{oF0cRxM(!lZ8ly9q^ z@Y*YM*IjqhF~=QC=bd{Vef;r9vUtN6^+$EYfXj zAAEq$IO7aD@|dIPIo^&82!_aSaGn*eG}!D5E5*Jn zJBh|-U3r>Sg7^%3BF{BeFj2%w;+pswcPCZ_W|E-@h=bB~b!!mYcJqOa0IrMe0`~2) z$>TO&u4VqJ68sn4nGjc!_}U8)(70oA>KjHmYNkpWfJymdLdc-=a&h7ol0@PJG7G5~ zj`$o!PmViZe7xAmIn3-t$n2PXL&Wb5x8c(xGF-+J>+&EW^BB=gyXI3<3UyrN-HFf$ zImB9ZOsV+^M%b#QY!o9NCz{6Ww*|451eirMW-2}1m0&5c7x8;1SoQL_@Cm6!xFk$M z6HQ1-0U&|4QVYr$`;~^zmA8>R zHtFVij6-V+vnF6(ioFue9vNH)lZ!PKz@%1_Q#7%V>W&~MLyNA0j1t$=K+;%oq-GF@ zw3)+%VJX{4L$NkP@(fS#`-r4LMbu~k*kHTy;QI?G@_d=b!9vmCx}+SdD)(QV8}jT~T` zL2^Q*nOMdX*%X=y>|qKjqVpi8NEA*bw&l1Afjib92UngZa|r=((?Kwp(kZwyV*hoTpO6gQMa!CoDh zPo}k|67vnnM0{PQZ*GB&ByDojYiBTCzXV`{oF{DtJaHS9)JCj{6gy~Ed~n|uI!(}+ zLC{K2{gYtHV@f?eAX#aOh$(hQ0*d#Zu-8OoVX%xFbgx9+(qgc-PwO@k$`UqFA@2T} zh(i`Y1YD_r4BOobeHZsk)=GvFt5wd(Sk92=POyRkv6iF<6>#!WX`;3!?<4kw0a8Rp zS0==^^up+ZH4}J|9${T;M1&07*qoM6N<$f`Mf&<^TWy literal 0 HcmV?d00001