From 5fa35829ebeebc078d4705871449c64c49411c9c Mon Sep 17 00:00:00 2001 From: qiufeng <44188071+wutongshenqiu@users.noreply.github.com> Date: Thu, 9 Jun 2022 09:03:00 +0800 Subject: [PATCH] [Docs] Reformat README (#169) * reformat readme * reformat model zoo * fix comma * fix img --- README.md | 97 +++++++++++++++-------- README_zh-CN.md | 90 ++++++++++++--------- resources/xiaozhushou_weixin_qrcode.jpeg | Bin 0 -> 42538 bytes 3 files changed, 117 insertions(+), 70 deletions(-) create mode 100644 resources/xiaozhushou_weixin_qrcode.jpeg diff --git a/README.md b/README.md index 1441d6835..f8b12a900 100644 --- a/README.md +++ b/README.md @@ -17,21 +17,35 @@
 
- -
-[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/mmrazor)](https://pypi.org/project/mmrazor/) + + [![PyPI](https://img.shields.io/pypi/v/mmrazor)](https://pypi.org/project/mmrazor) [![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmrazor.readthedocs.io/en/latest/) [![badge](https://github.com/open-mmlab/mmrazor/workflows/build/badge.svg)](https://github.com/open-mmlab/mmrazor/actions) [![codecov](https://codecov.io/gh/open-mmlab/mmrazor/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmrazor) [![license](https://img.shields.io/github/license/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/blob/master/LICENSE) -[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/issues) [![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/issues) +[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/issues) + + + + -Documentation: https://mmrazor.readthedocs.io/ +[📘Documentation](https://mmrazor.readthedocs.io/) | +[🛠️Installation](https://mmrazor.readthedocs.io/en/latest/get_started.html) | +[👀Model Zoo](https://mmrazor.readthedocs.io/en/latest/model_zoo.html) | +[🤔Reporting Issues](https://github.com/open-mmlab/mmrazor/issues/new/choose) -English | [简体中文](/README_zh-CN.md) + + + + +
+ +English | [简体中文](README_zh-CN.md) + +
## Introduction @@ -65,33 +79,48 @@ Below is an overview of MMRazor's design and implementation, please refer to [tu
-## License - -This project is released under the [Apache 2.0 license](LICENSE). - -## Changelog +## What's new -v0.1.0 was released in 12/23/2021. +MMRazor v0.3.1 was released in 5/4/2022. ## Benchmark and model zoo Results and models are available in the [model zoo](/docs/en/model_zoo.md). +Supported algorithms: + +
+Neural Architecture Search + +- [x] [DARTS(ICLR'2019)](configs/nas/darts) + +- [x] [DetNAS(NeurIPS'2019)](configs/nas/detnas) + +- [x] [SPOS(ECCV'2020)](configs/nas/spos) + +
+ +
+Pruning + +- [x] [AutoSlim(NeurIPS'2019)](/configs/pruning/autoslim) + +
+ +
+Knowledge Distillation + +- [x] [CWD(ICCV'2021)](/configs/distill/cwd) + +- [x] [WSLD(ICLR'2021)](/configs/distill/wsld) + +
+ ## Installation MMRazor depends on [PyTorch](https://pytorch.org/) and [MMCV](https://github.com/open-mmlab/mmcv). -Below are quick steps for installation. -Please refer to [get_started.md](/docs/en/get_started.md) for more detailed instruction and [dataset_prepare.md](docs/en/dataset_prepare.md) for dataset preparation. - -```shell -conda create -n open-mmlab python=3.8 pytorch=1.10 cudatoolkit=11.3 torchvision -c pytorch -y -conda activate open-mmlab -pip3 install openmim -mim install mmcv-full -git clone https://github.com/open-mmlab/mmrazor.git -cd mmrazor -pip install -v -e . # or "python setup.py develop" -``` + +Please refer to [get_started.md](/docs/en/get_started.md) for more detailed instruction. ## Getting Started @@ -106,6 +135,16 @@ Please refer to [train.md](/docs/en/train.md) and [test.md](/docs/en/test.md) fo - [customize mixed algorithms with our algorithm_components](/docs/en/tutorials/Tutorial_7_customize_mixed_algorithms_with_out_algorithms_components.md) - [apply existing algorithms to other existing tasks](/docs/en/tutorials/Tutorial_8_apply_existing_algorithms_to_new_tasks.md) +## Contributing + +We appreciate all contributions to improve MMRazor. +Please refer to [CONTRUBUTING.md](/.github/CONTRIBUTING.md) for the contributing guideline. + +## Acknowledgement + +MMRazor is an open source project that is contributed by researchers and engineers from various colleges and companies. We appreciate all the contributors who implement their methods or add new features, as well as users who give valuable feedbacks. +We wish that the toolbox and benchmark could serve the growing research community by providing a flexible toolkit to reimplement existing methods and develop their own new model compression methods. + ## Citation If you find this project useful in your research, please consider cite: @@ -119,15 +158,9 @@ If you find this project useful in your research, please consider cite: } ``` -## Contributing - -We appreciate all contributions to improve MMRazor. -Please refer to [CONTRUBUTING.md](/.github/CONTRIBUTING.md) for the contributing guideline. - -## Acknowledgement +## License -MMRazor is an open source project that is contributed by researchers and engineers from various colleges and companies. We appreciate all the contributors who implement their methods or add new features, as well as users who give valuable feedbacks. -We wish that the toolbox and benchmark could serve the growing research community by providing a flexible toolkit to reimplement existing methods and develop their own new model compression methods. +This project is released under the [Apache 2.0 license](LICENSE). ## Projects in OpenMMLab diff --git a/README_zh-CN.md b/README_zh-CN.md index 8b2cd42d4..9bc20b49d 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -17,22 +17,36 @@
 
- -
-[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/mmrazor)](https://pypi.org/project/mmrazor/) + + [![PyPI](https://img.shields.io/pypi/v/mmrazor)](https://pypi.org/project/mmrazor) [![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmrazor.readthedocs.io/en/latest/) [![badge](https://github.com/open-mmlab/mmrazor/workflows/build/badge.svg)](https://github.com/open-mmlab/mmrazor/actions) [![codecov](https://codecov.io/gh/open-mmlab/mmrazor/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmrazor) [![license](https://img.shields.io/github/license/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/blob/master/LICENSE) -[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/issues) [![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/issues) +[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmrazor.svg)](https://github.com/open-mmlab/mmrazor/issues) + + + + + +[📘使用文档](https://mmrazor.readthedocs.io/) | +[🛠️安装教程](https://mmrazor.readthedocs.io/en/latest/get_started.html) | +[👀模型库](https://mmrazor.readthedocs.io/en/latest/model_zoo.html) | +[🤔报告问题](https://github.com/open-mmlab/mmrazor/issues/new/choose) + + -文档: https://mmrazor.readthedocs.io/ + + +
[English](/README.md) | 简体中文 +
+ ## 说明 MMRazor是一个可用于模型瘦身和AutoML的模型压缩工具箱,包含了3种主流的技术: @@ -65,21 +79,18 @@ MMRazor是[OpenMMLab](https://openmmlab.com/)项目的一部分。
-## 开源许可证 - -该项目采用 [Apache 2.0 开源许可证](LICENSE)。 - ## 更新日志 -v0.1.0 版本已经在 2021.12.23 发布 +MMRazor v0.3.1 版本已经在 2022.5.4 发布。 ## 基准测试和模型库 -测试结果可以在 [模型库](docs/en/model_zoo.md) 中找到. +测试结果可以在 [模型库](docs/en/model_zoo.md) 中找到。 -已经支持的算法: +已经支持的算法: -Neural Architecture Search +
+Neural Architecture Search - [x] [DARTS(ICLR'2019)](configs/nas/darts) @@ -87,34 +98,33 @@ Neural Architecture Search - [x] [SPOS(ECCV'2020)](configs/nas/spos) -Pruning +
+ +
+Pruning - [x] [AutoSlim(NeurIPS'2019)](/configs/pruning/autoslim) -Knowledge Distillation +
+ +
+Knowledge Distillation - [x] [CWD(ICCV'2021)](/configs/distill/cwd) - [x] [WSLD(ICLR'2021)](/configs/distill/wsld) +
+ ## 安装 -MMRazor 依赖 [PyTorch](https://pytorch.org/) 和 [MMCV](https://github.com/open-mmlab/mmcv),以下是安装的简要步骤。 -更详细的安装指南请参考 [get_started.md](/docs/en/get_started.md),并参考[dataset_prepare.md](docs/en/dataset_prepare.md)准备数据。 - -```shell -conda create -n open-mmlab python=3.8 pytorch=1.10 cudatoolkit=11.3 torchvision -c pytorch -y -conda activate open-mmlab -pip3 install openmim -mim install mmcv-full -git clone https://github.com/open-mmlab/mmrazor.git -cd mmrazor -pip install -v -e . # or "python setup.py develop" -``` +MMRazor 依赖 [PyTorch](https://pytorch.org/) 和 [MMCV](https://github.com/open-mmlab/mmcv)。 + +请参考[get_started.md](/docs/en/get_started.md)获取更详细的安装指南。 ## 快速入门 -请参考 [get_started.md](/docs/en/get_started.md) 学习 MMRazor 的基本使用。 我们也提供了一些进阶教程: +请参考 [train.md](/docs/en/train.md) 和 [test.md](/docs/en/test.md) 学习 MMRazor 的基本使用。 我们也提供了一些进阶教程: - [overview](/docs/en/tutorials/Tutorial_1_overview.md) - [learn about configs](/docs/en/tutorials/Tutorial_2_learn_about_configs.md) @@ -125,9 +135,18 @@ pip install -v -e . # or "python setup.py develop" - [customize mixed algorithms with our algorithm_components](/docs/en/tutorials/Tutorial_7_customize_mixed_algorithms_with_out_algorithms_components.md) - [apply existing algorithms to other existing tasks](/docs/en/tutorials/Tutorial_8_apply_existing_algorithms_to_new_tasks.md) +## 贡献指南 + +我们感谢所有的贡献者为改进和提升 MMRazor 所作出的努力。 +请参考[贡献指南](/.github/CONTRIBUTING.md)来了解参与项目贡献的相关指引。 + +## 致谢 + +MMRazor 是一款由来自不同高校和企业的研发人员共同参与贡献的开源项目。我们感谢所有为项目提供算法复现和新功能支持的贡献者,以及提供宝贵反馈的用户。 我们希望这个工具箱和基准测试可以为社区提供灵活的代码工具,供用户复现已有算法并开发自己的新模型压缩算法,从而不断为开源社区提供贡献。 + ## 引用 -如果你在研究中使用了本项目的代码或者性能基准,请参考如下 bibtex 引用 MMRazor。 +如果您发现此项目对您的研究有用,请考虑引用: ```BibTeX @misc{2021mmrazor, @@ -138,14 +157,9 @@ pip install -v -e . # or "python setup.py develop" } ``` -## 贡献指南 - -我们感谢所有的贡献者为改进和提升 MMRazor 所作出的努力. -请参考[贡献指南](/.github/CONTRIBUTING.md)来了解参与项目贡献的相关指引。 - -## 致谢 +## 开源许可证 -MMRazor 是一款由来自不同高校和企业的研发人员共同参与贡献的开源项目。我们感谢所有为项目提供算法复现和新功能支持的贡献者,以及提供宝贵反馈的用户。 我们希望这个工具箱和基准测试可以为社区提供灵活的代码工具,供用户复现已有算法并开发自己的新模型压缩算法,从而不断为开源社区提供贡献. +该项目采用 [Apache 2.0 开源许可证](LICENSE)。 ## OpenMMLab 的其他项目 @@ -171,10 +185,10 @@ MMRazor 是一款由来自不同高校和企业的研发人员共同参与贡献 ## 欢迎加入 OpenMMLab 社区 -扫描下方的二维码可关注 OpenMMLab 团队的 [知乎官方账号](https://www.zhihu.com/people/openmmlab),加入 OpenMMLab 团队的 [官方交流 QQ 群](https://jq.qq.com/?_wv=1027&k=aCvMxdr3) +扫描下方的二维码可关注 OpenMMLab 团队的 [知乎官方账号](https://www.zhihu.com/people/openmmlab),加入 OpenMMLab 团队的 [官方交流 QQ 群](https://jq.qq.com/?_wv=1027&k=aCvMxdr3),添加OpenMMLab 官方小助手微信,加入 MMSelfSup 微信社区。
- +
我们会在 OpenMMLab 社区为大家 diff --git a/resources/xiaozhushou_weixin_qrcode.jpeg b/resources/xiaozhushou_weixin_qrcode.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..873a0ba40a5af1baec49c11b16f86edd79714eab GIT binary patch literal 42538 zcmd443qVZy+XsFUa?7l15)E<>A*qxOYsoFS=RRvgk|aq*&B?7+XpqYijeD%ipc|Er zE=s6D=%%KcE~u%QF4Igi=gj~4p4e4+fA8A&{lEWzyJ6Qfb1vWS^L(Dq^Lai;lcOoZ zewsUL&MZtz3&Uo^KbWQ%n?KXrc@u`&*D0MPS9n3xPgpxGZS8jLwL5fZ4;0e<^_FA-FXNY_6iF=P< z>SXlu{lq?tUrUFY{9XYx zD^{*@+^}(z(`M%_9y>jEd3pQn-hbd=K;Z9(f=+~-JaziaA7{^9zH;^2_3#@v|9lV; z85JG#@KJ11a>~=xv}fth-(<>rBtJXm>m)ram{lacd} z*{b4po>&q)rw@0jMW#J=4y)f{T*OlBHmNe!U^7iM*vMF+1{=IcgRy2(2Z@i@i88&F z8mx3QrlNxs+O*+eRTmBRdcFpGJ}yFoJzGj7zb4jmnnv-JGv5=+F8($e>~aF8!2&PS zNo4&Jy!P;I4OZKSEv@I|IM6{(^de6_{qsc@`BC7H7k?!038>ye_2o)jeb81tRZrdr ze*UZmJGs_LgB`n}UDIS-LGI;8v7V55_9_>;x8M+2Y^1>scvXqqG}zDak+t01awRTn zY;P6gW724PG+t~pwecxC$VNvop=hmri9^a`dzC@*Im1!1Hrl7V9Uq{o6gaax{w;N)x*s0n9YI92~!knRX*J3gudG2y4pn^q&$r%v=lm={>Yk&K|CG*}mh z6p{3}21~M%yTxd*OY2to;9Ki_`3lv(f%)-gRA*BQ-H(TRb!p_~AZ#SM zepi_5*U{SJrmvael$c*d^xRC_=1I`?gTwvlS_%;#6LrEg*77IyUH9{b(|c>l$Ns=d z@YQOwPg8*4IuB`F32!fLs?eLSI3>+mLgz}$?`=|z6&*Jt&&qwmI^$m3k3XNB zZea3qzs0kn{p*fS>(HkH@68>lU>BwB^~4WxdN$xyZrwMRv!m83d#&*yHlH2DYuxo| zX!y<(qt!Ru&xdK5)ta|mz_5Qt3W5_x(uJG{{6yY>&m3LuFz*T#JLMdHTpq`%%9tyD zq55T%JG*AAWW$l_;9qd#^G-U)W@3JaXa2LZ<6x~q0Iy9nS*Rnb|EG)cpKrt73$#vVK{Uj>Hh(Zyw%1_$t`O-BY6x==&FQnZAr6TYgL&%rLe*&v);Nqq5Q&S3(iD2Q z2K!*3!R#k5ld{x5rO_@<)C)p&LO_y5H^|!Gh+agst_BMa9gWe`KEkS`NxbL`2mYcP zSq;H9JTy2` zgGG4-bNl;FmZizf1L}#YEN2($?DY?@!?VV28%mWuy?x@so7olR9!H9{V}fHE402|S zJ=I&JzWh<74zz2%RBzQa`Qy`Czl=$(pCGk{qSOla;#g%}EnHL$_MO#!t4Sp&?L~Jv ziWZ&B6z!W$uy07BC;+cpjaRRRMSseVf>kq9gN5``zw(<5&$= zJ(pZZLeAq$-w^H8^P~=tynBcgvlE`ue7Rec5_gObsG)4nc9#?`5GG8Bvlh44Rs>!q z39>j9Z&;1j=4-H;Q(Wwo7KaqIcw5Y+zN_4TdW07rA&Munr3ZivL8KFR4ab?F3m%nq9K)EEQ3l@hfC4dm9%>qjf`NbZvq7 zr0WSYw^OO^`xA#G%!16nmJ0v|B0z1_ZTQ8NiH5LE{)BCE2EO-fhSyXO?|Nyl7aI}q#)&`}r_4tr`-CvgoW{DN@s1;`bpV7I zS|}!n?=T=_3B>f>_yzfDa)<#+ZSg(1)x|@9uMVEYIosXz__L1jg!oXp^)&Gv#5Gx7tK%lE}-8OT%@!2A}vjg#%t| zun2CtOGSoz8Fj@j>S0LZ8P?D{v2z9{I9X)sU|kf|2?wYf2>^AH=lJfFnWyrrI0{>$ zc!)}`Nhgn+TS^6I8rV0`Yv8P`=%Umrk0X386`;Y^lZvf13Ok;9I4KPTM8c+EiH#RY zSdkiRvtKwJ<{JN)ze$6+?5fTw)q;qM!|v|}YYsx{b(cKY{xX$(9qf#y?A#b}ctFA= zUJzS)oJg7~7uB<>>>v1uwnm)GqKN$K`7xOVjosaYO^>UzQ2-!p$$LcAK-DPU&D2R> zU71OV?OqKQZ9V5U;oLP&AelN>^ipLL?&-#^mQ-K)-8Fa;dvrJPh!b{%#WD(F#yAqP zfw#ofoN0e7jIrAsv}$iqYnfR8oW}IiGue=Et_Mh*WrHqZ;KGNb|<4;FsaB{JO`Y z8U@OQGMAN5q~s|ZncIGgpEnQP_O7gh8cZ4tM>qp+yatnyDDFg@gSeBkz923=zcJM` z%zZ!H`3}S&zI3UZ(uO?5XVRkCDT3qKCVwr}YOMJ-b!7?ilS=}F>2BQThL!;BL`&#Y znPKow(Sx-<<53KMd&jjDih()3wguaM*@xtW|1OR$)G1=1T#I=9vCYoqLdLpCKwXs| zP6xTsi*~xvGX&Xu#V}jR3|Y1uV$#7d?j%Jh-O~hi-F=%xI?&0fl!}lf5bE92yHkbp z31ZiT)QKMI#OxLs8A5$)_(D&sY*NF9x~##{52+#P04xgIdP}K&kyTS0H1c9Q_-1Lc z{s$?sO~MffKT`m&TLLkZ-MWnYv9#X`x{>b`5Cz-A-a3~H06;{S-fDz5rKgj{*&N8M zy-d`1HjC6}IoTP#wbVn^ixeC&Z@=M`w{(B?yf+%`zS{PR65kS8SNyP+e%-|$kaOYe z;E$!tm21Qn*87Y}g+6SKooI7J!~U47aH4zS3R`Z5T!Yo;TiK70gt@`JVS6OUd7T8r zWs#pb(X^)Z>hn{zJjNT^MfR`*Bw4TnUZ5Rd4m)5Gvjbvb2M}d0kg`gj(+Qga;2O{a zJykoQOrHp4`g=&@>8EP-p0W?pOuDcy7Nk5jVbVniN`XwexQbF>DWr>;Zl^L$_dgp# z#%*Z}tS~9Qm;a!V$y07niw6+j)Z%tbo?>coYl!If&9%4<-~`yF-yWo@rUitoX~2j< zA_!Nojt`xomq)tM^RKi$1IqXHGR32fb`*}cLv|V<%K-8wNfg8|@CZVU@xY&*q2o=M!p%O_p zVGwk=oIEzAEwaUws5%kAYVl-3=?d1qLVXDNhXE)_NC5xWSLQ15tt!3a%yJ>ULPmTj zIO1{S2t5NO?QQ&~;T+|v*Q9bHDL6M$TiFpp#9A&S_xWUP6eRbJ1ZNV&h)g|6u}X*g zj_i+bsTrW2r*JJIBz)aUcJAdjl`4C?m^vHb^;P-ls<^{9$_zFfO=~VfIfEf@f9F$@ zsQnu3*P6VTB2u!p$n6l()0YJ-z+<**_Syo%`BMxqER$Z`^44HpZl0(<9i&_+wzO{N z(liwcp#S&aW&)s=R`KbEwo)5$Z~{?Hi|WnaOa-g*+YkT+UQMgwvH6a*DLJ%NU#UH9 z&D(z&@9J5IkU<+1BI)ySutA^g)PnWRdG-(DJ_dKyp;nh!d9bUlL-Nx@dw&XI9=@pz zrm?d#+GaJYHlOT?LIXmQLh&7jEnA{;Oxc|Vp#hL2BAKotPR9tKjv41vNB5BQ;r{qG z{Krax|Ki>>*L-l_fGQ==o8%|UWz;QhSNdI{rNUX7pT^E9GDPue9shWoyh`xYNaIOB?y6=Hip&qEMHsOnY4{Seu4-y^03LAo(s=@?ngckEutl>nBqr)9l?+)4 z0O-^m_$9=pmL}- z?i%bjzx~w2T4B1%Dc=`fRv$J{75@iKS2-TpP^vAXgJ>S%#>%mhFIJeSMk*?RNhKgL zJ1RnK>5RT-IC;BILA`Wz!TUn{f)8uw^e7k*Y_q{4({@mQdixDbPzfm16A?So7l;+{ zd3=qDel1Ei?sWPsJ4!FjJ||7gKSXX4aZ5;^39NWuM;pV^z}R}lep1!c5w zUrD)Lqj}GCRr=~}l3NG5U^?}U95|!abcqJiL;D-l4ek{B4IzyXrlOPrm2jsT`G_3+ zRaKRmAMFTK5Ek2V z28gISX5SL``y)Wmnu6h^*di)g9A1@6LEdAi=wP_0%}n&l0;R~YnTd9d^UYTMky-7r zmj@M0%To470%ITbe#BZr3LQl%XF>|?j#x{Cu4clu8yO3~41T3kBUJa%qvzX~xKW8@ zeceXRvw?nxWw!EKh*G8sgCzuw@Y%Y%EDD0fBU%0Hj2&20Ja% zV7`E5gD^GV=0IS%-oc%I0W4PnbZL$dpQDK~xVWOxl;w{T<9(6<4Yca?z&`j7p8^23 zZQG$0RqSu`pWlO`{~dX~owz4Lo1hz9sm?cT%wQ`d)4f<#B4vOEbD~03xCF1S^C)*y z*{iH}H43}7jrs|`-C&D%fGwWSkzVtKMBSOKHX=8vh^9Ve;URLNc{=Ryhl8PvBp#i2 ztP#(U$%1K~&mt2iIoIeeE| zZkm&Bc#{T;nGxp|5?9^LX@Gdd6G->n*bOU);_bk~krc$IPH>^SS!*y{HG@7|RSQQ& zq^sP1u;sw{gOn~Ka`%V@k`b^0pZNAgH9ZFv&#n|nP0U1bJSU!~P@yn>)~3A5@%)Aj z+C_L?Al>CI?rgG`J6th_tM`@Q$RS}bMbn7msWl)Q@b!VaYDPGT`epj0vcwb@IF**z zlGmoVS*X)chiK(K20$y9IH4Vwu@PwHwwMMpsWMmXAd+FlCvC-xp+EWcZXY7P-fYR= zH=E5RlHt|qxVS6x;)6brwe)C5GLHj$*pYsw!4Ac!eW-K7j5=;w86mI>ZB*y)Vn6B6 z)T3*loN7>;LJ2IS&k8o9&VW0QS}s&WwWlhxRpVCl4L-ewPe}x#&uyy8X>30@bwF?E z^Cv-l2y64p0sP9zCI31Ado|bZI&%Q!8tjH$sN6T->lARe{P=9 z7j&W5=r{L$33E-y<%oAF&pY)SaBQTuA`PLCV{UD>phHdecUp>4R;$*4pk-%(`x{+| z_qOgT z?S)z$PIg6`jEoV)DFwx>ztJqoFj-a#+28&t3lYtO5z#Ckk*DV0&rNowNy#f%e$}e| z`e_#FOON&o{ zUB9(N%BFq23 zV^bYIb^snv>orGI)>{k8J4m^)OxtRs26N|A)`i*d0;Z>@^}Te1em46ft5tWC3(?Ml zEI$M}7+}D|yf!`Bi>%6O#EE{7)&x+{{5Suwt@~eL>t>+W8cWaYjX6kl;A{zOC)TRf z3cPO1?lXm5WI?6U61X6;>T6@%n4x{w62STbnFuK_%ngb|Z2{c6mObJG1nVn^j9$=K z4S_2gCDm(r&47<6=nY2(q&41(YUdITsPJxkUobca=C8g}le6J|E}GT>zS)}WFNhj| ztuziGlD@j@O;F67xlU|Vc&r#t{h1{^2YnmsbZgLicq5W)^%rD5OAv-ocrYQ&;6s~I zc1xwl@a5d6^j zGh0$;nY!Hqb4c^7A0e436Vm;mvvDW^ki&0)cB}xE>gABHY_jCS5mmdk=MjS1VnC## z#*XHI&s2>7j1bmvB9gWe2x=U_>7SrJWNejcTockHji|lRuZ>g{$Lt+|4zbrCj6G&$_2^lO@E4*4-z3NL>)-zE4a2v{gL|l<@b;z&i3X1g$a%T7`L75$?vyPm|vP0>;6+qBuO+Z2;lu z?FRhI3l@zOJ$@ed*aKQjZs@twU&2d%71#;lP*PC(1iep_D+5 zSMd}lfqtvV+ln{`u3OWAT+%5c#-~NP!M3yS5fZU#xq35oD_&QcRbn5ENBf#X-_-!= zlqRFT>se1msN@K(`boI)5wXs`nS^Z=>gRNWYOi~~20H?<3TThMY_+jKxt9QVwZSh! z#i57cGNn9JX#8B|6iQ!etjeveF8p?jPGh%gbphKF0@)(s+pNp`7WYrn`Ek<4slKAv ztI9w%O5IPE87ea_7VIVOtLI#SP`DwM&U%X!n?K8Ixz#0~XJ>vab#JEavdeMxrTz3R zmUB?U{`KtyUl&K4vry(UOehtH;#I!jWQ-NU~~frdZ)4B>d)PN++-CT1S=Ye(;14 zej6@=tPNl_-NvO4iE0iF$>#u}!8#feeCiT3kL5l@8d-{|8e7S>1f|`PGz3H+rF_{z zJ`#Pv(HuOi!6t|#CKBR4Tr(mipSGqmoXVA?V=b9|Jwrvi#&vE*klfI2Z2H$+a~!0~ zzr#A`7zyMeu5dO94jZn>qTpb@?$c>1dlYpT)cFGKQ{qFvf?)R(S~b8Yw!8}hr14;O z;cM812F2ki`~i@*+*Z(U%y%Kx2#UHBnW&qW2BOlV2NCjw+J$wZ`07Ig_^Fh0?>a=%dOPJWytpTvvN%kv4@If8jP6p;r#L0Dk|ZtU}}%>I@C{DP=TG1OL)A-Bq=1NfhBxdJq6NiO_`|ivnP0J+%?p8~}6F zkUf%701VwGvT_nx=7*W?t$T-YMRX#NB|OP$*%kR+sd=*fAsY*jS{B}?u5JU#=cIh- zW;AVl$7nu-7e&v0rM_!=#ISQ8$}n5jLp4tA0g?+>#iwHaQ9Ora7B-TLL{hv=)yDJh z`IYKNAk&DUk}o_ITe1bXR9(|_nNaQ^8l#cwxor;opV7~VeQr&EOf%F0MbRb2C)FGP z07TMfnYnr>Aq}R&q0_N^R~RfhffYS<5UjXSHne-pkqs51Hu4z2(U*vgA_RHJf!3z7 z@UM_3A3>h`$}ifOmXJr~g%l($P!AG*ew$7x`XZ~m*Z-&mVy)A5Ei}n~xVBRVfI19B zM2>95&-O?}^an_2D4-X{i>e@CB2tJB+vW?!xHHg!+X|IM+WQzv^c|_M)w89de zZlxik6=oI=BN8ioZ`m=|Xh!YB%<rddin5-yusw8cVuPng&;H>1%=AcbCo`2B(}FmYFon+GOC!=! z`AAvBph47w$Qn~)U2~sedJuEUb7L}jHIhv4%^|yZxUTtWKg@po zusEIU0V>*WScmVB4h!1>d~U&egFp`M+Q&vY3ly9iP4+=_ie5ocN(hgv7`T z6r4BLAoWl6T_e;AI6m<8v%oS?aMpGbWRX8Q&48y&<+j!YQ&WDN=rLA4XJS-KfxtqY z*3$xlyIeirMN&MKX!i*%$Sp*^&4BmaL>uF3ha;_kY2t|L>YkRfa*Z}Bk2&cN_{l{v z=X;eoP}4k)_&>!EUryA-|v0KDa>sis8`P56k>L_ro2=;zkiAHLHd{M`DA;=f`d2vrfJrjm* zf$k`hFGeP0dzRWU^2OK~Mo$m&#U5WqW9VR_<$Ma~S)bloO*(D#EGRCv77i&GqTvSh zueRvrmMW|IcHfbEgP^>!3376)IU8co(uF!X{21O-Ry(y5AZZW4l?mZU@am{CuR61i z8BwXvU+u%p9K>xnnq5Bq{D$q*?`ju0RXvtv$wO#>(Fcvuy#ll_P-PDPnYC47&5!m; zuvhyDL9n}odMS3ZcqSBrdKv=JgukU!KO$3VJ^sVVG?$2FGobiv?s(2sxZMOs7z%hg zLp3a$nU(OH%(R1tqVm)8%jy%yBK_yq|DBTp9^c>q?HC{D?YpNJT+!i)MUVqwOF z9=|;SP-TDFj3cGe&Vnp{3mr+DDS)L~>b=>GN)G5qiIZBg?5FJf7xE>b(Y-JaL|1|V z&F$@4o9wR<;^4UE0CC~(0FlB|j3y;BzI4>rLo;SIg4w8}jyf^jnT|TsiP`seC&uYX zYYn`bZWiTzBhULXC~-MRQ6rZsE{Vzg><59t++n`vZ$Z`;Z+qneS|Iby0j8N5GYjOz zFZoxFXP3jt@6duwHBtc5vewEKPs;a|PHkuCpv{8KTB$h8sKHHFI#e{E@~b!Tt0>oA zj0by~z!XcoE_J`e&heRQZMHn@8shkSqkY%7D0OmLe^#@+iemEPjW_FZYadEeUDdaaR(zdgKarw(vXmM-=ZkJow5rVwg=&h`vw>B~DYj zms~JNT-Q%=P@dt$c^s2f^(&qJ+Nf^Z-Le(yc{@)B9e$M4En@VM+G&DMyYo|aXD8MK za1FEQp)Mhciqw#l)2T}X-skx_EZR76_Mo7CMFAEe<@u)!hAet~p;owX|F#!9w%AR# zoRe!*@a(C{x?F+q!Vk_PO<^wVQP*iGB7(Sq#90=Bv{i*ikNdx5Jv@GtQ1g;#Y}E%EI` z{Tbg&W>tb8xco+Kb%k*D`?J{7K>xYll?9Jrw{2fg?J+dSVt~`s4#doq?D7mj8Yh3U zvVHWrzS1h$@nbJ~AK<#&Fk1~-AVcMlfQ8x1*jp0!(Df$Nj57fqo84GaVo`ddkA79@YH!L|l_om5;IJS4iq$sJIgkQox z`blLel*P!G%Wl4@wl;SiF4%F%E&N0N=P5s@B@{z;x_Inr^vCPVI;9^Q`tu1(o>Li= zLyUF?DIT?bCn-Y2JVx=DH>(;cXBfrf+BLSS7kgG9GMM#TY>`-WeBHRTS555K5~y~W z&B&0;h+zJ|k$+8XY%vM;gd?5D2SIuO!6?qmB;M>a=(dZ)VO;YNEWukSDe003Rh2Tea6(9!cCpt})&SprviD~pTwcFP@k*w$GtuCoE@-QMUxx+{ zPyFI#Yh>~=Q2$veOh6Pw!Pz5>1G?50>O!>|bge{-CY_fC`**Vv+u1QA)Gki+PXfhn zB1H@#y^lwdF+{nETv)}6@Z-@xi{M-Y(f0JMO%e@eBe~_z5`8vi1gA_Yh6oJcSVvUzd>9JcSXuNi+o~V=ToM7QlJ~eEM~2RYWdZHVQN;!pK}@f*YvL8ahXCg`wN(U|Q;R4YN<5 zb2@0Sjcl}0kAubyW^^@J^G;oiG;TKwn4P+Eh}D(jtmhT_iKRWJ4bV|rq|vvW=+y*O zd!>aU%Aqp*hbu?^rSA!=TF_lCKpTFi23e@%&wa}QU{`!KVTyOC*d7MFjetDzJ4|VV z((W$}&p6nXkT|wG?y^j^C%MTWP*P9!QV&l7~m0ZY4*Cl&TNnx4T0OfM?xa0(T2K&TqiR|YGfDVb|J2M zfEaL-ykq?T0yBX5eo{>$5=XicPGm4>6Ow&ogRPga0}9KhhtIjxb^Vx-)$`m8d{X6p zM|(YcaI;qU@=8Bd@<)@StFDy^C5MW1`>yP|@>7%5hm-@-2L)4~&rU8l81E<*kblrJ zoL$BVBl=lV(eVQwllKOJpgQ*8o)1>NWqQO5lXSl2(}^zK?z~^5e%&zs)2Bs3>s|Nk zJa&}y`}Jt4m*c^u>#m+FZ#X(V<7vTx12fzIJIqEQBNyf=>EH#243GQGfGM@ieKHeb9wN} zA*RXl!#;Q3d!IZwaa!%=+k1Cd&TqK;tZ?O@W3GEA#ksb>muPdUwt^S0E#~Pdw)FFz zVHVjqWhr~({eZ%W{4G9)lTNSnN{>8v!2H?KOnajvYv1Bd1v3`@vDWWFDr=&1!R=rD z@9gV*IcSKC7eDmn#vBQ4^lY0;)u>;`_Zd5Ec_Ae35Y-zTzZ1IYWa$3nI|ouYfPV9%bl*g_ehv^sXU>F;=!7ex?ba~+OpgUgv0@#WqJmP(5iGBCgwqCbC*|7I74H}Wz-`M-@ z0xstd$*hds>_FeeP5AyvH9fqaHyruoIN(gFptJS95qUjy4Cd|S6$`q)+Q~6g6554R zySN-RQ1x7EwQl*^uwT6TzFt45_-tSohs=QI4Aa<*}&;{ z=2@KWo1b~O>Oj?0>p#*KxbOxpI4Ll=v)W4;<@RVz!;a@Gf_9daToCuZleMA7?MY+$ zxUt1r*H1Zih(7wV;{wyYmG2*3*t7PH8Lx{=<@)Upq9XN<#a6Vp9{F6odsI!M%VC*Q zvRfbTq}kg%57j>^4}M=QeBt7}u5eOpzN)^P>cF$5weE?MHR}}<{EF|4t6Y4d{?$4ID?>W(O)|^;yr-c12d)dxHFXkuY;c;K{YNFy z-po~J>9Y8HQSSs}-gjPV&2c){@4EMM^XJRLoIX6ZapatLr<28W=cN7e_lD3_J_z8g zOC9|yo=fJkx6;|5g+o%b%Qeqy6LQO;ix*du8*wy0?PGRT4-Gc-76&S@eFQZ$O7J_r zjm+oES1BH;MtN5jbCPQepqfxzSu$lyK7i#-pU1mRj=gZZmX`0?Tw>sOR5;G`NVgLm ze5-ffIdbF7uHEO&&Bt^Yt}=oHXfb@+Lb|Hf`kt0@Sy@=RI+=dU(Z-8Ixe$hnV&vJ7 z34s_tOyN}^9)|d)D{A6R1pTmt?_06WJ5whC#92QQgrEE`sG3@6YFhLUIpkXy`(u5p z9(=~hJ1pj_CxJS&m#;JZ6ymiPXcO)e7yZH|VfHyy#gQ6}QwC#XA!K#8ZJ=pVR)g<_ z;1ahZ_l0O6?u<)F#o`1=_6K+{J`mwYQj;^YK*kwb3it7Yw7Q@S|ByMk?#PiQou}*^ zbLaz4C~`$3AOdZ|QQ>9_JcTC}&dj1SZWE1*XM4>V!un$DVKW7d)qEp;n2MMAITV z&5H{#P3Mj^C=O)laGY2_wDriiFHK6sM;d1J``^L#FTlb%IR<&I}5GRTfG*AME@M@d1F zKrzfs9o7gnZDqiHm}+|wM7>v#AXJSg0?90vsKKt7b!pte7L!u)nG(!O+7oH)48tf{ zyM{BfW!-ER-wRITma#1dIE6LTbqsYH92x!S(3`RQeYalRPZhaT61|^z_Kkm)ne&Fu z$a>lJ^nd}SjjE_(_m8Jzm!03WWNyglk!voAHP{_ak5#&HBFBdKfwTWy?y{3NL&|;3 z3W|)%@*K6y?c(6&zgSu}2$p5JEiQersVddw=RSu$x8*~*yR7#4y5w-qQ;*G)pWARw z`qel_KW5EW9CdZvnc>lO-WdOOIhJYJ)#vIrzc1UecDFKY+r*%A+dpMJYdkXEHGJQm zCDCTvxdYyfbGzH^v=`TvEZkg%n`f-;bN%McIp!gr;gK`iSL+y+-TiEF^+fFb@^?=n z>%GkKsdK^idZoZ*9$y_>^z)s%-L-oh z0=z5I`rmnf@aCsN{h1FU_V_eDN*rSy@#eySd7hUae9XW85^MxRoO*)>R$Hr;toY7 zO*MDHMC5u?oCnz$8y5b2d$#JJ$uHbpNRZd3H0(9V>sm}71A~vo!Em_lZHDju(Zc_C z1}C@BTp!kUiDGLuA(M1b_F$QXghP00Qtnm62l zj1g=Usa17Heqxmyx20ZH4NNnl#SA={bhR1~X;H^))~?f&%M_d<&VDvyJ)$bU&YZht|KzK!y@wmXOgKE#5^)RJ_q>{$i;T>e)@g1oo*O%kjBG&uPW>-1LvOLDxj4Z0 znfv+RX=dtTq=_^ifwW5FBM=4AtW~n2u6@xeg%WA}+}n&)$)Tw}mn1S`*0+=@`5`K} zwfBH}KXn7&ViL^1&r8F5aWgm(9H3RZE8HN+-6u9W1FibjCWE@;4jcu*+WDMv4GFc??_9 zVrmaA#7vaBT8Imf3sOr%8UX=B^HM-M?MO8D2^4B9qCh(TBxUCCvP{POHHSB+`0qJ9 zKNa22jWz^~pdSve7O0JdiWOvCJ352TRbZotPBNM67AnWhsh_usBFgjQDbsxqd#blE2oDWY?-q5q` zcK#=Qu5G6Km^C+&jFn>Ll}{PV-AtB71Z?08FJ7x3w2$jHgVS%-lS-elPfwTIhRq!9 z{bWf@lfz^0kQBXhr*AAy-rnQnnAOMGHw^4oRgA5#beUk3#P#W3vZ6cZkp|n_U)f1j z>$;VDVeX&T>}>BG7tVA6H-+fKtbUbQc*V7)agQ$yow+%9s{Nf^XL`*rJo&=d|H;PH zcU?}zAH|Ce;@)jr(=ph5Gxbp1wEV-7q!70y9cxy++j+}As&?EQE1Ru;)%#+Pc719% zW#7BIp03lwbnr3LJhHCKmA?xN&pbW;xhdh)l>*%u1ILLsN_94l(4pS;$#On=)BBCS z*=py!{JB{L#YY_iLY?!^%LgpVlz+A|x)qojd;0FCh{s-bw|CvN7SkP;J(WLp+`iH0 z@X8L)k_QBBI_2oRD`^8&>hJmiU$VB_=^EFLRX#TYhplkJ54u*JU39|Uv5Vch&x)I; z3|-H6|M?hR^z%cqS7p*vL*=-!NtXhabxSVKOfHO7nyp^ZHN*I@#oh{|8g8HCB`c~x zx5X0KoO|_hapB_6x6S>Mc_B5+BY!PeQF$l3JowM7Bb%3I&BN2f0B^NdS}JA;h#W3J zpgCh*q<}Q5&8S+ zUTnn*wsi08H^i@?m;tuVPoUZWzd1@o&at&>L9`Dkt5(UkD!sNDMtjnYiz(qtg%g#; zyNnZ+ZF$=^j3_XEEk+5UqRRzt75pH9mi*ha>La|Y1p$oSsKxx_jaF~8RI7;d0QxyI zptGH+s3_*=-jbgL)zolYSG`^?lB_kZTE3geBO+$QWGVz+r;OGnJE^Yz`vkVGgHYPLP@bC39IpJo{V07>>DA zaSn=N&PY~+S!bS8GAAIxl1`Hr@+u$;f0^zz6*7&;V}CayeLXq%*bf@jJuhL7m45eBGOd@OF^ubP=K7ZK(apJyvLDaEXG$!yg`J7f630o(-cVH zULenfcru;`i^PQrm+)<JtCCR4}U{PF|&)T)mY(4}MnriH-PvLjW|xe9ffhjK&48 z`Z}Ne`?}`wZ2iB-vmxKDCv)8Be!y)m_61d8=Royvb}m_`OABHA9WM5#@`{%tIbXg@ zQWG|{5o)#y5b)+ALb^YBA7BuwbkPu`vueZz`HN?+c(&35gyL?hKr8pu9mpG#glU*> zr@mkXFVy1jAPJz+HL;*77Y#A0`@)?@Y%IZa&NJ&WRqW=@xofEJC!6vQ73Yf_<)E%0 zx7ou18(7glUABe;?nI~uqxubw_?60D9+*phD$jqB3qxcv+a$r$a4q0#TX-#e$6ifD zY=IGpX;dgokA;foC@#TuKm(+}j8CIeRO~M&<`;`72_S|m`hlpBSI_jRdt-}c_SVvT znG!gALb&2-`H(49Ms zd>NC=KDBIADx=l`Q!2AN#G}NC6qfk}fcp6njDwSj5p7d}9GvVQ#r1>vR>~h_IOk1r zaC!GHE)5+OXJlw1wb`a2@?Zfp^_y)P7&T4fVz6oW$`_DV@<29K)SbK{f_IQnClk8T z&uuy?oMlGf^FR-U^cZ=x0DK;?wB+^qr;W`)tS^4ldJ`lz<1P6$-SAES4|+Qc~%RB^@1#Y z^1W>X{w%wUl*|r-@lip*GP*`>^d165(aeTDYjCv_tx8Q_P-kG#Zj<31(sx7&XetttsqYKxFtNkBot8$whT<&<^Rn7DC zIeYzxdt~gi+S&r5W4yr0)w4ie`jxaqcU#DBR{eKnSN zGTC~p%C>S>|FXM>N^a#u=}xJgu9r7hIe%N)0AA=L!JpQg68*thLtZc37VLgx@7wL7 zHzeEI?DFTP;M=Dc8JXvm&&0Y1zqD-1t_;3)?eL8;i-vZWziPipC!wSLCx@V`m#L)9 z@7+AoCpp`ZK_g@XB$25bK6{Y6I_eakYhouiz3orz&$f?R`*2AuZ+T@?_R-|x{1=A< zVsaw~9-Je7?9T2N?{(9Aai@58@yhlNwW;fzc`w%=wh$Kx3vO>Mt)H?pDpyVfm<^nq zZ8!Z<`%IRsd%~%k1|Kq2iV3y0M(xO+^|(Q0mLhUhhG5;;?9h8w3sQRJ50F&S8Qgtp zBSn-TR}^y~e&fin*(a^djo%&j-5ZonEZ%bN>&z8Ud`J2-22!1H-=?O&#a zO)G!srt56%;rZw1j3IyKt;igk#_z>fe!w=z&285b8t7$S^jYUoW$gfAl4+eC%VseA|_dbuKsageEmkQNe@3 zr?^&Z@g#ka1JEk>^b4e+>)h6I8Tz=i>k6=?$k1SvR|t3>n&qBHz6A|7y&yxCa%^Ag zn^6$t+ek5u)2Bv!M+WyVe1rKVhOPSB8219ym=IiHl69d>2r0VBNiO`oVgGeV(U}2g zAmv(fp=@zxt9zVpCgZ@YF8iK26PN(}YsqLu7i53hT8zl13)wNes%s#2U&I_7Z9(VA zhTo^oxqkJBZo0q>k~LrWF9y*_Tnl;zvL*W{DE;1NFlnvNw}#xelC%v%LxFb-knKpCsIzo$vT$q5n&a#8)*+S3VuEcB9fxX(HLanwqlr#KES zS74XT&ilC?Bfr7ji(|#RJ8+F0ka_#|+{wP<(%pp#37WM!w!BX2i}Jpl0Y7 zFxd_L$M#TWXkwM!20T|bR-$at1-hh=?w`Mp05wx2*4o#I>+b-dPqDU$*l*YYd6-UW zriad=seI)0dD)4X%15rW8DHk_%1xT7cSeeE5AP6f_eF}(oRyoU2uxN+QUv=)F_sk; z{V>22Fo?r|fm_^3Fbs*nz=$+}G#f023HJ3oknL zfzB_~7OJK1@%mhM&V6>&^()=asFo^r%ePAGS$Ug+Ryz2m8}sQL-_ zRYlMIsoif*_rJV*CM8q{I|N^f+;rzN`BEMCCZWG~l=bp~JLi4c_S?ycA>H=ct5gZA zC=873Dmg4;7w(u7rnd_JG@5m%ywh*I%e@*s&Y!-OwaS^?_EW)@!$TLFKlfEjbn`9C zV-0k*e~Ek;ALF-Nv@tf2*LWzB|G0AXZ&R;ioq`WNa;W7~bs%apSUQ|I*1@q;Q}C>!NUSsI__LOod)g1hwsk zFuZWO%YZ9ek6$WgoQ|V1K94H-bFS4|{)ptrjrQ7edoFi25`S)n!N7dSXXSJ;RwhyL zxEs6K@(+9^_`31#&6aX)&5ra)~@ z%&kpSrx`MH;LFmg^3h;+hrlG5pqvfm^FWvcC*&eD%ZK{G;Z>$k;BQq`SP1o>P92jVQSB%&h9hnqV@* zNj*j;3s1%wC*Wr1&lgsIJAeB8?fmJ_x(GV@7RLQBW}&k9Um3Pxbb$Yntb%b0&OqNq zjDH9)E^ib1tLGvIahNJHlAu{o&NnX81 zp$9HH$PV`i*AiTGPJxRKfR9dI$;~c0%T%smjEj!t?Xl$RdS&&v4I&Ts-bCD?=;{wS z(^5dW_KnaFT7%zt1kJKW3ghBn04ZJOp_;7T3H>xjDap7vAhUTYMs9BUMlET(kTThV?lPhxFGngRAysm7$CF%_?iu_zI5EJ-def?F9}TpJ7c+3(z!k_3EiDA&#J-tM_F<7*ClTnQ`6A- zHl5z_vQhD{(>mvfam%&l2Xgx_T-$EL5Z@v&cI4l?)s20KubhRR<8v>{L@~;#YOwEB z^OTDom6t2o>VvbMysLNey2(xCcZf0$kGuEQ^TOo9C65M0#~vz~R?tqr_>`={W2vpW zS7Y&zyI}S2I|FF_zI^pz2X1%YH40tT{0puLofU_hZ%u}riuO7U=A70d;A<`(-c>W& zzS&6aQ^H6hsjJlONgh9if5@T27Ff|z>d%kKlV}(qo(H;muP*56J-^3~syr9;_SW8ZG|;N^v88tf-0Ixdf> z9qX$CC2X#$8}S-m`+NcLpwE`6(}}GvcpX@nz|b9Ay#+>!@AK>A9B=a7R+9ELd58oc z#UipZ{JjypeP;=->XyZQYC4r}KZPz?LGI}g|GP)8!C$PSKk*gYggK6M5OmJXKm~n8`D;O%&dGSk-xlLxjJr1%AD<cm_}_nk5ptg%!F=3w)9*j`+jzE z!M2Z+-h3dol;w|EP_SGwCFaekHR3*IFGk-jydG)cr9F4RonC$Xnps3*m%7NA2~yNtaTk3 zy1mrzE;2zzGM$Ojk*WVxpxb|8H$NB3$LSt0?xHegB4FY7rkoc4n2Kx%XlGiu%(wOV z77-h36vL(iaXiJ_MLb)9h-08;MXt@nF=E6m@8H=KLmZ2mdE&sqUE*x%-%Y%6~L<^8Y8@`1Be+G$s11q2F)@ zTAN8%_?k2)6gEmIXl_jaU5WGA#Almi)Rhn=OgLY6gx&7{i-bbh??ewrXz?_%?>!&u z-?=lA-#TddA(=ocfABVshk_ycZ>%|6=nVeR&l9g<29{|T{PhqxARQpqU2ZW%dPAEr z-9k^FX~&F6eD6hH{QTQ^wgO+?mdV(xUBv#+(~!%Ww7%n?3uf=l<2A6a;LrcvhPVY! zBWm&B2rvm_bZ}rS+lti(q8peY0M%`u^3w>bv(kqcI9?FiwM~TDA4y{U^`u0b@PzgmH;QaEJc3PD2)I-?!g8 zxdDLT0a;J zCW8O}DLDF6O|nVUq?}Hn*_AWRO-eLEg#Xr@YtS^11$1AjSTwyN+U{skp+BfA8YBVn z+W*x3`X>GZU1GiO?U`w<+prw|DKwDYvc}SuvBBR0rr?}p@0n*7-h>h4sgCKYWiSPY z{1_K^0zkR#cnVA)3%-)V9O+zM?w)1~)UG(KXAe)hKo+QIO>JZ>P@C5jvM%_tri5gR zNUm!9V$TB)sWKap`o)7J^cxQnc#cs^4-yC+z^ktVUcDcv0?j4Hz^lWMoCf=yW+7tz zmi$G=j4Dx{-m#oDpqc&L>%;0f33(;ZH}UD^TJUIl@oa`!Zy}H%7W}A}*nT9(ZgmN3 zplbgIkKa+z%`0m3BL=;kDY~!Vd_ga;qU^yy7NHl5Z7^Tv7l8WSq;G}3*aBluZ}kwW z1V7Nyq30&u=RF~Nao>;;9Jm221+R$F(rqEP#xq(vAKin(CYwuBpGJmC?hfNM9-my0 zf2MnHUOT`w-#nTt3jBmv08bdrgq?JS8o?8!nYd3d=!DTsm=mA53_5|QkpVjSiG|*z z#kJ&e7olg7eQT0s1ip^OrQY!xy0?_GQRD z;b%zEw`inZ+ay#hXG^c49(<>dGCi=%1yPQP336~b{0t`N9w7&pkZRXVpUjRp7hM)U zV^(O!JW~xl+=rWwo~g!|6{2SwokeDa!UT^PYbWhmy>Ev~UxDbSRh<8SdOQ2DsOq$j zk5RE&E~WYS?x>i$OG>*YXd1_ITYSmTTC?kFb255FMI8+jUtkWVVwT&OZfmRQtZh%) zV>T%YCCWkFbu<%1Z4m|>6c>~jXA~F)&dh1Q_wNkO%Nf!^+dsPcM}>j&a^Lswdw)Kp zIr^RMq|ggD6P27vY=vzA?M~#-3LD#tp%-+FcMSfv9~>wM64BP| z(z$o?75`uD0A=Zt=50_AUHC$J?8L>Y?*HvDOC;2MW7=uWC-Lxcps{lKde#l!8Cla z|C$Er3l|7&0_nN_$ub4Z6|{$Ap#r7~VxahG))ua#w>3HIOe3g3S zN7X&9nZO!!#KOeync*%`oM>H~mqt$7dh@P#@R*o?{aX+}dV1KGSE?1~LHn^rbEnq= zQLh7O6c}py^5}|WU|+<5o4~#<)vm`hGO#b%trsIbz&^y}F;J4W$7oCH=3N+r)KpPk zSBNf5hxNS~EoqM7ycAjFvh6KzdZ-M@oz)dAYaPGn&ELA@z;8pf^#p@pq60qCNv2>D z4Bi^ugy{%SP&6U)g~9i^4=gb7lrlFE3+!zR`0ogLLq=e!2Rw=etf-Y4eLQvkjm7EL z|5Q@lt#2Q^b^9z?9wWRH&hVkujzIXll)nDyO86Ya!b_U^=MdQUqo?6nb% z5|q2{GK`I_8KWP?LJyJsHHiU}%=VjhhMuM0Vjj@TnDkJ0C1>Js0UwijZ zLdrmcQk^>u;1jIe1RmF;_GC|-7o0`pPPu42$^#m>WFt^H4Bbhf>GbDibf@VdFKHU; z6w*^EO;)XZo#l|35d-~G04M~w%pjBF@V;R#v#66dU1kgLgxb*JGINdfU+AC)14GzLEC^K1$Px*USY)vmTcwSL`@e;^5v^UVx$zB0CCzH9An zx|QtX#oSed87$Gg(fwHby**sV$oaxx*Fh50^4#xsd>1i%A?X9{%rDvyW=5O9yJ>I1Y#sI5| z1izQ4QgbCroPLj$5ys_B0Hkj2HJ5Eq)AUr=vIGFDOeYpgGAWAz|&6y*|5c8*2nD69DPSl^}5sJ}Nh zU!(ZePm`Gi{12a#^m_w)rSwLsxsII>h&rBm1{sI7NMzf91bIN3p-#lEO@f)b+!;GI zr^H_BA5yI)H|CX<1b3ZdN)dr(TvMA!DcOC-+G0FL#!8V+j#9ElbM)|tEPmGXu`^O6 z{mz7i^9G8^YZKj^u_tDjn$jAmF%NDgJ+xww;I9ukmRmRqChue^rd6_`t1>8X! zWr2o#2Q7p^19wnT_t6_>h1E_7I!$ej+jr#?dIJac)2HtVum|tA`+*JbxwG}M3~8hU zM;ITd<5DSt6Hxb%rYHcU6aF(stuIzC|c`}%oxQTwf;21T3+u5}zrd48q3b4&~PddGj z>%rtplul=4o3U~_o&3Umef+}Bb!}tXk)G+aGNw{&D^@`LXOU`JbK`aXL4i!uJGPYi zKl+PT=3JI6u;wMDaA0x0LKq+CG)1t?Na0>xO}A%hdX9c*mtT3|rfzFrYomF zEpK`7bzwv=+OWn^MtuA`0&{mSU0R*4XB*Z}$DGPr#Pjo0jxAWwP6QsCO)EA!yJDs$ z+?-ZKvuOn#yk5p=(|20ItrvWUn0a(u7=V!tsQz$7)j@a-qethjzh)avNflqQ(JpN? z(I5b$UD{|m@g+vPZZ_HlWd);MY&1;{$MJ`ER%mR;W`LEB4fuYwYzD{%dTa(r$s=1o z%m80>bd#qm>#9NA;EGUB)3ID}gQz%BRYCf`9k=Ws)Fgdht9!!mu9^*O#yXvbb>W(rw*D3=&aUaL~@TfRZnjzq5XC^JGxkr~ZZIRAO z1?7k8ObxR`_32^U=KECP`U#;S*CTPc_>RnqFL6g~WblTjcNqHpNzqKxyVdau4Bn*a zJqRtz#Y$*;V?4mRyhHf4`o-*TBY_s|YTv22JXEyGH25`mCy#z4ownMkip`!q8oZ(Z0bn83AZY3;R($)GjMt+OjS$QL!TaZ!P z?839Jz5XcQE&V+)iZW^jhoM#+F?T3m)X?5~EwLm;`xt+4ZR)(TZ=U&7w2}Iw2d*30 zw>re)dMttYR^M}HiIE=PD#-j%*7f}El3e~oZt`nEebXewg$be!Lmixm8%?&-HB$S@ zJPqm|b)L~7L^TQ@BLaRPZciLRB?@{bG$2?>K8n<`ZUrNcC7jmWG6|s~R$)&R@xQ?b zJZI>E{#qV0l4n95Gr}|B9W$=Rz4(b=_Tclov$}$#XvS_BaTEM!%keQ zJ^GGmU09lt_UPp_BU_{&h-b=_DlF%1&9Z%LE$p6ek2Y^)p9&5Bs=<2tRBD{R@N9T0 zBN#C}^&%Lz)wKahgoCtz_=ieK=kObp?jj`&LmwqU31ct5XrvkK_%D`1Z$j)Nnk*e@ zWZ>Ts$Ie%#c(jP;DHiR&H5!72zI-u^oe=jC(QCXSW<`UOnTty|h! znd!lj*-!8KSE2Y92xvvp2FL9T zbioVfep(Kf@7w1J{7$BHyG?Oha9oWv<_diiUe&XvU0^8GCx{Xr%#7yuP37Sp2v{=V?>@*^W%Fe@u;l&Py$msmkQhK%Q53#amZ+k8jJlv}8-3xLet~_8Fr5qehs&+E zwD3_6b!z-KgtPA7t@oPZj=EuyVClvt_g@eK}IkL^(gEXVZna z0nSQHsg{`>ALQa$#}1^fZkonGZ)BTj(XP}ZYc{Jyks?oMrfOI(8UN6TS-$ygKDDX(V@R1%Rz1(5d{2lgc9(1(mUG`|15 zqT@e!j9qmbfsZLOkP3E7g!37}Q*FjduWLNjW`cXvAHCJ4#bC#uhQ#(rA^mBO#Mb86 z)FQD($=!#aDNAfMKb)P3)5nQS;$Suv(NyFX`BR;|T4zuep_V}XYH)6$$uZpD61?oanzJVbT?^ry7@$M%(8DK+)= zYOkC%?_v$K4J(vgno|Prf7G>pcfJZOL5LF={&}YF*=sng?{!s>^*!o;Y^G&SkC5PZ z(Xx+Vo!3X8OGMhd8&~rcs*a1evUrh`9!B@qZK=dN*0_h2pq}o7Nr;7YT;H&GR?+yTJUFar)t$`{Q3?1bVqycCOocTn zI4V}+bQ0TQmGMMG%rtaLTL}Nip+s?9ITlT3&d#Pl!buiL(8{}LEh5RMjF%#D2vv=E z0C^+19()T9gh0i!S&vEKXI~r$H{Blv67(qDy@aF(lqkwh%@-b&&ItQODyt@P`PHd^88BbrdAxu@8iFIpNO z=V$Rpp2i~#n+nGX)bQCBS7Aj--41d!j?#KujW6@|F9qgm{J>FYyL*?s@NHdv&D(bM6LO)PNy$mH;wGF$w<0#?e$MAa#dhgf>}wh#1`N%yI) z6@YgJ>zfr_KXVHOnZQU31+DtsKKD5bNh2yF5OLaMa%fA29%P5%SF^LBvAh`h;o=iL zjo+;talB%srgstEJ{J2}b<=J`BkqiA69j%2=DEJhk0?l~fJ}P}uAUq2KT8iTseZwk zd_Bs<5i!Q4-%rnzInyAl={FGrm!;a|0ZEJAY+0wd9@#cnj3REXfW>$Uz##eazy(N6 zzqBb%O{IQipC`{rJzNuU61K+`|Mwfv~s#>K5q*mdKgUV?T^NZ4 zBTvLB=b`B-q0aw~Od?S3L}Sx$xJ(T*c$~7bv6)}A0W8j6I=6$x$?Z>Fk@slYxO2EZ z7>si^_L7dvFwVEM*h@M?FwXw2oeMwS)^2$7TmB@WWJDymAP<2liUEW)1|94kEOWQv zetlN8EcT9PkimZ7LFI18HIL}JIxBH@!D_>Lp_YI6ij+{gd$g1MN6%1HEtSZgUGn5D zSjoDp>0Z1({ALw9!z`ZT^L%4Tmh?ZoYp4O`?USSBJ>XF%y?emzy?elVW1A;&p~S0N zdm0znST85DOnN~_sfE9WSSBT(odFw8W|@?hjTcY8_cBANe+Q_}