From ea12cf3e18c3beb4a30f4050de89f986b549607f Mon Sep 17 00:00:00 2001 From: Fabian <88109444+nicremo@users.noreply.github.com> Date: Wed, 7 Oct 2026 20:15:36 +0200 Subject: [PATCH] feat: initial release of dsh-cli --- .github/ISSUE_TEMPLATE/bug_report.yml | 29 + .github/ISSUE_TEMPLATE/config.yml | 5 + .github/ISSUE_TEMPLATE/feature_request.yml | 16 + .github/PULL_REQUEST_TEMPLATE.md | 6 + .github/workflows/ci.yml | 29 + .gitignore | 6 + CHANGELOG.md | 18 + CODE_OF_CONDUCT.md | 7 + CONTRIBUTING.md | 32 + LICENSE | 21 + README.md | 213 +++++ SECURITY.md | 12 + assets/demo.gif | Bin 0 -> 8342293 bytes bin/dsho.mjs | 6 + capture/capture.py | 472 ++++++++++ docs/architecture.md | 66 ++ package-lock.json | 51 ++ package.json | 55 ++ skills/dsh-orchestration/SKILL.md | 133 +++ src/cli.mjs | 951 +++++++++++++++++++++ src/collect.mjs | 118 +++ src/config.mjs | 37 + src/dsh.mjs | 131 +++ src/events.mjs | 125 +++ src/guide.mjs | 88 ++ src/paths.mjs | 23 + src/profile.mjs | 219 +++++ src/runner.mjs | 374 ++++++++ src/skills.mjs | 83 ++ src/store.mjs | 168 ++++ src/supervisor.mjs | 44 + src/templates.mjs | 116 +++ src/util.mjs | 91 ++ src/web.mjs | 300 +++++++ test/cli.test.mjs | 161 ++++ test/events.test.mjs | 105 +++ test/fake-dsh.mjs | 56 ++ test/fake-web.mjs | 127 +++ test/fixtures/real-run.jsonl | 35 + test/profile.test.mjs | 69 ++ test/runner.test.mjs | 86 ++ test/skills.test.mjs | 47 + test/store.test.mjs | 92 ++ test/web.test.mjs | 132 +++ 44 files changed, 4955 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 assets/demo.gif create mode 100755 bin/dsho.mjs create mode 100644 capture/capture.py create mode 100644 docs/architecture.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 skills/dsh-orchestration/SKILL.md create mode 100644 src/cli.mjs create mode 100644 src/collect.mjs create mode 100644 src/config.mjs create mode 100644 src/dsh.mjs create mode 100644 src/events.mjs create mode 100644 src/guide.mjs create mode 100644 src/paths.mjs create mode 100644 src/profile.mjs create mode 100644 src/runner.mjs create mode 100644 src/skills.mjs create mode 100644 src/store.mjs create mode 100644 src/supervisor.mjs create mode 100644 src/templates.mjs create mode 100644 src/util.mjs create mode 100644 src/web.mjs create mode 100644 test/cli.test.mjs create mode 100644 test/events.test.mjs create mode 100755 test/fake-dsh.mjs create mode 100644 test/fake-web.mjs create mode 100644 test/fixtures/real-run.jsonl create mode 100644 test/profile.test.mjs create mode 100644 test/runner.test.mjs create mode 100644 test/skills.test.mjs create mode 100644 test/store.test.mjs create mode 100644 test/web.test.mjs diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..2b151ef --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,29 @@ +name: Bug report +description: Something does not work as documented +labels: [bug] +body: + - type: textarea + id: what + attributes: + label: What happened + description: The command you ran, what you expected and what you got. Add `--json` output if possible. + validations: + required: true + - type: textarea + id: doctor + attributes: + label: dsho doctor + description: Output of `dsho doctor`. Remove tokens and private paths. + render: text + - type: input + id: versions + attributes: + label: Versions + description: "dsho --version, node --version, dsh --version, OS" + validations: + required: true + - type: dropdown + id: backend + attributes: + label: Backend + options: [web UI, headless, not sure] diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..98108dc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: DeepSeek Harness itself + url: https://github.com/deepseek-ai/deepseek-harness/issues + about: Problems with dsh, its web UI or its models belong to the DeepSeek Harness project. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..982c9b3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,16 @@ +name: Feature request +description: An idea for dsh-cli or the agent skill +labels: [enhancement] +body: + - type: textarea + id: problem + attributes: + label: Problem + description: What are you trying to do with your agent and DeepSeek Harness? + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposal + description: The command, flag or behaviour you would like. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a00eb3d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,6 @@ +## What changed + +## How it was tested + +- [ ] `npm test` passes +- [ ] README, guide, skill and CHANGELOG updated where behaviour changed diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..87fe493 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + +jobs: + test: + name: test (${{ matrix.os }}, node ${{ matrix.node }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + node: [22, 24] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + cache: npm + - run: npm ci + - run: npm test + - run: node bin/dsho.mjs --version && node bin/dsho.mjs help > /dev/null + - run: npm pack --dry-run diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aea8371 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules/ +.DS_Store +__pycache__/ +*.pyc +*.tgz +/out/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..88c8a6f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog + +All notable changes to this project are documented here. The format follows +[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses +[Semantic Versioning](https://semver.org/). + +## [0.1.0] - 2026-10-07 + +### Added +- `run`, `batch`, `research` and `materials` to start DeepSeek Harness jobs in workspace folders, alone or as parallel batches. +- Web backend: jobs run as sessions inside a running DSH web UI (one workspace per batch, named sessions), with `ui start`, `ui login` and `ui`. +- Headless backend with the `orchestra` profile created by `setup` (research MCP servers copied from another profile, curated skills). +- `status`, `ls`, `wait`, `result`, `logs`, `files`, `continue`, `cancel`, `collect` with text and `--json` output and stable exit codes. +- `capture shot|scroll`: Playwright screenshots and frame-stepped 1080p scroll videos with cookie, overlay and ad handling plus a watchdog. +- `skill install`: the `dsh-orchestration` Agent Skill for Claude Code, Codex, OpenCode, Pi and other harnesses. +- `config`, `doctor`, `guide`, `ws init`. + +[0.1.0]: https://github.com/nicremo/dsh-cli/releases/tag/v0.1.0 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..5b13f7d --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,7 @@ +# Code of conduct + +This project follows the [Contributor Covenant, version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). + +In short: be respectful, assume good intent, welcome newcomers, and keep discussions about the work. Harassment, insults and personal attacks are not tolerated. + +Report unacceptable behaviour through GitHub's private vulnerability reporting (Security tab) or by contacting the maintainer through their GitHub profile. Reports are handled confidentially. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..007507a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,32 @@ +# Contributing + +Thanks for helping. Bug reports, ideas and pull requests are welcome. + +## Setup + +```sh +git clone https://github.com/nicremo/dsh-cli && cd dsh-cli +npm install +npm test +``` + +The test suite uses a fake `dsh` (`test/fake-dsh.mjs`) and a fake DSH web server (`test/fake-web.mjs`). It never talks to a real DeepSeek Harness, never reads your `~/.dsho` and needs no API key. Run it before every pull request. + +## Guidelines + +- Node 22.19 or newer, ESM only, `node:` prefixes for builtins, no new runtime dependencies without a good reason. +- Every command keeps three promises: it never blocks on input, it supports `--json`, and it uses the documented exit codes. +- Keep logic in `src/` deterministic and testable; add a test for every bug fix and every new flag. +- Never print or log secrets. Profile files that may contain API keys are written with mode 0600. +- User-facing text is English, short and concrete. +- Update `README.md`, `src/guide.mjs`, `skills/dsh-orchestration/SKILL.md` and `CHANGELOG.md` when behaviour changes. + +## Pull requests + +1. Fork and create a branch (`feat/...`, `fix/...`, `docs/...`). +2. Keep commits focused, messages in the form `feat: ...`, `fix: ...`, `docs: ...`. +3. Describe what changed and how you tested it. + +## Reporting bugs + +Open an issue with your OS, Node version, `dsho --version`, the output of `dsho doctor` and the failing command with `--json` output. Remove any tokens or private paths first. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b673949 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Fabian Bitzer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d686d74 --- /dev/null +++ b/README.md @@ -0,0 +1,213 @@ +
+
+...` | parallel research workers (`--depth quick\|standard\|deep`, `--focus`) | +| `dsho materials` | one worker per kind (`--kinds`, `--count`, `--url`) | +| `dsho status [ref]` | overview, or details of a job or batch | +| `dsho ls [--batches]` | list jobs or batches | +| `dsho wait ...` | block until done (`--timeout`, `--any`) | +| `dsho result ` | final answer(s) (`--files`) | +| `dsho logs ` | timeline of tool calls (`-f`, `--full`, `--raw`, `--stderr`) | +| `dsho files ` | files the job created | +| `dsho continue ` | continue the same session | +| `dsho cancel ` | stop a job or a whole batch | +| `dsho collect ` | write `INDEX.md`, merge `manifest.json` and `sources.json` | +| `dsho capture shot\|scroll ` | screenshots and scroll videos | +| `dsho ws init ` | create a workspace with conventions in `AGENTS.md` | +| `dsho ui [start\|login]` | open, start or log in to the DSH web UI | +| `dsho skill install` | install or refresh the agent skill | +| `dsho setup` / `dsho doctor` | one-time setup / environment check | +| `dsho config [set\|unset]` | persistent settings | +| `dsho guide` | the manual for agents | + +References: job id, batch id, unique prefix, name, `last`, `last-batch`. Common options: `-C ` workspace folder, `-m flash|pro|v4-flash|vision`, `--effort off|low|high|max`, `-t ` time limit, `-p ` parallelism, `-b auto|web|headless` backend. Every command has `--help`. + +### JSON and exit codes + +Every command accepts `--json` and prints one object: `{ "ok": true, ... }` or `{ "ok": false, "error", "code", "hint" }`. + +| Exit code | Meaning | +|---|---| +| 0 | success | +| 1 | a job failed, timed out or was cancelled | +| 2 | usage error | +| 3 | job or batch not found | +| 4 | wait timeout reached, or the job is not finished yet | +| 5 | environment problem (dsh missing, UI unreachable, Playwright missing) | + +## The DSH web UI backend + +When the web UI is reachable, dsh-cli talks to its HTTP API (`POST /api/ / `): it registers the workspace folder, creates a session in it, names it, optionally selects a model, sends the task, and polls the session log until the turn that answers the task has ended. The session log is translated into the same event format the headless mode produces, so `logs`, `status` and `result` work the same everywhere. + +- `dsho ui start` starts `dsh web` in the background, captures the token URL it prints and logs in. +- If you start `dsh web` yourself, pass the URL it prints once: `dsho ui login "http://127.0.0.1:3080/?token=..."`. The resulting cookie is stored in `~/.dsho/web-auth.json` (mode 0600) and stays valid for 30 days, also across restarts. +- `-b web` makes a missing UI an error instead of falling back to headless. + +## The headless backend and `dsho setup` + +Headless jobs run `dsh --profile orchestra --json -` in the job folder. `dsho setup` builds that profile from the shipped headless template plus: + +- MCP servers copied from another profile (default `web`): `--mcp research` (firecrawl, Brave, context7, Exa, Tavily, Perplexity, Jina and similar; default), `all`, `none` or a comma list of ids. Copied rows can contain API keys, so the profile file is written with mode 0600 and nothing is printed. +- A curated skill folder (`~/.dsh/skills-orchestra`, symlinks into `~/.agents/skills`) instead of your whole skill pool, which keeps the worker prompt about a third smaller. `--skills a,b,c` picks others, `--skills all` keeps dsh defaults. +- `.dsho-workspace` as an extra project root marker, so workers in batch subfolders still load the workspace `AGENTS.md`. + +## Configuration + +`dsho config set ` stores settings in `~/.dsho/config.json`. Environment variables win over the file. + +| Key | Environment | Meaning | +|---|---|---| +| `dshRepo` | `DSHO_DSH_REPO` | use a dsh source checkout (wins over `dshBin`) | +| `dshBin` | `DSHO_DSH_BIN` | path to the `dsh` executable (default: `dsh` on `PATH`) | +| `webUrl` | `DSHO_WEB_URL` | origin of the DSH web UI (default `http://127.0.0.1:3080`) | +| `backend` | `DSHO_BACKEND` | `auto`, `web` or `headless` | +| `workspaces` | `DSHO_WORKSPACES` | root for new workspaces (default `~/dsh-workspaces`) | +| `python` | `DSHO_PYTHON` | Python with Playwright for captures | + +Other variables: `DSHO_HOME` (state folder, default `~/.dsho`), `DSH_HOME` (dsh home, default `~/.dsh`), `DSHO_WEB_TOKEN_URL` / `DSHO_WEB_TOKEN_FILE` (token URL of the web UI). + +## Files + +``` +~/.dsho/ + config.json settings + web-auth.json cookie for the DSH web UI (0600) + jobs/ / job.json, task.md, events.jsonl, stderr.log, result.md + batches/ / batch.json + logs/ runner logs + / + AGENTS.md, .dsho-workspace + / one folder per batch job + INDEX.md after dsho collect +``` + +## Troubleshooting + +| Symptom | Fix | +|---|---| +| `dsh not found` | `npm install -g @deepseek-ai/dsh`, or `dsho config set dshBin ` | +| jobs do not show up in the UI | `dsho doctor`; `dsho ui start` or `dsho ui login `; start jobs with `-b web` | +| a job is `lost` | its runner process died (reboot, kill); start it again | +| headless workers stall | set dsh's permission preset to full access for unattended runs (`dsho doctor` shows it) | +| `dsho capture` fails | `pip install playwright && python3 -m playwright install chromium`; scroll videos need ffmpeg | +| a page hangs during capture | the watchdog stops it after `--max-time` (default 90 s for shots) | + +## Safety + +dsh workers can run shell commands; many setups run dsh with full access and no sandbox. Keep tasks scoped to the workspace and never delegate deletes, deploys, git pushes or anything that touches secrets. Material found by workers is not automatically yours to publish: check licence and source in `manifest.json`. See [SECURITY.md](SECURITY.md) for reporting vulnerabilities. + +## Development + +```sh +git clone https://github.com/nicremo/dsh-cli && cd dsh-cli +npm install +npm test # node:test with a fake dsh and a fake web UI; never touches your real setup +node bin/dsho.mjs help +``` + +Architecture notes: [docs/architecture.md](docs/architecture.md). Contributions are welcome, see [CONTRIBUTING.md](CONTRIBUTING.md). + +## License + +[MIT](LICENSE). The logos in the demo animation belong to their owners (Anthropic, OpenAI, OpenCode, Pi, DeepSeek) and only identify compatible tools. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..f7d5d0a --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,12 @@ +# Security policy + +## Reporting a vulnerability + +Please do not open a public issue for security problems. Use GitHub's private vulnerability reporting instead: open the **Security** tab of this repository and choose **Report a vulnerability**. You will get an answer within a few days. + +## Scope and design notes + +- dsh-cli starts DeepSeek Harness workers that can run shell commands. Their permissions come from your dsh configuration, not from dsh-cli. +- `dsho setup` copies MCP server definitions (which may contain API keys) from one dsh profile into another on the same machine. The target file is written with mode 0600 and the values are never printed. +- The DSH web UI cookie is cached in `~/.dsho/web-auth.json` with mode 0600. dsh-cli only talks to the configured local origin. +- dsh-cli sends no telemetry. diff --git a/assets/demo.gif b/assets/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..da1f6b3dd761ff6b9e6eadc3540f9f6c53ce1085 GIT binary patch literal 8342293 zcmeFYWm6np@TNV6d$5q;u7gWRfWZmw?(Pi12{J$eBoH8Y2<{HSox$A#420nBt_flG zxBsWM>iG;?Th%Yl+wMB&uG4q-rTA7s?3EP~Obxn21AssX1_TEa0}m4u2MZG)8ygn~ zn*bMw5D%9CACH)Xn39x)ij180`E$k>FPLAj8o#7wrKVw~W)P#N=VV~uVq)TAV-x1& z{4YefxrBHnV)^u31Z9FngkOp1JHL7*Euq&Z;g>4mpDeA9l#x+Zv`c@h@b;~$o@z>q zn#(`+Z{6zOyEQe9HSPVi0=^pQ8yS1 $ OT z<{%obuM!y<8~Y_aF0J_6x4b-O{et|m5;KLe%*cw0`f6MKAMr}fO jxCAGtx1Y) zp3dFh)TXBvQ1S3ZU;Ra2!_AG|t*zs|X1)FV@Y64$rze-^2@w~a`WKys7kxGta|KsD zrng^0?`|LeU;N))0RS4nfW}jo*VU1g)|3~3@_~T>0D$2E0>K8*0l5D=1OE3j0brv6 zB+SH0@Z6qoY$8t8VR&9&Br% {STclH9UezXiv`}pmpQ84%>13(J z<7jf?_toiIX9SoI+97taCI5v>aWbg&YIi!vFHYSo@a70rZ?l%I*Y0<^-W`J`(s+9R zaJ4mCU{TZc&*AR;*I2wpXjgE>-POWcO}7*pO$lVr4TTUoT88~*@Lvzd6&YTSD3E5) ziy%{XwEE~~<-Za6!gqKhN;Hf;KZ-fd(fSi+p8w`&&Zgmf1aBL=O{~x)cJ>$H-RP}2 z@j(<*JnV_xHsLGDtL?7}te=>TR5%Z8lQbn?B`0g?zuigEf0xXXYU+NllVTS6u#;}h z`F8i4U49vBm{U{h?ss=_?7d9SpH6$8KDz;X*@4zWdpW@%PIl`s3i18CNQHFv{8;GW zzD2yk(tcrLwfsR*igkIJ;y2&6gOcpX#YG@a0`6g1UjCuEEhe=kth}}y{esJ?iqqb( z0+$+$yJtQ&yEeU5}sx}Nu7vsIq= z;)@=i_Yo^{d-mg(wgW&|*tZK6 wI%VEYe)yomqlGw{p&gSvUG3XHf)wsZd z>eYnEUhLJR_}%!`lq43x^|TD7+VzYA+n4K~%Ayn3v+9ZjH*?wsUoMBp* y0B6t6d zXu4|u%~;-3|1A~Xbp$F1!xyoZAXOc(o9S^Hu$LPO4csq`cmK15t7}?q{yy)!-$8AT zd&^M6g8Sc-mc8n~ryX~vf6tI(w13ZgDK#E129GlD4!to@fZ-7)-p+XfIpQA3f y8i)UjUe0! zK)mPE2ud+a5Tzp!Q{Wsy9GeSaQ|iGrJ`aCBz7FB#11@2lN1*W-uoc;5FjV9C{azue zm6c?O)pHSKr7(O4_P!TC&m%>~83_GK`)DuEqa^VeiP2GueYm>xVbd-Qcxk2mtO6Gv zWhQ{DKZ%s!+ObcD$tw`3Wj{3VM-0V%{_`QFL4k~mSVz@@7YmLsq8C+W8bL-~o6kkX z>@VWHZGTncBPcr!NkRhfZTDUv<%I^}U!qkD87W7Uc(oA`9=b5lW0Yc|(@A1_e<6LA z$dIzTKuoJOl58!Ul56QAsT4mG)RaC*= |s5lM{C&c#(t;5E`?z%^*Fs~2x(hV;rJy# z5+P3JgkM@r#bya+1LT28_`*nCiNo+)E@Pji?2FAm|M@lU0#q~mjooM(Olnz!DOK7- zV4FJ@vO5|llESn_s5uq%M+lovGj9~`ERydI#exxsYo}!BG5~roAH9t_XqD%YuLOAm zU%`a_jp()QC>Po^Ao0R#XE19majG+Wh$R6k0_q4LX)XZrVp<-nq4Dd24im<@av1is z&leH|jFIkJb2iR8NMaZOAVY#^=a3M#bs!NVTqh}vyF78*NcKcQBPY-|M`UG(e@JA+ z(@n&_g#0%sp=}N&K98AV_l=n!M?w_sd(%`uJI}sSH_e={Z{Iaw B!szMTS|4|cA$OTI{%8 z&EfY5=4=X1SKD{QL|9n)bHeCz6ONH`Hbt9 z_ErL!>BDeT&w -gPJr9%BMgoaz z5oFOYgCF9EQH!7rk`6e8PE{Ox|04p7xjLx{j@tkXOK9rqD}x=PcCHgO587rog5L z3GMgb;S&Stbk}>}l?Z%m;_c_d>sfGJR$j$1mk@J`diOVtQ{paDI33C^nCS?~FJ=N5 z2{23+R%v|e-0h`}z$WH`tXgv7Fv?;2VeW*U4;x}j@b{GiDKvL;6z3q}JtXFRlXSd| z$qDxGItH6%Sk2w1ZIg&^Ev2(ON9DtsKy!L9Q8&QO;I=o45}uxlvERo77>>Z2ZgC6> zBTYr_GP0B7yhJx1<-S&f@b+5*5rpBC4ICfo9)AL WJ=*>yJ>8okz!!Wipyq>A% z;z+kVU|GY%Qw(x}lK<&ACkjF9FOBJ)g~YKw599Vo>L @fgu@G=V@k%Ntf;hu||fQ$|KBV(a(peEvDyo)M}Z3w?WyQK$WtzlZhHx z_~h_#(&@<-GQQuK#?v4orFQ_*#XE8xkw1jFV@pCTqOuZk@LGvhs8LECEkj7yscgp< zZC?QTj*5MXQiLyzsuXYoX5ZEB`w0{QfXGt$&?0yYxpe;0KJDxdl8U;UbVxH2dW^Sw z9@>@|`otKa3qXA&7#{!>vczDkwa`K!q=_-4&mF}qF|hn0RMYyr%ovI=1L|bp=>ULr zI7}Y__7!$8x5Q9{L)0vR1jJx0M+~)TZ(Cbu5gULIJs5Bf63PXL!NI(IVE$ I{;6vXB#hC^QOiSal!Uf= TCM2L?Q}cg4x|Art|Iqnq8x*ZD~k z-1#j*-0Sag6TE&8f|8pf`wW84>H*}rL1UEePbeS`eKZ9<*q8$RwIyU;Q8=%`#Bs)? zuTgnfG=vIf#Ns8lwHNHP7t=lLIf@xm1b#QX<3&TP`5J(saUQFo36Zabs35`6c_;pL z4AFH5JrUq%lmi_if_WOaBoCxn#~|DX2>o}7`G8uv2xhnwE+2T`AIOVzNJ!P%zgKxo zQ<1a8IJEZ>%mwf$g8lX|)cAnRwT{vyW{wVmcyNF)-~+!V7z77X5(BX4!M{FORu#*1 zBm?M(gXcy3)I>i;Gz09@wDx=fT8qGsLoQgkE;PA`vCX#PXqy131gn=#R; BB31X02a^zVT0 zQ{#@ U5W?evStFLW0aBJ2bkP>P>lnhwF9Hx-^J#F!Hh}OgVw(cEGytgJu(*B> zj$>1Jqa=tA1F%hlHKW1Yd>;si0jbZyqVxbiw4b_cnOo?HjsRSSl>XyWDzN7ATP!8K zEfKKGkyv;K3Vl#u4A79f1wK6hrJOW!$=yXhS(lUo3Ps;yS%P?x?|J!hmWl!Xj?oAG zAiwmeN6e1`>y|j{0L2l2;wLC4RqF18uzz&Aay`JY)#~XN5IUO6n;ROm$6w(0iODxP zWAF19r`WfGF?foU#ojUGq9G6=&knNm{WRZ?PU+jN1=$g?hjwxxJMi^_y~euk>sznI z(l5wYapZ`w?+PGmN(?MV5LIpb;XVd4EPkn94N{tkb04QokD dGP z{ix(3H#j7pruH*NqXje4(75y?aRL`NA2^#+So~KGnkrX{SeHxIno%~nblByaXrldm z`EUD-=>z_y;yk3UPI9AnjZIQpDzI$Wu&dc8zQt|qk5G +1>> z3|X?lK$PqJZMUD_{Ha#!OY_`F @FajYN3qr>>}^*L{&qhdC|cxt-3S z2nW~ww?--HpKnJ1JeWWaM~P<{*@@R5w<8Ne9f8Zf`3XZVw47D+VEDl`XdyzPgsm3Y zShd^+Y!3%)l!Fy4L4x8flUVMC`=8fDYSnQCCEKL%DNQ-H{E5>-Vn ( zfDx`3S>VTBfjtV!Ug)7z2G- 4)sszzaLo-|;FiXhxXMqU^*Vf_!PS-YDYJtlP zifiSp>|z}vF@q*O0sLC0*`f9#omx8xP}dnu4uH5cebdbK5K8Fy>I+P2GQ$!B{}ysW zq0 22iNa# z0l@7JpXK85#mI4HKBzx79Apr9`#b7@BJe6Q^*KEd`^&&a+W;#dF@+qs+V7X)Fj1s3 z)bYK|*D6L>=e3YcDz)3p(0;oanI=gsSP5VTn+Ci_=sQ!4>FEQ7U=YRHq;52`L);F4 zn;0T@ZZ3!bn|uJv!NJT4ezjz?t!>DoB;Xqu !;h3iN`Vu&I!gf}6cRsr$`q1Ac~ zk|u`mM1qCMW~E^|PziGkR{_J8BoHwGm^-I-WW}$klbRww%$?x> 904Zi6j)T<>RI{iioW>W 2)YDOh(%FwOKjK%H zhid__H30+;`^D|bA|VQPZU_D5$1aXhUT>i}g k#;CXdDcEjUM$ +Yz-1m;2PBMzP+ROn|W|SAJN2ls~Vr;|PU1xu3 zWhr66yVX+=-MMYV$x>Xf!0HK7;v6f=YaU{u!6WxfLyk=9g2LkBIh`ClH3TwsPJ_OH zkt$zEp0#!z-JV|5DuuT__pBMagsxrQIj0MtrLKf5u0%qw#B#2>hl7E7K!-1v^mNxS z4FSw}z;AVBT;A*6Dz4K`sQTKqCi+^N?nYPYM&IJbF!aVa=f*Vjrd{A#ndsI!-uS%h zh?$P^X0pvD6y7s?>yEyK)7>@I-&$GR*;rgFPMN&bxC`>Q3t78ESjaGX+zQZAR=vAt zL*IR-yN~U@k6ROa?|qMbMp3=V8G3!6zILCH^N=YeQg8UsAojAu=f3*#CM)#M_nbea z-GBH ;Bu({kMGWFOu%Dm-ntt_;E1jbvfkCK 1Y1awZ_e|2l_Gx{iho}DYFW&LL$S$z$DCK>BJi{9|@==y`Ph8_I-NBqu=k( z&mbL#jn8LUOTVr3mE~==(6?th$|*cXUEWlryQ<%WomLyZk?yHyNd!DyQ<3d!=E;Ae z70w_#&@NK@Ch7Bn{7|<{ugqMHvrf7vj;ho7F@xlIvDTL89nW*^uy735m8Oq>_1#U| zyiQO9?+rZ6yWao1#dtJ;TlPi}P$~o&dRh<0(1=Dp8osj~P2w>a3^MYvpZqT2hxyOQ z+cp98>IM7vrAmYODg)6sYUfN5GmU83wWh3>ckU~l0q9#A>U;Rcz$ZG feb07 z^LhW5Q}BT-rR;|bc`BPiPlcB*{Xd!^HeBrTbfnrdia7IaKZdE}g#_L*r|H(cW&QM0 zs|OTv{Z*MXAh~LQEo=Lo3U52)N`=1 {D#b)_SYgTq*-rAE2qt)uZ8<3>kf zrM= 1334HyF58LC z6iw?K9tvZpf+Al-lYqIDHdmeYh6ShYDiKro5V_yD%@0$NMz@he)US6VAMeZpwu&f` zE_o_`l|kK` uU{?S2)yYnuwHVY+vl$NoRLnY>Ew#nE^K?Mp3X7_%)FhOn zP|P+)k)qYsibNsJCRVqp)FO NA^!-L|J9jrRO|5A&eA zo+$Lc?NS4?`Tv||)0@++J&UI&vt>l`#0HVhN0DR5mu1DuU~ofAAB zM$rFX!z9KDem;c`!Klm}({Gf1W BWb|*=IX1I9!cWet( z7u79aq|~Ds?oo5^sFr5bU$FJF;1;=>`Pv}SIYYwWT_IL|txpEY8N^JEoyU#m(db_5 z=T%~ZiLX2nbmQO2$cJS4o4&?+d`P31O{<0Oo@g(FnW%5}6(qaHVwYr%Uz`kA?6AP& zqmFGD3s@9oC}v_F#!P9+U%i#n*VYQ Q#EyeanDD=Gze$E4SXmL z^nE*IPWUX57ae3TQqZb)Mm-x;hoAQ$RZ-qORp eCFJ4CsV!<(5`8YBLK z3G2&+VtR_|fwwx@Xw_J8uU#dVr^~D!h@;HER?W`ES=aFKlFQp)svq@}^YF>{=dlBo z^{9xlDH|P?8V{y>rG?xwW67lC+q4rT1q&pW9ACdyZi}y*E9P-ydfRUOvoNm#z&YTg z>9I7Lre2*v-D$7(v28BzvvvvQ%=X)xZ`z*)=F8RGY_zmUb+TG#nUn_(^#*YJN@&-E zNQziA``S=HvNbEXx%W>UKTkK+%~w-#9~l*KYL(ahs1EJq!j-oMkY5ToDX4Oqf$ tg0t_uiZ*u9|EA8Z8cMM%7J4oueIO@GN9_&o1cyYxk zV$^QDBv9ROzwBbnVPdj6iE^p7b1-oDW3+aQYVmBZLM4An^*n8AnUbg;K)l!e#!AsJ zJ>c%mmTF2JnN*W> @r=$ ziRwak*0ijDSABqzb^sOl5R~73F}%?4&Qjy`B+s Vc1?BcWisyeByx6wUypwf<`eJFBG*FEgpdpm*V zfN^L!|B(B*?M>IO2|v_ya+01M!`81UUnpr>0ER)~r9o4uf>7>|!!BEXYrCT`+?ibB zK+cbK@*zV|F~fCJS!ZcBYo@;XetcIWt!*}y!keQT|M$l3{akURkDZKJnbw^!syW2R z2HIJzN@P3Rg6Uh0A?Ttz{|DKt;9JX6e`I&_2hgqV+mN#I+`49DF)`J*sYESr&k;4Y z$0PKKsMF0Y%>+1)IoFuw;_lm*@$1(+k%ke8GlPQHN{5mBoi{W)e&0D)ecb(!&2AoO z&W-nLSZJ?q&l?XMrsWM=*85NRQ21xC$wr8EO9fq*C#_ $piB74TUtn>9JYXGc`ZbL{2yyUaW4F~Mf-iL7I z9*{LO&z6nBf<3Z?x_ z^T4_H@4b(hJNFIF;IpCE-erDf?Yd~vVKY~k$~1|iGT+*02GzaD?<*&F813Gbr#@{_ z`bVsre}3PruD0YTA4^jNtYEAywwJJ 7V?K{>EFj-sq@1qwA4sV#&OKrQ>ra`bb0O1-#famSE4b0V!DCL#g9qR2TVu^ zGiQT}K%-!{1D6Ck2_`0h`~*Yd^uwC1ksdmA@V+0(V@TqDE``@jw!O9gUW<_E_E3S4 zb;L;W4?Rz1up((`*O;D{{gv)6wU`Y*W+GtMeLeI+*;IwmFHA)l UOip)3UtWO$O#a7!-#BOqrV9DiQ+Ty zy}{;G?G^v RHQY91{C{czWkI)`NZ>mw%>r6N^87I>2 8qB9pUpKa}Y$r|DCRM>Pzi6?zooW`<(6 zhYcTwmT{DbnTNk}7r2cx&sr-wdMhT{z72d(Ixd6CdJUu&j(Cm?2mKn(m>Wq5cpJDp zk`t8r-83!pcsPGKIU9fEo6u-c5KB^Q(T7a=AujpiLgiP|qgdX(<#VIFB%^i=%DIp+ zv2djVP;)w&Xc7Kc!*+7@cxuh^XtQl%#qz)vsZvYB*b6Ha9Z!|UZ50=)v8qI+$ULRe zqp@B{N=JW6XUEt8K1r+47?GUHV6y53OjSxtwXa`Q-BXn>Y2@?x_!M)}XlC+Q=J?Ns zv~K2xAy?V2LKCP$)e<3TiaxpN!in$F6ARV@`Zg0w+Y`(r6G99V=vA^w=3nDH$Ev;F z6WhnEi{1_Q+DfSJqZ`TUn;jEK)wCYn$z$F4wT8s?xyds~+~&9%6f$)wM|i4Ba+W!H zb4`4ask9QSdYi04Vx|5esG*d)Z(nHYUq8Vend<$u>Jyo!bH$YVhf$Bhf#A$3j0qxi zhdMxB9W!P65jI7qH3b})MwCzLy`0(_pC+1!#qE5SqN_ BP%H2kOC;25tN-ZL_kUT>rF<#(rik{Y*aoiGId1D`F nVtT=5yttfah_*okyyrkvClZMGsJ_QqK`y;#1gWPTQ1`4c?ZDk8byxqr60 zx}Lg9Rda0#bGjQkY8dmP@_o=T8Ny(VOZ<6Vy;$`xM9O-4dYyB^BXerPTKYZ&21R;| zU-V$#<_%bMO@awbZ}ikw=IIaSO$RhB^$4uw^ *{A5gp3r9q({!)Wdn3#>yr~VxUr?qo!2X5u)zkB!!GjAMU ep+}xp&sa# zF1%x4jiLKWMVXdh@#nR{ms*2>f0IFW3Bh)TYHEwIhKuNkEcK{H!stfB5Ap_`GMZ(v zgVBw1VFL}}U#7pf&3tmBav?Wz8ZdmAUQAulNU4hcobrnz*hqzA;XBV G~@O4Za$%m@m0j2N?w8-a^eDcXrU!by$B z)i*{G^TXvBCSf%5(tQ&;H`9$03zRzwJQCABYSVQS>XkdGS@R|@PmCiCja%(By6h;s zS(a@jehaP4*8Ka85?ZdEUK*;J_-`sTq-HAr#q=-CbTmbEOg_5jX1R9Rv?hId{NM6G zr%CRF$=tl@4>yrIA2T4vO25|cnZ~i7C+U+}W&%}a=$Vt1;*VzjNoLD-(`%h8>o-~} z1JSd>tC4c% 6RK5t%SRf^y?zbtWeZ%2)ho4jSk@R_r3$ga5<%(=p}EpOxs7GL^(32h z{AyEj$sVd;sTYJ+``#u;x?1=lR=498M3U?D?n-ze*nj6YGN?Bxp4M4X6`1w0SwyTG zU9I
Ix$(+;RPxD2#@<@^>Bld~_PCJkEB9?bvTc#LZ3u-GEwiDt z#E^2Tt$eY7g2J}w?q=?lwL0eLTVE?3!XZUWOFc a9gnTM_jgTM< Rv$cUSQMS`@y{+)L!uJUdZiUDCRzb zVn2*^KU`!#LSg@d{{Bb%{Yc;a50kNO*|X?j$hWAb{g}c1Sk(TP-Tk=R{dmlS1d4;N ztWL2avvzSaFYT?k%||d0c$m?M^wfiI*@%p$gYSa}nW%%T-Gl7ggB;AmT#Cay*28>} z!vclFLjA)c`@>@2!;;9u($vGU;=}T$!-~Pf%4+9t?g$^0@VixUucnwrI07dcfQ {%K9<>!8wKpAg3?6l&j=FY_x^It=n8!U7$Gxn_eIm#G3daNb z$Ak9AL%zquk;fyc$D_r^V@=27gU1u7 STHM1if;5vWj`SMsd2%db%NUx~XuwrGL6@f4bv)x*K`A zmwLKie0tDydN_D`ggQOmJw3TSJ;gjbqc}TfJ-Y~TtA}cR60u^D5XFTf79!8?Q_miX z&;B%>{T)1eM4kQHJ$t%6Lt~x;D9?dx=OEE@u;Mwy;2gu@9MkVV*X|rU?Hs4%{GUCd z4m#tl9*g6DhI@BTgmpnoc|pQ<@l5oBRPln$;DX%Y0;~HRdwN<$U-nt*> U9o0-4~HGaVcGe zhY{_xU=LqHUdf1F%PL;W8C*j>yo7k&z@0Xz37fuXfY^U2-2*6E&gJ*6)$gt~ux>Op z;8=@ZJ^NQ`3Ny--*N`X#_#Vg+jnJdKF)Fz+ZoV-o@oMzF78E=oS8!vK>{WJvV<{o% zYr}C8d`t~)?Hq3H{cg$Gd?c}4I!IkkG;c82ZVeQD#hSezPj4OW&OEU0JlXEvNnI=O z#xfJ(TMgYp?txs B|cXy$5S9rWPNW@m#&hBT(HOl?Y zZ|xQnjv%}TplyddFk28r=~uQM@DK+8-aX*s)ZKsMXawcMSGEAQg&S{01ElH7;EH*- zr60zWuYddrZZweU9-$V0c87YvpbvX~?(cbao9lNEZ}!Ma^C-yiD2(zb*t^C4Z_%a2 zqbSs^*y2w?)EUt*AZo}vCnqq#0jPEsSVkA<&iha&`nTTi!cp|bNwmY+BF3fp{9oLI z+g<<#J&@wue-ZOjAl(U3bl5!#_kl2|v-`YryDhuM6u_XUW-s)Z+rhr-8lq!*n>v z9Je&z6O=FF`91=IydTT)3lM$O%L(drKs>)kK=%Jq!V$w$4}>{)i3uJ<7C{Zo|9%ez z1Ee0%Rw`H4CRZK)508<6(uK41ct0$E;IrHZyx~W@GXN=HSlrqB>QJ}n=4 dE<6x8`%m}) z>}SjZLYA6ga`>cl;zEx5wbGbjbo64!mR2B~kA(Q@-ov@FkrDjrLHEdY*;pJp)r53p zt`%lDJ~yA~uS>h02wWya|HC=kbgoR)Galz__Me5yX##GC*Bo=D+9ldm&NrN>O5 Y2Wx)FQZ%B ze!sBfYvSIn$7OVVBkt9Yjq~iYxYBu_G6WMJ+TVgiVBpjcP-i~>_2)wb2K&qG WgpVMyL9xia3W3TPQ?mv+VD7hA@ zgBs8ACqDjF|3}IYgPM6cNW`1n55jArbj>8*lEvutOnafsmWxRvUy?PAaK*_2ScFf0 zftcand-^a$QaQIUM9~D^Gek3d7TeS$gb`DHws~cbw8o~t-2_IGixk9$%=p`U`N(q1 zXyPh72>Z;gok|9Nfm{#Mkny=Sa>UPUCXpc_^A5wOicSr4!_94&!TKvf_EH%Q6^8Zr z;L+>$q@a0-dwk4=hcmrcAvY^{YKi9{FZOSP2(OuMRN#!DQ-dC*A2)+C(yqR>NR5IK z%V*%HV5Eghv9Mte=wb#Xt;}0yq=^+TuCQB3kZBq2n3vH2$fHv&HjySsKW7hRUJB%@ zZar+{s_FdWTw!2|!C_?V!qZe>D#rQU#$p`$mpeAPadFYc!AJ#Vn?ggrgvIBG{GFL? zw4n{*ZD|91)5k4eO-awco(Wz5xx3~zs-@3Rfbs48CB)6W|3IP8Ea6OpQZ<1h2a# %{5Pu!AT8maz6<=z2H zY4Alg$`btaaO;oHD+DV|$%Qua`&yX4?Zx4Z6%r`_m%?!{u=t9YH=W;GRkXagx}!*z zJ3ZG9KTp{EPhmJy=j*f1zfZ5vd$7p4ja6cb^ic-0dcyM``O$BzW;jtyjRO{3RCYF8 z4~Va8hw4o&SW?FUK406D54)J;r!7B{kG8+)AiXc4%_|nY*ZYP}_1LD)fN?|_V`+xB zP!>j7tB0qDsuLp 4*LGIupks4PRGA ztP=!2Z>YcTeb0bz!`?^rlaEumo%VBvLT80^P1Jj*Y@)yU9hGhbQ45zDTGm&9=dtU+ zOcDdg;@q X{nI`?lnU z2kA-nR|E7jAAs$;9foeB?hGlWPUEK6X+Kcg=S!n_`Z~=}`kvJ7#V6^-nJBA5Z9qbs z?K3`9ZBq6lGrKH@(55E=&+zNi>r||MJ kj~d)J_oR|l6>y6Vt8!(Aa>rci$SId zkik!f =$eaItC zBugOpHiC98T3Ph*(_BakbHu|mrX)mr1;=3b<&Y-&T?YOkV$aYLIH!4@=iA9;ezl~j z9oS%8;vI7x?x@xChdA|Th8>67+rq+66(EV3EM?zaL twKM>9yl*sX!K~Sd6 ziEY(fQX~x7-0HKYA)uM~4MM4V=)9g>{u?nAf&e|LX1=}VT)jwa?&ykfwBT 3M-vyg*PPI0L!$DO|)5ySlIssJ1|6ys1HpyfF}716seh%KJX7S9M5GsQrD9V zS$=|$l_FR@nO=l*EHa_(G#Os0tcSO7yhT5R1K>n#H8KLu{S7@Mp=OVhkqwxQ6pj;` z6BS!DS1m)dn-v$IQ{LPSHb=?3XIqg+EM9Zoa;hZu+H=V0M8PlLXL55s*AlnmsVPn~ z!z6#;Y#4`nX}`5#{r#;qs6A2_>9rwWpD}C7xFol3HE-3U7F@X}an(AdE`9cs^^nn) zhAQyP%r4Q0`Ndy*F0L$`a7x$a6!z6;vgTzl4AvknEZZ}g!49R$NA5$dq@^j??fyk9 z#v%>P(r{JrQV c}8O4h+V|J znvQ^8=S4&((1{|uJVKa?OeSi98m(ZFzyH~&orn6}f!e0MSCNz|1+N@X3l0rl3h^w5 zHiP0zv(>&0uMr@E#lR`)Q=j6g=u=_w0L78G5%!Re;~|P1>uBgbk~HKzlK0IfQO$k7 zV8}(B$D3_B-iKkGkjvDXH@j%wnul?(kgM#oH~Uh&f2NZ{u8Vmk4mE22%+-h7#EX7? zL=@g-a7~>~)^}R%{yt6qKES2*C~+Ra`?x{ceLpBAd6`u6xFgv8Fc~U&UBLVAK&Sf; zs$255zUJSFSNGplwB&ss@6*Lgi`zhhug0#lzEm6Lie*869tL_hA7;CsZo8$Pu4>T# zuDa1rXej_@E`adAzh5qpmL9~K3xd*vMRLKC^bmzyh&nxnelEtQg<*e=1qpJwiq6tM zH}*N|)QKMF(i|r{7pIsWw>lTMi5{;j7jKXre=-*zMNhDrOR!5%c$!OiOHcHaON7Zl zoSo}PZzdnMZqZ9);oG>sm zjMJ%rf7C{l7F}@NfWcF@C4O2UdCMgAR3L?E%PWA({mE2fY2XbCLyQ9Px|aqfSqM{L zmQyd3(`S}Hv~+mRz)HI U{z3bwwCF#03mJFHw(2WShQ)2{?o420E{=)h5Sv0GF@vxp?({_ z9c_CSefJ`LUprW&yzHADs;6y!Wfsu5L6>Vfx=0E1a~-3L#dNU9bdtpkRb;lxV!m5s zep&=p7&QBgX?VS@z*=bZ+3w`4)d!YhYgYTpbNo*{thNff)vs9XM2hXSi*4 uZzZ#DN~{%O?)Z*y-^-aTiq zi)N2BcdR7X)p#ma6e+8;BQS9!@T35w+LxuebENr}rG;>$M{=YR0=}h|eaq&^C@#yW z=J?)J_PvWEbFeIPk|PUMmbJ=}y<3)j%8_$hmh;4si&>sa$eBk`p4VHJ&RU*tTo!K6 zks_`}ugsp@W}75g9&dV(Z(m;QewhBQyd;FPG_t%jj RjDKnMcklb9-pSYFs@kk5b}liL7Xe<7!Q }K@LSj}T36D!DN(w*~jjJ{t_AVVEOwEkP*3Xag#o2!Hv-OyB z5877_x^oZtRt~Y2_qQDd%`i1NS4b#x^tWM0sB=Y#> Nav2pr4&tfofO3zvRg8*o&e~U@+ #(8JFT2jKbT!T zstP=89_87fsNSH3ZiXBt)-B93+9YM4n8BcMedjHZ`wA;`*S>n!9l95YKG-zonPbh^ zKCPP5cH}lX*~E3*tA-vmRUd`89-4C;-d1rQ@GKox9q2pmbjcrgRi8aU&oO!12BD~9 z_fv(^lSJt0&(mw6Q_n%@wRQQqI`55s&5bcfs>0dTAGcouymPUqCo-oOhtSo@kGI9A zH^nu7s%v&}D|VpO%`bSbSUvcEdL+krT!o*eX7i$NYtT=;0IXU75g(AU7D&ejVygxH zM+Au0f~ENW+gOB9o~MSp_ujghEY_GK&dk?&AN1W*x+)&j`Eb%|adP-@OKNdz`0$!* z@w)l&)A-JwDluYerxGhMUEo;n&kn-jJJvNj_8#~|{3Mh=Na)b~&)9xE =gQ|r8Ma_>F&HOLBf4m&x zr=I%ppAkilw>$g?{&2}hz9mm5iudy92fYJ715q6Vr2r#c9V43n6K@@pr~tE69kZeU zi$)!bfdH#T9jk)?n@1g+p8$KPKxgWOHT<0Z>4GrFlf9;ny}pjCS%AB{j(bReXR3~8 zK>)f|2i+6kJ$uJi!EciO?nQo``Sgzld}Cg=dR{I;LEd^nQ9&W8dLczYVU2oW1Hs dZ{}>7`h&YB_vJMAWbPGL)Rd~CM4T8EWx%RTeBgf;Vo+*ByZ6m?;xb$(V*Zb zq!`+u7 `;kg(ZQquGM6`NFly%O!I~6La*98J378QIjR5 zh}Ds+Nw V)f4rZ6Qgc9>XkborAgK-P ze|TgJoc~Z|ZXN&!z#e=G{NFq>8i!h`Hn%4X3qs3RTg%WFMaU$R$^L_JAcjKFdb#um z(@;FEY&bPX9rH*Mt4_XYSslw*8q}sYlcSz>;=72~=5kp*+f zRxr&O_jgu9cRnU#%>S7^Rbtn1QQTF-I(~t zhyR+JdDpr_z+hVL7QT(XNKz*A$`<~u{~wPmXtP?`D!4b5EgM10( CNWu5cf7jVn=Fvcfp&`je>`$^=j*$()xHQc9dFm0 zhpXNH;gKc&-VI_1AiopygtrlFAFfSxccak&O!jpIgu-z>3|oI52F4-N)0eqoVc+;b zrti4%@wt8JMkF<1DKZE%vj`SKlj^wniM_aV^D}pozcsk+>wIpE5Xy1ui`Z`IR@@7L z=V^wR+XGt(_Q7H~U;_Fw+eB69|M18hcFDTxPIf7V=CAA^rtc15?sAbFyXm&?FbZNr zQ_70<2z22+QXbF9_A(UA{-Z9@{Yrb;LAOR*Q3M~J>qjvEablMy>@ez)iV+#zFNk@z zU7A6~UA~u>ZePw3j>jj4ic)tQWrI*X$^x~&ehxg)%Ufm7%BgsPo-Z$LFrP<&Zh}*g zm5r%RX&4$s8BS%!JnOoZJe;}z@yO8k>~)X_)KP=>1S dD@}Lu}*K;@w2_4RzYnVNXUzAD~%7ncwOU8vrIpYPlBCL z5hEeTebF!RI2)GtzbL!QsHoz%;rEkt%+Spc0!o)O%+ONOAT2E*p_E9>04fM5A%b)% zBA|4~& p~d>cJTV(Piz_xL zZpBGy_=Y1uuM`NAE(s5rT;QQbV@YxrpuGOsgnXVzXo_bz!Ju2vY$3Mbfel7IaR@{u zsYpu?Rpm58zBjC3r=c`e6(U=SCRxW&<8`Zw$iIoef7QF}jDX>GH1K4FP=E*f;1>Ep zQ{k6sBswLi9zC7MpGUQ^crWVceBu*qUYSA&&}c9M4RF1(_)B*JqL=Kq&F?kfes%Il zC&S&l;R?NMEA+dKxz|*jN}Zd2A4DNZko C{{o5eIKfO{I+=3|3LWoiRA zx37;6TE9=I{5~Th5y-A%qvQ9N>q+Q4 xms%_&0QH)B%xWrJ1N?D` z|A`6`kFNx+=yfUO05|eAeq*8+&XDW6=^Y?97PJ1I!LXzQn{2D%B2p+GODgsipe+Ze zpa2w+*A#%|v@@kUAcnuz_wUnmWA{a1{g`kq1ij6o0@=HM`rWaJ9lpte{o}Gws%$Xz zI(mjv9K)f^1}4qIf=m~nEPM-@TlE-*S3+3ga~nKZGI~U7p@RYU{Q&ARV~Q7mRiW2H z=-av}Qi+*jhCZLN!u^5pl>IPr3o4MXZY~K@8b~yGN+4; DnUJ)Xo$kXPiXhqs|a==v6e0dB8G<0PmYBQ)h52fRB4(N7Hm!Z zySw2h5Mjw#d{A#FrD+xq>!@Hzq7jB1i3p_^q5<35ggVrk;58)d5lX`}uQJdODjr8Y zhJDOUt6%Zsi&%V;=}&h@qzGi^SjXWJrd9r-+AKtKw~E+4R15Lh<>&yqGBJu}xajVn z$j}qvh3znKy5iO`q{lRv oQC7QEgE zAhnWK@(&Ad7{qLx9JwN(h)Dpw#R0y)Gbo5~JRCuAR!(+~N}Fba?7pZ*;2~BNK&pT! zAQFh<00Motu%VwGV1;dw7gYN|`eZaj1c52_yj-G%^)>TFpkf?6F{$il04i^!enOcc zrh?y5`1L%|BiZCA{vI#BLBU)!zuVm%HW!p{ArUxrX90Pipc6zLtd%^e1Tc z0w8q#)U(RthB)0x1vDU>x&0+#54ZgS#e@xwwbr&Xmu+4A;28!1WPP1U2-V<#fqC0) zK>F)BAdqi3bRSF1d^g49mJJ#kCb0rt)W-{D!9WACL?|09JZ}&P^+pisM+j#m3dDY9 zT^+%fLgG_gDBuyGAq{yg!!e;IkrMZSQJY9bfkEGP>U)bgNx%#>002xwLwf>R2>k;V zf4Pwc7N5>MV7$Rh@c%Gua^DBtW$CG%=zS2n`sOwcqn~PtSW5WYK^D6&Nk0N0G^rE< zBGHr$fF#}CGo-DrFy(nhO4B<*lq^}rye|TeUodf2N+*|dc{f$-Gi7e*-%o_ ZXYa%bml{I!%Bh$B|NU3XvzL7F4o%@i=@75-pFP5$rVa4o^QeHj#SQ0FtJzw z9I4KX01)mgP@=8gE!%;C0@ZoGB3W*)UKl4VN#~vdIfdNFkf9A!qBcWr;5f-hj^}EN zfYwuKk0t&y3b5}1NLtdZ?F>oN##5ZbM~Jb70K-3*0i2*#x;0^QG{9b8syZjwS3E$f z1L%bc3{tJh*@@_x2$Ed#G{-!3$0&yzJ>>HS(t3)4yi7;b-kD;g^F`$PIbpi{kjEw9 zhqze9`_*r}#{sk@@-+Kku`EYRLtwxtL>UQ@R|86~1z(=Y;|wBk6+X&Ys;F3n!6R}L z6Q@KTSp`ZV(LunfG9>fs%bLmmbg}RfCl_ysG7KV|Wr7C}g}}imESMDr_$mSxjl~=a ztCqJJ03B(GU_j0VfWMDq=L_Ta@q(OOC>ejr_T%S+dDI`({FqkWaHBPOR=wkrbU0~H zGT%)ftnt$uJNf|~JZ&H72-`-Eyl6VJWkp039g<&GX^e8h9*Dh>F|b@~HLzEY_>&K) zKB696Q+lDOyvS)v6lnowi>G@M(GoAa_eoq60L3k64YmpDRrv6!Qr*STakw@W!oe4^ zg8%?h9iIpKILw8D+EGW?M}-!m? AnOuqn?+ehKJUxI)@bqeR} zcal7&z*KKv13jv%6R^0au;c;&ZV#lU1QUt!awyu`j3BEcoT6R;{D*<#-T=<;uqqR( zw_s}`fJdEooE2O63vjrqq+%o`(7f`Mpr>@VlVMdp;GJ6Xu{{;XTYvKtV72K3npoK5 zFWQJf{Q_`xc5a5z$S7DpSc;26BI4_x(=oPbVpKOhu{d z^C(-m44!6OYOGWuEj1|pKr9^uOoMrXj0Yj2Fe}_3gjNXHii7%D?Sl^|Ad*sg#`~bu z@W(h^Fdx!cZ4kf>bGqwpr=?`!S?M#sK@zZM9*U5?S0K-a;DA$dc~6l10#rX1NDqT* z!@z=r|7kvd`NMkDVc}FjQKSKA5GV%-A6X5}5CwDTs@534YNrBkQM$dObW7xM$M^wj z9fL;0_3H_(BGzQKonfqi@YJt1o2!z^KEOF+H;`VgztJl(4ba2)sb&$9KsyCdo2Sg5 zT?1P(99D9aXu*l>?wr^FakB@hmDD=IsdQ+dzQMOadtiGfuaC*w{`+kGU2&HY)FzVo zTc4=%<70o103WyWKd!LkLuMO$Lzq1u7 {>m-z9Y|>1{B<#s%R%ptn;HL3H$Qb?PZ4U$`z Kf0F9vMk%5GIF`ne+CX)j!F4+5RMnWh6XmwYf`3;zjuhYL&NUeFNP2WeBI8a_$t z0E@iVt-1*06C+KFkHZ?2ias2HqH+L~3$C+OMJt;{FE+nic6x}i!=NQ^X; 5yP!kS56yLvl zjS=&Y2gFbU)P-Xi+W@~3gpDR1(C5+yEGb?*<%F oH)qJgz(yBMBKoPu(Wb zM9WleF-SGH0j-rGPiI+-Nw3V4UfNxKTAz_ri)=fvo;4U)g7;LQG_>a8vIL@^Z#5Jb zor>5Vm2k*c;q2n)W8kwQ6o^s;+O^-yU#k6{FU+e6V+d1qRRWemRZ@Ee;mC45d|*_W zr(QTW>shD)o3X44xUL68zYmnfg3G<~Tf+?-miUqlk*2+T4KLqBxxz>g;r5!akzR3y z4w*B1Ep#e(=X3*+a*_)Us?nV)*26CK=c?iIlAJ$QEbJ<_ShSeQP<)-S7Svi|x>$0Y zinwPa6uMk`rOCxnU?}$z+_Ggp%Al?fPqkYVrBXtZ$)dw3v4+`Lf@nb;0!YUPq}$9| z6>GkD&Gw;?+UqGG_NoOBRHlE>?C_#qH=7atiVNS3eWOf3tO3!^Sm{z`#MQ^a@Q8|> z)}N!Sjo^^0KthnPSA0>ig&|&xg|D6Rg#hChY7UE59gB|p(Gq-a9cB$3+HhLoz|Tm& z7K<60aLT$IMWDMaP(!xUjVVochT0&o?Rmr9Cj|!@8*cx=u7I>IUv}Bx?XJ7G&rqiB zaM|v+7Tpni-DbGcuIQQW57*tXfp=F(YRh(gzBZM+?%<~GOuA-OE92bw#F{g6FYj8{ zEdJj2z@8szJw<`{9?twOaclMHqxNFzwX^tLmDX#O@LOTqrtZ2I%habL)~g>VXvo*s zoz~YA$WyJ)s%Jq>i10)<^o?5FnK9n-!#?iHxZxLn=C1!N6tVx&f=#)h7&m&kR+#HV znO| F&i3 zlKe3a&K@vFy(NFiIv6NJa)3JY8f4lTWWE_*@lrxnB1P}4B;zu+5^ZXA(qWL?%ugJSyS m$})DmV^JnD2a?wQ`JX#gN7 z8P`CKd! |_H_Dl)Hnm0~_%1xThi2DX%^|UA7H%`i=je|?aU707N<^Fz(iL*2S zJdF`cZ2X(1{qCRbq%U)&`|RI5%cwhr{?Dh1W~ZJW{#A!hm55ILw4AQG5m)!Z z`Zi8g&rUZ5v6rMz7b#9RTh4UuuqWmIN$H#Jnw{ylM6@tZKS{T1znK{inx!g}QA)J4 zjh>yu-OS=s%&HyqW#6#5lFY5A&$(pJ;+4+K7SHW7&p%_EQ$@{<2F)F&&tEpiF6D^r zHO>QA76vvZYk!ZQ@h=c$EI7KLZi^SlZWr`W^SY>F%BOR%;6=KA6rK>(W4(SdR4Xoh zk)35eQx2|rAVjqbqmf_Y`?*ljviN9mksP?hZ?z1xS|Sr(RMlJba$T0sm=~ObJvmrJ zT`#L<%t_wDR1c)@-@ CW7u;)kS@y9<`ZLMaC6<6`S zMhFqpD)Rr_=BCv~R(EbVB>srY&HeM;ooWpG=fbk&H@6n5z2MHXW@EJ$Y_*=4zD9 wnTv3OjqWjRfL)2k8biJ?-~+5BNO zPI0S+LyzS&ZI)S$efzNSOk%lDZmW)^w>bD;R@3qWtJ!+_?NN)Zo4_rTjIH*jZHt+$ zk( 8zr}ACfw;Q`UYiDzN>9Tu%JA0sk&WqcvvRSG{`F$dfzj|@&x_W!WtOwEN z`*Xqj@%(o^avI>{W>3Ze%RDcY;F_M-0ju?)Y1P5MxdX1|L%QV+JcUETfkP48FMgho zr3VT}l8?FAa9evBNAlLn;tJym3dc_6M^^$<%9+O;Bl}hT2O7BJDcfTj)+1f(6J?5H zJm7(G^T})W6QO| %8Q%7qyD{Dc+kW;sh>~_Dz9p+D8JVrd5KYAH*M%s1U zwR`M8fA&!S?0WYs^y5qb>$sW1c|>!&fc1fO=J^K?c8`xRFWmX3$I?-Phc4C^DIeM5 ze!&u&FS0_Y(I1bqtuOJ1FGk!he+VLS6{ZVumw?dAcjQ+U9yG;*ysp+)b=K5nxQlx7 zt7-+QTHICp$9Czav-{T9J%ThX1E{v ^(J-x8t?de{MU6OuK8w8VSzaO z!uKv~#Ep*N_Q$MmBR<|p7T@lEY+HN0w}HD28n|81!JV`6zxjB3k% %&MNxHoajq*;US`%eBpuHrcak3c9(4GSO{MMmh-QP^Xz5*mlM+E9{z| zEzL%~Vzcf{dvfI1pRPdh+1ZradEl#drfRy`iScim`;TL4%ud~=Dsj)}@gCJ>ub0<( z;qX{2&OKX-vjy52Q_o-g`;)FPuz7{>cps5%-IZZ^bsE=szv-v*mn;9n)jvu}?y;B3 zTWhn;?^x%{&mtG@zfa1v#s%NL99f2VR@~xomLS2!Igi<|xLWs+_^jbVil1(;oa7>> z5`>gUC01bB5N0#o96TA$Qf11s+(E^6Lb9bQwAOvQZEqF5ot5c4+J)7o^+`%3m_r~U z>Ld2b5uI<{s6-y!OWKa=A|lU?eRMxRPlT79Qt_wA>W`H&O~Jw!!$q4p*JWCw1F{<$ zVbRJ2kHqG~MRh*5hU@Fd?6r@ui t25dg6_=;PZ9E(43%H(%P)a#y5nz{b!aQpk#w7tsQ zghI68Ox52P6ArWmo|SGAR a?53b3Ic tWno;>Jy2hm1D}!&T|1pzK%zMQA`r3O;dnV9lf?4av z=P!p_kni+K)Q#`#Rbi0dd~ffK-{S06kpFTv@vZ-AIdAZ*wJ^=wR~wP8!2w$iQMUm* zu7$y`_hfo+Ums|11qU866XOC;1bIV(&TtyIpbMyLNbuF-dtC6%pURD8lQVq8HQzsm z=oUUS{)*-etOi-M@)1LxH?iJ+tUzEa#79 |CGi>py?eN>{O z70#~uiLL{282es4ZHd~)S%tq&D9W;kjkYDZRq(^m8(Xnlg5Km#s+_nOW{YJ;m337q zGocSY+X&`^bF9qnP-wt02k45f8y^%O3t(DdgFCCM%n8QDKoA^k_nXyp4uj(>RxTfW zd35nKKH=Z=3irg?BfVh3PhZ7Y@9Pyb8vHzb{lk0p*o 3{jh_f4FcLEGy=dFrm1lk~~P?*InFFTlj_9E=NIZqQ%3IwO%^T{pMiG8o0t zC;p&J-87PLG%6P1E3{0fGih-t`Sl_3sjc`{b5DwKSaxEufaazjQFnQDN`J9W;)L0O zMtMGi*RS1Z*Pwp^70sRHzYx6JE5|95{ $g8+LWE=7zgv&yP2ttf2ch$^*`px zOpIH_1q$A$&KR*J)n=IOzI?Q5v0?V0ZtR50r SQ;&j?qdTlhlA=*n36p zV0E%|zj23@>h&UT{#ifmW1>7=$Z@^(?de1_4(f@9%HEyYCb9Uco}ttYHh2<~E#z-K z!|%yHB{G?8rS0^5E8g&w%x|)dLB1O#Ybym0X$L~3yx!xyY_H0CfUpRpdh$4+ln>cX z=`38Okp`zYG6hmbU{_x-@e*9yb N|YRGk}gFXA~-Sm*%+MG*}*D7`m z%IFTmCgbR@$!4(Pr3Ux L1P1uCVl{V^|Q~l zIxP+_g8m*!H @U>d~mu0PqFlP&O^fD=jqQLE}N-Ez4cMj`Rb5- zZ)4l@RC>v=KU(456tZfZhr_oS)=@aDXb5yv=sfdcXsEJ%V!A71v1Q6?^`-h!X8t z0Di*)D|d}Lp8fvwm=Z>|eE~x3O%Mzh5P|>;ZXi)~gFt%ED+ITH3--4hh5c4!pQuRr z-?UknUlIg#XbgbR+=i03Bd1yP&lO-dABmLPfx=2=8Ga-$!_=9^1=S*6u(tv*-y3G- zaaf>a>uL<6J&> X1^)Y8eQDyP9Q@}@ES#~4yB;E0oAAY01o1;ke zYUZ&A5-frY4PEeGOEW= zL}`xzh0R~IXqWgUc`#0M33Wp{WA@5f!+}ZjzAK`hE=)4AVCKPw#=;;^BF?ncSH5!1 zq%RIb2X9#;Kh~){u!@trheJFtRWKVO>_2fDxB${z_)jvUm&te*AbkFHJqif$I&K*% zDKFVfsS_$IVY4l)Uf=Tw0VWW`LPonJh Io7)r;0i-!Er)!h#OTdILOS~2ZBJI%SZL$dlwQIZtlo3Emo4Ym%(_bh- z=~+YR37E0NZ1o~(BujS+<*Bam-CQGVM=A;!bKaLorvaKchU#26n%+v5F7pBj2O~?a z-jPLMh)mJjc4);bY?W*C^y?N*w`PTlhL9RGwJVyoM(piXy+@lYz72*PR+<>4@Z1hV zC@GG2my1}Saq(9VgSG(h!n;wwicoahRB9`MKSq?QnRY<|4 R}bQvSOrFt)Vej2AE`k zj=w5*2yDKzlOHSr{H<4|v;lq Wqd? zw!bRss*ox58mVp;Rl9XXKQgS{=8b^fjnXZ7sHar}w*a_lHqgCPFvufdu#f#+Q`a-u zg3FKUc#8%=0YJKldSb$QBIo9jUI5L4^4?MN^ik8-a`|stU*aii#l6viRHZtBaxR>0 zm%V5&D&??}YDqEWFn<|5NmRIvG{crGrbt3qnLr>)d3{+~yhuLa>K!?@!ogcz_gc-~ zLdv~Rtst*7oU*($O#W-2v`ct* ?gMjp<{M1+@1gz>gQvB)rWNuqPLYte`= zMLiS-J;*-M+c3aoFE)Zh{aUFflt-%4t~O$_CtbAFL#8w!Pc59Jfs&&h8qtSKQR=Pm zCWxehzi&rHaaKehH-zwDJ{5i_xoYkksnWWxdUcIY Ems6wwH=P^l*&!Q7%N%=Jw y3^ffaYH&!j@uvt75zmL_}ytHxMw`3AYsz zJS!I?hz0goDE*a{$&tlyrfF+cApJ#K*OtpRu4IV(6+^w-Eh{>eIcqvBN-3R@-u4)B zZ@H_6HnJI{cag>$bF~?!{-bD&l(`!9jJ7~;E5lcXZ-LTfx$Vpy$~eL|gKwfRh$HPV zF@iqPh C##fBZ-|Ery5lT4Mb~;JPb92R +27J)p{0d=*mb@luSs cjvfBV#2@sCqJTCm$|K8U%Ij8`dUi4}CMNxwxug zQIQJ08mFs>n50w6wQT9@lZuVFdnlSO+hpCApF~(_8c!3rkPg8cjVZ^*pX360v#O%M zPlco+AGy^g>kiSjH&Z%GXW0lVMpwpqqTd nnoK8#`&N1#uDjOyJilvlSg zUUE Ni%(D5aQK 3Ce bu({B9T}7ttb|W|4wxk@DdpmFgn3@gj}mBCYQt-P=X_ z&x;J-78$D+nK~Dl#}`@tEwY|2BJh^jXqMQymN*_RajGueGhX6yT;ld!;(5CS=Ze7p zfP!Yt4#N1rbv7Q0Hv9r4lbcHeJ+{%Ql()>wIQ 0rgAEG}-YP$4X@ofYs6CC(C+3(-8-|uTwPg LV%3$6`R_b zw=g}FKn{j&<>HUM%`-GucO`t^UfP#Hi)GcK#coTb8ucN@+|>bjATKZDaDs^Z8xx`S z(*emwu-Cg9>uCqZ&Z@>O+2bu)&k-}p>o5fWqoN_e2dwZvBm}7grVOQKRvj~^r7!@e z41+o^uC*5|P9CaGUSw-N#%sQgYn~7PXFYP5v6QdQ8t(arwaDFn=?P9zR;@|Ib01+V zcas~T{tHp#HgM663%O@bFV_--oqSX`l60Qk^~lNJHojDCq;zhij&G#>+ekm%$iUmo zq}j~k+RT2qnWMUyYrL7~xcSw0^V{3a{Lh=;zik#&ZT{%oEF9nbe7Z{b2rYuQ+$a|v zvLFf)0D#W%D~z`)99=;|fNCpOAOcYPZL79wtFCjae%!T|3; dWcg7ueCfv6hKJVN$&XrX=Rh`d=?`=h|JL6pEBA(*CucmRYVcA`D zbZp^quh}JB_&NJQeKo4YUUU3CP;z&k2fcOIBO9-V@mOk*MXvpfSjXGi?2p^--`%9! zOIUxt{=xl_jN+(s*WYe859V=(M{z#xeyYBg;J>@;8*x2O0FWT4uG+h6=9k_Q;yxF~ ztFQhg)srXlB;dBJ5ZIqr->rU2h<~;luMU7i34wwH8yN(!`5hu$44BqEe&6$*?*5nc z{l*v~d1HHch$oGp7iE6TlKWm9-4OBLJ@!YDCjzrH)k$x&4iXUiG>x8APKWpW4!PbP zawi?~ zyOcW8rTVlI>-(bGC))XR=pfSL 9R%TsvhDm+z0Thb)ZkFNXT`;_tM`a7U1xj$mYb;kyfXdYJbwR?HPR=O z1XSgpyDt~L<{pRtYHZ&l;EW*An(&L@$!BgdQtnqDo8FTr5++x_!qUAMIe8VIb%DnB zkL$k3B#-{v@#;D5EMegNCzAj=smrh5FAKP1b7+YQx-JRg{A$scKL;-F^5T$W-_j)V z;w~bWF}sR2vR8svB_`2@epmW>S9M(^b$-$04zC-#UboZ`&J$nPhmf@5UjGyd{0pP3 z`Q_h|Ki=hc-Tm(RchYrF{&jElbzj%@pNZ@Kwd;Yi>p}dRA=;Z^?wb*bn^Co!F_W8d zr<)1Co5^=Kf0J&e@^7ZAZ)Un~NM s)6L5d3Fh4V2(NKvdukh&ufLfG8mz zgJgF}cH27`hen!uX--EJov6!9cWG|dM}*RQrblIYzY};2epvi|!5;b<0_W6 6$OABrKOLP(-TF&HQb)3qyh!FsIFxZHO3M LDU{Vd&$ry>MRucmCnv+eOIQ{|2JF%Wav0&9|5P=SN$a{WdMFaU$Z#xnKxQ1p}CX z>-$0|$;0)9FqrCpfT-#@xi|DbKs1d_ZA2YEy7TE GOfY-XP!l z4u~M_6CMIwJt>R+>O$%J_Q~@pllNWo;qAI@q=G^)G{CWEyoFR;`EFs&kk#OWLO6Q> zZ`@SOr@ Anq$Tq4aAL@rqZYs3H4d1?(q zT`S!swzv@#_FSr@?QUUBLtAU&8^*k%xha =oYZynyi`C}? zl*Mw5mc@Q5QBK-~AvO8pP`{bIOTsB1Vy9yhgl#TY@R^4A1(lxsr1t~+iQ<$|_^lZg zNYKDx*4+vHS`-WhKs-H2aE-=KTHf~xg{_JV3JtcxjYuf6;6mG!S=y|}z+(JoZZ;5V z-PuYvI=kXJC0!L5rnvZn I+h19M&qQi=ar$B;h)*pR(ZR ze3EMkNm~&ydGZy+QwJa>ZI=iI6ofNuOez(<3%@(q5=!y34&!2Dfke*aAg&TcN~?Wx zn(H En#tk#CeU3opU?HqWa{ES(p>Xvjiqvy*!DN7XRSF_@lJ?&F_B}SD1w%Y} zPcZ+JEIdK=G!mvPk+*}zq6x2`6iS}O+T19)=d|f+Gn6sp4)KHTabVVcmjL7>kOu_k zNH|1Mg2G(~k0~#eQ@aAmRL14YqnwGNvSH`W?)DoP`jo(85DVScKnRODknv{8zbz_! zCwJXN;kE#CD?WN8I)iJ&3W5%#qd03M1@#0GGG?p$^R7)@v&%*!#Li~|C5;}&9=o*{`L zWtam_WCEksQxw4&IpWTW3Y#K7YZUY@U)#kq4Hcj|M>s<*5SnzhSQ04vuQf57AN+g| zRJ^-mN&Lr@rA%p2ZU6`;$y5A;Tr4!t6XIV`0OFHGNtfdTSqWC~HNvf_rWiUyW)Q$r zSH+gRSUDnC3-Kqr<%ID7NI;9xPreexiyWJZLsDfTW*a0qf&SwXqjnP=dm>_r1;Dif z0>F9RqW6@tJ0unzra#T3PpVi=h!a`}6OO<{zVB$KZO;PX0e( qK*Bcckf%T3_ 5LO7O{`XM?*{RiS6u_cG#3O2RKurLGVP|ULQoA|pUqW*rj z!F+u|2*H51g_4JIs2|KqyBv>!PaUr82!a^ffV|5KQ4JFiK6o~M;YKky1qtzBD8?gk z22nrCY9Br|K**LT;-eE6Ze7l`=_j`oK1s!HJi$gTTqEYbPs6ww7Qk{mU#c9DVeN#j zM&)wvmB`uk-*W;CXl#()g~Moq(<3M$0TQ$n0H}X*FSI3{XyVfdZ> 2wtezYZ#E&AaI(tjOJ6)HtZ^&iy}aA7{W3w!yCtc;R!Cr{9hl;bJDK-(5c)* zFNhnRUA#(cuvb@AunE<` <&ROum^D04G z%dl94GBj2ICXL7!?5%&mO5hUA8l)j^uFREy$!*XbmB^lw2%^WXK^*8j-inG0lY9a6 zAqc~@T>=oAI2qSOz7i9H6@JiliYqjb>rDt#w#|=ko)E4D7p=twefW1Dn0wlkc`jTQJ(_%A;D2Spfq6l^alGeA1Drkt!2?nZ=lzTLzS&M7A<=|D1->0dbD>)XGV zJ*=9(hbqhAjm6$aEH3K-664IR@d0BEC%da}_O)TpJC5rPjmaoeRrk~9zJLxi&zt0$ z=#j7Uv +7Y(FwM#B2O^W@$jfClz} z*>3^>I>9VLwUR_i*FnI2*i$j8!4k(}PfWKZK%+FXk GI`A zlL!h2;4FI{#+21H9tB)_aa|S?Ej5l;pfSBMevs{5&$jTEfEe &8}RXAH3eh&!fgS`1dl`)ESOsy(~g0x zS-e{I5ODQ9**A}mPQ$XEz7qUy=tBVy`WHpkVtwxSKG_!RVgQs9f+1n@EbBpcAdwXy zIxH&ZMg e6Ej7dck;@ z`}bZl0R0t6bVa~#q@mfmp^hQ@74Cc`v4RVNWtEO&YtNVAek7jgbuZ9JHL4bhDlq~M zcYs!D{W{KJ2VD0hFo0@F&nGAtqVk@%Xnf~6r9d}ah%P}H6HSJT13sn%{xku~*~{im zxTP+c9xOd<@l~h6N^|Z5$zp-7BBBCnFlr=7^`#2<>D_- CE^kXAa-Zp4;PH0wQ%uQX(-_5 zbb6Z)j?7jYFz7Lp;69kZ2b>(5oQcs_*iWB-7PN#bFcaZmB3W>xLp*!gnf9hE*`7Um z`wQhrqy*!V6|Ek9_AubltJLNKt~(pya%d<_$AUKslcdaSic4c``ApD5skoY^Yzs_# z1t(ok%6f{VOUXtl^2`GhNPi?>Z&2)CWb+AUS%8#S%rx 4Kzn5kTzy-kLTl1qB3gV>;ir_hvaIa4(1u1m} zA^$QM;Zkb%5NXms^2~n7JuM*713;dB=dCF?T}-t;{K5aAutK`9%B-+Pnw2xIup!_s zF=pk{EBtl||IPr1PZV}v7WSkR_0<*iPZbUJu)Gy19+fU02q+#(DV~%r9GfbhyDVN{ z__-wgbH(iESP%T2?a$4+pW8o*f4Tge-u!tW{p--|*KxqF2956&z#nSVz!|B6DvA;_ zu99~F!r<2>kf;)()Dn{V60+$M*i{JyV=19IU4dvRon|S0eJOQ41p{wM+Y~(e$Z}pB z4v8#aOD%g)Uq);O`=OBl?JX0LDd&}8Ai;$J1Z8r0HOghD%fC$lG@rt*UEn-h<#+o? zer^^(ge&k{Dhd;G)EO)Fud ZGQGFA3l$ws^t__5{6 zsg(}XRqj{LvH<`*-7-8>H9={)M{0FIp^?*Tn2R}FrM@~;rsm%0cieup<`&FWvnG1F z#(TKhc^ZYsQ1ijO_OlFk`Mv5l@2iuhYcmSjVqJr2F`{l)wclRXjl=D&uV7J8bw97_ z+TeB2r BTupxoQIfMaZuK{b|}H$8n)w3OPk`5Hc#T2oZtw9nWqEZu-- z2LH?3e4g4oZw~(x)pU8)yrJ1N?%I4yjK%9~g!0wmH(>Gjumwc$vtBGkbTj%{^?R8X zI;Li_XgEBrg@vSvun)#|-NG4I%P3oSCp;g_)SzEAvNyB}MK^G7m%-9ng#+8%r&}jo zizH{-ei2vDG*oD1*OCvl$OpD37BWY;2ICf6{i51+-D;71Fg$F%kyeK|Q-@h!jYgop zj%K?~w57RhXQ)iau2aX;=*EXyoo*ICEZrQfr`u&`I=yA990NPFQ#-jUJAG!l;x9Xu zXDZ0`0FqJV16y4YT0i`7fsI~%_j$>}he-P7Ec&~i z{rSfTpLXltZs<#5>ZcIy*PZS^F4A0=#Zr{^pEL~I?VM;}f* Y2sbePLhoPodlfbS3Y z?64C1aKN_Zy`5n(+zrot{)(l(Ve!Th2xx@!`H(F0=#|$ CZRNS; -&dv zk>I;y-)L3-dekq>Dp%Wb EXyl9O9HQ##B?S_GnOZxFGGOK zvMe()EGvI@mYHLgl?5i0GFCdDuSD)FYPtW_WLd4>S$P+=Vkj_fkg;0vd==Th`n_@0 zCS%I#!>S$Gm~HUCY|DSTKmYls|8o!i>$W@V sg++wvY zqrKhjKHSx`El|AO|6%A4%MKUm&M4W?NbnBb^PMUA!M}4mus=HsO#}1tyI}s^e{=n- z8M{}}yW3X%TerJA+q;K4e-5nnR<-udGy2Y&_C|~LZa?(iu -g zzX|8}fA#Id6n>K{9Axkv(Cl?lXC5R(A22=cV#FN;Zy&Hf?qst*^wv7$`PISQd}v>E zDDbhJAIExRMsg%J-zFMzr0#Yk&Dth4e %2OrLb9hWznX34PxpIIJq4RR z6wWqy&wQJkd@|1veCzI(^MSZS$IO0b*7Lgu`7L?V>&)|^sPpJwjZwJs-&^PL xjZyu`h}DA}t^QMfAMy{hu4 ztIWLm9(C0)Ut5p6%G|nYwXSWkzUB(Nq)NZ+&TQ$Lzy6?kJ*ZGKpl}n;do%v4dMxwi zH7@FACbO-Gb#|Whsz+hCO#arE^)~P0t+(~9aLnR%bJH{{&VK9W_*dmo2+rIUcgb1_ zh|9t@hv1XIl#};u6yK5%bDmdcE&g8s(SKSgJd6k=auADoFDt&}rfcy30#W^M+UfFd z7!tFPcOXfi?_4Oy@V|g4qw%(BnZuuq8$Z#t=5#p;kjfnpwW#yind?ZE5F86NWxQ U0&_c$kIrv!_(Is}xzzRQ$O=j!6qMFpNbn~4 zZjUt{cV3Ai@mKc!U*}bIB}(K9khrh-98p5bl#i8#RiZ@fyRmO!hQg}!cl%G;-*%?1 zOELJZl&YPY8alUK1ag+CbHtUyt0+F&mp$Tk1rJNGW#*M>@bYSkurVjTab6XV)yfG5uYf*&y=Nztrgme!MkAIV9jcz}+cNv=JLP} z=?h+4ajVyRiBYppzIIewhxjpm7u+_y$)5`$ zSDm~c ^^hK$J%~W )9tceUmCqNa7GS^K8#W9(3wZtj=Nq;iC=R4J@#Y{>O$!GcG0@7WHncpsP3t!>odo_e=4F*`CrHoe>zqssr7x$X?fgWSN>`N2}tNzOY=0^H1U8A{+mm?=DcR=*0 z!s3o!=ZpAEI!ToK^gZjkQUCjL?dH+6=APU+yB}@SIZKFy{43T-lcrZxaenfbR9}*s z0*JG#<*$efCYoLYOV8x5A+@y4ftOebg`3N6ljfkkK|h7ty~(8J;Pr)S1>E}jovoYM zKeGn-v?%~-VB!EV8<2q#68g~7GF$UWJ(FY$6mMG;+Cx>vsfHqx_r&o_*2fjm;Wdzb z_7o<$1EM>jNa`w>;D3N|* K+_;Xyelb9XDP>rg1Ra}gRw;j`> zq?*)t+y}o3JC=hQHM!Hck0Hl)2%wa@OiK8jRIz6#tW{Te7$5i1+x~8G!lOsV@$pF& z_FTfXkF Qr%Zn M^ECa50C8gxB!!={)B|^vwwR4xj7?>q z_U@>hrWpksPv!iD?5aUojDskrbD`S1>h$TxVdB$y*FtwS`B+RM4X5+zKkaJErklii zO&733_iio!iu0TO&QpG<13{woQtX{T)F{4N mZLNV1CE2i}w2a+}xCU%XEzO=ON2O zS1l3N$5po^7H!B=@!&h27_bgDaA~Nhxk8)x8pgn|W+|c&ZQuQ4(&DW=1Jmdk82GsL zZbCYqQ!*7`yEh1c_2R+g-h3x!!zFL0?-U H?|gVevzL{VII1^tjqMlOgw1Y0Z+pElcBGJ5hr)7G@d&9X`N z_Sc8{`jdWc?~w0pab$*wskdmWYGkMPOX38Bfx_h@+*M55X2hb^B?Tv)|K5T?pb<9D z5^ek1h_Y(=v-&0#167g^jDB0Oc0sw_GNL{3dMgS6qhRE+<`0BExxCv1zX5J+$3YEF zT*4~N`ZzE4pO1S?k@ITxJxp;{lEy9368G$#1AyejJY@6GFNjadIO*&!*X@*Fpd$}q zGK--gM$s1_x!3j43I?X+SR7E6uM47>yOnEY)%W`9DE^KUJ|=ol0GY|;w^I&ea>WB5 ze-Z^-5r=+GND_L%y*K2eK}=6E?cY30pu~1|*i#hA0RKRSSPkHpxDv@D7XX<(`b)A! zDs< P}zm=2Ld0>RwKV}fu79ajNAuyJ+7 zlkCqK^!oT-P2 )varDEHAvundc{;k; z`{gv{4IaP?+jaqu9)JyzU`qWz?GMZ3!8OOLjg`F|8YJkNF;1^#2}t~B{qB9*(i~i8m`@-q?ogZfkeEHPwDdy*FXg(7 zI`n`Bgo3GWF KjrW%5*;@nP1g@GxBN%W zDX-5gx7>Rx2skANv`i6aYC-|%rT5B8krj#~ ws)`BPSk@-}5qJ7V-DGo+20{deNx3#kI(4(f|=LNyCt*L@6mM4;A7`6M3!^LnWt z+|`V!HE#}D0UI}Hi~-C_Vj>0Vbg#Pc`*o;77`aZv(|Q1d1dwN1$g&);-_}Jr-b*on zIeF2LU?V{Jr?YuV{Ok8Ba*P_!PlcS94IU!O#%(oS!5UoA5kK#?`$l%#Lu@; 5t`98jiF3&S#xAEnHBHXF>i1H z7dlalW<)Nmi$te^3 RwNT`Ljs`T?j`^RrffSlgWQr|I>8D18jHH^7ZIQWos@} z68rUCjJe`QPw@MXe{>tAfyR|L%I^q~7bu5$lrz-;%xynvh?G4imk&ZHpL}omD>eMH z=i~05aQxk2Mk}F*(mFw<&C!<#hhEuLSK43+m;kG8fsG`ZT>R2;U@}4JWEd0f-tm-H z{)fi(T^@1r;afC1t&DBgcX(ir45CVv+J{G~4OxX9S(}7e^(fn}8%hJS5+ew8Dyo%$ zNU&N{B*ukSX2&t`L|6=#+cYaZpcVCjz|$`AR;kMEPC{UaJCgyr>!$jA?4n5TzTC zlL^#n1913Awl`p7+9P5ibgATnP|dz1jHaw+x5Pnx!y(|B?I7iVH0ds8!vogrAzbnY zK(h 1ziVxL`ezVTEFbr^+!`BlQ%!^>Rw% B)b*lzt~W P}`Zwj-gd5#zDen%x2|>ZF8fP>kihq}7=?eGINHBOb-Oz7X)hBOt>tqYAZdqU! zT~_ dULlR?$@01|TTj`M_F)I9?KA3&KVL2Em9yPEXOUp>gEWRJ7FyZE0Uf zgh1l%RA5EVj1y`KJPD|;Gts-LJvvE&Z_skTbE62$c8!eVbfN(++7GHAuDSn=1V}i- zjrl$|AkFoc4d n8 !CA;n%*I5NyWX~h21!1rw~X_i?fE6@US$cTk-zKvCDxVp%P&&j?_b`Wa$3^J zr%G9dU?U#SM07Z@5CWWG$P7RgZ#%cAWOIQ@?D8CTYc7s{J^?zPC_A5|J)dkopW;0K z&UZdFbUrQFI+4#h{nLE<=zP}9eD>CS&gpzEbRmy^A)jxdKz5-}d!fjDq1bt$#CM@o z#oA!l3hHllW1hyvnU+ypJ?2DY`WOseAiBK@q^f6bLe7A z@?vYzVq4>4`=`Z@nZ?en#gC_pIOtLr{ZcpIQjhFXulCX>^QAuLrGDR~fzYMFWa7cY zw%A4>qi&`OYb9=7cf5p*F$O>f3_}}p?qqzy>R>8AA?H&qLQq9>Ds%J6%L_%zi;c@m zpO%+rmRGix39F~ec<9O+{mMGu%7*O9ruNE~`O3EQ%8u{KZs^Kh^2&bE%0c7G;ir|O znU&+Mm9M8OC(zYz^!Hf6Ut%NXEbZdQWtVepmgD9U79Xzi>#fFlQ%7a3^1rwj7qR+f zbd{<6-s?})mw)f^EZhtF8v~Z_1Nq& ph!%7^S!g%Ya9u%$Rik|3E+Fw8n;F@P1wCCBmlX%#AcX# zq>rKOjF1bAAYqE8NQwH+xB72DR48R#xOiQpX _!U{s`OPf^1Ug*B=gAb5&R?kyu{~RbgQuGq>J=)Yv4HZm=XSXv8{d-rUr* z*wk{_)b`uF8Mb*VWmBhkQ@3eTug@u0B@*ht`pnb9$OQ&M08IF|OgOfHs4cUbTL312 zh2NG%*p_9=mQ}H{#Z@? uj;@; |Tr+l@%sCA=-(jr?DOHTJu2`1cYzci4mg5S_hb z5~@VMy?0@I{{(A__x^9en(YVaRvSh3ZUqAm+WhefoynyEWW_G~&@i}aircr^{o>=u z`wfXDEBi}(`?9f7P`QKJ K`Ei7!!2yfKL9c^*n*+S+iXj;ZsD1CA?%-A& z=pL){Fxh`!N#$+l*}+G@G#q7SR{(jL;9;8l!#+yJmp9=Zl;p`I&he!l!z&CUs_>eW zsLxmAAIHc(ka(6)cr+OA+1nk?sIpEP!jmnIu&EyNewj;N@xx;rkzZ8F#%4YHfyYvp zk&CKtgHMjuvYA) _fRf&gd4y4vxlP3uiEy;;$L&U$0!s2!_#Eibnvo6h&?Ck8JQj z#7Xak{tvm6`)d ri7W=h=RfL zG3W0SMyh k;2rALR#DiE;EN(g{Ri{w;v~Kk gb^`z yq8!FeJ8_T1gZO~HpFTO9J4HFm)y>3)jwCG>I zH&uG4!u}t=ZwP)RixOSH9nMwz9ITACeIW9EWS>=XQwxDT1U=GwW9= _esQaVm7`5HP*so*D@Pi7l+0e~JPXr0DIJkvZ+~_-9 (8pxJ#mc=?G3j9b)#h`DPh`ltgc0kD4qNtwB FdNF8sgw^D5Z)FTz-vA}BtS2ttmR1gHH#deoYR1Xd_?xFDFlh8yc z<4@u!YR}GkP(LTXSV2*+B%dA^zk~SCP)W9*Im-1 @SbSrqnPZb8l?9tB6&E6+n{(p%d^hPMa1(ECwGlW@2SOTk+Rd$saJ!n zxwNlQON 2!%S2dHtRxlp1QzQOX+ksPSela_y?Xcr~ebAy{<^Bcd*C zrM##d1CkV3ZnnSHJ02LowR|aqS4!f%(ELdA(;dX$i 8LBDL@9lu{|NW`fyN`zXHeKV1Vq2# 84>fuPMQ}r9F%6*ouUi3# zgqvzYZ}bb~o;pBX0CA-20+iC>oVSrcd=|w#V~ ATkRE~jSPh* zA+5cehd-+eoHKkz@(akLp9mB|0Ppa_f_R^Yx3bI~MbqLo)%>x6Y8IPNaitA4S41!? z?^kzaeAk!s=JY)~k(acROkd&owWPE0TrYlOzTC&E8sr`GAbIUQ5H$vJ`QK1wie2P% zSfKD(yzEbDIvJ61-gG;Zsg%RcB;-DDtGDoOk 6RQrL!A~3q;E@)YIZv;Zx1tb*7TiiHa3A*MW*a-# zy;}n%+7RThJzp+~q$>*QW*iJ>Lc4JyU38vWzoTSoL|Q!6;SfkL3-9fPNJ(^&Sz$j# z!b2dLhdLn8004wI<%Htws{*!)ArU_~kA4)ZUjK2^dZL``J1 THDfrqJUyDP6E&*33uPt-3%3LOM_g!R3~w$jc{o!pkY+;->JopIYLyf;Gv-m_G(1 z3SF 2l_R-n1*fVh0j-q& PUmYPP3HFg`T1`bvHN5y>g%-06YK Si0AZ-nfWMg3-`Df-cxxC+-)F-8Mu?$TN@IsOpg`i?L z37|;kwQ8*hjiYvBEc1A1R`H0V&}#|oJr0L@5VZ@5gl@>@sD}&3p84-ra825zhvKx< z8|uHy-xZtoy7T0H`ALTdFpFC7>i I*_Bh8cH$jx8>Qvlrp%)Cj {2?8U=+Z=7olCaD z=<^jU1)fO8Qe+|^))R_SWn>oK^Ax#WL6D!w;ExGTS1xi3th{KK?vTgO0PTrjgIuuj zJ4Nm5zvDPEQK`y0fWGgaz#>+8{ -DlW?P9fDJs75T zj27yYPPa~1nFe8QF7 =@%bo9T%T;vtsjsUj Sm^E9q!5 zSsvqSl0fPc5q=4=(EC8j8mlrtL^l7Ek$wcJJmRuMC|FLg?wzE LjRa^o3GptGBtkd;3;kCBE1(^8-sS6l`Ur#WNH7VTl0VABj`X~W;WB|y7zmHU% zs`rhiAhl2_B3%Qh6D*`-Mg8atSPcQuYXW#D0zcEUY3wq_0E3xp)fCUfZ{nTgE?CY> zsDC{Rds!RuL|Z@s05NG6j+JEm3VOCv!orqtU3-V~8bFZ~4SX>LltY8U`@RlfD`J zh!3Qd6z+&eG|W9|YGxq1@G1p^$;X}80|7d9QQa_|)1s&z|7hjlNG=n=qtNI_KxG|R z)VQSOm{m-Gwn*myHLf&bwwanwgIf(G$$*Plwu<%7k4APyXSl{POc1?yAvjQ6msA|? zd+eDG@H{o{qB-vOT-@bF+!YfRpnwHgV