From 743fa3511789c60b30fa1bd3dda0eb8566952f06 Mon Sep 17 00:00:00 2001 From: Chenyme <118253778+chenyme@users.noreply.github.com> Date: Wed, 15 Oct 2025 01:23:58 +0800 Subject: [PATCH 1/2] feat: support use base64 --- app/services/grok/cache.py | 160 ++++++++++---------------- app/services/grok/processer.py | 55 ++++++--- app/template/admin.html | 203 +++++++++++++-------------------- app/template/favicon.png | Bin 0 -> 104486 bytes app/template/login.html | 152 +++--------------------- data/setting.toml | 2 +- main.py | 27 +++-- 7 files changed, 212 insertions(+), 387 deletions(-) create mode 100644 app/template/favicon.png diff --git a/app/services/grok/cache.py b/app/services/grok/cache.py index 5dcbfb1..d9d9220 100644 --- a/app/services/grok/cache.py +++ b/app/services/grok/cache.py @@ -1,6 +1,7 @@ """缓存服务模块""" import asyncio +import base64 from pathlib import Path from typing import Optional from curl_cffi.requests import AsyncSession @@ -19,42 +20,20 @@ class CacheService: self.cache_dir = Path(f"data/temp/{cache_type}") self.cache_dir.mkdir(parents=True, exist_ok=True) - @staticmethod - def _get_cache_filename(file_path: str) -> str: - """将文件路径转换为缓存文件名""" - filename = file_path.lstrip('/').replace('/', '-') - return filename - - def _get_cache_path(self, file_path: str) -> Path: + def _cache_path(self, file_path: str) -> Path: """获取缓存文件的完整路径""" - filename = self._get_cache_filename(file_path) + filename = file_path.lstrip('/').replace('/', '-') return self.cache_dir / filename async def download_file(self, file_path: str, auth_token: str, timeout: float = 30.0) -> Optional[Path]: - """下载并缓存文件 - - Args: - file_path: 文件路径,如 /users/xxx/generated/xxx/file.jpg - auth_token: 认证令牌 - timeout: 下载超时时间(秒) - - Returns: - 缓存文件路径,下载失败返回 None - """ - cache_path = self._get_cache_path(file_path) - + """下载并缓存文件""" + cache_path = self._cache_path(file_path) if cache_path.exists(): logger.debug(f"[{self.cache_type.upper()}Cache] 文件已缓存: {cache_path}") return cache_path - file_url = f"https://assets.grok.com{file_path}" - try: - # 构建 Cookie cf_clearance = setting.grok_config.get("cf_clearance", "") - cookie = f"{auth_token};{cf_clearance}" if cf_clearance else auth_token - - # 构建请求头 headers = { **get_dynamic_headers(pathname=file_path), "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", @@ -64,17 +43,16 @@ class CacheService: "Sec-Fetch-User": "?1", "Upgrade-Insecure-Requests": "1", "Referer": "https://grok.com/", - "Cookie": cookie + "Cookie": f"{auth_token};{cf_clearance}" if cf_clearance else auth_token } - # 代理配置 proxy_url = setting.grok_config.get("proxy_url") proxies = {"http": proxy_url, "https": proxy_url} if proxy_url else {} async with AsyncSession() as session: - logger.debug(f"[{self.cache_type.upper()}Cache] 开始下载: {file_url}") + logger.debug(f"[{self.cache_type.upper()}Cache] 开始下载: https://assets.grok.com{file_path}") response = await session.get( - file_url, + f"https://assets.grok.com{file_path}", headers=headers, proxies=proxies, timeout=timeout, @@ -82,70 +60,44 @@ class CacheService: impersonate="chrome133a" ) response.raise_for_status() - cache_path.write_bytes(response.content) logger.debug(f"[{self.cache_type.upper()}Cache] 文件已缓存: {cache_path} ({len(response.content)} bytes)") - asyncio.create_task(self.cleanup_cache()) - return cache_path - except Exception as e: logger.error(f"[{self.cache_type.upper()}Cache] 下载文件失败: {e}") return None - def get_cached_file(self, file_path: str) -> Optional[Path]: - """获取缓存的文件路径 - - Args: - file_path: 文件路径 - - Returns: - 缓存文件路径,不存在返回 None - """ - cache_path = self._get_cache_path(file_path) + def get_cached(self, file_path: str) -> Optional[Path]: + """获取缓存的文件路径""" + cache_path = self._cache_path(file_path) return cache_path if cache_path.exists() else None async def cleanup_cache(self): """清理缓存目录,确保不超过配置的大小限制""" try: - # 获取配置的最大缓存大小 - config_key = f"{self.cache_type}_cache_max_size_mb" - max_size_mb = setting.global_config.get(config_key, 500) + max_size_mb = setting.global_config.get(f"{self.cache_type}_cache_max_size_mb", 500) max_size_bytes = max_size_mb * 1024 * 1024 - # 获取缓存大小和修改时间 - files = [] - total_size = 0 + files = [(fp, (stat := fp.stat()).st_size, stat.st_mtime) + for fp in self.cache_dir.glob("*") if fp.is_file()] + total_size = sum(size for _, size, _ in files) - for file_path in self.cache_dir.glob("*"): - if file_path.is_file(): - size = file_path.stat().st_size - mtime = file_path.stat().st_mtime - files.append((file_path, size, mtime)) - total_size += size - - # 如果总大小未超限,无需清理 if total_size <= max_size_bytes: logger.debug(f"[{self.cache_type.upper()}Cache] 缓存大小 {total_size / 1024 / 1024:.2f}MB,未超限") return logger.info(f"[{self.cache_type.upper()}Cache] 缓存大小 {total_size / 1024 / 1024:.2f}MB 超过限制 {max_size_mb}MB,开始清理") - - # 按修改时间排序 files.sort(key=lambda x: x[2]) - # 删除文件直到总大小低于限制 for file_path, size, _ in files: if total_size <= max_size_bytes: break - file_path.unlink() total_size -= size logger.debug(f"[{self.cache_type.upper()}Cache] 已删除缓存文件: {file_path}") logger.info(f"[{self.cache_type.upper()}Cache] 缓存清理完成,当前大小 {total_size / 1024 / 1024:.2f}MB") - except Exception as e: logger.error(f"[{self.cache_type.upper()}Cache] 清理缓存失败: {e}") @@ -157,27 +109,51 @@ class ImageCacheService(CacheService): super().__init__("image") async def download_image(self, image_path: str, auth_token: str) -> Optional[Path]: - """下载并缓存图片 - - Args: - image_path: 图片路径,如 /users/xxx/generated/xxx/image.jpg - auth_token: 认证令牌 - - Returns: - 缓存文件路径,下载失败返回 None` - """ + """下载并缓存图片""" return await self.download_file(image_path, auth_token, timeout=30.0) - def get_cached_image(self, image_path: str) -> Optional[Path]: - """获取缓存的图片路径 + def get_cached(self, image_path: str) -> Optional[Path]: + """获取缓存的图片路径""" + return super().get_cached(image_path) - Args: - image_path: 图片路径 + @staticmethod + def to_base64(image_path: Path) -> Optional[str]: + """将图片转换为 base64 编码""" + try: + if not image_path.exists(): + logger.error(f"[ImageCache] 图片文件不存在: {image_path}") + return None - Returns: - 缓存文件路径,不存在返回 None - """ - return self.get_cached_file(image_path) + with open(image_path, "rb") as f: + base64_data = base64.b64encode(f.read()).decode('utf-8') + + mime_type = {'.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.png': 'image/png', + '.gif': 'image/gif', '.webp': 'image/webp'}.get(image_path.suffix.lower(), 'image/jpeg') + + return f"data:{mime_type};base64,{base64_data}" + except Exception as e: + logger.error(f"[ImageCache] 图片转 base64 失败: {e}") + return None + + async def download_base64(self, image_path: str, auth_token: str) -> Optional[str]: + """下载图片并转换为 base64 编码(转换后立即删除缓存文件)""" + try: + cache_path = await self.download_file(image_path, auth_token, timeout=30.0) + if not cache_path: + return None + + base64_str = self.to_base64(cache_path) + + try: + cache_path.unlink() + logger.debug(f"[ImageCache] 已删除临时文件: {cache_path}") + except Exception as e: + logger.warning(f"[ImageCache] 删除临时文件失败: {e}") + + return base64_str + except Exception as e: + logger.error(f"[ImageCache] 下载并转换 base64 失败: {e}") + return None class VideoCacheService(CacheService): @@ -187,30 +163,14 @@ class VideoCacheService(CacheService): super().__init__("video") async def download_video(self, video_path: str, auth_token: str) -> Optional[Path]: - """下载并缓存视频 - - Args: - video_path: 视频路径,如 /users/xxx/generated/xxx/video.mp4 - auth_token: 认证令牌 - - Returns: - 缓存文件路径,下载失败返回 None - """ + """下载并缓存视频""" return await self.download_file(video_path, auth_token, timeout=60.0) - def get_cached_video(self, video_path: str) -> Optional[Path]: - """获取缓存的视频路径 - - Args: - video_path: 视频路径 - - Returns: - 缓存文件路径,不存在返回 None - """ - return self.get_cached_file(video_path) + def get_cached(self, video_path: str) -> Optional[Path]: + """获取缓存的视频路径""" + return super().get_cached(video_path) # 全局实例 image_cache_service = ImageCacheService() video_cache_service = VideoCacheService() - diff --git a/app/services/grok/processer.py b/app/services/grok/processer.py index 171cc14..e46c495 100644 --- a/app/services/grok/processer.py +++ b/app/services/grok/processer.py @@ -157,18 +157,30 @@ class GrokResponseProcessor: # 提取图片数据 if images := model_response.get("generatedImageUrls"): + # 获取图片返回模式 + image_mode = setting.global_config.get("image_mode", "url") + for img in images: try: - cache_path = await image_cache_service.download_image(f"/{img}", auth_token) - if cache_path: - img_path = img.replace('/', '-') - base_url = setting.global_config.get("base_url", "") - img_url = f"{base_url}/images/{img_path}" if base_url else f"/images/{img_path}" - content += f"\n" + if image_mode == "base64": + # base64 模式:下载并转换为 base64 + base64_str = await image_cache_service.download_base64(f"/{img}", auth_token) + if base64_str: + content += f"\n" + else: + content += f"\n" else: - content += f"\n" + # url 模式:缓存并返回链接 + cache_path = await image_cache_service.download_image(f"/{img}", auth_token) + if cache_path: + img_path = img.replace('/', '-') + base_url = setting.global_config.get("base_url", "") + img_url = f"{base_url}/images/{img_path}" if base_url else f"/images/{img_path}" + content += f"\n" + else: + content += f"\n" except Exception as e: - logger.warning(f"[Processor] 缓存图片失败: {e}") + logger.warning(f"[Processor] 处理图片失败: {e}") content += f"\n" # 返回 OpenAI 响应格式 @@ -333,19 +345,30 @@ class GrokResponseProcessor: # 提取图片数据 if is_image: if model_resp := grok_resp.get("modelResponse"): + # 获取图片返回模式 + image_mode = setting.global_config.get("image_mode", "url") + # 生成图片链接并缓存 content = "" for img in model_resp.get("generatedImageUrls", []): try: - # 缓存图片 - await image_cache_service.download_image(f"/{img}", auth_token) - # 本地图片路径 - img_path = img.replace('/', '-') - base_url = setting.global_config.get("base_url", "") - img_url = f"{base_url}/images/{img_path}" if base_url else f"/images/{img_path}" - content += f"\n" + if image_mode == "base64": + # base64 模式:下载并转换为 base64 + base64_str = await image_cache_service.download_base64(f"/{img}", auth_token) + if base64_str: + content += f"\n" + else: + content += f"\n" + else: + # url 模式:缓存并返回链接 + await image_cache_service.download_image(f"/{img}", auth_token) + # 本地图片路径 + img_path = img.replace('/', '-') + base_url = setting.global_config.get("base_url", "") + img_url = f"{base_url}/images/{img_path}" if base_url else f"/images/{img_path}" + content += f"\n" except Exception as e: - logger.warning(f"[Processor] 缓存图片失败: {e}") + logger.warning(f"[Processor] 处理图片失败: {e}") content += f"\n" yield make_chunk(content.strip(), "stop") timeout_manager.mark_chunk_received() diff --git a/app/template/admin.html b/app/template/admin.html index 9bdd8d0..0b9e0c3 100644 --- a/app/template/admin.html +++ b/app/template/admin.html @@ -4,103 +4,49 @@
wnC-cGUqLh6ck-`T=(J7KU+(;^SL(; zUk662IrD=GqVflhH$_WhT53gK6ZDpM65iD|G3O`1IM)ebJdVfqx8H$Z#_VMI|1H?3 z^Uv0uAo%9#(jL{84c@x6Sa$>ZAVYNzEVi~{ri-+SDBgG z6tIf&T?O(6M21Cyo%4Q Pd=6BLqLGXS Y# zXf1$Fmo$8Fi{}*_mWKD$WwgrT<8Y_u*tO(0)WLEmKp6pUH&$%>5;xBwnb3YQd5rWi z2O)*fDAWQUOx&Y~-}G+N8)cu6AmBBfXZBzA&jI5Pr7;u+my%Su?$yN;bj)1M7)UUD zYDZ^m%FbgsJ~_0#o4P|)rO5pv+V^!+DsTpcvMk%;tK>{QPu{7A(-hYUhj3>>hB&Wv z9Z1EhKzx!F^SHktK(mzDmUXe{s%d;TINsz_#R;|FKs?-(H=FhyW28%R+;K$V!;F`! zKM+(BG?CYphh}yfJDiZ7n7mqk6+ +Nxs{Ki$O2lJ}XoLEQ}zT(iDNPFrAK0 zxk~`w`A)a6{TNZaI8&>384-l;lTReD4Z% O#K9*G?w@uTW?9OF3RkHsYa*<26xJGyR>>K`vXum?;VHHRNk_gus|?C_%cPBwAM z7vITA)tvoO1(pQCk3#uT1TasBksy`>T8R4QaPWGg8w*_WT@omcl4Y-~;bhjLyV)du z%4M+diTEhFi)H!`x&RvQz>&5W-Re8He-ldfbMcQ+YlmibEax}7dR4?D5QX)_VN$Vk zIe9W2kwW<&v6_u0fRs q2%={L#p zZc-l$$1^gt-fej=42X=9vG(76kL+QuNj~QB$k|Tj*;%Ed-=}tstI)|C|9E#(|9kKu z#N5J`d;J7Mf=Q9!uhBss`ci&$I1>#Ig-*#2+Mlt82hwt>)=PshY#pP8BKHLWmU?^{ z)47t+$}j_~`qx6zQu0%67G%P{J(Q%bYtb z^X$9^i?XXDf33i(4Ifj@kg9hr z8z5hoyQ;1~ -`kwB#zyq{`RjzB^FB0J)M zUd`#o0|mqa_uA59s|A s&NTz_FKHPHC1!PY iK@Z=X$04WP)ySfua^=l>Oj>F#Da{qFd zr&r}CiXN^R1wUtF;tfjAj2#MGe?RNp@|oeCoxkn7p>zh$?g;IR2yWVNh^{U9X^YK# ze)JJNZ9Z74MCJcJ((DBEId^?t5HaZ_x_!b34gpNk&1~LEMxK8n5D?k2N(+R#zx(r{ z!en7YfQo|xHct_o^gc6Xb*2kSNWF5Pw>aZH-2lB=8lr-OkXK+Ks|6Pjd`zFwbJDwf z>G|*bSTf;0k2zA|ef|;f(MVDj)Xr#sjZ#ZIasAT!4o5=lQz0d@=V-hBh>Y~Fc|ir! zNvCvZPbBevBWv0*-ca8#P78~&kWEpf!jwfR^`Zx5E}A&3ey8v{*jI1zJ)WtYQYn zx{+peWz 5j~||4ij`37TkS8$lndt4w*mT#z}!rzpf}nYhGG`guTZId p7VYFrA}{r%rqiEqpRni^ z%+**hy|$ !>=oVLS8>0xp?<=_*QlJkB zx4Z2In`?GK)s8^+t3qS`s1Q>3T~HUu-VGR8P-&c4JURl_(YMP<1nD5!lpL!k?9#mG zO#s^Og1(&j-Pn@Uc1HwJ>K3ep)SrofEt}VAUOrU^dLI1!1&Lc%(K!Ts%R)ISufHYl z2V
AnTVH?7jQPNUD)=3)x*sG zVt9BYYhqvauUY{eC8>8w*|(ezuqMRse-+0Z9Xjf7n?0{yehv}XzfNbV %5=e#C|WEipmgHcSJ$T^QGZR!*98J^yk==N0Gauy<;;*I nSmYBp#$5Q|rfa h%?QS@#lc2%oo? 43tWa`JvB!^ zmSUW1 e%23U}XDJ?q@-=^8GWxBHxZC^~kQ* z{5nnF1BTh?<`Et6=ce*HIk%qr Cgo3!;0#Zq zijD>$Ph*y^2P0i}bl*otPhwZEnkb`tBl7MXLt0u0bI(-sDrv2IgilyJ%_b2f_xVZk zmOXwwH}OC=X1+r_sx9^f%>(mpmh@Gdg5PPWt_Ui=R(;ziL#XIJ3dn-nm_(nXaJqr_ zVD# {@BX@5kO^Md~&ahbq;uao4 fBrM1oR(jL$KGBWg=K%A@?oi=D2Aso(x+|35CEErE~SFf0|F zJy)E`$#}$WGAlRs%s?5D$>^wcvobF_Bs`O6zgE}o b!eYwHsDC!N~ zk-39BPb&Jtx$TT;&iS~nBf;@H;YJ>cx0$_RTE#&Yzh#3W_h$xg+mk3nWzDtTGCXMj zPF8;TP(=vUc17jcnXP+x-8~5>{Suk~-Ne72AA~aM#P!Cj5DphN6{Mu5#2=C+hyB9k zmG>v$X{L~!6*cTw-Bo;DgQbY3N$H21_2oVwoz4PNo83YQ5(nQHlA4iR8j+=n;G>KX z;_wr5H|8{IG+XZM>fVF>uaC?x3#ojQeE(4U!-!=97a3wuUPnzj2+nvAY@eXr0iZ@@ z#Zlpfl8ctsq5JUv4g^eXpgiu?yd3i+iO$Zim0SI+LM;|s6QI^i&gk&zo1ic|eXGgZ zyoQl(FMT33bXt@riQ9;S-Zd&gWO1ZR4|~o%-M?ZEGl2&tVXpt*DLZ*Osdz_DQ{{ $ccpxU;>W({;i3C9cmBBq##Qn0gmFnLXBE88#=#{;knNLbK2p(I>ECOa|zJ3bdlX zNq3$;k_6X|l9|vCM^K57{4OFyFjr~w92eR)R;pGSyiM5i?J!B$88A1N|MNU`AuGS9 zceEhl{n^Lf5zNty1DOjcUPR8clk#qlK>C mHi8|4daJ!iq_KI1r` 0@D{@cby9YF$-aCelURV4!}Z65HaJMK_7XKomqO6IptZ@1a%ll{ zYVs*loIA{E#W>`oyU-mDb@qvyC3ysb+^Rk{Q*dEhno%qa8)YpbLO=MLWc%bs&b^;Z z;RKA|YBU-j*)_56Dr9#7`!5GQAbuWe(+6AfZg-6f~!WfH)vTgLE _5h_o zj(#U4pkR#yb!?zuPD}+j@FCJs_Sk7GpSu$cO?~mZhZlAihzQr* zZOSL=7MeXoIBkb|ggivj!xRQ@r?K}l3&f9xvab;ve8UC@i+rOAKRwJALo60i&N*p} z_15B~Dte{o4k8nNQ{B%BS*xB7{aKh&a4v1OL)G&xCHG||s{Ixf6y*x+1nFJUj;VQ^ zLLPSX_IgXr4-PbJsqb1S(=F W^o!TYJB13qEE ztK+*l{K3SOmwD#tGv1f9!n_XA>hZ`DVil%@ ?CwCg*{wRk+^L|Elb_*rYNE3AFody1@ikV=y+885t z;ybz;33e=w+oa1wKmg0|Ft~=o#mK$*Vz(9zI2S^jd6bj|R}<*@HIumAGSDqBU*<8l zFN8uo<)ScILjLwCQ gl {4k8ayX+7 zDrvHEO|qz0na+CZTB84nqE<)5&SHNncB)pFa6Z#Nm%fT{s!TkUa9yCx?oBW _|qmb_N*3TS2 zX#)39!{nAR9BR>wE5Y)_$Wa@k&r#wGV)(z*K!*~6K@>@@)l##B4$Bc&Dx^7G4u4F{ z|J-l_EXcWju)sIcyIf0C3{lv!$hx3b!@4u^HCb!K^M4uQd#B#}9aI1-|AQqWhb81Q zl77=w5_Lt#8PIlZTPO5kPM*=b;dc_Z8$Xu}LOokGI4xOC 4&$`&VkbSWEQm?tnRp)_f*P#rxA*l0g8} N!Lq6*lUy`FESdynA=WdgX?d5aZA61 zq83drc;-2t7hc5Jnf?Nm&s(EY $dr@U{IV$JQS=Z}5uFuD zI6s@$CC!L9*Gd&J`KT@~P*coRvsU?=Ti3Q`pvoU!@E_6wppCF*{$4HN9Oj$~m;w?k zk2xThfbxi}v~WK{meUBpRRfG+LPF6~C%gR6FQGX!HDP#9g8OlW?K8 {*jf+{ZaVQvN<~DE#qleMwDpaqHi|I;Z0PcpaD+k1S3=^b0wg|X3gNX zcFg_Cj?CRc_7kOob>Z;|xu9)DiVK38d$B=sw ^a=Z7Ibp$Xmf7h6v?N*$d_`eTLJ z2Hq#s*tqDT;bk&raj}79?ly~)92Js2%BJ%ij57@5zhZ%hu{Z7hBBy|z2r6ztOKhJ% z^<$hv;H}7g0$>Rf49l;|h^bOL7Zywv9IYti{*Z)>NI(u#69hyV13}$rdBJA={ez|e zmexsSfG%c7KlR_KNlmJsQoKGmJDBLz4RgWYJEcp2lgzj0pKio|;ruJ{ww1HbG}5+M z_c6Xpz*jevR3W1b?@=HSZa(vYbj(G8DX}*t4?B>VVKCMxJWUSwV-$M^3E<0}#(sU} zDtvr5&-tiiG ~lIz^&KTgknVX7^sZX$iKG!fMRUglFguxkN6P~t zXxf%B$1+i4i9kQhmGf=G65UTtfO7^thALZtG{q+yz^?fb4T2&75(f$3lJpFTa!)V0 zjiaLa%^-DS-8m_>#V%h1+8iCG5RvpY;^&9D-M20_fiSBV;Q&E(M@LM7k46IX{A_W- zRf5LrCiB4I-U71!i_uSQG{v~(%d@5JR8_M15jS?4FUe&9N?j3yZpYH29h3Eqdu+1r zE$3aiukLe#=~9R$g^<6Q#`O&8wuEkvJLr(cd<^YlV!927hok}h-C$Jy$kyAB_Wp?B zMkCmWcBRSEBsd%n?x#gVh|dr9rM_?$C1^uAk7N3{IVlr803@2v<+4fE8@_&bj&%dt z9%1h?X5&Go5mwc=lwG^jgBo9){vtSUlPrd_ Go5k8CnT|V&elF|Kf?A=hMQBD_2!4iOvc<4nO<-83`vDg=|REuheq`g@g zf|P>dMQlj=0Jm=-esVYc!0#6k;x=}G#N_xqj|rCbwrP( X zkhd+Z O;>D~Fox)~*hG1-jFduA_1Zx%( zw3&&W|BC9cTWxz=WAj7T9uXKbaged Q&%-=N9b;=}3Be zhSA6R9p~3*q4Hq#MP`Jw2$c4FSJH5qFLJOPD=?YCS_9YZEcWRCj{p?QStHP%G|4#M z;Pn!O_QU#z(0DhuNdOpA4yuji;#1!+Jn*jw@Eh^sO5VA&zxuI!`=Rsv32J>DS`ThZ zHH5;>6keyk0_A$rb_G*!s^83PDfI(gO-VAZkMwpe(9D^J|CvqDV5%$J7MtOkOGhT; z)7jE%;ZxI4nc5D1tQ7I2rmN(%GVYz#GdAjttQFkXx&C_bLai);+=oZ7m%SQg<73(H zQHzkCClpn921O5XGTdJ B;A>PE+z2>lyZ>B-0(9^}@p#s-+p^B8KBd 9pc&fkrj&MG@iyzyMLXz1v$-hFuS) L9wxJK{3Z zpQPnO-4*j%5O69e?H0fj^g#5WCA|3KDjLIz)y|FD9H0>lu-_%RnVb_aihHsdw%@Zs z7s0}$Op2TIX@|UyJC(|jR#}<@I@3I8M-84!J(Pm@4`ab%a7DL4YVK`1rU#DYHzXdN z*9i vz*f1kYnC-Nn)lX&y7Jc^;|J$xy)r7 x_3v< z?7xwxo#va884GrrsSpVoeggEU0y=Z4$T~|cG?_`ZlqYH1*Cab-zRshx9?`2?_`)+D zm;55-t %ck*sin$z$P>4+|jzmwy(Qf-^Iqu#EWv*@EA?Fm@Zfz z5T9M=txeyMJl;H5n92JoD;HDJ_#;4znQ=i>gnhiDXb;l+Fi()V I;yWE~~i}*a{ zs#C=!#@7=T|81i){y&4P{W4!0m*%&!tQGrgeY{n`O{xDI+Ef_tZ6JbeW#2-{a=Kx5 zbTZ&;V)~Dq32g=-*KspJ#v4->`>#>ttR (wU19vgNNGC1HEtC$CY5|;p}u&4t(e+5u$LdUOJ=wl9uE#MxV^Zq>@0C zc>AXY*Z9n``;f=g92I6oGfRp_G@1{)SbI{38b~ZSL7c%C5cJC1ewUjxMH!c6-a4UZ zf?5b6?tVQ`IPqfJ>1s+;2U_XOdJrJ7c?pg9$2kE 1{`o)zT$g=xq)e!61!~kt5*_t82JDPOP%W zeH*fydxu#-HheH*<6Wt?0-ZGH2P|rrhd~f_VVGb$FVpR11T}?OCCf|1D{5PkC~F|@ zzMGYU GWYXmm|nE`AhEUWCP^)p24gU6h)YGj7sQOuHgU#600Tp$eOU1 zsRPQo1C-ewH~W(fcK4ZcTf^OmD2ndkYAVMgpt)!J2>rNGn5}2w&G`056?_h=qNS46 zN`r|Q8Ri7<#IV#Y|D9lY4A&OJC50%@f=N9k_4!;r%p#iewIdYY!?Y|L-f8 zP-f!E$h3E^63aNbx=Ie*Xh_sk?U$X&hnh^WQ^9>3y Jtud^0ZFKuV3B$rwxZ7Eo_MhelvQDTi{begKhOIdY8?H RhAX(%(W)W|U#;OH5sI3nroHAlJ_!{C;K(F@s*O=UU^UhbmHJ0;h z?ha!W1GKSfO_?$O=e2}(52gL&g%fg~MEWQ_Zw5~QMVaRztyYk;u#dJdm-9w>7-&S1 z*X_^Z-7yIO)wav;0;6+1P86!3@Sn_7`%(1q+B4?-k@2R&un~R-u~)U72DAc$c&O%w zc-i6!qz*B}Eom_w{Ym#>Frnz>co*me7nJNr6RfyZSe*!7A@oyM;_h)|K8t@$2J|N3 zw+x;Id@#aDW8Uh!8KI`ZG<%B_Xd|RM?o6eOND81ab(vF=RB{}IMh>k0S2EZXs8k#! z zY U)iv zke@8%f3%5h)Jwp(ZOEt~W ?W1+n@-o3@2+RSsa&PfA#z)1hsN&Vv zXq@X4ii=FjgGIa&-W*f{yYeJlJ~3E*i#kxjBK)7xZnDDe5em8Mvk&@->;&lM{W6`2 zWSX@051L|agCh`t5C A>wr9*@+*T>t!zpuQ5xrDq0gosvqt}aLO)LIw z3zHy-tRJ%(lOhIhAQH`a)CV8i6$}~me&rGvg+qZp5*7tyg>YhCra2qF@{#x)be4#8 z+#wpR!`wteBtCt;9~-4*nr|@t#O`j3di$YYu)18k^u^Ry8)m_Qb6loXLP(>EEzBV1 z>e`RCjk@##xXzc9dR%nOEX-UV4@Zd}HYLZEsehpsN&M4b>I1Nz_Vyanvef;^+<1D` z &x
k_t7nb}>UbF1XK_I5_ zM_#dQ`85kyU@&)kQV8uL@X^7)GzrL+42ln#nL8fUK};?E7P;ymIK^bJU}rN-U~Ot@ zp~LLJs^(47q2+85D5sti%+2{%drs>?qh?^KQe2eijlyF2d;Q&Kud!KH_Jmw5-EjjS zc*}yX=n%-cszBd9B2FjRo%@IkJyBfH9pCdIc~F8sSwoT^tQhl4C;|SpBMLN2 D~ZREsrYq>6X1gBnv9m>Mh1O|491p)*Lpk78uwE6-BE6)0aVfk;kagD za~wxs-!NhX3u~D3V%al%dJz2S9Fee!!pgXp%iHjy2HP%16L;F&NQ#MV%T3`R85Ra6 z>z$MP_Sz*-6>9U<0}`|0np5;CXrGXqI9@z6m00`F(dv+qWj0Oa6@%?y{Ac1LC_RHm z(nAu8y}vxhBni@AOH^=y_(_c_735AiH;dh$Lecvo <+lz(T(sB7st2Cv0`h;k3VBs2s>Eeu&6FW?TP {r$ zb3c6!&ERwdISMpkbCeAv>@Kh$C`<=zmI0~Hr9@pN+g}vPtLH40H~)SR#@&RvMWQo6 z{&*U`*&KC?L5t>eXb1F;%Kzjgje|;+fJ5qR6lkDR1LP5eiTIjAiirc+Dm4aX{xc z^ WQm*RxMW;4OmLT }$Q$?(isW$fhL zUK&mhJEMJ O{dGToEHi4RD6nPOEm@*=lm{eg<=lE+rKr%C6DowV39YxwU5NE&}d%|}kL z$^<*l`Q#CHi$tdTX$ix}-fp42Hl1MQnXf2lmYZ^PEKH=P|2iU)w6t}Sf(+*PC+E%7 zmOL<0cR28-yeCgM3GX{rpxF4yS^B6*RZHo6We5tRqY@B0e`^LodIJUJ*x!j_NP($; zU~|lCfqJ8x6$tzLx_SN`xNT`O+N&S}&pY3tc8%>wzL%Eqd!{c+hQCL;zje`as=
VYZdw^7L_Q#dUE+#-C+^-do6O6p>r5VEYsL6M)0{I@D{!! z0bG5s1$hN`XLj_MdHTuz8>Jf}UzKv*5v=NfRQ7t@viI1O`I3XE6&?|4rNLQpb6|V2 z74M3PQq{;`fll(}ES|1Bp4465hxiB3DaW&szI+*;e%cs4CtPaJ(F|~T^11q=#9;8V zPo1kF?U@`UzKj;#B*GqoOLn<4FT;EOD@hJFrClO^&y8*jEr$-vKA4Jz SAF|8diP92 zPGu3!&TI4Q#V=AHml$d^8fQ-D$t>?~_B&^Ms@4hRDE?-to*t88axv@!krQgwm9vC7 zn#n67&7cqLLmiJwgQR T_tn(aKkQzy0)p@a@Po~al|b{uvG2{MiglLiw{y@ zA<^q{W00=>H+IL@7Y}@%MHdphgVpTj@ktS(O`L$&quBsD6e_bpH2409lazJPi{Xqn zpyz`wVz@X_pH|X 9+y-}ret=bbwN3~g6PM}m$2L-Ucz~m=EjGcc|Yb9&8LXd>Oh!^vdR>2 z-4t31R pdYJ7e37jY;`afvZV&@XRwp%-_c}yBrzjGETGSV$m7RuME z)|Pq}m2`xz7z_n@6Mdwz5G`aVhmUuxIil&lH~))ZhY$LaF>TMp;A~LP5Kt5dW~*70 zqEVevp)D7|hnTA5RCPBx_0`V`&%1iIu!W|uYf|XAIH?i*0UMeD7QMB*!h3sj_U3h7 z)64kUQ{USSLi+qvJxBw$ZBH)mC#EAroFCo_rdvC6+0~f>1l=;J)W`BkPG@DkVhq<% z96_+-vl^28BRUk{6I^M~_1f(^@?U?@xGGX-TK~z6D_}RJQip|oRiuLZAMe0jgRpDJ zK})P5#WM6B5`b3Tz~eIchL^zwZhIREWako#m3FeQlqNiI?HnZhs9?_pmk9eBR}lOg zpiuRZ?T$!MktTicRDv@!51 aj0u5$+K z1uCssW_)W+Kj8L!W+b;VF7#M9Cf^BuXeWz2rO5a%te14BpDo&VpSpRR>FFqNztI0^ z>ucXm!C%rkGbucsSbhZEG6C8fwxWg#7fDYA*N`s5p_;P|o7!Vtp9F+@=Y451B<_>i zrHM>n<`2sA7vH~a?}obmUSiK*g#^fW1n8#}D7|({2ci0Nkac)*Pv)YQ2wPrL!5u&S zyVgtg?o@dJt4{#2e+VP=wA^n02a+(o+8$cXe1G|_Avl{YUjUh1h4||2!gr8TwK+o) zVi0HEx<;+6kO>D-6Hp>GUtqLmZgAZrZ`lR0lI!tb3)>j=^G5|)QvQCd=?60feyNq` z;jEj}E3<8w1>9IPm^q=B(0b)7B9p^%fm2_T=pfI(G5S{QYXscAak+*6j$%5^$zL1X zK&l~|0wcJicIVGl>Hi>PupVQ{Y#J}jbHh-kaYL{a(yT;yj@tLOYrPgtz8o#D*=*DQ z9&;EEYlmBNDf;W1^&Y(5WcN(H! +bwrhq(cm60 z!dXE|;*d5>*`b|PkaS-wTPV^B&pJX~JJoWUHM&;01UvRhNg?|zW3^_mbdWCAmG--q z%$geL1kgi4+!1F`i$>oh*gzi Jzaz(B&2Nt5bKDUT8$cCHkWR?fPg z!px%!C{%8zjqVm{& zu`uPD0-eVt7W=VBZ8kwi4SeTZh6vx9z&WC)!93~CT4USH1t7_R@-5@ur`pxe5lCW@ zIfpAz3KugbhG8wrhZS){To5Kcj~kXgp|gA=y`Th&dI~q;+f|?InPjapl|x#3wnzy~ zug~M%0^g$u`c8D+t)*S(lh@@< *OQ7K6hjGJnDBDe!4#~N%z4|`rl!8_meO(yicU)Nh^*W zaQcIk>-IKc=!NW!>W);RTf`c%rj_s5_|SKE^hTdguIzx<5cIV)%){q-46)NA-5YPS zuC1%=T=q?ObT0J;z}okQIPWz?!a6DttAz4hG?^kp7OlDlJ#2nHk>f9s!(s?~SBDJP zvRbr{nVm=5*QzKi8|Gp=m9%CzsYDVG)AUCCDDV2n3@uWkqQUt^pawusFa?G@79sBw z8OuMii^`re6N|f2bpR ZXubJKqzn_zEKEzJA!IZxyLhz^2I zVZFt;T)Sk^zeoKOf>G_Zs-}yublhI{vLp~PYCxiD{ub6Ulv)%-Q;~J-+<~`f_9%|3 z@-1G+DZQdw2KSt#8`t44A;zrGkiG3h <@Z?({o{qap$(Eku7b)_9&==3+gox}qXss|TO4k2a;D~Nw_usi zCr8Q3cUYhIu73jN9&diPe~%hrrVooV%zT$y{RG;~Gt6CY2<&H}{Z2-mD`dfm+R#uC zJ$1IJ+~@?cP2F)-(MTEo8uk8FDFD$FB`b6J`mK^-07b@ZQ!+NuESAm6Ky>WKi9PKX z(E5I-xE L*IO-F^ewB>(M(nw`X*-qsCC* zJQmyXEIkeZE7H7?SaL3Ey)vWK>VK@4lxja0t|rr_!u`--muyfRWgoUsRK|CbUQ>Kn zi>yWa^1?$-Ch;sHrsp=BTz+x;`Dj@@tcQnuY_ytFoU;Cs%b5-sr3r(R|cY=_1s2 zoUq|OAMGOLIaD+1m7aKmhHaj;{P4Nw&q82#QLDeH%|#lK!-fI_q)MIOMrx^F=!^JL zQESETu+556)t2HNHJ+!I|BmnS1zw81NXABO0=xyIAjrd9vLJZsQM2b#mWOvwU7~vZ z*D<;D_c^Twi2JPB=0|9zzH*QE;lqMOd(&P2JXCF-?T(^}$w2xQ*$;9$|C~{X1}3)a zKYTyWG8;J(arlyrvWM9+TFac-YBujDopP}uMY0sqO^kB%i(l@#eSlH%a**Ol*BCrs zvl>ViO} &J(Y6ai!L`mrkem6yM?YG&I ztr)@I{{T{&98dD6 +9DN#hAyM 8R6AOR1R8ZldAJ#jvneACN7R)4zMI6^I)L}8It3d z3cl*@8rQNh)rM2c#vvcF cHCHt(XPrrpCRFubB%hCtQnUs0d>bn!8zrqYm%cs{@H z#$FPba4k8 j 3A9a+WaAXdpY zzml$BjF$Sw70i>4LpNL~WF2PI6fah8QT`OX_2SMf*$hUuM8@YefB)nvF)3sTgWhLC zY?5wk@vrx$&yBg{Q6C%YQBuJ%Vu{0XMT_47_E8tdyxPj-Z*0%_ywU{?uTvMvwXD+D zpgU>ii$eS@5-?CJbzCG8#5)&HLp+(pZ6)|BdZKk4%mzNP9S-|2M#4DrHnHlycDN&a z>wsA7zfW%CH+Es78%mH~@^qO$Jp_R?=I;#oc%}`MUPlyG{vQ``9?Sj%MVvE3QDiso z7Q^>8rek33M}ua7#MnzYxk8ncki=M)* nlw+hm!*=ukX!`1?Cg1;WLO?)CkuE6# z0g;j%9Z~`k(t>n%H_`|Q2uMnIcT0D7jn0i`z{a-UKIeJ9f9{{1`&{>Z-tnr7J5}{e z?n37G?#>AMF+;*I_5;SsKAOu@%8Np11T|L1b@;L=J@Lq^rkYQ5odN|EJsC@{VV_di z32;^DnG@Rw 5#tJH@%91vx}p_#MfqWF5o&Ct|4q9QqA2rPmr`FUaN@38K*+9^oHIsJ99CJugLt zD=}@5$8LY*rZF!EBH~}Dk)$Ds&SRcG3CmKO55%YIp+)jA1i>Q%u8wPhKI9_sLi=(` z )fiV=-wZuXY2VfVV|QhNWc`;c1O``Hp!{>Nx?GPhX1G=qx*kHEk9F< zxaCRtK2p@xtdq25k5zu9GMJcdbE~#qP0+~pDPYXy{kq%RD~IL67AwK6nuC&t405!e z)D$8$b8p@NzAxZqW^I3(gA*I#DYlBepk`(a`$F&bd0#(_LJ(`v9IEK=y!kl=u)wm; z;Eqn`tl`V(ay%NpsXe=~u ov!W5ZLTnOh#$c zv_kz>t*NST-V)d2XGUJ#&qsDOpY8p$mX~W6myhp%NmCxK9B_s^y)1HT&BnL0j+Z#N z^w0D`NBI{H;`@G5p`^RBGo)|nnOc<16;wtvRi=vA6wVF8RM+43r$`=;xLDUyYXG`3 z@orN*-cwi~>+I8@G)#s2&2M`;n7q=#Xk8d)71o+8VdhK^>a#28E>~jl&LF%3O}ccv zFwb;}q_bhYW~WcV3TYywv8pal=)2pAPh)5~H!L5oQoWD88+AGKrMzE!Dtb$52hGDQ z`_JBPx8YC^p(<&!W!LYtjrTY@avKACB(#+I8j5Pb7?x^x**j2gh3dWKl~LW}u4|@C z#2Z(c-`AH|mjx*5pQyVQ#w;W`L*9^I!=K$*Rg`{RtNNYkshdUw*X36UW?tA~vub+3 z@N#j--wpn~g~j94&)QFcMtIqh{KJ@w34~&wY4XW)QeH<{d!^I&$qOKf@Hf)W-(c&; zQD;pNmzMWYvM0AUzIAvhTn6MR2_NQH!+mU$gnXz(WMVeb*2~i-L@*!yyV9H4)vkO+ zOg{8WPVgS%{l4TO?>pAs(3vE3kfd{4+#f}v!0Q>A{3GYwUy0}$?a2M4J^RfU9!GQW zKlArAVfh7AT5 9g%NJ>Gb{!@ChL%H2-9^L2 z&yG# $?(Rbq8nKL5Qf~;|TNi}WU^LGnhJK%L-G@k5XPnWt{fsuWx zKV?gUY*Hwbt#qZ_B38$55skvCw5rmB%-&jD%$J+&ZzPyQ%5v6ZPKkqhP4!K$YQ;4S zt?L~7o(SHtv^KW7byuv)Rz+J9s&5Y6!h{T07~QyAn9e_r`%kV&M)s!BlKhmvMk7=s zRJ0C^5u|My<0wKC=VvJ|C()9L5pJx=7<*;$VY0D;W-f(kvAo=pV_rctFsh~!K|h~p z3r#XAov xP4m$4>`Zd; zXyfsxKh7s|bQ)6^@!_68^eD;D<>;Ic1;V{1ehr7f8+NkG^Z_Y*v+6=k&YB+0e=egh z)Ukirgok6Upat-|7dW}?{-q_s!Nj 8QDzcZq}IRb|E7CP{rB2g%C;G|(@4iQ$=6u?r&m;<4+* z7YRRKP>T;Qkk5V%2Y?RT*y(>2wvLapczWV pS bU3Fo1YnS1PCg1yP|u>s*sn5}4@Bfoy~5Cy(`l~RK# z)33PTx69#U$<>zeOnOG8$*Q7YruaPEZP; KJ8$4VQcocCQhdY%kXQLqBi;;KJ;Jkb&m%x z$%FMK@WSMxi&)IvJ_Iw$MbVSA6!D&X&=M~mzm{Ant9 nPQ@XGJd(z8I5td&~*-NO2ujX;ocicICwCssVt}J#Z66gDqJe1j}*Il7^R_9 zIfjWuY=de77bPH932S~p7&ok=2PO(@03h99;7Gv6c~B2*o%X_6q2rNoYs1kyjCxJg z(cQcQB2ewH+_@$ID%b5UH+uY}+gxFI!r{5dX}ntP{)2O@JH`miq1#Yld_d*7N4>RD z?FaP$3$}DO!AEE>zTbD;2Y}N8uhKwD>QFbo$8i(K3;$(N(0uM=N`M>>DJ(g;xrY3u z@!Ln8f3xrGJ-K+@3NiKzaS%MO3%?8@D_1#-N#03(C{$xUmG}}vx&w=bkjZ0zOq|8B zpu3$(4%1)39ugjNyRaD+Y#l-w4fxLF*kEshL=N+l8K2B;i|>?u7v4QaIG<(34#m1M z%1zp9Ni D^ z0J=^?N_0Hk2j NbdOo~U`|`T>UnAJc*s>FytfSKV^&4Phm^oqbc@dz28UQ0Kp` zzc}}PTQE9UFAl&IiP#BhA%w#sK{CIr0`}j*F25ojFOa>k1JU`dOCGD0o^E&*WH+sI zAqVv!E2IceG$cwvqVL?J#&3Pn$ }cN zzODymxYaS2_$AX{eHe=RuMmBS+shLv|AdvbHI$vJpv2plBp=EosO8G1vI z@-*Oe^&t2o$($Q+m_9w@gZeY#2j*Y#5okV9=+VpCAGaes192R8Gr!brQuA(ZeN7mf zA{k!DXWLS!B8&znaHdcpA_Fuzk0$R)X>lA7_P07VElx1#7+h@64my2Ya<+Ud1%>$@ zZ-H *|5YUm>`qWGqRE8d!7?d3Z5k5*^&em!2 z2+BvSLOuF|0 wYoB zexKb+JC!PblDt|%XUk5!^9g<5zCTZQ?L?#aBYOlxS0K^(dXWFq9weW )g>_tFMZ+{#O{%)Xt<$3kD3syC;Mr+8(?e1BS;nttT&B;{GEk~TuZdIXj# z-xr5vWA8GbQHRz_Ag8=O((2u~tY!+M&$FD+D5)mw6^5v@g{Yd2eZ$$7S{WIUqQ}@R z3yJe~Z>@EU1{}46c E4M-FZ8;Wy1r`$+l@$V G-#u6M`Z(&zv&G-N8pr0{ZNcHc1AWb1(k z+Pqx@vI;ss0*jQGOjj40FmCAf=sa}vzzzJ6u<1sW^+)-1d7!-9_4pAe_Aohc{KM4j z4(F>97Rhxz@S|C)JHy9frfS>51>b(`f!;z9h~DQCd>gJQ%1Fgs7PUuk9&{#-51JC! zDL`M^HRYQXS4Judu=$<+s;QKgq>GT4{MX8iTQuRbgl=B`mw7yKf2m2$$OalS$M}l+ zaK2vmd*!DP-4wrP5dOGC5= {t=YQuC!e3>L z*hyQ!NE>dZ06^obn4sp|c9=MbYPt2d(M9`m3y%142&D5!Vi^I`LRO^*1g)&IUuW?5 zoIh+w0=@@9_Sx1Gko)RuP1QaQ9kX{%rajl=J@yxX8 ;B;oytEO zrGz{5LdK9U0>OuQRg}EPf5z!_+K!ithZ9_+322?{pL*N<0z+TCaO^kxpg1G4RQN); z K{xM$HHfS+*&?eROR3OPgx@C1`F%?d08PW_7~W#S{iS& z0lsL!H=l9d#fZK|wjXJhr@7je{3&0&n!&C5Egy7Z;YY&(OQ8et1kT2SLjcGd&jVER zbPT-7T-C~jzJfgr1I%(^Pe+qIb1hm=1vzR9EjLr5(-N?@=`{nyoe6lS2QKOfwli4| z+=lf4>Fy$fOq~M8GeMnhQyP(vUn4LzDT8!FSO=-~=!tccvlW;jXxcZ7c(axz*uEs& zyt|E$(L^oLW4QBKlc(8V6}^(4tI!v|Z@^x?_Et?84#pfm-j9=eXJ)^}y*1HXf@>(S z&PQ$8r?io?NQ6l&%!pIW^ (Lupi|JP5$896-i|Nn%HuPToSB^_}aPvP)ZS4~&kDP$p0{S`}z-7pg z$szD`sij^4Ia>hUgz6*x1Mp2druzskrF(mPy$3l>YzU!0aMlHCJleAZ!FH>BNT>~@ zh$nFC_V9ZuLTGh ^`~+M7A+KGOa93PvC5r1t2T*Pf(iJMvKEJE-oI(hp{g z_H!+IFg_5|?WZ|Sz5fg4t%w`pI?_f;FIr~Db7{keS9cv$1ZcCpsz3qRggnax*hssc zE@pVk1X EB)uurYr3$NT zNLVr++phuIA@^YApWe(!#{8CUFc35xv|GKkp8F7;TT9+`iRF21*iAOWJL7UGV?jzQ zAz3_Hey|Of6%HNN?G{RP{I=UjIrmp@NI>EvT6m#g-Q@HwNB*Q%qN_Cnu!ZL8+)Ykm zaVgL;^RIqbct&m64!0-X(&5X0aZz6g9od%WLd=qQ;fLO2v2koI7g!8SL@#kEpQMz} zKk%}m)M(p643shTjI$-dSX!29H{FliE-b>;hY03ZP5ay~19WnQc2YP$JiY{Ss?nNp z@b$1~zKVP-`PI!foYr$|;df>LG(&y%$Xp{hm2OMq(;Uy5oe7KzwoBgA>UZf^vedF? z5CR|V4%la+Z?clO$?&W&04`M*Ibk6VDW_}IpN`n#GB=C|g)p>5kH6TJ1+tJZ!{@Gy z;FXRG8U8tUYK2qY8t#!NDs}q>eczfm@JeY>c5ss^{-$iZ^0w;i=7_5i-{pa2c@SCI zWSCY^xxz6ki`&X~xDnV42lCWQZba!bgY#CcH}S+hT{&9ae5q_0>!@b*>|Lil7Zuu@ zT+86vq;H&4N5B>C?N@t3%*1Q{Hgs$ff)6vPyS8J(e~qF^yY37`oZLfRKWMIwHn&Rd zmliH7Iz8ddDSy+}9y;1cW&=O+_$R@)C!HLH+OOilsJh1sIZ+S#1XQ`$+xjL$n+G#B z8Sb+;;W2S)=-9Zc_H^ia{?r#nUr8Q s8%t4AOwz2qvld20efbrm^zsJT5Prhwv_FTEokZ%mFMt^6KfGOe zVVhQQ=lF)v+U|(^@U!5d^IJ^%+dSGm+BxW*{s!;gEQvzg!+B>|-cg?_*26YVL#!Pc zE>wX<+8P!*w<6)R`oTlJbo`mF!Dx51GKKDF>iFHtzaMn2Z^^I5N9HJG&Qe@=f^EOp z5{*{|`SxSDTJKrv_vfNdeOViZnB+c$i(gG6HmZX*&sM>Riz@J4jUV{D1a3Wrt_X0X ziZsV4Tx&bZwzA5;Blg?BfQJ}8a_H8 rjregE~+g{|_}5n24c+?NN2kyUHh&dINP z>0bU)U;~p7v|_g75qJ+!I37Pr(L{CrGTi4mNcjkO)Sj?lH+7>)b7GJm1#c()VUcF| z6gsJ7uRB3>qVN3m23MS!Uqn)!H$~Y^n&%+GiL&ie7jxRud;bH~4>y9^OM!-WMq-z| zXpE$TXPaNu!`-@le~Mq>syB`so%?|U@7r3suHvmg-Mb}nk>SxpSR~zx3if8X4+BA~ zq;yE{jwz37E3eKyS`a`2!JC=2u^by5Sgu0^e14fMZcRE!9h?~FCL2jxjEU#2&M}Mr z6Ib+a5+A0Zq3Byr%&jje+D^{aBa#6**S~CY2orRa4Q{Vah&fxk8UAI?k{5^soL_QP zl7 iaNA&ZHmvqM;b9%}* za5mi4nRLhTnL`dC>^9<|A2{lUW8ZjUOIz#_BG-+tf9r6tr2Vey5 mC0joF&0Cj(q+RB~ zKR^?zY|jh3xdRcvo?b`ie(E)&3s+qj>YFg?VlIbVKolx4T`H%Ak7)ch_HHXe=4;N7 z8pYH8hx5%xgorW79m%$Wo@bW`UE%xhn73 =g5+<~~fhLa`Mr0&b z!b3S0r>|VrY>oVS5)-An9|PVpF-aUZ>Y#*;UlB7t`*u`+T7J0r8GJ11&(+KtQ6%s* zmElva!JU$MZ~GSSy{^%zFGmLcJPvmZF;n^G<+p7@TG50s&XA9ZP*-Y`=& `C!t{4>C)PO@m@Ht*nVnHCrWuE_o1@ zdt$9?)dGF4t` 2mT#d?-H3>PU-i*V3S!_ zd49k4@MymzRXAGp#`2foeHqgPhi)U2I}nAcA!5Y0tpepuNP#2951~gV-8{KqiQytl zHwCTbIT-LBHRk5RzjiD&Rohr)xkRW!*hH)z@*90j)%3*Kp5yhNqY|(FD7^E~s#aFt z(-hwg!~c4ds*|7GD){uKtPlsqi^li)qlpmJOqTA z> FCMV z5gWMaw)EBNWIfpTgj7vX*Q5S8&eh|9*6Ph&JKoO4b^IRZqz_)QcK?&sV|Qn)aAEzd zNBl{j2Gt`P8E#<%@tEARAK{`!wb`-a`aEb^VnzWf0a^A%t#xc$D-Uz&;)Wus?nFB$ zuA!N!O0s{_u~`_oUgGHIYb=fO<~Gs^_7~C!zI9 &Ak-;Q&2Ar`qD4F+1`ct8}WYt{2q(c@TRawGz&PwOnDtcl-XFR{gO|LKp~Q5J>J zz3SFCAcBy8gaIQE2q$12QUP!048%AM=T^>Y{vQ@lS;YcbBoRJSicTsa;p(M09(f_f zv{(T30p2oz-W6Gs7`W5$xN_ z#g1sm@HX@n|zt!1(_;%wC@&-p$L%s8y zIhzH`Ddh36`j@@vsyXk&euWXS0H$`s%JsciW!%(jWuoE_5u?=js_>4`3(W)#754N` zj@#e)IN zN_Cl9Q@P{^m)aOo-?;r8WJK4HOfpO-0Y^|b4q#ZQfI>CbPb7lBa;?g2;w^s^rc*T4 z7}YlW 2_Hzdy(_2j?Fiw{P#;=ir@HTi?>U%Zk^GrQV)9vhQDJxDG2 zPZ=r7K9^OCPSZ4tE*LC>aTQ20pp^afQ_-kyOj1Q#%UB qs}k`QtWY9~1=4foEB*r&jx0_#uD*6RQ;5J7r0zzOBM>@>J$o zVU7q@Dc3wlN$sJQfM)3DiQv-B<|5i{3LD$A0QArQQiX!3__f`W@7bis1gdq2=Bbo9 z&PwYBW+r(r$IAiPoSgC2Ao)hD&b*6P?@9#OZw$gG{D%0z6sofs=46Ii&Aim(W?Nf` z%OCs_?OYau!r;X47om<*F$D`gM>%#u@Hnfrmrnjne*M(OR-~H~2Wt);1aYTmNN_L; z l}HjiSst#3&3<7?g|`SYP=Kx?($*?Yji jOcu6+OS!&Qi}625t$Bz*)xmA#asW@5&T5 zJLx 2;5<@Gx8}veofkf9gXlaVgWju_r9R1p=O{mcT43YVdK-mOJ^go1E zoAv$N@Gy-g$XZbD&D^?`?-=BA`i8t!M;;?LqdxKM-yEHj3=#_eu(Q5>RsPOgkvNC; z>)O@(7H={UZohUwwP628=c{1b16vDm15$U&4hl{XV|{vZ?q3 xzI+)=V5#&9+s% zc-oN0sZqp$F>G!5j1x({LRsT?mrl~LVuTanCAqv0oAS@yy#C$t0kMvr<&`?MRRAUF zy~8YT#?-1RGGxS))1>~>Ga7jw?rC)5`dEx;%Ub99l%@R9Bbr5ju*dvs)i;-I_lBk! z-HP<@R#vlXr&b=x#6o{v4JGwOTMXy}>|ajufdtWiqA58PXT}}SAGv*~o0pIe*Z@;d z;1iiAV!jcZE#UvFrT-_YJfr1{g_$;Y)lSKre9&!wnl^|3b!Pw!u7FJ1yw+*C1 33jx~eX3E1jvo)4A_KQWR7}gHENeuni@z3E zSd)<5|4J>=gKNRuoF+nH%?U^sWodUA5Bb zjd{Sk53VTHpxiGS=U_H62aQ~-Zn7}U&G|w6KNJ4lt(L#2`+i(lb`Jfq$~dU%6caQp z*B}$UjW{Y{atggky#g%6WSjrtKiJ^4K0*>0Bt4N<@dTWVdq&bfYWOV_1WrSy0qmYF zU=e3$+U=)o6$n_4=fST7Oo*&C#z2gh2duag%-@Jx5US^9(>G*VeBz6ZVih^(Q?o0n znv`a%WckdH^m11sZG0%;b^v{%)#2Ox#?m=u=I34J<$H`7zO6Mw7qidr7wb?_NPoks zS6*J;X4EU@<(Q-3I#oSGz4V!2X+<<(r1r8Q6(&L9-l6AdvavRC@4nozKrhY8PD7D| z|G{)k-quad{o0+Ay9^A4V=cH78ka9|+boA@i}bFlNTh928{g}9oDgnJAnw3Ud{eX0 zJy ;!f^v3jq82~@jPI22WhfI0~-`oHZr~(ou)X~;;rRp@dYH~t`w!I2k zIV+Xun!C2eO5joIa8|mjtnF6>fAK=bhz=QgO|q1@Z`)J`?B|ti;rC*z|Exv~CqBsV z(3f12;J(2#nt2^}&fJ7YZX?h@>o>_+OjeJuLRWDb)9WCjzS3}!Ybeq5a5bw51fPK; z9X&W<8zlg)X~%UB(+-hKVD1x72b}iYn#XT-++)aX=>uTObYDZhK0@!e&PsLZL8wNj zU`t|eyyfsRYkYf(shBMWo+(oTQ~T0uyXj>W|GcYgUmi50NgJyAn7kGZiSG;jkvTWc zKbMF )zWaUGw!R^&ygwtGxNx%5$Q?b6Wgg{{N*ay*mMt(BQv}_wQe9HfV zUM NG3stM7H%g+?>uqU4ujjCa#7WUMafCHL((ua25g zp=+nS>B`UbM#!Pn{e}DA^2S)=C|vRH&Uj3(!j)6LU<98CpcOAU{2(-WOg28zEt~d1 z0M}7;vQ=hQQ1{zYWsu-qyQ8%GK87FLfOd0Bi B+2fsBY62y@St>{B!FwOZJk~ mUgLmVsV|zo-Wms>4^dXF8=+FCRP{!B_x^Ow3xd_+9pCm163zo*J%NsSV zME&Y>b&&A1U-u@M8<6qD2k4|aOn0h8Vw7ZCns_C}uCxS>7lH87dO8D;s*d&m*J06> zX=D$;jxcZ=^Z((aDLvlx;(Hm>jcMKcMUe94?jhsHa^1B|;FG1_I0{sD@) y@h736dAg@ nl|E|#`{F9rFyD?{ ztH1Y_I!_Z b6s)Lz&3#JggAM@l%N)Gx_Vqz~>-nf!a4nk`j4eCx zP+j9jzE|0B*sHH!q!8h54&u&f&rx6zctOxqVS{&d=>aaq;V*8{`b8d+as42-{f3q9 zY$e}HP}(jB;9uStV>{HdV!f-am{}IAs&>AP!p82Q*{5JotjSX-?XtSIw&(5uZpY;h z?(fJwYE*&hgldCxym~U}#)8ahd=>%gDD22s^o$AV=oB>EvkG|H1FZ5P4xPY+h|5_> z6c8rffrQhWdbOQxg4Dd)lTjdb;7qj#if_5A2@2@APOY&|YXez;Kk1_Gc-g_zt-W}f zLOP@&yT{iTt33repo=w*%iT)?;I)_osi0VcjlOfYT-XYaIOs1*l<-syKQX6w`cG8@ zR`rec2Eu?=^vL6{kmi=oQ3TXRy$QB)M&~KF__!A9UuAR|O1{uZ4%7#|Liq2v<=&Xz zR9XQPj7n?bM_+e6`|?NI{%_=qtu<;)x*ic~^5zA33i7J{TjDa+G0^K17NGt9N4w3t zq4@3)Yc9q0zCL2ofcR%E0anGZajNP$ict{>s&_%rM2p1!pkpazmgnidWs{jig4iPB zvSwjXG8g?bt(Dj^yx#}2`gDK1QR@9tsA0xbOJdR__$MyOfG@G$y<5L1_X+u!TGQ;e z2{WFDCHN12t0*7q)-jnjIf>D&^#k6}K^}(1myA&><;pq`At;L4_ECff(${Y{Ip_O* z_XQmEr^I9#afH07f &1A6E 9A!%=25O!b+>j~jkr2bL#nnub-JP>aHz5uG?C7es9*r@mzTk=#qZ6Y zcc2w6*9?B(HPClb+4@w+$$HP-VJ=ma#ot(XhTRh}{-LUKw@+7fIaG&>mp`bg;&A&a zIS?j4`R*6-r3_XrY0JDbs+6a#zXZRzXK6O^QVl?oq2WI4FgIlkM=7Mu=-7pi%;>CZ zt~s3Am7(K#1g|1Sqr1*uTCEUn?H-~i5%_)Z2ADwD#cY~8kXKxm$LniHKiJ7i-RC-Y z{Xg9jJRC0X_e7donwAAyQFV0Hf}LNq#Ti{wch9Pca?wFN0EfEdv;<1eM4pSghT&5K zo=c?u-NPZRxCM+muVHbU0v}X?*1DZ@si5W- o>WLSQz@%|a8 z7@7^&%6+neK$m;;d)$J$t~#K(ooAciIUpk2cg94KZ@I6@k@n?@{SCY_;9n&3Yg0^j zB45Ri!7pcEM7)gAa)hRQR*vi=q;ELZMP1N4T8)hZkAJt!wUDbf>LPA9L0nF#FA%u` zXg JNAjYd;0!rT%#vR%>UlJ-7CyTrS6Xh-K zwv#9gXsdOmCKFh&53{6*P!D^-Ms~1pNRD6s7kiT^D&9BXL+nj1WJhxUuTc6{CFAp% zg0F7##WtTJ>o318&^21r0aov0=okBuOUQfVS|s2$#6p?&lX20ii6ns1M5D*4XIvc- zF8(;GUhmZfqlNU5cdZ11*e)E?x;Dr_W+)CbdnT-2>|gm`8Np)wkHI0&ZfS70F<0`& z2?Di8A8g`%C!)b$wX PrxuiYjDEe!$p;^H=!CFb zU$5Ak$14d%jH*9H!jBWSR=2KeoSGh3d!I6c9WE3mc+zN^wn=F5_DhsVLfd6@aTY#0 zxEX(h{t?-(&A!imr|7N}EzX;{>1~@XzXp1%(BQlE+P>G;-9K*2MMzSAFL*dN-=*ml zZyw7BmfdJvap`U8H1*7rlj>O`84sQWKj{ElGuxUJL5zU6#j80XWxH!2*(NKK$6Z}i zcR* `##>o%14rW&mDBnD&_G(ZLT5nm$;u% 4K5pl~_^TG( z_kLiB`;H#*BjM@hgdos6*jbNnj1hF5r^-o6tw9TXGn CF;?f==M<1j?wxR}TvMXD4&p#o}UUC7cm@d&VE|5=53{q~YnkY3-oKSz8Y{LA3` zyzq4kYvnO#l8t|PNgd7D<=>7PTlJ<-f{8?tI!$wh89^N25ZR035HS@|hrssZ30ZOE z#tk^ KSimXfQud74S_lV~go_ z%%qkTYU30Nq)&lepR+%Ypm5K4ASO6y8%X#WE~$WB+fTkh;yOqYDAIC+5`A*0Vk{80 ziw7ucg0qW(k-*h0 AO|Z_&8$dK>Pl+0AzR5Q`3hgzx zg)PqPRJxzq2nfFqWXqjKP2x=LW=LxB-&8tk`rUC*mwmP!> ~}Awl9^?uua))Lu2sQWEd^=W-J2; YOp2~I2ml};=xlC+_(p?LW6Jn`Yl!%+uXOK6s=h`IaN$k0OA3e zw1qs(4T{tqS6tnK{gX_q0Zvg3i$~?!@ork-fCHE-;YiEe`#QlT+*-_{zIOGccqWRJ z&;bpZ{6-fAjw`rf8H1H$(9-pm#}fBsz+=V pdch2Zstik={`zTq`9ps7hCa4A=|jfLlgph*1;Xg=cnUs%nX;Yg z^1(C~mggW=!n1u28sZgvi^K)h>An1P>d`5-l$G^T&&hxvZI *!vmd&t9~LT znnb^m*H|+0YN%XH!nPQrfJ;De6N0k3E&{C9E+lrnKx4XXF+;+urY0ZSnVL3t zNzCIzqWXVVPd;&Y$z{B}$eP%aAf;vybZ3T8{r$DJ_En=znCr9MTggo0{qOZO3 7MD~(38oED8O$h!sxK@#^}HC^&1$$+yA^%f^+vC{`{bul$jf$ePQ z-LN_0fmfgGDDk$mHZ!&(uSuVlk!KkZ>Kqq-9~MGO-{4TtR7r-W^Z6Q5 zR@ &zpyw{GqqH7x1QyG(R}i&M_T+2Y1G3eQV@>Rlx4(@)X}okOJlFPv z9Pk7zo(CXdYixi=rBWG%B4MKw)U3}2I8lNmp$MpRpBg_~HL=?a{zMyhlnZU<>c)(r zEHeFWXt1bMFM%(h6tl3I#ux7i-TOAthO6};QDVPr$_5{2?goQ?-hK6joJzqiUQ;UF zIKM%0;D9h;B*t-W0iwV4w2{ 0{ST57j@dRP)d1 z3v6v?@8)HzSSf_6^4NLf*}*!bNvAKH;$|p{(TS38)Yq7TkoVvs9^b#e2^v)X-R*;H z)chBb$EcQpIEWKkF*?6a_KZfl;F2AMaDS^qq+2QaqYobc^_UVqS_uk*Y7GU=Gl(^4 zx^N|(a 8 zmrSY7qU$}|QrVPMUvwqCn)2OiUEjoO)BTccubv|nSib^1WTk)I`_kmppnDN VWMd(1cgdvL!M->4DY5 zL3+=(Dv=^CdCeJLGDcdgV)pDtlew8lLXDC^J>cQM&RlNSP0{M+2Jgqm7=}91Z0{OI zi4D#5_|H@1na6UH=zb{tC$0Uq2pp~M-Pv`%Skq`{xOeIRn$>Q6uZjRQOgE?X>=(^( z7_pNWH1PIF^0BMvYCIz-4A%mot_Ra971VC6srHY &H*iZ5Y#;uNa$~& z^@P)sQDwtlxet%+xgKB(%*aU*G+wqiz?$!svT-F)3pmUjR8+Crkb7tE*9*U}TW&k| z01ZUn=GGDCrW&q(r+bAPP2fshjWfA$OHfcy085%{`nnPUzzp vH|2Y7z2-Mvukqq``5K?cN) zur(K@FA&?Tb{^!^ZzA{MSaj5AVA1(v_JTQ&h9ocS%kVjNQmW_Li&c5sHL;P97R6?m zv{_yqZkXYj<5{NRPUpmq%qQ+;^Zfy(q z=U>{@X}@W)`Tt}$)(CfQhWQrjC~BO>Gb*i4K}_Cc9jh%Vf<&f%D~{@4qFUCib*|r0 zMsmrW#AEigEmmg3zEd)}|6u_!1KOHtJs+MvElngAjR}{`P>!*Us#OA&68mPjXvt|` zOd4s?C}YHq%YA7uRwpW% jjJ%>p^}0lJR@1`2A#Y2} zjkPtucVDvb)b)7JCCe{;Rq(bbF@d#15|Ed!u<;U!RfyWWF5EYGAyq&~mtQJv<=B6c zN4Sjs=|6GJ=FQf9 npq37JO294v@C_KWm$_D9a;FZN2f)!pUDkf2s5+t|5C1g{ z{Yh!GJpSWkAiii&Z(=jX@bUX$jHV|0yw7(uKz~TY{I`3pE!8J FcHFB2TSx zxXy aq|<<|9|E0G6*SK}u2NL!@b1hWA;F=Z2WvPN-g zouux!H&;vz>A(AOAE6UTJK04~;ow`x1SS(F+k*LFNt>ky)b$sHz1KWw?IZ8rn=%+B z$mB;1zxSldM%}Sw=T1vYP&{3tA=~Ejxr5@j3;NzCom9{GpYQ*Vrn7KryZO2}QlNMX zZE?5a#ogU0?(Xg`#i6(tcXta`+@0bO+}#Nh0&kvo<~NgnAUpfry?gIDpW{%9F(IfB z6vLRQFlL<*p8ugTZZ+_2gyy{au_xaDf!>fdZRLx1g=2S$!0zYxX3ehKymLvezd`!j z!8o(Z@-cG#G&FpiUIDu!n@z6Mf-{@Xajj>|A3Oo`N kDk_`WD?oO-_X9Ys(nSFSOp&-Tn} z6zXx=+iCHo{;OGCly%(U7F<3Xm6r^}%-W;h;CZI5nPBUl+T+E&&T_`*uqno=d*l7^ z{V40gd&V~ovQ`JlRQJ7ME#SAu4yIhS=@R|AHY{y;B)Neb(oqqY6TGre`@pITUWp(% znN`esghzJ!h3r19+siIIHGKv4yZfga&M(w}FY8lch@>_g-8-n*xsBX;*ivg>=Qkv@ zwsGa5Sryq@baNwUQwjBc8iJ=BSTtgifPGmK@QJ ^M9h%f1;oXK*=>u~-eoa=8x zjz=c(TQLD2@gw%0@t`oax!Uw{T1!XGvnthtsFdO$1yvghIq#>RZDZp*ezKx4SUdk< zJ?P}Rw?(mp5cf}lwo2Jw#BHk=_M+_UK|(#xSr;?^nGeD7uL9tXXoH2yN*h&xe)}xK zvpQDO{ZL^wkvEr%@9Zy1770v;uL8Zrwyr*-wO_JaV%Ul?SWHc#NTOOI%Fe`*N;rDs z@%UpMPfw<~N=30IhTySeJ#QB(F<%(w9ZRs!;~9Kus=j?sC+eS5QjSZN0%kKGW-0Nt zQZz(k2IiT)3S%D)v~oCe#-T^an%-!>r{?}WI<>twd~Y%20OGV4+!Wfm?}l!iM>s$) z@Fgyw{?)CiM;~g#QnHKdOA#9qB`2>SB<}rnToAMqzq(lG$_OsdU7!1}iw}fKV#-EP zSfKuu)z*NsRv_xzTe}D3Y)crxL1L3JqR#I s0L`;qA?PfX33*4Ro^1VGMcvQ&gkJEK`H`qfKh ONu}Fn1*G}7qYARhY|Gf~0c9;39hmPRihz+#5U3Tsrco_BywMR1 zxN0sFc(4XRPosGzpMP~6duIWLPq`Vy$cIRz_jg0qK%uE=zsC%aspm6t=lNGAM@L9{ zt4}yTaV$FvSI58D|MdQ;kh*t>zD48ISw>(f=4+Hf^Y-tEo;4#$9KD;isjH6R(_Kr; zK|5GGCVyJ)aB>v1SVPV1G@X+twbFE6h0OQM!B+o~_eRavy@`vp<&M%Zb6s%7B-70U zPLt!S @x#v;3bMkA?@_){kX6BQs zfJPX+?dJLW*#4=&(Ogh-*-ERyi*CUOaz*J(rV7Z(^4p?#(J?}Z@ji>ThgF^o8!HyO z1$F a<@Co(N+@tgO5Wv+-#cMwmMIYvyXy_}h$UV0_p0Rh}bP`%P@k+PDxj@S#Qj zura-*?)@bi2cN+*NIwnVfRUUa>f;Y?URGt9F`l0Rv?*SGro#ThiqiLcza$_skc!+o zftO&k?~
7oNaFUgZkl8#(3J_w}w11wx` 5ieT=y$nXiNQ#7hELd69cUon42Bn Jy^p@*LP66V(VI@b{Q^u5K0{3OuIf>?rW^F(nzt+a^SZn@_RfWpxd s$pp=%zb9{;K}$JQ|0x9Z0P=HW9STR1%n%;0>xr`TV9e}ivd)Q(OAD@^ z1IF_ZlBfLle|d!uKhn2KNr>M(-x^3-%lMyX&aqxQT|7S{dp+f;nV 6HTqK(MtxoT(si^&&lHw~R+05{-L* zpsZ=CB*z!5QixCW|Wnwtz!xWoUH)7~<>Q(9EjdE9;vS*^q=FzlmahUM0q^?OSba_ke zxu5X|xq9> ^C02P}Ofk zw^-h15Dt*xXpkK#pF`b#+b`C?KkM1dy&j}lgIom)u@TwYL& z>>bOtOH9<1 ztL5p@H2T^k9s_ ^4AuGa|6enC+642gcNgOr9jv`rkXHyE(D9JrDD93wP; z_3~I#Ijw#l5Nks|reW==lF${{zj+hqc@nl0aen#uw+yeDUtiZe^*_lS;E4YS57c4^ zc1NlDu=p>xCg3T09^Sk#>?JTwgU6?Tv}UNtHurFj^EG37f_-yvBn&>YC *xv%+9!5+j>(OwwocdeKI5p0-dde z3*4s@tGv4^%IzgD!2hHH)ETO-??hY~;q>fNu_wDRv7;5QcTh{{+i)b2!Kg{Qt&<*X zcM21ZLTIG~UdjGNK*{`PjN?Su1TAS}QS0u~!%E8p96K(dby6;#r_On6Og`wc`X6(1 z(_fqP#Ag}<9#5Ri6DP739I1K!*%xn;3L9!;fnTHj#+QfjpLh4z^4?M){bD30M|C&v z3!#sdjxTvzX7PcqBtU2jpA@P|F%%y->8r~-mCp?6 +}efn#@16YrM>YChcA0UKvvr8gYg_fOGbLnTEw^3V8|g%N>a7_UP`jVCmVW#=y~ zZrM>5No%Ew3+t2wZ7P&06DanSg+}|~3K>j9B)ufwWIM|+vdiY*34c`x@Y>nPmUy;c zdo=QHG5PJ(H9#Nl1s+@A^%2Ev51sk1yO=1ccr<_v|0B 3WnMaey* zdl4F1JXo9k)s6xWgWW=xm_T@23PWTcElR-@`Y@_sUX**ol2XKpuS1oYexKR&h0*a) ze|Wdu%8(&T2>lrPg7YI3rhqGzJo4A4%4U*KI?@81iUK+ln(rcs247%d5k4z_Kp^iD z6Sblfg+nIGY0mI|eC^3=nc?-^a-FHU>SkrTGOO!adZ}$(-n7hfx$?bZoi^9MDW_R# zfui8BJsW5p*#4X;oMqwgScT6{o%XMZ{xqz%KfY!{^ZPRjhhEe{(E5w2l4yWq??#*$ zuaanXNeZqMUbatJW+N~6S{6KJEtE^l7BS*p>tF1Dz9r-^LJa;c!Gc@N$Ve@$5d0!n zDEYr$0P%Rh-oi4ZEDwYYe(>EG$h{xjJ8#T0Ou9JTxb$o8{1@wJauomtqu6M6b;OL9 z)xAs&y6;x$DEj 9*2+nX^m!jS zZ+rU_Ac>;YzqcQgr#x0dj{x&s#xL=Y%=5RFA;R&eaz-y}0*W&So?%wzYK1eh>m 2y-}w~ %FQR;%U z{OdTh{gbkTTsS;6gNsPTM(ydGcYz>Ijh9ycqXilC*zh3HFbSJm*Yd7nq;n7i)Rg{r zU&12~ybg@PWCIXOv8uAgdO|CN72=ywDJw(GrTIV&LVY>*-h_PeUJ0yDBboQG6dwOV zf>KrmT1?-m+NmV?ynLCA0VKh(x(R^v v>N4#ah#<1Y@3{aV9(o*4l_vp1Ul z*+y86+)z{Q`u87RUo=O`4yivOdI9n5ByB|LXY?MvrpvoDLW`+%Am;m31R#c@#2!T8 zDKIQ}9pt%|DD_%Mg49P7d7uA^MTfQ+u+5Io <@_7YP--&&-@pQJ(w|B27!36MsPCdeJ z`(<9E6^XW=>&unW@^A*6|Nfw2P+aJ}cSF*|AC1 N ze%clrtYCU|Qe(iDCrQiqqhWqczInztn@arzJ1jUVsl=zg?Ov>IXPEc}P0w4dPL?Y} z+V!-eY|XF>R3~@W&zdR-&QNN=e7gglZ%>@L{=8y6Q^)5&F|Lc~d2XAlnPcm)6cW5B z^MG=D2Hrt@fir Nr8uokf<@Dg8NG$pgAh{FJnXE2q#3MunR7`qd ?e4k6 zN1t4i9Ca{x`Q{!|aG=02S1>4AEG%}xBxEy)By-9FxlBN$)0rYEgoNJwiv}D7SFIRn zK9FY}LCLBDWxl7FFia}hj(^{oGIFEFHlLvcmFbD68b94d=U)L#zOT`_mVqzhLd}rJ z *#M3iJ|P#IpLzHM&kl8JwA^ MZZM)oHr&ND@zI&R179Hb+g$A+6y|>cvQNR%6=I1zSF*~Ll%Z;kn`3duM zJ*e~*sCy*0va>P2{00@*UjgL|Z(TO-K{zJ}r1q_{rY@!_+gvtpc$$Hpjo6BQu^W%w zk1eP(JesSSC{#)gGIxP110=@G-ZwWc3*u<9N!mpI6Qq25&J>DC=(10L;wUqh)&xro z#^-O9G2?ILt$4_nlgjDgGhuN*e9~hzNl@d#m`mXmEEp&dZ$;6uf29itSlIt2|3hK+ z@bdttlrr}o%cyI-)^E{vr3b1<^LXssn#%kFh$(8k00LH9>iqS=Wsf~G|LJkPUc?3P zmz92>8qH)d#HsRnB%U1_oK8>|y|Rf4ry+Ko+h|`kT26F4EMT!)EBn=}vWBjgUR&?U z&2#-MY;ZMq7VnVKX~MMgD*Enm4M%F2f#Z1gP}=4dhAK5YXVt|o<)pdPnPu*T5?-$G z7GU$Y$%TGpJ7Hd!wpdz4nDOUhY0Sd&&!@BkngPS?CmTNde}RuzVl=?+JyPET %*Wd{=mq5Jd6*-3~H_m64+~>X~E%t rU+sWveyq3Xc10_k)l9gO&2cAf`Kv7=DM zQ{gR;Z+#+(*kd0H7qBXY8}RndPMuiQK~UyOi5))SaL6{w_LTGKTaf$Joff#vw`Khw zQU;3K*)|MYsf Dub_k0!A;NY(1~jgR)clYTmy6@+paa1~k2lDmS5< zd%*M08x1=sBVEFN{O!4_Y_`CE5;2w&UeGdY@@IQ~INxj((lwzf5?VTRH3hPG(;>Z_ zP@ZgUFwalV@OiGxtC2|BZjzX~DnT90f2LR#D%9Gy&?d~XG}hGiKqG`ksw>FH&WlIf zNDc?%$IF&6tgc$VPrjXU)LG9ye^^w_u-^*E?|N2nY=lmCZU8mQnwwweYgV3y$|*Yy zZ{Fm7jd@(wp8o;Ar{z3V_SEZldQ5R;|Mdlenp*!J#6sygMAWgR_=B%IhVLKq=b|MW zi;X4PVZ5a^wl= yrD zJlU}p-WNYpFQyK QNg%LFb5-%_|!w*CJZdf{2*tbwh;(`$f*}L z4e+qfZ3t{I?S!1xZT2bho>2PBfh_n=M=8{zzG+M)usfWdNx^iN!!3R|YOE3L{Y0zy z*CGkg9+$pZZFD~f(Kw8KN%@IEB*r*cYP@jrS2j|d(4#hY`1Yu+c$Q#IU65zH+7e2O zUYXqvxJD;4A`vant39#zTY)prUn4|q%9B$Q6E$ve&ZW (xCWuQX43@S$4F517Eha;bp|OCB3qmqxR`4uyc?3NQOB(Hg9>)l~ANW8k zU~4?j3Ey Pdtrc0XO7>k=S5m;cdY+gk7A<)bX#@pehoBg?LJ`qTKo63 zeO_a!wK%H>c|7mcz37PIkHhq3;cr%w 5BDz40W^|^&;{p&@ z;2oF8Emybkl^1wx6+8Eu&m%c&eUK?|R%H0(7dZlJ&w$I6t=`0?ZytE9O3^FT|7AX} zDL&w}$YU>y&>nbC@k{oZ-anekLRm$ViqT8JW8Z~o#oMjLph aqq^RKc>}0gnS<`78?PqI?*!iGuZ#C^W7BlH4qb^+WqX##XP5fRZg&m z9q;>BG<6*ib!Syg^43A2;d3G#Q pO`>!Rwt+u;AFd?Vhv9lZ6a9e}c z+V U0CdJjqRN>o9?Ak1Alatwbe(OWt%3Rglie9 zfFHcI;u~XBq-xo%TZR#;f7%oPz!xpyh}E1JzmTy)V%fmq#HMz@*#eeJ3^t7f_^PY% ziecV9x$K|4+d&Z+OERiNyhR#Fm2D|H@I|5>4QNRd&iM>XEpz#$Dd)vX0kVen0X_wP zD_W-vZj;hiO-V-JwSlT!>vZ-Lt)&61fw*VM?KO6-GyXU9AY0F8ckncHV;iC{ux>L$ zv6j%HBVZJRXJ0uCEQ;4UrFKJ3N=y9qhf=pGZgT0AVt<>1e~^0BiQ!^2qfiMSr*V5s z-h_HDfo55fF;k7^KEKyu=kxqw3~(4EoI|xu`^VcCE~wwMpJRD~##x-Qi-Ef93w0No z-F(@TJyadLquJB3@rKdb3N>iJf{sV{$B8}8#h`jxFgoAu=-H|W60sTZ0I0fVFK}Ug zLwS2=^=$Ozf|r&tBw<=o7+033K0LYZ=P)XT19o!U3|pP~`i}){@#(p`l!hIoEnr2q zWwnS=-vkE?DxLFK$3UfFGfSJp6QcV;B!NmgdUZ@uFK2l7@Zc9*@^I#ZdW5Be5Jv1J z(oYga BC4%;${RW}WZLANTj}L59tvZHVaMC$NRA=^ly#`N( zno#@E9U&0lFC?(=jAyl3IOaBR{t#wO>5l|{!-U>M&UL=4cx8DG(IjKU@1Y~B9Cgl9 zyb@S-_s9%)vYto9IG@lj+RXdH<7I6?=|4; V)`GHQ@mgM$g5Ew95^-YE&K9 JUA&ajCd(fjVx^ zJpMT)$iAAs_C8N+^S*YnrI;4ssPpVgnIap(5Lae3Hp#sj1&L#rJlcm#Jxg?qAcU`E zutW8+-LfJSm?dV?k 6*wDL z4J8XAIGeK7>`v$KT?oDH?Qwz=>E*g0=dC1 {qgRFUhyM zJ(f@aY5KV_rqB`-H~9QKKOoU#@S)a`*?R|-k%}p#Tjhr`YZt6m>WfK#N#^i3D~s>9 zEEr}_)oL$yFy%4t@?G8r^NEzk6Xh^1=jM%nNFJUz=nD$eN;YzSPuFdT=1IsmaoaoO zxyby%5Ff&m3PFtIuyr^ +R3j2LNVhS{a zvzt_;W1u3hEYXZOu!o+ucduObmY-3SzZ(OsT0?U}E8d#tI?8zGIEMw-sW%eMP{|~R zbU54kH6weJQ(nwCwS-a_=SCOmjpl=l2;qTp%GDdG!8s#>>ju8N6ZSyPfE~xO8{F#q zZ3T5hkMc%YAvmvP-}kXgpZHFoIgWmDPHNZw4^O`1Tg`f|uA7J9D}rN }n`VKmR+-EtkT)|g96c >PqtytAh-ytppvn+B60c@H$qwJhS%Hu8=uo7N?+= z(7t-<;iIa|7ZzMAuakO&Fif9OQ?DEnTM9ac=c!q#7P))nfM*g&-{{j|Op!sI<;eOT z69^~pMhf5`!Kzvf1-=>#4~n%lzSVX^z#~G&BT%T7$Jh+B8t*eFpZ00?1@!7B22J$% z0eNN9gN7GW4SlGn_4jPZD@7WW&63l`s0mZ;7N`%=HxS&nkE=BgR_O}hMX`i!#Z6!= zD0g}5vUu($xz}^ghgB46g_an+E(D4t(~>B}4v$tcDNOH`d&!V6{TvK(9}Bj5+1$le zf+^BJ7^qkSV_XDU3g*fKKPJqDA#c*_Ovbi+Jk9}~o$44uUg;diI6YkvELl%QB88z;5jRgZm5ebqf ztcy|f0t~+6;C5!e&FQBxrK|+)(5#L7Zy;!~GyoF1{&A+s_oY$)3`&S0J!{Cz>x9^Y zZj=Jnh+h+sfMG|uM Ht%r;fZMV6Z$|GYDlDrBg}X$^4(n^ ziAdw&Q6WQnc{TbYk0yWuThsT+pw>OT@8&a7IOU-hayJ0(=BsVEL|Qv7QoF*SoAGBL z;3CAQ{mX;)cZ~vZ(b{&9k82!1+}}yWkBALLq7jz;NhKmm;Y@zpEF$EykI{b8Uyew$ z6S($CVa&W__N|>#=Gr1gQ#K|G%G*)tCz~R(rXzS*wmgi{mp-nB_>0Id`4K#d8hoW; zK@O(iB4{N1JU}QOw?udtY0yHSDrQ~?*j$knqvgV|r5t=ou{A_X<<0w2aV?A{z`cTt z@4Q1@hHU#958W-pAKZJbv-H6oTrFH(2Sgr2^!gGrt@f2E5rK1et(HD-Suj=i!f(eT zLObsZSHZ3`EsMl5dxDQp7sx=JhkD7}GC1Y3$5HvY?R8btB1Jx3l9ed+yUwV?C)^Hk z$CAw?3h{sviOLL+w`^F*$*j*>WYM)%vfWP8&`2#z6?*DKq#&WPPQx~A7+M5e7A2-# zB1hr&C*tVj#zsr>AT^ww1bWqu>yTtrK`OKPjK{&uBkjT3*#2yI&svNaS8l4-OBYrC z;fyk>JPVpD_PqL5$GE{-vIdVT#X8seQ^F={qiU_94zCD)VxxSX=CwGtaoCB~mRR;T zDZ$&%1<9G@`y=qs5jy<2 @{QT}BG2W+m z3hW6 07c~4Wd47^9mWh_2ZoH zt15oxuAmj}epPRV7G2`tMc~GuPuIl#kIO1q12~N@)e*+fQb*ubiRYoy t6; Ou9abOm Q;5NL5rtvwaLE7u$u{ibpgV$C z4I_s+#3LHsA%|S&aK_Dki$HS3#im%8&sxra>1&-;x(5Wo0(Gt9+8r{fzRz4K|ICcZ zjBUZ>;re|Ukc9jttLmim>dh77n1z3(fLbc&!z9sZZNu`*Wc4&x(|fropO`L5?Dx-% z$9}Np*X4SLDmFr6RHc!FV&eQdN!ys}o@sN9z(@yF;<4%H)fuQs>-`DsX6(|dtaJ6M zXIH7(k*|7ddFJ(@p5{kIZa49udQT%N)8E0%$9yE9r6TW`3F>weuPkU~L{O5M2$)(r zXC )|@dr#-kxY1e|T2RqF>;7XUD&`0Jr zKi!~CnCSVH*5!K?DZAGv-XT$=<4>%iG3dm+F3LFH09~<;p!Q*Jn>ybG{oA&manaUC z =%V{ddE=Z(iRq?}m80zQ`Hy(NrD9bego%WipO8P3Q5`y7mmMA!--J;m za{T!!1^6ONcDMpJx~m-NXXU5P^w#zMmYd_gq`m5>m*?a0U`u3N=L Q z3Ici)zhIjci+(<2C8T5V>jhY;R>PE)7OyHQ9q>hPQ-3DpDMv*G_W#Yq8q25J5oAQn zW2DnCf)}60J3= wRMx(!tUl zKQ2=99h8&f$y?iJDLL;ACUOlQzb5Azh(P8ZN0HBSw@sw )HyTt{O9j2$=WO5HdHTNu9#k3H2SQGJ7Fyw- zliL}0q-j@4{_Z|P1GsuKv?VeV) zvTyY_G;+k$mBwzelUADXQaFOJ6g*#;Wc%WYx^EupR-yf2p`bXIuP#LdB=%7Bdotrm za=`9;V;NFynaWXK_t%G Yp_vCtjYp$VfQ096o-!k~g(hD|3W646U;=~T~Sb%XOuEk kD<6M>~ty zbwW*h@l+n!>7q@QP@-+S1#4}0>KTDI?e9q+r}lCt`Cb*{!k`pXCijdZ>nRxR COJZ{j}B}9w2^NqGh6H#Np=o7!fC8n zM^E~cjKz^GVxw=h f(VUO>TBKY1?=tx>~8R+q=>%OGNGJ@DA^1*u+$f<5~h$(kQ zpfs72ehDZO0DFTP0>NA-6OJQ C}XgZHtaJs*|7=KnpkHnU5H zO)v}c3%#iLGQX*MW?1ZSNZ2g>I%hK81)xRIS)2SOH;B*ht=;*j`BVx2$vOaX9oB}N z3IJ8ti}d3J!YcpR>jin-ax7AY$T8s4M^Tmkfc<(pX`)HUOn^2tFpe!#0ihH6JV$iY zkcnT1Z_}_aXQ}D!bvH|CV*dEs|A=o(@;u)x-uHa({AWDx(mkvpCWPPOQoTXYokk#3 z>1Fch!adNx@Hg?oR-zr56&OSWDu-ra_|W!vB@B)%x1|nyZWziZ98yxLG!=w-^xA!F z8p720pu-=M=FZWFZ31*3T0rj8z*^Z9hraaD^9Z85b|lVo5UPRIE6VyI3Vf~hzPeZA z+D6X^M(f*QMbZ4BdMkXLAl4KgTFe=PZ-NC}s9PTg9IF0}yIV4#pPb &6aY4EHykIa32U7m{)AA-BUfdkojLPpkui!4zekiM>FqmxAl~6_Hu78+dIIe zJ<|<_kgOC1f)fFEjT3f^aZqS5Y3GBzLk$_2T=Ke)F}@D3-or$TI;mf_v+8tV@|cuR zmYDS^Sln7!llz42pQrc!T*q$I$J4m%IFAFW-+!<9U+TXAwpTkm?|t{OL2+zN5tD_s z@Ts^sdb7o}J4N6-Eu7Yg@jFqM0NC$HN%ns9gaSdVF`fV!_Z4dX->c~ATo@!Sw=^O_ zli$=n$YbjwXO)m_!&~dr0{lUv{C4J$fUV8 qMaiV5 z0#wqh+ftduF3aOS3>Y-oqL8>) eYg$Sl!z2Mc^Fmx!K+v0N^Zachr8|Mk-2t3WeGUXWl$4fa9c;tEe_^?_r zKbrPk61)5q2g~!1r<+TZq)Ff5)Z%T~@Gq4v8zT{8dT(nvR$&w3ShNB$vH`Lmj7XET zKQw=1{4MThr`%0`)J<#5)`uHg+g!Ywas_ryFA%e4-4+&`-RC=Jp%eD^w7=+&rIXFj zUXN0!z99 &jM5w5U}TeyX-E!-@bT!@quw{t@FDe01eUzHQWK= zOSEJ=4;US-BS@y-Z`0itdRHoCY*Oi_NGGuF3F|@?ty)$ycsZuz-im(_CSXXVw^_-3 zQA0|`s9a=WKvw!~64zeMiinq#%(cId)ooR(b;jT5zVZPv)#})3G@O+c-z)%)Qd6pf zPzcTuR+qm168eKz?BpH~?(l2(%070&h=Z=wD0x(enA{4K`U)Kb&;8VL{MfFL!%e#2 zk*mq #@`RGoJ@m-+a=4d3RuJ{MQ3X%;dq{ZRLL z$}*5eyldpHrx-BzC{>K5H6B|Js`lAhBFbJ+K !VZfXBrCY7(iRB+`;+c zg_YTFj6#D*2l rxFnSj_C>4~b7O=mdxJDZ}vFpHO(tu*dHf zc8#fZP4tdVZSbsV2iqv;#O71LP)Q8Zsr~WOqT#c-Z~q>#WopeIq1S_nBbCUkK$V(0 z{{ez?iuae#&uC#xN;0J#KA^Ln0G!x=T!HK=zA6ZXgF-Sesdl&38L@=pds tk+G>MZ5nLBBiB9xFFKKG z5sUw?FLCGilglUGecpn#<^@6)VF%!;Mk|~yYJ0~6LDZ&EK7Za6LUCq7Lm!!l0(``) zO WBtAgT71uln;n~HC!;5syJwIp)Q_!6PI*Bd=P8fhx&aR+n zEsyfoGiasYahJ8lk6BO#$fT=N`<6UgB&7sN={skutz(Y`C}`bbed4T7u-sipByzP{ zYRY!Lf+f||(Z?9uPQa9vY0DodP>FL@Gx44th