From 68e45bcf419b7a03f4ded30a1009cf023e8f571a Mon Sep 17 00:00:00 2001 From: kai Date: Thu, 7 May 2026 08:21:28 +0800 Subject: [PATCH] release: v0.20 Codex-ready skill-driven core --- .codex/config.toml | 3 + .opencode/skills/citation-manager/SKILL.md | 27 +- .opencode/skills/search-gateway/SKILL.md | 62 +++ .opencode/skills/search-strategy/SKILL.md | 7 +- .opencode/templates/report-template.py | 150 +++++- AGENTS.md | 1 + PLAN.md | 14 + README.md | 3 + configs/models.yaml | 2 +- configs/research_methods.yaml | 13 + configs/search_profiles.yaml | 14 +- docs/search-playbook.md | 23 +- scripts/build_glossary.py | 2 +- scripts/build_report.py | 33 +- scripts/dr.py | 185 ++++++- scripts/lib/search_client.py | 175 ++++++- scripts/number_citations.py | 188 ++++++++ scripts/polish.py | 13 +- scripts/runtime/assembly.py | 58 ++- scripts/runtime/methods.py | 3 +- scripts/runtime/orchestrator.py | 9 + scripts/runtime/phase1.py | 481 ++++++++++++++++++- scripts/runtime/review.py | 173 ++++++- scripts/runtime/roles.py | 38 ++ scripts/runtime/skills.py | 3 +- scripts/runtime/source_cache.py | 230 +++++++++ scripts/runtime/sources.py | 26 +- scripts/runtime/tasks.py | 197 ++++++-- scripts/runtime/workers.py | 254 +++++++++- scripts/search.py | 21 +- skills/deep-research/SKILL.md | 2 + skills/search-gateway/SKILL.md | 13 +- skills/search-strategy/SKILL.md | 76 +++ tests/test_chapter_assembly.py | 53 ++ tests/test_phase0_materials.py | 11 +- tests/test_phase3_model_review.py | 80 +++ tests/test_polish_prompt.py | 19 + tests/test_reporting.py | 36 ++ tests/test_search_grounded_packets.py | 167 ++++++- tests/test_source_cache.py | 70 +++ tests/test_v020_cli.py | 98 ++++ tests/test_v020_runtime.py | 123 +++++ tests/test_v020_workers.py | 5 + 愚公生物_申基审计整改会议纪要_2026-04-10.pdf | Bin 417262 -> 0 bytes 申基供应商审计会议纪要及整改计划.txt | 1 - 45 files changed, 3005 insertions(+), 157 deletions(-) create mode 100644 .opencode/skills/search-gateway/SKILL.md create mode 100644 scripts/number_citations.py create mode 100644 scripts/runtime/source_cache.py create mode 100644 skills/search-strategy/SKILL.md create mode 100644 tests/test_phase3_model_review.py create mode 100644 tests/test_polish_prompt.py create mode 100644 tests/test_source_cache.py delete mode 100644 愚公生物_申基审计整改会议纪要_2026-04-10.pdf delete mode 100644 申基供应商审计会议纪要及整改计划.txt diff --git a/.codex/config.toml b/.codex/config.toml index 46196b0..7df832a 100644 --- a/.codex/config.toml +++ b/.codex/config.toml @@ -49,6 +49,9 @@ env_vars = ["TAVILY_API_KEY"] enabled = true required = false +[mcp_servers.tavily.tools.tavily_search] +approval_mode = "approve" + [mcp_servers.brave_search] command = "npx" args = ["-y", "@modelcontextprotocol/server-brave-search"] diff --git a/.opencode/skills/citation-manager/SKILL.md b/.opencode/skills/citation-manager/SKILL.md index 05c8008..47b6ab7 100644 --- a/.opencode/skills/citation-manager/SKILL.md +++ b/.opencode/skills/citation-manager/SKILL.md @@ -138,7 +138,32 @@ dr-reporter 从 sources.jsonl 生成参考文献列表时,按以下格式: --- -## 五、引用完整性检查(dr-chief-editor 用) +## 五、脚注使用边界 + +脚注不是行内引用的替代品,也不用于重复输入材料中已经被正文自然承载的事实。脚注只在以下场景使用: + +- **法规原文或条款定位**:正文需要引用法规要求,但完整条款会打断叙事时,脚注写明法规名称、章节/条款和关键原文。 +- **关键资料原文**:原文措辞本身会影响判断强度,且正文只保留管理结论时,脚注可放短摘录。 +- **补充背景或术语解释**:正文读者可能需要额外背景,但展开会破坏行文节奏。 +- **版权或使用限制说明**:图表、第三方材料、内部材料使用边界需要单独说明时。 + +禁止事项: + +- 不要把“某份输入材料说过什么”机械搬到脚注;这类事实应通过正文和数字引用解决。 +- 不要为每个本地材料引用都加脚注;脚注应少而精,优先服务关键判断。 +- 不要用脚注堆砌证据,核心证据仍应进入正文或证据表。 + +推荐格式: + +```markdown +正文关键判断[12]。[^1] + +[^1]: ICH Q10《Pharmaceutical Quality System》第 4.1 节要求管理评审输入覆盖“results of regulatory inspections and findings, audits and commitments”,并纳入 CAPA、变更以及上次管理评审行动。 +``` + +--- + +## 六、引用完整性检查(dr-chief-editor 用) 审校时检查: 1. 正文中所有 [src_xxx] 都在 sources.jsonl 里有对应记录 diff --git a/.opencode/skills/search-gateway/SKILL.md b/.opencode/skills/search-gateway/SKILL.md new file mode 100644 index 0000000..b8cf632 --- /dev/null +++ b/.opencode/skills/search-gateway/SKILL.md @@ -0,0 +1,62 @@ +--- +name: search-gateway +description: Use when Deep Research agents or subagents need web, scholar, patent, news, regulatory, or source-discovery search without using platform MCP tools or browser search directly. +--- + +# Search Gateway + +## Rule + +Use the project Python search gateway as the only default search interface. Do not call Tavily MCP, browser MCP, generic web tools, or platform-native search from a subagent unless the user explicitly asks for that escape hatch. + +## Commands + +Run searches from the repository root: + +```bash +uv run python scripts/search.py "" --route general --json --trace +uv run python scripts/search.py "" --route evidence --json --trace +uv run python scripts/search.py "" --route scholar --year-low 2020 --json --trace +uv run python scripts/search.py "" --route news --time-range y --json --trace +uv run python scripts/search.py "" --route patents --json --trace +uv run python scripts/search.py "" --profile biomed_literature --json --trace +``` + +If `uv` cannot use the user cache in a sandbox, set a local cache: + +```bash +UV_CACHE_DIR=/private/tmp/deep_research_uv_cache uv run python scripts/search.py "" --route general --json --trace +``` + +## Routing + +- `general`: Tavily first, Exa fallback, Brave fallback; use for broad discovery and gap filling. +- `evidence`: Exa highlights first, Tavily fallback, Brave fallback; use when a task card needs concise, source-level candidate evidence for an evidence packet. +- `scholar`: Serper Scholar first; use for papers, reviews, technical literature, and academic validation only. +- `news`: Serper News first; use for recent industry/current information. +- `patents`: Serper Google Patents first. +- `biomed_literature`: scholar plus general discovery. + +Serper is not the default general web search source. Keep it mainly for Scholar, Google Patents, News, and targeted `site:` searches where Google coverage matters. + +Tavily Research is a phase-level scan tool, not a packet-writing shortcut. Use it for Phase 1 initial landscape scans, Phase 2 gap-fill after a chapter is thin, or Phase 3回炉补证据;its output must be saved, source-scored, deduplicated, and converted into candidate evidence before citation. + +Exa is the preferred controlled evidence discovery route for agents because it can return short highlights/text per URL. Treat Exa hits as candidate sources unless the URL itself is an original Tier 1-2 source. + +API keys are loaded from `secrets.env` by `scripts/search.py`; do not ask the user to authorize MCP calls when the env keys are available. + +## Subagent Protocol + +For evidence packets: + +1. Search through `scripts/search.py`, save or summarize the returned JSON in the packet’s `raw_quotes_or_notes`. +2. Use search hits only as candidate sources; whenever possible, cite the original regulator, guideline, paper, or official document. +3. Put every used source in `sources` with `id`, `title`, `url`, `tier`, and `score`. +4. Do not write a final chapter during search; produce structured evidence only. +5. For repeatedly used Tier 1-2 sources, run `uv run python scripts/dr.py sources cache ` so later phases can cite a local Markdown snapshot rather than only a URL. + +For chapter assembly: + +1. Do not search. Use only `phase2/chapter_briefs`, `phase2/packets`, `phase2/sources.jsonl`, `phase0/extracted`, and `phase1/framework.md`. +2. Do not create new `source_id`. +3. If evidence is thin, mark the chapter as needing Phase 2 enrichment instead of filling with generic prose. diff --git a/.opencode/skills/search-strategy/SKILL.md b/.opencode/skills/search-strategy/SKILL.md index 9284b4d..e805437 100644 --- a/.opencode/skills/search-strategy/SKILL.md +++ b/.opencode/skills/search-strategy/SKILL.md @@ -75,10 +75,12 @@ description: 生物医药深度研究的统一检索策略。规定信源优先 - 例:研究"GLP-1 成为减重首选"→ 反方要搜 "GLP-1 limitations" "semaglutide side effects" "discontinuation rate" - 至少 3-5 条反方证据 -### 第 4 轮:Tavily/Brave/Exa 补漏 +### 第 4 轮:Exa/Tavily/Brave 补漏 - 仅用于发现前 3 轮遗漏的 URL - 发现后**必须**回溯到原始 Tier 1-2 来源(论文 DOI、监管公告原文) - 不得直接引用搜索返回的二次报道 +- 章节级 evidence packet 优先用 `scripts/search.py --route evidence`,让 Exa highlights 进入 source-quality 和 evidence-table。 +- Tavily Research 只用于 Phase 1 初扫、薄弱章节补证据和 Phase 3 回炉;输出必须存盘、评分、去重后再转成 candidate evidence。 --- @@ -88,6 +90,7 @@ description: 生物医药深度研究的统一检索策略。规定信源优先 ```bash uv run python scripts/search.py "" --route scholar --num-results 10 --year-low 2023 +uv run python scripts/search.py "" --route evidence --num-results 10 --json --trace uv run python scripts/search.py "" --route patents --num-results 10 uv run python scripts/search.py "" --route news --num-results 10 --time-range m uv run python scripts/search.py "" --route general --num-results 10 @@ -107,7 +110,7 @@ uv run python scripts/search.py "" --profile patent_heavy --num-results 1 - `--route patents` 固定优先 Serper + Google Patents,避免专利检索被 Tavily 普通网页结果替代。 - `--route scholar` 固定优先 Serper Scholar,避免论文检索只停留在通用网页摘要。 - 专用 route(scholar/patents/news)默认 `--strict-specialized`,Serper 异常时应显式失败,不允许静默降级。 -- Tavily / Exa / Brave 只作为 gap-fill 或 MCP 兜底,不作为文献/专利主路径。 +- Exa evidence route 是 packet 候选证据发现主路径;Tavily / Brave 只作为 gap-fill 或 MCP 兜底,不作为文献/专利主路径。 每个检索小结必须写明实际使用过的 route,例如: diff --git a/.opencode/templates/report-template.py b/.opencode/templates/report-template.py index 8b3e9a6..79ac097 100755 --- a/.opencode/templates/report-template.py +++ b/.opencode/templates/report-template.py @@ -49,7 +49,7 @@ try: Table, TableStyle, ) - from reportlab.platypus.flowables import HRFlowable + from reportlab.platypus.flowables import Flowable, HRFlowable except ImportError: print("ERROR: missing reportlab. Run: uv sync", file=sys.stderr) sys.exit(1) @@ -279,6 +279,23 @@ def build_styles() -> StyleSheet1: allowOrphans=0, )) + # Inline evidence footnotes placed by number_citations / finalization. + ss.add(ParagraphStyle( + name="evidence-footnote", + fontName="SrcSerif", + fontSize=7.4, + leading=10, + alignment=TA_JUSTIFY, + leftIndent=18, + firstLineIndent=-18, + spaceBefore=0, + spaceAfter=2, + textColor=colors.HexColor("#4b5563"), + wordWrap="CJK", + allowWidows=0, + allowOrphans=0, + )) + # Table cell - no first-line indent, smaller font, CJK wrap for auto line break ss.add(ParagraphStyle( name="table-cell", @@ -422,6 +439,23 @@ def build_styles() -> StyleSheet1: bulletIndent=8, )) + # Ordered list. Keep references flush-left; do not prepend decorative bullets. + ss.add(ParagraphStyle( + name="ordered", + fontName="SrcSerif", + fontSize=9, + leading=13, + alignment=TA_JUSTIFY, + firstLineIndent=0, + leftIndent=0, + spaceBefore=0, + spaceAfter=4, + textColor=colors.HexColor("#374151"), + wordWrap="CJK", + allowWidows=0, + allowOrphans=0, + )) + return ss @@ -436,6 +470,28 @@ class Block: meta: Optional[dict] = None +class FootnoteFlowable(Flowable): + """Zero-height anchor that registers a footnote for the current PDF page.""" + + def __init__(self, label: str, content: str): + super().__init__() + self.label = label + self.content = content + self.width = 0 + self.height = 0 + + def wrap(self, availWidth, availHeight): + return 0, 0 + + def draw(self): + page = self.canv.getPageNumber() + notes = getattr(self.canv, "_dr_footnotes", None) + if notes is None: + notes = {} + setattr(self.canv, "_dr_footnotes", notes) + notes.setdefault(page, []).append((self.label, self.content)) + + def parse_markdown(md_text: str) -> List[Block]: blocks: List[Block] = [] lines = md_text.split("\n") @@ -483,6 +539,17 @@ def parse_markdown(md_text: str) -> List[Block]: blocks.append(Block(kind="quote", content="\n".join(quote_lines))) continue + # Markdown footnote definition: [^1]: 原文摘录... + m = re.match(r"^\[\^([A-Za-z0-9_-]+)\]:\s*(.+)$", stripped) + if m: + blocks.append(Block( + kind="footnote", + content=m.group(2).strip(), + meta={"label": m.group(1)}, + )) + i += 1 + continue + # Unordered list if re.match(r"^[-*+]\s+", stripped): while i < len(lines) and re.match(r"^[-*+]\s+", lines[i].strip()): @@ -493,12 +560,12 @@ def parse_markdown(md_text: str) -> List[Block]: # Ordered list if re.match(r"^\d+\.\s+", stripped): - idx = 1 while i < len(lines) and re.match(r"^\d+\.\s+", lines[i].strip()): - item = re.sub(r"^\d+\.\s+", "", lines[i].strip()) - blocks.append(Block(kind="bullet", content=f"{idx}. {item}")) + m = re.match(r"^(\d+)\.\s+(.+)$", lines[i].strip()) + if not m: + break + blocks.append(Block(kind="ordered", content=f"{m.group(1)}. {m.group(2)}")) i += 1 - idx += 1 continue # Table @@ -518,6 +585,7 @@ def parse_markdown(md_text: str) -> List[Block]: while i < len(lines) and lines[i].strip() and not ( lines[i].strip().startswith(("#", ">", "-", "*", "+", "!")) or re.match(r"^\d+\.\s+", lines[i].strip()) + or re.match(r"^\[\^[A-Za-z0-9_-]+\]:", lines[i].strip()) or "|" in lines[i] ): para_lines.append(lines[i]) @@ -638,6 +706,17 @@ def md_inline_to_rl(text: str, *, add_cjk_space: bool = True) -> str: + ']', text, ) + text = re.sub( + r"(.*?)", + r"\1", + text, + flags=re.IGNORECASE, + ) + text = re.sub( + r"\[\^([A-Za-z0-9_-]+)\]", + lambda m: f"注{m.group(1)}", + text, + ) text = re.sub(r"\[([^\]]+)\]\(([^)]+)\)", r"\1", text) return text @@ -746,9 +825,27 @@ def make_page_decorator(manifest: Manifest): canvas.setLineWidth(0.5) canvas.line(2 * cm, A4[1] - 1.4 * cm, A4[0] - 2 * cm, A4[1] - 1.4 * cm) + # Page-bottom evidence footnotes. + notes = getattr(canvas, "_dr_footnotes", {}).get(doc.page, []) + if notes: + width = A4[0] - 4.4 * cm + x = 2.2 * cm + y = 3.45 * cm + canvas.setStrokeColor(colors.HexColor("#cbd5e1")) + canvas.setLineWidth(0.45) + canvas.line(x, y + 0.16 * cm, x + 6.8 * cm, y + 0.16 * cm) + footnote_style = build_styles()["evidence-footnote"] + for label, content in notes: + text = f"注{label}:{content}" + para = Paragraph(md_inline_to_rl(text), footnote_style) + _, h = para.wrap(width, 1.3 * cm) + y -= h + para.drawOn(canvas, x, y) + y -= 0.04 * cm + # Footer: page number centered canvas.setFont("SrcSans-Light", 8) - canvas.drawCentredString(A4[0] / 2, 1.2 * cm, f"— {doc.page} —") + canvas.drawCentredString(A4[0] / 2, 1.0 * cm, f"— {doc.page} —") canvas.restoreState() @@ -830,6 +927,8 @@ def collect_toc_entries(blocks: List[Block]) -> List[tuple[int, str]]: title = b.content.strip() if any(s in title.lower() for s in skip_titles_substr): continue + if b.kind == "h1" and not re.match(r"^第\s*\d+\s*章\b", title): + continue level = 1 if b.kind == "h1" else 2 entries.append((level, title)) return entries @@ -1196,8 +1295,13 @@ def _render_generic_block(block: Block, story: list, base_dir: Path, styles: Sty story.append(Paragraph(md_inline_to_rl(block.content), style)) elif block.kind == "quote": story.append(Paragraph(md_inline_to_rl(block.content), styles["quote"])) + elif block.kind == "footnote": + label = block.meta.get("label") if block.meta else "" + story.append(FootnoteFlowable(str(label), block.content)) elif block.kind == "bullet": story.append(Paragraph("• " + md_inline_to_rl(block.content), styles["bullet"])) + elif block.kind == "ordered": + story.append(Paragraph(md_inline_to_rl(block.content), styles["ordered"])) elif block.kind == "hr": story.append(Spacer(1, 0.3 * cm)) elif block.kind == "image": @@ -1349,6 +1453,11 @@ def build_body( front_sections[kind] = sec k = next_k + # If the markdown does not contain a TOC marker, still insert a generated TOC. + # This keeps PDF output stable when Phase 4 emits a clean markdown body. + if "toc" not in front_sections: + front_sections["toc"] = [Block(kind="h2", content="目录")] + # 前置件输出顺序(固定) front_order = [ "disclaimer", # 免责声明 @@ -1408,13 +1517,26 @@ def build_body( i = _skip_until_next_section(i + 1) continue - # 参考文献:自动生成 + # 参考文献:如果正文仍使用 [src_xxx],则从 sources.jsonl 自动生成; + # 如果正文已被 number_citations.py 转为数字编号,则保留 Markdown 内的编号清单。 if kind == "references": story.append(PageBreak()) - story.extend(build_references(blocks, sources_path, styles)) j = i + 1 - while j < n and blocks[j].kind == "p" and _REF_PLACEHOLDER_RE.search(blocks[j].content): - j += 1 + has_src_citations = bool(collect_cited_src_ids(blocks)) + has_ref_placeholder = ( + j < n and blocks[j].kind == "p" and _REF_PLACEHOLDER_RE.search(blocks[j].content) + ) + if has_src_citations or has_ref_placeholder: + story.extend(build_references(blocks, sources_path, styles)) + while j < n and blocks[j].kind not in ("h1", "h2"): + j += 1 + else: + story.append(Paragraph(md_inline_to_rl(block.content), styles["h1"])) + while j < n and blocks[j].kind not in ("h1", "h2"): + _render_generic_block(blocks[j], story, base_dir, styles, in_summary=False) + j += 1 + i = j + continue i = j continue @@ -1497,7 +1619,7 @@ def main(): leftMargin=2.2 * cm, rightMargin=2.2 * cm, topMargin=2 * cm, - bottomMargin=2 * cm, + bottomMargin=4.0 * cm, title=manifest.report_title, author=manifest.author, subject=manifest.type, @@ -1510,14 +1632,14 @@ def main(): id="cover", ) normal_frame = Frame( - 2.2 * cm, 2 * cm, - A4[0] - 4.4 * cm, A4[1] - 4 * cm, + 2.2 * cm, 4.0 * cm, + A4[0] - 4.4 * cm, A4[1] - 6.0 * cm, id="normal", ) decorator = make_page_decorator(manifest) doc.addPageTemplates([ PageTemplate(id="cover", frames=[cover_frame]), - PageTemplate(id="normal", frames=[normal_frame], onPage=decorator), + PageTemplate(id="normal", frames=[normal_frame], onPageEnd=decorator), ]) # Assemble story diff --git a/AGENTS.md b/AGENTS.md index d153314..70df8e5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -193,6 +193,7 @@ uv run python scripts/dr.py methods list - 真实并发由 `scripts/runtime/workers.py` 的 worker pool 执行。 - 真实模型选择由 `configs/models.yaml` 和 `scripts/runtime/roles.py` 执行。 - 信息检索默认走 `scripts/search.py` / `SearchClient` / `search-gateway` skill;不得把 Tavily MCP、browser MCP 或平台 web search 作为默认路径,除非用户明确授权。 +- 搜索路由必须按任务类型选择:`evidence`=Exa highlights 受控证据发现,`fda/scholar/patents/news`=专用信源路径,`general`=宽泛发现和兜底;Tavily Research 只能作为阶段性 scan/enrichment/rework 输入,不能直接替代 evidence packet 或章节正文。 --- diff --git a/PLAN.md b/PLAN.md index afb60be..b24a338 100644 --- a/PLAN.md +++ b/PLAN.md @@ -701,3 +701,17 @@ OpenCode 的坑:如果只是在主会话里装样子地写"让 X agent 做", - `phase2/enrichment_rounds/roundXX/coverage_gap.json` 还未实现;下一步应先做 deterministic coverage evaluator,再让补充 task cards 从 gap 生成。 - Phase3 evaluator rubrics 仍是计划项;当前 deterministic review 已能抓部分 draft 质量问题,但还没有分维度评分与 finalize gate。 - DOCX/PPTX/图片批量 OCR、表格抽取、材料 source registry 仍放入后续资料导入增强。 + +- 2026-05-07 v0.20/v0.21-alpha search routing refinement:**Exa evidence discovery + Tavily Research 边界定锚** + + **设计结论**: + - Exa 更适合作为 Phase2 的受控 evidence discovery:优先返回 highlights/text,便于进入 source-quality、evidence-table 和 packet schema。 + - Tavily Research 更适合作为 Phase1 初扫、薄弱章节补证据、Phase3 回炉扫描;其综合报告不得直接替代 evidence packet 或章节正文。 + - Serper 继续承担 Scholar、Google Patents、News 与 Google-specific `site:` 检索;Brave 用于交叉验证和混合语种 fallback。 + + **已落地**: + - `scripts/search.py` 新增 `--route evidence` 与 `--exa-category`,profile 路由加入 `evidence`。 + - `scripts/lib/search_client.py` 新增 `SearchClient.evidence()`,优先调用 Exa highlights/text,失败后降级 Tavily/Brave。 + - `scripts/runtime/tasks.py` 把 `evidence` 纳入合法 search route,并更新主要 task axes 的默认路由。 + - `scripts/runtime/workers.py` 的 `ProjectSearchProvider` 支持 `evidence` route。 + - `skills/search-gateway`、`skills/search-strategy`、`docs/search-playbook.md`、`README.md`、`AGENTS.md` 同步记录搜索分工,避免后续又回到 Tavily MCP 或中文长句搜索。 diff --git a/README.md b/README.md index 67107d4..ce56fba 100644 --- a/README.md +++ b/README.md @@ -173,9 +173,12 @@ uv run python scripts/sprint5_regression.py ```bash uv run python scripts/search.py "dual-target RNAi 2024" --route scholar --year-low 2023 +uv run python scripts/search.py "FDA warning letter CAPA deviation change control pharmaceutical" --route evidence --json --trace uv run python scripts/search.py "dual-target siRNA GalNAc" --route patents ``` +v0.20 搜索分工:`evidence` 用 Exa highlights 做受控候选证据发现;`scholar/patents/news/fda` 保留专用路由;`general` 只做宽泛发现和兜底;Tavily Research 作为 Phase1 初扫、薄弱章节补证据和 Phase3 回炉工具,结果必须存盘、评分、去重后再进入 evidence packet。 + --- ## 项目结构 diff --git a/configs/models.yaml b/configs/models.yaml index 827a360..fb2c7a0 100644 --- a/configs/models.yaml +++ b/configs/models.yaml @@ -78,7 +78,7 @@ profiles: polish: anthropic/claude-sonnet-4.6 codex_native: - description: OpenAI-native profile for Codex adapter runs. + description: Deprecated/misleading name. These are OpenAI models through the external Python API client, not Codex App built-in models. roles: dr_plan: gpt-5.4 dr_pm: gpt-5.4 diff --git a/configs/research_methods.yaml b/configs/research_methods.yaml index 8e4792d..0e3a99f 100644 --- a/configs/research_methods.yaml +++ b/configs/research_methods.yaml @@ -16,6 +16,12 @@ methods: - patents - market - counter + integrated_lanes: + - literature evidence + - regulatory pathway + - patent/IP position + - market and competitor evidence + - counter-evidence and uncertainty framework_sections: - central_thesis - chapter_outline @@ -124,6 +130,13 @@ methods: - capa_roadmap - verification_evidence - counter + integrated_lanes: + - site audit and recap findings + - official regulatory and guideline baseline + - enforcement precedents and warning letters + - quality/manufacturing/operations gap analysis + - remediation actions, ownership, verification evidence + - counter-evidence and boundary conditions framework_sections: - material_evidence_map - regulatory_and_best_practice_baseline diff --git a/configs/search_profiles.yaml b/configs/search_profiles.yaml index 17fba6f..9f147b3 100644 --- a/configs/search_profiles.yaml +++ b/configs/search_profiles.yaml @@ -6,14 +6,16 @@ profiles: - "clinicaltrials" - "fda_ema_nmpa" - "serper_scholar" - - "tavily_exa_gap_fill" + - "exa_evidence_discovery" + - "tavily_research_scan_if_needed" patent_heavy: description: "IP landscape, freedom-to-operate, and process-route research." order: - "google_patents_via_serper" - "uspto_epo_cnipa" - "company_disclosures" - - "exa_tavily_family_discovery" + - "exa_family_discovery" + - "tavily_gap_fill" china_market: description: "China regulatory, company, supply-chain, and market research." order: @@ -21,6 +23,7 @@ profiles: - "exchange_disclosures" - "serper_brave_chinese" - "exa_company_pages" + - "exa_evidence_discovery" - "tavily_gap_fill" investment: description: "Public-company, market-size, and transaction-oriented research." @@ -29,15 +32,16 @@ profiles: - "consulting_and_database_reports" - "company_announcements" - "serper_news" + - "exa_evidence_discovery" - "tavily_gap_fill" apis: tavily: - best_for: ["initial_scan", "gap_fill", "llm_friendly_snippets"] + best_for: ["phase1_research_scan", "phase3_gap_fill", "llm_friendly_snippets"] evidence_role: "discovery_only_unless_original_source" exa: - best_for: ["company_pages", "terminology_check", "long_tail_professional_pages"] - evidence_role: "discovery_or_secondary" + best_for: ["evidence_discovery", "company_pages", "terminology_check", "long_tail_professional_pages", "agent_highlights"] + evidence_role: "candidate_source_until_scored" brave: best_for: ["cross_check", "counter_evidence", "mixed_language_search"] evidence_role: "discovery_only_unless_original_source" diff --git a/docs/search-playbook.md b/docs/search-playbook.md index 4bdebd1..74311a7 100644 --- a/docs/search-playbook.md +++ b/docs/search-playbook.md @@ -8,13 +8,14 @@ v0.12 起,默认搜索路径收敛到项目内 Python 网关: ```bash uv run python scripts/search.py "" --route scholar --num-results 10 --year-low 2023 +uv run python scripts/search.py "" --route evidence --num-results 10 --json --trace uv run python scripts/search.py "" --route patents --num-results 10 uv run python scripts/search.py "" --route news --num-results 10 --time-range m uv run python scripts/search.py "" --route general --num-results 10 uv run python scripts/ground.py "" --json ``` -其中 `scholar / patents / news` 默认走严格模式(Serper 失败不静默降级);需要容错时显式加 `--no-strict-specialized`。 +其中 `scholar / patents / news` 默认走严格模式(Serper 失败不静默降级);需要容错时显式加 `--no-strict-specialized`。`evidence` 是 v0.20.1 之后新增的受控证据发现路由,优先用 Exa highlights/text 为 evidence packet 提供候选来源。 MCP server 只作为交互式补漏和特殊工具能力,不作为文献、专利、新闻检索主路径。这样 OpenCode、Codex、Gemini CLI、Claude Code 都能复用同一套路由,减少每个平台单独配置 Tavily/Exa/Brave MCP 的依赖。 @@ -23,13 +24,14 @@ MCP server 只作为交互式补漏和特殊工具能力,不作为文献、专 ### Tavily - 优点:LLM 友好,摘要质量稳定,适合快速发现方向。 -- 用法:初扫、普通网页、报告线索、交叉补漏。 +- 用法:初扫、普通网页、报告线索、交叉补漏;`research()` 更适合 Phase 1 初步扫描、薄弱章节补证据、Phase 3 回炉。 - 风险:不能把普通网页当结论支撑,必须追溯原始来源。 +- 规则:Tavily Research 输出必须保存为过程文件,并经过 source-quality 评分、去重和 source_id 归一化;不要直接把 Tavily 的综合报告当作章节正文或最终证据。 ### Exa -- 优点:neural search,对官网、公司页、长尾专业内容召回好。 -- 用法:术语核查、公司/产品名纠错、专业网页发现。 +- 优点:neural/agent search,对官网、公司页、长尾专业内容召回好;highlights/text 适合喂给 agent 做证据筛选。 +- 用法:`scripts/search.py --route evidence`、术语核查、公司/产品名纠错、专业网页发现、章节证据补强。 - 风险:macOS 代理环境容易 TLS EOF,项目内 `SearchClient` 已使用 `trust_env=False` 绕开系统代理。 ### Brave @@ -71,13 +73,22 @@ MCP server 只作为交互式补漏和特殊工具能力,不作为文献、专 ## Recommended Profiles +## v0.20 Routing Decision + +- Phase 1 初步扫描:Tavily Research + Exa evidence,目标是形成假设、反证方向、章节任务切分。 +- Phase 2 evidence packet:优先 `fda/scholar/patents/news` 等专用路由;需要补充候选证据时用 `evidence`,不要只用 `general`。 +- Phase 3 回炉:按 critique 中的证据缺口定向调用 Tavily Research 或 Exa evidence,输出仍需进入 packet/schema。 +- General route:只做宽泛发现和兜底,不作为“默认最佳搜索”。 + +## Recommended Profiles + ### biomed_literature -PubMed / NCBI → ClinicalTrials → FDA/EMA/NMPA → `scripts/search.py --route scholar` → Tavily/Exa 补漏。 +PubMed / NCBI → ClinicalTrials → FDA/EMA/NMPA → `scripts/search.py --route scholar` → `scripts/search.py --route evidence` → Tavily/Brave 补漏。 ### patent_heavy -`scripts/search.py --route patents` → USPTO/EPO/CNIPA → 公司年报/招股书 → Tavily/Exa 补同族专利线索。 +`scripts/search.py --route patents` → USPTO/EPO/CNIPA → 公司年报/招股书 → Exa/Tavily 补同族专利线索。 ### china_market diff --git a/scripts/build_glossary.py b/scripts/build_glossary.py index 63fd13c..328b0bf 100644 --- a/scripts/build_glossary.py +++ b/scripts/build_glossary.py @@ -6,7 +6,7 @@ - 可选:--extra terms.txt(每行一个英文术语,补充进来一起核查) 流程(每个术语独立可并行): -1. 用 SearchClient(Exa > Tavily)搜一次(query = " ") +1. 用 SearchClient(Tavily > Exa > Brave)搜一次(query = " ") 2. 把 top 3-5 snippet 喂给 Haiku,让模型返回 {zh, en_full, confidence, issue} 3. 合并回 glossary,字段扩展: { diff --git a/scripts/build_report.py b/scripts/build_report.py index aa00024..0f9988c 100644 --- a/scripts/build_report.py +++ b/scripts/build_report.py @@ -243,6 +243,14 @@ def prepare_qmd( if end != -1: md_text = md_text[end + 4:].lstrip("\n") + # Quarto already renders the title from YAML; drop a duplicated leading H1. + md_text = re.sub( + rf"^#\s+{re.escape(title)}\s*\n+", + "", + md_text, + count=1, + ) + # Replace TOC placeholder md_text = re.sub( r"\[TOC will be generated.*?\]", @@ -276,13 +284,36 @@ def prepare_qmd( "\\usepackage{longtable}\n" "\\usepackage{booktabs}\n" "\\usepackage{array}\n" + "\\usepackage{xcolor}\n" + "\\usepackage{titlesec}\n" + "\\definecolor{DRBlue}{HTML}{1E3A8A}\n" + "\\definecolor{DRSlate}{HTML}{374151}\n" + "\\definecolor{DRMuted}{HTML}{6B7280}\n" # Use lscape instead of pdflscape to avoid \LS@makefcolumn recursion # which exhausts TeX param_size on large longtables. # lscape rotates content without changing page media box (reader must rotate). "\\usepackage{lscape}\n" "\\setlength{\\LTpre}{6pt}\n" "\\setlength{\\LTpost}{6pt}\n" - "\\setlength{\\tabcolsep}{3pt}\n", + "\\setlength{\\tabcolsep}{3pt}\n" + "\\linespread{1.18}\n" + "\\setlength{\\parindent}{2em}\n" + "\\setlength{\\parskip}{0.25em}\n" + "\\newcommand{\\sectionbreak}{\\clearpage}\n" + "\\titleformat{\\section}[display]\n" + " {\\centering\\Large\\bfseries\\sffamily\\color{DRBlue}}\n" + " {}{0pt}{}\n" + "\\titlespacing*{\\section}{0pt}{0pt}{1.1em}\n" + "\\titleformat{\\subsection}\n" + " {\\large\\bfseries\\sffamily\\color{DRBlue}}\n" + " {}{0pt}{}\n" + "\\titlespacing*{\\subsection}{0pt}{1.1em}{0.45em}\n" + "\\titleformat{\\subsubsection}\n" + " {\\normalsize\\bfseries\\sffamily\\color{DRSlate}}\n" + " {}{0pt}{}\n" + "\\titlespacing*{\\subsubsection}{0pt}{0.9em}{0.35em}\n" + "\\renewcommand{\\contentsname}{目录}\n" + "\\setcounter{tocdepth}{2}\n", encoding="utf-8", ) diff --git a/scripts/dr.py b/scripts/dr.py index 67f22ac..f2b43d6 100644 --- a/scripts/dr.py +++ b/scripts/dr.py @@ -30,11 +30,12 @@ from scripts.runtime.assembly import build_chapter_briefs, build_compressed_find from scripts.runtime.orchestrator import create_phase2_task_cards, write_placeholder_packets from scripts.runtime.methods import ResearchMethodRegistry from scripts.runtime.phase1 import create_project, render_framework, write_material_brief -from scripts.runtime.review import build_phase3_critique +from scripts.runtime.review import build_phase3_critique, build_phase3_model_critique from scripts.runtime.roles import resolve_runtime_profile +from scripts.runtime.source_cache import cache_sources from scripts.runtime.sources import rebuild_sources_from_packets from scripts.runtime.skills import SkillRegistry, default_adapter_skill_dirs -from scripts.runtime.tasks import TaskCard +from scripts.runtime.tasks import TaskCard, load_task_cards, validate_packet, write_task_cards from scripts.runtime.workers import run_packet_workers @@ -156,7 +157,12 @@ def cmd_frame(args: argparse.Namespace) -> int: print(f"Research method: {method.key}") print(f"Chapters: {args.chapters}") return 0 - path = render_framework(project_root, method_key=args.method, chapter_count=args.chapters) + path = render_framework( + project_root, + method_key=args.method, + chapter_count=args.chapters, + preserve_existing_outline=args.preserve_existing_outline, + ) print(f"Project: {project_root.name}") print(f"Wrote: {path.relative_to(project_root)}") print("Pause: review and approve the framework before Phase 2.") @@ -222,12 +228,62 @@ def cmd_research(args: argparse.Namespace) -> int: "Phase 1 is not approved. Review phase1/material_brief.md and phase1/framework.md, " "then run `uv run python scripts/dr.py approve ` or pass --force." ) - runtime = resolve_runtime_profile(profile=args.profile) - card_dicts = create_phase2_task_cards( - project_root, - axes=args.axis, - dry_run=args.dry_run, + if args.profile == "codex_native" and (args.execute_packets or args.assemble_chapters): + raise SystemExit( + "`codex_native` cannot be used for Python-core model execution: scripts/dr.py currently calls external " + "API clients, not Codex App built-in models. Use a clearly external profile such as `medium`, or run " + "Codex-native execution through the surface adapter/manual task workflow." + ) + runtime = resolve_runtime_profile( + profile=args.profile, + overrides=parse_model_overrides(args.model_override), ) + if args.append_task_cards: + generated = create_phase2_task_cards( + project_root, + axes=args.axis, + dry_run=True, + ) + existing_path = project_root / "phase2" / "task_cards.json" + existing_cards = load_task_cards(existing_path) if existing_path.exists() else [] + seen = {card.task_id for card in existing_cards} + appended_cards = [TaskCard(**item) for item in generated if item["task_id"] not in seen] + runnable_existing_cards: list[TaskCard] = [] + if args.execute_packets and args.axis: + axis_set = set(args.axis) + for card in existing_cards: + if card.topic_axis not in axis_set: + continue + packet_path = project_root / card.output_packet + try: + validate_packet(json.loads(packet_path.read_text(encoding="utf-8"))) + except Exception: + runnable_existing_cards.append(card) + merged_cards = [*existing_cards, *appended_cards] + if not args.dry_run: + write_task_cards(existing_path, merged_cards) + phase2 = manifest.setdefault("phase2", {}) + phase2.update( + { + "status": "in_progress", + "runtime": "python-core-v0.20", + "task_cards_path": "phase2/task_cards.json", + "task_cards_total": len(merged_cards), + "task_cards_appended": len(appended_cards), + "updated_at": datetime.now(timezone.utc).replace(microsecond=0).isoformat(), + } + ) + (project_root / "manifest.json").write_text( + json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + card_dicts = [card.to_dict() for card in [*appended_cards, *runnable_existing_cards]] + else: + card_dicts = create_phase2_task_cards( + project_root, + axes=args.axis, + dry_run=args.dry_run, + ) if args.execute_packets and args.dry_run: raise SystemExit("--execute-packets cannot be combined with --dry-run") if args.assemble_chapters and args.dry_run: @@ -350,7 +406,9 @@ def cmd_run(args: argparse.Namespace) -> int: workers=args.workers, axis=None, profile=args.profile, + model_override=[], execute_packets=False, + append_task_cards=False, allow_search_fallback=False, build_briefs=False, assemble_chapters=False, @@ -362,7 +420,26 @@ def cmd_run(args: argparse.Namespace) -> int: def cmd_review(args: argparse.Namespace) -> int: project_root = resolve_project(args.project) - path = build_phase3_critique(project_root) + if args.model_review: + if args.dry_run: + print(f"Project: {project_root.name}") + print("Phase 3 model review plan:") + print(f" model: {args.model}") + print(" context: phase3/review_context_opus_4_7.md") + print(" output: phase3/critique.md") + return 0 + from scripts.lib.zenmux_client import ZenMuxClient, load_secrets + + load_secrets() + with ZenMuxClient(log_file=project_root / "phase3" / "logs" / "review.jsonl") as client: + path = build_phase3_model_critique( + project_root, + client=client, + model=args.model, + max_context_chars=args.max_context_chars, + ) + else: + path = build_phase3_critique(project_root) print(f"Project: {project_root.name}") print(f"Wrote: {path.relative_to(project_root)}") print("Pause: review critique before Phase 4.") @@ -482,12 +559,31 @@ def cmd_finalize(args: argparse.Namespace) -> int: roles = resolved["roles"] if not args.legacy_translate: + final_input = args.input + if args.number_citations and not args.dry_run: + rc = run_cmd( + [ + sys.executable, + str(REPO_ROOT / "scripts" / "number_citations.py"), + str(project_root), + "--input", + args.input, + "--output", + args.numbered_output, + ], + dry_run=False, + ) + if rc != 0: + return rc + final_input = args.numbered_output + elif args.number_citations: + final_input = args.numbered_output cmd: list[str] = [ sys.executable, str(REPO_ROOT / "scripts" / "build_report.py"), str(project_root), "--input", - args.input, + final_input, ] if args.report_engine: cmd += ["--engine", args.report_engine] @@ -497,6 +593,21 @@ def cmd_finalize(args: argparse.Namespace) -> int: cmd.append("--no-pdf") if args.dry_run: print("Chinese-native finalize plan:") + if args.number_citations: + print( + "$ " + + " ".join( + [ + sys.executable, + str(REPO_ROOT / "scripts" / "number_citations.py"), + str(project_root), + "--input", + args.input, + "--output", + args.numbered_output, + ] + ) + ) print("$ " + " ".join(cmd)) if args.polish: print( @@ -506,8 +617,8 @@ def cmd_finalize(args: argparse.Namespace) -> int: sys.executable, str(REPO_ROOT / "scripts" / "polish.py"), str(project_root), - "--input", - args.input, + "--source", + final_input, "--workers", str(args.polish_workers), "--model", @@ -522,8 +633,8 @@ def cmd_finalize(args: argparse.Namespace) -> int: sys.executable, str(REPO_ROOT / "scripts" / "polish.py"), str(project_root), - "--input", - args.input, + "--source", + final_input, "--workers", str(args.polish_workers), "--model", @@ -633,6 +744,30 @@ def cmd_models(args: argparse.Namespace) -> int: return 0 +def cmd_sources(args: argparse.Namespace) -> int: + project_root = resolve_project(args.project) + if args.sources_cmd == "cache": + if args.dry_run: + print(f"Project: {project_root.name}") + print(f"Would cache sources from: {args.sources}") + print(f"Important only: {not args.all}") + print(f"Limit: {args.limit}") + return 0 + results = cache_sources( + project_root, + sources_rel=args.sources, + important_only=not args.all, + limit=args.limit, + force=args.force, + ) + print(f"Project: {project_root.name}") + print(f"Cached source snapshots: {len(results)}") + print("Wrote: phase2/source_cache/md/*.md") + print("Updated: phase2/sources.jsonl") + return 0 + raise SystemExit(f"unknown sources command: {args.sources_cmd}") + + def cmd_apply_models(args: argparse.Namespace) -> int: cmd = [ sys.executable, @@ -672,6 +807,7 @@ def build_parser() -> argparse.ArgumentParser: frame.add_argument("project", help="Project slug or path") frame.add_argument("--method", help="Override research method key") frame.add_argument("--chapters", type=int, default=10) + frame.add_argument("--preserve-existing-outline", action="store_true", help="Keep current framework chapter titles and enrich Phase 1 planning") frame.add_argument("--dry-run", action="store_true") frame.set_defaults(func=cmd_frame) @@ -694,7 +830,9 @@ def build_parser() -> argparse.ArgumentParser: research.add_argument("--workers", type=int, default=6) research.add_argument("--axis", action="append", help="Restrict generated task axes; repeatable") research.add_argument("--profile", help="Model profile name from configs/models.yaml") + research.add_argument("--model-override", action="append", default=[], metavar="ROLE=MODEL", help="Override a role model for this run; repeatable") research.add_argument("--execute-packets", action="store_true", help="Call model workers to fill evidence packets") + research.add_argument("--append-task-cards", action="store_true", help="Append newly generated task cards instead of replacing phase2/task_cards.json") research.add_argument("--allow-search-fallback", action="store_true", help="Allow generic search fallback for specialized routes") research.add_argument("--build-briefs", action="store_true", help="Aggregate packets into chapter briefs") research.add_argument("--assemble-chapters", action="store_true", help="Call model workers to write Chinese chapter drafts") @@ -721,8 +859,12 @@ def build_parser() -> argparse.ArgumentParser: status.add_argument("project", nargs="?", help="Project slug or path") status.set_defaults(func=cmd_status) - review = sub.add_parser("review", help="Run deterministic Phase 3 review") + review = sub.add_parser("review", help="Run Phase 3 review") review.add_argument("project", help="Project slug or path") + review.add_argument("--model-review", action="store_true", help="Run independent model-based Phase 3 review") + review.add_argument("--model", default="zenmux-anthropic/claude-opus-4-7", help="Model for --model-review") + review.add_argument("--max-context-chars", type=int, default=650_000, help="Bounded context size for model review") + review.add_argument("--dry-run", action="store_true") review.set_defaults(func=cmd_review) prompt = sub.add_parser("prompt", help="Print a Codex command prompt template") @@ -745,6 +887,8 @@ def build_parser() -> argparse.ArgumentParser: finalize.add_argument("--input", default="phase4/final_zh.md", help="Chinese Markdown source for default v0.20 finalization") finalize.add_argument("--legacy-translate", action="store_true", help="Use legacy final_en -> translate -> polish pipeline") finalize.add_argument("--polish", action="store_true", help="Run optional Chinese polish step before rendering") + finalize.add_argument("--number-citations", action="store_true", help="Convert [src_xxx] citations to numeric references before rendering") + finalize.add_argument("--numbered-output", default="phase4/final_zh_numbered.md", help="Output path for numeric citation Markdown") finalize.add_argument("--report-engine", choices=["reportlab", "quarto"], default=None) finalize.add_argument("--no-docx", action="store_true") finalize.add_argument("--no-pdf", action="store_true") @@ -781,6 +925,17 @@ def build_parser() -> argparse.ArgumentParser: models.add_argument("--json", action="store_true", help="Emit JSON") models.set_defaults(func=cmd_models) + sources = sub.add_parser("sources", help="Manage source snapshots and source registry") + sources_sub = sources.add_subparsers(dest="sources_cmd", required=True) + sources_cache = sources_sub.add_parser("cache", help="Cache important sources as local Markdown snapshots") + sources_cache.add_argument("project", help="Project slug or path") + sources_cache.add_argument("--sources", default="phase2/sources.jsonl", help="Source registry path relative to project") + sources_cache.add_argument("--all", action="store_true", help="Cache all remote sources, not only important official/Tier 1 sources") + sources_cache.add_argument("--limit", type=int, help="Maximum sources to cache in this run") + sources_cache.add_argument("--force", action="store_true", help="Refetch even if cached_text_path already exists") + sources_cache.add_argument("--dry-run", action="store_true") + sources_cache.set_defaults(func=cmd_sources) + apply_models = sub.add_parser("apply-models", help="Apply profile to agent files") apply_models.add_argument("--profile", required=True, help="Profile name from configs/models.yaml") apply_models.add_argument("--target", choices=["opencode", "codex", "both"], default="both") diff --git a/scripts/lib/search_client.py b/scripts/lib/search_client.py index af38e7f..ce5c1f3 100644 --- a/scripts/lib/search_client.py +++ b/scripts/lib/search_client.py @@ -1,11 +1,12 @@ -"""通用搜索客户端(Serper / Exa / Tavily 路由)。 +"""通用搜索客户端(Tavily / Exa / Brave / Serper 路由)。 为 build_glossary.py 这类术语核查场景服务。 关键设计: - `trust_env=False` 绕开系统 socks 代理(Clash on macOS 配 socks5 时 httpx 会 TLS EOF) - 专利 / Scholar / News 优先 Serper,保证 Google Patents / Google Scholar 路径被真正调用 -- 通用网页 Exa 优先,Tavily fallback +- 通用网页 Tavily 优先,Exa/Brave fallback +- 证据发现 Exa 优先,用 highlights/text 摘录喂给 evidence packet - 遇到配额问题自动降级或返回 empty - 不做深度 crawl,只要摘要 """ @@ -47,13 +48,29 @@ class ExaClient: def __exit__(self, *_args: Any) -> None: self.close() - def search(self, query: str, *, num_results: int = 5) -> list[SearchHit]: + def search( + self, + query: str, + *, + num_results: int = 5, + search_type: str = "auto", + category: str | None = None, + use_highlights: bool = False, + max_characters: int = 800, + ) -> list[SearchHit]: body = { "query": query, "numResults": num_results, - "type": "auto", - "contents": {"text": {"maxCharacters": 800}}, + "type": search_type, + "contents": {"text": {"maxCharacters": max_characters}}, } + if category: + body["category"] = category + if use_highlights: + body["contents"]["highlights"] = { + "numSentences": 2, + "highlightsPerUrl": 3, + } r = self._client.post( "https://api.exa.ai/search", json=body, @@ -64,11 +81,15 @@ class ExaClient: data = r.json() out: list[SearchHit] = [] for item in data.get("results", [])[:num_results]: + highlights = item.get("highlights") or [] + text = item.get("text") or item.get("snippet") or "" + if highlights: + text = " | ".join(str(h).strip() for h in highlights if str(h).strip()) out.append( SearchHit( title=(item.get("title") or "")[:200], url=item.get("url") or "", - snippet=(item.get("text") or item.get("snippet") or "")[:600], + snippet=text[:1000], ) ) return out @@ -115,10 +136,51 @@ class TavilyClient: return out +class BraveClient: + def __init__(self, api_key: str | None = None, timeout: float = 30.0) -> None: + self.api_key = api_key or os.environ.get("BRAVE_API_KEY") + if not self.api_key: + raise SearchError("BRAVE_API_KEY not set") + self._client = httpx.Client(trust_env=False, timeout=timeout) + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> "BraveClient": + return self + + def __exit__(self, *_args: Any) -> None: + self.close() + + def search(self, query: str, *, num_results: int = 5) -> list[SearchHit]: + r = self._client.get( + "https://api.search.brave.com/res/v1/web/search", + params={"q": query, "count": min(max(num_results, 1), 20)}, + headers={ + "X-Subscription-Token": self.api_key, + "Accept": "application/json", + }, + ) + if r.status_code != 200: + raise SearchError(f"Brave HTTP {r.status_code}: {r.text[:200]}") + data = r.json() + out: list[SearchHit] = [] + for item in (data.get("web") or {}).get("results", [])[:num_results]: + out.append( + SearchHit( + title=(item.get("title") or "")[:200], + url=item.get("url") or "", + snippet=(item.get("description") or "")[:600], + ) + ) + return out + + class SearchClient: """统一搜索门面,支持多路由: - - `search(query)`:通用网页搜索,优先 Exa → 降级 Tavily + - `search(query)`:通用网页搜索,优先 Tavily → Exa → Brave + - `evidence(query)`:证据发现,优先 Exa highlights → Tavily → Brave - `patents(query)`:专利检索,走 Serper(Google Patents);失败则通用搜索补刀 - `scholar(query)`:学术论文,走 Serper Scholar;失败则通用搜索补刀 - `news(query)`:新闻检索,走 Serper News;失败则通用搜索补刀 @@ -129,6 +191,7 @@ class SearchClient: def __init__(self, *, strict_specialized: bool = True) -> None: self._exa: ExaClient | None = None self._tavily: TavilyClient | None = None + self._brave: BraveClient | None = None self._serper = None # 惰性实例化 self.strict_specialized = strict_specialized try: @@ -139,9 +202,13 @@ class SearchClient: self._tavily = TavilyClient() except SearchError: pass + try: + self._brave = BraveClient() + except SearchError: + pass self._has_serper_key = bool(os.environ.get("SERPER_API_KEY") or os.environ.get("SERPAPI_KEY")) - if not (self._exa or self._tavily or self._has_serper_key): - raise SearchError("no search API key available: set SERPER_API_KEY, SERPAPI_KEY, EXA_API_KEY, or TAVILY_API_KEY") + if not (self._exa or self._tavily or self._brave or self._has_serper_key): + raise SearchError("no search API key available: set SERPER_API_KEY, SERPAPI_KEY, EXA_API_KEY, TAVILY_API_KEY, or BRAVE_API_KEY") def _get_serper(self): """惰性创建 SerperClient。没 key 时返回 None。""" @@ -161,6 +228,8 @@ class SearchClient: self._exa.close() if self._tavily: self._tavily.close() + if self._brave: + self._brave.close() if self._serper and self._serper is not False: self._serper.close() @@ -171,17 +240,60 @@ class SearchClient: self.close() def search(self, query: str, *, num_results: int = 5) -> list[SearchHit]: - """通用网页搜索。Exa 首选,Tavily 备选。""" + """通用网页搜索。Tavily 首选,Exa/Brave 备选。""" + if self._tavily: + try: + return self._tavily.search(query, num_results=num_results) + except SearchError: + pass if self._exa: try: return self._exa.search(query, num_results=num_results) except SearchError: pass + if self._brave: + try: + return self._brave.search(query, num_results=num_results) + except SearchError: + pass + return [] + + def evidence( + self, + query: str, + *, + num_results: int = 10, + category: str | None = None, + ) -> list[SearchHit]: + """Evidence discovery route. + + Exa is better suited for agent-facing evidence discovery because it can + return concise highlights/text per URL. Results are still candidate + sources only; downstream packets must score and trace important hits + back to original Tier 1-2 sources before making final claims. + """ + if self._exa: + try: + return self._exa.search( + query, + num_results=num_results, + search_type="auto", + category=category, + use_highlights=True, + max_characters=1200, + ) + except SearchError: + pass if self._tavily: try: return self._tavily.search(query, num_results=num_results) except SearchError: pass + if self._brave: + try: + return self._brave.search(query, num_results=num_results) + except SearchError: + pass return [] def patents(self, query: str, *, num_results: int = 10) -> list[SearchHit]: @@ -253,6 +365,49 @@ class SearchClient: raise SearchError("serper unavailable for news route; refusing silent fallback") return self.search(query, num_results=num_results) + def fda(self, query: str, *, num_results: int = 10) -> list[SearchHit]: + """FDA-focused discovery for warning letters and meeting records. + + FDA enforcement examples are often more useful for GMP remediation than + generic web pages, so this route biases discovery toward warning + letters, inspection/enforcement pages, and meeting materials/minutes. + """ + def fda_only(hits: list[SearchHit]) -> list[SearchHit]: + return [hit for hit in hits if "fda.gov" in (hit.url or "").lower()] + + focused_queries = [ + f'site:fda.gov "Warning Letter" GMP pharmaceutical {query}', + f'site:fda.gov/inspections-compliance-enforcement-and-criminal-investigations "Warning Letter" {query}', + f'site:fda.gov "meeting materials" "pharmaceutical quality" {query}', + f'site:fda.gov "meeting minutes" FDA pharmaceutical quality {query}', + ] + hits: list[SearchHit] = [] + seen: set[str] = set() + per_query = max(2, min(num_results, 4)) + for focused_query in focused_queries: + route_hits: list[SearchHit] = [] + serper = self._get_serper() + if serper: + try: + route_hits = [ + SearchHit(h.title, h.url, h.snippet) + for h in serper.search(focused_query, num_results=per_query) + ] + except Exception as exc: + if self.strict_specialized: + raise SearchError(f"serper FDA search failed: {exc}") from exc + if not route_hits and not self.strict_specialized: + route_hits = self.search(focused_query, num_results=per_query) + for hit in fda_only(route_hits): + key = hit.url or hit.title + if not key or key in seen: + continue + seen.add(key) + hits.append(hit) + if len(hits) >= num_results: + return hits + return hits + if __name__ == "__main__": from scripts.lib.zenmux_client import load_secrets diff --git a/scripts/number_citations.py b/scripts/number_citations.py new file mode 100644 index 0000000..4f91a3f --- /dev/null +++ b/scripts/number_citations.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +"""Convert Deep Research source IDs into numeric citations for final output.""" + +from __future__ import annotations + +import argparse +import json +import re +from pathlib import Path +from typing import Any + + +SRC_CITE_RE = re.compile(r"\[((?:src_[A-Za-z0-9_-]+)(?:\s*,\s*src_[A-Za-z0-9_-]+)*)\]") + + +def load_sources(path: Path) -> dict[str, dict[str, Any]]: + sources: dict[str, dict[str, Any]] = {} + if not path.exists(): + return sources + for line in path.read_text(encoding="utf-8").splitlines(): + if not line.strip(): + continue + try: + obj = json.loads(line) + except json.JSONDecodeError: + continue + sid = obj.get("id") or obj.get("source_id") + if sid: + sources[str(sid)] = obj + return sources + + +def extract_ordered_source_ids(text: str) -> list[str]: + ordered: list[str] = [] + seen: set[str] = set() + for match in SRC_CITE_RE.finditer(text): + for sid in [item.strip() for item in match.group(1).split(",")]: + if sid and sid not in seen: + seen.add(sid) + ordered.append(sid) + return ordered + + +def _canonical_source_key(sid: str, source: dict[str, Any] | None) -> str: + """Return a stable de-duplication key for a source record. + + Phase 2 often creates chapter-local source IDs for the same local PDF or + official guideline. Final references should cite the underlying source + once, while citation_map.json keeps the full src_id traceability. + """ + if not source: + return f"missing:{sid}" + title = re.sub(r"\s+", " ", str(source.get("title") or source.get("name") or sid)).strip().lower() + title = title.removesuffix(" ocr").removesuffix(".ocr").strip() + doi = str(source.get("doi") or "").strip().lower() + if doi: + return f"doi:{doi}" + path = str(source.get("path") or "").strip() + url = str(source.get("url") or "").strip() + if title and ("phase0/extracted/" in path or "phase0/extracted/" in url): + return f"local-material:{title}" + for field in ("url", "path"): + value = str(source.get(field) or "").strip() + if value: + return f"{field}:{value.rstrip('/').lower()}" + return f"title:{title or sid}" + + +def build_numeric_mapping( + ordered_ids: list[str], + sources: dict[str, dict[str, Any]], +) -> tuple[dict[str, int], list[dict[str, Any]]]: + mapping: dict[str, int] = {} + records: list[dict[str, Any]] = [] + seen_keys: dict[str, int] = {} + record_by_number: dict[int, dict[str, Any]] = {} + for sid in ordered_ids: + source = sources.get(sid) + key = _canonical_source_key(sid, source) + if key in seen_keys: + number = seen_keys[key] + mapping[sid] = number + record_by_number[number].setdefault("source_ids", []).append(sid) + continue + number = len(records) + 1 + seen_keys[key] = number + mapping[sid] = number + record = { + "number": number, + "source_id": sid, + "source_ids": [sid], + "source": source or {}, + "dedupe_key": key, + } + records.append(record) + record_by_number[number] = record + return mapping, records + + +def format_reference(number: int, sid: str, source: dict[str, Any] | None) -> str: + if not source: + return f"{number}. {sid}. (sources.jsonl 未找到该来源)" + authors = ", ".join(source.get("authors", [])) if source.get("authors") else "" + year = source.get("year") or source.get("date") or "" + title = source.get("title") or source.get("name") or sid + title = re.sub(r"(?i)(?:\s+OCR|\.ocr)$", "", str(title)).strip() + publisher = source.get("publisher") or source.get("venue") or source.get("source") or "" + url = source.get("url") or source.get("path") or "" + parts = [f"{number}. "] + if authors: + parts.append(f"{authors}. ") + if year: + parts.append(f"({year}). ") + parts.append(str(title)) + if publisher: + parts.append(f". {publisher}") + if url: + parts.append(f". {url}") + return "".join(parts) + + +def convert_citations(text: str, mapping: dict[str, int]) -> str: + def repl(match: re.Match[str]) -> str: + ids = [item.strip() for item in match.group(1).split(",") if item.strip()] + nums: list[str] = [] + seen: set[int] = set() + for sid in ids: + if sid not in mapping: + continue + number = mapping[sid] + if number in seen: + continue + seen.add(number) + nums.append(str(number)) + return "[" + ", ".join(nums) + "]" if nums else match.group(0) + + return SRC_CITE_RE.sub(repl, text) + + +def strip_existing_reference_section(text: str) -> str: + pattern = re.compile(r"\n##\s*(?:参考文献|参考来源清单|References)\s*\n.*\Z", re.S) + return pattern.sub("", text).rstrip() + "\n" + + +def number_citations( + *, + text: str, + sources: dict[str, dict[str, Any]], +) -> tuple[str, list[dict[str, Any]]]: + ordered_ids = extract_ordered_source_ids(text) + mapping, records = build_numeric_mapping(ordered_ids, sources) + body = convert_citations(strip_existing_reference_section(text), mapping).rstrip() + ref_lines = ["", "## 参考来源清单", ""] + for record in records: + ref_lines.append(format_reference(record["number"], record["source_id"], record["source"])) + return body + "\n" + "\n".join(ref_lines).rstrip() + "\n", records + + +def main() -> int: + parser = argparse.ArgumentParser(description="Convert [src_xxx] citations to numeric citations") + parser.add_argument("project", help="Project directory") + parser.add_argument("--input", default="phase4/final_zh.md") + parser.add_argument("--output", default="phase4/final_zh_numbered.md") + parser.add_argument("--sources", default="phase2/sources.jsonl") + parser.add_argument("--map", default="phase4/citation_map.json") + args = parser.parse_args() + + project = Path(args.project) + src_path = project / args.input + out_path = project / args.output + sources_path = project / args.sources + map_path = project / args.map + if not src_path.exists(): + raise SystemExit(f"input not found: {src_path}") + sources = load_sources(sources_path) + numbered, records = number_citations(text=src_path.read_text(encoding="utf-8"), sources=sources) + out_path.parent.mkdir(parents=True, exist_ok=True) + out_path.write_text(numbered, encoding="utf-8") + map_path.parent.mkdir(parents=True, exist_ok=True) + map_path.write_text(json.dumps(records, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + print(f"Wrote: {out_path.relative_to(project)}") + print(f"Wrote: {map_path.relative_to(project)}") + print(f"Citations: {len(records)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/polish.py b/scripts/polish.py index 37d83a2..afc2656 100644 --- a/scripts/polish.py +++ b/scripts/polish.py @@ -33,6 +33,7 @@ from scripts.lib.markdown_chunker import ( split_by_headers, ) from scripts.lib.zenmux_client import ZenMuxClient, ZenMuxError, load_secrets +from scripts.runtime.skills import SkillRegistry DEFAULT_MODEL = "anthropic/claude-sonnet-4.6" MODEL_MAX_TOKENS = { @@ -43,6 +44,16 @@ MODEL_MAX_TOKENS = { "anthropic/claude-haiku-4.5": 16000, } PROMPT_FILE = Path(__file__).parent / "prompts" / "polish_system.txt" +POLISH_SKILLS = ("humanizer-cn", "output-hygiene") + + +def build_polish_system_prompt(skill_registry: SkillRegistry | None = None) -> str: + """Build the Phase 4 polish prompt with canonical writing skills attached.""" + registry = skill_registry or SkillRegistry() + parts = [PROMPT_FILE.read_text(encoding="utf-8").rstrip()] + for skill_name in POLISH_SKILLS: + parts.append(f"# Skill: {skill_name}\n\n{registry.read(skill_name).rstrip()}") + return "\n\n".join(parts) + "\n" def resolve_project(arg: str) -> Path: @@ -163,7 +174,7 @@ def main() -> int: log_file = logs_dir / "polish.jsonl" notes_file = project_root / "phase4" / "polish_notes.jsonl" - system_prompt = PROMPT_FILE.read_text(encoding="utf-8") + system_prompt = build_polish_system_prompt() text = src_path.read_text(encoding="utf-8") blocks = split_by_headers(text, max_level=2) diff --git a/scripts/runtime/assembly.py b/scripts/runtime/assembly.py index 4bf9e40..6e6a2e7 100644 --- a/scripts/runtime/assembly.py +++ b/scripts/runtime/assembly.py @@ -91,34 +91,82 @@ def _chapter_title_from_id(chapter_id: str) -> str: return chapter_id +def _load_source_registry(sources_path: Path, source_ids: list[str]) -> list[dict]: + wanted = set(source_ids) + if not sources_path.exists() or not wanted: + return [] + rows: list[dict] = [] + for line in sources_path.read_text(encoding="utf-8").splitlines(): + if not line.strip(): + continue + try: + row = json.loads(line) + except json.JSONDecodeError: + continue + if row.get("id") in wanted: + rows.append(row) + return rows + + +def _cached_source_excerpts(project_root: Path, cached_paths: list[str], *, max_sources: int = 5, max_chars: int = 1400) -> list[dict]: + excerpts: list[dict] = [] + for rel in cached_paths[:max_sources]: + path = project_root / rel + if not path.exists(): + continue + text = path.read_text(encoding="utf-8", errors="ignore").strip() + excerpts.append({"path": rel, "excerpt": text[:max_chars]}) + return excerpts + + def build_chapter_briefs(project_root: Path) -> list[dict]: cards = load_task_cards(project_root / "phase2" / "task_cards.json") grouped: dict[str, list[tuple[str, dict]]] = {} + skipped_packets: list[dict[str, str]] = [] for card in cards: packet_path = project_root / card.output_packet if not packet_path.exists(): + skipped_packets.append({"task_id": card.task_id, "reason": "packet file missing"}) continue packet = json.loads(packet_path.read_text(encoding="utf-8")) - validate_packet(packet) + try: + validate_packet(packet) + except Exception as exc: + skipped_packets.append({"task_id": card.task_id, "reason": str(exc)}) + continue for chapter_id in card.chapter_ids: grouped.setdefault(chapter_id, []).append((card.task_id, packet)) briefs: list[dict] = [] out_dir = project_root / "phase2" / "chapter_briefs" out_dir.mkdir(parents=True, exist_ok=True) + if skipped_packets: + (project_root / "phase2" / "brief_warnings.json").write_text( + json.dumps(skipped_packets, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) for chapter_id in sorted(grouped): - packet_pairs = sorted(grouped[chapter_id], key=lambda item: item[0]) + packet_pairs = grouped[chapter_id] packet_ids = [item[0] for item in packet_pairs] packets = [item[1] for item in packet_pairs] source_ids = sorted({sid for packet in packets for sid in packet.get("source_ids", [])}) + source_registry = _load_source_registry(project_root / "phase2" / "sources.jsonl", source_ids) + cached_paths = [ + source["cached_text_path"] + for source in source_registry + if source.get("cached_text_path") + ] + chapter_title = next((card.chapter_title for card in cards if chapter_id in card.chapter_ids and card.chapter_title), None) brief = { "chapter_id": chapter_id, - "chapter_title": _chapter_title_from_id(chapter_id), + "chapter_title": chapter_title or _chapter_title_from_id(chapter_id), "packet_ids": packet_ids, "core_claims": [claim for packet in packets for claim in packet.get("claims", [])], "evidence_items": [item for packet in packets for item in packet.get("evidence_items", [])], "counter_evidence": [item for packet in packets for item in packet.get("counter_evidence", [])], "source_ids": source_ids, + "cached_source_paths": cached_paths, + "cached_source_excerpts": _cached_source_excerpts(project_root, cached_paths), "open_questions": [q for packet in packets for q in packet.get("open_questions", [])], "assembly_notes": [ "用中文写正式章节,英文仅保留在必要的来源标题、原文摘录、DOI/URL 中。", @@ -190,6 +238,8 @@ def build_compressed_findings(project_root: Path) -> list[dict]: ], "counter_evidence": brief["counter_evidence"], "source_ids": brief["source_ids"], + "cached_source_paths": brief.get("cached_source_paths", []), + "cached_source_excerpts": brief.get("cached_source_excerpts", []), "open_questions": brief["open_questions"], "writing_plan": [ "先写本章判断,不按 packet 顺序堆砌。", @@ -211,6 +261,7 @@ def build_chapter_user_prompt(brief: dict) -> str: "请根据以下 compressed finding / chapter brief 写一章正式中文 Markdown 正文。\n" "目标是形成一个完整章节,而不是 packet 摘要。避免碎片化,按金字塔结构组织:章首先给结论,再用证据支撑。\n" "要求:标题必须是观点型判断;每个数字和事实保留 [src_xxx];纳入反方证据;不要出现调度元数据。\n" + "如 brief 中包含 cached_source_paths,说明这些是已抓取到本地的核心一手/权威信源快照;优先使用 packet 已摘录的原文,并在证据不足时标记需要从本地快照补摘录,不要重新联网检索。\n" "禁止写空泛咨询腔。每个二级小节都必须至少落下 2 个具体审计发现、法规要求、SOP/记录/参数/现场观察或整改证据;不要只写原则。\n" "正文末尾必须增加“证据落点与待补证据”小节,用表格列出:关键判断、已使用证据 source_id、已落地整改动作、仍缺证据。若证据不足,直接标注需回炉 Phase 2,不要用泛泛表述补齐。\n" "只输出 Markdown,不要输出解释。\n\n" @@ -238,6 +289,7 @@ class ChapterAssemblyWorker: except FileNotFoundError: skill_texts.append(f"# Skill: {name}\n\n[missing skill: {name}]") return ( + f"{self.role.identity}\n\n" "你是 Deep Research v0.20 的中文章节组装 worker。\n" "你的职责是把结构化证据包收束成连贯章节,解决并发研究造成的碎片化。\n" "不得编造来源,不得删除关键反方证据。\n\n" diff --git a/scripts/runtime/methods.py b/scripts/runtime/methods.py index 6d5c1fc..c845f4c 100644 --- a/scripts/runtime/methods.py +++ b/scripts/runtime/methods.py @@ -21,6 +21,7 @@ class ResearchMethod: structure_principle: str task_axes: list[str] framework_sections: list[str] + integrated_lanes: list[str] class ResearchMethodRegistry: @@ -56,5 +57,5 @@ class ResearchMethodRegistry: structure_principle=item.get("structure_principle", ""), task_axes=list(item.get("task_axes") or []), framework_sections=list(item.get("framework_sections") or []), + integrated_lanes=list(item.get("integrated_lanes") or item.get("task_axes") or []), ) - diff --git a/scripts/runtime/orchestrator.py b/scripts/runtime/orchestrator.py index 8e622c9..7270eb9 100644 --- a/scripts/runtime/orchestrator.py +++ b/scripts/runtime/orchestrator.py @@ -32,6 +32,15 @@ def create_phase2_task_cards( framework_text = framework.read_text(encoding="utf-8") if research_brief_path.exists(): research_brief = json.loads(research_brief_path.read_text(encoding="utf-8")) + if not research_brief.get("materials"): + material_inventory = load_manifest(project_root).get("material_inventory") or [] + materials = [] + for item in material_inventory: + rel = item.get("ocr_extracted_to") or item.get("extracted_to") or item.get("copied_to") + if rel: + materials.append({"path": rel, "role": "input_material"}) + if materials: + research_brief["materials"] = materials cards = generate_task_cards_from_research_brief( project_root.name, framework_text, diff --git a/scripts/runtime/phase1.py b/scripts/runtime/phase1.py index 56c9fed..88909bd 100644 --- a/scripts/runtime/phase1.py +++ b/scripts/runtime/phase1.py @@ -192,10 +192,10 @@ def write_material_brief( def _axis_prompt_brief(axis: str, method: ResearchMethod) -> str: prompts = { "input_material_findings": "从用户材料中提取现场事实、审计发现、复盘记录和内部答复,并标注原始材料位置。", - "nmpa_fda_ema_ich_who_baseline": "把 NMPA、FDA、EMA、ICH、WHO、药典或 Annex 1 等要求转化为可核验的法规基线。", - "quality_system_gap": "把现场发现映射到质量体系流程缺口,覆盖偏差、变更、CAPA、文件、培训和数据完整性。", - "manufacturing_process_risk": "围绕生产工艺、设施、公用系统、CPP/CQA、验证和无菌保障识别系统性风险。", - "operations_management_gap": "诊断运营管理、跨部门协同、会议机制、指标体系和交付节奏的结构性问题。", + "nmpa_fda_ema_ich_who_baseline": "把 NMPA、FDA、EMA、ICH、WHO、药典或 Annex 1 等要求转化为可核验的法规基线,并纳入 FDA warning letters 与会议材料作为执法尺度参照。", + "quality_system_gap": "把现场发现映射到质量体系流程缺口,覆盖偏差、变更、CAPA、文件、培训和数据完整性;优先检索 FDA warning letters 中同类缺陷的执法表述。", + "manufacturing_process_risk": "围绕生产工艺、设施、公用系统、CPP/CQA、验证和无菌保障识别系统性风险,并用 FDA warning letters / inspection enforcement examples 校准严重度。", + "operations_management_gap": "诊断运营管理、跨部门协同、会议机制、指标体系和交付节奏的结构性问题,并参考 FDA 会议纪要/meeting materials 中对质量治理的关注点。", "team_capability": "识别人员能力、岗位职责、质量文化和管理梯队方面的缺口与建设路径。", "capa_roadmap": "把差距转化为短中长期 CAPA 组合,要求绑定 owner、期限、优先级、关闭证据和复核机制。", "verification_evidence": "定义整改完成后可被审计接受的验证证据,包括记录、报告、趋势和管理评审输入。", @@ -213,13 +213,366 @@ def _material_paths(manifest: dict[str, Any]) -> list[dict[str, str]]: return materials +def _keywords_from_title(title: str) -> list[str]: + english = re.findall(r"[A-Za-z][A-Za-z0-9/+-]{1,}", title) + chinese_parts = re.split(r"[,,、;;::\s]+|和|与|及|的|在|为|从|来自|集中|决定|需要|形成|成为|不是|而是", title) + domain_terms = [ + "审计", + "商业化", + "阶段门", + "风险", + "法规", + "欧盟", + "NMPA", + "GMP", + "ICH", + "无菌", + "RABS", + "First Air", + "APS", + "灯检", + "隧道", + "原液", + "WFI", + "SCADA", + "EMS", + "CPP", + "CQA", + "PPQ", + "清洁验证", + "偏差", + "变更", + "CAPA", + "数据完整性", + "人员", + "培训", + "质量文化", + "运营", + "跨部门", + "指标", + "团队", + "CDMO", + "整改", + "owner", + ] + title_terms = [term for term in domain_terms if term in title] + keywords = [item.strip() for item in [*english, *title_terms, *chinese_parts] if len(item.strip()) >= 2] + seen: set[str] = set() + unique: list[str] = [] + for keyword in keywords: + if keyword not in seen: + seen.add(keyword) + unique.append(keyword) + return unique[:12] + + +def _material_lines_for_chapter(project_root: Path, manifest: dict[str, Any], title: str, *, limit: int = 4) -> list[str]: + keywords = _keywords_from_title(title) + candidates: list[tuple[int, int, str]] = [] + order = 0 + for item in manifest.get("material_inventory") or []: + rel = item.get("ocr_extracted_to") or item.get("extracted_to") + if not rel: + continue + path = project_root / rel + if not path.exists(): + continue + for raw in path.read_text(encoding="utf-8").splitlines(): + line = raw.strip() + if len(line) < 8 or len(line) > 220: + continue + if line.startswith("#") or line.startswith("- source_path:") or line.startswith("- extracted_at:"): + continue + if "OCR Material:" in line: + continue + if re.match(r"^(审计对象|审计执行方|审计执行人|审计时间)[::]", line): + continue + score = sum(1 for keyword in keywords if keyword and keyword in line) + if score: + order += 1 + candidates.append((score, order, f"{rel}:{line}")) + candidates.sort(key=lambda item: (-item[0], item[1])) + return [line for _, _, line in candidates[:limit]] + + +def _minimum_evidence_for_method(method: ResearchMethod) -> dict[str, Any]: + if method.key == "gmp_quality_operations_diagnosis": + return { + "local_material_quotes": 2, + "official_regulatory_or_guideline_sources": 2, + "enforcement_or_best_practice_precedents": 1, + "counter_evidence_or_boundary_conditions": 1, + "actionable_remediation_items": 3, + } + return { + "high_quality_sources": 4, + "tier_1_2_sources": 2, + "counter_evidence_or_boundary_conditions": 1, + "decision_relevant_implications": 2, + } + + +def _central_thesis(manifest: dict[str, Any], method: ResearchMethod) -> str: + topic = manifest.get("topic") or manifest.get("report_title") or "本研究主题" + if method.key == "gmp_quality_operations_diagnosis": + return ( + f"初始主判断:{topic} 不应只按审计风险项数量来评价,而应从商业化 readiness、" + "质量体系运行成熟度、生产工艺证据链和运营协同能力四条线同时诊断。Phase 2 必须用" + "现场材料原文、官方法规/指南、执法案例或标杆实践来证明、修正或推翻这一判断。" + ) + return ( + f"初始主判断:{topic} 需要先形成可被证据推翻的观点型框架,再由 Phase 2 按方法论证据线" + "逐项求证;不能把并发检索结果直接堆砌成报告。" + ) + + +def _strategy_for_chapter(title: str, method: ResearchMethod) -> dict[str, Any]: + """Return non-tautological Phase 1 strategy text for a chapter title.""" + if method.key != "gmp_quality_operations_diagnosis": + return { + "core_question": f"本章需要判断:在什么证据条件下“{title}”成立,它会怎样改变最终决策?", + "bold_hypothesis": f"初始假设不是复述标题,而是预判“{title}”背后存在一个可被验证的因果机制;Phase 2 需要找证据支持、修正或推翻这个机制。", + "writing_claim": f"本章要把“{title}”写成一个可被证据检验的判断,而不是资料综述。", + "counter_evidence": [ + "是否存在更简单的替代解释,能削弱本章主判断?", + "关键证据是否只来自单一来源或利益相关来源?", + "是否有反例显示本章判断只适用于部分场景?", + ], + } + + strategies = [ + ( + ("审计", "阶段门"), + { + "core_question": "审计报告的低/中风险项计数,是否低估了白帆从临床/受托生产走向商业化标准时需要跨过的阶段门?", + "bold_hypothesis": "初始假设:白帆的硬件和文件基础总体可用,但审计材料暴露的是商业化 readiness 缺口,而不是简单的若干孤立缺陷;Phase 2 应验证这些缺口是否集中在无菌保障、工艺验证、质量闭环和运营节奏。", + "writing_claim": "本章要先把“风险项清单”翻译成管理层可决策的阶段门地图,说明哪些问题影响商业化放行、客户审计和技术转移节奏。", + "counter_evidence": [ + "是否已有整改证据证明这些问题只是审计时点的临时缺口?", + "低/中风险评级是否足以说明商业化阶段门影响有限?", + "审计范围有限是否导致本章不能外推到整体体系成熟度?", + ], + }, + ), + ( + ("法规", "欧盟", "NMPA", "ICH"), + { + "core_question": "如果按 EU Annex 1、NMPA GMP、ICH Q9/Q10 以及 FDA 执法尺度校准,哪些现场发现的严重度和整改优先级会发生变化?", + "bold_hypothesis": "初始假设:白帆按国内 GMP 逻辑已具备基础合规框架,但若以欧盟无菌标准和质量风险管理要求衡量,部分“低风险/建议项”会转化为体系成熟度缺口。", + "writing_claim": "本章要建立后文共用的法规基线,避免整改优先级只跟随原审计评级,而忽略国际化和商业化标准。", + "counter_evidence": [ + "相关国际标准是否并不适用于当前产品阶段或委托生产边界?", + "NMPA 与欧盟/美国要求之间是否存在可接受差异?", + "是否有企业内部标准已经覆盖但审计材料未呈现?", + ], + }, + ), + ( + ("无菌", "RABS", "First Air", "APS", "灯检"), + { + "core_question": "制剂线的主要无菌风险,是硬件布局不足,还是人员干预、首次气流保护、APS 覆盖和灯检标准执行证据不足?", + "bold_hypothesis": "初始假设:白帆制剂车间硬件基础并非主要短板,真正风险在于关键无菌行为和模拟验证是否能持续证明受控;Phase 2 应重点查 First Air、RABS 干预、APS 场景设计和灯检阳性样品管理。", + "writing_claim": "本章要把无菌保障从“设施看起来合规”推进到“关键操作和验证证据可被审计接受”。", + "counter_evidence": [ + "现场是否已有完整视频复核、APS 覆盖和再培训有效性证据?", + "观察到的无菌动作问题是否只是个别人员或单次拍摄偏差?", + "灯检和 RABS 风险是否已有 SOP、趋势和复核记录闭环?", + ], + }, + ), + ( + ("原液", "WFI", "SCADA", "EMS"), + { + "core_question": "原液和公用系统的风险是否被一次性封闭工艺掩盖,真正缺口在 WFI、SCADA/EMS、离线记录和异常升级证据链?", + "bold_hypothesis": "初始假设:一次性反应器和封闭转移降低了暴露风险,但不能自动证明系统受控;Phase 2 应验证 WFI 冷却回流、环境/压差报警、SCADA 数据和离线检测记录是否形成完整证据链。", + "writing_claim": "本章要说明原液与公用系统不是“硬件先进即可”,而是要证明关键状态、报警、数据和异常处理持续受控。", + "counter_evidence": [ + "WFI、SCADA/EMS 和离线记录是否已有验证报告与趋势复核?", + "一次性系统是否已经充分降低共线和交叉污染风险?", + "被指出的公用系统风险是否只是设计建议而非实际偏差?", + ], + }, + ), + ( + ("工艺", "CPP", "CQA", "PPQ", "清洁验证"), + { + "core_question": "现有 IND 阶段工艺规程和批记录,距离商业化 PPQ、控制策略和清洁验证所需证据还差在哪里?", + "bold_hypothesis": "初始假设:白帆目前的工艺文件足以支撑临床阶段执行,但不足以支撑商业化批记录、CPP/CQA 控制、PPQ 和清洁验证闭环;Phase 2 应查明哪些字段、参数和验证证据必须前置补齐。", + "writing_claim": "本章要把技术转移风险具体化为文件、参数、验证和批记录的硬门槛。", + "counter_evidence": [ + "是否已有商业化模板、控制策略或 PPQ 草案未体现在审计材料中?", + "当前项目阶段是否尚不需要完整商业化批记录要求?", + "清洁验证和工艺验证是否已有主计划覆盖?", + ], + }, + ), + ( + ("偏差", "变更", "CAPA", "数据完整性"), + { + "core_question": "白帆的问题是没有质量流程,还是流程之间的事件分类、升级、CAPA 有效性和数据完整性尚未形成运行闭环?", + "bold_hypothesis": "初始假设:白帆已有偏差、变更和 CAPA 的流程框架,但事件何时启动偏差、何时作为变更、如何证明 CAPA 有效,以及电子/纸质数据如何贯通,仍存在运行机制缺口。", + "writing_claim": "本章要把质量体系从“有 SOP”推进到“事件能被正确分类、调查、纠正、验证并趋势复核”。", + "counter_evidence": [ + "是否有趋势分析、管理评审和 CAPA effectiveness check 证明体系已经闭环?", + "个别事件分类问题是否不足以代表体系性缺口?", + "电子系统和纸质记录之间是否已有数据完整性控制?", + ], + }, + ), + ( + ("人员", "培训", "质量文化"), + { + "core_question": "培训记录齐全是否真的转化为一线无菌行为、偏差判断和质量风险意识?哪些证据能证明培训有效?", + "bold_hypothesis": "初始假设:白帆不缺培训台账,缺的是把培训结果转化为现场行为的一致性证据;如果 First Air、干预动作、事件判断和灯检执行仍需反复提醒,问题就不是“再培训一次”,而是培训有效性确认和质量文化运行机制不足。", + "writing_claim": "本章要把人员问题从“有没有培训”改写为“培训是否改变行为、降低风险、形成可复核证据”。", + "counter_evidence": [ + "现场抽问、资格确认和再培训记录是否已证明人员理解到位?", + "被观察到的行为问题是否只发生在少数岗位或单次演示?", + "是否有岗位胜任力矩阵、年度复评和行为观察数据支撑人员能力?", + ], + }, + ), + ( + ("运营", "跨部门", "指标", "review"), + { + "core_question": "白帆当前整改和生产准备依赖个人推动,还是已经形成跨部门例会、问题升级、指标看板和管理层复核的运营系统?", + "bold_hypothesis": "初始假设:运营短板不在于团队不努力,而在于缺少固定节奏和可视化管理系统;如果 owner、关闭证据、升级阈值和管理层 review 不稳定,整改会停留在临时协调,难以支撑商业化节奏。", + "writing_claim": "本章要说明运营管理是 GMP 风险的放大器:没有节奏、看板和升级机制,技术和质量问题会反复跨部门漂移。", + "counter_evidence": [ + "是否已经存在稳定 PMO/例会/看板,只是未进入审计材料?", + "短期临时协调是否足以覆盖当前项目阶段,不需要完整运营系统?", + "owner、期限和关闭证据是否已经在复盘文件中基本清楚?", + ], + }, + ), + ( + ("团队", "CDMO", "能力矩阵"), + { + "core_question": "对标成熟 CDMO,白帆最需要补齐的是人数、岗位能力,还是 QA/MSAT/工程/项目管理之间的角色分工?", + "bold_hypothesis": "初始假设:白帆的能力缺口不是简单扩编,而是商业化 CDMO 所需的角色矩阵尚未完全成型;Phase 2 应验证 QA 独立性、MSAT 工艺支持、工程保障、生产班组和 PMO 协同能力。", + "writing_claim": "本章要给出面向商业化的团队能力地图,说明哪些能力必须自建,哪些可外部支持,哪些要通过机制补齐。", + "counter_evidence": [ + "现有人员是否已具备商业化经验,只是材料未体现?", + "对标 CDMO 是否会高估当前阶段所需组织复杂度?", + "是否可通过顾问、外包或客户支持临时补足能力?", + ], + }, + ), + ( + ("整改", "owner", "路线图"), + { + "core_question": "哪些整改必须立即完成,哪些属于体系补强,哪些是能力建设?每项如何绑定 owner、关闭证据和复核窗口?", + "bold_hypothesis": "初始假设:如果整改只按问题清单逐条关闭,会漏掉体系性根因;更有效的路线应分为立即纠偏、90 天体系补强和中长期能力建设三层,并为每层定义关闭证据。", + "writing_claim": "本章要把诊断转化为可执行 CAPA 组合,而不是泛泛的改进建议。", + "counter_evidence": [ + "是否已有整改计划足以覆盖 owner、期限、关闭证据和 QA verification?", + "部分整改是否应前移或后移,避免资源过载?", + "哪些建议若缺少法规证据,不应被列为强制整改?", + ], + }, + ), + ( + ("管理层", "CAPA", "总表"), + { + "core_question": "管理层应通过什么样的 CAPA 总表、法规映射表和复核节奏,持续判断整改是否真正降低风险?", + "bold_hypothesis": "初始假设:白帆需要的不只是一次性报告,而是一套管理层可追踪的整改仪表盘;否则 CAPA 关闭会变成文件动作,无法证明风险趋势下降和商业化 readiness 提升。", + "writing_claim": "本章要把报告成果固化成管理层治理工具:CAPA 总表、法规映射、证据包和复核节奏。", + "counter_evidence": [ + "现有管理评审或质量例会是否已经能承担这个功能?", + "过度表格化是否会增加一线负担而不改善风险?", + "哪些指标真正能反映风险降低,而不是制造形式化 KPI?", + ], + }, + ), + ] + for needles, strategy in strategies: + if any(needle in title for needle in needles): + return strategy + return { + "core_question": f"本章需要判断“{title}”背后的真实风险、适用边界和整改优先级。", + "bold_hypothesis": f"初始假设:{title} 不是孤立问题,而是质量体系、工艺证据或运营机制中的一个可验证缺口;Phase 2 必须用材料原文和外部证据判断其严重度。", + "writing_claim": f"本章要把“{title}”转化为可执行的诊断结论和整改要求。", + "counter_evidence": [ + "该问题是否已有充分整改或验证证据?", + "是否只是阶段性限制,而非系统性缺口?", + "外部标准是否适用于当前业务边界?", + ], + } + + +def build_chapter_planning( + project_root: Path, + manifest: dict[str, Any], + method: ResearchMethod, + titles: list[str], + *, + quota: int, +) -> list[dict[str, Any]]: + """Build hypothesis-driven chapter plans that become Phase 2 prompt context.""" + lanes = list(method.integrated_lanes or method.task_axes) + minimum_evidence = _minimum_evidence_for_method(method) + plans: list[dict[str, Any]] = [] + for idx, title in enumerate(titles, start=1): + chapter_id = f"ch{idx:02d}" + material_lines = _material_lines_for_chapter(project_root, manifest, title) + if not material_lines: + material_lines = ["未在材料中自动匹配到足够线索;Phase 2 必须先回读全部输入材料并补充原文摘录。"] + strategy = _strategy_for_chapter(title, method) + core_question = strategy["core_question"] + bold_hypothesis = strategy["bold_hypothesis"] + verification_plan = [ + "先从允许的本地材料提取 2-4 条原文证据,保留出处和上下文。", + f"再按方法论 evidence lanes 求证:{';'.join(lanes)}。", + "每个核心判断至少匹配 2 个独立高质量来源;不足时降级为待验证判断。", + "主动搜索反方证据、低严重度解释、适用范围限制或替代原因。", + "输出时把证据、判断、整改/建议和待补证据分开,避免直接写成散文化正文。", + ] + counter_evidence = strategy["counter_evidence"] + writing_claim = strategy["writing_claim"] + phase2_prompt_context = "\n".join( + [ + f"章节:{chapter_id} {title}", + core_question, + bold_hypothesis, + "材料起点:", + *[f"- {line}" for line in material_lines], + "求证路线:", + *[f"- {item}" for item in verification_plan], + "必须寻找的反方/边界:", + *[f"- {item}" for item in counter_evidence], + f"写作主张:{writing_claim}", + f"最低证据要求:{json.dumps(minimum_evidence, ensure_ascii=False)}", + ] + ) + plans.append( + { + "chapter_id": chapter_id, + "title": title, + "suggested_words": quota, + "core_question": core_question, + "bold_hypothesis": bold_hypothesis, + "why_this_matters": "本章用于把 Phase1 的判断转化为 Phase2 可验证命题,并为最终报告保留清晰主线。", + "material_starting_points": material_lines, + "evidence_lanes": lanes, + "verification_plan": verification_plan, + "counter_evidence_to_seek": counter_evidence, + "writing_claim": writing_claim, + "minimum_evidence": minimum_evidence, + "phase2_prompt_context": phase2_prompt_context, + } + ) + return plans + + def build_research_brief_payload( project_root: Path, manifest: dict[str, Any], method: ResearchMethod, + chapter_planning: list[dict[str, Any]] | None = None, ) -> dict[str, Any]: """Create the file-backed Phase 1 research brief used by task-card generation.""" axes = list(method.task_axes) + chapter_planning = chapter_planning or [] return { "version": "0.21-alpha", "topic": manifest.get("topic", project_root.name), @@ -228,6 +581,13 @@ def build_research_brief_payload( "work_language": "zh", "tone": "事实型、整改导向、面向管理层和质量/生产负责人;避免空泛咨询腔。", "central_question": f"如何基于已提供材料和权威法规/最佳实践,系统诊断“{manifest.get('topic', project_root.name)}”并形成可执行整改路线图?", + "central_thesis": _central_thesis(manifest, method), + "phase_logic": { + "phase1": "大胆假设:结合输入材料、访谈信息和初步搜索,定下主基调、章节命题和求证路线。", + "phase2": "小心求证:worker 只围绕 Phase1 命题收集、验证、证伪和补证,不自行重写研究方向。", + "phase3": "一致性审校:检查 Phase1 假设与 Phase2 证据是否自洽,指出需要回炉的章节或证据缺口。", + }, + "phase2_mode": "chapter_integrated", "success_criteria": [ "每个核心判断都能回到用户材料、权威法规、最佳实践或反方证据。", "短中长期整改建议必须绑定优先级、责任、关闭证据和复核机制。", @@ -239,8 +599,10 @@ def build_research_brief_payload( "research_brief_path": "phase1/research_brief.json", }, "materials": _material_paths(manifest), + "chapter_planning": chapter_planning, "task_planning": { "chapter_source": "phase1/framework.md", + "phase2_mode": "chapter_integrated", "axes": axes, "required_skills": [ "deep-research", @@ -275,29 +637,62 @@ def write_research_brief( project_root: Path, manifest: dict[str, Any] | None = None, method: ResearchMethod | None = None, + chapter_planning: list[dict[str, Any]] | None = None, ) -> tuple[Path, Path]: manifest = manifest or load_manifest(project_root) method = method or ResearchMethodRegistry().get(manifest.get("research_method")) - payload = build_research_brief_payload(project_root, manifest, method) + payload = build_research_brief_payload(project_root, manifest, method, chapter_planning=chapter_planning) json_path = project_root / "phase1" / "research_brief.json" md_path = project_root / "phase1" / "research_brief.md" json_path.parent.mkdir(parents=True, exist_ok=True) + hypothesis_path = project_root / "phase1" / "hypothesis_map.json" json_path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + hypothesis_path.write_text(json.dumps(payload.get("chapter_planning") or [], ensure_ascii=False, indent=2) + "\n", encoding="utf-8") lines = [ f"# Phase 1 Research Brief:{payload['topic']}", "", f"- research_method: {payload['research_method']}", f"- work_language: {payload['work_language']}", f"- tone: {payload['tone']}", + f"- phase2_mode: {payload['phase2_mode']}", "", "## 中心问题", "", payload["central_question"], "", - "## 成功标准", + "## 主基调 / 大胆假设", + "", + payload["central_thesis"], + "", + "## Phase 逻辑", "", ] + for phase_name, phase_text in payload["phase_logic"].items(): + lines.append(f"- `{phase_name}`:{phase_text}") + lines.extend([ + "", + "## 成功标准", + "", + ]) lines.extend(f"- {item}" for item in payload["success_criteria"]) + if payload.get("chapter_planning"): + lines.extend(["", "## 章节命题与求证计划", ""]) + for item in payload["chapter_planning"]: + lines.extend( + [ + f"### {item['chapter_id']} {item['title']}", + "", + f"- 核心问题:{item['core_question']}", + f"- 大胆假设:{item['bold_hypothesis']}", + f"- 写作主张:{item['writing_claim']}", + f"- 证据线:{';'.join(item['evidence_lanes'])}", + "- 材料起点:", + ] + ) + lines.extend(f" - {line}" for line in item["material_starting_points"]) + lines.extend(["- 求证计划:"]) + lines.extend(f" - {line}" for line in item["verification_plan"]) + lines.extend([""]) lines.extend(["", "## 任务切分原则", ""]) planning = payload["task_planning"] lines.append(planning["fragmentation_guard"]) @@ -377,30 +772,49 @@ CHAPTER_TEMPLATES: dict[str, list[str]] = { "落地机制决定咨询建议能否转化为成果", ], "gmp_quality_operations_diagnosis": [ - "现场审计发现需要先转化为可验证的系统性问题图谱", - "法规基线决定质量体系差距的严重度与整改边界", - "生产工艺体系风险来自流程、设施、公用系统和验证证据的耦合缺口", - "偏差、变更、CAPA 和数据完整性决定质量系统能否闭环", - "人员能力与质量文化决定制度是否真正落地", - "运营管理问题需要区分组织、流程、会议机制和指标体系缺口", - "跨部门协同断点会放大 GMP 风险和交付风险", - "标杆实践应转化为短中长期整改组合而非口号", - "整改路线图必须绑定责任、优先级、证据和复核机制", - "管理层治理机制决定白帆能否从一次整改转向持续改进", + "从审计清单到商业化阶段门", + "用法规基线重新校准整改优先级", + "制剂无菌保障:从硬件合规到行为受控", + "原液与公用系统:封闭工艺背后的证据缺口", + "工艺文件与验证:商业化转移的硬门槛", + "质量系统闭环:偏差、变更、CAPA 与数据完整性", + "人员能力:培训有效性比培训记录更关键", + "运营节奏:从临时协调转向管理系统", + "团队建设:按 CDMO 能力矩阵补齐角色", + "整改路线图:立即纠偏、体系补强、能力建设", + "管理层看板:用 CAPA 总表驱动复核", ], } -def render_framework(project_root: Path, *, method_key: str | None = None, chapter_count: int = 10) -> Path: +def _existing_chapter_titles(project_root: Path) -> list[str]: + framework_path = project_root / "phase1" / "framework.md" + if not framework_path.exists(): + return [] + from scripts.runtime.tasks import parse_framework_chapters + + chapters = parse_framework_chapters(framework_path.read_text(encoding="utf-8")) + return [chapter.title for chapter in chapters if chapter.title] + + +def render_framework( + project_root: Path, + *, + method_key: str | None = None, + chapter_count: int = 10, + preserve_existing_outline: bool = False, +) -> Path: manifest = load_manifest(project_root) registry = ResearchMethodRegistry() method = registry.get(method_key or manifest.get("research_method")) if method_key: manifest["research_method"] = method.key - titles = CHAPTER_TEMPLATES.get(method.key) or CHAPTER_TEMPLATES["mckinsey_market"] + existing_titles = _existing_chapter_titles(project_root) if preserve_existing_outline else [] + titles = existing_titles or CHAPTER_TEMPLATES.get(method.key) or CHAPTER_TEMPLATES["mckinsey_market"] chapter_count = max(8, min(15, chapter_count)) - selected = titles[:chapter_count] + selected = titles[:chapter_count] if not existing_titles else titles quota = max(800, int(manifest.get("target_words", 30000)) // len(selected)) + chapter_planning = build_chapter_planning(project_root, manifest, method, selected, quota=quota) sections = "\n".join(f"- {item}" for item in method.framework_sections) axes = "、".join(method.task_axes) material_text = render_material_inventory(manifest.get("material_inventory") or []) @@ -430,17 +844,32 @@ def render_framework(project_root: Path, *, method_key: str | None = None, chapt "", "## 中心假设", "", - f"围绕“{manifest['topic']}”形成可被证据支持或证伪的中文主线;所有核心判断必须绑定来源 ID。", + _central_thesis(manifest, method), + "", + "Phase1 的职责是大胆假设:基于材料、访谈和初步搜索定下主基调、章节命题和求证路线。Phase2 的职责是小心求证:验证、证伪、补证,而不是重新发明报告方向。Phase3 则检查 Phase1 假设与 Phase2 证据是否自洽。", "", ] - for idx, title in enumerate(selected, start=1): + for item in chapter_planning: lines.extend( [ - f"## 第{idx}章 {title}", + f"## 第{int(item['chapter_id'][2:])}章 {item['title']}", "", - f"建议字数:约 {quota} 字。", - f"研究思路:围绕 `{method.key}` 的方法框架,从 {axes} 等任务轴并发收集 evidence packet,再由 chapter assembly 收束为完整中文章节。", - "证据要求:至少 2 个独立 Tier 1-2 信源;不足时在正文标注待验证;必须包含反方证据。", + f"建议字数:约 {item['suggested_words']} 字。", + f"本章要解决的问题:{item['core_question']}", + f"大胆假设:{item['bold_hypothesis']}", + f"写作主张:{item['writing_claim']}", + f"证据线:{';'.join(item['evidence_lanes'])}", + "", + "材料起点:", + *[f"- {line}" for line in item["material_starting_points"]], + "", + "求证计划:", + *[f"- {line}" for line in item["verification_plan"]], + "", + "必须寻找的反方/边界:", + *[f"- {line}" for line in item["counter_evidence_to_seek"]], + "", + f"最低证据要求:`{json.dumps(item['minimum_evidence'], ensure_ascii=False)}`", "", ] ) @@ -457,7 +886,7 @@ def render_framework(project_root: Path, *, method_key: str | None = None, chapt out = project_root / "phase1" / "framework.md" out.parent.mkdir(parents=True, exist_ok=True) out.write_text("\n".join(lines), encoding="utf-8") - research_brief_md, research_brief_json = write_research_brief(project_root, manifest, method) + research_brief_md, research_brief_json = write_research_brief(project_root, manifest, method, chapter_planning=chapter_planning) manifest["phase1"] = { "status": "completed", "approved": False, diff --git a/scripts/runtime/review.py b/scripts/runtime/review.py index 97f7566..ee1e4dc 100644 --- a/scripts/runtime/review.py +++ b/scripts/runtime/review.py @@ -1,4 +1,4 @@ -"""Deterministic Phase 3 review checks for the Python core.""" +"""Phase 3 review checks for the Python core.""" from __future__ import annotations @@ -52,6 +52,24 @@ def _ready_packet_stems(project_root: Path) -> set[str]: return ready +def _read_text_if_exists(path: Path, *, max_chars: int | None = None) -> str: + if not path.exists(): + return "" + text = path.read_text(encoding="utf-8", errors="ignore") + return text[:max_chars] if max_chars is not None else text + + +def _json_if_exists(path: Path, *, max_chars: int | None = None) -> str: + if not path.exists(): + return "" + try: + data = json.loads(path.read_text(encoding="utf-8")) + text = json.dumps(data, ensure_ascii=False, indent=2) + except Exception: + text = path.read_text(encoding="utf-8", errors="ignore") + return text[:max_chars] if max_chars is not None else text + + def _draft_quality_findings(drafts: list[Path]) -> list[dict[str, Any]]: findings: list[dict[str, Any]] = [] generic_markers = [ @@ -77,6 +95,159 @@ def _draft_quality_findings(drafts: list[Path]) -> list[dict[str, Any]]: return findings +def build_phase3_model_review_context(project_root: Path, *, max_chars: int = 650_000) -> str: + """Build a structured, bounded context packet for an independent model review.""" + deterministic_path = build_phase3_critique(project_root) + deterministic_copy = project_root / "phase3" / "critique_deterministic.md" + deterministic_copy.write_text(deterministic_path.read_text(encoding="utf-8"), encoding="utf-8") + + manifest = load_manifest(project_root) + parts: list[str] = [ + f"# Phase 3 Model Review Context: {manifest.get('topic', project_root.name)}", + "", + "## Review Contract", + "", + "- 这是给非 Codex 模型的独立总编审校上下文,不要求重写正文。", + "- 请判断 Phase2 草稿能否进入 Phase4,或必须回炉补证据/重写。", + "- 重点关注:证据是否落纸面、并发 packet 是否造成碎片化、法规/最佳实践覆盖是否足够、整改建议是否具体可执行。", + "", + "## Manifest", + "", + "```json", + json.dumps(manifest, ensure_ascii=False, indent=2), + "```", + "", + "## Deterministic Review Baseline", + "", + _read_text_if_exists(deterministic_copy), + "", + "## Phase 1 Framework", + "", + _read_text_if_exists(project_root / "phase1" / "framework.md", max_chars=50_000), + "", + "## Phase 1 Research Brief", + "", + _read_text_if_exists(project_root / "phase1" / "research_brief.md", max_chars=30_000), + "", + "## Phase 2 Brief Warnings", + "", + _json_if_exists(project_root / "phase2" / "brief_warnings.json", max_chars=30_000) or "无", + "", + "## Phase 2 Packet Errors", + "", + ] + errors = sorted((project_root / "phase2" / "packet_errors").glob("*.json")) + if errors: + for path in errors[:40]: + parts.extend([f"### {path.name}", "", _json_if_exists(path, max_chars=2_000), ""]) + else: + parts.append("无") + + parts.extend(["", "## Source Registry Summary", ""]) + source_lines = [] + sources_path = project_root / "phase2" / "sources.jsonl" + if sources_path.exists(): + for line in sources_path.read_text(encoding="utf-8").splitlines()[:260]: + if not line.strip(): + continue + try: + source = json.loads(line) + except json.JSONDecodeError: + continue + source_lines.append( + "- {id} | {tier} | {title} | {url} | cached={cached}".format( + id=source.get("id", ""), + tier=source.get("tier", ""), + title=str(source.get("title", ""))[:120], + url=source.get("url", ""), + cached=source.get("cached_text_path", ""), + ) + ) + parts.append("\n".join(source_lines) or "无") + + parts.extend(["", "## Compressed Findings", ""]) + for path in sorted((project_root / "phase2" / "compressed_findings").glob("ch*.json")): + parts.extend([f"### {path.name}", "", "```json", _json_if_exists(path, max_chars=35_000), "```", ""]) + + parts.extend(["", "## Chapter Drafts", ""]) + for path in sorted((project_root / "phase2" / "drafts").glob("ch*.md")): + parts.extend([f"### {path.name}", "", _read_text_if_exists(path, max_chars=55_000), ""]) + + context = "\n".join(parts) + if len(context) > max_chars: + context = context[:max_chars] + "\n\n[Context truncated by max_chars; review should flag if truncation limits confidence.]\n" + + out = project_root / "phase3" / "review_context_opus_4_7.md" + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(context, encoding="utf-8") + return context + + +def phase3_model_review_system_prompt() -> str: + return ( + "你是 Deep Research Phase 3 的独立总编审校模型,本次由 ZenMux Claude Opus 4.7 执行,用于避免 Codex/OpenAI 模型偏见。\n" + "你的任务是审校,不是润色或重写。必须用中文输出,英文仅可保留 source title、URL、法规缩写和原文短摘录。\n" + "请严格检查:1) 研究目标与 Phase1 框架是否契合;2) Phase2 并发 evidence packets 是否被章节真正吸收,还是造成碎片化;" + "3) FDA/NMPA/EMA/ICH/WHO/EU GMP 等权威来源是否足以支撑关键判断;4) 用户材料是否被正确作为起点且被权威来源交叉验证;" + "5) 运营管理与团队能力章节是否具体,不得泛泛咨询腔;6) CAPA 建议是否包含 owner、期限、关闭证据、QA verification、复核窗口和升级阈值;" + "7) 引用链和 source_id 是否可追踪;8) 是否仍有明显 AI 味、中英文混杂或空泛表达。\n\n" + "输出必须使用以下 Markdown 结构:\n" + "# Phase 3 Opus 4.7 独立审校\n" + "## 总体判定\n" + "给出:通过 / 有条件通过 / 回炉 Phase2,并说明最核心理由。\n" + "## P0/P1 阻断问题\n" + "列出必须修复的问题;每条写明章节/文件、问题、为什么阻断、建议动作。\n" + "## 章节级审校表\n" + "用表格覆盖 ch01-ch11:主线质量、证据密度、法规覆盖、整改可执行性、是否需要回炉。\n" + "## 证据与信源质量\n" + "单独评价 FDA warning letters、ICH Q9/Q10、EU GMP Annex 1、本地缓存信源、第三方低质信源的使用情况。\n" + "## 碎片化与叙事连贯性\n" + "判断并发研究是否造成割裂,并给出具体整合建议。\n" + "## Phase2 回炉任务清单\n" + "如果需要回炉,列出可执行任务卡级别的补证据/重写要求。\n" + "## Phase4 准入条件\n" + "明确进入 final 前必须满足的条件。\n" + ) + + +def build_phase3_model_critique( + project_root: Path, + *, + client: Any, + model: str = "zenmux-anthropic/claude-opus-4-7", + max_context_chars: int = 650_000, +) -> Path: + context = build_phase3_model_review_context(project_root, max_chars=max_context_chars) + content = client.chat_complete( + model=model, + system=phase3_model_review_system_prompt(), + user=context, + temperature=0.2, + max_tokens=20_000, + tag="phase3:opus-review", + ) + out = project_root / "phase3" / "critique.md" + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(content.rstrip() + "\n", encoding="utf-8") + + manifest = load_manifest(project_root) + phase3 = manifest.setdefault("phase3", {}) + phase3.update( + { + "status": "completed", + "review_mode": "model", + "review_model": model, + "critique_path": "phase3/critique.md", + "context_path": "phase3/review_context_opus_4_7.md", + "deterministic_critique_path": "phase3/critique_deterministic.md", + "updated_at": utc_now_iso(), + } + ) + manifest["updated_at"] = utc_now_iso() + write_manifest(project_root, manifest) + return out + + def build_phase3_critique(project_root: Path) -> Path: manifest = load_manifest(project_root) drafts = sorted((project_root / "phase2" / "drafts").glob("ch*.md")) diff --git a/scripts/runtime/roles.py b/scripts/runtime/roles.py index 50074b1..35a807b 100644 --- a/scripts/runtime/roles.py +++ b/scripts/runtime/roles.py @@ -59,6 +59,42 @@ ROLE_DEFAULTS = { } +ROLE_IDENTITIES = { + "dr_plan": ( + "你是 Deep Research 的 Phase1 研究架构师。你的工作不是列目录,而是先消化材料、访谈和初步搜索," + "形成可被证伪的主判断、章节命题和求证路线。你要大胆假设,但必须给 Phase2 留下清晰的验证和推翻条件。" + ), + "dr_pm": ( + "你是 Deep Research 的研究项目经理。你的职责是把研究意图转化为可并发执行、可回收校验的任务," + "控制碎片化、重复检索和上下文污染。" + ), + "dr_searcher": ( + "你是 Deep Research 的信源发现员。你的职责是用短英文关键词和轴向词找到高质量入口," + "优先官方、法规、学术和一手材料;你不写结论,只交付可追溯来源。" + ), + "dr_analyst": ( + "你是 Deep Research 的章节证据分析师。你的职责不是写一篇像样的空泛文章,而是围绕 Phase1 命题" + "小心求证:提取材料原文、检索权威证据、寻找反方边界,并把证据整理成可审计的结构化 packet。" + ), + "dr_verifier": ( + "你是 Deep Research 的独立反方审校员。你的默认姿态是质疑:找证据缺口、适用边界、反例和过度推断," + "并指出哪些结论必须降级或回炉。" + ), + "dr_chief_editor": ( + "你是 Deep Research 的 Phase3 总编审校。你的职责是通读 Phase1 假设与 Phase2 证据,判断二者是否自洽," + "优先指出结构性失败、证据不足和需要回炉的章节。" + ), + "dr_editor_in_chief": ( + "你是 Deep Research 的终稿主编。你的职责是把已验证证据组织成客户可读的中文报告," + "保持观点清晰、证据密实、表达克制,避免翻译腔和 AI 味。" + ), + "dr_reporter": ( + "你是 Deep Research 的报告制作负责人。你的职责是把已定稿内容可靠渲染为 PDF/DOCX," + "确保引用、排版、中文字体、表格和输出卫生可交付。" + ), +} + + @dataclass(frozen=True) class RoleDefinition: name: str @@ -67,6 +103,7 @@ class RoleDefinition: temperature: float max_tokens: int max_concurrency: int + identity: str = "" class RuntimeProfile: @@ -103,6 +140,7 @@ def resolve_runtime_profile( temperature=float(defaults["temperature"]), max_tokens=int(defaults["max_tokens"]), max_concurrency=int(defaults["max_concurrency"]), + identity=ROLE_IDENTITIES.get(name, ""), ) return RuntimeProfile( profile=resolved["profile"], diff --git a/scripts/runtime/skills.py b/scripts/runtime/skills.py index 28acc6a..4ed51ee 100644 --- a/scripts/runtime/skills.py +++ b/scripts/runtime/skills.py @@ -34,9 +34,10 @@ class SkillRegistry: self.canonical_dir = canonical_dir or CANONICAL_SKILLS_DIR def roots(self) -> list[Path]: - roots = [self.canonical_dir] + roots = [] if self.canonical_dir == CANONICAL_SKILLS_DIR and PROJECT_SKILLS_DIR.exists(): roots.append(PROJECT_SKILLS_DIR) + roots.append(self.canonical_dir) return roots def list(self) -> list[SkillInfo]: diff --git a/scripts/runtime/source_cache.py b/scripts/runtime/source_cache.py new file mode 100644 index 0000000..044e9f9 --- /dev/null +++ b/scripts/runtime/source_cache.py @@ -0,0 +1,230 @@ +"""Cache important external sources as local Markdown snapshots.""" + +from __future__ import annotations + +import hashlib +import json +import re +from dataclasses import dataclass +from pathlib import Path +from urllib.parse import urlparse + +import httpx +from lxml import html + + +IMPORTANT_DOMAINS = ( + "fda.gov", + "ema.europa.eu", + "nmpa.gov.cn", + "cde.org.cn", + "ich.org", + "who.int", + "edqm.eu", + "pmda.go.jp", + "ec.europa.eu", + "health.ec.europa.eu", +) + + +@dataclass(frozen=True) +class CacheResult: + source_id: str + url: str + cached_text_path: str + raw_path: str + status: str + chars: int + + +def _safe_stem(source: dict) -> str: + source_id = str(source.get("id") or "source") + digest = hashlib.sha1(str(source.get("url") or source_id).encode("utf-8")).hexdigest()[:10] + safe_id = re.sub(r"[^A-Za-z0-9_-]+", "_", source_id).strip("_") or "source" + return f"{safe_id}-{digest}" + + +def _domain(url: str) -> str: + return urlparse(url).netloc.lower() + + +def is_important_source(source: dict) -> bool: + url = str(source.get("url") or "") + if not url.startswith(("http://", "https://")): + return False + domain = _domain(url) + if any(domain.endswith(item) for item in IMPORTANT_DOMAINS): + return True + tier = str(source.get("tier") or "").lower() + if "tier 1" in tier or tier in {"1", "1.0"}: + return True + title = str(source.get("title") or "").lower() + return any(term in title for term in ("ich q9", "ich q10", "annex 1", "fda guidance", "who guideline")) + + +def load_sources(path: Path) -> list[dict]: + if not path.exists(): + return [] + rows: list[dict] = [] + for line in path.read_text(encoding="utf-8").splitlines(): + if not line.strip(): + continue + rows.append(json.loads(line)) + return rows + + +def write_sources(path: Path, rows: list[dict]) -> None: + path.write_text("".join(json.dumps(row, ensure_ascii=False) + "\n" for row in rows), encoding="utf-8") + + +def _response_ext(url: str, content_type: str) -> str: + lowered = url.lower() + if "pdf" in content_type or lowered.endswith(".pdf"): + return ".pdf" + if "html" in content_type or lowered.endswith((".html", ".htm", "/")): + return ".html" + return ".bin" + + +def _html_to_text(content: bytes) -> str: + doc = html.fromstring(content) + for bad in doc.xpath("//script|//style|//noscript"): + bad.drop_tree() + return "\n".join(line.strip() for line in doc.text_content().splitlines() if line.strip()) + + +def _pdf_to_text(path: Path) -> str: + try: + import fitz + except Exception: + return "" + doc = fitz.open(path) + parts: list[str] = [] + for index, page in enumerate(doc, start=1): + text = page.get_text("text").strip() + if text: + parts.append(f"## Page {index}\n\n{text}") + return "\n\n".join(parts) + + +def _bytes_to_text(*, raw_path: Path, content: bytes, content_type: str, url: str) -> str: + if raw_path.suffix == ".pdf" or "pdf" in content_type or url.lower().endswith(".pdf"): + return _pdf_to_text(raw_path) + if raw_path.suffix in {".html", ".htm"} or "html" in content_type: + return _html_to_text(content) + try: + return content.decode("utf-8") + except UnicodeDecodeError: + return content.decode("utf-8", errors="ignore") + + +def cache_source( + project_root: Path, + source: dict, + *, + client: httpx.Client | None = None, + force: bool = False, + timeout: float = 45.0, +) -> CacheResult: + url = str(source.get("url") or "") + if not url.startswith(("http://", "https://")): + raise ValueError(f"source URL is not remote: {url}") + cache_dir = project_root / "phase2" / "source_cache" + raw_dir = cache_dir / "raw" + text_dir = cache_dir / "md" + raw_dir.mkdir(parents=True, exist_ok=True) + text_dir.mkdir(parents=True, exist_ok=True) + + stem = _safe_stem(source) + md_path = text_dir / f"{stem}.md" + if md_path.exists() and not force: + return CacheResult( + source_id=str(source.get("id") or ""), + url=url, + cached_text_path=str(md_path.relative_to(project_root)), + raw_path=str(source.get("cached_raw_path") or ""), + status="cached", + chars=len(md_path.read_text(encoding="utf-8")), + ) + + owns_client = client is None + http = client or httpx.Client(trust_env=False, follow_redirects=True, timeout=timeout) + try: + response = http.get(url) + response.raise_for_status() + content_type = response.headers.get("content-type", "").lower() + ext = _response_ext(str(response.url), content_type) + raw_path = raw_dir / f"{stem}{ext}" + raw_path.write_bytes(response.content) + text = _bytes_to_text(raw_path=raw_path, content=response.content, content_type=content_type, url=str(response.url)) + lines = [ + f"# Source Snapshot: {source.get('title') or source.get('id') or url}", + "", + f"- source_id: {source.get('id', '')}", + f"- original_url: {url}", + f"- fetched_url: {response.url}", + f"- content_type: {content_type}", + f"- raw_path: {raw_path.relative_to(project_root)}", + "", + "## Extracted Text", + "", + text.strip() or "[No extractable text. Keep raw file for manual review.]", + "", + ] + md_path.write_text("\n".join(lines), encoding="utf-8") + return CacheResult( + source_id=str(source.get("id") or ""), + url=url, + cached_text_path=str(md_path.relative_to(project_root)), + raw_path=str(raw_path.relative_to(project_root)), + status="fetched", + chars=len(text), + ) + finally: + if owns_client: + http.close() + + +def cache_sources( + project_root: Path, + *, + sources_rel: str = "phase2/sources.jsonl", + important_only: bool = True, + limit: int | None = None, + force: bool = False, +) -> list[CacheResult]: + sources_path = project_root / sources_rel + rows = load_sources(sources_path) + results: list[CacheResult] = [] + selected_indexes = [ + index + for index, row in enumerate(rows) + if row.get("url") + and (not row.get("cached_text_path") or force) + and (not important_only or is_important_source(row)) + ] + if limit is not None: + selected_indexes = selected_indexes[:limit] + + with httpx.Client(trust_env=False, follow_redirects=True, timeout=45.0) as client: + for index in selected_indexes: + row = rows[index] + try: + result = cache_source(project_root, row, client=client, force=force) + except Exception as exc: + row["cache_status"] = "failed" + row["cache_error"] = str(exc)[:300] + continue + row["cached_text_path"] = result.cached_text_path + row["cached_raw_path"] = result.raw_path + row["cache_status"] = result.status + row["cached_text_chars"] = result.chars + results.append(result) + write_sources(sources_path, rows) + manifest = project_root / "phase2" / "source_cache" / "manifest.json" + manifest.parent.mkdir(parents=True, exist_ok=True) + manifest.write_text( + json.dumps([result.__dict__ for result in results], ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + return results diff --git a/scripts/runtime/sources.py b/scripts/runtime/sources.py index c03f72d..a2c658a 100644 --- a/scripts/runtime/sources.py +++ b/scripts/runtime/sources.py @@ -8,11 +8,11 @@ from typing import Any def _source_key(source: dict[str, Any]) -> str: - return (source.get("url") or source.get("doi") or source.get("id") or "").strip() + return (source.get("id") or source.get("source_id") or source.get("doi") or source.get("url") or "").strip() def append_packet_sources(sources_path: Path, packet: dict[str, Any]) -> int: - """Append packet sources to sources.jsonl, deduping by URL/DOI/id.""" + """Append packet sources to sources.jsonl, preserving every citeable source_id.""" sources_path.parent.mkdir(parents=True, exist_ok=True) existing: set[str] = set() if sources_path.exists(): @@ -37,10 +37,27 @@ def append_packet_sources(sources_path: Path, packet: dict[str, Any]) -> int: def rebuild_sources_from_packets(project_root: Path) -> int: - """Rebuild phase2/sources.jsonl from packet-level source metadata.""" + """Rebuild phase2/sources.jsonl from packet-level source metadata. + + The registry is keyed by source_id, not URL. Two packet sources may point to + the same URL but have different source_ids already cited in drafts; dropping + either row would break citation traceability. + """ packets_dir = project_root / "phase2" / "packets" sources_path = project_root / "phase2" / "sources.jsonl" sources_path.parent.mkdir(parents=True, exist_ok=True) + existing_by_key: dict[str, dict[str, Any]] = {} + if sources_path.exists(): + for line in sources_path.read_text(encoding="utf-8").splitlines(): + if not line.strip(): + continue + try: + row = json.loads(line) + except json.JSONDecodeError: + continue + key = _source_key(row) + if key: + existing_by_key[key] = row seen: set[str] = set() rows: list[dict[str, Any]] = [] @@ -56,7 +73,8 @@ def rebuild_sources_from_packets(project_root: Path) -> int: if not key or key in seen: continue seen.add(key) - rows.append(source) + previous = existing_by_key.get(key, {}) + rows.append({**source, **{k: v for k, v in previous.items() if k.startswith("cache") or k.startswith("cached_")}}) sources_path.write_text( "".join(json.dumps(row, ensure_ascii=False) + "\n" for row in rows), diff --git a/scripts/runtime/tasks.py b/scripts/runtime/tasks.py index 20524aa..d1c4304 100644 --- a/scripts/runtime/tasks.py +++ b/scripts/runtime/tasks.py @@ -11,36 +11,45 @@ from typing import Any from scripts.runtime.methods import ResearchMethod -VALID_ROUTES = {"general", "scholar", "patents", "news"} +VALID_ROUTES = {"general", "evidence", "scholar", "patents", "news", "fda"} DEFAULT_AXES = ["literature", "regulatory", "patents", "market", "counter"] AXIS_ROUTES = { - "literature": ["scholar", "general"], - "clinical": ["scholar", "general"], - "regulatory": ["general", "news"], - "patents": ["patents", "general"], + "literature": ["scholar", "evidence", "general"], + "clinical": ["scholar", "evidence", "general"], + "regulatory": ["fda", "evidence", "general", "news"], + "patents": ["patents", "evidence", "general"], "market": ["news", "general"], "china": ["news", "general"], - "counter": ["scholar", "general"], - "regulatory_gap": ["general", "news"], - "risk_classification": ["general", "scholar"], - "capa_design": ["general", "news"], + "counter": ["fda", "scholar", "evidence", "general"], + "regulatory_gap": ["fda", "evidence", "general", "news"], + "risk_classification": ["evidence", "general", "scholar"], + "capa_design": ["evidence", "general", "news"], "ownership_timeline": ["general"], - "verification_evidence": ["general", "scholar"], - "process_flow": ["scholar", "general"], - "cqa_cpp": ["scholar", "general"], - "scale_up_risk": ["scholar", "general"], - "control_strategy": ["scholar", "general"], + "verification_evidence": ["fda", "evidence", "general", "scholar"], + "process_flow": ["scholar", "evidence", "general"], + "cqa_cpp": ["scholar", "evidence", "general"], + "scale_up_risk": ["scholar", "evidence", "general"], + "control_strategy": ["scholar", "evidence", "general"], "supply_chain": ["news", "general"], - "scientific_rationale": ["scholar", "general"], - "poc_evidence": ["scholar", "general"], - "ip_fto": ["patents", "general"], - "development_path": ["scholar", "general"], + "scientific_rationale": ["scholar", "evidence", "general"], + "poc_evidence": ["scholar", "evidence", "general"], + "ip_fto": ["patents", "evidence", "general"], + "development_path": ["scholar", "evidence", "general"], "commercial_window": ["news", "general"], - "current_state": ["general"], - "capability_gap": ["general"], - "operating_model": ["general"], - "governance": ["general"], - "implementation_roadmap": ["general"], + "current_state": ["evidence", "general"], + "capability_gap": ["evidence", "general"], + "operating_model": ["evidence", "general"], + "governance": ["evidence", "general"], + "implementation_roadmap": ["evidence", "general"], + "nmpa_fda_ema_ich_who_baseline": ["fda", "evidence", "general", "news"], + "quality_system_gap": ["fda", "evidence", "general"], + "manufacturing_process_risk": ["fda", "scholar", "evidence", "general"], + "operations_management_gap": ["fda", "evidence", "general"], + "team_capability": ["evidence", "general", "news"], + "capa_roadmap": ["fda", "evidence", "general"], + "input_material_findings": ["evidence", "general"], + "fda_enforcement_precedents": ["fda"], + "chapter_integrated": ["fda", "scholar", "evidence", "general"], } @@ -60,6 +69,7 @@ class TaskCard: questions: list[str] search_routes: list[str] output_packet: str + chapter_title: str = "" preferred_model_role: str = "dr_analyst" status: str = "pending" dependencies: list[str] = field(default_factory=list) @@ -105,12 +115,34 @@ def parse_framework_chapters(framework_text: str) -> list[Chapter]: return chapters -def _questions_for_axis(chapter: Chapter, axis: str) -> list[str]: - return [ +def _questions_for_axis(chapter: Chapter, axis: str, method: ResearchMethod | None = None) -> list[str]: + if axis == "chapter_integrated": + lanes = ";".join(method.integrated_lanes if method else []) + return [ + f"围绕《{chapter.title}》形成章节级综合证据包,不再拆成孤立小轴。", + f"必须按当前 research_method 的 evidence lanes 组织证据:{lanes or '本地材料、权威来源、反方证据、可执行建议'}。", + "若项目有用户材料,必须先读取本地材料证据并提取原文;再用本方法适用的权威来源交叉验证。", + "必须形成:材料/事实基线、外部权威证据、差距或机会判断、反方/限制条件、可执行建议和待补证据。", + ] + questions = [ f"围绕《{chapter.title}》从 {axis} 角度提炼可证伪的核心结论。", "至少寻找两个 Tier 1-2 来源支撑主要结论;不足时标注待验证。", "主动检索反方证据、限制条件或失败案例。", ] + if axis in { + "nmpa_fda_ema_ich_who_baseline", + "quality_system_gap", + "manufacturing_process_risk", + "operations_management_gap", + "capa_roadmap", + "verification_evidence", + "counter", + "fda_enforcement_precedents", + }: + questions.append( + "必须检索并优先评估 FDA Warning Letters、inspection/enforcement 页面、会议纪要或 meeting materials,作为 GMP 缺陷严重度和整改优先级的佐证。" + ) + return questions def _default_required_skills(axis: str) -> list[str]: @@ -121,18 +153,37 @@ def _default_required_skills(axis: str) -> list[str]: def _default_expected_evidence(axis: str) -> dict[str, Any]: - return { + expected = { "min_tier_1_2_sources": 2, "must_include_counter_evidence": True, "must_include_source_metadata": True, "preferred_evidence_types": [ "regulatory_or_best_practice_requirement", + "fda_warning_letter_or_meeting_record", "site_or_material_finding", "quantitative_fact_or_record", "implementation_or_verification_evidence", ], "axis": axis, } + if axis == "chapter_integrated": + expected.update( + { + "min_local_material_evidence": 2, + "min_official_sources": 2, + "min_fda_or_regulatory_precedents": 1, + "min_capa_actions": 3, + "preferred_evidence_types": [ + "local_audit_or_recap_quote", + "official_regulatory_requirement", + "fda_warning_letter_or_meeting_record", + "gap_analysis", + "capa_action_with_owner_and_verification", + "counter_evidence_or_boundary_condition", + ], + } + ) + return expected def _default_stop_conditions() -> list[str]: @@ -143,6 +194,15 @@ def _default_stop_conditions() -> list[str]: ] +def _integrated_prompt_brief(chapter: Chapter, method: ResearchMethod | None) -> str: + lanes = ";".join(method.integrated_lanes if method else []) + return ( + f"本任务是《{chapter.title}》的章节级综合证据包。不要把多条窄轴 packet 机械拼贴;" + f"必须围绕当前研究方法的 lanes 一次性收束主线:{lanes or '事实材料、权威证据、反方证据、行动建议'}。" + "输出必须让章节作者能直接写出判断、证据落点和可执行建议。" + ) + + def _task_card_for_chapter_axis( *, chapter: Chapter, @@ -152,22 +212,27 @@ def _task_card_for_chapter_axis( required_skills: list[str] | None = None, allowed_materials: list[str] | None = None, prompt_brief: str | None = None, + questions: list[str] | None = None, + research_goal: str | None = None, + expected_evidence: dict[str, Any] | None = None, stop_conditions: list[str] | None = None, + method: ResearchMethod | None = None, ) -> TaskCard: return TaskCard( task_id=f"{chapter.chapter_id}-{axis}", chapter_ids=[chapter.chapter_id], topic_axis=axis, - questions=_questions_for_axis(chapter, axis), + questions=questions or _questions_for_axis(chapter, axis, method), search_routes=routes, output_packet=f"phase2/packets/{chapter.chapter_id}-{axis}.json", + chapter_title=chapter.title, preferred_model_role="dr_verifier" if axis == "counter" else "dr_analyst", - research_goal=f"为《{chapter.title}》收集并验证 {axis} 轴证据,形成可写入章节的具体判断与证据落点。", + research_goal=research_goal or f"为《{chapter.title}》收集并验证 {axis} 轴证据,形成可写入章节的具体判断与证据落点。", research_method=method_key, - prompt_brief=prompt_brief or f"围绕《{chapter.title}》的 {axis} 轴,优先形成可证伪、可引用、可落地的证据包。", + prompt_brief=prompt_brief or (_integrated_prompt_brief(chapter, method) if axis == "chapter_integrated" else f"围绕《{chapter.title}》的 {axis} 轴,优先形成可证伪、可引用、可落地的证据包。"), required_skills=required_skills or _default_required_skills(axis), allowed_materials=allowed_materials or [], - expected_evidence=_default_expected_evidence(axis), + expected_evidence=expected_evidence or _default_expected_evidence(axis), stop_conditions=stop_conditions or _default_stop_conditions(), model_hint="use_cross_model_verifier" if axis == "counter" else "use_cost_effective_research_worker", ) @@ -193,6 +258,7 @@ def generate_task_cards( axis=axis, routes=routes, method_key=method.key if method else "", + method=method, ) ) validate_task_cards(cards) @@ -211,7 +277,17 @@ def generate_task_cards_from_research_brief( chapters = parse_framework_chapters(framework_text) planning = research_brief.get("task_planning") or {} method_key = research_brief.get("research_method") or (method.key if method else "") - selected_axes = axes or (method.task_axes if method else None) or list(planning.get("search_routes_by_axis") or []) or DEFAULT_AXES + if method is None and method_key: + from scripts.runtime.methods import ResearchMethodRegistry + + method = ResearchMethodRegistry().get(method_key) + phase2_mode = planning.get("phase2_mode") or research_brief.get("phase2_mode") + if axes: + selected_axes = axes + elif phase2_mode == "chapter_integrated": + selected_axes = ["chapter_integrated"] + else: + selected_axes = (method.task_axes if method else None) or list(planning.get("search_routes_by_axis") or []) or DEFAULT_AXES routes_by_axis = planning.get("search_routes_by_axis") or {} prompt_by_axis = planning.get("axis_prompt_briefs") or {} base_skills = list(planning.get("required_skills") or []) @@ -221,6 +297,15 @@ def generate_task_cards_from_research_brief( for item in research_brief.get("materials", []) if item.get("path") ] + if not allowed_materials: + material_digest = (research_brief.get("phase1_inputs") or {}).get("material_digest") + if material_digest: + allowed_materials.append(str(material_digest)) + chapter_plan_by_id = { + str(item.get("chapter_id")): item + for item in research_brief.get("chapter_planning", []) + if item.get("chapter_id") + } cards: list[TaskCard] = [] for chapter in chapters: for axis in selected_axes: @@ -228,6 +313,35 @@ def generate_task_cards_from_research_brief( skills = base_skills or _default_required_skills(axis) if "search-gateway" not in skills: skills = ["search-gateway", *skills] + chapter_plan = chapter_plan_by_id.get(chapter.chapter_id) if axis == "chapter_integrated" else None + prompt_brief = prompt_by_axis.get(axis) + questions = None + research_goal = None + expected_evidence = None + card_stop_conditions = stop_conditions or None + if chapter_plan: + prompt_brief = chapter_plan.get("phase2_prompt_context") or prompt_brief + research_goal = chapter_plan.get("core_question") + questions = [ + chapter_plan.get("core_question", ""), + chapter_plan.get("bold_hypothesis", ""), + "按 Phase1 求证计划逐条收集支持证据、反方证据和待补证据。", + "不得绕开 Phase1 主基调另起炉灶;若证据推翻假设,必须明确写出修正建议。", + ] + questions.extend(str(item) for item in chapter_plan.get("verification_plan", [])) + expected_evidence = _default_expected_evidence(axis) + expected_evidence.update( + { + "phase1_minimum_evidence": chapter_plan.get("minimum_evidence") or {}, + "evidence_lanes": chapter_plan.get("evidence_lanes") or [], + "must_address_phase1_hypothesis": True, + } + ) + card_stop_conditions = [ + *(stop_conditions or _default_stop_conditions()), + "已经逐条回应 Phase1 的大胆假设:支持、修正或推翻,并说明依据。", + "已经把本地材料原文、外部证据、反方边界和行动建议分开记录。", + ] cards.append( _task_card_for_chapter_axis( chapter=chapter, @@ -236,8 +350,12 @@ def generate_task_cards_from_research_brief( method_key=method_key, required_skills=skills, allowed_materials=allowed_materials, - prompt_brief=prompt_by_axis.get(axis), - stop_conditions=stop_conditions or None, + prompt_brief=prompt_brief, + questions=questions, + research_goal=research_goal, + expected_evidence=expected_evidence, + stop_conditions=card_stop_conditions, + method=method, ) ) validate_task_cards(cards) @@ -284,6 +402,8 @@ def validate_task_cards(cards: list[TaskCard]) -> None: seen.add(card.task_id) if not card.chapter_ids: raise ValueError(f"{card.task_id}: chapter_ids required") + if not card.chapter_title: + card.chapter_title = card.chapter_ids[0] if not card.questions: raise ValueError(f"{card.task_id}: questions required") if not card.output_packet.endswith(".json"): @@ -344,8 +464,9 @@ def validate_packet(packet: dict[str, Any]) -> None: if undeclared: raise ValueError(f"packet source_ids referenced but not declared: {undeclared}") packet_sources = packet.get("sources") or [] - if packet_sources: - known_source_ids = {source.get("id") for source in packet_sources} - missing_sources = sorted(declared - known_source_ids) - if missing_sources: - raise ValueError(f"packet source_ids missing source metadata: {missing_sources}") + if not packet_sources: + raise ValueError("packet sources must not be empty") + known_source_ids = {source.get("id") for source in packet_sources} + missing_sources = sorted(declared - known_source_ids) + if missing_sources: + raise ValueError(f"packet source_ids missing source metadata: {missing_sources}") diff --git a/scripts/runtime/workers.py b/scripts/runtime/workers.py index 32918c3..1954132 100644 --- a/scripts/runtime/workers.py +++ b/scripts/runtime/workers.py @@ -39,6 +39,10 @@ class ProjectSearchProvider: hits = self.client.patents(query, num_results=num_results) elif route == "news": hits = self.client.news(query, num_results=num_results, time_range="y") + elif route == "fda": + hits = self.client.fda(query, num_results=num_results) + elif route == "evidence": + hits = self.client.evidence(query, num_results=num_results) else: hits = self.client.search(query, num_results=num_results) return [ @@ -72,6 +76,213 @@ def _safe_source_stem(task_id: str) -> str: return re.sub(r"[^a-zA-Z0-9]+", "_", task_id).strip("_").lower() +def contains_cjk(text: str) -> bool: + return any("\u4e00" <= char <= "\u9fff" for char in text) + + +def strip_cjk(text: str) -> str: + return re.sub(r"[\u3400-\u9fff]+", " ", text) + + +def validate_packet_against_allowed_context( + packet: dict, + search_context: dict[str, Any] | None, + material_context: dict[str, Any] | None, +) -> None: + """Ensure the model did not invent source IDs or URLs beyond candidates.""" + if not search_context and not material_context: + return + candidates = (search_context or {}).get("candidate_sources") or [] + materials = (material_context or {}).get("materials") or [] + if not candidates and not materials: + return + candidate_ids = {source.get("id") for source in candidates} + candidate_ids.update(item.get("source_id") for item in materials) + candidate_urls = {source.get("url") for source in candidates if source.get("url")} + candidate_urls.update(item.get("path") for item in materials if item.get("path")) + packet_sources = packet.get("sources") or [] + unknown_ids = sorted( + source.get("id") + for source in packet_sources + if source.get("id") and source.get("id") not in candidate_ids + ) + unknown_urls = sorted( + source.get("url") + for source in packet_sources + if source.get("url") and source.get("url") not in candidate_urls + ) + if (candidates or materials) and not packet_sources: + raise ValueError("packet must include source metadata from candidate_sources or local materials") + if unknown_ids: + raise ValueError(f"packet sources include non-candidate source IDs: {unknown_ids}") + if unknown_urls: + raise ValueError(f"packet sources include non-candidate URLs: {unknown_urls}") + + +def normalize_packet_against_context( + packet: dict[str, Any], + search_context: dict[str, Any] | None, + material_context: dict[str, Any] | None, +) -> dict[str, Any]: + """Deterministically fill schema metadata the model often omits.""" + packet = dict(packet) + referenced: set[str] = set(packet.get("source_ids") or []) + for section in ("claims", "counter_evidence"): + for item in packet.get(section) or []: + referenced.update(item.get("source_ids") or []) + for item in packet.get("evidence_items") or []: + if item.get("source_id"): + referenced.add(item["source_id"]) + if "source_ids" not in packet or not packet.get("source_ids"): + packet["source_ids"] = sorted(referenced) + + available_sources: dict[str, dict[str, Any]] = {} + for source in (search_context or {}).get("candidate_sources") or []: + if source.get("id"): + available_sources[source["id"]] = source + for material in (material_context or {}).get("materials") or []: + source_id = material.get("source_id") + if source_id: + available_sources[source_id] = { + "id": source_id, + "title": material.get("title") or Path(material.get("path", "")).name, + "url": material.get("path") or "", + "tier": "local_material", + "score": 8, + } + + existing_sources = { + source.get("id"): source + for source in packet.get("sources") or [] + if source.get("id") + } + for source_id in packet.get("source_ids") or []: + if source_id not in existing_sources and source_id in available_sources: + existing_sources[source_id] = available_sources[source_id] + if existing_sources: + packet["sources"] = [existing_sources[source_id] for source_id in packet.get("source_ids", []) if source_id in existing_sources] + return packet + + +FDA_AXIS_TERMS = { + "nmpa_fda_ema_ich_who_baseline": "CGMP pharmaceutical quality system process validation aseptic processing data integrity", + "quality_system_gap": "CGMP CAPA deviation change control data integrity quality unit pharmaceutical", + "manufacturing_process_risk": "aseptic processing sterile drug manufacturing process validation PPQ cleaning validation water system", + "operations_management_gap": "pharmaceutical quality system quality metrics management review senior management FDA", + "capa_roadmap": "CGMP CAPA effectiveness remediation warning letter close-out pharmaceutical", + "verification_evidence": "FDA 483 response CAPA effectiveness verification EIR pharmaceutical quality", + "counter": "FDA warning letter CGMP pharmaceutical quality data integrity remediation limitations", + "fda_enforcement_precedents": "FDA warning letter CGMP pharmaceutical aseptic processing data integrity CAPA process validation", +} + + +FDA_CHAPTER_TERMS = { + "ch01": "commercial readiness phase gate remediation governance", + "ch02": "regulatory baseline CGMP EU GMP Annex 1 ICH Q9 ICH Q10", + "ch03": "aseptic processing RABS first air media fill visual inspection depyrogenation tunnel", + "ch04": "biologics drug substance WFI clean utilities SCADA EMS single-use system", + "ch05": "process validation master batch record CPP CQA PPQ cleaning validation technology transfer", + "ch06": "deviation change control CAPA document control training data integrity quality unit", + "ch07": "training effectiveness quality culture operator qualification human factors", + "ch08": "quality metrics management review escalation cross-functional governance operations", + "ch09": "CDMO quality organization technology transfer project governance capability matrix", + "ch10": "CAPA remediation plan effectiveness check owner due date verification evidence", + "ch11": "regulatory mapping CAPA tracker closure evidence quality assurance verification", +} + + +ROUTE_CHAPTER_TERMS = { + **FDA_CHAPTER_TERMS, +} + +ROUTE_SUFFIX_TERMS = { + "scholar": "pharmaceutical GMP review validation risk management quality system", + "patents": "biologics manufacturing patent process formulation device", + "news": "pharmaceutical quality operations CDMO quality governance", + "evidence": "pharmaceutical GMP evidence guidance enforcement best practice quality operations", + "general": "pharmaceutical GMP best practice guidance quality operations remediation", +} + +INTERNAL_QUERY_TOKENS = { + "chapter_integrated", + "input_material_findings", +} + + +def _compact_english_query(*parts: str, max_terms: int = 16) -> str: + text = strip_cjk(" ".join(part for part in parts if part)) + text = re.sub(r"[^A-Za-z0-9./+-]+", " ", text) + terms: list[str] = [] + seen: set[str] = set() + for raw in text.split(): + term = raw.strip(" ./+-").lower() + if not term or term in INTERNAL_QUERY_TOKENS: + continue + key = term.casefold() + if key in seen: + continue + seen.add(key) + terms.append(term) + if len(terms) >= max_terms: + break + return " ".join(terms) + + +def _chapter_terms(card: TaskCard) -> str: + mapped = " ".join(ROUTE_CHAPTER_TERMS.get(chapter_id, "") for chapter_id in card.chapter_ids) + if mapped.strip(): + return mapped + return strip_cjk(card.chapter_title) + + +def build_route_query(card: TaskCard, route: str) -> str: + """Build short, route-aware queries instead of sending whole task cards.""" + if route == "fda": + terms = FDA_AXIS_TERMS.get(card.topic_axis, "FDA warning letter CGMP pharmaceutical quality") + chapter_terms = " ".join(FDA_CHAPTER_TERMS.get(chapter_id, "") for chapter_id in card.chapter_ids) + query = f"{terms} {chapter_terms}".strip() + if contains_cjk(query): + raise ValueError(f"FDA route query must not contain Chinese text: {query}") + return query + if route == "scholar": + return _compact_english_query(_chapter_terms(card), ROUTE_SUFFIX_TERMS["scholar"]) + if route == "patents": + return _compact_english_query(_chapter_terms(card), ROUTE_SUFFIX_TERMS["patents"]) + if route == "news": + return _compact_english_query(_chapter_terms(card), ROUTE_SUFFIX_TERMS["news"]) + if route == "evidence": + return _compact_english_query(_chapter_terms(card), ROUTE_SUFFIX_TERMS["evidence"]) + return _compact_english_query(_chapter_terms(card), ROUTE_SUFFIX_TERMS["general"]) + + +def _material_excerpt(project_root: Path | None, rel_path: str, *, max_chars: int = 6000) -> dict[str, str] | None: + if project_root is None: + return None + path = project_root / rel_path + if not path.exists() or not path.is_file(): + return None + text = path.read_text(encoding="utf-8", errors="ignore") + return { + "path": rel_path, + "source_id": f"src_local_{_safe_source_stem(Path(rel_path).stem)}", + "title": Path(rel_path).name, + "excerpt": text[:max_chars], + } + + +def build_material_context(card: TaskCard, project_root: Path | None, *, max_chars_per_material: int = 6000) -> dict[str, Any]: + materials = [] + seen: set[str] = set() + for rel in card.allowed_materials: + if rel in seen: + continue + seen.add(rel) + item = _material_excerpt(project_root, rel, max_chars=max_chars_per_material) + if item: + materials.append(item) + return {"materials": materials} + + def build_search_context( card: TaskCard, search_provider: SearchProvider, @@ -82,9 +293,9 @@ def build_search_context( routes_used: list[str] = [] source_stem = _safe_source_stem(card.task_id) idx = 1 - query = " ".join(card.questions) for route in card.search_routes: routes_used.append(route) + query = build_route_query(card, route) hits = search_provider.search(query=query, route=route, num_results=num_results_per_route) for hit in hits: candidate_sources.append( @@ -102,15 +313,22 @@ def build_search_context( return {"routes_used": routes_used, "candidate_sources": candidate_sources} -def build_packet_user_prompt(card: TaskCard, search_context: dict[str, Any] | None = None) -> str: +def build_packet_user_prompt( + card: TaskCard, + search_context: dict[str, Any] | None = None, + material_context: dict[str, Any] | None = None, +) -> str: context = search_context or {"routes_used": [], "candidate_sources": []} + materials = material_context or {"materials": []} return ( "请根据以下 task card 产出一个证据包 JSON。\n" "正式结论、summary、open_questions 用中文;英文原文摘录、source title、DOI/URL 可以保留英文。\n" "必须主动包含 counter_evidence,且所有引用的 source_id 必须出现在 source_ids 中。\n\n" - "只能使用 candidate_sources 中的来源,不得编造 URL、DOI、trial ID 或 source_id。\n" - "输出 JSON 必须包含 sources 字段,且 sources 只能来自 candidate_sources。\n\n" + "只能使用 candidate_sources 或 Local material context 中的来源,不得编造 URL、DOI、trial ID 或 source_id。\n" + "输出 JSON 必须包含 sources 字段;sources 只能来自 candidate_sources 或 Local material context。\n" + "如 Local material context 非空,必须至少提取 1 条本地材料原文证据;如果与本章无关,必须在 open_questions 说明为什么无关。\n\n" f"{json.dumps(card.to_dict(), ensure_ascii=False, indent=2)}\n\n" + f"Local material context:\n{json.dumps(materials, ensure_ascii=False, indent=2)}\n\n" f"Search context:\n{json.dumps(context, ensure_ascii=False, indent=2)}\n\n" "只输出 JSON,不要输出 Markdown 解释。" ) @@ -122,16 +340,19 @@ def build_packet_repair_prompt( raw_response: str, error: Exception, search_context: dict[str, Any] | None = None, + material_context: dict[str, Any] | None = None, ) -> str: context = search_context or {"routes_used": [], "candidate_sources": []} + materials = material_context or {"materials": []} return ( "请修复上一次 evidence packet 输出,使其成为合法且通过 schema 校验的 JSON。\n" "只输出 JSON 对象,不要输出 Markdown、解释或代码块。\n" "保留中文主写作;英文只允许出现在来源标题、URL、DOI、原文摘录或检索笔记中。\n" - "不得编造 candidate_sources 以外的来源、URL、DOI、trial ID 或 source_id。\n\n" + "不得编造 candidate_sources 或 Local material context 以外的来源、URL、DOI、trial ID 或 source_id。\n\n" f"Schema error:\n{error}\n\n" f"Task card:\n{json.dumps(card.to_dict(), ensure_ascii=False, indent=2)}\n\n" f"Search context:\n{json.dumps(context, ensure_ascii=False, indent=2)}\n\n" + f"Local material context:\n{json.dumps(materials, ensure_ascii=False, indent=2)}\n\n" f"Previous raw response:\n{raw_response[:12000]}" ) @@ -142,12 +363,14 @@ class PacketWorker: *, role: RoleDefinition, client: ChatClient, + project_root: Path | None = None, search_provider: SearchProvider | None = None, skill_registry: SkillRegistry | None = None, num_results_per_route: int = 5, ) -> None: self.role = role self.client = client + self.project_root = project_root self.search_provider = search_provider self.skill_registry = skill_registry or SkillRegistry() self.num_results_per_route = num_results_per_route @@ -160,6 +383,7 @@ class PacketWorker: except FileNotFoundError: skill_texts.append(f"# Skill: {name}\n\n[missing skill: {name}]") return ( + f"{self.role.identity}\n\n" "你是 Deep Research v0.20 Python runtime 的证据包 worker。\n" "你的唯一任务是把一个 task card 转换为结构化 evidence packet。\n" "遵循中文主写作原则;不要写章节正文;不要编造 URL、DOI、trial ID 或 source_id。\n\n" @@ -175,17 +399,23 @@ class PacketWorker: self.search_provider, num_results_per_route=self.num_results_per_route, ) + material_context = build_material_context(card, self.project_root) raw = self.client.chat_complete( model=self.role.model, system=self._system_prompt(), - user=build_packet_user_prompt(card, search_context), + user=build_packet_user_prompt(card, search_context, material_context), temperature=self.role.temperature, max_tokens=self.role.max_tokens, tag=f"packet:{card.task_id}", ) try: - packet = _extract_json_object(raw) + packet = normalize_packet_against_context( + _extract_json_object(raw), + search_context, + material_context, + ) validate_packet(packet) + validate_packet_against_allowed_context(packet, search_context, material_context) return packet except Exception as error: repaired = self.client.chat_complete( @@ -196,13 +426,19 @@ class PacketWorker: raw_response=raw, error=error, search_context=search_context, + material_context=material_context, ), temperature=0, max_tokens=self.role.max_tokens, tag=f"packet-repair:{card.task_id}", ) - packet = _extract_json_object(repaired) + packet = normalize_packet_against_context( + _extract_json_object(repaired), + search_context, + material_context, + ) validate_packet(packet) + validate_packet_against_allowed_context(packet, search_context, material_context) return packet @@ -233,7 +469,7 @@ def run_packet_workers( def run_one(card: TaskCard) -> tuple[TaskCard, dict | None, Exception | None]: search_provider = search_provider_factory() if search_provider_factory else None try: - worker = PacketWorker(role=role, client=client_factory(role), search_provider=search_provider) + worker = PacketWorker(role=role, client=client_factory(role), project_root=project_root, search_provider=search_provider) return card, worker.run(card), None except Exception as error: return card, None, error diff --git a/scripts/search.py b/scripts/search.py index 27dfbc6..0af0df0 100644 --- a/scripts/search.py +++ b/scripts/search.py @@ -25,17 +25,19 @@ from scripts.lib.zenmux_client import load_secrets ROUTE_HELP = { - "general": "Exa -> Tavily generic web discovery", + "general": "Tavily -> Exa -> Brave generic web discovery", + "evidence": "Exa highlights -> Tavily -> Brave controlled evidence discovery", "scholar": "Serper Scholar -> generic fallback", "patents": "Serper Google Patents -> site:patents.google.com fallback", "news": "Serper News -> generic fallback", + "fda": "FDA-focused discovery for warning letters, enforcement pages, and meeting materials", } PROFILE_ROUTES = { - "biomed_literature": ["scholar", "general"], - "patent_heavy": ["patents", "general"], - "china_market": ["news", "general"], - "investment": ["news", "general"], + "biomed_literature": ["scholar", "evidence", "general"], + "patent_heavy": ["patents", "evidence", "general"], + "china_market": ["news", "evidence", "general"], + "investment": ["news", "evidence", "general"], } PROFILE_QUERY_PREFIX = { @@ -46,12 +48,16 @@ PROFILE_QUERY_PREFIX = { def search_route(client: SearchClient, route: str, query: str, args: argparse.Namespace) -> list[SearchHit]: if route == "general": return client.search(query, num_results=args.num_results) + if route == "evidence": + return client.evidence(query, num_results=args.num_results, category=args.exa_category) if route == "scholar": return client.scholar(query, num_results=args.num_results, year_low=args.year_low) if route == "patents": return client.patents(query, num_results=args.num_results) if route == "news": return client.news(query, num_results=args.num_results, time_range=args.time_range) + if route == "fda": + return client.fda(query, num_results=args.num_results) raise SystemExit(f"unknown route: {route}") @@ -107,6 +113,11 @@ def build_parser() -> argparse.ArgumentParser: help="Run a strategy profile instead of a single route", ) parser.add_argument("--num-results", type=int, default=10) + parser.add_argument( + "--exa-category", + choices=["research paper", "news", "company", "financial report", "github", "tweet", "personal site", "pdf"], + help="Optional Exa category for the evidence route", + ) parser.add_argument("--year-low", type=int, help="Lower year bound for scholar searches") parser.add_argument("--time-range", choices=["d", "w", "m", "y"], help="Serper news time range") parser.add_argument("--json", action="store_true", help="Emit JSON instead of Markdown") diff --git a/skills/deep-research/SKILL.md b/skills/deep-research/SKILL.md index b7bf4c5..f656243 100644 --- a/skills/deep-research/SKILL.md +++ b/skills/deep-research/SKILL.md @@ -25,6 +25,7 @@ Deep Research is driven by the repository Python core, not by chat context. Trea 6. Run Phase 2 with file-backed task cards and packets: `uv run python scripts/dr.py research --workers 6 --execute-packets --allow-search-fallback` 7. Build briefs and chapters only from persisted packets: + `uv run python scripts/dr.py sources cache --limit 50` `uv run python scripts/dr.py research --build-briefs` `uv run python scripts/dr.py research --assemble-chapters --workers 4` 8. Review and finalize through Python: @@ -37,6 +38,7 @@ Deep Research is driven by the repository Python core, not by chat context. Trea - Do not invent evidence when model/API access fails. Stop at the last durable artifact and report the exact blocker. - Phase 2 concurrency must use task cards and packet files, not platform subagents as the default mechanism. - Search must use the project Python gateway (`scripts/search.py` / `scripts.lib.search_client`) by default. Do not use Tavily MCP, browser MCP, or platform-native web search in subagents unless the user explicitly requests that escape hatch. +- Key Tier 1-2 sources such as ICH Q9/Q10, EU GMP Annex 1, FDA guidance/warning letters, EMA/NMPA/WHO pages, and pharmacopeia materials should be cached as local Markdown snapshots under `phase2/source_cache/` before chapter assembly. - User materials are starting evidence, not final truth. Cross-check against authoritative sources such as NMPA, FDA, EMA, ICH, WHO, pharmacopeias, and recognized best-practice references. - For GMP/quality/operations diagnosis, prefer `--method gmp_quality_operations_diagnosis`. - Chapter drafts are not acceptable if they merely summarize principles. Each section must turn evidence into concrete findings, risk implications, and整改动作;otherwise return to Phase 2 enrichment. diff --git a/skills/search-gateway/SKILL.md b/skills/search-gateway/SKILL.md index f89d474..b8cf632 100644 --- a/skills/search-gateway/SKILL.md +++ b/skills/search-gateway/SKILL.md @@ -15,6 +15,7 @@ Run searches from the repository root: ```bash uv run python scripts/search.py "" --route general --json --trace +uv run python scripts/search.py "" --route evidence --json --trace uv run python scripts/search.py "" --route scholar --year-low 2020 --json --trace uv run python scripts/search.py "" --route news --time-range y --json --trace uv run python scripts/search.py "" --route patents --json --trace @@ -29,12 +30,19 @@ UV_CACHE_DIR=/private/tmp/deep_research_uv_cache uv run python scripts/search.py ## Routing -- `general`: Exa first, Tavily fallback. -- `scholar`: Serper Scholar first; use for papers, guidelines, and technical literature. +- `general`: Tavily first, Exa fallback, Brave fallback; use for broad discovery and gap filling. +- `evidence`: Exa highlights first, Tavily fallback, Brave fallback; use when a task card needs concise, source-level candidate evidence for an evidence packet. +- `scholar`: Serper Scholar first; use for papers, reviews, technical literature, and academic validation only. - `news`: Serper News first; use for recent industry/current information. - `patents`: Serper Google Patents first. - `biomed_literature`: scholar plus general discovery. +Serper is not the default general web search source. Keep it mainly for Scholar, Google Patents, News, and targeted `site:` searches where Google coverage matters. + +Tavily Research is a phase-level scan tool, not a packet-writing shortcut. Use it for Phase 1 initial landscape scans, Phase 2 gap-fill after a chapter is thin, or Phase 3回炉补证据;its output must be saved, source-scored, deduplicated, and converted into candidate evidence before citation. + +Exa is the preferred controlled evidence discovery route for agents because it can return short highlights/text per URL. Treat Exa hits as candidate sources unless the URL itself is an original Tier 1-2 source. + API keys are loaded from `secrets.env` by `scripts/search.py`; do not ask the user to authorize MCP calls when the env keys are available. ## Subagent Protocol @@ -45,6 +53,7 @@ For evidence packets: 2. Use search hits only as candidate sources; whenever possible, cite the original regulator, guideline, paper, or official document. 3. Put every used source in `sources` with `id`, `title`, `url`, `tier`, and `score`. 4. Do not write a final chapter during search; produce structured evidence only. +5. For repeatedly used Tier 1-2 sources, run `uv run python scripts/dr.py sources cache ` so later phases can cite a local Markdown snapshot rather than only a URL. For chapter assembly: diff --git a/skills/search-strategy/SKILL.md b/skills/search-strategy/SKILL.md new file mode 100644 index 0000000..ff3a195 --- /dev/null +++ b/skills/search-strategy/SKILL.md @@ -0,0 +1,76 @@ +--- +name: search-strategy +description: 生物医药深度研究的统一检索策略。规定信源优先级、检索轮次、关键词构造、API 路由,以及何时切换到专业信源。所有做信息收集的 worker/agent 必须加载此技能。 +--- + +# Search Strategy + +## Core Rule + +Do not send Chinese chapter titles, interview paragraphs, or full task-card text directly to search APIs. For formal search, first convert the task into short English query terms plus axis terms, then add source/domain constraints when useful. + +## Query Construction + +Build every query from three parts: + +- `entity/domain`: the object or field, such as `pharmaceutical`, `biologics`, `sterile drug`, `CDMO`, `quality system`. +- `axis`: the research axis, such as `CAPA deviation change control`, `aseptic processing process validation PPQ`, `quality metrics management review`. +- `evidence type`: the evidence to retrieve, such as `Warning Letter`, `meeting materials`, `guidance`, `systematic review`, `patent`, `best practices`. + +Default English query length is 5-12 keywords. Chinese terms are useful for NMPA, local industry sources, and internal-material matching, but Chinese long sentences must not be the default query form. + +For route-specific searches, do not append the original Chinese chapter title after the English query. If chapter context is needed, map the chapter to short English concept terms first, such as `commercial readiness phase gate`, `aseptic processing`, `quality metrics management review`, or `CAPA effectiveness check`. + +## Route Patterns + +- `fda`: use `site:fda.gov` plus `Warning Letter`, `inspection`, `enforcement`, `meeting materials`, or `meeting minutes`, then add the axis terms. +- `scholar`: use technical/scientific terms plus `review`, `validation`, `risk management`, `quality system`, or disease/mechanism terms. +- `evidence`: use Exa highlights for controlled evidence discovery when a packet needs concise source-level excerpts; still trace important hits back to original Tier 1-2 sources. +- `patents`: use technology route plus material, target, process, formulation, device, or manufacturing terms. +- `news`: use company/industry plus event type and recency terms. +- `general`: use Tavily/Exa/Brave for discovery and gap filling; trace useful hits back to Tier 1-2 original sources before citing. Do not route generic web discovery through Serper by default. +- `tavily_research` conceptually means a phase-level scan, not a normal packet route. Save the research result, score/deduplicate sources, then convert it into candidate evidence before writing claims. + +## GMP/FDA Examples + +Bad query: + +```text +围绕《审计发现应先转化为商业化阶段门缺口,而不是停留在风险项计数》从质量体系角度提炼可证伪的核心结论 +``` + +Good queries: + +```text +site:fda.gov "Warning Letter" CGMP CAPA deviation change control data integrity pharmaceutical +site:fda.gov "meeting materials" "pharmaceutical quality" "quality metrics" +site:fda.gov/inspections-compliance-enforcement-and-criminal-investigations "Warning Letter" aseptic processing process validation +``` + +## Source Priority + +- Tier 1: regulator, guideline, pharmacopeia, primary literature, trial registry, patent original, company filing. +- Tier 2: systematic review, recognized consulting or industry association report, professional database/media. +- Tier 3: conference abstract, broker report, preprint, vendor white paper. +- Tier 4: generic web search result; discovery only, not conclusion support. + +## Four-Round Search Discipline + +1. Tier 1 direct hit: regulator, PubMed/Scholar, trial registry, patent original, or official filing. +2. Tier 2 synthesis: recognized review, guideline interpretation, consulting/association report. +3. Counter-evidence: limitations, failures, enforcement actions, contradictory interpretations. +4. Gap fill: Exa evidence discovery or Tavily/Brave general discovery, then trace back to original sources. Use Serper here only for Google-specific needs such as `site:` targeting, Scholar, Patents, or News. + +## Tavily Research vs Exa Evidence + +- Tavily Research is best for Phase 1 initial landscape scans, thin-chapter补证据, and Phase 3回炉. Prompt in English, specify source priority, counter-evidence, and structured output. Do not cite its synthesized prose directly. +- Exa evidence discovery is best for Phase 2 packet work because highlights/text are compact enough for source-quality scoring and evidence-table mapping. +- Serper remains preferred for Scholar, Google Patents, News, and Google-specific `site:` targeting. +- Brave remains a cross-check and mixed-language fallback, not the first evidence route. + +## Required Packet Behavior + +- Put search keywords or route notes in `raw_quotes_or_notes` when evidence is weak or no suitable source was found. +- FDA/GMP tasks must explicitly check Warning Letters, inspection/enforcement pages, and meeting materials/minutes. +- Do not cite search snippets as final evidence when an original regulator, guideline, paper, or official PDF can be reached. +- If the candidate sources are not sufficient, stop and record the gap in `open_questions` instead of writing generic prose. diff --git a/tests/test_chapter_assembly.py b/tests/test_chapter_assembly.py index a8e18f3..dd46e6b 100644 --- a/tests/test_chapter_assembly.py +++ b/tests/test_chapter_assembly.py @@ -62,6 +62,10 @@ def write_packet(path: Path, task_id: str, claim: str, source_id: str) -> None: "evidence_items": [{"source_id": source_id, "summary": f"{claim} 的证据"}], "counter_evidence": [{"claim": "仍需关注样本量和外推限制", "source_ids": ["src_counter"]}], "source_ids": [source_id, "src_counter"], + "sources": [ + {"id": source_id, "title": "来源", "url": f"https://example.com/{source_id}"}, + {"id": "src_counter", "title": "反方来源", "url": "https://example.com/counter"}, + ], "source_quality_notes": [f"{source_id} Tier 1"], "open_questions": ["还需要补充中国市场数据"], "raw_quotes_or_notes": ["English note can remain as source material."], @@ -76,6 +80,7 @@ def test_build_chapter_briefs_aggregates_packets_by_chapter(tmp_path: Path) -> N { "task_id": "ch01-clinical", "chapter_ids": ["ch01"], + "chapter_title": "临床证据正在重塑需求判断", "topic_axis": "clinical", "questions": ["q"], "search_routes": ["scholar"], @@ -84,6 +89,7 @@ def test_build_chapter_briefs_aggregates_packets_by_chapter(tmp_path: Path) -> N { "task_id": "ch01-market", "chapter_ids": ["ch01"], + "chapter_title": "临床证据正在重塑需求判断", "topic_axis": "market", "questions": ["q"], "search_routes": ["news"], @@ -101,6 +107,7 @@ def test_build_chapter_briefs_aggregates_packets_by_chapter(tmp_path: Path) -> N brief = briefs[0] validate_chapter_brief(brief) assert brief["chapter_id"] == "ch01" + assert brief["chapter_title"] == "临床证据正在重塑需求判断" assert brief["packet_ids"] == ["ch01-clinical", "ch01-market"] assert "src_001" in brief["source_ids"] assert "src_002" in brief["source_ids"] @@ -118,6 +125,50 @@ def test_build_chapter_briefs_aggregates_packets_by_chapter(tmp_path: Path) -> N assert (project / "phase2/compressed_findings/ch01.json").exists() +def test_build_chapter_briefs_skips_placeholder_packets(tmp_path: Path) -> None: + project = tmp_path / "project" + cards = [ + { + "task_id": "ch01-good", + "chapter_ids": ["ch01"], + "chapter_title": "临床证据正在重塑需求判断", + "topic_axis": "clinical", + "questions": ["q"], + "search_routes": ["scholar"], + "output_packet": "phase2/packets/ch01-good.json", + }, + { + "task_id": "ch01-empty", + "chapter_ids": ["ch01"], + "chapter_title": "临床证据正在重塑需求判断", + "topic_axis": "clinical", + "questions": ["q"], + "search_routes": ["scholar"], + "output_packet": "phase2/packets/ch01-empty.json", + }, + ] + (project / "phase2").mkdir(parents=True) + (project / "phase2/task_cards.json").write_text(json.dumps(cards, ensure_ascii=False), encoding="utf-8") + write_packet(project / "phase2/packets/ch01-good.json", "ch01-good", "临床证据支持核心判断", "src_001") + empty = { + "task_id": "ch01-empty", + "claims": [], + "evidence_items": [], + "counter_evidence": [], + "source_ids": [], + "source_quality_notes": [], + "open_questions": [], + "raw_quotes_or_notes": [], + } + (project / "phase2/packets/ch01-empty.json").write_text(json.dumps(empty, ensure_ascii=False), encoding="utf-8") + + briefs = build_chapter_briefs(project) + + assert len(briefs) == 1 + warnings = json.loads((project / "phase2/brief_warnings.json").read_text(encoding="utf-8")) + assert warnings[0]["task_id"] == "ch01-empty" + + def test_chapter_prompt_contains_brief_and_fragmentation_guard() -> None: brief = { "chapter_id": "ch01", @@ -161,6 +212,8 @@ def test_chapter_assembly_worker_writes_markdown(tmp_path: Path) -> None: assert output == tmp_path / "phase2/drafts/ch01.md" assert "结论先行" in output.read_text(encoding="utf-8") assert fake.calls[0]["model"] == role.model + assert "章节证据分析师" in fake.calls[0]["system"] + assert "中文章节组装 worker" in fake.calls[0]["system"] def test_validate_chapter_markdown_rejects_unknown_source_ids() -> None: diff --git a/tests/test_phase0_materials.py b/tests/test_phase0_materials.py index 77626a8..25f2517 100644 --- a/tests/test_phase0_materials.py +++ b/tests/test_phase0_materials.py @@ -68,13 +68,22 @@ def test_framework_mentions_ingested_materials(tmp_path: Path) -> None: assert "phase0/extracted/audit.md" in framework assert "NMPA、FDA、EMA、ICH、WHO" in framework + assert "Phase1 的职责是大胆假设" in framework + assert "本章要解决的问题" in framework assert "请先确认 `phase1/material_brief.md`" in framework assert research_brief_md.exists() assert "任务切分原则" in research_brief_md.read_text(encoding="utf-8") + assert "章节命题与求证计划" in research_brief_md.read_text(encoding="utf-8") + assert (project / "phase1" / "hypothesis_map.json").exists() assert brief["research_method"] == "gmp_quality_operations_diagnosis" assert brief["work_language"] == "zh" + assert brief["phase2_mode"] == "chapter_integrated" + assert brief["central_thesis"] + assert brief["chapter_planning"][0]["phase2_prompt_context"] assert brief["task_planning"]["required_skills"] - assert brief["task_planning"]["search_routes_by_axis"]["counter"] == ["scholar", "general"] + assert brief["task_planning"]["phase2_mode"] == "chapter_integrated" + assert brief["task_planning"]["search_routes_by_axis"]["counter"] == ["fda", "scholar", "evidence", "general"] + assert brief["task_planning"]["search_routes_by_axis"]["quality_system_gap"] == ["fda", "evidence", "general"] assert brief["phase2_inputs"]["framework_path"] == "phase1/framework.md" diff --git a/tests/test_phase3_model_review.py b/tests/test_phase3_model_review.py new file mode 100644 index 0000000..3e01635 --- /dev/null +++ b/tests/test_phase3_model_review.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +import json +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[1] +if str(REPO_ROOT) not in sys.path: + sys.path.insert(0, str(REPO_ROOT)) + +from scripts.runtime.review import ( + build_phase3_model_review_context, + build_phase3_model_critique, + phase3_model_review_system_prompt, +) + + +class FakeClient: + def __init__(self) -> None: + self.calls: list[dict[str, object]] = [] + + def chat_complete(self, **kwargs) -> str: + self.calls.append(kwargs) + return "# Phase 3 Opus 4.7 独立审校\n\n## 总体判定\n\n回炉 Phase2。\n" + + +def make_project(tmp_path: Path) -> Path: + project = tmp_path / "project" + (project / "phase1").mkdir(parents=True) + (project / "phase2/drafts").mkdir(parents=True) + (project / "phase2/compressed_findings").mkdir(parents=True) + (project / "manifest.json").write_text( + json.dumps({"topic": "白帆测试项目", "phase3": {}}, ensure_ascii=False), + encoding="utf-8", + ) + (project / "phase1/framework.md").write_text("## 第1章 质量体系判断\n", encoding="utf-8") + (project / "phase2/drafts/ch01.md").write_text("## 质量体系判断\n\n正文。[src_001]\n", encoding="utf-8") + (project / "phase2/sources.jsonl").write_text('{"id":"src_001","title":"来源","url":"https://www.fda.gov/example"}\n', encoding="utf-8") + (project / "phase2/compressed_findings/ch01.json").write_text( + json.dumps( + { + "chapter_id": "ch01", + "chapter_title": "质量体系判断", + "packet_ids": ["ch01-a"], + "chapter_thesis": "质量体系需要补证据", + "key_findings": [], + "evidence_landings": [], + "counter_evidence": [], + "source_ids": ["src_001"], + "open_questions": [], + "writing_plan": [], + }, + ensure_ascii=False, + ), + encoding="utf-8", + ) + return project + + +def test_phase3_model_context_contains_structured_inputs(tmp_path: Path) -> None: + project = make_project(tmp_path) + + context = build_phase3_model_review_context(project) + + assert "Deterministic Review Baseline" in context + assert "Compressed Findings" in context + assert "Chapter Drafts" in context + assert "src_001" in context + + +def test_phase3_model_review_calls_requested_model_and_writes_critique(tmp_path: Path) -> None: + project = make_project(tmp_path) + fake = FakeClient() + + out = build_phase3_model_critique(project, client=fake, model="zenmux-anthropic/claude-opus-4-7") + + assert out.exists() + assert fake.calls[0]["model"] == "zenmux-anthropic/claude-opus-4-7" + assert "独立总编审校" in fake.calls[0]["system"] + assert "FDA/NMPA/EMA/ICH/WHO" in phase3_model_review_system_prompt() diff --git a/tests/test_polish_prompt.py b/tests/test_polish_prompt.py new file mode 100644 index 0000000..f442a88 --- /dev/null +++ b/tests/test_polish_prompt.py @@ -0,0 +1,19 @@ +from __future__ import annotations + +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[1] +if str(REPO_ROOT) not in sys.path: + sys.path.insert(0, str(REPO_ROOT)) + +from scripts.polish import build_polish_system_prompt + + +def test_polish_system_prompt_loads_humanizer_and_output_hygiene() -> None: + prompt = build_polish_system_prompt() + + assert "# Skill: humanizer-cn" in prompt + assert "CN-1" in prompt + assert "# Skill: output-hygiene" in prompt + assert "禁止词" in prompt diff --git a/tests/test_reporting.py b/tests/test_reporting.py index 6bab5ff..603698a 100644 --- a/tests/test_reporting.py +++ b/tests/test_reporting.py @@ -10,6 +10,7 @@ if str(REPO_ROOT) not in sys.path: from scripts.reporting.fonts import resolve_quarto_fonts from scripts.reporting.references import build_references_block +from scripts.number_citations import number_citations def test_build_references_block_uses_only_cited_sources(tmp_path: Path) -> None: @@ -32,3 +33,38 @@ def test_resolve_quarto_fonts_returns_stable_defaults_for_missing_dir(tmp_path: assert fonts.main_font == "Source Han Serif CN" assert fonts.sans_font == "Source Han Sans CN" assert fonts.requires_system_fonts is True + + +def test_number_citations_replaces_source_ids_and_keeps_url() -> None: + text = "# 报告\n\n关键判断。[src_a, src_b]\n\n## 参考文献\n\n旧列表\n" + sources = { + "src_a": {"title": "法规 A", "url": "https://example.com/a"}, + "src_b": {"title": "指南 B", "url": "https://example.com/b"}, + } + + numbered, records = number_citations(text=text, sources=sources) + + assert "关键判断。[1, 2]" in numbered + assert "[src_a" not in numbered + assert "## 参考来源清单" in numbered + assert "1. 法规 A. https://example.com/a" in numbered + assert "旧列表" not in numbered + assert [record["source_id"] for record in records] == ["src_a", "src_b"] + + +def test_number_citations_deduplicates_same_underlying_source() -> None: + text = "甲。[src_a]\n\n乙。[src_b, src_c]\n" + sources = { + "src_a": {"title": "同一报告 OCR", "path": "phase0/report.md"}, + "src_b": {"title": "同一报告", "path": "phase0/report.md"}, + "src_c": {"title": "法规 C", "url": "https://example.com/c"}, + } + + numbered, records = number_citations(text=text, sources=sources) + + assert "甲。[1]" in numbered + assert "乙。[1, 2]" in numbered + assert numbered.count("同一报告") == 1 + assert "同一报告 OCR" not in numbered + assert len(records) == 2 + assert records[0]["source_ids"] == ["src_a", "src_b"] diff --git a/tests/test_search_grounded_packets.py b/tests/test_search_grounded_packets.py index 6276b33..64507e0 100644 --- a/tests/test_search_grounded_packets.py +++ b/tests/test_search_grounded_packets.py @@ -11,7 +11,7 @@ if str(REPO_ROOT) not in sys.path: from scripts.runtime.roles import resolve_runtime_profile from scripts.runtime.sources import append_packet_sources, rebuild_sources_from_packets from scripts.runtime.tasks import TaskCard -from scripts.runtime.workers import PacketWorker, build_search_context +from scripts.runtime.workers import PacketWorker, build_material_context, build_route_query, build_search_context, normalize_packet_against_context class FakeSearchProvider: @@ -57,6 +57,66 @@ def test_build_search_context_assigns_stable_source_ids() -> None: assert context["routes_used"] == ["scholar", "general"] +def test_fda_route_query_uses_english_axis_terms_not_chinese_title() -> None: + card = TaskCard( + task_id="ch10-fda_enforcement_precedents", + chapter_ids=["ch10"], + topic_axis="fda_enforcement_precedents", + questions=["立即纠偏、体系补强、能力建设三层整改路线图必须绑定 owner、关闭证据和复核机制"], + search_routes=["fda"], + output_packet="phase2/packets/ch10-fda_enforcement_precedents.json", + chapter_title="立即纠偏、体系补强、能力建设三层整改路线图必须绑定 owner、关闭证据和复核机制", + ) + + query = build_route_query(card, "fda") + + assert "立即纠偏" not in query + assert "CAPA" in query + assert "remediation" in query + assert "verification evidence" in query + + +def test_integrated_scholar_query_does_not_leak_internal_axis_or_cjk_punctuation() -> None: + card = TaskCard( + task_id="ch07-chapter_integrated", + chapter_ids=["ch07"], + topic_axis="chapter_integrated", + questions=["人员能力:培训有效性比培训记录更关键"], + search_routes=["scholar"], + output_packet="phase2/packets/ch07-chapter_integrated.json", + chapter_title="人员能力:培训有效性比培训记录更关键", + ) + + query = build_route_query(card, "scholar") + + assert "chapter_integrated" not in query + assert "、" not in query + assert " " not in query + assert "training" in query + assert "quality" in query + assert not any("\u4e00" <= char <= "\u9fff" for char in query) + + +def test_evidence_route_query_is_short_english_candidate_evidence_query() -> None: + card = TaskCard( + task_id="ch08-chapter_integrated", + chapter_ids=["ch08"], + topic_axis="chapter_integrated", + questions=["运营管理需要建立跨部门节奏、问题升级、指标看板和管理层 review"], + search_routes=["evidence"], + output_packet="phase2/packets/ch08-chapter_integrated.json", + chapter_title="运营管理需要建立跨部门节奏、问题升级、指标看板和管理层 review", + ) + + query = build_route_query(card, "evidence") + + assert "evidence" in query + assert "quality" in query + assert "operations" in query + assert "运营管理" not in query + assert not any("\u4e00" <= char <= "\u9fff" for char in query) + + def test_packet_worker_includes_search_context_in_prompt() -> None: context = build_search_context(sample_card(), FakeSearchProvider(), num_results_per_route=1) response = { @@ -79,7 +139,71 @@ def test_packet_worker_includes_search_context_in_prompt() -> None: assert "candidate_sources" in fake.calls[0]["user"] -def test_append_packet_sources_dedupes_by_url(tmp_path: Path) -> None: +def test_normalize_packet_fills_source_ids_and_sources_from_context() -> None: + context = { + "candidate_sources": [ + {"id": "src_a", "title": "A", "url": "https://example.com/a", "tier": "Tier 2", "score": 7} + ] + } + packet = { + "task_id": "ch01", + "claims": [{"claim": "判断", "source_ids": ["src_a"]}], + "evidence_items": [{"source_id": "src_a", "summary": "证据"}], + "counter_evidence": [{"claim": "反方", "source_ids": ["src_a"]}], + "source_quality_notes": [], + "open_questions": [], + "raw_quotes_or_notes": [], + } + + normalized = normalize_packet_against_context(packet, context, None) + + assert normalized["source_ids"] == ["src_a"] + assert normalized["sources"] == context["candidate_sources"] + + +def test_material_context_is_loaded_and_allowed_as_source(tmp_path: Path) -> None: + project = tmp_path / "project" + material = project / "phase0/extracted/audit.md" + material.parent.mkdir(parents=True) + material.write_text("白帆现场发现:偏差调查未闭环。", encoding="utf-8") + card = TaskCard( + task_id="ch01-chapter_integrated", + chapter_ids=["ch01"], + topic_axis="chapter_integrated", + questions=["q"], + search_routes=[], + output_packet="phase2/packets/ch01-chapter_integrated.json", + allowed_materials=["phase0/extracted/audit.md"], + ) + context = build_material_context(card, project) + response = { + "task_id": "ch01-chapter_integrated", + "claims": [{"claim": "现场材料显示偏差调查需要补强", "source_ids": [context["materials"][0]["source_id"]]}], + "evidence_items": [{"source_id": context["materials"][0]["source_id"], "summary": "偏差调查未闭环。"}], + "counter_evidence": [{"claim": "需与完整审计报告交叉确认", "source_ids": [context["materials"][0]["source_id"]]}], + "source_ids": [context["materials"][0]["source_id"]], + "sources": [ + { + "id": context["materials"][0]["source_id"], + "title": "audit.md", + "url": "phase0/extracted/audit.md", + "tier": "local_material", + } + ], + "source_quality_notes": ["本地材料作为起点证据"], + "open_questions": [], + "raw_quotes_or_notes": ["白帆现场发现:偏差调查未闭环。"], + } + fake = FakeClient(response) + role = resolve_runtime_profile(profile="medium").role_for_task("evidence_packet") + + packet = PacketWorker(role=role, client=fake, project_root=project).run(card) + + assert packet["source_ids"] == [context["materials"][0]["source_id"]] + assert "白帆现场发现" in fake.calls[0]["user"] + + +def test_append_packet_sources_preserves_distinct_source_ids_for_same_url(tmp_path: Path) -> None: packet = { "sources": [ {"id": "src_a", "title": "A", "url": "https://example.com/a", "tier": "Tier 2", "score": 7}, @@ -89,11 +213,11 @@ def test_append_packet_sources_dedupes_by_url(tmp_path: Path) -> None: written = append_packet_sources(tmp_path / "sources.jsonl", packet) - assert written == 1 - assert len((tmp_path / "sources.jsonl").read_text(encoding="utf-8").splitlines()) == 1 + assert written == 2 + assert len((tmp_path / "sources.jsonl").read_text(encoding="utf-8").splitlines()) == 2 -def test_rebuild_sources_from_packets_dedupes_manual_packets(tmp_path: Path) -> None: +def test_rebuild_sources_from_packets_preserves_distinct_source_ids(tmp_path: Path) -> None: project = tmp_path / "project" packets = project / "phase2" / "packets" packets.mkdir(parents=True) @@ -109,7 +233,34 @@ def test_rebuild_sources_from_packets_dedupes_manual_packets(tmp_path: Path) -> count = rebuild_sources_from_packets(project) lines = (project / "phase2" / "sources.jsonl").read_text(encoding="utf-8").splitlines() - assert count == 2 - assert len(lines) == 2 + assert count == 3 + assert len(lines) == 3 assert "src_001" in lines[0] - assert "src_003" in lines[1] + assert "src_002" in lines[1] + assert "src_003" in lines[2] + + +def test_rebuild_sources_preserves_cache_metadata(tmp_path: Path) -> None: + project = tmp_path / "project" + packets = project / "phase2" / "packets" + packets.mkdir(parents=True) + source = {"id": "src_001", "title": "A", "url": "https://example.com/a"} + (packets / "ch01-a.json").write_text(json.dumps({"sources": [source]}, ensure_ascii=False), encoding="utf-8") + (project / "phase2/sources.jsonl").write_text( + json.dumps( + { + **source, + "cached_text_path": "phase2/source_cache/md/src_001.md", + "cache_status": "fetched", + }, + ensure_ascii=False, + ) + + "\n", + encoding="utf-8", + ) + + rebuild_sources_from_packets(project) + + row = json.loads((project / "phase2/sources.jsonl").read_text(encoding="utf-8")) + assert row["cached_text_path"] == "phase2/source_cache/md/src_001.md" + assert row["cache_status"] == "fetched" diff --git a/tests/test_source_cache.py b/tests/test_source_cache.py new file mode 100644 index 0000000..6c80c63 --- /dev/null +++ b/tests/test_source_cache.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +import json +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[1] +if str(REPO_ROOT) not in sys.path: + sys.path.insert(0, str(REPO_ROOT)) + +from scripts.runtime.source_cache import cache_sources, is_important_source + + +class FakeResponse: + headers = {"content-type": "text/html; charset=utf-8"} + url = "https://www.fda.gov/example" + content = b"

FDA Guidance

Important CGMP text.

" + + def raise_for_status(self) -> None: + return None + + +class FakeClient: + def __enter__(self) -> "FakeClient": + return self + + def __exit__(self, *_args) -> None: + return None + + def get(self, url: str) -> FakeResponse: + assert url == "https://www.fda.gov/example" + return FakeResponse() + + def close(self) -> None: + return None + + +def test_is_important_source_detects_official_regulator() -> None: + assert is_important_source({"url": "https://www.fda.gov/example", "title": "FDA"}) + assert not is_important_source({"url": "https://example.com/blog", "title": "Blog"}) + + +def test_cache_sources_writes_markdown_and_updates_registry(tmp_path: Path, monkeypatch) -> None: + project = tmp_path / "project" + sources = project / "phase2" / "sources.jsonl" + sources.parent.mkdir(parents=True) + sources.write_text( + json.dumps( + { + "id": "src_fda_001", + "title": "FDA Guidance", + "url": "https://www.fda.gov/example", + "tier": "Tier 1", + }, + ensure_ascii=False, + ) + + "\n", + encoding="utf-8", + ) + + monkeypatch.setattr("scripts.runtime.source_cache.httpx.Client", lambda **_kwargs: FakeClient()) + + results = cache_sources(project) + + rows = [json.loads(line) for line in sources.read_text(encoding="utf-8").splitlines()] + assert len(results) == 1 + assert rows[0]["cached_text_path"].startswith("phase2/source_cache/md/") + cached = project / rows[0]["cached_text_path"] + assert cached.exists() + assert "Important CGMP text." in cached.read_text(encoding="utf-8") diff --git a/tests/test_v020_cli.py b/tests/test_v020_cli.py index 2a85e47..ed35546 100644 --- a/tests/test_v020_cli.py +++ b/tests/test_v020_cli.py @@ -68,6 +68,10 @@ def test_research_build_briefs_does_not_overwrite_existing_packets(tmp_path: Pat "evidence_items": [{"source_id": "src_001", "summary": "证据"}], "counter_evidence": [{"claim": "限制", "source_ids": ["src_002"]}], "source_ids": ["src_001", "src_002"], + "sources": [ + {"id": "src_001", "title": "来源1", "url": "https://example.com/1"}, + {"id": "src_002", "title": "来源2", "url": "https://example.com/2"}, + ], "source_quality_notes": ["src_001 Tier 1"], "open_questions": [], "raw_quotes_or_notes": [], @@ -80,6 +84,28 @@ def test_research_build_briefs_does_not_overwrite_existing_packets(tmp_path: Pat assert "真实证据不能被 skeleton 覆盖" in packet_path.read_text(encoding="utf-8") +def test_codex_native_profile_does_not_claim_python_core_model_execution(tmp_path: Path) -> None: + project = tmp_path / "project" + (project / "phase1").mkdir(parents=True) + (project / "manifest.json").write_text( + '{"research_method": "mckinsey_market", "phase1": {"approved": true}, "phase2": {}}\n', + encoding="utf-8", + ) + (project / "phase1/framework.md").write_text( + "## 第1章 临床证据正在重塑需求判断\n\n研究思路。", + encoding="utf-8", + ) + + args = dr.build_parser().parse_args(["research", str(project), "--profile", "codex_native", "--execute-packets"]) + + try: + dr.cmd_research(args) + except SystemExit as exc: + assert "not Codex App built-in models" in str(exc) + else: + raise AssertionError("codex_native must not execute through Python external clients") + + def test_packet_state_counts_ignores_stale_errors_for_ready_packets(tmp_path: Path) -> None: project = tmp_path / "project" (project / "phase2/packets").mkdir(parents=True) @@ -184,6 +210,30 @@ def test_init_and_frame_create_executable_python_core_project(tmp_path: Path) -> assert "中文" in framework +def test_frame_can_preserve_existing_outline(tmp_path: Path) -> None: + project = tmp_path / "custom-outline" + (project / "phase1").mkdir(parents=True) + (project / "manifest.json").write_text( + '{"topic": "自定义研究", "research_method": "mckinsey_market", "target_words": 12000, "phase1": {}}\n', + encoding="utf-8", + ) + (project / "phase1/framework.md").write_text( + "## 第1章 第一条自定义主线\n\n## 第2章 第二条自定义主线\n\n## 第3章 第三条自定义主线\n\n" + "## 第4章 第四条自定义主线\n\n## 第5章 第五条自定义主线\n\n## 第6章 第六条自定义主线\n\n" + "## 第7章 第七条自定义主线\n\n## 第8章 第八条自定义主线\n", + encoding="utf-8", + ) + + args = dr.build_parser().parse_args(["frame", str(project), "--preserve-existing-outline"]) + + assert dr.cmd_frame(args) == 0 + framework = (project / "phase1/framework.md").read_text(encoding="utf-8") + brief = json.loads((project / "phase1/research_brief.json").read_text(encoding="utf-8")) + assert "第一条自定义主线" in framework + assert "本章要解决的问题" in framework + assert brief["chapter_planning"][0]["title"] == "第一条自定义主线" + + def test_review_writes_phase3_critique(tmp_path: Path) -> None: project = tmp_path / "project" (project / "phase1").mkdir(parents=True) @@ -205,6 +255,54 @@ def test_review_writes_phase3_critique(tmp_path: Path) -> None: assert "src_001" in text +def test_review_model_dry_run_exposes_opus_context_plan(tmp_path: Path, capsys) -> None: + project = tmp_path / "project" + project.mkdir() + (project / "manifest.json").write_text('{"topic": "测试项目"}\n', encoding="utf-8") + + args = dr.build_parser().parse_args(["review", str(project), "--model-review", "--dry-run"]) + + assert dr.cmd_review(args) == 0 + out = capsys.readouterr().out + assert "zenmux-anthropic/claude-opus-4-7" in out + assert "review_context_opus_4_7.md" in out + + +def test_finalize_polish_dry_run_uses_polish_source_argument(tmp_path: Path, capsys) -> None: + project = tmp_path / "project" + (project / "phase4").mkdir(parents=True) + (project / "manifest.json").write_text( + '{"model_profile": "medium", "phase4": {}}\n', + encoding="utf-8", + ) + (project / "phase4/final_zh.md").write_text("# 中文终稿\n", encoding="utf-8") + + args = dr.build_parser().parse_args(["finalize", str(project), "--polish", "--dry-run"]) + + assert dr.cmd_finalize(args) == 0 + out = capsys.readouterr().out + assert "scripts/polish.py" in out + assert "--source phase4/final_zh.md" in out + assert "--input phase4/final_zh.md" not in out.split("scripts/polish.py", 1)[1] + + +def test_finalize_number_citations_dry_run_builds_numbered_markdown(tmp_path: Path, capsys) -> None: + project = tmp_path / "project" + (project / "phase4").mkdir(parents=True) + (project / "manifest.json").write_text( + '{"model_profile": "medium", "phase4": {}}\n', + encoding="utf-8", + ) + (project / "phase4/final_zh.md").write_text("# 中文终稿\n\n正文。[src_001]\n", encoding="utf-8") + + args = dr.build_parser().parse_args(["finalize", str(project), "--number-citations", "--dry-run"]) + + assert dr.cmd_finalize(args) == 0 + out = capsys.readouterr().out + assert "scripts/number_citations.py" in out + assert "--input phase4/final_zh_numbered.md" in out + + def test_run_new_topic_initializes_and_frames_project(tmp_path: Path) -> None: args = dr.build_parser().parse_args( [ diff --git a/tests/test_v020_runtime.py b/tests/test_v020_runtime.py index 2585636..e510916 100644 --- a/tests/test_v020_runtime.py +++ b/tests/test_v020_runtime.py @@ -12,6 +12,8 @@ if str(REPO_ROOT) not in sys.path: from scripts.lib.model_config import resolve_model_profile from scripts.runtime.roles import resolve_runtime_profile +from scripts.runtime.methods import ResearchMethodRegistry +from scripts.runtime.phase1 import build_chapter_planning from scripts.runtime.skills import SkillRegistry from scripts.runtime.tasks import ( TaskCard, @@ -78,6 +80,7 @@ def test_generate_task_cards_from_chinese_framework() -> None: "ch02-regulatory", ] assert cards[0].output_packet == "phase2/packets/ch01-clinical.json" + assert cards[0].chapter_title == "GLP-1 产业链的增量来自适应症扩张" assert cards[0].research_goal assert "search-gateway" in cards[0].required_skills assert cards[0].expected_evidence["min_tier_1_2_sources"] == 2 @@ -121,6 +124,122 @@ def test_generate_task_cards_from_research_brief_carries_prompt_and_skills() -> assert "search-gateway" in cards[0].required_skills +def test_gmp_task_cards_include_fda_enforcement_route() -> None: + brief = { + "research_method": "gmp_quality_operations_diagnosis", + "task_planning": { + "search_routes_by_axis": { + "quality_system_gap": ["fda", "general"], + }, + }, + } + framework = "## 第1章 偏差和 CAPA 闭环能力决定质量体系可信度\n\n研究思路。" + + cards = generate_task_cards_from_research_brief( + "baifan-test", + framework, + brief, + axes=["quality_system_gap"], + ) + + assert cards[0].search_routes == ["fda", "general"] + assert "FDA Warning Letters" in " ".join(cards[0].questions) + assert "fda_warning_letter_or_meeting_record" in cards[0].expected_evidence["preferred_evidence_types"] + + +def test_integrated_chapter_mode_is_method_driven_not_gmp_hardcoded() -> None: + brief = { + "research_method": "mckinsey_market", + "phase2_mode": "chapter_integrated", + "task_planning": {}, + } + framework = "## 第1章 市场需求正在被支付政策重塑\n\n研究思路。" + + cards = generate_task_cards_from_research_brief( + "market-test", + framework, + brief, + ) + + assert [card.task_id for card in cards] == ["ch01-chapter_integrated"] + assert "literature evidence" in " ".join(cards[0].questions) + assert "FDA Warning Letters" not in " ".join(cards[0].questions) + + +def test_integrated_task_card_uses_phase1_chapter_planning() -> None: + brief = { + "research_method": "gmp_quality_operations_diagnosis", + "phase2_mode": "chapter_integrated", + "chapter_planning": [ + { + "chapter_id": "ch01", + "title": "审计发现应先转化为商业化阶段门缺口", + "core_question": "本章要判断审计发现是否反映阶段门缺口。", + "bold_hypothesis": "大胆假设:风险项计数低估了商业化 readiness 缺口。", + "verification_plan": ["提取现场材料原文", "检索官方法规和执法案例"], + "evidence_lanes": ["site audit findings", "official baseline"], + "minimum_evidence": {"local_material_quotes": 2}, + "phase2_prompt_context": "章节:ch01\n必须围绕阶段门缺口求证。", + } + ], + "task_planning": {"phase2_mode": "chapter_integrated"}, + } + framework = "## 第1章 审计发现应先转化为商业化阶段门缺口\n\n研究思路。" + + cards = generate_task_cards_from_research_brief("baifan-test", framework, brief) + + assert cards[0].prompt_brief == "章节:ch01\n必须围绕阶段门缺口求证。" + assert cards[0].research_goal == "本章要判断审计发现是否反映阶段门缺口。" + assert "大胆假设:风险项计数低估了商业化 readiness 缺口。" in cards[0].questions + assert cards[0].expected_evidence["phase1_minimum_evidence"] == {"local_material_quotes": 2} + assert cards[0].expected_evidence["must_address_phase1_hypothesis"] is True + assert any("Phase1 的大胆假设" in item for item in cards[0].stop_conditions) + + +def test_phase1_gmp_hypotheses_are_not_title_restatements(tmp_path: Path) -> None: + project = tmp_path / "baifan" + project.mkdir() + (project / "phase0/extracted").mkdir(parents=True) + material = project / "phase0/extracted/audit.md" + material.write_text( + "人员培训记录齐全,但无菌操作动作违反 First Air 原则,需要进一步培训。\n" + "复盘显示 owner、关闭证据和问题升级机制仍需补齐。\n", + encoding="utf-8", + ) + manifest = { + "topic": "白帆生物 GMP 与运营诊断", + "material_inventory": [{"extracted_to": "phase0/extracted/audit.md"}], + } + method = ResearchMethodRegistry().get("gmp_quality_operations_diagnosis") + + plans = build_chapter_planning( + project, + manifest, + method, + ["人员能力:培训有效性比培训记录更关键", "运营节奏:从临时协调转向管理系统"], + quota=2000, + ) + + assert "关键解释变量" not in plans[0]["bold_hypothesis"] + assert "不缺培训台账" in plans[0]["bold_hypothesis"] + assert "固定节奏和可视化管理系统" in plans[1]["bold_hypothesis"] + assert plans[0]["core_question"] != plans[0]["title"] + assert "章节成稿应围绕这一观点展开" not in plans[1]["writing_claim"] + + +def test_research_brief_without_materials_falls_back_to_material_digest() -> None: + brief = { + "research_method": "mckinsey_market", + "phase2_mode": "chapter_integrated", + "phase1_inputs": {"material_digest": "phase1/material_digest.md"}, + } + framework = "## 第1章 市场需求正在被支付政策重塑\n\n研究思路。" + + cards = generate_task_cards_from_research_brief("market-test", framework, brief) + + assert cards[0].allowed_materials == ["phase1/material_digest.md"] + + def test_task_card_validation_rejects_duplicates_and_cycles() -> None: cards = [ TaskCard(task_id="a", chapter_ids=["ch01"], topic_axis="clinical", questions=["q"], search_routes=["scholar"], output_packet="phase2/packets/a.json", dependencies=["b"]), @@ -154,6 +273,10 @@ def test_packet_validation_requires_sources_and_counter_evidence() -> None: validate_packet(packet) packet["source_ids"].append("src_002") + packet["sources"] = [ + {"id": "src_001", "title": "来源1", "url": "https://example.com/1"}, + {"id": "src_002", "title": "来源2", "url": "https://example.com/2"}, + ] validate_packet(packet) diff --git a/tests/test_v020_workers.py b/tests/test_v020_workers.py index be65888..148b6b6 100644 --- a/tests/test_v020_workers.py +++ b/tests/test_v020_workers.py @@ -74,6 +74,10 @@ def valid_response() -> dict: "evidence_items": [{"source_id": "src_001", "summary": "III 期结果支持主要终点。"}], "counter_evidence": [{"claim": "长期安全性仍需随访", "source_ids": ["src_002"]}], "source_ids": ["src_001", "src_002"], + "sources": [ + {"id": "src_001", "title": "来源1", "url": "https://example.com/1"}, + {"id": "src_002", "title": "来源2", "url": "https://example.com/2"}, + ], "source_quality_notes": ["src_001 Tier 1; src_002 Tier 2"], "open_questions": [], "raw_quotes_or_notes": ["Original English evidence note is allowed."], @@ -98,6 +102,7 @@ def test_packet_worker_generates_valid_packet_with_fake_client(tmp_path: Path) - validate_packet(packet) assert fake.calls[0]["model"] == role.model + assert "章节证据分析师" in fake.calls[0]["system"] assert "search-strategy" in fake.calls[0]["system"] diff --git a/愚公生物_申基审计整改会议纪要_2026-04-10.pdf b/愚公生物_申基审计整改会议纪要_2026-04-10.pdf deleted file mode 100644 index 3d8c8956bf40d0b5c61f93fa6481db6277da6711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417262 zcmdRUWpo@%lCH>Nu*Iwv%VK6`W@c(JGc#DsY%#ON%*@Ozi%?(Q@$^c;e0~G;uqKs7Z0EYhr3;+h! z|Bx^O80r58On;U!GXDqob3XfD0G5{*7HDJqm)^g0{8PW6fg@1V_KyX0;y^1Gpp&_g z0f0`##>m##+{P3@r)F*=VB={1pA)hM*1$iuFaYS3oDH4a?fwAeKm8y4*YHR3N7uhx zis@f2CG2DG;Kx1{_@EmCny5{uag`B|8UM6C$Pe@IDK8<+wG{~m?@ z9wh)ee@y(N%+~2oB>pI-Q+6=0`G?BC=3xQ&GJo&&f49i|m3#hcWd5S~Zx|Vle<34kZsi1Y z_$%FrTK&l)!oWW%6Zlugk_OtCI++0&n3?GR${mhQ4nPBISht_vOKTRmVyIuHAD_eB zrJ+SPoaw#>RN*k}iS7}^iqW_Ouo3dF13!5?9?=mYkcE2f+saJtkLQZZY)^(BuASO1 zY(JXY@h_H6KaSlz+AD0U_2@#KKi$1~vs~&{`0$aI9=onTLsLR;FHADLKF`lvJH5Dh zIxcK%AK83uKA&7Vyw*N{T}{b7X8Y*IEd4Hi*-80*n{pa@JhU-!nKE?mz|He{ne$qG zc&m3h=Fxglys@$IVeh@_bF~zDYl}p8`f<=@^1*a5*L2&;_V!BsvU6|m&BceiIM#RU zzOf-YxAEZ;*|y=~@wU{3MZkP`JGV2|x9@#c|K75;>mJd^P4{C0{gp$x-z6eH8_F17 z%Z5x7HW7zmzmr|c$=6eWsJkCxK zgZItiJe<9(6oK!G2|Vq)6s7&K^T;y?-}Q)iinG53;4@K;^uo?x1~i7(blQj4L|=#R zFbFU#MTQ%&N-+E+qY_1&$itLXLhUmzGu-Q89zd{Hi!?O|F`N%f+Um94Z@SWYrg>BK zIT#wX-D$efda8Uw_o36$mO={4cAlV8=?<+SK!uvK(8WMAE>T`Y?gyP*DJ1P zytjYAt)9z&fhpOSDJffhm-~-bp3gjQx;{u<|7$4l0pc6W*G;g8bOrSc{`TL&><+47 zf^DQ5sHecUGtYlnA@)rCrtksno5zF7k~06$-Qsq@6sAu zwRNMDvvU-O_>iB&)1}%^i{XN){(5++Gr;<#Bm)WMyGW3v`GKd`tv9F2r=L1In zRcJp?VW|(<-mmL-nRTx88OI&WmkD?wrH_^rmZ_h=Dnh>U@F!IZ>RKq zEh~K0I69AXey2XZIl`ZADevXZ*y7wQrhZz3Z|)-cVk3M^zPV-@v??I&U}o_(;fP9i z{njX)%XVWu@_#R|zwms&^2j6Xn>%LnTFiVewxhea6MHD1{6JB^%{*+Hyp>b?++jMu z!+F>w>2}_GJN{kx^lNckD!QGn1m)viac~p~%n{;w~K2JWA zCY?NZ-rFpcw>meqszlKXiigSq@S~!li)XbyYHmQA9q?z*iga)u>bqvHd4lXf2`4*` zyF2~h@-v~YQS7!_oTnOfUMZdKudu4@FKyS{%}z7N@F|7F8T_w!nyj{J4VXS0g&=mA zx`J+6&g}%=$a7(LLcy*$YQ2{_1LrO{;j`O7p_&{YixBoRva$r9W_-Gb&R6a1khby( zM4sTra=fd{*w=69ye;d|LA(1ps-2&36UMQV}xE~xM=Piev4!&6f^r(l(5 z_-v!)64rO%^_d5n1>5syU~l%*8DR6}{E`KNK=CMMdBM=TVZX@Xpz&d_%0@yi2LQPP zA=?dr?uL+$5~^JQRnP!cKmk?AUfG{g0Zb*=B2k!yBG^I!ubwyXL;-zY9-k#gbUr9u z0kk1UbsneT$8;qDI zbVSb?5S?dq#NL|davqjF^7gsl@;C9;%zI)iW|>V(pY<&EtPxe;I^ z(v&-uw>E=!Bzwo`Nin9@TA@Z2}Is<+r-~`DNgfAMCBQ|4n1b1YA2jPLt6Fiw$ zJi~OPafj=H-{Ge#OqZK7!*M5ahjb)$gmwqKqkMt&K=4L;Cw{^9!0Yh;fawV9jQ+s# z2JZ;&4C@R&m|i>5n{JxnI^sHNJMuizn|Yi;nnv2S)0@_t;ik;{0wDzF z%R96@($%5!C8U2OfNNxjm?UeO4uBctx=mP6ZWUbZzZnn z&wk}AtJnHs2%EGl8!&FL9%6a!C28;wI1+dad3Zm4eAuuBA^$orD=UlV`4yCnth)1! zxh#G9X~&0!n$o&z7tesXIeAG1i|>0wF6@P@RJjx35FnHxK(7<4wnOUl&I9a+@3`Ea zyXltPOWmI0*?NN2KD%I|+3nM`I(}II%xAMHsi%I-4re0VyI8m#eRk;cpBEvmV`ZU( z#U43@0<((upX>YSg*sKi2bN|jryq3AEg!yf`yrnyDL9`#DH%BvqOBCbPGlxx{fGUaZ58@+n3qk4<|(w zdJqo+4lM|QiYiRqt50Pqu^Z4#=iKA6!zzv-Lb{MG$PP4nu*1%dXPw_1*!BpAg-RXi zC(fZW#-q+`Orj0OgtFuqnqjudU~E8}zibQmy@FgMY#aE6Dpd@kIUf2whfKo{NLFb> ztGP(1O@bN$S+c-gzUz6`LcALtk6^joWZwQzS%#8%XS7qfS=1ouNB+hX+(9l)n~=`*8cA6-Uef8)S}~sYkl|(1)T3uY%M>oDuq~qt=brxBWLJkZ zIB1DbgrbnKgOYHy@?@$wxtzhcigKRxlR)624?ykbBO$@C`0uTajM zE>4OK9m+b*0E^Q+WSy^qGZA}TJelTbBcyFfUx}u}z6{gD8OP-cL!pAQ?I0$8fmNU+ zVGPvbXXWQh^;}%Q9g9A{LvyluzwmTP)MuAJ45tYBHd+UIoVG zmJJtiod{iEw@KzJQV4H;t9AUSQJEWSJM##nIDz23xJIb_S-Qg;)dB_u9@H|-ua;lv zIbQaiZK2Bc;jorNPju<0F4w97+wzzq2CG|q7;KwJ4_2w-Pc63y-;nArc()sl-9_Jk z%#cUwkGNw-$bIICH(4B*phNrgAZm$O?PU-;w>64OQ#IJONjIK=>X0`d zB811@)J^z1RR6|!vWozF&S&}0%#^KFPnY; zTH(@qb&sl~n3Q4agvyvC60&J4L}*lF>iPU%D3CyKbJ6|sJLXB#7O~1OCoRE4r;3e( zGw1myC*6qhD$XJ{kvk6oYxP{$jFwj}T8ZIQR%_SMr$ErS z^x_sgxpaim|4rc=PIQEawLxBdo7>y;U|7M*sPjkP@t!_zb4ne3eW!-ewtGj31N*2n zC1W8xT1{0s9Tr>UctORJkje%a>f5myf=T~e@9(6%EYSFja#sAf27qXGZ8fD@g}x+B zKt`0XQ4m%={DoD4>u}P7aA=U%hWkTWiFA4C;BeJt@SDRh9q3OeNx66~u>!6j5(&KG z;q@PV>-7As&<8`V=90qR20k}{pBH&UR#u_f>M`{H$h zH7^_hO8E@v%0YjJwO{5iSgX?f1<|R3SSbzU0N$J<-25juglDS+2^HjaGSLzZ6dI`` z<=xtKo!nff^<+s^Ojc0W-=Z9GhZl$@Wt3-vTV&V@Ielm0`uGQEMskd7Mqp zu1ABY49AS)Ukt^phO2+c_}G+;E1FQ&g?YFF0X%272*n8r`_8M2umVTlf|iA6za4F< ztTcDFdwCOoD0wjI0%aE#HN#~Nl#4b^Bur1o*JN@S%Ytm+qv&_1Ovuh*<#XzRhU}`; zS47a;_|(uSo9S-L%GM=i66sg03SmMvGiOX3iJahx2O`%T0%jOb;nT6zi=1DneAu`( zba=1^4;I)C16OlX*eKna>At=XbzHH3qU(X?= z4WJ3Okd$wQ07}X024H5PhrW+WyYyMoSlGzHx@L-_N+ z2}?kDk8pw#Lx`guvB_%C?9`JP27l!uTIxOGNr?eF@3W5MjbdUH`E;50 z{?Hm>Xrk3jqcsT6Iq%{>{*@sl<7!@7TVTk2qP?&tcunXl{Ap zjB2~&3E#l=^7^1c_V54~K)OA9Ln*RSixSp9k~NvDTZXYhSfHP@{SOB!E=y-b*xV1XTX-0w>rwkrp zt>Z4Kah#KKlJWQAs9G-n99&VCa4!)UO^tve66od%n&sXv*6127BnOZQ5ADd2NLdy+ z!Z%E}DNQ3mDU2j zX%RNdc}N;vSXg*w^C+}hs=6g~Od^)rWxFpn{t*>62bmWK_ePoQt)8wHpFY|>{+bfX zQdR9;s)dj^>Jv#Tc|LiG4tV^m%Ueo_gCVmh&?n)c9p6IJn_h8YD_k_2K0Se51l2MX z;@BN0%hP2O{fj8_NW;re&3rR8S^P`eG{RQr#dz(=6SH1m8s@qJEdZtA*n-r!Z->V} zT-{>9@N0y^1x5u<3h{4~=0mtajwQvL1U#T;;bL_|3$)e<^DaTI@JVcF6o^b`BqhJ7 zcArAL$pV64{mKuZ>$pM%r{gI#4ZBEEVhVmp*bBFMfNF0bsJZqnBovlI^f?DrLAS>C zGsOsTe!rGc)J}XN4YfEf$0x5AhgtHIm9$_FQkip$8WeObH z$+a7Z)%*S6=3Lbbwd(eCwUR)7NWjn%sRUFl-z-)-X?Y!;vyt8QFZv>DHUE z`^GdPD6_s_INj@kRaNs1wRQQO;e>v2$1@;}vkE=ppi)c5R0W*~O z$^K*$92^t!t5l>&khb(U^J+mNJY6X5`yLen?S|gE&Uo#|zMNve#8d~2P%2B9jW491 z5>N#vsMkcvb0?}2UK1dyT~^sBmxM`&qAQ~06y*y3d1rp*9Qs`ocEuX;wMHN@-}LmR z(NRmU1zJ#m>R4aoQHUd~zJgmTJfIcvV)QlzM4n4Tqm%yGzP#dQaX56m;p7o9F5scN zmJhV$C+5;CVc@0ZPZX|LPIek4b^dedWv3m$0q~y1#z`}g)9HtOAuX{s+B#;?arfLF8x9fvCavhZ_jtHf|9WkT2F0*@1t5qADw!x&MlI%}<-9v>nLDk?% z;K2pa0rRkM$(3tA7bJnbKiE|aEx;jL&n>)PAyD7S4RvzZ?&h4Q_+sdwN|!|4pmLL0zlPqw6YjdyiCGP-!Inp!x}=G6T@z{*hG|!l zoh}ktXf$W|MplPDP6bqLfdw4W9m<0`&&j5d2@ACZguBQ#+0SfRg!=%UNh{RNgxC}Gsq?N84j53e} zlUv4j*w6f;F$ydwxGCa~To8dFLvT#ZaJic|DGS}eOT}=TjYHw7?o@0e#T&Jf*&gY=2`Lc> zG7Mqdtnx*K^GfN)i1NqI-c&^hkNdvcw}l);E6{wEKW{s!4!-}5{3Eb#-F#v6OvuOq zf=5KInWHiJX>S$7<~IRkM-zTUECF(0R;9~1h0K>)!A9`PT)dQ6fJs>b5KGa9@46Qm z$;vZ4aw0sY5+^Eufmx5-9oC87)#~rqHK;7jiiQ44w>^*YrGzX)tI@PEiBir)M#1K2j)K4 zF`ox%V2jPSpNg{Vz1QRFl+y{Il`&-$q9luBLLps>z&D7QqUKUe8P%lm+)GWjC+3Q` zaF4wAh3ACDI@U66v{o4FtqWMxJ$K46l_O;HVw4M&i3UBQj_PVHbI7N3&8CAYW-Q5< zw&cyP&F)GU2`7IKw+dx_r~_@KO@DKA2!1O?8*tIo{+j;9fNMG69kx&r^s^D=#+=NF zSt_%KvWz&wutcD&k1_gT-=r419f&R zb~C7e*a5omhbuvaA>S}zFtRewZcw|S%i7Dz)95}*f|uPwOykD=MeEZ^F@Bo2K|ZRw z{Bodx>{334}b@T@M<_Tt0 z$XK+zw39ZisyNtx(HTKoMwW&&>OWtFC!tlvO*y;p`Y5QC z^<~Hhqrl+Z37PHqd^mUdz2y*lJt40q8;;eik$8r}`$IY)v>-0U13>SlB}U>8#M*gx zW|Im?&J&P_$fxckpP}zhe#Q6G>wh(LSd~%!(yE+Q=tUHxX&xPmb9@XA3j?;$Exs5f z(QuQbN_^Y37c~wtCCDpTo{+7p70@X8^|nzw>w>hgI!xT`&EC~DMCOH3JN>=3O)Kle zU|>j|A^AGJcs2Kyt0GrCnCq+3inj-o>5d9nSDl#hb{*`D${6lq%{phctqv`#vyskA z$aeu;6ts-XQMUD#eHc#!^%;-iiJ}E_j=G`3xw3H&*%Hgg6B$aQ=Em~IUktfRw|P4K zlybZ**=4JleO*=>C+@n0KQ{8Ns05BsgF5<8y~@n#=v>0zsyUa+S@IYZH!v%$;Ewn= z)lmhx!+sz_y{z|nv5W)YmR*GaokfUv^Nmdnu>?x z$NP>5Rq?B`ASu@a8}sK1?=ywuFXY2}h7MC#q*h(9x>I^?vuTsarhHwZ7u=!tT*YbH zFt$Al(YK(kyuUw?#el!DcNc^Dgdb60^o7ERvw^J|S- zB#BQMNCYMLAE!VD?-@B3jJ?i$54YASrCF15dlV?uaV+TDry@^ry7|tC3zA)wNxdYw zccsIR*d&GL$#pIs#+0JUa-T}aK_Z2sn575{6sM!Og+1ZPse0Actq0a(#q$&PjS~(e zczW@QsaQ$GN^v$X2prI>j5D;3|jm zWUdZn)U8hBQkl}}=d9*TN5j^+;~GR1<*w3~4XU+AT}hvCJ{d%aUk&bk^JUo8WiF3s zu9N-A- zyjrG&tOmEeSRXJK)gU7Np8-x9DTc_vOcHIG(t*^nZFdt4Si1>hV*z0gnB9^l5rwx38-NrqgCW}DF8CntZZIpz;mxUh^D{# zluAER4>f#B97}4&_u(iSty%S2GX4Nm!+5n`fk=J}bjA%4R@7fn&1Aw7D&xc9C5*#w zs#d&Tdr1uN1+dc+4>u{RdSe>gZ}5!L#?8bw!8Nfj&CSTOS8=%erR2|Kq~TGiqb|8? z_lqh!Hm`1ke&e z0(+)&P#n*c>Pd~mg-2~6B?s`@#m#a8k8p}1dQvK?5C$#YA$#x`BRI3iuqlz${c`$v zr>n0tl(+A+Ltem3F!d4m)K=amoH}IKMk`&SYl-he&|_pS&!Q|!A&H@qmhU!ID+NKPky_EWhj@; zp|9*E6_B>J(9Pp*0Nd1xBxwv{mZ0TRr0mL2=a;vE+J03&{@5oyGJyfpfkHJqK?C}m z8Yq2F4DwLWkjJ*AqPf)?nN2Xh*|UxxOF}IgU(nUmC8eskf$iDSQ3*F)-kpcTymVAf z^{ckGR6U#~cp(r3!)H~aA|(_ErsytO0Bg4 z)_(tbrPHsclxi-8gLuVkpmDQ!9qn2&W^gBBnQHNXdOv;K3{YF7aM<*C_CsT=gI1?w z_TVO?j|KZpG>>lB{v`E2;{u%zpQeJ~G{($Hdtts9pEo{BXVYZSVY%c$``Ovs6q$oc z!+s&mVhPE;Dp(rYa_wox+Vb??gMq=Lho()es;r+fP=&zxgc+g*EhrsvL6HB!zQ1`{q&R{H!bs|I(FhvolckM_KUe6Wz7MG*+i%;>y5+H`$SY zJBc+XbzI=YaBrlQvNo}532{RS%^C>Ch{!x)i}8;{HL2N6`k~=$ZdpO)sP7!9e*2M* zHMO-}5#3=Nf+Lj_dcES**Q%uq?yHz5G{*5wdyom<*HTLaq{xKPUgib~9v2c`qz1u= zC?6JgVddI2$s0`XlSK=GUu<(+Uv>$1cWVdlY8;Yw?^YJqComTIyk}A8T`sg2Z0a7Y zA_rI>^c67CA=Y_tA|_lMJIj524a5mn?5=BMqx)$38{*HULgDj{RQItx+;W2tt3G7K zG^VwkcjA;b2If*JN19zsjryuIkHJ4sBNM<`e-J~pVc6q*XVX}Kc%$3^5m4|ma##yD{M%T2L8uSz zXC9;Ehq0yZ_&&_{i1_fZEer_9`CWP}AL6UU=2mHWN{I1>@z09PD{d=EOqQQz(*AQ) zkJVP!jgyZJt*fd88im)IIPm^*a6k_!YwKC%xCaXky@GMwl?^lT`NfsqBuZOvZzFyu z>`Wc+4qe%LQ3MZJog(%3H0%VZMA-)39a#cd^WN)bUhM_6?~9eL2boa}7v%o_(jps_ z*>?RnOy9z6Sh#H0@hhgU0KE%9%HjjEh@s4~#t>W_c-A@v8bPiF*d&dPgjdQmd%d=u z$)=HUdu7h{#sfp7G-P2qd9HGzi`sC_rVx*8jz9%V7OW(Xu8^fP>-2=0)Hrt1J6MI{ zE?#FZO-sdaP2I>BY;xPh;J%OA)M~<;qj6(EORa7KR(Ygam4sg;5-oRk*Ccs2s&A`nT$;p>VYXj>iv5}vDHT*G6Zi4Di#Em=;ScdwpUu&tiQ+4n$DlY?P=!^LFoqsD z2~GWS)LYrK0;iIsFhv>^9B`y;0_QLBBEs!4T1q5?5GZXf05H_%7uUSxaHBO%EFp(^bmXiv`_8SOgR-1#2heW zu)I|R*Dzez%i~vmtQ0*IBf~V+6_)d9o75DCYC3k>*^11?eIU?JB2B%h zUhu?o4s7|M;$G%1qc@3Iq`0uXtxn@}dZ{6qZO`?iaPKBbBmVchZApL1nzufwN;=qg zxJT}Tj4*%-+Gp@#TNCXi#bZA>e*PkmB`LJrt7=tP*wppJc~icj+Tzu(*x6fWqLlEL zLcq|ZPLub(e6N-2^J=nf+rx97tYuSbqCVy|eYKNK`@`j`h{|`IWf4v^Q);ghFhjJY z<5C6XwM*ig=kDJ8H{I=5@FT8%KU1nA*%4uA#f}8?TE;X4OpFd7_~5_*iJ|52X;G42 zXk`Xx6tzV)dQ~HsDmiJy#jN+u{IokswQnqC>S5gT5|r6}e}rsfZek&(bO01{;fXqv zqGJJ=fad#AGGH2}N8h-{?m@a^{L&3*-Xl2`tl?+2hzc>9$Ay>d#?sY`Ks8Xlso=+0 z`i-R>q?fJB#!w>?qn@Q)jJ=@~2&nr0k*@TeXQQK|GoZ4wX8Zm^qx_zumCYpx!p5kk z&Q3q)c2{&dQxzWU7L;g5xymV?I*{FkhE5k#+`~CKM_~`a1`Y$pHL&p{c_?$#$y&P2$qg|bBgcJY5|y&^3^EB+_fvyk@#yUo8nG-lgY#D@6$SN)C8Bj(pe)byhhuc-v$TNpAJY7tZ7*i znI(N3q!k6L0^hE1;qa0=1R*-Hx66ANqi4OD6Mvl;QTqi}hSNr^f3;@5aV(vIkI!N^ z)olJXQJXlVfJIC=m#Wjg?SiuvU5n?;$f>u&3IR9 zqsMAF669FJX6p}U-dTx9I=f`$)X76zGD zY|pq378lVt-wC584wwsm!aUjyjW!dfol4K&?ZrRz7ZEDtvshr)i)J1)=zAAdS5OX{ z|NN$AB4>TM(Bb>8b1$80X;T)Y(XTcs9o1afB6wPUicq62?g^|HkV9}V3#_R+i6ujg zI3BXl^}*89POX~7hL{9605`P}VDe5WP=XO_yF@LKUc8I=b6BpesiA3ZIPD`SN+wj> zc+IX`H}uK1o9w9g`q*aQbr4EGZtjJUFNWQ8_>t=rrhza$_2P!A(a0l`?J?BtqdPb= z@r#nu+Lgv7jq*$ZJQ8>6M50WJSqbzklGz!B4#EHwtIQy%qJm*|l=`@5I85s%sne&u z9uOTA@tG%9(TxIF-CDIDaoH(O5bg@CKpO@RVcn#Z%4Egm0zuuj6zw2^7fU!3sv4SM zu5jO;-M5HL{dU;KKQ~f3B=tiWGZ_#alJ@&L_Jx2u)X(0CJ|ew0x(X5)*Lc&b{TRH6 z1`&I;oJk?k$+cM6QelB|!EugyB+s`7Nv$PsG2(d`n?6mqeS5ko7+uN;m8-Aw4bu>s$gI6gOxApPVqC z_sE?YKb)nOxA(s{_6>=<>YE>(#^LQo2uK}HM|CGlZ1SID^d8ods(sZkAoGNl&;|*+ z)&CjQ-U_CpyXz_p@x*t1qL!ssuUEy!$j8w#nHR0jG=lu4##sEvy9IWvnqGKdbxJ_) zus3@8P!d_Q-elMFt(iW5r$)0H8*ZdP??NC0~sMrOXGs;)!6utdcJc7Sb- zN3d^w?sj)~EHt3&n~X9>RAHBMLUcZXQ{OOKz_L|3X|^w}4{YG2EUDvpIC5)T4w2AD zL!kX`1~@?r0yBm7#u6p#YN{HWQu+s#skz6xMi2S7JryADp7Kc$J0YJb6!0K_C++DV z&uDDl8gS0b!WafEdS+coWuvNYk_hmNBE#T?c=fp_+xmM2#x-9J!^hRca%Bg^hmsf) zs!Q~f_t^cs>Mhw5CFe8<7mX*#li?(CFQ@4S&sUr?9##twMDC{qT%+6<#G{&5c$rq) z+v708Tmx?X_NZ;Lc)ky{5iruyUf_YcL2nbnY=T@tmX3@1u}NN``!$I-r)~6~7~eu1 z1k_981Mx*g+xw4ypb@ay*_pRAqIN66rs>tjL{CtNsX8!vS1?O6`*?bJ=guy~PH~2d zv4{rR{!;kuJOtN}wD?OdCL$C(i7dm}D`D(n0SCfJL!?C9HsLg#a2}neO|Gh3!;LV{>ss9oJLiksXPtCW1*rU8i;P zB+?BY+ahora{uUbO$Jgx-m*XU;~C9Z;xX#oBxRt4j7gx9vb+^+7>jJAEvUp(9lEUh zar*d{wqsyt;|`SQaRi)vmha`8*@p~V%&pv2KQIaMxdukZEjoQINC){oipCg#Uc({L z$GsvcPG^=-5W6t!B}B^{#z|3mCs{w+W_%XrFoy0P_En!$;PN$9bkG#Ni2)fSvOP@f z`{hTR1II6-qm;)+P|M#fYveW(9&M_+^J`t+1>5&Am0NL04~@#@XV;A2)fh58(!mWD z!sjuhXZKag!Chw?)5=AQYpKztJcE8*#yoXXbkmk7d+qf(hD-92{#R8&ydghNAL-ad|Q;&`VvcW^RKV`@cx&y*eaZE5;%bVgO|R6# zzODdD*~e8&LH)^WTWmR|nCX5RBC6NI`6meG)gNN$wD&hAvNa*Aqk9@m@6{Iq!oxWZ zR7aAkkZpun%dDj02)9BgC0Ey$-D}EKOW`&i11&Nlc`QlPU5w7X zBeK8Dlk~>`(%69tT+-g&eTcl;aq!Z3+=QHi`)>Eh;(7|$tWuYfqyn3B9 z>rZkQcvDh)B5HAIU66tZe=pr=@gg|y{$9kj?q&ljW>yh)<-Ue(yOB&G1d^{0LDmX% zMfG#0BR8zl-)a$l1XT8ql&826BJ`9&S}_!NtoXO)phv>0 zxQh|n1B!IYOx-Hy4oZH71@NKCaVC-O5Noh*n7?EGf7+0(GxD(~y zgNfiY-$v{lw@Xu%BSWtKZsI@JQu(y58Z5bo3Y#xg{FNEKZ)XRNQo56IXteh&V2TJioCwu3cM3})G*_VA^#iZU!)G21v6%Qh=b&9G`*vCSw&VMMUnAj&G<-EOzS5? zcBda^v>sPMr^EZXFWc|A+ICAm#h;*u?`}p9u2%`(fLHuCV*{uRmGtIIxxqq*ip(Mx_)<@ zB<804SRP2oE5!vQ6sgr=h%6hWMTtR4$QovRNjvmc&8Q)W0p=>%;IBjplM(kdvAq^@ zhtxMg5u<9&uZMgm-IuI*H?8kDHtWrWb9L_eTUoo7)^pZZO}29l8QVx&YeiaG#cNOf zdcNb{deyz`aVJ}~*CA1j!x1Bkjirr?yDU5zY&uQmO1928&(JjK!Y~)1>%QIUVhYF| zy@-i~^9o9NWRk`E{Kfl>naSY)i>Aa$dL0#gD~&5MIrkCGZz_`0MLfOr?dTHv&K2T? z3+x@w|If6q*gvO#tp7vE92!S*E8837LXqeqhRN=mdS{VkGb)}StIFx10N^~5!CB@^ zbu!O-Rn}phX0CNNxzC#1Uo%N&6E>~N9EI;lr0VR-wV~MPVBO-Xvw?nGEY_AmsoP*V zt!^o(%%@vsr&lDvVmV*HVeb(_9*4$t|ZKm={Ow{zeOndugUQ zhcu2js@-UZZTifMyek#to+j-b#QEh20n|gtZ}V#o8^nKexc3i1Bb`WG{F94l&q`#p z-MF!rEp>ukjaB01n(o_e>8_rxF9NX@u{90#Pf>!=^KFW_*&5Yeb*lY;^ad44^ox?1 zmZXsl$b*_NMwLPT?{tI|`ku?Oj3|)ZwCr$q$r@XyktloT)kop&9?aw1nL4XC{MgDMCF!nN(aU;Er^dL}2ec$vt#7HQ2a=my>~QNfOSJRPlh_`>yF6N!>((nUBKhVJz8hN=q||B7nVd7{|gC=C8-** z8ToN&6-+d4X;R`N!$C~eb1s*&_wuSu9^Tve(R&;ey}{Scw}o9Az5T5A$GU-PK0lO4 z!40+?u#5eLX}xI2J9V)#13Trih_epH9E%{m&dy6iU7qZNDiiC6K-nBW7xlPf(t;{M zy`V+AoZ_Pql$@)X6>GqU#4odvx6LJD-S;G^*O%;pv2a1!gt(nNp+jwufl1 zLMXM!icPkLkb9{1e30fpcPxU%DT^u!x3c3npoEe}PWpfHm(lBZWRe@(6uIZ{R`VTNh&e zQF{%t4}sxctI-oM9H}HFt1?bBXC*-T&7`ms1dLEy&AjKc(~qbj%y~#oul*#}g};et zsmc0&LP@8+^_Aeh_`qh9RmZGLzuwmx-nQs+OXT!gaEfbt0jtmuYAQC=(6~-VLVI^( zqFP0C2vPTAz$jM}H=UE0#oHvu6}(U+P&hF4 z0Xt2LJv#9HDQY*&Bqv+U4;kF&g8j|{I!i$Te;=~d{U=4PNt#}|zg{}f$2_EpL5MBw z&+-4zjyY4I9Ec-a3~m;|*?Aack+$zZ{)aB933qt)$o+`525A)qWA{0o8<)hD0>!4&<-BoT_jF$+R7Wmb!MnNf%lv9LLe!LP;o;5-S6B5- zU~K#)0i}FIeW6GF{RPD+DMkxb8Jg)Dhcqd6RM*;v23@D&vz898w1T2jYH;sKnJC1l zHJ^@vuZ6Rt5K9zR)HZy(&d?^|9f*n#XhDtvPNPy>dN;^F7827jYyqB z#;^*S%9GrH_2qrX(udDyN}A4`-#I|ZBJCs8xb(V4BLR)jz9tXrv(fCpqOG-aX+h-D zw_P{O(bC3}>ltj)<&Mn$Pf9syvs_OHDWTHFm?IvMG1=ACvndETN-K z5HfE4XS!-D8_&m%2?^T3Px-pX-sA9Sgrukj1f64q1xt@9RBtA$tXoiCL}q1>vwqV> z`EVjK$cU7RV3Rv`<-k+_rI#ACZEDg()oohDX>$HTBP%jou!-oKpUrnzW*M)N-aAE2 zdRZ%1;~7X5INY`5?gP>WtV}wk6RZxCZ~lkX>sQaEVN4mKw9hfgSzgWtdB0DMjM}o? zey`w_^E!T_jX5~uh{3+rz3U8Amn3D)Wgu=gy=0m4v8_3oEt$0f=YSpc*_qwtU7(ja z5Xg>+cRr0K6-9Z`k}GcVSdi$+JwsPVR|5mpmsowjfnvP7zi%63cz1og<*py)U9jy+ z{n(BLFyQl;&cwlL&G0Cru=kNvw~rwN;Dz+O1r&;L_8M9 z2lk~{dv;ViY>dnNp6df=xscw1)a@_^|PZrzpb-()Xf?3 z>4Lz&X}J_VFE1X`Br+bpDh^WyvFr@RLVT@-kJakqEi5Iw>*aw4Vda(0X9r3v>-`{b zy|gU<{{THe!oSZI|MJv=*|69D_NxZ%IV;m^{xSycxD-!*z3Fct~^s|$4C^h_F^t6!v zuE8O?)17$VKuw^XZp;OEUA}PR?YFP|(hWO5XLt|i_}A}!>D}{qEBEPaQ|pRrmmmM) zq3u0i`0`J2-H+IKu7ZA_pnWpV*1`!Z)qcV^LTFDszv$4E9Xv$6*2&tAT3X=|sMe#B zb;zKJ=#lW2s|N6{{{G@;26%Px+c-I&#%qdaXd8xs*W60ay0x66$Bs+hF3DDd=ZE|I zi4qDo6Cm5Jg|Y@BL9o=%q&=qdvR0BY5%LHTFC#fN0e24gCmLr~$I|W1byld{vteVy zvc^z(q-_$(W5+d9+RJ|&C$%k5O6K#j9i%8(KZ=rlW5OAtxWix$V*iHX!+78N;@1YD zwm)E9@s;8}JX(BOrjzGny?e>K%9z)OFshqf_~3j8cQr$t%GRuEG1 zZd2ASLUdSamkenn2tzg2@HIHcLu*IP6f7kXi`%s4Q!e+;&=Ou#TaSE z54adKqkR4+L{7sTNWvV@0#5*aqaaI~KBn{=*W^OJ8qy=C)LZ=K!3J@)MJlTSSJ z*QfEl+s|&^^we8VZQk_c_LI*%TU>bNNtwqu;eB+#ORguO8SJP9`^P!C1vt4y=HwQt zSXV-7gfswY8qy9(hajDXbO)qIA-xRgO-O{3TbA^T{ycMnDyX*wkx51d-iFv&A{uGT zfvJH2$5lWF+=yc!9^Y6xPmfcP}7MpP=a+RvFUh*d**_vf$1F&y!+h;w>`D_;kD2G z`RV75j`!U=dCgU8bKn2`eLvj%disV;Dw(M}g+;b%=Spv?hyxvlrFVtFTyx{WskX>vpThifu~^yPe{^PY)oNaC zt6f$zvqLC8gGb0q{}DHzXkxUf13vH!wG}rI$EZTq{S`2J3VHMt&=m?8Jq2`=0+Eor zX-GRD9fEWk(jAb9GWRm1HzASH^U8K6JNc!yt_|C%1g+s|PtwyxK$W5I5f15E+E?aB zI`7E3HVrjTRW^AGlli(QMh}f$|61fgZ++#&C5;`y-VM!7$ymC6tog*w!pJ4;9gM&W z?u5QnqHJoj*toa*S4kJkIh&&q=W(lQh!m z*~fg_5*@nEOZ-gB_$s_YnylkU9J7YYuI^V>4z6skHuY8S9xBYXyMTj@c6GN!%Nx3u z}Yxx~|!@>vyq5rRim@;S+nT7o3p@W&IbmKyx@H}&7Rb>N%&?|fee)%=Qc&=lb6 z=D)@II|Q`bPGw#Ef6dnkddf8|brX+2IsV zU&oX7RmmO#=EqYk`k!Tsf%`-qFu3L8FFrs1^IpLHuehRknw;jt@OpqwUZ8Zc)LOxk z2MB0`x?2kPaPb}N15uOWzSc8;u$Mbc{5%Vv#c7_n3gaJN1R``nce9Doq46buRt887 z(hU#J&OXRD_WbpI;v)+z{D3R`jjzfAv-m>%_F%E5q`Y{^gBpM^DuClj;$+b+=e|3ECoi-T!pX0ZS zDR#EP!k6(M7k>8%pB>S=@E?m>Lz?Qe+%s6s_kZ%;fP3C^VfRgZ|82K1-d7Lwz836P zEpYF|Im(3OttWB-zs|TAO^qqXhvvasNvjHuY{|ms)^@G=;J*7WzHGU0`02w(pE$~m z&i`i3u7`hdX7`5TAJ-f^dG_Q{sB<~gc^LX#2Qn}&yZvA`8yDBn^+q|8k+z;nR+H@Y ziQ9PD)L-5;d3^6Z_g{Q`rEvJ{k%P}2DsVq8{_Bo2zkF!lMyy+V;8Ma6)%uC7l-(naATe1jWCdKw zX_{6&a`3Lt|Kjs}F~nc8;;JtFo`KtHe(Ap#dhO0rv-`1e*{b_VpT%L0#;IR)=p6l8 z968XP%ro_pg;6;mKtnBiDlyN|Z_|-a1JX+FL_J**g%|bV3}yZ>H>mu<@py}Q_wJsa zp89-%*LRuX)lE&sIR1W9PcQA`hK0l2MtD~biV_*kk#kYy(@-U;Kwx=09qIEpk#}0k zvLp?f1KP>hGii1{GSec`4TT-A^o)sc%_%xkpnQwlKJ5Hgxpd~ zdZoO2N|XqvEW^s^YV_i|1eIt^(Sfc4!!V@hd^o(UXT|=)Y(W_WpQrwHy5_E?YRe~mQVw8H)xlH{{_H(H+|L{#fI`RT zf5Z3#TDSq-O>tO}nJC}J#qAE~KaK{ncoupwn+(+iL)BqNPpCca^J*y0nh@apQb&uS zMHi}rzUllk^gMcOnP%W{?(>@D?3iZf8QU5&{O0 zx7}X+Hyj%1Np)`BHiwNX2kNpjyM7|m8nn}nn*Tr08lyA0g@2#Ax=rESFrhAPbiG7e zYddS4jJQhtXXbBwr=|7e%zeMO@176t#Xmpt=-~rT9m1Xa9|9(JX7AL=lg}JI2G0+} zoIU{06FKk+%U3gpWR1>NV*6lM$+(BRmtVH${(JWvUek@=JMzq-qfZ>;MmOvR4z{cK zGyLZCrN>@6b}5x_P=_qv;zV*U$~RfoEXp@Y)&O5N{axX<`rq%pf6wL1#Y4{=Irhj& z5N=i2CrP*8PoKQ(?1|%4)}(>9t0-Uo#9L8oLeJg`h{B5fvbk7kf_rE*(T% zwk*Pc?fGK@L1~nCuQ0JqHuDqqU?C^+S?$dM?t89-jBfqurXtx z1!p+xCy2U0X&Re8PSdonIX%?>f7Ji^uzTR?rw9I^1*xzT-!lJ0_PhZ4e=|J)e?|Wn z`tJXN_OUblztBDUm=5aMg+D{m{15RB#l3QU1^h15$Mk<8C9fMZ8H}X0gQcqo7G>BH z&p7fKr6v5~oy%W)YQ>eORy_H&aqRv#?EK5Cul~9C3n*)Wc>}LTm*)Quc2M5Z|KigF z#jo~ng(hypcg$CPu-LYTDGm#geL?bfN6~dKqOk^p_)0K0!ti9W_#c2F(SpCno{uhk z2DkAoV3QdTi_UV=)lqmh-6{ZKg{i-gY>A^jdH7r-#G@6pS}xYuvJ^`N zJ66dWg+0y1vnfaFx~e$Lvb3Y-3*GoTqds$+!CF4zGcQME|NQcW+xXA&&G2sI#K{hF z1}z>vN55#03`~=>+bBtwN65AgrcMq@p`S@GdKxrvrCx>d#n}g3$XR#yn5<;NsuI4^Dje;qPw! zT5ZRCW2>`s=J1FXNWtX6l}C5S+M?ekJDmg$#|k=8FseAE$?GIv16A4eV|S~sF_zEd z!l7KIAy#wrp@Rnx;+zakn@#pwj=)(atMoz69kb;F( zbQyb`PB(<|^iGtI$#6&ep zMo5=&@sOe}BU@y0q{v1P4f048%TP*!*wbX>8|b;2@>TLY+h+lzDxHy0`qB!vamSHe zvUA5Kolj8OC;_G9GYM%lG2JWR2QtyWc;BQlXsZkWKoB~kG}0mWOQ$o z9znp5*7y5FL9G^pk@<^#ZPgB^{+O%WVzujac4xT_ug1JW>?ivedCt@m`f7SIS-D~( zjgZ;D@F2ez_=A!jB|D2YVVEIc1W=f5czX^qWlN?@*7EiO&XysEUMRMhYGYGsY(3;0uW1`Nj{L+qP)~alGvbH@L zn%^#{ddc1rax8>FuUEUp%>e5|)eX_Y7M}`>HBC)MN4`FRV;_CQovQ5dC;WZ!jI};K z|8%6*tLLmCi$d$Ra#tzZIC`WMzlV=I=MUHdfuIe4;0}8o@J7$oV&&f zG{SRL*%yr|3uZs5KVxzxp?%>o{%!8hs2s*64)bUfU5>tve?#`EvSnN!m`^0%FKvjr zNcv_e-;(L8TS7NFBMYV`D;K29(gUA~+#tJ9$)Px8%Tfk7#4F^;6grTvq{v=|m(UfE zZaz=8*I$8drqjD0>dr9gf+xpe__shSE}~b+_e`<#3mJUz96LOaz{O&n+B-A~?*PfNya}IqS+IDNHj&Be;enDQ6Ns*T#r&(;2#49`X zWeeIz^IOr~h#hFae4*FFtH>vy%AF=I=`^y$6Q!^G0*&}3ugoBJWP$uOmE?3@vR88H zp^e9&Zni6uTqQ>_l2^M0Ugg0Owr5Mw%O&U)2_iFs4=1p)m8&nE^|E-ZRn(Rto5ST< z!|T}>U-6}*Ii(4av&W^);?fCM?08>2_Lfe^GA)s%IlQzqj@#rdNj5)6o>CI^Z|TVh zr2|08xiD`TDr#!&Rnrkn&w;V6&t+GW?*J%%_|7}rSAye-P}NY)GYS>v6e`hKH`=7J znVLuI?3^HqVwv4x78Lx@&?=W9R^OjqvCXd!rrN3$CjIz~fy|Az-?owos&EA&ra*D` z(6*R0QCo=5(bZtI(t-0yQ+O<{d*Uvv29ri^7EeU*+XwfD& z)&^P%&0e!ZW2kLtbk}xf67={u^$!Gro>|X}G_z;p9B1-){MM@@ZRL2Z_-LRtdP8m2 zN?xL+__f8-yny!+wV=TB*Xb+@rOq0*@}g3$QRl!%6NA; zoHT-#pIW$^f0<`z&W)p8_yO`IRg8eitdO?`$tMmjoP*_K>n%MDjt={A^{ zW^4>GrWgkZ5FnHQOUNbR-VI6M4$; zsET&WQFQK;+CFepdIK^|VItPIHw>wtoDK9AU79nb1w-0{?hcoZI4bFtk8lwcC_Z)* zVM#=KXPm7!T4~Cp5^LtF&fU)4iMy7T3u@H6Biv4y|C82=V?q}MN<~j5$^3gWLH`*3 z{{C>id2eho?+D4+ky@v^Bg!EaH~zlc&b$~$O`VUO9{eZK@A%F5*;3E`!Rc4d#O!yx zK9gL%{*GCbSGnV>i=~xfN9W#ODA8!#>(5S}&jqt0;}8OF`bWJ}?&L}O(+hvGy}7%( zk{M6BREt{b>Ps-3zaw@e)2*T_u&(a>kz~ok@k(0e`RQX>Z%~M&m10;9`aCvwNakZ< zwUJC^kwG8GCR5&^*zw>F#l(m_uc#b53LhIOyZI|`vR`B;NL}L+`aWP=JwpHEo0?+< zHxCSyv5{u7Ksd`RXo++6Eu>XK_Mpy(h`IiCH5UJl5Z}k-CQuPt2)!IscUa!Uq;RVn zkh^FiHR)grr2K;Bb=?N$GdY5mN6L^KUmz@;bX&Uz`4%MKLiz*Hx8JG}D$!cAe3QBa zP5@1Mgh;sL=3~%XE|qa|M_$7&rnJYLCy%QT-_aCdI5U&EtsQb~A-{F#agZz_0RwC= zJ@*+NXpuaauCqaoKXB=8C-UkBFapEth*Fni%m;uayd54HmS@oN3^}K+3`~*N0M~@{ z?+axt>qUPaLC-XgQ6FvOx9Mvp!>h?pRK290&OhEjT`sH9Hj;GdOw!Y)Uk=f6BlobK zg@CTMmmdB12M6x@^T!{*{3SGFlwUl1_QNHXO$-)-{fFOq;lguAhJqcFG5Rg(-JQWm zS3c#cbT4%HT*+*A{O;zh^keJZbTX})O51bW);)#s5@WSws}Xzi9N%b&kzntrseU4# zKUrs4rNgfT&_v`?9S%kmGU~fN0RPS_A+KUbvn1!O1<%tgH=)-Rp5Tx@+8?Z|Mbx9b z!sq-+xx?g;RcYrtzKZ6iK+he>XdO1)l`RJaS`CZ5Bjmel1Ou2OJ-*46HJ>Olv6v^SH{6rCiSF+>bD*@0ZPno` z?`J>C)-~JaZt4fX+;g15#3i`qMjx?VeP}%%ppUop3COI&We*^6|0Gq@_JFbRf^|tVWZ)kHWmuWo=m@Tz@`vcV`J7fG*XDgzGqg9#ZOI4KZWJ9L`Xl6jyW1 zXf+$yJ1TG87T@yJRP!5VhnZ2LS+BQP8OZW+rL=XdFW?S1Sx(7|BAdJ6#r}bh9QV~% z$7?F6NE6L_Cy<80$gxaU!e3dM7zl+2r?z+d7hYO7xnll~3_6(=>Ly`p-@>;AXx>li=_;R08DitIt6!6)VxZUiHWPPrD&t!>*0*y49LI!#EJj1e5 zHSlPpPo-nc?*(g-=K?)W$XY!Q$>f@*bKYuWesJCM_nzueOr=8?KYYvnJ98$JJL-1E zt%A&PjKG^Y^p>qu^~%TDPcy&Okop-k2cM(PQ+HDLQ1{bc1CqI&+6S!>Ua}j}Mi}DG zx2f+pN-d7Eol*-C4YKaGfPHi(N|1HhCpeGpLz^W-9vru01IjL98E1my<8*3=8;waG zv-?1cu8~o_Mus*xH_)KmC*fkCaQ=&A3A8A1jt8&iXvRsW6J>DvV0z7Etw80Q8p|{+ zQ-rbLBB?~uMW({@)E(OLpjPS)qp+#XtNEL|q*mp5kTEj`zMSrM{@l1?)6jS zaWwc{{!4&$FrQieyQiN0`=#X{Kl{|*EjJI|`=|4{T{qr7J$uKEJF}V9gEvo}e13TN z`I8SltblzZb}yWm8Mtw^-vPyI3cvgA*|XpMsrIk=6G$fh8T0M_dv$v0SUnPNgf(g^ zw0F1>?{)XQ4mwyr7#){?>p^MqAPUhLOcYubE6^ym^%7+2lwvGL!{RB!f1lC;geh zq;-@Q#sr$~8a^;EFmQNSixqmWe1QEv+es}_$LSJ$HtcgAA@q48=o7f0tk@d~s~4(*(*`3pBKdg_xaUGYHw>QGVgj_pn+ca8J>0>}3) z#}nK7nm70=irpuN7xVGBO-ed)2_hHad@es|iQ={098eG z(x_8p50ag}s|>9ITX(ZaUBGI*jdB?cQfD%ak+l#y*+qG@?Le(Rxrvu}hz9Saz7-S) z-TVYu=MFzb_5dy+UAonf9yO%58q!ll(lTZmc+!VDSw^vjYz7TaUg8Hq+ck|q>{}Ahu6EiE<4L$nl zA+sXb&7xdiy|CRO$S!-rFT~PWIkmVj9SJ2pc2hDT*+Ld?ycC;xY`(Pn!1aA{)L!n~ zo9VU2m0z&TR*qdcHl7x(R(DE{F0QU5zg_E*7_;4`GWV;!gF~Ur=(*v`8zQY(Jf-C+ zi!ZqMWK4+CO-H7q%g^u}&pK01q!)9%E$nfIt# z?l4KT$?0sa5I;>bp!Az_qX= z@blEG+VVN-3)-0Y1xd#xK(PH)>hoIDfnmt8i9_v>I}g55ozpZxg{kMXyMB6?|u8n$6 zR~cJSFQC7VqTBic^+5^~=wvC(6Zal%dAG)Y`6e3au-o`+)OU%IyiB5a0RyZ7BQU@b zqz&km%bIZuz?@}b<_4se&wsq_;m66tXC+L02s9a;j<>H zj)3tx^!qr0o?u*)E~00|r4pfj>%AMe#w&PT9^8N)tluwu+~+p%@>T8iy+CTXd>5_x zBHHpbwEPNMex;1%Zz1_xS}X$hz-+ZvWIR=mUWBE^ZPThe-NwOfR7}FbD9ne0yLxMC z&^R=J=f>3Xpz3_vX5w}QC#@G4?J~SkU(s`wDnzSSPf^D0=yMhQFAiTQrbKe};3w|B zyMEt&*+VmOc;sNAVgzNQag@6xVrn{Ucn!%nl@0MBL$B8OBd!NSK=4A;k@ z)r{N~P&=F~)4x3uS@s6Iypk%o@`2u2-(*+%@YGO;-N}UqhNrR?E5q2WeAr`E1eWb% zn60;THaue3lX?}Z6@7Y(M}?JsZzTmOFpMaRV&e05bqpHR%3sl znZF43!eklOSnnfMKewR^;gP^e=F{WUq;Uv%ep(f1;U@7`xUeoIj3ZjaS=dh2i=`Ec@;GiN1=r{`?7xKY0A5QExID zmIR;O8FbS>@7X@l8yJ1*m?iW8!#2O}OUELT8W8Tb%TC#*gk_6^o^|IO$Q<~eEH{D{ z=)dMCa!1eIIc&8sjLXW1ndt!&Kf|(je`VBPD(1aH$QP)T%l_e`-JXyf-ai}aAD=6E z@@}WdX!xD?v0q_+iL~0A_0&$HTY-PDrcGEBiFwVFk-tVoWg|^=125al4q+1*lz+S@ zXz=l zJQ=3*{hb*lH9WO8wC}>!qV(|DNLj2LtTdiJq_}NM@9s}7?L9VR^(*JTI+d(f%AvBa zv%4Pi7t;ynCCMwx!UN1}d!D{h6qV?Xfj#z%YuNpvac%clDArWJO2CqENevJ9C=Jm%lAi%jGYVm@+ z_D-#&(wR@I+Nv`L;{3cYHAwJbV`%RVxy6Fd8pV*1q8Hb!Sk{c*DRBisIV5;7BiZs$3xJ64_VK@EF!u_*J5#cF1n z@3ACC4$qhcQFcrn98E(-1eW;#$F`~|f>1cu4`Z^heEhbqOe5oSni+4@ht#)h#JOfU5*)WIXJLMbaoDTFap7I{o04*AeE-DM;i*nJw!hkp z1TwOq%3gV3KB`o^6QhdR^a)N7KDv6cqk60)_!C|`>&?p+M(|3^8IIqg`);>z{N-b= zgvS#V<$Q`hW#Y!bF(FSSnjd>yjf(WQ56)K7y9-FKt)Mpe2D0sO{KJV%uKl!@*Rgn2 zNGz$vKJbgW*4eL9tHIC@kPV$O(2dT4BkN%z;qAJ?4d=*{b5+SX2FP-Xoa-RWL=6&! z2cpCxfwV{@8et(lg(t9AJt_gwc82JkaAOvthe~ZKcZ_O~*m#CW7zP8#F<`!iGH4J; z+@e*E()Zm?Bn>Y%z|@j5R_5GVzzmyKx|0_4G*7GWrEZ-OM--Zou)B)5aI?A>_%DC= zyW#(f{tf@`ck|UTPaZnM41S@q?EJGfUl>{CWqo<;dhZ?(zQ7ePA7)Q7>g}S7a_WiUo%JIio zevId`>D{H$?sS&p$2jg7P@*aY=TDsl1$ebBnf_o;U?d6SmYFJC`8fLp=C`OXjA-b+ z1IRjloN+^`w+FS4v4h}^rnP!v!23H)hOsX4@$^)yQ`$!Zr(U<_J-UPHHeg+P-i_2Y zjX>J~s!GTx^loAYqh8V&$jAX01e~68WC;%V9ca0_iMQ_~zoGmHAeSJz2BB1lu0hZU zqHEJ=d3NJ!Bnikmk_65RE=V{ZxFDfeBd&pj)`73{9P&w)6dB zG7+|Vwogqh`H=F>j{Kz%spdO+6HZo;oKC?WDo@vkw{|!gR`7;%;m0qp)2`;PT|TFY z9{sTr>*=w1#i+lJHcNh&;E`z83w0p}Y%-aZbn@#R3&r{7kHaa&B80oMcF}5LIvWw2HPln2oyj~@b8B8W@r0+;KVN;r zF8x*WKWRFW_Wb}AeX z+=a<2A7H=A_EBZjmS(9V)c0@{0RpZ771DvPdcYL`u=_T3f@zppm#ITqV{#D*yFF(% zaerErT4pr(-t>sY7SfMkoreAcg2_28x`4Ul*U&(K<7NY73ZElBHw#)*F`{L<-M=Qa zZgS1I5a@-ixLC`&1wq%?J6ZEJeAPUuOn`=1)FAq4P4%zpNZvU8o7B>w3kx>Io87;E zE$)q}lF6O0y3nPpLi|uI-QPD-kX@GK^!R`p?8s%@J(JZ^DAZA%=;)JWukDF2wA;}n$U3Kpd3vQ z+&Nqn;smqCwq+u<`~EdAYoj|tn=nhaS%0HQC1@!J*QyCMnQuegT~k||u_d-9#b`7> z($}p>3geBrEmqoM~`>RzIJ`z&O%|m@94$K-huwz-FLJ6cAjg# z+pc(gk{AlP;^|^A*lG8KWrbBtc6Z1#&zqP=?Lf*cnO(h8i@DfD(kakpo4_(wCGHm^ zB7D4Y_}>dWC=clWlRUSru&t-QlBR#9xTBG%TXeHxtYaXbzrNG%;CR)NOjXZ{a*{ar{m`4BF7)KSKj8TE|x>Simxj`NRk zcn*|_=%)Tk0dDIgEdjPba9KCh;5RsofIGIaN#VowNH>(P?IQL%b)5sDD zTh--FWYM+I|7`(aLNX3zyuj2OqUBmV%*1Q-4)ffE5DldJvTlZvm-p@T`PTMqlY!*B zV`YZ3tBoxgv00%vetY7jS=qw{rw`q~PK%Whj~=^qg~D;)|PUF4LxEi-qGN3oAQv z`L&h#h)gp)yU@(g|Gk-+N^VOtr9ii$KWx5!`QPH**|@Zi9t9Sn3N1B%qs9FSS6*em zzz$FzWLsT8CIeE(%h-fmBuLEx4TKJc1Lji&Y$d4wppxK{o;c^DTl4Jm8t>Sf)XhY~ zh-V|A13XCt!e!26v9Af@WQMAWT_?zt13gmiq9ZBGjLg~1o%@cSo028V@X6~B((hwI zO+f#f)`ez0UXK>zwVvKYF%jS_NCmaU6r7!Xlj-EHjG%Cw$k8@)edkO=arjkraDG4NnBgn$XTQx>(YRHi&QtdT zKXyvXu*Uvp7qqZq8N;d~ge8nZGip)BS(CctBT{>PG#HEZ?em6o#E^~?snXTZUA!$P zi}vwwqK1~QgFS+@S8aFawtvP>&E7`4YlEk1gkAMo8Z0@*zdBRMg0L#Kr(Ho2jhCt` zTuersc8@=wd4wr?$?|M4d4y+}qn96GGw4@X%z3 z=(Ec~e?SW4TtdPr6jh}Xj&ys%5n9g5PR?nviatf2nsfwXS${Qc-q$#V!=ouL;fVWO&D;Ro)Cpa84|2pBa3d-X88MS3;?1S7#-H zCgjyCUuK_0bM-#zR=|Lqrp{=eHbi0&H&G|FHgHC2IrhPX)p6bskHC&zV0wUj5eNa) zHvs&cBhKJ4Ls~VYeTK9jT`8nVhm3Q<70yG8gFz84d01nmPZGQ;&O5q+I!WPF$W_uB z8^mK2qYle@6<$4sB}66|0I8QZ@Z11iK+ur&cq2FrAjWuu1fX=dA^l7(R5nHroCdlT z7;xHx^cj=6J)Q^4KZHVpBOo%^vY$1D5qp?uCvB8=Y0EmK|2f@X$$R9iC)2Y#*Jo3N z%89<+j|^AezU$H#w`~2!6En9R*^x;v?L9Ge@QGUO(Id+b=4p$4EIk)<)%topy-(kG z;_2Q{xl{>#QuW$sQS`VEJ})C1*B$nG><@jsbL8^eh;L-~UGxlih+IjzP+BYGM8BP3 zxbqy3w1hh}2NJGwkH(ohKwIF>u~w7UFVnHzb5|lMG2ck{D1W?+9NkX7XMj#@%iStom zh=DzpHozdodr;U)3YA-lvung<6(@cg3biLZo0!m=xU8qfP7vh-e1viBw3RM*OXFv+ z(bwr~Y^c_BWF#8O7^dN^Uxn5DUZ7tU(eRtedX~q! zz22U&ZPn`5{!Wit9b4@iTN^5Qm16H)wYogk`{(oAxIBlXucI2Xt zdW!zr^kTr}Hn~#ep+daB(TF&&b=rj{2xbc)$C`h^fNxo!Yrxyg z&^^Xxn&mB=5|sEr(uGW1iDwxzW9HEOK7sW753!x7120n#(@E?dgTVYFQp=-&vA87T z&?p;+CyxnZ@|YlQ16>LlQkh5uXugS;IFSmRw(VPW4E+gXEfh3-6h;y-Bb-{j8|;tU zt`&B|A+RdB4PCMrQjkbky@gt_16Qp9G!d@#1?dC&Q8yU-9FTBj96&#whw3*vt_PQL z;*CI8dt#JG#sFNqMr1v0{;wXSwW)?VVN84NRijw!tEOMd&dhGB1bThlp{~x7I%aZ< z&F{JL*`$rNS>?DhTJ7xcIg$>=DSDOAxZ54`^r(4h=Je{Y4>yIW%Xf~mtjRaF^On)c z>$eT})?(3>o8NvYIR6cDy1gREEH9gQUnqBgSxt7S(a3BPLLGLOOA#YQ z<<{HOj&LOgqsH$vB&0UHjGw#VV8!LL`^I+PwqW>EJmpGBHd%NcjXWG{3wEP#T12|` z=h-@%gchh>Xhc6reH45uVQp5^85zB8W?q8w*?b)lg6v!+Dvr(D&Y5+$&L-ryw418xJFq$-yos&k> z(Z4<5JG_wgZ1R9Z4Vs0DRh=kF`is&;^XZP%;)-R>oddQ=-7_4+rYik8FSO3-28VTp2^5VYG)>FdL2zNlC|F~IUW4V zLMhy>)|77uk#tTexpTRclX(F~k#PXA9(k(dP?d#O4mJN$DS6cnh3@Ryw|i%Y;0><^wYR^| zmr(0{{UJ)rmCjyyk^QokProj~ z<*TGhD@3j2O)#tUZC!>mfX=mOxZ-iaKY%pg?Qc+bNw{j^`7)MuH$LpG<>zz}OvW<7 zG!77}HcTpjv7|aNhjisGGFs`99UZewkXLveZoD{LhwBl8E!C<^j8l^I+gvk_TF{12 zxN&?&yaw`Z7TO+Qz<2;sA6D1cGk;iN$3q#f0UYtniIW|W{T-sw7O2VzEN?iOK@S_~ z?VHbPh8o6D>47vh+598=z~%2g%8J&D(Sl2g`IK-W9(3B={)9i#rC3b)#NI}+zCS~c zdSZUBJ&LSa$t(wRVSg@}P;lzBf1(h}hEg6ID@SCDH`x{M?hTud(eCQ5X;WC~p6!Xb zOmw0VqqX5MbH6Xtm+L4D1)0nbFP~DP)^%^%6Zfh4Bz>4+P27yGxBqczIbF%D=7c$sI!5e)q?x>IU@3?vUSlSVGDCu11 z;CvVAdGHc@Hcy(9leFj=D(C0t>)(q_GT>#>2I_NU(1O z4>kZmxQ;3tO(nn49u{wv0|qx3RJR=_iZK*E1a9Unny!V<0J{8j)QTpZG0qBSy9Zh} zoUXr&{Wll1(X*F$W3iX6Kx%uPMD`#?M)VW!%@L`EEGd($k_&g!)L>{3V)kY>oDmd086&p{I&f$8=mFb#Wh;g=Hi zP8wl_EABsqDbn%=usnG$`k3T*bsx1=!Qn?Vb-dkt2(^Clcs;`9KYeQT^7H0 z{cWcvEgVntd@*n5Y$gu$SDux7MrP89o>I}D^asl2N^tr*`u&6V-g{TW;}`NbKlb9@ z&avLXf{l^Pys9`$)!tzJro+2Z@y@u7rb$4IddGXJuX8-!3xBU0nsjuF(>w#+Z{@umM)=H_m z7-PzsQHV@Hp8XlE6%ua#isOMM2mOzu-5MZ)E)}+A3YCR41%9UvWJ7$Ot)S=7 z(w}&fdKzkF7Qx|HC*v3oaDCiZ^PEP;pzi}meH5*EnXGw}deztl zckwA`2@s@(0M|w0CjX-{jA3;GpEyUpAtrg+i!2A7qDKdrdysXCizLIB43jUa&+QiD zVfDR$5osHFSctCzW6D|b`x2qicnf*tr_u6hbd6`o(eSvs^g%;<8SEkQc>20OChO2> zNm@!)hrSRsv{jIs)v{-k1W`3av+W9NTQT|efwkR`PG5_gHnr`Hhgis&xyqG~hunID zDFy0wqzFZ*b?RCARv^e5B$#TP@OT%=4BbkCgo8xWfdtB}Qi~6Xqxv)^EHK^%DTbgB z`v^N090fFFBjhL;OP0zw?-P(mu+&qEK<|e%cGyp=^b0GGkvDlC^{{q33>g_F$>`2e zY3e9J3F(s8kfMf^HKd{;brA{oef{Ak+irPMY6alyZMR=1+S9sm2B<}T7aBcwqCKwL z#1HbY1c354sQc01TQ_i`>Ju9{qw`skxv4{Xadw2ROu=k}H)u%`HN(Buo}@`KqCG8g z3y)iGMAs6y{lRgA`DwG8{%)fCjv1d~nLV|0CQ)*CMH?%M-R~4R(YE$ehT~@+saOJn zD%4I_d9S;CVCQ0_x+e+w4&KJhp1z^=iFybcS8gf!Wx41-*}FE?8wm7Ht@R=;$Q$;d z0fOUMx_507t?rvzt54r@ctWg}aaK&S!UAcW#<~<^12KtD-BQga&5z40y9U?8ea_3s6w5|c(2URNC_IE6^!+YKI?WV5 z<^YlpXlyZf53o6~1l0{m8fT_$j%kn4vo#$CnuYe|Awaj9VX?L`E`bN8Ee)q(@*3u` z1_m};>IQuC?F^+wEYk2ZErHc_kohiJEI^9Cf2&1D=WhuwUR z=eC$krEvwdRa&%IQUhkt$a2X;1y^UKB-8&pH4uopZBEAI$tCV|DmKpS%_l^O%ansQ zlah}9&vY#p5_r~bvIdWXH9U+i|Dz=-W}UKmrI_kWq`p70*KMY0!D8`>T5f&^YHxp{ z<+pe=R8__9q~1z50D7I(8UZABL1YP_8QmLL*##MB9U&n&+cq%4`X^!RJYNQE zFGimoC2=4f_faHiG=8)_qkZQ%T7zQ%Ye1C0l7QFH3j&k~up6+{jbI3Sf)U&x zGB^VvKtDj1dS)8 zIf34!Zb460CfXKz6;%n}h7@U-Pk>>~L_KQ2_^T%_>t~{Ml#-Dg z6VVC6ASy+)Jm!+wACA~Fws0gQ-2idG1{J-XfSrU)QH&VzpLztO7Vi~DGau=|M2(3>>+u2hwRG80w?gi#b#yA?3c1T24X#jvuACgaL}5z_(Ea(7yZ5NjKvoW z+wUBC|0!89r+2Kcq-3Y-GoPt^>Qlb}nEWpork7zp!!Qko>F$pTtS92JFs@vj z1B*T!rNfngNTHqbRFA6!sYMd|$Vn}tsv?kV$~wtv7rC;IuYz?w8vvElkKNLy8Z1jK z(w<%Dd1Mm4UnCKlhYjg%hV%k@-kfo!k3pZk9i8g2G9a39?n_-W>)@dKh^|xBmcu0P zh$8uEF;cogFA4@+$~qV(NM!t&7;Oqfwt!R^CjEEVcsUqIrauFvI+ab_#)JZVDrj2Lt;u-Y-qH=FzZb@e@cX!_?Tn+2pV&vBf|JHB->9^bY&E`zIw_f-1l zI)6$35N-cq^S=b2ocBgOgJ%!UDje!66PHIOAg9x_?ZgA0n%mRkvsgUIT25B%lPv0l z<^_l93rP;u*|#?&#vEo&;N0|$Vnnukl){+e3OWT^uqv*tM@ABYHBcBXSw)+TA7^>9 z-AYH+)-EuNkWf#`$v_VpH`I!Y-ah9ejFz;k;R$qUV5-^j4GilFIa7gr1cE5tlRQ4?1PZlsY{k$Q)zm8F@x6c||8*+&^k_ zn0SHbln{&bwo$Mr+(C~bC{EQMQ&E48Uim8f4dy?MyqQ(%e)<)l3D{{Q!(ksQ_N`8| zWi0{7P_Mv&%kW|ks+}w)vOYzY07s~`O+p}JrdAx$)}8e&(p!8Uh^PWV)($jo+^~t| zn>HZoxr4ev>vI5L(4qaX^`1?gF$`x(0A1Go66TeGvuivua9OyVmteF~1ZS}qofhYZ zVh$MxfpOkX0xD+0s;6h@K)(VI8@v)5ne`;i?cybz8)fnkouoIWN$-POyN=u%^t!tw z9d!W@hmQt`N?Ob2hD=d?-31~+O%W|=MxttDS23$jtf? zw?+h$u5azxeU}fg7TK5cBRwTmE%l7#o4&5mP-LpNcSl4W$t4Fpo`F=lFNn1GQ}3@Z z4mq&WDE9gN^-lW2gAdY^Pd#;c976Y#IuXny&wmii|7qStpQm}Y@8-tfu_`dZnEC3B zLp^7Ptmn1unxDYMaU+mbgeE%rCz`LI`5VC_N)b6)Q`Cfqaf);toOuxIPhI&K`)ABA zkS155F41XFw{XGMUNWD+60&g?h`hYnQgBv@f&=RhY_>9U;P=gB30z0usDjL&J2o)K z>m{%xKpO%*YfBk>|8bkdp$<1?*Om>EfV2Z?m~c~Wsg+L&MeB#PcITG#Vl-eyQdI&6BJDy71SUTZI^_zYfcz@LDzy?-b-$O54rUn+O1>Xb*7CZrn}C!>s6Sg5h-*) z`=YhUM!Y>KUu2!M4j9&G=&~)`a4SV|NN=b$d=h%V5vfeq!pX*bSIE-0CmtA#M@H$d zm20vy?i3l>;!oF8!RuG!p0S;M345>k|1Na;26BJf{M^XVLgzEL4&J{bm*f~ z1y3WH=~c4x-K&AXYPU1dU!d)BwliSqS_uYMx|T}nV4mTRzVnU~15v58|M;ErCVm7d zTkokYCMDHua&U~CY-HCS=<#IgXW#PTjn-2p0IJ zqLJohW{&V2`tfiy?Xj}HjK{=UWbrN@+Tsz~0u2^)ufmo0v0q@z)F5?+x}AC-^}ArM6oa-o1WHUnfx-G7*ffQs_0CU zyvFd4;-~q!`SL)+-FEP8q!UMbjmo}kk*C4 zM$xz3ZbC;Do zuKbCS`a6%aioEtjU*$mAU0k&JrOejMTy$BDdYmRH>aa6z-tGx|wjB)19TNv9#t%%C zWVt%LB~|cLV(DNlB$(|^m%ZjtWYIExS0?}1*3A4=zmmMblxdEi=DEcqULb0UbAiM` znuRsrvIm_mRknx3=4K?L3XHp;SUADw`B!IDQUkIWbRJ;Yeuj$=`5j1MbXv`7nBn@7 zn$^86R_gF3!@YrYuU}5uZJDSXw0Vb;az{`Ih`lR6i*#nv9=pVGvW2nx^HB!%Xgz~@ z1nLzCvA#em&>#Pj;Bt8!Np~a=aI*ZcMp(uS13LywjbC{;`(d_*M&}Ck9_ZCe1i&{% z%1YD-eQ6k3HrRZSDV@(8GMAxDl^tyhYfaIEj^>QW4B+RXzBbrEI5`bc^YuNZv>6Rt zN%|V_*@EG|mCRd9k{&LG=H9;79b_*(rxeZw;TBjvL-fAqHwohc>;TNHR)VYUBD9yf zvT3KR)J5&om!uZe8pzLV!VO=dp3%0p*!bY4^<$uaFBtO{?&n?PL7tH?(&HwwH-zr- z+2Dcn^WK5Rr-wFh?|mFCA1~u0!Q1;*qFO$?f!*Bi(dN4r6F<(L*S%eOj=?Z%c)&D= z!&N=Jl@3D~##{QDkrZQY^X;CW1?&r))f^iipk=wE9=7sqI%{WN6Tpm^ z0YnnV6~hju`Hs1RL0hD!;FOaEulW(E0Kwmbx=3LERB_8-&F8BPZYe%vQ=D=x>gg&( zSbI@+GcGyexD%LgvR*qQ*er$qaxoAnmir6aPL|83mRKJn376GSKH}n(g4fCl0S|La zZMVn9((>bGrTN#+T(RhK6+5!dzs}4nCYo_JUuL;~bOu$K_a;=H7W|&K{HQpS%TE`7 z)cjSZJN#EHcM1TSTA1T5Ptq?4j5Ij6oU$pr$!D{61bUZ34C^+V{L&5xlW6A6T{LFp zp?Io(<-_bJ*#ep`Pf*WMAD})-KlujrdKtS&Uzb|WDcuDInbg}iL0PI(+hv^+Mz>K` z3?&H?p7cGo6Qv&ZT-(G;aJ@ppr_O)5CSi-^Zq#?SYmM$P<9ImhJJ5dbC<1*eVkmHXP^q%@LQ&NsXf){0Dbx=xxvvb;)Z;F+<82Qi({|jlH%BbM5tn zpl*&lEZn-zW~@6#U~e$SmL;t6&S{SfeM&#`-G=m-A$`!0K29X4p;T{NGee06f&{}+ z$dA?p2w2ayk|!<4HAatA|~u-GREq{a>RwMl1an~nnDO{$K<_(*&%Eu)FU zBn6x@C-d&E_1Uh&4HLtDAh<0-+pR9Y+&L226HP0;OECN8!j$3+h{>4M9qyoCLxy+W zZDR!!KYxFzbpQNN^EbmYcXgERoZ)#T=eDvIGe=)a%!EKK6d6}>OO3Wlm4T>0J1)D+ z0nzUbR0=WR0hehfXSIp8?cv#2M`khD{CmkhdHv#W1eq<~r6XtQTWQ*x2zUg$lQ+pc zEmaRLGZtP_L?`30ISV30b+%+Itl6rj95h`y+U;wnL#Q<#re1^8gGCaN$&$vr zNWjICAr**(BQel8525ACCIs#lwLEVM_Ym-Kfz5N6WWbh)E=oZSAA-CY(tz_2Q`Dsb z*@|_%+9s}A0bXxdu4wT=yzf;g9bGFknIk-o{jo+=MI#>59nG>{V8R&U+xGLwRr-I$ zb{suBXpTf9JN6$crUxxjOpqDbA;=?3JJ%LMZnw2|`?A z`-g@HD^bQ73aInzdzwEQnDGH~vDeCXM0W5HF}Xr<9I~EiO_`Yn(&EdtWsezYHy#V0 zj5mJ>y36#He_;QJ^-=;FX;-L|cgo819jvF1f(;EYP)I@;&@&!k1#o8R z-0cHeYy-y}0I)ouodCwZsD|NeMF`yORgiwq4I*Fjs@u7#0i{VZVlZ9^_51Uwr0cgV ztLA0YH!RkUoeRS*@8r?99=!0j-QAw#yH9eArznf8V6i_-kC;$r6QoEeBH4XzrBp}> zg|MCdL2c*CYL~BbWyhX6{d!lIo1xuSKB8PcsAU^NunXSiILkBlXGYu*%(q+kv~qbj zW9I}V=1+|e55;W`Q)Ksz$ID(b>qh;hc;%1S&$DC5^1l_0p17SuCA_T!UwE|5F-L7+ zY#DZKCpRIt7pyFY5h>@1+j`iLwj0t8L)vLbHxUVPOMef8Z{Sok$E>-<|2aa_?Sm{v z`x7Ve?~z{_1fZx#(Z3d|%cp0oifjAn>8w!QHrnk~y2sc0EF2ez$O3J5I2I2M=Y4Lo zT3MOkC9!|5L*dNL6S2jN7**=aeQCiHQXLLUF!1lOv4JjU=8@HHe{w-|@)y6loLsr_ z{#BDKPuzEAS1>=9%w!h}wL`I=ckSOX<9DfIU~pnVQ=(zF<`#Cm9jZyQ|yXXN(t5_v^{wk@;upqVK&Cr8%N(qo5WCq(G z0DJs4((Sxjg-pzReGYv)Se_wN^MfQH!%8iWkqP$IE~OP`-GGbZHJ~@>+gM^ez*0|* z13(CXY4b$J)Sh1IHUloA!)S3yJuqkV^8p>ggJ3=oN*i#XfhhsC?DiYyfHj!d1EIGrrHQ? zTku$@w1v%Z_H(gYCS$|N$;TFCpCz+pY9^anKlR8OAD_Q?bS2riwB)S?dsj!xZclmY z@QgPnLOPj?wK_b`ug~AKP*X4eIcmWDr+c#_;YVpSNHD&@{GJ$>-k{te4kw}$0n zP>jj$c*uuFn4r&*378zRR}>>IcW;75it_+u!AAze9uqI|w8`lQ&uz_>4~R$$ne3$3 z%8~heaW+zpjSkg4o}g7+pM^}^QJ&w=nmCSjMMXzA=Jwlo2cvmsQ3tvX^!HJYr$c?! zf?Z9NFV3T}EPLf6?3dY2)E4dqzJ!B>t=_IBJmT2`nkFnEIXX#Z4Os5ogmO1YYOmHf zfW~LbCMK}nhR$-(SPRab>(CmnvF6wY5E|?IK$PzM1~}638iL>e!{D^W`iN1d3)B{E z>7`B+3`Gx-aJPfF8Jr4em=2afjnVhJ&XCTcbIHVOudlnCNKn;}ZGg7fq7rK51fT|n z>vHHRb=TBC;Qs(pQ1>d;iPv7UPwT(uRAQdat}KozCQo&0_n<9MN+ybaWL>2d(U%`< z)W#CR#G$Oon<));RJVm0!9IKMiIsrGDG0n^&38rWf#z6cEf`#@pxX$C#ehkc^7E=X zpKtUqoGI8B6%r#g+U_d$gsict6z>!(J2LcroM02UK^iHc=H_Kz#AUMjOG!nfJ9~l_ zlRFut3l_U&h&A!FVzw}zpp&t>{Z82oa}~3H+xqrkbGO+Q3pkS=r0v;x zhIKytH)2%nbtsZ#IrZ^MVClNE!y~ufu+0Y&{c3t9l#vSMir1a%s73{aM}3{KhdPsJ zW~0X-s<{8rQ@cx|$cGz4vwLryXSt>?>&>|$p{R=k_C1Xzk{-iUH|TvXUU`{)58H)w z<3rS^p`$?J&R7u5DPHZrjAl%GwP@HH`a25aHTruC`g;fZ`!M?Z4Ep;z`g80X_C=I+l1w(h>J zLIa`1iCyog*Wa;gEk3*Nwyhc4*4y?@N8F=3&rVqap2gdD_BjWxf2q3f2%f=bBh8{B$efWxp+Z)2d}2X049o}eaUaZe&Ooz}7vf=I{w4qMYIN6k`i z(02A;-lV=m{hY$2S8jsncv4$_Qu9aR;qNrCZ*9WI`8na+`VLzA6SVeQ8n@9;sBaNl zPT%g`fKTWqq*>pRbRQ)kH=ZP*>keaYxW*(IY9UYxtcn0Of}kq6*l}tXmS5d~pal3& zKS^BnTZr3YQo=O&r(xjU#OwEx_4~-#bvV*#sa2xvNePF&&XV=Fk#hid9+d64hx~q& z{CYL;j<)3|Xw9E(;&=JA4NS`Y zb+pG1$os^5{4?6}Q?&dg+VWd+?3*-aoaN7?H)zWS`or&s7B@+60%r6V(cf>i+EmB1 zkNOhv$YwB?3Odc_h!YymgI`C@0hWJCeN9_V6J@nzFk~E~_Q^QQoTXkMA6;MPCF^h> z)Sc29sl}KEGRCt2U{2qAi}s1(le$Sl{MV&c(V4GHt-$Md$S2)f#x!ntUdHl~&6Xw! z_(%W@9BKQsun$ydIY(sp%-@k(d4OLhpZsp3dc$X*CZBx^`RuTK5-p!3uJEUj{1lO& zB_H|iWce<%d>7jG5@`~z8qW)Re{usaKaG~3Mtl7!l0T2+&yzd(CX&C2-qLrCxBCMk z;k*9n2Hp>v$Ja>n_&4+wfu-pUnrmwmpF^@0$<}gAXGu2uZeBT;G`D%IyE&UO&rKBE+?yGBadK-kIWS91U8OaXE8cteM z+qFU3h!bZ$SJSDmL;4MCr!!sa@6(fm=nc6PafZBwenn1(O7?&(*ywRJz)NyMnC!IL zor*J_SDjw3PrfxJs{&^ct&ydh-+RJlWp8=@#4Npa@7`X3EjvSrQnWT7jn3Bw4=3V> zhcI6p&D6$XvGJb#a3FxJ)>POpioRefsAfi^vC)jTSo3*nC7NT=%;6GwE?P>3L~z`z zF{d+j*(b(TbtID;P|_2*URCYQIaRM$G&#+ugotSOxNHs!o2jX4EfXprJxTUE!;Mme zlOlqfb+Kl<*Huk+DoQy~PEKV+8&_B?s)OCZU?osEJS_RV=Faf@(dGIzhNI>$IHtC1 zel(P;1!z%@DvTviVLH~=%d4xdd?sp!d1M>Q5Ay5|mK)?)cO(>c$)Rx6jZ}j{q#f)) zPlC2?)5}{it7t!#T}PXTIF|0}ck$prG7Hve*u@gd6%Kc?|8$ za`ew^E|*7?{nq`~s9Th*PJg5jeHmR~h-Du`iz>%BMK-XoeOtsPG90qXO-e3-PR1}= zx?0bb=h;s&|BLcaaWuBgP+O6quu6wvNW<~89)baf&X(G24NEN+dQv8H1Jfyktj7z$ z@!h+Lms>Vkm8D?`p(xgsa;W_*gSM0%52LT0ir-2DEQafTbkan@1vx4(1OBYXCA9ykE`^L7KT zZAJE;hw@Wl^e)$^z0^tSA?h*e4dw$7M}19usYeJXY@HNN{xAV`mI-GRK)j$zCP2LO z;!EYWSN*-db6ew-BB8zvIorXyRYjkO-qZh$^vH(7$l0_y=V_F=Sq zaRa7v$n^Oz^&){I=;wdPI1@~G4{u^VtZ)Endl#tF)9Hz|n}Ci$FjLWuYR2aR5O z4rHBVJ4{|IEcF^Hpuy|tSC9c<*h0C(YaO8Ok@buqc&&hl!u%!p2v8tlsgt*aB}}Zd z4c*;t?MQe*dp2~e9(Y3ab3#54RCWVKRJQH??&>wi3}eF_Jg;hu)mOo5m%zVRJ2qlGJ$Zt#8 zE1_(tEM0z-rmj%*7j3^XGvhAqEjjc7)PXDUKE%Gp{7%E}2B|D{kh+f^0Xm)w6lMU~LzMUJ1ZYmR z(vUXvde`9WxR!_?(7@ z=Ln#9@+!QTjOMQk#M*515@ zeq8(exWEVwufsK3w1)$M{#xED`sp78%H4gbWW2v#k2LdcH{(iLY^-SUIW8_AQb85t z+2Dyow$x-l?@;nR5utZmZ$<j@l9V;vC-a~)54kE&VPmwi84|;o@@94y}{7;{K;F7?Of?{SecH6wG;3B zi?=e`KWM)pq?`Q(ThKT#worGY@$p^M|Ao1Bj$qF*@es^ENsUfujufr})HFq=(p zVjb&lGIXz^y^a`j9T6h=i~89z8w@^_gL6 zhXCig#_Kt)-Qpsdkm1xVQZ6Tzl`(Exmo6C6vxf8zBDH*mZUZ|6Y8a$QjL=s{Fu`ez zhTW{LmSMB0QESz_G7|dC9>UjWP$?OsxKRKaB6FlvdW2@)mYDC(ddj7o^CSepmKdI8 z-WRVHb6&GrD0RnPD9;;mzg?{*9(Q-G%XOp7noSmN57MTDrZ;9!OwHXm^ZoKnS7l2#Fg9Izf&Cg=N80*sq_TY< z50U`C?rftr2OvU&411V79^4{(NIJl{A)O==VUdK49pIkXrez3X#u&TiyS_jwHpdOA z(~v5L)G(xeLmD=uaU$tVG=QSjw_Qghy+RzTYOyueC@5k?=O9!k*RSG>X~?EF__&cS z-^L!^Iu9lff5I6I#l2}yA{vp?cAw-)#v*c9b+Rtr5gq8toSRX+;`DV>9b(+7ICfMx zo9*5}hiLUn4!^x;#+%K~4s{CElX%t!GW1wOB>E>ODVk4UzZ1jW_ zE9bB7Hx<2*@4!vYZE^E6d}BV zHNYPU9}Wz|tb|=}us%)JgTf8=XNmkC+XR~y%*-h&Z+!MOa`ZYmdZ!k&)vp7`-vBKU zl34ebu@BBt2J;E$tY%3Cg(7N+uuPF$8yo6R`?Z$jBoYqZbr4{k4jzG9(Ce$gZRn*_ z^s0$tWFOtKg=6(RI5?kPp(~v+ne{mFRfaB$Q~>yoM%qAw04!xKDIp%iwQO}Cmd5`< zM%;MYFAx0=OTz9Rotp_b&Z6&I)$=E|5DCAWzXYtC;J^IkGNCv0C$qA&Xgh z-qYRHA^ktr-ZM&$>pB;$*r~d!tGcVYI_ES!(_yC5Qw4JVTW&jyCj!;iz5AR*YzHwUp#)ihRy*3iPjMy4z$~KMvM=Uojo4ESF-aAniOq? z(YpSZh1LJk`D${PpJ(6Ix$WcV*Sm#&KdjFu2zi5zBpzcGZoi(S(oTp1mV2WdCPmD; z6J!m(wv35ojae;?mdiav-#kH9u_4)X^ zK37CZEl*b+G0jW6Ek0#s{HFN8b-i1^ew*9HE#G!{bMDa3&hd#`|J(M&Ojmr<4G+Ij zf+WoGOUK86iNZgz``iYtcR))&e(|KgEAV?>zW|O&LG?WuOa{vIhe8Y4o(%=B%DYFG zwxl%+@3ygOz;0cCVs{VrI6Fl5&^#X~gri-`J$GukNT5#w z&t$GU9c)4z^U&p|*$3DO)FW!t2k~SAv@Uh2?fGL?aX$tm8&1Xr6n=#Y$wuxBluKZw zwgaOxJr_JXja8C00|0zCNs*=qIj5Tp8`$EcXNbe3bd?var*cB}8i^WfsMtE7h&m93 z9lP`|zjOM6QKhCPB4PLPRYP$X$1(iurGKW~@mkIm^XD2#8Hy{itgF0u4ZV}*TmPFL z^h9F`wGim;D)@m9NK8h57avP)9z1qnZ$nLQ3k|38`ZRDLe3@cbQHR{0$jY7A#VPFci~9Bn)SRA{78k z0-#a5$R-Rlqy3aAZAAC7>(Wtk-*HpA#+1&PcYvocs$PM|3$hoWu=YdbZaQD(cCv;+ z{&hyLHE=@ch613)MP3G=kual3WIyCYT_7)8 z=ve8X&AE=!Adn^qcJ3___GsPGv9duIG(w>uV^|D+GT;U@q{F6k)Rc~!Zvbb4QxUc} z=>y-z@Nu2%`1uMQUmnQ!lc#@h1;>(b4pOzAO5ps|TqiBk6_tRQWXi;WW7}B$&xkJ6 z!?`txE@VevQFpkhR_pXbVpq+YV^@9k@y8#(7XT9@ zhL$&iY!jC8PNzx(P*K9>;CRtO^A4{YjmLh59oUi7dgDS!QBu*6%b$yCb|vZI*Gma+ zXd(rUr+(BhSkY)kn@A=nG=|-}bt|szJ$w06>?>>)4LFI4qE+QEG7N5nRJ@oz?x2DO zxK6*r?D zLclxl;p4n}YRj1&lkxb(jx$@qL@dQ5&Tg@=+siH;Iff&ic3DLn`bN{8!C=stC5K%0&;B(W%!LD3BAO(1vi=nexcg&S)l)C-( z=J9??=POEI{s{XAY*FV1JWPEFLg#pC07gH^t_SxtOezM4DeONA^Aqs9sAZT4alWuk zFLc|&{sRs?6|S0LZgXw{h?3<>m@CZ4+(e0YXc-VI&HX86?rk0wB4SUDB>G9G~Bs5wS(vwX_lFR)O`-g^S zqEa+nihYRZ0&zv+1)J^C-$oMl-%F0g-0`kvKHZm#xLwr@(o}|nBgw?o<5I#C9UX4? zdbXu1i6#0wy=Nz5jk6;kWdZC&U;5`@N)vgtOSLdUK%xIxk0a6azH2orN7GI#?-yEk z&0Sc}AoETCcjI?<44>{TRF3qGKQSR|c6DUkmhQ3ZyRz8>q*m02*-tTlrB{OaCva5` ztbsE@v1ovsrN}QGCQAj-92%q_(8l0Ufc;SB6X0ub&g2R~cNo>v07(z|xs!U_1s6IU z?kHCT$Xg(0VTf#KyTei&zCS4$dE~gB1lEGFY%tbBzAnaDg~;Q<*09Sa^?3tWIotRF zOvh=C{VRCB%_Q?E2{=8)vhH#ZqQ`XfPTb7@Ej%{05%;jWyQ4 zZCD5eM|KRvtQ#I48-M>Mjvj&;^Y56qEE6o~tP>p5`UU7VQ}8RceupbT(bo0nj_xeV zK5KeuHqo8q{e9?5t{*Y7IP8O*iaM7qwWng5Mc8XPM;N529rH#o?34k>D|-AX84 zrbtlhoYelJK{n`IC^DY&9bY&c7gzC^hJ0<2sDW)}46u?KgkigrBV((CE%g0sj^1vt z5kuZsLeHhZ#Nd8{40n?-fvQ&%#y2z`7G!n>_atz?8bzAaj+bzEJiJ}kU;s6lpc?vo zkR}r5CCjaVr^(o3?|67S(O=XK-9?q!Of~Q%2JH{X2E!TL9YW=B^?mxw8+SfMq&5ev zo=XXO!3dL5Y3$rL+)jfRAX~leSopj(mvu)KU()a9ShNh}mfv^mz?~brMId!i zb`9tE<&LE-JaK}ik6-#8!4Iu-IQi(*fd{Ud{O&!52BI|rk#R4>9cP(A z;FdhibHHFguj}_ugu*VX+v14_*GJ^A;vd;?bn@4DZOWql|1Q$?$Em&4!}NFFK~_30 zC^1jq2O*;EPY|-ZP{)#CbStp__vtJyute?CV@(r0^=IhRzXP6?eG?(nIbCRYxu`Dm z89<)}^x1_zC(!2{`dmPt=g{X(^m!Y7zK1@peRw9sG)Ay)9w3DcN2Inj22Ye*?JUub zfnL|G;wQUNM~Lqu5wJ7l8t+iIBk6>GHE0c$avw(9dsgsS_pRc4Uxe|tiNpqgONrN$ ztouoZGmdtjq;4cOA5S>!ZKy>L!O0o>dQGWHBs|DxNeY#LY6IDz+k{60i2E7y+}lm* zPV*`^k_U&}i-%V_^Vk~Za?Ijlq{O9Vz|wt9gZHnNZNg-Y?9o)CE}JZXc+g~$CW%b; zJvd}^KZ8vCyUc5j?#1huToHBuUCT*^v09Xp%V7~%3&4XoR?gT2*6Luza4-<_*x7K# z>5EtM-MxMb{SA(vYW;M|j%Ii5hV`}iO4P}*m#)2LFur?acwfA_CpW38lezMiILBE| zzdOhK3cHJ?IlnWQD1>Qo{Lr=yJs!W1-+ayE$EKGxpbK!>S+#qv5v=%lo?#pooAiB2 zLF&1$E1k9!t3iv^*PVV{$UW1$7^nZBH8gU7c1wPbWMeo;KGw3TXrBOnnF%ZNXFPCy zwEo2va>+4wa4?cdTV#Qb@cay^2UNfO3HGyW9$8&?(HcxzyY*26_|P4z&?iA}-$C5! zn~8)SnYdKbZt9f2=M?$jPn)gJkz*9bI#zU6WhZgb?a;SL({8PhfR_dBNt$32Sb#ia zCdMosxK&&{-QepBEY#o?KIh$Pg!OC(WhaGuN;hK{~{2dfLZ{qOY-Z^~@VW zs;8`0j?a{*d$Y1#jdhQ1?f>iO?mTO=T3Jr&S{$)w`i7Ds&)O^;y<0A>yJ?5gyZiQy zMdyBdd|>;yqY@c7FkfyxU7iVrX39LP#x#*}y0-Q8ZHo*=c!t~Y!5LO^cCF9RFEBPi ziwL~0Z_6aH6rnp+SV4*R&6GGcvvc3U;^1`FYpWzIzH(Q1fyK9n{56o^o@HmYI2I|dcZdRaAYgViL`?MX6lhzL%n#-N>`YPc-T;e4G{q~K^ zucAJfp#;iHT}wSkD%3;mu^O=kmr1`-s6$j!|8;_d9P~7FX{O25~Ow9PJE46V%EwEis+T zdwSHKeA?MM=*;&vLO0Y~_x0Vjgcjz>6I&+&HZcvL^=84F}2i_XEu8C zxumNoXLD(H>leO8f78GH&cc@S4Yz8`?KyF7#_9A%Wd6(%iKSf@ModpOhR@9TyjE83 zSsbxg*YR9vAjmP*Z3|7=H*XPRR=h-i_B^|DD2fYYO z52hE4>rr$VYUc9;b>NcWu zjOo*5fGp`?!GNa?6lTyUAuk7FLE!EHhivx>^y#8bU<6T3Ls}*hu7C_cmNChw34@P7 z?RNu=Tx-uFi5jjwbOrwatELF*xWk5FtDO`F?V8CJYl0MJ#jac(FnR0nuG2l;XLee= zd5^%0E?Ti^YJ6kp9XK5*{ih-|zro6cHAWz7l&05CZP)fr zO4z9mG*k`Urd;Dw>?lpwE;npcDEX7hRXdjg;Vp+wRIArqwIv)}+;vrD@brnDvDnTN zrw2KHBhL+h}2ARicJxZp}$T(a^w|)-d42T3W@ZZfHxCSh6bj2tuwM4y2 z|1qr8n8)W)f*gH;dW^z!paK208XaaApfcaDSN=Ohym%P z{pN|vPLWrou6WHnX#@PkaL$y@wdf+XRd=B4^ZNDR(I6Q3fce@+n;Xr0b~^u|-FYOR zFJt}qLGqP7LhgrOA8MRHc387rN|#iZ$8P8~>ITkMV2KH7u19ogl&Ou-YiT0nPGi*! zNOzEZnM6M_VUEz5w@DNz#e4`2Yx=zKL3^UHq3I0z`ZqRW_Q7#Y3?+NwyoGK|Y3f3i z<9u3cV60b%Pcsg`Y+)+rlvf`#QR?9S;!ne3sdIWeWE z8Gj)aw8=hqBEScf{l%F`WIWqkj>ngq>lj9f2@cNcpqarxWg3Bz(E;TzTK_n6{l1Mk zNwGyIHyxWsy2&)lGEDtkm0?Gbeo{DC;nBDe1=gD$=%Oub>#unp$~(~Sd!b7R_(s2U zq4fj7t3{N@vn4l&G-n%c6P#bCa~wazb8p0_QhsZ2X8q>8&C0MozF38X1MUrAErXG{sxpVPG<)!i{+b4rvUgm5fqk4U=xCQu(*GNZfxJL`IJl#p)irS-Rv6dEC-nAL z(NF)Xo+$q+wWN0;yD520$&b!h(z_K@VKkVC^W-@0tV64q`C^EuLy#Y~g>0{1(eozH zq3IDEO6Sm+Ifr`oIb(1FGP+Est=G2)CQO>hIjCkWRxCUTeYpt=Z9qjxefCE6^tx_a}BgLTpwp} z!B_B%9tgyccKic&!rOKBt}BU!P2V#yEeJ{)=zw=K3<$`dmq` z;b4s2M25J*eWQ$y5&?}?HZ!7Rqc{u+%`;u031m1b!-pcSNKm9jmm)nA?#`rChX+`C z9Gu0Q=*!S{A(r*KZ5FpZ*E^H)#M52DKvyQCM(XKoSz&0#!cVvEn_@Z0iSYK;8-9yh za0;Ro=#A^^g5kLaeMc)UXGVG$mzeC0yB%6C>J6!q{SmaJEwVa~9ZRRyr}A@A-(aS% z&OFdOk#o8D(O0jrIV`Mb;Ug)aD(>;vgQ2iP@`+a38}ryK7O(8;NwsX4#kYNutgZ@x%J{J=-USexW@1erHts!be?N*6U^j zi)dBGw_P_OCB)%_3$@m_#jaAXDkascH@bt-{GLMD*HI8?fd7Vwxln116z(<+ber*kNmmU zd-v2WxuSnya43NNgU2p^p1qfCAiW1Tq`wXe`;3tZE}C>OS}FgiDy=I_g{&4wyV@S z@(UVLgGe}42QC9!qe2YaW@e>b<;g50N=R!=-XLRMAn1#R$8b@w8irwz97E>K%yKG| z+L~^i2#&`}@wxED{yVPQEb>;4cL)yF671VF!now-TtTt8eSGWNmhzT!o5Yy^u`g(^ z#wxj_>>k~D{U{AV3ni0svu@sQw|=9tF3=rZU!ZR+?+E6idrDh@aYim=>(?FL9PAs4 zIXN}wbI@urd-eA=Oh5DN6Qds0wv84)1J{`awlO+7zcB5$Sr}Rpx%A+&&dc!{`z~8U zR?%VbNo^<2A|Dwpn{`dr(AvSE+CkXrMoeiRB!NWF*(mROmo+ppp zBpxcbDnJ?m=OJ{c&KTDXFVi%9Qde3VYCG>G3Z|gNYDuCFfN@nj26!E1g$y z2c!S8yfE4bM+c|2G#Z@>lRU;d4Y{1t>7gHDfJPzVjn3q>6S=MKaRv9DLvW*V>C^g76_fFQG^G!Ms*yB z_;i-O1N#8t+);8CjyvM>p)H_fU~6PIQsz`)pzCR!W+R(MD>D3Wpv4o&LDOqOsSJye zrvJp9S7(%reAhb*%dOVCbjBG^#)LHE>D#;HmWMZ>H8#?EgZ4M~OgWRDrTtYoJ25hn zSobb-Z+glfORXaI714Zo4MoE;i4R}b?rTV%hVq+G)tqV zX#FZ(ewKZk9ib+X^>l%Hg|R}>h^NRqZ z#{b>=crO{h{AxSu2>Wo<5g7P`Bs0E5`hb;;_7brXtz=3ntZ8ZJotV}d2h5GC(*x)k z&dLVYEFh_1YZPyXac`iiAlUQxDtu87lVXQ(6w)wZYs6yUY=d0@!ZqY> z@P!)t?lh(I=2Jf|wasj}FBD*WksL*kxe+jXE}^((i0 zdTe^#>3Z$vb@y|;8kc0wVX^!mIXznQcn4=U76K`oGw&4L)r%C&v44o%HqYaz(u(*YssaLgyE*-7pjwyY#?Fpt1hc7H8Zy zpeBE=>yFuaMzhKZ)z#HpDBspSpH~v8eCW3FY=2Sp1;og%VZB)@;zsJUU{wNi50uv! zfQV?kUvYR@&ShcM2>9X$AdhLOS4#O@A#bRnrh7y!EHSF;^f{DTSWKycBKVrA??JlE zeal-OhPU^my=i|<$9&9Qeu;gBtsvcF39UKUc>~37hII;Oh>W+_J(jScL0VH_73zh7 zPC7>gOuaJEM>G*kWyZ< zPNwy(!TU#SP7A}^{K23@UA3U}koZr5`T;98RE)ba8ytiE5zkNQ) z97rD+aSlGce{iu9acW%}@9W)h&t8kAdj9xDey{8P3uw>(qxVi%DyM zB8<{8=2(VN&?tv>}LHJ<eyOa^>8x9C zX368Wc3`9twzKKk&K#@`G79$S;`=Wydeh~JN@cv9_TD7qm&O^J%h8xf3b(w_2-K(d zP7Ljsst46VWiZn^ zXwl+S6CvhJyS-gT(g$V0X_r@)1uHH1Wcm?~H;+!~^g}mTL>r$A$4cp#s+BQxs~ zZskAj=$h}QM1Z?2F!~9z80t(6#Zhx zksT7wRJw}n0d81Bx`jxc(Qx96Bf;%vyYeF2q5gX_?Lxw6#Ia_K5|2J3N@dV{!Flam zr%{^ui6uL^cUTPiCJ&6Ito6NWU|$6c>73%Sh`fzsQ&WRI&TdxfS{!4X?%G&NWOA)L z;|B%?5602|LkHsjr1bT5i`koI=WoiUZrK~~iL_|*gbK006C>UpZ#?98HY`s5-?DvP zUT}FLVtS0ppLzGi_w|a3(0AR#pSz7`XE?q#SB?lgM@s_dPERyph+bOFSK}T_Fs<^m zI~ApWu~!dm!+)*6(S7|;s0dX-8u(MxUBGyaRd*;h)I$Qss>gVdiVcP25zAjwMB;4MR+a5^uCZ|8Y4_OgBGXl#hlbo4ocp*&f zlx)G`T+PYY&?LkNh3y+>VcjfU{xJJC^XF()n4}&=20=Hby{!@uDyDsV8>WNb0w?s_ zKw9=Aa`72Zcu0x64U!m%HQCyG|B-M}vb4Q7EubO#5EQeMguFaErOI<`F-hcgv zuCFba)Is0~!DkB)II?T1jnmJi7te0xRc-OcrQFU7jl~~dy!eyFfhYD^v|_fa8Wk;` zq+g75PgW-vGme>)Zww5)as2ql2L|4vKYrxZdk!YGq$9X+^2wtdKW}AOE3n+R9`pJ| z-Vv!4yb@CG5&}*0zMd?7JKY1d$yxnB_%0)tKgIrl?M6!eGxRk86WUKW0lM{B8S?cF zI#?&#hqL?7puKxmFOT#!0XF(x> z%Y-}}S{f8BhdQPSgYA1%XH_;@!(L$dfU_W3{1)@t=gc;c_5G0k*v7FZiGkqkDbK z;+CridYE|kj>SQ@uM{Y0T}toz>9M3;bP5)&F}0=c@AmX~Gm5i3wp5^bZjR&W(qwPO z!$KCUD?2|1l(LupBBxk=T`5WC)0ME(=F3Frf8%s!&>bgrW>BdA{RCzPrQej3UMb=d zlb+Tu<9WZpXbIIyJHy)FX+2&~(Cf+hbUnR}beGRDKccLtBhP@70Vkzap%^djji9*$ z-c{8(Vr?eIKA_JQ3CbzsoN6p}_z{U(nCM_qY3Jh`D+hb?=!4sP4_s_q`r6J1YoY$h z^%c5*=L7Zn13ULQyaEd_=ji;->!$2sb@wBuw!}ZY{{3_1jTgu1uW_6nfo74O&8a!h zrGM+1&E{sh=-0cK7Z(e@uvprA^yXRgW}7cR$3DeE<-ZCwfh_Pt)Jf`QI)H2Cfw6o> zY6oVZe9FWsIBDwCg#K!rDJiCuGNn9`aNb;P6=3Jau?BoAB`MkS~k(0N;+UzXj zf}00PW^k2g=`0$}Tgj~r$!$ssk^XaqOry+A-fY`#wjGk%#7ymY6FjWZb_0>nF9=Rv zeH3;q@3hsVz-q&cXlxt9eo+2dvuq0*fEk}zD1dPHmS`SN3uQC4j3!7tI`rJX~e(cO3N+jrOQ z(ePbT&?V3=+eD+%GjQqd$A5XlTNTkOxGhTR^tKbfc!+b-d*WraA@>D;;EhK@?mn%S zKc3n#HnQ(3HIt0XzLb+w!zpj-I)EvT=sa45xryOure^mBe7;F~?9`o~1v?on-yflG zLl!?P)AZb8q-WD!x5plmygr90au&|zM)q-_yD*arWS63LPa>XDW0|3pj(ja&{wDin zwrtj%+(2D|tidV$2k$4TD+U}LJcu-L>lx{hJlWdFemnVlXcchCQ`C^@5Cq7q0V~H< z`Y7B-qIw14K{v~(}!}~Za z;S6-xXW-qTt?@ub-LQo`UQC(>`Mff~(@BJ}sZ;A$b%cQ1fEihFjFMGll0!j22VR_~ ziww?BwKiSx`PXY-8y$Q76w5K3mQ`Gg)8b^Uw|r`1@^fd!fyLp$Jh+6b+cKMe`Ser2 z+?3r}MH5M?T&(BM?=S2-zrFR%J-EC8BjO?3voVmfQLONPomts zThPC0C>U{I>~I7+3i{Tdb^%~wSoGt>&~yQQkb~5X$UgiC^)~%uprgQ!!8=G=<%{~@ z#{=2G#w18T0My!xQadH#i4MgL_8ZA5FG{#%M1Y)Y1O?!lMo^%F?(?D<9XBYrUeq0L z=u-w5*rU|*`jl`Vk#Jie@qCK3eFe#{pthewPk)Er_KTz~1LCgTO=v$byJ!&r8#s~SjIp*Lpo_5z0Q>GGo?pO=_ylso=Di= z_>mP{80n*A`v%&+fu8>3QkxbIRHEKB`nVB$`TN$N(z(Ix zp}D#JIW*z1sjKGa4rP(hdWFuRV_mI3qqFq8ZblSh!NEtavIVupTXu~pF;0y65`Cpg z%pOu3TPG@t9P|ow)|HmE?ou@>gnU<@i%UUOymY5C5|OJxL6IwaB1n&-Y0(pnCX`fR zEcM5ZXn%WZ-T}9fD^-0-M}E%x$}~QoDHY;Kf?yu5A{{IpCC;?~Fdp zb37j#>?sUKdGs$lT<96`4Yt0uFUGqqd_1}C`l9F;{SzDa)e=8P_GhY+&-i4oEjlzh zm6cV&>Z09DREhK!d;FruHt>OUvgEMJmu_UVh+OcX>0Fzycm<1e&=dBn&O*2+mQzBq zz$yvZ!dN8n8K}jo_C|xfes}gCdGJE#ewvk6>8mdNL7{xEu=fBGC=Bk1&D2#?pT75I34(!uU^VuDegxFPa21_x2NGPs#|Sq$ zLfu4G49u5&hPr`-P-*=IZjdmIfUo0$eH{-BD?)4q9`>dV607#Z&g&R`c)-r%ovg-J zuYmIuP^)Sc#-I*YY2-TLC1^0PohWJoLRCBKPu3y5L&v4SszRG0ZSsEVs55U$t}@>_ zb7oL&^mwA7uw(_YTRK@w#Op~kmj2owwPoXI4uvYs}}Fp-f=b~wUwEI)la`bU5JA9?|kMlbD8_2r^&=v$GE!=*j+pA}FS zbkF4vvtMOvI`2u2+Dpe!4=Ll7Xdlr$fRHu5idQ9@ z)DBtOI(jC!B*BeutV;ix69pWaJgM54ArfAtus;mK1jg|hQ`&8|ge&fceh8?lPEL~% z5@D4|-}|q)O!DY$Ys79bq)AhnF{OD^+Ga|-iS&QUMH1}@FqyRbYia^nt|$q_e7W@~ zePiplkPm(Dh3-o7_!zxdUO+>YaSEb)H1apS4u#lrZHzi?Y1ANXmTUF18#d|;6N$J~}e zb<>%`zAVyYlUJ=P3@7bQ&hA1Q5rZt`ZTEK<8lG@5J=+s3mwHsBoLggE)o^;Z-ftS0 z-(^3`CXm(>r*={MXgh|ff#GOC7$6-6*zBjv*t=qACc4jZ6?(xmVed+OHGIof9+Z5L?f$RzlVBABho@vNR%E%boq!3izE~)MJ0NIF??(WcJK{gCQ zxVd35?df=YXai*YGekDxr*KUpe!5G4fl9B*A$;XR@2z*bG}eM$4ehpWY&)8=)jGRX zn_65-6f!$DPD-t$E9y-Q_BW$~KTz1ZaUtRi+v6YMI4!M{(2X3A$B&P!e_w6WpFH)< z&o(vg*)(w~nLIUt8YJ}w|7$cfHquo30^<|?(kr|yN6LkaM+u7d?%{Pg$u6ONaNwiwR!@f(H7d=wgQQS#vYv?1?Cz+Tdvoqrn3IfPGTwLbi#sn zs0Bi<&FYEKnBl~D8E41KL^@ukvrsLt_!=y~<&J*XSy5_1!Z;mx%tLy)pPQ)ldOtsA zN@vjX4a+zi(%5$ok?p_D zQO}vwo9yt#v5nR{BPm6|QVqNQbI#UgqFnOIns!m(^1IFe?pd}=D?h!2!#mz3-Y z*y9rkt1R@c&(eSK-S2)OoRAC{kUJ7+ZAX9WXm1+*_05%)Ru7Fsfb=*q@)^dC7UxNh zOHU8Kvfjjjm$sd1LPz&WkS-IIaO4MY z*V$EEBCvw4kF()nFPP*|Tw+AetISd(<`F0?vCV7?ZFcLFhIkL8Od7`^W9j?~ICllz zANUUSoOva9Dxhk9v5cSm<1k7pWsFDMMr|ZR8?VT>QRhi&7OQV>&|kf?CL5NGSH5!i z8wpuZ1~a;f6F;I-n=2a$;ig+aTmq8O-s{zlUGCV-jzVg%pezG)&giHaFl2YqIPKluo3zk{(-YS8l*? z7Elz}t0Jf83*)se4-0)Ya%yq&$taqNTOXv$tsl4ks4^9gO;>EZFX9jL9;q}M4v&_C zy+OuqOAQ63++-ik3-+FR#1R_G@}k(ioS{F_voKQghiW6s)vF(C1ZyJ;rTr(owqWn_ zV4ym=eH0CVowsf*yR(at>=tK0%k^h9UXHsYR^VLD;Cz;Ti{WU0-Fw~});td2ly)`~ z=RJd`w{I`)+gIiIX`b73!gNr-U*GXbIiq+&qLz|d-wkDhPN(b^9h~S_|6R@o<&f&h zD!_}cGuYECuWwHAP(_QTU$IztixO99i``{YW-8ZgaZ0xE_|mS1%^_MCf2=v}r2wZ_ zzWgftWwuE@O8pC1Gvg!;eVk;wtESXNBs@Am^SD|c6BNz}-bDPgOKAPVKC%eu(|7CJ z^MrGhm)h|d2jwA|=&C8DOeu@5!0S?l?868unDe0$H-J3gZ{SroG6NuO0jLAPeGD1! zV3c9Y2lGA}X-gnK3Lds7J!s^pBjp2FhH%y}jd8mTJu$sa1Ys5==_D+AkJ8&6HHo28 zH|*=gRnhNy%Y79kHdsknd6&)N8@u_4U0gam6yhy5?w7uDSHjL%9IdYbB%mbQ8L}N)cmeneeRHyOmm)| z<7i(PZqvb$%#Qk@b;st4vZrU^`Yqpra-$rhZENJ}aZyexHZiP38gYi>86hr+ z{nf~DO!bT5=D=tYbuez0I+jDYz@vmonc`G zNaO@$neG+=|q>d8z5*z(KVlUN*?VcqM zcr$rGF98=NiG-I4qwZy~<8gs*0%{4=h;DL%^i$XxwF1uQY8Cnr`R-Mm0DC(@4qhPr z9rDf|A#DuTH|c-(@(VNY+rUP6%vaX&+=oxdR5}-yS{S&&cU>pDR-4KLQw3V zRQg7|N<9*)C>;B@l^q3tcd4Fm$xa)q6l9Tc#X_DJvdv=N@9!!$GoOz%mCvz^8uLgN zr_EZNsAOb0U70AAW{2wGaD8aD#Io}YH?U=LFcuq}+%iyK>@Rp(w-8)lN`3qC*`DqF zEr%@d5 z($Jmt-HijWYExtwm)#Qf6flAs_40=pQhT1cOU%h)LA;Bm2~X5RjKyw|qi*+J$dTy3 z{4D!vHcmCDIqE_BC4iz25k(+P{9g+sITCZL+)9eKT1gR&If9`&*)h4g(KY7uP6>Mr zKf?j39S#H8@Huo=wSoOcv8|GM6;P`oGtH<)19T>k91Zm5a7Je_R)Zc8NO+(e7VICxfsN&`;GNpFG8=J0G85SZ8*2ka5ek(YXEB zEHh{M9}`ffV)p&pIku2-@HW9lPhYAv!{ht!KX~xIedCc!Z#4U_>FTbxHP}nuq|8oCJbP}oga!I)uO#0ncWH9rz5Ktezq*b&^ z=~C-o1Lfc&YL5q5xP?iNMdWy&7(IRO+r&zE>+3g@T=K+}swb24yy6&J?qONl$=gEX zawZY7!y00>#zslg8*Vs#8sk65FF(z`!8Ry6nt7+GCuuj7kHM4i29hS6(;?$HA=fYx zVUh)QbRezhB!1o?VW$MNJw>*+qwaDy8a+5Vy@9L;aMshS#FwJN{96Y09lw6d+llXX zn4r~@NPD?kKYh64#+?@F4P%*wc?p0h<29_*?(+Aq> z$C);5i}LU?c;H1}`n(%SKtf<7j%l0O)uP+#}m8dMayFC^qMCv!wBVq2yd) z&$7ElpW73uZeF)gX#JjG=U9iN$%&8MFGuF@I5;8lf{ml|0m=Gn06#CbMi%W1%^VQ%XePAt82rz?rm-ws|AC#u}#gf6T6nv z>E&G~#$d7yrW6;_r^m0^yFQ&>zxSH)W5o^Grk2g-{B&MOM6_%&?dzWQXbCr?WJoZj zn=BR^^k{Xv!b%t|Di{k@CKB$A(>hm=LNem}r8X(|39=XI8JIiGWJfpsckLj8p12BN z=oD%Mh)Qp!!^2CW1~}gp<~B2+@WxMniaJav8Wo$aXf)!y!>0PfE_cKe>Pp7sTvDV( z)+R{Km%lHn4@cw^u~H^3wSJvlA9OcnHy4Uq zXY205^<%vYe{`okplxEt|9b0mARqYscC6ql z!AxL?2}%J~arQWUzJR;+&uTiEQCW7_@SP3c)=&TX;N#=IkPtjL?a!sssvxtB%(J%Y zhOvqwN0jjR!X|wU>_UC#>uf)jp{_@2->2yetXD7VKLi*9PpkqO9ssLPPqfzAU*@|_=a@Aln$BFF;hCR<{k!Ne)O(2Hn{qxvItL!RnAJU#WdGSSS=Dxq*SXdUbYS zFqa>i*}LHI*qyxF;<1T7e?rNyuGfBaUL*R%Nkp;y$n%-97<7BVAe zoN6%PE2iqP)@-uo^VO1>u`qfYNp*AF0>`BWk$tZY?2A_BL!tQ!&2!$o?1ns`TVnOT zN>K4R!`EzcWGjPFQMU0;j^-R5_i!=2wOaI)d&_hSEc^)o_8=Py3syVNyBJz_c%t!K z$nJ?nV;&Kyh%S!thnHWT@p>J}{o_uCw`xHVomM+~r#l!3d%7ak#MOE(!H(2)BJ0xp zVNdIO`NO@vhx7En-rJL+o1gspwUA!Gaa#{Xcuo|o;W(w&^Nd`6nf(FVB-pXLP+$HA z^<(De(C@KR^;)F3!FH0A!yF=2DvqJQC-qJQbct3%feSMx%)~I2v1H42%*+s6fU@sS zbiP$T8&VD9q$Q*t0)Q}0wg#*iWFve5vf+${bNfhJBjp_K1a7T4sU22>b{o+X9+TQ> z$s5V~58Fdz3nmTllYr^++$s>;JV-sK51E@y=>zC{c|kTfexB0H2;yUS4?uk&`{FgU zeNck>+3!%FB zy)C6npEUP<-ju#)UIFg>hb!m2Tq&OG%fx+n<^KB#SkJwgd@-!0 z6A9ImNM^Oe+qNC<9g8K#%HLpIvA&cL&_el$SKw%8yt%z~v@#ZnOw}O8Pz&o3-LBza zaJVbm3>Dp3pM_uId37-64k>|BSEkClJ*rUB($Wt_)@98k1w{HYVD)_2qsMm?R-Z-Y$;ah3fJ%;QYT#N4_H6`OTN-W`HdsZO~YwWoP4aAeHcpyG2 zVUrlHc${p(S$dMF3in9uBJ3c8cjycU{3pN8Q9Mui~Dwxa*r`xM){+!p_{;VhJe<3Ni^>#)Xyo*oaClHOTI*- zq*0tm7zB^GkRS=iXt~vFx!r6DUID|0yq|a!z{q@F!gV^XDZ`KXbLuDhdH0iR;U5FO z5~%Qefo!4L?8P#cjXZOZpCLcqv-%f>uZ8zuP3z0l*CbpF_$?xT0?D61cm9TXKX{%W zqP;&vd;c5Ri}CYD5s$SH`YZBZ4KzKgLx5N|2t0h=!B}BjiyU0s zd^i$X?1>E{Lo-u}$`-k)F?PGtCj<)VnA;hbM8;*6;*IXy^!Qj(DFsu_y~$p|D{c}) zk-;c$p~ay{Gj}e!Wx(RJ_AFkdW)o4j9CA7Q(WDZcFUSd5c3VSzjfrl-$+1qJu{u?W zWh+ageX0`m%a%yoH^_Ya{Q1^?G`;en*vAJJ`^#akCEU|D+1L8Ya~6k{{dQ|$8~u8^ zztZDJuh;s&W5r~|9a`vK-$$R(%hsOP3!re^2*aL7DrhdUPL8Gu5yokSRMGfAy&80g z9P4FhXKK7o1O7Eo4JHOp787zr=8sBFo5K@!^R{^I2FyD&a``3pV{D0vB76HheF}_^ zIpQ|P=4_d&lQ0gZ5cQ(tF@2~6h=l#r;I!MP=MT*2h#2rW8pk1Szp*GnWR|)q=x$3om#)is+;Ti)CF; zX+BtwGCZFh2)a^3CEDT1RRXqTHO|W(Z>c9EFjqw@nl+j6dIiDF&|>V;Wwop+A$Ml6 zl=1VDP>tvPPKz2=S=y;7^gsT`?~?tE{v`be)hR#EalA8?%S#da1kbHMsUdAbvh%Wh z!9HPoO-ds}&#ffft?!4@nm{X2A17$uOWv5GhGdJ!>#-m`dHnJx**DlS>Io&Z3f)OP zMa$s6ap)c89#+Fwa@Z-h?uqK>(adNYJXJZt1= z5(r|(q64H;X1;jVDD)_s<$8@9GB$zX=h5uNDQU^Y{tuo9kF%EU4GTdnQc3$bD{E8Z zAv^0A!b)9>I5)hnJ2&8;NsgV$r3*JtL1{r0R}EgN|QyZ73J+ zU|w|TMQ;S5R1aEswks_%Ul0JbwGQB0=%!h8Q@UzZ{vtAzN)JX}%?<(^I3u#G80?B> zmggt@E{`Dh4UWeLX2KSvsY>)Yr7IMV55#Dm8{?SlhDc;kt47A-YC0Zs$0HWEFYfP- z_jr0VA(~7}JU_rkPF%vKNUY7F|60fzW2sabkVYJ1*KOBmO9e$ACZRf2ONv*%+HVYR&*oV8_)m|7qq zsiP!y`g!VO`t~!_m-GP#0aGI=%Oe{%E*p8}27?vIMrFUqnigFv@CtVmMAmxqSi7Jl z4jzDQdZ>)|gIav;YWua|IIv&B7SnR$c0jUywhXUpT=iq*D}HJfYi;=JLVqLq!z(z9 z@!1uu0e^fI|NT|;_gB&1pF#51R&W;3Hvoaq;akIXeLFICbW@Pm^BZx+-!(cPZ6)U# z6~l5wYfE(a(b^%=_TU?#P0t=_sdT^<=+qUVF1Gp~v%8xy!Jg_Jj%zu2oEIcbE;#+6 znBoe0nmgliSafoN-9!IOR6Vj|$S!*{sb7rx#em{Z#lo`3FAFx8)$dw&cq}Q{eO;5S z4~davE|96t#9rTeNYf5&rLRV7j4y{VI-^U9vNS3d7DpJHSRIKwepuT$UibU!;~Q(J znVOYlm&Mw@eWn?#e&ERb*`qsh`CTXOSX{j0#O{1%^MUIpm|xH=vhDyy5bqCa?oc!v zQnQ(y=29HxTX$Gp7G7Z)&z#%u)7&vR5=r<1rKCgPgFU@NdBF~TW+vcaIi8&cq}Zi? zPa+=o^km24PjbML8_LTB)Z?XrHkYMei)1ys6bxEuDds;<2N{-QrWlT8B59+k46Hp< zyk!rB#paAa+8l(+)Od*U{MSLWQyL`_j*4wCBWGj?ZAC@!V|W^_vx}fKJYUsmuR4*smHzD1a-(BxoWXG||ojZ=)iaXXcM| zbsd>M@WIBZ9~}K)v+s_r<0rcchvqD(->6Qj+hS?`V$Cq!CNPRD*oWvbPyx1(p9NEYA0~wENvREY1=+}h00kBtc975jv3pGQ z3lY+dq$D)7fLw^3qy;X51Gt%uq-?c=T=CI#JUZ?HZ4-WMkkDyQAlFsTEC(>aWenC6{7!Y^u+g% zJX;6q-o`UWk38F8&}8x}`mfNTKX2vfKWUwG1pV=)njm|6CYwlQ79B2@@r|7si_N^R z(R$n#A8jyhsk<7o?ti3@gP45dk)uZ*Z9pi2DWBQ0Z1>4!0sMkn?zn1wI=6iEp@X~b zKd~j3*?9PN=H1CB(In$vNF>+$L3htgBohn%k=EPW9ug(3JD_MzcQlsviKTM22ghy*~kf}SC*a7!zWlwP=*EF zzP#u1lk71xpY@?0JxF~MQgOwO$;Bw~gl$CV5}lNlARDE0tYi}EA<8cpc>zkG%CbRS z1-KRnzgNgqRV7nZlbkhduwk)f%xw#|ZxHXg2R$q1x`HVd*bi(H&g*HAOMo97YVc)@ z`KIk0HWO<))?AS_e8_AH1YvSL}cr(vU<`QcOuRr38_X#-fh^ zq`Sl9EH`~x+g+V$SAwhMOfAK*4Op6JGWVk{+?5NfHs|+j%3lT}P9dbo5s3+wpFM5! zX;(jaRRc}1{;cd~Mc!_)r&GhHh9?5u-My{1V%2gb(y!)=^#qg7^dDwiO`u3synElECa|P|LP+1CC z3MPovLk=<`MN`8N6xj^+yWSLg#A&43pNx`Rmq(1vv#_HA3i zNnl6G)&OclLGv3h8W(4f!OoLLf9Bb^Rv6wfHL!0y<<3skw>&nR ztHeEacUSArStaJRvoFyuI5aR)_fkOxFgH3$Y7J~(=3>Ax88d09D_02 z480Q_lX=c&U$0Mb-IrfxzozHGVy=!u)K{r*GpE7)#<1zlq<66-e{G1G*MBU)j6!5} zGx^aVSItKLhItbF6ANK&4+QN2%^D+ZjC>%F4eW+j!ki_CrFPaQr2auz`cTJLK84;56EPZqU^ogf z(tYGAhSK#Q8l|VqulF(X#%Xg?Z$kpFLHuSO?7hUckgM=^tGw7Tz zkaN(8t=794wJMWJ;)bUE-iaAzJ|A&F>dwOy0d91_&)90FUB1P))+|kRpyA((Yl~cM z4GIL8og?-v^W%#bhaN=#hR}BDSh09)35v7?6S8a(Z8kmm&)?fW*_G_;DI#sl5$?@0 zf*8#x){7js$Z-$O;Ngl~FIZn=d z?2Jvw)HTmQHa;3*Xg)ZZ(l6CGlwe%0_)Syu8$66taBAT+^8-Qk$JAV^FZ9a2_tM?B z-S!wVIVU-e4%A918_zmzd?G#0kaE_{0a)PU1HslYC8{`CcT(Z)9@o{qd-K`-y+8IQ z5@{cOI6a_($$AtS5n#JAm5oWsimt>p2Ouh{ColbOd6Udr9Gt~>8>Dd~TjO4v+a^VT z$b9s=-pbVtG2--Ry^QR7%xRb7qD5;SxaiVUpQ{|m2Xr4&_3}&X=h6(E|rX@WYX{n=|xmO_p72GjO$6j3g+SmgakP$Ldjgl=u-C+ML zS<_&R+lH>bmz+i6l?ixDHxfKVo&+SO3ER*p3B)=~cpgQ@{dC9p2HH!%{x}BQZ^@Ll znbKZUx`s%E&6I6tGZ|y$3N}-t$cdM))>F-tKERr+-tmWMV;G_1ibWH7{epCp`5_$| zJTPl@d4is)qtj{DU#;XE+U_Crt23dTBJculvv8UDk+RE8ySo+!Ij`C`mUPjMOZ&cr z|NWMs9mT$b(TrcTAj>l)Gpu`L{qCKcqAX{zTh(%a3E%SNXYL$wNJvFWAG-L}yP*)* z1nQpsn+H;8L8HAk-d|Z)2jKCgUu7y07ahzY6V{zg(BJ>XM}PQItM!>I@>a_}Pms_BD7JX-u)UjlPnQ+J(Y8!SS$&8OWF#(Tk>5@%}}!$QjmZP3o-EDC?mD=wFo1lZkmnnnX7u z6hCa;WEb(m%t$=#tieNG!YFksGB>pjZ(%1Bxen*lyCDR9nCzPJ2{4-)JbEAg!#@Nt zHmz4&-CnEh3>z8C;hpHOCeN}1CypGhqA70Uz1M6#c>0Cj%8REzj+7#n?#fEMi??$0 z`2Lxiru{#yU3qvM#g(r<=Fr^tee~QTjYe~8bRVO`V@s9~$+m3Ehiu8Rj1D8q1RF56 zLmWe3Ap{&^h#?NkO@Lis%@qg`!j;6y5=in1Cm#zN!scTM2`sSd(Z1@g9u4I9_KzKX zrT%qQbyanDb=7;X>b;ll-cn$l?wWR;(XUdgbdcDtRrmti{@Hr`s}QmJW5Cuem2##%h6VpsFjw)@w$9xdpN45MRc4|l;v zPdw<+=(M_Q+G?g7+U!+YwY$2Zx@BkBY>_*smqkY>XB&F0O^&#u(TR8)yQiQJw-Z`z z82uOS!K=wCDE&DSMBI^15vq*lNf7J^XEotSvD&@wEGEXq7@8jk@xUd-;Eldw8ZHOB z=@4al`07of)FsEWx)QP*T~2nZ_f>pa!Y8FVi`Bt%M4I9+qlPkSE2Cb5gk}w%#UE!* zl$r2~$!^-03w_SJlQ^2yFKrbqFX;%Yi{c`Yk4U2Rn5L(4)ODr35S}s`q-L*9%_!A2 z>yum}=u}DB`l#NmP_v3ETOjFE#|C?7t*N~jtV&;b>%BvAqjBZUC$4TQU0vNCbT-?i zwl3=HJ9a!YJRI4&^?O{-CzG*^Q6lw(Fx~E{^_D(MwP-9dxrw4w_Ncq`zO&k;aRg0L zjo0xn!IgbIZj;ZfscTzN!?LX~6gIckN+g(P_AlPT{E$h)3*3q>L~jaeRakFePPZgw z!{Vob1w7>-vRKUf`CP!S2a&~HcR6h{Ar))+4Z>pjdV-KJ<|z18zk%{}tKc(9Af~>& zdqouBxgmCIc?D3UJ~0*+*RcdmEMYxC;{F%Bus=Zjx*IDz^agrbl3I;lt7p{87*~`?-w6e5{@Si| zNaGKx)lx-Ol}v53yY%Wnsw*)(ZsSd-%V~9_*h1?~*^Z!^s`?RS&TQzCdu+WMvnDE# zG15_!MHy{Pg!Np;)iVfmS}*l!uq)tI1jlABOewV#rISf}3g>HMJL;)ICg4;=1~$(u z)5>YB6z<1n47FyHHY{mj8KB_&);A*=pGj^GTcng8##H-;uk2YDHF}he&XG&jF?3R6 z)d!1fN84z&qpGT~XMGnhU*Q&SW?p1E;0f2lDDj5it{hv<-dMqKFblj~fWg{$SR)qR zGJ|(O!JA>wE(jMvI0oSaggYQS3gHC^L@vOfcOYQ70M~B%_!2L8vZ56%czwg zVoyt+5GGe8j25kY23;9N%P3w(xiT6cNU-o-HrC9~KoXuKs93DUkxRNPm16}4qLYm} ziaID&Yr}<%(&cDb9+I;WpNgTD%UMkB3}B}Qtfba!VBZZ6jUOn=&9>zBjRWpfRAP+k zHME9R%De+jj>7W(u*oK??&)at)-0!+7$Z3DXx7gY|^isKiqcTC4tcyumL&{kM!i$8y3l}4eIw(Z$iq#L%}b<^=y z_zLQd-2T$VEWf9cVHQg_jmlMOts-^s#3L{xWEXE_{+a%a%wu&Z4Ku(F;4`nGZp6(l z5;487-L8h1;YAh9HI|%WnS-zg0*m&GgqFwpu*wC&yMU1VVkMkM+;WWV zdtj-pC{)EI*OO!8Sxnm%EBJ@*1tCRn4uh8xio`VVae{=>uU#N~0)98Rnr(caPmukD z0tG1Lm40#0-b|zof}rIv6jo{Z8cW2m59Gh4x6=tDsJlF{3s#%(YW6n5IqWN^AJ>Vi z#sU_#)$y+8N=tA}QXL7LJPAjV1d6zMt40dh3dV2DjoxOf+YGKoXLF|K+p&I)x zs8RtJliLvF`jZN?e!P2SwcMyOc|)miG!yokjBQT^mPOJU>RW?@2UoAArn|bnfd^-b zvIRUqHFi_{&ztvI0-SfGP&ogFR9n@zU#ZusWm>16210f_!?p@e7Fnj1R~#xmn%@>Q zttqydrAoCg(~@lC0n4P=ZvK(ULwm&txKz1qOw?|tTcvQ@hw>f6$!q-@B<$f?XO#? zFTwB~T(i30ORH4=!41PtxkEZiF4y>?DNn!$@?OnfV&>7dJn>)R3cT025dR=(At@M#T?N-`NEj`9S zKuKfwjd!)Ka;rnh1}<}CSZR^0JDQ8{AJ%g5VoT1!y?~aKtX9wQ|PTFtLGlR0n)UwO%UGv6RdfU$uWQ=;EBL2B;w&WlRlqpZ}9F z77b}Ls!%MZzfSGpJgT(X&w`Zh-#x97?PAm*UEQHt*v3W9`1EMesg)23o9_BVi+wy@r|DA3GRFt_c5l*9vE z2fs&CymD<>Mk81O!F&q7lDC|Qd1}0_79cx)JVb8Wj+)3#2@5HG#G;-8brA1!27-W( zu4od*f^|JSii>%RWi(K}s!6w`i-K*3Y&Ro3m2~d=X@bvqXR2=@Qb*@q8&eA zG8H@BM1uvyG^aTuSxQ_o+axAZUDW#0J=D!CE!BkbtMbEhQEXUKA8qK*Wd|A~7k1!f zKKE#I(<%=jy6`6a&d+v1q=Z}F*fL@TW}EGP9e&g&XF7}l)9FAI?-r3sOku-mhfj-z zmo&rv&+FE9&(k)bza&7oN=!ND_Z`iq0;T@daYw8B1y9B#kw{s4#`&BxZ|$cPuOnU_ zb0_e!c6jo3-fGyz*r#ZS3}xNKM9VPQNzhFM7^eKNGmk)6@`vq{j#`IDc9?j3Z=yA@~AC^n$X}tr@_!U zFc@0BjlShA549?Uu2W-Xsfc**+4~8@Kq|jEzc{ zm(x7x&vSWqoBRCrzxW0HHHku^wF6hn$|Q2NN-5Pj^(vhdNN1X66_PW=WDrAP-`(b@ z`%Zs-pnV|J;Ca-M&|{C2cTteYTVWAwMno1*Ge2NbXgiumhkz3LBR1r7h-}cC;*UYz zvYfzwSb;FA=k;d~k=KMtUAzSvn;*njw3dQ%CrMwyBNRSwA?K|mFJ9T)M*5nv{Mq7d zszT|+#yqxef_;??5|R~r9TzCO7QSIgo^r#D+KrrK9u|b97|iw`bU~(?LfS+qOEk zZFOwhw#|-h+fK)}Z6}ld{@$B6STpO*nl=ATRh_!0?)mJ!KYJfl)xGClK8hIP%E46QK zg3xSnV>6(=gVWpruxJ@^S^SJJepGO@>@d&~Akx%SE%`QmZy3|z(0qA;n>BW45msU) zCQUuX8Ji;yofuzH?Pd1wLR^k@MrARG2hBe$lmU|}Jgq^<&?jjEx`-24<8 zC77Vx-8W6(b&CBa^r^0gCVb&2voq(YyNnLsP<*9tpFtDWwrb4$Nv!8YCFVO6R1m~V ziO{me2o-L4Mi6ukWzmC#2^gZqa+4{kNhKbALq2(G3(U z`)wh;NY5(o+d|4URe>^tnYCv`;+_8W_1;9LdecI}1S^N)4`uy?*&tc_@#V9Qav^fY z!czwlG5ctZ(plmYEUgOnGG-^&qdz-GDDGx2Ajo3J*9$4VXAKkuc4gaL^p}~M9zN`X z-hK=DL)9^Pq26Lkk||q7Ku9B=0x>yyV;g!5Lv%6kRcd~ytTzT;(puZN6JfWf;5cw1x*DJt3*Qd6p$JS_39GR*h~Nn&8H!YDP@63I;on0oBz z;}$iwkHryF6-N)4<}SHJ9xXd5)~2m>w#Qp=B5_q<&|B@QW{4kI+1b=}nyfG@>Ydaw zG8cMy13h^(+$up@!QU1{?@CRTzl)t}1DFI)$d%^$2DhdO<=RMx z9q#MOWMmfrjO_}8a#F?LTS`R2?K)UKhG?*nJNMpP)cBpMz8*;6Nc8J*z*Q+$BVml% z^2jWGFn1=5m*+MC81$I{(L4Nb>K0Eub3oN~I)WkxeZRIyNQK5}+`Uv`I}c5w=L{-{ zATN_0+3Bydv#MDzjniKZjU>A<)-5dQ9ZqA3v`2)oIV_!3s@T!yej8f9@uJr;!n4zo z`r2~NkvE)=PD!HG_)~j@ zF$r0Zas5@H>h%2bFiLS&?aXuFqWCFmb@(&QH>Of{Mq7qx1Vn1gSHxV*1;O z2^h|bKjAwF{4(D7jT>M<9e^=%=x>7*fCi}&|8$Eul$O-Ym`h8;{MBh;lBkno=b3LSK|v+X)8C9) z&GIe-P43Xt#X17bj+CY+v-#dwYH3srSSRn{CQ9KAEz)gvgzAmrLq|sL1Vte)3AlukveT&V_u( zA@hbf5upXCx`p0*$M_C}p5iXc8x`!vV6!d`sYVg?XYTtjKb!z(Q@&NR3B+uaYH@Pl zD}C>+LGA|PJ;@6aHhc3Y7uP3qF+8LbjChWj8Sl6dX18a1IV;$lEwk+Cm8363c%HBW zrW@GgTDN7O9C}1D(lAb8mhZ!So^&$-!Vt+GxL?<|6*UB6Dt}F=;YH}nWvD(o>OEVz zWWG@Hkab|wj+izi{XRO09h~TOoAYmE=I8~xPIm(0Sa0+E9qjdJl_5Q^#ewa(TOuei zD?plW@K14N_#$X#CqDINzm}1TJMipGo=&fmH=vGfb5?8Uh+rIrauc7D1B*7thErvT zRK#>*9+ex&aFw&X}zq&g)vUF?i@Yt!q;dG=ePbUd=?7p36@QijF)p zI8S8yHe)^sK50Rn!Q*>$zHP$H2ObER2wVn=>j|=9TR}w!A_RA#e`Jf&+nMfV4d2c* z%m~gX%pB%hE9INX+;5y@t9Z-XHy?DS+0!dgVXfk{kv>SCb*NW1{(i_?5iy?{2*2*T zK0NJp9B4Igbe_wU_=PMLy50Xf^c2Mexl6J=nT!}K&VFPy4u)LG%<|-64)0HzgMyp& zi|WfFrb;0(V|)vxJ&S~id)-j2v*FY}YRihI_l4?3(wcb-@1Yi)MScbQik-%4VPne! z7RPL$mKMUJM{~K;a?8$~ot2P6SAAE#-D3BG(tFv4PKSY1-^$t6MsCBYm5#TaYLo5b zpbD#3v#D1Bot>HaL?h0s&g%7^s_olLXkR?DJ5S5j+MMHT@}x&QYn$_SugT-0_MF4@ z2xztzgU84~a#r)%{1_+A=Y8y~NVJ#hN7%d$`|EsoG_TjbrHbcOLydXuVo=rlx#N_V z=k|*M>-d^%>-9Mb-daKPaZh|;Ji_MNHT7lo%U0u#^Pu#U=i|G#$5j;X8nd(W@kZ{e z)0+1a@T_1H@0r`)iwG~z?Sny=XWpmSaePs>+dbwg0!J42`3fSMHp8x}+jECf*sr!8{RN0SHsKQt< zOX3t??T&a|w8F|NWGde`R%EKc)RR@Pv8~tUXkGRhCw zoOwuQkiMu@L2A;Jpi57G>J=Vq9@T6CWqS`lL$y87s%EvJaMSoB*OdyN~Q=v-oPeJ$x@>&K0#eqqKCoNZU~YTtUfb)xaHVOjOOqgtA7OhNTeQ<^ z6EPuyzsOpjf|H&chsRmsoP>+KT;pcsWahN>IZdl5+kZJ6I$^7{Hw)X9SQ?s$yu`|G z`{hwy$;QLZI|Ao;zw2@xusfC3qS#5pp7cY8RnYNRkxLCv#)KzZWSpL@e+a>G;Q5!` zXyjxBHM5z6RYrO?77kW6Zf2V<9&6j_=ZYP@?fcW(+ur01xs}all;>^y?du__iOHx- z24&IXoxmru4%Jbe<;=oIez zTP6SIDkAUfcJAjqmms$7_8s_L8C>uC?bm7E^{bOUod_Z9&>u6xGZPC?r8AE@*@SD2=!WLYRrn>)lV#?NDT4`ou@@2X7l1I0!7 zuhM|YYSC`ck{}GXAM!Nc#ES@^tCp)p5ys&M?loCVPrpr)d=vYG$t=VzF|snWcd#?k zvxNT2S?ilY)6)a!0Dm)FT+p=q_69~)4gfY5IsmPpo{gxHsmU(~04pmSfcB@+zsjiT znZ62zE%Z$60Zd;RYbyr<0c#h427sEGof$yQz)lCCr)OgT&@(Ww0KV>8^A{m(YGL%X zhwjUiJOCQ-ubt9*mPPm04qI!R?*ewOV?jhe|g%O+BjI-LG$qZS0@?%8z%+y z?2Y~+|97^9P3`O*1b^w-{k8nxtNrrsA2(VWJe~<>y{^OSYR}{aZ_t&@o?Aw>(|19)BaR2v049s)@ zhOg>oq+NlXmP02VqH00S#4fRT~mpDhz3 zD}b4q>7Vok{rBwuYWr98Z~B7%)%5R)>5Bjx3oC&2t3@)iG6C4=8Nc#hS{YgXLYdgU zidh)|ENqN`zipA}t5Gtu(*u}T7y#__U%bD>*uF^qCBV+`1*QMe%nD%oqR;dNXZfmC zR=O|fS7%`Pa`P|dAFXr%M&`fJFYo_uzbr6+RT$$}C;4lM<;w~S)4#ZW5n%ZW6eB&; z7woI(s{=56K^f>6zeK(w@s($1{3lp{i~bt?NBTYb zEF6sNzJ|iTvy6k$Posav%&(b5(#Xo>@7T{w&-hpN-{vuw49{c@a~u)GfX#c#Ndp1M zmCW@PU!=3O5PVksPhcT+PKX^sTPohCO_NjeSUv#KQoS%E_dN4Fb6wNDrMo+OSB8~$ z2M>4qs*W_?Wb)AI$Mf;ny&ms-r#F|5m9euM7jJv}$KWSI_C>a}RrJ7RrZai+8q1pEedxv+uW4kJ%5i=iU`>CL6C+Q?Db}uNKpIS-6i=Q;!I* z_a8U5U9OB$&PA*SYwKspL*DNb&${MbpI28y@Ar-u4sUBX*BieIoFDp#a0w&zE5C5y^; zI;oeWPZk`UGM_>C8QM>`OcD~f9|k5Lqpsld`#n0-bqM3x4%$3%b>a31p9X}{S3@Pm zXwe_`@*TME0m85!MzhPVcf7U>xbO9o+FO_LS73LuB->C&q!Yb(*e2+Sj8rx$fz;){ z;x=G6n5r`HbDr}$K;BoO?UC2eY;mu$w=si1>qDl1J~n=r@qI=W+Cxn|5t%>;CVTlk zPnBQ)dMSd)zoJEX$C{D3=*64xE@u7V<;LrlKBfL7qtwv<>zz0&|7wUUfY+}}-W{xK zHDuk3}c`IMgRqh9mOF){K|{FBG1{hDS8l z!DrO-mGwtFvMt&N*vEG`(ii8If>py0gzS;0p-tpBJQ!5xTj2S`Aidc)F5lG7vAfH; z07lOG9<7)_-YFM%?a=hQq@K(CYNNLyPCMb*h^O&F?@3CNHww|<<-2H7!zc8c8P`oWGNCi+iTb~YODW_fGO`vm7!bmuMa)zNtuF;SfG&e$=25y67{q*ZcFW90gy0qQNlII)57 zWOJLr`6y8L2zt2MjaO%8`tY&sWxDL9`Nnh?e_WzmzBsH<;XEw!SvcBx#5ZGPUN3^O;Rzm-gXG>hNY# zDC1u9yjAm91d8yaGFcDfozm{s1>>#h+7vNz05etn$_jnR_nD5;=<6-a#C4Tj9ah%! zK958Hgx+q{-ie1Hvk<<-eOp`a4Wgu!kJU)Nx239j5N~GMq^-Cnv`bGOEL?hr=^M z`FuoS0iu2YQ<4~DF<-TUpYnNR@;wPuYKTN??CNgX5=n+Seb6dBNoOX{+G@2P)KnMj z>+^Lm;+LL}L$93>HA*I>rDbJhGCW0QP=b)QF}DGP_T~#J90(pI@7%KX;FasIQRnRR zH(SNgh=tjR3vHJR>AS!|*u(*=K<6J=(%4*1_UZXBUV=EUxBep5UAfIWsY(GMSdgzb zUDzDeCcL*@t&9PlpLBQD*nZI4=4(w`kC;!HJPv0Ej8nK#U65TmKCea5xSLJEYW5z) zdYez=`0dY2S&XF3Vy19nCi4+WfEa(M|$0ZtmSCd+Z zVXsXpCp;bbRvT+UkUqk-EYKKdX~?CXkZ;G$mgSR7X3C|#O?vvjTydZvz<;8!DhZy$X!@r?x z;lss`j%$i-iXR%@-GjP;w~OTx%Oa48HyN(mW53~YC3W>}7u^urkkTfgjaM0VA9f!p z+wE!Da?fls(*(uN|-YMKE-O2wE=MnD_{-(26H4O4>eq(uqbHlpVw&%Y0x@SGI z8T%>xflK#+H;gchFcLi+J>pHui_c5UOUO(5Df$um=Jyu&#`uhW;~no!+(qyOhIr22 zTin|mu^zS_@s9bD2h)6^y>Yioq>3{Sfv5OT38Dr4tjrXOz(?MSI7P-ESeEE#VEsf2 za(zvb7;ku`jlCWw1r}`9;*>~+REQWNg^%tUISazGK%%&T@@dxhxRIh^Y_Z~LAojxd z(i`}IxgL4S<$m4VV^oKNgP^e}>E9$eJw)jHv`&#}XKyE-13|D@{sXgn#Rgv$X|D$p zVG|H#^AijBTQhWKz>dY66b&b9m($0@?QSk>@K93#a_CckdUkrc_pSYIZhsQ>w1mY3 z>S!DM>v4t@oe4dHj~brQ`&)WnF6&4V4Emi;Nq_nwttO#Zm(8Ll0Bu`T<*o{)TI{2{a4l%q2>*X;HXeAu+a%%`}dp;d$<{KV&<-^ll5| zw!fd61dXoHdPRJ+r9qg&1j%}Yz0FSc4Na@}9rRt+dq$+grIG<JBaXg@Fvo)`EE1qcu9=@{HI;jj{DC?QAQw+wc%k8Tg+%2YFL;_CaIb+`FG z&WgNN(ENH;;*ihm?w@5{0G?I^S%Mq};Wx{n`eZ5jBV<>^70#TFe7|rx5@f9iJ-gs< z_p=->a7XNw)ZudWecwHlb{9=C_Ti80;YaQ1R!}OEIO~(koamrr1VqCM-4aS1jqK$L zm#@}z1p@gshF(L@CaS@ypJ8Upki62gXxSw zMKxsS#ejuB*zMr2L&OVRMd2o1I2lEKKbVv4PO7vRuXU#R$bh2Z8By-k#fVZtDII6W@h4?WjrV87@}L^4eh=rpG{B5%5VE^ReLZ&P zYNw;Qx^;gC8KZ*_CVV36yWQpbv{G3iHX>p_SAWwd+pnR^O;ItNDDADz%7_!AB!3Lf z(r>l?c<~ZL9)*b7U|6&FIE)Am_9oO??g8}Kj;}ALiELpCv!weO@nfI_XsB*1Y2GnLwO>uJr3vgRj6F z&$Uyj4oTPxchpms2XG4M+?v3rYX5RZ8FRo$gamlCWRSlU14GFS2UpYrXh!Y<`m_-Q6EtRZ^8sZ0y46R z^C(IB9vbNWv2a0(ShEoO&L#T-A%vzAf0*lU-FE7P^GhtVOH&ju>xFGJoIC@+LpFZu zd6CtzU9EGP9I&Wt%{Pu&!}N&m=(N;hLZ0yM7R#tDPrk%_?CCku#Ci>BiQKcD%>YIo z2>@|;#(dGoN~T>a@`a5bzVSSHu!nY=nC%K%Pal0A<58m+8j4EtniC2o9f-mGAxddl z1(+o)43)pcKF>N2#5+{X6`O;0~e`>UZmXe)pq0Gz0C!CJ2$4r-=rM@v*~17~yK)fegF@ zYRsoA>MxMhWJsH$q%D{e9%+uMZUCdX49TFdQS>2!A-5p`0QoqdNk_g(jzqa1Jg@B( zx>aJAqXlbPwGS;SyXuav zQ8{1j+v)m1oc7&DEw!yResi)qm{WK=MKdBhz&wOV*{R>Ed3V%pNv^l6du&nG)#(T!B!54ja@bX7TWJmk_7v>bW}1}rM!MFsUpJ^ zLmnORRa0I2@Q^b+wHKiR^a@-0j^Y`KaM*L|qt3gVr$L}zu(NP3j5{Zfao8?p%=L`fa0r&#K1tkGgHj0lOa$i>{m=q`r$OVo7BM&;zalGp%3ut@R zMsynBV?%l@v)=2`&ufaO-_4^KtI`+x!~&~6Ipy0bj)cJc=DE+1>ILvAt^}!VJPlm3 zKQ);&{yTG>Vyhxwt7QGlxI84?s;nE(dW;SwYTb81OEY;Q6SH?%rKA{EM(Xl;CJMMJ zW>2x#Y*JwCmA>-x41~Y~&hXPxtyte?Ksmn^hL%R6{>7fE&OD}tLp`TJIw{}C_29fi zzoAh8y>4~J>u{?SE7{d`%gomq-aPO6hq2kvW$}#j`mYX#*9Ob$O5UBa@bqN|*;qEu zflEQ}q!1W$`ogZA=B13=OxLhj$V#`Dym3D!s|PlK@n|92t!bR^FJ~2cCNi_1X40*d zH#|_7b`KiRTcT}Pwqo85<1+MhZO8fr=}pUm#EdY{p%gQk;+R)J?5|q5LR3OHf$W>N zRAjAvVZ2PXojJSDfvkT=6eC-50jv9aTB%Nt^~vHE8mvV;`67fU-}$mC z+WZi*bW`ZYtFb^-OE*rSP!H)&0@tD?r%4wT)c&*i3N!_>lCRP)Co-h%q-wl4F8$mU`32o@5)`?=0v0yB%ET zTBotp+018kMdaS_<1=5kk=6BLj?}Xy?WR@}Ntz0*UDU%Ysql0KgAOB+rw6eE$E5o~ z)B%fz)aA>}wdBfxGdkQ4#ff82_7WU@j7m8wKmqOeJi zT)-#nci^PYMBd|MHgD-ftynyIpPl^n6pK2TZdDwTIy3wqv{*o{Z{HTdO3!`o+fy?P z)}Blq-QBXV7e^75@Y+PxDIt7)t`#)46xg=v*or0RjqZ%%NZ}cZJ-ca&&wW>Li!%e- z9B*_4S49MJQYTSpHPxDb*huv@KviOGfy}^(zj3+#sC?|XKeX`#rx}Vu^7TOX$?h4r zX#N@1rx4Zs_2T*l%oF|8`pqk%$3SZieG3TAG4kPwYp$8;SFKW06FAN<{vmS3^Wk6m zac$D*Kci5L4ALq?cji`2izACQTT2S08X^SXQuzv?yO$Bw*he?NVdf7=#l}4!4rE6Y zU~RjY)N*K!BPcO;NAQi)bMkM3H13JFP?uvW(ms`MGTAQN-2ry57G4a{wrFO2{99fG zXTU%t5nV;v%_}!iVd1PWMZ>Vy$_&@wx1akPuU&MjyGS|)gDOAzVf%bR*u7PXKCnO$6S! zmfXT0Lzu6di4DM_1$`7OCu~)!!=$kWm#YzTtVvX4a1E7uRo90JQxFvyz45EmiKISa z3Ftg2CfR14uE*oAnx4lgW>O>-#IkFmaA21Bl*WG7)KN6&7wM1J;Fhl`r6=A)CzhGx zqzM^6?09yV-n)pgEH_M+I^g3fleV%V(ppxTl)=k1Z{4f>n0Z=lResz{JnIvA>>x~U zvCl?+d{A2tv!h{?KY`!ZM+$tlG*jw5Mne&q%BtWX(pCgFDQ)s-Xxoi?b{}n8x3`WK zG{zXQ2zv%8bH=;mfA>&F>|xL~QI*wQvdk%}QOE;?DELj+^lav$mAd^qwHkgfp( z<}W7MZ=Ck$D!da>GRqR4@yi2|x_tY+;uOfEfm*`>Lj0qZ?T1$zZHLft!?YV5p0!+W zgQ*`Kr$sv@%jZQZB!$r9+wv9p))J*tJ2jc!m$BP)rwPanqB;F*nC15qie-$R4Z76} z2-9I7lYrOx^fWRe8n5%3e5rx)fUzlTF1kyL z-(?;m%T4LHSjTVQS0w=0VA_gQ8HDn*HoY(I@Ro*+M8U!&w^%I2{VQerX?C>JjP$gg7=R`xfKrG`XW1PJPMoj zn@QW7%?|npb7dXu7CTm1Hrt$qn7C?QHzwMvmAASwe_&%w8rvIycE}xY4=)I-;@~@O zorpkViT`de+JX->$J^!U)1#^r&eHpMW^fJ4$j1ljQa%92v59lV?6_)`y&elHQ>$8J zPk~QHLqwvDrTC5yn~<5~bP;5mJriTbYKG-A#@aIvvq;o1_l@}!c3!pP&}h0j(ml(! zu};Nd7dLbKk-rO~(%jR6e=!YLXBuZoM*Hi;w&x|hoKDBs@;}-X{2cW++IA31<0Qp- zEPUMGf4ZAyAiEI?Qyc~35fQHJlH@3>Pjf#WK{@ECRaPHs)}wE2K&xAn6<=D}!>p|M zIo0Q+lND@wdhpX)2i+Wm@w`w2Z3=AH!HjWVRZ{_N!d9QC!QMKXenkJIl$$Ern=>ro zDK716So#RpX<@BDy+%p@GckeUIFDvej^tfaGN{F}F&LgFcE#$ScrDDlMeB5D+?KTpLp__flN<95!(A1e7*D3dr3g2qLtT7|ECnk)SRuC3ZnDN{wpPzdO{ zXSe+!-o|_!`fmFvdk?%J&y|as>nPDs1DEiTACwOV99CqUIGUfyR_H=Wv6k%vI0#PC zuBo0Yo@54D2TxvEr_$foi|Ja0_#Z0gOS=n2wcG<=k%u8*mTLQau%cr=TYuutYr@Ey zDU)gfT{h>vGEEm?1==N~IS28A%9()PsljwD<}H)c3N?IVn!REu239Z(4sv@1I%fS< z9Q?i!bQc#KRayvYv3Qg#4VRjk_KC&q&XM^PB7Q@C52hx7Gr9)y(iE9AKSmN%O;3KO zd+9HB5pV-LmsxUDePJ=@D6K_g6Ew;fTb??>oEB8mf_=y&7uU0-U>0+pCw=?_4ki%u zD7loB4N*`LR0~r9br*R4 zz)}%ajG6+P@Y=X-jGe3Erjjq>d0?js!{}ON7nWnGw@5fBDp)On#UQ*({&sfOy!1kz z36HYrdmh|~_2&Cik6f~D-HK=92pqq6@4jLN{y=tk@RGw~pryEE*8A4Rz-^CP0i$ZT z10IbSjs3B%cgw?rGl3x9-t#e5+qiO)wM~VLFe+b$5$~A%>e$HE8@jbeTy)|LBqn^domYEY~=>29T|VA?iu!^Rtq^Q}6MM zs3a}`Kv`B~`&@wsUHR(*)NcG1ydt84eBp6G%5flIUkV0G-kFBqj{bn@L0*U9QZu(x zx}ic8J&>_WQLowFh?Rn3%2t3gt4|xkto-qdk`pDJx2L=CtY{>yGIxj1`qUIc!0f8` znIYkA=lDWKOxg_M?2KfZsm*U+9N@9X#c{t^jS}14X38lYunR~EO%kFWPtWg4 zE^p0H(Ny;L--kU1g#<5a(JVD`KQ+sc@h)ajo(x%+$C4|UniYdPVoiU2(k!wrkEDnC z9fIbL1NAhx>W{(hjXtaQuws(kLor+wKK^Ft4) z=+LI8HQ37$H!eBiq^~P*BT3RQ&t^ueqj)LQ*3_PCQZBjnkQX{Dp38+-RM00mHa~{L z^UHe1UN`Tt4m3)#Wjq2Z9_;~)$cYY1rV=i_I1L*X#cdn897bi_3dJwo49ABqgF3gX z7F4H*E!|YsD4>$y+S}c+xp;0M-uj$J z?;l2yg>~J`0h0^RJPt7joEWvn==00iOeCB?FBX3F3*)cn(Z6K``z#OB?F*_)fZW%C z-%aa~Y%FAAV!XmvcqW$zBT{@Xc-Asxj-35LSf%|CR+ijBz+=nX{YvhEx|NSAe16V0 zUyrLjO}rjoyxDXlwU>nS!6y6J&C3dMVZkqwXb?N3?mWZTcO>)~J1rFiW{( zkwj|o@$pq_&%$AL?B|x2NTq{Cs~n9HWVOw*0#wpdrna5?KLa^32@3K6ecR*(8Si;2 z4?DJA%55iNZQD;T5LjJA<4T92pA|exQsmfExB1~ZZ+D~V(DR%JhnK}@Q4?q+ZZn-1 znPiaVMN&2PXfyIz7njh1C-1YrYxo9_#mdTsSSk3-mz%B4ln%*z;0SEJZ=u44vl&M6FHXJZpvN}_1JQ(gUf zm|&h*X|Be@F$U9o!XuSU&bUnW)tc_X(ymZ2W&!G6bJGovwpI4bf5Z+(2*;u87s`K> zuESHL=;g#xrjQyDi^1_rq6!FZG1xYF>B&S$>ZJxV{3ON(Jfg2bR+VFE-B_suv+2d%rX5))WcVB$of zjf0yls<*=r!9O!f?ZlVW=rNu#WuH?!ifme|X~$V%q$KXDPg?^i3NZzvvP2Au~%D_0Wq7&%+Fr*C)$akE+1V@u&7Uk~5Tu z7A99SN^j*qg{9gA9rU#_HI!{?8ERNAx2pYIH*cMV&is=vcAoWo$D-#}zB3knEUi!Z z8qtqmYsk;$ihBU+pC;BO-3-h>n7Xq%>$J3q_uy z-mD#b8gJvN1w*Y#a66XZerJLM`lJeeWsjxk(dd_QT^tl09nZ>C>juhE5g<)j;_9z_ zzDr&9ol5cPhG#v&Vwwxp(5h9-2Rh2Q#qYgkd?G@D$!K9mG*dEo|c!(RIyY=V)_FGR zxp_U1`@W{aSS+|gWy$DZ*CK|uMk(CG{z*SY4y{8e3nQa+>aNDoy7klB#+@WwWyE$< zB_tyLz2#$nSB>LAOxbU4PM{8X{i$f?BdIn{LoT)2qb+MK@`R>I6GNIt%iGb7kCm1y z{+&{+1DWr?HCsz5thRyM7V#X%Y?(RHkg1GgwNCNwh7*KVsWp3>#(x`VItXbe;TSmlDT4>zCID&XsD zehPSv=_51|k>Qqz_k8H3JfbaF-De1G&?e#+l8g(>g3UzZIDVi>AEd6$BAY?jh0o!d z#_fz1aC=Px@0cqp+w20}!a-e7(7$Gmc%5p@X(I!3i!M@z2*=(X6DBB%{heA;#8u)( z(YtUm4N0AL9y1!I-k8eouy&8+A0b?f4Ii-1Hw7HT+h0G9!t#Nq;>{4z>bvA}J)ZjL z7}jlG^$`&HCUUFNrTzwBeN^qMcGbSE+}1#|sw%J?#fK2PO6Oxc@<$EK3hm78ZPCD*oq43h4%E6Q zS3)-_POK!Bx#1@M9vxGrw|=-j<#MP3CDrINvVy5}%d4$l6(MQBWJYHIYF~_3tULH* zfQo&>pX~@*U}ycR^lX5W>^>SQ4U$7uuEy`J1%Q zrdkg%v#_f_&9S+I6`ty}gn=6GthzWM&2Ry7X@3*Qy@V}4b;VCn*Ow(X=mCbvn^VK= zF%r3E_oV&o>XC#ZqbuEy%-G*)H%wLG#2^U2^3v5<6N|m`5{W8D9@V*{;ruOBG7AIk z`&2#?v{o;9>+NhqnkY7kC7{bbBxS!X^!O3SrLjA^Tt2ttfwivfByYOpU;833ybAy$!o9? zD!I0~zC5*Rqn~DS(!17AkJ*V!#_2<2&{u}c_N0JEkz;3$BRD6%Q@!ni?pNk=y)Ler zb2VKCaz2))Pl`&@w>%8@t=idZAlzXgiF+$epnV!!S)q4}E7n4iL`z&Rm9u1hcZoe6 zl2xJGzx}PGONo*;q3HA(N?WMT&P)|vKCtU$JV-#fA*nNGj=(t)x86I15@8D0rwR8! zgzLA;v3>JodDPsf0X`B0S`)FpZ^sEj&O27!eLcIFb=cVthln7$$)k&yP3$&WQsJlX z!rdTYv8N2DfI?lo?B_-f7AMA%N9#u7w|ye)BCwjRyH;1>h|s8)hMN>5lG7!`$>CuG z?97PqnDvYQu`%bB46Js{29nlwG*8!D=aNHV=E*9Q)Vgx9+WMp0Q8*I6n;S?fZ7L#2 zP{R~8g1k=hsK=T{&v9v`Z<*VftIq$il(pkCS3yd`B{?#7ZFy!Y8xdskgK_AwY5DEd zGA`jRkkg$+Twtl@Fp}r+<9SHhQVhP!l8UEY-(JuuJhH-^1Q`!ndg}7D_BoOJ68A?J zTLy+!OM?dV>ZMfWwf}XT!s5jpn_q2jYlfao4(SNjSq0ebc9i(Yrs*x`$Nb5sLeFH4 zuWo5qQu6Nr!O;in9}ZwFFj1-o=E|X~7RQy>d9#eP;$eA%1ais9NL(7hy&}N5?yfZJ z!$KB~DMMN(S!DepFX`IM`Y@K*dr#U&TQtF73udE(YECDz3kQCQ-@%(mWy9IpU1bJ! z$ddeAO@7vb!Q>z`Xt}4pVlTp{)CY1Eim*sGcL`i7X^1+JdkWjg zD-&ql=cxfw#VXnA%ornr*ik@FLduif-Si2gF75)Cl7}S3nA>bkATc1C#K>i}ro3^| z0(sZSDCTwenJ?#FyuP`h4eK7yA3cDhl;NjP|GJ7y2^PC-ECDw^)*)7eXv!MQq4HR@ zrtDZ-&U@-a2VY0tWo1mX1vy5MzXU_0W9guUek)Tc$*~%#yj_bUstgA z2VmXo%UAwKbjH8YP4NhuBcX;;!pY_OdlF<}^$c>XCK#jxt1r0Aogl}!Zb2&$y*pAz zPj{eQ{3cm{lJ3%5$a4FOuTB=+i&ELULkioqDf@x{h*?pFuMW#+PpG!wu5%?w&s?)x zedGM3*EE}YeoOpdUY}t0{O*l!W4rfM3AcO}q%|a>E%vBvH#$9^n#)HLd&3}8B&>N6 zFx1mx(J5+Na|Ro0sax-l9!6U`fW?L@Ufu;npB$dz$7R7l4rFX}b|DHM$H6-#3^ z)*DHmr(l7`C$~IeP2q@<*#@i06}~{=akbG7pRslQ ze%~7{Sv>fivmcZk1hLULgK9s;JBxQgahNf_-&;7J|G|i-_BxD1>MpPl`FU+&?Bqt& zZ~Jvf8QodbuNzWVsCxW$;Ppelwa&Dm0YZS1qpS=la=bHE-r@dj5_;wa;=V)ooJh2F z#Owypr%8aI9HPpxq zV`->l6_Ho7eFr!tzR-kef55v!ce!(YdV$l8LI_XmH8N6jR=7FRDXq92R+&x{ z7S`N7tc_l_2ind`RmAqi^@z8uuu7UJ$)Z~xH{I|PTWwCqCpcA#{-j57RqLJhv09D8 zUzi(UWSPrws;2KUv{HGxCTG@_R=Mn!3Q4(A3;A3snOo0 zW?LdxMb%oXy#UMMb#mU}$9Xi;u>Vdok9}kTZ**pr<;=i((_7rlGYYgUgSl+205T={ zbq}&LlD6ei%@+u3uACLu4Xe1fD@Vpf?cL5{q@1Deh7c_f)iFjt2S;D%GNn*DBY=eA z@_HHfydqQRcMsE5rnTeaeqfv_lBz21b)iSy$Vvc#@h7hjq;ozPnZ^kvVr!_V{lF3-6+BePOI4D8-|Oy zknc4A1wuf*zY5b}o;Cvv<~>AV+}Qkd1()6!?~5(yD=p|RThNbN&@Wrh#X0>N#`$$c zhjFogt1YtL1LJ50t%+XF$Snqfbkw) zZ8Ymf%Me2yWEr*5KNL0FEs^nw;ULF&HYp?F$UrJN5RLisK-5;w;xFgeVtdgG9K_7C zw}iVC2_$vG=HRq#IV@O%o0(mvaL^g>2W7J=^{#Ci<8l-n$uS%xz!mfGH|#bLHNBy&10 z<$R(;%xp{AoK^?$FrVV>k9M3GNz0>Ws=P2Q@T^001w65E*k$%AJ$tiu*}`&cZC{M# z1d|wBUyTp-lpUChT-|$ua3B)e$^6< zvKHCv^o&f7gX#SEw`+oxVVpMB7Vd0M&G+1AcG(oC(_(kq+#M;aQ!vX+x2GIR28wEb z)n>Q3>hVlG9*_0)aa)%-vSrw;Y5+^VR>fp_wdW zD=ReJJ4-#===ep)6z*^mPnK(!PM{>~-SPhQwTRjImp&-M)sl;JFg@1m%}NnV}LkXL?h4;%s;X0)kXbUy!_~+{pn^g=izw}dC`&8JNx=}ts0JKd9Wb) z%GsE0*_DVKAe)BXw04zb1M@ zF_{UIn!L0$A`)jbGX_NfLuRzkuu)#x<%rvDR{^|AI}BnSS*7TS{x)((>x=D1wjn-c z^@9G?IT-O!tN&>V=~D5o1>6<9QPacq&A<RsA6Cf>cLw(DfT;}nl zIUj})GU?={i7hR%X?Rta4$D}wRWyl-fleA}!5tc&+8{%7O>)#CrEb=&uF>LXxb=_z z@UTBwyc4uX=Gn!6ZA^CM1A#()q7J0z&Vu#l08uzpX%8fuF4^ypIkzBZrv_Hs(%Jux zUFmi8J7a_0Wr<_O6^nwqF>OB**b7ce1U2rf2SaO0K( zr%iC%LYVPeiZp$)BA67`9ITf>WR4308z^Fe73+?MK38hi`y+MNXY3)#6SkQ>vRSsG z=c*VoiQ^oMHH(Vx1|`c77;cc~n4LTK?xo;tQnU-4+tN&TtD+?EE(_XW4Y0#L%8i0$ z69F85mJ#$6K}_C$ZW)5+ujpyEO&K?4=?1HAVQEqPi=ancG@|$y0qrjWqF*FEaIJuA z3tWfcx*e{E;d&0P*WvmkTwjL^qxcw6x!Z_^RJ6FloJLbo8brO9#y~6}Y;IKa^DT5p z4;OVW=zCem7SI=F^qGgd?$!Ft$$CWNHYg7*=)Z5ef*SA~xk>B$AiYb^m|C9h;S~jA zkHpg6h(G35S?*2CwbVrbu(7dZ)0sroq~|k=-lpM@Gl^xk-UUCHHO`>dH`gh7y;DcZ zwvg=LSeK`Fa4?jKjSu(v7VnRMEsTfp$;W zZQ}zevl=VK^R=)QW8<%IAzxr7=k=NsJ7;Yklc0RuSF4qjqNiM~s7wI+jAGi!;xF)a zPR*+p-t2My4kez}(6P#gd#LP!;CKGMf6HWd$Q7~4#lDpt3@3=(8r;TM91NRyyU52f zX2p!veER6RxSz53vXKN6Ekv9QV{#`$E_^5fJjh;qh5G{6N2Bg50L}K01LQdQAoBra z(cLs;{km2@L60x;Y9VV(M0%Y@?%ulh$v6XQ`93IQ-^L!OUA}jXG=%Xf4c5hc>jJ6Lfy)sW9purjYKCc=d`tmk%4+j6}1+ zLf82)(m>Z(_EUS#q3!*-31#M{EgR-rtwMv$H!3(#_L)DypDat{>R#_ifr4 zsi{A6=2asC=WbX2-d70^J+^OOaen?zS4eePoIc4JiseGgI))edN!-YyOe7coBGQ#s zJXYoj#uDggmo1sKDM=PM$EjF%A`xk%-t~hY#PTEAyeAn?ds7xg^(*P{P~07lCsd!v zI|Rn$iiZS#m=}J4GHKYD16F9&+ToX_Yv18M#o-yDS5Y;Z(^MinEZmij*^TA zv%yu-Erc4tHGq5MrK3A~H3d_zTT4rH6>g&U7%}m(tfv!{s3gG>kL1{0!BpiEP0>6^ zp=t+{XO_(NWg$5*$(Q!nd3sytBE8kvpeeO@ju;|kEA+=4O_q}(XK;68#auYOa{H-i zSv9Y`Y2$b@n!bNms5!8r)U|4;9*I=y6CI5e^>(kfy}qKc;)c1YLTP5>@eM1FY+6|= z%+Bo^?q1n!_jvP-+3xY<{ju@1O;u;kA6(^QzX9BOfCbCFfBSTIz!vhQ$7a^odhQ!A zQeQRTW!xc!z^9PYk8ygN4qz2FvM+OdUCk(7zco0zVm3vz(@ApI-p_rGYmy+y_avB& zdD2A=;Q2yfdIVq_Wn8Kz{&km(wwXfK%{}XNmZYu%pd%^*Wo$w3j~uyO)-$4T$8u%? zQOl|sfw=k3fHt(C9Td{X)^@ngR`hTlnyc-g+Tf%%YPKihXNYpuj8^t(iC+3c!wdR> zF>#8KIEj#~?^423WM^BvREM^UVVv52|9T?>=(mg%WbU(M8{PzsvmMZ~yjZ13OZS7X*t? z-&>#is|!L%x%XRZE1QbGX2M@AtsE>%j-n(n4#BVfQ)0Bg!&$#&^~z73Q+&etFU(89 zNXq|Je}~HR0;hEOzuMj(YQF2_$>It4S3G%=xi7x1X11A1a^L#vJ%JmgDfYo>&{kUImy|sg!=V->d>{Pxo>ej@Rhp2Kz!^nS%oLQ;qF(A zNbWiOWBeYedQ=s&P&CfTz#;)+X!`^OUF z!@V9?vb~;Z-n-o&wwI@RI|KewCSqFrkr>HU7FYT^LvlFSzO|ev3Tm4oDUP(==Ch3n z;)U)zhy8w=yV5gN-1^IR0to}V+}7zrw5#5~ za_`8*Er)hhOY1i89pJc*l#{i&m|totD{`*I-5SSYH2(}#j-jW9eV|rX?JQ$A*|Ivn zN?m)2`x5Xg2bl(ec7eP>K1M#nd07#n8)S!&80s-UU=06D9n+~WZ0De+Iy=UpZ* zx1Nmi(sIt8s_02*u?jXnqP@gc(4X~8nE>6N+|bHH+L@ntPHT)jr449qLADl@q>%m) zd_9RuTs%Vv?K4b~z`f1Jj^(9&&hSFZUKrsG3wUmko>F0)0kC!1LL68oeNVUMa8GLv zgH-Q)9NOR4YJUyhaBC||!Z7fJmNfo<3YI60%ukQRIT<7QTHlbyEl=IXcz~vmYWZdE z)Uv2RMqD1Mqcm-7aHh#OF(#|2tiMq}>2fPUr8Z`Fh1mW`DVuV+QrS|(mKdn9c6+fi zD25A}gv*u46vCU&J(;#z z8fbfTlP|_u6GKhbSEz-oZ1`5elj?|t+hdLPkhaxkJY05$-M(^L)a;C^HpU^TR!-zs z?e2-%l-cUlR}(|&q%V_*yFXE#C@9G|*ouwXj;-4|6bG~MQwN>)42I!{Fbuz_23=N8 zjk^Wb>QlehsvkWq)-XWNu|-C(dt76q@kX!|sz)!v44Q_jp#iy7Ii6oUm2CIh`FvF5 z?2!O7x8cGq2P$qZy!GV06YfG|Y;a`CY-0Vh^SjF?GtWvEODbuDxw8T{Brx`DBbZkr zp|H!jvRZVeGf7E{MVGHV&wY~ph34a4N8ZUid>PbFeKXiWnmXpzPAb;ZyNvuER1?uw z#FKT6{8fYvo6#-n-cc{D*ONXjgI*)hEigEm;bB2o_k5zib&xs<@xGG_==?Bh@Tqv_ zz+?0YFCr~(so;s7s2iZxi>}o?(NA4DL5*EqPq__@N&O5k{hR?baoGi3a~2o$Toasr zlj<*FZMr$KMSC>X;zpv*imu6YFQA#Nx8kIYemgbQNsoJ@x8)R+rz$#p_6oj?anFSo z^jPa|?4{>|0^ip&HtV{a)N~vq(&dS2Iu+xo0GQIfWJ)gcNOH^1wJ_zH2@j2<6&O#H z(f9Bq%j~lK9Lq=)4a~p%!4C$0_`}S)Rbzgn42}&{hc*u}tUciD@Ft@XrD1bh|McpI z4tQC!7@OXH^Xw0X@dzK^_{y~zMqq$%h6N$LX6;`7I^>&NfD?2$!wA(Vfdl<53PZpc}z|@P-GpoN?|$dZ*R*7B5GU`ZC0zGR@}S*^Suf4){gp$X3XsL7HuMsmDR*2 znUky`29eJ0_cnG3{E)!!!E>kNh@0g_&NR@Isuyz}rzE-uS8i;#TR2V?Scg*W#*@9D zy!KIUJy+9cr%wJ-&%t0TI?LBLI0BViS&9fT6xAy7Qi>C{C9fy8fo4g<^<|lft6v|}km4{i^qb#w{oB7W z>1ZVrao8OKCkd?Cmx}{(v1-o(t=Hu61V?nEjwRVu^ zWzE#a7a?z1S^TY?`y}JZDFiKS4A|jYBSqC~ifXFEya8e(hYlTz2YU}OUq7;_+#4!d zO0^?eet!gb;x{-vsU-!JIYPEDCUhdTX-mk`P@Id-0NDs;9hfS5mK2_q>7=m10kIF7 zLUH>2(sahz1x$HrqudSe*oI#ZGumnuG|lwd$|mJQFjeriEiGw}>y{TLZ^89t@$JOW{*Eh-8rqXtzv zJS!Mm&QNiLDjeSbA;b#IGC4M0vk?L(NEt%cOz$LbB0H;xh&+x>)w5z$uPAu z`f1q4=IEt^XuzgvE^V1MHYl0?@Q|DVO&n=aRQJ9;F$ z@&TR?=G1`OVI4e@_Y^w&GIw#T8uU1LtCe8~?-JaZc&Ze3@KVg}2(}N`s=YDmbfQnu z(MxV~h`eaxZ@b6oQ|x}P+vH04_yltkCn;6cpl>f3#fJOq$rHFxUK(g8J+5v$<1_R{oeBn`jOMx zUOmhkcT$;Wod4UW9d5jQpU~3T@nPcB{HFK{29#_;uEqYhysFJH60IugKBTqd^=@0L_?F#OafQxF2#v!58vK~{w zI^%3AydTe@x|=@Z{FSBCi4#$VYI3YbS=yEzxAzZnW0~CYR4W>Mb{l7#z(BeO_Yb1n zm_(`n&_m9Gr&ec2FTU;zo;|tP%Q1r06>>>&Um_=S*5Jq92xJD;`0%0c*xcNSmxj7O za6)uTyWTZZT#<^F9c_2+oWEFT-}#^6v5xF?Qc2Gi@{{@aTz{_F7L$FMRL18^r!szq z2MbEJvo_1GL8nw>ZZl^Aljys@X1^rxKoU29Wjr5W+(Erzxm)Mw|oq@>bBwZTvIc39Hru#iG z)`oRUoBr2P9j{AXIuxS;wWp~IZ5`DHCtJ`gZPo8F&Z#21fT9IGLzB=YLYy}C22`$Fq8vR!+C*s(%f1C&%|;IjjxbI~z@x@7%rd#K zbbKc+ff2{pv5X3L(51ps-#D-Ly=ei@)YoDBGZ;6^OPQF+jBwBVS%A;erNz2uX!$&p z&sX$&bW2W$Us|Yk7>6=6b)uv04^WPuW^gN@87j{DxIF1 z+cjYJB~%B99&zY~O|$9D?4|=l-Rnm>z244|_1$YuZe3ljuHAY2=80Pm@2-}%?zwSr z&z(hY*U;+D%PiZ?@o%8l{R61I^)MWBn@Jewg?KR}vF^A}U@SgW5U$+rt*K#aDCjjs zZZDnjmc3CARGeXc14dmh8XcW+)ZnaU!I#95w7Q8FG=+}OJ}qVgH}s(qImPh2)~0#J zr>|Y)UIH87{p6$M%c%36qq}Fumr*pr7;lMD7-OUx?z9EG z{{mlhM*HNcxtTubDX7&*?e4yZn`2%^G)WQF)7e>7e|p!%S0CuxzM?-6=wGqDZ~Wl8 zkyvbG-NA7XGOoDC&Y5|UW5y25jYOj(YY&X>c%fE%ar=r}cCSum*4*&m4x2^dRo)Tr z?HIVNZJ^H~`5d5hnw3yC?CP6Z&3rXjtM?|-joZ7g{*Bcw*%(<=JGac(JW6uqMEAEa z#>mJid(>Sh6kJ(3s#>0uL*azS8xIGaPjZZCHuJ8i0$8dJ#zf9)Qi2K|q8^S)jCoKH zMqAiBjEA9&U@A$d7mRM3$eHA@4->0K@KBUtp6?SlJgA!+#K5(cH%YuB1Qu5`OT+P9aM#@~}brmm-D z=JtjJxA`2R5Is!;8(+Jb5n(xWm+ zV|rd~%S-33r#!}HGvn-aV{@7DcT5^f`>1I)I^aKZ?RUQ$`91tw{Hn#94k>YeIOn(W zd~RUnk@d3&R}CZt-jW!qi&jsj9I*VJ<5qFp@7PP9``qI8kAAdTTfcg);~v4hHAz+p8b_D15oTYo7t#Uj`@vyysh} z{_1K#Lfg89-Y4Bvl%U_w$bZEY1caBLOKXVo+stkcjD=H;Xwb! zhjmeVcA94B$P|h2@38e~U%=CX@)XiFW8*9ve2ng~pnnNXcZV)dtZ5xasc|keQZ-xB zs~ehh%K&_m1m#H_v-kjWcJYBxj^+LN?zy3XRb44J%fSD}7azF5IKqXfk`Cr-Q9I^= z?D*t+{-oU&bUMtEWxO=^)E(P=%wpHBSZr4p6aUuJ(L&^Z6@48388TMj9O2-q1!f(Qmg^Udre~7(Ha7cKEoN+(*qH1FBF+kIM}&ptr(k+uLe8 zATJpvL{ppa7%HRnK3U&i_8iRPh%W2UgM?>9qRe}|qRW?K^y}hQQ=Mh3rQVCDX_B*} z1$kN!p1X34PSvOzrjRb*wl3gQjhbVvsp1ru*P{N0rExqSzR10l&HM>1F(3FrxbtnT zXFW$DqT9 z#U@Yy^*^=u$9Flh&pw8sq$d}v)d`DB$**0}rye@c?hK_n(&<_@;lm}IZZ zVe$m+jKh{o#=3l2H6D$rys%Q>2i1HmA1nEpq%{7dXvCZ~o zED>+!7C)I9ALw*dPfcz*e|URMatPyJx_fx<>XA6h71C`gT5Gb|Qs_g^-CwwF{R+<= zcyXkCBp?S}sTKL+Oxo>sM8*ofp%tsLgdxM%KE}PqwUa~SIW&jz#5i-iL1l@dOzGQ; zDeuA!>sHN3D^RbjvFCLw)!3|*Q~4;Q6CW}|v{*2OxFGB4{rC`cfMBi+#(Xh3V564q zuiuI1lP?SR2>PFW!BoCK(60XI$%8GmYWdD~_PeQpY&kqKIvnbCME%F#d;9v{Hbrnt z-mLq7)Ab&3l3dljaK%p5U0u~(-PJkgo(?lT(>*;o@1)IPHb-rewCrlN$^l7eQ9we0 zv;u(yh#(LkK-faa2phvQ=6m+o;D9{_gP#+A28^Gd16J?5=iXa2JuANbsZ?if-^%x% zd*c73CI>6>@X5W)>HMzamu3g{%#TJQqw{+Pc)?c$&|QmVXwURuI6OGLXK3c)v0b^! zk(-}7EQLI7&h7O1eEDqNKV6>9=A)aoY{}%ca>6b<9d^6uFCfV!ziY=*0vs%xA!7Sg z5Kk6CW|`ls@w^LS!EXlHe-R?YU*%9A+|TB;T09)*jYj)=d&3N^YxQCNWxkC#NSN8n zTxLGcegNQ8NXfuQ&{QRmF%kStKc+yqCE9S9#V46M{yZwBNT|!mDu@S0O9U@105uz- zy^qn~a2=RO7(d!_XltTv4sCnTb_#8`qV1jd1|C5NJi`12+P;l8S_kG4=5Nu)9fFu# z<364>sh224Bf-HE{}FV{FVc9`US@=jI1<6*1iTpfC?BEG;P5Emy{vbsCPpMyg3{nN zD$xiZqw>Ti^9&<&CGAx}Q-)VyT;&+LZWdE_nQc#*$GvF2WJ14$=$C4M=FyFE3qAoO zOqDe-r3^jTw=uw+hqZY<62WUaC`})w1*6g#(S=o3jIm~Qq%jWIC?r&<*Vf-+|H*|$ zTgVn2tGl9+(CA>*sYKYznT1-hu(Q_rNP8jU%hv|8*><&{c{0UXtY@;>8;R7LlNC8L zT4#BiETtMrB{|sW4F-D~gGtfbKe?r>#DbYty&Co=f*#SE@JO7)5+vkc86gV}Qu11`#sl-s^Js_uZp~XsND&?Q~vKU}F)sdaZIX#lIr`ZlE z?yn8(D(2EFP4-cqZ*ioQ0*46heh}+%^~BD9XfeN=x66vxWo4b3^WQj}5QVrm`{C5m z;-;8ead_g{O5ESqsB1R6$Sb_)%T49Hv4Gd+N(H1~EE|Z;{z3c9KyDxtuz6En9?jiE z{?u^$zNP8|Q7tLCs{a#XcA$Iiz{yTgR(`GKP_W)q|93GxgDuuxEYNt|q zXbpz#9IZqe#j+!0&dqhzErlToo__F|xOqq6lrE zS_5r(+<-Ph&QvD`1WK!dlB1eNgYmS}~V15DL5kNQ&>J(@uRC^K;B2!AOkg&``5;f+2L^Oq2q!O3~P!g z*=&hjh0>0MD?Q$)YNckv8QZ%5cwGwXjhk*fmVNW*p~+k%KYd+vU^$jpL<>qVs^$__ zp?5YKo$XEa$IDgOU%O%k87bOQVB6w*tf82f#|13okWnYyG@@e zWx&@$nixzM0!fVEYoJNd3UUqu8W7Z=A(bGm7}Oq4QY+je(zGp6($I4TSw$AR~_Elk#|E zaQzz%KL+wwcZIv0$>@#Jc2?8YvmO>^S}j{tAEVY&?9X7m?C*9)$o2-uFChLld*Sf5 ze16;E3$tVU$MX(Q(>Pai`DkGebZ4SjPdMO{fzKdl zonJM#_4snddW=|J5ciz{H87MPAAL_i&-qZh0!)0DGLQD$gW4D&fd!dGft9F)f=jnEq+ z)hbkUr*LCAIz`|Dc{;i#R*Bv=xkmn;p}#L-L=eJf)Gir;H}OBl*`(Jjo3f#@$%ZV+ zjY2W|k|=Hy#Y4BHy*p07t-9sn_NK?dseK2QS(iG!t?Xj0omajMVJK-Y&Rg7exn94# zZM5^Nk>&gA_4_vSyq5Cf>LnM^6|cuVA)xKPHK+)LHVhvhrWSzf6~mPRC49aM%b-eFRbAGabZ*lZ+$JnZLCZ;)cG}Y=LV*mKRhxdeUr#hrNO=gKC4v`2{3J0Y^=x zugUt|5JQX0EspUU3VTO4R`Btu=+CYnNxe|@nkqk}CK!g{z$Y^hz#Hto`|g|c<)AusFi_g8Ig5P*fk0n1@6`9Od&iDNanK(hOvn;%vk7APNff({~*-f)XZe3dMsSNns1 zPfdBDinr5Z4QQRedSRg=f_NZ_KKV<&0ZkA(mtRVc=+KC?NlpF_)QHX|*Rt=6v}HSB zs7b*!hd5xGaq$2 z!?{*b5d6u21C3}aTc4??T!P4JoVU7pnDeTwO$CMXaRot`6ot;##$r0YrNMqt6eb1X zY^s_J%A#PGEJ=6go4kkj_wAnai&M7@O4iPQrsn6yLjm8|+;W0{YeeD%*Y+&k8;Jymm_Ftx z9vaYka+TJk0^Di%IY40q=cu)o&mtcpqXp>xiu zB>$FBaWbcH38AE z(yG_mU~wgnGc0@fZGP>{sj&k{#&l%H4ovZ)R+a%a%kX%FC+C`72(B3}uk5*5-FVBj?1jm1z z1r-Q5VtFYH3{AFMJZfk2(%V)R^WK0x*xwpSB1y#;S3SQ#OcP^of0<_Su&pW|!jE6g$r%nEaiIm`Tr*!BTE4%TwR%{;pX z5nwf1qH+O*w>1#<7MKa#(jC#<9g#ettb;THZ3LLY8Nd(qAlH_a-gp_%0hNwWH_CSOwCM&6XlL2+KB##H!QJaZDqCW zKezk0u&%%Ov-YPhI2AFvZU2#qTe;v)rxVUda_<4X6hg!9m^K8ta@NhQ^z7>tK3 zxA3*y%6jY&i~!i;5}~7WbTF_-@!XQsw!DIXV}jc+~H&?#tIg35jX)(TSsdR)K>p2KL{o^=Enf;yp4+AByk{4 zLDxZS2K|zFf5A~JQlxnJ#mMr>qoWBn-vMCUYY^QDD&aD-mqvyfM*()kA(;1or$=Jm zH&c@fF&;|vw6Hf)Bmf;)G0laQRX8W?9{}0h__(8tIKdlN9e)na?Rk zNlHQ+j@l1Ug$vrgjP_ry(QFAYb3iWVv&^UQEf;AH7)w`=3O3-8+;o183_C++c^1)6 zp|-QwH2oBF7T=_wQsj37rx=bauaV@|vkHK=LHg=h<}iIkgIYAH-6r)mN|7UPT?23v zff-c^xXH83Qz}VTjWcCTeVN_?WL>0v>RXUPXi$j}Q!?Od40uUp4nQ~GSii}v2v}vi zBlWpo8*1MzG6DFM8It9@7D2l!8Xr2dPp?ghA}=~i^@iV9t@e0C-Vtlp*kH08w6Cp| z58k@9Kj5&*A!nq&lC&!kMOIy2O&v-9(u3B>%2aaD>iXo=rIan;kgZ;4xPQ;A)t8Co z>tQD^r&LKV&koiHV>X`iB#`{?wAuM>rxHFt>THiTSEfX7Hr_jwR&AlU6s&Kbs<18D<+_G23}Xk7*L0%0uNqZP$bQ_OWi!ZbR}`&dsu^ z#n}19VWgV#sGKV^ z)8;Lbqi-l?V`c8(oB#b}FdL6~*#8|Zr~=Omav{;lWXH?fINPP)diL#2uS?9IdGZ_g z5*Ci6ub#1T%qelQ)8bAJRzVu;L`UWeip8lYij%d32YcBo5IxYi`f>g%d>v`{evA>) zMr?Ev@sH=2PqBXwdfF`I&+lUhNSIEOfrxuJ0)R)viwy>`H3Kdd#=tD|uxcc!53dmy zG0*_ek;b3ueUvvhx}<-gjUZES55s4JJ;dZe5(F4>A&7bkV^4#TZWb$cq}A}efe-H} zy#sJs%~Iv>qS_fy9}Q}Y*&7rWBYqqnid1F-r{@qw zy*O$fb;djjbXfz^`+0>#-rhs$`&OZPjM4LX{IF>J8(H=w`I450CBcS#_gc_=D`*tk zRs3(={EdW_TwZN%kYtQ9F!&l^j^uqL&6q^s4$$(KhAhlA)q1ED>i7J@EsHK+La)S% zvNQ5~zx7*#U;p~or@$wy7F(NY+wY2^3BgTuUSXFzuXMg&84m`>D`@huYF<-#x5YZ1 z&yNp}picQs^P77(kKD7I=9o;6TaI~Ll1y5k zVLsH(zh58L z>zDWLt?b#u&OotBv3+8>;ShP*F1T$!WoSWtdW6m>TitFsu@5;8I?p-alvodk+*P zYp$((%KH?eZ$mqH%nx9u3j=$F`Vx1U=YUGHMy<5dsP!QJ{Wc~+eMEOFB>U<%{ z#*P^Xq$F+Rb3mNe^UAsx|MG^{Z5(}@dCcXm*A0NKk0bhV`s%OHS8rsR!0)7RH=&=y zFU~mArxa3(3$Fee_}J3EhB4)_dlfCW#%jCnqA+7)%~<_w3W%y^SIT#?hH#1$sXpkC zT(`UtzC}Z$d3r{ABEyutfqfYkIK;iu+`r#*&oDtD&<83#EgjNz1zvCURGM%8NqjPB zbvh4xpkbFCcB@CO7K`mjq+QI8=lj)SR1g*fAvzIN0-n}Ntgsx5Z?1A*<2h$)q?Zks z`a-tO`&^Mq!WGxj^{9*IgXR9&M&I;6?W^VCP-vut)NY>3PK81f`RIt>KO6%KohPa~ z1&1_Mtxo;dGvBsHlSy}G!Ur0gBZlbQs0KdYhwX~!)!nvINbx%CPL8w7Ul4?Gk@b7=F@7ng}FOc}`5{fB{Gw9`>>O3}e{=~t$QxOU~ zkKMBLcO%PDNL=GOzt0N;0-uVzT(LAJ4+=sHJ#toei6DPSR$H{s*0N#UFL?C@{tx(G zG;$Y_)b(~W4Zp{J3uK2e>Sa7mb-zzDCIZ;DIz5SR;Rf1_;<;dD>p3 zD?ikk?>CQxUxw%}kjC`^bA5*@d1K56sVrbnPoR4sI^>hI?N#Q}ms*c>g5x6}z#bSFpmLyE)WkerP@vEo9&<+N#0tyQm% zM#5v&%6z;by8Ow2AS?=k97$w-a!4CLk{X;%BxVQMpLqIWh45hLWf?MP3f@#arrs_p zXc@2Wu9qS_ABd?kXR}C3(3#0+WxFC-IYsZh&r=KxC_%5=%4$lfrzqbtx)=of%fzWY z)!Bi9;%V-^cmIv=SV}si)Y1bttlYM(*AqQ7yL(mZi%S8YuU@ZsN{WQU8lT2}0m(fc z-Hk*cQFeOWc3l)dg=CmS=2Fa0AU9E#Yz-oUfXrJU0#aI(a?Ld6)FtVp)`mrOnB zvx^poVDTT~1QGm!582%=NmL>#C)icFeW|zax|Xa;4vUuZaH2z&-p>gZ!4s67x#1n> zQ^V0hY%GSczNW8!oPU9D;Eiph78zeRWcYx(9=pZAt$f>fWz+5DH$UMFSd?%i?sKI=!z*De;&rk=lNCvm zd+z$=_b+pP-@E_%rMr8yaOYn@?Q-Tf4Y4jy?{Ez2g6J`qS7dM7^zdL|`jPfGq>P*$ zX$_?uGB^LpV@{{YJ3HSKy&S7(iLBc1yZEsjES_Rk^oH39@ z?=y)cha}TP+Z@{VpzRdeZbjQW(e{3{eG+ZIfwpg>jb;oanZHFFcZh^~?7%46RvKyq zxp@RO5Dd*jOww${_Byx?2mlLEpXv!_8Q&&Ar-^G2AF|AxP)V$DnUSfz+Mv!*3Vmys z_eh9OH;FaQv_R9ET=1!R8kcVro^ATs4fbRM;3dZCB;k&a2;y9)e-rw8`s}tn`TWjp zvmt^1SJ7^>@`77W`20)zud7)kmsc(vJGv+4jrm4ywzb(PPD4+l$%!*?762zUn(6ySU#Zz;;*YRh%ZNxE2WA0)YhlM*R4U}|mx`17 zN2EYt{Mc;SZsjE{uc^G#D)J&9p5MMB=MN~A<+0w*+muW?>9V<{N1}Pz7WC>`ypj$( z{ezj*h-R}lyvcMvSPcNu2mAEQ+wZz{*z2(XU_hV0mu`6H3)d|?u_y{G8fAhvmaLV^ z(HlSi&O>3z@2#A_`|@8qQ<<#d)twJUdQ?|H(uaE4ISz?kGawJCv#GC!ikXyF_NCH= zFpjST%;gkfc>9^-Y!Y%Mx6p4yV!UN)M+ewW2<3-xzv3FWj`BKV1WMo7|8jy^C2eQzU?KfOXMunJ;u%B)~f1r;!d2N+syUTsD)$h1lE6I}Xtwnp%F}Fhtrh}NT`GfngntAI(`XJ!^M@4K@2!ov)OhE-8cU?K-rRWdo>Na&s~J9}%iW+d8m3>~1`DR56_qNV6?CC!~^l-EJ@FDOAmXTy2 zI}cnQ7`S{OF*Q_m@th#ccAl99HQQBfPbJv@tnN&!x@G5&Zga>i=d|&zShMoxMEQ90 zcYn$LgclIMsZLbWs>9{5m+!)V{}y5(T%a2Iz4UZ)c_lTK{i9Hy2Dqg#7BW{q!GDvF zA+7p6^ECT*2y)}8)$LxqUu2G&!EO+3V_gLhNS@}%h3LX?FI^N2#06-F`YSzVPX><- z2(Kh91e~4x25D-L)&u)pYs8vvgjE9l?ll5_bTbbB<*8@^*MwC02WVcvqoBFtgo7G6 zw1|0xiYz^A;H>dvwNL?!}BBP#&Mkc;MEuTFYr@1H*XhO zxsF5CK6aY8P$Bm49%VgOAMkdC)pb~B*ykw@J!CaOJOo51_0zwJ2?)$ZZ3@B+zwV;F zcGEMg&^-ZQM`M1z27C>IrHop!d#QDbjQKrOB_u&pBt5{jO6JL4IuD>GvPSntDG$L^ z8wm}!3%2J7-5b0YKh`QazfnDV2+fpvs;3*&8335Y)D33a1xgVQ5btXYv}hbO&cUX< zwY!PfhsvyPqrc}GICscZG0F|GUHZQfD9hdVS@h2{u`-mB9MSr0-}cQO&*tsrkwVaJ z4;Dts?QMf8hm;-NKk>Z<(V`VJM_$kD&1eC)o%f|>h1DDp39a;>-Q?8tm|iaR2Rjvg zpf~T3LxE_eSO~ZxBXXgq;wxwORloB*yZfPseukvECfeSEvD6=;e?1SV#JFnu_VW2A z`&eQ)BzY{+i*xz@Ldxfqk@P8vC0$7ctM7Twq&F6cX+62oMCbnWjxAFjuP()!V_OD% z{vUaJDkV=Xx~~s?`RdgVqcy$+6%)`nJiZ<#e zjUnLx7-0;{0t;x{hqkk5y8~^HpzRs7y@Mp@4d9i@9C#2e6gz~wwm zX#-Cf`WPvQC(LV|F{xY3tHM!$O?Gb$tiPnS-fN%-@Q9^$OQ=wK81veJu9ygHwV);l zy=B%EGQ<9@ya|gz?WOr^4O*7`M)U&Rukr7y-no?D@nGgxHpB`QeQ?uC)8Y3&_)Js~ zv7f;uj33nmUJz$H-#b4kfH=xne!y)IA3-1hjzWwB)6r65G^}HKjOOP0H@D=04tcejq=5W0w72 zj*LEYDPCC^>GP{WZ{*SI<$P z?tDk|^ISX|8EN;r6-}0hwjORoe<=F=fl{&HS2SDW-lofC6+ORV1HRm*f~qP`Psy#1X7Cg)xVORI2VAdq`O^viW{J zk~LAZ3{D6%L9qaBYn-$sKtzq35Cczk*B=+acVJhgOeVfpytM0qe! z89y*Pymw|G5U5Y>o1EA`RS!Jg*m~g3!+UQ#ysOdJbM&@dhwnVFmAl(8)%qq;mj-g#STG8CFDEe%$^WgSN(==G=+Q~f=~l(T0#6xvj=2;PF~ z=AAYxx9?+HBo`F!7Sr+OnT9CL82RBdqA=Vz*&E4S7>G7*sD!n~U^~e5jNCNJ3xY5P zb-LT0oLAQEu|wCNuS+gbaM>){$tSAzfR>zI*gh=?QzE~8akdzrN_76TaH6;OM1f6g zzN_D@+rmo+Pq$D9K{#}MTofePk|VYn(yf{8r}u%=66OL%?+f z5210K?hWRJc^biV4v*%FLbTLgGz7;L;uasSff=fo=A400L_%UN0&oeaE?<8{*UC9h8ZBo4^HEdE_OzI(%dWuq*yO5QK zm@eYoGLEQr!OZa8wG!gk_ST?uJ`Rb%FxiDUs<2fH!-?uL(#b$C*lVjx#u z&h1irDm`j0(OXEWiY;F3i>PUDsIQWBNl|v;_mJo=@NzI&%cL6lxEpaF#G^(;0a9~) z5%7))NWg!OMR26&MtG;%HypDIf)??~V&^CzZvbk6B~Y2|lM}(Ax>}_ik?@9B|en&1mOOluSDAsOafv$n}PAcJG-%)gz{M?mblT`Zlru{^r%h zQi&A?w-O*cUf})n6P=El&!?ON+2t&2SM%AF6T(#-HbJp>o=-29xW`1v`QQH;OlU5v zHyY+qCl~j=-t7UH3-14G$(J+zJ;m_I;q6<>s%FhhFRTn!_U>4WNfwTk-+bMZDOSU! z%9b+l+|<=8{I~crhMaknc`x%3h^dZJe2)Q|HgKGZM4|}*X)^&JAvjE0BZ;;~rh5qe zdX5e+LJ?UE^p3tYP+ND>dZyE6&%I{PoeGJedld8vh%1FDu!ABZ>a@sw6$_CY!~X`T zR0cMFBRdjOH;=E9y@4ja3EwJ`oVsjr#v*A{6UF?~+ik*Qaj>Yi9xUpmtL8Aw0|MmF zX}T#&VXw6AZ(<#n%Yo33{>#!aD;i^$b9&v1UGk`!CsIsC+zwA58B7goHoGV6*CgI4 zoyiaAk;z75BBD2Qo2Epue|c)MDB2vEiD+M8sFG2XOl7F>I1A=}eun=OO&7->0vdN%m)kAxg0ko`}DB4kZ8mtNpY)A z)#FgcqwL!`!745pmb}h~m5?5Adm}Q7My@y^qJI-ewCeo8ANK@RCE)kF{km#(+1S4@ zSN+lDYRDmS0nU}1A2-U(w03No%rBiz^eLNFCp$ReRsG@q@og<_a@VPLOV1>eS~)jW z2zX=Ru$m6Hau9=Y>FV?R&D@(fL#K|`+pWw_)@M}r16D_@hb0R15~esHkZ(r>Do{zc z(7a7a*;pjRNTW-kv-wm5`>{+lV^AyMJP-xGSs|9BNwX)|7Y#e(HrfO1jd0%Gz?E?k zlo|mBg_sV=NFSrQ!&{g|h5)n`>FpD(c_;Qz!YwBlH=ZUbN|Ev?)iqMvj4U7BHPpbn z#de1n5|0(9bw?tOvUyS>l1;Dk4Sh%O1ba7nzRK0#GjkuwdLu@i! zZ6}?-{N*n@x6g`LoQv+t=5|H_Q-1O@pZN?c-0<3%tlDCWXC6EHZ}m|f98#W0G#PmF z{h@qV;fraT9P$3m4?g|r`s=TEY^kX%`!}vw*eBu&Ikiw{G(DZ1U_C$nas8LSWDx5a z#8`JtB%cl9OaRE%y^nd6i-NL7QZd~01-6;8~nNv zEd;{gqtxct?t0-y)IYRMtggEn!NNSh3YN<#bw_SSSKdVzRio{YdCn=!ra;& z_PT_ghNNxYVYc0GQV*dgY@3d&$6%xZF8h9rcklqyjTJJFBwP~XH%{%5EX@&Uuq3+QPcrLWAOE}6eRL@A6+jPXahY~)sqKf?77s1{P0#eg5d zLbq45Zm6FM5cOT~#isc)xjxb8X(-UCp2qb&8|=yZ?i+Sz0*R4EUIIMgq5CFTjti#b zLb6rO%EcX;Gg@foX7>f8RH^!RmdD=7F1-8Qo$GIp-rU?#7I|BIVvx1VI41YA&fcs$ zqNl16C*(+_#`=rSOw7&6&cMU3*)%;MmG_OY&;KX;^PwYUaPTXc#MOLBWp|#jtNy6Q zx>AL>8XR3ZILHe87)dD@139Sk!eaX!)w|HY>O0=SJ}B~EW|8bO*w;CmD*A1#7SSx6 z91ES@bhd#M`o!esgCoDPJL1;x^x~Fmz$&;!A+psOjVD}!fbEo(tDoXu;{gC<7p^w< z2=f8vH<>TOfNPQ{n~zgIxElxdgJ+He3Mf>3elN{VVbIw7IR2iJN%>4FjgH<;Wmu!F zNhzXFPp*O$-uP`VIy=dK-K~%!D_78Um+^1Uqbt4_Q!i7>tn@>~PYPkZZX|*54GemV zLz*D7`!3K3kZ*Lm0Rz0l$LZUYQa>S%ldn-w|V$i%Rhw>ttOQ`2ol zS6o)nAzF}zqh(ro*6GgHVv5LHEh76te~)HCBCeK}oU9~Rtycbay*}H>DT$F`CRs#b46<|ViHeP~9+mIg-O z77L{Oip7`oiL8>2`i5ubQ-Uyac&-(*f*D*AytUo4>?Y9nrXX`y_Q$K)H$QWYR%l;W z3W0d5TF8p9G+~|a|AZEH?=MLn`_6A(kldgXicEe3h0B?Xm%6jU)o4G3Xfn7F2s z8~yfckaqhTV=SA>ZOf<2yHke~dm0&UPo?6GWVhtiv^&^a$~avCR++l1TztpT>08q2 zTaa3v%j=58K66_-ecMd`&go_#I=tiJZjY|1oGQoNj#RP7>+nhJmgs1#FWBnu^$w$P zckrFZrfX@Hb4gNA9y-qL&P|4@vAIO&mx<|UpEI7ys2`ty@s#WlOZ!)LW}NaKi#R7* z-T+H0?a`?I$)d}q~l~%Sx2YsHCq8@V1Npy0NFcX9yw=H z%O-Wiq)wY>5S8_6FQfE<;A|Mn5C_dC@yOtR4Q?%su~i$Y!N82T7?VljW2uubm+v+$ zlNjErQ2<+~(01&kbFNCwRi9lJmDYmU2J?8OP7w?}OuKQ|HeR_Fo+M?^($?@@Y ztR0CpLvmh?HbTjx^ZVZ0NG=_@{q|To)SrwNqI!<~3a_KJGZ-DqtE$ai>>Z5B%I^ot zg@RtG?92YF^SkUw*_YRQl2Z}EGA@dpZ-KLLUsTU~M5~a=T9t6bos0%!a!8g!LCxZc z`By*N(K9KMXL|C3511OqdQ5=V)7;FQDT-R5)UmyxVHg)Dadjb|c68i0-%5R-I z(>%($nHUN&7*MQ08?ZypE*%H-9RSDjDC;!}z^Ue^Z3QZf8OSw26SO2yMNTq3c)-9J zZ(Id%SVBWhvh%d}O(1_lnk}Hm5>Q2ATP;w{hNpUak)8yA#GGs7cEGjIE9-7bcm&85 z0rX8HA1#38P4J5ssUNQo3DglxjhWOoliEosVjVbw5%G=R&eC%bU8ykuxE5(&tJ#nK zpN&9^!99~^jaVa<12Q>`(cLiMmh%S47o8Yn5*R@k*tE)}kVy8oogZ@?`?H_3?7y&O z?nj+l4?NTyeDEO49lYFXT|T(`+|wzZx1_IJw0h)VGrs#{hg2t*+r4eZ*Vvj2&+NT0 z?~332@<^mwE(PNC{Y|IG`nD@+fVxRPcQZQkm3T97?wsCCoO>qFA3b|E+8;Rks31v?TJv5`TAMfu+QUUB&XwYQ0&qh=X zpA9_P3Fc!|gCZ1300BL|A8SdVsv5rlD!?+9T#c3$`T*b|-$!Q&JOH@nA@iD32m#&ifnaFEHOA$nNqQXh=8EJkGn6_5ADm6~n_wXaZvJ;PVw)TZfxlhkG*P&zQXe}mKP^P zTnaT-Yc32Wx71U~;qdog8GP}@&O=&XN(!mDb~)~>yS!e_CD?2Zw@b2aX_uP%WM)gx z!((dR?M-lDQu$m#=Em+AS zq1-PDzTQgb+n%tdSlwwa&pI^sOl?`OUiZ;-HO4BzR6uhg@rCslw4xl8e{c%@D<3)1 z`Tf*TT-I#Sk=b2MB+3Y$fRnd4Wa&Z61jk$cmgDBnmV&vUi?`cDQ4eQxhqK(6Kby|_ z;<-5_sxq6dKEr>MA4ED(hPlM1!BTdKy17MaDNEv^n^88F0pjQoHtO4~+sO!RL|Z|W zeS8&E^h?yb24&ui+9*I1U^;Ttt!q^Jfy#Rs6E`DG?G#&SfWUDoqm0poOR0h0XSAjj zf?b-eL0EEktKoA88esiqF`VCVD*K!?`);MT2o?&X%H2G^RV4dt7_y}5II)V2vT9oG zc6JylpHa3Bcs{lmlSpz{9M%y!$cobJ&vPH0fltk|_GGyc3N^|}8^q%y<>u?1ajO;x zIo)A@q&FY7Xj!kDbqfxsD!pysXgsvDf;5})>(l8QCpoJa7;Fy)+Rl8nKPbg3<0V%( z(Z8*owJqG8FW$2#a)WzPlUerjO0k%BV%3NjI4M~udpl<{Gs%fQj(fAiu}ZmK^~!EO zxoz*!x?Ms;(8fuDd<+RS95;JM50Y+XkhG%r`u(k;p-_*fZ?GLoPt7d#__}6);Il76tlldb^q*({(G*}}fUO?D3?2V9Z_#G^(w*&qtk&>Z# zcMYW1S!%cH!>8)QLlr^+D_H+ukErXz0}~QbD%3JiG^tUO+GbM6P3ojcoiVAKP3m?^ zq0!OpExiU65n~5gyF-H0MoI|a2POR*O3Rby*VsN*b_OD$F&uVc=tvz|fAIP$jopbtWG@_t)u`-#?K3ab?TgMAGGvoi<;+HNlRgw)PyG zQxmD2uBu{UeqkZ$bnu+YaiOSHT)w@QDu`Od>unVq)81^9b%!(l#AftWLswts|0iET zTwt2n$K1<2!F+)E9rmxF*5KFi2M2xYG+HWOUISV9H1jh4C=E)z%6wf}52ZPdjv;k( zPb&l%;7X0qfTHkR4U!MP-c?!mv#9m6HIlbLN_CKSf~!T^0cGJ8dX`tweVjr2-$8A^ z1D>iuEHk{ye4<8Bm_gtMgxcpQh{Y?+*YN&k>WwA24&YRCQ<=btej#N}J!V^oQUv$` z3Z-Xigzk<%Dy_k5SfIva$doYhT^5w}5)i*W+Y?@uaSeDNLl?ZcizfmNMYwOTkv>NC z&ofwF04u9;2Dlpoec?I!DxvLVw11i2IlR(W@T-HkdS16+2FaRgAq@lN0bAFaZza2D z3kimPOB4&=Rm#Drkg_4JX`=;AUyqqGtRm~cFkQi}>oEH|_ovSM@Qzj@P@AnMq`-y4 zcHP_D(#pCdPV5gjMTxUo?T1ne`chx@Dq~SK-Kix#;hv=5;!kRl#btF$PU~-Z61m=V zx-Xyfc#`?PbhvmpjaQTRK{wBfG<<%O@H69oX<_C zVrUiO#<9y#V9S$|z&ixa>zJl3*P;CwI1|Sx9-qLpufD>6o)2UF;%VktHVOha(JT@a z2E9QAZoqK?*8@oWB;kk9Mrmpgln1F83`Vxet|~)dOb$d8i{r0 zPU=j$m!`Rt>BYfX0{#mp&LLc3Ja{I6CfiKcerau<<<6VIenwnxsvv0}IkhQ`l}p&3wNuNr0z?0Zkx+ z{~u|59j3ZVBIk%iUKI?1oOgA;%MQFAs?=K<-s!GAw0+m`Y=ex5I3T9DKrNKgVexyHGyL7Pg0FuX@J~cPolW_KLkjJ+Usk+Z6 zYw>7A!9saT(^6Xf#^-+W2_%x={Q1kr4UxPjg+%hrU*HtpVu8YHKF%shI_m9|(4xc% zylCMc$E%wl-V0V^Um^OA#2}JvJdtqJce#}Yndx5WF(C*Y3kc$>JvzE+_Xa`yehfLx za+aTP+~W16OphkYND}8+t2>n8hOj7}EY9XZHfmn|IR7Q?pO^?5#*55XK%Eq5s3|G` zI6~9l;#3xg5o&<^g6Gmmg9F+qtphUv0wI9mH}SAbP|qf4xyx%brx|ijCb7klc${4{ z2sc5a4_)S^U=^CgA+sbY0(8?E+EVXrb>)^|E^E;YoP94i+Q?86k=!h-SFmatwRZk% z4udwNdxsM7;oh_jeTV7)jsA54je5!DXl_1mcz-st@8G_LhTWN~_Uf+E_8Cr58dF*K zh0I9$pCgdJ3Ng!^oQnT2J(gNxEC0oQ8L%8?Sk5R0#j#LkgnRQ`rV@5?{-W2;xf22I z?Tm%VUHu^cJA4a?rM=7mMwEL7ENvQ1`kA6CNFRdI+wH`reDDZ;nz# z@PxFUe#&q9DZhbsQc=w~X3;zb&UqW^b6bt{e>?3DQ~Y6NT?q&Ju~ibR499%PsO+j? zK>hphjqacfa*$dkPBAx8%W@O%FH)0?6SbeB<`#`nF$KBUqx6A{woN9rNGYTpDeDHn zi(NN=vFiqbhKv&E3nea2DS!ikxYS#$$UH_h+!#;{%Qc%c0o=S@DJKRdlNoN0!I<2p z@QwYu7LCR)B&mPb2zVyNQ`ol3dF;9#+TDRS$6*SJsPCw zvN^ps;PTqTn|7>}6-5+fk+X-Y`OfW!9#~l^udJ{S+pKKo+uLtDvA0)t@%8Rp~nGT?Mr(L{r;%mkf+)AhaSBk|#P ze(%2`6R|-xlMLIwD@wBJY=zRcm%WvAZ@Q^|+c(`?J=A3X__zNLe1X_t=3t?nC=MvW zP)xfN%!d6Eyzr-*vmpyFa$cLQuOJF@_BVe%dOV$Tl^U(^4}#@#B@`Gsn6lQlR?@Yj zdA(=fK>pM&^nUD2?dr4qS9uQS0mV!{Hp%>i`!{%{Yxoro)9~^(#b$VbzS?i0_F?>L zzf~hyLh$V%`~yseB9(`XRc8&+KS1;kaMCuzJb;e`m1qCjI_RUy{D9(I!m+_MVp)aw z7zmf1pnMICGZ6Z*YZXGSzs0aLpyLM=|MHUAb}yu-W9qU=Jz@5{Vp5+psTWP^%O>@j zNxflGzq9`I=uWI%s0HypU@Zm zB)T+7q(4r_^rLux1Led<7T_Ip(YL|xRR0Unst+pqjl{3?P-?wUS|43n`smWqQb^9p zPZW|MYed;hD#Z8=?Yrro^+}U@(WGA6aGp2NdEThOXEA>Nj`;@u(0l`M*WX_ydomcwQ<2X@IKlwby51Ou zLsDnGrf-{;VQC>TCD|A#bG}C2*BD4|D830|GOf-AaQJ?`PqSLEk;a!xCoNVi1h4a+ zDj3932czb(X~wZ!16IVg%xIx5*O1wSC2YVM#mg11b-u}t!uIAXy)AF7uryY41$8&; zl5(*zk-yEw%C?Z^NoEQGPi*;E#2Fd>=to)K$3E8n82Yz%?3sbg^2tYz?t0+#j!g4| zhaNa8AVJHYibmAVPdy=w`=6m;{&sQnG)sFIv+i`A-t{ zY}}nbI^Mo-S#pYpo*KXS0`FFr@9Yayb#xzz`gExCm;TX;E#S(v3K3@rodGRFcFig2 zYB(S9+FCoNN0PAm)h>>*j{L>!xpF$9diw^NdI&94JRgd7K9!#I4$G46l-w3? zI+N1@P^aMYX9JM13>c>0R4zBxYjzovIU)=r3H+q9(+i#pd za!;mk=i%?I!oSZc4WBW919jykUYIb#lqS$HwUT)-b6(5}04>IvF4w1SoiGJ$`M)UNfLzob^d;bQcKK7FeoagY`WzB8yDfM<() z0q(-c8WL>gSFl04Q7xRRtcmv&@ZoDlUHBB7}q2x;OsRk>wfh7 zuz!|fRd(mulc@%)&x_2nG{UApv*arfCQMDrMqAUQ+LR&+HH3B_Q^1Zx>K7cR`wLw# z0q-=g@d(62Qt`#0K1$D5@Aa;a=x%&h7{415?v08oM#g=!WokVpmgI(vg*4w)*M(Ms zL{kPQ-I$O@EyMn~j$}!vo{_iz&FWGpv{YrSqMnf<4S%kpx6|Q9fc1n%6VBvtjYS$q zp`u&T;{nmFEbV0fF1Ks*gx5E}=RiJxc>l7`JGpgte&STNbm!Ks7fSiln`)Bo8FvTm z)#-tXKHNDl80c-!`kfY=-7YGd7VL_)w2kuxZ|8YW-0KpZ4nfvjiBtk|VO)W5!XHh0 zEL=elr$k}PMZb}s|D=6N5I!eIl~}|XS3BR27jy^b^eC#+!Z~zrN6RW&+#Ak!USvrc z0=UC?b_$><{)QF!2?&uu|6|`s^oGK*=`2jp*WdBL*I=?9=Ft6ll#zp3EhuTnx7+xs zNX!jDl#0#jkgjt}ykHg8uoq5imHi50{k5wfLNa<4uNCKTF5r8?qwxfDD-9sXP$AGu z)%9~UkAV#3>(HKfQvrTapo%mE$aE*rga3@+tigQG(E69KqG-5ImC*uqidJx)s#}>A zs`3+x80ifNCD7iC2=`fK-JJ?Fl)Rm%eGFgA5%Vl?cV}TLpdROxb^q@wuJS){g#QTj4&qJ>y^8bi4q+hd8;3a{ooU9)ToQ9eUR z7JrZik{DEyQY6;Rcrd7^Mr!`S!x%l_JSSJl`7hG*-;66>8fUu$-NAND-A&tw6zUyF z`>YWb%`7l(7)36r=!qfWsO=)3OMyu0OVY4nL*N8i6V1W5hEkvtaX4zi$98#4u7Qc+ zw{{M(9}k~@FOr6Eg!jn_i(pl>kP=BZ+C)ZL`0&$rod{ zwYxn5FW}0|p6vYb<;&ILKtAd7<$L;)f8H~e`0wOUYcQU$ExmMcVr4iZvkqCYDIPU$ z6Gh%)5m^xOV!fe6H436#K8dSByvG;wyG1P}^PF9E-CjFTDxb(zFQb2KqqLCK!j^Eo zFIATURz;Xb4BVEi$C4)8q zH3xC!G{p5z)X1<0dFZy9QSA>R(}UDdNGup38pCh|gBp-EN1<{Lc<+Yj#oAaNg7~xv zM#Q5H;(v`w3J|vd#lS)e$y$R&_Y59+q&FI6-KH`sA-z@Xv6wLl8zmtY={tsp*(h?p z0d1T&;HbF$zKGW;%2B`DZIOLZ@6Ma5q2XP(uZ--UYXxdg-ne}GkX)|)>0_E_p4 z_rIg3aPQvf8}`h`VhaZ@%s%$UVB^I*{-Wo)AuU?jvpl9BdPiyWwRfFFGK_z0t;4ZXM zKgB%5{v$9S!fduNRlFy16bW2pDU&hsh2ZlTY5Bn}R+2(0{T|a91P)u+gP#h{0>Qix zzH3CVjhMZ+Da1Pk`-8OC&Gedvu@$cKA)^Wn)Pyu@KDFr$Z>Jb(JoR23qJC$Un(ex4 zKB-*~qjo(E^r@`DgT$E%zO}+ycdcMDj*ar|K+n>#ZRGPnUsBD6(2yFp&TY}-DeG2= zLsX7BPCd&;`KxZP^dV*4T5*WJmVbY+yp=khb8C5d7&|%ieb%&X$cy#%pH|BgGb>GwZO?IL4o71Ae3;t?r zs$3fHuOO|&5gRBWP6^zX^k5ghQJNa4>UyO)SrT|}%J1Usa(Sv*fu^Z)s#Pob{iRwf z)!sHS5R12G_DxLgn`y-({i9o&Bgc!yW22oPL(vXhjcOCSqR#l1#FlcRXLrJtoi8Oz zTQcn2j?T;Z#n_)_+CIbmn-~steih32?4Fdz;!vgOJGXFo3Y@{R;g-ztlGPbbnN5ov z%e7#wft)7{%8z#o7<#7jvEba!gEgmW+y0Tga`3*yP^cCfj=b{!D0>e$$*%HV@W#q@ zQ{AdtIp^G6T~*y()j3a3>d852Mxz;Nlr<8H142R?B!L8$kU$_nPaq@#hG!+@B@2Uj zX0VN)u?Mf&2Wykw?pllCy`QJ%o$sD=Z&eG~`&+@8`}NILb;1|^-~Y>uX|>RJ6zNXG zmp{k8%nnl`8hi;f^Ub6A`-c#O$`KuDH}P=J=pA}q!t`rK&Sr@qL=DO{aEMJ2UE>O} zHBy2Xh+YEc-wmS*cAh5lJrn|(M`HjUb_L-zs+0OTM#8BZ&HE?y5mFy`e0|{Y3#6w5 z(*r=^Ai@963xh1AMweiCm zjW^4p5S-5*uOz%fjbSynZ9Fw{DEH(d&vT5DZY(!PSB6rGUQL2q=)Ly!?KjthV{=>T z^(}K_!TOEcYa3_AL!t4RjWw3>W-<6+cx|B@iF6mX4bisf*8NB8vSv%|JG3t)dv_-% zJ!8&rEH3%+#Umu$D;9wnE*@LmTcynY^ZgJ?_-=;rEbNn2OD^#&) zK+sP!NCRI)jY-uvxCnOO7C5>{u=5-hyZj{kUFMf)#_Ld1)LHsZKy}3Bj!u*OPdCXA zt&vI4O=k0&)Mv?Zl6l&70lZa915;IQE53)>H#nPa(Gj-_ifYyp^W>;2G7nBUj?*>^&tAyKmKzHo<* zJuoP9bYbl33XNX3_t$D6Ftax}64o)7?aR-wUu0*HDY>6|fL?+nA3OT4Ck~Qn0$aaX zuUG(C(uYXA=6Z9<1~t&&qGg#ngRixtz?auz7LQ{wn}E)_mG!< z4^`K15=LiY<5(qq7kGdni3Ku|-=&ikzlTH-I_QP3B5~{hDK8J^Fc_#1SikWCyp(YS zuE)h2bmmuWebCzT_D)GCNsQ_NdcLP6s;7k-By8ESpLyg2Glfp$LTR2+^6NJ`MuyV17Pe>a1Ufs;?r^8Iu|jJ3x?R)$&YyEqB9iL{ zd7e=gTIsT8WzN~{93$|IB#rLRd;D%GQ=jgAed^kSo1v|TGCqHMMibvm?s+%q=25TkE9_XbSYT1`v0R$=!3#{K7H zuZy$Um7vNnHYMi&h;Fk@Uj8NfIp*(?oi&MiGYy5A3{BaM*^VK*ri)*(KEfIb)E zDVe>1nHDrMxr53Kyn$h&t0phtdJ>-Xp`Q{#rQ8E<+0i&uT%=&?txTJ#5|W~W2+ajADN{hna& z@vqPvL;s5B77Q2g0?$3hFwQu#U3wn@$jXv&WC?;89~$`;rE_+FnEe{tMBm9Q(nEfN zeL|o_Lq|58@c}{|79W`AAzfs3AWmyRtKdP?n~T2^2sK7X^s~M0xZw#}l^|^&+^hH~ zh3$?oiGz-iU&MmO<&=IKzbPe5DQ8M;Q`%rk`-p@`omrWcq?hy&)dP5ufi!7|?Gwd` zH*0c58LeM7lkg4ElR`kKO-Mpia57G-60c`c3(1k<&S92Y=Gfehiap>NxnkF%_J!eY zBzR(R?Py3`X|UQ%W+*!qr-!CKygWR5(M0(khbTCjl(iMnpF z>T@?sfmTH3ZdSKt3#g5uwu0JT)J~!HF4P`G?Mc+0M-2+Fd>1v~Rb-`pt|7p|zy}HH ztwDk&qo-pMG?hsBxIxBw4cSWpZs>LNNL)}mLc(Kp)E{8n*2!Zm1LJp)OTvhPj}RH$ zkzghpHYUhM3FW;~KU?}Zx_@0J+0v+|_uGJ~Qyl+{18m_Vmni49|VaAM<+!)+Irj`-n7S-j!ca4YQ!T{CszuYg6;3(%khy~ zHKrVV2l4HDGKo z2^&}f1~8Xrt^Wsa#g)waaI_3@d(k>hNRQj=)kYx^!&u>It3`#mNyF0;powtE-@v2k z%Z0^C3WD{!%|PiQ`g0DUv3c|UDcb4Yd;8Ar?^0=pS8lY1L@_Rkw9LBWouQ`%RdQRT zm`h?*H#w>~&5`5sK9?2^YXD=Cl5>+#S#Ss@a3O>8?_ zcZxhO*%)_a&nDU%k48O$m$zvgZS&^mjxBO-yE`aHc!y1jEB5g4#<7nmL7yg;+VlmBGtu_v+(8wyCx_8O~DutU5s)daer%&iu9X6XKJ0EjOE~jP8rpb+6 zDJ_@D`F)DrB3L}BXgtua1bxDARS_*C9nGQmH&s(3K{c$nN8`m~I)-Wv>CDfv5lW(h z$ij!pUUR6k-9$Y}TOm-6S^FL)DICX%{_I5ikIM#u2*#1a;$`fG^%mT<*ONVHiHw9k~TC(^6bEfTKQ zbvwHEIjLVx{+!gO%Y<|8NAmsptKloLf1=OyYNY%d>+AqgEb(0!ORy)UPpc*f&nqX^ zEy4t#=`p5FPhy?fhWO zo?Yy9-bi)xaxl6ybg}n8#cVz+O694&lcQ_hifR|tpyvrkcsS2Egm!`c1!MPRA~7i( ziK{NjY7u(h_a>ug0*-V_AE<1~M#~$DPldMZ+n*IAOL+61L*?MRqpeiS8ATuT>yg<& zEjSVSx8DY*EA-u&RX>MjS($eydt>wi*_j}CMO-$E*VWrp+8S7$3StRH2RLK=gCo^*~wH8T^s}^fMxu=nD97xkY_*bP?%R3`C9X@m>&O+Rw z_um}Jsn-0qipSy*1<@hJT6;I_I6CBJSf>^*#(uPVuNre4OpN+dN`8{Qn&W3lIi9Z; zH>GOX&FLn?@$42GZ?USy@EfJo;#}`bqStM;N17GEK2R@i3qr6crAG9#mYLz-=goyhvtaWXmU9UzYlzw6rMdc)UZl#)KM}xhU)~nYe#zaJWeSM5gnqyCwinKB3When>&4rg=fD2m zExyW=x1ITPsSp^c=Ur0k;Q1>K$ALDWQ~V%u%byef9{KlaUU*`5t<{^TrutxF3= zmEqayl1CF9t=UF?5i5{-bf6q1NBnDYVL97Y{Akbxv$t@U%U!N3h%fXHS@Pc?!fCLE>dKPCXJ0F(li zbxLSK*iV*?yGT{0QB&GNj^b;;Reeap1#m#ey5Rz>Vt473Ly!uECG5X}Ooi*s#RCIj zptJjz=fLpl~50OR2rod>~3d^@zS;=30Cqr$zwcR2O54v?>UZsNCM%2G(P(0{ z_iwpQAkfLFk#Nl048>)hU*q}UWJODi9!(D~h9e8ZX!-Fa)pW$_I3yS2U(Tjw=<`x8 z{ps;U>%V`6x!U67_fKSZHs<^l4Xtnf>5aRpP6zF_IhG)1pIV-u3TB&VP0!Ax3d^aK z>JCIRf!N|A&?vJlH5yF^3Z=T%`)u||y?!K1Z`k(erlfQAFRo{GCg$P!dP1~vG!wF@ zHe}_NE`OALgB?XH#VWO%dLQ)xWFUNxw!cojLOrE-ofByLivE+oBK5fjoK-?XZ8MIHzn1S0;ZHUrJ^adO=;YeR!!-MDV;E- z8%*ggBB9qtulafM>aU=|_Z9O9)KUEwI`S>_?yn;Gd*H`{iln3`vg?v*boWWS|3}~G zF;q9Bv~fQzop5_h(qrL z8=jcTI~;PQUiEllqCg84CD|&Tb1N<@D}_Zj<6`Y{s5)D%o+vX6_pC3XN)ASFh~Z2l z%iQNHR_ftIbY!UN|BYNBD=wX0u9xy^R($;1Q%}T$BuN14rr9xS#WLz5_`#(M{+3EYfdf$#_#FefV z>ltTI7@bvzCp>C15~_JQmf@y%B@#PkK|R|D`qzKr=vE&*51US1ILu=Vme#^+EOSVYJ zF4;MkoC>0WWpfDjP|#7Uctf_Kx{Y38m??BiF4)Z5^-$iCM5CBilytF?I8s@en@LNe zCEgyJF6c+S*~(Y}E#LGcT3easLOJNLaGGs(*FA}clF>4?M>c8=Y`O?lav=x#<3zIq@DG$*3K1ZX5fp|yrpO&3C9g`J3ABVCC;H)t zDUF#=0iw%Uoz80Txku5Rj-tE1C}E>_C@OIb*OM3Av(Gi+}tIs)Eb%2G8*BS8#ZK0RU+Xu>mj}Rhp`8)HERA` zE8$u{6GVnIH}K+IE%ouG@G&r}F?@XEF0j`ykYAM6XJi>)3*6DDzJ9Ga7eEa;o&fUS zMMnI!WQ4=jPhB8iot{~t=g{gFGbSSX_o@Wy2y_z>sI|;d++Wy<4nXISU5uxKOkXh| zgm_l$G+lQu2+E`B!M7gcuHS%;(?949(HFZ13dMM%S`Rx@)po4Ae_=?0x(o}wA*3^M zeCGV^uAowyt|r_=3(>@;mLpP1hD9-)EJawCl9dGuTH%>!EgKUfo7+~)(v8{Jk)F!% zY`C0F$VxI-kD}o{yfr$c&1J9@d1AB&7=KtnJOS|Be=GKmPxZ_BA$_u~yToa0 zreA>yssRqdl8f<`a!D$da>B2|M<+aCuWS>evJ?&k#qyqVp{0yh_J>7v-&9)^87(3U zoZZcP|2VOrDWQe*r7sBaXxJgdh02b6FvaDQ66drCN`=oI+; zmXi;k{6)2^f*V2(h2q+!4+fK7hn7@rtShMf&Bf=Ruf6h0?`lS}6?f)k$)?oX)yn5M+73p5}$D3K$a? z@sZD5z|IAD>Z>p+z?%wD=`Yvdb+;0<3a-G=CTP+}(Fejvz9D^k3ju145a(c%Kwm#a zy`X=*k4b%`pOadpzHEXv2I1(&hc2S4F$~ej83*k6?126R|PpTkQ1Yu5nX1WMhQ|)2>crI zUUE7)FTEaN&8|;-GwDd15Nm}YifkE^AEc@?f~{jLt+H0H5em>*zOqddhu!*HE9deA zB&{4udF?cv+*7aaOwu&%h;@f(n>$z0tbdFC{QKTdHXfTTdwrF;qZ=mnFO3d2qP6Wu zZ{NB5jw9Qur7ioe+qiOg8Xd3A9-8kQ*gThDY%X7C*X_H<&g@@QdD-r=x@~Q9!eVcV0I!egq&O2gl+Z{cJ&KRf^a&P{ z;UrB&gApCD+8w;)vpHN4_h-@2yaN(YjTF|dj!$~VE!tV&tVAkKIQ{!nRZXZm7LlQQ zREB+?c~R%F_D~qd0R$nCTWp00y_NN7tVjQseZKnZUswNTLH~C{hF+j&EW(b$2iw+E;r)K%0cnGn$Ko+1GxyolTfh!!0QVsYn^#QDOqtws-22}(Mzr92?0gne{Xn^$t#ERJ3d0hvSp49Jqtts7YJ^{|W z=K|1~7*BuLls-lzsOPKCEug3Rv~|^|b?ZZ)YH*q!nv9I`Z_VcVxS(b#fL7^7N^WHE za^E1;U~u8Zw$+&(m-Zbv@GplBeczQ*W8KQmf8}kQH$Aa0n2igx z;0($mD~+W4mh41=W39eIiU|dxGXEBB75%atQIJw?dBqWq#$3M(L=`(SD$?z8Qbwi+ zEn4}Yd>zYLTuNB`eykAjI@&*zf{l=W>V_$QwHV~BRvRxTWyZ??iXQF#58B%MANF(S zs_#YrRnMKHcY7ydEOYj8tBVhcQ;%)+T3C_igCRgIe_k&o)94-c$B=fBO7e_Fa^0Km zjE*J*nU9UnZ6CwAdezHcXJ6Cvv96;ofjK@(qGDK0JU~)DA@T*deE|FdzYLHFS<$(Z zdgnMG^~o(oWZvx6yM@n`Hki^*Q#y&BfNA<5&C{T_f;;J)_5h4dk=oWf$!g4!+`mC0 zB9z>Fvq!S1aM6h)ZdbI5?ZvZuh;&Pa& zn1G!IGeR-5Y`-+HUayAEF_XO?)4ATSJq68^t527A9F23lh4**T{~9i)uettssMJnK zycqY1k<#?={=c~8Dj)_ zWD+_(T5W#tDt$OS8iroaGIA?&I54U(?6bir2L#9r>kgJvf@CeXVlIZGt&9}Phv-xG zU@%~x8H!1sT5~Lv-w{p40nb~D?1#J}@HJ2C1qODL!s1V(XJF|$bKe(VuL1My*v0zF;*29K*I8n9n|zfrw52hJsL z+YEA{nb~{?0^c?~7U-_@Y<9d}^jZQ!^V%iG@=Rng+4Rh0{)uJfgd|u5C&Nyoo?PE> zyi_{A0d;DBQkGf4ZrOUKT0OIM^i)Kuw!6{D?8J!V&exkkIuw}Ocgw064ETk@yeNbn zA}?5!SS>wt%LYlbZMkXhayq6}v`0Cyar+qO67=XM=ZHoBqSGGk{m5Gm`tzYL(LCEh zrcxpwP+T1Aaau*sFq%O8cM0(ucRQK!u(x-c0$(#e>gm`ch|@sK){Y*AvHxi9%ra2nMz!>(G$oqPI-m(s8If>*iU9C#EHr zv-iHMGo{H; z^-BmMU>vUvErB*YS9%P!71Z{kb_%t3q4pqZPonlbYOkU8UDN=_3w$$=N&Wl;h$f_n zg^h!0F!7}b^&jZd%0Ft+)TUi1#}edmE_W zZ4`SuOs^b>E>AVbJP}Q?egKX5Rh^xXVd>PyRDM2Mn;b@S-`i?-cMq+v+1>ern%y_z zQr)qmW8;UT-}E*nH`btL_tDKQvu1Z@X?3k8$&Tvg#c7(EUvU=`Y`&hovYwsojz=!N zoa@xffl$5CPSXD-rczKPlx05kK>FI=cmID@?WTFoDB1ms+{R5?in6-CXm?}h(zxc* z^s?RhdLKi!;h!PfP@$rFY2iod1uzA;lE!-c~mJ5Vn=t@~bgkecysbXJN0iVSJQ zlqSvdX3TvXO=&NZuGPB^-22K4cng?x@T@{2Iv^l{E%s4jtehuTP{6^9bD3_}OV^AM z@6UPS1HE0Zt_iPaNF^fSn;97pkD6)-ysU8sSX zVQ<7MTC^;hY;B4}Pj1;%h|i`!F`_;R85_c(Qw_AlKz7qDkH?>Nw4Ic`EPv8iJ?o@T$s+6Wij z51DU6FT(_sAE!P=VU8i}axV}D3&`Ywh%m%)c|9V`l9?9G@UQ}(M=S7oG?Si3EAV-} zF8D6gu0-uDYWJh|IBL(K_A+X3qDEHW^JoP=udl$+$uK7@*l?!_{}9aF-?#`ad>i!* z8Pi*0=~e1$=LBY^ssrwW9Gh3oBKX%N-vqx7ftC~<~!Uf0R=03rFc)D$L47-lRnP@N&(Tdw)R>Lvvkv4|DfeqMGp8?fyhH*89CpaXKR9>Dt(GHRyr}h%3^$ za<@&gy^yG7V^V5M{rLSZg|a8z0U(#gG#%;TD(dm#3ldn@{v{E>UqQ zabGLJ^FnR+`BTU4+chLuEUrp-Df?k>*g-oag`TdQtI$`?-eB^1xHXr-uo=@`c*5n1$wJy6ND5L|;Qg|k)8e6$>}|wD&7`1M)NG*|rdiGx_N_`G0V-lS zGHbQQ-duXyupscfljRe!@th`39xqBYWPu3+!wNiOlfu5i8fKb{}cmp{XPi>*;zG*!9oy}QRjxT0hiHSNRdP*Z9TW%?7Q-tQ85*^YB z6=)`R{xO^n39K)tS{YYR z`;8~9s0l@idU|uo(b1VQ{hP?72(g;4M6*6St)|h(a0b0M^!^*iboXtTj1?+wPuLrn z%$4RNXvENuN2j_?Z}aBy-d)N}w(;-=)WtSj{!i@3*)lS0qsTV-5p)Q=WGoVre^oE) zfGsC*;z!ZeulHDvis(OV)0DbMQuUvBk#vj}SrSy;JvqQIMG;#oO8lNp)c^1b79#0! zd*9Iyilg|j>{EnavqB_Xnh}C0G4gOogxh?<#NL}ztbta_5U(gfn6M`GYom#6umSfz z_A$MkA(M{I^Q_fBy0p7Jwr76CYvuW+-aP$=-r{23D+iUxkk2K%Y^<0RLVjn!rxSBT zGk!Z`ce#!}+-N*}bmp1^TQm9HSKhw5di#~T^Z6aeZd%%(7)w20jnL%3!0@M2qsgh? zeT#`lX5((b8egad3dyMC6j_UGD-KOZ3lWdS!Z5U*x5Sj2IBpirsGo+k@&y+Abl3&J z`hHrU%aWHr!oJB`Q4dH^S5Ys}9|fE)=8>c+S>IMk!cS~~|aqJ|aG@*!h_^_7OZ*^O70IF@}a*{l?NzCxv$ z+*1I-Ho)*l26dhN*~Eu{kX^q2zb^g~~>MU_({R<&w^tGUVsjWsYOM z@@mWQWJcC1<>?5c6HrB_DwQ3*e`YWX4oiO&$o%vy&KZvTDDXn*RLb|Fq2mn;=rb^! z)n?~C9;eIAL5UcaIrc+}=rk)~pE+8K_svKICe`mqIf zDxGpyBlE%DKVstx>E^A=ud`ob=conh4E4vDvkA&q0`eWKe$06a6Wb{&qj!sp)Q?Op zlD)4}E9;IM;7=G8dyOd5Cetp!y*{MlSq%U$F7OQWl)#7(A`jU_W>MHed=>-bU+TeH1p5jXf2QAeOkG@b86*a z2Wfek%2>|owne&oW^10^ozCC7GD}_F<}Z#WgoWcPBVKQDPtsFcGfDi_nu??P((%V9Z1)lV1;Ns!&H5Z+rRtm22}UmG-wc zU;X4?oClTzqoK z)YJO!v@G>8IXtqOYx>VUD)m7H%ldMR*$S3T>kbstWj&1nOm%!6Sb4@B;7kZF&6s=E zBplhf9X%Om4?SpJ_W>edFU}wX0&Q@DmT2O7;e~a@@!shak5MOOux8~SdN$2uZemZV z>np$mepFlM>@+$TbBmG)sHspc7Icd#r1c9nzv}~qC9iLxI1?;;yYi5~*Y(CjLD3OW zW)GxWfRkBEw?**>7LTQoR-^CT}do1&P7}v4g%$wU}iqc@iT@w1BpDppS`vm z3kegI)KtvnvGZ=Izo#VCaM|rls&?5I4|<1Q0#|7l{^|X=urCwLZqxGyXlnHGPuVXr z|Abc2dx6M2OMo9(GXNlmmuP#1i#W-pg?*FYX@KA-C=C!oX_K;KhFv03UdrHD0)@gW z^-GcgG7Mtfur25+XGm8dP(SSd>N*mVY#MK)_m>C5hz)uDHKeec%{vb&9s|a?+!TRyLA$h2lAF z{&>*ha$1?c*nDiJ?Dsbo4$U)nWhbJUuSlN%{^97K zj&G<0ofckWgRKDd|8tKQ= zmp{vXhV3AmbrZFlx{rE-!nXB^8n_FuCGqqVlv|%6{iYN(rGhC{O=;AWCQND4lvap@ z*IS&u1%NK&_^qaNJCVSK{)2+1?ZH2gY|+y*N8lU}$?RkSxsfqKM#DNknZTw9qQjGT z`y|d<|IVFCMy-s^;TsvQN?K5mY0)MpJM~8uzvy7)h*O|FR$qPVOr+TwPgyN51#`)y z*CWP?ozfq3G<*M7DhzLRSfV>l-a<#!xk^*Y(ZHclEku*DK9Cqiz?Yqe=M zHn4ElRh-T4u!MsV-eR%xnJ6RGb}simB`4)*LvbmJ>SpZTWM|^Wv9vlmJrki{v4}pe zU+P5@?W|Wxp;^{f$*v%4S}-;0d(XtSWlH`|w=WxvP*8(@U0Q62RA z-9sOQ>eQHI@K)+heS1BrbtaN^noGekRFa4GLyhM>kmp$}u6+g(u-9URO_HLaWmK^!h%#k`WLEFVWkxnCM@+;=zvF ztH_R(t2U1ZCof&o4UMkdMn`&&&^Pve=gB6D*?i2M*mYAz@QO~Fen1(Sm`_Hd3v(T% z_f&kW-ATr8+_mTC_}I0*uf>)sR*za+nVHHKnhB3pjwk{vS{>1?C+=90WNT?P#lQ^I zdt`xQ8Rna6ITBK$p|A{2(l_4ozON&-vd4W6b-`FL8IJlAa%saRLWwp zT$0=nXz~JhBfj@OIiq^~ZXuK?M&gxpQWa#I#cfS4Obofv&=O-FPfYrjkdS6pg9-7^ zgfPZuq%MDw{We=bbJQL51cd$OC`|m(Cez*=DedSmC7&tPO=%pRKOq~a(#ea^f9D4F z^g{)6I&Kc{h4>0E*WP7RX#uQzMdu&cOTboGbJ$PHTkuFPz&yxw4JMA=#^2<7i5TjE}8ZZJ{M}C?Wp0U+F*h>Y2N=Vk={vP?(4(g z{nuyX>^lV+GKLy#^mszcuPeIfO2Q}J_6%S_4|}poG#;*Hf>t%=6*$=;I;<}18|4Mr zU5Z%MP+Hr1UiI70t>&*@b_TVz+lsk{G-1i7az)#v=e2AiD&=lpRtvsKK~p`>=GM5{ zUEGv8rxla{Bjx5=v{R^##+|hCA=;PkWaOA!nanB7WO*g7afw}rj#V8Fq{TWck%$Tm zGvjDx-**4C`!a`1QrtVezrHCa`(25R&8bhFcJ2A#_`)~N2lPBvmdj2D6W&a=fb924 zAd7whb@m5BX`hSprc{f|@1e_E@4EWPkf`w0J;(1@L%+Lv`6>3V*ap?5HlumtR_Z>Q z1$|2--Qy~KDg(_5Jo3QAOi8$yhaa7jH}x)HyM!$S!V}~y(8KalKh@eP;hL)}sPkd# zdn39B=0CZDNZ1a?Xivf)2bUhH0kZfG{iQrQt1>JJr^r$;O8NDhScrtnnZRqfbe#@@ zn8rCPrnJ$Nt}w3y!{6|#<5|v#diR}~mcB1j_vNsrFDGMmPh;UXXHdwWFoW~!74P;s z1MCNCr!ECN>2^6K4{we{HV@M*$NKYbkr#y0Y%n-m@@3K~bx6{@ewpP~kg9d1;B+|x ziaMH;g4)~`pX{Y?_h$3uP$^s~=6$_ixRTQ&jG$IpVcX_g%JqBq?f*c%eD{_&v+r73 zx-FNzb!qwbEdA)>Lz`WKwYu-%6{AkQ=uUH~kx`Id$p~(j=Q*?s8SpFKY_90f`4f?t zulJ4op;mim{nw0_=c3W%#v#$ob#7S{9siOV9Uh8g!i~mQ^3GsVwW(pvLc2p6{b4=R zNWcBhz(j&vQVy+=zRRCx|B`J}HZ;fF2wZRD)DgY!L4giHc#e}P1-6?nLfY;TYFz*M zwh;-ddz&S|en5FgV=oZB-w0YiM1HT<%Rt~XgdtLblR|d>)%vaMrX&*yGhZ5TRFDnV zEO;{wz!bWo$ zNmeoLl7n@8O<$%?tce-mnCF7^On^ZhWNEDa#1$5|=o2dkc5jIOIzmXlWciJteMV+dj%d_B+N#T`dMfC4hf=i^ zL{rTB837i`0w5x6xOG_@H ziS5YA%O7Ju$Cl7kRj2Nu{&#TY;gEiqq;0XfHi;vMM(Vi}C~@_lMTN7?2qR1Euv1 zQ)2`jfRBS6V@TJU*FcBA2l|S|yS}J5V1NkIpUDnkj~_9yes;w(LG16C|GgdV)SwbXl5EmI^E~l3YsNw zUEhyT&rqMIUZsEgI`t5BHwl4!kfib8%;OFLla%zl2~00yAYm1B4o)*D4NM;mbf=8z zqU>Ji=TyM8(>h-RK10U_?b12tvZ%FCTSN{1cO`0PQM(_t$5DF@wU<$QQzw4cu|d12 zpX>DTI2>bSXB;x04*A4a>o9d=&j%%=z$|{_*P%Z{J_Ycr0A~x>BXQzYnI(Bld(jPG zJEPCFSo7LeVQYBSXQY1O^lhg32HBeUYA6?P z+y~CZDO*@JxHk6=d^q?*K6n8<$j0@bF{Kxg!rmcv6sB7;>xGa?*MxppVAOuq8a-_i z=PP9ffTU!s`7GAO*Au;Z#T&!7G8);P)J0nKHOP>AM|@H>i{&HI42t zLNFh4N3?V$-~hLKY^I;;Tev1&}V_OOdrBKL<%so;#6!oOy6N%ob_Q4%%C8Yf3cU<+}-T!Yi z7xFlPn}wEw;e>YSaeqp4$N?Y6xI^kc{rIJq$}hZdELty@Lw1MVB3YbwbL=R`pL%+V ze_wVch^#-xZF2{IA{VtWYi-N&Le}ZBj@`41voKmB{;^P8r}z|jt0Mm;Kl{u{jvLkM z1jg#oinpHco!#@~7Pp(r?b@|1?NYA^j%hV#AQW^^I!|pLtu0?=<2ueSfGi}yhCG7C z+B4K!KqO{Ff%lSZXq;Z$CBEMEmAzr5IZK_;yO)Nppo#12ED6pJo6;&dio2`9*95Xb zRRSDJpMr7ubPam_as9CkGe2r}9g+>Qn;@CyxMa{c!()$Ahh-!8$xz*4v_ZtSG4QB6 zkbDlw=LRZ0v+D{o3~Io1pFG|Kh>;Ac+#iO!NO$*T0LB%?Bh0EtxR~KSyZ8FuK0tsr z*82_Zf%eZ5BiSOdoc0SbwK=Ow0eX{`h$el-U@jR~drvD0FGUq6<8pcBy|HR4;Nn@H z4Q`rpCTCl;L(UI}?YVX#CIGWgh5ncj9Xq!DEsjH1)e>qvm~5oHR*TIY>z>-P=c;Z* zxOB9*CE>{_{$ioz7lP&N&RVQ;FzZ$0>2e}bKb)Z7fBdcEz29?wo{a>9wTN4^X7-Ld z9p8vm(n)VRl+R=|rWPHING_gHd0vfz>muIFAIvVRNZIfGKA7}aX*sFbSc~YOIi2}r zrgE?_9<*Es3-5hjegE-Y+ncJJ$;_=?^U)uD2>4D|rWZc+@(w}bV+*^_EJ>b|$q8*J zI1&H85((18Ot$ zcW^39W!l7E8d-cmrW7A|c-(wAc*QpB z5L!q#F{Hh4FTH0^ll20yE~hTw3OCjiQJG9?EmE3>bTnVfh@p|dzX@dd_cbL`Q9ASH zn{UqXEHcn{XES@V(3hs(>^)vQlx3Xm@muGrOHrH8YC{%YFi}f|C)yRayV9NrM?0;G zJmOvM^4u1ViyfMGCDiQd+?cnuGMp5}^vH69xw7YfurQXSzY-nQz?SllMtXaaV}*I< zh{eHpLIPuR*}Q_3wmIx*zGH3HKLHQf3~Ee98>*G0YJ5w(_g6&!QIR`y8*qq#k{k@S`IRh&c3?_k?vcm zyJd_)Hm>?3BGrd7{d8@;Mp~b%(ziYvG39L#!-T9TBuSAt|4i~%Z)yP5$g+5lnyF)d zKt|0Hn)H9aR_o-CfBebiQ>p0gPGL9@7%s3}E-CYZ#h$5YS}h~SYUzmJPk3m_Udy=y z!t8-$_RN|#9D67=8fF>G?2plyQF1<4$d{Y!bpOvlS>;9NN~k0{{IcC`Wm9R7TJ#3e zs?9FCv~W_ZlqR&^52TnPhC)&*oA+vAt2ZW#j9?MeuxF9CJa^r7<(qG&TQtwlaXkGH z&2!Vp#A&U0oNg!Yaqgfw9_@H2GufTag`5^2!?Y&UtOw5Lc{<#RaJ-uE|E|(*j)q&x z?}ezWs#Z^`JlcEJQ;8rGX~thwWxvxZM~ZQJoM*d)7yEO*Oe*OumX^{dBlV!FaPIW* zd}a9XkRWoLWMh>~w{mGS6r5nGDw-o+W5>}9k)-z0DVPP;h=Cg+c*qTUw_cO_ML_`N zh-uki80@5GWm4ZNLj4jolGhf|14ISX#!y>9Z7*u4PVvE^ga6?e`=kffWVK^Q)0#(Qh@@=GpcfG(Vi%J4Aom8gk8CwPU_B5>mplZ)j}3kT|;;(2~x7^>wGG{1Gv-`M~jp zAh4|4YS985^L@}=q+01u<0C=(Q19tbBmRv_Rb<&mas8yH*srk#)IA=eeog;5gcp8F zjKvmZ6rX`MbqQTUw~Mv`}wpq2AKcvmoKFn3)Z%-k(w*(tl2P_H!5e#^H040WZYIFlrK# zvp+*^)USXufaCa+K{xjuff6vG~-ai81?}<5`2KV4ibHwdRR6x&(4t}4_&}4qaQ-s57n>?uksIQ`%Sd{ zW(~`4BKb`u|5qe`2g%nd6aewP~^I^>!9EW*NIvv}MW;Pu}SiMAhaGg`D~EtcQt~;MGTMTiz zGN~Oqw#261KMPJZ$ztvJyAy3?>vpMHFEPVoKD#XMSc%sQIiKWn2dKw<@|!gaw<>Tf{jvkLoA<|Luy;S6_XT4AXjc?W8;yW zHb(ndg=4~5e=4lGG)MOMitiI@GM@BiJn>k{_acsSOdIu^h2(TH5noCGHt;&sUvJa% zqF#ddt8B0@k+SILPkcBfS7r~+u)I~xMg-Q)S$Lk=e#gF!;$_78 z{*8>PE^Mz#jLZbr&ecwTb&ErE+4=G_*JtiO#Bpc3m z6;3UxHagI%(~nYme){<3kFlR8{LOh}qFzU@zOL6g!};kp;=9{Se0P}1`2_mX2mKy~ z4eLkex0ZPNO+hcS!MtQU##J4m&moi!w#Vvqp%Ce*rENpUV9DS>4Zf1 zj?y)3#2(NYl`+EkFtX4FaiGH_Z@o*Hm4UkxI}Rl(O&!p02#jAqcj`x1W4cqQya|d` zci^SFQs2AYC3-7dxtDAW24rwOp1O$lVX|nG-#FLr6(&TPm{{~cB^t2wEY@`{7acp) zl)KPfI;g|2**@OAk5~F0y}kF+Z#=EI&FKXUnrD?Qv=h8Dyc|uK(dLypgH*FmabuUd!hQ{{1=c)I- zuk@bxJf7ZBu{vy4KCx#u(`{BYr_07mR>tm41TTFZ89nq}IQxv!CJ+hV6yo1Wa`QORKq2oTcL7&{!Pg9#(g=D^ff!-Nz9~~W zWJ*_<(rHsVLnNGk_BQ_SaCU|+fO-(qhzRHFUBo|)(BKtiyhvvM;(2DUC{lx3k69lkm zFmW9q0GnOJ!wXz%!0Gk`nekxlzz{_oBEw)VP>#IRcG=)Vj9&mqwXp~8k-Y%j0q+6B zh9XH`tLS-nQi4zdF7FJHRO8x5iLvqoQHvU zm>K!~3Tt{{2(+(lP==$fuEWjsd+W$K9W`K(D9h;i)v^S|H)zY^$nTAuM5FD6t+FxN~6C#EMusgmE$pvhD4gq@*knvF%XUfcWOKl;K; z+USApoAOSH%P#J|X&W7>PI_4g@2OMOXJT9S9I83&G>u-+rN;a~L>KBkpKZiF7CG-> zI3*dSuhY=f3-i8Q&~6T7lrLx@(E>mPhMSm_ynMQmR2ZG8iFNt&G5Q91#N#dcL`Uyn zB(1r)LXxK)s`O9v%U}H47jPbX+F>7n%YA>NWBJK4`=xfOE_K+S-u-Dz$6x> zhGjjI13<<9i>~*8m*gt%M7!!#b?)k_?&_R#j`w!=?VEF)J9l! z8bAqwkU#;j1QL=EmH-8^!HW%RuAlLG{kUc^Ys13B0f)EjzMYdn9>&znc1P zRdvM^zVQG4-?S3fCTXEL5 z3J-Rx2}j7IQYK;Z0i6sq+GFY1UAL zvpVe--kh#91L0gU?ha!c8*93p98Z-Z=78VLi7~Gbh!rD=1)_(JU;P340`gL>7`yIX z@PVmxBx*=tNa3z0tn@G%0}z5=?bf3MWRaErEz-a9bX{M4Z?PMd{Q&k)(c@O=?+?*6 z;D;etpkm)aR%`vh{!8?{_pebFHzf>RAsAk@u;nymlrK=mc^!p7U!n@OO;N173N={P zkWUE@3J4JhEDBVifsl~DXPoYhdt4GB_Y(ZI+h`$`Q7RFnJSljDA5!dwf)X42$YJtXJR#@GY;+=e|F@QwzJ1^H!Ks2BvAnG~d)-ud&!%awcY4#Fa{K)8 z?V+(>JiPb*>lPwI-+iXKf6JWLJGXUTb@9kl#>QdOHT1C$T>k#Lb>F|t7*^e?AuIDCUbj>W3(n}@iONz&77!2WEiUhq#S?!`b z*sY*hSLU+Cxjc_1kzw3`VBAe#{WkgznpWxqm$Ci(Yp|9oN`uPd^-ii|RC>_xM__ z+BsLWZCj~yEt~_ifs3oe^n>^s0I}|aDhNb-C8{h>eLF}SoRv~C9%u#cifxf$UGolI zJBYt4+i!@`vW-!~iUeK=R8oD;Y|^h6gPj%MR66I#q~f-d&icSeI5IKR=Zv(P15tOW zKJ@6|4bk+zVST{eKC*K|DpQ5>hh_%YzMA_EotzS#=Kf8I=;_hEE%Rfc(AfNzzSpOB zr!t!koS&aRe_&H4wQus(#*U?laCl;AN8{_fonuVFW+^HbD`iP^yp-9TOi0;WR$^WU z)*F^_SDK^g*if@?17d6b!Kfo@c2(Llh4Q+R6OZcxV$J%|J@bQpi^t`!dYde|R|{!( z{#~j4st~UuNOQAvqut;?EMI*R&+j=rb`9cI@|x~Dx<6r;;NuYp%|p5i%HTCg2Z_T< z^y;wgA?3sJnk3`nR}`tBNo{TKHY$-pWL{*YB zN!BC}l}Nb-m0uZTh)~CRv=%tKTB8kQsNw{VGz3#jg~;lZ1!Q2VhXQ0ZvUZtHVJlQt zJs0p>RWrY!^)T?89MV0g+~-kEI;q|JSxvf??j^szbB(N_km^J9jHI#~SQYATKBq}9 zYv+Cozu7zKXCM;cI(pzv=s_(4Yk*qhL+ zo@3=F#C`zJF?#oXP>(P|y%~&<4Mt;?fA2~JhU-?R$=`~UZr#a=_VwrT`K@_p#xXDz z4DD#UtWwx1*d^(%+JwiJ?W{$oLY}1bM7nQlEOUC&?1>2iYvN5KXCu)=OZAmxQ34Pk z!?9Bw${c7K9nNTfG0UP@i2q!=CIqBFCFw!Ayq%TxW~*p@sW|Km5AuRL>{`Ac$(H^t z+1kZ%v(FWqn;G_m`<+crko`a6u|eRrxNXsbRq$Fw)cFHB=_&ZLuKzJG7xDTmUb`3) zl1;xOESb_l(P#8eBp412Bb3V+Em$!$8hwauG3-I3+v1t%W5y9Tgt!yUIyO~!&$_cTdD#uOg z$8SEdJ8`lg`sMV7`snVYfK}FHc_3VRU`HxCIXS}oFUI6bM+_!DF&DRrdZTzSG2r)y z`lBSjEO+&3^i3sSVyEs?kW5gbowuahB&n4D(3v*j^~@?|4FXn!Hl8=3UjwyFX^r$2 zv<96+`uENY#)|E&*2fC6N`FCwD$ljSRF$p03@#F*r3dG3+bEJxGeX z#6+eP@Rf^2ubj4p=Ieo}#pM(>1SS#txWbPLajVg7qLLG1WXl}r zD2c0IMc+e{x}>g%$C}H!JAvZZOSSn;G~v#xz=#QTh+_?2u(|~_>k|EP>X3DW?u8Tp zBIyW);<#>EIbm3-l}W5XlBxjHi&Ga?z5-P`HDIPnDx&%dv|0iTUC!*=Q=K_cxP` zlbIjAIbn0l7QJ2X8NP9!H9k_$_s3jjW76x1S7zEXTg!F^SndQU&9EcZ9$V@&dVEu7 ziq$0NNIPt-&1w^UzOXxcVA$cd`TA=)yWQvYkJ^L5u;g``Z}Npjhui9_q?t`DXW*B> z9{>oKKhJMSR8!lNoe%8Z0^o^?%3{6nTTMUU0biYSX7Tc=8EmD&HsZEMu`4 zY*wZ|wr|5i&gs-=k54Tg%VJxThe08nPh|u34IZ1<Ydj-A>&C!-GLOO2a9nI*plH;C01dCA5E_2!RC* zmN@(^(!T+CI@+VQfH9~N0T*zuZz|uj-lO<{c?(smY;>F+?NMmpxTQ6k{|I$72NgGK zmip^S363IV-C}68$3g9BNV5cc+C-Zb{B5Iu!|g&q0OEPYo|^%A4r~l;t~#;B3W!)n z>XZ7g{hH~C{<>6x&-aFF`UyCDlwltGHvY#v_}F7tUVF6p?ay5J%0z7C=-pcm-o1A& zm73Xm_aReM{MY(^KXkx}E3b`%&1i`}JEa%SsDW{)O=|ZLe zVG-S&WZ6W2pz~;cIkRb3bXT4^8)`(cIgr|fKUnbU3+RU^qg&FQ(mkMip7|X(9>|M( zMEAI|K2J+JJg6{I6UPHuB_)wm3Kc@0b)9i#Q3YL+eYG{Rt+5Ij zjJ>~_StZPBs+k9}T3i@pa7Ub618_iAp*L4hO&`+z1}_xV^dX%OFFCxl@v?xIop?Ep zmy39L5HC;Szo4OR%F!7&Qk zdm5WLu%4m5b3{9aM|TTNy^P=^NeUCt*T74Gbq239)WrlZM|o*l7U8O8ITb${RSgwk%0Y?Bh0ftiMp~_Zv9Qo)uhz83}$* zH0v@jnSbPr1_R89@f{~Nr%?yvm zSiZyLnh~49TS)$)Q1kIdhP4`{p9+$hvj$4BB=bL!zq;7J;r1K$)m=eLeDT;L*Y|Dr z@_LprzffO}GH-RJqAOL#5RFUVe^;1nGcNFr_FsJ&y@7mqv~%HBwye9%1Yj;CA<7$Q zY`#cCmynP*pt)&Or#TF2K*|=SO%0UP3A$Fv2>`4Kn7{R+N=XQA@@b{$s*ao{RUwB$ z03Rt?W%tsHlj=iTXdb#AZ@)<*S;UCOOW_tEHNKBd2LLo}(c4>?lest6pvA51O%-*@`!9lNYsNImQ)l>C|7mD-#D}&f{;39id7TN$+-!sSoiB+ZQZ(23K*+*FA2U(wB{Nx`-36tk<5^zWeG;3_D;6Xp%)Cu zVeUix6pxM`J#s`5vi)>>f9H+V1|QFHygM6tz!Ud74RX;A1^dKjI}ba2qDi3-Ww{Cj zi^8R_gp}5bEZ$65(e1u~b-M;0CtufnP4^Bv1~FAq{^A1O0CSAWO#*<^?Rj zKxKHzaK4x6`b&8Ir3$&;Ygm4b%CE1Ir+9qvk5PA!1VXgP!G64*pvTcmA zMW}vX!URA-vcN}L=2T+02Bno4V$>{)GV?AJE}o(2h@gNeGzQcj7cp@qX}L`5nBjzC zx_A)zwRfUy3i_JM0Z$`VvlauA%rE$>GHW!164J`B)Q(DlVB8bT1l`uh_DWu}UJzwl z^3)f8^PFH|Zh!0Y!NoylcK$#xbbR!d^mrsXp1yf@pWl0U3R~2UjAY_WJQta0mu(!1 zVsk4O#WR+@)EbM;e=wc?;CyO%Zpi5vnp>a3gUkY+(vnNlZHJ>hy_B4~IhnY5`p1tw z_E=wbGA21Kp7CmM(_lQdoGIP3WH3l>vo#rc1hIpJAGq`XA+X_R!kKiKpjO9|VRF#HA(O>mF%5zp=^7~@)aDpZEEJT$iM$JOBOKZe)2l+o zl9@F{e1EI{>HK5=ao6~D|n79;klxX?TcG<9|tO)F=cLC0A&c900;5k z3ld2|Ba#lP>VN@9crs4Y2!%*V6{aYs0OUbHNSyHT6LuD0Qh6@~6C9;msZn=Oldhu@ z={f2rpaUWP04X{QQ$r%1K~%LeP=JI6NrPUejKdy*QNRw`NbXcmnTB4+eAHDbB~5|R z(Lrx$Y;k+z_`~h?BiCC}<+_`hkTRZDemOj95iMsQJ231+$t}@^{(PvCNk}(F%L%_l z9t{P?WF9%Fcgkutd5wR!gs-KqNg(E3}`yFOl+Zr5H4 zZP>gLf=@FGtj#<>%kzPSjT__c=x8)N{NQLflysQ|o6S&&Ft7Bl6pG$rzTp1Pc(fV? zQfj$X>ij+Lbhv#6i{MHIID{;cSCm9cHY2=^*2G?2i?QECz%@|BdkIptAvq-rJvSBYvZU+3@c4{QGv*wo=*)^dzMb| z`BiXmS9Del#ti*@yh3LR^Bth<@N4>2(ph;)7U&3`i1$t2*c(*GQ=~W>pfr}NW zYc@@7Vu?E531|*tTZG^pFlHBZTb0xG(!0lcZe0ay&Qi?Tu{AQP zK($>J%K$h8l|StOy&^oyG%bvLE8V7G%RE?Bpcn%@kpp@FC@U0mHHBw$$@Tte&_G>I?r3$G~YP17^ zfxbdV_uM3h2Y>Heb8JGwrYbl29P{P&tjiX!%~s2kl^9sXdSr`_^qE7+O3=#cKgPRL z{c(d;blc;@rBLT?|6F0npNmKAf2Q}yBXY?2f+Z7bcna>H*(2$4sM5bJ$~^Q8^Jh{p z6m=Je6=HM5g@^KrngSCvp19|~^{vkD#{GFe^Q?-P?dcP-ll!69DQe8UY@msQ;G~JXCRfT{o}X zEk&z-3zef3Jzx*TGQMIc8;iLgum+N~#MVdhp_I#nA0R3Vyv4|;#POvCZz$=ua8l~Z zANcE`Nq5{U>6zCP`=oxOX@l85*50?HM^&P5Xxi2i!`my?FIA=pB^8ov)#LO7{ib z8@g|^w*k%Z5QS>ml=WVvavTiTXO*r7v=yq~4l)Iyz7=>=0VFh}4gUbH8>5N;FeyWD zgya=MCsy}VMFO6i#n&Pu0GRuIYs7QVprZ_U4M4|G{dRB%2UZC^-AR0RdzD|p5y1I$ zUV(d(tpNAzz1IDB|NRx>2zUU?4^$vs+D6BrC$wYXs!!qlPtmJ=SM>^miUU!&R)rAV z>vRT+;;vKl)l=_rZW_dH@d=P~`0R=1oz!3^-H4_BRrP4d-=!=Fmq~*gX zRHbWm-mTMl7uN5G!U9=kfrMjJ6jq(SVmOz|HZpz9t8P)gKFEzaw+gShMY;U$xn|$} ztMFRYeNSl8bDH!yO?rV!c$_3tzkzy5(wdi~8=UOc+rga&U7g};ez*Ms5J(j2|n5py|A7=G@Y*5Nu3T|u6<4+cA#=j6V#iC0}x+Zt~ ztl^fBDOB7sN2y$LaQ1Am=twvUrJ{rV20{Z^iQKz)&mKH7wDFkRa)Ni?%p;Gf9%wnV zKRTZ)H=3nNXEL+B^uzM73?ps1!IHvPFy>;ri}BYyc(`$m6*|8OB=9&UC1gEokOXFX zaw25%2K?rT->wI}0YbJZG&#RL*>e+7M${Wm<{Z_~X4dI~WN(lkaCr22|gRO{?rTXGy2 zfm&XLBy%gR$p?FPsLWb$_;>}7HN*p-QDXOSc}}?;gr30q=!PL6-(sAS z9*=0!6qN{5kKx)PD8vr{-o0M?UkNS>NR>Z62+M5HRC2{{E4;$jjTF|~wA&RH#- zO^SxrrR_19efuwJU>v4)$FWrd6(bmiLzVRzxme8DVV-`P<0m-uGd*uKdJ|4$6h03}`-A1eny~2D0Tv`OA`V>}=NOso_ zoyv3?P^ycGJ?y41uz{gnQ>a8mnwtfCT67N}Yy-;B2S%g%+ki6g!OSK0jdEWd^B1!oluVE{3LUnyK75L!G_A(-0-DkKBqUit`r+D7)%M7B@i5sl>W z3{f=fWl^OrBv>oR`hs;4uZwg{Cs-^<*tmi6K<(E?VR-ocbUGWS`(esdkA%{W;I+G< zXIuvm!}hiA*bY7~0A#`%2ojG~$nk0op!3?@f{XG|`Z8b&{1jflvf9hmPK{&*%+$DM zcvekjC6U#j*~^+W)?i3ZStf31xQ7(pHaAf8gIf$tG?loGfZI_IKE-`)5_@k!D`lGS zT;_~MlU@wSX3=Wq4MtWDT4O%M>y7$3J?|@<1 z7>q42uzFGOFo1$p2nN-9+)S@q>lWr)uc#!zVWb8*;VAIhUq^fK4HdHOMujI)Jqmtz zX%$F()S%^^+CI3i2cRbd9TKRJHz~SXgL;{W4!4#1*&{S?oujNkMQl6okO;z^NM!JV z2Y|r{-~(#iwyjiOTCeppfDWm@zd@63(WE=@RdV!p)ou6CZNS?Tb5VvtNHx;9uv8Q~ zg{ixGQjate_)IUxE7dJn=Wh zSFqSQ9`V=$eN!O^<+&F*-jxl#6mKS`7E%M@*IEg@4V#9{C`?ufhT|qVe#>bO?qfEa z&HpiF1NT}a9t#QqXXodMqTj~5!fu|i$3njm5^mY=2&9!hF?scA^a5&Q^KX;xknXR$ zRT2D3J}4jzNFRB3RRqG0bse-bP%^+5F-G}B)G7sgDL-db38|{p3a+hDu(wBn`H$-r zkbo*lDhHt3I$CT+%`0yA%rI@S3yYc7#nehPy%h-zYKE^<;As||>SI&e*fp>;gC1aM zy(HRr53?%9fP+iAZ)sqUbX-tX@uq7|RPv z-Y^FYek|yiBUj%Ny%qA8eRC-olQRDYrlBVC)vz%3BR<3!5BP$-M5w1F_T{8$0`uDbmUd5nrqp z$Ho_DpS|w(xphp^63UMhGTSEx=CXFCTpV;*S+Tf&jI~LPnT*JAoxe8vOX>FJbfy{< zcqzg@mEM$edQD<`VSCwY;srf#7Y%}u=LL^+2Wv8}@cdn0y7TCuU`DCQ#ck(4b_n;q z4_x_vu^qQF7Joj%>|)t3$`QAK+)+`_T0Qn%oqzL$L<1O#tTkB6h)%)@zU}Hu=urgK zdFOQdnY+QEK=4=x#I9clvYWTA!Falhx>E&B@@rB`lL~k+B~n}4Hl#@tnlz_L^P03o zC6ef~bB#>h2cg}qqwQ`5P$5cUc0d`c!K_e9F|3ie2VWuENHs#Z*#f1af~{)IoiNuB z+ktp(;1S4?U=XQNQ{FW3ifo6L{O-w<=*u~0@{ zxnZ&4AH8yJIMCW~Gjk9e5@V2vRNJ33iU^5DeKabD?Rdz?v;X>=O2Lu1J?$wi#RJ87 z$m&U3OvPHe5ZPGDPsvizpE*9yj0S3fOmaLAbICi*UCce-0A>hir^&0ILEl3${N|s< z7VGkxx>qa2SlX~gu!NAh^Qzb_gbKA_@6&yNCZBv%lODm+aS}^|cJgS2;KsKq**$RJ z(=?{mPXjTe8gk!{gHmw-^wmoYp<6NNG(fX;MX#T2vzEftd*6DZ@P@-}R!J zzXRw$^>=6S9d6aaIFMO+2mKvknk1;d`&Qu*)hht<;_+4R@2O{bfu7}U-HUV^wjg^M zNk$np*ork-p7`iIr09H0@w_pH{!G2ekE&sE#W81)-Ul160RtNZ{@$#&G{m7=y_4qK z2@Fz#goKf7Nla%_b}8hvOT3(Dq;k`;Cu|Yob{iu>t@YA)Y2vyV&!CqRbr&mV8Xg#g^*-mjPBg@ky+k|1ixKG7GolY{3j=QY~w}!%mEmO zLqn0ccVJ{B7VB!q!Y+Q8kscO(-aK`=2oc`$DyCzezPYAVE&TU5q-XaQi z6T^7NCWd8(<7aq2+;AoR>(V^0lwywF(s^8n3u44>&q!E>cak_tPT}XSV{Isn=ipa$ z{{V3S6LpLbocA8x6V$>qQ5Ud`CBjGn&W4KO?IByB8LRt%kAf6B0_TUi6__qm1mVNi zoQHr^-^LwTJ=Yhgq$4rujkM0Z1m*6P8>}dO5U>M)+y;)ajr5{$nT0j71|ZpXMK3Yy zB<&`i=tU5{i~m#tvJ(~Op@y{?xkphzJ)UjW?dd@QX-qzZeuC!pGb*n{rndwW%3wRj zqt;m}t7YY{dee4ez~XSEr`+y*B9iy;`Wslp?{FnEg+QsgIn8F>eW^^k;pwD}&Zy6n z^7xW&D~mW=YV5!QGV<=EEZ}o;EW-|OYQ?QW-{fM_Ad3cz-Y7e5tS2l zlHvv-;b*pSXdd)*?_9L=UzR)}JM)j;R5T>kW79D{Sn}sXB~Ry_{r4Z+R4_aB(cy)? zcYpa7P*TSax_GRj3RYx~weq0jj{^|s=2wP2L5A_0mAoZJMQ4LI9=T}@JJ z=cu6@0INdiW`?>LmhrYbMN$>-rV81v_%;q#$cDQrFb^!z`GsUDjL=)zNh$HuRHxy4 z<{OYnjR-PlsCH(c=e9uxWNnl>(R&^0Dj*+NR#obQUMAKJJrB^!-qKr@3}iK`ejIp` zC4xx5i(-6lq!QRuY+OT95lCJSv`Q)I9CO8ZH8@lcGX%NU*Y%Sys`c8-v4=F4;-35} zq8bsR;y?CQ=g;gM-oI|h=gy8_zjgEJb^YG!?Ai88GdMa_7sdL}Xt2F9khTwWo@9=7 zo*YMrMc!g_u5Wm`Kk39>h?~KCo{ikLd*O6cOxGt%!TH%?`(K8aGErY9k#u!fIVoFW z@$|Nm>_(oD%gZ|Du$4FQv%H?&%P4_zW`sEV+0JJe0^(-cs_>)B7kpXYvrexC{ zpYUgW!^|%LL^Plt^oh{0uO#{d5$AW3qftpstfQpsLf%q>kfwi3iu7P zR94;Kv%0uqSmQ<^cI$(WDi)-U{1koynG>)BY`5LiQEAY!CJ0X4i*GD05snukk=l2J zNq~fc)yp=tV`sHv!Bt7Z9M>L!!jE?Ip+i8J!-p2&=w zHyC(`vDv=4u8C0RUk$R?&tCAZOLZoqg|I{K54#a>_em`Oe}3ss*QWZIUnkakp=20- zui2|#!E<~+e$y@8W4fy_M;EA}bdWkw3%Zu_@}T@N)T4tn_=5YXK?1`AtjFkD1s5L_ zNg0`gbbNy~_;f#n&q(Uj!O;%@UhqQ|7~Kd0`VytVS8EH8Q{-BO7JH81<49%BIF+s) zvB30$^nX~Z(UEa_D^PnF_(lfkEdlQdAelda*N;J5gti6L1)-JsUI?0`q17m#lq=N> z_QefI4S9^=O_V_wb-8_16!E*z#J$mw#7{ia>3VuB5fDl#>*8a-_?&2B?)}!iTN)v2 zvYfA`EPi2NQjX<=4wKvnIsGn&g+t8gl?T)LdskYAm+J->XHSmS8KaP`1ud-gZ}7OX z0Mlt^d8*%L>zi7inK+S1o)}+$s$4#`p5c){E+&FT{lLz-w!iPGeQdeDH=8bQ8|WB} zp@2y=aaJkqXF0tQ>ze_;xl(ckjJ2wf8B|6t4xiiK$iAZxrJqF{$9^l8aU0~2Y+x)N z$IXw$3bC+DPNZ^y$6&adU^#@&VnuX{=a^G~b;IlaX&cYG4JOk%ppcs8dE#rR;IZm0 zl*E(isO}l&btqZ*fYJ;?iUx|?5B_ww<4<@y9aH>@&*65RUuhyNl}H`hyKw6*t^xG- zE+y6hH00`$IZdi)dk3^_Lz*;(uYX37HfquyP1;L;ORfh2IUp_rx*M4J0cw9iyQ8~A zLWJ;uNMQ27KKPtkZ4^Q>^VBu%rWA(9Dc6b)&;Mrnc&fxxiBumYVREo9)%`h5s%S^T z1sh6wth#SV+qY39f!ICTzP*}sL6bhH9S@It_bRFW_|PigM2c$dQT_Y7*%V-CuV11I z*ay`cA3n-tQrFO2DmpY#ol`xdwia(EhNm`&H@dx!R%+`TMeL;Pw0k^(MkQtT=Oor{ z6ir6E`Sol;vNr?9YB_&mQj#t0qxsyad4o5&ctpzkhGN|411z?2eC|TpwVprqYSFzgf%L zY`I#)pKRviB7?h>$6`yT;>>6A8JmTRpSXCbVKE@l#JdCTvLB&gmV4w!%L6MRo6jBE zHrU)zls#7e?#cG$zYh&YET26#|JM175G|PiIz+{}Ycv}kya3ZQ|SSq zS^@7GVc2ZY(ch-f+Ee_p^0TJcO&PX{Dty30t8Oe)3AaN!N$VAi-!<8{ir&cgHS&PR zY=pVG8fwFaokn>HP6my?+*GGHdblcGifzN^f>kZVU+Bp7(N zsq-6NFXp7qH~Y6|mpE=(DNN41r1)W{6kz2SAqirV(=$xQ=C>F`ma*lQ$6fa9RJ-=8 z_Mv2@w702K@NCViucJRiWB5Ie={Dg>eHZSt4>Bw8VmUgvBq$Jkkp@be8Z3s?b0k9w zq&i z`!$4WKMZXIY$F}T@Rjie&MDNw;FC+zc0%&5cIh_jRO&bNactK-PMKOGHBB1Sr1khL zHc5q*sD*FNDM}99R+-u_p5F9rXj-&zouOaFKP1%Bk{W95-NowEdR=%EPs-de@6Iua zb-ipzWv}`HSP`sPtkvD6y;0mw%#l{fEF|)7!!Ou}Y{uBsAS+3gcG%1#XT~n@e_}!0 zJf490bliqIiC_GJ`QE^e*#U2S?(m0?U3dS%rA&6TJ(Ol#i9yL3whN4?7d*+%k3x+^ z!4V1srTOS|fjN;V*%iw}kY%sbS+sj33vxzeJ!2HDcQSVy+?{wN>$P!mMmDl$x5S)m z>~aC+fOV%q{&8p|ksJ>FVK5<^SyuSe>C@$#Z)W;gg$YE-ROgT)B)8@54xX2=oi1mB zsYW0s`21l9Y1>0rpGGgEHXcC6l(4|fy4!RgWE2(h05uy3V+cphh;vGXN%8@S#SMgI z2k6JHXwrZtZPuh6__ybjrf`XV{*(B8H%V$4AMhc=`WC8I0@oj0N2yr4haycY6}Y+G zw4;%c?KZ3sklFnro!tppp^uteOr>jf>F7WT-9WY6Rp=C0=sr6BZN~F@lXB^AUc3E?J$1KpV&k65%I$sC3yTIpatV!4!ttg}vYPc$*ebJ5gU`QkuG)8L zW9J1=E18Qnqs;HDoWxta`J_=6T@jz#B6+U--4wKEM}2nh$oYFxcxVLl!YuPP^QFJ} z8(^1#IzO<2WScdtZgL!Bm1U0*O*NvBm2<8z(`c3Q^G1Ca@rOfydAc%xlD+ zR;!LW@$_ug!b@JNPpW0;yTz5snfljA(gesVumFw$;~A1G>a>vo&;X355xgFuhLl>M zenC{LjFZ`dlnf=?Nvbv3uIA)|EA}1e4NznBs|p9ZNc~u6Xm=$&;&I)FX|B>d^#W8i zxDu!w@5W%OwNSA&NCBY0hZ$NU{UJtQh5Gog4KNjO3^?mll215$Ki%F~?LwVEvmIDd zUjalCd#?gCo|h`*Xf?h9-Tz4?lyph=q;lkk#V+R=P)Iz1auw&J^tMZu@KZ& zjoY4tSk>W;wp@RGXG{8y$#wVV4c>B^vD$+Pr~Z0`#yGT%1s?b9!#wx(ZU1fiL+MsN zA^^*_}rF*H!XVl8#O0ywM!P+Z?)Qhos%~kja>ah>(_T$;bzDtn?i##TL$o$ z!#TWG-r>5FMdMgYL+BUSI$pUkpC~%?0={oNhuM8ecG8_nq+GGcN(ML@z`lJG^=Ujh zk1?MI5X5ELA&8FFQow7Zkr`J3fW%OrjH%LPuLU>}ggR6fTUdi32#{5^@)8`gywV*MFEl#x$U-yLOlmv8$nGR?03z)%~ndnpKt+UR_pfN40JLt4>1ku-)_*fGi91(%|H9u$Zvl; z^1t!Fk?GU>Hl&xoe*v1aoUlq3n=o_!(AMm(%~@t` z^XAU$%ef_H4pJepN$HJwohA;S-(fJsatr~fPB0uN<)Wda8&ALRhqD^>aNH2b%}9Q? z+t%0~DF$ustjmOKVebUbwRyA*^YjqRtxNcCRxxUMXDSrWO7I8a?OVM1S@aD1e{hRA z#q{)&6H0+oh4W`z_Zz%W&YyAIxW@5(JFaWvWdScc@p2q57xD5SUY^9ui+FhpFMom; z;QZ0y^$Bez2G|}nF*S_`=0SN494s6yArD(r7i8}&2@UZ^Xz`${0eZl$fNcpHb%>^8 z?Et2d0&rnw~ zZ<^+u{_&NP1L5zRn4cN-4&Qomo7cDXEj+gT>DOV`MCug^{YA;n?!ypIBAwV*KBqb?(OF?KEDJHAfU19mtz@=^1<2 zBPN_mnIMF%38YjEN{o4+b8Ne~rRhXSu<)rI*wrI=`4~Qqt?Yz0#^{EbOXy|hdpeIU zK+$U+YH^w?Y9vm<0rtKt)Iu+}Hf}$&?anKcfd!g9lR;6^!Io<8dlR%6!OjV>!G%iD6ObI$XN_hVkr2#a*Dxi*_ARU6HP}fRvfv78HHxEjD~TO>pz$l=fF7GiD=Ufc z5l&@*SC1levpwav@qA!V<`CdE@7AeAYI!gOV8M!SBP?(rvnX0jsU2SZxc<6su75Nm>E<{PG}=wJLF;M6Qn-CEeNurTd1RTM_Jdq{MVFV}?fzjD z>hf!-gpsF<=c9Gp(KU^S`6%QZ96dVd12R!;03$A39b7jwwA`*JsoU6?^(2$| zKzpT~u{#ROA3VBn{Zhm2Y7UQunHS8?KqfqtAF;?8hmpPVkCt4#Df(Pa%g;>SKolF| zZcol_vYHJ@@Y?N>WHFQ~F6Padb@{BbSj>vd*Umq4_R8bTGeCNgKGJF&$RIL$BQcmA zDoyN7V@-nX9D*$qWETfi;<()#HQo zP|Yl~D&r@KYD12S3bzD~6XIspsdX9%N@GQ#r>s%rAMsARXoK|uQ@zqcpgenmUMf$A z*(%j0;j~ck0I+=f@Oo~oTh4bAJwrEZT@8tN8rKvArL*~a8x2^6ZdwsMPDs+gnc ztfMSuvPo;_o$O@0-`96$8FB86Br$^Cu<@pP{icmWdp9g(a_hGpnH=4}aVeLcU)s{g zd_>5N@15+dXBng2oA7viE^pc|8Idi&AK8?%t#_2G6-PoURjbZ_fSjcno@aKC zj=4Bi$zyt%;rSU(&vd>Dc}$Ct$J7-b1&Gg?m+!w}@Aj%*&n0HJpLz0!_p1f}aNlfS zeFMFUz;yyBoy)*GD$)t(W?FygIHfs(q|f8Z2RN=xCjg67w|1*0kt05`MlqhinR1uz zChAjOqLc8jG7doC4oa}I6(R$U*iwPXxL?u6;IgU|)})LkwKQo4pOLhWtzy@|3^Ku` zk(p`FDydm_R{PxtHR)a|L3|_A;~q9h*H-anT0O>m=DjWe)awFhQ5?K#^fT0z?QRmp z!!`64$i>`ascerq{T8cUGPxqT^ClE>T9sh(d~Kq_uLx5hi})-X))_L zNiE@`szGr4wzY1fI;0(SQ3Q@W2y5J~dt6f4PNAq4R1G68E6DcUtdy+;YE$(%IREp| zbHL>X5f)bkZe)OFcq~&}C$FrNSjQuoco{mG6Bno%kD6yBmAqTMU3jc%`gkhs>yXwb zh^$td0aOPdKY&#ooRN94OZs~OiG0Bz(qs* zPifNA+IirvfYt6f${*QNY`jbMpQ6*fy3X{l08{6kbZrR{k3^gZeLbXcN_Qr?xjY4r zywCWbkeUEb)jBa9=ndK9|<}qtbwHfyySg!J){68aykdWB_FH+K?!7*k(lHoG|Rk?<_`{0 zt7u5imt$*MTZD_F zhgnan8BU-ash(ic`yGMzG5`Je+rvC)e*F*pbV@(}S06Q}=0}!xR2`fpBUrlI4-_-94~zFfSRsX52z8(+kms+?`Tc z_7=j;eAp_IoZnF>}k7&wOdl5hsaTF zS4J4Iq#VqGK{5?8h}WZ|7RfluT16}D}uvF=jRHAr|C8gxq0L%47G*-nidkbObA)8i{5_HR6n#V#IP#?iUoJ#T)X;qTHiQv4bS0f&WiBhr$_m zRdBmKwiBjF#p{L#V;E+${)Ai5JEIa}Yyl7Rt>Z6VKG$crv-6DWt@ib`Sg5bwAN)_O z#IvbvWGZH}a;|D?JZ&;VtbgR{v*;!E-xWUr!LjVq-Nsx5SQ>GiUZBa?M#_Gdp=>fn zI=I3bTugxu`@q^Hg?B_?60&4Qbv0d*4O}V)%Q< zY8MZ?m#QgnRkirtg`NQ!WC%LkLY-3(GlBD80LA=j<0>pA2Q=cx2`CR^(Igj@2$)NK0khiH3hikSyixJ}Km>jg<^@-*fxmb|%U!{v zce5pRL;nPrPt#s#xjxWkv?6Md;DUewmo5fkR}jUA7#0Mcm0i5<9hZ3^KGYR!n%r1iuxOnwb=ZesSy52FYxnubieAH*xy2;Zq zY(cMA8cC5#!#%b+70?t4NPgiJTkwv|kWOpd0>v5wBmw*L?-c zFJbv5Dg(DRWMcxI^Or@SamEY2){p76l*rCcbict1jqLmc59L3>`qoeI{rp6?fR~+k zIgXc$czF;nPvYf8yu5{%Kfwz`cK%ws_ciU=;J$tfeGPJ3z(f3E1&YoROxZK|mBacm zn&+v3Q8V+6h!|wnX=n>`L`DgRH_a9uw7^VtCc+(XdqoW5CgBO}D47dGYGC zC$!%krTz1isOH-cnH1F{`_*dmM|%dKQ$3pEsh+_I?&F?S_@KRareYT0NngeCGxU=^ zO+VSw+9xB&12y{F%I8z>_^&l-jY_?9Fex_znw@ZcNsUcVrcSVY&(c8apGAosCnY%$O_XPI;>KEAJR& zkJp?vd%Z3Ln{t-~F(e9t-r|e~BH2jLX^*7q@%&OEu|9*iNe-2!6N#mCVnb3+Wvj0W zj2ZC^%i9CFR?_12^v@R@#NY1-+-r+jWC4m_=nZ{>@%7oe#$-wFtPc!@c$2{$aIg%@ z&V)E_kmHKSYmkrUG%=P)yNov>J~)vbZ_NdHcZB=OM z5o#f%|F_a$AQYSl7VL>+T<}^Gsf4YOIx%Gxc+SqVmgsOFzPA>Pz)$o1D9>-NtuK|< z*S0HvJk23x7xSdq%8iuHz5dbDyH~PympO6p-dE3VI6j#$ap-3}eqbkGsnvE2Ound7 zI5cm%`bl&i)$yPLzQsD$GxjktP-pWrxJ9B59wprl+;}8d>**PXO`=L6(8Xgw>M0zf z(!QvK0x)I+nE*H;)PPp2r>l?Y%DO&D&Ad6VM*Yr!BOF#BwWM-DfQAA^n!*)R7*2?y zqXD#gZcFUBt=_EkvgV6if6Yy(TY*LsSh%6qB^;qfl~W|~?tM6KRfmU?HI?YWyr$GN zDw->Um1RwlR=X(sy6gD#^hubQS^32D^bIaNLwCN$2%UeS%L-?l=6S@reD*qfnM2mt zP=ztdnTpT&t&{8ILSwpAohZkz{IM8}W&&wnE)|!yLF`P7TbVg)Tm;z`k~?q7!Sv(b z`#57o8Sj<5aj#t+zcrA?gj77FHx0VhcIaHASrtpTHyK}gujKPo{}uGw5^3 zK;w&tm=w5Q#wnyIM86Oz`lW(wS=w1(4Ui%QZMjN3J}Rvf$ZAS09Oqtrf7~U=YFceC zDg=J7a7zIvHiVr9DiCKRri)7Gt*7zFGWC>NsLpStej{to4Ox3G1TwgYp~u$Oz|S;5 zZRgpZTLA4|^{7Hb6U-JcISxVf1Ke{PuGk10bG7R4Tc!;4siX|89=fqn)Sz>?Qn{Y` zee4>Low=ELp|cB?pL}mUeAMyIE=X8mg;d{6#d!9SQ0S2hrfr|usCPttQd|zFTn5A~ zeE!hviH&X9<+pOOb7$LI@tD?~S?Rai>l@ClM7Q0weS3NP_Ivc6q^I-GrNz|5a$=#x z1pRrXAkscY&yRE5IlY1H{N2V&r;fHQcD}sn@I42ozOWmy2Hs*5j478{#G?Vva_r48 z?+ue8#=Ne2^{ePjG=ket2-{TG>0V)e1x6Jqzy5hz^x94N^wcu!U~3Ycn{+gF#;|$dUpitu}82Tdj#vIN3b4y1naR!upWB^t4v3*9(x4q zu}82TOBgLr<4%7O-wi7fsyQQtroz5^@xBMZ+*7uEUL;hIu>KTXtJ*gl4aHZ!NbgtS z$pmi94^xyLqNu!kv28+HD1k3e(qd8~eF0+6gNr>64)afN4SfGwXkJbopJ7%~InGon zK`7U(G9QDimYAB=<{L=6+d?yc+G5wcd1Q_Jf>61@ONmiJP~gCPY?Z849ri~065tGK z=^uCrp9dLU%o@RX@GAM9TI5sBHs{|zg4V5N@E+$;ysQ-m;Z+=8qNn5(&1-wV`mH^c zWQb;p+?~H*N}a!$<&oYVsw@rfJtSkZlArDTMd#;oC2IA(3qMPpN|MLr5`1Gx)u{yV z+2?<)1m?c{!1Y_^EX1i47zr`+dp_I@4$W++J#GuQojzA-*eu5^7S_ZYO=iR09Oq6r zt;nJ`RA>8Bg6qiP)bhfl-#@vyoMh27?st*P2cw1H4dp2ANgR?3_7m=WtS}U9h6JZ6 zG(5BA+OQjp1uO#Z(()H7c3e^u^s)3m)%z)+h#C zr5$0c3^086aQ;Pn*oh#JMV_76}^AuK8D_UdleJ;{6rT!#CU zhCD$b=Ub^#^@IXNCv`=cRX|mJSoeg|fQ?kb3K6JFYtRYislEmQT)-2+uYlba*iHyg z{B4C=;*xfhTA&GJH8UQ5wMWS>*+-#J03TP`&f#2_*T`Bet^~4DX#unda3P(<7kZR} zh}(3!L)0VmpzbaTrXg5`2rbQdS<@HcF~@ankcsye z&@tqf@W|>pAdslC6m8PB?$#cj;Bv_baTwnp$yYh59eG#Ji+EIf0R%hm1lsSO&{vu1 zcrbNw z)+oECZ|jfsyNr_Anl4t{a=nr^dYk#FW0KogUf20kchcoaxOd-9*0)WN#1dhlR9v#b z6e;xiPW{v(JKa{%HL+Qno%Wcv0yreG`~Mn*$m zzkT!N&K>z(%^Ut8w5tt=Uqc9eI~CXI>Rg~<=h@d`~;8wlcQ8F zO02Iw0a-4reOj1&Kfb7RL&oH+gd1n>FI zIWxe@&h!7$Gn{YF6buHZeC7S#5B1C^+5LdhxOJV+Hs9v61w5Ay@`k^~HBf+V#jMbv zv+0s*NFhV&G^7bbTBQ;iATj}T-&-Y=uOEbw1H9K#gZ97OZm}B;SG_ zVF&dA>5^(lAu17kk4~}Mi|%2jkENeEyY5Vw4s=)YURjTA5Oy!(&4GBG+u)tmrPGFV zC;beve!>523kZ@ms4d!|iWta9$cb>UF7;b(T2DK2W3EWXm*K(KpY zGOv2g2k$L7!vUZ9eNRYXe_isp-Of!{&E_4>+{pH!=9K~vFjo_fG@i zt5r!76LY(-oA;N4a#FG=-k>u1(qRBfHvc6uoXSawWX#Tx`kWu;FYtBDhrbK`hA*)X z!F0?~FT?hAI^}yS_vlkD$c2m0=Q)}q3oUvPoETk!II38|-;iZ{0G%Df9p((Z4%~h1 zcX(OPvW2o4gH?Di!kd4FRJnTb3293k0ay2Aof{2-5WxgCaZ8m`ZdT$-Hce#<5$vALd0c ziET7t?Z;c8@P9C|+|r4~-cV?D|AAch$$d*uFF=Ugu)I8b?at{4k4$Eka}}4zScft^ zld`hSKjXzEQRvvd=U|UD;M?~)5p)S7~kwQBc zVAbomW{eZqef!vHmKXVPf%m0@snkHQV>~H)E#5zhOt|nMyRhL0E7?Zsbw5DcDBqTWUB{_{>z0HJ zvHd-5bkI68IVo(x;rJY_YtgE!LbHS+Pf&CuhL0>S9~ewR#R-m;;sb{^Z8$WXl29jU zy4g3Ht6zNN`}3QA^q~!BuiTwq_|`*rJQmiTyd$!3^xRI9Md053d3W!X9gajQExWwx z!a=t;rr24@;&v4e46vWXRijvc!*j1E;&a<{c&MW{aj(1k>MdI;d-pc~Mi7PxgY>W< z+$aj8obak>Vnxv^Ns2?16=k~H*Qi$%MYavSu-gvqWsB&K_l_up2l=D?XSkn3wM6Ds zl4QV8n3Dv?g5^NMF={X=2ZR}z`_m`dyS!+^8IZQsjRJln;H0uQ}A41ZgXFvDSBDpq91%+M?`eLSw z#2Ko8S!g5V4a6_*T?0hr4#uSDSy;a-R~axZItL%fkmv_@y+O}Mc44j&ViEOGFNdCg z%-}Qx@+0b8!4N>zJ?bi6@!&CB%s%`WeQl31C%33BSBx_C3nC86X| zYzs+3y=w$~)v6ni!2v9jYBph2uB5L(BB*4(p0<;DvsXh)5znQ%OKEp(x*H9mMV^1r z7VWJ_d9`OWW);Q0LpwL;?W!c1J)ZuK`n9#@zb6VI53b+LIRlYQ;40psMtx{9*W#LF z2Cg#k#QVE!Zin5jSS#g3B^h>o;uGwjf-Nv1aLvzzI`TPhX-k>iwD0`Y`@5u|SlN91 z!DA=SX9U6NlRN>ZLlFelWVZ9)nnI&Gw6RuRNTJUg-8t18RU~A+cTFBTw|D35Ss@=o z3z5ra;suMzB695c|N72%kd9uve1U(9`)g)9>!kd0RYKaKPn^Ds;~`}K`|$r+wDq8E z25sBWb_{JdqwO5pK8Utg(DpgBy^A*I-f@xnb0qu>ZQNdx5SoL2139Je`(tlc6+-3x z6!kxb`wNsq_0bZlzP7#tvYw^_I4GUT0Xl5Evlx81S&V&}#@!qAqkc*+1;>GZ5%#(h zA<(8FfxHd;`&5I`laBN{S_5oPorXPuhLhY`9{6^A*#b z;ZVo;;mxeYGJoZAZz<_kt5bW&EzzN_OlL&mmAEGR^AiIzs~yf!xqtg@o1}GJdZm-r%jKj(4vyYDf7%6<$?q%(9V-$b1uC91q0 z!aorxj`yqq%_ac_Z)?kq7MOc*Rx);&6@wmu27*T5R_%T)1W15yC&QrLsH6;iq( zFZw?8R1ed$04=Rc&l%Dy#y#NEzJjj#3eHMx;g~s9qh1v~rw#|#dGC8_6Pa5jV`+U^ zLwBJFyq@8u+= zpDC9ndrEFj5IDIY1vNq7*~bLl6Vx2MMYJq#I9cjEd*I-`_1Yb~O?I2z+_Pc0H^K4N za90Owk^3_{c^C@2@V`4oK%M8UK3@hS3-lq-a;^kw~W#hto_#Ond4LmIqym7tueGPYWqfU|O3Be>0jz688`3!EcxrBH*zXRGPR}OT-FkxWs4n=*^U-u+4obTq9XWgXQ~cNX46;mf%mA~< z+|CXHK>(qRJVIkLJ803CMOp)iLB|)VGNnstB$3h|J+zH*`Vur0Sw{f92W^lH3Za5i zbgwg=K&}{|_MimC85p(8)SGkzgb1tfAp04T6FWp7groTc0+mRP>L5-7nPvv@F~4zE z+K_tIo&US?Tj7C$>EH&rg_Ye;$1SuSzDWK)wnol91u;L9m?e(RoG~P*7l_Z{GN^2? zNQQ~d=9gQSP|kL>r6cH;0xAEPY%Bk$pTYiSp!u9N_x10oNF(+rGlC(60>pUOD6|H!`tuJv**nA;ZXB$Ols0& zMT5+=e706QyFB!Z!KM2vmHU@?WOR}PfBg0RWq0bald+W)9I!Ejlu> z@KV?DlCN`De;@C4xC4QxmW&oM`DoC>xyFv)^A?HubKG<6+@>tgJ4D`N9m92q4jnpj z1Pi4B4?Qq}a|q@xf1H1T&!XS(2y+$l5MjrGs#u*DTY=kCZ4+;{#f$-&VDL*%(9TSJ z_Y$*-iBd2Dkx0jb#O>X3i~DxaI0~%f1ZNlnJ$Zkxjz?k@$>A=N4=9>wpGt?*k}E!JZ5%aHm%E0~(^N{UTjS#zMXn6g&7 zL+BKXng0TjsM~%@G)w+cgl*`jI6w3qht@|Ea#r)U8>6RDDk+W(SwQMwf6)bNXjmd-k2J3mgYwLn=v`>lajIQ=32JX;!P-S-eYoy^5I!zNPoi>j-|YHUpf(! zj|^N{Q{9$eqpK&9-aVfj9-YXU#AyHUbg{OQ&F`C7zJCyy>f9DVDy_`EcwC9g{#3|g zkphaRSZT0N1^R-LlaCx)8NH@#wTq(H#Cb}yJ(sqWuIORE7pd2(!DOgbtAzk-Q$@D< z+k70&ss9^>1qnY(bS%LhsGS&UhQWSyjb?WC;_5B|3hC-JE@bG1y1NH7Xx-teL$#pp zOJ|#Q1af8#0vElMhXY!mw#)3g7MP1W+ZGhKpH8L_l!?C|K5r}C>qT_nd5jt_SZUEU zpq4W4ZF3xw$r_JY4aca6fAvLu5)&rBfCOSi*>gaCn zbfDgmvfEkKVHH!^ex%leYX1^UoY+Tx$FmtFpvIQ>T{F@Ag}d75@_Opsoo?1QapnH) zRj=QgUR*uUZvr}wm*~Z0{Ec0HlYf=(VeHH>^8~vSfN6xU@+k8J)$mW_pAsmZ0X6{a zlX^n!6LKr-AGB=(dIgaDCgvm_iZ@ejq$r*#W*5GRl}bcOAXTEl6wzD3A5LmR1Hs1=wB}01xV~yg-GNWIEwSYLP@XE453zxEL-wPqr=*W}~ZyQooD>K$pzFzz+!*~Ng_9c7g; zj{~V5-JjUg)vANR8>x=#=+oDgX(k<&eeUMxJ2;1P>q`eX?mskiie!!KtjAI=&Si1O zx;s7`4VmSbWM?JOTi>w~+1;LePeS3Q138y3rkcV*Nn>y3EGBos zX?prmzlC>+yxcgrYVPdyN@$^Ua;$gquB(cXV8&#(c;d3Nr?w&XV6z;p)p{}s{0P(j z!Ty>9+?C04D&_@U)@fqx(Y^|di{Ren=8gG!#3^VYnd7B!fD1vGef89D-ZQa zPE&sG@#_XLMz#C$@9`J-VKfc^h8lw;Eao3+t|1g^55lTag6fp3)Q1?Qz0r?{N2YD| z0$I-{guVy-K?F%iz^LF~)*YB2gX0orD;*mO%JMnR$Q>hBK?0?IJ=C<-@jbxOMeyk@CIsC+6U~WHE@37p9Y8LUTv)w|TdpligA~zT zT8q3@1D7JfjdEEjE^E&eJJ63=E*GStHJ#5(X;&_vaWuc|WdGXE*_ug5Db+u+)Hk+g zrYGd+8TR`}du{0shg8l8N^Yu$m8DW&O5vM-Fma}+j83TPQg5%4NaZwVRLjo}b~u%U z-|nynRQ6jP3*qo=?KVd&5p@)8k$BAUMH`Z>1#2W0a~%8fm+P;;{!{2ZsI&Y(XwC+^ z@C&?2*nsBbT3^g%QZuT+D(Sc={s+r*!<@hlhU>M?kjHBZFYnl$lbj+ai9#d>NwGY! zohp}~#pE)JT9ii=Q4UN z<@Z2#bwnB|(5!3szq=|5u4TcRmkthwEmo~C+Nmbw0cSj1kMw2iLC@&Ps4F8$tXs4> z6n3wt7SnRQyW`QMQ;@6)_u|RfqTLcK43&Hdxz{Xt0`h;lE47+hcLALodwsl?jk&@L zBhLK%5U0w$V+repRA05AX7@~A0A83tT5$?i>C&2iH0Ov(^&OdX+AN2h3a?mG!C7A5 zS?&Uldi?}Md(?6$km!w6=W;HOrTXMvy9*g#R?Z>^C*w02pS5xKKA*rzCLtH&M3El{ z^~0ajVp1?1^)%m+3YDt2=BrkU@|_Sk8b|kRem0a1%7R*w&73nDWb4R~7!$czKIE~P zM6f9w(T5^aIhSURZ)-Hh!jdY8ibYH&n@(>gTZ)jnS@p}$^8bUoh}QcwbAWjt^J4&Q z9KoG+6P=dlF)0F>)?62fQGO6|Z!bdR{~$H=W9V#Be13#V?n-RDz;VLx&V`v0C)qlel1Ca_Yc+qlqwHt@ zh`d>&V_2=Kj`T6}cDEqKQEQ z%maF8Axgsyu(WCy$v#B?hR^~KR;1`YL)*c50Emww^dCTNfc3*-D~W{TqBIVfrhO`l zf%7$_0ky%w4fPHJi;x+rbYsrvf0_ZWp?h}M(az4}duCib`qgGG{TF9~&3Y_5Q|3Ag zeSSa=z~-HbU;3-^Om^!}KJ_V9{_JP#Z@humtM1D$^PlDWm;_TmgXn4ICFa8rz1NKB zy`p={VQtvM9H+T4Zn}_Fndk99;;BT^a0riLdyP*(ChKQF-Pn~iAfnf=e$bE}F{Jk! z(vws|Zw61;hJU47X-l#|FG=^6v`|zA$97T=prc8hfA8=y0_^Km@is?JE4iFvjsG*= z<(9N-U8*cu9I8iEBH2j5rPflZUe#i?L?)}{+DwxDNO)*&*MQCEE3U3?uh@~sBP$`v zfu>JQ4OV=Oqn(3}Lapm7v7WB3NWOn;b#iFS#7M3@y>xWR=C(RSm&t9BeEx{{e+JTS zk6(81PE$aMO)l;3lQi%2?IWM^<|NK)cNJ@$x7gKST&pG<(cwr}Af}v#GX z8@I56S)2php)#5LR&islSlUo*GLc%f5mkK-N2)PXu@`$rViKBooxCrY>i4HsJIn5J ztpd(#o}bXu$*^FyiXu|d6`MO6%Y`h7aik8JMW@I{0+o#mvl+L?65l!HFzhbG8%eM`qiEcHkB8{>Cgv)390=V=Q5Kex#rY|n%>wm7fU+x4`;!z%18r#q zJ9@}bl0Oa^>MPU{R5XsqsCqqMC@MrIp!j!~{l=Mae~c;t^Z*2x_G8_fpcOe{XnC7l8i>jegp0mUxNo~ZzZFr`pxYo(3r$_+_3&(8~jCw1nKJ*4hFTOGZr=vuYk#$vp0@4 zQ^CQYJs`>HLNy%7+0}@gO; ze(KT$F4czSz53-3@t@;O20!#3b}P6PlIy^zHOddI*X#h6LxAAv%+P>3ft0@*HR9@+ z!ZgX$6`iv=M9=QVWr_78(6UI6=ms1i1Are_KdXjq1BPTKLhkZLjQ%DmGENF-3{ie( zGtEu}%0^hIbaV*3n>kNvt##)f?9O_%vD4>s3^!8|IaEhL16c?L_y}V zvqKd}C^Pifa`WHRvQO(!S!Vw6300Fy_mX_qxyvu{&+|Q~8zs=nKFyqB9%SDKFXaGT z?i&;W&CnT+AW{MI2DqoV+zKnF+kQ5X0igqX-I)sK66_p-HN^=C1|6Bar~@6^%l8pk zS4yF(j9xEjGrbx-eg`P9?K&!vSrK#iL07%Lsx!~R$t3GxkPaO`{Zc0=Lv02F1O7XP zS~79#U&b%DfPfHZ*B`&s_V|Nsk3ZP<_|P8-fzD<_x{gZ3xp)iCzia20?RhV4tjfQK zfA+UdfLw=&UX<2XhfWE)Hs3~6t3$Qd6GpP!ndYxp&#*h*F;p%Ob|gI}PVix`L)l&nyWd zIz{mJZM}Wh)-$_Cn%CL_@`A-_w~8}29N3u7Za;B$dG5Aj+q3iUeDg>*5 zEOEY4VvPNx&0Qo+t(8KFtcIN-tT&$smS#hXwQna1eh06nyrLtZvYzHG-dw&CzN
RfD#Uc6^IB;>$Eh;2tae}2DHY1m`5unlS2Jt3v-^m7uI)$B1B0?(f!Ri zGy&;4r`}PNwvGa_9yUnGterrf~gI-KX>mkisKLhTj zr^y^JTEV3O4&I|xa69O&fKPo8#sT!d{wn#{0R1ZZm{`SH@_*mw+an->HVqjn$o1gI zU#1c^|h5#0#?da zF(t1a{4nq%K3q>0smOo}spDc7?b!=BEYj0Lm$1KT{(|)lIcojG!Qeno2TsCqR{92m z!NIrnhtEsNBE8h@xK455N$Eu5B5^?mqcA%GK+=bT3UvliBysEf{14L`|kV3`SX{a%x);KE~&n&oUEk-4u@uP zn0-=3v#Yk!MxSqEDYGHn<>`z-0Wu*nQ?WRmvSa#qs_S?-e7x)T;xqBJAYdqXZhK}n zV&=V8QBmH{A%(^kOQxJJL|5XI&x~(Pr?-wj!`7OYSr%;{Fk5+NO5!++$!>R8l%Qyr z1&%jyChpVd0S7sLDL4|ZM7o2`f6VMEmv?1Y_uO4$7Q4m7PrP-~4D}`i+~=c6ANnpo zfpmi~>K_MLCpZ!&X^OQ&@TK~P+S@)f)25%a$9vlK6KIDJ zc}CV*B;kSfGAsCjCebI@u{2NH+WR59E*CoGf#l0GF$H1JU5-sPtR@c8Cac}%*T5}&h$h#XLmuFb5gOivdWL!J22 z!D!ZNVFPj10)0s}nAo*E`VK$gP2P z4s|Zgl+0ClD3+yT<#9q{%VU6)0$&e%*%gW=y}L`lE-nOWH!Loms7ZxdLyHcMOyyKX z+#1)a(}tJHHrG0sKi5_I$KP37t_ktYk6S^sNhOl z7Ds)Ucu|hIgVV*1*{C-lDPzU#@qTt7P{`#2g>XkMr(HnPAU}=$VpFN+kAnR%MYVp! z9nrL)C&7Nlk&%$LYz>yPPmb@N?g=X{QOlGDI+9&UoWmQdO!v4v4in3gxh{A4gZx)< z9=w?uVxC}s3>}9oez()b@LC|!ED?(f_79`>+wsr(aFtkqI%5j>7r+DUq7xGA!4nO& zU|n?SQ$m@aJ9le4C1agMyUawWP)wshI#&r-f zy_Kpy@c0mUJhuk%M*ZB!sYEpCZXlpG(zh_#Zu_dAZC~`MvklXlc|{{aXfn6gbfoEE zZDuB|R`*+2YZ!)FcUzqlmfzU?JUb8DrEk@y!{O;#b}HYWtBc|WQ4EX~mBi4VNNpt; z+Ehc@wlAWlBW4>rX;%bK!Y=W4d*KnLGM9R!a01IF~C|@mszkh|8kz z<|q$NkkcEt?NIOtSmgLa|9mJR2vdSk&TZ}~Zk}v@EPJ3<-Q3Mi&fPnn_Rf9$piSh_ z;l9~Q#AQb6bI7Dx(y>9W6{?hq!Z^<>kw{$KkzG&)aX&A*%j(N&%_>{N9%?s>)un8v1I}1ZWUO>I(?B%cWC%B)`nm;qlzk^$#LcPj?b)9Jx zmpvu~J$iX3&}{XDA_4X9N!%gKZBzX3Hrxn}3XDOx8}S2@yXj6d(3Qakg|<29^Ytq6 z^TNR*_UcXJ$4b%1<7qXvl&o8jz)n=8jzL%3W2D+11Jbr~7b$B4SaWD@ru9c5#fbz1 zQQt}^n1BUacl9Vs+#8Kn_8NEPFMl~}HbLM_JJ1{IYm_9G#NJq`)aVQK9(@0$=eWa{ zo|{6yKkpw{y=B|>TUPu1kfJ(y={fcvf6W$B2ReL>&JIZs@MRsHb+5NxD@kDH3HMz3 z*u#N*fIH@?0G|TutNSi}JeUv6lR9M8%g^&~^Ce7%`R_0|cj1>ZM~#Xyc6kzVRUJwo zGW(b^9-dA^3K&wi169x=im{gORXZig+@^)u$zY}vv?dz(20ziiX?M(tNEE7l}-7mfBfLU zgPXihADaFBn|wVzHCb|s#VfBnRra72*TPHj{;D8O^8Dl9S*%a{)lx6_YPvJ&vjEsk zv589X(k-=}g_)}!>$G{DzND2m@$BBjxPq(VnM9AHd3OW-9_7nV@n7IanLE%-{eI@7 z%$qFk0de$m;rz4!S}y`<&ZRgPTLA1Ssw$GvMU9{2sv;gxn zv_XCvjCk<&$MKv2_IjKNP$f>64p52WYBpm>(*cSx573xtn5Ho4IcgHUVVxd9l#S6m^XUMvP=p_UTK_tjUnA(NFOnzmksF+L;5t8Ad8u@aA$Mo_b?=N8^w%C zuL7&XOc+Lc+lngCIPCiPDxs=3!mDsDq(4wiRHq%~fhfb&>a7WH!EDGs8GlU* zMzg_`H=Rs+xY6W7cdD@|KWt|uYcgh!ge;0unAH^jrAtbtI+(G0-P2dcO$s~XN~qC5 zF<%NqQwi&>;26bWtGVOlj$;epFvWk~AX?3eU*Y9Mx+7xe(07m8`P9xVIbYydZ^@eu z_P72v+mYqO@d>q{n6-*e@}UKjv-xw8z(njJB@_rL1y?8(QJVjf9nBU~Q(1OEl>HHV zDByHiLyKA2^QVqzu8~kZmh7&A#|Lw6`SOSPclaTsNxcDFeib}&NMG-`NLDpi-E`MG zq{a`@u`ogRi+}`&{Q0M=fYpyuydOQURfwuwKRFKDp&1 z0{P`NvIpL>SF7aQ*O2@gm0w@0bxm1n!psJBgyFD-3HTH zW?fMd?2h6o=rYw_vH{ERQDEK?R}(x#Z-P`8#(AZmDEFw^V8bf$p`=?DBuR7S`ie10 zN>xV+t0#Feld+0+vuR&O9crXTgS^>4k>$lXk?%T?V(pgBlMY0609m?fbRLt{1&t}ux_*9 zahzhUQ-a9eWA)f#G0|n)aBFwZ4dYVGq2^?h$MHBXnnf+Dm}0%#VjR*nhQO~}UQC%R znw_`$@(C81gn|&7E^@-4z(vMWNSWb=ICpt@SS@JX1G|bfC82yex-yPFe~{-l055*< z^3(hua{qxeF(~Oc%1kofWWK|l0!@;bB@wEsL5GC>d77LYky}oGP}Fo%iFWtEcYq@k zcgpXeBVW7-VYBZrUsUu2WZkg@#Cv+;@_D(%i14)B0uVplrgNT`TjjJD&~viHH-e6Q z`(g{duXB;_q)!3MhK;goTxCc%8q#U>4JYuO&SPT;ZB_D|kFAks1pY&K4np|{%gY!h z34Dk7jB%H@sD!>RI`eDj%&(!ldV{xk+Z`szb9D1>T`1h}N$-EZv zs&2ba{?~9N7>Res!o7P_-Jd!hn~e~rWp?%S_403T<~7W4MJg16+J%5mChEttSCSwq~KuMWD5R}6?e4~BAx=KP)7R4SMkNFCPycY+k)Ov8)9r6d| z_#b`*>A4e^pXEP>)@diBB73lt*}@!TNb;jnh5S~+8TH?BRNLA{fKAr;CmLy0g+ZTis}j9hWbW28~>5z??3YB_m`Ky|L7y%Uv6Gq zKAz2O&VEs16-zRxX3`n2J?u^m_I8COKf89|zQo*(J|G1`!cD7qIfN8u|AS_xc}_f z{$k@m;}06QFGshWt~VCKuDH^%wc)SU>S1rhncdtdUpp6_x`yOOWiEe`|2p?~j0Nc{ z1L%zqTo}&ss1m0@jlwX5i{R>W&>A0lbpi-r5T-6LT**;n-J!RUFdVb+YH%vBQ5u@8 z>-Z?IV;cYE=#9Rn$5$U(EH8fjtRoz__m5XPmqr`DKu+?_?7X6H_sz?7zfzsp-oN<$ zhZL{l{P#Mw{#vCt8TpI-fB(SJ`))XV>*%#zTF9P0Hc`9k%%dx)e~n-$0LSh4@Pns& z2lsc_BZ1DV*yYkvxlmpyVlK58_zQd*S-zvpMr5<@XP&3F4Y&@AOgEl+6>~Q@@3) zt^Yybp72|Or!Gw0h7cdo!;{6fsKGxrV&B)uye+VOWTZ)3&`R<#C(MP06=*O z1>N&0a7fj5dd=v8vv{4S_n~>Rh6Z-jYV*1fGkG7p?JAt;_(Dne@oJx;3VX42#_?d|Uu9w1 z>=M$gXaY~>V=cBk=-a+J?7dTvC|{E}*tTxlwsG6GZQHi(?%Td?+qP}nwry?yzM0*b z*@ubQ_&@H{L&b5TDl#+9$vnx}4miuN2&T`L;?;RRHW^i?1(1LErrW-k+N{)kIAIwD zFii&$P<(yAoW6gR^|_u@e=mv#PFM>YdbJUNYD-h;rY7z~LC?j2K}B|CIs~-DJ!Q~% zHrugiA#UCx(U?ZISG7cSM>oJ{ojZ)X@Pw1haU6dOt8KRR>(y((*cpP9e@7&mWFzAs zxuZ_ICfKN*OiKdH5NeuJjmZQH73Ar)f(r4Z+jlqApC^0i_uZ!Z4gX5EE%BdDL4BRSBmsyoYXVNy^ekhN?auxB92##axYHDkTXyf1N z?Y>lLLG0`4;`y>v<4l=ej1w_vlU-dRO3V0sK;hkd^O(`SapCTO&%f)mzCpgcy2foO ziWAHYL(A72dY|1&C){goSO#)tO$tp{krJStrn8Pu0;S&z4*oA@1=dT#8 zgg4`J;n0k{%f<(@_3PoNQH>Z=M-HFUIF84~Q`tOO5Q7;N)P+p#XtD(jwS_o|Z&wM= zS9L)Rhn`j3TM!SVShrVtW;M-c7A6M@m7Hda3s>G)Zz${)Y;5V=*smtTVl>AzwmRyS zU}&xvRO#MXhtn4jF{J0Ky>?bD?I(Jo9M8#$JjPDUr3;5fKV1*TcMpXazYo5Xk z@^01-DQ@HzR_@2__R(42WsOrkM~MUY@1)f)Kzk!PJ z(}-SaHL?j!>X!=(0FtkqDF}gMrF&XQems#yCi`e?F=IzBjwjw&S-kU6YfK#n4ub1e zNBA9fI6Vf1A9wb*%h=w!KEE?119b8N!;POM!7_={*fb}Luq^gag=;1j)O`wS7x}Tr zM&M#Qn5N-jbE=g|;f&Q%-B#&^QtiNxLdRvM)cq zmDm3_6e4exZ&{FSpy$=bpi0hZgyaOj-=TZ}8Ugx*7%BFyTD2M+Bi5m2BYW;1q?+Cf z?Z%(%)=clcgIBi^l@+#$o(%iT2f5lA`q4EchM!R~G@zun4$7_XH;JA8!n z*J?++@PoK*ou@xo|Ga!h`^qJ<@T$SM@BTCy88^^_Mmq^Uv+tXTksJzJaj@(9_S3^F z!FToR?EOrbmG#04q%Q}mvdQgQM#l%oH!VCw_2z_N&QTmSA^OM%CPk%1vgV_4-cI|F z)tIsZnpr$*aeR(gjzEgP6NRxDhTs^c!eZIPdy!6=sqiUg_lx~?4+E7_*W=Yng&D;(ysJ5h`dS08Xik=H)}dRO$UPgIO=fdv z30hAV%G=R7tuA`axA(64@=?v_t>4chCo`uWLN`zFF(B_%Hfl833f&WNvF${D6MsFs z@8dY%x%tzJH(1qAv|$$Z#$j$IlxTeud_$-6cVDbeUgTb(*KrAqJcFFpiGr+R5Yn6k zN1h-Em^p*md?8l<)f0R9OQ1>gKPr9B5Eu<)St5MD&g3c)J{t)<^MnD!rwUZKi9MbS zyVN+f;e|A2=LJX@FMAGW+&Px<83`29eYp9VCvLd~t#{RQsrt2!G2Y;v-)6M2v>BdN zzlBOOIoi&iZMlD(K#f1;rFXGauq>-K9X`MK^sXD5e|t%)^3)8XIYw*wngx3st-n`o zs4EFBMSUOV{~Qs8t}=CW=nK?BU>B=RFiiVLQM30rM#69VaP3Q(rv|ci!F!WIBXxaH zeuInIGViAq3Qm|G;T%<`WINu+<_pxg(9vi2zLS}?$>T}WdGM36;PhDJq2;b?k`tf` z?T3~oW0=TfqM)v^&Np4A6x*k)+GyDu!H)4q%jYHOTaojtJfoAywPJ~Tt9h)%;^t?+ z!o59;W4UL=RPe)2Pt()w7*=Cs15d*^v-$c)E%XytsgkFg>1XvEe^uJ!(Vu_e9@)D& zg@JuSuK9$Ow+K_HjZ4h>_q%<=9u*^VzHx1pPr#?P|C}QcGo~Zizy|tV9 zm}C=VG8SOLoU-gk0~B!7i%{!^<@ghQ)lzmKd~U>G%vla8>s|RG>Hu-vOXs6_Fm|Ms zY}`qFBaiCx-Jz9ykP!Pqg41Rdzbx`HUVV4NoZ6NKSuX2qgW*@Sk&yuF36NXb@IkV3 zq0C`SmW!yTl}xd$`NRCmv;hG!V*?!S&;eg+b>O0ran)Kvq#7?`k-_G$bW!AGQ@`dq zw@7WsNJ4H`-sJ}u1bQc;C_3ygZ+3gKYDR|k8}XSMb8Pf4vF<*BabA6dGRd1(5Y8dXE_3GJOz=q2nfOgo6U%rw; zgTnPC{iXa@f}zV>?k=TW6{)tcE#Brrf)hARgZ{^0hBlqRi&z$9@Kw#weowv3RoS!}`Qk*=2ld8Tk@n_F&O1um`b;bUiQVBtX^;^w&VElFxjm?Gc7>MnucUP)- z8AGMPU%-SIQK4}+&sEQ%D;E8{e6%n@k$&5luDiz<=M>0gC=xY6y&wT+kR2EgTyVla z^il+BDy0bWYPbecwokM-vSx;c2 z_4P+}YFk<6N7_NN@Tht0UT&CH`-?&N zdLxR>eoyb78PgII+P4I{mAu)5mi2j+zga(y{d!jBiC8+WpGd#p<#&IR z-Bb0%F{b8`X`S`V;gEqm`G}EAVYOeo5bz8r1Vw)uimaT&0BV~jY!tFJs3JOJ2lGDn zJ){Nd;per4^9B-MUyJ53q~igu(A=B@%@dCwn>%CYBXeo2NM6F{nVuKpktXVL%{_KM zAdCZ)_e_Q{TXRi;XL4nT*^%`_ErEbV$tD13{dGylhX+DO>b9m@&KCtU@~0iW&*-p- zzTNP*X{a9Jwh@oMoBX}?Z*-4XEFsHiF5rq)Mo~p&u@HQlSyl~ zjqmM^Vd`~E&2tORhX!(0FYZn#oR|-jtos2HEZg2jhq~sgH5X|xGSwhpIQhN|OIfH6 zvfUuY`tQmIc>bgpC z*tthkLESHj%Yiq&z02u%_o@N9afr7ygA?Y?O<}Yo{b-xJc)2P`cB}am`h!>SFV*P8c6nZnDIMJ`{X!-I%6ZMH4OR0!&GyG}8&*08POga@+X zZX?>M%6#q|Y*dmxt8V(JdK}(NIu6}p0YEc(yc&NoPb|vojZNT8D4r~G4=3hC;E8|v z{4vmjLhu_J$K=-rH)F$0al&`}B`|ddJl?{`wJMJN9@y#I)3V@G-6Q*0KO_hdyyg$| zLgYI@nm)u$3N?zRnY>`u8-z_>`IF-WcmkreosIGiZ!wSe_?JJ=^*v5tl z$xgLfZDJds(Q_;($oo?ROeT?$D7VL$e#-v$tf|HlocxB(zQqmIz6xyF5hHawBLZ0VUkswDv!Gkh&T$+rX^ z=@yI2QqoGAbBX5pS#XNmdXn;3&Sow0Y9RcY3RHtuEg zz+2oNSC?@K6Kd(x)H9q7)xa|>GbgD%;g%37CvGi7-wH51SI?A{c~|LBpZxQ7!F%V9 z!G5rtZ_O$UafeKAx*c?daGZ#Z?%o}>G>J)Nu3gW>txG-8-`|*MY)R+BNS}lXv!3i9 zco(SbUcyxKcbc&!-cmTg1w}6^Fl#T!{Uv_+h6&kONV|b-FZ+@-0@2<+s zb5DS}s*Eyairzss_?kr_9|yCLTf7sl>GHiN*VyjPPZ+*X8VGV~+P%Lp5ajvXDJj4u=-B$jZR zL@oRQP!jeOIg?wr#J2E^Dr{PYV6@vfcXH<_{_JgXH{`DFoEjCYB3MyZLjXCu^%`{> z`!Ti3PugiQHUV^Y+}}KQac%pd#9Jnvm@=k6n`CK<6&>ZKpYhkrs3jz7W>)*|IZN-N zcG$^XE(cz9YPln!i&qW0fQe!vuf6HkyGF-jSm|mc;gj*Uj_=eRB$iH3oy|(uCrCZU+~JD^BBWJ$bq0)u)Enh+Mruaf)_4{R-OrIUB^wjPj0#z9 z>};KB5mU>?WM7%i-z}L3v+rkI>{mY;|i+L@lK>PEz<*g zX_)07kWtXC?P_(^)Ji6%zt;!0T9~Wc&b<3?Kh$I=kMBAA-jiYFJgR`X(Os`}MT`lMs8jFMgF@S7CMWmJ2%R%QBrd*?jm`-#iwE6p6RnZX2U zUd9H*Q*RfE77;@VPM`^NmjfN$T&p6X;b?gY$p$c3ej2lf<#$;LVAA6NrV)Cvy#=12 z42VoxJzI!lz+2!X^1Mt=SB=Nnsygj&+VKVQg~C_@;SwQSH2h9GYfpbBH!(Muny8RJ z=SNZJ8X28EVU>8@p%Q-hx#aiT{M>x;2&K;Tw4z}oU6nzquA|{>(l8SS8Xej~|It_Q~5eNfj1(Oyy6qQ-$AUmaZByMv}dAD1jCm zj4f2!TnyHc?P#`?Xv4p4itz#PHtp$~L->!O%Gdw?t~WeRTAjJ62N#Xuaa-)t88wuEg_X7CW@c?L%-d@k;i1@X<^*jx zN|)*o-&rko^SPa?N;REj(7=+m0a z&=;OV%bialxA9`q0nk8!i)3rk9w=pHQydKv%=+&_JhH8-C?B_G<<&mMmIO-GIBLYO6OEry2HO%Yyq^33k#AEtTt9v@{ja|Bs8ym@Oh zq&eqM`qv}1mUQS%ExCFQsfl`fUjDtOY7>5GteDlC#B=iE!dd;{dZSVOYS}TS>HuCw z%Icv-QbANVXYI!=F3#V7pb%Oylw(!Tw3BX>p-PEzS7@`8ovvj35f*_q^(_+KCv+abeUt#AZSXa)4%7Lo4{OwP6)ybMboj~|aU=BsUV z3?@rzCRcz+M2beVB9eK+m1=S8H1-;5J1ZtJc$28VpybyGahj#z>guxG_=(2hoj|63 zr=WUhIH{0#j2~k`9s=L1Ve`653Q(`9FG>Q4v(phib^t}>*R{c~@5u5f2Vx}ZP)3A+ zp~x){sV{ac$#}AL(Wbs`_v+b78C-0e9U+G_GP-@oV?qkr43UeDgInCqi3a2#XRYYXbAWZ6Y5{WE_niIWZ}6>=Si>Eb zVg00Tfg`k;#-h2A$_D5}J3H`3uoj=FC6xDmrsQz^GtZV9_MRn3S_N3r4K)PprUIdc ztfKIX({KmWI`_);Wo4bVPqHp4x6_*^jEK zr<$J^h~spXc?Mvl_zW)MJ*u6{Ol%r`?mpy!figF47qmqdc(@bOh%pFk_CZGpmvpsQ zMpQ$nMwudF7+HX38G(&%ompXGu8~&FL<5cbKFY42rV0J&*i<;~bFUMi(yQQA^-AG) zttW-f&F}94n*?T8j|wWoM8>)S_6k5}lWjG5cGfoJT{hcLRq==GO@u2P?J`fVskM;Z zv}NT?P7dQHPL$z;pQDMpv8}8yLi4ok!LKq#3@B-pnfUaCfIRBqe^P^AUBlGoA)JJ( z?e}X}Y-(RTq$Bn7C(J9WOV#kc8s8l)&MYW(Px#=kB=601;B{kdZjgYPu-HhjEBPmb z@?-!EJ_AiteC{^SAo4<{#x0I|ED?bQyr0hN! z?JdvEkQ54AK}Z%LX)53fwy>UQB)td|7tJc!`1M92&_*Xy}qR-xYn zLomZQ5`eP|s3>TmYOdG|_Y^kLX?D2~Pjw*T>D*p{L38@kvJ(f7VrOmEoBz&EtyQk(EjCVr`$r z(?}|r`M6G2I#-}z0M>b_3BK0zgE6<7eikpMVF%J~_wT64A3J|rX@vHYjp0;@du;ah z95G6+vz&MIYk)`RjL!JucC}QW2EA^5>~nv1?G*_jvmslAw^eB|%@@PsWhFTs+Fv8g z+DsWTBFQRjUnY0@Ma_>`S8M-`=wtl@Kke2uMKrZImDerOy$FiJY-RofYSx?<;4%$Eygh1E)saEC3odn4;aPKo z#36qahDEeyNJI6P94i^w1f>XuG~9QO=>^iNpx%bem+` zM>@O?o03;R-CpYiY`F85)$?cd#jt~$P(`07@W66RQ~3Y~dFD~V;au6QR_6wv%O0WZt*W_XMZ?}U@{v|}`(@C|}W9DhRDfuBeZ#5eru zcm-3PTo{*kKZ&CN*5uzYghg`&10XJXAK_Ae@~S+K(y$R5v7J?TEss{hjH>uBFT$$V z`>P)_=!2S+EWH+y=W;eGv@a{FpCCa|-LiFh;CN&fJQxvlB}d-ngE@Ev?W>~5)C%=? zMZwzsW?oT#8pM;$;Er8*%ACS^;a;+8W!3pR;ZsZ*8tUDZ3&Ez`m{XL3?K1w(VFJd% ztlMhZ;EqO3^Avr>Gl`pxT_%xX#%Ld)ppmt6q42DxvA4+?4RT?!6nB0Bt=^O|M`$Rl zN}7D+Lqy4iMmzBQ0A?MxJ31I`cRw52y;W#@w}PaXV3R+l{@1{Y^^BpB zJnb~^O$tqzNgH|6N&fe|@a#`Tn=HbljXbS7&#WjiFO~LRmD7JJd#N(jQL%kOXYxb- z?MrzZ4!kxAnn9*BU&(J8&qNxq;cVHE{2$p&x&=R1_}>!=7rO;-tzMyLnYELQyfbiu zwF0R{I-kl2wvET)vKACCc@IgR_|WCPd!xfPpgcTNom{KVAo*;tL2GPl1yc5XH#b`P zN0+lre{ZyxYnyLhhq@HD!(UdpG|ur5S5_>(2V4K4(QK-T!mA@$MI4Ebp~k`r4W)pk zWe7qr{KHTsDP|X7PO!5ervv*J(IO&eilA7&GtIUjvXv_)s<#3Q#o8 zfdAEK_aKc6J|Sw|E(X!{P)fa?4>U2)iIYFWs-+~ZuwH8nQ2)>`>_yCu9?N;D*iz~m zeMSFwqwVY(TqZHI^;u=nvGJfnXnz^yujC-dTBy!au2#0}OKDK4FX?eftF}Z-YNyls z%LLT7Qq^`!L6y!!3h(e)>_m$Y4rM@1Ltk0Zg_GgcYI#%1DvdmAjmOa02&jiMVCPK8 zsBx6GqCyc%r{BRWPR_8w0)pDwSOUdXUyKRs7Q`%?i8Lz8>J|{R8q4(}g>|4CMSl5= zHb@UgQ)cR|&1;&*rRyhS;tI+`&9rTVTBZ?$<&y`QjJEF7$hXvOKH|EK^My@^)!OM1 zNAt`!Z++@v;nA%3VtB~%$UoGY!!k==fTph|%s zbuc9ED`?LSA}5-crkQ?R4pBFq@NszE;*6P3!kdpy`^jb9`Ib_5;>H-7rl%hakYGu< z$rf}J6~Yu4bFMlVIVt6XW!S4B^{CDDF{MdJOkg%5=domMp(@8+rM*zPBz^H?LnT687$d`e zSv3w)8{NlejRqpfUq`=fq)EAZZo2xXjU^gYf z8~u}dNOL1&@}RgYA*fp8h%HK>bE0?Z@^tBjlbukl#B7qU9+#455oT;b+2x6BV|sdG zv%RZMc}g8B$FB~`t(cQX;+w_OtaQpq!?U@`Gx&6KSUJPy1z(iW&wv~JE`QFG0^(if~Z9~M}aVB3r!kPk8M0LBQK#8e)?2N~V#3a-4 zt}5ehqgtCDFXtS4fd?N}@h`i}U7TidE4iPDJEdqXxr)no35Tf1jB&<3UPhH?ZW7szEZ#|d)sit3(OwVgXequ1$iTsRl0nKgm8B`IfholsmtIgMpqXiq zOL}D%cz9|&8(0kQOm&KV`$fr%-#R@u2u^Q?d27nOa%|U=Pc$4XzLBi@4Rlq}%qy3t zVio!oov!6Qp@Vquu1cE6i?4Fom)jG zxWB-t7}EEYocv^BKs|f7znN6mmRUW=X%^p~6O0?SPxVCnV+#Ze3E}nmn7Hvx9#iB#|W~}@Q3S&o~XNX5mox7 z%1=XTYKDno>6B$X=ch7H@@#x1l*z@KLNU7->u<|9 zLnHI?vZg=N$L{+N*8fh;FW#UYZRL|O<+pyauClt7(PR<8B5QdaZ)GhLoxe7G5BG&eh;41MsyP2H z&>3A0!NIqXevIJj(w1S-`ulKJ-c_mvk&)vG$J9P?92TJUnZK){s{he5iBg!zZcRhsrB39s#BoGmuSn84{71rpv0F^iDp6f>OpgH zZSJS*=v}3Mqd9c^B=iXQ3R^E>QPOzK5~H1+K_y4R@d?$bTuwR?#ey-(R4JyjFIcAe zWp`)s$9*qcN!Z;z({Z{>_>;iWSlW|xQyHs9Yi++g3XH~H)ODz{YWBpXYRwGJBp(Ir z`mwU@QKNl!k69udv3$Ek@$`3yU{}htyv3;&aar&LOE*K-sD2E=!RD`gioG>M*@L&U zKctIK?H|h8v{9S;tXSSzZjN$v93=I^#tWDWY^_brL2tm3eN9I9b53t*T76wz1fF~) ztZGhYh>pSQ2FR3sONgCRCtNi`3XlUz8hcJvcMT%gw3$oPv51;0s=5|5<;G>dkw~*| zB`MXx(xa(qxlJiu+hN#c1&!ac3P#H$H|HfiQ%U(RM%44G<{0HM#m^psS{Cxsr%WC4 z&~1B1t(b7g%^t>u3CO~1%al);Roy_7d*_fFNzN@QJpwrze5^RC7uTH9^kz_4MAjw_ zVkI`qQsCJ1+rR!+fWL%{ZzIBozclS8-)#SAHg$Ua#8$U6kvMLp+vYBpDstsre_^j^ zzCrU-?7#>{p(=<%tkBc8JdK}#)QapvPdX?R*tluNIrzK22H*%de=yR%xWjS<$}TFw z7Yz&Gl+|=)b-r653)-A$ptD2r#3~C2HX(NkQEFTuxSPRgL=%;EJzByYJ!nB;&P32) z+&$)d?SXJv+txxHW;Ty%>+N8&Y|{W&Ir(^Z9-&UYai zmBWg>9oC}h4Mns`TgYW*<0L<4y*`vuNo0A-Pd_=BJO|ebwzTqC$`%>$ydCl^!Ip(S z`4h+F4t=>(pnpFEr3Kio5~0>F7nN6x4u52JwJhwr9;IPsDkWvNp5J|cWT#8hbOXh_ zP;@?4;}q1ry~Mpd))FOWrG4``3p}D~4kD{TC5ddP5aPmIka9g94NfucSqYa=9 zr;Vt>_UXU72C|smqh|;93FF5-(_?sga`zHB8L0xgcH`cID%#-ytegQGzcIJyHKhpe zm*6dmGHBEIu=u@e%lU?B_r)H_gSj2j@W>`CvvX|uOXhFsY7U2#c5t`SwIWz{2X=^X zEi$uMw!j-yL3A!OQ8QPn=$eMqdbC!197o8mcdOZv$M zI*MWRAh) zxZ~tp;QRT&^)z6X1Z&k;1K8=MSc3Ij0+SEZR^$QWql1;i0~l!dvGJ^n7feb4EbKSh zlkp+Ba8HVDJ0RvDy}ICmw;b8~6$-wnc!ABt*q6uJ>^QDg@_^T%x^Lew^bGkp(E(Wv z)l{aKJOK5)lmj4*cp|=DYC+dP_q!5RccKA4@xt0+g>1$Fy#W9Dc7X5U|I-bA&mCm{ zOyHx((6fu`m#?<9FXo82kIM^lBR#PXd2oCA4w#hz`l4tRT3l;2O$*F+FX>l*qSMpX z<%YYHm=CZm%2RE)p={SB(0`cnOfVo4q zl7+@logD-4fwlC_+XZriarcgWdL-(H;8cc;;0%u-%^N!x<9`wZ#Bd2>pbj=r1hjVn zu*VKFunj~^4?_Gx84D4j{0$_AUERolUkZt@4pYqvY|aK+U=AGnp@EO%>F-38t#ijL21398fALGezU2X7sE!qa|19C7Tjt_5$fjihhrUT;e z!ze7^JL!t!W;j51#CtaHUnBGA-xvFQQ+nFnp{G+mU>+?97nf9=X^eX zhdiN&ADRW;&v5w1wHds9Z=dMrZ}5(MJbWJnZN40^2S_mQ3vdU;=wD0~@7)HRpAHPM zy3;_f*z0GAcP$?b5POdJW)^(p=K#HSh#>Qz2-Fk^R-t@$IrkfY0kS~7zQ2OT==>2< z00_8%1rCG}_G}O=X0nA;LpvCW@E5wF1g@kJ(vJDeGC^}c9TD1Mo2nr}y#59iKH~3q zBfMP$=|{l_@lWh~IGrc?*X$xgq_g)L2gx6_dqV_;`yi0c@U+mVHMzuF_f5pGwf@VB@!L+JK%c;lQ#8)U`kVaQnUza&IHKnD_K z>R$-HpoQV0OqkeFx0Lr$b8@7;ow~l7E({jr) zq)8EOh2co6W*e))wGSsx2E6`-KBx_&=&hr13o!imD27diAiJ8;s_+o`JH=4q-W0pM zhbBvZMP!`1YqBQu@SUe$CgeL#AAbCq4CWovcayQhJB^`Yd!hgBXzAj+OSD9}Xy`C$F=8y7Cyr+n$1zJq>^dHIc_T*W+K_UiS9f@NLMWWML zDct(;f`rl`BT`S2C;^6=wBYJ1nL53z#3rd|Wavg?52du!Ek?#R!|?~{_JUID@A-JD zxWN2*ru}|R(gOcYP1ngk(-&D7*=f`}@}&sdtjwK;XsAZx6E+oQ&kNBwiU|t6zI&U7 z#{}-0$Cagq$0#s}kG;+{piTYcQv0G=xOdqD({IQZMnDt$=u9E~u#lms{cK#Zb~UjE z-{R2@Y#XukgXj*aLT8!?(z^gc0f0l6P%1>lnIq}~zazAU)J{O!F42iw*_01lr68h{9ZJYSPuBiuKmNJ>PXQ z9YBj#qwKw@y)Z(oj%5cH!k<-OW=u&Q=}LzcZ7F$TjlKggNp-p0u3G1BHv5mW+BuMk zab+|uQyNhx-Q$mgT@_H|jFn)^Xq9!GD=p-2!?|v&GPbR4E70ZW#TJIg+k$UqUW_%h(c6xjU z1~x`~21Z5}eC>Z5A!2T2{L}LL2b2On6#l<8%II4g^c{`=8TsGA7BP2lbP_bvclZbLe_a;;UmR1wr<2nE z_aThT%=mQwMvVv~)ekm`&IV5ZLP*KM+4x_m{X?^ot+I`|p{N@4|IY#a2h#t2>3<>p`v>`7M*J@${;L4_ z|K%T{{h!4@>wgmeKf1`t*x^Ue{-ea4jD?Km6WlK=|8H4fsy^6x&N*v-7>tB z)-AMHkwdPJDURw2L2NTg=)uhK%yP)iI{cWnT)@t5>9e#BF5AClNrMF}#a?LWXuQu0 zD${TGA8wsGu57(ESzFT;#!N1<@zAkr-H@82Qr+hDXyg92q$FGa>@pSN( zoA3MeJGnBlmNzfyH!f|{+t(|LhkZXM4|14e;O&2<|LSJOdMg^tP9kU7-)&e4D$6C9Lyg7<9mB70T=b+m`-*IIdz5iRmv2`3l}(5$NjD1N%O&DWPZn+L=5|l za5x|D%UXu2@<9SK7K7r;$dvZc9O8RhY_*~}^QrZ+UZQ3dXuV5)OUAjM{ShP6ShGhb zDA(a~dK@ti`yhzg%`~u%oL_%nssxw$l1~sirKre;^D!Ga*}EOKO!D#PWWzEl>cuc} z&puH@Xe!t@<(AH;8+~N}?~iCdp2_bI_VF0Jlkzg3n+IPrj`2ud&|)q3<>xwDpL6!* zNZyHul_bUeqc22WJM5 zH&a?O$v@(a5LN48G-132g<{|yIeVfX?!-y4VZm+SZ`*P|$-9;fbi?CT;U9dvS%E(G zbGo3A8dLNUeC;M=)Mg?L!Vh@+@uaJh?+|FtWsXJO$XKnoT*s-uR^CH9gpZbCD-yol zk$oo)21>8uzG4#C3@=*|eXTmL#@vm3$P8i>uN{|Cw^{0*Gj-3+PuS(PMjzI~*?W17 zGt*Oa(+5&Ve0zQKd@*auUKD%DKH@xydU@l@7q0OFx$iAee}B%W^!{cn7Pl{a{!;Bk zd}WGzV%?xIK5>nnq6}dVsO-6pI#W*B7Q%sk z)y*&|yZMyRPWZN}m7P%iWjgvm&rb0mE199JPfLIE=^$@qeBs^?|LPjl1b*iT+3W{J$-8w*L=Oi8C_E}1H%AM?b>SE#u+kX%!5*w9WG(Zo)5d;__ zo{%DCCl+>m9ftFbXG^f-BMZO$>mnA-v_e%eHTXUifE!U%G@ z_OEXq_<&&-hj^zcdB*9w9Vyl1xY)G&G!*l-KRCb%z4rPXArJ_%{dJTKkHg(?jejrO zNztc;6Z{mFFNgm@`b^Z)g;S*{D!b|M&NSWnjb5ee|3#O@<*m2vdOVy>I?>2%=Y6-( zwQg(lEv_Z1=76y_Y_sBeHY1(>eZ{)_Rvd&*YRlz)PqTbQ0;L~CP|UW| znj|$_n{Ra^2647z{2OwULiU(j0X&YiwvFRg| z2dEBI?2$b2ve`ydM{VC+oVzqs9Bt??g;DAXjcf45B34<2Ui}1X}LS~H61)J1TOl@0?`cS zYxCdXbPnb%;7~$ot*QrTHLoNqm$*J*uh8PT`9a5OM9h=M<|40$+A zi2kg`g7*|W*4eKQ&h7};efEJ~Qet$weFsDLLf_y%yfMCRkwKx~jRweT05JJ;JN)dh zPkcgKEPjrOp0#6x|uu#Ph-0MR@xzw8i!rX&8 zfHJDk=mAja+kld85im`rq8;|cZ;gLkLoHf0GEGgGoc4O%@?;<9{qE=Td|#A&7A($O z);a3xT?EX>4)p%QzL<9%Sx%i-)ywCtba4gF0iJjU@aWCp>k@T&(gqxO`W-wsa|DKR zmTzpxk3PxX6L<`;oC)mZ0+(e6w{?cSljZ2AI|T^G4(_&xy%XSga31S}6Yss8!uJK> zr^{#Hs_mbiMS8rD#X6rwm!MfVeo#armPqAS@G!?M=i!bqm7sOV$PTak4#>3UH&0J) zy>l!sb19KKV>}1W8k|!uCmfg$APOi0tfezI)<$q$wIlcN&f1(qRGGEJH_kM3_lJYL z^UEH+-v{MQqWmIIWmUAHqCRre$dfQ*S1E(ucU|*YUCO1o1eqhgsTGHTeN&B>c&L*( zbebfclcf^J5xmG{t7+*H1w$R?ow!@GwoWFWN+Vj7(T0d_L_A%xCJn|Wdz=mf!?NYo z6MGn%iP~17FMgzZ>JEF@PQfLQHiSFhvR))GzJ~pUS7GjTO01(RMLT^}J>uBa+2c^4 za4(!JFsdqm*dyio!8k#}RW_TKhAdMga+R8`9&TuPUG>>+gMPdYW}gNu;Yx^@n1Om2 zt{%Ie4JKpL2tw#@&9tGlPuUz2OKRupNOmYEHqdZg-YRM=rG8=z7h&-8bWWyl6WFq!xCQEMr@t477M_)Q>DR@D|Mm)<=MwJxB7 zA=)~==PWp7ih@f&{~y;(ou#X^5HIM1@}#PsUf+nTWg_H&CplLy@%G~+lFO|6*z1sw zCXy9t=M`9Red!orVLw3)*m68aEGJb}PRE8EIp~Py9LnGvPHbE!Zn@bVWq|4sFPww( z94n?S;vQ(^tn*gl+J{7G8X%n6MJ3^M!TpxD?3Dfs` zu2j)E{D0gNHZ!&DNmkpP^RAM-WvI?knChzM)MGS0v-aVM3uCDnRqJcp$XuV(UfUhE zx>9&iU^xrzsQ34S-Ti$-ehI#Y(d^=!n~n=IP#{XagJr$a1rXoNzD&gZLAP`2up21- zfGls>Ka|?QQ3{CipKTa7WL{0h$8rLt3ho%*Wn7+`9*I~b{=Wc&KzzUTa{L$%f8f97 zpTWYPU^s?t{&QhdskEWQ@UwTF*i#Y}e(*<+GaNSo`-Ej8%|Bxzus(Tm&$aisNN%H^BDQ-D?pM?s!JdNgfHeH_}rN9fX{`iH3Xl7z-J-wiR=Jd0Jc!r0kET@webV& z2Y3?T)%Y1{`5s)4Dguv_koxg=KK*hq*=%RP%y@H>kvF?#_IY(pbX|KLXod>#EIoh^E;CPF0XE~LI{9`=rGx=3 zU@ky;Se;Y{OsWf}+Er0$gGHbX76Ioi0&TDeXX_#$yG5W47J)Wc1lnK`XoE$d4Hkhm zSOnT&QKtKSB$)#u~Ed|T`4dBBUG zL;SWEu@R&@D~QQ5>YyJ4jt28Hz(r{Fg zWsx_T4Lk1Y@D8lMVfFmYn}@vFTSw-?wQxBw5M+Me$+!eZFdwx!B~K#gG0Xnu>5kq) z$|bl{#lGBs!{zEt2UFQ_KI~v|lSui=qYDhfbK!{O;B999zEpQU?N;L1M*hA}|E#fg zAk+MM_hc>a59F(p-DZC|U74!q6*%tQ}Vv*pBed2aQ(D#Pq^1r^!Cu@;k2wz_fX{jdWkjKXW)bsG$3qsh<@cbkkcv%@N| zyn%Ol;3P0Qyb_^%@fDyS@+1iR=RWcn^WhazBN0mQYJ2b|I7Bh$p!_CvDOxCWnbeQ~ zh9%UwjC(gkI@Nk-t3ISI?<;`(Bc#^4qW~oh+FC0ahLV|98@y``l+4qTD`cSsZEcNW z4~&l>uON`0!4Urn61xkKgBbunq#UF^NUI=ihja|m9grS_^dh8pA$<(#hmh=m4-U5W zJ@5tqKaM9x3ilZ+%G!@ks*YB8VLGvwW zp#^PhL0enUo)&b3_6_@0qeLj#(&&*}ggWCE62`ixhWr2)7{UytQrrz>2;dI=Si#LY z#Iz_Mp|zPC8GWCsWIsNr%yE>XVE!VxCNEg6Uk+qMThNurm;!N!%vsFV=3j2_?%r+^ zO2L32Nr{@rQ%f`ou;4i^QT3Ul{atoBU-21yeOW=0i|dkX-H{(yQ?+^IwI`=i2A<{I z9YE^X1Oc`bZ?=f0q1C2r~pyy6jG^Jkncztt0FE^bfa;bt`% z-PXE!%)EWC&%`ozyFKu@0OX7C?QqyC+3hBW*WUbbFzK-Y?obR?pX-h*9aw z9n&L2QIFS}-hA%+&o15+5d^!17bD$;Eq81m4{to33&(4fPUeo8+eZSq!QP>~D*7X- zYaepo=X^jrOp@oW0IAajdqzE}`r)MNSE=&`q-jW7ARUHu7Sbb-o`>`{q_0Ezbx8E2 z>W7o6U*%$x&|5!zY*>#XQX}eG6o{y<1XBwNx1eMTDo_Y`#1|XV{0_)7v^+=4 zyOy=<$z`3^M4DxUbg7ekxCPxvq08iUXnikY5EGIY(0m&efZPF859T)lg2FsW?o{&v zr5@5iE9-KYMYSs&P>~L767n0{2;Lhh2eb|H!}Lr)McW{6b8`hS#0t|w*%*OtU=B#o zbi5A99e1seqP!|Lkkvz)t2KHki=!?LRd~P|DI$TM0RsAztH<5Uu@>k^kxAY!8yh# zxvrrOoB8A`LnCjTHVLddCs_q6XE2(LcYJwl^5Q*$*>LoY0??|=NOLm8n9O247O}_? znG}$R75^<3^HGRYM>FMT2EOIa$k6gA2;(rXYPD;juCZt{SDc&$@ z;8P8kU;ix^|KK1Fl58aC**=57_V(a)8XK zA1?sam=C}yhj|eeD>4-U%2e=>Gmtaz35x)WOWM{(SOQoA*bT4`4vc4^&jad0cowNs zSb=XrIh9d@I~_zI7Ll^+R0Y8<69M^f)}~E^;qj#RF=-4(L|QgMbAwKSgd)^MmB` zbd~$miLpXwrX_8+SlcE91q^t4V%{!Y!_6F{a0kF00Dm4g>Jm=E<79(6L@b$r+KGzB zmF=W2d0^@K;~v``1^6h1@r6$Sd8C3AaeTzude*y8`ff$* z`#pf)qwohPUC^Xx+IiaOF=&!CZSQfKqz=nP#(|i+L0P??B%aXf*3~5qWu}cF*AH}+ zFlVxEDu)0KUS&tmNO19KU4FwwES6x9X%k!*~ekoK6jQ+}JSTD;pkVWM=M^}DZu^zE7 zzNFX0+oOR`WjC&09g#%FH#)nv%JYK)*E^!p;BKQ368oWq=bvMEb^uV#GaNf4u)iUD zOh%h4>E##>$nIdK;wx@X+ss1j;LT@iR=^G(D=)?BdAs6N?92%y-|=n+&;Q)D&vD=3 z8bFs_VvSdTM%9E0=Yi71s^&S^YnVR(#5CsbkeAdvN;=fnJ}TiWL#k-6 zFDxPTqLq6A_EI;Rx<{$P@(>e`33;JhM)ydGx)?R%>ZWr>lp#CdoySzw9=4;r)OMOHK^;)ao}o)e`RHy*uGtT0&W7_6kEk@JrnPj(mbK3~4j zojm@TzAa&UG}oJ*XZPU_8^Rs-Kw5yCY&`E54|Dtw&pplYs{H+awFv{z&%L6@lU4vj z0n6YoOjLT0*1VR`j#GCGnI#iz2~@IMx|n0w9`0m+HM=1rIt0(?>J2%IDDZZH4TpK| z_XSR=Wd6LEcd4Q;j-50=joBbvJi;N{&N8pyes5fRiTjZ2B17bN*;B|6cBl*g+pvo; ze-$cl18}euUR*})8%GzTg+f}L9TuA#?^Wx9Ehy50DiqS%_e1+R==)W*ZWD!64)_vq zz?XCm_!4lymtcEd0uJ~RaKM*<1HJ?t@FgHWF98R93AXYj*tC~`1HJ?t@FkT4z64L$ z0gHG?1zF7w@@@4g`&-XD(;C&It@pXmdY@O}?&sm|=PMfg2EcDXPwzwT-&R|E8%lo< z@k#}nR4Z70ncM(PzC?!AY1;%t#QZY(ftvHM6D#Utj4jC0g51#RGMzZREYgDF6uL}? z+h~L@QChl4;eLSoD>$iIU+`ooT??ga)k)BM+uwrDwE8_JY03`F?}Gd;lq>`Mz!FZ7 z-u^u($L4Zj0M$OIeMw<*q=|Yv;3ZgFWb8u!m${ zSTuOV)0{9QaE*S22fQSj1*06H@)X=EVDkV>5R2Oe9%WMOcg{CUFMdsaOMZ6^GwcGW*18KcFP&C^s4wc$oCsPJ9@hGZ3$P3Tad1=XOnCc_$R zmF=QXXP2vuQKeD{l`2MZ70*Wl@T8hNnd!->%MbvUqUlW3bGE7qx>RjAm;DE4G@4MP zgflr(O_+RT*}*&PA@>vEVa4c8l)|~ibKiK_YGoh!*7@C8xuZIiah2De$&FXKm72fO zYx=L|d4aR}v$B=5+Co!PV}X8GXT9NP>$Q#3qcPdR=FU9)%qlai70bw^AS^t3^Py6{ zFK!mRaVO)<4i&t`axEP9ly}s2J{KOpB{TcY`!nIt>Otw2UT%}iW@iF2wGJWDpJ`Ch8$B~YGKzf%^zj~h^j z4ZfAFg45n!gJcx)h52Re8ch_+(5jQR!jI!5d)4;HCe1_rJbdJhZ76XoZE*!iKpi^M zf*t^*oL8YoCyP^VS3~pJ|&vCHUC~EC7 zXu3I-D^nMtCT$fw%5^Fcig%e*V`~>H7`smP3Op02cjg?iLp6pIcqQi$dAp5aI(Nll zJFAST?{JpmN=JLmq2gf9UCxh`Bg~hrsIQv=B8K64B_Z4S5ADWqUzM{uvt_SQ;L<5k zXnsSq3SzL3umVjK3%IQ=Uvq78B-tJA&-{*AvU(yiYc|H$b|UH-6S#FJ=DPhnFPh99 zsnOw)1Sde@mT{BQECysjG<9#78H@W|;qJak=9k|vq+)5Vab0)fhsmT#u{cF4C^w00W(qQScmQ{he9E6A&8 zyvrc9K=1%blx^`3e%cjs91(hZ3Kbi)ya9QGS{950JWk;mSet8FJ+0Usw3nbZ4)fEH zpN9JeCC%P|X=%?CqpBs-j0)1NLl>8lt|QY`WGfs4mECgLe`#uhR4eSY6$H5{o;?49ShV%*8u&F0xX6Wx(;_vD`0xtq34M}ot1 zi+!aHn|C#2#k}UmO(Q{x<5u&WEi$$B3FglQYRwdNOk_ z@bG-n8T5I@SYolm;_QJnJI=u>85nU{tfEDc1{s#;#-aG17$_e@QogZ%xa5?A-u#;R z4PDLuk=dFrZOSnA+V+iWJLI6~9Gcrw;P^4PkAanvz4kiyJ+2BXCZyUHbdVk7ITk+i ztz@_QdAmu!nrDDG#2k%dF?Z6#iii4c^%L>%Ndn9NQZ9$EE|PLeD50Uk%y1b*N)J`26qvP)RD*Up}Psi z8$EDc1GrPt?Bh_pF-+U(Q<0-na8%N@-0;!>-#}mUR>*IKv7s&CA@xP>fYDef#@EZ9 zXhBcGm}4sRX3y1QBX1>D&OK&ueTZx*1Uq; zHEM~E)LE;XuZ1k>$$;Q;~1jjp>nP^@?BOj&9*Ze_lHZ=azci!oG6aI9)^A7We zJU_wnx88d8EC2%6+wbByo4~ou>k@^K%gS+Pfp?mJ!V8lEzwtINlD(*Odl~lXB*!!F zi(yAB=8iUh8ch2ogE!Cb#W96vIBcq~%XS{v?#WDQTt+*zOfv$yoR_;@k={=^DN9DD89+_)X0; zRWnF3z}fJmx)G4-Fhe(Hl}g#9>S0h*W25YEp;b0Q??D~zBsGdd9&jt%y_F79H!QhV zJ(3_*G=n)!>U4!1Z#@@VoLj;@2d^e++#;5}iSlDK%WSOJL9}GaxZW5z22`r1&00fM z+3J!aRS2YlBTP~^S?kegYhVR6S+Swa>&BddP90HG4PAds&z=??+qU6&hNJ-{esZkWiXko=Fwg>h-BR{QRXcs6U&P6`nQy7!seDU1I3uF+wO8H zcHU&NIP6yAx_*B)79R<%EuJ5iqh2MUbe??u&%Pj;nVa8#c>ltbB>Mb8xfmP@GsWtv zdWW1mvl%5e-kjCNiO%fWnO;dw_H3R+Ezc@spZ>(=_Qm`i9#kCvQ^+X@-hj+7CRfz= zUZ4Raj9+k>o8N{*(rgGXHWHOo)QQq!vr*`+cB~rf-JIx;ijpNfG_$z@XBO}D**Jqm zv_8P{qbz6mGnQR_JfA8mf*1%pImYM+q}YB>I+=FIV{5aUQSLM<2zy-FM974^pUY%* zyp0=t6c4}VOYUMW0bFIi;AFlj2Y`l3E1^Kpi8dOO*Iwb?;wrE{>*NOVRpxI{jj~H! zvJ<4C<{QYAnqMHNTNa->C3FGc*8zTARU7XhuTz1F4%u5!papeO2nZHwMUqp4-rrD5 z@yybVF{dQW7;_cC8z@z_nU-%^(v&E;1+b^HOQ<5!`^J$yxTNKuruj>>iD1rUwQnX;xQHRkUa6qArAAg6F*e*Dt{JOLXvUqfr}GMWm%T|Sd;+q7=E)?!xhNvMgAgV;tv=SgnH9&am|>XlKZ>uAsxtTMgV4 z^Tn~nOlEP6WjH1m_PdS3$hJ&o+emFT8lA1pA1{@T&$A5Bo80_~Qt8Be-$E?5(8oSk z7kgH?!M8i#m=%e!O$xRs}H9G2|-TCzDhV;_KRM-oDMk0Q;E)0P~=hc zY_cg=zsJmFYBG$4b(n3g=J~FE&zi%5wRvV;Eb9|ZD58e{Wu^HLTEY&%F89XVcERE{ ziiQ*|Sq*R53p;)lT%#qWKbuM_nYlc@T*Yy{9QugeeC;*vR`ws^%$fqK>o7Be)ZS|9 zsG%9E%2dakr4AfB$zgRPpgHplETS1STas4nVa;TQ9#D8XhL`X_o1qrn-K{#LdQoqD z2=eJAtv8ML*Lu?rv%>)IUDC>q;z^4QHdeICX=+=0nCzp@CPhkoht<4~?qM^TCTm-y zr>+qSOQ`sURM9*rkSD`j)BLo1RcLKdhKu$Uv3Fx) zdcN@uMs)gJk_8VXi^*J=gk?Ag={7WgP^y7hXD|?y!qxP2pyomg-rKYW40H9F-1-tb z5a~^7_Poiy@YVlNTFCdX|M}`#m+49cuE^;9!);gP7#)kr1NknNl20-8k3KPQ-G$ANSbsE z)$;Zw?OLMOGR+lQ?xxp4dS7N)GX+OZE=LU&bY%hx36OlqCmFWjI@?2N4~iPlK$ZEwEW{QEC_q4$k9KEwQWv%Zo>^0Tq|pFH*CAJ0c-@?7c2 zYTL;xgG1jvEpB^viiaJV-nwgFXXn0MTQZ3HIez+sMe)LKj!*vjXY76D*}-l<$BZ=V z?CR5}PhWj;EH!X&q`3?`YXo++FoHX7OU%nMy$mM|a{@EM^1-gKXTZm*e}X+;Z=avX z*24nd%P@>J>S(?i>uEzS|awaB8L04>Q<6+evxpwV&?jtS_C&V2<%zlQ+qAlf^ zy0ph6T?TW7l%cF&-9`OSIs~Od6|KdlC9Q0~uBAW{cvl5=i{lh+^r_w9DWcmWSn19% zKs%9iksWH+R(d93-tOgxf}Svi6HA(T<_>k%GcBmxg1TG%Azz4=M?=df!q-d3B~8%2 zNm`L}AdJ?0hbvnB$t4uB>pk89m~cpi&eJmB4s~0D6(c=Ou?O5*fuS@amu(S|F5RuK zRYK{vPw;z<>qU*!&|f1%1&^e3LVxhG(-&=H&JEhZdJzwFI-&(y!qNi1XXmD15jJ{EGgoR2#r z;ixN>?2i(Gq^`Zq{TlFYXgq%$IG8_T-@QVlmD2+Tq2YKBi z3K2L;Dn)uu$(8H9piW3D_JC>VR}(1Q-iD?TM)T203a(={Amim2JmYDKLPMZ z%NoCl<==q(8!#u|!gp0C@3-m5u8`kpK|h8W(G+(-qY#`NNq0>%CDM;xhPvXo6=WFE z`v)aQ`Vj)xfJ9a-nslkDBC<(pTQJ1vXoluoOUJ>5(ZaaL3pY}`9OeJGXO#d&WBUTxc{d?6D@tdyNKHM=fYM@@!wj4+qB~CxQR2dwy21f3oIvzqRS#W4KO5b8cB{Gv|H%sg#m%z7l_D$5_KDSgDlRg zMg2VA!}H8f3N^o3G;&5qz_TVZnM+s=3d_c_K-fIEY10FM0qt(5%T}-{Zl4tILE;8p zb^SK4U@;0o`#mhj55tJQCZ!ZtSdt=g^S2@?w~3RoP6KcD`~F!v5T+C_x*iTP`hWZZs8WA5=HUD8+GDGo)HA=rw6d zn4_zmlli3WPHTxLabYLBTMJvK;l4P9S}{S8 zyLVhTdgSpP-I7MROADo6o1gEP} z@L4wkwK&Xi&9AwmipAOCGzkXT@n7RJ6T^NvV9I=IpGMn`U3-mthw}iO-z zRc+T~@>h_k?V3#dDkCZb+LmD|WwIU8F-UhndJNKwkluy#F{B?tLfbXN@`}4I$|O*4 zjLutm$nz>$msh>Tu0Zb^q^&LF?R2Ft%0+qr?x`TvskI`St~UZjB@$5ALrKyfh22KT zxY`+(>JO{ZQtU>DHc?2W$c+)kt-D?|5VfL+UQ^@Z%Aghr!|aMVjEc^Bs%XiDw^M?Q zdE7f3?;UiN=lWdYhE0t@SH$NseU%l~p}G~_D3Y5~?n*iT3v0*Zz6ra}H+^(AXELx> zC94D!6gj{*_RVfuEGmjvTR+~-{&M!IsgC1Q@mfdN>MV#%ske7;DKpsUj$HkC@?cl6 ztJa%f{@IaC#_h=Ku+2B8?mT;TRPmTfCm(uk_o^pW3q0dx?M|1mz9V(`y+;qk>~5ug z^vr`873scfZ*a%hza|BeLxqbACX{I2uLX4{A`PwS7Db@c3$pIH)Q-~YGLoyBmx{W7 zxMN~!`nG-c;)ZF~?C6_FT2jNqYHw~qXIs#H6uL~_m(YkAW3sfDJP9lRvrC$jFiQBb42cFLZZ0Cx0QraX`lBW7 zoxTP6$B=&q@>d}L6~v)$!I$%>Hk1d{Nr+I@`-|iaYRyR~Uj0zb?;|%*JF&NjM;)pa zYBZZLnL?TlS-17hwp!LGq-|au@1`V8;)jkb<1|M)Y>EnBP>?xY!AaEn+1YyHu~ym5 zE$D0uI@fyMeUheTyswS!x&h#4mogmF62O8ga^o{C1eqDAMc6n=*iyt;1)wnZJl zmni%`?f+|#f32cfd95h0FMp9*fy!wndagZ&%Un4A~V%w#Vy}<*<09V;JIeVnLgE33d4zHQDJ#HNCvxPkIN<>Zp zMHG%?i$*!>FRG*{m!l8x2*Uvc3rCqB50fZVV<|Cf4I~ zag4<+-@%##JwZS!H~TrZp$10)q#J4YH%C*7iE;YeJhVEu;jx-cHo5YR>E<)xtm5uE z*=@FRoP*~*-p-m;U~LA$YDZ~N55qEdvfLoY_8q9z4)g)9Jjil){^EgeoIij5;sXx= zQk?<3^#(TrR91{M$QrVdoMH}W3=*LWRkv%2Eo-t;6b@?yFlyLB>K38}q6 zVSOX+exEP+^B57<&jbUsx8|WMrCnmVdvI4|IDLjHYpdMzsuj@zvS{+F+73Q?RhWI z;U8lTGU~!*V1H}jJ(%r!NsnIgOrpzQ>>fOfwuxF5I!&mtK-74O22#HEHSP+Rq!wE{ z0k=MmGWv5gG*C#D=eOHnq1cK<~Fn#W=N;V|rN+XP|VEfZG`^82H0=TDrjCd@GgQBqnl zm)=Tq^gF^R0=qDhn5_8}=+LnibP`6XSt;E{%Py09B;5x|vslvfQf#$G9ey-bEcGO; z^(3?HYf6>>p@dxJs55ch0Z4DdXlF!Ay$nYOx8jTF){Xs{KN-Qr=POhOa8*=Vzz@)ks!&t-Sn4AG8|&tY-;;{HTUF`2#L+3s}L#^jv8*MG$o zu&RE$7N6&9O3>@Jt^UK$Gn?;wm8D)i3=Pc1GN(EIBaE|QMv**_!uPSNFAO|+nC3TfsA_bj8=9*U?=ll!SK_cX1?4~}LB*zSd; z6&nmheqTlm`Ye@cmng?NN-3@#)W_UP2Y8yixiY{djYsjS9hW$7^9h#<)#xA4u z8O7+wAU{^o{mRk2Qg5Zc1k~PBL0fCR6b-O+XT#v|b5@tAlHMdglkL;ZS$qM6r@Tu}bg;X3y>%mOtOUK^c5@-Tp{ytQ4$N zs?k!YRP4O^d&PdAEeO<&)y4XYvY9oRqu%*#;n0csZD(oDcQKIM$dL z3S-48f$QH>#zfHU@7VMnAKoFNaA&yo+XkRCwvxB$`M6CJTrDq=CZ0gu%hAh&rzmIO^*+s|Q4+J@s54Ij+ZJ$YxNTlGLm~p_EB?Y$-cR zqOV#h$kt?8$`y;wtXwRYT-L;vLRP7ia}Fkb?y_9(tvX7N&dxqsa+G{GbuLT|M$B7>e!s`?Ba7n~>-5cgyj^kf@@<71gW=yNUwBPFGBl9~B)+P5wXF3rv*RA11O1jc9 z7>|vbU#`a^rJYT)8X7w($*s^%+GtHZac4}6$5AXx*ltl|4nQm67#Rma8f>> zvc&A!Lf)~D6XQcwgPrRR<^d$dI+Pe9`iFa z*Q|}Td(h|aEQRk_qVYADL`*!9RlNhX%!BR0DrOxB93!soC>$J>iXej#ga(+wE8C^RAhF zw@=!=%JkWt>>uD%rMAi8b^grfvj_s(Mv2PT99~w9 zm}zoG1ETRl^<-DJbARbqvx~`WY+GqiOeQ1dtSuCcIi5|e3Zw#)ab{Eths9ME*ABZJ z5oN{x6iq zREQQuE~$QeG!D{bgBZ;P?LN?Xtv#}!PTpZ#-5njkX6?4~804HNJ9OzCH{E+Nv9j?EzwR1u~<@h;aw|rZ&`S>nD1H=pz~In^+H5ll>TL zaJ0FG`RGoToxZv}1ymQ?`MHN4`dlZ=G=J=}*plAZ*xJ1#j1n5Tb?>z76M1JrRv2b} z{tHK9J&POHSD0VYXoIuy#3~;RH#nGx&wl;I=5xW4hlw?R=FbP;_f|w$S%O&cu9mun z=De}4Y}^qDNrq^tKVCXe6^sm{G;i$NRqYCtOXVO@bqsf2dy~6?%fozc0~~)98O!V{i?o zE$FsZe|RR|hiiqapydJDsN-6}^`QmC+z2!ot`q$Bwj~_OV9Wkohele^(H3+|3%ZR$ zus$eWQl&KUdi#~)MVbrEYd#SNIL@rdiR$Xg0q%ejY(l#XXvMAAaGi@V^M7!H5>~u+ zgMfB4-h|Czh7}YZ-*kNP=C2LI*XER@!^9f}fiW@9np0DQc2~78Y`Xf?6zU%wV|(tJ z9lz_)tfTpCb$!^J5@ik!!n9KG4xTD^_8e^-dC25*j@;2xJuw{bIm`a3KkVXRJxNBV z<)N`e(2fc*Nsz^L86T^L2CxOZGf}@C!-Sbk2GO?l>IFEWY@9Eq2&~=bVqU-cr|x(x z>0y3L=O_NIu&rPT@PdP5eJLfY z4$zLHBz)qQ`G<}qm|k1lH{tNfR-RondMtLYFYM}R47;2Wm&`ODyz|?WlRtWD@}_+o zQd1Z2VJz0n)?@ds_4tgdZrQUg<(@ozVTZ-a`cR zuXANpzHo}X!hC>%NObNwbf?fihJXm*r`i z>mq1$6M1<_8`W!wP4Gsnc#ewu{B5$2yMQj&WFC?0>>{$1Ot-gQ6J_Oud|Dmc_7=2< zLYh4T8in*pn*0lgiiRQ2Nm?N2TPhm-=<;*KZ;(kK>RF+}snfUn6ShrEOW5JMPFVe~dUdro_`$Ghlbf1*@Z`xy*XLE6+>xuF zVNYUeeiWZ?2zJ}}4SN<+W|tk-t2N|{ba|^2T^&AON7qC(+TGP1$@z2He1Ktry)5jl zT3xQb+j~1kdpdo-YR`D?Ne)n;=DM};XlLi63q$`nwElco*ZK7w}sT`Th6;?$m zm5p&lHhFdoqV`X1#XJ@-D%6py%n9QHw`tS*^(rtKrQTj8*i4mc?{Sy8e!zBBpgt}! ze~J3k@+bC|cDkN`>rI+95qx}RS(5mlcT#QUZZ$B>WwK9Nu`ZIAb*m$Me3nq!^rA}$K4J@r$)ST z^)|BzEl#$oMWPBUm0oEhN|M(_G|>oHZoK)ojCA#_aM|gbEEFev<<-U2KHuu1Zzy20 z+YkFoW}9D8q|VKOz^1Mv?y%2owYq%~<$*w#-{F@gH+fxA#m-1px6R3IV|Qcf+rwURCOrc-_8tb*5xRlO{m?(eP!dDa~6>$FJeg2(t4Y_94?Z#B@HmU|15 zUx{|XY07@@b9;Gi6rC+cP0tG4C@1{X*&CDGjzv$!;c(lO&eBDw<9X(0*zG8B?^>6z zN&MWqJFIqr6HP)Sm~DQkxz|^aF#rvX?f8ikX>Q&(3bqE=2mq<~s2#wUF$!*SPO-ZrJBRI7BgW z=?3x?tdwt&-{tIA$kPDgvi^`-GBT8s?xhEcpW=W88tk&JQbH61ENO;zpN#FUb70t} zUEj1HIWHOuO%MBrhIYDnI>NenI>MSr2yOpgpac;fR=P*bf~3c_KmuEDfzHOdN(Y~* zi9K;!zd#A6+gok1{$8lRR~38`ihK6c!wh>u*Rcy)obnHW#Q2b8AT=OOL)rrAFr>4P z9)a{cq_-h`9n!BuqS0SJB)@=!(O*9cbNrz?hPPXz`OOyeqt>`^e$?nn=y7&Pw!c8k90h+2i(r`$!0(&j4G|v=~N!jg;NhKM=xND0U6jKUT8s10~x&(7z?8 z!#GE}6CuL7KCaz?X|=Qxh6Hig#wCoTdWgKOzA}~^U&7DSUV``!b3G>01@(jB$7*k- zyA0z3sR)AMiFasSS3+)8MN z7A>~}c~Kn(u; zL8 zmWN9*hZvRu)q&O3i?I>6Yb5?*$Mi^lL=FjZraGF3G4~tUV9{#kSgT2JoBXV?ALykQ z<{lihH_pvAZ{7Ulj3^pv`%gc-<(?0Qje^xGga;4JkDToEcO>J^a(b5e7HhW(Qg(LG zWQ;ZH{Yjgs#xbs4dzt%)YpC&KaWC!xeDD?KV`S=6)a!$9BO)}9q5n5gD$tKfp%@K) znecv;VBoc`xsTCu4A+p7R)p&#lBO&lp_?&9H{T{wps{98w4f)cmKN>5^|F^+(B~5DyY#UAxVm{3Up#jWS(*)Vhbu$NE6%j(jkv5 zX=0yGQyV-T+R*Bo?O4- zxC|`9So0T5P)p6f=-L?wEDSO{?@Ggtw3&?gHD2$Ud}(#Es`Q3X3Nnr2kjO|v>t+z@%Kfv>Y zt9=4*6)g#GpL!ilPbG`t@zBLkXR+w>6^osr*T?pD*e$HwziMNiImU6k7CO>j_J>0Q zncQsAZfATGa~rZI6U#URHZva`%3Dl~b7=L3tkuG@vLHl~EH9v(Ihqf|9l=P-r^P4w zkoyjogEh08e41H>t~h7aWq7<54nhvuOt4cgdh zkI|QRs+JCV-60CWVb@0Lqf6cCB{ZkgYKi7Wh?`$hwXb_9=W*k8LeKqVC)E`fi5__w z#TkSm1JwSaD5IZD&<#A$g61it$(S~(A!ziv+n_(qKk3d^+1;)781Le~B~5gpoxJVw zQQLd~TJcd=R=nnO1S>jCRVBs@l|Z45@QhsLE#yL!>>&2j)|33 z*~r9Gv%zf2WVM(DcihEnetE$lOdAAm^UqmxV|R(;Om?SVY5tddhqU2tIh$j;Jefe$ z-SgUMfg8|&ePjS1uFB2|*WTj3#r_>}1AV%KTtF*_yMbWBg>ozX8Jl98AD-^;@<1Cc z+(YhF<&(&=>dw5&xe4yr@zX+cvhXf=g29Wn;8I6;Stxo-c} z9yxp^!UX>AkKWID3gK@+U2o#WCEEajKz_fLAg6h;Y694X%F^}#2dvVBZGpPAmEEp< z)*|m;7qUoQ=qn;GZk;PrY@|{>#f%G}o>Zyp)elk^hJMg2&0XIJfx$Rx?XrCsaoQPT-io<@s@4rrx}l;koE+tnX;F&>gn( z-l!z7&Qw?$nVS#uLVoYAjS<1XFm@{^*YNew7~gXAdr?|n1 z<-65SX9Gyn6%ljZ;YT3r9b1`~gS(=jYHU5QU>CWI3+?rX)t0-Aui? zBdXy$>TEQNX#&_*`*laI1=%R1Swd@ejyMFpe!Nxx$zQ(H9QQiAdUUxAH9M%UgpmG( zahGOym|pquI~rvqn_P*4&h(=PiZnLW7*0|SN7tsvP`?FtJ#&#!JS zGbv1a0{tCczxh7dBTE)nP;}?g%r5*nq$xEzvpkjf)6{Ufni$SpjrZL+mb>fZyC#p= zx3k0JHaqKMtI`gU7hE?b#?yb9$SXS9Q>uYKPEN#om@Unp11;Ho?Q`5EPC^Y1=>Qt> zaq=vA6)5qiP@Jd9GY$bZ)J}S$qLf-21&-1M-8>ax{m0=j{*BHuW4X>U6N*2v51mEE z`pPn@{w8T~;r3s(t4W%n!Xb*35Qm~(;6bW^P-$w6ay6_*le&#E51J!Y2R-*6R)3NP zC6k(?6;FoA({!b2kj4n;!$eqDgsb7}mbDy%FIFm=q*J@U(SpX{*~ewwYf&FQ!n(+1 zGmPS4we9KFT@SXPw_4EKv?q)Wt=*wXAXSzbR&m?9>_M^tXlDE|6Ka5-DKJzh*)q9l z^J~Uc+|pknvQ^_Ke==n85OaNW96eei{qdtHBd$dEGb+HRTiI+S zU^2Kn;$JEBWqdXPe=Wi+$THKF>ygOTQ+1_rX7j#w;We?{qDIJ4gFG)1@U`M)W9 z4=_2ZGhMi1r|Pb*>aOnUoO7P(?#Vezn$bua<%lE%3J4(~Byuuf1Q>%ch>S7D2E$^n z*9L=q&Dv|@U3=Lbr?vOLv)8-M>uclvH~V_k^PjKIsp=Nk`}|kWQ>t$&SM>>BeBZr! zr-pNtSbdrO8e2tU+?~`p>I3xEFv#H~T_6p|F06aC{x>1%a4(R!m?R}wcSsmA@Q#iF z5nz;dkZn6xurp}?N*jo+(~*7;nb@Hs2IxTG+#^IK1~=0&aG`09@@C_n(73^&4o?KZ zF1Qbr>q6NH_yggZAB6r153@w#wpUld$j2yj>(IO6V(`Nx>+Nbn&1y5Gq9N4{sRx}u zD&u6+s|kf`yVeEEJIRCKmxUL==in*o4)UsidIe?F_bdbcGNBQ}jKZXsD1;44r~U;+ z1?ek>Pe0@Cm?$plHkv};k))h7CLN@Z>sP}}fquF!*O8|4!{nN%B_J)WA0N(0nRLt= zs48ga7esqp^kw`}C&RI7dAiC-?(%Tj4cOlKOMA?!ICNdb`NJ{DNV1pvClaWMd((=8 zb672NXH?BAKKjT<#F)}3jD&_{d9`b%k##Xv!QVZ+uIv2y?>zDdGY}c@NIpw$VyjxU zMq)90U@+!%nUQr(yXA1Ibm-dqH}|h8drjVqm*=7ref`I}`VN=ns4aP7-F)kF;eP*r z1-oq!r%U&ik}`);z60_}mUYwu--_nL9$W7}h`y>nGd?_E&dj#5P$=ZhIjv9z$V_MZ3t<}?xvh5PvGP3T8tY#DBKtYEj=t-9 zY7?@JK14l9y+CioG(X_J0^$$7z+{O4?sO(@!E6tB+d9^^6?Nf?_Nf&^iV+DP4HGQD zRdtao4J~8%$|>V0*bAgzaP&s9-b~H{=s76J16YDj!nk9t!Upht-ACqqT<@@v;2@_- zaNH__4GpUQ;}=nM0__+M#{c6L0eIX56e3r)XM2 zrUUO1YrTIM@v>J(vXok%{NHY$OSH&Ihl3WZPESM~JCXE`Ei4tRZXvob-7tf_&a$Je zPY$yjv^Yz;t0!QWE%{ArMm@pN%_pBmy5%Qf`Db?}>WOFii&1+`gSh0K8p7rDfCrg7 zfk4RBRrlUJA}3`frPNM;{O8XB$mOTcUA}qFZh&0=Oi+ALZ_yp}`JD8l3k&}zoJ%Bp zb{Cq?8OG|#MtN=+O29n@KU99(eD12U=wLzc`dq+6CKm2G1*qI40)MeGHgMU z0qaXe4b-Lek_b5unxlRNII6si&2@l@?>3HU7}B&MZ9~#ABU1n>Vjo4%bd0E(_&ylJ z@^!TD&x||2h2G#f!-M@zbiZ#_DX{2p9y?^(yr6LpVNLsPWIe$83hGueqvPPHNJ!vJ z=pyVgcW-e8Fr;@G(2D0ma0h zCeEVQm+^hy&_1w!6l{5m?7^QGKlNWC`7eq5Eux*YT_6S|rJj8N-F=wu1f(=woOHkv zh%l`}HLdORcHoy}64(OPFN{V56OO_`?TC{mOcZS$2u7CPiz9O|&NSPU@A~xlWjQMQ zMhnFu)iau@%mo5-m7|=+a;+K>)R5@5n+jt--&nz)mV;e3`P9a zS|j>R$hHU{V;L!)t3|`bki-VkZY!6Z?q`^%rcUhJoRwX?Z(`e((`ZQUMYs57W~i&I z${vfnV-!5FeHuv{PesxA^cQRwHHoyGb<}0l?es(74#(5rG>NqZD1np#uG2azbg7GD zZk<($;5^rDd?^0YOAF#s+qMS<9M}sWe>lGk%KSPiF5|S!Eri`1t^?t3fhh2B>>7<3 zZVLes+9I{72yY-;!S|1^07kTaEx7j`dJa1D^TjG8Xbh3$tjkF>V3t@Pn5hjCn>zUy z!ScVscp;o|j9 ziT^jI1g%qWbeIx`JJbNa({OGzGyYu(NhX6vE!#`~OtT{Vr>4-RCKN6rqD!RoYV1_Q%!Ki4gW)|>8% z%k6V`OIg}p?3GO{<1m{%V(YOpN=T&tv%WngE9UW6PuOfMBU;39hu^_+f9|{$=gK#b zp8Hw0OqJ1Wa+-ESX(0~1?$(f{ap_=q1>8w-YPU={$EK-YqJ?BNPg8zvuASD3a@L?_ z2U?Dx6x5gS+a*n|F*?J)vAW zAC^@mITNmqc+^JJUsA!H?)CQt>&|#IV5QeNN+TP)?NMdolJTTz>e^b@ZNoT0EvZ5{ z%ffSXWzA?$FxWe~w#?QZ*kyOx1#^CGxORy5`<$x4iN2(tvpQX>=yJ;Sn(VZcCmr-U zj-BIKmUpOusOPnT%aRdKy-{<&IB;;wx}+2kvKtRvzkvtD|Hw#xm&?R4v|!;pXf^?_ zzgDQ2z3a0%iy%t&$ilYWsEs97pJczr{3}(ZPErrh`#|Yn$sjbWtxsujRXm*NQBI(Y zs9}_#Vbt1&_0~3wTH7#cZNsRw4WrgJj9S|;YHh=)wGE@zHjG-^FlueXsI?8F);6r6 z1Ocx*4nM+=&JvV7$gkD`OyS`!D-jTjY+ zy7m69R7t%|<6Ug;q=9OxmR`taI7fSR=V&9-+b$^5k;IL>P1@&;^2ejKY{KPA#m%4ggtw2Sx5l?no@DtOaf~H zav_eD(-wg>+gLFa@JC%%)){r%y|H?(*yS_PU*Y)4)^{fXU75Bgx@W5OneM0^nM2p~ z+_4$pAjfpa|M(TV7t`5|M6dT8T^C_3im+JwO*;`C~Ldc%)S{I|g+8T^5)M%&V zb4ePPH1tC?;{kx;p4C^`&uDqmK`Mz1`TM9xsE?p#`8~Rb3pH>SB@PRjNtD4XwX-G7 z9Sz6bp>=?a6YzlcgrdwcPTO^p=^DrbKV$s$#T8OLvPN^9Vvj(IU8VQT*?da3X|WCV_M9aEjb}Q|I*L z0A9~~!NYFW;7^9;X=Kf@st#>R>rT#&QYK^+7;%8Co;!ff)qMqNqjrYXa1hydRZgMj z^L7(=25~FU-+%n^Ar2|J>U6n08>xPq-4PoUi057tsfK@Ys`yiX5(mAPq3k6$ux>F!)_8A(wq= z|EHnd51@DD23U6E=J#E>zwWT}+3lwvy9_#FbTsZ@XvxCa-0>jGjR0WC(8%p+Yg&Z(n9IRuDt?PSTuZ0MV_v&|p*ZxxtrtEg#-bsi=pBtVhK?3u{&J-| zdRrtPL>dk1?ha4XbFEg53h1vESvc-Q+8D>#eW{S_-QzE2(@IIomx?aTwU=7`GW%z2 zk_saQB#rv!HS{`2j>V|r^Mq?JNGgSbQaf1|ph7WhFqZYYQaDBjvxoQ`8-#*h z*N0prXO2QM%N5$-U@|0!A*n>d3C!T(1J6UbiaDBeXC_RJ!^;qs(T|2Lo0kFAq;m^o zN;I?=fD8z_v%0V|ketRzadf3kNz>Cy8+mJgI0@EB6`7wETI1I%4>KX~8!elWM@`|yA3`hnAjHwWua?$2*r+Sx66%~OY#W>P_x zooD$#WOUQfIh)_J|Bu&hd8|LQbnxULKyAiQbF^9bG00O>3eL|uA*2i_oX9v$`#$SS z-?n{wW&8HlSAeE`m}5DXd0FFd;<)TUDIz#ho?yLyrg~NxP`!i7+3fWASi%(%{fCw~ zZXAv*jfxO3w3~USsO9AhtUkuR!j2%Vc9Ob{`W$@$$~8W!{h+r~A0SDSQ(DXXDEi

79o_DFaoX7V93R{t>-Mta}t0@T16o7^V8rYhLSvG>VME zQR)JET|%!H(CfqK^;z`#I(j({Qn>6nuQe^f)|?EdAU0f{v?kJRxb2z^r}MyTZ4^l; zmt;zRqtzAH3o5F|O9*@MdcY2N>Vw0fk;wSifO_Q(sZ{GxhLrAVNk;$csrj1TT6fuX z#x-!@kt1R`u>YY$!>&jFW`5yE&u~@?&(Yz*fQ_;6PKL4C?fmH%$0t6x-{0R?SNc8G zTFpz}pjQbDZb2+Q#v#FR`yOKQ?$#-RS54E+CO`6BRR|&an~NgNo+GwITfA zl|k<{v()B5g-U~p@vy^kFiaH<5D{o22Qigll*ZWTBM~xal^~E@caYpK8u^pBp2kgZ z!Wje2%op@^wVuyP+aQpEY2vVV^(Opj}Xtl1`qJQ)a7cXA<&K>iw-gEDpb4%ZO`sr^krB)7~9XCt1iBr2L!z>5u z^4gW}?BUUhk(iuauA0r?J=*%0vuEi~w3hMf$dNzc`JE2|~oeqWyjY zuVCE-rR}6nXcIqdNWEw@mIl!KcNkfpF{CKBZ36lRkHn!Cy~z~NvOsOz5mF}n28Fp#@HC`wZDO)slhKQDpF;oWzdU{A z*QX(7xgFU@FS0J=ZB?lm>M6Pejx$cY|7UDTZ%}fF-SgY|lCZ36pjmWA%w+_89kOC=U^$d~t(QaZD717^A1Z`ub6yvl& zthlcNA7-ag+VRum_?y%XWFH=>cXfu8gU(9;GF;Ss#(SP3(p%VzdbS|LfCcQW*f74c zB`{KWY9|PoghS1W@$493CH?WK>wp!tv!yxvl$kR}Ck8mbx6~Ujvy7)9Ir(n^dW_u< zfF89+47QHNCWq^?Tpyi`#iz#VF1a~2b5=^YCxesGY2L;^(RU~sKGHXRdlXHy#vOyn znbBUE5rx$0!P=fsXiqKESBTmfL6F1F%7`Ug6y3BU4m6p6GsVkSZpoE{qD8IwSwV3z zW0NZ(U^;d@!kC?YPwUI!!DMnUO!M{GxQRo~7=)Q{loTo7bx^=x_IC#|T_-C!o7?7i z6fKae=mEPZc&%ziHM<0p=#(tJx}UXM9;SJIKg-_BA>F|Fvnn!WhHl7+62mzy{Ny~E z@pmIX>NJ~1E7oD^LFx)5tOF$Rz2hx2IzVP0%xJwUaTnPO#cl!0BjXYlecxF_x@bsu z8`6Eo8DZu=tj}CP+~OICYf_WMey7k(+NHhGZb%VB>N2DWBH=7L;1bUo$1WPu-G+1@ zk+#lI+_yL`Z}qRU*rV3UL7_V>j$F1Y7+6JTSb-s|!gip~^$wzR+j=MTL)Y@WB{n`_ z33!V2koC%Uk8nK4aJZBj(M4of?sTQO! zd6xbW*tKRg5VZSTEYC8re7DO}l3lW#vx{M=w#Pr|TPpWnR}~}fz8i|A)nspEFa0l} zv7Xk468V5=^3}Z@ZE-v4$66L|uB#fR>F%*GH1a|7?*5Tc4><9RXg$7;r(|qmuq5z2 zL)*-p=r2SoLph(I(GIy;cdEau^^V+NNRFG$Jny%QK`}PyY5Ip_h54W->~K#cBXxIG zZfLpGFJ1ivn`3^0?q&k{Vg>3EOqLKMH4LDup*%B6@LB-X_HE*Ai2M!stSHg0u+5VF zFi)W{v$#p(rk)B8$^|RH*&HUGVTwd$aKD@kvbA9y;M*+BB)Vcy9l-zej*oQc04|?( z4evP6-F;&3q!Zl%{$Oi`{`l6{a%QH)WE`j(+pmAHD!_ ztih|7*w@%@^e7gngVfvM859gNQV062qJ12W9YSpe;7-CC6b+*;V`x>YX!AQwBn->% z(weF2dsd}3U+kdqjuAszFr@870xn3BEA6BnN_X@C!F%)~A<)#BEJ*>-Tc*F!?KzH3 zTjrZ4j^$1wLzF?@gUGkOjpnvl$xk3XG{36>hxgFP9T$bxz8s2_GbbI&Q z>$iA(^xM8Mz5Oc}O#%DaPtWg|S_({-Dht8ZKa?Mxn||}xoI||oDZ8a^&zItpPK_Ce zw`p7gXY*1p=7c=X4zq%=L&Fa&HHADHZ?9x-kLTMZ zcg3nt#oBhHvm*f+s^{)Nnu&c;M!64xf@+oK-~vS4p3|r{N}LFqjcXVA^E{Z^Ct(3;MWBC;6Z#N z95uEok>yT$qc1S;Q`Io#wzLhm<=k{zcQJ$bGT;(P7A`rp5;+C*M&y*1;pirBH z!~Ofyr^h|rg+jLn2gPHG#bHc0{{_I31WVLnmqPuL)Go_e3GwHoU1QKaW6!uIEiR|i z%vK|1$ytfK2r1$bm(=9<#=I6C7w+sI%jd@jx@6$<+F*M{=dmTS9^I>hX{j|jkq=B& zDpP^X=s%w71DQY67LN?N0ineZl4I6H*A}bGX4Xng7Hd^vr+6&Z@ZO>L`Y&VkkS}Fr z-$>2KSx+nybzecV&Imfo%K8_F7NAp;#zPJAh9Nce;{t#z^rS`NDff;2}>~8L;o(i?4|4b&;UG$j!&ZRA;D?z25<#+ zjcudwF$CM5xDH}UfN8-47V0UI?;OtiDtvd)5ir6cMG`C)#`*0~A@Dr4Zw6>g@Hmab z@25A{MHx;PGePa1gd(nv>dnMb(#fNLgF}`#c*2S(YihUE<30udY#_w7Ld5Jp*4dM9+o5?pX_lSzAD(gS|pOt z0?mnHY3Y}fGzQp?WGSVt8h?W*LW)}-{C7%7A6RCg_&h9?fTbz=oxoD@3JlvwuJuXv zf=Euk2zmKYm*fUtdIKgTm*G@QNL3(}+-hYI>fm!VRy~g@HmGPr;*5(mv0q#7;DS1D zs+L-R*b-a%;Ssm&bDQjl(FbC=h#{Xz-))i| z>@OxyyWFdj&iq6j$yb$nP_zC}e6XWn4qh5YESmF|B)e8`)Nxx*eFn`wQ+6{NT3RV3 zyZyRk)~&;cG_2m6jeR#*^C^+Gp{{s*c>P{^IGl-&%XcE}cAgVH?}>ZNtd#ZhI*aKg z2oIhYH1W6@Myo-qbLer%&djZA{EIx;UIU1|W^vBPMZ`>h1~5Ye(s7(J!3A28a|3h{ z(n62oFbRP4RH*%wB0U?6vH~N6NZt!{3B~hZJ%oFKSbg^mYR`uXJm9ukEO%*~@scd#6^#LjE z9rEW~H$&sm?)a7jw^d^cG|Q26yykE>yN&GnCq&-h3-}E-!K^do`>Rb(aJFbd-8J53 zjWxS9>u>B7aMXBoW#n7yZ?F?THwWW|NOnGN_nYD~rKXXL#dXMAl*XiH?|aI#sYrUV zV2buj{o#7Jk2A>~1<8;)ST?)#qR|=acfzq)gHao@{Sd~QJ`{_Y*G~jwr&074k&uK& z*Vezz45r!Lws_9|=*6<5vw> zhck$wtYTQvb_x(uQmFxz8bnucnL4p&=(1OI z(oksxFavtgY2jASp|K3hVdgB2r>sz{=4MKfI%g!8jL=GnIN*CEn2FF(@MR2pY)f=( z1GX1LS^_iVfUtvqgk+Rv>f7zNE-J)?y^%BqJ^E)2`a~~`4p>4I++0a3McP=;P%TG!1 z&h~iKg=W`4Zs|_HzY|@6U8j@!rgvoh9-X&Smg@1|<#>F#*C5wRqSKOSc8NW^C5Ljya+3$ZBt+%(! zoEU1ifUN&BsB@4yQt#cliY~27%6LQ4?57SH%^YXc^1A$NcSh??`*m?&KPRxK5nJCa z3he)svq1~zDZ2!7DDc;GC624=x%FNCqujTVY|w(n8Y%f?p;B+U2m(QZ#&kHSwn>cp z;H_6YZAwxfV3R8ur$7S^02u!jR8HutU|ay*0-p9bU%jn@HuksiD*g>9TU93oG2uS` z?UrBvdf!v^q0ioZ_nSk5e|{;_wPUcwCk1Pzl*v&!`0|xcemgh)g=*Vk)s?OGHnXei zU*<;99WRQaph18B5*X6@D%g<@6ZGxFdL&?q{62uCp>-kuivLsYx2pehhBbn>vq+s6 z#ECIL9|X9q02%>otKf1}Dni1Io9S=G3mT?ND0Q{r4JEWvW@w<{V+LA5>E@|&0PD8i zpfx(XsHM%13tbbO?KbNCOW}+a&_g)twoPwx({l6;TIq!=CJ-CF&@??El*$IbTm_fk7Tv-F57xdi~|2?A;eHvW1HmZ=Qn4 zDUB#<_Mkz1h1H>^a;6*J`BB;l$pgh(kMeJ#`G!Zd z1smlfi2J?BH3N?yr7j(Y3J=fV?FGQv3iZ6Y=TX$_gD_rT zmxUskH^^;VqyzdsYMs?k2L#b;YcvAdM8}E7Mj(p;U{jIC!P2RK2v!| zV4DJ1qLg5VaBM}PXhgq(^C%h98ubCeL`%xk!u)la3X8Dc9IdVeJ~2QKIYJEvis}LM zNqQ{`#`i_rhK39@Xu_}rgWQ8f(pS-lVSlhz!BVkO!MTWK3OJann#2*>5S7~slaoU8 z5WP+2A0@g6eJT{1TO%piey&Ey5Y<=K(eI9E$ckH!tFX=U z^Q`PNoq9vG=s)(?XySO!*U)_N@R#Mvlk0|9i`#+(yr^7^2QA*-tj_P6#V9!3>3fwN9f3`3kw58qttUWOh z!U$t>BEvrR^S^BEzi>hB3|#2+*F&dIhwA>*>#t4sKEW;_20Ty0edc+-v{2wUdpUF? z)RE|UIysd8Cws`^DOw`ETc#Jsn>9Lco1bw2`oKG@|dgb(O!Hk09=sWJZ`BNUA@;>OY5*Zeft`rxABss71;` zEm9zp5m*|Ck=RZHfKw_}QmHnT>ZcSby#YoWDC7ppC}hDNQqV7**!~)#&c7^WG34}n zAi*n33}K`IBb?qz6>BJ;1!gjsn;T7KSvsYpC{5Dk|21ShknWtfVPhtVXSmTN7mv|7 znFlR7!)_X0D!3gQnSepE$)QXEAy|*SIW!x}x;ZO))tXRmowwLiS(o_Jse0G3-kwv} zETQI(Or|3fw&41t;SBt04uPDr9@gv^1*F@iZ7KH7chEoXP<}Ypoa#yLGDv}>|K@#i z!i9!uJ}h#2kBhrUvlFls_d`_;j@4&fY^Rjf6RbIXR$Bk6E6e^|>$!P8x3$WCIMEqE zlLG(5mHzwC7@52EVg6aZ#LS_$@Bs4&VyI668nK!3{Rb(Q`x;LA2jlimHNL@igYb1= zf`Huw#R4wjm&VX4_BI<4il7&G(HP1CVF^y6anzGwq(bUH)HZvNj-GuD4DD{)hPe(# z6(l%8uEImK|D*KxV|3JkSsjk|1idaCtqHkVN=yWi3OTy9FXU-of*eRf!?H64WX5+>q}~n zos>I6%r?|=h7i>E(wlz#21z+&H$`Fst855dK%+cPxMWHRU)Ypgp~PcufJ$j$ByaLf z7L@GbZQJHt1(e)4w-zrXQsF(Po7-=(HzO@HhPMB+2?VwdDMqn zSdlp1sJCYC1rgdgnpt1XP3CuQd56`${r20~&pdtWHU34O#qpbiNFUz?sS`x_1fi0k zEfJcyo+$3hBu>dDoUuYH0>sd4PjFW9Dm70j6*%0rD7?nJhxT@-tt=_?!&*{ZJ9;|ix-+)O^3>n| zx6){9(sJ`TW5kRBuYwhyBkXi}^igiW7K`}x6Q*D!Y+nCcb2#AE%;+JuVBMgEm{^($ zB@g=_-Q|3f6{1bR*?*AN+(3;nl;c9 z>Oe}!IQmi_VEzF<)GO3RLP8=>(2&S0Dpw)^r%)ni1t-2;Vpix}rcgUoYLQZ89|hYL zj-@ydVEseDRd!-;y?xK1+iov?6 zV9%z^OY{}05SU4d1+4fe)Br%@`->=O3d*;xly}dt@eHTB6p;+YvY%Za<9Msv7xl^8 zXZy{*xW@qQFn^0=5sf-cIO?c%v^oqHlR@K4-~5r;Z(0t?JojUJZ+=Rikk@xvbN;QK zoOAu>QfH#e5>Lp+)o6#^5DW)R0iV?yNCnev%@He7Pgp5CaAaa)X$XxxGyq)nt*h+$ zKU;@91{05i7z|F?f7}Ftf})5d9fQ_nyvHkH&<3O!p>Hs! z%!E_Z@pxu9$o^xfH(D~wazH;)UMXrVCOs#bb=F`BiVm~x?Zx5(_FZ}wipA}2#A(1b z&~ob;G}a)pbT{)QkdX-ZX*&+vAXU}~>KOz@!0QHp1I2(EWoDUnJeCTSA^=FB&o)zG z1o}g!`4&9mQSSgCCd|_KBp%m{Zo*@#3Cl!qV4j&(XN|!d z?VE+w{B#lZ}eclB8taEF)%#XX|qfmJYHx&d0^CO z;B<+x0l{j`*Fpwi{bx@gPAauI^}J3i%wMfkuFh}$+}3SZE7ixgBetS!=}zv>=XWRB zJdCfM90>>F)_>Yu4B8CAqEE{@qTWxiz1~>BZRB~qDCqQ4ytq>o&Yxdf6CjMUsoOy} zOp~0s=a>OL&%KT$90Ph~B&}A9k-D`M&_GlvJ*7(JJlmRdnORq|Rpj$Gk8;o5yumf2 z<%@5>-SnHzcV7F8ueE%QtRrYZQm5Dc*IIyj6-Ke7f&w!l&; zoeasB;3a@1lstwbyaF5x0zhD-UBIUrp^5;pug*}V|9LF*k)$+|U0Di8nG`3pcD#9h-XgQDIL(qB*JdyR1_8se7EI5)i;;9666I=5L=1 zNL5L)S!C^m zL4Pd-X6E^8vsiX&zx5*jNi@Ivm=?r!FSD0GS0zP}Iw=1Ysc0U?d>DH{I*>%(fz;Cu zjAS^B+5&3Jc${@G52JPswU40o8PvXp8ufy7Fh4;JydY+Dbby`4IW`XFpCG4#Kp984XxG1PXUwu0Iv)ZUBQi>Q4RwZA~^>rnGyA1S>A6a9P{aE(}P6~0u7-^AZRj3hIz${fj*QP#(|3Wa4lFRc4Ie&;swN_M^*7$ zz&_j-UZ>NrqAlK0u&09^TVi@v?+^HOM)oa@2ym5$aI_~HSKgAxBHsL+KkC#D%<^t; zD(BI%T)H@O&u&n9xsGGCsn9?93gucfQm*a{`DM`%3I}v(g3;-m)!}_z8Ry=|*jGfi zoODi}*)yAQhApw}r{8xNoWdHb7)$=bUMN>w?n*gt|AMd7ETiefAjmDnqHk!}y{&>4UAjrDu@q-}^X7bK{$Uu~ zO}DP`Z}B42kND_mG+Ue_v&9uUTPTLX5RE?tbBB>G0m%lW&*!l)8K(t%Z#RhKu7h1Z zP7C{vB8iyvyVCH|SJdqfsMN#i?0t2#R7baGAOa!5f+Rt2yZ321?e6aG?rwN+2o^L1 z2o~fb0fGhBKp-JNaCZyj!-6|ZlkdG*-y3~v=AZdv?pn9|lyuduT~)tbd+$0`ZD%|F z7-9b&HiYpE^YQN=KUgrqt>l4C3-175+|XopH5;|Ws&4$&mTrGLv18#+Yd%^&gmLHG z#o50pRvXS0WR1TsI{Gg55vlRKZ}!K(t=uy1+ewp0@$_?BL%Q8P{aw-4RCQ=v=-~0w zD_+lU-(ul+zhom#90=0Fw%v>^*UP{EWa-Zn`*;_Zc3+-*RW0rIeC)yNf2|w#dTC(! zqw62En0olx>UW1NpLgkH%l#s7_{+ANLZ*I)TqF@9y(fe5^kE}fcgVFhT-v^f>lBTewF$m* z?)I${7Qy>{pl_vle~ak=?3zDu`GnxiM#EU(sK_^CcZl_9*qlBMwoiCD{)r-j)$Yk& zdy1J`UVXHB?z$TT$28x9n$17Uask7-kSpIU@6=`7km&$#a-|_OF7iI~Kx2XT)z;aR zE5q1?h5?)#e^p5CW1mU3ulxMz17u{!+D`2z{RG>!(7a0h$lL-u?9lz=Ee3a8yP(al z3ipVKa^l4wGrR7(FK!rU`4QG}_`?%dF4hi>m@^8tp-|fJ8P?u$f&7ynM(o}9`Hs-G z8yCmS)fIHtM|JC|xlldToqTtru{hsMe!Q)7%egb0ZtFXH8fN%-;V@I#YjjpZk2M$MpxUFJZ(NkA9dq{GrYI7TcSB-MQg+MtG}gspZD-%ln2N%p(fK2<#8y`_VT29q4iC z_qT=`yRo_-^N%_@F0f#?v?ct~Db;4?9OD4e(6igyUWjho&~^T_sd3NOb1(Pk)S)b6 z(4if6K0A*DM|C;%`U{EV#fw!v#va+Vwz`S?Y?Z>hZ3qA9XpX;o=|yejpN%g*?eF?W zx!uxePsg8sbY8sq!rTv!4QBuJ?I^*{-LrbfpPovTnx25IJAa`2K(CRr0`kviU9Sm+0Txp}+m%JEblxNhU4KPDX_$R1xi+#KH1Ir`YduH$9rc8v9RRP}#- zYF{7z)D|b#%vxo*xId430jz`!?#<|P^TEp{%nx?|GXK!0r+*s{!G5Z`#6j(+QRhzB zfAPA_vbdW%$L*eo@NsZ(?wYWB^iS~4+EBmg(_dYHb{c>B%8Wzl6L-IOURbbT+cWSv z=MiJ=#b1l#t_&of_x>8o8orgy!*p1c*xO;;mUAao;;ub(gWd@TPF5NR@4SZYxcc~` zyQ40L1{S0Pkkrf+{ldMkSKj8VZPokMW?B22U+nqwUX$6hrTcwT)obVPw12wc$;)L= z?#;e#xzP=_kNijb2eqlM*{Sbks5Po(Cr9kK(0u9Ar+Y%3n>gkt#}4fN&Yl6I*MGaa z1>cHm3ID|Qo??l54|cNM)b-wn%O^br%FwB=CNCT4S|IFkeNnnkuOr9Xofyd-d1YVQ z?zR@sSN(R;Hn&;dzu+w%-#D{(&A{J=Z5hyShH@yc@HEL!qKpOxLck5|tfzlk|;_{%Qeb}pZ3vTY{q zA5|WVv}yS82i@h<<3C*_7lRFvA0EQj-SLDDd^`*D=Dl0(PkClvdNZ;0#XhAD;Kom< zDW(qC+ix`FxOmZ;k2mZT-Lk+Y0|Mm|&E4&57K{iccN$;kJB>NkXx_4@H5m}@U-;@f zUgXvRN&D#ork}2?Q{T2c8FYW0y6ZQb8$IUtJ)<0dd8SN^J9OgU^!3H1cYQQRy#0QAd-JWHZX8eM-aYSL9QbDWEoJ#|ukTw;KNTJg zZbObsynJBpV#-25}`QpDyjo?RYz_0j_1>#MnQ=gwRm zGG{Jf`~$n@^Ce4m#iCygA3tCf{nF!>-_-2qx-2}gYBh4op-vB&lgh%o_>G&1k+ZAZ z(_0Nix~r{rHccE}^UK03=Z|WgTHW3ry`djK8qRhT&1+kX|G0eNa$wQw!6UU}s)kj8 z){lmUwyb+l-FyZX8}s=0d$;!w_Ak7~d>821L9%r9IYR8++Mw&Q9+X4*)}E!uwjLVV zEkYdi(+ITo!@&ZSYHJ_kmFAw07O_CNOxEzR_BQDk6lU48_~_QWYoPCgBEY^IYc`yXwaDV07I`k zl$=%}ONYr?^z8TCm`_fR{=KdFN^8Z9t?d{>0zHyyHn+Fr=*2aIf7ihqn$NZG2wl3B zxN+*hrK$4DyIZ$MNC(c`__W2j6MuOJe6xGP1kc{XPggbHpLQ?UeJ$^PUi+Yup7@U@ zb2~{Pr4ta_T`;m57ra9`*Ytm%qk_gY_t4?6bo{mG}dlW&abQ87*V?N*0*<7z>QSMS1C=6BE9&}Z_iXU7Mu+x&9mGUf2L>zdF;FSzt* zK(DJ4ZW{O-&L8mm0x!1Tn5lU%a+IrP3V=Qyx(Oyi!b zAAW{RaLyk&_UQhp?a@n?SF0iKyt=SvD;?EhzsK^&_BlK8d)-af?#SQ4HG6R}J7n0>o7YvZy$@izIW|+ zyV1pK^ijw1UvYZ>^hs-8hulY39~>I>a_X*#5;2BRxB zV{X{X?xa5`KY#g7(>HUV(mvgHBrl8~wA^^*>$z>)C||sP{#5h1Q;-u8rnqPF!`|zf zy@xp1kDh+L<)bEJUu;;tXWJIUvp~x~kH4Ou1ka2)KKQ_$Cw=yfJwCR_l=dG!*Dmfu zjIV9haRG?jf*ksE%&iX^TFaKcFYx?XVwHAGr zoY-K1m3fN?B}?C3M@gP^nOXg7@Vdr}ty|g3hxfzRZr)2EJ z&1Em18t$on9yKd8`sW$%Z1wzgW_Pyp9Hejv?t@jUw?Ar1eEsBNGfzxhkv3f%nnu1@=`<<4nyzUeS{*2Uo1%R3GjTi-_$n#^36``Z6*r@@E^Et@uM zZT~!mb3w+BYC5OGN6ZU8)*qtD8zqhU?~k$`jp=)1Oe;-ecId*%X}r-Bs)K;o_OcI_>!M*U-@4bVpD zn*JjZT%;ZByZL)|ajd(iIryRHE>7n8VyFDs;@9&&x^nO5pI?>*xZ)qh?eoZK9sAWV z#s?pqUw@F#INIT>9xeB;IWY4y-JhO$x^!t^0srRH&C50p_&$HE*S-nKz2&pFDjmmm zIXi7ClX-ahSJqL4A)7X4Dm!`QAN%(D;c?rZV3!rCTlCT2QCD?xP$qUhyy0}$IbC_v zc-N%8#=jchqV2Jxsh!<`E&eg?iA}fp+N>Q^9noaL0*E2qanaN0KQxmzte}40^2Yob zI`E}w^M2^U?CI(k&}Q=Kt}JHe2cKNAg}Rj{zv*(}ryu7rHtpsb9z6eUtZODqvj2v< z*Ft3|x84821mX(q*?~&A64eod*2^0ESkuPF;m76;TKAvH^a5{e0iPew zhC2dex9Wq3y8Xwuj^WM(bU%0XpXYIVuE>^PyS}~B?@-|>((;UO^3J3UkD9)bfz8?< z>@3*b?_>Y|rJWi-y8KSR^;;OfmVs9-FU@NpVZXk zh;QF|ZsMygxXjG9xrt|fecU%JntjT#_tf+cew%ybxc9>wvzGoi&vt448`Z<7nTa~^ z+aG67Y}WVYogeF$P>r3nOGxC-xVyRU;45oI2iyEoJHK+X^R|C)do#!Bcs{oLvn{nu zdEr{|!xPiD-TQfq{k*Tm{mnn+!vmT&nR{c%h00k%+If8bv1wzHMD_XS?Ox~j2S5nn zFUnNGXSANCxwDt_oB4bL1ls>=@w?7<((ezbOjIKd(akOAt9&PxnwMc|jpj}0HEk2a z_c!JdZ={btI`pL3nmboI_Mi0ickg_C5O5xPy{FsRX77_{+*=r37QfTqad1}GNrOHl zHbrHow`zTQ^!?|xO^yen2<^X_`NOIsGe_;A@7cBM%x3<$BrU!F+p&A*27Wp7^25UV zW#=!nzy1CGM^k2OU0V#0c5ZQZ`8fHW>c`V36p80E?u|Ix_H5@R9S-Xg8;zsCSo&aV z*I{cV&v?U*{cy|Jv+v1kSI!=rHB$UyamOJOuFMn*zcKe{erDN)+8rfGH5NYnWAoN@ zhBxESd)4=TQx3oTcFR<0>+XjzLZ6R$TbAwPR=U6F*`}&~hx+@GroGyMe^$n@P2X#~ z_n+QwZObn=eeej;{G&c+`y4eOKKj~ie#~2P=c7N5sFR<(qZ4PF4E=6k{k53yTfcL?d51kuGru%x1#h33 zwPDPZN!10VgPv}4r(IbBKK>-T6VlJTTK&w{A{%xc+t>PsALedcHpvX1AD?>uv!Ma) z;m$+W?{&>su;kWi%eiLdl5$RaF|POOHkyxnuU^p#dc$CD^}(QyiP4=Or|qiAxzUW_ z?S~$l^FwY$c!^EhYoc&2;-iBT4tILK66}P((kU02BkqE~@LS_ouRd2y>brT!r%Q*q z6Um3;2)$?XE-k(NNWH(~M~M^b&-y%>(#^$(L$0f`0_}i{Fk!v#>F$*gSZh9W@S7jH zU)c8MQPFvwEMKx`UNQoRON^4qOfIXudY8mIkLWHGY@=1e`jA`W^ig%xViIM2JBkb$18UJiOyFxJfC-eAbiB{N$J{* zZ@1vyiFT1aTi@}lPHeo+p84T`7qbYxx7dHF^jp-CQDlEL@`}`S^WiSjmY_`)+&Q&UyZ6pnI>I$3M-_Y)iavxOl6_j4{H;m!6z=M|SMUBwze8bo5i@ zS8p!gP=0iB*dt54%^Lbq?4sJ-<6pUPY1L`DY02ERBTmE9O^&J;?VtA;JhyG;oipRy zAFSb~Sx3J$-IOiU|Eb^D@=2`!mj}8_@jtdy3EqErXYXe-m_tt17#8uwO6SAJ+{QD* zeqI88tGSZ&0MG0D6p#Nf&o2LBW1H4z2R&Xwp&dnyc|E0#=EC6P^edztw?{N)L$TSsoDMHh!|b{bJbpp3T~$Bqt8;;C}fy zrSKeK_URsfg?~O%vE{*yJ`-VxiwPRoGd$6MCxdF_-c3r%?qtmI5TRQd)yyWa5EDp@?xu7Tg-0Te#`fe<4 ztj^iIuFukI&iw};i~9z?Y+QZ#+4MVyW-0m(INNj1o7aPm4B6JT$GDfh9^$Tiio7#> z#`Lw?ZS+k&Gke#b?6JS!i5-t-I(oe7ap3Ctb&u=wWqGSEe0W!V*Vnf%&(kai23$XR z|F=xf&Hej5{JFLM+@_5^x&`GeGM4hJ5Nq^V3x`5KAZIQaWeZG1o-?) z_|ez#&%1YC0RD306kYvb%vbO4Q~g}N)aRs2T^Y0e&io&@J5O$zdi=Xb$j7a;nYOtI z5bV^ZCI5H6HucTQQU~?C*Jp+A@^q*=Lt6uLe*C6)%j-v*E{kMe zc3L1BzUE%*@adt+ci(hbkek~7{UbfrfBM>hZh2FnN)4Lu^g!rzlM{OeOgeny*#p6M zKW^{!tb642hbQ*E>2~CkgM(Wg$up7ecYkbss3T;|pKb0;de{Bs?1cyQsfXNQeD%ER zm~4~N(e1ySqOb4s{P3yC^L{ygbpdRDxzUQfc4+q68QfmC4lbV8v#W;(6auU@?4Ex< zoXA~Qy?S!-v35%oz@8yXhRxt^SnC{r?R7g;wBOLm{ZowNaW)qh}IuU`GOj{n!}sV{l2jy!X0Z9F*U<85uad&L)y zxA^2c$gM|hDuY@3@bhY!8*dsePg^)mqjdU0W1(Amw%prN(MBW3)2;thVaV#$quOBOvrY`%;Aw%tYa zq#N4NBfdHGrvK3^@455dovfFc4+&Ea-fz0~b<>TH5l15}H?{xc;L1*SGY@$AJE+3x z(PNT5TQ0E;o9`3KkN4#X=32(50doj_>C2lg+_wF_29>Pa#=g5Yy|3Cce%}D#! zRY@{bep~f_EVtorj+q+(ZRp>!kg0V>{IflBDvn$ytQM~RO_8-+i~UX8+g4i(wtOm5 zh{hTyw7*&LFJw0We>bdBXCvvKt^2!)|A~)!$^VI5|4o+v`yWwg|0z2E?<@LmDF2@Z z|9?&Y)*=6IFv9n*(~tEp)6W=6#B^^b0br}d^o4x=;cZlwFQrgP z|5A#mR!tVl4QMZwL9hQaLS7P;V#?O)UyO39x0gyGhrJXMDd8oN$zBSDZZu^r^^7F% zTjcOk$TTmy9!>UA$&9{U3P`Tj6X^9Al9x&&Ve05t$H;1`ke7z4u?Do1O(9X}B#=xa zQ%GbQ3rAw2NF>z1=lh!ybS+;g#v-YBDi-x(>Pebd@1BKnw9lwV`l>Q7UiHro!b=xpxDh!HX^wWBE#3CpXm5caq(6ojbtH)n&lc9i2#nlLq*w6meC)Vm$@-_KE}mJRB1m_ zr;$hOcDW1{boc{IC8!BPiZQr3OAG?VDwHRegi&FhUjn3Z@Q_Q0gJh5#3{ykb1}HJV ziDM^X5Ez4(iRPp&Hi?y-suE=x7dyyLo3n6%P6hA@SRmn~Q?pn#L0^WX@B&FWNdc3^ zRE@@qNDy8@G{)s>RH%X{D0U{oShWRof>;VCF3ut(5u3`Ki&Ct4wKnF=GT*f3remsf0fQJO85p>Rc?C|`i9{mFRRs*y_>Zf6u- zV(7Fi6wQYU8?r?wMrq+Cj4>4pWQ79^j*M(45G`gENZ|PyQom3MWDq<;)WsH_;c1S~rQLx~+g6m6rJOMIx7Xkz3jrc~PPGvOjk9ZeSw1er*&CG2wXu{vu4Nr*#e zVuC43RH0-kL_*8u_;F669FnmJh>SeT2pIHY7tbb5m_-Cg&EkR5T*y3^R)*osAd(+X z@DoHDN1qA0jb5>k1_W^_ysY3xSgKICIIgCKv_?Z7!LV>RI)H>rL4-)C(oBBBUA5jJa}p znI)+92dZI=R?KIKxO!C1Kp=Yzayd>?%)#hXC()BayD=D-oyBLUGb(q$t51lEN?9I{ zjv3i(u|nu^a%pL}xMI;(7y$>ALe^8$76ekr@!(y?Y62aL*s}p$Oo}1MB4Q&(SV&h@ zG-?_q5KFP5QYsU5VDcb2Z&4Ks7PniD(uc4@oRH_HIszuDErlbyT>hBZZ-JQ;1gjrF zd0;hCT59IjvJ!ftnhxl^_P8)FkP8I_Y$$Jppo|KSHk=gJj7o1%PRk|vSV$}dD;u#K zG8ASZ=z@U=RFw~9L6idRWg_L8ECl7x2x+D?(rPtJOH4l8?J+8OXwYrJvFIL@%t#;< z2ySCqXGTVBq(Tn#=hU1imuZXp1)8ELtHOybNFbum>C3rrh?({H+)Q%VBB-Xt7KbdG zA#ELG63gtDOK$Xp(^HxiYKiCI0v?e~-=$$;1_b%1UN z4u=5ISdC9v%o(6g7M~rK`f%w`OluG*BOpB}Eh$Mkv|M5^5rYXxuw*C2!v(n01BVLC z+yGuthJ?yBC;}-U`R$gJRVE`N%VK;{?n!avAsduok|K+FQyj!AsBn>p!3@=*0b#Dc z4eYn*Ox0*XqelTOoupu?lpVHgg%Y(8;ao>hAF-#PVP=LYwF4|d2~D*Zh?!CW8;!+^ zfK3ipMmbrtiNT=fIdC4I%0)5dRk$XAC^~HPh#n?G@RSasJrbhli(rT^H;dc|E+P|9 zq_t28KLny+Vv83oHhXCZ7}SU=1Q~HkUPKP?i&-Z|2RD_mG;^YAHW#&A4Vx&-#aRY7 z-KE0#0ZbZK6yyC!zSOLPAr0z?UC1dwa@C+5A}>=#ECkf#w$X$sj?u*{*{Qio1xxbL z^@)nhi8RpD5)p#nr{PdkCMDp|KxHLInV=Gr1p&X+p@Y@9SS4-8X1-n094?PdXR^7;wvti z-ffLA6eviP4?@XCWEl>rQz~JHD5iKdD@v7YKC0b;CqXb2pA=AJ)jE^K>eDOn#faV!c2wL@ zc-^Vaw@C;YD4Q*})FM(0B!$bDVIeXpE0AU&B7sDbAZus}u~?H<$!Ix)M#0MJl8^v_ z&JxF67OJ1E4i{t|zCk3xcu>fQfo}J+LWKY&OlGpK<+iIpm{sD`a7!$?91hl4S3Wu=l| zqfk~dgqkTs*ecXT(lIruI2~?-RS7;D98r*`LnwH%07q*pOk9B$rwTl9DIkx->(CkAy10y)fwx)L=k4CPZxT`q(wlrVA$a% zYel-6)?bCGFKLdV)>~;O2nwQAVe}M z!a@os7`bZL2cxp!Qm4LP(a|swvjwfmm#Kyf+{$xmVDVfbYs5R{AraM#2M9kIbWlnrW-KVv2o9D67uid8&`lu~=$fDb z5&?7Gq+TOp!=%P=RS)IEixy{6EC*ELVoqZgU{WbmF64v~z!1lt&=u6WXjPXX<3OE6 zDS|qM7LBsZZ;;;xuRyK#AVi7V&moeSuav>nm z;wz8}REsiLQh1vT}Nr)U^~3%EOVtOcA9`lTG+tl(01zLn1jL zTFFpKGJ=S_SDRFNh&&aWQlBDVUe2V-G^VmnBIViA!nj=IwFz|sa<~YI@Qld<21<_! z*nB1|9IX+cQ7_sdAQkO0wu$Rx;k3GF{Q_WYFbK6FKw4FR2#{<@sK8%!+szCMN(K$M zd;uwtPKs+;BFu+Qr+t{9CC0;JDl|7#1wp9o1)iuDbR^P@q&}%GRRE<&$u)DmDR`_1 zVR>A{QVPS#W3VB(B*GIWV^NjI!^~tLWEeeP1!74XRn896v~Gu4O>`0~$bdKD5D~z1 zBJWU#5h{wGDsbxUGCHJ)6Uvct9t%t{16=|W~75wqz|eFyeX

LDL6TU`!xVH1GwVY~lSB=IngG1Eur{wiI7DU$ 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 diff --git a/申基供应商审计会议纪要及整改计划.txt b/申基供应商审计会议纪要及整改计划.txt deleted file mode 100644 index e34c6cc..0000000 --- a/申基供应商审计会议纪要及整改计划.txt +++ /dev/null @@ -1 +0,0 @@ -˿ͻԹ˾ῼб¶⼰ķ£ * Ʊ¶⣺ o ¼⣺¼Ѷȴ󣬸¼ȫ棬ұʼ׿һ д¼ݲȫ棬޼̡ o ļ⣺ļ·١ջڴȱݣļ ޽ˣ·ļϹ˾ʵ飬޷ ﵽļҪ o ⣺δƫOOS OOTͻɣ ֤ȱŶȣδ֤ؼղ֤⣬δȷ ޶ȺͿƷ o ֳ⣺ֳڽ϶⣬ˮܵ⼣Ӱ ͻ۸С o Ա⣺QAQC Աרҵ㣬ΪУҲԱ ̬Ȳ棬ḡȱġ * ˼·뷽 o ˼·ʵչ򻯹ֻԹؼ ֤ѧƷȸӡ o Ա QA ˣжСĵ QA Ա зͬʱǿԱĹͼල o ע⣺עͲƷص RI Բⶨ ֤⣬׼֤ o ʵԣȷǢʵ֤޶⣬ѧ Ʒ * Ĵʩ o ¼ģž󲹼¼ȷ¼ȫ桢ʵ¼ ݣݼ̡ o ļģ淶ļ·١̣ȷļȷ нˣ޸ļԷϹ˾ʵ o ģƫOOS OOTƹ֤棬ȷ ֤IJ޶ȺͿƷ o ֳģֳ⣬ˮܵ⼣ o ģ߹ȶԣж֤ȷչ ʵʲһ£ QC o 豸ɹҪ󣬲Ӳ豸 صϡ * o Σ4000 򶩵Σع o ͬͬԼ򵥣ƫ˾ּ ϽʵʿɲִС o Ӱ죺ǰӰ辡 * o ϼ¼ۣŲڿʵ¼ϣȷ ļӦԽʵʲļ⡣ o ԣ 20 ˣ QA ţ ʹԱѯ㡢ƼдзŵǸѧ word ½ Ҫͻ⸴ GMP ϵķ һϢ * ⣺ͻ⸴̡GMP ϵļ 4000 򶩵Ϲ * ıͻΪῼչƣƲӰ충 ῼʧ * λԱ˵ Aκܣ˵ BԬ˵ C˵ DϺ˵ E ƺĸſ 1. ƷͻžƣQC 2. ƽۣӲԼ 90%ݡļ¼ΪĶ̰ 3. ؼͻ˵ڽ 1 £רΪ 4000 Ŀ ҩ걨 4. ̬ȣҪʵɣܾͼ Ʊ¶ĺ һ¼ʵ 1. ¼ձΪºдһݣ¼¼ʱ ƥ 2. ʪȡѹȸ¼ȱʧӭʱͳһʼһۿɱ 3. ¼ݲȱټ̣ؼͻأ 4. ̬ȲʣٺۼƷȫ治 ļ 1. ļ·١ȱʧ޽ˡļִ 2. ļհ / ģ壬빫˾ܡȫִ 3. 滻ҳֽɫһµȵͼ󣬵ļϵȫ 4. δƫOOSOOTƷж ƷǼģ ġ ֤빤 1. ֤޿ŶȣδǹؼղʡڶȥЧ 2. ֤ȱʧ100 + Ʒֹ޲޶ȡʡת ֤ 3. ȶ֤ԭøδȶԣƲ25 12 £ 4. ղȶ弴ա޹̶׼¼빤չһ ģԱ 1. QA/QC ŶרҵΪУ˽øҵ 2. QA ʤḡ̬ȷܡԵ̬Ӧԣͻ 3. Աò㣬һ˶ڣƷֱжݲʵ 4. йУ壬зѽ 壩ֳӲ 1. ֳˮܵʴأ޷ܼ 2. 豸ȱʧȱ䣬롢豸ʶȫ 3. ӫ޷ RI ԣؼȱ Ʒķ 1. RI Լȱδ׼޷ 2. ԭøȶδչƷȫȱʧ 3. ø buffer δ룬 GMP Ʒ淶 ġ˼·ԭ 1. ٲ¼ʵִСأհҩ GMP ȫױ׼ 2. ѧؼ֤ RI ԣͨ÷ƽ̨ȡظ ๤ 3. Աȣϸ QAƸ / ø桢ĵ 4. ץ߽ǣȽ RI ԡȶԡ֤Ӳ 5. ʵʣøԭƶ GMP ׼äĿԱҩҵ 塢Ĵʩ һ¼ 1. ֹº󲹼¼ִ ղռ¼ 2. ʪȡѹ豸ʹõȸ¼ȷʱ߼Ǣ 3. ȫݼ̣ͳһļʽž滻ҳɫ 4. ϺǣͷǢʵ ļϵ 1. ޶ļϹ˾ʵʲܡԱգִ 2. 淶ļշ١鵵̣ǩۼ 3. ƫOOSOOT ļ¼ʵд ֤ 1. RI ԣԭø / Ʒ׼ɷ֤ / ɹ 豸 2. ȶԣԭøȶоѧƷ򻯼Ŀø ڶأ 3. ֤ȷ޶ȣǩʡת֤ 4. ֤ؼʡڶȥݣ ģԱ֯ 1. QA ʤQA ŶȫŻ 2. ϺƸԲ 20 ˣ㡢Ƽ 3. ȴзǸ QA ˲ţҪø + 4. ȷ QA Ϊ󷽣ԽӿͻҪз / 壩ֳӲ 1. ֳʴܵ 2. ɹ豸롢ʶ 3. Ƚ RI Լ豸⣨з豸ȵʹã 4. ƽȶԲԵظԹԶ Ʒ빤Ż 1. ø buffer ֱֿȶԣԱҵ 2. Żգ̶׼һ 3. з˴ĿʼϣǰԽ GMP Ҫ 1. 4000 򶩵ȫƲӰִУῼ 2. ͬƫҷϽɲִУֳ 3. ֳ֧ҷžΪĿϸ񵫿͹ 4. Ϊ壬֧źȿͻ GMP Ŀ ߡһ 1. ϺĿŻƽƸͳ֤ 2. κܣз RI ֤ȶԷƣʵ濪 3. ԬԽӿͻͬ豸ɹ븶 4. ȫԱͳһھϽ̬ȣ̬ƽ 5. ȼRI Լԭøȶԡ֤ļϵԱ \ No newline at end of file

vlAK+>U0Y+o_MEF{E)K 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%0A5Hp-6RaTY> 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