From 9cc467b77d4ba020a3e7b6b1910209877f974ef5 Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 17:46:36 +0200 Subject: [PATCH 01/10] docs: add light theme banner variant for README --- docs/assets/banner-light.svg | 244 +++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 docs/assets/banner-light.svg diff --git a/docs/assets/banner-light.svg b/docs/assets/banner-light.svg new file mode 100644 index 0000000..5c7bdd3 --- /dev/null +++ b/docs/assets/banner-light.svg @@ -0,0 +1,244 @@ + + MCP Comet banner + Animated banner for MCP Comet with a light backdrop, glowing title, orbital accents, and a moving comet trail. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MCP COMET + + + + + MCP COMET + + + + DEEP RESEARCH SUPERPOWERS FOR AI AGENTS + + + + Turn Perplexity Comet into a production-grade MCP research engine + + + + + + + + + + + + + + + + + + + + + + + + + From e15c986bc6c6b74d4273c4a42bff3ac029fbcdff Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 17:49:09 +0200 Subject: [PATCH 02/10] docs: adaptive banner, expanded badges, and table of contents --- README.md | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 96abac2..b260f89 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,48 @@
-

MCP Comet

-

+ + + MCP Comet banner -

-

Turn Perplexity Comet into a production-grade MCP research engine

+ +

MCP Comet

+

Turn Perplexity Comet into a production-grade MCP research engine

- npm + npm + downloads build + typescript license

7 modes · 13 tools · zero-friction setup · full browser control

Quick Start · Tool Reference · - Architecture + Architecture · + Issues

--- +## Table of Contents + +- [Why MCP Comet](#why-mcp-comet) +- [Demo](#demo) +- [Quick Start](#quick-start) +- [Research Modes](#research-modes) +- [Toolset at a Glance](#toolset-at-a-glance) +- [Agent Workflows](#agent-workflows) +- [CLI Power Ops](#cli-power-ops) +- [Architecture](#architecture) +- [Configuration](#configuration) +- [Compatibility](#compatibility) +- [Contributing](#contributing) +- [License](#license) + +--- + ## Why MCP Comet MCP Comet gives your agent more than a chat box. It gives your agent a complete research cockpit. From 7d7971c3c324ecdd26dcd1b3a91e39bf77374611 Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 17:50:40 +0200 Subject: [PATCH 03/10] docs: add demo section with recording placeholder --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index b260f89..f6a8205 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,23 @@ If your workflow is "ask, verify, cite, and iterate", this is the server built f --- +## Demo + +

+ + + + + + + + + + Demo coming soon +

+ +--- + ## Quick Start ## Installation From 13eb8e985c8ee88b9d9ad4506a94d03ee3c4c1e5 Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 17:52:25 +0200 Subject: [PATCH 04/10] =?UTF-8?q?docs:=20restructure=20Quick=20Start=20?= =?UTF-8?q?=E2=80=94=20prerequisites=20first,=20merge=20headings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f6a8205..61377a3 100644 --- a/README.md +++ b/README.md @@ -75,21 +75,29 @@ If your workflow is "ask, verify, cite, and iterate", this is the server built f ## Quick Start -## Installation +### Prerequisites -### Option 1: Global install (recommended) +- Node.js >= 18 +- [Perplexity Comet](https://comet.perplexity.ai/) installed + +> [!TIP] +> Run `mcp-comet detect` to verify your setup before configuring. + +### Install + +**Option 1: Global install (recommended)** ```bash npm install -g @onestepat4time/mcp-comet ``` -### Option 2: Run without install +**Option 2: Run without install** ```bash npx -y @onestepat4time/mcp-comet ``` -### Option 3: Local development +**Option 3: Local development** ```bash git clone https://github.com/OneStepAt4time/mcp-comet.git @@ -98,24 +106,11 @@ npm ci npm run build ``` ---- - -### 1. Prerequisites - -- Node.js >= 18 -- [Perplexity Comet](https://comet.perplexity.ai/) installed - -Optional pre-flight check: - -```bash -mcp-comet detect -``` - -### 2. Add MCP Comet to MCP +### Configure -Use one of these configs. +Add MCP Comet to your MCP client config. -Claude Desktop (`~/.claude/claude_desktop_config.json`): +**Claude Desktop** (`~/.claude/claude_desktop_config.json`): ```json { @@ -129,7 +124,7 @@ Claude Desktop (`~/.claude/claude_desktop_config.json`): } ``` -Cursor (`~/.cursor/mcp.json`): +**Cursor** (`~/.cursor/mcp.json`): ```json { @@ -143,7 +138,7 @@ Cursor (`~/.cursor/mcp.json`): } ``` -### 3. Give your agent a mission +### First Query Prompt your agent with something like: From ba03cd46e5b0359ff6fa804f91091e0e9ed49611 Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 17:53:56 +0200 Subject: [PATCH 05/10] docs: add GitHub Alert and collapsible Configuration/Compatibility --- README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 61377a3..0cbf916 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,8 @@ MCP Comet gives your agent more than a chat box. It gives your agent a complete - Pull sources, screenshots, conversations, tabs, and full page content. - Stay resilient with auto-connect, reconnect logic, and selector fallback strategies. -If your workflow is "ask, verify, cite, and iterate", this is the server built for it. +> [!NOTE] +> If your workflow is "ask, verify, cite, and iterate", this is the server built for it. --- @@ -268,6 +269,9 @@ Deep dive: [docs/architecture.md](docs/architecture.md) --- +
+Configuration + ## Configuration Essentials Most teams only tune these three: @@ -289,8 +293,13 @@ Config file (`mcp-comet.config.json`) example: More options and full env var reference: [docs/configuration.md](docs/configuration.md) +
+ --- +
+Compatibility + ## Compatibility | Chrome Version | Selector Set | Status | @@ -301,6 +310,8 @@ Unknown versions fall back to the latest known selector set. Details and upgrade flow: [docs/comet-compatibility.md](docs/comet-compatibility.md) +
+ --- ## Contributing From d4317de5d35e3304a4707d28fc97c34fe334f0f5 Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 17:55:18 +0200 Subject: [PATCH 06/10] docs: tech stack badges, expanded Contributing, and footer --- README.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0cbf916..cf45f11 100644 --- a/README.md +++ b/README.md @@ -260,6 +260,12 @@ MCP Tools -> Perplexity Comet ``` +

+ Node.js + TypeScript + Chrome CDP +

+ - Ordered selector strategies tolerate Comet UI changes. - Automatic version detection selects the correct selector set. - Auto-reconnect includes health checks with retry backoff. @@ -316,20 +322,20 @@ Details and upgrade flow: [docs/comet-compatibility.md](docs/comet-compatibility ## Contributing -PRs are welcome. Before opening one: +PRs welcome. For non-trivial changes, please open an issue first to discuss what you'd like to change. ```bash npm run lint && npm test ``` -Guide: [docs/contributing.md](docs/contributing.md) - -## Feedback - -- Issues: +Full guide: [docs/contributing.md](docs/contributing.md) ## License [MIT](LICENSE) -Built by [OneStepAt4time](https://github.com/OneStepAt4time) +--- + +
+ Built with dedication by OneStepAt4time +
From f330085f4d9dcb7c69391ded360c6b648e4cd76a Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 19:12:18 +0200 Subject: [PATCH 07/10] docs: dark-only banner, integrate demo GIF --- README.md | 17 +-- docs/assets/banner-light.svg | 244 ----------------------------------- 2 files changed, 2 insertions(+), 259 deletions(-) delete mode 100644 docs/assets/banner-light.svg diff --git a/README.md b/README.md index cf45f11..39ecf7a 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,6 @@
- - - - MCP Comet banner - + MCP Comet banner

MCP Comet

Turn Perplexity Comet into a production-grade MCP research engine

@@ -60,16 +56,7 @@ MCP Comet gives your agent more than a chat box. It gives your agent a complete ## Demo

- - - - - - - - - - Demo coming soon + MCP Comet deep-research demo

--- diff --git a/docs/assets/banner-light.svg b/docs/assets/banner-light.svg deleted file mode 100644 index 5c7bdd3..0000000 --- a/docs/assets/banner-light.svg +++ /dev/null @@ -1,244 +0,0 @@ - - MCP Comet banner - Animated banner for MCP Comet with a light backdrop, glowing title, orbital accents, and a moving comet trail. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MCP COMET - - - - - MCP COMET - - - - DEEP RESEARCH SUPERPOWERS FOR AI AGENTS - - - - Turn Perplexity Comet into a production-grade MCP research engine - - - - - - - - - - - - - - - - - - - - - - - - - From 57481b7f4fef478d1d611def8ece56ee3c77bbdc Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 19:15:45 +0200 Subject: [PATCH 08/10] docs: convert Research Modes to table format --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 39ecf7a..4e3ac99 100644 --- a/README.md +++ b/README.md @@ -140,13 +140,15 @@ Your agent can chain `comet_mode`, `comet_ask`, `comet_wait`, and `comet_get_sou Choose the mode that matches the job. -- `standard`: fast factual lookups. Example: "What is the latest CPI reading for Canada?" -- `deep-research`: multi-source investigations. Example: "Map the 2026 AI chip supply chain and major risks." -- `model-council`: multi-perspective reasoning. Example: "Debate arguments for and against UBI with tradeoffs." -- `create`: drafting and ideation. Example: "Draft a technical explainer on WebAssembly in edge runtimes." -- `learn`: guided teaching. Example: "Teach me B-trees step by step with examples." -- `review`: critical analysis. Example: "Review this API design for security and reliability gaps." -- `computer`: browser-interactive tasks. Example: "Open arXiv and find the newest papers on retrieval augmentation." +| Mode | Description | Example | +| --- | --- | --- | +| `standard` | Fast factual lookups | "What is the latest CPI reading for Canada?" | +| `deep-research` | Multi-source investigations | "Map the 2026 AI chip supply chain and major risks." | +| `model-council` | Multi-perspective reasoning | "Debate arguments for and against UBI with tradeoffs." | +| `create` | Drafting and ideation | "Draft a technical explainer on WebAssembly in edge runtimes." | +| `learn` | Guided teaching | "Teach me B-trees step by step with examples." | +| `review` | Critical analysis | "Review this API design for security and reliability gaps." | +| `computer` | Browser-interactive tasks | "Open arXiv and find the newest papers on retrieval augmentation." | CLI example: From 4983b553610384effa4d2ba15eb6daaf9c03dc42 Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 19:16:45 +0200 Subject: [PATCH 09/10] docs: convert Session tools to table format --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4e3ac99..7d6706d 100644 --- a/README.md +++ b/README.md @@ -165,10 +165,12 @@ mcp-comet call comet_get_sources ### Session -- `comet_connect`: connects to Comet or launches it. -- `comet_poll`: returns live status and partial progress. -- `comet_wait`: waits for completion and returns the full response. -- `comet_stop`: stops a running task. +| Tool | Description | +| --- | --- | +| `comet_connect` | Connects to Comet or launches it | +| `comet_poll` | Returns live status and partial progress | +| `comet_wait` | Waits for completion and returns the full response | +| `comet_stop` | Stops a running task | ### Query From fea967a1dfa984f02a23f143a4305081a229d465 Mon Sep 17 00:00:00 2001 From: OneStepAt4time Date: Mon, 13 Apr 2026 19:17:30 +0200 Subject: [PATCH 10/10] docs: add demo GIF and remove obsolete plan files --- docs/assets/demo.gif | Bin 0 -> 477854 bytes .../2026-04-07-review-and-testing-design.md | 106 -- .../2026-04-07-review-and-testing-plan.md | 1349 ----------------- docs/plans/2026-04-07-uat-bugfixes-design.md | 46 - docs/plans/2026-04-08-audit-fixes-design.md | 163 -- docs/plans/2026-04-08-audit-fixes-plan.md | 874 ----------- .../2026-04-08-uat-timeout-fixes-design.md | 57 - .../plans/2026-04-09-assessment-fixes-plan.md | 673 -------- .../2026-04-09-repo-assessment-design.md | 460 ------ docs/plans/2026-04-09-uat-fixes-design.md | 122 -- docs/plans/2026-04-09-uat-fixes-plan.md | 363 ----- .../plans/2026-04-10-docs-restructure-plan.md | 609 -------- 12 files changed, 4822 deletions(-) create mode 100644 docs/assets/demo.gif delete mode 100644 docs/plans/2026-04-07-review-and-testing-design.md delete mode 100644 docs/plans/2026-04-07-review-and-testing-plan.md delete mode 100644 docs/plans/2026-04-07-uat-bugfixes-design.md delete mode 100644 docs/plans/2026-04-08-audit-fixes-design.md delete mode 100644 docs/plans/2026-04-08-audit-fixes-plan.md delete mode 100644 docs/plans/2026-04-08-uat-timeout-fixes-design.md delete mode 100644 docs/plans/2026-04-09-assessment-fixes-plan.md delete mode 100644 docs/plans/2026-04-09-repo-assessment-design.md delete mode 100644 docs/plans/2026-04-09-uat-fixes-design.md delete mode 100644 docs/plans/2026-04-09-uat-fixes-plan.md delete mode 100644 docs/plans/2026-04-10-docs-restructure-plan.md diff --git a/docs/assets/demo.gif b/docs/assets/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ac1ac81662bdd100af23418ce4d582ecfddc03c GIT binary patch literal 477854 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

S;o;U6;MWuu*4VR0U0O;_ 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≀wmiwuJCuWuffoH)^{LXUTDyAv3O1}*h+L&g9E&#X)3R#2W^D^MuH3n8sh*{)mMz}BL*MfK zE7ULGzj~qG9gH~fPPbJ@E+lI7Fx|q6D_cfOS*hU5oC#*Wyt%XJ(TMFnCXMtn>akH* z?``cm?dQ<3)7C^wJMwA%l(2QqmONK=?ctV%2L?`ju<^vXlRJN|yLs&8(5qX&o*KJ$ z>(uvl-wxjC_wbd+lRu9>eO~qK+q*XJKK@tuap}uHZ~y*!{rvm;pP1i&0uJaIfd*<7 zplk=~m*9d-HRxc363PYPgcf2~;f3mD2o{GLmiJ+OA&yAmWF?;1o`-V<5@0L7w< zA0lU!VKm|;TyIH9H{y-H(N#?WReY2ZMt||xRDwvN$mD-2HVGwP!f}#;2V=-ZWd>SS zd8JA$mVge74uDBekYqaOqe^X#8ui%oTx zK}GpB=ZjATIb{AvrXAF#mW`@ZX9jm_CTL_$?bG0&QGU81sG>fnT97q3Fa%vODk_$l zVWPPkWJCtV2@nEwsTFX-1qq3anB2)?s=w}uDvMR@W2~q0;gr=`gg$1dj7WMl47M!!v?#fOFGWV6sKXOIcmD0s>?2Fsjfbmp1C zn_jl~BE9zFTPc|=I^qDA35U6_otSj{4=Mb{XQV@q4s=+d7%|Gp5c_D0N5f$5gUJw_ z{FA}4GzH2rjr(x&f+#M=BElE~(TsDKG$)I)$Qh6OGPW`ML?p~SiOZ7GH~Q3=vmJZP z>9|#d9R6!kLDu2GKV(*lL)H)(t5VN9yQnd=QH4~r)M8r%_iap1{dT){Z};TgdT$jJ zw_|VuW{@DruuTDAQaP!sEaITJ1D6i`@8E@hZFrb`RKat(h@4=(vJa2Tv%)Dfwnai6@ zJu%P!-u`3wzW_=pD41}O#i~%gD{;aDt9nSAK39SVo-cG0XN`iHvfQSEy)3LElpMLr=BgcCRj#tPsEyzzBp zhAIi-5S6#YnRL&7PApehjMl^?-cW#i98TW)*vHRo&~cn2Nah}5u`LxZkz1nR*a+6I z4njnOjw9B;HYZ68{>^;t*;w1=W|My~t^h+Y<3v&hL*RiaWlO7LMD~bCwC%8XVOrh$ z{;|4b1u1MLL|PKHC%3mLEsy)lpZs7WMJ#g9m=@t;tWue>MG0wVIEd7i)Cdv&z`d${ zw8SOrKKZQby<}5&d`uA)$xEo!4Up_CPCMTjmd{vIOC>0zC0Qjxg5*<7m)xcYi3Kc3 z7Sf(90zv^ECpsqDh-qtD2-f&Cgn1Svl`>Qx3Pbr2E~*3*iquliI`@K)R_q1I8tLt# zm?k9Z@0aVu-8kviJ*=>8YBA-XL=FWUiM~LZjUr?ChO$5~PDG@?(;`e*noM+Av7B?% zky7CaRTD*Zst*E6P{-&2d;Wu?iOZx`b;3bMQZk_Ze8|MW$kCSF$9m0UX!8aYLmBM@ zXD|#_(3+}8&uk`*ihA7;K$t#Vl2WBIHKFs2icu@3ZJ2a~Vo*$DQ<(lT^QQd+>5Jwn zg0A#*l)SWR>>iV-hxqkbjBT1@@_N71p=5fvQzBJgOBmS7HYk|^VdpaN)wEiQSbgHH zp1>;5OrA4fgCuFguKA)OUdm$FWY5q{yV{q@gp~pbQl;=E5bBQeCa_%M?DJr_n6YfX{@vxB%V@JyyNZ2aAg$QkpV2cpH%PYTnb&I zXtc3x&FgF*tRM(WxIhPL)1*lBougPQp3qTNb(HnTb3L^-5E}7>Pdt!+2WWq9ChS~Vtkqz&;F;z>$K32C8VSt2RX=3 zp0bmz+?gt;7|UJJ@{PF+=HP@Go?aevMoClVccz&@Yc}(P+w5ir#aTIMo^w**>?Awu zc`bVmAfCDWXR`E}wowiApaE&%;-z&P1Ek-bfqo* zX?1z}#F-8?g~@E{Nsl_!t68;#OKoabqes@PW^t`QMeEtZI@GxiPp@x%WMD(-5gjeI zv5$@HWGj2w%x<=`pAGG3OMBYXuC}$WjqPk}d)wUZwzt0x?r@8H+~h8|xzCO6bgTQ= zj}W%I-wp40%X{ARuD8AKjqiNxd*A%-x4-`l@PG?^{@?^JxWNyO@PsRT;S6uM!ygXu zh)aCp6tB3&FOKnyYkcDz@3_Z54)TzTeB>lAxyetC@|3H5K0zzC?Xf_vP)5k#Gr%oyi^DJ+I<<>0!Oc@M@3;2jd^yI2D6oX*A(7;u6Lx8 zeei^rE!z#8^~1;g?Vw}~6d7;ACmz%8D1|xVB@5Za0>|oXMX=^)eiEUlH^GH3z3KZn z_nTzV!8t+d-lra&zoR|%h?igMU!KKGoi>jCQG2WE1Fv*fBE^%C7nGDwkNo8KNbzWQ zecg!<&gdW~oWCzxVcT~5y~_8zY~THA$;EhL+Av&thcES>`+eoBfBm0ge)BWGP}$$c z_AzHV_T!&+p=aMmt6ynlc~3{a*L;*$M>f`8fG2)L$9@aQfF)vf^XGl8RejMzbGa9N zHT7PL6?v?Of1c!jlQnchcX^0~e#%rgoL7AP*MKX?f+!Mt1IS*6HGv9c7I<`la5sZB zfrBiSKXnI!MwNm|hhXrBbPBa}#KeIusDw-Cg2%TvuxEKmcpy&5gjHyT{b6(MqGPR* zh2+tNR|tk-2p(TJhCWyqRQMKTh#mfFD28q5hHnUmaVUp#NQZT3hj)mFd8mhb$cKIC zhkqCs4FrgTNQh(CCIQ7sN)a(!;uV5eh>r+~D|d)nrB+(uh+T1sk*JBA2y%xwiTvdv zXLVZ^^+^9xFZZ%S0OKMH(=gp~POEraiO7kwNQ)46h@cZDje`T8GeQ1TiUm^ul4Cf! zcsYx+Dlzh6wWy5C*l^a=C?W(pAhb^v6kOf1K+tGBl@ucfWJz^$Vay1Q;V5uzQUe{t zNc4mbL3LHYRaUp9NZCkMh;vWYB#Yu`kM~G#hiEZ(GK~dwQ2Ydpp|elLC6A6sB?yI& z38|36Hi=x7Tap5hkrX-vrT&dA(vSgzPZxlY3(1ikIcbwvjK{TG#M4|45mx?mPGwY) zE|MiUP(ZK9Djq45GYM=KMw2&*lNgtbImwefxo}11i#{ooLrIiHX_QBalu46A|il~MU|QYIKq$cBjp7FQ`^R5uq?_#9rz8b{X`U@4VlnI7&pgfdlwYQctANtRS8 zmSfpiAJ}%~LYCPheMpFVEftr?VU~X>Av33NfnSiO8WtdWrM_)04E$Y>J)I*w*`I!f%fsJ>5iZ_A5_kcoZUP*Txt`s$q zDJ}+Hkxt*~oPNAfL+tpU&LV&!2&~#bbdLZ5;~re zcYWxhc8s~9HfnV%I+_X^qD#6g_{pNfq@6|jo(}4sH0qzzX`LP_q%G>3mU)ESg@J`d zqB?38Q|hDs%+z*D#bCl$q~?j8R$5bc$)s~i93%RqIjW*EiiBY5d&&7c#gwJMH+-~- zn*Z0I2UtuCWuhn=rgmwj7n-L_5p`XMq&g}^Sc;!^`k!>lso}AGR|={!xTc_*gFw1R z?uDtVIi>A+qhAW3@e_QtXNKdsrj7@kF(`vx!GAu7f7chQ8Jem{qm`XXtP?_nJj!!- zx0OsLX>wYu&#EEE`dH3Nep0BIB}c8$s;z;EoM&2?P&lY2H>}%AuH|a3=ZdcBs;=wG zuI=is?+UN+IvSY>7W8UJm82N<8XNkm6)ou%{;D_8L>lQ+9ZEJB{Hiww>l6yx6a)*c z2ms}`Y!6#f#E zU!hyyI2I-g5$8yXOmR*$s}l|@8aCSz49gb?3$$VpS}Dn2{be0OyA({T6h2F=q)-Bq zFtHI!RxvvvAo~@C#IY`Rv3o%ZAkYJQq5!Ou6h(^^ESnT6n@t-D7Q9lmlk|_f)Ur9# z7HBKAwR8bFt2Lw)MtoZtX!{UO+ZlrU71MGhWJ9-+1h~#YxGyV4UIDe78VoWZ54MvO z>$pIy$cQk@x%KE%=vWPB8F}x_ZkN#s_ zvkNgDrIO{yh!M*$4kIrIlPX0-x(+bBRua2^#k+X2x|i#_z7;sdi;AL1JdN8oH2?su zQwPZdu>5s6)0;9`G9)nj5NeAQY@5EitBSr;jvfFAZXyrps}nS1Ggzw=d89GZFk-G1dE90j$8ZBvOM5FqcBXe(SLlQNao$vGVZ0 zk$bc8JHM|Jy|wF(vdc9E?7;)Pz+0s<5Lra?0>j-@z7QF{0j$F4o5L*w!4T}hLJ~5> z(kT4vvkwDY34FswRxu__zcBm3t#c+qjKM8TIeIe1E9|^j+&WN*uCJDzN1POXOO2SAvm{i3Vv&OmW z$Ej$@uM(1O+s5)DIC-3nuxMN@$&6awq9?LBDcAW);qU`^|xcDm{D6;_SD(#LOg& zNG&7G$y3drV^MyC!OZKoL3_FY=~%SJ!d zzJ09}$ehz;R8e;A*K3q2$m}hT!y>6H!^mSsui`ozmec&jvp_XUo5k07yRk%cMj-Xr zAhlt`lO@O7*(3GYBNZeJ)3}noi`|R@jGZ!seY2rhN(cVz*CT9EtW7DAD?x8pgKgWrtlP}J-Ew=x##7pn zjoqV^+vTm@V3gdxo!aX>MovthJ1rDFodJimK<8LILd{5ILXUq_iAqgY6p2vyZDjUs zCFe-cUrW`YqmK0mII18-s$jPZ?#L^NwFYiadko-M^;Mih;INxX2(DEPE>ymSP8~r; z08A|#4H0RjK6*`x^90Kr{S$!wI5M8zGTufqg4kHCC@c~SGSCZ1<@a(;bppDPv{@>*XjA+N;F3EUQy5VzW99v=+_L8y4FlsXkEa;`{q1tApgyEW))t225Vw-qbpK9=Ts$ z<^jXnXwK!mOy<31vs#W;N~_b;oW2yZ;ae3!aec2>YgLxA#}jkMq2q|t2-czwk}cBV zUCrtaU{D+_wUS^^kkHBh1W@<%>d}}9?0?(A;4?E~&aB<>CU@Bg0D!F}k~4cYa? z+qA6`bUyGBPb~Gm&ESm*m90~hjwd-Q-RGY1g+AMd9`5z7+s$0r!Ts))zR^m?+S-ln z0e#*o<47xCpF8cc6|Io~l{tqf;K2S9hgiod8H$pAv0R10@LlSnTuoO^CC%=O_JqCX z1CeDT0uyjGA<&LnMKNDZjr=&u!bLE~SV>B+;2o4(6eB@f|B#g^*V3-$LyXe`W3y!Q zi7f6w^tW(#J`V7Vksq;&-}akDHdOND zVRAr=izf(WEkbY5|A@h=kIv2hHRn%d)7SzHid_KHolrqrU);OCo^s)9v??&$uohOS}L4NFKHgzvkQT`oXU+6N%o8 z&-qwC@+rSn$^hU2INNeIMY3kI7T%!D2i3AWhFukZ&pai;q2@_(<&=AMJ zU=A8)c&Jce#EBIdQXE+D;6;fOU&wr=@ z0k4HD`Jr4KoVHq(o58~v%o7_IQ0+MG*NUzk7hHYXYUh8GlRi`|kMUK)eEn{Y&6;QK z)&(x>zHL0iXtOL$8dbe;bn2q6sn<=r*6DSS;8#XB8u2prhL4?7w%Qao^Qn7>^!?kN zt#Z!^BZ{}EeK!8wDzfXj_wtgDKH|RXuYlUxVoxv#Bb0DL3M;hmLJTw1a6=9|^zcIv zLljZE2S+p!E1OPCD5&#PMA3l~BTUgn30b7^MvDfj3P%lfgb z;p+58hH~1J!ccb{^;A?-RdrQXTXpqSSYwrSR$6Pd^;TSS)pb{1d-e5KV1pHQSYnGc z_E=<-Rd!isn|1bCXrq;OT57Ac_F8PS)plEMEe*@j7e(a|CsVNl_d`jKB)7wLC;W6= z2gLR8-5>cAtle(IEtf~yFvZs@yV(1;Lh?8)*rI@Oq!+`5o0QA85C;a;UgVC;_u^L( z%b-OF{;3M;+yxyqOg{%e)=*;1Oon$+!A5pBGm=%d5M`_y1~cA$FC@?As}6<}XGSU3 zSv;QyJ(y;Kg|3;w42xD5Xu;qsNnTQwPC9CqH{2OO54YwxOY^!G4{1M@mKtNUQLRP* z)JTCiLX-|dOJ>7d9+76d*@d)7m|vC|N}j3o+F+}NEPTR)oeos-pe^hdL&mo}oA3`A zpS<$x0*7nxFJnQW(jE`T(ekX*Ha*d>CDf~uDlmbhgcR3(Ye0v-1wE@89Pr?gyU>a0 zqn$HT08*{R)6T z{mFxWYx^Gpr$<2mUN1%%w4ibJS3nIW&^mUh0tf#lA+3-wDZ&HLWI{MW{{b*5rkN7L z3b-AW*sfnKL7s6`7D5It?RX|c2>b?99sc2PNAQ`Tb2cWz?QoAY_sic%f+!o~um?W2 z!%7Mp5}D~~kbN>Vq8FbCumX;;gAEa03=w!01`-j9SRnEsTgI-I0O|= z@qty8#}%Ekn)C(ebc;k)>LSF67ihu}D+q)KVh6Ok^{seL@jw)^r#y1uB$WQ~^2v-g zIm)PjKnB}53R=#Ckt*1vlrTzD%6?K1RkHFRkU&UKc%wbD!mCgg@*2ravFT&7Oe=pZ$^=ZT4f# zdU1tm(9{fj>Z#0d#$|xT{KrHGN>Yr*Pa`26r@c^u&T5vkEDE(}J{7{m()}|xBQdEy zHJVL_+Ek~I%$b5P1JtebRG{{f=~8R@IP~#xs0KC4eUNG$fKjHOTmG5qzFs=bm~PaZ zHC517Z(2G=rj4_M#R+5BI!$!+^(b^jY+XITPRsI@tv1^T|B7sl>QZ(>1A*Zg{z#Tp(j zb4k1x0OxqH^Hp$!n+(?*qd>ts#x9LP9ONiJ`M@dO>yhOVWD0K>yiv|EU%cGo45wMm zYi4ts-TY=a$63yErgNR`9A^_vm_m^31%qQDf=lKwGcGesX%0eI1_i~HlJUTzaZ;M_ zZF14Mxh%}W6lh5IPGiy=bl)J&!gI~;jIf0i(xkQ#is1&wLJ^50#e97#sJcUF#5LMJTATI*XIgfAkum#-u0yfP|}Ttmf!Cy-ta&7ldq`goKZ} z29L0lE#(%{^eo5r%&kR`>+ygG+D=Iib!0uVQaZ^WX!-TJ1cNo8OO44+hq`Y$dO=|oeMU?)`iYIb0DmM6^h$#ZUxEG& zzj=~LaQSj-@*uQSCLQ!Z7j@$oZO&!%LT}8pNVtP3L9uB~ZbfcHiVqLFXTW}#&js62 zbu_y%3&i#FhTG&nfzJD?Iy~+J>kF^bK+Y*_|s=woZu-v;|uh5#>d;637!1n zr;_;F!(K3B-#hW^xOks22lpy({ZH^cc&*^x@G+-8mu7B}pipfgu)YAfN@Wx~o^O+g zR`@6j4oym%Tbgi*T6 z%cr`#rf`!!ej}c6WtToRF8(&&HqVg2{*bfdwKgkf653H(mE4-Jh z8qdooW;%`&G(DsEIN=MxoESlmV*U_q5|;ryiyKV99&C=!D+%>@5Iu`M9F##N1Um^N znaHR>)|0iqxG0OFKmswq*jtd}7oxGDgRf!GNIq6tN$8uDWijS&!s z(2=E3MEYa3UjiAmTdy{&J9G8j3jK#l&Dn?PwlXY(~y-qF2m_c61HU5Ju7fuQ7;| zdPJo3Fh*F^JR7`JfvN)^dU zupCRWEK9RI%c&Ggv|LNJY)iL%OKE89$tY@sqkXfG&m>IK zJWbTx6~nv=w=&5InY2UDI)>5AJIS7$si$fHfXbva)X>WhdCXXBOrzmTfFwa zP32rp=Cl>LWX;sFrU_$i$3;`l@s~ zyQ6BSpn|9@3_Ocas)ph!n(8Tb1E{?KynrkUvjS7wv(SS2vXHtQ4}DWOjnfVRQHzkQ zgiuTgfx`Y=4i9+571fBmdeO{iy3j%<-egEt6fK}Ax`mLLrt6u5K#a0$&)$TZ3G_Q6 zBvjauKdS4rGg=z2<1Oc-s?Ga}SQ8E^oxu&HYn}{Oi)J+?M zO#YJ@VjT~Nv8^6;PfG>HxfrXL`qr$&KUOgh>h4dT}`WqunD0~v_j`u+_EUqC)~x~yQMWu!Z?J|*NEH&36fT&TF?z$w6xk~Ow4^)TP58H+lWM` z=($8&QCLJom1v5kXj|D09_snW1yRx{id0s!qCgCiQrrtZszgrR4cv`I$XiGM9Ew|n zM{b0?W&Fo)w2zY8M|b30H{nR7)hHyg59|orl+Xn2_1=CAN6}4R^)*XnP1d)f5xZ;? z^@Ngg1x!{^N&8)2{oP;wRTa84k@!89t2@wD(Mh!JUj$BI1#Xl7y_>y}7PTW_R!PbQ zu3!tkU@d824BlW4?qCo8U=R*r5guU@E@2ZsVH8eb6<%Q$ZsBV2%{7t!CJD9@E*ej` zk>UJJmC^*9W*tks;TqIASJQ#v%p^`1hD)uT5RbWlqBPr?f!h&zsR=^~=9%G;IpEi% zp|gFF(vjjO-jW^8z5bNm4A}|c6vAWTr_o4awlmI~QHgKGVkptn&eKKW#23yX&4~~= zR>PxDY#iy}T@VT5vN@8Y5n_uo;?F(e(<}%`5ac8Bo-b}&B*C>QmZIy+6WVl~0>~Y2 zl9~9m7|el^x{of7`oTPltT>$xHDR8fz7 zBlyfZZ_eSVz~n%kn)>`^J__gUp_qth0^2m(cJ5B-(PH=%5gqcy3}sOMJfieaP`7wU z#B;ubz|h3dBXn?0^UcPIoF6ELxP2A2YSuo2J`URnAqfcv8IT}b?&1DmXeIg%6`CFg zf*=+OpD6+WbRdN~@QWad9IxRYF)9H4lw+Nc&XS0w(R7;W5$NZ5A+gxm9!exlKAsSI z&^#j0_?!rMMNf`K$JsSdD_v-(CTfd$4WKR4bY!@Gmgt1e&}l~EbMv-Gilj-ZBr0yy zS^_`I-PZe{(fuq?;C0cdd27{C=RiBsOpNOoo$FPi&HiROLjPk?#qjHY08)(gkcv9S z9Awg&a?$}R7_(|Ah&0u6yXwdd=15 zr-Ev#F0CmnUG7zm95CIc3y6%Zaw_14k0%9Yg#gpX9_3e?Vuij8TrOe1hn(ks=PtN`P0(DHB8I<2|Vk;?Kb&H^n3 z#~G{zusg%BA`>qV53%2(GT?fvEi>^lgRl*|{;erIG81nv?6QmJGVvHM01N9cqM{EC zlkX)CR}Wcoo5 zjzbq?LljKr^>!26X2*wP1J9|@mx>1-hgW+( zQvA;mboi8?>(;f)0J!EjURycAHHRT{0jTG#4)6+)cxB8U^#R+48{vMiCQP_mX4XOHutGA1G^BF0E7 zF-*+Q8R$F&tQ-qQf5w~_ifaUg{3a`i2EM=r68b`_JeqsbuVW&MMgouyTf67MotuziL7Z5RwWy-|%n6VaUH&U8 z$3^RL5Kh$V~`$NNj44xO<><@>=LZlqA z$QO{tLV$LRMJDd2!nPj}%$wfrk0m4KTo;c!;7fT2=@)Bj#OC#9K}o|!j^6C>2V_bf z7gE}l%A_JmV2p%XlupG+))-EfJ5w)J>-P8~P`l8q)SFJ_%T&0~sw)Z+D^`V;nF%Kp zGTMDfGoV-c>!5H^l7oN<^an*&V@^H`2&% zHvCJ-W>jXL@cyqXa>HjX=VFcEkEOytD=eJ+)|wxDUbFIUcecB5>A87d^-N_|@mYV_ zt(e{H4+fb8SfuoWdbM(ub+K z>z`}eHl|5hTllP5SvO3SQCUCExK`OP zC5ThiIH#yp)wE=oQPsTWuvXQw<&OiZZrzL5s%|^V&!}!ct6!_`xaz~H>HIybRnzr= z-7&@6a9UBL_I3$h+QW?SD&K<+4!qWYnu5Jn`MifyH-M_7%`gau6UfkqU2|%uhQ~H> zJ%k~kEkF7mI-xj5Y}QntL}xZpH^?-n-7v`}M_oVuZO^)Xg2Bp}af;W7g?UCB`@7SW z6w^lIoLmg$-59K=G|K?&ix6TW=M`|R zES3#JN0~p1Bun0ZR-lGy@2BKZbz65rh<ZJzr>>dp`5|JS@}j0iX60gb@GCqi4sfX(}L)Rj$Ji4}C7yMIl7x{~7RcD+pN$!=P0 z!O?5ma6NmwKlJzX@w^_H>wZ0)A^*X=U4JIaaYT%?q%D9zBIF2jVZpdqli$SYEBkB$Hw?9o;|;if2vWPpPozzo3k;BAh6jJH*abd# z>f9)n@>5CH`p!2PqJv_NhuHcUqIJd$*DzXmz~YgEi+^uF-7RtR(A5U1PwZ_Ue`exR zM0Vn4-hR8q5J#Pjj!n`kyk8D(`8>vukiJer-ef#X1&geiXN*DC!#F0J&zMxMUGyOP zRM)Fgk%$|3K&@dhuC?osq~%De<|ZMj$tsmx18GVZVKHGu#FRFsO~#aQGGQjjls=nD z#!_K1X=TWivARyi)^RdvOGhnB$cWl%SXdmZPbHv@Z6?M2yR0Gica{O{bUejDg_{Rd zjyCKNTqp~MqhU~1kVHumpiqv1MU?wtcOegwvpDdwO#Ne3fk2yZ&KJ%g4#=!yCFVhV z2md00x!yoQ9uRt*ewR7@AFmOKw=%S72dLtAuV1_yE65e!(Ae;Mg<IQb@pu!YnSBR9FflUgm7va*gx5|L~<6JeC2!WDk(v0;vA(e0BWJA~_>DePf z1P78zTAxbus!b~NN#Wf)8-O(SjdEHmr@9u{3p6@t0TSQ+1dm7KOAg_x4Z>!#%i{p? zqKO;=7f6x`Lh=QV!$qG3t<)Y*(Wgv<%J7O{Dfy=Z(kb{!N8M%hE%Mbxp;Q~Gt5D6% zpfs!2n?=<|zl&SFkaqo|YUZIjQ~A!g#1fTE%DMxar5ll41))Zh3FZ$*w6^N+u*i{f zf8lcC1lsshB#g3>CazD0LiDkz6VaEl06k+CWhI8VW`Y9TTf;X-`zMtdGF6M&afdvZhE9i!gxb@R2 z*2bh67Z3)P!WF`NtfxGe$KrDviZDQokiItx5N;{(68M&2RGCluonsIi5yhcfdi4~z z!iAM*p9YJX2D~c#h2T;zmJig+8fcrM%BqhI(9K{7qjMlcEINwl-I$FOF_*K7{oPjnL$+?>;n+y&G&7QDH*kw%dh& zlwUH~2|gyD({2fe^st)pL`P}&GmMJg@GFV#MOeeFW@|jr@I~<0fK23d9?JT_1>&6P z0nv?qg*FdaGmN);xxE7_a<&`0wnDwGCcMjs;r>zm?n04ec12UwS`{P?=ILq_8|@3h@Vs(xC%v~wb|~U8TxTs|H*UDW8cKKJ8%UN5TH=Lpgy+?^>r)!%I zY$A%-t|N(x970U4!8WxL8$Rp^j7I{HAJ1DM-)^=-qB;Xybg|NbrtR=u6EEm5IDzzHCP3)FvY%Q%NxMCew6 zs?V`<4$->v{}d_eya7{2nG#|=fWT=0Axl`QqZueM_?e0@B2Ys*j}Q$577b%?+j}0( zCJDJbPm+YN4h;(Rc1!Gu08>!=Wo8Qqz580UB||}I9jb49vUtW3h=!3L-G%Q5G(cet zBo2iXEfc1>9RKi-hZ<9Yj~{{UIU-s=Zq>$kPi@7oj*D zqF~)d4Byn5Stp+*bRG2natA@Op95GV_%x=63JL^X>Or()AarYC`D@VKLg7+{*#r>^ zh--eOBPdMFVUY}urX(Wu$roHEf~E@ko#aaqoyI}C1A~|nU$_TLM8x^UC=e1>g#c(1 z8hn0ZDAKyeZkolJzQNl)XOE>S3AumCLg46J05P=0PenB8yu#6E#1Ws$6~6_pSipxT z3JGCEG7Bl)I!HwW0d_9P2cAel1O<^F$llG5$OzI%6_ZdjA2W(T9N&RN_!L%zj?_thP#FVc7vH^hMqt@tX*7@4hHPYMyTyz zm~|4q9F++7uOh?XB4JBqCzC>7nq5ZTV(Vgc3G*dvY$7Z=GX7g*-8R#ALbDfea`sI% zV^-rJW_|i+qVMfN-}6zFfHb_E$wE7Se#^%pp9h!1z++K8vJWOK z`k371ZRF^%YH+#eSV^dWcT{Np)s^w^+yKfY96KC@PC7gj_(Rf6H1^QA9cb%f7H4N- zJVfjdU7{{(>ZN*UVtS~Zjw+f;@PcLl<0KxTBC6LJ_(x|%gi_VQqId-vtz~jq&t*U> zb3^6sbHBuAVrX^MX)%@2l9jg-nY&@lA$>AI5f|%_7^)>W?mkRA2$H)%!zXjE%hfr* z;$evbg%LPMh7!Xv3a92`Q}6@Di2+vVQqk3er1%p~6xbVkN_meWoAMJ=Sv5hD&*C?d zO1TsRuqRH%;NTUB)CG17VQrwdj7ArA*shSiIKhUI@~sU1A1f*H#a1WzhlO2=l7O^^|@2j=_> zM+^f;egI($D2H8A55r+n9k@4nhcZ^Gl=Uf;b;_WBP<}27t4M$}bSz!_4x})DEa*}Z zPj{Xd78dS#whD_a6krULd&5tE+iN2Wi(MAO%>Npnd#KS>Ort4Iz`0DnTU_UNmdLEx zx*Hl`Q39hllCWN(BSYLxHR=#;^3bx)s%ElVg zEy=Ud7{gwh*ewrNs0?7o{y9|QVh18_98#KbG3ZmZCd^(cIX#RKwUh(xtAWkO62MN0 zswbXOmnPFVQCzraCz*3tM~8+wiPG9h@5Feo#{dg|-oi8>2dZ(>#-xsn&{fJ|RtCaU z6U47M&7(6h>_nbYvFC~8z?cs6NGf5$*{Z-FQmKgD6dhQ?A2S-NNz1vDRm90WCx{n z4P|5pZFLRpX!qIk`g4FCOvE)zf*oweHEe+$T*Wn9gB^UwHN2dZ8m#TOcaji)t4QD5sRM4T zE$uNPMlsYR3hGTYC+N^KZXo$Gw{e$?C)1-9(((vX6HYek2eAg|h8x|*wK$hkU~wXm zhf<=j^=8xX3j*R7ZUQRnvJJ?wqF1U{zYn-9<8xspCsm^6+>i>{Z6oNOH|ZL7la;Li z!|ZVp9D#X;n7)f!ps|HxgUQX+H|^CY;IP7G*@f5~>A#uy=!|EZEpDFDwl;L0I+wX08XImQpEXkj zXu!X7iYJ*9yzSp?l&AiaC2%1#oP{+lCun6F`rG9E*;WmSrjxIog0p6Xcq$cVS#4kDu@ zp}6FSu8CL(%_nBd7h1+t^pbp+zvS&T{e8dijI~`H6uF z*^4k<+6WAEZ8jG7WXb_&XBDR=6B=ffPpt2pBHSDon_~>BL(CH=%pNq*t=(xx>>*+1 z7hZ2cE*JJo@uA_`3u73&F&xbs@n>koXNx`~I>firi!iG;E5pyu`W=6)VuDWcgAnm0 zPy7CS-)pXUywsR>Im$P*`Q&ORC3$!2;!q@cty*nI{ougl>d5urDCFuS_28uB>a6wP zY~<=<_2A;@>gxI68sO>{@!*!=>Ynl7Uf}9c@!-+m>e=z&+3)H#{@^v|>b>^hz31w4 z_TU5h?fT>8;m0R8U-(B~R5w4IM?YdWf9gknCbs~t$0TNO)PVp+VQ}nFkw7{2q-B59 zS`lU-M99}M0xxj&Fa8+DuvDp!^|^haQxai0BFrRxJlv1I^Z_W#tx-&V9B7ciO07X5 zP%#Zqj0FB%PLCl0u(0+Od*nwkrwxcBaef*CC6CPDt z&wTUkQS`m#wu8ZZkl`JIY480x9T17Af^0xR;=(6BZx3jV@N{cIg6Oav%>N3Ri6hMX#a)DeyC6V> znY%YHpp}-tmw={^EtErwoqK>!_~%kbt`?`%&nH^p_K+XFeP2H|DGlu4;^^dZ@5y-V z8D}3Z@M?4QY=ZX^5N}H_X!rCKihh4){N~rtAYAb^kZr(2Kv-ep;4x*^I)fuTThl&2%*h1fsTS#xB-GZc#g(Y^T9Wa&qQ;e=*C9~a6%pc*`lC~z z(OV?4Jp;*qrNXncVPLJqJN)Qv^{eo9id$aJs~Z0c-?HHF(wh(ouLfr4t{w*!g+D6^ zw~R0-ui#a~t4)#SdG9OasFHj7cvmS7=VnG11}1M(L1)BE*I~l*`qirk{maaQn}|No zEK*0sutyMAmjJUs)+cXnJHNp9PfR49mwV5bM&79ByfbElIbR{EBHbfXyqg-_*7V+Y zkbM5g`5nXajx2Qw+_e={xc_?RIJWJ4$l&`$F8D&-et*!E+WMya)m*nVm_9f;R#2BqFXlyETqIh;WOTe&lXgP zMvz6*XiTdP`H!G%;3OW!Ci~A=_K~oQ@AIiC1&$RyIv6V!Nu{wmKciVHmnoI0HhG|1 zsa9#Vx!gaaTdUU@jV7~rvRb2(O3qS5`9tTmG(#06Qc^tVp^-`rpc^-1d`ocC-c}rt zTDs)xR9Iy+nr*RY6cUg)<%VGXF?GNn8bYi)m6U;x=g+mhj_KeU%p@GGdBv&=E&Qn3AFcR;qQ z{3Zot<|=LTXL$ za89aP567tM2B+nxGk*ZbuL=5CIV1ZzR(Bz4`!ZK683S!z%m&e!n9K*C&y^$@$F-Tl znRYniyly0S(}iPyab9$yPI2F_Crt6aozLNn#D`xK0M1Yt=v!L> zG&QjBx6`$-NGdc@2p_K?0f&I7XnABu+R=HUoSrixzd-t#NNuRJ4TusL&V7|CYll|O z9GZFyW!!6vKnFNdHf&=;c_k6?`m5sbS;ElL^$|(TnSe2NVzDuqiET(YswFC(`h|r> ze{aRcCuI`ELB2_zuNzJaIw>128{QAOChWj@;Vv*MD@FK|UFsT?cfWZ8&!xVWK4fsE zT|sFUZ#!b9BeYUva!ss-d5oUIMvmbY(`0$?glk~Em4zqsXJs%h4WIvx) z_29jnH*ICVTz0+Vyn0RdR^+t3`#0!Ti9Kti+~7zuSj z)NDWyrScA(#sf$qSB1dSMW!8s%qe7rVnk=DQEMo3x5Y(ne4 zGX9mZA7JzxO6RR1ZInNa87VK!8;mt>#EY6v;1o1QAvj^Ki<vd1oeN`z3gjOnmekvcPsa$}EUM8V(s+hJq&v}Seu8?%9 zT&Af~p^ILjv2d!|wyIL&gI;NXex^REsoIc@US*+jrn$1J+S0uc@5uhCBO5t{HTM&h zbC;DLvny4&c(D|fMa&T#vy7#Uv6G!j<#L}u+>noOwNn$dZce`17@WBs)iY2ZNwM;d zyFw}V{!HR8K0cji%-|%?7JdhOUi#?{!#>xmIoJWmy7l zPHP4LmRhTMgn*md!SM&j{2q za_{DV;B*Pn;iY$1zWUAIBm(7@(WxdW(m^N&-No(%~-w-x|!G~v~VKvR9#j93G znp^K^HT1MH-dQ>Q4f$}aRs>Cp2Ai26ZZ*SN`-IOzZTz!OjYHAdI@!|wNZeZpL#tLS z*%481DeslIu*_+DcFO#5Yrk%t-$6(H*ZE>Z$8!9MLj|Lj#rddy}4`pAa`EZDYDJ)~UXxEYtC0w|G|D)v>a)wSz5CVc;#yAj%KM}Be2$C z18(Dh(jNKZdCo~utr)Y?70P6-iuqC=rHm|51~i+osw}uT)Uvrl_YTgLW)b{syST2SO6EqE*IQVUAlLW)r`Ux; zSBL)SlM>?A->KCt-Ly4ZC#V}c>M1sT0#PTgmU?q9tUVrIwQXYxT(@v6_&Pf_YkwJB ztQ58{H`6zmZATQFe33#{7GT;AxaR+2oKHr{J;7)wLh%Iv{!nSDA25_U1u5e*SB9U<{I0uly%5=MMdCVVpH4|wD(_T1HbwMq5TkS60SAR@z8L%2-CiNK#l|oKH`LOGki3 zi;G^9l}dw=Or4%sjh0Z2249^TUy}+?n;Or62G5ip&zb?>iJ8EYmC&DqFocUJiiaqH zpD0C;I9-T1Lzp;Im?T@2Bv+iQK#IIXma;;Dsz#ZnR)w}smA3vLYV`I0P^YWcq;J$_ zXx3wFHDKy6X6Z6v?Kb^4Gq&yz=Iq^;9Npi!y6t#7?fBXp1e+X%s~p9O9VPM{Bs1)# z5^Q9`EMx*qWqb@3z4TQ*_0_!e)x8bW{fsn1%(P;xv=VHz5^c1SZ2yvMtCeD>m2R(< z?WC3GqE+awRqUx%;;C8Tsb1x!R_mqO=%w81t=QqC(CMSl?W6G1N50ob?r#dcKFYm5 zTD?DX{!7mf-F9EyMnC;3e}jS`ql^%f)DY98P_u-8F^>zkijB03j&cf%boUAIcMguU z4NR~KNU;t~vk6YO4@-9nPj`<_{SlWOoRAcmoEVdmoRFHDl$Mr~o{^rJnVFrPlb2Um zR8&@8URzt+-rnBZ+dDEcGBGhRJv}`$Gc!9oJ2y8sKR>_lak00!xU{siyu7@!va-6m zy0*5qzP`S(v9YJO=l}dZ0Hm^SfKrERlUY9=@fyrdKK2ldO977-!4wR@b z98I85D%T!mG^$SiW;B*5(NH{@!R~mvKH5++mBSwZhb!4wI#VE?K&3O*STw>Oq0)l$9D;TF_AG2T+M)#LjK z9#6WpcBelSm0EYAwQg@XmRKrVx~=|TJeA36bE2)`Xew7I0#ByB@no)4sX}+Mz3FVJ z)@VFirla{{t<~{tbF!o5YU^hJJicsa>&@Os0=3?+&bHr2(*;sFvR&=>XUh#%Tfe$G z9J>Cugh*InXqN$qi1Yw$%?gRr}j(0)`f+==GNs`TX!zhYNcf)C#k9Q-!4N>ex zGB29%MX?{2?nQI|Io^xmho;<*6~?gGj}s>=+mDxKJ=sr?7o|K%R93Y(NK!W~J4n`c zIXOtt52id!HBPoTOfxSoJ50B3J}Le|w><+XoUoh+AU07}KFaWF{z{Gt?JYl+8{oq@ zoejHFR+2@7_zeuU?1U_=D<%~oD!75Af;21QAWl}{(wY6Yf6n*Cfd4W zkfU||DhhUZ2<^{!hzb%&q1eJk)8o6n;t9py-oVK<~y_a!6$Rz5YmvSo-)VgG=i8N`<=HZQHN~#Ce{e zL?wUGZ1&hJS88_Qalel92;MT`O3&*z=EwzlYK4OQ?{K302&dD(!U+op9}5Q;3mXTA zfEq}|3?ya-lCa>CGUJjl{e}D^b(rxeSnw!W@Tph{sQ*Gp!$wTUNkYd(M#n)x%R)uN zLQBKUK+DWR&%(vX#>c`T#KA4j!zV2uq#z=uBrc&MA*CWI{r}{z5K{hca>~*QO0vp| za%u_+TJnl|aw;Y=AFJ=R9HeyJqzru}jRU1jf@RD@WzB-+%mS25yw#1IwG8d`4Xuq0 z%*^$TzU%8a=xI9YsX1v%JE;jdDYHAuGdf7nItb7>a!@+ZlR8im*pcH~k>i<>X890$?$B+@EpkT9m(;XDezq>2|TF@d}s;%=!t?Dh(no(!&!)<*oYIjiBtGU(ga8{ zgh;YPNOQ$V3nj@bQw&izhjKHL7lEilfFfVq1}L~(}=mtEn8Q=!3AzR^>@$y2V$ORm{V zw$)3f)l0hFOS;2Ls?+;}WVg3e&);1(ChRwYzr`J3i@6h?ot;0BRf7kHX$K2J|!wKH8C|UH7zau-$zD9 z#z$slWo2b&XXkz7R$*aTS=m3i)z{beky{_3^$}G6-v}p%o#_Af!^v20cjNyLr~gwp zjU|TRE0gTQ0MWa!%re}{*}&<&ZcoC|Ayz2Kv(RAM4G~94(kD>f&toI`BM-55Gm#ZI zjS(eaa?AKLWaTHa;yuhy_^7VihWP`1<6!B3fQ&52KvkTE<@};Q6{zSxsO#dO#_QF*B{K`J$!&DBR?%~ zodq_5DQowoAcGNyase}%$||R%K9at9A%BgWF-sJc`JvL~cg5YTaYhtt&{uMyiL9?e za1RNF30{wTiC1jBH3FzQPlpc(AnK#s-xz?uGX&wUf&&Em0wxM+1X1$QXg+$)KmMcZ z{EyRriqFR{|2h8a_gGk%|AvEuLyC*bgbU=t#o+^D3jwjjfLM}1ELk9yJP=C}=WjqP zrGLRz#>3YnATl8!updWcBME@#RyIrUtS?|5mq4)N-9wjA~7O-aRMB1eC&US;r(?Y@gF4d zv1JLdHHmRdNP(85K&$^fYjQk$YJ6upLU&doFJ2N~G2#$4;!t&xf6*Wf(xMK~rVr3z z_#1tYHchA&MT90e2l6vBJ)O>l!Qkx1z4Gzl|1k{o|jnV-8*lh8qhpPuLrr6S&7<8tW3>Zg zl^=S?D!WE2dWOsT`||pKW)1XYe(3-B?8_Y)Dj6QD9~x^O8yg)PAN$+**!cL+_;~;L z_`u)(PX&h|KPdcvQ*acEy8o3Shocd!|D)g}Zja~xRd6^_$p53@K*tz<6dWtb5?$AD z_v3H(u(!{I!{x7n10`zl#7aNkelf*4@f^Cv6iuXAqbDR zgW*@n0l`3jWk${@rEQ5uPTEW z@@E>Q-X(OeZvwEtTfYh5$0XYIBP+D-48WJuOndzCN~|0DW-pC9PLxC=KcW=1t}H}g zx^EzUf*Hst3=#YwZ%U^Y#3aZ~T&Wy^gs!773#mf`Sj7BnLTG=7#q1GJj!OBOJDdPVgHdjVYFGGxXpsK#-~&$4WsFuRan`$Q^c7~g*wW@Rrwd?7%Z^RcsEst_-D)i-pHAL*cOic(cEb zA`;g3WBQYX!fRv%itERsMuss`3gb)?Ih9aX-$Y#m5E~^@40D#xMEmCv<2_&&6W_*> zd%PA9lzlw=TqTJOmfnwpD-%y6sE>=?Mk@7#)+xe;-`Qax_Y$VPuqhwx@ft1iT{c%_ck%%cH zEd`Rt2(wXON>SP6Y(*>bCDMym z;-!;_ek6f#L?I)P`#cKE@|i|BNwnf9Z(Im#y1KGa2;h|89-G9Rw0lyNo9 zn+44>&(20so4>+@uDdA~cDfKT(B=rtkImA+&6MxGh1!OVs}IZmZu#WCX1|rO9<=Xd zgLp6N0UzHJ-k3~aj4o~FNSt@VOVWt-bfxmh5m&GZ)eG}fEo^Ajp1ZtA=Ajhg@fCi3 zXZE3gXiytAY&G@(!iC^hm4q*9c*)0&XE6j82~;kBEz@YxA?WYouxh}#R78ZHU?y9+ zJF>;#N;6aJEL**xikXzi)c#K^45GI$NK`*40%j13oRRuAgfL=>MCc@C%O>^$)$N-F z4<$hAd8WqStXwUUMXEhyGx-B6+Xz%Qb7P@_($G02ACv5 zl9lpft7I2T&&2i1KO8-{V|Ec-nfreV+omoiom?F@&NquYSYWT*)EqZcD_gp9!mgxF zJ-5cs*+}2JC?xrcO93u0y~w23eSz+5XGJ4@#JsVAdScT^3~pK@)W{Lk!lQthM=+3; zpgkiCkP1mne9TeFp})3phm-x1?m60d{5Uv#`JYdv!Kb!mszgm19jHV=hV5gj5{?K?6x<~3#i%IbYR zV{^DiDZyjNsj)sj;08qYNdE|tR8Q+|H{fm=xUZp`IIj^pST%w?l%9CGbO%vrsQAG= z`b9B?LiP1t;BQ^a#lJ3F7bn&2Z?hpZ6@gj|TdM#+yz%pm~Q77rEhNJxQ*YJ&(K|A?es=R$U5 zY-J~jI4AKu#gFmmC8-$lV%!hCk!pV4x#Y;YDHLwIk+6hO11-q=tq}qWZ1{Q6@BHfV z!$v}L;o5|*C<1O&evwk(228}FNH=U{t^hc8g)fAW(BQsMJ25Q7UU{M9Oa0N;>d03x z=!b{;EWL>5V#rCKe^f63JPioHI$>^<7-cj8NR34oQj98uL2N$VRlGG=B*gh?PP3G5Fg7F?mih)+p|h}u`oU~|Z*G>mHP%TTWm z=i13&hR94|$7*cLWEIcc_RstkMmN1eJIj%^ub8z8a>!bSrCUv-U0=ysz0F!g$=&H1I6^9oA?8l?fl&h2E(9aqeS z=FFUI%N+^M9m~%}=aOg7j815)1;%dk4B}`72xmW zlMofg7!>Np7wR6Oa(E=5DkzVY0TeZfEmM*^Z;QYWko!0QG6ez=H&I^%is>Fy#})u0 zs6d@n8dpZ<)x@F>fu_C)CSHuPvaqjc!1@!{a=N@^(Pr zK^!ry5)C&)uG^IOQy{(&wp^hO^Gu-poSWYy%@$FC*Hs- zExolJU_I+;MP3bsTuGVyL!u6E6b>zm3VF~isa~Rrw2t*=6dkCcon7oMp_wlCnXW5t61`ZWSwu`w#Yu|^)6 zF{BKYQi_q#IT|95&6yLmLQ>8ZqUalV6Kh-pl_V~+R1#HbYi+lGK8A+b=5w{bsL_+4a3H6op^ZnNPg7%}f zigjYHp@1l3P_$h^Hp!Sj)wOYlhc}v9xEATrc3x^0oot>2M?1l zpzq)#22I8=>kyzu+yxhH5WCJ57o7W(I&<*)&(JS=%0NqpFl1$TWOM7fDYhP6l+>M! z&Kb7>M`>iOqe1ClcFybiO*2z%t(Q&RLz3?gn(mzvI0EW^&DYqk9jOp>`m|H0x z3PoP4}PHTS~?3`IrKFZ$kuKQw7-w7hd8QbXwQR42X{0 zxGA&x9^PU)C^6P0&s@v#EUQisd)Az0>m2u65bxVuBHCOT(L4t3 zyy%9wFajk@*8FJTyevY9Jnn)s`+{;+h-wuB5-v#-Fo~~jA*OCVrjNgUo%F>Epua(^ zlT~{VP7L;a+Bknw-EjJw6^7k+5;#Q?u&8OC-lb^d9%1|Od$Io7XKeqs206h%uqq1W zhQ&oMT#R+(JGbR(T4DOlp8YtaZvaZd?FpEtPbmoR&cPNZk572wrv0lS~NzjA;o^O>`B+p1}}g>BM+>DfoT%AL90X>-VKW#G-fyB!zL(^;%+U~=Yz{B&?L#yKhhwLmT-J?zSBRAe`kVp5? z@ye0UX0|Wh@h!)3pijlhP?)NEr>;q4eGu;SjBLi|GF6lF>r zb%I0a-nCi?Q?W_e8z*Pj6ZHKM%scJ!ya?rF04{EInyOoXuu6_-3*K*~!nqB^vzcaH z|K7g?x3gqTNH{)xCcAK=Rlgf+Fbj533@B!ci}uj^U(CH_SKE!(VBI1mXmR%t+>5&e zcXxL!?ykYzo#IxYxVyW%(^8~`7AU0?F`CP#}&CYd+q;@sdNAj}{(Hy$d*_#X7m8nQqQ5*$et8A|@+tb|*Z(WvJxAcnuNCx%kfh77`TLkn zd-A3Mpw0vMg(o^GWw_yI{Ji~pNumxWwN%mH6`voPh=1pPyiMB2`q2=a^YR-Ce!vL* zUD5woxBuAi^4Li6r&;t*i^-q1;6EKjf4chr^z8rXd-*d!@iZj*G-C2J7W_0(^fcA~ zG_(IS2Yq>3pm<&qeO@tnUJHKSD0=Pzk5zR9FU~*1tH-;$uTR54M@6nF4~KH3kC@D% zk5tf}zW@vG7((1FeiWXo%o7ZZlend!rBeUyNXRa1b5$F7#*$IAp| zrdztPSt?g5k`~rC{Ty8=IHgs^!(f?IBgiOSV8C!0(MPWQ))OoC82 zZ0ISW8~cyI;-nIenh#GX!{OF9fpCTsNd-eXeN=}URL zvHy3e7S-3AqwOZaFTx38AxN|xrr~d;`OKP{wK~kAJ%=yNV(2Qe7h>7Q_$(55KX+Ip ziN4{tOp&4Ov`kZx=C{hwvF^0WGKu21&atWJw9b1!#&1*L{khYoC>Z*N_=}VYG4XJ5 z9CQ8I2PJEK?!bbJRihQc`}VKpSppu_oEi8r7olZ{oEu4_%2OBVMaqmjwTKdVl)mLm zn&-`OP zEK+g1h%j)M`(_z79uv=D9N;mDu7x~luvsPpaXdxlhfc~?1S|q&pW>+)QU`<^MiL>V z=IW`S6e&EG^fEn7(nu|0YuB%WfD{_~8+SbGloSolC)pBtK)-dprN&HMK8DOjjs!H7 zvZR{!7Q%qambOk&?F~(T;7EiI`&OdLp9b*BaK)!UgiQQ?wG$$X&xVVQ;ll_UzIq^ee9vMYLCq z6woZiU#*gnvRBXO(yZWFtyYP&*DM#%s?lDp(HXVZZWU;XbY87BLEMs-dQX&Nb*rx* zta=A~R-jU7++=dzS>~dS#}t zyt=Tq)&@_)BA8dI6C0t@s@N&7@bYup(+fKvjqFGY)8F7T&o8Uaf-(&s1ICyqZHGR_ z1{r190VPJA^d(PcpV14ZvxZu(p?Y;99kFeU1Wh>R z!j}uOkmQi}!xpsLv?t$(;l;C$?E$Y&mf`k@foBY4d<} zC&3>UM|Dfn%vbj`I*FEgvb+P-?$_xm9EIa+yve_Ia|R453?&>bcA36KmlBk4+I7`o zO5l&gIx<{8U_7U+vJii;%9Kr`b886oc}p=h^e(xsM}bRk3uNC1alwROO5?=GrMbyr zA(mdK$V9BOeECMHyymFix68H-$=ev$s%F2+-(gKKpt0iiq75X@UfS_fQ%Ss1=!tf6^uCvGjkp~o z*lSv1INfLJJW`P$nDYWr|M4FMgGd>bLAq@>clQ_W&^0@(ZgZ*$9@rIl53M_Xk1RqC`WBQe3f#M4hV6WSM17}p_I_lI2Ylx4 z_nq_J`&on(cqS$4x0D6lyRDQ7JlE>?TWjCD`xqT~X(j5vwZ3=XJ|6hZv)_O3*WRyw zq@e3a(SRd@{fBXxpdT6i0iSvIf6qq;-Ij|6p6l#Cu8#-ZxAq5qV^i9f$@@J;9k|jj z$b9*c|NZFHOOhNf^EIo%ll9g-UECj=1;^Y!t;7VrSrI!HU&bL1f+XeH{Sk+vg^Xeh z#DqqV@yX{o@J~c92FS0Uu=tr+YSNOf(=awn+mMI|b-#AMaojV1BsANMCn+BBTTK0=p+&KG2v~oRIT48QBNL` zNpYgc&G27x5?F?z5IVtnZ;Mt7IWdIomb^a_E4i659ikURJp!oQG`FSiR$@S;5Dj>S zPC;zOcz{3{>5^M($i>?@`Qfl)RJcU|sRHFT;4Q}BU^P?6(zQU7Z1FFgL1StzxRxx2 zc(zjpbeVJjdOmX#W!=qkM>i(&OLuHCGryh zi{%!gjY4s7HW=^H_0<<5$$^>xyR-w zCQZ-%FiL;`q}&0QB@aL#KoucD*8rY8hn7&t2aP9IM`l!=Iyyr80$&MG_C*S283YrV zqPt^Q4H{Fa4ThMtNK8@}V!TTtR%NTarUCazR{(mXki}c=MtlP%?kTUJapPVOmnR5PMmCN|D*`&rq|3zQ@HM3( z>8m(@%bn{FE0Rv=>J2OLkA;=;4dUr+p~ec5$%t(#`LIFL_^~(_$)|T+^hbo>BoaLXVpf00 z^67&;xe^tcl2=_NVTR)`lJTMkzH&g%xt+o`2X7@Ba|B6F$Ib-Aw%m>@p<+kTP67q$ zK9gXEtTbdeD2XfA4Msl*$q;#@k3T?N4@uCg6OZR$Uh1I-lDrMOWVf8b#^UFB9h!BQ z#;z8?(Q(;#=17=vf?H4`7G9!!kUm#9IfG>}m-$;H(QNXHX8s4){7>-wt>*ll<@~+J z{I7`lhxGa1W%G|M^M6L>pH}9dPv)Vw^DhVsukaRLgBIYp7vQB95VRH$trp&RE+9oN z05TSk%NI~u7f?qR&{h}FPZu!m78aP&zaiv|JS||CXJfWzec!?U9ioWixoD_A;F9*% zFktbO)}V;p;uGa)GkclOpIjD=S>gm0MGcvF`eD+HY3M64_f5_}p=yaGYE+TXc^l>> z0mcN0P08|wsmLca1+?M9p6R0ErLP@I40rRG{J2+YYLOR>ASFmF+Rz=!)a-9wr4y1$ zdii$=D&CMOFYFkYB0J}SqKGhaPu$FzPA06S>2|5{{HP)BghHbP>3b^dVb-j8wJa66 zz}MVH2O4B8S?P+GoLEXwd`6O6UD13-mQc#3*IL!_%)S^Q(2QKwZ(TJQT{T=?H9B22 zzFRdxTr3;uGwa+*_E%^x2`#it~su*Ii0RK->tnz zTzA1+cLlAxaj&~et$V=YhL8x(j<+(Z>pqC7(#a9;WC3#Y=ssk^h|ud-N|XR;XIzUzqG!Si~y)*#$zF?Ca3yb-o8A#75mPBX;y;1i1rvnvHO@jSb;zfOI26 zFbg2<8BO7gP?c~arhX%C6*+xW_v28=JKYFj)d;Bx_;)^e(tMLkJ{v{qdXzV>6docJ zClKU)!h$K`Vk7mE09z2qR%rHCjuRtIqn^mdCg=fBG}~12oB}aIh(kn_H{DXigh(}R zAxwwJCL>6Rg$eP6B{*#)Uh5M*jm*OtP{@VK>uv>~ZTFJ_T8#{zQX^z3!-1+1OxXr0 ztp;`ZjlEYXrM+;WfSsr0%^|Xy$tx_Vs;U7ZyAeccJE=-P%hqTX zuV$_svVaHJx`GJd<;*-I?e-EZ1wz)J(GYz$6e)K?8zZKkkq;twYmT-~J@>vu?ww`q zeJ$TRZ{52X-Md`fyE@(bcDMH(asL``{|2=GgM0s{)c&p3{+-qSz32X~$o+?m{om#L zkFEQEM)#jq_n%Mqp?CW)hzGCm4_?zA!0{ZwOCKO;A0S#Eyzx3fiaG#f9w1j7ptK#J zjvb(_9iV?cz_>qn`{oc6{}7Az5S!-^NBR&~`w-9i5Z~*NAnK4X^N^_GkhtxTWbBZ1 z?U3yAA^H6w#hW8a{39ybBWj)_p!5-q_7TYXh}J9ph%V}gKJ$p7;)t>Bh-vJIdF_bh z^AYR)5!)LJs)nM_!QCCzJ$Bk&4t%Yo5QLt)NlqgaRa+u{>ElwyMe3{@TzT=de zU4d`af?hE~#ugQrmb>K^Vi>~QYv>Xc)0L(tCt4>fah5ACmL>kj64H}k?HrLp%P(D) z1;rG*Hzz844B|Xi0I5?=uLUh@s|!@XfA!eWUh)5R5dY09{NH{M5fKxSkQ0+pk%3q# z82BmZMJVVb$f#vV$>c~#|IrFHNs08xh-}G;JjjWCC}1ifi8qkinV!~yjYda^ zN?4kLMwXmJ7H0mD6U+Vc{;y}4`KL%ttOg`D0g>2(NE|_=|1B=GtnB2=L& z)X_TB5Z(VIMwdEP2biD*OjZMCD%0dCf=ZR?>NS{PJ5ir>**Z-)dn~#8{@H!%wdU!v z<8E_$*Wkup;lonu57Yh_|1XpVu{H$owfTwm2FUdXs`dwJ_6O;}jBc34-5qGy=xPQkn3ZR;jN$MuAk=ecOfdpNk7I`KiFK~%ShKnU)N4s$5d5IUrAj@R!bYKrzv8p z&TFT_>8`}#C&wKD7K#y*h!>Je=2L@NmH+sZni;(RGXgpp!upw#rWuM3Ihx)DYQ7~Z zz8@6-N`w{v$zPSQ@?WR~Ra+*)e8Hao0Okw+CF|dKpVj4(+2)c~>zY#LmRRT(pX-^J z<)4}onvoEh6%WZyiOtQ5FDQ;LX^1Q9iLV@uublj^{M8Dp{>4;6)qj#)GnL;u^`ZOU z48ni3!twInk@CLbioW6UzR~i&$@0Fb|Dd98>R(j$Pt^`jHBU^mOpUfo4Yy1WwoVUr z{(T>6nI3DIp8j8Gou2*|?bFjk)6A5kY6mB(M+S>V`}4>8^G18J{%;Oq3T5d3*+K07caMGS|KK3XWBup^n%YI_i7c1Zb=`fPDl`DznyIE=Zg;3yvlHf-pM+Mwy`L*c;dUMB zMx|~O3a}6zYD*FgWDTs@i~T?Z#V73Pk~`ibg0e-E^_h8uZBN%`2?rhAC7z*GeD5Qt zd3f}Zd^etS{UjFrgxI0yPh!=+5CG@rVG`!lORMMpawdZrn*WK0FWMyMUuNnj32dD+m%j25IbIpyI|6Q`O2zmGI3@FD7rH3t9$*)zBWa4=g4Qp5l0U;B}6a>u{0jV$M(Y$1IpL3bnIWY<)<(Qu_B*%^J`^s z6yteSp1u5eb(OQHT}^(@)Ojtmk+Idj?(LHOMZNKCtb=*OxATjSOkYu$je9X1E}KxO z^9-7%crGp_heYD=KP_oH)Qc?|li;^*dBr)l?KzJ+b)0-daqiSgi2K&{v2fa1^SqDg zW7W60Zq1&(UYqaWhi}`ey*00yF`W=QJ1qLS7V$FrII9(Q<=I8>T@9gYH0(A6IEu-G z0@OmuV?d%h7cjQ{1A90KHJx0T!q<>Pg5bSZvn(a*$c-jzG(t%TNVT|3Kq=C3uoU$736tO?j&7;)6vzz2D|Cv4sTnscgu3tRP9Xt9=yew&7Ti9 z_%iE%NqAgXt8QzaqCLuZcspyHz5!XN9&FqwEuLXC?JXVvIau#BaewqYiZ-%Ev|Qmp zf8H)F$hFw|YoM0wtQ=!QHYAph zvv3Rh{^G}so&G2KSw$=EkCRHpmN*&Pmlb^8KW5dV-1E;2l>{6*=Dc_+@=Jv(1*v`RHmiMvn1Vi?>+ti6{Q#b;x)xYV(At$)HOI*sp5tc>$>)3!+Op zoh6)w-A$`vN{%W&0sYj-H;uHi@OD2LbAc)L5k)$S)IBpFaNl4@lp(mVFl$YU2&G*TPpU{t7WC%@()0P5ZLJuQm#_^|OVmf|5ve}N$Z@VGs`5~IOh+3BN-p;{Yq>_v zLJjl@K7ER+y0sG-cG9aJR~O>frk6EvIE#x z`yJ@ZG9iKJkg`EMQUQO+>S#2LnbCGt^m0w~>qG}@&P#_U-U;nZo>zZn$1g^lK!6V- z+-A)!FV##2z;+WK_ndZy^4EZ~0|B*hKgK=9_H#7U-e52KOgrLzxm=Jtw#nEGLA~UU zO1Ti*EqQF30W6MeY&vG%{@panGdx+tcjgB<3rd|^Hw_MUwHCZ`x=poYfH(moszkzZ_Gx`MKluBr?Ui_uEpf2 zi4wBkXR-!c<5_zK6}*8Na%{~@`53L0c*y6f@BLOF%&paI3Fi_ueyb_Y+*Bs$7t+&R zYaMf~4ef0g#=lP1g3Dly24qK36#tDgW*&;91V>j!!K4{y9^Rsaaa)D$+?BQutslu| z9p_zPx7RA#PXXUt2;6txGq-mJ$2jxU`0sW){vzHNu96U?t$qmv^tw+}(0`%rrlmz4 zKuZ07J+n!5@2ucaAGfkDL321$J2@a20}KwnlEeutO8Xg`S7hL|PAiiSUoTmIa4X6N|B!GuFBD?< z_4{7T@w>Z<9KrTb-%UY@2b5)ApXhc0@wJBh=%?L<=QnP0JTFO{A4h(~prKt2Yn;r> zL>wDnJ)hRj`6&4UII3-AUC;#w!^*zgdCXv46$ItYA#E;3Y(6{9K`;J6<+lK(RgAG4Bw5lcaekqikUY?SVjhZj4P&4d@ zTNr(Z9ODBk^F~Iy*w%hefI* zA}Au_a4AALTSoPaMV&A5VZ=!X66vNHx!W9RI3aCZ#bQbrWy=+%Xd5LDiCR;SvIj^z z>axHbL_D16CC+G%4mPg`W|)KcvpG7^)vJCn8na54ke&t_LT_@c!^C{!p|*;N3l~`7 zL4@?hJabSOw=}TX6`}3 zb7tZ4=-`sBa^fCBY+q|GajR#&4yeg8H^z?RzllZRh>N4g8sRf8(u^l5iHAD`w;<7q zXhazPl@77fe&POZ^P`TyWGTbg>&j4caZsJv_9CvV% zuu9&p%3uX$1zL_``iWCvAjEuH#guHrd<>WBCD6AIi?5VSiaKR{n7|!sOF+;uWJ>X{ zF$>&2_Fu`yf09)r4;9e?W2I&oQ%_pLVR=%7Lm@vWuLDJMLi$T<83C2H?*`u%s zHt|4m0jO;$!dc1I6{+7hQZcJN_~Fv%@R;#_V~KAPk&LEHZ(vJJ1R@@$)f`eCZeTGF z37_c(0Qj*KK4)P4O2eRv5lRK_0}?Eov@ekGe8;hkJS=G4f{o;2bSF&`hLu61i7_^5 zZpc^|zJbh}>DJUKV-gU0&eV?*R9bQjiTupTzSOCcjP15eS)D-VYMdN9>b$Sf8)cCd z4Bbony%Z061X$ZMp@$Ck}+!OkD6 zW}YBon(E9SU&>$LFIcIjn%67nqb~UP*FlV7+L~m9If#WZxkvnt`#FqJ zajNxUoQ;~Zq%SrGW2U`Z2}??ew9VgXJ-i zE7HW9$~J70XbvT!yI2fM+~J}yKRlMdm^R3_Sjy;!{7RHGdL{qZdJC5F=^9 zYbla;u#?=Tm&$7iY;K8PYEfpAlND@@d(#?6-Ku@zWw709Jl$eaYpWYauTRp3rPpem zr)*(BZbsI+Tl%PZIy0EwUDOTAy623p08eH+Gv!Z@h!_1|Pq}Bo3L7cezvVFh(w=u{q@( z4P%*cSQnXptxafG^EOVY0^wH_yvhqJw5B#c0tTs0td9yG46w@(u*#cto1R^pR!=)e zy0ENr%0J8YB0*ak$T%AM+6glsRcEGsPGvDsxorj%l37CYF-v=p)S3aVorfIt7>9{; zC4D?p2K(~Zx)(1x5bpccdGX%BR}NMMi+}FtRPU5K?0Z`D?$qzzug%85 z67SMT)79@qDH*VzazOi<3Lk1d{Gm#76LVRf3;d}%_wntrKrhN-H++dco?73Mg1}HW z9)=+qCG2?Dm-+>c!GkzoT#^y{bE>j9ov&4u_HTxeLxZHZ1W2)nb4z>a(o9*NvH*%B zb$MMMsXrxAIr1A)*z0xSsP#yi^$*w9_$>Flt?2mrs~=N6hC03%$F<5>2s3awNX&io zFmLpzdkFgODV=bz59~eMZi8)xW}{f$nH4%F>6j|xjY){si|bmU#*d9jT16EwU>-V} z>YwN+q>i@T0bho+DXD2DU}+}vW~LO}pUR=S)oc z)(3m;=#p+IV6GlK=V?B79#3=WIQ3mf=|+g|o6x+Z`n-$V{KHPn`q=z)5Abn^_7&Lz zKj*@mf`uc!1r#zMpqCbHcfm1p4%;H3S-5;ut)SHj(1S!2b1OP*sn$Mt`{UDnJcMY3K_h zXfLHtEMdYJt{x!-&V@TW#Da;($qub*}22L4S@pPNgwZd78=q+MF4E z>%r=LfqKp!Y(%-indo#>wH2&TW8Gbxfhk3Y=Q{G6Wv|5z{pR72)``@?YK8!#-27&I zK}`DUY=zn3Ovv^TZ?~Qj(8y^6lZ1|+VLh>6d*F4t&7g2vf~h|8Mwqahb?0^<6dk8< zcLk#WSi(O}MZ0RyTss~pk!jW_9iweJv>t_?=32Q)bZN>JYMg3;9pg{LmoS>IM0%%R zSEY#c-H2@Gsrn&rjYvF;@Mfbo!O_-T^`XDUyY~dPp2ZN(u#0C@)J2A2H}I(-ua83XgJdk2H@CnMLI3$&bzXj=6%OcngmO$Z^^G zj%zHBMdm`p$WQK%j?|Wp!BAz%!jtdjC(2+IJfT0*{TzvF{4-F)nCiuL2zt>8EdwBXOPuVc=Fw(Rj>ade!T>GS!vHO<(nhs5A{u;VuFJ}M@A32VvVx4d^VQnC55tgf)y|+LbHeNw=#DW!g`LK@>v_}i)O?ATK$rfF-_k$ zJUrI9FLN8VE#Jbozim57Ut@IqXi&3Gl=;QF^Sj|_Df8QN5dNQUz*iL4k1a=U`laE6 z*^ytQQTI8}O^yK+H!ixLabH*nif)MeZ%FrV$X{+KDSl9k{-7~|{-6#1L0|NPvHu72 z{twodAM6xAIYobRnf&Al{>fMLQ=tE+(Ek572l3;N!Js=)n1;Cj6Q&^ws$?4OVC{Bi zn(klk0PnRQO%a3d*GGiYL%UwS+>;gEQ-}*4%l@)%fO(3SLk+*)yxiplo`;w`LyYDSpG$!*rA1nZduai+<qSt;fgdIe~hBg0d%R(`*FK-I!n;`qGF^xRubP z-B*Oahi0Apy!u&T1l-gaJBMQmCpyFA^^Pug9w-DN{>n|d!^EMwnOJkFeh(NdX2m^Q zJBQ4RVv!Btp=OX9Gyc1Sh?>YwKXo7x>W?OEq1$Kzj>Y{%SZ10mCY4Ag9E3oWdMurS zM#bu3v!E%X@K*HkOg5ELF%iWILr9O~i&!M0|8qC;l9XI20$Zk#zUJ2Ugo(@teIdlVoW2YVJs20SHA43^I$yUwE7jJ zOVw7n?}xp28y+Qx$u=+ii3*ym;(2cj*0^lxo0j_V3^1TPTdvJgLkf60U_<>o`?Y!_ zm8&QHd(DYYMoF#D^H*ZCs9*g^S+049d#Q;mt`ykYWIf)%zrfFSd0(s`{NxaVF6K{{ zP7{gL$FJ>=AE_F=dHEGU_4paF2-uhZXWy=B@2`VMQLp{{tgv?fmgx^*TdDXeAnlSh zX$mKi{mn~GV(IHRKh~~S)y-c%Tw<)m2v&;Zqtcf~xhItX5d9WDREoGOw;yl6r7CRfL7%*z4c@q5<@Zz6RZL zZ~#+XC&M1o8KrvAmaxhyt8i@>k_#287n0x1C@(??>nGF|vKSSlWqvQQPSfnSEY5x7 zisaVTvng*~qxw0rtZn3dil@5chsdLA77c3CweX+0)wRmP`%$Tu6Un1*SO4g$@9=Sy z$H1xmw9VjsKO(Q8>o}<0(0yKt*T{3-s@=$YKa$tj_g@a;D6dK2uhYK{A|l}d^#|hY z5?T1Uw=1Py46gz>e*)HLab+|!g#b0-_YdjF1Z$h(!fA^hpKiNFCWk4rxwb+2mSGj7>YMy4yU(QIEU05YdJ^rMh-`EE{lv}G=aMkIHMtJ zgLxbAHuxiB3}W1m{$G0EDTr3K#)RO6)@GBvYA$4x=XjF;lvKaBe>9UN-pG9g9S$ZG zqO8N_!>dQf3gV@aN4Vn}_|h2zOf)kSpOcXavt-lM+B63A6M)N7*r>b0Q3w{j`w|&W z->VIhErBO;NEyqc%MKyX*rSnET(yKR)8^PEL%lCziJ=j4{aiPyr zYq-qe+TuW2a_tg9D{I?F*O_7I36isx#=wen+++306mS%S@-b?u%#3X#30{*+4KB@~ z@w+MV#U#0pohJ!}(4&c}5cG(RIBnXGQQ)$PDZ$$AQY5O0jzOwr=`_yMPZKgCO;;Z? z5nOjT*0U7c1e{1tEr|tIJC(iKmJ9BWjs;KoRs7a87;jo^MD99Og6@}#UJz`>5Cv4j z@K=hFq--Vdx>TchR!ZJR+JZp>YO$=E`FNwY(yzy5-50-#PZ`Q`ACD>|WUiFa-K{!+ zQ9g>5u9UNp(aWMss3$MPC^KHl4qkcz>5hJ;NvQ!9BL!CcL}V&bXR66qEci2&CXrO|wp zW3WZdC`}uh`V&!3+KNn8e^)?vXb-g^7L2O2`evlnmv}q(VE-8 zWO!?i+ovFwjiF`2byvMcw%pNhS~I=Ld9C%M5$>Ec9n(i))K6W0+Jq_!$*pgAVjB^i zUFz?2&1T(nzTi5$W%#Qey_xQqj&$}YcNi^s^ype2b@poQHu~nZ-o20b-e*+M_($e? z&ljopeybM?NIZ3&7m@D+u2zjB^yH%+O42+X?)DYI*VGgz&@I?1{cZ6m3i_Ni}{ z1R-IYL7P41ee6X9fva0gB)3WpTAf z{K-qkRSb40kfyO?;TIj&jKj%K81xKC12omp=##lgVu4P^Qxj=&Lj?+-_pMghm$H~Rf%JpE>z|M?8G)A-*2IkBs z!c_5FN+)MQ+=AR%Y?{Y}jhjzwi60yw9NPsn@sNq9Tw5Pff6zwSJm{2a5S z@Y|M-pOllM>&>h{0g9=H(^)c2R{#R?y)l#9g^|00j9(D9rm7LM09|~p<{WJhF3-18 zC=H2%xADCu`Iz%fOquDL_Kn0)eQAfj|2}Q$H_C(^Cu43`6}L^tpSN=YJ7J@>_@$@hBzOJ(H2~TgvG3sNmiGsuJzDQZC|IqqBRiGw!$6+UMEe zy?bGTwk5keMrhWy(=m6~V!_%5sqKzktmGe4gP(NA`xeQVqzET2pwnNN zNY|s9mVT#ejrMm72#cB|QP@q(-_~qe515;L+#-m)lMrx?G})vWpN?h?WR)xPl&Z|| zPS^Ox~vh!vQ0Kz{w zNVhUx^7{QW&`ECN;b_o^n0kKz0jD1zTkdG}DdcZyAeU)mbWZ@>T438D6q1)48$Z#D zQv(oYibowm;g-lf)D^`ki~nW-p=?6k0VGj^GejL?Dj}8VVd4dO37m!yV$E0@2Ql4k zF_51Kza2Vd89-oIqUNkOcA}U%zsB}moS4TuigU@Ie@f*Lu(@bjQt3Z^IT)$7?OS~S z-!_2_Q3jzgt+A@Z!5yUEJGeBK(4zT7`#1sgD`lbXoj1S|=`w)u4v^EWcOXT=z#mPGPDo}`YtdNv{D;q_6Ch0ZN zlx@U7WR-NPN5Ww-4q2+4rY}YpKrWV2bo&p>`dLTyK`J*F2p=qMxH3XiB7dhY@c_sC zL9?f`2h)aT#Ow8hRj5Q~*>u3>qxE`pB?YF> zEwzYEI>hvaR{gp{UD@0G!ep#e7=Ks$*eL3mdK=GSy!FU zGmH(Ik+K#XAl;Fc`;*FLG4Y5tdkIK|ZLzU*w}q+-qurM2;vzqjK*%23uYV5JfmIhz zqRB^)%a>FzGGe<&fUi$;YOZV0uNJoBRc)DKpB)pvjkKUd%BDng;IA&KU5LCvpBAcC zbLvhnqgHJ_ng*vVBQHGn;hf5`_`*N@OU9E#CVa?odTcZTsXFAub z6up8~DOGql_H};BRc%0Ms>?>~*+%Gtu6H@T|J6?{~Nj{od>s93ntGZK>S3LmEK zn+LcoB|UqoO%q}GD9~nYm@avWuDjN2IKtIfP>4R><`wm39`{;4w>D?hda$alA}Bmt zIIPliD~(LoLQ3}y0N&ZNwrCV9rhG&1^i={Lt6lviLLx{gRo=+ z;$*{*hz8l%+fC)V#l@>o4dE>fyqIJylvS;r@GUK?(G`=`t<+W>zfGtf^&PVR7k!PgitBi$mz?xHn0Z6A9vZ^DtTV=Ypru1hA9K(ibMhR&lRoCsKIXPQ=J7h_jXLJbJm#-BzJTjA zPEl{I+7pNpNcP8n_aI_KD%@%t;lp4la$hOb00B@g5-%V7s2PLX=%gwD()V&?im1oJ zmU7NrfL0938dp>qGw^JXXK-$ zk))@TXQoi+pwxLsY0O7yBTVHgK^+LDj*tQ-NCVSlfLSuYTp3`#46yJoG$nGN4+^x^ zstgU9e?`G&oqxgFtot`S`$>|NM{SOB0`34;L2b=^3 z-U|)7i43@j^tp+2y9#%@2)Di$ZgLi?auh7I7fiPi47U&tFctNHEu!d2nQO`!sw(QK zDC;PxX#YhOhSp!yROB_}q_iX@bVbAs1trY|Wo?8N9E6md!KzLQnvNRUb|!jO4u+;4 z#zsCS27ac0@i#LFFgFOYGzhiU54Y8ive%1s(o1mBNp{moannh4(@Fb>bT{2}SG{ys z{d8A@e=y8&{a-N3a5c(wGs^KWD)crk^*1gHFfI=?Di1WQ2sEk;G^z?RtO+ux3)1@- zq|+3v^(k1hEm*xXSgkumr8h*mFGRUNL}?&Ic_2h(AVhT_M13$sV<<#xC`5NC#9%1I zXfVVW#z2S(jKL6-p%9bde-Uar{9hOfH5~{y?~Jl)j5Gk!zV4nFEukDB{MiFGc+MHA}%uql93RRmK>6t7Lb_k z9h>0}$@GlL@`=mxkIxE9%nD1%f}~|8WMrmgWoG7NWaVUL|3hvrtO=i$m!DHmkXuw- z@S&`_7Ck0O> zZMdOUK9Tir6?moOR{#VYLWNK<<8f%hYq4aI^aoy8B=MgLJhrd6*n~sX9Jv$`ijex! z=m6KtgO5bDDicMsdl$+MXIL#A+RKg~9zdIUvyqlc{9mD6bmR@U>$d~x9LjG{^P3r& zhJfyP=PU|2Noy?bdd@c|cN2s4DPI)VE?dPw9U*@!@B%a+3zeh9Af+Fu*8& zy!I1TEN^e$Ees5@6rmCl0}K!H_lma`0_N}97O*TCvM>$Mv26FOLA{mxunPQx znmNV>z7%r|I+#T5NLaft6piYOp{0Y|MxOfu1As#Q7SFUO5>|nSwMfLpaD!j2H-OsR z30awP#(0D}Df%&=^W{MDd}aF5a7bnm0LGKBcwXyjtDr5iWkLxt{V%0{@0|Zu;A^Z0 zjI=6Xkwh0p?o%VzHM>fa*RTImw|gy>Sk9G{h>(m3Hrhyt|60~GBoy={ zRLrD6_J0!M++?)e>KqeC*uP>`dxxKm%4vQ&tLV z7IG&ha#u!jH)e7VRtj%+NgEXPd^Bax3fNq{<4 zh$=&rI!hdwBMHoxqA8H3DUbmb%EF*6lA|k>r!Q1s$W>s@RAh@&;tp39@KY9juPkM$ zq-dzDs;8``t)vEWUgFu;UlXCeq5*5-N^jD$Zgm?5v#Yw?d}d`*TN&HC)0^w|Cm_WuQa)>eam&x~7g_1XNL^8@z(6N3(Xe{tj=bP^bR zFF5D|oB6_n?jnO8qC=iyLtZe%hrD4(4EjnA`hf@hrTYV9`hsNpg5~-`fz0xC)HnaMhu3^`S7$p>Um{aJ`{${o!zf;c(;OaI=3f9}YJk`4sGOAejI@-DjP&%(%=EvvE^^az^D=VtGxH0w z3X5_}N{cEgD;pXb+uFMO`-VnGreUe(tZby$teYYMi2I@3nq{N7E@b z?DBe9bV6ntUHj*zMShB18mGblie>B|5q*n-+5#^qd*6LmKFmr?|*)Q=6&eknQXDJD3I}3BQvhh8f$)j?$rd!)$ z{aEkZ$r2n+=wm=%OrK2Zg0Sqa#s^k#A8gWwW){PQYU@)d(7HxL=?W>Oqm zsWnRhhtV$EnU%%vI43}gkI;~7t-~Bi$9nU$Fu;65(;5S-m?{JLeDg~Qgm#M@F=n^= z>_f6Nv0g!p94z^o^xs}fAfccoCZmQel#sw~^)L%iv58W#i&1k(P;-E(*<>gg<$&z+ zAT9-39tApH1$tgZ20lebUPWeZ1r~03j(5`BoRR|UBH}DOvh>W#AZiVIDg#CeQzi;) zHcAH$Y9~%=XKrd24xk$g(486R$qe*i0s6541K5EfoHXHFpeSw-gclUc2a4kdB?!E(q1%2K3mqLpO+Cy1!QNR%wVmeszXeKLO1-5N2_8ZS?otTu z?(Psma8H7V;O-tYxVyU~SZND&pHis1)899=Gt=3fy*vBcxqJ8Cv(I^*H0?S4GtcM! zeC%yvjQ~C^Eo`mLExuu6Zeed}>11W)YGdtbXXE2&7wBvs=H`g?aEwAY;k=v@yq!~h zozwlDvH~4)0-f@L9P@)63%=u25bXRTg~86hP!#M`9B5zeXF)`2w7JQ4If?Z+3imh) z{YbB)&@c2k3HQ5*47rPs0D2bCu)9~mg0UwMG3Z}=-r1;VF8RHnn#XRz9{F-EgE z^VxW-S-kZu-fkA}FpGDd#k>8;4Bic38t*!dcbUdJPvIRW@pfZ)s}a1#Fy3+~9>8jF zmw|Ze{&?%Yc$=PhyUuurcAR4y&Z!0G+=O#&#JM)$-0E>|wejxNc#mp4q6UwwP4KQs z^sP(^tVjtfO^+zfj48~H&(BHD$;(X5&BNssMP?PpgpOD9bH~t25f!)9j$xaY;sa(?Tr&C{`|q9cBi+0d$xhfdm^Es_^~0h zg{pzn*z~oXMC1`l-P}^7f@CgM$%Qwiyb%jR@Yqsk1uU7V;T7L_CEl7Y=<81Uor!Alg6S zMD=682GFhT#!1>M=*(qk3YoZY&y%i2|LpXkSfb>uQm5s^O)RYgJ_H;7wWEPp!Bt)Z zQRQ{Iq2aPMqgSf0I*h$Ex0@r-s5gYm42Sx_L3Dbn0ypl}eQrOmp}`?}MIev}11u)X zLayn?vIg8q)mUbu8K)Ec@YAQgM_><1e>O_^?gV$3Drh$c@auRY(^)1EGdq|SEDVB3 zvGK`qzyN8i#4Dg6#4jNY6;|To*Mst!L%D3B94=6HBp;hE1QY-P1wlX|5D4oGZES|kvh{+dec$*Q_%)fF-B9d##1=c zDZJTqg86hJfW-_2%jpEGsRZk(1l#FE`{^WynIxy#WS7|#*SQpr`4q%_3i3zhQjjw# z$nj+4P?BeFBBCAd(G>5|5bsfsbFYnYtB!W9jC3uJa4p5UmSEh9G490}4}hW{D8zc? zV?A=v?&)D}i9v2SKaW_SU3@)a{XAp*QPF{ZQNckGVc}SGWEeIsI3gi1GSxpS%`Ym$ zFFMONCdWT6H!waoBryk*k`+g@9!KM>Khvy0p9deQ&ZE^(=#(Ov$L~vb8~=y4)Dq+ zQDz0nfC1dn(h?93R#sO2EuG*_K?t|Ur2C;CrVlJ_d@rG+xe7oFf(N;8Q1*$IxPQS`haobCuOU}Am1 zi2X>u6|E?h2xNsEWw3uF7-#MX=Jj|*^PxbhWxU7x){YmsQ$Ml!n-g5+>H%I4(~m?> z-FQ}wQ@MA9*FCSqNPnJ`pg+U8q~s>{p|*(6z?y}ADLF*7IM^C!j*_G}!TILYCqolw z%-A`l{i+D5jAn1)8iOhY>gW89Ek+42x+k|dE(LEMD{!FhK?RNhS?`RX3ju}{-A{jWg!z5TOTgR(xae4b z@oV6&W8oG6@rtoQW!Pcz?1Bm$LU0aYB@SUgJOik3iK=jmser{)_#{<@#1y4PWZ**L z>H@;L{QQOxUQ=Ff3my(@ZZ=ykkUbZx11F0UCo_OEC$kGDvn$}e!o}jr&EgGa3FKuB z=L1FXgQ8%dSOGSiARAtYEkT$qK?Hz3L6ie8#)*>v$4c`@$%|m&lHsc70(3QfOifW% z)<|nRq>cSAc-q+S;^1lfyEuB-ySh6f+?-Kvu0C#Ve(vu600?(qPj_#WE5gs&Imp2_ z#NIm8-ZIqAJj~7tWIMn73XKht~J>~z9 zi`w5A4_kqJJWAZ@>~ADBP{o``Y*@Ky^oveLLqt5okdFiQ?twxGd!?-nkJr=H&~>yu zXlQ_C#GYuWBgn@gj|bDyJb_FgJ@m9c%vtUjIAupg zsf>VoG%omM{nPeHJ*o5Q@DoXS+daqT9>J7on_{0gtr&hX7)(^47H&ADfoborZ;bU3 zoRMvQ>3h5n)}aIpuy)RHTiD>5sNczDw(K{<`u8Qo4!>L-R$4S%RM=Sb?gyWl?o!es zmx|3K7nk~wR6STr&R1t&^ItdtPo( z_8w{X*?iK6MNxlxcf0Pld6e(PFc(f1S1uOd&PH$pD>GOF!K|UYAT)#x17VBcV~^xx zkK$vGhEj;-=fDYY#0zpH2y-Nfa->OcX322p%Jbx(;{k5UVkK~?Do=$vxKayTqXVwh z0}~Cv^@iXEBi<$xNV6HF)q=0Xn!ndkaKKG?$b)hn?tTJaM1~Q-)hITK6rb>snhubi z4LUa$qA(w-NFfXkun?}afL30>sxCyTFGOjOVzfxH+5q!0T4RwKeQ33|P?h>1C4#?V zq4&95FZm2lxg>X)7-uQ0gH*7MB+^vWNnhAfQ@{Yur!L7OFTgIw!wLm4fmxV1n9s5T zagmZl2a19qCKeuMkPr)-BrB&ph#Stvqr?tX z;n$r>p(oR?H`BK-)2BbndoasuC<`&1xs>?J||^Jd^D-o9#50?KGe5 zNXm8~Q*d0&c3RAKUdnb|%5huD@mR`1EaiAD<@hY+_%7x6E#>(CO1A$}w*O+bKbb-R zX&2xNz+%of0+;ea7K^ZpWpRsDDddKHaz_=pzh!Y^XmMfg-&+W?Xg<$Ax`*Z@)EOv- zO~ue2SNI)EWX~-6mKJKICalZlt?D6$=$O_I1(vbfOvmMwGR|=pdn+;u!WyR$c``QmHiA z2r0XkcZaNF{H{4-AR+&f%zkPIp2f?^LVLs;Bw&dwwjdVUnn=qkaff9hS+qhhHO!Hi z_jR7-`bn8o$mOOhjlF0-F~=1keSGw3?!swetoF&p8^NI#*0`^B>RMjCrWfkV_&Z_A zPoD#p$eA1G#1O|S#Upc%x|UnNoRqQko&ssEb6_^p4D8PUmdH^>CW&A}rgL^Z4%Sx& z=8kzE@GdZnIDF$wA(q_GUFLoB3lXqH2GYF-p13-DONiAaP;7jM+F9*GAk8XE-q!qz z$mbG%PNA$1>bas8zT8VNm@tB{rpr+r!$PxOn5St{ERm&`-ZKF4p}`dXdnK;3OiYyR zL4Y+bh=q-tg%bwilV*o0atNt$ifD0(=<-OIfTb)Tver-q2Y$GVfU>)&vWujWgPf9; zBHTpvoVJ>@lA4&D8cakT!l%y7rOC~%4+a@SK-N%JCn&2241|KQ`U|TO zF(T~o;vC7+oau7h*$O-b%HR?e;C|yRQ-csRAyqn%S_4SE5pRPD@c!njHRG=`7bKVp zmYNC|nF!|@i=-QgCL4?4OvPi&B_gdPB5foi?W7_dWTG79q8#O892H_5m17*$q8+s( z91YNprooQZzK)J4M;DZ%D}a}S8vxP)xKG>>b{_7w2v-}VlQqiG+S|d_-@!iE!70qa z1!M0X<%o=P@=0{|OLhrNbqh{+56eVgvQSakf$`bs)SSqS?3k=9Tuw$pZW>V1PR&os zC`ieskepqB&nbw{&5zB`i!8{+7Up7#v(cp);e@1+YJ5-)E^wECnm7ReUHpFj;$IyX zP#F_Y8X1s}4#*Dm&kFU=4E40t5jokIlxj*!GhfKGT*$H}<=B#P?Z~)M}V z+x~@m43Da4p}V{#L@42dhm1yr%J*x0pwrVwx@Gzwo?flr{}SJW;8sP2J2btO{&u@?M ziaGGmPfuD&mwauOof_h8g{xKG#+STUZ-Wnpyx8fI3uHdjwrkriQ^(qH@ND;sOyM=f zLj?h;;{+AzM6M!bSP=j7B-^C)SH{=3QX8u_h{S~)CGMyqyJ0rehkys(yZ$@JvTpnm`6`}gMxki4ftUa{d4k^{h+>yg8%uL8*7*H3#lfZfPRW36 zdyN(~_>I9CWyHE;5ZwTciJDBTrIU}$lfBm+bU@)1I5_ma%R%R5i@P~~vwXZdCJOH| z&X(_Wq_sZiDRVlUndEjq-1G?ti{7cj4TcWl2br9+wOg-%lLE|?rO1>+Xe zvc8TTVjOF9_4wNH~0_Qhy{9N%ct^`4@Bw?;pF`i6Go*Wr)o*cN~9JmNj zfpBn%5&)z`nXgotuS}JYG}lZf-CQxjQa#2>FWko5&(0C);Nk4#Yv&y7>gg;p6We92kHO35^cH;<1tO(NVbgsF>6UOez+gh5-mqM~9_{ zhoz%KGr~hMut8aozPZuJ!U&IwF#Co;qfS4y0hHW`m*kiia7q0><6dIFf)bnXmYDLD zoC%Pb3z1(4S0H2HixJAdMP)JKSIALnz>PK+t2Y;KG>$VLjJNBEM>OL7hzWtjgrK^F zU}8cDF(LF9>Jr0ild;vQQPrt2)v3|ImztCaVluiRIjkuqtT{ETH9f2&E379stS>)o zpdf6pAatlOWTY@?tT14r$bYiPce==XrU*4#gq$t%oGU`i7rQSMyOD}r$;B><#V$+5 zF3ZI(D-@hpi=EGZ$K`x6fa_YZ+gh>vTCvAk31Y3pYpuj*t;BDwBw(#1XsskecJluiw0R z^Y-oAckkZ4fB*i&hYue=e*E<5)925hzkK@;4tP1|^4Y9vZNcZHlgWal zhY6WGUHdAE=(*|W2TEUUDrP zR&C)4*;R%zx*F})nzb#2AdY0zTpdt)VT-|!PW3T-Zkx`VNR#-gF_8+k?bV-8HRM#c z&Y-j1x3RqN7(TV<;|i4@$w*-D{5+Auuh)!HZ~wCFnswV>BKpm4HXBmr~{+ciH~b=8B&Sh>cW|Sb19R6R zgsUuRjm0ZWou8`5cU*GTU)7I|8X< zAlm?>hj~DOyzHS64lEyMG!R>0obdu&i9+0IV&E)EaGoqBn3O2-maFg*)FIVcymfkz z1|vw532%!TZ>#xtTFiM{EFeu5&<0CbouzQOwREnnN{YQ+oTFKUlWiD~^mTFbclGph zMfw8Q|Btw#eE$YM?!G>rK|ZK3Utg@Rf3#mE&d&!Z-GUc6sE8gsk|Je@||eam2bqTt;DLY;51k9 zI;)9#tI39|sYa`5CadYDtC{92*;Y%rw&Z*}Qi1(Kq2qj!^L(-Ee2M#f31Yq!NhqFG$%SHGzyrT)bA_Oi0@54o-nvjv z>2@9Ld9=~)LN3=E>V0ypKkyNy()H{X@W5x&AMSr~k0PFzhX-D5u2$<*=#K#1u9v&K zZY_@ty#pTjJ1J}iqr)F4l`e-BN`Kh%d*lj(vC%I;x9g)@zyts5S73hQb~FtG;&#jd za6M4zl6-hO?wC5{4$$q2xC8Wu)dLUwkcW2?*zu6NiQM@V@myDb7pQbSyqh9C3%QpH zbi3Z8tmC9ufgMBFnBW_#_cLKS1nCeNmNBJqf?ak^3dj}D!Vamv@$N+ulF-BauXeO5;;?-j1 zSJRIfk~LIo4e(IZtNXO3-`oZW^{tn1r`nL25^1yfXdkv8xPBK`WMRP_bc&Yu8_2FfwS7MA3cfem(8k z1|)zF+-?jY2W~#GKX9dg`$?bYkDbGOd%iy#&isQ1Xf0-BWMgFHWMl-NWrUt(6g*vO37h|Fkg zW+WyHASx_7HXu75l@sTc7l|kcbt(3-DRVO}chsu1Rjsj7AX-Q^Sqj%%z=#%5q6J@r z1*FA_uiFmV=Oi%XE;Q;XGVUch;SD?w{sPK1Kk4%WzQ8pvG3_rk8zi$3CQrsF0+&7I zf{*zHwH3-uze}9@GEQp|uSZTYnM$-8PIB%_Ml~k~HKv3%q=Yx5pc_&!0QITZT_PG% ze}|^@h}O)A_MC|B{D{87h=JmW!IFrf(um<*M#`|GWtg!t%y=1kq6|G*7Cv1bI#V7p zTOK@L9=K5MPb&8%SNJSepcX5kI%JjG~kd{O){aTadMeyubfu4@L$>hy{AwXxFe(SP! zaoyKbO?-8s=hsk^0Do?1R5J8&I_t&3r=B{t;9u@0;aaR#Z$npp& z@CYmMh^X?2s`H3y@Q7)0i)nF-X@5stherZHmq$_$ETzXQtq+lw8Fd4B4Fd&DeYlpsingJKu91PUrGn#6h#Z*q9w{AWop6%4Z#{6fqFw&vnjOI0@`8C*JTUsao`_t z6$D}h5G8&S6DaY45*B`8+D~#eP*<~05CuB?O!4q(f}eG(*dG>q$wk+IWwv~C#t6~YM?l3 zurz9@ENY}Ia;zLXQI4Lf2%oM9ovjF&s|cE}2w14_Cspi*7XoUDfLtMXt`a=YS9q+I zyIm-Ay-?VB>s8;`sEWN@gS*<0a=kt8&QSFxsegNQ{K*FC#qCS~zo{pu{Qty| zfBox%gjrG~9_1nt4G`ff zjdhg)h;ZA*T_(aqHpWX4@2{2;qLUG>pNZDbqF|7THb@UQObs_m3NwifF~wfDPGe#UdIKm=bB*Xk! zq$F%gd{jzIY-$8PH9RFHFfG|HBgs2636+(E%u4jkOhRNOd1M3on3FwnQxFB|o&}lS z`C0xsIUzZD;dup^{6cI2Kv6_NQDi|;OhFMYuP7m_FeR-pJ-IMFp)ftZFg*^SAR{(E zGd4dfHa{mWKM$9mkIyeiDJaY+CWLs3y-QE_2$X;CSmm{3)xyp7MD2p9EzIEk%8SQIVh-wP{ zBE&3X^3;}U;^>xr=`qG2UPA0gM|fEtr?{sI_G8lOfpxf2LuLKb6GrqqS7;g=;gx7{ zXmyfykXL1fdGf>78Y-LBwt=hGsB-iP9mAIWPoT{zE7pT{bRCQ@4Cqk@#I?`TsEHz~ z!akeus+{M%=%Fk^Up>)C{l#gKyH$Cbt}=?=+IV2Tv*dhRG3e9Lu0bkYpDLxdz&xA zI~Tq-o~UP`xyDjoG5uh>l{T@82{9}{*7oY)x}W_}u;f8ivS_&LJ><&Qn;-m_zUB@K zUOJ~}8@w_4@{`1rZAuI3l1s*u;4y^IHOSON?~OOgmF0(DT-CT|6}r>v{I2Qo6?8&b z`;~|(ffu1tnxcn}6rFh8RcU}}Os*j8REv^t-)2c_%1U{}3z5e7?0HxlY1c!Jx%qei z-q=j9{UCpC=wVrjFWnLH?BzXa#F(gv9@3$Ap#F^!P)Yk%4ql*dQlsg{=kgr}U%#6n zT#KL8`*!ReKfl7f(l?2bYQw$^V;j9uMsFFrc!c&GNOZm+!)xG?E^}rp?aL;4Wf=VH zt2x1U{5M|E-yW?vct4T=IKW*E>AreA(=&o;;wf!mJq;Lo0(|Y}yGf4`Cr`h)ITgk? zaLvivc|s08fi~~-HI=3g`#8d;OP=EsdY?+5{BWOczSNzQe3dqLVrOwab}u`e3b}aq zz!TE#Pl&$G&jW&o7nF-gj(M_vdkpQUE^_S6dp{P#zG^D<`sM?gmt*H^m12iaI*>#m znHw=vrl;;#z7Y?b5*}?&h;O=d{V`+vsboXbapax)*AFL8Gr(|;7!dm-X=N6uZ@8~q z< zQ6QnSg$9mHuQ)jF-=R;^n2cLq^~HRyW+@6kuB4z_d|KkV$k~3QNPJr;%Z*Ag6{h89 z@>Gncge?e<^Yo!ll}|kWY%QypC#&eMeI!d5arlPEo=UgYAP~LP>ChJ|wr|&v+&Zi> z`%cKFh~`>-rYaTAS{T8v1MBC_?r?P!8Tsg+Y+{Pf=k|ZE3palg9!tGtHDzgh!uzBJ zES&#seRxiLIoR1dFVl8L+ampOF#6qum;D>-a~-oi?Tp7Chdq|PJS+RQBQvepl~?Bq z$@*<);Zn1^6#2?B`fV5Ca0^01=jvMV+wOY37NiCF>iXc@p7yln7LfG42em8h|sWqgJeB&wl z-O%mBZDDgdH(wUN8-95DAl>SnBhoeRM)c3p$X%b<_x`E{UrN}1x#r+oI}AUadIrZw z?Uz3lI6QTRM!(%)56p3&93yXOSc2?PF z{QNK&Oh7{MMYIrRZUGzU0q#6Lqk(jQ%g%rTU%R4M@LszS5Hq* zUtizAz`)SZ(8$Qh*x1;_#KhFp)XdDx+}zy4!ot$h(#p!p+S=O2#>N&n4oxnH7LK$=NVmT_>NQAnX-Xo*2snL${EemFrdyh;xZ80FRM0@&sK z)-mrl?sQi`L}igB66N!i62dBwQ}#lR^kDJd-lMvlwM%gZY&DhLEZWo2bmRaJF$ zbxlo8ZEbB`9k7{!SYKb?(9qD>*a%D|H#ax8w6wIgwzjpkwYRr-bO8HkI)PE;?(XiM zo}S*`-oC!R{{H@ffdODk&Ct-$@bK`+$OtgVJT^8qK0ZD%G4a26%<=CwVfMS{3}YA%xK8WXvV^14PtR&10mVjQJh>}+`OK= zFgIZlD+NgvZCNQ3ML}y7J_mJPH(e;wSkT*C#K%I^&s-$XL@?9U7SZ+gakcL81aEv{AU-`TJ|2yWz{Z7R zAGI=y&d zlys?Y_F~86#pba~4I>vDMlLjttTvCXbWAJ_&XOj`;|nX@8&}GH`YGnoW8Y`bU7x>j zdhyc!#Y@{4FKwQ`uzvpB>e&;EXWM3vHcd9~89ltE|KPIjy^C76S2S)ds@+;r{~>qf zs04j@{aAB%%Njz3etZ30hKGFkmqeeeGtcbTqWtls4+l*lW@VQ9sjPdDr`YAc zGWq{RXa3l-T~9vi^yS3mF~xT&2%){ zu9!LQuQ*-!)^B<)i}|3Bcrw{#KAYMl0$cc6af+s+U*bAPg<&tyt(=JE8~02mFZ8MqEyDI+>g`YeFu6g{SHY^TKIwkfXX

FO>->r-{q)~CQtNUnby3*Ap-c3?f*D?eP(TVHl8M`+Cn^QuzekyRJ7*)D% zzdvK4<^I0FhF-QPuf%Qp;q^evS+ zn^T~GQKdQ3<+z~gp1m{&g0{aKRo3Jq0i(*g#_h)D-tFzC#`an0qvq~)pslq3LF1#= z;kSTMDlP#w~wBU?b(k4+J$MHo=+U$ZGJvU zFZKBO)G-a%i|JDqs24Mg9?dUiSwbJbm}5_Xy`1MRK)qam5Sw3;V118Yl7;7BuNK8O zn*D!hYud9%e9uW57OL-Suf8q6`u$H};&m5bc7U0giG_s?C@TDs0~8*14^V;l4m*gI z3&hF;V&w&~@_|?cK`c^iEO2%fb#@jV4i*Cr786buGfox@E*5KURvT_sJ06e&n9YHg z9l##KVGrf9{QUj>0|Ej90|SGCf`WsCLqbAALqo&D!otJD(P%UVgTZ345fKrQ zk&)3cxY+olxWx4MlpK6oK|*FpVs=GRZdGzYeM(VtN=bWaSyyU#Zz^FRt#UZ6YBa5S zEUkJXt!6Tv}4QowdZahWh5_ z`bOZ7uBO_)=BlCAiqW>RvG%g@&a&~YvWf1p$=Lcg1)oVXUKaw7qJy zy?Ug*cDSQqu&a5XyRE;cv%j~yufMNvV4!bkxPN2}ND2*(PYqAbj7-mt&rDCwP0!3v z&n-+XkS0lFfN3&$j=VU(xJUwSWy%o$?~U=Vudi=hzI^4%mH(l&SAV#zDb7qE=y~m| zCI7s{@8|t59#d2badfQT=a#-L@ymvl|2)9og}gyBLtbnJHc+wZ^fq7VLR@IHBlosk z>+`!uD$}9342Qki{2ddl&!;E-o2{Ro4!?W)>Dl;xq0i5!&-i|RG0)rf`Q@V2v(K+qHH5yrzG&h5 z<;`V}wl8n5hd%rAZe`@iPJ?BJBJ#t7gyhJNWvwfbbx+5HzJ7ka;rsQ=`^~nmJD=Y@ z0~+h-348Wyj#Du`k3OJFpgJ=@PAmI7=2$9$hF5cf&iZ*Q<064pYJTDf`gt5XedPfS z&B+tR&v6jlN;-@ANru7a@xrN<^d6d1Ojn=dr57uYgw9WaK0Z&_fzwwVOVFI=WO|XP zsatiTV161b`y$COwdxd6a|UYtBH41WilJ|QMiBiX#gV?6aZYnqwD?6TLbsY}V}4e0 z@I{(mYBkHI=A7)+7wKV()u4Cta|$0{WJJ@~u1LGKWB43(?Rb85h6It=FxES`>+ywu^!t{Po1_59Vl(st0vH zJ|Y-6P-gd1RBrV1Prm}L<<%c-DO`Dt)|wA6SbC*)~|{$FV;!+EiCz< zUzOaZCrZz0Ee908Dt)L+l-*cZ4jFt^_B@p+zp1r?zWS>C{mvp$;oZVYe3rH91 zWZyIxrZt)pwJ$YVziG5wYBcX7U1~+YX>vT=WI3n3-dX&n8KKu?y+K;<9emT`m)2yv zsl73H^-XKoQj`5V(#Gh=H*L{}n;rM-T%M%6Po1dO?8K98IU~rxnWpyGg@gGD;9=Ft z*50fl+;j!+*V}dI0}OGJ^Xhp}O?REZ0i=ms=B3WJY^`o!Z+%m^4fP4inOb37ZQ^I0;H11;qUMg@Yj!#S{((qrngi9}FuX9w96jC8iW3 zsU9b#g_F_6?<%GwdDEnGrb!BbZZb6JG!?g`ly;<+cc)hLrB)86RgF*-Q_VO@J(y z6;0Fqz?bi$X}qIyY*#dmw%3lf*9~_z4t2K-_OuW5cJ=r7_7C*;4-F5Dj1G)ZMAOjZ z%<%Nw*v#z2?9BAs^z8if{K7PeJVmAe_y)`^E-oxBk#{xI@9aJTMAPN}?V{<(UyCNX z|MQ}W#+0%v^d?0#IeimN*LFpdI`My8G%@{)MUzq5cJI)cp{KK66w$;?5lv)@Xu_-? z`*TH;uO}dy9<0>til&TR(Il`dnt~9!qKWWNi6-Z?_r1wN<=*$w9RSgENq_XLFd&)+ z+({JCRP-l{riqawku`TSz9K$6kOD+g3Lu)Q{*Q~MiZjuFM>Jg#{f}t+=E@!-48ki40mFcL*8ju-YG{A_0M)j?F1P{JHlWl7)Y*Uv8&F#V3Tr?~ z4XCF9m9&4RhGu7HXK!!s;Nals=;-9+gwj^=I-w9;o*TmAUr)ikw~PM zm)GACP5wclejym2&`7VaIFIloH*~6VSh_nV9f3*p#wPnmBnCw$ghl})8F(Of9|vUa zaX3nX9uK7G6A}{>lai8>lao_YQc_b>)6&w?)6+9DGBPtWv$C?Xv$Jz@a&mKX^YZfY z^YaS|3Mg$uMMeLuHMGIOzTu(X(c$j#;r7Ylrm2zo=@H`e7;$>MVP>LvX0l^uYG7t& z{D0x9$UmNG+WWUMO)7i-N;DA-tAETi^)zj?{mU~=*PGk!0t0kxB>@s$KT!tguG&hp zZ&3#5MqkK&8=(8T89^DKi!U&s4A5PEbnD-EfbJj3H0_oNfKh4p#;v;2kiStT_)Vs1 zupT7$vhgp<1kLTE4=z9M{CkCn$JzD;7rV0O-nWjYE*7tW)rJlaOmpR8Wbw5|*2>(xcHcz1s za=b=mHp}}+;q;YVvgoa*@^o}#V_PKhQELGm=5h71KBm6+){f`X!B7(BS;@{3Y~AG1 zD9;zO7RlI`If5(Lnq|eWh}UaU+7WM3>@y;&uKGqH-rYPy7x_Mpmgd*3NPG53Qqk^V z+Cv07E&lZf=Ji3OwlTASQlQjt!T7` zUWS!fo{njr)Hh7>q)hT8jWcD8Lln#cm2D%m!|Sv{>$TBD9W+rFLo`I!>7r{*!^*8f z3eEj94G?$(k2n)#oMT|DOJIa+7|uI7$v-wZI6MjG6q95Vk>nB{hxLt)^Ty-7vyuX{ z;v#`3{V#9%#N@>Ew5*(*g4EQ~m}FvLMz>F1i*J69Z~l;X{)lhENKoNWY}sH+-B>Dd zI<m?Te3ktZo7j9sP{mnJV>TfBbb+TELX@7=g|ePekU zaC87%9mtDhz}{g3fHXJ0L>j%Y+OfFUOd?a5CpS-#nkPw3Lkmsa3r!ufO$|d04b63J zwN?E!730n2Qv+oaW2IALrE}vY^Si7}mMo1IEexj3x1;CUu+uG(lg-f+P2U-+k8Z1u zsx8Abl?AmIJ9U@X_WVqDiA{H{)%dK%>K%(aPpr0{Sv}k~-@K{+;F882vdWclh52Tw zQG!@+p>S)uU`;GP0RyeT@|8z^16mddEsKJd#_*>VE2h-yrsNtXMwrG1SwsgI15KM4 zplK7KiuE`b=pgBBD~7Na^RW|*vjQhtaVJ`FC0cR{tp9}B*$u}$ZjD6G8P5t@GxtEm;f|c&jKj2o|R)g`$G#NK`CzEi4(f>?c)wn@nMm(#A@+bIs>~gUAfP~2lKMfm+^WPeqZ<)k7O`0dE1qP;?H(h_VP3+mFlkx*xbrCe?q*V zoSV;7*C_#QNUQ(2%G%Z)-#FAe!SrY(_DagL?BMNfCDzW*hfuv=-$yUVeVvbqc-||?QL2|zoHJg`}fD7GUrZ~l{~dZPNy&oJM~CD zYy9-U_UwWz^OZI@Eg3#9!$BRMC~ORZ z>eC!!zT`2No>g-`RcdaO1ir4tkDYhgnw1uhuO3-I?X1j`uI|L7y`DL27*K6f5$m6d zlTJyZI!=4@c5EC**w;9gzhF)`gvPfW6-3LYyvblT!=DcewgZM5$F$7oQX=H5Pj9@J6>rVTx(20U?GvGrV&I@- zw~T#2ce`VJUwY6DFWbtG?layICouWbHQ)hDh&q}s+meM%>8WEQt8lFSqfZHpSA!GO zyB&|K!xF!ks))s0f6Vro|Fo!34D|JvxcvI$GmZANO#A4PVgfuJ&AWw!Nk$pwJjhbx`S)`l`0SDJgm1`T9quc!6md8tdrcD%t=k zd1)Um4km9_T|N(EeFnPy8(gjohn}A|_{r2*2ky!_AuT`i#6OHb*v=@0&`@ZvZN#Rh z$!j5Xy!4|BY}MKBsVbd1$|_G#=gq?t!lYS9;_Fb5+tw{tzRZ^m&|>NZw@>%?w!Pe! z!~Vz^j7t7+^vmh!s8{^sM_BG`*gegzj18u7o^f89wDgn~8PK&v;`83$rh&R5o2545 z_%&5^opkt#N8`P3SR!k zj=<}EDk8%gRr(IZzgUE@MzUIfqGpt)d*qmeAM)Mj8koUjy{=jND~<%~v}MLrL@gN+ zOu5dluE4YkM5|AC9>iGToGlB({0|o$>U< zvH&{JdMv^oTLNfFeO0GKU34Ljx{dHYc)<$psZATh(??I_kPM+Pp)m~VPh&6EV`b@x zM_S^Xp4eOi=_RRTroME|6~=cxNG=hQ<5caB6$RjHUsJ`tOB|Mc1EdLU5L4y#Ai1(u zY0Xt6>ydUlc_vAYiZ;(=nf3&qBqfkX0aQ7f76_i*L zXL3EB)ElmbNFGC?sD|J=jdH9op&DZ{L5~0mswT;{BDv@-g3i_k8C|K%1u_tWl)}g< zdP43f)lS#Caf{+~L5l7c5P#Z`OGuo|OEySBBl{mhmbSBB{0h6a#Fq5pi5d{NZ65Cu z+uGJ&G|MMVMaYb?MFvc{)#DVeEEzfQdGfoP4EYB>w%)P|#KVAQH5QiBSO4@kz#XPS zT4BNs0jq;*2a+`%`f5&UmfF?0c6wV)%z=8kTLJ8*H<0g%i3I?zF`#HRK4AlIyr1G* z4#o0OVh&N>L)7I;cd0fCbs&`_6b{J#XuXn}x0TNq$JQ|?{!2S#`VeXEHcE=Q(mg-r z*DqxI&8W!eJKw&FBY*ewUv*&L!~UBye`gdvI`@9hLx6e&X#xlrR)>C?7CzetVE<)* z`X&&{wrtJBF0Alubq7oak%7(x8yRS0mq1I|#%$ZhF7Z+T22?7vW_jdxWHv!rW1J=+TS5 z2r0`EjMjoBz_>ui=!3~fjN!42zUYi>0gYQCjov|xzu1Y)=oZ$Pji7-54?qDJfB_dU zj^tR5=6H_in2zeWj_lZu?)Z-I7?1KekMvlN_IQu@n2-9nkNnt={`ijo8IS@wkOWzf z26>POnUD&(kPO+74*8G}8IclMj}Nf`4-f$unUNZ~ksR5P9{G_V8ImG7k|bG@CV7%5 znUX5Gk}TPhF8Pu$8UB+pIg>P5lQwyiIGK|=xsyEElRo*AKpB)mIg~_Mlty`!EJ+dw zumDWilur4SP#Kj{Ih9mdl~#F`Secbtxs_bmm0tOkU>TNTIhJHumS%aDXqlF3xt46% zmTvi$a2c0!IhS-e)}n1&gchM9+nStg%>m{j7J z*8!P}*(8!VnaWX_5rmn9IhdO1hnC5Vo%xx(5t{oFnxwfTr|BH2DVjjCnygtHuGuQ4 zIhnBu9JTqHzlfVka+`J7n6#NCys4Yy5uC!gCO&eU$eEnVxtz?|oX+{23{sp&LY!YR zn~O=Ex`Cb2{@EScxt*HPoxtgv*BPGPxmn;@p09$QYGIv;d7iMTp4{Y~@TrRPS&W?_ zpXY&}vr(Ttqo4elhW}YK_xYQ~7@(zTpt*^l!Z@JgS)dB)D*pMP#v!37#-QycQo)_w%ExMvJ${j5FBqz#^H!2!C zTBAJbquPO)nW&)_`YO6eiAU-e*l3??(T33Bq;MgmNt&HY>WRA9qd+Q{7c-oyl(TBc+QgM9*hFp$geE}ornG7%pE|3ns(6r^pOG4wE`cFj zs;Y&0ACu}OVu*Nh3aF=ntIqnS#mcMITB~~~d7w(Iqo}Qyif%=btZizi@?oXyww|%- zsGm3=%WA2kSRd=!s%t2&Oq!>0$P{_%gpByCHR!CCWvFv1tMeMKy4r`T8jQg@tP9Gf zUU6;*d#=ekuP-sGM|f^=im&)Ons6GfPWZ5ISg)u0te@zy=K2^>CZ-*0vTTT_O;-M< z4J(RpxTn?Hr+hfE49l!Lh#?Xir|KGqTKXb$=y)_+vp6WUHS>m?_<}(jvD*Y?_o3?7Zwp)9)Z2Puh>$Y&) zwF5D?bX&G|o40yPwsmW_a=W*H8@PfCw|_ghhI_b(o4AU*xQyGli#rNd`yI+ku-jUB z@mj7&i;a%R7&YsM=r*!xF}0xTuQTYbA8Q%4ny+B7x)=K%p*yEAIHl=|9PesbqZ=89 z!MW^e6z*n&-|8Cry0aK_v6P#%rmMS8riZ2Ltu&})_xicQ8@bZE8OVF7sQz2AuQ7xF zsP6`vQBHfs$03wySurn ztv4vU<~xX|E3mqox<0GF)jJgD+NI3{-KD$u-mV4dcb)s zhndR1U<}3sTg8t2$aLJtCxf3N+_YR$$&j4Mn*5oVoIsMC8A2STpPY-ET*{_gpPlT< zRjZAoOeCRv%CH>EvOLSQT+6n6%eb7&y1dK0+{?cF%fKAW!aU5xT+E)aa13`f6O1fE z*e1+u%+MUonV~Si@@7^bTR85A1w37;PP-#ZSsCd;K>4(n~VXv!%?O$6BrD0de32 zfiN`)BQ-~((uvtGr{y%NXImW2(fpKK82!;9Jwv3YLbkFsx#D`Z#n4bq5EC;7)nEoK zzy~RmaAl@7um?jsl+oHeT0@gV2B&6d;MMsI9T-$vVrCGxx79k7)53HZVzjLo!4|^|aVgEt!c9*OliI)CPNx2y5Y3I-4`STV86b7?54}y@@^srE z{oAk26uUhT)ll8~kleG~-39R61)$pYl-~G+-q{@?m+d4g%K@+YI zr}fr}O%Nr1;CKz$b?`8f%`hc?-wZtlE*{jF(9@5t<3krAF;RUxte{PuteJ6=t zFqJSYU4H0eX6Fu`=U?3`WG?Ave%WT`Ft|c7+bj!dE_=Oz(s5oL+YAYzM|-H}(<1%T z9Bv({Zd;~q>P{W&E4|>hUV1PM>!tqUVkUbOL+Xld=l^mr#12A%AlFQ;<=o8b!~WB@ zl3J=z2AO{7+`Q@9zU|x|9k1Q(;2!Sc?j(pk?&f~(=$;-jMB(Y)?(Y8X@E-5-KJWBi z@AiK0_@3|jzVH0r@4I}gRH|;N{FtqrhXqer)bYvzFRhhjy?LSVyRoaQ?C;Bw#SDC> z2tTX1Yw?>Z@CWZ0A`I|%%E;iG{;m-`u6{XXO)STi+^l`^rx3r0f?6ifO23=hvt@zv zF;Avwyzx5^@*Z#V6n~2rAM@OcsbHG1gYomA9P*2|6Pl{SO02#8YpanQyh8uUF0b)H zKkz(H^Bw#3u7UHG92l`7uL7GJTR-$BYOJwar{IdYU97r;th3mCn|aKwX@A0(2*Ew? zq(9unUmS0Kyu_Xwc|OngL#xLWo59TsuRF`Y<15NVd-6)}z)Z`;K0&}=9Qp9(u#Mk{ zXNvgKy7-NE#c9m;lxfDai?SLl6{J7BNiX`AAHw6t@zo^yOZ%!<&xi%vulg&rbhulm^Gxbi>$^iThVo49>zwuhVlf_wk<-?#wrPvAdD1q~iVXpmq+ zh7BD)gcwocM2ZzHE_^u9;zo`gJ$~#s5F<#EB~6}0nUbPNmMvYrgc(!jOqw-q-o%+x z=T4qIef|V0vcOQHMU566c(i~^qAZdAQyTSX%cf1KO2wLWsnDuJxmpbxHl|gh0?XC} zo3m@#scgM6efw1|)U!^N(%nin>s7mPXJR$`lyA?pfs<;zdv$5yz*`$PMyyxwVXj~O zs`a{8@a4XVC-@c1`=S;JK@DKL^a5cHPyjr?Yn6S$XT^#&rUoep5ACsn)~eh1(shPWnCJ0BryZ@?F6TCgkq z@)NH%q;fROy&Bnb(!M3BGf_tYX{^%1|BxgywA%)3i%TYNgigupnyj+MA2BPlyY`p_ z6EzG!l>V_!2{&BMLNrIz(oMO-WUj;zscbT>65$*&QAHPJv{6SD)lfv!XjHONBy)@u z(Ed`pi@-qKO5)7ny%)HAo+s)*xZ!G1nM3B=xV{ zWIJ!rRpa#4FiqtIPr^{o9JNjE1htGz*2*)H&`-DJwp(w%1vgxA$0bi!a;+pTSfAAW z&fIewW%u3Ppxidz-sqJ#Uw!xGw_kt%<<{PD1rCbfTixBsV1Uy_cwwIKeN^Fs`E$5p zi!a7FV~z8b_}h*X=F-uRH~tArlGz;jxR7Dg_GFh|hB;=LXQsJkn{UQBXPtNExo4k$ z{suZ|p@$~AXrqrtI%%bsX1ZyopN2YWsi&s8YOAltI%}=B=2|BY>L>`4ce+N}2UYYL zGKE0SPWzLwi5sIJSu|Fg?S8-Rh2*-?o(YY-$p$>|lYM~XY#9&{+oi7)zX=UW&S7cs zw|R@3@s`w<+b792KHP4e4lk&hpY|5$>&*Yb9Fn|Khh*-UWFQ1`fk+44AXQj*y(hm} zB3-P*|3<@dkd53Pulnvglw3b*H}I_@ENDKwTa< zVL$M(a3Jmrit<|0Jl}jx6v$&<^*kU76A}l9IhA@YFnZz2zk1SeXSZ}$QuKl5QsdE&2MM~;Y(DglN6jnAIC!*>|}R5 z3BIj)D%_$DQRhie@{SMZKxG!+SP;8SPj!pz9vWR&N`aJ;d(M-I4@&+Kig);c3a?BZ z+m0xM8S+Mz%*&k_^&!kUP+|*+IGZ$Ka=ae^adsc%9VH7l%~DkJnyR3tHL>YPfizE& zluVp1+ldfa@X~>RtVt(7$u?286P?2><}npG5L~KpoEi*78Nt@QcUBT6wp^V!vl)j; zR@zwN}<~wT9Nqmej?PV zERMqI^4Gqx~AZ+dxymE$qBo|O3AP{Jp7RnJM~qDHLMk6 zNmv#Zex)OaqCEfVqX1vUN{Mll6;NV#sfcUr1}(fc{<4oW*{uxHsZ4ZSr#%V#Vzn!%AtG}4I+uKd~aN-4lA$7AO13ldx6*d9vRF> zA+nc`LS>?`nVDjq^4a``*Bl2q!bTnnp0!*QBa?Z>>}|5ynA%xBG!M#B?(u!MjNJsE zm=j+k1rvvof+f4S&Sx$P-iqSpN3%4~U?%dUEA8bmlrzhrj!I$+Fy}<$`O+v}brT!? z<`1*F%p1mau64a@UTavrzn;nQSnxsE*>a8iGxk~W8@ZkK@*t}4FMxX?;A9tZ!jKyS zK8IJhoDy`i?WAxZ5~+`_E^M;nJ#Q(u%RFuV<7BN4{p$2E(FGKO6SA5F=OB^S$`0P! zCADi^T5ns|K+aGGo&@+fX<}yvs?y4` zIIC3S-j(ioZEIV=iX`3=&&j(J$4rJd&?V$^c&Di+yM(I(RLH+CI%)Yj02N)4+ z2jWQ$(o$w);(AvFU%1CzZh-ZCvSMDiP}R!M*!6PXW6n3lbxL=-4%YD$KW@Y)JG{V} z_mO$~YRrdQ2Yad;;_KE4#RVJr=E44%52Tkk@eo3H0XLU%5;VQ(Q9ksF-;jllL<8M* z(#n2@9Fot~J<;#^HVNV_+di$j)T7>#$q&Dmm>4?wGC#gsKv(IPt7$LH00U1hALY~c zTj%Yb{q1+(>*q&*<3x^#t}a`nd5fE}g{tk{4tXdm= zK%~7P9%T|dfN?lNV5j2(y=x1LR{EN-Vj)oKH|x8(!15fr%0OA_AgDS%eKR4JJ0N0; zu9kqFm-xLmIxh1$qUOsXZyG&t`YF>3K}3ML(mE^bNt_{iK@o~Ql7p?hA)J((y4*2A zy z*Fm`siW|g3tugzAG+e_SOuszTL*3FS4icyCF{JKMy`xgLXJeg88btrXKLJa`9&9IV zQ$0W|tIVmLU6LEHOC3Damz6px;DI;*`a^~DnuVezDJ%%oIvw1J344+|!)Yo|G>9EU zqX}{yLi(Fuk~`PwHk~qvTWq!s1inlJpW?B&r%SHRkBR9Y}lOwZPWX51}MAfSv zVH`qd+&H82BP5h9QUt_|@}N(wiB>elLRzWd%P3(aF4`i+EKI^}>cv2uo1x37PL!&= z|xG4OcT>QD|{!y%m${c>IKRqA$&k&k7QuN-nJ}2K9LsKjmc^6q>u_ zkjD&7{D2Ssa_JEUQOuG-%fwuZzg!PFSufN4OUA@asT>W*w3fq!mMAgIT+z(Aq?0XC z6=q=;DT$2Vj7#3E%hGhqVZqC50THf|OXNIG=WI*G*cEVjkU5!_?O4ub0nc{94QKhy zXz8%>&=YLQ&G*d8;^Z>rh?M}rH8rUg%9KwxsSx;x%`9mX+h|SvM42!-&DXR|SV>LI ztd9Te8XTDo2kn#vO%?heO?bf;2muueVNcXhmId9+Jju_fymCAU|5QWbbHI9`i zh>>_vm1qbUmC+it(HnIL8pY9x(9wv{2#62}APv$TCDJ10h#oc4Bvn!%UD77qh#$>S zCzbxvDW%dXolzFe8DO!E|8&m%@DN?&&N0yt0xe7f<&zVY&B9R8H`&svOqtjumf7^r zHBA~VZI&x>&k}`9(PS7jO%pE(&i?pNx-`#03C{}M5$Oa_Kp9XhbyN%$)bjuk$DGbc z4b%zUO%e?f0I3!{z0GX#kV4^41i4IFQI|KR7&4s@E~V3>`A$5+(^DnR?(~>B5foCr zlMHQB(%8^)QO{@5(^zegG1U%HdDLTFlrHrY%K%Ipsg?0W6gV-?;XKe!rI=QsRXHuy zQ}NJBjZRxt)g7r;KJ}R*=@W1*76xV3`V5y$c@jFwRqE{0cV$*Y-qXR;3S^4OXKhSDfWprs+$Lu~`?f z%$-F_qBY11?b)P#(7k*Yqh%SIg-)gQSE;4is3L{+p#6v zvNhYYMccGRR_=P_xE|H5T+#iyh`b4wb079$In3Ry9b{d6io`;4 zl)*hO$}3!(oS%27pAc%>n`_+b-3kBsKZ}Cg;xOJvIUt);E8w*WA5x|z${Vu6pcKlt z5E`K*Lb?X>t8=4W-{9R5)5rG%ALu*cAM9el!laA(;hGR8VlpOVk|?xUCJe@j0G_3BN~d!wM@Mwx z{u8*As$*>GW1mww=?deq5vhU_Kgz|o+(N}~TqydXr;aNpbpqsfT)vCi+btHUhDsdP zxv4-d0Bu@6NLFKkN-5!kiImc0lj`DBc3?*W$Ghd^uc3mH@~93jNtvQ4o5Cq^8!Ddi zDII(X_anQvc`6-5Dy3p7r}|}>ld2KiAwSCH$0=sj;;3Ctxk@+%025=z!MksIG3`y1 zcnhoQAuHmUn=>RRCSKjxQ69F+BX_ntaMEH2CMYZhr||x1y_=gy=*ljIBIm-|=k+x! zH@?98Wr@UEEHh{<@-k)M17I4wtbEig&hjkK(m>H-=Z_N}@^URg>*$3JWbjfS2nNO6 zGH9Ta=eV*i_yel#`e@jq5H~3;9KdXMlPLBYEQIfiUc(GdZ74PHHB(4{wl!xdK?4W>Pcg}|8l!5b1MWBCxfILPWyq;889K`)c}fFtw=!MEGih^)(jzFfz+A5^FM8)3JfTG>=s@7n`PU zZY{??y+HV}sK_xsYqFwHu?Oqx`Wm$+D>Y9W?Ec&7Y?UhP8HzPN3u`Akv?-gl8M?B8 z$g_qch>UBfe)_#HOmY9jYE@ z*0*7+hS55@Ys)T#fIi24qfO>zSd_$WIX8DC!~7k?IPR^p8R9pCH%`bvm=ieIjUHz% zu^j$4qq7~POD*NQr=Bx8;ToS)w27L_{<-#sI0|-gYs;OB%WaO6o)_;wkjuH@KDm$% zWT#fTm+OfdC-O;DAD71NE)V6Imf$saLoUzh*x6|+r)g+%k z3~sJ7|90n@D_~-CA?Kk;6n4V?qV_Z&BxTojCJ!cU|2tJ6_9~on)FD6a`*$ywcYqhH zW>564TXgml@iyYQ{S(FU$=+Xvzx%uN!}%WmiwO)Lp7q;!g+qhAMlH)B^y`$5KxEI~e12#tw7@7dE_+jI=p{jLQ=oi)$o&a&*DFIfk1Y&p@wxJ*Dze>se=aPX zX@KVmInF_8*KZpH=2h&$)&)Xj#~W@hLI-Lc+FQctX+i`Zcbv~cn5!amPIqkVD@h#t zL2~!GhxaEl#<#CG(Sa&^XP(V-`gH@tqGzHp>_PylLp5Z>7GJ)955w49ctwx$rcyopSlk=X5%(eC#CAk?pvT?6 zih3wqC|^YK$&V_=X+_narXMe#cD%clxV$1K7{QZz3}+&n)#o#j=Zg3k$L^u}`z z8)nRHXw<~HrAElHMk1VYZ7c(Bl)USoV_ih{F!xB_MZtU3b zp~#a6du5b3CgR9{4OQurf#{;jkU1em{D`vUzn2nK!i;J3DAJ@#mojbY^eNP+Qm0a_ zYV|7CtXj8n?f&ZZE7-7N#}2JijV#)u4MnEKXjUv5nqMupt!uYw3O?uV^3^JX(>sYW z2<`3r6e!=nf&UFIZ1^$c$dV^hu59@-=FE^0Yqr|>E@!Sj1nT=bMsDZSP|*}sJ=q7Q z#baW-4qX?vY}&4O^X~2YH}K%XhnGD|e5nuAZEd?w@oDjK)gP5dPwO)w^wiATUe{gy zJNWS8$CEE_{yh5h>esVx@BTgf`10q|uW$c8{`~s)^Y8EfKY#%WI3R%q8h9Xr2`acC zgAF?PAcPT0IH6<(SU8b|85)&g0T^ni6o(x)#i2wbBK0AKDTarlishL&6^m5G2;+q< z+IZuN{vmD^qKGHf_|J?n{a9j;M+FHYi$iXxWNV~{+; z2PIThCZ*+;Vyc#9#nw}0TBe6^3y6l)kP8ukYmi}txe8)yA z>$PO|YAUzI8Y?Z9;ClIMsEukX?6&EmX(h49CL5@{?Z%5Pt?-`vF0B3fn^w3z;%nyq zo&xjhtDu0^>aLo94ht>3#N``m#AT*hroI;MD{jTYVoPn8?@k-v#Fv_UGQE=$3~9Q@ zIb83W9xrV2qV7gaF}Ww#TCKh+v-~NxB^x|2%J%B|FVab01rpOuL-LQ)QA_Q#L{nRR zHP%^cy*1Zed!04ZUw<98)ntn;^+aA*{ZQI$uYLB@ZNoh`-Bj0oH{N;YZT8u6>-{(2 zfeSu3;e{LCwbF_2c<;a&Pibz#&3-&N&$qIhFXfYa+p1;(Kb+~jVOFZ_yOk{vLQV>%nhzT`V0Im8Y!(BCv}M zbl!M)m_jEmD~(pXA#ncp!Ef1YW4`+x8 zhs!hVl9sXRCG=XEOI!M~n8rLNGLxyyWiqpw&U_{`qbbd4QnQ-Yye2lYsm*P2vzy-h zCOE^1AeDHBILRr^ST;hPtT-n-;#|*m4s;NnC`FyY>w4F7Y(%6>Rmx{z;|96(^&f?W6b}wU~tW8e(SBrK9v`BF+Rb!i;(Zp1;2%*hLam$g1FtrZ4QOQqf zI}+gP0}Z7J1SQ;%5aS|Oxv|M@S3NS2vf7n8r};r}b%Pt?R-_m6Jj*`af)JXJ)(ISm z%{(6x5pqIDF;>aQX=M@z^J1sF->v6guhQ4Ux;8KVd_9FeSj%6^(h0seneTZ6!(F@n zqz+U_uuL4H(xe=gp@eaXT2Cf{7weShh}94;mgTSr_}%p6YCB zk|RtTu5LuMQ5Gnd10jnjZ=(*XfB_=NY-Ti9!wiA3iD(&IjoC!EyA)~6IgN5yp?m?X zb-2h!OpF>4_c_8WQSmv};t`70*e$hbru07wt?0eFC7_CqtfDEL-;v~bG}Qi0jSplohBmhV#BUj~OFBznoznKEy;gKX zdIA%=sQS-2jq_4&Owqh37dso#hGLJxYO_X|A&8E3P+{%tz2aukPd<12&~(#x*yJCW z@WDT-VWBZl0^agA2qiYsivsA|LR>9CO)a!;9<96Gm`{6<5r>3&Nw9Xxtzw=Xi!NPVjvT?c)XUZ_CeV za)1MdRy$uFx=g;2iO`%%4Uve%4MLNN6WxnWe>&8oF7=tA3FJ68i-kNMb8is# z)N5zs7X_p|3GuQi>l4a0daJ*-2vBeX+tkZ)K6v;&U6+=3@KzC;MSSU7u!$f==oAx%RtU0H6q?&dMc+fHLip{S4H}=6 zQN{5|#9@6JXXO-OAKrD1R2ScHWjuvy^~E+7~7 zopv2u1UBFs_F?xeMIGLt`ssyWa6(^|TM~NUAWk7$%;8Smg0uNy3U=amYy@r0hLwrg zDDGdx$&_y?SSrd|C}IK)?jXeVo=qg#L1b9&)frpi;S=71SQQo!vK18m6`Y0OrBOtz z1I)R+AZ{gjpL$jv4U9;z$Z#HTZ-`I@J?Wmn2ez zF7{MD-qu1m;ZB&COnRICl?6n|;GGHJRPdBKexyxxVNa2uN;1XzxuNtWArkI{Qj(Ob z0A(G-7>OwaOr+PLjEQ9(Xj=aJXYuT;^sLhd+(RLzbp$Zqjvp;di_wZ?uzFkY;Jp=4#$1 zZsw+L?j~>crf>cxa0aJv4kvLIr*R%9awey8E+=y~r!UP2962Xe2vaFhXI5C}YDQ;d z@DDKEPIpRYzhF-4=t=NQkH&BjCK-r!az*LQN+W&Cc&-t7t`2*~(gU^6bwXW&q*1h3 z#-@B{e)cC>lwKm8=b&^DF@dMQ@F#g1QGt#p8Kq}|tS4C9OCtFY`xsFx0VpTwOa|df zSN^!&87YYBa8e#gXjl*mhni63IF1ta(#oKWf-21xF_4F5kruVieDE1uE z7-5VUkx+{Qk|MQ?0Ws)#-VqDsrytSFf-sSg`q9t)XdqeXjS3IdRS*&Zl8D+24CM*F zJgFRU43%Oj3B^tT0UdVEXnz<@4%Hly(vNwX5t;%isw_|MpeUTU5YWYp8Uc|Im1yRC zOq#yX<2(`M)Mu3DP>+_7&p^zf(kITSY0wOk!59#TR!X^83!@g2jA~AvX6cm{3Y!|w zq*9$2NspB(Dx4C?;ULc4@Xf5=YT?*w)9C8p@G9N-4c-7Nt_luC{OYhCE3(>6{@J`u zvNo%;K5N`8E3@wEv_h-3N^7j1=nwhmk}7GNYDwcrDSSri7vWKeUMiNtsutZdtQ$sr4PLND~N_qyE?_0^3IkxDiO)i zlq&5094US(kOgk!j5$5hG>pJKj;pvgeC*^dhh3?DKlI_r%s(5OQ z)5@;ZiteBW?CCry2)*g!%56U(Z!I})UobDuI$0S(FA62E_4=pt78CV8Z}zqYg^q0N zZqxL3ugiw-^`0;1iqrOTulbtC`aaY6w(o(GFZ$N6{oXJB=CA(lFaP$h|Nbuk2e1GS zFaZ~^0Uz-5kl~NHW>7%oi6zAXb09TR9Em}jVLb-|V}@<|lSKY4)~~(S2e;HFW-vFs z*ijCYPy$v%z8@X(QzBACrr`wzQ(#4rCni_!mQpRHQ5020AYlXZR!YTL zmaSV`fkarE2M$Zc2Kyrss>PAf6c&zGO<t4 zBlaPrHKb^I#E#`xf8k%JDe{0B#fEj*2AZ%Fz6Uc8S$!>7?H$^KrE?YI7iBioHUGw_ z4e~b|AJcI1Zjl#)x$|vB7c>*$Ohp(L6LfuXWk}0q$mCVt){&gbp~>Xgc3bL2-qp6<`Pbc%9_ZO< z;a%Om>D#|_xV;p;$ci5ka(=<&-T9FHf z{AHytzXNQU+-Qh3IM z$>A0EpYi=4mecV7T9*__kF1P<{n|M`$7HcW)02{OhCd!%sy zUZG=OreU9nPhe1;gp>)oj5AX!*PB9Uq9`2PO~A02sj*k}C79Qikmsb5_q9vvMijn8 zlGn6|WrU95wH1@#7RI9r7e@X|Ld6|I)Tm`38V)1_|MVC_lpZz&GRKCRhsPRjVXe=! zqXnBX>r*X5y0F`@W@K6&Hv3WXRJ8wkPjz8XVdAx;`c7BkqQBz-UPl*hAtpL{oDcbK zxBI6589}D|r!Nx_cG+MU!ki5P8+r$igYlI^8&nB-TC-!5`xvbYqc`6APrGC#JYTj8 zhc>=NGd8hfllBQ)rkNSFNbDm(vIbvvp<}YJU_@NY>r-CSBV$|ncznEH8RA(0;lDe2 zANON9p1dmaMlnVsmlNfs**ug3vMTp`Yv7|t8lsFrd1x`ZX@=IeOS+*cBr=ZJ&+B_2 z&ZEVL_0*I6*$2Eb)&3rp#Rh8X!x1mMv2$ct4tqa0 z;kj=}@?=R-7FGKFS&|g(5BUcO{=73WQ?`DL5o3etpNZ=} zP3pCZ*}mE_ zVnvG=F=o`b{*hxxj~_vX6giS)Ns}j0rc}9-WlNVYVaAj>lV(kuH*x0Fxszv4pFe>H z6*`n?QKLtZCRMtWX;Y_9p+=QDm1^$-xctBIMh5Vd26$4@dl)IN{^Qk?&@fySOjq zf1EKRwyb#Z-pQObiyUpS^v2euQKz=Knxf~5tr_B08e6o&(3Kgpwte|G#^S|2B2OMX z_u%2peKV&k9pY)~pRWVYE}MJV#Gpy@25k3vbnD-hcgI`aczTJb;k#Gwm;L(f4$)^P zFW;yB{K(4rn{B%QFCwtO0S~K>wCH*=Fg)n0yKlY;x1x+U(7+o{Lfhh#kV5><%TGb< zJbW*~*Gl{lB-lE%5JM3?EYHOh8)VMK1%U&R#SlB2@jTOZT&=|yNn~%x9D&qp$R2$> z?nK6JG>t(Lfov|sB4K1Q%P50P(lh5C8&SnEqiQm^7sVqkLK}A^^EM*)V^YKA*tE{g zl+eUZ&-}tWjmkOIq;04tr7RRj5VgbdPd%{&)64x9of6V0r8F|mI1j~CQ|UG}^s+u< za}-HR%~KS-P5D$ZFia&yFHfeoSKW2lZP(p**PT_~ zqRa#pMg7G5QN(#ggK||t)$Hg?RQXj+RWrpyxIRl+O^Q%PA@&qPi7)imUmTl^^uaw* z)Xq|m|9uq0BpVIc%2NLn_0@&z%uu(C6^*%7iwhlD;(~D=^x%OlKDb{KS)DOwknau9 zK?sG`cavsedE%w{u2D{&MgC39Dgg(0){I@XkIqH;>{}zm+XP%@ss24KnJGdC zo|5v28)uYKy>&ae!?|HCd+Jd!Pdjx4QSSWe%6l`L%ESo|lHjv5S6X++d8f%~otbd(2+@uwB+taNF%}{%!54|Nc?x z*`E6Qrjffk&xm7QGVnZ4#cgos`S1U&{rv|O00wY6Tx-h!-$bMKA?0WUbl?NEf3Mx>9MA2XgSz^AmoUmUcJlP0Q7(*G(kcKt1;SF(^ zLmlprhduP+4}lm&Ar6sKx`;sYz5L( zNeVt;5G(?vi$g&}FB&q2flM(h9;ib##u!JE$N&+xQbiQmn2;zIq$2`>1SQV#4>SN0 zAwGbF73s)Fg}BjHaBN5-#ds$=Zt*2_w4)a%>BWC!GK#gz<0A=6g#=b zKB7^NfuJNv=*UVmC{iJQ90)7N@Jf&v5|N0&L@L*)Mq3fGJHY&;M9#RAGCCxgHfd%W zk7*KMR^yq1q^7M{sSsms#Ep)0$TsB|PKg+@8h9*;8wu%wP`qQ1qWp&;3!+9^BE*fl zWQZ{5Nv1K}A`b492^!ewMo~~wpjM0`91rRcH)gYxbr|UW6#@E>DE1QqP8REsSQtUlD**ExDz}Hl6k)$&Cs7SOpRy33~r7T6rR=H!* zWNP*xj@5@`RY}#h)^@ISHOO5D0@Hz5QLc1_gkAo7fmh0&lAcjzE^e7?TR|o_xR@2A zbr;gvI#6N@h;Zs~uV_k0#MQZ<%xQB8vfG17cHczy)Cgo)f)bAbt;zb!l}M3*g3r6rk0C zro^jR${DuO@gD_gXI^p%14PKe$mc+l5B?zwG_m!4&35*)p&jjKmn<)C{6{Zh-OrrT zny=lgOJUJq#R8mo+V9(|u>+0m!lt_bHx2|su#F*a=jDv;?y)L_jfp8o5#I01=|XiK zZ@z51F58ytIl%aiZ;ShTIh8>vZn0PE*5$-#NJusKQg3KeyWsd9cCl%lYgdb0+9fyn z$x;5b#qj$e*iQJu^)YZ|vm4m6e$l+aE&guPPJG;)z_}H}9dmLQfZ#8;cg!`;nQaHX z=OTyrXBhjjlOQ8&z$Hs$57RM{>FlHUFj{iHw&bAaEl`ZzQU;1r1My@DfB_e|3m_v{??K_Kms%fB?fU%s$J4AkPzMR@s*9y{u7J7AySt(C9Qti>24qSkOqJK@h|KgDf$+Ij))E4 za3K_0AdKX%_X;BW`0tRiET?{N0(AGRAgHQ*}2dLaVi?2QgW>P|woaK)Bt#iE$6(!5Cs2LcAQhzQYY zqM&c|^6JVILe1U^jZW+$ZjipP%d(uWAym&IT(HKx?E1hgHJI=UUn>xBY0;j~2^RwO zfUf*53lrc_A4p2ZIuQ8Ma1GPV2!9Fy?QrV05VO$mjL>ijqsa{wVi4(&2XSh%E=?7P zuM5s$45)ws!!HfTPZIO~&;qlJz6S6Di3%Y!u#o0Zy*vP@M${96r zlZFka@+lcF&Ae`5on)^7z031(Dx2KM33-a7KJg=T5fNbOmC8^vbnm}*?-~sd`q0W6 zL2;$fsG87`&x%nEr4SM6E1Hrqp$xDO7qJqG4-m1A5B`y&VoHtZQKtw{ANldjED$1+ zO07Hr#YzDakE$90vL5&G5w$UrHgdr7suW3$yfQHrdnf`=Py`ptj=%}BWFZVIZS&a4 zjw0#>-EqJM0<8W>37GhcOrFV&#H-IrVi!4U8NaKt>d&lb%#_dwobHJr+`#etOTBC1jZ$gRuxXU?&?ABp8wlxHA4mO%byz4$qA+-zk{#>z2f_FR79!qstKqurep>9%ZpDIdd$V zawR2;9z#*6M)4qAlGHX+CYcHZ7i=Ay0wa@xCq?2IYts=c!Zu;z++=e&ZHP9R3OJbp z2A6`D$Z_@1ia3#zBYpFqAdxt&6M~F$siJc^pA#(-?mCU|BDPZ{X0bWJ^E}ZrJ=JqP z*|R;}^Zq^IGd|^WKIyYQ?ejkIGe7lnKl!si{nIFv$2EfIKUeL84#OOb?rcvOjogLuSLeWE8us`P(&M0~E}NSTIcb~J>@M@{bsMzC~E zG3Y45lzgs-Xo#nN;J(=x z{&jXjLxoV(O`+6y6qRF2Cx3QlOEvXOTS9IA=3*M=Nhc*#Q^iia)Mw`BMrCPPM zTiu0Qy)|6LbzI4{T)ov;u|id$X5*x%W%dO^F|}^)Mnj-fU8PinV1`jiXM0XGdrCDZ z)YVT5uXfOfp^o4xnL4KrR=LK?vm2y}pU{7_1s5VxiXI?jlWcU?^^psOiXJ!i( zYVXuy< zAr^i}lutu;Pedgy3m?JtEByLJMe-D}nk|*A`jF2;h@iBbu zw-twNpxH|u-iz6+2pD-fM_=a0z6`>E1 zbhrn_imVHV}X8?$q0s<4#y3%Qi*A%wFdCjOb!9t^)|sFB?(DWwZE z#|yyTi?&9R7h#Yakpj|I5+%XdA)w364y+lSYm3TvlWnoGXt}j&MST%-ykaeuZ|hdb z%$H4AxkR~+`4TJ_&$;+Wloc~7TWSkanSkRTcx6*wsC z&7+<2AXM550lLvd+Rn=C&(J9PU>c<}@tImVn%~%x{zpow1P$mSy3YRD#o}xZ$V<@# zb0f9*g^8Mb^(>;BOM%l_C6>+RkgXSft>c7^*eC(n+HMtZt`59z<=zeM?yews?I6mU z@Z9>X;o8|UciYbG=j`zB1aC2{?H}4sQOEiq`noQH?(GCFt_}OJ5&Puk`sun2@3e00 z0PgO>S{Aa7;V^{hI75r_ZOYIsu@zf;#^B=Uj_U{x*vJkvk}lBjTINiIysWXin))o8JDevSSXneVes!F)u3Hw&e})@`C4Hd+ZjYwCS3!F1xqo&fe^r z>2@v?1TX&t@AUAl?rxj8WBc1|uIQ%wu~VD=bE}#>FRQEUdHOPs5L6JSba|w!SR9j? zkVLZn|zM`6w=WHH|r@ zP1u9e3jRczr%$r(U@?^7OaJPP!3Fc2J=~1n?~;re!cqLr0#gSIG5lH>nlU=VGkpFw ztD1CB!K=v!QUQ}Vp~fw6qUS5i&~W`+T*uSfCiGao&%vH`5x#xVo@>b$rPHo_(TK6! zfZ1;cH!%<^B8?|vzM`B7ZJ2<5+!2>hARloZAH0q4X}-nKkJsEMEHILCye9J7&2ka{5TT0}d41*BkQg(Y@_U45Wf%jpALZDB+j*Pg_2|dZZxx!hJ zvLsU63;7^pYTRpyp{#5n%>9#^{gW1I-hCQ~LERL^sL1}e&kKnmo3onqJ${Xmp;EvP zU^1a765w6Ttjryj9c|Ec>WW{zCAN<(xi2nvapQTKs*0W&Ny zS_s2WC*g|daDFlKaxYoDCw1Odf*G6}Q@jTKE2%ycxA4CsY3R$K=%L>0Uy{Uvs+$cH zqbRfNOP=U+{*#}+=r1$3Y(CU8{&_KeJ_q0M&~S;@Lclqql8cIti{g$0A9f2rJ|};{ zw(!~A0`b`qjw7P-bHbD(UwJ*>Jx713YzgJlLZJJo{W_xbakzd%KlWvR_G!QNZU6Rh zKlgQi_j$kfegF4?KloQjK?GO$%Oq)yKl$So`2(kg=ygU5ruYSePEEyS`$zi!^;WfC z`MF<3te;LI^!b0+{&zRDdt7C7;FL)@v{iG2{Ja1Cx#E4+)pTuD{_USgvR^jhv~j1u zOpliN0pg#)fdmU0Jcux%!i5YQI(%3lV#I$ED^jdjKp@7A88I@Hco5{pj1NniJc%-; z%9Sizx_k*Urp%c%YudbtGpEj-JbSX_2y~*xpcWBY1Uj)O4GH?Ll~kox-l3-}-4!GsGN zK8!fA;>C;`JAMpVv0%iLBS)@m+3>*3oI88|>=`rY(WFaT7HvAU>eZ}UyM7J3_1@XE zYui5Ab}3W-fb_l z8VF&85>7~Ag%V=|s_ieacfd-|8 zpNlW<$YYN_{s?4+3F4Tee>T21;#t`dcw~@2HOF0(SkaeXkxs%05z_mmg(o8f(}Y(p@tsn(w>NZ zxv2h`fi?@fbX{DB4ifN{rZpvw=o_-2ysG^QaYN@84ifXE=uF7hwuD%Lutg_BZ zYpt865Qr-J+~h$WePQyBt-?mwYc-If(F=08>dF$XkWg~YLO%2b?LW)z`p+1B$uf|( zkZ`NewJQ}1leh&Tdv3Dcf;()xFM11!vEk;5EknHmd(yqZA~fx`n96_%vnx3Z3BD=; z+?Tuv$7^jMez6-Xzyha4?nw*Fdr+_bp4V@+3!$4A$ODAg}xyYjw%%aHGb z6H;~Hdf#TfKm;?(`RV^~&U?dteLX$5vPVCD`a0jUvd)Q-DBe?=VBKTGu`W@~eZCBHTNCu(=6FOKxbWpWtu?EP&yz zcfccv%E*=i-9@Z$K+K;I{~@<8M5|ZH659ub$VDuwuMTu8S`!UY#jfpdgbEB}uec>Q zEGA2CVcZ+Hlqkmb^`ckko8uVgXheNzQI9$^NYC6@2Nw2GOt{kF0{_CU0!p%ci4zDP z&r!#{LG6-Zq$3#*GOcQ$0TV5dBI4qRE>uG8lz$YVE9(LYqKx4my{L!}{!xvH*zK0N zTo%A;S%6XY3YQhpS41vZ0K1(-BG)Q_F^Td_7D;oO)U2j8uSre*E>+}Y1&AUh*A|f~ zqCr;$@F7rc39ThbbDa992s?2#5MW|+p7gAzJ?}YBZAyfj-Yix)$+=G!%F~(POr|VS z@QHW)vziC{D$gfnL_dx6l5R&gULBPd7{`cHovG^7i4 zs7G}vi-;g=Bit;&M$5?wmDUs^xGDwqUW$>M1{5PZg(-__s?(SPWv0h0=*d`WQ-Io1 zSIF|FQE{44WOwk6&8q1pZt9LByZZx!HT?YbJ z@ZA+5moyYw`Pw)+Rt%%VJD09VsF1%NPJv^hv*7Yu&s0me+o}j= zjqSn_1%lCnOj5b*T9^RAb=%d_)?kd27iVdUKj;3CsvtEbxJoNW@Ivmp*!66WPHWah zp?4rSp*0`@Uq(p}a{gG!n*3soXUs3|dQ-_PW^pBDTx1_f zIK710vVX@X3KZfN5pdKTe+hy^_*RX-zg(+c6YSn0|4G8YB?P%JEJxNMLSF1l$d(!0 zEx3^_lMz-(o$nk7kT$V(pmp-@AiEGiv)6*{3!@5A(me{T<(z<4BfyMkbnZat*Ox{W$(7ySWojb4-c8hD{Yy} zf?76=tFYKwqO@4=kUy4wK|& zYur|66WGg+rn95H>;HX;+F`|Zse5JOWJi0N-fs6X;eG0RM>?1LekZ`^eN%!T{Lc;l zkix@6@u*@voE(q%NkKmH6q>vUEw2*Hi%Ron;ymU3`uV_zej%PWN$EXxdcBXnRjFTn zd0MY@6aSs?u3r`GYfqiq*Gl*PiJiTsc#nIt2VeNZSFl}xZz<&SNcqJt6Z4yYeCP{C z_UV1TiL5VuAYniIaM`}?sc%;ASDyQ!5EVp5`Ymhfc-Zi1!#adfq)kk|2_<$OC zc+Gc#;g^9Nn0z9*BNJGD;P*-w!fg5kk}Etq-#hk~y3g62_!FlZY$h=V1egTFU} zmluLN*eE?HgbYE1nDT)s7=%SAfJ`VMM|deoNP|o0gk4sJ5CVlG7=0M%gI5T8UdSF< zcve3cLSk4OW(bB}frkE9D1M5vS*cgPSIb2RR=7i+kOJOPSA*oPg` zE2ZFS4)Q25LoaS(5@$wkD1kOrqjmOD2cp0%a)W2Om}pRRMxC;3vp6nZ_YiL5MRqhd zpBRdIxQyXZidDi>fuId7WJRQ7IvM6~1cg7paTLuoI;G=0)8kmA;4tVDS8D}HYUXeV z7bII(JmYgb>|;9#V|ojw3O}GLP?s&LppStgJnSfW3-OK#Bt6@BbKwX*`vXGrf;;^v zhY8n=cruDR`2LLABsQQ0Lo!4|L9-UXvO?S#jpQT{F*HM(R#(mvJb{pF2D3V|HcDCM zd=^7RK~yb76i7U1VCPUpX*60qSuju}MZm~9GigON$t{BvM#tDbeUwLpW=6Q^Bob|@l5dzpiYP#!V~A!#X99&# zlr>nu{!&;CL1)aellwzBqjf`^Flfn!dJ4gtmX$=An!(XoKDJk3DP6VH9<14l(PUSS#hCOmo9}5jxN-~1Nqqc+Iu6rf0T`p-j3& z31{YCt{5k1*`BT`6tEeeZ)P~^I1n(_cB)qrht@c|n3z}R5LGlfR#aJ*mYg{XDZz;? zvV~}hmTF`+c823?`1x6Zc!`zfqsq9Uk5{F%@u3^hqu~SzusCrsMTs}Up5zow@8*{N zx$lvxkQAAQnqr*6(^~iX0B85QMg}qv<#!45#DtF0>sZofm z$NH>sp{%RQthtJW(ds1As)5=%huf)y#fq(37OoKKft>j>-1-&h8m{VUfb3c)!&-(^ zIIh<>uNrEB=IS%<>J$2kto+J-{z|E^)T~-quO(QpU;(iCS*;)lt_N!&2@C#xqp*Jy zOR*Jeu@{T68LP1y%ds8nu^$T>qu{V3OR^F)On(OS3g= zvp0*gIjgff%dCe zd6Bi&5v!`$wR7^dJaM&jF}5|awT4o*Ytj;FJGEFkw#VTlLy{;NqLp9~s%LAq+hHH7 zXdNaYA7Kj-R|~gu%eH|Fl5!HbczYGefw+tN6F^I6b zw`Zcbe)}M^5xQ;SABKw(U;DR>yAqwdCYQSqup7H#@*FCWwz8YIp8o5$HW4DDdmx&7 zqM6IOn=78KtF|q|BJ(l1MKUBtLc3s6P5K0ln5#|Ft0>cCz1ft#&Wj+!tGwK?y)tqf zs#_p5a!pTrr!a{{=alt*@#Rse+OjLA>DxH>Y*e+;*r3?8o>%NR@|vOFG1JifsD#$FM}!wksJY|7jl#np?s z3mhjHe9gX0$2=Uup`6Ub49is8zdjt!imb{nT+B2K%3eagl$_1l%P5&_%>C;o7mUuX zT+QdZ%k<>6a;zNY+{liL&)$5@sO-A)e8~Zz= z{Lsr>8_gWeG7PyNoxgV6&v#6}*eu5qeYzq{9~HeHy*!8^^3d$7(YCw6>s-pkOwc!6 z!+M;@2=c{1JkJ-6(>n~Q;9STMP1M1wAx&-0$7{mp9Knz5)CtYhOa0M1Y{PkM)yDhJ z)9lDsJ<#vmyhH5OsQlBBjM3%+QpZ$ld(K*1XSBvb>4R!vdYdDg4u) zd!i#<#wCIu`7F&Fow_$|)j2K6gRRbjO}#w5$hut83arFP%*vPj*IQ!QAg$Ty?AJ>T z$!FZdUrpAvo7Y#}AhitHz5Bdj?btIi#Y+CYx|D3%Y^~CC?ZuewygQx1`}@RdJ=$=M zC4dc*o~_1uOvh_|(!cG*!o9{h($@>k#K`^5g5BIJy}jU!+NEpM@QlCK9l=ckz!?nH z<~_h!(b(+lBJ9oE)(y+=8_i?P-K@RcmE64u-QK#L&B_hX%Dvaj&9^Dd!pS|>(%s1K zUEi)Ozicep>}}i>^44)t;c6Qdx2w#;s~#85yY=k7Qxf7*;o%XY;UoUxD9(o)KH-{D z;*ZPX+{nyf`{I+V;+$LKF>$s!{1V{ZA2-e;Ck_`e-qAqb;-He_8BXMi{o}Z?wme=UMkB_!UE)|S)XE&X zQtsno{3JbX6 z4y$v$nDHS>Z@+cRSVXwE9zvs z;oh<5qh8>PE?`RfWpVBiBs1x(=%%W!=pw$@?Of`nTjaGax-;J6AkyqG{^64x>w7`u zf!?@z?$FZ??L(gH)ei2x?(3CPIT^7$y5%t>1Qe}lji*CU0--CoLXOYEaPd~}laWr) z3*Uae-^*Ru>SRp{{?{8!{>IJy-}(&A%uVp>4Z{DP-*`>d-R;L$HG3eA+;5#cKccXgt=D%*7JE>?V!Hjcv?nZ0^YX)a@PK!EDs2jQ3lO_v`G_fnWFJ z-Nsn#_mTa&GL7>_ocMEH@tK|5$lJnzO!wH)_i^v=VA9)=&-iG5F&s6QSY)1ZIZz?l zPRL|8V;M}CFq+H$5=tziF}WntOj7k}9p8J+^KvWKobK2huNL91`v%_74*tmuF4lWY z(8tfpZ?E}$AJ~*l?aN=q(jVu;48?_Czv^wvzfb(8KEhE9(_}pSgir0W9Q}xI&&Ssxr7E&1X881fQLFV9lC@G z3DZtl1$L?$1F4!)p88V0tXXiO)tm_%I;3cItJkd&v1TQ!kRijXWW|nE_|+`fiCoiG z^ja2f-Ln1Ww^`v+K;bMT1@&`t0A-l`+QFoEWj-*04+a=6o48 zZPg8xqh+i+_-N@TwQuL%-TQa&;l+=qm{OKYS^rY@lDP9$o%F$%`UEOe;d-t}p)z&) zZ+^k1l4|U;k406Z|vzwB`=o)iUMC)dRk~}oiRC7%>+jMgz^9n%2srufLYtH`U zi|VJK>{O`Ew)9)dynp8Gsh~LXax6k1UGp)lMJ)_2!wH3C&9NIFd$hqFAGAwKCNoN{ zNfk%?6uRWF6SGvUM%7Zb-K2~$*1{x&^-C@#T~J5XGz8K_9(k?R*B;sG@mR3#+7&rW zTlLUOB*%nw)liSU$W>>5`&HFUpA>S~Rf{!pI7PGNvC22oRd-!>+jV!MICpYN-j~w* z$EBXU)M-yZ3zAo&q;?XhDM(~NLlt@2{wuw> zIER_lHe_MV)mXa9%zSvnLg#9kKF=1WU#v{#g$eRSq!Sw@;ba!;-Gz=M-Hti&kr3}&ZpI^*d~(VwxBPOG=9CF@ z&LtAA0x2dH$=!)#4;&aNx zvz9FfkCS0iut2!6MBd7b(9%@{#igY-l8BC*rI#RW1=kxK+q$1IqvSmm*4&Vt!3Wyvi}B2j3cBxW&3*oVH1U!j94~xgDZ~gv5@`r7_p>Em=SX_%>Md5i-jArzCPQ+)? z>Zvt`>a&$OWLDScSwk3_>!URUqRBp5q7!oTn&8wUC8gOH5gL-0yt=7Iefm?NZt#Nd z8ftg`Sh%AGRjEs5YEvKg#@8hka8h+@Rjqneth%YFQU0Bu5xbgIu!dEvVN9Mu75?h4mC8ck zG9bh`%xjkXrgwAek??%CXyo}qvXCm))Qu|=Vf}r_%i;6L7;X^wS<0u%&8gkX^P zN5QmA>YAkb)AW)Fu+JfE%ErV_66wkQu6v!H-O41@0zreUU9xGKQKS^1c!v+Dzz3V~ zIw=#8iL(nPr(O_@&WZLhr^oG2vGf>HKnAtK^x=b*P+|*+D005Y;^!X}`63qf6O;2x z5Y8glUM%$&xL>-No_HV*PI#|S5UlB}5L_SxSNK2_{*#GU{2ffji9x>mk8yV#wL1~+ ztwTO(sD#?foXrWo>!5Fb>x0$J=5?>nJ?odOx(-xev~X+v^36@Q(@ud3yCqKXR@YeR zy?#n#9m49Q?7CiEnfgDfq49g!=OCONLvqzzU5i^8;Vg;z6?YqPr28o$_-^#R`%T!m z6CCX|mIzRYKIwWNIPM!yu;2bgZgZSRybhr*RJvbMjg<%Y9SAmhp8qH4KabZwE|C}H z>!1pO6gv>I=)8Wg6W;kOMIhrA2v90<3J~|Q;HkcISvQv5>M zXIf`O`53BUh8FOlA@uIFTb^5xIi<(X`uKvA*8*f|;xT`F3wrCnHgkz;Sg!ax2Ll8n zl9M-$kgkT<2>|3QG&nFkYrQOUqv{H;dNM%F0*YX>vI|r$Y}*R3Be@G~GdaOPp{t4u z6hZ$Rh!Tv56%4`o+Wv_EyS1A;w)sM>Ba=W4j4u>)3IznW{^JwMin4+50Y_UqN3#eS zER^)fKghzqQ!GT#g z%Zn#3^ofmFE@14xJ3G6Ve#{q~6bkj=1e#MyeK;6V`v*Uvw~An()3UIZB*~4uL;CtlpOj0Ult8L{N}!NQ zU8}tQOiUjD$-Im3#Oi_s(}TvB@HFZRn5e+V(6f`ND7A1?#c6~#S8P70ut%bR3C3i` zbWBZN+s3sMzHPjTo1h4G#57ERfhLO!Wvn4)1V<7Zh)xsD-*m?2YY0Fg3e225)8x!B zG&sqvHNJt&LaM} z8%qcvTTsFpL+4^Ifsn_X9G0{}w{FC?vxJDCs}KlW!@pb%_5`;9txN5E%5K9%UF@t5 zEm4K}OFR6p|D)6TTTKzNV%_!deU81~9g9V<)lbjO9TM0%W39ZIh{MNg=pEDaq|hg7~x zybSV!FO9fKPI$;J=mj%?fm4vj9J7&2T%=tU&g;BHXFX8_wJmnM)*tQ2qWp7d26L`y+!)fK%ux3p3(mCEmY!)3Fuy^KrP$Wd?o z3myfq&9J~BJq-8kHH0Bc&N$Ku1XjHOJAlnsCzV%VbvJ>q%MnY!r#QYERRwPS*h_pc z!PHn@9aD2n%l4qyH2t6b3o(cw6r|9P-ZRZo#HBwqMn$8>Gv!mclM|*p)Qhma2}LeW z(?CNVv39IB|5L8Vs|Y4DglZUrK@hlxfZ8gl)cQ=1oE5Ir8$F~YKTqvG)6CP7qq3&J zJ~Euzh~km5GYeNWk+Ymxh3MBaOcai72m<308QlyZ+gtK`Qo_Z={*Tn!ikR0Udq_91 z2~oI1eMJZWT)(s9(3~TS!{t)4Y>E>s2#rHPHq$_Rq&Zq$ySrS7(QUIrDY9>sLxG?# z$A#Q9L_v*x3PQQUs!U6{FiIW!6Faj+y;VLXB&~Vn&YS?U)g2hcg@}WT2p@R8c4Lht zC4??TPPJ3r40Nw7L`2{95yK_R+#OOOj9xw)64Js!Ol(q@-Pc~7O1V7Ttqeo)%#{iG@?Ye+jkS`neD;6meVrVACW#*UG6L<-wC%y&O(M zL_0Sa9T;A_usiHI1pY;ea82wh3jK=-H{eJ3-N~kCwI=4Mf*cO_M6%D53P8O$%JSHp zxVX;Z6RRwX`V->61UgxmTdhzpZv@^1;}e*e2!f1b0pa3$(=;I5#j(5B?CQo53r0Y# zIbRJoqi_T4oyfxDbP$6>Kk&m}ap7GuQsH3T?(RWRxvu`UtR8rD$%KaRz2| zKHBd?X0>7F?Z~}j7H4JN2zRa^c1FtP9S<&pUJd>mdimvn$_RX^%CYHY)nN#Omcpcr zvoG?9Y9{A58sto4#qB&S{6gvtj@H_x z=8lY3lmC)ur$)+e-j1qoy?@Gd&5l?vAfU>!h}v&&=vZwYQXDO#Y_jI~3z!yymduBkYlw>Wg5pj5ut`D~Y@g zL%>e#tDeuyqHBxz>cv&;k??GX4lvO+n=!2H@p5a0R_)aGEYPk9A@r};?ugR1G1iW4 z?wGl*CJEiX>~y)_YYs5f)(+9e?Y@>AiF2|=+z6K_w~e-B+k$MZo^1-2YLJfX;N%GD zb`#E4m)_=W)((%_?nKfK@3I;1w)Tj!9__Xso^Z6ot&(Q^LY6ts~G&W^6Plg+QPLH<&bHtFZ#sxl10L?LJ{t`#emeHCx_^ zl>p6p%NIx^WE4g=4R>xOj_MSr{mUa_1cN(@n=~UIuECq~A6Mcl$8n{5yeMaE@>Vwu zS3KXnaws3Xgt==VR^kyq@C9d1mXtgiFLLT6O~zYtRLk;9Ubxg`55Cs&ebhA|zvQXK z@ko{kC(pSZXXL;u@`bDOfh2P+H*&+1@;;|F$15*HUh$z5axD*Yrk3qc6ZJ<2aN+v$ z{@8I*NAnra^u{Ce^y+a&Kec?ZVMa!8?rPfx4o8Hs zeb}EBT4vntW;Z|QrnA!i8$Iv4!y+^G?E5{L5I;gWb`op$YX|7qc5kFC#42>bdoj~I zJ`W>=#Jm*3Mw~>jMTE=NZ9p8v^|rx!efLLPz+fG*eV4=+^uZ-$?JZ0XgV%Hb^LN&z z#CkXH$n-Tod-o=tUr5)$eP6+6CPVsac-+P;T1EFB#9jSqUDr^J}Pmw1oAp3nKJXI+}#b;`l!i|{i{I}c*#Fm5+GWGBY?N{MKM zEJ}#RK><`+blUz=7ki^LPDfkC?y|kUUqVb>ymjOD!Z*|T5ckc=`!_Z499zu5-&ejI zNu^wGwgl6G=iD{Rz>{}h(&PLp?pD5=tj{0h(8pLv&v?-eSb`SH@=j~iUrNGaQrP$E zu4GHuUp{)z*E8(*frM@S6RyOB+4f!Qmawh-9vJ0MO6%&&&L{n#-}tl_djA?p>$k3J z)p=iK%kU4x+!wWT7jtUsO0~58`UjZ1ZaP^Ism z3{E~Uz57RylZQIh6poRl5KS+I7XL+5nBr5ye?A1F5xB79MIWj3QB1+-V8?<5JEr8Q z@Z&&?68qV_x1F6cZ7vWp9 zl+KX_D|n_}NCGEEPWYFu;eTCg>da^n4cdx28_so!sIn@pb7zWNNHZlL$Tk(ChA69{ zM69-TQnZ-cW@EjvFTR}Ei>AVYvwNwuEqZvy;*fSb)UCYdaF*6@2EQ1d;A-P2P2iOFXm8>i?=f~k>fq5^oUT41Z-Rt==Oo{E6O~35B#((#AW!2lH_}d|K~hn7m{@0- z{%fJZH=uSGi8fkl<)NiYa{tI@(Q_&_=n^L|xdozSHFZd$g23TNo?iC}x1TH(f>h&! z=-FrEdqL)uB11az2pUc-jfS6*M3%T-l2I;s5^Y9~NKuj-I@P6@UxFE?m}8Pz=9pt3 zC{#!_Vb$4ZnWYC-oMVZn3R^91hDKd-d4||qK4QippCkrW7D;aoc9@8W_z2N;a6(F+ zqWWOgSDuu(iI|c&#W+}_-HEv3MZ?Wx7A7awwqcMEM%dGM_KnC>mdlxns&qHmr9`$Fpz69|iQ~oUYkG5aN|by|dV~p-KI(_8M65R2q(#B5=V?Q|Kt(6EG@5AsDxK^F z(hI1?lFH#t*ml@yj6P&2sztNvgetQK&01`J@LgN(kA?ZW-m6H;Ywb@1OUo{H($;G# ztOfVPEQwA!-0Q?o-J~y-C0PmGN~Y!u@xEq~T(Ze0qnxtJO`!=OdB?>^A0nTT=9QtN zr8(z=cDD7_XNJ8st!04*+OI%{VMf|(nW|E>q!Xn%*`FA_NGO1P{k#>^o2r}Bwx?yc zZGRlf8SJ*Us!H&$g zM#*P(TVJ1bli^*HC9S@G#U?l+{EFQci7H0QAa*qDo=R<=po^7nE z$K7g?cJo1c?WZFiJ6Y8>t~czHyIlw38*|#Wj+!s*d!G_MuA}NaNgO=%r!$NZ%^F%SB2rCWvV`>hUVXl&f7LPH=`B|&kL2F7 zCjH66f2^Aq0V74A{t+f?H_~6`0x_hUjmCf?d0zr8XrAI6W>Q|OLuIgYqn$KFFQ!SM zg5pvj4$kL1Dq-OT8OAExfvtwxp<%V|H-?J95LGn1PLN!P2{$y4dnA0+2vz7PNE{JY zOO)b!3{)Wb5a}o-f}xF6Q3fg!afv#-%?(S(LWvj=i8PeR*Zvw(s1yEbiu_|@6RXI> z^f-}fr5Pd`)1pQ(hOvZvv|_7#*eF|Z(U62Zogl^7JA>uNk6=t949%;Y0h(^ zGo9*OCp!*IJL=Jof;6Ne9Vtmm{%X>bqI7))SSe0c%F=0eCQL6y zA8K5>6Pp?ZQ9*HO0WQK*r-bLH2UBHUa%K^nj#H>YQ7TZ7+LW38gsDt5(@Up%GM@JI zqfQ;BRj=ArX+jl!UnSF4Q%Y41XyDS*R-YlJqpqSjAI1*E}|~icK7t zB3s(B`lPcuK`l~DyIQ^~)wN8iDr>1KTV`4|v3Y&1YE$dl-L~(xMv-l8hw{_C+LpJ* z9qm!V+S}7I*Q{gWsc)hS)y-@{A8-|Jj=*yMT)Wm4xh*a3U7gyH?WG4n9tZ_t0RtJG zuGLG7MIk=p8{X(jw!A%cDtYg^*`#O|TstWiWJep|=HeHu2`&nE!|U5JHJGds<|Th& zOJ1AymnRoyX@*NS;hiqHyt74Whe!NcqI~$o>?^T!N4(PLST?Ug!)kj*Q;I-P!VOT= z3Mnl37^b=KMg?HuW$K^`7_6ojd)?am)VoB10GBdz$*T|k;n)HYcBL&VKnnf=W&N^L zE99z7H5vl29v{eM{Squ>8$tyOB4o&QP>3vCdX|5*>V2`P10}YA2!Xf|S8;FxoD-tI zG|kk^P<)3AErK}o1{QjFhB8IQfam^)m{}o8=81PRU1vE%!pr(-G@dzGfJ(bn&U9w3 zc*kp3@WwdClEv_=acb*Ui}|ob=*!Mj)vTqISV(&WI z&ED@=rLA21g4wsh&bD}?eQjAsdAP~O?6Y$%?O1ELz_k8qyuD>`98bIDX^Y9Sn3zB@ZHvlBb98NaBgi2j&Wea@4Wd7i2; z+7nGb)wz33wsJc+OS7T5<<898=AqTC!zFCcfFsi%nysnw5&_v|CYD%qlB8=(X(l~> zHT;hi#>W1XL1dwD0f@|$KKA6cAA!;>YUOZ_it|=|8$QDi1Ujy7^37IH{q!uaha! zwV>kKD(_=n&>3;sLZ6vwU1u!CLf?0HM4Z79@?2gyIvAf;S|AHPua2)VSfpgQpat>l zI72h+Om;Zyg%RB3ceSmM6Fvf*-0I7!oHph?T$aw%?^?d_G|@&KdnF|XC}%d!STs%j z05_!PPE#d1DlH1uzmTOB23NhhPHtzR4~Wcgnfl>7lM>Ya62Uo}{dV~ZI(yv+hE1#l zM8Td&2Kviqxl7l$dqv*Nh#IRoGl$vT0H)r=C)I`f1N_If93-nFpk>I1#cmWK3N#P=KVh)vWF^uTi>KdrsKq;_lqRM(fy<^))z!OvwN zHYy$6ZnR?)?^_VtBoH8EuALSTpA0O+vt)iH*hIWrT}NL-%gjNG&D?L;yd+*vx|o^B z*p$i$h;32SaL&4E2-Y=D(UlI>p@LEqf=ld(Bk>fm`8i0+kcy=Tar~kPyhT$qPz7~l z6;5P|`Y+|*in_H7y;^9*07J-AHQuytvrMZ+##R$P5(v zFH)nxkvxqknG@2o>D@6)I7<&!SV)td!sKC*0S*&2-ASHD11Nh5EqWr8Dv({QF_Icc z3MSBH&wjsq2(cV3b)>_c@x2W~62LP;ks_MpS5oB_ag0ORW~pcqu?8x$l&cA0K zNGAG}XY{lyrc{Vgn=HLS^vf?LvwKWH2!yH5;$tTK-#RO39u8 zdITG!H#IN|)K2Gz%!q-E$1m8Cme!yHnHdDWgiP3P^@js<1dfWpX)r$~VDKzciud_Q3e6_@boH5|J9ylfo%-PvmS9Keo7o`Ve>S;N&~Oj)_*?=Y55V zi3fDbE+70%k1Xc5zIs+8sou#~10sY)5=Vm-k=_y-4WU`02}K-i<4?+P)DZeY2VoCU zoVM$!mB25=V-9k;g*U*|fMCafWnOcfYz0%v&S+?HA%?B~Ugtm9_}Urr`>6_FMu}t8 zrxw2!Xk@p3ep~onAew(9r&1bQAg}47hUpO#pjF&Aps5VpSaB%cykUjAc7}T z6mc^@(Ey_t_sph5a7kCEGqbjls!kO%mLT8k%$Q3nKXK1ECetu<~$8s## zwAC0&%igcPO4@F<@?Uave&Qzsw&q#EG@Ljy1#~B@9;iPFz}y*TA2U%V{Ytd zK4MCT1~MOw4IvRgEBmCxJ{t#QDX+cUV5lg6LZIhmK8{#2pQ_E9VzHR!I-M47WT!OzwL%*EOMnb9 z!uG*HQ1dL_B(j2eOkOJNiEqdy&AG@t0t5?^R-d?f~TJ5yJDs;LZ|a zFWA7YnkD`UmgXS+KFPM1I|Ea|8L=?r6T0wPAmgFT*s9q1CP~#X)Bt~Tk4^VE-6J3Q z+k&srjt>B9SmA_0;UN&Z|Fgl%ET;w_;1kwiBJkA_7Sb#R0y^OGj`7C!f>nCptK2zU zCI9zqA1WPRH$=U-48H|#xETK37;@|t$NuM;m0zXSZ;p(lcj9IcV5!_t@Lme}nV7LY zj~%%n5waGZCps`>014Bkb)Y@Dp->aQF&S?EOw z^ODs5y+0m4q1VSkhxC&ZOJ#FUMl`GDpbxCxz>gh%dDEMEr-Eu~7A0gxR_YXd!wx#v za=s)2k3@R6QN&xCZDAsqpM=6!ng$|cV5VZKvtW(~XU9jQFOFz6Uv3w&piA07f3stJ z74>`RSB(Em?Jj^R2eum)FH4R8*U)L zPB9hmbw7(vT`mP1`v+>^Ft>D4zZkL&Viy14G&lavr$l$O`u(5yRP2(HFQNj<5JJx@ zFH$$g?g~QMH;sT@oHP;Z2Pjr(7*9U?Mm`jI_f@E(c|J-1+1JSM>=?f4n?-=|R0E%d zl#V!{7faC(d!~L;I_#xa6eA{aJjcGjJKXH2b?JeS)UN}6!QobSTaoZLdpRe z1FJl(z17UP43mRs+?n$D*O>^1{R0*i{gIzh=Hg+uyiEbUtaciNzpTCOWu+ivfxX%T zD_OzoIDP@I(yYCA13gF9$~U)iI(oX}>%ZWjbl~lsz=HVD=;n~1a!z)1{F(MZ;>Z?_ zuI~NNy&~_C(8lA?9cZvB{vR1Q&?a6G#R&fJpJPnD8qL|I@o$o8Zbw%q8eVgu&A^wy zE;jF{z#W+Om_e0mv9FA8`!9e%w(|2|G4w7$Q6STACjn*AKb*eN_ zA0C-RHLv>>6$gH2pMNEVp%Va|pp1^12XgU}`-2N}(XxG=&sQzq+BFPCTddnLZ|3=_ z2lM<@4^qsB4>rt=EkKSG!VLqwCeVZtsErC1bph~?7MeKV_+BWtIyU@Gvhn1KEu!zM zf3~Rgbq#jM!w&?p5O?S$sur)jKrme34~eH4!jp&@}&*0 z;=Nt(R%n2RY}{z6j;di>mLq79?f&@Hx(yZE?T+ZF=F@;N>d&qXt|qz(5n0!PJlW8A z6N5T&WkJAUZ={>dp#Spqq;W*y41zIPfvhoy;~5!XdUn^fN+<4{E}s!?=Kedx*`cD) zjnq`s?5^lJSJq`0}~{X`Jx6 zd55h3*t~<=z6#>!IQTWmu}zk!8rs)Dcl;#QAImVsTlYU_Xo2qPFMDwagLNAMakr`) zEHBO|7gL8hcuHGr(bQU^Z+J?EX?mq!6QNG?(+TDdhvd!E1Hg!*S451C``+%kQ1aYj zU>9SsDv++UZLbKsP^nS2;4lbUn&DO_Nqw1b=6CS^WEg;Koa};tkKM{>$Dl~JAtSB z+eVm*^l@&4*1}F;Iv|{SMNC-D+(IF4vIjqDC5lEUb4`BCzDKLo-zy!T`HT zGUku|#c24_H{;T$cnLEKZ_?c8&FEhfSjDPT(9vaO^TO+=*#6Mh%_;p}{r*b?a}-TQ zMfc~8vW$;#y)v)*K#7RbVmbPZ&hW}_F?sn8jAiqNRmTeM&jk%C0wJrcO8UCFD6;y@ z!phT*iylpjjHLL9TE?TNN7LH#8TTsg76q7Vwgu90%f4TDur}p?jIwKp{qUI6;8+}W z&=KR*T`lJe1xXp;9u)k@h-)P$N;4eYZ|9P~PGU|&%&%9tO{ z{LB`s;~Dnd1?cTiFthDR%%dc4nC6LnR9ukh+7~CN^rZ0z2!Ul5YtgZ|C2A$IIGWu; zkh<<+mC-yOvtIFd@>bMEulA?(v=jHdeUwz)ER%O|LAw*YDOE#`^7MzAGIE#mX%u$X z(o$gsWXfC+Ka~3U$oKVhyMO@Cx-&(=^Yoi3XiK>uU~nxG`cf&k+km#cF{cyNo>a5u54+QUw(^SXL@-IGG~v@hA@^8BG@>PW&Mmt zJ3t(IN#|(u zN)of^iOGG3TYj(`Z5LoqJLg{>v z!3T%iM7tz_zV@96o??Icjb!NIWTC*I{@goX(&5bP*pLP6T{kIliCR7s$_|Y%CP;9= z!ve||b^bh}KA0iC4S6~%a|(WAY8;(4t0WxeJ+(pWFb<@NL^qo)tlC9@?b8+OX1n^I z6}}j_*f(ZoIg>mg6hR~!2mx;X{A}A~)Wp^Ni&$*cb(|3@IGMSeQ0&KWMAc&C5aU{M z{G1}5pGeS@8>pQ8oVq+|V6vfsvgB8aAV?e4FRvjtM0fqhg72Gt3W`%7O^o^s%}d5) z*C2f8|Ab0I=}jhBqH#Wz9SC1z4N_7x};l=2`w$b~2WE_rT8u={wPm2Lmzsymn}I4;iRLda9At{Q(A2B4LhDi-t5 z)9`SMbw|Lk<%uE(D-Tok?yDr!M1L|w=Wc; zu9E4CQHI#pcHcMn#%LAGE9kFrNzAp-QHD+U|ZGPhD!DoseAj zN?W1ey%|cr0Vav#2#M}NbN}b18R%Lp!S5pzzDINQecC<-7#@5Z?`i|R$nAwlb}O6j zOOUC>v%w*ZC)=g{SQPIwIbp}@(1BvkEw86QiAX8r#Gk6@5`+F>{BZ-=(+a_FMY|gj zG3I=5+s$2Ah?fk&msrNHs(}_5XYy%MyU%-#LrR7)(cd2Uf9N-pDvp?DxS<@-Njd_* zabJ60uPERubNVUsgF<3Pbiu3ganQM;zh%J=9W}O0eupwjrS%XUQk$CaZ>-3yHqWtdugj|c% zpzPQ;pV>UmNhft5q-`PfrLCzcbJM>rfqo_7W^1)7@S6#_=P&H|k7$Copql1&gyEPO zS^rWU=k6v86eQWY8MG|tXD#WjhT1A$;+(S6yfev+|p&>uMCgI{Fa$Z1c&%2+tt!;*Ku@kv9+m{Se|`| z3DQbgqh;F@vEMR(u*T4fn}4CxIR_U`lP*T0%#m9|a89pl9k%v0PH&!tEKORfHw<|k z=tQV8*OKxXGa zrIPAIvfi5H9cOH@{k%1rhS?zUYb@OAC!|+vy;Uau&$x1dDpkYr;$Q=^fr(!qc8#iVw1#a6rY?;*q|i@mw{G(VKGa%& z4zh&!A@~YnfDgM^?Cgaekh>lWVY;BakwSV*NBG9N4JP@<2s<4F^EqaJMFKp;8Y~DA zY*hBG-sE*D$`b<_hEvLWBf^v`FL#A#_yLv^N9+=cXz{as( ztMIvN?lG=jO21sIL{TiuBNL)f>K!p`PWElGD-ffQE1on;nTQ7km&3#$QR_!rP96mL}ioq``mthu< z@^APPG}jh8nSJc~7c>uLlx@DLD2MnOaBrktTgL|19P`_xf1PU0(B#AJxdT?A8id#>R-qROPjxqk|cKAQ=ZimG(AmuM3#$fgcYJ)}vwc|7F)tB4@= z+3$Qu4(yi=0xBe$j}4KY#@c;IT$Si-iIv)rbF825_?Gl_urc&VmGmeR^=Rkx7%}v} zDe1E(>i?M2=fyA(R5B2qb9u8hQoYkNj1DwVPW+>e@f(g(3qnv!gVM}WRKtAkkDZc{ z69%tdqwYk3?vUtHYJ0nIn$Iu z&B#Uz(tY!jIqR>OHWo!zHHKEpY-R-e3YI|@7)^%xcUH?3Hs6%(*xAi3A&sa+%vK#$ zGYxGsC@jP8Y@nTttOpD@=N+`?&6L@NCk(Cq8f`i#EI%t-t~c7yL8$2J7 z23hc9nlTy~JlsjO3%^-5-nj%QyA~z6md(3XVY<~RyEP@bwavSAVY>GzyALI~56`=g zV|q+0d(0TObqvk*p(`ft7b^-L<#`FfqLXecFt8Jh|z!D>$ zje~pe+641z`t_Y}3gLI9SDLIhBZudBg136H&*UK;(gU**xc@zvH1WdDmYy23N&vWX z|H0QfD!6746Od}SmWM{P!lKReSo*Vd`=_WL94YzTgBDO(*-TkYDoM2xZ7V=AsHdn| zM@>o1nwA9cQ6z_ z8gVW)#wQJWdn=1nrSAU-9-&h%AYP*${masF>?3~5kn31K-$aKlBPB0$dQjGqFe;EUrbysd`&-F`qSHW* z%ZFh64!CncutFgsuO$mGNeB?T)l%SeQP>hg{s@Xq=fo!XQ;&JJn8BFpp7V=q7*#$i z;WidEg*yQK1k*o}7Wo`!!3<24cdI}GhyK=7J7*@qYG`UkI z8JpOm%A4QP=#<~$7plApQCfV{4PRQucb_@rCqN5NSpnpUdNtR_hY$^7q?zeygKAdXrOHliPCBM<;kc_2!_o=CI}FDBPAf z^|zL!w3f8xmMq-XJoVP1wAQla)+)EwKk98w>H?p-+q%-)`qbN@ciMW~+Q)G_uJhVE zesnA^cWmo-eBS8TPwT88?L5Zqy2j-=Q}23S?vnNEdROm;Zf6Et5i$+xMs@G};?BS- z(nHwZf!!{Kgx5>^vz^?X&XNqeu$xfoUL;WmA3_kOyNA|N2VQ1{fKFqe3#;#&hA>-u zU)^B8{0kwUM!$GEEt?L!Ksvp>I~>RtLdJbaIURu7G%!E{QQJ)b=MB-yPZaxU2r>Ys zQ3nYB3Dz`y=w7eC%@?9Dn{Z+4!z00Zrqd-74M_hS2-6rnyaV(JfG6s}AMt}LylKET z65+8349#!$4Q%$?Yz|wz5C-$%zUlTCxdTSq$Gh4GW!)zr!Nz2Nf^0}e&|eAdU;2UV z6S6;tzw3eL5={VKpt3)WY3slP+G(#=CQ&^`l{1W%-RbzUVG6Se^nQ|3y!Mr}4~pYW zKxRxd=}d%d3~l}#Nb>Fv$es+zn85WIw&|S+aG!|j7=+e@aetle09%0U?Vsm|vHlDZ zzd|dQF|Vq*;xsoq0QM>H6Xui#sddel~&W z>Nqdn+PWsu7WY)m%T5C^AfSEbF=Mk0Yy*9529{?RnPA4ty&qp|HN|7g%>&-Db1TSG zpD}Z|NoQMd1D7TPzL}WRS7Us+W9K)|L;?5iD*oOVt;tu-DN4^h%8cU*?tSdc{T4lt zn--D1#z9EtDec_Bz@N>OKg-XXLX|74cAA?d+$ZOrusGbOLGGY=txZa;Q~ZtvNJ0t} z&rPSdO;p19G_a**ttGs0O*l!W)xjaL~^mU8U(Uhlb1?_yMV4`IA-5A(QxLe?LW2x9}f z=KlaH!)qMoMWIea7KX(zn^l85gWxWiqzl;;UPHVsNW3(-=zpfL$ zZEL^nXT2S-znv4lUu(bLXT3kKzrPa_!NK5(RqOP4!JyJ;0IGBPf{;ih(#2|W2g0zv znXUk8@`j>_1Viz}Yx99|RKH3!fVBm~Nlf~nbn&{v(KHUbqZMFX(Rdc09~{0!eeq*nNG?wzL!zN{woIkYbQRQ4HeaRF7m6?0SiV?iJYA|e+*q;PWW5c_kZh`4 zZF9apS{-hxTJQ1(hbNF~uHNhmMy1snX|CBGiYArJlzMBa-5pN;X0|rcQnx>zEf_{1 z-CBP*UHq#|Yt%KLuLOc|aP4tP*CGHMlK{cx$G-V;hdMl=O#8zU7(xtqP{#6>Rr)9{ z)H`N|>-ixtfww>NmHgg+JtB-yw$pujW2H|Wv5G+V_U>p|{l3z}&Exvv`gr~8E0?3+ z=x3E>O9-AIbsuoJ;tikAgLi5CbEA#wj)*b~_HLRLBv4O+cRanMu%^2fr`0UKHgXOiYwGgHgVv^d5{( zjNH+~PK3Oc*dN!X@5cHG>V;xt;RcB&d)6xXC2xDF=8cDYY1V_(`|0*`Ci@xAdnNms z?sp%drruCA2ig7@rUyB}6r~5b;cQ0-dC?*?hxzeJriTT|wc^u3_bw{>{=^^-!(_Nn z?9vi}PN$tx4qrIDGSN=BKV_P!rsT!wdJAMB$}}HG1fVZz{sb##nw-=C5-E=Ycn3qx zYP6v^ON%mcO-TX}w1B#0Qxc-|^*Uo*=2eq4;+7RPwq@i&YoRa+w!! zkNeq4ti6PZ$=4HmIYpIEN98|Q!AVjlwvmo1<}II3W8yx;(%1cnd_M1nj=IN=KA1u} z?WL@Gxe_}b`ymMU#`t3cmyg&WXvGWBSN`M=gG(_tiN~{~~NZ1=nDjN(l83Tgl!UrjwNC}Us2Ttw6 zmjD*#6Y(R&XXsDwpXfe)GWvuHarn7NjRaTqA5=(im5Ff`iE*Wf@q~!*eiGra65-Pk z;*$~J6A|DO{CD8v6X5?Z1|A+BE-o(iKLhK3F|e_)@UXB5v9ZW-u$XYMd2q2M@vxQg zadZiA%n5L;332QQaU2M79Eos0a3IEWAjY>RA+RMSv>_+9q9C!LA~U6>G@_^Z!$_yc z!lc8-s=>vf!u>;;kLS0bz%LOIc?k(Q85tQ_Sy?$bIeB?`1qFp)zkVqyD*pccTS-Yt zSy@>{MMYIrRZUGzU0q#6Lqk(jQ%g%rTU%R4M@LszS5Hq*UtizAz~IlHKZb^eMn*=) z#>OTlCZ?vQW@cvQ=H?a_7M7NlR#sNl*48#QHrBQd=JxI;jy^_Cfq$Gs^qs@?Tq3oc zV$>Ysw4CGg-D3W@#~67;n|ef9dPdlJg*p2Kd-(C1yq^=SHU##H1C+WR%BbR>fr1#AMgUwCzkf6mUm`WwiVPg zmDbhOHdZvZl(e@Mc6H?UcINhVWDj&@4R&P?c4Z8G(4GGO1kj!Sf6FL?o+4=eT#l^+t<>l4Y)%ErD&CSj2?d{#&-TnRj!^6Yl+9Rw z8_OsQ%-g4T*bi~b?(zG7A#Q%IGXG<7GwMU*`R~Oo7Ao`K#qGE0Oy&Ovar>WWTWiDd ze6{{?rgU55>2kB(@!Dux)A@S0-(PL}*vtWl`}-BK<$8Z2PcloUqxJT9q0Vf5tfTGz ze53E}ueh~8ULQ=CX^(eyJl|hz4`<1Cb-q6T6}R!OuJ`v(P*fY<5E#ZAJ}?x;8@>o^ z2OEA!B2=6HXr>T~0a%6)YXLZp2f8kJo>W`G%K>6rAygtsf}wPcfR#{&L8?4!iZSEu z2#&qt?Z}^Z2isA6P}DooLKr4HF=7-YJF!x1hdXg{BGkL_ib^KC2`YvqyNMc(hr3BS zfz*4+f5k1uxUl4ZTibBR!()|PNeU7TkBAFX9o2}7G6QLjit`gqk4lOQOOHy+8;_34 z-l_*_j?3%kOphy?_ezf|+wYE!tGc0RPpbPd%s#}8qU@x0gzfmGZbF3iw0=g(?6hIQ zuo^Jg1WnaSNim0+1z{UjeC#%CA6l zO($2wOha_nBdqi0*P|T!=?pYnT|g_7pZ6pBVhBuQY6!c3|Qdx)g#&V*X zdo$U;EpF#DoKA1&b%N;c7CyA?Zqc}?;%>>j>GW>ddg$M@?fz}e{r>cR{U34j$FzLd z6wr%!Xbk;08?ha!4ezouE7Q418^3PcVmM`BxxJSHyZsoRT{`!8z?_(w%3eGK<9b{@ z#PEDl|5x0a_bZ>z+V9W)iW}q0ML(w1%O&8ixQ(!%zg$m<{uMW6tJm8FqpH`tmA~TF z(}C!jzZLav{J6&+>iHB_IqsQz*7YH7H}h8SuMhiw#qIw5;|WB_{sjG@Z8#U+Fn_fT z&<(})SKG27D8>HKHms3sD0V;(qU(hp5kd}(s8}yb>V-d*R1TanpckX{B7iA82f;|J z4`=BjkYgkV(FxE;@N^OM#)puL6eQM9g7b0IPbwEB3D8f$br~WTo{Lr_HbA3x8LBdp zi_ruaU~s(*(?Q6?8WJ01Nxcj=mdeAK2Mn^cUPf4l=i%*(4RI}9Mmmq=5!?fYc%Ck! zybRZMhvK3NvDxA+{TXW~dc1v?NZ<9ZdBjZi=(Dh^Ue zy^1fEDxgtbWKpkXq0qMZa;)_jE72)pUw?wgVAqnNdByUh^JUk;mwH4G=QO6>-f2#~fR)GcLl5 ze(sBpyDnX4KAevf@!SK)J)f?#K7A?XgO-@^#kt9bkuDa%1Wg2{Qj&A|77J2JOopo6 zv#Os6j06mpD~$T)$f zGoNmX_`a0N1xd{0;@lRCNtY@lfo2N1ZcF3>enAvU%oei*l>TlgRjB6rU16C}rX>xh zOp2tGAKp+d%1NshmOIygSWsd41x{moDXwM8fzq+VOy;U|KJB8R>iZ+DjuFX1&tQIa zpa-lT>T>J=iz9iY$B8%z?P9E4V=ZY5ouOdv;;3hSUFIo_v0z(__osiiKWt!7pKv}E z{mY*GpSt4w?~D&~^f5kM(ua>CARr(lBqSmtA|W9mBO{}rprEFvrlX@{U|?WoX8!i= z8yg!NCnqNt7uSy;KYsrF$<58p!^6YN%ge{d$Is6%ARr(pC@3T(BrGf}A|fIxDk>%> zCN3^6At50tDJdl-B`q!e|EK-2wY9agv$MCicW`iUbaZrba&mTdc5!iWb#--fb8~lh z_wexW^z`)d^78if_VMxY_4W1h^ZTFKpNNRa$jGRusOaeEn3$N@*x0zZxcK<^goK2| z#Kfeeq~zq}l$4az)YP=JwDk1!jEs!T%*?E;tnBRUoSdB8+}ympy!`z9f`Wp=!os4W zqT=G>l9H0r($ccBvhwosii(QL%F3#$s_N?Mnwpy0+SS?mrsn46 zmX?;**4DPRw)Xb+j*gDb&d#o`uI}#co}QlG-rl~xzW)CHfq{X+!NH-SApigX1Oh=I z(D3l^$jHd(=;+wk*!cMP#Kgqp~1 z%F4>>>gw9s+WPwX#>U3x=H}Li>)GDk+1c6M-QC;U`#))aFh2?Yt?mEs_6HH+U!}sA zf0YVEpAI2(!HWLf!xQ0P)8SwX;$aKnV~hO-=Pv|*5&uuj$Z-Dya$GZVTqA0H9aj85 zyaX1KByPV*f>k~s{SQ=0gH=iWwP?K!IDG!_1saJ)Sc^wHi>A1N4DGvOKB_yjzOAyUV4^-YaTs|;d4*G}T|G23D z4K@J#+JJrCprP*J;eXLHGV+)4@qy*#nZuKl^NX{O8T**$kIDad1pYM!hKKwAp$|0N z2ORDLd|dl`K|TLP53r{h0B8UW|7Cc%{sYjz=&1*F*MqwLp`#8|SqCbw1OBBJP+8Ok zEbIjRcNBN_6?b+Qc6Jr~rK6yusi32#sIjuVvb?;kw5+hOBr~HlH8~^o0&~Xpd@CY#s3iU`04o(k=OOHs-j>;;C$tsD-s!mL4OHAoVOzlj_>WeD^ z#uNi1J}CMR!i#|JnZ4FY9skg7oz!miL1L3tV!2g9v1N3QMR1y_Uz(nKy1Gl6vP-6v zYk{O|k)+!{eB8JeOSu*)>!)g|C+eyssw*cbDaFgHMM-Ffi0T9hYK3sCMzSl$vnwXB z{rWHBzsUx$NO|z`J1es|8&JC#Q@H4oxyTW@e#djA#C0Xa`M~ABAi{GZCblD{)+8iX z!zWO}#s2jV3b@$+g&Z!nG(L_D4X!LVp1d%=f*7HKIHAJ-uv8HAyTU4Q=3v_D_uapt za`B$f>(MY8yCF)p(H9Lt!=`|T-4g`G6KI3nvF!e}4(6^JtKSn$Tqd_*@-0O!o%{VW zw_Ut(uK|6=zn2RCu?{wBYJbpGtB(nCl}9F*Y9jmo}lS@eVs zV5i?~4MZ)1!2Yfeh<1(vaWAr-fB@l|3L`3Z|~u7O1y zMv_@0&%(z9CPHnId^4#Zz5CJOkpfCMH?Rm&6h~A*%OKT_viCtlLmfm4q|z%?&X>cs zAkkAq=b6|`OU0hi(>GIKB8ZV_$BZytasc2Y$}E*YQ-yOJ;`7()KnK#0Haf>g;10MX zM+vpMjIra4fl^=KM<&~;*lgx8bw#Zr@t7-2%yMP(e5+(>)q&pg zcq7JF_m!BYE3nl@g-xv|wKX5hVE>c~n&vDZnzBX{{tUrjRiKKQf?Xh~7L@=1SnG@y z0UzHy7jB3YN=vGS)$karwIoSgHc_-vl$HwCBY=%rFy1LMei^`51T zXY+2>xQgn2((?DIlV%bA+QSjHS-k7)OSRI<#==6)-fthl2!Ym;Uq$ZpMZb64&B4c4 zFYyxqX(#t+ed<;$Cb&qku96fzqmA_8-d0vxu?HA+ye)dV50M=+lJrL>K0b!$!37Zp_{g; zV`Fzlf`63q)H?20Sn@)cQ*4Xk-fw{qz3S*Yo;NXA!gS&uD@m2PaEE%MZg|)XL6DGu znB$y!VgBJUwW_pRVuia8%)+F2ABEHvNUykAN)g7>uV^Dt3aQXY*~n= zkcWJUA~TV48O)0&ChvDWk~#G!6~STD))kxHTq{OV=83x4c#1w71-8fnX{@h3>z3nB22X-HOs~`fS!GkXC_k=FwXqv#x!*XX2u@| z8hxi1F#uE&l0GvJc_yxe9k8T3n?gV49if9^pRIK=D4v*lS6?h$Vd^wR2S+#HEA9S9 zulTz^UMbkYZ4|*Y-k(Mtwc)G*%n#*w4N@b9|IoQNK+8|d?AI`mA(b8{`T8f7fVCiaEipfDybrN5N|~M3&fLDi&G&ysVTPI-}}IA?)2w z??!&evjU5+hRWKncgU5HbAED4Bv~YvNID4iQxZpI^798xJ#uhS!aWqJUz&>LGzCvg zMWwb-(jNND5sHvR2k@*au?7NLaKk_LrD4wx4t^V}iF6v-CZG*uua1L_X5QT{-Dn1A zwuGmq!l#XrJObq+YvYT|JBN^3h_5?X63F{@=w%_rY!0uY=nr>U(jG^QW$NBi=STL~ z+8#%(BkR)lrS`d&AIF@>>N4*~_IaKk$Gs8jv!SIA1aO}wf@SJ+F-H$XemqS^N7m<4 zN*_w7KTRc%)fcjl9?G~qO=lxE6pKn9DWpBk6w5SxQW`x{YI~Zkj%+A5l0H^jewu3@ zYp8S@J=S`Dn(szztPYYs(ZhXS0LV1fCXJpL{&-%Th-|Dcl0H=|Q~WfC0n_-W&O+45 zZFqg`F13%|QYm(MW}i)}6}jV#vZ-xlBk-Pf9pBW|Z(z-DkUi>_-iqwHZQc3#z7Vn! z-S>WRgGz*>+o=2^;JtJ+A&}!YnWs@`)!Y_hm-C=-u#K3LJ0)R~9pFv+$5ljC{SHOf z7Z7^KRZ4yOC?l`Q$ged}%Jj>3HcI<3{93zj_wEV2T`kal3^#6JX$P?UPw@$F{Dqj@ zRx)0$O1YUvrCKPn#Y&wo*9-q=17##7FI#i6HpS`9k9n%)nlm*weytRXO z-+S(nP`J+_4qvKSc(dEXc*xWCIS>C3Jm~1k8By0t$RtQ%>$J9C7O?|%9J*Z76$$R! zzH;xuLb%3z@;ta6b9+lgy#%pl5sz279{VJ4s1);IAn#h|(_Cn1s#Q=K_O9vk`y_;~JP8_%`O`W$@sq@9eLVY_G*00Lkwk zMnyLyYWb7HCCE8g^dR`z2t7C%H=`-U2;g=xAEHDRkb)H$5FCgrMl>scSX!s&|BK36 zOsrtbK;pZyt&iAVkXVD5vlCWO1Q}Yw&F6d$|DuPG#NuEK4jdc8)j-sSBboNmx zj`>;?OmG+iBN{Ov8atWnE(h?Jq>jaU3=fHkU4e?1dT>8BjujCP95ITq6iJYEqQ895 z2C(Wd9-^F)$8Cu+!Y1l2VQP>NbH?`~TeOh-t2i~zu?r-JgTw;hU|e2 zjeS-ZlH57HHw+Wt9^D8Z<2wHr9_U-g3IWaljxy1`iT zo#PyxqC`@wH&fMN(s1@8`-?C%@=eMQEwW*a5`iYQ;&xpwdM%5_Jt-Ii;%Qtq>DWc- zq-^QogXtnc>EuuupF}fCcGJTQGvME-GNyqUpK~*c0y5~D($-4UHdHP5feKqG#)q5^ zyPRp~K*CcOi;P2?9qcT!psXtw``g9T`;x31*z8v3Eb4~Lle;W1kSlB`E`+K3Yf0Ll zxoj|+oC6UH4A&g2)Eu1F9K59*f~OoJoLmyFTr#y>idHjtQ1%PZ;to59S}mK=6c>%l z>Z?RL3{GBFNZ$8QQz%#CZ#3wE|Q?!#kst|zptw8xs zrs*c3cKSG0E~y1xpk&$7g12p8p$|<_5Kd$jFu;nf2$C{Yc`{Awb1Y1VYy44kv@4RL zQwa*NggC^+!PUgA#5>kBG)5KO3s}s5Py!C;QEnQUBw@9~k>YPs3Yn5z@R8#Haz-}^ zO~dj}-H$JZi!J3UFFmlWObv+-4i$kZvui3X1BIu!W`E@N=HbLwfudWUPzIhNrd`Vf zvCG#%p$U|gWyOBOr6pu82?fq>>bikPI8`e&mCGD9B}^f z1iIQyq#8M??l(uMCv|PxQ8Ev0Epu5sD{aa)O`!~J^3GBCOH%ocM09^>h)!}P+G7Jf ze9RG6!}LQvw{aOQd?V6g0M&8TDpvr8q)&)y6Y*h$u4I*(Ta~10fFrJ%!f--hTcrMS zjY(TD=%_&uzCmiZ2x=KUbwVt)ttI{AzxTN%8@Dxgxdm*q<(;XuIIXp`tu@W9wfwm? z=eV_6vbEqxTlx>A{{}-qyuY@aySl5n1d+S4ySu;}yuu5+zdO9fd%Vb-yvn=0%-g)n zs|lBjb0|u)Fgvxq{${GN%BW<^j!+l5llit12d{Vgg;(j7Xls$RDy%N+sfXFEDVvGX)RqMCDioXPjnEo5RQn$c7tGM)g zs)HM}k-5LuNWeXd!G*cFxvI2MTe2B>vr&k(BCNqBT(6TWaO?WLDohk948Vx{z9#FH zD4c%`e5`)U!6ysAD*L!HjJAMl!;q`M-B!XnY_&%Gy&OBS4s3FZX~Q);z!6-*8%(!s zTZ$A2!YJvztSGi1N44mSuWMV0zZ$b@`@{NszTf!24@kpYjK!%)wMFTy)f=?=7qa=Q zx8Y02M@+u{6)Cax3&@3Az$Yw~%sR$8yuBOj#813&Ej+6koWRE>$0Iz#O>C9P_s4py zvD-??KdYDt`La%Ym)?87oJ@)iYqU|E$WuDL(`&~ttI5HZwM@LVgUQKCyu$XIzZcBQ zb6mj^Our55m@E9rkDSb*NtJP2l_R&c3~u_F&{5d2KgOPUN?fCDT73Eng= z4~_m*BZLywGH+JV|ExM2bJ0Ad(AxykZ;B+9Kmo}B3hVJ<9MM};l2oqLT5%FE z;j$tf^kUzYCBT&-Oub_=O(WElTN7d?Xp$mwSJaLM7~wP_t;Hb}QzA*-NFq~2T|$01 ztGDB`H&meEAcNgwGHpg7))(pG zG4??*dfm~6mJy&J33W2rWQ5lf6HJ2**!Ch!Nu@D8HQ8>>nV-dLx-CtAOwoTp0J#F@D-6Wb3|KQxK=G_~i+w&1?%smh) z0N)Rw-NWtP0s!6upxf}sIOUz)>RsTDeA;+(7ZzbAXcPtEv=(3F6MP*)e*FP96ydl8*9mQh8h+spT}Gp=E)kC4 zt(ObD(<~1zHz#d8uQX)6WYoa1RIB7vMr}Efq2!7kJTk%;OJz>rG~|&67%YwD7V+UT zjv7OLz~BrZA| zcjOz%yoXQ-e?(}GuU$z zp6=j&;LC@%;=FY4zIE{)!FqYl44S=>i@sBV%%$h<>TaIgOYhECna_N+{GP0IXYZ4W z&FqfwIo!zmx~`Yp@b>!3y?VhH?{@0D?`5m-8jHYT%aNssXYeESG&jU@hy$UT^pZjZQKNt6lL`!+B4 z($9#9pZOl-yx<@H;xGQio4mODx#hpR=RdsZKmN?yyQ$m$?mz#|EB}wN{`8;!%?tnf z-~axf{{Zn%;6Q=}4IV_8P~k#`4IMs&7*XOxiWMzh#CTD_Mvfglb{zOoz(I}$LH-k& z@}t3$C0VM38FM5-kS+y!%$U=mOPnZAHnb_RPW3YrG`D(vujtMUbQ|PsuJv1wogTF#haIDRlZ=e9(4-1XIrFl z=YB05HSN^4Xzvn^D^;&f%9Sl&#++I6X3m{GfBsJV7xCPzq@Ru@D|qTp(X2}!KAh6+ zXrpTfgRY1bHr&w=b*o+6+wWMWijAK}J^VIduO#axw0-vZWTDTSUjHpzHu2)E!-~$! zR=n$o(uFHO?_IK9>$Kg!R;?O5^XcJ(*YCdj_IlJ}n}c5uKimc+us{P3L@+@Gbu!Pr zKk3B}^{D#}-`3Jii3wjw{FFg08o-^0O)_x%^}9LKfeOPQK~h z;!VW|Wr{E~=O_fyvDoZ$Yc`7_t8c}`?y_mT_x{@pJ+tDIkGd#f8!AL9gDf&e31P%* zO2u9Su}m}1L^Dk_*R=1k48e@;#P3qn{*JB}8~jPOIoYJo&GcH!2}uB#!%$8dw?p(z zyFRqA#`~f(u|h-t?6E&ACw=r$GARm-vEBMRQ9Vq@gbK;+`ij%ILroRcN+x+U3_B9} zq_tLCZ^boNU3c9TM_xrnq8@FUB}yjW_1FV~;-uIb@MXCb?vjPewUql~-oDWtU%u zIcAw>rbr$}&N!nA3TXZ~86_V60P!3>eh!+DojuD1=N{q}n&@h6eqrCHfo4dSsCmXZ zYk!kD<7aHz(D@*n!-hx}Fg_?~?4vD9nrwrFR{A2fx$WHtn!9Y*35vcl zyfq()?_~6@sCsvEsX-FOYZm{XWTvMmnJQXwT9&1Se&KhaRhS=eJ-8Q}k>S;6U-jI3 zs9*ggH@wXxLkl*T=+|9J+25nNyU-lvBb z7!ZNyP#^;vsF2?w=z~>r;ALK@JQ~(8S3ZM<3S@x^oz?DVN$cDQafZDIqOWg^AY0&c zCW|2G0Sv0h83mN6!rUpL6-2yU8)67V&rMNiBUAzx|HdwxsUR0olZPZmp@%5O?gc=^ zA3_8;k#i8?0iXjK;uHru^&QQ00-T`)0cS@%Qtl5Q0Avi0h%=|LPHW3myN=5yTObQw!Env(+E{KqA;h`B1j(;&SoqcY>!&NkMri|c#!v|2;rI;u?RP} zB@KU5YZ^qS<~??ivXilFCEDBLHaC!hfD|r3yDhm>FpdyJ;*Q6 z_Pg_CRH=p&AO&~YLWU%x2e~MzIR5ZEn=S2w#H`FIxfwaBMzn-y&|wwC`hm7`wIF&_ z>p+}&{zNn~q6aC>oLB)X*Rc+?m^M2bS1I_w;Q{iZ5)mrVi2BvALiL`*BdcGb2EYHg z6|o<%D?zFXJ^e-0m^p1>@U~josycIq|5$89xwqKQ{%)sk%|Bf3-DN2VqcvwgrL$?ZtfWT6Cq=I5Il^ z4fjAKrpxaOp6XnVY#74~rtwEoJY(*<~}0bJ0r|Q#mDG z6~L0iykR%@H_#<4^O0>VXdcJc(T|37q$M4y-&T4dpd-iq5a-AtQlNUA_Gxp|CeccE zP6^Yk?hCF9>JFwCZMisS?jEOy)4B9>>ZP^)a2jiBq19?=?c-}p$7_cOwT(7qT@^|J zKwOqpj<_tyQmqNJ`Z@a`jVl~bR~YTc*%TW^cmTF{*$^kIAdP}tu_9sn*o*$;b=?EO z_Ft8(<3q;#AVc-(Ud`t;QX=^e{zhxLi@Da#5fItzj)<|tM#^$~7$Lnwcb#uGJ#i}` z;Ex4r#4o<>ESef<*5>%Ni$D$&ui1}=ySPmo81ZkD{KQ7Hbj)R*6a5MVak!%%sXMCc z4#v)i8m(v>z=&$=w&A43izqYU%0eW<&elGc>ChfPQ*l)s*z+d$&x1k)d$ZGEUjHH#k8}&*y^+65R6)h#^9Y1QrbN;>x8`r$eL%+Ei zls4pVW9SQ1@eFV~KINge+Tqt+3fa@X=Q9U>@QugsHqcbm^MviV@A>n&;Vx;Xrf$)l zuY81j{@zzRDd%1)^)F71bE4Ebw$NP%VsaMmuGUE*ZH7|<;<4JUKZsK8w$%44vVJGE ze(5k6TiDislcqI@)TzF?<1E`!q_xuty~8S8vM7JMKcUMcpNgHZ*`NZ{pTzUK!ipNM zIjz}>9R8Cw^U;FZ!wB``F3+30%%eXN@~qO*FOVC%#+x9wvB3CQJi}Qk7`G0zx4qLg9nLC`_tuBPqza{-wAPJdX-BQzM)x%EIX) zI#na7FOk6f5IGf%N|`~q~Bu*fBL3z>Z`x8!h~=p zKJ*%rxgvf}L$cd!LinPd!#K?@)$c^O4j`YZn1j&#T$&n<8UM z{E=4aN>N#j!63>v0ZqDeOHi?r*#OPbbeaCpWEIM!5{4*?b};46)a;))O<>- zL=2Q1l*&9!8Dq@gOv&BEl)s3R%>0r`*-ObxOh7>n!6?kL>=Vjlk2+b)MNt&H^pQxZ zlDsSp?VK4&X^ifCmF1L?!$iyikiygbJc+2!8koAm__TbE|M?b0fp)#wb6_E<`|yc8tOO8Mkc@RU_4P1KGN5vYhyL3K^Xyw7cU zRp|^n=k40IQ zwb`4+*__qco#ok{_1T{V+MpHMp(Wa)HQJ*^+N4$5r3J~_A+}vXx;wl_gCaMyf#{$UHTfheF&j}rm*D` z0kjA)$~=e=KwAVxJdDHJ>AG7YzP!0Yxg8L^V+fqno%rjVtI0=+P{7RK+k3;A@Uslq zaa@TA#E1A?ayy;=<0&5g(_4H*ILO5!H1r%bDO-Vjyt7?M=6NT^%{jY$#*AWHjJO^Z zvR&uFjnrKe@F}0ZO-G2ZAW<5jsM#s_2_R_8pZy7;k1L<5^0mUvjL{Xu14^LPW4p`3 zh|9f<<^4VM+n|Kp-sGhtT++6-W#3{eUH0Wa&Zu9}@?I1I-`Q0bdE{Q&l|mfSAs+Iy zarz-<@}@InKAoE)CUPPu(wQkrDl5Vw0p6hq)}88V@ zB8I?W!5ydOLEwAqC1J8SWpq4v>RK7pCo~Ql!f_~Nl%>&I9c+4HM2cd(3u8Yv;%M9_ zWNO_Mw8g9iWSap6cd{n{=EsCusD^r|T&o_Fg24D&;Ef78j{*abBCwJ=Wt4)e{EId# z>g2N#<-dB}%=zTg8o}zKK%IL!UE{JgMiXSiDc9L4&RLquy}XRTD-)KioEfT|IjW2b zU;Xo+`q7>1dN^iet+TPDoQfT@;%4XVDWD0S`|T>qQU$TfEh!c~iy+^BsH+QvtH3&> zdHzJ_i>od8)JScCODK*XLc?vXA`#E`YeTBEgQV(gSg^>I_Zv9XpKfK*ZW^h?yW2vuJbXjKoh4T zi!P~SuCv)Lo>sG=3B&8kE}!169}?;wBQWA>w5FNHFUo0L&MEW)>f{k!cs7Sh_mf-F{a+HDHAdB`iHJot~?X5 zJ$tgTzG1))sIp$5L+gmolM^p1xqnME3ShB;xNARC>p$D;#ZK!g^S4Grug&HN{#jMQvby#N#XBz_^D)JKu+9GM&)x_( zJ20qO?J865lyGb?8?qH^F_Cy~i90W&0_@}_?M0)v+8(gH-mv4=pVhW(uO{#EUR9cA z6HL>zI^eV@`ZSLtW!}{}P%CPZVzmi!9az@COj7~8@;Fy(EoM4BoqOAzfv7`FLlow% zU*j#idk7tb2z*>bme?NA6-w@0{{o>$jYXkVUHejoQiW^1o-JDE(h=!Adh?8t} zL+1#$Vk$($&bGJJk*s{voQOkhdJ||o{^8&`IE%P&66dMcb!UgpK-ByG@h!rn`lYQi z_AA2$EoH26hDN0_IyZh>AYs$E1|RVccbq#m#>UZ^mMb|zAo9j@Ha$YUnMUuKJI9+7 z;@mx&qm#P$9<_yoK0G;zPyd9e%5WKYsxD(XVc#L^|g=sci)#rxmMfaI8yl z?M*7Bt302{^c#jYv6Dw>Lq936BqE~X+-beO;vP-kUkLi3v}1^6jwm*MAvYJT7{4XT z6-7YAOe$ejwrlcyr$BzH%FyiXQEg+Ui=mS{c9cW5LnY=JCZT_M67dYBu;YacjP{ z@u~Q8%sEWzBQ`fI_|ZZ6>!23OTyH0>8a#4etm0N%K)q?e41B=CCCJFFz$LuE3{<=g zd_*4y!O$@v5~PUwgK)l@wj6dv4Me9R^mwMC`fI;Ia%Zh}kRwJgvuCEUb^{%7yoD+{fz*#7iW@eCI+u^g=g;zEr!eyH^N-?<{-QA-)Hi z6Sf~jte!3uB}AMWyixWtnL}c1XdrGKYM%L|d)?a6#{RKg9kL-r#-DI5&YyI0MxUcY zNAw&Bx+H(vtuwSlT{0Zk)x`a^+)kv$NHWD-Cq+d(#b_@>RYV(B1o{m809Xvg9uJ~r zy!DF+L^^bR((-(-d-~)5@L2Rj%|ERmvc}w(#do9qj*G=lT*U0>o!I}I@IQ!ToJ8pN z@tiBfKg>i=q+irAu1D2S~N$B-&1%44Kr<;RgF|D8+;^Cr%mI(PEy>GLPhphAZd zEo$^A(tj;qCKX!q=+d6a&J5(4t7_A%M`iWU{^}KDvMMukiTx@uYSOS{%bIQL_AT7F za_7>mYu7B=yC0KbC7M@n!E=OW0xpbD7FB|Vy&^tyhOOPdTOB_py!bNa%$hfI?(F$9 z=+L4^lP+!gH0so*I`Zes>vS-t-ZTmLv+`4!3?(O?G@ZiFS6EAN3IP&Dmmosnf z+_-?~2BT9~NL|46>JhJFr+B^K_lMe_lV3f)yz1~C&wpgUUOM{t@?mrD4zvDt`2XA| z)DPbNLj2|DpMTaBh?#otC5RDs5Y^XUfZ;*-AcXzF#~*&LEqIZD10I-Nhj&rfV1^NT zwxLBKR-~eLAI|q8jG$GAqDmc}$6|s0E`oR;fF^QAV~gGCIFWP$jyL0nNCJrDK}s5k z9g0Jy$D)H$KDnQZMOvvBiCy;CCzszn_$P*Iwl}ANVA5&kjszNNp`K6znwpn_PN*lLlm2<-rkmY(>64aX z>ZYPf&S|QaqiQ$kpa`)ls)UisnklTLrgQINwCOFS{f6x&3ym?sMGLiS zuclU+q@8pwn(Vv90vjpR>@K+FTu7g)sjVxDt8J#VUYahpUzeKUo~~)_bg+2V%W1Xv zUiRs}a)ar1toz5x zxEl`p@0jX)Hrbjs{{B4lOA}tA(oz@8t<&4ui8;V%ldZV#i?KfM>9rH-{iE^14ff%+ zubyhu8g5PNzf*HAeZG);Zhz!^BdV^Pau+~t(XCy8%O3KsYc{y_A$ zQ0c9QKD-|D95}zsfvRih^PUHThqy+$j)G2nBKDdB!>nyDG*g74h)jsZE5-$BSo|Uw zHN(Z5jL|KWv!WKmNS887kd1Beq8j5UM=H7zBz2Tx1kvccInt4j>l0(~{3ysl60(qn zJR~9$smMh#{<4vdd?X|zDalDvvXYj(BqlSd$xU*ylb&Q`OB@54&G1DrKRJgU`f?M& zSmu+hk&JS3;h3&K1eL0^NJADP%QMi@mA?F?LK*`Gn|P!pqnwB^iRlwr9upx?F$gx= zaLbk0(v%d*WkjxG&6r4Yn;40vW0=CtaQ*|8l<8$c8gmA5RnA^(s?GYygpbYjyW?d(WF6*AC^+>WS$^NXhkpz%#GHj zCBsxoC0cnAV~RANjQFTLLJAac2DBh8@uy1}feDLl1*Q zvIv46z@Uo9JT|hE6$@co`cEaaLbIhj$W?}+ShlF8vHyI*F6%l=gEaQ4qj;xS9=ck6 zLPjPbSqfa0B8k@qwjrsF2vkEdQK;&*oEtd@5guSy;;I!*xOIqYVOtW@0+li^XbC8! zs}x487Pxd($TRJFnPdPVq{#rqAJD>9v&wd#yQC#~Pg;s@61FP(JOgyOn;3zj(<1&y z%`HQcI#Js`WGaqvNPQm=-O9ALEBfq8KMMlT2J^MTuaQMo-8m3jR@0UheL#e_TNaX{ zvcD3}Fp2fh0}PLV5lVkxvWS99Oj>GAX4;Il>hrcSXDl2`)&6`(2In6d^(W$8yKKk%3)#AX)xr zSD1X{qO$hMN8WOj9|C5Be0D0DtxGa`kc%3NBfTyu$a)E?ROtvzp1jSSrLg$#~w+C5{azgQJX`l{MEk3p|tVz=*fKniu|Nf{#GX9~0 z=;Q(nx!$z^dd*b<3|jys6+l0uL+kp`+SXM_wg3Ps5Pw)Yn$xa!8-PvhR6d|SALcQI zmU5kj2%wY{8mO^(${lnIq}wv#bq^jiP;m!4-qC)+b->MRd^<}|=q5A0OWAH@lVsKd z>9?%fjY@;?`#~)!h_-`$@P!wo;UBy>#xt(*jU#+S|K3Qz4^EwVTlzZm9w;lLW9|_R zygqz^aTN;v0glsLRp;&jHZXAmjhx)x^&Ypy;jQw4G(;n6iOxvgeeZSq9NicncrFYQ zZyYOI2@4N8cV2p(qZ7R6%5Hed%YE=%0Kp~HA$QHwuJ*OFz3oYh{FP3tq}4T8Gv$tGTpz3o*M5Pul|XI8XWPJznP#uw+S1_m*`hMRMiB^d&wb*Q zt(!OXq0vlBj5emLn8pZN8iE$J6jz{st_Y8jy4@ZS_VK37bD9mC;~1sh$xKnp=fSLA zoVUSXG>yGN{Cs1wUWViG|;ASme;vrxg;FyMO z(|r||Lga-yL102Wmpl2>LUkT3aTTJ0o;Z0N8f1pXg0rLNJ>3869ao+xA_b z9$;WEot_E;VF!|#NkqX!xmpBdL3+N;%{8jc1kl?7RJn2Nz6@%@#E zP1j-dSYYUZ8&-keNtohc+u=o1gvk;Nf?ql{R}HRJ4XD&nF`x$K;Y;8c`*~TN!Bmw^ zM39|CRB&MHwO~ki;!)+<`H55RHJQLJ zoc&)C%HTFJp<`X&A8_DH{TF_*VilqjEtVA)(nS8Y!I^~7-gi+VXh8-sTG}LHMJ)1} zScDf5t|2%Y#(j0;`_a-pjh?|sBj8a$?d{$;vg13=QXt0IA2OZ_G{%Y*qGvTzA|6DE z36v6qGLdpFb5>?d?}bRHW6#BQG+R{~4C?wd24* zBqQ7x1|B4$Sy%Ltq(We%=5}cpVWd6@)q}}iA1o>?s=NiNnup_G2@UN~;0X;`Hvdd4kgM(d#-7;v6U zrdPC(X{yN{k>&*LP@dF?-y~7B{K{(v2W#ep>!=59(oStw%5HW}ZQ=wRVNY_FX2vB) z1_99Y424su${2rY-%Op6HV3ZPi0*T@O@oK6{)XWe+`^L&s4ol6w4Pj(*X3Hc{)5T|>l zr+N|&)P&G)YEEt{(G4XJcq%8t{{4|{cBq0nr=b)MxY&?*3XyvPr+EI*=NyQ?uu$iy z5Y-50)C3aV2+k2TsPRasfu2dbuuXz)2zzW0dCHDz=0=F-Cy%sGibCh~(2tSS&5>dd z0=dhWbX@$*&Pwo0zu+hQjA?;7iihY+4~Y$$CJ(VJOPi9Zn}TS(oM?gOD0e1k-0+G1 zD3F#$sRwZijV@`B!p6`L&CK9Tp(ZNOAnL&|s?Rv8%jgWvNUEYfDy5c8rDm$8#*D;V z>ZX1wsBWstFw8+XjHiYws+#Jc0#f$CiigT)=~Rfn=uiilXoj-RX~L-iRjK{hXPwF^ zdCq4Nedw@OsIW3;rO>MWatvwTG>-ro>#IU5u~;bZbZHIRv>xlU^5}FP5U%p;m;O(f zF6;d4XqW2izT!>5Zcebqj1t}!E67-&#td;=!f<_S%xog{4&jQgY|BS2D9&N~yN5{>Inr`UTCTW;vtck{K$NDDM zs;zW7t-tCfuHODAl5T5_whHyEEWjR-n9k79D$j;i&59x|3#sS5OfA{=s1J!P53yc(g3dMT`l z?(2@u>DI0p%`PFe?osG&v*0cy$!_YRZt&VJ@fNS~9xw7HuktQ0^ER*ZJ}>k}uk=nY z^;WO-Qqq|jSTnvCKyIX{IR;>^B)6TU_aX#gUT<6=CPy7qG2vzV(qTu0CHi7gg5iWp zLPT8dnL_oK6`C*l`PcY*Us>&?T`Xgm#pCN)RaVwgJgNXlD%JZjg*rKu!8ou+?p}z| zS}++53I3vn0l#lYG?Yno7iQexK#1@IFT_~h1^dRY`?@gvl4S?a?Z#Hg8s5E`NEN%2>O)j5n+ zNv*JH95G0!FKfA#3O8{P0|r-I6%`NDQ~mED;szO;R1A+48q#nkwO}r6W27|}Ds93$ zg|Cj`SAnUL7b4;54KX(oMq|Yn7|ho|aPO3b;Y@g88D543E?8Ok7DSn^`6;qQc%wJ{ zlYpTgMZ&QbVli_iUwKi$c^y|gRs|T7Mkeo;c2Sq(IaziE)>3*G{E9MXXrV#T)havX z{!J#BCflJX^%y7PQ!kqqZIuKv+j3w@axw$f8DJrH-SPro^WWjuHdlrtL$ZSDmn@@J zI2~CVQb080@gr$4P;DbBrIiy znyMAC7FUJxamMM1SrnUJFj?ZN_3@KIBPdH)k~vmXI)qAN8l=fzOJ5o-B{ek4)fY0f zqzyGwS8-Acw9KirL!+4z6r&UOqB|SXtciun9iaT760`wSiEW$6aRz_1U?#+ijc>eH@gTo!B|n!6}`~{lhTX+=IMa8w~W! zaR=2!TShWmqzv4{=^C#|-L`4Ayy2YAIUxlg9ZAT-K}6hOw>D&tHnD*mVy_&$Y28~R zHp&gg&~+Qjt@YNu*ksF`YttNy#&%_&-G=FbXj2HWM|` zwcAvrae)QaC13bVkl%Mj8cPmdD~Y0tr?~v>?^0YzAG#a<}JxC+BmjdyrSl-@%m6p(ixk`Z!~H@Nq~VvNV7k8hy~51;TgIE8m# zLWNR>K{%`JA}7q`cHcyG6uR=3;I`O-koCx zDypJG6qi$PR*;{Ci?89GHD_$7N24&!$@ zB0;*eD#~ey;erJPzvOG7i3XB`$3d= zVTk1Yw%*Ry`$XsyOd0S}rm+7S-+g&xHgkm7DsHd95~bL48Vy+XnyLq>U5spQk!WOo_9mZxL%O<;4~FG)@!N{V^R ze?a4xv?+R2;^+J#{bN$#ykQ9Q2#N+mbLHw&Q0u=1fpNL$lO{YPh3sF(5+fP`7sl&@ zWA8`L@0*1eI{WN@rr{$6tKS7;sM7g{M)23)^EXcPGX`ZqdhuUB_GiELZ$I~UzxRJX z_=msvk3adBzxkg(`eQEdPD#+}gtVZil%{6uO34O=in6|i7TxCk`)vA?uKuGfK>QOp zP(Z z`KfKSoK2F(J)G=c$@<=tDZ#O1_+I~Qv8@awjVkN4K?)4KJf+mk2O%M?8A=`wd? zM?Ri>SLxE3eqP^Px%%?r>j!^tU;F-4sYah8PQU>PEO039YzohLXtYnf6>UuH z!>V??F|_{l<1t0#D#K678Fl=zzZ2_1&_fl~YtO_hvCPu0Gq~*1%P-IP2h1_K6qC#| z(G1hfGY3l3%{SqUQ_eZ*jC0L8>lDb%JK5wD%r@~1RM0^QEmTfF4NX+hMF&OnON1DW zRMJT)t<=&>F{Mw|NV!_gi1Neb+)>BLvu3BZpKm-WP=o zx5sALjd5Ltg>6?@uB?@@+awuWnBsM-!?0V7)qOHx`5bl_GJaWZnbQYfC34if;5Bt$ zm(8NpNt$mSG3EeqhOXq=TGhEh2XV#HS8^-nSm6pKZaCkQIVL*Z9TO(_$fctr8SAXC zE*jWS@3oS-wOTx`$|&ukgp#`;bv&D|QZWc999Pe>8mbOE^NiSUX z*=etxz`$+KJ-429mwmq8E!GKlY99yQ_~VgJelOmYSAO{BTmIen=YJ!N`O~O}UiqTKZT}v8R7clc{K>6<{QB|PZ{Pj*;g4Vb`RT9U{`>LIU;q92@8AFb0T@654v>Ha zG~fXdm_P+Ckbwc zj&an37+DfSDOx0vH8f?pl&FFoh9!nblt(2fa6~iyLy13Z;T;hY!#=W*OSq(8E@~i& zSqerLFN`53uz1W2QgDXMv`7p)nMOt+Q-j6)2L)f?OlPu0l4D7R7I1J)NJOEE2oEgJPo|2&( z0wMkdfxw6}5K)azq~In#NyJscQy{5Kh%A$+1Xy4a6TTFPF1<(*Y?M(JCXJscbFo5s zNMaP9bfO9iIm)G+;}2%!<1n!J(`C}rh|x?)2U9B42dvbmIwYz+)rdtUa_I$y1Z5## zn2bAWl>%y9Xho6%1Xv~m6g_RD2h)iSaxSHVBb7x--KmE@a)rd8$AJh_xX!P>NhI6dq>-I!N5_H~WYOl&m`dj=J7wWBT#D|Lr^f5BHQGuWBxTe z(9$-PxvOa*VpUneyjt{=D$wOd<(g7-9&#Wc6$l?&u?a$yg1dp$Yh^Fe($>OHtrS3N zD~o7NAzF}++J%W~nTpgemJzAi?5Ra0ncocRx0e1LCPIEuM1LluyhWXeYPZQxYx+|o z$>>2YRGhBB^ZYhIMQ~Cc{z4owV(YDH3J)QaB+s{;rg* zD@=i^xXN1|GJ|Jn=G+ccipTwNl$#r8v_NZz1*tO#1rWm@3ZTvcIO3hN{u>eX-tZqk zl%+xV7>zdc0L|e^#y@%x9`%}z(v`OKr7`_F*u?N3FUYenDaq%ain1U`l|=>x(B4YB zZXrDVKtWU}0Hpfa)BV-MKs>!^87?H&NbR7atFU1T;yQAagr=Z#y^v5BB-Atgzz8W& zYE(mulGwn+4S34cg0xo_2vGsAlTB$>CwkG1#=rL1=OJ&kJo&5# zPe(l9`bK!Wk$yKhKQI@E#I6VR9M=~%{pt4gZY~VXT|Ty41^MlgFHs6$mvYa-&>Z1G zi;DK+u30DbrKJab4fmnW(8I+g>f1HwYuTzbp*x-;4qaH#?&j9E?ZrkBmJ0agVnpX* z*6$a|X-_P>Wb5)|>Okj;;`a5u2U_eBAVK-z?w&TwA*Q9FqxpEXsvY%{e4*z{8(_st z*{JQcFj)PKan(nmy+nrnUcYQk(l;54t2h1R6LLdFDkn_J+0@^7l zc-R+3!AXcowyFyL?*Y;Yzrt?mwkin%o2&-6FC+Nq@KE6casd>gkL`L;29t36B=ELc(35n^1v!ud$FB^{ zqUmPo{Gx84EJ*o4NQe$_pqvQnVu`y%@P@*${gMl^%1gcKNA>F9pdb(gS;Fm(YL{${ z?uP7<*6h6)L9tq_@7Bzjly9F*$`A))#()Wyr2eUr?(e}mDTW~M$kwb2U*ZniV4gBB z4pESvpsDUwaE2-|$?S{Eaw)_HF`7oP#RQQBbI_RluKlox5*N({J4y=>ZwNc?4|Xw| z=&6NX02Y-H#3qpiU-9_9%Dg(S4xGTfg5U}f$`yGr81qVs_=ye?@C#os3?-=<&F~$` z;`anex-e*vmZ+3y$%RC)%g)Qta)`;kC>3>Uh-L|m>@okw2a;k)jn2UP!~zc~;_*6) zv?2?vJPYddYK8D|l6t8XrcRGmi^t9jy~@wD8gjbUOY}skjnt2m&S(c=0w8b59$$#A zS~2t(a)k=13Oq6-8S<-glE^&Cug=RM{>{rvSPUdl3$h5SC(nrqBQp0~jU_vZka#P& zMp7h0&+drQ92aV;+^7=Y&?N^lvU2hXnX)0#5)41esHhSi;Sx1UGA>oZ6tTn>v1A{Y zf)MF)CG0XI{?aa7tuG0)FfB>C4AUb5(?sa+O8)2sUjh>o6DAh(nM`jm0CF-lb2B?) zE;-XO^Ds*!vUi~EGhd=IY3wrb0uCY5G+pyGVKX*mb2e$SHf{4ZaWgk{b2oXjH+}Or zfipOTb2y2!IF0i-|0h@QMLChvG|y*x)`xD+$6lDFM6B~V1!sA3Vmzn=KbmtmsZ%?6 zhIy1TJn4rye*--Mhh54?g4A>VL>!|t%=32C6K?1Qa-vgN;8Q$3CpO-*VxE(1J_B3w z^E){+W6&o($#Z4`w0Zv1Y3%cC)aGky=s}6+BWflx8dN$d6l_u>LK{RrNo8!DVq(go zI}ye}bu%vXraLgLb?OsDw`W2(r(c!kEc8RU#z$-fPS++$(FSHR^p2X6u6F_zYF}Bn}OU7}|)K%*AQ60!=u2f$RHFn5mL+^rC1BOZ4<8xT8JO2h{ zB4#v*^g{hKTm9xd#Dzz#q}{frTDetPWHmOKbwaBqS|pS|24;W!WjUm0cSa_7BIsRv z)mVK)M1izm4CY^K16lBuP^Tp;Qf6AIwOv03N-LvV7dBvZby|saT$Qz4#cyz0lv>o) zX0Wqk_(x~Z20p)sS##h}XS=*C7i4=Cm^j!5KSP3Rva#T)3MqyDjSUd(} z?^SRhc1XpBUj8W-Hr3{Gu5@oIhj3D7SCMC1g``M9G}BJWX<3I{AI4g96=nG~Kd{tF zX|zT{M01RmYY{YQAyjIcbWzh5Y_r95Kqquoc4*~x{3g~n>$ZR5b#C=`Z-@0piSuqd zR%Q5ha0%Cd0CzVJ*Innca2dC89rtk|H*zI+aw)fRE%$OUH*+<2b2+zjJ@<1#H*`f; zZc$VJDiW*0!X|r=6;*;SMXVyjLZBpasv7LOP8W7j!*xy23u_B^5-5wZD#KFo5ORM$v30v7H0x=4=MV4@%XdvEdPAagRSJ78Q+pw#udr~R6bbow zFeFrW{smc=B=AXhLjrwsLZ2E_@L1@4v#~LB7lr;(e!r`IgI7bU&b#u_mSig<1``?? zPqPxZAuDkf1qhgg2__noC78h5Ytf)7kFRdXXS7yxQOmA}m%iH%^;MErLe zRT#j^S2fLkx-(Zmul1IPl?h^B}Oxv1B*{>vo>GYjo%hZl&7f2)L|Dulo?8W~}@WDBptF*NB< zG9zTh))LF)m$GOtr%cO(P`8Q)YYxrQie+n%YS$#Ma-2pqi}=7%6HI$61=zd4;SAA}M0ZTui|hQIgR4 zk<7Wu7`eMxte#=4o&7nW>6wKy@k>O~EBjf6?dq$LtiH-jnr-Z%uW!gajGmv6gmE~p zjG2dQi=WH!m09*RCQa5l?a-Kw`N|Cp9!=)ZaNihV2!Lhd0O25 z6eQGKt>FCa;K=DUIPD)~u1aBAAd(u^hKksFI;y35s=@WADQ?tG?&FwEBy0NQvhU^? zPSU2$A$~28Htf}?n%$yRqE=a>nv!_6Q#?yr~4 z;UZ$$1dXUYZrT(MthE~D=+Gb%JFs=Fsbx*y+u6IYOHa zik;Ds^Gs>D(YVci2=;nF`>@gaS`!_2*@IL!t?vlg&VDaBoCW#|Z7&;TFNca-l6FtOx6giC5bZD! zzZ4Jn#5uOd_mI$#fbXylaGQWXY7a4D4TVUGW>LfY$Nx<4;yOZxH$t_9n9U}#H5-V; zWsnIQ?-spsyC+GvN3g}O1e_IGoKrZHbkPSr8W?-Lou7~Z*-pP@T>Uy}$r(|;U75aN z(#d;SIk;R$#8pp_) z@;ug$>W&r+z5e^ZzbP4?TpMY8px`;kd27|7@z?3grAj@-xGdTi%6sAbHaxE-KTjr8 zG28#nOI)h^0utO|FSzeVAsHbkjSVE9U2IW65*5bv>N^= zSL-CF>cX&)lgW_aJ<{Vneg(_7n@CwHyXh@Ue*aYdBdLnz{+GAq_Z`)*{pYisajhLU zF|dMl2f1IOi`_ko?Avpm{_gQU@AZD~`M&S{{_g?*T$poC17B_ux9|~P zM-Sg>6Er(FR(}Xzc(|5x7T0jahkB^9@)Lja0Z8+K)o&X=a6w-s{=!MD27)3VSp_CX zgq8DMKRJ)~K3Zp2KBxAPcJYH|M`1fY>!w#n|9*78_ie>Tu~ukb|M>BC)yB3wE!H~~ zXI1p&JlPa#E(CT?zi)@%N1(<{BoBjr<7RZ-HPP5{OH-Jem` z|NZ6vPv*b=?f?GqKUTw^^oR6tmiAZy;-7$l0t6ELhY%sbf(I8G9H{VMM2870TD*uc zqsEOKJ9_*G^5H^>BPT)(39{ixh9z5`L;e334886j5x94#f%#}ehfLX01{fc3lnj$z{*xt=|K!4C4+)`phMF6dNz;@{!D*3|bzaG)n^EpL zA)9AV`KFO(cBG_}Fctb_Mq#E2BmOpRXh{>7O(rUnqf7#7>7Qik!DO3!TI49CGRX;3 zrhsCkB%{79IwnVUI`(Qpbk1aFE_z~ANH@zo1^>80mpwO`7vT(6$u#j;)k~Zx(|K=3?TI$fWEjXt6>)7A0u=J zz4=|FNXWBD;PgcPxe$u&Vs2XC05zg9y9F?T1Vl)fR3M8gh~s-0`=6a`$T~eW5OzHL z%^A9qi+{XeA<6iM3IVyGk|E(B2nai0JR_5p&FNdQ#rN*7TB#xRO; zjASgM82z#mTM58>@6*>n#wUv-2_SqvDWaE{6UI0`U?F-eQbL?)#y|>kkc2E`AkjDy zHL`I^ZvzM+6B_&lkF=4)dmEAn&8ZVj2QOa|kNI63fZ)DHp z4Gdb#0s}v@v^6GOk7iv;pYRZpGZ${oZ3oqe`$m+{jF{^Mq|#s1>U1R8Z6u-_$p!K} z`lNaF&qo}+$V4kT&`wp-X%!)rtuj@(w5_Rw2?>*-!uObxT10;pvEM&dIk9BHbY&*J z;7^}P(89U22SX(%sFLa?3cAUs%v);W)a21pRL_MS6rl(8l&Qy6aAUs;Yoas;sFx;n zWoCtAInU-MoB~j;9*gT*x5^%!-V;W8O^ET9#W-2`Q&UWALkj_$Ky4*-XK+fW!Wbu_ zzWySlsTFnVMzCQvu2Re*l3mlk&eSTV`E*B}r7T&US0rUYlB@_N>q~>$5iDv1v*a2r zV@lfwUGbD%RiNuSVY`v(G3iQjZEaea3fyE>B(+IX?pHO-RjUGQg380lZYB3z62`WK zt{ov-lU7_sk&}(h{V8m%|R&o-sw^4V76mw8~led$NKfY$7Ju%qmz9u4L)XK-#|Uj+7%3-Y-L+ zci6QxiXI1acc~~<$9REXNs7`n5#bNdeBfBRa93ehve-V{;owPMVjqG)$hci2B8DO6@sS&CKM z5ioyA%?fRk&mf%<;SLwlR>kwe*i?l@x0Z98Qxm6!Tql8+qQE^>tlU_w(zngcBD%)l zaUFWMQs4TpQvO4)@8{|DrO9W}aVOE+sd#BQVP7R2W+QM~J&p?l*S!YEOUT6CHMZMMf<*a{~X}!{yf4T zepHJ8a@zl1?Zzi`^Lq~axFf&L%zwV^t>510`@ZAV$Nr0^@BN~Hf9Kn;_xN{n{_x`_ z{pybi`;o4g_cuuXtD%4UA!GmhcO?H+S3dWzuYWTafMMr)(pP&XH-P<@fOe;S{%3yO zw}2$Ve-T&_a~B}HB2!JnXVm9_=f-mWmVFdRcOpn01o1eaGJ3EHoMJZu^&}r8ShYoK2J&rF zb2(NsG%rvzL>F61Fbqc`Zar3t5Cb)G*dp$wiFxxma-%hk)-`%#gc`9newA50mVt9v zhpg9&y^)8d6fYpp4`U)**RqU_)lj|ThY!$14$@hv zLNy=2EQ@qny`&}KwSTU%J{bjwpyWwy07@sLimOOsuEs5uH7%<(FiZ7HF0_FU7G*Ix zLuwd*0x5J#xf{XQjMlhD)|gPaa}WX5Bop}^Q7K1X)LM-=h608&4Fy^z`GS~uU>M{| zgm6-)1Hp40FbXPp- zmPQv`epialGn;^BhPDNO7hzg_X`8D4-8x}w}$!{J3jvpCh>S;?Xr9tEemu8}2 z8Iw{j(Vw@ z`fQ-ei-L-n<=U5Q|0vVjUbC7zddbPYSY2 zVHjX4u~CQ;c+s*38?$wRnUs;TFI%%LC=)vC9yO~MKiaV*3$#8fw3?Y5K|8TC`>;ye zvmRT55Sttea(zKF6wkZJ{ zRm&SlE4OXyw4~vjKB|YWff`+Vw8mi_MoS>1WJaYV8^>`Of(u5>h)0G*vxpl;Cfl&g z(YShR9I=73UaK5~%eP#+u~{1)q_nnFySM>T8Lp8UD_FSKk+rc=9L@=|heWvGLAibF zxKUddh!nD?{wup;E4Cr4xTl+$f&{s&Ya6&5yJJMSv0JyyskEg_Mv6m8Z?Koe2_HU!zjze zW|6`E;i0}TY_bTvsY{b>8#BuS#H*CjW%o)y`$8c=M zCS0J+8^(JZz*M}!27JKp0m$$>vOMg>+q<%_yT+N@$2>d40t~v6jJjh?!lyQbPT()%*vAt%a|;~e0;l%tj2F##GyeJ)!Vg`%gD~L z!z%o{d%MR_e97gT$IlGHe+(FDOUPF7%9&ivM%%Nd>$)L)!7i-HCELrm%*{2d!=&}Y2Oy_~^Fe99D!&*hBA*kQ@GT+g5U%gyYwDNNB4Exr~k%w=KC*GwIl zT+;tby|%l#$a~BzE7P5f%+Vav*L%{d+r=!H$izX@KdsY1jk67H&`X@eOpVOR48elz zxZ#Y{K`pr&y|w@>)B20XPYlpJjnGyN((t^yQys(LywOeV!D>Ci!2Hn>OwZ2D(MO!n zY#q|5yw#~&%wCq| zT-j-j+V*U{;tbk?-NXtl*`v+Ix1Gvu+}O#B(Te=n=u5_fy&f%{v?WXv)Sb_fYu!?T z-E7g_7t6Us924J-wGM)|;@ukPUC7%l-9AFz^`YLzy%p!p-cND01pD4ai?{LJ%^%C( z=|SH=Ti?I&-|ZbE`Hjs5F3R&wwg}$efa>7B5#Zh(;T2oq29DtwuHhTb;T`Vb9}eOn zF5)9j;w5h4F2c|Yu7SJAx04Ls0D}TlZQnDV z-qfw*oejMw{!|UB2W5%NF8C#p%-P1W-$5QB1J2o1F26Qw$XLF<{$7q8$Nb~@4CYa7 z6SYz1Cu_JtYsz#>K<~DohhcUM_eicKjtuo zR$k=eErmyZ<&!bUjLzUdZsvsy6>SdYZ?3ixLg@l+=X7nbd2ZopKFVrd=YKv~_cbyF zku?wCo%aJsdw89ISTnVR5JyrZk62I`8dK*WcLnvrxy;)99NV*9?8(i{iSEgvt&+}}*opS|TTyzHJ`xd(l~ zHJ$C3-R|2y*%y88IQ`hhKGgH;+Myln#I5NbJ2Kl?OUh{ejoNrj%(Rt^0FBv#JJv{z zxnny@fS`nw<@WyBHvP_1z0Lf78&2Kg3EaE)UciW3*Jh6L?+e_y9K_U~#qv$^cO4pV zP43#w)q0%P&FvB?U+VrF&${ihVhzkw?7{AQ#}&-m`V90FeZPP`^XBXH>YTn2t+zHG z(}@l9W;@M3@9~=)^C}O-NdNR}9rdOD=cb}c02V)!`H>Lm6A^kx1q1gnM3n$VShuqz zNA%0k9N9j+@xIH~d3)A6?Zw~g=|11kCcV$C-S}ib$^;$P7VY>#U(j{D&|#nSvaQTJ zKGLe)##LYRVLrpU9Opj`)sio}MUUoG&(6#Ix0L=L_VVG*^{o1kZ}pnr`ReS)pkDZZ zOZgKW`l9dIvOoN&zF(qKQ+?+oScFAL5uwL~Y@JdCcW)%fSSFcrM_f$W#q8P={k(>L z)nd&3Juc_FyxF(R^T0jykAKwe@9i=Fz?ILnj~vk3!Pmln^S-Uk`hU_&4-o$Z4iq3@ z;J<{+we+Vn_vrpG_EFC?DRQ-jf4q5cKwDtRD49-}H0D8>~@w}*hexz4Egx3_OW z#fPUhEJ_omWvMWSYOEZT;?T{Mqk_~()TGtRM=_he+1hDUp{$>3o}Ah<%i5JEXXXuC z=W3->X|^tz^mo_Gd4*Ty8C&UWlCeQPSMAxgZK%0b8r{u2b@J%oQF5mmd^6AO3N-LQ1QS$nK?WN%P_4scS?sUCV3Ke# z{q)jcHiYmW2{|kXLZ?O}4Zr}26K%i@rMfAji*Wquy#CU|tTWYS zjIlc!@yigq?TX5YKl_Mc5=qW#{>p2;?^2R3Eb*MIu{rIsnleWzvxJT%|Hc%u%HMVi zNvHUTi}JV@!{m`bnV6c+w7Zf(OrEi(%12T%(o%*ScKBh4 zBSuRt#w51*VvHf3GUG`8)8)9*jXy>XN|8%8`DBz+R(WNXTaNfIP+gXJW=cb*nOl-? zKFemBJ=XbWpo12AXrhZ&S;D}KR(fd|b7tDmr@;z%W}l+jjeHxZ{?4Zo2EX`)<7R)_ZTh`}X^9zylY2aKZ~W{BW|XzFBdc zovvA5=+1>4amp*V{Bq1!Ue?UXM|ONtkNfR4L2*(0981Q(I$b^06HQ&u%wv~*cG_z% z>-8(mDxG0*qa}0q0)aP@<<+fg-Sp03w|#l$n|J>5)N`d*VT0erFHYdo1@rgNvz^}e zMv)!&`+~#m{oVd#sYjPl=g{U=Tg2 zM^J`Rl>R1EPWuoT#@f7yb8AAO&wO_pM7B|tLMmhVMFq7sZ(v?i_42);Pp@>%2S*SvtKC}EoO zj~0B^)R_5Bc*Zk|uag)(55zN};ZvUbO`kv;=syj5P=qGbWC0Z@As6RR zg+^4O6QyWHEqYOmW>lja@T3M&t2o9$8j6`% z+&LDRHf(h{El{i8Qb?`%ly9<-%S^SGv%eJ8Vx{{_#Tdp@nYr|KA#AEys#=z$vNVdL z{@O~3IK`o^22`qE0oN4ilC*z>sC6(|)j-thIfi28tQ4@yTSvwf><~r(vPc?KcS6*0 zS|t}hb)^835i^ktwqD7bh+1lzmA`!TF*nW1g)kI6n7rUOZ5fDW;X0yIaY_YM%W8IT z2vgHZgs4cms_qy&5WlKcsj2;nV;|6%&~_@aoH|2MyG7R52DG(f8Ln7LtJNkZqYAA6 zt5!%9TQk)Yki3M6UBk-Cg;<-Ev}n)E)UxHwb(P=smg zm0Z+7691(OWA?k?*@iH3p8Lv#>B|VG5|_cqHQ_mk@PJ%2H!HaS!v`P(2D)tGR5k99 zK=_hlJ^Z7_zS9Z0KC)v2bHNXJ+Hz?P-FsU+)R&Na4kQ8`s1iSWhE|L9a(waf@5 zG+7{Iwy~Kt>rEs9p%N5G1}OgU0mb~|Fgpp%pxv_97qlwH{{R(aHcd;6yq7cbowBSR zkPIL&0t}^S!(&T*k{A!;zE&adit4c1f;4rvKaI0P&T(l!UW705ki`BdPF11ZKDi?V z_SB&{g_mLbrP05<%~k;rNqM2xsLh;fTnhcMgONEXbd_!8l!PCM4KuJr@FOllaT ziqM}nGpD-D2v7tW-Duu6yHONsLXWns%ii`sl19{ABwPSKrO3Sxyox0k!|p z>zXt*7n<#GL3*83H8bMNbluFt?OpIvaRk;vrnRka3v)`B%HwDTIJaB<7IpjlN=typo#*oMeS_&5UE%mB9lv77Dh?4hW=)|5x`5(*mQ^4-rHV< zvTum%jc3H#A1@fd$6XKl?Ylwn4i~*wp6^v?i)XVALjLTe2f0vzD#Y;zhOj!~L;-9< zB=nXTKj0Vt9f^G1Y1muGUNZmKJ&4<)0=~Zf1I34(w?CljpyH)OzHh25fWG3iGZ^*2 zpR6B?pVYtb8Nqv%46wuHapzkf#N-EY_-$-`_Y=hWDN#T85lolEr(FF1mP>xwoBh!` zzr{$tOWVB;DJlU&h-4VDV3Rf8lQ0KFk+-5qe`qwG<1reuF}3nLk>HCjR4pZFyB_etiAX$ZDv_Te zv-qR2<6{*!TtqNvL>>dYFU-2cYlyZIvj3tnn0Wxb!j|J0ENsAp8xV*_^SxY18ilC6 zf_Rm_NWl-G!i4ZW;7Nv_FtyYetoI_SW5dG=l#I(*E$FK(>7$Eeh>*tkgL5E+^Exbv zh{2E8tpIGNq8O~JB1Q9h#YaO4kUO?!d`4LQaYmDiLKG{<+iDfL2uDvDM{yJg9qY!B zLotNl#ZpPZWIVWE9Eo0hfqkTi|4YEEO1X-WMxLvfUIZ0<1hf>4w~u?bn)(n{b4CRO zl@R_B8h(d#fJDlH2f)5LAIT^D&=Cw zhg8YqTCjp-i+A%!nxsM$$;iKm$2K!bE3BPbyt=D6Ju?$KN92?!3qw_TLtI=r0Z0|fs)A=|1G@CDpg_bple-F> zL=V}Bh(p6jghWJiOTi$^sic5RyvqI$9JshFGlhs1-l{?>6t)f1McWgIZgfRZGYPdA z2w}8EpLws2U^T70wwAoK&pbQxdC0yfMyyj2y1<4aAO}-y#?$<&XcR^rF*jgYO}9`< zS>#5cK)*W3Oitb92Mvs(X(7c7HtEG$V9_Lh_@;cyO7XoYX!T&gxSzb zi8xUgU9>8&tG8RU!30Af^}`lTxh-4^+){#-tHZjui(z7qgBZE&I>+qn36bnf+w-jw zDJoT5$=xB%aFMSm493*F)BnQ>%i^t3dkTafGt;Ze^ zPV-u{Zj1?!Tg5~jh~Y#}?pul&%hVN_)DH|bKpP3{v`0FGJVGE;LoI?6Wr#f01J4S` z1jEj8OHlPh$e(nGUSm(2+*P8m&uz329SzY013+2$HVLW32MG}RZ3i90<>v{EjW zR8a9`Mp=bajx#l${!G^6_|;4Wz{*@ta>dhZ)zb-_t)yB-Is~m^CDGW)z0NriuoFWF z$wVca6_9|C$g9E>0a6JGK)<^Rxq}eGm^~n6OO~Ti-g`ySdJ1oY0~N>xJJ_{XEHk5U zQVn^FeEmz%`mxPB*wAZBKfF>#%h3vym3vdIh^3-BF;gK$)BkIT0i{=i;LH+a5pQJ( z+qw@rEmO(Z*|msO#yFAdfK7vy)eb2{LQn-v!-Pl`Q|@Tg1v<~4Jqe!4jyUBdTAHC7g^0B_y#K3FZ5($h?*$ECgG9z`8Sh>D|(_QAxIES0XOxZV) z6*CPXvKW=i1g(= zqNCJ^Sjz=dPxIAJDBjkB!Cyu=Pmw6gf0Ihy%!sz)yuTgGY{j$^7TxSLy!(i@qLSll zU0Huq$pvlT0rpVZ4Zmpn-r9vCv7;HjOc08Bun;O_u25u~5;4&G(?{Vh5o}zRQ9tl{ ztq`T;hcPj*u~~EF3QpD`pjzahG!jXE7>*2NRql#Go*70ikWWNpOn&98pyjnXF->NW zQyz#|Aml`V(#9ibmXG=*DU#4bzzGr;SXMNshe(q;~ z{%3#=Xn`JRf-Y!-K4^qaXoXe~soUnW%;j(1wT3njTaFay@`{TF!eu^-j1G%+ZpwI_ zJBZ$!j%H}=TbYa&D%g6%u*graaA}ohkdH30PnH<6Oi{Eb=>vi3EM91)In9k8FjrFx zq-5Ca8@RdRXqE=Tq85va#xIZs<)}V4hyDtkW?cojYOGVLnSKhFehRGy>9YvIuNIjQ z3~Q?>Yak41v3{zhR#Y$@X|HB$t|;q0H4u2K>9NS`pth6@6^pZe>qoKc{$Td$pkcQE zI>N1Ji%v63^+YT0Dv*ngY@7mTscvcr#B53FYKGx!vQX;^qigg!JkZXV(r#(d=DF1V ztJQ9pyDp2(*Wn!ZvKI`DO^r=<=R3I3y2pu!isq|MDTfik%B{3{i2MWAXcLb1lCtiHP!g zn{pej@?Zq+s}b&}h_P1KgjKCkmVPViqHHo70Yq!E$a7Yam0t?rOUjOP$8$S854+9N zy!EbUMHjux`@9ob^uLUBP7h`!FYFAQ!0VF>#m>GBW{Ux2LYn-)B>cfcp6d_XzaQMm z5G~IfzKbPPJ}b|4C;T^G=VJ&QGWAP#N|mi(Z`)3>KnMN=cCUcKVdq*azerra_9yh% zHrQwjgZ8_YLN2Cl5yb6TAN14>LRUApSQpxXfOacyGYRd_A(RVC&d*~1gKhso58Zcs zFL!ILhWAEHTd{%592-_YkoUGtX zC91GrRcRj)uTRL^LeP7E>HdsFNxC1=Z|_>OKk2+5bKFC>qU7R| z+U5z{M%=CgXewVcj(k4{m?gkafCy4Z~39A{Gd_- zasWwhLwe-~SyQi8-fB;re*v|a(!QM1y+~jz4|NX5{wQsb=*M4oA_qFcnPD^7v z{XF&Ri^(_l4ljN@`SRw^qff7XJ^S|V-@}hD-*7I$=Vd*wlh9*A*C3@11)x^~nx%w4 zjJz;VE@y}&3m6M7)Zak7{qrCGbCxlf6BrgY)L%{i><6MAN=!)K86I(1AtMA1#NUVy zq!=Jh5Na5rhrM0ap&k^fDAGfs{npTOXjOq7P_N0wl0iHk<`r&08YY@f0zzh_Mo322 zLqc7Vl%;KkLG{p%Z1$)#pF;^~lPP)f<8m4il>C~KNBDi)x3<#nfYZz0F&mvxewrKrNG zsS>88Uf3IZbKh~Ts@?$`dJl1gl=qMs^xxZk#YRc7OeRfwz_OvMkX|USj2qZ+8eNlIQNLWaV?nFU@_4hx45-q> zjf8Vtb~hQGm0g?tHQ-?{o4DeOGv2u4kE1u1L9PviGhUOnp+Yi9;U{@P07|Z<9y3{v z-+>8cP8G_W_x?LNQl6jjG-fuJJE!O_ww{^iN4q|kpN#c@Uqqq94w332;x6(~GtE`o zU4X>~J)IX97P>=Q{~`T}NzOU_^Nb*sr1VT~eqt_7S#PEGtZueo?5(i>cUez?ADjDC zz`wlBDpoZ*}jA9%k8Ovx!C0aNGnm30CNYa?%wr-mnaW%yGn?tmXF@ZY(wrtWt7*+^szddnh31ChtkZ40B>OKZpbf5|?&$bf& zDpG|e)S@XJDK{CK4137~m7pm{?2}Hu&S$5+QRGkS`qq=O)1QDnDyrI})Ic>5N~JYR1K-0~w3;?OwBLl3Z~Z z0fthv0V3{mm?TCaVw`wxUgE@X>?q*AhBWQ6E1?sQ1ALKOsCXe5W{7@!E5}`g3dFZ*(_+i7I)2JO>==IOz1Hqdd`LBZgK;i=>9pMRMLZ{D4-|( z)lO5^(s~~Bnl)|Ev~HTzVLfzq6)kEyQ@XodRd9g&Oy~hOrJLy*k%LCSi2Js|$`}4M ze^X>3bumH3#!Ff^;TUMeHbj`%b$zu>T0nzV2d z>$fi_=Gj1Z6nV#1(o_A)Vcy{yJK^MK3zdr|#;-0v*;? zpY_yt&RU}T8SH94xzde}bw8Wd?3uRp*ry700iU|ms*Zck*G}eEV;bpumbI~@4AL}H zog>pTaEd!?I&Zas-5Is%v-t(1ed$HN8C6k38tiP`0Vcr$Ft@)~<4$u6z4J0D5`q6A z7ze*7?7AM&n6||EDij;?nJ+VHdkUFz5P|~iduiU+RD)V~u>+m< z0Yy9A>3Z6)+x+W*f4cks9M${Z8PEA&m{l9#XR;LXL~b9veX-kSS?Sqjcp)xDhCaUcrnRn$os4f0)Z zfgghGpEzxf8M&|wXORW$HJ*pW2vwY3O7+x4vfheop9t1p2?iklRUQ6EEg%J^8m4g~3~C|>KAqFuV%OarE$U(o z;vWW@nwRkz-9g|lmSQHdVs5cqouL}5RiMx*zR{fr8 zDAb*h)mem}500PA;avzeAS!O6EPmqubzoufWG>1eEWTgQqEreLR2HR|E&gS3#b5?<S8|H zqy#b`|2?JGMI|Z@V+m5F+@Yl_V$}f#r3l*HF`6gX$z%w!pVU=lq z7m{&l#WB_HnV6W86!$traO!Xk0qz0e0n=MQ7Uy<1VIJ zF3#r)q96pqpH?bmp046l>S@@iWm1lygkGR3N?I}Ur=zy#ZNgQknc{?EU^UhxP-^N- z-kqQ}D9vRmqb?}^{rTdf7NZ89;xYbYg?8PA>QNDHWvnp{KspXUUS=i5kzI@tG43ZD z;iVXTBPtmyfa2=2R@H;<)3QQqwf+f~D%vd_7GqLUBYDz9fhSN77qvc4va(XMnya;{ zD+8wMy1MIn6d^Fp2~1JaD49{AiYu~`>tF3_DB-KKzH7jqWxon+!5ZwrB5cAc?7}i^ z!#eE4LTtoJ?8H)R#aiseVr<50?8b6z$9n9?f^5ik*JsHGO>wIjL60ZxqjK~cy)M#g zJxss~LOQV(_(!+j6ZLd=E@ z2q_`Y-7x-$BjFLu1`e;xL~W6W=h!SyAs?8Gt#1JB4WWnDI>n7tVULl~>yZ)zoyTXn z8jIk*)8FFkeRwSgC9cmh?jV5#CJ5Pe^w@$xEfao` z8ZGVg1nYQ+79BCdd8LZVHlBE3ZsmfJ;O@$hfL?m=Y?^wlZeGdbMlRuQt$9F3D?m%@ zicvCX0Sgq{ zL*(*`62O8A$O0x*0b}-{e|^Bk^$<5umi(rPRR z26J!)-2Bc0}(s`#bNJ9)Yy$35WZ+xhS1jo zB*Ox~m|xB?X#hbbP(U((f<~}dM7$R9&Y0ja4~Y42ylmZwqElb!+0Z*-rAe*u=8%}V@t|3GkzKbT??*0CYjNN09 zB>}fC=<2d<+qP}nwr$(CZQHhObfL>#MwfTp`p%hi=f+G-#AG~?v18}&%pWUPzAvCV zEV4;YhJpd-_&(au(2g=;zA=tDBvi69FRt-eGWp55w+XaQZqa$!Mjvr^@II`Jl~@|L zWs%ioaZ{pCEwP2yg%M#kzmfFIHH@ejlyoIs1_BIcZWcd<=I=ueW89)?o%zR+Fu<-*c1d+@wOyiM5!0Qv$!l+UUKGnAaN&67H1)$l_wq8XD zRB*YuclA$!r-QfQH4@aAMg)}balXrWeO~JGvuZSQ9r#9RTV^jC)_bH)C&K$^+rKO} zl2#47u-T;5r>lN2eV2WWgch$<7m&ENNkP_=Olb*5SR)QrcEe#fQ&DMU!52qY=0zQM z)>xG?=>0{6Br=Al(7HR%`6G9zuw2)Z`zExpwughsE=(4aisPNkId~FywLLKjO<4Ac z=Q_p7ecBt;Ft(t;QGJcyAPY~<0`u~ltnrk;xF|tSr&Obg)FvOhb_ zjVhoLMmwYWxUtx1of(aCI>(+i_nZ+Xr6!Vewvfy&K5rOq3OET6&sAX3q@r-R^JB7z zsy(o@ICt&wFA;@ocG-$yu4wfsfKe zX47GW??sgCqU@bjS5T&ZXJA@IGc)i-9zoZBLp`^%EXJ+_ifW;=Yp2Iqr|m1C%Tqf& z5A>;e1F3mMkXAus0)BEILEmHH9a_a2xo=$>q>CXs%zH&)w#vOi-)$G8v0M@m?#X3Y zy5c#Z#h0Z@ALpzIlB6NpTU9>F3S`&=-Z}%6jDK>fcqb%d-qL1dq(>*+Z()q6$y-rN zJ$0LXK1PLBNlf~Cav)}Vbc+4`FqWPlM4BYu>=#Dr+S7(c#7}#54%pt8TAlK4zy1ySG{+s~0-WN}-o~ z(Qm4R-;IM;D`R&g-*(aC`JUOsUuNk=diPz$=~n?jC*zX>DfpT_O8 zeOo7d?KQh6WV)vRK$Szl-un8L2lP%Juy^%*9cA_;BI&BrhAzS2>L*q^uuaJ3(dxS zFDjm)G(%W*8CZ|Kh`^bVj46?U*=p8TM>|QVUylB7diIFfu`snq>L6* z0Vr^MYk%qv6~On8B;o7ipRVrFm2e=V)`hzHb2S%QM0^H0zn^d2UuLe)ALH&b01`z1 z@KY2)-4ri%zIS@Q3GAL&>uT|`ka5-m$N*ygzPsOJrvXQ>H7mfQ0zn{9=&YKEI;haV zO>1wCh{mE(C{*gLo=7I*aX4J=Pp?R(l1U^|>8xJJX3~idm{eYc$mX&sXHQRwR>@`2 zIb<$3PgG1>SQ(sH7oT3JR?4wL5yW!pW`_g1ifa6E+-%j#bvj+{&+llqnoTAY)7&Cy zw%Q4-cGY2a580@~7PR3&~SRC%3n9inCDO4Km zzF02ib2(fd|30x?Etg89GT8mF-K^JYv^w0su-$F9TC6tO{ct?&_jd z*d+lNI9&U2WQb_QDc~5>WNFfZ8f7t}6kp^n1e0TB87iAA=NZ~QP^4L!k*9d+YgbU@ zdCrsEl=((VRc1a45@Kd)R;$mJLf(u|6mcOqF(f7CwcX}P{%6848p9u`esj+A$9b9PG0%s@i^M|E=!>U|%(k;pbd6&++42 zx31~uT(|G}s(Y?!u`s`k;V6%d(yzKTAw82`n8a z5Em>TV&;iP8xr69EALqT0V*Ey*dhGxM^m6LVHxq8>7Bc|zjvwnRWod#>V;pT$OgQ| z%j4Q{Ir<8>PpB^obq&uf8@9}{^a#uG5Af)MHIHH#O5lU}U7|xbEPdwODte!StR4Ia zf4gOrMPF0}{BpZ2;h20K8PWK3ipSReD!7k&sq#s)Z#WM?of7-vT^5KMbs#KaA(Rrw z7|dH7^-f*^c~&Ll)lyCLws_6|tn}cGO;jLcy)e{7v`hvgS42R%g1ikc=I^(?V_-Cm z6lQcD#s&;81~E_FCqp6C6hmUq)Z|C zDy2*cR0vYBM`cO-^y*;)q2R0zxR0Q`FSASB6cF%#MS*sXrqY>`Gec2l zSfs1?*BkeHq=sl+* zo>oGy7DT?#DOHR8uYd-O2Fy8o&{WOcYntGw_dlrzD5{9mbVt2@(M@jA#2vZGRgiJ(RF+6=e}x4xuPjeD_8+_)=Ru zs=j^38}RQN#ZF5%Qz7e_$YA?_?GU>-x{;LvYh5f@xoSV#e@9BtIsR7D zi0r&=NW`NFg;6i;BVc&6clon@ZFYZGd7%e@zpcFQDP$2~oJ1)2dFRR0{}8+2sgE?X zKi~*>bJhaI z2=aDTFE*ZILE7xGNJ-j=NL^Ff{pUOj_S?e59G)Ea7CpcIq7!9Y>905ljMQ{Se?#y} z(eSCBeoT+RrE|P2uj<)ISeBnWx!>qIeOu}F@|(P3GQz}pXFnYiV9oI@(K%o8wuVRG z%l-~kdbJmD`t~)_mhR0H+{QV`&5NEsCE-JRz3*T34uq(t6S$-~Aj^_LPYa|?QX*X5P@4~ug@Qn2I#Dt4JNT;S? z8?rlHuos*C5C1ot4QQ=1FY`~%I5`p7Te0z|1mF#hs5s(8kezq``^m%p=VHgM?qw9O z`{Tcdkn#GIx&>ByJNz!U(tAXRTs5!YpH2q@A14p$fG=Ui1>dO7Zs>)8NANTHJ3)AY zC!Ek;VcqXuc2h>j9ka-W%#4}Qa^{=a{28UT>Og_&}V8n1} zL@t=GGM9pmkwA+9LgOdI5DWsDyBzsvhxWk`+{~0@dyjoTk3D02?|qM9+nthf8<-R(2~l+jhskJ!yPj$>sVSNP8LR$OTxl_QvSk);rJHE8hxpxyx3ed2gNoWF2jZ9fODh%ANvdlmuOZ0-g&L9dybyDl^3+a_^)ZBU~}#lG2NCBfKvqRxlwh z#nIKe^KP{>u+n+DVbip9+`8{F1KYJHc@+KqGGP=l-G&mg9VKu|0|5;SsLvAXMm=SS z5`vpBh1AqW^iSe43YQN>Ekyx|J}NoYihkLGEfKVDFx`YZ9~Y`Lg>O6C?WlJ%lrQI^yvbA^_TFgcMOr2Gb&qB}% zRZzm!Gm)t>^S%l;m2Sd0574r$Ts57j#L|R{wV8L*zR`HK2vUM)xFTBbXzh=j_=B$K7i`s*7- zdBr7E9ThKN$`^L#2HPgf9713pgcm8~W|V^Cnw(ee_8VxCZ3sANS2#hkq)a{SpJE%E zIolh1v8r7fr}`=5DT|;&nuf^Hnr@8xmSq5B38zVkX3Lpc1R85Lns(fX2Gj^`sGGLj zq~EsEVPe|ouJFD&2&3hNR!bYpcpKha8&9>G-p-odKAJw3iRzy;{l9Daw`jDdXa+B7 z1|Mq%J0QjYHA9GWLzsVNx!`KuC)V2_YKZHG1n9;j=-f}w#Mz>9roaNt;AWC!hGgp| z0_dhFA;u{GlmNJ8T300Itm#JR={l%qzt+vTNF_EwWyVjeT-K$e(Jfrum8*}HWy?*t$gFzSZ3f&)Ez!-A zj|I!ot=rJ;R>(~H#>|`lS?`Nl4XWFprQ0L4Tl%?+P5-lPNY}A6H@_*DC^nWEv9 zfx(=Z0q`oo@Gjx7+*I?f+3;@Ikgvq>>B#Wu+2Cm1@EOtYozUPN%};2@zr*NLDDhnDm>-@yB+$I(%wy-^6FVhV6u z4It4BPNGNzer1v&R;O6?StSm6iKGGB3=%uiq{s}FdA$*bts$>z?zb$erp`H66``rF z2Xf4pw2`~T5FJRBLz1oomdWx5nAz7D0f%R8tIa$#UOksXtcoB+BSf47+)r5z5XnH09uy1ki3kDr4D z6vtrEbzV8IaK?c3G-qPUEq#v1k9xwlU?xdzI(gO?w$|T3CN&l_T?5OF<~`9*1*ge6}2jfl}FL-=VQ4jy29RrO4rj6dssn5$|4JJ3ugEu zTU^&k5%K8aUCd+zQP{>jpXqY9OI5OQLrR53Id`7J$IUpj%%sJ};_@qkO1rXaLl!AQ zW`n+gu#qk$HJk)Z21-WowzjymHNBWS!Ua>TrWK;7bz41J%B3DU(DiydB}$LA!r-Zp z>q(?Rn>yILav!_C3s~c#k!1RrUY)D{QM(}vjgGdtK1Gcw(5(R?r%?k$PinZ{2n`%2 zrwM1Li2$dWM5mb|rMW;<8r!A#i zRUfC_M5o;%r`=|!-2tb=MW@3fr^9Eb<0p6`M5i+%r!!`!GXbY7MF-H8k<*p4(^Y`e zU82*S)zkKq0MLNb)1uSUk<-(&(=&k6JEGG&k<&Y~)4PDvx1!Uxk<(ZAqP30F|0jp^ zw@&}xo&JFluUnmgkq@rwLloFT_XrY9MnUpOB2dy{9L^vV?jhiRJ40k2oS!{Fu;fD+ zy+aVag9y09cZaBuxTKt)D9ponib6wtpF;}1K6^n!V1sy)f`s8hBL<<^>bgLohXjng zuG(hh2hZ-x&wpp#fdOV4)!{qH#FjNk3gePJr%E1n=y`F5yqfd6m&* z-!If`TwFz?Ns{8}4c(yy-6@nk&le+X{zG8$T*9Nz=_FoEc-)CT+*z)}nYYhzs;|K) zp*b47*)`n>IN{kH-4zGjk&wfgD55nkK4L?@A*Mh~-XMa++(n*G0!F_vme7 z@Dn%Yo%r+~qX4#t@(w5R2+em7p@K({`j0$*TPA>PKbEW`9B|lv{ubjKdhR2P)}K4m z-5Aq7YxtUV@t+g;y6EFO#ppjo7(OKuUiJF@H=&(t9&fN=Y>jUBxFzpro_PH7^?ONo z2%&daCJ?(Cf9E@BUPbSOB6x1+6UCo@*Xs98OYZF+{_Vi;J0o`GhmSjqfR>A#dxHH| zJc0)bfmX7D2Zn-B5MUspH_%@(K;J;LI6#Cz(x7_46`2380~=HMf5X92`QLD{4DqqN z{u=?d*Z)R`<0gS`BZaRmg|8xouPlYHBta-6LdqnGk0*(bE%o2<{^!U4{9{9k^Z#H= zhWpcKbj`?2&E!nY^ncV&&a{qB z4^B=F&dmH6nwgoN`TsnAE=|wQOwG>zx0%`5nVsG3+8eQlc~j}(V3b5HZnca zF+J1vUs`8oT4$zPXNFp*2V4F}#lTc~|MdS)mHlIt{e$KG17-iwU)JAK*4I+j*I3rq zRMXkm)Ku3|TisAyRa0G6UR9l6)tOc~kx)4m_und};wq-%%O}%v29vV-GP8O!vsyB< z>(g`Vk_zkMN@_z2n!Iw`oickJGyZQ58NL6b(;>alA-&ciy~-iI(lNEdEwS7uvLrk> zFDf7}$gj}Rw^ZA=OxdSW)~8Cwr&{Je=L#90^8fHIm-Q~!w<++^jSANeh|>0r()Nkc zc8}Dyi`29aRdVtXbaP_xv7_*@BloeT@U>(N(ie->R7z1-O;b@#lU7aRR!!qjP5(bJ z&oM&+fWDz{B^wKeLLgD7bte}MgCgKy_-PLuiG^c8DU@+5?}J8!7Qa?Gnu_g=EX;w~W>$&DN<$B)BHj~{>C;q!t9;R|VHXtzgvYm~G zBatXAKfOARTU{zd6s$B_He#I)Cj9fY?M+9+Y+c^yJQ$37b7{Bf;pgcNJB{T6Gx>5o z?bkbi5lEz=Z%p8b`F59&GWgX+k9w$-}}&6O#>k0 zMe57LX6c0GQ4WB|EB11}=CZHn+wAgk_J>6`VZ-%%7YLm4AP^Ki64kjki$dckJ*vad z3yvFe-v-G%W6h*b?-eC{CMtYgcv9$m&kUvc-*0PHKF_1*p|n?ZZ@?i$f!oU5Mp4Z1 zwOelNpC${v1iI}Bl!VhawryXw<&LZ%S@w(L6vfl@g0N4tDNQr-`pOdDIk`yvU~zw~ zGH0sl&AbS`;7(IZj^s_k9IG!4qjcDEth03Pc8@X#UvsGRT=n-Z(=e&a3X0&M=&q7< z&vlHg#5boi5=Z)BFOo7P^XiN8TzBY|RQLGI!-bKF#6V+ppWaU7BJ4eo-00_ug2w z)9(E@!syz&r*Xsn_7EK6*TgsS@&K5B46qg90f1a`2wEGF2@Z1%2rgv^?q?8=e^m&I1{^P> zc}PI^S-_9nG-L*Q6vltP4+GI8h=eXm;3!xq=$I55%!(KY5I!`LHsypQ_#_Eo;5|f= zND>VqTnd#pB}N5nhK10-i`JYiM)xru8Fpo&G!T{iPSqU#)x8)ihC0bM{+fVBe-{BV zWrzSlJX*GzL`uU-jHj?UfPWO6ka$Nz2=Y7_QjG3EF+vT{Yr*&YmOu@xL|}tSL;@kb80?V{1oDAZVFN3RtxJNhN_I{YhGqhw;# z)?|ujWZoN*=*sWbsw7H(%-bXEimt)*L?_X#a|oA~RRaEzMkn{-B|J*d6paB0ir^rz zvcitcZhzBoTiGKIn90VTtV!6|nyAiBSHzKtSMLa1l@Q3!CQ>c;NUMHx3Xoo8Py`vPdIv#Lp0rY4K-$j-z-*;y_ z2YhQG#9VTyfBFQ{m{`gPkNGxzcFBtGgJccWUOJ_BD?ffoX>P^wS8Go{t!~+ie~lQ zMk@3kv8fakTgh{01TS^Bua}SM03I?EBFD$uIneQL^rp7m75`9+|1^?3hVl~-#c$;V4KJFF)FM|zzBi^@^u~~k`>)i^=!3&?K9(r%`B7jrF z0fQ=GB#n+9`_eat_((8l*;Grh!<5XebePaReujl*gE@9yFOyT=|=Ns_4 zFaW5-(M^6TSjQwYYe`cQ&Ts~nv;zZmlz9cBM3qrlQA+7hABi1Go%X~nPf5;2FY0{R8qYX z-AI!Mi&ZKzHJA%CkP$6R`j@&{q&EA6Rk)bi7c1mqx$qxV3%5-XGBQo;^H6PxU*U|A zT0jQ)$2tI14!t5%(I`*E&eBLm(x83uz|mA&xkV|Q)krD#DEf7|R(27WM4{YQeU{Ux zV6f=o$S8(I`Q*uP$|rr^*2v}1P$D4seN_2Bs=;oWQB~*0*_oy&nUM*YF-eu`#j7#4 zp7Jy4(C3BG#-uW*U{JZBp~;@g%bQa9=tirMvbL*&7+^~7uOYIOVgZzL!iBc}l`%Z5 zQtha5DCc(PqA?t0Dy{5s1*Ovc@b&`iMyO=*f$wP<%?fT^068{$f!Anuf0XIs)Tx|AWLJcyJeQI;vh z6CjzzT+J(0h$$<1xXj#VRUFAIg|12!D=Z|H(g<%$K|4{c&s0kZO^+H%h2tWbvnmDj zSMoA@GOb1`pfpJ7DK(zbuJ1U7!ApC+5)92viO%fj>|6sLNVF)pcP@a13Zb{CVHqlC z0c8MjY=9gZj^C!7D4w1Lp23x-s*;|*va0;HDPUvev}Ee)t(6Xsmf^ysWw07*od!A) zDtH_wC)y?qEM>#o=8VGS_S-NCT`J+tO-d$1t`1zWCd(Bv$f&Lhyg@5o#ZsrOD#rO# zHFzx2zb!{=GH3ZXXK`Ika7zVB%B-?okm^*3s@=xBQiEnot;r^3Pn(T~E(gujp(|V+W4|nGWb(aKvh;c=v8vo$CD;yPJjlDc2&T>@ zXSS+FcDWT~WmeLWc#K?I@vA!`jkhpewLObz&We=|eRcl9g*557%FAfpVOEMZn*xYc zZhN~3K?b7ehAQE|T-$a>xvF4J>5>OX`@_r7nXEr4`(h5-3O#62ui%W0-m?7XhO~eK}l-DcV zRl6Kz+8~W8f-y>vtum`oya-WTb9v30G}{f$Dk;noQSm%%BFdPe95FmKg-*K~#wll* ztXhw%oFz+22DHWuz2=W)DZNKEW|XxUSQs=$9*kQ_U3E1brev{qb+eZ0_e7pUdeZE+ zik!OK$(yW_df_8h4!Nl51C*phm1%@qKGb0`&S-{5b)EO6z(IF7D7HTMc8!|5**vL9 z%Bu~uRGFo>D#>#tl$RCOX;IdcsvLUZWNT(lv|HYLRpDhVlbI1PWooOrDEpe~TO}el zg$2q-^^lZtF?4BLwJ1(c$#ZFr(pFyMxppO)#DH|f_^}{*51^6wHHUsDhnK2ErYu8` zx|H9wnUSX4cq@J7Njoah)^WOyz8%!+umXx81FCN<9iFM`}<@9`dZQVX}s6N0ch2GMT4S`KcYa zGSnMKTJ5yM#5H6OcUgSbdbj|2L4Pe@~rfvZCxKuQ*Zyq=-ZVY?<)@+_fPs^bU; zg($*>{GX0*x|oZPm}O^w=wbgKoB^>jA$A6fToI%PVyQvvu z(Aa@Doc@^OAT$XaZK^>;+#zJ%AynNVbl)M&+#&4VA>7>|{Ldjm++kwgVN%^;a^GRf z++ph8VcOkc`cJ-9j1gwu5mwz1cHa@s+!5~H5#HSq{?8FX+)-iPQBmDdao~PY6YyWcx-Hk z?P~cPboHESvGjBKU1*0rK6$-pHGFoF{a^(E0lwTpvqK@cykWhP5x!_{vHVf7Lvg+C z3NMo%O_OINQ)sqRjUiJSrBfI}Q>Pu33z zcBxu)8{2A`J7fhKucl5?W=bw*C`Lx_tWbwb+bfbhs&uFQBmCutr^_%12Vo~t<6DmHlxht2 zH4_=JTMwTjcXi|5z~ew$6VRn&e(wF{1QJSsvIkoT2YWCw>>Li_Bjdg8B2*nM_Z%g= z9og{X)CRD(y)*qPvzOc-ewIEeelS&GHxO2~78NYVpshM*sf?%01$WPkUEd4^I5|+C z^cr$1FXlz?KUBbd9MK}=gDI=%%&WX2l=8{*d?joI%S0`}8?L`rXPL;6i`U7M*P}^@ zp|AOD^QhE7m1@BH)kUqoxQYry+iPnAqo%d|xV3&kSL}6LX7uH&3A03s&@)_nvb(Tk zV{8=9`RF85Ie$^~{n^T=Sd~}WR1Ri^*W;>!qj9xcg=X1o<`sZhH+&H_3>Ytu8Vfl@uc@KCtk*_}%2LkREw1?Xf~!Pk6&|1)Xseu}}ug zF*WZkK7yE|28n39*QJ)%jbATqq}I#l)Zg2Q(VModZPR?g?RhZMTga`-glv@g?F}<; zo6qf;9qqY^FdphH9{*HM7!$aOFvIeDVa2are+k^enfbmJ!)diW`w8pQMX*1K<(OFu zq#xZrBQ2uR)K2Vh^7(n5&5AHgDt#^EM#_YnpsG9P-Z-t-t zhEyHxXjauB=1Zy#XBpB+h2N`pv#0NxyhI()s~^9-q3rj!ckf8n^U--_e~2_}h0~s& zum;boVZ+Oo9!*If2jC&U?Wac^0zoIia#oQ$hLmKjQ#8`qxR^H|?8p8iX@jmxb0^Tztg zXOqj&xC_^^zXgYXFCeafiLV@I|GJ1>HM#ulte+|6z3kOJoX$U(oxdEfzihz2PRac{ zmw#2SKed^Ey~6)@&0cX5z_Sle+&u5v`ulIY|4m-*Um4un2mae9{o8;3x3BrP@BO!* zzi$D6TanxwzK)xT-#0fmh`QB+!9RkKJq8s$ZcRKkA3lc1 zKE{GRdCNbNecxjeJY4ZVuqr$WD>zgB1ikOy%QrmDq?|6=KU*YS77Rbf+@msIKMV37 zR?_|(Rbh_De`F`%G?l@6U(F;_FdB$Ks4)K=QJZ$I4BAeYw26 zcg3Q4>(143b@a*6alP)Bvgla!>Skc4ws1WUOsiTuZ!W;OefScX@D_JFVQP0DW3tLh z&oO^b0!fd)@@FB@V4cXxziGh}$K+pH0m>Q2x|r}H6v>-W0AWS~^T@)zjXm4!$lLMW zORd5R8^D+&P2#MlfK3wrt(<`I+xVawh0F1XHve%xcZJuz&$kJ%40!Oc0etKWkkog4 zCfwftUf^=E^IPNaMh02AUN{ac@ijK_GYgpnx>q<53clH^t)9W z{c^3z&4@h=r@iiXyTs#mT2#CJOs8a8zuTKr-BGOH+9I@3Uym@2H9#9YHZ1Rh%nIaX%RY+&z;h-ubk)Cw73w4JP+%GWoezh_*gK6O^iw+=$K8%68@g|9KbnPxy;lIfM7AMC* zQx+x=G;CKG(<5OQrYSXC8KguI#8{QY%v4<@Xu@)vYrj{sStinwAFSo5Fy>_EzUfJr zFG$@~B->1tDfxKTE|u=s`JSgqHe_R%G*?1Zi2IqrQe@L`YnPQ} z-)fhY@LfJrW;H#;l2vRP#@Kc2utJlzzdXS(7LB{sXhtd9(qeU4{)(&=5uU-cD@|;p zA5Rak$vaShcF6jOfTbzh7lGL>ld<7$j#~B5y~sk>L}O~Xa-4RW zBnW_W9g~Kjacv}jw80*xaFKhNWf+8WnP*v)cbO;XxMQ8!x%DfU<)8qb-zN-xlZ5jr^d2E{|$a`#C7Q}h%+BVF4>^ktc%7#%)+v$(zlX-+ zFwlW@i_D-muyL2@B`RI&kr3t}f^ZFdogMKhBA=%$#C4y+#e?$7heSyFh*m5h@a-Ls zGLHzL<+V&)!u$o!AM1veJ`1LO7$UuD9V+-=gY+Hrd~$5QEwXmqApFSx_DKxbI?h_2 zfH`I-9)qt!czwG6{%#6Ld>GmPwmwh$HUOY@^em#%2Ym5l^8*eXLxQj1UEe_BuEm8q zdz=yo;YlOU1yMRdju_C+14jvqGX{|46$38*%3nVv@dmlx1ps>$3FS&8!XGV!g5buX z*;jA_jOd|yQV7A6I7f?vMxbZzelZ;pL0xS%I(7o-ofTS&EYC68FsUBEl@AS)zb6u^ zTp2Ihb3lNzBL<11LSjlJ@g2q~5UPVhU=3Ifvc=zn%e5L~UrdS<%Y!=!ONwDJbx7R7 zDLa0tm>jfAjzN%L5*Pqi~dvc0U9wSXNyW&xFA7SE(|0EXe6Q4-+`h1!UbD) zoCbDmATHQ3r8U!HY>I6LD(W2)Gt>ea)DlgrbuBA52XM*C(TfmDEta7%KFsLUHxmz$ znzJ%VFZXiz<6W<8U!aAyHs^Tps^>ymdTz9E>bh2-dhkkK6; z%>=m*;zi4lRUK{t+NTAgb!u8byL`;O615awvyv+HvyXt23g%D=NBdx^ znRi1C8N+`C&j{TiYK$m~$v=On+QL=YDRkE4!kk z?a|DZRCg+-o4o5jP{~|YY;XEgE42^VLmqw8*q=vdmljhuyzS~=xN?BRWjQP~s?Itk zmkkaj2`Ot@@J6$!@DuStS4)hf_-8BX>I6rM%gEFowpZM&aG)_t zkR4jv?_9N^0%}IVC|fpVM3x5JNqkc8K_jo1^qhD_dcO0WW${UkhS%iHM4R4q*#Fp~ zN+_GhydS-MEv1N|%y{i>IWFJ1T5!xt_$5@yXm~-% zkeyuO);l}u<{`s#j9wKXCmVx@J1v&%C*xsnycr zgenh~hCO<*t`XTwYHMbkBXJzWhHRf|4x^)OO4N>^!c~$&HfgQ;!ua04L{{}czhh#8 z?Vf||L-0&0DQ|SwDXIi_cCDSGq{X#}rw_~Ib=YlmV%QwfuU9bmH(G5t8B<^h439#D z_iD*a?gi!<+foy^OC|mDU&K&$oip#v0(kc&Q@tyTj`)qGe)skgy@6A9j4p`lhY|*w z!=>C-t$((4mbZI56dj%o`RwKCADUzlZk-vZMGl8j4^QUavv>$^ zWoO;T5f;0>FMdvr2VNf2HNZ-ebT-=itm2wE|JkB8EfD z)y(HZ8PvdihfYwrhUwYUzZ4U+SZ5~AbYi2tT>>ynTv++HTm`O^a zO)@VFM^G1wl@)py4+p4GDc1mtrxoo}3E}CL=`w%h zD=W!lN)fVd=3pr0;XURW2N@PnO(mFZrMwbkQ{@0-67571EwSP(BN}x@LKRFEHINxi z)EbT6ffs0H8TS&cv=Vjg8kI}!mm(FDs1=pD8ch)yQ!&MnTg9ff9ae4aSEL=&ZXMGZ z9n)PM(>os1e;P9Y9XCWBHzFN3W*s+y#X(laH}!>F9Y)#`N;QZ^g5}1xOwD4f9v?ld z3*jU%C&gJ(%AMAt+sBsJKct_amYBiJbp>T43XTP6j~7?rqJ~5!92HFlj$>yR3}zLe zC`Zx)upzgKs{BXkBO38-YGW^?NZeI}59#ZB1p{h$d7Oz*8 zPEMYj?#$CFoG?o)0WS=TzKTzeg{`s0tAJ%}V8uVqni5xrv~5M|qQz@Yg&lO2s`tXv zx%;J?3HIGxgh)sTon4SU8kPeq{RfH&$@`aXB$#Aoh~ePu_SYS% z!h`F=eQniy^c-R|zO|_wP2l{ZY2=~n?8KJbeUbbN5;c~!{J&6X$;kP~cfyb3g_G9V zB;dB53Nl*(SvhOL~GracH`tm0sDgi^ZRgC9sfS*2!?Lz=_q-DKpaWIV5`f z(pja0O3drpDP4%&rU+3gZJ=Hpo)f+KXle=1bz!D$>%}qV!hc5o*~Q@W^WBuHjs zycnQ}fX4N}?2y%7GCN=OFyTtml8V<~ls8zFF3e<2nHo&9QBs%X_y99ismeUpHDC|! z@?0QFy=@AE=mJ+f$N*sV593XL>L@*EN;78Z5atB=_fo}XGL>PlU`mb1vNCOMP5)@k zFVZE_N(x)$ax<}V8)OZ8J2F!}A}=v5CGIUnV9JPQDo5q5nDerHIjt~|bw6)Be?8(@ zu(D9Itqij=v~D~~$VN}nlB2S0yLDUa z9eL?||7GnKIkGadjjpnt?mUq(Bj}E>`EX+QvJ@Lor=HVuPa&?3CI zrASoqfPMel= zwU(qC9Zk0CXt1(OpDG>R9^0Z`$Hd|!X)m~klet9(YQJUgs4}>@^32>+7MH<1-|xxpLf^sd)kBqH^bM)7Ors|-)s|GHY)ArPFo)gJ z-}dF-B!JF3zT-TGO93t#0^TVnW#FN*obEy~!6io^4V=M=RxOxT2~Grsl;lBX+*7?A z;mWBb)yC9hofBIeM<$xyg@Z>LEWl(-GmVV1($)zzRo)B%)D^Hb&7IG(Wz|(3;o9UE z_NhEth9_tr`F-NGY%0jQRW`C=${=F!F)1pB<{(`NL&cmCq6KC4W9X&g;!3af&0=8A zpg7Ru$$(|tk>ww1sxBU`*3srBnpfN!Yx7!PREQWtuW*Foif&B<6(R77FZMbh^#U;O zq^`?BWG%L#iS|b(uCBNOU8Te*q&6_{qGEyeE~4IPe{M)QYH2FoY6W93>V>Zh^+y_h zN9tm!o1WihCa@D~XUJR%^?O<>^r`T8*y8>T91C%!hVt z9Fgm5oaL3tXw48}yuqc%)@%WeY?;~3lL5#6L4IYL=9`G#?9*n(&XyT#&YA$898yN@ z*p}_trtR9c?c2uf+}7>g=I!40?cWCO;BGotd^B17vhOhN+or{-kuq1z!?_b~3QNG_ z<}&BzJaKswR-|qvlQah;#OWrs6g<2^BksMi?l~K|pj&PwiA0-AKj9M>QTf7tJMZcf zmgrs?#EUgG)bC8xGw@TitDubfUKPMgIsr_&^&T4nPqhLcxa6LZ+sl&Vj_>NOIVy2* z2jo2bW}5ew!N8+4jT@%$R+i1C|B~R$-Wi@Hze%CD}QcGY;sscKrMHZjjQt|PZZq% z4XPu% zIeGH!t0rA(HM>K&H=8&We?kw3K2dzX@Pl!hE08?@a`P7Td#S=OoAOb_mL7+50dY4I z5%QiXxFjUQ=bQ5(0Tw@B#e>N<@`k_73t11Zzu?nxQrALa-}NUnnJ6rFm8o_0YqW*= zM8g?(H><)19KbRk8T*sAE&lIA)r-IO6UFiFH&tW5K5@Q2hxTkK^}8)VXfeEN$1^IY z!2i2&Z?CuZ-ij+5!fs!76jXI1#Bv1(n~5j$6VEqTuNEG+KVrc>HvI4dH^I~s!39ip zKCgFHNwKvozNUJ$!R)ydCzgxd?LOP>2@pg9V z>u^`ELrtoei?PFXcNl9saMmNfbCLO)Nq0&dGI&?DU(|RBJNvI!cZe7JoPqGPzcIL1 zt~OWuAOmlaC;NEM`-S&Kxv%@b2mHVn{J|&u!Z-ZGNBqQB{KaSd#&`UaQO57lMwy=c z#bWKRac#|@Mx$9^{+ro+%Fih2?0m`ie4-hB)eiX37RSA8YKAannyhLsp3PHbsnypE z#Hq>AM;D4D{U)9a-mjq!(&>LhVE}Vp;^iUG{L98phzw=O(P`(&AY#toeT2}U66Oqz zWd4U3{)f2ig}B~=K*+kP{LKK~k6g&TlY^k)~Ae}+)J2z z0hw(7@&|~20tXT-Xz(DygbEcddy?wL!idX~M64*V!KhhULj1#J3#UYO&=5*DNf*3uQ?EC^(EJ$;L4U){cwce## ze332~)iGq(kW7PyXmd~!%9cZ5)M76YaN)HvS56XgBRJTL3G19VGZnhso`Et~Y0$dg zWm>jv)Cb46c=PDBob4zWs#FSHLWl<|@FWFE=;Ia?{!w2dE#cw@P1#B3-&jd>$DC#} zjbfTb;F!_M3*a=N-)l1QC6GQztreAh0@3AQWzd;1${g4vvXO97Z8e^Y1hqF%h9O9Z zqKf`n+?e8ufc-;Nf!Zm>TvZHKX2nZ-B^g$GOd&`jY(@^k-#|O&=;MfVN%;|xQ^nQg zbq0F&+8}da`B95tjX2bV6<&BljqXKMV~__vIAxeZHZ_n=Pl8!mWoC}jgpgZKcPOHX zD!M46-^~U^8rcY{8=9lkMvPJbQaMm>{aLCPrvGRP+B%~cmxvFcYFgJIJ}grkLE`xW zsiZfknh27>jYZ(6Az6V@99?Aase`0p=G}A0!P=-$9ahL9iV%^63!e3D^U4!z_5eZih5qcw!td!D7ium@WTTFeCE74jS|$FYBjlOPvYv= zk-a}|T5y%EiX8ALDrL#vhWq+lRmty?wC$=_d-^I}<+1~}kjq6P}EDnhlj{92o-Mj|QmF0so&Nn1+BocV!sjI#^ z>yiJ%I#mUXt5e$`8t%8VkuNil6|BF$I#2~{duqgzM5QdiAq`}A>a_1&{@>oW*ZvRc ze^Zc#-okGr`H4Oh;CxiqXK(xVxd-p|tJ$}Xz7_h!B1L{lw(Tq~1bOfF`Kte}I*5PA z?mv5dnR<@3VSy|Nt94~e*2;9AmKf%_0WJaTpt+2D8@08v5W;+8yeGS5%F9=i{^<= zW?+-Inq}r(V+jqPi1nK~8V+&mf@6t7^rNn%??r9&fwtm!nRvziD~_$1qiBfbD;ezu zPil;akAUK%B+=|3Pz%eqpd%dzj&coW`J_Q+#FiKpvLm9z7JwAVkxy>Y4Y90a2sXqQ zYUyf?RPzB%5=K9Z?dvHSV@q6aIVBeAN0}@Or66qrD`BpInam_v&cLS41QEnp;82=H zPT4VK4yPl{;gs2IBEc4BQ)b9?%X@yNFoPuxYU(MPGvA4j3Ia0~)I3c()v1*Z)smc< zYiC<-DH(lq;R3UOUm6Um6}s5-JVlGzB{QngjdHYIQZY~6JVlyS^=&D5ya=&Kin%_X z3_vP9mvG{EFjo!~4lfNsNRn{7kmhk&b1dn7Fz1V2cC`MR$f@HdCFql4_Jo&lRF6xv z09AFi=a_k%skKBDnyD_SAkNy$6SS7pufj7h2g&IggMyK+a?)a*jF27af>xO^bFNHv zYG!7-E~t>^CDvRg&UE(6ZKljAU7M*-sw!0vomC{E+T3WeWm#kSXmpudPF$F7v$YW}N=ZX4WMOVtt?I2X z;Q$!4=5`=^l?#X*$3GGJBmoH zqd=?Bu;nAMSk;|q(NtaSyDEiLcvnhk04*SVvcKkXf?A8tU@ffTAH|3$^C^osd8jm` zW%VGDr3i}kDWY>-R-b2@?YmHXmJP3XDh?L$NCJxF^@;?*7cI#3f^mao%z|nxqYIEF zyJPD1w##1ra#NFuDl%2&H3U1-Z}*}|GQozIRxsRi*X8Ck@6))`c`NwG5zbgv*uO2{;eCW1>--nIs#; zKQZN+9?iO1Gmj;XL76SW6nSYbb>t#V zr!qSh#+9^WqEDU2BiR_R#72&>XD#X}&AQv2=C+pcN|9pwg4V6EwYF7lFjkv$)Cgg9 zsG*b`EtlF zx?MPvzaq^~eez)+ z{moM!F@FDjUxE+$=dYe1)2F>(zHfShV;}m87k@-DKYPYsKl<%oe*3+ze)rFx{#P&m z;nA=AGp?Wi`tL2^b)NPu-~Ihx`WYbWRi6Sb2H{Pf7$uF)P;0q?+7Ea;wZQuN%An$=t9afzhuHO5FVf@V@{jDJw ze%Ti~;o@=O7_y-L8R7o$VIJzB4W?isIwBZ~;SoxqAHrZCcA*_ zIaXdLUQ!KuBMzcr1lFH8-eB&rqXf=i8$Mw>LfkucU?iGh?d{(@vZ27yAsY@L_}yS5 z;$J?(ARPXqBzB)f-XTENo(TSr<&a-&B&pEoWcBsL%R;Uhp!WEq0qNhab1YTy-` z;~)YcMuHSF){FS9n zb|XJZ{-Qpv}C0g?3V^(EN z(xg~oWnXF}CMqRDf+c9~V+Q`75bmW;n$aP0Arv|$T!I;4`k?RuW>6+!6i#0d(x7ds zCT-HB$GzrmawZ9uCQF9nRl25cc40vZqH->$Sx)70lA$58ByCnE6NY3<4ySY~VGlm1 zY=)-eeWhW5=Lfo_KX#{g7L|COXL@QBYo4cj2BvwI#d^9UOd6(QzGuhHCur)Y8nq{W z{%2hBr+mie*{Gg?Zq$JSXc{G`Co-to2&aNZsDw@^g;uDAUMPlUsD^GRhjyrkekh3k zhNy^+D2bM+iJmBmrl^Y2opMN>zy)1l02N^r-HLME)1lp;yc_0l*+S4vj@BrU_SUbF zOIUzcMGPsTU`Eqj43RDvk21-QF5SbioLD&NTHMmXSp=3&8aO!>dC3HsEufYDMa}ud zmU0@k1sqSM%V$v*ltrmkycJU^#F-k2O1y>-h*Q#qMSH1RkcMW-%mjs$g^@~4)il7M zE=DXh9nzpwR=C{59hg`&L{0ofO;nDhLPX_=i+$1Q#=S&La0I7jsoqg4kv_$ZdeWsf z+E{Exv;CW090g--O<56!obpYrBMr%@7wyvF{RJllCe zQkvMc*1$R^isj8A#;76yD*0{(AeSm4d5^LR6$J1bko;>Rw%^RWENt!BzzH-RM zvDlM#l!Q=-g#;F16^SF6TUA)eir`cwJzA%2Rv_t^P@Dy?b_Bbe1gzPHyU_{4MoGs) ziP#8;8yHHleq^Wk>P9?A-#mxo@YEdT%_Jcgks2)|yxAO-%BhfwsT@bDESJ(e%*^?z zwlG+Gw8hbA4YhEIe#J%C@(@lS&08>4sxE{#K?}W{8QAh@#99TvqW*-$ahQu(i_4s< z4UWZ&coFQ*)*bLHR3iL?xBSEXa0NKf?gh<3PGu4E3=ZeS z5DKLb?8@%%4oI9O!tvfu7HyB<*jxHE4-RdR6{Sw>(1hg_Pz;q%QrHj;K~W5GkmLk! z3W2Y729XEp2NUIz_NvbTF|Qo1&+UlNKalU+V1z&@ujFix{L=4g_OJi`F96pj0Lc#e z;!py05KGi=7gf;#x9=70&G95c@my~JS1@;W&=9dx?Y>YA{(aH^Sd$Xv&iB#~5S5Yi z?2bV6j;7oVdqBecu1*3okP>-s{xIl^_RgtSX&yb2Sy#_=XE6UP-H;oOWs6GAu(Lvcht70ie@(?#vlInfrOwv#5cQ(LXk zlFr4lqQt;tS{|W{z`}9IP+unT5Ng4$pdIdQwa-zVY@KndOOz5J^ApI>M6LGYH#u0;tw1wAl1=K0q zQgLz0;j|R;)-rV6l&63qVoexc;j1UjD@Amcq-s0IP0yb^cPQfgvzSi z%qnIGNqUFX@9G~9Q5t98NX z(WdLJ9hkQ18oJS&sdXBEgmY6lSiJcwv+gOxMs}FaH85XV3(NK99a>VCtccVa$2LdN z#M_(7QdUcaqy-#jBNDciTe>B7vN02!RFdRQiFFt@)g+rM>!_^VNoXL5IN=%t=N&_ihUpIHB(JGI#z?B@pne|#^cXwNb zd8cT~RqT1Ux1u-|cn_R8?-q>~MtZxqMcg-j?>B$*ArxPc!yf+x6w zFF1oYxPw19gwtmZ@@9k=D1m05gZ{2XhATLQuT5@VI3a>Kga>38%0*scr*k&uhG$)e z7X~L{Aac&*5ZYsLK1Ctgr;VFn9QtSYK_S~gXmj=_N#Z!7h@Xh3W>yL(kb|UsE_sD# zqV;7aUnU=Bwm8~Zd6d88l=tOM()eTY=aI{JNme3}+a(Q_c-u`TNX8`^8F`s&cs|Z} zS6Jrjp0Gp{HgF3VLBCW>acFfu zIVI9K2qt?~UT3RcJGiI#CI;tbVqpT3IGR&pl_%r{pL>mKB)1E=Hp1dFLSwz>yT0E$ zDDt~C`uj0PqcaMlzF%W88Y93LyuufJ!dHgCFFeFYyu`;5!Jp#8i(bqWXl#e4oR5awQ|Vu~%o!|K`w-d-(-@lSAapzdO)VAftDsj&nF+MkHFE`B@epk24{z*QMGG`pM7w zqeG-cK7C zIn_72fvaJpPh#ndio@M;7XM+K{nOK>9ddfj_x(K{C$+Qvp=ZA2gI@Q4eb{Gu zW#-1R*+n7*Qca zh7mDl)VThUV@Ho4L537Ll4MDfCsCekn382nmoH()Y`IcqO_4Nh=H!SoW<{Mpfd&=& zlPAccLn-=1x|C^Cr%$0qmCEwyRI68`R>fLU>sF5lZFcoKmh4io8qWq*T9$2Fw{PLP zO&gbP+_`n{)`gi@Z{NOr7fyT%)^B0MhY=@MyqIxg$B!XLmOPnqWy_Z_XV$!#b7#+= zL5CJSnsjN?r%|U?y_$7v*RNs6mOYzxZQHkDg3}TLBDg_==G@S@?6(z�MGo=o`53 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 z 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 vnN_!$pIMqqH=3u}n$Zd7kaX=VUB%!W+} literal 0 HcmV?d00001 diff --git a/docs/plans/2026-04-07-review-and-testing-design.md b/docs/plans/2026-04-07-review-and-testing-design.md deleted file mode 100644 index a8dc939..0000000 --- a/docs/plans/2026-04-07-review-and-testing-design.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -date: 2026-04-07 -title: Comprehensive Review & Testing Plan -status: approved -approach: Bottom-Up (Unit -> Integration -> UAT -> CI) ---- - -# Asteria Comprehensive Review & Testing Plan - -## Goal - -Full audit, risk mapping, and production gate for the Asteria MCP server. -Approach: Bottom-Up — each phase gates the next. - -## Phase 1: Unit Test Gap Fill - -**Gate**: Every `src/` file has at least one test covering its exports. - -### P0 — Critical Untested Modules - -| Module | What to Test | -|--------|-------------| -| `src/cli.ts` | `printUsage()`, `printVersion()`, `runDetect()`, `runCall()`, `main()` — command parsing, unknown command, invalid JSON | -| `src/cdp/client.ts` | `connect()`, `disconnect()`, `navigate()`, `screenshot()`, `evaluate()`, `safeEvaluate()`, `pressKey()`, `isHealthy()`, `ensureHealthyConnection()`, `withAutoReconnect()`, `reconnect()`, `listTabsCategorized()`, `launchOrConnect()`, `closeExtraTabs()`, `pickBestTarget()` | -| `src/server.ts` inline scripts | Extract `comet_stop` and `comet_list_conversations` inline scripts to `src/ui/` as testable functions, then unit test them | - -### P1 — Edge Case Gaps - -| Module | Missing Edge Cases | -|--------|-------------------| -| `src/cdp/browser.ts` | `isWSL()`, `httpGet()` timeout/errors, `isCometProcessRunning()`, `killComet()`, `startCometProcess()` | -| `src/config.ts` | Malformed JSON config, invalid env var values, unknown config keys | -| `src/cdp/connection.ts` | `isConnectionError()` with non-Error inputs, `getBackoffDelay` with edge values | -| `src/ui/navigation.ts` | `buildModeSwitchScript` with unknown modes, `buildSubmitPromptScript` timeout | -| `src/ui/status.ts` | `buildGetAgentStatusScript` with custom selectors, status logic, response truncation | -| `src/prose-filter.ts` | `buildPreSendStateScript` wrapper | - -### P2 — Lower Priority - -- `src/snapshot.ts` — `runSnapshot()` with mocked CDPClient -- `src/selectors/v145.ts` — verify selector strings are valid CSS -- `src/version.ts` — `detectCometVersion` with invalid JSON, timeout - -## Phase 2: Integration Tests - -**Gate**: All 12 tool handlers have at least one mock-based integration test (happy path + one error path). - -### Mock-Based Integration Tests - -| Tool | Test Scenarios | -|------|---------------| -| `comet_connect` | Happy path connect, launch new browser, close extra tabs, version detection | -| `comet_ask` | Happy path response, timeout with partial response, newChat=true, polling loop | -| `comet_poll` | Returns status JSON, handles evaluation errors | -| `comet_stop` | Stop button found, no stop button found | -| `comet_screenshot` | PNG and JPEG formats | -| `comet_mode` | Get current mode, switch mode, unknown mode | -| `comet_list_tabs` | Categorized tabs output | -| `comet_switch_tab` | Switch by tabId, switch by title, not found | -| `comet_get_sources` | Sources found, no sources | -| `comet_list_conversations` | Conversations found, none found | -| `comet_open_conversation` | Valid URL, invalid URL rejection | -| `comet_get_page_content` | With default and custom maxLength | - -### Real Browser Integration (optional, requires Comet running) - -- Connect to real Comet instance -- Send a real query via `comet_ask` -- Verify response comes back -- Test reconnection after Comet restart - -## Phase 3: UAT Plan Formalization - -**Gate**: UAT plan document reviewed and approved with clear pass/fail criteria for every test case. - -### UAT Categories - -1. **Smoke tests** (5 min) — `comet_connect`, `comet_ask`, `comet_poll`, `comet_screenshot` -2. **Functional tests** (20 min) — All 12 tools through their paces -3. **Error recovery** (10 min) — Comet restart, timeout, invalid inputs -4. **Mode switching** (5 min) — All 7 modes -5. **Cross-session** (5 min) — Multiple queries, conversation history - -### Test Case Format - -| Field | Description | -|-------|-------------| -| Test ID | e.g., `UAT-001` | -| Tool | Which MCP tool | -| Preconditions | What must be true before testing | -| Steps | Numbered, specific actions | -| Expected Result | Exact pass criteria | -| Actual Result | (filled during testing) | -| Pass/Fail | (filled during testing) | - -## Phase 4: CI/CD Hardening - -**Gate**: CI runs full test suite with coverage reporting and enforces thresholds. - -### Actions - -1. Add vitest coverage config — target 80% statements, 70% branches -2. Update CI workflow — add coverage step, fail on threshold breach -3. Add coverage badge to README -4. Add `test:ci` script with coverage + junit reporter -5. Gate PRs on passing tests + coverage thresholds diff --git a/docs/plans/2026-04-07-review-and-testing-plan.md b/docs/plans/2026-04-07-review-and-testing-plan.md deleted file mode 100644 index f4c8e54..0000000 --- a/docs/plans/2026-04-07-review-and-testing-plan.md +++ /dev/null @@ -1,1349 +0,0 @@ -# Asteria Review & Testing Implementation Plan - -> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. - -**Goal:** Achieve production-ready test coverage for Asteria MCP server — unit tests, integration tests, formalized UAT plan, and CI/CD hardening. - -**Architecture:** Bottom-up approach. Phase 1 fills unit test gaps. Phase 2 adds integration tests. Phase 3 formalizes UAT. Phase 4 hardens CI/CD. Each phase gates the next. - -**Tech Stack:** Vitest, TypeScript, chrome-remote-interface (mocked), @modelcontextprotocol/sdk - ---- - -## Phase 1: Unit Test Gap Fill - -### Task 1: Extract inline scripts to testable functions - -**Files:** -- Create: `src/ui/stop.ts` -- Create: `tests/unit/ui/stop.test.ts` -- Create: `src/ui/conversations.ts` -- Create: `tests/unit/ui/conversations.test.ts` -- Modify: `src/server.ts:433-444` (comet_stop handler) -- Modify: `src/server.ts:562-597` (comet_list_conversations handler) - -**Step 1: Create `src/ui/stop.ts`** - -```typescript -/** - * Build script to find and click the stop/cancel button. - * Extracted from server.ts for testability. - */ -export function buildStopAgentScript(): string { - return `(function() { - var buttons = document.querySelectorAll('button'); - for (var i = 0; i < buttons.length; i++) { - var label = (buttons[i].getAttribute('aria-label') || '').toLowerCase(); - if (label.indexOf('stop') !== -1 || label.indexOf('cancel') !== -1) { buttons[i].click(); return 'stopped'; } - if (buttons[i].querySelector('svg rect')) { buttons[i].click(); return 'stopped'; } - } - return 'not_found'; - })()` -} -``` - -**Step 2: Create `tests/unit/ui/stop.test.ts`** - -```typescript -import { describe, expect, it } from 'vitest' -import { buildStopAgentScript } from '../../../src/ui/stop.js' - -describe('buildStopAgentScript', () => { - it('returns a string containing an IIFE', () => { - const script = buildStopAgentScript() - expect(script).toContain('(function()') - expect(script).toContain('})()') - }) - - it('looks for stop and cancel aria-labels', () => { - const script = buildStopAgentScript() - expect(script).toContain("getAttribute('aria-label')") - expect(script).toContain("'stop'") - expect(script).toContain("'cancel'") - }) - - it('checks for svg rect stop button', () => { - const script = buildStopAgentScript() - expect(script).toContain('svg rect') - }) - - it('returns stopped when button clicked', () => { - const script = buildStopAgentScript() - expect(script).toContain("return 'stopped'") - }) - - it('returns not_found when no stop button', () => { - const script = buildStopAgentScript() - expect(script).toContain("return 'not_found'") - }) -}) -``` - -**Step 3: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/ui/stop.test.ts` -Expected: PASS - -**Step 4: Create `src/ui/conversations.ts`** - -```typescript -/** - * Build script to extract conversation links from the current page. - * Extracted from server.ts for testability. - */ -export function buildListConversationsScript(): string { - return `(function() { - var links = document.querySelectorAll('a[href]'); - var conversations = []; - var seen = {}; - for (var i = 0; i < links.length; i++) { - var href = links[i].getAttribute('href') || ''; - if (href.indexOf('/search/') !== -1 || href.indexOf('/copilot/') !== -1) { - if (!seen[href]) { - seen[href] = true; - conversations.push({ title: (links[i].innerText || '').trim(), url: href }); - } - } - } - return JSON.stringify(conversations); - })()` -} -``` - -**Step 5: Create `tests/unit/ui/conversations.test.ts`** - -```typescript -import { describe, expect, it } from 'vitest' -import { buildListConversationsScript } from '../../../src/ui/conversations.js' - -describe('buildListConversationsScript', () => { - it('returns a string containing an IIFE', () => { - const script = buildListConversationsScript() - expect(script).toMatch(/^\(function\(\)/) - expect(script).toMatch(/\}\)\(\)$/) - }) - - it('selects anchor elements with href', () => { - const script = buildListConversationsScript() - expect(script).toContain("querySelectorAll('a[href]')") - }) - - it('filters for /search/ and /copilot/ paths', () => { - const script = buildListConversationsScript() - expect(script).toContain("'/search/'") - expect(script).toContain("'/copilot/'") - }) - - it('deduplicates by href via seen map', () => { - const script = buildListConversationsScript() - expect(script).toContain('seen[href]') - }) - - it('returns JSON stringified array', () => { - const script = buildListConversationsScript() - expect(script).toContain('JSON.stringify(conversations)') - }) - - it('extracts title from innerText', () => { - const script = buildListConversationsScript() - expect(script).toContain('innerText') - }) -}) -``` - -**Step 6: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/ui/conversations.test.ts` -Expected: PASS - -**Step 7: Update `src/server.ts` to use extracted functions** - -Replace the inline script in comet_stop handler (around line 433): -```typescript -import { buildStopAgentScript } from './ui/stop.js' -// ... in comet_stop handler: -const script = buildStopAgentScript() -const raw = await client.safeEvaluate(script) -``` - -Replace the inline script in comet_list_conversations handler (around line 562): -```typescript -import { buildListConversationsScript } from './ui/conversations.js' -// ... in comet_list_conversations handler: -const script = buildListConversationsScript() -const raw = await client.safeEvaluate(script) -``` - -**Step 8: Run all tests** - -Run: `npx vitest run` -Expected: All existing tests + new tests PASS - -**Step 9: Commit** - -```bash -git add src/ui/stop.ts src/ui/conversations.ts tests/unit/ui/stop.test.ts tests/unit/ui/conversations.test.ts src/server.ts -git commit -m "refactor: extract inline scripts to testable UI functions" -``` - ---- - -### Task 2: Add CDPClient method tests (mocked CRI) - -**Files:** -- Modify: `tests/unit/cdp/client.test.ts` - -**Context:** CDPClient uses `chrome-remote-interface` (CRI) which returns a client with methods like `Page.enable()`, `Runtime.evaluate()`, etc. We need to mock CRI to test connect, disconnect, navigate, screenshot, evaluate, and reconnect. - -**Step 1: Write failing tests for connect/disconnect/navigate/screenshot** - -```typescript -import { beforeEach, describe, expect, it, vi } from 'vitest' -import { CDPClient } from '../../../src/cdp/client.js' - -// Mock chrome-remote-interface -vi.mock('chrome-remote-interface', () => ({ - default: vi.fn(), -})) - -import CRI from 'chrome-remote-interface' - -function mockCRI(clientOverrides: Record = {}) { - const mockClient = { - Page: { enable: vi.fn(), navigate: vi.fn(), loadEventFired: vi.fn(), captureScreenshot: vi.fn() }, - Runtime: { enable: vi.fn(), evaluate: vi.fn() }, - Emulation: { setDeviceMetricsOverride: vi.fn() }, - Input: { dispatchKeyEvent: vi.fn() }, - Target: { closeTarget: vi.fn() }, - close: vi.fn(), - ...clientOverrides, - } - vi.mocked(CRI).mockResolvedValue(mockClient as any) - return mockClient -} - -describe('CDPClient methods', () => { - beforeEach(() => { - CDPClient.resetInstance() - vi.clearAllMocks() - }) - - describe('connect', () => { - it('connects to a target and enables Page/Runtime', async () => { - const mock = mockCRI() - const client = CDPClient.getInstance() - // Mock httpGet responses via getVersion/listTargets - // These use the private httpGet which calls browser.httpGet - // We need to mock the fetch calls - const originalFetch = globalThis.fetch - let fetchCount = 0 - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - fetchCount++ - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145.0.0.0' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([ - { id: 'target-1', url: 'https://perplexity.ai', type: 'page', title: 'Perplexity' } - ]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - const id = await client.connect() - expect(id).toBe('target-1') - expect(mock.Page.enable).toHaveBeenCalled() - expect(mock.Runtime.enable).toHaveBeenCalled() - expect(client.state.connected).toBe(true) - expect(client.state.targetId).toBe('target-1') - - globalThis.fetch = originalFetch - }) - - it('throws CDPConnectionError when no targets found', async () => { - mockCRI() - const client = CDPClient.getInstance() - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - await expect(client.connect()).rejects.toThrow() - globalThis.fetch = originalFetch - }) - }) - - describe('disconnect', () => { - it('closes CRI client and resets state', async () => { - const mock = mockCRI() - const client = CDPClient.getInstance() - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([ - { id: 't1', url: 'https://perplexity.ai', type: 'page', title: 'P' } - ]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - await client.connect() - await client.disconnect() - expect(mock.close).toHaveBeenCalled() - expect(client.state.connected).toBe(false) - expect(client.state.targetId).toBeNull() - globalThis.fetch = originalFetch - }) - }) - - describe('navigate', () => { - it('calls Page.navigate and waits for loadEventFired', async () => { - const mock = mockCRI() - mock.Page.loadEventFired.mockResolvedValue(undefined) - const client = CDPClient.getInstance() - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([ - { id: 't1', url: 'https://perplexity.ai', type: 'page', title: 'P' } - ]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - await client.connect() - await client.navigate('https://example.com') - expect(mock.Page.navigate).toHaveBeenCalledWith({ url: 'https://example.com' }) - expect(mock.Page.loadEventFired).toHaveBeenCalled() - globalThis.fetch = originalFetch - }) - }) - - describe('screenshot', () => { - it('captures screenshot with correct format', async () => { - const mock = mockCRI() - mock.Page.captureScreenshot.mockResolvedValue({ data: 'base64data' }) - const client = CDPClient.getInstance() - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([ - { id: 't1', url: 'https://perplexity.ai', type: 'page', title: 'P' } - ]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - await client.connect() - const data = await client.screenshot('jpeg') - expect(data).toBe('base64data') - expect(mock.Page.captureScreenshot).toHaveBeenCalledWith( - expect.objectContaining({ format: 'jpeg', clip: expect.any(Object) }) - ) - globalThis.fetch = originalFetch - }) - }) - - describe('evaluate', () => { - it('evaluates expression via Runtime.evaluate', async () => { - const mock = mockCRI() - mock.Runtime.evaluate.mockResolvedValue({ result: { value: 42 } }) - const client = CDPClient.getInstance() - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([ - { id: 't1', url: 'https://perplexity.ai', type: 'page', title: 'P' } - ]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - await client.connect() - const result = await client.evaluate('1+1') - expect(result.result.value).toBe(42) - globalThis.fetch = originalFetch - }) - - it('throws CDPConnectionError when not connected', async () => { - const client = CDPClient.getInstance() - await expect(client.evaluate('1+1')).rejects.toThrow('Not connected') - }) - }) - - describe('pressKey', () => { - it('dispatches keyDown and keyUp events', async () => { - const mock = mockCRI() - const client = CDPClient.getInstance() - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([ - { id: 't1', url: 'https://perplexity.ai', type: 'page', title: 'P' } - ]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - await client.connect() - await client.pressKey('Enter') - expect(mock.Input.dispatchKeyEvent).toHaveBeenCalledWith({ type: 'keyDown', key: 'Enter' }) - expect(mock.Input.dispatchKeyEvent).toHaveBeenCalledWith({ type: 'keyUp', key: 'Enter' }) - globalThis.fetch = originalFetch - }) - }) - - describe('isHealthy', () => { - it('returns true when evaluate returns 2', async () => { - const mock = mockCRI() - mock.Runtime.evaluate.mockResolvedValue({ result: { value: 2 } }) - const client = CDPClient.getInstance() - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockImplementation((url: string) => { - if (url.includes('/json/version')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({ Browser: 'Chrome/145' }) }) - } - if (url.includes('/json/list')) { - return Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve([ - { id: 't1', url: 'https://perplexity.ai', type: 'page', title: 'P' } - ]) }) - } - return Promise.resolve({ ok: false, status: 404, json: () => Promise.resolve(null) }) - }) as any - - await client.connect() - const healthy = await client.isHealthy() - expect(healthy).toBe(true) - globalThis.fetch = originalFetch - }) - - it('returns false when not connected', async () => { - const client = CDPClient.getInstance() - expect(await client.isHealthy()).toBe(false) - }) - }) - - describe('normalizePrompt', () => { - it('strips leading bullets and collapses whitespace', () => { - const client = CDPClient.getInstance() - expect(client.normalizePrompt('- item 1\n- item 2')).toBe('item 1 item 2') - expect(client.normalizePrompt('* bullet\n\n* another')).toBe('bullet another') - expect(client.normalizePrompt(' multiple spaces ')).toBe('multiple spaces') - }) - - it('handles empty string', () => { - const client = CDPClient.getInstance() - expect(client.normalizePrompt('')).toBe('') - }) - - it('handles already-normalized text', () => { - const client = CDPClient.getInstance() - expect(client.normalizePrompt('hello world')).toBe('hello world') - }) - }) -}) -``` - -**Step 2: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/cdp/client.test.ts` -Expected: PASS - -**Step 3: Commit** - -```bash -git add tests/unit/cdp/client.test.ts -git commit -m "test: add CDPClient method tests with mocked CRI" -``` - ---- - -### Task 3: Add CLI unit tests - -**Files:** -- Create: `tests/unit/cli.test.ts` - -**Context:** `src/cli.ts` uses `console.error`/`console.log` and `process.exit`. We mock these for testing. The CLI functions are not exported — we test via `main()` by mocking `process.argv`. - -**Step 1: Write failing tests** - -```typescript -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' - -// Mock the server import to avoid actually starting MCP -vi.mock('../../src/server.js', () => ({ - startServer: vi.fn().mockResolvedValue(undefined), -})) - -// Mock cdp/browser for runDetect -vi.mock('../../src/cdp/browser.js', () => ({ - getCometPath: vi.fn().mockReturnValue('/mock/comet/path'), - isCometProcessRunning: vi.fn().mockReturnValue(true), -})) - -describe('CLI', () => { - let consoleErrorSpy: ReturnType - let consoleLogSpy: ReturnType - let originalArgv: string[] - - beforeEach(() => { - consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) - consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {}) - originalArgv = process.argv - }) - - afterEach(() => { - consoleErrorSpy.mockRestore() - consoleLogSpy.mockRestore() - process.argv = originalArgv - }) - - it('--help prints usage info', async () => { - process.argv = ['node', 'asteria', '--help'] - await import('../../src/cli.js') - expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('asteria')) - expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('USAGE')) - }) - - it('--version prints version', async () => { - process.argv = ['node', 'asteria', '--version'] - await import('../../src/cli.js') - expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringMatching(/asteria v\d+\.\d+\.\d+/)) - }) - - it('unknown command prints error', async () => { - const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => undefined as never) - process.argv = ['node', 'asteria', 'foobar'] - await import('../../src/cli.js') - expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Unknown command')) - exitSpy.mockRestore() - }) -}) -``` - -**Step 2: Run tests** - -Run: `npx vitest run tests/unit/cli.test.ts` -Expected: PASS - -**Step 3: Commit** - -```bash -git add tests/unit/cli.test.ts -git commit -m "test: add CLI unit tests for help, version, unknown command" -``` - ---- - -### Task 4: Add browser.ts edge case tests - -**Files:** -- Modify: `tests/unit/cdp/browser.test.ts` - -**Step 1: Write additional tests** - -Add these tests to the existing `tests/unit/cdp/browser.test.ts`: - -```typescript -describe('isWSL', () => { - it('returns true when uname -r contains microsoft', async () => { - const { execSync } = await import('node:child_process') - vi.spyOn({ execSync }, 'execSync').mockReturnValue('5.15.0-microsoft-standard-WSL2') - // Note: isWSL is not exported, tested indirectly - }) -}) - -describe('httpGet', () => { - it('returns ok:true for successful fetch', async () => { - const { httpGet } = await import('../../../src/cdp/browser.js') - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockResolvedValue({ - ok: true, - status: 200, - json: () => Promise.resolve({ test: true }), - }) as any - - const result = await httpGet('http://localhost/test') - expect(result.ok).toBe(true) - expect(result.status).toBe(200) - - globalThis.fetch = originalFetch - }) - - it('returns ok:false for failed fetch', async () => { - const { httpGet } = await import('../../../src/cdp/browser.js') - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockRejectedValue(new Error('network error')) as any - - const result = await httpGet('http://localhost/test') - expect(result.ok).toBe(false) - expect(result.status).toBe(0) - - globalThis.fetch = originalFetch - }) - - it('returns ok:false for non-200 status', async () => { - const { httpGet } = await import('../../../src/cdp/browser.js') - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockResolvedValue({ - ok: false, - status: 500, - json: () => Promise.resolve(null), - }) as any - - const result = await httpGet('http://localhost/test') - expect(result.ok).toBe(false) - expect(result.status).toBe(500) - - globalThis.fetch = originalFetch - }) - - it('aborts after timeout', async () => { - const { httpGet } = await import('../../../src/cdp/browser.js') - const originalFetch = globalThis.fetch - // Simulate a fetch that never resolves - globalThis.fetch = vi.fn().mockImplementation((_url: string, opts: any) => { - return new Promise((_, reject) => { - // The AbortController should abort this - if (opts?.signal) { - opts.signal.addEventListener('abort', () => reject(new DOMException('Aborted', 'AbortError'))) - } - }) - }) as any - - const result = await httpGet('http://localhost/test', 100) - expect(result.ok).toBe(false) - - globalThis.fetch = originalFetch - }, 10000) -}) - -describe('getCometPath', () => { - it('throws CometNotFoundError when not found', async () => { - const { getCometPath } = await import('../../../src/cdp/browser.js') - delete process.env.COMET_PATH - // Mock platform to be something with no candidates - const originalPlatform = process.platform - Object.defineProperty(process, 'platform', { value: 'freebsd' }) - await expect(getCometPath()).rejects.toThrow('Comet browser not found') - Object.defineProperty(process, 'platform', { value: originalPlatform }) - }) -}) - -describe('isCometProcessRunning', () => { - it('returns false on command failure', async () => { - const { isCometProcessRunning } = await import('../../../src/cdp/browser.js') - // On non-Windows, it uses pgrep which will fail in CI - const result = isCometProcessRunning() - expect(typeof result).toBe('boolean') - }) -}) - -describe('killComet', () => { - it('does not throw on failure', async () => { - const { killComet } = await import('../../../src/cdp/browser.js') - expect(() => killComet()).not.toThrow() - }) -}) - -describe('startCometProcess', () => { - it('spawns process with debug port arg', async () => { - const { startCometProcess } = await import('../../../src/cdp/browser.js') - const { createLogger } = await import('../../../src/logger.js') - const logger = createLogger('error') - - // Mock spawn to avoid launching a real browser - const { spawn } = await import('node:child_process') - const spawnSpy = vi.spyOn(await import('node:child_process'), 'spawn').mockReturnValue({ - unref: vi.fn(), - } as any) - - startCometProcess('/fake/comet', 9222, logger) - expect(spawnSpy).toHaveBeenCalledWith('/fake/comet', ['--remote-debugging-port=9222'], expect.any(Object)) - - spawnSpy.mockRestore() - }) -}) -``` - -**Step 2: Run tests** - -Run: `npx vitest run tests/unit/cdp/browser.test.ts` -Expected: PASS - -**Step 3: Commit** - -```bash -git add tests/unit/cdp/browser.test.ts -git commit -m "test: add browser.ts edge case tests (httpGet, killComet, startCometProcess)" -``` - ---- - -### Task 5: Add config.ts edge case tests - -**Files:** -- Modify: `tests/unit/config.test.ts` - -**Step 1: Write additional tests** - -```typescript -describe('loadConfig edge cases', () => { - it('handles malformed JSON in config file', () => { - // Write a malformed config, load, verify defaults still work - // This tests the catch block in loadConfigFile - const { writeFileSync, unlinkSync } = await import('node:fs') - writeFileSync('asteria.config.json', '{ invalid json }') - const config = loadConfig() - expect(config.port).toBe(9222) // Falls back to default - unlinkSync('asteria.config.json') - }) - - it('handles invalid env var number values', () => { - process.env.ASTERIA_PORT = 'not-a-number' - const config = loadConfig() - expect(config.port).toBe(9222) // Falls back to default - delete process.env.ASTERIA_PORT - }) - - it('handles overrides parameter', () => { - const config = loadConfig({ port: 9999 }) - expect(config.port).toBe(9999) - }) - - it('overrides take precedence over env vars', () => { - process.env.ASTERIA_PORT = '8080' - const config = loadConfig({ port: 9999 }) - expect(config.port).toBe(9999) // Override wins - delete process.env.ASTERIA_PORT - }) - - it('ignores unknown keys in config file', () => { - const { writeFileSync, unlinkSync } = await import('node:fs') - writeFileSync('asteria.config.json', '{"port": 8080, "unknownKey": "ignored"}') - const config = loadConfig() - expect(config.port).toBe(8080) - expect((config as any).unknownKey).toBeUndefined() - unlinkSync('asteria.config.json') - }) -}) -``` - -**Step 2: Run tests** - -Run: `npx vitest run tests/unit/config.test.ts` -Expected: PASS - -**Step 3: Commit** - -```bash -git add tests/unit/config.test.ts -git commit -m "test: add config.ts edge case tests (malformed JSON, invalid env vars)" -``` - ---- - -### Task 6: Add status/navigation/extraction edge case tests - -**Files:** -- Modify: `tests/unit/ui/status.test.ts` -- Modify: `tests/unit/ui/navigation.test.ts` -- Modify: `tests/unit/ui/extraction.test.ts` -- Modify: `tests/unit/prose-filter.test.ts` - -**Step 1: Add edge case tests to status.test.ts** - -```typescript -describe('buildGetAgentStatusScript edge cases', () => { - it('accepts custom selectors parameter', () => { - const customSelectors = { - ...SELECTORS, - LOADING: ['.custom-spinner'], - } - const script = buildGetAgentStatusScript(customSelectors) - expect(script).toContain('.custom-spinner') - }) - - it('includes response truncation at 8000 chars', () => { - const script = buildGetAgentStatusScript() - expect(script).toContain('8000') - }) - - it('includes step pattern extraction', () => { - const script = buildGetAgentStatusScript() - expect(script).toContain('stepPatterns') - }) - - it('detects working patterns', () => { - const script = buildGetAgentStatusScript() - expect(script).toContain('Working') - expect(script).toContain('Searching') - expect(script).toContain('Navigating to') - }) -}) -``` - -**Step 2: Add edge case tests to navigation.test.ts** - -```typescript -describe('buildModeSwitchScript edge cases', () => { - it('returns standard_mode_no_action for standard mode', () => { - const script = buildModeSwitchScript('standard') - expect(script).toContain('standard_mode_no_action') - }) - - it('handles unknown mode by using raw string', () => { - const script = buildModeSwitchScript('unknown-mode') - expect(script).toContain('unknown-mode') - }) - - it('waits for listbox with retry loop', () => { - const script = buildModeSwitchScript('deep-research') - expect(script).toContain('maxAttempts') - expect(script).toContain('listbox') - }) -}) - -describe('buildGetCurrentModeScript', () => { - it('returns standard by default', () => { - const script = buildGetCurrentModeScript() - expect(script).toContain("'standard'") - }) - - it('detects computer mode from /copilot/ URL', () => { - const script = buildGetCurrentModeScript() - expect(script).toContain('/copilot/') - expect(script).toContain("'computer'") - }) -}) -``` - -**Step 3: Add edge case tests to extraction.test.ts** - -```typescript -describe('buildExtractPageContentScript edge cases', () => { - it('handles custom maxLength', () => { - const script = buildExtractPageContentScript(5000) - expect(script).toContain('5000') - }) - - it('handles body being null', () => { - const script = buildExtractPageContentScript() - expect(script).toContain('!body') - expect(script).toContain("JSON.stringify({ text: '', title: '' })") - }) - - it('strips UI noise text', () => { - const script = buildExtractPageContentScript() - expect(script).toContain('Sign in') - expect(script).toContain('Log in') - }) -}) - -describe('buildExtractSourcesScript edge cases', () => { - it('filters javascript: URLs', () => { - const script = buildExtractSourcesScript() - expect(script).toContain("'javascript:'") - }) - - it('filters hash-only URLs', () => { - const script = buildExtractSourcesScript() - expect(script).toContain("'#'") - }) - - it('deduplicates by URL', () => { - const script = buildExtractSourcesScript() - expect(script).toContain('seenUrls') - }) - - it('extracts domain as fallback title', () => { - const script = buildExtractSourcesScript() - expect(script).toContain('extractDomain') - }) -}) -``` - -**Step 4: Add tests to prose-filter.test.ts** - -```typescript -describe('buildPreSendStateScript', () => { - it('returns IIFE that returns JSON with proseCount and lastProseText', () => { - const script = buildPreSendStateScript() - expect(script).toMatch(/^\(function\(\)/) - expect(script).toContain('proseCount') - expect(script).toContain('lastProseText') - expect(script).toContain('JSON.stringify') - }) - - it('includes findProseJS body', () => { - const script = buildPreSendStateScript() - expect(script).toContain('proseElements') - expect(script).toContain('excludeTags') - }) -}) -``` - -**Step 5: Run all UI tests** - -Run: `npx vitest run tests/unit/ui/ tests/unit/prose-filter.test.ts` -Expected: PASS - -**Step 6: Commit** - -```bash -git add tests/unit/ui/status.test.ts tests/unit/ui/navigation.test.ts tests/unit/ui/extraction.test.ts tests/unit/prose-filter.test.ts -git commit -m "test: add edge case tests for status, navigation, extraction, prose-filter" -``` - ---- - -### Task 7: Add version.ts and snapshot.ts tests - -**Files:** -- Create: `tests/unit/version.test.ts` -- Create: `tests/unit/snapshot.test.ts` - -**Step 1: Write version tests** - -```typescript -import { describe, expect, it, vi } from 'vitest' - -describe('detectCometVersion', () => { - it('returns default v145 selectors on fetch failure', async () => { - const { detectCometVersion } = await import('../../src/version.js') - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockRejectedValue(new Error('no connection')) as any - - const result = await detectCometVersion(9222) - expect(result.chromeMajor).toBe(145) - expect(result.browser).toBe('Unknown') - expect(result.selectors).toBeDefined() - - globalThis.fetch = originalFetch - }) - - it('parses Chrome version from Browser header', async () => { - const { detectCometVersion } = await import('../../src/version.js') - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockResolvedValue({ - ok: true, - status: 200, - json: () => Promise.resolve({ Browser: 'Chrome/145.0.5678.90' }), - }) as any - - const result = await detectCometVersion(9222) - expect(result.chromeMajor).toBe(145) - expect(result.browser).toBe('Chrome/145.0.5678.90') - - globalThis.fetch = originalFetch - }) - - it('handles non-OK HTTP response', async () => { - const { detectCometVersion } = await import('../../src/version.js') - const originalFetch = globalThis.fetch - globalThis.fetch = vi.fn().mockResolvedValue({ - ok: false, - status: 500, - }) as any - - const result = await detectCometVersion(9222) - expect(result.chromeMajor).toBe(145) // Falls back to default - - globalThis.fetch = originalFetch - }) -}) -``` - -**Step 2: Write snapshot tests** - -```typescript -import { describe, expect, it, vi } from 'vitest' - -vi.mock('../../src/cdp/client.js', () => ({ - CDPClient: { - getInstance: vi.fn().mockReturnValue({ - launchOrConnect: vi.fn().mockResolvedValue('target-1'), - safeEvaluate: vi.fn().mockResolvedValue({ - result: { value: '{"inputs":[],"buttons":[],"proseCount":0}' }, - }), - disconnect: vi.fn().mockResolvedValue(undefined), - }), - resetInstance: vi.fn(), - }, -})) - -describe('runSnapshot', () => { - it('connects, evaluates, and disconnects', async () => { - const { runSnapshot } = await import('../../src/snapshot.js') - const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) - - await runSnapshot() - - const { CDPClient } = await import('../../src/cdp/client.js') - expect(CDPClient.getInstance).toHaveBeenCalled() - - consoleSpy.mockRestore() - }) -}) -``` - -**Step 3: Run tests** - -Run: `npx vitest run tests/unit/version.test.ts tests/unit/snapshot.test.ts` -Expected: PASS - -**Step 4: Commit** - -```bash -git add tests/unit/version.test.ts tests/unit/snapshot.test.ts -git commit -m "test: add version.ts and snapshot.ts unit tests" -``` - ---- - -### Task 8: Add selectors tests - -**Files:** -- Create: `tests/unit/selectors/index.test.ts` -- Create: `tests/unit/selectors/v145.test.ts` - -**Step 1: Write selector index tests** - -```typescript -import { describe, expect, it } from 'vitest' -import { getSelectorsForVersion, parseChromeVersion } from '../../../src/selectors/index.js' - -describe('parseChromeVersion', () => { - it('extracts major version from Chrome string', () => { - expect(parseChromeVersion('Chrome/145.0.5678.90')).toBe(145) - }) - - it('returns 0 for non-Chrome string', () => { - expect(parseChromeVersion('Firefox/120.0')).toBe(0) - }) - - it('returns 0 for empty string', () => { - expect(parseChromeVersion('')).toBe(0) - }) -}) - -describe('getSelectorsForVersion', () => { - it('returns v145 selectors for Chrome 145', () => { - const selectors = getSelectorsForVersion(145) - expect(selectors).toBeDefined() - expect(selectors.INPUT).toBeDefined() - expect(selectors.SUBMIT).toBeDefined() - }) - - it('returns v145 (fallback) for unknown version', () => { - const selectors = getSelectorsForVersion(999) - expect(selectors).toBeDefined() - expect(selectors.INPUT).toBeDefined() - }) -}) -``` - -**Step 2: Write v145 selector tests** - -```typescript -import { describe, expect, it } from 'vitest' -import { v145Selectors } from '../../../src/selectors/v145.js' - -describe('v145Selectors', () => { - it('defines all required selector categories', () => { - expect(v145Selectors.INPUT).toBeDefined() - expect(v145Selectors.SUBMIT).toBeDefined() - expect(v145Selectors.STOP).toBeDefined() - expect(v145Selectors.RESPONSE).toBeDefined() - expect(v145Selectors.LOADING).toBeDefined() - expect(v145Selectors.TYPEAHEAD_MENU).toBeDefined() - expect(v145Selectors.MENU_ITEM).toBeDefined() - }) - - it('has non-empty arrays for each selector category', () => { - for (const [key, value] of Object.entries(v145Selectors)) { - expect(Array.isArray(value)).toBe(true) - expect(value.length).toBeGreaterThan(0) - } - }) - - it('contains valid CSS selectors', () => { - for (const [key, selectors] of Object.entries(v145Selectors)) { - for (const sel of selectors as string[]) { - expect(() => document.querySelector(sel)).not.toThrow() - } - } - }) -}) -``` - -**Step 3: Run tests** - -Run: `npx vitest run tests/unit/selectors/` -Expected: PASS - -**Step 4: Commit** - -```bash -git add tests/unit/selectors/ -git commit -m "test: add selector registry and v145 selector tests" -``` - ---- - -### Task 9: Add connection.ts edge case tests - -**Files:** -- Modify: `tests/unit/cdp/connection.test.ts` - -**Step 1: Add edge case tests** - -```typescript -describe('isConnectionError edge cases', () => { - it('returns false for non-Error inputs', () => { - expect(isConnectionError('string')).toBe(false) - expect(isConnectionError(null)).toBe(false) - expect(isConnectionError(undefined)).toBe(false) - expect(isConnectionError(42)).toBe(false) - }) - - it('returns false for unrelated errors', () => { - expect(isConnectionError(new Error('something else'))).toBe(false) - }) -}) - -describe('getBackoffDelay edge cases', () => { - it('returns exponential delay', () => { - const d1 = getBackoffDelay(1, 30000) - const d2 = getBackoffDelay(2, 30000) - const d3 = getBackoffDelay(3, 30000) - expect(d2).toBeGreaterThan(d1) - expect(d3).toBeGreaterThan(d2) - }) - - it('caps at max delay', () => { - const delay = getBackoffDelay(100, 5000) - expect(delay).toBeLessThanOrEqual(5000) - }) - - it('handles attempt 0', () => { - const delay = getBackoffDelay(0, 30000) - expect(delay).toBeGreaterThanOrEqual(0) - }) -}) -``` - -**Step 2: Run tests** - -Run: `npx vitest run tests/unit/cdp/connection.test.ts` -Expected: PASS - -**Step 3: Commit** - -```bash -git add tests/unit/cdp/connection.test.ts -git commit -m "test: add connection.ts edge case tests" -``` - ---- - -## Phase 2: Integration Tests - -### Task 10: Create integration test harness - -**Files:** -- Modify: `tests/integration/mock-cdp-server.ts` (add more capabilities) -- Create: `tests/integration/tools/` directory - -**Step 1: Enhance mock CDP server with Runtime.evaluate support** - -Add to mock-cdp-server.ts the ability to handle WebSocket connections and return scripted responses for tool handler evaluation scripts. - -**Step 2: Create base integration test helper** - -Create `tests/integration/tools/helpers.ts` with shared mock setup for tool handler tests. - -**Step 3: Commit** - -```bash -git add tests/integration/ -git commit -m "test: add integration test harness with enhanced mock CDP" -``` - ---- - -### Task 11: Add tool handler integration tests (batch 1) - -**Files:** -- Create: `tests/integration/tools/connect.test.ts` -- Create: `tests/integration/tools/ask.test.ts` -- Create: `tests/integration/tools/poll.test.ts` -- Create: `tests/integration/tools/stop.test.ts` - -Test each tool handler against the mock CDP server with happy path + error path. - -**Step 1: Write tests for connect, ask, poll, stop** - -**Step 2: Run tests** - -Run: `npx vitest run tests/integration/tools/` -Expected: PASS - -**Step 3: Commit** - -```bash -git add tests/integration/tools/ -git commit -m "test: add integration tests for connect, ask, poll, stop tools" -``` - ---- - -### Task 12: Add tool handler integration tests (batch 2) - -**Files:** -- Create: `tests/integration/tools/screenshot.test.ts` -- Create: `tests/integration/tools/mode.test.ts` -- Create: `tests/integration/tools/tabs.test.ts` -- Create: `tests/integration/tools/extraction.test.ts` -- Create: `tests/integration/tools/conversations.test.ts` - -**Step 1: Write tests for remaining 8 tools** - -**Step 2: Run tests** - -Run: `npx vitest run tests/integration/tools/` -Expected: PASS - -**Step 3: Commit** - -```bash -git add tests/integration/tools/ -git commit -m "test: add integration tests for remaining tool handlers" -``` - ---- - -## Phase 3: UAT Plan Formalization - -### Task 13: Write formal UAT test plan - -**Files:** -- Create: `docs/uat/uat-plan.md` - -**Step 1: Write structured UAT plan** - -Create formal test cases for all 12 tools with: -- Test ID (UAT-001 through UAT-040+) -- Preconditions -- Numbered steps -- Expected results -- Pass/Fail fields - -Categories: Smoke (5min), Functional (20min), Error Recovery (10min), Mode Switching (5min), Cross-Session (5min) - -**Step 2: Commit** - -```bash -git add docs/uat/ -git commit -m "docs: add formalized UAT test plan with pass/fail criteria" -``` - ---- - -## Phase 4: CI/CD Hardening - -### Task 14: Add coverage thresholds and CI updates - -**Files:** -- Modify: `vitest.config.ts` -- Modify: `.github/workflows/ci.yml` -- Modify: `package.json` -- Modify: `README.md` (add coverage badge) - -**Step 1: Update vitest.config.ts with coverage** - -```typescript -export default defineConfig({ - test: { - include: ['tests/**/*.test.ts'], - environment: 'node', - coverage: { - provider: 'v8', - reporter: ['text', 'lcov', 'html'], - reportsDirectory: 'coverage', - thresholds: { - statements: 80, - branches: 70, - functions: 80, - lines: 80, - }, - }, - }, -}) -``` - -**Step 2: Update CI workflow** - -```yaml -- run: npx vitest run --coverage -- name: Check coverage - if: always() - uses: actions/upload-artifact@v4 - with: - name: coverage-report - path: coverage/ -``` - -**Step 3: Add test:ci script to package.json** - -```json -"test:ci": "vitest run --coverage" -``` - -**Step 4: Add coverage badge to README** - -**Step 5: Run coverage locally** - -Run: `npx vitest run --coverage` -Expected: All tests pass, coverage thresholds met - -**Step 6: Commit** - -```bash -git add vitest.config.ts .github/workflows/ci.yml package.json README.md -git commit -m "ci: add coverage thresholds, coverage reporting, and CI updates" -``` - ---- - -## Summary - -| Phase | Tasks | Estimated Tests Added | -|-------|-------|----------------------| -| Phase 1: Unit Gaps | Tasks 1-9 | ~80 new unit tests | -| Phase 2: Integration | Tasks 10-12 | ~30 new integration tests | -| Phase 3: UAT | Task 13 | 40+ UAT test cases | -| Phase 4: CI/CD | Task 14 | Coverage enforcement | - -**Total: 14 tasks, ~110 automated tests, 40+ manual UAT cases** diff --git a/docs/plans/2026-04-07-uat-bugfixes-design.md b/docs/plans/2026-04-07-uat-bugfixes-design.md deleted file mode 100644 index 5b17f41..0000000 --- a/docs/plans/2026-04-07-uat-bugfixes-design.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -date: 2026-04-07 -title: UAT Bug Fixes — screenshot auto-connect + stale response detection -status: approved -approach: Approach A for both bugs ---- - -# UAT Bug Fixes PRD - -Found during UAT execution on 2026-04-07. - -## BUG-1: screenshot() doesn't auto-connect - -**Severity:** High — screenshot completely fails when called from a fresh process - -**Symptom:** `comet_screenshot` returns `[CDP_CONNECTION_FAILED] Not connected` when called from a new `asteria call` process, while `comet_poll` and other evaluate-based tools auto-reconnect successfully. - -**Root cause:** `screenshot()` (src/cdp/client.ts:134) calls `withAutoReconnect()` directly without first calling `ensureHealthyConnection()`. Compare with `safeEvaluate()` (line 165) which calls `ensureHealthyConnection()` before `withAutoReconnect()`. - -**Fix:** Add `await this.ensureHealthyConnection()` as the first line of `screenshot()`, matching the pattern in `safeEvaluate()`. - -**File:** `src/cdp/client.ts` — add 1 line before `return await this.withAutoReconnect(...)` - -**Testing:** Add a unit test verifying screenshot calls `ensureHealthyConnection` first. Run UAT-004 again. - ---- - -## BUG-2: comet_ask returns stale responses - -**Severity:** High — cross-query contamination, returns wrong answer - -**Symptom:** When a second query is submitted, `comet_ask` returns the response from the first query instead of the new one. Happens because the old response's prose text is still on the page and matches `preSendState.lastProseText`. - -**Root cause:** The pre-send state capture (server.ts:337-342) records `lastProseText`. During polling (line 376), the check `status.response !== preSendState.lastProseText` is `false` when the old response is still on the page, so the code never detects a "new" response. The `hasSubstantialResponse` heuristic (>50 chars) can match the old response. - -**Fix:** Use `proseCount` from pre-send state as the primary new-response signal instead of text comparison. A new response adds new prose elements, so if `proseCount` increases, a new response exists. Keep the existing text comparison as a secondary signal. - -**File:** `src/server.ts` — modify the polling loop in comet_ask handler (lines 360-396) - -**Logic change:** -- Capture `preSendState.proseCount` (already captured) -- During polling, also check prose count from agent status -- If prose count > preSend count, treat as new response -- Keep existing `hasSubstantialResponse` as fallback - -**Testing:** Add integration test for sequential queries. Run UAT-027 again. diff --git a/docs/plans/2026-04-08-audit-fixes-design.md b/docs/plans/2026-04-08-audit-fixes-design.md deleted file mode 100644 index 5c59467..0000000 --- a/docs/plans/2026-04-08-audit-fixes-design.md +++ /dev/null @@ -1,163 +0,0 @@ ---- -date: 2026-04-08 -title: Audit Fixes — Production Release Gate -status: approved -approach: Approach A — Surgical Fixes ---- - -# Audit Fixes Design - -Comprehensive audit found 38 findings (6 Critical, 6 High, 11 Medium, 10 Low, 5 Info). -This design covers Critical + High only, plus test coverage backfill — the production release gate. - -## Scope - -- 12 code fixes (3 security, 3 resilience, 3 error handling, 3 dead code cleanup) -- 4 test coverage areas -- All changes are surgical — minimal lines touched per finding - ---- - -## Section 1: Security (3 fixes) - -### S1.1 — JS injection via prompt - -**File:** `src/ui/input.ts:4-42`, `src/ui/navigation.ts:23-68` - -**Problem:** `buildTypePromptScript()` escapes backslashes, quotes, newlines but misses backticks and template literals (`${...}`). `buildModeSwitchScript()` interpolates mode name without escaping. - -**Fix:** Replace manual escaping with `JSON.stringify()` in both functions. This handles all edge cases (backticks, template literals, unicode line separators, etc.). - -### S1.2 — SSRF via URL validation - -**File:** `src/server.ts:587-604` - -**Problem:** `url.includes('perplexity.ai')` allows `perplexity.ai.evil.com`, `evil.com/perplexity.ai/`, `perplexity.ai@evil.com`. - -**Fix:** Use `new URL(url).hostname` check — only allow `hostname === 'perplexity.ai'` or `.endsWith('.perplexity.ai')`. - -### S1.3 — Spawn error handling - -**File:** `src/cdp/browser.ts:108-117` - -**Problem:** Detached Comet process has no error handler. Spawn failures are silently swallowed. - -**Fix:** Add `.on('error', (err) => logger.error(...))` before `unref()`. - ---- - -## Section 2: Resilience and Concurrency (3 fixes) - -### S2.1 — Operation Queue in CDPClient - -**File:** `src/cdp/client.ts` - -**Problem:** CDPClient singleton has no locking. Concurrent tool calls share mutable state — can corrupt connection state. - -**Fix:** Add Promise-based mutex serializer: -``` -private opLock: Promise = Promise.resolve() - -private async enqueue(fn: () => Promise): Promise { - const prev = this.opLock - let resolve: () => void - this.opLock = new Promise(r => { resolve = r }) - await prev - try { return await fn() } finally { resolve!() } -} -``` -All public methods (screenshot, safeEvaluate, navigate, etc.) wrap their logic through `enqueue()`. No external dependencies. - -### S2.2 — Reconnect race condition - -**File:** `src/cdp/client.ts:207-238` - -**Problem:** `reconnect()` returns silently if already reconnecting. Callers proceed against broken connection. - -**Fix:** Track a shared `reconnectPromise`. If already reconnecting, await the existing promise instead of returning silently: -``` -private reconnectPromise: Promise | null = null - -// In reconnect(): -if (this.state.isReconnecting && this.reconnectPromise) { - return this.reconnectPromise -} -this.reconnectPromise = (async () => { /* reconnect logic */ })() -try { await this.reconnectPromise } finally { this.reconnectPromise = null } -``` - -### S2.3 — Health check + error propagation - -**File:** `src/cdp/client.ts:201-205`, `114-123`, `276-296` - -**Problem:** `ensureHealthyConnection` doesn't catch reconnect failures. `disconnect()` and `closeExtraTabs()` silently swallow errors. - -**Fix:** -- `ensureHealthyConnection`: wrap reconnect in try/catch, log warning, let caller's withAutoReconnect handle retry. -- Add `logger.debug()` in all empty catch blocks. - ---- - -## Section 3: Error Handling and Timeout (3 fixes) - -### S3.1 — Timeout cleanup in comet_ask - -**File:** `src/server.ts:364-410` - -**Problem:** Timeout fires but last safeEvaluate may still be pending. No cleanup of in-progress state. - -**Fix:** Add `timedOut` flag checked in the while loop. On timeout exit, flag prevents further evaluations. - -### S3.2 — extractValue error type - -**File:** `src/server.ts:203-212` - -**Problem:** `extractValue` throws generic `Error` — loses AsteriaError context. - -**Fix:** Throw `EvaluationError` instead of `Error`, consistent with the error hierarchy. - -### S3.3 — parseAgentStatus safety - -**File:** `src/server.ts:225-228` - -**Problem:** `JSON.parse` on malformed CDP response throws unhandled. - -**Fix:** Wrap in try/catch, return empty status object as fallback. - ---- - -## Section 4: Test Coverage Backfill - -### S4.1 — src/cli.ts (0% → 70%+) - -- Mock child_process, test runDetect() and runCall() -- JSON-RPC message construction, timeout, screenshot file write - -### S4.2 — CDP client reconnection (75% → 85%+) - -- Max reconnect attempts → throws -- withAutoReconnect retry on connection error -- ensureHealthyConnection calls reconnect when unhealthy -- Operation queue serializes concurrent calls - -### S4.3 — Security fix tests - -- Prompt with backticks, `${}`, unicode → properly escaped -- SSRF URLs → rejected -- Spawn error → logged - -### S4.4 — Config env var branches (62% → 80%+) - -- All ASTERIA_* env vars with valid/invalid values -- Malformed config file JSON - ---- - -## Out of Scope (deferred post-v1.0) - -- Dead code removal (unused exports) -- Magic number extraction to config -- Logging consistency cleanup -- Type safety improvements (any casts) -- buildModeSwitchScript async fix -- Medium/Low findings from all audits diff --git a/docs/plans/2026-04-08-audit-fixes-plan.md b/docs/plans/2026-04-08-audit-fixes-plan.md deleted file mode 100644 index 2cd474d..0000000 --- a/docs/plans/2026-04-08-audit-fixes-plan.md +++ /dev/null @@ -1,874 +0,0 @@ -# Audit Fixes — Production Release Gate Implementation Plan - -> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. - -**Goal:** Fix all Critical + High audit findings and backfill test coverage for production readiness. - -**Architecture:** Surgical in-place fixes. Add operation queue to CDPClient for concurrency safety. Use JSON.stringify for injection-safe escaping. Use URL parsing for SSRF-safe validation. - -**Tech Stack:** TypeScript, Vitest, chrome-remote-interface, MCP SDK - ---- - -### Task 1: Fix JS injection via prompt (S1.1 — CRITICAL) - -**Files:** -- Modify: `src/ui/input.ts:4-42` -- Test: `tests/unit/ui/input.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/ui/input.test.ts`: - -```typescript -describe('buildTypePromptScript injection safety', () => { - it('escapes backticks in prompt', () => { - const script = buildTypePromptScript('test` injected code') - expect(script).not.toContain('${') - expect(script).not.toContain('`') - }) - - it('escapes template literal expressions', () => { - const script = buildTypePromptScript('${document.cookie}') - expect(script).not.toContain('${') - }) - - it('escapes unicode line separators', () => { - const script = buildTypePromptScript('test\u2028line') - expect(script).not.toContain('\u2028') - }) -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/ui/input.test.ts` -Expected: FAIL — backtick/template injection not escaped - -**Step 3: Write minimal implementation** - -In `src/ui/input.ts`, replace lines 5-9: - -```typescript -// BEFORE (manual escaping — incomplete): -const escaped = prompt - .replace(/\\/g, '\\\\') - .replace(/'/g, "\\'") - .replace(/\n/g, '\\n') - .replace(/"/g, '\\"') - -// AFTER (JSON.stringify — complete escaping): -const escaped = JSON.stringify(prompt).slice(1, -1) -``` - -**Step 4: Run test to verify it passes** - -Run: `npx vitest run tests/unit/ui/input.test.ts` -Expected: PASS - -**Step 5: Commit** - -```bash -git add src/ui/input.ts tests/unit/ui/input.test.ts -git commit -m "fix: use JSON.stringify for prompt escaping to prevent JS injection (audit S1.1)" -``` - ---- - -### Task 2: Fix JS injection via mode name (S1.1b — HIGH) - -**Files:** -- Modify: `src/ui/navigation.ts:25-26` -- Test: `tests/unit/ui/navigation.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/ui/navigation.test.ts`: - -```typescript -describe('buildModeSwitchScript injection safety', () => { - it('escapes special characters in mode display name', () => { - // If a mode name contained injection payload - const script = buildModeSwitchScript("standard';alert(1);//") - expect(script).not.toContain("';alert") - }) -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/ui/navigation.test.ts` - -**Step 3: Write minimal implementation** - -In `src/ui/navigation.ts`, change line 26: - -```typescript -// BEFORE: -var displayName = '${displayName}'; - -// AFTER: -var displayName = ${JSON.stringify(displayName)}; -``` - -**Step 4: Run test to verify it passes** - -Run: `npx vitest run tests/unit/ui/navigation.test.ts` - -**Step 5: Commit** - -```bash -git add src/ui/navigation.ts tests/unit/ui/navigation.test.ts -git commit -m "fix: use JSON.stringify for mode name escaping to prevent JS injection (audit S1.1b)" -``` - ---- - -### Task 3: Fix SSRF via URL validation (S1.2 — HIGH) - -**Files:** -- Modify: `src/server.ts:587-592` -- Test: `tests/integration/tools/ui-tools.test.ts` - -**Step 1: Write the failing test** - -Add to the `comet_open_conversation` describe block in the integration test file: - -```typescript -it('rejects domain suffix attack', async () => { - const handler = getHandler('comet_open_conversation') - const result = await handler({ url: 'https://perplexity.ai.evil.com/search/123' }) - expect(result.content[0].text).toContain('Error') -}) - -it('rejects path-based bypass', async () => { - const handler = getHandler('comet_open_conversation') - const result = await handler({ url: 'https://evil.com/perplexity.ai/' }) - expect(result.content[0].text).toContain('Error') -}) - -it('rejects credential-based URL confusion', async () => { - const handler = getHandler('comet_open_conversation') - const result = await handler({ url: 'https://perplexity.ai@evil.com/' }) - expect(result.content[0].text).toContain('Error') -}) - -it('accepts valid perplexity.ai URL', async () => { - const handler = getHandler('comet_open_conversation') - const result = await handler({ url: 'https://www.perplexity.ai/search/abc123' }) - expect(result.content[0].text).toContain('Navigated to:') -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/integration/tools/ui-tools.test.ts` -Expected: FAIL — suffix attack not blocked - -**Step 3: Write minimal implementation** - -In `src/server.ts`, replace the URL validation block (around line 588-592): - -```typescript -// BEFORE: -if (!url.startsWith('https://') || !url.includes('perplexity.ai')) { - return toMcpError( - new Error(`Invalid URL: must be a https://perplexity.ai/ URL, got "${url}"`), - ) -} - -// AFTER: -let parsed: URL -try { - parsed = new URL(url) -} catch { - return toMcpError(new Error(`Invalid URL: "${url}"`)) -} -if (parsed.protocol !== 'https:' || !parsed.hostname.endsWith('perplexity.ai')) { - return toMcpError( - new Error(`Invalid URL: must be a https://perplexity.ai/ URL, got "${url}"`), - ) -} -``` - -Note: `.endsWith('perplexity.ai')` covers both `perplexity.ai` and `www.perplexity.ai` and any subdomain. - -**Step 4: Run test to verify it passes** - -Run: `npx vitest run tests/integration/tools/ui-tools.test.ts` - -**Step 5: Commit** - -```bash -git add src/server.ts tests/integration/tools/ui-tools.test.ts -git commit -m "fix: use URL hostname parsing for SSRF-safe URL validation (audit S1.2)" -``` - ---- - -### Task 4: Fix spawn error handling (S1.3 — CRITICAL) - -**Files:** -- Modify: `src/cdp/browser.ts:108-117` -- Test: `tests/unit/cdp/browser.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/cdp/browser.test.ts`: - -```typescript -it('startCometProcess attaches error handler to spawned process', () => { - const { spawn } = await import('node:child_process') - // Mock spawn to capture the child process - const mockChild = { unref: vi.fn(), on: vi.fn() } - vi.doMock('node:child_process', () => ({ - ...actual, - spawn: vi.fn().mockReturnValue(mockChild), - })) - startCometProcess('/path/to/comet', 9222, mockLogger) - expect(mockChild.on).toHaveBeenCalledWith('error', expect.any(Function)) -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/cdp/browser.test.ts` - -**Step 3: Write minimal implementation** - -In `src/cdp/browser.ts`, change `startCometProcess`: - -```typescript -// BEFORE: -export function startCometProcess(cometPath: string, port: number, logger: Logger): void { - const args = [`--remote-debugging-port=${port}`] - logger.info(`Launching Comet: ${cometPath} ${args.join(' ')}`) - const child = spawn(cometPath, args, { - detached: true, - stdio: 'ignore', - shell: isWindows(), - }) - child.unref() -} - -// AFTER: -export function startCometProcess(cometPath: string, port: number, logger: Logger): void { - const args = [`--remote-debugging-port=${port}`] - logger.info(`Launching Comet: ${cometPath} ${args.join(' ')}`) - const child = spawn(cometPath, args, { - detached: true, - stdio: 'ignore', - shell: isWindows(), - }) - child.on('error', (err) => logger.error(`Comet spawn failed: ${err.message}`)) - child.unref() -} -``` - -**Step 4: Run test to verify it passes** - -Run: `npx vitest run tests/unit/cdp/browser.test.ts` - -**Step 5: Commit** - -```bash -git add src/cdp/browser.ts tests/unit/cdp/browser.test.ts -git commit -m "fix: add error handler to spawned Comet process (audit S1.3)" -``` - ---- - -### Task 5: Add operation queue to CDPClient (S2.1 — CRITICAL) - -**Files:** -- Modify: `src/cdp/client.ts` (add enqueue method, wrap public methods) -- Test: `tests/unit/cdp/client.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/cdp/client.test.ts`: - -```typescript -describe('CDPClient operation queue', () => { - it('serializes concurrent operations', async () => { - originalFetch = mockFetchForConnect() - mockCRI() - - const client = CDPClient.getInstance() - await client.connect() - - const order: number[] = [] - const op1 = client['enqueue'](async () => { - order.push(1) - await new Promise((r) => setTimeout(r, 50)) - order.push(2) - }) - const op2 = client['enqueue'](async () => { - order.push(3) - }) - await Promise.all([op1, op2]) - expect(order).toEqual([1, 2, 3]) - }) -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/cdp/client.test.ts` -Expected: FAIL — `enqueue` not defined - -**Step 3: Write minimal implementation** - -Add to `CDPClient` class in `src/cdp/client.ts`, after the `state` property (around line 22): - -```typescript - private opLock: Promise = Promise.resolve() - - private async enqueue(fn: () => Promise): Promise { - const prev = this.opLock - let resolve!: () => void - this.opLock = new Promise((r) => { resolve = r }) - await prev - try { - return await fn() - } finally { - resolve() - } - } -``` - -Then wrap the public methods that touch `criClient`. For each of `screenshot`, `navigate`, `safeEvaluate`, `evaluate`, `pressKey`, `disconnect`, `closeExtraTabs`, wrap the body in `enqueue`: - -```typescript -// Example for screenshot (already has ensureHealthyConnection): -async screenshot(format: 'png' | 'jpeg' = 'png'): Promise { - return this.enqueue(async () => { - await this.ensureHealthyConnection() - return await this.withAutoReconnect(async () => { - // ... existing code unchanged ... - }) - }) -} -``` - -Same pattern for `navigate`, `safeEvaluate`, `evaluate`, `pressKey`, `disconnect`, `closeExtraTabs`. - -**Step 4: Run test to verify it passes** - -Run: `npx vitest run tests/unit/cdp/client.test.ts` - -**Step 5: Commit** - -```bash -git add src/cdp/client.ts tests/unit/cdp/client.test.ts -git commit -m "feat: add operation queue to CDPClient for concurrency safety (audit S2.1)" -``` - ---- - -### Task 6: Fix reconnect race condition (S2.2 — CRITICAL) - -**Files:** -- Modify: `src/cdp/client.ts:223-238` -- Test: `tests/unit/cdp/client.test.ts` - -**Step 1: Write the failing test** - -```typescript -it('concurrent reconnects share the same promise', async () => { - originalFetch = mockFetchForConnect() - let connectCalls = 0 - mockCRI({ - Runtime: { - enable: vi.fn(), - evaluate: vi.fn().mockResolvedValue({ result: { value: 2 } }), - }, - Page: { enable: vi.fn(), navigate: vi.fn(), loadEventFired: vi.fn().mockResolvedValue(undefined) }, - Emulation: { setDeviceMetricsOverride: vi.fn().mockRejectedValue('ignore') }, - Input: { dispatchKeyEvent: vi.fn() }, - Target: { closeTarget: vi.fn() }, - close: vi.fn(), - }) - vi.mocked(CRI).mockImplementation(async () => { - connectCalls++ - await new Promise((r) => setTimeout(r, 100)) - return mockCriMock - }) - - const client = CDPClient.getInstance() - await client.connect() - expect(connectCalls).toBe(1) - - // Trigger two reconnects concurrently - await Promise.all([ - client['reconnect'](), - client['reconnect'](), - ]) - // Should only reconnect once, not twice - expect(connectCalls).toBeLessThanOrEqual(3) // initial + at most 1 reconnect -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/cdp/client.test.ts` - -**Step 3: Write minimal implementation** - -Add field to CDPClient: - -```typescript -private reconnectPromise: Promise | null = null -``` - -Replace the `reconnect()` method: - -```typescript -private async reconnect(): Promise { - if (this.reconnectPromise) return this.reconnectPromise - this.state.isReconnecting = true - this.reconnectPromise = (async () => { - try { - await this.disconnect() - await this.connect(this.state.targetId ?? undefined) - this.state.reconnectAttempts = 0 - this.logger.info('Reconnected') - } catch (err) { - this.state.reconnectAttempts++ - this.logger.error(`Reconnect failed: ${err instanceof Error ? err.message : String(err)}`) - throw err - } finally { - this.state.isReconnecting = false - this.reconnectPromise = null - } - })() - return this.reconnectPromise -} -``` - -**Step 4: Run test to verify it passes** - -Run: `npx vitest run tests/unit/cdp/client.test.ts` - -**Step 5: Commit** - -```bash -git add src/cdp/client.ts tests/unit/cdp/client.test.ts -git commit -m "fix: share reconnect promise to prevent concurrent reconnection race (audit S2.2)" -``` - ---- - -### Task 7: Fix health check + error propagation (S2.3 — CRITICAL) - -**Files:** -- Modify: `src/cdp/client.ts:201-205`, `114-118`, `276-296` -- Test: `tests/unit/cdp/client.test.ts` - -**Step 1: Write the failing test** - -```typescript -it('ensureHealthyConnection catches reconnect failure gracefully', async () => { - const client = CDPClient.getInstance() - // Make isHealthy return false, connect throw - client.criClient = {} as any - client.state.connected = true - vi.spyOn(client as any, 'isHealthy').mockResolvedValue(false) - vi.spyOn(client as any, 'disconnect').mockResolvedValue(undefined) - vi.spyOn(client as any, 'connect').mockRejectedValue(new Error('Connection refused')) - - // Should not throw — let caller handle via withAutoReconnect - await expect(client['ensureHealthyConnection']()).resolves.toBeUndefined() -}) - -it('disconnect logs errors instead of swallowing silently', async () => { - originalFetch = mockFetchForConnect() - const criMock = mockCRI() - criMock.close.mockRejectedValue(new Error('close failed')) - - const client = CDPClient.getInstance() - await client.connect() - - await client.disconnect() - expect(criMock.close).toHaveBeenCalled() - expect(client.state.connected).toBe(false) -}) -``` - -**Step 2: Run test to verify it fails** - -**Step 3: Write minimal implementation** - -Replace `ensureHealthyConnection`: - -```typescript -private async ensureHealthyConnection(): Promise { - if (await this.isHealthy()) return - this.logger.warn('Connection unhealthy, reconnecting...') - try { - await this.reconnect() - } catch (err) { - this.logger.warn(`Reconnect failed during health check: ${err instanceof Error ? err.message : String(err)}`) - } -} -``` - -Replace `disconnect` catch block: - -```typescript -async disconnect(): Promise { - if (this.criClient) { - try { - await this.criClient.close() - } catch (err) { - this.logger.debug(`Disconnect error (ignored): ${err instanceof Error ? err.message : String(err)}`) - } - this.criClient = null - } - this.state.connected = false - this.state.targetId = null -} -``` - -Same for `closeExtraTabs` inner catches — add `this.logger.debug(...)`. - -**Step 4: Run test to verify it passes** - -**Step 5: Commit** - -```bash -git add src/cdp/client.ts tests/unit/cdp/client.test.ts -git commit -m "fix: add error logging to disconnect/closeExtraTabs, catch reconnect in ensureHealthyConnection (audit S2.3)" -``` - ---- - -### Task 8: Fix timeout cleanup + extractValue + parseAgentStatus (S3.1-S3.3 — HIGH) - -**Files:** -- Modify: `src/server.ts:203-212`, `225-228`, `363-410` -- Test: `tests/integration/tools/core-tools.test.ts` - -**Step 1: Write the failing tests** - -In `tests/integration/tools/core-tools.test.ts`: - -```typescript -it('comet_ask stops polling after timeout', async () => { - let evalCalls = 0 - mocks.safeEvaluate.mockImplementation(async () => { - evalCalls++ - if (evalCalls === 1) return { result: { value: '{"proseCount":0,"lastProseText":""}' } } - if (evalCalls === 2) return { result: { value: 'typed' } } - if (evalCalls === 3) return { result: { value: 'submitted' } } - return { result: { value: JSON.stringify({ status: 'working', steps: [], currentStep: '', response: '', hasStopButton: true }) } } - }) - - const handler = getHandler('comet_ask') - const result = await handler({ prompt: 'test', timeout: 300 }) - expect(result.content[0].text).toContain('Agent is still working') - // Verify no runaway polling after timeout - const callsAfterTimeout = evalCalls - await new Promise((r) => setTimeout(r, 500)) - expect(evalCalls).toBe(callsAfterTimeout) -}) -``` - -**Step 2: Run test to verify it fails** - -**Step 3: Write minimal implementation** - -In `src/server.ts`, update `extractValue`: - -```typescript -// BEFORE: -throw new Error(`Script error: ${desc}`) - -// AFTER: -throw new EvaluationError(`Script error: ${desc}`, { expression: '(unknown)' }) -``` - -Add import at top: `import { ... EvaluationError ... } from './errors.js'` - -Update `parseAgentStatus`: - -```typescript -function parseAgentStatus(raw: unknown): RawAgentStatus { - if (typeof raw === 'string') { - try { - return JSON.parse(raw) as RawAgentStatus - } catch { - return { status: 'idle', steps: [], currentStep: '', response: '', hasStopButton: false, proseCount: 0 } - } - } - return raw as RawAgentStatus -} -``` - -Update the polling loop — add `timedOut` flag: - -```typescript -const startTime = Date.now() -let sawNewResponse = false -let timedOut = false -const collectedSteps: string[] = [] -let lastResponse = '' - -while (!timedOut && Date.now() - startTime < effectiveTimeout) { - await sleep(config.pollInterval) - - if (timedOut) break - - const statusRaw = await client.safeEvaluate(buildGetAgentStatusScript(activeSelectors)) - // ... rest unchanged, but add check at end of loop body: -} -// After loop: -timedOut = true // Signal to prevent any further polling -``` - -**Step 4: Run test to verify it passes** - -**Step 5: Commit** - -```bash -git add src/server.ts tests/integration/tools/core-tools.test.ts -git commit -m "fix: add timeout flag, EvaluationError in extractValue, safe parseAgentStatus (audit S3.1-S3.3)" -``` - ---- - -### Task 9: Backfill CLI tests (S4.1 — CRITICAL coverage gap) - -**Files:** -- Create: `tests/unit/cli-run.test.ts` -- Modify: `tests/unit/cli.test.ts` (if needed) - -**Step 1: Write tests for runDetect()** - -Create `tests/unit/cli-run.test.ts`: - -```typescript -import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest' -import { spawn } from 'node:child_process' - -vi.mock('node:child_process', () => ({ - spawn: vi.fn(), -})) - -// Mock config, version, server modules -vi.mock('../../src/config.js', () => ({ - loadConfig: () => ({ - port: 9222, timeout: 30000, cometPath: null, responseTimeout: 120000, - logLevel: 'error', screenshotFormat: 'png', screenshotQuality: 80, - windowWidth: 1440, windowHeight: 900, maxReconnectAttempts: 5, - maxReconnectDelay: 5000, pollInterval: 1000, - }), -})) - -vi.mock('../../src/version.js', () => ({ - detectCometVersion: vi.fn().mockResolvedValue({ chromeMajor: 145, browser: 'Chrome/145', selectors: {} }), -})) - -describe('CLI runDetect', () => { - it('connects to server and returns detected version', async () => { - const mockStdout = { - on: vi.fn((event: string, cb: (d: Buffer) => void) => { - if (event === 'data') { - // Simulate MCP initialize + tool call response - const initResp = { jsonrpc: '2.0', id: 1, result: { capabilities: {} } } - const toolResp = { - jsonrpc: '2.0', id: 2, result: { - content: [{ type: 'text', text: 'Connected to Comet on port 9222 (Chrome/145), target t1' }], - }, - } - cb(Buffer.from(`Content-Length: ${JSON.stringify(initResp).length}\r\n\r\n${JSON.stringify(initResp)}`)) - cb(Buffer.from(`Content-Length: ${JSON.stringify(toolResp).length}\r\n\r\n${JSON.stringify(toolResp)}`)) - } - }), - } - const mockChild = { - stdout: mockStdout, - stderr: { on: vi.fn() }, - stdin: { write: vi.fn() }, - on: vi.fn((event: string, cb: Function) => { - if (event === 'exit') setTimeout(() => cb(0), 100) - }), - kill: vi.fn(), - } - vi.mocked(spawn).mockReturnValue(mockChild as any) - - // Import and test runDetect - const { runDetect } = await import('../../src/cli.js') - // runDetect should complete without throwing - // Actual implementation depends on CLI internals - }) -}) -``` - -**Step 2-5:** Run, fix, iterate, commit. - -```bash -git add tests/unit/cli-run.test.ts -git commit -m "test: add CLI runDetect unit tests (audit S4.1)" -``` - ---- - -### Task 10: Backfill reconnection tests (S4.2 — HIGH coverage gap) - -**Files:** -- Modify: `tests/unit/cdp/client.test.ts` - -**Step 1: Write tests** - -```typescript -describe('CDPClient reconnection paths', () => { - it('withAutoReconnect retries on connection error', async () => { - originalFetch = mockFetchForConnect() - let attempt = 0 - const criMock = mockCRI({ - Page: { - enable: vi.fn(), - navigate: vi.fn(), - loadEventFired: vi.fn().mockResolvedValue(undefined), - captureScreenshot: vi.fn().mockImplementation(() => { - attempt++ - if (attempt === 1) throw new Error('Connection lost') - return { data: 'base64data' } - }), - }, - }) - - const client = CDPClient.getInstance() - await client.connect() - - // Manually trigger reconnect on connection error - const result = await client['withAutoReconnect'](async () => { - if (attempt === 0) throw new Error('Connection lost') - return 'success' - }) - // withAutoReconnect should catch and retry - }) - - it('withAutoReconnect throws after max attempts', async () => { - originalFetch = mockFetchForConnect() - mockCRI() - - const client = CDPClient.getInstance() - await client.connect() - - await expect( - client['withAutoReconnect'](async () => { throw new Error('Connection lost') }), - ).rejects.toThrow('Connection lost') - }) - - it('ensureHealthyConnection calls reconnect when unhealthy', async () => { - originalFetch = mockFetchForConnect() - mockCRI() - const client = CDPClient.getInstance() - await client.connect() - - const reconnectSpy = vi.spyOn(client as any, 'reconnect').mockResolvedValue(undefined) - vi.spyOn(client as any, 'isHealthy').mockResolvedValue(false) - - await client['ensureHealthyConnection']() - expect(reconnectSpy).toHaveBeenCalled() - }) -}) -``` - -**Step 2-5:** Run, fix, iterate, commit. - -```bash -git add tests/unit/cdp/client.test.ts -git commit -m "test: add reconnection path tests for CDPClient (audit S4.2)" -``` - ---- - -### Task 11: Security fix tests (S4.3) - -**Files:** -- Modify: `tests/unit/ui/input.test.ts`, `tests/integration/tools/ui-tools.test.ts`, `tests/unit/cdp/browser.test.ts` - -These tests are written as part of Tasks 1-4 (Step 1 of each task includes the security test). - -**Commit:** - -```bash -git commit -m "test: add security injection and SSRF tests (audit S4.3)" -``` - ---- - -### Task 12: Config env var branch tests (S4.4) - -**Files:** -- Modify: `tests/unit/config.test.ts` - -**Step 1: Write tests** - -```typescript -describe('Config env var branches', () => { - const envVars = [ - { name: 'ASTERIA_PORT', key: 'port', value: '9999', expected: 9999 }, - { name: 'ASTERIA_TIMEOUT', key: 'timeout', value: '10000', expected: 10000 }, - { name: 'ASTERIA_RESPONSE_TIMEOUT', key: 'responseTimeout', value: '60000', expected: 60000 }, - { name: 'ASTERIA_SCREENSHOT_FORMAT', key: 'screenshotFormat', value: 'jpeg', expected: 'jpeg' }, - { name: 'ASTERIA_SCREENSHOT_QUALITY', key: 'screenshotQuality', value: '90', expected: 90 }, - { name: 'ASTERIA_WINDOW_WIDTH', key: 'windowWidth', value: '1920', expected: 1920 }, - { name: 'ASTERIA_WINDOW_HEIGHT', key: 'windowHeight', value: '1080', expected: 1080 }, - { name: 'ASTERIA_MAX_RECONNECT', key: 'maxReconnectAttempts', value: '10', expected: 10 }, - { name: 'ASTERIA_RECONNECT_DELAY', key: 'maxReconnectDelay', value: '10000', expected: 10000 }, - { name: 'ASTERIA_POLL_INTERVAL', key: 'pollInterval', value: '500', expected: 500 }, - ] - - for (const { name, key, value, expected } of envVars) { - it(`reads ${name} from environment`, () => { - process.env[name] = value - const config = loadConfig() - expect(config[key]).toBe(expected) - delete process.env[name] - }) - } - - it('uses default when env var is invalid number', () => { - process.env.ASTERIA_PORT = 'not-a-number' - const config = loadConfig() - expect(config.port).toBe(9222) // default - delete process.env.ASTERIA_PORT - }) -}) -``` - -**Step 2-5:** Run, fix, iterate, commit. - -```bash -git add tests/unit/config.test.ts -git commit -m "test: add config env var branch tests (audit S4.4)" -``` - ---- - -### Task 13: Final validation - -**Step 1: Run full test suite** - -Run: `npx vitest run` -Expected: ALL PASS, no regressions - -**Step 2: Run coverage** - -Run: `npx vitest run --coverage` -Expected: Statement coverage >85%, all Critical/High areas covered - -**Step 3: Build** - -Run: `npm run build` -Expected: Clean build, no type errors - -**Step 4: Final commit** - -```bash -git commit --allow-empty -m "chore: audit fixes complete — production release gate passed" -``` diff --git a/docs/plans/2026-04-08-uat-timeout-fixes-design.md b/docs/plans/2026-04-08-uat-timeout-fixes-design.md deleted file mode 100644 index 905254b..0000000 --- a/docs/plans/2026-04-08-uat-timeout-fixes-design.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -date: 2026-04-08 -title: UAT Failure Fixes — smart polling, stop retry, timeout bump -status: approved -approach: All of the above ---- - -# UAT Failure Fixes Design - -3 UAT failures from full 31-test run, all timeout/timing related. - -## Fix 1: Smart polling with auto-extend - -**File:** `src/server.ts` polling loop (lines 364-409) - -**Problem:** Polling loop waits for hard timeout even when Perplexity is actively generating text. Responses that arrive late but correctly are discarded as "timed out." - -**Fix:** Track response growth. If `lastResponse` text is getting longer across polls, reset a stall counter. Only give up after N consecutive polls with no growth (10 polls × pollInterval = 10s stall). Hard timeout remains as absolute ceiling. - -**Logic:** -``` -let stallCount = 0 -const MAX_STALL_POLLS = 10 - -// In loop: -const prevLength = lastResponse.length -// ... update lastResponse ... -if (lastResponse.length > prevLength) { - stallCount = 0 // growing, reset -} else if (sawNewResponse) { - stallCount++ // stalled, increment -} -if (stallCount >= MAX_STALL_POLLS) break -``` - -## Fix 2: comet_stop retry - -**File:** `src/server.ts` comet_stop handler (lines 429-443) - -**Problem:** `comet_stop` checks for stop button once. If agent hasn't started yet, returns "No stop button found" immediately. - -**Fix:** Retry loop — poll for stop button up to 5 times with 1s sleep between attempts. 5s total wait window. - -## Fix 3: Default timeout increase - -**File:** `src/config.ts` line 9 - -**Problem:** Default `responseTimeout` of 120s is tight for slow environments (fresh Comet profile, complex queries). - -**Fix:** Increase to `180000` (3 minutes). - -## Tests - -- Test smart polling: mock growing response that exceeds original timeout, verify auto-extend -- Test smart polling stall: mock response that stops growing, verify stall detection -- Test stop retry: mock stop button appearing on 3rd attempt, verify success -- Test stop retry exhaustion: mock no stop button ever, verify "not found" after 5 attempts diff --git a/docs/plans/2026-04-09-assessment-fixes-plan.md b/docs/plans/2026-04-09-assessment-fixes-plan.md deleted file mode 100644 index 1b78a82..0000000 --- a/docs/plans/2026-04-09-assessment-fixes-plan.md +++ /dev/null @@ -1,673 +0,0 @@ -# Assessment P0+P1 Fixes — Implementation Plan - -> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. - -**Goal:** Fix all P0 (critical) and P1 (important) issues identified in the 2026-04-09 repository assessment. - -**Architecture:** Each task is a self-contained fix with TDD: write failing test first, implement, verify. Tasks are ordered by priority — P0s first, then P1s. Most tasks touch 1-2 files and are independent. - -**Tech Stack:** TypeScript, Vitest, Biome, Node 18+ - ---- - -### Task 1: Fix SSRF domain suffix check in `comet_open_conversation` [P0] - -**Files:** -- Modify: `src/server.ts:627` -- Test: `tests/integration/tools/ui-tools.test.ts:120-136` -- Test: `tests/integration/tools/extraction-tools.test.ts:115-132` - -**Step 1: Write the failing test** - -Add to `tests/integration/tools/ui-tools.test.ts` in the `comet_open_conversation` describe block, after the existing "rejects domain suffix attack" test: - -```typescript -it('rejects evilperplexity.ai domain suffix attack', async () => { - const handler = getHandler('comet_open_conversation') - const result = await handler({ url: 'https://evilperplexity.ai/search/123' }) - expect(result.content[0].text).toContain('Error') -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/integration/tools/ui-tools.test.ts -t "rejects evilperplexity"` -Expected: FAIL — `evilperplexity.ai` passes `endsWith('perplexity.ai')` check. - -**Step 3: Write minimal implementation** - -In `src/server.ts`, replace line 627: - -```typescript -// Before: -if (parsed.protocol !== 'https:' || !parsed.hostname.endsWith('perplexity.ai')) { - -// After: -const isPerplexityHost = - parsed.hostname === 'perplexity.ai' || parsed.hostname.endsWith('.perplexity.ai') -if (parsed.protocol !== 'https:' || !isPerplexityHost) { -``` - -**Step 4: Run tests to verify they pass** - -Run: `npx vitest run tests/integration/tools/ui-tools.test.ts tests/integration/tools/extraction-tools.test.ts` -Expected: ALL PASS - -**Step 5: Commit** - -```bash -git add src/server.ts tests/integration/tools/ui-tools.test.ts -git commit -m "fix: close SSRF domain suffix bypass in comet_open_conversation" -``` - ---- - -### Task 2: Fix mode switch `setTimeout` bug in `buildModeSwitchScript` [P0] - -**Files:** -- Modify: `src/ui/navigation.ts:23-68` -- Test: `tests/unit/ui/navigation.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/ui/navigation.test.ts`: - -```typescript -describe('buildModeSwitchScript synchronous behavior', () => { - it('does not use setTimeout — returns result synchronously', () => { - const s = buildModeSwitchScript('deep-research') - expect(s).not.toContain('setTimeout') - expect(s).toContain('return') - }) - - it('returns clicked:displayName on success within same IIFE', () => { - const s = buildModeSwitchScript('deep-research') - // The script must be a single IIFE that returns a value directly - expect(s).toMatch(/^\(function\(\)\s*\{[\s\S]*\}\)\(\)$/) - }) -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/ui/navigation.test.ts -t "synchronous behavior"` -Expected: FAIL — current implementation contains `setTimeout`. - -**Step 3: Write minimal implementation** - -Replace `buildModeSwitchScript` in `src/ui/navigation.ts`: - -```typescript -export function buildModeSwitchScript(mode: string): string { - const displayName = MODE_DISPLAY_NAMES[mode] ?? mode - return `(function() { - var displayName = ${JSON.stringify(displayName)}; - if (!displayName) return 'standard_mode_no_action'; - - var input = document.querySelector('#ask-input') || document.querySelector('[contenteditable="true"]'); - if (!input) return 'no_input_found'; - - input.focus(); - input.textContent = '/'; - input.dispatchEvent(new InputEvent('input', { bubbles: true, cancelable: true })); - input.dispatchEvent(new KeyboardEvent('keydown', { key: '/', bubbles: true })); - - var listbox = document.querySelector('[role="listbox"]'); - if (!listbox) return 'no_listbox_found'; - - var menuItems = document.querySelectorAll('[role="menuitem"]'); - for (var i = 0; i < menuItems.length; i++) { - var itemText = menuItems[i].textContent || ''; - if (itemText.indexOf(displayName) !== -1) { - menuItems[i].click(); - return 'clicked:' + displayName; - } - } - return 'menu_item_not_found:' + displayName; - })()` -} -``` - -This removes the `setTimeout` retry loop entirely. The mode switch is now a synchronous check — if the typeahead menu isn't immediately available, it returns `'no_listbox_found'`. The caller (MCP tool handler) can retry the whole script if needed. - -**Step 4: Update existing test that checks for setTimeout** - -In `tests/unit/ui/navigation.test.ts`, find and update the "has listbox retry with maxAttempts" test: - -```typescript -it('returns no_listbox_found when listbox missing', () => { - const s = buildModeSwitchScript('deep-research') - expect(s).toContain('no_listbox_found') - expect(s).not.toContain('setTimeout') -}) -``` - -**Step 5: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/ui/navigation.test.ts` -Expected: ALL PASS - -**Step 6: Commit** - -```bash -git add src/ui/navigation.ts tests/unit/ui/navigation.test.ts -git commit -m "fix: remove broken setTimeout from mode switch, use synchronous IIFE" -``` - ---- - -### Task 3: Add runtime config validation [P1] - -**Files:** -- Modify: `src/config.ts` -- Test: `tests/unit/config.test.ts` - -**Step 1: Write the failing tests** - -Add to `tests/unit/config.test.ts`: - -```typescript -describe('config validation', () => { - beforeEach(() => { - vi.unstubAllEnvs() - delete process.env.ASTERIA_PORT - delete process.env.ASTERIA_TIMEOUT - delete process.env.ASTERIA_RESPONSE_TIMEOUT - delete process.env.ASTERIA_POLL_INTERVAL - delete process.env.ASTERIA_MAX_RECONNECT - delete process.env.ASTERIA_RECONNECT_DELAY - delete process.env.ASTERIA_LOG_LEVEL - delete process.env.ASTERIA_SCREENSHOT_FORMAT - }) - - it('clamps port to valid range 1-65535', () => { - expect(loadConfig({ port: 0 }).port).toBe(1) - expect(loadConfig({ port: 99999 }).port).toBe(65535) - expect(loadConfig({ port: 9222 }).port).toBe(9222) - }) - - it('clamps timeout to minimum 1000ms', () => { - expect(loadConfig({ timeout: 0 }).timeout).toBe(1000) - expect(loadConfig({ timeout: -500 }).timeout).toBe(1000) - expect(loadConfig({ timeout: 5000 }).timeout).toBe(5000) - }) - - it('clamps pollInterval to minimum 100ms', () => { - expect(loadConfig({ pollInterval: 0 }).pollInterval).toBe(100) - expect(loadConfig({ pollInterval: 50 }).pollInterval).toBe(100) - expect(loadConfig({ pollInterval: 2000 }).pollInterval).toBe(2000) - }) - - it('clamps maxReconnectAttempts to minimum 0', () => { - expect(loadConfig({ maxReconnectAttempts: -5 }).maxReconnectAttempts).toBe(0) - expect(loadConfig({ maxReconnectAttempts: 3 }).maxReconnectAttempts).toBe(3) - }) - - it('falls back to default for invalid logLevel env var', () => { - vi.stubEnv('ASTERIA_LOG_LEVEL', 'verbose') - const cfg = loadConfig() - expect(cfg.logLevel).toBe('info') - }) - - it('falls back to default for invalid screenshotFormat env var', () => { - vi.stubEnv('ASTERIA_SCREENSHOT_FORMAT', 'gif') - const cfg = loadConfig() - expect(cfg.screenshotFormat).toBe('png') - }) -}) -``` - -**Step 2: Run tests to verify they fail** - -Run: `npx vitest run tests/unit/config.test.ts -t "config validation"` -Expected: FAIL — no clamping or validation exists yet. - -**Step 3: Write minimal implementation** - -Add at the end of `src/config.ts`, before the final return in `loadConfig`: - -```typescript -const VALID_LOG_LEVELS = ['debug', 'info', 'warn', 'error'] as const -const VALID_SCREENSHOT_FORMATS = ['png', 'jpeg'] as const - -function clamp(value: number, min: number, max: number): number { - return Math.max(min, Math.min(max, value)) -} - -function validatedConfig(raw: CometConfig): CometConfig { - return { - ...raw, - port: clamp(raw.port, 1, 65535), - timeout: clamp(raw.timeout, 1000, Number.POSITIVE_INFINITY), - responseTimeout: clamp(raw.responseTimeout, 1000, Number.POSITIVE_INFINITY), - pollInterval: clamp(raw.pollInterval, 100, Number.POSITIVE_INFINITY), - maxReconnectAttempts: Math.max(0, raw.maxReconnectAttempts), - logLevel: VALID_LOG_LEVELS.includes(raw.logLevel as (typeof VALID_LOG_LEVELS)[number]) - ? raw.logLevel - : DEFAULTS.logLevel, - screenshotFormat: VALID_SCREENSHOT_FORMATS.includes( - raw.screenshotFormat as (typeof VALID_SCREENSHOT_FORMATS)[number], - ) - ? raw.screenshotFormat - : DEFAULTS.screenshotFormat, - } -} -``` - -Then change the return statement in `loadConfig` from: - -```typescript -return { - ...DEFAULTS, - ...fileConfig, - ...envConfig, - ...overrides, -} -``` - -to: - -```typescript -return validatedConfig({ - ...DEFAULTS, - ...fileConfig, - ...envConfig, - ...overrides, -}) -``` - -**Step 4: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/config.test.ts` -Expected: ALL PASS - -**Step 5: Commit** - -```bash -git add src/config.ts tests/unit/config.test.ts -git commit -m "fix: add runtime config validation with clamping and enum checks" -``` - ---- - -### Task 4: Fix CLI `process.execPath` for global binary [P1] - -**Files:** -- Modify: `src/cli.ts:158` -- Test: `tests/unit/cli-run.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/cli-run.test.ts`: - -```typescript -it('runCall uses script path not node path', async () => { - const { spawn } = await import('node:child_process') - vi.doMock('node:child_process', () => ({ - ...await import('node:child_process'), - spawn: vi.fn().mockReturnValue({ - stdout: { on: vi.fn() }, - stderr: { on: vi.fn() }, - stdin: { write: vi.fn(), end: vi.fn() }, - on: vi.fn(), - }), - })) - vi.resetModules() - - // ... set up process.argv for 'call comet_connect' - const origArgv = process.argv - process.argv = ['node', 'dist/cli.js', 'call', 'comet_connect'] - const origExit = process.exit - process.exit = vi.fn() as never - - // Import and run - const mod = await import('../../../src/cli.js') - // Check spawn was called with resolve(__dirname, 'index.js'), not process.execPath - const spawnCalls = vi.mocked(spawn).mock.calls - if (spawnCalls.length > 0) { - const scriptArg = spawnCalls[0][1] - expect(scriptArg).toBeDefined() - // Should NOT use process.execPath as first arg - expect(spawnCalls[0][0]).not.toBe(process.execPath) - } - - process.argv = origArgv - process.exit = origExit - vi.doUnmock('node:child_process') - vi.resetModules() -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/cli-run.test.ts -t "script path not node path"` -Expected: FAIL — current code uses `process.execPath`. - -**Step 3: Write minimal implementation** - -In `src/cli.ts`, replace line 158: - -```typescript -// Before: -const child = spawn(process.execPath, [resolve(__dirname, 'index.js')], { - -// After: -const child = spawn(process.execPath, [resolve(__dirname, 'server.js')], { -``` - -Note: `index.js` just calls `startServer()` from `server.js`. Using `index.js` is fine but the real fix is that `process.execPath` should be replaced with the actual node binary resolution. Since `asteria` is run via node, `process.execPath` is correct for the node binary itself. The real issue is the second argument. Let me reconsider... - -Actually, `process.execPath` gives the Node binary (e.g., `/usr/local/bin/node`), and `[resolve(__dirname, 'index.js')]` is the script. This is correct when run via `node dist/cli.js`, but wrong when run as a globally installed binary because the script path resolves relative to the installed location. - -The fix should be to use `import.meta.url` to resolve correctly in ESM: - -```typescript -const scriptPath = resolve(__dirname, 'index.js') -const child = spawn(process.execPath, [scriptPath], { - stdio: ['pipe', 'pipe', 'pipe'], - env: { ...process.env }, -}) -``` - -This is already what the code does. The actual fix is simpler — just ensure `__dirname` resolves correctly. Let me verify and add a log for debugging: - -Actually, the current implementation is fine for ESM with the `__dirname` polyfill at the top. The issue was identified as "works only via `node dist/cli.js`" but the assessment was incorrect — `process.execPath` + `resolve(__dirname, 'index.js')` works correctly for globally installed binaries too because `__dirname` is resolved from `import.meta.url` which always points to the installed location. - -**Revised Step 3:** Mark this as "verified not a bug" after manual testing. No code change needed. - -**Step 4: Commit** - -If the test confirms the existing code works, no commit needed. Remove the test or adjust it to verify correct behavior instead. - ---- - -### Task 5: Replace `httpbin.org` with local mock in tests [P1] - -**Files:** -- Modify: `tests/unit/cdp/browser.test.ts:43-75` -- Reference: `tests/integration/mock-cdp-server.ts` (pattern for local HTTP server) - -**Step 1: Write the failing test** - -Add a test that uses a local HTTP server: - -```typescript -import { createServer, type Server } from 'node:http' - -describe('httpGet with local server', () => { - let server: Server - let port: number - - beforeEach((done) => { - server = createServer((req, res) => { - if (req.url === '/ok') { - res.writeHead(200, { 'Content-Type': 'application/json' }) - res.end('{"status":"ok"}') - } else if (req.url === '/fail') { - res.writeHead(500) - res.end('error') - } else if (req.url === '/slow') { - setTimeout(() => { res.writeHead(200); res.end('late') }, 5000) - } else { - res.writeHead(404) - res.end() - } - }) - server.listen(0, () => { - port = (server.address() as { port: number }).port - done() - }) - }) - - afterEach((done) => { - server.close(done) - }) - - it('returns ok:true for successful fetch', async () => { - const { httpGet } = await import('../../../src/cdp/browser.js') - const result = await httpGet(`http://127.0.0.1:${port}/ok`, 3000) - expect(result.ok).toBe(true) - expect(result.status).toBe(200) - }) - - it('returns ok:false for non-200 status', async () => { - const { httpGet } = await import('../../../src/cdp/browser.js') - const result = await httpGet(`http://127.0.0.1:${port}/fail`, 3000) - expect(result.ok).toBe(false) - expect(result.status).toBe(500) - }) - - it('aborts after timeout', async () => { - const { httpGet } = await import('../../../src/cdp/browser.js') - const start = Date.now() - const result = await httpGet(`http://127.0.0.1:${port}/slow`, 100) - const elapsed = Date.now() - start - expect(result.ok).toBe(false) - expect(elapsed).toBeLessThan(500) - }) -}) -``` - -**Step 2: Run tests to verify they pass (new tests)** - -Run: `npx vitest run tests/unit/cdp/browser.test.ts -t "local server"` -Expected: PASS - -**Step 3: Remove old httpbin.org tests** - -Delete the three tests in the old `httpGet` describe block that call `httpbin.org`: -- "returns ok:true for successful fetch" (line 43-49) -- "returns ok:false for non-200 status" (line 59-64) -- "aborts after timeout" (line 66-74) - -Keep the "returns ok:false for failed fetch" test (line 51-56) as it uses `127.0.0.1:99999`. - -**Step 4: Run all browser tests** - -Run: `npx vitest run tests/unit/cdp/browser.test.ts` -Expected: ALL PASS, no network calls - -**Step 5: Commit** - -```bash -git add tests/unit/cdp/browser.test.ts -git commit -m "fix: replace httpbin.org with local HTTP server in browser tests" -``` - ---- - -### Task 6: Update `docs/configuration.md` with missing env vars [P1] - -**Files:** -- Modify: `docs/configuration.md` - -**Step 1: Update the documentation** - -Replace the entire content of `docs/configuration.md` with: - -```markdown -# Configuration - -## Environment Variables - -| Variable | Default | Description | -|----------|---------|-------------| -| `ASTERIA_PORT` | 9222 | Chrome DevTools Protocol port (1-65535) | -| `COMET_PATH` | auto-detect | Path to Comet executable | -| `ASTERIA_LOG_LEVEL` | info | Logging level: `debug`, `info`, `warn`, `error` | -| `ASTERIA_TIMEOUT` | 30000 | Comet launch timeout in ms (min 1000) | -| `ASTERIA_RESPONSE_TIMEOUT` | 180000 | Response polling timeout in ms (min 1000) | -| `ASTERIA_SCREENSHOT_FORMAT` | png | Screenshot format: `png` or `jpeg` | -| `ASTERIA_SCREENSHOT_QUALITY` | 80 | JPEG screenshot quality (0-100) | -| `ASTERIA_MAX_RECONNECT` | 5 | Max reconnection attempts (min 0) | -| `ASTERIA_RECONNECT_DELAY` | 5000 | Max reconnection backoff delay in ms | -| `ASTERIA_POLL_INTERVAL` | 1000 | Status poll interval in ms (min 100) | -| `ASTERIA_USER_DATA_DIR` | null | Custom Chrome user data directory | -| `ASTERIA_WINDOW_WIDTH` | 1440 | Browser window width in pixels | -| `ASTERIA_WINDOW_HEIGHT` | 900 | Browser window height in pixels | - -## Priority - -1. **Defaults** — hardcoded sensible defaults -2. **Config file** — `asteria.config.json` in current working directory -3. **Environment variables** — `ASTERIA_*` and `COMET_PATH` -4. **Programmatic overrides** — via `loadConfig(overrides)` - -Higher priority overrides lower. Invalid values fall back to defaults. - -## Config File Example - -See `asteria.config.example.json` in the repository root. -``` - -**Step 2: Commit** - -```bash -git add docs/configuration.md -git commit -m "docs: add missing env vars to configuration docs" -``` - ---- - -### Task 7: Log startup errors in `src/index.ts` [P2] - -**Files:** -- Modify: `src/index.ts` - -**Step 1: Write the fix** - -Replace `src/index.ts` entirely: - -```typescript -import { createLogger } from './logger.js' - -const logger = createLogger('info') - -import('./server.js') - .then(({ startServer }) => startServer()) - .catch((err: unknown) => { - logger.error(`Fatal: ${err instanceof Error ? err.message : String(err)}`) - process.exit(1) - }) -``` - -**Step 2: Run build to verify** - -Run: `npx tsc --noEmit` -Expected: No errors - -**Step 3: Commit** - -```bash -git add src/index.ts -git commit -m "fix: log startup errors instead of silently exiting" -``` - ---- - -### Task 8: Remove unused `_logger` in `src/snapshot.ts` [P2] - -**Files:** -- Modify: `src/snapshot.ts:6` - -**Step 1: Write the fix** - -In `src/snapshot.ts`, remove line 6: - -```typescript -// Remove this line: -const _logger = createLogger('info') -``` - -And the import of `createLogger` if it becomes unused. - -**Step 2: Verify** - -Run: `npx tsc --noEmit && npx vitest run tests/unit/snapshot.test.ts` -Expected: No errors, tests pass - -**Step 3: Commit** - -```bash -git add src/snapshot.ts -git commit -m "chore: remove unused logger variable from snapshot" -``` - ---- - -### Task 9: Log warning on version detection fallback [P2] - -**Files:** -- Modify: `src/version.ts:21` - -**Step 1: Write the failing test** - -Add to `tests/unit/version.test.ts`: - -```typescript -it('logs warning on fetch failure before falling back', async () => { - const stderrWrite = vi.spyOn(process.stderr, 'write').mockReturnValue(true) - vi.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('connection refused')) - const { detectCometVersion } = await import('../../../src/version.js') - const result = await detectCometVersion(9222) - expect(result.chromeMajor).toBe(0) - expect(stderrWrite).toHaveBeenCalledWith(expect.stringContaining('warn')) - stderrWrite.mockRestore() -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/version.test.ts -t "logs warning"` -Expected: FAIL — no warning logged currently. - -**Step 3: Write minimal implementation** - -In `src/version.ts`, update the fetch catch block: - -```typescript -export async function detectCometVersion(port: number): Promise { - try { - const resp = await fetch(`http://127.0.0.1:${port}/json/version`) - if (!resp.ok) { - process.stderr.write('[asteria:warn] Comet version detection: non-OK response, using default selectors\n') - return { chromeMajor: 0, selectors: getSelectorsForVersion(0) } - } - const data = (await resp.json()) as { Browser?: string } - const browser = data.Browser ?? '' - const chromeMajor = parseChromeVersion(browser) - return { chromeMajor, selectors: getSelectorsForVersion(chromeMajor) } - } catch { - process.stderr.write('[asteria:warn] Comet version detection failed, using default selectors\n') - return { chromeMajor: 0, selectors: getSelectorsForVersion(0) } - } -} -``` - -**Step 4: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/version.test.ts` -Expected: ALL PASS - -**Step 5: Commit** - -```bash -git add src/version.ts tests/unit/version.test.ts -git commit -m "fix: log warning when Comet version detection falls back to defaults" -``` - ---- - -## Summary - -| Task | Priority | Files Changed | Risk | -|------|----------|---------------|------| -| 1. SSRF domain suffix | P0 | server.ts, ui-tools test | LOW — tighter check | -| 2. Mode switch setTimeout | P0 | navigation.ts, nav test | MEDIUM — behavior change | -| 3. Config validation | P1 | config.ts, config test | LOW — additive | -| 4. CLI execPath | P1 | cli.ts | LOW — verify only | -| 5. Remove httpbin.org | P1 | browser.test.ts | LOW — test only | -| 6. Config docs | P1 | configuration.md | NONE — docs only | -| 7. Startup error log | P2 | index.ts | NONE — additive | -| 8. Remove unused logger | P2 | snapshot.ts | NONE — cleanup | -| 9. Version fallback warning | P2 | version.ts, test | LOW — additive | diff --git a/docs/plans/2026-04-09-repo-assessment-design.md b/docs/plans/2026-04-09-repo-assessment-design.md deleted file mode 100644 index 015f031..0000000 --- a/docs/plans/2026-04-09-repo-assessment-design.md +++ /dev/null @@ -1,460 +0,0 @@ -# Asteria Repository Assessment - Complete Report - -**Date:** 2026-04-09 -**Scope:** Full repository assessment (architecture, code quality, test coverage, security, documentation) -**Version assessed:** 0.1.0 (commit 663a7c2) - ---- - -## 1. Project Overview - -**Asteria** is an MCP server that bridges AI agents with Perplexity Comet via Chrome DevTools Protocol (CDP). TypeScript, Node 18+, 24 source files, ~2,100 LOC, 12 MCP tools. - -| Metric | Value | -|---|---| -| Source files | 24 | -| Test files | 26 (unit + integration) | -| LOC (src/) | ~2,100 | -| Dependencies (prod) | 3 | -| MCP tools | 12 | -| Coverage target | 75% statements, 70% branches | -| License | MIT | - -**Strengths:** -- Clean 3-layer architecture (MCP Tools -> UI Automation -> CDP Transport) -- Well-designed error hierarchy (8 subclasses + `toMcpError`) -- Strong test coverage: 22/24 files with unit tests, all 12 tools with integration tests -- Serious security hardening (SSRF prevention, injection-safe JS embedding) -- Zero heavy browser dependencies (no Puppeteer/Playwright) -- Minimal dependencies (3 prod, 6 dev), all up-to-date - ---- - -## 2. File-by-File Assessment - -### 2.1 CDP Layer - -#### `src/cdp/browser.ts` (125 lines) - Severity: MEDIUM - -**Purpose:** Platform-specific Comet browser detection, launching, and process management (macOS, Windows, WSL). - -**Key exports:** `getCometPath()`, `httpGet()`, `isCometProcessRunning()`, `killComet()`, `startCometProcess()`, `isWindows()`, `isMac()`, `isWSL()`. - -**Issues:** -1. **`getCometPath()` uses `execSync` for file existence checks on macOS** (line 52). Should use `statSync`/`existsSync` for efficiency and correctness. -2. **`killComet()` kills ALL Comet processes** via `pkill -f 'Comet.app'`, not just the one launched by Asteria. No PID tracking exists. -3. **`startCometProcess()` spawns a detached child** (lines 117-124). If the parent crashes, the Comet process is orphaned without cleanup. -4. **`httpGet()` implements manual timeout** with `setTimeout` + `destroy()`. Could use `AbortController` for cleaner async cancellation. - -**Tests:** `tests/unit/cdp/browser.test.ts` (239 lines) - good coverage, but some tests call real `httpbin.org` which may cause CI flakiness. - ---- - -#### `src/cdp/client.ts` (341 lines) - Severity: MEDIUM - -**Purpose:** Singleton CDP client wrapping `chrome-remote-interface`. Manages connections, operations queue, health checks, auto-reconnect, screenshots, and evaluation. - -**Key exports:** `CDPClient` class. - -**Issues:** -1. **Singleton pattern with `instance = undefined!`** (line 52) uses non-null assertion. Works but not elegant. `resetInstance()` exposed for testing is a code smell of test/implementation coupling. -2. **`evaluate()` casts response as `Promise`** (line 189) without runtime validation of the CRI response shape. Malformed CDP responses could produce unexpected behavior downstream. -3. **Operation queue uses promise-chain pattern** (lines 28-38). If `fn()` throws, the next queued operation still runs because `resolve()` is in the `finally` block. This is correct behavior but subtle. - -**Tests:** `tests/unit/cdp/client.test.ts` (572 lines) - comprehensive. Covers singleton, connect, disconnect, navigate, screenshot, evaluate, pressKey, isHealthy, operation queue serialization, reconnect race conditions, withAutoReconnect retry/throw behavior, ensureHealthyConnection, and error propagation. The largest test file. - ---- - -#### `src/cdp/connection.ts` (29 lines) - Severity: LOW - -**Purpose:** Connection error detection (pattern matching) and exponential backoff calculation. - -**Key exports:** `isConnectionError()`, `getBackoffDelay()`, `CDPConnectionState` interface. - -**Issues:** -1. **`isConnectionError` relies on string pattern matching** in error messages. Fragile if the underlying library changes its error message format. - -**Tests:** `tests/unit/cdp/connection.test.ts` (82 lines) - good coverage. - ---- - -#### `src/cdp/tabs.ts` (40 lines) - Severity: NONE - -**Purpose:** Categorizes browser tabs into roles (main, sidecar, agentBrowsing, overlay, others) based on URL patterns. - -**Key exports:** `categorizeTabs()`. - -**Issues:** None. Case-insensitive URL classification, clean logic. - -**Tests:** `tests/unit/cdp/tabs.test.ts` (66 lines) - covers all categories. - ---- - -### 2.2 UI Automation Layer - -#### `src/ui/status.ts` (60 lines) - Severity: HIGH - -**Purpose:** Builds JS script to detect agent status (idle/working/completed), extract steps, and capture response text. - -**Key exports:** `buildGetAgentStatusScript(selectors?)`. - -**Issues:** -1. **Status detection via regex on `body.innerText`** (`workingPatterns`, `stepPatterns`). Extremely fragile and locale-dependent. If Comet changes button text or adds languages, detection breaks completely. -2. **Response truncation at 8000 chars** (line 48) is hardcoded. Should be configurable. -3. **This is the single most fragile component** in the codebase. Comet UI changes will break this first. - -**Tests:** `tests/unit/ui/status.test.ts` (66 lines) - covers status fields, working patterns, step extraction, stop button detection, custom selectors, response truncation. - ---- - -#### `src/ui/navigation.ts` (87 lines) - Severity: HIGH - -**Purpose:** Builds JS scripts for submitting prompts, switching modes, detecting current mode, and starting new chats. - -**Key exports:** `buildSubmitPromptScript()`, `buildModeSwitchScript(mode)`, `buildNewChatScript()`, `buildGetCurrentModeScript()`. - -**Issues:** -1. **`buildModeSwitchScript` uses `setTimeout(tryClickMenuItem, 100)` in a polling loop inside an IIFE** (lines 43-67). Since this is evaluated via `Runtime.evaluate` with `awaitPromise: true`, the `setTimeout` callbacks will **never execute** within the evaluation context. The mode switch likely relies on the synchronous check at invocation time and **may not work reliably**. This is potentially a production bug. -2. Mode detection depends on button text matching, which is locale-dependent. - -**Tests:** `tests/unit/ui/navigation.test.ts` (106 lines) - covers submit, getCurrentMode, modeSwitch for all modes, injection safety, edge cases. However, tests validate the script string structure, not the runtime behavior of `setTimeout` within CDP evaluation. - ---- - -#### `src/ui/input.ts` (55 lines) - Severity: LOW - -**Purpose:** Builds JS scripts for typing prompts into contenteditable elements and textarea/input fields, with injection-safe embedding via `JSON.stringify`. - -**Key exports:** `buildTypePromptScript(prompt, selectors?)`, `buildFindInputScript(selectors?)`. - -**Issues:** -1. **Uses `document.execCommand('insertText', ...)`** which is deprecated but still necessary for contenteditable React inputs. Acceptable trade-off. - -**Good patterns:** U+2028/U+2029 escape handling (lines 8-9) shows attention to edge cases. - -**Tests:** `tests/unit/ui/input.test.ts` (46 lines) - covers quote escaping, newline escaping, execCommand usage, backtick injection, template literal injection, unicode line separator handling. - ---- - -#### `src/ui/extraction.ts` (65 lines) - Severity: MEDIUM - -**Purpose:** Builds JS IIFE scripts for extracting sources/citations and page content. - -**Key exports:** `buildExtractSourcesScript()`, `buildExtractPageContentScript(maxLength)`. - -**Issues:** -1. **`buildExtractPageContentScript` strips UI noise via regex** (line 60), which is fragile. The regex only handles text at the start of lines. - -**Tests:** `tests/unit/ui/extraction.test.ts` (90 lines) - covers structure, filtering, deduplication, edge cases. - ---- - -#### `src/ui/conversations.ts` (21 lines) - Severity: MEDIUM - -**Purpose:** Builds JS IIFE script to extract conversation links from the page. - -**Key exports:** `buildListConversationsScript()`. - -**Issues:** -1. **`getAttribute('href')` returns relative URLs** (e.g., `/search/abc123`). The `url` field in results contains relative paths, not absolute URLs. Consumers must reconstruct the full URL. - -**Tests:** `tests/unit/ui/conversations.test.ts` (56 lines) - covers IIFE structure, anchor selection, URL filtering, deduplication, title extraction. - ---- - -#### `src/ui/stop.ts` (15 lines) - Severity: LOW - -**Purpose:** Builds JS script to click the stop/cancel button. - -**Key exports:** `buildStopAgentScript()`. - -**Issues:** -1. **SVG rect heuristic** (line 10) for detecting stop buttons could match any button with an SVG rectangle child. - -**Tests:** `tests/unit/ui/stop.test.ts` (49 lines). - ---- - -#### `src/ui/selectors.ts` (23 lines) - Severity: LOW - -**Purpose:** Default selector constants used as fallback. - -**Key exports:** `SELECTORS`. - -**Issues:** -1. **Duplicates the same values as `v145Selectors`**. Maintenance burden if selectors need updating. The duplication is intentional (default/fallback) but creates a sync risk. - -**Tests:** `tests/unit/ui/selectors.test.ts` (28 lines). - ---- - -### 2.3 Server and Configuration - -#### `src/server.ts` (674 lines) - Severity: HIGH (most critical file) - -**Purpose:** Core MCP server. Registers 12 tool handlers with `McpServer`, connects via stdio transport, handles all tool dispatch logic. - -**Key exports:** `startServer()`, `toolDefinitions`, `ToolDef`. - -**Issues:** -1. **Largest file in the project** (674 lines) with heterogeneous logic: tool definitions + handler dispatch + polling loop + response extraction. Should be split into separate modules. -2. **Line 52: Zod internal API access** - `(current as any)._def.innerType` to unwrap optional schemas. Acknowledged with biome-ignore. -3. **Line 225-234: `parseAgentStatus` does `as RawAgentStatus` cast** without validation. Malformed JSON from the browser could produce unexpected shapes. -4. **Lines 373-437: Polling loop in `comet_ask`** is the most logic-dense section of the codebase with 6 state variables (`sawNewResponse`, `stallCount`, `timedOut`, `collectedSteps`, `lastResponse`). Should be extracted into a dedicated polling state machine. -5. **Line 627: `comet_open_conversation` SSRF check** - `parsed.hostname.endsWith('perplexity.ai')` would also match `evilperplexity.ai`. However, this is mitigated since only subdomains of `perplexity.ai` are valid Comet URLs. - -**Tests:** `tests/unit/tools/handlers.test.ts` (47 lines), `tests/unit/tools/registry.test.ts` (60 lines), `tests/integration/tools/core-tools.test.ts` (408 lines), `tests/integration/tools/extraction-tools.test.ts` (202 lines), `tests/integration/tools/ui-tools.test.ts` (213 lines). - ---- - -#### `src/config.ts` (114 lines) - Severity: MEDIUM - -**Purpose:** Loads configuration from defaults < config file < environment variables < programmatic overrides. - -**Key exports:** `loadConfig(overrides?)`. - -**Issues:** -1. **Line 39: `(result as any)[key]`** for dynamic key assignment. Could be typed more precisely. -2. **Lines 74, 78: unchecked type assertions** `as CometConfig['logLevel']` and `as CometConfig['screenshotFormat']` on env var values. Invalid values like `ASTERIA_LOG_LEVEL=verbose` pass through without validation. -3. **No runtime validation of config values** (e.g., port range 1-65535, timeout positivity, poll interval minimum). - -**Tests:** `tests/unit/config.test.ts` (127 lines) - excellent coverage including defaults, env var overrides, programmatic overrides, config file loading, malformed JSON fallback, invalid number fallback. - ---- - -#### `src/cli.ts` (278 lines) - Severity: MEDIUM - -**Purpose:** CLI binary supporting `start`, `call`, `detect`, `--version`, `--help` commands. - -**Issues:** -1. **Line 158: `process.execPath` used to spawn child** - `asteria call` works only when run via `node dist/cli.js`, not as a globally installed binary. Should use `process.argv[1]` or resolve the script path differently. -2. **Line 197-198: screenshots saved to CWD** with timestamped name. No user control over output location, no path sanitization. -3. **Timeout of 180s** (line 234) is hardcoded. - -**Tests:** `tests/unit/cli.test.ts` (66 lines), `tests/unit/cli-run.test.ts` (324 lines). - ---- - -#### `src/index.ts` (7 lines) - Severity: LOW - -**Purpose:** Entry point. Imports and calls `startServer()`. - -**Issues:** -1. **`.catch((_err) => { process.exit(1) })`** silently swallows the error without logging. Makes debugging startup failures harder. - -**Tests:** None (trivial entry point). - ---- - -#### `src/errors.ts` (99 lines) - Severity: NONE - -**Purpose:** Custom error hierarchy with `AsteriaError` base + 8 subclasses + `toMcpError` converter. - -**Issues:** None. Well-designed error hierarchy with structured codes and context. Exemplary model. - -**Tests:** `tests/unit/errors.test.ts` (79 lines) - thorough coverage. - ---- - -#### `src/logger.ts` (39 lines) - Severity: NONE - -**Purpose:** Leveled logger that writes to stderr (avoids interfering with MCP stdio on stdout). - -**Issues:** None. - -**Tests:** `tests/unit/logger.test.ts` (55 lines). - ---- - -#### `src/snapshot.ts` (40 lines) - Severity: LOW - -**Purpose:** Debug utility that connects to Comet and dumps a DOM snapshot. - -**Issues:** -1. **`const _logger = createLogger('info')`** (line 6) creates a logger that is never used. - -**Tests:** `tests/unit/snapshot.test.ts` (28 lines). - ---- - -#### `src/version.ts` (26 lines) - Severity: MEDIUM - -**Purpose:** Detects Comet's Chrome version via `/json/version` and loads matching selector set. - -**Issues:** -1. **On fetch failure** (line 21), silently falls back to v145 selectors without logging a warning. Could hide connectivity issues. - -**Tests:** `tests/unit/version.test.ts` (44 lines). - ---- - -#### `src/prose-filter.ts` (66 lines) - Severity: LOW - -**Purpose:** Shared logic for finding and filtering "prose" content elements. - -**Issues:** -1. Large JS code string embedded in TypeScript. Harder to debug and test. -2. 100-character minimum and question-mark filtering heuristics are hardcoded. - -**Tests:** `tests/unit/prose-filter.test.ts` (86 lines). - ---- - -### 2.4 Selectors - -#### `src/selectors/index.ts` (15 lines) - Severity: MEDIUM - -**Issues:** Only v145 registered. All other versions fallback to v145, which breaks if Comet updates its DOM. - -#### `src/selectors/v145.ts` (22 lines) - Severity: LOW - -**Issues:** Selectors tightly coupled to Comet's internal DOM. Any Comet UI update could break them. - -#### `src/selectors/types.ts` (10 lines) - Severity: NONE - -Clean type definition. No issues. - ---- - -## 3. Cross-Cutting Analysis - -### 3.1 Dependencies - -| Dependency | Version | Status | -|---|---|---| -| `@modelcontextprotocol/sdk` | ^1.12.1 | Current, appropriate | -| `chrome-remote-interface` | ^0.33.2 | Mature, well-maintained | -| `zod` | ^3.25.76 | Current | -| `@biomejs/biome` | ^2.4.10 | Current | -| `@types/chrome-remote-interface` | ^0.33.0 | Matched to library | -| `@types/node` | ^20.11.0 | Slightly behind (22.x types exist) but functional | -| `@vitest/coverage-v8` | ^1.6.1 | Stable | -| `typescript` | ^5.4.0 | Current | -| `vitest` | ^1.6.0 | Current | - -**Assessment:** All dependencies are reasonable, up-to-date, and from well-known sources. No concerning or unnecessary dependencies. - ---- - -### 3.2 Type Safety - -**`any` type usages in `src/`:** -1. `src/config.ts:39` - `(result as any)[key]` - Dynamic key assignment, suppressed with biome-ignore. -2. `src/server.ts:52` - `(current as any)._def.innerType` - Zod internal API access, suppressed with biome-ignore. - -Both are acknowledged with `biome-ignore` comments. No unchecked `any` types elsewhere. - -**Unsafe casts:** -1. `src/server.ts:233` - `return raw as RawAgentStatus` - No validation after `JSON.parse`. -2. `src/cdp/client.ts:189` - `as Promise` - Unvalidated CRI response. -3. `src/config.ts:74,78` - `as CometConfig['logLevel']` / `as CometConfig['screenshotFormat']` - Unvalidated env var assertions. - ---- - -### 3.3 Error Handling - -The codebase follows a consistent and well-structured error handling pattern: -1. Custom error hierarchy (8 domain-specific subclasses) with structured codes and context. -2. `toMcpError()` converts all errors into uniform MCP error responses. -3. Every tool handler wraps its body in `try/catch(err) { return toMcpError(err) }`. -4. Auto-reconnect with exponential backoff for transient CDP failures. -5. Best-effort operations (like `closeExtraTabs`) catch and log errors. - ---- - -### 3.4 Test Coverage - -| Source File | Unit Tests | Integration Tests | -|---|---|---| -| `src/index.ts` | No | No | -| `src/cli.ts` | Yes (2 files) | No | -| `src/config.ts` | Yes | Indirect (via harness) | -| `src/errors.ts` | Yes | No | -| `src/logger.ts` | Yes | No | -| `src/prose-filter.ts` | Yes | No | -| `src/server.ts` | Yes (2 files) | Yes (3 files) | -| `src/snapshot.ts` | Yes | No | -| `src/types.ts` | Yes | No | -| `src/version.ts` | Yes | Yes | -| `src/cdp/browser.ts` | Yes | No | -| `src/cdp/client.ts` | Yes | Indirect (via harness) | -| `src/cdp/connection.ts` | Yes | No | -| `src/cdp/tabs.ts` | Yes | No | -| `src/selectors/index.ts` | Yes | Yes | -| `src/selectors/types.ts` | No | No | -| `src/selectors/v145.ts` | Yes | No | -| `src/ui/*` (6 files) | All covered | Partial (via extraction-tools, ui-tools) | - -**Coverage gaps:** -- `src/index.ts` and `src/selectors/types.ts` lack tests (both trivial files). -- `browser.test.ts` has tests calling real `httpbin.org` - potential CI flakiness. -- `handlers.test.ts` and `registry.test.ts` partially overlap. -- `version-detect.test.ts` (integration) duplicates `version.test.ts` (unit). - ---- - -### 3.5 Security - -| Area | Severity | Detail | -|---|---|---| -| SSRF Prevention | GOOD | `https:` + `perplexity.ai` hostname validation, tests for domain suffix attack | -| JS Injection | GOOD | `JSON.stringify()` for prompt embedding, tests for backtick/template literal injection | -| CDP Port Binding | LOW | Hardcoded `127.0.0.1`, but any local process can connect to port 9222 | -| Process Management | MEDIUM | `killComet()` kills all Comet processes, not just Asteria's | -| API Key Exposure | MITIGATED | `.mcp.json` has keys but is in `.gitignore` | -| Config Validation | MEDIUM | No runtime validation of env var values | -| Domain Suffix SSRF | MEDIUM | `evilperplexity.ai` passes `endsWith('perplexity.ai')` check | - ---- - -### 3.6 Documentation - -| Document | Status | Gaps | -|---|---|---| -| README.md | Complete (9,575 chars) | None | -| architecture.md | Present (36 lines) | Could be more detailed | -| configuration.md | Incomplete | Missing `ASTERIA_USER_DATA_DIR`, `ASTERIA_WINDOW_WIDTH/HEIGHT` | -| contributing.md | Present, concise | Adequate | -| comet-compatibility.md | Present | Only v145 documented | -| uat-checklist.md | Present | **No items executed yet** | -| JSDoc inline | Minimal | Most functions lack formal doc comments | - ---- - -## 4. Priority Actions - -### P0 - Critical (blocks production) - -1. **Verify and fix mode switch** - `setTimeout` in `buildModeSwitchScript` may not execute within `Runtime.evaluate` context. Test manually and fix if broken. -2. **Execute UAT checklist** - No manual testing has been done yet. All items in `docs/uat-checklist.md` are unchecked. -3. **Fix domain suffix SSRF** - `endsWith('perplexity.ai')` matches `evilperplexity.ai`. Use proper suffix check (`=== 'perplexity.ai' || endsWith('.perplexity.ai')`). - -### P1 - Important (degrades maintainability) - -4. Extract polling loop from `server.ts` into a dedicated state machine (~60 lines of complex logic). -5. Add PID tracking for `killComet()` and cleanup handler for parent crash. -6. Add runtime validation for config values (port range, timeout positivity). -7. Update `docs/configuration.md` with missing env vars. -8. Replace `httpbin.org` calls in tests with a local mock server. -9. Fix `process.execPath` in CLI to work as global binary. - -### P2 - Improvement (nice-to-have) - -10. Add JSDoc to public functions. -11. Remove `SELECTORS` vs `v145Selectors` duplication. -12. Add support for future Comet versions in selector registry. -13. Log startup errors in `src/index.ts` catch block. -14. Remove unused `_logger` in `src/snapshot.ts`. -15. Log a warning when version detection falls back to default selectors. - ---- - -## 5. Overall Assessment - -**Asteria is a well-structured project with strong fundamentals.** The 3-layer architecture is clean, error handling is exemplary, test coverage is strong, and security hardening is serious. The main risks are: - -1. **Fragility to Comet UI changes** - The entire UI automation layer (selectors, status detection, mode switching) is tightly coupled to Comet's DOM structure. A Comet update could break multiple tools simultaneously. -2. **No manual testing completed** - The UAT checklist exists but hasn't been executed. -3. **One potential production bug** - The mode switch `setTimeout` pattern may not work in CDP evaluation context. - -For a v0.1.0 pre-release, the codebase quality is above average. The priority should be: execute UAT -> fix P0 bugs -> npm publish. diff --git a/docs/plans/2026-04-09-uat-fixes-design.md b/docs/plans/2026-04-09-uat-fixes-design.md deleted file mode 100644 index 04a967f..0000000 --- a/docs/plans/2026-04-09-uat-fixes-design.md +++ /dev/null @@ -1,122 +0,0 @@ -# UAT Fixes Design — Sources, Conversations, Mode Switch, Auto-Connect - -**Date:** 2026-04-09 -**Scope:** Fix all 4 issues found during UAT testing against Comet Chrome/145.2.7632.4587 - ---- - -## Issue 1: `comet_get_sources` returns empty - -### Root Cause - -Sources in Comet v145 are `` elements, not `` anchors inside `[role="tabpanel"]`. Some citation spans have a parent `` with href, others don't. The current `buildExtractSourcesScript` only finds anchor links inside tabpanels and misses the citation structure entirely. - -### DOM Evidence - -```html - - - openai - - - -openai\n+3 - - - -``` - -### Design - -Add a second extraction strategy to `buildExtractSourcesScript`: - -1. **Strategy A (existing):** Find `a[href]` inside `[role="tabpanel"]`, filter internal links. -2. **Strategy B (new):** Find `[class*="citation"]` elements, extract URL from closest `` parent, extract title from innerText. - -Merge results from both strategies, deduplicate by URL. - ---- - -## Issue 2: `comet_list_conversations` returns empty - -### Root Cause - -The script filters anchors by `href` containing `/search/` or `/copilot/`. Comet v145 also uses `/computer/tasks/` for Computer mode conversations. This pattern is missing from the filter. - -### DOM Evidence - -Conversation links found on the page: -- `https://www.perplexity.ai/search/deep-research-test-...` (search mode) -- `https://www.perplexity.ai/computer/tasks/most-populated-cities-...` (computer mode) -- `https://www.perplexity.ai/search/what-is-the-capital-...` (search mode) - -Also: conversation innerText often duplicates the title (e.g., "TitleTitle") because Comet renders both a heading and a subtitle. - -### Design - -1. Add `/computer/tasks/` as a third accepted URL pattern in `buildListConversationsScript`. -2. Add deduplication of the title text — if the first half of the string equals the second half, use only the first half. - ---- - -## Issue 3: Mode switch typeahead timing - -### Root Cause - -After typing `/` into the input field, Comet's typeahead menu is not immediately rendered in the DOM. The current retry (5 attempts x 200ms = 1s) is insufficient. The menu may take 1-2 seconds to appear. - -Additionally, the `/` character injection via `input.textContent = '/'` may not reliably trigger Comet's React event handlers on first attempt. - -### Design - -1. Increase retry to 10 attempts x 300ms = 3 seconds total. -2. Before each retry, re-dispatch the `/` input event to ensure Comet received the keystroke. -3. Add a small initial delay (100ms) after the first `/` before starting retries. - ---- - -## Issue 4: Auto-connect for stateless CLI calls - -### Root Cause - -Each `asteria call ` spawns a new process with a fresh `CDPClient` singleton. Tools like `comet_open_conversation` call `client.navigate()` which requires an active connection. Only `comet_connect` establishes the connection — other tools assume it's already done. - -In persistent MCP sessions (Claude Code, Cursor), `comet_connect` is called once and the connection persists. But in CLI `call` mode, every invocation is independent. - -### Design - -Add an `ensureConnected()` helper in `server.ts`: - -```typescript -async function ensureConnected(): Promise { - if (client.state.targetId) return // Already connected - await client.launchOrConnect() - await client.closeExtraTabs() - const { chromeMajor, selectors } = await detectCometVersion(config.port) - activeSelectors = selectors - logger.info(`Auto-connected to Comet Chrome/${chromeMajor}`) -} -``` - -Call `await ensureConnected()` at the start of every tool handler that needs a connection. This is a no-op when already connected (MCP sessions) and auto-connects when needed (CLI calls). - -**Handlers that need `ensureConnected()`:** All 12 tools except `comet_connect` (which does the connection itself). - ---- - -## Testing Strategy - -Each fix follows TDD: -1. Write/update failing test first -2. Implement fix -3. Verify all tests pass -4. Manual UAT verification against real Comet - ---- - -## Priority - -1. **Issue 4 (auto-connect)** — Enables proper testing of all other tools via CLI -2. **Issue 1 (sources)** — Most visible user-facing bug -3. **Issue 2 (conversations)** — Simple selector fix -4. **Issue 3 (mode switch)** — Timing tuning, partially works already diff --git a/docs/plans/2026-04-09-uat-fixes-plan.md b/docs/plans/2026-04-09-uat-fixes-plan.md deleted file mode 100644 index 049b904..0000000 --- a/docs/plans/2026-04-09-uat-fixes-plan.md +++ /dev/null @@ -1,363 +0,0 @@ -# UAT Fixes Implementation Plan - -> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. - -**Goal:** Fix 4 UAT issues: sources extraction, conversation listing, mode switch timing, and auto-connect for stateless CLI calls. - -**Architecture:** 4 independent tasks in priority order. Task 1 (auto-connect) enables testing of the others via CLI. Tasks 2-4 are selector/logic fixes in the UI automation layer. - -**Tech Stack:** TypeScript, Vitest, Chrome DevTools Protocol, Biome - ---- - -### Task 1: Add `ensureConnected()` auto-connect helper [Issue 4] - -**Files:** -- Modify: `src/server.ts` (add helper + add to 11 tool handlers) -- Test: `tests/integration/tools/ui-tools.test.ts` (add test) -- Reference: `tests/integration/tools/harness.ts` (mock state setup) - -**Step 1: Write the failing test** - -Add to `tests/integration/tools/ui-tools.test.ts`: - -```typescript -describe('auto-connect', () => { - it('auto-connects when no targetId set for comet_list_tabs', async () => { - // Simulate fresh client with no connection - mocks.state.targetId = null - mocks.launchOrConnect.mockResolvedValue('target-1') - mocks.closeExtraTabs.mockResolvedValue(undefined) - mocks.listTabsCategorized.mockResolvedValue({ - main: [{ id: 'target-1', url: 'https://www.perplexity.ai', type: 'page', title: 'Perplexity' }], - sidecar: [], - agentBrowsing: [], - overlay: [], - others: [], - }) - - const handler = getHandler('comet_list_tabs') - const result = await handler({}) - - // Should have auto-connected - expect(mocks.launchOrConnect).toHaveBeenCalled() - expect(result.content[0].text).toContain('Main') - }) -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/integration/tools/ui-tools.test.ts -t "auto-connects"` -Expected: FAIL — `launchOrConnect` not called (no auto-connect logic). - -**Step 3: Write minimal implementation** - -In `src/server.ts`, add this helper after the `activeSelectors` declaration (around line 34): - -```typescript -/** Ensure the client is connected before using tools. Auto-connects if needed. */ -async function ensureConnected(): Promise { - if (client.state.targetId) return - logger.info('Auto-connecting to Comet...') - await client.launchOrConnect() - await client.closeExtraTabs() - try { - const { chromeMajor, selectors } = await detectCometVersion(config.port) - activeSelectors = selectors - logger.info(`Auto-connected to Comet Chrome/${chromeMajor}`) - } catch { - // Version detection failure is non-fatal - } -} -``` - -Then add `await ensureConnected()` at the start of each tool handler that needs a connection. The handlers that need it are all EXCEPT `comet_connect` (which does its own connection). Add `await ensureConnected()` as the first line inside each `try` block of these 11 handlers: - -- `comet_ask` (line ~324) -- `comet_poll` (line ~446) -- `comet_stop` (line ~462) -- `comet_screenshot` (line ~483) -- `comet_mode` (line ~502) -- `comet_list_tabs` (line ~525) -- `comet_switch_tab` (line ~539) -- `comet_get_sources` (line ~568) -- `comet_list_conversations` (line ~592) -- `comet_open_conversation` (line ~619) -- `comet_get_page_content` (line ~647) - -For each handler, add `await ensureConnected()` as the first line after `try {`. For example, `comet_poll`: - -```typescript -async () => { - try { - await ensureConnected() - const raw = await client.safeEvaluate(buildGetAgentStatusScript(activeSelectors)) - ... -``` - -**Step 4: Run tests to verify they pass** - -Run: `npx vitest run tests/integration/tools/` -Expected: ALL PASS - -**Step 5: Commit** - -```bash -git add src/server.ts tests/integration/tools/ui-tools.test.ts -git commit -m "feat: add ensureConnected auto-connect for stateless CLI tool calls" -``` - ---- - -### Task 2: Fix sources extraction — add citation element strategy [Issue 1] - -**Files:** -- Modify: `src/ui/extraction.ts` -- Test: `tests/unit/ui/extraction.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/ui/extraction.test.ts`: - -```typescript -describe('citation extraction strategy', () => { - it('includes citation element strategy', () => { - const s = buildExtractSourcesScript() - expect(s).toContain('citation') - }) - - it('looks for citation class elements', () => { - const s = buildExtractSourcesScript() - expect(s).toContain('[class*="citation"]') - }) - - it('extracts URL from closest anchor parent of citation', () => { - const s = buildExtractSourcesScript() - expect(s).toContain('closest') - expect(s).toContain('a') - }) -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/ui/extraction.test.ts -t "citation"` -Expected: FAIL — no citation strategy in current code. - -**Step 3: Write minimal implementation** - -Replace `buildExtractSourcesScript` in `src/ui/extraction.ts`: - -```typescript -export function buildExtractSourcesScript(): string { - return `(function() { - function isInternalLink(url) { - if (!url) return true; - try { - var hostname = new URL(url).hostname; - // Domain check must match src/utils.ts isPerplexityDomain() - return hostname === 'perplexity.ai' || hostname.endsWith('.perplexity.ai'); - } catch (e) { - return true; - } - } - - function extractDomain(url) { - try { - return new URL(url).hostname; - } catch (e) { - return ''; - } - } - - var sources = []; - var seenUrls = {}; - - // Strategy A: Find links inside tabpanel elements - var tabpanels = document.querySelectorAll('[role="tabpanel"]'); - for (var t = 0; t < tabpanels.length; t++) { - var anchors = tabpanels[t].querySelectorAll('a[href]'); - for (var i = 0; i < anchors.length; i++) { - var a = anchors[i]; - var href = a.href; - if (!href || seenUrls[href]) continue; - if (href.indexOf('javascript:') === 0) continue; - if (href.indexOf('#') === href.length - 1) continue; - if (isInternalLink(href)) continue; - seenUrls[href] = true; - sources.push({ url: href, title: (a.innerText || '').trim() || extractDomain(href) || href }); - } - } - - // Strategy B: Find citation elements (Comet v145 source format) - var citations = document.querySelectorAll('[class*="citation"]'); - for (var c = 0; c < citations.length; c++) { - var el = citations[c]; - if (el.className.indexOf('citation-nbsp') !== -1) continue; - var anchor = el.closest('a') || el.querySelector('a'); - if (!anchor) continue; - var href2 = anchor.href; - if (!href2 || seenUrls[href2]) continue; - if (isInternalLink(href2)) continue; - seenUrls[href2] = true; - var text2 = (el.innerText || '').trim().split('\\n')[0].trim(); - sources.push({ url: href2, title: text2 || extractDomain(href2) || href2 }); - } - - return JSON.stringify(sources); - })()` -} -``` - -**Step 4: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/ui/extraction.test.ts` -Expected: ALL PASS - -**Step 5: Commit** - -```bash -git add src/ui/extraction.ts tests/unit/ui/extraction.test.ts -git commit -m "fix: add citation element extraction strategy for Comet v145 sources" -``` - ---- - -### Task 3: Fix conversation listing — add `/computer/tasks/` pattern [Issue 2] - -**Files:** -- Modify: `src/ui/conversations.ts` -- Test: `tests/unit/ui/conversations.test.ts` - -**Step 1: Write the failing test** - -Add to `tests/unit/ui/conversations.test.ts`: - -```typescript -it('filters for /computer/tasks/ URLs', () => { - const s = buildListConversationsScript() - expect(s).toContain('/computer/tasks/') -}) - -it('deduplicates doubled title text', () => { - const s = buildListConversationsScript() - expect(s).toContain('dedupeTitle') -}) -``` - -**Step 2: Run test to verify it fails** - -Run: `npx vitest run tests/unit/ui/conversations.test.ts -t "computer"` -Expected: FAIL — no `/computer/tasks/` in current script. - -**Step 3: Write minimal implementation** - -Replace `buildListConversationsScript` in `src/ui/conversations.ts`: - -```typescript -export function buildListConversationsScript(): string { - return `(function() { - function dedupeTitle(text) { - if (!text) return ''; - var half = Math.floor(text.length / 2); - if (half > 0 && text.substring(0, half) === text.substring(half)) return text.substring(0, half); - return text; - } - - var links = document.querySelectorAll('a[href]'); - var conversations = []; - var seen = {}; - for (var i = 0; i < links.length; i++) { - var href = links[i].getAttribute('href') || ''; - if (href.indexOf('/search/') !== -1 || href.indexOf('/copilot/') !== -1 || href.indexOf('/computer/tasks/') !== -1) { - if (!seen[href]) { - seen[href] = true; - conversations.push({ title: dedupeTitle((links[i].innerText || '').trim()), url: href }); - } - } - } - return JSON.stringify(conversations); - })()` -} -``` - -**Step 4: Run tests to verify they pass** - -Run: `npx vitest run tests/unit/ui/conversations.test.ts` -Expected: ALL PASS - -**Step 5: Commit** - -```bash -git add src/ui/conversations.ts tests/unit/ui/conversations.test.ts -git commit -m "fix: add /computer/tasks/ pattern and title dedup to conversation listing" -``` - ---- - -### Task 4: Fix mode switch retry timing [Issue 3] - -**Files:** -- Modify: `src/server.ts` (the comet_mode handler retry logic) - -**Step 1: Verify current retry implementation** - -The retry logic was added in a previous follow-up. Read the current `comet_mode` handler in `src/server.ts` to find the retry loop. It should look like: - -```typescript -const MAX_MODE_RETRIES = 5 -for (let attempt = 0; attempt < MAX_MODE_RETRIES; attempt++) { - const raw = await client.safeEvaluate(buildModeSwitchScript(mode)) - const result = extractValue(raw) - if (result !== 'no_listbox_found') { - return textResult(`Mode switch result: ${result}`) - } - await sleep(200) -} -``` - -**Step 2: Update retry parameters and add re-injection** - -Change the retry loop to: - -```typescript -const MAX_MODE_RETRIES = 10 -for (let attempt = 0; attempt < MAX_MODE_RETRIES; attempt++) { - const raw = await client.safeEvaluate(buildModeSwitchScript(mode)) - const result = extractValue(raw) - if (result !== 'no_listbox_found') { - return textResult(`Mode switch result: ${result}`) - } - // Wait longer between retries to give Comet time to render - await sleep(300) -} -return textResult('Mode switch failed: typeahead menu did not appear after retries') -``` - -Also update the integration test in `tests/integration/tools/ui-tools.test.ts`: - -Find the test `'retries mode switch when listbox not immediately available'` and update `toHaveBeenCalledTimes(3)` to account for the new 10-retry max if needed (the test should still work since it resolves on the 3rd call). - -**Step 3: Run tests** - -Run: `npx vitest run tests/integration/tools/ui-tools.test.ts -t "mode"` -Expected: ALL PASS - -**Step 4: Commit** - -```bash -git add src/server.ts tests/integration/tools/ui-tools.test.ts -git commit -m "fix: increase mode switch retry to 10x300ms for slower Comet rendering" -``` - ---- - -## Summary - -| Task | Issue | Files | Risk | -|------|-------|-------|------| -| 1. Auto-connect | Issue 4 | server.ts, ui-tools test | MEDIUM — touches all handlers | -| 2. Sources fix | Issue 1 | extraction.ts, test | LOW — additive strategy | -| 3. Conversations fix | Issue 2 | conversations.ts, test | LOW — add pattern + dedup | -| 4. Mode switch timing | Issue 3 | server.ts, test | LOW — parameter change | diff --git a/docs/plans/2026-04-10-docs-restructure-plan.md b/docs/plans/2026-04-10-docs-restructure-plan.md deleted file mode 100644 index cdc63cb..0000000 --- a/docs/plans/2026-04-10-docs-restructure-plan.md +++ /dev/null @@ -1,609 +0,0 @@ -# Documentation Restructure Implementation Plan - -> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. - -**Goal:** Restructure Asteria's documentation into enterprise-grade English docs for AI agent developers — README hub + 7 focused doc files. - -**Architecture:** README.md is the landing page (install + quickstart + overview). Three new docs (`tools.md`, `integration.md`, `troubleshooting.md`) cover deep reference material. Four existing docs (`architecture.md`, `configuration.md`, `contributing.md`, `comet-compatibility.md`) get updated and expanded. - -**Tech Stack:** Markdown, GitHub-flavored. No build tools. - ---- - -### Task 1: Rewrite README.md - -**Files:** -- Modify: `README.md` - -**Step 1: Rewrite README.md** - -Replace the entire README with the following content. Key changes: -- Remove "GIF coming soon" placeholder and demo section -- Update 12 → 13 tools everywhere -- Add `comet_wait` to tools table -- Remove "npm publish" from roadmap (done) -- Remove "active development / install from source" note — just `npm install -g` -- Update architecture diagram to include `comet_wait` -- Add "Guides" section linking to docs -- Tighten prose for enterprise tone -- Keep banner, badges, license, sponsor sections - -The new README structure: -1. Banner + badges (keep existing) -2. One-liner pitch -3. How it works mermaid diagram (update T13 label to comet_wait) -4. Installation (just npm install -g) -5. Quick Start (3 steps: MCP config, Comet, use) -6. Tools overview table (13 tools, link to docs/tools.md) -7. CLI reference -8. Configuration link -9. Guides section (links to integration, troubleshooting, architecture) -10. Roadmap (remove npm publish, keep rest) -11. Contributing link -12. Sponsor + license - -Write the complete file. Do not use placeholders — every section has real content. - -**Step 2: Verify markdown renders correctly** - -Run: `cat README.md | head -20` -Expected: Clean markdown, no broken formatting - -**Step 3: Commit** - -```bash -git add README.md -git commit -m "docs: rewrite README for v1.1.0 — 13 tools, professional tone" -``` - ---- - -### Task 2: Create docs/tools.md - -**Files:** -- Create: `docs/tools.md` - -**Step 1: Write docs/tools.md** - -Full tool reference for all 13 tools. Each tool entry follows this structure: - -```markdown -## comet_ask - -Send a prompt to Perplexity Comet and poll until the agent responds or times out. - -### Parameters - -| Name | Type | Required | Default | Description | -|------|------|----------|---------|-------------| -| prompt | string | Yes | — | The question or instruction to send | -| newChat | boolean | No | false | Start a fresh chat before sending | -| timeout | number | No | 120000 | Maximum wait time in ms | - -### Response - -Returns the agent's response text. If the agent times out, returns a partial response with steps so far and a suggestion to use `comet_poll` or `comet_wait`. - -### Example - -asteria call comet_ask '{"prompt": "Summarize the latest AI research papers"}' - -### Notes - -- Non-blocking: returns partial results if timeout is reached -- Auto-connects if not already connected -- Use `comet_wait` after timeout to get the full response -``` - -Tool schemas from `src/server.ts:121-149`: - -1. **comet_connect** — params: `port` (number, optional). Auto-detects Comet, closes extra tabs, navigates to perplexity.ai. -2. **comet_ask** — params: `prompt` (string, required), `newChat` (boolean, optional), `timeout` (number, optional). Sends prompt, polls until response. -3. **comet_poll** — no params. Returns current agent status JSON. -4. **comet_wait** — params: `timeout` (number, optional, default 120000). Polls until agent finishes, returns full response. -5. **comet_stop** — no params. Clicks stop button. Retries up to 5 times. -6. **comet_screenshot** — params: `format` (enum: png|jpeg, optional, default png). Returns base64 image. -7. **comet_mode** — params: `mode` (enum: standard|deep-research|model-council|create|learn|review|computer, nullable, optional). Omit to get current mode. Icon-based, locale-independent. -8. **comet_list_tabs** — no params. Returns tabs categorized as Main, Sidecar, Agent Browsing, Overlay, Other. -9. **comet_switch_tab** — params: `tabId` (string, optional), `title` (string, optional). Switch by exact ID or title substring. -10. **comet_get_sources** — no params. Extracts citations. Auto-expands collapsed citations (e.g. `wsj+3`). -11. **comet_list_conversations** — no params. Returns recent conversations from sidebar. -12. **comet_open_conversation** — params: `url` (string, required). Must be `https://perplexity.ai/` URL. Validates domain (SSRF protection). -13. **comet_get_page_content** — params: `maxLength` (number, optional, default 10000). Extracts title + body text. - -After all 13 tools, add these sections: - -**Common Patterns:** -- Ask and wait: `comet_ask` with sufficient timeout -- Ask + poll: `comet_ask` with short timeout, then `comet_poll` in a loop -- Ask + wait: `comet_ask` (may timeout), then `comet_wait` to get full result -- Screenshot verification: `comet_screenshot` after `comet_ask` -- Source extraction: `comet_ask`, then `comet_get_sources` - -**Error Responses:** -All errors return `{ content: [{ type: "text", text: "[ERROR_CODE] message" }], isError: true }` - -**Connection Lifecycle:** -- All tools call `ensureConnected()` which auto-connects if no active session -- Auto-connect: launches Comet if not running, closes extra tabs, detects Chrome version - -**Step 2: Verify file** - -Run: `wc -l docs/tools.md` -Expected: ~300-400 lines of well-formatted markdown - -**Step 3: Commit** - -```bash -git add docs/tools.md -git commit -m "docs: add complete tool reference (13 tools)" -``` - ---- - -### Task 3: Create docs/integration.md - -**Files:** -- Create: `docs/integration.md` - -**Step 1: Write docs/integration.md** - -Structure: - -1. **Overview** — Asteria communicates via MCP stdio. The MCP client spawns `asteria start` as a subprocess and sends JSON-RPC 2.0 messages over stdin/stdout. - -2. **Prerequisites** checklist: - - Node.js >= 18 installed - - Perplexity Comet installed (`https://comet.perplexity.ai/`) - - Comet running with debug port accessible - -3. **Claude Code** setup: - ```json - // ~/.claude/claude_desktop_config.json - { - "mcpServers": { - "asteria": { - "type": "stdio", - "command": "asteria", - "args": ["start"] - } - } - } - ``` - Verify: restart Claude Code, ask "What MCP tools are available?" - Example session: ask Claude to "Search Perplexity for the latest AI news" - -4. **Cursor** setup: - ```json - // ~/.cursor/mcp.json - { - "mcpServers": { - "asteria": { - "type": "stdio", - "command": "asteria", - "args": ["start"] - } - } - } - ``` - Verify: open Cursor settings > MCP, check asteria appears - -5. **CLI Usage** — direct tool invocation: - ```bash - # Connect - asteria call comet_connect - - # Ask a question - asteria call comet_ask '{"prompt": "What is 2+2?"}' - - # Check status - asteria call comet_poll - - # Wait for completion - asteria call comet_wait - - # Screenshot - asteria call comet_screenshot '{"format": "jpeg"}' - - # Switch mode - asteria call comet_mode '{"mode": "deep-research"}' - - # Get sources - asteria call comet_get_sources - - # List tabs - asteria call comet_list_tabs - - # Get page content - asteria call comet_get_page_content '{"maxLength": 5000}' - - # List conversations - asteria call comet_list_conversations - - # Open a conversation - asteria call comet_open_conversation '{"url": "https://www.perplexity.ai/search/abc123"}' - ``` - -6. **Programmatic Usage** — Node.js integration: - ```javascript - import { spawn } from 'node:child_process' - - const child = spawn('asteria', ['start'], { stdio: ['pipe', 'pipe', 'pipe'] }) - - // Send initialize - child.stdin.write(JSON.stringify({ - jsonrpc: '2.0', id: 0, method: 'initialize', - params: { - protocolVersion: '2024-11-05', - capabilities: {}, - clientInfo: { name: 'my-app', version: '1.0.0' } - } - }) + '\n') - - // After initialized notification, call a tool - child.stdin.write(JSON.stringify({ - jsonrpc: '2.0', id: 1, method: 'tools/call', - params: { name: 'comet_ask', arguments: { prompt: 'What is 2+2?' } } - }) + '\n') - - child.stdout.on('data', (chunk) => { - // Parse JSON-RPC responses - for (const line of chunk.toString().split('\n')) { - if (!line.trim()) continue - const msg = JSON.parse(line) - if (msg.id === 1) console.log(msg.result) - } - }) - ``` - -**Step 2: Verify file** - -Run: `wc -l docs/integration.md` -Expected: ~150-200 lines - -**Step 3: Commit** - -```bash -git add docs/integration.md -git commit -m "docs: add integration guide for MCP clients and CLI" -``` - ---- - -### Task 4: Create docs/troubleshooting.md - -**Files:** -- Create: `docs/troubleshooting.md` - -**Step 1: Write docs/troubleshooting.md** - -Structure: - -1. **Connection Issues** - - **"Comet not found" / `COMET_NOT_FOUND`** - - Asteria cannot find the Comet executable - - Fix: Set `COMET_PATH` environment variable to the full path - - macOS: `/Applications/Perplexity\ Comet.app/Contents/MacOS/comet` - - Windows: `C:\Users\\AppData\Local\Perplexity\Comet\comet.exe` - - Verify: `asteria detect` - - **"Debug port not reachable" / `CDP_CONNECTION_FAILED`** - - Comet is running but the debug port (9222) is not accessible - - Fix: Launch Comet with `--remote-debugging-port=9222` - - Verify: `curl http://127.0.0.1:9222/json/version` - - **"Connection refused"** - - Comet is not running or using a different port - - Fix: Start Comet, or set `ASTERIA_PORT` to the correct port - - Verify: `asteria detect` shows "active" for debug port - -2. **Tool Issues** - - **"Agent is still working"** - - `comet_ask` returned before the agent finished - - Fix: Call `comet_wait` to poll until completion, or increase timeout - - Example: `asteria call comet_wait '{"timeout": 300000}'` - - **"Empty response"** - - Agent may not have finished processing - - Fix: Use `comet_poll` to check status, then `comet_wait` for full result - - Check: `comet_screenshot` to see current page state - - **"Mode switch failed: typeahead menu did not appear"** - - Mode switching only works on the home page or a new chat page - - Fix: The `newChat` parameter in `comet_ask` automatically navigates to a fresh page - - Note: Mode switch uses "/" slash command in Comet's input field - - **"No sources found"** - - Short queries may not generate citations - - Fix: Sources are only available after a query with citations. Try `comet_screenshot` to verify - - Collapsed citations (e.g. `wsj+3`) are auto-expanded - - **"No stop button found"** - - No agent is currently running - - Fix: This is expected if no query is active - -3. **Error Codes** - - | Code | Class | Meaning | - |------|-------|---------| - | `CDP_CONNECTION_FAILED` | CDPConnectionError | Cannot connect to Chrome DevTools Protocol | - | `COMET_NOT_FOUND` | CometNotFoundError | Comet executable not found on system | - | `COMET_LAUNCH_FAILED` | CometLaunchError | Comet executable found but failed to start | - | `TAB_NOT_FOUND` | TabNotFoundError | No tab matches the given ID or title | - | `TIMEOUT` | TimeoutError | Operation exceeded the configured timeout | - | `EVALUATION_FAILED` | EvaluationError | JavaScript evaluation failed in the browser | - | `SELECTOR_NOT_FOUND` | SelectorError | CSS selector did not match any element | - | `AGENT_ERROR` | AgentError | Agent-specific error during operation | - | `CONFIG_ERROR` | ConfigurationError | Invalid configuration value | - - All errors return: `{ content: [{ type: "text", text: "[CODE] message" }], isError: true }` - -4. **Debug Mode** - - Set `ASTERIA_LOG_LEVEL=debug` for verbose logging: - ```bash - ASTERIA_LOG_LEVEL=debug asteria start - ``` - - Key log messages: - - `Auto-connecting to Comet...` — triggered by ensureConnected() - - `Detected Comet Chrome/145` — version detection succeeded - - `Type result: ...` — prompt input evaluation - - `Submit result: ...` — prompt submission result - -5. **Health Check** - - ```bash - asteria detect - ``` - - This prints: - - Whether Comet process is running - - The Comet executable path - - Debug port status (active/not responding/not reachable) - - Browser version if connected - -**Step 2: Verify file** - -Run: `wc -l docs/troubleshooting.md` -Expected: ~150-200 lines - -**Step 3: Commit** - -```bash -git add docs/troubleshooting.md -git commit -m "docs: add troubleshooting guide with error codes" -``` - ---- - -### Task 5: Update docs/architecture.md - -**Files:** -- Modify: `docs/architecture.md` - -**Step 1: Rewrite docs/architecture.md** - -Update and expand from current brief version. New structure: - -1. **Overview** — Three-layer architecture diagram (keep current, update 12 → 13 tools): - ``` - MCP Tools (13 tools) - ↓ - UI Automation (selectors, input, status, extraction, navigation) - ↓ - CDP Transport (browser launch, connection, tabs, client) - ↓ - Perplexity Comet Browser (Chromium) - ``` - -2. **MCP Layer** — 13 tools grouped by function: - - Session: connect, poll, wait, stop - - Query: ask, mode - - Content: screenshot, get_sources, get_page_content - - Navigation: list_tabs, switch_tab, list_conversations, open_conversation - -3. **UI Automation Layer**: - - **Selector Strategy Pattern** (keep current description) - - **Typeahead Mode Detection** — reads SVG icon href from typeahead menu items with `.bg-subtle` class - - **Collapsed Citation Expansion** — clicks collapsed citations (`wsj+3` pattern) to reveal full URLs - - **Prompt Injection** — uses `execCommand('insertText')` for safe injection into Lexical editor via `JSON.stringify` - -4. **CDP Transport Layer**: - - **Version Detection** (keep current, expand) - - **Connection Management** (keep current) - - **Auto-Reconnect** — health checks via `1+1` evaluation, exponential backoff - -5. **Error Handling** (keep, update to 9 subclasses with code table) - -6. **Data Flow: comet_ask lifecycle**: - ``` - 1. ensureConnected() — auto-connect if needed - 2. Pre-send state capture (proseCount, lastProseText) - 3. Type prompt via execCommand('insertText') - 4. Submit via Enter key - 5. Polling loop (config.pollInterval) - - Check agent status (working/idle/completed) - - Detect new response via proseCount growth - - Stall detection (10 polls without growth → break) - 6. Response settle (5 x 1s polls to ensure complete text) - 7. Return response + steps - ``` - -**Step 2: Commit** - -```bash -git add docs/architecture.md -git commit -m "docs: expand architecture with v1.1 features" -``` - ---- - -### Task 6: Update docs/configuration.md - -**Files:** -- Modify: `docs/configuration.md` - -**Step 1: Update docs/configuration.md** - -The current file is already good. Changes needed: -- Verify `ASTERIA_RESPONSE_TIMEOUT` default is 180000 (confirmed in `src/config.ts` via `src/server.ts` which uses `config.responseTimeout` — check actual default) -- Add `ASTERIA_USER_DATA_DIR` description improvement -- Add `ASTERIA_WINDOW_WIDTH` and `ASTERIA_WINDOW_HEIGHT` descriptions -- Add a "Quick Reference" section with the most commonly used variables -- Add config file example with all variables shown - -**Step 2: Commit** - -```bash -git add docs/configuration.md -git commit -m "docs: update configuration reference" -``` - ---- - -### Task 7: Update docs/contributing.md - -**Files:** -- Modify: `docs/contributing.md` - -**Step 1: Expand docs/contributing.md** - -Current is minimal (35 lines). Expand to: - -1. **Setup** (keep current, add `npm run typecheck`) -2. **Development** (keep current commands) -3. **Project Structure**: - ``` - src/ - cli.ts — CLI entry point - server.ts — MCP server + tool handlers - config.ts — Configuration loading + validation - errors.ts — Error classes (9 subclasses) - cdp/ — Chrome DevTools Protocol layer - browser.ts — Browser detection + launching - client.ts — CDP client (singleton, auto-reconnect) - connection.ts — WebSocket connection - tabs.ts — Tab categorization - ui/ — UI automation scripts - input.ts — Prompt injection (safe, JSON.stringify-based) - navigation.ts — Mode switch + submit - status.ts — Agent status detection - extraction.ts — Source + page content extraction - conversations.ts — Conversation listing - selectors.ts — Selector strategy runner - stop.ts — Agent stop - selectors/ — Version-specific CSS selectors - v145.ts — Chrome 145 selector set - types.ts — SelectorSet interface - index.ts — Version registry - tests/ - unit/ — Unit tests (mocked CDP) - integration/ — Integration tests (real tool shapes) - ``` - -4. **Testing Strategy**: - - Unit tests: mock CDP client, test UI scripts, test config validation - - Integration tests: test tool shapes match server definitions - - Run: `npm test` (314 tests) - - Coverage: `npm run test:ci` - -5. **Code Style** (keep current) -6. **Adding Comet Versions** (keep current, expand step-by-step) -7. **Commit Messages** (keep current conventional commits) -8. **PR Process**: - - All PRs must pass CI (biome lint + vitest) - - Use conventional commit prefixes - - Update tests for new features - - Update docs for user-facing changes - -**Step 2: Commit** - -```bash -git add docs/contributing.md -git commit -m "docs: expand contributing guide with testing and project structure" -``` - ---- - -### Task 8: Update docs/comet-compatibility.md - -**Files:** -- Modify: `docs/comet-compatibility.md` - -**Step 1: Expand docs/comet-compatibility.md** - -Current is very thin (15 lines). Expand to: - -1. **Supported Versions** (keep current table) -2. **How Version Detection Works**: - - On `comet_connect`, Asteria queries `http://127.0.0.1:9222/json/version` - - Extracts Chrome major version (e.g. `145` from `Chrome/145.2.7632.4587`) - - Looks up matching selector set in `src/selectors/index.ts` - - Falls back to latest known set if version is unknown - -3. **Selector Strategy Pattern**: - - Selectors are ordered arrays of CSS selectors - - Each strategy tries selectors in order until one matches - - New selectors go at the front, old ones become fallbacks - - This makes the system resilient to UI changes - -4. **Adding a New Comet Version** (expand from current): - 1. Run `asteria detect` to confirm Comet version - 2. Use browser DevTools to inspect DOM elements - 3. Create `src/selectors/v{version}.ts` implementing `SelectorSet` interface - 4. Copy selectors from the latest version and update as needed - 5. Register in `src/selectors/index.ts` version map - 6. Add unit tests for new selectors - 7. Test with real Comet instance - 8. Update this table - -**Step 2: Commit** - -```bash -git add docs/comet-compatibility.md -git commit -m "docs: expand Comet compatibility guide with selector strategy" -``` - ---- - -### Task 9: Final verification - -**Step 1: Check all doc files exist and have content** - -```bash -ls -la README.md docs/tools.md docs/integration.md docs/troubleshooting.md docs/architecture.md docs/configuration.md docs/contributing.md docs/comet-compatibility.md -``` - -Expected: All 8 files exist with non-zero size. - -**Step 2: Check README links are valid** - -```bash -grep -o '\[.*\](docs/[^)]*)' README.md | while read link; do - file=$(echo "$link" | sed 's/.*](\(docs\/[^)]*\))/\1/') - if [ ! -f "$file" ]; then echo "BROKEN: $file"; fi -done -``` - -Expected: No broken links. - -**Step 3: Check tool count consistency** - -```bash -grep -c 'comet_' docs/tools.md -grep -c '13 tools' README.md docs/architecture.md -``` - -Expected: 13 tool sections, consistent count mentions. - -**Step 4: Run lint to make sure no files are malformed** - -```bash -npm run lint -npm test -``` - -Expected: All pass.