From 4746e0363f5ba14210eae3b07829491250cb7c15 Mon Sep 17 00:00:00 2001 From: catShark <1716967236@qq.com> Date: Sun, 16 Aug 2026 23:58:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20VRSub=20=E5=8D=95=E4=BD=93=E5=BA=94?= =?UTF-8?q?=E7=94=A8=EF=BC=88WOV=20=E5=8D=95=E6=9C=BA=E7=89=88=EF=BC=89?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为视频生成 VR 双眼字幕的单体实现:FastAPI 后端、调度器与全部节点 (提音/转写/翻译/ASS/抽帧/OCR/LLM 过滤)在单进程内运行。 - 节点协议(wov_sdk 数据模型)与分布式版保持一致,预留回退桥梁 - 工作流即数据:DAG 存于 workflows/*.json,模型/链路改动只改数据 - 调度器:拓扑顺序执行、断点续跑(产物重建)、任务暂停/继续 - 抽帧按帧间隔(select 按帧号精确取帧),VLM OCR 与 LLM 过滤使用 自适应线程池弹性并发,并打印数据处理速度进度日志 - 100% 行覆盖率(pytest --cov-fail-under=100) --- .gitignore | 22 + AGENTS.md | 339 +++++++ README.md | 45 + manifests/ass.json | 21 + manifests/echo.json | 22 + manifests/ffmpeg.json | 21 + manifests/frame-extract.json | 15 + manifests/llm-filter.json | 15 + manifests/llm.json | 21 + manifests/subtitle-ocr.json | 15 + manifests/vlm.json | 15 + manifests/whisper.json | 21 + nodes/__init__.py | 9 + nodes/adaptive_pool.py | 177 ++++ nodes/ass.py | 98 ++ nodes/echo.py | 50 + nodes/ffmpeg.py | 79 ++ nodes/frame_extract.py | 178 ++++ nodes/llm.py | 103 ++ nodes/llm_filter.py | 171 ++++ nodes/subtitle_ocr.py | 162 +++ nodes/vlm.py | 193 ++++ nodes/whisper.py | 274 +++++ pyproject.toml | 41 + src/wov_app/__init__.py | 5 + src/wov_app/config.py | 28 + src/wov_app/db.py | 398 ++++++++ src/wov_app/logging.py | 31 + src/wov_app/main.py | 82 ++ src/wov_app/maintenance.py | 129 +++ src/wov_app/registry.py | 110 ++ src/wov_app/routers/__init__.py | 5 + src/wov_app/routers/apps.py | 213 ++++ src/wov_app/routers/workflows.py | 140 +++ src/wov_app/scheduler.py | 308 ++++++ src/wov_app/schemas.py | 22 + src/wov_app/seed.py | 48 + src/wov_sdk/__init__.py | 28 + src/wov_sdk/models.py | 321 ++++++ testdata/ocr_notext.png | Bin 0 -> 1532 bytes testdata/ocr_text.png | Bin 0 -> 13849 bytes testdata/speech_60s.wav | Bin 0 -> 1920052 bytes testdata/subtitle_10s.mp4 | Bin 0 -> 19770 bytes testdata/test_real_hav_sub.png | Bin 0 -> 130314 bytes tests/conftest.py | 43 + tests/test_adaptive_pool.py | 148 +++ tests/test_api.py | 34 + tests/test_apps_api.py | 313 ++++++ tests/test_crop_js.js | 32 + tests/test_db.py | 294 ++++++ tests/test_frontend_crop.py | 28 + tests/test_integration_subtitle_ocr.py | 90 ++ tests/test_integration_vlm.py | 65 ++ tests/test_integration_whisper.py | 52 + tests/test_llm_filter.py | 257 +++++ tests/test_maintenance.py | 165 +++ tests/test_models.py | 174 ++++ tests/test_nodes.py | 1295 ++++++++++++++++++++++++ tests/test_ocr_flow.py | 401 ++++++++ tests/test_registry.py | 116 +++ tests/test_scheduler.py | 655 ++++++++++++ tests/test_seed.py | 108 ++ tests/test_uvicorn_smoke.py | 34 + tests/test_workflow_api.py | 117 +++ uv.lock | 1106 ++++++++++++++++++++ web/admin.html | 46 + web/assets/app.js | 647 ++++++++++++ web/assets/crop.js | 38 + web/assets/styles.css | 348 +++++++ web/index.html | 70 ++ web/tasks.html | 49 + web/workflow.html | 63 ++ workflows/demo.json | 78 ++ workflows/ocr-subtitle.json | 62 ++ workflows/zh-direct.json | 66 ++ 75 files changed, 10969 insertions(+) create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 README.md create mode 100755 manifests/ass.json create mode 100755 manifests/echo.json create mode 100755 manifests/ffmpeg.json create mode 100644 manifests/frame-extract.json create mode 100644 manifests/llm-filter.json create mode 100755 manifests/llm.json create mode 100644 manifests/subtitle-ocr.json create mode 100644 manifests/vlm.json create mode 100755 manifests/whisper.json create mode 100644 nodes/__init__.py create mode 100644 nodes/adaptive_pool.py create mode 100755 nodes/ass.py create mode 100755 nodes/echo.py create mode 100755 nodes/ffmpeg.py create mode 100644 nodes/frame_extract.py create mode 100755 nodes/llm.py create mode 100644 nodes/llm_filter.py create mode 100644 nodes/subtitle_ocr.py create mode 100644 nodes/vlm.py create mode 100755 nodes/whisper.py create mode 100644 pyproject.toml create mode 100644 src/wov_app/__init__.py create mode 100644 src/wov_app/config.py create mode 100644 src/wov_app/db.py create mode 100644 src/wov_app/logging.py create mode 100644 src/wov_app/main.py create mode 100644 src/wov_app/maintenance.py create mode 100644 src/wov_app/registry.py create mode 100644 src/wov_app/routers/__init__.py create mode 100755 src/wov_app/routers/apps.py create mode 100755 src/wov_app/routers/workflows.py create mode 100755 src/wov_app/scheduler.py create mode 100644 src/wov_app/schemas.py create mode 100644 src/wov_app/seed.py create mode 100644 src/wov_sdk/__init__.py create mode 100755 src/wov_sdk/models.py create mode 100644 testdata/ocr_notext.png create mode 100644 testdata/ocr_text.png create mode 100644 testdata/speech_60s.wav create mode 100644 testdata/subtitle_10s.mp4 create mode 100644 testdata/test_real_hav_sub.png create mode 100644 tests/conftest.py create mode 100644 tests/test_adaptive_pool.py create mode 100644 tests/test_api.py create mode 100644 tests/test_apps_api.py create mode 100644 tests/test_crop_js.js create mode 100644 tests/test_db.py create mode 100644 tests/test_frontend_crop.py create mode 100644 tests/test_integration_subtitle_ocr.py create mode 100644 tests/test_integration_vlm.py create mode 100644 tests/test_integration_whisper.py create mode 100644 tests/test_llm_filter.py create mode 100644 tests/test_maintenance.py create mode 100755 tests/test_models.py create mode 100644 tests/test_nodes.py create mode 100644 tests/test_ocr_flow.py create mode 100644 tests/test_registry.py create mode 100644 tests/test_scheduler.py create mode 100644 tests/test_seed.py create mode 100644 tests/test_uvicorn_smoke.py create mode 100644 tests/test_workflow_api.py create mode 100644 uv.lock create mode 100755 web/admin.html create mode 100644 web/assets/app.js create mode 100644 web/assets/crop.js create mode 100755 web/assets/styles.css create mode 100755 web/index.html create mode 100644 web/tasks.html create mode 100755 web/workflow.html create mode 100644 workflows/demo.json create mode 100644 workflows/ocr-subtitle.json create mode 100644 workflows/zh-direct.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f4b673f --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# Python +__pycache__/ +*.py[cod] +.coverage +htmlcov/ +.venv/ +*.egg-info/ +build/ +dist/ + +# 本地环境变量(含 API 密钥,禁止入库) +.env + +# 本地数据与产物(上传文件、SQLite、节点中间产物) +data/ + +# 模型权重(大文件,不入库;如需共享请走对象存储或模型仓库) +model/ +# 编辑器与系统 +.DS_Store +Thumbs.db +.idea/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..94d99d8 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,339 @@ +# VRSub(单体版) + +本仓库是"为视频生成 VR 双眼字幕"的单体应用(WOV AI Workflow Platform 的 +单机实现):FastAPI 后端、工作流调度器与全部节点(提音 / 转写 / 翻译 / +ASS)在**同一个进程**内运行,不再启动子进程、不再走节点 HTTP 协议。 +由原分布式多仓库(wov-api / wov-web / wov-sdk / wov-node-*)合并而来, +本 AGENTS.md 汇总了各仓库的约定与规范。 + +## 架构概览 + +``` +vrsub/ +├── src/wov_sdk/ # 协议数据模型(NodeManifest/InvokeRequest/InvokeResponse/ +│ # WorkflowDefinition 等),与分布式版保持一致 +├── src/wov_app/ # 应用层:main/config/db/registry/scheduler/seed/routers +│ └── routers/ # apps.py(用户端)、workflows.py(管理端) +├── nodes/ # 进程内节点实现:echo/ffmpeg/whisper/llm/ass +├── manifests/ # 各节点清单 JSON(echo.json/ffmpeg.json/...) +├── workflows/ # 默认工作流定义 JSON(模型/链路均为数据,改模型不改代码) +├── web/ # 静态前端(index/tasks/admin/workflow + assets) +├── model/ # 本地 whisper 权重(gitignored) +├── data/ # SQLite + 上传/产物存储(gitignored) +└── tests/ # 全部单元/API/冒烟测试(100% 覆盖率) +``` + +### 核心机制 + +- **节点注册表**(`src/wov_app/registry.py`):启动时把 `manifests/*.json` 与 + `nodes/*.py` 的 `invoke` 处理器静态注册到进程内字典,调度器按 + `node_type` 直接调用。协议数据模型不变,为将来回退分布式保留兼容桥梁。 +- **调度器**(`src/wov_app/scheduler.py`):后台线程轮询 SQLite 中的 QUEUED + 任务,按工作流 DAG 拓扑顺序调用节点,产物按 + `data/storage/runs//steps//` 落盘并登记到 artifacts 表。 +- **前端**:由 FastAPI 静态挂载 `web/`,节点注册/实例管理页面已移除, + 仅保留应用中心、任务管理、管理后台(工作流)与工作流编排。 + +## 节点输入/输出协议 + +节点统一签名 `invoke(request: InvokeRequest) -> InvokeResponse`,通过产物 URI +交换数据(节点之间不直接调用,不共享内存状态)。 + +| 节点 ID(node_type) | 输入 | 输出 | 说明 | +| --- | --- | --- | --- | +| `echo` | `text` / `file_uri` | `text`、`file_uri` | 示例节点,验证协议链路 | +| `ffmpeg-extract` | `video_uri` | `audio_uri`(WAV) | 参数:`sample_rate`、`channels` | +| `faster-whisper` | `audio_uri`(16kHz 单声道) | `srt_uri` | 参数:`language`、`task`、`model_path`、`device`、`compute_type`、`beam_size`、`vad_filter`(默认开)、`condition_on_previous_text`、`chunk_seconds` | +| `llm-translate` | `srt_uri` | `cn_srt_uri` | 参数:`target_language`、`model` | +| `vlm-ocr` | `image_uri` | `text`、`text_uri` | 直接调本地 Ollama 多模态模型(glm-ocr)的 `/api/chat` 做视频帧 OCR(流式 + 5s 上限),参数:`model`、`ollama_host`、`prompt`、`timeout_seconds`、`keep_alive`、`num_predict`、`temperature`、`repeat_penalty` | +| `frame-extract` | `video_uri` | `frames_manifest`、`frame_count` | 按**帧间隔**抽帧(解析 fps → step=round(间隔秒×fps),ffmpeg select 按帧号精确取帧,帧时间=帧号/fps 无累计偏差)并 crop 裁切字幕区域,参数:`interval_seconds`(默认 0.5)、`crop`([x,y,w,h] 0~1) | +| `subtitle-ocr` | `frames_manifest` | `srt_uri`、`count` | 自适应线程池并发逐帧调 vlm-ocr → 垃圾过滤(无文字帧)→ 相同字幕合并(记录最后可见帧)→ 组装 SRT,消失时间=最后可见帧+采样间隔(间隔从帧清单推导),参数:`min_chars`、`min_alnum_ratio`、`garbage_tokens`、`pool_min_workers`/`pool_max_workers`/`pool_window_seconds`/`pool_fast_threshold`/`pool_slow_threshold` | +| `llm-filter` | `srt_uri` | `srt_uri`、`kept`、`removed` | LLM 过滤无意义字幕(自适应线程池并发判断):每条连同前后各 `context_size`(默认 10)条纯文本(不含时间戳)分批给 LLM,仅判断目标字幕是否多余/无意义,判定删除则该条连同时间戳移除并重新编号,参数:`context_size`、`model`、`pool_min_workers`/`pool_max_workers`/`pool_window_seconds`/`pool_fast_threshold`/`pool_slow_threshold` | +| `srt-to-dual-eye-ass` | `cn_srt_uri` | `ass_uri` | 参数:`resolution`,如 `3840x1920` | + +### 模型权重解析(本地优先) + +whisper 节点按以下顺序解析模型路径,默认避免从远端下载: + +1. 请求参数 `model_path`;裸模型名(不含路径分隔符)会在 `model/<名称>` 下解析。 +2. 环境变量 `WHISPER_MODEL_PATH`。 +3. 本地候选目录(存在且含 `model.bin` 即使用): + - 单体根目录 `model/faster-whisper-large-v3`。 + - `nodes/model/faster-whisper-large-v3`。 +4. 兜底:`large-v3`(需要联网从 Hugging Face 下载)。 + +把权重放在 `model/` 目录即可完全离线运行。当前已下载模型: + +- `model/faster-whisper-large-v3`:通用转写模型(demo 工作流)。 +- `model/whisper-large-v2-translate-zh-v0.2-st-ct2`:中文直出模型 + (`chickenrice0721/whisper-large-v2-translate-zh-v0.2-st-ct2`),配合 + `task=translate` 直接生成中文,无需 LLM 翻译(zh-direct 工作流)。 +- `model/whisper-large-v3-translate-zh-v0.1-lt-ct2`:早期中文直出模型, + 已无工作流引用,保留在盘上待处理。 + +### 内置工作流 + +| ID | 名称 | 链路 | 说明 | +| --- | --- | --- | --- | +| `demo` | 视频字幕生成 | 提音 → 转写 → LLM 翻译 → ASS | 通用链路,翻译走 SiliconFlow | +| `zh-direct` | 中文直出字幕 | 提音 → 中文转写 → ASS | 中文直出模型,无 LLM 步骤 | +| `ocr-subtitle` | 字幕OCR提取 | 抽帧 → 逐帧 OCR → 汇总 SRT → LLM 过滤 | 提取烧录字幕做基准数据;前端框选 crop;LLM 过滤多余/无意义字幕 | + +最终产物按 `上传文件名.标识.时间戳` 重命名(如 `test01.zh-CN.20260815123000.srt`), +标识优先取节点的 `target_language` 参数,否则用产物别名。 + +### 任务参数覆盖(前端框选) + +创建任务时可携带可选 `params` 表单字段(JSON):`{"节点ID": {"参数": 值}}`, +随任务持久化(param_overrides),调度执行时合并进对应节点参数。字幕 OCR +前端把框选的 `crop` 按此传给 `frame-extract` 节点。 + +### 切换模型不改代码 + +- 模型是工作流 DAG 中 asr 节点的 `model_path` 参数(**数据**),两个内置工作流 + 均已显式声明:demo 用 `faster-whisper-large-v3`,zh-direct 用中文直出模型。 +- 切换模型 = 改 `workflows/*.json` 或管理页面 DAG JSON → 保存新版本 → 发布, + 全程不涉及代码;新库启动时从 JSON 重新 seed。 +- 默认工作流定义存放在 `workflows/*.json`(数据文件),代码只负责加载。 + +### 长音频处理 + +**当前策略:分块转写,默认每 1 分钟一块**(`chunk_seconds=60`,2026-08 调整)。 +whisper 节点内部用 ffmpeg 把音频切成块 → 逐块转写 → 按偏移合并为完整 SRT: + +- 内存/显存有界(模型 + 单块音频),任意时长可处理,失败粒度小。 +- 分块是**应用层工程策略**,与模型训练格式无关:whisper 训练/推理都按 30s + 窗口解码,任意块大小均适用。 +- 每块 `offset = 块序号 × chunk_seconds`,SRT 序号连续;切块失败自动回退 + 整段单次转写。 +- `chunk_seconds=0` 可关闭分块;大小按工作流 DAG 参数(数据)调整。 +- 同时默认 `condition_on_previous_text=false`(每块/每窗口独立解码,防重复)。 +- **`vad_filter` 默认开启**(2026-08 用户决定):过滤静音段提速并减少无语音处 + 幻觉。注意 VAD 靠压缩时间轴回映射(SpeechTimestampsMap),长静音场景曾实测 + 错位(30s 静音致第二段语音从 ~40s 落到 10s);如需极致对齐可显式传 + `vad_filter=false`。 +- **分块偏移按每块实际时长累积**(WAV 头精确):ffmpeg 切出的块实际时长不等于 + 块长(如 60.05s),用 `块序号×块长` 的假设值会随块数累积漂移;改为按真实 + 时长累加后,字幕时间轴与原始音频严格一致。 +- 参考:openai/whisper 重复问题(issue #1026/#1046,PR #1052/#1253)、 + SYSTRAN/faster-whisper issue #465。 + +### glm-ocr 重复循环问题与源头修复(2026-08) + +- **根因**:glm-ocr 生成阶段存在已知 bug(M-RoPE delta 未传递,大图触发 + 重复循环;GitHub #454 / #16892)。`keep_alive` 与其无关(实测无效)。 +- **源头修复**: + 1. `frame-extract` 裁切后把帧**压缩到 720p 内**(仅缩小,保持宽高比)—— + 过大输入图是触发条件之一。 + 2. `vlm` 请求体 `options.repeat_penalty`(默认 1.2)+ `num_predict` + (默认 256)压制重复。 + 3. `subtitle-ocr` 增加 `max_result_chars`(默认 200):模型输出超长视为 + 异常(重复循环等),**直接报错并跳过该帧**。 +- **glm-ocr 调用结构**:走 Ollama `/api/chat`,识别指令放**系统提示词**, + 用户消息只携带图片(content 为空、images 传 base64),`stream=True` + 逐行接收,`stop: ["\n", "\n答", "答"]` 命中即停止(输出首个换行即停 + 阻止“答:”式重复循环),`temperature` 默认 + 0.3、`repeat_penalty` 默认 1、`num_predict`(默认 256)随请求透传。 +- **gettext 标签防御性提取**(2026-08):若模型输出含 `` + 标签(旧提示词要求)则取第一个标签内文本,多个标签取第一个防重复循环; + 未按格式输出时回退原文。当前默认提示词为"提取图像中的文字,不要描述 + 图片中的内容"(字幕流水线在 ocr-subtitle 工作流的 subtitle-ocr 节点参数 + 中显式指定,经 subtitle-ocr 透传给 vlm-ocr)。 +- **每次调用 5 秒上限**(2026-08 调整):vlm 请求 `stream=True` 逐行读取, + 每次调用整体受 5 秒截止时间约束(`timeout_seconds` 参数 / + `VLM_TIMEOUT_SECONDS`,默认 5),超过即终止返回 failed,不再等待后续 + 流式块。 +- **不做文本加工**:除协议要求的 gettext 标签提取外,不再对模型输出做 + 过滤/去重等文本加工,结果原样使用,仅受长度上限约束。 + +### VLM OCR 自适应并发(2026-08) + +subtitle-ocr 逐帧调 vlm-ocr 时使用 `nodes/adaptive_pool.py` 的自适应线程池 +弹性并发: + +- 从 `pool_min_workers`(默认 1)起步,按**滚动窗口**(`pool_window_seconds`, + 默认 10s)统计已完成任务的平均响应时间; +- 平均响应 < `pool_fast_threshold`(默认 0.3s)→ 线程数 +1(上限 + `pool_max_workers`,默认 16)——服务端空闲就加大并发加速处理; +- 平均响应 > `pool_slow_threshold`(默认 1.0s)→ 线程数 -1(下限 1)—— + 服务端变慢就退避,避免盲目并发压垮本地 Ollama; +- 结果按帧顺序返回,SRT 时间轴不受并发影响;worker 需无共享可变状态 + (vlm-ocr 处理器为纯函数,线程安全)。 +### 前端 OCR 框选 + +首页选择工作流后,若 DAG 中存在声明 `crop` 参数的节点(frame-extract), +自动切换到框选面板:视频预览 + 拖动框选字幕区域 → 生成 crop 比例 → +框选完成后才可提交(未框选时提交按钮禁用)。矩形↔crop 换算为纯函数 +(`web/assets/crop.js`,含 letterbox 处理),由 node 单测覆盖。 + +## 环境变量 + +| 变量 | 默认值 | 说明 | +| --- | --- | --- | +| `WOV_DATA_DIR` | `<根>/data` | 数据目录 | +| `WOV_DB_PATH` | `<根>/data/wov.db` | SQLite 路径 | +| `WOV_STORAGE_DIR` | `<根>/data/storage` | 上传与产物根目录 | +| `WOV_AUTO_SEED` | `1` | 启动时创建 demo 工作流 | +| `WOV_SCHEDULER_ENABLED` | `1` | 启动后台调度器 | +| `WOV_SCHEDULER_INTERVAL_SECONDS` | `1.0` | 调度轮询间隔 | +| `WOV_CLEANUP_ENABLED` | `1` | 开启孤儿数据定时清理 | +| `WOV_CLEANUP_INTERVAL_SECONDS` | `3600` | 孤儿清理扫描周期(秒) | +| `WOV_CLEANUP_GRACE_SECONDS` | `3600` | 孤儿清理宽限期(秒) | +| `WHISPER_MODEL_PATH` | 见上 | 显式指定 whisper 模型路径 | +| `WHISPER_DEVICE` | `auto` | 转写设备 | +| `LLM_API_BASE` | `https://api.siliconflow.cn/v1/chat/completions` | LLM 兼容接口 | +| `LLM_API_KEY` | 空(读 `.env`) | SiliconFlow Bearer Key,存于 gitignored 的 `.env` | +| `LLM_MODEL` | `Qwen/Qwen3.6-35B-A3B` | LLM 模型名 | +| `LLM_TIMEOUT_SECONDS` | `600` | LLM 单请求超时 | +| `OLLAMA_HOST` | `http://192.168.123.70:11434` | Ollama 服务地址 | +| `VLM_MODEL` | `glm-ocr:latest` | VLM OCR 模型 | +| `VLM_PROMPT` | 提取图像中的文字,不要描述图片中的内容 | OCR 提示词(字幕流水线在 ocr-subtitle 工作流的 subtitle-ocr 节点参数中显式指定同一提示词) | +| `VLM_TIMEOUT_SECONDS` | `5` | VLM 单请求整体超时上限(每次调用 5 秒,超时即终止;流式读取同样受此截止约束) | +| `FFMPEG_BIN` | 空 | 显式 ffmpeg 路径(否则 PATH → imageio-ffmpeg) | + +## 启动 + +```bash +uv sync +uv run uvicorn wov_app.main:app --reload +``` + +访问: + +``` +http://127.0.0.1:8000/ 应用中心(上传视频 → 字幕生成) +http://127.0.0.1:8000/tasks.html 任务管理 +http://127.0.0.1:8000/admin.html 管理后台(工作流) +http://127.0.0.1:8000/workflow.html 工作流编排(DAG JSON) +http://127.0.0.1:8000/docs API 文档 +``` + +## Python 环境与 uv 管理 + +- 统一使用 uv 管理虚拟环境和依赖,禁止直接使用 pip 修改依赖。 +- 基础命令:`uv sync`(安装含 dev 组依赖)、`uv run `、 + `uv add `、`uv lock`。 +- 虚拟环境位于 `.venv`,测试依赖在 `[dependency-groups] dev`。 +- 新增依赖时使用 `uv add`,不修改系统 Python 或全局环境。 + +## 孤儿数据清理 + +应用内置后台清理器(`src/wov_app/maintenance.py`),按周期自动清理死数据: + +- **自动删除**:无任务记录的上传/步骤残留目录;COMPLETED 且产物文件全部丢失、 + 超过宽限期(默认 1 小时)的任务记录(下载已全部 404)。 +- **绝不自动删除**:FAILED 任务(可重试)、QUEUED/RUNNING 任务、宽限期内的任务、 + 仍有产物文件的任务。 +- 手动删除任务仅通过删除接口(`DELETE /api/runs/{run_id}`)或管理界面进行。 + +## 任务暂停/继续(2026-08) + +- **状态机**:`QUEUED / RUNNING / PAUSED / COMPLETED / FAILED`。排队中或运行中的 + 任务可暂停(`POST /api/runs/{run_id}/pause`),PAUSED 可继续 + (`POST /api/runs/{run_id}/resume` → 恢复 QUEUED)。 +- **调度器语义**:`next_queued_run` 同时取 QUEUED 与 PAUSED;`execute_run` 在每个 + 节点边界检查状态,被暂停则停下保持 PAUSED(当前节点执行完后才停); + 继续时从产物表(`restore_run_outputs`,剥去"节点ID."前缀还原输出名)重建已完成 + 节点的输出,**跳过已完成节点断点续跑**,最后补做 final_outputs 收尾。 +- **前端**:任务管理页为 QUEUED/RUNNING 提供"暂停"、PAUSED 提供"继续"按钮。 +- **进度日志(数据处理速度)**: + - 调度器:每节点完成打印"任务 X 进度 i/N 节点: Y 耗时 Zs, 运行累计 Ws"; + - subtitle-ocr:`OCR 进度 X/Y 帧 (Z 帧/s)`;llm-filter:`字幕判定进度 X/Y 条 (Z 条/s)` + (线程池 `on_progress` 回调,每任务完成触发); + - whisper:分块转写打印"分块 X/Y 完成 offset=... 耗时 Zs (Nx 实时, 累计 ...s)"。 + +## 测试与覆盖率 + +- 必须达到 100% 行覆盖率(pytest 已配置 `--cov-fail-under=100`,范围 + `src/` 与 `nodes/`)。 +- 测试必须调用真实代码路径,不得在测试类中重写业务逻辑来模拟被测功能。 +- **测试必须使用真实数据**:真实音频(合法 WAV/PCM)、真实 JSON/数据库/文件; + 禁止用占位字节(如 `b"x"`)或伪造结构冒充被测数据——假数据测试只能凑覆盖率, + 无法验证真实行为,视为无意义测试。 +- 只允许在 I/O 边界使用 mock/stub:文件系统、网络、子进程、环境变量、时间、 + **模型推理**(重模型不进入单元测试;注入的假模型必须返回结构真实的分段, + 且必须配套真实模型集成测试,见下)。 +- **真实模型集成测试**:使用真实 faster-whisper 模型 + 真实音频素材验证 + 端到端转写(`tests/test_integration_whisper.py`);本地无模型或素材时跳过, + 有则必须执行,作为对假模型单测的校准。 +- **测试资产存放 `testdata/`**:图片(`ocr_text.png`)、语音(`speech_60s.wav`) + 等测试媒体一次性生成后入库,测试直接复用,**禁止在测试执行时再生成**; + 缺失时测试跳过而非现场生成。大体积视频素材放 `data/testdata/`(gitignored)。OCR 相关资产: +`ocr_text.png`(有文字)、`ocr_notext.png`(无文字帧)、`subtitle_10s.mp4` +(烧录 SUB 001@1-4s / SUB 002@6-9s 的 10s 测试视频)、`test_real_hav_sub.png` +(真实视频字幕截图,VLM 集成测试期望识别出"还有没有什么困扰 或者奇怪的地方吗")。 +- **开发流程强制 TDD(红-绿-重构)**:任何新功能/修复必须先写失败测试(红), + 再实现最小代码让其通过(绿),最后重构保持整洁;不允许先写实现后补测试。 +- 测试运行:`uv run pytest`;全部测试位于 `tests/`。 +- 100% 行覆盖率只保证代码路径被覆盖,不覆盖端口占用、防火墙、权限等 + 外部环境状态;端口问题用启动检查、端口检查与 uvicorn 冒烟测试补充。 +- 本地出现 `WinError 10013` / `WinError 10048` 时,先用 + `netstat -ano | findstr :` 确认是否有残留监听进程。 + +## 代码注释规范 + +- 本仓库所有源码(Python、JavaScript、HTML、CSS、TOML 等支持注释的文件) + 必须配有详细中文注释,说明模块/文件职责、核心类与函数的作用以及关键逻辑, + 确保后续维护人员无需通读全部实现即可快速理解工作原理。 +- 新增或修改代码时,必须同步补充或更新对应注释;不得删除已有注释。 +- 测试代码同样必须配有中文注释,说明每条测试验证的行为与覆盖的路径。 +- JSON 数据文件(`manifests/*.json`)按 JSON 规范不支持注释,字段语义以 + `src/wov_sdk/models.py` 的 `NodeManifest` 模型注释和本文档为准; + 修改 JSON 字段时须同步更新文档。 + +## 目标运行环境 + +- 本服务的最终部署目标是 Linux,通常以 Docker/Kubernetes 容器运行。 +- 当前 Windows 只作为本地开发环境,不允许在业务代码中写死 Windows 路径、 + 盘符或 Windows 专用命令。 +- 路径处理统一使用 `pathlib`。 +- ffmpeg 在 Linux 上可使用系统包,也允许通过 `imageio-ffmpeg` 使用内置 + 二进制,节点代码不能假设 ffmpeg 一定在 PATH。 +- 测试必须可以在 Windows 和 Linux 上运行;涉及平台分支的代码应同时覆盖 + 两种路径解析。 + +## Windows / PowerShell 执行规则 + +- 默认 shell 视为 Windows PowerShell 5.1;不要假设 Bash、zsh 或 PowerShell 7。 + 必要时先查 `$PSVersionTable.PSVersion`。 +- 禁止把 Bash 语法交给 PowerShell:`python - <<'PY'`、`cat <<$` 或引号时默认用单引号。 +- 外部程序路径可能有空格时,用 `& 'C:\path with spaces\tool.exe' arg1`。 +- 文件操作优先 PowerShell 原生命令和 `-LiteralPath`。 +- 复杂 Python 不用 `python -c`;涉及 SQL、JSON、中文、反斜杠路径、换行或 + 多层引号时,用仓库脚本或临时 `.py` 文件。 +- 禁止在 PowerShell 用 Bash here-doc。临时传 Python 源码只允许 PowerShell + here-string,且尽量保持 ASCII。 +- Python 源码含中文常量时,不通过 PowerShell 管道传给 `python -`;用 UTF-8 + 脚本文件、仓库脚本或 `\uXXXX`。 +- 搜索文本/文件优先 `rg` / `rg --files`。 +- 数据库或生产内容写操作前先查询当前数据;写入必须有明确筛选条件,禁止 + 无条件 `DELETE` / `UPDATE`。 +- 同一 PowerShell 命令连续失败两次后,停止微调长命令;改短命令、脚本文件、 + 数组 splatting 或分步验证。 + +## 关键设计约束(北极星不变式) + +- 节点之间不直接调用,只通过产物 URI 交换数据;中间产物落在共享存储 + (`data/storage`),不放在节点模块内部。 +- 工作流必须是数据文件或数据库记录(workflow_versions 表存 DAG JSON), + 不允许把步骤顺序写死在应用代码里。 +- 节点注册表是节点调用的唯一入口;API 与调度器不绕过 registry 直接执行 + 节点逻辑。 +- 协议数据模型(wov_sdk)要长期稳定,宁可先少做功能,也不轻易改协议。 +- 存储、队列、调度器都要通过抽象边界隔离,方便从单机实现替换为分布式实现。 +- 用户端永远只看到"输入 -> 进度 -> 结果",不暴露工作流细节。 +- 单体对分布式版的三处降级:无子进程隔离、无空闲 TTL 回收(模型常驻, + 仅懒加载)、慢任务无法强制中断(由节点自身超时兜底)。 + +## 单体化说明 + +- 由原 7 个独立仓库合并:wov-api、wov-web、wov-sdk、wov-node-echo、 + wov-node-ffmpeg、wov-node-whisper、wov-node-llm、wov-node-ass。 +- 删除内容:`NodeManager`(子进程生命周期)、节点 HTTP 服务端 + (`wov_sdk.server`)、节点注册/实例管理 API 与页面、node_instances 表、 + 各节点的 `__main__` 进程入口。 +- 保留内容:协议数据模型、工作流 DAG 数据化、调度拓扑执行、上传/进度/下载/ + 重试 API、静态前端、SQLite Repository 层、本地优先模型加载。 diff --git a/README.md b/README.md new file mode 100644 index 0000000..d01116b --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# VRSub + +为视频生成 **VR 双眼字幕**的单体应用:API、调度器与全部节点在同一进程内运行, +单仓库、单环境、单命令启动。由原分布式 WOV 多仓库合并而来,详细约定见 +[AGENTS.md](./AGENTS.md)。 + +## 快速开始 + +```bash +uv sync +uv run uvicorn wov_app.main:app --reload +``` + +访问 `http://127.0.0.1:8000/` 上传视频,自动执行"提音 → 转写 → 翻译 → ASS"。 + +- 模型权重本地优先:把 whisper 模型放在 `model/faster-whisper-large-v3` + (含 `model.bin`)即可完全离线运行。 +- LLM 翻译默认使用 SiliconFlow(`Qwen/Qwen3.6-35B-A3B`),API Key 放在 + gitignored 的 `.env`(`LLM_API_KEY=sk-...`),启动时自动加载;也可用 + `LLM_API_BASE` / `LLM_MODEL` 环境变量覆盖。 + +## 目录 + +| 路径 | 说明 | +| --- | --- | +| `src/wov_sdk/` | 协议数据模型(与分布式版兼容) | +| `src/wov_app/` | 应用层:API、注册表、调度器、数据库 | +| `nodes/` | 进程内节点实现(echo/ffmpeg/whisper/llm/ass) | +| `manifests/` | 节点清单 JSON | +| `web/` | 静态前端 | +| `model/` | 本地模型权重(gitignored) | +| `data/` | SQLite 与存储(gitignored) | +| `tests/` | 测试(100% 行覆盖率) | + +## 测试 + +```bash +uv run pytest +``` + +## 与分布式版的关系 + +- 协议数据模型、工作流 DAG 数据化、调度拓扑执行保持不变。 +- 已移除:子进程节点、节点 HTTP 协议、节点注册/实例管理、TTL 回收。 +- 未来回退分布式时,只需为 `registry.invoke` 重新加上进程边界。 diff --git a/manifests/ass.json b/manifests/ass.json new file mode 100755 index 0000000..8417ff9 --- /dev/null +++ b/manifests/ass.json @@ -0,0 +1,21 @@ +{ + "id": "srt-to-dual-eye-ass", + "name": "SRT to Dual-Eye ASS", + "version": "0.1.0", + "capability": "subtitle", + "repo_dir": "wov-node-ass", + "command": ["python", "-m", "wov_node_ass"], + "env": { + "WOV_NODE_PORT": "0" + }, + "input_schema": { + "cn_srt_uri": "file" + }, + "output_schema": { + "ass_uri": "file" + }, + "max_concurrency": 1, + "idle_ttl_seconds": 60, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/echo.json b/manifests/echo.json new file mode 100755 index 0000000..2838ca3 --- /dev/null +++ b/manifests/echo.json @@ -0,0 +1,22 @@ +{ + "id": "echo", + "name": "Echo Node", + "version": "0.1.0", + "capability": "echo", + "repo_dir": "wov-node-echo", + "command": ["python", "-m", "wov_node_echo"], + "env": { + "WOV_NODE_PORT": "0" + }, + "input_schema": { + "text": "string" + }, + "output_schema": { + "text": "string", + "file_uri": "file" + }, + "max_concurrency": 1, + "idle_ttl_seconds": 15, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/ffmpeg.json b/manifests/ffmpeg.json new file mode 100755 index 0000000..9537277 --- /dev/null +++ b/manifests/ffmpeg.json @@ -0,0 +1,21 @@ +{ + "id": "ffmpeg-extract", + "name": "FFmpeg Audio Extract", + "version": "0.1.0", + "capability": "media", + "repo_dir": "wov-node-ffmpeg", + "command": ["python", "-m", "wov_node_ffmpeg"], + "env": { + "WOV_NODE_PORT": "0" + }, + "input_schema": { + "video_uri": "file" + }, + "output_schema": { + "audio_uri": "file" + }, + "max_concurrency": 1, + "idle_ttl_seconds": 60, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/frame-extract.json b/manifests/frame-extract.json new file mode 100644 index 0000000..bc725b4 --- /dev/null +++ b/manifests/frame-extract.json @@ -0,0 +1,15 @@ +{ + "id": "frame-extract", + "name": "Frame Extract", + "version": "0.1.0", + "capability": "frame-extract", + "repo_dir": "nodes", + "command": ["python", "-m", "frame_extract"], + "env": {}, + "input_schema": { "video_uri": "file" }, + "output_schema": { "frames_manifest": "file", "frame_count": "integer" }, + "max_concurrency": 1, + "idle_ttl_seconds": 300, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/llm-filter.json b/manifests/llm-filter.json new file mode 100644 index 0000000..80b8e73 --- /dev/null +++ b/manifests/llm-filter.json @@ -0,0 +1,15 @@ +{ + "id": "llm-filter", + "name": "LLM Subtitle Filter", + "version": "0.1.0", + "capability": "llm-filter", + "repo_dir": "nodes", + "command": ["python", "-m", "llm_filter"], + "env": {}, + "input_schema": { "srt_uri": "file" }, + "output_schema": { "srt_uri": "file", "kept": "integer", "removed": "integer" }, + "max_concurrency": 1, + "idle_ttl_seconds": 300, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/llm.json b/manifests/llm.json new file mode 100755 index 0000000..86d2670 --- /dev/null +++ b/manifests/llm.json @@ -0,0 +1,21 @@ +{ + "id": "llm-translate", + "name": "LLM Subtitle Translate", + "version": "0.1.0", + "capability": "llm", + "repo_dir": "wov-node-llm", + "command": ["python", "-m", "wov_node_llm"], + "env": { + "WOV_NODE_PORT": "0" + }, + "input_schema": { + "srt_uri": "file" + }, + "output_schema": { + "cn_srt_uri": "file" + }, + "max_concurrency": 1, + "idle_ttl_seconds": 60, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/subtitle-ocr.json b/manifests/subtitle-ocr.json new file mode 100644 index 0000000..0dab369 --- /dev/null +++ b/manifests/subtitle-ocr.json @@ -0,0 +1,15 @@ +{ + "id": "subtitle-ocr", + "name": "Subtitle OCR", + "version": "0.1.0", + "capability": "subtitle-ocr", + "repo_dir": "nodes", + "command": ["python", "-m", "subtitle_ocr"], + "env": {}, + "input_schema": { "frames_manifest": "file" }, + "output_schema": { "srt_uri": "file", "count": "integer" }, + "max_concurrency": 1, + "idle_ttl_seconds": 300, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/vlm.json b/manifests/vlm.json new file mode 100644 index 0000000..8d9043e --- /dev/null +++ b/manifests/vlm.json @@ -0,0 +1,15 @@ +{ + "id": "vlm-ocr", + "name": "VLM OCR", + "version": "0.1.0", + "capability": "ocr", + "repo_dir": "nodes", + "command": ["python", "-m", "vlm_ocr"], + "env": {}, + "input_schema": { "image_uri": "file" }, + "output_schema": { "text": "string", "text_uri": "file" }, + "max_concurrency": 1, + "idle_ttl_seconds": 300, + "health_timeout_seconds": 10, + "keep_warm": false +} diff --git a/manifests/whisper.json b/manifests/whisper.json new file mode 100755 index 0000000..e26b636 --- /dev/null +++ b/manifests/whisper.json @@ -0,0 +1,21 @@ +{ + "id": "faster-whisper", + "name": "Faster Whisper ASR", + "version": "0.1.0", + "capability": "asr", + "repo_dir": "wov-node-whisper", + "command": ["python", "-m", "wov_node_whisper"], + "env": { + "WOV_NODE_PORT": "0" + }, + "input_schema": { + "audio_uri": "file" + }, + "output_schema": { + "srt_uri": "file" + }, + "max_concurrency": 1, + "idle_ttl_seconds": 300, + "health_timeout_seconds": 30, + "keep_warm": false +} diff --git a/nodes/__init__.py b/nodes/__init__.py new file mode 100644 index 0000000..5eec7c1 --- /dev/null +++ b/nodes/__init__.py @@ -0,0 +1,9 @@ +"""进程内节点实现包。 + +每个模块对应一个节点,提供统一的 invoke(request) -> InvokeResponse 处理器, +由 wov_app.registry 在启动时静态注册,调度器按 node_type 直接调用。 +""" + +from nodes import ass, echo, ffmpeg, llm, whisper + +__all__ = ["ass", "echo", "ffmpeg", "llm", "whisper"] diff --git a/nodes/adaptive_pool.py b/nodes/adaptive_pool.py new file mode 100644 index 0000000..14a2bb8 --- /dev/null +++ b/nodes/adaptive_pool.py @@ -0,0 +1,177 @@ +"""自适应线程池。 + +用于对耗时的独立子任务(如逐帧 VLM OCR)做弹性并发加速: +- 以滚动时间窗口统计已完成任务的平均响应时间; +- 窗口内平均响应 < fast_threshold(默认 0.3s)→ 增加 1 个工作线程(上限 max_workers); +- 窗口内平均响应 > slow_threshold(默认 1.0s)→ 减少 1 个工作线程(下限 min_workers)。 + +线程数从 min_workers(默认 1)起步,按实测负载自适应:服务端空闲(响应快) +就加大并发,服务端变慢就退避,避免盲目并发压垮上游(如本地 Ollama)。 + +线程安全说明:worker 会在多个线程中并发调用,调用方需保证 worker 无共享 +可变状态(registry 处理器是纯函数,符合要求);结果按输入顺序返回。 +""" + +from __future__ import annotations + +import queue +import threading +import time +from typing import Callable + +# 停止哨兵:压入队列让空闲工作线程退出(用于缩容)。 +_POISON = object() + + +def decide( + current: int, + avg: float, + min_workers: int, + max_workers: int, + fast_threshold: float, + slow_threshold: float, +) -> int: + """根据窗口平均响应时间返回调整后的目标线程数(纯决策函数)。 + + 响应快(avg < fast_threshold)且未达上限 → 加 1;响应慢 + (avg > slow_threshold)且未达下限 → 减 1;其余情况保持不变。 + """ + if avg < fast_threshold and current < max_workers: + return current + 1 + if avg > slow_threshold and current > min_workers: + return current - 1 + return current + + +class AdaptiveThreadPool: + """自适应线程池:单次 map 按输入顺序返回全部结果。""" + + def __init__( + self, + worker: Callable, + min_workers: int = 1, + max_workers: int = 16, + window_seconds: float = 10.0, + fast_threshold: float = 0.3, + slow_threshold: float = 1.0, + clock=time.monotonic, + on_progress: Callable[[int, int, float], None] | None = None, + ) -> None: + """初始化;clock 可注入便于测试;on_progress(done,total,rate) 每次完成回调。""" + self._worker = worker + self.min_workers = max(1, min_workers) + self.max_workers = max(self.min_workers, max_workers) + self.window_seconds = window_seconds + self.fast_threshold = fast_threshold + self.slow_threshold = slow_threshold + self._clock = clock + self._queue: queue.Queue = queue.Queue() + # 并发目标线程数:决策/缩容的权威依据(线程退出是异步的,不能用 + # len(_threads) 判断,否则并发缩容会重复放哨兵把全部线程毒死)。 + self._target_workers = 0 + self._threads: list[threading.Thread] = [] + self._results: list = [] + self._lock = threading.Lock() + self._stop = threading.Event() + # 滚动窗口起点与已记录的单次耗时。 + self._window_start = clock() + # 观测到的最大并发线程数(供测试与监控)。 + self.max_concurrency = 0 + # 进度回调与计数:on_progress(已完成数, 总数, 平均速度/秒)。 + self._on_progress = on_progress + self._completed = 0 + self._total = 0 + self._started_at = 0.0 + self._window_times: list[float] = [] + + def _run(self) -> None: + """工作线程主循环:取任务 → 执行 → 记录耗时并自适应评估。""" + try: + while not self._stop.is_set(): + try: + seq, item = self._queue.get(timeout=0.2) + except queue.Empty: + continue + if item is _POISON: + # 缩容哨兵:处理完即可退出(队列计数照常)。 + self._queue.task_done() + break + start = self._clock() + try: + result = self._worker(item) + except Exception as exc: + # 单任务异常不拖垮整体:以异常对象作为结果,由调用方判定。 + result = exc + finally: + elapsed = self._clock() - start + self._results.append((seq, result)) + # 进度回调:已完成数、总数与平均处理速度(条/秒)。 + self._completed += 1 + if self._on_progress is not None: + elapsed_total = max(self._clock() - self._started_at, 1e-9) + self._on_progress( + self._completed, self._total, self._completed / elapsed_total + ) + self._tick(elapsed) + self._queue.task_done() + finally: + # 无论何种退出路径都从线程列表移除,保证线程数统计准确。 + with self._lock: + if threading.current_thread() in self._threads: + self._threads.remove(threading.current_thread()) + + def _tick(self, elapsed: float) -> None: + """记录一次完成耗时;窗口满时按平均响应时间调整线程数。""" + self._window_times.append(elapsed) + if self._clock() - self._window_start < self.window_seconds: + return + avg = sum(self._window_times) / len(self._window_times) + self._window_start = self._clock() + self._window_times.clear() + with self._lock: + current = self._target_workers + self._resize( + decide( + current, avg, self.min_workers, self.max_workers, + self.fast_threshold, self.slow_threshold, + ) + ) + + def _resize(self, target: int) -> None: + """调整并发目标:扩容启动新线程;缩容压入等量停止哨兵(幂等)。 + + 以 _target_workers 为当前值:重复调用同一 target 不会重复放哨兵, + 避免并发缩容把所有线程毒死导致队列任务无人处理而挂起。 + """ + with self._lock: + current = self._target_workers + if target > current: + self.max_concurrency = max(self.max_concurrency, target) + for _ in range(target - current): + thread = threading.Thread(target=self._run, daemon=True) + thread.start() + self._threads.append(thread) + self._target_workers = target + elif target < current: + for _ in range(current - target): + self._queue.put((None, _POISON)) + self._target_workers = target + + def map(self, items) -> list: + """按输入顺序返回每个 item 经 worker 处理后的结果列表。""" + self._results = [] + self._completed = 0 + self._total = len(items) + self._started_at = self._clock() + self._stop.clear() + self._resize(self.min_workers) + for seq, item in enumerate(items): + self._queue.put((seq, item)) + self._queue.join() + self._stop.set() + with self._lock: + threads = list(self._threads) + for thread in threads: + thread.join(1.0) + self._results.sort(key=lambda pair: pair[0]) + return [result for _, result in self._results] diff --git a/nodes/ass.py b/nodes/ass.py new file mode 100755 index 0000000..7417e6a --- /dev/null +++ b/nodes/ass.py @@ -0,0 +1,98 @@ +"""SRT 转 ASS 节点。 + +单体版中作为进程内节点模块,由调度器直接调用。解析标准 SRT 后生成 ASS +文件,其中同一句字幕同时输出 LeftEye 与 RightEye 两个样式,分别落在屏幕 +左右两半,形成 VR 双眼叠加效果。 +""" + +from __future__ import annotations + +from pathlib import Path + +from wov_sdk.models import InvokeRequest, InvokeResponse + +def _ass_header(resolution: str) -> str: + """生成 ASS 文件头:脚本信息、左右眼样式和事件格式。""" + width, height = resolution.lower().split("x", 1) + # 左眼样式占左半边,右眼样式占右半边,各留 50px 内边距。 + left_margin = 50 + right_margin = int(width) - 50 + return f"""[Script Info] +Title: VR Dual-Eye Subtitle +ScriptType: v4.00+ +Collisions: Normal +PlayResX: {width} +PlayResY: {height} +WrapStyle: 1 +ScaledBorderAndShadow: yes + +[V4+ Styles] +Format: Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,Encoding +Style: LeftEye,Arial,50,&H00FFFFFF,&H000000FF,&H00000000,&H80000000,0,0,0,0,50,100,0,0,1,4,0,2,{left_margin},{int(width) // 2},{int(height) // 2 + 60},1 +Style: RightEye,Arial,50,&H00FFFFFF,&H000000FF,&H00000000,&H80000000,0,0,0,0,50,100,0,0,1,4,0,2,{int(width) // 2},{right_margin},{int(height) // 2 + 60},1 + +[Events] +Format: Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text +""" + + +def parse_srt(text: str) -> list[tuple[str, str, str]]: + """把 SRT 文本解析为 (开始时间, 结束时间, 文本) 条目列表。""" + entries: list[tuple[str, str, str]] = [] + lines = text.splitlines() + index = 0 + while index < len(lines): + # 跳过序号前的空行,兼容文件开头有换行的情况。 + if not lines[index].strip(): + index += 1 + continue + # 跳过序号行,直接读取下一行时间轴。 + index += 1 + if index >= len(lines): + break + time_line = lines[index].strip() + index += 1 + # 时间轴必须包含分隔符,否则按畸形输入跳过。 + if " --> " not in time_line: + continue + # SRT 使用逗号毫秒,ASS 使用点号,需要转换。 + start, end = [part.replace(",", ".") for part in time_line.split(" --> ")] + # 连续读取非空行作为字幕文本,多行用 ASS 换行符 \N 连接。 + text_lines: list[str] = [] + while index < len(lines) and lines[index].strip(): + text_lines.append(lines[index]) + index += 1 + entries.append((start, end, r"\N".join(text_lines))) + index += 1 + return entries + + +def write_ass(entries: list[tuple[str, str, str]], output_path: Path, resolution: str) -> None: + """把解析后的条目写入 ASS 文件,每个条目输出左右眼两行 Dialogue。""" + lines = [_ass_header(resolution)] + for start, end, text in entries: + # an2 对齐到屏幕中央偏下,保证双眼字幕视线自然。 + lines.append(f"Dialogue: 0,{start},{end},LeftEye,,0,0,0,,{{\\an2}}{text}") + lines.append(f"Dialogue: 0,{start},{end},RightEye,,0,0,0,,{{\\an2}}{text}") + output_path.write_text("\n".join(lines) + "\n", encoding="utf-8") + + +def invoke(request: InvokeRequest) -> InvokeResponse: + """把 cn_srt_uri 指向的 SRT 转为 dual_eye.ass 产物。""" + srt_uri = request.inputs.get("cn_srt_uri") + if not srt_uri: + return InvokeResponse(status="failed", error="cn_srt_uri is required") + + srt_path = Path(srt_uri) + if not srt_path.is_file(): + return InvokeResponse(status="failed", error="srt file not found") + + entries = parse_srt(srt_path.read_text(encoding="utf-8")) + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + output_path = output_dir / "dual_eye.ass" + # 分辨率默认 3840x1920,覆盖常见 VR 视频尺寸。 + resolution = str(request.params.get("resolution", "3840x1920")) + write_ass(entries, output_path, resolution) + return InvokeResponse(status="completed", outputs={"ass_uri": str(output_path)}) + diff --git a/nodes/echo.py b/nodes/echo.py new file mode 100755 index 0000000..898cdfd --- /dev/null +++ b/nodes/echo.py @@ -0,0 +1,50 @@ +"""Echo 节点。 + +单体版中作为进程内节点模块存在,由调度器直接调用 invoke 处理器,不再启动 +独立 HTTP 服务。保留该节点用于验证节点协议与注册表链路。 +""" + +from __future__ import annotations + +from pathlib import Path + +from wov_sdk.models import InvokeRequest, InvokeResponse + +def _resolve_input_text(request: InvokeRequest, node_root: Path) -> str: + """按优先级解析输入文本:直接文本 > 文件 URI > 默认字符串。""" + # 优先使用请求中直接携带的 text 字段。 + text = request.inputs.get("text") + if text is not None: + return str(text) + + # 其次读取 file_uri 指向的文件;相对路径以单体根目录为基准。 + file_uri = request.inputs.get("file_uri") + if file_uri: + path = Path(file_uri) + if not path.is_absolute(): + path = node_root / path + return path.read_text(encoding="utf-8") + + # 都没有时返回固定文本,保证节点总有可演示的输出。 + return "echo" + + +def invoke(request: InvokeRequest) -> InvokeResponse: + """处理节点调用:把解析出的文本写入产物并返回 URI。""" + # 单体根目录用于解析相对文件路径(nodes/ 的上一级)。 + node_root = Path(__file__).resolve().parent.parent + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + + text = _resolve_input_text(request, node_root) + # 产物必须落在请求给定的 output_dir,调度器按 run 与节点组织目录。 + output_path = output_dir / "echo.txt" + output_path.write_text(text, encoding="utf-8") + + return InvokeResponse( + status="completed", + outputs={ + "text": text, + "file_uri": str(output_path), + }, + ) diff --git a/nodes/ffmpeg.py b/nodes/ffmpeg.py new file mode 100755 index 0000000..23db1bc --- /dev/null +++ b/nodes/ffmpeg.py @@ -0,0 +1,79 @@ +"""FFmpeg 提音节点。 + +单体版中作为进程内节点模块,由调度器直接调用。ffmpeg 解析顺序为: +FFMPEG_BIN 环境变量 > PATH 中的 ffmpeg > imageio-ffmpeg 内置二进制。 +""" + +from __future__ import annotations + +import os +import shutil +import subprocess +from pathlib import Path + +from wov_sdk.models import InvokeRequest, InvokeResponse + +def _bundled_ffmpeg() -> str | None: + """尝试获取 imageio-ffmpeg 内置的 ffmpeg 可执行文件路径。""" + try: + import imageio_ffmpeg + + return imageio_ffmpeg.get_ffmpeg_exe() + except Exception: # noqa: BLE001 + # 未安装 imageio-ffmpeg 或获取失败时返回 None,交由上层回退。 + return None + + +def _ffmpeg_bin() -> str: + """按优先级解析 ffmpeg 可执行文件,返回最终命令路径。""" + # 显式配置优先,便于部署环境指定自定义二进制。 + configured = os.getenv("FFMPEG_BIN") + if configured: + return configured + # 其次查找 PATH 中的系统 ffmpeg。 + found = shutil.which("ffmpeg") + if found: + return found + # 最后回退到 imageio-ffmpeg 内置二进制;都没有时保留 "ffmpeg" 交给调用失败处理。 + return _bundled_ffmpeg() or "ffmpeg" + + +def invoke(request: InvokeRequest) -> InvokeResponse: + """提取输入视频/音频的标准化音频,产物为 audio.wav。""" + video_uri = request.inputs.get("video_uri") + if not video_uri: + return InvokeResponse(status="failed", error="video_uri is required") + + # 找不到可用 ffmpeg 时直接返回失败,避免子进程报晦涩错误。 + ffmpeg = _ffmpeg_bin() + if shutil.which(ffmpeg) is None and not Path(ffmpeg).is_file(): + return InvokeResponse(status="failed", error="ffmpeg not found") + + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + output_path = output_dir / "audio.wav" + # ASR 节点默认期望 16kHz 单声道;参数可覆盖。 + channels = str(request.params.get("channels", 1)) + sample_rate = str(request.params.get("sample_rate", 16000)) + command = [ + ffmpeg, + "-y", # 覆盖可能存在的同名输出文件。 + "-i", + str(video_uri), + "-vn", # 丢弃视频流,只保留音频。 + "-ac", + channels, + "-ar", + sample_rate, + str(output_path), + ] + result = subprocess.run(command, capture_output=True, text=True) + if result.returncode != 0: + # 返回 stderr 尾部,保留最有诊断价值的错误信息。 + return InvokeResponse( + status="failed", + error=result.stderr[-2000:] or "ffmpeg failed", + ) + return InvokeResponse(status="completed", outputs={"audio_uri": str(output_path)}) + + diff --git a/nodes/frame_extract.py b/nodes/frame_extract.py new file mode 100644 index 0000000..c2fdfb6 --- /dev/null +++ b/nodes/frame_extract.py @@ -0,0 +1,178 @@ +"""视频抽帧节点。 + +按**帧间隔**从视频抽取帧:解析视频帧率后,帧间隔 step = round(间隔秒 × fps), +用 ffmpeg 的 select 过滤器按帧号(n mod step == 0)精确取帧——每帧都是真实 +视频帧,帧时间 = 帧号 / fps,避免按时间 seek(-ss 秒)造成的取整漂移。 +再按 crop 相对比例 [x,y,w,h](0~1)裁切出字幕区域,供 vlm-ocr 等下游节点 +使用。产物为 frames.json 清单:[{"time": 帧时间秒, "image_uri": 帧图片路径}, ...]。 +""" + +from __future__ import annotations + +import json +import re +import subprocess +from pathlib import Path + +from nodes.ffmpeg import _ffmpeg_bin +from wov_app.logging import get_logger +from wov_sdk.models import InvokeRequest, InvokeResponse + +logger = get_logger("frame-extract") + +# 默认裁切:画面底部 18% 区域(常见字幕位置)。 +DEFAULT_CROP = [0.0, 0.82, 1.0, 0.18] + + +def _parse_crop(raw) -> list[float] | None: + """解析并校验 crop 相对比例 [x,y,w,h](0~1 且不越出画面)。""" + try: + crop = [float(value) for value in raw] + except (TypeError, ValueError): + return None + if len(crop) != 4: + return None + x, y, w, h = crop + if not (0 <= x <= 1 and 0 <= y <= 1 and 0 <= w <= 1 and 0 <= h <= 1): + return None + if x + w > 1.001 or y + h > 1.001: + return None + return crop + + +def _video_size(video: Path, ffmpeg_bin: str) -> tuple[int, int] | None: + """从 ffmpeg -i 输出解析视频分辨率,避免依赖 ffprobe。""" + result = subprocess.run( + [ffmpeg_bin, "-i", str(video)], + capture_output=True, + text=True, + ) + for line in (result.stderr or "").splitlines(): + if "Video:" not in line: + continue + match = re.search(r"(\d{2,5})x(\d{2,5})", line) + if match: + return int(match.group(1)), int(match.group(2)) + return None + + +def _video_duration(video: Path, ffmpeg_bin: str) -> float | None: + """从 ffmpeg -i 输出解析总时长(秒)。""" + result = subprocess.run( + [ffmpeg_bin, "-i", str(video)], + capture_output=True, + text=True, + ) + match = re.search(r"Duration:\s*(\d+):(\d+):(\d+(?:\.\d+)?)", result.stderr or "") + if match: + hours = int(match.group(1)) + minutes = int(match.group(2)) + seconds = float(match.group(3)) + return hours * 3600 + minutes * 60 + seconds + return None + + +def _video_fps(video: Path, ffmpeg_bin: str) -> float | None: + """从 ffmpeg -i 输出解析帧率,支持小数(29.97 fps)与有理数(30000/1001 fps)。""" + result = subprocess.run( + [ffmpeg_bin, "-i", str(video)], + capture_output=True, + text=True, + ) + for line in (result.stderr or "").splitlines(): + if "Video:" not in line: + continue + match = re.search(r"(\d+)/(\d+)\s*fps", line) + if match: + return int(match.group(1)) / int(match.group(2)) + match = re.search(r"(\d+(?:\.\d+)?)\s*fps", line) + if match: + return float(match.group(1)) + return None + + +def _frame_step(fps: float, interval: float) -> int: + """帧间隔换算:每 step 帧取一帧(step=round(间隔秒×fps),至少为 1)。""" + return max(1, int(round(interval * fps))) + + +def invoke(request: InvokeRequest) -> InvokeResponse: + """按帧间隔抽取并裁切视频帧,输出 frames.json 清单。""" + video_uri = request.inputs.get("video_uri") + if not video_uri: + return InvokeResponse(status="failed", error="video_uri is required") + video = Path(video_uri) + if not video.is_file(): + return InvokeResponse(status="failed", error="video file not found") + + interval = float(request.params.get("interval_seconds", 0.5)) + crop = _parse_crop(request.params.get("crop", DEFAULT_CROP)) + if crop is None: + return InvokeResponse(status="failed", error="invalid crop") + if interval <= 0: + return InvokeResponse(status="failed", error="invalid interval_seconds") + + ffmpeg_bin = _ffmpeg_bin() + size = _video_size(video, ffmpeg_bin) + if size is None: + return InvokeResponse(status="failed", error="cannot read video size") + duration = _video_duration(video, ffmpeg_bin) + if duration is None or duration <= 0: + return InvokeResponse(status="failed", error="cannot read video duration") + fps = _video_fps(video, ffmpeg_bin) + if fps is None or fps <= 0: + return InvokeResponse(status="failed", error="cannot read video fps") + + # 把"每多少秒一帧"换算为"每多少帧取一帧",按帧号取帧是帧精确的。 + step = _frame_step(fps, interval) + width, height = size + x_px = int(round(crop[0] * width)) + y_px = int(round(crop[1] * height)) + w_px = max(1, int(round(crop[2] * width))) + h_px = max(1, int(round(crop[3] * height))) + + output_dir = Path(request.output_dir) + frames_dir = output_dir / "frames" + frames_dir.mkdir(parents=True, exist_ok=True) + # 单次解码全片:select 按帧号(n mod step == 0)精确取帧,随后对选中帧 + # 裁切字幕区域并压缩到 720p 内(仅缩小)——过大的输入图会触发 glm-ocr + # 的重复循环 bug(M-RoPE delta),源头规避。 + result = subprocess.run( + [ + ffmpeg_bin, + "-y", + "-hide_banner", + "-loglevel", + "error", + "-i", + str(video), + "-vf", + ( + f"select='not(mod(n\\,{step}))'," + f"crop={w_px}:{h_px}:{x_px}:{y_px}," + "scale=1280:720:force_original_aspect_ratio=decrease:force_divisible_by=2" + ), + # 只写出被选中的帧,避免 CFR 补帧产生重复文件。 + "-vsync", + "vfr", + str(frames_dir / "frame_%04d.png"), + ], + capture_output=True, + text=True, + ) + if result.returncode != 0: + return InvokeResponse(status="failed", error=result.stderr[-500:] or "ffmpeg failed") + + # 第 k 个输出文件对应原始帧号 k×step,时间 = 帧号 / fps(帧精确,无累计偏差)。 + files = sorted(frames_dir.glob("frame_*.png")) + manifest = [ + {"time": round((index * step) / fps, 3), "image_uri": str(path)} + for index, path in enumerate(files) + ] + manifest_path = output_dir / "frames.json" + manifest_path.write_text(json.dumps(manifest, ensure_ascii=False), encoding="utf-8") + logger.info("抽帧完成: %d 帧, 帧间隔 %d, 裁切 %dx%d+%d+%d", len(files), step, w_px, h_px, x_px, y_px) + return InvokeResponse( + status="completed", + outputs={"frames_manifest": str(manifest_path), "frame_count": len(files)}, + ) diff --git a/nodes/llm.py b/nodes/llm.py new file mode 100755 index 0000000..a2126f1 --- /dev/null +++ b/nodes/llm.py @@ -0,0 +1,103 @@ +"""LLM 翻译节点。 + +单体版中作为进程内节点模块,由调度器直接调用。接收 SRT,提取纯文本行 +分批调用 LLM,再把译文回填到原 SRT 结构并输出 cn.srt。 +""" + +from __future__ import annotations + +import json +import os +import urllib.error +import urllib.request +from pathlib import Path + +from wov_sdk.models import InvokeRequest, InvokeResponse +# 单次 LLM 请求携带的字幕行数;过大会超出模型上下文,过小则请求次数过多。 +CHUNK_SIZE = 20 + + +def translate_lines(lines: list[str], params: dict) -> list[str]: + """分批调用 LLM 翻译纯文本行,返回顺序一致的译文列表。""" + # 接口地址、Key 和模型均可通过环境变量配置(.env 自动加载), + # 默认指向 SiliconFlow 兼容接口,模型为 DeepSeek-V4-Flash。 + api_base = os.getenv( + "LLM_API_BASE", + "https://api.siliconflow.cn/v1/chat/completions", + ) + api_key = os.getenv("LLM_API_KEY", "") + # 单次请求超时可配置,长文本翻译场景下需要放宽。 + request_timeout = float(os.getenv("LLM_TIMEOUT_SECONDS", "600")) + model = str(params.get("model") or os.getenv("LLM_MODEL", "Qwen/Qwen3.6-35B-A3B")) + target_language = str(params.get("target_language", "zh-CN")) + # 系统提示词约束模型只输出译文,保证行数和顺序可回填。 + system_prompt = ( + "你是专业字幕翻译。将用户提供的日文字幕翻译为" + f"{target_language}。只返回译文,保持行数和顺序,不要添加解释。" + ) + translated: list[str] = [] + # 按 CHUNK_SIZE 分批发送,避免单次请求超过模型上下文限制。 + for start in range(0, len(lines), CHUNK_SIZE): + chunk = lines[start : start + CHUNK_SIZE] + body = { + "model": model, + "messages": [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": "\n".join(chunk)}, + ], + # 关闭推理模型的思考模式:Qwen3 等模型默认会把推理过程写入 + # reasoning_content,导致 content 为空或截断译文;关闭后直接输出译文。 + "enable_thinking": False, + # 放宽输出上限,避免长批次翻译被模型默认 max_tokens 截断。 + "max_tokens": 8192, + } + headers = {"Content-Type": "application/json"} + # 配置了 Key 时附带 Bearer 鉴权头。 + if api_key: + headers["Authorization"] = f"Bearer {api_key}" + request = urllib.request.Request( + api_base, + data=json.dumps(body).encode("utf-8"), + headers=headers, + method="POST", + ) + with urllib.request.urlopen(request, timeout=request_timeout) as response: + payload = json.loads(response.read().decode("utf-8")) + # 兼容 OpenAI Chat Completions 响应格式,取第一条消息内容。 + content = payload["choices"][0]["message"]["content"] + # 忽略空行,保证译文列表与输入行一一对应。 + translated.extend( + [line.strip() for line in content.splitlines() if line.strip()] + ) + return translated + + +def invoke(request: InvokeRequest) -> InvokeResponse: + """翻译 SRT 文件中的字幕文本,输出 cn.srt。""" + srt_uri = request.inputs.get("srt_uri") + if not srt_uri: + return InvokeResponse(status="failed", error="srt_uri is required") + + srt_path = Path(srt_uri) + if not srt_path.is_file(): + return InvokeResponse(status="failed", error="srt file not found") + + # 标准 SRT 每 4 行一组:序号、时间轴、文本、空行;文本位于第 3 行。 + lines = srt_path.read_text(encoding="utf-8").splitlines() + text_indices = list(range(2, len(lines), 4)) + source_lines = [lines[index] for index in text_indices] + translated_lines = translate_lines(source_lines, request.params) + # 防止模型返回行数偏差:多出的截断,缺少的用空串补齐。 + translated_lines = translated_lines[: len(source_lines)] + translated_lines += [""] * max(0, len(source_lines) - len(translated_lines)) + # 只替换文本行,序号、时间轴和空行保持不变。 + for index, text_index in enumerate(text_indices): + lines[text_index] = translated_lines[index] + + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + output_path = output_dir / "cn.srt" + # 末尾补一个换行,让文件满足常见文本工具习惯。 + output_path.write_text("\n".join(lines) + "\n", encoding="utf-8") + return InvokeResponse(status="completed", outputs={"cn_srt_uri": str(output_path)}) + diff --git a/nodes/llm_filter.py b/nodes/llm_filter.py new file mode 100644 index 0000000..03151fb --- /dev/null +++ b/nodes/llm_filter.py @@ -0,0 +1,171 @@ +"""LLM 字幕过滤节点。 + +对 OCR 识别出的 SRT 字幕做二次过滤:为避免字幕上下文过长,把每条字幕连同其 +前后各 context_size 条字幕(纯文本,**不含时间戳**)分批提供给 LLM,模型仅判断 +目标字幕是否属于多余、无意义的字符(如重复、残缺、无实际语义的杂项); +判定无意义则删除该条(连同其时间戳),其余字幕保持原样并重新编号输出。 +""" + +from __future__ import annotations + +import json +import os +import re +import urllib.request +from pathlib import Path +from nodes.adaptive_pool import AdaptiveThreadPool +from wov_app.logging import get_logger +from wov_sdk.models import InvokeRequest, InvokeResponse + +logger = get_logger("llm-filter") + +# 匹配 SRT 条目:时间轴行 + 文本(文本可多行),到下一个序号行或文末结束。 +_SRT_BLOCK_RE = re.compile( + r"(\d{2}:\d{2}:\d{2},\d{3})\s*-->\s*(\d{2}:\d{2}:\d{2},\d{3})\s*\n(.*?)(?=\n\s*\d+\s*\n|\Z)", + re.DOTALL, +) + +# 目标字幕标记:提示词用该标记指明需要判断的那一条字幕。 +TARGET_MARK = "【目标】" + +# 默认上下文窗口:目标字幕前后各取 10 条。 +DEFAULT_CONTEXT_SIZE = 10 + + +def parse_srt(text: str) -> list[dict]: + """解析 SRT 文本为条目列表:[{"start", "end", "text"}]。""" + entries: list[dict] = [] + for match in _SRT_BLOCK_RE.finditer(text): + entries.append( + { + "start": match.group(1), + "end": match.group(2), + "text": match.group(3).strip(), + } + ) + return entries + + +def serialize_srt(entries: list[dict]) -> str: + """把条目列表序列化为标准 SRT 文本(序号重新从 1 编号)。""" + blocks = [ + f"{index}\n{entry['start']} --> {entry['end']}\n{entry['text']}" + for index, entry in enumerate(entries, start=1) + ] + return "\n\n".join(blocks) + "\n" + + +def _judge_target( + entries: list[dict], index: int, context_size: int, params: dict +) -> bool: + """调用 LLM 判断目标字幕是否多余/无意义;返回 True 表示应删除。 + + 请求体只含目标字幕及其前后各 context_size 条字幕的纯文本(无时间戳), + 目标字幕用 TARGET_MARK 标记;模型只需回答"保留"或"删除"。 + """ + start = max(0, index - context_size) + end = min(len(entries), index + context_size + 1) + target_pos = index - start + lines = [ + f"{TARGET_MARK}{text}" if pos == target_pos else text + for pos, text in enumerate(entry["text"] for entry in entries[start:end]) + ] + + # LLM 兼容接口配置:地址/Key/模型/超时均可通过环境变量覆盖(默认 SiliconFlow)。 + api_base = os.getenv( + "LLM_API_BASE", + "https://api.siliconflow.cn/v1/chat/completions", + ) + api_key = os.getenv("LLM_API_KEY", "") + request_timeout = float(os.getenv("LLM_TIMEOUT_SECONDS", "60")) + model = str(params.get("model") or os.getenv("LLM_MODEL", "Qwen/Qwen3.6-35B-A3B")) + system_prompt = ( + "你是字幕质量过滤器。用户会提供一段字幕序列(纯文本,不含时间戳)," + f"其中用{TARGET_MARK}标记的字幕是需要判断的目标。请判断该字幕是否属于" + "多余、无意义的字符(如重复、残缺、无实际语义的杂项)。" + "只回答两个字:保留 或 删除,不要输出其他内容。" + ) + body = { + "model": model, + "messages": [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": "\n".join(lines)}, + ], + # 关闭推理模式:Qwen3 等模型默认会把思考过程写入 reasoning_content, + # 导致 content 为空或包含多余内容。 + "enable_thinking": False, + # 只输出"保留/删除",输出上限给得很小即可。 + "max_tokens": 16, + } + headers = {"Content-Type": "application/json"} + # 配置了 Key 时附带 Bearer 鉴权头。 + if api_key: + headers["Authorization"] = f"Bearer {api_key}" + request = urllib.request.Request( + api_base, + data=json.dumps(body).encode("utf-8"), + headers=headers, + method="POST", + ) + with urllib.request.urlopen(request, timeout=request_timeout) as response: + payload = json.loads(response.read().decode("utf-8")) + content = str(payload["choices"][0]["message"]["content"]) + # 模型回答含"删除"即视为该条无意义;其余情况(保留/异常)一律保留,宁多勿删。 + return "删除" in content + + +def invoke(request: InvokeRequest) -> InvokeResponse: + """过滤 SRT 中多余/无意义的字幕,产物为 filtered.srt。""" + srt_uri = request.inputs.get("srt_uri") + if not srt_uri: + return InvokeResponse(status="failed", error="srt_uri is required") + srt_path = Path(srt_uri) + if not srt_path.is_file(): + return InvokeResponse(status="failed", error="srt file not found") + + entries = parse_srt(srt_path.read_text(encoding="utf-8")) + context_size = int(request.params.get("context_size", DEFAULT_CONTEXT_SIZE)) + # 单条判断的工作函数:返回 True 表示该条应删除。 + def judge_one(index) -> bool: + return _judge_target(entries, index, context_size, request.params) + + # 进度日志:打印已判定条数、总数与平均处理速度(条/s)。 + def log_progress(done: int, total: int, rate: float) -> None: + logger.info("字幕判定进度 %d/%d 条 (%.1f 条/s)", done, total, rate) + + # 自适应并发调用 LLM:10s 窗口内平均响应 < 0.3s 则加 1 线程(上限 + # pool_max_workers),> pool_slow_threshold 则减 1 线程(下限 1), + # 按实测负载弹性伸缩,避免盲目并发压垮 LLM 接口。 + pool = AdaptiveThreadPool( + worker=judge_one, + on_progress=log_progress, + min_workers=int(request.params.get("pool_min_workers", 1)), + max_workers=int(request.params.get("pool_max_workers", 16)), + window_seconds=float(request.params.get("pool_window_seconds", 10.0)), + fast_threshold=float(request.params.get("pool_fast_threshold", 0.3)), + slow_threshold=float(request.params.get("pool_slow_threshold", 1.0)), + ) + verdicts = pool.map(range(len(entries))) + + kept: list[dict] = [] + removed = 0 + for index, (entry, verdict) in enumerate(zip(entries, verdicts)): + # 并行下 LLM 异常被线程池隔离为异常结果:任一条失败即整体失败, + # 避免静默输出未过滤结果。 + if isinstance(verdict, Exception): + return InvokeResponse(status="failed", error=str(verdict)) + if verdict: + removed += 1 + logger.info("删除无意义字幕 %d: %r", index + 1, entry["text"][:40]) + else: + kept.append(entry) + + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + output_path = output_dir / "filtered.srt" + output_path.write_text(serialize_srt(kept), encoding="utf-8") + logger.info("字幕过滤完成: 保留 %d 条, 删除 %d 条", len(kept), removed) + return InvokeResponse( + status="completed", + outputs={"srt_uri": str(output_path), "kept": len(kept), "removed": removed}, + ) diff --git a/nodes/subtitle_ocr.py b/nodes/subtitle_ocr.py new file mode 100644 index 0000000..9b8c46b --- /dev/null +++ b/nodes/subtitle_ocr.py @@ -0,0 +1,162 @@ +"""字幕 OCR 汇总节点。 + +读取 frame-extract 产出的 frames.json,逐帧调用 vlm-ocr 节点识别字幕文字; +过滤无文字帧的垃圾输出(glm-ocr 在空帧上会输出无用文字),折叠模型重复 +循环输出,合并连续相同的字幕(记录最后可见帧时间),最终组装为带时间轴的 +SRT 基准数据:每条字幕消失时间 = 最后可见帧时间 + 采样间隔(间隔从帧清单 +时间轴推导),与视频烧录时间对齐。 +""" + +from __future__ import annotations + +import json +from pathlib import Path + +from nodes.adaptive_pool import AdaptiveThreadPool +from nodes.whisper import format_timestamp +from wov_app import registry +from wov_app.logging import get_logger +from wov_sdk.models import InvokeRequest, InvokeResponse + +logger = get_logger("subtitle-ocr") + +# 默认垃圾词:无文字帧的模型输出可能反复出现这些词。 +def _sampling_interval(manifest: list[dict], default: float) -> float: + """从帧清单时间轴推导采样间隔(相邻帧时间差的中位数)。 + + 帧时间由 frame-extract 按固定间隔生成,取相邻差的中位数即可还原真实 + 采样间隔,避免结束时间与抽取参数不一致。清单不足两帧时回退默认值。 + """ + diffs = [ + float(manifest[i + 1]["time"]) - float(manifest[i]["time"]) + for i in range(len(manifest) - 1) + if float(manifest[i + 1]["time"]) > float(manifest[i]["time"]) + ] + if not diffs: + return default + diffs.sort() + # 取 3 位小数:与 frame-extract 的 round(秒,3) 时间戳精度一致,避免浮点漂移。 + return round(diffs[len(diffs) // 2], 3) + + +def _assemble_srt( + kept: list[tuple[float, float, str]], + interval_seconds: float, +) -> list[str]: + """把 (起始帧时间, 最后可见帧时间, 文本) 序列组装为 SRT 行列表。 + + 每条字幕的结束时间 = 最后可见帧时间 + 采样间隔:字幕在最后一个被识别 + 到的帧之后的一个采样间隔内消失,与视频烧录时间对齐;两段字幕之间的 + 空白段(无字幕帧)不再被并入前一条字幕。 + """ + lines: list[str] = [] + for index, (start, last_seen, text) in enumerate(kept): + end = last_seen + interval_seconds + lines.extend( + [ + str(index + 1), + f"{format_timestamp(start)} --> {format_timestamp(end)}", + text, + "", + ] + ) + return lines + + +def invoke(request: InvokeRequest) -> InvokeResponse: + """逐帧 OCR 并汇总字幕,产物为 subtitle.srt。""" + manifest_uri = request.inputs.get("frames_manifest") + if not manifest_uri: + return InvokeResponse(status="failed", error="frames_manifest is required") + manifest_path = Path(manifest_uri) + if not manifest_path.is_file(): + return InvokeResponse(status="failed", error="frames manifest not found") + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + + # 结果长度上限:超过即视为模型异常(重复循环等),该帧直接报错跳过。 + max_result_chars = int(request.params.get("max_result_chars", 200)) + # 采样间隔优先从帧清单时间轴推导(与 frame-extract 实际抽取间隔一致), + # 参数仅作清单退化时的兜底。 + interval = _sampling_interval( + manifest, float(request.params.get("interval_seconds", 2.0)) + ) + # 透传给 vlm-ocr 的参数(仅传已提供的,避免覆盖其默认值)。 + vlm_params = { + key: request.params.get(key) + for key in ( + "model", "ollama_host", "prompt", "timeout_seconds", "keep_alive", + "temperature", "repeat_penalty", "num_predict", + ) + if request.params.get(key) is not None + } + + # 单帧 OCR:并行池的工作函数,返回该帧识别文本(失败/空/超长均返回空串)。 + def ocr_frame(payload) -> str: + index, item = payload + response = registry.invoke( + "vlm-ocr", + InvokeRequest( + run_id=request.run_id, + node_instance_id="", + inputs={"image_uri": str(item["image_uri"])}, + params=vlm_params, + output_dir=str(Path(request.output_dir) / "ocr_frames" / f"{index:04d}"), + ), + ) + if response.status != "completed": + # 单帧失败不中断整体,跳过该帧继续汇总。 + logger.warning("帧 %d OCR 失败,跳过: %s", index, response.error) + return "" + logger.info("帧 %d/%d OCR 完成: %r", index + 1, len(manifest), response.outputs.get("text")) + text = str(response.outputs.get("text", "")).strip() + if not text: + return "" + # 超长输出视为模型异常(重复循环等),直接报错并跳过该帧。 + if len(text) > max_result_chars: + logger.warning( + "帧 %d OCR 输出超长(%d > %d),跳过: %r", + index, len(text), max_result_chars, text[:60], + ) + return "" + return text + + # 进度日志:打印已识别帧数、总数与平均处理速度(帧/s)。 + def log_progress(done: int, total: int, rate: float) -> None: + logger.info("OCR 进度 %d/%d 帧 (%.1f 帧/s)", done, total, rate) + + # 自适应并发调用 vlm-ocr:10s 窗口内平均响应 < 0.3s 则加 1 线程(上限 + # pool_max_workers),> pool_slow_threshold 则减 1 线程(下限 1), + # 按实测负载弹性伸缩,避免盲目并发压垮本地 Ollama。 + pool = AdaptiveThreadPool( + worker=ocr_frame, + on_progress=log_progress, + min_workers=int(request.params.get("pool_min_workers", 1)), + max_workers=int(request.params.get("pool_max_workers", 16)), + window_seconds=float(request.params.get("pool_window_seconds", 10.0)), + fast_threshold=float(request.params.get("pool_fast_threshold", 0.3)), + slow_threshold=float(request.params.get("pool_slow_threshold", 1.0)), + ) + texts = pool.map(list(enumerate(manifest))) + + # kept 元素为 (起始帧时间, 最后可见帧时间, 文本);按帧顺序合并连续相同字幕。 + kept: list[tuple[float, float, str]] = [] + for index, text in enumerate(texts): + if not text: + continue + time = float(manifest[index]["time"]) + # 连续帧相同字幕合并为一条(字幕停留多帧属正常现象): + # 仅更新最后可见帧时间,起始时间保持首次出现。 + if kept and kept[-1][2] == text: + kept[-1] = (kept[-1][0], time, text) + continue + kept.append((time, time, text)) + + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + output_path = output_dir / "subtitle.srt" + output_path.write_text("\n".join(_assemble_srt(kept, interval)), encoding="utf-8") + logger.info("字幕汇总完成: %d 条", len(kept)) + return InvokeResponse( + status="completed", + outputs={"srt_uri": str(output_path), "count": len(kept)}, + ) diff --git a/nodes/vlm.py b/nodes/vlm.py new file mode 100644 index 0000000..f8cd75d --- /dev/null +++ b/nodes/vlm.py @@ -0,0 +1,193 @@ +"""VLM OCR 节点。 + +调用本地 Ollama 服务的多模态模型(默认 glm-ocr:latest)对图片做文字识别 +(OCR),用于从视频帧中提取字幕文字,构建"真实音频 + 正确字幕"的测试数据。 + +与 llm-translate 节点相互独立:本节点只做视觉 OCR,不做翻译,避免把两类 +职责混在一起。调用协议见 Ollama 官方文档:POST /api/chat。 + +请求约定(2026-08 调整,直接请求 API 版本): +- 使用流式传输(stream=True),逐行接收生成内容,命中终止序列立即停止接收, + 避免模型重复循环时无限拉取输出;响应体整体受 5 秒截止时间约束。 +- 采样 temperature 默认 0.3(可参数覆盖),并携带终止序列列表 + `["\n", "\n答", "答"]`(输出首个换行即停 + 阻止“答:”式重复循环); + 模型生成遇到任一标记即停止。 +- 每次调用整体超时 5 秒(timeout_seconds 参数 / VLM_TIMEOUT_SECONDS 环境变量), + 超过即终止,不再继续等待后续流式块。 +""" + +from __future__ import annotations + +import base64 +import json +import os +import re +import time +import urllib.error +import urllib.request +from pathlib import Path + +from wov_sdk.models import InvokeRequest, InvokeResponse + +# 终止序列列表:模型输出一旦出现任一标记(如换行 "\n"、"答")立即停止生成 +# (Ollama 的 stop 参数,同时作为流式读取时的本地截断标记)。 +# 语义:输出第一个换行即停(单行字幕),"答" 系列阻止"答:"式重复循环。 +STOP_SEQUENCE = ["\n","\n答","答"] + + +def _default_host() -> str: + """默认 Ollama 服务地址,可通过环境变量覆盖。""" + return os.getenv("OLLAMA_HOST", "http://192.168.123.70:11434") + + +def _clean_ocr_text(content: str) -> str: + """清洗模型输出:去掉 markdown 围栏与空行,只保留识别到的文字。 + + glm-ocr 的自定义解析器会在识别文本后追加大量 ``` 围栏,必须剔除, + 否则会污染字幕文本。 + """ + lines: list[str] = [] + for line in content.splitlines(): + stripped = line.strip() + # 整行只有反引号(可带语言标记,如 ```markdown)的围栏行丢弃。 + if re.fullmatch(r"`+[A-Za-z0-9]*", stripped): + continue + if stripped: + lines.append(stripped) + return "\n".join(lines) +# 标签提取正则:匹配 ...(DOTALL 让 . 也能匹配换行)。 +_GETTEXT_RE = re.compile(r"(.*?)", re.DOTALL) + + +def _extract_gettext(raw: str) -> str: + """从模型输出中提取 标签内的内容。 + + 提示词要求模型用该标签包裹识别结果;模型未按格式输出(找不到标签) + 时回退返回原始文本,保持旧行为。多个标签只取第一个(防重复循环)。 + """ + match = _GETTEXT_RE.search(raw) + if match is None: + return raw + return match.group(1) + + +def _truncate_at_stop(raw: str) -> str: + """在最先命中的终止序列处截断文本。 + + STOP_SEQUENCE 为终止序列列表(如 ["\n", "\n答", "答"]):取最早出现的位置 + 截断,返回截断后的文本;未命中任何序列时原样返回。 + """ + positions = [pos for seq in STOP_SEQUENCE if (pos := raw.find(seq)) != -1] + if not positions: + return raw + return raw[: min(positions)] + + +def _consume_stream(response, deadline: float) -> str: + """逐行读取流式响应,直到命中终止序列 / 流结束 / 超过截止时间。 + + response 为 urllib 打开的响应对象,readline() 返回 bytes(每行一个 + Ollama 流式 JSON 块)。返回拼接后的原始文本(未清洗、未截断终止序列)。 + """ + parts: list[str] = [] + while True: + # 每次调用整体 5 秒上限:超过立即终止,不再等待下一个流式块。 + if time.monotonic() >= deadline: + raise TimeoutError("timed out") + line = response.readline() + if not line: + # 流式输出正常结束(模型未发出终止序列,直接收完)。 + break + chunk = json.loads(line.decode("utf-8")) + message = chunk.get("message") + if message is None: + # done 行是流结束标记,可能不带 message;其余缺失视为格式错误。 + if chunk.get("done"): + break + raise KeyError("missing message in stream chunk") + parts.append(str(message.get("content", ""))) + # 命中任一终止序列即停止接收后续内容(模型应已结束生成)。 + if any(seq in "".join(parts) for seq in STOP_SEQUENCE): + break + if chunk.get("done"): + # 模型侧完成(未命中终止序列也自然结束)。 + break + return "".join(parts) +def invoke(request: InvokeRequest) -> InvokeResponse: + """识别 image_uri 指向的图片中的文字,产物为 ocr.txt。 + + 参数:model(默认 glm-ocr:latest)、ollama_host、prompt、 + timeout_seconds(默认 5,每次调用整体上限);均可通过环境变量 + VLM_MODEL / OLLAMA_HOST / VLM_TIMEOUT_SECONDS 覆盖。 + """ + image_uri = request.inputs.get("image_uri") + if not image_uri: + return InvokeResponse(status="failed", error="image_uri is required") + + image_path = Path(image_uri) + # 文件不存在时提前失败,避免无谓的网络请求。 + if not image_path.is_file(): + return InvokeResponse(status="failed", error="image file not found") + + host = str(request.params.get("ollama_host") or _default_host()) + model = str(request.params.get("model") or os.getenv("VLM_MODEL", "glm-ocr:latest")) + prompt = str( + request.params.get("prompt") + or os.getenv("VLM_PROMPT", "提取图像中的文字,不要描述图片中的内容") + ) + timeout = float( + request.params.get("timeout_seconds") + or os.getenv("VLM_TIMEOUT_SECONDS", "5") + ) + + # 图片按 base64 随请求体发送(Ollama 多模态标准格式)。 + image_b64 = base64.b64encode(image_path.read_bytes()).decode("ascii") + body = { + "model": model, + # 流式传输:逐行接收生成内容,命中终止序列或超时即停止。 + "stream": True, + # keep_alive 让模型在服务端常驻,避免逐帧调用反复加载模型。 + "keep_alive": str(request.params.get("keep_alive", "5m")), + # 采样选项:temperature 默认 0.3(可参数覆盖);glm-ocr 在大图上有已知 + # 重复循环 bug,repeat_penalty 惩罚重复 token、num_predict 限制输出上限。 + "options": { + "temperature": float(request.params.get("temperature", 0.3)), + "repeat_penalty": float(request.params.get("repeat_penalty", 1)), + "num_predict": int(request.params.get("num_predict", 256)), + }, + # /api/chat 的输入结构:识别指令放系统提示词,用户消息只携带图片 + # (content 为空、images 传 base64,与 glm-ocr 期望结构一致)。 + "messages": [ + {"role": "system", "content": prompt}, + {"role": "user", "content": "", "images": [image_b64]}, + ], + # 模型遇到任一终止序列即停止生成,遏制重复循环;同时作为流式读取截断点。 + "stop": STOP_SEQUENCE, + } + request_url = f"{host.rstrip('/')}/api/chat" + http_request = urllib.request.Request( + request_url, + data=json.dumps(body).encode("utf-8"), + headers={"Content-Type": "application/json"}, + method="POST", + ) + try: + # timeout 同时作用于连接与每次 socket 读取;deadline 保证整体 5 秒上限。 + deadline = time.monotonic() + timeout + with urllib.request.urlopen(http_request, timeout=timeout) as response: + raw = _consume_stream(response, deadline) + # 终止序列可能随最后一个流式块一起返回,在最先命中的序列处截断再清洗。 + raw = _truncate_at_stop(raw) + # 提取提示词约定的 标签内容;模型未按格式输出时回退原始文本。 + text = _clean_ocr_text(_extract_gettext(raw)) + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + output_path = output_dir / "ocr.txt" + output_path.write_text(text + "\n", encoding="utf-8") + return InvokeResponse( + status="completed", + outputs={"text": text, "text_uri": str(output_path)}, + ) + except (urllib.error.URLError, KeyError, ValueError, OSError) as exc: + # 网络失败、响应格式异常、超时等统一转换为 failed 响应。 + return InvokeResponse(status="failed", error=str(exc)) diff --git a/nodes/whisper.py b/nodes/whisper.py new file mode 100755 index 0000000..fbf3cff --- /dev/null +++ b/nodes/whisper.py @@ -0,0 +1,274 @@ +"""faster-whisper ASR 节点。 + +单体版中作为进程内节点模块,由调度器直接调用。模型权重默认优先从本地 +目录加载,避免从远端下载,仅在本地找不到模型时才回退到远端 large-v3。 +CUDA 动态库通过 ctypes 在进程内预加载,替代分布式版的 LD_LIBRARY_PATH 注入。 +""" + +from __future__ import annotations + +import ctypes +import os +import subprocess +import sysconfig +import time +import wave +from pathlib import Path + +from nodes.ffmpeg import _ffmpeg_bin +from wov_app.logging import get_logger +from wov_sdk.models import InvokeRequest, InvokeResponse + +# 转写进度日志:输出到主进程控制台,长音频分块时可见每块进度。 +logger = get_logger("whisper") + + +def _is_windows() -> bool: + """判断当前是否为 Windows,供测试单独注入覆盖。""" + return os.name == "nt" + + +def _load_cuda_libraries() -> None: + """在进程内预加载 pip 安装的 NVIDIA 动态库。 + + 分布式版通过给节点子进程注入 LD_LIBRARY_PATH(Windows 为 PATH)解决; + 单体版没有进程边界,必须在导入 faster-whisper 前加载 nvidia 轮子自带 + 的 .so/.dll,否则 ctranslate2 初始化 CUDA 时找不到 libcublas.so.12。 + """ + # site-packages 目录,nvidia 各包的动态库位于其下。 + site_packages = Path(sysconfig.get_paths()["purelib"]) + for vendor in ("cublas", "cudnn", "cuda_nvrtc"): + # Windows 轮子把 dll 放在 bin/,Linux 放在 lib/。 + for subdir in ("bin", "lib"): + lib_dir = site_packages / "nvidia" / vendor / subdir + if not lib_dir.is_dir(): + continue + if _is_windows(): + # Windows 通过 DLL 搜索目录注册,等价于进程内 PATH 注入。 + os.add_dll_directory(str(lib_dir)) + else: + for so_file in sorted(lib_dir.glob("*.so*")): + try: + ctypes.CDLL(str(so_file)) + except OSError: + # 个别依赖缺失(如 libcudart)时跳过,交由 ctranslate2 报错。 + continue + +def _local_model_candidates() -> list[Path]: + """返回本地模型候选目录:单体根目录 model/ 优先,其次 nodes/ 同级 model/。 + + 单体根目录 model/ 对应仓库根下的 model/faster-whisper-large-v3, + nodes/ 同级 model/ 允许部署时把权重随代码目录一起携带。 + """ + monolith_root = Path(__file__).resolve().parent.parent + return [ + monolith_root / "model" / "faster-whisper-large-v3", + monolith_root / "nodes" / "model" / "faster-whisper-large-v3", + ] + + +def resolve_model_path( + params: dict, + env: dict | None = None, + candidates: list[Path] | None = None, +) -> str: + """按 参数 > 环境变量 > 本地候选目录 > 远端 large-v3 的顺序解析模型路径。 + + 本地优先是默认行为:只要候选目录存在且包含 model.bin 就使用本地权重, + 避免从 Hugging Face 下载;远端下载仅在全部本地候选缺失时作为兜底。 + 参数/环境变量传入的是裸模型名(不含路径分隔符)时,会先在本地模型 + 目录(model/)下按名解析,方便工作流直接引用下载好的模型。 + candidates 参数供测试注入临时目录,默认使用 _local_model_candidates()。 + """ + env = env if env is not None else os.environ + candidates = candidates if candidates is not None else _local_model_candidates() + explicit = params.get("model_path") or env.get("WHISPER_MODEL_PATH") + if explicit: + explicit_str = str(explicit) + # 裸模型名按 <模型目录>/<名称> 在本地解析,例如 + # "whisper-large-v3-translate-zh-v0.1-lt-ct2"。 + if "/" not in explicit_str and "\\" not in explicit_str: + named = candidates[0].parent / explicit_str + if (named / "model.bin").is_file(): + return str(named) + return explicit_str + for candidate in candidates: + # model.bin 是 CTranslate2 权重的必需文件,存在才认为模型完整。 + if candidate.is_dir() and (candidate / "model.bin").is_file(): + return str(candidate) + return "large-v3" + +def format_timestamp(seconds: float) -> str: + """把秒数格式化为 SRT 时间戳,例如 01:00:00,500。""" + # 先换算成毫秒再逐级拆分为时/分/秒/毫秒,避免浮点误差。 + total_ms = int(seconds * 1000) + hours, remainder = divmod(total_ms, 3600000) + minutes, remainder = divmod(remainder, 60000) + secs, millis = divmod(remainder, 1000) + return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}" + + +def _split_audio( + audio_path: Path, + output_dir: Path, + chunk_seconds: int, + ffmpeg_bin: str | None, +) -> list[Path]: + """用 ffmpeg 把音频切成 chunk_seconds 秒一块的 wav,返回块路径列表。 + + 分块是应用层工程策略(内存有界、失败粒度小),与模型 30s 窗口无关; + whisper 训练与推理都按 30s 窗口解码,任意块大小都适用。以下情况回退 + 为整段单次转写:chunk_seconds <= 0、找不到 ffmpeg、切块失败、音频本身 + 不足一块(ffmpeg 产出单块)。 + """ + if chunk_seconds <= 0 or not ffmpeg_bin: + return [audio_path] + chunk_dir = output_dir / "chunks" + chunk_dir.mkdir(parents=True, exist_ok=True) + pattern = str(chunk_dir / "chunk_%03d.wav") + # 音频已是 16kHz 单声道 WAV,流拷贝切块即可,无需重编码。 + result = subprocess.run( + [ + ffmpeg_bin, + "-y", + "-i", + str(audio_path), + "-f", + "segment", + "-segment_time", + str(chunk_seconds), + "-c", + "copy", + pattern, + ], + capture_output=True, + text=True, + ) + if result.returncode != 0: + # 切块失败(输入损坏等)回退整段,不让转写流程中断。 + return [audio_path] + chunks = sorted(chunk_dir.glob("chunk_*.wav")) + return chunks or [audio_path] + + +def _wav_duration_seconds(path: Path, fallback: float) -> float: + """从 WAV 头精确读取时长;文件非法/非 WAV 时用 fallback 兜底。 + + 分块偏移必须用每块的实际时长累积,而不是 块序号×块长 的假设值—— + ffmpeg 切出的块实际时长并不精确等于块长(如 60.05s),假设值会随 + 块数累积漂移,造成字幕时间轴逐渐错位。 + """ + try: + with wave.open(str(path), "rb") as wav: + rate = wav.getframerate() + return wav.getnframes() / rate if rate else fallback + except (wave.Error, EOFError, OSError): + # 文件损坏/非 WAV(如 mp4 直传)时用 fallback 兜底。 + return fallback + + +def _append_srt_lines(lines: list[str], segments, offset: float, start_index: int) -> int: + """把一段转写结果按 SRT 格式追加到 lines,时间加上 offset 偏移。 + + 分块合并时每块 offset 为前面所有块的实际时长累积;单次调用 offset=0。 + 每写出一条字幕就打印其编号与完整视频角度的时间范围,便于对照对齐。 + 返回本段新增的条数,用于全局序号递增。 + """ + count = 0 + for segment in segments: + # 完整视频角度的时间 = 模型预测时间 + 累积偏移。 + start_time = segment.start + offset + end_time = segment.end + offset + lines.extend( + [ + str(start_index + count), + f"{format_timestamp(start_time)} --> {format_timestamp(end_time)}", + segment.text.strip(), + "", + ] + ) + logger.info( + "分段 #%d: %s --> %s", + start_index + count, + format_timestamp(start_time), + format_timestamp(end_time), + ) + count += 1 + return count + +def invoke(request: InvokeRequest) -> InvokeResponse: + """转写音频并生成 SRT 字幕,产物为 transcript.srt。""" + audio_uri = request.inputs.get("audio_uri") + if not audio_uri: + return InvokeResponse(status="failed", error="audio_uri is required") + + # 文件不存在时提前失败,避免进入耗时的模型加载流程。 + audio_path = Path(audio_uri) + if not audio_path.is_file(): + return InvokeResponse(status="failed", error="audio file not found") + + try: + # 延迟导入 faster-whisper,保证节点注册与调度等轻量路径不依赖重型依赖; + # 导入前先预加载 NVIDIA 动态库,否则 ctranslate2 找不到 libcublas。 + _load_cuda_libraries() + from faster_whisper import WhisperModel + # 模型路径默认本地优先:参数 > 环境变量 > 工作区本地目录 > 远端兜底。 + model_path = resolve_model_path(request.params) + device = str(request.params.get("device") or os.getenv("WHISPER_DEVICE", "auto")) + # auto 让 faster-whisper 根据硬件自动选择 float16/int8 等计算类型。 + compute_type = str(request.params.get("compute_type") or "auto") + model = WhisperModel( + model_path, + device=device, + compute_type=compute_type, + ) + # language 默认日语;vad_filter 默认开启(用户 2026-08 决定):过滤静音 + # 段以提速并减少无语音处幻觉;长静音时 VAD 压缩时间轴可能轻微错位, + # 如需极致对齐可在工作流参数中显式关闭。 + # task 默认 transcribe,中文直出模型可传 translate 直接翻译为目标语言。 + # condition_on_previous_text 默认 False:长音频下开启会导致重复/漂移, + # 关闭后每个 30s 窗口独立解码,是 faster-whisper 官方建议的长音频方案。 + output_dir = Path(request.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + # 分块转写:默认每 1 分钟一块(chunk_seconds=60),切块失败自动回退整段。 + chunk_seconds = int(request.params.get("chunk_seconds", 60)) + chunks = _split_audio(audio_path, output_dir, chunk_seconds, _ffmpeg_bin()) + # 逐块转写并合并:offset 用每块实际时长累积(WAV 头精确),SRT 序号连续。 + logger.info("转写开始: %d 个分块", len(chunks)) + lines: list[str] = [] + offset = 0.0 + # SRT 序号从 1 开始,跨块连续递增。 + srt_number = 1 + transcribe_started = time.monotonic() + for chunk_index, chunk in enumerate(chunks, start=1): + chunk_started = time.monotonic() + segments, _info = model.transcribe( + str(chunk), + language=str(request.params.get("language", "ja")), + task=str(request.params.get("task", "transcribe")), + beam_size=int(request.params.get("beam_size", 1)), + vad_filter=bool(request.params.get("vad_filter", True)), + condition_on_previous_text=bool( + request.params.get("condition_on_previous_text", False) + ), + ) + # 进度日志:块序号/总数、单块耗时、实时倍率(块音频时长/墙钟耗时) + # 与转写累计耗时,直观反映数据处理速度。 + chunk_elapsed = time.monotonic() - chunk_started + srt_number += _append_srt_lines(lines, segments, offset, srt_number) + # 偏移按本块实际时长推进,避免假设块长导致的累积漂移。 + offset += _wav_duration_seconds(chunk, chunk_seconds) + logger.info( + "分块 %d/%d 完成 offset=%.2fs 耗时 %.1fs (%.2fx 实时, 累计 %.1fs)", + chunk_index, len(chunks), offset, chunk_elapsed, + chunk_seconds / chunk_elapsed if chunk_elapsed > 0 else 0.0, + time.monotonic() - transcribe_started, + ) + output_path = output_dir / "transcript.srt" + output_path.write_text("\n".join(lines), encoding="utf-8") + return InvokeResponse(status="completed", outputs={"srt_uri": str(output_path)}) + except Exception as exc: # noqa: BLE001 + # 模型加载或转写异常统一转换为 failed 响应,不让调度线程崩溃。 + return InvokeResponse(status="failed", error=str(exc)) + + diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..fc4cff3 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,41 @@ +[project] +name = "vrsub" +version = "0.1.0" +description = "VRSub:为视频生成 VR 双眼字幕的单体应用(API、调度器与全部节点在单进程内运行)" +requires-python = ">=3.11" +dependencies = [ + # Web 框架:FastAPI 负责 API 与静态前端挂载。 + "fastapi", + "uvicorn", + "python-multipart", + # 转写节点:faster-whisper 及其 CUDA 动态库(同进程直接加载,无需路径注入)。 + "faster-whisper>=1.2.1", + "nvidia-cublas-cu12>=12.9.2.10", + "nvidia-cudnn-cu12>=9.24.0.43", + # 提音节点:imageio-ffmpeg 提供内置 ffmpeg 兜底。 + "imageio-ffmpeg>=0.6", + "python-dotenv>=1.2.2", +] + +[dependency-groups] +dev = [ + "pytest", + "pytest-cov", + "httpx", +] + +[build-system] +requires = ["setuptools>=68"] +build-backend = "setuptools.build_meta" + +# wov_sdk / wov_app 位于 src/,nodes 位于仓库根,一并作为可安装包。 +[tool.setuptools.packages.find] +where = ["src", "."] +include = ["wov_sdk*", "wov_app*", "nodes*"] + +# pytest 配置:扫描 tests 目录并强制 100% 行覆盖率;同时把仓库根加入 +# sys.path,保证 nodes 包在未重新安装时也能被导入。 +[tool.pytest.ini_options] +testpaths = ["tests"] +pythonpath = ["."] +addopts = "--cov=src --cov=nodes --cov-fail-under=100 -p no:cacheprovider" diff --git a/src/wov_app/__init__.py b/src/wov_app/__init__.py new file mode 100644 index 0000000..8d23025 --- /dev/null +++ b/src/wov_app/__init__.py @@ -0,0 +1,5 @@ +"""WOV 单体应用包。 + +包含 FastAPI 应用入口、SQLite 数据访问、进程内节点注册表、工作流调度器 +以及管理端/用户端路由。所有节点在同一进程内直接调用,无子进程边界。 +""" diff --git a/src/wov_app/config.py b/src/wov_app/config.py new file mode 100644 index 0000000..80cda51 --- /dev/null +++ b/src/wov_app/config.py @@ -0,0 +1,28 @@ +"""应用配置中心。 + +集中读取环境变量并推导路径常量,避免业务代码散落魔法值。路径统一使用 +pathlib,Windows 与 Linux 开发环境均可用。 +""" + +from __future__ import annotations + +import os +from pathlib import Path + +# WOV 单体根目录:本文件位于 src/wov_app/config.py,向上三级即仓库根。 +WORKSPACE_ROOT = Path(__file__).resolve().parent.parent.parent + +# 数据目录、SQLite 文件与产物存储目录均可通过环境变量覆盖,便于测试隔离。 +DATA_DIR = Path(os.getenv("WOV_DATA_DIR", str(WORKSPACE_ROOT / "data"))) +DB_PATH = Path(os.getenv("WOV_DB_PATH", str(DATA_DIR / "wov.db"))) +STORAGE_DIR = Path(os.getenv("WOV_STORAGE_DIR", str(DATA_DIR / "storage"))) + +# 调度器轮询排队任务的间隔(秒)。 +SCHEDULER_INTERVAL_SECONDS = float(os.getenv("WOV_SCHEDULER_INTERVAL_SECONDS", "1.0")) + +# 孤儿数据清理器配置:定时扫描并清理无对应文件/记录的死数据。 +CLEANUP_ENABLED = os.getenv("WOV_CLEANUP_ENABLED", "1") == "1" +# 清理扫描周期(秒),默认每小时一次。 +CLEANUP_INTERVAL_SECONDS = float(os.getenv("WOV_CLEANUP_INTERVAL_SECONDS", "3600")) +# 宽限期(秒):任务最后更新距今超过该时长且满足孤儿条件才清理。 +CLEANUP_GRACE_SECONDS = float(os.getenv("WOV_CLEANUP_GRACE_SECONDS", "3600")) diff --git a/src/wov_app/db.py b/src/wov_app/db.py new file mode 100644 index 0000000..8285fa6 --- /dev/null +++ b/src/wov_app/db.py @@ -0,0 +1,398 @@ +"""SQLite 数据访问层。 + +所有持久化逻辑集中在本模块,业务代码只依赖 Database 提供的方法。后续切换 +PostgreSQL 时只需替换本层实现,不修改调度器与路由的业务逻辑。 +""" + +from __future__ import annotations + +import json +import sqlite3 +from contextlib import contextmanager +from pathlib import Path +from typing import Any, Iterator + + +class Database: + """SQLite 数据库封装:负责建表以及工作流/任务/产物的 CRUD。""" + + def __init__(self, path: Path) -> None: + """打开数据库并确保父目录存在、表结构已初始化。""" + self.path = path + self.path.parent.mkdir(parents=True, exist_ok=True) + self._init_schema() + + @contextmanager + def _connect(self) -> Iterator[sqlite3.Connection]: + """提供带事务提交的数据库连接上下文。""" + conn = sqlite3.connect(self.path) + # 按列名读取结果,返回 dict 更直观。 + conn.row_factory = sqlite3.Row + # 开启外键约束,保证子表记录引用有效。 + conn.execute("PRAGMA foreign_keys = ON") + try: + yield conn + conn.commit() + finally: + conn.close() + + def _init_schema(self) -> None: + """创建全部业务表;已存在的表保持不变。""" + with self._connect() as conn: + conn.executescript( + """ + -- 工作流表:只保存概要信息,完整定义存版本表。 + CREATE TABLE IF NOT EXISTS workflows ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT NOT NULL DEFAULT '', + published INTEGER NOT NULL DEFAULT 0, + latest_version INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + -- 工作流版本表:每个版本保存一份 DAG 定义 JSON。 + CREATE TABLE IF NOT EXISTS workflow_versions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + workflow_id TEXT NOT NULL, + version INTEGER NOT NULL, + definition_json TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(workflow_id, version), + FOREIGN KEY(workflow_id) REFERENCES workflows(id) + ); + + -- 工作流运行表:记录任务从排队到完成/失败的状态机。 + CREATE TABLE IF NOT EXISTS workflow_runs ( + id TEXT PRIMARY KEY, + workflow_id TEXT NOT NULL, + workflow_version INTEGER NOT NULL, + status TEXT NOT NULL, + current_node_id TEXT, + progress REAL NOT NULL DEFAULT 0, + error TEXT, + input_uri TEXT, + param_overrides TEXT, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + FOREIGN KEY(workflow_id) REFERENCES workflows(id) + ); + + -- 产物表:记录每个任务各节点的输出 URI,按名称唯一。 + CREATE TABLE IF NOT EXISTS artifacts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + run_id TEXT NOT NULL, + node_id TEXT NOT NULL, + name TEXT NOT NULL, + uri TEXT NOT NULL, + mime_type TEXT NOT NULL DEFAULT '', + size INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(run_id, name), + FOREIGN KEY(run_id) REFERENCES workflow_runs(id) + ); + """ + ) + + # 旧库迁移:workflow_runs 补充 param_overrides 列(前端框选覆盖)。 + columns = [ + row["name"] + for row in conn.execute("PRAGMA table_info(workflow_runs)").fetchall() + ] + if "param_overrides" not in columns: + conn.execute("ALTER TABLE workflow_runs ADD COLUMN param_overrides TEXT") + + def upsert_workflow(self, workflow: dict[str, Any]) -> None: + """插入或更新工作流概要信息。""" + with self._connect() as conn: + conn.execute( + """ + INSERT INTO workflows (id, name, description, published, latest_version) + VALUES (?, ?, ?, ?, ?) + ON CONFLICT(id) DO UPDATE SET + name = excluded.name, + description = excluded.description, + published = excluded.published, + latest_version = excluded.latest_version + """, + ( + workflow["id"], + workflow["name"], + workflow.get("description", ""), + int(workflow.get("published", 0)), + int(workflow.get("latest_version", 0)), + ), + ) + + def get_workflow(self, workflow_id: str) -> dict[str, Any] | None: + """按 ID 读取工作流概要。""" + with self._connect() as conn: + row = conn.execute("SELECT * FROM workflows WHERE id = ?", (workflow_id,)).fetchone() + return dict(row) if row else None + + def list_workflows(self) -> list[dict[str, Any]]: + """按创建时间倒序返回全部工作流。""" + with self._connect() as conn: + rows = conn.execute("SELECT * FROM workflows ORDER BY created_at DESC").fetchall() + return [dict(row) for row in rows] + + def delete_workflow(self, workflow_id: str) -> None: + """级联删除工作流相关的产物、任务、版本和概要记录。""" + with self._connect() as conn: + # 外键没有级联删除配置,手动按依赖顺序清理。 + conn.execute("DELETE FROM artifacts WHERE run_id IN (SELECT id FROM workflow_runs WHERE workflow_id = ?)", (workflow_id,)) + conn.execute("DELETE FROM workflow_runs WHERE workflow_id = ?", (workflow_id,)) + conn.execute("DELETE FROM workflow_versions WHERE workflow_id = ?", (workflow_id,)) + conn.execute("DELETE FROM workflows WHERE id = ?", (workflow_id,)) + + def create_workflow_version(self, workflow_id: str, version: int, definition: dict[str, Any]) -> None: + """为工作流新增一个版本,definition 以 JSON 保存。""" + with self._connect() as conn: + conn.execute( + """ + INSERT INTO workflow_versions (workflow_id, version, definition_json) + VALUES (?, ?, ?) + """, + (workflow_id, version, json.dumps(definition, ensure_ascii=False)), + ) + + def get_latest_workflow_version(self, workflow_id: str) -> dict[str, Any] | None: + """返回工作流最新版本,并把 definition_json 反序列化为 definition。""" + with self._connect() as conn: + row = conn.execute( + """ + SELECT * FROM workflow_versions + WHERE workflow_id = ? + ORDER BY version DESC + LIMIT 1 + """, + (workflow_id,), + ).fetchone() + if row is None: + return None + result = dict(row) + # 对外统一暴露 definition 字典,隐藏 JSON 存储细节。 + result["definition"] = json.loads(result.pop("definition_json")) + return result + + def get_workflow_version(self, workflow_id: str, version: int) -> dict[str, Any] | None: + """按版本号读取指定工作流版本。""" + with self._connect() as conn: + row = conn.execute( + """ + SELECT * FROM workflow_versions + WHERE workflow_id = ? AND version = ? + """, + (workflow_id, version), + ).fetchone() + if row is None: + return None + result = dict(row) + result["definition"] = json.loads(result.pop("definition_json")) + return result + + def list_workflow_versions(self, workflow_id: str) -> list[dict[str, Any]]: + """按版本倒序返回工作流全部版本。""" + with self._connect() as conn: + rows = conn.execute( + """ + SELECT * FROM workflow_versions + WHERE workflow_id = ? + ORDER BY version DESC + """, + (workflow_id,), + ).fetchall() + versions = [] + for row in rows: + item = dict(row) + item["definition"] = json.loads(item.pop("definition_json")) + versions.append(item) + return versions + + def create_run(self, run: dict[str, Any]) -> None: + """创建一条排队中的工作流运行记录。""" + with self._connect() as conn: + conn.execute( + """ + INSERT INTO workflow_runs ( + id, workflow_id, workflow_version, status, current_node_id, + progress, error, input_uri, param_overrides, created_at, updated_at + ) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + run["id"], + run["workflow_id"], + run["workflow_version"], + run["status"], + run.get("current_node_id"), + float(run.get("progress", 0)), + run.get("error"), + run.get("input_uri"), + json.dumps(run["param_overrides"], ensure_ascii=False) + if run.get("param_overrides") + else None, + run["created_at"], + run["updated_at"], + ), + ) + + def get_run(self, run_id: str) -> dict[str, Any] | None: + """按 ID 读取任务运行记录。""" + with self._connect() as conn: + row = conn.execute("SELECT * FROM workflow_runs WHERE id = ?", (run_id,)).fetchone() + return self._parse_overrides(row) if row else None + + + @staticmethod + def _parse_overrides(row) -> dict: + """把查询行中的 param_overrides JSON 字符串解析为字典。""" + result = dict(row) + raw = result.get("param_overrides") + result["param_overrides"] = json.loads(raw) if raw else None + return result + + def list_runs(self, limit: int = 20) -> list[dict[str, Any]]: + """按创建时间倒序返回最近的运行记录。""" + with self._connect() as conn: + rows = conn.execute( + "SELECT * FROM workflow_runs ORDER BY created_at DESC LIMIT ?", + (limit,), + ).fetchall() + return [self._parse_overrides(row) for row in rows] + + def list_run_ids(self) -> list[str]: + """返回全部任务 ID,供孤儿数据清理对照磁盘目录使用。""" + with self._connect() as conn: + rows = conn.execute("SELECT id FROM workflow_runs").fetchall() + return [row["id"] for row in rows] + + def update_run(self, run_id: str, **fields: Any) -> None: + """更新运行状态字段,同时刷新 updated_at;未知字段会被忽略。""" + # 只允许更新状态机相关字段,防止任意列被改写。 + allowed = { + "status", + "current_node_id", + "progress", + "error", + } + updates = {key: value for key, value in fields.items() if key in allowed} + if not updates: + return + updates["updated_at"] = fields.get("updated_at") + # 动态拼接 SET 子句,键来自白名单,不存在 SQL 注入风险。 + assignments = ", ".join(f"{key} = ?" for key in updates) + values = list(updates.values()) + [run_id] + with self._connect() as conn: + conn.execute(f"UPDATE workflow_runs SET {assignments} WHERE id = ?", values) + + def reset_run(self, run_id: str, updated_at: str) -> None: + """把失败任务重置为 QUEUED,并清空进度与旧产物,供重试使用。""" + with self._connect() as conn: + # 清空错误和进度,恢复到首次排队时的状态。 + conn.execute( + """ + UPDATE workflow_runs + SET status = 'QUEUED', current_node_id = NULL, progress = 0, + error = NULL, updated_at = ? + WHERE id = ? + """, + (updated_at, run_id), + ) + # 删除旧产物,避免重试后残留过期下载链接。 + conn.execute("DELETE FROM artifacts WHERE run_id = ?", (run_id,)) + + def next_queued_run(self) -> dict[str, Any] | None: + """按创建时间返回最早一条可执行任务(排队或已暂停待续跑)。""" + with self._connect() as conn: + row = conn.execute( + """ + SELECT * FROM workflow_runs + WHERE status IN ('QUEUED', 'PAUSED') + ORDER BY created_at ASC + LIMIT 1 + """ + ).fetchone() + return self._parse_overrides(row) if row else None + + def pause_run(self, run_id: str, updated_at: str) -> None: + """暂停任务:置为 PAUSED;调度器会在节点边界检查并停止推进。""" + with self._connect() as conn: + conn.execute( + "UPDATE workflow_runs SET status = 'PAUSED', updated_at = ? WHERE id = ?", + (updated_at, run_id), + ) + + def resume_run(self, run_id: str, updated_at: str) -> None: + """继续任务:PAUSED 恢复为 QUEUED,等待调度器从断点续跑。""" + with self._connect() as conn: + conn.execute( + "UPDATE workflow_runs SET status = 'QUEUED', updated_at = ? WHERE id = ?", + (updated_at, run_id), + ) + + def restore_run_outputs(self, run_id: str) -> dict[str, dict[str, str]]: + """从已登记的产物重建各节点输出,供暂停后断点续跑使用。 + + 返回 {节点ID: {输出名: URI}};已完成节点的产物可直接作为后续节点的输入。 + """ + outputs: dict[str, dict[str, str]] = {} + for artifact in self.list_artifacts(run_id): + name = artifact["name"] + # 产物名形如 "节点ID.输出名"(如 a.data_uri),还原为 {输出名: URI}。 + prefix = artifact["node_id"] + "." + if name.startswith(prefix): + name = name[len(prefix):] + outputs.setdefault(artifact["node_id"], {})[name] = artifact["uri"] + return outputs + def create_artifact(self, artifact: dict[str, Any]) -> None: + """记录任务产物;同 run 与 name 冲突时覆盖。""" + with self._connect() as conn: + conn.execute( + """ + INSERT OR REPLACE INTO artifacts ( + run_id, node_id, name, uri, mime_type, size + ) + VALUES (?, ?, ?, ?, ?, ?) + """, + ( + artifact["run_id"], + artifact["node_id"], + artifact["name"], + artifact["uri"], + artifact.get("mime_type", ""), + int(artifact.get("size", 0)), + ), + ) + + def list_artifacts(self, run_id: str) -> list[dict[str, Any]]: + """按创建时间返回任务的全部产物。""" + with self._connect() as conn: + rows = conn.execute( + "SELECT * FROM artifacts WHERE run_id = ? ORDER BY created_at", + (run_id,), + ).fetchall() + return [dict(row) for row in rows] + + def get_artifact(self, run_id: str, name: str) -> dict[str, Any] | None: + """按任务与产物名读取单个产物记录。""" + with self._connect() as conn: + row = conn.execute( + "SELECT * FROM artifacts WHERE run_id = ? AND name = ?", + (run_id, name), + ).fetchone() + return dict(row) if row else None + + def delete_run_artifacts(self, run_id: str) -> None: + """删除任务的全部产物记录。""" + with self._connect() as conn: + conn.execute("DELETE FROM artifacts WHERE run_id = ?", (run_id,)) + + def delete_run(self, run_id: str) -> None: + """删除任务记录本身及其产物记录。 + + 产物表外键引用任务表,必须先删产物再删任务,否则违反外键约束。 + """ + with self._connect() as conn: + conn.execute("DELETE FROM artifacts WHERE run_id = ?", (run_id,)) + conn.execute("DELETE FROM workflow_runs WHERE id = ?", (run_id,)) diff --git a/src/wov_app/logging.py b/src/wov_app/logging.py new file mode 100644 index 0000000..3f72d74 --- /dev/null +++ b/src/wov_app/logging.py @@ -0,0 +1,31 @@ +"""轻量日志配置。 + +单体版所有节点在 API 主进程内运行,这里把节点运行日志直接输出到主进程 +控制台(uvicorn 的 stderr),便于观察各节点的执行过程与耗时。 +""" + +from __future__ import annotations + +import logging + +# 应用日志统一前缀,便于与其他库日志区分。 +_APP_LOGGER_NAME = "vrsub" + + +def _ensure_console_handler(logger: logging.Logger) -> None: + """为日志器附加控制台输出;已配置过则跳过,避免重复打印。""" + if any(isinstance(handler, logging.StreamHandler) for handler in logger.handlers): + return + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")) + logger.addHandler(handler) + logger.setLevel(logging.INFO) + # 不向 uvicorn 根日志传播,防止消息重复输出。 + logger.propagate = False + + +def get_logger(name: str) -> logging.Logger: + """获取并确保输出到主进程控制台的日志器。""" + logger = logging.getLogger(f"{_APP_LOGGER_NAME}.{name}") + _ensure_console_handler(logger) + return logger diff --git a/src/wov_app/main.py b/src/wov_app/main.py new file mode 100644 index 0000000..1887397 --- /dev/null +++ b/src/wov_app/main.py @@ -0,0 +1,82 @@ +"""FastAPI 应用入口。 + +负责组装数据库、进程内节点注册表、调度器与静态前端,并在应用生命周期内 +管理后台线程的启动与清理。单体版所有节点在同一进程内直接调用。 +""" + +from __future__ import annotations + +# 先加载 .env(含 LLM API Key 等本地配置),再导入读取环境变量的 config。 +from dotenv import load_dotenv + +load_dotenv() + +import os # noqa: E402 +from contextlib import asynccontextmanager # noqa: E402 +from pathlib import Path # noqa: E402 + +from fastapi import FastAPI # noqa: E402 +from fastapi.middleware.cors import CORSMiddleware # noqa: E402 +from fastapi.staticfiles import StaticFiles # noqa: E402 + +from wov_app import registry +from wov_app.config import DB_PATH, STORAGE_DIR, WORKSPACE_ROOT +from wov_app.db import Database +from wov_app.maintenance import OrphanCleaner +from wov_app.routers import apps, workflows +from wov_app.scheduler import WorkflowScheduler +from wov_app.seed import seed_default_workflows + +@asynccontextmanager +async def lifespan(app: FastAPI): + """应用生命周期:启动时初始化数据、注册节点和后台服务,退出时回收资源。""" + # 确保数据与存储目录存在,避免首次启动写文件失败。 + db = Database(DB_PATH) + STORAGE_DIR.mkdir(parents=True, exist_ok=True) + # 静态注册全部内置节点到进程内注册表(内存态,不落库)。 + registry.register_all() + # 默认创建演示工作流,可关闭便于测试。 + if os.getenv("WOV_AUTO_SEED", "1") == "1": + seed_default_workflows(db) + + scheduler = WorkflowScheduler(db, STORAGE_DIR) + # 调度器默认开启,处理排队中的任务;测试可关闭后手动执行。 + if os.getenv("WOV_SCHEDULER_ENABLED", "1") == "1": + scheduler.start() + cleaner = OrphanCleaner(db, STORAGE_DIR) + # 孤儿数据清理默认开启,定时清除死数据;测试可关闭。 + if os.getenv("WOV_CLEANUP_ENABLED", "1") == "1": + cleaner.start() + # 共享对象挂到 app.state,路由通过 Depends 延迟获取。 + app.state.db = db + app.state.scheduler = scheduler + app.state.cleaner = cleaner + yield + # 退出时先停调度器与清理器,避免残留后台线程。 + cleaner.stop() + scheduler.stop() + + +app = FastAPI(title="VRSub API(单体版)", version="0.1.0", lifespan=lifespan) + +# MVP 阶段不做鉴权,允许跨域便于本地调试与静态页面访问。 +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_methods=["*"], + allow_headers=["*"], +) + +app.include_router(workflows.router) +app.include_router(apps.router) + + +@app.get("/health") +def health() -> dict: + """进程存活探针,供部署环境与前端检测后端可用性。""" + return {"status": "ok", "service": "wov-api", "mode": "monolith"} + + +# 静态前端目录位于仓库根下的 web,由 FastAPI 直接挂载。 +FRONTEND_DIR = WORKSPACE_ROOT / "web" +app.mount("/", StaticFiles(directory=FRONTEND_DIR, html=True), name="frontend") diff --git a/src/wov_app/maintenance.py b/src/wov_app/maintenance.py new file mode 100644 index 0000000..d4cc00c --- /dev/null +++ b/src/wov_app/maintenance.py @@ -0,0 +1,129 @@ +"""孤儿数据清理器。 + +定时扫描存储目录与数据库,清理不再有意义的死数据: + +1. 磁盘上存在但没有对应任务记录的上传/步骤目录(删除任务中断等残留)。 +2. 状态为 COMPLETED 但产物文件已全部丢失、且超过宽限期的任务记录 + (这类任务在任务页会显示"完成"但下载全部 404,属于孤儿数据)。 + +出于安全考虑,以下数据**不会**被自动清理: + +- FAILED 任务(用户可能重试,且失败任务本就可能没有文件)。 +- 状态非终态(QUEUED/RUNNING)的任务。 +- 最近宽限期内的任务,避免误删刚完成的运行。 + +手动删除任务仍走删除接口,本模块只做保守的孤儿兜底。 +""" + +from __future__ import annotations + +import shutil +import threading +import time +from datetime import datetime, timezone +from pathlib import Path + +from wov_app.config import CLEANUP_GRACE_SECONDS, CLEANUP_INTERVAL_SECONDS +from wov_app.db import Database + + +class OrphanCleaner: + """后台孤儿清理器:周期扫描并清理孤儿数据,只保留明确的死数据。""" + + def __init__( + self, + db: Database, + storage_dir: Path, + interval_seconds: float | None = None, + grace_seconds: float | None = None, + ) -> None: + """保存依赖并初始化轮询线程控制字段。""" + self.db = db + self.storage_dir = storage_dir + self.interval_seconds = interval_seconds or CLEANUP_INTERVAL_SECONDS + self.grace_seconds = grace_seconds or CLEANUP_GRACE_SECONDS + self._thread: threading.Thread | None = None + self._stopping = False + + def start(self) -> None: + """启动清理线程;重复调用无副作用。""" + if self._thread is not None: + return + self._stopping = False + self._thread = threading.Thread( + target=self._loop, + name="wov-orphan-cleaner", + daemon=True, + ) + self._thread.start() + + def stop(self) -> None: + """请求停止并等待清理线程退出。""" + self._stopping = True + if self._thread is not None: + self._thread.join(timeout=5) + self._thread = None + + def _loop(self) -> None: + """周期循环:每隔一个间隔执行一次清理。""" + while not self._stopping: + time.sleep(self.interval_seconds) + self.clean_once() + + def clean_once(self) -> int: + """执行一次孤儿清理,返回清理的数据条目数。""" + run_ids = set(self.db.list_run_ids()) + removed = 0 + # 1) 无对应任务记录的上传/步骤目录视为残留,直接删除。 + removed += self._clean_dangling(self.storage_dir / "uploads", run_ids) + removed += self._clean_dangling(self.storage_dir / "runs", run_ids) + # 2) COMPLETED 且产物文件全失、超过宽限期的任务记录删除。 + for run_id in run_ids: + run = self.db.get_run(run_id) + if run is None: + continue + if run["status"] != "COMPLETED": + continue + if not self._expired(run.get("updated_at")): + continue + if self._has_files(self.storage_dir / "runs" / run_id): + continue + removed += self._remove_run(run_id, run) + return removed + + def _clean_dangling(self, root: Path, run_ids: set[str]) -> int: + """删除 root 下没有对应任务记录的残留子目录,返回删除数。""" + if not root.is_dir(): + return 0 + removed = 0 + for child in root.iterdir(): + if child.is_dir() and child.name not in run_ids: + shutil.rmtree(child, ignore_errors=True) + removed += 1 + return removed + + def _expired(self, updated_at: str | None) -> bool: + """判断任务最后更新时间是否已超过宽限期;无法解析时保守视为未过期。""" + if not updated_at: + return False + try: + updated = datetime.fromisoformat(updated_at) + return (datetime.now(timezone.utc) - updated).total_seconds() > self.grace_seconds + except ValueError: + # 时间格式损坏时保守保留,避免误删。 + return False + + def _has_files(self, run_dir: Path) -> bool: + """判断任务目录下是否仍存在产物文件。""" + if not run_dir.is_dir(): + return False + return any(path.is_file() for path in run_dir.rglob("*")) + + def _remove_run(self, run_id: str, run: dict) -> int: + """删除孤儿任务:数据库记录(含产物)、上传目录与步骤目录。""" + self.db.delete_run(run_id) + input_uri = run.get("input_uri") + if input_uri: + shutil.rmtree(Path(input_uri).parent, ignore_errors=True) + shutil.rmtree(self.storage_dir / "runs" / run_id, ignore_errors=True) + return 1 diff --git a/src/wov_app/registry.py b/src/wov_app/registry.py new file mode 100644 index 0000000..811147a --- /dev/null +++ b/src/wov_app/registry.py @@ -0,0 +1,110 @@ +"""进程内节点注册表。 + +单体版不再启动子进程:节点清单与 invoke 处理器在启动时静态注册到本模块, +调度器通过 invoke(node_id, request) 在同一个进程内直接调用处理器。 +协议数据模型(NodeManifest / InvokeRequest / InvokeResponse)保持不变, +为将来回退分布式保留兼容桥梁。 +""" + +from __future__ import annotations + +import time +from dataclasses import dataclass +from pathlib import Path +from typing import Callable + +from wov_app.logging import get_logger +from wov_sdk.models import InvokeRequest, InvokeResponse, NodeManifest + +# 节点运行日志:输出到主进程控制台。 +logger = get_logger("node") + +# 节点调用处理器签名:接收调用请求,返回调用结果。 +NodeHandler = Callable[[InvokeRequest], InvokeResponse] + + +@dataclass +class NodeEntry: + """注册表条目:节点清单与其进程内处理器。""" + + manifest: NodeManifest + handler: NodeHandler + + +# 进程内注册表:key 为节点 ID(即工作流中的 node_type),value 为注册条目。 +_registry: dict[str, NodeEntry] = {} + + +def _load_manifest(name: str) -> NodeManifest: + """从 manifests/ 目录加载节点清单文件并校验。""" + path = Path(__file__).resolve().parent.parent.parent / "manifests" / f"{name}.json" + return NodeManifest.load(str(path)) + + +def register(manifest: NodeManifest, handler: NodeHandler) -> None: + """注册单个节点;manifest 校验失败时抛出 ValueError。""" + manifest.validate() + _registry[manifest.id] = NodeEntry(manifest=manifest, handler=handler) + + +def register_all() -> None: + """注册全部内置节点,启动时调用一次;重复调用按 ID 覆盖,幂等。""" + from nodes import ass, echo, ffmpeg, frame_extract, llm, llm_filter, subtitle_ocr, vlm, whisper + register(_load_manifest("echo"), echo.invoke) + register(_load_manifest("ffmpeg"), ffmpeg.invoke) + register(_load_manifest("whisper"), whisper.invoke) + register(_load_manifest("llm"), llm.invoke) + register(_load_manifest("vlm"), vlm.invoke) + register(_load_manifest("frame-extract"), frame_extract.invoke) + register(_load_manifest("subtitle-ocr"), subtitle_ocr.invoke) + register(_load_manifest("llm-filter"), llm_filter.invoke) + register(_load_manifest("ass"), ass.invoke) + + +def list_nodes() -> list[NodeManifest]: + """按节点 ID 顺序返回全部已注册节点清单。""" + return [entry.manifest for _, entry in sorted(_registry.items())] + + +def get_node(node_id: str) -> NodeManifest | None: + """按节点 ID 返回清单;未注册时返回 None。""" + entry = _registry.get(node_id) + return entry.manifest if entry else None + + +def invoke(node_id: str, request: InvokeRequest) -> InvokeResponse: + """调用指定节点的进程内处理器;节点未注册时抛出 ValueError。 + + 统一在这里记录节点的开始/结束/耗时/产物日志,所有节点自动获得 + 主进程可见的运行日志,无需在各节点实现内重复埋点。 + """ + entry = _registry.get(node_id) + if entry is None: + raise ValueError(f"node not registered: {node_id}") + logger.info( + "节点 %s 开始 run=%s inputs=%s params=%s", + node_id, + request.run_id, + request.inputs, + request.params, + ) + start = time.perf_counter() + response = entry.handler(request) + elapsed = time.perf_counter() - start + if response.status == "completed": + logger.info( + "节点 %s 完成 run=%s 耗时=%.2fs outputs=%s", + node_id, + request.run_id, + elapsed, + response.outputs, + ) + else: + logger.warning( + "节点 %s 失败 run=%s 耗时=%.2fs error=%s", + node_id, + request.run_id, + elapsed, + response.error, + ) + return response diff --git a/src/wov_app/routers/__init__.py b/src/wov_app/routers/__init__.py new file mode 100644 index 0000000..9b46c03 --- /dev/null +++ b/src/wov_app/routers/__init__.py @@ -0,0 +1,5 @@ +"""WOV 单体 API 路由包。 + +按职责拆分为用户应用与工作流管理两组路由,统一由 wov_app.main 挂载。 +节点注册/实例管理路由已随单体化移除。 +""" diff --git a/src/wov_app/routers/apps.py b/src/wov_app/routers/apps.py new file mode 100755 index 0000000..3b2fb93 --- /dev/null +++ b/src/wov_app/routers/apps.py @@ -0,0 +1,213 @@ +"""用户端应用路由。 + +面向普通用户暴露“应用中心”能力:列出已发布工作流、上传输入创建任务、 +查询进度、重试失败任务以及下载产物。用户只看到输入 -> 进度 -> 结果。 +""" + +from __future__ import annotations + +import json +import shutil +import uuid +from datetime import datetime, timezone +from pathlib import Path + +from fastapi import APIRouter, Depends, File, Form, HTTPException, UploadFile +from fastapi.responses import FileResponse + +from wov_app.db import Database + +router = APIRouter(tags=["apps"]) + + +def _now_iso() -> str: + """返回当前 UTC 时间的 ISO 格式字符串。""" + return datetime.now(timezone.utc).isoformat() + + +def _get_db() -> Database: + """从 FastAPI 应用状态中延迟获取数据库实例。""" + from wov_app.main import app + + return app.state.db + + +@router.get("/api/apps") +def list_apps(db: Database = Depends(_get_db)) -> list[dict]: + """返回全部已发布工作流及其最新版本定义。""" + apps = [] + for workflow in db.list_workflows(): + # 草稿工作流不对用户端可见。 + if not workflow["published"]: + continue + latest = db.get_latest_workflow_version(workflow["id"]) + apps.append( + { + "id": workflow["id"], + "name": workflow["name"], + "description": workflow["description"], + "version": workflow["latest_version"], + "definition": latest["definition"] if latest else None, + } + ) + return apps + + +@router.post("/api/apps/{workflow_id}/runs") +async def create_run( + workflow_id: str, + file: UploadFile = File(...), + params: str = Form(default=""), + db: Database = Depends(_get_db), +) -> dict: + """接收用户上传文件,创建排队中的工作流任务。""" + workflow = db.get_workflow(workflow_id) + # 只允许对已发布且存在版本的工作流发起任务。 + if workflow is None or not workflow["published"]: + raise HTTPException(status_code=404, detail="published workflow not found") + + latest = db.get_latest_workflow_version(workflow_id) + if latest is None: + raise HTTPException(status_code=422, detail="workflow has no version") + + run_id = f"run_{uuid.uuid4().hex[:12]}" + # 使用安全文件名,避免路径穿越。 + filename = Path(file.filename or "upload.bin").name + from wov_app.config import STORAGE_DIR + + # 上传文件按 run 隔离存放,调度器通过 input_uri 引用。 + input_dir = STORAGE_DIR / "uploads" / run_id + input_dir.mkdir(parents=True, exist_ok=True) + input_uri = input_dir / filename + content = await file.read() + input_uri.write_bytes(content) + + # 可选参数覆盖(如前端框选的 crop):{节点ID: {参数: 值}},随任务持久化。 + param_overrides = None + if params.strip(): + try: + parsed = json.loads(params) + except json.JSONDecodeError as exc: + raise HTTPException(status_code=422, detail="params must be valid JSON") from exc + if not isinstance(parsed, dict): + raise HTTPException(status_code=422, detail="params must be a JSON object") + param_overrides = parsed + + now = _now_iso() + db.create_run( + { + "id": run_id, + "workflow_id": workflow_id, + "workflow_version": latest["version"], + "status": "QUEUED", + "progress": 0, + "input_uri": str(input_uri), + "param_overrides": param_overrides, + "created_at": now, + "updated_at": now, + } + ) + return { + "id": run_id, + "status": "QUEUED", + "progress": 0, + "artifacts": [], + } + + +@router.get("/api/runs") +def list_runs(db: Database = Depends(_get_db)) -> list[dict]: + """返回最近的运行记录,供任务管理页展示。""" + return db.list_runs() + + +@router.get("/api/runs/{run_id}") +def get_run(run_id: str, db: Database = Depends(_get_db)) -> dict: + """返回任务详情,并附带当前产物列表。""" + run = db.get_run(run_id) + if run is None: + raise HTTPException(status_code=404, detail="run not found") + run["artifacts"] = db.list_artifacts(run_id) + return run + + +@router.post("/api/runs/{run_id}/retry") +def retry_run(run_id: str, db: Database = Depends(_get_db)) -> dict: + """重置失败任务为排队状态,清空旧产物后重新执行。""" + run = db.get_run(run_id) + if run is None: + raise HTTPException(status_code=404, detail="run not found") + if run["status"] != "FAILED": + raise HTTPException(status_code=422, detail="only failed runs can be retried") + # reset_run 会清空进度、错误和旧产物,确保从头开始。 + db.reset_run(run_id, _now_iso()) + return {"id": run_id, "status": "QUEUED"} + + +@router.post("/api/runs/{run_id}/pause") +def pause_run(run_id: str, db: Database = Depends(_get_db)) -> dict: + """暂停任务:排队中或运行中的任务可暂停,运行中的任务在节点边界停下。""" + run = db.get_run(run_id) + if run is None: + raise HTTPException(status_code=404, detail="run not found") + if run["status"] not in ("QUEUED", "RUNNING"): + raise HTTPException(status_code=422, detail="only queued or running runs can be paused") + db.pause_run(run_id, _now_iso()) + return {"id": run_id, "status": "PAUSED"} + + +@router.post("/api/runs/{run_id}/resume") +def resume_run(run_id: str, db: Database = Depends(_get_db)) -> dict: + """继续任务:暂停的任务恢复排队,由调度器从断点继续执行。""" + run = db.get_run(run_id) + if run is None: + raise HTTPException(status_code=404, detail="run not found") + if run["status"] != "PAUSED": + raise HTTPException(status_code=422, detail="only paused runs can be resumed") + db.resume_run(run_id, _now_iso()) + return {"id": run_id, "status": "QUEUED"} + +@router.delete("/api/runs/{run_id}") +def delete_run(run_id: str, db: Database = Depends(_get_db)) -> dict: + """删除任务:清理产物记录、上传文件与步骤产物目录。""" + run = db.get_run(run_id) + if run is None: + raise HTTPException(status_code=404, detail="run not found") + from wov_app.config import STORAGE_DIR + + # 先删数据库记录(含产物表),再清理磁盘上的上传与中间产物。 + db.delete_run(run_id) + input_uri = run.get("input_uri") + if input_uri: + # 上传文件位于 /uploads//,整目录一并删除。 + shutil.rmtree(Path(input_uri).parent, ignore_errors=True) + # 步骤产物位于 /runs//,整目录一并删除。 + shutil.rmtree(STORAGE_DIR / "runs" / run_id, ignore_errors=True) + return {"deleted": run_id} + +@router.get("/api/runs/{run_id}/artifacts") +def list_run_artifacts(run_id: str, db: Database = Depends(_get_db)) -> list[dict]: + """返回任务全部产物记录。""" + if db.get_run(run_id) is None: + raise HTTPException(status_code=404, detail="run not found") + return db.list_artifacts(run_id) + + +@router.get("/api/runs/{run_id}/artifacts/{artifact_name}") +def download_artifact( + run_id: str, + artifact_name: str, + db: Database = Depends(_get_db), +) -> FileResponse: + """按任务与产物名下载文件,文件缺失时返回 404。""" + artifact = db.get_artifact(run_id, artifact_name) + if artifact is None: + raise HTTPException(status_code=404, detail="artifact not found") + path = Path(artifact["uri"]) + if not path.is_file(): + raise HTTPException(status_code=404, detail="artifact file missing") + return FileResponse( + path, + media_type=artifact["mime_type"], + filename=path.name, + ) diff --git a/src/wov_app/routers/workflows.py b/src/wov_app/routers/workflows.py new file mode 100755 index 0000000..2c2160f --- /dev/null +++ b/src/wov_app/routers/workflows.py @@ -0,0 +1,140 @@ +"""工作流管理路由。 + +提供工作流的创建、查询、校验、发布和删除能力。工作流以版本化 DAG 数据保存, +不写死在业务代码中。 +""" + +from __future__ import annotations + +import re +import uuid + +from fastapi import APIRouter, Depends, HTTPException + +from wov_app.db import Database +from wov_app.schemas import WorkflowCreate +from wov_sdk.models import WorkflowDefinition + +router = APIRouter(prefix="/api/admin/workflows", tags=["workflows"]) + + +def _get_db() -> Database: + """从应用状态延迟获取数据库实例。""" + from wov_app.main import app + + return app.state.db + + +def _slugify(value: str) -> str: + """把工作流名称转换为小写连字符 ID;无有效字符时生成随机 ID。""" + slug = re.sub(r"[^a-z0-9]+", "-", value.lower()).strip("-") + return slug or uuid.uuid4().hex[:8] + + +def _validate_definition(raw: dict) -> WorkflowDefinition: + """解析并校验 DAG 定义,非法时转换为 422 HTTP 异常。""" + try: + definition = WorkflowDefinition.from_dict(raw) + definition.validate() + return definition + except (KeyError, TypeError, ValueError) as exc: + raise HTTPException(status_code=422, detail=str(exc)) from exc + + +@router.get("") +def list_workflows(db: Database = Depends(_get_db)) -> list[dict]: + """返回全部工作流概要。""" + return db.list_workflows() + + +@router.post("") +def create_workflow( + payload: WorkflowCreate, + db: Database = Depends(_get_db), +) -> dict: + """创建新工作流或为已有工作流追加一个版本。""" + definition = _validate_definition(payload.definition) + # 未显式指定 ID 时由名称生成;已有工作流则版本号递增。 + workflow_id = payload.id or _slugify(payload.name) + existing = db.get_workflow(workflow_id) + version = (existing or {}).get("latest_version", 0) + 1 + # 每次创建都保存新版本,发布操作只切换 published 标记。 + db.upsert_workflow( + { + "id": workflow_id, + "name": payload.name, + "description": payload.description, + "published": 0, + "latest_version": version, + } + ) + db.create_workflow_version(workflow_id, version, definition.to_dict()) + return { + "id": workflow_id, + "name": payload.name, + "description": payload.description, + "published": False, + "latest_version": version, + } + + +@router.get("/{workflow_id}") +def get_workflow(workflow_id: str, db: Database = Depends(_get_db)) -> dict: + """返回工作流概要及最新版本定义。""" + workflow = db.get_workflow(workflow_id) + if workflow is None: + raise HTTPException(status_code=404, detail="workflow not found") + latest = db.get_latest_workflow_version(workflow_id) + workflow["latest_version_data"] = latest + return workflow + + +@router.delete("/{workflow_id}") +def delete_workflow(workflow_id: str, db: Database = Depends(_get_db)) -> dict: + """删除工作流及其版本、任务和产物记录。""" + if db.get_workflow(workflow_id) is None: + raise HTTPException(status_code=404, detail="workflow not found") + db.delete_workflow(workflow_id) + return {"deleted": workflow_id} + + +@router.post("/{workflow_id}/validate") +def validate_workflow( + workflow_id: str, + definition: dict, + db: Database = Depends(_get_db), +) -> dict: + """在不保存的情况下校验一份 DAG 定义。""" + if db.get_workflow(workflow_id) is None: + raise HTTPException(status_code=404, detail="workflow not found") + parsed = _validate_definition(definition) + return {"valid": True, "node_ids": [node.id for node in parsed.nodes]} + + +@router.post("/{workflow_id}/publish") +def publish_workflow(workflow_id: str, db: Database = Depends(_get_db)) -> dict: + """把工作流标记为已发布,使其出现在用户应用中心。""" + workflow = db.get_workflow(workflow_id) + if workflow is None: + raise HTTPException(status_code=404, detail="workflow not found") + if workflow["latest_version"] == 0: + raise HTTPException(status_code=422, detail="workflow has no version") + # 发布只是状态切换,不修改已保存的版本数据。 + db.upsert_workflow( + { + "id": workflow_id, + "name": workflow["name"], + "description": workflow["description"], + "published": 1, + "latest_version": workflow["latest_version"], + } + ) + return {"published": workflow_id} + + +@router.get("/{workflow_id}/versions") +def list_versions(workflow_id: str, db: Database = Depends(_get_db)) -> list[dict]: + """返回工作流全部版本定义。""" + if db.get_workflow(workflow_id) is None: + raise HTTPException(status_code=404, detail="workflow not found") + return db.list_workflow_versions(workflow_id) diff --git a/src/wov_app/scheduler.py b/src/wov_app/scheduler.py new file mode 100755 index 0000000..c4c41e1 --- /dev/null +++ b/src/wov_app/scheduler.py @@ -0,0 +1,308 @@ +"""工作流调度器。 + +轮询 SQLite 中的排队任务,按工作流 DAG 的拓扑顺序依次调用进程内节点 +处理器,并把节点产物登记为任务产物。单体版使用单线程顺序执行,节点在 +同一进程内直接调用,不再经过子进程与 HTTP 协议。 +""" + +from __future__ import annotations + +import threading +import time +from datetime import datetime, timezone +from pathlib import Path + +from wov_sdk.models import InvokeRequest, WorkflowDefinition + +from wov_app import registry +from wov_app.config import SCHEDULER_INTERVAL_SECONDS +from wov_app.db import Database +from wov_app.logging import get_logger + +# 调度器运行日志:节点进度、暂停/续跑等状态变化。 +logger = get_logger("scheduler") + +def _now_iso() -> str: + """返回当前 UTC 时间的 ISO 格式字符串。""" + return datetime.now(timezone.utc).isoformat() + + +def topological_sort(definition: WorkflowDefinition) -> list[str]: + """对工作流 DAG 做拓扑排序,返回可执行的节点 ID 顺序。""" + nodes = {node.id: node for node in definition.nodes} + # 统计每个节点的入度,并记录依赖关系。 + indegree = {node_id: 0 for node_id in nodes} + dependents: dict[str, list[str]] = {node_id: [] for node_id in nodes} + + for edge in definition.edges: + # 边引用了不存在的节点时直接报错。 + if edge.from_node not in nodes or edge.to_node not in nodes: + raise ValueError(f"unknown edge: {edge.from_node} -> {edge.to_node}") + indegree[edge.to_node] += 1 + dependents[edge.from_node].append(edge.to_node) + + # Kahn 算法:从入度为 0 的节点开始逐层取出。 + queue = [node_id for node_id, degree in indegree.items() if degree == 0] + ordered: list[str] = [] + while queue: + current = queue.pop(0) + ordered.append(current) + for dependent in dependents[current]: + indegree[dependent] -= 1 + if indegree[dependent] == 0: + queue.append(dependent) + + # 排序结果数量不足说明存在环,无法确定执行顺序。 + if len(ordered) != len(nodes): + raise ValueError("workflow contains a cycle") + return ordered + + +class WorkflowScheduler: + """后台任务调度器:单线程轮询并执行排队中的工作流运行。""" + + def __init__( + self, + db: Database, + storage_dir: Path, + interval_seconds: float | None = None, + ) -> None: + """保存依赖并初始化轮询线程控制字段。""" + self.db = db + self.storage_dir = storage_dir + self.interval_seconds = interval_seconds or SCHEDULER_INTERVAL_SECONDS + self._thread: threading.Thread | None = None + self._stopping = False + + def start(self) -> None: + """启动调度线程;重复调用无副作用。""" + if self._thread is not None: + return + self._stopping = False + self._thread = threading.Thread( + target=self._loop, + name="wov-workflow-scheduler", + daemon=True, + ) + self._thread.start() + + def stop(self) -> None: + """请求停止并等待轮询线程退出。""" + self._stopping = True + if self._thread is not None: + self._thread.join(timeout=5) + self._thread = None + + def _loop(self) -> None: + """轮询循环:有排队任务就立即执行,否则休眠一个间隔。""" + while not self._stopping: + run = self.db.next_queued_run() + if run is not None: + self.execute_run(run["id"]) + else: + time.sleep(self.interval_seconds) + + def _resolve_ref( + self, + ref: str, + run_input_uri: str | None, + outputs_by_node: dict[str, dict[str, str]], + ) -> str | None: + """解析输入引用:input.xxx 取任务入口,node.key 取前序节点产物。""" + # 入口引用以 input. 为前缀。 + if ref.startswith("input."): + return run_input_uri + # 其余引用必须形如 "节点ID.输出名"。 + node_id, separator, key = ref.partition(".") + if not separator: + return None + return outputs_by_node.get(node_id, {}).get(key) + + def execute_run(self, run_id: str) -> None: + """执行单个任务:加载 DAG、按拓扑顺序调用节点并登记产物。""" + run = self.db.get_run(run_id) + # 任务不存在或不在可执行状态(排队/暂停)时直接返回,避免重复执行。 + if run is None or run["status"] not in ("QUEUED", "PAUSED"): + return + + # 工作流或版本记录丢失时把任务标记为失败。 + workflow = self.db.get_workflow(run["workflow_id"]) + if workflow is None: + self.db.update_run(run_id, status="FAILED", error="workflow not found", updated_at=_now_iso()) + return + + version = self.db.get_workflow_version(run["workflow_id"], run["workflow_version"]) + if version is None: + self.db.update_run(run_id, status="FAILED", error="workflow version not found", updated_at=_now_iso()) + return + + # 解析并校验 DAG,随后计算拓扑执行顺序。 + definition = WorkflowDefinition.from_dict(version["definition"]) + definition.validate() + ordered = topological_sort(definition) + # 从已登记产物重建已完成节点的输出,支持暂停后断点续跑。 + outputs_by_node = self.db.restore_run_outputs(run_id) + run_started = time.monotonic() + self.db.update_run(run_id, status="RUNNING", progress=0, updated_at=_now_iso()) + try: + for index, node_id in enumerate(ordered): + # 暂停检查:用户暂停后调度器在节点边界停下,保持 PAUSED 等待续跑。 + current = self.db.get_run(run_id) + if current is None or current["status"] == "PAUSED": + logger.info("任务 %s 已暂停,停止在节点 %s 之前", run_id, node_id) + return + # 断点续跑:跳过已产出结果的节点(其产物已作为输入可用)。 + if node_id in outputs_by_node: + continue + # 当前节点进度 = 已完成节点数 / 总节点数。 + node_spec = next(item for item in definition.nodes if item.id == node_id) + self.db.update_run( + run_id, + current_node_id=node_id, + progress=index / len(ordered), + updated_at=_now_iso(), + ) + # 解析节点声明的每个输入引用,缺任一输入即失败。 + invoke_inputs: dict[str, str] = {} + for input_name, ref in node_spec.inputs.items(): + value = self._resolve_ref(ref, run.get("input_uri"), outputs_by_node) + if value is None: + raise ValueError(f"missing input {input_name} for node {node_id}") + invoke_inputs[input_name] = value + + # 前端框选的 crop 等参数覆盖:按节点 ID 合并进节点参数。 + node_params = dict(node_spec.params) + overrides = run.get("param_overrides") or {} + node_params.update(overrides.get(node_id, {})) + + # 每个任务的每个节点使用独立产物目录,避免并发冲突。 + node_started = time.monotonic() + output_dir = ( + self.storage_dir + / "runs" + / run_id + / "steps" + / node_id + ) + response = registry.invoke( + node_spec.node_type, + InvokeRequest( + run_id=run_id, + node_instance_id="", + inputs=invoke_inputs, + params=node_params, + output_dir=str(output_dir), + ), + ) + # 节点返回非 completed 即视为步骤失败。 + if response.status != "completed": + raise RuntimeError(response.error or f"node {node_id} failed") + + # 记录节点输出,供后续节点引用和最终产物映射使用。 + outputs_by_node[node_id] = { + str(key): str(value) for key, value in response.outputs.items() + } + for key, uri in outputs_by_node[node_id].items(): + # 产物名带节点前缀,例如 asr.srt_uri,避免跨节点重名。 + artifact = { + "run_id": run_id, + "node_id": node_id, + "name": f"{node_id}.{key}", + "uri": uri, + "mime_type": self._mime_type(uri), + "size": self._file_size(uri), + } + self.db.create_artifact(artifact) + # 进度日志:节点序号/总数、耗时与任务累计运行时间(数据速度可观测)。 + logger.info( + "任务 %s 进度 %d/%d 节点: %s 耗时 %.1fs, 运行累计 %.1fs", + run_id, index + 1, len(ordered), node_id, + time.monotonic() - node_started, + time.monotonic() - run_started, + ) + # 处理 final_outputs,为用户端提供简洁的下载别名。 + for alias, ref in definition.final_outputs.items(): + resolved = self._resolve_ref(ref, run.get("input_uri"), outputs_by_node) + if resolved is not None: + # 最终产物按 上传文件名.标识.时间戳 重命名,区分语言与版本。 + resolved = self._final_artifact_uri(resolved, run, definition, alias, ref) + self.db.create_artifact( + { + "run_id": run_id, + "node_id": ref.partition(".")[0], + "name": alias, + "uri": resolved, + "mime_type": self._mime_type(resolved), + "size": self._file_size(resolved), + } + ) + + # 全部节点成功后标记完成;期间被暂停则保持 PAUSED,等待续跑补做收尾。 + if self.db.get_run(run_id)["status"] == "PAUSED": + logger.info("任务 %s 节点全部完成但已暂停,保持 PAUSED", run_id) + return + self.db.update_run( + run_id, + status="COMPLETED", + current_node_id=None, + progress=1.0, + updated_at=_now_iso(), + ) + except Exception as exc: # noqa: BLE001 + # 任一步骤异常都结束任务并记录错误,等待用户重试。 + self.db.update_run( + run_id, + status="FAILED", + error=str(exc), + updated_at=_now_iso(), + ) + + def _final_artifact_uri( + self, + resolved: str, + run: dict, + definition: WorkflowDefinition, + alias: str, + ref: str, + ) -> str: + """把最终产物重命名为 上传文件名.标识.时间戳 并返回新 URI。 + + 标识优先取产出节点的 target_language 参数(如 zh-CN),否则回退为 + 产物别名;时间戳取当前时刻,用于区分同一上传文件的多次运行版本。 + 重命名在原地进行(同目录),不复制文件。 + """ + source = Path(resolved) + # 续跑等场景下源文件可能已被上次收尾重命名过:不再重命名,原样返回。 + if not source.is_file(): + return resolved + # 基础名来自上传文件名;无上传文件时退回通用名称 subtitle。 + base = Path(run["input_uri"]).stem if run.get("input_uri") else "subtitle" + # 通过最终输出引用定位产出节点,取其语言参数作为标识。 + node_id = ref.partition(".")[0] + node = next((item for item in definition.nodes if item.id == node_id), None) + tag = (node.params.get("target_language") if node else None) or alias + timestamp = datetime.now(timezone.utc).strftime("%Y%m%d%H%M%S") + new_path = source.with_name(f"{base}.{tag}.{timestamp}{source.suffix}") + source.rename(new_path) + return str(new_path) + + @staticmethod + def _mime_type(uri: str) -> str: + """按扩展名推断产物 MIME 类型,未知类型使用通用二进制类型。""" + path = Path(uri) + suffix = path.suffix.lower() + return { + ".srt": "application/x-subrip", + ".ass": "text/plain", + ".wav": "audio/wav", + ".mp4": "video/mp4", + ".txt": "text/plain", + }.get(suffix, "application/octet-stream") + + @staticmethod + def _file_size(uri: str) -> int: + """读取产物文件大小;文件缺失时按 0 处理。""" + try: + return Path(uri).stat().st_size + except OSError: + return 0 diff --git a/src/wov_app/schemas.py b/src/wov_app/schemas.py new file mode 100644 index 0000000..b15bc86 --- /dev/null +++ b/src/wov_app/schemas.py @@ -0,0 +1,22 @@ +"""FastAPI 请求/响应 schema。 + +使用 Pydantic 模型校验管理 API 的 JSON 请求体。节点管理功能已移除,仅保留 +工作流相关请求模型。 +""" + +from __future__ import annotations + +from typing import Any + +from pydantic import BaseModel, Field + + +class WorkflowCreate(BaseModel): + """创建工作流或新增版本的请求体。""" + + # 缺省时由后端根据名称生成 slug ID。 + id: str | None = None + name: str = Field(min_length=1) + description: str = "" + # DAG 原始字典,后端会解析并校验为 WorkflowDefinition。 + definition: dict[str, Any] diff --git a/src/wov_app/seed.py b/src/wov_app/seed.py new file mode 100644 index 0000000..38072e1 --- /dev/null +++ b/src/wov_app/seed.py @@ -0,0 +1,48 @@ +"""种子数据模块。 + +从 workflows/*.json 数据文件加载默认工作流并写入数据库(幂等)。 +工作流定义是**数据**(JSON):切换模型、调整链路只改数据文件,不涉及代码, +满足"工作流即数据"与"切换模型不改代码"的设计约束。 +""" + +from __future__ import annotations + +import json +from pathlib import Path + +from wov_sdk.models import WorkflowDefinition + +from wov_app.config import WORKSPACE_ROOT +from wov_app.db import Database + + +def seed_default_workflows(db: Database, workflows_dir: Path | None = None) -> int: + """从数据目录加载默认工作流,已存在的工作流跳过,返回创建数量。 + + 每个 JSON 文件结构: + {"id", "name", "description", "version", "definition"}, + definition 为 WorkflowDefinition 的标准 DAG 字典。 + """ + workflows_dir = workflows_dir or (WORKSPACE_ROOT / "workflows") + created = 0 + for path in sorted(workflows_dir.glob("*.json")): + payload = json.loads(path.read_text(encoding="utf-8")) + workflow_id = str(payload["id"]) + # 已存在的工作流不覆盖,避免启动时反复改写用户数据。 + if db.get_workflow(workflow_id) is not None: + continue + definition = WorkflowDefinition.from_dict(payload["definition"]) + definition.validate() + version = int(payload.get("version", 1)) + db.upsert_workflow( + { + "id": workflow_id, + "name": str(payload["name"]), + "description": str(payload.get("description", "")), + "published": 1, + "latest_version": version, + } + ) + db.create_workflow_version(workflow_id, version, definition.to_dict()) + created += 1 + return created diff --git a/src/wov_sdk/__init__.py b/src/wov_sdk/__init__.py new file mode 100644 index 0000000..3911f0c --- /dev/null +++ b/src/wov_sdk/__init__.py @@ -0,0 +1,28 @@ +"""WOV SDK 公共导出入口。 + +单体版中调度器、节点与 API 统一从 wov_sdk 导入协议模型,而无需关心具体 +模块路径。协议数据模型保持与分布式版一致,为将来回退保留兼容桥梁。 +""" + +from wov_sdk.models import ( + HealthResponse, + InvokeRequest, + InvokeResponse, + NodeManifest, + ProgressEvent, + WorkflowDefinition, + WorkflowEdge, + WorkflowNode, +) + +# 对外稳定的公共 API 清单;新增模型时必须同步追加到这里。 +__all__ = [ + "HealthResponse", + "InvokeRequest", + "InvokeResponse", + "NodeManifest", + "ProgressEvent", + "WorkflowDefinition", + "WorkflowEdge", + "WorkflowNode", +] diff --git a/src/wov_sdk/models.py b/src/wov_sdk/models.py new file mode 100755 index 0000000..eab17b1 --- /dev/null +++ b/src/wov_sdk/models.py @@ -0,0 +1,321 @@ +"""WOV 节点协议核心数据模型。 + +本模块定义节点 Manifest、调用请求/响应、健康检查、进度事件以及工作流 DAG 的 +通用数据结构。单体版中调度器、节点与 API 共用这些类,字段语义必须长期保持 +稳定,新增能力时只能向后兼容地扩展字段。 +""" + +from __future__ import annotations + +import json +from dataclasses import dataclass, field +from typing import Any + + +def _require_non_empty(value: str, name: str) -> None: + """校验必填字符串字段,空字符串或纯空白字符串都会被拒绝。""" + if not value or not value.strip(): + raise ValueError(f"{name} must not be empty") + + +@dataclass +class NodeManifest: + """节点注册清单:描述节点能力、输入输出与资源参数。 + + 该清单由 manifests/ 目录下的 JSON 文件提供,单体启动时注册到进程内 + 节点注册表,调度器据此把 node_type 解析到对应的 invoke 处理器。 + """ + + # 节点稳定唯一 ID,例如 faster-whisper;注册后不可随意更改。 + id: str + # 展示名称,仅用于管理后台等界面。 + name: str + # 节点版本号,与节点仓库 Git tag 保持一致。 + version: str + # 能力标识,工作流通过 node_type 引用能力,而不是直接绑定具体仓库。 + capability: str + # 启动命令;单体版不再启动子进程,字段保留仅为协议兼容。 + command: list[str] + # 节点代码所在目录;单体版保留仅为协议兼容。 + repo_dir: str = "." + # 节点环境变量;单体版保留仅为协议兼容。 + env: dict[str, str] = field(default_factory=dict) + # 输入字段 schema,当前主要用于文档展示,后续可用于运行时校验。 + input_schema: dict[str, Any] = field(default_factory=dict) + # 输出字段 schema,用于描述节点产物的名称与类型。 + output_schema: dict[str, Any] = field(default_factory=dict) + # 单进程内无并发槽位概念,字段保留仅为协议兼容。 + max_concurrency: int = 1 + # 单体内模型常驻不回收,字段保留仅为协议兼容。 + idle_ttl_seconds: int = 300 + # 无进程启动等待,字段保留仅为协议兼容。 + health_timeout_seconds: int = 10 + # 单体内模型常驻不回收,字段保留仅为协议兼容。 + keep_warm: bool = False + + def validate(self) -> None: + """校验 manifest 必填字段与数值边界,非法配置抛出 ValueError。""" + _require_non_empty(self.id, "id") + _require_non_empty(self.name, "name") + _require_non_empty(self.version, "version") + _require_non_empty(self.capability, "capability") + _require_non_empty(self.repo_dir, "repo_dir") + # 命令不能为空,否则节点进程无法启动。 + if not self.command: + raise ValueError("command must not be empty") + if self.max_concurrency < 1: + raise ValueError("max_concurrency must be >= 1") + if self.idle_ttl_seconds < 0: + raise ValueError("idle_ttl_seconds must be >= 0") + if self.health_timeout_seconds < 1: + raise ValueError("health_timeout_seconds must be >= 1") + + def to_dict(self) -> dict[str, Any]: + """转换为可 JSON 序列化的普通字典。""" + return { + "id": self.id, + "name": self.name, + "version": self.version, + "capability": self.capability, + "command": self.command, + "repo_dir": self.repo_dir, + "env": self.env, + "input_schema": self.input_schema, + "output_schema": self.output_schema, + "max_concurrency": self.max_concurrency, + "idle_ttl_seconds": self.idle_ttl_seconds, + "health_timeout_seconds": self.health_timeout_seconds, + "keep_warm": self.keep_warm, + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> "NodeManifest": + """从注册 API 或 JSON 文件解析出的字典恢复 manifest。""" + return cls( + id=str(data["id"]), + name=str(data["name"]), + version=str(data["version"]), + capability=str(data["capability"]), + # command 可能缺省,解析时提供空列表兜底。 + command=[str(item) for item in data.get("command", [])], + repo_dir=str(data.get("repo_dir", ".")), + env={str(k): str(v) for k, v in data.get("env", {}).items()}, + input_schema=dict(data.get("input_schema", {})), + output_schema=dict(data.get("output_schema", {})), + # 数值字段缺省时使用与 dataclass 一致的默认值。 + max_concurrency=int(data.get("max_concurrency", 1)), + idle_ttl_seconds=int(data.get("idle_ttl_seconds", 300)), + health_timeout_seconds=int(data.get("health_timeout_seconds", 10)), + keep_warm=bool(data.get("keep_warm", False)), + ) + + @classmethod + def load(cls, path: str) -> "NodeManifest": + """从磁盘上的 node.manifest.json 加载并校验 manifest。""" + with open(path, "r", encoding="utf-8") as f: + manifest = cls.from_dict(json.load(f)) + manifest.validate() + return manifest + + +@dataclass +class InvokeRequest: + """节点调用请求:由调度器或管理后台发送给节点 HTTP 服务。""" + + # 工作流运行 ID,用于追踪一次完整执行。 + run_id: str + # 实际承载本次调用的节点实例 ID,由 NodeManager 回填。 + node_instance_id: str + # 输入产物映射,key 为输入名,value 为产物 URI 或直接文本。 + inputs: dict[str, Any] = field(default_factory=dict) + # 节点运行参数,例如采样率、语言、模型路径等。 + params: dict[str, Any] = field(default_factory=dict) + # 节点产物输出目录。 + output_dir: str = "." + + def to_dict(self) -> dict[str, Any]: + """转换为可 JSON 序列化的普通字典。""" + return { + "run_id": self.run_id, + "node_instance_id": self.node_instance_id, + "inputs": self.inputs, + "params": self.params, + "output_dir": self.output_dir, + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> "InvokeRequest": + """从 HTTP 请求 JSON 解析调用请求。""" + return cls( + run_id=str(data["run_id"]), + node_instance_id=str(data["node_instance_id"]), + inputs=dict(data.get("inputs", {})), + params=dict(data.get("params", {})), + output_dir=str(data.get("output_dir", ".")), + ) + + +@dataclass +class InvokeResponse: + """节点调用响应:completed 表示成功,failed 表示执行失败。""" + + # 执行状态,固定为 completed / failed。 + status: str + # 输出产物映射,key 为输出名,value 为产物 URI。 + outputs: dict[str, Any] = field(default_factory=dict) + # 失败原因,仅在 failed 时有意义。 + error: str | None = None + + def to_dict(self) -> dict[str, Any]: + """转换为可 JSON 序列化的普通字典。""" + return { + "status": self.status, + "outputs": self.outputs, + "error": self.error, + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> "InvokeResponse": + """从 HTTP 响应 JSON 解析调用结果。""" + return cls( + # 缺省按失败处理,避免未知状态被误判为成功。 + status=str(data.get("status", "failed")), + outputs=dict(data.get("outputs", {})), + error=data.get("error"), + ) + + +@dataclass +class HealthResponse: + """节点健康检查响应:节点进程就绪后返回 ok 与自身标识。""" + + status: str + node_id: str + version: str + + def to_dict(self) -> dict[str, Any]: + """转换为可 JSON 序列化的普通字典。""" + return { + "status": self.status, + "node_id": self.node_id, + "version": self.version, + } + + +@dataclass +class ProgressEvent: + """进度事件:预留用于节点向调度器上报执行进度。""" + + run_id: str + node_id: str + progress: float + message: str | None = None + + def to_dict(self) -> dict[str, Any]: + """转换为可 JSON 序列化的普通字典。""" + return { + "run_id": self.run_id, + "node_id": self.node_id, + "progress": self.progress, + "message": self.message, + } + + +@dataclass +class WorkflowNode: + """工作流中的一个节点:声明节点类型、参数和输入引用。""" + + # 节点在 DAG 内的唯一 ID,例如 extract、asr。 + id: str + # 引用的节点能力,例如 ffmpeg-extract、faster-whisper。 + node_type: str + # 传递给节点 invoke 的 params。 + params: dict[str, Any] = field(default_factory=dict) + # 输入引用,value 形如 "前序节点ID.输出名" 或 "input.入口字段"。 + inputs: dict[str, str] = field(default_factory=dict) + + def to_dict(self) -> dict[str, Any]: + """转换为可 JSON 序列化的普通字典。""" + return { + "id": self.id, + "node_type": self.node_type, + "params": self.params, + "inputs": self.inputs, + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> "WorkflowNode": + """从工作流定义 JSON 解析节点。""" + return cls( + id=str(data["id"]), + node_type=str(data["node_type"]), + params=dict(data.get("params", {})), + inputs={str(k): str(v) for k, v in data.get("inputs", {}).items()}, + ) + + +@dataclass +class WorkflowEdge: + """工作流有向边:from_node 的输出流向 to_node 的输入。""" + + from_node: str + to_node: str + + def to_dict(self) -> dict[str, Any]: + """转换为 JSON 时使用 from/to 短字段名。""" + return {"from": self.from_node, "to": self.to_node} + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> "WorkflowEdge": + """从工作流定义 JSON 解析边。""" + return cls(from_node=str(data["from"]), to_node=str(data["to"])) + + +@dataclass +class WorkflowDefinition: + """工作流 DAG 定义:包含节点列表、依赖边和输入输出映射。""" + + name: str + version: int + nodes: list[WorkflowNode] = field(default_factory=list) + edges: list[WorkflowEdge] = field(default_factory=list) + # 用户上传入口与入口字段名的映射,例如 {"video_uri": "file"}。 + entry_inputs: dict[str, Any] = field(default_factory=dict) + # 最终对外暴露的产物别名映射,例如 {"ass": "ass.ass_uri"}。 + final_outputs: dict[str, Any] = field(default_factory=dict) + + def validate(self) -> None: + """校验 DAG 基本约束:名称、版本、节点 ID 唯一、边引用有效。""" + _require_non_empty(self.name, "name") + if self.version < 1: + raise ValueError("version must be >= 1") + # 节点 ID 集合用于检查重复和边引用。 + node_ids = {node.id for node in self.nodes} + if len(node_ids) != len(self.nodes): + raise ValueError("workflow node ids must be unique") + for edge in self.edges: + if edge.from_node not in node_ids or edge.to_node not in node_ids: + raise ValueError(f"edge references unknown node: {edge}") + + def to_dict(self) -> dict[str, Any]: + """转换为可 JSON 序列化的普通字典。""" + return { + "name": self.name, + "version": self.version, + "nodes": [node.to_dict() for node in self.nodes], + "edges": [edge.to_dict() for edge in self.edges], + "entry_inputs": self.entry_inputs, + "final_outputs": self.final_outputs, + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> "WorkflowDefinition": + """从工作流定义 JSON 解析 DAG。""" + return cls( + name=str(data["name"]), + version=int(data.get("version", 1)), + nodes=[WorkflowNode.from_dict(item) for item in data.get("nodes", [])], + edges=[WorkflowEdge.from_dict(item) for item in data.get("edges", [])], + entry_inputs=dict(data.get("entry_inputs", {})), + final_outputs=dict(data.get("final_outputs", {})), + ) diff --git a/testdata/ocr_notext.png b/testdata/ocr_notext.png new file mode 100644 index 0000000000000000000000000000000000000000..0086edb04f605ec3c2a54389afe84c707dea184f GIT binary patch literal 1532 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 TN?SrZ9zv?=sJ>Ue|Lp$&hS5pQ literal 0 HcmV?d00001 diff --git a/testdata/speech_60s.wav b/testdata/speech_60s.wav new file mode 100644 index 0000000000000000000000000000000000000000..b4e4765c0199997876426393fa2a5ca1143461e6 GIT binary patch literal 1920052 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 z
KhG*uRMr@Q^KcC$w{n938rc*g-dTMi|)9ufAD?ZagnN^(kbU?#6tX1D>+xyDx zMv4Wk+wJOCd~8H_W^)WTyT29h33KeL*0Jx0#z)aRf4H2yyv=(^KHpL{c6p-q{3<^h z4ycr|ME_X9Ksy<%^b`Ay9zQSGXLNnoAuXRF&#_h>s~k@CSvrl%2Spf3d3TJLRXW3T z{@HGDXIxvOv(6ZwE}_dihs$;T0$0q#xjSs}Sb9(QN_RI6=8r}wH&*W*)BWZjTkRW) zy*w=|KyP%|LNT0S)SA4`hr+$l*%dpaRXc{4hnr#C;@V+sJ&pXfCaJbqe+Rs$dWwL> zLs?#LeT|(p$aHKcQO0Oxx_8UsADS}BR=4s-c_lx;oFb$6WGi>&9nlbDSPT(NA%QqD2g;PK&&F*Gf7`u`I4xiGUJcWF-oSd$xMo*)!N0>HqJR~mx1bieIRw1jephq&SdkMe%Msa+wmFUXe513=fgfu>gVi8 zMj7b#)0?L~h}_#JJ1pPkXIq(;8MYTm27AOxvq4QK+P?r^)UaIUJj|kgURS9n#4lGj zHo0k*9Y`AIW@}#On9KIrL*G!;UXOAa4d_uMeXXtK+GZ6smqn}H_+pWa#t!McVknK@ zYN017lVr~HN~=Sm9!i)A;Db18na8pHbaz8KUzba^BGjgzh&Yz> zpDbeztaj*I_N6VIn=S2UtJ>P9;AF8PHv0V2Bd6YFGt#r58Qc{E=5F@cv0dCnN1Vyq z7c-41pBNWsWkMs8q^-s0SC_%oL#*XNWEK68_@v!d zq-u*sh|L9CXdwvCSZr4v*U*LXYU90igNKmSx)h@BldhbXkMVS}w)IKhp$mTuCud&L z8_>9MCV#QyE}xsn#tBW2qs2~t2PO|&Or@pXxEPxd77=B(qUz$ty5LR>xi0F8C%VvU znFvZV6fq(E?XA-x{|{k3rUl)d?_f6C|+3vuuCw{UsR*RN=F5fB^Si*fza4;!(bKic(b6szW>xmDgo|Bd-dy6_9 z^1Wt-sa=?S=r5u5`~Taa(ZY{?4&1OBySU0@^AR)T-!TbAZ@1|Xqs4nzoE?jo^ZPMV zRD8W|UTz+0epi_I?cFfHWt18Gt_W5Jxom6^u|yXw=3 zWu$lbkA&In8S+Tz_{xu)?8!Q5_|x&#lAe44NBkr1@aU&wGk!BpXv{^sY%{-@N3Xxu z`e*OWiTf;I)pVCtey^Rr*Pe~?StynA@i?V@Ol5^;E)TF*HtUL2xZ|nu?&`gL`RS1M zWv9hjz1cZQ=8rM@KrFg=RC!~ztybNkRIt* zd)l#5mKq=Vsa-bvj5&Znfdbg>fZVL?su_W7LM(hd(?Q3 zA#h_x`odMoc^()Ot2a)~E95CdKUuDho#V}0;ogCZi$2+9GRpOnl(hI9OG&Ihe)|l? zW{m01Uo4HD9(iJ3N22<9;v^fAX@EVD_hs&6I4X+M3-t`>FkU-PQn%;t%c zG2*IbY|MYkC*h7SzPtU*)j-%7a-*1RxpjG@IiHfB50!w=!!OUA|z=$Dzw)x*Lrvo(fh2j$6=o90_FT-G9`3=(T< zW%PW(Otdyuse{b8$aBKoT!#muWh~{;oW6&8-tdBbPWqHDT}er{`Slsn=2DmJ@{nG% z>Z5KWs&PkNn3}8iA$z)BHkf_O7g%L;BeFIuvFY1>(;I1)8T{| z`#$wIE}2OnX|mMU8=B|l?dj^!+Cf@J{o+MA7BLc&@sClO%A~z_@H-Scl0UrnezV+f zmF+;jo{bwL%L(xtvgU`@tZ8`G(=#ke^A|lG`Z?2r{~A9wdsER4}2}s)H4FcDi?vv-|P5-Nfl>TvF4| zT#oW!i1O$~7CftgcgU-olzKI@9z3VM*$(0`hsD`P9Z&F~TmH&gJrT6(_}hrHpdOxn zjmZDfXSlZJSqY1mZ$wq&-(|Jq?hu6ejw z_FJg_z1!+td4#L}ts|^vOwlvE@mvJYOV~ZW_(J&{KQZyg=iA`;_~Y|ahVNX?pD)RK zlhe~^mdj?&w`#zWPtE_~hO}!|E#K-3ZIMexHEB@9vVMI;4$qy0;#pgDv0)wzdur`p zllvFt|Ld{BpI$rpTjxssFCh8x{5Fp94U>a(^5?sBEj#eup27Eg-u^+9iO$}ZSV0%1 zN@|V6Uy+!9r%Q2>w#~g5Z`Pu_v6WkUMGEl9EYq`!Ub3-6xxPwUi?pOczBNtfOVcV1Yu%oPPW;F@PaY?vHcRr=n@8-;+E{m- z4T}{cNY%c4zj;}KobHX5*``ev%?gd3#r01EV|HLN?XybtA%=7F#6c?|Ih)h?v`jDK z8#nJ|kL<<{viaWfv1OTuRa!^0ar)#3d|{RxZ_P3SQW1Mg)AUYB?7ez9^KVFp|D#aEtyv1v44Yqmv-9>bBA z`p+Mg$eL%>Qf;ztE^~{kd1lel6K=>Ll+l-Wj9?q}!>MQ1OXsp$>wvk^k1jA;39($Z zb%)oO?;7(~)@oa8x0)^!89$rTYaSaaH88VCJa?uItT4@^_??xk)oebuapeV)pwGs} z^1|iu7=J{*D2#+HixhqAk0@_7F|*R*sYoc&(l&%}9TVhM|BcCXz*w^=#lWuV!CrViZ`4lPqEW97 z7GhB!S*0vvw3_UG{xEOIg5evh>^Ez49p~=MmQJzp`;48jMc2XymX*r3@GkF$f(6nq@0=Z7{cAB=%}*-VQonf4 z4#ulx|61b}V@8IPM?o6S$vk&hi_cg`O4yWd*1zV!UoN{<~3_S{xo>%a0nZNw_R z@@@Lfr;3vzhz{{M&w)ix=h+XoEUSh@C|xUSH{v_$tM#ksqi>9jrEJyRm=BAVt@BvV zYL{2jV11L$>naTeJgtW6Y2ym(a)dUCu7-k=Mra_}JZA=jFy{ zX^cY5_web6N0xxFedBhV-o)ft`AfX<(EDH*llYmHyPtQft$)4FW-owuW?U6%7=|XB z(*fpUF+J2kUH``I*@>>-zNCm}y~hIiY!E*4v9;{uI!wto22=Xep>{g!9glg6v->nL zy7zxQpTvC6b=h-BYYB6jD$|>cKBOiwbms0S6lIB+t7ck31<`u56`XuPNx9E#I~y9; zVNMKgZna5F()N4i*eHFAgK9!S*RpLng^p$A{Mjty#kI^`_Bk&gWxU+=2i}Vl5(wdR zDCJeI)$AM#>e)0cJJ+)aPqTQV_1G$2#-(0;;+t78wNAE9VrK{L?-`Wv#NttvrHm6y4S4p2VW@{fc zp$wIC>#nPr92j&puTM71J|vWPC!M^G+8VD0n#PlmM`C$Du<_yu-O^#$r)@agX&DzUgx3Pq zCyo3`*`8_~vTsk;A*(N4=6yJ@Ke}~=_KPU>m&e$@JsqnTi}cLnWR{-WwOIZ5q^#3> zH@#|+fi@~B*dS@FxYD6#GCIun(lrlMhoiG;dg)CcXKjw|Xeuui2k#{BoXu_iFbrMV z)w(v3>Bu_pFE6D_R*ChqJdNNmvUB~^t(L?X(5o3LITv$jIQwNa`s$INkQcUjUkqVj z2Wk1Yx&54Wtq@s=6=%0{wED)7W!7xX@^ zF{}0FcGrFSjrC$XEHTVh{m_r!reBtKH>(#pq=pp2FgBYr$*%lLKW8Fr1o z+iaXs^TK%+S>Y~DHdC6L-NA;T?)+WZYp-Xxnti%Vw`m8Dezf`-GP%?0~`E2ezelC_)Y7i*V37EJes>2rCUwRzg2_0xCkFT9C_=W zLe&j5Np=u-n4@(7&i=20y(Qh7({$*Wg)Y;{Zerhq;RpGG9=re(Lzg~g4NddM^3b}= z9`!k{anjgXj6U>mrIU|7?M~wD>>fMLS)k{LIEkA{pQL4%d2_4oqOqMmEqnWkxy6E6 zvvIZ|0j{*19@@-5&2V=2v7j~G#IL&Z!tVD>wYV{Fu>eDFMYiX5pElwmP4+t-nzRFi zBc8HcK3Gkt)SDMNJJDf_x%RE?@#vaI=BLKDUE3UMQ^QJ1%};de09)Wp%aM^S1CBl_vczxfo%ua!@+-n?$v2 zRiyF8d08wNQ3TPI)EzXgt&%$oobSbfI&JRqIzGno(()i-f)dcYGGRVwjJ?Gwz2j9}Jng zes+%i&CHs8ic((f9>RPhebkM)a4wgdhvs<)j>=1V8G%J*=gl3r)7Ra47w{QGY{+FcZf!?qdC5(DJ2iCIEh+_LvR{a!GZ7uC}xu1N_=ewUTijz#)+ zKjg!$Z}?+a{WQ!Puo=B*Y1Jy%m(j~NJI6oGv&PspKjyLtnMUOE?u>KjHT!p;^<$_v zD`%NWXWMyT>q;vrCg-cM7n9EYpSWoPYiyn#u=oiXjd0VxfF6sl{;o*hUTqC>t~FmS z_l@ad+*->IngLrKAyM8sDf)V@vQu!kHI^14FwQa5kq2bs5QjJKokjB^GZh)>IUb4v zvN7@__|cj!dCBZq+q7~eGxow%`JN)k+|xz#n0xV&rO6p0|MG^W|MU3a>Xx7Ru`&3c(_j=k*&t*vr;RWkx$AJ3K%86e;TJU;Hm#c4a|0+e5$$L2=JA?UZ)U zLs!m*t--~6I%ZGxv`HtWtaN;0zpNy4^r5o@CYrN%hrZ+F@ans~qntnHiIvN)t;i&h zL-Ib==$pMr$)edJyQW9h)EZyr!B%*(T%+{}t(akvWhe7CzjlaX3GZRe0;D-;2iy1w zeYN4lI_o*ZnblZ_M=jfFYmPm6jgxHCTzjXNCr<;u(!6qltbG1A-+Oy5LK^xJLG!fOi#PGX`#n)?B~cev*Su<+4tZR_ z1$7vevR7G<47%fk9AoAmWs7B{vRg3)w@*(@zb)3C2umy4vstXnAK>`y5qo!cezhLu z?u`h&JJxl*jNmTR=Bb@VblQ)4pL#f#bvv&YDSG8^`phzF^sOC6{qn-_;BlT7c5#zl z<+0goXxTY?utXLi!4aZxhQ|LCT0CS0ew8)aVPDK_)hM?2dk2`U%6;-NnEN#6&ECv; z>c+&KyLuZ*_tUak-Wl zBa8QzJnJM~-86{RJPgOO3AXa8;#XgYhc2wgQ~sOX+T&p$3#v6Tjnj1_({i?lEpLP` zKUhg0$J(a{Z|=y)`R05>@5O5Ut~K9v-ZTFqS>0BFIH0}5oMh&+XP1b zOYJLpueqSuC!bH>jZV`TPPf&}Kh0@OjEm*sw-tdO?@6OR#UEK0b;Il$$L7D*4l9iH)Q1H(YZ@4x*DK|f@GS>rHyRWx+h0$od?M}Q!)(n2PngJVZf)TqnLTA1kgHK_&pLP4U;7dxT3AxAENjF*YUV#lGQ%P#zF;|h^3K+${+%OM z_AjRQFO>S1XV$KsMcOHr(er>=Bp(Z1__e@Y4`nEKg|Z&b9ia=S-dY-wjJ2ePx;%oW zNy!SlcfWhow+|M^^k#>qA2J+qo3%+PE?BtO@U0+6GwD~K&9A1Y&y&hQe8VW$c1hkf zwaSt3)m*=D=2v59@+N6}t?jy|G^lxB&-d?<*|CLcW(~xozKq}Y%~489vok-as3})vg&sy)o&L1xBs4?{m(nq z88!aOVEITEF`G|5XMUK)S}~smu;9M)A)F`RN?ZPb$?n*xEBV8OO}Ouw$q-aw##5S&wG5gHzsB8^#0m|&FEH+gpk*TI+WS$7|!F$n^|HU(CIA6 zuG0p;?qil+(yx)($PDdYJR6D+^`2|Q^=~-+C+401sou+Pyy7zOCkqEtak&i|ZE?m7H0qJF~~qkdrgd94qTv{WOE8 zxwJ#N!|!=WT|AG6X4;xyCUdQJS>U9^MhxXW#mAm4i-&o9X!8fYOkNo18=~#`X2C35 ztNvM)2Q@|>>j>2lnXCD-^z4;xXN?f*xlj5|np*Z{H4>*;S-H5~S+AnH?4Z8c8$W-D zFQ{n*8QuBnYGQ_e{#Wgc+Zg;cvg{Q*{of9lBv;>b%42(;J>OrOIkU;Ki?uJ7%PV@| z0wZIkJmEYhF(7KwUjJI=`_tkm@azJn>~#ozxZ&S1?^#c*s$Md__w#!mDjR&T%;uwX)?c_ z#qxhRf5$zXwdI+e)$vG2nrxOd9LM=+TG0T0)>%}3?~2p73{|tVf`|fKyi@+n{JT6m zh9I_!=r9g{zgg~_1m~>`J;7V~+B?K&JI3}D&i+zYZ>yZA(fls$vo(BNWaSmnLeOJNw(HcJ_%GrxqlCIC>l0zoe;@o{4>I2KMUB)tIy+V~gjsf|m zXTD`8*D*^6S*BQ-wO^6XDF(7pcX&9PWY+mC+ zGf8CQuX}gppRfEPvvGQtpUd>3hYs;ge%SO@a&P7i_v2@E*n%+4FLUWPZ)k4!`lXNd z)_)SjTA0n@2qoP@iof}uD|BR4R=R`iL)1tz)opFz`+0+NZzjk6vQoHP!~1=4^CdeC zq4PIxHe+~-{Sck4vL?NYygWWs#>cq(m<#jHYi;)OG}|>ZS>|3%qsn<_L;f?SV*nQH zXASu~KCFAZzsy&kJgFR*Zu7J7IzvNa^Ut#Ss&kmNQa!4lPP-#x?EmhcUbA~%veiBP z*`pez`Om!B`1S*8HX?a1z@Jm>qyYr&MuT^D7Z{Ca;nPmaO9=U^2ws^0Y| zR!>!?7d12qar(z`wRp|f=y7~t#i*|@#l}w^8-m5faj7j7`D(h% zZ_<$e^fZw){Iw#83#_*K-a0Ew$i~yMXQ}Ru-FP#Tro{>a7avp4%4*UFE^1mM`+aN~ z8!y_ruCJ$e_N&j?sk&C#iwe1-|C=XX%pE7iJ1+CtP?aT}?KbG*Y1>^ZYNKJwUel^9 zlK1AtYLeDWcrYd}%A%(eoYQKtT@07)^jC^2<6@=kFke-#*F2-SoICIw_dF+?rG1tw z?`<_;t3E~Fyp*iwxCjWD`LoO7A(ZCb2sI>}?3l?j^80$|Nn&-pW$5FX1U1kpO`mB| zUC~mHr_*y}!$xlo^Z4+bequOAeEWa()Jhi};hH(-?sQ9WmSfkjp zPG81TE~0p3dR7yn`@W%fwEov8_UJFbblqQrSrobVcL5eL5YcvC^hG?a`!-VVqu_wF z2=$B<(d!NwgJa19k z+EVso0W;Nx=^~uO@vf&;$ha&PHW;$EbFnF=`&-EO*0D86#wsT}!^dvrg6ervZIcT9 z?<0NHL06tFrtvawqYoCbtY3_#Wp_o>)9@a~HFh$}H~HW+{VLnT?-m$H{KARaPa>6!FjZT6#?8{Q{%CCBsYbsS+#&vFO?@a(rW<#7|W%G15PRhgi zkey1N=6-pU)~#oGI6bx|;V7Qsoz${XkuvVb<*pbaXQLa35jBoRCUx0NT^MTBH_b59 zVSfFw(>a;?V!-(Q9yA2aoy2U{?5wFYU;fUlB-^rVyCdcK!e%PhT`NjdxAV^UeC@nlxZ+D3JhD}MLcoUVH1 zN$?$N+GD1VUdg3L%+!*Goi|IEmnZZ~RRyB*U87iKNPrCW%~(c{BPK7AUC8^ZiIiXnxvtkMGu(BHT)|RkwJRqxGqM zd0=sF9@yF&$yWWgQf4k*`*!i0-s_RolI}c?$M?0EAs>ak!`vN8`6bPjlTdAbJBy!XH~Q~o zOoQ@RI)pg<`z?63ZROpbqIFkqeV38jvHjEgO>6Jld%l%*zyC`{|9*i*dtVRVS+(y# zgmv2G_h!nsDyD&$gAE+mYOA#jf*yrLQl@s`Q|Yrn7>S0JdRVNlT$WH&T^Bv+m+?P&Pk6enBfdj`ppZAoOUH~JtW()@Z#Pf zZ457R^w*b?T*NFhuxJXp{%VRVE(GDy-lsC{O%|kzbo+q)}{HG|Uan_F`QpucL`j;cZ zYlfnqEV-(u|IWo4{_vi>Y>4A1Q2?!0YUsns)-I2(#= zm!8$OgU}~d;m+2r3acG^Mx}vkUVB{e>kfSAr+*CQRh9Lr#l5-tP#Cn8#TK>Sd=++M z@E!9;PXnX##pXV|G=T*x7nyM-@-gZz-t>w;yf4Ol?^XQp#h4?pk6tub|7IQ<5#je+ z+q;y5&Ik4O6Qd_JW{NO+B|!=6>O1m4e56P0*TC3Is1_Oln6?l(ujd&GIG{`jBg7GbS{<>#K=mxt5gYpuofJdOr? zJC%>Z0MYR_D`mSwKI`Hu#Qn<(`xgkZ7tY9%Uu4PTd-Bb0tKCLt4ls{PLqO)uQ`&Uak&SQ(+S*{&b5xSL5PqInL7Iwk%hL3FG z|GM-)bM-%5y6^8ZbiW;QzXfIK-g>yV#?P~1$}`O+Yq#%_>BTgk+b6c@xwnI%ORHg} zHGYhCZsi{9R`6m=uk(TVL7wofhtQ$__gz_KdgPf(JUbt3K4Tn7RRG&?QXD80Jkr~4r!sh`Qhi#(OoGL|*JWAkbah58WYb;^zUvPzHP5_fl`l~H-C zY^yGvZ;q8{Idq{>li%a#`+P*#a#?z}8YUh4eta5d&T8$I*d?#aV%f{so;pLA^@^2r zN>3b`J6~;fQP;gzW!Y7KeH+oY1G`txWA!M8F-X(=xRIUBodw~n6e==i{UjO@R-E>e zg~@lQjpw+I-z>g;B&IID+tcldtfz$DHsBYVS$C3}1s(@BW>a_V8JzogV)e}ColQ2? zyRqq#{i`XavQJzrdh+S|#sGVU%r$R-J{k4FUx$pWZ0@fOU~+urr)hI3$7x;++twL1 z?!S6u;psFB<}-PfGJncHCUxFOqsg5mUFicS8Aaiq2GZWyCv=kv`*C30qC^Dg+s7U6 z=qXX3bRI9WSb4Twy}VG)7|$?X478igCuqDK24Bbu%K&Kz-x$ZN!?jY{4}690o2DC;WMejmD;(ypJS6V)tiH3lZ0$Zfwrc0k z+HZW`nzs2xGo6iiMRv_z>s7vupFCwq;+F1o<1g(`i~X`0{g=@y*~h5K!`u1ubDSlE zT%~!#dGX?w-R%S07qd$IwCHzO8@_Bvx9m`k$bXV#L>7k1hOtW$0j!~gHu zz5d7BXL3l3IkM+vaF&~B*sdWn{7hh3xkE63I9AKrW~ugxse?OrbGX4SiWOcVXee3C39F9#MGYdXq z|0Y-2+$_COuJeqT4;@rlsT`H;&c(&NtX|7qByY}2EN%|9S-%pGg@@P2V5szU(5bfo zwH6)F$5qmL;!4|g`{kqNFzfJ;;-Hy2ch%HKEl=?29h+>IcVV498@Cl<2#xF@sXXJ} zsC+Lwnwb{m9W3^qkG-&1?#bihxL9)TAcy>XgV%=GImVR29Nuu?oeXylnv(^QPo6IO z={GFOee_hD4QQdBBy;(YxE$K};}Z^k`;LNlL()T$Ey z`IWNv@`pAWyY?x^*Q+yalaV|#II>Ze9QR$*Og78U_?}YFdGw4sJ;*Xco)r7pdWc@Y zFL!D}k7MH&&m`p4$uOEq%2UB-S>RXm!h_TTf}UDgcyB8XPir&Ttc zue!zu`{zR|eRAegw{iZRSjMuK?Is4+mn0Sg?EEjQFn$2}R%MG%W z>}38*FokG2I-fTdBMy4-l|EYuVr4lgoey_ojE7;Gkv3Z@r(HXJ*E@$<7*PugAPfqWj4<5JCiW$tD)`CK-nB)+kI^IhG_o9s&UtzolhJ`c~WOQ&Z5n` zJN`3-X<+WG*t}+Nv=Twr`qIoXBb$G9rcYL&X}pqQG<_>|?(W!8+nth8I~Gl4M>wqs z9eiX_lTP%K+gro=g;H@Qqmw#6>8^RmOg0U-%JzFkp3DaG-&qJZvtYK9vmg?+zCqEq zD8w<8F`iXge~RnsX%tJ@q8(m-m9~(^_YiDMD~8r|^GxOUqO)oJX_#k^?XKzITpT8a z?Ag#YRAh>3=lS7$qCT4enmnAObmW(QJUtZYtth=&^;hhA*2p`vNLI-!=2w{LD67EZ z&~7$Nx>r)8S7T#UJ?Z_#Y3uU1Pnz~|-jmoEin%Oy{9!I0D^2faOHvlyn0Tr8v|b&C z7P0jwJqCGBF+2&ffgBwk$J*AD8CXb*y&(Holfunx4&^ z55bTPv!!y9vqiaezaen-O$Hi^X}T^0-8z=nEM^u%Vssu|ju{iNFs}_I{4B6lBMr3; zo%zapc?P6k4?4g4mcCxbLvc|gExxP47cTO!=3IOXLw%|ps%%cidJTE{_4Lvj*YixV z>N!-8W#45NSIEMct&%=_U6ho0`&~}o9m5A-%vyP6ztw3ai7}WjTJczvX;tc=k+~f6 zoiB4DE#IZx5Wn5uQL|`vQa`&~soC`OL%N@>Mf_n=(6fTOz8@oAa0kUQHl8}H7+Hio z^NHl|2Oh^fqL|X-n4EWI*`Z5rK6uY~`p|D)nQeZb@!K1Ez3R(4>iRy=N!UBdco~-v z$NP4l{g!|w@X@>2MH?>Qie+PCz7pMOkx#&r{k787oQ|Gv#a=zdAU}z_x650;+!y8~ zWRIeXU+3Q}+yMZxqaDrE|BU|eI&16B7TY53?6nizFf*Dk4?(SD>gIqtI`KC(ok zmMvDB$DCZ!+GoL2RD|??FRgwp>6o^nBt6q2ZSuQVnzdrm+-!&S_6=rsq%l-RcZ>~| zAqQJslE!Vj17 z>|@mt5A(S^ul2{8E0<*nJ&V%V7z^7mk{QoK22UO}O<+%N+&J9NKS&rCUE>8S^>5db!++{yjs04&+hbIE&)`Q|2x7)OJd>4@+`C|R?#GS0);36#tGRf|HhEAp81F;FvvbiP zXZBN;Z8sJVt#<13BIjA});My98J^gND=X2T*2V32UCLu-=`?|{c*?%cF*vQ|K4bEr z>@o|hqpdS*IrLZJu_1b^-&y7{*}%y7>0Yehptqe_$ZkMg?;4=>0}-jN!&^kq+Ir&O zyV+@1YImyM_ow}|3da4bAv)e@(@NMX5s#syH|;SQ3+AZix%|w@vSDrKVpKol z$~D$1Rn}{}jI%qb^CBq1mIa;xe~Z8QZ~h#Mc~uPNV?|$kjByy+> zRn`vo`Wv0qvmyUjKa#qmNuFb$b7=LTNi)HLkIOZ(VUg4By4~D%+V!(~e*dL(QeZM8 zoS`t+R;K3V9T@%M4Rdcnjokg@oOWd6#ShdX{j8axmC|}k`ulVJ2B*mp`ent!LLqqO-D;WmM5~9e{`ShLE@lDcL%15gSL$jLE z+*+JjFIF3&FKy@@CutsfT69l4dSc5#N^WA^yIY%y!ZU`&OG%;U|S zga5F3dKS;(An(h&ip#v^G&TD0!moEfdE(?RZnTh{`Yk$kgkBWAldKHk{`j`C&fs>|lh6gM!q z*Sq@ln~!JxdgV8ILrQ~P$#GBP)7q#adF`0kp1gNYJ*UNvb2}-LwtlcbX6MD(X!mBl zGE~;fG&+t$rfqu4#Ms1Q-}LBtlwW#(WZ&BUvA0P5TR^snp~XY2#W5B;%#^2eZog7r z<9Smp`d3a*ob^sG&XUxb7HX$&UZ)P{wbs^Hvd!t79cD)@%}a7}cGgo}bLIE-55F@n zg|q84Fi%M9f9H6gEsDsbhQjc|NFL-_$9~Z_Vv#qb#%>69c5@E6~ud zh;*G7;_)}XWt#b7Z%#L2jE%!a;*DmlZTT3U&fAoH)YVdJaYb*sk?P2s)i`P$bH#Z~ zg{JtM7t~S)EjJ}&=U5-d%@<2~P@Yh|xy^TYj7w4y-0_L>j`HS@nKbI0mFe*+`JTu+ zjZ`Hst=s3Q&3@@i^7LobS*mA@A|w5??2S?iR}z~gZ!~Y(oKAULh{_ty={j4HG|Nr? z@HLAW$>=D%;&k(=*@yHU*GJ8HMm>1ZSjSMuA%G7TV@t^qGi9FPYb-Xhjh;i{nuWs| z{&K-ae7Q&lp2bYLy%_2p-QG8Bf0y@?&|dqF`5x_0btTF@Did^-zmeB;PEODN?rvmUPV zo?7rXEn=E>+k%6j`&Xd+7T4dH|E=9C;M+{(rDyeCZ4FTI8i^5u0{iyR}e zvwMD-PBcxoS%)3R>M&kn|I!%9$)%8LaL z?nRlnTaMs+{ZDHBF6P==6Xin|>XWs`Uv|&l>SAp(VyHYeZ=ANQ8v}Tn_T#`k%=JE2 z8x{B3XVq9Ws~RnhR<0&rnf=!*Ni5=Uw{mRLE)U@o@w}GF?QLq&y1H1IkE?CeQ+P_v z28-IFpZuagi9MXVUK@+I&+L1cvq-+570i*I7tzym`HWTi_E~$%tTdimfxJVpw<(Kk zO=_3j`>fft{2znq6rSmk&a^n*k8OO!bI8|^JR`rl?T(!II-W4ox1cb@lke{jdrs*u zd|=d$fb4$aYAcx9e&b-?7!8RQ8NWy$Z_A&sI~rq-Vl->Q+DcbTmd?KE&q84!WqvP4 zvW8gcuaN%fx%w-Y{hdp1vG&{AJqH+(ZHlq^b!@^FkFdpdOov}q$j8Q`RlD_RS#>#v z9az#xEG2nT?;0DkJ{*o>%}6yc;i<#DL)&7~3`Ke+=lZO6NN#L>>ZfllT{nja9#-wj zuKnZ(kZo-CfvR{a^T)DU^EmWBgfZkEdz(W)7-=B>I_p)>IN7sF`vgeBp7hN$Iju%T zYVSOY|0JfB@ma39l=(7Q^?)oM)REn+(DUMXc;(iTX_bE^lU8AoNn*@Bk9HTfp)%_i z!{*E?W-)vIXkGFV=apc>EeXz8Tr8Q<9Sf69uh{834xY~RZ2w1^J3Kt6*UGIx zurC`mfB%|0pTS8Qjh*h`^aFFgPwsrnJVSYiSvE8fjJa87)?!6vxG+%3i11ds^Oy?N zWX<+un8^{V*|w<6OW(#HH2Qi=GP~_+Hh8z|IlJq@uD92aDe*{ph?^me=P5MAXe>96 zy1)L_SYFw8nD-pCZ;hqlB)Z~xyymS#x>d5j+2kyqe8;({2_fC+P*nR(Q@;oN!}~qz z)}HdGGo;wPQvQ*wabfaj+@QB zvRU&jTFl1!vvR$wO;&OmoyF?)?O7kJlj2y+V4(iml$*a;_^)SH%39frUc(4&IVvm3 z4ryY>)1aLYFKA|H+&MbG#pm>uJgg_q$heA5%3_UE zxAjxJXBQg3O1(b8H-^+aeAi4x@b)g`o0&vXpo-c4U8J0`Tq4KG9ci`_t^1BkTtk6X z*D%Q3m4+^k%8Q$gjmt}mi2l;dqUF56xE&$RXXrRRv9rIzvK_o@^<}IwZ<9n!XvLn6>}RzhXm)y758obMwr&Lz{V^OOsmWVJsOtW#zLpp8AwKn=P+9FELv> zkvMjZyPR&uFs^q@;%3N6H_D-xGl{DSd*?J!K8wL{k+A%oh0dy^=W+Xc-#x*x!&lxc zi}hB&?2x~Ug0T_Kp-!8zP_)D=Zq~~+&elJ9^qx-X=>E$!jFX~=4}G9lk3lO2c~G>X zKp;*?(kt0yc{dUt^N{4!Z*dKUUd`9M>eLLUaYMAx&E>A2>CEa55uk07XMrLkttKl^ zba%{WeUjp{`&lv{3l}|`#o3&sl#73BW$x28S$d~|xzZB5%4F?2>xAZ7!k$ISoLMAo zAW260J14jL?k^Is>e$?AMw>iMOF9+vji0r&!FN24+3LR-dM3^e{A6t8-z4ygM59*EI7!F<&(@tNS&kja8K%w1G)=z$ql)a|45b!6{N)TJ zC0t7^XNmCeSPp=jl?Cl=&9*eK8#cMxJ@T%5M(?gB92-Y7JhHjfrs&rXg-;tUUBxMU z<&^gmTSesATH$VneY|Md*vZWj78T{Q*b#>z?ViRr9NpRMZ=FCJ;;e7aDqNCCj~^&v zt7F_|6qubAo5xL z{h}B<(D-0KB(QXLxd3@HVs19XX8iC>d6~|7meb@uk; zvN*n6IV)qNs>Ny>B;+sVb}S~}A@8Wr!fS)#xS0pDMc?eGC&rW2>{w3L$#X_(OvS`J zAtJ7~QL#81Xz^WAt?a->vX;SFWj`;(LM^j{o@}WSLn3cFZeL57*tY6IFL~{up~HTy z;o>_V&se?LY&FqlP3d{M91I^6Ws@_}Qa+X6VXhukl|_}-Z87M|3{PO2d9kIJHSL{M z6NWiHvntE7{L65bhQC^^#hH1noY>(5RlIC>l?PgLAi?!kM0&#A>e3qkE!fc8W?u2p zH5qiIr6_S9if1TT=9546OjeH(S{${|Qe?%--rklC7xz^OUMRDRnb^)Z7g_TUk2vo- zO)P*Q3{Vs^_+$x8KJ!Xm7#H!0S9y`_^u83mnKEnUKb}8n%O9g!A7W|#gve;@>>UAQ z8goJ&<(Lgjf?S-hT{|a{hrqO zq^O}W517-IH+w&cpRIyb)$ZVzH|4PX7r}g0jO)R)E#KzJvs2I6l}s_4@A6(ztB-UN zZ%&>ntFfX_E_W91)pbnwmeX6&-~agQ`x{b!d;Uk@zrH_zeU5*9@4Aa$eC@p&IlRUz z(83R!pZj!I=LyG}QzULR>iuSxjIXS*ABW_1r8RG`=W@VYeHggtTZE0{G>E)n4ohPh zGvNsR-n@pnH`4sR>`5a@wz4-~@EW7N<-_Y@Yc)F$upsWjy*=Al0~5P#>FH=MtKuSC z>R)~o#l>+R3ZZ#F*uZ}tbqMn}a_%OqD z(QM9UlTamK+nCGGtnuN;L*%+~Rn+34XB_9=?6Xre`-Y{O(tf;$uD24MR~g&S$9k%p zs=%FXtOy`cJS6$Dc^tu=-|(v*b=O;UXBnJwmd#~vm8xuHY4-3!^2goSoJX^jzowOD zy?L-Z+aeD>?Ibp@Y)dB3v7TMCyB4#yC3!JL5*fP=RsJ0^G2b`{^Ix8IWyabua$M<+ zJzV%1t9qJ~zBnrC7Kx&8*~jO7OT&wOR3HAmjLxI^Hz}8)X_#JI$1%&C?RuEEZpzDY zlb2cBh?@~NknX-0ZYa{pLON)$&0@zfG6Y&~4JdB%U0f^*NGS@)zAT-$q1l*uF`sIM z%6CiW;Z|0vbVdpG-)l8?dARIR=HrbG5)p&n?H9a1@-DFCd#Mb*Oz8ih9-=8zbMO2bK;k->0Db3kfEhYx2l&1 zwzfl{`WZRjBs*+L2zNdzj{fz|4Ff*C2k1QhinTJWxUq+jzH!c$(A%e}7WSzT(_U0S zK}+`s#*mp@?AhXnjx5~SDgz7qDLRS(Z6ai>9MZgCZ=)*5MwlOuEV-iQK2>te|NetnIwMnD3h);*PV-gZNjMr;Mv5r;W1?_E7WAryWDOnkx zu^`8NmhrK$dyYH`zxf^QLkq>WdaLlsn8f_X>VDv{Ro|v>RxYpW53jz{boz@zXm*y| z{ML*(4rK_MAGga39QGW?hjGb9qq21xnw=#y(>Tm<7E4;Q%yE(1Sfj(^C|<&!Kk3Y; zDzkH+TEon<`1m5KTBM)8`FT|-3`SK!&Nt2$nPz1HO!Ei}*rEq+SgMgBu>WETZ6oc6 zleMh`Re-GATiW8$@2a^I?d?GK*4~G>=IxHyhoXB9xX;_9(U9DHK5P)} zUc_%f<&mmZcO`w}>#4uDz2bt`)U|%P>OFw(iMy9+b@=Y{3(w_^IItJ5szH@^|MO>Y zl^s}dU1WQY_2>6{l>YKR9{lv|n6&Y=WB&p*w&u}dwj9G~a_r{?Y#o#HEX)s}_x_4i zHdoaIaoySK|5(t@_Ht|0VUdt7v1yziYi{pbyvxcT{YGVS()=@;SBdh?o|xnk`QnW| z#Wy=eihV8P0tc}jvt2FPzE8qCueOgj67wk?W@~X40$6I%*2s8=u92H{`1-dkTN~H@ zhYdXkK%EVq~e7 zWF(y&W0T`bZxL4e`pHbcF^w~8a}Q1Zv0-0N8j}7@dbT)r%u}Il23x+ituT0j z*`}}U^vZ_mqp?|QX@*vs#LHxcPCxGaH1l*A=?a3*sv?cYU?bYcOVxRiVYYfGV)Q4Q zWjM+6Fs;sXtU~WTJ$8z9=c`SdowTkXiG2~9MUK-w+d}0k%flY(MmK}JHX|pwmhr6J zIRt&WgKRZni~Ab5RzqFklfG67dv_atgXX>~a`u_O@rr8)si0i@+Epu@N_p4jWBa zOsBo8enepPUBnmlM)+(qAC9hB{BvupeOO?0Mp`*#-}eimsBw)UseA}utzTKR8pRGr zeSMNu+>n}0^RHtwztZv;oqMaFJyjO%M(}0-f134{KlS8m=fgA`T-#u{S{I+InQ>cN zXyJ+>mK5hO>uqB(9a&Ak?DjX5kjs;8@LAssj2bQN06VNuUG)T6cWt{Pu^wX|7z#=h~b z3FTYte-Xw3JK+1doh^D$vaR%@E`bm9IOXazn%y^X2Pwhb!5| ze!Q{2yBF8)bXq;fUj1UcDDK<*JXH+Y$GRg8Fz2gfD%-X2VKKCP$X0hzeAnF+ox74# z_0i9oWk*_e_gBV$-&n<06(FvRSrk`A;%ZFs-Vp5Ho@RG=;DSP2Rq>Wr^E)&$Crz}) zKpyKn{LSRMn6hVGd~DC!H156=AKuyScj6&~st7MLAWYUtOdkY3Ssxcw*j3fg%!_Hy zAA4HwtvP-3%e3YlbKA;{deg66Jd1=r!?5Rwd8#ad%2?Y;NdB}G&H9r){bSZ#3|&m> zshZfE=Xz4}gVvCno2|I_QEOsDdsi0|@poyPb5v$Ct zlKnjzeZ_0o&ezKuPmp_S@6ElZ$i5lbeO4T~+6t6M$$~ZS^J#Uf+Jd!wS=O)t8dg}j z`-?gIp4B?uhc9=wmE(I*|3q(=8O_Z<7$#X8^hITLRXje;Z^WJ# z7q@X~B#A}uV%Qk-*qf}ZsdX}4(P6uICfCOidv~3*@uII$S@Mc`cg+uXv$IQ!pIJ2~ z9OEUQ+GDX;tk2B&+x}-XlM(8kCs{V+JA*uX97EsJMk}HkTclbIJf+wsB`d39wDmm+ zj3IT_r#Gv8_g54bwPLth%mZzC{#Eq&vFHsWpX3*e4S7Cry*z{2r|i7D)81lKx$LW4 zMv>nNQkIaU%C9y5u^#u!t$76l)v5J4vg!jAe_B%}MPF-`^?*ytkMn#-S5?GykzE@s`BFryKiaWG(lUCnmtV#QR)(viemUyO zcE|W@CSIxm`gtIG>C7&EDi%r6&&o!=ho^-l<~eI$t|r^4=^qNRSad$rQ*UhbJwevT z+%YRY+DJ}*dW}rCs$Cpz{Vxh|k3zY|j=wL)ECS=AA>_C)Q%gyjh-%ELUFRrQ^KMQFOyL}P7=m@p@iAKOxoX{0poh3OO)vcdz)5J!&$c*=8Mcl?1OR_elbBGhG$E@kTX@I`PCTphYjU>b3&0d$!ZOoy|)e-8T+jY>uJ?n6sONVX6Dy$ z(=+y*6}c?R`;98f#y3=rZKi8B_Y9$DF@%Gk?9jjm>e6(<;D@Jik#8?{=h2ud{-7(r z_H?j2iq=u^-{7s_l&7xeR1cQp9y$)JBL*fT`bt~OHE zZUyYv9Z6QZeFOO&hO!=nl}$J*U-Sx{yBNJ;-`qiU;m2)*89Dmeq+*mAV2;ss5`s;9_2h$ zWbzCKtpojAiSvUqJ-kS3jE3?M$3nJ>r|;R$i|l%h&-yqY`+D0PalGr|Pha)nvNHaT zp)%)M7X!t4JSLk~-Vy^Uo$5z!nBa|bNQY#6T=e5U9J)7ag4$ z-CEL}VbL_6=(2tFlQz!}DZC`vZhUR>9+UGgy<#M(`DS^NHG3m5zd0@kl2!bZ;cO_f z$Udvs83!HXSN}zpyx&@=$Cz)$5o@)kMdVb;T(dPqJHi?MttRENdArjaOJ-x?>^KJV zb)4>w$w-_QXY-~pK3Ny9W5ks{==2f$_+m1bFjdipwdgynZSIl-52krHZM@OHH&u^~t!B{rK zHjmDpyd2(`Gh(rA{N8JupGnBaidsnl?Oj~?n)X#Wzl^1th3>#l%GB)lU zjqa0_N#L6-3@1!@jIHbl!z!DV$6cok?P*)pYc{$k86|9 z?r6HFcBSrNtvf&1hL2QS#aJw{DmK3Ho4rNkwb$Cbv6R)Zm@H9ReZZbM?9KyN&8PEx zaTMD;o4512^K!j;_3I0R{zlw*%=jV6*53SKbOw!UpCVQZ=GoAC#A|s`uJ2nvUelUY zuHw(UJV)d3>=@D)(2F@_Y-bB3v;1q**5R@tON=vP*5y+Nc z->|8k{24!HWnX>Ep59v)NqHdDL&)l$Kv>X|&hEckfsFh{D9qTKbumf9{FEJV%@^el z-dQ$3z;6yu!XFE-_(vMvYH8l`u}Cl@&D}$|a<-g#x}VM1bPSy+ z81YdArdum1uKKAx?rArI_0_WYA)zzqX)^NWFT0G|_Kk{WguZifzT5gRK`ss9;F0v7 z4{9sZ^8tV6(fQ^iIxA-Bt_Ck2XwoN>_U@&qkNL2K23|U+;s19WGucL;EvxLEm%nS* zS``eL_HCq$`8*SE*=k=l=dbKn`SjGcD9@|OD)zO^NAt$%Wk*))%hH>nW!~R+^w~&) zo){Iy-|cuPXB$-nSI@NYhx?b<%LACOO+Kwv{OlE-;bUWGA&d)NWal32apY9LTlkNdqTlX6W%NR%cvhioU(&Bf5?k!dCr}{0S zDj-I&ry}-tR?FeRgGv^Lz8UVm#XihgSd{V=iN&Ymu)U_glEWL~Vkz&R9nSuh>HL7} z`R049#>RTwY_F}DfFNILTZ}i8HO=OQeX?(!9wJ8wS%u|289HA|}6lex=iZ3H*`W=8lPejD$%h zjl+urv&|yG{InJ!&ciYPreT&BuVpe`;&*p`{Z5cr?k-ioy2z>|rv={dI4+}lhT7F} zISV_QXHGVRlKgF*X+M6$z?0o!a9G*+o`43O6nK&n7rpKk*-X&hX_*bYT#macb0AV7@IG^Q&3Shy}>9*|qVZ ziSfJ~>uWLIjCran`|O(+*d!LZhqMB0eI9pWC-2daoM8)zeXB!EeRH+AVtbZ!FHua1 z-?37E(tpO{*v+C?pfL_+ucMJ~$Ac4wc+oPs<~VP2g@=yLSnn8@tZ7B+o1X4CMF4Kn zoFpt~AItV{EPJwF2K8-CZ+VLfJ`Q*Kx<_0tEoX~48rO4{nOD_l-*wD*qslKvpGD5e z8G2)I8iLMu&8qT#Z(DaKWLB&$mcv2zG|0x?Q#cn}aM)Jy^JZGQqbgGRo>A_rz}B)> zv-0Dj2m5$$F1)t0CM)A(EM))c7JlF<{$0gQQZAlC9!s+V=VpxEEHj3baY4In3>$qj z;H4!y*kWwifbIGl<9ENjm*{u9FkiH_4qPr(wLLAg(I296J^$AVNnC`xaoN=~_tggR z@5*mwS1DYR77Lrpg0s3aeXA%m<@rV$;aVJ&GkKm@S0D6LFN((7vFvBHs)x; zY|_YT99gY&<9(KNjFGXzrtHm5T!rxbzj!2%3_Xj$cz5+>Uu$gXA=&k^(AE0I;4C8b zA`wGA#gy8xH)VcvuD6-psl*VwVGCtaA$P_qcNCN*ecTdbsS@%jOfZb5bI_1tniN19ej7BdzxwuDM!XL zi`t6MVwUas$36|%qP6N(F=Lrie7fFt zva89fFmWtv+`a0nr}5z{(pW~?ytN~o@x5$a6dAGTcfO1#XHk_G<{#{5S^JAJzKesb zF8Y>(8&?L^mk;w)UZS@d@ZMGV!|tAv`we%ow|_0uZ=Dv4ysA&!Rk3UN*5R~>4t7Jw zdY?9D+Bc$6%`)OF?R8T1lcU1k*!KdF>3_a$uRTe}7a&l?kVRvXYqe z#i%ytF;V6gXRE1Yb=g^+?zb(L^X`Vt&j*;!7mLSg8s3-nRfye1hbl%yfs7CVivm6U z^xNB2Rn-+Ye(<()?6%=ITiM_Fm(BcWtWj4jmJw#z>RA+23+u5rmsDFgoi%q=tvoYw zHOFz4V(e98&M#rUY_291tK+`aFu8lzQZ*qpbY;IW@Q|-1ZDi)B(+*d4W2_db@QlCH zW#rc6pX0x*G?zzv0?eP7DyruTnzhUSD-7t>oCMg0od5ie~F(ZTjzd zuei@!m}+*%`4VH=lcg^|#;kLA=yr6S9lf*C#8}+ri z2+|S;Bb+6nk?Vu=yM=!(aaDekI!2O4E;+U_wNc%b=tE(Hm<6P%^H7Q(Ng~9r}nsDNjdIW9{AJc z#{B%;aWl+j@nkeMzrGZ_Rj_Q~-C=TROGdH4zP4uALt$$y8QT18 z#lf#_GI!iPTw{}iYu>ySC@H(&Co8YpPbP^c)miVv<5?A|!oz>hrR89;>3N|0nf6v| zzOo+o&U*asNOyJ?sfWAFv%2+sP-Jb-k}>kq^6cQnYu4$NU0Xf1Z~tYr_{NWXjN#&7{NOt-79WixpbH*9)!B#&)cVuz3tPPh0xpxx3c+gm?PRCO^%mvQBhD*yc#~Y`v&) z7QQ?KFHAB`?#Lql6H(8heZ!`or9(?cS2TtcW8S|V;;;;fIg6L!O6t52*8BnEw>|#s z-GSR+vbpPGc@gPY7SWe(Jw@#NX_U>F9i7`|W9Uf>3(T|j#yPW^vdrE#nQ+Z>d6vw^ zIs3_{o+8PU0A^Uq3wt_q-7{@#m-VYBT%*oY{27Y;9H!9pmh}6S)SJ^ixB6yKR6#km z%*Vrhx*k{k-_Wq{H+3N^;&8WEFIQZX#NPW6L#sOU(m;Mu;Hp{9YFkXQu{bI^cE7sl zIDN^RgkAApKhTuvtpl^a_ErS5ZE+DMdiT80JyAK;Zz^4k&l``r$1?lbNfXVjG@TVW zjrxvFzx|?#H1o4)*=>ZDm~+Gg)}RyBkYR}xwniKG-Jl%4aENLcy&+0xY|KYh;k4Pe zhKt_XoIybkiP#T6Ij&{Go<7rL&%$9W-{gKW4t;oUES;o<@fGn;Ia#(ijL{Ip0a<&y zJ_#M?)tE9a9A-~jdhOZUy#9*!-s^hn(z^j?y=VB3U!(E1ETRQVn3u1`qFgPXz4KFh zU9Z2|Qxu7-a+>M0*Ac2k44d*y(OiVs8@HdB85{F;GV|L@?=Kd{6BcljCCM_EcWAZl zw8w&oflEY@wy1C(&pel>7x|9bv{sReEANELE50n!%x1wXE^@0FvV)h3n{kj&H!ft0 ztL!k|=(8}+*iG85n$@UzfZXg7gNHV2ic(0|#of~D}jJ#JoOJon*N90a!={HU+l>+-)w%fn@AsPBS>0#| zin;u*7e_o^W|sraD_@F-?i6oa_7qdgsifyo*j|V)%C4}p_-Rz^7T>cse#U(HFi9-D z>f9OGM)}OzxGr9`r@t{W@UW4L#re^BEqH96wpz`dCTIHRi>@JzoAhSK9Ta_mzC zEE?)(k@oRR&umOTzlraCig0bULQ`9;WHBpNlRD~MwpW?9$5L$IsBQilI@a~%sO92y z3^pqy`DFaXcc@~y+%V%SJ$B;1zRkh1N>N`}Wq}M@4y#DR#rADR=bzZro*(BmBiMtl zzGsQsYEkv3rz@4meOMW?nnO-VV`hFmOX!5H%~j)vWB!I9)_NbMU!S?nB7t0<;2}Nk z-}-%)Rs)Q5|JRCPWHIg7`83A~G*$j#)3T^4z8cxQP{PuvA~P>JFAgVbJZIf(*V{%) zxQ-!hMzXN8n1H1!W^!oc|(VI?VS!0W}Vmf@SgLs8C#G-MvSc{&GDEIq4qasv)ej#I5ud(lr zR@RFrz7B`G#E@lC_Gim@c_F_$EqTPHb8>3!xbyTL*J%%#cnH6{=d8-Q^XV#9TBZZ% z@qWzHRQ`tdR&-X>8%h}3$Z%C;LOD+0(F)Ic%kEk08#r5@EU(^%SDv%1JRhIWcHhFo z7;w#I=T(#T@n9ZVaY1rk8`fP{J?bx-yR%_`wE$Xe7$PIaV&Q6!zC31p40oUBcf|T% zE#-u}KhKUuj-2VOV%Kq99AL1Fqs6w^oYmr6{Q9`tixn(%msihK;@;t7goNVa>%HpX z;@8nnzT%mDI^Tp(D~IeUz0_0wW43?L(MRU zcdtEdX&^hfVT1UP@?Y`DB6e1VX06s@ra99~21#OG^yTNGyx5;NI{LjWyv_?%3KFKh zS}YTbNSZKM4h+)|dQkFOTNqBEi)vOrCEKDepOw3%m2U zxJVeoL&F>M+{M8=`JX$I$u3iPVOv9J(L&}TVe;c<(GqJ#+{6#{t{p?47rSOhGB<9y z93$P^lX+U%;?r5{ ziEH@siJpz#*z`B6naRm>(=G=TJ(-P3e*RBWNa4)BZ)+UC%Aei5z4#$}+tzZ&zB$*Ew#l96XwcL4 zJ(^*j3Zpj(@vvOLf9KU~(p9^1W2|UB{)(RTvAsMfPdZ<2?0=k5`&eRatR5O?E*5wo zbfJuy?8~}Y9-H=|{c@1CV&N>^H&63_R>+`R!SsC@%(~Wy>7##lAkgLUV-@bCWWiO9 z$HZq_{)JJ?{N&6}40p7zdUvefjLzsvA1_(M%t%jiC*3GmZDnyQre{i@GQ9Jy^*1Je z&10?ByWfW7Ha4rLw23BnNvc-J^yo&)B)tjyw7x7Eh{K27N$HMvDGv~11Z?9et}8BIdo=(RxBa>*)zHFvJ z4cYx#@`r|$(8heeVQ<-AJm#s@f-0UdMRD1O^P(p-5De*_7Q+`d==67F9n?uFI{Djm zzN}vGo_4Ke5S)F+wX56qe3(tO^W%+i=DJ$Oa~Pqa(avBfE*fo=eipDdwzG3>d2HP8 zO@{04(fD$n&vJU`q>Y9lgJ+0h*+`?>>fOG1V<9__J(7p8*?e$}f32!D6j=#HddSBC zKN#l@E0$u$sO2&3M%Hr{oMe`SDn8SOmBn!_q!X0Bu5)7x6xj#v>Gj+ z%9vG#YDqX3S8=^qSZsHkPllP5koPerjyi@BGDywQUY{9pLIT}Ypq+(qBl4Tf;J0y(_t2zz#Duh*RBHS!()uHEIrknX6T&b)IL z7BjJ#mGzZt?OD*jDBT;v-fncCRa+V4t`aJ3>REX--R=}sca^0*G(|%#`mwfs_l9GS zEn_%tjf=_g`9gh1Ia^=n<#l;-ykHzR8;|dzg-!K#ZG@4H$RqWWke^)ByQ{pD-{g^> ztp~j!>aJ=s&%@scBQZ;Rubdy_uJ5g4t!R$b`=7XRX7)E$hnE$2X(ee)R>nu1Wz}r0 zQs^lb_uUC@R5{yNm=Da!cD=D;R9w$`eYX4&16_&ANuBS=wk56oNeY2kWqJ`a&K7se zhbn=qKCxZIu14r#q5G8H!|u6q9>)g`&n{GS-T2-pxOq*&owm_dCWK7*0BqnLPYWt~kO%^*l!LA)AZ3t~`PC+ib@4i8cLk z?u@Li%G4rsxme!E`XUpW*|KwXXl*Mh77c8u|DuLOW64hzMtipL7qj>LxXNY~?AyXt zMb)qR*4y0a#dvRD(ztldN-X^3;A=ArZ1BQ0CgQ-gjSZomN79jp#+%X0__W3~zPrng zb21xC_9SV;N|BmvVyE~K$#Lc^MA>2fJV9D76+O>6@q-730YL@X~ zrD5^A*j=>iX`6lNDyj}YzAiGq=NK2=+Pq1wGO%KGB@2f-_R@A<3U#Qk1CuM~%eG>* z6+r7^xa!e<3^#im$4%qSOYRUQaV#V^%ot}`Y~;s95nt3^j$TYHit|{JmOtoV(Ij=1 zmqOQhF_hm_)IMpr_!z3#vTxlpdid|2O8?#QrJ;Jt{#7^Uaa%=>dzgoO_{%d_wiv}o z85*`MUDO)K@{T0tAFRwbo$0H!b$4<|S{AIz)^<|GU8wVY+p!)=yovN7abud`u|(Kxd&pN>Vg)Z46L1XFOug*G0- zK%W?HhT4;i$?vLl7{h6;ZuJhu9m@V?Isf(VN#-|o>{b5iKR?JI>)-A~Fzt5)e5`qV zVU2@*oIB5^F?f+BKB}w5NcRa}hKddrcyhx*_dC6(hQn&>Sj+B{8Wje;=4mUV@|EY$ z^tOiunp$yDP45myPao{Mk^{>wo|t`(RiGkPPa2DsB2#M~&RhKCthuWw#ayj;Ns{aD z2=mH`^yGnT?yjR2J}s`kKE+9``fcHKHk%gvu!r~Ju=@rGss&goqGNRIiZf6Cj`g36 z(}ffEK?r-F?z-|MbY-#;w!`ZRv*(vqka?sP!Bq?xJI+?eCovsjx{q;1U}t(RBl|a{ zag)VG3|q>;GM#P=ImW`F4GB!4OV9S%Mkf@-@@j=NGfeO_rSu zZI|OWs<>S5?)PI2l6)4Ta*i!s|Lblkd()ljCdY8vDHv7=oCwcMFin`zFdxyWH ziJ{8!s}_X9EZdI7T75~)TlRc8Eso(`f2iPSZ2hj&kd8cCMzYNI@W$jOXs=)5|WKsFQ-vVuQijVZMJRHfSu_zeEyp3Vn(%#(K z%C+@{%6&$gBR(-Ef1I^?i_Wggd#s(OVto9PmG>GkS^W;gyte%BE+@Yxq2D&eMY=Ax z$@PH+b8MPC9Phr!vHRfteMf&k+qb%Xv%90pry_3MCgc1Td-0n;@do2qVkP9E*&54} z-s|n{9!q*Bvg6f8*6LTN3Yq-Np zNtq3Y@b{;sJ=*}*qLvk3%PFKE9 zOM9c>cg+8bOZ_C#8IB@PRLx)R{@kzTx1Mr;-VxTrW}mic-nG^t3pHMC_E{a0i?u5L z?(@|Sb-h&pJ6dp*hvJRI?4_~ua&nb|zM;~8n432|`nHX~jVQ93dGno>kKOa*&8mT| zz8SK9^!-o_8t1I{Rm{~Vstq{V~SNw(I; zxbDhmT5LsNv&sK%yZX-3=9;Ez)2HGZ&&H~CHNP=^T;fiRPrYy#AIRgtT%UBj?KIk`>rzskvtjImcc2+G}MAE<{0} z;&3hFB(_AQQ8AYm^3xHw$x9~wl3-Rk^b{@iG`p-_9#!kJJ_foI>AtdOfZd(=oyhFL zg_Ugx$hTz|?8Wmkjvb-0&hhW}QxD1cig%Xl&<ibT*IHvPWN|i^V*de`P1;s-Q;2)O+$PR%1mA`D0^T(Wdp7 z8nTV7cXDSli-$M6?L|gg^2e~YMMV(?jrV3`lwqtCt+8C2S^XWdNfjMot|i@RySsqo z&M#@M_B3)_6q6Vg9sRT~dz|}R%+Svx&D0<3u~eV)*r2mKDd+8bo4Jg-{@A2Tbo5(S zP*j0Q4&|~pys~&1-8+azuD$nki={il7ccO^2~i(@aaOzjylzgPxHs$HpSyaM%u2Sm z0(y%V`pO|P=xY@0`T1hjnVH3q{nPMp@#T<|@HkFOm4hd$Bl8+2#+u`>KvZ3f+pc-` zqOO1Ww0m+E%HFN+FhHk8PkrSOJByh7!9U_BRO#w_r&`E?a~bB?M-Lmd#9UV61Wz{E zV~Y*-#ioZ0oX}h}ha}lF<{6{QS{`Rpt4)5@o6l#xh$WrQX{{b=>ACKry0hxuA_OK< zA;@QY&YE95N%#iW(?f37XxixF z1s*#t207O%*f_^;ZSF1DKxjCOZzX`7oKoEC2i9!&&#p zwT>S$!`iH39}CW^7-`89JVcXE$L1A5#cUp6N7m>Y;vuOej%tGl5;&VFE{w?UJAo(h~Q1Q10$7PZsmtev_rQ1idwo@er3A@XUK;7C*5g z7yB1NJ?jR{d2uEyd|8;MW!8tQD`Z*i~9yPu=j%WRBDog+U^$&UROh3&PHrh9eVe4zJbuJ+tb*Ub|c%mvNvb^h-plP4&r+3yTj^TjVoR>n?zcY8z0|@ z5G}<>mf=Q>xF!xEBd9E^hk0$&mKuuT{JE`qj~%(8cQ_mWHYt4$=pS z|M8N}zSAz=>|+pfs#ToD{X9mt&#vJt&NhyRSQzJ3!)mIQ5E&yLZMD#Rz4`Yfe&dLL z#DvWef^sg_h_Pv}ujo#HaaFA{7FXfgzP4dB9=cd4GtAqj$4oudR@dTr^Bl$O zzdd;oNAmYif0D=Y*%R*HpS_rI-a24pncB5|Y_Pj$FsngKun_{sS?yf^;@iB|k(k5^ zjilS$gHU3@^`Ro&S}gw!eH@wZvQu=7srUCxW@DktBXUmoOx$t&K=?|d2~?Yn0T^P)R{%^SSXCttwf9{m1R z&;I(KQ9LK6TN&gPW*6PA{_B}<%%r79Ms}A4w|rUlZ!OcxLJ{n&m@bZu^_(q~ zH*fJ*K7*Z)20#o=1n)tD^FPqQlvjfLJ;EMZyH`TbR% z@V~m)|MvP}-@z~I%Mr-SNOtlhsXn+Nw@7c6mi$UHPeIX|0CARO50q@XDBJt(tm(PY z|6m{n`;A^RM7Hi~ON-LoU#c7KZ*cF4a~!#I=g#U*POy++0F ztLD90OcteicX0&=Ggp-^cP%sr(xiZI0aaRPEht)xCTFYFP ziBtEq*)4i;W&}pc64GevI9AIjF;_n6AIsAjmRjw_Hy$Uw$kLu{NBu*vR{ly#+R4QX zjsN56i>GCb^~}9VzTktZpldNhUwkG3gDj@~IepH{)goUT8AEAKS>5bBVD6&PNPY1) zo{CYP6b;p;?rUW&Ts_;;l&-vx=gN;(i`G4!^T}u3osA<1~p$Bul;y6(%f zy=-M4h8-s}`R9phgWmnFWzYE41^({+MQajUXD@c})%|+b>TR{^-lF@G{M*x#*|Aq# z6*a{%Z<6Rod*if`zIf+x+hWJ4e8LOR=o0~~jBz81B+MkC6>*HKmh(z0IA*ch6NZ2B z(*FVX=l3pGmE9dfb=ex(cW=BC+M<<3*;SN^Iw+N&EPt@~5)_#c1z z%WLac5SihHeKAae^SqnCZ(kg#G9kI#Du>usg!TMG$~Thfp|?9YUg>|1cbu=(x@C*; zs|(AE>PQ^h`>cjEy4uN-JXUPY8``l|HFs8RaJHwB*v-yX`*OrR9dC%*z6ZzytQQk1 zD!l0xIej4UwoYZzSJdJeACA=wSG74B*GP3H8(Xii+S`u9&x%=ERJ79bRnM)zKWBZ* zQS9++9Er$3o@Yg$W!G@HixEHVWsv`WeNU6c4j*@qvr4C(EI4J>G6F^%V13nMwHAhD zjX1)ow(>Ab*8)2))UTC>c zJ@@vZi0baByPbTeT{f+j?2UZwtjp8YM5tn~W7ZDo`eFme&5u{!ELM!m+SoI{Hyv_y zQIR!bQ2up?=sYfOuT3>IqSdhI!rdZmF+sn);o+)ko^C%bJd<=!m{;dnh!(k3fb%p9 zSUisz*Vdg~lGs~x{jA{7z~-YTd{BwI)p0VGA9z~K;oDYBx{{Ig8{@qAvDfY>Gw>CE zF)X%vH?JoTlD=45#H0;F zX}#*>`inv2*0u=DlQ9wsTH~)81w(Bt3lo_|P4Z@Gh>~re7aeI`O-}lJ0=ILV94pqB z`zvAY1>6;2s>}~t*D<+$4B7KO$)Xr1HacRuv#<a6EZ+eSzGZtynVM)tjNpkJl3;i?LAQyPkhlE%W}+hTk%f@y!frIuXozA@ht6Z zmAX2Xy{m6U#Te4p=SH3HuNrN9dQTs8Ft*K?c$D|O6M9RBQkqT73s#fkN&cb&9DWVWB4 zcDE8+ADpXH-I45X95zCK&p7H@Yct=EW7(5u%gubrM(7-40P^BF>&?P#Pti&Ao@3wfr+;v03v*HXHvIBVopJ^#VTDZ(nS=#^ctUMzAN|)}M7nQcNc4#$#n{WL>O45bp4csBo8QjiRleu3fdk z**274d&nfcES0l(a)f5}FdNIL;#n^XFdQSU@?y45Kbvjyx}%L9YSpTH5pCV=w>m?z z{2?JkS-IFngf!CFGM5EpByYUzigoApJRa)Jh|i?< z9xyieyC~(u$%W7Ltm4z*#N)A9B*&*7Z2C>1?tHEFlahzCJRC_0;Vdbx=*IS{1y7OQ zW}bRA7BN&TWl2cw^H+Le=*C^^xF!9I!+rf^VL(Lp?$0=%Fo;BVQDV+-JKM6l*{)Y9 zRM^dIw%^_TGQrEZYR>BRVTlBy-_KGvj=iAaLH!K@p2zkcdRUDU_>;P`*1Y+sRjZ0TAL2IK*>9dt%xBm3#nAp?&>YEXhk~Q^Ci~eJZ7mdcE zpY)o6Et1-g0julCI#x1Q^@Qa7)=L8Dulmc!-F&($4TjAU<^!Ynhor^|xV z7`v?j@SOF~7ZbBYKm0cOeN+l9d|{mY>pNT(E8Fa?W}*jgd$0c6^F2*(UCrq2OyBcm zhk40$osa0Yy6!GRww5>e%JM}cJX*`>)*x5#X2p%nw!G5}GxL!?vWzxQwxzSY!+>@u zyZevD+U-f)a}tlLs9BJ_XY#W(i=OPyYu&%xd+Do%&36({@ickeX+|HKJpFS!TF` z!&ZIUvlnYv=UTiqsu*G&rn_r2!pFP8X5{6pBFDzU$v(#EbQLp>ecxAiV2K?JXu9GBMdDpFWP*m1_b@?kYwOB%~69JHBVzBo%-EErE? zT);&NuEJ96&}2(z=k2jeDTI5r!~H4=WXj!(It-aAf)AtGu|zdhyDfqT7u!W?8w%lr<@{Z9&gNMz#RV~ zz@4sV=IOJs3bG-g16MMrPtU z98M!x0J&E37wt4c<0l-U6mdhBhg(t0f#elS{5LOl4;NDyH`A4E(Z2e|&f?i!o9HgW z>4j>0a^~lGG88mprhDS7%);!;eyj7JUxtn;HS){ZY;Y9o49*tel7ba!;dEn`SZ z-~5(dDA>)D#Vrign*6J$O)QvYU!>^U*xDP*!o>?|&iibXabqJXn>i*SmdjNI?0$8J znsy92(rFYq$qIGy_&T2$?Y=C0^OdnM`<9uMezqUad|@NM<9qo=u(7<6oNS&Sm$f|B zy$?yeW-~`m@BXS^;VS5+Aq3jguSPRM#py1Y$lu}*`^i3 zM(2zAlO%HDz7S$PKlTy`5rL9MV)jdqOrOs}rrS$w*IL#H}q% zm?%zMHz#@UrIAHGmz%9xGDVK?PPMu?-;oU@<)hhNeC+B`@Mt)mHs0J-=-O(*R#MGm6*Sp4o9S;ell*yP zAUvFz-RSmd!5f#fnGGZ}C7tgT+3kj~ml?J2K^WtILuymC?wnE;%XxHBO z*h+G~%fiO7JgXn&&&K}P(7rg_dA%`+OPeEFe3WcjT`KkcRZ!% zB2d4Lorf8YT0&lY#FAlIn6)Sary+qM474V&on4=5navn03y`$|qSJ_KoPO$c_OX z>j^~PK3QM%)@~opII%DK#bwCt^O!TJjoO;dHa5=F#>~Ht^S^c*ZDTjhtY}VS8)ar= zp*E)N74qz29Dn#`#qOwz!}v3rbe{I%=bi|vr&WbX4;jzU9s|W9Ie9A|pTBz!sDANf z9-Vh*m$_MCpJ&8dwxvJsWTzD%JK_L#ccknvy1ldNQKO;6Qg4JhAOEYBaULUP=L@Lg zvJBi)d*3^-s{2v#J|^__7Qu1RoE&@lvngEAW@)~0wY>AZ&KK$pE1ltKHQS8(aOVmm zF_DhbM;qBJv(;nI!o7)LhY^lRAk{2e{?blgl`d_xhoSk;^e4KqE5?(ToN8PVl{PpU zNBS{jd@W?@vB9C;oS`dYjmkD-e5#?H^UL3#x9dHxsye%a(!+E06t56}w?kIM?SACT zMQnwl`8ekn9?Y-hTzH$itn2-Z4A8Qp^Ld$fuOgF?ALlo07M1MYlX+*|Cl;|)>(yxy zP=qgDNguSSam73=cU%fc_HuA$2&6AQOhD3ZjwU+d6fWWEBvsx z((@ME7p2B@U*B1OVb2`DBhy^t^I26V`P08lWmh&r1Er5%AKua4eM8aby4j2Nd}S{K zW43n)<(Pf-FCP|1#RX~2EBZqb`(odB_8ak%_4uug&q*rl9?w1XmGo z}BOYf>agGI6j>(Qyq#}DUj@Kd`$E!3D#4EYgWIE{cX$yJhv!$8*Zp*_( zYzWO^Pu8*D_748VL+55@e{$l-NIfSZ2I72-88N>+r|(s>lFAb{b8%?2J zM8|GdEMOHTi)Fp7qgh|{Vj%gvZ4Nznn!RkHqvJ`2GT@h>=P;Ri$0+$}4FP0fj}5ce;+zIs&jH2j`jb#TFO#(y zpU1PUak0wJHWuZ1QIM6|jlxEZG-ncB#iTur`JTSK4cUC0&+WC65mF<}o3!~kR@$e3 z^?E+AZn~?fPV)}Sswc41(Y|AvvMEc(PS~4oR^P(P(`rJMch$FVPTYCew6bdUeXqZ3 z=2lqNXL$^?`a|#IZjH6h+0`4J+V`7T``wIwyTy}G&m4ZYt-mADZ;**vJ>3bi4qo;b zQ&|UB->Bd!bgkx|Jy_$((Z@KMD)wNPyF96-xm~A0OHoj~#e4D2x-zQ@M23F&78hL= zpP~LnpO*5(S+b|GD%Dj8APM=hW3iXyyu2An91e41#aVH>OwO93Gp)rCi=pjk)~xp( z{w#%PSeJc#Ppmhm*z@tlGFV}7S~?= zm|Si781}YC^HOawGmb>C4eH`p9ClWGi*s?nrfe(bV?tkft##4TFU{n5hzELQ2yVO!v@cuS9XpF{qixf{Vp`aeZP`g5j(Tg0 zJ!r=^UMB~dB$Db(kF31!AsgGMG|&2Ym|c#G+1S}=$9V>d{A5fV>hIj%rbS!F^0RjP z<}Yhq?R-ZzWXaBGtujpVFp@ay@62onSk+zDuw*CBu^so?;4pt%FH4DSgRb#f#0!Z8FNJ84O7dN}}4|CSAsQ697 zSI;D0ZL4>zK%52qRfXLBPhK~^yN=CC%f7dYwcY6yTiP&tpW{9K$4UNJ{mMg)vByXI z#>LFedE+aYR3p~Lvf^+#s{Z#bwiQ#q`=;I#7DdD6SQWw1{LwLl&TVB&sPdrPEGG1? zC%lW^Dx|BdU;Jw+D!&yl%NnWI-E`60TGaW?&`+OL$|t5E7S(j-A>-0a>i8^f)HIyP z__BX@n%z;xp|}x$>bQBal686FDo6J_i#6*mp3+t>6@~uag6f;-vptt@B*4>J18+Qt zH)s7j;;duI?1nBD_SCTmVR3(#GcWjdr;)2Q9fzRUNOl(1<9xrFwR#EfVhQ>oFk>;X zbN!1FXK;s6B@R)0Ztf#}Od%i7pj3BE~j`=>X^SBkEB!?+WAud{Jty&q=~Nd>I;256>(c%i>i={LO;gANm6&#We&aBOs2E;{I|F< z!cW$1M)SI=kF`AN8J}&{+N@lCWjQ&0%$sbiRmHSoJM6_IH2A4%ux&=4ESe5+n!~qxxhu29iTN8BlSR7oVM!yoei~iXoGxRt>QHS~ z^XQ$I9lM`WA*=9UJ^S;+Ni|nynv;C`FvJEZE>5ceSvSP_iyyO+4P%7t$;`5^h4Gb+ ztim~sAuu;o$(XDmYpgM5W6zd`v7QZ^!D{E>sx@oOtZv60T~!fUY-`7qIkc{4{T(M4 zk~T-JT4rB*aWJ-OA;V}_X)2N@L$9sTMWK4w-!|`=ckf-xu8TAC4lBR=>0YKg+#;c9 zSTyxa-W6Wj=nrSSL(&gyVy0(HapA{Zd$?Lz@p$Mo6Dr4xBg`2t#pvYKYX1|dPG;Yz$xy^nN~-8@3!_A zB95K>Rjnb12m7S+GAz4jO|Sjoat=*>^OYmd($jXF<&Ts4ovlwCw~bqwm~7ITpGNGE zUskH6o#pG{Fe=vbFjU2LaXyw7HDn)386rn|R&0%OKe_6KgYflT2Sjitl`Oid^S$?p zm-xo}aBETbhcaf0e|Tp3Y~E@Y%d;64Ek*w#h(#<=ANCPdJ;jk|o^5BWsN$q2HjCM5 z%+6K0vC4+NWA!GyH$%>_;5lyh*gea2uak9g>|Pzi-Vpc;a8)$_Gl}16^Z%}DSK~VF zo1`i`Z;P0VD=67=)ePhL9wIgs*PSgVRPr!ZzeU>YcTOtCTH(@5H_d$2)?NG9Z0&C@ z7W2M6T``BD{oSqp{qO!pLp7tw$|?x>w(8hh4SO8g^wBnSjz!dP%QqIpn$|_U`PpIq z&ey+aFE<)1E0UX@zWdX+S>vTFf!@e?gcIV~H=pV49ET_pOLpr><4!?EC+Is^Iy#(X+Q2{?&mID3VWC7@T%+Xvu2$op z#56+#;j*#}VpG{Ri_5X~Ui=k5Rub!M4BPL=S?7-P0S`6CG0T&5t<6kgk&jmhMB~~Q z4OJm_C2^5CdB$V=;wR4S7m>c>A}_udSA3$C-0DvLE+clHxBFc|cLV)hmA+MIWJpMz zw@K_?>O7Q}s|2eFy#>mD{l%uf*D8LnM{4oqSPsLwH$VNwzoK>(ly>^ZApV`V?QB{1 ztN9lTW1ocl+gV=NSh8S~mE`mrTKhKf9}i}%4sS8n_i(IW&*Jj#>%FaFRin$mYE?6a zsI|#eX!vw~hU&ZBGeTC&Iv%Jl@eTC%x085cPda3hl@@1tBA7+5}&Z?={;e2Msj&MkA!D+d8?Vq z1Yt~J8iT$;4!3>C>}UODbuC3w_gs*$0d`#KyLcjhT9z?+WbOQ29@7n3aR`4ilU7}j z2bfnq#*!N6(9ieAbzeYYe!Bdm zBkZf@(6$;c`!R#@Y5~q$$68nO;kYC#d5(~0YZkTFgB|^$+rAnZ_pD&eK1L_caWZB- ziJ~??#U`nZGouRE?-%ept3*;U-?f(UmX1(%o|M^}mq;y&XuxJH%SqWHQ&h0s^Seu^ z??0cv4CqbB-`;BHZAh7xMpb24%1>IyMTKE2P~T9iHcCN95u8k^xQW8J%a zqpliQ1uA0gV`!^M*;9n4Bc7IJycpLow}v;4=IguTl3SKB$D|-q_Mw0r{ zDo|UIHcOzU{XTI|Uir#aac+;Z{aw>}_Lw1)9DCUEt33q6Uv1mSVy0P(rf2daA#G)t z7)nq1XZ-c>?#1)`Ig3a$_q^i_A{EM31&;MNjWu^dKO=7}n-xR$J|`V(F-J2tPx9^- z@@Q|uiu(L9F5}Qu%(JOg*&5uHqsz!|F)hdTVVQ#(U@1kA1`C*B<*bh&> zST=uIZl-;6d&cVg=eVqeco>FrJnH#IBAdqbGNWs;E#_5xn$t87=$keApl7MJpWFD# zn?2bRk=$sKjGRTJ7a_B|Y6zb(ank6Jz*)6|&&QZARwL4HpVeXO&XI=2 zH6*KF=IJY6il^_>TmGE)J!x9GM3-7vp5f}7L0N83x}!`f%jvdZhV|@=jpah)%B(%( zRsHeIwy&?dW<$Isd6svTep>0uB08(nRrA_av2uuoTLq5uN6CwKQTz1~{ZQ1_9ZtTG zSKG3o7=_O0B2^3}-SPYj+2VHi@1ENeb$8yOY;=|;hwn(>+eH(cdB>6dq6bRc<+D)s zj<$E8{og?U`Tn(JZ%V7(#%*5Jtb8Du{4taEG31zLvyFmtG0}C%$3<4KvuG^?vfH^e z!8c!duvz5sH7wbcwq0d?e#)Bf-rYp+mDm+Z$nsP1Lr>b%+dkIA>duuVt1RU3z~XuS zkG1l``1HgJw#qTHv%$Wrd4M&x_MPoKEi9E`wpYO;Yqj8VVw}#-MuaC6^E0VQ6y?3e zkgdtj>ZEPo6Uwbu)tnm{SG16_$QMJl|4Y`ru*t3*RT@6V*qn zZ!bq}M)kBxN@d1n#fr$3s=9l%m5;3eX>Z-<{VK)kNWN|^XYCLm%?}@n2}vEX*s`O_+7m$QF}3xcv%tBt zay#6OwXwl53mnao^4e9F7fDBpaJImN_roe&hsUentB(9g(oiDRwg^uDa`oHZ)w|iZ zaYnZqV`*NPA8unsXQ5Y=?)t8Mdg(Y0<-_D=IeGarYxH7ARWnSr=?CZf4c%(?u%%yL z=WXN^m1W2z7qjA}$GnK~$>~^39PxH&^xi(3vTxSKr{luui4BceudJNa-aGC+i^+17 zkK&Vbk(dQBX|`2w*j?7eD8BGxd+#yvD`YRyGHS@NVk;}H)*RZh;cU<5>={zxmOWi{ z4kKQK6?C)7e%E+3bQ&2S!qJ`;v(Pmo%11I{c(p2-n365?Q?D}aTV$XSYT2p3k#Q{x zvWX8~ssUTFfWB-$Z;Ox~!z0=HH3z$v*B!x8i?+Rz+VyX3E5;!W+gY3h=R4~C@}@YG zSw_UBMW?%;ouxS+=z^gBG={i$s6td+n{BPZYN-5x<>fXW2ZdjnSis7E4yupLP7ox8p~7wG3*+zy-XOQdFwQR7zA3FF!lJ{xITF7W4HA#Bbhu3Yh^iziM^_{o+ zYZL3_LJw-%@WA_VVigIFvBo+Bb&Sfr0yUNKINL(2F)>`)MUjM&5;MJ@jeg-?ql@EW2*(GEVz?lAd4u8y<^f z{j#T6upv8=R!*Zia@pSADGG=*OM z;({LhpVf|vjA&FH9BpmG{`%xuD|^TKRB^obeK73kTK$a0Ml6nH0*Uwbt`i?T&Z-xMn0AC*?hOV^Is)VP1yav&)T0GdV?bnD^fJ z@#Ff8A@hOlEDR?{{AqJ0Ci*t62xqFDD zr!|}x@2sjY@5YrwxX{t0VIWK7imL36w@fnYqG1A`1rTX;(6W;aqov7?ARB&u8?la%b`Io-^*}(tVOHdcV1<; zZ-&dRvoR(diu9zndcEw^2A!C+mCv-XBMe~+X>t}bXW8V6zOKbhl3d$4>v?VOckUp< z63qJHiA!r18NwQKUD055QNh#2M1E-3E4lfRhs}jCEgR$PFu_g7*coS=|H^zhoG(1a z$2iG5NAqgYC_*IZxtZ1{;*EU_d~B_^qh2hE1MT_N)mUGY*5Byn|9Q@PBjfYsu%jVH zV)#7=Pph+{Q@i7s7XOMXFJ0*`iQzrZjm&>%@RAK!7t`q_%{@}jDAsKqJX@NNu) zn3c$0yr1>vvaSE1)iY=wu8PlF?`AmPzw(`ywmet8y}@ksVN?~|OKC2I-YDm}?#5yq;)y^~+0lGdD1Uwb?)Uh$hG zTULLf(05+6YtwvRo!#=)L-De}eY0JW_%m#MA#>*VqHBsyDJjGX0an$!!UDLBsNmU_2+uGU-4haPbes&WBmd=Gc7{K@C-FUu|2&H{0X$DD8sL%sjeQmBSg2N#!=n$7|(6bEIh81o4lDF*Mm9;O1 z^okMNSjSs9Xct>o*y4<(XUqAz?4dEAV#)ci^Qs)(`AYsg{-6NY0IzP>tj3} zyh+D=z?aYod$z&8{9tdKI*hH=lI2Rh_nuF?3JpIt_K{XSR3-PUP3|;*>9P8$ij-Hb z@`4mL79U;|xmLh>=r>9FhQQD$M@X2pDvucfUs|a`BhKY@c>;|)k_Y2cD5fFbSQXZM zhBsE_{n!A@GIP0@hS*Y<}iUu9UAzen* zTl;J3v(rDjmxC~<2M)Cs&X(EeovaYmtJ?P*yvID|W9uk=n~~u<>}k~sJw5c#lKvL^ z&@`sVvdO03)`B!Ia%Sp25rK7Um$26-TU`m;^LzO|kFspny&DlvKmE*Ra$U7La8>W3 zX*FEcEsxyQ{m)}ze_eu4aiKiyspeKnVYAGoqxGx(ReaYpIRpv7ok_UwC9x65=!;Hw)lP>;2?~zqVeRhni(^E5u?2oSla@OFMIv zZ}w(H*|)ux&5}JYXs^#9w|HvFUM)5{AXFs9uKMI!IPrz$?rb2FSFVe8HA-8k=M#DC zVljzliE~$r`(k6X?GgXVPxohKsGYw1o?*I+rG3?JvdBo@Vq2_uqfb@hawY#%d+`y+ zGBc!xSFGF>^OU=P>+P+%MP%_3r6Ls?=Qn&Bw=1DE6!|+u%2{VIFTcjWVzB;3krWpB zZ)BMn)AQUuU%S(Y*?g}xoT?=4)86Wd9(LKXyoj>j-#TdR#&^e7`*^7*Y#hbqabXsJ zN?{TCS(b;3hHI$12e_9wiEaNkK$HXL@w!1=__Kg@jYSEgWWE)3olERb( zQO=s@?dxV7yc)Cd)!FJ-!WhNmuh|-j8MFpDON3(X}VJjDUNnW$&(H zb+0|6iTAUlxVDe)W)Li0t}bK8>G|E9gyk`ZjjhFvs1mO#kQL`+{I}Vk&t}uzee;Q( zJ?r*dbh#J{Vd{EbI?I1vIfL6G)BEDD-LWkejD17wz4VTDq2F-~SdkK+aAoC?uWjDDQe?<$bo$xs$PXLa z$4srZSppM%tU$*5dM1M`jM_M3U9r7_-(8r64um!W3(R&Q2gT;4*;mxEVEIl~)hRtJ zJYB;y)G2o@Io`urPUEyFLoJ-NLCtINZ@iItl=j6rKOo>ul;_9V=dL~?n}Z0CM@%^Iji4mzN!IMUKA;M!%PgV#4%08%6Zkj9~Sosus-ga^jQ^k)H*d3U@OOp>9RL|c7}~v zQF)mN#a^K2Q6?>BU!+Wjlt%6?_FACK! zdz$G#WY}9YpqW=jX=NKsx?_&VAp;Y=Y@~(pn2}HVz}EFu3-bELcXssLr)pYEjU_wz z&V7q9Q`QE!4E5drHv9IW{BTMVSvPP6s7#lxV8RP{n>oq@VdYk@^P10F(am~Ui z_RtQ?xJoX`&4g7LQ7xXm@9%Hv)BL=+_bm%t@EnO;HracRdk|lH_bf%O8L&Cgyx82? zyBIa@;v3(GI~?Y{_jJ>nW;*pvb9Dv&*2(da-@{o8dy`r#Pq$`U{kZ;m^1dsRFV{YfS|D#*UpHUqTg9z9WKW*eA{&YUyuD~IBGx3$5}!S07haiZR||_xc@|^g zSKJ^D{jL3=7?OIzC}e9RV{KZD^S-0J>a5r-BBBN>zQq)BYSojLvxs#)$>DKp!*~}K z_I`R|+zeSB!K@!Bgj+H~M~j?VY|HktE3J;hggr&cK7?2qW?5at=G)ldn%B@NqRx`( z%Bm9l;(z<_B@rr}6}zOkLe2}`)5ps($#LEoKCZr$BgT~vu{fOcYR0V66ch4TMJC<# zfLU_yY0I8~78m{SH13f?XBde(Nup6N_Nn?^zwAwG`0Y5hiGz0AswpdHC##1Bloo*^ zW=~hO#wcTJH7=Y!k!=nk9TSpP6!ppuT4p7g-;RetevWsY4FTMR$#Ok>ix8yxVYQ#o zT)fJCXT8XPuxAC3Ph;^da;&3al9C&rv>FvE;=->Gs8ZQi$<*|%E5p#8BxyalvnKiWV=YS-XLdC;(h7r5JQcSpyoj@<+-NnVjZLA=qT{_Q+KZYsM3q}* zht0mJ_`~!4&hCi%rh{|efNqt7E!{JQRT_&T56U-4@IL0cQ}h{8cRuE1-sFWg$GGTa z_J)C8dN}VMG(Ph}e+bcPp5n1N*M052tL@2UEaSDFL(n-Xjb?K(O;+~1iZL;sH)&)^ zYgmyWNdy*m`a)UnboeZl96a<6=_*7P`M+y_dwTrh*>|5;?5-lIE-}b>u`=^^U(iY; zwy=T)P@GS6SL4YDxA@X$MSYVE_C=$+QO9DSKRIp~DvTRWZ?s3t~}}S^5Zm&gfGw zMa~(_vw3~u1Qb|OZ1cfbR$x)+(H>XAv8zwx8>T!O+OX zn*}k)JAA6qG*^pac>j^`S8v~tmlH*%yh~E3vceGzdNsd=n4HxbLTvf(FEXhp-@G=I z@D3KLDlJu+Y8qK=hERUNfaY=x7o72|$|HMM!;F+Cr0Wqbn8b?E&qp$6M=_XjmSpY8i6s+#EnIC$Ffk1l{}wE)uyt_ zFK(6! zEMwf+V4>%NL&XuyT**thVAi284zQj-#fMiN&r4@9l)o{hzIm*FTuO?n#5?|VrT1F3 zBxO91e|)Rmbu2Kt&A9aAXln+V{J^_x<&XZn;^FS&j23e!`A)2rfQ;>lJl_| z-A~Uk#QWY0iL7N$-r@&qYSpGk`K4E{d59l*pO>tA8s0p^H}=MBBS?lskq%>$YYzpZ zJGW=ae?33Vm(_|{s=thv4LoYaw3Sm?S~ao999voC2sdvutI81ii(QtolSkEDXL4bE z&tLNNDne%1Sw}Ma=wz4wv-V|~yW?#oKFa5M*BCEzDRDuFD9LAl`U$Z=ZJz z1y+cmEAVj!O=E0YXcqf2g>|HhbKZ+c&r3ah^G)I(-)i&Y^ZwI&>^IYVzJ-a|PIfX@ zZTasLfMVn*1nF)i>^};?P~OzfI{8nJh0RQmB0t;90ltJ^SIT0jxe`_| zV#uVCwc@~A62t&1d@(YlHYywU`}4lvNPj$L6H95&OUKzh28TL7`Niw(E_)!xnzUwD z`dK9F^neBLWb!maElsTun)~X@v!s}#Ss;5vrl`7>Us}c+RImDNEtyUM5P^-LzV7diID z6IL&)Ftf;1QRL({VRmI;V~2&xiPVETJ!s zI~rG@LJnNAA#aVYQj$=fw%4!G_KoREy5QCbt=W|fdX4C+*cSKeSAEI5#>lhA4H351 z@9Zf1j989sMO5C^TCE}{JB)XH=kRT<`-u8G`=BYR%U78Qo$(&eLp)n~#V7XgQbm&` zTL);T1@mYRO&V>RpBxt_{n^+|5!Okcrm@{S#M?J!F=!PnABs3kWK;EfBjbY}YF-gU%`MzA8x)#54^RI5hr zdYdI;uj<{oz13DxiTy<*Eb!jSCS0=3F`mxa5QMk3?u4|3B)iNpvCKPvix^E;C7s2h z;;XOBps$?961LpNhM28KShRKyL7Ez!Mdd&iC)3sV4?|Y#6EkC1cEOZ17Hh#k=!K{m z&0L|i_f-vldquvR-O`euN$ zY;7iYofguIYBOtdQEV-*WJ7p5kBuGWgO)7Rx-43>!wC zEVIJA~bWOjwGoN@!-p=((c7ECK zdRLOgR@YctRP2+}yQ{M&&tOtklF_Ji#gBN*@=)t24dYg4RzYOKIV(aW3l}xoSyZec z*t3kTSF175Pcc*%Z0*x`J1XUEjW zvu;~5;LhII6c4JVyHcd|wiR)o%l_$^uf3XE*jnB|BgWX11uZzp$k^Laxtsj1*QXpw zVxHu+mL#)xo@jN}`b;iEq@JgZ#y*`^N6IcbY21@&&*Xo6J_&aJn{A)$u9kg^9&0dV zYn5!)r`S~Q*y2aqBI3+wEw=FqTHy?r?62xBx5Kj-l{2AhRB^1eSdmuD!Ye$}8J^=w zwx!#M^^8eXwYcei(yFC9%Vj4ky_zYCs^cVL1r1rqrndL;yIW73xn3@1q5jFpPv?zs z?yUCtiR)>-_aPyt`6r`yHJ#NV(dR++u^JYR?4h?>3<0d-b@34w>pVypk72X2cn??a z{3#0T@4VXUoagmmH@Qij_UdG|jveuKXZf@&=#CUh`IavNmGJ|8Eeu`pmI4@lx2X=#j+a7d=!pSCO`%c8>o0_L}(a1|qFr4Ir|G)GK7 zq-mq4^)##4Xw$zRcKU%q)?15`JYQVllYJcPh;7T>ynO~fn^soXTUoI^9iP6(yXIA+ z@_B1^J$H8-lX_}owb0*R#j2h&ZvGzI4r8chiS>5b;Yb_Qb|g~JVr?kpp?03>SO2jx zSDH>Z9~-1PUuDZ{JW>(Nl=-I@56h~?COaMW+1pWZ)UTs5 zra6dDv%Q!#Hc9acXR>lOvR!LhAq2HJ(#0psNS5nyYO&&P zXwj6;?p;NpwG~}7*;jk(XJ39>9k=4`iHDwSvSmxSUcM|#THlo|WlysT`yG9LN@vdL zr6*4IW3T0ZZ*)WC+jgycy#~I0>f5!v3lAvdd(6`VqKB)vdeyU>wvs3|p=QqVau&*> zDlX1W8cRd1j7_fNqUfsU4pslws*ngdqeU2M#nrK^wKeK96Thfl*-tBP7@F*8Z@EDEk_wZ;1)8G115+R2IoJXE7*oAGReUeeQI zuZ@&gPBOW@cSK7}E}B}sprPFn+3BR0wez!BEt4BdUK`EoP@hLEhO1HWxoq)?5%1c* z4u37+|^@7kI5g;BrWi9hT`^Y_-O{ z$F*Ht>a0qCtc$Gzir>ujbU|tu4d5+1N=W6LQn)+fw@+G@uE18 z6n2d}zq6<7`mimp;#LgG`k2HXY~mk_!rVwwmdEMNtNQf(nIv2NMW|TgaVRJGa87=H zWRuDi!^zJIGDD(O=lMP+hTG>H#)@po!Yt9!mS#Gtcp>8&jIo_Yh{}xB`cL#*^`)l_ zE~}FfdP7zI)xr+=*wU4qM&%c+BX5t0p*( zT@du-(e*w*%CC7lMrm~njTpp_aI9|I`_?Md{l;)JQ;4YOefs3vCO` z?mG11rI8^=dsQ2A0&{QB3Hz^ z!k=Tz=B?SV8e*(b&W$W;S-@x4Fm)a@9=1^BPtWf}re_yo;`>0}iyW>!gagfM9?^U=yD<1>v?MfK{2b;YSM%R{qcRkb^e|?>A93An153ZQgwRmq# zm6t~Rz~MCJHU9Yt>&>H>y1BQy(iwbh<>zo?XL0RX6^X`e@1S>gRjH%&hHZ%OpC?%2 zJ-k^h`^4OKXEMo_P2NxIkZO(%&+yI0Ls)AOy?CV4zBYN_^ReoNED^nJllU6*cN;>6 zMYe8QTKS(TR4=hqqW4$H`enaU+5Hr^epAnhLfWHURJOp>>Sye1-lDjc~J=~qdVF&PE|rA#oX0c!m4TriPl49C22Nt+39aPC6?MW&@7wrQO?^)mHa?m5Kh2t>;1pI_jJ-T- zrA0o;vL^iDNspi<6^rewoj5*KC*lV-uaOyaL~2 z6837QHC{_H*d#iqzbKA>B4Gu>=jsQ1;TgAUgMD|b-nG>$v^uY)94+re1}@8sHak!-!9_rFTfN^4oS6&>jYSgin!#YcU+gTI#c- z&WGJb@_#RFF|?!k&K51blA89Iw=1kG$|5pJc_ZmtqT!$bWhL)KWwn}pxHJBI+pGAoXHj0gd{M@33Bd zXCWzNR5lj{SMuBuJ^Z#62WPGHL*A#RqTszFtEVxrwG2)|EVRDG`Qp_PO(8`S{Mruv zt`GB&un)IT>`nnj&DmSwc!!qSAEP%n7@rh4EEdIO*UFehM4wr=5qkP*`&`wHF|B4| z@3A&)_#3|CYitd95~|et;BzlF3^87baj%V@mHO3V7LKcps^4dydMAJQ$oK05W8UKj zEag0@^@ar&#^tyQA+<&dy?H*_~hHu?bXS)xOF~jgUzn(`o@Q2n0GBa zlaN*tVjr*kgc+IJx>7#qO{YD{jlVXdy2f4`&COMlnU44s^W58-H(G=K>3RRt``q!r zzWni7owhD*RTQeC;T3-D&L$dqg$w;`%%YHxrOhQBwSG2>dP?fm`faQ_R7u(z6m$ivsD6@?>7>rIj|;#JqIBBA?wXasGCFd(VrFHL~iM7xO8d zNlwzNpjm`y9ulNw!}i7;vU<0F3xIoFSe=KuD6c`#|B5XW=c83 z@3Di{*pby)5lhvaY-U-nd61XRIJv4h7q5)N9w6d@Ziev#jQ8 z{uw#6tASN-_VA>$qQX+Gyt3tW*f>ifFWJyuKRt#aPw1NmJWO4 z=Z6TAwSLn^bjv1txBqPWo0>f^T|EAaotvw?C}y(MTusfWDh3U zjOg9foyFtJwPlU5Ls8%S$-lnUWp-`VjLA6NJnQ+--KUv-TeEbRORhSZJaXrS_mCPQ z-Ko{b{;E3Y6fuHC?!2-JW;}x?`+PO*S%*4l`0Dvx2iU(XVD?;T2UT0!)IB`_P8|J{K3OsJ!>e|(AC@4 zr}nWrTVjG^y~m3kt!H_n6-LPw$0D~DNWjx(WTQG05xr||9Pg?X+F3qE6_xR(_r6`@ zICQW+W(QL(^S+>t1%eS3VY~e0m*z~0ew}` zSclPUxlfP#mWb*Q2CabYcgMTzi>ooU&kr|Z_Q#rZhcI05rR<`)r_KGRad+~)to^-Y zk0;V+wOl&n&aVB|*l(WS9{cHe{pP!WdH=4EPdYkxl+FZZ(_pK9B=_hQL{ zazF$edDT{}s72OcbqKrC_#}}g?*5JxU-!aL=Be^jt_H_T-afrm4SwGvVFs?x}PgNO` zJ>{5nweV@4RoS$}*nT4^=8_H>8>=>s1|C!|%1WI4!^2Q~?AX~KzWnaX@85R3^y!xT z>htpQiDeiB`T6f1M_IHddCj!_$Kz()ak#&!jJY`c+xH!}@ml{@CD2>M7qR#RCr9SO zstDhz(W}RC48zK;?m!wjwBu=P=0Q~#c8;6Fip|#d)m~3bRo&r2R}7A`?25~xS0uBX zOqxDl=^tyCL3(K0dM3QtHhJDzH)c!%PUC^CeKo6^);uG3Ftz>V63o?%a;xmhlB78v z$KoLmp;827^ZB07u7=MLYqh);vpK3cL8Ph(NeRQULe7!b+;?+tS6?HZ9h5>a+*aeY z@wI2oj`Fe$UEk%a_tmpFv3#c=-dR&5V$=D`B3`i9#S~jCY$=JNY-$slZjjTQx zRUOhl-jcBA@vcu-JV=V3iV4K0a1Ew|8ZAPRy_vbNjYM{xr8u1Fg+Au`#ZMGz^<{mapEumakCd zQdyF|)7wp5C;Ch|$Tgr!!xMQ5jjU z>LC5L+DNsfO$CGGK7SOO@@KW1HDor5zP6%tS+(|h&}Rf2XUk_qmQhuxWmv7{TBFDb zp##V%hROkHvZ|#cdJt{s{jn+dI3mpZ4OZ#~A49VYys10zX`fS2Tv6 zYer3zZ&)oiwfo6KdbYvAm03W)4H|0a@*9%m;g23xBi)0BAt}vvdEgAIsnv_}F0RoM!l9GB{LBAv zs7lZPA z->S(QR`T_1DhArJ=$_Sdr4<$YSXf)NFaF0#1X>GjNh9ZV!HD%zCQV7 z{5Vtu$8N2Dcti^25{TZ;u>VqH=_3cER9jczW34(ndqOV@TWVhqd=%57G6&1E{Z` zv#`k1aEN1{?RU(cY;444k+>GmXscf~@_)8!&$g~TT_4Y3>2;&x;;pU@=jv+JK?MnO zGR$<_(lfuc(r4w9Z9HeK9&EEY&JLDTeeKB#{YGJFY&v=Rkk3xu#-Wg8TTz@n`I>Iy z#GCH2#X47BWY6N|U7z-PhIW?GZ}v9x46EihYl`Yhb``167uRCDyeYP?u&=v(Swx4P zi+prGkNMdv6ddOp9eJA#X^j=h2nCghz5Cr@-iUFtbDvd`B@Q8KU)2bQVOafOdo4xT zG5qr0nNhIr-8tN~L6?QuSA4?jx$ta_lS|D8jbj(Nv$7awu`!Lb4~g<;s2R10q^s*Z z=S$lxnr%iD3oZ1s9z(|=R`Rg%!_&Ql43j|+4tpHd+PbtS+4n4JvqKsed2z$xUc6-k zD^`7KW5cY_qkBC2B5+o!3i(-EIYHj;18Z;oC>F_BpR+*=&04&Q1N&NAl~GzD!L#`V z*=qbSSEVtuC;xEjp06kPL#K#9wdZ!)>+5r>kcGWZA8T2b#`b*2Q=Va%&oX<$=m>^k zT{dTLe(^NFJfZK?j6Q!N#WN+I_mW4jakspcW}kY5^Tk8_Y;?n-%&D!`tS!3n5ZlJ= zY7p$a@^V$8>V!kEv5%9Y(JTLqI_^4aq}~vwL%mu3E0Ws8JZrS+5qjomM|6|DEno6i z4B$`>jnh!}U)P#LlFxU@c!#wr-t*y}6!-kj6A4juy*?P-IC9J>Y%23%O}iWs`C=T4 z^$C-2SNESemn0tV`v-o9ta&Pa!p-MUc=-KuEIzSz_b_|jPz*(=)%g&YBk3tlp~yz| z?sE``43*de(;*lSpYC5rH8$V*@72}MeYmf-3Ke272e5Rb9x zSO+s+Zfnfvp2T{@G$U?hmj!t{?ij%bKjUX(!!st($da)X%gUgxOz--9=4e$iWI}eB zF6$vxl`L*?ZgUVj$c>G$Q12v)2pjStY`#SxuR=5YE+1WEd%E&sl_8x&mxlEVF;duM z%R(cHSUuUaYhvqa7Lw-LWu6&R_U2b?;;XGz?`3(GWZBszLatn7>K`)6i2;s{v(a%j z)iUn3wy3v0G2-;HhQ?Si46=bAS*}msvM2k(BD|_1aX;o&PvyF6)yra<{qrmR&O*vQ zY#enK!p=Ik&n`!-41>4%Ia>raV(9QX|BEm_oo$Z8C7eFF!*{JQz!m3SG>1%>u|X@{ z_Pf^6`s(#`dalO-*oYi@+<~Hk;TNgLam0?-z$-2C7r5Jf1 z@>w~|8)3ie9fw-$yQ{s$nS^Y|xG=$g@ZHa z{p5{3%ZhfW&{}MhpjE#iuu9u}b}S}0{_oDtwfNoGp$Z|m-pV?RFPn=zc0q#&TNQM# zm5p&~*bI~2V`)`+EZsdrXj?UhwbfWF?dn51N#J=5dk(*1cOJ*JeCB6fbT1+1dP457 z=OH;s)#q>x<;5kGyOV)pE8p_HQTCHFE3=i{9n~ksKqil7RT0lKSG__yR3Q)-^wiG= zAJ?G;%kDtBAMSo{ICd4zUbQCA`0TL{74Lf<04W~!K5t$lo}DqrPDkT8B-&Wq5pQE_ z-*WAnS=~*Pr+Ro{XiuxfvLhplB=pPbDonjE=V=>$?h4@IzisaGP`HIy&ug$a#N%^b zjdNp-Yxyb@wmF*B-fgj9*er`7Pj7KuMpS2(VfxCBsz_*8f6`qhgoAzA>n^#!isgQ- zS2>nqNxagEE8_`I*%uD{)UxLcwd!#ki4C<3U$rxqK}l;Hy=jdt z$);s-X#Gc{pO~MOlcG1B;U7C)t2L%NhvK$$YOB)cZN2g~WXK$jko4n9N6kIr5vF-# zKifKrXR}1zTz-ciR;-%tDgIeYR(O#R&S`>KUVAUnVk~e($A;7@?Q*w#uV!yYo?z@}NKK*+7flgkN?wlU2tg(XIYR`Bt&vL>+pMGni5vycS$u3V3 z@B0DjaPv?zP?i_JW~Oo=RP*1S)nVfu>e_g@*0Xo~W9fQ4&b?lJKXhT@GlJ~ znI$2%Jnq_T7?;DezP{msPpgEk>0kYYx|UU7F(V~SdiMIvMJ?*u#_(2uzGd@jeD@5i z9IGGJ2Ija{t5uUCyy_;_ah83tmKO3|`TT*~S?dhbv;4DtHfAYlj`$MtG9!+q!}T=j z8#`H2zUXP|Q#q|_ou1tlKsUt0O1#Q>t*!BvRa+y&*jmo3HFcS%|7z16C0!gG72zVu zkMOjY9p%YZyHKt^^V#~M?{l_hTi>GPp2Ktb#`N4?_zcDE~=|za51QPSeB!@sQDrfOnd`m*duueVe&jrIOX#dnl8X7ktYH z@8d-+VI2b??*$z#tXRF#&lx0(OKeZddK(K}b!%(Cz3&-*-z~hkfIP9&Qk=*yHqMJc z9$*Lr%=WA1?w9v}?EQ|J-!$`kAy(ME_SsOY@9sCoxN*6PAO;tC9?!EO5kjtn1b@fS zm=f;x;t;RMO)`09YHfQiQ7h>oo*unzNe+E_n-@Z9*WZpWxAZT{tRMr5i>`ij*hp_) zbyiKs-u_l0Cbjwew=J)Y&(i+Ba$br|+^;71Bt(>aD&lFzRy##tXUm&ruJ}AD&iXVf zenXUJ={}5FseLu}eamw_LmXCRy*0zU*e6R>^EheV#aWRJvm#;)?pkSwU+t{eR-Ej! zjVVQAtSC2C0oc0McGtW6(hoO>PIqC|00>~$ZAF`1lSp1@IjVBR#>RFv>A0WdVp8w3 zXp*Xvw8kd>!>F96IlpO8v5af1F;(~W?4_}2rm6Gx;_oU;@RMZQ-s$ywp(57rhgNaQ zi(=P0N)NAM&tgYo1)1Wy*^fPRhsb8Q-6cXvj%eR!tnNBuZm3m#_4FDB<%csHOlo;g zU(~XxRy8{O*2{>{Iy@&ksXS>Dofv5!V(Do_$j&;~wcl769ixkA2#wXE4@LV{;P7*G z_`2fdyiw#YUs>b4RUqwo6)xJVNm&(MaRJ6EL2LKbbFHmCL{2am!p+bd2k+2?1im`NMNeC{B z$YT`^A&=e7zvMLTe9tGcTua9o`igpY#k2~0ts7h9;9u^H`HP5(@|huJwP+eqJd2m( zGKMXA5RdYwmav=m^JuXvW~}6sGaC;&x)^8)w=#jGA`0JDNm((^wTnyA4&ijNi-gcj z&#ur-7R<8TyAk@;Lb{`v`}ytNs!@2e7;4{gT>aV8);KRSAY2`54c~b!NvkG@LO8h} z$l7rz9uXU_H)2in(q0i>TfQeV&BG`s9WFC&{&1T+ODl zEEds{m9CVHVI7NOY^*I8UG*O>`d*MIu>@MJD~f^K+Wk+@eJ+o>!)Qj8L)9Sm%*yN# z|M-#oX(=Yz1n+9V`m&NuRyL~{Y%Ygr!;S87x}VMh*cOA(vJdy_Lg?TJx!u7!K3g}g z$Y6^x$%zMxv8ZS_mN(S|$D&sz>DyK>2Uy^IdO#nSm%6e9DM7x|L?;?+0p`kq{fQhuhw* zY_da?yn3z^p8f6n{#J$0qTD06Qat;-u4orWw&JE7fo=0I^vW8UT7G0vjBeju?^<|b zTf{!m2+t61K4CXDWOcR_r((Yxf>te?2deeUtucfZY5c|en`MiXShC8#>({dLv4Rz` zQ{Q55?8TdhW%7EE5wna)V)7cvN7zp``68*$bn!JSH*bU`migJ3qG&XU%dyx?+Iojw zcAbx`BbT+IbrEyr;wbiIlO7n5tPoC0Bf757YI~I?Ez`YscG=pqBh0jsa8C&9xyaR@ zhixQ4QFRX2+8xKS8y{LBe)|65`LAXF{>9UoUp%vu-=6u`$A+K3{N_3O!}HwzpWpA_ z!uZQ`?(ez${`o5}K4tm&IrqE5zk2$>`(MBN*XQ?e{^2?M-f_OH(< z{~fJowZD9x&i&?nF66He8S~}Kub&9>#N9d{{`!pj(|hC_<*I_eTlA|(TN#HD{wtd+ ztcRq#a?h&#*ESmd`TaXoeUrwuAD)))AAKSlW3b334F4L? zKOZc#=mnwin^fbxJdN;ubHCw4NByF~=Je(1TRdUxw;*w?-@3OluR8X0 zz52J<^H&_df1-geB2WG}scLEKulpEVmS8(9a6-i>BOU$aYY**u#pT%PUPBD5$$NfE zPv2<}PY9>^G3S-ehc?o(r2lOn+gskSjA^Ly$ zY9~3W6iaR4D6(?bS@`bTy)|YJkx99!;JQ4rnlY#&Juo_#9hSkln-7T-K;F#<5^NJPlSNB9lOtLJ7vD*_4 z4D7QDD>(D~KfG))4xhSfHHIwuA&RT;AYm1fk7X>W#(RfR{O|dy_Mx0aD7Bgh!KyjV z*x1*dX0@NjNy?J6u}F-UMX@If#xcxv96z3uXNxm%hrFtxm-o2l9-zOSg*83R?Adhv zcr2pzZ}u~~tlxYC)n46qsC(hvy18fS`|YsZSvTL!Z&ef?Y`_}!-jh~;na`CNr3O~F z@WnAtp;Hxz$M!upr76by9LG!b@)-_W#9~kOmjQBh+H_r+v`#N=!YM> z*@^Y75L*-WjNcXL)lWv~UrtviTFb=|{J_5c2VRkdP`0o;hE*k4K+;~zoGfH9L^rF% zht@NYbJfect$oaHb;Ntth^2UMr6R&m8>$__vsWwJ{vY}<>N5>z7}bkyHm%h#)`@R% z#jk2@(ImI{_Mffpx3a{~6_&9x4CQN9q&4JKDg5`>dPJ%p_K6WovSF4iCrJ_uFWZoE zMo-b{Y*E_to_@EHr)`Z`1fbzstAeEKS#%aF2sM6Oe9d^XzxL$CLUCnbSF&nMawft> zwD|thTmOIa{>{ezj;7Bx`=1wZl|M4-p82u%@`Clv>@kuR?1!qH?l1UR+x7P)y~7^* zu=k49zOkLAW#w3<#;E75vijUlHm@e}Xz0-_8_hr%cd@6l`Mzf$v_fjJRpHIjB8vCT z?0p*SSQY7S1NK)&SyM%87HD?Qk}{HS;sGJ?i0^Fc#hPr1e_0Jd5pRr9#ho11K7yXj zY*LaCY?F=>Xi=CN!xj?`WjLFAL``WXbAuLy(m>#p@L7XYbMD^ zy!iiLXU&*WOIENW4C&Q|Bhwg;tiLfd+4NUo@@;e2JZ*jzRsMUaL+bn|9;BRhS|JoS z$;SdcmSHUGn63JHpNFg}(pq<{LKzdERyX7ZJhjtDN7D1ZjAjEl%LZsQ6Wm-W5BrS^ z@B2n}9#=PF|L%1{g3YogZloto)7IJSZSJz#X!W70@+&`7LRVCo{0d13^>)k>0I&WeR`BGIf)PPMNXWV5R@!FBpC3UN#X zSnjUreAXJPw8`6QfcG*?6hx)_@E_i9A^G-^dC0rj+VhLnyUpLtmh#Hz$x1d9Z1i9g z?X%52Ofxs;WUDq$XqvhE>(Scc6<_lH758E`UgQC-j^ci+v`~*nuCTND)a<`?pO#pb zBzlq+$BOl3wH3K|@Mf$KrI<4xtpw%6a{V>`Wk<-9z3MS87m4h(Kh`@Q_Z^QpBsiOd z__2HV^ou-8)uK2N7xLlw-fYEQ{qke=Nxm$WtK=}sj_!!r*BWLlYF)>Ztmqfcv(bw03+}7xw<>l#kCyDi?9qKScVI$%g*X4 zZM(N9pSyotr1xGFPjmSSrI-z;vNNly@^IXkF~j*Vdjj}u#jSWdK3n$iAxI=;tYK!!JC- zu3lQgqG*t{2z75=ZV#Oz==rkyG_|2R$cyEp+Is-c>cd%ZDtmZ;LCJ z!HuhD_GGz{t_|%fd#i)x*47HEkThmdwmT*RzhXi*XtUK`s*i5sD-6gazNmEN|l+_VvtZjNIJcbDq|qx5ge@TTzv%@l<7o zM47l6A_jTND%W;Jj4)Q)CuiYcgqP8IUDYf4i>vBLN{GOBxuLa}h@=xrmor8sxqfkD zl8Tl-@wR)m@;g41$$J(yu44pDj4bX@c~1Vmk?iWwV8amNZ?-zBs;(uU>8Wa1d#LLo zv-O(ut0cu!Y>KyiW?Te14;gl(y@;3>&j$J-mW_I7nZ>Tb(N;b?cGTTy$m@ZLmnF`N zViJ>I?_`xVlcmi@#vZzKRaRFedfsftHTU+THtcS@XQ@SNGveaIg5|`rly(-{ zS_!lo2%Xk9t+DhV!F#?rcNW6sPi&H{qS+iIj(HF(jIj+HETy|ox#Qk{B*0Zb1->Rxl4~n@+=d1pXc#wpvtRb`b@aZ=GggrZUpR(0PS3}{Lk>~mD znEZ6a)J0P3xDg&ILDhl<)rDF_q?fqBP!FRQ=SiCV=ar)}V-k&r!q8yrRt2+|{`F^r z*Yd$g*VYQ#uDSwi?8-VA%}&pCos-P>#keDFY319{DdY8Mjx2umUU7=?_BMXj zvh!h=hWa!|%*P}T2{PEj+T@kDA(&Knuq8~xl~qHCx3+rMmzMfFUq;mH?flhedbhFN zIg4aoSk7a!O8kgLG-Puql5&jc&cFO}h3q0#^`>dFqNw%6;3PFByvO9_IL%$pM^^c9 z7ADx!+9l=;sXQn<8`Ze3x4I!G>5$HH?~vhNIgmdruibS>8wo+!s|hMx)~Oet62~4k zw@RcXUKF!pP{j%>`#W;1F8gG^^yvcGepqL9(NFg|#1R$4sMo*huz)`+nZrsH5& zV5f!GS?p-J6c+K2rs`w)5+jQv`S5QQqo=-ARMw;;?9xkP?IhUXMrKtMbF1rB^{ujx z>GkMNulcMvc5hKV&;q|@Nd6Qd`{TNv%f8jE*_bW|Y{SLnZTiZc-V?Cc*Pi8Fy z7nxQVs}AO4S6UtGmrq#)Cl+L97C%OR#UL!^H%qcSDv(Ua+iGOm!iQRN2p`*|z zjg+nX$IjkA*Dv*itdV8YV$2WM$?E%RB+i=S82)wF(Ek^;FT<;kazE}FGu9O)$fTRS z<)!mBJ{dVoS(v{pTWf9FyJoCwEHCn8lnL9@7H;(pbCDM@c8a!I6zWwY(wfbO8)SHt zUyUatOVjT7__hqmzPzX{EV5)?I$IRSjjP$jFs7vT}hgy;op56`{`QbXzs_D&_?Yu251ZQVWi{4X1-CVRd_ zE1NN3d>u|=L3-I0POx%ry)bS5< zuH&SHM|a~xC)A-6`(jRVj;A3{RyjuBHnt2`ZB?bLGB>pDg-5c>SEI5~|F&$Piv+gwqgh&P zdcs#duX0zt^(Vm<9y!i8s5lN0*AM$x2%Dj!XB#_XQW(tQe9vZx@p}>4yYIcXC5y~# zv!_3n@VlS5U+)l6zipwIG_lhX*WSyomt#*-^LSSqnT_gKpN1~Gi$=bFvMQ!z>){pd z)$rpOob}PtdzsWzJdshiT&+$S-^+KRnm3vil23*gx$H=$_hRc_q2C7TcUx4b?!0-W zV(_sirg(>=`wY0Xq*!(oE032w1so?~*lbt6g=yJ?WAF*17+QSv>S!4kLVC7|$rwPF z{>2G{w1|jydg;S_dw5l&w3ZpLYz_|DzAL2Ghb`2bd58N(urH3UrdQ!ZrOXb|Q0+H{ z!ZM7t%ju-_PS$?%he!3u@A9DtmvJGK$JZAMA|*TYFiu{4zF=A;@ZQ~TE0X%uA{s^) zB`hjqpuYN$?0R<9ykBO(gC+S|4P$GOdlWtri{DzSo^)#Wo)5;9>)K*ZOv>K49wuTF zlRD4K@hvZ0F=iX7ZH{&pqSd6>HB>PzZYOt|LnGVI<}p)L<;7O+vz@-ObhgtoMmu(P zd?9a^usW@dTsa%YuhXv&>lT5#v({b|^Pfi~`LW?4D;n>r{&`2C4D+J;dURR&gqJEFD{9_%T*_+*1%Es!Xn!0Mpk0N+p8^!k6F$sA* zsl}@Or=C2hg$@}+vvxdcUxm^uON%XULbfa8B@2wjnlM=1fJ6*%)vMp9tgkUpS}n}4 zMM*T4(VH1u^Sd6_$Nk=zm9I6gp2cdOCoQCC%9kvUfi%ng;O&S=oB7SL-#@RuhwhFN zm$Eg^&m;26lIk#|AtDtt|QcI8A|>zaJ}<9n}L ze!-e|R-5*r6<)1qx0)(5J-uJ0%!m8im{s2R1Q`-pQoc1Ch*28^SynX+T{b~;>)eo6 zC;ZkJ#^fK2_(S1~cnYGTB;Y`3(i@$@=!Y$$nGfx6hAUu#w4sQSw|KM&&X| z-CL9qo2$YZe$5hDu?pI6MN~y)es!$M(7Y0dLvwc!?lktzrE;@eWC=Ellh^V9Yea@O z{e204A%RV+G3Bv7d0}Q)1?W>88sba3=4G~qBCg;^JaJT(=X>`J@`Gny%_XoPIgVov zro3Tz@r5v-w3(%2ENeovy@(bgBg<)Qf+!w@%rofmkhQo-e{A7R3`w^!RjRACt{9C! z`sYJcB8j}eIfD)HxlEFIwm3sGzr1_#I}3Oj&*DR|k4JhGD|6xDR3&{HzHY{lK^Md{ zH=n12l+AxdvL0j_1Fz;1qq@eQX@p%*17&F$wW!7qJxP!kRU{Vhv8n)@>PLQrttem* z^kXnQ%bBFHy0{tfi2Hh71;Ae{S6{mC%*RzDh-}@Tb}ju3FYoZuTCTg_bdPVH(_QC9 z0W#Sf=Zu?8q7sp!?Z9`!?2QyL}n2 zE$#2Yv)dd~U-2c0j-lushS@w$8h>Lk6c|#)&EZQn`vtBFl!xH9F=08)0~l4>@E`e(C2RwiJpAmqy5&A>}pPjXjbZ7gsbGutvIhIuftw1 z=CcPS70rP-kvDz5!NT$o z_pLYaq)%J;^~=XJ)u(NN$E?9@5&qh!tGF zb!t`LHzv$3q(O?$?5`f^iDgBv%yM`1J$dTHAZ_NK`ZR!wqMo_ueeqYR!6}-(6@1?(bBIZR^7Pk0B7_nY996+p@k& zTpYz4`ye~ys~w-wW^Z1VK{B$tepb3-6G2kEwD^$`)&jc|krljv37HUKA)C6Z!Q1Xk zWg`Ds2P@caZP2-x@QmlODE`*-5&CS!77{S~{*4#J{AH@*!g`jI#p1B9?iV$3M74@x zbk$t$$gW>M>=Gd!sX0CUU=54OP%}hMMG#q6ydeIU=bjPbj*32y(o#g#D_k-n-SDgi zVsl)NO{~;6e~gz0Rc!T2?Sg)sVILcK=C9E~Jg<5JuqwA_uSEh<>J3E2s)`6tTUCR# zF;OdP_BVi9sqmNAX`1-FIZAY_rDac8 z?P)@o9%3<)5BWk5>^5^cs}Jvbip7E|f%QjPtOP{*zaNhAsVWs-YLI^2xr=glHdf~Q z?2TR3m!hTDp1xqh?uDvl%|h4^DzsH?A!#FJsKJj_GB}p-Kz`eowRDJ@D2qtALphv1 z=lI?8S1tX0Mn8Xk82s;#{o>?VKv5)pPx`QehWt6<04 z^ywY{A>cU8n+f6xE3%=Q5dZDFju%N`KdV#@bpgAwP8-fOFYv(VRwP+W0={4|+u+g> zyHrP5G`{tF^&?5!(_?GyELv5FkS=fDE?+GYC(&v})o5BE=shoFmk5iFy_X7w3En&E z-MP_Z#y5ihRc4K=m$8h!>W)0vVQOAL*gvdRbv*Kyi_c;rYOIGgX}H%aYNRQArmZc#Ya^Vv?tbhVv@DMCD9 zY4zG!y~3DB-TQf-+=>P-%)M+AxAI*E84F>2u11u%%k%La_QfS0$Q&cbkC>Z0h~v+^ z=e6T_&~X^hi(hmuJ4uB8^gS2et%$I}HL~Jbm8gA@7IjD1Re!O7OL>jIq9?N3S1rs( zq{5U%S(k;&L)O9Ds#XM_0k0M<)o7NdIWAa5$94VnDspj?rtUFbh0iVyIvZ12SMG?X z*~hFU3qSd$#TD2zf`np1N9e4|u(y?zJ?XaM4K-e^W~nr;kAr%a0s3cY5w}?`R5ra$wcHoV8>b4fT4EnZKQMTyn0%d%|7=XqGDei$xnN6Vwnn396~L>Adn5&L|gON)z!EHv(RbHi~r4gn3NpvWz_ug?pj)$#n5F#)t4`$f`Cbg*X{21xFFEDeESlXr*Pms^_MR58-b{yK;=MKE*${ih zOdiELXu{n3U^!a^^c&+@Ki)3~cnlFXHWJQq)O&FZ-LfhKvNxo76Lv7lpHCc;okW#Q zeJqYAi=S1H>QoUZx}+w5dTv~^5H7&7_m0Y&MTeK96oKL)H)}5n5HGKbEFWS+9V>O?bd`J48n^OvN~!X3I~Wyd}EO|*6=^;s*9})no&ewYxS{+(*aXH(^EXm8v8#t-A@-k zNQS3)J)7GyUY_M_9nk}mh_5M@ZtC2TP#C67IhUij;eHF zEZ1z}nO55P{hU5>VUk9fGY+vUBpPc!{wB$O8Ezf63^l5k*sz2yKlw`QIGINzd+Dp^ z{F-L1`jAFW(j94Uo1|JpvwL|~=2z78Y4>RFig*iqkdW_)64 z3>IOwEE8MHHQt*C9$bIlV7)F`yXgU#zm4+;9xQShFV&s{|qaoIKJW)sK{(*Rq**mDaQ9|9YO7M{%lz&mSW_&c^r(b;Y||sv26Q&DsN;Klvnj+F$wv|YWJzmy=QCxp{AIy zgxzx1^{|H=>z^TyJV?5xHSX!{o~!7)pCqj{ptD}AYYjsK{9;K@#IGK z`3dXhb=l7v`+Bp{Snt&~j8WMzMSMahp3%rAb{Ah#^2=&yh(b*-TUfk@4>mn7^X_W- z+BFs##ZTIn9X`Pnk#Mo+S-q;no5#X5&&JZcgh4eVTWJUbR`Ub~SzW$_VV_$TjhpqF z+h_=9ncII~i-rBaA57SNTkrhq$fqE!|M)Rf*~q?Z#Z(rt8-}WvSao0PD!e_jzZO1` zA;xh6j$Zsxsrr;;&nK4Kd@qjbh|xucb-d(fpJ}orgp-UbaIf+-JI#-JvYEHbj;bFd z^t+9JR;QT9=U#m#Q7!AZSY`1LqUr2#mW}i-dt$BcWN53(iR^eLcYW>_LY^-aBm9dQ zq~=T6=B)WNRGg;Z%Oz}+BH|8(n`=6-nv4A$au+f-_d~j za-*1tV0kBEzDra_vDK%6&T#AAN!82efq#8;{PIC2>|qYc`0(8`PMm!=GKAuS==lbT z%F5sS-lm*_gpAFma=A<~S`RZ0E#=g6@SLT!V{vbWglXJp<>3mi_0uk<&8PBrl_I?H zuUz#GQ~&=h5A~(9YW|3Mw(>|1o2as@vwdfRuQu(i%I7i6vNVq25S!uCk0@2!oQLx= znJxSxL7(EzPd>IXCtrjyp}Sz;S?n7I_PDyg53%EY|Fle%rL!RmiiR2jGaL-NVkC3> zo=faxGggPQ{#qbXZ3^vH9rE!cfW-O(Nokf{XP?@bX(E)3=(XhyB zHS75nL*J$MtX$kY-&I{~dS_4dhTZWhF0o{oK!*1IGhg4O|J!rs`(B>cH4_v`F*7fS znie?cp?Ck2)cOc6&6tZ9-kHPlq@lLMeGw1ktt*_B0Wm81JjWPT z+3V$Hwm0j+tGH)D+S!s|%*t_m zfMxxOnXXy!EQagPQ!!-*o?DEcmor{9tTE%KvutMeGD;qr?n&dgF^UklOFz6fX3trJ z9*}Bgqq<>@2u_Ty3KIlDCwQmOC+_`wT;BFKlsOS%t#tsAwBB}eeRGMyT? zH4LfBVD8CZOeHr@V#z818bB>hEUGajY@HK}c}pH%4H6sa19z6{QFJDy<3+GE$9_17 z4W!uGzX+38nF-HG)UJwnfDuL$O~R25xKno18fQc{XF~Pk@!U+bF)}NedmiSIE!wx^ zrLvdT<}gN9TWLbeF*xb(W~4@DLq}MNS5;$r#l~+AjUa^I?!%WXeEVW%r&qizO27;< za3MvUG>6xio2*@v8@4PByJXD1X3G1z7d3d6n8!|jU0V<18kuJlBUg7(pgk_L7jeWS zh~|eoM>bnOHJ-|}Pow2g#>~HeIWS#%2L^pQ#iHmrQ!LB>TBr5`u&e^W~sfMgV%nG=I zmFnyM@fbT?-Sl#fzCK>N?@WU%vTL`GGR{5ExT%iFIkIr8?DO8WHC={uBYeL7v^J$cp2ka z0oQ2gco7-);tuYT12)y>`4rFT9G2G-8vepP2IZZ3IScWE-nD=MS%2Ny-MF%Sj`QkNdDRqq+IS zm*X$Rxoqm*Id*eXmlaz@d3G#A#~Vy7%9KS!t)dspU6n?+@h=cGJd$vo<4h8w_FJ*VWC>EKeSL)9&Cjq4B z4hi_S7Bx2wihZIYl-g~nauP4KHWmhajw+dGgjvbro&@_CL&X@g@QX0wKa2G8h>UT@ zIX2A8JZi&#i`+#K{>2iFiSM3w!^>nYlR9Ud^RMiK&CVo$I~{ovJTVKF`B>H?3lG99 zJ$VM{pafmd@@TSQC(P7^D&Ia^!WPqT=H`XQSyYW~9C1wMS_WseJ!ckpuuT@EUyLD# z8Qpga$?63XuYN^u+QG;@e#q5%13l?SPFiJGz5PMb)&wMXuZJ64W`JXCHtVF;($+xx6qs%-O(t zK^fZ}?jIeMi%)JUd!ffD)XNIq!o>|`K~|5nlJ1>Z%`el&(SC+d+QDPYxXt=M{x zDJxVPR|gdZRT9=mKF`?7%{!lq8{3ir4r!dvC1J-&xvXa&3??5vFxU|id!=&2;j}Df zK@JlBdMw^xq&P#jzGZA#x|-ryt=LK(pe^4h?|<%zVop-(Q)V8;4y_;t$6}CIWDb4I z$*-MnAH}$h0FCzhuwXd}sdOWiS+pmgnbS_KMqB-~(r%v2y-~uy*cG3RlHVIGM;uUJ{B?`wl7wwSwU1WXQkl=j4xcF@tvGu3gn~EQvMb zfN1M=v+7AcvS0(OwQ!tnVnnkCOR5;i)! ze6t@=q|~<9!J_)QHA;)&5a z3uis}tmkEunRIS>4eqd~nt^wUjv?wX8^a?%**V#cU#aP2)8dxatBcXZo@S3z%P`~9 zJl@8hox}0`4SV1(Lt!#L#Vj#Bo-eN(X@;Gh0a|3IJjTeRO15~BXBSbj843Ms3BT}( zU$ho&VMz9EV`QArRvRevYjVA-r%zb2nX$~(eV)Z8-rG0sw$+l9bSHK9>5{B5h7RN; zjrgAYdh1Ufed-_Iyu#R|$ujv}E6XZ~?BSkXZlvq^B1%59kiZOXju}%+J@&t2TBLn` z4aHcsQ9c`KSIhH!eA%&UXXcGNS)iVco7{T%bH-er?_*w-h4PX5gsnKXf4C|N#K4Yf z8}2)+M>BnHvACvh$ITv=kTPQaaUM4UjT#MBtoQ+_$X#^I~6Sw?jk&y5ztsNDG z+^g;|A&zA?J&TYVe~SiT1h47=b$zp%5nkEe$S^UQGa>TVIO#`|Y{{QOpbA9g6r=QQ z1ka%6(M_zY4TRyjF2iy`I{Y09T@s>(EWH3DhOnhfTHhVgjq z?(~(lHfPG0;=#63scp`a^@_AKW8?IpYtb6&tkG%(Qs>+x!J}+WHVlQl2nmDYVNydP zu4z$p(-I1_PD5B3)!5n3*4LO{aUt7#;h!I z`FB*+gaPi&OSg8NNk?iLyR8)XU>v*jFk9=yRJx>j*~>g4BP@*vTjSpt`*gLz?U}(9 zqS+iG{0GYX)Kw}Tuh0F)6ln2YQQ+$F-ALDed(Y_Z9Mc~c%zSlZBq>?4@+n1p!3AiC zLN-)gz}vlyWJUJz`1YpW%YQwsz1IgdwFo4uGTR&SEl;g8`3)->$r0-(S<>j*>K*@S zXRcUSt!4dziB^<$UAwaK*6~eZcaB&0X2qv2dP2BQuy`xzsj;Z1aiY=ei`O{TekQ+qJLijj zaW#9B_N+)ecf=z+dIk4%O5${Mlmw392{vKX`va|aVW=3=JB0;k5A@-X5(efsf@h0>zEe$?Q5}+ ztx1-EFwWzwG-|} zDYmjS4`{c^E3b>{TU)r=h-bEP#yBIaSKY)LW*WiRiuRc045^koL`fO=UXiHm&IMdDt%RoRxa*eD&06!S=9F36L9>%m2`%*D?5 zueF}BAc;xqbzYY)$Jk6~t^Ct0v^(3V*^=xe z#Md-oX)<(%RN0&_&^X*+4+~h=Umv%)XGX0_A8*KFW@oBM^i3}BMm8OnR0URjl#JV6v}jVr4b1GAV>je>olXr?sC z-`B3%i>LVh4I#{SD~hnF{>vg`8ewsUw!btY zZL%d7KS{=wD*Yi>nc_r}Ho+omu!SJGFzOR?2c@&zH>_N3|?w zhyX>HP{-nY%M2@tksx3;NYWzf8d0mfA(Wjh63GDJLGnZI&__N!qTYlD&}Uz&n>im5Kc5ErJ99|EK1t+gK@8n?J8)tt4h|M z9@BjEDyoFKIz(%;#?hqKcDbx?d|rf%NA_0W_O<1?YB~4Cv#gchSf1~)oUxOEbhPr9r0Z??6HDpjxi&B>3oHX0YYxxN2+e}?Wy9oP!@X9m z_tQwIeeCM7wTt7;=xC!RC1kphC4YuT%z`*?DRbrXv7Ky1mr&NSszMYDxx5c6R5H89 zjw2i4@VrdK8}jWmTP+O1BsTg_?h_*yA!@-L-OW{?#hqP}lqWyw=eQYhbUnv%M-BBx8EnL6L2W8fFapI~NaT_n>Qhuo%j; zdUx!!?n^Syb-WYtM$Ay|>)1MZXKMzlOKAUf<+JG^DvTe*A>B zF|vr~aPZjm@S+fwlQbKJ2m9e_@5;CD(hly%HlHH02bLB3^qO|69nv==DMJq)W-@+$ zKY|{zikJIGHmKX@?A?d1$HUvK!-nkwg_6&akQVdkVJFIr?N_iSFNc7d6Q{b?hQ9da z8p!yF4Mrjz3qhdu7&+rAE5lhV!w-z8qB6b=$a;OVN&DTf#wbXs)m$-1zCI6~N9$L- z$&;~&zPPl}FpiTNlJrfI9_19C&|WPT$9+uo>!17n9Ut zweDDTeMZ6sGTMbyhw>c1jl`yp=g%h(AohNce0uqp%O5U(n!jg*DOtV8a&P|b&L>qK zj;!JXY|IXGSenY{`CBDba*}Y?+%aR4|isa-wk??4kW#=Kv0zE<%a6eRsQ@(EG}ML8#w8Di)H5Bz!%+$=JJl&&Q^I z--d4dGTZY=pOwFLAe#1Y=3!RFVamtK4Kx(jScaX%Ew*_+?Tapu@+*3D!b=&HG;AS5 zv19Q7GjC6u$HU~`&EGc{U(M?)$9p737Ug7S(ar2W5lYtVAPcaWxIxxxWsv|^+kfYC zBARyoNGfjW#n0Ja%-BfOZm>KC3CQtamW2bKB8xa&4a-uk^6$yM2<@UdqM- zc;+v$Uu>Zf49Ieddj zp97GYi#A%4e7{R`s}o0hu3eh@w6eG)V%{5Rc?5=CpV!{ea~4Zkjh19QdD2xZ#*`W9 z$ah?|fWJJ`FNop0zRpgw8Cwta3!Xt+By#_bVHFq@(+H}1tLhx*yZnszvUvFO zbk)ZCMC;@Fh&2$FbDbAKU`#8xxv?B=*ol3i4?W&$?kWbh(?aaE1~9+Zd%kzc`A)lF z&c&o2jm-N*(Q>vt6yEK`IjSbXE3pu|Y?vL*YqrMWVIo0Ug!ClKqVQ4c*LH2gN7+Q3 zWt}1K?|wp`C=k2h_-3rw=gx~l{pzTyLoaByqIx~mgdKEfeHiq37T>}jt6msEA z^J;3XXGfh?ev>`5;}@;WTs=@s9g#*N&&lOqOU!NEpFZg&x};WQNyrLIC!3PnBf@?(nfXWdMyz_ zeZ)iMKUIQwRfSD*I;-ExRnCg5_#;EgsTj4RK54yEPT+gK1SoAoH2a>c9dm+yUz50aLqEM})A{ur7H4--_^(Q{>)SUE)LOk0 zdhR!xg$`}qcp{Cu%50iXyZjXnY+emq^f#;cqecib?Tc)&nyy+{As1c6{q$A8w89l- z)1kO!6uKHKoADm@kf+&%jafJ>;LQeJTl0xnIM5zMoS-Lt+_WkZrMT}D-SA4^sx-9+#2l*~S;QUQ z1_d(38*}#ATUnT=!b!iFS-h#5HG6rs_>g~)(~Lz79QK@ybX9Ymh{zngrg_X&1Srn+ z*;lbRpTO1HU__B3JER%eV~ZFBExrLIISC*54Cz$$)u+|7Nku|)G&;MI>$HQpuq-S( zBOcKkU$O?tVxq@6b;#-&>9aAm7K7lcRW)?44HJ!;8OUxrDVOx=e zgjI${H!>SQiH>9;WpO+I@VwZcU(4Y|;It|_K+UXrJHGSBC*D8bIGOGV_0rMt2h%eP0S~vVW45`;4o-Pj+|hHBR$F(qKKACWN@5) z*v@F$(n8b|`x+@}Vg_8bZ1f&y$mvI7(y}BxV}!BI(4(r5CfcN3jO9t2tI+tu{S6R@@?C)deYwBC>%@Locl8Fa7qpY}dXT z^gXMGh=PS`54lJ_mYYR=`N5;T4$s6M^(#A7$2KSJNRvg#fRU{zvlLnU#SB)XPaNda zBu@)t#5=6(l_PF>Ddy>G&eppul*hW~9maPn>ga1OwqQA!ledU1He_ejpqqL5Za#F% zAo@FlYpvmm#UeBtlbEI+?df9{t+S;1ET6XK)ULflI?y0C8f9J_I;`z0_JYtRW z`zltmt#LL>$fDI?GAyZ_Gxz?f(nWZ<(vij_D{B||lGgFKVDx0cQxTdD$z=3+Og`Bm zM$74LV#F!^>1Rdc_#Mh(7F=;41{V*iL%J7B-HI3CuQ$2!C-W7@%x}dHL+gF_G^w^D z6CZ?g_AzI+k#j`IG7XkOYBPd3PD1v^=TE z^)DtTh51juWjFH{&0`*UjN_G_tU|v~DOWCosvevv#>maZ3T&x9>roVhVWSv1Z1ZZb z{6pB-?!C_I_!Epg`Y+EoJAxf&<sG{AUKP{vFVncw^U9(`&<9jAuEH*w1xc0@=cvWg`% zGV-#Z`Dj)|T~826_=a}Iqi^*?XjC8C34v0NxVaXAxZZl2nZ~jYNo1VecW6fr(;(*` z2I7G=FWGq<8_8M5GQV-nYg{pku9#qa{=$Ak zh56Zpgt!K6lJY~Zp)$=5l+11($Lw=2g4VUhh9>#fH@r52*_VMVK~vnddLxZ@K<$vg zqi88M^**Lu6Y`5t=@fhIlccFRJY)ajC;3^pbx*p}tjvcs*T;IvMVd2mL3-KWbGBJl zwIa}BJzJJz1va5I%p6(kU}VUg>lt=1qMN*_lJ*aoqE39!lV8Lr@rV3c(2Z1S?XlRd zwNGg7Sn2k0-dT@hJgD!^EMDZHcV;X#OC#sYW`-z#l(CXG1{TX$zm<~+Z$@&cMv7L& z9azF24j7IR`3v4*KaR7xXYB8_7VHnXThsUB$k4CX(A_xr(E6OOzyXHzC#hX?Y;;_1 z>3DlEm&d*u$t=?%B1v$0VG@z!9rE9 z%TDOTHY+H0JwIDzF7NCW%lTiGv3I&0Rm0F42HDWN@oL3*M^mr)7lipl)`6zDVgJgp zm>a_D1NK{KRa7H6uY#{}_%(ZCr$73Lr)FM$L8yP&LUla`tLMcb9T|P{*t{Y`-n6+- zyrY8sqbIsNxg`m_2)>50vGH+VI`# zMGPP@p5y~OM=bR@Sz6PU?qWI1W?O6IP{0Cy%RV?q7M9S$t(adNYcJQmPgM8$Q|) z*ll%f1$1+IvL=b(V;j zSv~99K0nUqkIg3{WDj1#t6BrN+Jd)W3U6nLyMsS3CZ#x0RFjKe9lU-yXy2Sye4N)8 zqwLAWLc1F@mQDEn%X!VqjASpGg|V~!psI*=q{A3OAqKr-tO$%%*^`fm&E)-JB2=G+ zzdaHcDez15=7%)fIPbOVT#UmSSdC94H>+ncck{8e6VHJeo9^B%W|%_{wQcsO4k*Hx zeOXLqqB*|jgRc(OyqIH-E}OK(aQ9zaygnqsq_wHqz+N)%;8V23d}!Il@d@>gci(4= zeKuV`BY&7jTq=%|yXy*QEz(`Pcrmm4g!{{5R_{Q=`Ik8_e$vMKP2?`$hyda**84XP zw9Ddm=M^9GKDg2E%`1K;-eDkL;>&J0`sNsyoY&_0+e^EX_>%3(KngS94)*5>?KrT3 zPq_CRJsw3uHh($ya%ot;nxl6QcJeGU^SQ2a!|5`DU6I!_m)X|GiY{8@sVoD1@)rf$ zITc%C4u<$12#@lq9=POPKrykr#vjSndnxqbm1grnGpO`|%>7N&-`zqlx&+<7)rw5gk+q_~VLCS5TTs{?bMSk>|pxTAy#IU+@cus=|A( zjSaQJF;c(^XUdN>S6Pe8cV`Cg9E(f$=BVA~%S+dt@H74%#w?faa3BfEXu%3%Gscz^ z;|D(SLH)43S_DQc`F76gC#!|A@$|oa@DCScrIj0|IA{H5Jl?F0n4v1Io?yLS=Xy2S zhHY-l2;R}WI*+^*e(DFan$P^~D{`!T`4Z`{J;eBlEd73DYbO0gHn!dGS=gMS3NnK> zW`PDQnkhepObi@>j=AKh>mxH+dhavY#Ftw$3oD2YaEHG6u_}#K!;s!O1~c^FZOf1R z(6O#a!b(=dm|tezt=;iN{v?^UvhCLWVjZ2}2x)%gm{D)fGdU~`#0;9d-d77;>a~%L zPg=-S?|9CV9_dzOlli7D8i$W(8Mu3m=jLV) zn#2v7$O<$FZ`zTf-*zcdV-T6D81po-h^+L$k9t8DpHvRj7}$vG-kTu33?%v)4<_Xw zS&1Er8=?X^>C}}UF>asJJlMHk=eq-qq!-;ACfY0`=n zU-;eCVH+!`kMK%tcH>vHCKtbdH__|%5u@)+yYeAzS-5YIkuiTctig+4&Wyi~?RbK5 zWipJC6XhU0c|DK!FP_i&M;CrmoG!N~D_&kc9N+Z4Me;K&KFu}H4~JdP=GC3wB(_$0 zdsGQe2hV%c27@0SdOn&yA1+IgFLO64o{mw0^Vu=v9nQLcBLJ!{`Bz)&Q`C9UHP5Tj3G5i4@jM zWh~zcB!9}mDs3%%W7LNkwHnT+CPWHxS*C!Ps3D%R9^W^!?=8aR{F3#p%gg#+@uEjF zt2s!-a(rJ##YE8^Z$8ez44rv)5{9*htcul zoO?R+l15$Ns?eJw*Sqn9kAw7Aqt7pw59X@xU#I>5obi7h@B8k+;l<_8$M}y%OB()V zMwVBHT0I~X_S_5G0tSLG^v z7CF04oxh1%UyLrT2F%IlRky}f58a+;V(qKZ?(MwBJGtJq`Vb-upI}8kMSn8#ZIP!8 z;5tw7pWS%$-8sX%AIFN%=BVfV!5nf0e4ul2^tyMj zt2}5Wb9d$zKgceNz*{~PYgp;iFaqD@5fMO3_jW}dk0xJ^&8#`EO#IUySKad_$cdeg zXU;3b5B!ES#K~k{);E52sCi`wSzH!m*YxR1$SY$>)tib=Zp2Got(_|^Ws9yNcje{N zY58IJX{`fY9^JN@x&XxrYgfVyG~E$j0{FY?8`GT8wMW~4Ea(4uEo+Nr{vp*rP&Fv0x-_*+;}J zz9p{SntORu+<=-ZI3ce7xH;PDuWD<3sGm$BBVY}AaECTxm#W;(gb2eE_@?7pvj8@W zqxgimc1ZA-{n?ci@cd=C!v}nh%nI+xJQLe|rc7O+dN#ZHd2~L8(fK&0`BhV#Yds;d zwLTEl@Xj6^eUgc!b_`;o_@^fIU6>v*4DyZ|i574zzhY~3Gp1>Y8(ERGe20}_Kx$SO zXY>g}*f_2aTx#W4Ifh&U`*Ww*co3*^XUU(LH3${$Mz!z7r4i!-q!4 zPcn!BB7oVkgN0QOtp#|o2#EXqqG*S&_=ENEzIF6dkCeajJV>%I7Q~~f$ySu2f)TQd z(M1;HihR7>`r8^zriok5(o4-qel0}f;;!5{T@S{wEzi}OZDB{#G)_MFRx_3FyEX+g zt9c;>H}-II+-h8$lCO;k53)Bx-YOm$0XEvWcLW;jEC$g-tRRuNiG3K$cT|&DLq4*z zv`A;N%&niUXh`p*ZTFB6G31)JI&zzHihp1EgG%NfcO-s8*;-0qM%e8WF$Bh6H7~+)Ji@|(} zBs3tkdPa4MEj~LZZm2dzKpb_1?q+n$s_?{Qe8K1JizoWGk6-;$?MS!w>gegO%7)L! zDyj;%~X-SFKF#RCh>`-aEva-NOCI+*}`6+{Y|>Oo@}Gl^TTdzCUdfl zqdu9(nsL=p);Ai~(ie|I0NczZYLOsmdAofOp1@Q1$(OSu1aY69)ZEo*vM0?AfRQnvz|_i^*#Oa3H(!^u_(IY z>@9BMqC6tbuwb$8L;+JUhJT1>uSN&*lZsYwl&w5(P0KbSa8ZPG2S=`u{q@Ic4Dg^ey7PA${yaO8gaMKcF zF$W7+rFU)h^BiNkQp)PiGe;okn@6gUtSRj*#6CHm_vr6@$kIffzkNvOmHiSUlC_v9 zYUaPVnaq5GynF&){G+qjz1NYrKEhhVB3tq&Bd&ddR#!(kR zl5N>S)My1GZ_p36B;x@-$8W#IH8X#_`1cooGe`c*<$t>T&zJu^_Wp;9|9J5qrtS0D zm;PVFjQ6us_;L2u)M_%6Y)Buw8a^Xk4#S>SePa3Ji{B4!Hz$L!{=Ip$y9W&#ewtan zn01L)Pi6*Q{%l6Ae!)rKMb zuIhd^{dhcy9u9td6RYq{mNt4hwRaKt87*19h~*RT#WU*)dCEEY+2_Wsg`sPttAh}| zd^3d%%&Uy24~bPm_D6OHr5Xn7?#|KPhh;hbweMv3<`z7nr?omi&VSU1{7?+RSp0;i z)or`?#gZ3;omDF@wJ!g8S{Oq_x6*`YwW*kcP1cIL8Z8RRC+2{OeI6@dzmpCrk%RZ~ z2sJ@fMf+9sCmC6NgGBqxcB$n}6@xAV@;SJTc+-kYQ$c_HebpP7+`tU`HG->=6HNdhh3WyPA_ z*YwUNt{Cyk>?9x5te5x*?izHaYOXv0fc-Sv66S)Gurye}$i*-H|S zW%j!xv#JNHa0JJS`?P~0uas{*#{$owBU7uOy;}@u?XZWZ@@|&q`CrYL#bxgix%xo$P7k~5Fit!cv(@>G@1)~Q(4J4j@-yHK>!KKsiXB4f2Zy*3)j88Ohj zA|t%X9g9ferj_H>IwFW$xvMHEU*cE!iikm;=hKgm%NEu{j=h~o21!wdB-RW?>S7rS z%5a#Euh6MdJT)Q#J;eaKoA{!oC@S)a!k&w#v?}__yH=0o;?{?FSKhz^xlvqZ1yO}h zc;8R1bNxaHgr(W+FhD}=R*zx?&%_#W8@l-!>y0qSjb^ljhz#qQT_L+fcKGF!et!se zWiy;}$E*IjwZ$rtqo;?t9WOkRM@z=T*+^Wrpy> zNpVICk3|-BsC|O|$y8k=kMD6&6NmeLH7nd-N6YpvtOoo(m#kvV#~R*EB4t+may$n! zMRVS-P7~oVLtUbJWsMQ;U=qfwHL5C;xEjN}WG4$h%U5Wy?^&r*)opf9St)JY4Kx|gH>k^?pS*xY9`q&yA;2(QqfUds4f@9 zTEUh{WTLz#YvHkKKs=N)tSjNnTgYP;&r}5%7S5qcBRE^Qb^=l<-mxAUo zTf~5odyl-tv7!{@$^xvEKVXeLA33zOd{s!evl$zNAitjh=2nElPc2}8rDB~|@G1Vc zw}%m7yK$N4@=d#P^p!98ZuWtQY^V=w6iwLGJgvTXhdJEa?`=n;bsg(tl8P2L%2j5F z6~+-|$glP%O%ciXUa11BsqsVxAX{06c8fPzLL0*PEE8Z3{A0uVF&{9aczSQfqCeiz zG=#*z@)(>kxp>?Pws)ekHP6VtIG~la4*xQ*`)W6<9`f-ivlQ1LhK>HnSY%Ocu#+Ps zp}$DW0{9FSZN)S8!CET}t4(oBym!6|Blc>IFC?RV8HC;K9r!bLGP1JXZfp%7@rT#Z zz$3h|nUvAHY=5i5Y|R~o}Q`SfRRbL$y0#dfm9>b!>R&@v7NnV&y85}Wso zBN&zp{L>8S+{%O=Ml+sg@GmlAJQ=maIA^i6?8QoE(_@)f>?&4e#WSB4>#{7rq&11P z@aKlXMs#at+8A~1K)TIJjj>o|VGL$<(SgLQ-{@YEUHiN=eT)c2GwL03@M01Es-}e? z9P!zXg&ft|wEELIW5k*wV|a#ctPVZslP>S3UGD_scYNAkvA9^B|0lOrX|@)FqtUPc z&x{u@*gQt=}d-tscJS*PNFWlg~|7IdpXVX$E+QKSnaHLp}ZIWVhR9_Q)-3BKWG|c33(>4wkKavVk##}pR%h1LUHpsU5jOP&ZXh!Y*d4@@1 zhCX?fXrZM?@tH3bfSrvpwWGfRHf9HpW5&Ywitmx7CurY@`>(MRDssr3( zko&4+&l-j7=7DHqhM#dgD;MQwbaE_RSQiiWu?S>lOl_<?ujV$M z(bzG6j;o~4wplZL`JVG4tQKlBH*M)qpB|l;Im!}7S`_06vb#BVRCp{Op`k@g zBabS?xNc$LXn2~xGfC5oaR_$&iETWxhE{HiQ#^E^_r`6lphRxBSfEv}7Ykz*Gqf`9 zK6LK zKk4U*;XbW!Yj*zazuN)Xn5MO=7e}n$&9a=6m3u`)azOwmv`rq8@Ep6DDks0rqwcj= zW1rhDjn!+9qCnoXwkxI@KkYomT0D|@%Bpdf9$0FA?1U$j`V@iqXWij-xvWY;>*aBn zwt7<$&_BQOh!=}y@txi=hXnAYcitF>SRqETMj4TI>6G{A6AQ9#Jc&=CjXNZd;jt%P zk%tDPAOZZv(Ap#eev*wXJR?a`^_rik%Zg?m!(G1-ZEm&mDyingJTF5U6-VRZ=G{rCl+oLD_T3l0*%fB&`|BMSJtey$139*gZx=N4(de$*lpDBNP7@^7O_GU-pvG6 z*u{dPO86NkUov0Sqbz`<;Q+VI0#L=7vIglE17oo7CN@-@D?EZ`<5TUiGh=KX#&SqXxlc4`JW-0Bn4-fOInob|6cU#0+&>#CO zL(Q7~yvNAGJAWgymr+8RUhDHv?{D>Q{#u5!e*UshE4TJw+3AcQkSh`x-3V|`>yJMr*7MhsV-XKhNj2`ulf{~G zXUSiU84iwt?+x_h@IoKN3UuT%T>I!Uo`1h#c!UhVOIJrSDSw=88`If*?O~g*wOwJQZ!Q)~8f zG%Fh`%=sxf%;;83N=I_6{v_oatqn;R?>vine4^elkDtS0y|;)eH@8xQP*sliNK~Wj zyNr(0n5#Bzju4G&FwRe_EpR4#ElzwVuZ~+@(;jQvy<)+&Wz02(kz@juTg*MrVQ6vA zSj7^3$O1<#^;st8*X!Ml*89(A>ojTJTE?c$ZmhocPF`BkgoK`@gI>!WwqlE-mRGES zVQjM=!IRiAbRi9E?@hBskwaTHi68uv*6x#XtwC>^z^B>bPBLH!S)5%oi*$_@hGaC4 ze|VIA9nEiWA}v=x{oIzN9vxu`7D=Mk#TZ}hC2#Sm{?vgt)y=O))>a(Qyyj+;ck2%fT_{O3i zE*Dq5{_E#nlW9@J4s*woML(Ritv7sGw0qV_a`W!9)g=FMv>TK{$7}6LPWI$&1~RO^ zF&~nRUJt#CU2Np$6-?aB5MP_QD5_`Gxw$@{QL7}>8?MdQV`!{}I#0r_?&ELonP^Lr z_|%wmf*q{0LC9_9V4<)LV{PDD+dRx`h{yfKi_~lPBr<>UW2dWNL?4VLw?A?hpXi!~ zAqLZ|;J&!55?`s}bb~G#T(E1CWe%G(>_0pca6&5=)nS^znEmLIdw=u zCx0Y^AgM^W*gDdR*8Y{qBpUhF0e`N*kv*#h!#Zn+F>Q^|T+21{(NfGgqm^g$WPAEl z+kGz2MoehZ%C(0@OBJf$w{*mHu6`wpd~8cPmLV4nabhh-I=Z_r{)yjthsde6?y5$w zdd@~Zo&9RAbaCyg-;(UN6N{;?-J%KmZ%Z$1p;J?mtXQ*bVU@B549Z_cfA`s>$ONTjSK6#c$DhyT-U^gF zq~Z;|XBGOibE$vrc#$|F|b4FbEk3ceYtDUc)0Med??=Zq{JweT!ST5Tzp0!b z^s907gQy!RV>BE|_3HTdJv$`wjUP$o_b=@Uznssdk=8dskvD0@Ec_{AvM7&BDroh) z&VI-EtNGR0ua94!{bpWy{a~afSsZ4Aa*Gu(360tnk>S(4FGddEljE}xbh#BV==oefxG8a<;C*3ZuCdFS0pAH&VMM zS#%IDpy_(?Vn@4aG<4Oo9K+W8Pd>h2UbC&$*Z#b{H8^&N9!1$OW81v6c(#5bcJYHg zlL8t1R1v!0zvR`DpOpiWZZjrd<+0Y1Y};>W`i1OA^BQgsk3ZLpd$pbtbA5)Vy}GqQ z^;uH$Z!^n;{kk`=VcV=5FL@0nvi|d70Vc#xpOWf2M7meQwi{QR#56v0_cs~88kzkb z^5gkd6~9#OSEO0J^Y=$P?V-(!imvXf_VXT}{vgGZ@#m-W*`J^0+qHg}=ikrYzs$3r zF8@5w{xXk0&b?Otd{3WJu>@+^~dv^P5kD$^AF~JeUb-yo=>#@ zL4#@t`6;W2@NrsX$Tp&c|EGs;Pkxj7$=C#!SOTMp8GNLboO)LVg;>#7y@S(O^Kc~n zc4Q_y)LDcbzM6B`l#kb;bk-v&MEyO)| z(MA+5x>X|>zkRcII;$c1zxXC5u;#sabu!aur}!0YH!sN4wD*VgB-{ddx z!te8L48u-QO|C1_#fs{ds{JJGsvvfj3&bbPtSZ>Lq`bfNiM>CWP3wA86EDN%U6xXJ zwr;5!l8dqdy+l4WnqKk8Gq0f@f7sk@`>~`PX%rU9Pd%=^szbJJDqFJ)z1_AVWj+7Z zbaE&=ia51pSAB57D8_(4mbhLTc54cq);AT0W&a{dD*_Z@; z#bY^4Om8j6TS$wgMO!w?gt9G>DTLnXY zak1Pc=lWB<@;1@mBdz>x#43)&J=}pbsYONALQ;|J#o<$GMAAF%ueJ4Qk#;=T10qGN zc$yvXdNY0zGx>|8Yyoptse-Kv=ZS2S)O-bd$SxB5G=+TuRV{ytMXZ3Qc!DX5D{Na= zdSn|lc)6|B0=?M)^B``VcEO6BG|ASon7Pxc=S5;{!xVhaMrGLY1O%{%K6!l4Sdvaz zmyg@2Eb`N;cmK_uL~%a0C2780-u|4A#kn#JPfn+NISr!*eTieqWTRy0|C$WTkZOE0hE6VKS|F7@)Nn-zZ7?^S0Oe~e~4E!l-UtaNfIB()|f zE)=QaQs0CL9rkd`Ga=%==^`)ejAMM-8w=`H327`|!4MPG0%D*uA?a)k)28Tc1mn`6 z_r*jU?cC@QCggJMO+H66p5Pd1wOpwd4ac%)t9mn)KSKYQV2(9bz4a(p8C&MT`Ly<& zmG#c1`s5`cmsZZlJp80p_b~;>=+Z85E#L+Hlf&5N#yxDQ`0gCw%kqO1G7{bT+%pVdXGQ3mOwVA4Ig5=ogEnkgE~n3W zZ<=CVT9^$}vWr(+mzX)0z!x5Fdo2(z^m(S33jsXriih=P_?X$;W)bIbWoMQHjW^Ba zzDS&{jG8ZaG;1=_HU^NT+LMLl-`4clS8i=LwBHOik0?Nk?1vFpvz|hR<`6ZC1L;HV zWZ3+bx5Q)F*|V+-%!{mZeZpPMC$5AY+lfEw&=YT1=--Xby~4^?PDvA|t*y7!z2N~v zpW@_EW-VH?f|=CZW>s786xE0$B(jTNySahXp z$C^u9jCX$7rZus>-adDo?(4Bogz?EJ z@gL^ZhFPd}5qa|Hs#^JC->Ig9Tl_3b_>2`z9b4-;GvdwhFs2O+p~ZHXZ{>$Yy&qIO z$Ro8Cv$WKr2L^s}6*gxAKHqE#cu4JhX!Wj4H!MR13$S{L%9R!U{y}@d&wiK;uR+rf0DLrf_R#6W>J^SjiOOWOP`t zOEyXOwNK2{3KDMFn)OJx%ylL|h__^~t-j%HZpTR3ia`&0I zRju)1(LHb1qWYz{KteNiYliqkch7j2Nq!df6l?SR~HS zCtdVvJS=IJqN-Q<2f4I^cPp$~n8R^$!VX%HBPm;w48G3C#%VHVjOAPNNSr(MV^YYeHdC#J%IyWXn zF&iE@M`nL)NptsJB|iq1qxA}lId!zla%`Fhk{1?6$3CAT^VzF(rX!Zoewiw!Ln!Of zEM}3CE!x{WeS7=j5-E&R#X|;1$&@@~F-n$`kE?WP77LQqT+npBGpq~|=lN&5p=vDO zL(4ni=zRJX>0w7c*z-kpPX=0%7NVq$iDpf9KFHg>>*1`qVW}Mr@Yk}c9AXfBT~mou@6&ulo6egq1h1Dr}sd>KPHfYwc|USjBF)KqkMvt zo*6?gEqp&?+Bp_-W@zMUTu88>7WO7+VoZ@!?ZQ@8h}ARB)RuL~V8(RL7HKNW;ceRX zouD|YP5-2^jtnDcU>C0qALyu@v$B!04(rpCyyh*+lF-OB%lcif);<+H^0D7`gnL$9rE>Bv>ouEwEirr@vjD)+aP9 zGO{}KX;yTI)#*tzqdx8V3jH18N_>$_C@RxZ*y!eT~+w12Yl ziLQ3{+^sfQrJb8F(6gPzzB}<~d`Qe5(A{tGDSqoklZ|+Odr+(w8SqXPm!FJDL(!EF zkRvwap=2i&iHaLW)k<3|^JgwvnVW62jFdl- zFqs`A3vRLS`X>(dZLh_)YH3j-3z#PsnI%ot>DtkQ_lSVmq%&}JF0Wh58?%4jVzhWm zN8^a;WGreH59vxSOcLYMiZ$e?qB5P@ccc?(SWgc;G@f1o~Qqh1O#&^zlC3jrA9i?Agu{f07R; zNX@R^Z8j6Hw%6qxuj>YPQuRA;$zAI>)6AY11=1^98J|SPSp1xcm(WQ^GvTbqc*1*% z-LPxAarQf>`uR=#%@UR5LO}UX;1NcWpl>tG&UB-(zITD4B~FaB(?Um zHex)bnK5Y^>*R@zBF!Dz>>u0HMXMy%!!DigDdc(2rk07N8Cco~dimEi)hw{seA_q)ZU0mNh z17W+yWe!N6`iamqv|9v2dh1s{)(6+h-1$ljGLN?9@NkP+64MviHeCdTrF_SK=yX$=#8O49Gr)8? z_pP_Ihkp8z2i{n{zDW*QDX;VG^68;h?^5OiZ0eaAJR^k)%{_F~8Le)~K;DsJcR1JhK*WC9aL{hAkFUk>pi$jC!5*5u4)Zc;~HN(Sdl

73&+;k`XIML2yt~7KP@adGeeI145ZJ4B!!2JD)qET8y+P1-5z_@D_!Tc! zX{dAX%{R#Uc1M4%0P_l}Dhc@Wsb(fC-7(N}($f*=czy4yLPm7biZ^ImR$&je&HB!? z$6rjt!B(+bVLLxV&p7a`Ur`St-q~eakHsoT)6ZG;{U0)~CZ`iE*2IJkVopEjL#3mR5IkFdxX~NQ4(UFZ~I;tZ84p8Z0v56x&59}e+jlWd5A}mt)Q0>Ej@8<1wd%=jb>?DG*NA~Q9S9UU*p?D4@ z9Lfqw$AkC<|ED>oV<{wkGdVW!hh}uX-gcE>K)T`wOB)B=66oSZP%re6yJHEIFGBYKWHbmO2n~Uvufd+(8VFrh{Jw0p}jG$ zNKMKzJDFb{D*bu9;5hlU8dXO$L5!!eu zdi03`7NK>FrbqFHEI#XEJQZxe0LTie3_80q7>CHiD!1plXTJvF%I&@4MQlzh^7wTY zvii*(vCH?_vpaq`k`KA2KwgrS#Cy_O2VzT=E&i~G7Cehp*iT0Aym%{G7bBtK3NLIVlUMSDh{1+2C&pn%S<_f-iH&f=ob(at#C5e{SKj+v2a7!%*^2yr z)%o6Nl0Z%k)*G> zf~T=J+xcA_Q4to_WVG!Y&)Gusanv`BW1}`ji4kaI)sMD38D8QXxg3G9D8ur80g5fk zA--W#R4{|lJjV=2L=9dex@G}0Yq$JiC!^&ZdXuvF8I$+`J3-TUKFwhEeld5~P&^nf z`HzfKtSuh+LE%`$LdNF-@U8eKD)1KC+??6_6-F)f^vfewO^uOf zR=qjT_xL1K{i(Tlk@jo>v$U>GVT~dKRQl8gs}$>1N3`?n8uan!nOVwmX;e0tf#!x| z&YESTL)^kf7_&F#usS>Nd7g+DvP~=9_T9AR)3`w&KI(hj%UEW?T9zUo>VO4{l?q7sSL4NX2MIK@?e7)=yx;PqsVs9W{q1D z8?4M&ge_>tGPueLMNr zD3q0pi~5KgtzYe%_PLUBhP=ja_&2MwQ~Ng*@2Gh)6UQ!WT7cW2;-TIxT6}?*jJz@6}le z$Zp#CO*dEniYlZt0*;8dauJ*OwNZ94BhO%6mM*7NBgjfcd7s|Xj@Qu0?@@{+M({ZT zqmxt}te#<;<*A(no>`TnLMn!Y6ps=6Vdadh#A5Oo1Tdp3nZr#4c|H2wo?n`i`FxXx z@%$Dsq`enz6qYn5dDI5_c|}K7ud1UxMq?65=tm1Ii(l2@A|XuiNv8MvgyOl~LSs7K zibTaYovbf&u@%=IWu9LDnvxF=fe(N*G&#_{Q79d!?5A|!QslqlWA*r!8}=; z{b5{=fhFdW=;{#@@K<*07t{J2OZ7f0`4$oTYod%_-SQbz8CMRlgF-?T70;!GK2MIZ zWhD`1uX!dTR$!so`7s-YUXg{A?a$sks%?ybwNar&1}iIeCJnZTlkEuJ8Z^kn|Jc*- zM9WL;&bQbH!;Drvg}JU5SZ`%%vAz1-Z)^TMGV=+?{RScS_-(-(W04ngoOU#T0t<;4 zF9v&O#5?&wZE=yMZjT19N1um>?RWqT z)XCPA4-OqglRgLR*GwVex9ZfD4-b9Sn>R;0c6>8q`8{1Rg3mib3cs(bGK?W#>Hv=3j5Qo(*T4I`6#0r*xrns5jw+D@1<~6VO?dI1;nve7A zm*O=q_iKH>UOt#!TE(E)2y@((|Ge8J(x?Pg)mSD9yT_3v@C&HeFV>4pNGTfWQYZ%3*R(+?}j6*Dngv~1tWYFXUIsUmUy^3!1ZU?h4wZT(KWIpkc3!HymH zW)-_NrWh$t`qgm1Li~QTcriZyc-p?Ze0X5-&FJ}ZWP_HyX5)DE^^7FqJ(y>&r>*Y| zz;X4T>b3}PeA4q|zoAZ|XM+s?5u^V+Sm2lM?fK)3_&;XsPxH+%w+H{fjF$Km8~!|+ zJihqzL?M1lAF=zvjOsUWu~x3h#{YIA{L@R{$|EK{pYQtkdV2k7=Khg{e{Q2(Uzl|mT@3eU|bMs>sczi($)?g#QCrsKOC!6q@pJ(oWn%4h3<9nYMzVgVO zIj550v-ihZS0@9o*26*Y=Nb3@=CE(RMk|%7xsSGcNhQX;0+r*nE$6U z<98STeRRQ&%dzt9>Gk!X#7@5+$jObD!~NgQ81lAX-{$X6Mq}@-T^k*~Kdkk9zQw7k z$Ty>j5>G}G-YtGvH9nddjr?|G7FT?054QQm^e@MHx8{sr?yzHSt#0q&-EdGn$y0y1 z{KLp53jBQV>Gg~WSDz#P>5%HfjOm-S{yeSaZ1Ke&K|ri(YU=dvD!+)uI25K^4W3r*&KU5&-~K+vuSx}Fox2XGn-gv1%cb|XXfXF+usfr zm-8Fp_%BMz-OzYHI=&f%{xI16X+~f@9C|hyeRc7}Z#~~!el z!&SQmWl&kjc%qEoI_9;0ZT{&LgaTidi=fR;k>~DcX33g;v^M%<*S~*2}?E+L=|-aJliFFG0z{3G^`+`Sg&5?|hswtbf#jRwZKCjpMv}>0+ zio|L#GP{vUysMhEx*(HrRb!Yhi;|xPtp{XM+GvB}VgYMex2Op9fjRDDADm?PZff5+ zj+bO%IsR!@J_k2C7=@HxiH4#>k&{32+6yWIzmyuxwsQ{$;>Ue0zd-nDXWEyG8P z#v(}TAoDoxhzcK<$V*DLAtf#R(Xv%)@AYJ(Sk0;-0il=&6J7;zd?9PrXT9DxG%6gr zIfhlOW@tfPqhYKwtR_}vNvnsL%__7oPIB-EV|OfT(}r%vPp|6ZsGj^wk76zT^Gqum zd}AAEXxSf>=wuvh!iVG}VMyQ}E74Lbf1(JlqW#!J1 zl`PdGwSi=ugq`PdO6(*7S@71gkZjN6j0do;U3TOhj;)32X%y{9N@6pRKO2X;=s@Si zBR%6IjcF4WYbCht(fDR;qq{i=8$H8ral#_LppR!-woAn3eM&^dB6ICGPI=9zy#JM5 zvky&R$E&fb9dNsJ;SjFSNMAU_Pd?NuBhfvLA+Q)}fzRi$Gzo|4GB;xw(;Q~;mj&_L z4JLHN!ge6NikIPQX06SuPp`LE_7TV7>Q*h%T-s(^vOs*Lfr&ODl`Whz3%T@6wrrK9 zNEUaqZ4tz*p81!bSc)yI%koM`vrMDy$mZY&P+3M84Ks0{=EV%JReEgaNIWKQ(duM9 zjY8gITwgDtuMs`sg?l%1nk@@LfHaO^pnF>TBd>9Lwj9;ARfSk2KdZz2K_Xr{3cqlI z5rjk~61ZP`ux1QgS$VFk?OrSOmKLECj~(%Pal-h{Wa&jrFB-=Xx+H;PRhewdLdnXr z$tQ@7IZG}F=zH7 zI~$ZG)((!StuPMqtCe|n=JUBZVU~xxkB#vW>*5fM;f_^XO%)kvSbwiQ(<(cM1BMxA z83+;8P}(}@7FH0>Mo?yl#Vrex+^8@JzsA+daY(sWQ#7yFTK=_$c)|Mh$)@#9(q`Kc z!V4#Mmh{U{;)Xe35BIQlZ{+^it>Yx;ZSjnaYFTtqOBGLekLR(HME#i?f^Z~H?}d5~ zK9gXkB&oawqlQK^Av`V`A z3A$|3J>0?s25e9~H-9m%+2LOv^O{WNZ4Hy%H@byGQMxmtQVfdyMbNY$O}ECwrg)|z zu@`So$NR$GZP-sXxt8nv_T;Ty%mHJp3tjhgB{6I~<3HlxnS&w2W9)bP^ZtCf$-RHt zhu#_K!);@I7GXcQ?!BWOa};JUc1u3Y*{E2?UHd~We}!Hilugp8SZE~rO_M`!_xOi( zRRa6kW8>IYFj8KERU0iapb<%`4PWICJ$LkEEFHJ~NOs>fN_rhnKE7@y?un{W^trExhBewQ)izEa^$-&%GM1#XFI% zXkWC%rR7nKB7G5yb+g#oAVk+!V#e`MXyuYT8c*YWE(j^j9Xoz!uhCXkkt zwklK=El`j^6{1rr6($UjnD7@MA=CjAW>f-!keD$>Aehk+Kcpg1tEyBg6jg2dOASq$ zwEk_!i5>g0U(eg0p8E~w(LK*O`|Q2;TA%exxjZ!_ivRdfjm8-MbWA-OrCUrE zS2W3Av~v`)^`h7GsQ$bg`$)!CavNuq#2=bHuI*uA+>>>B@i z*4RkL8`gWW6Hmr^u1`WVOzCQi z=3*`8XxCpEa#2XOmU@9!GPHr*TC=mPUi@eQ9rf9wZW)$`vpQMU$(kS2qnSZG)n{>{ zrah9!ZxQ9wC}m4@u`e6*aOjX7*6f>a$TrSoBTr;+ZQ^XXZRwwo8( zj*)6K<2f6*p48Z!=ZYnIGzwscwipvLAi$DPHHR(N$4gfW-gh^*zOFWOaYnv$y_R zMI)`*VYz)Hdf9QdvI~-7Nsr>ID`h;&SJ!)QPH<` zvmWfQ)u>n>We7)juI2397W~ARd`g$tNw;F#zBBRKmFq&gc&ufzVGvG77@`d(HI zMK!g+E#qq*gr&UUSQsZ0FUv2r;`!PZiTtox*|K?2$#P3M09NJ*o7;tA`xqE@Fb`oK z$WzS&i#0v)V@uw}m+p`7Gu^W}B&%PWxUF>=w|(~xX~WlPhy%M$9v^tCJ5TNtnit5d z&069xAnN~;ar@-A9v!6V@2SyWNax*nuo!syPIVK?1ZDJ zmxrAfh9q8N6#L0+J=?mIMqBt@vsE*-IHw(qp%)tbKyzFkFXMGuW|3oK_?1Z@y4WD4 z*mhk(E1nd;=}cF)Xu%`dFk588NpmD^;HQQ=&ZIRfN$&DU7@tEo?d`4SB9tteX9uh8 zn>Sp%s&_Ju8n+s1Uv`$8VySXC>4$Y{vD3GxQUZBT2AGF-ZNt-G?k?&V3Km@LewXj| z8h?3JPSdYwN>{dNmoNHm=9J&yl>H*;!m3$zdectr5KbB-Eg{Vo*08QNS(mlNChOg; zt~U}Vx3gbQzqm)A9-$rL-5c)iejeXh8VTyiS$SI|HeU@lPk(e)qQB-;#lfxsD1%%+ zCdYX!sciOS0?lEqw`yUda)^0;oTsuzDQrAEp+qY+P5*%^KFgl2rK^L()^t|z+iZ}%-b&r*l3J(H1_SR|G)rss}|?w*psnK6!D zAtZ;h!I5Soj?yt7`R>2xd1K1x#UI!InZbJX^|6dCTgmgdS={0b*<(9@TVh=!75?zq z&V-%S@x=K$-ytKrkri6y@MgrFO^a905{8gkGPgerfe<{!hCXRW241Q`cA3DH7FSlv zl=^dx#yHzrWblp}TCfY|BwE<6_aa6F^~^Uu@NcL;ex8kksJr53e4eZ`qIq-2|L*S0 zgGbz5kC8khPB(*uFI&yDQIV&w}oa%OLR_@{aMcep+jj zm1L6!U-FBaYjX)!^sFQg*~7=Iam_-u@opVi{51rFBSzn z7W>Y|4avqDctEv3{pd;m`YJYfSiF!`JzjClf-_|_e!&Mg;CVf=uUw2@5REl@$JGReQ}Jd92yFIAU2NtRC&nTAE>ii~y76B>9#v z)8rU*^r1uE%-2d}czZ&0PbbF9!;eTkxZL(~^Excrt7@}QethI#h@M3`@jiU6Y zwY_l0?kpygZ>vAV)hjAU)Q+F5lLARn`K_9IOK8W~sFgo!DV+Fnl5IeJg0vGL-F`do&kp^py>H%`@X-uxA9F%Y-rO z^knTbeaF4xC@gHN8%A+#*Ft9jE~-sl%t?Y0vh~n-RTL>_SG>rcQ{`4C1ZAZ#9C|$s z>MSNs6)Cfg470H^l0EyhZ3dejdWD*vt8zWI(*;VFP{6Qf8)H1@eAkugm>@% z`swe#-T&y_-#R_~^8Nogt)4z_O8wE%+SBRYtNPG+e%n^Jh8#m4jyU75CIU z8|@7cZ`(d~-V*Q&0(|Frd7kh;$6q*a-hBDI$Kn6Dzjy!Jr_~Riw|8E?S>q}3*N@N5 z*7T;er}4cP=oxl)zjdCnf8q4(eIs`DYeo9={Qu{Ujr9NQd8g)^=dG1bo&Oi_y*1BQ zzj(I1$?)9y<`tRP`-3pVQe1-- z@es@KQdV+J^X1d(!{@y-Z})j8=hfql-l%@=^wC>^MWb1Za})Q=T_yd-d86H%Qsosh zR!lbY^7{$iu=v#J)2P)i40=x9yZ60)@Z61|vW&=v%G>81i|5X|r_a5ui~rv`?9+mc zdu~^rG_TW|Cq-J>jIHFErx*dfKcHW^_x@;$Mc!hTiSdTdS!6sg$I@rp{Nr6lzi}j9 zo<09Tp04sAKZ(Kjj>b4_b|K!pmEgUxy~EJevCb#V!*NvR@Lrd*1phNw1cabb+BIkO zjZx0oy;0bnH~r*ibo{)sMGkXNR=Jwp?^lx0h-Gw#k@vfx`^>RS zX2L>mI?JN0GOy5|EG)j@MMj+S_A&3OZN&7BJFLA==*eH@-eq_G;{Qg|x%ql|S$-mu z#`V+E|d=koT6m5&`6q77Eg3jM~Ld|@mTIs8OhT#?nqCAs?B*oRTQ17i;F4R-I{ z%HFRYiMZ68hTi%m#kG)kPCR;(*1ZNJhv?!<$MY9f;yruC2kYB%wFV<-!y>V(Er@%+M8vU3#JN6frr?f{v)Ff!XJ0vMXSTS|86Upn zjWUZdoE80Qi;+vdGPf`W%1F&>Sx95CO&* zZ^N<=x<+Fb(^?i2rLjeh7E57tnw|v@>D!v*W?k6Av)kosw;sT$ZXE3)m_QEUtL@|D2Ul!ZbJ59_HM6C>D1}z@V zL@jD#4V(S(ww_5AMf%B8X(xW2>&rU%q%oZ}*+NFFebI5XMa3P=$zjsQDSBWg@dRN30!@lgy0GO{~S9GsCPe`{2TI1{*L2 zJ}r97LwXQ{{DBw7Xptm4`ldIYVpj7Ec^|8^hm8E8wsF}UO%%k_SS*)x$HeSW-0-NG z20qH{c@L(R?4Tdtbnelcvn2DnT8|<)Vw(4#S#Q9<^<)a zyxJ&Oq@*Xy8jbOmk8qBsx{|{?B>09t*5PCvmVfb@A6dz()i^t6F&A;1Oj(dt@UM+wrk{}H%!Wl+UaS`VL|Z##|`xWwCHf*i9-lCoYdK8H_DM<8vBjKy#|u*6Jhvj_1+ z28r0^yK%*~kNrHuqK=NAjXTaZaW?z4;De1CuwL|=#mEn33+H6cWzFlb&vsdaUFPQH z9hr!hkYi1D?mh**Y1Q~hcltIy$#U)l_1i(TrKR%=EohqO*acf0EwAE4e&UT|%sFBW zeG6S6xqQc$+KMJx=fk*_FUx!B4{@bsZyv4O41=Wgq?WsiqeJ$-bDo$(1^+(z)R#yG; zLHd;w94SALcJ-h=*45*%lrhNdQ#jHYAAfd~e1juChA*;~P87phTfhIp%!bbWCg4_L_^4k=DMe)l5m- zq_am(rX{Z$XM3)o`3H+OV#Vb&6gB3q7Sh>bEj~r4+@+Uk(6|bFXgBuoxjd~-%*0Xc z`|w5WS!%m8ce<-lMAnZQ<@<16Wbuor$_}1jDNBsamGd0U!@@Rfa9&Gt+vaop$}TNv zVxE=7c?2@#UlM6hR?1^Avqk@UI~9&B+y3xL4Yu1SeR184#8K$PXxS7#)|ODyW=FzX z{vtE%Vmh5^;oB!xqzPN;t<;iDX}Z3$1VXhQDz&q=_{Lgoq0A4kgkG72-cYVAujP@@ z(_emSR7_9!=)3djxDL0pikbGph79ds00sNgI`$rg&T;b6%s0*HrRJ>Fe%#g~Swr+x z``~E)Y#j#VY?+6vKiOnyp$}{QHeMDlX>1LTbfYa@;fCq<#jPz-ZM&JMqeXO4opq!= zj6D%5J7P+shU}xXsEd2e!$NawoV2axWgnYqNM}7>T0^CU#@Uet)|is+t+TEOo*fvJ z_2gO>D?_mOgrXyj;AV&8f-)TG_>eD(iflT|icsh70SCXLE7&2g#^O*4li zCTW}~&(M@EvCKtaX5#ZZ9S1!{H2dId0DmgX{uaF?V#88aLkT+PN!Pb z=BCn-u;Ve%UKX!4FBO?X%#rn++{Wp6l+~ma6ZNKkNA#eN>8iJF7qyKWqNJE9Z^R9m zkpIeZTGA@tWJ_4*6TRZf*vnUtj@wGFE!T0nN-8$;N>>iVO}5Ni_AeVw_h-?&-W<_~ zC4X9{LnCO`vWJ!z!*MfTvWH!@S8h+_v%MpE0WU(3>}tZRdiKk$W_zSNqGkPRd3mas zN>>)JIeeN)hg)TAxVV%3>ce21rCGLK>$d9EI_uMMc2)YQ%zA^V7FRT+BQ4XO-eLVP z_SDKA#~k5Ptr{2eTDn1oKGrk})3)ZVH0S3$I?knKR@c%tuMKm3kOG@*Pd+~9t32oE zdNzLgD5)pNlM(0G7Gq@&vpT$WzsPmFu4Ve(?3>P7LZw`hHhQ2Z9lw2nkY&8L%?=;+ zFRXT*kIiw@)$@8xZVYJzYL-!inRC#SH5jMVpXG|Lw&p9ncp?dYw9hl)q*Zv&nvT+$ zZtQh<$GvI0Wo#mlxEVH_}Q;ZD$vqsugb9hlUns=Vnjei=2AM^Xjk7 zh54gf(?PprUV507vscNESE6V2Tlh*YO1sV>WFXPae~l5g)oE;#|BUb5Ay8(kI~?W0 zMmD*ye5q8#<@XRzyKtx%Xryntb&Vh^A7)O7c8om7<=d)o1~efSuKWTNhT>a{bIVXI{b*Ng3|NBwq2%W`Nnvq>u+ zfkJG^W3utEi5K~X=4v?BnWeKaJ$0X(Y}WuA)#&aVJG*HBT{8Hns3?j;on2~s8XR_x zv0Z<%e|y~{g9iyBA!fjb?CAxgkft-)_N?i|_MQ>)d|#u_o=DRd-x^2Vt>SUn-t%vC zf`w;LEP8WSt$1Fc!4GyK~^nDwn!(~)7?|Jyg@hic*4Qe0SL3>%Ib>}_VPlp6Q9xql4X&eb{Bb$ z93@VDR>~~JU((zar>(te=vO>j(^N|ud3rz88pT|{;CCAGD9-YT+VO+eIs;?}dFqnq z_ti1RwPkVT$+UifoS&3-UoyY(XV230RD)=su{&wStvhUba2+Q5^qu9dUKb_tj<5KJ zKG}R-5pxF{B93?(%<-PoYgEH7yk}>ah!s7`bpgliVa zDp5+qaM7+OD)c}j_=#xG#_$6~ZT0+xJWG?%Y4o5?&mZ8fJ>#aaN~XerSR{JkQHlHc z^zt35RL4ny~C)6u%8pkxeu@GQ6g;{{nq z{8u&4a=(3^9HqH;RH0veZ;*Jd*wd<>%l2z9&!49RUO9ev@w9*ayl3&$dCu1RDleU$ zK6P;OpJ@7Zd;h~FEBrSV&n4oyr;WWi;4Kf&9(y|5yChE@Iq#kKO&-7dy(8hf&NICJ z>yiIV^xl#C&GYV!Cw=@s8*)4k?`eV1ZPF}tJ?-Or2_^+bJZRq=`Qe_A|o(sNC3+}^qHpJ8bC$_=GA&$G3j>VETR*z&Ysxtw6VJKsCN|h=0Taj zFBbZ5kMNRX!q(H_{u|1BhiCpbqh~^40_o>Zi#N}44EEof{1>W^+}P*st(T4#pFaJ( zc8>WUEaoRNybMeWF({U0S6UibJq_&nd~?K}q$s!aq%Lc{LFAZ^@!{#y1~Skn7hwSV zpS#T=aL9jVkug7h{`4bTYTNa*JuBr&T3+L2G0sDtZ^N*!pKaD_BR>5nkusJnQRX%t zct*|>&fXSdqj`Z0-P}wpHELi%kDm8h1OJ zp^1KY(C8yF@@)D*P8L(9t>^w($iL=m7*1onq`SB=$|grt%90qwFYut9@xU7=A_b!w zTgAu~k!+-o*pyF<&2Qee&DA_HO{PfcsrSuwjr3-r-f%c-oZeXC|0BsF-WXvCzLIW^ z17RQIr`f3gE9Acf^1nAMw1kj6&>XZDxEzXN5<2?o-A>~gzhjc#WE5|Q*ox`+NJF_@ z2IEh@qow%3MB8Gvd3fVGg z6`n>HYwY27$J8Sy59nLe(^fewix|G9Av~3AR^%x_GcbP0GOXmot1Jey-w~O;c@v!F z1F=ENt}hrndTzdRPk5S<%TgpcZYIJCYx%3zFlt{(n2|1Sun6ZMioLx7Ok+oTT20n0 z#-Q1pxw&rhsG_wQ6?^sSIBBx5*6o`W$iS`?^t7>@!c)Fw3cSESHRwgla;P;Qu$P^% z;!E|+5Fz1RH{Qih^}EU;9~zDEWq)R8T80rOlAH~^egvQPB3txZurklkiF{EgI$~*0 zewszfvG^;}U`Q&|%oMSJu2^2qrz<^JTW%s-Eq&Xn@2oT$@#W^eSgk$2(hv%b`op~E z&Yw9N^_$UVxNR|53$A;M!>849$79fv4-U`Ud*wleyD_97SNdX`q6Xo*qIsM z##!j)U;S&r`*fh0{6Gi2c}GE>?Rtz{+gpwG9qP3&I$=;|#~HoLrsiM6s;fZu`l#J` zZ#)aFqR_fNaH6PgKMad%k;A_&JkZ~KzT8yQ^L_lmW>#CY#mwR*Y#iYae080q>!Z>*bPEhb_!xpv&t39Nx}=~)y;j(VLB^xz5|^ist#9VXUv3mehlNHP8)7X+9clP64kDTd@^<9xQ&va(o z%#9VrulAxQjO>}^Vses(gzv0U9xi;DlncKiu4thL?X4F%MFQLRp0iqFqbs7ccRphT z>Ii)jCOXqM!m5AVw1r*XU0?gk(zgqIt`E8%~PMwdPR{nSH zW9K^YN`&_Uprcri@tfJyWY~(jn{98$>XlI zxmx=&56;Ux_hp$-~`w;sahF-IWYi zYu`D&K7P~k6Q_;;MBY35Mt(l_OHI$6t46L--<_-Ju3`C&p_h*j)Ny^;e**V^=bt)$ za7EgdD`?K$K7KTQ=I-;S&u^S-lP?~PjG*tGvKLO9Upu{j;#^t(;{ER&nSPz&=Wady z&XN6@{ItYe*f?8e(LT|-2dYJKf3!T_s^W`-GA-wU){fO z|4;9K;#@oZnfsr;|NOz{myU*i@mxdwU-v(9_mc;uuN@A3_mPPW5PkRf^z#RsC+_~# z;mO^(R{QC@KXdmR=i2m-obUg5BIX|)&;OhIzjF6?56b`PAoSCRXaDxt_V*5Qzj^-y zcYp4Dzj3~Q@OB^KGk4!}xcAcG&!-P6uiviF%C~QyE4F;c-~Ow+|EumQA=Z8JXd)wh z@*I8a?pMyQNIi45f9>$WT?y~@+~5D+X^*Wh-~aCUb*Z1f|I*>m|2}>o=Sv6IFCGjZ zzx((1zk2@{4#NN8ME;*WG4-W`!Jj{Refj<`AHCdH_@1LzdFl(t_WS!EI@bKw>HB-{ z{?f7LH%{y4@4k4v^g{=W-@N~^Bjc^3ga2dx#_{$iPMP?|`sa^kuOHt&eeRRIaQ1%t zT)BSXc;3BUkt;IazW@8@`(GZO|KvgM=kNdK!TL-0|Mzh73wOVB|4Rq8kKg_0-y?^c&sh>HV`lF-!^GDuS4_}@>9)9oU zEmz!LIood?4?TJ0eC2%8<;%x9dGmMA`pMJ!2M;QKN$m><<*%LSGB)_7htJ;-{_caI z>$jgfI=yl5c<~(l^6Bw~qv0={+CO$s|E<&d2aaEU<^Hc8S^xe1H}Aju?nh7UZ=C*R z!=F2R_}Gyt6Myal27c|}g>Rod$G?8+`DGd0l+Q6ku6XCz@yTPEUw83e!oPC*`P7kN z=I0K`tH(NsynB3a#C4DF{UgQ5)vuVDRsG>9`RqaOos(-{J#s#Ktae8a%gy1xby~Y8 zG>0<`|UM7@a1nGl%Bm=^!o=RBjXzf$M=s1UOhU> zs(*Bjf9piQd!WzW{m8+_-A;ERpE*7;_C9|4@+)I+A55M({xdH(LOgyV=<&l8dOdgS zfXdg8{l+w-y^-bhW1U|d@;hF}k(W+6kMp_yjrQ*BJ$)DpVQY7J{4$sOyv9W{o9+*~ zcSW+fTlXRKYRoqJynC#2_gW4265cr4xgy+{POj*1U&i<>M;e)o)*{2(_U}n&%AR{?<^{0k zv-{JhUl(-8RJ>!j-(hUV=RO_=;^;?D+_)1Vs{Fo}U!pTp5OJ2Sw}`Hf94uWM{p68m zrl^0+YsO&)=&VZ&;JtG?v(e6VSOHran;nTzzJi>XZ~F;-o9ho_7)j`+oC#hHpSe#&Ojc#a-Qs^iQdJDdezZP#*S=+2>hi(B^+d)7ltvA45Z^VhPv za~@}OT}yGs6W7k+8&Yh?3%$r1`h|m1-<{Fd3d3Njj@)C6hKQDGLK*MlDu(dQ?vSz5 zwF@d{)nB-a*E~oDxz1s`Hr4f@&MN5* z>8zrK{@^m5I$KnZ%N^<5v~y{#+10(2VsmUGPfMDRgR7VTD}1Owk<6!gMeq5oHOcks ztPYkC>v|d1I}XkGOKT{=BF|xn5vkuZg@fxaG=WFgn!B3Sbs0X)>m<^XHQ7O9=hhYs zV683L$+@JtgdEb@2#a9`QC8Vvd2+>4J_>2l9GhIW#t!9J5ng2!Wo*YVNYW}T>!sKq zg4)|=S4?L&PGL)|gBRI2g2Vpw>Kp!PXHCPFEK#;dN!Dq2TeQ-HE<=ZaX;ju=6|H@X zPkWGEA8M8}l?;Qn+sh*x`|wD;{Ggs*iz-t4qc@#sChv>%3#VfK(BaBV^OJA7#7W9Lx08| zV|iJZ55nDd$99_Q3UwS@` z&H_mbM$l2r?*l1z7_IRord=$=Q?@)@@=a0FxUF3?1We3Z#V0(pS0fa$CuvZ}vTF}p zEG)$?`;E%Yb@(IQd_x1eq-SH^(c?85ltan^bfifiZ6MNTKGag~U{Upy)JME1b{i$S zZ%LD733>9Sm4kRrDQ`8KDA3Sq~Jx5TJ%l3NzyVI)~u*bt&%&gkU_r1yoZm9WMcpi zIYu`0ny-ao(EV_}nq_H02W9bA3!a+ie78>%i({gZ{IMc` z<~jJ8$u$!xZ@@3J)LMYL+xr7YV z>}9zryV9Fowk#xGxy06m1H1D@YZ070I2bi~L!G2pU+gkoj6ZOOHV?POo^gp5j&$5s zT#FAw7dM7C&FN2CrR|gLnDY4TI2@~K{iwB$Bq>Z=lM@oPP^#wkiVl0pvz4bCJAIsHNca;)9= z`f2pNcnVkXJ1+NB$(1WE|7Xu7FC6vGE_?o3^Ivv2V()h7k5`qnPENj8Qe@g9ArHj$ z;Sp;)qQB69LH(qQ_Gy!LwrQV5tdX_gVja`fj3bLKGV?yYL=K-6skY)m_^as%&s3w9 z>pu;`LofCl^Wq)t<_lW#iL)d5rgFKb8O}0HkUsRv?9LlwRrs>A+#HtWAEo2;@Gc(| z^R-eZf9R8~mbKf_5UEA=NGdDXSHDlQBDu~CqM1cUAQ&t3R~C%-`KGma%kHh^Ud%2h zcSqNiL+6|2?5!KGhI->Ao%Nb$hSMyidH$N`Slm*%b^F86sH7Ducv?9O${@DZXFPGl zqOL77FpKunE5GH3(1Kj7Y*cMd+IB2lrqA1HM;_TjwC~3IOM{0Pi%Qam!g~&^zg|u*9>MQ z`qW!J!$6BPvrZp4JEP`@J#*#Thi9GgrTN9X`W{o#=V7}cMh0dL z**M2i5*%yBC_85tX=7kBuXG za(>p4)^vomHt@#seY!RppRLWa*V#ogi5jIY^jfHWqRJ)Y}B11 zb5q;$oTKg?$#z}Gre(hLP1m&L#d1@9#;0l9_{9NS4Hin(#_XZPpS%Vq z^SbqwKeT{UI?;dqFXq&*P2<^6qA?`NFE52|xZpy$!j;0dIwKv+L$a~eHXX>kMzFkV zZP}W}**;rCC!8*R<1$(02uOzTyu<2UBT9cY>t`N-{(1@9uI%=|b31EV>~w8L{oa|F z58~m4s$SrR3%ky+y$dN3-!)hF0*9aDWr5a>k?{+!W6{2E=A6Fl*MGW{iPW{o3~R@u z${|2kUqp=1P~*U~sWHk2L#AcWq-dxoXlmQt_LNNLY-7WP z@b+ZIwzUg?eWwTAwq0L*Ngi3TYQ4uJ_1Q67Xm78`who)>REq_c_^Q7aJ=j`b4>NPx z*0(xF<<<6mVdJRf9KO{^THD&#ug}}g%`WZJv?CV|kLsw!B-a``YNrckjEm~|3!6zy z>-3nNanxD~pXEW{NqH2jWKCkWhImYYxHwRQKAm;&1x`7#{8t?3$$600>DP>=ndF|= zbES%aEoel;}hgz1X%+-)UVoDzng?zUloat7sk8*)+z*zOqq0 z==<`T?J_~WU~M@fzS%2R#(P?~T)weiTvx~bd}@1=vMxUq2j#2$l8&rOJM3A6n62)t zhU|2LANip=?rEo#6>3&LebR51Io=`v*z?Wt%oswBz3^zXFjlY%>LG8AkoH+}cF$5Q&>^nm z7dDN9je*&7)rnuRuu(DF#8a(pC52DJkEU^JI8 z6}pavAjGOu{fA>!EQ3p$r6&nwk{U;60mQ~Pm{li4*{zlDYSA5wE@|4PJALyH%kt9Z z1hKYJxbsu<2?7+cdQUHA_&_8h0N zY{5Fmlwz1#`K0*fLG9G2jkX@Z|Dr?xN|Ilm8UVU7g4qN?_d7)6AkQXmzI%*FG+3&+|&fY7_ z<7$M3+Wxew?G56a9uM`U7u)DTSNicEZAHYQv;07h%Y%9%^+MfVe)dha+N8>W z+Jj*h*XMPH3h$leH|OVt<_cZ!<%ea#*+9Q~B{k-R9KF(bQL>pm)Hdp{#a?J=VM)XJ zaN}hCu*q>A+r5Y+w{P^-uU<)0pN=8`?(AM}m&1ziacd0IcL>?ivwf0Cv`**jsF(U_ zELKCQy{#Q51B#YKNKB`boF-RU+iN^hKlbJ!KFE#`x(U1K%jdFF_=N0OEa%8Zy|>f3 ze&?>9(DsyVWicLpq_CR}wrSkD*s@kujKxEETu5nOd1%^>>B)AqI+vWy>dMzv=1&@;nQP?K|6PKTYp zHp?#7VHT3My1LzU7ke0w;jv#0J=79Xv?%tj7=#)9#-(C7y`U39`JQI>d7tEcSEunp z`LY~~L#-LUy?E?ihF(3ZC<}Pz#=cK_7W+IK{xk@6=v^~5M6Q>~!Q-;nvO;$$GJj z9cHx7YZ|3PfbGjDY%U(mQ}T^9xwEK9o8ha6uYsib~gbxZ#HU$N{logjFH6veY$I2tk{N+ z{NMH6xD%hcR<0NN#hfhY8l(Q2r_iSy<9qd&dt(yJ_0J~SSZrJ8p*(RhsMs#k@lM?C ze9^x8kFv6;jJ+gV@_{lrFiU7&HjG)y9W7JymyE+=5@;F9p};QJXEuUVzcW$2Xj5PF zFD{pIkY@sPF({tA4!^R5R*bg6`#=z?Jyu{u^XnYJs+NQC7 z_>ev^(HxfM^v2P~lKdM(l{o58Ti$ogTvRIS`hQj}H~OX*JB-Rk8VGb1r!7&-YQA+g zr*3TLY1ZY9kc<23$Ae^sjK0-@a#%RP&YT4#-xeb|8o_N?_8 zE9}8+BYjK{buwd^^%Xyjtg(szircucbJti>hy6c#D zPkAQX@Y-j6r+3<_A4iHY`eun*#fz={7)seoZ{7@(%^{OIuf+4N_hg|gV5{g487$`` z{cP-K6Iu1B4-2_5$hQ1l#1`Lj+H7si7RO}3Gz8L@KgsHwJ#7TGbacASJh{MxL=J`1Z$PPOr-Up5aRwH9G&R-LuL7=0pD|LL@h7DBGh_+ zKBQyUWlkqI9`TwPle41EiF)dbFY;SgsM3uc`L=6a{LcFR_$m$!14oruSThuh`xsL! zkjjJCHyo;`bz6Kuhn6hrw;jzcjY!i$%|;`-G-A`PsEk$6b0k2F*sBiR*OW+O~0Eyl3A9`j$Q8I$PW5&f_I z@?&|*x~*`e4?JnBms(oOF)gu~zHp@R?g>F#_GqTyn>=w7-^ID!tX&sTN^TNk2C1@r zUSNUR`MWq_N!kq?dvGZ$ca{{Up-Km{yYvZ(v4)0h9zyj6JG!Y$SFzCb6|=eCcJ3|W zGK@QPBy0|vg?tkOAX!$|8=l4%$gV``HN!0bs++B0)CkH#`*|y`u*U~GakZ;?a;raA z^;~K0NLO6cfWG*Sy}Svx%a3i*#Z}8abK?pROo1FnGnPA+_UG%?zglTjU;3+^ zwcdD<{^hE!cGRz9)gp~_%koTf|L#EYj_1TE>d8 zDxKICo@Gv$#u5^j>8TdV#Z{B_-h3$T0$8VbZZ81Lj z_>rjHe6^VLs~R*Sy?E+=vOd`x0^X7CI=n0rBI;=a8%M{UVqP}Q_bh}}{D=p?{T<`u=jMi&eL@Rg{19VI~db6YPL=KK8&F&XR&7@ePJsyeM;yn#%YSGI^ zI|%!0?shuA>8|f$TmI|U3g}37ezKRnJjugJu|?}N#K~HDb{x1Q!+R&x84~bsS}#o@hfq zeX`65KfATHW9(PwV4v$N)b z=0j$FGCEws46n=NVKsS|&)7D;VMThRPxizSYc=C9O`#}T;sk87ll~zMMLzW1C}qnh zUuoZeB#3WxBgt{mBB!_IzuYuugI_$$yEH5^&Vh3z1l1si@8h>#E3KYZu(!v@jji;E zg++JqjSr6C8_dfZaODL@Wf3)em;I8%i*db3rBg8j6|+iQh+*`JY1v`TOT6cZ7>TDL zS`Xxrf}gGP26UPu`nF}3;*KpOyw|;LGSsz?3gaa7m4Z0;_ei}iS7`i zLDz(1_usX7UHCx*|n`b+3hZ$r@4oRMS zcog=Icb+=U*kK8G*`;woOZJ3EJYcbM<3zIz_KFc#(_)$y>RcY7XWoPE{NTHC$6E4l zrFhA{P-!lhmbYf7P4j~>hIjK!_7}PIqlo9jnUKWp;7Qv!bi`avY{4S+|6v9?2~#@{C&g=r6{?R$Xm}wU!~Ou4DGXBnGec zJd|yVL3`zOvwTv0@@-pCiY4U3y_hqXcji}bY#Lk2808-_*xg#~dA4nPbPg9iXCJNe zR^xh^xhONb(3L0Sp*8gS&;-xRarHP}E|#XX?^w$^i&k<+9%gYi!Z&n^>uj0^c$AO* zUJ;9oO?>0sII->wvEQ=9jpk5kmB)&2ebAirSV{7t&XH^krDC?Y5C435jnu`bHv9o4 z5@cS?9!}-0p?40PTH{OJW{FaI!=oq-O*(fjtxdUzg?Q7LO@>Gi7uzPuxrB_@H96ar zKwnKbn3a=6V=-b**ww-2irzi*pBs(7w#^dzC6ulo?kXZiz>>|e2NL+tR`?Wcd}YaJ zWoF09$4XgEyBORzJYq-EiZVQfhgL;^Y;es@VudR$&Q`5^e+?d$ZU){s(K?`0Av~|Jxqhy7{>>|_ z#Uc?K&-54HNR8E-m*y3GFIsp)tn_qcSC@H08QqkmU9*F%X1U(s3msPjA%>SwEN0ET z#e$qxsi!}ip^I#+?z*lrwaDeC#>KO9D`9~xcEP0&%gS*O%hIA4tNZLYOJFOzv4`%( z1q)?RxM)MxWpDAKKWLQ=$gmr+!G7)4#v$J@Rc>vC6w4pe%7^)0c4UctC1bb)!1CjH{Dvtf=O2&o*g|qXCa5* z_=cbH^Rkg_ehF>uaHl=x@<9u!j$0~a`4CXExSmE3Q2)xr_?d6UWj)y@C#ia)Ar1VA zi~8sr?j6srG}T^Tp~jQrBnhl_H2w8Rb5>R6`1Zqpz1F`zXaf)US^L;Z-}uuW{fp-M zs}KD{z^`Vcj~f&^~|BlIBJ;dNnFR*_C#ZjQvI_jMGP%HYQ?-Rz~Eo-Sq`B z^{?01P|sP%GTtZ?mIrZ3Op9(KH~rMpBHehI2Ft=n{Mpt|94QmgP#xG>@&gHBIL+2O zBzT>+`GODfIgZQJtjHVc$+`Ntbquyl#(P_!v{2F?6 zSZQYfFx5+Wx`-gR%;o5!WVsAC;%M0Hm5C2X{#+iIfL;{hPp)v?fBIbSI|s? z8tRpGVcBR=B+^OGJV%Oqxgx8P47)CmnqiTDR;OIM^`1BFSsWiykc)FX-&l2_23cn~ z=_W$RfHmI9x3q11bA%6z-+o=$|7O^zOn<*5;TNvE8p+45LpGx~S7{dc@EHcJ;cqFn ziw~IjrTb87rWZqLY^zaNJQp>M4&_)gnMy_eeiyxbp_kYJkoZmfq>ZCoI$h zB$Hii>08^_sLCoYP0?LN;CFhh9h~Pp5uQblyVkhmNAM%Yr4gbaK~f0%WPS`Xy$0! z-4=IwKYrqEBdFS0Ec*N81=5T5&aFBtioX!Iz|ERokWz*fF(;3YzteJ-jnmkmt=14( zYg=V^2g_8@#WiIcBx5{tPT6^LKZ! z-f0$Z(o;?PwUC>)AWLdl6+hyDZ~bF(EYUL`(40o0OI~v4=P;vRy@dlU(k%3813x)I z`?RS>I^vr)$srKS?Q_jx3n#E(Yw!C+p-|7oLjRX)#3-jd3Nav2^eb+{a6QY)`v#lY;P2l&1r-|j`_g9UtxRW_TLo^D3hwTBnkQpX8j`}6@DbY~99QUC|9Rg!-1&me z%`vwJ!CmD$LJxNIX1^%2uP55nuWcU~+TIz+SfdudS!-=wyynX!(n`4ubJbG255yXc zVtRe^p`P>E&{#<*>(`$i${w*q?qg}*3Zd{&#+w)xtK&(MV$Hk=9jK^bVN=?SNl?iK zI#-unY8KgPmUgkrHqKtrlLkd9e@rj^>s9@m0%xU&zDXEU{Ft!f?nAaw&?9n+K ziwsPJZ@)t;H(X;ki+QDyB~9}oDQpdQ-|@iyteeHKr`g3`y0fgB;X9Nujm~sT+m7g$ zoUTziV!U!Sq|w+s36tnM-j?&q3+mTvx?l$uI6o8XodFm1UE}BuSywZQrOgHNul_@W z#%WYWvmbvO3E4t3kz^|dRfD$ikB``V;e0mFLfVKWZaLx zvnO_pb+rja>&`r322Gsryj73+z_p8JC}{=_{lQTm>7`FzE$)0nYc-4X@<@DuB#fHF z_3WMhAI4X4O%BG>iaMu)}#7-F;h&68x2#A5oyGClgk)!`XGPw~yuG3h9DYK-e7 z#X9KWCH5)t$rsgSUy?6Q@BDaI_4EWodUREXCh4CI*3A-FM00%Md)wr%50dD~LRWZ; z8D}1iIQd#;X+B2VCvNAF{K8jxl)d5Nimzw=XLC5hNLg3wnz2J!zdb?AeyG4UO=%2| zYRe}y&FlQBPxkqin`q|0vv!4vozu;?y^!u5R+9aHR=sqGsgc8VXbf@0lMMZrb6F0; z`htD&ff;_$-FGax|KL6m++uHchTRo6=knx73(u&m}J{KM| zfPs0Ic`c^OH`>v-4Do^RW4ksmb%f6F5GOGV()FaAFHa{oeCa|9|C5viNAxS|eABla z3?FTl_ekQgS`-Z=u)xA^x&k?}V^IFr}5yB1~GB4;rz9%Lk% zzjMpYixi`}`*AE$TjcSB>-UQROxG4CHcFKl;soiuPBu%8;b!SQThXk9H_M5n=U>Rn zcJ|ZV9{=!Fe8QiOmNjrk89#}l;;)=@1mCo#O%bFmPt<#L^$k<(FdjB4mzg%BsaJZ% zx{HO7Y2Gpf%a0J$3$OAuJS=R+tt9gyMxJ z@ktx}G7^ihq&|6=$g_09D!PR8uuzI|Mi{O2LNy1D|bUEtT{(Po?h;EkHHGSN}XJdZtL?$%Vj-!r~%ok#;{I3*t7I$Z} z4p#cp6Hc;A8Qt8uXNhk)tUuSvFh>N+x$>X?7NJg0nmNX+FzZSuDg5g{GUFwjp|01g zq*aUln-wo}D3@VimxrP4uO&~=x!#uRl#IP*(ol{s^=bC4)O!f7)OFWXElUiwRnMg1 zKlW)yf7*-3S}dm1)i{73W&AOVthDBLoNK=k3rZwf>lf#+Dt)o61xNMYx)$ofL{E?j z;hm{GdGcuUQT@`Jb}_h~c)To#SNl)eA=s<}|BKAV4*kSuN7#`^;9#Lms1>8lG+-C2 zX~82h1PtvPmHE?n+lXPUTxs5HyFRppw;FWFcADTEeA#J?=_-ivLV3@n!dsotYTgjD zk}9Y1A5PFtZ}lsJS!mIoX4ciz&fm1A-E`xpW=bURhCA$KsLSKwp*J$EV^uuC1SNRF z&v7AXwxKXhn^nXJJ;Q~}E8{vQQdu)j(uB8pP|T2K4AgcD`{*e%70dQm4vQi#9Pr7p z7(yyWlbP4_qD_A>SPnO{YK~YG%~GYaNSr?OJjt+z8C@Y!Nf81sqXU%W3)$ODqyOXG zuQkGY^GGbllAd|6#-y%hHn$5qEovhZ+I#A(vvoR@lVb+WaNh^V)e#$TGiG^KQGJ<7 zy}V$Ksy)p8?P<@hAjnK_pH}rlzT@Pns}4l8ga~$)(`<`4sH)Lu5}#riU%`w$u?`M+ z*7=H-A_*3;s9Bo3);%xs)D8EI8OrwmhU6yyb4X0)2`ul4Q5ke+@R*$*_)_+9G%ufS zZ~DYZs1~!!BW9xJ@T@HV7$18sHsl*0mYvjs3A}xq*_r+D#*TQh))6s4GkxM^*{AQc zvJLMdoUTO*ZM2W8$zcHxti4FUcu@)$aoRZsRzl3$d-d1}Z)0@$_q#HU-H+W+mT!sy zXHFsj#{4KEuB_cCBwLhC=no+geenku!v}61RThu5kiG2TTDIz~SkH5LOwZao)+{A2 zHRJ48LYh}&baRCI%r`i$4@_nahTxG;9D+}CZSlX^FD(3FZ#b}2E1py4Z&GB_^cO+u z@M+$<{C|p15Be=9)E_zZ&wGta&R(X0UeY0-l&k5$L-s-{2E!`eluyE5iFwR;jj7Fi z_^w<6#qvpcSq5YWeMu=dSVPmo9{kS2=DXE{1suX@ZH8R?+OeXn&A-Zv6F$O0`11*5 z>?P4&Po#A&h?9C$gT^H0b9Orq#u*Fk;u7}x3qyKd5t-+dk(9S%E)J4!6l`9ZcX(Rw z*kx@TEi2VuF^=bsbQV~|U@W}TkfvtCdc%b$?%qD%AHDm-bA9C5yI1aCJLlM)b<&*v z5YuDpX%YHaI9&KK1hj)f_Nm1hKBgi5_%qj|Hw?53MV4y86Rro?=O45GoVegBkx=Lap38Qa5X07-WeSU4v-gH)K4=Nj9`I-(PK1)bp z13nqeSp?;IhztvKx;7ps@+_P#yKp7@wpMpzk^Ez?k)|0a?-b8TQYS{zgay2nPUVf* zZ<{wP@jyBIeDf6zw2v+7mU+tfWMegKn$gqDpBBm?0RKs%AKv(+m-_nb2>g|(voX@1 zrFNmm^ZH4;8r7=A+7WCZ2TL%sr*#@p9cipiUzS*)QM5Fh3!m|m^;w9=VtL!~y=@+)vn4jnA0_XHBPhkR`SHFy;N0!sK5;4!a`hzvkx7IVAcATdAQ<99l zDvs+5|7`bxY@X;`N00E00lXOs!F`-2Tmz3#>ai9Lou9$ty#dH)lX`Dte;^` zT7ANhhLB-R?0_Yk;smDgYY}Eki;k7ALN$!bbk^fSwPO`cSY@3j^xZtE8B*xxDMvyE zPWFn+=JKo!y~a7mNw!Bynk>)cyD@-|Sdf*nN7kE>Z)7J!>(~$@;8wpopTU|%>pb9F zIh;GznRRuQW{3O{U-AG8(r}}Qxl-q8&ez&9x9WVEhoD?0XzrA+T05F#b=qQ45te1y zgY*8%>}ptI&*cSr$FS>ob;bwZ?5j=o>w#=N^Ner(!~%7ODO8F~>>#Ba#dpPj*#~CX z+}eJ!Nq5gf%ZIjO7#=Fq+c>EA&OeJEJ;8&nL9tg;>&FUI}yB(a-#=*)VNfpQ@a- zG&K8-#o0bdF#)RjD}QY(3&hj(8*}Cj9!b;UY?fZfVQJKI4h^mJRE9+xZ`d3Qc#f>N z>^vx+(~X~bNssYP7F$**XU^C2alC_!-f7DQ(#mhfr`Xk2F}3WwY_@qK)I@~b1Wm`A ztA{R6#3qO@c9odH&^f#LhCX~j|FWsRS<6Ot(6K!cjF(EP?|2KJK}O5*#+DC1D9=aQ z&NF)SsVBOK7JXPcLT{~Q1&br}fuemLTdrV-UP4%VIICqVuVRw+kXFy$MlR%)mJs2iGQ4>#1=y3s~a%>9`Ot@&x~i z5?3umj?+pd2I5!0YP= zB_mh!_GKk{mV>nMQNq59<=LNy%OA8U+AiDLf<^3uaT>O@Y)fyg=aE_1H}vyQ-%7Ji z3lhnRQxYW^u+sqPW6CpYaxRn@M&LKwkBUMP|QhheP`0 z1%1%wTI;d6a}2(X;EN_Bbb9jAHC7uZ9eL;%{^1#CTYAVRH!yCidaZvoVt2@~mG{z{ zXNrQAheiJFSVz=cowAIhd4T2fao>4Isov>;UoGid%Ob`)kCHgAmj9Eaykq#LcDyUn z>=)fhDcT*Y@7B1k?GSUky+{32IUq^ZCM44=O&}0D={3}}D(dhtFOzPM++;QSyRTR- zlUvKb>Ac8k>oPzk+iw!aJj z+2UQ@_!Dp8P)?afH}xLTuh_mKx2PX0%41ntmL6t}Gn32uEiB1nbk37dQzQJ;9A5QI zYJDbOZ8btT8C`; zS5KX5sVr1h%D%K#ZYgH!>#D_map_8hQN{QE`t7R5qRpWAt7z8iu!upT%~m$+Z+O@W z4LsUd5)(U8jUgA}TW9rn#*0};_lsT4QFzw~+Of_q)Xsj{frg#=q;Dnl@7PAbzB`}d z5BjS`5{;Tg#Ij=0C=EgDo<(X7*Gxj0dgj2@pyxQ*9D~&S#zP@oyoJnk6S-y>A*l4q z;^rOklz(DUddnnwEaq%qGaBU>54ny!99@c?P;X7U#bg-dpEB-v0kQCdmo$1XX zX;{wj-MLw1VLY9Rpir7!w6yS6V+1|*pZ{7zSxMd{PmN*PR;6Lt@lYw#4atYh3_-rl zJ~FqJgy8_I^h|^DN%gJM%rW||ZFlTQY|)Q8MQk1m-NqW_m;4VJoiFxT(yci`T)56V z_{fr-Waoe95uFLc)yLk>l4x5Q`()jV6Uwt1rYvkvFOJmL`YYmZyM=%W@F+a_3D2*n*-=?OWVpqs_3;h?Lv)i zYLrcQrJCdEtefQa!=k>}M+-|3)meR zuvu=4uj4nyhoJtUiNkqb>tT}3%~6!631l`h^RFX)ru!JO2y~Qn?Z>!zj)!Zf)~u}l z2aw#p#?I_3GRCt|p2QHAA@*@RujcKr?Zce*n@dz8+wrxlEytoKb5>y^#EOHVrG32U;3 z&g6wQ3H5bdGl=o|EIE9!*;Sdg%*yJni?fgx->$)hZd=>0zMk{_w7WDVORd(^R!Lr8 zE`fcX^j-aISz9_KDeP=t*u@cAK(t&2U2=F$jRGy0CQQrd1)E?VWy^E zIiy_Oe*US?&`YyR%Om(^TP%F2H zbNRG8e2b5~&>ri=roBEf+4jm-=PC&`b;_Z>+qxLH!xqXN)PfVBE zj5RC@Ba9p;V`t~2jzbi_)sD&e1B%Lh=s|9>)wTF`v_*|+A6{!y%hl5&#HZ=7vrlTM z;!hc)`EUqsro5R}%)?!%hDwYN(RAoo8dgFBD5gtx#}(_iR;)S}63WMvESM#g(w_7% z$xh>Av(0?aHGwcEKW^(m{Yzew(p9;$ju7CBSg3^M%X93mteI21h;MDva7%j5lfxeR z7Jat0b&*i(ilIk`zp$2dP!`c`kY@=>xJyN<6$cvt&smuK78UhS5SSl8ylb4>55 zjJ?ee^)dWOqt7I!(-4e}ML4FhJiTkDC4b;zV~{#6>V;{VUe<0aU6+-zsP))~W%M2| z$;;A*_Fib|IZj;baiX@f(_XPWBvt|)Su>0t_0o{y|9aJ5D7ikMc6ionTEqz@yV_Ry zC3{vSlN|k9J^=I9o4wWWJ)A4M*6>}l)`w$Tx)MScizDGM&+9{LC=7Y*sZ1OFu3hru z^s?tw2CooNBdfK|zBC?UYEE`}M~P*9#>0);;oQ+#*Irg-b9%;~tjXT+$)@6b{b=3x zJekI31N*RLIVkoQ1=!zN-11TSPhulAoM==Iz1GTTCqv4eW&+s1JbL*<&8%^ZN0nHb zlifCNh?}L9A+2}blUCKTb}ZEL-8^*FSS>!xORXVw$=@;Z>o>`v9k1pc`5m%rGpWPs z;!dMtJ7{WXGziY-~tZV6cq1h5ld1xb7bKae4!@Dc4c`=`j zfqk#Hv|Ij+Pw5jv*-VRBmwl@Po9aLV4*hw%!j-Y^dhvgoL|w>|dg zt+-@ew({OpTO^nL7xj*jSf5a@wpPY*xudP|K7<{s1YRU8(()}S^VV9%{LPDt4pL}Z zH0Q%Kgi?8cZ0Lp3m5cI;eM@`rSb2KcZ|=E$x@~b}2u*UHDl72D#o>HIezInJ(w33z z(Ia1|(^jQ)t+ns#Sbj{#BrS8#o8|Jd54qEvHVr_YWHDwC6weU~K_?{N@>iDH?taGH9TOMMQ zR%E;Prj|O}B9%23vSPRvVT0RaK@qYz;p1{nKGz0na3%ecn|F# z^=}!+zOy=uR?`wjV^aQyI0WlQ{VdKS^;QlbsoLT3(DNa!rxr5i>1={p7CX{$StXu# z4LRLDYm`~w)N!R3O3;eebide|9`Zq0b43L0LaaHiqe;?7mT6bt z|G$Lte{3FB`0EDE|>-xGPB-SOusz23PD^CB#at?{z^05>B) zh{QB-1QIl~6qo7^>#S#6@zHg-Mue`-6(<`L%RAXmhW51B66?leerdkJLLb)PZDSck z!YHdS7SkwJj33R0^io78 znSQH1iMK9~oG|RXQf+Y(cC&9|oPLY>d@|3@`p|gDmsqZ3nMWO^v`C}2hC!UNSIO4( z-5x(&<&c;aqNCY_KFacCjAavgsBHXYJ{9BX3JQZx@K;x_kMG+yGDrM zQg=DAO+;D5=e9+YPi?N~2aU}^u(xegu~^HEgF;&o=k-Q4wmRzbXm>r`n?m1_o{koa zG23}M;!4?^588`YTnLqU+j`BFt=z)watv~f39E56q>>!7NtxX0a4m~Up0ar{$ALJq zy=X4$n!)?6r>qc7(lB@yriq0y3WxeV&G-qkeJ{@4Wi?GHg5^RH-BLr9WG`EGBcBLwGj=UF|Uher4rSMTyloz}D1 zL9H63-{O*&c^8+`t-T+-$lD^}OrLD14~dI_W7m7%o;2u8sv}ab?x#l#Vra93UWcdt zwtV3at?B{UvxwYP!n_Fu{j89(NuT2AXtty;8^pwOsN}6m#*}Qb*TPhXMomj)cGnT68J5w=|Q_W*z81uIJF7MYM+$d&91ZlFU^ga^euoL!~(vM*aOx%=9Ei=Jb4e z`zm{Q_8F?aAq=nbewGZ8%{1YJt76tqIONs5hOicX`zA)-JLgM%!?_Ar6)9f6&1o*O zZ{^VUJF%91VKhs;mpgp}lQm^ee|@$3UZsLuEGT#6hF6uREFPlpE4R7_vM>ActXw29 zHnBGO;+YUhT}$!obLycV zj!DUS;~>Q%SIcBkUZgHl_pC?erzC%++wkO!=e7tXtk&eTOK|`p8odx z3o1pttbGmruB&!BaEq_4>3LIh$8UVc_OfDiqIK$OxW45<*pDNzFW>TUHq6T2V|~}! z^B^Rudgh_^Du=2nJ-x(bn~ceq?obzj@j^73A&R>@El|3=knO-r@S#^z_`9{Mt;PKeFZLJ?e zo)>h^7M?CfWy!v|Rt+GFwB*$@?6rrWK6yClWU@pLV;Xn7b%h;OpKBjdET^$pJH}e? z<~|5DD~44_KD(EeVo7@(fZ@*Kp-NL$@Z)rmGTuS13)niYivwlErLDM%j_&;hBA1EpF@kwXIfrn$0Ff z9Zx!Th5RgJKMj7eC#1Bxd(lRcvGI(>`OuLZ>F?bvld^t@4~LL)<_NFGqFQ=p2xa$g z@hy};eG2{Inf0t&jheS%8LnTE=20^aJ4u3bk?Go1U;I!7`h>PsgPxA6QuMGnPONIO zyVtc_Y4fX!+UuEbr@8+!W;JiF`9j^t={#@|^$Q=4ldfX$9DVzp#hgCoO19L6q|@FHEY$!JmY z+BcqjI#SNW94pUSL{b0d8pt+UtJmJ^lZKEe%H>fjPJctg+O#J*c(!kJ^*eZJku+unLaV1D}q# zKiG4sJq0OV$LyqrXP97M$R_Ke03X}ES1)LW7azLMna_Ayg@{eDYncjza)jozRuifm z_B>^6?XAb+<4QZ4 zY0m48z1gq%eV@Fpm;P*Me6hfQY^)wZ7e?dld-;1@wX?+w)2jmE(Wr4i&uV*q=xJ2w zcDJQcG_w@}`{Hi4S(H8ZsggHG%fIGG{j2jmd9ZH=WnGbsNm$Vw%$rFTBN6I}yx*0E zVCOyIj$!L@&*=M0j`x(JioP5!F0nhtLIdWD1Mjr7Exs{wyf`1?pZ0Jkt)sAo8D{6# zysOHs+B7B(8MRr_$Ua|7h6vs2Y;kEFV(x4ft@_D^dceIEikV6j-z zqQ_O$9E;7PePf_cPl{1-AjeD8AgvQ#^7|_d8GD5*VWW>!8d7_cj;;T(dF@<>TbZqwTI5zQEWJOR*SlD|$vvXHy z*^3ta$*Aktvt94dhlug{nD=96I8HiG z^{RETW5HU6%1}#Mm>Ie1Q}p1$<5dywkcx-i$qP|hLUgv#8hi3M`?Iku%PK8-cd<>@ zB(ieoldhkw2;Qc_HD25M>;*MqRrLXw+{vSTxsmsL|;e@);$@Xid}6UH^wX+dG{1?m+R=Zwt*VL1DswaBs=A72##Nywf!`3Ts)iM$oOhqY z2CuCqROY^$6!tN;tjasSRzq-t<@i`Fq&Gy_9?Gm_QI_>-8*j&*$GkVPTF4IR@P|DO zESB;6Ts;o!-Sx&SQmt(Jq#*wFG$u5X%p=Iy)YYoYxF~jI*V$=?p@(OpdUkfEQdZ?$ z(Ka9Q87>g1okjCFZJn_xW{>GCWbG_AFT$enlhONX8;$V<^39Ruc2;B|`!=5S^guwJ z&jz-bokS?iyISoJeKP1JKOT_L(JEG%{#7f@;lz_7y&ilHiSA*_w9BHHB7)G2kM;M| zZDZL{9ExrghNbDDg=Lqu;gL5nU+?UMoDq}Gnvh{dXIGc97;fxhWA9KRS?#ecYt^1& z)66PvS(EfM&`z?LG~?r8Y+%a7)*Gtb;XTBP%oyTHa z{EF=&m=3cAn?spamJ|W8DN|=(Hs+mPy!YOBI`+O;?ry96C6`X4Y_x`@y=&|)=32Jl zrC9h8iFnE*89&R0nU>ndo!Ln*d$kYe&KkkKEMNoNZLN04jcn*zm16r<|F{t@G>6sv zqK~C#!B9!3(c^G6iG(=Jn*7hEMK+#7!>jDAO6cD`ZR3Vfx$ua6WXs*|EQ$*I(&N31 z>748&gj$~FiI#psJDig+t@%ys{GS|h!>R~1|LYZcvP$2!EMyZ4yyHPWg&CyQ*T~qc zh0M?Q_vCGBOyioB^IH4GNdHA@I`TrFwt0oq=c`$>qaAtWNg0zQd}z)kEg5|etN7SsjI9W4Z?3QMuuz8N1)q5k zORGiID$HEJ`i91E63hH9W}(n}#mKIc-R#b$i^9%gOFrhcedv)s`?X@b`V?nE!ndm6 zaCn%xLZ*7xj9ZN}_SnYCyrd~~c-qfry{@{6`8d+N1QE5~S>M9xI>}^?8Eg-wGQ~Bk zr>grhJ06d(jcAlOEPCVHkQu7!Xio+mWkWi{4UW(npPa|Q806UN*y$+5Asd3p3d^E} ztG(DtFC1;`WqY|3V(vrCmisJ5t5Ys~aM+_kbdOSQ6})p~_>df|I9U{P5fht1LKX(nI;seHw_ zFdZkG1>@-02>DR`oM~csae*U$^kW+fuX?4K6+D5&a151X(-KFWlN(=S0gKbPh<4|a zG~Uhs$!13=#lEpoX8-u!{|==p>1tu`P;#9Y>^-~L6G~MvXZtpH>&n(`&EPoXRm}JR z@7gAn-*G>#w0E^DVLA(1mFIEwUC;2YzkLYWFC&WPVi}g*^BdiW&*zxr zVwh^MI@BmOgk0Xw9(uY)D`Zyzj4#{7^s+`jqsq!y0mWv7A=Vgpgf2gelaW=}vb$Nz zKA9|wT{MxfSj4TO@0u-(v#;FiIYzb6RkqTU%}{`9{?89OXkmR)R0@^Rt8A`4R`*QA zEVbYN^V{rt!r#-JjijHIe6y{l?K`d2PWKsQK7O#a8EExr(enPf{e8#3YGMtcKc+N` zR%_r`pDd}Okgw8c!@XiLZOe}XLOaax zM~1SBH&wKKTIO1D3t4`)?T8fCuYC;8+wYwpuW65Avq>D-mS?e^l+c`3?;$>v^$Bl& zRCz-(`JT!8esHxDgLWLhLxf(|U4*KN+O)QLXJ7jAsS);kujl94u1|K+6P0N^`NnUi zt-tdjprszk96O3~I@gE2vC7^C^Hn&ghA?lki0rMBu!@CcRX#O#dDb{>@hFZt$ER?T z?R;c2=4_RWQ+<+F4RXy^#^pym^9*QNRb>-VnK%(tT7750@Op4W{RDqa%PFmysVdoS))lJu5$@kb9>Y>ki<2$8d@ zy7)|Xdi7!rAA0|s8)HPi%27S^uQHP0oc?0(I_>GDvH7T)x$#BV$XeDrY1-M+D=ueq zF$^(d_1aIp^MMsfCaa^{&*rQXe{;lEC;VtUcDK?j!$`owoj_t0sNMEYq;HyBP+4W)=Ua)c=W_i0D;YTyN*j1S^pLg9s z!7~1ZYcbXmKDz^{*VjF-t7qZ0_>6BwVi<)ETQT7363oVlU4=vlbPWpFML(&m^Qtno zYQhP3o4%jmKb>v{F4JY0Rlu>k2*f{(^cRWTdF-zd`M-htOKsM5dg5}wBX<_7TYkij zF1Cf=5bunwY=>*BtE`QK*1+yhx?{HflVz=p<7raK3JbFMQxrrG!{eoPy?Tus`a-p9 z%USQR=)84>5%nS=zs5*CT}_seu@C=>Z0t1tG4YL2e%r5gb4xtLvg#p>8pji;PP*2- z+v=n&p>?smrx(>;)@Lc}SkqPv;2O5H#wE|2tzY6=SBnk&H)m%FAJ`un;h%>P3MJOt z+Ry7eEIN6}r!oYFd~!9GX^&;)1(~9NZIfHHNx{=)PxEK8^etM|DmEA$GGg;t0UR$D zyo`O0THVR7cpa9XJ&co`WL7C(2>!Fn>a+b-{p?t?C%@XVjD>kAf{t9X=QF+hawZQq z7x%eI86ui6%Oh5^tF3$@4c_H26zQa^Ome-^huP%}*)foeW*yGXN_dZtF}mJjMQ8jK z;r_A~&HBd=7PKN$v8x=c-jlUG-Kb`$AJxBAkp9mvpT)3P@|}f6KYciZZ&kSNWP7$? z-%sE1%Q7>2h{fPZWMx_3`!X9Ix8gFZvxP-%<$XMcVzNJvSPMzt?igQ_vdAVW`&_A;_SKbTu)1Q zr(-eczDCrRcU8gi&A760vUpMq_&mS)>KH;S=?Z&Wt7ypsSHqEINvr?XXvVg7tCDx@ zj-w-zs&aq)K9^)Gc`)`qf4dSl`)*B7YX1KF|Nj2-@4q~+pWkn0_Zv~Lh_@IT4kQjg zva`7Nyq)jftIbvf)nsk^hTRbIz8JEYy*85dFV0#*@$2&|a;=t(w72P3R6?8vdRI-L z;fmO_a%%m-Gg$H4J6>i{6$X0aml0J&(r670`y^+9{@>UHF>Aw&HdYk{SqH;-=B%eTGCQ6YVb?`O z4_CS;3~TyrB-)3Ve8{_2V{&qM=)JSI`So7KXf6&J^_5@H>fRWNRalZ1_xP44IK#Gi z<=v`PY>Hl3vL;q#eU|ZHuPlV#EU%?`lZ7ndoA>y%-dLL4a2Eyk7A0r#K`p9Q?Ml+& zBVMep%HHz`Pj9V)JVEQpQnhpQTUo>7V(N*MG0WK41+5_x)7VkY#Lnu281$5-7`WTe zw!fXlb3Lo8yfj)IyFl(;xYaC!+KXpr3)`ej>$3Fxh-AOiVblqUg;4_9Fg8^$E%H5 z{aN2nPwF=dhDZ@%Q}GZjql6-BmMEP`#%hemt$p>0X{fKw(E^I*7k~h zC9`@u^D{e|hr%rT7sv7hwzjH+Bi;=&nMjWFX~XPsO=~&jYB6>#TiIL0i*FKUB}~GH zR&g|LV?BqcE{03(tB@E{6lmvB-gY0voAN~+ky-g%EUrEngJq<##ddbU|DG(+pLQDa zc8KT4#*UGp{R;h$T-RVBo?a{{2SXrB`uk6zRX+?k-1z1yjeLRx4@l1QuC{Mn_4IhC ze-dU%ab%63=BeEodS5)cJ_h7v@mMWp1C(jb9-nLZWNQ`L%u@yQ?$d`~o*z{)3&#uS zL8y9h(P$>Gby&tZXY*lCUw(Y7ZwB^cs9D$yw!br$FLc@95|VT~vxT#LaeEuzcA4{e zHPnr$RkX@NJww2|h+w8VZ;!Q(TIH-%MjW^w)bY*)(^$)c$?l@RT)}}EA7U#@{K9DM_Y)6@@Ci&W|JRsIxgE} z6;!M&ygO(6+QZO3{+<0<6GHiuRcx*<7KtpQmCWkdVk_c(%9d3|=wZE??_mfH5vk2J zb`+1Q5IlHSyHTN*7eJ*%ng(dSSzu6$&9XMGB? z$Z1R3qMaskPGeF+iyZl-3M3U~#kwmbbhIohFNS(ootby@ltgD%i+pAmZ}{gZhVpdi z?k=hp_IAa)IoI_*_2-|w_4>r4W4hEKe6^p=F`X}=Ui{LM?4Fs>#kwL&gZwn6{i4GQ z*X-%!zeAus}g5fmu0N3eUS(&ah-pCw*Y&JP@1YK>g4~tYXhI~>$ym> z?(8!bw*0y^CjP27`?g_E3yX`{9$Ju7xAyzB@kWGMBbF?VF_)JtSq=Bp1%42Odsel^ zb56U@w*LO?x6bFiIM_mx#&I+WJ?S~5^lcs}yQ^8PgGC1WHea!xPvc7d6uYjh;_)s| z^_3~h$kwk}`j4m8rYF|>?vrPBzy0nkMx;Y8evw)xSY4G7@hsfaBZj;+BE7M*R_z_d zLQ?A$%jsniR6>A-VZ<*slt=nk!(1;*c`N?P1gBsvTCuzKvnOZ)LcyzZ`01z`tzvo;_hz#tx4VtgXnil946*6pO{_C|vCYGb+YFfnB5ox4WRcE`l zs+CM+hco@5vEN5YC*1JT_gsAE9+J(cvAi5pUwFYv61-R-r#qsP|E;bdNHb50FKOWu zALB~%M)d>k;oTnkjgE!(RT$b`vFXD`l9E$x;D=V$vYMU7Bw?~cdQ4`u{`&D#RQa=N zzj>g{h&4~=$7*}uEb7IMvdd9bI{RiP%)%!$=NC)L+xGL5AFOC)$g=Fjr8BzN$c8FQfGRo;Hie&Npxm=UQl%5fDvdx`wwl z`q?Q0MrtuO++Yu}dbm!PS8Sk_b>ojnh!p;|k=#sJCdbUR#__b#Q-z#vHsxi!$hy4M zo;P&T?;Ric0q<{5RMZ=PrC5Zpxa!)cCg!w1KfQX66LZb0#e%Mw5PC3Wp-p^T)wc82 zN7&>WKb}(c7q2{#kIVW(r<{Qr#?Wp~^*u&=$62IyK{~{XPv`7-nxE}6ZP z<2@~m>8g)$hZ=9Py4aUjd5b+A#j&v{Uy9Ym@G5L8YaZ0|JWmsj#_DB3y4&-RY@E|C z3*;0zu8~^oV-|ld+v*PmS7V_)ChBR^r=z0O{7Yl`& z5pVN8iR{;#HM7IHGgq>z_uA~6Sz=1{PCp~q78*$%GQIPEFL4MLk%LIs=~+98aW+q8 z>)IgzE8Es)LvJ;p^>_T&FC>aWoT0&a-sZ!deIoFQ56iGejWMz_drY;lve-kn`<7NR zU+d1++*m?GwiUl5@0g`&Oa7wTS+Ukvzc#(|OS|L6EI)TfC-l3Yi>s3~t>l~~%L4Bm zmrc%`SEGwcBaKdfcG&YhX1D?`c4@(q%N(|a9iBMSr>b85@E{FP;p=e7f4v-4U0T2D zFM@61!^Y077mNuby8LH><^~aL*1+73;(cSofNTi#`A{<>ly(;kSy*LPE5%UH=4{D| z@PSDdIVw}wn9YuwQQoF^7do30LJiK24)5|U56Z+zU)@fN{m}C6EZpEqVfBoSc~YOo z6$5>e@*4ObiOE~^(sKQbfn6;7tc=YFla-xSAzmGu>cQ`uby>7*i8b|~r4Z_=>{ZTu zn?CJWd&pKL%9><1cah(GGasCF7a0$`KIZ0Q(uQ@hXI=V4sT}&6IYn1*Kix5GELmdQ zmYqdS1o2gtw8|{E*{g?W6leA(JEVqA^XoFAT!oKWd5mJmqU0#tSygN61b)ZL;Sm>T z)+0-d9jfJAwWoEkk$Fk_JY7psU=3M3%;&fR!75@_%(KfJa>yK3)5W&5+3OQh`E`6G ziI&&{E0MJK>eF2Bs*8ICSQRyP#Q+*e7ZpBKZ>&{(`^L*XfS1+F)-~=w*IT@gcjS;c ztjbiL^2u4&R-HxN&z`vLtXjRRMngHNWOPJ_bwt^y4-I1mO-b&VA8eXKtkht ziJ3UleG0Z;i;gNUS=a(}_dNsBrKO|L3adr0`(!?D24GKHmW4*>R!2mwEj%FQhlI~u(K3d)0u}5rDpd1#4A7s) zeTQt!=zW^VFK$U9U+hBOk=)riWH?WP7L~r1;R4EZ{3we%BPn&n|FYi)6@=TaQ_j}=Qf=iu5}`L!~FeU`PZKTc-}d9=o5_{1L( ziJ`?I+sWofkuAbSfX!K5{UguF=C#`F``N0hzmc%J2lo#m<$j_Sl$xp~p3{`JqG2`q znbRsJ-ug_T_tt=$rR1>J9`dO2GRVw@H)I!LdzcZgk0n4K*1y>(Yu6-!_BuLUI9lAFII z!&G}3SfQFsV=)^)Njd{!;)?{?s+&*gr6+I&_gg6+p$ zk&AnaUP#QI)r&M1$*ix^sd}$*uU&jDTCB%V*Vek2VUCx+Tls{gzG=R?5VA3tH29Es zHM$o1w8kU)uj-C%q{KK99Epb!aXo&pz)K(7dX+QH!0BO0J?qPYST=d9gZbU1>*WFZX|a`mm`rXlZsAq>cgvYs>~su&&;&m^|R94`Xo8&Slea`5n?T$ z$|asy9c;Z4ziVx;-#uR{Us?y}vwaxJP;s+$-0IBLa`)fg*Cef6iZR|;cZE&!9dbAs#ji2>sci;67#F`x)L8ZxBu3Lg9?N4%;9 z%eZ(@6zxgHhV+pwPK&c^k@2M1(WZ4V9FlQ1l%XGQvk(5&`<|e&eB&MEQxVhG z7H0I&#xL!m0uLK|V_18fEDn6+m*%%n!O{Di2uay3IM9wb9O#UFEBIlU{E2-gh11Wegyv8Yp(fM}1vf&cN|Oj@n#zdmX8y7lTtTuZpX zhd*H#OZh~5UMSy;KjiYV2_ctkg|9`sqQe;J#E)gkf+_PoDbKyD4C#<(YUt3mX57gKuYlo=2 zfknZUV)N;PwsAhsI#1TvnkM@^D;n8eW@XJ+F0OX>Ze*5=OsFkJeB@EDA_KWT^@E`A z0Qzywdl7QB>Roinq0g&YO{-|M&e>|G*0N4d=RT!ik;od$dkhcNR)!d?T^~8!ccDAq z+QTSZNg9c9BSt{Y5zetaHWX`CXDJrN3(rx4z*;8sCQREQDHPjYwW=r{T|*yfU8jViHpp<#2>RM;kMJjWgB}In5KX z3}4v6gFZ26Rfey_sriAvc$ut|cRZ#+Kg?}>Ese$8*QFPavV@gG{<-}9ddP{gA1FB* zH>{Z#9q;(C*fe5XOXua1ZGPEN+VnOhRSr`&K$Xz8F>eV9+bBs75h_Y|N^CnqpbGwy5Z1 zt4~;vkzDWPfJixuKeKI|3H#YxRIEllHMDZ*lbPboEB2=)spP~3l5K3#10K~IBgz?9 z;Td|@JM8qzTD{A`vMlxu`H-TgdEjDIgsk4gtlA-#YwuWp7W8Cgc%_epahN||D(BYx zG1v$eSDAX=H63Zf$Fi#5Sa4NKYs%Oam#Tj(HM06)9}mhqXoN#~Et=w8C_OZcr z_=c| zK3^K-ycyo_*(aS0cF^iK`I63>jnN}^ga_2RYh(33x%S)`et-V<*XPxPS1>|iB7T65X& z3F&x2hb{i-=I$ZXB6>L zJ?n{iwXJ8St<9=~+RIa8`9zoPtACyIQxB5oLugc+8_BZR*}5WYt@;{IvK$&}-eJ_N z%!;^|&pa(2!|HBqQH)(_ zBqM40!xoI3*WW$)>F@iJUlwMKN>>hH%OAdZ zE^Q50bVy}IxXCRVTP?WO$^zPZI)c3<`wI{l!H?!dT*@mFJIb#Z#8RK6e0s$*pM&(GFSNGf4YeG zpWo~3F$dO{O|AdvR;|Tfk6lly>~=+;GN-zRpYX39cCS(m%V&`<)63vRhR=>!ZF5Ge zEtF$~t5}MsJ+T-@^wT6taH%4&22x@j#&pE8K66L0XzYK(WR_HG0W=~tL}cETO<~>JYq2} z=Cl4qgpXoGL-&`Sj2E@9eMsoD9TFea&w2YK^CDersrI)P;yKMc^IlFE4SQ{Ih&1se zU3JVh7K?RtRRz%FY`_wT>cxxw-=?r(bLf$2t@;doQ78)JRqa~A)yjId>~kp9M$Oq6 z@nQkL8toVZjm)32p!}QGEXiAThj7d<;{SPw%9$9)6D7;tYgbdoDd2-)*t8 z{i45l{OZ~#qe?*(t6WAyy_RGq%R9PZuMJk7|F8i)H7DGf!5j2lNjUu zT0>aBdW3n*mlv(|I@c!|>7zGX;%(kcGYsaxQFO94X7RLE=S8)O2q`0FBMZz9tnlin z)m1UqT4pSs7uDy&dyVGV-utj-D?4ng%R(7y#F*~5dqilp&d0axh{MTa&*I+!`E%F3)VDS1z_rcJD7EyYm;*vNO-~h$Kh-%uCW}i{s;8RR|*5%Yn;; z7^;HRzewh>Yx$-ow-$<*G}7e9G3;1mD_dCG%0`y7=8K{F7KdW(xS6wTY8E6L%SA42 zv2RTDp4IKM6(3lvuO6Rc@_C*W;jU}rDFoKe-+YV5p_BJnM0$E~X1&AYM)HvtUPkjC z8}P5}(pHwnPrd4y%#F|w-ZUhmerep5xVAPu9It1iSr;QAn-^85)^E*<;ek!?vBkR6 zPFk#-++D+gu|FNzHz|jpJ4mctBwCrwUh-IIbgPO`)E;kIXVD*1i|-iI*wdXaSkgU1 zTFY8@7Os~gSoc>45%f?s5yNgBIw`FS?!^Uc;t1PJ(`>F>aVeN-y-bK0CcTc&V`sdd? zG(yW5<$az{k9S(13(tO7#@X8VC|ZX)ys#opf@K#!XpiBv zd3Dxt)g`Q2*YIW4(uk@6Mm5hpm*0qxlSF!pY3FPRvFY16B*Qa}MX9-}jH5ezNjbhj zdvO?YdoKd@oyKOTayVYawJeE~@i~NwMI2j>7{{s*`FMjuG)npt! zYDRZU#p`wSMUW0QXwf?hoP}HLDk8;|zed>4lcdzbuGR5Yvz~ZZ2Zeoi&zM@v>L~^+ zrjGd8ERtoR9iyigN9bMzwX=d{Fib+Sv`$i@Ul9ycmU2D_pizCoYCr4UMpx$1K$Hd8cQ*m%c^IyECz>y7e8o&fBMJ z6?-@oleE)GF6{h-dA?*pGo&l4$+4B+-80u40=6;AvxIn%Y?{hBC{9Dsa8}E%iF;gj zMGR(HafD5AvClF+oK03}<&`}TxBkMAvE7|hcN+B#wRphd7_j_h6~AS095I7w6?r<_ z!je6-(k*T=RzzCS(90659qSxFRz0q-imgwTC|UjQiPd4+9fw5r#-fXjRvUCMry~&} z(fJ|C*L=#a?%YY-7M4b;5yrYQjJ5N>JsDY+TzwrutXQ$FXS_IhbTOk zSH&%qwZpA7BO5*Wh@08Ik=2OLtTD>^yl*3j-u2BUPYvP#``MK@Y|UOAv7)({ghIG3 zR?fEK9yUdw5q)+M4E=>qNKn(M=HaT(0p8Q(G&kRv?VbW)w z5UWN&MRsl0?MXu`foe$+Dz}E57~ zem(D6bF|h7Z651qOciUf5`WAj*^fA6%LCuLjfdfEU$&Md#Ye}ykkQ(_w}l#ZXz8qq z_b7Yytw$F4F3MjXEAl%2&`LrQiztr4h}GJ)_U$9yHut49jLQ~L=xJW>Thpx~Z>zDd(JYqXg$;nk|x zbsj*rsM~i3&KLN_=CH_y)(ot1ltoyW|8YA^8lUZuY0bv+YC^1n&ng0GebX=w70L3c zXvRalDK4(XBJ$J18kmS#NcrAdamMkkv&-n_B-dq`-vJK!W^h^PRYdyK)0Nr83i=@k zpXvby^qFsWaBzq6uh0L9wNh~oeX$UyMs6O3jtx#W-w4b%_^3eXgPhe7-Q_I_Vv50f zkpRhbIVT}>Snj-x)*m~cLGL}#stX=MkH^(j|6QT))Oq(C)1D=$z(2kH`Ymd`eWR$_ z1$&a!JsV4WPmtv*FB^V)e;2LUGJa~0!P!`z*|P@&)ka8*oUC?+fg;@6p>tS3ZhxQ8 z5xrYUT1EC7)8V;#FA~jU>@LIDu1(C^cvgfkfh~|N6XIdDPFt0a?Os@fq2aB(38-pmeLUW;MtEJv*3T{V!5&&?GU zAM!n`kR`nAx;*WmWf@n&}v^} z^nolN)INTNkyh7ejf-0N^oQp=ICxD$JR(Ius~=ewM{!YASk{~4{nScMHDj@bPsk)e zZEfa@3-PBlCmHn@H5@Ox@GS4Tmn&M@mYHmZ7*w>56Gh({NxaEJ$NG9#-`cbJpD$k8 zNfQ|(AXL>gs!SJ`szudIePu;aVp0EJO8xB~ymfJ-w6H4nu^o2p;oc0v29mVLR!6w3 zRVHIf6-BRB?raU+zrPh*gy8;vZ%u6v>Eh@LtnJ%WLM0 z?uS3(SwuSTtkJw6LEq+Ba{uw1g*oOHRp)x!U<_schkvUtz2!Gc*h5x!g;0Dpl1!T! zRUcAVM@vj00bWLm1@5}m9^PdYo77L|j*BgMTN}2jxp^R);DU|L=z&64T4|(FyWbyE zIrTTn750}!MYcKf=O@M@D)Rbw)QW}lm~3s8l`)mA!?F3xSv8V5 zMYs{96j?s`KV>RlHHv(aoRvvNb+>6{C`J(0Ydq1Wx4guS-4nLn(WXA&3jd(WV_TTs zo(z&>BD=CC&%=cl6-^GfKB>5@z07gFtck7Tel^9oY4uJbNww3at&HcV*sumF)q9+D z)LIRm)@B&$1x;LRHQ;JnC_$@C6+Ks2w>xrndlI)A7fWNzAtNefB%8|DVpv8cS)TEf zUq!w7jL*Ch2{EY>*N=XAAiHIDzwOiSkToug7acb7!U!)``3VWR*i$5<^b8C8j$n=5 zS~y3Got#CL@{g4`WXjSWnJDZ3ZLkg2V$1g*bW^TAP4ofe; zpI7WFQ~2tBiEdVeO*2$XjT11AsjK4fS8L>tcXxs$;6p4DD|WT^Ew_ro^oX68t@suN z$TT|6gcO#AZbi5Vg?bmctM^N zy&)|gbc&U;_?Fei#Gav8EaGB}nAc?loe-4ao5RXBvs2XvR#}+EJSuLq$)Rd>l{2f$ z3B6ciXlFcXWanab__s~Nw9jvH#72$`cI{fvK)L(+b z@8(llir0F_f#F-7;HTV$MPB#K!#>S|;V%yZV*4%kD@?l6m8&q)8eZ-hJORbcu30OEX?#gzu_}_{;2h)li<>bczwt$Mvb`K~ z%s%5-7PrM@Rbx6AaoUa8-H36W>(OSkEO1Va9_+8DtD;vV_;J3(p|XjEmtV7w{oS<` zBWG%_G3-y?j$&z^yXMvQ-PG4Y7Uh+FcFNpxwz$OPwKVIt+7l&FbEc}eruK}1Dn@#@ z=P@R_B3?1Fvm%6bMGrUmsDDEVNFLoWc6^bo~&~B zw6nEieyZ)=e^+%|!;PObiE6bOv$~QtS39Sl&$h)53gMtdOkz}(p%`{0UKcZ?L?#XS zrG=zCoS(*OjTyUkBiZb=tYJ-@cO_fPX=AUqUP&%jWLMGntPh86y zY9`^!>by!1b?cArdK~wcnVMr;nN;`GfU-?=*$O2`ENwd^oIA6*|IK=g>PeJ+tFh%y zvtu)(?1^3U*s{45(s<>48C;B5%A)&mR7GoUX9sC)6D1zZpWfrp)A(%08keudJ`7-5 zJZ67UuwMn>MHwY})!JxLTbF%TRW#Rkg}9c(^9MV+_1JSaql>QivI%l@Ij*Y1OvX4Dr*cKU^le`2Ro7kZMJj1F zHOhG$V}~DC*uxiF>`xOtGjXF;F3vjtLFDkm@i8eUn@o+d}bbgkX-vcz_M%7*s( z7AaQg$6l6^YV2|+KjF-(bgqBTZJ<9+hVjnWYy2>AR>hBJq9mt^o-_3)HffcU-pOZ= zD`eZeLn}0KyZF!<*7=imJ^8r)T@wo6fmT-jzfS)d@>Uj12vG>7w@Za$s;91hDn|~(>L_l^mQ|?kw({7kHdDWjUupn z|L#^dE6_qp-iQr^`OV)DfT-19xIrnD%e>~KWruOvjm~yg9FstzXy&0a`qrNY8W;1j z3WtrxHJDb-#yz-O16Sc!%glP!I@nZM;&qi|Pw_1F=1;!-`ufNo zBQRgii&amK`1Y9lwEND1F=B^xq*dvv3o1vmvbgWlOJk}Z;z+8WP!g-qmoepezW0== zh?)oBBc_;$llqtC7#RX&8c~gD9YX`j%_XfnPyUzYtO}nkw zwd!II#Pn0%Q(FXDcgD1yr~}d z>DuO49K)U}Yck`GeN2)W)jkNo)&^HGU?u70fp`AKY)A2rWWA3aAqP#HPxQr9+}gAj zH|G%aloK-6K&pZB*2eClcmM2e+N=5Br+QU#BgVj@Tm?_5XckOI~pF?-Je{o(sf1qp{T8Kyk$%HhQb&O4Klrt zA8ZNj;Zz*OtC+dYKJD9kcb=r#k)&ClJlOfUC-cc?Ux>+{5T&Jg$z6Q?%Kp|*bkZ2Z ztx|0EIH5I7n4vn3BT(oknV~xk#Rc1Af~w*y`@5QKv9X0l7$+-l^3}L;IbJx=0&>`f zpGAng)=8~!`Y#HY+BzQ|)}c7myxzQGR8g26RTJ{!Oi1-Tv0*`Tvx2L!!+VI8Tdr)2 zjq921WQl{#l~y#zc{p0f$Pq{CAvwGhO|xMe{WxO_wJd_8SM_e_>BF{W38O@*nCL_1 zC#vNX8z38^u}MFcPa@u=la%R88;*+>)QbFY&ZnpG%{Sjhh>It^d7Pbk(dLL8m=!_z z(C9o2FRC47Gc>!$3rF6PV9T;s#k135j2es!`60HB^tR4r!|bWYcwqMFu1XY#O;|z6 zT5ZxoGCeAjaFCNzy-p0hb&|j=*Pb&-5*tp<26xydbi^_s#U$&&D zST~AHSkM*e@d1 zO}v5sUaqpdYLTz{iVMrm%THb`PW_El(v2ZQ-auX~L_wRU)3jn?e?L_}?OIwzwxW!& zeNw0g?%HAs4{#k0G7dJL22`;eLCl?n`rm)->AYOh>e+#(E_bI<^<_O@c`RPlCUy0P z$1^M`ax7;Ri|oCORT=!Wo+Ia94-U|X2YUVcy}#{wT5J#*cfGLs%X18;Z!cfr6{9EL zRnp9utdsYxx{F%6X-sE1s6P)k&n#9kBFlY;avpSq4>(E&J80rLF5=7PCs~M%RvlvT z%M%lMf|+8`^Bstbk$vCq>?vqZwn93#!EMZB1D~3QvB7sTx*j^}bXL-)+Bz?e`ALRn zaaGKGgQ}j7Igd6zrU!ETV41Z3p7i)u zeO*?oFukgwM({hE$R)`pORIqNu{{*yU{-ejV~@3}p%;(CASdD{26`^(` zduB#2S)s`?NYKR^*x+n+polb9|1$gO_-r`vskfYgf}{8ZpK2n6JVoePuT`Got}kY! zg_%*Xs-@V6RGeO2DqCfgD3#rdXsEN8J(z5Riu0mTG>a9VY}nBHdKF(5!OMGodrny$ z2=C=ol9MjOT`gbXoCUEhtMq4s80GOX;$m&=Vpa`!7U%TR;@#{j zqpWLK<~U@-F6LGtLw-Ibp_)lvtbo4PzVViyF*MKE#!oiOHS;Kst)3XQ;hsTJgElbKo_Sy0dZsDb0Qp%H!(+_^4-gRd-=x=QD;9yIK zeYK=>R~9?tj#uTGD3opGUU-cqc@pE|pZ;-0emZJId7%#e7TWi)Oz)0HqFaVrvNXjN@V5j*E;ytyNk ziUtqiWIM*nzc4FC#mAoCv7zV~U93ZgJ!LleuKAJ6ViJoN8&|r1(awkTv77aI#bX;Z z%#O9fWc}c*MphBSimg@Ac%x4*l4U%pu`jGPmuaOXJ>7-8r{7VawOTZG&Wl+j=WOJ7 z77|Xe3uO=qs7DndtnBq{T=nBs^GNHRACH*#Y*xY{|JdTE7FdLEOf%~jLpp+&0_8XH!H{cyj)Desw>-z53RQLj(Dc`u7q0N7N0oI zKK+YloGPEg3WLjGvC_srEzq|WIeQsrJABE_gZIKSh8jEY|wS*sKw2 zS9oCV$#?tMaT$}Pr#qS zNgi_PEn*>-&2ipw`DtXh8X2DXwXr;D?6g=9s4F4t*@yeeyknDdsCPsvzgqFc8=jQY zJi^z!t1m=a12t~ipCK<+ombbB7wVriIo?1u_BHl7dF*WK&X=Al6ZFXEuUgrviJyFF z#Sm^qk~SEcuZ)3C+=)Ng&Tm(WQTFq4ae`OZd)56Do+0qwZFm^Yr9L)x8L={ zLlzA|wp1Bg>AMp0EZ$l@ukviQoZVTU-C+#Xv9w4v6ZWZ~^>BEs9w#Gqh}nGQrRuqr zz_ODk&F3;Uzv#rrGO5^zilaqdk5$WNy{_}gmX*%Vr$#qU?|fq=G;NM)m@M!4($QVr zmD%G8RO2a0$*dn4xFQ?agXv|%m?Trm#O&=@p2RC?luxAeDXfSZtDriY~0^ zBth?xD4viF({jFe8BqlCZ(j1KZ+nGE>m%}Dh_(27YX;AcowahX?=PK|J8Ulw*}#IV z2q9s+_>hH;vClvO@XA;Ti^%=XW-wWxBY8EdRA+4=^ zh&~X9kaEYhhdme+~`t@|)C?4_=Vm#JXY+Xra>?z)5aMoDY zWEtLJ1?_DtOd{E>-+Dgp*}c!0?R%>4S)a2iP`rn2k(rOxgKQ+-(Kb4#%@Li@UGH(; z6=-0Feyya8=5^jWlJA}GiNP`qL$KY5_);Vsv$w0>#YNA)$;Og?U=G_bgj&_5*%xYF z^{~%6V_4o?Qgos3r+PEKRP`G_t?7=N_`<5O zF)68zAs{|hnVpxjTDpfg7V2qZV?NQ}y*DpHfgYOKxNGrHBw{eVv{lbTGrx_r=_z6x z<9wel(GYjeM;wKv{u|4$?k;(=)k(3()VQmC+iJLa$;<9qNaiW|aCbk4Vb$bCLAETK z`etFXQR9m3#e{eKdc-KCV*@uMg9W56O%MC|cER`3Z9w&Mg1#iR(hR%}RTk-bs+6~R{A ztE@0y6~Os^#J?(F#c}b9m7-P^tFDUKZwa49lKvXybMMX4|3>`^gCV z@tuS=(y=uujV4Xr76rOVfLMH79nBJZ@7mhR3GoK_ftIiTSgR-B0;u|H6dMlYznEkq;BY4#mOdP zV+9-1<2(jWMx3~QS?m*ioG5$Q1Sj0c=6clzFP?^;edr9SuF66${o)mj`lfD3u!Q^& z%jd@8E)=G(DxWWWT^8$QzNgtrz~=ATSS@RZksLdwl0Oy>uaIJejlV3T&E8lMzp5t= z<+FE3iwTLvgk^O3NiGax_E1>1<)s|f(me%Sx^wUZ(t4@YFxzmcxbUS&R(m>T1t0aD z4{5I^V1(^B-TFd?4%@DmoiK22<85B?CG9ddOX!U`s?z*7#wtaGdKMvCqGR9pu0<*7 z&@5^+g}o|D+O)*a_>q_8)AsJbc&rZUb!hNtmhC8v(hdO|B+HwsD}NwQ7W8=zb=@FA~o3uxEc=Sx;9F5u9DsFp9lf&x%t# zgRoJHPfv5qQC3T0BqrUhs@huG8v!-1*0HT@+pFZFsBfAf$aZJ^>6=a>HWco-TA0^7 z%_|J-^DPn8W))d}`YzOuk2d&iW!EaWT1C59%fNUaS84L2631=rv0r6o@qTm1k$%|& z-B^eVkib_heCH)@*S-wssiig?YOSGPOs~c05Ou|fRfQr(+Zaq6NuouHSEG{8XI}dW z(=hJ0=y21V#792mS9y*TFosqUa^&0<8NZDM{e(wZ!3q|!{;3oA%>)^}`cqqFsw>nyE3IU>|5yc)!MD^{4}KK^Dm z`}t&qYsm`#R(iN7ti0Z6#?GyOibedO>(yk6pMd8 zoJxkLbmD^JP#2N@TDIDgb=?CgFNI{`6ZWFF}?9o)zF)De*9+!s}A=e zzMb#?KK%N;`t9ug7UlmwX!``Ur^^u5S4~hGVq1FiNrfyI%VKquA8_O?A7dL_o8x$b zEsw|-GhXl~Rxew-T1JIvzX7q>cAby5a%}uB`?1s!?4ZR~abfWvUJKPBXU(l*)p5Oz z%q#ubJa$*(>F!0l>v;ifc2`S>JVcxKTGO$~k?SPGcbT)QQ0!dy66;yUR<^;I)jY#x zxOT>3n69!x!)TW20hQuOYjHFN$5jteqrpnv|1Ij1KN-_XvAcC=dbXdgF{FxYzdH$- zl;yNK;&oAm2d+7TjGVStbE^aJi`#ofWvmt(--|f=ZCb^S->!vOS^fE(p({qn;oeuz zd?wJ}Cy*g!g#7Ts9`-HL#hTW|l@uGhSjiR$Lr9ymY;#^N!M-D0l{2bwajst3yP_ZD zWt<4*2e~Ixj9b~zG)Az74S1xlE3gW!?5(aR%hmV|p?KQNcQNuw)ne6pLoLx)BvmI- zEIS^R&jxE2u~BUJ$|m2#;Pcw}*S$(lrZF@xjoT<=;lYbrUC;x;=Bap}M%eS0EYjEs z7vA%?HrLq!rLxa8ylc~n$&Deos>?5!O?pueYb!b%T~KXJK_--phfLndbZUL z8SF|mx=&ZD)<*YgwYJ!3D@HQlvSQqTY8u438mDJ9T}wZ7)}sipt%$@@d)|mdxxw%1 zM%=VtBp~bs9W%5M*UM4ZlGtoV+iU1so6^ZQ*4T^*&ppxBYJAnCl}TFW2YwDS9&0bt z^mF!=_cG7V>O9@%Pv>Ps6(ofEtwd7ikLt)C9${4Xb*<%C>Uw9bM=-Ygh~_sqRUuXp znggBT44e6xbl31#osRX|Lk^Ew#_lSk_`1X9U#Qya)(X(| z!c%p_ar2Y=I&skdhvyE@`quhaeX!T-ug^H`e4@v(6E%sGsowovRw(tL=b?tt~)vT}DLV0MnR&LE)OkzL1uny(WrrpNs z_u##n#aeB6#$&$3?RbfMz4Bj=&zUUWW2;KwRTei}>I>WEH9E?V)pl_xY8yLQ>`;5X z%eX4TSmhj3o8H6kpUtJbUQ_}WG%R9jK7O%Lxy zK2L{bvlslz`@F^{JdI)6LKUMzy?JTKle}orTwUjbD?>(fH&<38M4;$aF_OZMYC-j` z?8dO>s4`Jb^DHj*%^>;RQ#I>@;i+d;f<4IyHLXRcJl=|Fv$}|{k}h{~0YkjQsLVcA zhGg@N%&XQ8KN#@xsz|jBdRYev*PDe^GXAPiyM8@Mf)37+fFDMSHeBO$2%9HG#+jcY z<49E7FlU<7z%eknkm!gdJV>XuY|9I>z8-yQeg-}LX=OonroCRD>tOBW7905%da)%r zMv>_~zu4ksW%p@kT1Z;1i*p>u>S9JJKaH*G%dODJLX}H~rctk1!a`oLdKHB>wvStm zs}}m@6}xHe3MtOZ0=*o0*FWF&92T?6h%6Re)mDqWNES`GU~?ub_M^YG7aipn|MZ)5 za(Z5n2l-G$TuIaNfHyWWT+Ih(?5cWHNAo1K$aDmOTI{P}WQ?=vs!v=`i~3T13a2r& zv2?416q*^_TI5r z56##K!>-*vANaE)wsgnI7Ez^XzB*EiK4U;S+{|XJS6Y=^jjJ9u|8-nkSlHZfk=ekSWR2G-1V`r5ufAYgBG$IRV+m{>&ryw z=-1YuojM45c0| zgUs8o|IEdq5C3ouIhHtT57n`x$`nc}Lr*@!wtE!&ssyxKGwwH3diJz2uE%oThaZV_ z!ITBfQ+yaQ7+@U~Dm-e&vfs?5kL&S@B+@(Mf0Fq}Pg$JSycTVm?HgO|TAw5}XO#6r zDt|C)Y~mZ;y*hKX_*Z|z)3uO*x2=)Mti_(j)?|FgM)r1{Pqw@)+U9WfVQ&8MTO_rW zAC4TyM#tf$pE0i0zu7W>U%{^~M|AqJ7p>dEap&b|Hvjji`p^{eY0oa`v^k0|aKxiM z3BG%YI2q&cF>LK|teKvj`9^MB_|%-&`NOhUsV|LwhQp2^PA2|gARJ;Yf6G5dF*pt{ z4&P1%37RzwyKE1oEm{BI$?=KC_ z0yczz45ZN~@Zyj;_$}ya*R%ZK{uPUeK=!b!?Ptda-_7SpDgGS|8!hCN^ag zJY!o3Le2{U9d#$MyUOOXu+gV%vXA#wBFAYdT4a}V&Pi`oSOs9GbxD4g>BV4?EXPD3 zn~G^NSrOj(%O4(>C&Q(82(5yIeyFv&9^aF5OfIV7GgkAE=1}UrV+@8;ImO7wXLs|`Nut;Xj`bxOOI#Wtqvu~kUd8#Dj$v&=qjs-nyAn9&M^Csnan z6LS2a%bCq_ZQ3!S?0lP_^Ri-V%&~?I5Mo`Ca>aREz!)0%-TdG=zKn!RD~+z=5yoM> z^_#jF1K|k+2>m}-_W^(DS(b_a%}g>SGn46QlS&c@kN}B*N>Q)?cI;wV)`n|YaaAn4 zV!>Vz+ges-EvVQi3cAunK@bCoBtSw!dYj4AOwF|Se|^uz^FP@==kt5dTb^>?*L~gh zb3f1fp7U!zWs({suC>Vr6FEg~Tn=20rD{^U;<+l*H)1EnHU z3yMdu4&^)v<99g0A>1KZk_Xx#wz&p+_y$Itz88>yR98 zAz92jhC_WE%Z<$lYNJP6VZ`6csg0ps_vnZT?cGsXG1##@;wNRcvSNZ-&7;WsXiXc{ znmw>YS4;V{d580T(#W819sY|Z&;+*w!i-?EVY|2G$5G-hYzWaB~E zS$*}S|N3aTh=rAtj6?25YBMBK*M9g$UotKu8r&4TKFfDf4IVk? z<&z!l`RtQ=Ek{23w+?obs*$Pw;Ar@AYpdB-8zGj`wfFW}|7p}NZq=+YzG(MMv933? zE^Yf7+LedpBJBKC8j{eVRul!hkAdvm{@A;G!%H!A$U*0hETb-|miSf{2rT=x=iS_) zGxULyb8HOn+O?V#`(mf{TE|{BSGN879QcfUjqH!+=|FcxJ*{iulduJo_CJoTuyvi> z$X=gcKIc|FI_}f08VygXF12knBAvbJ0RJIznN%B8UJ?%JJ&)4T?u?z86=*VvUFD$_ z7V*O`Ec7YlWfs@}AJqG&?B{MB3lE0XPUU(dAl>1jM=wV$-x$^Vt>YP^{)d_24eGF; z*daHf1)giC-tEX!gmCt>l;44Mch4OuXct{2yn8ngFB-4hZ|yTwjcSd|{?ksMcrmLZ zv6xnzt$;zHWW!$KHDQnS!SjcPrS3Ce6bMuGZTTkSr?JhyGWhn*rFe6RxQu44og z#_CSlTqZ_7r7fOl`*Kx;Ht>8QMT@#H40| zIkiBO#@Npjim0gJEz)vz9TDEiygRJUn+Oi^HQ7a z`XrCDSW-WyaXq|TwcqTzs47)FppD@JuVSMIul516ey?osy3gwSZKHFh4T~q1jJ+Ec zwpzP57F*a8I(>;ce2uKmjP~_HLwc8K{1rCKW6x#Lyuawqd%fu1SXv*3S!=?qIQAZi z^Ghy6(pw2!F2;JORN5w|w%G>4WG~*z_ZRJH(UDUPNJ6jkZlf(5I4e@X*bz44sq_9| z+tE?!dTrU;ekzHc$R<1CBVM(kJuPXc7I&VVSh)U%^^N#SYrPg|Kh9LUjsoIFwPu46 z!SNbaz2jsi2)_{(8WGA$R$+J8L9TWxYdaR{k90moi24)_2Fjuad$cxmNu)(g^j|Q_ z23P2!g?a!4i>r2_;O*RqE%w+%ZzJCO9C5igI)^FO(slJweT4u0mW96{v($Zy%OiNp8Ymp=aS7+(qI;lug9F=R|*uZ{j z6@R6Au96$uaY01liT3yvOOzoZl{4d->y2mFR2vuL5rLPhdd0b{EvJh^*-S?m)1ww_ z&QdgrQQ2Rvv2>9xs~XQ5A)x{TdKUX~$JzE#{gtLyJpn!#U4D!)OvDshy_<=3<$}jK z_DvenbxYb>rSS@`qFZASU+VWJe1q#qzEyWPI5&6n2~Btoe^l3~!A^8xaW;lz*-^}T zRJMx%{DGd%*wU=Agl*cEEsGVgvP#YRL-DSDT2RVWH5xrDQ@_Jg4wdbd-w4OI_1D=O znMtdS=Gl&iZbKT8y?u?RoLd5#9Uob+{H`qJT%}v~NQ)5@*hJpY`0Ok#jfOsD<9hUN zyBOZyI!*q8WUW9+fWj2C`tnySXx-L}!SJdG6$xRfG(B9YUkxP5(P#iO*SyHo7~dX> zXh*i9Q*Fz9nmAi2T&ZM@DbDJ}mS!W0;1c}D6~}{Nt~55chp}xmsTa|>a_W(GQ+BC5% z+NWpPS7e4)VSv8dTakgRUNMMW@D*b4;Z552hN^S5^|0FVywchw3AyR+90}kFtsd0| zO83~dZL6z?fmi!>Rqt(81ae+Rr=;z$4108Z;ywCTvR6eEtJ1}EtcmHVwUld?($Qh8 zZi)$AKdSXHSmx3hI~H`^cVOH3udQFRU|pGsm3mpp`t12di)H|Dh7GC6Rhj9lRo3Wh z_)ABr9u57}DhibaI?(qn)7mbSo%7im0~=?(M*mCO+G|^`Yp{k=hJRPodW^w1tf%_N=(!B3OhamYlaOV-DycCGE9-|H&l*dL8h!EBcF75n z4*lpW*LQBTTwIJp{U7j+yUp=BqUlKw#aX%0Q?KwH@8&l$X=PeY>(I94v(V@|Snuxl zUQ=_PO3MF>Qs??CpdQqErQ>uXP;*7vz)LT-j*3Z`_(IV zdaTcua@@W!&k-A8W_b!Ddp*~)_FHOjsb@wD5Gym=TGyQEF|gNWbt6}~4)=Obr5JZv z)WQ1Vz^Y};=#6f0hHd%LJt%i&#itcFmhv{Xy4rJAmHUefJl!a)nizrB>$hh&1Fa zy6ji^NMXNy54#MV2Zt&nec$YHpy71& z?ReT^L>?_Iqm|ysI`Mmfi|v`?>= zvj;IPvE%w%1NiB?cgOf_yuk_<=BW^vt3?Dcb`*DQlMYN0*RYv~6qQwqF$ww14 z91mX6sQ8TXW0t}rEBnx~I#h!CL|MR&{nN+Lcj!Lsqn?(^DMwz;lm)C_{~E0*LtZcZ zQxmqev-7U9ac$o6EvaR#)wcGG7xK&A(RD`LYZUaU6>YaaazR;}-D00}q;`dV%Bxig zobO)SP!{qebPX~^xw`0M$nQFBhOl&+uEAEcWtfgUIOOtO%r5Dx_;XPNw4(_&Tx02L{@p5>8y`qO_ zjSkhNYxB;Omuy7#B0vJjL8f~}vsO^1UP`86>m>urL@mR8^hHMd7bD5S zdvU41LDpG8`3iMj&Fb>1TDch(`_P`&_S2pc_O;(=3c`UVaxB z&b0#6Pc7y%R+Wm6GhXx^p5v%5kx)i~pLmOb{T-b~1-g!>=&EQ%hoxwW& z`GY>>Xfa}3IawAeU%t|^7A=d*9M_;p_j>zcCmYz4sqv`4_DY)CMZ49!h>zBA!^>GM zzH|W{tf9y+s=u2F1w6U?&88~+_xUGK@A@r*Lsyk&&6}Z&B29oquVmo*rybx z)4Tkx{t)mtYSl7Y?wAC}vWchBt4|(`m4!Zu+}|KlZg8yr%96v6YcGr{Ba~)Awi!5L z6~C(7)zDS1#%1>C*u!gUP11G`er;brc%=um8%K&D`_%))A|-p>Rez9fom!L@9r0UE zTg_;+qa~&5H`SIDdM_H)Ifws03zv+=uyMU|@QCucF_st5m=tX1dSg$^=~>IQA-o$e z;iPpEkzc(sX8f{Sty~GzH_{iOTC!1moPin!l-r(IKAds5>q?_04fNJ`Sqno_c#*@_ z6>ok>8}D*Osg@=$&B)Z)K%PGLAX~AXHT+DZ?`Y8S5bc;%Z1g1q*4v0fKD|W3_DMRD zRXSJXi6TL5&D6#CGhD)b>bCDsTFfefn!&=r^#~u#vl-(yOE!+%E(0m;PFjhk2dK^EP62ZP+Ir zpk4k$kzS5ys&3g=ER^h--n(;_%(Xt5%Lr^OQ!%EtvZtIEEir|3TBMWfMcuYJc=4lc zTl5^3y^bj(_APsDly7T(A5Y8u?@u%#5r*m0mKS(6>*y#W2I8dO6YH-)v!(bVRum`E zqWO>b-x-nlA`Qxa63~@~Wg?W8aa{h~J75?g+m=f^=j~pZ^YHX6S$#iEEzp8SWhRgQ zad2eVMk3OS?4Bs=$kb=H>7`un*wJF3TG<n}@)o1S_6-Ro*fc=IY?KS6GdVz9Yl~>Pw#>`%8yE;4y z3UZ9%+L1sHxT0lRK^hA6Ff3T-9uBhV$ zG(0T@am+6+MF~fssB}>uG8QZSRd0RM27<~--s~HR_lkAj9g`LM+6oYjcnyr_}pKg?5`$bbDx-W=fiI) zYI)=WFt5MpzoVjlXgqYa=S5DqGzu4O5!!bS)@JUzexWH#mcgl1uVE-|4w{{we zwvZTEVA;Jyf!6vPsOY7*jrgWlems1Rg!t1}nO(-|3BNktHuc*QLKxVb4t@$M$(Iub&rBP9*gV%M%N)I!Cj*fghMg<}gg;Ux}|7yGIWO~DH=ufN~XpzE!T#;dc?d%<&+xw_IMms|796cL$aC4)^V*8ERt}cDDV@WxO19Yne^l7gdqF%kl74@}Jyxcj03{B}gFsj8M zf{%^;GQ;t-DeYw|Wwm*Z+GcsO$3`QJEeC4lajdst4ffM#`P@C{mR?BP@~L{$lHJOt zC6m<>o9Q=j@ae6+5o_c%WoyU2dM?~yRbL(`x26)!f|Szxuy99Fwy6iU-I3GKro9iJ zAZ`5^mm3Glu10|FV^TS&Y*B->+Hm91j+HCE!!L?z{Qw^N#a43F-b+8w2dUe~h#6Wa zcN<5wA)-~kqA>7)wRhJE2JfB0YFBALILc;XEO{y?>Bv_$41JuzIwNL^EDjPmKV2)YmBIiv7w46|eU1ysKpo#tbIaC-H+WG%B7-lCKDkETpl*8dc{= z{HwDGy6dY^LA_!OZ>V)!9u9BsxgoV4u~cc^JlI;9v_@`NRLe5Kwp=Opjk<#~xFiBY zyqvV{_tWdgJeoH2QCiK$N9{qav8EX%J;;C$9Y@T`9F1s4w|ZD5P6K(thV)*=rIDew zPDi=gId%8jj~PT!FjkFr;RK@*5w$dWC>nUdhswmZSX`T>w=_h&*>IFrr<|d=n&l1o zyWOQYZUi3iA?w7;$j79+dA~R^d zRrGMY|H;JcK%Ls7a|Fjwlsgnh(VaHrfoXAoY`qP$jDns2wf7OMakO68Ar9L{FyH8T^;qkeEMT~CA8l? zM_N!v$x7si&4!K0sK=p)>ooS)XbS^>wm$Vy>DzP5j@)4AH|jL9)o)zuoL@{-uW!9q zgC6Uv{gJyKqMZo6(4;k$AcvktOO7xTcF@FB+LnoQYz!Fd)cwUH=P|m7Lu6p32eHKn zC>nLH)BXk)`m7unEDP`!AxQ2_EsgE9J7<7%R3`2~3z|HvvT zx#FB7tLc5|ANzSXjK_#LGMbJ6^^dU{FqjYB;Sp++LwkcKYKTznrwBAq;F0xCq2Lz2$zyFc{O-tZ#UY0rakBOWx4!JAz24wisC{GHb~ruVNrtzVOe z6qRc*uVWm)vD)bR^4*-B)W#lH%iJ*zb?j0Xa`n9WFa+5`dG=^;#RK!a>nV+e%8V5s zpY(4V`h;IwccqqNvqo91dScHNR_LeNbaO`kvsnfo+Q(q<@32cpkLrRvZ zd}_Gn<*Kc?)wcDmRW!P7}+5!r_r&DC~RIB&c zk^H@KDBXNSRPFd(zkpw{zzX{#&vzEX%gizsPv}nCGPT^P|LLthfz@)G;!@VAQ$6WW zo3unR*51I?N}ZOMp3+#XmbzZ{)PSL_<43X&V=Kf(zWSCm_PvU%az?23>%8`Gt3FBN z-k<2b#bT&-ZCO^9(OT3tDF(O3XiE~~o?7ZOzO&Adjr6q@%xZ_BIg50*@BWFg%aN62 zW10Bdzp*O763r9U>)oo}$?e=k>BbOv!4G2kH*WQLi!m-8UPQ!3#g1yE9>4SgJJ>f$ zHU^b#^reZb0|jV~?8#NAm;1#F(qnEltXZ3Ct*um67Q)T?LVLs@t+}RUZIy$~v9Z=! zM_SX;GKQ3Y*#EcPUJ0WP-y1VNU)65$|Sp9F{6Sd#$mfzU)jn zT5KxqkhF3QUv}h5B`VT%a9j>G4k%Nce3BYcbnw|Tj*1mzs&i`>g&{Bb>cRHPo1UwU zmbx!{82yjl8t3#2p?(%iTm2PfS|~H>>!Eej5=UVKX&zp^$f-p*4F9ZWI_iwWh>V*Z zMfh1WronCfmJ8(5Uag`(?PlA|)_bY7(DtF4zo_A!co*c-8V z`1>cTEJ`db*7nHNy@Amv-LplDRORAgXCbea{MFj6J?i=#h}J*KCud2^s~g>Ft6{O` zQk7A?;p>$W5(7(8W09A$)uMalJsHU6N?WYQmI2+8rRc$`d(G+C)-jtGQ#G7{h_;)H zj;xa$q!?b?Uc1$Hxm+%ia!4u{YVN@5qvhhEcQTWpvvgw!iOM^BnAm8dha%>)8dpoQ zX~pZ&JuLa*tXeQNQuhAqxDRV4PD=R>Oxu&s)^l7Y>OreTik#z&{wtTVq$_9b`-4Yi z9=svVuwV1Zj!nbX%@Q0nD`?JE-z8hEu@E3Vw4Y`^Lncz<3dvw8W;J7XrWy?%IMdo9 zi_xn+wT;FjIzSK}m6FCi+bv5!Iu_JU1N-*L+Rl)8xs@L@Dp$frTNt&RtHTC9E1%hG zM-rd)7n1l>x3AGZ%v^zUnuz3GgDA$`YME5}fJu?ldvkBsI!CJKv~7{8Wii(|(vqDv z@T#BMcU3Feum7p5U)P3oB*aI@9q(aV9dT7mb*0Qzu6$LmR&lQ99hWcmDg*r5Uu)XZ zy!y9|;!xivi#lX?zIcr1N6kUHBE^QqjBW!KQ`yHAt{tnL|rgZAqVti&rHZ z?X`dS4dz#-V$e7va?!fmKCK~-g9^*jSVp&Gjx+ipOBqf|ZMG*z{KdN{u$i9wM<2-5 z#?@|Eye)U$L!m|oCCd}FoTE=8VA-Kh{q;!!(&@QYqMi1&Qv2H0AI4oeb`#mU>PSOp zyzP}q_|>yMwORfbTL_TMYj^<(J=3(jKiQ17E0vx7$T`SUdy|rEOF0MbBNmel)+AHP z-jV~OUb&%Vm=8Xdm6+FAh%uuml6v@8wJLtKbNyrVYp!l3wh|SkmZ%lmcP%_@-WeZO zl!3Kg1YdZQ&t_^J*B}GSA)V)d)hi2%)achI%htk>U?b)2H4Zz5j5y!8>)Jqa@Io8d zIQl7TwBIwf@X!-!94lix_*9JABHafkte9h}KS+-mP|@g!qC6gVt7bXxv;DyXa%B$d zdeNvnZ61xUT}5`bS7__C+-j9PZL7?!G>^`B>Qlp$MQQETXJJkI@!}QjLz!hxuMV3O z&-$i1gYiDa!b;={d>cEULBmS$=#>iPY5}dcXERb+3p~ov`YRu*g|uDy)#iKcwS43i zBJ@~85>5Jyt~&>=v7=ucZoS$cyXyDkc8&!}?bG^n-(?SE28+zRJD!n3jTKp~JGS6k zb%3We4da5?+;53Pw6Ts%{KWj3R}WsT%{fwy2nm#C-Nj%$H zN_}c*uSy zuk~oX&T4oO_DR={I=0Xl++|zd*HLM8Bt0WG?8>%!^#Vw_7e+SL^jW?53=Nw5lB_m; zBqi9n2=qw^qpAA!H!RUENj+8Le<3vvbhW%}t7JH(JtbY0E6@uwaBx+6lK)p@wjJE< z2tY@2(xw)%vSUcs|A&kmqCi zlkYb z*S4oO?KUo`-F2C=tPErsQ34XRV{NBitx<1u)|uM9_Nm7;7WQgKrXhFbpu0C|NZT<; z-R5-SIXr3+cV6M($ads=O7!JCpJsV462ZBWjV%t9i!`it=*{O?v2RzLWA#d{#Ufn& zN3X69>q572iY~)`#acVX$+jBTla|)gpQAArb^Km>gcim8#xGmkE{bK2>s^7+OJ$@v zjq$M(wBK5F$TciiEFs9_d}<{h3)$2xlVIV9CVeY|E#&PrIc8gGt$`*TD~qz?kKRWt zAa6^MLHh$qJ=0VB?8sJFrgS~6^Bd>KomtUTdp)C^Hst|BYI|fLJ@&w~7>n@GY^1ja zDT;^`R{KQ}PeEGU?>zt!q>NS0KK;wQ2>Qt$XUZ569?=+6f7E-?ss2h1 ztd^GQ*>Zc}h-ut276(nD=l`(eK^ zclgxss`0FnZ(KB1x#CqV%UNiYov>@qj`dsgDo^wKfufS5Cj81r=hSM;^_BLg41{WB z`*f%ljRrVY9^zB|y9moHifoUy&o^qxwmWP%YADlJr76;6sU(eUEzPUTTGySc?cv<# z4rMz!oO zf>)zSd%{)ndWmEGtPbp8&vjcUH{0d$B&*DWwbhkIVt|aSmUKLSx#2+kHcR2^o*^e-d7tM7pwL_MzeU#sznDw>qTr?W|IjIbC`3=iwbnDUyi(> zzKg@Oq+fM(w2VsnDi@VeVi^GjGs^^cV4UlC&%!OM2UfCmR!?+nFYQ~OJ=R}qK%0E+ zxhz&jEB@LBkEoPdtc0xDQe}q{%GFA>T>WdTT|GL(YE5k_-?nKYAJ984dXa^UwZxFs zS+7P9c4;&${*Ff6V9B;JMoyo@>ir~t*;k$GEtRTeiwG(Ec1-R@m--cH)G4xEl^{1S zag9Xv9DNllJ<09G6~C^4qm9E_ZcMfvZNh>SWGezD-u2LsH{|* zM1yx)U1nvX8>>Ku|B#Bzq{0@jdVrpa0Vx{?YMIV~`}CH5-qg6Dlp}qstM4+gvg%9k zB9R{Z=EKX8)-{-QjI!T3NMl=hq@AUG^ijLomg@tx^0DX3n}uk>2tuUt5}WA0^aOjn zuV}KEmTIALMd`-Ej=g0>N5%dJ?RpP=#_xqTdl1dEHP9gIkW+uvMqm0@dntL(**aU9 z$*R_f53PwSwFEioSGF##Gxn-u`xsK`S(|N3e~xHgwmYgU&QzNExjOLDzY^s_?bDu| z9mlO%{qaJ)DK_*eD(vJ{861(SS7F(GEp`0SL@kh3Ca2{hgh+G zO*;FH*u$1RS0)enntm1>K|hDuz#NJ+Ae zXd_aVL8Pw+bR^w!+pK2rryOg0MWT}Gqp!BA-};0aSkTgXEGp$0EnFpYU-f@_ zcCVhp9@=j|N@C&2go?u8pPG$~BD@IVy+p28$uU|aofmJyKriw(f>!pT!gIxVW2C3S zdzYs(5OJn!JmeetRpUjI3(ed1xH{~k{PItIC^<)t!Em+8OnBAKm2Sx{<%f^4;^={P z`X0E}2W(+gh83&wOi5S!u9ekoy(QBIifvsFEbmo)Qeoi*!>8y#MsksQjF9ydXKT&u zd{S5K3@))y<3#PlDi|u;Hg9K<+NJsSat*B|I*K(q+8@>?rGCo8`iXtW^j(aaC%~b& zs6+BX2-iv3Mf}8Ht zVkOw2Oql%+~|U{{q9J|V&%Km z;h6vya=tT|uHbab%NwzkP{&q(%}gpWyO9#R$zR_m`S5ADTLtjOeOX3-J<% zOZ?t`jsM`{?fk>p^Si*_R`dO)8@~1zH(=dtn;rX23vpQw-ukNLhZgwS-&yc04E-I3 z_4yA2etE&KD7rShylig-fB}tdJKyWrGc1Rpv}JL+_Qmp!%2+iT;aP*7`m9Fn2G#b_ z5xgivwQMMswC(Joy7TuU%4@qe+wz zQGZZJo5Mb1mRs~%Mv2PXQ9{|qllmGqRe!9}Z!_DWhcmofJ7mJ2A)R(eKlGtXEv2M- zSl*bzVjWA1aXr3~M=9?ik$qB$5#HmdvBW9>OEr?TMBA(;dhA+*QY3EQOWSr{3I{CZ z2OZ}iWRFf|^!VPOE1g?d^|sFzt>u$-c#vAq#u7-he^`jyaIVz#TI?(b>%+F*9Ti;> zH5zYmwvnT#K&u{zFZ$GTXF#GEud65W!phVrSH?BAb(U6pmQ}U(U@Q6CPvgp1IdkN% zvNYzCwy}@o&3indd zVXQWrE7GX`+r3ea98mD0cVp!!xvYhs<<;PAy~bG{P0Nn2L-)>F;NlEV^M=B(>4-sX zad=C;&CHOD)t#NYUtg~Dq+OmRYcZ)Vr1f&XZS$LYM49B;c(r7GSq|4&pze@PPwJ17 zEu+1*L$b#4mZ(QMqeQPYKIv1tT5xSJP7fVv8qLbuW-gtXdkztvWg!`>Wm{OvOoDQ% zh}ickdRE!>qi|{hv!a!V+nmAEbR#1h^9QI^GcmP$mD!bQU!3)7mb>&Q z+~_=`JRvvzNDs|E`&XT7VKS4f9?>4!8*Iw`@@iP7cqwmBKduZ0(%YXFA02^|>3P~! z$F4{heP>+h%aw8WYagTZYc1oEA zNzbFUCe76)T_x{WMY7>{J;PpQaHZ8t?Mh!(ul`yqR=lXs?bb$oi+w%O>$~xt`(pR8 zl?a8w_!h)EdO@-XD66!)o6};ebe{+>(vZ^z4%zyomu=BWg#|Y4i7l7o zxN{^WBc$llJIb&k106Bi@6va@9|9uaS;_GGzY5nbq^ss4v1caET0C8iHFM^Co~f2c zG%q`uGs@7LcI-(m|H}{}7-Apx&X>JKZAB!Z*P6xFJfdFHe5OxD>s^0dG=x;Kg^qq) zbEcY46ZzPaL`IR~m)*S1j3y^??nJl+?PfBbj;6hPv1exM-bnq!TmqVGcusoi6>~88 zruw8hnigf0O3_z@IxD(~&d%_!Rnx}F%njnKjF;?cT}BV){3OsSl=u&w*k@=-GBX!) zjJXW0Jm;=0FR0TVIp&?p;CBZdlaR9!5c3o1XGF8fr^dKH=^K(+N-B6>EYzOJ|+5H1MQoO zVwNbfI(;8X38l&A>RAij`#lXk&_cUj?1q^gS1@`-q@urad<6H&+W72$jh+?V&zd$Z zwCOh!Rt5nW!&I!m1a_1~co_rg&93u!-tkCm!4D3mB+iS4c!fdi=19pi!gswN&G}}y zBE^)m>_T^b(s%9H?}D%kMv};@sIE^PEj0(CjX2v?3;ppG2(iN>Db*3(nueZy?qBqX z!D_NN?6uhFK~o$eY3QYTFlGAhI_4V#~?w ztq5nV_a06uYc=f2m-(F5)whQ&XC|T@%UT}p;xI;wXy&@25^UH3lWkkJ7J!0{J?7{27oI5|d?oCgpvv+#llb+6w-Uos+*?7GCa%FltW7?L_Gb4L> zyDt5%nl6mQ%ATF=ru1VBJrLBkO#9O2)|_qBxG+-PJ#SBa-zC`>4G*O^%-x^fS@KBs z)Ze>^HfticXu_uVMTQGf?{La*j@9l-xvkMzzoG`8^IuOzrETd^WH~2t&cRAPA)2qq zvG&S;$U)HeXUGkCoL-aGmo5v*pr%P zO%E-O_!zwOwqe?tdcK);Bxf1}suL`+kEinwqrs+Vcp%4{bIo_o$j75r#DbfmkGOPB zG{b{4vPUX0aZ~JbDt0~=#%#(t{<$Hgk3@bs17tR(hBtrm{|}8F_}C~c+N_WMk3`4* z2ScNRxW6jei9-*E2}YCqgRh8yIr?!o=6K{0)$Wf*xM0ndhuT{e795^;r-X5vt{Zdy z;o!S9bx)-K3nRa=rCWIHx*2|8?a z_CjaYrZ-OSi#D64T{*LE+LJmo)|YQO?TPg3Q*(+&qP-ZuZ_&CaVok}K@!2^`M)}c^ z*k*gs+m-X8;i>t7w7D)A-WLh|%HBiK3-1occA~J+{ZQ(QV0gy<@)`FG&doL6p(MT^ zTlmqz^dTB;$a&-7lszNS$!NK0QDe?8Dx%!?Zz!R!^vPL*TW1x<^0}-pU9>}`3us@BZ*Iblc?Vs z+nv_VO`JIy8`9_OlyDEts{6Ja-JL6&qSKz#+n(N!M3>dURqi1dJv&x77@S0{lhJE; zdR?1s$3z+DfrTU+(x$O#Yh)7V*94nG!4|r5P7&se^a|n53XD(9h*qSBj$&)lKfl|M zT6@#mhRDn#<#ha`|J#r4Hbh4wWb-jm=3vnB-6bR7C6RG|>SGn|JhHfUDE7llQ3xX- zdtPjRAlGHSw}&BHBlUgxtOX8ckKf-O`Ob~pw*|Ee(!+f@7OVEhch;uGee**pw_(xN zx>&)zrp+n8IeHupu4ED$dOz&k^o`%5684A{{1meCvc^7{q+H85Lvtg_;b<T+=x8LeHDbuxj|78txzgE-SS9kVOlun#wM5rr!Nr)5^=IdbJivOh zzWMN~NML_WP%=`J&7KT^7p)Ek`y;=6@@O<9D|R>2p>4fNp1}`9JDGyadw2Ri73&+j zMF3;_@wBl&XSB!1PsKj6Z@#)Zk@(ocr`4BFV64%DpI@A|8uvR=895$KttoiXjU2{_ zV*XJ25G{8vqVcI%Qx0aND1%5Q%9(4Nm)c^F`+T$zjWF%3$b)T0AesE>a6nvmAiY9G zhHfoDE_5ok!^yK3BapFHCShD5hb*ll1H_brn+(^?V0Y@vfqY}xtjj8cYcTF=)0QA` zc;W9xkVBFA!f5?a%Ab>RJnYhFaA*-HjB97b|KxjOyHRQm>f)dLZOrpFEi7#Adw%*h zUhIiSnDxlJs*~Qx_)sJ|Gd{68dvrgL$Yx}7kM(faE|W1{t;v}^vE})Zw_^|spA&S9 zgz`6Ig8zYIu12a&xh5X3&7PdVo#^$E=j0-G8O!DDo!{+ADL#HQT{&@P{AN{duPkLV$Y0R`Xr0n6es7;v<-!cksp0-D0Hr%+7PrhjsfPoPQr%BjZ z0{QL^Uh5*s%2@kkViRp~P$b$FnfMS!$&RSe+=F8LDgVA_iab17MxynTDZeV8YjXaa@Pl3C((-V2?tE!mu6kNx3NpKc-1))c;b0IY4@^dxi|gpNnaOyvi;rR%$CUS&M=BzqEvoTs8$*+u(;*h+NSNpG# zn-_MZkLb83jJ`5#+_lKrG4bqJc5ir14xVfFwK8@TVId?w@u>sZVjivW&z!w$A~Lj% zi#pb!vof!Xi7O11Yzq_Fd7U&%f;sLrz2*zuee7`1Z&o6BT7d3Nhn~ z^!kzbx;zb|JkhZ;HO%F((x@c|=85}b8zZn8h>XV!_K=J$CT<BS&Q;!an@YKbMp#0f;b?Hekk%Zmlhw* z_eV3fGeU@TyHd*R3Bwp@+*BHWuOG!=fUP`I=cd{n%G*z>0?>X=8(oMcl9!Ak*HP zo~-%EsLe+24O(X=)#@s6BZpW_G8f*fFTdc8mL9FA;T(<`lZXYZ^?DT+el*4XIs zNNoMjI%C&|H>Wl0)H0y4T5XL*PU!#B(!;EVRb*ji-d(k|axHh1fyqa#A{@^sC;zjO z3vZ+1h3RWwa9%S#KBeyuQ_l!v@o`QJ*d0HGuGzxw?5)f-Gk4mbx>{80P6$PA5b zvAir@v_2Vp<&&33lY4?^bK%2b*0K23f!JnK5Z{&UuE=#(q#`9oSug22;i;4qvG0$U zTX~b$8N;l17?H(zEm_0r>_nz$Y`5ws-Wc6hM2BsQIC6E$J&+bz*Gy4HZ_UJt$t;61n3wlkQ^4 znbQ?1#m~>lS*!3OHd`4fFHQMRq&M08)~wF$&9$?_n!T~3wSosD_rZA4hFm>7-y2@? zNUI^n=tpwQ*YtZZwi5v!NnN8dE{iwN!W-ETQS6@Vv12WODb0$^AVp*u*2c7RXX^0)QNZl}!sJDCwchk#BF$CVv%<7D*E)X^ z`*5#Lh^< zyD_Sf)B1p1%G!n5fz@~G404#xN>(j6Zmi(N=DB+ppLlatw6LaW{F4oe4JRU#T*0cX zaeh}MwnlSS+FO%Z!tTVJ&5_+&+^KNt@O)>+R5921Eg$vjd=xV_P9KhT=f>NaBa0kK#Kl?j5gC>Eb6;9M6>Z(y6N}G_76-C@ z_>+jaGbLVFF@7-mpC3zhM$MZyM#>Wl*7pwW8L?IGGa2`{#FK1~1;Z5?T_MXiF^)Hz zPnxau9+R90Qk^$h9om(0?(@m;tPA1FmR#Q({%;F^R%Dj5I+B_x@E{qk)y^@;rt!hZ zClZ-oTDdu}u!8lGuBV%`SQ9W8kOS`z2IfOXmb(`c-yi*XKfie>WvtDgn{sSkEj0abn`-(H-t}J{-aM%{M zKDfXKk5=YLyxtPo&0k4mE&6!;&#GLCgpJL0-IZ}?(7GgUtw?WlQb#_8Q=1pw=Pta_ zbj}q>Zpqnw3oXS*?31so3{$qIly>(fe>7sTr`*I7Nh`Bwt|=E-oBCEstnmz17>C>q zvC`&lxg4%hmXEj_c|kN4UybhKh`EFnG;4e7GWv8p52&f%JFL~h%EG>sFy^^8BRkq2 zX{}VVoON3HC698SYGtCwm1#w8-dUEs#29To8^h$P?qEKUTCnkVaItTuYn{yau`zK( z+~TKVk2#IVMdxxIQ`}!Qf~^m#d(z|DtiSJw9p!UI5qCLG$IcI@CbnSPxWjJsN<1fh zpRzEM#NEzv-Hnu0l2x`Oo?EYWcjSs_b84~rVcub79CvKVZhg~OWtMJjo=3QcW2Mf0 zQ~bL-GP_IWzBTXPpG?%f%GJTvyhIc|89U03_k}lj00VidRV`WV=17OHyvJP7+Vn-i zb!ApdcBRfGkyy4artxwuSUa)u?|zC{N+YZ9GDu!ez9Yeq?Z&Fy#>l@St6s8TIV!Jm zN7DBqjCuVp67EpQ>|`vqW+;u8?i;(C$j|rWn$gkR3{vh_8>5eB#Ns{H;`r^9Oh=42 zs`4|km<{qyanD={|HOrhGM=xPo*1bf%$dy#Ysl@**vxL-%YvHdWZdQ>BDni+R&Zr- zP?N=qnw~WsN9Sv*8WV z{Zx80XR5|VY4OXf`s3jSyYqfooz=iii9B8LdmwGfF0Cf%|IDCceOgAqo6W~BNISg? z#5&d!tR))Jx5jeTI<0uggbxQ_elWl4HU@-Thzb8P9|8gv=Nf-cY z&xe@1ij;V36?%QRBA!}fGERGmF=jH>EY8e`V{Om*+(bsqmSzRpQx7kct<2xLAaATcFZSsZhMu7EBoq%eNAwh2*R5fU&oUMx zm3vL>WrSxfW03iT6*;`|yugXY8Ujw5m0FwGJ6|0ctfqNxiJqtCYZBLY#vUTRSf4Ue)WYF*73U=_s5 zmbIVGSY^ayv97D13vH8p8QZK$L(&~)D>QR_czd+ICv9Mo**`u^ zIV1Ow)5yHNtRVEB3C+!(S1s!Cd+Sa|7x6;gXxx;`?hg)!QqTIhwcVXzgN%+}!q{kq z$?m}6r04_zBdI4OtU_!LH{}yMg2EZ`KdWsgVr9Bxk|(lG#p=Unvw^@ImcF=ta_U-Sux^i>m$$ok;|PYb0{NGpYsuQ z#Rak49bI`bYZ`$t&pm0miCOLKX-90^9(2qa4n;P8V+CnTSbN`M)f3KE>#V{UFO2N8 z6PHehZR~0F*to;;+k?sjX{UERdY4*El^I(tn-aNYX`-@E_vEx9> zmsr%wqFIY4c+QO_tRaXI#wAaG(d2?`-Es3Q&B55y`g)(l5JSXlnUsv5H+aTGq~*JE zOY4p@DEjzO5jUlGakFIV#LKg^I1`1W7aV*Nx!=@uI!JMHs!3fLebNG{Bsg1FV1LjTaGc) z2-@d8o5h$x8egDkO^$z??~C?4*~*eQX&$T^AJyK$rP;6c`6Wl z)b;dB@3pVYdGkxN7~^U4=SJ8*Cva~VDEF2-bTnl-TovoikH4Qz-0=*ES-kaPxpeb| zyCSitK&*oEQ+NKL4MTGWX!dSS?*W^ci84G^%5Tm1~bz$yqKFJSf z?{F-9adbZ%%RQJ<8*|+EC?+!VLs6ce$(?tGk6Q5jq^Nq~!YanA z13~-=X?0)NVeCJawl;?0o&&xlQW)#Z7H5GTClU!S$ynr$%dX@J z)_|M&8Lwz)4RcF+wi+lh$+>Gm@*AzKUAdEj4|K!JbJM0Vsm~a=7Yz@i?e4V4DqY{c zCo2*ABSY`o+#QW&ukJ&MhMpyoImnQB_Nv6>#{`*Aq>UZ1)A2-!`%-pY#zN6+UnD&= z-w`&7H!^iG5Q{s*Ke#}{`j~jl+>zvsyuHPO#jZJvh`4x%9Dl6^Q4o+nJVbkrg z{EkR!?&qmHcTe17F$TIPy)scjEVAn8K9)PDd}98J;}b zzF>#D<(^Mj8&;nmJ&dvs$5Y+cI+B&(6S3t3nRgzWKNLyVP45hDYp0LSx2Bf6Xm_Wi zCvJ?P4`%BgsO;Y?*2wSKnH}l*?A%vAKc7!aAJo5oN^r!fHdp?im3DAF=|6{&!e&76m^7pRn|M~p3`CsRMm~Wcj zl%w~~Z%*|8KxEz(sqR?VcV}?CJiTwv`--5s;Gp6T7vg@X=4#%#_>c}+N?=5Lw5e*VV% zy=eaK`Ni||=jTP57tLQie{ascEU5jr`A_D*4sIWw-w_?GEgzXbH)~T@OBpxxPp_HYKmD)ikEahrwm+SIH!}Ue^ok($13~h0QtR_$we^u` z4kvDoo^MJIe=z^h{2TMPr~j|X_G{-C&fgJfo-}{){5g3)FQ4T3+WBYa-<M)p|1iC4dhPU%>4xdm(_13duT5{7 zekpRkBBj4}`mV@w)pTtl!XrWZ1L43cBggCK?@Mp5n7?)Y@?i12`P1fS%%3%1HeWbD zHG3D%&z@f}e^IRU{gLu7=D(l+E_%Fo{^$6ZIT8N6AQFAU^n{7>^Y&0iKAJ~OttYQAQE!hHVx8S^tE%@;<}r_SFq|If(&JM*8W z-iPDsZ%>5v<*??Lrq>05*Qe+E(*OTlNcEf3ZPUHs^WR6#*F>I| zrPNEN?+@!gHIaTtczj#z|F`kvpPB!1{^et391-oXB%U-dE-CvdFU{mfAL-mGdu*|Nm%s^Sy}&za8H1kDcyH6ul_2Y>1`4BC+oa z!-rQ#>sN)v?~EtCHrt!x*>_Cu3pV$}+iwVe{yDO~EzM{f?7e=mPO6Dxgv zczj((x{D&u$I|N02A^M^|5u{PXU$)iNb|U0^Y|dL`}B_R_(}7{^Va#={5^C2f=KkL z@c7rmw!e*!zbzxzw&Wb=XIy-K+Wn@C2QP_4-x~?u6R-JTBzR-I{axYp4Z-M7;_Y`t z(pQH+?@iSC=`iSJ!Sxx@!#C27&9@}d-;wz7m-Fl9m&9wnYJU3sKf;(N2A6g7X9uOt zi8+@=mZyh1*T(;UGjaK4k>|Bx-L3I>v%4*cgP)c0=f&~c|B=Y^ZIR-J$n=kiIaC><)cxmkY=^6L7C1cx?2roPR z!+6-wXWaVX@aX&IZwsToKCF3Ke83+rB<^FJO&!yYT8)g4Ivw_*W7i z|0;Zbd?Le7M#|SDj(9%_w)Cgsr9S#Po>Tc;rja*Iob`$x<4~H+S!rn+cJW` zJk0(1>31@w{95eyv$5CDWc>fJaR1lCrdLO%7p2_yCn7y3I$WQT{)|NaeHmS!lxG=t zW?Z^05#e>oivBE_*K6Wczr4uNUKZy3Xqf*~k@Qy=^8P|3eN`;_)4}%l^LJN9o;PH? zy)kXwoH_Nm;m5{oFABe&66SwxK7Tsn`gbHB`qA|L>e%fk!tGZkZvWu)Uos;9RC2W| z6I;JKbv`v?}hom{>Ne0uf$XCUGVI_#LwFzn>^oa>uHhh!r<`P>Gj3Q++GySel(o>{7CbQ zi5$-j+kYU@@&%FXWvTPhyq}vjn8&BgIeA|g-do*Xo4p&twQad0`2Jw_;q>zHj2wRy zhW~pq>~BxJzcD`XW5MRn!@{3PRCv?;@*sOh;`-mjihmot?hWEAGvD1ee@UW+HQ}#_ zcdd_qeokck-0*x`Q2d(2w5t+HzAMLH6i$8TVpRI(c*_^XmRBZ5JS!gg)YN-S^m|YI z>Z(}bpMuwlwEfqK8#g4+e@&Qo|04H(YcTxL?EOowy(7&0-C*|Kp!xAg{I0Buy(=?^ z)AL&++0!%sy*Ih#lM`D{%(BGGBHJ^Pf4n$7eN`}Id!?Y}8l$jILl>%KKd{}@?+H`|AE{yjnI&m!3! z!RYPb!_Jhqdi=3Opo^2QZVYZ$Cj-7Fk?HD4^SP1h>dcHD7j8W^Go@!{{Jth$d_kCh zed5<=EoM)vg3o!W>Dw5d%`>OJKm9!tFL)qKJC;1{9qIL-lMTEzGTaeq-kn_XEwS9k zBGJF5%sW#0=3M`Wu*>tp7i1Lk2lv|&^FJ@^hwqBsD`Sy&M$-?+J|B!!{}E>29t7VR zZrvOX{=tIZAIyko{pR;_<};@cF6NdWjWuse95a`Dd_3x3=NBecx?lZ*FzxK1aa|;P zPV$p4j%+`o|RK75)FS`;6PDRG2W{&@0dikQ%T$_k^Wq9$f`Ipk$ zN9V6dmSsiryE2D8J%3hw;Nh&}er`t4yP~mi@YY1n=fp!+#n-l_w_D;%o`JYKjMgYyEPQ`per{r>b>B~!-WzD!%~yXR*G;X4;=Zl0EWe)M~AeoF8< z8QY!Coa)(;>w)<7mUx@*+E0o02ZHxEWNqc<^!26FKL&?y4sO2lv@%xR9eq6&V13pT zR(Hl)dtq*JPYL77Te9rTX?zk9CH-zHL-K2H-x`)&{&ziS7e0%dp~=6ZQ5HE zO?{_sO>n$3ar@K5F5mEcO0@n!e0y!4o%GGP-jBE|2v~i7&h+}!y>|NdtdKn=>sC)r zJD7$Y7 zLy_U^>ED9PnnY0Fxwe{To$;)oAX9v6T6|1cu`3b53a@Xhlg2vQLy2~mE^ykK-p&gv zeB;G8gD;G1{PxMQ^^%C$ljen&$nKzU|*NWaBuj%CpdW$_;V6-9!%8t%&IuTJMT#Q7evz4 zY4Ld4SsQCz7q7fEXU4BVgTnb?AUxdn{I~S@^l;BJ)|ckugIfuIT6+DI*y+u|@w!~QHuigduI~m5^A>(T`OfILGBNMUaN>?&WzG1Oc+#a|>whG6 zLF0JFfeqm*pQr1JNW39vd?ILk+Vp49;M(ZABO_9ulQ}=~-!gxF5QDtmLfEhv1KgXv zV4*Ai@)md2Hpfdo63N_0@HD}{=e+MldE#YV5cx=C^&BbYT$I`yV*ws{I_&+F;B`@Y z*}Ty0+E{W`;?$8?_Zg9Keg4i4tIwHU7xsA`@!A|+7(U*SG1&7dBGk&DEW){S@7XWU zJ+27CM-l_x8}Gg_y6w-AZ=24+X#0XM){qZ`Z_kWX+!ghkHGAjJ2qyc(i1isQH^sNz zpF5iP%EF%Kdw$wJk*MsOI=&HT{rHS%aYg$7n_ztT^ml3T`f$h-p+-PYo11T2RlhB| zA4ok?uS*YShMC7A<-L*QF$;wF^~oT3d3bPV+ILrcdusY7i@VRBF_Bvw%LpB3%8~m~ z+rntS#^75Pj|~E+5`FHEPQI^pIH<2nbboI2_;56Xz+*Eu_}z|s7QOkE3wK?%#Zvon z_PiiMZ<+O-^Ot6nx;xz1m{xo@;G*OQH>B?;1_^z9+G4bPO60vSwGSu$T@tL0rKfv? z=*DOP&5sAe+j922WF79y`nLMk$nfF#sqYJVzSDQ++`I9uh}DTA?}_L6PJ|2!n&-vq z-HGw7wI}5G{o&%%(vA`5{M5KLeHbx}6IU-H>C+;UT*G%RJvCt@+7T?yjjo<;d~5nU zH=lPW{$3wjxF_xz>)q*Vb=YRs?kNOg-0oOyeXwv>(sxxq5R9%%Z@zi6CaAwZQuxgd z_k}$1VFi6ojCT*lb6|I8jD0wx%$lt3-XV}P z?!C=sD@X1fUAEw=Z^6jOzB1)Kr{Ss6o3m#H%lG2_rVLAaV&QmXT^Fugk`_g0 zPXOGM`c@RyCt^J&TKN@_qd|ISuCK@_<$nD|iG)UXPr!R-=1CbJFNl_&1btofT_4SS z^V#>dPQ_X)g5$Ax;N>ad{`C!+>)n-Hz&Bh@r}oX^$EArEhl8*uSl0(RPcht>_OATo zcW8Yd&$noKe0feV^&Nx<6Qz%ZpPQ4N?8yA= zjgie0gpVXMGQK^OTxxgx{wvb6XFdGR&%2}h6BEN97l|JetK1U4d3Iw{dh^WMM>7Yy zKXt5wPTxxa;YgP-iBe@!KieVy7vi+#7PvH~Bp&EwjEa zviQz`?~8dpYwPsSiH`W}d;KTkA=?v6&d=QX&V@}sl+5$4Nc9ErpPOS_+4HV2IIwQk{!Ea-vzcEfTuIAA{xjvFKyd!^VuN?}(i} z{o)yji_`LLk!xKncYkVL6M#b|L?bbDK* z_1%WPjWezyd3zkahnE#H|oAC8T-M2}me!@;on{FIjWc;aVYba+y5m@<2QZ%SPd z9X$W!p8I`40|(r*-j@EaUa-v!$J)fLY5jt*VSA$eBa!ewg6+l8_)`-Ui7~z5gZcc^2S`@WfNrewppEAbWfAyraoFo)oqse z_Dv|ygRhC!)~9`Q_}*j)*6XfLv=T);yMmlw>wt(^@X3sm*GHpW>GzJv>Iv)n<6Ckd zzr5xt-$P;6=JdEHB`*ukGIYNiwlVg9LSm?=*!wK@ha$)6tSw$2mVPuWaWCN91^46& zM&nhn+a>w*3pk#c+m#kpFCv$34Pnfu1d+QU^E1=BadLZPfsoP2H=s6$V{0=iej-;N z7wh?rk1NBJ_e7%W((?Vm_xf<;{qanrteN=7)57!OVJqV+qUnlAcYb=>pYxAPopaN- zZ!U;8XNGGB)0eDD1htmnsjfru-AkhX1L@(+eEOY>OT&I67M@w>@GZx`3v>K>(?!A4 zcgT74>ta1C11zCM{P4ul+k&(wHg~4K$3_mb_9th&Fc#jDnld%<$@;78*7u-p4aO@n zLVNb@W9i{QwBMGI%WTQF3U(#Nc?w4U=35|Q`l`jKVf^+RGoq2FhgT-|+!Wj%7xw$! zgWqM^5xqR6!;9o1H$)p;JRW|^mHd{4U%A{O5=Fo<_VROcv#R=X`H`)bA#q zpHc5Wl5=c|@1B=vX0~)ye8E#vzG2;`(c~s(<@{RyV!iC+VUTCb_~fd^c;^=>-IuiL z;CEF#5%iIiJTEcxf?RtrTP*fus?k=?{uzn?-MmR2K(RUzrk&RFXDNV+G|n-d-l_U}t87lyCb#*-cwCv%ngciMpmGm<2em+On?!0TLS>xMjL zBdynDS{1eJwo#XQE9WBT7&Dx?=^Ir=pA;Lvc3RoKmiN%jV+&oT;nla1LQ-&UM_)IpDLP;6sqJ6I_iaYITiT*Wz)F zdirv;{iZ%pe?c2)qLJGzrX1(Z186COy6Fh*izTVGS($YN_OYKITZ)1=1 z@a!Ft$Q*Fy%AHPlFIUvQgI=6tq3@bU*&lIU7p&+DJir|6eRZ%hu5iCLR_iQ8@#hFz zN2pl{a>FnqeQ+iYOA&CX}HSNqE5hHT|gp)b3h`pHQE3_S>Q9{(N(FiE_11 zYg_D0Wk&_|3U7eIuZg16?}up7b(x~09p`^U+hO(}=bhU3oQE#^fGzVPWYv&~ z@J{^qDw1>b%AT%$z*+cTZNc`8R*7_@o{3PVB`${77vbKocGaWz>zsAk4Q(wAY0tyRz?t!mW*Vb;w%L%qzvTFY5vt?v z&QxB6-i|9_9Yb-f$=0Mn+qM+{Iku*Ce?$G=_2`Q>9Hm?v|1%fsf0yt2DetttLoM?` zog;S6(eI5e-lbgo8jgKy1+I5ienx4_BcIiv!kmX<&Kw(N{j=>f_V8|mE1$JPdo5$~#it9Ta8ez%svyau|im$nYuwlXSa%fEoU30!7zU5nx^fpp-WrnMB zTp8LK87&76MY5|(T#na@`)D0hbB=g53IwYpNE8@xN;+BV#bGv1*x zBY8L8SAvU|DSN5n)yxg%n7rdp=C1QDk&#z-{DPxG_Uz~J>IVJJNVjicJJSv<&ZVrc z(ch|QP8_btFZp_(@2>hbkEC}WzoE7EuAIFU^ZhN#mBugnZ*zG%du$0b;VLZWk2~`1 zDyg(@3*gZ;80mL7&tEC)(~}>rJ(QXW!i+4*LNNm>)c%rCZky`W`cKEfzC&N#K#(oe zG|rH#&d6L#Tm~(;ip&2#p|n*wJ`+S_&6PQ8T!mw#>gcfObG*;{&gO}j17+S{uw7PH z#yYO4(qbG-?f^#BfNMt`wR42mJ72C2TN+&$U%!jh+7_8P$yLk7!Db?x58^*Vu8s#8 z0hr0dm4C)@=0vlHFT#zg^p1|N83il>-i=80v|`HjLiSBviz6Ls$@wYfNf!s6>pCY_ zJ8Dy|i1VJ^qLknr9Pa??BaGx+`E0LSOeT+mvDQl9R?H|X?}~~?*EYCjU+jAC*vQJ( zVWC2)I5n@1F_A0!v;M(#PRX%pylT8|^zB%ovjg>guG4d^viDkDz2}N#F(p0f&)8D! zED0Zut2-)Sew)Rx2J>PlS67^Suf)-4S0=j3(IUFPZ3Z|SieXLpR!Ri3V$%X$>)cYVsDcox@*d6!s! zUPrPjI0j-KikXE+M**FUq#V?etNTQaSx~eI*Dl*T{hl+7U(COy zH0%u;vAT9&3Azp>t0i5pvNXDChmPz$7!P=7ON%r9G1G_ZrbLZpsJnTTvK%!TvAB-c zjF|RZAfZs$>GSm6zR)&FV{@#o~gu=lhF($ zX7aFa<2a9{>FvDx=}IkE$vQ@(1ms_~WhLV&T%bU~0 z_`th;#=x#0P97pZji9v`rSAxfqo-!fP;1%uM9<^uA2a^C`cZ$8wfCOq+EjhDUf+J4 zNO8PM>gCnGfvu3afsJsq3s>fvDW~Q;lUHSG>|s>ys;sPWb-Yl2q(}Jz{?l67UOGNz z_DHp>lyXO0t*UA9?tKeazUsrI*n7>61vtM!3bZcylK;d;uJd#)kx_=DCB_4KGV}7d zn$p~=Moao%t-$qau8GuJnPpOqnln^C-^aaQX}xohoQr)|C>xe`^b@{Ha2?n+G8<=eJ+z0sQVIvVBO1MimTnU!Ex zhidt*;&*kLYrz~h_c}8d>6f!URBp^Np=D^1QtcgVF_Y{t+JW3C5z*;-POV)m7^CaI z9rd)G&=~OvK4to zj*d^L$>gH3A7gGzZN|E#)MM(?60~@^cHGJDVp$)jmc@+!I+w?|Q9AUvYQeLl-Wg(% zP>$*?j2pydO3`w}YPhpiuuTsg)+8O4sXchqU)CwDYK z`J`Qp4R|b6I}1>{tw%h`iJZpU_>cVfPg)5*c-GBIr;^ixa!vWd{~ni;oT-drbJ8iE z#DL$_ZsZsVi^OQfZ~m_iawImRRI@5vEr=j7CcUCMIMIe}fkIRMk$(BiFR!qs@{=>A zRC;au{GOIrj{TK#r6N~&%#y54&02~&u4j6kW#$<#o6?nXu2!Pfr5>vFdyZ6Eo_r}G zrKKd~(r?nDOuR-piX6{X7IGA6Ms|@4Czj(mKP7mbK0}lljhSKA60FCwg8^j{tyc`h z+SI#<44={})!{30loLInXXS{pi5IbaDU+@s(C?9K=$1O4K}uRTDGCm)H{MsN%e&aB zy0JF>kTX4P?URWpl8(f^KGKXmSZa_QI}Qy>!(24Bd>QSr&+XB8g&^1#MxQ3FN>qw{ zMT>eLX^ljqx4QG5+KLS1%va?g*J?TXkH{) z`pc5#UODD`&$c&|-&Maxg6cf2pK|qXlRm}ck+b}@)s=Q5auAEwtUf&wP34=v@{sSU z!*~JT{XeqS{)1{cP8%V<pWmPn!%v>9;t5jmWN;uw2nti5iik_@7$EDJG zBW=Hnpy(j>8yY+>bl7qP&(-#88ztRpM+!oP=lLxtOuMW!)p%^kYn61g@6lM5I7lQA zjaqk5C?1W3eHj7yX`C!pBO&#nWb~iPItYn{%7^;bzgcD^=ymZBd5=bwyl2H1cula7 z&*;Y%FD;?}`A@ZAIT2aGlK#S&POl*ft5jn_K}p4sR3(PZaepgGc?llcc#_NT8jF)B z%WQjuDu0LD(COL#KOJdb;&a25SNO8tXf&9J1x1tcsE3iKl<1ivK@3_?l}K8tAD5~1 zh(ooR=vJIYw|XYMxB8AB^4uzcN>%J2Wh$Y{w_1~iSiIk)TuMD2Pord{P03iUkJzSk z`>)5eR5fEwo@*UqAu*zo2zGrB=ho>fWmj3GR%H}ydv2A5^+|!2=zHi$-9fWQLZMW8 zZ7sJ=--$=0GyX8L5$Un|M69uWkF>qQU3^Q<_TTE+Dg~Ar+EQn%J?~0Vnv`#qr=^CQ z@S1-r?a_f&qE>tbJ&~NHSxZH0aOf|kQZLWT(LUI<4YMW&o8(p|@*0qBJ9`wD*<2^o*)L)ukRPJ|LX> z-DA1J|EeyfBhR!rYQpxj(rul_Leec~z6Y(rs>kx5bf_ z&#Jy9ZHC?}|9NfruJwoZpeU%ch8%61-WvR^86ji z$HL_-XbdXFsk~4jTJ=|G7hTFdSJf-Lrar1q_A2ENM2bTtBJGtL^Pfhk{TPOA?z(#F*I;A?fp%J|T#XKk}MdR_G3D()v{1wQiB9o!iRGL;8Wi zs5FS6l&v1DO-e$A$73Dp(f?Ar+(u48ttD#(`Kps|JG?v1?QkkC4%?pu>14@ws@2zi|}Jr)Bw&6Ccq<^$z7P$_;w`FS7Qy zI;j-od+bRLVi8hmZK)&ZZL2k01ts;UUQa%~GG#;)(T>^=_nu`fep+h~k?$UjEMm>_ zC>8N7p+cFaO;;XOXSIEhH}UFq)gMWrrTEn1EA_#@lCWekCjDNUam83mTASFN*QzBS z^58?MR;!Fvh(Z6CJI_=j`CU0z_SV_PF9!aESD{jb)d zZamw6Jsw)4{dge%kEK@J#-jBi&Vr6dskZK?6ju$z59p;U{ZblK2O&y9>rNz_Z_z>C zBSEi;uKXR1N^LY-CG9z$X&upYwBu2K=eRxhl;D|>W-Z6_B6~|$Zptw}C%#BJLu;^| z7Tc?WSij|$n(^95J~)U>BVT1?ODT1tEHp*ho*_-Xdu8m&&rlbHS(E?gAvc~Io|T1s zhWALr^ZZxu=({*p0v=2Kp(gV5Z1IuaNyUdp!%;Z%x03MxDxt{E|ARZJ%A;Z|pQ%l` zMH8MQ*Wp&my;2EhoWOVK4AqXXdtF{_l>4v$SXRbJQ+Koy8Cs{0Hp;?-G>gIbEYFC| z>g}XQ?1#QupLKbjau4dQ+ec&{E|f^*lW!?kMC(b~Vx!J~C39rc;W!8$$5ml)R9#PeID->t=mc&rk$j)8d`meEoXUI=@vahEcf<^1KW*^oRE-EJ;l^bc5OKFb>^lVE}D{T~5 zUs~{JAo|OBkyWm!S9{DO))I7Dqb0{mtS@w0yEKH>N^|H;8A`6r)}_mmf*KJK>(-;i zN+M$=RUb-89RyWg)AnC@@c*D8rA6jdYgLv~AF0(gCvrE_^OZS#$UNkj(v#V__3T>krEk% zhEN@9Jj-)DCWq-`iIQAj?LoQALvZ93o)M~~GPM0z7OA-q#aq?3k%ZUfxZkA1Qd4Iw z!K0xlc=al;$*0#T{~)Tqs~Jo73fr8FV#Fip1%q!(i5%iHJh$44JX=P5qd4=LoGoQa zR;sMotG%*D?77ksLRb9^I`w=h$@(H2>+unpiblPebczv=dxa0b2Q!KI{8w)vCBc6r z6B^=gb6hD^%G6VQS)#t$$FkmFP#s%W&?faej4j1>lwvTZM%BA@L^EEkwB^7u zq^I`v^qpQC&7=kQ%(U&^eaT(YXwy-Pj9ld2Q*bA3#z=Yr=UDhF2$c%CkV7A_ExDD0 zc;;A${KR7NUq+_lCHyZ|@5;8=jk6;3R??lA#rM!7)z%+bd49Z{TJ?G*DW}1S|Ajie zOQ_9zM$3KAto7JXbg4zDmx}WET5ZXZsbE@kDGTLq32B?;(s^!5tIFGWMqQ;;?M+@p zp1m}2C@+?!gw=s_*PSs|_28ND8d4RWsTVeW0mXq=<$Y-Qiw z2~FyaJfz0GnVnVWZZOWHGFGc2Pl-iEk-ApKL8$M_+c_xeD*bdV#dADMjf)g{bY)*C ziT6}PKGG|4_Kf^1JC8sShI-pT}#s|WE>(sQ2ty=X75O<)K%s~%4d9KEFv-&4eH;z?T>0l z?n5G7&UW?R%u-Uy^VK#V{=}sU)O$o#ER5I+g<#43uzEL z&Y5r~qZpO8Xj9MU?(y>DyfJOmI}OgVP;agkh}Y6Cr2->huC4Q!H3kY);&H@6-F9@)&j!3f9klYorxudEEPk} zyZ)M)eUVA><%?9Qbry-5_59pj34L0><%<&MkGpG!qm&uNj>goeHHbrff4C5rmZr5T zWziISQfF!`_Yg&b(S&aScc+1m;n-Q!>Q#ify2Tp1vhJuWtLyr( zg3}BaYmq-{ZC?FYOXkari@o`8RnA(T^PNRWA(ZqnCBH|Wg;&Y$^&(kWo-cXu&4vF6 z&&SEs_ax7;tc{+?Ij@lyU?!BhM&~nR;~ey*Oa0cpF4=#!Aa}@)AAufs8Tb#fc?W9DuHt^-U05;Gmo@VnlgDsdYTbhjp~HFojO?KM^Zu*G zFL)lvkv*YoduScVnFF|Hm9m1#Tu|>I^Vf?U#*!EG_T~-bhrWzVuYcqHDl+3WS1hgI8s-7g-92^ZW(5CCwmw3>jXJC(H4{ zvPrgN~|gEjYKvn*py6WZQ7^ag{1_O)#ix)D_!P7wB|ilp=1|@Wt!OQ-*LkB@>jPxiy&YZrg^bdFgn~0muIn?%_;`1DALe-xWBu;sTXqC65Q>Dy!Qtc2g36aVBr{YN&k_|(x;LY`?nzD zIC92{j3MZ41LSAcgceqBy$RaJQ2t18aUn7|hnkNk1Ng7m58-Gslb=r3@H3Fl<^T14 zAA8yg+cGD(IX&NoiWkuM&E%w27Jr0>73?Mizf$zl`I^I=*l7=j`cmAlaf1DVfMmMMr-HHFqO7vkcGTN>>|p#DDk3 z?zD`(;qaHxa3az_86BKXR`d(Ww0$0u7=c92FSMMD)$WHz2IFDOH0hd^d3fjvpzby- z;cw*6J`F7#%Ki)okV}3z@B2Z?(dgv2NaHf7xD#YN2P)o$3fEYfEvyfgVW#$BSmwbc zNBwW$`D`?BPT4c!V(Pzu*ZIig9MEwn&!6L4)&reAY2{rXHwC=igLk?T-Je2!_QS~t zzc0^W?4z+4S?(!1Xyb8gbR>L^0D~ui%tOka8NWmy`||n~I60Aj&IgF;LK?p!1HHHyfQ|&qi+7@w^wSHC}TKyAhZ< zUDpA5JK>XtQrF@5>r<&uFRpgZf}V5uegc%8j?50>`3rQpJ5t#Qysm*c=RJm+j1-zK8Yjear{a=-EH{OhoS!^Y~Gxiu9{vF-uhsReL&$} zc$1;{hhe;I-4BJXKVZ$LB9#-7$5~K$5JykImklbd+&1vCJhE{|FEgpmFA?YqSkY)` z5;-IAESDpv^NLknj3>LP=n|bBcwAnW8$$W)P%p@Xu7Vq)~7`h)kj{(sS;m7`o zSHBxtt|dYliFED-z5fO|M$%6r)u+M#8>J0?55Dwu#%HTQlbOc{6FF~OVv!x8=SV0R z4n?;82lKuYuOUz^`Zwgc9`aoSj?AQHenzd_9pzsK71r_u6dDbVLSoNBiMznKKhZ55 z8HHaot{;hQjiWtQUenOrJbZ-tTR#HhX0lrjdl^8K(u>-+0A0I5!M4NSX^`=kGrk+SR3?Gep^E_A4c-@{=53H#S7df19;z3Z9|Q%PBB!CyxD(Rb z25cX||LZ{Y7GTm{#q6K8qs=xSf!S$4#QNSPes~p+FdBJ{MLMtG|3*>wozN*wvyjw% z#P<&)t7kc`KYbgtyH5I5R;ew<%6BsvoAb3Bb*x-k(P6|jD?ydMcrR$OxACi@!=IyH zqsl$eWjCnX2rZgF!QBq*QJWX*Gc+SzFA`&EVbj3T9mwu!^msQkT#JXk4=SJF=tQ)6 zH|I{`nrZx+Rw8zH^)zScYS?uLYOr1ENsYVmZC5DS1ImssIvk8;9to94A+t5m@^M_V zEYxm_v>NcW1a!G3cLo;Kq@G9NeKs}Tj%1#q-Lfxs8wk4#jg8@(aqlF2$5^ho4OzX# zHE(c**-hNP)*NK^(N@DA2O*`kpl5e9wmt7Zhr(fe-wazEj;6Opa{a*C2AtcUR!CGX zgVbDU?k<)KkqcxV$a)b=e-1f}1wju()eTVdDiPrbs2j`Y_2}|`V&RvIcN@pG?#K3D z_?bZ|9f_*d-P-7I4eHt&S@}K$L~RL%HbqwU1-9n*p&+U+bhN}* z-+j!(nqELU3!v!%us(~rujTV`+O$V`zXppO51p4Im&u^(DZJcUXw?!+n^Mz;;AAbl=|DWfMriUkSmD~#Ka}4aqO~nJwm)Zf#9OTk^=1t+!=2;(?(b^< z^kaB7Ivaz2UZn1apl({Rz_Dm;Jm?;ary7Nadl_`igtqx`U>4~Q3o_-;p6wE7VjVEj z7w-FlcjNap(Ann5$9*KWg_cc`mVR?XVq|l(n*-EQ8#C{|hUCqbH36FD!1*L7nhhoP zbf4jvSqLBGU&nv$hE7+ZyE~Svk{#>%fR*lD=ny!Wf3v9PF)%rW8mE9f_hOt15=SECcaXNbF}_;tb1t-+g$dIDH!D$#qj&wN zuOIsCfxT{op4WqdZNQxSLT<{dE7?bE5t9Vi@AbbY+5{xd?}0WB^As+XolvkorFr-ltmF6QW^hLmbB$;N?(!*ewm^3JmQDF)q_#eCb^pYk)V>NbU4iq>LguRb1t7=q zX7jQ+QaBGfjP<^z{=$861R*)-J3&bg%GU4p zLJA_qaa;3fn2*c+H|}|Ch6KmEm2z@l=Dvqx>uT6LMUFqax4mP|j;5Mv!`(f+OXPTq z*}(0Gy$AKP3hi$qGh^=QNNyI-x$yEHyqGz_aS8Jmh=OiVy($#1P*C7bDCXMqxiq!A z8sCxNT%Sy9oYQ{biR!grV>@$k8gMm-#ZEE%%&#mb*~9?pqU}%6C^Z)?~c&VfmgHT zxIW(G>e32nTh4SP7PDAKRu1Puxz!BeV61+rK`Vm4BdQZelwSt z)}=k0fx|2rx%2j2(V*i_?)>#U?dCXMFH*MSp6(+fZbYr4uWLZhMj(7gUbfS_l>Uyp z$?ixC;eMz+pn833_P&AlSIl?*Hl@3x&m;Itqe0_`CrS-3;UnMVoDbn&nMmadrJg?U zz6m;XBx^g`z|AS$k$6X5yTO;OhM7}7;o4bP&3n-LGQQ6?c?M|t6v{t>c1J+;`TCj8 zaIqZUyA_-1!Z&TiJ3;z`|8eg7yzEtL^D}vwyKg>qn8(gp! z|IjWySCIc47T_I)snBj#BzL;#j$Zph!RBanASl`b4Q~of{qdJ;p?UA7nC;npq35H6 zH)z+Mrd1tHRQ@j_s{4qFM-$VGrx)qUKsLSZe-K(L|!ChCL9nqS3 z?#)2x-AV5T=kB&GhI@t2qdcD<@YL&=F;_gh543miM1n1a_iN3Fx-2jE1GklJ&&%)L zd3HZ;X9{?iF0+noYrMOd*$Mg<+o^@{7TzD^105MPdJptlj+-4NXLwCA*ZA9L&Uaf1 z+cSH5^**yLo$b8;dMDeRcf6DQHQXgTi##YT^MZIsIF1@)dx!SO6Yu%W8j>T+tV?HvS8;Y}=x3vQT zMsC`iv53z)6Ckq+q}FmQaap9hEHx+_V<~OQxkBD=G#|6HN$(uwo4e%B1ejl>b};?2!&iz_eklvzt=i*@v20sPz2zDKD>>_)S;lG6M+^lGvC2K`MJe4G)P zQJ`bs#yLjDBE@+T`T%$H`HuJGSeHT(px+UznQx+1>v`O@!#>7Jl-0R-P-h8b&VZw@ znO|YMB{H>t%McA_z|@lF7wtI{;8XrHI&YTgc%p9p&qSRnKYfXAVk?LF%Wv@>$db0oF)y~b) z=U95?#M$yV$53tNVSM5^i1jM9oa;Eg)+ELHD(CpvP8f$d7e%{|hp;Rof9tj#kQTk1 z-iCwFp?uATCZ)>Df0UlK=!!!ru(hdFT5IgjC^0kc^o3qy`I+-$9qLUfE1T5gyBW_c zHU80(zv8=hMJ-i?>V+&VcCNf^i+xCoc#~^OwhVtq7XHo*Bqb$xmMC{}rLOhL$}%&x z^zT}aGqEzq)zWSME!CFS?0jiy{Vq?^klBBk<0Xx@AL`S8)8Z>Z=e8+lH7pguo0NIP zr&p$3&pGy2<-}ip^IWy7PCaV-CK_$!(l&WqZ7T=m?b95R)~qd9k~G*8(5|gB@~o8k zpYoO#uZT4{f~7Xi+^8P(8SW-w)<1buf1VxL*+Pmo+XZK3Y0)B5TTTzxe_}_O^A=rb zd*RaZG8;0wRNHbCs>PUXwG`Dncd;#7@nBF~se|FSC3@QYMT|uGVP}%d!KQDu}w4}SN8Sw0M%Z#VSP^Zk@=RnjB3*V{fzxbuhv-o4Fwfh z#C{^>%-B;7UM*)qnCNpBv;U}zigJfxHlTVC?aX7^V(_g7ss&1^^vjcH%DuGl#y9`bOURYAx5+tH?$L0n&O?#D zAa*Y{Q?jL{?CKA!PfU3hxNRu=47re#%WNSkr0a;}ythNEv~skgJt^uDCcc3M7c59CIS``IQb zk4Ux0^#$rb^01sB)Oz(89tmP26J?>kEG?L@J~{IrWha0BtA1@=rBCXOOGJqeKlOXz zR2n@;)QbP;Gnz2w@DT~b;)2V_%^I~+EyMFdv0V5Fp3-A;b%WPPo&Ok<=#8v1@`}dP zQ+kqZ7UmhsLF`DOw8?Q$rL6Nv{3D|EOiD)1>o?Ewm^I`T2_`$F<*6B8J}M%t$#T?k z&Z$^Xdf`#pq+awW4{KB&%EkJmRLbQ&5u*P^gYk8dit_LuCFR4`BR%(IVGRaTr!uf) zsR%{&yY!aIN;$Tk(ouDzp4F<_w}q8sw<@)MN{zJDGQG-n!Qb*6X^B5AQHqs< zGVrBeODy3p%ke!ekgcUWScY^c;j|RCY_=T!r?wNJ8S96_$S!ngYwFvQ#fPP+jbPGo zw|F)4vD*8UM&Dzva#5{U87LdEmMF!4Yc2UFzS85CqaTWGT8GryE^E_SN0a)Dp)$MQ z2sx6`>U}CJC8b9cDV7>!+D_c0=+Q+_+H-sP)-D~==D3E`8O0?M5eL5F2joozR1{<_ zg6kkeg)e=z{xxl3TG{w^<2Xl@jWfiIRH|hW7A!~izE?Yo*Na6+dz)Q|}1`T=nlG!;l!LW_P&&#-hHzDRKAHk)I@C7D6jVG zT%n;J)t)xv86s9{f>!0Al>Jxw6J5Aw!&puJTsvd*VJ|&vEwo|B2ZOJSL|S5WqK;y7 za;LTVuHGPlMef zsuz)e{XojL*7#{#IVq94_@3&&)fyLZW_-L?iX-W=q-upy;eXMw*C-1)mJ6@&+(_AX zYfcNJ9Z09N#n)P{6nl>41!G=qoysVE2C;1KCB9VeVMcE?rl-}4Jwt7ZVb2ud{+Dvo z%EXr|X{nZ<_+76R4SF6&36h(=whO^o@FoXZb@~y0^N0u)qhe3KBIA6oQj5f-F|kQ} zl2Y?*DYNYjJ&;o*;k)P%ca9E8xzF_G((cKx*F|FCHk!09?K1Cv>T|u?e-`4NXX?`u zq(EJyg;5rwGrrY0FV>Xzv`5;DbYxs7wMRp#GdfKC=DWOz4iPNw)Ti~PZsjL6Vncq? z%8HHD7F~!fAC?^n#m9(rx$w#$NaUo=5a&7Da}w`~O25TF$hq}MlRC5Rcx>BB`(M&r zbAecj=lSk6)~SaHqWu-_EKSKdePui$=N!2-0yyhb2&?#;*s!BrD&<* z+p|T8wocKe1uat0a`N<;#bj%k$MoxpY=pvmKwcA zM^ztE7wy>QDCuyMK4BuK$T-&S`O&*221DUN`t$)(=2I%7xqRnOjzpvCqw2zP!%gHL z{w*tt{-l8q4-r&R1p?HPUG5>cXSOs%pV=Ejbd`quZug zQfP@iS#CB~>f&T7OGd zyj0G%oLWny63j|vY&eu#Ltd60zCw}Z`k(J9+xkP5e!yp1JNp%COugCf$^CV+33w;N zI|&|1KRw!vCB_;p(N`=(e%gG4D6BnYV`6)7Ss7mSS^1ZTAiaLdPyKG0o*4|ABaV&N%>XkYFo+018FBgckUjj6Z`Xi#(TvBMfTxV3gtO=A`Ko7 z9)bp`wmx5N{6uC7L%jM(#4K&no#;uthKK)mL_!OZAN_SaoHa*Ba_sdYJ+(@a4@*`< z)~N5Xo2-PP=-!-8Ken0}MJu)B$Sam)9nrkh`7PQC#r_-F*V@%&d|SP;@|60N zy)?vMM}P4Sq0`bMgPiHrZMEjRbX4B`jK}gS>yAh8xc@|^pEuwBGM9L)&3_+b48-kisRaE3r3|`8KxItja3qnb2JjUYXMT?XD};GO2Q-2TclC7 z6rEX;SL9hW7k+ZS@6w!yl*i8M_-!Ix|80wTJwM0}20~Rdmxw9RlOu?UiV}C|nH-Oa z?4?3$j3Cwb+7@F-Q?8I+A5=kYz6X~TC-K42d+v7yosq8R zT9UtPPjhu}=SYRoK|HK8UE%?ZDQxk=sWz2oM(31JMUZ@mMXlYZzl`aOV2xAb2jUUs z&4<`iT3T)^`Ku=UXl_hvoA7*(OBZ;0YS#Pd& zg+tHqsK0&at)u1WS^E6nvpqLwX~{}AHRM-3f&5xpbQ#^KooLoiM@fyzm4T6*+EYT2 zRz@5hxAV7LsGqjhUFyA4B&K3T#;DGg)w)DjkXQSfQk}>xW2!a!wol|NE3K#M$U3vD zW^m?l$7US)%>7KykX9oqpPuKjJfqcMGJ1^%jfA5qge$~Tu;Q=qBRw7y z0j~6_o^7mKf9|S@5T;ucj zgDR^~pSIIEQf+-ue?>C-fk;2^((jRsSW9K(EeAgGE|v8a6vWR;dr%M^$*ET;F(2VU zUgEozdr(z%(Z-p_qZy?jmgQ95@~8+)>4}6LQ4jt-$5CgW8G)#rw0V@&ppUh6i?6Lx z7RAyg1@#dfM+TPSBS`-78SzqHmzf}GkAf}Hpd=#U%+_}1oIOrgMmkG6F=p%{cL-9i z)J9s$s@5HDL`f)3D-)f^cjQdp^*y;yrv2)VosVY^)%Q9gA}`9$7A#abKihl8(v}=+ z+MAXWni9D>i?8;2gV^{_F<@Dsk#V*%+1RJ%2owBUPTIY^2C}iVJwvRTJ`O zW-zHr56pKhSrRxZQ&q&HLM4Nbyy@>DFUD{%0UK7W4YxN>SME#6gJ#6nVPj*25Wi$C)m>9ds#)k;&ZFE6$S zK~KC^d}ypkI})#+Q{$Snh`Gw^)Rxlnd;05DUt%m4FKxc+!!qMD5;x^uaO^|$#X{nr z%XdgS}1r5eE+JvD@XQEmph_~Q1 zZL-p?J$SVvj{RRb`>Dj$nb%p8kG$(|d_*sKPkoV-bjwjttbRQ1qfM&*n@4z$HgjEg z5LF_wBH!=w>6L9#vt;eN)+k+;6^g4}cr^7WyQ<4rQ)Fg2l}g*>Jk)-Acd<>aO6lYw zKPfBoR4m)trO5YMPtLP+twGFLsDTh7jV@K))Je&r{c3Eh=%kB0~C zI96?2=JDF^OnVu5QApt>GM2(fGBVBYXxrL6S~&^lawI_elXrPQjP9IS!js7tU056)qBPRBm%Uzv`eF_dN8psm0&5PCq?A z*TfDID@4y#B3e#jnYODfB{Za#N~_3GD#}C|r0qxx6&d-Daju_<-ZI*vCL;$WR(*>! zT6WbyFz9a|k(1x5Zh|oXsTlNJOG!%-359QQtDe&aRjo&owFb+sc2_B}^y*2aH1q~< zL1y$SM?pyJ$6xhZ>?!`K@+vLyq`^oeVp-M_*~p31SM&z~l}DwZeQWEU70&%s$MWmH zeh;$qtL^I4lp46GTxA*3P}?;rPsRkK}(9~sU9kL^K3bar2G|$hx+_V zox!bgl#kR9zC0^(3609p>r=1wr2J6pD2UR}d&=>>mM=GL<0`hywzX}tPbravHTdw~ z^r-z;3avfzj`T{Q{HM&kR?NpQ&zA?w(qbxymTU>W=l;9zDZO&&|2d*Im9oCr zNGkc`#Z&e|@JwS+&j@E~NUIL!#6*04_zOKLTTkaR{71ggp&ZLueMx(~UU&@l!?XPP z@?lxZ!?SG1tuxV5YVkU2^Jt{Z*V1k&E9v(CT3U3J*_}=(i~fq<eP{`eWl4|cMb`1VN?R@>SO2v>k9l3ZYHTdOb0oEA zPN5XFS#C7xF_9imVQD^6uD_%}tEsiA6{Ej!Xx-t|dXz!6`p6^N^Bk#(SC6!UT(4Dz zv8TwdzUQinU`vvgXkC7L7`A z=<$k_Wf|5dYJ#dn_gb$bma&sa$ukmhXem;xWUD-)LwTyls^?N#YTc0nC25b{KB^Xy zm{jV+XLMGjV=eL)i&VaTFDL(CJ<&oum6+1YMh0!zwa%a}^3m&9hVSt(zDte&dv?bC zgI8rEMj|2QA+_;1TDl03XJzESULAzx8q3mxJtt@Q9-T^kp6bg-o0Te0rQ!dn#d4HE zJ;IMtW?F(sCpz)E;LB_M6^wg@wRqIlN{>+6CBH?2LA&qP6G$fsh)D919*{^6*vxy1BldVaIh=`+kh=jucA zle8nJgxNW|kq4*~XPCjn(ai5kZU-~dnMdOjew*vntWfhy$zSr%*F~G(QGPQ2InE{j z=3ZEcV`lepG^fdx=F>G7|CiKnMjA8wyW2}=a$A_YZv|*vq-410zCJ@TErN(Q32WK;T2smrX1=Ae6vj2-4j`I4x~92d)wnZw*+ zo#EFEL1t4kGvG!gt+%Pxfs+8c^m1QbX$N0LEna;d# zEAsto=y`+ONcWP*$*k_Tk)!f)UgjHniR0!{oB~xJA^*iGvnPDI&&Eb%TIx?0CNs+S z=d}e{oy@(|zhp{NPU2U8vM4q6L|47JZjHi4dnD|*vny`?OBO5F>N}4AUo`a}a#OkY zffs~TNb$~|OQuFP-jb>h>J~gGB9z#BA z??G~&jw<^{+=pK8g0}2!Vs^bbMQV->#t$q4LbRe)sl^;%Tb4X>+wskOTAT8@Iqw4- z+aOi*gPH$SX|99()`4F0#+VPUGuC5HqE>J`kEdCE%tH7Y&k5uUdjhKNgO*#!8J3+b z?t#{E{4*YjzRX#Zi%pm*?n7+FEO{LYRpxHAHgkTNv36r<*b+*%CzsexJO`HV+i+|v zXy2IE=A6}^v)AVORiLarGBcXJ<+zmZ9kv;dHyl%w;ZYQtVeIU?$ z&C>le)J-ngy=Gxs3yLQ)b6t11UkA*aqf~p?fOseUR9S zg{HJ!-di%0mbvcCZ~7{fJqcB#dESM@{$21d%G{@8RKeaD&d`6DW6g|C?t@|W9)0L4 z(6$`F-8T!FSFwrt;k6|+#y203p)nR`~eK>d$mpAQsW znn(RkD7+t9^&NUOX>%VH^NN{0&b7ndOVkqdp=Q1lZv&8z8Z=k>_Qeu*fzs`N$cCrv zHbi#)c=j!5>jr&kcU?zhwnVd;nx%0H@_L@9IVK;47WW;xA8n38zoVd4shKbNIW($g zn}H8;PZ6`zCHs4DecDs8|F z>gJm@2KyG;KEQjtLrt$2ui#!y+JVTw580_zcViieoj%0#N#y1pQs%5T!|r_Sz^KFA zVO`M8ng!j~yBV4k{W}(_)U39-HAkgQ&)1)`&3dR8b|&}E)BA7-bWUs{6c#pjB% zCy>sAP;?uXa2vL83-5REerst@&4~XTTucK4>T?11X-3J;@NEtHk4>m`E2tVwe(>FR zx^qIFyA{oDSLiao;buj0Yjf4AJdJ&9XIqFY^lGz^fPP~fb&f@A?%Xp9U#nlcv3Ucz z!T*Vu`v>1|Lvo|g^#r7*K4*ahWoDdj)^S^$bZ z^bbOg+x{TIEzzsK&HUHN_q7y0_kZZpjMwIcd<89y$Co|{rbZW^@o(gH2a>v#ck`+n zfjopfpF-c`p==tICD)u$!t#{d8#MPTZTJ?*W+&vdPkHXk4hMUe{PROgi!WXJV(r9? z&hFV_{G`0>mzgDQ9;Lqt{>^4Nf#6gCvPl-$lpbLV0QW{h1My0pyXq+ABd?2~+j&oJktS(uaSR&73xWZbFDHcGi^ zl}2t4@jeEWxwpwH#s8Td-^`U-f%!I9EJ*8(KGoG`)IYdTDEhOf**;LV7vFb4pZX4W zQ?otD-b}`B_9Vq&ZKtL~+beiBcN=>gS`%-Z(O6Bay8psj)M-TPUSoQ;J$dc~`qB>Uf;2Y;XU0M6aBgqpW-eN@#+%t$e`bD6vm@FQ znO^L45_P@=qLk1h&@={38tINHbcw@9d8*Ubu~BWonDPtSQ12=%iC@%M zr!A^c?^ynw$bZj4nK_5Wn%5eyxw_x{l*^a+L+_Sd1C4jLDcUunG?sLCI`wJx`HkU0 zZT7%-7p0!d%p^ z@iNz?vv|at{JN83vIHxQ{@BANywt3b?KV8kW4;|nje|Er#=ZEq7E*IRE3-RGo7w)& zIUBspEK-|>U(kyvHzj9VdOx4Ww&L%ZLalzyobG1dwkMvknZ@9Fr4rqArM~r`LH}!f zq}=Q!7=x(I%?s*+we`?^U*x7fJHeSc)q~iVlCoJy!QCHyzKXAZ7TV0uJC1L*4^m~G zUR#Xu$jyDs%&KkfQFkVC9L70BX0YrEe(W2$*PMMkrDWu7{Gq2c_i%bLMnzKZ*{dP5 zjwM2HtirJZ^G<$19qwH4CN}Ugnln%EOVIW>)V&Brw&wP=oM0 zevK74*0B_2o1L~R_1G%dcUh;{sk*c!S6=CribUz^Rh}zhpZYc1gN5*G$*yTmVf%V- zfSlK%>t$*V9ri|_LXXC7=I?%$+pDa zjw}95tM&QmZX6s%9)T|Gl+{wml)W$^aUTCky9X1C;l{?MY%d-vb2UROW zml;dVvYI}WeNT7Ue5KIjxWQwzMYihctJ@OTBS?HZ7JGOKsp-q!ME8jw8wDH5ir*6{ z)qd1Kq%yd)N<*M$DBt$va}RvlASgArwfNf<|Kcc(yQL_xg^AJZ+nI@b8Zt1Rb@$Ja zCHna{QQCFvmf}vEi68$(E0s3tadbTmDZ8hJE0Pw1uJ+(#Wh`Iox6io+^0H-DR(q7z zd{5p7BQvQ=k59VPw)-jREjkoGW)^EROaBKv+a^5?O{1aa7V5u?c=7K%uP1iAkt1gM zPS5ix&eT`D!SzMyq%}Jl>P(Cu7@I9^M9dBdrmJP)oCDc4xZVOqNXZ>a^$upP*DFjcwm%kp8&UiV zN^a(P1H0Z_2YvtIHL~FSY3R`w|HF0jkdb3lj$U?!$5klXe(iwb-R%`^OWj(Zd$sNc z6-JFl9QM+U$p&yucQ7ud+)=>{{}UPL?3;5VP<^VMSa@8c=Wjy@kv+v70PviXvw#kOX3__SxO z&*{atenlf2P{r z&!NHW#WSeI_|4dI5;eQ)jD7!S`85kPWfu;64~tToJygAgHQ2j%B*_-mn9}xCZnKk# z-@0IH?)~6sn=66MbL?2N`y$MPueacF61BVES$4a43jg*r5^$&3iTpPOD{(Z~5w>JH zm)rHxxBXyy!CQa;cgHmP-W{K2Kgv;GdsO-l?bJJO_M^;yZ_I6dkKiHf3p<8(7x=ps zE4?1uxD9(5NjqQ*|1@;GiiGAOFUQ*3!O^PJzb-Xvo%Tfbz)!eq?g6~qIoST)0rXb( zhnnr7P9&~_Ub;fZf1zP6G`N4j(`fr&c&qE#m&<+ou3#6^3)sW&EOybm6whJb*Zm3} zKoe7un6X!OT>9Rr@e~8m$Lip9$;Ri%;5867y2$?; zxWAM=V%;hC_w1;6K6`Lo2UYHqdpk0E0ULN9xj9Z^i?TdrXleGYjH29C+DO3Ho~5_w zZn1~5hoQSlyOZ=k@%@r(}<89aqG zxLeTIWz^m=d!zoIpxkj6TiK0yW;E44tC6qcNWKykY{tKiz4gIEx5M&2!Kbb0zeCAAXxn{(-8*GAwz4qX8Ubl-+M6w?k*uRYMixGe&-B3CQKu1` zG&yEv9JdDaE(`h>z{Lz~%^fzMK%@W007X`|t{!Otu3HI_Q=-tq!x zyPJS_Cmhpt98?@Hj$Dl|2H~lW!9qtgu54VzUZ`jAbob(;*u(C(Wyj6o*zAVT*yQ@x zk=dmn9$2eEgc%Ttc`mY3w4_a)Z`$@Z4@8CsH2=x%t3-HGo87f)e)(+_If zbC1J)nA}tR`r@Il$6DP*-0^1b_<2WYEV6!!$mUbxrWLu)k#5I^wx#|K_?l0UzVVfP z>Di#I15~*$tozUJg`cozs;}6dR>Ymx4+aOn;``Qc&>f_>FRr`4<_^ze#Zrtk9T9TZ z(3^n%ZKUXca?~Y$|KkGx0|M5IeZCup2 zu5m}>fyTJTbB)np;!L!(J(zcI-q-O}Hy4?o%C5KWH+u~G@(yJ;+#$`K*(dk}T92#H z(JP?M`?l^P-VW)_1p^a`eZRoBFR<*Ml(|3n`g7yj#yyP(8>1Q{c|E}M;l^Xs{9NO4 zsJN8&YbSK|6-c@tA9X}?kLC`|?VH;)w`dOJ`+@8Ud?b7Fo{Y!-3z)dG=wKE#biz{g z&3cG_Ai=vrM#a9C!IIR@-n37@WtZfuq2V$<|HQ9fme^q!asQTFw=PIszC?=ef#%zb zr#y|_et!nm9xiMAqj5{)w#E&}=rC}w0lwm0${&fxz8VYA3XGlY z@mxlmbqf0t4`rw3!=UX?oHGtBe@1`T^)g>!KhsP7H-pv*&^Vtx7Pm(4$6@V%Lj(6x z&)*x@pzq80yc6lGgQpvhK*3+2XESW(JN(;KX#8jBeAnhC%`MUS-qbmi9nAM(f9PMZ zSM?dt_7J>&)NF_3?WybuhdUyP4(yFJ3k*A!GXaD;hO`t`xE25J3Gc__1rDXAqrlq% zVB=W!BK{rm!;$3ENC4Bplm37;ZiTj@^d zejYyf8sdtdHn#;q`yiz=u$YP1s&=>qzUWkTUp^D=N5cDyjdvPfG=74+_^R<~V zExn67q2K)uziW2K%lr<%JF4+&RtLAR(iLD*DL$~|KpGNd}D-!q|4fjTGMnfASho2M-dVkS7 zchAud&qx02g3tZ%^&`--&r6}_QlxMND7XOx{*%{L{OkVI!@%_7>>T_GC0x&5&u5q2 z>W{@Lk7Ot8ok7HgNIgFxK~ zxV;p9N8*QWVt?{KU=v4CqoaYnk=*yie@#JZ*AkcizF5Eze4hJ}A5(nK1;rP*XS2J7 zeu{T>&m_lq?3+1~xG*;8$Zq;ruY(A8bowv5pKbwF$FURm-Hn$UZ#Skl-e^q1?(T2= z8_TQrXYiD*N{{u1XgZSy0 z)beD2%7R+V=yH`maHjzSo`C z{|LwDg9BTGtNC^u=dDXm)An;5Ez9M^7=J2Wb~qT^3HfggHNT{%bTvMC0`)p4C4Eyz zj=zJ~*&ux!9&0pbID5pM9OvSZd!UJZso@Odd;@%rYfNd(ZG1zwerd4Zt!0^(d3fI& ziHvp!J#(;}E0FQN_?Yg^#lZg5*72>+wmuK`=e90_C)f$!e+jirLCWoEtJlY?dRM@` zVC^YnF2`12dLJT-8g=~!yFZm(-Y4=_ZL+H-+=I$SfZl{j%~Q->vCvgJ9s|? zxu1dMT@T{Mqx<(8pEtg5EYY$QKKK2`Ga&FVq`xRF-eW|T2UA~fP`*&})7IIo(^@CP z`Rvy3Tf2aT1EJs!e2hB@Zv@u|z~7PB%y3$j9r1te{_Gu)#c2nf$^PYGB{r{h7 z6(58G+uQGH_p(Eodw+UIBRg0%X#ZBD726$;W1Z)MwA&hE;C*W2UA+E6EsM1*((+~F zb>wj=vF}b${SgtxOUub<1{eRio88i$d_W27D=nN3wjnW6v ze>f6codEs6#Jg?>^4+tvQ+c@~nR_z#r028==svV@8u+`O*8jQ2G;Hpj#$5*9~58P+S;MntGQ8g7w~@ymU%DSf686HE_e%fiL~eI z-4$am?-SUAa*t2LM8a4iJ}92ari%`rjmkUOTnBY0CP#<$0z z`?IjQzhULq5##;~pL0Di$2oAnKNR*XwZDi}U*7y9US|lNcD?4B=)E7cZ-?L67u*@^ zoI{IzFZMYVE3;?mJw;=F@2IWE)4Lju0()=6xeEjMbdJxi$Yno##7Xdc8Mc3YiE=J! zoDC`t!SbbH5fCt)vPWV8r(@@bBlG>K*|u*_Ui&tGUT8R%cJWSnRj(3py3d|7PCI}$ zXUS|>5aBqzs#!N8?NqW55@_Iuq$-mwK|@H=zOyR+_**8^(Ym)rZ>;?Ef| z2cqkf@N^e8F2Unp$MYIK&nvOdPr-}*?yrebCg9uuMW4kU#hw;}&YaQ`h4PgiOcf!-~5 zPL#9B`lEeYLGMlsqVAs&?;l3(7gFQRjl1aQK1}TMFy83T_@AG1PIvkmuM*Mxjd=P9 zVw|n9yk2~eNA|E4B9b-J>X(*-go2ur#$6;FSL6& z{{Kj1e=`2(Z0frJo-ZK=JDgT=5Oj8--JDK8=0>88fR9a_XYoJVud?%WH`FN zgjVT6Wc~quH)tD3O~Xom{ugj~5dQrrYC4FP;BdG)fjIa#==*$R{wL}_gYUnASLa>~ zL_!^jQSIU1kFL)|)5EBD6MTIC=32y=TVZ$GV0nju!wZngZCL#@>i!CeuMVbm!OuB{ z5RHz2vvX)$uHbbJHT{{-i%PwJ;Edlu<;Lj9IRM|Iwds`fJT`PKdj36a{V?P`m{xBG z`c;R3xP8$41+=l3L)l%liO%SoLCs6imam6J=}V8tes08@Uki@LG#&*{H{w}t=g8mq z=REj51kLmyE^j3cc?64bZq1d%4yS{yli=&HQrCgl*!lRii+PQtCj0F7@i`SVcvr;r z0^W&oxBE@e^Wpfi)9~EafT1Ueq3`4UMcUIxXh&~@|6hZ+-la8rhLY~2Uw#_evzLA# zt>?CQlf$r}!=d1E`lm*cFQEfR65Wyb3nV-rkFqpbsY^AA;}m(D+Vxu$3D#!N)`NLC->>I}^L?0BZYSxx4cGDRfw$=yeXA`&KT6&37#G z%(NnB)2@ae-JJGvFM3Z0Q}5x$V>vc=1~p#+-)AA+3!rB!yz3f7JQL{OJq{OV!_zUy zayRg^DSq=XUI*c;oOL(~?%dbZeQjMy_ytkodw30JMRlX3J+OqM!0A;bF1-tVK7dxQ zL!L_XLJ%~ZR;3TLeu|xVFY`LQ!ycto+5^O{308kz{L+=w_aqW^H0pC|dAE4RSsa;3 zd*N>BpEg&3@_|V8Q0(wtv^T!-CVi0EL}fFH#-60kbFrXJXkX`mgsVZ~@38xU$Z;#= zxqNduV)8y%$gUi}3f`umE$8YR_qbzpdpwC_->+key?L9~?pky< zoU*sY*DX)Hu^BD?0MPPR#+pWBr|mg&D=<9-kG385V=sKLFt?b}YK6RK7bBSr`_2YJx`@&8%?S9DGq230ww*>->K3J|h!oJCsPoTj!sp%W&=|k&2986q-4c>~rUZtjy@Oe7%)fOP~6NiP)DVavq38uR-tDbOchENW3|oczX(C z4hMjdwTN}^!Tv8p*C#-g{n$6)Z3EgUZTwNt_!_+Zje0Lat_@aoJwm#T;7vn8E)AP9wWDP4LC(kz) zYgwnI6XRtIwJh2)36H-YdRw6}3C`}oLN7wsqtL7O(c1IRV30Z--}wjnV8f8g&+s+Q z>w6vv^k}wcOk-y2O|7F_TU)!s<1VyHi{M53<7>yzPTzr!KWDV$-{4CRzYkG{_j)@p zW5w)PUm%0;hzA#xUa5D-9fw$twyqB`jcbYCMc#kFGww%S3xS8-K*!cZav$I)K5MRz zMo)*X!;r|0c)KCIPT=Z|@J&CX9p9AL{tz@_tg#uMVFKe@bLi_CF;AmKToixmDEEhq z`8iW~1PIs-d0m8GJO}wN!j)aQ(h-28@z*EvzAMp#>jjp<122R9^vA0A25l!&)4rgj zBk|y5;yh!qTd418JnggK_if6%7oYnG+PIil(Ami2pk^6bfOVkvSjs+@dd@=1J79b3 zQ&(BWI0_qi%P)pN4c?cj?&DI&k2+ zq`|ZdKSP_|`Q8mrLA_{mD zFZq3Qbv)J1v^N(L4_*b{|H}K>pv1XB{gJE@_9xKz0ygjwp64~nb>*Eq8nWWL*5xgBXWo9jaP5O6*bZ~Hplckz~1zK^E$yo7rC5}7Q5hjO*b zQ_yF0KLyUmL%nm2?nDQ-5|!UXG;%-EzK>tmf}Kn7GZ(?zKkysVsbyt6+8~DElNLn zckq8D|9#mU0Hr(90(uYRAX@r!=?xx*R!_zITt<19Q0hIjR;OUE#}Y?7p1DvN8F>c0 zJO@P=({5}-&-i;rWAADGXY1J3Ij!HdE=Nmz0W$osxeDmGk~n1+V?3Q1>-b5_@-54? z%!h7AJzu4C$Dpn(@zN?p0t?{rA5i>PByj}o&sO;Dg`4lRzQ)+cORW#LKHB;geeo|_ z8$`o*BJD*$;DpA)Egf67Z24Wwh?YZJ2DR+jvIo9zKBG%h@fstb{zPngEn>jMk-hhG zZle63Haj)HVN_#6>vgSXw_ehEZ|kVm+gcxEY_SXN>;ZVMkD9AN{iw!wjn!J#YZ=<| z$CmS2j%zun<%E_)S~h~0d3d91@DF=|+#a-}pQD`#SmW=I_lEfAX{}>gZ*9Gz_59Y; zTF-2~wDo4{nAG|cVzNuY@gn$@827K1a?btU_w4^Xzi;j{Gk5OXyZ73w z_u6Z(wI1!fnMim=Eb3EmRUXEEmi^6|)ERjEd@x>)N8actJiiP3^G#wW2cj7|qCLH* zlN&GKM__*$dS1z%qa3y@Mf53OIvd_cb#^^%@kido)}6)gxB}hu1ROFM?93vDGcVE2 zAF`VriRRKnFcU1~VOB|Wg*W1I!A-V6{V71;S?W2?X3C(k zuV8o41sILc4rjgx;nBA2?y93h?OLCMJyUI>o=wmacQc=P+@-PK=KL>(#?Qc=@1bp; zXCG}w;1p!deCtJtN52hiauy4C0a~j89z%QdmnZ#35X!+TrGVJzQFUIc2ade2c@eLk zMT3SDaq}h2uA6~usw3CpOPks6?G#V<%K}@t+omNd&bPM#E`_3=4I7#9l-W!>YeL#_ zF2b`l=W8yoehAE-_Dx0GOan9KM;t^4mj#MOXtBFkbz5-c*|9e?q#E&c!Z;chR_Jq+9|=mc)MjiySS+auiQ(1;U^3kBxPj5kDWgR>H^n z3F!a9b{*xFZ&}S!zKgQD#puiGjM9ejs(_6Fc-8K+y@hoRvtG{X7Qg`|d9Rsmp2g)z zZHAWmhco!Oi@nDtcF@a^&)raW1Cq2KO>mCr_<3l)JdD^63>AdB6Nu3?hWmRka$~5H zhdDPf$^jtT%9=mIr&@_WY?jgrW}3zvdlKI9%xxL=#d~QR(ZKszz;gc9KcyFGH7Q+TLMK@l|e)CcO^D0)e z8gyxeFZV8XW+#5|JS_1k?Bx<-KEDxtev3J}B9D0!-8Tbo?P_d74aUiyUe5_jP9opg zum#t$@4K53mxB9T$iM*LT9(?EDu6Ak7S%?x7Q?owUH38W+d$h4jlCBC=`nQa$@pMg zlo990^U>4Cv0bO)LU^6mqw~IiX64|YZrG`VSh0Ljt>}j6R_s@cs2O9YuwwJjs(s+) zb7;=@@ZPInwNAua<1gd)u(*pDby2*BxO`3KdI&z)g%-IOjkz*)4%?E0bJZK7j?v}O z#hkI0j!vWwapLqfd{v1N*W;!4V2yjRsk^a#UtwS8#T()?ac(eiF?#tUb|lBr#o(C< z*zgF5sztX&J%F%v)HZ4uWseSFQNBkzUxx(l#i#4b+8pus_;u{wEAgawN<20G3v3o+ zhkg(IdK|y7H8G15oc-2jq(`Em(S6a~(Sum-@=-x7>vp05SE11kz>5P}*9OO4-s24cgfqg5BeSR+*AH5MxipE8QqIP%&g`!Q^(i@SX z<4AWOMoi-?s#rIn{%2u34DjJ$H(JJc%pA1^Gn&)_G8a756?3% z-b0J%`lux|zBsBBoyATs#Gk9riqlBmFd{as*cl(hH(49+!0%ZA&y<5RFCcF8AsXd3 zBA#v8MZM0ha!0CobSY!CgU(k+O`|G_PdgSHTmilO3*PW;jCWBw5Bt&$ta3HDTM!@S zJfj2=n&EK3Tr_uWBw;A~zqP58@L>Vgcztv&k(2k(L$&Zw`y#=M*@@zwQxf5l_kK(wSRIRmw#8c`iQrJT_+ zJmH7nz%)M6i+rX%{!0$djq;_Bb8>ZpwH9M{ekFU%x7n%v#U92Cfqr`!GB0Bv?tnaKhpF(^3gI~8hwz$XFdj9%Ye%gL|gi!(Y|D~%ydnB zk$bRRUm>Tn&@{VP@4w_qY=U=I5ZfFI?Ddh}pYUr2!zpEm*i>T7vq*7iq^}O~+g|uS zQ?T`C(v_LHHL#83lXKC1yVy73pe> zRUYoWg1tvKDE>B(9Y*Wd$LH$6TAu_%qtNwJkm32jxEx5`-w)%zIa3?3yScLm6Q>yQC5P916znz}{DZLr&n? zd<+!N0p9?0$L)L%V&vDc|39E#&tZM7jnN2?p);29R`|sH=!c2A^u;!HL+;w+2NuQ( zpMcM2Fxq53{R}ua6MQIRxwrorZy}9N@&;6E#^{PRyAddQ0G%hR_wbrGup0waeyq8x8>M~)9fK@GH-KusUst{OUCF5zHemg&Tzju1m*DZ{>7X2 z&W3Plbtm!|$K!(};;3Hp3+nY$%nJ{kQ zy=?EaPX^kh_;3YzzuC2S!>@PaS#)5`uB`N0R(BJ=fjQZ^@lnjZ(AMYkdGjZ%jIQ_Q-4IVKCbNe(Kikakh4A`TFtra{ z6=4OAdmgwtTv2gg&^xQS?%L+LcKZQ#asGj;=YT$cZJrG*#MuIe_Ix> z-gAQiiOiTq+6A3)5j&m2?AT5x9_ev@u0RJ^jo=H$vX0MOR=WoOcpEUEAx33Yn+u>{ zM|{75Kr{@Q>BUIi3oFK6`v?%3Wo!)YM=P8Qtvf?ZD$r(~{t~5p=&J zk-H}tYcM|5Z9rOr)g5M(m8`*<4WIJ)*N~Fuk-f3}H4DAC2AY~XZRL%^V5$XB+=%o( z4YnRduZ+Y)Z3ng*vWLlz&$1hAc!TfbB#QAYJKGnNoVef6JFAhGLyT02^_7DUu7K0! z^){KSN#nj>N%bX#0i?k**DK)2Mtrh2W8Hxc z><9h2Lxrn>syS3lv9Gcxz~{guFO4FfYX~?SiFTL`ynixN26!zF{TjjxP2unU@KhJD z^f=Fq#9z%`xGL)}3igfJEeGr4;eqF{kpu7~#xT}YMp_Do#z z=uH*x__ap&)Q2k8Gdc>!HiGF-;q=KsG?1}gXSCS%SvB?za}Hyza{(0^$8V=Bs=kz(5)3~?9PZC zfwDQ=}3rP?+lhizCz_+?`E7uRu1q^>p7fa z&tP{CbNJ1+E5iGX-dIn>dKCX5QC4R0c81ZE+`MA6+8Pl5vKH@JiZ$y8$R*yQ^KNQ+ z_0JrfA^c-*Di{Ue1u+ZUx053`{{PGpS)PH+1fAxeWK z>u(%olzoijU1a0UtAT0@kDdJY1mC%s-zZH@w3a;N{d6;H>LSH8SYIBryR~|Z_HPHz zn-XnqH31_P))ZRB|Gb-OjXH5*#KwwZp|X^8syzO%lzrAN<4WWF%Wewg?|G=7h)~iyQmob`alxNNI$_CfugafP!QGzk8Rbb7m z(h28!YugBsl5+-rI0kOKf$y!Pb>MvkShR-UKR{-#Rt_-cNaD=8AC745jJIV12U}Ut zyvZ1@IL)`8+|7vlcou5*9YOC|`!gppBpp3_wo->x0PVozb8kx)fS0}Pj335SQ-L*-m`i#J-7=d3O#)@`)cPWbkAsMIyuWCpO~cxTvq z=jJ<+$GD_Ks_)fD*b-c;c0fv6Q+JP^?%Yi)Oi6r!a$c zWdggk5{>*GgNwYOevGkCC$FjH4g;lB@fNKWKGhcLDY>j@GID^-3WVo)pZ9I$h)|2s zbvdg3*T4Kc1m+z381GfrT1l`Vt1QE4rJ<(}HDJE~TdjJ+`k+=zlH1fAVkp$T6{47T zggTq@g|TR9AQi29V?|5`8k*Aho86Rdj-c>K~tDW%7UML1lj@E7gW~%N5=Mcdb_2(k~Cy zXlb0sSpkgc{hPi@Dmt%C2&% zdnu-6@zmhOYT?GI+8c@0#vS7{HP!EGoDfrJUJ^UTK`EIwkD7CQ#*z}SFTa) z2Ol)lIu5+69NFQ_>ZtlsdUlSb?`s8BWn5ZXk4vb6Y|6di_KIr`_Q9&V0rRd|-dA!% zbtSnr%Vx-D!A?mEi2o=!+{-vhxQU=s7 zN}gPy-U&EzeU2@awE=2PAr4iyohb|N;yeqtL9Z$`L4UYzXAuj|rQYy0|5CcdZQypt z^Hp_8fIuAj2()%KIY%msBk7_I6MJGRK;yfWQr{V*Dew$0Cu<3I!}SQ2tCCLx213tn z=_sVGS6&dhKoccXd!merzfg%=ii9e7N?)*sK|%t?^y!r{&&KmGqw5wYfwRMkeJ)Hs zLhW-oA#0wX5yXb?_C0cua0bk}GFR{KtV-xg)c^koydtIk#}~ne(!*5ONiVrq{Uj`b zD&os8F%k5ivJoEY2PIo>bw2I3cvhDGM>Rh!ZNr$(>6bJOa7$sU2!#Jg3Fnl50%csU z{N(?AxB`C%o#AYOCqjqDAl1$m@Fjg6TMP%RiMcSodcwKHnd=qq;6A7UkFb8S$-m@5{KQq+fdk)Hy-d?ru%-tdm_DPPOdbMl{~ zWI^s4f@}qT5NpbHSXZ!x+AhDOp|kqikzHkgO&L)(Pj4=@Zrz zq}AENsOnX5nYCiE8e}tzvH|CQLfC{XV98ek<()lXCU9bqAUP<&5qQ&g2#Mo_PXtbO z&C)#Z>Hlnu?+br9p8OxU+Ijttl*po*@T-BOSg@g4mN`gxupVKZ0e|8#VA0X#1~q)v z8pUCdg|H&IH^@oWX96yKJwPX&E`zkW98&VV&npCv&-!ldshXdWy_z>zo(&`WD|SooZ9 z2TF(a2dnRT?9XZ%Yc~id4@==s@xjj(9=gt~laizX)ghnhmXOIDBa4xYE9znLmg|@#QPQyLCSiB2a(2MJO31OMh=pW_Ks@Q$-Fn|q3^Jx}0maThov z_@d&?bp?$f$I7cAx)q`%#xKN4=wU5pLd;uTB1HN}a;sPhw3q$??`o$YV}bgC^Q2A| zZ@3=UAxwVCcgqc~TD%0kD*b}q4R%~y_=&&^f$st@%29Gw77l|9W#Kif-2dr`_^x16 zg7i9j;BH|Gdux9O4I4Cfprz{)=h9f%gH8&c@)OFGD+sdaI-JM9#F*F)9GA65wX*N< zzggeDCbs=@MM9SR!8-##hgJGHXY)0`oL88`voNcWgm+8*z_*U)tK!6W1x$!#-x+$j ziKT!|-=XXaxvP+GT!)nK%hw$vjOyp5jXWn*QrX%3+f@Xr2RH&e%7-!`pZLt#d@blF z*XBrpi-H%b7Sf{%EBv4S@D*PEzb|JGcyWaANC4(Na&3??pJizQ*WmiZO;}x)jtL`$ z*h$t(1ODVj*Bjm+{2>35*5W4Y9l;D7&7HpQ@GxRx+Smh1(d34aATx`r@= z81&1T{q+B!cQz^O?=Yh8%i3${wTL(Mi<(D$q#e!jUXJl<*gMFB;xxeIv%t^J7)Ew2 z@(lk<){x~{ICI!12V4a|%asQ169Zx?XrJ);!1H=BfdYXmggn^9z^%^gXu&5_OK45i z`<`H^`90Y*DjJ@tL&CRoQfdQb#I>i1>et{s1zruhIm<>F-SxRK7(EQ{vAJUnQG0*u zMaXB49PF$sG&bhE>bR^pbg*4&Hu0$*2s8+>;;fjcXWX80d%os*gK;-s5eBn0%(C#y zGf#6aoXJR+XNls$2(z_(jm&xf#=o>$A^Ptbyr+>y*$eS3L@|X_ehFG3>>-s{IYYQS zr8CMc9N|?@bM=;j&*>*!vukxkpF5{#HA3PUfmw6T>Y0K4*^I3Fs%H{L>BNek3wwSs zcD<*p~Dil)9|9C!ZmQFaG(b@-J zD)6kiR|Prou=aCt&cDqeh=duz>%2y3|6@64N9o>`s`mBTJd9cL}+Ko@WQ zne|~l!=~i)dIxaWo58MF!n2wGd0uNCg*^a0&kVj{u7oG@CcI(Jf>{OTa)=RsdU77P z$mdovl85x`!!A-Spr5GDH52LxaM{Vrj39AkrlHlS?70xned_N%&VtD)ZYa=jPiL zgsUp>U!e{ivD66aFgr_zY_5agNV(sWz+p{rGo8E#X6Fh!2AIVZ`V$GM{B1Uxx4X^x z2pZXwe=F_SO|2~SG6%+5Sk^(eH=j|qLwg1`#Pom90R@#DG?__>ywgs$si&H4}@Yuz3J2)NVGvVQhj#^!Klzh3z z?n(A%3Y|f#fD3E#n{`w=(Mo2{c~jC{B%hlUcRX*V%X=TqtAukUk zm4Q`^3Y#|1Gg9@GwpaUU2PUEkri5PSrf-vD%Zv z{I`AJ#C|^J9$JHE2lx?B=9wKNlg--?|MAnFuI6p(5lRJXZj|J?dCQ?XcUdy^%n7Ux zzAD0H<~@ddPOH4zDL^WkwPyW&{khzo};_(}h19gqo;Ie_BoFn_DzlwDWkYTQ@IxA_t%Vs4R^ z0gg~7&`v<=0<%WNof@l1BCB$ia;nBsGWDMH%nmV&{G})2{Zg|(FdS@6mTw%qRWqvW$5#@{nbByM-pb&rEKr!Stff&F%>^_&*37aH^-#|QU;ae0 z`h)P4xrW}j-keZw2XLs#*YUU2+~u`kd&Hs``4_&ji;=mtrNBl$=F;+;scFUQqCiuD zzwORqPOx^kEHG#ji+~Gh9HKk&ji<-jd3%M(Iraxu(#(3akD=XY%%lvRlGI>!v@myi zAJAA;;sk!K`6gyPSl!*aslrkUe!hUY^_%SVV_%J`iQHLL(Ec&y`9wi5Vh)l!03|QQ zeHpV{4grt6D*vjDLM3`@p?gn4Z)z>C29L!%y(bfT`FZ_r^P05#-a?lv>{IBC_}V;^ zU(9bU&$qovLl&q#cuVqLv)Qr%U4Aeeq)l0JcVWJ&9auI(5xo+7v5GY_M6D2SUnp&$ z-jqF0^k>va`gH0cv2CTj(EmiATlrEy%1u@IT?o8{YW&Kb8JBwGcEipFWag4uBhP9+ z$9ZNZqj{kI)KAi%JODNJCVZo9mb>(J-9w7o@Y9_{PR3JO&j&xkQxpj76sNTl59Vw7 z+;>a)Mv3&xs#NBZYjySZgM@EMm_ zb@v%Qt)2+`S$$f)G_8Y{)xL>l*oWVhcrHBpbM_3?huu1Z~LhE?6YJ~Z##JD)!J{?8wJ{U^JndASqNCttSARks-;r@xjWpP ztY1wWx@6dQZ~@=u^{?Wwo@b%glY7kFKw|H)f01@Aj`HmcC4s|?emiQ~`PmvBmyk_g zJ9%!m4tslh55XO+cEX*Wo>auWC+)M9@a>?y2}tZbYyThX`u)YtolwU^m)W?#j;p$pdv;Ii|P9me&tckwRoYZ?uRpt)S=UQAD-65LxIoLF5&y2vA; ze@W=g?ta$XaO?JH6Xd%P@ll%XuCWOSgu?Ea!m*j(i?9gRBD7bg-S70Y?U!;CKKmD* zG0V`{f;;EXNBKf#wF`~CHJb6vs+-OE-GFD_5D{Ayp`v>v;}Uk{P@AgZ?aC)#Zh`_< zc(eoSV(xqV3Lbvtp4D7_Td~ECD)z0k1F$=>Jy6DoWw;R|huE#m9&=Xxw(pXiiR^c3 zSM#RHeHD9ndJD#`W_ALyBa=L9HtGS^t|hYnu^p+FF|!a^acdbjtE|A{Jx)6Z+CR*? zqxyexmuF2O`lM#DCs?RUY~5dL%Uli)tiRd_I(chGidm!B-c)w$)RyV*>(~Cn!ySVw zT?ZV26P!78vH25d>^K~vA9@+)&4so59&hMvT#LJ8R>ZZUn-y98D|CQwknoIm zx$GOJSK%k+Qu`q5v$=ng1LO<4SlG$Nir#j(w)>tv4y=5$llQ1k^mIZ;TDvrPgG#R? zbZ}Hw?B4EOH1EMQ0S@a!+lRR>)Ck?mDgc9?uX^81YdyImz_32yP^;J2g?2uanaxcg z>!4X(WeM|#j;4Pl5@W6Ty-+kaUbuU_{LtHO&sO!X1q}5PYFMGT1$XxB5_ciLLzla{ z;G+t7(7(xK1S37hDZQKHEk%21Sc%X+o6;fN?zK*+65|eZHL&W9A5L}=ne6L~UY2Fd zq6sDJS!H!xd)L{$%nCbJDHbnsN9}}C>JYse{VrqAO3E4NycQ_dGP`$}tXboIs0GPA zW4mh3=G*&Z%lO|`Al=AkyuTQ7qwFfH{8=kG^kr`ZL{{szKdQY)l@;xd-IeSvUkA(? zNip7P1yy4e2beqfCDtig0ZpXFx7Zmwwc5LG4mXwUqh|%q^~}Bn8Sy6Tzi`$G8!7yWB}jT)@6Iy|9%u-CekC+(qSAw&t&v zK%&j511>7SMfy|)5{sapXbj6PcJ}OAl;Ghf=CxaoeYm{^Zl$|931+myYk+wd&}es! z9J`Cpx+QiI>$gg?-I49Ecs2J(#Y-Dz7mkaW-MixYEOsCC93mfkd@EU5E6L7cVtyvt zYA!gK&b;13o&|Qk=lMeLu>#Ao5SrN4R?T$=Z0Jjr1rMe9wtlj`)a}b`r}yib*FL6J z_#HfsM#(Zc{cXaz1c@fx_62G(l`Fu}f-kH$D&QaD@w41T^ z&HjgSh1S)$l=0?L;Gq~WG)-_}WiNYg+H25Ghu&Kj7p;KIYUd4^-)d!{YkWSmhWGyu zfD3E0+8@}u3)YeNg*)KC!wXY^&R(<-NgmZj%O~#h&1pEh&CCU9wt1Bv};r73M+2->94an#! z-fhg$xK79`cehX$9H^nKR%xXKHKy9(YVh6yKCoV9UEr{mnq4@peqekj11;fQj(?C% zyO^(s9)BPqzd-}Fg1Xy&_4 zwELeuuI*K86|;))j&~=N%uMFj6Am5lydi2o%cbzXw!&S4-liQ-jZoOH&0cN$;T?T? z@AemC9Oc1%zP0X*kJw+z{*ziwydj_rMVQ_CmPX97ZeF;4!d*5lDLoaG?$6HTLPpUHWSH(uD1$>wTP=wi! zB1L-s`k31pc{?lp3(TwiRs%)Afc8tOYynDR>z?{~{@{HqBUDDnq?bhtXhnR^Hfh}b~5`CM*lbA{$22xKK9?N+-}qM!(I$rI};2XX6}Dj zwbl2sGoCje3xIRI7yWC!{c=DNI*M21HTl4<_U@zI%U9<8#{7(<+b3G-KL;nd>)V@r z8*j3cy77(m@Pv2ecQKnWJw2`h?701OK4$d>vVBI2!%2?qzS#~3Wsxj*$l>lg#D`kd<{kw+#IO+!_Cir)U(@)9KKQ)o6je>xx407|ECN?z_C5 ze?Abn8+ZTUJv*b3>K0GiPXWDS7$J3Ekmh?+^2~YkA=mOB<7?Y_m$=={_<5;knvK<{ zYxR}?!}|C;rnZgonUbui62Je0`|O3F@05}FV&MeYQ>-HFT2CZCjTHjqb)z^r!Tgz| z`rf~256`RJx5d=h^Cr1*D|5PxBg!dN`BY}Q26F&79c1JkBgdYrc~j8Nl`-&#c=NG@ zo88&2=KBOI@eJlTs|*zY%x*cx8jS>cV(!VJcO8xJdIn|0!H(qCu&4x9i}KTRMRy;1 z|JohpRx1=y8_)>UK6rE|v#BHOX|@JUf?3{{m)I zewCREps{^>jp%xJ+_+Fxpgl7LyQ9&G21trp+P?M;(A2Gw+j@x=_ZEC3pb8Ndac=D0)3oEPa67Ya z2EX1`UxB6Al*nr6tf^ONoM|raILZ30vYd_6gELUBC=eLQuEtvR2JB!_ow=1)eaW)? ztp+iwqmI-s_;4O(^&E6}+L*c8z`ThaaF-mE zK|ignjJbuMo+YZ2tRtk{X7E{e3hp|#Ad}S@-zckmqt3BXMtw#u1g)**V|AKp{3qhu zGxcMPQ-GPYyPjH_d9pgue4dlIGqQU5QvRbR_?v1Tp+=0f&jpsOdQ=w6Vzuwf(GDfR zVF6ZJ5UkchM)LrXvZed+8lOtFPtvW~9U_6Fc!|{z&+E39DShd}+AWEQ$5N zmV+8>*|8r+&h#{k!!6d&xd{#}%#3!qtKn`Prp^J!8Yt*F+a@SxWUE+0J+<0ds^L^;26Hj$z$qaYqX`h`U3nUMA@CFfvwDz5 z)e5jiZ@zgRW$l%{tk-_Bxu_`m7ZQ0M{Rn3<`#B&v%6zMV!-%q7Bdj5H2tT$qJA+b; zY|WHhRJhSLHv$g3Ja~p@rc7b@Gdt@OFLqry#cIwl+gHrtUQaLeFdo88)^-lu{>rQN zbKC|-3ozSeeqIb$o=I0^lq-0akKKaZuB}0v7anN}{qlj&>!9V~bVKGng5;Hj#&Utu zY%Is!%U(FfDke)Xqp+G=j3V zS!+WuXg`(zkQb{2A5S;sdnGjvH!zNSXtO2MWM`P=1iZN(4stKDosrE8D1oG8rmG@z z|AE!IiDj?Cc%E~3k|?dLxKMzfzMdV4G=riTpH}9K)oI<2vmRp+#@ejx>-okp_(c11 z4qo-db_Ft5oM_ll_@yzUp8$rI)O+5Uz7K33gpNg7Ny(F%4@YRN&383#%Uwz){3!R^ucs#Tuos4B^o8I>b#gg4 zR&A+uDM04{IdL1sn%W~ z^iolLmqEbrAzD2LA5 z#CR3x;Q2fMuMBQB;-loGmao;TH}La9<~W{i2He^&xyXo1I&Bpy_c5Lu*JJ*F(~bGx zRxoQ{VmnY95jq6SMrBs;dkf!kh%ww;tiej{|1g7f1&yfZgO9U8anE6^GFA?7V=Osh zEqSp_?qN@`-s{1Q)ftU1YzJ!hBS-l@2Hp2FOU2Yms9+o@8&z)25Oddf4lEjnup-tm z{E9MQx;WU8n{uO7^?lSma$#fEo*gCTi|RZ*^_Ogc3@lh$6Y~Lej1ZMn$#0K2{cw3%L9!wq0AOWE{ujY z9<(3aY(xueW?nrlHJaVej}xu1cB5XFwIGiIXD#3@jVIF%Y`Gh4#;i@DjU8|*u^+Ap zCs&3p_ERvQV;`{p1&7*)*}Bs+(RhEe2mcERwX6LKoq_F*$1^8&#SWY^_<2tS97wA$`^sobI@HWblM+K!>*O9@YohHqcw@9@_m|T zfAYWc;h=-y%le^t8NC+z;9@kkn)F&$W8YY<(T%)bAKq(+eOiOoHe1u^N-bpm3nc#l z)tu)i>-&=RZ6v0$f|c6cSg$x(Bc;dQjOQ_iF}8+qU^{-6X2$kt8|yPS}*!z%K^IeG$3;8=GASFsXnmNw>@_2Z2h z)WgD=A65k@a>7y4T|IAnavr#_I;ip5Dg3<%ylrB>rAV!(BGz2p%u1Sp@ruOcO2e&o zP`?B`T}fo@8sw)Ma~To45J|BD)H!rkjATJKbw&nMw@UJ}_je_2U{j#HG3;4A-)bVUB177_Hd>iqa13tcC zC5w?lrQMo;zw)|KA9syrrA2(w9GfbPZ|vXN{f()Y*gjd!)!^_7o*Dbl%Px&JGE3V! zbbrD-UlC1RLQK=~-{-LikI=Z{FU+(q@lB62Qz2v{2b3_YrVTi%K)p%(c6FjA>Xq>C zOl3=`CnXa1GuK?wD@fpvkt-$sZHC*SinyIW|2Ga3rLh~uC zYdbTpM)PckYpa6+W!&xq?a;P&Qr)sWKf8jj>zV6bAZQFVngc;TR%3lYW2(yaS}6Sv z^Vl)*W2#<$!c0czXQL^%KykasYT*h)2~RbzhF>qIj^^#)syB6LZ{lZbc+Fa!)#0p` zSTRqRi>Lks(*;tKm}3d!iX&@SK22rjFQ~RVlSuQFL>@g8I+}2Zar=hQ!8o%0-TPA~ zwJ#M!AEY*aFXp;CiRpF#lJd-w0q+_|wpQdjP~v6kZN5w0;t|xAw{z5BbfXnizvNx> zSg#$3GQjc$(6#|H^Z`ST-j}Mbk5J)tJkNVDM<+CkXHZHU$3%@YF)n@Gs@e(yS zU#6b?yUa0~*}h9+*J=|Z6lal*PVi(Gs=QuGP1Uhf?e9aCKOzCHqiV>AWvv zf6glUQhk3k)kGhmR_cSiryH}F1DOr!_zoN_rQWAK^#)OC`%zZVg`cCSa&LFPkzmUc z|F6-sdNtM1fL8#i6|D!+^=32`%O7QqNz|LQ;DRw6fQ=S_i;PcOcp%1Bh-G?zdQ@yn%HPd@D zQ*W^MDl<=omy89*)VBU!L3ym1fL94zA zX2yW|=1`$MbKTD053`cTk-^bu6yu?KSLLDel}PhbKsuV|-&V|aE*u~9w5~)V1JcW3`EwfFl<+x3h2CJ=wr_?)jO{;+U@CX@XQUY z;!b$KKQny_{YPV4GuVS|Kx;Q+)t%65-J#>t=+O`1%?Ut1il4sn7?z?H`p!)FDmS}l1ZT1^Z+ffl+O?jHzNS|htgQO^hVoqX16;S(5p3M2Od=5g@~+*0OMESy(+vvr07K8Rid%sDK~~in>vI|0 zm4PQ{L|_dRn~UsA-B-bb7Won8dY9+lF!p>n(hNcK8_mY3j?`Lh{=USAcnV(W2o)Yd znr}oSUk}cUAW`P2XRw2}7vwDD@^{uh9v${6Ki@#ke&V&2j5`gi=U}&*6U%7SxfVRv z0Vq3Q*SnwvdO!pHqMH(bs6O`OBD}_ftkq1o6;SRQXlNG4JB;-`c>fAs9S63CahIaY^bMdHNZ^BpSl;F@@n@$;qnz=*$qaiRSJ>-`lRIhK`-=l3S?^cC9cD89Ctz22?yRMHLzdTKX;rTgK?tAPCm zp4VX&7qLE1(A<}u06uGPe+!=NOtc(5{5lX%1M)TCdI7XFQhl19P-URhrHtDWu4oSL z+0VQyeBKu9_W|BE(6bPuS4Fd%Q)#b;WpKtuAbf*S=RwzAP;fam(JqT?z=`*qE@qt> ztla*-je+ty@F2$sb!%vOHCFu=aBV+vPpi!SUkVQ{fWxPvV}C)*z72-og4@3ZCsq-k zm+aFI!Bd_CS&RP~ET`1G4fyQ@+YCE*Gp|(xNA4@?;*IMw9%UrYcE&K4y`SCz=aZr8 z=jd9`jP3Srq;n@cZjWxg32T$vMfx&q^d;b709a@SW{kpi1nZ~Z*8E7OzRIdZvwY5Y z^0i&Teo3^|ulPIj!JAPX`^p*-G&|{XMrsY7&9!I+ZmyA2@U|b{P zp8~J)W3L3WJSL+>?3-yWr&*Ud(X&UR zC9BJer|JpfA3!$?T`Mi$1n+wG)9?#s!INu%U0Qn2tau_7W|^2>X+~p5U~LM-ZNbzH zJTn`>vn^w5M##2-6Zf2xkea#B(%yO>!HYAYq5aY}Ano4vF9WVGftpvt3(XTe+yQUg z4h1{0ijMHLc_&7=lz{?Z#B7e=7~Os#Q-S&wF#Z-+bULqmo?y%R@dv?nZg6dHR&%@T z4r*WW+u@V0jNKX7?F`Tmn|28@=_&R<;Q3FaB&)0D>)3>`z&wG6nL}pjdJf>3rLnO~ zz_EB}jSTilpneGZd?U}a7(#8fWw;f*486AmY5x#RPr;H61l#@j`34xD$m{dqMWa}! z;BBK5mjhdCXm%4iTfO}V`-3~MIXCc7qql-z%$Y2N9oY&tm&0)%!yRMsN}gqB^H|dH zVI;gblaUu7?cUb&encH8sJ`m~4tk?q@5PSY%lPVUJ8p=nOQA?PuzikCnIH2FR2+vq z4#qnliN)`W7h%WOFQLFn_>xXC97n;7q>p#Oe%fYxeZj9pGfG+BRCF`GzI2_+(6gK`5 z;CIj3CgIEr;lX@p&4tLvr-@a6jIq1p-*&-wy9fVdDENMh(XF7r2W?`0#Z~Ze7qF1k zr+ySYNM6MM8A`{9yTFr{!frd~69u;y&DY@iZSbsTbsM{vPWV^$QXj>u@53o;@dS<# zg>48X+rxMF0pnBn4I}ZzU&bdN!}I>|%EREqJ`J90nz!M(+7FEI5}w-q>{r_0bKZpK zd_VXe4X=N|sy4uXo(MHfbaPim8IITdD!%@Be9iHAZ%^U<*m3l3IHna)S0o;2PVp~T zf^m#3HafARyOw=Q52*PxT=O<-`U9wAVk7o?zYz(%18?DJpdF7dJCPaQ1pZNA{W0La zi~rgyF#}t+Cefzjz-(8%@YeJVyPQ5rU3okRCq4;}e+$mGp{MNJXulXS@;JWh2YC1T z$*(i|C_J~3?6U5Hn$5AL`Ow{q@eZZ}^}1f3R?DK*6WciJNWHSVj^~8ehkiN1r4vJqf-ay*d2d% zMB;n?j*c`pr3^fK9iO}no*tR(PTpX|m!aiYxa1Y)dlaazVdOI4;~;YU2Yfw>aeBfX zH!^x#_^vA!*qzTfByurPq169*XzI|ec=7h15)*H-FL{yC$AgpMjD0`4@j|T4X>7qR z=>IL8@G#>xgF9M7$D5(z-QcG`+UgS|${vrNq?G}lmTr7!Dg zjy9+Uru8#sV_{wd&YpbV0k*p{s=L}p@J=S-2YKRReJpQ&HsQ1P!@S9W_S ziT!Jbtaan_gMj=&V1Aa!#4|u1`rdR!Gc^Gl-d{b$=RQj;*Dzqcn-O~;frHT2?wzJ% zdsgA4oQ5|lGj1a|x&zYE2mTrW_t`1vMZO;aUai8_z}o=%_D-`AuFrtBFOPm`qX)ps z14zk(VE!G}W7m|^NOxKE-6eQromlY$j5ru<^kvN9K>q}@^hOVMf+sy?%#9zsg-?Eo zcCc4m4@P_xiMbOj*uiT&9P=wHGRvV5I=Tt8>4c0u$f(NlLyYUnY;5Fk~FM#{6;R?HKp9dWE7};*Q_a+?oFnE0k$e#t%k26MW&Zu0 zj68s~JLWJ(90{HW1F`+5TEoTmD#;D?jEj8?CdQy01~B$rV7fQ@L(8St^ey~$80%dc zF1mzq+acAx(Px8!`w1R{nZR;A`8lNSIk=(^|M4`=v!v`;zg5WWJB&LV z?$sCQj7;AIJ{|xQqxjD>ynz#FH!~g@qcz=+Ka18G$@*VGuf56RrKKJYZri}&W~Fev(l}@^cUr9D$q!uVrjvKV~8y zi}5k^Ln|>uFK|4TnA1l@`j*qF@^9w&mAK`2Fh3YfT@P0lM>-a>Qulvlj5-hwtiv8=6SKb# zRv&^3+F&ahryGFV%kY9);IFg>;(Ot{r?GYuvCs?gYVCH|5}6nRrDm||--)O$0n=X* zd;6T(#v&u~aA&a4BGH*p(lERi<{AM!+_vJ*0l~k&WqpKmKEFa zZZzwk!W`3xMNUKu-H9(_2e5sNH3|AW#%DX?Np$4ViYRSobnrl6{fPf>1EUSlDZ`=B z53GGNojQ;6_>WG*`;!j$^BDOpW{%?efaq@TK!{e$#SH88`{jX_xez~9Xp&mz=E3bfy7Vlhkok?2HYuBLNDxPjqgF3 zn}Mx9J#H_c$E)9Zg17Mc7^LiLxFzO9y(4N4M;v8m3He}`9 z(Bsd8%a3?`%2~sE@YE}4hDQ?!D`FkYp!$)|4+hSg@c3MLExxPss7K$>w#Zli#9N&O zPaVVWyAUeelk`TN!YRyBWOgAxSJD-BG5wA|hF;HO*=}MzMqM^A`p0O5XYmsTBtFh# z{C)%t_9_zhQ3CPbcyRV{tBlUQj@?WbXk*9E`*_@zSTgVJxu5eS{wF^5JoJ7fq5A{K zz#w>S1X^o4_H!pzp$a)_Wi=|c3>%|lo0obYaCc;FUf%JZ((tiA}VZwXfA)0g1VHxphRi>A_|x#s$K z#YNyz`?*_rXEmC6IX>BJIMc4{?(*G-+l#y;)}SSj-o|RX<1_YVy*-fF7Q_^4;71jN z+PjgFAEEc#KsXFa^h8d(BSCg@9S9a)1dEf9rJteWCg#i!M|+E@Q&Y*x#J0E zDO0zgv+n270}n)a8)4x~5xMssiu;F8+5LV5%#)z~*HFcZLnrVr>LTUs`OL$~3BW7- zd=1OwKI9eTek5G~DA;WbC*&rtMsMgD=wb)-67(j{o<5I`y_Mk428kAV81DZHJ$jJy zmxgG_Tafa8$fvRY=djab6Zv@_+dYC;-08SuZI7<0f}dd}seQoZjZ1H8%|{Z=r8W26 z95{39ybT@d&*UI>xS9XYWOZL-?Y;f>6+ev=%|sh{+vj`mGz~m{z}h`|wD;?u*qLn5 zq&Yh1QLOxQ?C~me=3aE@Nwmh!)N1tohv32Ugf@vE{~u8O!YCu5MITmw5&h6hr3<1r z(n&YveBk3I{x^a7*Fck+tlhY~R&+YH`c2mR2&1(_4jQo5{E3gU8!7WPh`Eeb@+g26 z^nQogxy`}KZAf)LG-Q7sec;4i(D+XHs5$!C4!}P{)t8aATfu!p`g9jZli4r29y`ST z=wZ77&jOd$00`M=O7o43;hE%E*8UOJXEwc$f5uvT1jU~~iXMU@x5Gnv*F~Vo9w79# z;}YocGg$RzpL$-u!Z`C7WPc=@ehUBj5sLi{&zZq#hKBuOypiiIaO+N4waDyZYb)4~ zEZn_w=VJ#;|9bZA$G1&G#@S~?_-LSWv z`Mwv7xCa^w&1VAlPNXC|e(Z(Nq$4ZqjrH~P_yKscGu(eU|FNcuRm1G-=PeFzRCu@B zY>03N$y>x1p#{R7Omi4&@c(k~q_r6iC!WUFaM)|WWLM@P=z;p3y~&b_G`C8nAsGUVb|?Pg}l?f_l@=JBVhUc#GYKS}gQqG2_z=$k5r#S{dG8 z^EQK7@ZR|HhM67P|3DhdZt@O=H`2V5wi%A_nUy?3C$G?j#fq1?(Hhm^(I!b`MN92D zxLsmqs&d@k1S z&15tCje3U;UDm@1{TaKsipLBzf@jaa!N=Y~GXu!l6=p+uYsZL>nXum4@N};UI>|>1sN?zpX{l1e|ylS(W#DUSjli z1d=(Q9bX@8)Yr&qKR9y{Sn&3xx2TtcC2RhvS-pGgU9i5$-6?VkeuLJB)7|hmP1$sxG1gyYrPsctQ zQ!$ou8`9q&kE0(x%~+)EJ=SMky9}W8ruWs1+ly$#5G>B){C*G}XVhNnemjz9Zk>{5 zzgzR-%vcURbLXJnhM-@%;&XMy@3;o<<4Qa*PwwBs-pog)Pji}H5B^Zwzlr6Xf;OFt z)}O(?WD*wcNpyc7xX7vy-sSeTlDY8iB!9+6nGZ3LHC&Gkt;N2ta=I*@X?4D9L7|nM}mT8;WM@1-6>OP4Z4j*5RG5wO9co z3ZBW_kF~g#9Z&=O%6iOJ2G6$!)~gLOg?L5;Z(oAPHx}D4l^x*5)NVYMRro9O@l{_> zqH;H*7d!=5OIp{!x}H^$WpBBA?`SUe;9clrWc4wA*5=U?%r#~Y^Dgvx6H9Rzd5zPT zC3>X`u#dwF9)aC`A099->b6Aku7fISng+B*<@zZeGZ)nr~ z=hR*;h@6yYvpsmg$D1v_neFhV`D~KHyr<=x?Ft zXQ5*r2TPAKLo3Ga&-ZoUOD}miy1{BeC%FmK9jp&!7qFO-XW?tDCBm=_K6@vLX+6Q7 z>q2<<6dKBm;+aUubBuH=xG`I%O%k)e0O;>U9&ds6Z=eH4p!d}eb-}<0eAX}7UmQto z!lNq?WsA0@4yMjB$H(lrKF6=P99gfAr@aKJFxRRD9&E+*B}m?(cm@07Bk`HIBD`9U zJz{q_=~=8<9x&@&w1?4)Kcvp2$};ZZRK=)Wba_-Wx+p3ftz#ea7ZTG4KDe0`Y)8I- z0VD1;3#CuTI~n`+cx3!ZJR|-wUW(sXlsP-&;jbj-&>XDyWjFYD>Tv43=z^$eR4ytT zT^(H&m5GW)m7~-AXB{+u1RC52CuM;9pYZdlq|2q_`0x0Gcu3qLzAWw>KOVmkzaLLw zw%lNABD*+ygx?8Yu43eCqx+)vQQPR&=-%j|=&|Uos2MA$6vgbs=He0R8MPqe@LjOo zI$a(Qe_cE@t{WGN%fM}95_SuFQ^lg@(a>mQG$5J~ z&5VAGzKy2xY;bg2bSc<52=tTC@(szI8b@rXJ@KvM@q6)&akaQ?TtB`xzA&y4H;lV5 z+c)tA(DgmAz9-#;UEPjU$>@@(0oZsbdL#NMni72%eH=X=^^9(aszo`X{Lvx2^=shC z+3by;hO0Bh+Iri3dZ;4srSTVpecB*e(yh-vhO` zz=z$?$mvuR?N4Qo8Z&YWAiY1jCMpG_d7}tg9)Rm#gbS@MU6Pv)1JiZWQF>84HC_T| z3T=>}@1UtBu!>&XLK}yFvIPI&cH%F`;yLk8Jid!3!ofepvv__e zzKK2S9OSz`x@QpDt_D=UBx)Gl6m{aee>5z*68f)8w8(4hT}q`E;D3IM)@Z|CXel`T zI{qX661f-+MkmC-#QDK?6LxF!@n_9UH;F67cOq%i z;=RClC7#Se?)h}Y8~TA*VV4*@5BmJ#~&&{_HNtsf2?>& z{AAoOZW)(|Bjo9>_yPF-Xj~dE^CR-T?!#mI6Fjz#o{FA{-j2SH=0smcZ?W!yQ5SSh zm1rhwFqge{>K!QXADsRPs~!+<%p9NjU*e;uKnTM%+E#op~&?PyAq9Dz3>K(^-25tf1an zTjb|(>Yvn|(Rd_%Vstjz7L8%VpQ4wd8qpDAQnT@~E=*0q;#`40Ry4gEnD%7mj6aRv zLPuQ()kj024sh*QwB&{8)fccT*P%%(qDh~Ko{a8@`hm;#(0L9Kx2qo@h?H%Bu>!VZncq8G} zm)WO|$IcF8m)ViH;0}1@+xT>RQ4))&jkT!&y?#RnEWm1YN%qrQQY8{CQ5d~eGb#<0 zi$#;+(bagXmtv`Y!2fs}PQ08L+w1Xj@p>Y|KLOjhxHy)pBcpjEraC-hM#Je;PxNkK zc<)ZMrn<9cG#%aa7I0shnuSb%fj`y)Engp<_I7+AuAW{M&x=dp*&dH;;WaJgM082o z+`(4(ley4kaVlrjHM*NMR|9|9qEXOcEtcyABzY4%n6^A}r6-|j8sY)uNbkZ*XM>9# zz|V81Hy2rMiBI}2I_v~`>j<{FRuTz5#u`WCxAtN0Fb;3xXK>dNPw_Ao@)ERQ3%I5d zyYxPIEsN1`^RUO&@uAD3pZ)-fkI@ci;hGcBWG^%rhfaJ74%rIM#_|}Fz7$?QN;JI! z-kRR~wdiwgj5T=8Kpe`6SmFYw5Q z;ajXjlbneQr?cVN6oxZuLgVRpwccqj%g(AdH2VgacEG2iDvU>e7x?@E{k=FjM>ALFPCjL>@5gAkrHnC!NZL1y{1=k% z?%nDW5U^tJse_ z*hM{w&G)`oN%oObz}_;vkJDv(dKa3j%(TTd3N$K z+G8m4`yJ2kV<&JEzE3_P8F4i`;hykO4dM+&+11U*+n&e#;~DW)qD(^63%&mWGS>|qTd`*yQuGFP;Y&U{fc?QUNJCr3d;~x3 zQ84KJpY>S4h|wNoUH22Uo{c4c4@k||e;&-;0zY}zwj}z*IFz+pXJOyG{q!90ybV-$ zGWIB5`xtEe#k-D^d+CY%{ZQipw97;APG7Lrhuzr}{TldXA$wD6Srq~A=2Dp%YkfGg2d`wG(E`otUaJx7^*)}pmyQF08J4qw z?^9?r4fw3_v=CZt!Jb($u@2l5S#p(p)#h^%Qc&{KM?uII9;ws+* z-!E|WM~wR^Yn{p8Kf=q_tFmTJKA>sFs7;e`%tEfl7+1l0Ezqvk?+MW@tE_K^Uw*-p zoeHPSL8p&l^uHK!DH#E2#;gb&wfV&LthPE>d=z@ugtE1P$U9X#@og$0!FC7nUhz&w zc?}u)1;}1UUd+6n!7NrJNb%X)L|3d;W)|NdpsER_+hV`W8j08mmjG*KI_&3DE8v%J z;FaHa{sUP1g?QZ}IK-+F+sRtK1ROU*Mw_zMTcJvA@csZXl{6Zl3^)6XJS^gqc2fv9 zx~v3eP1?15TRA!AokhrREQyse=cgr{k_`;i0SfPnSj)@~0`{Eq9-sBqtte~718V}< zbIl4gXTg(oE6#$4nDfxkJP z`Z_GmCU$b(2h}@x0elW&2h#_vzJrzYgs%`1;+?l)NZK|$6e9}@(b6B|d%Og1ThCxG zeESmn;pRN@VJQowH{d&0!qT;8v^UXWXNa|Q;}bhLB`%J|tsAw%dN;!pIEWNKkG`r+ zM%V~E#768IHpPqZnm)#No*8dLThGVegA zKUhUy&RZ*ji=Wv~4hD+V%%7WA20-nz=@#hbjp*pB*^Bn$@e1DV?fCaw@etmE&sU@E zn=$7Ge4xQ`+qe$jkK>>I8t;mmVwp}-TVVow!ID7#0UqeAXl=Bb{q0aZ@^h?W7#{Gu zcmxMn`*ZBR^T%=K=FIYV^8@j`({WGuBOm+7ZS1}KN7JHZ(dp=1bTZn@NPU3gC~N7! zexNg6$$DnKCaw_g%$%ONEAvuf1zqtwE5dKTaoc_cd$e2duunyqQTdFEGxB5{iN3+V zs}Y^WvYo^?tOqr}z*j#%K9IR0bA4txcGjKQRmAM5r?KaKjT6mFfqW$p!#8UI4c7ociHsT< z7i475_=7c6i8ersQmL2lRaVBs;*N1DUYNNpa~DM@GA_2Y(K&GZP=~9P)TgT##MTyv)6s*?88DopDaA z{ikT|8L9Hge(P9NI-_1jQ)s!DeNrc6^E<55bUchA>CcIIRE`g_{+*fo!Q##Fv-rQ= ziP)S?55pgA#|~{#6fu8|jDi_wqv`C9YJr0e?D$_`@4bmVRFn8*<_T7RAhQ76I1JDJ zGQ74^>5ll?x3CMJ8f9YzH8P4o$GJp)T1CgPM<>A39qCm1&G^2!IwNe%Je^sUeRyB? zrv<^zuj#AMjd_vh=fUE+D0@b+jC0Xv$mP{h_GmCx=O?_+oaq@z1c8EI#GtU#QR>vT5QMCHAN=hVb1%ATh)UD?uU!k zvA?+du>fBpgznK!*6{xE)-QAWjMh;;mg zcDe+8wH^I>H#^3I>^9nfwP8qd9d<=2=x;rSRO%bNl-}&{*T;VngE@g-+sW=PgLvh$ zSfAY3$y@N0S0T}Lql@{@4fh%+?!(;KiN4LmU%VSVTo%8(J>Ftd=+Oq+e~Evpf9H+N zH~7Q?Voj&`{s>+6GQ0K?><0E@rzT*hM&rE>!2>h%{belH9IT|imlb|JnHmhHo=g11 zo3Va1IG^%1&bN4e?_$+H!An?|l5)oN*Djwc2_k9v5TL?VcvIQ~As|_E}G} z*BcIpS#PEgzKuJf(fErG6UTcU2)kopt%X@Exr<_CcL>p%Yp`c6SmiauN(bSOt-<%W zBe5Lwi5MMAWn<63jMdIzZ`~8E?~RaO**jg24LpSAK0wTH6*w+|Z5@GpHDGtHt}Br2 z_B+5;RnbtZ@vw&xfh@tNCu48Ru%}#x?ff3O{D|1>*7#C<{J+ze;)_q@Jf$*w`rhnz z+Yw{TMeJra{%;uS#ve)`D$WeEs3{$z~`R%@Cyj8)hDbHoXA9VlEUo2Y0lGH)aFz-Pn;X%smpQOW^q}<$UJ>yt)*=)T7aR zM7%~2OTUiwZey3)319JT_&H~K9_t(ryglPbiIZ-Rn;;$Q*;fq2D=bVb=0SAt3s~Z| zaOg=qfEUmjTalhCiJGh@syd!1-smKPnT}f_kq3#a4rT{@F4dg)-+k!4HgLvyaOE`k z>U{X>S-hAE#HUw6of+`-0WlE`C&1BV@trQ@bETt9eioWKN=)ubz9lo6XKXU}>`J9Lu|3;PD#1?>FG*FxJ`1@9p6C zF`UwxC-xW;@2xHC!K_C+O(X{QEZ=7Fy~+Gvpb7R7i73GS>`J`$TcDtK6z+iwu0dDj zhxa!US(wD99z!R4(|Q~}*A;)Hk=XFA_6AOEMz~hxBxF_08LZd(6OThnPx0J)oU+z%TB?l9 z?hd8g&vUN#7S70>IN>w~8}=123+_wk{uShtr}meC>>RjkKQRFHk@Xh<&pYwH41$7t z^Viv|)|+c9Vp?0~17>;)Yk52nvYNNG=Dl^QNJM}&x~(!X0I6(EnX}P0*0uAVBB>f= zRrF8!{{^&Y-ItZDC<4aEvNNgSBA)U|v%NY(LG|;o6i1n18K3`w`99?NDd?f3U&jjg zCC1xbCx7aqA3E z6m?=|^PRgvF)hHMwemb$Zphz3d#CadTF_k3Ip|G0K-j&_T9U@ac)B(>*!n%)fPlFG zr0u^jB%E#=4j_di(kCb&4qzOAS0)7CB$ekTLT z2CTUhP&2}FIZ(1Lrg2a!_}fa@cIz^trc(Y%qX=5?-~82j%vyo-g)ups;ap>Q?Ch`{ zTg>`@c49Gltu!Y9`#jk*&}w+a!L$8Aq*r60XRf9Ft~T&__o#Pf3tHYz9v#5PP4J@m2;-6duX4_R2UjptnybEy6R8N%X8fBP3BbkDKg#2#>eo+nByVk zoBQ1h-1W#)!2jT1Ytr0@N8mXmrI{8ZkYAUwc6-c}BqnGDt9=(<9)%Ko7W)1P56U4j zD9yw^Cr{D6k%EI+=?FZ7#_sik;>5h&5UN6d_DZ!&gWPPlksFX(1A*Jn{0_`?HRJV6 zR)0C)&*7(aDXimfca}4eAI94m<$ej$Zxp)c3U+@T@Ad?8#wFIlnzW0=e5iMNUMGBj z1e=UhNU9~gjo$bX9=HCPwZ8Q>S>@Z@?U#_0{m@-!fTv2_Bvr{($A8`hNIb+yRzN5P zk&)#le)dTag(44ocS=CkWb!XOb3IFYe&>37Afo7)&DZdRIBNs@)6`@D_3U7v* ze&x%|{E2Aa(NK!F5hJmk$AhOCtkNn$b_{C>l_J0_3dbZEZz6Dpi2HcEEvK7{~an z6+p@OL+eN?53`JJpU6#c&Qc(~jQ5OCw({aG-nZho9V?8ytII4W0}EsGZ-6rI17=nN zx;)QcoteD}kU0+7b_)Mn@Rwcd?27bXuexJcTUj7q1+7>OIo0g<9ujXF@?Zwz`~(NAWDj->GSbf& zDf>j(ZO{s_R{P!v9Dd_D_0&61#Ya%h1o&G$Y1aldr9Nf5KU*u_ire-BHoC{k+xEz` z3ccQHI|JJtIq5*U0ch)kHzv#6x6!=U8*@xa}K?KA`q8_m0B z3{B_Lc0;iriMs6{qvmID>64lwB^;lEio=COw&@t-Nb(GHfgDT9Hnw7UgR`RMbjP}Md#7fp8n4faySVaYxNLoU|2mNsiwP@vD|}u@s7w|utvb!_0ay+ z8}jcf0hD1s5_%7HXkABu;;oDurqrUODXCm`D_&sNIJ|* zy~&Z-54*u&SJX1=eEmU8XVYGpKGSQH4Fy=}iNyMn5tgti@A%u=w{yKuKJ zxu3H4oc%iNBxg-!dqmomRef)NNi8_Br?gUr`p-Tb%A2zMrq0oCXGekk;3?^7unyX= zio1Qctj?TthcheLo{ZL$PkP|mmEG><^5@DtcWQ0h5msqnujtLJDCsJ1%vsXc$NY?> zhp#hBZ+2@;u&;o*ir*7)^?aBkx~Puo37i7MXwti9>WKpP3Q6=5`EFA{1m zlONm4?#UkIGpX0S4m&XzBW(W(I~!Zc(+aP~^D0BFb!_c;`!IW6vJ-+GYvlm@*;t!g z3X}tnLfzU~ez!}yzl#g;Zf{=COy=y^{X=PDFZCmgkmENkuPndWaYNoT>et`X{I2dP z&a3|AX~?SER?$jmUZ|_Z>}jXwlP>Lt>uq#}Jgk)pX2K{rEAr_?ZYKRvrFJ2xM$%Ri z3rZW;Am1mx<76hgnI#g&4k&V$+#!D{TarHJc22V!hV-J%VeMb#$PvEF33jqordsLN z?@A3JXpec}>mBfVAg-RWZ;^PhPoR>}ez;P6A#f75Hq4p-p8}g1SenNzIPpt`mCpGj{AT4!}+f_Nq#=h9k@??|8#6oRslOG$osTi#-4R z_g!tGcSjDBQtW&0xawmuC7&cbB7Mpy_JS4GT;Q;KxySe2l^uUvhZV61-D4DA)xJ;S z58R<~2>xxyJ|U|X6RvWW*^p{-<%bla{i$z6NdG6v?3tA2Z+GY%!Z2B@{ob5Ad0pNX zx?Z3=sF zCyvCH*f*<99lnos7{e@2_=J3=hE3?)XA&IPV>!W!c+K#tI}xUGhdSB}HMPC#66Zp} z_wBco%p}!_Z+Tcg^uMzu{}MYS*{K$Z)SHa&IEi)?BFd&jB8oLBRUP8a{jT*P{F18f zp0Cs@_NYkkm*^LHO6+>>@)OB8LQCk1Eu(%C8Se`1h~>Wh=X_dDV%*W}iQ-RfGv$T4 z(C>cE-8go#ZkEp9Ql?+xUY<;(N;02POBp4ml!$goH=A1ius4>HCgC3WL%eC7CjGC~ z%L!byOU14{D0JOd!Y@X!B+^+-CA{rg{(INmORvITZgG{a(AV9AyYbWi@m!Jo&csq0 zT1coy_<6GNRrf1DB;)v`D{+hjgNd9;z6%-OPlI=5liwXhEQk?ztmJo3zAgtP@Jt{q zm$(=I3EPDB-GysU{+5p1N1|I39EnZoLkf{59K+mHu_zQ0=t+M*>CTjxN))ABqQ$gp zl~n#zt4aOIDM1X22d!qGN~BpL9TUozx*S)?o3op&(LD$`yPxD2!QTmHgtDW^(ataB zIP!n+_ouKCdcsORO5i1Qg@-#yWV{k2(fPtcoT#P#<$5BZv0kmP_Re4$oOU?Lu+q=ef3qi5HX$bWYt1t{ZP?SFLP&V{vj zlMa%zh>+F}5Oc0K(Js=aSP%#5IWgZ61Pr6b2sPH6Kc63kPhn!N%rEDb!BRN7ox zb!vAd)_-_0gHpJ=ZolL;DO;Lxk5Zc}Qx+)U6Z=%%Yv;Q}!l<>?-wC7>xh?G7l~j`0 z&|*%0NHCVrhq6_>P%WrT(LbU@QFn^n}sV)Kl2~OxN`U8yNNz8##sK-s<8U7x*?g}{YeROd7?91agK9JLH=_> zS?KzdBWS&p<~@IgP-!A7g|BoVuV{%LB?i-6WY1Sh!$hn2S!Yf>LWx94)?{xd|LNOQ zV)>qWO&F>xUBG9e< zCAELGvz0DtWV?VXBOFDGRh!h^iBT;Bv451AwAr;6{GE7x_1`KJ_4O(7q_`aOC}*uhZ5*-LvU=3) zm9`x}^9TyY)3U70b9Q`ij5ia)W7ix*e=+ zI`i)VUMa>mV+Z{$F85| z1hitV7JTW$Z^1pD752{O`&HcUoyYA^4_4PHe;Z-v=$1TTFRjL`#(uPE?zgt$d-8_a z+m~OtWq5`8rt$RwQCL&>vfkKqyw9`pw=i}$SPFEEAFyA|L81usuIqR2zzpq}(Kvz& zxQV)rb#&sdzTBzz%HJglsZQX_y9FzH*yqx&l{>)rK|DM^zwPGz;y zrNG7By4q9+h?dd!SqWOz1K&Eo7Q5DZ|8J**4p2{bD5WhB=)h0=)^-9S+Hoye(IF_T z4sn8iBTtSXC+6qnhn09YvGey>-6DRU$r|jl{XPCMV^6G$vMJ9qTGU6#ys(pHjXd6u zXLkFSv|?UY;g`6wV~JJktU}Y4&$M98-nBO875xOo@eWD(e>47Eus;VFSYhOKqFkhi z=a3~v{1|KcRi2ZkBGr4$D92!6L+fltPZwW2ef@F3?6VA{g%Edmo}09wF}I4q~hNv9^babh`_g z(iKiRA2?mWdh~W$7sxEQnZU$eY>Sa(qq#91#ck;%e(O)H-ud&PK z8iTL{%KH(%T?B5Fsn3C%kJ!D@A`cQj_7Zs&Px9Tkrpe&$r#vOu-*Y38rbc$y)42_! zT7CHnVBepZlnaTm=AC&1Abcg5?!}i9R4%a=-+8Q{1$=Dm&dFF!`e^IIwN+Sw z6`r(feno%D8^0iz-X=%lwfw#(Fz3fmslDxtYWW)&c)#XNc?tNe1$<^b@UF~YbWCq_ z*tL1QTNQ60xabLAT+Qoe0;A60%BuM7u{1Wq-!;g3*@O)L4y^ym?aq8?;A7xmE!X8p z>j}&}ja98cGOYn8zq8J|z|G!(Mx&g@zSU1RurE7`STpfzIIkP)s+OlVz0!8`Hqy>Y zr>mK*fQsac`1%f5eus>F4{Eaxkk!dPg#QKsZEKaj$vZ{~{K#5&L!&#$w^TB=X0GPY zQfp?gcDpq^&R}+<>g>385<5K&EFNtLu287?vN4?%deG)58S}n&Kx#QXU1K|28 z*0u>+`;+Iqzi7mq7r-<3GWu|K`5t>6OH|wQ%=|8Stdm%c6_EQQYkEOx!n`u}omSO4 zpgjk^c?#M6CS#8v9=Rj)_9Bwa3e%V8vv+$C<#jtUW7@u@|K0sQFebDM{eI#qW;DZLubuJ>^;Hp%l!QsyZZ!LvV|`zp_a=_r^?W!y<60P z_Y#x&FgUcv_mF&!j9u7n2L`>69ZmB3+*^1nNmZ}Q|<(J68g;3T? z>iOyywlAaSisk--9Ii3|nD3-1Z4{ zGaacn7wP{K)M!-pRNlLcQRidD+ynn2dJ5x$4%E8c+> zw}2j+le=01Zm7$;J78gMM+zC6yaL%NtQJAXKcg}J0N>-0RK@8#{383P&*vlZbo9;a zqXNYP@NWUI_<-}s&fFtN4EqXq2D`?xp2=*R^CwUvno5$@rq!<=_!*u0HuUr~YyTLj zY?ZWES@{g!v-?|VM%#lHC=Y$L2QJn=H+s*yT#umn&f?4dzn6oPM%WYeIg=eiDlK5` zOBnkZxW>5N>lkk#(ti%S{T>})M(wxkr!_LH7!+&7*&Wyqrz30a2k<_!M@#aeyl3EQ zcDXXwkrUseNX4n<7ajk;!#BbUz%P8^tW21Bd0D0roI*dGOVUar-kyS7_t~ zEB)T)$;?N$rQ)Sr6*i~0c27zZ_a4)`1$_Ba;7<6z~|e9rGjd5dfu9BiCd z!04^nMQ>#JI4VMa4eWm*59=UVxwFxj6Oe#?p~?%`i8%>(l2Kfe$m+`EV;@UiQBiV? zYVcb#AU6yg*~_t5eoa?{S*y1Eg2o?%4*rC(f1$d}Vn((8_A6+{OOS3SQ{UhnH9@^6e) zZwpV`Da;7?LG1ccGS+${^E(suu7iuO+3%{ccAL8k$`_72kj!7q3%a*<~RDiA7kALjr8REaCUhX zdc$g-=VNKxcdR)l(B(jM7F7KRYqD<2gXoGI;YjmsmOvK~{sa53bp=k>U@dh;VqA^v zs0kEW0FMqxt~8uvFBPL@i-1o%fUifN*^TZ+czZk;dzDu|g(mca8+CpiV_9EzB(S?0 z_+PgBUnQ&l{NyK@b|x|NlK)N;l!Udg`A##_Gut`~8Nvj=ufd^TIjXYUNG z8sy`!r2H-auXTzdi~r#>W${F`V6N+dh}o_7EcOX2n67~)A4E5I16TEt9M)C28cmkO z{p!>4PNXVpR7Xw*hEkLz@LS;;WPK(3JT9 zYv8%>S!EUAe=ijIGc^oWlZTpv9%u3V`@Cj%tAWV0#%O{+`1Dw8+;gGA=422YiVMj! zZcM)BqtMMaXrb=R_&hYdiG1C|@XIFhStml9J%FWse%6B9_n{aw)Vd<6I*^0W5WcC; z?-$^wmvOU?Z^V%v#n%=`$E*0ITVTl)D=^AH#~S zqmorIR&*XxbRt--3J*+R_Oj$oo{; zj%}kYeidWCj?|fz*Bc*Dtztv!67o*_l0|+q+58*XXJ2HZeR*C2j%8VYnA<}=sd`|% zCmh-ztPg>+euVNv@H7YsGMk!GTgh~6MRkV#)Ja+f%)3KlX>tyyq6z9EjY=bfGStqp zdq+pcxB*yw3v73x3;F`vt$dXv`}J5dx{KyBvnL>{TVqB2h(-M<_^n69i7Jdy3rW_J zF?u2?h5)gx?4>RleKVnz15|-)M3!hfDn#yqTI|CaV()x~G&z?MtTy=%bu71&{hLCI zoDY1)Vcl$_zCd3jRv{VwCz2o9n+(^k(A`?H%|FWP`Q6CkkwCC66x$XW+eubY4!D%0 z-qWebnY)l>4Vi5s`)EZTZ+|k8&8#m?ZGeI38|%JIgdXf*)*Y<2=e%?`G^j4Lk43N#`h(t{lD}>U|sCl*QI4&dK;P zIOiTT-#h5&x#ZivfsOGP7R=?)SY3RjE5U3}zD7YGRe|UzDDG=`e+e|)6N&l&RQ(n8 zZ094bCxP3Wkv@I!DU?KFSESSM=R9#IQlLFHdUNu3x-rh(V`_CV9K=1}D3Hmt(in7J;T^*`wOW^i}}?Q=4c>tpPj z>sj?+<{gT?a2xvOD(3D8XY^n`Lbe@-2~7g)y^$SChAo@azdp^xjSVo(}g zTr0ox+Ef`hA2?hGG(QG+1Ho1UY7O2=e)6fo3@EogH7$x@iS9@CzQ-OXKsB|1{7`s! zAe8?oR5J{_$Q~NkP#NNQs>7W}^_oRk^~Z9yGVirM-p6AY;T80tcLqNoV?GAbL#RXi zFm~QPDzyyd+%zinU8)lGNN&Kc-hsaO0eexe=Sm!knK?*x35824M{>X2u-y_%G-)!#VuGNUJrRq|E^6&8JI&*>=>G=}*>ryk-RTT+dYzuVCY7xUa5tn#$H)PDjTSVg!RR>ErVZ?D)N7%Rk% zvM1tbY|)iGZ^rl*ydYMU=mVe3#UAg9G;5D7ycGC+3^&bTuI*F;`H5Of^T==CLw5Uv zSa2JVWG%4)&g9v*@wlDslcVnzGjJ z>~b7bYln|osl{MnF*u1>!t z6{l~7V~XRw7{F<5Iu)HZ!y$UxivgGQ(DE%%*6cim+o8DxlC=~Z^$r~HI?#C(3O)%N z%I-kUb|If|@AhXO3+~pirdn8pC&Q)Q2Yd&`cyl)oC^zM~!PHrriQQL|=Z;Ce!>*Qa zy7M;pB2F=vvG0+r#%TN$XZrUz51QRy9*b66y))XT7Ph87{$Ch%3UJuZIam*LNh}__ zZ!Kf(2U*8z{0%KQ(U=iflUkwPnayW4&!JI@Ks_g7$)1YlImjx1<{bMX^!6iir4p~| z!D@|ecnvvQ3b<6l5Bn$QFRjvA_(OWLztYGBPw`gndKO&#$$SlX?@Z?Fgbil*;(s`q z8kuWHnEF7a3>L1w$&J{={h*@(@bzeDcP%S6!o?d{BlC^KDvn+pj;-7R3i<%8r?qNd z<-@FY5uaSj&TE4m>!N5gA4SrdMPwF;x#`{V`f@1GRYqF3W^Qjij5PQi+F8zbqYs|J zdK$xP-maC(pYM#=+l;Lp!bh|C%qnpA6Eyl8D=Y!D%rW``*cYd!&0FYndubdGW-kVA zCvZYImEE_;+pq=9uEg%PgND`6&P1Zx{nsv(-iPbC>dh(JE_$t?J}bjiW*?t2*HobT zD4h5y)Vm*B*xHarnwk|_89Lq%d`hCTOX7o=0*$@PZoWfS?M6<_|uGVu? zo^|idU5`AslQSJ zYBONKj?dGPzYjxE>+wG5uR4Zj$}r~7U|aj$Sd*3fuSgZDg+R3oRW*Kuk3I+PGkMB9 z%~n{vb`aO+=6(HfP`9-z?G15G-qU#+uUk*&AegW+g7G6YvAN3S&-}IdtrKvtOPn{y z_E$H`sF0uk;-_7}3deyb`;!ib#_dhDnmz4>>&!Fo#?_dnQ=y#NV5$yMsVh3SH+wCh zg2*Od^9sjX%56R>^Dd0@hlRHP~ypCz|0Tpk0QM|75NDBCRmA1$exQ z?6b?3JopMU+{WE-9N%J-PxZJASZB+ZUpb0z>~FsdVRRA7~?dh zg2`d5es8&qlrl!mz9)zB+((0B5G9}uv^ zM;m51gk*CpYcFm97DxGQ1y;^(<|zX2tU~Tu#b_=5v#RW%6_Udq?>F&V1NhO~{0>;k z_0d+9;lfJ5croK!(a_i@&*nw=)QRlFNHjb1{fn$qb{z(utB_F3;jx8KkN(iPd|4gj zSJoc@sUqOdn8l_%v75C-&}m`r4A%V#Qm_zNAb0Ag@J1?R6+5xj8sPEv2Dd)`9Wz$X zf$A#p)6CsQ?5Y*-m~$>H_0;TUwnNaOd6j4I-Ht5QsPtF?#tBCtAJn5t7Hc4oc=<@^Z+i zGb?7vCl|1err@(FShDVAd3JF&Yih>Vv1lrDME5a|nX_i_8sAunPc(tsy0WjbP_Pw5 zLRMOzPi_ap`&pS0X=|D98~h3L(Vx#EZ)PBYSHK-cveoAEMtK_FYM#CEvBvEh@oc>Q zzPzOP8w|e;4I6#87#ws&lavSASE1RAiE6{j8zGh3@YFGkVyvWDp3<4|fLnl+8T1vP zi)MVU$9_9Ni}q601Ku5KHZo&1G_fCiPe&_E<>x=Z*Qy%kCAy*-NP2I6lH6B&p|nP8 z3Gd&5>Ut>pYxZT9uXQ!OD?P~H=As+#8?a_Imoafh&23?STKcn)+}0?W%Wk)V$znj< z>|5utvWlIYFJhP7kShB7&H1+burZhVD2+ zo0ZJH8cCujPV38>9o7I{58QY0>Jezd=uaa_GpuL>98fv+6CAUH&sgm=i6A#3)?A3) zti!lLbK;9KR~uj{_au>zW@v5zhKGRS239KFB-xRxfkedYX6~uk$^l*DjLb4MX16>T zS z>^JInD2ng|AKD!0SWKgjnUf#l+Cr$hA{rg z=uUaxm8S8H?c`(~K${0xu@R)p!IJTP#^gGF0TQ4!vo(N!j3+I}7zbEg8Z4E9Rx2}y z5%l}eQ+9Xu6E)zOZNR)X&zq0F4O|iUU<|rBkZziWTV2nB1&Mr=2pY!wk+y%F$hZtRHTLg;qnMA{uW=9#$a81Emr92Nc0xDJs-p#DX z^0fDE)(|n`eFr1CpKU<5Dzs!iwz zlgh&-*hTF;ri@fKqQi*Zh%v0KB4;aU#oJb(md^8?@rQ?bzZ|PE4mhdVVLpVgmaZ!@ zi+K{If&9Mw&UW!^3Gil)h4w^IKDCb-le$S|z+NM8mqdJ;jqTmkzwFTLkVD{I%o^A3 z2vzy*2xC`eMB`tKNUogUS3w?U;?H{2+C20ho#mMrveRIs&m6Hzu zMKhhPU0IejY+wbYvDp5FlCx;MGOXK3_N4AZ7U+0Gn`BPr_>2+J<{Y>#VPWm2D*QAm z-P|OjcFcPg3MJXiE@r6>B&9qf0x>o@($} zb2-ZMn^mr=^NyK>T9U@ME5Frjek#YxO9D5wv$6K-y97sxlrg{G9HYa~lN@Mfly;xF zGTYIf;>e0WJ9u7O$7~5@ej2H6?`&x&$;UEdLbyr$<}x_G5EmzAC7In(9oQ@TtFlUE zt})uy$uYmc+=(Q+XDhR(;Bxn>6fk>2d9DUDA18oPlj=w*#?|(<;*Zo~y#OnR7^N(o z+pp9Jd#Tj?38884@k6{P7NpzVtk*i{M$hia?<|H2_TC0T*cOJtn4zFJ69>sln0 zy>hp)0xR)oGia?G;9cdK+$V<3x3ZgML4Ibl@G`uc;euw!qa(+^+L0iq-LUn??Z7m6T zREm=OJS8}zR%gU$%37iBOh!@)Bl)^!{uS3;jD4GJCKS@ZTJMsXF;-hpg1O5iC(=AH zso*GUOzC{ z!K*u|#D0`~a=miPTsLV%evP5t0&pRm$}qarCA^Z@Hv2&o=hY z%tP~}FDyL$NO7*#_oP2Y^LP}=!n0i2HdWQ5} zWvV9{*Q9i@Bd~B$zsV0(c*@h2zE9a?0 zYfw3;L=XmAC~6&fTTE*=symfXY6oHKd2TZi|*qlJ)35grdAFCgkma`IB7gTpr%qAI8*JhsaNumFkXNX`0{7 zwzfu>c7&h%FE`zptoA3b>CqJS+LmHpyF(o;&zm=!$g(8kST0sSBw3fr1pkH5{H{C% ztm+`|ZDUtvXIgPk-S1hmBzxPM-=npngr|^DW182gh5avMI3tL@Y) zg^Vucdy8ZBNo`uCna^1Rrx<%W3?-S*suULXu2DLdf6ejLnsFaW(NcLSVix0JcB!rG zsmimH-UrWEp7~sbdM43g&aTf_Ye#(U%m1EKhtNx)4WN$H+Dj^0X<14M{{q*FjG~vy zH3?}?sB80oX+euk^_(+!;?cgbSB@2_6S?V`+uiQqQ&NN;MJ@FZ-6r2CpQMH=>_y+P zUrHu3TiesI)kbxjs+Gd4vbK`UBW|_MJeiwg>`Bc%X?MHoM3R(d4|-0_yB5|;964WJ(yyb` z@Lh53y_mbz%TN~V{=@I(IH}9kS_ymEk+iLrvNw-XYClgYQI(PI&J|fZVk7$~16^(B zr?#rHZ5z<@JYn}{tBfkEy`wP)&k>Ax2!V1Jb0F6D2UlLn0If06!V(fJbPgoC5S)r8ITGuPC+h<-Q(M52UM%IYk@}v|HX^Gku&T}MFl295?vny{^1Ko`@rz5(a+Y$`vzz+U z6QE}aAzlhtdYY9xw8fM`V!jwF@_t3Ftz@&GyI!57VwJuxWslVF>B7vq65v)pgf)ib zJM9_IvO9QQ8~XrI)_(F-W+kp7{O;*0g@vIv$J)N0%f!EDb!{ZA7wKGDR?jQtJe_%} z@oZsdX8A=6Py0qmk%pS2Ol??yld|=Htpxkt{jB5FFi!(XC1ItkQYFWH+HFPirvY!% z^qVRl^c@v}2DL8quPVdL0@TW_o?o5b56?_OTaTa;R;lRh+Kub-xbcp~stDEv)ca_S zN$Uu123}k7P->$r=eHtolKaz6Q`;PdcJ&pg)s-zpnYAi7Ef3Ep^)~fgHcVMRu_PQ| z#=hD>Ke>66`Zy}G6RB2BtB*rHp;YlaVi#TQNug&JYY8OPM*i|v#f(8YLZ6-$ACxJ2 zIOT0AL+BRGYYQd47Pr(SH#k!&KcoHzDL{={2^^Z^ubrqK@m5#6(@J>>Z!6u@NuCq6 zTGd-6;X`%)9&n_E>}#&UI*a-W^c`B~%Jc0ZAg1*q4<7^v@|V6P?F6l?#NN}2^UUmd zMc<#N5It`C-1L1YS*q~eQ;%L1^D~5+lGoZ5W%!(0SskKfs{YqQrWLCdEH%gl5%YWQ z)N3xC8M|RE(!|nKrYBM*IZr1rQ&%d9aiZsi=3lWUrW{y@_l%jT z&2vIlAG*{b#iR zvcnxK6CGbYD)mU$-UQU-e~~=r>jQV4o}g>up)SeyW1(s@=Itt3J1<8{^H+7AEQ&Od z{=GSpF3a<~mZy-Fmi$ZU;X0DDmG=?WLe)FvZH@e=U*C25s+fhGBQc+23LcUM(Hr!!3;Ol8l?XOI8jY>G7E$o$Ao+Y&J6Tgw? zAy=OG!~Cffcei?~%vIIe(+8vH!fNSqkNl>VRf6b~*w37Yz<7jQFsez9n7YsVm1NbP z9THxYUbR51;p}aXzAh~l<&mG(7nAr!)wfF4#KP3tRiX($y=KLD$8~7Yxf0I-o+n(X zCuC*7t~^gEd#x_-*;T#f2;P(AcwZ?i-#eq;4r#p*n0vZYqe)+4T)2r_^?{Yk^l6)^ zt)(FKX?45$M8;{MtAWL%e5JH?&-#YMo~LG|suqDh@Z{X$^Z%X8^;PSivAUU~xHC^^ z>Tk7$UI*<0Po4TN#i^flWa(15=IP5m9|=bF{8%AYue|eEc}d8-KlP*j#pF!xX~?xn zEz*xr*4~l!J?-iXk|L8zO46E;v;Lrz?Ms4Z`-htwM0p_M`CNZ*@_8kLwu%0b4EOMI znwEk*oyY|Bj#O!%VX2K|J}gIyE%QZ$w^zEf^yx? z0>z24JHi_6uk0;;d15GbAxAbtsSOyn99E%s;7fR|Ik3_nro6Tay!KH;o{|sD!PWPm zy{7loNIB0)#!>udi%FqM6{Cra4=KfbQoJ^MRiNtWZ!>ri!j*Y)2VAD-M@lQno;)$y z_awOk()XHpvh>uXo+WVWtCo0u@uPi4BNin>OSv(s`*^a7IO=O3XQu(dD zZ#;{m>Sq#uM$vf-?yZ?TCl2)rCfZufpp;bJDiy?@+*67D=JM2~4dGgkvV)53RJz{; zl#-Z)-K^KDOa5~e`hfKUO8#ecu}_sYL5Qns=|-h5D8J zTluVIpf=G9r?x!|c0FO4(QD;_5b5M8#R#um;MeGb8o+&bt}g4af~Fn{b&YWpdJ#S6 zc}r7`m3qIeOqSA=@}3R65q4%zNu`-J3w0|+D)XweCcc%I-mB@!$TD|Xem9oFHCq|W z{6neMNE-E-bWs&Jcz>p6IE}q%g*4+lcCde|$EX>SXg}?5?I)>CX|Ffp2(xH~BsVK^ zs}`DCYbP*D&OqvAt)AqrN-vp`>j0k>(sm=#CNSzq%CtkB{iy@KS7ol<;8q*b^Osb= zi&yn8mIA8*D^gA>NA)NwtJO{VYJ8$TpV|XHqoJ=}p?P6U@xMSJZYG$tm~`ynEQ2_xnpvO23#nH^%gXyYZ3z8=(!9M;)Teqb^=0mYQaw@Y4N%tVUlp@8 zcv88l<*3}(OCt>AvD(b87a%$DN~zM8_K_!Ot<_9^UHg#lT5;7_qfuAJm?)#Yf%QzT z>?^^}w6LVG7@6;B)H`)^Ov@o@-HWkNMgNMOM9o*E|t;#_^xtI^%eh)Fpx9R`j~@LjN*HWg>pp zg3dtE-C#_O;dTf;tL3y71fM;=K4n0v=w z1IXl{p3y>tu_^gqw>w)pH`O&N8DWWD%{DQo02ozV7om@!% zoc&Zj0z1dj4OvNI7N6C@rm^zUNEvfcDnk|P*q2d;o7nSVc3uI<=r7yAcPpc4E$VBQ z3!5UL{st?aA?mWDb-bgETQ&b_v8A*vPmVx!_<1o;)yI064wW{gBBs=*wrYxHe;g75wkj%d73k)5g!ZLV-2`RAJYn8 zWcREE%-jsf>|-?%Pb*j2AwlIiwO|8g$U%wvhdgT-sahv5ebrRz{^OvY&3MK-LF3=# zE`_>&BkQpgvssyQA&@g_ViB)x2YcSvy0`t%pg6Wtq<-!!e^rC(Jf|OGCcSH}I?FTa z)3tDHio9R#eR(wm=f^_ZH$)*oQ&IG`pp_p)Q}(pP}_-+)jJMor>gmgG-A zCEyuz_uQAdZ$3|WFH#K+s&=fxN@_9I56oSa`0rxOY<5f&cJ>?lE(b3i=4Xm^oxxKp zSa$=cc_}dN3eF1IQ&CowB062I;pxO0m+g?BKLHhEbG=zKTiFQOZ@@|?Di|p5y^&}F z&1=)CpOd=32hj??)0Ldc40A4H)bm-(oZQ_&a2Zeh=cE6J)wc$NKa$UB=E{AiR}P?5S6uy_xA|6{khOu@)5Vt#y`9Xz7@BodEfaz*8VNjIg%Bf1&3Wio|q5_$bXZMt|JHk9r6di%)QPya+#S+ z709*g25neZ_b0fjS?YZx%Sj{6K@Rs8u>A&@dI@<@oqXT+Q0|3fqBQ{{XTbg5 z^KC|g>w~YziW-osR-G|#<@4EGFEF+h=+B4qK4ArqkhN$f(O1Y!Udn2>AQ5k3yyiT0 zA6Ppds8t64tKr1KU}QV_?SqjR)?=8@N={*ho5<%~Kz@7!DhOm!=LH#PuN6>xD7QN< znfoh#Gk!TV6*fZPYn zdO8&XdXOQ09y9bO@BKAiHv{AtvbB1!L+gE{z|cvluYg=fcJ}~zva8tZWMtQPvfw@I zEP?hKz#Df^S>tIc4lbdR%IVY`38>hyk8ba0!n>=fFEukhJMJ8Ji%*Zc#VkX&MU17w#$jmUWni|0xp$LYUOM;@oAPIBQv4C$67P=QiHgQ|#^d9~@vFH(RMOa# z>J~H(N(FzC_3mxi-Bf~jf}H=5xy}I2&8flhJ{G>c)}Bsvpbo?^s^>Hg7C|2IE5|dV1<^Cnpr}avRD3udfyS7Xsue7wc1%o`>Jg-H+1&4O zZFaaMej#2Pw}eW}f4d=75L9Qr%|Vm!BkC%g&Zwn=Hk@f%G24se#;=4Xn?RFusbSI% zXwAr#%l#P#xvuevamVho54Si zLbcW5&BfF+IfHsGy@1|8>T|TA3eYdq$cm_y^*S{3I}~WmocnT1;|XAH0RKOTqj*OA z7X0!kbl3$feZnqRQhVee^71b7+V6vpK82zmf`JkR#iih6eLof8*e=);Uqd73=Cbjl z@N6j{xi@|R+TR7X_NKa08=_4xJ@_(spNbYuf-zLgsR-BaOkEU2;BE_5Y}#UhT?_wS zotqoq8_$Y=h=+lxt;{+jzMt&uspx@=`HYnvW|6miRW7EcPG#i8g18}aNR9G#sxwt| zz6tgQ+k>WIg|JAtHW&-N?@z6P2Tp-k=kTd%RBt$)DjX}BV@&*b{B>Lt3OO2IlF!7R ziv|8QF$J^8@c954JB6w*eZbxf^yzpq^FPJrn~@5Gms7h^lY>kUhI@kY;ksZU6jD0; zj$J)RU7x>l6`_Gs<2BLI=;!FG=z@4$+&`WRw_2m_U0}Bnt@9B3*$9N2re1*72UD|U z9vaFs)4NEmVPu%Er3Td8)T!Vm9nJ)Hjlvtlo5Hf;z0`%8i{!W~_hwut9v2-SogG~q z^@)~5|3ufsm8c%@2HHy>_1V}BZ?NtKNWO`@x+ZrO@@4?=_!hahk9rt~Q&$J$gFAxv zf*--p@4@8Y-Qe!v_~0DMdtPV6klP-wi61}~P0O7FgkDcI z3+4fxp~2E%SMV0qaE=6Pf|0@V$jq(q$|35xw9S1PH;-$^H%6xdpVINMaZARy7tOf` zt$ZtxHipYuc00*N--FIt3B4^wgWSj0L{@nh6ng`+EC~Jv%imLN=RUO6P1x-Xa+d@D zrBTCZN%r)pb^J^GZ2VmuqDla{WB>5N|PiFMiKt7xL4sCEAl~V=; zL#V2?pGse!1RwI(!${rY!SirVsa)r{O*}ICA$v~rXY_kiJwBhl@-K2)dY(E-W2j=% z3d#2cV-JU7y>)vbbvhENJGF>91cRsx)F)^Vq=QvRlAEa}b0xL6$_MkXV4kO9%82-A z)GZnuy%4QN_FofsVtv-4>`Df4OLW#4YSr|}{Sto?cSYNOkCyMu8W#o^ge}6p;d|j{ zVb$;zpwcFI6Dn>;wS-yl)MfF+`1^Ps)c9p|AZ|yksuQu|DhJ;o--c0Ds&r}~7+j7- ztcgsn1|PhN&G%xeXRt3gJ3J#C5Z)Qq4l9R?kbC!I$@E5M_0NroS4Lx_tUw6K5$uHjr$X5u21luBGy!dML#|ysDe4lf&z_MzHCqsEk0!^}!Fj!) zML3kN<>B{X%kUiFQ8slmwVB?IMWzbWwI=_BJ%%n)sdgiCiHNm>4`6EJh3TV?Eob zu=OEN{DfR<0!I#~qTFUEcXhBTIFqVI-=MR?)B{lKo_KQnQ}k2z;q0O8`_Y}zu;|M8 zHf;Khx&J{q&jrKK*9F09?1aTs$QzDbvN2T~ZK`&CjX9qRehubQ59?Z_=NxRO;qgAC z+4AWAsB?6C^m#NbdNQgX7l%%3f!DjxDQ808>#0O_H+u4IYAvmT^wZ+_;`o(lPV`gUGxtK=5Iw)0S|Wd8wMf8*}RzJAnAqxuM3{Rq-!f?8o5{8H2yQHfVJ@jGHz*nJQY5hVe9t6&i_6~HB}(=8#Tcigx$m0 z!L`9~U^XYXoY%f#Wv?I|cEvm5i?QY|XP3W3E2DK$2iDg&?h^kSe~!L=m$Tq2&_xd_ z>twJ8OF^$kgQDRd!F;}M1Bxw>^Y`)ky;#%VAlZM3uKcGJn(tB_?~Y(e@N+N@S{xV5MB~*8dLjEy;A}7wJ+v^oCmMxJ z45Bx)OS5gG*P}4LAf6N7f^~QT)cQPD#qHs=@cHn?uw42`*e!e=Dmw=boDd9zqZ@GE zY|Q@FMK!VfcB7FO!drW@i;ys_(EU|&g)tq3p!sE~hk`4@9%21(L3mbrS=bP1`dHXI zd^Grhliye>fc>7Eh+e+{39>8d9(|MDl)Wu#6;%UrPoo`2;6Hc=+n`TSE$jmC9|@PF zXQsD>KZM7o_hF6vOfAfZIJ3PMw~Ow}uE>4~w2zP8$qqoyea^Z*hVa%9QN(O z)J?%3X#NYs!lbM=r z9QTB-DyIeo3xWTP)R|$~^uy_*1#8n!rnjU^7Bo%|z}h(_91x79n$=x#%jm}JFPXlX zeLOoL`*db;CXL)KPF=({oZXhDdIbLjJ;EC4-_wt$JEiBOOB9@(zB()xUVzjaf|ZY7 zG#Z`#I9nN4wGV)l0F zj_HSh=!snX6+sgWN*x=2kzJUbmVGJHCv$D~{p^g)$C=8}G1!%pbFTz7!*S5|m*J8y z6Ru5u8)x*;b@?D zdiwhG^00aOsq{VRUFrJ@_JysmpdLjgHj8h_K9{YRJt^~Src?Hv%!SN+C3er?cw+EU zdT-D#6^4cBRq1cimly0vH%yO7&q)6m{4e!z5QG=z+GW4V9G|@_^I>7z%x{^OGUGDK zGh?z3#zTXl>5bw4f)PQPbcce^3W^qKTjXd#uYx$NAN-m+K4kT&zp@Q8gA0omUR3x^ z;mpEenTgrv?EH-Q-mqlBys%AJJN;^UfBKVx;RTD*O$$a8Yz&tn5zh&44L*oJ$kxb? z&8#bYyRc(sS>~(E&6z`)U!rEIcc{7eR&am#YI=CV=7J}nxYg;i3hqvSjSMRp-WdEE z56ym=xi+(=@Xf-anaeZj%)-K!*($kv(0R9`S*{4zr++JQanTw@8W+?qxILW?rw8|P z)_5V;AzGf`$d67qoTv_DL zf&=N((>2o}wE1~zMSOR3LADJC~ z>z$fwjl?-UY7`xgE{?B{9?7^^n5tvq83U_WbP2*|(#v_ys$nk1xTo+DFk3ycosg=Qdo3yv6^qtopUl?I7G|E#z7%~J zPtARv8XcU5oT;6@CjDai$Mmf9abRjvaBJ{ds%CChv_E@a_Uvri?8eMTnRBwuqlwXN zapTmK;J&b8dU|?Nx+VWFF8C+C0E>8N&^0w5n`jmm`~BIUGea_OXRgY2j}}L#$5-X{ zr)r1qhBeclrVpn#APwJ7-;$mjV#%d0%v}(#LV6C#-k!NEQ$PDNQuVv&^>`3=`NH5X zIQQ%DGM*cOBtAa%!2n$f4(`?D{gm6}GMMQ_KPj8f;Kp`)M!y6mj* z)o^2YOZY5)i6QubR$5ya8|#~BWAtqF29({9GxSV6nHOLy;G^Jdb{%z4!(cSNlm2+~ z_EKAOeq4jI?o_O*T6mA%#2fcCcI!;^?mWCbIi4Pgt@JbJ$*!D@r*QJ`h)?TtJoIN^ zThxG}=ixOR#m|qRgVw1h@d3PtKjj2`ljmYrpH6k*t2pBh#v^kC3wR)Y%#KtN-kK_h ztbGLk*A+Z*HK&EI@QAz;{}ykG*WuOtDt9v{?}2#oP6-AF4`LGG{3HrAZ<=MH_ z@yB@BI^bogNWDuVU%bD+iWleWcse%g8}Z2a zOT2IEa}UAmrKvA_Ch})CUlXt@8{oI>!io9~p!;`xPFx9Z#AETd@t!#5s^%ij8W*yn zzp+M#Koe(kz8=KSqnzV6<2@LUFZb*C8T>x`sp{MXuf+gXI2BL-HB_PBLKWmuU}k@+ zA{uuJC*d@<^h?mt1Nec)Qhl{OXHh%)3;|w$aKCmbpC5$}co4NSKLS5n_}&}8x{(3% zfY&OZIT;vVhUfG?W`6?j-xJiGoyEPPne=*Kj*W>pcgn!|9 zw6Bp~-m}iY-#UrPVISe=T?Qte0@f4pzZi|XjMoaG@zWUb7M{BVFSfU)cDOqRzvw|c z8)iOulf9gk+xKE>K2FZM5XSpirScfO#0SCpC48NWm%#374LC4|k2?vj8_en-rVMYRM@djM#kNv+tAIkEhR@1Y#DcnPq6l^Oj0JhEW`bp|VO zIv)@HUP8U#tNHx(^sIRnD80cNcXLkci2wRSx)*$lPy2h$Ot<2XIgK413yuGSAM`3b z3|-*;J2cPwFRF1F$HF&(Vl3#NwS z$LzvA!5%)3j->MCOK{L-!2U+~VJx$*#aB}TYQKsnUgO4Q5@(x9`CbrxxZm3h%}nCH z!CnY=QE|BgaK9BA`2#;)gyr4|n!64eJO!9P&hyX0OV>bK#{=tcxHJ2d8DC=_YgkXj zZ@3UCVWf8o>b``}-iO4vllv&E)EUcV_IQe0VLkI-@p(IRSYOqs@pbsftS40qzGwj? z8?rt#qRhc5f|T?=vLX=O!U$=g?5+C0z|(we@A9p?Wqy`p`tn+1rd9J%)My23lLd?Nlhd1ae_EWB-XfSODgXWGs!`x)mBc7fEm< zkm(IY-H048#&|!RG#7pGDzrNSn2d*>o<-|f#jYIBUB#!b#jiL7ntcKq>;q*TW&HU( z@d;ngfP>L+*DKJ-Om6k|a*xoR8_T{(s|WD0^yax}V|gH?UOE$Lf)pTXB+ zsB8sm523(naQu15fu`vArraCWV#nUK+lg)o|9|8EI%s?e-_4FQ*4HeiCQz3ZUylQO zmHFSCbDeoiRiJny%Zx~}{-@Pc?7v|ZXDg=eU>DxDEX5l5l^uV@-$@j=Rb4Ca%o)&V zF~&O`%#}h)SaGcgxLw0OjbJ=Pq@xv=E&;wh;L_Kjnm$y{z78l^bz(U*`7;!EE7D*n z`oB9jB4dH?H>_bU`>xJjLub5HE5hzOv$MYN`E6Kg_S3wD z`=hJ*x(2CtFYCAgdO8a#8j5~s1vL)f{@kj&m5F}X%+1JaXwnavs~-2BH_|zyFus;q z&O@HOn3pT>ure#X9s>`whAP@ZWo?=DCL}^##=4YOk7uUG`TIt^=+Cm27tjpWT^|bN z-<0o7)dKBT0zdIY;QAb+-wKrN9@3S2yDE6k?_tj8;DKM@jE|X7t~D0J&V^OrtNr`tAuE4DN+enPRx>pZ+nN-Ip|18o@fN)~(nJAF{XS!P_L{_I2p#YtR5E@Y#;w zcNg};=gjgr4K@d^wyvnP3vWgKb%*07FwbLn zEoU>+R89?JnZZ7vr$C2|kqX9o&SteU;j4!je<~Dy9+tzG%yTN%&NSrR18~?5xN|HL zXgBcOL@Ze?Z0hRF&=x%0$i31K^x})$^S*(%?@#<_AM?t~;I0$$%>I|w#9IS(4Fz8J zV&B{W&2{I7?Lutddr*r_zQ%t`Sznb5QlS$c#PoGg-%-VvQinc_<4-jOA+tvzU>ZPQ3-*pJ6{|L3Ot? z$4PMU37pSb((B<$_BRx`4F^x}@qaclV+Fd$N?U2<#%XZwFmN*&x?azna%nt__34aL zmph7OSe|czKWluYxr=_9uLl@ktlM{^D>hzxD7zCfqbu<1$vR%b;u`}7S0WF8Cl;v| zTyzptdp#8O68m`%y57o(>k!_Mn)r#ga}V+h9YdtW6QP1RjPL>YZ-cM>47%ksWv2hJ zuTD@vKYV(Iw}o&sj?pfCS|+RUQwf}ClGH24JldOxR)jd(6+GgCpZ6l-$}w+`<@ z+rzP#3b1?@^W-RC@))-58UIJreZc))l?VU7nF$**AP`mvNr1424B4m@2X5Qqs;#rO zYWuIV)-L;WJht|+PoJu-)u*+sTXCa+D0}ZcLIQ!1FaiWwf&2e?|IU+FbH8$r-|zc7 z=Q`Iu*SXGhwTpO9xH~i*@#*;P9bxHTn&HFo+rPBlFJv<>>q~X&?c&sTW;Na)N8MJ2 zf;j)W39tP$kM^&Um6s(^8<&}=zR{VD|Cdqz&C|b;cKv8l|GD-ppG`8)Z2r$Q&)IRv z7o+?&t>fY-vTOS7sI>I^lE*KFt8>aExT=$v3$s=?<-O@j{4061cf>0IQcw$JzaNiNH-;uYf;^U+FH7w;W6PZ3E{rttSb#|u`SM~p*u=K-T z`Ed5(*nFh5@&6Bk`Pbss9kPoCQ*+&}rPm47C>x4hQk!}59RR5!3KPkxFZIp9$Pgqq=npV`k^bg{k zk4KF^%*y>!82V8o-6Cv;cfDbvWA;w_ zx_w|*_0@Fx7vj|q#7lqOEbmJ%{o_OjUYw4<;K?fToBnCtO&#BOnk|Ij+$q-p6^DH zpEmDZjeJWOSs2XQCBLtaUI#?E4>ZF8Y3;XUkrx#y()nU;+Ul8TMx7hWH?!R^((rhkEaYWI2VB45+U`sKcJ zvU~c~VAgwkmvpb&GnZvmFOB;89iJVg&TIuYglU~YACJ>i3e>|v?bo||RlU(sWocgY zKP*0YSu^O)_@cPt#ZhqY{;QtjCaylfxAb*hSkOKC$H9Ajujy;CqIZ`E_p+#{#*4~L zv)XO#5#wWaJ6$%;vTkqUG*B*1d9p`D_bvL{I14Z+5fwG?cP># zTO%*egIE)F)fSl-Y3)@a!ggqb%(JB9Ueib9w7&GcIkGwSinryFlKcA`O-Jr!L98aWdb?Is@l0D@7|6|TAotJ$URKC=bndO8R4@V z*Vmlz=|;3qhzQ=>8t-Xk)~b@PsDauC?&ECJ%wh+N!{35-F-u$XuB}ve5)k4sw}Ekz zsw1inxQVP*_g&%Zw(P*IakzcA*H*P=xBuL`S5;>21Yf$QFHUFO8>;ii?hl;`*$y5(n+QGb#>V5fD!(7W}npcglwcj?4^lK|1I!}`)4 z^^m>}OA_#y*yrpp>}DkVt_};=^mWBVmz@{%=Qgg6!Iw|?6}LVVo!k`Dl~<=Q9gU6* z2kjtWQaT-_f{ z$moq>R==Yg!o=S~W_GV-?f>Px5TrSYn$(|%zX9#qLuc}mp*HDlaXb%$$2IZ4HB!Rk&U zZL=&&;Q;j()FL3&s;jCr>Sp4QS+xtt{by39THA{F^2Rv-y1p)(@a|<3Ik>se?+Zt& zIJg_SeIuarE>XtX=d^}Vy%Kb8^H}5174BtNJKagYxZ|ZJ$?ORnGyr)zF=;wJ@8YDs z9}y>w*yZ3Qw?64C_kU@?xf6b!GodSdyVp1>6tWO(wYwR#HZ5^o+(x-pmEb?ImI3+Qu0g+bzbq$ai zEa>u}qwVkPFE=Q7ygEQT$@qD&o|6xYGxZW@RaW!~KGyIIR1_lpZuIhA^-nu)B5AM4 ze?7H5@Jq8_zFw9U`<2OWr-gCd*j^Yf9vY1M1}VF_aKh7W`?(3Ic7>WxvX} z+{?r2b>Z`hbjZaMY+e{%^-H_DS7Dk}AzAuwUfS1Hy~?ihk$7Nu$KHWf#yfr+-5U5R zc+;&|I>%WAt;X)_XTuwrlgy!oN?Z$qT-Pl%&-U&=Jx%}F?deO7YCKropwux{XLr{2lN_mGM3%C>oSo+2oDDkInns;@_q0@>8MYLE!ij2S zY4{B=iK;I@7)>y=w3{B%>Vc^yZQWcqLv4;?6Sau*EE!8uxq!p7V9>(ZAYnXUCg+2f^;`IuA=S zUKQ8v)E>$0-q&Z%b}EXnSF^iYd_g?$vW@9WZJz_chV1vU*FNG z%%2q@{AQ7u-%6X@U4-Sw#dY3Y1nEDLb~lmd^xPJm{#;gM>cd6Aex4q9vb?U36qWmN zvENgRn(x(|>iy0QhSMA8w~B8s?0)6Xi!)Yx%E!SNZIvorJtBJe(fZ)vLHIxphZ& zWvC(59bR1Fv?2?y55`A&{=Zu9PovXA`AmDYyF4I`c2ra* zyWcBr;RfZ^#f|1Q-f6A)H9h0@_;i>i8Q1k)9RoF4>}OT#=7qf={k~V9c}3dsh(3K& zPdpkGZt1DViqq>qaB!G&7W$RqeBbUg;S=G|8SMc2I(WB@A72o!9o9RlKRuMS5y#jp4&Eo|j*ov9M=590yuY6Xh58HZhOT!HO?<)g z!>h=F-miEU{QLH)+5J~%iB(zBYF<|y^Ua+i9Us+}M&+@8-YpJZ8irJ!Q7Pr>c6MJa z0`}?RmS5=W8%39Xl+0Wehn+Lgu(zjSRB~W{cAI#4FO1t>oW*@*-VG1(z}BYj>``(1 z8#?84n)K;T{N7L$_=I%O=27Xtim?4-(b4x8O@3`(rxfvhZ4qm|j753fw4MqkJ@a&! zREKic#$@+TiE4*6+p8zzzok*%)7Sfp^uI4oeP>d1V!S#(u34RZ{&DO1R55p5*nc;P ze^X}%zg=wkgPmOI%c~lOsMU-5%;E7rFKn;Le0IPKqtNlacSe%@o5}S@Tg&hD^W)9< zmUP4!ed5r#OnmJpopStDJoekg!+*b-{;03tX+CxPOqFEPTwCW`Z&s)zITHzOy;qQe< zafjO`c1q7c-F;ut8O7_<8e)S>g5uHW%JMHuUN&mw@^-|1al3klDvjQq{D_U*)L2g1 zuTQgHn6A2|J%pMEdqvq}8}TJcjHs)qfG(X!r7`3S9T-m4aFIuGVbnh-zP+Rsh!NSP z`Vs-+4~TfNYtIMQojrd}QuVX^$jj0mdhP5H1`cn;{o`Bu_tEgj($4H}`)D$)&#dZz zVum6ZD#hC8*%_&-O}Fp_ROK8y1ODs16L?fG*fKk~AWZDmcl|C!Vbm8>&tdm;(cXO* zTN{;M)=oSL6`n?AVKoW(1NwnF3lRCR!%`*8PyU7~wN|d$v|K5blw`EA<-?;b&Y?5zFwHbiPg$~*dzL>z^{&$n!@79Ba1=REb*Yxy+)tRnm7R&`9(ZxJqT696d6GsHDP$xsA`WPmS!|w z_1Nq1;>TV~EScvhj)NoII<=FzYckjB$xJF>@=5vTq7SU?@Y8v+c7^(F@Zjxgc>4ni z`(?YQvHQ1=u#4ua&zRstWI!Ehz4=DXTb~zgg@zpwO@SklC9vm32w)}T+H475j7io3xC^5kN?IIaUHuK`)#w)@nb%_FEfb; z;qTG^1)lshc2cBa?EG+?ZajnQ@Yblmj8ZC$*(rz)c?wTi(X)+hKcVs~YK;AueTW%- z7Zaor?ODWw#|QXaADv+%0Uij~vLV#2hE`jlhG zWd{ptIu+i@t*;SrCc_)GF8DxcUn4^26IKGAQR5zGl4|SNASL#8=w zC7C#8>~%r0;gvBm`m0w?s>cp`@b1`4;|4e*QReolzdSSOJ8-Sy_~<`1_Q0ZP;7|)z zM(F4hL2r!}@nXE=yj>J>L^XU$rs}{M91W;LN_fVnbOS7nn*T;Y-9cZ_+2s$3_kHm6 zh`Nnf0v;MP-Vj}YU6Swp0o|b1kZjR4@Qi4M@jQuwC^>X5`jRHkq0xp)=7XAJ?{Br^ zw819_4#qrQwU^?DkTbG7q|z#_dgw_M;?twkklevJoq2W+t z#HCQk+6Ha$1Mc&#FWe2T!INs%ia_JGfwM6#$q;KIsq_Q8gAeFdFdEfAa_SY<%5US- zL)U@TDHvLzA|1i68<6S|Mdr*pBFgACPEbVZoZ+K|QH_UNV17gm;Q+smvjA|66DOm= zE8PqOXf&)jE;aLzOcfHH?$alpuzMsOLpzUp_38?$Co9(jM9zeLA96QpvdbO;8=q?f zzYeJ;!S>ziQ=+Kq+Iqxd`AqNwk7Rgs164H_Z}ITZ z(+b83HLn_9`7Tl~HfHQ0Uvz>94C@N3-~lTrJ*$TJsJ<<_q~@h8Z{wMJ*u|k&@R28V zh8GXkD{S~_PP@Ql9jZ9ncaRJ9jfcL|!$~(TCz@cy9W*{E0FmAV;4{B*Wa;>{4xs!C z6@_7gZ$A2wsVOgpg8EMuAyL&+{>{_nUb@4fw-OliGjSe6kK+T{Kwl-aB|S9N>Ry}M z?PnBLUsT<2yEl48ELZk?m3G2d}DJh-bvN^ij5I z)Fba;8j*K>gXJor!Mx^|skK?LKplI@xKEDi-Y{ZEEbgmo)#k-!_`@qF>sKX}zR|Nr zWbyW(-FX7}mPOQ_YKA$z^H4a@rD@l`qlnY|hsyYMgUrdt1O0T~04I7NiDK1oKs$B)XXgK_zb*?2gmc5lx^6}3!oyFe1>np+V|F8=lbXdOVD<#JGm59$ zgO2$0f^en}I4^0l;B`Wx8oz48I{B<^rTUtwo2$O1>bUx+snMzi=2SO~c5l9$+yCNQ z-96;b%Zb(#$R72XqOfi~paxH2y4{a#67oT#>1u#awu!IY-%{sxw`O~`%5-j=3~i5s zDj{0?f@Zg0eW=y(P-Yip-L#$N%I2WM?H@+{ShBEl@ZT5DtG=$sqON9mR|gNdB%^yG zPUL5^WHd6K7n{@(c!zkvPIK%QWGL=bM0BU1crYBOk;(fJ&sVovJ=Kl6zegw1pSa}l zIK!BFTH>bz%Ji2laedM68R2kr8`&W|s>64F_4U;DzBigV<6PQj)iDRVd`i70Xrr~= z;o7YHQ}t)n5MK}m9#7V`iN@;EtLPw-kKfnz%ns2Sr|cQba~kKao)UrID4OYzquTwN zZcDK8FKnzwreD#Gwa1F}-Wf&R5TPBcZ$VkuyTzT`wC7d58YZ3#$10Sn+WTnFJk#$F z^qR`LvT#>4j=Me6&AYI@`6I=D+^(S|QStU(RqI*rGPS3-3ojs1WAmnV=*I`EXxFT8 zH=|wtvevXy9I|%$j4<=VaIsJ8bI0b2#&ARNn#P^m2>S)|%p%dw7j%oK`5sGZ9&ZnK zWRjqAG5sn3?$)?fEnPK8XBPiiKfSCu?+=oLTEinfe^nScFx=lB9z~p;4J-}%i>hU~ zd6=@RyEIJxO7Nf6eX)g6Tn%@6=7r(xs@~hOIhy&C(5 zpxL)itJ9}4@7>LRSNwKjJfWhf+|k{`$W?tt72J1KP4S%8rkelr&HU45T-XYxTl-D% z#?0o}B|h4y$ltkfY(4P8v$=?_2;#USB33Msto#AT=rzuPu&B3b9{MGoV2ttRQQFn#nJeu&9fkG zdL$X%EXs+GNxn)vc>cb4+V>=6OkXD>rM@y`ti|@y2;ka{uZIAC`U` z9R?ncq8k-S{bjRX87==Rylj+K{jWIls4BM}U$pjPjely`of!tsj{Dv`_0MrE@9eas zUO&y-oA(9PXj~O{&n!+W_f@}%w-o>SyR`E9>S(FXy2;dM8*xFBzOb8}znng;_373A zT>ocwX7IDL!FJs#JE>JYQ)Kz-;CBXeMO1WWW!re>sHt~V2j-NCJp9{ay?Z3hGA`Z` zo#kuX76lgd#C6e0R{@yXW$LWx`YY8b+`b4WnY_9C&zqFxE`QOUWY?hHr1-vys~>HKR*4JQGc88 z;3nH0-OD&2xSvUmz7jN>cE^_`Jt!-*QSnQkdTF&Q4+y?%TY);_*C$Q8hlwrXx|8CS z^~w9yae!L#2Q}}RN#+63_oDEnzP+lXYMZa@_h-W5acQ+5^yyur(=%zqV;Xha&L93N zxQ}k$1ES6SjiGk+RZ;b`Ri1h{{C+pg?9wX_HS1HsBA4uxc>Bfi<>kqn=(=j!s!abf zoc*F2fNGQP7wvY8YiBj%J=G!jVJEq-PrKaPdn=NeHzYY~XI~jd92iIcd(fN~47W4} zKW24$JC?h~J-1=RMHtv*XCuhLwk-((15%Jbn6at>LB7>)zh^aj^d)o#{5{aZ{g5HWqdgaC;Qx zWxOKp+$G%Jp5*LM)r>7Wtz3~zFO7cp$EUZYLl2L$#mFBClEYfn-kq9V7Z=ZI#Ty6j zO~LTo^s9rEckzqna~H>MN!50BkLC9t8}^QD>|4U^-Ra|9vkbo<))uEXM_uoy($qJ{ zssG-*)A89Gg6l`&_=D-JO*_lKxm8?}?{a)n0s1+~%KD`H;>JEWNN$b7S51GapMOyW zbi1HK0y0#5#+eP0i;;`4nsHlDkJDQZRqODoiH^OyQC<^IJ&-NEA$+V( zrgu;J)V)4C{KNH^!^P(D^PK2?R=mD2Z0^(NPl%ItOD=!dx_8X_KUuBNOPg!{#6x)~ ze)?+foScTaB2BWml^+mZ&Y%AEe!sMNUNG?``SRDt3ujDyDZF{^?)1S?LGwf-vE|P9 zzchV%vVFlsxA69#Y^`>ja~u8HG{6=~$g%O#xzm3%kp;P@FV6G1EV>?%thnWNd7tLv z92~4p40Kx%MY^<4?v%%Ia@f4SHMLms z`e38IES#)P3LeX^UYeDfmqh+N?C&0B7X{zBas2yQ`?Bb9SKR0p(AnYgl;~#XFdf!+ zsQR;85!b|B4`jLR5$yRd?A0YxUkoy~=h!qJ{?-jl$HN=*dET1#Qg!{Fyo2-Nlbh1D zcJA`(-6(xQ+;T@4bT47gem^sc>=%DK8L-c`bF^bt|NolsI5Te9EG~W|JnYd3w?;GL z%Urpo)#}u&6W30`;&kOT={TKk?!hUx@7Q+*csxcjwY{jpZW z5iiSY*(2&#y>TKpKaDUO3H?q9?i^9t`X~YGs=C1JZ%)~l5D+b%*`0>I#w&z;s z`EkH*@&3A~dT7?;v#tI|*(z1__iy#rHPT~!;^t%*9(hLUrQFn&YV;ZEf@LdcK<+&YJrB<`I|KE(i{6wg-Yt{7J-XZW6p-(sFG! zm;~wIH16p9b^QDGxO~&3oMqoB>|L1d`#>XI8K=7arVEemG(U@udxsZ$dhxL3z5hg5 zIyngKPDG!!3RC;V@#iNyq9x)v3&V!{vn;KQ7(1%d(`$yh^kwsWuor~ahvSSHVPst+(OL_G|MH&OrMX@lFVTF@PpsQ*&HO}K zSbe@*gKTBE-ZRQ=-in?J%a4Wg$Ku&_QRo-R=gHAt_jsMHX%4XieKnTFJ8}lq53ap;& zrrj%l{NCP?_wqoaieTwN#Z#6+qa&yKGitr)({yjtqRHJ&dn()DW)#{jldcnaY9H6;4)~6NEW&zZ?_Y%j{}N{h%YCjO;AvJ*O>l zEyaKFJ$*x8k9T#7kz1nA+UOt7cH>JNrZ0|+QxO;4)^6?RxZ$A7oU;(o*Oe2DjOae^ zTK>l3uq~!$9H%bhG}I{p?}UbbrgwD=T@aO*2f29AjI@=QjQ!Ba1Hki65_EpKrBCQ~ z=;kcF4HmcbdJL{&rfIrE25a{T+t6;dU(QFqNZ|N`P|ML$61~e3|#}AiaM!t zdqxC%oU{6@8^Pi%ct||lnVSsj(V@rbhK`zKL)_8nkP|G}7!iEEtm(wShM<+S!6tUM)()`ZKNV79An$+1AYM9O0-qwAV4fYgz>)s^i z7ABl!>byI;>hf%zSUJ5L=aO3lom};`(GvolwR$l1$y+KI1-IZV0{?*vs( z#Th-td&R5HJLylo`Q#osJ;Qq=1AqMV2|cv7Zycw#o^bl%oD!DUN@L1pL}~rN#!0FE zpU#<4!t+)x|I%3yUSbVlRDLNwa0)bFASX_j^z(Ga=Y-GAGd%~%02-J{E)5!6JD5cA z=|otj8=OVy(`~&l=2X&oxO`Rk@nu|C@H?tFH+5P)a(+lB=x9Xi_gzc_w4QbH=ai9^ zqt~6XI=1nBwA?v9sr4!UaEQEdowufY8ijR`^J)1M)+fH` zW}Y)KCu`1voCsUtIO~NY8D=8cW0yo{!jzh9o(He9MOMq{l)KnYWnlyyMgX7c44^iT zY>sukHuQ`bu-Ba{kGwIwh1$;btrD)_)S5;{0WOtuAgjYEKOBMzrwu#kyHj~QIkF$z z&A{UxP`Jar!^#DnAg1!uF7)!7l> zFu0n`kXaU!_8C@)?BF(jja84{uk0x9W7k+gnpzJy(kKJTzLUJp%li=Fz*Tk{GQ#Zy zb%BK$ltU370IY10Pr+kj`)6ef)EwnIvhj2b`tmBA$Is0w(?ExTdFvh_r)Vd4^pdhu#;=Oj&bv2!3^I%w_8uH&j(%GYfkm`P$l{6@@e=K zy16|*@tX0`Q^7!Q%%d6L$}J^Xi)fs3CFN*pvN zFXgFrN^8S1JG)bUqS}~if`E?PsrmFlpAoLdde}?8=vLucI6H)U zH%Nw;2s4i-6=EIi46U+LV?UZSjr$1ni1-#C-buIU7#{*>yYuYa*F76~KP-tom%Qt( z`+cjP!>O<=i%Pe6mWij}On+7!PG|6_Xf2sOoA>mveO}wBJujPLH^v&nsTI-oI*{s# zdSCkGxuU?hjdjy?Qx9{QJ#@J~=39k5?~e#GKTd@o{p|JJl_R2e@gwn(v1E&)!!E6h z9+tQ3I~`$vDVxr2ipJq7(M{^Fp!LR45~W~eyzic)-s`k79bu11n?Ia3-KH_+j%^wy z)u7!v7{vQnZFqohI|KQf^uB6^ZsOR9kg%;M(hXKPWWVK#;XgYE_JoBV_L%OcJ!FTo z%6uU`faet7!y{{giiC`(Xr8sLj%?ZiiIVUGWcQObc9L$=71(`S)=u4Vd?h1=?VFdL zfRhb7m&g00&%h}=DHmvXJR%IZ=kf656keCzS;6vDzoEYv)^>eXzTk859!%-Ni`(!O zN?8>f4(oE2*ddVz5#Js9giqs9nTu+Yi`4AgZ}4O9L|XW0{Gb*d^DvP7Uyt=J&jlqcuH^W_D+~&bvin z$6;qXt98-^`YhXH*}JeE#+OmZ8xb4A8Fuk947}#nzeu1y$}-w{rfw+l>c|qS0>3or zs-UCQHp}N>N9nkcR|-#dEueX>*d^OFBM5Oi&f-PDpnHLOrLzj#hexp&_Qo9;dcaK> zd1yQ`)mTWVy`0-0q8utu(2p>MTigv1qmbK9a&h3J&GJBSOcnE@m+1-KE8hg{_VsSM z*^Bv$4R9U-Yxqyagva~ju8lVC(>+!Em(1_j=VdX{h$^h8y)$;-;^-TNA(gtEQ-Pgd zA$o`FSb84mllfdml}qS`>{3DNU0LyX*bQuXK=Q9}J3WJEWy#PJtiae& z@nqOezVe?$rDv~2)~PX8FThT+C?Ghylp4YjC-3roslIi(lzQ_jyt^k_BCOK z&kEj0!U4NAZ1##UgY%tfY}8zEPQQYLHpbKT(&E3)inpCW!7GMUr?7xY^l&weZ%RAF&8x>9P`M_FXkHRN&)n*5A6u!xNvCRb%P#HTjU40grSf z4ad$rKCy-TW_BEY+{d2LoZDn+#T(a6;1Ko26Zns2XW{LGK#Lagjd_PopX~D4TR5}t za;k$5?a`b-k`ejAxQ;cOKaq2LDt9ksb=tRztdAWwn=xjRHOfv?OFGXuA|fa zFFUK+D0=S{_0V6Yt!l&b!_SkQX5AE}IIGHbVyy|d$R@3F`PilZL=44xAokxacFB)VU#>Bi@Mu%0?S*JcOkYe zb^;f)@SIlZWc!iu0B?8pJZOj9UfHYLcM?7`zIZA-Ei?6kW;mdgIFWH?@JKkjH=dAB z%mR_pd&<4qFDSMPs^^1rP0#WgNj2XcugvcIvvHj7xReL?e2}aN0zNfwk%xa*GcC*? ze4;fy+dT9QKbb!|qjm7C9|>NZziC{@6PEG!To`^dJU!L9_fA15`)^g_FPdaPkbN2J zZY;AIssr+<)+fb##yR>7uMU5*N;X&#r(Yuq$6vQcmQ$;iG@U+n(X*nRoi<6Q+2ym_ zi{Sd@J*&DTZ<4mzG3j9I_}6azxKC!s?HrxF*b&oYySCzCZN){%A=_|&)S4HDmdDBV zL1XdH&y={+5x;KVc!}q-l1J{xlN_;2H7S zXagDlde6vSq*q6@iElA>eY`FEAzmvl&g*nLjX{U-FrJQ@BB1t;{<%*i3x!9_O56AI zv+Qqql#ewRFVtR`w@H&a%^T6`5ziGxu!o@UMKSnoBNm6pWl*f?J*Vw<@1Pn_jQ#P5 z_>OZ%GRJE1A^FF2I%_lPWZ7%*yv51TS}X~s?SyD#SY|i)U3i{fICj2PV`n5bB>qQ| z@S*4*`(%y0JFBo?x4#&t9mCt;L-U|W4=d`#i{)O|oOXsHjPS$T<|&c~J~(^MzKdVk z9k5I!UL=R#f+s{?c>tnEJoORbgd0Aod7VmH_B>?dTfaQ z^1H`s#Fs|=-Ae3$LGetu36#!tX$=s=do$*4>WQ3f{x*{#9T^pUuX{XM=z ze|Q}cQrO2iJZ~K1)DT{Iu=D}WAHE$diKoz*gGa>*W~32m5)~TUE_eE?CW0shkJ1yP zZi8$LvN2-vq}&|7M*IUG^N!g`w!_XH2N~V@mYp|0htFU&FbqRR6#k;GB*zqfzm`*I?UsJmA#?mWkt(i(+Qm! z@SnXhe*jIzzKqWUgi*854`xIsyKk_<>d2|^9$fHTK?DzE04yUm>$7$nBN`++Z$0!M zPr&H(6~B#7X}8XEvp)wNnpp>_Mn{|m`@VRORy?S&0XJ4l>%jfkGnvn*;~au->13F- zq%+{n2>8bncH^`K9f+I8T(Cl0z|RI+k5z!1T-v{jH<=43k`_7tp0=;zv7$WwA$c3{ z1rG8zFzu0rt(&#dH4esHCA3W?lT$u}}naM2UhNj38i$$}T9c19g|2$|=4ekVS3+O4) zM^6ln0uLzwiIu?}Z3VktgVljeT;!cGh9|8E{P@U2^a?!KmkfEuTSoI4cpdxz zs)1|sdDeUQ8vdI`{5<5UIjMFrG zUE}gM?TPI$aVR;$E6(+XHUym~MbKDeYvMhyQVr3k;E?3f?yyRxQI2n6=O$9+6&W1h z#nI?J;_2kririzypDeE@y$>SPVnxws*gsgqckI_VH8;PT-Si*rJ8p-M^~lM=etJ-Q$>D z&g`xE_%I}5;iO9SI%k1Tz*c8jh?_PnC_^V{I86@HE}}XY>T0&1ujh?Qq1G*7Ssmn(p2| z)HCwuoRYY=KDUuXwD?3;V$aL}MI)U?c56TUNK_enG(5km$jnB;M!)d|U1z>vlZtWv4byb7fbmY^lobo~>wQu&rqg_KeR5uiF-Dqvhar zK0HbBx}14WJsRG}iMNx8yBcSY=t{TYb{cVcpBG0L6&Mjy(IEE6{ds<;$PwEhqlvy^ z`$UA@&!wfwE19AN?aq8&Cary@yadr(74+Dzr<&DXigvMk5z`Z|;Q7vuUKgR2(gyBHv0(o3WN7x`Pui29sQ3yC%6E0DD#l^2g-=F);rJ9^ZtTwZ2Yg`r zSDF^g^nr6!b(T;?)o*(y7%>XUs&D{b!y4O3j=duP!}*iwm3s?wg8t#SVVq*K^wy$c zpLmKW6DuLIVvoTFqolY2xXd@V=S9UmLAN;HVUgA88|RfWWt<(CC$He*tb7sIaEc3FO~~`&?V2r>)sP17a?UkRGpLkZQn^M z$C&_oYJS$v{?PtQbcydgd}>w)rAePy70NrMBunIZ47W z7xL0XqWA^YI`)Pn(vDFkJDoK$KH->rjNBCQB|1{vf)+6fyN|sb8nF<`kIXN&V?D#&s2skv4y(Akod_l1I#PEzzZtNHNsRn9S^MGX^>dM@HhQt7JfP|8~ZCW`J&a0@Bn)`Jc&FFt}+k$ zjl2{(o*lt+Bn^M@((K=@XJ|hd;gzAK{epNKt!amVj{dTTgCE{7&X?6C=Ew`QfH(c;xqIgx{3#&%-9)?@y8QJg#p-wSJ=Y~V;3tTVkWu- zlxPVWPsz;kn+Wr$eJRe54!jN21uxs{X)6`gqPOiA=`uPPj~J2e7#0cK_R=uT5;#|- zjp-e@wzFUnyn_aGrxl5=4_Wby_sJZJjcl|Ly%Z*T;zrN|<9v(-_t1pB%K3hcNsBlE4mZ&?xL3XvQ3am#tvTv|+BXK2M>Z zXU*jAF~?XB&ci7K`e9)_G3@nt&u3r&ys*m`g7Kk~#%u6NoBGL$p~J|=8)FRKHH+QG zpz~P&paS`Gs|Hm`8yi0;Kj=x~yn}ihc*{)mj8Uz|sQ!;wI?hHz^MeaThvf4y2K~K) za_~8P3-V<}G_;itJ#8lcd=4JXLK_)-P|K{a$2ypoe4v*R2G$2x4juy!Y7862r(@0F z#TReE&oQ614VVV!8Np1R*GpNB$ zm-!qG$P*mehyOHWV}opacVHAJ(+C4U*3Y};caIZ3SU-@w2By=Lp?5u-JJg%dO2OBfk)3s-PU zzQp1DX5F}S_zQ!#26uTEf8h!o;ftmevl!ZZ@Bv;%DJ!*x0Tm3x^N_}2MR1w;;~017D;@yKvu9$Qv=lFnb>kQCD@MGO zSK{=WzrY4M;~$cVkMSMd;9b&!d&~-}yo8|}VF|P{uf)*g&)JE~27)zt0-|AJ!fXpl z;rT%uw8FREr&I0J%@eHpcV~8>A(2BX!IaOAT^iqEK!gi7aHO4qe}hZKw_%M` zjS9D7-C`K_58?>4otQigJmzQlhF_=3Kc5eM<*{13Y-`=N#_POGvpcaISrD+ff$!K6 z)P|>V&y7tQ835KU9)u4?^u_dXAG-o#xdFp=(gorx{_b1vu*`C4#2!%8f1eu~gr*s^ z-f%aM)$tlGBqzh;5k1==BlvE^zF^4G(0M*LDBxKbgPn0#M1*kcf5$P4O`M;ZXW z$c=x)n;H5TbYoYC>u{ho(>x=8&2DzsV0^JbGY$=IrGtxn7XEODS;&RG7(NxPgbh4Q z&f&%kxR9>$8JKWG$K2irF|Skf$ay`lUR0Q@8hJ?mz@le#SsApp9uT9_@J&EX=aVJ6 z#TxJ!SZFg8#S^&GXNLvkVUAstHL@&2dfUm$*?LCl>oO3%1`q<7*zL#f2aP0R+B*!`jH`3EX zC)0kz6T^8l;0C=ma#7daM_-k0Jfj2v>A(Ml;VxoRy zO$J}%8yMW6$#4Vy0gZn{Gvf}HZfI}o_SAqEY{P$mJv$|Mup)eG1X_IPCC{M4k%p1ojeu8?~FtC#el#ofJOToAarh^aOb+ZKLvYlc>Lx*gz zkH&{L{0B0-S6a-z-p-X>pgUlbz8lmr3TVhEc>FX!sA&OIBfzacT6@F|pqOL9Cc z^YE#L&1F+S$3l{NctNSbO~Vhy#RDT&4;!dsG|&4|UHzk7M1P?V9*>a@xiJ z*L4mvGPXt~6*KE$JbXM=l!x!9W{S)}RFyGLYs$65y~~P$JGH%Ga{9Ttyx~z@Ol`_V zjkUPiOZ!!?ad8oIy)xYdkL<*amv#?v`zzbXOl9u#{_?HScnaQS6b z+ODm_(+yP@yt4Drk%cH7gc9V2hN)(*mk?`WZu06~=T>yRj!8>oiS`GrepNoH}vRA?^*6PI)JV zyS*o;K+{30j^DEI=5*0*x5ZVP{FN&Fy{J06N4Gjv;~x#P7fpKqeP#NK(_g9z+d0)T zR`CiqsmwHBbjuH}*gKH}rw}_f{|;52IwmNNuGXub%}c93c0wyu0dUve)qTpzBcER_ znpJ(>79RD${Au-QzgET9?^ogU%xbz_)EWK7&3#*|R5^5c`TQz5;Zyt9-6!;WLG$RB z{gTPbkEzz^zVXgJ%{D(;>FcX2q;6^ZSN(T!?=J0=`Zu{ssdgV9M^|MmBPg7={_|b)q^wJ&QWn;bNMuD;YV{~j ztn%PX!^8E@TIp{6HadT~DYi?m?%ay!|G$;*)2#dVrB9>o&GG{HMb4YuT77In4Y}<1 z2FV>^VXyqQ|UWT`=LNJ%d!0Qu*R?0#sUJ1zAK9Pg-r$B*3}U6G8BBaDnBnAk$;_#<+TP z_j@@0SlRosjh!DlYjztd(xXb zl*RBs^tr2=($~f{x5mF`#z$w>4f6W_e?M&LN2wO88w#s}LiUdHVt%_A$n16iPMr0j z_S#|9del#Jud0k66{Yr!vrq0Fw{Mn)uPyq-i-KrP&>j}l^eb#X-duCS=H1P#a^_vl zdS7@rKYqR^-g2USeLBQ#d?%y4KrtMii4*wE8<9QVx>ao(m7eTV3!;)re|tB}z2REc zwp|U+ibmfv4w@glEEo&CZ@83i@occHXeQN0XC#N4m9@WR*xWH3&j{W%(ev^)Qy$dRbc#1Yg?Rs zbAx5Ge%{_F2lV82!RlOkefM}Co>WBKxXc-qwD$>u=O@*L?iMGh-#wpAdzCMDT2NeG-UEN`z}{Qg z{hekWIL3&4e{1sEb9er=_nZ1K_U6qXw3?nLc^Nkj@(wR|o z$<%LDoBa9iKFLP7GEBUu8mMPa|8}(aY?VCstuFWasve`}Hd&c%r@kM>-q^g$s$h9^ zyfu|IdoDiWXWf_1-nOS!)VJ6znNNn}7dP9NTar>j-G@6`LJe->05 zPyI>ns$uulcwnC@W3J4j`FXRwk=M-<>Tyzwvi%-pj)CKUEX>+Gq;8Z%zMk`1okl zc~5ni|Fo*4hfn=!_&hn7UlT@uSVh!N_Sv^L{=Wt@3?7I_IT*@|1F; zeyvUbXHCC9id`Lte2T^I;s=U7@I(#MBKR&CvB2Veqo_NRf zzogsGi;q`j#rMxQQNz|PyQ`AXC#vNB>1@!C*OMy=j4cTHD`OyZIlg%zkJXn;GRU&qp~mTX9z7|1jzM$8c~N_*Pf@exLe6>{8Y3Z>M_~S1o$$R&x9F^*!_H_;ZV@albEaI3Y;CUS8$v zlc<*_--l;uE=}{P0(p4Yo1XrssI5E6OQX>j@{V=#y}Gq*H}$INznS{uc=gu$Cj4Q3 z+iQYnvvlI+`EIWd%1e?J9W?mN3xfB7>A$Y}=WUI7V-`Ur=e5b`ucbl$J()i!+*}gI zPY$o^(?t(Vzbx&0b2|C8efFkg>(xoZ=i(og$+u6l-kmmnOZr?jpV@s%-`O|EgKwyp z!W*Yf?(+}i#l1D$+!Yp=q@PyCNA73NPb+?~XZM@>?SB7IGJ08%+!PLVDrVPtK?{QA z`YQ16lT~q#?x{X~K-Kk+i^6{rralrz{xJS|V|wY~=`TmCFHCX!<{=|5x~bOL+dD zX_P;S&kmUStz>Y17}1UWvyJO+{gcu5s35+zk*sw%SQRw4K=8uOo{!-Z)Q zd-+$!4bQ~shbF^MHu{xu>wA@4~T>abL#h_#lJMpws|;eyy|K7xkfvqQFo4BS4ZD>B(tYa|7kt8zh39;sh->`oVjs( zOElvXT$^RyH`?&TP7dCOsxE(E82^6SZe36QRuXew_T=b#zuX&z4~v5?jPqpAJ=`ZY zOQT=WSVzW{_x9;8Bz3w;>=<;P5ArkWjdEEwd0m?O=fVGhDEOr;->)b8Urkes7az4z4brd9M!QORIQzRJTzIKG+CV6I-hLcGP924 zceRf>A;>?I44s}IV2`#oZazH@yEGb&tiq?$463i}oYe7>L`76anQF9Mla#abV-JZV z?@g!5U%V%-T9Y38ME3k&qx(K-GCs!g*8Z;O{`DZgK6)M+h4s!}k@mVLJ$y)*ex&j3 zXVtX=y-uQ{6Dky)5)VEWZ{HHvPo*oaY0MMjhzs%@UYaMdCd@vPKe2x>`TnwW+sdrP z%}M@g+2JpRm*ZOB^Le@N4kOnE{Y`Pzp1t?8=&Ymn)6H;L_&F>JouB?XF$k}3{1b!Z zvNXoL;NLsAZVVp#!`u7($kP_ZP%ZzVxa|1W^v8|<(J1>jJ$YI__cz1R+;jx*Wkv9x z7at!MHy)WJJrEB7C>wj>6bhY!_c7i`QkX1<0_iRb}QH1%D_~k$1^j{5&--zwO`X9xe2?G@%HC%=dT_NflR;yfbxZEG7r zzOwrn3*x$~THPJ-;?v_4-uWHS^r&TshO4KztCVu3ZpVl1LCS`Wt z_Euj{OKqQQ-4^v<61+5*T2jl?zjrpl#3||8jnndS^q;eBLB$drOw+`o234KPl=zm;d=Iy}mRK`$gXVVG})ceB7{U zuUr{_zOD5;NxZY&#;W#d+Xnq>+r4c)_1?Je#`Z{G4?mykOOJtnNNa5t59mg|U;D|8 zTK8Q^#;H@6)EDi|Qr#_a4_|iBDRaa-brs^;A>A2&4(|?qHde`*fNz_~N zKkl4g(t9hXuFi|P zcIqe5_SAM^bHji-T(<|~#Yxjgn(0f^@0{K*9sIiKSM}GMrhlv0<0q#-k){5#_;<%- z{;4#Lni=m4Q!Cp;y(4P9xVhd{=cP|h{rlAaX;*XZ)Y-)X&YOBLJ-_SJ6+v@RmSIla zd2R?(KbZde={L5vcTX=)oBrMO?(Kp8t^aRtonOhC|ESfS-#+iLbjDs;^tXqn$ELrM zzxQl12~#he`p10Ok4$~8+1}dEcTfFwUEr4GG5&cxbx)l7g>=>CQ^(f1?78XRZyld+ zMIURfU!Q(W5PYx|UJ^#HNJ_+__Kt6K+gTcao|KHzdvBh4e|)-V>My7MCR+S%_&Rp# z<5QpS-Mri|t25N;@t)3;_vYPvIq&j&(`Q7FTc%$;{hn;k8=C9F>EE0F?N)hZe&jde zjbb`cM{ZQL}t3$vUC2-C6(OBo6oPxJ)$n5AvLrCH)^x9?3GbVKi4yo!1YP*9=d5G#V>6|J2&xu$2G9js3m-IoqLv%j8;ju+);Js%bKj1$*2g1(^# z$0OUdninOZ3tHQz?TK`i&}-(*#y>u(zB-@oy6|;i&z~Lqhd0{~g72`j%QMmF#&CCN zdg9VBphw-BDDC#ymd&uX74Ol=cLk;1iL~yXS=h~zJM|iuq;Z|W=t3d(x?390>D0>B zdSASGVf(jLVd2tb__EeM6$IPltvj>*jcBm<)bE6~x%r-d94E|kqcFSs#w-?hM}1_vcy*TfH)B>gnU2$Fi{Jmf^DAbyM-_ zKIgWec$f}m+a_ObkvId`JsvqA3?AHXNB7%q{oFUZq4wCi=5TM$?HV=PRGd-kL!ZWn z8||S+R*TKOK^-X67aSFkHcKn-6wj+SJSXnfU10M@b}nU4zD<~%*Gl*7b?2P26`VIZ z-4yek$`*>NuWaSK?N!b5NVfK#_5lxuYqPHEbvbOfvt?Etf*vPYk%$=^S`%ShD9i#TMy@g7- z?ho8OS+6sKHIx4@gg(`Pf!?OjzbJ!yaE9M8G5 zPM-3y+=7+=?7KSzas^d=nSxqd#&kzX z&V-CS8ewh!-BxiTEIK61NhKa5i~8eleviID>Q6dv!YAW~oRdBo>#~(bW{ylykmCaK z1H<^njtMQF?)MqN?9>X>P77tGIjz$PW@OYl0is**j{D0pB6L2GGXVqkYHA*?5B}}? zv~Hw!CTQzy6o-wBT6s+)Uqx1l8&t3_k3laWTs-o+DWT zYXu{25y3kcJtuPpCz@3b)X3d663-szf)W;;v&p422Ogx8JmWjgvu^PO`6foki6|@E zgsgae)DQ9rnKAZyMjm-RtiZ@$1e0tzE72WBoheX?9?4a5ZtXKxFf!plCUeEfvvHjt zifVXO&W^vVM&7mzjL=}i9Xh8K*m!yA0Thu%FW&X

g$pUi5uA3D4@zHMT`L)61bbfAHX{+{(o2SL~I8%LYMtjt~f`FcO zga7_4`aZ#AU2ZRfo%bdO$9kV`pRZdhN|OhAR>%5n`y{I=773&D53H)GK>l?-o12HY zS8%S*=ej2dz3+yYe(bvBZ4n-2HmP5%1_ccdC%g63{dr*X^0G!0;J%<6wGUK0eyp)* z7`epm%s<#H_ci}+!9yRD7`gEy7m~EkXhd4T8Mc}hDoKkfumGs6_8U#cUwokTsJe`1 z>h|F+wKs21v(AfS?#vTf*r(|~6~A?0AjMA1d6%m8xvf7lYpk1?*&b}ovb^+^P$^F? zwwn7Y__4*tH49p*K;d33S>wx)VRc^Vi3Pp$Ot25Xg1uq8RVr1Plf=-4+vPROaa7HP zPTZ+A4_z|!yfw4OX4tOzc*Cn&H~YUl?8@`jBZsBdNsC88BdZ7ea9rhP1W(4_WQ8{8 zLCdw3x8PR4ZVc|RuaAqHyiNFPIe0@xqj0!Br;Q6r9&xd$l!7ysSaGxJ-)1wnE^ zeEhRGb+7*yC9!*1**Vhj?T;Soyy}JV$`kEkw(sw${OV`&y=BYEP>~4=@2dP>*Qv-ceq>~hL0&OB*W*e z?N|RbZu+yv{bHYgf3W?}KJgok{%>LUnE3h9Xs}Pbc4_$Bp-9P9N!0Ro+UtYqwszff ziw!I*I`YP;KMCtjF5X%c_U!g{FKUnXlUBM#Q4{^!Z|ytpUY$#~JeCLdTZ4REF}1h# z^Xc&VmMC&t@E@H1xG0*gXy5zYzJ8LIeqQ_IOTxmo%_9o?wz%@P@cEwj$;s{+{k)|( z)?4Gm2a75l7q0Yv(Cbyz-sjs7kJ|2!2i<~rU`CM!UCtkCm->Pv?tvm*dlpAo8@1LJ z3w$EJIj0!?J?$U=ezNcT#`Iq%pEEmy`}TxGzgxse9q((38J*B>k`%qFc*6^lq?3z# z?-fi3winyEeTs<3%Zosr(wx8APJMpVnja@!6s~{LY@e$q^_M2`ng0lXH@5PdTIbzy z@@?^`3NQ9}v)ccNhAwOlIg$IeYlWwSqc)xQ>ejt$bp5SP98T;+;BCbS4ld62>UK;A z1<~vJ+!4X}ia2bu`1!fw0~Zx>_)>BHzl)xKQe5S8#U1{ssMOW%p3f_q@?hgTag+VG zGHKpDO^UB{r_o=9f32J2p5c0*W;(E)%ZuA-9~M8I)ZBaa&M{$l!Xi$s5J`m;q|E>9*e&T`xy9&QN-4@Rj6qRDi)pBEOk zNdosu`kcKS*iW5-k4tMUZ1$5HU4Qgr`+H8`kM7AsiUOS&gvW)K!{d^9J@d=fC5H3O z;$e5R?$7tzFM{RsMVrn|7kstK-`0Ix zFxXMb(Yr5<&Q1bvX-x~$Vs|E!Gm4R48<($%GrrwAuPkD7ZCv0q?5=q7hTwQQ&HBB5 z-!2Hg*Xu{NmKDj%(aq(w@3dyzx&KGR4KE9llZ*AewBJq%!WTvZ8G+tcCu9BOyz$O- zr|zJ#cX`XVw=c$Z@*iX&oY((v^xF@^%(;{A_qB4}sPzlBJJ&5hbVKFgLy|Z9<%O;H z$bR3y)xWX1Pb`*te6t=AMEbAnomAQzzaWTiYR!j-xm#Pup3&o;)+HBLKIZM|)z60c zyW`V;?Ej-d_T}E0l?D>8ozSz(qsY^(`Lv#1 z-P3!dtyL$|TSO%g*8911pwl6h#GHibGJj4IA&27IVdAnZ%mv{@Kl;0aU)ADYHpas2 z#8$2C;EA`1)5IN4P1|i9cOD)lQ0S1Jn-fm#x;KvxR8eu4OV?o)!0n0Uv8@iHk0qOG zLfzL~H@C*i!o+oP-Iv3_nz-;w@xu1S%D$N{J19MPO_1-FmE0uR7U4R$v2-^6&FKAb z=YAhg?xw=QtNOkm9L;T=&ShBh6Vo3*&BNHK==bU*>f+X>!}RT~jrVq4^0#X??T5{^ zDoyP4m+rJ1lZSCon&7-X_q&bx!|c?{gW%b8{r=fM*;OayX>3{~d(X~fcFAslduh?y znT>fwQQAk-0dEUu|B;3I^;Z11(c$FIPW~{yKB#;M`2-I~Z&9|dg_o^6nf_Kbd|i~d zqSv-g26XwcBiXglHcr!vW9}BeZQc6CFLw&pdo{=MR&++MI`==cm8+Eck)A%U{EXu} z-ZVXP-V= zKF@cH#O{`Fad&GxzS!rL+2)<5{zq8)SQh#DXdwo^H_& zTNb^4zU+!`Ofq%mPW?vS;afVPysi_!c|~})OqV^`>X-IuRqIv5e;`{hGhUGKx~?ae zq=oqWvywdi$Go^qhn1z-?VCGwd?F3=mr>~-!pysh9dDk7`bxBZW!YJmG|$TNu@=Rx zzlam}OJ|>%_IZ0=)Q3AE-a9Pu-x<>bUp8?54foQ}N!CAiA(QK2*Nj}$0Ukid?bl$YE%(VTo*mtI7 zU!0!!VjBL8^yELax(}7@wr2W&MwzdrwYKjR_>p+>mUwjgZ2g}^-P1ZFwp%_d-T8Dp z^LW~7X?%ZP9Q2`PyS7t8=ghL@FYQxKDrTlR<&8g_&V4H0*}qrU^u*jacVUoxEgn3h zed)vLYH=!=^Q1)$vty&iRYlk5q#49v=R~m^`jq{+lXWM;YPKI)?63F)yCzI~C4k^({n2{eO!mj?y zaY21wa;^@%9yfNLYPInL4+{1>(?X9Xn`@)#vYBN8Dtx{5oDl|BG`{`1I|FWiFAjzW`t(Ur zM(la_bj&@`VB1!^Tl{=S8k;Y+JZro|5^;0#bb35|R+6w?c~Ww_z8Tey?ysxD>FMF_ z2mN(i9I;tEvuS6>hsB-h_0J2^HNhc5sy_O?VfVl^!r6Al)VjxjK3;Z4Q}3 z|K9##cKF{dyxYA$(Ac*oD=&+ts!~4?cArlBxzB00cxTjE8!qRx2a*SMS8{n@d@Ejf zXi!{`E!aK^?Hy&VY@Uar=+^PMEDJVo(PXD^NVe;nee&pZ>ALv(+O+W7VFQckPvn?3s}bN=V8$c}ZopPMxA6RmVrI&D$*>6Wyf&f>Cb-LG-OM~2CB@#^jE zcILL)!=mcFL8|Zj+U(xZ6Rw<2zp|D)HjnJ({o^M$h)z!TUY`!#IEkH~u3y$OGA!-D z-Sb+RCf+DYZ{K?M?JuWMZb8YS5}DwW$SPMea4Mc8$xgob0wnkGDDzV`GOO+kcf`r-@{M_LYvOVDV)(A7hwn3! zkfqUMS!2JlalRj1TTOjFUO6T%yEmy@kF{|}7?~5M?@pU-o#o!LjGD(=(G&Rv`=?v4Os02i4c`ie?V|bDlH?`v=w9*Q-O0i) zvrf9xY#-E%qQkwdYwK3@Y-?DWWZV!x%x<4{RW|iiJ^lUQ``t$RUaPo2T<;X8?UTj1 zJxb`cBG>4T zsT+ECPtpteVjPv8*I#FL{Nz^b_VL?o&Hv7@bFX?(e{Ss5L=y!-p}{kc71++JUlb`xuJ3Q%*H&NJvye>RE)hZ3EMi!Vo5fNBG<(m zhcuTA!Rwo8)Bm5T`vAAIDignb5;_Sb5J(_|-U5P%(gXyRqGHE7JLfw4?DFn+t@ZS_p4F>gha=I~ zwc?=?y)K#b)&o*}T;~7zFH^ zy1M%~iRRkqjCNOV<@DKkX|X3oq2CG0+c(mAN#ng5`SNpQLP zErN{PnR>XLn~Pe{`}*|ZNgdn+@x<(Aw`RKSgy4Blt0C9tbl1It*YBF0h}oH+?MMH-)@^Mkp##JExK4{$9UJ1JNr(JPn*qhgPuInAyi|tz3f-E5WJ$IdY zeb9SM_S8n*egD>>>iCrtYvQ0FiF(;S=SK}cEwVPNnS8v+*ZKXvDLH-B^ru?g8u=Wm z$gYcb?Ho9;wI80nzGb6S;~!k!(LJA2-0?ZtpHIodJS@6+cOzaHt#6g2J1q@+X7=W< z;;Fai&7Dx~(66dj`eaeAqoS7=7E$)A2WPixH2OfQ-~x^=v`8nRbb z@ovlu(-Hp>=GRV|&xmr?Z`ON9O-Hsn=&iDGn zf?n%mi-*q)cE{y?yra>+TTRysy7Q6ML%p`w2lno9)6Z&6KdGMWsx-te8g*g%Y}@48 zf!+Tj>A+7_L-x+86Q{mWtCb}ad1L^2d71! zn{EHZ=;wrF=oQ`Zr|mBIr|@%RD|>OUd)4&Irgx~e>mAj49g)xTwIF*+vhl}BD!I_{i$D6N%nf#2M7bo~e z5u~p~2}iYpujQ@3FsOa1mD+jy@A*_$x7X{`c>8B@{_fdAkB_3~dB3qS|0x)`SoHamqq>G3Rb`B)s^AsN3HwHB1URaZVSijr;|3#K9!jeQF%BL+?hp79*TkTM|X~%pODm4A-zNQ-8CBBxkr^)3zJT=POKAW0bG+DUY-Z0w#WUJ zH}@O*`K(K#YI|Ex?K7T|m8mpS6J<16447s`%NorKXS-*) z>>2d7iyn4qWqbCSo%b7NZK@KIVb!m3MH)djg}()t>%z{pQN^Ev=Ec3Uq*wOz^J13v zcwJgu&4ms!D!J^O9DnkHN*gv%E)ji#PRXkG8r1w$Y5>xIydOpf#=;{EV<|tE*-br@xrbf3{dF)cZy|wGsu(WHO+T>I^y%cm`QF9}QyKb;!KUm#nQKtyT z?!j{1R_ct>O&U=gc$^=>-&3KstQB4z_O1(8x3oGv{OyXoC8#=SRlg1Xqn_I8y4B*S z7}+qG%??Yd$riT8d0}!+@LVu?WOJ(7)4>;I8qH~mDAbvX>`gdZ+@Jgd$f{gZNh9;B zLIO?e^5705v!I8Fa{%qmo*OON^AFDJ#}Uqn7mMLZ%0{yi)dG&YUmx^tZUhoT?X=Si z)gQ`l%eC7x@0+4x=s|^yIsqN#RYA<@mnH6%9XRSa)P|VjsKG)5s8226s0$pcmJ3%8 zqk>G;ggOo#W8}ttd(^V1a?yv*RjN$X>X?IH^HGbW0s~~wh`fZTgMJJ0S7QBY=9cxI zelM!5)V094vk3JBVc(mxe*fa~<2;d-{YI@`mS07IS{hZA>^(N6e)1}>MumrZ4|Oy6 z(zPnM{P_N;n^99>RQFb&qB4MYV|6+O_``2z$V%3~T1CvL0~`H!#~Ic}REy$K^^@=F z{6ms>u1-rQBM{OHMO~a2&*=A~R!Dyor$~<;XQMlhIxu6))w421E_hnH%iFWX50rnD z`!ha;Cd&FI5T98 ztQTE2Xt?{D1L-b0?!*!2(Kv4iZK|ht*1dDs?blSxp+mfib^8U?4LXJJuAVJw^>;Nd zr)sdomKPnM<2MRB!^&_z6m3i@ZqhhT)403Q@9ui%+mdWU!;5j>9pyXe)7hfiOfZcW zKvNGb{l}eksyoiwQQiDzG1a4;3FP(C=C6ME>S*(U)}V_J>4n?x%cE6$jQ7NG>SMx zaz~#)dw8yDC4b6h)qR~L(!*!d=B@Y0Dy;#gZwyCH)l{>^o@ATfpOro%hTug~&9X_tmW-CXXBepv>acAc|u zAJsi)Bzr^$w@p&r*XJnrwfU0k7X5iruzDcx_`$v{PCuuNj;;`|kG_wHt`5#4es>=D z>w@CP%1+GBN1YWM|1oQK_5Ri@c5+hw&AX;Q+dRLPk8@Vm>?1)$9}MTsUs43P=DR%rc?>lz+Tg z9^W^@|DThsvx>sq&?>L!9&*Uv3Qo6FFZ1Of{JWy5_IIv1f$f~|EfO^^k4mNLR5RJK zwXR44sO$Krsn0g2uUGl?sj{w9Q!gyyv0L3bWGU~BD)#Q%cLv|(!SC*J@Xrqxmqhnp zPpZDH)h;Y%^NIXTQPsKap_v~RcFwvKDc(AMxv7Z$x=Es5 z6D)2hYj#UfhX;y8A$B#~ZB2WJfdD4egw{UgQ!i}bX6_>uf2*#U( z{^yHCeKDRsw%!kKDVMr?v8F$U<7YJIqr(}RI6eA$ToU6K(e4$&=bF5@SyAL0(q@Oo zbJw=Q?-sqgwf*qdN1+R%gLmfhf1~$ao%Y$e2=4v$qFCBYwvV1a7q{(Ogy}0?|NQC# z9_f{RxO#r60=PdeTv%Lv{bb5z;a|Px4N>1+Vd#u&50;)_$|WmHg}m@ar(Tsylgq3%dKHUm|UYlIuw z5ccvTL3yLDm=&F@5e5BEYhMta7q_Z^OL}~*`#zM$zPw26VbQD_sFR|`m&I#5Sf`5X zQ*mjrbaln6G}iZvUx-0Fn|)Ri;<~tb+v0K`uako+$$3>dteU*ow^4u5O!toZ_%oY# z&E@6$ejA;?D)~s}og3w-XZ+`A&>jOP$e$7Yua```rZMd_KPA~TvzYr@MRd+hcF4k? z)(Re-=l7fV`wiJle~uF8MAO^FO?HIelTM?#7j$p?mbZ)szSFMU9ioZdqqP5tE_RJh zSOS~HCn-y0!Ul(eiGF*0=@BnY>QBAjVATMY| zYlJf=@sU1uDA_ZwwqGuP`}q68s8tV$jfxK9RTa!vH8XjFYtj>Q!`Yvba^m%iTmSs- zVFw1^j#X-Bo!47*kGr~##jiK)4y}P7^V{IG(`0Vy)lCl^{E3L9hQfIqhzC3O)dnZ)NW7`h_Lb5Bm;^=95OHi5D z7%I5u_4&MDf=5~1{57@wi+h*1Lr>WO&oz zHCKBI*~YRs>qhq%Wzk)fM$><7^>l?E23G{vy<6jX!HiwSb`rt4KRU8&Strq(vU>Ju zequ?o!7Nn%{rqID`K*~`vpgusY+l+O?CIqdsfLwth5O6mz|FJsmWQv^l6qG4Q1>I1 zSIM4K2XR-_c3+Z^z5ci6wQZls)ZUc-XYH}Z)gUZxb?kWOd~Md8AC5zLI6H=g>E^D& zXLdCD$ONh~*>YyiC10ce)7b+e;Io4*Zcx$jxK{DEMn5D7{y5pFTH((@dqMMAH7dQa zc=%p%<`om|vrg-noiuQAs`$a^QhimkgCji~)YV+yirHNo#E*AIH7cII9d`EUE=!_f z)h{Z))eMQw@ZRkbxGl_XFyRGxd{TS!K0S6~9f&nJ0o@)_(#_5ob+$im%w7A8PqcmC zadPKQUH8}ce%J7Rdy?5cT=53=F}i`-@waOC;2*COMrMTpGDUx{8^gZ+rXm_(dq)&* zXC*$>pIzU3u|odH<#DY#Uppl2+}EXV-A3SLui1O*RrlyqT@zII>R+P6#vQ>|9c_dYAQuAA*QH<@Tp!Wz-V;^4STl&F6(D}2ppXgW;}U%O4HN`0G7o%FBB?nT)K zqM!1L`vs3PgU8s-W4D9T()5O0FF9~~@?pzf%?;zfYkfLk+KIFGoTwmz6DXseSK;xO^&m>a;plygZG1T)ZZasuwZ)f8S{6 z#zuZZ-{W_^D4cyZZLoLTO3q(aMfHu**4AN7x8}2=zty|*y1jOy?VYVc_HC~u=}ldE zbsX@_p#7ux>m|YG_wn#H;r;i`>_hSDyQ4Jyhp%mo8&xfETXalvZriwPwCc;l)-(J3 z(qMW`ug=f%Q@pR(5P~*rGW<5|ua~SC@m`;;1XK^_NA(Gx85tm%-T!$!|t(fl|}O=)j;gub(1G@7`rvs zCL{%m;pWZnJhejL}oFTUR;P5z5U{B6Adne4|? zg0{Hy=5gXV-SLg__j~dn-%>XCBU!>PPX{b154&SDtTtbj`>pvwSC#AABtAGPJik6T z{GeBd#HV*B8=TC`4qK7D*nNWIeOvQ_B$=uL7b@_}eBr`f0rU+UCI?eIOZ0&tI2y{q>}>%-;O2{&BRkRTTZlpu4zLz96Wd5slkt zcUddDD;kiOv0v@+@$!#)wSTa?Ji1;QmGfWqA6sog`zw;b>Rap)*guTloCUFG^81V+ zp}yYQ4oDAtsoe8(vm;i`PWn~fUZeYO*;@30mo-u;ziBI4r?rZyUmLC$_ldm_x;&6a z*C%mV|9Z6Bwf2N&cWn}Bm#(l+=;2m&dpOxNTmSb}bnO>>zm+BQ`tE#gbwTRY_L@L| zm%T^+>EGw2-Dn!X>5HfklZ4;u$bF+cGj{m`evz;DwZ zdb+7O)ie1=W#Mm*4))B?xvuLLB_q$B*gy9Kvz?MoG|i3C-c$z1-kH_A=C)+t6=8?|{aGuwbN3rb3pM*}9($Mc;5wfZS8g;{e)L}8mXtDS=J`eowv!n`TzCuev~bkK5&V%c9w2K>Bwg=1Rl)zyQ%C5l`+ z=_$0N_hqL;Gr{P)Nw-oI;}G>HQ& z>>EFeLRH6J+a1rSR^s)^v*W6%IX>8Zx@gAdqODU};nFmz%B;Cz^z3lIewN8@(fFM` zKDn9CX(g}hZ|A9_t7*r%6(T^>CZ!oQQ9kcc+fk#k#;Puaa2`Fdq>+Z>Yb?|{n&Kl!d`8kCfK;O zU)sueJZE>;`&z;4TFb@t=KWxL`i5#!ei8qln5584=RHB-UD4;~i^c7p{9TqNk;DB` zl=wh={QB0rNmVEx4#tmd6g^K~(OPwK)Omiro?)%5lsVF|0%2*@!P#R zE$MN6R>i?__9^X$_(+`pi6WoBjUL|@X3q)we<)scT3T%0)C=N=qth)POFKSyYEdg$ z)NY)El6rehy|~(}y|Vjec8%_}->7zNgJkgeNkO{~cZ&|Tj1I}&rxe3{QM4#tyKXpr zevh>uZ}+UiucH;7xe7%G}yC<(O))ewvItFKM||>-di(&R65kb&HezJc#~VdhtC`%~A2(ACrGyPiovztoe{u z_=@a-gQD5TMe}F3@|Q*_FOEv(C2t5b=S0oxhtKaMFHeiY-xWnZF&op)!V}`Xv%BWO za5%5KIIUqpkeM#p_TKJUd^8-b**(7# zE4gX1*Lk(5?gz=A(}UQnCzALRVeEq9d%I4(wT|6O;-ORHc6&k>wJ7OU(_8xSF~F%(r5QLzbl`a#C~$JTJ6t8 zSs}Y8ga11Ta!=1+6SZDg)!_$Q@g4Pm`%Lott66?>uKyYQbZmT2w!}|@$@jDJ-_e?$ z8Be`A3H83J^wv%8{wSPnfa}BSU&7p5(i-;_^L=UD^_MJ*@eZ~jlu{vql7#_;v3UcV@q&utDb zPns+X$JfO-A85R@Z*Qs?z+rvEF>{!Y8;9zXS*pm$rN z?$lj(tN-{O@zy)1XSB{gMlnB%PJcE1#ANmpqwl{=Dr!#-_Mb~4WVt_UD7Za&$fuH3PWyOTPF=krKR5m9YC=!TQaCoQ-5^Zep7z>#>e95y1$Cibb%vfHKW(*_ zXX$>iX!GGo;-}{keXuotvx?0>#nJC-r9bV?&zNYqFZJrz)p33(Jk5#+SBc(kNTTc& zjCSt6mzL$YBk$}L>FlTV_`x*U^TG~&{lql-JNmzWE8H}__~`Dtaq`DL{ePd{Eqec6 zwD-Xv_l@lP*GHfK)-1MYj_;52x30tN$w@aF+x>qL{&t?RUwY#Bq|K9(?e7R4 zPtE?V(xd9o#}xOyVZ|rH_QBKFtoV8JIJ8yFo!Vh~)A(xRJliY##+vDmee>8?iQ+B{ zW~-LRyCUk^JFfa@^6Cpy_g1O8dwBd<+;Q;4LYbYd`JLePb5dQ&eA;@`{O`g+~r&x%&wFm-c~Ts`~dPp$9CQ%j@9 z$4B!YOE#|AmETT|eKBr1y$*xFi@$DZ_J>dJ9_M^4S^WK^#Z$5Z_U-N`H-}I3{40(5 zKk3{fl2VrhYzt?F^fhHtmZmz1sgQj+0q)hr*KPI*E#zF%xj|IjDjtp4;F z*|0BK2f3q@Uhj*;pD=Z5SMT0vdo;i4X!-c)`o#3pC)4OZh~kcl(%%+k zemWlem)7)w>9ym7?c=_5rY=e9JU2c%I@-UvD(sDu6RXX5eAIB$ z)Rr@L$(}ng8|soeU%w+S==>zakLs=Yy)@FD@zuf8v!ce&Br#r9_3~4rmaW2{UiUvt za=josYU?Qb;5>=5vm^Av{CF7oNpN~pRQdTvzcfleENkG~z4|~B<9pd{r=@k}VAqdd zUSF@vujWAqw&IBH_4VlsSIi2E=VWzUnANj(_}n~r{3SUwue|70oiXv& zuEd;PA} zy|Z%`HjKZVzVoT9|2HH%uFP8hU9>Sj*j!XD^pi=a16swAX^l_D({GG>zZ#x)Ze90; z)fMT^4`u!Tzus3d;9Q441x0<7kBau5m!!4-dgpNW>?FxI)5q^>v|m-H{mwka5n6jR0X9NG|1pj}Ii(l3XUfVs7i1$98lsYCFUDzBxlP+JoQD-MDH;?a*P7>c6 z4}35y_@(uH{aU>D^yx#Q!*4X^N8^B_8}0Js%Nyd%c}W1>xnCVO|0(_c%V>VTc;N70 z_NK=9k7~4Em3BTlXudlQ{`R`h?jBDcnI`9rtH)tS-kr?&YBckac;UHG;QDExEnCm2 z@$hGoS3ggCej}Lc%%!4pSu*mdIB0{g@zHShnk4#xal+T*?|p*t7n;!rdpsx#CY)6QR-i^Db-f) zk#3ys8wW?TFG^~>E?!)kt$I#8p=SKOQPY7z^VlG}Rq%aD^V=*=S(-nzdj9lp;`lEF zx1TrmSCbuDQ5f1n-Fp*P1#aS+`&RFHhQR8$A@0%pd-3@P2VRX5B_QvcFrq_H%u*Q|tYF z`v}B6UeUM*WZgY4d8*sbxk2p6Wcuoj@Z~Txm83qX&o|B%dQKG+cdj@$%Kkvu*uHZ! zw(3-kzfNtE*1vM~EKJ{jgd8UD`7%XmdrnLP_S9-fsIvsw5)KIwgXIrcAQ z%l^8I{wuNtzL$ltOI0C%jxzr+@%yigM?RU2_lqRM52BrqRAunJe1N}2(?|7s`w5rX zIc`^@3KiA68>Sx)34`mkhPNeko{@yuCER|hcMk{y2S;a5%Tha}nBIm_-3#*!?#TK+ zKb-Cs?LB+?z7=z`>h?+MsJdN!dcCZO>i(wJN<%+5yZCd~{Oy_H?Is=6AB-PYxTeigv#e z-)xr+{L8TMtm)ZFlv{f5$fWTVUEzeGM2gXZ_kUjbRYP9`t{Fgoqx}-SlWBfi~Hv1A-p(lR2TA|wBJ*D zeR^KTetA<@lt+MBN@+Xb!q?7XU5l4KX=Pkk$0ID5h!uTMK}p1e6N3+9oe`C3ub zk~GVflRawZWraK`Kk@$TWt|f?%JY~X*YDG~>fY3U>D+%nkB>w%YS1=LPUzUSYgn{b z%{oM)wo2FO*eBDcs%c5HJ1>i5m99FwSea9{^j}uFd3n&gvOir+Pwmru+l7T~leIc1?V3K>wAnu<{@5*O>5kw$MwzkM!EfE{T=mKi zcIVMa_u6JFim9*1E$Qo@G{2kD>UQieiFVHqlFk9SIB)gN9`EWtc0SCEW9Bvkdodmz zRc@1Ra7N~$aJqA^AKmZc!`lH}w^=&rfT(Dv=-obYwSg+$bz!qJVwRcbJzmB|oT3lvt-q>L<`p4=I?c_K6=A6*=f=1Tm=b2IKKFNm1_y4KQ zWzS%-TXWo|xjFAoP3}g~mAdNdCUkQ{kAI0We;M7L+y5Wsm+Q0r)i_%}uVdqyzjVzn zdiSzsenB%)qvB-ovEO06?rYcUR%u6P_3hp0d-wn8>EeUK%%O4lQ<5)_kDB&u7AjOk zRGoe((j#^#)2{#IO|9CAfjTdo8z%nN9GtIq&Scz6gB7UBr`-@tF73ZunC^_%_TQhm}6zUsJlYeq7hyEi*0+U?Sq^Mb^#;c-E@S=8?i&1Z}7wRJqWpli155&rZ~wBKgz z6OgrD(j3*|Ue_F*;&*9uv^WYnyE)40p3{tO3ZLhv;VvJ^v4LN;rL9+yzZK9i9oAd6?ZmVd^Nm~n=-9F88VQbLQLxs-5B$#?~)gJ2T z-Cqai3&PW-&B=L(7oDRY7Y%kevx*7l}Ulny5)gEdX^tQM?ep=EfC`eXNce(SM!5@RwUxS(xQO|77x~=`S z`CJp0oyE1JIoXR~AB#?r&MaCx>fLBUQ}(r~J++@``^KFU7PsxyM*XL^?KYa%^>!f5 z>zmGb!OwP9snnej7FCk#QLK_hJ(Q06Ds${eyE8cIjCyyozAJjS14*T@o>z8%=~JX8 z+O7a+u&*+qTXj$FZ3mmm3N^~Ql$y2uEp}iz+g25Vtbx65oAo%IRb=0idJ~_^2kEe5 z2Zr4UdZVjScIv3e-u1yozoct}7I?w@wb7TJbxxL2nM&4P)jH(t?3+@NAVaR!Xil>N zE2nJ2@^<~o59|~NgXT`*6Q6G1=L>_MoR)5%dQOt}y6=w8C3-Ha+_*VBn~AZnoZ#3Q zvraF*bb?urS9cxFbz4{KAF1lzt`{8xNLjr#)Dmsbm>V}1zivUlTlI&wHt)}@R9%o7 zbb~4obxr8QX~?R?*6r6`D!rRky4mMKe(K4rW=0P2C+qNmt!lf|)vzo13XTtL~yhr!MY4YBe`}YhR%Kg|H$wXFnBMayBiB zTfcFggS&C_@gLRcGeWo0uHL~X^Mbm$SrMJ3J1^Q+C9mHsinqIP*#s^+3D}coUl~{p z`ds?=_neVtH=k~7bdAb5D;^X`_OWd3ID@q{!k9kux~Y?~_84t2`4rXJEhc}c%94JN zNo4Q1n~WrFX4e&(wBNvf3oxE7v zepzz5<@>V_QfI~+CXY8xV17$bX5-lhF;-}oojck421@u;7yYrv6z9S)ZD*IK)5T@x zwvM;A=(Y2I&Dvf}v$V^G<>g-PX=k$8nWOG3w?>Vq@ZzNPIcXSusMPyhmjve%>17Yj z_Ro-8WF?xmUrC-`b(uXI&LdZOW8c}FX0}c9Boo)2&@5X;ZU5%Y(Vkr0mYqDUTf8&W z{i)`ZP1p6#sYf?AmM*WJT^Hw&jMq-&k&5JNdQXj_s=ezct1xGIWi&c^k2_1uDc74c zH@GG9bor$HNh2H#o|{dy@6PE)cHZ`_!$~eq!q)k1x^>GTkQBN~tHV+CN^bas{dZM= zmrUkKFS5&r7G|kl+WSr<(HX|BJ@l@t3J(Zv+3yKg4`nTn{k)qs2i0lL1$WxIv+SMq zyK(T_H3-73j`JX8AF1wC=-VDdyn>JIAF}85w(tm_Y*ae=uW9G=($#(M(GnBP*o1?)Bne0m)cLheRCnN`S0v9 zyF=|w9o^0KWWOQ!+#XIZZR{(v8h#b!saCZc|8Lpx=QJBVYn{}3akEqfd|Ox8v1o-T z#7Pa?^j}@G8lJVHEqaZ$zJBo8x7jVqCwyW5AJ@Bd3{PWDnAO#2{jOHQJ0mQkkR5{P z%|Yz;M%PD1Z9nY+N_xy(+?=k?{`+&YJR!eA&yqg|znimje%^nbC6{J9Khit6*SX!e zZk(22$2AV#XkvY_3-@U@JA_$XWSy=p&=mCXvu+xLqyJ!i4$^h5rQoszm5sdiymsaPZ3^q9M}*Ea-R{CY<7 zfK#=fyp$`W2q(MhUyFmU54t)G+96KQ*a!JwpV`H#cgADGD!sR3aGEo*bx`A@nuD4h z()lsXcZXUZ+EOb%~k{Uo8&dNvI^b`j5>Xau$RLweBIvm4u9QM|EfP_xTy=t|tm0(0uE zem3^|t1~69$V8nXZft(M9$g2~fb%ePb#z|5lPYHgANGrG{+os~JVF!EZ1&@;&|-P( zkgV%5s-YvTM|TDOB7JUbX94lcoHozi=6f&b*;YZCWvM1?yI!$27WMj3J?crmOV9U+ zHpop@htckB-WNohxc;o*d3AJoMq}R|zS)kK1w?sFG!|L3}G) z?2L9^w-ao14z$v-?|l2{6hxipxJr=Nwec4;Cuei;4DHP&eU=6tedk#$b^((hs&%J( zrWTc*_(+hk6CE_w0zc3U)i65yN5=piA;dq}-889g8&?G{_0l>R&{_89vOUdy)!<-n zqFwzgEfu{azN&aSlFhz*e5LdD{=s&`{_ol~^LtNK-{wgyK890{=`d0NKR6}KZc;M) zo*;X3&#vx2t*(CsDa*fD())10x1q&`$H2eg<)c1v1H0IrUZF1ZhE{MzxVR!*oF8_s z>KQM|P8(eu#8Vy!JGVr!DthhA)E(k6@#NOgz+p*>or_gGGm3at(YI$6M|n=aPCI^j zQd#Y=vz+)odcOXc-WEoXUB`O3eQm;YgL-yf8@c|*T1Z9aPkRn(*s z-;OIChrd&l_x(luURYHBz;c+o6#d<~tjd1v@_bTx*?%Z1Dx>)M@<%5`rF7G6@yBM} z>ww~lM|SUbHTu^Y|GSNTW_ioA%EA4isQY_!dy8?ttSr?to52p#TbET?)bBxMcAj5+_)Y!3z341R=(%F2GimqO{PzD>1oBYT(hkv}v#>62CBJAzpXvAgLHpG~ z;MuKt?^eIf^cH0pHg5(`DF67PK6`gD;4g=RpJzv)wbdqEw{tPF7q{>&x{}I=Rym zFRoHzS$XmMrlzM>pRx9gnKSO5x~qAd7iLar79WdNj*e~?g+CqV&n?5GI_RCP|GBMy zr|AX#ZdzvPfy~I&r&nnn>rHRl?=I28Ka~@CTaY**TD%|*6dBN8_T^FG+nU11A6#8@<21{9%<}Ww#ea z1zRznnjlamk+jS>$J|GSir zep39fPxv{Y9LXD+!7Jj*@5ZU0j2cfV0(Decx9W^~+JjiDjivYt-YT z!9Vo(^XBpU9*-^G_@$~Oj_4cm6YC`*mxWO$JscN}e>6DAsvh2|pBywE6(n}*aZ#sg zJ|!+aEIhm`o_SyM{a#Q|-APv2!L;urCvr^L(l5q!Cr0}x1c}q)ioaE-ab>4$UKei8 zE=zQN*f^=VeL0$Vd$~!yq|}e;ZuHac{DoF{M00pfy~=iK%Bi_0hw#RiD08(LDCE`& zW&X0cez@%UYm%bn{L&w{PArgbmY=EKym6k?9M&x-G^<*`dseK7Hy&CsHNDRCyeMSn z=mmWo(M(jgo}AWQ)*QA>KD{Kl^PXn$?I7`!aPX@#uh&f77JsZYW0M(kXRJG8x?H+h zkQU!gPQABW(hHL1^V2&{89y!B{A4`(?@7o5qXTeQyByhy6|0rOpFh2Ec-g0{)sv!- ze=1-4&Sw0TFnMMxU>|J}WM9%fKM*92k1kJ(7XDgx`;w`vgT{(n{)d{u(%$)9atm#~ zHadFR#P3nXenso~X0-Xyq|}R>!=cHE9gz8NR{rjgE!5*AnabYp+_OqszgL4ln3WmNIS@@M}L{$xj-D|BIW z-rnl!LH<2C@%$v^fvtMeGKSMD?pg8Riii4}F}*>s*d{J{MqK>XAoj_qlf=|LW0U0G zGn1CDj@CXD^`F!%&YZd_DS;+t%y=*eOhp+>o5vkh`J54?z8OFNTO9R-B!yk8m&PIA zD_{A}a+EJ=4hL6XutUF_L>X&MPfg#y;*sR$tZ0;r{)sp}F zCMjNC9mjvQ%5S9~f76;T4HtKXi-)Gxm@#L@j2ZV<+i`2NI4?+@5KcZEWy-xhDypyx z@Sny2lAX zTgPvQMrp6CD)8gc#&?4J*^PKn^m$d(aAmW)px<-joHLUgKS^$UtZQGM#NVfx=yjtn z^`GLqFPF7^YjWwIlaWuYvhK0*>z@5SHofuWWX4mYn|}=!N0;UNuW0GG;PHnnVCVfU zj6M#`PkdoE%fH02$CO3=R^0N#sPUwJf7H1D+uxVUZ+wllcdm8U$6Df8`RQdEEqx<4Z!pBj~@?%~1lYUQ0kFd+_>)bl+{ETS-h@{aQ`#UC> zf3em7D0uuh8F6yIzX&?t>AkNeWj`P8-qdXWWdaSEqnjsIJzx2k<-R_Uq<&N5J-czA zo<2D!{@63D92`~-30wcv{NCJE$3#ue!8s>gB%Zux>)JM+IVfs7N_@InnNmn%lF2&x_NquS~O-{k!wCo6*aXQAbT?^^r#X zV09&*Pqut6j{REr`bxO^&!p}<%fY`mXv$=6ny#0lxGzYHww={lby0+?&xMH(ra|6R z9{g1k%l9o&^Sgt}fA-l|yXKoopWhZA`AzonW$Apomz;a!RPHB71y9M^erYo9hzU2n zrE$&g_2K1To8{|z{I@DxNu@jac9dfmhWJFQVp3J*VxI@PKEFittX zU-tPoGRFv2+=}N zl1J0&Of1-`XS6ggRd!pXR{lVLD3NPjyhK=a`jD3uHFrLc7`k_Pl;-HXTz(p_PE1iR zIUO>FPp1EZZ0D$!Sf}~$t;b1uPHq)#v;S3>Ir+5F!%m#qoOIh6XKRY_>klNND#jox z1G1wJkjOYFnUSlOH51VVy~$)Xhxa`&6hcv9V}$u^g+^pOzuOcG%;p50%Lo| zTh^;@W;k^+Bgn|p@JvBP24VHqB7OJfd z7Y`6q)z49WKwfR}#G~ci>zTK-_x$OUFJ>&ebxocvPg-{&P#&j*@`ll}z6NkF_AYuX z3$#_^ZV`>3l8t&~_b%#B^i$MbCpq1(Ak7*-srNRHzH`r@Q7W@oQcKl+OJ-y>Iiq4c*f42Q{y2*C(^De zTQosLY31p9xZ{q-G^a}&-&}CldGXd+Jv(di==^WlNHHh5L3||+ArCjBdy1lq1a8%@ zeWP3UxZ{Moom(ZQZbrNH&K~_frg<)k+ZP5=*%J~`j!PUu&PTjrY1q_yq@ftmxQ!b_zXUnaEqc^Jb=#hkdg=tW?f(wVRBrTf zlX=?tMi^Vwl!;6+yAn#Omcl^P-y78f@s*?0MO(IUAO88uxZ#o*AG zQ<+9*LtG>lBj+tgLEf0}rjyt6n(@{XY8yRSb+X+lD5^8Gw~aiLm2gMdEW9V0iM#Ny zyrJdSRRIt5gG7$nIQ`CHs)W+QUBMKDxh zu}d?7+ue()s98~;qC?nD6YR>k;2_yNvU5<&$QsJXi%x+fZwn`!+lhoy9~UG&M6TgkpVpBVMJWTncAb(P zay2>~idKpA*{`Jo@?)FZ?men5Qme98+$;X~n66?eIHO%A9i@n-yFb|_gLp%71V%4u zUUt6yCXIbkx|-JhNq*NUS+;iB!mJpJZn-xFL6LMaP25}tP9|RFeW&K4mQa0>^HiQR z(a=v$Uq5-GwGYfXenJ>FXZ3wDC^B{=i3}{sW8&FPHh zdPW$gy~z~(A~(;za{4pfzf#hY?>gx&3U2aXyY+0R3B>kjjwtSl{T?ux?Eyh=_i(;_ zke1ui&jiF|jXlZ*!>dXs**eiu_PPw1ER#5(y>Nf3(g$`)Jh5@zWN@#X0PTp@P#x(Y zjy$x!Oy-;kPv8u>CbGwfmC?(DjeB)8l8$em9@s+q0oHWS<@#~F6mFriaZoeM~|r`!TB<7 zW6dM8KjhV@=U6q&$%L}1#METN=n`k{(YUw*z3OvvMAbIvC#zR6oR8d?lMJ^Da`g8$JtwUfWM9a9Iw5M6)-)r1vR>chC8%vszaxLE zSC_8U_cRxEA2)>2rNLI!4Q)sV%PczGNo}n^K8CJ5&WItqS*bENF-#^2eU z^wc6Pr<$iKpE-@HUztp$`VcjK_6gvSMZJ>s-n?s_dQJ}My^3B)M-{WGF5sLOp+@Su zM#Lv5^ols;+6g7{1)XtuRiE>~oIB>M5SFHHUCslbSDjwZGsNL*HY47k>KPeMnQuPE zcKx5<+;ltNyeo!BI5(*2w8X1HDr7%KZup-etui?C7NCmI*!Q&j(RTDg)q2k@2wGD^$?Wd*3sK%x^>C^(p`Ey zplrPS$b`zYD5)~Db1w5GL z?FN`X*=ez9>-B@jZweAJ+UmTWBjEgYP`y8XxhLv$dWF*uM)y9RyVK@jeAJQYN~P=8 z((s{fl(i*FGP}|Bvr~<;cGu|Yy}bQOtfloPvju%!mVK%=K^G>qMtB28Nn;fwuv8cm+eyTy+xfozs0D=nlF%>*g-H12*K0=#eq!#Yr>Mc06A5+Mw&qglwaYbb(P< zpjyQ#tMhwr<35=gH<5r&=G2W^hcBINSg4Oou!JVj8yw-)yMor*!TIh+eX!4Pm71T2 zTfvgxh$2|utF@Nfg51M>Mk72JehIGbTkJVgI&)@;Qp%uFOtO&|HIbGzRBcy&g& z$CY<9H&qC#e5U$_(ebhVh2u1en_7=pzq(OX?YaSyU}P0v*Ev1Squ`{$FAMX=&p>{{1Bo!00do9Mn`e%8FE$NA_ZrB<0a7lKn7IC^I zZK4mX)s2p#GsCVb=(){ktE?KQ3!u1rTIp(yGZi*&Z|vK+T-i3(wDwLdaKIfesRR;uWj1MGJH;KTPBZMXK#J zE44OG#!*>pZTf9G(Et^@6KU(aJlNH`QjC)3Ci}pil_qAvJ}~aR6By~=Nm8O#wDfS8 zz~4Grj&la#XjExiJ=>O)WGRSHsB^V9d97f}7UElMFp-8jv+5*?!q6waLQ80ycA#7C zXe70$Dse~sEe=xush$~ivQu%Idpfg&oTUpzka=9X^@}JtYl7`Ov^7d!yS1Q9)z#{R z(YMh>&hdv4!E{*0)xWq)yeUe$I93I{S3&K7Y5ovW(Goxy@HfjbX=M2#ZbROxzgYlXzgQFivHnN8Jm#kVA z^QcWVACi3Lgzm^b^-;bHrtBuvLGJpVNVC2ms@quhD20tl(>=SUnC3b>=Dof8O zFpEFvMtYHV4C1K3%6Uq9laga(s&f#G3V!TRwxXRgIK{iXD_RgOks$H`;Dy^oGI+`& z=FVyv)xTm9bQ-PZGy-_J0&%k1EJkcKn!aX*$mEri!m4IY#! zfNR=v=ngp?^n+vVs#_&5fF#Ee;3VS%OZ-9lX6#8E^@2_S!gV}ld=GCZkf+BFT_yOE z5koe~&bXti-~>kC#47z~6S477p}hpE{X`w`A4=pMnEA>_Tu39iikAh8pgc~e5yQ39 zfeb+NW(T_bI`@M~`x(hCxb%OVxP!My?Xi~we8_L`8uMincn`+m7C)MsKbBWRb^nnk zFk3Mhyy@aGq`<7LhuXkOE@_ol^cPDr8$+!oJXAJ*cKkhKNYFuG0L!$W1 zxMqoqKoyix;7UsIIl6SG|C^^(c1b^j@<0UD!Ls-T?r=ZPSlxcThckwp9eg^nE@Bqr z4z57M9*2!VZj!NM{o`@vy3K-rGav}cX6l+D3&;Bd`y`o_4f-6{ng75U2!QCIYpY+m zZg=yCSKz~#R$^Y`ot01=($koO&%A~i-}f#qp$*Id_n=gto9lo%xZ@zOGcWuO_X8#? zc^gz|2b2k}tVlY6R`BfI{aN483pfS@ zebX3bFd#Fi$PE2i#Y!H6X?Mjz#{56&H108^%z)rn6KZttL6x9jh34YB;NkyD{H&ad zcgCCt|B$;R2I{nG5*?I=Ea_(bxEI|-PQa;gT{EOS$;=W(seXKBHe&@K;+6TY#NU9% z|DPJIYuwM;Ku)&_eh_^GE?{p4zBTSNRz4YWGM4vY7H*+*pnyTCD3pxy zI55W|Lk-3PCGvF8h`alNS^9IVbx;)j3gSZ>TfI^6qi@q&Z0bSPLyq!BQ0U+fYqqXI zYXej8Vdg_xxZ}9Ly(%!I_5v<>QzOP}eSM|Z;NZ@5FYJIMt9;m-JOL7R$PhLL=nwkm z6OlspSi6%rl?VlR*yC!Yc6yR%*2#y1ArK_t>_rllv05TLDcz4WsW~!t*Z-5>u;G1F2e#r1w40NFjiw%sMK;nSQ+iy@t8 zc~Zlj$St_=O1z4103Rp|Wx$;u{=EphJxlx<{;4rVWz8Gcct<9|w@4D-5vOIVnH_Ai zlAXZ>zO%a{EUnrcMWw9V`@8^iX0@21JzFCh0Nbc$XaM*Txf~P@b|@XS;1pEBOLV3N zzfx4mPTjF1OdTEnTTBVHl6&$XPDZfnZLELLogUVxYRI@@XU*=Khl^~9l*z!1=pK1J z_=LoEg_Ve3J56PIF*Z~)qHJPbW-Q9fPqA_^w?dI=J6fHPVkfH+c=%+Fon)I7nR7k` zuCl)kZ7%Q8=yIQ+Cdz^ec-ADihzZ^$CyWPc`naHp+na^+bnTkw{V(Y=F**|05567P zfqgO-*W>T8J~{Av8rjZHvk+yL^^!9X&zLUq&1YX+%udFAy*?WmM3FV}0_Ulj6mxe@ z+N>g3#JE zOUp^#(&uu#`X``O^4OT*DBnqb$lS^`&5#wC% z^IL__oql~|uVl6^3Z~<{p;6)Pl%v>rb_; zwd>a)Dy}QNo>ZGPr?s1}9L@H@L9|)!UoD{y_K)e+7QMGuE4Hu2Uc<*t>Xr_wp4slh zCr=$%<L0G>-6fZV^UH=zXU-D2;yrFkhcY+JXuFs0$T8bmrr9IXiSb&I+5`dd4ZL_P{Q0JoPm8+{yQg z7G4uS;~?Gj>400}JLjCrZIHiYqgq1w_94%4rFs>5K^|a@zV93gF<-d=F+&xcPHm-0 zMi&{L6tQoGdGcffsI$&#&yA zYs$>XXX!!o6^i`M^O*?m6|xZ?dLx2hQkPC&{EH=%F4}OOKq8lib(uxpV7Pi|sh6bWkm% z>za--^Ll4t-_!YQx~^bkkX-o40@A#!7}R@NBR&uW)Ul}PltWYvh~Ka6mCj@|HvOYB z3n?x$K}(UN54Io3ZfP~t8+ZS;qDgr<(m-z=YrwrMhS38EEi8{_WTfSS!41`^*JjVq zIz#)gSAE8Yl~1CM?uv_b2?XQFr6y=FurvU^x= zJW04lRXRp`#;(@?LVb=r?NogzSyj#ocTURUMwX3UKTI!cO>#%hv(^RV{xY~McREp~ zN^F2P#8Z+@V?Pb)KBHHzpex8-S$DFJPL+XVW8-1A%g8dzf2`Y>)<`ZmQAdXaaN+rh zoLMVbK;y7`$aZ>7#LroRv@lr7O{#EuFbJrgV3+X%Sf*qtE@p4CQh684qf4?^H!-pq zuI(Y2*?96*qh17c@~-&pa(-5V`_&6Q9K42&jOXc3l|AzB;?sU+O}KYi*R2~y>_TF{ zu&vPmA3+q*&Lp`%-jqryHaiH(4Dw3gV@0yYh^`v>YgRv=7}5o0@Tl;kx&_r{)6K*W zxXEpzXcYozVdQ$q8)LAW!Ah2gOeIm*41S=0|D;xd-jvBRLs%K!hsu-D%Zo0+d2k{x z1?KF1HFbP&G(KVrBmO`u+PCQ(da%HiXvOm(kL3PU!jM1e`$#0x3VqE8I%r+}KkJ3& zASY2jek85QHClrA!6(8KVoUS}{XnuxPGHjsq6H?Mk*ANyeTN2|}Gl6b~ckdA;O6{pOMPIN~efM|ejq zC=TT152*t>L-xuUj#$u$6Ol)x68~Dh9zI3B-F1V%uK{o1YMLL8N5p_6hbfT=^YO#4 zqN}WVcG27ilNQ6?9Iz7;Fb>}K$jYK?SB@br*b9q#+()cZ z7TD+XB90ds6k`!P5uXDmQ4#scAw5QvazspAL;jip8be1Y6vle!Q_(Xsp~1x3#M3~^ z*f1oXIOL3HPGl7zKGh~6f9xE9F<(XUpL75knp^I5r<27}W76*w73x0)nIezDj5B`_AA;_$EU} z+*l`))wBNSGWIhKBCd?LapSOQt)G^GXQTP=E;xBmk2oS)B%@UM-W#3rf^m@*kx!tB zis>LQ8gXaWj}?L!Ulxs{27S?VmlprB$`N}T@*iK2pAnT{MSyr0wK_8(8_)}>$#NMr!Klqh_#9WUB+wIj8@Vi%%%n4)4$Oug9dKZm z(4Vy6sJ0muso;pi`GeL?&!98%29&H0{i1$UhhESio!|$Bq8kw69l#CGb-jpN>V?Y2k;?&Wd4sJl5bOm`5omXiL)sr}5_&y{4%pTSW zQe1`?O(&3T1J9_?b1Tt%A6`M+*leg#T{?VH=e_eTNosmSg|h0yJDNWq)p@^U7Jg>^ zfCWuARtbwLc3_A`p(_SfS#vOjU(6nTfv{QeDEXQ^0X7dVLv2HzsaL)?yciFqqD#=i z&!b{&XwRV?@E%^EXdvSk!V+U0pMx^Rdz-1&FN4Ba*K8+swD z^($Z@fE7IgFX|R$z1HsvHi0T|eY?c%_=Bu>JC)>==qO&uoJP4PpGh2+{9DpDX+^T; z+R68?YYlv3G($#%j_4s+tKtO({5HIv!IPlGmoUEX>2Ob<;XfP%i+pjM>fXFF9=YyT zVix8%wB7J8=vv%}Ltq^(iir)&lT2AF562!HvPZ^bQ0=e;@FeJy^`tL5nBFAi+!?hE z*@MzhrhO7PYGz)uE*5GM<-zXi%Hap0a5OHHLj&R!vIJJt^~z+?2<#ekO^XbTYXsGp zFi-ySWWpPf2VK)9o zJr`|SC8}fj+}&u?(^t2q4SP{VERJru?wQ(-=P5+kyAgq9au zz&(CQBr!8K1lqA1f~F^(bUvi{aUCjUa}DiJTKO4Rwlng!uArZXFG;5I%Z+<)xDlfg zXTgJZh}jEa2iStfToTWN5-BStNU99K1z($+7$QrDO@$_n>SuWzq?VZ`Mvth6ZV>h2 z|IaM4pt4k4mNc^`3oLN_!mhoo@1xian*IIF1>NCj@{tD!dN8|s-xx7^)J(FWX|hiC zkc_!2%*mf@*c=x3sa-}sr+v&5ugh5QU(mAJb6y@_j+JqHuwpNmGwuUt@!kbN(S8mQ zb}}3-iKDRN?`U1?O!z~GViHq~mR1|KFugclv1ie{Jp-#YGtrtmo0nJ@$u~30NMuC3 zg5|k(qr&Y<>mSd-KG`!jxX76Bt3{6SrJCGPiLhRfuL;ye1x6~kW?<)ll+7FZi1gu|y9))NWGa)kF`IhvVxDa}h>TA9&hzQGzCyi3or zUf7i6J2|~Z|4G%mdXJ}#nn7fC6v}Eqk!%L@9Cokx+R#SUE~+_VU3SZ`XlRrTf)o1Z z8_^nk1v?AyE*nGCj5H_3*<8Li)f{A^>`G!Kfa%!DKq|u*ojIzpS*M~)AUr%mFy}#A zKh5M7sWj{aYmpCQ#nZU7CR=m$U~dPLyf~QSKsi%avDV0nkrhHK;=HKszNp^5FH%#s zfSp0IscfKk?7WFq^}x2(MVRrmc}sB{AkJkp&# z%I?TnuzO@)?8Lmi=Q_3xeMWAod60Dn10JV2(n2f}o|}>U;{4&G4O-{bn59Ra{yd_)%D#Lt~wB~H!4p>1SeM5JMmb{_hZPG!f)RQnd{@y9k|SK)uVs%Z_J#X3ig zFgv^)&p{5h==Fw8;`|k2e!C5Jddah$s*@Mipm$FxwWE<)ymo12gEa# z$1)y&mWOKgBJ5yYM9kX4Oc}t(sV7%qgzknsi zi;~CS@me>ZgZ3wrVL^s#e)p9jRSorUUO3rx;{;-|ZDbbtAnVPNWVhoJ{vGWjN{7ye zFKur+8*{bnyCH!$Z5B7Ay=F{Z)4b{S6%(y!=NWqC<*6iLWo+2Ex(Ks+MwXQ?C$r9$ z8~JcGMQG1XZ9CpbRB~263eU1$>`7bRD73kZv-s9kJ+ejMNJRv1hinzgqpPk725U8I zxV|&GhELT2v$_h0(2?u+{W}_&hrU_9tf~Q$$T=A3M80#g<{`Vx>s`N@JP@Sp8>N9% zE-ZH)S-N6SoN1YwGSKW0cpQ9b!rS!howeOO(^68@vf*ut^ z659{~f}2f(*Rr^p4&gUCE$G&;Gr#AQ&;!$2Ei;P-cLvVi6i8Nz*X8SFLIxcH80 z9-SP}0xx0xo~<4Cv0GKisKF4CxS@N&CoRh>!fz`kHAW;ot$Rgx*rZR`y5xyR_BXqM z#u3xfsYiT5?BT8;Ax_~l_JMVwC3Ha3sRJMx$*SSSdVO0fV~wjITQbo$q|3cwWYgy3 z+c?e|MUlls^_ifN_3;oTRd;n$z!oy=r z%NLMMY)p_QZRrX0VYX;k>_BymJ;rdc$pl{_LadUhxMSEiD4XqO-@Tq0C_=n*UUw7a zU(ytK=iE!XLvpHdQCU6Wmu7{M)haQ zr?=?a!)AYHve=BrL0?vd_eGtoL%d29ffsdqqm4cIVq)Ynn`6WW*GV4m z#D|wHM!`BH^^B#kB2!ty} zUJ8Bi^7s!UhQ}^o0h5C6%v(aiJZK&z=$b9AA2eqbvN2ZSYH%2Z3A+iSVB=&GdO9`Cj6NhZm@#!eAH}s$4uaM%xqwio)?)NQBb_#2e*Mf z{x?>OX$?az!w|@$51)cGZYKx96J>~oqe-wEk#4g^E$D%6gL87(oUK%}g~cUGiO#JI z+(6xT+;PyYk@T9<6U}ET58#fjFkkw~sN&hy%+5kPM!{8f_rV8PdY2!M^1P-u%mLlQ z2Ck&bd0Ju`BQvZ*UWyhexPJZl6+aIiX5Hlix%%dgic!KW~RYt6{a%o3I34OEEEMr|Wbf;sPw zYkg`?I05~lQvX2>>_{Q9oQ@dxUumJ>aC|o4fV!-Sw+Jh^26vd{@Y}@8hjg(vah@@M z(hXe?jEYUr$~-w98o7(w(FE+1>Vr1OF4aUMUJoYLful$VufPIy2A^9C$uuZ@C9kOR z7<_@s$!v5&dXLV1KF0;TIlHjb&dUkmF}p-`NyH&&%Wfo(q7<$`gLn{xz>igpDp3oF z4~&xEUJq%?)`C;31s@hVdZ+1di`Dbb)KaJo^}aZP&+r=<53U*S$~Mal$(!RXvfH=7 zd&qe+7y4kqhd=bk==SI>q`V74Rsh2r4CVd2YafHQqKN3zpB z$@4)Q!$ZNRtN>TRv{$eQqbp$xChi3)yk8I>96cz?=QNgaXen74_MGd6EU`|byE9ng z&0(dAI`L@w!r#BauJA*v!obKP4cP{_Ls!F;^@BRRffc$S1AJd)rP+cQ3LNr$tk2_s zBYivK4Wp`JaQmQ4t6>j;9lU~+Dh~J`mI4Z0X$j(T)Q2|4~RdkvhboZJ~_ zTeNYEI+cZWFBxLc0V7w@PAFqYGb`hNiVBj4xZE##V>hBYS`DXq{QrnL5BMFc z_wnC%gGw^8KW4Ib$Vizfgrr1BdnYQPJv5}0N?A$KmaGOTiG(tez4un3UGDq;e&6T& z`Tsu8>v=xUJm=cib*}3==k{|WbL$GOHv?rHPi_dYofrN$=VujKS#WM6YV)PWhVo6R z6*u`QFO`Dd$dy<{RL8W8a$hP5iz682`I(&mxp29sU@`&H1yyr(~cm; zg~;gC+?g8V>ex@!VKv_Dn3Wm3Tmw&oP6VAY63}z{x!0yPFJiZX(q)umtRsASK(7bk zGp}J_PoPyRc@m^hZkW@xYGb|Ej$kdppJaEf3MgkrZ`Nw%g86m#;M&y_`kM0c4Wr+X zakIi`zE`UsEQ+y`zf}u@e-S$=BU~X;46&%(vIeD%wK|}65lc18wX}Nm3$N`z zAtBXI3afTgDfYZ?Um2;{tD&6`N;~Q7sn#E=)$+isq**bkqn$GTlYUCHdS#6!A5{fs z30XPMR}fqCO6rlnm#21V`H6XP=^i?-tY&B#&5f8L40>h`TF%=y_6HgLm@27VMphSH zA=l8Zhlw)Eaj9i`yK2eGIJihsP&Ifmyp_8 zqX4b4W@IXl%#A1`p(o8A4zZL1Qdn&lVqaVDvv*29Tk%rXtlE0&c-YNjWl>$#E?D_h zvz2-y4Oi1<=dIaTkGG4>nznsCVru8ARf)pD<62a%tNE^6trE#Y|Exfmq1HB8TUH1B zg*DgEi|;r)8BJLW^+`|2m*@5r>oYt@KR;EykPG~qeg>_yYY_WirDd>g(p8_Lu4vGWpDI33u>3`CD78?7o?q$-*QzC zXVuSBb&UMvvsh?lq@&ypIBDPIfs(Gws}Xif=}kQc-#tX0-V)+tu?nYhgtMcp)9;7Q zW|IzsgEcuLCA$F3?O2_%_r_|iT}WOHM2Ye=c;_qvw65a(jdl6okV$<`@cQmj^W^=4 zeB1uFaDs)jkdsnJZ|raFL{LMFevB@}Q6DeWwQ@qJY|3x@j2^nZD%4_f&#M`Y~f9M;FJw(6s_N%j(Gd9|6^TW8SDhB!-4 zt{2a(Cb`13+UjifLk1tOFVe4SH`QF9YoGlKJB^GT>{3wP)I4RxGbPOBS*A%{I( zL;7nUv`|J4eqYIw8fu4}(MM?g?X&UykOvVb>1zaUyzgoCRwV7Nv%_C+ZiF1-E~|jn z!Hs=FoE+e_7tRW%R#t0eENYY#tcF+`rJ-`Z~0hdV8ZF`DqMh+^BpTPiT|XkPw%v({@l8!OLa!-TYnXCQwi8IT12#j&sTj ztyQq@(m;7~WO=O>Q!0IK%oH-Ip0J^ITBkPtaed}q8G+0n8o3u57) zpUUBoRdWB2zS&ibBdF`4)*)4l6qQfcqXBNcpgzxdEyN9KY3O?ry0Ef!T_IIG2kIcO zm@kytMh~t5%&)tqb}gu%)Y^)(5K4K!ZG_@#)A%v0n6xxnCaYl~Zy}6YChJM^T3HoB zYjZ)Tjo{_D^wuin=Jp)R9kQ;Rw2M+oo%eI))i~dMOM0EKN|%3rN1rctT68_H<2r|M z3$<}hILBZ6q^$~7IQ>)T9WXA@OBj8NhY^I-4Za{eb0l#B3@G3yLLwe=PktM%1RjPw zi}dpoDI`CYBiBsYU0<6ol=@QLPn1^QbMBBa2vm1vuarnfrNX>#kXR*0in}@wS*c(( z)dKCFR!Lv%GvN%m1a;Kaxw8g&7cx07Pn0_8CKSRMvVPhix#eTP%FJzuJG5ucAF3mv zvK{=6TInzRbACCNORu20(nvn28GyjNMh5DoobvbnnI%*^eJ9Y~QRJjigFFdZ?03{o zSNQG^(O;;yYJ~5Gn{kZvm*2rtg>yiZm~1-cm#?mL#Wlpj;wLt0Z&;BBT7*bNUm+Ae zhPAe|k}7^%4hUPgIk)`v9=IQ}8**J-0v)n}_?@0k3W|52QP9Z1d%qjj;lVRWL9+=; ziylR~Nwq*D->PpL%Cc4{MDI$ok`pMU6a+gL z*tJeTPm7~aWrj-QXlFz(n-G-I2WW=tOMu5_vJ{y zz)u)DgGtT`hf?Ib&YP>F#+~v;eN{(=Pni~jz~PWD4t+y%*w3{D;t*(RJSsjy5-4Ye zOt}z$sS^IAr1S|K6CR_0Apb%YY?!bbcj$cr4z9|@S}P%5fj7!gpl_g`+Ai(FH-yl9 zg<2Ert@DYYHdk8aVqwlgYFM3Bx*bDK`xoqjG?sqyM`{Ef8Q;pCz%{?&uf@iAL+SCo z0Bx>K3%=EnrGeBAbT+OI`A}yJk{39p4G7Yq*ADAKemwp!+&_QF3Sa_yRQQ~K00qXTbpEkuI3_9Nss^elEHXpj6}(D0yXQd{a-?+;p` z=MW1cp`?}eCAnB;NDxXXuN4}#>V1Hq~UoeSI* z>tH)_G7gwM6ae(s35a^&aUgU0x%UipsS(9TN7*k$JobIT=vmzzU2R#xVGUrUkeALOF1ayc5_R|3r!IC_vw zEl1$9w9KWkIS6Bd(EnrP<62FM1RR3=iixs(rf#CNpQxpvZOiye+(ed43IORE6A&%*bmd9VZ0PAo%p&F79MKXaud zL><9u$t`V)FsM(#*2&8tElPk8=IX0>jZCYhm>!c$-{brz9w8fg{=sDXn!> z%NPW{`kC=z&^up+7*q_UeJ+(l#3vqVMZiqG*Xl?oB``>p+9VbsK2S@7g%BrcDlG#i zT(_EW6{`>*sV#mMtcElS`V;g^i2c(t`{%s5vTszTjR^KaP6Tfk@DJP+J7JO2xfV!R z{WMqwsq6TT8>CfwxJC(F@slvO+|^SkDawsw2urS4lzJgYA>Fm{Ar~N>l~h-E(pH`X z>!8$VMa0BUgw|Yu5*_?)uzmhQ9+?Z%mxjo|n81iv8>LK`-Oi2Ra(kN0%gY^Yg7}Du zIV@@HtV&ss9p?_+9igXRK7`7Z7DF5ZOwv)=vCmEqqz;%%GYjrWVjwhrORpiNYNA|!Rkey(Klz8PzzNl03)RDzri>mAxS1B__V`8la`o7; zt(*yVMJW$*B0k1|VT`aYlHStHEVeaU>*r?w!#kmyEa-_gMjxfu448ySLH>vAs+eb7P_qrzm+!t8|pE;;WU^o*JcverDsAa1&4eoYi

zTI#tTGGx+SJBW#%$PN&z{ecQr0kkv9gx~+aXh8^-JLe2uS)M8Naz$wm^2F4@6l_y2 z<${IO8!7SHFF%*^Qai-P>XvdYpT#J|;C@@a3!mQ%n&f=pnb?Pwj=z>7epmer+zU2T zK7|f)qY^3X8d?qp8*W}*I){A%LDrN`Wt<6sA?Ss4_gTdQ%=IkHwpJk5toVdX?F@{(U^W93iq@zO?LYmcQh zO65msaU6f4HFZ50;#MJ$BKC{q+RI#E@}vt_(T1s$@p&j%ESP7Rhp0wax_RYDTFGm-Y=P?AoQ5twQFjhJ6U&B~dO^wyU`C~^p zhoCUmQ`yTkK?-w%jXV9VNm=LjdNjZB`H4|AW?BTS=keR`p;{_?) z##q-1vQ=Bp%{dD$D9vUFrKyPTK8Jls zNNIk#g{pT+X4}X&ibg*|mm1JmzS~b?HBKooZa4Z%_{|Z{Ehr9*UL#3dHZ$Vc(0B_Y zy5HV2T*~q3KIoH|b3hLBX#%zM>-JD;KfGRtJz93*<$(2mMy|*hN15023Dlpw*{LjL zcx}a7yBqfRdyOs6vas9D%#!C-{0Yy)iGq2cQ0S*B06v~fsb1I*Wwh<8!fp%wpL*l` zO0}mhTAw`u+&$+@Ooi5S-t2Lb3!aQ%S5}C+wc+8aQl6pUX@A;HuP&jV^twdh+{#T* zM|D^p=sg#H*Iom7R-D^u1&R8pk8{4 zo@+7b<;ik(#Mr5%l!ZO;R-@e$ro?+ru30WQ+^in|H@N6nQIJl^gbF>*qiHFPFDH< zz@DmYosXRue^Yn<4#6S8miHF*~FncyI;T$g(SyqxotB0a59yD^keg5EH!eL`fZ9}YdX z`bPO4Dxy*$R3MZGBRBU7hJAnTF$?Rfu+|FeFSBHJQ-%oM^Yz^8D20{BkZrOn%b3iy zOo&&EL)8zz@5xGb>R5fT_r~rm&rout5b=joK|*9^e~R=Dy~E+`QrC3Oq%GJ8PQGVCo zm>sc)NSgbp(MOPPV=&h&Qq1ovw^G13Qu)z4Lg>1}wUtnWDv{9Jb*pwsd%e9qrOK-(J=&oj zFqJ2+X^QZk8f8vF>S{ss*uFAm({h-dP&>n_DC~Rp(|}7@ft#TeCm+onN&EdghSLa) zIn+aANb^9RbW@6MKd(hum^q}086tI1-BD9KIooq()t=L!r>klE?t=XLp4g}tdZcg; zp;u5-uC$RtY!8-n3M;X2B~Zuo8(!ba^OC*t-~mSVY#@0kR{lyGXngNVG1Tm}XIeQ| zA6i0hW}}R3!>PpbL2K==U0J*C(MPx&EX3T}RCyJypJ(1ln=4M%d0fjGljy&dkI?O9 z#a4S2b^z!*%(w`d9!&~)zUApyjFX5?^!Z*<&-2B!T3QT8;%7WlcZ?6bZl1DclWN_bP|tp~(_5Ld%UfS;EHAa?ml3#fZX{)&sC%Tdg`sT zQv$S#S`EFapPIpSB(+kF2jv6lmlE|S<-0Ms}5>8a)|s+;XSXE=cyt3oX( zj^4p3T&vQbxN7Lq^egV`xaR5dbTN-xxp~zrw)x|DBJ<(2~_jmCB|`uFK)>C|*m`dT_VeLj6SeJmZA z-k#o?-kaW&-jv>%KAsNYy=T)g>G<@WbUIga{fT&a7Zf{#*sgNalv(;jH%0@a7oyS8 zo6-Bx^ystb%VT(z@yS=_P6J^e$j{HJy?!<4TFY5z*9-+C*1Jk4LXZ zA27$d=$Gj4C|{ftpB0}QH;Nm?=kdR8Ts|(0GXD{6i9V0siJpvlLxW04$4;(BI~@G3 zNGqrL(|?m~$+yYmWMcAq@?7$G@^Uho+dIkU$--n!vMu!2w%_fZX zO!PM6u859B#p5z@{kUD+J-#`+-4fpy-x^;MUmjls41Y%lqczc6(fv^A0=V^i`W@7K z2&`(Sr!f1bk9{(DxjNXj~L;KoD%UN%^D_*tbtEhYQanW59kXyswg8oL-;4kj~&*tRa7D=6?c2b#p)1(XXr{uk#{E*FEDQ%iw2j4&Bn$ZQ&x69%C z$Jmr8E(zr?kNd^X#be?3(s)C>Hr^ZW2K)8!;6rflfd$AHe;tiL?wa8f*QC?ZtJ3q* za_NTT8!*2oxh%ONshJdG{&Go0=zbZv55WSA1-4^o{Ml&do#``Zs@>vcqaM+7$o%Kg z;pl|80-D|xnI9g%5A`R--vYy;_zS2$9f+=u>&4a3xf#(IY(xpH&5HEtw0qhTiQk{B zOQt7JCO0El}3F5oTW={TZFe z*zK76er6sSPk{DcLht$9-U07><13-M_HK4`7a6BYoZmMt9hP2$1uK&Nm3)Dfdk^g8 z^G(V1;C*-U0=Lo3yFS^Ilua9_t+4;&u=FeOt(D>VWzkdU+dQ=Wgt!>m-VNH{5EdKU@-DXZ>ZE(p7GC#5 z&+klLNv1IKhU8FE3U2pc=I7E6$nTf~x)5u5H=bjCv^v@!l|q*qAahq?Rc?w0$AdC^ z_W<}_faQ(i#pvXlc)8YixBbZ42u3>>Px5oJ99e!P8IPU07ug<|Jey47)mzw}Q_#Xc zl1q@X8=%oNeD7&^(sQF5qF2#zt!v)67Pofs9dUnX`xFxQI{bc`*L~uSSeGNwx6!Bg zfeY|xCr1m@C)1nL7R-7|s!jhCDIbzNmAr^PjY>u`?-$s#<#?3*X@#^ITzL$8^ewBK zJe-Jo6}mkrnh-6m$pl5fbH+tuxFD8l3~exNe^u1QBfWA*+xwk^!v!aX8;la@?@LYi&RYa1zBDXK0wco`*V81rRQ_<*W;%m_F zf^i(rfWjk?f1~iv@fq!jMm8n$uuqRL=VN%ve#|-o@AW$GeT*c}Pd4Jq^J3q7rH|t0 zRuk7%V1yRT`yR2;wCH5UJ{t}`&#Yf#HCA9drlQBUA;q=uW(R?85wdp^_AW1(-_O$r z;Oa@~PWbpdoP3JgMEE*_s3<*^SsP(j+Y?cImcE6hc5UJ*qE*1)M&h&A@RU{JCYdZhjko9r zm+y!#MW;Ft8J!fL7Vkob#({By#Y(=N&LlSYmYCG*l)LUc8_Rcf^fXp$RrGUo5>8;-p54V8P<_Z|q}BVxjKb?#DBI zfX!G0wYQOp{)yRLOB5q6y$Bt73{N>2?=w7lC7MW#Iyw3}`UxAl9BXzcT8bBaKY9uJ z+=7p|5bs`zqqQiQOcs@|{hWj_d|3T5s{J#zB=$fDf`rC+nv^kzX(8#6ur!C~iSFje4 zexBKG4I?jWgiwhtgcmEoHNDTp-c;sZgVoHL+|BQ~5)PRXGrgr4H-}FukzaO&W7mgy zkE4vbo2Yva{`A{)0hAjo8ZwBX8jU=y~m1UDpC9^ z#6lmWld&h$nf((!UzE<`n@6b)tYszUS<-v(LuS3ba=E*FOK~pn4V`cR@ zbDQh<8||$MJ!@p6HUsNRSi|)}S_Tk*4&rtf&-&vtx^uq}U8_u{z^m7pd-OEro$z!y zBZ}J;@SF+mlc4o`XzAGO|ChY?J}a;}%>ETpx0u@|Fy9X5o`B}*>cx@DYT$GZGqeGQ z&dhfMl<$u;UCnCl4rHts(%y*}uNm|>n@qcz_dU$LIGcM?`YxD$L=-m#2&QL`pD^ba zJfFs_-$8}1;rBk^b?>T~Sobs+#Us{+2Is=f_RzN@^Ymu+9?aW?)ooYgycTeo*Eb{R z-pa6k-ii(#U@WgLz8|U679N16W@uc$d;0fIzP$|?mm?KZng2^7hWT)1E%&W_Zg%cW zXj%iTT0!5-nYkOc?r@++yRO`M?imCJxgTKm-B4jK@9gE(f82NQ zd>1Qv<$68Xu13gl*7#J=m`2|2E#=4ixTHHp7yK zc?%%F)tRXV^EQGPl`=`F1UzM!)q09~2d^h@CJK;&z`T_jtNfXPOUtcrMM&N1-Z$6PDn>_V)`m&o`+;;cF7 z`y8bF3+&uyX!ysx{t>Hd722MtIKxt13wTz_?2dCF?TMxYt!G&Gi)e9?gb~;$eEs*7< ziZHslr25<&ApMPa)(Y#^5@;Iox*ojO8(2+qpXF{SyE@~l7IZ0gbUxV5g~kgrN-qG8 zWf{I}fNmYoDTjODyfvdh`+|5rPq)`^sMC$X`9d_lJ@a0M)oF{pZ_j(@0ZW}sF6>S; zfB18zJ<9S%&REls&aueJjUIUT32ycG%M%^7Bh& z+&^O+I}wyOJ(Us{xVj!l*1`$pZwt@2XP^GU%+{mKRU1!eG0h`;&kqHPF^itH6dWiI zp2eBZ6JE3~p5q!az`46PwPXh~jDALv?XEZs9n9QXO$fbMW@|$~yLL2m@pyu#T_m0# z@2Muv;mG;<@1q%H^T^hb{B=0vRy(GKdisX>a^Kgx8q*jhDN)v>e9yeFc$(ezd-kE) z%VzFdUuvz%?no<_Ru+_eCCQw*S!O#G%s*>0&0FiIlvGFYGj~9T48Q)tTA&tJ{G{pW z8E&2qQ5?>Cg+e^tqu0f82MY||I7TDP$t-rPy@4ydK4-ecRGhXHje1I1i?nwOX5{< z4l`f)o*b}`M2lto7fxC7q#mtSF{oS|i(LV#*TgT_ai%OvRV~BOj8{7u%`x|ZlaZJ@ zbw-9TeauPDU@DzTwf(;8i7Dl5KVNgy( zzolJvMqSE_en6f6g_~U<+Fz^pMi%m^9KOY8S_FITgZ(-aC`$0YUe1mHPg&Z-U9Yx- zyEY^Ea3kjJe5S=Pf>%Q9_OxQD6y|mp2)TWWTE{ctl9j&vJnDC}5AsnTtZ&s~N{6!W z)!3&_7X6$9f6pcQDg(@=psu|J_G#I1q*YK$j{?O8qML76!x>Y4!WwQSG3FfBF>|<0 zC(88Im#iwkVS>*22`*;Eb0uq@TUm47 zN5<}2R-iqIMe7rtR08%gK(8EGIX?!iRukFIA|Eq`RrMGu9TQpmeF!WGld{^wa`NEI$RAE8b2ORU))V9(ZXz~4 z5174{+9uYLlc*Y8M;5pywT^1!jVhC|?3lJDd()fT(G}#S+wlJuvcFf8%^3qN<`SuH zKza{lw2&J4kdmgX_Mc(iMPxuvA#YWk99B+TfIRG0@<(&XDNO`|hscp%OH`hRtlc-@ zIe~`|OPp40jzk8K@^oK~tVxY)_E>tJtzlU1S zThUx{|Hq;{)DT;eAHJGfhxiII{^!J{;#1=F8SUB&U-}EJrTQ{9RA-cP|6&XT<71!FxMtDv&d~l<|fz^Y_p^FO`(0 z8J9pZ9v8XX}^`v!PlgRYdI*JU~wJPwZ=kf%I3{fF6BWLSSet>>c=9!~yA%9DR@m|jK(@0l#?@FRMBGSHt7#(kJ~95mk={TCG>7u+)LNv?D-nQ*i4 zk5cdG3GIu9uwb?<9osFa`9H`4tGJP!|-_mdenl< z@Ghu4HF+33ucL<6mbz^>DoSIsy2H;@PD?WL#pIIjg*Ovfl`aG0GFaBmNcTHbsSZ)k zDn(7HE8HExTr=WNxqnSQehgIaO--Uwd=x$pCc_s;KVeaNqdPfN5NAWz{?yNUCasvc z1J$(dR0Lk2vNi{aPm_unm#vu3!Seo<*20?I7`;f9Wpxz8!@A6QD;1U(shv%a=f(@D z;eE*S7pZyF1Ez!I;-A8*6b0W;sbJiQ&YYC)X5Mj7_a>@m&e@H6=`B=RCQ}1gfp(Qb z{#t>r{QU-9I-XVr@;jJ!GFj(;qhjFG7JA-}G>wSgrJnRIyd92Yb;P#hMW3e9qj4E_ zU5S2>s&^$S^ed34VbsI>Bo|Vl??jDw0QKP~=#5xMRUm@K?WlQ;$EL0!OIjXFIEYH6 zHR8Xcv#G%MM0=iNrjMwPej6`~SH_=HsT={O&9G@l=o6Vp-RoSu+am129Z>iLs#r^? zs0^W+bX_**#Z-#BQ`35qs>?XA{gDdKDM)h%xfrZ8lQx%x&jJ6 z1Rp0-k^cmF`WR^*4(^?)MVuP10K(DuveHt7og0FkA6)UI}ew@5Xz3z1?J1qkgO}H zBlV|#_ZZTAFZy&5kmS(qkzzr=N2;E{k5y&uHwEr?!Uvz49%i0n%y}58J&{`pbV@sM z3U!?msrNKP;(KAGCS)G@d*)tGbg+(isT`}FCe(61i4H_%u}5v;YJaMe*Hfju5N}u? zNiITdJc7$h@yiclBTGf=$oLI~%gvx;sZ4rGGD~Ipn$EyW`~n<*0Z&AINu0Y74ctxD za0v1>g4+~)^QU-b*SyWJ(f3h7TtqvE+ry)omoQP(GECqh*?+ge?As#8a-ZCw64L{^&+0EhISppyUro@ z>W|-P1MYTomEo}!mbo*~J;v=pIP?s@;bmf>8F;i`;B_rDt2dDJp>O6kV$il&vI~*< zj%5F@<8GOY0T`J$@R?EY@P54qkcpW$Lox+h|j!+ZVl!&gPTLtUyd1yB3GS>cE-ZFrNkUR zK*{fUHJE7N4s3BZK0S|Uw+oLInL8gaeNHz}f9(8)#B@e>=kvTbzW65Wa5rRVU}hDc zNA||!rGH>GXKq8xi?9|k16T;EnQ3fCecVc_=$vE)SL)o6bjTDum#Ilzjg09e|YXeQrvMh^3v zXDvene=#xZCCpF@I@k?pe!*zmuIF$?&`ogC3izk!(Hq3}Z^5I_utR3me_-{n3XeVw zShn)+bXI43dDkoZ{)7COsi}eNmP2aKLUyg<+(2A=G4|+QZhd(E5Hucuw;GA9=m#CH zI%coC4R(As16r$#RJerwVgsrjyFrUiTJmOi` zHV5$&HHnYUhT5$&xhs$L?!@aepi4DuqnY$Sp_ll~!`8lz9KKB~`zp98)hnTgeXIEy zr!o@I5KXATSgqko2e{Ljk(;0)7w~RX=;`{=`6}^k^D_;2b}sLmTR(v+_iv0S9T$Py z3?zIWuch>QWZYHaW}Yp{Zfp7}tGcIpiG9Vzg7yF>?}SxrNNNYv`KL z{xJIEiOKSF83R3-KwZBO@tQb93;8fX|NbVvJr1j&%XQ z>#(Jru{)PTyB1ggak>Dk&qk7(W;$#I>UZEb-@X9qO$D=2=-qVW@hxaMiIu?@;JX=k zJQcSrbT7wP7XoYUYO)C=z@N87F3*RSjewvk7*=Ga0vVq|W@;yVTF7Ygk$J1u zA40|H%x7)&Ib?Jy&nEERY*v}_-xGnYe*3iv5iKg-tf zv(Sl!Nc+M}cGp3bRotv)x)ai~qDw%@TG);pu&K(JXJwY`Ebwf`vpT@l5RO`9tch%u z;hnPJUI~iX&mVRSn2+3nP2G-Uu0Hz*iZ{TOlaMZ%Xh>&%k$Qn>j}Nz{54` z%)sn`7E6%l1E>(!Us(>8|kKilBk$_%1iyl-Eya^0N- zX7tPO-#rDTfuL|EL265Nw5kO2*96NP{`+|iVDc3EvOsF?)tyY%I?Z+;LT0q_TKauR ziB)pDm#h-*;klK0=N4Y`-)6Jj9U=~9AI;)=wRtOLUX9({tzApzc7@kkpBZlVsvP3K zl3-=r+Lj#{dIk4WSii82~$_0YD7C zr-p|bojKcm8BW`H+yQ_0fZ1mL`^<{>J|Nf*exB@SpHs+$s@2wRtOG0OX7bB3i$2I+ zhw|79W6ZO7Uyc{$JMM?K-sLVK<=+a1Id8Anw-?E^vUHdkw{dgDX0Fx>wGu9r`c~_g z)S734HkM$;V<<^DWrzwx!4I)MTwL6l;D(o{do9)gOD+j`5 z{ODEeeWfOv|5v{}_1v1BR}MEvA7KmJ2j<=uv+_#TZXUe~g;gG5vQBW6cMbu?iA2*z zepXklZz@$*IZuTq?lCNyNmyZMuXVOR#tMXcZQNIFognZ~iy<6dgTbBK%A&8WAX*!W zf!9~zWP0bZ-WP0q5xx_48igxyhsvqe-^j$>lkN+)8fK@A=fkNTR=SM;TpwGfb9a{& z6EP7(cLiEEcejzd?WA(3O<1MX$EinJd@FR;NUU(Gb4Kg#$qMxotH@Rwt+t4P+U0(w zP`5hx!-+?9EtF9g|k2tu06i_d{ACQPZ>u0bZ?wI~9CN-tAbLesP zEbgbW!f*;&8Lr(KYJYM@mYfU~S>;E2Ww(m5rly8Exv_$>EdK)C+$X19lqS~R ztVc>UW!Ljgw7z2Fidf8i?YnYL+G`1|7%I(|GR2kN@8=u<2U~M++ znN-glPxu1%!l|@K5oscoq^|qAwVg`3P$?On6`~HwKWjo(y~DfGA@`l2(bgq{{QKIj zg5Z4|HB_GMr%=*_*-EmI1*;O|Tw7~Z*yu)YDd((>Drf#i+6lehM*0U03)OpTjKN#l z-=L1mKhMRt_NWE0Ug{{)(yE|RpmZ3%xzuSxX?PY&{^46-=vZ< zZWL-ygBorn-5B4P)L6w=>bjb)o%LJRZ{Hy#>)k-4PxgD(vh|$GjB&SdhB+JOEI}+%7H{tg#&x89 zYE}7P<$p1XJ$d?Od8RgNzr_4#Hm{M;rflYoL?EsV)^l6M|CQOgc`d7|&~I(Og84pm zKKPvwb=nhFGs|8yV0GGr)zbN_-t13o&DyCE&ztbMy=!Lym8;!C@XCF zUiH_$8M_4v{g3jsSgY1#p4P0$6fd$?cb&6}Z>#ga6G?ee%&E*-0p2zOyDOP>5LvmWsSCPe;vKT0A5tG0 zlD&5;xyYW}S`h`8M;`xyemkJs46KE^`i{oLkg#DPe4V-QQ zZ;et9BeP@4H4UI<(3VVWTXNgwsB^ZW`g|q3Gwx&N=itF?a!+3&Pn+Pqoo{=woZ6Av z;L@9nI>7@P4*`F*JsE{_9gdy72j(OPf9?i6sUiIcaz}dvrzRS zFuarua9f^V&#bpF<4CgUqxg=w(jS@gBQRIWHZyzCOglT#M{y^-e1~e^`{25foyk8? z&z?`UeG(KH3H9$LgMS$kUI!a@fZr}BpY)rw{2fW<;5F#{IGN~M zk?q!S#S^CTP$`?oZ8G(cH>eMcgp+TA)0bd4pWLhYmT$;?%|f2P`D{gOJ{* zd3HO`?x+6J0s7U(A{<0N*29TK*uHO|&9}@v6JCD6?J@La5cQ_}s2lX5a&Qm2+K!6M zyYTW>=AR2S$0I?Z6RkZq;6bVapHQXvl4|m9Y86|k@cl&fXE7DmZ`iju8P1MEwr&N2 zI(THY?MpZ|jQaa)$mSqw6aCQ1ZfHpxD&!TY1eM5kH&vrXbv06aDH1&_gWx{s5=Tpb z{Q`DSwZ+=Zq3ZVrno^RzT)XMbXu{sWE$rfJ$xg06se%3h1s;Sp_h6sfz@3w+zbyoV zepE-UrPfpjeYqT&%|TC(XBEgl*~PY&I&uZ7+`lFDv081ZN1!`%I?hG?4N5)Z$v)!&@DrAAERp17O#CO>z{AP;12|=R#g28 zWEH;+>{*=2-saD!sDDJ|cP96(Q~`512cR7l-eFj>IZ%E*_Qk7Ko&zSgG3sJ=9p`1g z_tn%p2U6Spm|du^XZ7W~sC!nS7iJH4p*Ie}FVS0_ugTlM1>@K1&;yLQ} z&oJ{)D*98n&!Frv@^fIZ#Q*k!zk z`($=3z6>NCsJT|7M`8nW55k5vB(t{(st?LKkWNm2q>4X@ov-(@qyBn!xnGss&YsD~ zd1pG+=Y7;9D`QEnMiTEwBF)ejKuaq@!M<3)53o(e=sCJG9!(8@KD#v6#+&KSm`2aU z3-pS#r3#uaUPd)?B6?5@9obD5{w``^Wzucbv}b|ojr79YNWVl+c8GSRbK+5M&w=?4 zdUQ%)uWzN!JO=x*3>*17yZg_@Dv!keuc7PcJa#(Y45nW*_xJ1$-NWO@^l1#IL#7!$ zDM#STTgdxG#2b6@ZV%DfRf_HqyKo+7#%6RaT+jacE9eb*oLPrb;a|?oyOZKng|EV1 zKSr%!1J)rwV_XfVU%?9R1?QI8{_fYQ<9{0e#Lo5~Iagq1JdeGq57A%HhAQ_)`WGIe zCQ=&$zJ%whkWp`>7=-rRrfhXzySsbro<|WKMl@6fWs5UpCn_xc{djvY(oLF}@wyGu7 z?A>&O4CNe!o9Pc}#z_WU=uYWKZ^{$&QB2{S1$!83pnuoUoA*ZMiT}z@@aO^GUSMD3 z9%in^F5`RI>pTvezs&kXX0W^deWdIP&QU0beyzoK3?NFVNnYtAWUM7!4EvdREZr%0 z(hbu&X~(=h=oGmLDSw~+v0Ib>lC#k2F8D6%L9?;To=MnR=gO|28@!V)#6r4wVOx=<7K<;8M8U z9ZEl#42SzG>7e*6sfteDK;$(JKeQ41Ul32&mb&#_;IWOqjVg4;3_+TlaWYh%M-S4g z?5ppAPB*2GVGlh@qlrA)G!z_4Bv*YA8~TTcRU-)-u9a~FQO9rad+dD zKg5=F#^e17>_g~^sKS2h71*rN$kM&&QXkIAxCwmkgYR#$tNjP0Ixkv(4OVPC)@KdT zb1|af=1_VteJZorhg$}$ZiddUL**~%0(uV{G7O&gK;|mbTeg#q68k*u%Grwb9DzTu zZ(}{0uw6@ZcRG=I6Jp8dn0GoHE{ew7 zfW?rzi#a7?GMzv(vEH|0zs_QDe;C{OHdg*>IJ^t%H5_l~xh%WshM9#N4F~5@>@|M` zT%YFbgu9UHkFjf8l04MjZ^46pK#Wxst6P@HxG8m|A>jKZ7?-49@(HwdHnYw`u4kdY zBbfDEdPq)=*AjRAfJ9$Sv{f#07v{A@RJGFO$j@$c`F;2~o4xxp=`0(;e)_)9z*j5T z?cEZa-977S+e{>DuCi(tm-ob5>||$i8G025b6&tZ8Ks}+q=vhZ^VZnRzv#?~<4=+P zhcnxC1Rp&P%hiN_xj*U4*_L_5AF)&0!2U~o)hK$A<^sz%e3FB`z8D+(ZdPk_#p1b; z?vT0=do%$$9!0*I(Fyb{e(D9}>Opj?HGM(t*oA!pSZ^Wje24wI9a$;njlLr$xSf8a zGVu9$QkY)CUy{>E)NJEih9h)c{g8R;gLI9SL>Bs@P0wdsUW0$MMq!oZvdn_L&+Jp8 zb;JT^&<9k49=j{>&DG-aL;qYbv{v3UaT96*D*E33t1BT!Ce|1O4eryihbd`{-OErS8Nd zqp{Xs;h7hsi(jxhbshb8>N>45qxI(253DXjU!_D%tVLP8VO@CQ%GkQO^^`J1C7$+X zhrBs4D`S;eWtLy&}4+HPab;>vU&e&j*w_M4#ZR$!^1_eC#< z5P1$`#WD_$_bKxpBMNi9^dqmP;`twi?$-gSD~U!#yw(K%BVzuR`$r-}0)U=?)< zTy@W2dDhNF$v9b6Hb3W;y4OPa<;cnsaM=c}H^PN~&=j*j8?edl1aJ+ofX_SuvkY>0 z4jBdaR(3#Unj%9@@ln?xNxhl58$9TbufH7aZUdHPC(Zo1UwJp2G;8!D9RG+Ye+t%U z0`aT6`lr$#Fa--S4a+zYe=wev^1H0h#`4;o=4-K+KO<%4^hzLMIZ&@DGqi!Hc6N=V z*KGvP9w(x|3vP4=!diSwIW~XnPLpFulRGk`xA_kHB0fPs=5qUlXv|#*_LPl=7jJN% ziubo?Xbqa?X$R)GJ-f}F8D?3|1NTlu@BNtX0W9N9#L``$wmMZC&rljj&H1_C+nlo* z&IAb7z&rE6M|jWtucwci&Hsfcel=8bzsPYYwwLeQQM3ixZR754XtV7pQD+0V&>~w~ zUIHhY!(lDz1*|Na@>rdDO8}*N?;_66au>6EnCBw#-|=iYG+2hlxfcEk4liL1F^A6< z@N5aMR{){8sQp0rXJ$9enHI!;x$D$j^p_xKjp1=S>_uxdpgHrN$Mcq0g?gEEyYJi_ zgqdS^+gNoq58^6!H`28hDBSz&F6S?h=r35C%M-g3)?zOgUz~unQt?BT1QV6s1M%tn8h94HK9ax<}A-MJ2cF=TIY1HjULXNpt);z4O+uo z$1K~S>;h(9hEy%&xjT-Rvsw?(YyqxSd?)O3wjxuKk>YHP<0SC(zkGfezOaRIvNv!MbtQ(oABKX=q-8m-!iuHb?y| zV;7F*Gje6tOX0C+tJ+!C5PQ`MiMoP$%JRw+scIr?UdO&1xge{X^BMJ|XaVEp zK=ad)wcp`eeW>k;TSt(m|G@S`Bxxxg>>J>kiVrVF=gMh#I=flApd}|V>WRcJMfvqc z_~SW}R$}ZCEX*h+!Q(&hsfWL4gmxE#5_REZ9zJ!?Z4B2vSKDh;+w*5N%KEGwD%+r~ z{Xw2#B$qw?eK*uTjuhH`wGa6J;#=nC4|BJpByZ*y3c+tRtQxXqmxi?~_t?4ass%)4 z(W;zGqpZ4}0WPJ{hT7m_cZVmp?t`Y&zF*B3jmU>lfalRP#)Do-OmZu0J@fSs zpn;zIt5+<5T%QWfbGWH>#h|@=L{CCm^mt2&-WQ`ko)fU0 zD7sd*7Vig~gMqp=b5=v9R^!KnYZM%K1vTG)w5%&J zcQ0Nw23GqrerNnmNRGWf_Fh>x_X-8Zrr!d?7ht>+DbrRJVb(VMQmKCSB&rlkZSvm)3} zEV)m!_N|HQ`>;-anYeQq6!esMyN&GS@*F5nov@-~ok{QP$v*#Owr>&Cn@?VNCXaKW zq5XY!gPEJQ3!yaQxJTJ|A%|bu7j_O9d2YonFkeYzG#APH3=G`so0pN@QCt~bIgTfK zSoIG*DDtitmcvNXUXGu^d><4!o!^u}CT_$Q+=vam1ll!c2EEQ=?4%vB@4;ielJSA| z$*$s~@WaT|o>==jDl$eJbfyKeRTSP>1Ji@rW9peWu2A&WUbn$L@cZH18piSL9M7{Z zjP5oCzXrf>m&o5>WM7{e;Ym2IaqLk%2Gnaa&GzIc_1oHnR|08>zTQQY`4sE4XL)>t zXzxPwxhSyg2ma5Y^jKtY5|1x{nK7i@a{IZqgVECkaNO9bBX;*?z>znsT?CQ>^e|MOjj zjk@4Duy(QDP0r+DB+Yo;of4-Y<-bF#uc;@zMch4}mB(nT%p~A{n<#uO^zoFmDqz|> zvlsWUuDAg^Q5}dXB5TG}E0}FIw(oPsSp?r)@wunlQ_ei+p(wIb7TB#ndP0%iq$fhR zh#d+ufN~+Td8XA)JV!n-yN!tYK2}q=Q%SoP={||5W<45Y$NOX+Kg1@k#vZylw3~KU z2B$rFRp3c`e&cyx_p&x=j$Ty5MtXIZ`Pk+KjIt0|7eVjups?L`c29<`zOqP({S(!o z*KTC{IP^OJ1&$N**s1BR=6k92J%S{^3LWaB$A{tZJmQ)G+xlKb7D;@b+iR@!o}j{W4Y5FbKC>^_eZ}vya=eY~c2lwvP0331WDPkQZHV|zJ9vK& za&SGr>55i0gEJ+w7``gBKNnBc1TV4+d$EZa<#X_u3S7a8xQbfJ=<|V1fAk|9(Pk z=5{r=mPp)nP^uUD(v(|uWWX496*@l+9s3v=@Eq!Qkeq2q(U)LnS8+A4x)uGL!2Y6f zWU42yE`O0#+F&Sl8!>BN#`7$!b;$cj=C8#5rsM2*ZN%x(UGZ+8ftlS!Md6XX6h_!} zph`797vwJKJ;mrHiu_s-rr*e?OX9|))K(viFOUJgH}H6 zM{kVG*TRZ;CfYpocQlgsI2G7I(B@O{F+x2Z>Uje8^UOOu+kG_|NXBEwCTFtK7m4!3 z?+SP(cdvfLZ`~=}mHPNO>=yEL+vl+d?r_pKpN_l~f~RL;Q7^)ZTnv{k<*_Z2Zdc%9 zG;|X6!h5LI+>bSRo7el$vA?pjukXxt51tPJJ7{>cKk z^cuO3YceRVCNpyfxV;Hxo{43DxVr@Gcd`GW8am~Q$vlCP=W%Si`yW1nw)2sZad5@B zMXOXAD(e5+0nHV_ayeG*MYQ`SAbAM68_ZpAWu*N#+V~!{d=8piL%ygz&~&3xFc3MM z#>gx1SN6siW_Ig|jiF0*w5U9g)CD$u=f6PW{uX!8tb|v`{%0HV@jLfXcn)Jz?%nW| z*P%~0XTGLCdU`*4)P-?NV#o3k4No8wGznOGkX`LZTy`Nn40mIFo<{;b;n6)fcGwnS z+(vM;6r(oA1{cpL<0{!~sNK+>UvUiEb_U;S3jbR&PbcKu9Lfbyr7h2I;=Rtqhd03E zo586ey090U_dA$-{_gX@Fn|o%-Q>s~!T;G?@d`TmCK1_c{OWeJvLdse22bl|@=+Pd zJ%e>$X(ZR)QFm^X27>%>&n%O>O&Vk2x)B{;3oSgEvIR7_6H8SeDZYqrmqq^U?R9_B zY-IjjR%$l@!|Uu0ydG&C24_a#hdnRwJMc80;)=rSiFh8R{qXvlg2Xr?^1n_EJP2H2UkI3N+AY7G2{qBz40Tpz% z1m-ftkB5jgi!!sbHO;*;M!@!$y9dKP zjz%=n*!WG1%z>C)_s{DXsLmyf6u;j^Y`x55zjKrX^*}8Uyp&U5u<%)5p#R?XgHzC>%DnJInSWl z!3ggCJjhC?1mpcj#^Frl)^lRLN{ik8c2wH!q6F9pY;M!FtE+qa5`EA97<<0#8@A`u z44b{bp_~1WY_(-4sb{gckHU)XofF0E#KWCS?xZC;bD$1O2xb~%;m{Qp;Rj;8{9D1J!?d@sTRyw!YId?}%^AnlP zt8ay#+GA*%Jg}3}zI|m|in=0`igu{yQ}hKzAdjzDkqE~ zgv5Slp|b~iMnUIKk0jRF*nCEaei6;TtJr&Lc^vW+vs~zg{J)BqOxnhTz-^!nrCp&uW;|+Vv z>`ZrM<$s~qj+jZ&JDk8s>XK^$|0{#;8SouFl^yy*?tIFo(&&B?v%hlJY=XZvLuD4u zPIUX>?bo%-TUtwrkQtXM?*34^g~1&g`ZZTPN@3uF*PV)>Kt8l8L94uiwfj7T)m~`7 z9eU{fp0Y}S4X$AqfG2)w^Q4SgXTN*+L|wAB5v-sX3Ay_Q!#Q(oPOS7uv+4KBw2BAG>T zKaySMR_%<5e$Ke)*~4Bp$=+^vL9FLdpL2+4(jB>;3z0I;N`6}bJ7reAEZ1cD54+`c z1atW1zvNEUu)jEQz_XO&%<`*^1&OiBAtk$*!Dz1#S-pICr*In;h0q~mT6KDs8b%kTZfCUwYFpAF`R zfL@(l0nG14HxOSOhl179tBE52C1yT_sInBf;-mc9*z^bR{13PqM)xz%^+Ys7p=ll7 z|Cd-_N*0Q~ASy7D{gf!;8ead1U#~-a_AOZdm9`-Qc^{rOCuaBTpWld#@)Eh6gC_k& zTw%|b@=*l*{{h#%P|$vtrO@tTY<;`561^A?vQ~Hmf3gcr_?g&f6Y}L*%=wAAmJmPP z3WfIadTKfZndk_X4@I}6_wb9_={O>&dc=IQqL+a19QauUJTAm$ZRUGTi7ZzGuU6_L zV)8eUx;t2HEr5?l_~t^^2d+4GXX}JhS)0U9*cZ^YO!Rizo*tRA;M8(v;WQ}X@$-090!i4H z*5kaD%2bSRWu^HkF>mFx8>^w$$(_xK1|q5VFy_2;Y}7El2zh@Fe&vU6WuW~+R&$N0 zcW^rfUeePx$MBUthLoPNhh>ywMp`{FyJ zO-V1J<$`e&`Z3C}ZgVfm7_vE+(E0jX(mt&iKNIC+-S{sZutn)Hn8hf~qY7yK1lCxa zSttLU&I9}Qze>!?mVFQgS&fjq|CkHDonY5iMVU{8nM@QVh<&iPgObeQQ9r>2fnutP3B8vWJP!J=vgt z=AClTs%>dUq{8cn97fvC!7}zI-~J@Ij4tG-X2Qec;66MWN`|Z%9d=8QNb>Y#Hb0_| zrybqGZ>K*cPjhvZ!N9&ey^4P2XIS}v1n;IH`yGA!G&b|NWbH0HNpr`3M*+r(~ zQfM=Yclu&KN3zPg0zF*|ce^3IH;{8#PNzvnvQj0Z0a%{5knuU_aY-!g>8#+!rMF`N zx~G?tFM0$zzrf1-Vb*fzU=vS--Z@y2(v0>Dx^{#W+4*>duUV^~&nTnd;ccwR?|>T% zv6W^4I#XNShJ|Q@-5H55dypFBr*O@cWpSwd59_{4Q7`C!Jz25gtQmVD5yP;8yOFc9 z$j0+&3+%&JoDx`v|J5QpQf{K})$_Ej$3t|-PK|UFYkQIc-_f! zc?HO0WHYzH&lXt3m%!yK=InxZ-=6tJeZkM<@G7wu%@a+>AD>BFeH=SF3p-gC4>K5P zy%c}4kv08Z?9$i3sD-{9ZV$#ky@y}FlkbdVr9PY-_-)McJAAH89`I&p`3>?o9NIpa zUV+c3LVxDQ)a#BcqqzmhYsFoV|FKx6CCC-$`=PZ3$P=6lt-Q)ZRcz(0aK>st6ZG0T?Pc&|4c@;Yo-Ys2 zeuBSVt9mS+r93j+1+Q>r^dZz+PX_oDX!H`AQxv-FBqG?%+W!~6VHG!Jh2Nhn#Z<=Z zf;JR~3YRfw6(A^#M{bL}F638tAzSu%dMf_2`1ZV5%Ej27`;htr@c3)ynog{|6ic|C z@1Mk#t)~EQXFT9qFnk){A0uaXV3pfpkq41;?n{QI6OTwAe!B;hD~Ii_4A+l>#c#;j zTa50mg*)h|`W{YpL=z8_AFT_mf8>)fWNy6T!6CThZey=0Qvk0rm7ebZ(oXdHjzFr0 z(0w}|dtU?lJ`NvM4N1KgNVf6&dRT?0z+yR>>W%!5(AE{?yvvi58c!zlujFxj|Kn)x zFud6sVDOZaU$H+O$ggz7d)vFZgn%+HkQa$RVV-+A7wjV__yj#%W1v@gvQVwil9TbP zoB8z*_s&b0rF4%-5Z)`z%d4>Ear zJP@tC7Ef>tIwt9M=Bx_@v$37M$mDdy`wT;Fm!k>Ah+CeGk8JFEI8u_Bz<%tO z(DHtAtV_tXdGeZTTs!j3g#JPV`Uq5PiM&67hZzgiUe2mEA7P`$A|=h~Nt+8yhoSKx zBz!J&y;BZ0ttY_4w7ujrCyUYp|m)Q;!=C-LRlont}BEEdqj8@=DU_y&WwM%B zY%3Hki(hJned~mzd6L(S&}jp`Ew@9x@7c}J9qz1ximl*X7i>#2u-b-2*hbZ50vXN; z+C{p1$3wp|WWvYLE7^eAx08vj0oJYo`=W3D`XKL~13$)Mjm||PmSQh1V?~fcz0UAz zJzRSO`nCsxH;HRvH2o4}V+!&5YG`;Lw&`Yax;?1^^r7!|V77yyE}U9P=KBUDaSj?V zhnmz{V#%ghypx%AI(#ZljpbJ`?27d7V3w{(%m#cyf1r7h=%W|8N>A*Fi7Pkax5qKg z3q)tvWH{Dkm)sM)*9ptflW6n^k9(3uQ1ErSuE|dl1-HRdZ6oeAm-{YP6deuS?uyQe z|ABkWIPI=j+>>|4GJ6jsunE%AfEdf&eT$&oZOH#&)(vCrq40sP_7s?6bbBvF7!a(7GaOh zjXnd9x0rDv9or4S^L-+flaT(k)H2p4L+~j>(e+{I*jBV{GWN6~k=>ur@&P2f7Bb+e zt2cqqPh7e5NicYyQw1mDReIxbjh7Cyws;K99ESfWhm5p>QghJW^Wj=2>J#syb>+cx zFZF^W$^RqjOyF%QzsG&|$yA7tlCM%yiWHR+N`oOvLQ0u3XC8_Snddq4EJNlgMKUB* zG9yvnd{2TzGwf={(4=RQzxvrmEdxqhp(gK7b9m&@PjME87<)IhTy9t zywa9=6veAs%%{~EcMD#E`-M5tAI9%$;Gx$-ng)|+-JdZQ;>&EnpX`bT`4>4W&#U$9 zA?83=l|%~n@NH{W&44N|Vr8bXf0-BUIGnXYX2#tC$6O9OGQY*>=x%tyIq@lW;ThCs zMt8&6pE3*2hW&&N>BQgl@Zl14Mju971#a`gn~kxr?w+SXs+%&0sqkKBYS-3>|9kQK z86;sTK6NSd)egLYS6D-5!bUH_C#i{+(hutn+ z4H|R-Tiux7cq&d$MF%ct1vDAiTfj+$;n?Tb8L0v?e*%tnr~O0tVgeji6^?JgC>=O$ zb1yR)O}EJcSeY5jtuj)55!wF|$ts8Ty$?^O8~Wj8WakrRGYmOfista->srQHK<@8& z=vV{Us0dGPCmv&uqCV(~F{}?7ut!!8Ztud0fJYd6KD9javKO-uF0C3xOJ*~(oaofD z;QwwoZvj@b2-G``E?l7H7#Y!Q0vuk2GYV~? zm-}Hap!;V=7JM9IeTz*A;0^bh?2pw5sd*V`^(=x}SgToQ4PgcJ1@8}GPPLd%6ExZt zzI!pE)C@Rr7<@4x(iYR1<5NiPd^~}C{9OfptD(cTLesA!4^A)86Bi$FFT4Bo0$WYs z5W4}70k6~1@dLnYf2_*$$bDh1w*KRGtmJ(7YcjTZFdVN%wsvDftXUWE+8gfZ1})9x zorO**fL^*l+@&J-cnLYKju$f;-BgWT)Ni5KdvM}b%w^N!GA9?t1MAeZ4Wcr1U;-aKODa64&Qf%`x>G1n;~N@z^bdN8OYgoIM#g- z`;)u?9iBrgG(mRjBej#6&2Yw;3tvt_Z;WJ?9hmde?57#0vd7I%d|&H5j)7JKu>4IJ zp*`IAD*Vxok*YJgo`^p9FZlefcJgzFXP8fIC}MubP;Au%Xyuvjx%?i7#_9(x>p-hw z5oOIE-$VSvERE6Jtpg){#M-eMTCWjORt-!JX5>L|-Z${yNwnY1j8hc7UK&2Ajoh?k zF2mvJA^1=Wn9T(Kj)5CnW69nEcloiS=E3Yo2b!lpoB4F)j=kZHx4~FzG+=e+)(da6 zA6#RdhIPb0jQ!<7FjK1apGFM?=g(7Yt{F-rW5?tVcb34sA#a#_fj|p3Zt=GgyvmyX8Qq zl>v9|(br|HZcwB*`18!p2u5<8e!O2EzI!3sC;k`Bx05@pz~YZVc0Y#xp5ATEDBY2w z&T#hx#!=^OhC$!Q9& z*JP#eHdrkKH1{EMo@V+RteYXX7%I#_Hb*duj|t39?YZ2Wy>Gv&XCr;|kmC z0jsKd{^(u!p%(P2%J0fxs}!FRV z7`^+phghWi63H?KO@WL1$)-Q+(XX^Smn*#GBZp) z#bD&cN~!08#oZ!nCRszseHQn4tuQO*Ja=GKHTRILXycBOI}_HBa;L}oU{=U-2gdyy zcU8?0axdF{g;s%on0w@gHU)v%`iOSc^IV0seEc2vigKsc>T>STI)YZw3UOv)d*b3O zzdf(^JNi_vIKjjGyMLJLF=l1HxI4Vo8nBMnMSh#NE6nM*cSgptcAu5<;@(v50i1*b zH$o?C!kUMC7%W&#C_D5uo6&l~Ie^RkbSnkf!O`wlR;qH()v82xJ2Gz}9Wwe4vkK)FL{{Xpw@3A?9!-0^aUIX-vij-+|H z*5;9JC%}hz5gVRKu`7*dRD9S^(kydp4-4Br+|9~QQpX-(S)r?YdQ$EmsA#V*J3+WR zW}OUolRd9;GxKm)@;3M`Cs0~{(8@NsfZZH`th^_5Rwla!9jtTep1CJ3&zI!dK5TO-OYt8(5&#&;jzeQzmhuCkSiPjOdy&uV|!BFQw<^a<$csU+*h zDD`>J3J-$weCP&q`8}(Y6|7q~%N@TP+|9EGp0c!Jmiyz@{mu){kHFPwvF?|-#;R~9 z;0b%i{tR^T(s3X+uf^5Vue@tTjl*b<-F$AJy|d^N<;g~S({n=PsvHoXYN6YclSe;y)1lUc7vZ<)zIBgdCJogc6+kUTsA(5>r?p+ zabuk*yS3V(N;$kEy0@oitRj|+|EyT$ZmRa!zjA@u2l9e-#o{`08Q94=$Na5}=iJYr zH?4?t3axK;*hR2*2_BK#;~jK&^VNUWSv$^ewaqzbr(VedP0d)ait9yYDt}lXTQ0W3 zigi0r^K@_C^PlcIn;qlMLjuUHtm(-{PZInu(!ieQvHqpn(5{Jh0=s8Dl%oVZpr>{} zShI$02C!}KH+8Q4u=X<2_l*A-)IJGZ=EQpn&T6>UxW5OO_ebzvWhS1Q+6=sZL1Qa8 zAA|ay<~ji;j`DPebQd%IE%Nl_3TsOr<*GEy|0%b=2UT0s`?B=Y-&K1 zBCu!Yz2neGy>8rj8~(}-X7f2T*^Hl&nKk$ZF!3ULF8QE(UUn%SCZ_QR@Oh5zK6baw z-S9MaR&>Z#;w6tVRzbM0Ab7vQp6ET`H#blnBt}{UuDTTu?Nj6u4jPn7If6^)KXydX7rQrKS30yBJdwzPWM2azu_@E4xDFRW_x`D z1p?v}yWu1~Rjb)8=i3<=?^j^YLtO1HViITB%~-1H7O zg*)B@TxpoqDZW*RcaCyR0Hmv!XI|pIMmfJCs+W~G=`MB*55o=iOS?*B(Hg#G80&tx zb_aJX$P7-iYrh8`FUoJTs8WGwH!~;-y)v?c+zd$7U>R9w{R4c(Bdiq%7xGCJ_CZ`5 z{f5pcO03SR#s}dneXRuH`WeW2C5Hxcx=82q#7DwT| zlW2DH1?^PXC?19{&Cqfe#NC=xykq~MpLpj@czQK_?%B=#yz*?< z7f@NO9cSjhunYJYyR=Ge1-|=dYDXl_Q^HpA%ft8fvP+jXx@&Qu+ycgKfvWkT{eCh! z&U3HBV9t{l);!J+9jC&Xg`xQ@=#&{cpM*DdqOI~V<4wdcv$4CTH*9UvgUDwoSAQ;UE4{T!nQjitMA=XI7n)a}VV5(z@p8D5w?dH@ihF{Adn``(aK)YT>GBUzJ>EM4eXVL;=S+HupZ4Op~b|=gM ze7Sj=pY}Z8Nr4AlnOGkq&Uo9;cdvqXtAl&4$EsX=;ehGf{Q{in`J@b3U-L23plzPu zUZv2Zjrg65wV)kaUg2+ZIJGj7%qBpPml#DcpsIsLA@<5$ma!Jx4`&R9TB})iE@w45 znYE~^PWvou2g_#3jzz!U2AsL!>1*Ve6ox0Na#t$^G(@7B5bf|J&N5cko`o@HP?WKH zvs(NIS@k@*_0=}AQh$%pJ|e18g?N<_7P3zGyPVi_SNM4uYiwz{7Tn%O7Scif)?{|y z!o@X-*gS<~G$1-v1QR&g-or5ZUcz%jziDZ zW>4i4R@k+PB26GhW<+cbQtaAvA$IL4GHoWK89!upbI4>GLFD0Yw8jMDQm(g~5SQqN zX6?qzI}i)$Mogh55v8HX_sztIZ%wI+&VGsAsAss(53J~GvBNhE-PDf1GvPk_G0k9C zYz_Y(CO_v4e@~~*MGwq_*M<@W%MSlEVYjmZcKJCnQCh=`rJ$v!p6+IK|21)oe~^*y ztjfVCqrq`iqG69C{pHv@>d*a#kQMSWvh^p?zJl1a9PCWIie0{o-N{<4`_0^Wnh4-iil@*w3G1FRDt4pbCh%0#_aUe0Qm(Z*4Pjvhk0yiEM-cckSu{+mcNbv^J8gNNI4|F4mpdPLK%Ag6VqNh*^15%^dJ zAD`ttcWxewG~>@`!X!AjlTq$MZtrEjRpHx$Jo^*PD}&}-&kkE{aPTWN0b20>QfN?- zD{tk~yO{fI_;n2!Z%!m?3gdT#zsDiB))riaymW@!_JWPkj5-R4zvmkrkzY@N&jc%_ z@O(}{gU6X&RdicrXx$2~9>ARE5Eq+D4W-q{)E98!I%eGjSO-9n-OS|<E6zB38N(dFumSCNsy;M9$`7-{+3tV)BCl>-iCvbI=*liDVW-dIoL2#w}D9gddLugO)Rx1#7^yGh6X51YvpUw`? zo@g)R6nR^Np~wjSdlvm_^$u&zEJE||fbS+DTN}}09pSRy_^&Y#ZAL@)K(90mIn6}gBdSasvcS;0~Y3&_*)y%-^Sf$i+ ziW8v0AZRt45&Iye90YPHt6T+U}Oe0wl=W;zXyI@ zgZ%u+{=+z|NiQg5ec#9M5-143{(CY0P*4y5F%|gMlvC#CL$FCGy;tzm0g+ z4Vao@mB%7sQ^4Cc=x5g|yG7lF{;;2qHT|06%XMYEk?g>^>oy-Ke!_MwV;}f)Ff)ix z^$9B=>Gy)w^l1I7aNaTQ_6^**k$ZdI(mlYwJcgp9J2UzS^j9D7H7df^D0pWg(mfHH zt%0}ffAlkQcNBe_nfrP!`Wg7Z)3Vi}!~1A;C3h^3PvMnmJm>Rj0Q@rsz4I3Id=0O` z{vPS^bzP@hlX^A$!dWf2VGLuB0awF;!n#Jocnk(MPpNA22E#MMz~ppv%@Q!X1-W)j zY&6I&Xx0IE0xz~AI{@!6T2FYUDf>2Yz2C9ubt^pg0&mTMxD8k=2UZJ$SGxgu(%S9> z8zZ`{hjW%QYdbq@=SD{meguaMf?A#6VzVIBf<54=0pQ9$cwYd~9qjlHV=!FTZddMU6}0jjk@_jZ79 z$KbQihj&&$t7Uj5OQXFs-*r#ky*B$#yGNLSk38FY5I*`E>@1CBW+K$-4@8}jr#|53 zLm=wP-wwRv{(l=V)(0-@1jI9eX(3v4D-!Ry7NgO|MBYTtHAc7eB&)4An3xC@(~+tl z;BG7KE+tcH65iS%u4&0GPo;=*t{k$mR&af~3VMAGR}YQ&w_5~3J0!b1Fth~{doX^) zvn!DF z@bCaIBP7cIY+g-3+QtFXaO`YX{C;y?UP5cwN$XB*YMi?(kFLg!PD8FILA!xK(w|3H z@Y4erdm(KDc()ht41wo{LE{lzxg2Pg@$?*<=cqj6Za2*0Xn^W?msJ?;Lu`7Th=N_f z%Ot2b6>1K_vRFm2J&-r!bNk~JhJtDmPq$rwg4XY|pVm5{TaRZkpT{TYgu&oT@23^J zzeA9;RzNiz%(Vy7pSTkKhf`5V^_5hXjptQJF6Sqp3dUFX{)9#siA)i1u_wt7W zS?7rBm4lu@wt?&C@a=P8%9>5qcX}MyJoEn^qg8`KJ@Cp~K`nV|0u)?~{r?nfO@PCO z;2+fI^B1Gozh?~pg`TnYcX zt3H|;JiuI@0$)~yw5r!8q;ETt_!AuB{l8`I6M$$I6lx8(f557y4lDH9WDLB<;~nVu zew2|j2ux0e-d|z~PJ??hfeWA&Tvb>Fpc35G6f8AGKbk=>2aUNDUA`CJfH_K-)9?5ZK?${ndjz;Oc&ivm!ugx-zJF3% z{VLh0CxC7vunmUit>&H&duOe`U0`TVWP4X&FQ(x=u0~W1ByOzXt(9U1->f zzg36;)C0!K{MQSeF_>p3xb9oD>KwQ#1kYR8ohyZI$b_!$k0yE+_y(h=Mj?T&ioOST zE8(q+Ky{K;;w5sq<`9vXj3)hv@7VqI6f@OJ9Et8(i`-2_;-~Q1{F5Gx`T;P!LVjUW zGV<;Pnws#}y=0J0gn}ixc0TkQ1ct3w^#xYP-L@2>BH7`n=15~HWWNXas){hD_2l!H;ONL1>MZco?1yxQZ0ovGNrBH4H4RL+;G=`51hSK#z7u zJH3Vkz6~s8`CFBo=GUnoQUmI~gA~++@Tw&FjZNXU2JnAJXx@c6^g*L+N9PTLV~gQuAA$dypp885-y1&D zLv8>MO-DkTA&)4P)S^(3^sPHb&5zTjFkN*OGc)&2IOsShCIGtuVbkjXiW z)D`%q@>keK!D(+0SFAylq7?jA3H&__Mb#M}K=qM4mZ6I`LCr(NsM0`5dw}XkltF*L z4lMn^)w`^Frvh6~aArN+AAso;^{uzV`=@#A0Jd-Vd=$FQZl<2EarO8s9A<``8fhY& zKb-M~f{)hFa{#z135M!J#|q%C9)HX8sw3BR0&A1db#_D0c3ZjY5L!^L>nc&NN3lgE zdHp;Z<2`J0BjjKhFb)6)tM$%-ioXHfX5h0&_-3H*$GgMOfd$abg~(>!fKA%NC|x4h zMuLyl&~-5U{T>t@0&hJPWuZ5slR;7RYaKG+oUMb4jO|7(TC6lqtXDEKiYPfY3 zdiO_kZbt5SirtC=$i*F4Lbbcu?cI1)7u_}<2xfqzudw8Y@b!P8j`%rbWGirf4~EAf z&mGY{?(5!*F0m@tFK83aV4_LJGv)`84>26Q@jBY1EA)K@2%BOTN<>+WE%-!>px@|< zcRKjD?$WwwMPy}9d$!+<9jy=NJpqjEu#Gi%6CT~v$FIsu4{*!Kgy#3Rz{y;KllC|eKj2zhw#vU?Fx;n!-egjabvLAho_e|`&y%)YSTPx0-aAjg1V-;W&%6HLzb|Lx@E_5w09z0G(Mum7Je&ld4 z+lni!2wj3lQM}w-$d?_Q{=iPJMK65II>3m@#K`L(1mC-&>kdx)W7%8qswcGX2B*5# zGlDYwZUW4hI9mP1CfeJ zz_*C+e2LtChi;1dD90I1>A9~Jj?}K@pw}C~*AVG_AM8;#fVk5b;F`^t_S4MIu31;$8so2DG1@e6(~n1cyzS<|Qin%NsN9VI^nG3Jxk4Vzl}3ZC zzAtxti#6MYe*XZwMuqzM_MpCB}fBFR27V?}1d}EQ^ zp3I^ixUPUVZ@tM3?ChMvqqCOua>g77?qZs@$JVw7HlgYaRr>LSgT<|2 zFYeF$Cz5PdkNHCd@FcA#Tp91PF4p&b;2Q)KW02k%Ko$4$n&775z?=)C2O(2tHGm@z-hqO3k%!` z{FQ;iW_DXS`4@QTbKsi@?fOKz&yyHUz?=`)_09Q9wT6h&{m|j=nN0=4h0u5f-(DZd z@%~89m=~z8VE=)K!Nc>>O13WA<0Gu_aA-I!qVE#uyBrLz0=mz@ zdmIgro#>5SB7Q^?7eFm5ts1@U1WnrjQ$sjVJ7@gA70(a+n!6n;Duw(EfPv#o}0 zChq~}Yt3_`aCZV>K4@GTTjG96b2P9qN#pRd!Ph*nW@L92f0u$&BTZtkYeeC)=yzQ2U^;VBLcU~n8=0e(;eW+T zHP1N>7Svw#kAT0j_#~csX@>qVqGR;ZlLwzhlDiNrehxn_;QvX;PJbxe5*aQFZ`gm) z*w=4x&jxtOJ*AP*uUjM^;!ntYdQzn=Fl*z6@)*NhW`jE`wAu}F6OWzv_txf)YpSJ% zzwcrlq8==c&rk`fHGm5{fy0qNVqeC^K&JQNKFdPh8ISfE!W{G$-U7lRXsMjg*eaIp z6E8wW>|Cga+6v6Qg}?U>YofZ~unzK~cI+DILAy450!Mh-&suxdYu*MOtiNqtpSY4* zPT;eK%1g+w-71@+1-s!R^oy*B8c!U~2DX`SrKijXLEql+!Mn)(tISFaTEEQw%Z)&2 zl-wwn5qtNa+C;L^5_pY*wZ>2A%4hb{)c2FZMm$zWTH4CRD_PB4!J_;^Y}z_ho)?H$ zqIYs|K>#hd48rFIBpMwW#GV)@UT^%{)uR8KaIJ_Wh{X?~abwoL&x64`!Qge~?OCEVK9xNrd1jOI!`hB+B?sMhj8fhZ$_XR@xcT~obJj6Y$t#uOlvopmaD5tO09U8ko^d6LT zU#33X=T1yZU>uLG>l1&b zdRtAvp=XRd6|OJcm(M*5 zPII_SO=v{+6DYg@TuuU$i?D!$uyx~*bv05$zE_B+_5T0DdY*-U=D=0*@`hwX$V4QkdU~?_pw}S5)r`-)Mk77rxn{|O$pA}VeVNdGd z;gtc#Zs4Z{(mD-#_D1j77uA!ZOR>o_@O7*M+z%Sp;#nIU#$6sRGJA9NSEJqLf{jm* zl=jj3Nep%ZmX<)+A<~d~*71&)J*7s#6_eq`+2C>oaIS~qKO@0Mq4-sDoU((*yzrrW zU#~&wR_L16tVuqO@HGiNGZQ>cgWj`vJwD>k325`q%%lZae-UXZ4L@HXR+o+}ywzxn z@8PYFp`ZCF9{`ncNl%cu2JQg{8^fhT;L;A@cs5iX8`x>p&#SGxy!F$7Tx*gvL$5;@C*zd;(lA8G6S4xIc2Ii@f?Z ziuhX-^O4B6wy(7N;C908&iZ3C&#^!`4;ePAU~aUMp8}*yp|-1o;aI&Q=+R1euJ+ov z%FNBXnTcdhfcsiT^nDu$+k>ySz-mjZUIVDzfKR(Z^FBPg!w;YF90VU4SDb|f{2O~` zj{d)7FyF_zCkwc%4!vH$tNsvu(;AviLaGOWy;Wdu6j82itn$Y5|DykcyfgT-0`jx) z#xqFtE$nU_VnucwZPOc!d52^T{}9UJP#h96j_B_*@Iew&8QL zXjX95CrHRObk=yV_yn2h%UM6Y0}d}@`&xsMr|<)MfjP5xh7j#o4c`qSQu!|$r!$!R zmv@?@4ZlZz-iFS-;n&B2PrYp~5H*h3Q|{GwLrU~d-9K*$7Q3Mf-+{to@oTIuG7lbX z#Oh@ZvNaItnFkft!yD7#y##e~MlxUfH(SHMI(owja&G`zL%ik2P;v-k4@EYnf~il5 z&3p;eqlt5^1=5bZnh3vI>;DZr4zsZ{AuBu3Uq_h#AoRxyu+bcdMj#FE5ld}_v~(oa z^={-d$dMi42cyBQ&@LPK&If3k^UTjGHg}Mnz7k9S827fTjQf1A;eEXhzJ`Ds7+ zH?;FgEZ!9C%4f*O4Bnl>6`qQ1j?McJ%~TlQ-~1?ZM-O44_JXs1(0B=)*8*y~Ch5xP z74g0X09_>_T-~8;W2oH|sp`UGCeq?r<{zQ`7=By%XExNmk2v8L>IPIJJ2@Tpt|OGK z2o666z9IZK9`0KQwxsgkNJ7Lzs zr0_U0XdRKkK--hiTL5ndqN(o!s}Vs@7&iyAO}VBkF!qD)BjB?y!RaV;^iAY~_r)5Q zBKL44*(Ob~%3D~ce2Cl@X06;1ijIr+=I4XAc|b9Y-L1bPUR=xm);H+MUeQiTTfE&C zNX(mPf{fUehf-EB!U5VKrvq!FC0I8`#}ihTJRwzOzt$D6#4b zywe#UVku=fU-u%2&AMsJ37XihADEtGBpgjeCa z;Yjl(u(tv{e#2hj7QCJ=>_&VC-#!W4lfm9O&P9~KKQv?DdpyMM(6l)kt{s}N8niW9 zQv>|D26zLi*5|#ZP`nxRH~u;nJa^)=&w%F#KJ8Cl?Ms|3X@*xb1>5H8GnF z=o`$$U{f)(glu;YfW?kiZ{{aBf+QA;%e`0c2CUJXa|>e zLH6Bw8iogEuAZmCFQOk$VP))g_BiW|VoDH z^dHA(Bf;+|bks03VpYDI2OQe<^b|OliN$*#jCBQs#}OB$i+;vH&h1yu)c zo#5A2Sh;@SvogP@qUViXFNN0TS8Ty&FMxk-_qVsfg#81mA;nd}r90>C(aj%&E1}zh zgl~Yti_qIE(1=rzXm^p@!yyfMT@*RH89jRgERBQOo^L3Jbbk&Vt26R!sQ)hVFa&P< z7`#?N9}b5HALs9C@L3vauLXbonV%$_!JozwI??pJWF1pyv z#4%CE>qIgEjzIIp$jGl~oe}WkTsWZ*oG^o{%18D&AD+6^1o7lZ`M|%pCK8SAe?2s82ZxWqq0ba{; z=J7bEWA5WbS6jIKB6|CIWMLQFSrN(bbVe)i^#QtlD4J1>P6mtl_-sD2dKoD<|9mL= zXgM-+7+-7?{?dc+w;4OHLZwu!O+_B|M0gvCcpocWA6jk(rpb5@zX0nzxbZN5r|`}! z)-)|xQFXz8Ga~Q|R`5?&8N0D9^Uxntkxp0g(G%8q{0nPi-l$QK`Dm6(JeMLxcOuVy zp>tX^=5zdaExZeT^ca-{Ya#75;n`7GDeF)DgkQ1~A0x?W3u7GR(IvIGe=Fp*FFJ4` z-1u)w77n1_6g*BR@VA3!=@#88s1}?8=4(j%NMfGt@F+?Vt8&$M8qdqq7Cj=bwG5-) zMXj@}&@?CTA#*C+fx88e2&_H4`3A=VHevmmmk4mPiB+}4{8&qFZy9i z>M_b;@&PW9<54l_N}ul5L9L*C@O)4>$QArAC=%R;^&0`M)AQGVy6W?C}LLw&+u>B0UY`soZff0@tnpbe^F-N(Vx zbD|lh1y5?Esp!Fx?0`QCR>PF%!E*iJ&7f!SUGOtq=syh(1V056gWcvpC5_;E?r`_SZA(w68sh{Z3zANk+zQW_-FjrUzNUkQYCLai24vT~@(6N3I zed5p3oBkI3*+vo7=RxzKNbM_7vn96cZusjt=J`pmJJ=q49UKqxB(fwH2NUQO-!jO_ z;{qN|FQhd+nLHsg=nvm)hIi|s-x?ulxxmG(WO>|{dL&GXM5aqUNLTv2)R4{w4a%aa z=fN9o;eiEEKYOGdjPH#g%Oo9L(sRMz)#*|HQP3plL9h1bf30V|^0*fK6@1U%AK-!f$XJeG9jo4AScaeRYMz9X{tTCfJ;Rn^ zudqRwCrlS+50l9~$+^idlIgVEhEIpPlWUS&lV2u3OMaL9I(aJjc$h!T5LOSzhV8@7;ok6Gv`}_DjsARh z649i`;J4Cf;2^jq$ONW01XH2xv7maQL?UP6nZ&z^GKpM?)Zp{rUF6`=U>TTi0hj(1 z$>~sh`Wn#sMReM^@Laep90I=Api#QQ|7)1>vG5X_E|qbgh1zA1)4BK%!-+l>CuaE= zTI~xca6Bb}cC7>sN+EG$fuS#)KQI^-R1FfraV*zJ{2BX|%teZ=*!M3~Js9o|zvD4G z93PGe`yy{0!=~Y^@OM629zKfBv%1z;EO0?QjS|?KPtjT9$uT@dZqVb<^94A2DcZDa zFgsYxcte^0%HZQ*B%D?@C>A^x97Vg?xBfc5_U-8LUCizE@G)enVE9M!O!A-P#^k!> ziR6#TS;_ri`^hj%SS#EFO@0k?vbODtCi|B&j5VRN@sS-V1+X4`b`C!cZ==iHiSTu7@JhU)jQDs9Bd`7$c)2<->pQi6V*l(Be7t>`lR7tcT~RKIL91tkw&|!JUw*zrgpEp_VA?w+WScrMWh*?u$8Fwr2Qzr(lIeI@mS(4y6v0beRymezV}Di zzZKY_dg#Y<;kQWC%y1!E>wjVKuyA-Lc`TU*{gyAhBfOR@2>yGA1H$d$mGB9)Ngrg) z4l8EpR3>liPUaKRzhEdjdrYuCSR2d_)}dDq1{Z>~iGAqu5y2uf&Kzt^7c|)(Uq<6jW znea9^IW_r1vME|KHTf!V^u=C(9X^B<-UxfJhq{n@CA08#Mw6#}Yj8H@6|BTSM%)z~ z4bBBw6PJVZ;QI!z&jba~rTyXT!9f+grjEoda&yApwcW2+=&9J_M&X;`vtagYGIMw$ zIRk0Fl-!s6H<>+5fe#uo_7eF1Qg}c1*{wO~oU$WX+k&-*82PNADGm+nIXp=2yv`fL^ zpb%sJ8stypO|*goOW`|j#-H}Y=@)pzw^592YxrDP6^of0ujoedF6KNrIUUJL7oJLH zXl{tQN=P0Uje8wi@D(GN_y=naG+b zz~eKlNH_fA^YDe0Klh8b{X=t>gjG7+X zz5(xbJas7svCf){l^Tooei**(1+ClR5zR)EY-091kfWo)>0mN?tQC6mI@s}a(mvKt zbMf(ypsjpXL~~V!)(?jFhH1hJNk>nFkE73@M`QmO4i1lpgIO`?5$3mn6Y zn+7HEL%(KDr-FwPUj+pd)vyouB~AyAL*ZZH?R)Xc>Y%m%hsG`iS1!c+`krx5gww+c zc$+1{?a4&=Q20r50baq9WXTM$e)OFWXeAA7MKDvS@(2HU~VAbil@Sykl&*Y~7$fsV_V zb7r_Ze|Ri;6t8F}<6q|Scd}7f2Dlc6D}gd6tEKsH*vUO9ljHv@c*Lt7PRZV!Z;(Uh6P zZ}|OW_y~Sd8N8HX_z1s;4OkaGkLUUnyBm}60^1Yi%+Bhj2DttRt#Jw8FKyyMaQu5v znvr)0WstCScnLLvqR7-|=&vH268aKPHi6Cf32c_Y0vE*Vx&wcEF|vF)Ii5M^32zB& z08azv`z_bGf z`Hr#6Y+!8~v4SC4w=;6RKgW zHlV|*z^y0nfZK-eqs4N9+sDIw$&1*EpW(N=pnHR`D9<}mmxe!tEr}KMLw7z%ETu zIS)aL9L3Au39SoZFY;lvo`=%g&~w|vyWxz_u~vDADipykk0EmOK(G@VS)H}aT;zHr zG~E|$4bmizW2?VMm)@V~2Is8~en=_A%pbyH&_|b5!w0Ds@TM=q-LGJgYQSfYhUppo z5!M+ylMS&JC7?tFEcXFMJ{?YGRrMZJHlwXB-p~vp(f8m{=3&-tke+t;%Aa{}XHW*uw_@-G`=izP_M|8VemkR&WVVx`>Z^=%ftlXVnA?+wl68=*L&;fu zc1LJm;{)Mz;(p`sywlfw#eW$(sy#=Cf)_65xb{}f7n9iMAu_-ArCp2#oBFT;)a-Jgbg@Wobx?{2IIaC!PN_}+drXY+N0-gf!^2g z#AdJuVlLss@Xf2KqO?C1`pvTxad$yyP#w6PfC9@W!`$l!rCI5e#W&fB?^>Pg04o>R zhq)HfjDC!NBm6iVh<%!XKUjs=U%~Y^vy!hK-pN&IfpZHnqcePOA(e6JL2auN_aip& z8M1aGlJf+5`bNr=cwbFe>s7%UnwK&WKAe>DU2q?q5d?OUY0Z9*6?Svu`)5u4ID9R2 zG8W>Y)EmjI;f3&a){_&#LXp(Z&}9E(1zrVjbq!H~PoUKdEOmXN%T|FO#i~9J)Zfg? z@hWT9l_}+d_Uvp74R&K$-bSkK1d0cs_FgpKaqQh9cfH`(vqZ4J!V50K-+6c-kKm23 zAX=7+XBzT%J`tt7Sjr4s^9tAefG%xEeV!4- z^_0SJ-;k7-82#&%V!@y2`*uN1bnkOP9^zbcsXsP^nq=l%zsJ5~TjcEtR$Q~g!pOjM z#!W{h`L?P3fr=`kXz>JH4Gt5l?m<@by?DVV$ZYOU4CQw8#qF#@-hl_LQ1CSL$Q2aj zoqK|3@B?2CnxzyC?g=`jOsGTO3;J0kym3hmZ*P~w z8@6)_C}Z#ldiD&ydj@hNh`kmX^lURXNn}58V`8QyN)_`bxj%a6~Ab$KS ztcM=Nqqmz!OKi;uEb?c>SJLvWd@1GGB?$R{B9Y`|>X+;m3`)rtJc4H#1OvgqDQrP` zyyUF#1Re5Nw+@CI?7RIn@Mi>)ne19rO({;)_WqP?#P|<0&pL2u@zh)KBnqeg5mt#} z+D*Yif<2xa;mPnU{Bt|I_REo;^<-;x#t(jkjFc0c-ztQbX$l^01MlpG<3k-t*@8#& zcS;#FQF*+3JJ5WF1dn3P;5jOHem4+s~0(?IdMNM}!WYdkZVi73#yl=^7K7qP`p;S0PU zE`uD6Y&S9O;AfFkD zmo$QN%i;0ZmF5T*X(6-EN5(;Iv~!C{H(h|<$5UFcCM}NN_e;ur<-`%4p_>=&3N}GO|(= zZQhW4%KR>{F29Io9L<`28_}OH`JI_@=iu|@V`W{87@<8Jh9EJY z!#(zc%}iE90W_60;8*dtH__hnaKt^>h7!QC00_FXu6+;Rs2s6`*P)4B7TOZyHotlo zo~Jbl3ejJvNa_QrYrw!E9;2`hpNH#+tnUr~1_w70)h-OahH(8h_7hf72eB0UhK1Q# zs!rUqD*k?NINl8HEv!-BL;^f@pObaeDg4p~tX`jiGX0>)BCJ<|U@_j%Afg9WZ%;)J z*1=BIptI5`V!JC?Pd|^1{3tx0d^%h}jQv?)I1FrOiCWa;+Rv##XkGd$%(^uZsvE3i zm-2ieIKk{6Cie9ktLjXgrc8q;@+FpG1=4a6N%#XvZG?qbgJ!748vIdqSH45XTxayL z*xmZr>lgT46b+dV-*gUZ*ezJjX{_sZ@pm;+d4+Yyny?frtqWl{VpUzyEwAGzUQ%CpbT@wLF#PrQ!TtC#X@a%v!Ini^6r=}VFEH{f zw($%2a7p+9-opFPCBa<>tV52*AfS{(ms=jM`G9syf$NSKjWZ`|yeO z^Y|IPJOFH)nKK;iQ5_9d9N#i67QHmub3HLUHP&9d3VW;yiGemV#3s<0Z}g9fb%W|Wzav83*g=f@7@W?p6BzvXxk)3BPJj+%zm zUV;sq&#vu8s5AmzJxx4sHkxe*daE(et^<38`ED`p@i<be_ureJ@ z`3v6e&&cmCV!rzrzc6&^0=y3e`&sp^V)eBd+3AFo^~Mg3hn^Q%`9DjX<}jYadaU`& zP^Bu``*ipZ{@!4G?E1uqJ|w1H8xMFfI}N+hZbi`TW3dLuvC#Jsv9MNv=bV;t=VNH} ztN7cQSVx>ju9BS2&k3zgl2LUAe^{wrfXC4kiWb3NdYD|2y;1Jt9OyI*oOi?fYm6WE zI6EEYX&QBZfM-#x&9$&NdwaLwjn#&ax`M;0?15ioC+BHw%d6O{{=hR0>)jfCnS!_5 zjMwS$v}U92a}t|6kN;N)>vkE-e;$6h0R75?&3DLeN#HGYBZl%Sv?zjh-Og;cF?V-a zK4<;DjTq>!_~B>50{H#e$x;~3^`AhKBzt$Iu<9>G6lsmdn!(5vn>Ft-_Ka$w?LWZgKS3<* zX?%(_jQv1rChXr`aPXsi{wSK>x>-}vCHpw*?D@t@j93qw(F59B38NvL=&6A>(e}ll zdKvbu>Q{HE=PFHOoVASAX^q?nSSZU|x?NQ3D{G$L#0h1@D6^ z|4O;e?;pv!I|dgoMV>xqw`eF3m|NSJ=wl%;VxNNR=#m9sWi7H}zuDz@!PZdThoAa8 z`8B)wWIfz8174brmG-n>Ib^IZTvMJLo!622Ewc6+V6FAYc({V z>zk*sOs(Obwpga#Sm)K?Y%ME`E6nL8wAJ0*>p?VEQPwfm2Ppxsyoq(Prcqz`do}uI z7x{c=@RBkHH-KjcKK)m~*AZST2h}o?!(m^Qo!osD4>PH(?D8gdOD|m%1B8-fIXXl}vHzP@x z@D=_+1MP*sen7T+JxmVEsU=D|F`35*%2qNSkQ}=0G4BihPfb`1Wfo zleI(az>x+{u}eWV9@Yte2n;=oU!!-~0KOOsrRIYVD}0<`_5TO(Y~itpPt*z(p>TF^ zn}#e~&xn1`D4wD-53e>_r#O%N__9UO#J8h?3PGvT$WuKqX3c|nQI3{9bgp3y3NwBg zxTHF~@*el^5#`Mcf(}~FMewRxZxg(-hn3D={-1;G>d4h~z-2Zpk`!7AeHKEY;dn~z z!G&2@_2Arw(5N!jyEa}!<%)-#9E7h^m3fRXQce#1KxiBNt3Mawdi5d0oR+bn|mBj5(t;cvntP09LtoksvLxSo8wa=Nru%tY@nFng&dknQ zSs^!oG$i-*KwEC_goMGhXd9+(`AbJL_c?0gP$R{13mbjV6%HGQDo`O${MCQWp^ptrq zsAKK>SKtCqXVidm>fu+I?br-G+Y&jejr7#OdX+^ZJq2HxM`*_xfCw(!gQaH%zHtv1pVKdvwD^@K;7aYbviVhy;xEY|c{ zIK{qG>4`|i{i4kHSBC79X!k;`fOQG903CV#K3vittc{0LtR1r+oQfl%vL{h?Xnr?* z{3w(t2~D0y@0Dd7dy!km!!wTdFn$i$OM#by@Yda6Hy_{23bpOhV>cIjz+8s||7Pv> zE7aSMHdb?Nh&1auWX=8p*1gz)^m`)xY-AJdqh!yY0{Dn>t*6AEWSo+W_%ynuWW*!( zyL^~W3o`b-TxXTpyNHY#6|j@kS@3)aI>i;J7s4}2kbMTm^Lr9&xCv+Kh} z8?Kd8LQd^u=Y9_{jx&7)nWzmHG(nR!MWS0G+by7xobfhv&t)ZV$Wv@wgLs>}7WcKA@eK0?v#5 z0ftUvQ}!XP+kkE-6mrMFv-i88i2b0BMACi<`Ll;fCgMHzq_QeW9%y5K(t=Q@DD-&* zYD^$6aQ8PsxdYOCK73?==cbrjnz!!Ge+Ry8~P{2NSXBg2l z*MD%`8JHFCzm zLu0Yz)>oL0RW!GMBfPy6xQ^f(>i61BDIIn;JGi(Nj6ED->5^a8`$koxdW_Q_aT+&**(za9=OLE=1((5HAZsPSshr4!&7p$+*Jvge-iqZ zLh?(1<0tuDh?zXVx9xUkuc4cebva6&It&(KS>FU#ZG@W_qlK3sYoGGkT1G3O<32vy z4fXzj2M$5wv%Ee8orTWFP0ZA;YPZ2vo^r^-voIriM(80%w=> z$gG_lwID)gH!&+j$+wxIMjD=Jf%YmCx{AiLe*HFN%~SRId*1=qA-tN4e4d`~c=9nV z&+A+pciywtqdl7b;wd!t`^y8y9)Z&zVD!SkoeP-rLwRc{XCTgcjJwGTo-4VVduHTa zy_U3*MA$3HeicXH=aXp4!*Klhi2H@&Pc*>E2unxMr1plo5>+nB0w>rjC>NNp17lXG zV3)aA<6dCx6=Hv{M&~%yNBMy4e#Z1vPc||@&%gzjk)-|1_B?a@3s27OgI9RpYP;9C z!(V)MDU!cG7}t)2_P)CawDxwhx}~l@qO@+4QpxU+ZD%|u(& zj@GgI4J~2?7PY=LGwnun3B8$xaqSW59?n(%PY<5X16O9gosLh`lIpE{fGRKW*yY)J z61PS;&c@aD-?PsDxd^NFpJnSZ;#Di8iK}yrWQ}?20^6zF>h7n&*gmwvF1Tzb*xp5i z#}0~ijngx-!=8O6?c|o3zxJQG1$gWZC!TTxjX1q8()D&JErxE_6LBsX@Qyt3Z0|ei zVUJRAVa4pY&!E-ETu*v>;EtR*#*$b>-K>>&8t7)BdcH99r6H> z#P44Oa(fhJ00wy^D=;~tw&o7*e_B&~L9l&MsnVnwk1$d6% z7a3VwV&_JCR-R_wu3UZxiUVA88A$Y#?Yn88)U@0w19Q8HzsjsQ&~~NgUAv@Zgevy; zyPem$;Eucat39@JpL`v6AGM36T`BFqX_rkqui9%!+DkG{vE-?SNJM9T@@@r)6 zrI+#)_i@#S(v!XknY;{L?AUabzgB>=lV=9Tu_Kh#!tB*4KI{^yrMD+QIv#Afa|h>V zpF(BanZ|uUuW(l@{{Iag>=&!Y68ElE3wrepI4gvw?CPsL+O^dA7%fn;?c8g%Hz9Jg zjLb75uazzPsHTgq_8T{Ijd##u*n{1>Iy<@8n&TH3={nFTM+u;o0}1$o0qX!MHC}rS zxa@PQhk2cAV*G|+;ubI~JxQwysJ65L1sA?E3Hj3fWr zt5co`B1mI<5#!+o?*&Mnl5XGCzj<1X`d|JR$5uFWp6U#BlNhkaY)pSUd)hDWzxNz9 ze(ftqjpuDIS2brM8cCenV^s6JFA>UX4O0LJy(6`x|>v-7dM2)huc;i1*^3cJht9q;7` z&O`k2FA)4kVgGt>@v0n~DersU(Ro;5Ddt!?@4u^j9pBmW>j8HpWsFzym)DEQ7&kFJ zwI*_x8c#hfp2Vk*7-QO7@#3f22_JsT`}iX+9o=`Ffpc{zrdbu}^3sy0_mEnwT2WBGy1c z8e>cdVi<+pE4@cN8^3L*SRskmalY?s?-}D?48&syvlNx4>R;)kbSvLNrfs|e?D11w z5@TE$SHk?RbMrsHBVQ=h(npTG#ubj~XfY?bJ`=Yw-ebD^sdMzY_#r*yL!lO{>K$qE zAGLh%zq>jEB~siZBMz4TV#>>hUMbbRN|<77#kdfQ&N9|(F=u%7b>0!j^1ZrD&267# z@8$R95$PGzQfR!Nqd9g=Rbg;31Fb|7$E~kcjwDSYo`S2ajIkBbE}mK+7D< zqmmkbDkn*e41CvlDADQy<;XGY94>anmoUc~Mhzk5<;Zvra#HM{_`kBI6;&I>5X+bG zC*E1f5i;SGGD@7fUY+3xekXp{Po23k5^F3e5PJpx|2xh$_FrPUIF@&b=^zYBg_7>P z`x7XKgP$$ROi#C)Qk;Vk@aOd)p(V#>xERcytu$8(9{ig6sz zGrrSJ+{L@aJm$CJpBO)4Or79NwGUDzwiw!S=f3tK*2R?XX#>2@_pdOH@QXcv ztWfLBy@S^}qxiRD$}O=?)jzl9`*oyA?vR)DbzP0fal#|V|HqdxzT_1<#5-4cLoA4S zS3J@n)@WK!?=QV#*%9Y*joMD1Db|JY2=bw$Dfh94jWu91^q8E;PVQ1(w?c2 zW2^7`*Q59K+VmRbL7!S9@gUT~E{4@a(pPSh+vRCBfs!Fb)t;{Z;ybzyi|xiu(Y?j4 z_ZQySbN8FlQ7q`+IkKE5eVmiNt5(5LT}!xn_a0(Mth@fuzKWk1Yih4lz9;Oiam0|2 zIX5-97?I+!#?$IMmU9vla)=sNS#dq#T+&5zjIk{5IBTh^ZqUADj(!W>bzsbZom7(S zh8BNQNsn2C{zxYR-^FGerCm%YgJ%VH1Ecf_Ih(GH3yDP$MEO#GF8H~8)i{$>OU{q{@jZd%<; zd^)2H>^NOxN9|%X-c_(C<&@Kq)xRe@{fcM0Xk8Rros}GKV=dQNvAZVwlaVtJa$?dT-MIPiB}a zI$4pK>@;~`KUvDD#L4Yrp9yHsf{hEzH-)HGRz6oJsaG>G>J|3a5A%Os=8=_a57Fx* z1*~P|TT)nw6sN{_B^zmEWm zam3rf?@7Ly1q|Ltyu@Dh`Iy@&I;k6XuomTcvfocI(*2Be3(u?(Cp-YP|DuD7(UQl& zKnBLKFNqTDnp&!h$y|)Cen=q-6Kj~;;l&f20XR>zD?i`)4QyRQwr_(Aj6&TCtmm24 zZ@~3n)NxygtXRL1YiFIQ!BDtcZqX7&$3(KKKo~r3Ry3{G^3dXxEIbm#%^2z zaJUG}j3I8gF?A|1^nxmj*;DngJBbLq`nv&7138cin8-i&iRJE-2fgWAeF8RIhYb7se^ zQHxXNtk#m3X+^HBKh;YYP_g+qwL>MSbgj(KQ>kmcle72oSyBGJ51%|vAiZK(s=UzvyjvK z$tev;eGdN~L88v0+T&O9=kIWOXg>AMC88;*JEG#zs?-2#)T>5KB9XARP(%6-x#gdb zk{G$zj0J1YnV`|=bV;y|exa^yW%h>LJgUQ+@_lmlXej>}*gPF_i>aHxE0@jQi$3(^ zH}5ff75nG8q0-Fi3HVSV+DHXKUCxKTN0t1=V9pEx$)QwqICW1{Ir@xqoMod|s5ST& zDd>xyyp8?ZMJ3FAaQZ^(>iXmkfOS(X_kDH}wdvcab)HTgYuVh}RPvq#Cu&h)@C3XW zj)pvoZEKyH43fd+*rqsIi1sz$G|1G{FzV0CaZ+_4=Mz($3a-hCiK{sKzbUnyGhSAA z-J8#IG);|!;y+QPdKYyJ!#D-eDEA<>_scn@I+U*z7Wm4 zj!dUFn*76k@!8xUpv zJ9@vu-i{>?EPllx@H&2Hp0#sJv$Hs{_Y{5p!TE@fsWG3z*^nvJ@!m$2katXXVr}?= z@!rfTcQJK6kCEkFm70vaUrT*^Mevp$qB9!&TJXx8UnPYLlu`eP4l^k0#jI z0`ic}so7YUdl}Bw%H5wWnp*{uLK)6Z?nxR_Q{9FQ!TZ#?S40-8QakoKQaP8*#+S%j zHs{T2-LWqpqfM)+-QLfsq#>Nc_?q*2M{-WIHM1TQb?3ZJJI(`u2Oph_9lC{Cg9wS` zypC%6K}dKR^lBCyUrqJxwVd61jq{QTCm&9x^1n%LbN0V%8!SQx?9?bUZaAyeF=Vgr zC68SaY@HRHN_;5FrC#SGayQOBe9!s!&p8YIEoV1JMi){^_z?epCHpc9`5MF-psk#9 zI5qb=JYK_ji*}rOxCAMym7ACyNfq$RoIB{7o5pY57}+UU+6GwMlOylXY#nun)`O#~ zIFt1q(p8-^&+l^*cs2-Ahrt&Z8tqMOgWF@N25S-Jup~F9<}kYvR6d-K^jXLD{jO92ed_J1~IX2>-+j= z)bHS^Q~Wfj6;H&oISbtZgpxF8Qb(Ze*}7Z{ZZjXigfp=d{yHpi(T! zcFjEvw!jkpzY2oF$(%AeJ^Oj`JeKSvPPjY;e!^z_xC=PlDmMGa(Z;9_7*3No+r0rS zjv3MPcsplsTf`ILZm0NVEX&25fE&ZA@CsBe&B@P~IKlIHwj8|;=S=?(@bTO1FwUe_ z<0Q=>&>L>fu1HRU0&6+>)d@*&Pt{ZpR_#Ypw?->jD_-M-Y5nLjFq_ixOJFGNi3Z2F z#sk2C`HQpem&Xq=)AOTg$ox&LlB1{^-wYyW)EB-JnDajYr1WD8p&; zkD}V~JWjZ+0V8DwbySs8tb{?ns`zGB$ z18I<)%6W_vIBEVg)nh&JbjqTggE&{v7;3&8oyVE+1yPrH8ptD$gI(1(o)sMl4#>)= zGjdgq@g1hxV+%640ZaI5wg$LaeIUQe*GfGc^l{J+!%Y)+^!PGfBej}aq1uY7g>GY1O=g3_Kaj~a(Z%HHqQMGeo!5}j)~dLx!YO0Z;dwaeP` zT3?hJpz`dLszA4y*{hTLldj2C$!hHIjAU}Q0+cDp-hwV3CugA5Ip}!@&R`d$%ExQt z;h+Kh8ehy`A922mld`O+A93z>F}AvUc0=-Qb{d}Btn6NF*gQPz^2}}0qqFjJD*`@G#b`S= zIL7z;CR>L!>RC?hRl;|A3(Kkq^^XqXlRN{Oz@?yAydJfR??CIfU;`fEgv)o)zj%z?NRvB{Q)$aUPxw4J zKRb^za^Gcd=d|+WshPQ3@jq^7U$PS{g{t7hT$_BInVbBS{SIWe^YH2)!na(V>P$;D z;{$jFBjZ1!#;hJ^#y#TwQP22AdVG;ni*utWx{rBH!P83Pc{GM6OOiWTH=5y#-AN_y zAa>~=VV7UeH32E*hwN!d<>c0+Uot7XBbk@1;^ft9?1)-`YV%msK3)}F2|n3X;J);U z-;Q64cgLgSBhqihlR=Cq!)RJ?*7%L=%4Ab^T5=#$k+ZP(f|&JN_D7`fQue^rIH&O# zR(c3HFawianVFg2GHXF2teBjfy$e6BLT+Gc0XR{=M?K=%e0>M{-Nd+g`qFfrbmjD+ z_=WWISdvpXW$}0F9WWmjv#yOx(#eUOHM}D`HOXe(d(=%$%q_=*iE@3BiM`2(NuSK| znJbdNlarG@nFq5cvu=FE39=XPV_$?rSH~;kCGqsQARdXvg7k`bL3}IL zc}A)MXnwDAf^&0nZL*fr`1P^Tld}~$ozsRB4O6L9-cieRpNh#ycqcQ@w} zS0!gA#j#WabM5im=7C3g6SJC*N7Ob|BeyQO9&EoGGPMe}WG+d@WGaGl@^Nw@EA0>2 z^HR@(R#GbdB3gz7{2sj>{~N!U9-L0%ap|?`&%tsz3?I2~EjJYpIL;N%K9c-`*D#p* zEY6LhhHeDAt;Hc_EXT9Y9+rHJeX;ORh*OQ1=`qK$^N7mep+ds>INE3*LX!d zCmtVnNk5bxke-&FmEN1aEB#3PWwealNN-lkE3-p$dy`4{evP4fWhD0m_Am{jd)Pk} zk2dFeW?u#a>C)ur%#MOg=7!{O!Q9LlAfEM2zQ$W>&pDRmsXwCe@fcRnh4DM-73s<8 z-sz4-UMbQ(or$lA$3=}&W3s1$iq}5-R8k%p{+ZL*S5Sj`0jRB~MBj39_`;}s>JyNc zW+v^D6$LvB+9Xe8l7gCGmYkW~lnlu}NUh`%NW)b8p8LUETot!X|B-$*Ju&@Ok#mb& z%dCz{cZ4BsTQ#Y`j**mCK?AxmH6SO7SC6D>re&r|@?qxK z%(~3oNXO~P_GC+TJm=^uqD}XsNlU2KDJ2bA_LQhk@sTpb*Yy4JjbDt ztN4UxiZj`-sOzju-S_EOn3f>NaB2c=`G6VKLu3ER{G9nO^GBw3a#7ME8J7&pF3z@P z7ub%|%lJ27M;1@NmwqmN0rGuOkqPOMXzyk5;M8yIi0bF=1V858>~Q>=G;2m3A`(xs z{`6!o1uh1`nC95v4Pejxn+#2kO>R#1W*$gxNp4G~CTUijlc`7^1fs$|aBBv~SEN5l zKa+kqJvaSh`i1oC@mg%q+|>817v*wif^k)pbEYYL{yD^DN>Il-kDBpku!k!+iTemA zKDVK-t*}J*f@jzokK{oxqW;21_yHgDj@*G%z387*4Sbrf?eI}Gc2N<1rW znZ7vvemp;JlKu^3sm| zee3`_viE3(ZJkfl;WDCFbLit%mPZUo0_9Qc+!k^h^RTVt@(u7-M-fR1=K z_M-@U*uJc{CE@AW>>G~2qArg2$DhPIk@Obv?x-KAmPO+_@ix$I?u!0o&+2_SmGFp; zW3M_SyB7O0FF7r_ELjXXS;W5Waxio8R8qCJo=t=}yRA2D0S~9PjK@94KmhQmgKZFn8 zE`QGY9M;Dx(3q{!$@DNiewFq7&UkBl3ljf2t8O)L*3My1kzl7wv92#9s`NKIpqtU) zUCA_%)wU)(l5$Y$TGrk2pbuO{FQ4X?zfTL`5ZWDg{3L7-fpR0UX)^KG~7@dc#w7 zknfMtrRHevF!mTb@Kk<*Lp$*g+QFArU_RAE+Uub~-(^eTQFkY5cO(65;og8@cm$*H z^HzbN)i^#6c{?}0H;<<}BYrgQ5^n|Ht0`;wcw(hlA}kYgCqTJL_~_Na&6^CeB>sgJssz@1 z68(sbcm}(pqf-lrKy}G|0d3A;kGcTsmdX|+m5G8>&x*BJo|WrTeB}-FbRH*edJ%z{ ziEMY^RBIDXYCi_@!n&v>D{VXaxf!ed9QM2eSe~nhh%^SBV=7)(TeNjDJF;y^_Z?Wz zm{}YKJu(H&{C7C1#4h$65D@MsK2e^Ni&tR>pJYZ65u@)@8$luxIkGgA3i2=%&+Z|( zbX{B~7AdtXXX%F!X}*EX#Y8@v&Jk@u8bmuzgN3>UK7GUYB}ia3dU_JH;q^#edA#r& zhtZ!LhYvWT(t-%^$3(HJ z5LPXb-{5_)Qb7c`HkN9*V>B5WhEuT6+g48>+Ihkm!BpT|JMzgdBPV@CVnR#6b0 zZ^oB>o=B3Bt6J#meemgfVr>J704K=A7!x@x(tSPsHe~nv5>d-a#IPnp zf%fD>J|@aroONm}bZUpMum_aSMae?YRrk_cJuoP{5PA3!z0MKSXvNcyV83J5f;)%- zp8^W=z4$3<=5Z@M4MblDqgChQ-F=Dg+@JXHD$a$qA`X85y*-*8{!2tB+OV(x7tGq% z(5fH6E3OBASxsKQ4$ z-u`ZSTgzH93R&OEp72z3>JwzDac&6`b`^1_{n+ru$(-a%GJNrZIs6GW3hu9FOO$zWh zdLUU}gT~McPVGQ{<0hLbtNv5|~o8)C!var!o9 zZ#DwmI*wSyt?^TQO^e?{67RsHJrRt_+llP1K{t-X#y-G$zJvAPDORE*@fMaP-@&gB zk`3@}Z&Du{cpM{Hi54fUwx_Uzf0&*1kHi*_AbX%cU7BdbM38S!LHaHP-T4#xdmcUR z!P?P@-BZ`7ZuB~NhWgw9b|-T?GWQ;|IyHL;yR<5=SAT=$xIW2Z+w14CpWg(D;UN2b zF}3>;Ihsw*s16a}m+{(SVwW$#of2S(_lhU8+7BlN^diz&F|HdgWzTaa``sC2HU7l| z8A|qJH$FpO;yfj>eT(4N9?%~NaSWL=~+nRc+f~MVg1<4p6qvM zcreM(SBy10HjgX#Ae>uGysHhib0(3EfQzUe*>Jv-gqyfiJe3y zXem-WjC`Hv0z_t?No4m$rnQoh2oZgr|GrcT+kSOUQvQVEBV_yLR-^OGn zHn1F2Y(xb36rx<$a$fKoVoVE}!Fgn1E+-E%9nY)}D{?E=1} zSF^8wB)Nlq@?CiCr()r_>xVVBD0df}7gt6CXCwJHu(AvXSN?P?R#D=0JMnie2NSSW zR5rB{Y`xpFpCnPz1Ap^M=Gh{FI!Pvd;~?9>yi(Nm&! zag-i_M}0PPJ1Xu6e$>%e$1hl4PlT&e$R$i+CHRir_hI%kHHoJdWcndB4U;Je*p!#i#7I_!z^%mr?Xk40mA$|ra zt8w%JUiDApCT0>J{Rj-LzloJzM0WCB^x(|wvv9CJBfpfmTv0rM3&{SSPXwbO7U&%! zPip9;Ah^xN7cLH#=@;zxHzXftR}h6y;a@$3J}-_QWY>CG{Cu>8Si>#Ri=4k}!@l%J z_N23r;F$8AUU+n%E983MA+*hQrq|8Mq!w{9=Va<6zRz8c$6SEd_a8B% zjYKG4#ZSEfucUYKXXbhI@dI$vrx3B8Mb*PtA~82Wr77g9Pb0(L4&UM}*7QF3fd3&s zkFYnL$WCcNY9hBjd7Q5z2bq<@u^)%?*r&~Gra$c zvoCTNz?EdTp3j}hI(Gzq&cnp#y;J-|@DH0}eYsaGJDa;HCb84{DS3+w(bnAWM10qP zHn$?W9u8L`E>jNeubpZS7E%e;uiOf4cx9_3aigVC2INvGto zhs)dBCQb9Q91I#WE;JTo%$YUb1AMqKiV(apJYMHtek7Fc~^ay*Yms1}^N&H;;m?8~|oKs|8x&wXpNj;K% zjp*6T%#Q`53N{zKSnxu@`>4e05Wal7<|>D}?K@#eT~+$nkjYgda~oca>uZ;Lm$FE0{DY#4Fj~%+3|bmP-E0w9R}{u&&^Xf^=qQ=C7m<8IC_wj}v>Uj~7*wxY#}H8tUdI zU|*jio-m%>!q;fx;~;r0&232?kEDGO4PgKD8=q*1m3|M8@-m`a6No{aiC?oFJ)Dwy zm^EopR5?BnpPU|tkI^VD9SzL&Cfasn(lm2r!Mg=X!5am~WM(FRW?#+q!{0b2Ud9gX zZ6Y~uL=TaP9zndT6|2f?iBft37QPNS!qZZ7qH3VicT68jS4uz2y)GY+_gqO;QVHTY zSAu2SC)h17RcRo=}GB%>Cx%2*wklI<#G+Ot&^)Wy$inj?}CEm1s#d~UYXsQ z+ewCFb#x7T>o>r!>=->vMN&`pP4{MhC;QSYX_8by-xp<{&2{09g7b*hUV$dB$Fr^h zXJ5h&e?}F;b~19s@uxcyF`G(UzTwTN=0eVi|+^RV=4QYYgl`Zz%Lqzx7CiF;I>pt zR{N)j3jBkmIErjZKX!d*P`fh@3;QThr#|eg)=_73AzAlP@ki`BrZ9@f{&hlH!{H+n#b;GG4YA&?7I&WwKxI4 z>lNbA%UJnlAQ8jy%pb)gc#zD{)p!K=Q9I-9j@|L#24c@f;N|QkYg3Os)^AwdC$WR) zV*wvc-AHvqIWj6YWp2$JlboBhA!b#c^`R;i46}&x_9O~c5zqGp>I!~=LN^m@O|Y8p zv-ZD5)_4jlPX)ZqRpiYMQcpOXb+|J~u+K)d*mG~eZ#oOf_>}!XCsv+|*%J=~5&Kql zexH)F8qQeS!@sK7_sMX3H;DGHB+n7gDh4uiP4)*jP$jT9+m{NzE6HFjBG0#g{rgfX z%x=U-JdS$5uc+5}lT7!$*#UULSFvtx&h8^`-jUjiw&WSFN1ED0lV(()^yZWE*spmL z;3o1p-{7ZI;EDU-II%sl8_%&a&tuG`i5yNL8u%yoRYXKtrW2`LLj<^hJ?%#JEJN5I zok!iodwe~Bk3N$9Tu*8fE~f_S8f0cX6>HO|R``$Ab3bM3$&m*5dxfmJ^V z3U{S8=}Kt(50RfS?7+LTW}OHhYf~?A7dyr8s7f2d?*0zq7Ij%iL?kXkPVH-=ER}K% zS+93xpWud^$Mf>}DEZjuk&CCn`FoVC+YZLt0MC3ebzp757Z^`X$a;3wYuL-Jf;xAy zllSIFZ>Vk$Ce7`P@EUrY%TD%dvf}^Xg&jwns5?8m>Wpjym0Ne?<4@wr(o~ytV0B$a z6nqae{1n+(%08@UZVbERD%m+iZjQ{Z#)EE4gy3xCWCfYzag4kaYs-E3YqPOY1Br3m z1gCo7cXfg?C*fb*!mIP4(;RH_dh*7H829>A4XVQ)ppxf3A`rcx+(SI^F}wT4aIhxQ z<1LF%)8=R}I8GqG^BNYsQtlAcISYR`Vk8lJCGV$rgM7ioRJ-&d$|By}lX%64%yq-D zos3QtjH8L%jAS>zI+aGRQ~1FDVWa0$FE^cBb%Kvui44Osc38JDmocCn?Z+!Ci3Ex2 z`7}|P|DfFnvb#S*nOBG&oe8pE78{evmcWB43a)Q)^k@rFpSi>?-Xh99o&9M&EbfU! zc*WRUgY0yrUhFph{{pQBAtwXa?_Pn&DDvzgp4p1*mtlY3n7+g`dXe2lNxaeuXkhi| z5Ayt&t?=eP#`ZD)5km>RQ_h=zU5e)4*DnZ1a}zrdKb zP~YWVxj(f{R&FQw?A3^ptiyL)h+I8|M!(7De?c1))|@Q)<-Ty#8yi>CZ!!2ci`c=V zpcbA3Z~MdBKG>0sSkCT5(B5Uo@dy6PNN(h68a+)6OHIC>8pC(V1>Arx_hu~5Fe>l6 z+sGd31h^_f^50OZ7SDB|GVoDGI26x#AyuEXun4`;mAjFsvG}6Bpx34NZ+(&V$N0L1 znU4ZRtsnGy67Bz%v2Fpau{AV1h^6j`cV3@rz|zr6P`v|n=EbnRk26pNP1O#%@Wyq0|I? z&zf0{J;#b8t9I zJD1^IenbEFRyePbRn~(XJM7@ItKPL->i`a?V}^z7rTvaq6T+_*jiqF5v$* zqPkzQ3O&iLc{=f(d1Q+!!P}b{-Fw)lkKkD;R>t*=~uM7+Kq zk-dJzh(=>?Hlcwvh%67`2EkIqlgko;YD3QFW$JSNB&To>yYXF|D5#I`^)}p?2*n3N z;mt_*Xl!~zs_`n4t2~LQb8jSWIvUuVSjF2|(rQ?UzU+?Lk)!z=dvzbOC&FT9w7)HD z)nknISMtRDqA!WSd`pILI+nE!-e5O&?VZVaOvl4|Jo%K}?3LMhtX`+E+J6RZIv}@$ zXm2tc8GzpRz$*RCdN+l&=VGL>1Qoaq8Bq^bpl_&5?+%wg%OmowrV3^cUc9)8;nv*t z*a%O||AnqrCDwTlYtd4?g4*mQXOP!l$-cfmzHD9go|SU1aXZ41)Gy7&_uQG(&c4KM z>|(f(!2)=bvFKR0VpAp|AI~wibKu|-r2iZ~OZ`IL(zRlYj}tXojKp`!uNt$k2Hw^? zo1gR0j3?mdDa5F@VR_%p+p=TP(3kO4y5Y%u#qPCOypu}J6QZ}stPJC5+MDE1HYdyZ z+MFB%H-96$HIi}VSif#X+pML2kX7nYsP4_WM^nB2I5M{lpKUajWI8*OipatT@UI4% zFbGb+jaB~&nOeb)>vQbvO;EjSUfw;2Q438Tfaa_r{&N;}gg7kQaC?%ExVdBrF~Ht3)m#ZwNW~>zMmy>f*Z+J7|@!@)jAX4t#IMnwG*c zyvshl87tI(*xcqso!^5BtywGX#$vt-t)9rQcrV~bJjaUk89L{hJQV2@7r8ubwTBbW zqKP%p!uQ#MrrCMUr;_ae7V#@A_*C*=pCyCvHZLL4wk|mf>scQgv;g@!o>8?Ya^DkM zb0yYhC=zi4vA{~KcSEU8{f9N_GwfYye61;*$G8~X_!6sl0IB&2YP^FNFboO~WZk?L z+j<7_wHAB38H;x~e^2EWYO)@}w>HvS3Hcg@?Ha;5-8uI;@yvC}7~+0+QDgQ~(gjW) zONRRgR+g^F#U*f0q^Q&JF)k*ea4z~?gSgscB&r?JkP=vlCS)sK!mFqQ#U4S@=cD~o zkjFvn>;23ntbZ?JVMbFG-5R;@EXU7iWo>-C#i<5(TT95mG$E?Em%T-;=n+oL{fA^VwoxNE3c5W)wkS)^e+%)|m+@FnhEDe|-=~q? z=it;+WF_;8HuYxh13{U&Su2(K4w&#sbro-43zuPcy9u0$~5Yb zmnB1z^O7#q7fd1J@CaV(FmlwVI{O6{T*S;fu?ml1b#H2FK>dIXE1^bnU4s&1M$#0ArBF2tvG}wSzl&QA9NLa-|bOJ z;tWOOpV*g0(fzD_=TI%wJo^SQoNbvk?3m9$;<{6h`5ansH>YS))Y>m4%03p^>4@xf zL;B9;XDfQx&Klnn-@6Votjpf*8OBy0eH;n3Uxj`_+Qgq~3iZ0+J6^+RuY|Upu(~Zc z$8i!mav!7H%D(utd_43KcHZ~0<1WVvbv${m22_V-iA^_3N)csg0bff|mDGtU%&L6y z3*=g)(WzJfJ-XpY^n-Bb3}o&g`=|$yI&Uj#&YFG=u~PG;XE44Q*w_{9$X;cAzm(b3 z#7>J5Q~`goE`MJK51v7KKVa_Swr?W#R+-hjG5;G9!T%GwpTN%dGGY!lXG;?&9#2kU z474kX59`gU?4RMsXnggTS$ifyzaenvR`j7i6u1JpK7+M%Jv#b0G&~V1wxqQe@cb*F zqod*PhkW)vXl9+yMl9wER@f?dIla)ZFIc@+;%onabk0Fn#<602!CL!1YuW<-k731a zL1g+RB7Vf8u)?YAQv9Li-1*iOf4dfPw2La_=lH~j*wl}a!N;N8guK>0&*vXtgq5-3 zFJMPnb2_0Ub)7aJ_(~fY;{rzZ z607V$xN;-U4`=jKp~xttv?1-^hK(ObJGiR|GTXJk2A7s;fMR0JK4v43Xb_sw0u#pG`kav7w(LA1kSbT8?d*h(12VYH=eRa}DrR@>l5ZFf#7l*oj@j zzHc7GeySk3;)!MmEHjeGA>tOL-JaI0AVc%ed!5yMOpv z3%72-e|;H$Yz}$C0&XleY$lOI@4QVK161O6>29u?mtg z5=mYFhqv;z1i2ZCHPvPr+9iLZqb@l`Ti%wYO`GH&3Z9(9np*DOkKR zXm3CP{*MuML4rpz3Nw^?f8&ws>!4Ok_B(o#XQNwp!|~^krvbE3gA-4WV_y%z+h?es zyqj9Xg?J$6!?CTLH@zK=pN6h{g0$R^)OSJVkHQn$jc2}^9R6H<^taHc@k9_uvlARc zbY})Tkl*l<>mv`H@dyS$nH%%oXHTTJBb+~uy<~Gn)ReErSd!Z4cN1)~Imhl$;wq@w zi_x716^}(uL}m2p+VHPPK1TB@QJV9xkIh(LkH@x+fL1>fb3KvI-Ne@o*qAQ)=*%WK zI3L8%HyPJQNZ}mTk@@_eLlwewEY&B(;FjSJ7r|F?v{xc?LmBZ^c`0p$4&6?fahJ4&vq2W=3roz1XFlc(xUMJ(>uih;OB_6t$Vj zsd&(5BV|{@k3Nj~GJ5U?ZBAgGWzmY|&~zyA>ej>w%HT`a!3tdubw9(GDox)aXP*lH zThUrsq{iEqL>Ule!}IYX!HIqPIox@RdjA*k%4ajqHN0K~sc8pwy3&6)W_dC5ZbQ!j zy|@l^s7nv6prvTgr?Q4Mg8sFkrrIMGa#en>&T9>LvL5dq!>Fyest>P3+%3l*FOB69 zWklq|t=RQVtd8FB`5kgS7YUim*Ed9|zGru^op?r?Pqu>N7bCB|puHE1J}uBgI4K#%3b zcK>EyRfds@zkL>#@-k$T8t?qh$|!mdsL~1RS(n|Ln3`J|^+I---@;>YkiW+-6CHRR zyccnFC;vqY6e(6rAdwctW)w5B0#Pa4FmzOu5q^a`G2g`|5kJrWqMz>L=bzBwZ@zEE zV-RC_15zpF#KjbIMqkw%Lymzq$3pvtNR{>?1BFE;Udz*)_`Vs7x{Y=`pI^Xd)ATPg zO?gIBhR;;b^Q}5k&;agL;j0#H$>qkh+Zw9L?TS1rqUN8pDcy)2edKqB1+-acy3W^q3vjv|JellAVR5#(&f;G3d~frM^RwJpb>dc zoE7m*L_e;~EJfsP$vi7S)g08)Mktpbp(P98t?0HTpq04Wt&t>dF2ripre#s^e`oAV zczO={I2$`Mi|?Oe0~SGzHPCAtl*;h=N_<{iV5>P#L^h9yDh;4ZX*6Rut#~HfTU~yD zKC7T|0VfuYVs>KFpMnf`Mw(AUN?SAHM(|3k+%P*MC}O3QVosta*q(T%@_!pG{mHCF zsVog8Jku9YU__h|KU;oU103;sc}7`@nO4j{B`S!Ry*qejJA4x}Rzyi9Q`AyFE8^{L ztcVyM;*g5SA^MTgG$ql`ir)Dj@?gtV&?Kd`I=@$@7m*r86pHc~79#nGsUjwfHnJpb z1$?W3%qNb9NL=Dj>1&DaAui~iyzU&}FQp_+|F)Cx&R@LuClaQ9Zek@`m)E1;8Iwqz z%7Pl1&c~sSV1#Ob7OfhTuf^ZeRJ_`N{3!xesXP^{@P0MsP?cFoGjVc{Vs15=nV(nV zD?$$uj}GQ(rACV*FP_N3y!;jA84*&wG0QQF+$?gqsLI=UQZ$=@8YkkI_&K7G20UL8 zo0Q?=P)WRI(OpEU`jf9M%uzktN^7nH>b+bMt)~p5ECrt{^Iue9?RR9r^n(Z3LlOYC9iqdv-Wk(Wi!Nby^7yux5v z#R(UOWe;3F%uGdY(%vf5|K?>{G;L|K4gN@15uincQF^75R8qP`brShUFGIRX7ZJeJ z3$b`a?iTCK=l1b=k$^Aj17Mb`F= zS|xrHF{&2*$<@ltSb5iy?gSVPn4vewX{^3PabAGb)d3uXH=jW8}fM)5fHsUiCHpN z6ts@_aSoU2ocQ?8>e+sMP(#Q7vu4E-Ym$5#thC<4^_QjhY%EFt9wAz3bwgY|EVV!NkXpCib zX2orb@7RVB)Z!`SG{c-r!!=jHh`Ilqx3DW%^_Qdh)?X}Teen*MPnfU1!?$<f?(WX?25Tbuv)DZpPhEw-J()fR5nFu&Z~Qj?f5mR< zVRp}pnD-mkQ~f=AJV9!?<2Fq)mlrTIvMclSNT?))~QK%>}Q zc3?+%9?#e2xvqK1Y!1ig689ZT-v10Twztu9cXoSb*T=Cdoe5_@A`7zyYJbkxIy|S< z$eNx;j(pr{(6K2qe2`sSAA0zN$kQ-l6rZxozM43|V|e(+LN1}dT6n7GBmG;^(9MQZbgu z)MrFkCKKlwmyeAMWgNZvx|jaXVSE?jX_uz5;xqQmm%-OY#9Ep$+dGKYjf1MIk)}8J zK8*;}9Z>%jzCVvgvj>lJ3%%9PYtI?^J@WZPBt9ex^DfcOUx)#Er_(5AdMOm{2iI?h z(+}}mZ{$tnt_jSt2dBm=kP$nXzHcR(KN|^qoxRO7Q2S|Sdpl8e_w}zZ7Jc_0>9the ziWO&Pb`~6alDNh9^t+jO)*}9TleykPpO>=t?#UB3F^2x^e=lODf3VwrFrT5VMwYfM zIka2g;1}rUG`{~vpI7JWhpr$FF$I3kVLZ){obp(UCg@~>7B`~RZtTqGa}r`Txxh5% zu_ouUD7~Tmx%726GBt=e)MePOz3}OITCERVt8rGQC2^?Nu}PvU?&H0A(7g*$?-SWi zdV}pstb2qO4o6~-L}#k9;=IeuJ23u>h#&DWPLAxN*PrR*HljP1B4cM0WxNHt_Mz{_ zXz5I7*NmFGL&SLg%hpD3{-oU#(6@7`o1TsQwxwd*Q^2k0{R38r6R`ph!kz2#-cLDn z{Aa9b5B8!Hs6A~)Ui={ReH(6`2px_`Zmp6UKy0)tmZBJytplmTEtk)=H9&SgV4yA7 zFDTnP;NU2tgK27$EA!N4(7GBs88gbW(1?zFwM6n4V$Zd^or&|TBWgCAT-YyA;!-5% z1~jAscA*Y2mo@Bo9wricAvCLt>^uPX-hf8k;dTiu#!(;*4I$fiA(^H$oE%KdVIS|B zQ<|QyM!G0(;i_UsYx9}o8RH~m_A|aR#6`!`pLICD)9!5kUyqy^_qq;Ud<%=S0K3)% zebxUhMUMOx-n)&$m(!9_wF%I56o1vgikHRuSAk+z@!kjY_YME2 zQae$P`OhSF)QC8CQ7R&u(%S2+W2Lbr*E8~NdEYO~JRipD-a=0L6r}ZG^y8!aD%T9@ zcragi<&E#FiRisRtLI{U^?Cnc^=M0+_^y1^bvWzJ5!8ouBc{KN%=3COkVDX`BG|x} z$ODXk9`)ebi}cb4`gP>V2eGCk7Zf2ynFC&^lcYBItV7r4rXyL7OVle$4{Wo zf3(&Z-i?Nv%~?ms5&7Ro#U9n+*(R(_|FHVcpq_F@KF(G*bqDV^Cc<3-E%}fft$PY@ zo-Bs0>*IZo-*5x*%=z53`zYruDpN)N8*;N2e`o{J{wcP;8QRhq-Pw(uZb|jH*g@if zy~KONh;SN%{hE>g2#@M>6Y=|G>S{v8d01>JkjYh?0dI2X{cKjwTG-1EiLG8p)!!M> zAu=RS!-KDg+bx9_+gS(eqBED`zkEoQiued)s6?zxbnJd=P`|(qO(kmn8Wvy#(ebvq zSt26!5t(s=lOA2K$C(SF3}Uq_~vA{$SM_P}Z2w$TyH?m4XU(NJImvroVt?182? zghx5X-;j!(gVgeTMb`9wvMa^0?^<}{=vByfO+zNTQWevm@%{ieZXiQ(HTL3ec)N$u zr?7=v@J4#@+I`UV3pC?7tlGI~&p+6EBO|{vqNdEb8NNtKsz_#Hv9CeKJD^!7k!_ls zk26I7zsGViR;Vo=QUP`&i%gc_bKZJ(Dpo*$zCJ7QV%Ft`Xm|^x)jKKgW3dx~U)`Zuf{8YZL#)~ypdXQD&T~>>2_?ji4_)vm4_&9?3MnX?0p@__%|o=fbP=;Nh|4 zBEh*~#_JjRE!e5Au}B}YwhUnOHF)|PJdJI{XO=UkeT-jE_YX!UQliKdUoBl;X!PD9JK@aZ`0Yc>ayX z=w}JNJ;{2v9D0w(Qtm`+cVi2C5!bvK>7I;5I1@RkNzU^lIQcZX@gXx`r&a-rH{49+G)_^E^==DSeK8(!Y-y|E7P8X z@3R?^KAB#+JH2vHw#P1gweQ9=)!0&XSCjgb`n&+b&>Ht=##Y_yd&ij(WHVRpT)p=&MPM~o6&9^ zo-rO^%*M#3ad7EU7kV^8qDA{QqO+6n{LA~Iv>R{xmr;ro>nOZ0)SFNnup%Bs%SPVC zy){m1jLF{BRU@LqTv z`4Hp8MhVS(l;U}BAT!!ijMhb%%|M4NxlE&54QbK+c)%Fnou{Dkr)(J^Gny&Syg$vm zv%EP@Q_MLIW1Yy@32Y$M~wJDul#`Y~$g+>HR0Vl+ni!)<&ucu#7JX6-!! zwj@Tqw-_0pQI^c$hudfZ%DFL6@3<<8c9hCLYlcgSH#RC>au|=94=s+-QFXHvv@nKi z+{*g{7&kQ*7UHtrY_|hWY=VDAIgC;{LbY9# ze7P+}jGjuhBl)~>GttKXWo-#@>B5`Ayi3p5m0V-OyBUwsCr4`iq)5?5{-m?_sF_g= z*);D}^1+lBETSS!H%ZKRFWab`i@xpwD}^%I^H@;Vwd-GLG(D0NNI3>& z-8&d<&l#5EGvcLdJu~#|o=Wak`e~wJ6V3nn9Tay&5n4Iv=OC#-a!Fwyr6{_cs zLuyJ7x!@BCpS2xd5jo!I?E&P}f4;Ab8`%zR6~K{nUc<~+??%S7bn1ipeq?^$h5096 z_g!aW?`DbYLunEBUAfefhcT+pMr&PNtms#_Q?%!;4USL*bVu)P4`JrcRQn`t%;LK` zDIaQ-+|;703+lNNBkx>AyhFoJDy9GNm-!ee<7fk2&C@7BW>p-ObWqNH%*v*@-?Yv>r&h? z`-D7@?`lKg8sQocB-2$}s%s&`y=u}%Khf8uU{M=l)>5ocKFr%lcRB8u9Bq&}=No!= zlx8sGs+rDkM~aatx$kJh%_z37zG}PWxU(<9YyJ=R!P!Z5GhVJa!De~)g?*Z#^LOcC zu1@axo7$Lx!#*Qt)J^Z`2wsq_NiTWpZ)%xz2>0no4gUwvMLODwTn%|SsVt|RgYsp5 zL`heVZAq$lL!)w}T?%sV=$xl?l&e1Fs^s%>L%SLD%GMm0R@0x}E~4Bx3hAvq(TCB> z*s7A~EF533E>hj6rH0ZcZEZ8?gIscKVa@Qash|_)$=wMAItH2YFZHk_@5ve8b3XFR zpER3q+t%fov~YIHn^NR>0=3+adgq2CRVURhrAkSXzdjpA$sc@5>mnU(IkcoLS3lHv z=O+iGi~WXM%0l}gf9km8sDCLBN|9p<5Q#d9Ez#QFz7i1WoofPDdDM zB@eU;dNlTiSWeUBb;BWb~607VvUcWoW;Mx10e>-}ujV=1O)bXAxsiBopyB%xc82u}Z zOH1w89dqEaKAx?}8+jJ^Xitt*c~_nar8elYecPUNFf%G89E-B-PrU)D=AE=sAy7ts z+Pn0yf8|^IA+_~=ludimhUhaYqt4qkTIv+q-a;u3cFxfUJ1ot${?;T|xuEX(Gwi~x z9tn4=mg03aRv$Ca!Vx-4Z=%t*sOOHy5d$#+HBhkE2Hyw z}L*oZ}$wob_NAg|0Wu-)4ORJ(cA%B$JvizoWgf&V#@BH=Tq?!`p z9NoJZN0<6iUMUWD$vPwbX5Z7Vu_i))R1SHIs$RF%AyyDbB{^xU&Rb3gJEjiUpL6vU zy&icQ?0_~%`S%tiXRL-u1GQC6QV(3${9E2hwctqx&bU5km9^*ou6@;BJ5&1&^EU(U z2-IbzNNP$?X=!|_6cpBeDdqZFMwR?-9hH8!5eM(VHa_LZl?y#6cX3Kt;cMD^WyHvb zRWJI1R)e{tvYN{3jJ@n2f`o_Ni?ucGIHY{o(K^R4i?F%`OXO_qQ^`@f?8TqTq2p1; zoOSS<)VNShBptOhN_kkf)EqzU%A^kXx)cw5lHW%2SJh4O%J}0 z+NJ!5y9|{%<*|JJrc@#qwyVgu}Xk*^t=3$`;IkuwZR^!iJnDK zDzsRx%kJ{Dc4}GBtKdThtH_}8GnMn|jw_+ww|h+cv2stD3wKq!t}3raa`d(A#jkJ| zvo%{*ni+L9BIeycR-kR+`)+pZzT$p;FTWd+GNxpuikhL`gsLMwL#3z)qcM7E4AXd! zbuCqhpn0RXaj>I##fnR#J|T*J6fvX9yl0I?s76xrrC^Xjc`Ij~k6Nf4YHvd{#c?<$ z=U{!Q@gpnStc^3mW<1ZT7GHN}-lMMU8vAgMWQ~~C)_-~@a!sq`c*+tbvYN$OF01v7 zn|TA&(Zo=y@ZH#FHKI&DX?>rZ_ilA9v>K?l9;&FqKGGPPb!=8Z83Wmzk0owrtef+3 zkqyLGLly6~e57?-{(U)MBvak`oB6AQ?%S1KrQ9_`O1TOsg(VqD6|~=R`{l^YRv6!| zma4;FM!)J2{qrs}pRlISh><+=%XQE-GFXM+XM}Y>(94xh32-h_)JhjQpp3WsyvsGx z`vw0cnwH~vDN?w86rn}+;|PA50njcg(OVe7?|e6g=~|}m7-D{|b;dlkJ4RvM6YoQZ z*OR}r_Gl@&lx;{*D>5LLlTRE;ez7wnDodvJ6EZfQeOScvN07hjL?-T>R7Y}5wPYy^R`;B3ewb+pMTKeJTmMLtJwW}#B~Wo2?M)!FHjb>%H;lIm z`4{V2E+aEk7YgK<(K>o8$_(p6Z)=!CZecsQmDP-QZJv7GZ`P9cJjY-K-A>+HOKxWs z(M9tCArh-Bx|$my_jfIy9CFRom-!27XxsK8A7QmItKcq5F6afh>gh8b!JMrkES2|& zltuR#R(|S{7&+8yv0WoKu5qq2Arhh!Tb{=CvHI?m_SCS=<^Q{E5+wAJ7Qh~ToHGrvEO`}Gu)`Ylq)&$M(D8J|D$b!%B@ z-H@4T|JL)GJMc}6;AHfo4!KS104^rjk=_S}Y4Ys_cY!i5HmXcHr8 z0OvhXa0tp;3vUgqtFG0RHQ-u%?8EQOwGvdANq$+K{*vz}^Y?a;tD1qUw4alRzhfC) zb3C)r7+Ly~zRutl!7s>OH%~oB{qqAKT(~nB&Ao?_PJ+`NsjiuToYdv6lEt)G zlq#qK&JI?gjT6bJ@2A)1~1=J1wEvWGc|3CZ-d$6WZ^f}f?xy|-d?B0X)S2Tzi`PhUsFo0-tA z4xieFYIma_^U7bx*@aUc_%@k!;T*?twP#v6_{r54e&!naiue*B{Wm zDqLKJtQ^L=&OsKIk|UoB??0xN;RPu|J;=-Xto#J@%gWnoty z%~X1Hpc3jckSaPt$2;MgwYVZ0mY^b|6EyC~ieTRE2q^jvU)tb_&{j*hf_$_Te2&_d zhp7g6j5@Zp@Uaptiz(DEbsv=)F_@5Mj<&FpwxYM|$@c#U&Wo5s-Z(e|z7#nyOOFhdHkjv&#LpGdMsv9Q=xM-l}gXi z=k-YM`_O7AH7Ac#gYpc|{lctor&e?{bv=uyMd}QP2Eex?q2gpJTyCc#^pPof?T>bqeTY%FnrAFI__`x6tyIY%S=uno6Wf)HqhA zF6eFQE?#F88yUlgjAt^)Jg>v&zp((fQ1vqrZv8~1-K$V>F%)~7Dw)6eyL5DHRFAr@ z!_?x9#u~0=tj#!Y_Zn!xn(Rj!@eKqb`M)U2t| zZ$qswxJ|Nnv@vy>H~4j))TE;YUtD_eM%TqjGO0XN#}r)`V^#BmJ7a z1dZ$hm0#iH`NLR*yTCRm1@gixVCwD3wuh?TjQT!zMwW>-Q>VCv%Bj2gng!oyQY-1r z2Fs}pEg#)O)!Qvlc?##g8)sh!0q$XNC=YX+)gllWn?`ft;t=f958UgwGusz@s3u6s z3#>7}fH(3X)G1Dd>Dl;4BWeHI)R%A|lWGnEPy1*N^+@+}yI`7g<;}UtWEEJAkAb>F z6;kR-kh>ai`$6C6J7lGH?h>#nKjmC^aq2-Afy+`A+}<<@yMw_>xRW~sp5h$vFf_Ca zT5>8_7^}f9-GnuNk+$y#39(XAI~l+XhUQ*NT^6;D55-x~VSkEFiq_{I%Dw_xX({fA znUuVloxu~2fNc2)$fi}|v!bc!^91DYYNR`p8=0yOD%GvgKBTn<2(RP$+=rQaGB0J` zPMYR=ryhuYj2EZh=021%=|7?~x!JR2wt7-Ib3>*{@*=lbea~%sYe3507dK7c4jSfp z(XU8}6=1JnZ64&j`2E6y>K5dArs&Pv%i)jygEzVcXRa4UE{+_wY%*%wH{WGvb;?E4R3-9M8( z3arkS;DZbVJNd0-VRkTejD4fE@tpM0>7T*1922!j70Vry-IM8>`6^S8`84x#atGAq ztO2*?&Ermomhs2n4$lE2zAoro$6_PSp^kMFHRe-592x<#Vo{L!>QXUzKB({4B2|^5 zjnN{IDtpC62uA!!C2{NQQOWa}T6v_BH^3_Gi5Vcu(94(u>-Xj`4`CLAgWu(VL66iUt6)NoIr(SFMRb$ROW6&TP9$G zs53<_*5cw`3?Aq++#I$I`@#yJn+G*3f+N}ioWxZ;{cY|#s(zP(uM|alIbHuW_1%ZD zRTI(ERjel`V0CAM4zL1?cnaBUX)8PF=^l$@s3PbRbeqe2CMNR1y zP`77(C7#O4wS%g&A*{md>1{Q)XWfB}wxViqEGx`P*51<8hfbqH#`Al{SrtW_cpvMr z1beU_t8y`Z`uyAgR*KzV_xzW=kXo}vcujYs{iCtLC*h~9M5o@x_Ps|hU1;HCTFtSd z+>x)_y`FXCXFQ7UQjO8&=a8|g(VtkwqwrbU@I*s+G?_ETCs0j&6xD9Ov)1|wawj_QK6d+YYVKyT3VFJ87j>d7 zsJ97y*vyK0H+K3H z_G>es+9~+%&DgEAM|0~y+27cciS712eukAIdhzA~)?)JyLe0(i!N=2L^L!n;2oDE% z@=Nr80bE;!7iTTv<Q~+o19KAV#&*1gGOXK|Vf)3)8Jhq72A=wjmbb&N z2buqTX1$2>BfsGNy7Tr_-kEqOIaZxJSpAG~9m8sNKl2{RihTk0?M>F} z74M61eGt;?{%Jk$-U}Tc#fazNgMADYz30_a&&%;;DnrG3c;FWzBWFX^Hc;p< z{LuH<9X~~#@PDsU2t0zvY5RM|Q4E?|N!o^IThpR@1aTIPVAO=B z#o0^kLccsoT$Xpl^tl?E^@1YTz*{5m?yElJ9L88iK8ALuGUF|*Bc3y~j;-S#0vdXT{ag6^HCnrl5qT=kU1zAnGjeqRt@CRQBQZ{06pb_9<33JA z1b54SFs3RqRvXDQQdN}k{sA@g z@QjGti~CY@ALfyax>+4qlX)8Fw8C%`BX@_YpKXn%Iq9Q$qCWCqw9N>pv3t)%THCZI z|D0Hq8=;0ZhKCqorMz|;F*UAmEb`Wz->vW33GEjkF$>|*PxK&vitx;FjKdh3^@rBX zsrObwnsM+nrI81tEyl<~RZ3;X?8&?av@Al1t(z6GHr5(3^PERRu}VDWKE;T@F7|Q8 zh~4K}X;X&Yjb0m3F%R@-em2{9>L2>D?zJxT_le3pYc@wZiu2*V&2!S)WKZ7y1*O;X z^%IuYn7Vb%*039e4HakBa%_jbyJ^LUsV8SE^JSFQELg}#W#OnbhQ`f36<>ytTRXm$ zmX~Au{Jw%7oKMO8$kbZ%7yF=;oVG5{T$**x;pC>3Oow^TN)D^+tWRwO)tb_NRcPcn zT;osM7`s*3M$)a|Gx}@X(LAQJHaBWLgBePz9U@vY*J4eXRb}Q0Jd0^O%1B{V=kWL;;&5JmvrykixM%6DSu~dr zB7H{qt^PAEYS!F%kaMuQ#5kPw%Aw-LXt-y&)j2iB_l;1Q=Wvc@lgzM~Co(5vg}JLS>brBa>eO6}S+5w{nH!UiW|oW>ni;ji z(7(-+8-29*kPkE$Yqry9y4f`6Zf-(sf{+EWF4i25C?DIPue7l0!Q72@(QK&{kcY-3 zLVnQkTYbG5sq#~fO8M~|uy_a7S{r4P1IGQ#cdO;*Y0PT*yLFe+$l6Auq((l(+OU$x z2(@_+EA5pnb71CutXVfxWNxJlts6VF>LJAOrIR(V<{iyHTCr#)f)w-Afzef?cKU-> z?wVUE)NJjX6g5{@lBYaHV)o2An5|Q?LPXNBnbVL?X2EUKiatkfPF7xNE3C6KZ(+vG zPs$m`YF&#QGG8G+fb|5<#Y}|~7&36St^7;Bkdc>{&M#yEZ7IZcrGeQ3b3DqJ`eDvn zs}L$J%mDgZp?vrWIqD1pVvM?KcE(;q-E7FdD(6xojL>=f$Gokm^}D+3Jgk}Ubg{L- z=0MH8ggC5PuLV?-v={1vTyiYZ)aM;{$R`;mH=k|h#Z0|a3N;2HVs5KuaLrDKXmH@Z zw%`1u?MtmfjdkquTnvyfMppsnES-&w2fb2Ttb;MW95R#YxpDhYcM@{hW`8{MZjMwg z$(xW>HeaB=B~aXU)o}S>rGQlg@(x@z|$693PX%-^ntb<+CrdV@P*q_qjEVP|c z*1W#@tKSeRE9HaKl5@(kqqc&=N&x>U1KMDvEXbU*4%%8YKOg1Pc5PEC`fR9SQA?b+ zd3xnjosr7UA!t>|nFdy8?D{#mr0ok;TyovYfY7>{8fqDW9!Qz6GO1O{ zhk6^<6Lr(ig*hp;t|dNikKrrKT}d$K>NCz*Iw%`*QJMzJ8noD~n@`G3`5flzt3K-t z{O5e6sWfml!9Hl!)Cu4Bogjxwet69>1e!`ksU4(U3I+=jDz~JWy*pnyEVb0nKv(;A zETQK>)lji2KkeU7xlX%IDk-62Q?5HR>80gUDwHy*qr?O&AqS*!sLAkm|I(lHzZM~A zyYpAu9HaATlr*N1*)q*}y0N3VxcO3^WT`68Nc%`PtBm+M;E#FP{yP;|zn2$`hXqw3UN?Ht<(! z`e#f)&NHm>&P=Q5e`gSM zz$Xe<+aU4EXRr`~l7U0^R>&7e>--#V_~|&LaF8;e3$t>xK`$L&Xdze-KNqCOCjvE; zu<&}2ayjN_{1<);vNm`mYn zzT@1q(1mgw+V<07G=T?!57N`w_?bZe@LQ0(LRr(kI->ABJP}4#NK;$)Ul?uv*F2AG zKS+h6kWPVGK}UiP`&uDI!~2DjCI|c<Px|?wk-qBxpq;)RC~Qmq3v%LjM<*YY zmH++iyd0sg`*i+8|7SctX`6o1XM#l!+zHQycLLACdK3BxPy6}MV`0DcEGGi3{x=d{ z&OaGiDx|-!IuBp{-`E26d|he;9@=i0agbzn+rI;KgA4>71X~uq7gA69soVO%VFfO< zc=AG?$#3}-elL854j5aQtG_#5e-{38%t4BL&oPGg3ppWG3fK4`U9QA_`hRPUe+BM^ zPdn#)L$nv@7}^c51t|-?1y0B<`wo;3b~k*YP!hu2oTF4IoTW1lQWa?EoTZ9V8-5Q@ z7V1}!V*d&h333&ze4tX{s0(GuQTfjQ{m)lyBTy^MFwDQua`<$R2Y(B4C4CCV;qO5< z!ngzf{%>grJPE5qc*a*8fA|XPb&w-hG$o@@#|kM@D1%`%%0`&K+>&mNCs4i68~EQ` z!e<=0uLbWx8xyKG!{7SNflgB7|JCWjnL0wp;duWiA=1-N6#nyx@Qh=(??89o51$I_ zV4-XW*$KTmg7D9u?rFmgBfJ(QHP9{SUf`zB`f8ApK!1M^6be#gTtbgAcsY}=OQw0-N-*+;Np_7r$h zC_BMdlY9CgfhvJN@~}`2e6R3tspUUg4ifBNVSNZA4d;>Nuac%lD_!=eMi|4f1+faX z9QG-V!Wit^%1fhep7k&;6i#D1|NYF(6NxF}J>{8G0Z~iOS{sctsv?y{T@`b#6wxNL z0tfT)Rgnm!OsLZL%&)QG!<+=K#?ReE;%oBkUVc_2_PLjt{gaQsg<3nKzHj=TMxYQPY>XVnD?K;GgjfPtpSdy8GIADBMjCt|WjVc_?BuZMWwlh!{ij|FteIOxoacg2{8h(27e`*YXz34_cLVq zYUU#{qVD}l%T_o4L|n_LyNJ%Mpins?-3jquD^=GL3C@vOGM?Lt*Nfyw_y<@V8=$dh zI0aN38Le%T5;^=NzKqwGBR?^L%u^8%Y#t-~(1q3yQ=4@yxvt}h^Y5Z>aa?YrLZm96 zpU?PjBOmq`?HxxS8^}_APP|Z*%U|i~dU7B8k&-i+{Ze{g%UpgU`|&4PoF3%RT9LWv zLv74<+7w}89=LFGXsI)?*~(9rgAuiMDtM$EV#cO?y@s%svfe+Ky+!Fbc;F?Yf1iBt~W%w3x;^EgwV(8kf^ zbuXf(>U`?pD$vU7)D-3AwF)-iJ{odR~+E7;w0Qg4!%eTaPdR_e4)ql)WuZu5B^ z4y?#$QAMz6i`*|KhgXU$WjE%07Bd@x)cru+*;z<%acX}a;|`@NRkzMP_gvJAd{jrgC+&>h-h>S6kGF205b-I{Nm~L`&SGfsnbbP^ zsd?GR4+p3%@W~;%WQk^DL~A+v-oR6KH8zh zs6OB`mcVy@srl8|g-q;(bNqgIYqk}5fqS^aH((`ZKsBoio@Wtayd9chd+@$~IX;t{ zY76v%8>oW9RDNJDXlguspY~G*T?`(xCxNYM2H&Ck7>^w>E`eRco5^}~PwI&gMNOmq zrU&?~L{!f;26~DKyE{x9Kw{U<#X*MOEIM)YmGJ-?07kOtJn zGkAk`NB_^q=<0$D8V(<1Cs0YLz&Mo!R!%kw1HsvVnqdy34$#nIF(%PrIxp}pec&k7 z*RY!>=wnoZ@e_`+k8zECRA0p5JzQB{!X4=a@FPv&Gm#gyX(BwL%c9CQ1V*6&-u@K= zW^FOvjAo^0P;rRnGq`%t@SAkdxiGTlqvF|s#A}Z_Ru<@sD?kbr#3+3QY{n$uW8#2Y znMF0j7|BAvGp86WDHq)sdU-F9qiIGfvl=xM-fS8iu$rQFjRr>T4=7|2_r5(qv|Pcv z^;f`qtuxx2@o+awH{#8SaGy4eHc&FFgt1%590vs674%(BW3>4kZpDUKfzHm1qPL=M zen86)qpvF>-dWMwEWpD3O>YB6lK8JQhsVNfJa1NmLcDjz(MNV<6sKXX&%;P;cA z8iJlkM2#Cyb*2yE{j-NYhx;d*8<8{Bkil)JF;K@30A02ME;-AAVlj+u&{Bcdyid8yQBpyYB=y)phX0m1bXIjYh;vkX|HOLR%h6Z3&! zo`~zcGAhCyA`K|EA*kY|%oRotlQCoA&G*E}0c^`S)E@!(qz`bfKfsJ)?g2@d4>*bC z_^oJEh)ncMyor1b1lcge0lpt*A9!IH`WXFz)(|L~lX_kA4p63fsAurzeoSwtn=wt9 zPrv7nsi-$QFhU!^!DlE&?Fis%R+^2BJV4*M;1uXV4LJdw(E{`hAWP<zB@^XiU^A zz(FZD6tyzZiNHf;MD?MTMSY?2dQdB^-#4c*acnOj+e&lG*y2n)`nI~c8oskGjGdEI zJ(>YpYdak7r$9Nf2ffT}0{@Sp`ZaC2)=(Rv&C)ZYHOJubJcAj|+^2Wo)BAx%>I1J5 z2fYe066uL>mwgVutPtK)~3T zY~)8R&WUk$29DJ`jfi$vn_{@(&Gp&bNS9!)F+^=6K{3FtW(b z_Ha0UOn<;{|6x=&&S-7aEozEdPy3?%4U8gukLjD#D*6xhG80d)gR68A^w|?UqeQKN z$J=Q-2ED!r__kbhJF1S^%UGt*hp$y`?X6bGC<^~Y-B<#|(L<~s1k?vFp5qpE2+rR_ zf#nhz1-_GKk-G_)|A;?dHR=HHuVaBBo(_G_cfgP;KzHRf7$8dLp#K$PIYz`cQvm{Y zINbsM*-M#v=!<6bYRvk5Fq+Ck6>$q9R-NjBdFm9_H#1Q=7Q%sbhA|LMnG+CK_`%~| zR@BZp7}*nm;A{zmX+9c`I6%L(f^$b+c;Kxt{{e>R7|^gjV8yir*O-Ae zrWxmr?pTkBz#|f^-3eHW9Kw3&ELPinQ4J1K*XX148~OoLflYwBy})dzS7J@`3#j`G za5tWd`r*{uY75j{YFjlyy@Zi9k7|#8-o}Z1Jhz4|%p9iXnnN(|as&0Z(tJc6rYAF< z*t=|hwly=6K0wtpf9Yqnl5qe2rsh}E)z11seXJfftiZpup<6N!nW^wC+yigLlkimR z3xCX1IvGEskY`P>aw~`x#Z2HA8zVxW^y+YmZ>RUyRlPi(s1)XkS->H-2R8U6RxwVj zK>h}fnuBAim9a6`>9z3a9fg(rAYijU1BLeq5#EQqY+@7#j@PUAHm0NA9K<^I0@Vij zVuLe#Yxqu%1(t6vkdr&0MEevOnHl_xEx_A_;kq-&_zA5>uU_8hZDcd<=`Z1|c+{wl z%A}k5;KTTm*6E(8SZ?MBTu3Qq1CXb4=`!?B=sBhV*Yg7N#!OQ%q4sD@(6?$9Elw+@ z4cA)h9gJa^p%>7LfQfCvmS@KSm)nW1PMyYzPXl6;#)w|eT!6QDA{@Q5G7aeVR6NGf z2>plpPU)lElS|2mcOP4+4+BYC!dA;!4#vfU}N{Uu^zgWG1OL?WN>* z7_0P|dW`uWkgR1H56AHd+)QpTmy=t?)S^34rZHS!sv7c($iLFJa6*`gOj44y>Si;> z!tW4n2vvo7{0(+Goorr*Q`&ArHi}W_=!eX|Y(Z`qw~6b)wPf$p`>4t0Hod*NRh|-A zBGr%VM2RE}h@SKjW^j#h8gyS@cUg>;rmWK5NI+VN=*LTn(-P{;2FK z<|^|2yOE;hP;x{rNe85p;Sb@Pau@xgd4wLobrxJg7f!%+Hc}tph_=tj1k}Gmkd2Q^X z-!N%xQ@#;jh8;(R;XohM`l@5qhx!w&N$b;LHZ%HR7dG=%c$FOm{BVDui1VRu=RuFR zfWAvfjwD9jN18^SMM|qxjZ@SBrZd-A_#r&xKO+`?>bCAtIVD-9l>$m3?V!1vxz05c zDp{&nZ;1o>^Xwv~8odsByQ@(hLYPlt%z#EK-KC?Uw?QE^GyG02YqsNJEGagJvxc*| zZHmyGEoW|5PDpFQ&%@QEPLb2f8ofG|PPbqi@<~EHv9cI1{wIDCmhfx1t?d8kQAR~= zrn*V~Bg_To2lI#WhF*tfDbXgyt+4F3hn$1m4PA?DJ%nXULBlRz3pEJ!2!(^i!@J~3 z+6{e<`6p9~`;QyKrwb3nOqQIMiDC=k7B`RanYoOe+AU>zgpC2O{l;58$!N$96f0ZmTBcazt+|C> zbht#(P>r#03FsiU;- zK-FK+=IB=JGWtSScRiDpYs;NxlbDT6NvywK8aIp+Sb4oQ9-GB6+V^2a-3OY$LL$?F4$nvS*bMbxUvST(HHtLQEDa(aG!mY!xT!Yb2^S>haH zVZH#x-365!f0&cMpiU(kRg7bX1!ot1 zs3P=X#>Mtz1~Y##ooOdk*Nis~=yCcxtqgGdiF!9fz-h@NI0s*$cQR#IooUG=VumY1 zt;Q~MbL5R)2Uu%w#rsDJ5N%r0gz^N~J{xxkAx#7=z_)^t{=-WI@Yvk9jWPjOap5IYtJ z*0DJeDV9zKH>3yFrf(2w7j+6wSXr?$*p4}JjnNEvzQb4_kEixwJyjI$mO1gs zeBYokeII+?VW^Nxafo;q?3k z=PL(sM$j0$fGy^~@JL;a9<7ZE`xPs0;tbUWE39Eyoqd6x_gAdvj^G*nIC1#~2Eq*N z4`-k~)iG1-!0wv5IiXmuy#`5CY}>R|L8{Qcxz zaME=j?#v&svthwW8jJIy)##~cocf%@nlKuB!M2EEJ?wN}8ir97eb@u7?}If~G}dxO z!L+M@wdZKmn0(k5sZ=&P3FCV%&HydgFI+`C-r#qpq8CborFIg#SP8q_4LIjph|!;d zd`ZQL(PZp1ej=CWgT*o%clP2WWCqai_wcnInCoU(XQ$yjvH-s4#t9{lPfx*mwl-W_ zTc98B;CjThvnbZOkAZFPjJ5bZ^!fzcp$uY|g1t(8;P0nkFFF*Fn}&0?ceu|ZoY)d< zeMRKxNqjaD_Z*E=yrIbd=f+t)b5+E0AlB3-RRLLl1>+?zc64tC?^jN7(QK@jV)A z(hXprjKC?=7JP~*(N{um7eTLn##w3-){Jo&BZP~Y6Q`y`dHN}0T^l>s%fDG7opBo0 z2leFx_A&X8kJV85veT_lcX;f)s)2K}2$8LWT}vm7#_Fir4RIzh6yrP(Sf47+kH%p1 z{z>1$T_1tB_YE$*Pr!dGj@{8$>|p-F&UzY70cIo9#{FhcjzznR{LYnmi0XXw-8Mu# zC+<}iEzO6TOidWn3ud5c$Q?goUlemkh2N*XM{$SUXweOv33S2kcNm^?C@MrED&Q&H z^#r0FMlCFZodfamxQn{67IC|Z^SR9Er7rM5XoEYra2kFCce##AK~xUJwtHC?;tOz_4q_zafZNFg ztmC?46r9G+q!ebnmWZbfW9co<>OUf1>Y){LP(3Gt16lyFAa%c;| zA`+(?g0_8uCw_{!le79p7!z}m8(p#H&=IrM$mX%gx-Gw}0?}&DP%_Vtb`!5Aq7y@K zHE!e(!JX#&eUA=!j^4OeL41mMVckMJpW!=Edue>Qxl8DUo!G5S!E(OWdn3T3!G<^fcVz2Ts4T zp{Hvj4yAG06GC(kA~TQR-1h}?iy%qKI~bzeK#nNx0UFmShnAMbe~HH@aUiOM zRuKQp%y{2H)Er*nzp1D(xiCZ2L=F?JX$CDPO6KH!UxvCZai{u;tROvq2hn?rJS3{x z?-0fJ$T%l*r!MN;FjUOHagXeHnx}{(aa#F`)mkjh_HyB#1Y1p1$-m;{pJ2&JR+Bfj z1ldm7RtHgTjsNDu+n;-Q1F;CvU50e{Q<`~4DOCXn}BAJCpxXxml9 z>M`2$6IUfV0TpnDTNT-t578x9)g;vS6wD6f?G{mwj>3Hj_lO{aGaT&5yz&y)`iOoD zW7Idm(-05tZn&0#%Dxw8C-JCDClRw4T)8c>p*bR&19u>PxP;+Ba2u7B z3fInwbB`CulB1{-*D)H1>O65*B^vx0N;anFTz*2l9|MOzeP5Xrg6h$vwp5f6CcK}uYliE6h8Ge!+O6;Ylc8ZsA9c~_%0 zT}CWLw5~eFVjZ-U@VG)a#m?}lBrcP$kzvG<_X0B2iwv!Xx;q-xW-w-6EUW<{LXB0 zZQ|8N7)?ot8BuW{PM1VundCXq2@hjj6Fx_l-~US9ffKd{VYv|PCc;qph`5sIzD65K zt4Xyei6>IghWlvWeO$?pIFk3w7Tc}Lbml~Dg`BPzMj+sTOd4aDjeGB5#=C4P8hjguYyOR|JG#F9vpydnxk-_cI; z29}J`|Kk=AW|fFlPUhdgL!1(b9(6K4_XBMt+yL_CJ%gi_fh!~41w>(s=!y}gHKH3$ zkP3tkLb!BoruO2Q63*P4vNtS4|S0m%??3T21cXnLy?- z!mIj-%1B&hiJlNa2oUyCh6g9X^%J}!hkFx65E3^s?-6Y@@_ZWdf#5g@R)U}*2v&q( zBnY~JC=n5cfsP#;K|m9wG{Vv$7;=J4iH4&~RX)|GI5Jf5CIFJp!V8=L3ML&`G zjyM1lh6UkjWa#sdDouEEq`Krs-dM4&`G}G72>t&F5x1fDi3@O1#5^;8i};fghhw4v zNU$OVEkY3f1e;Et@&8bW1PMc26iMU=ql};$6MMsO*FeMF)~_&o%H zLLy2yA%uBBFeZe>lA**zPRTPgy$EKCASp6pLwY4c-KXm@hi#DK_rnTEVYc7lC~0$LxP7PNF#C= z!mK1;g!@PEMHyoT<1f4^!Pn>ZG?~8DjatK43cxUjq zYgWXZFae3v0bv>yYWg7YDsBBYWL zms+ApMKXXe9SA#)M3Xo+kQNYzDv28z$7CKLc}|#+L@6yp1C-pKFdYa>kmziqDd>L^ zO@il9WufzBMb}@8G;ui z@ggc}M5mANSDpAbqCHAhY@}k4F+|YTB$G(pAS)Dt$RHJvC_56aWrpe@X+No(gqcCw zNn%KHim>O%od}YQ3(z41IgTqR2q55eyZ1 z29j-LWE0*V8JA>a5_A{ob%Oh%(E>8|$!})Fmh?(SWg@jH1071nHi<96+>!ec726Db zd$Qsqze$kI8M?3;c}mzLgtJU)F!4AhJ}QLkNA&NA4l6?`UC5nqAkIAUXK(rBD9f<<@%D^HLE+ZKq1nEZpOJEm_#QdUr5a+ zI6vZYKxRzB+fKwhM`kk;tqkX2J9bnGR<9~fSaajkJSwFZ)yRc=q~cQ{#IP{h>%;1a z?E5p;0|c)~PCm%)ErNEF=OK3^Gd77RQGX;Jy(G6tq{IKesuHHF18s@IT~n}DjK+SP zcmb#3-w9J&ht?wTTp=zkWS>U%p+rlM;PFhflB_axv@H(p`i|C+Y$GT~qPj=4Tgj?Y z!&4^VCmG7;Vf>bfRo;25TessRYcqBw6>vr{2gsR=IE|?T)vrs~;cdnF)HeJ+!M1%z zf4Fe2vIM)B5U_s@u(BTw1ldH~b ztPB;FVc55L&E8a5yyt&_GyXXG9nK-X;Vh*iPNf>*Og5Vt3$2;5D35lWNSwz^{|r0B zO*jYm3+Ef~KBea}tJv1uA})s8${e7wm>2c_+6wiNdP6&>pEbIphbyD+wqR#l8z(sR z>D){@(~Omwip*SkGF8RQfp?^X^eMoreABlWg>dIKz|1^CohAN=yRj?oh3~H@C)1oA z$aUoJ@-umv-A%VM>+37jMv4{hwOFm5e$pUbnf{ij$ZTcHastf0PRt3UB}Bnw@R9n7~DyI3YzCWx2$2y@iD zqHR-}$crL}BcJ4Rst1}=8;mFBSnQorDCkA8i@1wiS>E7R^ZVIJw9o8k4AC|#hP+-G z41`8jZ9Jmz#3*7+)9>s5!`s<)R2O!Gz*}qEj@ioEPFmjc^_byCZFOtJ2=~StxLwj1 zIjpqQKIsR|ymWJB5$oXV39p4^!r#JX;VM6fb<;6;mci;c`DBEZC&;(u+PGI2ZH<;$ zk1<99AvK3>D!j7HvR$?d4#oDbg%-NA1F3P^`pAZGsc`F1vEasF2kDdCOC6?PruuR_ zg-oK=^3a;yR?<>QILxPWNpvq`rZySnRFf#_va~tUDB_CP<*iC{?Y^Fwn#<-AZMFiA zNzNnAb&iR)2VyeUj5%!f*V@UQq@>XKV1>Yc{t>~P(p0&!){uI^)wlSqpKV+1w4Np2!XBXu89mg6N@=BUEe&RE63t>@; zgae^E!AF5g;dr^QUW<8Rkz9kLcgMJ6eNp|KH7sM)^t9JijTF$ z^^0lkzG7=B?4Z|cl_RS|S%NkEsot`_2Yw|`IP^=(td*n+u_yUl)@hEn&OOc@j>YzT zwx_~ArmQ(t%c<;;&W5T5^9Abpt^QVl#Lx~|HQMvl>=)b{Vya{s6xStczN4LGH``jz zCRGmFgR=jw_kp)ya6x!wc!bnYwNXBL9g{!~_5jq%IsHyZNal1VVQ^4YwTG5+b8*C?p_w*#SP`G5UMWDH_s`sdWTlmk2 zAg@zTnx%kLS-@Tv>RFFlds%zh>exG52k|YK5|mv(8)+O`7g*sx;hXNC7J4P87#1$h zy5ITUvpMR4=bWp*y|Y-HsiOag{2O`|2>BKN=-~74-bjDtk~ZFC>78_OR^uuNFNH&* zY8h-TWVz0FWo`6WeZSm5niV=2(EOfYhj3mc)mYDMx1Mx5qFO}%^c-}~v6kY?QQeen zp??FV1JnH*{EI@f<+-Y+%``_cr`b5RCNM}#_;&m%zL_}6B8XSHQtSe%l(tEF66_WD z%Rkdkg)YcHjaTe6%Y0`J4}S(8rwIz zl5?u%6T45p5FX)QI`VHI%KyMidt3TW zg-*+{S{s9>8?ocrHB4E?$zEggaWnb5;#BKjRz=J!jAil}qvhGb$6h9VT>5U`;ZSXD z1Si_-d8C+3nTE%$^c=To+(BcrRN3Fad)zzHXZUT>bhRB2o-xcuwj^5z*te{VMt5bV zaVv$X;y+?vv9oZJi8g8~*TZl9toKv;K>xn*PxS|L(mK_>FlJ+1(YQrX-5mk`zEMq@ z>@(5^rVGuXU$>F_*crLKQxZsRx8XZ=9-bVFvNdMb5I>lGU<|TVz&O)5HD! zxzZk_%t${HI1ve&H!UqaZ(`#z>zSv={pHSTxla|6XZWY3%}pJfw!)hdY^FRjF41YM zjlaaTVz1LQ&;xrYf!V>m5n5W3Et;jIs4^oApFAe?**hoIm(nVIW}v-1jw)+uOmCS!)OR2_KQcu>%^tCqaLx4$iy9Ku-rd)}T-Z+!(FT@W|DWJ2WKJFML3{FCW)78|TeJ z^j)SOo0oma{KNL+R&lSn(ikrV`K&BWJIp3Jqi%~dkqSwt!*yHm9PBLW=wrReXJIbr+vQ&2=fO?ErNNt_-jU~Ox_-cnVKQ-RxNhuC<~z`8*O+I_ z4R$csg`3ZQV?-v3x}|ScPsr6HRiykbe=wuW zpIVe^kt<8Va35)m^i1lf*o}WM)&>eAY-JsV@fCLLv1JiLbXBvj78^+kjtU+O)e8S9 z9g*|s&CK@HF*=T&iZ$5hN8JDZ(zk7T18;Vh+-}${)gig>D7Qhu(#r zN=KFDdKD_d91%8IC);=0+d9rTI@?pk3*1^}ky%L%g|CFxg+2u@2ckmrB2Sd>>R{tf zW0@={Nr>j_Dgp|&gbSck)QL>SGcQ_YNKYJ2&Byi}Q` zd{Aa56dU_E5cz_WEqSKHSnx^AmlaEzd9KtMdD~A*_cUX_V14#jRA6?Mhayr18M)PS<8f zb0M||`v95Ul-gm0^_%)~V0^Y3hrw=%#SUe#*}+(@cf?xvm2rhiWxjCJg*eL;OM+0B z+l|qdS-mIe;W5$%X?7$Um1P}JlcMk!D)nAAnSM|GGM;HCv^vHj?0lR+&>mwJ($%RX zL)AD{mNj`aFklOeEOZ052A^51BwoNg+LW$krfH|u`Px83F=x_W*aUtee}EO3fO%dk zEU%HyOR<&av-NTe1pMOckZV@on% zc>weKRZUl3shhy17{c`Dwh8UT+Wa7# zSrYk~%qC;7k`V3}svoWvDXP{tQ`o~|f9pMKthF2JHKPxdXNKPgW5WfMh2~7T+D+e$|!$5QJm9;k2aWW+9UQhY>J$5ZRL zGU77J7z-=VOcI{tM>r+eD)dkqq<%KHU@djZZrC5%>RHaS3Hpaf{g4w!oHfFi)f;qs zv7O_rJI!6vSV9Medz5m_Ic99V_@#sKvYCGo$k`|We>*R45)qf|f{ z5PlvQ5ZDn~rRdZ`QFFBQeDGXy&9;7H3aUARPt&X^fs~ov)bL`Xt}xb-!_zS;*==z= z2uj0)@{z-?k%pX z_I1J*b9-c9;EcD2w??42jQ3*VI>$TrQqLymK+9NqnbJLYD7{PC7;pYiDYZM}v7U9_ zz#+WPzCiF$C*{wR;}>rJL=ZwnbtADXyULg#KMv;efAu{GjF2koYuF;z zmyTqY#r?{DT_{Qq)@+fh!T*9^!da9t`eXVRA1}JZ9efk^FOyO0Ms`cjrF!yeO{B|n z62C;8ZHcxl#;*Sl#!98?AGL-+w+_-j>d%cB=rB8tMutyUv~OBYp!X(XFTaWH!S~?{ z@zK1upR-OEYjGv8hfh?mDjns0@@{1WX1Z0{zxp{n ztA0nTtJOg*PuF)+>)D`i%2wUA#Ix6P)cxI&B+jB(d34}ZDwi}TVPGkO`KkzYdD|}vAZ`e4=w$iga zW@X%+OjF|4c%E6EY$a_%V17!L#Ptb96Ne@TeVOFa<`k~A^?;*2e?w) zbcSJ4nELEL)CsMs`YrM>a5?QpY9wuF`bl3a`53d+de=QHbElkha(vE`H`D*3td@7$ zyl||~mw5O4nIFrNw3NBti4y#o_~pWVYk%i>R}*`GYh7EswWrvNAIx88S5j`HjB+>h z!S^(Med?{`N~uHqQ{@xXLrc-9?O8hH=#yhewySXy-G#-whCkdY{ajMM#MKFALaUUi z{-M$|Wr*qE`&#l?2iQBi6sK-qV(;P@W6i;>qFNfom3D#HbS>>j+VIpx>4ES^qYu~7 zUM_Y**63{QvQEk}I3~L-NIy{y`Q^kbKUV)7_3KiCn$k9`>T~E0d?x!$x8ba6-(Xv7 zdn{(>)-b#152jO3P|insOJ$_O(pPD(GMtL=-EBVC=9ne1|3>w4><|)-EFphtOk&J0 z{@2>1ul`ZWb84V4+1cE)!J%08i#dc==1AqZ_6X>b`o;sgouG3GV54ey^I1#ZWBgkz?{brJi~~ zn@IN(ZivUl6T&$0o$!f0!SrGG@}s$7>M|EfIUm8TuzoDF=*}U@qNZSBk|fr#Kt)FK6fKoA0z@W<}c21KJ|033lOG*%Tqp_RZSC zw$8TS`i3iO*3y1SyM1R<2BhZj_V-@#w^qh5aa?j;1lw(4qoue_=VCRRnoltTFVpPaJ;ANPZK0cL9wwe`jn`&Y>r=h} zy@(#ot}u_OtMpc24OKRqGwH$}(a*OPu3D~(ySNR^Eb6FwKU_5QFnGp4&X+Y@NqcOJ zqb_k)TXX9iz6aNWZ9%P7TPmH@rRq4XhM9xC!;KO;S#{erYm)dy>?*9K`|1;vj#5s4 ze0qYnlW(hkUig8roNFz-vUT;;jcQ{*huXH19xVS6u!TBCibR&nTg-K0ob8BRaK*dp zIsXxJv6FSwa^HfqlWA+xDte~{3#)7CQe1*C$Nti}&aUz^I2$*WdW+M&H1&@DSnpw; z<&tf~@uDQoF~~kmY(q6uE(EOJCaLF=v!>ihe;e+sJ*FcuZUMs0v!kLt0f1U7s#m!~07qXwXt#P(@{v&w6WGh3n*il_GzOq%>ST5CC(AB|S z8ZS-+u8Z>0cQw64+U)`jWX!hl% z@Rw|pqCdnAbk($$7ar>ad~Xw}q{az<|LmXABr@F0$Cj{7h;m0Qvp2SC!Z#{LDH=H- zf0s+CPpN^Hh-0FwLR68MZtnczH)FlDH~mV&#vccMtV!^ukBwX~mkHmTY0=iG2`;~# zu@t5q*vB@COp^PkwW)5xQhTg>zB|sX+spHYlFRQ;aVORLHTzfAv^tRz)JXogJyWzj z#&Dgsg@j489lOqVq2=Kfat}jc$5|)3YDEu>3Om1B_EP1f4XIIy#eVhsxh%1gkJqws zIc)vdO5#T!_FTvRAAYE4489lizICqM7Z+FzSMc8(-oVFslRMPEVUlWS? zo~uKdB4S?W*67R8`CQYiX~Jh_v=$XP9;vP!(>>G?{)BzFYl>s5%_o+o7fHp_3#If( z8ktZs>0e(~^$cA>=wr8d(mZFKqpin<3v5BNxY9+=rFStq(kWaedoDl>4q?@Pn655u zP3xLGAaVY${E0PuV^o^0E>?65i8>lR*f~eM#5=foh6n64&ODD(q$*qy#{gHVb*J!= zuSd-d9ZmJ7gi?}|oT;-zpN!(%ZLxvlANMWSa@*h7Y2~N8=#S-9Nq z$h+w%*6P51@kJytWx~&Y65l1eQs(&w7~RD-wpOmDQTN^5Y}NST^fIlg@=30sUN**a zxoyWB!(1QSlbzE9&KMF-NW1=P{g0{%*HRMwS5$>haRl8xquzTaI+pQw%xh}l$lCCT z$YL!g{aF0dRXXaUXO_F7!^iZMw6s1+j-TB3CkbnOS=7z!P)FXFJFypH@_Y7Jb?S~% zMv4zS_6-Xa)1P8jw8qsEr-_PVshERm721?MBVj~BO5%d_R`OuBtIg%f9`hn`unS=ie6hgJE&uy_8uG%q^V{dt4tdmTC$dzjOmE*_upRuWQ_=8#1TE#OYwo>e> zsCJI#+yty6l~D0OgTP6-IWtuh?aQKu#oh3H5Wi71WP94$?@PX|{k0|eroWT%$Tl}B zI`(+nli2;PQhZjUure>)(O)C5Oa5t=;MQ7jv=x)tz0#7vJXITb2PYi&iHJpWdHcVtMBH4~jV%HP_Le)3oK0m!VC;8KLnC zT!Hw8Ho?tB_jDhzTA841_qI&9^<&(x94X5J<&9^S$(|aq_PB8|2<%kbi#I&wVm3z4j4tNB#ShZ{ zi?o)?1uF&~ME;>xb0x$Vj-t`~JOyoi*;ab4;NMBNf6V&DrCjk{Q0&5DchT4ialV*& zp7K`UN#thX+CeT*C#0zcU7Am~TyUA5K91e|66&zLCEb%aA#nmg44Why^U;3X(QP&ucnP|Sc<*sdyt-Pf&SAi-e=l5-d zbxfJ`Q{JXhA1XnpZqMg#7ggQ;$+lMbgD$7-msvSR?yHnF>N2JIXJTR7aqCkdj!9H= zhxVq`O|6%f;JX%f7&w=9WcGY@Z+F!I6la+6MNX0KO7YTbxvHK-i~J3topqPJnth|V zfJxAENQ`%OY9zHRR*Tt{9Beh)2j@FCg*Gp?+@>FCeUvBCxln@S)?QEp*eoJ#zil6A z&BC`dw?(%5hNituE#lo9?5eI}tk(6e_MYvop7z!j7h7686`3LDmETF%Ws7-(-pVxQ zSK9j6`&&Bme)^l*E|AB&COtKMzb`hjh59CZwrlPUo}8{1RtFuzYMIA`%#mH#f}|r-L=hr(^8B3%V;Mjkr_%(k;~~b z>2B-_{*48;Q`W*l1^R$`FxcH&J#AO|QUBY>V5)hQE1{ynmnY9r2eUhph)U$@V&jA46dy`_`V zE2*E`7QzUbY6fW=4%rsr03(KU3qqTSE(s?|hnlz5A(WwQH(P z!W*Om@-#^fj|j&`TB^&<4a_^Cl|9zk+R@EgmiwqR4jxWVOKqPv%KJD>QEoAtW50Ww zC(ZfH;=udP{*m0$uy8MFzr5c#&fMgi+d4V7IC@y`a0`vMp@-?=)Ea5MyzN6Jj2(Pm zdu{hMPd8Ue{V{)cyl zzj1h-?&0mW&dzw(B1dz}|Ja^JTlrvkvQ#B9S3ayBq?WP01fR8{Q*a))_U9X#Ii-%? zd};O4#-x`Gp3u+o&FyX6C8Gay->^33II~~mV{k(#tJF2JRc%Gj;b&NC*^?a`>=ndh zs-~g@x_Td`?e(q=4pUDuqbyUM$?mGI>(-fkT{^pZBV0q81y=J0xrOnKj^!GPS?y~a zyKJS!>`b!41V?(=^ttI1{8N-`bQMb#=Nr!ncNP0~VGS)SVt8xFiIdAKjLyBfMG*|rI98QSng`bCl>mE=gIuj)5~ zw90?7%8nt9jk~vJy<@iclsTXsl#YY~;kFTv zd|I1JGr}-SvTcT=m;F8e#Vn=7hMM>+zS04=BS) zMRKar7rTi6F%yN-_Gm{Y`$Eydo=|@UH~FS}H$n>SxcZK9TUI$*xpO$PT50}o>a)B~ znl2TH%$L0KXMH0zk=-xUv%STr9fG%YSB%|}q(GYQr~gq2djtD&Yd;|i zb4pK9vMLL)9_S%|S6A!L&28Kv%N_ex#{;`2u3^h*-7)6ddKY`M2ZktvnJt##_M^^O z&ds(dTnDqc+DhIO&K_37Ih3;6f7)&HHQP}fYPn_~EmX4(aQzouJX&(y zw+&&nP(o7HpRK;1{`NYlt6Wn!;_jPyX!hHgzj}IG+(wV!V!TKGncmlLk?R`3-6DEl z+0N`dE~l8y{@wY;wcd5bxzGBEN()s^;eX}-KKWb6gqU!cZR{8sYspz9=dT#k!C1QL zcYS%%JNQbVI-Uwu)TS7jse0VMmcq6K+d$h>>ndS8{YGo098hMcE%i;*9cC>(7jG~s zsC+~TmsjqYh1k2oQ`<`CO1n!8(o^(Nk+s43fuf-jk*~^6;~t)DFXjN3aGhBUX5Lf% zy3$m|D^6+$(^Q;b|7JU5dC4o(YGpvMx4*c*XW(HdRvW@}#W~0pYsi{e?83gK?igRx zsp=>-yB1al7?Yt>vkE#{%kXyjHT{}x&h3Wo%P+8~-$KJ?ICLSZ(fiDkIGcQ+%#Bov z6jlCF7il*0FK)4=on@Wqv<|X_>4{L{D6R=OQJJLvX*Pv2PF|)w7tM61qL>$8o96|e zt_a?pK2~38qmAd(8P*g#*|R#I*n0^9bB=N}a3rO9N)=zna1(VH*Uss8cX4fYWVbG* z>tGG`Z}=V7Z;auk&#?|k&;T1 zzK9(pToA+J9m{Ru0nM8(eSsP$w~}L(g4z$LVf13k@{5E4g2Gqh^W#KgkzvuU%1oqX z#2YE7EYK(_nF(+X@vEgT&Ylvv{>*m6f_Ex=!}IV)s<|35DlguP0@Mq9z$2XE_VE+BB}{#~lzB(ZBxjQ4h#V=aZl&V6rNRkIPunodezqeO(CW#5 zNSPza@(y*Q@qr!!C4d=FNV;cy)VEW6*yh3?)+hFccAXEIg_Tdix#>C6`ubW+{ftMP zW_#;8>wfR(V42MJF&@ev!$LS1c1I>E8?~NLIjh1n=eF^Mgb~6gVIlvS$wy5zx~eMP z7dMtYN=KD9C$i@_Ketwh6|ZxdnbLHA>b|~Lv*`=;Wzb_;Y78*if*0Hl>S1r_dF*BG zIG)W*~hONas24~6FW>F|LOrdMSw{jHaG&dV9jd-ZiBpEZI?bU@o4(+0C%o=73 z-4+N@$;hK~`fXj&uj^6fK}rYm@h)A2sX-qBH@7iZSdYLF?F2Qvd+^TGjqLD_^ins# z%l}D*jQoZKl_-nR%Und8jF;&PRhq3-O=E?&M7yEQ*2_ZG?jNQndzJmkjG>PMDSy`Z zs;@CZ;P`(55^@*#Y6MYCc)1gyfAq+_OI@Yond=I@(6oTI9IkZ{o3AL*>QlDgw zrH?Zg*p}Qi_B-RhGFulh*cs!!H>Yvc6!#!>SCH4%8qt4uBCG@KMgxE$t%;@>87 zw~Y7XswBWVpNLY0CB-W+BHQ4@F46_5n{a#_rN7em8F}C;JAyt)3(OFD5jcwZz?*If z2I+Dz>GK2OnhEXN0Y+XjH5*=&Pr+xO0>tf1=#E8!7k?e9bd$i{?hQ6-R{B2Jh=kL4 z6RH7*F%+2J{%BWgSoA5_$uaB>sYmVs>by z<$_wxXfX91(AC-obay)5;qNeLU{Easd%12zZq7)z@4oQg~n>gGdtX7O8~Xo4*G*CJ%uUH#;{S$ zHK^a^!(0`uy;mn_7j-9k@FmT%RoDQ=%SrkI(BQp*5?*QaFd7wknW693 z6nOIeV6yjsZ*UiU>MKyx^26lmSsZMXfxdtx+}5tY~b%FKpWvY{7rK~N3Jq(%mb)qKvuT{wcr!< zM|MK7u^h5&1hVc6ykQ#w)jbG`GH<{s?*!K1CEWKqu3QR=mEX;q6i=r^pWrmO<{!X| zy^1HEk9LoMGhrp*uU|p;>>E`LnrbXP6;E!1^4~?|>RjN-|HRC}(Yt~D9s>8(@zA`f z4?T?B(1R;UM`2F+iR^BH{C$U(6hrQ(!m0F;Q5#tLF=$USyoa1lr=nF7?sVJO4CHtg z#J)cA+XEdGD-=1Rapjy)zHI}kjw@fF*FgPjH5iqP%_QRov|+-~3tR~G#F^0j zD+r{GK(~U1#Rwqf`$7Gy2~hg2DGj5xb{V(E|e8gq5Eq<9byR> z?9)*bU!V`q0tr7C8E^)7e~OWs7d3Gh^w36w=N?V{56JtG$a11V8xIYTNnjj21Jn5r z#N#h;%}OJSLuipm&jZW!3p6VdFel5M^1VDI;W|K$^KZOVf4un*b?4Zyf~kCs%x2qM1W-_7orbB;nObPxN%CrF^z%Jz#jZY5%kz0R2yU)ILS6J zdRsylp$izyDtHsO!Nu4J)_VY45yFtp_nVUzi`l&@_?I8%E`t1BS?I%sM{kmCS-7&TgpP&cro*$gcI~7*wBla88bcagrS>A^kC%jRDub z67F#ycV3B~TtkFtin!C4MwKlFRv=-Z^>OVqlLW(}eisvS(DYlb$%8oQctU_Lb@AxKg6iw`H_7nT6-Iyh@e6a6b zC2T>P@mI2xW}(B$9DGi=#7D5T_A~39_1KPQ1lG0o=po918{jXTwZhro?7b6 z0iq<{DqzjEN-)kVpjSkdYRW~F6)^9TNd!Zh;Ia2>O6Yj7a4;17U=-!kP)_lr(#~b6 zNy-RGBIm#Ww+u$Ip6G3W4BQ6{>@G+t-v~@(4*CT6z`yAV*k553C3J)xGC(_i}GGNMiTf`GeMgbIvGp|d926W3(h$r#fx3RXc)jNQ4e_H)8L8i1Nq*g zSwpLfS=3B5x?0QG6XzQGP1ezhv_5?WF3*f`Wha2o^e3oLT(|Y5p`JeU9{?0yg1)m0f_dT5hec4N7 zD0vSg>~=^+F9+vN@PLt}k=SbwW$P;1v-7V$O!aXyuo=3|J zT=P{;Gw-tY!d=`~%&2^q=85s*8?g_0gj-4z6hBNJWtM87C{0gWl=>g^P4lMY*M{)= z^lvpXY-@O|_l`PFIz#$7Q>@zNDzm*YP>-~JvaI|TzlRTqujxKMLUNAbh-joR29;V$SJBE3Pk;gqz?Dr660gPierHgMrhsD~Dy zckvXo7hH8yZ~)$D9r!Hkr#=s^_4eRut+3gI$Kg!UW$CKCPtHRv=LVQzubcBspS@kE zN%o3El$tKC?vT5QW$6p&jM-8%Lyfctfu!JXQ-XExs*r`2k~UBu%8xb*FZeLKg8hZx zfc3H*c_uAX2FU4BF=;j);fSn{*-(2HT%eT$mg|aj(HRPC?@BU@_7^YHvE(+m)NVM7 z*>!scyJTm!vpQqo`D!4RQR=8qVIr$KFy(@AKG4|zw|`}zZs>yXlCQvHAe3&Easy@p zT8Xh_4(jD(hO~MFXY41aBkd`+5ML1+_Y{6vV~oSv3aI_3>xQ|JO?JKsNpN2M2CmJ5 z;5uvttM6ej(k^tCqK1TsljTY3Z1uKsTiQmla@)wH9reehUr1*_B7U@1Idy@@oTe<0 zb*YZ@o-B28vE#OG)v`Lm=Wc{w&F}VpTCMZCtRH_S9Hv^I@m3{iq_DPPa+Nl%vXT@d_^QbhWZ*{R8X$RRhaI?~GwApRfim zp*5u6Vj|5z5lMs7XffD(xP=O+IXO&Y;n_GT9w$$n@^)S$cc^t>UZ8}Q)9l5T2?xnA zF-0sb)`91y9eND4i5KiQv$+E2r#ob(_*)*Xl#;5EJiyR3FG?rb>uvP4dpIA^ zRrq#K6GB_yE@12J59Y^m$cxvLBpOfeN!28eSf74DLAF(29NZT0`4{<9g0dNMhLR>C zk@G3G{EXg*On|X4@3_nM+nt1YWGc-ppjV%W>ucbskE8U$Ql|-4_xu}@o|4PJz!TxsZ^3b zD8*rV#VxMK?O><(hPAQx^JPL5Oo7GI&!Str0)~CJHB>(hPhdi@k-pD9>-bSF@uM_L zsw%gaPT^Q*3+NgqTU$)a!a{wrP}-$5SI@eR$jh;t*Dz)T6_~&(=WiSO*UZNkqv~{? z6fbX*E5daQ;OF3aOm#|t<@hLChtG)r(hj(;^OR*Xn*_53O8TD$E9l8~Ueth|P+F@2 zg(#oImZYfg($=iKRxk4(`>t~WKc;!)GU{VxI#71ASz+T|@IoL*NDsC)yMgPzDV_@R zVWntwas!;2mGNC%kz7SKJ}SO~|C`!Dk(mt zq1r{dPPRc-LkUN>w_7=&qJIv}z(YtkxXbS0vCcK~jlM5b4mvYi^mF!Lp%OU)-}qUo zli_HP@E!TVtjL82xIC>Y4V1e8A6Q1-O_#8N`WJtP^j9h0(#rZ4gbq1WUgfgYJ)Tb9 zbY&QcbqcaVc8t+kUu9<(&f?3ouUyqNP#s92TF3_IokG-~KYe}Z9?JwN1$k&=*fSla zGjSBuUJ}7L-Nv~ojHQoY8mbEThN)Zb*?f`FJJ38hHu%jyKGeopEIHz1 z@`)Cen~{;Mv^9mN(l=5)no}I87IW%R0YgOan@3oBzB2rcqQVPfo*5B!Bqy$P%97;&!{2Udi|Fck-`if6{z8wT{kV zd30Ed$QKb}_#@9KcR@KPcK9)~y?)J_#iux9g>HB*S?8SAfl>FL3!1@lp&v#v{vu74 zrUNUp%{5W>h<71Tq?dzvEvQ;u5&k7!sVvZYql95#`0i>Y2HN_5`Zt8i>Vpizvd~|y zaF684>*?v~pzcANtVTv*E4SG{_>Xbc$wjV#UtmZzJ87I^1>M~VUGRS*`k=6nIM4*+gdf<$9 zz(}+g;#<-PWvDz@S}*p)3!uIj#rr$);3}vMr>?4yeo~w^7n5lk9)%9GWm0^`Lq<7W?5WyS ze;&UYe5dE&Ww9uF<*IUbdYxP%%W(_g3V#YBmm9`@=!UH0OXy>Dl>4|x^K@2Ppm-K# z+z%8AT=%aJ-qCupUf`YINi)btq_5;GYJsPrWso286V9X6q5tp%JV!a;dulDdkXFbY zNpE2iuzz=hfBY`(f$_~Q2iEBVI36qXKADJniXEjUVpj6Myogxmvc2E>j~#LPqmy)( z^j%&{M+i6VA4XqouWz!S2eVqG*-~B&Xaz&*uKwk!q-K<>h*zB|R-*AWI3dt0WLnFd zPUNDibXd`dw%)bUeZgh+@wt=oCbmpn6PR!Pg~qGn!Z&z3xN^Cwx+W?x-(<&{53DX) zEnlqfrgoc0(?}V)j)#{EpP<$!8EjQ=5uD;5?t2!jV)%GQ{1w>7TA(<2A&!KO#5tiL zi?QSFYW9C-wEdEeXFp&j?=aac9+1b&Z^YMfP4T>Q-V_bL@iCY&@GOV{#~kcr?n`vpb^4h5(B zkl!ErVwI&?m22Wgb$-OJ@Fwapv7P6l_W{u7nE=T>k@n)x%=lV~>w_m)Zn{|=6xBBK z{LH;GtabeZDK9C^6?~F>6lS1IU(@tQehO!%A9#&8UHa&~8`aTUP)=8BC|AT}Qp+g{ zr@GumIp6i$> zr8(Z>I7*qw6xRyj7D^*CU{>I7UE-C=Nwh_PX)Vux!cAX+Kr;auYm-0vVo^!=T&XL~ zC`PwtiTg(++rdrY#s zgDzdHNrHG84+XlVpAO{Kmj{LipE={DF1WF^g>HzR9`+jj!j4)+{5MpGYz3nnoeB466+9uZd!`_!8cqjfkHWwCVg1y2Zz$5MORg7WPXQojgW=IyvH-GKderZInmohaODX z?Hk~9;UhzFW_@>Zc)a+|=_)P~@3N`dMzbqlimEx^%v-pG(jM0e`HV=hFnVQN<+!dAEBj_ukA_v0?=THdbd|+PS}r&V zs9GjpgJ4VRJ5-iZL4LGY*)4@=PNf1Z3E3Qt5p}Yfx6Qo5J^QwCi==>aB907@T9X{m zsY^BoS;NsLZF}-#Ex)|i)r_pM7bBPZh*AJw5#ETGNj%hN*4a<=PDT^sf^`HEv{qPA zEE~x!4UzV`?#MY&c~p?@q~+|ez+LU8l~2DN?5FiLTeE=EP~IH=F>HnRfvURy^VZ;9 z1GRW>bT_y=rD*zl-&=o0Z8PsFUkHl}@2J+4ihIu}Kg|b5bM#%XjBstWVe zS?83)>To{XTtxGEe$sWOX)i!`t^R>kfnhw0_&3yF-lGnlNY^=@tTk|2%MLnXJrYj1 z?s;BQ$-HZ}Vhw}&{%lS*^;^(qN~H-AOCpn96~V4i*d=`474G&#rO|8d3kBF#>v<0jTo2BO7p;3?26?Qv2h1UsHNXeJv4otF3TQ{9` zl&Yh`^2poq9ha$g5%O8bt+GIV_YO6N`LClut#Ew-zfRrKJ=zhR1R1=t>%LP5Z;-iQCymyEGr5BVT^)Kj<4qYrnOJ z^nhy`S!14cI=PlgEtn7rvkv07_6MFvih{}S{;tL10XD&C0@K&8q4v2U(3UTi!}w#p zgVf!7Tl{Jsw?>JRp*S*K*=-;3kJYhMO$=JoSbq9N z%t<;x$NN2AC>BSHS!<}*i>#tOm=EEb*fD%pdMYfn|DcU9UtEJ-W4G`el9%ulp@U%4u<^NX|~dCXKr)SsI0hYG<(hS!%46fyJXH%j=CyaHv-I#f{Ct?`Yo*x zy)PzMHH?eGJ@uiy)_Q0cQ7n4ZXlZPt?Nm*ifY;N_Vw6)4rr<-yP(ur~)+?b6awTyI zxhYLo6XcU9r~T5Z?1b~*dVBq|5G&SW0ouoQZo#4Vnik{;{Ztm?r(^i_HI^CNsd^sTa`8po`)q*3523 zN+{Rq1pW%8lUpnw)Xu^f)NFV?^8}>g z^AdVNTH9%cf$zHyC`s^{y>tN)%|{`NZ<3pmkNQu023_e)GUnS}^jX|Ye*!ZwN_(I$Bd3^tg1?fg06$*NZYbW7hx2%ABR(mf7M_|O^BRxDZy7Sf(P8DQ zz|HN#4)WMZwfj0*NEpmn%rSpE6GatdatG}wtdZ{aOnn+VOcvtotOIXE)&au|QD>Ou(<$zEeongbQFZL}#bQbY?sJ`>mUdc*9r;3saVjoO^ zN*KkwgJWPUE0~#m z0hym81wUT}J?~6TD-v<-!1GQ!| zAvy0GF9dt7{E#D4Lzu{W3183|URG!USzWVm7^wmY8m;jhywsV?OrT@Z?cOl`d`jpF z+`(-~uli3o#w!XQs6+R5qV0F=8?ajwSpi-}Sb}s&&MODp#Ym*X{BADjG_7{_Lx$N| z;Brnln^;b$d4A#zh3k-D(nh#|b?As*28Lq|=?FU~l}&MqLpEY3_^y^h*Y4E+7!IBY ze|jSr-M*m;xEUlQPQtC6O1vJ>A3in`)~{B;8+3zy&vbSP`yo+f67(3yLn6pY zXF1SuhoNFIimh;NL5H*-q|jx9DswC7nkK-?y$&276VY9~9bbi$^GW`j9cRe?Xx4_F zXext5TgWi{#oq8m&OYEn?gOQ<0W~2Cdg(kze+xr-R_KgUAv=k8=JTp#w-amcE za4C9@pTN&{0>wI~?COvTIu5E~FQ78s6aJ3;LTRTZVqn=@D2zZN5PxHV7a9*;**B~u ze*`ScW|queqPesTFclGyP6;W@{HMJI40WC1F54?S6BaoNpTaF(5-kvF^Qqi}#-NGp z8(Sny1VSnr?x1Vv5}N1y#Wz3~x+0J(pP}D836e1}ocUh>#iT(;Ki1g?#Mor$l7EH- zp}(CJphOsCs8&T7y7F^?sXEK++lWtwD>sh6h3oqdbT(kp*tr5E*c0d|_Xmz?Gx$Le z_y9-Zf6!~^6GHec@I$GP);bcd*<^c#Ifb=i!dahTlOB%P{m7 zKZ2yOn$X!<<$MG3#KZsRH4o>auoLn%PXJ>h!Sgc)Wkl~G$+8ZRH_d=q$_UvY5BXBT z1AT+nC<6ZtoX%!+&PfK_o^40KXWjyn{44QSy50E~&YK^hUR4TxXD{r_@b`YP>)Q$> zP%Z?DWjPQGamWwf=r+_9+%muI<&gIx@H4_Btl}Bi#OsAU{1&VP?O`?f$>G~}rb1d~ zGhiIY;$6V`%19w@)Rwn*L_8e6|3OYqK89z4m18PUFil{6tL$G9VSRPylwPm&8tn(Iy3%^iV zq&RKy5i%Fn#MU?uoxxh$znt@MR_p|v$XZA_$&MnNyXJAemBt`grkznFpVQWcUOgoJ z?E`{r4POlv5fv?f-Zv&0&`Mr`^@n@#Id2W`^@_s3!2e8l8bfcr5#m6dw1T|B72x8m zgD;{qaM=vUgCN!JHu(G*q}6N%qM;XjhogBtUXyQRCe&kqj)fJz6@TSaB4yA_eg*X) z3sGfQ3wATYp!z_atrRvUmgNl~W8>4+2f6korUfCT2Fi;f!J%cphhm{mLrD8bKymZ#y%*n_D?Agv>ZE*#qR{Ta*bB z$1bAkKz#Wi)3gCl9V@_H4%sk3Z0h_tbMwjUo&C_3*%f;suO~$C6c!XNV=p9vW+n;R#=Y@{vDaiMxQC z!B3umuM?FtA^+jF@GPj#V+N^t{0_eWjLA#b4RkGlb%N zsolV?WP7Y!;NU<;6Z5b!Twh_vfiYw+gB&x|82?6jA^o-%Jw&SFa8wjWk+$ID*a%+5 z1;C_lgg)Fu_^-I=kR|w+)0!9H59}@aijb+z(f5a*1d>97%zO3`E8Kz{W*|ss@EqtU znM(R&3u>w%v9q|8jH9iU+GIP;SxeZloW{hON;0-!RNI{Rqozf-p1}V_d%mQAe{Z3JA z5*c<@x51EBNE!`SbE;HH$);$euJ98trxmyky+g=u)C;EFNLd!lX{3kxhMvH*P<6T# z5`}L|kCe+|GPSti(4 z%WqZ)Hc2g%R#`i2l-C|o zN}LSYw!@_l>OAod5a2n)lc#nr{{{Q@Mb;_&)0KnwYCtqnD(tG+aqjs!4fhMyPW3#GN5+pc?e&U)xjdyil|4j0y`^P>eXA z{)Nt?nXqSi2bQiCb`5iZo<*;v5746YW6(>gYtQ4QAp^HGxds$Niac7XBbKKB(gid@ zuM+Z zX_#Zo*ZSj-8N3Gu(0ld(YZObv>&366BJn8Q+{cxcz~y+P9pt-{l?}BGHjz&SZec&K zL_2|ZG&{+xt`v&^IeCDnaPAso=C($gWsFw(Yt65}wHL4yYm~D^oF;XnSwvA8s6@ff z8UCZ5OhDX+ zse;z*ll?}xNNVBz!W~*(-6KsRDfE>%3)c~DI)&kUeUOh}1I_n#c9I9KT@c?=x=IHi zvG6MbXNvX9%x|4D7n!Zhz4|313y`MAtVG)Y-srke3nti4C_893x?b8zTLQ(fmd}D@ z=_cT*t7Gp6`lJ`^FB?c%l^r-5>}z*1te}?L{%)lk68y}A^~=^FHqEMRoe(aOijY@0 zUu>*;q<+Mf=BTyAd@x0j4HMxayJ)D!Gds7v+_YIyd=-*W>xw-{7Rjyb60)1u*;C#< zE}3n$cKR@u8R(G<A7vp}b0r;tE~2+KfcK3}OoN(WkSuQyGnI6 z;2V&ek4(RpaMJ%Df57hxZ6g=P4%50%Ch5S?v zbp@#^Z&oYv(}4xXVixCHkbWDg5&5lL&O0eaOcKVCKBOzucb|hv{EA%wjH69~4{0pc z@x1jEQyaSe@p|#?Kr8dO-a2tnVw2EwBXh{d=Y~B7U))CU8ILBF?V8RXqiE_8{~|js zv@2rsq9OhJG zxV3=d`L5;oBOF4ULS`ijRd4VE*GC3O1}jz5Z)k(rdt*deSX`s&&fJzeq& z6Tl0=(Jq=Mwl-dj1yen+^fhsmdFwUEb&qL zB<*%6$sXgqlVO&(pGSzyuGG<+`TF{6q?bvb670fHiq*Y|5$hsiBV!{9t1sCP?T5c! zk}Ezv;azH0pBRXhgZX`YeMJ+iEhX3AJKN-b~hN*iiivxUG}t%KM{IReJ!g}5DC z8myK6HuYZmlfYv=0xeVadhdo8@apa(;x+rY9v5f^HRy>vt5hH&A*xnn`{)x9XN0!F z?Y@yofBjhZeRo2BU#HM>=e626O3mnwUKyR_eM53WS9!9&Slec85(eW@^rw<27KJ|b zXmd#VfwX6VjXsb6s{KP;fQr#`5gWs2%WstBu9LV7%v3EkC9AZs3gsnv+-uyG#0gG! zaPqZG_WnMRbUbaLKh^j~NZ6Lh`w=T64~GY2AIXGISrzqs{5;xjQxvE6lj{PpTfhzr z*7CJU+xsV!Hd5bi{>8$iJKjm|S89A%Q|}D%9GwdN{z%k^yn$*Jcf!aD9HE~{yW(5s zTa_>?ex<*u^_i8UQzQ1pyogGSd=U9qrf}A&X?+Wpu)3oIP_<}6GD6Sj}S(O2Bww_-3pyctrav_ z4ye{HB5ynq@^mN66{YrIkml!Z<|!vGa-E9l8D4?zMq{ljX)Axbm zC|kW(A%i$feglCP=XfnKL{H#>Y7Xx!F$iSq9qVgq-{hicHxr7&y+7CJ&i4ohT_>WZ zdq;-PivAIv8z!^Y$~Vz%D?8LhZW;IWcE&8Dmv3s?i_n&!8Y*aLPAoN1XX(DXJ8dk! zl9Evh>~T9wXT>LC6Hj-qPi`XLC;9EO=?nfeOr9P8D*n}<#i2bsg_m%3jhYpoJ>(y4A|4`CD{_@(YwEe-=P8^&81j!qg%{_}=a#vF}GRavB zrry!!10luTTFQx9K|cCSyIfk?z)62{V)x|AfeS`I^PI35jExu7Q80}^ONm$Rx>FU% zDWfywSfqh9Q8&H>E+2-F&C;C&!i1ux#f9ksff<*G@L^3yED|xiQDr42w+YZxmVKh&Nd~3qM>vA9{Xiy2=q=L z;P0JsJ^e#4w_esRCRA|$qgIi+MJ)MDCJV@+av7Izt-KH7Ez)Zm#^FTiiE4_}I59NbOHT6sl#9Qv9wS z!beg~ogqJhYkOIFB{fuJB@b%nlw*taFX~4_maMbt}nw{n~18lbOgRey0#X{&A!(a?)%ZrGSvM8Pv6>nGX zaB!g>R(i5(`sqLxU$;Lk64v{yU|qcidn6rk-w~U7WbY0sU0zOqz!cB`K>~K>KeUtX zh3SlStgVIYQyaC%d?L)%wpKOpZwVo%!;C@EBK=eAqR``xbbyf@B;Yr=1Cw z2U??CiV|9@_tjSLCh}?*mJ+4eVV3;SDU06-ZTT)%4V4hrid|j%A$lt>zGrRME~TtX z^7{TuU+0@=w5Cm61m~42Ma)xNq`i0v?79U=y7EZuMLvuBguCYC(3w#8VCj^HX-kY4 zbDS}V_fzVr`|xOGkZT%!gVL}Y8_pMTtJ0hvk~g}V(j>E_kx|@W^k8|fE{r; zG61GeM!@;{hqI8(60bP>^lqkPF7XvlKN^~0JT|BDwRC}UMgFZkSHIJCr~{$6EHBG! zaziSPH=?OxSIMx8>q*v!(5|!zIVH&#;N-%20#xOi;%?$DaV!;K zKWJGYcyA2$bqQ<<5u+O$CHkZ!*uCrmMktEDLMO;yLTg|~4?wl1HAL{dmFBVx<~#^F z8pb`xkliv*Z`;6PY6WYN2<|Fbc=e;HAyPzoH7^dv1yx< zkEgc`_(DC{TQP&OM6Ts2?QJJ@Caa-0^~xM;Hsyna0(83EKuuI$0x9#s%pb^?`XOz< zzhm&InGCx{rbfALx;nV;%Exd4XDwTAJ=A-!2&h3cRHnMByRy@(yb1dqT$b!h9TN}( z(OM7Tyz~-yqzax>u5z?2mdFY=!z?X40rzXPRLRxKRZ%R@mzxDcPD+O4g=uBLfIq|O zE46Vw@`SuwJTb~89N{c6FM^$Yn^{F@O5Z6DU60)J+=;+wDaKD<>pv?~ex)b-mzX)p z0%f=Q*0V0WwtERA(A0OBF<$Ftwr5w+A~^k>R+lL%$<4XGFTJ_X8<70PLL2NXq$j;3 zM!2iED#;C`{kVa11FBTJ?eF$6p*bXqSn?62ht!2ZVCFiBO&~;IMrt~IFSRU)4zj4~+^w)tJ+AyO(DlJCAXNgsJ zDoIj#azxl?^)Y7Kx2S<8R{3F0)C0zsY!{!G)PC$3!s@^C48o*4)}Bj(p~Jcl@KbK z<_feiFPQgH&F~-L#ax5JW_wClJAD&_EmQXWiciJX4=W4p9}$Qc6P^^kF=96<0bJz= z|BJ+if6Dr6>K;B&eGz>zx)h9u&!T_K-NDI8wSF#0xbLeQEW)OG4rXYWAzw`SOozS2 zfVjZ=pv1TFEmO>t{{B=a$@@O)adb@PevvP!!6%1WCa(UKAN-bgedBm(&*t!E;qRl{ zMz?l<5eTupl*;vGU32PHt^k;8!<^ga98%^ z@fP%Kl?{RO`}*_LIVn?u55d+xP&%2BXF3?&GRh1ajYbClPHh>#Juc6m3h5{PzlF+? z`Jx7df6Z7Urk!g$FJct)XHVQ6|1t4g3fD&|8^U{J2xaS@<5IMb_T`)O_sK&ON+s<` zy&kH?XNq-QY2o`KA1Nv10=jOlO;1nl9atFHrEL(>G7QXcETW#bsO;0O{i%~Y zF{x}^&xF_d4m?)A7BMl?yv$7?UOPkw^LOS!U$&%uiQ7{%rN{b;^B!vLh$S&=G8c&{ z8hKOxY2{8Io4EUz_-j(aZ{GuJEpFg$8Cg53OjOS3y5Sv^UZfGf8yuUQDLF3nqi?0N zP+8?Z5OD?g?|LY&IYM6-ESa9gcSgHoM?-Z!6>R~7=m+_iyco>6J>Yi~3a$6|NUP&p zp*{L37b`roe`Uq*eM_VaeiJ!^+NG^S*Z13BVz=E%IwbA;aH z%oyz(pOPVEY+{xaX5``{ZAH2e(>23AsW~mF_7lFODarTJH~O#pnf8D!m7?7l-8EhH z73`iUZ*Z#c7(52mv$p^(bsOf;Gw}~Xh_<8k;50LyF6S4Z2e2+MDLEy5kM=$ICo~Fe zQx&LYRtS3%wn-T*<&)kytAM&m4Hgg9F$pdJ-Gu64IQ)}zLmlgejO$Q;o=@OuxznnG zljWb(x4znTB2aOa)E&UTH1L%2>_a8(1m_4prp4$@`842oyYowU0OSXa2rCx3H*8zj zb9an$GPpT-Gf+C|O;TU&l{r`2Z594sLI|?ODw2m@fFy!NBn&JE)p!Xr!CWsa1Q*CM zrLniE`!NpLoC$W$VClePM)7a61?+jt8AF2!W`Cg)@~K^;QoNCBTlXIMGZ4&i;QIKg z)v{$Vzc?Me1E)j==aQMM#c2=p@%je6u=$L)5JQRw{KPrKdb*3y<4{R!%#LU^t%1CY za05)QUFlDkqU=h8wa-&Y11d1#$}P9@}V5X(|pAG~AYyLbse!j+dVTqf9mS zgmoa5q~|mrEhoiL&QIBW?D4>Ow*k6R1~bWcNQ>zotPdXHB#?_=rbgK}+Ma4&= zs;&Y?x|aL5sPc8zV)J|GCnQ!431!j;nH5d9l~ZT|)x|-u@9pQ!sGgA*K=sd~pAYm3 z6owsfF*X+8mWHWe?%wWvYFThecXPaEFRhC9Huy{1VVmeHxd-;mOJXDEKBR~3*NXVK z?|G<-RZyr!o4B$^-jBW#nKxpxcY@MISZQ3;N`!g_xj%bgqkh(`WK_|^fPY#KozCrK zq547nt^Vb#81i4P_TN=YT)E}qYBSU!6sa8`Nr;rs|rhgslfFkv=W*uvfD5R(jSG&KEYGkzbf z!V5&^{_QrUvC?vJEh=tL0Fv2lZ?!KQ6`it@h%J^Ix$sQh#(Hg6W$mnCP)BOWP6}Vt zIkc!*Ojs2xqAjKYJ3uKb7fQr~Jeg|79?P;TA^Y^-O& zJ-kVb#hKAWoEhlCSyE>q#n!=oP~H^G1YQhg9aJ`1sDg7iC9OhM9bp&xX|H3sNi(vI zO|-!ZP2Di>)dMApJLD7|WqyTu(pMG>^=4t1+t01j(8*m1PtFXOPHKRM3dgP9U@c(E+L7CkVQi49gtmSz!k@&@y z;y%0_#`U78fp7OEq^Cjzj&4tDlXE@A*i1dLvP(AK|u|s^ppBh8#I_61jE#Ky3gfm=K zPfJ%>;V_PnXFH{gcE(ogjd_V}#FL#DW)U<|>dF@yJ#ZN{7byTF+g5Ra^UC6Uy1m^% zs3IL{kK`@XE7UO*luN43wi;fX6K}Sk18rW=>1apOCA1j-jncq1`4>!FOh>K`1P>aoVD#%1?2qP)yn(Rbgr74Ajkeu4RPmkiFL->saSoNC-BG6@+Wlkw3J~ITwKQ10y3k11^%5 z(EX_c2D8hMu(XCLXgnlv4#Vj*M%)H=lsXu^KQKFPlY!1|?k3HgA7&ZnBH7CanVld< zueMoV8w?hS@>XfS21D%;?FTBap_7KYNY9Rw~SJ>s$<}aNybUz&g zW|imYF9D2Dc2}ncS_N*KvyeR2h>WGVg@<;s@PYJqGFru)CHNXkg{ShSgJAVqi#|D` z(-3IT??xGW9(dnk8IUw$12j{R>1X_$U3QL<>p*G6v-XbP`U9Tz=it`rg6Go~z)?eeS&6y8MUoFD>}02iFx6^i&V~QK0CrG%Tw$aurFt%8^~Dkhxm;4qDRRBJR8e!Qs2S~ z@vE>)|JQ238nE+LZ|jyh#cXUXFi#tcm>;OX9;mu_NS-VXp@+oZG>nV~nk^eE4wP4E z;9aH&&2c(!2X{|tGEq>`BlHUxz!yRS&`p1%vcd=ZA#m86fLMxWd7OtV!ail2HdM;( zYv5hm9CyWEkQaE_7eH~&VJY@>V;6*z&(;46 zwhsL-bc;$Anq5PUN5FBE!!60?axy`z=me9d3 z#0G;OAkNu|s^f=1tZpaYP-o{0Je9IlPhYE_*Q@Kp&F=80>!JW8{Y7DuE|w(PoCc*F z@;At_SVxY)z5m0>1^3f?n0g&**RU|p$I2U7^=amHtA|DGg{+E@3M7^b$dVFJ*Xbd> zrI*Qe0o!p#(3oi)1$%N;`xx+k4TM}Um;aGgrZ#k=mP%EDnrT3aN*~0rLNeTE+1UvF zx%OV4t`!S@336?)QPVtZ<#2{jw~|i@D1F=qAYowum_e@M_s&Qb!JfiBy%4(BH-v5Y z2<`=U?Q-yW_BU$lfAqQ9oX`$qxjl#J>=7`&J8&EtLIRMZ{2BGcJCK7az}%-KzLff@ z599&j2(dCT?fHggEY^nlmiQ7vnY0t3t;QKv48@VhbfEOcRm3Z~uE=ZDrs`QT6d1}W z{J32N=2VIRv0d3dVr+rTr6P6#ld&W;9GyfynjkHbib$iS=29N<0%?w#@>g~Rs~jYx z{cF~@w*xQwH{3y^AnJ*~aY16&L5!CS$B5hL!R|B}pD!0z=9?(VkSfQgL!>@Mt+f&I7c zYW?*-_HZzk9Y)bo38f^EEX&Do+K}cVoLmr3i38v)I1y?{BdqDx7&8|zHOHZcaNYkS zXxVPy4K9i&JvF_Ppr83&nnvUCDLfyS!zE!_euquq?wW4J8E35#_F7|%5i*)-G1@x& z8_WwFqIq4zT^FPy;xaJ~7=!Kj3r+=RV4QFUo}%tRL;B2HRv3TFw%Xs!x#l0M1@8pJ zWe2J#0jU5@rPsu&WG<`|E68f_;7;O$EoN@Aj=>CYZ(HIC_AI+7tbLooS-4ZE0XvwF zz!yFyham%V3qD55h~vPll=^=hodvvARTjoipL6dk9^DcOg3{e34bml@lF~?nfYJ?8 z0s_(<(h|}sNH@~?`qs($GsDjrMtJw0v-jF-ulUyYNwe{-5A4ODj!Ig8S^ca@)@1WK zlQQF-k?sX=vRqnQs0>A)J4R_Nej$xeKU0&);1lrqH922Z>>tbl)+4JL?7XVI$BuRn zz}++$y!GE|Rah3gFzF(5caK+lC<#&<`A6xsy9DLPTajUr|ICFECEUm~ob*Hl*U|L3 zC;tWK>K)~yI!--FU9zuQPCYCh6Ar?Ox6T0c+sQYSIh-PXZlC#gtC*1^1HJ3N4i1l|6Z-Vo+ zrLZC?JH&QykQDLiJMqrH&Q^P4WKZ~7WVD$CA5K2$J$d0dwT0SDdINjdLN}}1PslBe zhwrbqd|Cp34&UGv@3b=r4v7KQI_s8|&pjcK+(}#HUcCK8aVC=~A{?T_L}D}PowQdv zCo&5{jF4je7}*eBgJ0SjIpJiH4#Mpjr%ly5!c;m}x+2aIz7+>bRhdzvQ56N#ykwhD-FxAtchlL! zA_XHS&B^AQ$Yr}1`tB05Hzo8Biiobx&r)4s6tnA(nSH+qT6qObV>`TG+?LLNRu}V* zIp3OKWp&m{ezh0q(relWc_&jFousYa*I>#V`0YZ1%*xhEiuiW=;POGlDh`FW3 zv{?pdq3ozJ1DZ~f|(1asU< zx}bfo_7jc^YsCKU3uh2qXsKQwJl}fi&w0d6?nI}O3pa_Exv0lmMIJ-}vx0 zq9r^QR}c%Vfh(^!%+W2lOD~AmK%-?~-r%gY%-m;fH;}rEDKkQU?hS*K;?nO<-y6a7st_Y8%!bV%|2rFMkDkA&=s_hPl z@S#$7Y~?Z7#3ODuCOE!e8f%aJv-!O}fGPh+-U@l4QCz(x{4HITH1EFi$}I{vV-2wZ zD5?}elB&4x?8fd7&R8tDk$uMPfj({xvAWvYFs0(K`_vMbfP3EImSL)Ai%=RxzQKr6qSS2(;Lu91(Le3(8E?0*4JAkJUsF&q%8ZxiK?1|UOeTE{d?sc@+qFhr> zdImp)U(crYMhl^(GEMN@Iqpe&r1Qd^!Ft(3A@L;aZ30hl3gmNLCxbu)T2**%3fo8A?ZO-QO-o8~%0uy#*jE}LW)o!cfSod$y`Of_J;DU9%34M4nAj$yEalYl-*nkDzu($z{J`broSa( zH!+JCg26jk`bR1(&1WiMCm8uI@WWmb{&c(9IY4ojv6fgL?L&CFr7&3fq<+MRC8@Ej zRSHSR#EMc=CQyc>@%Yxxg%w?~PCEmb1o+HZDioJ$z=5()4pHT^#S?I9G!VA3FYBF# zu#4t%XF7}M^EVXxdf8AW*-RweLQ0cf!)$thIT#nN+`@Jtii+x>L_9Bfb>xN{i+5@&kE3*zlI%;{D=McZK!Bnqm#aBl%#` zDgZa=zbNyrMcez06p??G+l#Y>&pZ*u=Vf+2yO?vH*tsR#n0uMYc?X}z8ko0sl1Gmd zj|xSxjhc3U)GGs4Wipk!USshI)zW13p&C+FsU?;2;!&?D^XxGoe0Q61{H-PKV7N-= ziI1c{a#LlS(nuL4_mW+R&;S|>!tMa z#yx$YT8=);KW+(oqOh#rD!bC5JX&Jt^mtcG#`L zHG;F!x&@|&zot4pQ2t%7=)0<~*FJH;wD)p2saDNMnJ`-!i8F6l>%DUFDs`J)#wQs? z;i0M{?dJBsEb4LxakJOMDH+KZco$d`>K@)}my-)=ne;mTNB(cL+R{^DpR+amM<|-U zdCSmYGs->U_GR{do$r`2-q*xSFw21Ltvge<&_eDY7-()~rb^@vU4+U+r%i6)`r0h>92Uc)tougrBJ7Y;s$e z!L)s8uY!X^syRlCXon16)R~y~{$WyX&u2%{0!hPDdIY`*Y>PA!|5n!MX7rsnIaZ8* z>D#I16-RSZwy-uvW&{tX>`$7OS~et^_r-IDKdN}lg1Divnx5e0vU;RFN6EN%lFFx~ z3L}lR(WT=e>7;b8;ThVcc9*uf0c*WABvd`MR&rd@fs{jmyw-3jzu}AiGG=FN@0gF; zD`}HEGSoGtdU7PWMB0VOYjKCZFe)aUnXW`!%cx6QcX4lIT-wZ}c?s!~|Ag7;j(1*} zrCRDcwLC0#_dty;lpc7U?ekVE>#cdyO+@u&0G*z^zD2T#-qntjkstNMdnx0Be>$J5 z-}rAuHHobe9n`z1qs53dH?$>G21br+P9Jrge_wR5*bdP@=-b>y!H!9zK4koukeD3& z+wLMaFb4a-iK^h+tZi1BOB?VE^PM`b;Iuw%mW-8Sma*sO75 z{Fk(os;b;VxuLaijC_Bh{hj3xf1B0@z4@VOjUxGp2gZrHlz87G{kpQ!kbT|M_wpdM zAQk)PVnc0&)Ecg6(XAd?no=Y6MDpc?T&cT4vQttREBm8rN4149?^<-&=&hzR()8D2 zickzjuG3a;a{ZN|A5sejCI%{`f+aCCIyaqNSZ=Dm-U#|v`J3wTT2L*oO3c&MP~v2l zY1}(jwNT}hp~+2nqhC_GgkM`{olcq+-OhI}dP};|(LbX+{FA0K`}zd-fXwa#uZ>eA zQY`pB?MQ0F28q!I2lYlCyhc^EDl zd=)+x_%-=N%BjGF(6R6>?}+ijC>*^gK3(h&exLD9i`Cs3o*auO${kfwX`A;av)aH4x6JUDR2=wz1#FHHax5JujxJwvgG;mCj)Ec4!JUzZ163oV z?fPyKlNGRq$&2OJz9RmA^u@*#e>LNf++Lj~m33;^naxKbf7*pKHQYPcB6OSj(ky3# zyHA;=lvft%*L*_$;@t&K7d5}O zUG8Q4>%U;+(qg01M>SSzYO+38cw-&0nnm97*3E*=;bcuu7jK&Vh22a(iYn45|LEAX z=!oHk1N z9)-D}6s1;z$6<^0pA{3jlTswOIyf4h#?9uBj_&UBR_L-`z!()BhwkqPb&_#V9WCsV z{}mrQEg}aZzXS&*1yj3+ng_Q;a?tmfDy9khG*$mbnWw)5D?f-1<^X*j{$rVzC}kj` zd2g;xj!HU|wmtP4+GbsZ#^Pf^*PH8W)t$yoV~6jgwp*=bv{RR&Te3pP;=Tzj4OL3h zle45(7W6TRKg`lR`a{ze_rpQZVgp;7WL;Q=h8vAvtW!_0`ln z8;gAh$!q)Q&Cu;WuMN~{N#i0$$V_?oaciP4rFGhvu1O3kz(ft1K{I)7c2YieiXr7=e>p#K0*=3_aNzSsCm z%fOUulo*NZ3QtVkp41}wMsjNE$Usi}s&GL*tzGpMk1l3}*pYa-3KQskzyfE5g>bHt z(J5#>54}zPF}XzQPifx}Il30?U(sOI)5P!1gu9 zT;~0*9@hiJ3{8CF)avk+!P6+dr5oN?&8=-!3yJgXbKyb3a;XDTj-`zXj;BU;O6;X3 zDwFt@Al1)Ls$A1=dlJ{D27}8Y_r;nS{tHw%ZQ zSoKTxX{=UUDef*e?}f&sTu7Lmaxw5OXt=G^#rnU-21E39QEG_|Q6+2dO&514ZS-0G zGsaN8rqaTRi);?;Nlg8ilx(HF3QhFNYMSwxua)l$W3w_wTq}GF`^FM+id0&d}={O?YlD{B8Z4wIXsu@tsfbZr615>St$(|v?G{uEVw9yuCjUy~q4r3qZ=MQPOFr`9 zcA^%LLyer0kYjJqjYisePc?f70*MDcOiOB*HY)Vo z*{-by!TwuJ+obmcQ(LfE_tAcA&#(#YG@rUGP0Xx!K ziZ>ScE61#j-QzE&R+N6S%Z1(0TkD*YqKu3#6!Rkbv#8?oRx>ux`D3MbC*C(s%AMBS zd8_q{ej1mYVR?LUlsf-)G6z0OZWtU8p5!brw#D|1X&$>Qx~$a9j1CSG5q&w z(M~yiTJ)rNEz__J526~$YwcPoJ3juIbRf{oDPY`9w?BQ^^snO@YbC8)DYZY`e%0%B z!4Jn%zi>Y48`A|cMzWsDyf?0*I?;Ahi@iJbrf$N=z$~{D1pB1W?H=Hr`T3HgHP2FLZt_IdWtvh;{A zt_(=4@!`>q%Rm%SsWZWn7rdno)^x${=u`}s_0Pm z*}02kTaY2UZ$jk2$2xB+zAX7Fed2r+>(A-&@d321x5Up$*GqqHcMblTQ1;cM7jr%) z2A4}~(zne0bMC4+nr14k-3ydV*z~6Hvq`V&Cc44&&UO8txDM%qnLf|bG<}@^D|vfx z+MD;!uKeddublis8l3*O+@%Wo@{3vPMz?pqN_g@7__Map2E6Q)ILZ7@`YyU&=91ZS zW&bwYqzpy1r;!>-FJAumDDvd=+fJ$bq_>$q|12%f(Y!xq&*6XKJPGuBSK`^s7fG+* zy}h5(PAFrXi>;rne6CX2t7I;p?yNK>ZQh4UFULN)^nBIFPJsntj<^z8Hf5`pqi&W~ zvFo+6&X8b_#N^l0U*39WC;Xi17l+66N`E!Wq|bucZ>PKCd+p{6jc*&!rdcX>WuzCh~>z(y7Tr z(F!vuRLuU{sbK#kKlLTTig41<<=@E$-U*^r*DfbqF>eRPn@jA)ktW`AqYzW^b^WFF zb=K6>VM%8bm!}SN>-x;N@tI3xzUa4wt@e&kyX0U>o6zu33v&W|h@HKz%0)eomZ;~9 zUaC*`{;+0-GA6f6c^zr$HB<-36pSkjo8>BZb~szw<4`@<7AqR*{MWS`;$E{`@LV7b zc57FBqAk%fGQ-!j6R^JzTBmbGGztm4$BFmfwf!~QQt0YZJsbh`uvdUMYx5OWbe((R@ z7%5z)1AjWi6&!M%G^c{l#~4ROdR%|3jd35Fj=4U#D0N$CsBM~C+}m1Nzv7=7`*qwJ z{kho4YZD%v7?si`cprU}ZnLDd_Svi&?xHT{1dtos>-c!EIdHCtrXGL`)Ws* z@+oRpG1aON$`+g*tcWIYGq*QA@XKIgm%&9aRe7c4R8GR81zT9SUvN}#Zs>maxOYTZ zt{wNik4n`qOa0|`!i7jw_+_MWXkXx)$PR0jGfw##gnNM)f81xjbKWv5E_5!bV)F6e z{74o1A8CeGK~1lXG1`Gom6iUYW$p_Xj=T;{3^`tJ?SY)2rjH6}{a~<4baznMIPYz@ z?^?;?8L_85!*%7C)Oyov^_j3f?mQ~3Bb3Mk9KgS=KT<~E z#E)_(DT2q&PTe&zlDZ` z1vqM^c>l@=m?vsV&G8+#^nDP*!>rEc0lL`p?ZMu05C(0cK4DsfY6-6~?ga(?yZNx!P!Xrq4zqat^~?qo&ah4Ab-?rm`=D2D^oNN=GmI0eS8O11%a&UV|6_U%KlnYcTsW;>`@=W?qe^W2`63p5RD)m{=*=hxfX_|CbUMKre6DdIr`v3^0@9i;e8}A=@ zUK&Wlq~~-r&!C3b#T`Tsuez7S`rQY2qr=<4l)kuG%m9M~}-7k3&8& zD~e9N&~r)_Du}6GS?@9^$#+gu^!_@5Nd8iel|Fi(!+d2k^YjNe!kt*cQ?MMlU^}zD zrL4mMI?_vp(cV?J6O2>i+$-Kmc#-acsay=VTpi-jOYYa+QQl}G?1qW%WzPdaHwl$o zbUmd9#GLz3ySnL8Gq*R{LqQ#s_ULV)#~H1hfpKaQYMED196F71Wi$J|-O4QtQ{6y$ zk20Dn^%kiVRnv*~Y76}oP>cO}?jF)sx<`e@FT~Yo{(aJ}tl;%`Pk~G;i+yFFWKDxDM`z{A*r-O30?Zi4tiWX_5Dt!L+P zin)JygT)SX8b(M%#0%bbC(-_d+MDhjff22OI0PlN``#yxn!PB(%|X3uhc^grj$ZCg zcR3s(jj7GYNxj+cWlVN_>&}OlsTGV&?KqJ!AXyJ!1>eG*wa+^YM@u=-<|EMw90;GB z32x{OC$J%$Vg1oZtARdSRXU7c(%XLmcBeX)oF5!)0y|hy40y4g<4$vjxCOxj?T7K| zJF$*fQ2dEZ^EzB`uie6MK6Q3;(s$p29oulyZGi=@39M@S;ZA!?ogfcA;c>7)X;L=n z0}NA(P`k+J)dk1#Cwx*ry6fN_I|7~)tQzM&gHX?_<=y}_w$ptLf}}ILfPV?Y#ql7f z16bP&^b&nke6qlv^?+wj@!kl}P;NVgo&N_{@Eg?DG%p$b!PfKuSE1PXMwl*+0l7GV zHGPAk-cIkfH_Vf~x>yCe4KNI^gkSFrYMSlPHrvgwk<5MM6VN4a>#*;QUDO7tw$FrJ zHb!g&`_~ZE>pHV5+q~5%2mXimtL?t`s>4jx1O$aCvJ2ivr!!g?MbJoFhK6f1^wc_` zHg}5H{SdV-Ft=zWj;3#W#o6pWL5=m8xCqU{B-9GG!ez*r6Td>4te$9~GFudc%UQ69 z*M#!YO{ox==GR_Zw0&RFIUa^)+2{D7!>;MffhTSRDCA^LR&%=ISKR?lac6=%m>Zxn z`yz^8fgkD2?UV|y%U+Zl(Ww-^@@~7Uv7p@GCGVmbn*pW9d1%``LQQiII)tB|ybzY( znElU(+TbTH%%Z3PmlOtgkK8NneYd#x%YkzU*~RULj`8Q>4KXL$;MuUA8d%6cFQ+#Z{?&>++gDyi zo+}SM+o9YZd%yv|=DkKa$#4mkCBIuPo(DBi8r7{Hc<7dJBW0LRLbO<;(021l z$HnwwAJ8ZV++5r#W8G+wUVZq~@}egs5hYH7gR?iPjB~+v6oDIckDHBW_!ocIQml+R zX(sd}GlGiSgIZlzv{j?MTCB}Iue9(V9;c9KvUWv;uf2z`Cd_c7z+(o`TfJSO&M zgE1;B(%lB7z^par?lQQ zwoDJdZqSW>i~p_$I_k1p8T-zN|IdW4eG8Lh7aDHe23KA)tVf{UJC0J+z|Vfb<^r(e%IFaP@qcyISd=LLz%B-|r#@jjnya(0nS*?Oaegu@pPRt#^pM*k z7YdhU;BtM8n&cHe?-rlZ7!AqtXrDRkZXN_O5qaEYd>S3qZIBnTE7uE0$B?SrH(dB5J&f|@e*r9=(>`|z-TI}6z)_4=Fu5swU zgt4j+_K}{SPi9?9vHN+rFIosWiF0xhDNN;geq?T96-wHr(LBDza}MNLDq>;dIWe%A zqN95Z3u=m&euz%yM*P!P>_P`lRC+HR6Hv!J7k1u_U_1W7zIRhm3-bhxux$~A(9ZBP z_Tt|sqmX@p80?lenw!2TYqy)Tobms=|1~?@8kAlQ-k~s0`W&A#mp44m+a%(vKJij# zXB9HA_T_nlXzbt-JM?Lludo7T@LUz}9p7{RzJT(*3B6)f40$63iw4!};I;8mOQ#_KqhMe(|?@F_R( zW*<3UH?gvLc!o#3MLEv>eEMINgiI)NY{km={{P9MdEzYCRC<2pVfFo}qlWm|BdpLy zyxt=(u);p!6!ZRHo&;r3%lKhr^?IId{XHh!dsSPXA{|z3!K1-c>Out zGM7-t?aIkq!rpY{`%Nrv8Ef|k`*VnI^ZtJ(+WkM;YKP^eunr6O{9&xtB{-a`^L#z= zQtjB6qS#dq-tG)fFqbnkigz$!Q65ajv6QFyq-ned?>Ch{Kh3(x{F~ZXhuGM`g5U~I}iJ5gs1-#)W{5M2If7!c_W{Ak@tSaY0HWw7h|8AvBz2PUDw&wvAo#@ zyiz^kccROwSY=aU(1WbkF)T$T5_CC<(I{ijWo zhlWph!ft<#g+An`3vwTAV!iKT3D5C%XE=K$@F9Pr$J~NXF3%bG9uL%vU0B1DY{tv~ z$WDRNV;@_vHo5R-wS@dUbz@Fzm~Y$8z1Rsmp3D7HfVkN&l_46O0#10KTg9p2v<2Jw zog2r!_XEtC2`H%^g(p0L`Jae8)4k$+&rOqu9l5~mHke7#YVZ=Ns8eS`Q~Vyjw+eUf z9qy#=c)LOD);b{v80!xFJ|i5|pOm1x;%WUnTP*gWqZGe_%KdTP{U@p|S;;vAcwUny zl)a~}&dzjT58tp3^Z4AuSW8}F$dknLujqiS0$o^5>M7QMk^6$R*qUx-v9{Z-K(4H% zFJ1~Bz*=&4`A@pd9@EgztdaIu_X7&R*}?neg>g5Jq>5|2qGY1kh}m+2;d}1ZLi0Hv z@#S@*n)V(L3J!^xSZEt{7u}bCHw0dDQY2IQER%hY*@`B za(H0mtyS6j8vg$L%nMXjZYc$&|FEks-Q)HLdkQSf7u{ck67oXjDr#2!d~Nkx;N9Yc z^Pw(jnFE8<0;$oFt6qAvA-nq5L~Sy*XzSEs;sN`Swa;n2}p~|5&R4{hAJ%lan%N=oQfW>BQ#>MZT8nqR--ujKnx z{Z4A59I(zM#3o%&o|n`-u|}jT6|Tj;Md@zE{~MF$kJ58^vmz5h4bpy2>k^n4Sz#@7 z)5sz-$Xlg7uvFea=i#}OOMazf_79603p+wk8-T7(?S!N6b9|r+`r$y@0o0_!`d6_r z8DrDM`$Kw8rKi;-Ffp}N>YCIu!M*ls;koicYpokv1?7M+oLMX46JeyXFD4=VrnvFO zXX?%;U0m%K7+b9}d$Ax2K4 zs@TTtZLYVsgqnpQ_AB@@@6Jxa2z){*B7X3qH7`jq~6k*8@p(T=U4epD00Khe^)oUh?jk7bU(k9b=eEazuZJ4yXR z_M{o!h;SgKR3J<6Lh8QIMem(_l^*4@m~1iGe6pJ8owC*jyQJm~lyMTJX6hvWPqBAm zZR3vGT{sjTleRp$dQy(W!Kn=++Z{M7^aS6N=<88MjVelvSlFo?`Y+td_6c*Pe#Y9U zW4;z>b^j!sj08drgI@4&{KMSu4D;#>N#Z5nw&*tgPTDs47sm^jsY`>QNI_wp z;Y1IQT_4@oUs7CY#)l52)<_wVS~s%H>~CFj#=>>oK<@499^Jto&|B#R#O&tR;dItk zd$E*Lf9f0R%WAYzZbXKprB51{xH9o^>gz}wuZvUzP4mTCP2bo46TX&uFVz+X*>@uI z!+ov0;&ru-vB$T=aFrp>n9#D6_9>ZCyQggn=XF|(S*2@ex0q@<%~W4$WwrA11ZouL z@Y!9NBkZU2S5Bcm3*$@r1%^F>SK`oqj`mrc8!AHiz<5)|7vlNK6u| ziM#Q>le}_v7jskialn^4K6z_OpFk$7zq?o2;=dhpF}7q(si8&~AEES@lfl0i6~7Vtc(yab zdLL<&wkEkFD1%_?=3ps1Mck+Mg0W(Uucj|rKL8I@Gd;KQ3cIc;-w^YAhwNge6qy%% zla`h;D!EJQpY)ZQI;G`9+KlL@F?FIA8-2A>N(J$A>7z1PTc>x_i>ptB&*4nEm2x%t zNMiHkU8(m2QK)II5U#@pdpG({%pCfui?ERuO#e)W%lvnybZ$DC&8T3llv2ril73H_ zo3=MR#%k}K5vwWXjrgdTsE_`|QD6Ee=s&0}n1D=>hBH_DtGC#m8U80NW9r)Exa47} zcLVt%d93eUMNU#`8`u1+W3t2!jO`XP$e+%5s?L*F3jb0q-5=Q&OiSyTk~7In+?idIw82|o@hfvu@S(k=v^g^N4Yq-vUF zcu|?74*0r)?0Jsn%weH`*MVEBA!<9H+iBG6_frWTLsww7TO4$Eir|-uOI_rFXam-j zbBJY$Pwsnvx(C24k09PNiFX?aJy9dMW6xyjakcZpsZ1o<4OO4_@WW@4dPtq6^>Syq zfYhDeEkw7V5`B-S&Q2$nGtIfpylz|Pg7eHf5Bec5^`vjaOypu~h3izvei1uT?Vd~I zHr|V&#@M98xc7u+*DM?PRen zGZ}S+6KFnXc0?zUdADZF`X*7?A0=l})=I6#B}7HvdOC0XH`U=o#M)=64n5&HItyi( zoVLN}tKv{Wpb{+5!KmU?b*oTUT<*p2#5Jjs=b&yJ1=Hsx^1@d_Z&46)2$xWxc<#hH zsjSK^7hgl2s;XFCsw8EmN<2htES~gUGQ+T)%n+6Uo@bnR{!?D%b$0(^;(wfzm%4dz z`aGX8`+r2-j{?IiR1n$_J!kPcx<9+On0XmY3|xm;w4+y%*^BPp&t&g=d6ourEZ&j@ z)Fn@;MBRLw&_V14kNY7q*j8>Qr-W0QD$r4PF3;79s^)z>SG)*+qcnhdfLT zl~U2i#2-wo7a zD!JL%>km#hs;#xiyLDpsV$5(26E~q{bDg@;MPUWsUz?nz1F?S`_2Apy1bSzk;6Yj7 z%yd4upL#I`sc_|?e}@W>c${kRCF+8|ksr^bF7bz3mYSQ!8|Ei-IO5%NySmG;tRB?Z z2BACB7lnd);*Z$ZE&A0Fx;ndv66X?=e}uoIq1%DnXOK`tj21^=^;1wgOm^~n4}@(* z!OPIbamdH|kd;;9C(EOHW4qVgMf9(_I`zG8sG*!iQA6P0@1f2yob0_ZRlmQ5SS-ND zJpC`^)(6Qircn17;}wPp<~&vAPH-{*LUm&@x$-q;*H?PKfHqALCt|giL@E+qP4}f! z*e%KA###3_adur5-s+aWX}g6qPpi!N3rrtVIL)|Y(o9<}aPoPPA#&>Z^&CK=5!Y7+CwXA6;~XJ)VFcuT1F&ZPpLhbluYsuza1mlX?A ziRw%3^C2~ePgz7;^6p>B7@m-YwPJ$iGtclIQf(uj)N3d?M z`PqHE<gKcKzpYbpY9yrQ5!UWzpg~YQ4?|++W*(@^L9ORV|bcG6`rSrL%8-G|1C6_Nz{>dYJLB)MO zmC8Q++lV`rT+>HIVl&xrWvu-Sr~fQZR*dTB0rKci`a_ec&JDp@Hu0W4sYyQ|TbfIr zTAEpg&D3Tu&=qV(rEw}Xlt0N77YMt_JF`*m&q~dsFMjhaweQ1N*H(PNZt7W!$m`1R z`Ki3uNWN9Y0t}%a&-2bLM}}CKjDERLpE~|lzHuhm{fYlqGcS>YxA@ejy~jJvr3Nw9YrrSnrN&p0 zKc7tft{Sy=(`(L7PN%ZEkvD#eRi4M&tacx|C8;!(;cvCXK69gWGFkYIHM=5wC7$Kn zr+JyF>VK;HSa|&RoR7cUUGzh8(_xv*xnD!=Yl?7{Q*oF2_f3AXEvH~9-f}sWq(rX< z-X@x!L^b%qlc}ZeC8MrN)nX5;UW2!qN(FZq`G0e&Brkb``B>6&-tY|B^rt#ZE-DP? zsJ`sxDX*~06FBj==#oVf0S>_H*5T7W)zxx&hq#qAw;=I$cB%+pP(K+;Me=iM8n-!J z-Nbuh7(7WL=Q=<8I1bx8$ZA&d&e8cB&z&|6+ue&a+dJ?Ffy{eS&xJhi0zUTbfiTbF+1NhdwoaXvg&fE7#OTPEQlwyU`ao4 zt_`Yl8R@S4!M<D^5>-uMX$4EZ%wwwUEJ7PKJ9Es1bCeW<+P1 zU7EmtBnt_2ckXb){`voB8DehyX9=G3GOIR$io$6)rUuYQ{m4B%lO90}?(wc(dG8x| zZ{|_&euBksrU#ow6>1%xpb}o{(+Z&<%RlIv@!y$<9=cGGsz$GVIXjmf-t&XpXZO(L zn!wMG;Q97&P6`MySn$`_<0jUk51*ZjyM4FN3|6ca%)a*!TcNs_jmg20*ljmrgw~vj z->~eX?6^l|^(XHE{juN38xEpr*Nc@sz$ewlg4fXPT1p)>KRX$Zclw2DQ30~riqcGJ zF|+HBxIcHW($nb!48|Ae!~|E}3wZrI?q^taisumXeMuF}=5)Q}|DC7))|3@~L??I? zwV5WIpC{DZdvG$(;U|BiM$}Pii$dNmv8VW+%3dyf#Z!6+gXmp3?qf8XuG6PVp_f+D z>qk}nEM8_aali(qL_gJ#2H?MLyLGXUGFW5^wORvj-k5lzrC33#FTv?8y_e>|XE>kU zln#GL4e%SOZeK5k4%jvK1bl4soR#)R`+~#(-alRtktC@Q;_7KQHFiajJoU$OA9iUb_ao4Wo&wrZ}IwO;F@3?aXy5 z(mg5;W@4GNMD7OHbOSY=dIo%VJvCaHgTnlB=>%Q9L8!o!SHXg|-Rf!2w&t2$%^X&J zYmC_dPAb)D=d5rCanee%FGROOMUVt};9b(>hcGD2SDWicw5wWwy`4Ty$u0jRqh9B3 zan3tAY|Tn$I=*^jV`QPZJffKUts9o#E)OG5eR>$3#qRLWDbfvT7}x?w{7Jemo)){o zp14tNqcnxXf2-0B&c;M0^F}bi@CLoOcspdKGfP+v%x4i3C9BoudieZ2)U=AaGlePQ zG;t$bf!C=X{x1I`b!Qh|N(;o3!bxgwpD{5zgZJ*KSRnCKw5`gE!<;{@Hr7fj+RPYf zX}a(me28dPRcosiagy+X#0JtsP$f;MwY`U>`K>I<%|R7B6ekEhybM&vx`OZd3wDe> zQY>tKO~mU$HffmK&3bIEveR4j!wt+Lu!rx7oU=YnnyhhsLV7IeC;2<2m9$m<3{>D( z@@jdnbQPa`MabY4bo@*-PZehgk0n>mD+%%jWw88CXs*l=GuZjzd2cWBQb8@0ai>eO!NrV+Y4b3AB(tTx=os9A)v&Yk!W`%rrrc-!2aW{=2gGsfO%Rxv9(ADBu`N5s_FzUPGD^b@3P>UF)Y_Prb} z^$|OGdx>$EJNN90M27vDwm;!+2elaRzEuusz4dQ>TYWdxkeWmeY1?z1{muuozWLB@ zYj3mqSSw7`+6<4=AZL>MuT&h>sSWZBrh!wWQK)Xd2EEjo*>D{z-07?&gYkLmnNHuU zB&*Rd6_xdW;j6DyRc|Q^#m;UQJH6f7`X}<8*);qy+}iG7?=>5k2`G35!KNJ-vM6(5 zZJLCB?+*Dc?0;UQK57xe?S7H4bwY@T8@mL|R`ujNYEf;OGF1C2=3&fe-Ic#ZJ+h6R zIsBfvpL&rVcFstTP+jx7-No7-8Xw*cXV;g)8L6#WTz{rt)-uacL^dUacJMh(hFxnU zxzQ&U(RgfSIkWramB%_d?)pf7&8P|5MJb;kfKq#G7DN$hX{d&EA(AOrGo+hAm~)1Z z|BnRkep1<>9F`+$52jm-!O@W*X~G{)jC0b?WIu7@y`Wnf1}48WQdlphmve%ex~Jtc za)F85skV`3ar&B?jl+3DZfLEU8$Pr_#N}=5L-rdctgE7+cT$em=4mOg2+dbB$`ib9 z&TZ<<2W&q|(DS_ih=UI?(XG*WhEr99(Lrght=0};v03EC(g$|^Tf4Vi)S7LUwXecY zvCPTmUE$u?3%VxRodLRTkTi@tbv}N=FU=s@Y~xjfmF5qtr`gEPP3%*^yN7aW8n?xE zB7mpf1#zz2P5Di~YqZy%$%BP%?oKB+Pc+Acw}kusdvGjA+!aLe53SwyV|pHg@tMDg zBT=RN+EctcF8^^V+PUrLcC59|bnG2&A-J$XCV=HAM)q|GUX#z23))dFtJXzZhT_B} zI%+5I=6{e2Pa>N7)O$Zq6~p1}kHV%CvLkkOw-a%1HsX*j!Zqg)t2NJ*33kEl%z_

RZjF1K?&+(kw>5RmPoruc{5_b)v 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%0AyE;LLq>@f#X_wzPp}pYv45Q1VJBzchR9i& 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 z

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≪2PUYgBzmleuQhZ^~Cw)pxTGP3w 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

I#zvQ?(oTEhT&q1?&~3pnOF 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

VhcyMKR}7*N_m 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 literal 0 HcmV?d00001 diff --git a/testdata/subtitle_10s.mp4 b/testdata/subtitle_10s.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..ca8422769b0ec72df23746c5d2f7092fea3f1460 GIT binary patch literal 19770 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

BJQIZIhD4>of=$3Kv`$^lHkMTG4K!ifjdi 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 literal 0 HcmV?d00001 diff --git a/testdata/test_real_hav_sub.png b/testdata/test_real_hav_sub.png new file mode 100644 index 0000000000000000000000000000000000000000..a977852690d8de4ef65693fb6ee987996de1dcf9 GIT binary patch literal 130314 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 LNkvXXu0mjfX>zNT literal 0 HcmV?d00001 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..10653bd --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,43 @@ +"""pytest 全局配置。 + +在测试进程启动时创建独立临时目录,并通过环境变量把应用的数据目录、数据库、 +存储和后台服务全部指向测试环境,避免污染本地开发数据;同时隔离进程内节点 +注册表,防止测试之间互相泄漏注册条目。 +""" + +import atexit +import os +import shutil +import tempfile +from pathlib import Path + +import pytest + +# 每个测试进程使用独立临时根目录,保证测试之间互不干扰。 +TEST_ROOT = Path(tempfile.mkdtemp(prefix="vrsub-test-")) +os.environ["WOV_DATA_DIR"] = str(TEST_ROOT / "data") +os.environ["WOV_DB_PATH"] = str(TEST_ROOT / "data" / "wov.db") +os.environ["WOV_STORAGE_DIR"] = str(TEST_ROOT / "storage") +# 默认关闭自动种子和后台调度,测试显式控制执行时机。 +os.environ["WOV_AUTO_SEED"] = "0" +os.environ["WOV_SCHEDULER_ENABLED"] = "0" +os.environ["WOV_CLEANUP_ENABLED"] = "0" + + +def _cleanup() -> None: + """进程退出时清理临时测试目录。""" + shutil.rmtree(TEST_ROOT, ignore_errors=True) + + +atexit.register(_cleanup) + + +@pytest.fixture(autouse=True) +def _isolate_registry(): + """快照并恢复进程内节点注册表,避免测试之间互相污染。""" + from wov_app import registry + + snapshot = dict(registry._registry) + yield + registry._registry.clear() + registry._registry.update(snapshot) diff --git a/tests/test_adaptive_pool.py b/tests/test_adaptive_pool.py new file mode 100644 index 0000000..a13af83 --- /dev/null +++ b/tests/test_adaptive_pool.py @@ -0,0 +1,148 @@ +"""自适应线程池测试。 + +覆盖决策函数(增/减/保持/边界)、map 顺序返回、worker 异常隔离, +以及"10s 窗口内平均响应 < 0.3s 加线程 / > 1.0s 减线程"的弹性行为 +(通过注入假时钟做确定性验证)。 +""" + +import time + +from nodes.adaptive_pool import AdaptiveThreadPool, decide + + +class FakeClock: + """可手动拨动的假时钟,用于确定性验证弹性窗口逻辑。""" + + def __init__(self, now: float = 0.0) -> None: + self.now = now + + def __call__(self) -> float: + return self.now + + def advance(self, seconds: float) -> None: + self.now += seconds + + +def test_decide_increase_when_fast() -> None: + """平均响应低于 fast_threshold 且未达上限:线程数 +1。""" + assert decide(1, 0.1, 1, 16, 0.3, 1.0) == 2 + + +def test_decide_decrease_when_slow() -> None: + """平均响应高于 slow_threshold 且高于下限:线程数 -1。""" + assert decide(3, 2.0, 1, 16, 0.3, 1.0) == 2 + + +def test_decide_keep_when_mid() -> None: + """平均响应介于两阈值之间:保持不变。""" + assert decide(2, 0.5, 1, 16, 0.3, 1.0) == 2 + + +def test_decide_bounds() -> None: + """已达上限不再增、已达下限不再减。""" + assert decide(16, 0.1, 1, 16, 0.3, 1.0) == 16 + assert decide(1, 2.0, 1, 16, 0.3, 1.0) == 1 + + +def test_pool_map_ordered_results() -> None: + """map 按输入顺序返回结果,worker 简单映射。""" + pool = AdaptiveThreadPool(worker=lambda item: item * 2) + assert pool.map([1, 2, 3, 4]) == [2, 4, 6, 8] + + +def test_pool_on_progress_callback() -> None: + """进度回调:每次完成触发一次,携带已完成数/总数/速度。""" + progress: list[tuple[int, int, float]] = [] + pool = AdaptiveThreadPool( + worker=lambda item: item, + on_progress=lambda done, total, rate: progress.append((done, total, rate)), + ) + pool.map([10, 20, 30]) + assert [item[0] for item in progress] == [1, 2, 3] # 已完成数递增。 + assert all(item[1] == 3 for item in progress) # 总数固定。 + assert all(item[2] > 0 for item in progress) # 速度为正值。 + +def test_pool_map_empty() -> None: + """空输入:不启动任务,直接返回空列表。""" + pool = AdaptiveThreadPool(worker=lambda item: item) + assert pool.map([]) == [] + + +def test_pool_worker_exception_isolated() -> None: + """worker 抛异常时以异常对象作为结果,不拖垮整体。""" + def boom(item): + raise RuntimeError("boom") + + pool = AdaptiveThreadPool(worker=boom) + results = pool.map([1, 2]) + assert len(results) == 2 + assert all(isinstance(result, RuntimeError) for result in results) + + +def test_pool_grows_when_fast() -> None: + """10s 窗口内平均响应 < 0.3s:线程数从 1 增至 2(弹性扩容)。""" + clock = FakeClock() + pool = AdaptiveThreadPool( + worker=lambda item: item, + min_workers=1, max_workers=16, + window_seconds=10.0, fast_threshold=0.3, + clock=clock, + ) + # 拨快时钟越过窗口:首个任务完成即触发评估 → 平均响应≈0 < 0.3 → +1 线程。 + clock.advance(11) + pool.map(list(range(4))) + assert pool.max_concurrency == 2 + + +def test_pool_shrink_when_slow() -> None: + """窗口平均响应 > 1.0s:线程数从 2 减至 1(弹性退避)。""" + clock = FakeClock() + pool = AdaptiveThreadPool( + worker=lambda item: item, + min_workers=1, max_workers=16, + window_seconds=10.0, fast_threshold=0.3, slow_threshold=1.0, + clock=clock, + ) + pool._resize(2) # 先扩到 2 个线程。 + clock.advance(11) + pool._tick(2.0) # 窗口内平均 2.0 > 1.0 → 缩回 1。 + deadline = time.monotonic() + 2 + while len(pool._threads) > 1 and time.monotonic() < deadline: + time.sleep(0.01) + assert len(pool._threads) == 1 + pool._stop.set() + + +def test_resize_shrink_idempotent() -> None: + """回归:重复缩容到同一目标不会重复放哨兵(曾因并发缩容毒死全部线程而死锁)。""" + pool = AdaptiveThreadPool(worker=lambda item: item, min_workers=1, max_workers=8) + pool._resize(3) + assert pool._target_workers == 3 + pool._resize(2) + pool._resize(2) # 目标已是 2:幂等,不再放哨兵。 + assert pool._target_workers == 2 + # 只有 1 个线程被哨兵退出,最终存活 2 个。 + deadline = time.monotonic() + 2 + while len(pool._threads) > 2 and time.monotonic() < deadline: + time.sleep(0.01) + assert len(pool._threads) == 2 + pool._stop.set() + + +def test_pool_survives_mixed_grow_shrink() -> None: + """回归:扩容+缩容混合场景 map 必须完成且保序(修复前会死锁挂起)。""" + clock = FakeClock() + state = {"count": 0} + + def worker(item): + state["count"] += 1 + clock.advance(0.06 if state["count"] <= 20 else 0.6) + return item + + pool = AdaptiveThreadPool( + worker=worker, min_workers=1, max_workers=4, + window_seconds=0.5, fast_threshold=0.2, slow_threshold=0.4, + clock=clock, + ) + out = pool.map(list(range(60))) + assert out == list(range(60)) diff --git a/tests/test_api.py b/tests/test_api.py new file mode 100644 index 0000000..e29c247 --- /dev/null +++ b/tests/test_api.py @@ -0,0 +1,34 @@ +"""应用级 API 冒烟测试。 + +使用 FastAPI TestClient 验证健康检查、静态页面与 OpenAPI 文档可访问。 +节点注册/实例管理 API 已随单体化移除,不再有对应路由。 +""" + +from fastapi.testclient import TestClient + +from wov_app.main import app + + +def test_health_and_static() -> None: + """验证静态首页、OpenAPI 文档与健康探针均可访问。""" + with TestClient(app) as client: + root = client.get("/", follow_redirects=False) + assert root.status_code == 200 + assert "VRSub 字幕生成" in root.text + + docs = client.get("/docs") + assert docs.status_code == 200 + + response = client.get("/health") + assert response.status_code == 200 + assert response.json()["service"] == "wov-api" + assert response.json()["mode"] == "monolith" + + +def test_node_admin_routes_removed() -> None: + """验证节点注册与实例管理路由在单体版中已移除(404/405)。""" + with TestClient(app) as client: + # GET 落到静态文件挂载后返回 404;POST 对静态挂载返回 405。 + assert client.post("/api/admin/nodes", json={}).status_code == 405 + assert client.get("/api/admin/nodes").status_code == 404 + assert client.get("/api/admin/node-instances").status_code == 404 diff --git a/tests/test_apps_api.py b/tests/test_apps_api.py new file mode 100644 index 0000000..4567f3e --- /dev/null +++ b/tests/test_apps_api.py @@ -0,0 +1,313 @@ +"""用户应用 API 测试。 + +覆盖已发布应用的上传建任务、进度查询、产物下载、失败重试以及 +未发布/无版本工作流的拒绝逻辑。节点为内置注册,无需再手动注册。 +""" + +from pathlib import Path + +from fastapi.testclient import TestClient + +from wov_app.main import app + + +def _create_published_echo_workflow(client) -> str: + """创建一个已发布的单节点 Echo 工作流(echo 为内置节点)。""" + definition = { + "name": "echo-flow", + "version": 1, + "nodes": [ + { + "id": "step", + "node_type": "echo", + "inputs": {"file_uri": "input.video_uri"}, + } + ], + "edges": [], + "entry_inputs": {"video_uri": "file"}, + "final_outputs": {"result": "step.file_uri"}, + } + client.post( + "/api/admin/workflows", + json={ + "id": "echo-app", + "name": "Echo App", + "description": "upload a file", + "definition": definition, + }, + ) + client.post("/api/admin/workflows/echo-app/publish") + return "echo-app" + + +def test_upload_run_progress_and_download() -> None: + """验证上传文件建任务、手动执行、查询产物与下载的完整流程。""" + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + apps = client.get("/api/apps") + assert apps.status_code == 200 + assert any(item["id"] == workflow_id for item in apps.json()) + + uploaded = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"hello from upload", "text/plain")}, + ) + assert uploaded.status_code == 200 + run_id = uploaded.json()["id"] + assert uploaded.json()["status"] == "QUEUED" + + run = client.get(f"/api/runs/{run_id}") + assert run.status_code == 200 + assert run.json()["input_uri"].endswith("sample.txt") + assert run.json()["artifacts"] == [] + + scheduler = app.state.scheduler + scheduler.execute_run(run_id) + + completed = client.get(f"/api/runs/{run_id}") + assert completed.status_code == 200 + assert completed.json()["status"] == "COMPLETED" + artifact_names = [item["name"] for item in completed.json()["artifacts"]] + assert "result" in artifact_names + + artifacts = client.get(f"/api/runs/{run_id}/artifacts") + assert artifacts.status_code == 200 + assert len(artifacts.json()) >= 1 + + downloaded = client.get(f"/api/runs/{run_id}/artifacts/result") + assert downloaded.status_code == 200 + assert b"hello from upload" in downloaded.content + + assert client.get(f"/api/runs/{run_id}/artifacts/missing").status_code == 404 + assert client.get("/api/runs/missing").status_code == 404 + assert client.get("/api/runs/missing/artifacts").status_code == 404 + + db = app.state.db + db.create_artifact( + { + "run_id": run_id, + "node_id": "step", + "name": "missing-file", + "uri": str(Path(__file__).resolve().parent / "not-exists.bin"), + "mime_type": "text/plain", + "size": 0, + } + ) + assert client.get(f"/api/runs/{run_id}/artifacts/missing-file").status_code == 404 + + runs = client.get("/api/runs") + assert runs.status_code == 200 + assert any(item["id"] == run_id for item in runs.json()) + + +def test_upload_rejects_unpublished_workflow() -> None: + """验证草稿或不存在的工作流不能被用户发起任务。""" + with TestClient(app) as client: + client.post( + "/api/admin/workflows", + json={ + "id": "draft", + "name": "Draft", + "definition": { + "name": "Draft", + "version": 1, + "nodes": [], + "edges": [], + }, + }, + ) + response = client.post( + "/api/apps/draft/runs", + files={"file": ("x.txt", b"x", "text/plain")}, + ) + assert response.status_code == 404 + + response = client.post( + "/api/apps/missing/runs", + files={"file": ("x.txt", b"x", "text/plain")}, + ) + assert response.status_code == 404 + + +def test_upload_rejects_workflow_without_version() -> None: + """验证已发布但没有任何版本的工作流返回 422。""" + with TestClient(app) as client: + db = app.state.db + db.upsert_workflow( + {"id": "empty", "name": "Empty", "published": 1, "latest_version": 0} + ) + response = client.post( + "/api/apps/empty/runs", + files={"file": ("x.txt", b"x", "text/plain")}, + ) + assert response.status_code == 422 + + +def test_retry_failed_run_requeues_and_reruns() -> None: + """验证失败任务重试会清空旧产物并重新执行成功。""" + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + uploaded = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"hello retry", "text/plain")}, + ) + run_id = uploaded.json()["id"] + db = app.state.db + db.update_run( + run_id, + status="FAILED", + error="boom", + updated_at="2026-01-01T00:00:00+00:00", + ) + db.create_artifact( + { + "run_id": run_id, + "node_id": "step", + "name": "stale", + "uri": "stale.txt", + "mime_type": "text/plain", + "size": 1, + } + ) + + response = client.post(f"/api/runs/{run_id}/retry") + + assert response.status_code == 200 + assert response.json() == {"id": run_id, "status": "QUEUED"} + run = client.get(f"/api/runs/{run_id}").json() + assert run["status"] == "QUEUED" + assert run["error"] is None + assert run["artifacts"] == [] + + app.state.scheduler.execute_run(run_id) + completed = client.get(f"/api/runs/{run_id}").json() + assert completed["status"] == "COMPLETED" + assert any(item["name"] == "result" for item in completed["artifacts"]) + + +def test_pause_resume_run_api() -> None: + """验证暂停/继续接口:QUEUED→PAUSED→QUEUED,状态非法时报 422。""" + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + uploaded = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"hello pause", "text/plain")}, + ) + run_id = uploaded.json()["id"] + assert uploaded.json()["status"] == "QUEUED" + + paused = client.post(f"/api/runs/{run_id}/pause") + assert paused.status_code == 200 + assert paused.json() == {"id": run_id, "status": "PAUSED"} + assert client.get(f"/api/runs/{run_id}").json()["status"] == "PAUSED" + + resumed = client.post(f"/api/runs/{run_id}/resume") + assert resumed.status_code == 200 + assert resumed.json() == {"id": run_id, "status": "QUEUED"} + assert client.get(f"/api/runs/{run_id}").json()["status"] == "QUEUED" + + # 非 PAUSED 任务不可继续。 + assert client.post(f"/api/runs/{run_id}/resume").status_code == 422 + # 不存在的任务 404。 + assert client.post("/api/runs/missing/pause").status_code == 404 + assert client.post("/api/runs/missing/resume").status_code == 404 + + +def test_pause_rejects_terminal_states() -> None: + """验证已完成任务不可暂停。""" + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + uploaded = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"hello done", "text/plain")}, + ) + run_id = uploaded.json()["id"] + db = app.state.db + db.update_run(run_id, status="COMPLETED", progress=1.0, updated_at="2026-01-01T00:00:00+00:00") + assert client.post(f"/api/runs/{run_id}/pause").status_code == 422 + + +def test_retry_rejects_non_failed_and_missing_runs() -> None: + """验证只有 FAILED 状态且存在的任务才能重试。""" + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + uploaded = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"x", "text/plain")}, + ) + run_id = uploaded.json()["id"] + + assert client.post(f"/api/runs/{run_id}/retry").status_code == 422 + assert client.post("/api/runs/missing/retry").status_code == 404 + + +def test_delete_run_removes_record_and_files() -> None: + """验证删除任务会清理数据库记录与磁盘上的上传/步骤文件。""" + import shutil + + from wov_app.config import STORAGE_DIR + + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + uploaded = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"hello delete", "text/plain")}, + ) + run_id = uploaded.json()["id"] + + # 执行任务以生成步骤产物目录。 + app.state.scheduler.execute_run(run_id) + run = client.get(f"/api/runs/{run_id}").json() + steps_dir = STORAGE_DIR / "runs" / run_id + assert steps_dir.is_dir() + # 上传文件目录也应存在。 + upload_dir = Path(run["input_uri"]).parent + assert upload_dir.is_dir() + + deleted = client.delete(f"/api/runs/{run_id}") + assert deleted.status_code == 200 + assert deleted.json() == {"deleted": run_id} + + assert client.get(f"/api/runs/{run_id}").status_code == 404 + assert not steps_dir.exists() + assert not upload_dir.exists() + + # 删除不存在的任务返回 404。 + assert client.delete(f"/api/runs/missing").status_code == 404 + + # 清理测试遗留的 runs 目录,避免跨用例残留。 + shutil.rmtree(STORAGE_DIR / "runs", ignore_errors=True) + + +def test_create_run_with_param_overrides() -> None: + """验证创建任务时可携带 params 覆盖(如前端框选的 crop),并持久化。""" + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + uploaded = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"x", "text/plain")}, + data={"params": '{"step": {"crop": [0, 0.82, 1, 0.18]}}'}, + ) + assert uploaded.status_code == 200 + run_id = uploaded.json()["id"] + run = client.get(f"/api/runs/{run_id}").json() + assert run["param_overrides"] == {"step": {"crop": [0, 0.82, 1, 0.18]}} + # 非法 JSON 返回 422。 + bad = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"x", "text/plain")}, + data={"params": "not-json"}, + ) + assert bad.status_code == 422 + + +def test_create_run_params_non_object_rejected() -> None: + """params 为 JSON 数组时返回 422。""" + with TestClient(app) as client: + workflow_id = _create_published_echo_workflow(client) + response = client.post( + f"/api/apps/{workflow_id}/runs", + files={"file": ("sample.txt", b"x", "text/plain")}, + data={"params": "[1,2,3]"}, + ) + assert response.status_code == 422 diff --git a/tests/test_crop_js.js b/tests/test_crop_js.js new file mode 100644 index 0000000..b86e668 --- /dev/null +++ b/tests/test_crop_js.js @@ -0,0 +1,32 @@ +// crop 归一化纯函数单测:由 pytest 通过 node 执行(TDD 红阶段先失败)。 +"use strict"; +const assert = require("assert"); +const { videoDisplayRect, rectToCrop, cropToRect } = require("../web/assets/crop.js"); + +// 1) 无留边(容器比例与视频一致):底部 20% 矩形 → crop [0, 0.8, 1, 0.2] +let d = videoDisplayRect(1280, 720, 1280, 720); +assert.deepStrictEqual(d, { x: 0, y: 0, w: 1280, h: 720 }); +assert.deepStrictEqual( + rectToCrop({ x: 0, y: 576, w: 1280, h: 144 }, 1280, 720, 1280, 720), + [0, 0.8, 1, 0.2] +); + +// 2) letterbox(容器比视频宽):视频显示在中间,矩形映射要考虑左右留边 +d = videoDisplayRect(1280, 720, 1600, 720); +assert.deepStrictEqual(d, { x: 160, y: 0, w: 1280, h: 720 }); +// 在渲染视频内框选右下 25% 区域 +let crop = rectToCrop({ x: 160 + 640, y: 360, w: 640, h: 360 }, 1280, 720, 1600, 720); +assert.deepStrictEqual(crop, [0.5, 0.5, 0.5, 0.5]); + +// 3) 回显一致性:crop → rect → crop 应还原(含 letterbox) +let back = cropToRect(crop, 1280, 720, 1600, 720); +assert.deepStrictEqual( + rectToCrop(back, 1280, 720, 1600, 720), + crop +); + +// 4) 越界钳制:矩形超出画面时 crop 值被限制在 0~1 +crop = rectToCrop({ x: -100, y: -50, w: 2000, h: 900 }, 1280, 720, 1280, 720); +assert.ok(crop.every((v) => v >= 0 && v <= 1)); + +console.log("crop.js 全部断言通过"); diff --git a/tests/test_db.py b/tests/test_db.py new file mode 100644 index 0000000..18c3e47 --- /dev/null +++ b/tests/test_db.py @@ -0,0 +1,294 @@ +"""数据库层单元测试。 + +直接对 Database 方法调用真实 SQLite 路径,覆盖工作流、版本、任务与产物的 +增删改查。节点注册表已改为进程内内存态,不再落库。 +""" + +from pathlib import Path + +from wov_app.db import Database + + +def test_workflow_crud(tmp_path) -> None: + """验证工作流概要的插入、发布标记更新与删除。""" + db = Database(tmp_path / "wov.db") + workflow = { + "id": "demo", + "name": "Demo", + "description": "desc", + "published": 0, + "latest_version": 0, + } + db.upsert_workflow(workflow) + assert db.get_workflow("demo")["name"] == "Demo" + assert [item["id"] for item in db.list_workflows()] == ["demo"] + + db.upsert_workflow({**workflow, "published": 1, "latest_version": 1}) + assert db.get_workflow("demo")["published"] == 1 + + db.delete_workflow("demo") + assert db.get_workflow("demo") is None + + +def test_workflow_versions(tmp_path) -> None: + """验证工作流版本的写入、最新版本查询与列表。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow( + {"id": "demo", "name": "Demo", "published": 1, "latest_version": 2} + ) + definition = {"name": "Demo", "version": 1, "nodes": [], "edges": []} + db.create_workflow_version("demo", 1, definition) + db.create_workflow_version("demo", 2, {**definition, "version": 2}) + + latest = db.get_latest_workflow_version("demo") + assert latest["version"] == 2 + assert latest["definition"]["version"] == 2 + + version = db.get_workflow_version("demo", 1) + assert version["version"] == 1 + assert db.get_workflow_version("demo", 99) is None + assert len(db.list_workflow_versions("demo")) == 2 + + empty_db = Database(tmp_path / "empty.db") + assert empty_db.get_latest_workflow_version("missing") is None + + +def test_run_and_artifact_crud(tmp_path) -> None: + """验证任务与产物的创建、查询、更新与删除。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow({"id": "demo", "name": "Demo", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_1", + "workflow_id": "demo", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": "in.txt", + "created_at": now, + "updated_at": now, + } + ) + assert db.get_run("run_1")["status"] == "QUEUED" + assert db.next_queued_run()["id"] == "run_1" + + db.update_run("run_1", status="RUNNING", progress=0.5, updated_at=now) + db.update_run("run_1") + assert db.get_run("run_1")["status"] == "RUNNING" + assert db.get_run("run_1")["progress"] == 0.5 + assert db.next_queued_run() is None + assert len(db.list_runs()) == 1 + + db.create_artifact( + { + "run_id": "run_1", + "node_id": "echo", + "name": "result", + "uri": "out.txt", + "mime_type": "text/plain", + "size": 3, + } + ) + assert db.get_artifact("run_1", "result")["uri"] == "out.txt" + assert db.get_artifact("run_1", "missing") is None + assert len(db.list_artifacts("run_1")) == 1 + + db.delete_run_artifacts("run_1") + assert db.list_artifacts("run_1") == [] + + +def test_reset_run_clears_error_and_artifacts(tmp_path) -> None: + """验证 reset_run 会把失败任务恢复到排队状态并清空旧产物。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow({"id": "demo", "name": "Demo", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_1", + "workflow_id": "demo", + "workflow_version": 1, + "status": "FAILED", + "progress": 0.75, + "current_node_id": "translate", + "error": "timed out", + "input_uri": "in.txt", + "created_at": now, + "updated_at": now, + } + ) + db.create_artifact( + { + "run_id": "run_1", + "node_id": "asr", + "name": "asr.srt_uri", + "uri": "out.srt", + "mime_type": "application/x-subrip", + "size": 3, + } + ) + + db.reset_run("run_1", "2026-01-02T00:00:00+00:00") + + run = db.get_run("run_1") + assert run["status"] == "QUEUED" + assert run["progress"] == 0 + assert run["current_node_id"] is None + assert run["error"] is None + assert run["updated_at"] == "2026-01-02T00:00:00+00:00" + assert run["created_at"] == now + assert db.list_artifacts("run_1") == [] + + +def test_delete_run(tmp_path) -> None: + """验证 delete_run 会删除任务记录及其产物记录。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow({"id": "demo", "name": "Demo", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_1", + "workflow_id": "demo", + "workflow_version": 1, + "status": "COMPLETED", + "progress": 1, + "input_uri": "in.txt", + "created_at": now, + "updated_at": now, + } + ) + db.create_artifact( + { + "run_id": "run_1", + "node_id": "asr", + "name": "asr.srt_uri", + "uri": "out.srt", + "mime_type": "application/x-subrip", + "size": 3, + } + ) + db.delete_run("run_1") + assert db.get_run("run_1") is None + assert db.list_artifacts("run_1") == [] + + +def test_list_run_ids(tmp_path) -> None: + """验证 list_run_ids 返回全部任务 ID,供孤儿清理对照使用。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow({"id": "demo", "name": "Demo", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + assert db.list_run_ids() == [] + for run_id in ("run_a", "run_b"): + db.create_run( + { + "id": run_id, + "workflow_id": "demo", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "created_at": now, + "updated_at": now, + } + ) + assert set(db.list_run_ids()) == {"run_a", "run_b"} + + +def test_run_param_overrides_persist(tmp_path) -> None: + """验证 param_overrides 随任务持久化并可读回。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow({"id": "demo", "name": "D", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_ov", + "workflow_id": "demo", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "param_overrides": {"extract": {"crop": [0, 0.5, 1, 0.5]}}, + "created_at": now, + "updated_at": now, + } + ) + run = db.get_run("run_ov") + assert run["param_overrides"] == {"extract": {"crop": [0, 0.5, 1, 0.5]}} + assert db.next_queued_run()["param_overrides"] == {"extract": {"crop": [0, 0.5, 1, 0.5]}} + + +def test_db_migration_adds_param_overrides(tmp_path) -> None: + """旧库迁移:缺少 param_overrides 列的库打开后自动补列。""" + import sqlite3 + + db_path = tmp_path / "old.db" + conn = sqlite3.connect(db_path) + conn.execute( + "CREATE TABLE workflow_runs (id TEXT PRIMARY KEY, workflow_id TEXT NOT NULL," + " workflow_version INTEGER NOT NULL, status TEXT NOT NULL, current_node_id TEXT," + " progress REAL NOT NULL DEFAULT 0, error TEXT, input_uri TEXT," + " created_at TEXT NOT NULL, updated_at TEXT NOT NULL)" + ) + conn.commit() + conn.close() + + Database(db_path) + conn = sqlite3.connect(db_path) + columns = [row[1] for row in conn.execute("PRAGMA table_info(workflow_runs)")] + conn.close() + assert "param_overrides" in columns + + +def test_pause_resume_run(tmp_path) -> None: + """验证 pause_run/resume_run 的状态流转与 PAUSED 任务可被调度器取到。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow({"id": "demo", "name": "Demo", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_p", + "workflow_id": "demo", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "created_at": now, + "updated_at": now, + } + ) + db.pause_run("run_p", now) + assert db.get_run("run_p")["status"] == "PAUSED" + # PAUSED 任务会被 next_queued_run 取到(等待续跑)。 + assert db.next_queued_run()["id"] == "run_p" + db.resume_run("run_p", now) + assert db.get_run("run_p")["status"] == "QUEUED" + assert db.next_queued_run()["id"] == "run_p" + + +def test_restore_run_outputs(tmp_path) -> None: + """验证从产物重建节点输出(断点续跑的依据)。""" + db = Database(tmp_path / "wov.db") + db.upsert_workflow({"id": "demo", "name": "Demo", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_r", + "workflow_id": "demo", + "workflow_version": 1, + "status": "PAUSED", + "progress": 0, + "created_at": now, + "updated_at": now, + } + ) + db.create_artifact( + { + "run_id": "run_r", + "node_id": "extract", + "name": "frames_manifest", + "uri": "frames.json", + "mime_type": "application/json", + "size": 1, + } + ) + assert db.restore_run_outputs("run_r") == { + "extract": {"frames_manifest": "frames.json"} + } + assert db.restore_run_outputs("run_none") == {} diff --git a/tests/test_frontend_crop.py b/tests/test_frontend_crop.py new file mode 100644 index 0000000..7fefaa0 --- /dev/null +++ b/tests/test_frontend_crop.py @@ -0,0 +1,28 @@ +"""前端 crop 归一化纯函数测试。 + +通过 node 执行 tests/test_crop_js.js(真实 JS 断言),验证框选矩形与 +crop 比例的互转(含 letterbox 与越界钳制)。 +""" + +import shutil +import subprocess +from pathlib import Path + +import pytest + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent +JS_TEST = WORKSPACE / "tests" / "test_crop_js.js" + + +def test_crop_js_normalization() -> None: + """node 执行 crop 纯函数断言(TDD 红阶段先失败)。""" + if shutil.which("node") is None: + pytest.skip("环境无 node,跳过前端 crop 单测") + result = subprocess.run( + ["node", str(JS_TEST)], + capture_output=True, + text=True, + cwd=str(WORKSPACE), + ) + assert result.returncode == 0, result.stderr diff --git a/tests/test_integration_subtitle_ocr.py b/tests/test_integration_subtitle_ocr.py new file mode 100644 index 0000000..6106ac2 --- /dev/null +++ b/tests/test_integration_subtitle_ocr.py @@ -0,0 +1,90 @@ +"""字幕 OCR 整链真实集成测试。 + +使用 testdata/subtitle_10s.mp4(烧录 SUB 001@1-4s、SUB 002@6-9s)与真实 +glm-ocr 模型:抽帧(frame-extract)→ 逐帧 OCR(subtitle-ocr)→ 汇总 SRT, +断言烧录文字与时间轴对齐。Ollama 服务或资产缺失时自动跳过。 +""" + +import json +import urllib.request +from pathlib import Path + +import pytest + +from nodes.frame_extract import invoke as frame_invoke +from nodes.subtitle_ocr import invoke as ocr_invoke +from wov_sdk.models import InvokeRequest + +OLLAMA_HOST = "http://192.168.123.70:11434" +MODEL = "glm-ocr:latest" + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent +VIDEO = WORKSPACE / "testdata" / "subtitle_10s.mp4" + + +def _register_nodes() -> None: + """注册全部内置节点,供 subtitle-ocr 内部调 vlm-ocr 使用。""" + from wov_app import registry + + registry.register_all() + + +def _ollama_reachable() -> bool: + """探测 Ollama 服务与目标模型是否可用。""" + try: + req = urllib.request.Request( + f"{OLLAMA_HOST}/api/show", + data=b'{"model": "%s"}' % MODEL.encode(), + headers={"Content-Type": "application/json"}, + method="POST", + ) + with urllib.request.urlopen(req, timeout=5) as resp: + return resp.status == 200 + except (urllib.error.URLError, OSError): + return False + + +@pytest.mark.integration +def test_subtitle_ocr_full_chain(tmp_path) -> None: + """抽帧→OCR→汇总:SRT 应含 SUB 001/SUB 002 且时间轴落在各自区间。""" + if not _ollama_reachable(): + pytest.skip("Ollama 服务或 glm-ocr 模型不可用,跳过真实模型集成测试") + if not VIDEO.is_file(): + pytest.skip("缺少 testdata/subtitle_10s.mp4 测试资产,跳过集成测试") + _register_nodes() + + # 抽帧:1s 间隔,字幕在底部,裁切下半 30% 区域(y=0.7,h=0.3)。 + frames_resp = frame_invoke( + InvokeRequest( + run_id="chain_fx", + node_instance_id="", + inputs={"video_uri": str(VIDEO)}, + params={"interval_seconds": 1, "crop": [0, 0.7, 1, 0.3]}, + output_dir=str(tmp_path / "frames"), + ) + ) + assert frames_resp.status == "completed", frames_resp.error + manifest = json.loads(Path(frames_resp.outputs["frames_manifest"]).read_text(encoding="utf-8")) + assert len(manifest) >= 8 + + # OCR 汇总:真实 glm-ocr 逐帧识别。 + ocr_resp = ocr_invoke( + InvokeRequest( + run_id="chain_ocr", + node_instance_id="", + inputs={"frames_manifest": str(frames_resp.outputs["frames_manifest"])}, + params={"model": MODEL, "ollama_host": OLLAMA_HOST, "min_chars": 2}, + output_dir=str(tmp_path / "out"), + ) + ) + assert ocr_resp.status == "completed", ocr_resp.error + srt = Path(ocr_resp.outputs["srt_uri"]).read_text(encoding="utf-8") + # 两条烧录字幕都应被识别(文字可能带噪声,但至少含关键片段)。 + assert "SUB" in srt + # 时间轴:SUB 001 应在 1-4s,SUB 002 应在 6-9s(允许模型/抽帧容差)。 + first_line = next(line for line in srt.splitlines() if "-->" in line) + start = first_line.split(" --> ")[0].replace(",", ".") + hours, minutes, seconds = start.split(":") + total = int(hours) * 3600 + int(minutes) * 60 + float(seconds) + assert total < 5 diff --git a/tests/test_integration_vlm.py b/tests/test_integration_vlm.py new file mode 100644 index 0000000..f444c2a --- /dev/null +++ b/tests/test_integration_vlm.py @@ -0,0 +1,65 @@ +"""VLM OCR 节点真实集成测试。 + +复用 testdata/test_real_hav_sub.png(真实视频字幕截图,一次性入库,避免 +每次测试生成)。调用本地 Ollama 服务(192.168.123.70:11434)的真实 +glm-ocr 模型做 OCR。Ollama 服务或测试资产缺失时自动跳过;可用时必须执行。 +""" +import urllib.request +from pathlib import Path + +import pytest + +from nodes.vlm import invoke +from wov_sdk.models import InvokeRequest + +OLLAMA_HOST = "http://192.168.123.70:11434" +MODEL = "glm-ocr:latest" +# 测试图片(真实视频字幕帧)上应识别出的字幕文本。 +EXPECTED_TEXT = "还有没有什么困扰 或者奇怪的地方吗" + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent +TEST_IMAGE = WORKSPACE / "testdata" / "test_real_hav_sub.png" + + +def _ollama_reachable() -> bool: + """探测 Ollama 服务与目标模型是否可用。""" + try: + req = urllib.request.Request( + f"{OLLAMA_HOST}/api/show", + data=b'{"model": "%s"}' % MODEL.encode(), + headers={"Content-Type": "application/json"}, + method="POST", + ) + with urllib.request.urlopen(req, timeout=5) as resp: + return resp.status == 200 + except (urllib.error.URLError, OSError): + return False + + +@pytest.mark.integration +def test_vlm_ocr_real_model(tmp_path) -> None: + """复用真实字幕截图 + 真实 glm-ocr:应识别出关键字幕文本并清洗围栏垃圾。""" + if not _ollama_reachable(): + pytest.skip("Ollama 服务或 glm-ocr 模型不可用,跳过真实模型集成测试") + if not TEST_IMAGE.is_file(): + pytest.skip("缺少 testdata/test_real_hav_sub.png 测试资产,跳过集成测试") + + response = invoke( + InvokeRequest( + run_id="vlm_integration", + node_instance_id="", + inputs={"image_uri": str(TEST_IMAGE)}, + params={"model": MODEL, "ollama_host": OLLAMA_HOST}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + text = response.outputs["text"] + print(text) + # 关键字幕文本应被识别出来。注意 glm-ocr 在此图上存在已知重复循环 bug: + # 识别出正确文本后可能继续循环输出,因此用"包含"断言而非全等, + # 下游 subtitle-ocr 的 max_result_chars 守卫会拦截超长输出。 + assert EXPECTED_TEXT in text + # 围栏垃圾(```)不应出现在输出里。 + assert "```" not in text diff --git a/tests/test_integration_whisper.py b/tests/test_integration_whisper.py new file mode 100644 index 0000000..f3df6f8 --- /dev/null +++ b/tests/test_integration_whisper.py @@ -0,0 +1,52 @@ +"""真实模型集成测试。 + +复用 testdata/speech_60s.wav(真实语音 WAV,一次性生成、入库,避免每次 +测试从视频提取)。使用真实 faster-whisper 模型端到端验证 whisper 节点的 +分块转写与 SRT 生成。本地缺少模型或测试资产时自动跳过;具备条件时必须 +执行,作为对假模型单元测试的校准。 + +约定(见 AGENTS.md「测试与覆盖率」):单元测试允许在模型推理这一 I/O +边界使用返回真实结构的薄桩,但必须配套本集成测试验证真实行为。 +""" + +from pathlib import Path + +import pytest + +from nodes.whisper import invoke +from wov_sdk.models import InvokeRequest + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent +MODEL_DIR = WORKSPACE / "model" / "faster-whisper-large-v3" +TEST_AUDIO = WORKSPACE / "testdata" / "speech_60s.wav" + + +@pytest.mark.integration +def test_whisper_real_model_chunked_transcription(tmp_path) -> None: + """复用 testdata 语音 + 真实模型:分块转写产出真实 SRT,时间不越出素材范围。""" + if not (MODEL_DIR / "model.bin").is_file(): + pytest.skip("本地无 faster-whisper-large-v3 模型,跳过真实模型集成测试") + if not TEST_AUDIO.is_file(): + pytest.skip("缺少 testdata/speech_60s.wav 测试资产,跳过真实模型集成测试") + + response = invoke( + InvokeRequest( + run_id="integration_1", + node_instance_id="", + inputs={"audio_uri": str(TEST_AUDIO)}, + params={"language": "ja", "chunk_seconds": 60, "vad_filter": False}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + srt_path = Path(response.outputs["srt_uri"]) + assert srt_path.is_file() + srt = srt_path.read_text(encoding="utf-8") + time_lines = [line for line in srt.splitlines() if "-->" in line] + # 60s 语音若含可识别内容,则应有字幕,且时间轴不越出素材时长(允许少量超窗)。 + if time_lines: + last_end = time_lines[-1].split(" --> ")[1].replace(",", ".") + hours, minutes, seconds = last_end.split(":") + total = int(hours) * 3600 + int(minutes) * 60 + float(seconds) + assert total < 90 diff --git a/tests/test_llm_filter.py b/tests/test_llm_filter.py new file mode 100644 index 0000000..b464152 --- /dev/null +++ b/tests/test_llm_filter.py @@ -0,0 +1,257 @@ +"""LLM 字幕过滤节点测试。 + +覆盖 SRT 解析/序列化、±N 上下文窗口组装(纯文本无时间戳、目标标记)、 +LLM 调用(按 I/O 边界 mock urlopen)与删除判定、invoke 全链路与异常路径。 +""" + +import json +import urllib.error +from pathlib import Path + +from nodes.llm_filter import invoke, parse_srt, serialize_srt +from wov_sdk.models import InvokeRequest + +# 4 条字幕的 SRT:第 3 条为"答:"开头的无意义杂项,模拟 OCR 噪声。 +_SRT = ( + "1\n00:00:01,000 --> 00:00:04,000\n还有没有什么困扰\n\n" + "2\n00:00:05,000 --> 00:00:08,000\n或者奇怪的地方吗\n\n" + "3\n00:00:09,000 --> 00:00:12,000\n答:无意义杂项\n\n" + "4\n00:00:13,000 --> 00:00:16,000\n第二句正常字幕\n" +) + + +class FakeResponse: + """模拟 urllib 响应:read() 返回 LLM 兼容接口的 JSON 载荷。""" + + def __init__(self, payload: bytes) -> None: + self._payload = payload + + def read(self) -> bytes: + return self._payload + + def __enter__(self): + return self + + def __exit__(self, *args) -> bool: + return False + + +class FakeLLM: + """模拟 LLM 兼容接口:记录请求体,按策略返回"保留/删除"。 + + 支持两种策略:contents(按队列顺序,用于单次直调 _judge_target 的 + 确定性测试)或 decision_fn(按请求体内容决策,用于并发 invoke 测试, + 保证任何线程执行顺序下判定结果都确定)。 + """ + + def __init__(self, contents: list[str] | None = None, decision_fn=None) -> None: + self._contents = list(contents) if contents is not None else None + self._decision_fn = decision_fn + self.bodies: list[dict] = [] + self.headers: list[dict] = [] + + def __call__(self, request, timeout=None): + body = json.loads(request.data.decode("utf-8")) + self.bodies.append(body) + self.headers.append(dict(request.headers)) + if self._decision_fn is not None: + content = self._decision_fn(body) + else: + content = self._contents.pop(0) + payload = json.dumps({"choices": [{"message": {"content": content}}]}).encode() + return FakeResponse(payload) + + +def _patch_llm(monkeypatch, contents: list[str] | None = None, decision_fn=None) -> FakeLLM: + """替换 nodes.llm_filter 的 urlopen 为 FakeLLM 并返回实例。""" + fake = FakeLLM(contents=contents, decision_fn=decision_fn) + monkeypatch.setattr("nodes.llm_filter.urllib.request.urlopen", fake) + return fake + + +def _decision_by_target(body) -> str: + """按目标字幕内容决策:含"答:"判为删除,其余保留(与 _SRT 的噪声对应)。""" + target = next( + line for line in body["messages"][1]["content"].splitlines() + if line.startswith("【目标】") + ) + return "删除" if "答:" in target else "保留" + + +def test_parse_srt_multiline_and_last_block() -> None: + """解析 SRT:多行文本与末条无空行结尾均能正确解析。""" + text = ( + "1\n00:00:01,000 --> 00:00:04,000\n第一行\n第二行\n\n" + "2\n00:00:05,000 --> 00:00:08,000\n末条无空行结尾\n" + ) + entries = parse_srt(text) + assert len(entries) == 2 + assert entries[0]["start"] == "00:00:01,000" + assert entries[0]["end"] == "00:00:04,000" + assert entries[0]["text"] == "第一行\n第二行" + assert entries[1]["text"] == "末条无空行结尾" + + +def test_serialize_srt_renumbers() -> None: + """序列化:序号从 1 重新编号,保留原始时间轴。""" + entries = [ + {"start": "00:00:09,000", "end": "00:00:12,000", "text": "答:无意义杂项"}, + {"start": "00:00:13,000", "end": "00:00:16,000", "text": "第二句正常字幕"}, + ] + out = serialize_srt(entries) + assert out == ( + "1\n00:00:09,000 --> 00:00:12,000\n答:无意义杂项\n\n" + "2\n00:00:13,000 --> 00:00:16,000\n第二句正常字幕\n" + ) + + +def test_judge_target_window_and_keep(monkeypatch) -> None: + """窗口只含纯文本(无时间戳)、目标带标记;模型答"保留"则返回 False。""" + from nodes.llm_filter import _judge_target + + entries = parse_srt(_SRT) + fake = _patch_llm(monkeypatch, ["保留"]) + # context_size=1,目标为第 2 条(index=1):窗口 0..2 共 3 行,目标在中间。 + assert _judge_target(entries, 1, context_size=1, params={}) is False + body = fake.bodies[0] + lines = body["messages"][1]["content"].splitlines() + assert len(lines) == 3 + assert lines[0] == "还有没有什么困扰" + assert lines[1] == "【目标】或者奇怪的地方吗" + assert lines[2] == "答:无意义杂项" + # 不含时间戳。 + assert "00:00" not in body["messages"][1]["content"] + assert body["enable_thinking"] is False + assert body["max_tokens"] == 16 + + +def test_judge_target_delete(monkeypatch) -> None: + """模型答"删除"时返回 True(判定该条无意义)。""" + from nodes.llm_filter import _judge_target + + entries = parse_srt(_SRT) + _patch_llm(monkeypatch, ["删除"]) + assert _judge_target(entries, 2, context_size=10, params={}) is True + + +def test_judge_target_model_and_auth(monkeypatch) -> None: + """模型名从参数取;配置 API Key 时附带 Bearer 鉴权头。""" + from nodes.llm_filter import _judge_target + + entries = parse_srt(_SRT) + monkeypatch.setenv("LLM_API_KEY", "sk-test") + fake = _patch_llm(monkeypatch, ["保留"]) + assert _judge_target(entries, 0, context_size=10, params={"model": "m/1"}) is False + assert fake.bodies[0]["model"] == "m/1" + assert fake.headers[0]["Authorization"] == "Bearer sk-test" + + +def test_invoke_filters_and_renumbers(monkeypatch, tmp_path) -> None: + """全链路(并发):按 LLM 判定删除无意义条,保留条重新编号输出。""" + srt = tmp_path / "in.srt" + srt.write_text(_SRT, encoding="utf-8") + # 内容决策:目标字幕含"答:"判删除,其余保留(任何线程顺序下结果确定)。 + _patch_llm(monkeypatch, decision_fn=_decision_by_target) + response = invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"srt_uri": str(srt)}, + params={}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + assert response.outputs["kept"] == 3 + assert response.outputs["removed"] == 1 + out = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + assert out.count("-->") == 3 + # 被删除的"答:无意义杂项"(第 3 条)时间轴不再出现。 + assert "00:00:09,000" not in out + # 保留条重新编号且时间轴不变。 + assert out.startswith("1\n00:00:01,000 --> 00:00:04,000\n还有没有什么困扰\n\n2\n") + assert "00:00:13,000 --> 00:00:16,000\n第二句正常字幕\n" in out + + +def test_invoke_context_size_param(monkeypatch, tmp_path) -> None: + """context_size 参数生效:窗口大小=2×context_size+1(两端截断除外)。""" + srt = tmp_path / "in.srt" + srt.write_text(_SRT, encoding="utf-8") + fake = _patch_llm(monkeypatch, decision_fn=_decision_by_target) + response = invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"srt_uri": str(srt)}, + params={"context_size": 1}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + # 找到目标为第 2 条("或者奇怪的地方吗")的请求体:窗口应含 3 行。 + body = next( + b for b in fake.bodies + if "【目标】或者奇怪的地方吗" in b["messages"][1]["content"] + ) + window = body["messages"][1]["content"].splitlines() + assert len(window) == 3 + + +def test_invoke_missing_input(tmp_path) -> None: + """缺少 srt_uri 时返回失败。""" + response = invoke( + InvokeRequest(run_id="r", node_instance_id="", inputs={}, output_dir=str(tmp_path)) + ) + assert response.status == "failed" + assert "srt_uri" in response.error + + +def test_invoke_file_missing(tmp_path) -> None: + """srt 文件不存在时返回失败。""" + response = invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"srt_uri": str(tmp_path / "none.srt")}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + assert "not found" in response.error + + +def test_invoke_llm_error(monkeypatch, tmp_path) -> None: + """LLM 调用失败(网络错误)时返回 failed,不静默输出未过滤结果。""" + srt = tmp_path / "in.srt" + srt.write_text(_SRT, encoding="utf-8") + + def boom(request, timeout=None): + raise urllib.error.URLError("llm down") + + monkeypatch.setattr("nodes.llm_filter.urllib.request.urlopen", boom) + response = invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"srt_uri": str(srt)}, + params={}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "failed" + assert "llm down" in response.error + + +def test_invoke_empty_srt(monkeypatch, tmp_path) -> None: + """空 SRT(无条目)正常完成,输出空文件且不调用 LLM。""" + srt = tmp_path / "empty.srt" + srt.write_text("", encoding="utf-8") + fake = _patch_llm(monkeypatch, []) + response = invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"srt_uri": str(srt)}, + params={}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + assert response.outputs["kept"] == 0 + assert response.outputs["removed"] == 0 + assert fake.bodies == [] diff --git a/tests/test_maintenance.py b/tests/test_maintenance.py new file mode 100644 index 0000000..437d9f6 --- /dev/null +++ b/tests/test_maintenance.py @@ -0,0 +1,165 @@ +"""孤儿数据清理器测试。 + +覆盖 COMPLETED 无文件任务的删除、各类保留分支(有文件/失败/宽限期内)、 +无任务记录的残留目录清理、清理线程启停以及防御性分支。 +""" + +from datetime import datetime, timezone +from pathlib import Path + +from wov_app.db import Database +from wov_app.maintenance import OrphanCleaner + + +def _db(tmp_path) -> Database: + """在临时目录创建独立数据库。""" + return Database(tmp_path / "wov.db") + + +def _make_run(db, run_id, status="COMPLETED", updated="2020-01-01T00:00:00+00:00", input_uri=None): + """创建指定状态与更新时间的工作流任务记录。""" + db.upsert_workflow({"id": "flow", "name": "F", "published": 1, "latest_version": 1}) + db.create_run( + { + "id": run_id, + "workflow_id": "flow", + "workflow_version": 1, + "status": status, + "progress": 1, + "input_uri": input_uri, + "created_at": updated, + "updated_at": updated, + } + ) + + +def _now_iso() -> str: + """返回当前 UTC 时间的 ISO 字符串。""" + return datetime.now(timezone.utc).isoformat() + + +def test_cleaner_removes_completed_orphan_run(tmp_path) -> None: + """验证 COMPLETED 且无任何产物文件、超过宽限期的任务被整体清理。""" + db = _db(tmp_path) + upload_dir = tmp_path / "storage" / "uploads" / "run_orphan" + upload_dir.mkdir(parents=True) + upload_file = upload_dir / "in.mp4" + upload_file.write_bytes(b"x") + _make_run(db, "run_orphan", input_uri=str(upload_file)) + db.create_artifact( + { + "run_id": "run_orphan", + "node_id": "asr", + "name": "asr.srt_uri", + "uri": str(tmp_path / "storage" / "runs" / "run_orphan" / "out.srt"), + "mime_type": "application/x-subrip", + "size": 1, + } + ) + cleaner = OrphanCleaner(db, tmp_path / "storage", grace_seconds=3600) + assert cleaner.clean_once() == 1 + assert db.get_run("run_orphan") is None + assert db.list_artifacts("run_orphan") == [] + assert not upload_dir.exists() + + +def test_cleaner_keeps_completed_run_with_files(tmp_path) -> None: + """验证仍有产物文件的 COMPLETED 任务不会被清理。""" + db = _db(tmp_path) + steps = tmp_path / "storage" / "runs" / "run_keep" + (steps / "asr").mkdir(parents=True) + (steps / "asr" / "out.srt").write_text("1\n00:00:00,000 --> 00:00:01,000\nok\n", encoding="utf-8") + _make_run(db, "run_keep") + cleaner = OrphanCleaner(db, tmp_path / "storage", grace_seconds=3600) + assert cleaner.clean_once() == 0 + assert db.get_run("run_keep") is not None + + +def test_cleaner_keeps_failed_and_recent_runs(tmp_path) -> None: + """验证 FAILED 任务与宽限期内的任务都不会被自动清理。""" + db = _db(tmp_path) + _make_run(db, "run_failed", status="FAILED") + _make_run(db, "run_recent", updated=_now_iso()) + cleaner = OrphanCleaner(db, tmp_path / "storage", grace_seconds=3600) + assert cleaner.clean_once() == 0 + assert db.get_run("run_failed") is not None + assert db.get_run("run_recent") is not None + + +def test_cleaner_removes_dangling_dirs_only(tmp_path) -> None: + """验证无任务记录的残留目录被删除,已有任务的上传目录被保留。""" + db = _db(tmp_path) + ghost_upload = tmp_path / "storage" / "uploads" / "ghost" + ghost_upload.mkdir(parents=True) + ghost_steps = tmp_path / "storage" / "runs" / "ghost" + ghost_steps.mkdir(parents=True) + keep_upload = tmp_path / "storage" / "uploads" / "run_keep" + keep_upload.mkdir(parents=True) + (keep_upload / "in.mp4").write_bytes(b"x") + # run_keep 存在产物文件,不属于孤儿任务。 + keep_steps = tmp_path / "storage" / "runs" / "run_keep" / "asr" + keep_steps.mkdir(parents=True) + (keep_steps / "out.srt").write_text("ok", encoding="utf-8") + _make_run(db, "run_keep") + cleaner = OrphanCleaner(db, tmp_path / "storage", grace_seconds=3600) + assert cleaner.clean_once() == 2 + assert not ghost_upload.exists() + assert not ghost_steps.exists() + assert keep_upload.exists() + + +def test_cleaner_removes_run_with_empty_steps_dir(tmp_path) -> None: + """验证步骤目录存在但为空(无文件)时仍视为孤儿清理。""" + db = _db(tmp_path) + steps = tmp_path / "storage" / "runs" / "run_empty" + (steps / "asr").mkdir(parents=True) + _make_run(db, "run_empty", input_uri="") + cleaner = OrphanCleaner(db, tmp_path / "storage", grace_seconds=3600) + assert cleaner.clean_once() == 1 + assert db.get_run("run_empty") is None + assert not steps.exists() + + +def test_cleaner_default_config_and_defensive_branches(tmp_path, monkeypatch) -> None: + """验证默认配置构造、缺失/非法时间与缺失任务记录的防御分支。""" + db = _db(tmp_path) + # 默认配置(interval/grace 走 config 默认值)。 + cleaner = OrphanCleaner(db, tmp_path / "storage") + assert cleaner.interval_seconds > 0 + assert cleaner.grace_seconds > 0 + # 无更新时间 / 非法时间均保守视为未过期。 + assert cleaner._expired(None) is False + assert cleaner._expired("not-a-date") is False + # 不存在的根目录直接返回 0。 + assert cleaner._clean_dangling(tmp_path / "missing", set()) == 0 + # list_run_ids 返回的 ID 在读取详情前已不存在时跳过。 + monkeypatch.setattr(db, "list_run_ids", lambda: ["ghost"]) + monkeypatch.setattr(db, "get_run", lambda run_id: None) + assert cleaner.clean_once() == 0 + + +def test_cleaner_start_stop_loop(tmp_path) -> None: + """验证清理线程可启动、周期执行并正常停止。""" + import time + + db = _db(tmp_path) + cleaner = OrphanCleaner(db, tmp_path / "storage", interval_seconds=0.05, grace_seconds=3600) + cleaner.start() + try: + cleaner.start() + time.sleep(0.2) + finally: + cleaner.stop() + assert cleaner._thread is None + + +def test_lifespan_starts_cleaner(monkeypatch) -> None: + """验证启用清理器时应用生命周期会启动清理线程并随退出停止。""" + from fastapi.testclient import TestClient + + from wov_app.main import app + + monkeypatch.setenv("WOV_CLEANUP_ENABLED", "1") + with TestClient(app) as client: + assert client.get("/health").status_code == 200 + assert app.state.cleaner._thread is not None diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100755 index 0000000..3214685 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,174 @@ +"""wov_sdk.models 的单元测试。 + +测试覆盖所有数据模型的 JSON 往返序列化、字段校验和 manifest 文件加载, +确保协议模型的稳定性。 +""" + +import json + +import pytest + +from wov_sdk.models import ( + HealthResponse, + InvokeRequest, + InvokeResponse, + NodeManifest, + ProgressEvent, + WorkflowDefinition, + WorkflowEdge, + WorkflowNode, +) + + +def valid_manifest() -> NodeManifest: + """构造一个覆盖全部字段的合法 NodeManifest,供测试复用。""" + return NodeManifest( + id="echo", + name="Echo", + version="1.0.0", + capability="echo", + command=["python", "-m", "echo"], + repo_dir="wov-node-echo", + env={"PORT": "0"}, + input_schema={"text": "string"}, + output_schema={"text": "string"}, + max_concurrency=2, + idle_ttl_seconds=15, + health_timeout_seconds=5, + keep_warm=True, + ) + + +def test_manifest_round_trip() -> None: + """验证 manifest 经过 to_dict/from_dict 后保持原值。""" + manifest = valid_manifest() + restored = NodeManifest.from_dict(manifest.to_dict()) + assert restored == manifest + + +@pytest.mark.parametrize( + ("field", "value"), + [ + ("id", ""), + ("name", ""), + ("version", ""), + ("capability", ""), + ("repo_dir", ""), + ("command", []), + ("max_concurrency", 0), + ("idle_ttl_seconds", -1), + ("health_timeout_seconds", 0), + ], +) +def test_manifest_validation(field: str, value: object) -> None: + """验证必填字段为空或数值越界时抛出 ValueError。""" + manifest = valid_manifest() + setattr(manifest, field, value) + with pytest.raises(ValueError): + manifest.validate() + + +def test_manifest_load(tmp_path) -> None: + """验证 NodeManifest.load 能从 JSON 文件读取并校验。""" + path = tmp_path / "node.manifest.json" + path.write_text(json.dumps(valid_manifest().to_dict()), encoding="utf-8") + loaded = NodeManifest.load(str(path)) + assert loaded.id == "echo" + + +def test_invoke_request_round_trip() -> None: + """验证 InvokeRequest 的 JSON 往返序列化。""" + request = InvokeRequest( + run_id="run_1", + node_instance_id="ni_1", + inputs={"text": "hello"}, + params={"temperature": 0.2}, + output_dir="out", + ) + restored = InvokeRequest.from_dict(request.to_dict()) + assert restored == request + + +def test_invoke_response_round_trip() -> None: + """验证 InvokeResponse 的 JSON 往返序列化。""" + response = InvokeResponse(status="completed", outputs={"text": "hello"}) + restored = InvokeResponse.from_dict(response.to_dict()) + assert restored == response + + +def test_health_and_progress_serialization() -> None: + """验证健康检查和进度事件模型的字典输出。""" + health = HealthResponse(status="ok", node_id="echo", version="1.0.0") + assert health.to_dict() == { + "status": "ok", + "node_id": "echo", + "version": "1.0.0", + } + + progress = ProgressEvent(run_id="run_1", node_id="echo", progress=0.5, message="half") + assert progress.to_dict() == { + "run_id": "run_1", + "node_id": "echo", + "progress": 0.5, + "message": "half", + } + + +def test_workflow_node_and_edge_round_trip() -> None: + """验证工作流节点与边的 JSON 往返序列化。""" + node = WorkflowNode( + id="asr", + node_type="faster-whisper", + params={"language": "ja"}, + inputs={"audio_uri": "extract.audio_uri"}, + ) + edge = WorkflowEdge(from_node="extract", to_node="asr") + assert WorkflowNode.from_dict(node.to_dict()) == node + assert WorkflowEdge.from_dict(edge.to_dict()) == edge + assert edge.to_dict() == {"from": "extract", "to": "asr"} + + assert node.to_dict()["inputs"] == {"audio_uri": "extract.audio_uri"} + + +def test_workflow_definition_round_trip_and_validation() -> None: + """验证完整 DAG 定义可往返序列化并通过校验。""" + definition = WorkflowDefinition( + name="demo", + version=1, + nodes=[ + WorkflowNode(id="extract", node_type="ffmpeg"), + WorkflowNode(id="asr", node_type="whisper"), + ], + edges=[WorkflowEdge(from_node="extract", to_node="asr")], + entry_inputs={"video_uri": "file"}, + final_outputs={"srt": "asr.srt_uri"}, + ) + restored = WorkflowDefinition.from_dict(definition.to_dict()) + assert restored == definition + restored.validate() + + +def test_workflow_definition_invalid() -> None: + """验证非法 DAG(空名、版本为 0、重复节点、未知边)被拒绝。""" + with pytest.raises(ValueError): + WorkflowDefinition(name="", version=1).validate() + + with pytest.raises(ValueError): + WorkflowDefinition(name="demo", version=0).validate() + + duplicate = WorkflowDefinition( + name="demo", + version=1, + nodes=[WorkflowNode(id="a", node_type="x"), WorkflowNode(id="a", node_type="y")], + ) + with pytest.raises(ValueError): + duplicate.validate() + + unknown_edge = WorkflowDefinition( + name="demo", + version=1, + nodes=[WorkflowNode(id="a", node_type="x")], + edges=[WorkflowEdge(from_node="a", to_node="missing")], + ) + with pytest.raises(ValueError): + unknown_edge.validate() diff --git a/tests/test_nodes.py b/tests/test_nodes.py new file mode 100644 index 0000000..1324aa8 --- /dev/null +++ b/tests/test_nodes.py @@ -0,0 +1,1295 @@ +"""进程内节点测试。 + +合并原 5 个节点仓库的测试:echo、ffmpeg、whisper、llm、ass。节点已变为 +进程内模块(nodes/*.py),移除了原入口点(__main__/run_node)相关测试。 +""" + +import base64 +import json +import subprocess +import sys +import threading +import types +import urllib.error +import urllib.request +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path + +from nodes.ass import invoke as ass_invoke +from nodes.ass import parse_srt, write_ass +from nodes.echo import invoke as echo_invoke +from nodes.ffmpeg import _ffmpeg_bin, invoke as ffmpeg_invoke +from nodes.llm import invoke as llm_invoke +from nodes.llm import translate_lines +from nodes.whisper import format_timestamp +from nodes.whisper import invoke as whisper_invoke +from nodes.whisper import resolve_model_path +from wov_sdk.models import InvokeRequest + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent + +# --------------------------------------------------------------------------- +# Echo 节点 +# --------------------------------------------------------------------------- + + +def test_echo_invoke_text(tmp_path) -> None: + """验证直接传入 text 时 echo 节点原样写出文本。""" + response = echo_invoke( + InvokeRequest( + run_id="run_1", + node_instance_id="ni_1", + inputs={"text": "hello echo"}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "completed" + assert response.outputs["text"] == "hello echo" + assert Path(response.outputs["file_uri"]).read_text(encoding="utf-8") == "hello echo" + + +def test_echo_invoke_absolute_file(tmp_path) -> None: + """验证绝对路径 file_uri 的文件内容被读取为输入。""" + source = tmp_path / "input.txt" + source.write_text("from file", encoding="utf-8") + response = echo_invoke( + InvokeRequest( + run_id="run_2", + node_instance_id="ni_2", + inputs={"file_uri": str(source)}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed" + assert response.outputs["text"] == "from file" + + +def test_echo_invoke_relative_file(tmp_path) -> None: + """验证相对路径 file_uri 以单体根目录为基准解析。""" + source = WORKSPACE / "relative_input.txt" + source.write_text("relative", encoding="utf-8") + try: + response = echo_invoke( + InvokeRequest( + run_id="run_3", + node_instance_id="ni_3", + inputs={"file_uri": "relative_input.txt"}, + output_dir=str(tmp_path / "out"), + ) + ) + finally: + source.unlink() + assert response.status == "completed" + assert response.outputs["text"] == "relative" + + +def test_echo_invoke_default_text(tmp_path) -> None: + """验证无任何输入时 echo 节点返回默认文本。""" + response = echo_invoke( + InvokeRequest( + run_id="run_4", + node_instance_id="ni_4", + inputs={}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "completed" + assert response.outputs["text"] == "echo" + + +# --------------------------------------------------------------------------- +# FFmpeg 节点 +# --------------------------------------------------------------------------- + + +def _ffmpeg_request(tmp_path, **overrides) -> InvokeRequest: + """构造包含默认视频输入与提音参数的调用请求。""" + payload = { + "run_id": "run_1", + "node_instance_id": "ni_1", + "inputs": {"video_uri": str(tmp_path / "input.mp4")}, + "params": {"sample_rate": 16000, "channels": 1}, + "output_dir": str(tmp_path / "out"), + } + payload.update(overrides) + return InvokeRequest(**payload) + + +def test_ffmpeg_success(tmp_path, monkeypatch) -> None: + """验证成功调用会生成 audio.wav 产物。""" + def fake_run(command, **kwargs): + output = Path(command[-1]) + output.parent.mkdir(parents=True, exist_ok=True) + output.write_bytes(b"fake wav") + return subprocess.CompletedProcess(command, 0) + + monkeypatch.setattr("nodes.ffmpeg.shutil.which", lambda _: "ffmpeg") + monkeypatch.setattr("nodes.ffmpeg.subprocess.run", fake_run) + response = ffmpeg_invoke(_ffmpeg_request(tmp_path)) + assert response.status == "completed" + assert Path(response.outputs["audio_uri"]).name == "audio.wav" + + +def test_ffmpeg_configured_bin(tmp_path, monkeypatch) -> None: + """验证 FFMPEG_BIN 环境变量优先于 PATH 查找。""" + fake_bin = tmp_path / "ffmpeg.exe" + fake_bin.write_bytes(b"") + monkeypatch.setenv("FFMPEG_BIN", str(fake_bin)) + monkeypatch.setattr("nodes.ffmpeg.subprocess.run", lambda *a, **k: subprocess.CompletedProcess([], 0)) + response = ffmpeg_invoke(_ffmpeg_request(tmp_path)) + assert response.status == "completed" + + +def test_ffmpeg_bundled_fallback(tmp_path, monkeypatch) -> None: + """验证无系统 ffmpeg 时回退到 imageio-ffmpeg 内置二进制。""" + monkeypatch.delenv("FFMPEG_BIN", raising=False) + monkeypatch.setattr("nodes.ffmpeg.shutil.which", lambda _: None) + bundled = _ffmpeg_bin() + assert bundled != "ffmpeg" + assert Path(bundled).is_file() + monkeypatch.setattr("nodes.ffmpeg._ffmpeg_bin", lambda: bundled) + + def fake_run(command, **kwargs): + Path(command[-1]).parent.mkdir(parents=True, exist_ok=True) + Path(command[-1]).write_bytes(b"wav") + return subprocess.CompletedProcess(command, 0) + + monkeypatch.setattr("nodes.ffmpeg.subprocess.run", fake_run) + response = ffmpeg_invoke(_ffmpeg_request(tmp_path)) + assert response.status == "completed" + + +def test_ffmpeg_bundled_import_error(monkeypatch) -> None: + """验证 imageio-ffmpeg 不可用时最终回退为 "ffmpeg" 字符串。""" + monkeypatch.delenv("FFMPEG_BIN", raising=False) + monkeypatch.setattr("nodes.ffmpeg.shutil.which", lambda _: None) + monkeypatch.setitem(sys.modules, "imageio_ffmpeg", None) + assert _ffmpeg_bin() == "ffmpeg" + + +def test_ffmpeg_missing_video_uri(tmp_path) -> None: + """验证缺少 video_uri 时返回失败。""" + response = ffmpeg_invoke(_ffmpeg_request(tmp_path, inputs={})) + assert response.status == "failed" + assert "video_uri" in response.error + + +def test_ffmpeg_missing_bin(tmp_path, monkeypatch) -> None: + """验证找不到任何 ffmpeg 时返回明确失败信息。""" + monkeypatch.delenv("FFMPEG_BIN", raising=False) + monkeypatch.setattr("nodes.ffmpeg.shutil.which", lambda _: None) + monkeypatch.setattr("nodes.ffmpeg._bundled_ffmpeg", lambda: None) + response = ffmpeg_invoke(_ffmpeg_request(tmp_path)) + assert response.status == "failed" + assert "ffmpeg not found" in response.error + + +def test_ffmpeg_failure(tmp_path, monkeypatch) -> None: + """验证 ffmpeg 返回非零退出码时透传 stderr 错误。""" + def fake_run(command, **kwargs): + return subprocess.CompletedProcess(command, 1, stderr="boom") + + monkeypatch.setattr("nodes.ffmpeg.shutil.which", lambda _: "ffmpeg") + monkeypatch.setattr("nodes.ffmpeg.subprocess.run", fake_run) + response = ffmpeg_invoke(_ffmpeg_request(tmp_path)) + assert response.status == "failed" + assert "boom" in response.error + + +# --------------------------------------------------------------------------- +# Whisper 节点 +# --------------------------------------------------------------------------- + + +class FakeSegment: + """模拟 faster-whisper 的分段对象,只提供转写测试需要的字段。""" + + def __init__(self, start, end, text): + self.start = start + self.end = end + self.text = text + + +class FakeWhisperModel: + """记录构造参数并返回固定分段的假 WhisperModel。""" + + instances: list[tuple[tuple, dict]] = [] + + def __init__(self, *args, **kwargs): + # 记录每次构造参数,测试据此断言 device/compute_type 传递。 + FakeWhisperModel.instances.append((args, kwargs)) + self.args = args + self.kwargs = kwargs + + def transcribe(self, path, **kwargs): + # 返回固定两个分段:一个普通时长,一个跨小时验证时间戳格式。 + return ( + [ + FakeSegment(0, 1, "第一段"), + FakeSegment(3600.5, 3602.25, "第二段"), + ], + None, + ) + + +def _install_fake_whisper(monkeypatch, model_class=FakeWhisperModel) -> None: + """把假 faster_whisper 模块注入 sys.modules,替代真实依赖。""" + fake_module = types.SimpleNamespace(WhisperModel=model_class) + monkeypatch.setitem(sys.modules, "faster_whisper", fake_module) + + +def _whisper_request(tmp_path, **overrides) -> InvokeRequest: + """构造默认音频输入与日语参数的调用请求。""" + payload = { + "run_id": "run_1", + "node_instance_id": "ni_1", + "inputs": {"audio_uri": str(tmp_path / "audio.wav")}, + "params": {"language": "ja"}, + "output_dir": str(tmp_path / "out"), + } + payload.update(overrides) + return InvokeRequest(**payload) + + +def test_resolve_explicit_param_wins(tmp_path) -> None: + """验证请求参数中的 model_path 优先级最高,覆盖环境变量与本地候选。""" + local = tmp_path / "model" + local.mkdir() + (local / "model.bin").write_bytes(b"x") + resolved = resolve_model_path( + {"model_path": "/opt/custom-model"}, + env={"WHISPER_MODEL_PATH": "/env/model"}, + candidates=[local], + ) + assert resolved == "/opt/custom-model" + + +def test_resolve_env_wins_over_local(tmp_path) -> None: + """验证 WHISPER_MODEL_PATH 环境变量优先于本地候选目录。""" + local = tmp_path / "model" + local.mkdir() + (local / "model.bin").write_bytes(b"x") + resolved = resolve_model_path( + {}, + env={"WHISPER_MODEL_PATH": "/env/model"}, + candidates=[local], + ) + assert resolved == "/env/model" + + +def test_resolve_local_candidate_used(tmp_path) -> None: + """验证无参数与环境变量时优先使用含 model.bin 的本地候选目录。""" + local = tmp_path / "model" + local.mkdir() + (local / "model.bin").write_bytes(b"x") + resolved = resolve_model_path({}, env={}, candidates=[local]) + assert resolved == str(local) + + +def test_resolve_incomplete_candidate_skipped(tmp_path) -> None: + """验证缺少 model.bin 的候选目录被跳过,避免加载残缺模型。""" + empty = tmp_path / "empty" + empty.mkdir() + resolved = resolve_model_path({}, env={}, candidates=[empty]) + assert resolved == "large-v3" + + +def test_resolve_fallback_remote() -> None: + """验证全部本地候选缺失时回退到远端 large-v3 作为最后兜底。""" + resolved = resolve_model_path({}, env={}, candidates=[]) + assert resolved == "large-v3" + + +def test_format_timestamp() -> None: + """验证秒数到 SRT 时间戳的格式化结果。""" + assert format_timestamp(0) == "00:00:00,000" + assert format_timestamp(3600.5) == "01:00:00,500" + assert format_timestamp(61.25) == "00:01:01,250" + + +def test_whisper_success(tmp_path, monkeypatch) -> None: + """验证成功转写会生成 SRT 并默认使用 auto 设备/计算类型。""" + FakeWhisperModel.instances.clear() + _install_fake_whisper(monkeypatch) + _make_wav(tmp_path / "audio.wav", 5) + response = whisper_invoke(_whisper_request(tmp_path)) + assert response.status == "completed" + content = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + assert "第一段" in content + assert "01:00:00,500 --> 01:00:02,250" in content + _, kwargs = FakeWhisperModel.instances[-1] + assert kwargs["device"] == "auto" + assert kwargs["compute_type"] == "auto" + + +def test_load_cuda_libraries_linux(monkeypatch) -> None: + """验证 Linux 下进程内预加载 nvidia 动态库,含失败跳过分支。""" + import ctypes + + from nodes.whisper import _load_cuda_libraries + + # 用真实 nvidia 轮子路径加载,不应抛出异常。 + _load_cuda_libraries() + + # 模拟加载失败分支:部分库抛 OSError 时应被跳过。 + calls: list[str] = [] + real_cdll = ctypes.CDLL + + def fake_cdll(path): + calls.append(str(path)) + if "cudnn" in str(path): + raise OSError("boom") + return real_cdll(path) + + monkeypatch.setattr("nodes.whisper.ctypes.CDLL", fake_cdll) + _load_cuda_libraries() + assert calls + + +def test_load_cuda_libraries_windows(monkeypatch, tmp_path) -> None: + """验证 Windows 分支通过 add_dll_directory 注册 DLL 搜索目录。""" + import os + import sysconfig + + from nodes.whisper import _load_cuda_libraries + + site = tmp_path / "site" + (site / "nvidia" / "cublas" / "bin").mkdir(parents=True) + (site / "nvidia" / "cudnn" / "bin").mkdir(parents=True) + monkeypatch.setattr(sysconfig, "get_paths", lambda: {"purelib": str(site)}) + added: list[str] = [] + # 只注入平台判断与 DLL 目录注册,不改动全局 os.name,避免 pathlib 出错。 + monkeypatch.setattr("nodes.whisper._is_windows", lambda: True) + monkeypatch.setattr(os, "add_dll_directory", lambda d: added.append(d), raising=False) + _load_cuda_libraries() + assert any("cublas" in d and d.endswith("bin") for d in added) +def test_whisper_compute_type_override(tmp_path, monkeypatch) -> None: + """验证请求参数可以覆盖默认计算类型。""" + FakeWhisperModel.instances.clear() + _install_fake_whisper(monkeypatch) + _make_wav(tmp_path / "audio.wav", 5) + response = whisper_invoke( + _whisper_request(tmp_path, params={"language": "ja", "compute_type": "int8"}) + ) + assert response.status == "completed" + _, kwargs = FakeWhisperModel.instances[-1] + assert kwargs["compute_type"] == "int8" + + +def test_whisper_model_raises(tmp_path, monkeypatch) -> None: + """验证模型加载失败时返回 failed 与错误信息。""" + class BrokenModel: + def __init__(self, *args, **kwargs): + raise RuntimeError("model load failed") + + _install_fake_whisper(monkeypatch, BrokenModel) + _make_wav(tmp_path / "audio.wav", 5) + response = whisper_invoke(_whisper_request(tmp_path)) + assert response.status == "failed" + assert "model load failed" in response.error + + +def test_whisper_missing_input(tmp_path) -> None: + """验证缺少 audio_uri 时返回失败。""" + response = whisper_invoke(_whisper_request(tmp_path, inputs={})) + assert response.status == "failed" + + +def test_whisper_missing_file(tmp_path) -> None: + """验证音频文件不存在时返回失败。""" + response = whisper_invoke(_whisper_request(tmp_path)) + assert response.status == "failed" + assert "audio file not found" in response.error + + +# --------------------------------------------------------------------------- +# LLM 节点 +# --------------------------------------------------------------------------- + + +class FakeUrlOpenResponse: + """模拟 urllib 响应对象,提供固定 LLM 译文内容。""" + + def __init__(self, content: str) -> None: + # 预编码为 Chat Completions 风格的 JSON 响应体。 + self._payload = json.dumps( + {"choices": [{"message": {"content": content}}]} + ).encode("utf-8") + + def read(self) -> bytes: + return self._payload + + def __enter__(self): + return self + + def __exit__(self, *args) -> bool: + return False + + +def _make_srt(tmp_path, count=5) -> Path: + """生成标准 SRT 测试文件,文本行为"原文字幕N"。""" + lines = [] + for index in range(count): + lines.extend( + [ + str(index + 1), + f"00:00:{index:02d},000 --> 00:00:{index + 1:02d},000", + f"原文字幕{index + 1}", + "", + ] + ) + path = tmp_path / "in.srt" + path.write_text("\n".join(lines), encoding="utf-8") + return path + + +def test_llm_translate_lines_via_fake_api(monkeypatch) -> None: + """验证通过真实 HTTP 服务器调用 LLM 接口并保持行顺序。""" + class Handler(BaseHTTPRequestHandler): + def do_POST(self) -> None: + length = int(self.headers.get("Content-Length", "0")) + self.rfile.read(length) + body = json.dumps( + { + "choices": [ + { + "message": { + "content": "译文一\n译文二\n译文三\n译文四\n译文五" + } + } + ] + } + ).encode("utf-8") + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + + def log_message(self, format, *args) -> None: + return + + server = ThreadingHTTPServer(("127.0.0.1", 0), Handler) + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + try: + monkeypatch.setenv( + "LLM_API_BASE", + f"http://127.0.0.1:{server.server_address[1]}/v1/chat/completions", + ) + monkeypatch.setenv("LLM_API_KEY", "test-key") + result = translate_lines( + ["一", "二", "三", "四", "五"], + {"target_language": "zh-CN"}, + ) + assert result == ["译文一", "译文二", "译文三", "译文四", "译文五"] + finally: + server.shutdown() + server.server_close() + thread.join(timeout=5) + + +def test_llm_translate_lines_api_error(monkeypatch) -> None: + """验证 LLM 接口不可用时抛出 URLError。""" + def fail_open(request, timeout): + raise urllib.error.URLError("api down") + + monkeypatch.setattr("nodes.llm.urllib.request.urlopen", fail_open) + try: + translate_lines(["一"], {}) + raise AssertionError("expected failure") + except urllib.error.URLError: + pass + + +def test_llm_translate_lines_default_timeout(monkeypatch) -> None: + """验证未配置超时时使用默认 600 秒。""" + captured = {} + + def fake_open(request, timeout): + captured["timeout"] = timeout + return FakeUrlOpenResponse("译文一") + + monkeypatch.setattr("nodes.llm.urllib.request.urlopen", fake_open) + monkeypatch.setenv("LLM_API_BASE", "http://fake/v1/chat/completions") + + result = translate_lines(["一"], {}) + + assert result == ["译文一"] + assert captured["timeout"] == 600 + + +def test_llm_translate_lines_env_timeout(monkeypatch) -> None: + """验证 LLM_TIMEOUT_SECONDS 环境变量可覆盖超时。""" + captured = {} + + def fake_open(request, timeout): + captured["timeout"] = timeout + return FakeUrlOpenResponse("译文一") + + monkeypatch.setattr("nodes.llm.urllib.request.urlopen", fake_open) + monkeypatch.setenv("LLM_API_BASE", "http://fake/v1/chat/completions") + monkeypatch.setenv("LLM_TIMEOUT_SECONDS", "45") + + translate_lines(["一"], {}) + + assert captured["timeout"] == 45 + + +def test_llm_invoke_success(tmp_path, monkeypatch) -> None: + """验证成功调用会把译文回填到 SRT 并输出 cn.srt。""" + source = _make_srt(tmp_path) + + def fake_translate(lines, params): + return [f"译文{i + 1}" for i in range(len(lines))] + + monkeypatch.setattr("nodes.llm.translate_lines", fake_translate) + response = llm_invoke( + InvokeRequest( + run_id="run_1", + node_instance_id="ni_1", + inputs={"srt_uri": str(source)}, + params={"target_language": "zh-CN"}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed" + content = Path(response.outputs["cn_srt_uri"]).read_text(encoding="utf-8") + assert "译文1" in content + + +def test_llm_invoke_pads_short_translation(tmp_path, monkeypatch) -> None: + """验证译文行数不足时用空行补齐,保持 SRT 结构完整。""" + source = _make_srt(tmp_path, count=3) + monkeypatch.setattr( + "nodes.llm.translate_lines", + lambda lines, params: ["only one"], + ) + response = llm_invoke( + InvokeRequest( + run_id="run_2", + node_instance_id="ni_2", + inputs={"srt_uri": str(source)}, + output_dir=str(tmp_path / "out2"), + ) + ) + assert response.status == "completed" + + +def test_llm_invoke_missing_input(tmp_path) -> None: + """验证缺少 srt_uri 时返回失败。""" + response = llm_invoke( + InvokeRequest( + run_id="run_3", + node_instance_id="ni_3", + inputs={}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + + +def test_llm_invoke_missing_file(tmp_path) -> None: + """验证 SRT 文件不存在时返回失败。""" + response = llm_invoke( + InvokeRequest( + run_id="run_4", + node_instance_id="ni_4", + inputs={"srt_uri": str(tmp_path / "missing.srt")}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + + +# --------------------------------------------------------------------------- +# ASS 节点 +# --------------------------------------------------------------------------- + + +SAMPLE_SRT = """ +1 +00:00:01,000 --> 00:00:03,000 +第一行 +第二行 + +2 +00:00:04,000 --> 00:00:06,000 +第三行 +""" + + +def test_ass_parse_and_write(tmp_path) -> None: + """验证多行字幕会被解析并通过左右眼样式写出。""" + entries = parse_srt(SAMPLE_SRT) + assert len(entries) == 2 + assert entries[0][2] == r"第一行\N第二行" + + output = tmp_path / "out.ass" + write_ass(entries, output, "3840x1920") + content = output.read_text(encoding="utf-8") + assert "PlayResX: 3840" in content + assert "PlayResY: 1920" in content + assert "LeftEye" in content + assert "RightEye" in content + assert r"第一行\N第二行" in content + + +def test_ass_parse_malformed(tmp_path) -> None: + """验证畸形 SRT 不会抛出异常且返回空条目或忽略坏行。""" + source = tmp_path / "bad.srt" + source.write_text("1\nnot a time line\n", encoding="utf-8") + assert parse_srt(source.read_text(encoding="utf-8")) == [] + + source.write_text("1", encoding="utf-8") + assert parse_srt(source.read_text(encoding="utf-8")) == [] + + +def test_ass_invoke_success(tmp_path) -> None: + """验证成功调用会按指定分辨率输出 ASS 产物。""" + source = tmp_path / "in.srt" + source.write_text(SAMPLE_SRT, encoding="utf-8") + response = ass_invoke( + InvokeRequest( + run_id="run_1", + node_instance_id="ni_1", + inputs={"cn_srt_uri": str(source)}, + params={"resolution": "1920x1080"}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed" + assert "PlayResX: 1920" in Path(response.outputs["ass_uri"]).read_text(encoding="utf-8") + + +def test_ass_invoke_missing_input(tmp_path) -> None: + """验证缺少 cn_srt_uri 时返回失败。""" + response = ass_invoke( + InvokeRequest( + run_id="run_2", + node_instance_id="ni_2", + inputs={}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + + +def test_ass_invoke_missing_file(tmp_path) -> None: + """验证 SRT 文件不存在时返回失败。""" + response = ass_invoke( + InvokeRequest( + run_id="run_3", + node_instance_id="ni_3", + inputs={"cn_srt_uri": str(tmp_path / "missing.srt")}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + + +def test_resolve_bare_name_found(tmp_path) -> None: + """验证裸模型名会在候选目录父级下按名解析到本地模型。""" + named = tmp_path / "zh-ct2" + named.mkdir() + (named / "model.bin").write_bytes(b"x") + # 候选目录取父目录的兄弟布局:candidates 首项父级即模型根目录。 + candidates = [tmp_path / "models"] + resolved = resolve_model_path({"model_path": "zh-ct2"}, env={}, candidates=candidates) + assert resolved == str(named) + + +def test_resolve_bare_name_missing(tmp_path) -> None: + """验证裸模型名在本地不存在时原样返回,交由 faster-whisper 处理。""" + resolved = resolve_model_path( + {"model_path": "no-such-model"}, env={}, candidates=[tmp_path / "models"] + ) + assert resolved == "no-such-model" + + +def test_whisper_task_translate(tmp_path, monkeypatch) -> None: + """验证 task=translate 参数会传递给 faster-whisper 的 transcribe。""" + class TaskRecorderModel: + def __init__(self, *args, **kwargs): + self.transcribe_kwargs = None + + def transcribe(self, path, **kwargs): + self.transcribe_kwargs = kwargs + return ( + [FakeSegment(0, 1, "中文直出")], + None, + ) + + recorder = TaskRecorderModel() + monkeypatch.setitem(sys.modules, "faster_whisper", types.SimpleNamespace(WhisperModel=lambda *a, **k: recorder)) + _make_wav(tmp_path / "audio.wav", 5) + response = whisper_invoke( + _whisper_request(tmp_path, params={"language": "ja", "task": "translate"}) + ) + assert response.status == "completed" + assert recorder.transcribe_kwargs["task"] == "translate" + assert "中文直出" in Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + + +def test_whisper_condition_on_previous_text(tmp_path, monkeypatch) -> None: + """验证长音频参数 condition_on_previous_text 可配置并默认关闭。""" + captured = {} + + class CondRecorderModel: + def __init__(self, *args, **kwargs): + pass + + def transcribe(self, path, **kwargs): + captured["condition_on_previous_text"] = kwargs.get("condition_on_previous_text") + return ([FakeSegment(0, 1, "ok")], None) + + monkeypatch.setitem( + sys.modules, + "faster_whisper", + types.SimpleNamespace(WhisperModel=lambda *a, **k: CondRecorderModel()), + ) + _make_wav(tmp_path / "audio.wav", 5) + # 默认 False(长音频稳定);显式传 True 可开启。 + whisper_invoke(_whisper_request(tmp_path)) + assert captured["condition_on_previous_text"] is False + whisper_invoke(_whisper_request(tmp_path, params={"condition_on_previous_text": True})) + assert captured["condition_on_previous_text"] is True + + +def test_split_audio_disabled_or_no_ffmpeg(tmp_path, monkeypatch) -> None: + """验证 chunk_seconds<=0 或缺少 ffmpeg 时回退整段,不调用切块。""" + from nodes.whisper import _split_audio + + audio = _make_wav(tmp_path / "in.wav", 5) + called = [] + + def fake_run(*args, **kwargs): + called.append(args) + return subprocess.CompletedProcess([], 0) + + monkeypatch.setattr("nodes.whisper.subprocess.run", fake_run) + # chunk_seconds<=0:直接返回整段,不执行 ffmpeg。 + assert _split_audio(audio, tmp_path, 0, "ffmpeg") == [audio] + # 缺少 ffmpeg:直接返回整段。 + assert _split_audio(audio, tmp_path, 600, None) == [audio] + assert called == [] + + +def test_split_audio_failure_fallback(tmp_path, monkeypatch) -> None: + """验证 ffmpeg 切块失败时回退整段单次转写。""" + from nodes.whisper import _split_audio + + audio = _make_wav(tmp_path / "in.wav", 5) + monkeypatch.setattr( + "nodes.whisper.subprocess.run", + lambda *a, **k: subprocess.CompletedProcess([], 1, stderr="boom"), + ) + assert _split_audio(audio, tmp_path, 600, "ffmpeg") == [audio] + + +def test_split_audio_success_and_empty(tmp_path, monkeypatch) -> None: + """验证切块成功返回块列表;产出为空时回退整段。""" + from nodes.whisper import _split_audio + + audio = _make_wav(tmp_path / "in.wav", 5) + + def fake_run_success(command, **kwargs): + # 模拟 ffmpeg 产出两个真实的块 WAV。 + pattern = command[-1] + for name in ("chunk_000.wav", "chunk_001.wav"): + _make_wav(tmp_path / "chunks" / name, 2) + return subprocess.CompletedProcess(command, 0) + + monkeypatch.setattr("nodes.whisper.subprocess.run", fake_run_success) + chunks = _split_audio(audio, tmp_path, 600, "ffmpeg") + assert len(chunks) == 2 + assert chunks[0].name == "chunk_000.wav" + + # 切块成功但没有产出文件时回退整段。 + monkeypatch.setattr( + "nodes.whisper.subprocess.run", + lambda *a, **k: subprocess.CompletedProcess([], 0), + ) + assert _split_audio(audio, tmp_path / "other", 600, "ffmpeg") == [audio] + + +def test_whisper_chunked_transcription_merges_offsets(tmp_path, monkeypatch) -> None: + """验证分块转写用真实 WAV 块,第二块时间轴按实际时长偏移合并到同一 SRT。""" + from nodes.whisper import _split_audio + + chunk_dir = tmp_path / "out" / "chunks" + chunk_dir.mkdir(parents=True) + # 真实 WAV 块(各 60s),偏移按实际时长累积为 60s。 + chunk1 = _make_wav(chunk_dir / "chunk_000.wav", 60) + chunk2 = _make_wav(chunk_dir / "chunk_001.wav", 60) + monkeypatch.setattr("nodes.whisper._split_audio", lambda a, o, c, f: [chunk1, chunk2]) + FakeWhisperModel.instances.clear() + _install_fake_whisper(monkeypatch) + _make_wav(tmp_path / "audio.wav", 5) + response = whisper_invoke(_whisper_request(tmp_path, params={"chunk_seconds": 60})) + assert response.status == "completed" + content = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + # 序号从 1 开始连续递增;第一块无偏移,第二块偏移 60 秒。 + assert content.startswith("1\n") + assert "3\n00:01:00,000" in content + assert "00:00:00,000 --> 00:00:01,000" in content + assert "01:00:00,500 --> 01:00:02,250" in content + assert "00:01:00,000 --> 00:01:01,000" in content + assert "01:01:00,500 --> 01:01:02,250" in content + + +def test_whisper_chunk_disabled_single_call(tmp_path, monkeypatch) -> None: + """验证 chunk_seconds=0 时单次调用、不切块。""" + FakeWhisperModel.instances.clear() + _install_fake_whisper(monkeypatch) + _make_wav(tmp_path / "audio.wav", 5) + response = whisper_invoke(_whisper_request(tmp_path, params={"chunk_seconds": 0})) + assert response.status == "completed" + # 单次调用:init 只记录一次实例。 + assert len(FakeWhisperModel.instances) == 1 + + +def test_whisper_vad_filter_default_off(tmp_path, monkeypatch) -> None: + """验证 vad_filter 默认开启,可显式关闭。""" + captured = {} + + class VadRecorderModel: + def __init__(self, *args, **kwargs): + pass + + def transcribe(self, path, **kwargs): + captured["vad_filter"] = kwargs.get("vad_filter") + return ([FakeSegment(0, 1, "ok")], None) + + monkeypatch.setitem( + sys.modules, + "faster_whisper", + types.SimpleNamespace(WhisperModel=lambda *a, **k: VadRecorderModel()), + ) + _make_wav(tmp_path / "audio.wav", 5) + whisper_invoke(_whisper_request(tmp_path)) + assert captured["vad_filter"] is True + whisper_invoke(_whisper_request(tmp_path, params={"vad_filter": False})) + assert captured["vad_filter"] is False + + +def _make_wav(path, seconds, rate=16000) -> Path: + """生成指定时长的 16kHz 单声道 16bit 静音 WAV。""" + import wave + + with wave.open(str(path), "wb") as wav: + wav.setnchannels(1) + wav.setsampwidth(2) + wav.setframerate(rate) + wav.writeframes(b"\x00\x00" * int(rate * seconds)) + return path + + +def test_whisper_chunk_offset_uses_actual_duration(tmp_path, monkeypatch) -> None: + """验证分块偏移按 WAV 实际时长累积(1s+2s 块 → 第二块偏移 1s 而非块长 60s)。""" + chunk_dir = tmp_path / "out" / "chunks" + chunk_dir.mkdir(parents=True) + chunk1 = _make_wav(chunk_dir / "chunk_000.wav", 1) + chunk2 = _make_wav(chunk_dir / "chunk_001.wav", 2) + monkeypatch.setattr("nodes.whisper._split_audio", lambda a, o, c, f: [chunk1, chunk2]) + FakeWhisperModel.instances.clear() + _install_fake_whisper(monkeypatch) + _make_wav(tmp_path / "audio.wav", 5) + response = whisper_invoke(_whisper_request(tmp_path, params={"chunk_seconds": 60})) + assert response.status == "completed" + content = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + # 第二块偏移 = 第一块实际时长 1s(若用块长假设则会是 60s → 00:01:00)。 + assert "00:00:01,000 --> 00:00:02,000" in content + assert "00:01:00,000 --> 00:01:01,000" not in content + + +def test_whisper_segment_logs_full_video_time(caplog, tmp_path, monkeypatch) -> None: + """验证每条分段日志包含编号与完整视频角度(含分块偏移)的时间范围。""" + chunk_dir = tmp_path / "out" / "chunks" + chunk_dir.mkdir(parents=True) + chunk1 = _make_wav(chunk_dir / "chunk_000.wav", 60) + chunk2 = _make_wav(chunk_dir / "chunk_001.wav", 60) + monkeypatch.setattr("nodes.whisper._split_audio", lambda a, o, c, f: [chunk1, chunk2]) + FakeWhisperModel.instances.clear() + _install_fake_whisper(monkeypatch) + _make_wav(tmp_path / "audio.wav", 5) + with caplog.at_level("INFO", logger="vrsub.whisper"): + response = whisper_invoke(_whisper_request(tmp_path, params={"chunk_seconds": 60})) + assert response.status == "completed" + seg_logs = [r.message for r in caplog.records if r.message.startswith("分段 #")] + # 第一块:0s 起;第二块:偏移 60s(第一块实际时长)。 + assert any("分段 #1: 00:00:00,000 --> 00:00:01,000" in m for m in seg_logs) + assert any(m.startswith("分段 #3: 00:01:00,000") for m in seg_logs) + + +def test_wav_duration_fallback_on_invalid_file(tmp_path) -> None: + """验证读取时长时,损坏/缺失文件回退 fallback 值(真实非法文件,非占位字节)。""" + from nodes.whisper import _wav_duration_seconds + + bad = tmp_path / "bad.wav" + bad.write_text("this is not a wav file", encoding="utf-8") + assert _wav_duration_seconds(bad, 60.0) == 60.0 + missing = tmp_path / "missing.wav" + assert _wav_duration_seconds(missing, 60.0) == 60.0 + + +# --------------------------------------------------------------------------- +# VLM OCR 节点(直接请求 Ollama /api/generate,流式) +# --------------------------------------------------------------------------- + + +# 真实的最小 PNG(1x1 像素,合法文件),用于构造真实图片输入。 +_MIN_PNG_BASE64 = ( + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8" + "z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==" +) + + +class FakeChatResponse: + """模拟 Ollama /api/generate 流式响应:readline() 逐行返回 JSON 块。 + + done=False(默认)时仅一行内容,随后 readline 返回空表示流结束; + done=True 时末尾追加一行带 done 标记的结束块。 + """ + + def __init__(self, content: str, done: bool = False) -> None: + self._lines = [ + json.dumps({"message": {"role": "assistant", "content": content}}).encode() + ] + if done: + self._lines.append( + json.dumps({"message": {"role": "assistant", "content": ""}, "done": True}).encode() + ) + + def readline(self) -> bytes: + return self._lines.pop(0) if self._lines else b"" + + def __enter__(self): + return self + + def __exit__(self, *args) -> bool: + return False + + +def _real_png(tmp_path) -> Path: + """生成真实 PNG 图片文件(解码自合法 base64)。""" + image = tmp_path / "frame.png" + image.write_bytes(base64.b64decode(_MIN_PNG_BASE64)) + return image + + +def test_vlm_success(tmp_path, monkeypatch) -> None: + """验证真实图片经流式读取后输出清洗过的文字与 ocr.txt 产物。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + captured = {} + + def fake_urlopen(request, timeout): + captured["timeout"] = timeout + captured["url"] = request.full_url + return FakeChatResponse("HELLO WORLD 123\n```markdown\n```\n```\n") + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fake_urlopen) + response = vlm_invoke( + InvokeRequest( + run_id="run_1", + node_instance_id="", + inputs={"image_uri": str(image)}, + params={"model": "glm-ocr:latest"}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + assert response.outputs["text"] == "HELLO WORLD 123" + assert captured["url"].endswith("/api/chat") + assert captured["timeout"] == 5 + content = Path(response.outputs["text_uri"]).read_text(encoding="utf-8") + assert "HELLO WORLD 123" in content + + +def test_vlm_missing_input_and_file(tmp_path) -> None: + """验证缺少 image_uri 或图片不存在时返回失败。""" + from nodes.vlm import invoke as vlm_invoke + + assert vlm_invoke( + InvokeRequest(run_id="r", node_instance_id="", inputs={}, output_dir=str(tmp_path)) + ).status == "failed" + assert vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(tmp_path / "missing.png")}, + output_dir=str(tmp_path), + ) + ).status == "failed" + + +def test_vlm_network_error(tmp_path, monkeypatch) -> None: + """验证 Ollama 服务不可达时返回 failed。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + + def fail_open(request, timeout): + raise urllib.error.URLError("ollama down") + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fail_open) + response = vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + assert "ollama down" in response.error + + +def test_vlm_response_format_error(tmp_path, monkeypatch) -> None: + """验证流式块既无 response 也无 done 标记时(格式错误)返回 failed。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + + class BadResponse: + def readline(self) -> bytes: + return b'{"foo": 1}' + + def __enter__(self): + return self + + def __exit__(self, *args) -> bool: + return False + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", lambda *a, **k: BadResponse()) + response = vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + + +def test_vlm_clean_ocr_text() -> None: + """验证清洗逻辑会剔除 markdown 围栏与空行。""" + from nodes.vlm import _clean_ocr_text + + cleaned = _clean_ocr_text("第一行\n```markdown\n```\n\n第二行\n```") + assert cleaned == "第一行\n第二行" + + +def test_vlm_options_in_body(tmp_path, monkeypatch) -> None: + """验证请求体携带采样选项(temperature=0/repeat_penalty/num_predict),可参数覆盖。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + captured = {} + + def fake_urlopen(request, timeout): + import json as _json + + captured["body"] = _json.loads(request.data.decode("utf-8")) + return FakeChatResponse("SUB 001") + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fake_urlopen) + vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + params={"repeat_penalty": 1.3, "num_predict": 128}, + output_dir=str(tmp_path), + ) + ) + assert captured["body"]["options"] == { + "temperature": 0.3, + "repeat_penalty": 1.3, + "num_predict": 128, + } + + +def test_vlm_call_structure_system_prompt_and_stop(tmp_path, monkeypatch) -> None: + """验证 /api/chat 调用结构:system 承载指令、user 只携带图片、stop=。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + captured = {} + + def fake_urlopen(request, timeout): + import json as _json + + captured["body"] = _json.loads(request.data.decode("utf-8")) + return FakeChatResponse("SUB 001") + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fake_urlopen) + vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + params={"prompt": "识别图片中的所有文字,原样输出。"}, + output_dir=str(tmp_path), + ) + ) + body = captured["body"] + assert body["stop"] == ["\n", "\n答", "答"] + assert body["stream"] is True + assert body["messages"][0]["role"] == "system" + assert "识别图片" in body["messages"][0]["content"] + assert body["messages"][1]["role"] == "user" + assert body["messages"][1]["content"] == "" + assert len(body["messages"][1]["images"]) == 1 +def test_vlm_stream_stop_sequence_truncation(tmp_path, monkeypatch) -> None: + """验证流式读取命中终止序列(换行+答,\n答)即停止并截断该标记。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + + def fake_urlopen(request, timeout): + # 模型输出先给出真实文本,随后进入“答:”式重复循环并输出终止序列。 + return FakeChatResponse("SUB 001\n答:重复循环垃圾") + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fake_urlopen) + response = vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "completed", response.error + # 终止序列及其后内容必须被截掉,只保留终止前的真实识别文本。 + assert response.outputs["text"] == "SUB 001" + + +def test_vlm_stream_done_with_message(tmp_path, monkeypatch) -> None: + """验证带 done 标记的流式结束块触发停止,结果正常返回。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + + def fake_urlopen(request, timeout): + return FakeChatResponse("SUB 001", done=True) + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fake_urlopen) + response = vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "completed", response.error + assert response.outputs["text"] == "SUB 001" + + +def test_vlm_stream_done_only_end(tmp_path, monkeypatch) -> None: + """验证仅含 done 标记(无 response)的行视为流结束,空结果正常完成。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + + class DoneOnlyResponse: + def readline(self) -> bytes: + if not self._consumed: + self._consumed = True + return b'{"done": true}' + return b"" + + def __enter__(self): + self._consumed = False + return self + + def __exit__(self, *args) -> bool: + return False + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", lambda *a, **k: DoneOnlyResponse()) + response = vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "completed", response.error + assert response.outputs["text"] == "" + + +def test_vlm_stream_deadline_timeout(tmp_path, monkeypatch) -> None: + """验证整体 5 秒截止:流式读取超过 deadline 立即终止并返回 failed。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + # 第一次调用计算 deadline(100+5=105),第二次调用已越过截止(200>=105)。 + monotonic_values = iter([100.0, 200.0]) + monkeypatch.setattr("nodes.vlm.time.monotonic", lambda: next(monotonic_values)) + + def fake_urlopen(request, timeout): + return FakeChatResponse("SUB 001") + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fake_urlopen) + response = vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + params={"timeout_seconds": 5}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + assert "timed out" in response.error + + +def test_vlm_extract_gettext() -> None: + """验证从模型输出中提取 标签内容的各种形态。""" + from nodes.vlm import _extract_gettext + + # 正常:标签包裹的内容被提取。 + assert _extract_gettext("还有没有什么困扰 或者奇怪的地方吗") == ( + "还有没有什么困扰 或者奇怪的地方吗" + ) + # 空标签:返回空字符串。 + assert _extract_gettext("前缀后缀") == "" + # 多个标签(重复循环):只取第一个。 + assert _extract_gettext("SUB 001SUB 001") == "SUB 001" + # 跨行内容:DOTALL 让 . 匹配换行。 + assert _extract_gettext("第一行\n第二行") == "第一行\n第二行" + # 未按格式输出(无标签):回退原始文本,保持旧行为。 + assert _extract_gettext("没有标签的裸文本") == "没有标签的裸文本" + + +def test_vlm_gettext_in_invoke(tmp_path, monkeypatch) -> None: + """验证整条调用链:模型返回 包裹内容时,产物只含标签内文本。""" + from nodes.vlm import invoke as vlm_invoke + + image = _real_png(tmp_path) + + def fake_urlopen(request, timeout): + return FakeChatResponse("SUB 001 围栏垃圾```") + + monkeypatch.setattr("nodes.vlm.urllib.request.urlopen", fake_urlopen) + response = vlm_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"image_uri": str(image)}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "completed", response.error + assert response.outputs["text"] == "SUB 001" + +def test_vlm_truncate_at_stop() -> None: + """验证多个终止序列的截断:取最先命中位置,未命中原样返回。""" + from nodes.vlm import _truncate_at_stop + + # 命中 "\n答"(位置更靠前)。 + assert _truncate_at_stop("SUB 001\n答:重复") == "SUB 001" + # 未命中 "\n答" 但命中单个 "答"。 + assert _truncate_at_stop("SUB 001 答") == "SUB 001 " + # 多个序列均命中:取最早出现的位置("答" 在 "答:" 之前)。 + assert _truncate_at_stop("SUB 001答\n答:循环") == "SUB 001" + # 未命中任何序列:原样返回。 + assert _truncate_at_stop("还有没有什么困扰 或者奇怪的地方吗") == ( + "还有没有什么困扰 或者奇怪的地方吗" + ) diff --git a/tests/test_ocr_flow.py b/tests/test_ocr_flow.py new file mode 100644 index 0000000..b8b0bbb --- /dev/null +++ b/tests/test_ocr_flow.py @@ -0,0 +1,401 @@ +"""抽帧与字幕 OCR 节点单元测试。 + +frame-extract 用 testdata 真实视频抽帧+裁切+720p 压缩;subtitle-ocr 的 OCR +网络调用(vlm-ocr)按 I/O 边界 mock,但喂给它的帧图片是真实的 testdata 资产。 +应用层不再加工模型输出文本,只做长度上限校验(超长报错跳过)。 +""" + +import json +from pathlib import Path + +from wov_sdk.models import InvokeRequest, InvokeResponse + +from nodes.frame_extract import invoke as frame_invoke +from nodes.subtitle_ocr import _assemble_srt +from nodes.subtitle_ocr import invoke as ocr_invoke + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent +TESTDATA = WORKSPACE / "testdata" +# 10s 测试视频:SUB 001 在 1-4s、SUB 002 在 6-9s。 +VIDEO = TESTDATA / "subtitle_10s.mp4" +TEXT_IMG = TESTDATA / "ocr_text.png" + + +def _png_size(path: Path) -> tuple[int, int]: + """从 PNG 头读取宽高(真实图片尺寸断言)。""" + data = path.read_bytes() + assert data[:8] == b"\x89PNG\r\n\x1a\n", "not a real png" + width = int.from_bytes(data[16:20], "big") + height = int.from_bytes(data[20:24], "big") + return width, height + + +def _frame_request(tmp_path, video=VIDEO, **params) -> InvokeRequest: + """构造 frame-extract 调用请求。""" + return InvokeRequest( + run_id="run_fx", + node_instance_id="", + inputs={"video_uri": str(video)}, + params=params, + output_dir=str(tmp_path / "out"), + ) + + +# --------------------------------------------------------------------------- +# frame-extract:抽帧 + 裁切 + 720p 压缩 +# --------------------------------------------------------------------------- + + +def test_frame_extract_crop_and_manifest(tmp_path) -> None: + """真实视频抽帧:裁切下半 50% 后帧尺寸为 1280x360,清单时间轴正确。""" + response = frame_invoke( + _frame_request(tmp_path, interval_seconds=1, crop=[0, 0.5, 1, 0.5]) + ) + assert response.status == "completed", response.error + manifest = json.loads(Path(response.outputs["frames_manifest"]).read_text(encoding="utf-8")) + assert len(manifest) >= 9 + assert [round(item["time"], 3) for item in manifest] == [ + round(i * 1.0, 3) for i in range(len(manifest)) + ] + first = Path(manifest[0]["image_uri"]) + assert first.is_file() + # 1280x360 已在 720p 内,压缩不改变尺寸。 + assert _png_size(first) == (1280, 360) + + +def test_frame_extract_default_params(tmp_path) -> None: + """未指定参数时使用默认值:抽帧间隔 0.5 秒 + 默认底部裁切区域。""" + response = frame_invoke(_frame_request(tmp_path)) + assert response.status == "completed", response.error + manifest = json.loads(Path(response.outputs["frames_manifest"]).read_text(encoding="utf-8")) + assert manifest + # 默认间隔 0.5s:25fps 下 step=round(12.5)=12(银行家舍入), + # 帧时间按 step/fps=12/25=0.48s 步进(帧号精确,采样周期由帧量化决定)。 + assert [round(item["time"], 3) for item in manifest] == [ + round(i * 12 / 25, 3) for i in range(len(manifest)) + ] + +def test_frame_extract_missing_video(tmp_path) -> None: + """缺少 video_uri 时返回失败。""" + response = frame_invoke( + InvokeRequest( + run_id="r", node_instance_id="", inputs={}, output_dir=str(tmp_path) + ) + ) + assert response.status == "failed" + + +def test_frame_extract_bad_crop(tmp_path) -> None: + """crop 比例越界(超出画面)时返回失败。""" + assert frame_invoke(_frame_request(tmp_path, crop=[0, 0.5, 1, 1.5])).status == "failed" + assert frame_invoke(_frame_request(tmp_path, crop=[-0.1, 0, 1, 0.5])).status == "failed" + assert frame_invoke(_frame_request(tmp_path, crop="abc")).status == "failed" + assert frame_invoke(_frame_request(tmp_path, crop=[0, 0.5, 1])).status == "failed" + # 各值域合法但 x+w 越出画面。 + assert frame_invoke(_frame_request(tmp_path, crop=[0.6, 0, 0.5, 0.3])).status == "failed" + + +def test_frame_extract_video_missing_file(tmp_path) -> None: + """video_uri 指向不存在的文件时返回失败。""" + response = frame_invoke(_frame_request(tmp_path, video=tmp_path / "none.mp4")) + assert response.status == "failed" + assert "not found" in response.error + + +def test_frame_extract_bad_interval(tmp_path) -> None: + """间隔 <= 0 时返回失败。""" + response = frame_invoke(_frame_request(tmp_path, interval_seconds=0)) + assert response.status == "failed" + + +def test_frame_extract_ffmpeg_fails(monkeypatch, tmp_path) -> None: + """ffmpeg 抽帧失败时透传错误。""" + import subprocess as sp + + monkeypatch.setattr("nodes.frame_extract._video_size", lambda *a, **k: (1280, 720)) + monkeypatch.setattr("nodes.frame_extract._video_fps", lambda *a, **k: 25.0) + monkeypatch.setattr("nodes.frame_extract._video_duration", lambda *a, **k: 10.0) + monkeypatch.setattr( + "nodes.frame_extract.subprocess.run", + lambda *a, **k: sp.CompletedProcess([], 1, stderr="boom"), + ) + response = frame_invoke(_frame_request(tmp_path)) + assert response.status == "failed" + assert "boom" in response.error + + +def test_video_size_unreadable(monkeypatch) -> None: + """ffmpeg -i 输出不含视频流信息时返回 None。""" + import subprocess as sp + + from nodes.frame_extract import _video_size + + monkeypatch.setattr( + "nodes.frame_extract.subprocess.run", + lambda *a, **k: sp.CompletedProcess([], 0, stderr="no video stream"), + ) + assert _video_size(Path("/tmp/x.mp4"), "ffmpeg") is None + + +def test_frame_extract_video_size_unknown(monkeypatch, tmp_path) -> None: + """无法读取视频分辨率时返回失败。""" + monkeypatch.setattr("nodes.frame_extract._video_size", lambda *a, **k: None) + response = frame_invoke(_frame_request(tmp_path)) + assert response.status == "failed" + assert "video size" in response.error + + +def test_video_duration_unreadable(monkeypatch) -> None: + """ffmpeg -i 输出缺少 Duration 时返回 None。""" + import subprocess as sp + + from nodes.frame_extract import _video_duration + + monkeypatch.setattr( + "nodes.frame_extract.subprocess.run", + lambda *a, **k: sp.CompletedProcess([], 0, stderr="no duration info"), + ) + assert _video_duration(Path("/tmp/x.mp4"), "ffmpeg") is None + + +def test_frame_extract_duration_unknown(monkeypatch, tmp_path) -> None: + """无法读取视频时长时返回失败。""" + monkeypatch.setattr("nodes.frame_extract._video_size", lambda *a, **k: (1280, 720)) + monkeypatch.setattr("nodes.frame_extract._video_duration", lambda *a, **k: None) + response = frame_invoke(_frame_request(tmp_path)) + assert response.status == "failed" + assert "duration" in response.error + + +def test_frame_extract_fps_unknown(monkeypatch, tmp_path) -> None: + """无法读取视频帧率时返回失败。""" + monkeypatch.setattr("nodes.frame_extract._video_size", lambda *a, **k: (1280, 720)) + monkeypatch.setattr("nodes.frame_extract._video_duration", lambda *a, **k: 10.0) + monkeypatch.setattr("nodes.frame_extract._video_fps", lambda *a, **k: None) + response = frame_invoke(_frame_request(tmp_path)) + assert response.status == "failed" + assert "fps" in response.error + +def test_frame_step_conversion() -> None: + """帧间隔换算:step=round(间隔秒×fps),至少为 1。""" + from nodes.frame_extract import _frame_step + + assert _frame_step(fps=25.0, interval=0.2) == 5 + assert _frame_step(fps=25.0, interval=1.0) == 25 + assert _frame_step(fps=29.97, interval=1.0) == 30 + # fps 很低时 step 也不会小于 1(每帧都取)。 + assert _frame_step(fps=1.0, interval=0.2) == 1 + + +def test_video_fps_parse(monkeypatch) -> None: + """帧率解析:支持小数(29.97)与有理数(30000/1001)。""" + import subprocess as sp + + from nodes.frame_extract import _video_fps + + monkeypatch.setattr( + "nodes.frame_extract.subprocess.run", + lambda *a, **k: sp.CompletedProcess( + [], 0, stderr="Stream #0:0: Video: h264, 1280x720, 30000/1001 fps, 30000/1001 tbr" + ), + ) + assert _video_fps(Path("/tmp/x.mp4"), "ffmpeg") == 30000 / 1001 + monkeypatch.setattr( + "nodes.frame_extract.subprocess.run", + lambda *a, **k: sp.CompletedProcess( + [], 0, stderr="Stream #0:0: Video: h264, 1280x720, 25 fps, 25 tbr" + ), + ) + assert _video_fps(Path("/tmp/x.mp4"), "ffmpeg") == 25.0 + monkeypatch.setattr( + "nodes.frame_extract.subprocess.run", + lambda *a, **k: sp.CompletedProcess([], 0, stderr="no video stream"), + ) + assert _video_fps(Path("/tmp/x.mp4"), "ffmpeg") is None + +def test_frame_extract_one_second_exact_frames(tmp_path) -> None: + """真实视频 1s 间隔按秒 seek 精确抽帧:10s 视频应得 10 帧,时间 0..9。""" + response = frame_invoke( + _frame_request(tmp_path, interval_seconds=1, crop=[0, 0.7, 1, 0.3]) + ) + assert response.status == "completed", response.error + manifest = json.loads(Path(response.outputs["frames_manifest"]).read_text(encoding="utf-8")) + assert [round(item["time"], 3) for item in manifest] == [ + round(i * 1.0, 3) for i in range(len(manifest)) + ] + assert len(manifest) == 10 + + +# --------------------------------------------------------------------------- +# subtitle-ocr:OCR 循环 + 长度上限 + 合并 + SRT 组装 +# --------------------------------------------------------------------------- + + +def _frames_manifest(tmp_path, frame_specs) -> Path: + """构造真实 frames.json;frame_specs=[(time, image_path), ...]。""" + items = [{"time": time, "image_uri": str(image)} for time, image in frame_specs] + path = tmp_path / "frames.json" + path.write_text(json.dumps(items), encoding="utf-8") + return path + + +def test_assemble_srt_real_timeline() -> None: + """SRT 组装:起始=帧时间,结束=最后可见帧时间+采样间隔。""" + lines = _assemble_srt([(0.0, 6.0, "A"), (6.0, 8.0, "B")], interval_seconds=2.0) + text = "\n".join(lines) + assert text.startswith("1\n") + # A 最后可见帧 6.0 + 间隔 2.0 = 8.0(而非下一条字幕的出现时间)。 + assert "00:00:00,000 --> 00:00:08,000" in text + assert "00:00:06,000 --> 00:00:10,000" in text + + +def test_sampling_interval_from_manifest() -> None: + """采样间隔从帧清单时间轴推导:均匀间隔取相邻差,退化清单回退默认值。""" + from nodes.subtitle_ocr import _sampling_interval + + manifest = [{"time": i * 0.2, "image_uri": f"f{i}.png"} for i in range(10)] + assert _sampling_interval(manifest, 2.0) == 0.2 + # 单帧(无法算差)与异常时间序:回退默认值。 + assert _sampling_interval([{"time": 0.0, "image_uri": "f0.png"}], 2.0) == 2.0 + assert _sampling_interval( + [{"time": 0.0}, {"time": 0.0}, {"time": 0.2}], 2.0 + ) == 0.2 + +def test_ocr_merges_consecutive_same_text(monkeypatch, tmp_path) -> None: + """连续帧相同字幕合并为一条;消失时间=最后可见帧+间隔,空白段保留。""" + # SUB 001 在 0/2s,4s 为空帧,SUB 002 在 6/8s。 + frame_texts = [ + (0.0, "SUB 001"), (2.0, "SUB 001"), (4.0, ""), + (6.0, "SUB 002"), (8.0, "SUB 002"), + ] + frames = [] + for index, (time, _text) in enumerate(frame_texts): + image = tmp_path / f"f{index}.png" + image.write_bytes(TEXT_IMG.read_bytes()) + frames.append((time, image)) + mapping = {str(image): text for (time, image), (_, text) in zip(frames, frame_texts)} + + def fake_vlm(node_id, request): + return InvokeResponse(status="completed", outputs={"text": mapping[request.inputs["image_uri"]]}) + + monkeypatch.setattr("wov_app.registry.invoke", fake_vlm) + manifest = _frames_manifest(tmp_path, frames) + response = ocr_invoke( + InvokeRequest( + run_id="run_ocr", + node_instance_id="", + inputs={"frames_manifest": str(manifest)}, + params={}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + srt = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + assert srt.count("SUB 001") == 1 + assert srt.count("SUB 002") == 1 + # SUB 001 最后可见帧 2.0 + 间隔 2.0 = 4.0 消失(而非拖到 SUB 002 出现)。 + assert "00:00:00,000 --> 00:00:04,000" in srt + assert "00:00:06,000 --> 00:00:10,000" in srt + + +def test_ocr_skips_failed_frames(monkeypatch, tmp_path) -> None: + """个别帧 OCR 失败时跳过,不影响其余帧汇总。""" + frames = [] + for index in range(3): + image = tmp_path / f"f{index}.png" + image.write_bytes(TEXT_IMG.read_bytes()) + frames.append((index * 2.0, image)) + + def fake_vlm(node_id, request): + if "f1" in request.inputs["image_uri"]: + return InvokeResponse(status="failed", error="boom") + return InvokeResponse(status="completed", outputs={"text": "SUB 001"}) + + monkeypatch.setattr("wov_app.registry.invoke", fake_vlm) + manifest = _frames_manifest(tmp_path, frames) + response = ocr_invoke( + InvokeRequest( + run_id="run_ocr", + node_instance_id="", + inputs={"frames_manifest": str(manifest)}, + params={}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + srt = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + assert "SUB 001" in srt + + +def test_ocr_missing_manifest(tmp_path) -> None: + """缺少 frames_manifest 或清单文件不存在时返回失败。""" + response = ocr_invoke( + InvokeRequest(run_id="r", node_instance_id="", inputs={}, output_dir=str(tmp_path)) + ) + assert response.status == "failed" + response = ocr_invoke( + InvokeRequest( + run_id="r", node_instance_id="", + inputs={"frames_manifest": str(tmp_path / "none.json")}, + output_dir=str(tmp_path), + ) + ) + assert response.status == "failed" + + +def test_ocr_skips_oversized_output(monkeypatch, tmp_path) -> None: + """超长输出(模型重复循环等)直接报错跳过该帧,不进入 SRT。""" + frames = [] + for index in range(3): + image = tmp_path / f"o{index}.png" + image.write_bytes(TEXT_IMG.read_bytes()) + frames.append((index * 2.0, image)) + + def fake_vlm(node_id, request): + if "o0" in request.inputs["image_uri"]: + return InvokeResponse(status="completed", outputs={"text": "重复字幕\n" * 50}) + if "o1" in request.inputs["image_uri"]: + # 空输出帧跳过。 + return InvokeResponse(status="completed", outputs={"text": ""}) + return InvokeResponse(status="completed", outputs={"text": "SUB 001"}) + + monkeypatch.setattr("wov_app.registry.invoke", fake_vlm) + manifest = _frames_manifest(tmp_path, frames) + response = ocr_invoke( + InvokeRequest( + run_id="run_ocr", + node_instance_id="", + inputs={"frames_manifest": str(manifest)}, + params={"max_result_chars": 200}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + srt = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + assert "SUB 001" in srt + assert "重复字幕" not in srt + + +def test_ocr_passes_short_text_through(monkeypatch, tmp_path) -> None: + """不超过上限的模型输出原样进入 SRT(不再做应用层过滤)。""" + image = tmp_path / "s0.png" + image.write_bytes(TEXT_IMG.read_bytes()) + frames = [(0.0, image)] + + def fake_vlm(node_id, request): + return InvokeResponse(status="completed", outputs={"text": " SUB 001 "}) + + monkeypatch.setattr("wov_app.registry.invoke", fake_vlm) + manifest = _frames_manifest(tmp_path, frames) + response = ocr_invoke( + InvokeRequest( + run_id="run_ocr", node_instance_id="", + inputs={"frames_manifest": str(manifest)}, + params={}, + output_dir=str(tmp_path / "out"), + ) + ) + assert response.status == "completed", response.error + srt = Path(response.outputs["srt_uri"]).read_text(encoding="utf-8") + assert "SUB 001" in srt diff --git a/tests/test_registry.py b/tests/test_registry.py new file mode 100644 index 0000000..7512418 --- /dev/null +++ b/tests/test_registry.py @@ -0,0 +1,116 @@ +"""进程内节点注册表测试。 + +覆盖节点注册、全量注册、查询、进程内调用以及未注册节点的报错路径, +验证注册表作为调度器唯一调用入口的正确性。 +""" + +import pytest + +from wov_app import registry +from wov_sdk.models import InvokeRequest, InvokeResponse, NodeManifest + + +def _echo_manifest() -> NodeManifest: + """构造最小合法 echo 节点清单。""" + return NodeManifest( + id="echo", + name="Echo", + version="1.0.0", + capability="echo", + command=["python", "-m", "echo"], + repo_dir="nodes", + ) + + +def test_register_and_list() -> None: + """验证注册后可查询与列出节点,且按 ID 排序。""" + registry.register(_echo_manifest(), lambda request: InvokeResponse(status="completed")) + registry.register( + NodeManifest( + id="z-node", + name="Z", + version="1", + capability="x", + command=["python", "-m", "z"], + repo_dir="nodes", + ), + lambda request: InvokeResponse(status="completed"), + ) + assert [node.id for node in registry.list_nodes()] == ["echo", "z-node"] + assert registry.get_node("echo").capability == "echo" + assert registry.get_node("missing") is None + + +def test_register_validation() -> None: + """验证非法 manifest 注册会被协议校验拒绝。""" + invalid = _echo_manifest() + invalid.id = "" + with pytest.raises(ValueError): + registry.register(invalid, lambda request: InvokeResponse(status="completed")) + + +def test_register_all_loads_builtin_nodes() -> None: + """验证 register_all 会加载 manifests/ 下全部内置节点。""" + registry.register_all() + ids = {node.id for node in registry.list_nodes()} + assert { + "echo", + "ffmpeg-extract", + "faster-whisper", + "llm-translate", + "vlm-ocr", + "srt-to-dual-eye-ass", + } <= ids + + +def test_invoke_calls_handler() -> None: + """验证 invoke 会把请求转发给注册的进程内处理器。""" + captured = {} + + def handler(request: InvokeRequest) -> InvokeResponse: + captured["run_id"] = request.run_id + return InvokeResponse(status="completed", outputs={"text": "ok"}) + + registry.register(_echo_manifest(), handler) + response = registry.invoke("echo", InvokeRequest(run_id="run_1", node_instance_id="")) + assert response.status == "completed" + assert response.outputs == {"text": "ok"} + assert captured["run_id"] == "run_1" + + +def test_invoke_unknown_node() -> None: + """验证调用未注册节点时抛出 ValueError。""" + with pytest.raises(ValueError, match="not registered"): + registry.invoke("missing", InvokeRequest(run_id="run_1", node_instance_id="")) + + +def test_invoke_logs_node_lifecycle(caplog) -> None: + """验证 invoke 会记录节点的开始/完成/耗时日志(主进程可见)。""" + registry.register( + _echo_manifest(), lambda request: InvokeResponse(status="completed", outputs={"text": "ok"}) + ) + with caplog.at_level("INFO", logger="vrsub.node"): + registry.invoke("echo", InvokeRequest(run_id="run_1", node_instance_id="")) + assert any("节点 echo 开始" in record.message for record in caplog.records) + assert any("节点 echo 完成" in record.message for record in caplog.records) + + +def test_invoke_logs_node_failure(caplog) -> None: + """验证节点返回 failed 时记录失败日志。""" + registry.register( + _echo_manifest(), lambda request: InvokeResponse(status="failed", error="boom") + ) + with caplog.at_level("INFO", logger="vrsub.node"): + registry.invoke("echo", InvokeRequest(run_id="run_1", node_instance_id="")) + assert any("节点 echo 失败" in record.message for record in caplog.records) + + +def test_get_logger_idempotent() -> None: + """验证日志器重复获取不会重复附加控制台处理器。""" + from wov_app.logging import get_logger + + logger = get_logger("idempotent") + handler_count = len(logger.handlers) + again = get_logger("idempotent") + assert again is logger + assert len(again.handlers) == handler_count diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py new file mode 100644 index 0000000..e52fac8 --- /dev/null +++ b/tests/test_scheduler.py @@ -0,0 +1,655 @@ +"""调度器单元测试。 + +覆盖拓扑排序、任务执行成功/失败分支、输入引用解析、MIME 推断以及 +后台轮询线程的启动与停止。节点调用改为进程内注册表直接调用。 +""" + +import time +from pathlib import Path + +import pytest + +from wov_app import registry +from wov_app.db import Database +from wov_app.scheduler import WorkflowScheduler, topological_sort +from wov_sdk.models import ( + InvokeResponse, + NodeManifest, + WorkflowDefinition, + WorkflowEdge, + WorkflowNode, +) + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent + + +def _register_echo() -> None: + """把内置 echo 节点注册到进程内注册表。""" + from nodes.echo import invoke + + registry.register(NodeManifest.load(str(WORKSPACE / "manifests" / "echo.json")), invoke) + + +def _db(tmp_path) -> Database: + """在临时目录创建独立数据库。""" + return Database(tmp_path / "wov.db") + + +def _echo_definition() -> WorkflowDefinition: + """构造引用 Echo 节点的单步骤工作流定义。""" + return WorkflowDefinition( + name="echo-flow", + version=1, + nodes=[ + WorkflowNode( + id="step", + node_type="echo", + inputs={"file_uri": "input.video_uri"}, + ) + ], + edges=[], + entry_inputs={"video_uri": "file"}, + final_outputs={"result": "step.file_uri"}, + ) + + +def test_topological_sort() -> None: + """验证 DAG 排序保持依赖顺序,并拒绝环与未知边。""" + definition = WorkflowDefinition( + name="dag", + version=1, + nodes=[ + WorkflowNode(id="a", node_type="x"), + WorkflowNode(id="b", node_type="x"), + WorkflowNode(id="c", node_type="x"), + ], + edges=[ + WorkflowEdge(from_node="a", to_node="b"), + WorkflowEdge(from_node="a", to_node="c"), + ], + ) + order = topological_sort(definition) + assert order.index("a") < order.index("b") + assert order.index("a") < order.index("c") + + cycle = WorkflowDefinition( + name="cycle", + version=1, + nodes=[ + WorkflowNode(id="a", node_type="x"), + WorkflowNode(id="b", node_type="x"), + ], + edges=[ + WorkflowEdge(from_node="a", to_node="b"), + WorkflowEdge(from_node="b", to_node="a"), + ], + ) + with pytest.raises(ValueError, match="cycle"): + topological_sort(cycle) + + with pytest.raises(ValueError, match="unknown edge"): + topological_sort( + WorkflowDefinition( + name="bad", + version=1, + nodes=[WorkflowNode(id="a", node_type="x")], + edges=[WorkflowEdge(from_node="a", to_node="missing")], + ) + ) + + +def test_execute_echo_workflow(tmp_path) -> None: + """验证排队任务可被完整执行并登记全部产物。""" + db = _db(tmp_path) + input_file = tmp_path / "input.txt" + input_file.write_text("hello scheduler", encoding="utf-8") + _register_echo() + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, _echo_definition().to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_1", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(input_file), + "created_at": now, + "updated_at": now, + } + ) + + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_1") + + run = db.get_run("run_1") + assert run["status"] == "COMPLETED" + artifacts = db.list_artifacts("run_1") + assert {item["name"] for item in artifacts} == {"step.text", "step.file_uri", "result"} + + +def test_execute_run_missing_workflow(tmp_path, monkeypatch) -> None: + """验证工作流记录缺失时任务被标记为失败。""" + db = _db(tmp_path) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_missing", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "created_at": now, + "updated_at": now, + } + ) + monkeypatch.setattr(db, "get_workflow", lambda workflow_id: None) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_missing") + assert db.get_run("run_missing")["status"] == "FAILED" + + +def test_execute_run_missing_version(tmp_path) -> None: + """验证版本记录缺失时任务被标记为失败。""" + db = _db(tmp_path) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_version", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_version") + assert db.get_run("run_version")["status"] == "FAILED" + + +def test_execute_run_missing_node(tmp_path) -> None: + """验证未注册节点被调用时任务失败。""" + db = _db(tmp_path) + definition = WorkflowDefinition( + name="bad", + version=1, + nodes=[ + WorkflowNode( + id="step", + node_type="missing-node", + inputs={"text": "input.video_uri"}, + ) + ], + entry_inputs={"video_uri": "file"}, + ) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, definition.to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_node", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(tmp_path / "in.txt"), + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_node") + assert db.get_run("run_node")["status"] == "FAILED" + + +def test_resolve_ref_and_mime(tmp_path) -> None: + """验证输入引用解析、MIME 推断与文件大小读取。""" + db = _db(tmp_path) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + assert scheduler._resolve_ref("input.video", "in.mp4", {}) == "in.mp4" + assert ( + scheduler._resolve_ref( + "a.out", None, {"a": {"out": "result.txt"}} + ) + == "result.txt" + ) + assert scheduler._resolve_ref("a.out", None, {}) is None + assert scheduler._resolve_ref("nodot", "in.mp4", {}) is None + assert scheduler._mime_type("x.srt") == "application/x-subrip" + assert scheduler._mime_type("x.ass") == "text/plain" + assert scheduler._mime_type("x.wav") == "audio/wav" + assert scheduler._mime_type("x.mp4") == "video/mp4" + assert scheduler._mime_type("x.txt") == "text/plain" + assert scheduler._mime_type("x.bin") == "application/octet-stream" + existing = tmp_path / "existing.txt" + existing.write_text("x", encoding="utf-8") + assert scheduler._file_size(str(existing)) == 1 + missing = tmp_path / "missing.bin" + assert scheduler._file_size(str(missing)) == 0 + + +def test_execute_unknown_or_non_queued_run(tmp_path) -> None: + """验证未知任务或非排队任务会被忽略。""" + db = _db(tmp_path) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_done", + "workflow_id": "flow", + "workflow_version": 1, + "status": "COMPLETED", + "progress": 1, + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("missing") + scheduler.execute_run("run_done") + assert db.get_run("run_done")["status"] == "COMPLETED" + + +def test_execute_missing_input(tmp_path) -> None: + """验证输入引用无法解析时任务失败。""" + db = _db(tmp_path) + definition = WorkflowDefinition( + name="missing-input", + version=1, + nodes=[ + WorkflowNode( + id="step", + node_type="echo", + inputs={"text": "missing.output"}, + ) + ], + entry_inputs={"video_uri": "file"}, + ) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, definition.to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_input", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(tmp_path / "in.txt"), + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_input") + assert db.get_run("run_input")["status"] == "FAILED" + + +def test_execute_node_failed_response(tmp_path) -> None: + """验证节点返回 failed 时任务被标记为失败。""" + db = _db(tmp_path) + registry.register( + NodeManifest( + id="fail-node", + name="Fail", + version="1", + capability="echo", + repo_dir="nodes", + command=["python", "-m", "fail"], + ), + lambda request: InvokeResponse(status="failed", error="boom"), + ) + definition = WorkflowDefinition( + name="fail-flow", + version=1, + nodes=[ + WorkflowNode( + id="step", + node_type="fail-node", + inputs={"text": "input.video_uri"}, + ) + ], + entry_inputs={"video_uri": "file"}, + ) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, definition.to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_fail_node", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(tmp_path / "in.txt"), + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_fail_node") + assert db.get_run("run_fail_node")["status"] == "FAILED" + + +def test_scheduler_start_stop_loop(tmp_path) -> None: + """验证调度线程可重复启动并正常停止。""" + db = _db(tmp_path) + scheduler = WorkflowScheduler(db, tmp_path / "storage", interval_seconds=0.05) + scheduler.start() + try: + scheduler.start() + time.sleep(0.15) + finally: + scheduler.stop() + assert scheduler._thread is None + + +def test_scheduler_background_executes_queued_run(tmp_path) -> None: + """验证后台线程会自动执行排队中的任务。""" + db = _db(tmp_path) + input_file = tmp_path / "input.txt" + input_file.write_text("background", encoding="utf-8") + _register_echo() + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, _echo_definition().to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_bg", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(input_file), + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage", interval_seconds=0.05) + scheduler.start() + try: + deadline = time.monotonic() + 10 + while time.monotonic() < deadline: + if db.get_run("run_bg")["status"] in {"COMPLETED", "FAILED"}: + break + time.sleep(0.1) + finally: + scheduler.stop() + assert db.get_run("run_bg")["status"] == "COMPLETED" + + +def test_final_artifact_renamed_with_language_tag(tmp_path) -> None: + """验证最终产物按 上传文件名.语言.时间戳 重命名并登记新 URI。""" + db = _db(tmp_path) + input_file = tmp_path / "movie01.mp4" + input_file.write_text("video", encoding="utf-8") + _register_echo() + definition = WorkflowDefinition( + name="lang-flow", + version=1, + nodes=[ + WorkflowNode( + id="step", + node_type="echo", + params={"target_language": "zh-CN"}, + inputs={"file_uri": "input.video_uri"}, + ) + ], + edges=[], + entry_inputs={"video_uri": "file"}, + final_outputs={"cn_srt": "step.file_uri"}, + ) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, definition.to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_1", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(input_file), + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_1") + artifacts = db.list_artifacts("run_1") + final = next(item for item in artifacts if item["name"] == "cn_srt") + filename = Path(final["uri"]).name + # 命名规则:movie01.zh-CN.<14位时间戳>.txt + assert filename.startswith("movie01.zh-CN.") + assert filename.endswith(".txt") + assert Path(final["uri"]).is_file() + # 原始未重命名文件不应残留。 + step_artifacts = [item for item in artifacts if item["name"] == "step.file_uri"] + assert not Path(step_artifacts[0]["uri"]).exists() + + +def test_final_artifact_renamed_fallback_base_and_tag(tmp_path) -> None: + """验证无上传文件时基础名回退 subtitle,无语言参数时标识回退别名。""" + db = _db(tmp_path) + _register_echo() + definition = WorkflowDefinition( + name="fallback-flow", + version=1, + nodes=[ + # 空输入让 echo 走默认文本路径,避免 input_uri 缺失导致解析失败。 + WorkflowNode(id="step", node_type="echo", inputs={}) + ], + entry_inputs={"video_uri": "file"}, + final_outputs={"result": "step.file_uri"}, + ) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, definition.to_dict()) + now = "2026-01-01T00:00:00+00:00" + # 故意不提供 input_uri,验证基础名回退。 + db.create_run( + { + "id": "run_1", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": None, + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_1") + final = next(item for item in db.list_artifacts("run_1") if item["name"] == "result") + filename = Path(final["uri"]).name + # 基础名回退 subtitle、标识回退别名 result。 + assert filename.startswith("subtitle.result.") + assert filename.endswith(".txt") + + +def test_execute_run_merges_param_overrides(tmp_path) -> None: + """验证调度执行时把 param_overrides 合并进节点参数。""" + db = _db(tmp_path) + input_file = tmp_path / "input.txt" + input_file.write_text("x", encoding="utf-8") + captured = {} + + def recording_handler(request): + captured["params"] = dict(request.params) + return InvokeResponse(status="completed", outputs={"text": "ok"}) + + registry.register( + NodeManifest( + id="record-node", + name="Record", + version="1", + capability="echo", + repo_dir="nodes", + command=["python", "-m", "record"], + ), + recording_handler, + ) + definition = WorkflowDefinition( + name="ov-flow", + version=1, + nodes=[WorkflowNode(id="step", node_type="record-node", params={"base": 1})], + entry_inputs={"video_uri": "file"}, + ) + db.upsert_workflow({"id": "flow", "name": "F", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, definition.to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_ov", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "param_overrides": {"step": {"crop": [0, 0.5, 1, 0.5]}}, + "input_uri": str(input_file), + "created_at": now, + "updated_at": now, + } + ) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_ov") + assert captured["params"] == {"base": 1, "crop": [0, 0.5, 1, 0.5]} + + +def _two_node_definition() -> WorkflowDefinition: + """构造 a→b 两节点工作流:b 引用 a 的输出。""" + return WorkflowDefinition( + name="two-flow", + version=1, + nodes=[ + WorkflowNode(id="a", node_type="x", inputs={"video_uri": "input.video_uri"}), + WorkflowNode(id="b", node_type="x", inputs={"data_uri": "a.data_uri"}), + ], + edges=[WorkflowEdge(from_node="a", to_node="b")], + entry_inputs={"video_uri": "file"}, + final_outputs={"result": "b.data_uri"}, + ) + + +def test_execute_pause_between_nodes_and_resume(tmp_path, monkeypatch) -> None: + """验证运行中暂停:节点边界停下保持 PAUSED;续跑时跳过已完成节点。""" + db = _db(tmp_path) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, _two_node_definition().to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_pause", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(tmp_path / "in.txt"), + "created_at": now, + "updated_at": now, + } + ) + data_file = tmp_path / "data.bin" + data_file.write_bytes(b"x") + + calls: list[str] = [] + + def fake_invoke(node_type, request): + # registry.invoke 首参是 node_type;用产物目录名(steps/)识别节点。 + node_id = Path(request.output_dir).name + calls.append(node_id) + # 第一个节点完成后立刻暂停任务,模拟用户在运行中点暂停。 + if node_id == "a": + db.pause_run("run_pause", now) + return InvokeResponse(status="completed", outputs={"data_uri": str(data_file)}) + + monkeypatch.setattr(registry, "invoke", fake_invoke) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_pause") + assert db.get_run("run_pause")["status"] == "PAUSED" + assert calls == ["a"] # 节点 b 未执行。 + + # 继续:恢复排队并再次执行,节点 a 已产出结果应被跳过,只执行 b。 + db.resume_run("run_pause", now) + scheduler.execute_run("run_pause") + assert db.get_run("run_pause")["status"] == "COMPLETED" + assert calls == ["a", "b"] + artifacts = db.list_artifacts("run_pause") + assert {item["name"] for item in artifacts} == {"a.data_uri", "b.data_uri", "result"} + + +def test_execute_paused_run_not_run(tmp_path, monkeypatch) -> None: + """验证非可执行状态(如 RUNNING 之外的值)的任务不会被执行。""" + db = _db(tmp_path) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, _two_node_definition().to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_done", + "workflow_id": "flow", + "workflow_version": 1, + "status": "COMPLETED", + "progress": 1.0, + "created_at": now, + "updated_at": now, + } + ) + called = [] + + def fake_invoke(node_id, request): + called.append(node_id) + return InvokeResponse(status="completed", outputs={}) + + monkeypatch.setattr(registry, "invoke", fake_invoke) + WorkflowScheduler(db, tmp_path / "storage").execute_run("run_done") + assert called == [] + + +def test_execute_pause_after_last_node_keeps_paused(tmp_path, monkeypatch) -> None: + """验证全部节点完成但运行中被暂停时保持 PAUSED;续跑补做收尾后完成。""" + db = _db(tmp_path) + db.upsert_workflow({"id": "flow", "name": "Flow", "published": 1, "latest_version": 1}) + db.create_workflow_version("flow", 1, _two_node_definition().to_dict()) + now = "2026-01-01T00:00:00+00:00" + db.create_run( + { + "id": "run_tail", + "workflow_id": "flow", + "workflow_version": 1, + "status": "QUEUED", + "progress": 0, + "input_uri": str(tmp_path / "in.txt"), + "created_at": now, + "updated_at": now, + } + ) + data_file = tmp_path / "data.bin" + data_file.write_bytes(b"x") + calls: list[str] = [] + + def fake_invoke(node_type, request): + node_id = Path(request.output_dir).name + calls.append(node_id) + if node_id == "b": # 最后一个节点执行时暂停。 + db.pause_run("run_tail", now) + return InvokeResponse(status="completed", outputs={"data_uri": str(data_file)}) + + monkeypatch.setattr(registry, "invoke", fake_invoke) + scheduler = WorkflowScheduler(db, tmp_path / "storage") + scheduler.execute_run("run_tail") + # 全部节点已执行,但收尾前被暂停 → 保持 PAUSED 而不是 COMPLETED。 + assert db.get_run("run_tail")["status"] == "PAUSED" + assert calls == ["a", "b"] + + # 续跑:节点产物齐备全部跳过,补做收尾后完成。 + db.resume_run("run_tail", now) + scheduler.execute_run("run_tail") + assert db.get_run("run_tail")["status"] == "COMPLETED" + assert calls == ["a", "b"] diff --git a/tests/test_seed.py b/tests/test_seed.py new file mode 100644 index 0000000..f592fc9 --- /dev/null +++ b/tests/test_seed.py @@ -0,0 +1,108 @@ +"""种子数据测试。 + +验证从 workflows/*.json 数据文件加载默认工作流、幂等性,以及 +开启种子与调度器后的应用生命周期。工作流定义来自数据文件而非代码。 +""" + +from pathlib import Path + +from fastapi.testclient import TestClient + +from wov_app.db import Database +from wov_app.main import app +from wov_app.seed import seed_default_workflows + +# 单体根目录:tests/ 的上一级。 +WORKSPACE = Path(__file__).resolve().parent.parent + + +def test_seed_default_workflows_idempotent(tmp_path) -> None: + """验证从数据文件加载 demo/zh-direct 两个工作流且重复调用幂等。""" + db = Database(tmp_path / "wov.db") + created = seed_default_workflows(db) + assert created == 3 + assert db.get_workflow("demo") is not None + assert db.get_workflow("zh-direct") is not None + + # demo:asr 显式声明 model_path 与长音频参数,模型选择完全数据化。 + demo = db.get_latest_workflow_version("demo")["definition"] + assert demo["name"] == "视频字幕生成" + demo_asr = next(node for node in demo["nodes"] if node["id"] == "asr") + assert demo_asr["params"]["model_path"] == "faster-whisper-large-v3" + assert demo_asr["params"]["condition_on_previous_text"] is False + + # zh-direct:使用中文直出模型并开启翻译任务。 + zh = db.get_latest_workflow_version("zh-direct")["definition"] + assert zh["name"] == "中文直出字幕" + zh_asr = next(node for node in zh["nodes"] if node["id"] == "asr") + assert zh_asr["params"]["model_path"] == "whisper-large-v2-translate-zh-v0.2-st-ct2" + assert zh_asr["params"]["task"] == "translate" + + # 再次调用不重复创建。 + assert seed_default_workflows(db) == 0 + assert len(db.list_workflow_versions("demo")) == 1 + + +def test_seed_custom_dir_and_empty(tmp_path) -> None: + """验证自定义数据目录的加载与空目录返回 0。""" + db = Database(tmp_path / "wov.db") + custom = tmp_path / "workflows" + custom.mkdir() + (custom / "a.json").write_text( + """ + { + "id": "flow-a", + "name": "Flow A", + "description": "custom", + "version": 1, + "definition": { + "name": "Flow A", + "version": 1, + "nodes": [{"id": "step", "node_type": "echo"}], + "edges": [], + "entry_inputs": {}, + "final_outputs": {} + } + } + """, + encoding="utf-8", + ) + assert seed_default_workflows(db, custom) == 1 + assert db.get_workflow("flow-a") is not None + # 空目录返回 0。 + empty = tmp_path / "empty" + empty.mkdir() + assert seed_default_workflows(db, empty) == 0 + # 已存在的工作流被跳过。 + assert seed_default_workflows(db, custom) == 0 + + +def test_lifespan_with_seed_and_scheduler(monkeypatch) -> None: + """验证启用自动种子与调度器后应用正常启动,demo 与中文直出应用均可见。""" + monkeypatch.setenv("WOV_AUTO_SEED", "1") + monkeypatch.setenv("WOV_SCHEDULER_ENABLED", "1") + with TestClient(app) as client: + apps = client.get("/api/apps") + assert apps.status_code == 200 + assert any(item["id"] == "demo" for item in apps.json()) + assert any(item["id"] == "zh-direct" for item in apps.json()) + + +def test_seed_workflows_have_chunk_seconds(tmp_path) -> None: + """验证内置工作流的 asr 节点均显式声明分块参数。""" + db = Database(tmp_path / "wov.db") + seed_default_workflows(db) + for workflow_id in ("demo", "zh-direct"): + definition = db.get_latest_workflow_version(workflow_id)["definition"] + asr = next(node for node in definition["nodes"] if node["id"] == "asr") + assert asr["params"]["chunk_seconds"] == 60 + + +def test_seed_workflows_vad_filter_off(tmp_path) -> None: + """验证内置工作流 asr 显式开启 VAD。""" + db = Database(tmp_path / "wov.db") + seed_default_workflows(db) + for workflow_id in ("demo", "zh-direct"): + definition = db.get_latest_workflow_version(workflow_id)["definition"] + asr = next(node for node in definition["nodes"] if node["id"] == "asr") + assert asr["params"]["vad_filter"] is True diff --git a/tests/test_uvicorn_smoke.py b/tests/test_uvicorn_smoke.py new file mode 100644 index 0000000..82202b4 --- /dev/null +++ b/tests/test_uvicorn_smoke.py @@ -0,0 +1,34 @@ +"""uvicorn 冒烟测试。 + +用真实套接字启动 uvicorn 服务并请求 /health,验证应用能脱离 TestClient +在实际 Web 服务环境中正常工作。 +""" + +import threading +import time +import urllib.request + +from uvicorn import Config, Server + +from wov_app.main import app + + +def test_uvicorn_serves_app_over_real_socket() -> None: + """验证 uvicorn 监听真实端口后健康检查可用。""" + config = Config(app=app, host="127.0.0.1", port=0, log_level="error") + server = Server(config) + thread = threading.Thread(target=server.run, daemon=True) + thread.start() + try: + deadline = time.monotonic() + 10 + while not server.started and time.monotonic() < deadline: + time.sleep(0.05) + assert server.started + + port = server.servers[0].sockets[0].getsockname()[1] + with urllib.request.urlopen(f"http://127.0.0.1:{port}/health", timeout=5) as response: + assert response.status == 200 + assert b'"wov-api"' in response.read() + finally: + server.should_exit = True + thread.join(timeout=10) diff --git a/tests/test_workflow_api.py b/tests/test_workflow_api.py new file mode 100644 index 0000000..da3909b --- /dev/null +++ b/tests/test_workflow_api.py @@ -0,0 +1,117 @@ +"""工作流管理 API 测试。 + +覆盖工作流的创建、查询、校验、发布、版本列表与删除等管理接口。 +""" + +from fastapi.testclient import TestClient + +from wov_app.main import app + + +def definition() -> dict: + """构造一个引用 Echo 节点的合法工作流定义。""" + return { + "name": "echo-flow", + "version": 1, + "nodes": [ + { + "id": "step", + "node_type": "echo", + "inputs": {"file_uri": "input.video_uri"}, + } + ], + "edges": [], + "entry_inputs": {"video_uri": "file"}, + "final_outputs": {"result": "step.file_uri"}, + } + + +def test_workflow_crud_and_publish() -> None: + """验证工作流 CRUD、校验、发布与版本列表的完整流程。""" + with TestClient(app) as client: + created = client.post( + "/api/admin/workflows", + json={ + "id": "echo-flow", + "name": "Echo Flow", + "description": "demo", + "definition": definition(), + }, + ) + assert created.status_code == 200 + assert created.json()["id"] == "echo-flow" + + assert client.get("/api/admin/workflows").status_code == 200 + assert client.get("/api/admin/workflows/echo-flow").status_code == 200 + assert client.get("/api/admin/workflows/missing").status_code == 404 + + validated = client.post( + "/api/admin/workflows/echo-flow/validate", + json=definition(), + ) + assert validated.status_code == 200 + assert validated.json()["valid"] is True + assert client.post( + "/api/admin/workflows/missing/validate", + json=definition(), + ).status_code == 404 + + published = client.post("/api/admin/workflows/echo-flow/publish") + assert published.status_code == 200 + assert published.json()["published"] == "echo-flow" + assert client.post("/api/admin/workflows/missing/publish").status_code == 404 + + versions = client.get("/api/admin/workflows/echo-flow/versions") + assert versions.status_code == 200 + assert len(versions.json()) == 1 + assert client.get("/api/admin/workflows/missing/versions").status_code == 404 + + assert client.delete("/api/admin/workflows/echo-flow").status_code == 200 + assert client.delete("/api/admin/workflows/echo-flow").status_code == 404 + + +def test_workflow_slug_without_id() -> None: + """验证未提供 ID 时后端会从名称生成 slug。""" + with TestClient(app) as client: + created = client.post( + "/api/admin/workflows", + json={ + "name": "Echo Flow", + "definition": definition(), + }, + ) + assert created.status_code == 200 + assert created.json()["id"] == "echo-flow" + + +def test_workflow_validation_error() -> None: + """验证重复节点 ID 的 DAG 会被拒绝。""" + with TestClient(app) as client: + response = client.post( + "/api/admin/workflows", + json={ + "id": "bad", + "name": "Bad", + "definition": { + "name": "Bad", + "version": 1, + "nodes": [ + {"id": "a", "node_type": "x"}, + {"id": "a", "node_type": "y"}, + ], + "edges": [], + }, + }, + ) + assert response.status_code == 422 + + +def test_publish_workflow_without_version() -> None: + """验证没有版本记录的工作流不能发布。""" + with TestClient(app) as client: + db = app.state.db + db.upsert_workflow( + {"id": "empty", "name": "Empty", "published": 0, "latest_version": 0} + ) + response = client.post("/api/admin/workflows/empty/publish") + assert response.status_code == 422 diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..54dad0c --- /dev/null +++ b/uv.lock @@ -0,0 +1,1106 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version < '3.12'", +] + +[[package]] +name = "annotated-doc" +version = "0.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, +] + +[[package]] +name = "av" +version = "18.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/f4/f22114d30d3435e38c6af2b4870f37b864403dca6ae7af747a289ce0a18e/av-18.1.0.tar.gz", hash = "sha256:47bfc286e1bc9de7ab4681fc2b575cd2460a66919d31ffe1bd5aa54fae531a28", size = 4451061, upload-time = "2026-08-12T22:28:18.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/d4/d7cdc8bff143c17a6d35924375ae28dd692cacde38700a7d419fde54f44a/av-18.1.0-cp311-abi3-macosx_11_0_x86_64.whl", hash = "sha256:ae75d8bb6467895ed1f8572ededf7ffa49eac07f6e483222f5d7d62a41d12f04", size = 22546147, upload-time = "2026-08-12T22:27:11.851Z" }, + { url = "https://files.pythonhosted.org/packages/3f/c9/37a619297492256b77d5ed906e7d8166c10a26ed251dccf1ae03ab19bff6/av-18.1.0-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:b30a4e8d934558e19602b68998a4d9ac9f250fa0dacef216f7e8e40153b13316", size = 18217603, upload-time = "2026-08-12T22:27:14.713Z" }, + { url = "https://files.pythonhosted.org/packages/d9/84/2464ffb64c08c5ce8b522c8e74594714414e3b0575267652c5c51c0574b9/av-18.1.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6fc837cc51adf80331ac850779cd53b5d4c4460b0ebe9057a02a921c6736f19d", size = 33640142, upload-time = "2026-08-12T22:27:17.835Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/204dbfc3e08eb4cdc6e6ff57be02150bc44523ebdb50182d10025792ebd9/av-18.1.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:8a032e8d8ebc73dec079364b9b4a6837638a2d106e8472314e685ffbf163e700", size = 35786210, upload-time = "2026-08-12T22:27:20.984Z" }, + { url = "https://files.pythonhosted.org/packages/e1/99/b0d04ec553ff9a7e00455458dfa3a39c8a8f627b273056b4e5fe57d590de/av-18.1.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:3c8b1f8b46f99d52e2d8b0ed5d0cdadf172d24794d46e2077b16e44ed08e26ff", size = 39379798, upload-time = "2026-08-12T22:27:24.432Z" }, + { url = "https://files.pythonhosted.org/packages/56/b1/e00d4feae59160149df6126585e726fdc6300798fd40c5dd324879e81f68/av-18.1.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ab5ac081bc9eaf54109120d4e56284674fecfbe520d9aa1707c7fa911ec5f4d2", size = 34690321, upload-time = "2026-08-12T22:27:27.769Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/836fa987e3084d11a21489f11357fb24843ef3aa8faf74ddddfc603d5062/av-18.1.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:191224788d87af06c31784a395bb73f14b72f33d7f4871ace0157de2abdc6276", size = 36859932, upload-time = "2026-08-12T22:27:31.403Z" }, + { url = "https://files.pythonhosted.org/packages/33/b4/76ba21e46704f632004276b85289a1582e95f5eff760436d6149875a1881/av-18.1.0-cp311-abi3-win_amd64.whl", hash = "sha256:ea1480b7a8d5405cb5f382b344731bf125fd2c1c6fae3964f6c48595628387ff", size = 27595679, upload-time = "2026-08-12T22:27:35.177Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ad/a3135884c5753b09773176b97201ae602f67ad14206c395ff838d66bf9b0/av-18.1.0-cp311-abi3-win_arm64.whl", hash = "sha256:5509ec12aaa19fd6601de13cfa6f4cdad450da07982118510592875d970454d6", size = 20257584, upload-time = "2026-08-12T22:27:38.472Z" }, + { url = "https://files.pythonhosted.org/packages/4f/5b/4a756265d7fb164336c8d377bca21c39cfa2c178be23cedee840a69b59c5/av-18.1.0-cp314-cp314t-macosx_11_0_x86_64.whl", hash = "sha256:b36b0bae9e4c62f9487c99481ec15e4e3870fcc868522cd6d18fc2d6bfa04f01", size = 22795654, upload-time = "2026-08-12T22:27:42.016Z" }, + { url = "https://files.pythonhosted.org/packages/d5/cc/1bc841462114a1adf4f7d87456ab78a6972e23271e71865fcd2bbd0e7360/av-18.1.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:025f84494cb23278498f03b0d8117d3e47a1cbc9c44b97eb31875cf02251e46b", size = 18435735, upload-time = "2026-08-12T22:27:45.787Z" }, + { url = "https://files.pythonhosted.org/packages/b8/20/005500ed17a2e62a5e4bb94aa3786942560ec2f55ec1895ebf174c87abef/av-18.1.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:08a9ae288299cfcbf739dba4ad0c53b9b71f45184303dd45947920d022fed695", size = 37090807, upload-time = "2026-08-12T22:27:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/5c/f7/11e7f6d848d3690c31ca4f8578167393e619177f1493ccc93b9400852d4e/av-18.1.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:cf8a17466bef07765dbdecc9e66ed9b25d20b4e14f654fbf35345a58ac45fa0c", size = 38976836, upload-time = "2026-08-12T22:27:54.565Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/b271473b24e806062d31191e40c6d65545e9cf59f80f044eba56dcbba0f4/av-18.1.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:d49a5c542dfdc00f43c6cdb6cc41dac1781ee206fe180b56aa7433dfa816dfae", size = 40896630, upload-time = "2026-08-12T22:27:59.118Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9f/2ab7fa292a947ad3466ed8e655eefa3b82f535d7ea598c297b4471a937c4/av-18.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5548b79e2bf1f59b3e9aedc918a72d9dc45b9adaac10ff9470d5dbdda0002e47", size = 37895673, upload-time = "2026-08-12T22:28:03.98Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d8/04507c57249b399c3e4f23f01d221532f357338b5316fd2858fbd343127d/av-18.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7ea063f6690193ea335a1d592d6e0274350d45e2ed6af83ee107cb90cbfd84f", size = 39992431, upload-time = "2026-08-12T22:28:08.736Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d6/bc4b95bea9c2353a7e4d62a3fcfad9adcf0f881741c6ce01ee179d539ce3/av-18.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e4d48b9f12cad009cc72fe4f4099107de5e819c95f82767f4fd01a01481c0661", size = 28497798, upload-time = "2026-08-12T22:28:13.003Z" }, + { url = "https://files.pythonhosted.org/packages/c1/d2/0c277a46f12647c1833f40496e132fb6001e0d19e6144b5ea30896461feb/av-18.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:5cd9085028902c9880622bd37a12fd4b33060f06a52311f6f4867ca9f29a2c3b", size = 21421979, upload-time = "2026-08-12T22:28:16.48Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "coverage" +version = "7.15.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/c3/4f2195f512fb172aa425a8803a874b2baa9ba7f80ff7b6080998761fc701/coverage-7.15.4.tar.gz", hash = "sha256:0548198fff07ccf4faf469520bce1c2eceb1ce3e62891921138dec10907f9d00", size = 936952, upload-time = "2026-08-06T13:50:24.442Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/66/edcec7d7a0b524aa8923e22925fde6fe50ce005a113dca13ae1581455c4c/coverage-7.15.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbac5abad70df71019988f83f26ac7092ff2642975def4429e98dc7585ef3490", size = 222367, upload-time = "2026-08-06T13:47:15.578Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c6/ab8de429e2e8548faf58ec7e1674a4ce00414b4113942d3fe87109cf0f68/coverage-7.15.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:357a173465c7ce028d07a95cc2b63b5bf59f50ecdd5ad75c5cbb78ada984048e", size = 222874, upload-time = "2026-08-06T13:47:16.961Z" }, + { url = "https://files.pythonhosted.org/packages/be/c4/3b7b49587e8a6b9af79b3eb468d443d6042b6d65b47aa26586846a0d6566/coverage-7.15.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:21b803935e2efc3acebe9697197a294fccf5dc4e5382bd6369542ff7a7d2a1d7", size = 253287, upload-time = "2026-08-06T13:47:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/fb/65/ec03b743a2a229c72cc1eff3e57be9d3564e9c6b4d5aba2d70744a3fc0d8/coverage-7.15.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7a2b580774a4786c1053157c0165e04476e03ff293993d7c148eee784a94bae6", size = 255199, upload-time = "2026-08-06T13:47:19.765Z" }, + { url = "https://files.pythonhosted.org/packages/41/4b/5163729e4b6582d61975cfd3ccab45b4ec53e21cf156d9941cb025188468/coverage-7.15.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9464451c4efffe8d47ace5a540b10b0dc10e879066290f8600872b7f54a419d", size = 257308, upload-time = "2026-08-06T13:47:21.206Z" }, + { url = "https://files.pythonhosted.org/packages/86/08/2167a0f08fb87d702fa423a48578a32865464b7c9e1db3911ad7812ab414/coverage-7.15.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de602f34123c2f4af1c1869c6dbbbd60da6d5983bf01937367295d135cccbfce", size = 259268, upload-time = "2026-08-06T13:47:22.503Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e5/68eebae3053dbd48508edea559c21b23fbdf3460784f91370c83a86a6acd/coverage-7.15.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6879ded16a27f3eeca19b900c147e81616e7054db451471a611b2755ee5249f7", size = 253392, upload-time = "2026-08-06T13:47:23.88Z" }, + { url = "https://files.pythonhosted.org/packages/1a/46/fd4ced40a2b691c774e515c9b69500bfa64c7960b67fcee4b2f6fad97fc3/coverage-7.15.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:986be58c3ab54aae8d3496a6225eea74f760fdbe739b38bd442c7e8d133aa53b", size = 255001, upload-time = "2026-08-06T13:47:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/53/25/ae2e5fa710bb6957a9aadeb9e3598d3b3e4af6587ce857ad42e8639a3f30/coverage-7.15.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c6103639613fe6c1e989082948419bc77a2d26b6c825c99d7fad25f7d3d87afc", size = 253061, upload-time = "2026-08-06T13:47:26.845Z" }, + { url = "https://files.pythonhosted.org/packages/d7/31/67ddc0365db2c6e93ac8580bc4bbc50f65273262f973f63ebcdbc15c0495/coverage-7.15.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d3af93dddb5659276c63bc16ac6466ac2033a70ca816097bbc06345b8ccdf571", size = 256831, upload-time = "2026-08-06T13:47:28.217Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/82b8fd18f57fb13f12d98fe874995bb2c4f9f17be8aff762c426323fdb96/coverage-7.15.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b10075e5421d04265766a6d1dac809bbeb8a946fbb23c8f82c227409b2190719", size = 252781, upload-time = "2026-08-06T13:47:29.712Z" }, + { url = "https://files.pythonhosted.org/packages/0a/eb/6c74ef4dd12b252e573c49bdef9e2ac265bf3dbb79b8d7feb3266e084e9e/coverage-7.15.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a67a9f78b2942d87ba8ce3059c642164d2aedd65337377fb52fe9803656bc5c7", size = 253692, upload-time = "2026-08-06T13:47:31.192Z" }, + { url = "https://files.pythonhosted.org/packages/5a/66/eb9aed1c3fd2d36ee00eb173f434b14fa607fc056739c9a89ff4244010ea/coverage-7.15.4-cp311-cp311-win32.whl", hash = "sha256:69484d1aca26e322e1c3ce03f09341e84524ababad2d7202161738d83cc9f82e", size = 224461, upload-time = "2026-08-06T13:47:32.572Z" }, + { url = "https://files.pythonhosted.org/packages/e2/6d/81fa4161dfb3ed9d74e40d58647eff83a56b7612e78352581280fce2f477/coverage-7.15.4-cp311-cp311-win_amd64.whl", hash = "sha256:63fd6fcd1dd6e158f7eb78606e72933b3f6d01e7b747f99c6c12d764307a0fdc", size = 224937, upload-time = "2026-08-06T13:47:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c1/d8dacf683c6cad3cf85ce68fd3774a6774ec402128822fdfaed920f11e6a/coverage-7.15.4-cp311-cp311-win_arm64.whl", hash = "sha256:ea82116c9893fa89e929b7f197ee5a1950a76e91cc5c85ba503fc02379d04890", size = 224479, upload-time = "2026-08-06T13:47:36.118Z" }, + { url = "https://files.pythonhosted.org/packages/1d/48/bc8d4ba7b37551a767bd863f15b3f80182b271c2f55975356f5f7dbe94c2/coverage-7.15.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4fedd1f7f428f9fe83b1ead5e7cc87a43427be31aadafbac3ac0636dc7abb22", size = 222543, upload-time = "2026-08-06T13:47:37.562Z" }, + { url = "https://files.pythonhosted.org/packages/20/dd/88d6f83f1fffc974a3691a34a97951c5b12df7512a6782c5963883cbc058/coverage-7.15.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37e2f0cdf58e2e1fed4e4d5a8f8786ae2f7eb80b478016876667dc4a01d60a97", size = 222905, upload-time = "2026-08-06T13:47:38.927Z" }, + { url = "https://files.pythonhosted.org/packages/bd/5c/54ee0d4748585bb0acab9891cd8d92f2d3593165b4e59fc9de113bfb3140/coverage-7.15.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fb55d0e70bb15f2e81477613627286581414693d74ac7963c93a790dd453ca9d", size = 254407, upload-time = "2026-08-06T13:47:40.488Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3f/f0642a372f494bd0d7dad3b497083b910194a5f1c88be2c94fef707c3b59/coverage-7.15.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:899b9da30f3c6c336566e3707495bb23e8302d39d862f01fa78c48b99b9437e2", size = 257145, upload-time = "2026-08-06T13:47:41.931Z" }, + { url = "https://files.pythonhosted.org/packages/71/17/8b46d0ed68251016002ec972c8fc0119961a765d0984cafb8bf317c43758/coverage-7.15.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d15715e8c46552827e5e4f30a35575a2dbcad14454cf3284c54483946bd16931", size = 258257, upload-time = "2026-08-06T13:47:43.527Z" }, + { url = "https://files.pythonhosted.org/packages/30/b8/8498a0e72d0adbe15477dd07463d2b3bb2c9f6a4815e8589e50939e2c3ae/coverage-7.15.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:002a438859f7b430bc99afeaf01a6d187dad1d0dc907b64cdeffc632a5db8fd8", size = 260517, upload-time = "2026-08-06T13:47:45.121Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/7dce19c3bdb1e3dd63e769508216500edad81bd5f69a26d724e32aceaf78/coverage-7.15.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e4193a04b518f7968f3099755f5509ee7cccc6dc2b92a6b14841934d22e222c9", size = 254785, upload-time = "2026-08-06T13:47:46.541Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b1/e1494703c675a2561723cd9b89f45c9168782c31280c611b1f767851e57c/coverage-7.15.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e98dcc55d572b38e69d117da7e8e8efb8500f1f5eaf81ecd460a63220790b839", size = 256176, upload-time = "2026-08-06T13:47:48.155Z" }, + { url = "https://files.pythonhosted.org/packages/73/76/a5629d270fb638a43a4b10466f51e2f49d532c1aa4da2913cbbb150bbe0a/coverage-7.15.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:af6c538498ce66c10d3fd541c2a8d5b03da5850355add34e6cba564210cb9e72", size = 254321, upload-time = "2026-08-06T13:47:49.757Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4f/9c44447218435d5766b911534f9d798144a5560f85e9a54ebe5f3f5d19f9/coverage-7.15.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d10025d96ea89fc2f73714dbc4cbd433fe012c1ac9e23f895d7728b238b6e52", size = 258390, upload-time = "2026-08-06T13:47:51.248Z" }, + { url = "https://files.pythonhosted.org/packages/de/36/c1e127616fb3fa18a9ff71e76c417f2fd7424332a4870015ac224ef4c039/coverage-7.15.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d802e1947603162ded419bff83ac7489820355d2b856dfb09206574e3a37ac0c", size = 253894, upload-time = "2026-08-06T13:47:52.816Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b9/fdb92c8ae7a8bb9b850cc253b7b3b9c8526f68130002048b5671cd510d09/coverage-7.15.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c2de40895718f91951b86712b4c5b694acaf9a0a49be13874896f599a1eed3f4", size = 255763, upload-time = "2026-08-06T13:47:54.296Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/a7d51b2587c7bdb76e71b0896d2565bf7d60436b5122fc83e511adb1f7cd/coverage-7.15.4-cp312-cp312-win32.whl", hash = "sha256:5c3431b2161279b7db5c2a1aa58ae02e5cb8c3c42d93a5094be3f5537bd5b11b", size = 224597, upload-time = "2026-08-06T13:47:56.074Z" }, + { url = "https://files.pythonhosted.org/packages/49/b9/5c5f80cc55f5acaaca6dee677626bfcec8c87204a7809b438b08e84f4571/coverage-7.15.4-cp312-cp312-win_amd64.whl", hash = "sha256:6befeab5fb2b51c958ca4ac6c5d141a1e8240f4f76e46350f1911963deda49cd", size = 225135, upload-time = "2026-08-06T13:47:57.52Z" }, + { url = "https://files.pythonhosted.org/packages/47/e4/2a4561f89ff6bf7c925c287d0f2cce8bdf139c3a33735c87e3203401cf94/coverage-7.15.4-cp312-cp312-win_arm64.whl", hash = "sha256:67bc345491ab55b837277d76f5775d057e8c7f1ac44d890d8c2c82adde258c6f", size = 224515, upload-time = "2026-08-06T13:47:58.977Z" }, + { url = "https://files.pythonhosted.org/packages/f1/84/651a9310859673aaa3b3203f1aa1641ca60fcf2494683e1c9474c7172780/coverage-7.15.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c705b28feb2775dc82a25f1d473a370bc37ff93f5177f4e29ce2425f560f6921", size = 222565, upload-time = "2026-08-06T13:48:00.796Z" }, + { url = "https://files.pythonhosted.org/packages/82/f9/4dcf700137e8af550670f4d74d1b63828ce93e1e2b05e5f10710eb2ea987/coverage-7.15.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ff205ab5e3ecc670f6a4dd19d9cbf12ede53dd41cfc1e15716ec961ea6d314e", size = 222936, upload-time = "2026-08-06T13:48:02.391Z" }, + { url = "https://files.pythonhosted.org/packages/07/4a/612ff1e780b3fbfd637486f542f84adc5503873d8b5d279dec1ffeef9414/coverage-7.15.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5172326e861a38b48b48befca15e0f477a26b283337a33a739c8fed229934e36", size = 253926, upload-time = "2026-08-06T13:48:04.382Z" }, + { url = "https://files.pythonhosted.org/packages/b0/04/d1cff1c2ead4708a6a79c01d3736b6a25bd38a36678398f72a8dd33dfad9/coverage-7.15.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:12b59c90084e3234fb11184886bf4a40f4f16a8c8f867be2e087b81f8e8868d4", size = 256523, upload-time = "2026-08-06T13:48:05.996Z" }, + { url = "https://files.pythonhosted.org/packages/b9/80/d34e13fb4b293cbdb9665838cf5522077b8ad14ef947550631a4bced36a5/coverage-7.15.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349062d66f00b40fa2c1c222438bad25fabf755631b5d82937fe985c8008615c", size = 257759, upload-time = "2026-08-06T13:48:08.036Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e7/2c5fe7636fdb0732fe0f09f308a5b066864078b7fc61f6678e8478554f2e/coverage-7.15.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4256ced708e598e05209bc1a8ab4074e04a51dba4c62fb45926a229af675ace7", size = 259890, upload-time = "2026-08-06T13:48:09.834Z" }, + { url = "https://files.pythonhosted.org/packages/92/28/9689f0858dfff59c2ea688938ab9fa2925631235df67126a42b6c5c70ae1/coverage-7.15.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d80f974b20782d9612c8b4c9beeca867074c7cf4079d1419843fa25a26428b25", size = 254121, upload-time = "2026-08-06T13:48:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/785077c230c157243eb5aa9a26c3be260ecd02001bead54a3cada3df8e03/coverage-7.15.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e179f19bfe1d31f8eeeaa12990194d761c4f62f0759661000bca6cd8729f40b", size = 255891, upload-time = "2026-08-06T13:48:13.209Z" }, + { url = "https://files.pythonhosted.org/packages/d4/90/e20371b17b40f912f21305c2db2f30efa3de306f7320fc916804872c85a4/coverage-7.15.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8bc16bb47b7679670eceff71d78bfb7d6e5b143f6c2cd117487ec7c75e0d4b78", size = 253859, upload-time = "2026-08-06T13:48:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/05/49/25371987ee459a5f67c0427fb75c74f9358e65f2c71fe75bf41c1b6c5fcb/coverage-7.15.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1cd685005cd2c4200adfc14cf39a603b9320efab3f18a8f7f156d20c9cc3345f", size = 258011, upload-time = "2026-08-06T13:48:16.464Z" }, + { url = "https://files.pythonhosted.org/packages/30/6e/32e67467f6154bf4f1c4f63b05acc5097cba4237d45bbeeea446b52e8ac1/coverage-7.15.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:337399ad2c93b3acd2a937627dae8b3e86b66707cd3d3e856347999aadf1ef8d", size = 253676, upload-time = "2026-08-06T13:48:18.493Z" }, + { url = "https://files.pythonhosted.org/packages/03/c1/8b24192e89286399765155251f99ee9f070a9d637109018ac23d99b99f6f/coverage-7.15.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:96e257121228ec5cd2bb919276e94ac11074471bc37d68dbae0e8308cce15fff", size = 255453, upload-time = "2026-08-06T13:48:20.057Z" }, + { url = "https://files.pythonhosted.org/packages/16/6f/8b41ebdf67c87854e17c035336a90f1cfbad0c14c2a584301be6ff148718/coverage-7.15.4-cp313-cp313-win32.whl", hash = "sha256:c65a9e0dfc6143491879da4e13b5e30f8be192055de508d737fb14601edbd22c", size = 224605, upload-time = "2026-08-06T13:48:21.655Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e2/2946c7f0b42b152ecb21ff1bdad72e3d301e790c0c487e4a86e8c9f69347/coverage-7.15.4-cp313-cp313-win_amd64.whl", hash = "sha256:2ff8f5e9b8f7a94f0c11c45631eee103dbcb7d63274edd12c56efe1be690b3b4", size = 225148, upload-time = "2026-08-06T13:48:23.376Z" }, + { url = "https://files.pythonhosted.org/packages/9e/83/3f4a69957f48ae7a0aba76c34743f88963d607b19e03f3f8e66f91cae0f9/coverage-7.15.4-cp313-cp313-win_arm64.whl", hash = "sha256:6e0a8a5083b096487d6cfced94cdd514d8f5db6f113610fb36c0620edb1028cf", size = 224536, upload-time = "2026-08-06T13:48:25.117Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ac/748cf29eeb2d6be34a3176ce26a4f49e38085ee08e8935f05f6f26ed7e0f/coverage-7.15.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:770e9325ab5ea6d56f77e59b29ecfe0ac20b57a82a601876f90494a4dda0386f", size = 222608, upload-time = "2026-08-06T13:48:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/0b/02/1abbf5c984677b0aa439cdacaccbf38d248939d8ef8fe1cc7a50d73edb77/coverage-7.15.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d12b33a3a50a1676b7784dc8d00a0c6d66a9f2add4b85a041c19b6a7e53ef23c", size = 222940, upload-time = "2026-08-06T13:48:28.432Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e1/ff8f9f53d9fcf586125b55d0b1f04ec1c14955fee41e83d5814bee141bb5/coverage-7.15.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5669c8378ebde86f5def7a25d29586631b58acc27ffde04399f678f3dfc6e082", size = 253985, upload-time = "2026-08-06T13:48:29.995Z" }, + { url = "https://files.pythonhosted.org/packages/a1/26/595759762e514e81be1d7d01ed03444303bcd152226a6529998d253f9201/coverage-7.15.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ff97a14362eef486483ed44042ca2027ea257df6ff768e62358ee0c9776925ac", size = 256492, upload-time = "2026-08-06T13:48:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/b79aabac54d482be23b5fcdd4f4662bff24a78edc4ee29201726929936d5/coverage-7.15.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a325e815318638aed1655d9c06e6d7c2d3d46c09231ce988070428a8762d734", size = 257837, upload-time = "2026-08-06T13:48:33.186Z" }, + { url = "https://files.pythonhosted.org/packages/09/0f/bf7f297885a5bf6fd71e5782404e0ff059ca09e8711ceb3a08544abde45a/coverage-7.15.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:474223409d88eb20d2d6a0d37ea60e8647a65a90cc008dc1f0410af5f64f1e0d", size = 260152, upload-time = "2026-08-06T13:48:34.75Z" }, + { url = "https://files.pythonhosted.org/packages/fd/f1/296744e854ff8368542343457414380465e9ceefb9192342feb9d3bc461d/coverage-7.15.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f2f62ae3cd189dd2e13aece758c57b3eecbd27be070dbd4cbd10936049e5dbf", size = 253978, upload-time = "2026-08-06T13:48:36.434Z" }, + { url = "https://files.pythonhosted.org/packages/55/b0/bbdb2e9057493e66220a2e149ca2d301ba0e3a58a83bd6b90de9826d16f3/coverage-7.15.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39ece820e29e0a2ba34b3ecb3be83c27e997eed8926f2ba6fe7ce7a0bda5843b", size = 255846, upload-time = "2026-08-06T13:48:38.317Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/38015b2b6d21258713bd17e76b59d033b191efb5703589cffd037dfbca20/coverage-7.15.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f21b56dcace11dfe013014201f577dcd592b2a9b72182d930361b47cf6f73f25", size = 253808, upload-time = "2026-08-06T13:48:39.993Z" }, + { url = "https://files.pythonhosted.org/packages/0b/64/0d515c1e60ee6fbfd1a0e79c07cd87d388a233b7adc37758735677203808/coverage-7.15.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:93a3a0b662abcc10c73a47cbc72cd60f63618d6989fb2d1286e50eacd974f303", size = 258081, upload-time = "2026-08-06T13:48:41.971Z" }, + { url = "https://files.pythonhosted.org/packages/91/71/04d9e7a3642146c6351338aef4ef85ab11dbbb54744c13245caba1aad1c0/coverage-7.15.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:141fae2cabf5569b782c10afc4c850ce10f618c13f8db54765cba99cc839da1f", size = 253624, upload-time = "2026-08-06T13:48:43.731Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a7/6c28b74c81ebff66987b0e2522ba5cffa3e90b0c33cb6a2eb264d4ee8cf1/coverage-7.15.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:81294c7e6ab30c5f74c0353b11b2fd6320e72d9bee6ac73b357caa8b916323a5", size = 255280, upload-time = "2026-08-06T13:48:45.58Z" }, + { url = "https://files.pythonhosted.org/packages/52/af/bc19996a7014b98d7bbb0f0939453c67074af65784a3aa16a789a07381fa/coverage-7.15.4-cp314-cp314-win32.whl", hash = "sha256:7bbd7d6418e0dab31a206af5203bd43ae36edb8e7fba1940b055d3e9249290d7", size = 224768, upload-time = "2026-08-06T13:48:47.525Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/219484e476d6e101ba0a444852579e05f5b75c37c611a42ed1190f73ef62/coverage-7.15.4-cp314-cp314-win_amd64.whl", hash = "sha256:f0204ed122758782970526057093f448051a39db9d810d4e344bb87a3546f425", size = 225259, upload-time = "2026-08-06T13:48:49.513Z" }, + { url = "https://files.pythonhosted.org/packages/b7/66/fa77daf4e383e5f776dac62c2409b6af81910ae6fe326bd5170dba74cc63/coverage-7.15.4-cp314-cp314-win_arm64.whl", hash = "sha256:9e71e7bc71c686a123347ae47a0de33a175e797a85bb57b791492adf4eec8ed8", size = 224684, upload-time = "2026-08-06T13:48:51.235Z" }, + { url = "https://files.pythonhosted.org/packages/58/5b/f03bf0ce362bbf3f785fa5219620d00778d4ac6fc9e407734828e9c672f6/coverage-7.15.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7c922735321eef3f87c280a3d39afff6b646723a2880b862cda4ac7a093b8aa8", size = 223338, upload-time = "2026-08-06T13:48:52.896Z" }, + { url = "https://files.pythonhosted.org/packages/0f/76/e77d0ae22501831cc9f92193e8a957a5caa1dd177f90a6d1d9b106242d92/coverage-7.15.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f41c17c4668a655ce96d090d8d5ffdc24ef64b5a02f9753884d08483e8a4a41a", size = 223609, upload-time = "2026-08-06T13:48:54.688Z" }, + { url = "https://files.pythonhosted.org/packages/82/1a/b1f089da8d38ac612fa2dd6dc7f4a1a7657d12f3e261d2996edd3a838d0b/coverage-7.15.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:46822e9b6ff1c6a72b518c162c44a8f45a61a1d609c51084bf5b16c023c5037b", size = 264970, upload-time = "2026-08-06T13:48:56.403Z" }, + { url = "https://files.pythonhosted.org/packages/bf/31/e66d98d6e9c7fcc88470f1e234eaf6b1950dc0dfbf797f7282c1c861da24/coverage-7.15.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6f4955b73b5445271379a59e3792b0d978f42d4a01e0cf7a67d9c33a3bb0a5", size = 267088, upload-time = "2026-08-06T13:48:58.41Z" }, + { url = "https://files.pythonhosted.org/packages/59/a1/ae94eb2c541add426378408379f233591e069040b1e2cdb33df9498a0682/coverage-7.15.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3fc9e047706fb4a9abb54f719d3aa643e80e5bb3818182c40aee01ac0f0247ba", size = 269508, upload-time = "2026-08-06T13:49:00.42Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c7/88a10694a1c6a213569766aba9f25847b28155d4ac731b13226db216356d/coverage-7.15.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05e491d4f3165d62d4f5c8fd48dfeabf2ae8f42cbbd484319af33ea851b78982", size = 270629, upload-time = "2026-08-06T13:49:02.234Z" }, + { url = "https://files.pythonhosted.org/packages/b3/34/d8b8232e5e55169933b59aabcef2fedfa4b9d8897361bb80fcbda146505f/coverage-7.15.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:226c66e80ec0598d3b9b4874123df167ccca342aca8714f77cac6829688ee09c", size = 264043, upload-time = "2026-08-06T13:49:04.102Z" }, + { url = "https://files.pythonhosted.org/packages/7e/35/58b009dbf8c471c7224716478b9fed4a7e1af15320e1ed41660978504663/coverage-7.15.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac41cc14bebda0dbfb0628036b7f75706935c95bcc07fefe9a0f93614aa60a57", size = 266963, upload-time = "2026-08-06T13:49:05.821Z" }, + { url = "https://files.pythonhosted.org/packages/62/aa/57fbda1b42c892968273c56b6ee9dc0f1310850859230a507bc7873b1f65/coverage-7.15.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8af623e5cd92080acddd02b38f2f406a2c3a0893c38950b211890361448fbf26", size = 264569, upload-time = "2026-08-06T13:49:07.706Z" }, + { url = "https://files.pythonhosted.org/packages/98/8a/360e6e7f24d477b7e889703af0afa878d15b6d4d8d2a822b2835c169a879/coverage-7.15.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07545711d4f0f32852a18f18ad11f76f0109909d09e78b9008b4cfc67e829429", size = 268299, upload-time = "2026-08-06T13:49:09.587Z" }, + { url = "https://files.pythonhosted.org/packages/4e/89/6f701261aee21b6b5fa8f7872229406dc917e125069448292223bf213606/coverage-7.15.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a0865421cfdc53654b342d515e5a233187590882d20b95752150e53f65460017", size = 263413, upload-time = "2026-08-06T13:49:11.604Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0f/6f04036edc260ed425af83e834f627fad48941ce97b50bfe6edd8b6fa623/coverage-7.15.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:460115e32ee40566476db5048f9bec1e842c127ad8e6f8be745aad3ac9cbc839", size = 265725, upload-time = "2026-08-06T13:49:13.38Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ce/d19b5d4d5c49a7bfb925fd74310fee7d28bc99520ac3367ccbc54e662518/coverage-7.15.4-cp314-cp314t-win32.whl", hash = "sha256:cbde877ef9dd7baf272b9bfef2b8a25edd45d9170fc326951dd20eb480335e85", size = 225079, upload-time = "2026-08-06T13:49:15.265Z" }, + { url = "https://files.pythonhosted.org/packages/26/bb/7aa1b3b173faee0679037ca950bbbe1247273656697994d8d13f80f8d4b4/coverage-7.15.4-cp314-cp314t-win_amd64.whl", hash = "sha256:3da9e92d1c551fd7563833e9ade686efb0c4b7363ab7681a94283958c950bf5e", size = 225911, upload-time = "2026-08-06T13:49:17.279Z" }, + { url = "https://files.pythonhosted.org/packages/81/1c/4ea9e47426d80038d9222db3c4534cb6021a74b237d3ff97ffd33b6600dd/coverage-7.15.4-cp314-cp314t-win_arm64.whl", hash = "sha256:3a54f5a0d85050c73a38f6793090ee83974531e67fe5e57a1da9bee11398aa5e", size = 225219, upload-time = "2026-08-06T13:49:19.293Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c4/dc5d2ac8f9142e7ec7de66e7bf0591db29d78955a040bd915870d9c0e657/coverage-7.15.4-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:2c9872e4d9dc5d3cf616bf4b382f5a00359305a5be666a3dd0b5cdb4e49597f9", size = 222604, upload-time = "2026-08-06T13:49:21.279Z" }, + { url = "https://files.pythonhosted.org/packages/70/39/33e63df81fe2ee100897451841c821467635923e58e37c6bd4b46dd8106c/coverage-7.15.4-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:e101dbb4b9b72f0cddd8cdc8c9c5b47f456766f5e0ac82dbfb75e5c55409b78a", size = 222944, upload-time = "2026-08-06T13:49:23.187Z" }, + { url = "https://files.pythonhosted.org/packages/99/1f/ef3ffb5557febc75a0d97aa459d0266d7d741110265121cc6d8539343d44/coverage-7.15.4-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7d1abebdb047729e852b9c77a00497dfbeb11eb3a117e037d7dbc3ac8e5f5c54", size = 254050, upload-time = "2026-08-06T13:49:25.008Z" }, + { url = "https://files.pythonhosted.org/packages/6f/f5/1f0f6f77698c3601ca0ae7431e34b24c62ca2f06fecb23b73ed1f651d2be/coverage-7.15.4-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d28a4a899354d0ea6214cc59b4fa19eefbce1b9ff1688ab579acf49e894bd3fb", size = 256967, upload-time = "2026-08-06T13:49:26.896Z" }, + { url = "https://files.pythonhosted.org/packages/03/7a/2ed9bed79925f4367c83c77f66a89e5ca7229c288d2d19ad5f36d1ca0070/coverage-7.15.4-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffb3c2aacea411cc7e1d27712490c11108e2de1d39019ae32915493a59a8b9ed", size = 258587, upload-time = "2026-08-06T13:49:28.692Z" }, + { url = "https://files.pythonhosted.org/packages/45/8c/fa34044f71b7cc4ecb6da9c2408770959b0591fa9b5fb6fb6bca38f94298/coverage-7.15.4-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9447978a92f405d301123cfd39ff49895490efb769a758fe2734c7f631bf8ce", size = 260785, upload-time = "2026-08-06T13:49:30.472Z" }, + { url = "https://files.pythonhosted.org/packages/4f/54/d5727ce36b4524a7394ab9f5f1df378e1f23affcdab01037dc8655185cc7/coverage-7.15.4-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:050467a7983b8e2fe7dd41a78bb30c3e7f8c0b8cafda14b1c46f8b5e3cf2dd3c", size = 254545, upload-time = "2026-08-06T13:49:32.271Z" }, + { url = "https://files.pythonhosted.org/packages/dc/e6/6e3783e576719590194bdffb6dd6d85490801785b7c331e35a245d8cb8b5/coverage-7.15.4-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d003b7a5708ddad5c206c79607a6b92abb6fc13c57d99d8a4468cc03a2941ced", size = 256682, upload-time = "2026-08-06T13:49:34.089Z" }, + { url = "https://files.pythonhosted.org/packages/dc/f2/bacdbde18b69ed2de424fcf64d9fb0a4913753d4f0eca8bae9daad69f4bd/coverage-7.15.4-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c38efe30fd74e5c19e9433f11fb1f5dc9c6522770971b7c6145bbaa413dc8800", size = 254560, upload-time = "2026-08-06T13:49:36.052Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a3/1fb927196e3477c1b48831169ab58ba08f451ba87ae311ff1de68b26a616/coverage-7.15.4-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:1f4f826d70f772ab8b0c052329580d7fe8b8abd191e4ce0c8f81aec6614665d3", size = 258792, upload-time = "2026-08-06T13:49:38.01Z" }, + { url = "https://files.pythonhosted.org/packages/41/58/30d4c149c69053de0edfe325614c1d28d508f62b1783e0e4a234d2e49136/coverage-7.15.4-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:4a4bf917c9953f57c957be31c1cd504e3bd2f34d4a352b9d391a3025336f6768", size = 253968, upload-time = "2026-08-06T13:49:39.934Z" }, + { url = "https://files.pythonhosted.org/packages/89/e4/77f639371b918aad30dda4051f95404b43578f7f2e2f87ba73e02ed1ff37/coverage-7.15.4-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:1c9bf40ebef178a45192c75c4964760bb261b0e6ad725da5fc4c93f674f19753", size = 255893, upload-time = "2026-08-06T13:49:41.825Z" }, + { url = "https://files.pythonhosted.org/packages/5c/62/13be29b3ddab35f14c87967a4820a05106d2a3eccb4fa4ff550bf30b75e0/coverage-7.15.4-cp315-cp315-win32.whl", hash = "sha256:43619d04c3671792d2c4706ae8bf45e265dc87bbd4078189ef8b847ea1e74be2", size = 224768, upload-time = "2026-08-06T13:49:44.08Z" }, + { url = "https://files.pythonhosted.org/packages/a1/70/af0c6be0f964af6954f6b74bc109b0dbca02824696d2520fb17fe1ab06e3/coverage-7.15.4-cp315-cp315-win_amd64.whl", hash = "sha256:be619439dbcd31a2eab10b32de9fff62c26ed4bab69dc32b8363fdaaa0882809", size = 225242, upload-time = "2026-08-06T13:49:45.899Z" }, + { url = "https://files.pythonhosted.org/packages/4f/2d/f3bd3aab899fc9efc18b53133ee68f5f98574ef480649b23e12962226387/coverage-7.15.4-cp315-cp315-win_arm64.whl", hash = "sha256:def597967dafc2e8d97c9097ea453c464e0bb8ed38f193a43070f10dc623bb6d", size = 224674, upload-time = "2026-08-06T13:49:48.322Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ca/f69251cd63eabc6438321aea22148754cce758a26bde07dd490e3fe7cfc5/coverage-7.15.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c7dbc748ac8a1e3e59a2b28bea47675e6e778081dbbf081bde0d75def2fcbe1d", size = 223333, upload-time = "2026-08-06T13:49:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/a7/a7/037b53b2885b0d8447064432491a4d5a1014cd9f97a594d53acd0c04541a/coverage-7.15.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:2413074a5ecbb61a01a7888fc72db0ca324d13588c5b38bc0dd8564cdcdfea26", size = 223630, upload-time = "2026-08-06T13:49:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/80/4f/152b8a4779ae90da11bb24f7467df8a59f0be48a5c52acb856325ca48289/coverage-7.15.4-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4e6f6f632b7b2f714bf7a1346e8f97b650ee71f3c298aaad42a2ab60f0f07645", size = 264489, upload-time = "2026-08-06T13:49:54.52Z" }, + { url = "https://files.pythonhosted.org/packages/10/2d/84b4b9e0e1dd6528a51920ff7031f35b789382e467a28ec6a5a578cb8812/coverage-7.15.4-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8df457da2249d3c75ca2e5e835d59c725abfe92d27fdff6cd99eed85b51d5e9a", size = 267567, upload-time = "2026-08-06T13:49:56.721Z" }, + { url = "https://files.pythonhosted.org/packages/53/fc/ba01cc25299f9f8a2c8b02d3b28c53f3543d9fbfbe4e74fa2760b48f163e/coverage-7.15.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:050f66a08805acb5b8a23c6d4a517b1ecf82c08e81ed0e4bd727df065e5c6624", size = 270123, upload-time = "2026-08-06T13:49:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d0/db2647cbf40b14f8c308f94ff7bf89c06d564e59f396906edf50086ec788/coverage-7.15.4-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1587fb771d1ccceef708fdde1e5af8c7ed24b486b61d13a321acb7d8145390aa", size = 271107, upload-time = "2026-08-06T13:50:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4d2d17924552c458bb4f77dd631f0e3bc92fbbdf2d2d916cd4b33bbfd5b1/coverage-7.15.4-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8b4f1c3a69ca580f3fbd6b2046915f536d7f586874f25c1bb23add2a3c88d50f", size = 264955, upload-time = "2026-08-06T13:50:03.023Z" }, + { url = "https://files.pythonhosted.org/packages/ee/de/dc010c7a3691f396d93bbc26bfcafa1c2a3a351cd520470f15faf5795bd5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:ffb58d7eff5b7f6ecc6fa21d6288ab7f968a212cb67d682c269c09b9eba3b66f", size = 267949, upload-time = "2026-08-06T13:50:05.557Z" }, + { url = "https://files.pythonhosted.org/packages/78/ea/dc96a11375e83c045c2f7c61fb6918277cfe9401db7c0f7b1d111a84b2e5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:d9df165544774574ee004b953023d1bebada1894a80b1052a43d798b0f676e67", size = 264421, upload-time = "2026-08-06T13:50:07.612Z" }, + { url = "https://files.pythonhosted.org/packages/c8/86/b77131a0f9503ce461cd577076147d7a9040f0c5dda772686f729e2cc9cb/coverage-7.15.4-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:f9de0a24a4079b53e523b5c5e2c5945ec251ab486652659955187cf255a259bc", size = 269121, upload-time = "2026-08-06T13:50:09.58Z" }, + { url = "https://files.pythonhosted.org/packages/24/24/944bc35007862955e7ebf05754e645419dcf5d7526c52735cfa2715e8ebf/coverage-7.15.4-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:150089274bdc9f940628552cb92844e0223c987f1902ab8efe9f45a2ec758d88", size = 264565, upload-time = "2026-08-06T13:50:11.722Z" }, + { url = "https://files.pythonhosted.org/packages/c7/cc/a3bb9f93e7e740659163e2ea584f8196ddcd2c456a5dbe15f6c50105fec1/coverage-7.15.4-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:a58a94fed5da6997d258e8f7668c1e195fbd04a691d781b7558f1e468f9e68bc", size = 266522, upload-time = "2026-08-06T13:50:13.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/dd/e0e40f3560d878d888c580698ff5ad1179f5e1c3ac949684ef66b41a3817/coverage-7.15.4-cp315-cp315t-win32.whl", hash = "sha256:ebd5a6d8466ff30836572f3ba2cae8a5e8f85029b1c6d5e2ed338dc472a5166a", size = 225068, upload-time = "2026-08-06T13:50:15.825Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7e/37732ea80eebc30e976e4cdab15c190bc42d96959a42e38ddf6f8c60468f/coverage-7.15.4-cp315-cp315t-win_amd64.whl", hash = "sha256:288bde2a2d7ab6b6c2d7252fcde8b524387f2d970bdba9658fc6f8bbcaef0f9b", size = 225895, upload-time = "2026-08-06T13:50:17.928Z" }, + { url = "https://files.pythonhosted.org/packages/c6/08/1e00f7923eaaba45fb3d51dd794125fc766304b1df264f3a9c6557bfb30e/coverage-7.15.4-cp315-cp315t-win_arm64.whl", hash = "sha256:68be5e1de60ff13c9095bbec0e5a7fa45b33b101752215b91345ea1f61c4a278", size = 225213, upload-time = "2026-08-06T13:50:19.981Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d9/e70c286c979378f061d8266e279b686ab0b0b688e1fe0af864684f23a77d/coverage-7.15.4-py3-none-any.whl", hash = "sha256:964730a1e9de9c0cf11be6a1a3c79ce419c34882842abd256086ba4698705e84", size = 214332, upload-time = "2026-08-06T13:50:22.192Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11'" }, +] + +[[package]] +name = "ctranslate2" +version = "4.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "pyyaml" }, + { name = "setuptools" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/c4/0e450796f90e54f3325697fc67db4f4ecd397aef96d7b3924e26fb8bd04b/ctranslate2-4.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c2db633a06e3b34bbfb72fd26eee58053d9df1f9c1610ac4df3a6a1e25af7d7", size = 1270559, upload-time = "2026-07-03T12:39:01.154Z" }, + { url = "https://files.pythonhosted.org/packages/b7/54/7b6db16470d0788fb8ab43a99e3e18ba9d41a9b50b7fef7dec353eafbe20/ctranslate2-4.8.1-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:079976cbce3a68de04bf9948d08c96beb86df44e5cd2974e4187bc9c9bb388f3", size = 11928069, upload-time = "2026-07-03T12:39:02.6Z" }, + { url = "https://files.pythonhosted.org/packages/37/66/8fee1366631d224bf26b34db9063a0c88ce358d58331c2393689b0ea27ff/ctranslate2-4.8.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74bae0a8dc9f98c5a6100bf1c17a91782b384ea53b83e2606030ebf9f25318fe", size = 16707971, upload-time = "2026-07-03T12:39:05.09Z" }, + { url = "https://files.pythonhosted.org/packages/30/84/f610e90bb419707632b9b668476b9fd4cdb090c9b53c119ce017699b58ca/ctranslate2-4.8.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0a584c17f21779eb9035bcbc1ec280998f90b36725b70a5ff911f33e343199a", size = 39351971, upload-time = "2026-07-03T12:39:08.555Z" }, + { url = "https://files.pythonhosted.org/packages/76/6c/7230ecbdd23ab867715e1b6ffe99211c39c11cae8ec2d6c3ec9208c38ee2/ctranslate2-4.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:82982f07a7d615d2248d17d6ec4c43cd50e534b094aa27cda62125a5e3a6e3fc", size = 19219248, upload-time = "2026-07-03T12:39:11.329Z" }, + { url = "https://files.pythonhosted.org/packages/6d/09/9a50eeab00db68aeac08f6ab7f98b5c36abd26b89cbd707ea39e70656500/ctranslate2-4.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9de0dddd91ae68da0a7323441e90708d14b31d31cd443004dda0e1198b5bf11e", size = 1270522, upload-time = "2026-07-03T12:39:13.368Z" }, + { url = "https://files.pythonhosted.org/packages/2f/97/6c41c4d3ae539ec76b1943c362184677befd7c1d5290d2ec361182cdb1e0/ctranslate2-4.8.1-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:82e0e6eb7d4301fd79a714495c8faf34242e09542cef04c9e9794c3fe90014a1", size = 11930367, upload-time = "2026-07-03T12:39:14.896Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d4/03428106134a0a58922461074f8942f92c5ed0bb3a8d018677ad64a9c476/ctranslate2-4.8.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5ca144b93035b9f53e6d67b7cdf5802c3fffca9aa0247940eecbd4592c68ce2f", size = 16882768, upload-time = "2026-07-03T12:39:17.425Z" }, + { url = "https://files.pythonhosted.org/packages/47/c9/976a565398a03fb2973cbe5edd5ca03c4332d86b634799e0ee562420d3bc/ctranslate2-4.8.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dacc408f716ebc73b3b3c6ddd937700e776c4c68b6d9c81862990150ff0f6af6", size = 39529060, upload-time = "2026-07-03T12:39:20.468Z" }, + { url = "https://files.pythonhosted.org/packages/c0/82/0a5f7f2b03b4e10aacb3146715724e1b96bb993cc7d199be28c9825aa120/ctranslate2-4.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:49f96e861b57301f0b76a082109bde2cac8204a6b4fedc870883008271e82251", size = 19220789, upload-time = "2026-07-03T12:39:23.356Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a7/3101c3a0785253a8ef386f39744ad19c28c75b7f227e7c232aee7a5c416a/ctranslate2-4.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ba628835e6ad4ad399261ab6cb51bf152de563e6b122a9e8eb0c61e69f925931", size = 1270478, upload-time = "2026-07-03T12:39:25.401Z" }, + { url = "https://files.pythonhosted.org/packages/89/b9/e50c7558e96a054d6b1e6a6c5e729dda4a4f05584e065f2902aa5f1bc4c8/ctranslate2-4.8.1-cp313-cp313-macosx_11_0_x86_64.whl", hash = "sha256:85ef15ce0b2172ec471975b8a30d5c5bc71e7cffcd163ad6c07ea32f1943d940", size = 11930241, upload-time = "2026-07-03T12:39:26.927Z" }, + { url = "https://files.pythonhosted.org/packages/1d/2f/ea7a19c6d7e949b731fb034664633184bbfc7882846d107f4d790693fb76/ctranslate2-4.8.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0030670278a73cae09dff9bca72cdd248af61f9367257f18db9b3b94fbb3a50d", size = 16883512, upload-time = "2026-07-03T12:39:29.302Z" }, + { url = "https://files.pythonhosted.org/packages/99/4a/21f325a9d0925d8ad24b04249adf29bf9909442967603634f7f6d4acbb79/ctranslate2-4.8.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4242a7f8e285f922525f4cffd5b1fb43cbacc61d0611cf54832e9c447d030840", size = 39529085, upload-time = "2026-07-03T12:39:32.627Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e7/37da1a7500b57496a5269318c4f57962ea0c26dcac06b85222d7831acf00/ctranslate2-4.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:d52499f05a60a791aeadee28d609efa130142f376d1ea76b2b1c593bb01f8827", size = 19220784, upload-time = "2026-07-03T12:39:35.74Z" }, + { url = "https://files.pythonhosted.org/packages/c6/66/39111224e418400d97fd79fbc9e72329c51f91a3e7a9c9a1a182e4f88022/ctranslate2-4.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b4c3246aa4a7f309109a841ca743a72cc4abad4f93c0bf7da691023323215621", size = 1271321, upload-time = "2026-07-03T12:39:37.907Z" }, + { url = "https://files.pythonhosted.org/packages/ef/89/13f827fae226eea51315729c00111f716813d7736ebb827fecb8f361fe0d/ctranslate2-4.8.1-cp314-cp314-macosx_11_0_x86_64.whl", hash = "sha256:c989f747789e8619cbc2e06443b3674c31bc71bad0369652485bd894b627360a", size = 11930735, upload-time = "2026-07-03T12:39:39.534Z" }, + { url = "https://files.pythonhosted.org/packages/c9/94/4b73f9bbaba29df4227cc65114f11d83fe6d696ef3705cb1ade79eb118fd/ctranslate2-4.8.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c90eb0bd67b6bb183712cc3fd14bf01ec4f622cd625c5b33cc6c56be7d1c9c34", size = 16872460, upload-time = "2026-07-03T12:39:42.272Z" }, + { url = "https://files.pythonhosted.org/packages/ee/d0/9816494d5ff0745bdf9abe5af04e57a103a416444e604cbe83a6eb0aed7b/ctranslate2-4.8.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e3e3aef4670a6c8dcea367401675f82b49b02c18f5837221bcd7cca90b1707a8", size = 39494736, upload-time = "2026-07-03T12:39:45.733Z" }, + { url = "https://files.pythonhosted.org/packages/6c/dc/22a2c874ca8bb6caa7018dfefdff92dddd487db31cf169891c4c6d408091/ctranslate2-4.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:a2dcce0a57beee984a691d9daa8fc3fd389f5b6cada2644c34571011833bd5b1", size = 19477164, upload-time = "2026-07-03T12:39:48.952Z" }, + { url = "https://files.pythonhosted.org/packages/77/39/7b8d47bf49748ba73182742683eef74b46608beb879765d9d4efc46bc345/ctranslate2-4.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a28c5889585cd17ee3649dfd46d9002ddf50204173f8bff476b9f76d6585795", size = 1293935, upload-time = "2026-07-03T12:39:50.924Z" }, + { url = "https://files.pythonhosted.org/packages/c1/20/434e30c752c433eaef5deccd4de54775bc1f205a6fe6c9e756b737018209/ctranslate2-4.8.1-cp314-cp314t-macosx_11_0_x86_64.whl", hash = "sha256:911a5cdef8a405c1804330613a1865f616eb9c092a0e932ee4648128eb20b627", size = 11951789, upload-time = "2026-07-03T12:39:52.886Z" }, + { url = "https://files.pythonhosted.org/packages/85/f2/d716426220b462bbb5bb354b9c6c8d9a41285f067203c860cc79f9f19917/ctranslate2-4.8.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:84723cae6f802551bbf2438e5e4810722631a2183b89a82c31df26566b54821d", size = 16860414, upload-time = "2026-07-03T12:39:55.54Z" }, + { url = "https://files.pythonhosted.org/packages/69/11/cdab0e7e2ad4e547f15ab227c09207569f1272abae05816900ecebb0797a/ctranslate2-4.8.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1910752ec541980644191fa3b407bc61dee00e88070b0aed29b4cef75010b3ea", size = 39465200, upload-time = "2026-07-03T12:39:59.017Z" }, + { url = "https://files.pythonhosted.org/packages/c0/03/126e963fc3237a416f3085b8a663ebd8ab449ed6c37195b4e0b49597ba0c/ctranslate2-4.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:dc9f1abef55579cc02cdc74b3a55df38491ec56d177d6e6039609d61d09ed30e", size = 19499597, upload-time = "2026-07-03T12:40:01.68Z" }, +] + +[[package]] +name = "fastapi" +version = "0.141.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/02/91e3416a8fdd715abb903a952a6bec7cdd8d14eed55d415fc8595524c319/fastapi-0.141.1.tar.gz", hash = "sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1", size = 425799, upload-time = "2026-07-29T17:18:05.568Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", hash = "sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", size = 131954, upload-time = "2026-07-29T17:18:04.364Z" }, +] + +[[package]] +name = "faster-whisper" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "av" }, + { name = "ctranslate2" }, + { name = "huggingface-hub" }, + { name = "onnxruntime" }, + { name = "tokenizers" }, + { name = "tqdm" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/99/49ee85903dee060d9f08297b4a342e5e0bcfca2f027a07b4ee0a38ab13f9/faster_whisper-1.2.1-py3-none-any.whl", hash = "sha256:79a66ad50688c0b794dd501dc340a736992a6342f7f95e5811be60b5224a26a7", size = 1118909, upload-time = "2025-10-31T11:35:47.794Z" }, +] + +[[package]] +name = "filelock" +version = "3.32.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/64/a02e6765de08964ed371eca577870593245afc9dfac16d037de7c10d18e6/filelock-3.32.3.tar.gz", hash = "sha256:0ffa185a3540854c95caa7fa76b76cb219d907415e2c5dc9af25fd970563487f", size = 218135, upload-time = "2026-08-13T16:00:05.577Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/8e/50f46a9c0ce8d2861a394c1347caae037ea0431d2f67d7feb151cbc4649a/filelock-3.32.3-py3-none-any.whl", hash = "sha256:7f0ca4bcc0e181c60dbbd8aa9ab5b120ebb99e4e064e83636340056f833a1f09", size = 98901, upload-time = "2026-08-13T16:00:03.974Z" }, +] + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/78/f34251dadb8f3921264a1d9b8946f5e542014ee2614b285261b4e40e6775/fsspec-2026.7.0.tar.gz", hash = "sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88", size = 317040, upload-time = "2026-07-28T16:34:51.052Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/3c/6a2bf344106328fd04963664a60b9bb6496fc25df8e962fcdc1367285fb9/fsspec-2026.7.0-py3-none-any.whl", hash = "sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279", size = 206583, upload-time = "2026-07-28T16:34:49.538Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/ab/522a2ab67f27971a9d48ca666d4fca85ef7d5282d142e31fd087e27b1bbe/hf_xet-1.6.0.tar.gz", hash = "sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef", size = 920527, upload-time = "2026-08-03T22:33:13.243Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/62/3c062f593bd92ef4e77a0ef39541e3d82a0a1d3947c8a777a02a13a27828/hf_xet-1.6.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:70cbb9c896901600128cb9b6f06e132954fbede1db30f31f7c6c63f84cb7c31d", size = 4074584, upload-time = "2026-08-03T22:32:47.364Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1e/c0ad437dd267a8e435bef594acf781bbc3874ff0b6435b4962d03ecf7cc4/hf_xet-1.6.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675", size = 3867381, upload-time = "2026-08-03T22:32:49.049Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ee/7c0d7b6ab336167531b1c30af2af003f054af4c749becbd7209ae33a77c3/hf_xet-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b", size = 4453982, upload-time = "2026-08-03T22:32:50.568Z" }, + { url = "https://files.pythonhosted.org/packages/63/06/ad8eab1c9525246650cbaa821caa3cdbaca734ab1a5b8c91bea09cbd8d69/hf_xet-1.6.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:948f15d3a9545cfe5932f6bd8b440f6ae630aee108f14b7bd6c561f7c2dcc522", size = 4249445, upload-time = "2026-08-03T22:32:52.391Z" }, + { url = "https://files.pythonhosted.org/packages/d8/26/1eee8aedb0dafc1ab9717dc9ac602cde33361b232dc06803f1f6ed18b58c/hf_xet-1.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5153e6bb103ad49d6ea9f1b2e230db5a2ea32551ad09a706d2f61d7c7c80d80e", size = 4451099, upload-time = "2026-08-03T22:32:54.114Z" }, + { url = "https://files.pythonhosted.org/packages/67/57/0b88af1f194ab6c9c650547d9cc06bfeaab836ae4dcdb331676bfb8be95a/hf_xet-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:35cec30d75c6f9eb9c16a77cef68e85a103b72e24d4b473714ec9ff06428bab9", size = 4664712, upload-time = "2026-08-03T22:32:55.547Z" }, + { url = "https://files.pythonhosted.org/packages/53/a0/26b717a9d1840e8abf48dcec64b5ed8fbe472671d38ad28d30e147132b33/hf_xet-1.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:5789835d7c6bc9436962853192082374297fb72d7eff7e7762ec25ceb7e25338", size = 4025906, upload-time = "2026-08-03T22:32:57.391Z" }, + { url = "https://files.pythonhosted.org/packages/49/f6/4a9966633c6fef83af997e2cff68ec1963676d412bdfd096df2a93b8e185/hf_xet-1.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:75765820ce4700db3750c94acc8fe27c5fae4c9ec000a0dbac3ca082acf97765", size = 3849221, upload-time = "2026-08-03T22:32:59.123Z" }, + { url = "https://files.pythonhosted.org/packages/a2/50/7afa2c9c787405864fc47a0d1bbc02c62e9101947ed43c1f43899fc7d91d/hf_xet-1.6.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d", size = 4071729, upload-time = "2026-08-03T22:33:00.721Z" }, + { url = "https://files.pythonhosted.org/packages/4b/69/55b8dcf636142ae660fec1869fcac14c4da2e8412e14d6eee1523be77e9f/hf_xet-1.6.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a", size = 3876287, upload-time = "2026-08-03T22:33:02.251Z" }, + { url = "https://files.pythonhosted.org/packages/67/4e/a28359bf1c1ecf11eba22123168c138698f7cb576ac678f5a2e16cd5da08/hf_xet-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f", size = 4464663, upload-time = "2026-08-03T22:33:03.802Z" }, + { url = "https://files.pythonhosted.org/packages/9a/69/1f0cbc2fb22ae6082d094f743d1b8945a3f36f6089cb95f42b7ee348cda7/hf_xet-1.6.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7", size = 4262538, upload-time = "2026-08-03T22:33:05.287Z" }, + { url = "https://files.pythonhosted.org/packages/d1/3a/4f4f2301ade26e404462d3336fa11f7958d914cabbabdd6e03c3c5d5658c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb", size = 4460520, upload-time = "2026-08-03T22:33:06.81Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5f/311725e2a905534dfee2dcb5b08414f249147f1f12252bfc2bd24caa075c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c", size = 4675937, upload-time = "2026-08-03T22:33:08.616Z" }, + { url = "https://files.pythonhosted.org/packages/98/b7/8c59a66d15205024662f1d66968136f13893f96df1ddc5087e2e281fc95f/hf_xet-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b", size = 4033128, upload-time = "2026-08-03T22:33:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/73/63/ca511b6f802f28cf3489b280fe77475bcca8de85e81a6299d7916b5b5555/hf_xet-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3", size = 3859359, upload-time = "2026-08-03T22:33:11.725Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/9b/ddf3d02a8681f1b9ce52fda03d755dad6b74c4f8172304c4c8d2975450f9/huggingface_hub-1.27.0.tar.gz", hash = "sha256:c1fed40ea82a6b41b477f5243546549b792ae0a93abcea608cff66089bf8f8df", size = 942668, upload-time = "2026-08-07T12:48:05.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/d8/95b735e183957c1f26d94c52977f09d466d55119cbbc1558ea4975e4c216/huggingface_hub-1.27.0-py3-none-any.whl", hash = "sha256:7df6827c2f956c60fbaa64646e979e566db76f619dd0a9729dfb8c5a3eb4f68d", size = 784926, upload-time = "2026-08-07T12:48:02.905Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "imageio-ffmpeg" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/bd/c3343c721f2a1b0c9fc71c1aebf1966a3b7f08c2eea8ed5437a2865611d6/imageio_ffmpeg-0.6.0.tar.gz", hash = "sha256:e2556bed8e005564a9f925bb7afa4002d82770d6b08825078b7697ab88ba1755", size = 25210, upload-time = "2025-01-16T21:34:32.747Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/58/87ef68ac83f4c7690961bce288fd8e382bc5f1513860fc7f90a9c1c1c6bf/imageio_ffmpeg-0.6.0-py3-none-macosx_10_9_intel.macosx_10_9_x86_64.whl", hash = "sha256:9d2baaf867088508d4a3458e61eeb30e945c4ad8016025545f66c4b5aaef0a61", size = 24932969, upload-time = "2025-01-16T21:34:20.464Z" }, + { url = "https://files.pythonhosted.org/packages/40/5c/f3d8a657d362cc93b81aab8feda487317da5b5d31c0e1fdfd5e986e55d17/imageio_ffmpeg-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b1ae3173414b5fc5f538a726c4e48ea97edc0d2cdc11f103afee655c463fa742", size = 21113891, upload-time = "2025-01-16T21:34:00.277Z" }, + { url = "https://files.pythonhosted.org/packages/33/e7/1925bfbc563c39c1d2e82501d8372734a5c725e53ac3b31b4c2d081e895b/imageio_ffmpeg-0.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1d47bebd83d2c5fc770720d211855f208af8a596c82d17730aa51e815cdee6dc", size = 25632706, upload-time = "2025-01-16T21:33:53.475Z" }, + { url = "https://files.pythonhosted.org/packages/a0/2d/43c8522a2038e9d0e7dbdf3a61195ecc31ca576fb1527a528c877e87d973/imageio_ffmpeg-0.6.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c7e46fcec401dd990405049d2e2f475e2b397779df2519b544b8aab515195282", size = 29498237, upload-time = "2025-01-16T21:34:13.726Z" }, + { url = "https://files.pythonhosted.org/packages/a0/13/59da54728351883c3c1d9fca1710ab8eee82c7beba585df8f25ca925f08f/imageio_ffmpeg-0.6.0-py3-none-win32.whl", hash = "sha256:196faa79366b4a82f95c0f4053191d2013f4714a715780f0ad2a68ff37483cc2", size = 19652251, upload-time = "2025-01-16T21:34:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c6/fa760e12a2483469e2bf5058c5faff664acf66cadb4df2ad6205b016a73d/imageio_ffmpeg-0.6.0-py3-none-win_amd64.whl", hash = "sha256:02fa47c83703c37df6bfe4896aab339013f62bf02c5ebf2dce6da56af04ffc0a", size = 31246824, upload-time = "2025-01-16T21:34:28.6Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.12'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/80/db0b4559e57ec36362bedbb05530a87fafbcb6067708c946967a41d449e7/numpy-2.5.2.tar.gz", hash = "sha256:d482d171c406ae88c5b19cad3b6a1c4c5209f886ab74bc44c2c865c23f52d860", size = 20773161, upload-time = "2026-08-09T13:48:27.962Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/72/dccb0aaf40972777283303919f613964227266d0c13adebb79ac124f1c3e/numpy-2.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:14e373cfc6387177e8409dac3c7159be8eb05cd77096cd7c950268b86f62831c", size = 16891693, upload-time = "2026-08-09T13:44:51.702Z" }, + { url = "https://files.pythonhosted.org/packages/60/2e/b5aee50a1f74ac815cf8331812cb8251e29024025de462e0c047641c614c/numpy-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4bbd96c833ecc8cc069ce518078fc8c60cb9cbfb0fea5b7a803ad65035596d03", size = 11903109, upload-time = "2026-08-09T13:44:55.501Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f4/29e78102a80601cf034d4e9767022cffeca2c3b4c926e1754572ca95593d/numpy-2.5.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:6e8172ddfcf5cf74b811d372b570b83c60bd2de87a6fbfbebdadb4a9bd9c6cbb", size = 5350202, upload-time = "2026-08-09T13:44:58.401Z" }, + { url = "https://files.pythonhosted.org/packages/11/4b/dcd3b7eadaf4035d2c7a4289d232523a6964f602598ef7674e4bd7291f93/numpy-2.5.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f188481f1669e26f62b701e8205d19e460fa4a9b52a1414ba382330e4a3414", size = 6687736, upload-time = "2026-08-09T13:45:00.813Z" }, + { url = "https://files.pythonhosted.org/packages/e5/21/4947e0e9d6c9fc2e2ff15b8949049ee44f63adb9cacc729ab8793f97e712/numpy-2.5.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ee9c4eeb8454b3660a8b53493563c3e121c2fc94fbd72b848ef814ed7b676a9", size = 15612696, upload-time = "2026-08-09T13:45:04.151Z" }, + { url = "https://files.pythonhosted.org/packages/3a/5f/62d28cf019460c7f1394105b4d49d9911a9c444cb77ab0bd95a204c5a6de/numpy-2.5.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3cdec01fa790a186d430433fdd4d4ffb70eed6f0eeb4bf05c8dbe2dce0a9bcb8", size = 16722264, upload-time = "2026-08-09T13:45:07.714Z" }, + { url = "https://files.pythonhosted.org/packages/14/25/3f0be4c1b9fdf5dd5e708a6806978564d7c46a055c000496309ff2a2f8af/numpy-2.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7999d4ddb0c4025018373fd787510d46e04c769467af22869707b3c1cfd459ab", size = 16974396, upload-time = "2026-08-09T13:45:11.316Z" }, + { url = "https://files.pythonhosted.org/packages/22/72/6262cbdeeb45da9d971e40715f579d791603ba8ec0b5e2db1ac55454421d/numpy-2.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1f017dc0875c9209d219f97feceb7d54c2661bb243deb4114478e1295808af7", size = 18476044, upload-time = "2026-08-09T13:45:14.869Z" }, + { url = "https://files.pythonhosted.org/packages/36/33/29208b8b075bde62d26a81d14b358c42b0f69b6cabd98d4ff97f37f22b05/numpy-2.5.2-cp312-cp312-win32.whl", hash = "sha256:d6a48072864e3324e194a8fbb3c657bcc5b5c869dbc64c9537b1d5c862572c0a", size = 6072817, upload-time = "2026-08-09T13:45:17.867Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b9/87fea2769fe1c47c1b5b01d8310772c9d1a85d485de7cf386ef7a3332b02/numpy-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:28ac63476ec7651484215ee7fa15a1f78b57c14621f01e392afe17b9a1390ce4", size = 12464674, upload-time = "2026-08-09T13:45:20.734Z" }, + { url = "https://files.pythonhosted.org/packages/14/52/032b97e00461ab0809bbe4c588b035620e5a14b8cdee47ecddefc7b17d33/numpy-2.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:27650bb0e7140fa3d37b9923b4803645e0b125d190f326eecfd3f4dad8e8ade1", size = 10397131, upload-time = "2026-08-09T13:45:23.73Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/6b24738a0ef4557d189b150046cd07823c50e4273e8aebd651222e24306f/numpy-2.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8e4cb9a754c8a0c62eaa88273a5fba3391f4a610d1dee893c0755da31c083f15", size = 16886595, upload-time = "2026-08-09T13:45:27.323Z" }, + { url = "https://files.pythonhosted.org/packages/65/60/f2d208d366f263f39c6e69ed309290717aab41078b6d04c9be2a84fa2a07/numpy-2.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:52c808f96484f5571a5cc863775ce50247c17dfb3b0361f8ed6b4b0456f80080", size = 11896845, upload-time = "2026-08-09T13:45:31.638Z" }, + { url = "https://files.pythonhosted.org/packages/3c/79/81e0bf24f4d020a2b1d5cd297a9f60c3f24eeb116f9bba5870443f7b6a4a/numpy-2.5.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:29d81e97f668489cba8ebfd796b9bdd453525d35dd9e162e2daec94bf3fc7740", size = 5343880, upload-time = "2026-08-09T13:45:34.373Z" }, + { url = "https://files.pythonhosted.org/packages/ba/cc/e3141cf06d1a8a2c7e107543fe1269c1d1af760d4d683c0794a4ee1127c2/numpy-2.5.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afb3f0632d6b2e3ba04dbce8d1e48d321b369138b73830b5ca371a0e8d479d56", size = 6682264, upload-time = "2026-08-09T13:45:36.7Z" }, + { url = "https://files.pythonhosted.org/packages/29/f1/2a64a307d92c5d98f5255a4014eb43bb6103ee477087b61ecae44a3aa9b9/numpy-2.5.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0aadf13b60048d501e05fa699efaf7734e2494f3498a4c2a5521d822640324f3", size = 15609566, upload-time = "2026-08-09T13:45:39.518Z" }, + { url = "https://files.pythonhosted.org/packages/7b/44/59a1eb68e773c4098d107ef34a0dbdeca501d72ffcfbff9a7707343921ce/numpy-2.5.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29b86ff8a6cc556b47ec6b64b194815cc80e6bf5eedcc6cddfd65318cb0b4eee", size = 16709995, upload-time = "2026-08-09T13:45:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/8a/4c/3e54d4ddbc359a1295f8b633e8106bcd4d7d4a206e82df051bdfb3058755/numpy-2.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6950c4b7dd562453090548ba7f5da7e59f57f85663f15d5dcc60e249192f7e59", size = 16972511, upload-time = "2026-08-09T13:45:47.094Z" }, + { url = "https://files.pythonhosted.org/packages/f2/9f/02e371638ebf19b66d46231e4be52999e87f32d1961b113bc45656608b22/numpy-2.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9727f472d2f3888053b8a75ab0cb94745a9de224bb5846dbadc0092101bc71d", size = 18465609, upload-time = "2026-08-09T13:45:50.808Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ae/ad6645abc7a3510fe48e8ea1ab4598166f500057ef4ebf38bfad4f1577de/numpy-2.5.2-cp313-cp313-win32.whl", hash = "sha256:4f9744f9fbdcea0bc552e8f19e1f141f811a3f9bc2be2cc6e86d982cab23e3f4", size = 6070204, upload-time = "2026-08-09T13:45:54.111Z" }, + { url = "https://files.pythonhosted.org/packages/15/20/f3489f86d81ea460b2bcdceaed094142ca6579f6be0ec527b781d39afe68/numpy-2.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:85aaccb24182c25df891ad0ec333585967e115269d5f1b17f2c9ae005bc96657", size = 12460532, upload-time = "2026-08-09T13:45:57.167Z" }, + { url = "https://files.pythonhosted.org/packages/d5/21/35b31dde1b283b79de828b80f876afd8c94e28fe1e9c375f89e261cc4c0d/numpy-2.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:bd68ece1553d2023c09a4226d9e41c586ad2d20594d1a456186c33513d2cb3f2", size = 10396725, upload-time = "2026-08-09T13:46:00.478Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f8/c3b222bf075b50afd8e949a07a15c4b312a4a84bd8102a332bcd953cbbb4/numpy-2.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d787cf769c3baeb5f6235e778edb52c08dfa923789b5958f28e6450f96107cb1", size = 16885180, upload-time = "2026-08-09T13:46:03.939Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/2c1d4b1987795a92b5bbf7c24fe249ab96aa2573ab0d7604802c189d7b86/numpy-2.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:24b9dc2e3d84aa58523798805194e23e736f3f6ce2d1a5b92583ae734e6dbda8", size = 11907878, upload-time = "2026-08-09T13:46:07.045Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ee/d08226fc858044355983a6e5b94f08ff6f3969e0a2b160a4a89f0ddb3445/numpy-2.5.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:9e9413326d726c2545bfa65d2c0876871e8d8386e77f992c1d426e180bbd4323", size = 5354922, upload-time = "2026-08-09T13:46:10.04Z" }, + { url = "https://files.pythonhosted.org/packages/94/f0/6d3d933056440ebbc5e6bad92065fc6c26a48a84a36b1208580e94eea76c/numpy-2.5.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:60e902ac295855348a5ca2ea4c89108989a9f5fddfad3dfc0a8f36b10358567e", size = 6679168, upload-time = "2026-08-09T13:46:12.275Z" }, + { url = "https://files.pythonhosted.org/packages/c4/3b/ecd49dd90033cceb2704d88ca905d4d7d89b0e8c739608754ffd325fa820/numpy-2.5.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50e500dc868e9313530ce12ba470fe50ff3afe3d62993ed6eff652dacd555b65", size = 15624501, upload-time = "2026-08-09T13:46:15.322Z" }, + { url = "https://files.pythonhosted.org/packages/c7/99/461bd36dbdfac6c1c53efa370bd55a83227542d0d118f1677dbf1a3dacd5/numpy-2.5.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318b9a4c845dbea06708a29c84ee429cc3065048db34cdb799047643492050ee", size = 16713701, upload-time = "2026-08-09T13:46:18.949Z" }, + { url = "https://files.pythonhosted.org/packages/f9/9c/2b251df9e8a5d647b62b0cbc1b90a91850c1cf4859ecb532fd0b4eacff6c/numpy-2.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:34c319e2963be042673fb46570501b2f06c41924e17e3563d58646b4380dfb68", size = 16986065, upload-time = "2026-08-09T13:46:23.006Z" }, + { url = "https://files.pythonhosted.org/packages/8f/25/20de43f53ff1390534a124475055a19f01fe10c920a0fd11b8e18d6d6052/numpy-2.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f06571a052127dc1b4e8b83029b4d1b20daa2b64a31cdd181fc6bc774e9000eb", size = 18470031, upload-time = "2026-08-09T13:46:27.102Z" }, + { url = "https://files.pythonhosted.org/packages/56/5e/0c577ca308d6da5eb79b546ba10bbe5b60148192194e2da060913b1de4f1/numpy-2.5.2-cp314-cp314-win32.whl", hash = "sha256:2cc779226e476d1e1f08c74068c419e60f41a9e0e069c92f6671d31d5c985e98", size = 6121028, upload-time = "2026-08-09T13:46:30.046Z" }, + { url = "https://files.pythonhosted.org/packages/15/5c/7bcbd5b11f94199073320410cddcbb80cee62415bfeb540874b265c2d922/numpy-2.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:7587f53dfbd5edc0f7b87c6217b4c6d2d1f2ef9c3da70bc1315e7db5f8d7ec9d", size = 12597627, upload-time = "2026-08-09T13:46:32.886Z" }, + { url = "https://files.pythonhosted.org/packages/87/bc/4d0b06fba0da90ccc75af62823cb9dcedb6c9ea0cffa058cb2c9ee773a77/numpy-2.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:3e4c367352d3747784248a227fbec218e193b56f7e6692e3b64fc805478ecfdf", size = 10680414, upload-time = "2026-08-09T13:46:36.036Z" }, + { url = "https://files.pythonhosted.org/packages/cd/17/f429aac9dc08833a0d0f188eba38c532a751b1a1f2ca6018a37b455cb321/numpy-2.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b879fb674276e331513fb136b78dbc6bd3c848309e0d841cfd63be3896c4cfc1", size = 12026967, upload-time = "2026-08-09T13:46:39.084Z" }, + { url = "https://files.pythonhosted.org/packages/ca/9f/d0849de96a2a4ceaa16662f18ee13eaa9c0aa418269fdc8c4857c56b11da/numpy-2.5.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:fd0d703772bba096843785bd38371e31bb4a0c1151497ad5739d182114a73f7f", size = 5473874, upload-time = "2026-08-09T13:46:42.075Z" }, + { url = "https://files.pythonhosted.org/packages/89/3c/8df216d4a4a5422a3de045301cf7df8ea47286d76f5cb7160b0128ac26b7/numpy-2.5.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:3a2f061cebd9e3d23bdcfaaded5e2293a4c6a5b60fa42df85d410a725ce621bf", size = 6789276, upload-time = "2026-08-09T13:46:44.387Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3a/20d7e9891c4ddfadd6ff8d95bf4b29f353d8e1770553de2099880551dfb9/numpy-2.5.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6df895598c0edcb41030126c89e0f353b07d93238116143b7405e937359736c4", size = 15659154, upload-time = "2026-08-09T13:46:47.538Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d6/f3aa3d2688bf501b858835c6bd087ae9b51a56ae6fca8e2b0990abd177af/numpy-2.5.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ab3d4a901f844ea836c3e80bf463c6a27d7f3c14e8e292fcf28d348b25b9bce", size = 16748909, upload-time = "2026-08-09T13:46:51.442Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8f/1c5cae8d2baf86ab802ae97a00be55bc7e21ebc11b12bbc33376c5f05342/numpy-2.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:cebc2d6dbb605a7703d59751dea4bd6b0ab127a5a4338a6f432df1936fef8b26", size = 17027685, upload-time = "2026-08-09T13:46:55.095Z" }, + { url = "https://files.pythonhosted.org/packages/5c/27/71d3467404aedc1c24ce79610f91b52b0b0f466c43a701aa56fc75c145ab/numpy-2.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:eaca7ff36f0f52e2111ec71f169d8fd3e889e7ddc0d2592e0d703fd8d3ce8fac", size = 18501181, upload-time = "2026-08-09T13:46:59.09Z" }, + { url = "https://files.pythonhosted.org/packages/14/2f/42921d27c40aea7e077f4a423ae509fd9220b028cd787bafefd8ab2b3a5f/numpy-2.5.2-cp314-cp314t-win32.whl", hash = "sha256:ddf47472af2e4280d79bac82304f5e80150211f1b9e614b760061d5fdfbb6eba", size = 6271085, upload-time = "2026-08-09T13:47:01.903Z" }, + { url = "https://files.pythonhosted.org/packages/75/e6/bad5f5d56de9b1971bac959963dda276d35c40f1854475005434bbe08692/numpy-2.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:44ef9675d908e65f9953063837c3277730f3f4437615a4cdab67b366cabaf884", size = 12787971, upload-time = "2026-08-09T13:47:04.963Z" }, + { url = "https://files.pythonhosted.org/packages/df/05/f608795cb34391acd67e38d94a3c36abd8d8576293a3a80727d7595c372c/numpy-2.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:eaa088384c46f519dacb93b7ec483a6d6b19a4a2085ae4f25ab9b1c43d387d1e", size = 10750306, upload-time = "2026-08-09T13:47:07.976Z" }, + { url = "https://files.pythonhosted.org/packages/33/c6/28de0191c5f82b7d42a0a51390ba98587048aa93a39fafb05bdbe6e8d00c/numpy-2.5.2-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:078f9b027b478c9379b9677babbf0f8b8f1ecfada27636d7b9a93990c638739f", size = 16885274, upload-time = "2026-08-09T13:47:11.439Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d1/973ca116000d244897e468ea1aff30b589e5022e3c8744b71706fe33bd57/numpy-2.5.2-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:50a68f4bacd8a2b33d8da3d2269d0d78500f86ea582e4786dc10f5ef2c2c6842", size = 11907846, upload-time = "2026-08-09T13:47:15.128Z" }, + { url = "https://files.pythonhosted.org/packages/78/d9/8c4b3937ef204cb2fd88d389ccd0f265a2ffb11f35a01d2064cf46714bd6/numpy-2.5.2-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:e79aba74ffaf5f78a050d777c184cddf8fdffabab38acf5f3ef1fecbc17895d6", size = 5354892, upload-time = "2026-08-09T13:47:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/b6ee65ea2999fdb7023935e108e6fb776ee4082aa15f159acfa857e578c8/numpy-2.5.2-cp315-cp315-macosx_14_0_x86_64.whl", hash = "sha256:9a0731745a72a184490a582fb4af2533512bd071ace67785b5fdffc0ae58dce8", size = 6679309, upload-time = "2026-08-09T13:47:20.456Z" }, + { url = "https://files.pythonhosted.org/packages/43/f3/acb18d8b137a393c8e7803a8c994c9e64bde3930692a69d826993113a159/numpy-2.5.2-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ec954036759bcee3aa484f8603bd9c14f3e776293b85578b8734c2d72777c69", size = 15625850, upload-time = "2026-08-09T13:47:24.365Z" }, + { url = "https://files.pythonhosted.org/packages/a9/bf/a8e9bb0db815a0e265b5744ebedd3af0bd5faad8604e5b50a1cd012f3c91/numpy-2.5.2-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc649493697006bc90614a5f0bbc8cb3cb1866715c474e473694968d7e6b99ab", size = 16713664, upload-time = "2026-08-09T13:47:27.965Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c3/6e913736b3dd6582344af32418b5fb9dab34282e8a8174ae1d54ceb0fc13/numpy-2.5.2-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:cf7de32f486e4ac9e2d93b810f9e9ac72a728dd46a32a0bb403222f27f653514", size = 16986749, upload-time = "2026-08-09T13:47:31.541Z" }, + { url = "https://files.pythonhosted.org/packages/80/09/7d3b23eff5c7428ef6c01e6f7052bb60d504c4d33e317b36b8959c24ad97/numpy-2.5.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:2ffa7bacab3e2ee1b19ed31766bb60bb380b68c23f051e199c5cc598afd68710", size = 18470495, upload-time = "2026-08-09T13:47:35.364Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a4/68a321d825374f6eb677ffe8ef8c6b9a328304e6fd2e39d9530822776607/numpy-2.5.2-cp315-cp315-win32.whl", hash = "sha256:6b588cc8f902d6bff201c19fd00c43ab8545671e3554d014e12e14139e5e8617", size = 6120696, upload-time = "2026-08-09T13:47:38.561Z" }, + { url = "https://files.pythonhosted.org/packages/c8/23/deafbb1700f79fae9cd1e91220f133d124cc267de1b584da3fbf6db2f6cd/numpy-2.5.2-cp315-cp315-win_amd64.whl", hash = "sha256:07d4e89f3a9ab0a9ba24264ccdb642b3dd951b2281e8883a5481a4aa79cc31a7", size = 12597324, upload-time = "2026-08-09T13:47:41.401Z" }, + { url = "https://files.pythonhosted.org/packages/33/cd/3272ba105e3bbbdaeb11357eda31e7a6825ffe159e8171665660299a948f/numpy-2.5.2-cp315-cp315-win_arm64.whl", hash = "sha256:a610dc7e3c52edd39c2bc2375ff9c3fd59cb3ad00e4472d36f83bc1457145788", size = 10680466, upload-time = "2026-08-09T13:47:44.873Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0e/58370637b1bb70a5c9ce2b43f4b521ccb224e36ccb76a6596b17ae4b447c/numpy-2.5.2-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:40f4d451aed46a8046a1aae41c4e55fb3612273df9c502480135e1501576a34b", size = 16993947, upload-time = "2026-08-09T13:47:48.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/93/2abcb807712b289d6d60fe4cf30532f98974a8396d885650f3ba5a13026e/numpy-2.5.2-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:c081cbe16ba1ab53078e5ff29013621e33c509eedab055775d956427712c236e", size = 12025331, upload-time = "2026-08-09T13:47:52.646Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3a/2898e003a5fbaf87e76c039b4ee1f5eb390471b4ffe74887c1f34c4e791e/numpy-2.5.2-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:0090ccdd57ec2703e9b49d0bf554767370581c1dd0a6b2bb2b2d9def317d042a", size = 5472336, upload-time = "2026-08-09T13:47:55.403Z" }, + { url = "https://files.pythonhosted.org/packages/61/a5/23f69d07c544597b29758b31b55c27dc9d541012a2c1496189fef702aec2/numpy-2.5.2-cp315-cp315t-macosx_14_0_x86_64.whl", hash = "sha256:6a9bb119fb8dd21ba30b3f0e555b7e2b081bd9883af21ec9c1c633d161cda3a8", size = 6788387, upload-time = "2026-08-09T13:47:58.192Z" }, + { url = "https://files.pythonhosted.org/packages/15/ea/c0dbdbcf22f43782510a3e492dd3da73c6112b69cac8929d16d127536fc4/numpy-2.5.2-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a839318485284a6fb31be4f8f2c91c8f2cb22f4543c4a8903f12b0671ffe07cc", size = 15667096, upload-time = "2026-08-09T13:48:01.562Z" }, + { url = "https://files.pythonhosted.org/packages/fc/5e/29c73c31748cdb0f7566642125ba17fd5b56780cddf891b085dab27e4466/numpy-2.5.2-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba0a474801b8dc67b66bf465548abc90e82b44d2611b5770f33008dcabffe8ec", size = 16751730, upload-time = "2026-08-09T13:48:05.706Z" }, + { url = "https://files.pythonhosted.org/packages/47/95/02501e8454796bb58dadf7a99d3181e0b464bf264e1003039572f9779fac/numpy-2.5.2-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:0a4035ae1129ff8777f08bfbd44f1e5d8e9c049ce0c2dd78fc0d92c13e7251c0", size = 17038686, upload-time = "2026-08-09T13:48:09.627Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b5/53a681d91b5c82687067d8ea5035e02d917b5509d6f334cb06484a954714/numpy-2.5.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:77843ca236b777e67f8d6b3660ea116e499612703a0ecd7093f316201eb9d8e2", size = 18507727, upload-time = "2026-08-09T13:48:13.744Z" }, + { url = "https://files.pythonhosted.org/packages/42/06/6e11443f7b64ee376c860506091103bf68f92d2cab9e8d96d4501babf07c/numpy-2.5.2-cp315-cp315t-win32.whl", hash = "sha256:7354826bc6f8f69402e9b7fe28d15fcd34feebd74f856f111585c5b0c9fb0251", size = 6269775, upload-time = "2026-08-09T13:48:17.543Z" }, + { url = "https://files.pythonhosted.org/packages/f1/18/195d6b86cd72dbbc501edfa778005fa6b87afd34c153e46028cd3a0938f4/numpy-2.5.2-cp315-cp315t-win_amd64.whl", hash = "sha256:e5651f3f87add730ee6608d915009e19c911fba0cb000c7e3ea994b7d768eb12", size = 12782559, upload-time = "2026-08-09T13:48:21.023Z" }, + { url = "https://files.pythonhosted.org/packages/b4/07/458c344f0f0c178f4481dad5cca790626ffe4c34eabf9467069d06ee4999/numpy-2.5.2-cp315-cp315t-win_arm64.whl", hash = "sha256:5f8e00be2ec6f45f4e8a41a527f68d44a7d96fee92a650e4d8b1326f77f61e6e", size = 10748103, upload-time = "2026-08-09T13:48:24.21Z" }, +] + +[[package]] +name = "nvidia-cublas-cu12" +version = "12.9.2.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cuda-nvrtc-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/a2/c96163a0fff1839c0c9548bbdeae7b853b867009e33b9b9264adc238b1cf/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:5572131a59c3eebeeb1c4c8144f772d49372c20124916e072a0e3fc30df421d5", size = 575012079, upload-time = "2026-04-08T18:51:47.303Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c0/0a517bfe63ccd3b92eb254d264e28fca3c7cab75d07daea315250fb1bf73/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:e4f53a8ca8c5d6e8c492d0d0a3d565ecb59a751b19cfdaa4f6da0ab2104c1702", size = 581240110, upload-time = "2026-04-08T18:52:31.532Z" }, + { url = "https://files.pythonhosted.org/packages/20/e2/fc9a0e985249d873150276d5afb02e39a66817fedbf1a385724393e505ed/nvidia_cublas_cu12-12.9.2.10-py3-none-win_amd64.whl", hash = "sha256:623f43027d40d44ceadf0043f002bd25cf353e8f13ce90b9a87057019f560661", size = 553162896, upload-time = "2026-04-08T18:53:10.035Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.9.86" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:210cf05005a447e29214e9ce50851e83fc5f4358df8b453155d5e1918094dcb4", size = 89568129, upload-time = "2025-06-05T20:02:41.973Z" }, + { url = "https://files.pythonhosted.org/packages/64/eb/c2295044b8f3b3b08860e2f6a912b702fc92568a167259df5dddb78f325e/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:096d4de6bda726415dfaf3198d4f5c522b8e70139c97feef5cd2ca6d4cd9cead", size = 44528905, upload-time = "2025-06-05T20:02:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/52/de/823919be3b9d0ccbf1f784035423c5f18f4267fb0123558d58b813c6ec86/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-win_amd64.whl", hash = "sha256:72972ebdcf504d69462d3bcd67e7b81edd25d0fb85a2c46d3ea3517666636349", size = 76408187, upload-time = "2025-06-05T20:12:27.819Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.24.0.43" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/f1/cd42563325fa827f54ff30da05686c747652bdbd4cb5654cea54d7d0ad4f/nvidia_cudnn_cu12-9.24.0.43-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:a42996943f0cd78ddfd61c8bf59361672a19b63e0491aa22a53d6fe63a3f854a", size = 856490582, upload-time = "2026-07-02T16:21:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/10/13/b8887c869cf2471339a24b60d3c28e761facbb534935f572b61423371abb/nvidia_cudnn_cu12-9.24.0.43-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:f424192dd85e7d29f44be18df2dae4c80d32c67a29c0d42f5c283c40cfdf871c", size = 799083985, upload-time = "2026-07-02T16:25:37.467Z" }, + { url = "https://files.pythonhosted.org/packages/29/28/2c9a2a97a8b3fedcf74a14f38fd5edfae12274380a829fdc6b16ce29be4c/nvidia_cudnn_cu12-9.24.0.43-py3-none-win_amd64.whl", hash = "sha256:cbd41a0ab084422c936dc9fb2fc89be5ea9a85bc421c6f23d0243bdfc945fbef", size = 737103728, upload-time = "2026-07-02T16:30:10.901Z" }, +] + +[[package]] +name = "onnxruntime" +version = "1.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flatbuffers" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "packaging" }, + { name = "protobuf" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/4d/5014667e2a3a77d6e1b74cc3d88948d06163b8e0a33a84c85073322b5dec/onnxruntime-1.28.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f5c5daabd28aad610f83fdcf32acec8fb57e6adc6c6a39fe2a3c755db957b410", size = 19130506, upload-time = "2026-07-25T01:22:34.489Z" }, + { url = "https://files.pythonhosted.org/packages/ea/97/b7ce1bc8bb6048b5fe9129f55d6506dc19499068ef2e0a0af1ae3c8aa4e7/onnxruntime-1.28.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8d66f9ceb29909c70839e4e4fb3435c7b490050d8f162bd5f3aba4ca01ee517f", size = 17039880, upload-time = "2026-07-25T01:21:37.538Z" }, + { url = "https://files.pythonhosted.org/packages/f3/17/4e5ecd8764f87573c495d834ce79e61ecca47f7a01d1e444a606e570edcb/onnxruntime-1.28.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a166b78ee04f3a37fa1ef82034b6a3ce96d9684e582d4d30b296de83e9998bb5", size = 19193162, upload-time = "2026-07-25T01:21:59.151Z" }, + { url = "https://files.pythonhosted.org/packages/9f/10/3d946d5d5f2cdcc3c8da36cae63190c516d16349edaffd944bda60ca4c3e/onnxruntime-1.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:0d650aeee29368414367b65529e90afe4bf1bab76254789063b8b2f7ea3013c8", size = 13752539, upload-time = "2026-07-25T01:22:24.524Z" }, + { url = "https://files.pythonhosted.org/packages/8f/74/1c440be7af1e026280b139caa1be5d11bd4dc368011ddbe8f5362b58e12f/onnxruntime-1.28.0-cp311-cp311-win_arm64.whl", hash = "sha256:0faf85fb447a663c9cdadc39bd6b19bdf7bedded6699e45731b9b36c46fd993d", size = 13449940, upload-time = "2026-07-25T01:22:14.97Z" }, + { url = "https://files.pythonhosted.org/packages/98/f8/dcbe7700dca82fa540035abd3c868fe5ad0f86af00b9a3db7c2e27d15c7d/onnxruntime-1.28.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:26ff0fdd06efb6c155bae95387a09db1a2be89c7a03e4d0bffd5a171cc2826da", size = 19141362, upload-time = "2026-07-25T01:22:36.965Z" }, + { url = "https://files.pythonhosted.org/packages/28/5b/1d77e62097fdbe07e2dc827f389b1c4c0c275f6fab0369a8f46d2461af27/onnxruntime-1.28.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e81a23df16e7acb9d51b06d30cc098e49315ef9180f97bc2221d167b4b04d9c", size = 17050628, upload-time = "2026-07-25T01:21:40.481Z" }, + { url = "https://files.pythonhosted.org/packages/95/df/5486ab03e9be288d5268867054c8b04bebcf95bfd12e801c05cc67703dab/onnxruntime-1.28.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a83bdb70d143cede762b677789bf2a7acca54b3fb82565601d5c30695aa933c", size = 19214257, upload-time = "2026-07-25T01:22:01.695Z" }, + { url = "https://files.pythonhosted.org/packages/3e/3b/986ca67c274932ba9ac5332fb10de56f643dfd433c74e33f8ae8f847cf24/onnxruntime-1.28.0-cp312-cp312-win_amd64.whl", hash = "sha256:c35064f9b3c43c81c5d5d282091401d0f1ff22796d93ccade4ea2ece5e137ab8", size = 13755036, upload-time = "2026-07-25T01:22:26.89Z" }, + { url = "https://files.pythonhosted.org/packages/1d/46/059dba81d46c6ba88e0c2d1c64321ac8098847d678423300a183d42ecbd6/onnxruntime-1.28.0-cp312-cp312-win_arm64.whl", hash = "sha256:e02feeb0165c5f13b4cc954738078d59b90128516ac12b671ee24a530242bf02", size = 13454462, upload-time = "2026-07-25T01:22:17.38Z" }, + { url = "https://files.pythonhosted.org/packages/9c/12/3807e2b17d9eb71d3cb78ed2ba76869b05c637c9b9d6112e636098b0c97a/onnxruntime-1.28.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:31410f544674f534c2f27348af52ef81682ca9c8719154bf4d48f0ef23823b1e", size = 19141759, upload-time = "2026-07-25T01:21:53.765Z" }, + { url = "https://files.pythonhosted.org/packages/c0/23/b46045c3bf67a9cf54c12f5df0f018a422c65fbb9d6072b10071bebfaae2/onnxruntime-1.28.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f649dd6f6452d12a8059888aa489fe519e062e18793dac72b9efa0f9fdb64135", size = 17049339, upload-time = "2026-07-25T01:21:43.005Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/8c5396e7894e77c5a7d1e026f3acb9dd39c4b5644e412e37a0055eaa3bc5/onnxruntime-1.28.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54fa221d669282bd8f582708ce4c96010a7e9fb0661f9006b37fe2fedafb73fe", size = 19214329, upload-time = "2026-07-25T01:22:04.133Z" }, + { url = "https://files.pythonhosted.org/packages/56/f1/51225c202edba4dfc94e1ea03f3d78f1aaf307da75fd792c0ce1946b2514/onnxruntime-1.28.0-cp313-cp313-win_amd64.whl", hash = "sha256:1a1a19175464665c9b8d50bc916f216cc0b569110045b7bbca8f9f290b186f58", size = 13755033, upload-time = "2026-07-25T01:22:29.302Z" }, + { url = "https://files.pythonhosted.org/packages/f4/db/f59f715edfdd96a051f32b5ef0e680a20a8755d4ecd75f63090e960e347a/onnxruntime-1.28.0-cp313-cp313-win_arm64.whl", hash = "sha256:cfab507abe09d6ffeb817eee07944d452fdc0b00fdcef34cab4db10a45e378c7", size = 13454175, upload-time = "2026-07-25T01:22:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/47/28/810314fa88647af9f4cdaf438a30ad1cfebebb53ded55499232d7a0094e6/onnxruntime-1.28.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac301f53b1930402fc46c368e268acfed02f3207272aaff05070d7e09f96f031", size = 17057307, upload-time = "2026-07-25T01:21:45.492Z" }, + { url = "https://files.pythonhosted.org/packages/3d/cc/9e9f193cc0f29f263a8f09ec08487aed6c96ee856d5fd77da32a425c1949/onnxruntime-1.28.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7f022a1103cae591c75fc4565589a515f2ddd14a6ac8e8a05812dfeda142e28", size = 19222954, upload-time = "2026-07-25T01:22:06.952Z" }, + { url = "https://files.pythonhosted.org/packages/4e/eb/952314c451d9463e5c9aed9978eec76cf32930d407d9ab8700dd0f4ea1ea/onnxruntime-1.28.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:8adff67a3f28257b37cfe945a7e952e4122666aa8c91a0380862e9fd4c2ed19f", size = 19143748, upload-time = "2026-07-25T01:21:56.297Z" }, + { url = "https://files.pythonhosted.org/packages/3f/e9/139180b4dd810329aaa42c238b4e6383c906202d98609ae29d66eb7c32b1/onnxruntime-1.28.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc2565e487b4896fb988d6383577d875d958e071fc5f6c3550bd5d02ae98264b", size = 17051950, upload-time = "2026-07-25T01:21:48.606Z" }, + { url = "https://files.pythonhosted.org/packages/03/88/9432428273356ad3c8aa01f52c1b3e7f53c4c0192748f41ad983872b436b/onnxruntime-1.28.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6afdc83f1317c136e92fc29f5ee9f058de59d87c0b22cee3fdbfbaa0ccc2098a", size = 19214924, upload-time = "2026-07-25T01:22:09.727Z" }, + { url = "https://files.pythonhosted.org/packages/bb/e2/6feb3a43517aaf2b1bf7e46897ba5eb81a29717f7d7901420614d5ee4653/onnxruntime-1.28.0-cp314-cp314-win_amd64.whl", hash = "sha256:f2a3b9e30ce880d4ca54999cb313569e36da4f62eefe25f87be18f43e9a3a4d5", size = 14093738, upload-time = "2026-07-25T01:22:31.629Z" }, + { url = "https://files.pythonhosted.org/packages/fc/8f/83974a1e201dc2e58e5e7111bcaeb1ca2413e9c41f505d26419ee9e3dddf/onnxruntime-1.28.0-cp314-cp314-win_arm64.whl", hash = "sha256:07fb3cbe990d6bf0ab3c22bfbbfb0e314151266046ea6edb4a07f556b4258c5f", size = 13821117, upload-time = "2026-07-25T01:22:22.387Z" }, + { url = "https://files.pythonhosted.org/packages/0d/83/00e606bc25c756d76a267370c39b7516ad52f9cf134d7ff2bff8b6108bc4/onnxruntime-1.28.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e562d6e36a749f6764481c0ddb0f2af3d0b5a3c164291361d08803c557f369af", size = 17055518, upload-time = "2026-07-25T01:21:51.08Z" }, + { url = "https://files.pythonhosted.org/packages/94/a9/68707e1ce345cbdbcd4df65932ebc82a673e917d63eda0007ebcff948691/onnxruntime-1.28.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f6e92367ddce1e4d33cf295024f40192be6c6171a09208f515ba169ced06c8e", size = 19222976, upload-time = "2026-07-25T01:22:12.474Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "protobuf" +version = "7.35.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/01/9ef0afd7999eb9badb3a768b4aedd78c86d4c65cfaf1958ab276199e76b4/protobuf-7.35.1.tar.gz", hash = "sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a", size = 458717, upload-time = "2026-06-11T21:55:40.257Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/03/8aeeb7458d22546bf64b5250ca1daeb5ff757d900e8e4a7476c6f0db843e/protobuf-7.35.1-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6", size = 433226, upload-time = "2026-06-11T21:55:31.719Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/dfb89eb0e652a1ff073c39a59fb5e3a83cfe9b57a2c83fa6d78270101767/protobuf-7.35.1-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799", size = 328847, upload-time = "2026-06-11T21:55:34.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/58/dc12f2cd484951524af6e3382c785869b9b3fb5e52ee95ae23add53ee8f9/protobuf-7.35.1-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4", size = 344030, upload-time = "2026-06-11T21:55:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/e4/be/5b3cfe508bfab6761414ff944e3366eb13be4fd71efcd69450f89ba39f43/protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4", size = 327130, upload-time = "2026-06-11T21:55:35.921Z" }, + { url = "https://files.pythonhosted.org/packages/d8/bc/6d6c7ba8709c85f8f2c390b2b118d6fb08a783676a572271851bf45a7d22/protobuf-7.35.1-cp310-abi3-win32.whl", hash = "sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30", size = 428945, upload-time = "2026-06-11T21:55:37.034Z" }, + { url = "https://files.pythonhosted.org/packages/0a/19/8d0cb6f20a1ef7b18f1c8986ad5783f22f84cce39c6ce9a6e645ea55192e/protobuf-7.35.1-cp310-abi3-win_amd64.whl", hash = "sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87", size = 439996, upload-time = "2026-06-11T21:55:38.123Z" }, + { url = "https://files.pythonhosted.org/packages/19/c7/5f7c636ec43e0c545e28d1f1db71990108306f7bdcb89f069ba97e428e7f/protobuf-7.35.1-py3-none-any.whl", hash = "sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9", size = 171659, upload-time = "2026-06-11T21:55:39.155Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "pytest-cov" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "setuptools" +version = "84.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/44/f5da03a8ef95d369145c5bb53050e7877c9f3d312e128605fd9504829143/setuptools-84.0.0.tar.gz", hash = "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73", size = 1168449, upload-time = "2026-08-08T18:27:58.365Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", hash = "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", size = 818216, upload-time = "2026-08-08T18:27:56.719Z" }, +] + +[[package]] +name = "starlette" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/b4/205b0d5241d934e8add0c38aa924c4f9fb7330834ff11e5444db964ec3f9/starlette-1.6.0.tar.gz", hash = "sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b", size = 2716969, upload-time = "2026-08-08T18:27:57.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl", hash = "sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c", size = 75969, upload-time = "2026-08-08T18:27:56.196Z" }, +] + +[[package]] +name = "tokenizers" +version = "0.23.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/60/21f715d9faba5f5407ff759472ade058ec4a507ad62bcea47cb847239a73/tokenizers-0.23.1.tar.gz", hash = "sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa", size = 365748, upload-time = "2026-04-27T14:43:25.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/39/b87a87d5bb9470610b80a2d31df42fcffeaf35118b8b97952b2aff598cc7/tokenizers-0.23.1-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224", size = 3146732, upload-time = "2026-04-27T14:43:15.427Z" }, + { url = "https://files.pythonhosted.org/packages/e2/6a/068ed9f6e444c9d7e9d55ce134181325700f3d7f30410721bdc8f848d727/tokenizers-0.23.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e", size = 3054954, upload-time = "2026-04-27T14:43:13.745Z" }, + { url = "https://files.pythonhosted.org/packages/6c/36/e006edf031154cba92b8416057d92c3abe3635e4c4b0aa0b5b9bb39dde70/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3", size = 3374081, upload-time = "2026-04-27T14:43:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ef/7735d226f9c7f874a6bee5e3f27fb25ecabdf207d37b8cf45286d0795893/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6", size = 3247641, upload-time = "2026-04-27T14:43:03.856Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d9/24827036f6e21297bfffda0768e58eb6096a4f411e932964a01707857931/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959", size = 3585624, upload-time = "2026-04-27T14:43:10.664Z" }, + { url = "https://files.pythonhosted.org/packages/0c/9a/22f3582b3a4f49358293a5206e25317621ee4526bfe9cdaa0f07a12e770e/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51", size = 3844062, upload-time = "2026-04-27T14:43:05.643Z" }, + { url = "https://files.pythonhosted.org/packages/7e/65/b8f8814eef95800f20721384136d9a1d22241d50b2874357cb70542c392f/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a", size = 3460098, upload-time = "2026-04-27T14:43:08.854Z" }, + { url = "https://files.pythonhosted.org/packages/0d/d5/1353e5f677ec27c2494fb6a6725e82d56c985f53e90ec511369e7e4f02c6/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4", size = 3346235, upload-time = "2026-04-27T14:43:12.377Z" }, + { url = "https://files.pythonhosted.org/packages/71/89/39b6b8fc073fb6d413d0147aa333dc7eff7be65639ac9d19930a0b21bf33/tokenizers-0.23.1-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a", size = 3426398, upload-time = "2026-04-27T14:43:07.264Z" }, + { url = "https://files.pythonhosted.org/packages/0f/80/127c854da64827e5b79264ce524993a90dddcb320e5cd42412c5c02f9e8a/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e", size = 9823279, upload-time = "2026-04-27T14:43:17.222Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ba/44c2502feb1a058f096ddfb4e0996ef3225a01a388e1a9b094e91689fe93/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288", size = 9644986, upload-time = "2026-04-27T14:43:19.45Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c1/464019a9fb059870bfe4eebb4ba12208f3042035e258bf5e782906bd3847/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4", size = 9976181, upload-time = "2026-04-27T14:43:21.463Z" }, + { url = "https://files.pythonhosted.org/packages/79/94/3ac1432bda31626071e9b6a12709b97ae05131c804b94c8f3ac622c5da32/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96", size = 10113853, upload-time = "2026-04-27T14:43:23.617Z" }, + { url = "https://files.pythonhosted.org/packages/6a/dd/631b21433c771b1382535326f0eca80b9c9cee2e64961dd993bc9ac4669e/tokenizers-0.23.1-cp310-abi3-win32.whl", hash = "sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948", size = 2536263, upload-time = "2026-04-27T14:43:29.888Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/2553f72aaf65a2797d4229e37fa7fbe38ffbf3e32912d31bdd78b3323e59/tokenizers-0.23.1-cp310-abi3-win_amd64.whl", hash = "sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7", size = 2798223, upload-time = "2026-04-27T14:43:28.51Z" }, + { url = "https://files.pythonhosted.org/packages/cd/2b/2be299bab55fc595e3d38567edb1a87f86e594842968fa9515a07bdcf422/tokenizers-0.23.1-cp310-abi3-win_arm64.whl", hash = "sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9", size = 2664127, upload-time = "2026-04-27T14:43:26.949Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tqdm" +version = "4.70.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.52.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/28/64ca011edf31c715b4fad359c587ea52391aaffa125065695590241ff617/uvicorn-0.52.3.tar.gz", hash = "sha256:18857b9e6579300be55c91c0a1cfd37d9a2cf0cabea33b88275f199eb73b8b58", size = 100621, upload-time = "2026-08-13T16:50:02.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/2b/ebd108734a8204c6b4b93c681c9a38c5273b3ccd5d129fee4ffc1d97772c/uvicorn-0.52.3-py3-none-any.whl", hash = "sha256:116af2710dbf47c80f463cd20ee4884b6662f4c9f227d797ddc7279d2fcc2c7c", size = 79859, upload-time = "2026-08-13T16:50:01.323Z" }, +] + +[[package]] +name = "vrsub" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "fastapi" }, + { name = "faster-whisper" }, + { name = "imageio-ffmpeg" }, + { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cudnn-cu12" }, + { name = "python-dotenv" }, + { name = "python-multipart" }, + { name = "uvicorn" }, +] + +[package.dev-dependencies] +dev = [ + { name = "httpx" }, + { name = "pytest" }, + { name = "pytest-cov" }, +] + +[package.metadata] +requires-dist = [ + { name = "fastapi" }, + { name = "faster-whisper", specifier = ">=1.2.1" }, + { name = "imageio-ffmpeg", specifier = ">=0.6" }, + { name = "nvidia-cublas-cu12", specifier = ">=12.9.2.10" }, + { name = "nvidia-cudnn-cu12", specifier = ">=9.24.0.43" }, + { name = "python-dotenv", specifier = ">=1.2.2" }, + { name = "python-multipart" }, + { name = "uvicorn" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "httpx" }, + { name = "pytest" }, + { name = "pytest-cov" }, +] diff --git a/web/admin.html b/web/admin.html new file mode 100755 index 0000000..b8ea96b --- /dev/null +++ b/web/admin.html @@ -0,0 +1,46 @@ + + + + + + + VRSub 管理后台 + + + +

+ VRSub + +
+ +
+

管理后台

+ + +
+

已发布工作流

+
+ + + + + + + + + + + +
ID名称版本状态操作
+
+
+
+ + + + diff --git a/web/assets/app.js b/web/assets/app.js new file mode 100644 index 0000000..fbdb2ca --- /dev/null +++ b/web/assets/app.js @@ -0,0 +1,647 @@ +// VRSub 静态前端公共脚本:所有页面共用的 API 封装、渲染函数与事件绑定。 +// 首页只负责发起任务;任务管理页展示全部任务的进度、产物下载与失败重试。 + +// 演示"视频字幕生成"工作流的 DAG 定义,预填在工作流编排页。 +const DEMO_WORKFLOW = { + name: "视频字幕生成", + version: 1, + nodes: [ + { + id: "extract", + node_type: "ffmpeg-extract", + params: { sample_rate: 16000, channels: 1 }, + inputs: { video_uri: "input.video_uri" }, + }, + { + id: "asr", + node_type: "faster-whisper", + params: { language: "ja" }, + inputs: { audio_uri: "extract.audio_uri" }, + }, + { + id: "translate", + node_type: "llm-translate", + params: { target_language: "zh-CN" }, + inputs: { srt_uri: "asr.srt_uri" }, + }, + { + id: "ass", + node_type: "srt-to-dual-eye-ass", + params: { resolution: "3840x1920" }, + inputs: { cn_srt_uri: "translate.cn_srt_uri" }, + }, + ], + edges: [ + { from: "extract", to: "asr" }, + { from: "asr", to: "translate" }, + { from: "translate", to: "ass" }, + ], + entry_inputs: { video_uri: "file" }, + final_outputs: { + cn_srt: "translate.cn_srt_uri", + ass: "ass.ass_uri", + }, +}; + +// 统一封装 fetch:自动携带 JSON 头、解析响应并在失败时抛出可读错误。 +async function api(path, options = {}) { + const response = await fetch(path, { + headers: { "Content-Type": "application/json", ...(options.headers || {}) }, + ...options, + }); + const data = await response.json().catch(() => null); + if (!response.ok) { + // FastAPI 的校验错误 detail 可能是数组,统一序列化为字符串展示。 + const detail = data && data.detail ? JSON.stringify(data.detail) : response.statusText; + throw new Error(`${response.status} ${detail}`); + } + return data; +} + +// 转义用户可控文本,防止 XSS 注入到表格或状态 HTML 中。 +function escapeHtml(value) { + return String(value) + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll('"', """) + .replaceAll("'", "'"); +} + +// 根据状态生成带语义颜色的徽章 HTML。 +function badge(status) { + // 统一转小写比较,兼容后端返回的不同大小写。 + const value = String(status).toLowerCase(); + const className = + value === "completed" || value === "ok" + ? "ok" + : value === "error" || value === "failed" + ? "error" + : "warn"; + return `${escapeHtml(status)}`; +} + +// 把 ISO 时间格式化为本地时间;非法值原样返回。 +function formatTime(value) { + if (!value) return ""; + const date = new Date(value); + return Number.isNaN(date.getTime()) ? value : date.toLocaleString(); +} + +// 计算距给定时间的流逝时长,用于任务页展示已运行时间。 +function formatElapsed(value) { + if (!value) return ""; + const seconds = Math.floor((Date.now() - new Date(value).getTime()) / 1000); + if (Number.isNaN(seconds) || seconds < 0) return ""; + if (seconds < 60) return `${seconds} 秒`; + return `${Math.floor(seconds / 60)} 分钟`; +} + +// 健康检查失败时在页面顶部展示后端不可用提示。 +async function loadHealth() { + try { + await api("/health"); + } catch (error) { + const banner = document.createElement("div"); + banner.className = "result"; + banner.textContent = `后端不可用:${error.message}`; + document.body.prepend(banner); + } +} + +// 加载工作流列表并渲染发布状态与操作按钮。 +async function loadWorkflows() { + const workflows = await api("/api/admin/workflows"); + const tbody = document.getElementById("workflowList"); + if (!tbody) return; + tbody.innerHTML = workflows.length + ? workflows + .map( + (workflow) => ` + + ${escapeHtml(workflow.id)} + ${escapeHtml(workflow.name)} + ${escapeHtml(workflow.latest_version)} + ${workflow.published ? badge("ok") : badge("draft")} + + + ${workflow.published ? "" : ``} + + `, + ) + .join("") + : '暂无工作流'; +} + +// 加载已发布的工作流(应用),填充首页的下拉选择框。 +// 已发布工作流缓存(id → {name, definition}),供按需切换 OCR 面板。 +let workflowApps = []; +// 需要 crop 的节点 ID(如 frame-extract)与用户框选的 crop 值。 +let cropNodeId = null; +let selectedCrop = null; +// 框选模式:开启后才让画布接收鼠标事件,平时不拦截视频控件。 +let drawMode = false; +// 当前选择的视频文件:change 时保存,提交时使用(避免被重置清空 input 丢失)。 +let selectedVideoFile = null; + +async function loadWorkflowOptions() { + const select = document.getElementById("workflowSelect"); + if (!select) return; + workflowApps = await api("/api/apps"); + select.innerHTML = workflowApps.length + ? workflowApps + .map( + (app) => + ``, + ) + .join("") + : ''; + // 切换工作流时按需展示框选面板。 + select.addEventListener("change", onWorkflowChange); + await onWorkflowChange(); +} + +// 切换工作流:若 DAG 中存在带 crop 参数的节点(字幕 OCR 流程), +// 切换到框选面板;否则使用标准上传。 +async function onWorkflowChange() { + const select = document.getElementById("workflowSelect"); + const ocrCard = document.getElementById("ocrCard"); + const standardCard = document.getElementById("standardCard"); + if (!select || !ocrCard || !standardCard) return; + cropNodeId = null; + selectedCrop = null; + const app = workflowApps.find((item) => item.id === select.value); + // 数据驱动判断:节点 params 中声明了 crop 即需要框选。 + const cropNode = (app?.definition?.nodes || []).find( + (node) => node.params && node.params.crop !== undefined, + ); + const needsCrop = Boolean(cropNode); + cropNodeId = needsCrop ? cropNode.id : null; + ocrCard.hidden = !needsCrop; + standardCard.hidden = needsCrop; + resetOcrPanel(); + if (needsCrop) { + document.getElementById("ocrProgress").textContent = "请选择视频并框选字幕区域"; + } +} + +// 重置 OCR 面板:清除视频、画布与框选状态。 +function resetOcrPanel() { + const video = document.getElementById("ocrVideo"); + const canvas = document.getElementById("ocrCanvas"); + const fileInput = document.getElementById("ocrVideoFile"); + const cropValue = document.getElementById("cropValue"); + const submit = document.getElementById("ocrSubmit"); + selectedCrop = null; + if (video) video.removeAttribute("src"); + if (canvas) { + canvas.width = 0; + canvas.height = 0; + } + if (fileInput) fileInput.value = ""; + if (cropValue) cropValue.value = ""; + if (submit) submit.disabled = true; + selectedVideoFile = null; + exitDrawMode(); +} + +// 用 crop.js 把画布上的框选矩形归一化为 crop 比例并展示。 +function applyCropRect(rect) { + const video = document.getElementById("ocrVideo"); + const box = document.getElementById("videoBox"); + if (!video.videoWidth || !box) return; + const crop = rectToCrop( + rect, + video.videoWidth, + video.videoHeight, + box.clientWidth, + box.clientHeight, + ); + selectedCrop = crop; + document.getElementById("cropValue").value = crop.join(", "); + document.getElementById("ocrSubmit").disabled = false; + document.getElementById("ocrProgress").textContent = + `已框选 crop=[${crop.join(", ")}],可提交任务`; +} + +// 进入框选模式:暂停视频、隐藏原生控件、启用画布绘制。 +function enterDrawMode() { + const video = document.getElementById("ocrVideo"); + const canvas = document.getElementById("ocrCanvas"); + const toggle = document.getElementById("ocrDrawMode"); + if (!video.videoWidth) { + document.getElementById("ocrProgress").textContent = "请先选择视频并定位到有字幕的画面"; + return; + } + drawMode = true; + video.pause(); + video.removeAttribute("controls"); // 隐藏进度条,避免遮挡框选操作。 + canvas.classList.add("drawable"); + if (toggle) toggle.textContent = "退出框选模式"; + document.getElementById("ocrProgress").textContent = "请拖动框选字幕区域"; +} + +// 退出框选模式:恢复原生控件,画布不再拦截指针。 +function exitDrawMode() { + const video = document.getElementById("ocrVideo"); + const canvas = document.getElementById("ocrCanvas"); + const toggle = document.getElementById("ocrDrawMode"); + drawMode = false; + if (video) video.setAttribute("controls", ""); + if (canvas) canvas.classList.remove("drawable"); + if (toggle) toggle.textContent = "进入框选模式"; +} + +// 初始化 OCR 面板:视频预览 + 画布拖动框选。 +function setupOcrPanel() { + const fileInput = document.getElementById("ocrVideoFile"); + const video = document.getElementById("ocrVideo"); + const canvas = document.getElementById("ocrCanvas"); + const resetButton = document.getElementById("ocrReset"); + if (!fileInput || !video || !canvas) return; + + // 选择视频后显示预览并设置画布尺寸与坐标换算。 + // 注意顺序:必须先 reset(会清空旧 src),再设置新 src,否则被清掉。 + fileInput.addEventListener("change", () => { + const file = fileInput.files[0]; + if (!file) return; + resetOcrPanel(); + // 重置会清空 input,这里把文件引用保存下来供提交使用。 + selectedVideoFile = file; + video.src = URL.createObjectURL(file); + video.load(); + video.onloadedmetadata = () => { + const box = document.getElementById("videoBox"); + canvas.width = box.clientWidth; + canvas.height = box.clientHeight; + document.getElementById("ocrProgress").textContent = "请在预览中拖动框选字幕区域"; + }; + }); + + // 框选模式开关:进入/退出。 + const drawToggle = document.getElementById("ocrDrawMode"); + if (drawToggle) { + drawToggle.addEventListener("click", () => { + if (drawMode) { + exitDrawMode(); + } else { + enterDrawMode(); + } + }); + } + + // 拖动绘制框选矩形:mousedown 起点 → mousemove 更新 → mouseup 生成 crop。 + let startX = 0; + let startY = 0; + let drawing = false; + canvas.addEventListener("mousedown", (event) => { + if (!drawMode) return; + const rect = canvas.getBoundingClientRect(); + startX = event.clientX - rect.left; + startY = event.clientY - rect.top; + drawing = true; + }); + canvas.addEventListener("mousemove", (event) => { + if (!drawing || !drawMode) return; + const rect = canvas.getBoundingClientRect(); + const x = event.clientX - rect.left; + const y = event.clientY - rect.top; + const ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.strokeStyle = "#ff5252"; + ctx.lineWidth = 2; + ctx.strokeRect(Math.min(startX, x), Math.min(startY, y), Math.abs(x - startX), Math.abs(y - startY)); + }); + canvas.addEventListener("mouseup", (event) => { + if (!drawing || !drawMode) return; + drawing = false; + const rect = canvas.getBoundingClientRect(); + const x = event.clientX - rect.left; + const y = event.clientY - rect.top; + const w = Math.abs(x - startX); + const h = Math.abs(y - startY); + if (w < 5 || h < 5) return; + applyCropRect({ + x: Math.min(startX, x), + y: Math.min(startY, y), + w, + h, + }); + }); + + // 清除框选:清空画布与 crop,禁用提交。 + resetButton.addEventListener("click", () => { + const ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + selectedCrop = null; + document.getElementById("cropValue").value = ""; + document.getElementById("ocrSubmit").disabled = true; + document.getElementById("ocrProgress").textContent = "请在预览中拖动框选字幕区域"; + }); +} + +// 提交字幕 OCR 任务:携带 crop 覆盖参数,框选完成才可用。 +async function submitOcr() { + const fileInput = document.getElementById("ocrVideoFile"); + const progress = document.getElementById("ocrProgress"); + if (!selectedCrop) { + progress.textContent = "请先框选字幕区域"; + return; + } + const file = selectedVideoFile; + if (!file) { + progress.textContent = "请先选择视频文件"; + return; + } + const workflowId = document.getElementById("workflowSelect").value; + const form = new FormData(); + form.append("file", file); + // 把框选的 crop 传给需要它的节点(如 frame-extract)。 + form.append("params", JSON.stringify({ [cropNodeId]: { crop: selectedCrop } })); + progress.textContent = "上传中..."; + try { + const response = await fetch(`/api/apps/${encodeURIComponent(workflowId)}/runs`, { + method: "POST", + body: form, + }); + const data = await response.json().catch(() => null); + if (!response.ok) { + throw new Error(data && data.detail ? JSON.stringify(data.detail) : response.statusText); + } + progress.textContent = `任务 ${data.id} 已创建,正在跳转到任务管理...`; + window.location.href = `/tasks.html?run=${encodeURIComponent(data.id)}`; + } catch (error) { + progress.textContent = `创建失败:${error.message}`; + } +} + +// 渲染单个任务的进度条 HTML;失败任务用红色填充。 +function progressBar(percent, failed) { + return `
`; +} + +// 为已完成任务生成最终产物下载链接(cn_srt / ass)。 +function artifactLinks(runId, status) { + if (status !== "COMPLETED") return "-"; + return ` + `; +} + +// 加载最近任务并渲染任务表格:状态、当前节点、进度条、产物与重试。 +async function loadRuns() { + const tbody = document.getElementById("runList"); + if (!tbody) return; + const runs = await api("/api/runs"); + tbody.innerHTML = runs.length + ? runs + .map((run) => { + const percent = Math.round((run.progress || 0) * 100); + const failed = run.status === "FAILED"; + // RUNNING/QUEUED 附加耗时或排队提示,其余状态只显示徽章。 + const statusHtml = + run.status === "RUNNING" + ? `${badge(run.status)} 已运行 ${formatElapsed(run.updated_at)}` + : run.status === "QUEUED" + ? `${badge(run.status)} 排队中` + : run.status === "PAUSED" + ? `${badge(run.status)} 已暂停 ${formatElapsed(run.updated_at)}` + : badge(run.status); + // 失败任务提供重试,所有任务均可删除。 + // 排队/运行中可暂停,暂停后可继续,失败可重试,所有任务可删除。 + const canPause = run.status === "RUNNING" || run.status === "QUEUED"; + const canResume = run.status === "PAUSED"; + const actions = ` + ${canPause ? `` : ""} + ${canResume ? `` : ""} + ${failed ? `` : ""} + + `; + return ` + + ${escapeHtml(run.id)} + ${escapeHtml(run.workflow_id)} + ${statusHtml} + ${escapeHtml(run.current_node_id || "-")} + ${progressBar(percent, failed)} ${percent}% + ${escapeHtml(formatTime(run.created_at))} + ${artifactLinks(run.id, run.status)} + ${actions} + `; + }) + .join("") + : '暂无任务,请到首页发起。'; +} + +// 请求后端重试失败任务,成功后刷新列表。 +async function retryRun(runId) { + try { + const result = await api(`/api/runs/${runId}/retry`, { method: "POST" }); + alert(`任务 ${result.id} 已重新排队`); + await loadRuns(); + } catch (error) { + alert(`重试失败:${error.message}`); + } +} + +// 暂停任务:排队或运行中的任务置为 PAUSED,运行中的任务在节点边界停下。 +async function pauseRun(runId) { + try { + const result = await api(`/api/runs/${runId}/pause`, { method: "POST" }); + alert(`任务 ${result.id} 已暂停`); + await loadRuns(); + } catch (error) { + alert(`暂停失败:${error.message}`); + } +} + +// 继续任务:PAUSED 恢复排队,由调度器从断点继续执行。 +async function resumeRun(runId) { + try { + const result = await api(`/api/runs/${runId}/resume`, { method: "POST" }); + alert(`任务 ${result.id} 已恢复执行`); + await loadRuns(); + } catch (error) { + alert(`继续失败:${error.message}`); + } +} +// 删除任务:二次确认后调用后端删除接口并刷新列表。 +async function deleteRun(runId) { + if (!window.confirm(`确认删除任务 ${runId}?相关产物文件将一并删除。`)) { + return; + } + try { + await api(`/api/runs/${runId}`, { method: "DELETE" }); + await loadRuns(); + } catch (error) { + alert(`删除失败:${error.message}`); + } +} + +// 创建或更新工作流:解析 DAG JSON 后提交,随后刷新列表。 +async function createWorkflow() { + const workflowId = document.getElementById("workflowId").value.trim(); + const name = document.getElementById("workflowName").value.trim(); + const description = document.getElementById("workflowDescription").value.trim(); + let definition; + try { + definition = JSON.parse(document.getElementById("workflowDefinition").value); + } catch (error) { + alert(`DAG JSON 无效:${error.message}`); + return; + } + try { + await api("/api/admin/workflows", { + method: "POST", + body: JSON.stringify({ + id: workflowId || undefined, + name, + description, + definition, + }), + }); + alert("工作流已保存"); + await loadWorkflows(); + } catch (error) { + alert(`保存失败:${error.message}`); + } +} + +// 发布指定工作流,使其出现在用户应用中心。 +async function publishWorkflow(workflowId) { + try { + await api(`/api/admin/workflows/${workflowId}/publish`, { method: "POST" }); + await loadWorkflows(); + } catch (error) { + alert(`发布失败:${error.message}`); + } +} + +// 删除指定工作流。 +async function deleteWorkflow(workflowId) { + try { + await api(`/api/admin/workflows/${workflowId}`, { method: "DELETE" }); + await loadWorkflows(); + } catch (error) { + alert(`删除失败:${error.message}`); + } +} + +// 首页发起任务:选择工作流并上传视频,创建任务后跳转到任务管理页查看进度。 +async function uploadVideo() { + const workflowId = document.getElementById("workflowSelect").value; + const fileInput = document.getElementById("videoFile"); + const progress = document.getElementById("runProgress"); + if (!workflowId) { + progress.textContent = "暂无可用工作流"; + return; + } + if (!fileInput.files.length) { + progress.textContent = "请先选择视频文件"; + return; + } + const form = new FormData(); + form.append("file", fileInput.files[0]); + progress.textContent = "上传中..."; + try { + const response = await fetch(`/api/apps/${encodeURIComponent(workflowId)}/runs`, { + method: "POST", + body: form, + }); + const data = await response.json().catch(() => null); + if (!response.ok) { + throw new Error(data && data.detail ? JSON.stringify(data.detail) : response.statusText); + } + progress.textContent = `任务 ${data.id} 已创建,正在跳转到任务管理...`; + // 首页只负责发起任务,进度展示交给任务管理页。 + window.location.href = `/tasks.html?run=${encodeURIComponent(data.id)}`; + } catch (error) { + progress.textContent = `创建失败:${error.message}`; + } +} + +// 全局点击委托:按按钮上的 data-* 属性分发到对应操作。 +document.addEventListener("click", (event) => { + const deleteWorkflowButton = event.target.closest("[data-delete-workflow]"); + if (deleteWorkflowButton) { + deleteWorkflow(deleteWorkflowButton.dataset.deleteWorkflow); + return; + } + const publishWorkflowButton = event.target.closest("[data-publish-workflow]"); + if (publishWorkflowButton) { + publishWorkflow(publishWorkflowButton.dataset.publishWorkflow); + return; + } + const retryButton = event.target.closest("[data-retry-run]"); + if (retryButton) { + retryRun(retryButton.dataset.retryRun); + return; + } + const pauseButton = event.target.closest("[data-pause-run]"); + if (pauseButton) { + pauseRun(pauseButton.dataset.pauseRun); + return; + } + const resumeButton = event.target.closest("[data-resume-run]"); + if (resumeButton) { + resumeRun(resumeButton.dataset.resumeRun); + return; + } + const deleteRunButton = event.target.closest("[data-delete-run]"); + if (deleteRunButton) { + deleteRun(deleteRunButton.dataset.deleteRun); + } +}); + +// 页面初始化:预填 DAG、绑定按钮事件并加载对应页面数据。 +document.addEventListener("DOMContentLoaded", async () => { + const workflowDefinition = document.getElementById("workflowDefinition"); + if (workflowDefinition) { + workflowDefinition.value = JSON.stringify(DEMO_WORKFLOW, null, 2); + } + const createWorkflowButton = document.getElementById("createWorkflow"); + if (createWorkflowButton) { + createWorkflowButton.addEventListener("click", createWorkflow); + } + const publishWorkflowButton = document.getElementById("publishWorkflow"); + if (publishWorkflowButton) { + publishWorkflowButton.addEventListener("click", () => { + publishWorkflow(document.getElementById("workflowId").value.trim()); + }); + } + const uploadButton = document.getElementById("uploadVideo"); + if (uploadButton) { + uploadButton.addEventListener("click", uploadVideo); + // 首页加载已发布工作流供用户选择。 + await loadWorkflowOptions(); + // 字幕 OCR 面板:视频预览 + 拖动框选(仅需 crop 的工作流展示)。 + setupOcrPanel(); + } + const ocrSubmitButton = document.getElementById("ocrSubmit"); + if (ocrSubmitButton) { + ocrSubmitButton.addEventListener("click", submitOcr); + } + + await loadHealth(); + if (document.getElementById("workflowList")) { + await loadWorkflows(); + } + // 任务管理页:每 3 秒刷新一次全部任务的进度,支持高亮跳转参数 run=ID。 + if (document.getElementById("runList")) { + await loadRuns(); + const params = new URLSearchParams(window.location.search); + const target = params.get("run"); + if (target) { + const row = [...document.querySelectorAll("#runList tr")].find((item) => + item.textContent.includes(target), + ); + if (row) { + row.scrollIntoView({ block: "center" }); + row.style.background = "#fff7db"; + } + } + setInterval(loadRuns, 3000); + } +}); diff --git a/web/assets/crop.js b/web/assets/crop.js new file mode 100644 index 0000000..17db3f5 --- /dev/null +++ b/web/assets/crop.js @@ -0,0 +1,38 @@ +// WOV OCR 前端 crop 归一化工具(纯函数,供 node 单测与浏览器共用)。 +// 负责把用户在视频预览上框选的矩形(显示坐标)与 crop 比例 [x,y,w,h](0~1) +// 互转,映射基于视频固有分辨率并处理 object-fit: contain 的留边(letterbox)。 + +// 计算