From 42ce26997d02624846407d66df87b829096f80c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AC=A7=E5=85=83=E8=8C=82?= Date: Tue, 29 Jul 2025 10:18:40 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=B8=AA=E6=91=84=E5=83=8F=E5=A4=B4=E5=8E=8B?= =?UTF-8?q?=E7=BC=A9=E5=8A=9F=E8=83=BD,=E9=98=B2=E6=AD=A2=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E8=BF=87=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smolvlm-api.py | 124 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 114 insertions(+), 10 deletions(-) diff --git a/smolvlm-api.py b/smolvlm-api.py index c9ba7ef..ac17616 100644 --- a/smolvlm-api.py +++ b/smolvlm-api.py @@ -1,111 +1,215 @@ #!/usr/bin/env python3 +# 指定脚本使用Python3解释器运行 + # vision_chat.py +# 文件描述:文本+图像多模态推理工具 + import argparse +# 导入argparse库,用于解析命令行参数 import base64 +# 导入base64库,用于图像的base64编码转换 from pathlib import Path +# 导入Path类,用于便捷的文件路径处理 import cv2 +# 导入OpenCV库,用于图像处理和摄像头捕获功能 import tempfile +# 导入tempfile库,用于创建临时文件 import os +# 导入os库,用于操作系统相关操作(如删除文件) from VIsionModel import VisionModel +# 从VIsionModel模块导入VisionModel类,用于处理视觉模型推理 # ---------------------------------------------------------------------- + + def build_args() -> argparse.Namespace: + # 创建命令行参数解析器 p = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter, + # 设置帮助信息格式,显示默认值 description="文本 + 图像 多模态推理小工具", + # 程序描述信息 ) p.add_argument("--model", default="smolvlm:256m", help="Vision 模型标签(ollama list)") - p.add_argument("--image", + # 添加--model参数:指定使用的视觉模型,默认值为"smolvlm:256m" + p.add_argument("--image", help="要推理的图像文件") + # 添加--image参数:指定图像文件路径 p.add_argument("--camera", action="store_true", help="使用摄像头拍照") + # 添加--camera参数:布尔值,指定是否使用摄像头捕获图像 p.add_argument("--prompt", default="", help="首次提问内容;留空则进入交互循环") + # 添加--prompt参数:指定初始提问内容,默认空值 p.add_argument("--stream", action="store_true", help="是否流式输出") + # 添加--stream参数:布尔值,指定是否使用流式输出结果 return p.parse_args() + # 解析命令行参数并返回结果 # ---------------------------------------------------------------------- + + def capture_from_camera() -> str: """从摄像头捕获图像并返回base64编码""" + # 创建摄像头捕获对象,参数0表示默认摄像头 cap = cv2.VideoCapture(0) if not cap.isOpened(): + # 检查摄像头是否成功打开 raise RuntimeError("无法打开摄像头") - + print("按空格键拍照,按ESC退出...") + # 提示用户操作方法 while True: + # 循环读取摄像头画面 ret, frame = cap.read() + # 读取一帧图像,ret表示读取是否成功,frame是图像数据 if not ret: + # 如果读取失败,抛出异常 raise RuntimeError("无法获取摄像头画面") - + cv2.imshow('Camera', frame) + # 显示摄像头画面窗口 key = cv2.waitKey(1) & 0xFF - + # 等待键盘输入,1毫秒超时 + if key == 27: # ESC + # 如果按下ESC键,释放资源并退出 cap.release() cv2.destroyAllWindows() raise KeyboardInterrupt("用户取消拍照") elif key == 32: # 空格 + # 如果按下空格键,跳出循环,准备保存图像 break - + cap.release() + # 释放摄像头资源 cv2.destroyAllWindows() - + # 关闭所有OpenCV窗口 + + # 压缩图片 + processed_frame = process_image(frame) + # 保存临时文件 with tempfile.NamedTemporaryFile(suffix='.jpg', delete=False) as tmp: - cv2.imwrite(tmp.name, frame) + # 创建临时JPG文件,delete=False表示不自动删除 + cv2.imwrite(tmp.name, processed_frame) + # 将捕获的帧写入临时文件 img_b64 = load_b64(Path(tmp.name)) + # 读取临时文件并转换为base64编码 os.unlink(tmp.name) + # 删除临时文件 return img_b64 + # 返回base64编码字符串 # ---------------------------------------------------------------------- + + def load_b64(img_path: Path) -> str: if not img_path.is_file(): raise FileNotFoundError(img_path) - return base64.b64encode(img_path.read_bytes()).decode() + + # 新增:读取并处理图像 + image = cv2.imread(str(img_path)) + processed_image = process_image(image) + + # 保存处理后的图像到临时文件 + with tempfile.NamedTemporaryFile(suffix='.jpg', delete=False) as tmp: + cv2.imwrite(tmp.name, processed_image) + img_b64 = base64.b64encode(Path(tmp.name).read_bytes()).decode() + os.unlink(tmp.name) + return img_b64 + +# ---------------------------------------------------------------------- + +def process_image(image, target_size=512): + """处理图像: 截取中心正方形区域并调整至目标尺寸 + Args: + image: OpenCV图像数组 (BGR格式) + target_size: 目标尺寸(正方形边长) + Returns: + 处理后的图像数组 + """ + # 获取图像尺寸 + height, width = image.shape[:2] + + # 计算中心正方形区域 + min_dim = min(height, width) + start_x = (width - min_dim) // 2 + start_y = (height - min_dim) // 2 + + # 裁剪中心区域 + cropped = image[start_y:start_y+min_dim, start_x:start_x+min_dim] + + # 调整大小至目标尺寸 + return cv2.resize(cropped, (target_size, target_size), interpolation=cv2.INTER_AREA) + # ---------------------------------------------------------------------- def main() -> None: args = build_args() + # 解析命令行参数 # 1) 载入模型 llm = VisionModel(vision_model_path=args.model, stream=args.stream) + # 创建VisionModel实例,传入模型路径和流式输出参数 # 2) 获取图像 try: if args.camera: + # 如果指定了--camera参数 img_b64 = capture_from_camera() + # 调用摄像头捕获函数 elif args.image: + # 如果指定了--image参数 img_b64 = load_b64(Path(args.image)) + # 调用图像加载函数 else: + # 如果既没有指定--camera也没有--image raise ValueError("请指定 --image 或 --camera 参数") + # 抛出错误,要求用户指定图像来源 except Exception as e: + # 捕获所有异常 print(f"错误: {e}") + # 打印错误信息 return + # 退出程序 # 3) 如果命令行已经给 prompt → 直接跑一次 if args.prompt: + # 如果指定了--prompt参数 run_once(llm, args.prompt, img_b64) + # 调用单次推理函数 else: - # 否则进入 REPL + # 否则进入 REPL (交互式循环) try: while True: + # 无限循环 prompt = input("请输入内容(Ctrl-C 退出):") + # 获取用户输入 run_once(llm, prompt, img_b64) + # 调用单次推理函数 except KeyboardInterrupt: + # 捕获Ctrl-C中断 print("\n已退出") + # 打印退出信息 # ---------------------------------------------------------------------- def run_once(llm, prompt: str, img_b64: str) -> None: """调用 VisionModel 并打印结果(支持流式或非流式)""" for chunk in llm.generate(prompt, img_b64): + # 遍历模型生成的结果块 print(chunk, end="", flush=True) + # 打印结果块,不换行,立即刷新缓冲区 print() + # 打印换行 # ---------------------------------------------------------------------- if __name__ == "__main__": - main() \ No newline at end of file + # 当脚本直接运行时执行 + main() + # 调用主函数 From 67509be2abe91eee8be333bd4368fceacf22e317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AC=A7=E5=85=83=E8=8C=82?= Date: Tue, 29 Jul 2025 10:28:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0:=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BA=86=E8=AF=B4=E6=98=8E=E4=B9=A6,=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BA=86ollama=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++++--- smolvlm.modelfile | 36 ++++++++++++++++++------------------ test_image_512.jpg | Bin 0 -> 62036 bytes 3 files changed, 22 insertions(+), 21 deletions(-) create mode 100644 test_image_512.jpg diff --git a/README.md b/README.md index c0a0099..df28f26 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,10 @@ ollama create smolvlm:256m -f smolvlm.modelfile ``` ## 安装依赖 - +## 安装ollama依赖,用于调用ollama模型 ```bash pip install opencv-python +pip install ollama ``` ## 克隆仓库 @@ -104,7 +105,6 @@ python smolvlm-api.py --image path/to/your/image.jpg --stream ``` ## 参数说明 - - `--model`: 指定使用的模型(默认:smolvlm:256m) - `--image`: 指定要分析的图片路径 - `--camera`: 启用摄像头模式 @@ -115,4 +115,5 @@ python smolvlm-api.py --image path/to/your/image.jpg --stream 1. 使用摄像头时,按空格键拍照,按ESC退出 2. 确保系统已正确安装并配置 Ollama -3. 确保有足够的系统资源运行模型 \ No newline at end of file +3. 确保有足够的系统资源运行模型 + diff --git a/smolvlm.modelfile b/smolvlm.modelfile index 179fefb..1af26f7 100644 --- a/smolvlm.modelfile +++ b/smolvlm.modelfile @@ -1,21 +1,21 @@ -FROM ./SmolVLM-256M-Instruct-f16.gguf -ADAPTER ./mmproj-SmolVLM-256M-Instruct-f16.gguf +# 与实际文件名完全一致 # 注释:这行是说明性注释,提示该modelfile应与实际模型文件名保持一致 +FROM ./SmolVLM-256M-Instruct-f16.gguf # 注释:指定主模型文件路径,这里使用相对路径引用当前目录下的SmolVLM-256M-Instruct-f16.gguf模型文件 +ADAPTER ./mmproj-SmolVLM-256M-Instruct-f16.gguf # 注释:指定适配器文件路径,用于加载模型的多模态投影层(mmproj)适配器 -TEMPLATE """ -<|im_start|>system -{{ .System }} - -{{- range .Messages }} -<|im_start|>{{ .Role }}: -{{ .Content }} - -{{- end }} +# 定义对话模板 # 注释:说明以下部分是对话模板的定义 +TEMPLATE """<|im_start|>system +You are a visual assistant powered by SmolVLM-256M. Describe images clearly and answer questions based on visual content with high efficiency. +<|im_end|> +<|im_start|>{{ .Role }} +{{ .Prompt }} +<|im_end|> <|im_start|>assistant -""" +""" # 注释:定义对话格式模板,包含系统提示(system)、用户角色({{ .Role }})、用户输入({{ .Prompt }})和助手响应的固定格式,使用<|im_start|>和<|im_end|>作为分隔符 -SYSTEM "You are a visual assistant. Describe images clearly and answer questions based on visual content." - -PARAMETER num_ctx 4096 -PARAMETER stop "" -PARAMETER stop "<|im_start|>" -PARAMETER temperature 0.01 \ No newline at end of file +# 配置参数 # 注释:说明以下部分是模型运行时的参数配置 +PARAMETER num_ctx 4096 # 注释:设置上下文窗口大小为4096 tokens,决定模型能处理的最大文本长度 +PARAMETER stop "<|im_end|>" # 注释:设置停止标记,当模型生成<|im_end|>时停止生成 +PARAMETER stop "<|im_start|>" # 注释:设置另一个停止标记,避免模型生成新的对话开始标记 +PARAMETER temperature 0.01 # 注释:设置温度参数为0.01(接近0),使生成结果更确定、更集中 +PARAMETER top_p 0.9 # 注释:设置top_p参数为0.9,控制生成时的概率分布范围,值越低生成越保守 +PARAMETER repeat_penalty 1.1 # 注释:设置重复惩罚系数为1.1,轻微惩罚重复出现的文本,减少冗余 \ No newline at end of file diff --git a/test_image_512.jpg b/test_image_512.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57cfd52257d58bbbbfde3fd5f14c32af1a78c5ad GIT binary patch literal 62036 zcmeFYcT`i&*ESrwbU}KHib@j@qzgnudXwIXNbk~HAPNG~J1Eiw0@9`TUP6)Hq<4@` zr~#7j=DvUBdA@J0Z>@KIf8PU>Oit$Pv-dSQGkdPR&+YHqRZ5JUkDWCDpr!`k1^@te z0E9Ty06c692m1%WVFD2R-39>kaG3wwHpAikcOP5;0QcVi^bfNG;QzZnR_5PD@!y~S z^-dHA01#o1;6D=-6o|+9R~rWx50L$z;{wl~W#jyh#BALENW=$Z&EROc3*%0 zwjDrq2N!?~z{7b6z@@^$qr$oE#>v5w5Cs3y@IPi?^~5ShbcdLP^ezAw2M-SyACCa5 zFScjEUsM7<6#?}F0U5%3n&w0gU1FK^z!!c^$Y$K5*qe7JR%`6 zDLEze%h$A=+&ox*!H>eC%Bt#`+PeCN#?G$po?dug|G@af^p`z2xZc=`M}<%DK!A{1Mw7_g z_1;6lk9TNZ#ec8pAZCBAbxixtZH$EOktDDgX$8Ugsc8^kmks7s*V%1#k=j_o{wcMu?`#rmu_zzfz=rbtvR4G{;%V8h6ke z-TO_BPR8xZiblu{oVS1zZc{uc08r(7CCg8wDm6}DuTq-kytcsi=}KbPLnc9rM+SpxFS_04~m zN;IAv)K!-zn&wOid&2em>EDOnjwyGT&ky}2+KZH8!FIu}{y>gS7OUKU6mWT%>YJ}A z7iUPhWc$}eEa_zHm_(VJ{$C2@y5^5zJ5emjF%SKZn*Xx%Kcb4?PUg~@CHqDAJHF12 zy&Xkwfp^sN`OgYwP?;JQXwS?JIhwEAwDEBvcHcDoyxuQN`j)b@szgjGbLLbFvkk!n0I z&8VBJjF@nOpiFRM99~me6bs9EaN@|SZXftQBI9>~j^T?+uK9+u{56V4Nni4dsa-XG zRM6c^pHOt%(B6GGl;#@Uo5Q&=5wVriKWsZ9Uc6CZ5`4k3mFhAy_qBdo=&Sh93);6r z-b0UR_9H6U1P!#qj3Sa)SVl+F*km|pS^0eX^74g(A~>_(eN6nQe0TKAkV=fZCWnRi zi@P7MwX_kZZzm{;XqA$_Xv)zHU@`bW=0#Ib%1vQwu8bxK47U42Aea{u_EReMb_~76 z;;Nn>LoU&_abk15Bhc2PHh-#JF?65h^v&njmhKVCar}~#0b-@vBC4D@5f&r@zcpX3 zeIT=l;8N-zdJLe^RHn&H0wigD9Oin(WYU*uDH0K{J)KdPKEC~G`?XNLFyC1EM3Ha* z_QN~w8gm2^5uyE#s$^Ta-0oUqYR^>5G!3c}@gZ5{;%DR@wh&<=oTIQgPRekzi-FU+ea#DtZG>7 z4*$YVVAxJxL zwDH(+dT?L+r-2bSb@y3bf6*J>mziI>Eog_3i9M~f$5!E!&8CHOJ9>M!0A465@V679tnQt&UkE1ew2YcGac^_K~!uIDPkpGxf&$L&kYt>ER}A zhr=y^rj^adK`Tsd$}>`NlPVb+PZp6 zH1s(k&q8UZZ=MsQ`Br&d;|LxB+)(5p+jJ;5h16tnteJLG(FB~S@ z&&pGK=E|8t;@h})>Nd&_N=q_Y-9^__+i)a25XlxqQnY6cr-Sdgsd|jQvJo>8C*}5f zRX*$DV*M<3KUP+^BC!YJ@tw0(uVm~<+phS##Q4Y4cX6)TWNdOQ=*Z-2Dz@sRl4o|@ z(_O~cxlPqvj^+){f9lJe2mtn0{cqLm$WBim*L+z*`^b}3TwN^hf~ewl0=;3Dr<2sP zYj=)arQAU?N+GWn?PaIG=iIrEomooBaU%dD%BFd5c*5mg*uj3=nG%c+aLtoH0V&_Z zhv#!Ee`0On$v`MXLU>o4sKM085v|&Bk3EQQs;JgeP5$hKZnA5fk?hi+NZ+Zn0%h#a zB&t|1TC8DcmOnuP5|d;}a&@tOk&fiCdxU$Wlg4mpP@>h6Jl8ufuS8~klkJ}VmcmcJ z@=qEjWX<8a87qgB(`dVu7{7 zmtiPV(axjbiwaYF5p|2n@eS8I6U%!pSiaYFN@^dINGz?^C8o1q~wz|ly z9iRYi>QoEh`T8hI6qmDql_fp!Q1}hSvj*XttT3R0BwYMWd1Pv3{?yE=aoeT-xdnpq zZeZM%m#&@xODo%4(b!o;K>74yN~X;|f3FLYi@y^b7RwjEGH>U(_)7YjI}P?O!s$pn zCBD+%F7JjSIbGnlfY0w$fT4$}UDxjXzb@)SQb)hyJXR<_^69a~3`37qMxt7u)|z^+ z3n6^WNK;N983rxx@@E$G6ZMD0mXtp@k77bQBEdIQm|-9(zNm;Fu7lAh$k!!eh#FD$CVc;9;RRr^0oTr`O>DIzqK$zUfnwp@v zxeAzMc_p-go|63(z2_s!Zo_yBFrsV;JTLkr7cNgFri(`c*e8-fYO#2iM-H_nGfu}1 z?DR&_4X)h+9wUL?NdYW^ey*+N;<|~82UiZrtP!u=8*YdXIts&y)aapOib~rK;deQx zo}VAYlYkSqxUfSm%1(R@tmR`Y9bH(GhnX)UJ4E$oTFJ+qYYZVb1yy0giOk-8cZnRm z260_YfCtR)r?c>yRXpzwD%g^&&kV;hpj;zPmV=ksJg{T1Oi}GHf-C=+i&Wvq0BFi^ zge;mSWe|PURYnrS4*oiC^&?i;p$r3R+32CTII@1s3}Wta&ZzJ?_2Gf=|hqV zbj!o^nFRBTIO_sj25m1fjX*W~>*^F`r+pnIHwC~M*d0v(IY%(fz*FPq|FF^7Dts1h zkSw<2(-|UfRs;oj3qkoTLIghHyTs?lvU{yAAtAdGW!3LerTqIA)RIXv|0uwa+@4YpwVBgp`=90Vv?Yz7OXV7$q6T7v5Y7#qzeK^1lc85(_%iZ z7xlDwKK!0T>~Pi!e`p{X(!$EU0LeY4V&J?%-B&I-LEhmNoumIYm^BW^bO-;vPhQ^X zfQXcqi<2FI$d%EIyiDlDt2wG8qmvChn!kOLF0`Exv@#So#_c zzr(KLU+UjG`~ua!z4{&G3Y#rw)&%zi0CO}f}Bueq&I zI@ZIz$iVx&KXA3&jUTEzCvED-o&nPiR+59JCq&2YRLbL@a7%g>(nP(>ig8y{?i;=s z4I@k_=y~NgB`+KGDJOzE@-M&jKb2PACp*ejX#z$A(3IoEPXj1(?TY7XsVZT|Ox0W+ ze4IZSKkiSw551j4Z<^(2scP0m1VH;2M$X4An9El+wZ9!{+viks^Ss29Br$o5=44@t zL+>&Z_5yS^CN3jPo8L}ax%Mc0=X#<{&Z}QQ*u(ec{l1#2)rhhhW)gM%W=$phUOA8# zDh;i*32w8~U=AE_gbnU^H@1F-*=s7~^jrAi@s<`w(3?&td_koyf%)jb0>0MsC;VrR z!J%!(x-PiJJJMpKD0hPImI#8RS{D)ZQqIsEH0I9cDtg7d;en+Q_ z$1R~7EOZ}wKfa0Y-6D@uG_PK3%|U0LOYyJP#q@rBr~KQY_VT&OSBAb*@N9V|A8S4N zqvxD`wJ4*(jRtK?$^-Pm3u>kMD#(noc4rKC1NR^cLXfl)1ci#4$kvYnZXP~fiH z{lu4x;=1rV$1Np!F~OT(!`Xt`%IkCQhgt=fC+dKyE6;EEj}$RXE9qOcDjBP;lbf~$ zHh<1+LLnkEkJ~07#t6SZk%hdaWiBh!+^dI&iyPs9cjAviSZ)FI!pF6#$6aQ}S-s_S zf25zeLd$nb{mD)NUZovZ8cEFYr__SJAXWXvwyL^MBi-{L92C7PCb|q+#B*S+`pMwT zg`zuk=5ZKf^j0X3w^>%(5%?h(^=e8|4YA$5Om{}BmWsLmO+R`AC%(dCMx^4v(egg$ zL9du*OwEO_2-kS2KBr-5KD(YJsajxLSa zJyk`N`nWw)3YC18?HFj8K;6Sn4L+|wAn{TZUP6m zlPPX-r8uWThAOC7kMpyDK|!*AmJ^!!tGb8HW=azGHfk#|U(r&bh#9f+i0#}vMF9_I zG|aGTZ9F;oDaSPqJwZUYpuQe~rhX!UE&A}M-zZZxSfe2c5lD&F0V(V+)w5!+ts2}- z{=8Sh>art)HY(+Gjn`ft{v?t5~StuJgf6R9`Wv_;v?ah;T8GqdJwuy`7L-s`{0syKJf@H{Ne z^Kn-VP|-}|F=l>!wUKyf$8^DRe!;5YICBmpJEo(2I+&ZHIb+;_rA%TY?OokUZ6qr~z=hq%as9YjLypevt9XOlaR^Ho$#2i^(^8iHiJVMX$+eyKwM zqameGvq*}leoUBsS3x{!z&7~m;ED0gcOu#~*CmH86VRQfo$2;dF=Lg^M}wBh32GPP zH^3_F*(3Mf{gLo>(w9#<7?DcJpsn%R&uGdLMbRS-5&mloY!8BndH1)?gkz}~tuo*E zE|Zbz8OofyJbW6k*xA}Y(PoY2TN-*dDLgo9LmK>)s>As?X5f=k?nEM3F=fF`U5yq6 z>u!CvRX>omKMkXZj{tuIC#S}vU3vjh8egTn1>-mB{NTmH$depH4z1ajsc&X{1AxVAtVVkhw4~O9wEY7k! zs2BzNYrY4^^Wp>V;trp7@iFY`Om0)G({K;k~T8vfHp*uum0b#9x=Z zEU7wmm3b?ce{@m4g;E#vv>MS}%=)3()tOdJ8}fiaPV3HyA4!y}Nz~ki$FV<-Qf-h3 z8+=D&_JxW5>&cSQlATK zVfUfMQ4v$mE!)YCxwvI63-4^F>C^U>Js;wijc}rsr56*=%ZV7!_@18iGUub5i3m3{ z!C!nzcKeWMg@(oL)L)E>(o)Lbgvz!c;oi%Y(JsP-Qb*fb`l!hWZf+mRw>nB*4{cK# zfDAqpote0!n+VZp;X6Wu42tAJ2Q_XB+%cQ6R)EAEQ>90);Lo6Aef~%opCtb=Shjv% z$o$+%*5bg@5GQDsvI=wF8X@Iy1|&f;A}G97p0?y1Zp{?AbOuEX-2QZoB7ixIMKwf^zP>eX3(-*K!+m88avPJ5*Iie z6ulg`aGsapa}$&{*xaZ@;{xkJfZ*D!rOo6#Kqr`@;Lbk zzYfbY^d57EG|T2J{Njmpi@H_wVFOKDa!uX0&C1z1_*#PtJpyB%bPI5NyQ977|7zqb zyixxq`TS1+bk${k`$7q!x@;ZXd)MwHI65uq`K+$91W}K2mAC6uok4E+4{Cbrpl`p753zzJ5{D5gK%`k4o za!sV?ng$b+-zc&NgFo#o#BxnH@vGhwl{#S< z{k#FJU;FM9^#OWQiA&wfP-wSL`|jIls|{+`&55w#z|jbzLfw{zOnC;`3q69nd z<0g(-3Q=RzcEiWv9~ssixcWMHdiQP4vRHqc#s~>)YrLro#@W z&^5LSx~3H=qZj>p(`%*@tH#hfA6|EPgSs*^GkDPKtE#sE;;hx<*;aBx^?ocnQZqAn zQnd@sLb-I*oJ4i{2Dnrmx9;U)S|r#e@=*3;t*j`YzlsE@+nq z8M-)tzF7%oq7_NejItcgj?eZ#Z&BVIp9nEs8blDIpr za+5tkt+t$R_7I(T3wQ@6`jd?eZog)2cIpH^jvkCh_mXc_u=YuMJ|aQEky1Ah%mfoS zSo<{?AL-pGK>*9sOXJHTbK@NbDh%Zkj&rq{2LUye#_OQ%Z5?m(D z|I#qGR#hm1Vx>~;iD8`AYpQ}9VN^p83w`%&j4RhWL}uqFp(s1Gr6owCyLW(y(IaRM z8+ibWSeW3z+e%2~u!>QA$o~3Cq`H%rvPhkF3i^kn=#2;;j5oI3RQeY1vM!`;od26v znyratbcLM9cz5BlTfp-OBzbkTdY7JmR+z-x(sK9J$-z5sU-xO=ixv2=YswqI?n~NB zx~vsSTw(ZJc}e$)&Ev!8FJj!=6CWu2Y-cSV6FMTCTYfTc2dmS?I*K*`iY{lKOGu(* zsA*^n6U)@oQs1V!-NpHvk(p^K9;NNzzEb`iZIof8tLa^=&Y|Az7^>Dc9a>YFAwZzPVWW|Ls-$UX1rBO0wcRtw&NFn(u`R?S6{8BZb{N74xMBy z+yd?i@Pajc6fQ!LhU@gUPhB3@qzN>vH`XOceemWFjb*#30Ed9@WUUF!L9XdzJhrP6 z`lsGCxHA}symj-E|3#aM=L(LmB>6ZH3u~rY<7e@qeB-3hF<07~ELmKUIsGbR$`_~Q z<#v?*X)HDJLBg7Vpl5ngx zJb;ns#>|KzFBgp*;6IEN1Q8D*>4mzqE~+hA6Z|?a4ZTcO*(hX$7f^!o~kcr1+pMddobLM z{%S7rRpTC)YW?o8dXd9LGMmlQV2gAR5lqA8hk?pEb9q%?Icrb#tA#=$X%*0y=JyOP zdhDY&`T=}^EWB0l-PO6$@B(LJ_(Jgfx8&uoaGyHM>IpT_^AR`0waF8dcN1NWX21(~ z9^)!7`&6^xT8m0gU8ROwp&g!$Q)$_|5FM=VN=O>K94K=}+h1az&HbT>5WosJE40h| z*aPL;M#;teDsI-3E>2(8zvfLi(KAyh3>y5iYFA|7GyA}gqz(3`ak#9G+D;^4p)^n4 z?w6v00t4m=Tt-LiVH1#G4>~(@@O{@0HvKJUS5EuQ4d3hVV zd%Gy35~Ci&X1J^D$C{E8Vuc&B6c^6~e-%%|!jk?xnmeB_O_;uz^{#+ZB&|F*^^W#* zxwAW0BpOtmKVI@S>UHs>Ov{7=EDcuaMWOJ9XEgAhM&7Kwt0}Xmult7+@@{C;??Bwv zrZ69hOwbEVUqM80gx5v9ma9Xvwx-Kg>Vj|m0>PXG{g%6#FEGim?9v`6JP1)lx|TwoBUoBlrcEDP>cm?{-7Sj|drPS9l0?QL z{YC2e+!5POEiBZR2@!gFW+#g~4!h77?{5LoS0QHi3qpE(1#a_%6_B2eFz#kd!hf7O{9#%cp@=&VIS(W`8(Dnw7@hVFKa0z-|4DK znSm{7`VkvXuS9Pqxk#$y#<;G#o%yNVTP#7RgeB+7$m#`T*kO-38P|fRYlQKzVWz($ ztSS+Ydq@h1BFG;Tm9onI(CNRlXZk9AAo^4BcKUz2_&b7vd1*1}8X%ZR*$Z0Mp!zlz zWbbzSwc_;p*pa6X4F>H<%VrQq*|u55<+}fseY{Ee&2!^b2kinq!D0&Ai}@3AfyrI< zZ_!+Ctug)c8<1`D8v_VlOSN%vhWoy%C6zC|-l?p}`XoMAa5b($;e(g`_en5bZ(CgE z6)u`5g+bK2?`^O3T7F2LESdC$vzC2zhBSF9#C<3;e?6CrF%r$+MbqB`f?|D6yN;2S zBda!@XdzSNjA3;3B^_yGxY<7U=a|Lp#%_&Y%kD#D%0)GlikiL0HYj`J!Jik)H z`5Uf`6G3`KUqyE?z?>MR;XdSTO2KnA4i3u1M|i<_!#WmaHIMnDghm6$zVEszR`s^K zSIX4Bm4FNwSTLHn8yhJc5Z}0AM$&@1){N&%jg>!z+yc}?JbB(_yS?72wYsjt28r8k zpz@BU#xw2fG#lraQ{S$N3!t*QKF}ShV3?zbMX*Q0#Nrf>T}{qZ?2N{o!^In`}MM3NSK-#|84O z75+n}q2&BdYTop(_2Aex(!i64cf?K0mJ7{rv13w#d~zN*f?$?O7)vC%q@xat6o+3o zyzlzMFyo7GzX(T1x7oRbxD^243_BC(VY_3B|p*NTf3`j72#wZ9qjZ7 z_qo|+C~}E!H5|_O>$s}$Q`_uiy5y>J*5bs5r>nJ9hlv7FRM$ImlIa_>O;pCgWmXaf zZzj9iUom=|P+>9Z!^_2vj-%iDznu_7oy){We9f+_zU=nO1 zhu?qP8%{*K2(HY5EsA#F3++m}T}1I0Hz9NXn& zk!vE6E^pJmOlB+cB`GnN?9|FhF}{B*I+v*jhx;9O5)9{y%k9GW%jK}M_?u}fPbh5`D zOFU>;>AtfbD-*|*a;SVbP4|yQSw;pofnM5xtAoun@36opfn#ReLALh`mCYe=58p`f-5N8~(QX!l2C;vSha& zWv+mnv7>p`86>82pY_=@0*Gonnm*0ORrA6_{RM`q{QgzN_jvc|=b?D$i4GJ`-PpTu zC*5}&P`cINtO7^f?ifh|xQ6;<{LmvyVrDl{s77a{G?+d*!@#X?>NUulp|32rOPVdU zTcX5It~k%>KIl1mfwO-lFsR{=g`maYp!0n)Hzi2`0L=qCzL|&Ga>iF|*3ROhH`sr$ zS5c~SyHuPQX83Zu=`6yWK&!DXz^b|kn_5BJnUqT{?n8kCOVCSS#{K6JXKf!eA@`4K zT1#yZ(ASBEn2FEEUw*mv)97s;9q+Sqh@kut0G0ZI;W*$pL|he$9jjw3~tJeaH#-D|ovU*fhuilY?NW&rYC zI<@9~aOmSj5&5zN@4MYuIA#RCMfpR|i_b_#E`Z3z+=jFp#h6`58@d^RHqu)F@1k56{==zG{wGKlw8t>`y$(7{Y;zt-qXnmJ5T zZS|T48}2)in7s0?_Vo-fu007bUN~Wp1R|>1D`ZQ|43sZ6Ngo}X2Xn9#zfxqsvWPcr z3-!$4>Ag-D(XioOt~;VC)kx*C!idbC2!M|SgJX#2;{qqpsm=OC5wO-{vkFHe9 zig=E0+km58QM@1`Sb##n4a-jIJMcZ*SEQ`U`%e?@3T(YSWDbh{9;zXQ9Cnx(K;qG- zb%Hg+sw2$K9BZ%s1oHF-ioQMeDf+^45fLJHJRrdlP}XD&JpqYkUh0opsc6u4zl)Hq z<(V>hwViGFvM&TJE>L$YdK`_4d*21~r`--am!dSS6&Px~OQKx4Zt+?g!JxOD?%qrI z%)z1uN``vipPO|TCDs%(HW|;C>bCSojB%*J{F4}Pccg!Ufai+28<_ia@0HIX%cA{` zXlYx+GU~-eD?C{vmQyQPY>mE&zd9vyrf&0(&zoMcyuM-XX6n3Pw~LjSPrz3%n36vW zqa47bT1kr%5kt1q(|N&DyF_wh=-T1lo$&Pp{fPc$|=yN;lqVd|M}t0vsFbEIkK zV*XO4DeGM8oG!qoiP25?ipA%=KO@!wsdhK=KJHx?#dH}CuKwI-y$>~hVM8P9H9g3| zi#%lHS|sC{|Kr*TM;lpYIFoN#Ul%?-RP#?xs||mz!3t$3Y`!JXEHL>-&+{yE-Nc%9 zB{#~WP}qja?$ut+Op8lKY+GfOU0* z0d9}s$5(FK*nNNbz<#_+B6v2P<7{aSl9^Tz+BIg!V_$Hs28^&V!{7X}z+zFnRMNA_DgW{8Z+J9k6o->AdnPcWAFo$QLBtOiYpR^N>138vuVC~ zg3UUD4fJhdDP*0`*ogd}ik1)-CSq)kA&tRP8ViFC%(LMk_3qu zn9RpCwl06*?acpVP?pVJR3n_pcDc{X?H7%oyL0leB|Qx$m`6SbxE zK5*Ysk3aYpVC4cpQ5{bg6hrQfuVnQm7!C7!23X5ydNsuR*kmL}*^Y#|GLc;pw#ltR zC^SBHceXlDDLpAwgNWV&3KD1KJT;q+oMMN4a_@ax|1l7%)skd1ooh5-Bjyqq-o!Tp z5)CBvQRxQXf%rjW*IqD68Y8xQo{7#14fS*T1Wr2&rAkCC^so#wdvtq{Zx-OE+$i)? zV-}Z5A=vmFv6j7rXyjTnS*o5_qd##rt6~(7{0vEORJOj<>wvIPU{zbY6mZ2m#4={h z$MNoZGxkYqFwX?byVknsW}U8?Usr`=A-25C>E0?T zvRC(82aL{>4+E zR;&_#nK~#gOV(E6Y+e-%5(nUM;&{Kdyd$wfa_u#^+LBqg(u26{)L_|JVn3d&_{v^C zX%%bTF@N)Fd86|TefIbk&}#BD8(7my61R#wlSmMa@sik=QCgXs@|>mp7y*w$&Ke) zzcW3Rv|9{X_Wpv~$DniIeNq4nq*&;A3&5MW(mbX`39LzW0ny*02Unxox^#urRZwcY z&1r%9QZwru-6OMRtXih@y%MIiRlar7(9m^>^r*Z8US`9GzgDPDX`@089ae4uQQ&)l z)JQCCceF~Fx@Pz32OjB)<2q3}&~{#Ws+ajvZ9eVBLU)w+Y?0g}_KuQGf#CqDaAp>B z$0>!oD;L4G*P-bKil?I{E6h311l+7rk18r|M(m8@fG3n=@JR9V(@Pg;0|s51(Gy*_ zfY}LIpvt%BJ#%@rQS?nfo+fcfN#JWAc;^y7a&V2P8S#i-OTPZ3`iAQMNBtkm9Aw+e zo8Suv=qq$OO4i2eLJg=b;A)7jX~c-W1rFu7A!y=u^R?SAB!iOg;9mv(O%X1yVzt> z$b)PY({b-7M*dtUvo&?7A1T*J4h2!R@VQM_0KvgSY9;5Nagz1xn$>)+^&bS_I0}_F zGureao;}i*TrAz!A`1aNEF@>qKv@S{d`ML~?qcW*N_%AU$Y-8+`bXFhaM?U?zJU_o za`rL9_~4E_u^0H;f{+v2slnvC2}hdh%AcBlh}_R`TV|`Jn7eie!}A3aHY}C9ofePw zvpp`#*t-%zVTXB>Pk+X+v%hD>+3UF0*C-efPA<0h-nD9Kd`s(}01p}2U4U|5&FZwm zMch9Z>-m8^9h=%t6emUM2E0n3d_L^74~@+{t>7Cx-|-Is7@aOSxHJFhmH687yR=t- zz8oFw=vdcUOFLCL#zT)%u5SV7je7lf%o;{po@i%sMj1=KgHZ|`cqxgMd9L_K3aR#= zqgm~Bk&t8Xx^?0@=$--Tpug6jD-MZexD~VN#mz_N$@edutnod{$ARU=G zbhONBdcRcGc<+J=j@w+2TvH#R7Apx}N+rm3X~;@z%NlIEyA1x7sEQPD`zCD?@M5Md zaJZHC_;G5KGi9$BKUi+^05jmJ;)a}XHUK^}{0U=v@|HGkJ@%_i2m79&`r~e`PMv|3 z@BNx+SY7VU-b5ql0Yar+k`^+a%A~BT3z2l{S5|Z9IT(Z;ls8?}R#z)DBZ1vV`Mac& z_>kzD$;%7)JD!Wwivvm3FTVG|%?Qf^vbOQWo)g z!N>Eeg&eK#xf3pXhoC|YLWn2Q2ZLQJLtN1{c8@WOYrmCC1^HQZp<(fG^AY813ZLo# z|B+E=I<8~fezFgD1qB5Q>I!I4L30qbsY48RN4by0j!@I8=)LbJ?T)l|;w;o(M}Vb) zxzG*~sNFIna($f?@&XZ9Ad*Wy)zUMRt3LGf!)xjH!|KW>P44L)zFUAq^Sf)Hg`jF>zW>KkPvx}qwX=i(C#R>SdzZk1%=^fI-6N_-Q5C=TEocQZEq4-aWDN zm)$_(nmwgf(xo}@@A>}wZQ%2ZL}f)bMUwVHRcMLU^HJw=@+=GqZ7E6@(ei8QIdQ@K za$o+^l;tA+i+hBk@fWP0q6gkfTf|7r^tw`h_9bNJE_fBgoYKroGo7MRl(4+LfQAQ4 zM>o4=UF7K=kE^Rm-MH0zOqfdWePc^#1Lh#Vt*gZ1?J)`G2mgQ#cEG;qy!r%>yGXrH zU8KUrxsp+Sawd5=Z$kVlu2JauON`E#SXcK7u5Q=_K2-+;x1#VdsCy(_0u(KMzrWbW zL++mOoy$RHE7O?_3Ja9m*TI)dMWts-53n4r zpt!U)@LZ530B!~B!aVb_(fB-BQB7OnP!_IHZ8eUjX}LGyvWv0_O>BQ_9^Nsr5&O_N zvlQMGn`#Eus~No>NH0!%#mbOZq?wd#Wge;}c0Z=uqeom~tu07^!FT*yftECDE8w?VZ53IS0UIj8ZWa3ZHm>r)!9Hw_Ux+{_Vh{YmSW`g!CrSQgNFKr~KhLQ|y zi;!~IAC(t}}Wu-xtVn-?`ZRl20*3yQzA>_(wC{XtvpR!y=J&pyE%aIKn_&OQgZ1K@p zf`!z*+-`bkTxHM$B+E^LVHo_=IJK&DZU=0cDc&y>zW^slmp7uLARZ|Wt_Akf&l}!A z3X~q+kDu@!mTJ_G#U^G~UG}VBTwa8>DX_`c=-U-YsC<=?WN}D&n2;oY~=z zWnG-7l4h-oc{TwnSzfx)ZMMU$lH4pA%*~_6E2C6E_)$gpW^GR# z!*zO?*2I#?I9GMj$=0*?B`BtLzzm*W&a=Y(T6$_Fe^?q@!t=QA-2z?_{`j*@3o&1X zhBd;w$k`0OkDcGl8{bTxBn>`I5xbFK)R5NtNx2y#8gUQ5lGM=2!^q+3T<4ucssF{UHHK&uWWrwr^XdXRn-Z_K?C(p+WM8vpS$JP zq>pGp5uU~wueOv9zd;fehqphbSfq%ViF0H#u!gv97fiRl5c$QN`tUcVekGIolP&z7 z{@RXtv-26;{%2%X3*7!4g}{8o9*P~y{mGTc=JlLheZ8u8G@J0AZ<4MZY+Suoz1@iT@u?uj4bT6Ztwp%a~Kp85x+dzP7bhj=X4u01aSGSz1+ z`cE?p;CemWM{^tn8Zu+O1rHM0qcE&I-^bU;AH;ol?DM05q$gE0{jEcEkII_rZMjx7sVZhgQ4et z-hZ(>?akAJ6Kp=0mi}`XPz+T^j6`{8+}RDpoj775XV=hU~C1Q2Z;{8BR)9+L(v5kH+1Z$-J-P0B-KWW*x z-iA-6CtDH4&nEpiy7GWAC=^bd+qXpOFm>xhgIeA|Qqguulm01r78Hd%f) zKmANxRp5%a@A~bOc6#BEGR2USb6CeZ@&#oSOq;-r`;GmupuU>pglTLs<~~Fl;oZYe zXX3NoEBb2tO%p(I_d7l5r4Hu`PTDsNT|sQ(YcR!=I=@L4zQB(h>!%ILvl5Emm{8MTefLa20SF`-J4FL$|@45tj! zDn>}9rkJdfzmjtl_#9sZVXh5xpcTf5~$&-}b>wv~{#M zYn2=-hfqj%tgE|rPIhC~tke3Qe`21jYi&F6;Fr3*!s1#h9<^^|RU!M21GAfB@Y+lS zhHdZIfysot5G<2it@PyNyS(Rot7(zx)bpl6t?v~^9B#skJBR`8bEQl#S-XqgbV0K@nFT&D6x z%7fK5E}&2|NO>_RQf#?v`5a0`5T>zvPP^_Ms6Q=waFH7rT^ireMWPm5^Nh85qAq3% z^K+C!9oF1%$=f-XnW-%T^Mm;$82fy=RyL` zlYZL({?((o^|h_YyTNb#O*QFR7UXJGp>2#{G+|4f47%1M92dTpL1;^fkjg9Oz6C7v zSG19!uI9L!2%t*G1rvDPsu`Sbe!;}bl4H z8uJFjp?A-rbcQZBQv37YsmTO;e-veZoM3hs*-?bkd{-*(c)q{eY7a+H>rT% z@I~7%H2c$b?N0N;)gP#5O8l=&LdQ=e^m>C=7rlEV(*CqERi$8d8s%^g-%4p%vF*Ps zuYi!=Fzj6pq(bis<4=sPpfg8_t>C$efpRE3eQbXp`W_QgX_H7I?sy|{)HCqKX|>0G z&55){grv-XpeJV8Q0^AMcXX)GZE)z|u6jK3S-22iLO8l-KJ#TL2NaF3zh@HyvWfi^ zNKN`UC6;z_5Bu0@IVkWJfV><4;g}8LKbyZFGpi?z*#!`7@Z1y!L#{y+X?; z6OpMHH9j!<5sLK1^_w?Q4Q{CCfo@(X+FQVLL=Ny{8w1~i)9=SqHymhpT{PoIG|!7S zNHv6lqRFlqaPlGWyuA(cv9ZmeBGZmg|1dp(=WMsF>Un57$otE*)~U|HC1(LLi$h}v zl*Vyn{@vxqA9V|mJ+?oYK2rO(KNqFp!u2PS{q=ItPr_`;;{|{H!?K3eA)@Zu{K0O$ zH{jRMAfG8XM)LpAbk<=_zVG`-5%Gg%p5uA$`?|05JYSa#>|3x0_9;$r-l!`0>G?-L)-+&{ zYe>AaXZ~$J9a=aVP#YBeTO`dnoQ_-rYzMOks+7mw4D;-<$X{lRln)vFDQOOMS_9{U zy?~+`yT!EKqJ4pGy>4IdQfSLy!C)O1Yz!rPbKKw0I`7uI*N=XaPD}pnBnKg>sFCfq zDYiTre^V{_e^2&nj6yn(<`SGCs&=OB%*?N3;yGu2qMU5_`TBgP?&Og8$K-rX)rZesZnyd{n_D|meQwHgjQvMIeTZ4^>Kc= z(YN3>`b*Zh#(_=pd?KHV{dV)j=(Yeae4wwX5SV3}PfqulR+qGXWA-l_M;oQ>bY6nX z)T8nm1s4_K{}@nun5=Er;)_D&>iAvaPx9WdE2qyj58h|GC^V21aG={OZ#vM-oDf%J zaa5Bw_08$?c*_`PyYDI4emq%elEn-9A*0!TV=~9bCS=+x z4T^l~8zq0+6D!9jKW=_(QR#bRseS!8yEl@PCs)}FS2>+PCZ zNVcvONO46}?_XzJ!q^Lro!B6BAn5FEI5sfQS1vc&SZv8ZT~CZ*Y-W&SA~dZ(A^|LZ zxxE2u@t^NW4@{46+fw8=Y$CbyO!hf*<7ot9f2x&ogVu`%g#h5ohRf=pF`E_60-M$h zr>p?2)+p%np=gY4p?U1SUTgk&?w}Ec(#hJmVSQU`z2@N4EI!V9U;bLv#EMCAVg4Fk z-Z$ICNuXBCs{O#-=u>zlu|}M7UDLN#rjVA_-^;2V(aGvczIyT7*9t@;cjKQ3o}T0D z6f;%xt4hw5%!AF$FhTWgr!Kzr-`56pj!D;dUP))uKcx&)RmYK@myHK=0iC8h*| zM{k0rs|r7=r4Bq_SW#3gts3~n($2R?>vK3$Zz_f2ea8ZWBZAc4gvm zAbWglk&&oGj|OZJ7T`W}*Yh`zo+is$Ng0s}Ol)ji-UE$e#*Y$UCU+pn>0ZxXqG4rE zGj^rqu6U|4CX~BBxu6MlHUM1o#m0*t?Zl;-rKEGI^sBiME8(eqFbe-~DV!7WoAp4R z?-*8Te7@LQJ#@jx`Tzxsgez*IiqLAV^GiEzYrh;QWtTFN(%9k~-4%z-6lk!9{+)N+c!m#D)w-{J#8i2bB`g*k(Jn!V7};WAHJZG!E7MwJH@=7xs2Le6+z$zz*o$E zN5Qv>wEu~F0LGA7#6fFZ=VcwV`}YRAuA#nLOKwac{xW%Ohg%!6cmqH#Ya#!JZxOsN z&BN!4O7;!Lz87T2%G?SCM!0dA&H>5ITQm2xqKc6I#|5;k0Ykhni4ZR2K&Ky5RSa!? z?C&1t`_5-=LnEQeI04Q64s!TT5?oQH-%jD%0up^aFuZ_Jq?7|q=P)DNIwCJ0x-bdf z*ff10F3-_ctet|NNR*fU;(z)iymHCk_Rl|} zF9k|DlchF13>K83AVy;x)h3ueSR0*R;$OM8c6Y*I=)445IDZSf{w*eN%Ld1qZ$Toi znZk$gu~RQPqhjB*_6|(5P))UaBB4hC8*LmGx#lz5PS>8BHaRk{sZV9)ZFKJkQJo}y zZVN7IW7793XEh#}MKrGE@KAhI7o-}?UEJLw4Oe1CNB$$~wGwQ|+CuF;^yg{#kKNpy zoL;w}{4}Y_vuV@NHum-rvY~hV4th%@hk52*(^pSx!5X8>KW>qLG(W;A^~ekPy^mTV z17j4G)p>{Wfy;Y_OaC``Bg7IEN7K;N;b`hT>SQ#XA^W0|V(QnG{vJzcFsKsRyW!!v z``z8Qe#v1kSPGomL*ACn6cRjc9pxRsiC}So`J%1Zo2wlJZ365s-tt8cJ$G+aB^vSc z=sb9EY(d(SyEsfmy05#R^Yo0e5Z1%svhTC=>1NY?I8TL4-c1%!7y{hX0-2!g%NP8^ zJN?A=uhSVtEIFPeOD$JxWJ-JdPTMVV+HssNDD#x|zY)sGVsoQCQ=1d1N`Fjn|7z~R zCN06*nBYXUUMt!-!`~T$Q6p`Hqe_cK&F#)RcZkv#&@73*pEIfyP6a8wTEXuYYCa&yd)jtvIB27 z=bQa})64RDl~m@&(|_ExO(3zzG^$Uv=;33SMxI9~^vY6RB2>BmQj{@KQ-OI(-7-LO zdE^qP+BG=1uTOI0DUgHQjmbOH&b=+jcWz?)h&Zi@{4QoLPiy*wVaYUr zt<^XqRv0G;DUHj0u%K16EJiV*C7lbu85`)7mwU(N#1vpB9qtcvVS9f(bm}F!8q}J; zf5x+8o9Mr&+MIv1E&!%aw=!QxR*!86OER-$1u!>zSIuw!BkJj(3)YzXNAw%VNBV6j zTw=Uemv3)M+L>TufM&LkdrEGeu=fA`*6dH-oKk8Ws45C_!{Df8BW;yQUT%5l>wWQa zd+&joyI37%EzEY2nEINO$M@lb;@y(%+;;-U0D{%38edz%892~8^j)XHncD6@wje6Z zM_e>MF8!MB3e*kwgnx|IaTao!KW?szi*d6f_G|8!Q_bl~S;@L)Tbak4UP3TLc4!8J zKj^tx$CHxc6E&Pmu-nMy{wZL9jXmUY~A+3-^4igf@E$wxc4 z=R73)y+Ee-#io)0=F7hYzI3QMc}m<5jZ9;yp* zT$BH99!l|0@Z?Zp<)A3eJaY-blBz?rzeZoaR=>= ze{N}dI;g9&fw8DmpCUZ3H)IU!@*C7P(Hn>1Dww+9+%F80?pF zG*L$EQzX(=z~Wu%&YXoVB&fKv@(Ddm3W2OeXP5=BBjZq1d1~%ljW1&T;W&Kl)>saaBg*^FQb$M z_yc~t4XTXGKiW!5E8|l^1-F)i<+EEWO1`f|=!&Ut5Xs}|(0*qvTL!_J=_iaXfKLArsR)tk8;O^dLwuFuAZ?4m(1YCn#9U1b|7>@( z0A}%;r?PP^k2mVxDod%4znvFz2`-i&cxsz<8Kf!Q@?qD8_a^4}c#Omyvyy)3Innhr z)2O;hhlNUy@Th;7@xE!xmR7rTRf+DEJU#kjb5J?JBSG3@CqL_QoUr&)iP;_FQ|0&_ z;1LndZTpo@Zkp!eSht)70XL0KWNab}ApJ$ycld9D^;@CSBLBV0db3b%RVCsM%%$6- z*AGCAKLALr*iKKxZqRt^c_uu{An)MQ1@WBhmZ9!>^tmpARqy84&w+a+H@Em0w*CoJ=N+WPNu(@xZr8)K>cXN%d@$ zco~Prm0v2hAWo0ff8oSp!4&?l)k3PmqJV)9Ev_>F0k<5a2QOgbz`McR=oYN%VMFst z%%k@|uB{HGKdF2yW&nznJeFa(m*BsDK0gm6?XWS<+5$YrxqI*prb+m(?+oqU@*82- zkJ$k>12V9wRq38A<1}j*>w6x{OJ+|KADS4dG2Q7jROvKgo4uYKLuOh6Z9iWZ&tBqN z39Y+<9siZ3vhu{+RpDB?4jh%i7Vt}MHK7;apP|hJN5MTuGkIReE|Kum1bkK_llK${ z{{)i-Qxyk`Omj`u{nd?U`k?&0;j!yeO4cDG29}5cNptP`>F4B?*5vO0CGIQ0A2uS& zsps!DhwxZ@o_iVeLEkMc)jsKhqSbb)okMi=V2gWK@AO>hb3MgWcLg`AZhf^;mPhx@Gfn^~LRsfHYs1*EbzLHM$zZoY22qFBY!@ z4oyJKf@ve}Qq*Ih;vGxrXgs&2|M~evU*KwFu7gkI>h}yMnci3QdNr>j>4KGMzeGLD zc;53YdejEKLeon~<$=Ld%^v(@#^KGE4Vx2ZVtug*lKj;>8Ajg6JKkwip$C(SlCo|` z%gcWC0qS%A zGU;0gz4oVZ z&?)HRx?vVpB{~nkpH#U_D&r6R_66e#atE%`U2f1_z;HCK(^}~2a{r!;A`t3nTJpS57b)6XtbC;itNu`1= zRMq8SKc`CGgS%4_0-j2f9_)2u zqw7Nrly`;zp%&Jp57V(7U;INhBYk=o(-dGlKX+wsf=c~T7CD3MA9<*f^7m-c#h2tW z{39~fJQu}N;+~xG^b1<&O~=$uxtP1G-dIF%ROp8Hj6l(3KCZ(M6CB-!8#zvK;u&)M z%dzp&l8}zCpQ4qjLT!U5Buz8l%wMg`jH^C8KQ2VBfA*ekZ{uqt)(*_oWS0lY%&V=% zxi`!C&&Z3ZK$StcsLx!6g_Yw%LR z1L_!uE_<=&^SPQ~ zwS%t&F|&fO747lGU!Bg}`rBz{a1>kL*Z(`{xtiJ0e^);v)#{e<5;P>4nL5Nx;GYug^p+Gdg%BN7pj3bSJI%T0(TBoX!Wb({)hFe zPwcN=;D2)xCdBF6Eo}-dU12?a`-fQsL3Akhup-KZE!CYbT7IGz@bwa(Cfefr z`Y;HP3aFn?1U7^UEcpxZ5UQ7nO5#Cr==yk!3BWz>(LbUvP)~z2voayJEAm1egQr^z z)|rRF*JGG=>}8gJbtpbq6huxNk4}O-1;J6QHZqnbs~C` z{rvd)7MwY-8Xd%s$uW)0OV2LFt-)}KLKl`ZKAcV@y&iu8R9MwIewU5zbiby~K0XK; zw<2+LWV7(oS1?ht>wkgqvRLF+ve+d>!fGSvh_C)os2FjlC7VByrufw%ysy3DM>BI- zW;(8vrr=7YbSuCeg!V^0FT<_M;pyy5T$XeAe>x}18}`kFDu7aA3L2C${)VPz^+w9HGnCAEnW<)SMA06Gu*+4Q7jsv_4-XwHmD1eEZ-xRRc0 z#+rgeRkcEwRws$jkn;WwlwJdpXwCveW@upnZ|PE?c$Uccu=OSQoq7iGh*x~sMOqiC zB8aeyH=P%gvj=Z*&&du9i@aeN6W^1!kKO&8AuS-X?FCf`gcwU)(YAk{TpE*1_Ss9s zlDci(>BxY)Us(8WNRQ-oF5-6%pt}sPw=|}&q%@=(6^<3iYRPTv*fiYN3A}-_=2Fh| zlD|J3R4i`F`#K&dc%1pG75b+eAyGew%SjrNTyx%eGUTR7i6HEax@1`e_JEN9lGZ!O zVjZmTm!rA=vhOIaApUN^0 zIjTZ!Ax&F{PDLQu`S!`j-;VM>oT`*F9K_llUuslg|S-Sql&$t)D}kAEE`k>4e& z?RT2!v`ectK$-Yk-T;Ji5x+A-nN0r7ReYRGJkcJ(Qze_VM~4<~t@3EajW+p^uUJO| z#vAr6#&OSuDP(9Y!7tfJSA_0A*auevDgF^{K*1CoFNOO$s2$fh+EPdm^=TD0;{YF* z4oEyIV0?#QPlZ9cIDvM{KPb)bY#c7@h!8cnJ3cwH6aqFLi{k3P22z86Z7Oj5DO1kU z5CO&(mbBMlgJ*sxZ2p|spMTUkM8AMksDimh9GI^Omd-U!)otckVt7e)n5 z8OzuBP=xMlnmM?)_k;~(ipSr0gs(HY#ul}Yph>Wbp>qH@-L@QPNLBjw(XV$9lt-oVG~6T#agIIU-)1ahK;y z;)Xdc=CxYWC&BNAe_GRTGT}>T;T&2xEKlR3%=$<(XN)JF!lE)hn2Le}Ml;&++ zuq;+>ft9#dx33UgHm5jcULJa~88mc90imdS-s;;09LrW>WnnBhTqLA|eg@0Up5mF% z^KZ}QqTJ6$i^gib0b-P#+M?Gf9E5@z{L=$)&(1$vy!chtm-+6ghM^lkt~;2~gZ>FK zQ{!TD>hg6;kkBE#{Uqwj%g;Bd=!V(tB_ZwoDdQnWjg-;DJ3m^XJ&9>O4tRw)gNceO zK_!*A@fg;kaZZ_=SO18-smCh=#|it%7b_ro1XB7DNI9jbX;4=qjojbtURmXQn`c+Q z`X%}GE7(rDeviDTs=!U$!>~##*zbJikvuC)s^fSc3n_3|x;(3%K{2x$^ouC=b^%R;9O%uhBken7*b7YP{px^mZBkfjJFo-WO$~TZ)KPr8SEGt} zE*mMD!%*mFb8w~@{KL+Icd6I7>{ro5IJ8YzIKuMM+{p=&3(#y$;p_QuS(`niGM&KO zVCUzsB=EWlK0PZ4bwx`PD$=-rM9i%(2|jv~@#rfpX_ea47?@zuxtYV03i?f2VOCDh z2RhASH_I4r!Gbs4Y8<$HqUzOUmffp@NeMyb?j=Q7R4~wq^+#IjE8eGHNZw4|r!%CS zb>qAoC#=RDb*+5J_F%rWfd^;eFr!1+G5xfi+nHqo>gM_Yk`nCH?!HddRkSZWMv#nNh4^HS^;_m0QQ!NV8hJ8HCf6?e&c&bY&h z(fK{sIV`g&A@EDVd*Qbk4C6CCbd72fJ>Bz^!latis@?+q$mCi}ra;MkTW3WFgRE@U ztOcCl{H6Rl#i3sg>kMRm;SUnnq#TduAl-Ai-(GQBf#a3{MkgI2tJr7rMj-Ph?v*!1 z(`e9e<#jpUPQi9V-F=?M)>B=OPm6#@i#P<}(g!fmE=J6s^D>56R37ZG7Ncp z5a7bs7hDBZ=IaWvrPKI~)e>$i2z}|OtUcTQq^pS0$cKVSWF-5(lF412t|*;gP>lIO z&bvh(t`|VFJxN9{mIk%ItK9b?z-@tXZm+-9+Qfm79D!S>5s%~=LLd9p{xRD81d<(~J;W}9R+ zS%QK2FoZu#yTDzIj=ddq)5tcvW9!5T4dU-nA3K^z1gH94V?c1UCMq6%xBha%XYk6)mC)TJ^N6&4B}r>Jm1T%Lsg9`W<0{JEWy zovis-Tb*+|IVdGrhr2?Dzs1e!lgBX{qy@<{EirLce*A(HMGBa|tdjf4Rqw`cbiG@= zX=Q0@nX^XOCJXa1**}H^IW7ffCJcJ(=acW|lp73z|#qXVlnVtqId?K|W zgQi|S4K(uhR5I$^YMT0RmNzwXD!AQ{^roJeIFWyN?4a+N3@1^DV#lpfPmkxM)TNA~ ziZ{|RNu7RfOXWz>NqMAqAjpKz@vhj=6c0JupcdR)9yvv@{#iVkJ zW|aI<=A^ejhb_3g0j>Y;ll^wdibcR(aCgy?CHPqY%W*s7qULisx@hxC*AwogGgDVy z_Lxt@qdx54Y!v8>l3%<`@Y;L7=wji@F5@Twx(y{w>TSZ4a*vdMSWKVknA!BUU29lDiZ9XMj#J&bzDGp|s=KU~o;Av2GuM_}?N$%jIx=f;{v zQ{IBoYSHHV?iFN&HtLYlZfSW&I|I}#hW=vvfxqh)$W;O%={(Va^Z?;#1U8sg_S-4X zD0X{CHD*6MBMTcF>x6pPS zXT7odvkIc)wEW8P+e&+UNSXuebtp-yKe&$pYa_DYAaJzv@pfg-9;HD5pOJ@Jb_Qg~ z_DGRV$9tI3hms?6vcsG&550+5Qpx?VoiAaVunjld6A+$E2kVS3y6&=~oL7+FWYu{7 zC*900+jo0umw7H|NT~4J0M16nFuWn}wgG{50Ea`Y$drG{d)*{RQ4J5+2jug_S&G?*2Z z#IoBO4awYqNP#cG+nQKS^ym4$+&Z4bR-N}-CU5|aQ^rRGIvruyoTjr?AwYnBlyq!t zkH;pV{Xl3CR(RFY@gI@nXLIGP5CiJhzh<5VF&jMjAx%<0BL1q0sKf(2T=znaiQm0C zufOA@gber+JwJM8<)cQ!P$HnT6dHBuH`&m`(!*U2eiHALuFkuJxpFhCTk5GNe@~vP zk)_~zE2>3C)Tj7Dhwv)s{DwsUVZSu1v2d)&!L%dfE&L->nCC~WF@@mO>-;#MV z-CCzMZE$6F>7~xXbYHtTq1+nSf)L6%8qFuDh^_sl;SrYhKn*>nVNgUf-69Lc1a%Af z9atyuGoVhVfBj3A(hq{Gz>2eJT0x!;*YKY`t?zdKd&!gy=Wg-f{zl|A^}5P^@llovg~J2A^rc^VCfTjF!hS z9ku9=Uwd-znrDT~j!(FoiFe6 z#R?dHYmtlIAKwIjPOd6*-UFceft8^=qi%xnQ>GU2>JJ$f z0H@EEAbMbeQgqC;QL^bD_1_NzGvn~MtBA^fM9D+KSa19WMsnA+$Pz>>{QIO0fTJ}c z3=9~*+c8FIi!uA(NCC5fcZpp(%CUB`N>^0YZBPQ55uu}zo}X9%yHUu*H@^*M*=iTR zZS!H2AS4HGwxYkf`nZTa=j#U@-}x3I(k5`!GuQs?wqtUA<3}Pe%CruM-fo0VD)8nr zo(bK5jQ7t4b!jj5)1k5<_d}%*yol{s2qwH<{8JEsceerV-7x$%#9hv&>Bf+_fyJ*6 zQbJpbRb<3RYznAqW-`>|w1$vsg!`e5VqU&Yfo4FFWvW{OFXlZHwz!@@A@r&r;12UJ zY`64=XF@G5o5$i<#V2DOEf%Sy%ry0&p2+occMU@q`Az6 ze0kX`n_lv7M+3A^&&d|h(0HvXPXZWBO+=If$4_B1`<+ovweC1du1){TGbgJRv|ovfku|O`S%a&v=f78>db)!NojV9H3c4h z-UOL9E?9GGKONE6oc6bz{n4;nm3_-nPd=66`aNHcBny|CqZeO{wiy)WGv$)axI>C) z?x-4PZ+yRe&N}8fb2VTV?=dE-FX;Ie^H%9Q4GC!$MgZl877aMFA9(bA5Q^f?8WFtA z?S8Ri%~qtn;cbBhNg~}gpmBJyL$J+6%3w{zr{*>fY>Ao$<@bVt*MLNl&`AOUCxno> z3#G3|Mn!CiE-R0ShujnZ1J$Xnq1$ql0vBVFTYK*uXCfX!QPpd)hn6aQbybb&{e zs=$P1;h9SprMsNQ39ky?y`$_Tzhg=J>nnZZO1wt{2Qe;oDB>)f z)}XVNu29-p4)tHtu#U~AnWoC@2_hdJtK9|6&mfB?|d{%+o^B^m3C(rns$fadq zuSW}kBL`#w9gO2>cs4?I`yny&z{gee##8pcV@_SaIp0n-ox9{6h>FJm+;>O1PT&}x zC`Li&57ydgbY;Lad3qF{Z*AlRviIt^2C{@S^F#O3&d!5TyW$idw;J7)?XD8QtqO z=Y;maVTBLXs_{>EWnx=j^3Eo*z7jb0xl|k`d^=r=B0<|O`XAA_=*7_Sc_JyoqT(MB zHM{aZqQ{3~gr)v1LEaev;hg$yo9uN5m5B#kXOwD-mQqle6C%gi_|F~VRSFo_GrA9J zlC7FgwSysP$cP+c0xB%19AsQ%k_`0_5N}X;0m}NVZMQ`(z4PDyTJ{54^ zfj^~?&Gq%>pV=w2i(C7envh(iX+)iqJ~$?m;NXGj!1*Oz#J0E;=%Xt>g|Yyq+Gt*! z4MeoQB}EBtz4=FUG1{(9io5gMsjpReL(xyGHo(=|^p~!m*rOME2Z{o{J`~&^!Q>LY-Gu;5#OZqBeTW&93XnXk6tJu~4q z8c5uBI|2jRJNfGurt=&m6s~C#$Ok{In(YCra8?fw3pabwH-^;FI&{HsHD8b){Dw%Y!Ao&03gjh#T&7Y24N<@ zS#xQd<*r+ZXHEC&-L5O&KlasFZ6onoDiBs|N+8wlS!!0Fhsab6(bBC>H{A4jz->=O z(tN8s2kxN?8>$|Qev*GbH<#Pj9&-3XC0kHsLRtoNx>Mf3SJs_Veq!?pvS3T`OUc$sAJ4_F*}{<0Vsc@*nM|7-wjboY ztNDl`AU_-x|5a|Q;y~`bt+Z75&PjN~G!CB@%>YerwXpiH+t_~MoyTM;bML%Ri-|9) zLWkPvY%hK8Of@HDb(thqVdLJty8~0L=WY@#ku~BSER-a6s_|taa+hqgzVy5gI1QVXjhwyl49K|- z1mKYw+Pr&?VCB_qg9tsKPLgJ^XD)cJ!oX^p>O1DnpPBG0vvSwUC`-yExk&hzFN&NBN)WJ#qYdC+{W zRi!B))G&8FH@7sriU&ROx08SKAc*j!n87L>>oMFJ9wn<%z3}*^ac8oK2V>I{7|=Kv zZl7R{1a*ZN?{v(s@-KD%M`$V~vk+j?pF)m;$V`1L&Savk5vVLRp`h;uBS=Y)*-$1A zPizu;^USv25BMnbsiPIok894U)HuaFWw_dOd8p*>OONG3g*%_xvmp_(pbolQctp>u z1m4M_io9en2hMZUi>dL*@~x#`fL8sjNr6XJrXi8&TjJ;92DV{qRUcBRpUUhTl)vA& zL>(JVQ1`w0ggP`CmR2Owubx~IeSdXX{_f21805@L%3}08fB{BdwY$F25t$;$!#D(k z2gukJOP8!uLfi&1gVgdwD~KYAQINP7 z$kFBjNQnE$JzGFaJ^Xb;!g9l%2YNWIl!f^V4=joQGhz7YqtIzK9s?9B|9^FrynciH zuB)WwVg(QT{YY5_P%S+)j>cB34dI5)Yj2vq`uvxpA&eEc1})gPh4|WUxd`1KblRoC zbLJP1tGEpX-T-#}riHw{jzZX2zjSy+Hi((aURfnw8(h3ag+Tf+MQy?7mVd_nsN3ce zRDmidHP!io>bmqf@e9pQ|Lx^>&>=dOnOwpvK=UHqqm%EGbaQ{&05y&!M#ALoH#{3C zyFh#NLE_lh&rW=@|4NF-zt5F8XOB)ds}wke`#F_*Ge7u$lP z#x&(0)bx0e4Puk1Ru%7ukUC<7U!pV0Ocw`S9N8OVMQHDeyubmwJ91!XuH9pSvw2kP z8EIdF8p5hTs6V{2r)Y7h=bpQ{S%B5Yv}Z;nXWiR_Cj-PuQypMI*iP7&uT2IAR2sL! z{0LV8WJdJi#`%hQgkfI6ejAfVeDbVmp?Ae>-2_^grd7zFr90q*c)CGE{jy1^uO%zA z`X@S5sxW{gsoq3ib!k_=Ms(pFhzsGQMaejM{OI-cuBWgv+Lvy_1D&C#*C;c%=V1Wp zRw)T7SRLm^DX?Hb``ICv^MBB=sPgwKT7Zg~)U8c@z0cms>XK}R4GmhSr8nAuFeR9& zVGp)cFhehgqqe>_Tg}yz865(|%npCV%gp1M9M_kdMK1(bA{xV>Lr;$fY;WgSmD1J^ zfVMLgB)#`s3A+kPa;IT0MHO}K-7j#H5!Dzcy7^}-(Jgh>`#`1im9B5YRjs*XzA^B{ z@cuMRW%Eq*Z{n!4o2XX z3&d#Wy%XawYaD-ElU9|R`k~&E%Rl6M?x(X|;?^qoKFrf>V7h?-qnB5|+YqeJU*S~8 zmPV9jev*ya`mDO4cNJbKEJ7?@iayo}Xw*oPo<4s2SNbll{yHZKTb7^@@R3#0Mg zbHH86A*#N8Xb7^LLpUT(>CCo@4yZ=@d?~5_t9d$sTg%H}*-FFA<1W~q|z+RW?)?+UCV)r#S-SC}+( zG$p8hp+(QcyTs9eK0GHx?V@V8j6YIvQFZ zy2N%DUOQ7a9-IH4n~0^buJZ;(?{|Anq>|0#twt=a^-MCXrYYyo?cPG-kCxChe4D>Z zFLE4hPw@>Fqn2)^p9sa>QtgjFM8{>SKrA~(P8Evm5Po|5rpeIne+TOQ_sz~f74PB! z-L;(B>tA8U2EbDHH-kxm^!qxsVIP{_aP6&nT;h$a^KX7T>8OPn!V$NmS0%-#>KuDU zMhwicVNYyOEQZKre`nug-QCc;?xZlbnd8I3D+F=uWmUj&jXz^6!Thr)ZzOQcq7jUJ z?t1d$en>}mMel;IVs*T6S$0lfkbbGEctnANYF+6_7LPc0JpRo`X5qw_sLL{Hv%zBL zpQV?l`<7KQHys+gC(n{B$`eBZ$$eo0jA8Lc8-a}q{rXcXAL2{(9U?$C zFmp(U(WC;k^WvM=8HwVAVIKJiJa%BJLjxYyP+R-;7xT9xol;C7X!H7*YKwZSBVMlW zk6=5qnmKRBYJ+9*KO(>?*lzO!=-3PBjQZTM2kj3{3ApG+PWQaT&KBgKTV3Fi6$A|t z(BVRpajRKJnV_)Ix9pd&eQ9yrZhnNFC>x1F)pS-PVLC4OImV`TSCQX8glyBxpwERf zilI9^+@R}`Zx`ED34!TRWtJxR>u96q#Ko#7$@def%2sYm!^>AWIZb_JvVR-DE7hbL zRY0e}Xr8`2Mg>p_^@U4q6!I1Uk-L3HdcQ*gxRD$9xvFxjlCim!J|zr)_$KNm_Es=0 z`fZ~BhA-?dnEIsFG2^I%6XK74#@o)Cm!T$n%ZHCrFIICc<4W*jnn)27nzMOuA~(-f zy#DJ(uNkTK_ML~ZkmSc-P_d+Vd*ZfWcD21(_hc^#NiA2G$5ZOYU|HX@mc$?`jWf+m z1s%i>n}HrHrazeUQZLqopRRsde4UrWJOupH5l5hb0tg20d^aAQQWQuY6hww8Mo}U) z9M=@)l*A6G1LoQve{sM#N~_HZe~xskaBpT$x(?oj%Vr+1|CgrRwTB& zNHlG=t;;I1w-fxVw>rq;FmLePk2w_RXPfS!J;h~Ovg4zi#+;A-1l7$yuTVdXgn6S2 zsUm$k9yqd5p9LoiMwU9GJPX9t?~Sv>!EvR}?2@SR%Z1j>&QoV9>vEY6)`Xhn)93Cu zu~C7a)o=LT6s_NcS{a3GQ7Bt>5N2bg1lRan64!(+s=X7q8Q52eFOBcl?J_7GE`BEUs?y#D&?`(lFzj$9k22 z^#c}xB3{i$~7@q;G0x&lus;YVE zf|zF?9EMIn2-)UXw^v4YO%w~?+-S4F6=ka~gOm=H&xM|Et*FXDtIHz`|AR<88xd~v z4$(;nHpRZh_d|Y5LvuIV@NvLM`!ikqa!d16-H@x`-=x)iv9Sr)uR~uwec2wsV0fC) z832JOg!Pc_1~cwq&JfZ5g3Lq2^ekTj~>D?4f|Qgu`V^U zf*o_J;<-Yv_c_%j&O5qQLK$!b6VGQ${3M3EoHNiUA+o(bSFsg~Yp`S8^fg{WKvTbs z|JrIhd4j}-p<#E(G9#_^BNYX-#x(R&%q2%%1nths&247~Wk@3~j+oMUSos+`;NuP| zsQPiYQ-=k7Gk&^`2tmqy&anlF^oG)#QnFpEXI>tDz8_$cdrW__3f!qs-nU@9 zo+wv{09I^&%QDFdd42;x_D#vzYr?3D6}&M`8Bm@W_v^G5{}DKpQvXk&APBF_ARVJ;QNKLIe&WpF8Ns8mu>uNzEI%QRiZJ ziPRkgzx4?{xN;WVqfQCzip0_aj+1-G((o`MFy;hb|jH&dyQ8H$Ay8SbP)OpCLtN&Ne{%lp< zYjJ^L)~`!mrXYZ5>)V6_CS6;{KIFIvrn2cM}PwQ;8 z-)QFEXvuJpkWAz}38!31t{2e1*FG}c7^3EL3A=+v-k$J#K0Cxt>Y(?%4^i|0azlP) zBwJ6TFsI2Z27iJoStj2@+x3tam0MT8&GOOmEM2Fj&nLmv5ax~Uux!}g zOC65@OK67-o>~GP#)|um5*c{|nV_&0YUj3SezffGpv3%-2-W}NOkEbLiKFvV#t#hT zC2VA!xX{)o-S`uxmP`JlL_6d$U&viOKTqyXZe3!U0g0)X_z&CsSpi>}OJ2^7?M6&B zwgsb0Ivqk<@BhlL%7s$1LfH+ZmYcag@iJNf~x;ZeOc9Lz5LOyG|rZgt$(kOf8~+u&h}X zP;-^jQH(m;wb9p46^+Nv3p<<$bh7~EkK@@#h6&XYQ@|gJblC*{#M|R7x%sC6{nbNH zIhT&tV)h<_2URBWcgY2#GFR92>gg)wZ^M}44VSL%KR^3Ni0xrt&8{+|JkH1Ndjl{RH@DQH7^^a(P1I>EWB|^hdLwHa) zlQ6>RARg!aIr5qjv$OYga$J*Yq5(vU@9}wadCVJlVUzvCJs8au&m!vmoo4nxhIk+B zK*`h5znHelinM_!rcH(k1P4R|(&1Kp%Z2z6;6#hT8t5?upr6>a!dc_1)NoC{>M{G< zdd_)&Pkt;AQf_xdE{bP{f4nmL9;p-4*H7rq8sSY*ujYSV%O4bzUob~hmQ~HtfVIh= zL*1(Mh&4?C50pk_am6-I-l%UgY5xqQ zlk@%UI!PrTRO>G86YOmo46plHA2B3}4!kabYpcZ`cjlQJsPg3o-T_bLfyw+~gZua8*-_D?kJa_nJ~CO}5GJM%?Emr6@x1FJc>xliVs(TUV0 zU;yq8H-`}`Ax_um2>IpvqmRoANvrdek%d;zyR zo~0jqdCvUAlvSOXYq0p>CZjx`qF{%NYj1yo!Y}Mr8LC1iONDJ1M9qTZ;_5Zdh;dsb z+q~*k&*WEyZVJdPVt%pfz_*~3{(O*ZE=d5-x28IrcI3&_c`VH+cZq=wab!s+&#zI& zp;=ZV4g&ws{LxH8Lp1jd65$prE`6_A@{ukVQI6z+*;zi*HL5t8g5q6PyS%EMG!&kU)>E#Vx)RTtV1 zPKNn7bGiJba}Rv$YOHJkKVT}8wfq8(Aa9?T>2t@g#esBAGR8&u2e$<(#Ai3&T`F7I z0lr&Zzs&4|$plcoqu$@C`}KCHxU1H=!j`;o!I{jqVRoKg2>E&7Xf!-U`^25nVSqlv zg5D&1TLIOv(Pn~<#5@Za%%bK=|BQ?cepBS6`_S=tjkf;X#p90c3Q)9f^-6}8c3Ve( z9}VgqtuP>Ubiu^#V>^HU6r~ca{S8``fVuoIFBV-g@n# z7dW|Lc=%?-_I;g|z7~^Ks_+Ld%M1RWA+j2b>ce>!Uj7eY-}T|4S9_kud}=q!D~kPt{GNbY;PhA$tP_XWJ0zG-~G9J-Z z#1k#f;2D{l_#n03MTyI82?cqf`;-3Kt~-I`n<=%$SBIO!b`T|A)b9l%Zi)-`k7!-w zQD@zi&ZTw-595I0J%-`Ir;^6^yOktC)4OSe?;B**tC+r(A)#|9B2TZCQ1sNs8|Zr6 zTGKSKkTn$WZe74$Kj%Gt-f__i55v6iu$>*dlh|>AQ)|F0TctleIp{ONwnfF};SQPh z;B~)z$sf1NeJNW>ef(Q4(~^q~7k?oY1PTghkfTSd<&du%s^52!B26}^^hYmS8cEg5 zB{$!X$MKE-BO3g`N&b-dDeRB?pp75@X4kqAzuLZ+=VxQi6S1?7Pz9k;CXs#)kyK&%t+6_jJw+uV8b1}3yk>M!Pb&74$6lo8sFD#pw7 zjBR<5-ZQIi2cagE*J2gfdot?LSoWPN(A%)tZ%_Y$$CG)PXS{23wzeRefJO zg?DoXMj?m70l^o_9Us%ZMI`v60*p#>Z6f^#&fyVPP;&(Ln7H>E?^++=uTFg0$ee!k zrPY`PwbS%qsF2fQiJ0D5@<&`$|7RU7&GAeS|^APs84OIz=?gS^NG}Ay1~b zqo$_s`yZ?YuD$(_5uk>QXtXyZSVQBu9cGt(r7<5lFS2Ga z$Cj7bJUUzJokO#_(q`pAOv&H!!L`$v7VZLTpRBM8w4RWd>RSh)v5@n%X5E<$@r$KU zNvT~MdKeJNglC$p8P6pscw%i2zJ!%W@!Bi?5HA{@{sIZSzXIOe@a2LFmS^4>-0|=ovnWo-dZe`)Fk~i@rn8p{YHb$rD9EVTea{4 zw*O>Pm>|*aVx17&t3iH7Pai2`2E8{)hHHPxpX_{#5A5F`Pvw-p9f9}7+976p;dfe$ zyb+^)YK56|*F|h*SHce~I}N2XzpuGAzNA#I(tL7lMR;Cn8=Rk`HM5PydhBN**Iq_c zmrpuQpRlHn>vAb4Tk~S?c^TUk<5K~braJdmBfbPB#re*DNXZU8f?nW?R=>OxBQVZZ z%U5Ntbf@ISb6kbmyjkz>5ssZ7V-9Rrc->>8PbnD>A!K=4zG@;p9(^?K@wP4oOtY!g zr=F(@mt_efqNuVQ`}QsWB{x)&HvhyY7i>vWR8swGQzp-MmVsU*5nf3RLX|?*Kt2G! z@yc>>MJ&6M?QjV*s>F@^Zkb|uOZ&Uc*gQvlTLF1b9!s9(AMS@YS_%#uX3;q;p-rG8 zjK^nc6VFkhS_TcDzU=;(?unRW+I62dx$W06(BX4=ol;4_fKth)?mO`Jv z-{3a4TQEtJAIGSoW@1*jXIp!O`D5b{__BgojPHu3*)?Ki^zUX@!@Ime$aSXBhHt+| znSrb@+7H|ne20HKH%inu$T*V8oI{*=GS7MCMg63GCb!gSPu_G{r(5S&j!(?9P6v=4nM;!IQDIUl08xuG~Wi^qvMUi6G}6*!%{~b zfrCAkht{k!?OTu4TjtkRsqvKiS=23jc)+x}=`UhmrKnqDN-^}%Dj!i45F9I-8g{|_ zM5A%s1M-Q^)3xSFA8uBrHt^!?^b zAMN%T{t<944*FUbaM1`sBL)x2Hsz&7eL zlqzc2N$np|TxNlD&atrLw>1}hIW_yE4-Hz(uH9+azK{l6!GMLf!Gen_kQFkuZ$KOr z9795OYHC5VPqVwb6<|(qpKfm<;%5AGUL_dYH- zK|w~cY^kKhJIothP^#P#;VxkH#YG3AdK7G82RF@V9eaL1Ql#KXZ27@P{x;8PBT}c= zpR|HgB8lNHps#fuH&TUsbOuOLJ?uFW7h9JQNEQ zd=YyU*T8at?YQhkhX0x>CgK%!v1+d^;{nsk68_Q+SzSUoP6=MzW?C6 zJpGN<91}{SxbQZWPhy}P*)}*{**YLg&xkoDwy;KkbPqV|9<3=51O|0HU!w51(JoJ@lNb5b)xnQbxSHP-n(JAPiT_R4?c9ownCG=9YSjve?L7oVy??)gwtHdumdxE z0BNRGKV^?R9vi(DIo3N{$}l1PbC?<0-mA8)82&O`#J?AitZQHOiSOFX5}TUmZ9JXI zjk-!S*!R3*`H))wP@ij#Y(V%4o1_Ud$P?gIz>*xq^SiH&)OCd|6ThpFj^UAJUNTX1 z#3yurh~K5(bdAFJ=qxzzXvvy!4AL-mr3s_j;6Zz%z{LDb3g#LRWPQ4gd=F1KiKj+O zZs12%C&oVuPkMF#Ejml}0zrKr8$7S)?=Nj7Tg&>!uwU-Si=^tNEqXx>N!XZXw0pZD ztZ3K5!k=+MLc{_*XT7wp^|_FLBhEFt);QbpEB}3# zlQFwUs{?+-v!<7WD6jEb%@CN2LdIUU!){2|%Xzv?bMAd9?EN?}@VZ3Sy38?L_aBik zBr>?zqP8HkTiZFy*oxWUU{Z2>xYZ1@S5XG)(t((l{YaAidz$hK+`e&85QfrUi>*fEGa z>9HGwi;~$!x_zWBdf;>vKl>Y0Si>mfcHLg1j;nysSeg}2V#DqbeO z+b&1eF(QAYneGX|SkrUN|h*l$s$ zdy@DG4s7m^yNHpV{+&u}4$k3usu`OjFFsiUe>GA`|KJn<4?WirF=%Q*{9>x52O@bh zyh|xXeOhP?Z*{?ZAB@lm=M|^fRFa>(aClc|XaEv(yV7F}L^fCLfEhpw)zb$TYBH~+^L?+Sj*cmn@4dBq(#04uYWMT_M| z%0QlMyeybIrSa;XU%rj}8Y^&*kEB3VPKBfxnROCFh6LWvT%QbU*5ma7l={L3i*U_^ z_)ny!U<7Bffn1e-dF%*io4}~eo%A~UE2u{&>bct5z6YGzo|uaspd_pRIF!;Al}Q*t zobFjtSjSH7?FftiIm6ZMlr(zj`1V zQMhJBWR?--(wAp5G@xN~BGLzQ>e|;kgAuWh;efR>Rg&ox6doVq{@(4Ekg&^FYX1Dr zSpbymN_0yB#iSV|MN;b|Bj7yGU|RJLk6Mp@e{J? zOw{BGwza4`rLD^_sA?2fvHg7uCqe2@h=<%p;2NDkX1w2L-{QF|8fW~-UhY+0MWo+>P zqs^)yji%05w!n=f<9+XvSE>DgajI@!G#m5?isV^7ZFy(ryJoQSUVM~lblc#LqbnEt z6MZXjY$dm!%O(K*+^hS(rXJzqtW?n!0^QE6&sU@_x#_l?;%+hMs$={&04ElYnyNG+nDIx+oZqMCWQM#SfOv!roH*JLWhg<h1W+$;8rCD8+hk1hR|y8x~J1NT@l_BVv&J9fAGl_ zn;;U&&8<)O4SIYqZo|uldvtw@ks{nFMBz46^XZ+Fe$wdrVllN6zcCAZsu*uRN3^2Ck9X0gO=i%ouRaYT$&ACkH~A; zYNJJ5d%T5PT0ch|#ipZp=SkKqQ-zZ^K1_N1qzmPB{qi1qm|>s;2=QI{ig|<|Tz!o4 zc0awlKVhTa!v9me@WecPStr!of5pJ8oB$i68PbCke4Ju`JEP&`fxUNQ1zR_g$lEY~ zeT=qjvFP#sW;Ogd2Xo{<0_r?!a&NSjmNPoaLbX{F@al&cE=bNgHCgw2dv_>zECL$+P2x^)1rM z*mWKL60>~9iB{H6xP*XP`}OIbwoQ{_*hpUiS$eQXo$eKt+2R>&o@%aZZ9Dx?d*yXa zWz3)qVvb+8i{WI58waE^c<{^?{atL{$8MY#{P#LzmZK!@ z%gZ#gG8V0q@^S;#145v1wQ9GEYJRmNHGmo6U%%jVp~YQtkow&CQ0+$%X`VgNL-V6> zsSjj9MzLWvzgVTv7WoGnArTS+9k09q-QpF7mAjKdM*|JdRcpN`AQCM$h)&Qw!(`=t z1{MXQivD1cQ7tC(M`)dM*w}8ki|&!9jSi#wh?`nUo8jPAO5{WzqL0>+#!lH3IB?vm zH}Cg+d}k6%l8?*tG&E*kWFG~;-TV22>AZIhE^Q2VARF%Jb2^V0sSIKb|NQJN$Nl3# zKKNf9`3HVc9`rp>7fl~sY#*KRnE=co*pRD%)ZFl)H-J|~f4IJ-Ih>7 zNULMYCUrrGALr*Xcoch-mvX@@Aa}Mu(o|~wW9E+o7en^Q7UmqtrZkkw?)xYE5Ah!} z6d#manMYlI$;y8Ena>40v;uUF<{Bxjz$lmWTpv5h`PUP>xStWQwJj{s-q3asA(`QV zEovuJY(@tFAYtvPhZbeeAQ>C?fAqdcqEbBp6|?vYyeoe+75j-C&o|^+jQ)5^5gyBx zs(P4>3re-r_0^G)PeRVNfh-?NX|j{T#}H+`8M z>MH($!igsd=MQ3? z{9UuNKbS-mp(^xx4G?&|cKleY{s+_s{2sY%T>J|uANAcKIhEKjXh)&@$sS)e6ddqq z>snlsze=O{GS=yBfNW0yyUcy%-iX<3RM=4nM$#Hifl|C!q<1T_JE}4^eDKv-lT_e% zgj#aEhKQfxm5>wEs8oqy`xX`mg@{YaYjIC$QzCqvUVQmoYZV( zs3S&LZ``ECwKSZwzu9SC$W4K&PAFq5mc5m?PBCqkl13}@r7!jD9787aie<`q?QhWv7mSh~iqylpmmU8Bzr zyQrFvTyGJs(ln^IMTLD#aw2$pXjqxwGMD{f&q%GL);K`*dxu8XlqO>O-Kv3oD<$V% zk7)vjz01^%Kk(e(GJFPF%X>j!(|Y}Mp(wloayT7=-637wbvG8J^%|0osRin>WWQlU zsx+&rCAOXkONl#5uIKTKcXR&{?R^4XAMO)(yL3432vlLH2|mD?0dF^Mw9`Isl#wCf z3_QD}W0vwNj$|RuN3*yAc72@`d#ruLiRzJC^~ovN}8O>FddSGQHi8T1zk_oxG3Pv&>#^p$qfAXU5qn z5Jpu%Beoj@IaC$Me8A6L&y#t2gm;j6CuOiX)?#K^6p*~x(KLKf6U_HV7k|Wk_LC0a z^9mCqe*9j|+xFR3;Zi(smWzx!a=4)=i5&b!tufZ%vOPVpo+Hu8IzhB(643Bsm9n^Ra z05mZ-xhlpaJ<#oilK@-vi>E{hy%s>$iz2mEiabZJlh^$l1Du-M{4nMb2~nK*~yjRF42~> zTH}&QT>RvKFSM(ITnttE*q>rr)0<#_*$o=xC#pm*Fl|4j8j=uo<=0=(iKumupk3^y zooLFswqtV0fYvnZ9>9~0rp3QlSr?~}zlx8U?(a;TBoVJf-D=|fx=JC*9x$Hu#2l@< zE*5VFbs||ZmgpRO@YY4{Z^4MH8fN5T{vPM>!SBZs4Cue(T?1{L1CMkZQ1Y?Ab{jsC zl121rszvD-uY?iOEj7_T!|W469Og+l^i}lWC{cD730k{s%4Pqk?n;=$oZVW=yZ<<5 zcTVTPsv{QtYWC<5G5L2!+`&}bsa#GbveoEA+=tEhOJ5b!Sh5^GuM1m@VAtw>JR{`e z?r{Ju0-s)>H0fVksxG`!OaT=md{YV;Dc_d(-sF8=c8|FBsPFdy3^vwJq*JJr7Oh*0 z#v2G*<7pjNy|S z)fc|c1{FkJg+C2@xItrYR-@BJQ$=t?c6eMy^OVaW?w=omXyWW;M>P( zme^NoUlJ4Ng04Mb!i??I$O_GBa$C>&3*)f*WEV$vVqTk&qQULS6Of?CX{a&pn7~42 z7MIQBvpcGoeb)vUsBw}<%@0}SuM>-a&3aCpjvb%rdSVC%&GU#|3q;JkMGCVxD`*u+ zD{PhzDceUoNz2cpP#~#J$mDnJ%W!aiRzj9VRx*i1EHj8RlbKGV`Ln}wuT6SQc9vga zItR?BU5f@)q5dz;pVvR=7+DXdBAL@s%JUPNy|^>)WTLLB9p`O#u?rYzMzGMYr6lH! z9*B?jF2vAH0H?4ORS2u^rxw;_$GKc(wSk|V{Vxe2+LC4LJ&d@W&qd!as6(MD!-E!m z|J>Baq*oT7;|W__eaxf*xoF^}y^*%2Xl_W-L%lE85B&|J@Z_Za^=qeh_E_#r+=*UC z)86f0!pN_f@HaMR-T_{=(IDDdtzBg~-(XYVJYnZ>X2?zU$vW;DPqwYv)hgJ*!Z5a( z-kEY}cmFZvg+*MGU)c^2yJET)dfVKr)<5Vs6+$ZJp<_$r3S#Nbu@4p9p$jSk!MrR<=N zrFUS5Ig-u?Q zBLs(*zigIF-2^cAzYNcelo@X0LrC%=8TQvMjNUiQCLK>Y7C=q}J73+;>W#hM zr9=#cK4OC(&tV8|iUU~irmu@BlOF~tdj_X9DoQfZpr+&`jA+@-N0+ubvz=NsG`X(| z1Em}kndLvr>q|tl^bt5vg#E?*pszim@U4^oO3B%oCSM=VBJ#D$B4avasWs@;WvPii ze~tLaQBkT0U&yO&X`ZZQbTCs%E;~8O(>vZ)VR`rDr0ViSjz9R`ZIg{+v0Q8OxDc(U zYzQLiIji6u>V{g6l-ES&?$48h_N18}p~@;CX>+#Y-Rp}{exg8#Ge*U(x zKWrpq=gpFee6o=hEy=xKw;_bqChk-GefJna4*JKUXHVPzYK(c(VCSG6#(uBb zXwiv?8$vSRBFTq;>Zlf6t7`G^n=+T6-gSUUv}ZG?pu>{rlL-7*4SLuJ0R0-?8IJWp zyjbj8u(vdby=@$=BCC==pgY_;zn}3T=2iRQ_AH7jM3Tc&x16tQ^Sty^apMYIM*0d5 zzdlN3MzWyOo`>x9FdwQ=RwHlNPF}V=>>O5bz#>+6UG7&Dc*=R?D6t8`aBMU&E_+^{ z{FV20c$fT6<4Nv!5tKujem$*)q_e2=Y8aEYdqvXvR3KR%)O)}=9nN`e4b7pR%rCoF z%{kgLXwo(GxYx&2cU}&3nh{Vt)wAh9-P30Cfn9tJX}Hx9I09iZEt04LTm-qCkUr^} z%&ZgL-+@HFd^`V7)<@6j@#tMdSKEzPTnC!H3cGfvWeENUijSr zc0ch60%kItg{5J_!GoP&%CRMJCoW{*NRc^gfNE81A1vSpM22P~Qa4h=+PKlK3-6p- z#Qd4JTq@7HOKLX~1lpOKH{z!a$joT$nN0BC{A_SFlH`8snTy>`J0Y7?^tQB>q*aqb zm}UxL#mbkSb*D$2ld74NnkH*hNje@pfX?Zz#^RJLD|7hhiG1&_@v~iB!-;4HT`f@x z-w|O~xI&p3J!(c}1```!>o1Rg)Ou&PyQ$RGV1A*y$~z|N`+CgOoC4#Z@Iba;0;S}B zU+O&8r<(S>$5ngfe)6Nz*OZrPe5-GAU3ZHX1L5x41>NBAOfGb`gGCM`dh@Ho#C7FF z>7%lvvYWFfZh~#}+si+;60%)oy)_qjQeE$*k@`i^fcS8BBHIlLJVxNGYnCBMtUxI) zPq$Yh2cCz;y^&B=MMvh_&AztDU#7O9oPO}5pEYQd>9V{{^@*NtjWc*jmO9Gww<(Dj z%fP*-l7UotegxLUUCKl^??8qn*)XmGBAD@9FaKzPEuP>Tnt+0gX$a-wf@pbl__%}F ztOrn|*l?7Kurgcncl=RLgsfz(dHQZm1^d(!FcCO()Dgkn?Bn=2H8}55|D* z`~J5AS!NuZo>)~=HaWf*JIqUlA6Tt{#dHqlpg;R^m}^-yOdE0i>4H}E;Fv{sUX{2P~S&6;g_-uO8ssi zY}z3Lly-ia3wmsd$`SeqS^}3eV@mx1Ype5C3TTRTy*Hy_44yx|N@O2CI`s09YM44v zeX8g9%;Rjyt^VrH3qDDW9#25E&JjV*kwd#P*^&6)7+8zy3$ZY*bF!fcg%iz8bI)~G z1+AxBYyM_M#`89BHEi{xA}Ly%-XthsIbS@elx!!@$v$k-`Hq^JuCWr3+A3TsjUq=# zYZC{teDl%9Ds9$3wqg>)rH6m>PoA<+m(9N^tVa|Sd?=4chxj?Z$baEcGLw`iadKL} z*K8l1RAeh;=uv>tIbVEXt#8KUqFVUlu}z zf@1CQVb|JHN$yw>PK#4H=HV8%@38)iNU=s!<^GLaN&crprg4dC7GZ#U|(H0@vV>Zb)EX~( z0xH|}Onc-sU;q#M0Ok!^6NFo|I9KUS1{>f$Do{GXdyeW#9#tMX*kR06q0Z)sw+rg~ z(F4x{VsCh&T}oxkRUKo!Z+W{6_!MJ20mijCZ}zDjo-+fRl5%0gb_5dqdx3hM z?d7TTu-m4Mg2f{SY=NS_8o4t@bo7kPzM44CpRh~68)iAFjU4Wva~H$c)8!67`kTEf z_tW;cVVjMSBQj_oE%okRpBKd@FDZN&V6Q}kehDqyGE-4F)T>_z?b+N`pTa;tZj@jA zmZt6A%wOXKZfsIew!AWW&HU-ClSiPXO-#$+_~T0Fc)8EOi|twxZ$*_;-uvrx3@ zrm^-i8P<2f$6F!53UD!g4LB;E-d=MCVnc4UAYl*A!*^wKivI~bB(16Tvz(mHq zWbwD8AMI9B;9G6$I`4J}VkAm~{)Vtc#XVYKosjKVv&A%NP^PK%W23aYDDh-Uh|R;v zG_R6?dm=bSivRuYf4b!rLAQ*~q-)o4|IaQW057EokSHnowr7*4Lfkw`Vox4=-8S`D zemao6Wr7-6?_do4+oL~WfAZ#7V5RrO&4Y`-xTTwvr`>f?o`k((&Ap6rD!;V|Ny($< z?pnaRRP=6PaKi?;>YrRTwyi5_3#(IFscrj^<#j8kskXkgE@9+EDCM_@khsJ=yr=>+z(z=$SFCQv^!J4?;vKs12&w$fgStCcEzo}4qi(( z3ej*=MJoRu1?)0uewKQYyhiAl!T3Pu0GDMA8Qk^X{3=xF`~A%eCC;k(`|4H^WfVI2 zd&?LN8-4W|-kRgL3SR?}^TtBk1AVb=&mQ(NGTkcNZVq%Y))YBq+ttK3emr#w0PT3A zW1m#r?IrZK#$IgsJ!EwhdAgYguAVsMB~G|I$ieJGHJTR?31P(F>)QZ?i?XTa9qMN$ z7aRO!I8iqEr0bq<)DU_fawYF`mKc^G=k}NbSW!ujJdMn%l0PO!c)n^xN(Nsw88!SP ziaq8?A52FI3`V!d<^NLga5#^tW4pyP6phBCR+${nq+I(ZTo`B(PZ7M%J6BU)sJC~*z|$_r7>wvcYP%$w^3jKXaZ%q+f|iL#sXj(~ zDIp!ddaai^=pFO^v9{1OjZ$w~PrVIz&*|{w!(9wuWs{WZ?2)G>L*ia z^J=-48AQy$F1`HcU)l;raKEk_eT-*X>so8X?SM;Cl&&^Y>c$WXHcC#O{0uCEg&lob zFKfg`h?uo{=4)LOq=v-b1VLlDu?vgYFE2l9Jyaq4M1rXUog`>xw%?FnV1RQc&-6Ax z5HptK9RW5sIg@x9-~$@*;Jdw&$$-#W%Q44U>8Y2mUW)`RowY+LeXC;HaP(sUroV|y&=Q8OvOVdm12!QYdTQ{` z%}l+XMLe2pBQ(!wx$ys0yx3jH4dy7Dx*I6V3?D5}-3BiRorP=mY4ouFQP#yyI2#Ta zMO$~hV<7}=7zkaC>qWIc>;KdQ@i$6qiC`6Qq~3_6i~n|lRgyPeAF=7V1{jAu)2WrA zxI6sOcJEy9wN|n)1J4jfrz?#;3}pbTvBsMQ@`qEN+JBvL?>mFNSB#&9IN4sae?X^l zH$GezUfJaC15dQtsUT}h*WQsz%*KOZ=8Y$Gi3wRv&455FL!qds>w^Pd`k#r}Jw{4H z7rnC1b;hidCry9hgQzlCy?)5{&FtJdQazzX4_S*4h^+bJ9^i@+DYOE<;bw8Z+c!}e zuxhK={WSty_o4mB(awX-4QJG6K>aGheJv{1F*()Co2HR?#9%VQGH)Z2QBi-%(aQKP z2^_7HvCeMo_$>fcuu*m!-w!e$v7woqh?UrqASYK^O6}SBY4tDR< z79VFHue&n1r?gW3Bho~g_Rdu=oPZ*WV@J!pdoEA}JY~7L6?@5({?f~-=g^;2#y|h- zcK1tV+WdW^lgPGvQa!mErUZx>?++*G$#fpk(L$WmRbMdiF{E&o@7MclO(libd4t zbj|@2UVWT~{3+tiBrh+TiU(FrB`j{_N5?RuR1n!sJDg=PZV5^^_wx~}G_@2b2l;Pz zB4?sY8i5%9qGsifckTeOK^Z5|k9)~+Gi>gKMMJJOHJi-$qui-Is99>hP9$9vO!X+IK>dN1b?yF z@zr{8_m38D%%?;Cx&9q}>qjyXvK^HUc!r+$&eK! z=+#;^;~klp^e+#n3FS0}C%_x4ii+w<`?X2;y>D-4kfrK!ImC~sISVfd?rJ(gzpH|R z1*`*D8qvEOcPrh>doKMs__o~Jq{ zfG(bHU}}tuvPLpFkeow;EFV=61%ECGV|dj#hdXhFd#_0%wzrTT5$H}3sqBL)!*nwb zwg`ArxL_>_K_qL6tvDKba>9G4(D{ZW(%<5%&6ND&3O0DEKTaiz6#UCENdb# zt*?hbeSm*)3WhR7-3*siB34?3+0`etG=>~On>)9}i<-<_Zb?ZVMqrK6`xri~1ulIn z0n?ij>6^WKzf3pOPTUM{P&BxZWh3x4kj+#Iw%?oGSRZ`0eC#-G5uwGgw-h&g@6f`M~N~>P^!Zw#p5>^ zztm=tj;j)dv!r)#5(Xv`X2_agMEb={;5{sp47i>pqD^GkeXkVMjf57*zfnI%_j zhQ~7CiR&3g_RXVTE!3&C!BWr|IoLHu0SnyR`D;Is*aibbtBaVyJtqDD&SoUii6a5;q#-#I^O3V&@pXR-0K7qq& zr{n|Z5i;4hHZS`!r7r9CGsANSP7o2s-cm-~>M_@$&2wQiSl z6Vy$_fkOc2@{6$ZTX&cn_6bffEZu`-dlf`K!uhIUE<7t=GI@U@Y12_pFtpt0y`65( z;g0~$gTH~!ZmZ9t;W2ico12-x8<)(#@hTU>*TK9{`{f?{ita@zc4TR_zw`WOpQ~Xn z8Rl@MO{-h$N8G0ztb0m?G@+t5>&L4nsUjnk`~<@`dNt-K-}Go?yRnb`LTHO}D3V{-@1J<#YiO(OT%#<(`bk+1TEDsKA-j{cHMfr^!2$+6CG`CqE zP`l{e*|^!=t{<*}uCiW*;imWC8l$zMcVE=S4%8Wy%uXd9C~jr>;NK#%_I*<=_)@@K z(b}+jVQh2QKO#14N>=<;#=G^hPal%)otjye!Pk_FZxR^?d(W-DgxZ@B&ueK8j$+^zEgIqh;ZPfCM)U_k_sJo6AYsH>vvL_mU zQlF%LNv&?cNVM^Fm}DV>=)W#2*NOji%g_G*mZhbZZC(%0B-)@#3~1{fN2uio=4Pn7 z)4f+$owI4!y%YJn>2a#fzUtzzm;;Zg_xIq8jeHUkYT}45rc^XkM)!R7fGnMDR=5(V z^)I?h2ehj9#(vs6p~z%A|5wu^;)i9q!7K3}K;EooA@odfz`f?dhNCj&u28pjP3aU* zM;dA`E(l;9JPJOZbwbkhtuohAuzz;G$qaXQ#~3JhiC$~SGs==SaV(u|pFvp6Vx<~z zT^-;DFEcl_fse~Vb7uwj*_*E-lMA!XWji;|L6{Pa?KBMm%Jv|4d-q@>L5z$a)Gp{;>6)I57Kz==m3iQj3*Cu4gL zpp)}l22 zBINyx*gt_lH>R)Z4`Pzm(DbnON}9aSD!I#xQ`i%ol-!!nl(O7rWc!JbJ>M*9j(h1TB0UUg|0qoDmEhb=Mz1c#)H(YtlRUb4i!u8wU=;*3*WjN z(Wz?yoXxO)MVZLWunbYSFE~Y9h|tTFcUHw@S=ZBpw7(O8FyC;bX6Ej>jCL1oL`eAe z2A9IM65}+?;~5YFbiBy&)-Ha%(xuk=aJA@w_9i-Hb=X0mfjJ2OOICH~{lWV>7ZmIj zs)cT2}GfYJ?8L!-pd{hs~4 z@Bf_ZT<632us^J8_UyH1t(iS*JcaWGjn*!7^3K%gQ`rKKj3~p1RrhiQoy}u%m+h!m{~& z5ZX=`)B`6OD>vE~U#$7z(GI8AL_uK5J%Oknku$$96A>Yut6SlHs&Y?Yjy3Ysqzpfq z_Xaw$PvMfC#`!RJqb7$3!j%*lP*^*cjnI|Er|Iu940^3kIXEqM*QNFdV%ZR(e!544 z>(q~o^-qRg^_(}p@yukJa!`&L)I$&;eDqSaQ>Qjwb9 z5c0O-UIRXSHK-M=}Mkdm*~aU1U3H4k7A)z z*m^W1;%uuut1TX`iA_;&Kd6fR^mJe{WA`oK!DRgGA!r3-OB0Eb8YPsMw`V<@drzl8 zfA_~0?9YS+TlH4}<%wVL)pHV25|ro^Q=2c;X|^>e9juR?w7%#@{M`9olf|w!U9Hb{ z`lBm8?7bOkDUL+>f<7bSqWVhb;(htbS2cHKp_`Mh`;I*|w`BM!l>Cq*2;hQ|4yW_j z=>4U%DE@=k)_;J;jmCL-%jJx!H2BctrL{EtRx$pbt%_Noj@(^H-ZIiph-vid8D$(! z9FkU|xD9qMoi|cfMmVN=pkQK_YJ$W1kG31Itw@oo)CcJ+vFYjJdl5{q{Xl|D0E5>5 zZK#o{^0y(GkoB;Q6PtBeWbd|c!T!Bu7u9kyLI$Gs?4~@E^!gJ0t!y$hcjG6m+4z4k}gVGP@Ts<9IN0m*UO2d(Y3^x zb#}t_NxIheo1bU-b6srU!+mI(zC@4NEVeoO;Va>1;BBC}$?NXPjm^MGE>C{B!9Lqv z%5(DpQxS+ML}#|yV?gMoicB7i>_+d?=k|ed168$&S8p6ikPmS+X~&}lK05M7xqs!j zit8H5Wrl{b$-nx!@rNgEc~8;(%Zc*!$a)G!T((cU%5hf1a0-fh>jt$wjgEo{Uc{g| zI`I648g`0o1vkp~1)2}}hiGXM!kY-V92K@p@MR!ywW~jO1b#muPcC4k%4=;7Xm#R? z@4pdQuvQ8S?z<|3Y?eU+uLk9quJ>5??ofcP?XK{e>uyA!rOVz*-^lAg#XH5KB??q4 z+rDd+jv_EfF5`VVN4?2n0(b)C&qUQ@mKZ$JK0v5fFIi348p)3qMI$cr=2ed!?YI{7 zm*2+gR-XF%FFM1IZY7?{R&6lsg!{=#${~zD?G87~q^ILYcow`W+V~=48L2y#H$O`< zTHSP3AReCUa)>KsiSw;&QBKi3I49DKfdVjo*y&ysDafsoTYSVkeUc2F{zZF51q2|w zn=sRXpdXL<3k&;O{hBIl)j_fhA+CTYaPnVRTnRw^SmH|xW^7>bIOG?kPB+L}VOta5 z#u*W>Ia{?Pwuo%2R(FSv>gHwAzM~@%B(8!{f5Oq}i?+b`Y1p~c7V?5-IW`C=oMnE~ z9D&lF@YB^+0v)OE(!}{mv%hUE~jV2UcWo~3#(+UNaFJu_n1|fhdg7qnT@4ha^Htk-Nawj5jE}0HfP&@2vmxi z7_qQ8zwc~C^wpo}STuzVLrrZ36ygq=?4WUd4KA$`E<4(486u-pwS& z%-n$Sx|8bw;hkS&6|Dlgv32StH^b{f2ZBFUBaMzy=9c7J5`SU6!azHhD0^WZ?ckr* zQlLAd!4gIP;5Pg9vx6}=3yMv_bl*(A_^edp!b_UU9UvmX0&MWZuHm*WOdWmPA*q6K z6ei+(9KFh}Qh?D*cIr4S4>Z`q(aczPAM0x7sKURezGk<5uxyq4P>s~s#{lv@giZ$* zZa1Z;+sFGxD{ROmHM5i{9{nPn+GP}$5!k6+2~o1sYT(^=<%eY{qAAYrj;zQ0=Qe9M zF-+kmL$0$Ynt0m}?6!BD+_?0a&YAzhk~TIU(LhIrV+t|*DRzHhQSWe~er4_22BUgQ z7n2(rA7$>(-9F%$@9{8B)45>V*)oTkUQz#+_1X6EMB4==Z)ta}>bwR3O36zQj3`0f zTJ*bHTyKu9$cf9`^Nu5$YOAqH*f0>3sP&PoV`Y7P&`>UokvDoRK5O>wgyE2CMnL^R zZRl>i@yH!kTMz`$m&@(**mWnN`?8}mr=bN3r47sAAfYRZhAGq`wLg5S3)XG8kAH{4 z$oLv%j`E@IRka$wvoH40dQ;W9u+i2M)IllvIAPf1x)T;<=l?`Nac|?Uhh79fi+hO0 za(|)0CGtws21@E`&wT$ohWoRC1pJOW>t_^t8ZGb+2#e*!Dt}Nnt7>fX3tL46di-(_ z%us=|lUpMTJsk@Hhk9IUF8_$)kbE!K^ks9esjVL9V~@|u(o7w5i5>}&*bK2)3V5Lw zy4ukF`$*?=D3LfZAcVf~I+vbU2{~Q={-qGVWJ9*r0gEUgqZuds_%UExc7VL|Uf2e5 z(Dj$bgc~Upbr(|s+s?I3@LyEV4~LZ3M)ru;4xTT-jeTA=jn!pviG@xMl+0ZoD+-R9 zcUNnC^!#;?* z@cA7;2%`J{C8#UlnxrOwAOP1O=%JO{sY7~q--;wO|xQ|HWR)>Z4-OmtdN z5W!vNgae2ZsNtkTkX2YSjRDG@RwakDr2^NZLzWwaNCAO{GntkISVm~n^eX#MS?ELy zsR9wLoPBiJtv9t62AgzntgH`|R^_=U2N0r~q0M!7xBL$Ky&TA}) z)|<@d&s9q|b4<_L1(wNf_}WLqHXJTuce)Zw;YZg--fvj*nHc@+fq>JvG5A+c5MM6$ zy4}V1jt8bIfQ;7fv!(lF?u*}$5si?2+@yVnZ9=`+%_ZWL3=QwE9Gez_#S}*ZMSQDo zMl}O?I0P58CiZ80>_inht?*rtZ~|E?*ke)0MB842YyqjB2kA7^$!Y*kT}hB6ob9zp zXF1{hoOqm6kUo}@7nK&f!j8nJv%mc)HYCG+d3_~{l>w*HEJbVoigA5>g%`Fj`>Iac zyawctB7Vk1+2VMU z01gP14343&UKcV8c|@u#rZat0&k4`OzZYSwOha(|u+oplMQ$+3WqfOryLGPt%}XuX zs2^^m>uvs$<$&DnHQs3jow#D5av;~~2y|7qqpofavL4`ml6{!3r!T?aWe z_!14r#>6!~at2ylJtK?pR3wr5io!>iZ<)qu(oBSfp8S@}TQg6!+D^LR+er+=QKcy@!Q(^Wd_Ehu3(Z&WC;QS&tIxcina= z^^oVFro7pA*6J_i&0870=TUEb8~ipBR(0~62)f1Tl@Z9*71&3jk(Fh$`=iMfV<5!G#g7!${5^vQX26@ zLvYe0W{5Q|9hRl58YYu0mm8zX7MN;uTYafzAn`l)Pf>O~96dh2CuKu_{LD?O} z_kQM((O*Aj8RSFjWx#VK=Ksar(6xYyo4jJz2bO|b?FB-5_ujcVsRLi99^x-u<{EhC z*M2(PyYm2=`RPZ=3C5UFKk&{SZEeT*g)_;oc#`2O7UT5-!aO{C=gu4_`^3WtlJN3S zWW%)~B5l|6&-~-ahleh^2n8RgFr(RWQN=3%@6aSd%B@8OEHBL;B;4=K00V9WdVZc& z@s+~RAJ5h+fo?7-nxD@Hyp@xkjX*RBUi^tebOb@sN>LK8Jo}A$F#*tir0-M82oZ+s zzApfn-feng@-jD*hga9Ek&ruyoMNrf#VB^0{5{R2w9#TW!7 zcH&FoD0hqlP*XIvDd>UK2m=N&8<>!&XOm^Dme~h{U31z2@00$3>RmNJyRY1rRa+Ty z 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 Ym(nisK*|U0sA)47{~;`;`D^aK092z)QUCw| literal 0 HcmV?d00001 From 15e1047df4e80947c47f74c8b792d1414c4e813a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AC=A7=E5=85=83=E8=8C=82?= Date: Tue, 29 Jul 2025 10:34:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0:=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BA=86ollama=E6=96=87=E4=BB=B6=E5=88=B6=E4=BD=9C=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smolvlm.modelfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/smolvlm.modelfile b/smolvlm.modelfile index 1af26f7..77ccc5f 100644 --- a/smolvlm.modelfile +++ b/smolvlm.modelfile @@ -18,4 +18,5 @@ PARAMETER stop "<|im_end|>" # 注释:设置停止标记,当模型生成<|im PARAMETER stop "<|im_start|>" # 注释:设置另一个停止标记,避免模型生成新的对话开始标记 PARAMETER temperature 0.01 # 注释:设置温度参数为0.01(接近0),使生成结果更确定、更集中 PARAMETER top_p 0.9 # 注释:设置top_p参数为0.9,控制生成时的概率分布范围,值越低生成越保守 -PARAMETER repeat_penalty 1.1 # 注释:设置重复惩罚系数为1.1,轻微惩罚重复出现的文本,减少冗余 \ No newline at end of file +PARAMETER repeat_penalty 1.1 # 注释:设置重复惩罚系数为1.1,轻微惩罚重复出现的文本,减少冗余 +