From 39016e7915fd8ddaf25782236ba7e0653aec1084 Mon Sep 17 00:00:00 2001 From: 2233admin <2233admin@users.noreply.github.com> Date: Fri, 31 Jul 2026 20:57:05 +0800 Subject: [PATCH] docs: refresh public GitHub showcase --- .env.example | 5 +- CONTEXT.md | 16 +- README.md | 585 +++++--------------- docs/dashboard.png | Bin 102620 -> 0 bytes docs/screenshots/evidence-relationships.png | Bin 0 -> 230191 bytes docs/screenshots/project-overview.png | Bin 0 -> 146607 bytes docs/screenshots/record-detail.png | Bin 0 -> 330951 bytes docs/screenshots/run-operations.png | Bin 0 -> 129054 bytes docs/screenshots/workflow-inspector.png | Bin 0 -> 156698 bytes 9 files changed, 159 insertions(+), 447 deletions(-) delete mode 100644 docs/dashboard.png create mode 100644 docs/screenshots/evidence-relationships.png create mode 100644 docs/screenshots/project-overview.png create mode 100644 docs/screenshots/record-detail.png create mode 100644 docs/screenshots/run-operations.png create mode 100644 docs/screenshots/workflow-inspector.png diff --git a/.env.example b/.env.example index e5a35b0..795b662 100644 --- a/.env.example +++ b/.env.example @@ -39,9 +39,8 @@ BOOTSTRAP_ADMIN_TOKEN= # 服务端口(两种启动模式均生效) API_PORT=8031 # API 服务对外端口 -# Frontend lives in C:\c\Users\Administrator\projects\open-cli-admin. -NOVNC_PORT=3010 # Agent 实例 1 noVNC 对外端口(docker-compose port mapping) -NOVNC_BASE_PORT=3010 # 与 NOVNC_PORT 保持一致;API 用此值推算各实例 noVNC 端口 +NOVNC_PORT=6080 # Agent 实例 1 noVNC 对外端口(docker-compose port mapping) +NOVNC_BASE_PORT=6080 # 与 NOVNC_PORT 保持一致;API 用此值推算各实例 noVNC 端口 # 中心节点对外地址(远端 Agent 注册时使用,也用于生成安装脚本里的 CENTRAL_API_URL) # 必须是远端 Agent 能访问到的地址。留空时系统尝试从请求头推断(代理环境下可能不准确)。 diff --git a/CONTEXT.md b/CONTEXT.md index b4a6f13..e385c21 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -1,6 +1,18 @@ -# OpenCLI Operations Platform +# OpenCLI Operations Platform Context -OpenCLI is an Agent-driven data collection, processing, and delivery platform. OpenCLI Admin is its operator console for turning recurring data needs into observable, governable work. +OpenCLI is an Agent-driven research and intelligence pipeline for continuously collecting, processing, reviewing, and delivering data. OpenCLI Admin is its self-hosted operator console for turning recurring data needs into observable, governable Projects and Workflows. + +## Public Release Baseline + +The public v0.4.0 release has one end-to-end product path: + +Project → Workflow → Run → Records / Evidence → Delivery + +The default Docker installation includes the Admin frontend, FastAPI backend, SQLite storage, and an interactive Chromium/noVNC browser execution resource for QR-code or account login. OpenCLI, RSS, API, web, and tool nodes feed the same Workflow runtime; runs expose node events, traces, outputs, evidence, and records. + +AI providers, authenticated websites, and notification channels require operator-owned credentials or browser sessions. Remote Agents, PostgreSQL, Celery/Redis, Kats, Dify/Graphon, ODP/III, and other compatibility runtimes are optional deployment profiles rather than default-install promises. + +This document defines product language and object boundaries. It is not a release checklist; [README.md](README.md) is the public installation and capability contract. ## Language diff --git a/README.md b/README.md index e861013..9370fc4 100644 --- a/README.md +++ b/README.md @@ -1,515 +1,216 @@ # OpenCLI Admin -[](https://github.com/2233admin/opencli-admin/releases) +[](https://github.com/2233admin/opencli-admin/releases/latest) [](https://github.com/2233admin/opencli-admin/actions/workflows/ci.yml) +[](LICENSE) +[](https://github.com/2233admin/opencli-admin/pkgs/container/opencli-admin-api) -**现代化的数据采集系统** — 可视化管理多渠道数据采集,接入 [opencli](https://github.com/jackwener/opencli) 驱动国内外主流平台,支持 AI 处理、多节点分布式调度与实时通知推送。 +开源、自托管的研究与情报管线。把浏览器 / OpenCLI / RSS / API 数据采集、可视化工作流、AI 处理、证据关系和结果交付放进一个可运行、可审计的系统。 -## 当前仓库边界 +
+
+
v1,并完成了基于该发布版本的真实运行与 Trace 记录。
-**OpenCLI WebUI** OpenCLI 可视化界面 [opencli-webui](https://github.com/2233admin/opencli-webui)
+当前公开版本 v0.4.0 已打通:
-**仪表盘**
-
+登录采集账号 → 创建研究项目 → 编排工作流 → 执行与追踪 → 查看记录和证据 → 定时运行 / 对外交付
-**Agent 节点自动路由**
-BOOTSTRAP_ADMIN_TOKEN:首次进入管理界面使用;
+- API_AUTH_TOKEN:Fleet、Agent、API 和 MCP 访问使用。
----
+两者同时保存在安装目录的 .env。不要公开 noVNC、令牌或浏览器调试端口;远程部署建议使用 HTTPS、反向代理或 SSH 隧道。
-### 定时抓取 + AI 摘要 + 推送工作流
+## 正常的研究流程
-无需写代码,全程可视化配置:
+1. 打开 :6080,在内置 Chromium 中扫码或登录目标平台。公开 RSS、API 和网页来源可跳过这一步。
+2. 在「插件中心」确认 OpenCLI、RSS、API 或工具能力,在「项目」中从模板或空白项目开始。
+3. 在 Dify 风格的画布中连接来源、处理、Agent、Gate 和交付节点;右侧参数面板配置当前节点实际声明的业务参数。
+4. 保存、验证并发布工作流,手动执行已发布版本;Webhook 也可直接提交 workflowProject 触发运行。
+5. 在运行记录中查看节点事件、Trace、错误、重试和输出;采集结果统一进入「成果与数据」。
+6. 在项目内查看数据、逻辑与证据、证据关系和 Galaxy 视图。Galaxy 是证据关系的一种查看方式,不是独立的项目模块。
+7. 配置 Webhook、飞书、钉钉、企业微信或 Email,将通过规则和质量门的数据交付出去。
-1. **数据源** — 添加知乎热榜、HN、Twitter 列表
-2. **定时计划** — 每小时执行,绑定对应 Agent
-3. **AI 智能体** — 采集完成后自动调用 DeepSeek 提取摘要、打标签
-4. **通知推送** — AI 完成后推送到飞书 / 企业微信
+## 产品界面
-每天早晨打开飞书,信息流已处理好等你阅读。
+### 可视化工作流
----
+来源、处理、校验和数据集节点在同一画布完成编排;草稿、验证、发布和运行使用同一项目上下文。
-### 舆情监控实战闭环
+
-当前实战链路已经投到真实运行面,而不是只停留在配置说明:
+### 统一数据结果
-1. **多账号 / 多节点采集** — 通过「节点管理」和站点绑定,把 `opencli` 采集路由到指定 WS agent;验收脚本会证明 `chrome_endpoint` 和 `node_url` 都落在绑定节点。
-2. **AI 摘要与打标** — `collect → normalize → store → ai → notify` 流水线会把模型输出写入 `ai_enrichment`,监控台读取真实记录展示摘要、标签和情绪分布。
-3. **飞书推送** — 飞书模板可以直接引用 `{{summary}}`、`{{tags}}`、`{{sentiment}}`,把 AI 处理后的内容推到群机器人。
-4. **可视化验收** — 「监控台」的舆情监控卡片读取 `/api/v1/dashboard/opinion-monitor`,展示最近热点、AI 处理量、Feishu sent/failed 证据和来源贡献。
+采集结果保留原始数据、标准化字段和完整血缘,可搜索、查看详情,也可继续进入 AI、关系分析和交付节点。
-一键生成实战配置:
+
-```bash
-curl -X POST http://localhost:8000/api/v1/presets/opinion-monitor/apply \
- -H "Content-Type: application/json" \
- -d '{
- "source_prefix": "实战舆情",
- "feishu_webhook_url": "https://open.feishu.cn/open-apis/bot/v2/hook/xxx"
- }'
-```
+### 证据与关系
-这会创建两条默认 `aibase news` 多账号采集源、对应定时计划,以及一个飞书规则。
-如果暂时不填 `feishu_webhook_url`,飞书规则会以 disabled 状态创建,不会伪造推送成功。
+项目证据、实体关系和 Galaxy 共用同一份项目数据,支持搜索、图谱控制和运行证据回溯。
-关键验收命令:
+
-```powershell
-scripts\acceptance\fleet-acceptance.ps1 `
- -Site aibase `
- -Command news `
- -Limit 1 `
- -CenterPort 8032 `
- -AgentPort 19824 `
- -FreshDb
-```
+### 运行与治理
-如果本机已有旧 API/agent 进程占用端口,可以换一组固定端口,例如
-`-CenterPort 8035 -AgentPort 19828`。
+每次运行都能看到发布版本、状态、触发方式、节点事件、耗时和 Trace;下图第一条记录即为 Published v1 的成功运行。
-最终应输出:
+
-```text
-ACCEPTANCE: PASS
-```
+## 已支持的能力
----
+| 层次 | 能力 |
+| --- | --- |
+| 项目与工作流 | 项目模板、可视化节点编排、草稿、验证、版本发布、运行记录 |
+| 数据采集 | OpenCLI 浏览器适配、RSS、REST API、网页抓取、CLI / 工具节点 |
+| 登录态 | Docker 内置 Chromium + noVNC;Bridge / CDP;浏览器 Profile 持久化 |
+| 处理与分析 | 归一化、去重、AI 摘要 / 标签、关系与证据视图、Kats 时序工具(可选运行时) |
+| 自动化 | 已发布版本手动执行、Webhook ingress、节点级事件、重试与可观测 Trace |
+| 交付 | Webhook、飞书、钉钉、企业微信、Email,以及 API / MCP 消费 |
+| 执行资源 | 单机内置浏览器执行资源;可选远程 Agent、WS 反向通道、HTTP 直连与按站点路由 |
-## 快速开始
+OpenCLI 提供小红书、Bilibili、知乎、微博、X / Twitter、Reddit、YouTube、LinkedIn、Hacker News、财经和公开内容等适配能力。实际可用性取决于上游适配器、地区、登录态、站点风控和页面变更;请在自己的账号与网络环境中先运行连接测试。
-### 方式零:前后端本地开发
+## 默认、需配置与可选能力
-新前端在仓库内 `frontend/` 下开发和构建:
+| 开箱即用 | 配置后可用 | 可选部署 |
+| --- | --- | --- |
+| 项目 / 工作流 Studio | 需要登录的平台采集 | 远程多机 Agent |
+| SQLite 数据库 | 模型提供方与 AI 处理 | PostgreSQL |
+| 内置 Chromium / noVNC | 通知与交付渠道 | Redis + Celery |
+| 记录、运行和证据界面 | OIDC、API / MCP 客户端 | Kats、Dify / Graphon、ODP / III 等隔离运行时 |
-```bash
-cd frontend
-pnpm install
-pnpm dev # Next.js dev server, proxies /api/v1/* to backend
-pnpm lint
-pnpm exec tsc --noEmit
-```
+默认安装不会下载组织私有适配包,也不会伪造第三方凭证或交付成功。AI、通知和需要登录的平台必须由部署者显式配置。
-也可以从仓库根目录调用:
+## 分布式采集
-```bash
-npm run dev:frontend
-npm run lint:frontend
-npm run typecheck:frontend
-```
+需要把登录态留在本地电脑,或让多台机器分担不同站点时,可注册远程 Agent:
-### 方式一:原生 Shell
+~~~text
+OpenCLI Admin (:3010 / :8031)
+ │
+ ├── WS 反向通道 ── Agent A ── 已登录的小红书 / Bilibili
+ ├── WS 反向通道 ── Agent B ── 已登录的 X / LinkedIn
+ └── HTTP 直连 ── Agent C ── RSS / 公开网页
+~~~
-直接复用本地 opencli 和 Chrome,适合开发和个人使用。
+进入「执行资源」→「新增节点」,系统会按当前部署生成安装命令。Agent 路由优先级:
-**前置要求**:Python 3.11+、Node.js 18+、[opencli Browser Bridge 扩展](https://github.com/jackwener/opencli/blob/main/README.zh-CN.md#playwright-mcp-bridge-%E6%89%A9%E5%B1%95%E9%85%8D%E7%BD%AE)
+1. 本次运行手动指定;
+2. 自动化 / 计划绑定;
+3. 站点绑定;
+4. 自动选择可用实例。
-```bash
-cp .env.example .env
-./start.sh
-```
+远端机器默认使用 19823 端口。NAT 或跨网环境优先使用 WS 反向通道,无需在 Agent 侧开放入站端口。
-| 服务 | 地址 |
-|------|------|
-| API 文档 | http://localhost:8031/docs |
+## 架构
-`start.sh` 启动后端与 Chrome;前端另开终端运行 `npm run dev:frontend`。
+~~~mermaid
+flowchart LR
+ A["浏览器 / OpenCLI / RSS / API"] --> B["Project Workflow"]
+ B --> C["Run + Node Events + Trace"]
+ C --> D["Records + Evidence + Artifacts"]
+ D --> E["AI / Rules / Relationships"]
+ E --> F["Webhook / IM / Email / API / MCP"]
+ G["Local or Remote Agent"] --> A
+ H["Webhook / Human"] --> B
+~~~
-```bash
-./start.sh --no-chrome # 跳过 Chrome(RSS/API 渠道不需要)
-./start.sh --cdp-port 9223 # 自定义 Chrome CDP 端口
-```
+- 前端:Next.js 16、React 19、TypeScript、Tailwind CSS
+- 后端:FastAPI、SQLAlchemy 2.0 async、Alembic
+- 默认数据层:SQLite;可选 PostgreSQL
+- 执行层:本地 asyncio;可选 Celery / Redis 与远程 Agent
+- 浏览器:Chromium、noVNC、OpenCLI Bridge / CDP
-**停止**:`Ctrl+C`,自动关闭所有进程。
+更完整的对象模型和边界见 [CONTEXT.md](CONTEXT.md),系统结构见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
----
+## 从源码开发
-### 方式二:Docker
+前置要求:Python 3.13+、Node.js 26.3.1(见 .nvmrc)、uv、pnpm。
-**前置要求**:Docker & Docker Compose
+~~~bash
+git clone https://github.com/2233admin/opencli-admin.git
+cd opencli-admin
-Linux / macOS:
+uv sync
+uv run uvicorn backend.main:app --host 127.0.0.1 --port 8031
+~~~
-```bash
-curl -fsSL https://raw.githubusercontent.com/2233admin/opencli-admin/v0.4.0/scripts/install.sh | sh
-```
+另开终端:
-Windows PowerShell:
+~~~bash
+cd frontend
+pnpm install
+pnpm dev --hostname 127.0.0.1 --port 3010
+~~~
-```powershell
-Invoke-WebRequest https://raw.githubusercontent.com/2233admin/opencli-admin/v0.4.0/scripts/install.ps1 -OutFile install.ps1
-.\install.ps1
-```
+常用验证:
-安装器会生成安全密钥、拉取公开 GHCR 镜像并等待健康检查通过。终端会打印首次登录用的 `BOOTSTRAP_ADMIN_TOKEN` 和边缘节点用的 `API_AUTH_TOKEN`。
+~~~bash
+npm run lint:frontend
+npm run typecheck:frontend
+npm run build:frontend
+uv run pytest
+~~~
-从源码构建:
+从源码构建完整 Docker 栈:
-```bash
+~~~bash
cp .env.docker.example .env
-# 填写 API_AUTH_TOKEN、BOOTSTRAP_ADMIN_TOKEN、SECRET_KEY、CREDENTIAL_ENCRYPTION_KEY
+# 设置 API_AUTH_TOKEN、BOOTSTRAP_ADMIN_TOKEN、SECRET_KEY、CREDENTIAL_ENCRYPTION_KEY
docker compose -f docker-compose.yml -f docker-compose.build.yml up --build -d
-```
-
-| 服务 | 地址 |
-|------|------|
-| 管理界面 | http://localhost:3010 |
-| API 文档 | http://localhost:8031/docs |
-| 内置浏览器 / 扫码登录 | http://localhost:6080 |
-
-**停止**:`docker compose down`
-
-公开镜像只包含 OpenCLI 核心能力,不会隐式下载组织私有适配包;需要额外适配包时必须显式提供经过审计的仓库。
-
-首次打开管理界面时,在“管理员身份令牌”中输入 `BOOTSTRAP_ADMIN_TOKEN`;“Fleet API 令牌”中输入 `API_AUTH_TOKEN`,用于调用受保护的采集与节点接口。
-
----
-
-### 登录采集账号
-
-opencli 渠道依赖浏览器登录态,首次使用需手动登录各平台账号,之后持久保存。
-
-| 启动方式 | 操作 |
-|----------|------|
-| 原生 Shell | 脚本启动后在 Chrome 窗口中登录。登录态保存在 `~/.opencli-admin/chrome-profile/` |
-| Docker 单实例 | 打开 http://localhost:6080,在内置 Chromium 中扫码或登录 |
-| 远程服务器 | 先执行 `ssh -L 6080:127.0.0.1:6080 user@server`,再访问本机 `http://localhost:6080` |
-
-> 需要登录:小红书、Bilibili、知乎、微博、Twitter/X、LinkedIn、YouTube。Hacker News、BBC、RSS 等公开内容无需登录。
-
-## 边缘节点
-
-将任意远端机器注册为采集节点,形成分布式集群。
+~~~
-### 注册模式
-
-| 模式 | 原理 | 适用场景 |
-|------|------|----------|
-| **WS 反向通道** | Agent 主动连接中心,中心通过长连接推送任务 | NAT / 跨网,Agent 无需开放入站端口 |
-| **HTTP 直连** | Agent 启动后注册到中心,中心直接请求 Agent | 局域网,中心可直达 Agent |
-
-### 安装
+## 发布镜像
-进入管理界面 → **节点管理** → **新增节点**,选择安装方式,复制命令在目标机器执行:
+v0.4.0 同时发布 linux/amd64 和 linux/arm64:
-**Docker 安装**
+- ghcr.io/2233admin/opencli-admin-api:0.4.0
+- ghcr.io/2233admin/opencli-admin-frontend:0.4.0
+- ghcr.io/2233admin/opencli-admin-chrome:0.4.0
+- ghcr.io/2233admin/opencli-admin-agent:0.4.0
+- ghcr.io/2233admin/opencli-admin-agent:0.4.0-chrome
-```bash
-# WS 模式(NAT / 跨网)
-docker run -d --name opencli-agent --restart unless-stopped \
- --add-host=host.docker.internal:host-gateway \
- -e CENTRAL_API_URL=http://I9 zDj`msJywp$g@|DBnlB;T*REd)CW1q7-&mV!Ks!1`q7QP-;vb0rvedfb%ka~a%C3X8 zvrkuDROHGd4;IfHPsW=^yLu@W_m8o+jnJ4K%yk}z$E_a(!-_tS| zb4Z0|9klJ7e%h*^J2^P2>r@+DKfSGYW#cP1xnG)%l1lA|FLVU_E0^&DG6V~^n^Dth zPPIrj9;X4{I3a9B-^`+0_pSU)z%vRx8*RUD&WU69)Fkcst+K+MFC6=qWc#LCyM|*8 z>e5j?SRA$Rj gi{ zlw^MKVg#S*ZG{WcIg$6_V0gB23NC~t($oZXY~7?Ct@x;Hd2U5O6FVZJwCixA6mbtF zbrGV%B_NicRN*?e?Gq6^uv=Y_FgVIRW$7sXt`{hc&6_VOF#ffVX*IOI?HmZ*p@ETT zEr?rfdQxTyA3v{<)!4d@Us<7E*n05c6H~24AdY~@c(BeW)42D^mm{!6MDlO5)qd|C zw-{jZ3hFeY*FgYby_7f5(Qog8%iWB4G3*E#cI3gPLbQL)GW*;%cO^5>pibQ6O(T&^ zY6H zOa?zQCyUj~#umfVuIspl7`5kRy^^WTRU7@*mjHe$vdH2mJ<>be7~mh-KL0qaub*RT z$UOl@O9oT=D9s+= zU#nz+*}CL-X&xNF{wO4Z`UwIW=81^|2Gj=cAL2HD&0koi?j3KBY@2)e^o~rLnrieh za{M@Tba;04ldc>mU)0t{6}yDd>)0^eD^$@AB4UCZ`7NCsEnUN-qZ^NGj&tjJuA#9| zpTZShy}8`((OGKAQ?V*n#1_^bTrW6tQ`PaAg0rR!aZs{(x*^Z8XUc0-tgnxZYIHTc z{C(cX=x4@nhqo4TIcF92RHH?2oko;R{ =}@H>9`ez!guAI2 zqrN>BlX3a1ni~(#ZVQ~A<(=6qNC~1Nx|)k?2PKS-1&)sBio{c0W1v8~JGUZsOCP7v z(z@~NcGnL-Q_wO(?YXjt`;(NUv_7|a^C_Z~Walc-@<<9vLj-0y2P2*~`gHQ045NDq zX39?hWy{E2$If+!&Fi}8+rs=16@1OYW4cPwJ3>LH+URM2iPIce%saB==j?d67dsSY zckn(xW@SpPOou9HEe=#DczxXVXTNI}-;pC)InuMqqvQL?86SS@gM4Q4jKv~V1UO_* zX-vfU>$Wd{P!%l1qoROa@?q<79Bw9s`*`b-M9L=esw%t5+i0`5d${hXtHX?Kl-;b( z>b`8TI)j)oQ^=mF$aPiz_&u}9=I4lnYzyO&iQ)c<;Raq9HPxiW#_IAK Mhtv#~o)1-)<&FB~vaSo=9F0tQ><15Mi zn$^H` M*x`$~ohVJd8j(gZJu&w!|qHi+IORLHF3pU5Q&4+n! zD84dvCQZ2Eg^%mYAJIRx>^wecLYt T$;V^#{7d|F|d zjkuxDMzn6lePp+j@e={$_Rs`0RW ;-W}XQS&fY%c!Aq36 BHVy+#5 zt;OlcgHnH^7vo7M$b9R-&GrO1;U+^noBP@Q)H#~Cs~}<(q$y4I@Qa}sz)H;odV{#_ zNdWKbvv$Q{Ub?xCaK+)oDV1iQm6_xhHgW_XkoK4QJEU)6p#sv*N<{X#W8=>%D|aaA z5bh)N`-|Zx`Ki$TTKO$1W(BqM{9Tdlw%D_Hk^0<|{UQb?Y0d~^PT(fIK2m1i@8!>` zNJDq~l`Zgzl^VCOUc0`szPz@+Z1A4x@bi(H!0w%UR)PdfNz+fY+=iv_$^E6nC}Gi2 zn*HMH=O>JYXsIrn 4^$t72CjAS-8(wt zVqPE3L`a$IoN%$#Eu}wIhKj*InH!N3ku+z#!X1~p&6$~#XO{IfkGo1&1Zik7-nrPA z8jLo6rXT`@!y>%wpIen-aZN{VC-d9P(TWs4i{7UOW(qOa24!7%SIZsa*CrOPO@;*d z*H+dk6kZW4<*G)<8PwTr5$zIxfbn3fpVh(6>TVFjFDtNj$NT`8s%hcA@Ky4^L8{^b z7HV*4(iKe{?~XWKuhn(NOy(nw@`r2|y4^%hSDK}%I1yD%W{F6xq6yc}(Nl~4Q+|69 z$yD4YF(ifhmCptT1$o2L`_X47O)kRDPHMI~jxuVFGJ`#vmH<0Yz$ha>_h)!*=^1;- zP%uljbl6kzNtlkO>*fhLuJ-i12V!L>6+{PqMV}oR98l8 `ibbQzvw7QgWJH7 `__g7sA)%1qX3teM!9bMe?DBsJtzCeIc0XU__c20*r1$VET zPqg(3^5>emSTZ%%!J|I>c$H!uVL&O+tP<@j%epYm(OIR@#tXBz#oW` 0=_k*q z(kOb!^kSiA3^HOfX(-iff!`>1yhIZ_JY2O;67c=O -~=N-#Moeh z;y&G82^3^>Bs@8Bxs{U?qxFJ->2B_tq6cea`y$t|B2c5KX~*=GXJ$G$OmjWG&vrFy z*TmnzY^H&B1yaIHOi(>08QbfWVo@Ea+6~O!9v^uh%O%K0hwfvF?5Q3(##%CP2*24h zY@-KxoN$lDiTx-D(CT>yP!+3pqwKuoBx{>BfxSu4gOEv*tthi$(27IqRo*eA{Pn zn z%1d~6E0P}Xq7;ZwqU>8)hztPO?6(F5`IY3`0pMT_Z3D&+kR4aTJ8-bzaDw2sGQ@bD z26k!kgNRjAa!rA^`7`z~LLV ~8(!X(i)F^Oha*)X z1>VH5?rB!t@Fx&$Rb}qSU!SvUfTwePWLE%DRnw6j3RF=9ZceDVMzJW@D|Nuxo0b2X z-hwNmK;6i8J42=SJM4!O2 D%d&*f~%irW+wKtCYb}@EyCP`gg z-mLr7ce!%DE$hX|Ga_u{&Sf}52!wfUX?+m#fb)tydM_JOM~kjtF8I86(AV>03_#tR zs>2Y8&rrsXOrdQ9kwhc}%fiLZpJ8&h!&^s%D`jTz5QrC}RRhj$0wu)(tnNpeop Hav09=my3B!Ro}ys`>i%hMRpJ;g zQKByJ8wxechfU1q^%1(DlBOE2@f@)|;=KDbII{Nn;SC1bYh-VJ9CPekjS&Ny ~tN268ut&Y?&vzuW4@O1<9*J9R_2o}S*Y1Y8 zA*)HnCr^)<(0*kJKG7STZUgk5Cf8xVpej}!9|?S6{b(;&9dkChr)D8Kctc8G^v1t4 zdWypBhT%JGC3d-vvnF^nrh;#R6y$_lPp|OO|4FhvuuPLDTo-i$63>cU=TR-1|H|Ay zU?cmyi!|=K5i$|}8P|iFzwW|6DLmjZ{`R6+;4}Yo0dN(+g>ZrM|9Rn@LizOq%*4O% z_-_~f=iC21)PKA1KhwfSP7=t>P{RdC2xYEh63Mdup4df*2bMz3al4WTI{4MXn0^Fs zBC7);Z|Af6XU%x-%y)& W`HToYJs^nv$y>bb3O{N9nFvC-Bp3IX!guRHI$G>nV24e*|6o zBYbdE!c!01iSM7x9epRrtreV|j$&A3*~6+F_WP=UqTjjdx7eZkXagz0&!@7nx?*LA zq4Cqy1ZaDJ(#h$lnE-x4ibc4}N!@h^2VuH6)!W~^vBtQ+Jahtv{`De*)hk?u8N6EL z)9Pxw`yo&{wM^p0X%IlD*RQy3w!Q}bK7fP7mbh~_NoXfBXe{{1*4 !&Q=NV12;Z(Z^na`jx& z!COSR)PI3lLU2HVn zkgeRe*Jnw2P+mKF0;M}Q^JT=`va&Lb-24lcDKkf0)^;!Z6%b^)y_*J#<0n7%+oOQ> zZ|B8}=p7DNDJtc|1`O@ccxhxb$9VmLFyf@1Eqib%$yk@YDej>C(YTqR_W@&`i}l_N zskr9J^5P_~7KQ)!4$c?A0JSxBWFvhiJ|tCPzy*f028gStngII2i{D>#fz!i;0rnI? z+3-PI7WZA-$uGWpD=*NUq>6fjKgJ#jo-V95>Wm|RAy~?NEt`ZLM8=MYR0<@}U8Ryw zjCv~~3jnIWI`(o|kE=__(5BwKc($?WQVCu==l60ABChGo q`rAy{J=N2O2DqL zpd!dGEov>>dTVp=$8-7N6WNn|d<3~C&Tln6cO{NEoM;BMf$ I0r>9Bvm79`v5|>8;jI>vt$k5#ZNuZToS|73Y&`sW1N0Lmm?+>` z$cWYkM3QS TQUrn)d?_T{ zT0#rdS3@ej`wH81?HQ4M$bw?KR0TZ>)yX)-et}gr&cA2aFI49rq(XwfaOvXCO;t@5 zMu}VN3;QU0o4xO>6SNiDx392`RgVu3@`W ExmKL688$S;7&{->Zog6^Ml@!RQ|Kt;g%c%Rymp5k=WM zCERb$5@~kG|3(gVvv`oRn4PsztqrEv?=lw6#&g^|52*euq^O|>dW5=E4l-rpyhf zCkAakz(&?Cp6++8bA9L79B96>zD}D#K^1fR_q+pXV2FYyoZ-u&bQU>V|Db@7>o5em z!R#W(=9^>8(anFxYr#gY(i7vWPYp+*O>Uq-NZ8YC1vWVbr6_oJMrPtT0D}%ziwCOA|3axgiQ%|(BZLa z;|_*J)CqtLKu?>{IKE4|Cw^Le{H+kwDO97!X0kZA4;Na(&El(>^}>J?%Qm{v?qO!Q z+ySG3gUk~cH-uTKyE5`qM0`{n1AQbdRp=BQnN=fld?}6<@PoWC-Rjkwp>0uSh6`5< ziGHlbi+M^()=tTRtQ5S#EgC_5+YXF-uVrr?rplW -78Qea zaCUK($9yH_qVn1asks` z=jCbbh2p|i}S5_FW4-WLXvGHv{ zUsib1MH {j3ITz ou#@$qC|ay0vxO zxBCuhea$yNg|~MO5M?TMm0IFo4iUItq%SHL-?4hxpZ)OglFgZk5r2$3c+6CzaXw)q znlQ`J{ZA*ltwWPIIoW#&fXUh2!3*lr^pRzqA^WYv-F$T~?DG=IRC{w;GCx1{BGX^* zVezKDkmOJH_Kq YOmX=Ndw44-;6iX$gY%$%&&^$0p@>@57fyLV10T44xg4;O zy T2cm1r%NX)rWIrSSGq z_bz*eDpfS=OT(g=4=H(`ULOyY8;?)K9#dNRQTCZ}iA^}y$~+y-d!k#Bt08n#^=a`C zrFCT34O)S^n3N%k&^t6&GRa_wn^O3usMrwNXd2x@BO17hF1$tq(nak5iUuD0Vq}9d zB2l2=sctllq_M%`^fYDP$b_2OXbUeaQUeJJJy|O6q3Tb8RbqCxSXC=}h1$L5sthou zfVOff5gJ+3aWSc$ZzQg@6~rLN$2dyYZTfCMcKvoI2_jj n;L{e&DKxu#* zYNtm7-_RJ^(KBa|Fqrr;rv6lo`da{))w0(!P}nI!WFv}XZ+`+gFj!GgMxYEIJHN=k z0#@X1E @fw7a43(&+ zYBX@+fF8EGiu*Ivdo0qx#QbD@oqQVE4F_JnjITDGdRUiQlp&jbBgy^@*}P)-?l~fx zn#rrebmr{K=nz53!)^HGDvn1H{C9D3K*7XSs{eEG8(}}^N6HV4rN2F8;R9y|M1%yN z@tJV5qp>*lA89)w#b_N4aHStO?gMoKidKV74vt-BpQ}NMUV45tNp}#>bv5i050S>t zzw^St5^QZ=21nBLRm9pfWwI4Qvi{=}o(C>0!t#?n0}>Bj8$)b%)FXO@6wujZxZcgc z&-I8u0i*%{qVVfic3lH|F-4?^_Kq&7Dm2%^nAU~G{4bv85baR={N4RKJE3O^Hu*~) z^`DDZcXOO=Di1@k)g2A!`|Sg1B$w#O>b=at^l;uYRc=Fe+%xS5euGs9e{8Dwbbt8( z_83YpGGWA_=0;M7f2|X&qS23vA U?7Ajw zHsgV}R7g#u6ySeZ@p{AY_;bY;>k+U@01bemG$(>aitC`4B0>&uwPAlbI(SEE+og`D z4^W@CdmR0Ra|@U+XgXNlTQ>7QGaBn3;x3Plk#8sg!us~94KxlswaVPRv!ZdW+K~hG zHB?i#_Aj0XW8I8_fl4N?O*Yoo>@8;>r}7Fbh@}*!Pk#z0> g`k7(zGr%=`uGv3uEFG% zmgyE&Xg)}RZm9E@XaJUJ#Y0`2QZM<;LJorjzhogNF;nFbUOc4chF{k^TUHx~S#P)K z<9x?Sln7;m-XIXOB*C4mNIp|H+rs>>P-Qe}W>n4dAf3yGjt)Lvd2cB1E8-Ufko7Sp zJrAui;4OR5TL;fddiL(83kGEq#l;&7KF@C%arw(WyPK)VkZ9wZ2Sd%th_HsM4_pl& z ZjbLoH@FR<|V2l`gX?> zjso!B*{kVF06L^RSN&aGX=mAzwfGOtn9Rs9iaFC zd&=LT;U6+JSu1xK_OrX5!g5)lPfGZ*DrYF~+2FgRUar5f`qc16h<^0vY_hhi?qUXm zt>S6^a`Rqf+Y)wXE#dh-gal0Dt>+@A?DTKqYP^m}*d!uwhsYRJ18+M^%h8ti+4XI4 z OM^C_aQm6aG zBm^>gcj9rfGeT4{&Rrw`j$gtu`yJZ`1t&(3nHI(|;Tph87%fsR)5TDQADgM}0V|db z>bM>B(xzkkYx#3S*8=ILfSTd)(a8~{ypdK&a4kqNpF=feac%*CwJ~FA)72ME@iAP3 zpP%!!@oNJb_$AK I zp$1W
gx;;&ftR^Sxiq U_s!c+gg< zdMWk+8O~36*7Xy^yPVEVKBoT!FoE$qG|XOKpL>yAiDY|;-1 4r(g#a*yuDL@?mA$ZpeqMTeJIes1 j0OTQV)x^xt{4P(^t#%Kfe^C3@ zdLaU`S5VkJr@S0(b^3vEfbO;t%~jCaAzWV#mRe%QJ8xN5UTZ`mUy1GZ=6R2phTQYBNkV+T8a-5AjTbIt z*WVZP+W~B8qn;CY{0U@q +@36W{AHCu{$uC7# z5v!v`v3rGGgXJElY`6uyCsQ5G>lyB!4dZ0?+9l0&s}SXp&0icB6AK_gcl4s}WQExi z-%crH1sQ}pL;&P*5^6cBp `1=`?7+@f1Mj(|zj#Pr~1OyUC{t^)W53kXV&k+8)WJL7# zdU%YcuxwL0sD#(SuaV}H#oPt}40PB%c>SuW+TSN#9pu=%veM0IkDAi}H38}&X!6iq zF5>0FZU0nWA*JE2=#i#dW9dUu&lyJ@Km-Or 1d#%V2W3i3cLVlDbmdSIw!t%H|-&FIEZGX zS)C)N7}+yB%-;BQ!;UG4|KoL##24GzWOKjrA fxom^pv)!^{S4RF zOVRynsE^Eye^%voTV;C0UT9TD&G0%@yhvH IGq3fW~0jrMK32l{z&d_ts{wJFK zJ;>hNEs0;|jm2|-jkGGO553p(*0Y8Z*Oeub(VosF^+|)cYWeWz+HNRMq5gpLkrR=S zC#`egc1TSqouh?rHx=J0fL$P&+E{bOH>|Xea+AXUO;}H{62m7Xepq)IwTP?A0bjaa zMBU>{@&G?i20z-j%YhW(P9{(M4@YH02gCmJ7pS=b{`QvvV3EOscu+%+Q`tA)bR3ra zL!OGh^$@Ur#{Ztu;l81{|D(T&U#xTPY|s1d`FZHkw|{YTZ#~d$IfEOkuVqUwsEmq; z#6qLdl>esC6hN)NWS*Klzpnqj{&I!YgqLyh?@91LJ<`%nCPuY*Kf>$!clII_@2+9~ z6l&`9@gTx4@)2i%0|bR6>46JjqHirV7EN_WOb~mg`x}4pKm9$B1H>aO7nC1%HYy~l z3z}wgH^Pk0UIfftO8EYVpp0|xK6%N!A@=8{s3#tmHmkq*{f5V&S^FQV5Wt8(^Z5T= z_-}R0e-HIPcl?JsW_1rXGO&!QGokEFZ?h?tYqjBCwE^G63(!vWXV^Mx643V9bbPm# zLDaT>q?hGG!@P;*F21mBy;FNW-g)E7_j~`WeS$6M%+8fr&=?1#TX)O|gRpt^8ir-k ze4^sbpnbc#D`ssW9#Hmgm&&&^pJ^F&!*;UQ`A(}WXS7Zi11ms@a>I4A@kl`(bcR-g zGCVjD5SbTW1Z!*wm(V`!%yCp8$K0rk`7p-bO2b{>O?4a+vfI^*a&!_G?>j2Gbe2 }%f-iDZq;anSauJ$e@ z1JrZ7pvCi+j!2RTB9cfWn^S+#HVI}g^7cY4q)J9XtGQz&T(h%Y%%cK<*))0esQ*D7 z?bWtUPdwYbUD3g@*EfMJQq_Al%=oQmJmGZY(jAwXk;NZ@hjH&HIM6`HSrEVH+KZEe zI5c{oJz;nMN%T_hT6?tbgOdA0Bwi9 z?fruMntStS5v~WdGKo1fG%(F!XCX)2v&|iGpKOh#Mh-3@ JP-+QGH}z0c o>NUWQ2}WVnsV~Qt0KaT;6Si_-1qNUTj*5Sjkito z*NeesL#nPRC)9(`1i_^a?9#1xwN|RX;pf>LsDqGPw&vEXs&MeR!4uPj9U-$hWv!Th zJ7B7Q%U*T&f{mP`aWe%_hi~mWD?Ow?Js0f7CD6nx T>ltKkaZ(sWBOMCWnoTyVS14c|AI3Wri}6aDfDMisA5WkKICk>sGh0!w|UJ zE?f}i`M8%oW9f(&LL=gc8xkisfgIKV4Fb?4|vOpw 3DggkInTsv4r6W4}X^LKBuE+Y=L1do8Z=`}FpNZs8#+X!QCR&ZBso z_HRumL`N&tq&53 dDtSgHpluoR&vT<9pZPAsnb;ad!jB#Pr$YHF{760Z7OaZ=V7FNGZaVoXi$LK-3bR9$xi}z ztNwBJ{vxDSdm*GGtbx1F`v*L%8^ek(^C^=7rsS#HBc+S~Q)r6OSg1{c`@Zd3d-GBY z;%9Hrh9r^AyyZOgou@_%z?O3o!J3+Koq~6u>>Mp* PY1FR5CvDTq+eyVrJrc(nN zi#dp4jB?D;Mo6w{mpel;g5&vTEggaPm}n3#@wHtEA6n=|Q*-NrHd6h?Z{z#3c|g4l zk$H)^6UW0Vom%$SA9)A_;pC8#Vrp)H2AWxf{@NU&fW3g-_Cbx;%Oqovru0uy@Amv{ zS-0v&DtF*`k %ZCp}k$RK>C=KwNWnokBUW zajd5g>9`XgvSb$X8gw%qmo|IkS@yP_JF0QE;~fDBmlAW7fBt>z@@j6Rx#j^n#G<+= zYIr+TLJ zkW^iu`UU+?t;pi#KqUL!m#xFQw#-lvw|>6nmK z8Cm93|D|VQFe5W<*2Kjm@%vKJ*W$v$tkX-At!&>JuLUYpj`t4lXhYw_EX&i(K9@ao zcD7gHcF(G ^9ZG!Git39I9x0}2btFJ6q`XY2m-8Pp;WaDuHpw^Z^bAeA;U!Z@K zQJySC4jf)B)V(L=b(1^wDGKcfG_-8dt!;X{bWQl%Mb%wqPl-1oe`zEL84>ulk5=0< z`nEeCAynK4MNUB=6T#5LXjbJNt(W1*b~EuvdI0!t)SHxmgt9ULv<|8-E2Jle0+v7I z|H23K3Zu={W8)?^FEYtjmnHEv?eor}FG1cvWIEa|A+B_)6d@HXDbAMo{8j|@A(SA^ zet&?wD&(I1c=d(Ehr3UPdcFzQ?-7*O3)h2&VbNDGmtmxme*9uhSl$qh;L=Ja==goE zTi?JIHJmoN7yrYt?qh{BpMaFUDY23noeeq*6_a4~9qcbEeLK~2GFfbE0eSV!b1AE6 zv2JU}rou1nWa{ISS-*^7^^W%8N>s}Pi&0dS01LEn$H_LZr^QQ23j?;vR5~9B9W<&5 z1c3u^YG7P;cGKnYYG+nZ9Rs~5i50~=9!%qMFCHZjHZ%Szx7I08!^DE*$Cj`C1^gY@ z=+o4?n8>&A+5`o*4-wMB;tjPz;=a3%uBQNJ4v>OlXJevcOWQ;k0i5Kz*kTL8Smi7{ z!05wXhd1z!95o}La|J}QX-h{7#L+$8lt|IK!$U>){J&Vk!V>T9-xYhD=6~Jp(DZ^s z=;yE0ofWS~u9mD_mTX~@bxu_B80==`zh8FZHhP-e_ZUgAht!c>p?wi0yK}iMZmi;J z5KmOqQ>)hQ8&2i1;k6GnLTuk79%^uN^1fSd=)&>wB?=^^xt1tc xt88aPTYISni |#M5 z*wzh4aCH#i7F*)G3mQ82msWb+R2Mtn)J&F2Y(V7|zvTk0z<$|FtFpUEoRmKw6MzAq z$7$~7%MV^i;{KM6T3^;sxmG(_dUj-Xv}{%>xfuirx~i)4vemVc+ 33>`IG0zr#SxjHA==6vlgoExx z*TSVnJTxTZO}r~917CWG+u07(fB7ByFo$#;xa#!>t8+Bf)`?80@`8B6^T0OrPNE}6 zr=-|6Px$c7(Fs0Socnc$o0c1$7cw8qT$CIXG&))~t_Sr=rqoiMEx?!odd#95?7PcW zKkdbI4!ijU=7 h;|B|htsn*SS4SarajZr!B%<8moV)~iBSyD}bt!G|>6V~BObtNdMoiAKcZ?w=Q zqL@xGe7J*^ldlRfzRx4Q3poqOU|>pbJ(-sdokQZ5*XJ#I1_S(6e)qv_UbzJMjU><$ zeOnr_MKB={nyO5WE($70-PSUiygN$T _Yy#szf3Q>yh2&|s?o_ladXJfbrVF`M3>U~{ZEKk`>1*o z>+^m=Ejx>Gt83A{3Un|^Wb6E8Ue2e)MA`cd?2;dzNP_=m#(~WFWx)zyE~?((;xhqy zbHSXI=~V!YZW^ qeC;b4#1UcQzck4I$k z)ry7PZ{$lhX4b+ts!A~VQ^LbtOF<6zek4K+aSUW*-ZN;8Ch9r!G&ATnG2M7=y0L eexN?$Ty)q <0q(y+WwhY>6D@^_lU%8>kpgF@WfA7M*%1^;?yi~>ul03MbQ^oZ&kfo zyFXh?$X2eo7EMU)TK!0W8bFTh$&;!6l5PAI}(d|Vr6GliVN0yRXDTpSpb9Mw=y V*657_g^ZlEmc6MO%A@bOn;@5)wDAIo+4S&s=j3wzom^veW`WSm8Kwe^cgF z)+sM^?cNI2pV>Ww^`E@lbJ+;xv++yIjdl7i<-FS?{umUWjTm9{ygcdFFxK=jgVVEs zcJ^rV$6y632Mw*yi8*fRlfiomOVTfZy90b-WAS_cwh=A+La z7NcLEmf-DQhMcO*Y(#eJAKl{>4SQ?J!#`1 r<&QQoW-=M^P7zZ0V3wds-D0FtQ2c;| z*mE@w0s7OxA&@@f1{FED(UzG5d 4uQ`8}q7%8u`gt z>oU%^{B@5NmGW~;U=PX $v*xa#KRO*N=y5wO+| zQL$UC_8>^sretfd%m`T+7J(t=?T{emel33MnKz-?pA8J3V4-pR!(-JDXBQlc9-1$r zE>aBIt{c0J2-&W{!`+r2b3h0Jwn`DD<~IA&gy@we4%$IoY~#K)a2|jeTG*N>OztSO z*Kbe2a6Y3ujh^y%cUkoS=%W2h0-pfM86apu1H(PbsELHKTClSc_(> dqxXa zH GM?150Z5=jl!^oftlDdG+6|iB=uJ)1ZONUo80E_mHf<6eb!wjI- z!@{~5@yi3UkF(mj*(WPe_{8wib>U=j66)VAcA)^D4|Wb<&ja&MPuW|CRZU@mwmG zbUfq B)S!KnKP} zYZ0~EX2Zhf?DQC$O7LSD5ChXeR}XyYL#SVsJ^ay^O&7484q~(AKMNkKUw&TJ-(TUt zZPX3XkP)Sria=-qxNv@@*Kwskj_;j tN_EPheuwm4?Xf^8NQ&4sw+y+7cF<|;qfGH800m4wj6kEEk)Lm0% zJ47xlsIEAZ3*rvg&%`>f27otcMHv810J2f1jH^uxd+8A*ClWt^e xGl$)TS=z_Qvg7K|>YS4U=aFU&Z zjr1#80Fjl*=^>V(&CU4QoT|tTI)~ZF@n+z0PQfzqcWiGGn7>~BQEa=>8 &U+OzHq9>#1@_G?llpfFfL 8hg@fry+<%hLJ~6r>55=e zdXsKgypR8`;2;kjmxlhLK>(HC6FpXT^yP^;x#-uTMNL@^upzO-6A#auqH83fpXlK? z*=Q7=$N_JySLE~{!9Db^{UX557q7scR;Ya{ns^VK9V6qiYgWZzv#gVQ=~Uv@l{s~> zZNZnI3VTJ~>zk2P!TqEsii?>|$}_A}gJOGxzlsn4TRr%nvciA(5s`DI`%hH>EE$mO z@7I65@T{#bdPju|as~cMv$2hvL*0!A{wlinJ*$FIm+YT91=xxs)Sr-~U$Yc8F_?W| ziZou*L5#ReH=q4e%ixyx5HPCu2Na=kNP-Mw{(*6$Q>uc>XyI8`_t|PdXm5Ds?tEgt zgXurN#^O+LA?FwId8W5U1&}!S!>w2kQArx eeo zZEj cL6aUW<}aN(ZH{{<-ZMQt3OWF3JBvFrNK>j^=v6c1U+vUqP{`-s-jPZC zQy}tKybjAf-7^At$ i|jTNPK=xc?nLB3x~I3fpjIy *_h^qnyc38s>c@E%LN5MR=*A}lTGyQKZf^c7ul>n*ZDzchF2{vL zF#r9NKIcye;CRl_WPVsI6ai4V2sIbri~!N+iwm))%89BnP6H(N`w;beEO3%Uj~JW zNHekE)0dS7NA>Qt_ZYYO!%SbG2O-#0Gz?V3qaoT8#VZ_tde?b~!M^vQV;<)TUbgP3 z4Yxk)Euy5T3AK(-=UW!4UB+2W&v`Gftc%gs5uDJ $Sr%(AZi7GF#Ar{GfKaS( z^tCD%UC3i$+k__(yw7O8vbF4guS!=)B;@eP_Y4l`4=hv2O>!a<@beSnh~vGkiPB&O zEQco0lu_k;;ClS9ergjg_kNGWV=ws6Kc@pYIcrrRpyH5^v~X?0MpB!Wt&SPV^>V%F z(6LXnq+?^es1nxb(#w`&SIaCp4Ur=3q;}oDaNckqD8ch%RIsO+8th?dypk!Ibo2Jr zmFP&xq^k<4APRx4`DGR!5 U7N=-24IC7l!Juu$zKS{?b7-3eu% z(=|W^OfnL@-A$oH4Z4=E#-0<%{1-USSz`KwhR+T2%bdr7n#Pt*GpjOMU`F#P(K{lw zFT@^WI7o~JcC%2~gN$8qXUUf!%mu008Sa1acgMkfz?z`j=ba$iyC{lBKrfrVPb zh$B|!)>;VWEFDMf=>HF0Zvj?y_ic@$7=#KEqM#s12`DNcNb07$yFpqy-INN*3y6qx zOLuo{zyPE>q&qg<4R>ze|2_9R=Y02h_M-^+i?!yOYpyxR7*judgzNa3qRP_&&$^kX z7jw!djve|rL3F44^lSlj_whQMS{KLE*ZC^ers^gl>o%LTp&A5vdKI_QsJBN@I^?dn zy28D2^+US&FP(!;wYXdnZq%fBQ;5tFj}9YIx$_>t-R`Q(WsnsEJ4917NRC#-RWz|{ z{J)+KZDh3`BH(QU%N^WLUvGBv>igZ@MoUQa!Do$s3etsR46);5B}V12c#>oXx_qz6 zXdBSvLahY+jzjx?M2-lW-S3P|aG_(Xli{mQD(m@47{i%uNW2cPv?t$vK%fr#$NxMa zk^CRif_yP@TwIMel`;ech*4o?s;c4txJ|U=Esq-H+@OF*iCY|`9l?!`Em%JScaJ>T z$#ULBlUhIOLPDLTP-uAUXVZkaT*gCrBEORA2-a}1|9ZE7Cm;D|__z Ql~t=dgZAMrB5`Xf$Z8Y!8QKIyI)M#8A*nD@W66J6Xg`k zQ4i`rG?zQfyCq+iyco`st#)Vx+Z1*<3s0q9a}PsI>FLAEYJvz`*>$YX_Zj>8vf_2l zHj)YAMgI=A{J+ iCY1ND`JPDIVPoDtJ^TAH<*WKg`I` z<@NucXUI*y+H`}&oJmDfv@ u@?M+ zc?!(zlVA$*K3MoZKdw^#pU)@92wn-NK#q|_#^yi6^>^qYlpxeglw*vYOp=2Y{a@=D z-UO#$ Jpg`<^})#DO?$X5xoEXDEI3T?|cyOl>d(1|2r)ZwOmqT?32_qdL+?$ zd+C*RGm^O*ueYguT*9GC(~eF=WgzJnyw v z$gT?J?yRPy*9KxUQD=&of2Lyvi=R31mNmTa^ XKM#Yir0~L4BHZ0$)6XtDn7@wEPA0rLtn=SzC*ST< zk?^nBn#`3A)eI!5QP!GeP;CK=&mha7mH0E)_|5s56Ti3>M-R^(o<|g3MogDsn0IO7 zx+I0y)=o+-5@^fG8-`112nc8*1dji|$?M69mYM66nQjiu>sz%U9duwy*!(+19Oj!8 zp@pKfAr#t~0i2;56flh$WJydPV^k*CqDL1c#>#z6m_Nq+{dOWrY3YXv&xF}Ui9o#x zeqqZ;5S~7~rI!i%FaDr~ROakJj0lw=rB10VP0sh!n{5G*5%!1g;sU%J?4>tuTxWAW zKDsK=n$0mF&!o&m`Y<~~o-x#cAyq-$$dL~fh{%kvFIrhjRSku|=6Js=XDXrGPok?t z0_W!TEq)O_q)y38tgI|G>|1D=wevyv?K7C$W&f5v+v#D>`Yp?U9RLkTD|^Y~5bN}+ zGI^Tdo)Lq>l%gt+*f3vTVV8g;`a%{8uLK>Wu=?{WvR->SgI&DnsFTQMJ)_mh$&CyG zV3)|a@hEd#N4dMz$jgT)&=3TrN9f4Ic!B{dveXxqIClPijB_Js=86bO*f?jo6ScQi znQef-^qtD0xMF7qHzw*|r$|DOM_KY`^8zg67CwV_iL( p2~SAH5%aP}vNhmP#t?`{3;$)lZT#^wH9gC-alHeP~1>2KX24J++04P?Q7evu_q zB#fPz-?e3_A5XE{BrS SA?`uNI*2%uOalut Iijwtg{vrIT zDu@1os|V6Se8AdLFV3uN2N)qXAb}k^h}LaFk-JJvULHgOt60p744cGGKagv>rpYsk zW;2$i=Jy S|XD7vq*_` AFkHtcOjpGv0E zSXBt{DSG2_GA)Rvlx_>-P|r%VDXx16Yx@QBwGz~bo2_q(o6THOD{<_FR16T4%#9ZG zXKcoNh$rXBC~w-c@v+q<6+M5%=lt?XibtbV-R&TBN@2h5BX`q-9#RuP5xUh*dMJ+t zX3#eJNbZ4o70-8lDJZBwc #zZT4C1*(Ge2LNx yhQ3)HekV2wjVkY1!%+)&K 4qfW!5B z4r-=d1z(KnYeRyYa^{zaLBq#als;U!FI2hD<>({0fE_1w;r6ZqIrkVMzrODFpiVN= zlbxQeEO-F4BvHuv6>p(zSPM-{%kPmdn3qas0XqMXEJd*p70^J$;4A o`{c;O*qJ3znagXC_t|_rhE=yp E&*57 z;ZrKrK`pn~(NjEs(BgUHC#0dQoo{W*6w-=Iy?Sq~?T@+3>m=|4!6td&6}`WF?x5uM zkb}zDDj&%4^wg5VkVdL=cXuiUVlC(RNxLaTa|7oColQ4dBPjZyhrm#jvu _nGCET!6mg<^_Q7*gOBfe-DUBB;y=CaqOGd2^9voN_bNVtx1eBlrP8 z#$f%k+2buqMcDa#5Yb4iaj8T+4aN#sDhvzJU6~{60Ok=}sdQyrSd`-A)ID&FKvC;G z=yS4}15_&j!qZH~>}}?z1O1~zH9}G6Fw0a6l<{_}ab)fxpr=($NpdIV?wuGZ*~q0; z$h m3s<1q!(yF-zqEBD$&m32%X@f-Zp;pJ4Wu4Geb z-uFi*Nv2+ HIu>eITiml^^kuV@}4Vb$#$tzn|G_h=ToK+|6dTc5q?) zdk`!J|FRxymOqcykXHw;%<;iQMNE_@C)-3z2W-=6sP4~hT)pD^(Hoo~cm+`Y z<8wzmgmKgqWrd-vNMWyeFCU~7M1shD$aP42XQ0n~eaDN7W}d!y7B(Xd nvU!{(A{P5*KZ(`>(;inAb zk-iz(%jk?&xiA2teC1GgqRLgvx9UI2EuMcQd lmsz0db2Bxuyl7gypeihH1x9DsPQx~-YJ9T<<^zrVucVA2~jM9i%a5KjL2ubtS zKf4h@AI3!PDk6}pkR>J<#8jwc`&^0p5jG3N7CS{VV&wLE-3HU?z#iC9QZwA4x~D33 zEZ<|DULtsF+bAqbC_gQ)5CG*cyTx|bZd~t8eh+-VUf+N`@vGFIt!Ir0<#7r`@D7DX z)p^Hfm-{#Um&o-Topv)!+P%NDppSqRVR;X=I97Z1K4XYvo=a?@-p+2n_X+y08gLoG zMqoG^7*e|h9OlSE&E0ZS?ez+;4dMAbqdv3(p-15u8wV|OC(0|g6600g84VD=#Hk#b zJpX!0?O7%7BR Yqqcg!h{g?tS-)zkw#4a!0qB>=QDpjKiPu18K$I!q_WoQ>%CEM z<+*h@85wby`Qpw}1bh7vU<+?hzK67fwcA@b_P6u6{mEMY@}pjfpddv-T~IMwhz6L* z$=hiJ*YSZ*YCYak@n*)Uy CxZTGkWnGhgv(erHHVy zD*Dn3YN1hC9O|&{Ewej%-9ZN!(^cp#0x<%Z{lm+`w{EFs mTbCU1)cxrc5bRm09z6rC;c>oD^^V4$h8(IF+1g+h7(B zixUT?_(m65qNQL>w{ Fjp&SpM^+H9(}&hs!`_C?rPz)V^`lnarc?r1jj4MHdjx<56{5 zfI(VI3e)vS=0V%*##K)0=64D*0UAO+yEHdMJfP1oc}hRHaknf)p=SvX0Bp0J;!j(c zvX<2909SCV?1 SbzQT5uKmPozLlwvH zD}kpTO*^gW+YgDC_1&5_`}Q%J*PQ0UfEB@0>J(=&BVyLxQnH}Z=sd3>dYu8z92)PF z`J |00& zkJfjUK0{U5XcY{+gYwLwizbegzwVn7oGBh}J|CaW0BCLMcRPew&HH(|?-esd2(inu z S@iT@&>jOH0Qd~R#|@|*bo=juBj^pI0MIdj(oSc$uLo8A$se#h)gO6pSx0r~ zUN^;mS}c0@1m)7u0Qma74ZF>2QPrkapqLnE^iz$>ffM^&h1%WdLTa3{Zi8AkY9i z?CFQ3{t(w;4c|W0IpVB2*V$`dcNRErJMZ8qOkCh0TLTcWBbXQzAsRLDgPBopF!BE) z$JOF(|D(eX5Zbogra9V7mg8NNrwbN?L{=QO 7Uf+^=bj-6TB2V3 zBYz
j1G368z#CqGuG4YBK<5YG)V<5G7t7ez2&Brwt<4D=-E z;aKpRisY7s!4zRcs1wj-_f7JpH2zcyw+Vk{KO1Ug2~rM-HGS9LH##sV@Xc0ZbaZ%X zc5Q#K*;lU%jzf2xrN)?9e)8Pq*u=_a5t702 );s#~YKCA$b3&!*HUzth36^J&Z#e&Rl|2Qye?JKq9RVSoy5)--~$3mJb0|WKR zv@?kRk>%iW=OW84dYKCL1?kSVg)1VrWB!PrdC yd_y1Cw8wDXg+o(%lfBT8NRT zw^QAir2!N=@2KyaCbSp)bBS9t7s=WI3&>?ZDc;~+slHcI(g#8sX(?JnVp0}*E)LtG z4{P}}s1C6A7|sd0?J^vpMr(eCyH_p+Kd%NV2D58tYZ+xk&KTgzDdOsi&VT=*D!X?8 z6}T~7g4)yZbTqRjkBh};eI-FxV+_n{cdZFn9*}Y_UU;Ml!04+%@g_r+HZQc|kDd>{ zIWbyITSYtFJMj8BhvHuroRwgmqFr;icK_5hXURyE`(=K0dXUE_v)6)v$*B!9bLe;m z+UrAYpWprl?GIwT%_M7xq^lem7C_e{Q^~3CcTQE>`zva>mT{muG1>J5qr$rgq~2Sq zAWN%zUJq*K7ruYn<&ZIZOS F(v@&Hy726CmfO0tgRb-zacFwjw zfy~U2uee*`4{n*X^#?C m?@&K_%w{Sw+UDnC@KzuY6Oq#!T!$PjPz$@3KsKT zhVi?GUSeXzk-1X2RI2l1N#ANE?=Mn3e@ZZ6?qyV$e`ATtY$3fZLFG+R%|a!n y7G9uzfk#0<4}K(E7#4!3ebsep3ce!U1w$z<8T=W*&hgSo_?SK z;;9rXPftL|SAqO^ph^#Nmhg(a6SlB19qJi4-MMVB8$Sr9vUYZO`GQaM36{kv@~zoJ zYN6;@-q){%aBkXi;S{i6J^E95@TdAP!B{ilX`$`>CEX$?*S<$o&)K^T<9a|HdW%9E z*c?y<&QHx{v+p2+swZGFjZ51#_o1W(rADY^<{gRbALqJ)r-EwZ;@I1OI;DwuD5=0f zw s`%$%xh9la`Xby=wj-O05q;`I6%Xo>W>D7`Ym>@?vv_*yLRpz32xP2H-9zNl zCh?n(9g#C|^Y{PyLCyOtm_Is7@#Ry#g2k{_tFh*%+$K>r+cE&;f#Ztzmx^B_4r^+V z{|OyY_x=J$G7zK O?n1usIq6~1a`M|xaP0nVi5JRq#dTh<37b(~U? z{gs%Ml`s ^pm#OR}m=VI}3p#xhe~Um!6dBOz{WWd@)8Z0lNwhCiTPgGmh{PeKoY{mQ-g z4i1-6(YU|a&r&`CIA4b#$MEZYZQB)jarEVf#KyZSW-@Ez;rX%S7gWsN_KO>41D%<} zxX$1r%W#6m&)+4$_0G$+PSSP$Nkg=V;NE`c#T-#KZF`Z0$7FqSgA1~AvaI#!uJI@Kfq2+YD$65=U(R+1huuo5M!vf4YN^wnsN1PHV34zZI$l5 z=j>5k|1{jZFp!7s$@TV1b~1&~yIrCyYV6+63T-Mvf*HcaLadG8a0v-yyJ||Ia~DJt z?%wugNKkWYeDPRublB@!0LiD+NG#^(n;7CW$VI@B(x8x*<56{OVS^8`P2cY}7%sxE zA-YoOCLPVJY1^g{2U}d@ha(vxPYx#jvX`Lu7f4k?ROWus1;z*bB4lG0FDouG00eF^ z$FJRS;>q1*d1Bmx4j&2CXulnIy0!Ax@n&|{;jbh9uVG~88gIETt9cW$T5+LzGOi%U z#ZAf-GL<0rldb#U6D}mb4E*}Ohs8vPOaDxR JX=e5$u2=gNPNw)5*%>Tm$cCYKGmhS1#DT#| zu7g1Os+x4QJZKd_PN-}7%QIV2NR%I2bpUJuN&;ZBpbCv9zVS^CSpJrb+@d&BB@LY| zLsPvTA%t7f- 8>5=;3QR%ssr31eRh z0M-YZi;6*{VWj-fVsL9PCwQz<@Rvbh{`!Q=+v}9vJ3W`xfPu8#dt<;^VCfV9Bg9Lo zyK?!RM_oWV8liFmCP=KlE(CH$5O86L1!s*01Aht!_0EHfVb2Aqu7DNK#!MMD@~SKV zK!CG}+=s&XQZ%ruYSD{7r?v)8*9ReYpsM4#UaC&@X=kY=5W=^P4|DnLM_3`>>)xnR z-+ghAhbq=Q{TZY~qnfIqJop?kgij>l{h;0x*$;;RGXeZctyes>y|Nq{%Kf`AUQLxw zLmLGdrMXaG$b}CoImYSeV7aSnJatnmRiVH8Px6^V?J$*_98N(aK|x~zmc=x)>=J89 zkP=wAA;;4|`?;Mqw_q{ehXP8ON}!vTW-?E3gC-BbC;v`(0j041o&z1K2Bc6hM2EDP z!YtTZ)ADTlSR320lD;QSWucM7+Ev-rs>!L@N?AuAZ|!0u9Hp@Xi_J($!WPIv2l_a& zWQ)8I(pK*rbE8CY4olnYR2n~zkq&qh7JqyPbN?_*Vwd^wGfO4ndn_tDi1F^-yJ@Pl zs=85m;&t?+wJ|>(ipjHSiOdd9$pb^)M^~l6A!s#j%yc~?ok%ZNo4NJ(eed7To|z&W zbc;o1S9p)gUKhQ$9MKu4_6{M!0AAXn%R|R2>{gEeUJZL+_w7^BpU+%5J#R!fe{|mk zej%L&Cs1ScXJpm^uR^A6e;9F|yj^WQ;^^JsE9|NSq%t=5ip6LL!s&y(0vT#;WadZ0 zBso^ucSiS^>Abc4qU7Fj1c&LyL)A7KePMu0=OgATfNr>|BcJm9`SaoU?FS}Oc_@Ik zbqu{=Hf*ZN;d>TF6R7(mr;=qo!`)tJ{-to)q=$oSnaq6N5~m*z9>*zmPJUhZSd}nN zu#w63V6LL4Sb@^fX6VN z0*V|PGY=A&tGsL$s_+?ZZ)t4y9p@-^(ym3j8cR#^+_+v~j4B5tNA7|7HemYe>R#`D zC0&j<0R||XQa5`*>wq4ZytUwZfl3NQw3uSDUK4d57uFLOjwCuvVHilDd2}r})Ytj4 zCbSx6(p7oJeo3Q%kRg5dA`6K*G%w+F@@qJekAFNLLQ##WR4ek-N5>rAuWz}VQDFU9 zE!x%lEu;H4sjRQ4h*VA(o0U&-4T6pmNiD=m-B=b@^H!MKgyI)`JUj3rOhT_wayv@! z k=X2I+a`1-sZ&|V2P{`xf(Q$6N?5u&SEeC23*e^`e6?Y z$a#sEu!$vSq0Q@ioN48m00{!I{Y-%rD>#rpm*L;DI)li0#B-L#x0UC}cWFA+;@*q* zz@rxV9DE7$6eYL?k=cYq2=2>Sp>{r+S#2~D$WhrX(Qm(KG|=HplDTpYxM%3ALDb%i zee5^|9~>GWBerIj`Z4SFWhCa+L3qPgSdfrxsrQE8N5Wce`}cA9`-@a*WgWHEH%_J|DQzYfU+j_s zCp;>~`F85l7@lIS(~JK=n#%OB>IJ@v=_NHFrla)M>PJrpm$z?FL_dkE%Ru?c)@_j+ z*I}yt(&wN!s~NA9Wx68&P&t`bJCg?H@t1 hX}}9d!u jy+=oX T;6WOB_1Y0Rlc0_83q+Q}Q`1Fpf`x=O>drL6 z!$oj{$w*AwzW7jk2eEl?z%hP}&+X&Sxl`MYub&5#|F(^SH3qbMZC*isO;nW5(+%Ll zm p5I6pdpY#|pEC7mkL+jw9 zQ-hFFuX3M2o>hON<(1_%; =|gH=WT8Yj-!z>WgO1k5-A|$Dwh#KUH?NF zM?NEhw%&h;fj)V+f|lvWh!@6PbzD#}9lVG5P0&E^{bjOa1oP{Vu=7LJ;7|*G{Ma-5 z8u3p}NobwN>7@i7z}<=8MH~Q>FZW&zr{$k^7X81JZa_x@r*#L&TR;s0M4`?04K^-E zvyKm>JM!due78v}+~S~L&n~q$OzkaJT~X_VYSVOn^hR{Rc}u=$ADm1KR>RropIa}v zNe!0UPgNaz*8#k7M}3 mepZv!DG?*|cBV*Ef=*i}SOahkV`eZZk zr-8V60%@IOjm`df_-8c%IbXA^dXd5D%G*{E_kaAtGXRpOz0sZ3j3+l>HGI}hfP|@sEu+XUVre+&Ej2>>>Sn2s`Z}RJV{;WV4d(Gkt`|snF_7pr zP>A7Br+)uC$hY+#weWwV0jKGoam#336l1V;;0r7%wuOWpIXq_?MUh84xCQ)LM}a_< z|NSSw?}f{yo v1w_Zb^32rGq=jp+Y_ixsBD&{f4?@)$tM!V%OFHaB2uoge% zoHr-A7%&hr7(3^U=pE{mrMx5-A^y*4*Dh1jj>!Mrvpg;g R{rRF=@PvA13 zfua!?!Z(IXuP!NDK02>nr!3tcfQK=q${^rBMCMRJ;H0w+h7jBU5N8tetV?RlQo;g5 zevb@OYTVx1h7@@oSa+^c&^Ji8P`ur0?e1B(Y# 3sy I(Mg~8CmTi3lH{Oh&WGwYN;QtGH>Sd|#*$As#bavj9 z;oM}h?@s0?W2j*43%IK%|Mci ! YP>$Q&j&0r0OhwuH!y?7rptW1`h5%$c~1Q2k~NiJF_mXnBA+hlD~uR1ZqjY z++$sD!{{JuISPzgXHw;Z%=KDt{fp7cSWsy?rG=U(_Zq`@3^>Ydxh!f23WDYBDS-Uy z+s=)fQ;nB?S6Y06hXEhCSuFNtnh@( 3rmo{fgVnEk?Q zt9SW`tjE#l#wI577A5=qE&Ss2c%9rr!qT0G={vYqx>V;X8XrTl2NRRiYY&jcYh`@& z#sm5_kz4**zWl10O7!D3jz=e{xg-0zYNboi8c-(I;Hs~PMC!8|Z28WjD i}pXBVC_dX*PXhu21=hg-O}d)QxiRbfZy_FT$MAaq;yUU>W*9 @TM~TTYukv&8 Y* zTwjyYBo5PB6P(_W#y;}=5$9H`Yx-7x6U6U%Ra_?$(>oUkKJAX?#JWnVdhno$p*6!t z!^`M9s+ZR@oquHc%S$cojsNLC-L}5Uu3>>tU@HE>!4M?M?fbp@#%@hZDhCLIs11$~ zrD?f#wzImW&}+%5`R@~<8(3}iCZRk;J2ll=0m#RTm()URJ}}?Dd*n#AoOle4d|uHD z?&I|-9V7=T>{iDd03HkCBD_>{e~&~`f1xWPWR%0>3!W9vIO}X?dqckVQXXkJ%RV0W z&M;AtNM)KLXzrEFC%Q)0@^EAvml~QmB&YSmT36iK)=nK&b6A7xQQ&nxRB8ci0W6s` zqf8S2@2AHA%i^f;tdrQxIe!U;1pV)R;I55(G0<0xc)Zu=icCrq5}*48hIQB={y7f= zoRbI_p9?AQ?OeuRHL~yxmUe~CP4k`=3Wie<>JePS=}XYm9DMTKP*}l^9P@PhaR9D6 znf |r??0TFF@WY zy;+A>=-v0$VcOc5%-7~=Ug`&!owGAd82^7@c6>{?R*urBM%97IuHR=KwF;Rz)}}}9 z>+*rtm0Vwv(&WNQ8S{VrzJZh+(BzZ1D*cN=G`RENk%hd>KrLScYYD(BXVhLh%+vH1 zW5%}Q#0VXvvyZFfS=Gpx0xc5mB}DcNj7LR{l*-()Q4T=wEHu|NTUQ8U(l zQQR*3KWIipSCn3XF}lo|-%~G^{%&JH_W?!N5s3@9C0&1iyu{p9z%ydUa0&nh@ju{3 z3JPK2hHY~gAFK-lA@P%T*k?`#Naja^r}C)^m9Gyu(VMqECju1p6frW|lQllBnlqeI zc#)M!=fU{V@(4mdv(Z+{y$bI5(lAm%PVACLD`TJin|0{a5^WZw>xMd9xf}o-j?LDY zs)QqAl$+NEzHp*W$sWH 8k4?_k z);Y9E9(wGl97O#*82lpoGzDXlOksh DBYiR6=}1tzJzDi1pk&D73O0mcSE~g@ zlCX(e(2lG+h)nMfk8NMVT>JG#YvR8fSmTZwwBf5~#qmLahvdV~X-o@0KdlgSFBe5I z-NA$3VW=1%)!P+8ZTe0yWt&4Yz662EIf|6CE_m~Q8i?o*d$|6|R7%#0SY5XERM1V& ztG!ugN`ih{y5B|7Ek*26gJq%j^4ra~55h$LzTIKEHv0Oxhw^ogR~S(5yCq`1x5%q* zr>nBMp2xkvv#n&^YOj&t?f!_Lgw}snFNc0#$ ^Ji7meBS_a{j>r7}z_t4N@CpVjkAzXA zsw(}{ I)Z_sA6$!u#z<7Ul9Gz-EV)S8p4H4% zeSmTwE8!MMwdM2=?(Y&btlz{;fQo`$G?I9{>DjORD}Sc|;%!*u_mD?*YX-UJRxw9A ztD#|mY@Zcj+WEhiI@%1H4uT)AIjgpO@F172wQdRRu|Yh-Q`JYMQN9!*&w18lrnuYR zvt~R+7Ko5;z>-XE4yu{N#)J4~q*@`fuVP0++3}tS$G=0w>sO6PoD^=bSb6(O|KSZ~ zcy+$-s3<$pWMSCDn8I4FR`-o(J{{GAMrxRbrAqFHe;cfv4XhsbsWLO?|6(QgiT1xR z&|GYcX12%vu^|aYEaw{JFWwh4BwXtVw(6#^Vn{{3 t6o7kAf=!ZUADR`QPWhRsaz6MlzW& z368V$NwpBpWC$$JFR3OwD?6>Bf|qkJGsLZ5bGwT76IpWY3H0-@aA-L=EXPJOM@ElK zmVZJ>S7K#XrBROM%VlJaU=XK`DdCGAK7WmfpRd5 B~DfjU0$$>5yw5|x?e1VTm1g@HEba2B<#{ttAz7?##= zUA^JIjgiQYpPQT&={gt6#J;wWT9ASchtqOk*xkfhfjUY%3SOTd4-$V>5d4wE-gq6u zmr^SgPn3HiTen7>QTRi3*@M^EMd!g)&^kDrDS7D8@Hacr(!$J9rQ7@(^TyIqdyk3y zIL PL7GOyY w)JY^?q06ye`5?vI&pG1+vba@z!L z6%I-b44eVEZ XdW4xo^~X_L@2{F3jU5{Tqk^mxe?+V5C2_jRwn-`TZJk zqP)A{$E;%cqv7gbdj#B*MVq}ZW{^nC*9Cw6B%hG7SSH_CewnC~gtgrMCjh8}cVE1> zc+P)YY %<__rOdF-&|H9d0vJswk>B0zUPU%NKdV@VQ#B;RblmN0 zj|4FyU52Oq7W1F{0s})jK{rfUx2dt&1hPX9I9sQ-R6I_T!%*o_rORF?%k78x9a_*# zcm^b6);#NIw2`>jEC?}u`6Y04?2i@FfP@IK^z~1VL&H?3VJDG}VJ-PnxqssxU#UTV zT5x3;Y@0Va;(r1ut23;1?xy_ag9IMvl?8o?5y3chS|sSp*9s8ULfM={DYNW>q)w}R zS+xkgCj@m|B<6Uf6<3#`Vca_`aiLdA&Vh9z$;YI4yO5c_lHPug?}KsYadvXAAKN@b zM ?JsN)<5#hyZ@N*)yO?s6eN;}&3~-} ;HCFdZ#l+q{1a>^Bfzg9PST(e?%;z6kXI<&r4J^ `=@o&9xG>`Mi; z9#G8+_dFD+A^^r+RGmvd+S)S>W+C;S@3_uxU>>A@N7mhszz+a16FK$O3%(IFa)S$b z3DbrWr{KTykNz^5($wDVt{o?UuOmOoI9@6jWLM&TZKFSs5K^6gBoYAvohcdwsM !3EMwqK{aM7uWPMCG`Tn*b_9!66l(wy8F33z}!og0l(p z&OLk~69NMR=|KXDXgwmJcmXvG4*&o1!!V4aj7&1UZblOj?Mim+I646 V;(%%YHf74o^kY^%onee1On$H@#q82;uInG`J zRU_()EdQ4~J-nkA$5zb7>-siFbb&=pCYcIwJK$s4m7=-+78>?jEY`atn}@$2XIqym z*pubnWv+)(ggRv6C3!laqmyXsV0ZgxV!iI`P(CvLMe~2X4ZKjU#(qe(>=3XFKh+IG zf*NX3k!FJo)1X#p>fwO?u$yh&LFI`rjbU4GnE^Vtp J)eHgY1d3|eNVRlJb@a+5Ey>61~(gX#arKQS~$o4pZvCe z?F*Wm9jy?+D&lgvln3 g0 z0)-~2pxuVyMQWv=_5+r>6hL t-eUp!0Zgg)yW#q}PsCVQIE@HeSa=TAR(jJTVhmS)cnHr7|jK-AH^XtVG`GV`o-w zies(O7kY-!RPO}io;_823#(OA^CdZ5ebWPLY5uwbx7cJn2%gV)vEgt<2K|m5 zT(63BkNea_Dn&{04@B?#ulM#tGaxkRAs&3M`4tSCPwvi%Jm(xKp|auxZ;RczSm48{ z+vEZyK!;qL5mxn}E-aBAYiGJ`QM%~Oej_46S52mY!30Nmx==-?6XTSDdp;%xa%^`h zja%YIhf=EB#xlH1YJS+wTiL#K?8(jX4sA=(ROhrdVY8g*W&QATjx<79pkLQlE0Y(H z^;8{K&!^lr&h7NIfBP9w4#)pWY$dxKP16YHYAj}IIyS!QC%oKriy}!1ndHl%^_*PB zvH4AAclNoobo9mPw4o2xJSkzr)K<;OgZ`N%UzI1Uh2IYNsekpdBA#&NY-Y&HvG?wQ z7%nv}Tt;`*CQ;`VClR~M?f5-wwr||~aAVYxJKz|GHN=AmK0VsZbNQK!0+u5s`CI!O zMblwDXgI`oO2fD-8s$UO?4?$jmZyGd$VW>fe#(YI75o02%M{gsOGX-A#86f-IVQd_ z0^WrB#lGsdOkw6WVlHC>(>j}{@~Re=>ws+=<2(IxNXP%a8|`TZ%4Tz<;X$)=RCmI@ zH0Ffc=fBC39T=~Df0e;Uf76z;cbP&HJ} }+fT`w>05d=~!ckK-IbGJn>owqCtns31rbye;- z`O4XF2ka9pcvWg&_a;pLs(Eh1zo;G@+%126UO{zCk0u|l%E;^)2eqsR2G(=8Lgh;y znatnnJ<*_#Fj w$2)!lSSYHp zA>QNW4DA@Ye~@+3=52d!93RT #InRhV?& zpQ-QoBOxM1Axe%m4Mg)lm!5|>=5V=;oP&|+PTlovUnW4{=+a18=BCgr2b_V~1$}x_ zGu1twVCxzoVI+@h1`|W#+q#YKms;NYY^}Ra6 TjTxppz-9*P8?kD40S^NEX z0TQ2OJMMb}$_225A`#guCki(r21kcq!QyZ^67Cw2Vip1NG6;8E%xONaS7cI7B`uZ8 z&wf{Mu(R?bIGZ$F33(*^#OrD@QO^m&0D4_SlKQu19bRnzj0>;7^E2qMBtSweq
Ce9%Vq7JeQz2l9M7doW_K<;G6(>$|ElhO!eRIX{@OVn}&yo +l0p_tX9;@ja9 >G21U>ng z*S%0+3NFccUkJDKyBa!w <_8|2B~Hu#iZbvHHknBL zQ5TaWn9aRuo?cIeVU*R|`JE^AEQ 3++6)gDXv4SOI5m;h;%`P-5zLJpac(>&SO4 zOe^u*=}YV%)9``+r23Ksb&v3tY#l o;#wYYD6_}1+rn ^S^iipJ!{&d&A9o)2?@Ma(#Smk1VeNwW6N^C@|;cIjYQY`Bqli0Ri^UdG|^D z4nHIwH4dbOfA0DnBh|@@Jl?x)$co{cV^ni2dOqI1b{*dW9UWqAqPrhNc P;yqKvkZx)uWE2M-VKee}bsph6F*b1=FtM1HapMTChy>ROkkoKPp zL^z(6L&DqU!?E{joRia+W~xgA&c%2Lny>5wOAGj~pS`tkB|9}}p4x)b%JL%mo&`~0 zC{N|h!g3gQ-&TqPwgw3Nlj16IsMX)n1>2T4C(PXI0pkyBCG|f^^8ZHRN0hnagshd7 za{!0Sm%X jRI1Js-{#vqPiW#%VN{Yp{Qiw4ne*k8it`ke zS?f}s9PjSBPIY_d`se0K)mtGh3@;w}l7&PED+*Q1N2v7Kc~O=0ZY+{SpZ8o*){qwz z_?$f53ua4MvyiF){DN>XAH>sDSK)R4^SgR#8uBwsWUmOwOU%(RURJb|`=3FR03$pA zU9y$c$6g91&6eCX#yauxH776Ll89W-1N)?#>u=N5`>Ig9_;x|f5c_A+*C=VDSrTw< zKYEz17m7PaHERhzuzu!waSP0Q)$>V77xR6{u0eD!J2bxZPfcCz=q+VaDJOvG-n|_^ zxkPr;;lWe3@`|FW#G )OQ>7fOYn>Tl}mT>Ai90dfIItx3N6GYJJSC%v7mx z2um$|pE5QgV!! gNqa)uuEQPdd^;|y&t5v^;kL4dTKbBTqGrO smfz=J%R8RuH|7N#SM2(okHGACdO^q1}UU8$-f z=XUPlC ? >_-={P zosXr&n&mQ;#LJ7G*$0r~UA~7Gs;iV(8;yKN8sosZpmT@X`|}uuKs^& _;8cMtIJu zh4ji!7aH_oNoIwf3#>Jj(O1mmenviCMXh)|x>xkXju4yfmLw8+7{(C@9|tiZW2>jA z)^DETTX_E@Mb0;~$R{{Kk}E`J^ZO_E6t?dItIT Q zy}Z(zRK$dc_^7Vq1enMuFC7A2J!Kh25Qg2k7=PWE%&wvaV&!?zR=|X6ZXG-j84Qhf zurI)VLJqpsDLWSDah904EqV9 z*yriG80)?ajr{cz>}lPfK2>Ww)rH^CO}Y>+MW4V^TrY zQF$Jk$)!g=zeMO#0+ClhLl1nC_4zvqNER#gmr6TatS&UBc==y}S9G8H_o=NlW3m=f zytDdmvT{4WSxaPz^guVHTcEQ?vGeTxD|nAU$*3m`y$<(`uO)+Xw0A@R#A^!MT0zDJ zqO*%XrhRB^rQO+JuPoJ6G_-dW6Z#5baGC*pwEg4L1N49n+z;tW%4bm#kjfdyZ$?4DOu&s{j?#sc{lM26cflsl6^EMjy zQNwz<-(qA2tdze%S77XaVkN9nOGeKHtd1rcxTkUhqM26tp72uVf2*me8D_qpRa;mJ zZRM68MmaENr$^{2=twhI?ZY<4%EJ0M+c>YWYjpVOz}!hBmSm!w%T*D&v6ipRvkpV~ zN2LB#;pxoqc5WY%!X%7dZMt(S@@$(z`#Mw-9?WL7`elc3sZ<4VXOF&+_tQn@vUPQV z0dB}9|KJPZTA6M>_HOQ>eB%ol3$XnN3qwav)Ag(`|ImWXu4n1)zx&)0BvYfPq~XX= zT+i^N3KWU9w)xhKt5jcxA`-=<+P7|e>iJ!^_WG6{4mGCG31_ARYHyI<)Hw^@seuEZ z(MfS9lxHD&a)?A#L3ZtT#fU@85QN#>YJMI$;i0N*fK6x4r+spg-zh+@=SQdTee#KK z>+;%a6E%?!@hHPdA|g0a#uQG5A~NMUa*Wm{v#`$4!}JIoR{GL!2elHZ5~z^nC9>~Y zwO>>$-HS!6|AA90w^;{72TUQG2G(zngiA`DeT8TbFNwe@1{xtki*%@aCW_@KWvv;L zzMdt4Q^7+Le>m>TvL@^eC6zbTJ#&tm>^?JjEz$4+%gJM37bX1h_1E(T?x%)6dnrdP zp#-(ptYxRWeDE(0@l8_$89^}#)tmhlbjHCYfTi}ljbO76Kw&2@D)WQ cfyC}o$U+xYz1N}o7)8kp$2`i= zMR76fiF$~fq0?pkhWD>N7C#~KHpy#M!I7GB^AM-FBC{eO>=v32N(eQ)oU7eDF7?jw z)T0qx|M;@ikK?<$ZrChGqKnICHwFJ6zTN~J>h_Bto-83n655b0Wi5qdYb6O~9lOZB zW#0{LLMUP^AyoE#-=~o5B>S3uAB?e^dC&Ab&+q-e?|WVEbu}_y-{oG;IrrzB^Evmo z?)${LmFKa5ytJoygkrin6g7*W={~dUo60 b {`MvsJVdZCY 2Pab?GgeqwIgpP8b$%VCdp@SEZsI(609O^?*+vX$&6T7 zUvd&;b_X8FYWTb`IiV^t|1+>XXB1Wx@RW;aHNdTc27sc5%nWp}0MO{Rlxtq;`^Ap| zDTU|2zpl~ljZI==wKy?2V}(epMSa^#(eLXq)$i#si;9WVj&j%Lj)~Qbw$zC=Rc5?< zky_~Dcj}xsv=@V41aaB F zJ%hiI+vj62># VNMzlD_bb7x`@UIx9Jr#^Xuf@;)azVj{ch_Sz@^Vy#1` z#$~LQT)p6JZEapd lm>KbS3U->5c_bn zc7hmA>MS|lJOqZ3f*H{{ddP2+4nZw&`#2JTL9qC3Dtl3Vs_q^=bR0=7@ErDsJY0sj z=|zPYlti4*qrPQy2tlp~&m@Ol{c|q?Wp~8KRSPVl$nEcOvf$%z-^& vDVRB^1rSDlwEx})LIy|*{{|X*KSnmvljumt zZyGWDe_G_RLB^l^sot!x+YNC|&_>M5;8s&L-Lt<>BDLoxqb-(NU}ByuGq0@GLZsUV z&U$;n>50R@|NE>k1tXU|tMR!vr{3Ec9`jx$_g&v96&!LGeKxyQRUwOSU7T1$8Tf9c zsMKUxcZ5}L?({j?2Q_97`K%i>+PQO T_-1Z?Cj~t zqRS~M5y|VzsrQxJyyrvcmSvU(tL|m0cx@=^M05CVv >pe^Dd+9k73Ciw&n?#zLPxB>PjXpF QMK$Y `jgJbe{2{N3j* o4G^l0J**UT7u)b=s+sVK6{ zK_da7u1Kx9`CEwCBNdK54uLs?Mpb=>g#IUn7Rk#8T}QHnJ?S;Ai{3{}n3{-Mdai$- zZ(8sEsjvnQ3LbrN*0*)VkUql_{p0S#+)H^i3zGF7i7!7eS%tVRy^L8;urI;Ug(V2) zma1A8*^Xg zEb8AOVn@{ > RTG4ooFvkG z{xvE}rPZ>x{d?X8X>C1bTKv){`7k>6Q?Es8o3esVbQknE`LL#=)mNkhPao#QVLpTE zYX;ToAbAN_u&<()Bbd#8@)X_vp=3Fl-1D|PINA7wsejK}gfJt^XQG&Zo~Y@{%XFGM zDE1eEjwb#*HAU$eVsp;ZrMO_F;pZ%$@{L7eaO=S?73Rbv`KlJ0!D4vRa5(J1-PB zS!SEp=zF!9mr8FUwRBu|CM4JT_i*;pk=jofjk!`=EpZ8M cM z>6{Oiy{+z~8s+7)i#M01@*XZ$8M{TmI?wIq&W`Tm#;^WRdFzF53(c(=aM1gml}B@R zux5 rK>++p2nn@mz@MGnrr}OvpYs=|EhaG-yhX5w6*k z`TjG6GV1#5d}fBrG}FBX(;GR7R2JTI&3O2|V*QAZ2A(`&`F{rYX16VtUfZa;w %*DLyL9W&nRL-X*lV}^Zgv;p^U?Qi zuG;>hreAlvR}P@Ny0timQeo7#&)uo8AO=TUcaA*Y11 gBH10wCvr<4e=|IZ@bbk)6k<+nUEEhVEwZuIbvyIe zfzQULq;G+=zfcEUN6n{3$rL~0GLHRt;G+?fQ}tP0OH~tIFA$~m$WgL3`uKWugw`Wf zbv;cus+z&y9T^-kaz|>YYm_Fb8rRNv+l%+*wUN!yYgR@y{ybJX<@NWB0-H4pPy90D z`5bs4yF98Qv_*h1hT(cBkbQz|af{*o9pAG%8e<$>b*VJ|q9Wdd(3(WoMR6f3=Jub< zlu>DiE-8EMW-LI1U=XX4!;i1uRehYE`&$d #qt8`KhlDEe9bp1tnP0JPaG@<`^ct&jehp)XBu;S>J?%jnByK%hzcoM5h zuIMXB))GO<%mHr;qbB``z03Ce|FG>-6%@Vy7 !y{fmA6YbYQb2EZc!eLaqR38?44ug@`@ zFE2d!-`D^Do03lc?-_qF(SLUVr1k&0DYZahgO2HC4Ry`P1-_sM&K{IJV8&=TJ}bb> z4nC*d)yl}sg7*f9M9<06aJ(c$K=p14@vadAJrnXm;XMd_sp=SH{7> bZgYmPD9UOt^-~K0zNmp7i1Zb^-h$U z#oydPhv+B~QXy5(C#+He|GQE8#y>Y|u@GTlTHIctMMxcwXwp+p26(iQh(M4&A+@9q zb&xvr1!6!I Bz0eY7ua!IoWyHLkKo=VjzZ-O)zhx=f_02qvvtN>eC=a zXN@g`x1=_cKI0Dmwp($y2yD`=twV@}hnCu}awbOYY##nQ2CLWqj)Akk1{kLF+^>5G zgvwViQyH0MeKe>3?Ha~pk<_&m%BZfVLVQBdT4#2|c+<~#j{o{Tx%BS|-z=K>FM_fA zdqTg>X4Uf(b=AWi(f>!AROF1Li4Q8bZn%2Qd~wUWJQYZr1tYn^ia@|*V_nGP{%c$R zZbzeF-VM}dTR+X!o-^5RteS^AJn1kEBw&qTyo^BXs=%j1jw7$adu^oZ9)F{Jqt6Hy zy=gEayC`wqz4dOfoFtf >wK_|s0*QAu4>D$Du%FvN|JAf~35AG}8*JfaixW;R`(@GIy*ts2LTUB3> z3$O_+ChsOm>wlkFZn5|7hqkf5KB{G11h6C!0BX&P{dgjt#n8(zyK8fQCKV7&Lx*l} z-In}Xz{9wBPHgv#G!}+u`eDKqmFzCx&UxC|5aAL}cKTP~;uw(~{;L@`i33QAURd*R z%-JV{BV$V~@PoSXp0KD~e8Kb;-ZLV&CPUE+Hi}#5K8qID4cX|30==c)gT-6lZ{pcL zsaqH2JE_VpcjeBC%eE;$sN~A?{LPuS|NKXXg0_(LSLnx`eR&DuB7l~NqRW$sL`(fJ zOi+9TpW!8Kt=(fAjdwWU?GMp@hY+18GWdv{@W*@V{R;oo#W*cU_{IQZyF|c$g3kF6 zrs `vq!gyY zM4N7PBx{VUk%mZGS(oW+cc?;O7y;A-r-|yA`{OrgZDEY(-bAZZ;&JS3LcLZy^z -!ZGhn`*YdubWoYu-KhT zeuuZnYAD?!Sd-mn{fkbD?ZA&rj(}Y->{l7D-8O22_Y2HnO@5!Totlzxga+VpYj}k= zXwNVSZaVvp52^g&%&XboG=Hq)`~5cswxbqLdnUKn0;K&WX$_`jlHL8>hvnk5*4Gk+ zb)O{WTeSAa*4Xjd9fuxY30&_oi(-7Q EYSuYE4nG%l3rz8Qidq~bq*n6BR4-v UpFUK~l_Apf6D48|;o&w)ls8m+R6qBdGl zL(1`@vQL*jyk=hp-F->3AlYf({IFOjB}7X&l8ZJAX8d5WTzs-e@s)45FvotP3KrbX z;$F=9`~Y!;Ue+GlBkj2Uk??~2?uCa+?%0luRS@3>%D1q@p445)@aLh>gpM279sF7P zT$EHB=CS)qjOG%*+-nu 9`8+5hWUeAQz>M7@qmwSo^E&*yHY1TP&e ke80yUv?N36!j%BX&F&KdcVHE1;~@H{6LDSmRKsgzv;LLN=&j(hQ5<^Q@>je z$x_wq{|Kl(MjNIj>_f6!)s(L=yJmhO5~5D)Z#_EpOKqWFqc*dw=&Gl#s m z&!j@`OpB8{6;!b6t^O)WZ!6%!N($S?4IYd?e _md! X8T6NYu*SS8rZWNiH{9D;zLDaddeQ&h^RCh2zID54QH@1=7As$J|mL;Wb z;{Y(q!r~oZD#GlO^{CvvgA qIk%+s~iHdJnIXZ|)FEVaVS9>3$Bz z6YS-;+R*#=wXfXZl*_6+L7(8W!|IW(31)p_P0J^MA|z%5pz;Lgw@+6h4)344=zEf} z^wCKNRHhGl*1%SLd=^tfegJ663CuE>j21Bih;B4Bdao64^_;QIEQw#JDE(AMm3$oe zr>n5>UR!vka|4gCf^ys2P=zC52_cx =uY(OE)>~KE>_gwXNSg(wy2XbZ%Q*_%oLB* zg)IuwKiMAmNzprQC=XT~>wEOLN~MqJGjHdQ0-j%6AD&(x`Uyszm=HSP_9;=NgOD`& z^>9c+|DI$+^qYAT&ac6=G+>O*Cxiw@3%Rb$9TY2i2%w*96FqiDK>Ve*tRx+1lG6Oa z)}5BPWT4& ^*0e z(PM=D=~CH%&^SIZM;Z>2gamX)?ku}C%IdjHpUbTdOy$SL_#N`wds6H3Luw}_AS>si zao|q9@7_^B2xaW4%>v84AEe;qkD-eXR3fG4+z=u6jgIZ}+=pdq=a2YW5f}#u2|Rq7 z)t6dB?}&WNsZX6n+}U7Tb^3&y;yH2Z#uH43{{hw5V>6P|;H_SCE d>$$+@Hz^&JGBJ6xu2_+)B-BUk)?Jl zQwG&f#B|qbR~(-O)H&dH1uI7$ gj%)BFivJ>uL_ Nx5w z^w>67k7myKx-hRx kl2$a~2aq$RAR_inTx1fAyI cO;3uSV_|mFHu0@*NM}Zc|dx z#Z#Y3${-HgUp{s4f-^|5*@|${=;gwCB!macY0D3BEu7PzHYoqYe$ru5lkiGWOWby3 zGTiFL ;(7QrqIp=|6XA~A3)2#G;3sXd|Adu?5m_=y_K z>ejbIBOx 9f*$eHn<0-^nsIHi7jIX+BQRnF^9`k+vaMm|1@l_D2nTSVGl3XS%$hj~wC6r* zkHzak3t;k|jUv-?CroHMul-287e(B9v)n`c!bGSo`c9?yvIo$Sm%#|A2K vsA^ub z@3I1e{w8BNw}=3W;OVn4w0R(Obw ^y&q>q(Y1pOcjVVM6$~FjU$XBQX5lm& lX{_;M;7e)J3&S{G=Z34{HL>SzI4*R)S0mhF zU=fBFvm8XB9@W1J*2*!cb;0jupB2XeFd05-z57PqF86t&7?rH85_{LwZbyI&VYrZ( zhI(}OplL8KB#h@~#Q9aDX`-~JKOSZI%AbmV MypLoL)~cH}D<;Xx7m1n&|r{dl$EXvp>Sy)3s;qAn~V?-FL;ih()Ia zm2I0UKDx6F;k!42Dz%+ovFC~AgrQAvEJ*G`&X$Jv@