From eb7c87339bd2d62b529c620124ad42f7d261f30e Mon Sep 17 00:00:00 2001 From: DYR1 <1004356985@qq.com> Date: Mon, 24 Apr 2023 10:00:47 +0800 Subject: [PATCH] add literature data We tried to use the GPT3.5 API to integrate the conclusion in the medical literature as external information into multiple rounds of dialogue, and based on this, we fine-tuned the instructions of LLaMA. --- README.md | 165 +++++++++++++++++++++++++---- assets/case.png | Bin 0 -> 554825 bytes data-literature/liver_cancer.json | 1 + infer_literature.py | 128 ++++++++++++++++++++++ scripts/infer-literature-multi.sh | 13 +++ scripts/infer-literature-single.sh | 13 +++ templates/literature_template.json | 5 + 7 files changed, 306 insertions(+), 19 deletions(-) create mode 100644 assets/case.png create mode 100644 data-literature/liver_cancer.json create mode 100644 infer_literature.py create mode 100644 scripts/infer-literature-multi.sh create mode 100644 scripts/infer-literature-single.sh create mode 100644 templates/literature_template.json diff --git a/README.md b/README.md index 49bcd03..3729ab1 100644 --- a/README.md +++ b/README.md @@ -1,122 +1,249 @@ [**中文**](./README.md) | [**English**](./README_EN.md) +
+ + # 华驼(HuaTuo): 基于中文医学知识的LLaMA微调模型 + ### HuaTuo: Tuning LLaMA Model With Chinese Medical Instructions -[](https://github.com/SCIR-HI/Huatuo-Llama-Med-Chinese/blob/main/LICENSE) + +[](https://github.com/SCIR-HI/Huatuo-Llama-Med-Chinese/blob/main/LICENSE) + [](https://www.python.org/downloads/release/python-390/) - + 本项目开源了经过中文医学指令精调/指令微调(Instruct-tuning) 的LLaMA-7B模型。我们通过医学知识图谱和GPT3.5 API构建了中文医学指令数据集,并在此基础上对LLaMA进行了指令微调,提高了LLaMA在医疗领域的问答效果。 基于相同的数据,我们还训练了医疗版本的ChatGLM模型: [ChatGLM-6B-Med](https://github.com/SCIR-HI/Med-ChatGLM) +此外,我们还尝试利用GPT3.5 API将医学文献中的【结论】作为外部信息融入多轮对话中,在此基础上对LLaMA进行了指令微调。目前。我们只开放针对"肝癌"单个疾病训练的模型参数。在未来,我们计划发布融入文献结论的医学对话数据集,并且会针对“肝胆胰”相关16种疾病训练模型。 + + 我们即将发布我们研发的新模型-[扁鹊(PienChueh)](https://github.com/SCIR-HI/Bian-Que_Pien-Chueh),欢迎大家届时使用体验。 + + ## A Quick Start + 首先安装依赖包,python环境建议3.9+ ``` -pip install -r requirements.txt -``` -### 模型下载 -LORA权重可以通过[百度网盘](https://pan.baidu.com/s/1jih-pEr6jzEa6n2u6sUMOg?pwd=jjpf)和[HuggingFace](https://huggingface.co/thinksoso/lora-llama-med)下载 +pip install -r requirements.txt + +``` + +### 模型下载 + +LORA权重可以通过百度网盘或Huggingface下载 + + - 基于医学知识库 [百度网盘](https://pan.baidu.com/s/1jih-pEr6jzEa6n2u6sUMOg?pwd=jjpf)和[HuggingFace](https://huggingface.co/thinksoso/lora-llama-med) + - 基于医学文献 [百度网盘]() + + 下载LORA权重并解压,解压后的格式如下: + ``` +#基于医学知识库 lora-llama-med/ - - adapter_config.json # LoRA权重配置文件 - - adapter_model.bin # LoRA权重文件 + + - adapter_config.json # LoRA权重配置文件 + + - adapter_model.bin # LoRA权重文件 + + +#基于医学文献 +lora-llama-med-literature/ + + - adapter_config.json # LoRA权重配置文件 + + - adapter_model.bin # LoRA权重文件 + ``` + + ### Infer -我们在`./data/infer.json`中提供了一些测试用例,可以替换成其它的数据集,请注意保持格式一致 +我们在`./data/infer.json`中提供了一些测试用例,可以替换成其它的数据集,请注意保持格式一致 + 运行infer脚本 + ``` +#基于医学知识库 bash ./scripts/infer.sh + +#基于医学文献 +#单轮 +bash ./scripts/infer-literature-single.sh + +#多轮 +bash ./scripts/infer-literature-multi.sh ``` + + 也可参考`./scripts/test.sh` + + ### 数据集构建 + 我们采用了公开和自建的中文医学知识库,主要参考了[cMeKG](https://github.com/king-yyf/CMeKG_tools)。 + 医学知识库围绕疾病、药物、检查指标等构建,字段包括并发症,高危因素,组织学检查,临床症状,药物治疗,辅助治疗等。知识库示例如下: + + ``` + {"中心词": "偏头痛", "相关疾病": ["妊娠合并偏头痛", "恶寒发热"], "相关症状": ["皮肤变硬", "头部及眼后部疼痛并能听到连续不断的隆隆声", "晨起头痛加重"], "所属科室": ["中西医结合科", "内科"], "发病部位": ["头部"]} + ``` + 我们利用GPT3.5接口围绕医学知识库构建问答数据,设置了多种Prompt形式来充分利用知识。 + + 指令微调的训练集数据示例如下: + + ``` + "问题:一位年轻男性长期使用可卡因,突然出现胸痛、呕吐、出汗等症状,经检查发现心电图反映心肌急性损伤,请问可能患的是什么疾病?治疗方式是什么?" + 回答: 可能患的是心肌梗塞,需要进行维拉帕米、依普利酮、硝酸甘油、ß阻滞剂、吗啡等药物治疗,并进行溶栓治疗、低分子量肝素、钙通道阻滞剂等辅助治疗。此外需要及时停用可卡因等药物,以防止病情加重。" + ``` + + 我们提供了模型的训练数据集,共计八千余条,需要注意的是,虽然训练集的构建融入了知识,但是仍存在错误和不完善的地方,后续我们会利用更好的策略迭代更新数据集。 指令微调数据集质量仍有限,后续将进行不断迭代,同时医学知识库和数据集构建代码还在整理中,整理完成将会发布。 +此外,我们收集了2023年关于肝癌疾病的中文医学文献,利用GPT3.5接口围绕医学文献多轮问答数据。在·`./data_literature/liver_cancer.json`中我们提供了其中的1k条训练样例。 + +目前,训练样本的质量仍然有限,在后续我们会进一步迭代数据,会以`数据集`的形式对外进行发布。训练样本的示例如下: + + + + + + + ### Finetune + 如果想用自己的数据集微调LLaMA,请按照`./data/llama_data.json`的格式构建自己的数据集 + 运行finetune脚本 + ``` + bash ./scripts/finetune.sh + ``` - + + + ## 训练细节 + ### 计算资源需求 + 我们在一张A100-SXM-80GB显卡上进行了训练,训练总轮次10轮,耗时约2h17m。batch_size=128的情况下显存占用在40G左右。预计3090/4090显卡(24GB显存)以上显卡可以较好支持,根据显存大小来调整batch_size。 + + ### 实验过程 + 超参设置和实验过程可以参考wandb的链接: + https://wandb.ai/thinksoso/llama_med/runs/a5wgcnzt/overview?workspace=user-thinksoso + + ## 模型效果对比 -| 测试输入 | Llama输出 | Alpaca输出 | Huatuo华驼输出| + +| 测试输入 | Llama输出 | Alpaca输出 | Huatuo华驼输出| |:------------- |:---------------| :-------------|:-------------| |小张最近感觉身体不适,出现心悸、气促等症状。体检发现心脏扩大、搏动减弱。|问题:小张最近感觉身体不适,出现心悸、气促等症状。体检发现心脏扩大、搏动减弱。| 最近,小张一直感觉身体不舒服,有心烦意乱、呼吸急促等症状。体格检查显示心脏增大,肌肉无力。|**小张可能患有心肌炎,建议尽快到医院进行检查和治疗。治疗方案包括药物治疗和手术治疗。**| |麻风病和儿童哮喘的病因是否一致?|儿童哮喘和麻风病的病因是一致,但是儿童哮喘和麻风病的病因不一致|是的,哮喘和儿童喘息有相似的原因。| **不一致,麻风病的病因是麻风杆菌感染,而儿童哮喘的病因是喂养不良、吸烟等因素。**| |一位患者出现了持续性的胀痛和黄疸,经影像学检查后确诊为肝胆管结石病,应该采取哪些治疗方案?|肝胆管结石病患者应该采取哪些治疗方案?|患者应接受手术和化疗相结合的治疗。| **针对肝胆管结石病,治疗方案包括手术治疗、药物治疗和辅助治疗等。具体治疗方案需要根据患者的具体情况而定。**| -## 项目参与者 -本项目由哈尔滨工业大学社会计算与信息检索研究中心健康智能组[王昊淳](https://github.com/s65b40) 、[刘驰](https://github.com/thinksoso)、[席奴瓦](https://github.com/rootnx)、[强泽文](https://github.com/1278882181)、[李子健](https://github.com/FlowolfzzZ)完成,指导教师为赵森栋副教授,秦兵教授以及刘挺教授。 + +## 项目参与者 + +本项目由哈尔滨工业大学社会计算与信息检索研究中心健康智能组[王昊淳](https://github.com/s65b40) 、[杜晏睿](https://github.com/DYR1)、[刘驰](https://github.com/thinksoso)、[白睿]()、[席奴瓦](https://github.com/rootnx)、陈雨晗、[强泽文](https://github.com/1278882181)、陈健宇、[李子健](https://github.com/FlowolfzzZ)完成,指导教师为赵森栋副教授,秦兵教授以及刘挺教授。 + + + ## 致谢 + + 本项目参考了以下开源项目,在此对相关项目和研究开发人员表示感谢。 + + - Facebook LLaMA: https://github.com/facebookresearch/llama + - Stanford Alpaca: https://github.com/tatsu-lab/stanford_alpaca + - alpaca-lora by @tloen: https://github.com/tloen/alpaca-lora + - CMeKG https://github.com/king-yyf/CMeKG_tools + - 文心一言 https://yiyan.baidu.com/welcome 本项目的logo由文心一言自动生成 + + ## 免责声明 + 本项目相关资源仅供学术研究之用,严禁用于商业用途。使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影响,本项目无法对其准确性作出保证。本项目数据集绝大部分由模型生成,即使符合某些医学事实,也不能被用作实际医学诊断的依据。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。 + + ## Citation + 如果你使用了本项目的数据或者代码,请声明引用 + + ``` + @misc{wang2023huatuo, - title={HuaTuo: Tuning LLaMA Model with Chinese Medical Knowledge}, - author={Haochun Wang and Chi Liu and Nuwa Xi and Zewen Qiang and Sendong Zhao and Bing Qin and Ting Liu}, - year={2023}, - eprint={2304.06975}, - archivePrefix={arXiv}, - primaryClass={cs.CL} + + title={HuaTuo: Tuning LLaMA Model with Chinese Medical Knowledge}, + + author={Haochun Wang and Chi Liu and Nuwa Xi and Zewen Qiang and Sendong Zhao and Bing Qin and Ting Liu}, + + year={2023}, + + eprint={2304.06975}, + + archivePrefix={arXiv}, + + primaryClass={cs.CL} + } + ``` \ No newline at end of file diff --git a/assets/case.png b/assets/case.png new file mode 100644 index 0000000000000000000000000000000000000000..18677105d308f6831c9f796c9ac9cc50d3733244 GIT binary patch literal 554825 zcmeEtWm_EGwk;MQXn-I=g9mrFkl>m?aMupnI5bYM;O^4FA-KCc4K(hqK^u3uWWW3D zd-jL>4{m*`r=F_SU8}}iYs@jn4EdrYjfqB#1_uX+DJvtP0tbg;2nUB4f{Ofd1p>!u z4F~rgPF6zvn_K$fvX`3z%H8v6eR=+7bAa5dW$vM%o^G@S861)bDJqtOECRLPGM*Y5 zAx}MyOf^3$@bjE-N>zGQDr<12;^oY!St8tJEamdVaV7DV6)dFK9t(qRAIm7X`*jFnH*lvLP*c)z z2-PK2?wqQ7P+CYXXVS(cJ`fKrAji7H?=CT;5;$s~S)0X{V<5_yr-`;aKMAV6l4!5j zm;_F!lY>j#vu2EOvOifL>8_W>vHse)rzk7AYCazB= 4evI*uM~_v z(HD4R)&m4%+3l!yJa4`3 AHTBO!PaRaeXK!#!z;%PV#^R^# z%|n6&$x&>`w2)T_^yxULS>MhGa{38$FxXV?^0QVU7Sl!O3y3o(6w@C~W2 B<966PQE`y{E+6ooO_L;+{$<7&xX&%Y}%(g*j@v@bvv*z`J{hbFGo9%3~V zT>jan>-rILV;|)Anas6tlnOa2#m2+P>y31Dz~5Nl?Yz>ly=w)3C}}u4_CJu 72(pkQ^wCUY^5qdpp@g41FDZ{ zn)LieJsysf$sWT*o75PsiiF&678bYs%VtHkmfwLD8D2>EM$aJghm()@Jo|q{RC?Sm zAAfr@0e`JMS#J;R!0MAel3%zI46jS!`-wlFk*;Mk#4@|0Mz?E{9J=}B5zS2i19!Xm z#x!S7K`F?RmYROk0qrZU7oU!&Zyk!;_`s3g;lzoL M`PFh&rCg09Tss$; zAf33#8of4s>)1}eFhIQy 5 i}WS@%<+6J zy&A9b{YF;{Q@JhQDiyJJiuN@lhv7B$Z*gal3z$P)-RczNWXlZe%HAb_C;0T3ml;^? zbS=md `Ku3yYTku)IXE$v6eetkh-PZ=^>sdI z>dQkIIji|p0Hh@b@`4oAKA5_AdHRy}5V*%^I*vaDX5W~=($?QrKXp0UGDJPb@%B2p z3_VHb2$!Stjy|5F+gz%*)S{uP+ nAa&q>rtmpKWu>D({a7H%dlQMGCep#^2{HnGX!2vN-7ap1 zdyS7Dlo{|&XqNrxw@h#PLEq>*2z~oUqyN;>MP8x%=C^Q#+Oy tBnViEa!Fh9!r7dS!mg z^A!rpt|92U=ceFs0{p1nC>KXG N7%d7y?!q)XTSZQE;LRh7-F5dT_ZxSwaD z9U(6kSZr>P`~C)h=o?>h+G5I}f8nphMUCc7 #c=PlaY YHUbW;A}smhpC z5m2V~zM7F;Y9WwIdAzvUp#K32i&57+0*xMeT)MR~0CN| *auT72As+Z12Ny#WD<~zaBDqIhMnFZ+hicADp(i7qGaVit*w17G z$+0P#;9I_)30$QMb4~ErKg;Yj@4v<1tNXz3K?L79yr<~K_4Bfl(?x1I*|??FmWL|@ z&~$X8yw;X`yzzJ;MgA1N$&w#e4>%lDgW1$$MpN(aE3=}#30-WxpDy&jJvR((WnscR zOVklkFp$AEqFUGSA&wmO7U%{V?oW7|b2_+jp7o@}v|0*}5uc#H09=Wat>*1^5MG;r zQA!ugR>-%l9{Mm2m>ZvdZ1n~@3S-B%vwegx?;SxhlkZjjDS5-Gs6xoZug%r5#b`dg zQfJ-i6)=0@!MIEZ;t3Ll=-A5T0uI*M#hC_<>y;enKO2@bjn&iq+`-nKMNw@^8o14M zGvVLYjq&hAi`Y_p11lMkMng^ 9zJ|gBa(A8)T`o|lIBA2 z?QYsJWgaqP9Vc2|{T<%hZ^G9G{T=QAs>)O%Ggi`5MAb |ZRJk-5s$xZ4_jm#*BkD^|YS zv=--~m@;24vjSal?by?~ikng2Jf0Y=4`0JDnn}VxB~~srdodha5cm{6A*(C)2A@d9 zskK);AwSmM>dw9GO)K`x?8ZjfChwNKNGIY)kQ1+jSfaUo8XE!h_G Has_m1>$z9YpbU)LAmN+^rj|0;(92#kAAo5oJMv$)alH+ca_-&L@k8?T z9Y-SmDRSZ@HGXd%K)lcY55gH`SUnYv`t)+PWup;8$KSvvywj@e(tV&KC Kgk@Ax30_aB6?;8^&3ATOvHcd-ra*>*y9vNHar^(YCc`av3JX2F0PsHFS-$C5%d= z=MK|*^(PhU+G%q8?eeVWB@U%8Zs%F^R#pgfi9X}h0%YS7;W?Nc)X7V=DzPg?QTt}% zOIi}*ZOouUP@g 2c +Z&zdNq2Z2E28hJ@t5;kI)JImHkq%Eb3IXf2KJ;^&rNY9;ds%*Jrp}7) zKv#E{X?~Z~hOFFL7LIbOwbe{SN_zO>^l$0b< &HXdStZ?8qLVuK9s)U@0MKETsJtvlBYNng7vKB1;oxbn|O zQ#g)jI63AkS^5;PdY3rpMcrsPU$MK%WMMpnNmw-_D*~9|a~}O*o@KO8o XV5K5z8u`$uWEA=yM^?9)Gm-uE}o`lpYV; z59u;xJO@Nl#b 0?uYTKJZ6gcNQc+rFIrq_aSrhe1!uf(a65o}vIegR}%P^Xba@ z^N3c7Y-s+?)g1rJ)i%FIbIRzcouRi?%MX>Q6!=$mBELgo4$ZF-e7Erg0Y8sFRGH*( z__XbYA*kzYlfBy}IhWk#)%&7%>c}uK7G%}EM5|7oK2W-GcY>Rcs!o y7U@Q5Lk zeMzc>F<&6GDVs!9_8ciRTw~Y7y0Px+H~wOdJA%NhOEgW5nb^n#{9{Q 1(Z3LEBr16>ntFu8Qv zU$NX{nwvgq1SeSyJPEUpIrNmQq%2~h%QavLRZ{kWepTw 2 qL>=lLZA{$`gEbis0H!+!48G1zLV!kNa#mf2h{8O`uP-@*?qp`-ikTwph! z{bp(M+x%5H=J$?sDPajLCG0bkoqeGj9(Whj&wP5E7i5agy#&U9<3&~Y^9}AqIrH-e zp>~g%(HpNp5O<=g$PX+`qGr#gJj zXy28R3taQ1XR4DgZgz1u^fk_TVM9SGZFghz%%a{u^qTPFl|?UojqBk;yqmIKNbU~K zjb=A!{wdnC|HmJ*3J%D&`_gh|3;K>ya#FmbbAia6KSnIRPJZk-VnK}4P$Zx&SHa_W ze0n-gCkn23w&TdSx|^q=P)~=PIpy+xzJbyS8HO!Tr+ja^sY4zgA1_E;W!MeLfx%>V zwDU^A+FSEizy$|wcN&wmWNq=Ct#Z`HbUQuPAAF*c5-@7a2}qxA|KLTEIV!OSB{ioQ zi%ujdjKImsnWao!zE BC)e zD$rc7hrBfqhkrQdyo_Eml*+g)$RRXGi#<)7^$mivm9XpIJXp?go^Giu*1OhVy=!v~ zHMVL`cp}sqY*# SSF o~KE=_nUD`D*hr%Mm_f4^qW4b_TQk< zCaUbe7}b5I%gdm})*TL5(fyESl}OjK7axcor}L=s)cMn#HWe65Vac<=B9hEBJMhR1 zicC?+nu$5mJG3puc(8H-#V&oSw}cOU-{bc; KWJtp<*7McspzF=#&pG#SIVErWZqlE zmFal7=N?leh+oH~HU HaCw7<7R2cu$_CO#WwluGk3`u?VO>)f4o9h^g4>JNm*K zczZsQq$-8fGsSl0{bC-NUm`!03&>>gg>{cbqMjQg6-8K((N`N6L#jZ!ud^JelNm7g z07o+|$M^PHnM`HayLW^615DFNrt&%Dj&()7y 5}+M=q^GDoAu;pQ&V8= mA`GS-pIJa||Bkws+(7d{a0 zNC))+>#nwF3TGnf8J2>)-jSGZ2-*+d!*f4&7bjp{DU}v_m(TU4QGrZP`DYrOB*TY{ z%3_DtU21j$JFlfFK +8|mOY)>k<{IiPQsXs2 K>-!xHSKmL97s(sXv{$7JL>j#XW3ps`PjSvG%Y`=vpvRYCD#BtwSnT*EP zYaLpT$`*C(g9DsLH(8`C_shOov?9I}ca`;V`57plu4_9`ns9HP?Bl@-7*TzTBt>D0 z>w_U=b6No-Gp4-EKKb1Q Db{>VRaR(AsmRLa=cD{OMp96+&x8eOVP+y2Gn#VB_RQf=kz8AL!7fZ^0j2=77 z0_%W;*d$Iw) ~62%c16q+8nfh?R}rADqklz6*5G`FYV0D!G9Ydd<@s=mx$*- zXmjZ}BGTS0Zj;gQlfCoo_~n<$|B?hr-~QzQp24+$u`UJnzba~SQxgq_W-`N+*KY`< zJ@}%ba+{^c%+~rG#cJaf`&}q{S^_?nUsyiWlm~~!m4w9#_$E|*KWXXJO+?bSlP3JX za4C7Oqyva{6rIoxQtpirjk(~REKxikx{-%CGR=>6f0r$E3hSIB-RaBGy3_*&r4(NN zfqy`WN1ueocA5PGQS#m^C*cpqT%Z;s8d!Gz05Fk8VOLb15(BRfK0WY7mVlkr$`8b4 zYpv$%!u-+Csyn0_RxrG55i?dhI&Mc@i;rRZTb$2o*$1dEG|R 4#0FrA zZAYq15|^T51*PjxVg}3bRtB>-{~Mq!DGXN$H$A4?q}e%QRRIsRYVD-0om@QagJ$Ze z$-5sM<`l+)(O@DfTjQ-&9ghW!B~xWq_JXY19A2;1gSMbfS(YlCfap?@)lE;mDMDgr zN?&2kYioOv4rQfhk3EAIQw!+itegdwoJL`-&9_H79quM)Rx@FCP5PU3cKn_pK7Ii* zpSx3S4^C0#mAEr`J?o0gjQQ%cA2^Z!Jdi8c adZ?(n0<+T49ZWyG;`FeJ? z4S{KuwvZU^UKy$D0Xgj?Tyn?abqc!|s?qZg1*MAqFR}HyUw^U}?#;11Ps7u4c#Hq~ zYQhYO@uNjAa#O1yekLwapsQf+(R+?b7iv5#m6}_2xqp^eyNT^ddnvN0r`OmU1I mO_T3q8bc-njB0RKu9Qg)VU2RN(r1*K#;)tF3SD=VxuZQcEc&`>unTI8QP z!$ZpppQ_jswb8j9>_w8gFV)xBv85@8D9G3oXq91Rm>@J&U6HI^S~ymDX0PZ
zvI2B^$pYs#@8JNobWE5E)3M-ahB_Lg3rF(}Q2ngr73u-hneX*<>TTm5SB{qYj{- zUD0dqCD)B+seW2_Nj+rY&6yUV2nWNar$9}|z^g$Ac|<*mTQoYlHVpEvlYHFFja0D_ z=Uo7yhvQGV^u}I|u(8V476G|%l{Ocz)_6RfPq=tL_HI5`q6w?iqH0JfYw1TxPPB*L z8BU9!WhpU;Yqug)_AkQE9&9)!@*(3PPNK$^`yP@pc_~Lsg2AQuA9$8NTrs@87IlKB zy(-eQ4;Q+^1R#bZs<<$Tqc$M>T{gG<$*XoI41U)()B;e%SAP|oGRkgY3=fn}+aV|B zO5=?2h%o$#w&$*wrE(kbN062`aL$kpUD}viC%US>7=8eIqgDX7Lv9%gQRI@ Axn$Ku($B^I;=EA7N;{vY-^iA*2~BH)*UchBxG6HCILW3i zf=B-VBrT{J&Av)Kw)IyPQRTJK?vKG49eqg%vE@ZP!@|^S$+4@RJmwgi`|KrOPjq$s zFIideADt>J;&}4imN*nW>F9}phdHwoW#yOJrK;-BmSf|V*~mlb;Nh?@=*b+nvf@@J zW@@;M=El?`yI^6z=>wUxqlMID2V5fA2^}O`rO6vn $%xNUUkDT2M1 }@`wYf<+ke(^Z!9NDXD zfR@})7s^gfS(0&+ZVZ0xU~_xHOp|(`V1o5g7Pb181}#x*g5g>1^J9^$sOBZ<{F-1y zdZw9 Eu5J81yhQDobKtIxZVm5H%u1RcEA?Sb!M_6^_dUH?L zlHnwmV>d|roY@)1qeKM}VQbFu#O(tH{|MZ2)owQFp9&qfZ>(EFK6|H3QU2r6I#K^) z%jFp?W-JiUBxp`fePV<|Y=y!Jn-sY|3UA3naZJfx=oInXBJ-B~ZG0(9%(i7&ugN^~ z74~B#@#lYPcM+7l(HnHG?ng&9e)Kf&9nr@4r?{fyj?3pLZ!ubYgP)6>8`D3EeEXz! z3bHR@F*<_@df%wH)drt06_ bW6k}2Yt{n%Dg* zJs#%i?w?B-wgz)Ev{4bJ*4noUnPrPPM4ZT7#_Vs??-XP$6^A+*R@H@;^j_js7_(q@ z+?AMvf-1zy4rqyjcFi>jE&gxqSE%P` zFaGq%#+5fhWW>t>ffHOjh$2~$!yw|sc Vi12pOcl{`fH-L%Nf@6)xFb zVoTYam)@J4=4X&)5~W)HjP>xK3GuAq_zR4#T6=26wE$DKW%mVrG{awbDq(DMDmJik zoxE_u)p`Ko&}irGy~LK#8iaz9!)?6rU1Ibc6%N#=JL0u95>cF=X$Cz6pXn`&Zt`oq zxv6Hp>|Xt_f+Hrga>!bwJxQnmlzqwQO*(Cq(5lPeXg_9@tNR*^o=tSVRjm8S^m|NL zzP={!MGa9a@cDr`*;0O|wi8A$uyn|LAoU_o$k=C?N$Xu9R<8nGK}7xr-{nU6@&%~q zrpbVX-zxN@)}(Wjjq(RSPZACp=l61xno^jTl1H@pp|S{#p{}M6zvo@wP*~Q<78dG7 zI`z8W0dcyrlE8lb5$^X3=I zEnd{p=ECCKBT@IARC5kxx52@09tno~5<|SMdq#1YGA;gbz2^7yR>*=HpGOzQiOx@h zWItBDCm2BRE>}y6?`c&}XVOr@z1+3UmNC%wVUs9}KT3U<68V8#U^B82+Au%+*cQ&o z+ow E!x016ui?t9aIpZeC#cw=bV({jW3>Is>`gJ?J&D%$W jO=Hi6ov#3JIb2}rN)C4~THryAOG0iOw54M_{&B1sC7-z8I zWsJBVH$Nl?xb~YT!P{c2SnwJ2kyTFE(Io0BLJ`*?Rk=H|>17-T?o78L-7eZrX0Ha{ z3)2FLhbcj{CP+e_{1eWJu$PH7*mE06WcuvNQ}WZAZDxfRYWCY#mqUoM3^c8!r6soT zI0A8fHv}K(hzJgOE0pZ>KB* 09+TYK#$X5qlg9|Wijbc$`sHO%X zsFxhaZ;Nr9$R+_QG)q^%qXJP9A75yAyuUv^*Wvw=;`1*wrsy!@Ax1tCL(M9>NP! pb3ip!XJ&185mCzh-jnRYWQ#`N|(a! zjo8{U3QqS9V335cC30sKHMjp4yoCEtR#cQnU$~>nw7##qF&b=jd$cD(>IQQ$LE!f;b=2@Lo{T9 Q+NG(3waJh(oaH$lq*uFqC?nOm0+__Psky&?XkJpDOi6L+o^HjXgLHbO zkd~wL)v+g?BV(&^ UajnKs `h^==;uJ9+IEPgI(GVMemxWVWZ(GnBl3Nhyx6ps@TOm W?lL z3LW(uxY2fYY=O6&5b)h8n)XbE<@$E5zcaM-2=FIQ_;d^SaA(Tp)bF%Z;o)Hs9C zPJYDk!V%p8%hp>X?42Zjs_a);NK#XGc?`j{S(vBxQiat^9NR|>lFnteN4;z|K5re7!P Hs*n1*U|vm!QkJLVJjD-mA(GmbY(Y<$F6 zQBhGAfCYFr2Yn{ci->>pn=K4=H3E^Rz{(Z1RtatyE;@=oW2{Fp_)lthZSbhewAbdi zOwW8oZBaXeQ!_HM8-?yxQFD+V!aj f5>?Gaa$>*QW{|no^8u8xX z`U?9qUp(hs5wZsT!PSk@U)ME)UzVWwgu~?w`-4^C&Wv$IDbKscB~_nFvdecc%+Ulu z?V?W6!qq|uXO5Sao}O)s b^wfvk>fW0fQ>%%{)Q*QNFaMuEx(vDTmXaAex5U&=buP_wtTB zMkBIp(E{z2gw0b>GgBdqBwo3OQ}g>6+WNv&&p;-j%G<5!ecmGNvH+gT8%$jCG=gg- zcH-8J|8K;(u`nS7n0~R1hjo#bd7>V#Kg>1G@!Nc~ux@eK-D7e!JX>Ga7wA$A(`px8 zucZ>6P*Hco*&v$&M~2dHMnk;TnWf%@v5lGex~}#7Tbz$HbCvo1`CtE%DPScId6;~| z*E?npC*U9lK1o8FB33FvvRWR0k2K}cGgazMfn0((sXaXjYl!E(?pe=%Tz`EvOn$8d zf_Uo~K0Cll^yuWC=jW0`CGSbL&`{R=nM`mUHFR0QvOYXW(ldF&fk%>o4Us9`SP7I5 z46qUnhK|OCPue#QH3;Si?Ws*_vE%rL%zvz`WpbWV9rh@wIrX%>-;Ni>R#L!djHqDx zo^$hYL?tvZT7o4skWQrnKrCN985|^Rl2)zFy_c-qPDtEr +!AcSy| zQiJ{0`!0$|=W5=Up&16Q=cseQx71E{p;I|Wq*s@V*slJis9-PK)GcKu1xM%yXyU=$ zHC_YSepCn79RHI53!nZ=t_HlhS>w0-N%HzL`|h%Jyq<54xEs |)XnlKQEgQ!jS_yzeM1|1daR!$(LRE6>w+F2z#?GV6qo=z%Z{F9WpAn1W zVG^xfNkKDt?o>}G&G;LHHrmpTlvt#f?t)vnHnTmZG=`g p+d{HUD>kN07i%1v*! z)?!g(am~1)8;AtQ-S> _NMSpGxTsoe0CWDBS|{RIzr2c1m;F#&R1 zHS(fS^iZYutZBsn9}y&`T<)%xlx1!hGJE0&4=q#v@q3|F*Btwg7O(xJoH80?HSzS) z0>HpVHA211FYPg%1kmcy$>!wH4fg((?_LQ8o;(W%pM<4sl-;I3Hr)d+QD4 DxPH=f1^%E;B>Gpmn7Apyugc`46r~ zjsIaeUggGf3+M4GQ)mVSIa^XyB8C;-DrC{d<=T%hf*Z)iT?oY!xbdA+q0{3RS;^hn zi_nR{9RdUXvJ93cfZW>Xs2KNXdT_E^?;!8J@jMe2YC|K=pb~b)_Shh;;P4-n+9*IO zJ%c^T_4aIDbKp0%A%weBnZgxgBz9`=lfk^)FXXeEe8Z-!-5kCeo%`jcHfI}>iTA@R zIid>PyVfkY&l+fm@f<^;(&f42rej*CD;MPjpA2q(GR{DPC1{4qP6OWTgm|iYmSIZ` z^NrshzNRw1Sa$b7ZIEIQ(NN`M2;qENXVI(P_So-b@?`E``Ip=!VW`ZNeUbUTUFQ4Q zC7BSR(0cX^VL&;eq?GHZnO-`N6tfI6B2(oNe?@G9 lxa{| zG(zW4r&MdbyKWwxNR`ks*W&OF)gVnNNz*RyZaM<}qC;)=#dNs`{*4fe{dG6O*`_r! z@&a(ebai|<##f4%1fGc4ZQ;70uVLX&NH^i&?MYBS4H|kU^4TGlrwGM(vcCVQXhx8o zy=ykjUM!HPIzI_;Zs<5~R)wmYfqVJ=ZKo)Tng4>0mo#ZGAYp@*Dm^FBy6R1PG l z9j(TWbz00uIKC!C`y({28ds6XmY{%lE^Do5A^mfl{#pE@@zY>Eb(g-*qOVLI#6o+Z zoVGy`K}J9BAOvEF%+GW@!L8xzYfzx`Nj`Q!^Y8fS1on~w)icvqnx0=H(dlFy zFU&(|s3v8RB*uF9%OV4{Z8w^6{Q;Lk&Rp@n^WfNh=Au-Y_I)Y3F-;vz(gB`e=qn^i zDyhFzBiMn>EKEv5X`MXztu+=6wf(8oMyshx(WMaQFa~0C)~wOJ=4gkwria_9K8ndc zojfNjxB)NavrcCl{Yv(3459rIQ>*YkW6-bQ-X=V!S48qY%KEo^u8jG8lx<~D4}VZX z+Q^zPf*!}h>|@MW{QB;c{e4nVq?W2{7{1Tfmjj!&CY_n#)$gvTBAQ)B7 g<)p-qQtc4V zEcouw?0dE3knIq+QoSa!xu}1XBZt@a&aUyG^8B6!02p!yVfx|))J^?%yya&PD!^?? z - zM2}t$pVV}-QhF6|2$)wkz6FYDH_*Kn9|2z&;ZnrY+;L%O2>)a?Ou`)D?Np?8Cl#Ah zUWYJ?zvn5477f>cQQsXct)AWQ$kDmTZR6H<8<;bcE^=a6X?fQEBBW0ZfypS}5B;i8 zq3U*hl>*)Thls6k#rBT(eiUNc2b >A9Un9Qh)fu$8C4 zw{;^8%lcysRF^)0OC ^$h)G+_;7V1bInucUbKh10;?>w`G$k9k{P; zH{VE0I!45hg?SPrMcYJ0cp>twG%M3P8 #6DJlZ1?m42)O>!`6UGL zpYkdDbw=`*0jIB2B|QTIJkcI&k6o~}vR{S>Hc(mPKT{bmE PJoPoA69FUd?X;bigEM(WOixyJTe zLk)dJY+^FB&y^kOw9wp&8;ql_%}eCQQ~pg->sjOU)vOs*VNg`Ir2cHhPnbDE*om4` z-^hFnfJES}cR18Sy^)M6Y*p(;TBiWpM^HoWem!GeF;x-sUJd9?FX7NQyfnTw`N757 zPUZ`Ha#u;l`Z4~4Bla7I9_yN@FF6~>E!gDRz*?t*^@I(i0ae#^wfiYA(@ReA66P5C zkGCk@%ZF5BvEePW@wUwVi(hva?ii2|PG2qkpe5uj{5L4>)DyJ}-t|W)<<%@WO*tLW zQd7qrOAitRIqENgLc|YN+%$--7mZzO{m>%R;};kAjMl2y?Mcja)x)Tog^dcsny`s? zUW0YTp$p~m*~nS>RZA?vUFHQQyFZ7mPQz+F|H#PuUE}%{23;9I`&BNvi3~8Z$@n66 zeGStF)EgyBrX|(wlimg0k_lr6c=BGs1i#K^rzk!^32)WmCay^wN;i7NnD_W^vQou@ zpd5wNSMlqf?wHSEkEvyOL1-HFHfn5Q&pj7DPZp=T*e>He$MM58)5K2rBY*X%wxn_r zxn~L;{8*X9*BQqRv24Qsp+(#c&iIQGH5cb>{W*=3lMDYREVe-_$iS1-_Lw@D6!nd! zGw+1dIPDCFE)55rVC=o!s|c`?``Eg&TnHc7DLnIF38<2Ix QCR&Z%t)o6<=S z r!zjfME7h3Mg?Ktt7Tc8uB^2N-Ry}qALfffVehjH5_ 6r(^{d!?aJ0MqZTsGj;PY=gH_x9wa-Vv5 ztYfIt* XwPeMp!S;qC)9T)>LGr4(cqdjAbslen(;3M)?vXz75dc~?@h#1 z9U?*30?GL>Onli?la7Frj`x7Z!sqYzUc5S`i#E0D{JFUoes;_c%dat-3*=&Bl&9`C zpCXi9Ba&SIz(xI6!wbP8lM4~96v(RwiH~8e-97%Gf7FVt@E(Sz{z9Td`d;uZ2RQ@S zSmm~ IpvLGMB| zx@Ruu{9fQesrVy5B*r-j6Q-c#_bfI4h}nbd@nntW)a0-BOU*5O@RzP@`ZfDc6ZY0H zx+iZ@pS86<=(J#bG*$mcyfX1GSw>C}_8r>n7q9xwl6NO~f)>SLMtqX47Ga`{(_R}W zmpi$##HMrC(nwysk+GIRZywWLf2?+Xlu>ZfuQE1Us>YW8#y0P#nc^Rfva~H8WXb+& z){vhfzG@%K0PvD4+ 7>AOxqtK*_z9nM^2-fyAVu#1NSR^kY &Z_beqIY zG)K$f E<&!^vVH6c~IWmSGY!5u%}@foZeuSvl+WO&1`r1B=g7GW66Mp3cO zvapd+V76{B_5mBu|AywRcCx8W--1VJtQHi0eJ*zV%JPgfce_|->^A$rqGNN*qE;`r z4VJI3O~GuhI~MP`HA51hPf$5ue+1eCYE?~M+-7X=z(M;K`1v #AMHUs~Ym%zPMeH^pexWBTkkVQ(h{B0PM}biigqYb@|YSSC4m8dzzTNIshVsI>q? zYB~O@_C876MZu1aGhs6P#m&YqJf&;rH^O6gk9Y|ub8Y&$JP{&!dwS(ObQ7d*GtTF# z1Tsoh_HnmQlGM|r>1 uQHff5bR)`+yMzg-Lf?X(PS zD|;p`_nCDt-L2(sv$fiov!=XH2@RCvI; *;fzec9S^&3oe1yoJ40L=PR}W3)Z>Eb%(&RR{FWd&X!ZNyc#2!Zocrn&UM?_ z@0>?`l}KI!|Ms``e~0^be+QK_2NRV~U>Tk;dVvq%=2Qs}7jczEp5-i5bq)}VVT0-C zO%A*PE$zepnk%zH<=M;uMZa)u9;;D8IhoBAJt%ZXV?1;NTytYKz?JPLu_e}_311z8 zUf(8bfl59{d`#osTdm8vy~6AR(SWWoXWSMnEJJ`k<=WgwQ4@nN1z8mZ1;xi?G}$$D zxpPt)nyRVu?A2PQ*ow&}NA5H-KeZ$ygMSFpXk}F@7lEu-TD%c_UFL;^NSUEImEA z{`s^A0&}ec#~J;vxH7?}_|Sf;8Z`udYJcPe@OFb@WgVapjlSSAy_!9odCAF%YmEO| zn_l>+CUuWR^WqU<2ob>4vReSP3(pW8t$W2` FrXS3g $Bv>gwvZs_O*;e$Loi zx`VY+T$r`_0Yo>FG~c%w2m)UP6V1Ipr1x&TV%GAU=|;RZQrA5{*BB}CPzw~0=*E=4 zo}X8oU)!4a+5-7TXR*+gw7W1eGbzD4rZ*aF7T*X>cU-#|tdwRdW2j8t%84gvsla5^ zN^K0ZB46{b#lHC6e(<4BI%0|e#5?LpuU)^LUX^d_^M**e5pU7fK1~w{HJInuo;Q#+ zIydPIY#_){+mm}QqW7u&PQAiuN|sykwa6t29$nTeau z6cL<;glq{+|jOHt{RVui|>Y04-u4Y7zXvJNykfl z8|qYyGt>{I1`3S#bG25i=gWoxJo;By)@}XH^t*YIZ8uGYoZ@#4WHATA$T+Otp2x#q zRX2RhJ*1t)nj(X ^<%Us4)bzUesYc!jgBbWfT}avJ>8{-`EA5e(Uy =nz2#x* $5sl|tK?mMqPzn&9*#=HurbQ@OROFn@e?WW6&ZGSLbluW~|qoZdSX za$$yATg`yxo1ze%lk?ZU?UT`97VcUH4f2jB!Q?7py 8eA8e3f1WaY09(>^Z~Yj7z;|6OqCPJL4KOUduIr>HzMCf~iL@3RvQ_JYKPGJI4p zyTH2K>Y~2UN>Rrk!f#=06$hp9X&*+=X?I|11%*$Rg~^U6c2_3z+Fj-3$fm%M9t(G7 zU&bobj&5sL`pzKe&&vZpNYzaQ5I19zn7^7eGFZ9q*Q49q<|f9+d;~w+DU<;bX*WON zQ&dR3?j4+5$geG>zbjeKf?S)|a`UWcFL!t}kURCzSdXf1?x|ivmm=!R_Rj6+c*9kf z*#!y2I+yP@nzHEE_isxcZJU8YvqxontMlPbFh>XH-<*-WOAm~e8gt1rv@_cVa=Qfj zLFR_|^Iqp~7q+tvPHc`p&dt2bm4=BXr3W;mN+p`}AnYrYIl*Q{-M8RgZYlW;TNJG# z^$8mV28g$G7x@Or`y #^l1W$4jn-Jk K>{DDI^9v&>8ec! z_14`G40fi+X5duA?aR6!PL|_OF!e`d?1P~P<`QiFv7OqYv`20wF4uXX0rg+s>nCtp zi&;5iS_ZbhqH$Nl*gdDge`@$Ta~d&l*%l%A-g8oIdGM)qXE~fT48oWD#z`C_*qrtH zJI|`fp+2v&{|^ k}{=^Y~@(5_1JbZG7cc zicz3>9tXOM^}*d+D-s+$p{6P4E+@|=p-^-NDMFZ<7i{eo+j+SrvP#LTK+``+-S2w) zjVH23Ro~W4M+iix8((16rQ#)q5P&P-VT-zUR`lElURH{=tBvdT3{PcSrkL8bBUFQu z?Ik~wwHL<*{9GgU@Jc BT7W&S3w2BKXtcE24&(N0@(1hytEyvC-*`RQ zp`llTPI{V~;i7*kXEx`Ts=NHDk?n+`J)}f@%Xzcqul6l}p*Ok^$kR>=evsR3_-yP6 zEMr!|`?V^<;%r@_c{-%kP`S!MVMypwe^J)O<-GWkiB6#EtqLK$8o_LoK8qz2o7Gmf zuoGjIUj 0-DjmfEa zH*c0b$>!v==;$J=+KlJCb8h_A8q|(avsaR?t9Zl4t)YyWXAW9#S=TRSR)xJnyq4>- zi_aZ8*obYTzIND48F>{W4a>h}^PBE%+q~SUOeML_%5MDA!sBAE^MzMB0Z)nAcrAK* z3nlK$t#q&t7L4*s0<&k0GV^D_S}Wt|^G8sX(%R%#4Yi)j3<2SU+b*~M1?tNHz|d9W zulZN|RkC3VN(L~u@ysjn;IgD@PUqRJ$!<&d9etgH6DPw7eD)`YUFG1 67!bb$IFfLa$)vntWa18GdhEbIFekIlfQS3b=DJ3ZDKC z#*c|~<_9Cg9w#*H!l`!7PDMSTrzuAB6{{THIQK!f@__2P4VsVg%)yweF)IeNy5q-| zkcp9x@^*awU*ks4<$VSD*Cu~?x^CHb+cWRylM{8Yr)XX43WVG7*iPo77H9na>1#Qx z=Pf1x9E_d%B77tPTBaqvbZJ&Y-7129yw+U{%|+L)O6>FDpcl>({r#;(UUp+MTze{d zEs0?&rS-Jb*0FOMDiKRVvXJ-b+1eWN>PJp7DF!!z+h@gA9!GQ8(t^B=;5O$9(Geq_ zj6&MDlaYHaZ`U+u#;S2ifz{3BoS@Dt6a$};*#07BE1&HCFUiQB1-8c}<+~y&2VAyq z=zb<<={kg1s)Q6}%a^3D 459LmLC;u5+6tAQ{6@s4kYjK&d(Pu) z!X3B|L4%w*-B;eH)j8lX&4Wj&l{?1sy(%>Kt4HUYd0ls#`2}=mny+66>K(u?htB3J za#t$?!5@#2fQ ~+*obYg_h~&9ZU_*?qb{pYt#X>OpT+XT9ez4xqfHlXmJHqku8cFy zkLR@s``AtUn)N^SVfV;ogdo?$$*@hy5`Wo4s$osit+2Yc-dIPc(A?vWF_l~-XwB{W z<$!wZ{m)mckLw>r{rqhhp>y4H0O5V2_Vnd@#xdBvINI;Vz>Yslcp!1(7F;wh-~3TM z35iNR5M%Zf)V)h3A{>(MS}qf2k(7NH`8_8CqHvYYJ+|!<-Hw(vIEE(OZx5%-nP*i@ zbIW#VK`Z{{z?rbW`Ln|9las<+n!>cpJ7;8@KSrrW4)LFItAF1ABMEYD08QohfA9D2 z&rPj7gz`V^K>rmPI@N#3s{ZG)g2cD~P}=@!_Fqwxeg4l(N$4J-kMnB`L2=hq-n?Va zjB|Ojr6oA4aV04MXN&AjC?8s|yGrM>Sm2qA*^P M@uY52c=@%|cQ= l z%Gx5IFY2x+c2v9{9$UoOAtX5< MB99g1h~F*-u&kG}a-$fc3A zrcbXU7Fo8QJ^=4;#*OzEs4`xRtz_SWeh$Vm?h~dhZ&VJYAt20IPx5D~_ocks%KA@x zXO;gBCcq;1^`YD*lo{MdpM>eM_e|eBK7=uN;ED20k~>ATa<7JsCGvL&^~QMspEyPX zS&tF*aI}99Kf5hGxs?ByB8TJZ07JWtkSDo7c#k&~$a(n)ah$Vu2J2(~=k&HBG5d(- z6!Y=Ha?;;1-+s82>uH>5oo(N}0L(hbLF?eBJ`~3EXK2nHUfSAT9kspW*=t_4pu=!n zzT|n5MYoX#;?bcP2bcf&RF2X#n;GHvj_n4kdjC-B0)ufuFg$8u0M0Rfg#e23*!WY_b4)%XkWb*H$R{J&PWqW%;I7S)GFs*Uta<5^%zxYH5Io6#=`1 @xW&xv%e@tY*}eS`O{*KGfAUnnTP_VzK5-E>=Tz5KCK=#$mZUP{~aFlDdl zpQRfv1 h7Aut@vKf7|w+g#{2J{A~u@TKbAs0uYU*I@%(_U zThMtY4L5Ik%PlDOPD2eQ3I+#&&7()pyX%Dk#<)2wt_tk>=i6$+)*vi?Z;q=Z6|Dwr z8cxp0;+__Q+br#pF0RIY`co+}uOlCKEJG%ZN=P(8l9e8&$^2{1;-3f(idAb0Ig8U{ zv2?YrGj@2%0 t;B-2T2^MDf;!!4`k`UxF=_YlN(`OXq-XA%RIIs;Wp06z(`1NOp&nz}7 z_~{WT)db*>@M5mbfj^9>E*d4)(E_c%!Z(EuuzJ+NcK)#uZ3Zu>;4$@B*r0-C94eaZ zllv51?3YRMmM?3x=GbbY>YCfkO`)9PmR|WvPa;=tx9|@W{2vKK`?t%QA@jK8lP4Jt z3y2KBaQ-=wWrYKPI&+scP7G|5^3F%2nxoA5ZIloaV<0m}BG7sN1KEPB5jviC>}}-j z@I1kDpG3N0F!VSOY;+$-^JC5t#qj*Gpq7m$E{PX-yn%sG963k!A+#n`aSM3GLVry$ zczXI=X_7a=j?S?amcqRsQl3*^^0P)#tKdciL-KQ<7FS5pY`Y0Dh~_oFNl|PpG!a11 z879c%fMZK2VervjkEAuBE1?e`JQxTKv}e4}0woXlNAH+>AsGBsZ3)=HU)^r*N;ijc z*yYn {J$nfAKO#N# &tqEKJb(IWc?_cvWA4Ivxl^ME*jT0B0vVRj&T_ zK8DAB>Rv$*fm8}~cH%%)>pHInCJh=7T`C+~ZW!*;M8=zTh?S)?#SbEJYN+iL(VuDw zZTI#hmt@GFRm20t$o{H`8BP9odTuJq|24v8V@c_$QhIdG^?I?sP5db{DRl_vPDR(5 z1BeJA)YvQJ;Vr7EV_o(L!A37;-|zVr;Zpa~8(DQXyxI0>9ga)!OQSLxBkZ-@8wKdD zan4y1KBC2 _dMYp-H!o<0-u>oBl-OgKj!}L=W z44wz!8}SB`xp6=d7Uji(Zb$U@6zR7s4c96sn*R>?LGj;(RWlFA&O$k;)WJ`jXwK9t zlr>~PRy-{g$;4!JolaO&_fh)$XB*FjdbU)6_@L;3G;+V&dVN*e-Pf{Fgx6_Nk8Z@7 z2#Zf+8~F1?eic|R-X<9?Xc;b_4bGkrvq>O^PbdVo7-B*jg7&7X(>wJD&*@n8c;Ca1 zWw5`zB?$8U{nq+;CS=7whuWA*2AZg5`R`atd{OylmER1vpf{a(b{ATp6L1lbu=Xj5 zKXFUy+zl<+NtdC4EAU7vfa$Dyd?y{p*8LJ%pjq{df=W@T2_GHkWOX_)qf?QX*%HoY zEQUZz+P*3&IG0`B98rSE;!~AH7dgxtGr_{A3Zk%2bq;Je*!T_w8Vm;DRyTh11mF*) zXlFby-LsH)TAA4$(TyNv>m@UpFJ@IolF;i81+*&rrHl5;vHyWN{>W_6-_hjh$a`~y zQBX^$H2jX%jZh?n25$Y2j(&gfiC;r(#ZX){#q6}AFblL&pXaM@6tg9GA=)8h)KL*Z z=`T|i;*QCj%M<;B1|J>$IbNr4jNW*H;Ks=zb>EOG dnR1* zd^|Zz2zXw}0>d*|wZX0;A(119iy^uXc6=V=A%FW4ncRE$*ZCn}WHyKBUmOs9#0mni zXLk68bRR0H>vGIw;$63#t^OXR7_CgSUFJ7v;bIcbIyrIa?h%9D5;vd;t}Z(h++U4# zjeiYsH4V%VJ0Wi6tc)9o^oyv$o<#I2Y8NA};;d)7q~qp@Z)EN|-E^Twk)c%?l5Nh!ZE6G>GzEC&r>)31-_d;vQ^CiI9uej^#G^ zxr43Koj3<(FNyKFkCk<>Na0A;rxk;TO3hcg|0=wb?%(ZGbFjtFw*F^e+n<|o`ofQm zBYjo#>)j!VSJk%&K~Xzo{xuT7M+Q(2KD}uL5EFlv3FRBW|wpH*}nlug?Wfr$W~sP1HBMv~8%hKbHZD z2!EZ4ls)A&Cns3k(mQao@ENjB3TG(efu%^u7e*uf((y!?AuEg~R12xGU{Bq)zv~2z zo4oqp*@Ko)v(Ms7jM2fm*qZR34V|5sY= zHc!I+1uK8f@dIS_trH&J(W6eCGsBU{V;V6iQI#^D9envAe+qFW%prZg a+VEfi5OyV)RRm@y#h&A2V{U zqPH@$JYr4@pZoC^5(Wy89xotdRv3V2d>F)ToKCPU$L~5ht;GH_y9^5dnO!oBN)EZ> zi?Lu$6Kv6#9Dz_?USOu|oXM_Y29n8%`B l*p^Y-O6%oB7U59#Gp!XWP=r} z4|FIdAv%BuM?s)<&xG?Y8x b zh@>a>188v!;#?2eor-2t1T2x+ZgEZFupZ8`@U;e|=;K?$jcypXm~ez)8T~BIyVg%9 zY@X!+v4BL)#;4eX_^WS<6P=AcMGwvy?qIN3K#Cj6>x-sC!Gg8a2oSY1OZLFtk-JRP zOX-!b=(1U}9i`Tqf)PTMi{7vQ9S1d|zfRrruN2m@yIlM_m_6KJ>cA(?(6N}o-{?$; zvkq}i0U=$;P@TJWq$6=)t)}`nnx&zu>z>q2{Rzqf67Or&bDH-|UCyw)nX~{Wj8KF$|A_3Ap z?#=bVH^cbX05#?WzFg~7yfdWXI@^CI3PI+-ZXiw6@QcXSx_8Dt8i1@jJLU>BR!}lU zUsRCKf)4L;tM@mMFoizXS#<6$=jMx?`Ahz%3#NUo?A^;Ttk00^R~CcM!ae4O`=EOI zcY{{cTdncN3@($LF#-r^1})%jXl}=c<03xke% V>57h}tX4|dac;Az&tC)bOoMrx!H+G00x>^CRw=c&wCHU{-r+M+$ zwhdV7iV=}vu714c?ZtYgopFaOYB9YtjWZ{ZR$bLYs+&-!T}ELmXoI+d`wqG{7VzNi z%3cNteI`&z>p$+_ySX=f+rOVnVEuVG81i(l%>FpvG@ovoIn)u!uY}~qZKoXHfIB46 ze8!O*V=gZ9%DmFzP;kO$$WE(cx=f}@8{GgfYIV)39WKnDFpwof?|IM}KipXDkp_%4 zA2pMo1r#8E$~}rzCS#HT9_=-QX8Q>c;!eyZP`1w;+;T0kDQ*)YBa!r7976&l `4vFYVYOVRK8?1=V3=j7p!K^dhGpD%OXW1;lEzTK&-+) z?sI~luIj!Hripj55=+%qPS!3-qC#yFlcavw^4qLOD-Z*c--CE$)@-KCH@{$rpDaNe z;R$yFDaNv0em_q-kIC5D^+$q1_k;Ut>ZLyC4Yw}CVqWDlm^FxW!~C8!tDWH))&AIz zoF3iu#O@)EjoqhCD=FQm;Y@QeE4MVd+*^eKa^?WRtoLmC`gm6MM)33lqCYUr>EgI^ z8pVlXdV_`^Q4(Wa)M~}1rWHa1%ArX4(&lQ<#R(;fQRNE*cJ;<#dkWD9z4U9M*7N6Z zzj0Qu5{HK2Q~o#wt+$fJ)X`kBfa`y@Jp~AV7X}0w%f|@Q)Y>{YQUIs`qzksX8P12M z>hfCS9YeK?(RY5?^Q!K w4t!Uy5WLhXvK5$ zMIg8u%HW1zL;kFD?!@J@-<|k{AQBS`XfB##ZS8{5cA(Jx=hFptC4Sxa%KF~HQ;O2* z(1uS(%s$$cMv_!-CzCF}fGkp(E_u@*c!#fCFD=h3kZ+Qo8n--33$Z~xlrx-8h*#&A z6!NlmG43~S-3S9h_JM%F|IC5E77$^3mMy&=voj3S9AL%+^A%01TTghqFlLonC4BJ7 zinq|k#hRbI AUG-;!vuZU_{`kXfS4;QYskQ8rmLRBoruVh zdGwW=nsT2c;t^3g_)ODn<=}n%SC`L%u&{w!`E;&Q&=Pcjmrw9Ue|(ucGw#{tu7{EL zBiFhD+QUb4Onhd&cXI>9B2< 58ceP%UAp%zTpcLpzo=ylEOQNvM$dH8_yEFBq5%-8FGwr=mF{_Zo? zbkDc gBUCp8y^+fT8ND;x=l#qPA*Cu{xJt@%EtP~-$dwi?9 zT=kSpBf6;r<10sGcCJd>IPk}3=O`(IZ6%c2a_K>>=OY&;Ql5t+BA>9zwJXpr4IEHk zkETs3yNfms^k~m;Bvr%D^nX-C@S pBpTfHMp|QP2*5rm~pBX7#?t-MrBX6(Cs_@4E-Xb};~ zj|mXlvY7K5dM6gH&oi9JE^g=0LE9?!24}DNg&0DT-9g`8I?lwH0_byN+E2zPeG6?T zcB?w8ewOarCtf3@JcDNdtrE))kU)}Wsyxr$+PcQ-04Sb7L@W)mf#|n8Gc?0Bo>bgD zwcB$2s_sa}y?7`C_^-u!&|OLe0)g7oNpLiophQkL6Up_ETng_<;l67iGyBUXKI@(w z=-XQtx9^f08CT9XYG|^39&SU^*Pvf0J8-b+tskZ$^Dk;pIVX)zvpD`owJ)sftLsa^ zPN@8N%!nxQ=w5o&*;)TWIm$}b&cy_4fOmu9S_FvqMB)&}Y|6dQC01-~DQ%*z%|77H zzwfq)xeU)FxWyF);RkdzdmmS6^;;b&A)Xz8rSx}3u z24g6dfBlHC-HW6g7od%9;iY|x^#?mpHF-Z-EMjx#VG+e;D`YJurf8$Rtu`}bm>tb> z)TKYi2f?rR{1d-|O9C8`s)o=0vtsT2;Di`={EcXsY1?c`=+|GfbQC%I;p}@UuV!!u zzUHRi9|)b%Y5cBrJ8Z;Zt}tO`kuiT1%1pDd50-F4gru%{lW{cb!m*O@3`QKJao zBPI{^E@nOfVi?th2R#-B9KdC-dHZK*Z!e%-ZLNXiu zOGaNAWecYF-+L7_XG8EPN*2yck&49>R`u!C@SIEs^`9)Z=lK;}?bA8xc^> (#7BQWQ5VNSW6t+9u(3} z@v@mWN&E1jkR_;NJ~WU&1$=L$o2uc2hX@#92!qp49~-rLl}#qk2rhCOfJdN)(?H~x z8k0)VW3MwEr29Fqy;-Va6xDs0yeN(@-K&1SH;V#TOu=^-z3t x?nJ?16|Ni%-5$o^z`0pMb{_-vg>5u08Uy>s6*Bt&;tv}i&m;e6|H2Uw? z5R|<6Uri+Z|EoEPLZyF4j86m NWc`8 zR=;_5S|BJWXw190Zv7UQF|Ewk?7zdQM&~pPm$E(CKc8L9QoGGRUW%F5xHuJMesrXz zT`DzG`k#wak`e!a(`rTxp4Fu~CofEhObKKm0N(#z;fDMd$17+%Di2PIm8?H*Id4(= z56B0PY2*AI;$-a#Rvb#lx3DHtZgT)n6YTuIk0IgRU!+o|SzwCIg5;d))0!LU%<9?O zbI-6} roNz0>{QeUNJWsMEw6dm;>*-$X`IJrVEZLb{rbL@;UMI zte}#F_QkzeFuCH$2X>68JZ(!v^bu0+6u$az7<7O|>L24tGn3|Zo(e?{#a$liXb#}l zUN7RJF)k91f8q#uQdY1je)c~fso1 )xhHyKO`0pQ+P`?v- zKTc7mG5IX;RWW-83dUQCQEbOdOSPhs&G9=E><92Gw8&ale~S@!EzlTbyoH~YIr#37 zb4Tj#X$&@()f4@k%A!Acwv-KV%!NcG6pABxpH2HPF97wr9McEKSjTzh23z4*)NWy< zGHAMB(YOtBIA!(cpF9>M-@#IzI-2~&WDCI@spDf_EXSy{sp<(pCeWaSu60@q+vmtg z44QWjdVc~xZu@GO>-(=Zx-pe9)c8&1*1XPr5ESODn=bk#VFSZk2gk(-1I@{!w^<{l zS*4K!JZlEu5fQ@eywrMBu!CMs+p9m~$qPX4cwTO(fjBCayxfb$N8e=@%Y3+Rs0!_e zY^cBez>~>kYdwg_{yWcfNllK>8Xiz}z*C8Rd1>I%Qp;l9f=ekk7Mjb?4T<-Jn802T z{e!X;6E=8wtpI)U^g|}mtsJdkQ(eqmowKnFy1$E44{Q2liqO#s!my_T_y;qy- (vk;HlTaXKPuYW!li%Ez%YOUfvkyB(j_eu&LH z*~&JZFn+l}O~iB=t&TKGpojk#0?Hx&K_pHZh6&To*Ypnhecs2l54@W$??iLF_uN?< zAMSyf`tX>3BB9wF`QwW+US8 1d5rDQ7^|;JAh1F4B*_JAaKWM_A#)6N2+@r0qJ89eB<=Vg$c4O z`ELE1f~%ysRz@^^um;YV20KM3VSDUKFULm68txcqUSUJ}8gM1t9QdG`GWCL>#DnLU zTjhLg4}o83N%m5xRJCIM@OPCz34)iF*EiQkJ#JeS^2WRRAD*pl9A%%8s#D(bObwil z7|U`!4wbm~^M5)bWf&`TVZ1ieR92KIkh3)4H@%*PYsEz8Af+~gmqGSXQ9x{;H-BUI zV9gOvR-TM&^ESngfc_Nxd`>gs)AbFu>Je{&RnyL`iMh}~!5p*P!%R4Amz9ST03hGh z4hL}39N2eDHS`hu(ELvIv)Jvfg+fs``;FZU^T&6l@*Sg}53o9OW}o*FA^ KOIq?37<~+JFQFTbJ zAM;N*@RWH ~^h)q2Q~J@9t^V`EA{o{3#Gu zpK}P&MzW_?lS6oKm`+^IIWuL%{Bx$jeTja;>D1r7s{NPn%o1a?S6UHmJ^*J;1ed+N z ; (G+h=3 z1o&q(3ox+*Vi^(i5g8O2-{gFuTiX;RRO&lvox4kdDMh^GUzrZ_ B^gOG|qj7`f=n890v6nU(2ZNZ1*c#mu^8xIRe@ }ulY ztuLyKgB`9XHO{wswU11fKI_%Fj%+s8ao@v|G~Y%CFdR4d%@h7?=qZeOFiSH1ZreP# zeBCqQ=XS%>viYRp`+geu>nG*&=sdyZiTs*F{~RG=<(ivz!`j&n&L^B0D!H)rDsN8j zUQy46qo|cSQmweX0cF*)$SerHR|E<%I?AkTh^#Pn4u;7GS@GoCPv=AP65s5NyUSsT z w?}1|c>O{% z{4XUN7K0BhWi7~FFPX=;T9mvPJ73W>W?|0>7!1_ZN$|TLAq8%B(Ydqgk_4c4UffG6 zWeu+D_|m77)XIv&Q$mxhu^l&*LXaIZdB3$=i_i1fOJHB$`L>r^V0ET;-A3ykC_m=> zywD+3?ll_{Rkyh{L}Pdfv6IUdGW?+pdOhaF)7c!(6fSgBnokxTxkzd!FdxWpIfuP# zVZi^PFN`Rw-6eyl$YN3v>^hm;Evt^TLJmgjtY}~uHJG1hF=c@3?Z(wYsbSgfaIVoi zrjU>u9|x2O>+2S^nduTA=OX8o&t2z;MmGn8WtKa5tXqX&1xMz g6qKsx729ET%K`K@r|Xtz5RYwqfB~ zWvckV;mb^XC({YU1@q`~84;3Va)w#Qu}ufPmvkeu4WM+-3vAC$CKt?T@TtX3%kv`K zbcsfP_nMrM^-%rjzTcZvg7_CjdFot(D=R2aG$U`GABx%GpBQU&)<1Ow1h}6MWCDCX z5R>QpP<*1}l_S01if^ZIz+0AEHUQIv(D>XoP=#)ylSMOB9IYQpi40|-!cKSYZ)TUf z!nQv(A2^bwt3@>e3e{(jhaAzlnw>#N_*tgc4AeyFPUc+ZK$oW3+qTk8hb`tf2}yI2 zQ%`E@t$t&nrEGBziO^C1=W5>>v;8ymn|V6Z(N`7+jT(bJ@UZ%us>K}Dz;CX~B1nm- zjJoYlL`5;uM)>MhZ^y+<-pfYWR~lW7syYeR`;k4AGYEB8En7_PHR5BWJ>cGqSp#D; zEi01^>(x(Ygi%eL?NFWi24Oj2$A!rCWI{h!NG2znR9tMjGVN;fb=tZ6uVz2upf0<+ z3jisM!y%V`0=uLej_o!insse0$k|0suRZjIKGV=*?g?NjX9fyI8jzz0iVVg_1e$|6 zVnbvZn!QV0R2{t_ElrRrMP#TRT %%Knw1EUEGkEgbt!e$9-0*R;Qy$b*;mW-p-)68L z_tY6bs2?c=Lk`?De5CDk={NNLZ65_#vTB0ZDlNU_v(qIbNXV4VZZ-Jf4#d7b12V-M zj*P-fry0u#WDYo6$GOljrT u$Z+RayQ zG6^%{PwKsr4a|clsNfj>NjMTZZ7j)7YdAws>}%{pW `U?V2mBhN@P zo|zu0w0v5Bj|o?69azkiz3DZI-%G`&J|S0gomt-o>08h%x=>Lz(Gh23oNoaWrX9zi z3L0pUT-AzbLlw%-s6Wdv0O5*rb$vJ3oeoyDt0qO*cafi`BDTG~#R1uS*-J+9sZduX zId;{JOytbVYK*xFmp0ln`B_lKKPgz>>g4)bt#MwPglA`7;L^E9)FUtl(N-WsK>fDQ zMfwZ4KJ~p9c0qYcq%p&DK>GGi-U-;$=zTdmJYyarss@T?btwqe*4Oh+cB7T_v7p|H zIFuehp&)+ ;sIvyqsN$%1bUT*EN@2I; z!R;;lywdH)LPKYd9r#M`A|0r6)6VafBqEJuQ2EScKWvSVtapf1JNw|fSoNcf)hTLy z=IYY?`5rE3N}HIp7j;YhJCQHeyoKh%q~dP$?;SI|8~dgzGmC2llAezThZ5|7Xq(9hr&UIBA2KVUjMqi%FNGtn#uK)^5gOX#Bs(A~tWLNt)Sq>C$ I2Cgy@ZKmaOSiNu5`(*R$d1b)Q6EPT FBg`CFN%QLU$dt#s zU&|t{8_ZhNK@A}c>g=ztM~;+l_&M9Xi;mKl{LWn86!u3^p1f>G4n n7qvxoFDrg2ODA68V8>izd!MY02U$saffPiO4&ZA zAa*OUnU+MP8Zrm(q8E=qgJtusPF2~FpJV&7_fhC)fek4>0iPZQMWWLmHktg0wcB#) zry@U5+~%*^+ww~Dfk)Mq+r}HrswmNf|7KbcA47}~MW=e?cdi{QR3TP{%Qh E%%4&X$v-l9f_`SVUgP3Tr?+ZcYrweMWUcZ|?ba5 Wh90M3C}9C=olmJR-jM zfu4oN-?_IcS`M>D$UV> #|3^YBp>g&7=7og33Dh3?Ckc=a6~R?@YX+^q@vhrp{Go2S3UypDwwMjHHEsdD;L= z2c39}tJmnnq$mR79LwmR 1Q42Z1`vlg$nTOy%O >L1bw6S6_v12Y*U5u68{T= zce-cFYpLJzPo?9m-WM}X>>9YS>2 X={7B5X`Uax~4Vr2W9UZ**U$~siMpPP$G zgP;7o!Di-~zb)sl3Aa9`?iIvo^1hq$isZxPNT@c&gr8?i%eP)VzHgltAOl|Y13dWY zalEepz((VXJXn}T2X^M*J$Vc>`E