From 5aa8db5d0be11b29c8e2b5b943c6fca11787d2b3 Mon Sep 17 00:00:00 2001 From: AIOSAI Date: Thu, 5 Mar 2026 13:03:38 -0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20chore(spawn/templates/agent=5Fmo?= =?UTF-8?q?ck=5Fbranch):=20remove=20deprecated=20modules=20and=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - delete all deprecated aipass modules: api, assistant, citizenship, devpulse, drone, flow, mail, seedgo, skills, trigger, templates, and tests - remove seedgo config and coverage files no longer used - cleanup tests for drone CLI, compliance, core, integration, modules, phase2, seedgo CLI, core, plugins, silent failure detection, file module size, paths, and version to reduce maintenance burden - add new agent_mock_branch spawn template with scaffold files, config, and verification tool for branch consistency checks - add comprehensive .registry_ignore.json and .backup_ignore.json to exclude unwanted files from branch updates and backups - include branch README, artifacts, docs, logs, pytest setup, tools, tests, and standard bypass configs for new agent mock branch template - rename and reorganize template files from branch_template to spawn/templates agent.template for consistent naming and usage --- .coverage | Bin 53248 -> 0 bytes .seedgo/config.json | 42 - BRANCH_REGISTRY.json | 341 +++++ src/aipass/api/__init__.py | 5 - src/aipass/api/handlers/__init__.py | 1 - src/aipass/api/modules/__init__.py | 1 - src/aipass/api/plugins/__init__.py | 1 - src/aipass/assistant/__init__.py | 5 - src/aipass/assistant/handlers/__init__.py | 1 - src/aipass/assistant/modules/__init__.py | 1 - src/aipass/assistant/modules/scheduler.py | 1 - src/aipass/assistant/plugins/__init__.py | 5 - src/aipass/assistant/plugins/calendar.py | 1 - src/aipass/assistant/plugins/gmail.py | 1 - src/aipass/assistant/plugins/telegram.py | 1 - src/aipass/citizenship/__init__.py | 7 - src/aipass/citizenship/handlers/__init__.py | 1 - src/aipass/citizenship/modules/__init__.py | 1 - src/aipass/citizenship/modules/agents.py | 7 - src/aipass/citizenship/modules/bank.py | 5 - src/aipass/citizenship/modules/trinity.py | 5 - src/aipass/citizenship/plugins/__init__.py | 1 - src/aipass/devpulse/__init__.py | 5 - src/aipass/devpulse/handlers/__init__.py | 1 - src/aipass/devpulse/modules/__init__.py | 1 - src/aipass/devpulse/plugins/__init__.py | 1 - src/aipass/drone/__init__.py | 5 - src/aipass/drone/handlers/__init__.py | 1 - src/aipass/drone/handlers/dispatch.py | 1 - src/aipass/drone/modules/__init__.py | 1 - src/aipass/drone/modules/resolver.py | 1 - src/aipass/drone/modules/router.py | 1 - src/aipass/drone/plugins/__init__.py | 1 - src/aipass/flow/__init__.py | 5 - src/aipass/flow/handlers/__init__.py | 1 - src/aipass/flow/modules/__init__.py | 1 - src/aipass/flow/plugins/__init__.py | 1 - src/aipass/mail/__init__.py | 5 - src/aipass/mail/handlers/__init__.py | 1 - src/aipass/mail/modules/__init__.py | 1 - src/aipass/mail/plugins/__init__.py | 1 - src/aipass/seedgo/__init__.py | 5 - src/aipass/seedgo/handlers/__init__.py | 1 - src/aipass/seedgo/modules/__init__.py | 1 - src/aipass/seedgo/plugins/__init__.py | 1 - src/aipass/skills/__init__.py | 11 - .../.agent}/.backup_ignore.json | 0 .../agent.template/.agent}/.migrations.json | 0 .../.agent}/.registry_ignore.json | 0 .../.agent}/.template_registry.json | 0 .../templates/agent.template}/.gitignore | 0 .../agent.template}/.trinity/local.json | 0 .../.trinity/observations.json | 0 .../agent.template}/.trinity/passport.json | 0 .../agent.template}/DASHBOARD.local.json | 0 .../templates/agent.template}/README.md | 0 .../agent.template}/apps/__init__.py | 0 .../templates/agent.template}/apps/branch.py | 0 .../agent.template}/apps/handlers/__init__.py | 0 .../agent.template}/apps/modules/__init__.py | 0 .../agent.template}/apps/plugins/__init__.py | 0 .../artifact_7_cortex_birth_certificate.json | 0 .../templates/agent.template/docs}/.gitkeep | 0 .../templates/agent.template}/pytest.ini | 0 .../agent.template}/tests/__init__.py | 0 .../agent.template}/tests/conftest.py | 0 .../agent.template}/tools/verify_branch.py | 0 .../agent.template/{{BRANCH}}_json}/.gitkeep | 0 .../.agent/.backup_ignore.json | 133 ++ .../agent_mock_branch/.agent/.migrations.json | 49 + .../.agent/.registry_ignore.json | 43 + .../.agent/.template_registry.json | 301 ++++ .../.ai_mail.local/archive.json} | 0 .../.ai_mail.local/inbox.json} | 0 .../.ai_mail.local/sent.json} | 0 .../.backup/backup_manifest.json} | 0 .../.backup/latest_snapshot.json} | 0 .../data_level0.bin | Bin 0 -> 167600 bytes .../header.bin | Bin 0 -> 100 bytes .../length.bin | Bin 0 -> 400 bytes .../link_lists.bin} | 0 .../agent_mock_branch/.chroma/chroma.sqlite3 | Bin 0 -> 1462272 bytes .../templates/agent_mock_branch/.gitignore} | 0 .../.standards/audit_history.json | 0 .../agent_mock_branch/.standards/bypass.json | 115 ++ .../.standards/last_audit.json | 0 .../agent_mock_branch/.trinity/local.json | 34 + .../.trinity/observations.json | 37 + .../agent_mock_branch/.trinity/passport.json | 36 + .../agent_mock_branch/DASHBOARD.local.json | 91 ++ .../templates/agent_mock_branch/README.md | 51 + .../agent_mock_branch.json/.gitkeep | 0 .../AGENT_MOCK_BRANCH.id.json | 0 .../AGENT_MOCK_BRANCH.local.json | 0 .../AGENT_MOCK_BRANCH.observations.json | 0 .../agent_mock_branch/apps/__init__.py | 1 + .../agent_mock_branch/apps/branch.py | 86 ++ .../apps/handlers/__init__.py | 0 .../agent_mock_branch/apps/handlers/cache.py | 0 .../apps/handlers/formatter.py | 0 .../apps/handlers/processor.py | 0 .../apps/handlers/validator.py | 0 .../apps/modules/__init__.py | 0 .../agent_mock_branch/apps/modules/config.py | 0 .../agent_mock_branch/apps/modules/core.py | 0 .../agent_mock_branch/apps/modules/help.py | 0 .../agent_mock_branch/apps/modules/status.py | 0 .../apps/plugins/__init__.py | 0 .../agent_mock_branch/apps/plugins/export.py | 0 .../agent_mock_branch/apps/plugins/webhook.py | 0 .../artifacts/artifact_1_registration.json | 0 .../artifact_7_cortex_birth_certificate.json | 15 + .../agent_mock_branch/docs/api_reference.md | 0 .../agent_mock_branch/docs/architecture.md | 0 .../agent_mock_branch/docs/changelog.md | 0 .../agent_mock_branch/docs/index.json | 0 .../dropbox/incoming_data.json | 0 .../agent_mock_branch}/flow.local.md | 0 .../logs/agent_mock_branch.log | 0 .../agent_mock_branch/logs/error.log | 0 .../templates/agent_mock_branch/pytest.ini | 21 + .../templates/default_config.json | 0 .../templates/welcome_message.md | 0 .../agent_mock_branch/tests/__init__.py | 1 + .../agent_mock_branch/tests/conftest.py | 43 + .../agent_mock_branch/tests/test_core.py | 0 .../tests/test_integration.py | 0 .../agent_mock_branch/tests/test_processor.py | 0 .../agent_mock_branch/tests/test_validator.py | 0 .../agent_mock_branch/tools/debug.py | 0 .../agent_mock_branch/tools/migrate.py | 0 .../agent_mock_branch/tools/verify_branch.py | 159 +++ src/aipass/templates/__init__.py | 5 - src/aipass/trigger/__init__.py | 5 - src/aipass/trigger/handlers/__init__.py | 1 - src/aipass/trigger/modules/__init__.py | 1 - src/aipass/trigger/plugins/__init__.py | 1 - tests/test_drone_cli.py | 273 ---- tests/test_drone_compliance.py | 228 ---- tests/test_drone_core.py | 390 ------ tests/test_drone_integration.py | 504 ------- tests/test_drone_modules.py | 302 ----- tests/test_drone_phase2.py | 546 -------- tests/test_file_module_size.py | 294 ---- tests/test_paths.py | 382 ------ tests/test_seedgo_cli.py | 1207 ----------------- tests/test_seedgo_core.py | 728 ---------- tests/test_seedgo_plugins.py | 765 ----------- tests/test_silent_failure_detection.py | 317 ----- tests/test_version.py | 5 - 150 files changed, 1557 insertions(+), 6101 deletions(-) delete mode 100644 .coverage delete mode 100644 .seedgo/config.json create mode 100644 BRANCH_REGISTRY.json delete mode 100644 src/aipass/api/__init__.py delete mode 100644 src/aipass/api/handlers/__init__.py delete mode 100644 src/aipass/api/modules/__init__.py delete mode 100644 src/aipass/api/plugins/__init__.py delete mode 100644 src/aipass/assistant/__init__.py delete mode 100644 src/aipass/assistant/handlers/__init__.py delete mode 100644 src/aipass/assistant/modules/__init__.py delete mode 100644 src/aipass/assistant/modules/scheduler.py delete mode 100644 src/aipass/assistant/plugins/__init__.py delete mode 100644 src/aipass/assistant/plugins/calendar.py delete mode 100644 src/aipass/assistant/plugins/gmail.py delete mode 100644 src/aipass/assistant/plugins/telegram.py delete mode 100644 src/aipass/citizenship/__init__.py delete mode 100644 src/aipass/citizenship/handlers/__init__.py delete mode 100644 src/aipass/citizenship/modules/__init__.py delete mode 100644 src/aipass/citizenship/modules/agents.py delete mode 100644 src/aipass/citizenship/modules/bank.py delete mode 100644 src/aipass/citizenship/modules/trinity.py delete mode 100644 src/aipass/citizenship/plugins/__init__.py delete mode 100644 src/aipass/devpulse/__init__.py delete mode 100644 src/aipass/devpulse/handlers/__init__.py delete mode 100644 src/aipass/devpulse/modules/__init__.py delete mode 100644 src/aipass/devpulse/plugins/__init__.py delete mode 100644 src/aipass/drone/__init__.py delete mode 100644 src/aipass/drone/handlers/__init__.py delete mode 100644 src/aipass/drone/handlers/dispatch.py delete mode 100644 src/aipass/drone/modules/__init__.py delete mode 100644 src/aipass/drone/modules/resolver.py delete mode 100644 src/aipass/drone/modules/router.py delete mode 100644 src/aipass/drone/plugins/__init__.py delete mode 100644 src/aipass/flow/__init__.py delete mode 100644 src/aipass/flow/handlers/__init__.py delete mode 100644 src/aipass/flow/modules/__init__.py delete mode 100644 src/aipass/flow/plugins/__init__.py delete mode 100644 src/aipass/mail/__init__.py delete mode 100644 src/aipass/mail/handlers/__init__.py delete mode 100644 src/aipass/mail/modules/__init__.py delete mode 100644 src/aipass/mail/plugins/__init__.py delete mode 100644 src/aipass/seedgo/__init__.py delete mode 100644 src/aipass/seedgo/handlers/__init__.py delete mode 100644 src/aipass/seedgo/modules/__init__.py delete mode 100644 src/aipass/seedgo/plugins/__init__.py delete mode 100644 src/aipass/skills/__init__.py rename src/aipass/{templates/agents/branch_template/.agents => spawn/templates/agent.template/.agent}/.backup_ignore.json (100%) rename src/aipass/{templates/agents/branch_template/.agents => spawn/templates/agent.template/.agent}/.migrations.json (100%) rename src/aipass/{templates/agents/branch_template/.agents => spawn/templates/agent.template/.agent}/.registry_ignore.json (100%) rename src/aipass/{templates/agents/branch_template/.agents => spawn/templates/agent.template/.agent}/.template_registry.json (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/.gitignore (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/.trinity/local.json (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/.trinity/observations.json (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/.trinity/passport.json (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/DASHBOARD.local.json (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/README.md (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/apps/__init__.py (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/apps/branch.py (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/apps/handlers/__init__.py (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/apps/modules/__init__.py (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/apps/plugins/__init__.py (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/artifacts/artifact_7_cortex_birth_certificate.json (100%) rename src/aipass/{templates/agents/branch_template/.backup => spawn/templates/agent.template/docs}/.gitkeep (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/pytest.ini (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/tests/__init__.py (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/tests/conftest.py (100%) rename src/aipass/{templates/agents/branch_template => spawn/templates/agent.template}/tools/verify_branch.py (100%) rename src/aipass/{templates/agents/branch_template/.chroma => spawn/templates/agent.template/{{BRANCH}}_json}/.gitkeep (100%) create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.agent/.backup_ignore.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.agent/.migrations.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.agent/.registry_ignore.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.agent/.template_registry.json rename src/aipass/{templates/agents/branch_template/.seedgo/.gitkeep => spawn/templates/agent_mock_branch/.ai_mail.local/archive.json} (100%) rename src/aipass/{templates/agents/branch_template/docs/.gitkeep => spawn/templates/agent_mock_branch/.ai_mail.local/inbox.json} (100%) rename src/aipass/{templates/agents/branch_template/logs/.gitkeep => spawn/templates/agent_mock_branch/.ai_mail.local/sent.json} (100%) rename src/aipass/{templates/agents/branch_template/{{BRANCH}}_json/.gitkeep => spawn/templates/agent_mock_branch/.backup/backup_manifest.json} (100%) rename src/aipass/{templates/flow/.gitkeep => spawn/templates/agent_mock_branch/.backup/latest_snapshot.json} (100%) create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/data_level0.bin create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/header.bin create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/length.bin rename src/aipass/{templates/memory/.gitkeep => spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/link_lists.bin} (100%) create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.chroma/chroma.sqlite3 rename src/aipass/{templates/system/.gitkeep => spawn/templates/agent_mock_branch/.gitignore} (100%) rename tests/__init__.py => src/aipass/spawn/templates/agent_mock_branch/.standards/audit_history.json (100%) create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.standards/bypass.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.standards/last_audit.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.trinity/local.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.trinity/observations.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/.trinity/passport.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/DASHBOARD.local.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/README.md create mode 100644 src/aipass/spawn/templates/agent_mock_branch/agent_mock_branch.json/.gitkeep create mode 100644 src/aipass/spawn/templates/agent_mock_branch/agent_mock_branch.json/AGENT_MOCK_BRANCH.id.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/agent_mock_branch.json/AGENT_MOCK_BRANCH.local.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/agent_mock_branch.json/AGENT_MOCK_BRANCH.observations.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/__init__.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/branch.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/handlers/__init__.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/handlers/cache.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/handlers/formatter.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/handlers/processor.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/handlers/validator.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/modules/__init__.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/modules/config.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/modules/core.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/modules/help.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/modules/status.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/plugins/__init__.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/plugins/export.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/apps/plugins/webhook.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/artifacts/artifact_1_registration.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/artifacts/artifact_7_cortex_birth_certificate.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/docs/api_reference.md create mode 100644 src/aipass/spawn/templates/agent_mock_branch/docs/architecture.md create mode 100644 src/aipass/spawn/templates/agent_mock_branch/docs/changelog.md create mode 100644 src/aipass/spawn/templates/agent_mock_branch/docs/index.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/dropbox/incoming_data.json rename src/aipass/{templates/agents/branch_template => spawn/templates/agent_mock_branch}/flow.local.md (100%) create mode 100644 src/aipass/spawn/templates/agent_mock_branch/logs/agent_mock_branch.log create mode 100644 src/aipass/spawn/templates/agent_mock_branch/logs/error.log create mode 100644 src/aipass/spawn/templates/agent_mock_branch/pytest.ini create mode 100644 src/aipass/spawn/templates/agent_mock_branch/templates/default_config.json create mode 100644 src/aipass/spawn/templates/agent_mock_branch/templates/welcome_message.md create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tests/__init__.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tests/conftest.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tests/test_core.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tests/test_integration.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tests/test_processor.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tests/test_validator.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tools/debug.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tools/migrate.py create mode 100644 src/aipass/spawn/templates/agent_mock_branch/tools/verify_branch.py delete mode 100644 src/aipass/templates/__init__.py delete mode 100644 src/aipass/trigger/__init__.py delete mode 100644 src/aipass/trigger/handlers/__init__.py delete mode 100644 src/aipass/trigger/modules/__init__.py delete mode 100644 src/aipass/trigger/plugins/__init__.py delete mode 100644 tests/test_drone_cli.py delete mode 100644 tests/test_drone_compliance.py delete mode 100644 tests/test_drone_core.py delete mode 100644 tests/test_drone_integration.py delete mode 100644 tests/test_drone_modules.py delete mode 100644 tests/test_drone_phase2.py delete mode 100644 tests/test_file_module_size.py delete mode 100644 tests/test_paths.py delete mode 100644 tests/test_seedgo_cli.py delete mode 100644 tests/test_seedgo_core.py delete mode 100644 tests/test_seedgo_plugins.py delete mode 100644 tests/test_silent_failure_detection.py delete mode 100644 tests/test_version.py diff --git a/.coverage b/.coverage deleted file mode 100644 index accd56473480f6d0f15f262a26393cc8d00e3c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 zcmeI)PiP!f90%|>Gn;HDf0&jMmJmwbMU!CuboHRMv}x2JX$$>h@gj6PyZe%i-JRLa z%;wJ_*li0%QM`$W6fYuzUKJ5~(W4-G5KqNpK`I52g00lwZ~kO=+iXa@l*I3_f9B77 zZ{GX7e>*$LzINuM6Dm3H`BgiV&xyT4)5I|;g%Bn^`{|i3Sz5`Y8}zQVtan;9#pKf4 z{nqQEulqe=o$o(oP4s=-|8(z9eO2?F-WyrlEYSfh5P$##An^YdXq@TG<^~6~D{G-$ ztfXgTN#;(5Alg;hluU%JBnQXsAkKVS@(2izN=H@A(lINE> z_eI}!ON%NPm-c!IOCIHOC5%h!d)2AXlNHB}is=SU=ylvRe8e#jx$=i5MFC( zD6I=zpbK%#g^=gePhhoGh4!uq> zJH-vXq_A7An+@u+S>CqlOv$-M<5+dqxl~u{l|L?T61fknMyHipF5iLl7N)cC)(OLvy=x}ta!!twidOR zKv4&wu^_dA-}%b(-`c| z=7xr}D`wP;lG;k%vTaQ$t;r3B(ezMN*+Jb;2a?SO$uvfDluY|ba)gRAk?qdS40S3_ z60VR>R`xWqnQU%gKx@Q3g2yF(cC{6P_cXh}BNM^avtP5rMfrH%c{gQzq^mo3c%W0p zISYk6zjj}JLyxk2eK69m(xA^zqbfWclAaH0}bOIUW;qh5%x|v3>%4sYtjYN4$Cl?;(&rzpK`xmWLtF~KC<}03t<5X$v z=g!IJi3bsiC`YJM2Gm6#Ni$6}Im#nen*L;sOgPo5U5>juS4vBY%Zuu<i*0LSQlCS6>&81@_#%9fcYpamwSH4Q#!yn}u!&)}?%rjb}o^-}|oGAn} zsaNeZ+sUTh)<_;X*laJSXuzdUJFV@6?OHf^Gd=?kZgCA3V}&$S@>!>6j4$vt>%O1| z76?E90uX=z1Rwwb2tWV=5P$##cAtQu=~|Yr|8?s(Vf{fbSReoa2tWV=5P$##AOHaf zKmY;|*pUK#x^cit|H9+oUd$dgRjw~QD4FL#100Izz z00bZa0SG_<0uX?}x-9f={|{{!0uX=z1Rwwb z2tWV=5P$##Ah4?i4Eno)e!l;&Sq}s~us{F;5P$##AOHafKmY;|fB*y_unPqYqu-4G z|9?$bzgS;bYrC+JC=vu9009U<00Izz00bZa0SG|gNefIE8Phzki_6Qp5I=nL>AOcR z-dmv6Uyt1XK!{Hs=9gc+|Gv2Uk+m}Jn&RlFp3%&+x-M#sX-$X+x_<1(Z^JJ?AFiGF z`saI@j1aZYx-yq<{l0Hh67U;Q%>|Ns9TVcoI* zwEk`jiwy`s00Izz00bZa0SG_<0uX=z1a_i87k%BJ8Qt{VfTrtR^ky1-|6lCgiG@L) zApijgKmY;|fB*y_009U<00I!$ssP{r$MyeKwGa*h5P$##AOHafKmY;|fB*y_urmd4 f|9@xJ8*&W+2tWV=5P$##AOHafKmY;|*p9%zx)0a} diff --git a/.seedgo/config.json b/.seedgo/config.json deleted file mode 100644 index f66c994f..00000000 --- a/.seedgo/config.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "version": "1.0.0", - "profile": null, - "plugins": { - "enabled": [ - "no-bare-except", - "type-hints-required", - "docstring-coverage", - "function-length", - "file-structure" - ], - "disabled": [], - "config": { - "function-length": { - "max_lines": 50 - }, - "file-structure": { - "allowed_root_files": [ - "setup.py", - "conftest.py", - "manage.py" - ] - } - } - }, - "scoring": { - "threshold": 75, - "error_weight": 1.0, - "warning_weight": 0.5, - "info_weight": 0.0 - }, - "paths": { - "include": [ - "src/seedgo/" - ], - "exclude": [ - "tests/", - "*.generated.py" - ] - }, - "overrides": [] -} diff --git a/BRANCH_REGISTRY.json b/BRANCH_REGISTRY.json new file mode 100644 index 00000000..c8617201 --- /dev/null +++ b/BRANCH_REGISTRY.json @@ -0,0 +1,341 @@ +{ + "metadata": { + "version": "1.0.0", + "last_updated": "2026-02-27", + "total_branches": 30 + }, + "branches": [ + { + "name": ".VSCODE", + "alias": "", + "path": "/home/aipass/.vscode", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@.vscode", + "status": "active", + "created": "2025-11-22", + "last_active": "2025-11-22" + }, + { + "name": "AI_MAIL", + "alias": "", + "path": "/home/aipass/aipass_core/ai_mail", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@ai_mail", + "status": "active", + "created": "2025-11-30", + "last_active": "2025-11-30" + }, + { + "name": "API", + "alias": "Gateway", + "path": "/home/aipass/aipass_core/api", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@api", + "status": "active", + "created": "2025-10-30", + "last_active": "2025-10-30" + }, + { + "name": "ASSISTANT", + "alias": "Relay", + "path": "/home/aipass/aipass_os/dev_central/assistant", + "profile": "AIPass Workshop", + "description": "DEV_CENTRAL Workflow Coordinator - task dispatch, monitoring, aggregation", + "email": "@assistant", + "status": "active", + "created": "2026-01-21", + "last_active": "2026-01-21" + }, + { + "name": "BACKUP_SYSTEM", + "alias": "Vault", + "path": "/home/aipass/aipass_core/backup_system", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@backup_system", + "status": "active", + "created": "2025-10-30", + "last_active": "2025-10-30" + }, + { + "name": "CLI", + "alias": "Vox", + "path": "/home/aipass/aipass_core/cli", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@cli", + "status": "active", + "created": "2025-11-12", + "last_active": "2025-11-12" + }, + { + "name": "CORTEX", + "alias": "Cortex", + "path": "/home/aipass/aipass_core/cortex", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@cortex", + "status": "active", + "created": "2025-11-09", + "last_active": "2025-11-09" + }, + { + "name": "DEVPULSE", + "alias": "Pulse", + "path": "/home/aipass/aipass_os/dev_central/devpulse", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@devpulse", + "status": "active", + "created": "2025-11-30", + "last_active": "2025-11-30" + }, + { + "name": "DEV_CENTRAL", + "alias": "DEV_CENTRAL", + "path": "/home/aipass/aipass_os/dev_central", + "profile": "Human Operator", + "description": "Patrick workspace - planning and coordination", + "email": "@dev_central", + "status": "active", + "created": "2025-11-30", + "last_active": "2025-11-30" + }, + { + "name": "DRONE", + "alias": "Hermes", + "path": "/home/aipass/aipass_core/drone", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@drone", + "status": "active", + "created": "2025-10-30", + "last_active": "2025-10-30" + }, + { + "name": "FLOW", + "alias": "Flow", + "path": "/home/aipass/aipass_core/flow", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@flow", + "status": "active", + "created": "2025-10-30", + "last_active": "2025-10-30" + }, + { + "name": "FORGE", + "alias": "", + "path": "/home/aipass/forge", + "profile": "AIPass Workshop", + "description": "Root-level fast responder and Telegram bot factory — forges new bots", + "email": "@forge", + "status": "active", + "created": "2026-02-26", + "last_active": "2026-02-26" + }, + { + "name": "GIT_MANAGER", + "alias": "Chronicle", + "path": "/home/aipass/aipass_os/dev_central/git_manager", + "profile": "AIPass Workshop", + "description": "Git repository management - PR reviews, commit standards, hooks, repo health", + "email": "@git_manager", + "status": "active", + "created": "2025-11-13", + "last_active": "2026-02-25" + }, + { + "name": "GROWTH", + "alias": "", + "path": "/home/aipass/aipass_business/departments/growth", + "profile": "Business", + "description": "Growth Department - content strategy and audience growth", + "email": "@growth", + "status": "active", + "created": "2026-02-18", + "last_active": "2026-02-18" + }, + { + "name": "MCP_SERVERS", + "alias": "Loom", + "path": "/home/aipass/mcp_servers", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@mcp_servers", + "status": "active", + "created": "2025-11-01", + "last_active": "2025-11-01" + }, + { + "name": "MEMORY_BANK", + "alias": "Mnemo", + "path": "/home/aipass/MEMORY_BANK", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@memory_bank", + "status": "active", + "created": "2025-11-11", + "last_active": "2025-11-11" + }, + { + "name": "NEXUS", + "alias": "Nexus", + "path": "/home/aipass/Nexus", + "profile": "AI Assistant", + "description": "AIPass CoFounder - Conversational AI with presence, memory, and Claude Code tool access via GPT-4.1", + "email": "@nexus", + "status": "active", + "created": "2026-02-08", + "last_active": "2026-02-08" + }, + { + "name": "PATRICK_PRIVATE", + "path": "/home/aipass/patrick_private", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@patrick_private", + "status": "active", + "created": "2026-02-27", + "last_active": "2026-02-27" + }, + { + "name": "PERMISSIONS", + "alias": "Warden", + "path": "/home/aipass/aipass_os/dev_central/permissions", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@permissions", + "status": "active", + "created": "2025-11-13", + "last_active": "2025-11-13" + }, + { + "name": "PRAX", + "alias": "", + "path": "/home/aipass/aipass_core/prax", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@prax", + "status": "active", + "created": "2025-10-30", + "last_active": "2025-10-30" + }, + { + "name": "PROJECTS", + "alias": "", + "path": "/home/aipass/projects", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@projects", + "status": "active", + "created": "2025-11-23", + "last_active": "2025-11-23" + }, + { + "name": "SEED", + "alias": "Seed", + "path": "/home/aipass/seed", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@seed", + "status": "active", + "created": "2025-11-12", + "last_active": "2025-11-12" + }, + { + "name": "SPEAKEASY", + "alias": "Speakeasy", + "path": "/home/aipass/speakeasy", + "profile": "AIPass Workshop", + "description": "Voice-to-text system - local speech recognition using Whisper AI", + "email": "@speakeasy", + "status": "active", + "created": "2026-02-11", + "last_active": "2026-02-11" + }, + { + "name": "TEAM_1", + "alias": "", + "path": "/home/aipass/aipass_business/teams/team_1", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@team_1", + "status": "active", + "created": "2026-02-08", + "last_active": "2026-02-08" + }, + { + "name": "TEAM_2", + "alias": "", + "path": "/home/aipass/aipass_business/teams/team_2", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@team_2", + "status": "active", + "created": "2026-02-08", + "last_active": "2026-02-08" + }, + { + "name": "TEAM_3", + "alias": "", + "path": "/home/aipass/aipass_business/teams/team_3", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@team_3", + "status": "active", + "created": "2026-02-08", + "last_active": "2026-02-08" + }, + { + "name": "TEST", + "alias": "Probe", + "path": "/home/aipass/aipass_os/dev_central/test", + "profile": "AIPass Workshop", + "description": "System Testing & Integration - integration testing, Telegram debugging, cross-branch module testing", + "email": "@test", + "status": "active", + "created": "2026-02-15", + "last_active": "2026-02-15" + }, + { + "name": "THE_COMMONS", + "alias": "The Commons", + "path": "/home/aipass/The_Commons", + "profile": "Social Network", + "description": "Community hub - where branches gather, discuss, share ideas beyond task work", + "email": "@the_commons", + "aliases": [ + "@commons" + ], + "status": "active", + "created": "2026-02-06", + "last_active": "2026-02-06" + }, + { + "name": "TRIGGER", + "alias": "Reflex", + "path": "/home/aipass/aipass_core/trigger", + "profile": "AIPass Workshop", + "description": "New branch - purpose TBD", + "email": "@trigger", + "status": "active", + "created": "2025-11-30", + "last_active": "2025-11-30" + }, + { + "name": "VERA", + "alias": "", + "path": "/home/aipass/aipass_business/vera", + "profile": "CEO", + "description": "CEO of AIPass Business — Public Voice, Decision Maker, Team Orchestrator. Named from Latin veritas (truth) by unanimous team vote.", + "email": "@vera", + "status": "active", + "created": "2026-02-17", + "last_active": "2026-02-17" + } + ] +} \ No newline at end of file diff --git a/src/aipass/api/__init__.py b/src/aipass/api/__init__.py deleted file mode 100644 index fc41a58c..00000000 --- a/src/aipass/api/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.api — LLM access, model routing, and agent spawning. - -Unified interface to language models. Handles API keys, model selection, -rate limiting, and spawning agent processes. -""" diff --git a/src/aipass/api/handlers/__init__.py b/src/aipass/api/handlers/__init__.py deleted file mode 100644 index 88f90a33..00000000 --- a/src/aipass/api/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""api.handlers — API client implementation and rate limiting.""" diff --git a/src/aipass/api/modules/__init__.py b/src/aipass/api/modules/__init__.py deleted file mode 100644 index 2e16a73b..00000000 --- a/src/aipass/api/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""api.modules — Model routing and client logic.""" diff --git a/src/aipass/api/plugins/__init__.py b/src/aipass/api/plugins/__init__.py deleted file mode 100644 index 8216b2ff..00000000 --- a/src/aipass/api/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""api.plugins — Extensible plugin interface.""" diff --git a/src/aipass/assistant/__init__.py b/src/aipass/assistant/__init__.py deleted file mode 100644 index b4f2270f..00000000 --- a/src/aipass/assistant/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.assistant — Scheduling, plugins, and external integrations. - -Plugin architecture connecting AIPass to the outside world: -scheduling engine + discoverable plugin interface. -""" diff --git a/src/aipass/assistant/handlers/__init__.py b/src/aipass/assistant/handlers/__init__.py deleted file mode 100644 index 329b5fbc..00000000 --- a/src/aipass/assistant/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""assistant.handlers — Scheduling and integration implementation.""" diff --git a/src/aipass/assistant/modules/__init__.py b/src/aipass/assistant/modules/__init__.py deleted file mode 100644 index 0ee9c410..00000000 --- a/src/aipass/assistant/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""assistant.modules — Scheduling engine and plugin orchestration.""" diff --git a/src/aipass/assistant/modules/scheduler.py b/src/aipass/assistant/modules/scheduler.py deleted file mode 100644 index 628d1b7e..00000000 --- a/src/aipass/assistant/modules/scheduler.py +++ /dev/null @@ -1 +0,0 @@ -"""Scheduling engine — manages timed actions, intervals, and due checks.""" diff --git a/src/aipass/assistant/plugins/__init__.py b/src/aipass/assistant/plugins/__init__.py deleted file mode 100644 index 976010c5..00000000 --- a/src/aipass/assistant/plugins/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""assistant.plugins — External integration plugins (auto-discovered). - -Each plugin connects AIPass to an external service. -User-swappable, independently installable. -""" diff --git a/src/aipass/assistant/plugins/calendar.py b/src/aipass/assistant/plugins/calendar.py deleted file mode 100644 index c74b52ec..00000000 --- a/src/aipass/assistant/plugins/calendar.py +++ /dev/null @@ -1 +0,0 @@ -"""Calendar plugin — Google Calendar integration.""" diff --git a/src/aipass/assistant/plugins/gmail.py b/src/aipass/assistant/plugins/gmail.py deleted file mode 100644 index 5020008e..00000000 --- a/src/aipass/assistant/plugins/gmail.py +++ /dev/null @@ -1 +0,0 @@ -"""Gmail plugin — email integration for external notifications.""" diff --git a/src/aipass/assistant/plugins/telegram.py b/src/aipass/assistant/plugins/telegram.py deleted file mode 100644 index 2d2a0258..00000000 --- a/src/aipass/assistant/plugins/telegram.py +++ /dev/null @@ -1 +0,0 @@ -"""Telegram plugin — bridge between AIPass and Telegram bots.""" diff --git a/src/aipass/citizenship/__init__.py b/src/aipass/citizenship/__init__.py deleted file mode 100644 index 55f7d115..00000000 --- a/src/aipass/citizenship/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -"""aipass.memory — Unified memory system. - -Three sub-modules: -- trinity: Memory files (wraps trinity-pattern pip package) -- agents: Agent creation, registry, scaffolding (powers aipass init) -- bank: Vector search on rolled-over archives (ChromaDB) -""" diff --git a/src/aipass/citizenship/handlers/__init__.py b/src/aipass/citizenship/handlers/__init__.py deleted file mode 100644 index 746e8fef..00000000 --- a/src/aipass/citizenship/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""memory.handlers — Archive management and storage implementation.""" diff --git a/src/aipass/citizenship/modules/__init__.py b/src/aipass/citizenship/modules/__init__.py deleted file mode 100644 index b3971c75..00000000 --- a/src/aipass/citizenship/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""memory.modules — Trinity files, agent lifecycle, and vector search.""" diff --git a/src/aipass/citizenship/modules/agents.py b/src/aipass/citizenship/modules/agents.py deleted file mode 100644 index d34c75f3..00000000 --- a/src/aipass/citizenship/modules/agents.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Agent creation, registry, and scaffolding. - -Powers `aipass init` (builds all citizens on first run) and -`drone @memory create agent "X"` (adds new branches later). - -Creates: passport.json, flow.local.md, birth certificate, registry entry. -""" diff --git a/src/aipass/citizenship/modules/bank.py b/src/aipass/citizenship/modules/bank.py deleted file mode 100644 index 07dae5cb..00000000 --- a/src/aipass/citizenship/modules/bank.py +++ /dev/null @@ -1,5 +0,0 @@ -"""Vector search on rolled-over archives. - -ChromaDB-backed semantic search across archived memory files, -closed plans, and historical session data. -""" diff --git a/src/aipass/citizenship/modules/trinity.py b/src/aipass/citizenship/modules/trinity.py deleted file mode 100644 index 26cdaae5..00000000 --- a/src/aipass/citizenship/modules/trinity.py +++ /dev/null @@ -1,5 +0,0 @@ -"""Memory file management — wraps and extends trinity-pattern package. - -Handles passport.json, local.json, observations.json per branch. -FIFO rollover to archive when files exceed limits. -""" diff --git a/src/aipass/citizenship/plugins/__init__.py b/src/aipass/citizenship/plugins/__init__.py deleted file mode 100644 index 92cab191..00000000 --- a/src/aipass/citizenship/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""memory.plugins — Extensible plugin interface.""" diff --git a/src/aipass/devpulse/__init__.py b/src/aipass/devpulse/__init__.py deleted file mode 100644 index 7860b35f..00000000 --- a/src/aipass/devpulse/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.devpulse — User orchestrator and dashboard. - -Home base for users: system status, project config, dashboard. -The entry point for understanding what's happening across the ecosystem. -""" diff --git a/src/aipass/devpulse/handlers/__init__.py b/src/aipass/devpulse/handlers/__init__.py deleted file mode 100644 index 45d0d5f0..00000000 --- a/src/aipass/devpulse/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""devpulse.handlers — Status aggregation and config management.""" diff --git a/src/aipass/devpulse/modules/__init__.py b/src/aipass/devpulse/modules/__init__.py deleted file mode 100644 index 4dcff730..00000000 --- a/src/aipass/devpulse/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""devpulse.modules — Dashboard and status logic.""" diff --git a/src/aipass/devpulse/plugins/__init__.py b/src/aipass/devpulse/plugins/__init__.py deleted file mode 100644 index 977718ef..00000000 --- a/src/aipass/devpulse/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""devpulse.plugins — Extensible plugin interface.""" diff --git a/src/aipass/drone/__init__.py b/src/aipass/drone/__init__.py deleted file mode 100644 index b126177d..00000000 --- a/src/aipass/drone/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.drone — Command routing, @resolution, module discovery. - -The backbone of AIPass. Routes `drone @module command` to the correct -module, resolves @ targets to paths, discovers installed modules. -""" diff --git a/src/aipass/drone/handlers/__init__.py b/src/aipass/drone/handlers/__init__.py deleted file mode 100644 index f7fc1e88..00000000 --- a/src/aipass/drone/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""drone.handlers — Implementation details for routing and dispatch.""" diff --git a/src/aipass/drone/handlers/dispatch.py b/src/aipass/drone/handlers/dispatch.py deleted file mode 100644 index 7d1454ed..00000000 --- a/src/aipass/drone/handlers/dispatch.py +++ /dev/null @@ -1 +0,0 @@ -"""Dispatch handler — executes resolved commands against target modules.""" diff --git a/src/aipass/drone/modules/__init__.py b/src/aipass/drone/modules/__init__.py deleted file mode 100644 index 271e8f0c..00000000 --- a/src/aipass/drone/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""drone.modules — Business logic for command routing and resolution.""" diff --git a/src/aipass/drone/modules/resolver.py b/src/aipass/drone/modules/resolver.py deleted file mode 100644 index 0ee93172..00000000 --- a/src/aipass/drone/modules/resolver.py +++ /dev/null @@ -1 +0,0 @@ -"""@ resolver — maps @targets to module paths.""" diff --git a/src/aipass/drone/modules/router.py b/src/aipass/drone/modules/router.py deleted file mode 100644 index c47cc30a..00000000 --- a/src/aipass/drone/modules/router.py +++ /dev/null @@ -1 +0,0 @@ -"""Command router — parses `drone @module command` and dispatches.""" diff --git a/src/aipass/drone/plugins/__init__.py b/src/aipass/drone/plugins/__init__.py deleted file mode 100644 index b039af65..00000000 --- a/src/aipass/drone/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""drone.plugins — Extensible plugin interface.""" diff --git a/src/aipass/flow/__init__.py b/src/aipass/flow/__init__.py deleted file mode 100644 index a388d989..00000000 --- a/src/aipass/flow/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.flow — Planning, workflow management, and tracking. - -Owns ALL planning: DPLANs (design), FPLANs (execution), MPLANs (master). -Each branch gets flow.local.md for issues, todos, and scratchpad. -""" diff --git a/src/aipass/flow/handlers/__init__.py b/src/aipass/flow/handlers/__init__.py deleted file mode 100644 index fe7ea7ed..00000000 --- a/src/aipass/flow/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""flow.handlers — Plan file management and template rendering.""" diff --git a/src/aipass/flow/modules/__init__.py b/src/aipass/flow/modules/__init__.py deleted file mode 100644 index 53c3a923..00000000 --- a/src/aipass/flow/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""flow.modules — Plan lifecycle and tracking logic.""" diff --git a/src/aipass/flow/plugins/__init__.py b/src/aipass/flow/plugins/__init__.py deleted file mode 100644 index 8305dadc..00000000 --- a/src/aipass/flow/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""flow.plugins — Extensible plugin interface.""" diff --git a/src/aipass/mail/__init__.py b/src/aipass/mail/__init__.py deleted file mode 100644 index da9671ab..00000000 --- a/src/aipass/mail/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.mail — Agent-to-agent messaging and dispatch. - -Handles inter-branch communication: send, receive, inbox management, -delivery routing, and dispatch flags for autonomous execution. -""" diff --git a/src/aipass/mail/handlers/__init__.py b/src/aipass/mail/handlers/__init__.py deleted file mode 100644 index dad9d246..00000000 --- a/src/aipass/mail/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""mail.handlers — Delivery and inbox implementation.""" diff --git a/src/aipass/mail/modules/__init__.py b/src/aipass/mail/modules/__init__.py deleted file mode 100644 index 94d87daa..00000000 --- a/src/aipass/mail/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""mail.modules — Messaging business logic.""" diff --git a/src/aipass/mail/plugins/__init__.py b/src/aipass/mail/plugins/__init__.py deleted file mode 100644 index a91b1f76..00000000 --- a/src/aipass/mail/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""mail.plugins — Extensible plugin interface.""" diff --git a/src/aipass/seedgo/__init__.py b/src/aipass/seedgo/__init__.py deleted file mode 100644 index 9599b65b..00000000 --- a/src/aipass/seedgo/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.seedgo — Code standards and quality checks. - -Public standards framework. Plugin-based architecture for automated -code quality auditing across the project. -""" diff --git a/src/aipass/seedgo/handlers/__init__.py b/src/aipass/seedgo/handlers/__init__.py deleted file mode 100644 index f81eb9eb..00000000 --- a/src/aipass/seedgo/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""seedgo.handlers — Check execution and reporting.""" diff --git a/src/aipass/seedgo/modules/__init__.py b/src/aipass/seedgo/modules/__init__.py deleted file mode 100644 index 7c8a24a5..00000000 --- a/src/aipass/seedgo/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""seedgo.modules — Standards runner and audit logic.""" diff --git a/src/aipass/seedgo/plugins/__init__.py b/src/aipass/seedgo/plugins/__init__.py deleted file mode 100644 index a32e4c22..00000000 --- a/src/aipass/seedgo/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""seedgo.plugins — Quality check plugins (auto-discovered).""" diff --git a/src/aipass/skills/__init__.py b/src/aipass/skills/__init__.py deleted file mode 100644 index c384a09e..00000000 --- a/src/aipass/skills/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -"""aipass.skills — User-built add-ons that compose infrastructure. - -Skills are self-contained folders that import from AIPass infrastructure -modules (drone, api, prax, mail, etc.) to create new capabilities. - -Infrastructure = the plumbing (modules/handlers/plugins inside each module). -Skills = what users build ON TOP of the plumbing. - -Each skill is a directory with a SKILL.md describing what it does -and Python files that import what they need from aipass.*. -""" diff --git a/src/aipass/templates/agents/branch_template/.agents/.backup_ignore.json b/src/aipass/spawn/templates/agent.template/.agent/.backup_ignore.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.agents/.backup_ignore.json rename to src/aipass/spawn/templates/agent.template/.agent/.backup_ignore.json diff --git a/src/aipass/templates/agents/branch_template/.agents/.migrations.json b/src/aipass/spawn/templates/agent.template/.agent/.migrations.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.agents/.migrations.json rename to src/aipass/spawn/templates/agent.template/.agent/.migrations.json diff --git a/src/aipass/templates/agents/branch_template/.agents/.registry_ignore.json b/src/aipass/spawn/templates/agent.template/.agent/.registry_ignore.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.agents/.registry_ignore.json rename to src/aipass/spawn/templates/agent.template/.agent/.registry_ignore.json diff --git a/src/aipass/templates/agents/branch_template/.agents/.template_registry.json b/src/aipass/spawn/templates/agent.template/.agent/.template_registry.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.agents/.template_registry.json rename to src/aipass/spawn/templates/agent.template/.agent/.template_registry.json diff --git a/src/aipass/templates/agents/branch_template/.gitignore b/src/aipass/spawn/templates/agent.template/.gitignore similarity index 100% rename from src/aipass/templates/agents/branch_template/.gitignore rename to src/aipass/spawn/templates/agent.template/.gitignore diff --git a/src/aipass/templates/agents/branch_template/.trinity/local.json b/src/aipass/spawn/templates/agent.template/.trinity/local.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.trinity/local.json rename to src/aipass/spawn/templates/agent.template/.trinity/local.json diff --git a/src/aipass/templates/agents/branch_template/.trinity/observations.json b/src/aipass/spawn/templates/agent.template/.trinity/observations.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.trinity/observations.json rename to src/aipass/spawn/templates/agent.template/.trinity/observations.json diff --git a/src/aipass/templates/agents/branch_template/.trinity/passport.json b/src/aipass/spawn/templates/agent.template/.trinity/passport.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.trinity/passport.json rename to src/aipass/spawn/templates/agent.template/.trinity/passport.json diff --git a/src/aipass/templates/agents/branch_template/DASHBOARD.local.json b/src/aipass/spawn/templates/agent.template/DASHBOARD.local.json similarity index 100% rename from src/aipass/templates/agents/branch_template/DASHBOARD.local.json rename to src/aipass/spawn/templates/agent.template/DASHBOARD.local.json diff --git a/src/aipass/templates/agents/branch_template/README.md b/src/aipass/spawn/templates/agent.template/README.md similarity index 100% rename from src/aipass/templates/agents/branch_template/README.md rename to src/aipass/spawn/templates/agent.template/README.md diff --git a/src/aipass/templates/agents/branch_template/apps/__init__.py b/src/aipass/spawn/templates/agent.template/apps/__init__.py similarity index 100% rename from src/aipass/templates/agents/branch_template/apps/__init__.py rename to src/aipass/spawn/templates/agent.template/apps/__init__.py diff --git a/src/aipass/templates/agents/branch_template/apps/branch.py b/src/aipass/spawn/templates/agent.template/apps/branch.py similarity index 100% rename from src/aipass/templates/agents/branch_template/apps/branch.py rename to src/aipass/spawn/templates/agent.template/apps/branch.py diff --git a/src/aipass/templates/agents/branch_template/apps/handlers/__init__.py b/src/aipass/spawn/templates/agent.template/apps/handlers/__init__.py similarity index 100% rename from src/aipass/templates/agents/branch_template/apps/handlers/__init__.py rename to src/aipass/spawn/templates/agent.template/apps/handlers/__init__.py diff --git a/src/aipass/templates/agents/branch_template/apps/modules/__init__.py b/src/aipass/spawn/templates/agent.template/apps/modules/__init__.py similarity index 100% rename from src/aipass/templates/agents/branch_template/apps/modules/__init__.py rename to src/aipass/spawn/templates/agent.template/apps/modules/__init__.py diff --git a/src/aipass/templates/agents/branch_template/apps/plugins/__init__.py b/src/aipass/spawn/templates/agent.template/apps/plugins/__init__.py similarity index 100% rename from src/aipass/templates/agents/branch_template/apps/plugins/__init__.py rename to src/aipass/spawn/templates/agent.template/apps/plugins/__init__.py diff --git a/src/aipass/templates/agents/branch_template/artifacts/artifact_7_cortex_birth_certificate.json b/src/aipass/spawn/templates/agent.template/artifacts/artifact_7_cortex_birth_certificate.json similarity index 100% rename from src/aipass/templates/agents/branch_template/artifacts/artifact_7_cortex_birth_certificate.json rename to src/aipass/spawn/templates/agent.template/artifacts/artifact_7_cortex_birth_certificate.json diff --git a/src/aipass/templates/agents/branch_template/.backup/.gitkeep b/src/aipass/spawn/templates/agent.template/docs/.gitkeep similarity index 100% rename from src/aipass/templates/agents/branch_template/.backup/.gitkeep rename to src/aipass/spawn/templates/agent.template/docs/.gitkeep diff --git a/src/aipass/templates/agents/branch_template/pytest.ini b/src/aipass/spawn/templates/agent.template/pytest.ini similarity index 100% rename from src/aipass/templates/agents/branch_template/pytest.ini rename to src/aipass/spawn/templates/agent.template/pytest.ini diff --git a/src/aipass/templates/agents/branch_template/tests/__init__.py b/src/aipass/spawn/templates/agent.template/tests/__init__.py similarity index 100% rename from src/aipass/templates/agents/branch_template/tests/__init__.py rename to src/aipass/spawn/templates/agent.template/tests/__init__.py diff --git a/src/aipass/templates/agents/branch_template/tests/conftest.py b/src/aipass/spawn/templates/agent.template/tests/conftest.py similarity index 100% rename from src/aipass/templates/agents/branch_template/tests/conftest.py rename to src/aipass/spawn/templates/agent.template/tests/conftest.py diff --git a/src/aipass/templates/agents/branch_template/tools/verify_branch.py b/src/aipass/spawn/templates/agent.template/tools/verify_branch.py similarity index 100% rename from src/aipass/templates/agents/branch_template/tools/verify_branch.py rename to src/aipass/spawn/templates/agent.template/tools/verify_branch.py diff --git a/src/aipass/templates/agents/branch_template/.chroma/.gitkeep b/src/aipass/spawn/templates/agent.template/{{BRANCH}}_json/.gitkeep similarity index 100% rename from src/aipass/templates/agents/branch_template/.chroma/.gitkeep rename to src/aipass/spawn/templates/agent.template/{{BRANCH}}_json/.gitkeep diff --git a/src/aipass/spawn/templates/agent_mock_branch/.agent/.backup_ignore.json b/src/aipass/spawn/templates/agent_mock_branch/.agent/.backup_ignore.json new file mode 100644 index 00000000..c6e988fc --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/.agent/.backup_ignore.json @@ -0,0 +1,133 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups", + "last_updated": "2025-11-09" + }, + "ignore_directories": [ + ".backup", + "backups", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "aipass_dev", + "aipass_core", + "aipass_business", + "aipass_help", + "input_x", + "Link to mnt", + "mcp_servers", + "speakeasy", + "sandbox", + "ai_mail.local", + "logs", + "pruned_files", + "crash-logs", + ".aipass", + ".archive", + ".cargo", + ".codex", + ".config", + ".dbus", + ".dotnet", + ".gemini", + ".gnome", + ".gnupg", + ".idlerc", + ".java", + ".local", + ".mozilla", + ".npm", + ".npm-global", + ".nvm", + ".pki", + ".pylint.d", + ".pyenv", + ".serena", + ".ssh", + ".thunderbird", + ".var", + ".vscode-server", + ".wget-hsts", + ".claude-code-docs", + ".claude", + "backup_system", + "Desktop", + "Documents", + "Downloads", + "dropbox", + "Music", + "Pictures", + "Public", + "snap", + "system_logs", + "Templates", + "Videos" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + "*.pyd", + ".DS_Store", + "Thumbs.db", + "*.log", + "*.tmp", + "*.swp", + "*.swo", + "*~", + "*.env", + "*_json", + "dev.local.md", + "notepad.md", + "pytest.ini", + ".bash_history", + ".bash_logout", + ".bashrc", + ".claude.json", + ".claude.json.backup", + ".lesshst", + ".npmrc", + ".profile", + ".python_history", + ".sudo_as_admin_successful", + ".gitattributes", + "BRANCH_REGISTRY.json", + ".branch_meta.json*", + "migrations.json*", + "sandbox.img" + ], + "notes": { + "how_it_works": "Two types of exclusions during backup creation:", + "ignore_directories": { + "description": "Directory names to skip entirely (including all contents)", + "purpose": "Exclude large dependency dirs, caches, and backup dirs themselves", + "examples": [ + ".venv, venv (Python virtual environments - large, regeneratable)", + "node_modules (NPM dependencies - huge, regeneratable)", + "__pycache__, .cache (Python/system caches - regeneratable)", + ".git (Git repository - already versioned)", + ".backup, backups (backup directories - prevent recursion)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns for files to skip", + "purpose": "Exclude temporary files, compiled bytecode, OS cruft", + "examples": [ + "*.pyc, *.pyo (Python compiled bytecode - regeneratable)", + "*.log (Log files - can be large, temporary)", + "*.tmp, *.swp (Temporary/swap files)", + ".DS_Store, Thumbs.db (OS metadata files)" + ] + }, + "customization": "Edit this file in the template to add more patterns. Changes take effect on next branch update.", + "performance": "Ignoring large directories dramatically speeds up backups (seconds vs minutes for branches with node_modules or .venv)" + } +} diff --git a/src/aipass/spawn/templates/agent_mock_branch/.agent/.migrations.json b/src/aipass/spawn/templates/agent_mock_branch/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/spawn/templates/agent_mock_branch/.agent/.registry_ignore.json b/src/aipass/spawn/templates/agent_mock_branch/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/spawn/templates/agent_mock_branch/.agent/.template_registry.json b/src/aipass/spawn/templates/agent_mock_branch/.agent/.template_registry.json new file mode 100644 index 00000000..4930f74a --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/.agent/.template_registry.json @@ -0,0 +1,301 @@ +{ + "metadata": { + "version": "1.0.0", + "last_updated": "2026-02-20", + "description": "Template file tracking registry for ID-based updates" + }, + "files": { + "f001": { + "current_name": "BRANCH.ID.json", + "path": "BRANCH.ID.json", + "content_hash": "e9bc2347d373", + "has_branch_placeholder": false + }, + "f003": { + "current_name": "dev.local.md", + "path": "dev.local.md", + "content_hash": "6c1c5e099790", + "has_branch_placeholder": false + }, + "f035": { + "current_name": ".gitkeep", + "path": "ai_mail.local/.archive/.gitkeep", + "content_hash": "e3b0c44298fc", + "has_branch_placeholder": false + }, + "f008": { + "current_name": "DASHBOARD.local.json", + "path": "DASHBOARD.local.json", + "content_hash": "3f0528b4c5d5", + "has_branch_placeholder": false + }, + "f007": { + "current_name": ".migrations.json", + "path": ".migrations.json", + "content_hash": "4ca241607dc3", + "has_branch_placeholder": false + }, + "f010": { + "current_name": "OBSERVATIONS.json", + "path": "OBSERVATIONS.json", + "content_hash": "58ea8609fbe0", + "has_branch_placeholder": false + }, + "f011": { + "current_name": "requirements.txt", + "path": "requirements.txt", + "content_hash": "66dfffc70d53", + "has_branch_placeholder": false + }, + "f021": { + "current_name": "README.md", + "path": "README.md", + "content_hash": "4e946f67a130", + "has_branch_placeholder": false + }, + "f012": { + "current_name": "LOCAL.json", + "path": "LOCAL.json", + "content_hash": "459dbe18d40a", + "has_branch_placeholder": false + }, + "f006": { + "current_name": "pytest.ini", + "path": "pytest.ini", + "content_hash": "7b39ba7bca40", + "has_branch_placeholder": false + }, + "f022": { + "current_name": "_template.md", + "path": "docs/_template.md", + "content_hash": "79ce97b0e613", + "has_branch_placeholder": false + }, + "f016": { + "current_name": "__init__.py", + "path": "tests/__init__.py", + "content_hash": "1fcd8126d174", + "has_branch_placeholder": false + }, + "f019": { + "current_name": "conftest.py", + "path": "tests/conftest.py", + "content_hash": "2887db109a6b", + "has_branch_placeholder": false + }, + "f004": { + "current_name": "BRANCH.py", + "path": "apps/BRANCH.py", + "content_hash": "44f22cc95232", + "has_branch_placeholder": false + }, + "f009": { + "current_name": "__init__.py", + "path": "apps/__init__.py", + "content_hash": "5c38204be5fc", + "has_branch_placeholder": false + }, + "f013": { + "current_name": "#@comments.txt.removed_from_template", + "path": ".archive/#@comments.txt.removed_from_template", + "content_hash": "651126c1e7a9", + "has_branch_placeholder": false + }, + "f028": { + "current_name": "deleted.json.old_template_format", + "path": ".archive/deleted.json.old_template_format", + "content_hash": "48a3a33dd73a", + "has_branch_placeholder": false + }, + "f002": { + "current_name": "branch_system_prompt.md", + "path": ".aipass/branch_system_prompt.md", + "content_hash": "897c7beb66f5", + "has_branch_placeholder": false + }, + "f026": { + "current_name": "inbox.json", + "path": "ai_mail.local/inbox.json", + "content_hash": "c9702fe2cc21", + "has_branch_placeholder": false + }, + "f027": { + "current_name": "sent.json", + "path": "ai_mail.local/sent.json", + "content_hash": "240132e5a567", + "has_branch_placeholder": false + }, + "f014": { + "current_name": "__init__.py", + "path": "apps/handlers/__init__.py", + "content_hash": "657d98ad4b98", + "has_branch_placeholder": false + }, + "f015": { + "current_name": "__init__.py", + "path": "apps/json_templates/__init__.py", + "content_hash": "330b189c08c7", + "has_branch_placeholder": false + }, + "f020": { + "current_name": "__init__.py", + "path": "apps/plugins/__init__.py", + "content_hash": "39158d26a19c", + "has_branch_placeholder": false + }, + "f023": { + "current_name": "__init__.py", + "path": "apps/modules/__init__.py", + "content_hash": "bc25a8b75e81", + "has_branch_placeholder": false + }, + "f024": { + "current_name": "__init__.py", + "path": "apps/extensions/__init__.py", + "content_hash": "6742ceb64ec1", + "has_branch_placeholder": false + }, + "f032": { + "current_name": "data.json", + "path": "apps/json_templates/default/data.json", + "content_hash": "0531a02be998", + "has_branch_placeholder": false + }, + "f033": { + "current_name": "log.json", + "path": "apps/json_templates/default/log.json", + "content_hash": "37517e5f3dc6", + "has_branch_placeholder": false + }, + "f034": { + "current_name": "config.json", + "path": "apps/json_templates/default/config.json", + "content_hash": "3759a05e171d", + "has_branch_placeholder": false + }, + "f005": { + "current_name": "json_handler.py", + "path": "apps/handlers/json/json_handler.py", + "content_hash": "3449629aff23", + "has_branch_placeholder": false + }, + "f017": { + "current_name": "__init__.py", + "path": "apps/handlers/json/__init__.py", + "content_hash": "ad3629e381ca", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "current_name": "tools", + "path": "tools", + "has_branch_placeholder": false + }, + "d002": { + "current_name": "docs", + "path": "docs", + "has_branch_placeholder": false + }, + "d003": { + "current_name": "tests", + "path": "tests", + "has_branch_placeholder": false + }, + "d004": { + "current_name": "apps", + "path": "apps", + "has_branch_placeholder": false + }, + "d005": { + "current_name": ".archive", + "path": ".archive", + "has_branch_placeholder": false + }, + "d006": { + "current_name": "logs", + "path": "logs", + "has_branch_placeholder": false + }, + "d009": { + "current_name": ".backup", + "path": ".backup", + "has_branch_placeholder": false + }, + "d008": { + "current_name": "{{BRANCH}}_json", + "path": "{{BRANCH}}_json", + "has_branch_placeholder": true + }, + "d010": { + "current_name": "artifacts", + "path": "artifacts", + "has_branch_placeholder": false + }, + "d012": { + "current_name": ".aipass", + "path": ".aipass", + "has_branch_placeholder": false + }, + "d011": { + "current_name": "ai_mail.local", + "path": "ai_mail.local", + "has_branch_placeholder": false + }, + "d007": { + "current_name": "dropbox", + "path": "dropbox", + "has_branch_placeholder": false + }, + "d013": { + "current_name": "handlers", + "path": "apps/handlers", + "has_branch_placeholder": false + }, + "d014": { + "current_name": "json_templates", + "path": "apps/json_templates", + "has_branch_placeholder": false + }, + "d015": { + "current_name": "plugins", + "path": "apps/plugins", + "has_branch_placeholder": false + }, + "d016": { + "current_name": "modules", + "path": "apps/modules", + "has_branch_placeholder": false + }, + "d017": { + "current_name": "extensions", + "path": "apps/extensions", + "has_branch_placeholder": false + }, + "d018": { + "current_name": "sent", + "path": "ai_mail.local/sent", + "has_branch_placeholder": false + }, + "d019": { + "current_name": "deleted", + "path": "ai_mail.local/deleted", + "has_branch_placeholder": false + }, + "d020": { + "current_name": ".archive", + "path": "ai_mail.local/.archive", + "has_branch_placeholder": false + }, + "d027": { + "current_name": "json", + "path": "apps/handlers/json", + "has_branch_placeholder": false + }, + "d024": { + "current_name": "default", + "path": "apps/json_templates/default", + "has_branch_placeholder": false + } + } +} \ No newline at end of file diff --git a/src/aipass/templates/agents/branch_template/.seedgo/.gitkeep b/src/aipass/spawn/templates/agent_mock_branch/.ai_mail.local/archive.json similarity index 100% rename from src/aipass/templates/agents/branch_template/.seedgo/.gitkeep rename to src/aipass/spawn/templates/agent_mock_branch/.ai_mail.local/archive.json diff --git a/src/aipass/templates/agents/branch_template/docs/.gitkeep b/src/aipass/spawn/templates/agent_mock_branch/.ai_mail.local/inbox.json similarity index 100% rename from src/aipass/templates/agents/branch_template/docs/.gitkeep rename to src/aipass/spawn/templates/agent_mock_branch/.ai_mail.local/inbox.json diff --git a/src/aipass/templates/agents/branch_template/logs/.gitkeep b/src/aipass/spawn/templates/agent_mock_branch/.ai_mail.local/sent.json similarity index 100% rename from src/aipass/templates/agents/branch_template/logs/.gitkeep rename to src/aipass/spawn/templates/agent_mock_branch/.ai_mail.local/sent.json diff --git a/src/aipass/templates/agents/branch_template/{{BRANCH}}_json/.gitkeep b/src/aipass/spawn/templates/agent_mock_branch/.backup/backup_manifest.json similarity index 100% rename from src/aipass/templates/agents/branch_template/{{BRANCH}}_json/.gitkeep rename to src/aipass/spawn/templates/agent_mock_branch/.backup/backup_manifest.json diff --git a/src/aipass/templates/flow/.gitkeep b/src/aipass/spawn/templates/agent_mock_branch/.backup/latest_snapshot.json similarity index 100% rename from src/aipass/templates/flow/.gitkeep rename to src/aipass/spawn/templates/agent_mock_branch/.backup/latest_snapshot.json diff --git a/src/aipass/spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/data_level0.bin b/src/aipass/spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/data_level0.bin new file mode 100644 index 0000000000000000000000000000000000000000..5efb1b9f398d64303b911a57992cc0b9721a21dc GIT binary patch literal 167600 zcmeIuF#!Mo0K%a4Pi+kkh(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj ZFkrxd0RsjM7%*VKfB^#r3>Yx*JTQ*V00961 literal 0 HcmV?d00001 diff --git a/src/aipass/spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/header.bin b/src/aipass/spawn/templates/agent_mock_branch/.chroma/3ad2c408-8578-4140-b25a-0e8d5287e95b/header.bin new file mode 100644 index 0000000000000000000000000000000000000000..bb54792626c8e16cb8f8a2b989bd1998268ad65c GIT binary patch literal 100 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%0A;ShFPX?E?wNmf394>cr!OXiPC|Vm&bV z=o~JY%~RKC@t+>OQ~e+wK9S;dwZ+;y2aoX59t9>kx7)`Q#e5!%|vu`PD^d5nHjRN_ANX+p`+MBF>HiwFddC7mJ=knZRFwS2Kd&b>ZKE~`n4v94;8!XZh)OQF4XaY41W%PHyND8ljJI6N);5i z<5-!;OhK|fQ-ZgN*K;P%n9Sb@8}Vd8hMR+B9XZwHrO`2eEgh|?B;Lz6;?;KOxb+w< z{Ip_Jq?S5C7=dYiX0kATR>$R}35roOk5=jh3@U_z=<+xR+iWvxhb8e5Q*wCA(BjTs zj+}HjejmqoaC{%9Zx~L7#EZG?@URo-go^-fbF$#x$T9aFK2plwq!`-Z#)G%Y;>eW; zO^|qTtwHG@f@rZLIa0ALt#)tV1a}s1kSdfa&LH#S7GMPIrOh1Q!$->J+;!494Cgk0 zCE2h`DRgqo0Z3ma9pnWG&KHf2wZhmT!X4%i#0iaNF0NXNJOb1Ip>4PaK0W^bJ4-pIgTD;NV-S1rR=ss4I=zw$R}Rd^kqbI*00^@j zv%>2sl^k2AEGd&zpC1e3 zgi9PljgsvnE{qsFzBs+Ks|#qko)aeEpwneXPw~302>ZbqP)@Lqzu1$?(av@j^ZAqnmweV`mi0G(95S%zDP=0V2C%8owwDrrp%h*rG3 zLf&zx0vJ#`To~Y61}rw0vM##w7~Fx%pvZ&_J&xqaa;v+*y_@s-opHjU4qiWA31L0} zCs#vO-;`_^ig2F_5s0<|U){$!%_EKDOSxz%_JYzSb)yS4aob}X-BAE;6q{Z{Mx_kX zD^jT#SuBA7JJ-=Wx&Q|NvM)JYTDwoG0d$sN9G3G5a@_EmG^By0)>IBW1)g@5v0z6 zschgQ4_=VAx?O}>;qJPl?na$KUZh}o(VXt+{n)6Dg1Qs(+3SuBp9h%WhX=Y13U$tu z96PjcnY>K4HF93BJiJHz(rPJ`i*v^>Rhs1iX+4*qY>t1s5l~;^nPUjsz^7 z+ksDzjsrj|N6sJEzmy|yK6HLDkd!?71f>A9o=E6HHgkmWwKUA|JpqDU$OO)|L+Jvs z3aEA|Xigt_{H0@2U#T-pMAE9Cg=MrGE@7y`NiMB$2Gnt9Ksn&FwcfN=KasqFscnkz zPy%!`Mod8kDy}|!E#~=@3upuGQ|MJeLdA}Kbw{d>mPw13FG? z;abQgBv>{TW=mC#bYo`1_L@y)yJb_m6e^vlZIBW+bkX^uguT_9N>?aXSoOAdFDh z2GT?&=Nb~L+^3dBb@t{)?y0KXo4hu9Dbq-Cv$#ic&|Bq8t^&y;Bj z-!4T;;b3W?GK(hCmV;W{dB6>mpg^fdO1PSO(s3G;%6j-}k&;b;$ECwzik2H&>ZM)~ z2(+*g{$0>33PZ~@eXyUTX-e0hFUdSaVRf8|;+BXyS{&rkQvw{tbA)HW~A} z$rLS>N!e2DX1YJTKITUENpQKQa0`tYC^a4io#-*eRY?}JT(-#w9ufRcxRc%puRueL2B0AAclVPUDq6}_%JGh*-~=(k;77{Km3V0-UKHoZ%NHG{xekSC zT&1rWkgXncu7Y)r=LgY~;l-S;-${B~ymc4GeF&~_J@_8ROvNZmmF#9t2U8E+w4T#J z^oYAa16-sPUOtq<=?3~x!EiaJgOw+)!AlRoHOSEtG{_h5w(vQ`9z~GRP zti!?tz3y-vr$g>eJg`aurkpc1q7LvB&A@$jBT;OCO-bW)wAV4XcS>uy5ZZtNO7b8t zfao-t^wL2wglVKxLkK726Cqrmi9aet8R%a`XhfJH)DUKf3dL7wSg1iCM(0CAL-k>i z;o+gtdivWCZiqC5#zf&pLu6Q3I6k4c$q*5y4-JiohzJd({r}7Vc2zy~#7SFcQisJ=>ghZsIZMPwrk+B)(>C z6@S;6rv7~L5q0ncB=ax5=qY~iCh<3Gc-sS?O;xMYj*CAH9T9)v*_tjKSvEzC58~;&II(*ARlh*EU*gkgD zWxM+QN7en${nYcqZ98n=e)Fo>RFf}q&wbbS-PBR_-tjcmtbE+_><_*tHWlp=Hy7;? z3x9WB9gHgyH~utM{6OvZN-Zn)iBJCN9$T|xjrzINcJ*7?OT|4eSk=ca{OjaT4n3qE zJ1eS#Mc?=AiTs$Y=R=aZ?)Wb~2`};D)2^?n#rG$8Hs5=7^7$Lm#U&qqW%B1Ke=GgU z-`uwFTg%0QGqM`@X+T%@!83b+U|bjb#?#eHrXDE$`@}rTO~Fu{h(SCb+7u_ z0}<+NcQmUHJi5lkyPNCO4*8MNqo1s^EpNWdvwraBHqV2O||P?Y)(H^+tzYefqDl;^$siQTq7H?@^aOnl#>ZX-I9qb5BY9*uCnC4L|Zcc;zwA zq1TS6zm@N^{Y8i=$MEHG@vBGQ?a3&4PW{`& z?dsRla>YM+w%Trd{EB+d?|v%&rdFOjzwa-$zpq`QzIOZ#+Xo`<^r%n$&elEpyy*Pb zEcMHAImiCl5=SD$^=bN{X1 z@EA-FsXIsBw5{p-wkK|s_k6D)N=-U?SiCpyCDnE8^PU@T{evg5=EGuf%~kc4!&U0< zKJt@K3|2&n$3FK7^?kp8*7lJ<{?2ppuU`^B`i9N+$Dwz7etGd@rBD9ifcVvIyvXhO zpzZ3J?|6Rr%po=Zv30h4;yx(8@z7=U&x_7Iw(284e(IS|-d=j&u`cx^<#&pEiiX9o ztC6De{&(5(ztA)J>X{o$KXv3W&$q5Fx4jXbrDlKe6Y8;htxx^=S(mO$P;h-MOd%;hVpCMqe6jd|5Zil)o&+FK7aov@r}$i>g_G} zOn&#C)#A#_?Vcsiebe?ueT(|kmo|DH_|I)(%vOWgr(~(F)6a-&w~UDizf~vSiumm( z`c`~z@`ac^YWlm&MQM=p{2^tp`i9|WlS|%nSad4`YEt8Ak4={(MqhqVUE6KgxcjL` zZKJzCEDAsPpyzDF>+0p946*7Zv*$tQed146J!z}^sc1X+X1+R?c5goM=1lFMmK~+I z-jY|6TU?S?oNXyG=N6FmFGzCQ*h9WqKFR2{g|71`4!vzM@vf#-B70h&-q1pNL!XRs zGqXH}TyQ%%e2_GqnW4fnwX%maAmu&qukef03z2(}V@Ms#I-})tgeVv7Q7yedC(Y;a|o0E!4rYRrh`a9>w;?pX>O?NnpTnJIbt&3>8r-{EyzO) zIUe%LyLw=S$^L}>9a88bBM%aUQ>Mo0#?m!=PT$?eUFf8p4ACx|&5Mtc}44p+x% zfVaH5+E@lx@y})qzZ9xKZra2;+ItFeE5B#-yq}@Wjj_D_TwQpu~1NGKa?XRl! znl5Ux`DQ}XY)bx}t;vpiF@SzA0nIQhqhY$>XR=c=Ut$|aWf@mVoKqe zL*f%^PhqI97B4b;?Si}dNCz-i9hCi>1n}N0n}EMhn(sw>U!~A(GN*dV>ZjEP6hywh zJ`%~3Lj~atw2sYeSna*-)7JKWL*PITI0j@b2|Z{5%nWGQ8pza~NW+4_?0tm!f%Q5Y zoy;o&55tx~1Nt<;0bzS1&H{1B_!RcBUKBu@I#)Y&)`tKD4DD~qX$B9oz?z#JFip@I z)_Bu@gYLqpga|Lr(hn{DUoo8~${YBK8u4ZC#-5obzjRI`!1R|N38tUg`_UdHI6>kO zQ$VJ`DMe5Yd3ZL|)tA>)me*F+<@lzgSEIPFhy3Twbv@`sqFJ8-Y>~jQyLYNfIn$l? z^-^;vV1$ESKd`qmD`;qN!o#wm0d!`@?QEt7HF&N2y}1@$y*bFvcU{jlbYg+Kt|!QR zpaCr*b#FrxC|QraBgaSPeAywG173rVEocY^2_gM|y^d}U#*GHsj|;>EFa>G35wKKK zY}4lUoqzL=fSrtH(wkuH(Fa>8(0b&m#vkvbu&$djDnry5Z~ACva#J$Rl)jU~+HWul zeOnG~ZDu=;cT!lrlfsJp^rjg0cT!j*lQUz}z;M2k!Wy<$#ENpm84Wq_Ad^l9{~zqFZD2qJ#*f-5s$!LSc3p3t}nqs;MNFH$r6>E4cO0 zd3MAK5_F0HLs_!HJ9WMUPoSC+QJ#-N3WXYpW?% zzeZ_;2?g$|f>sg@R>-T^Z@CHDNt}kAiWBWY?b{w}kfX@5Y%rEbVAMWbm7${Tr3WPkv3w;Ivgqw{X*<2PewPgA zR(li9G)c#xmPOUjYdN3h0eMK zsLau}6OE!*NjMFN8cekV(9@$+H2yU3u-w4qy-?D-Ff7Fq>=Fj)C0CL%Jsp3bZ_Tkh zROWOyYm-lh?jJQ^EUBXkP%GDhZ&+S7;JgA@*a7(S1b9L2rRN3Gmt%nC)eKIgW^axS zKLIoX7&=igdea*lnU`_okuO09FJvtT%6*)sycqexOu2LCh4uKg{rib7R2mrt25Ym$4 zH`za+jh*GuglK1+KtY*0fVm(?k_sLAaB^k})4HcL#FoZ~C%5qdrh6%AeFN8yX4IOr9Xn2Hy>8+WbI~1C0XtTo%deVG{ zh2yX|Y_V7OO<#s^sKaq3ERH=*s&51I<2VD=cQ}6He>iTUTMV(N1()#`{i7o)q?-)} zD9~}5>NkY4yGftUZV0D7=vjT}3hRy`0*ZC&YlK0M?$V#sD%zli@l+_J!71WN! zrUx~{ayhujmAHKYh3vw6x$xz3N9*Eienl>qN@{S=KkHj-5{nxbnJRJF(#Cne^{KLs zyRL(`W>}%>L8xI;Id4Hi3K#C1Q6iY}X_k@G=gBd%9(dR$&;6mtV1{Re9p^rxw7Giz z6gT$=hWvWL?1ZUaDErDYu&?|u_GJxcUj-5Dt1yy%6-BYH;%I!qdd$fCT8d#O@{Brm zf(-Hn?_XA9i1)7otW3U+3DO0Oz`TWQ@;TlS_-W<%YkXkWWd|lpWZW81FuE4l&w~(1 z8NmhD$Vd+6tw%d&J4Db0a1453dmgudLd+kqfkQj<7O)n$6|-pmLiX_-KN$EaOp6i1rz`CH3 z83lj?0=qcAJn&P+@z?lZN$E#z8-ojK15fSjWqu!U{qTMwc<`hr0elH`aQ*@w+o{(} z=~x4=<3M>fIDLtP1#;#gg3b}5@CDr5AFyqNN`(FM7Vv4OLA>_{7tnh|(dofrB^At4 z4&vNGN&x}IPz5G`u44qd3KkCtAtwhHbR(H2B)|T;KCq=l2loXRz;z!j0(v=V%WQ`T zx&W>i&#ee9cy|yvJQ?Hz!e`LQ zc?<0V@l+UVJ4|xN#0!f?Qv<>nK#`V<4^x~?TO-w1)zus8s_N>t@2;Vs{aHqqYtyR) zCi9?Lc=NL;ZuL+J!DfIe2sA%}*DXw;v3sNVcckz(B8Z-y#YY>YI-v&8d;=+_o>rIU z_fJ)MYc)2qSZ~ad!mE3l3TZeM_z^zPz3>Kab7AWO$7Q&fLvKlDHZTF85NzqL4(6In z`b$Sp6)h!sW|*;M7Z&GQ3$!Sz^SLX!BbNXpR?WnST;vS#4{Tuy zzzB-O`cFoP;{UbyK!fpr1|8z&K!@NctpVsjSyTSW=uq^(79D6X{*Ryoi~qMMc@ceP z{rBzz%wvZ3{ub>0$0_}vNfa(Z>{qy67z2-GUoH&mLWS`}UKl+PC5-Hj6(->A)tDiS zLju&4Dadw6bXE(ON>>VFC0Oo7VFE(LmNmi{L_=+b!cYxzX{`~4*MV3&S-l zStdVMj^Mrku~m{VWLt~eRM=k{g<)5O;I;{Z0@)g}1bGt?t`yvT0vwv9bCM`fQbGvb z^aA`14blpE1)SL;v6}YsdTD<#TtQc&L}7^?z&HF>r6g%XQ#CwHb4z!_Co|Q&0V0GL zgJhM@;>A+1cPi7%u_uVBh{66i0?x^02Dg4F2WO5#M3-M?P<9M=z)yKY_%{0qIXyub z-wc;%n?XvKAcHL0EGVd@xJ*A>4n|0U$Zef*DZi8Bi8CwH^V>PT67sRsvgo10+@bU| za1=r2aC&~X|0kweK!wE{*dYrQafA>J@<+=zk8hF^)m3&TxIg-b`_qLdJKb5vQjHahS zE;E`IDU4@_=!aSo;R!vkSub4X;E4(>`KODSW|3G`;@n+}ak$lt!`N{;tia(CHi_Yv zAPNe<2;chfOXyqp6&DV7!Lu#=whSCb7vV4gkrC2f;@~dBf&AXW$?q+EEDDEV@S@=( zXK)y&`o>P|4rA1j z@!dF##L~|M94?-vpXoSUK2Hbg=9Ny=GZHbh2Y*k{Gne2?o0l#OHRyzkIibSXh8X>D z-EN>SU~(YJFuFrp7bc85qlEEBpz<2wV#-Qk7%0fndBzED?55-*gK%>L=6=3mbd!<{ z{I7@1tZ0>R*%U1dr-uncm>k83j9}Q15o;LTrzD37mwI%Z&8#0zhit2?AX3UrkPf5P ze^}gy-uR0PJ2~M_pxrHp;jbJDoZ1ZMmfm6zn)J;`}A-P)0Fvh9I;VG2$AYA6tX-5Mj7c-_RCZM?1sVBe;*?8ukklMW}ZX zC)|D%_23@2hzc>*VOw?shKvN|e;Tdbos(9o=m;8I#8G>LZ7_$l(KW6R@!#fY9kuga7Y7@tG< z6^V-XNFC9jntxagr;i`3x;mW=RlF3wYKaIZ&vf%W~;<}mlELA;Y$Zk2b- zEnM`-`6JQ|QZvRN+D+KdjumXFaC0=eyAGY}135x9qdQR*06MV&hz5WUpF^j2!U6x( zQe1>^L|G4)>vQcPhT*+(vjMXQKwiZQmk}95ffK*GD@3?7h^`!xqK@XHu0h@~w3^nY z3GAgoN8Y~ZdB(Gcq%1C8D!+K6R3)#J;XU3qvRR3eHmq2KP!~f3B+8CFF>I5$&0L&) zWXUoqQEEf)kB!!F`oklT&h8&R=B|(DA{$0}#@gaJ-p(27WM?-QerV|6KsCp5_;UO< zj&ID%5sjc=3=`>a(Brwh;X4lIl2sQ zeRCh~AF6|5i$Zz0z-ufu+awggI>XR%Hz8^dPsv5~L-m-XW7YU^4B*TQ5k{-I z_@N_t%9;eZSjppJhYiX)_vxVlUa#0;wo&ytGG-=b}eB$O@i zK#3B!o_FmW0`>q3NyUEocN1z~togfJeb6NWOt;Vuqw^}6C=XDg3{ zrr@)e8g5BYj)e;&{h(2tygW>B@6aO$DQpgw3b!|*T7qvjSZL5fcNM{L2&>n4EgIr5 z{vdj^3XT9pWFU+i1(*;2WPD>qQ-G9UIE10&xQ5>{q8iDAIFEW{j2Vd{74XpRczo+o zKu~3@)-s5y0%GaL>Zq(lS%ts1;TvcH+HDvfq+cTd0pf3<%UD=iM@s(*3NbVh=T|_+ z?*y5+l!0a}j)9=hE;?XNFEE$fT4ULRPWvapx&It#g2gqS-cbG646R7mfi!0fe}!_p2`Mp$43qwm-?l)x21L! z!a|q9*Z>-SIPpisgzk=8932)N78)5JWr&E1k&;7mEk8prJSc!-u z3NF~y2@5I8DrjIGcvCER^B3qrO=zoXW|14v-U5nJMKTTjIYfk*^{`p0=JeNfKvhgp z9K!L}@d3>6(%62?U&tI4FSjPRKt&Di0`IKga&VEspe&@|IUUrT=tpL70f1pO22r&H zWS+l}`6~<#j*P6;ldIJb}jJ0S3}3V;$^!0QPMDGFj)wP7M5 zL(j~DZH~N<0=wt-{@D-%c!T;~oii*FA!514=P=k!3?knLF>>uVNsB*vy=lkw~%5b zi|pB_!%R~hbRl_WQJ|tJ;q;C2*4YouFe1}m*8x=_b}=^C3Ph_j3iegXLdrQ9nS%-{ z6*G$r;<1pTz{uU+#~FkHtYUK?H(@C=2ygF*nnBcPK7v}$U&y)^I?Uh#Jn02S6C*PN z6LIg%b2`NS*9Y4d2ACUy8PW5bxVb;H7VD+skn_$wU==zJ^oJZ(5@!^?guBKEPe4Gy z@x}h12p)PP;JOTXN?^e>*scvqJsJuq7!-s@?BjSyk^Mdt5_BPj$B5G0kXwTb+H579 zH-swT5EIXNl-JVLw|7L%I*!m3l8nHD*3(v0(5$Z7Qg;@zI(@Q6YFJLJR{Hpr^AOBIq2pflx)=crGq);F@0s zX^B(>mg?;swd%p+8#zNYx&F;{)Ys(QfB^T`abPuRJX!?aKe%A~BQ2yvV5>cMF4ugiuw{dx}G8o_qc1`Y&sMghT;7gFG^2%~D`i}3$Iy?TugjP?h>?MNpW zw?Ef0UxFG@dV5EzQwK|7&QM^Jw#<3tZQM0J>{(C`LL+Em0t?V+E!*Gh!p?R60yhQl z=+(G){sMmiT7^<)78y*=LW%;@HezeLXDLu?kzvHVrCVeAPXfII3eX$wz^)#Sho;^C zvxVcY@j+nsexMnsNKiq2n>2xl6pd>E1=pfAxe5jY=rCW=wHnQOzMGr-14|3kvLU#j zAvl!LMvX}FyoDG?LB{kBEWinP{eqVx;{gB90gk`M2X4F!$H2ajMZk1HeJz}>%}BdD zDCOoaXuJd!+&D{FfpZHfH=;Ad_U{cY7$UfFkSB}N{}X{s4ZMrQ2D5Dg>u`P{oug1bgKVr#Zf<5#5>f90iklQ5Y{xHc!w?4)4DmKB7C-_R6$Tab4{9r{Bl51`f=j!Y zD0Ukz1(pc>23dybrV>vYkXa6LHZEM(0ky!<94^RcF0e%4H^uV+##iIz<}bQVn$psm z;DV9B((8a8sg$;~GY=7TP7|DTVmyKi<|VV+n(rI>DDb5epl8+tU&vkKLysX$2pn{S zR2u&HGxKj21PHm-azl8SmCpWwYXKs*MDe*WiPzCFU!bEEkHFv^0fZ3V1@66(d0<=? zeqhWVZ{)7$gAhfamHL?_Slc+)Z!NqL01TQQSO8=e@(8d(8#Br>oLfl21|0G;sXVx# z`f@Kx&BwKXf@}GhO~6y)?&dADfa-Y|CC~YR`wJ?|KxOk5@SM0cV26aqX8lc(p8(jGaN_}S0#*Z8nFQvdbj#~T9;=-3oofWZ_O4K0?= zD0~rjjSrq+a?F{;4RumQy4u`FsZ5Fme!i_E)y#xYfutC(FoQhPIob*Z?h7JV z#5ZF0iHV=LXek02VOrn!iAjrRU)g zGv`OMH(P|d<}Ebve5L;n(E!2&UgKEE zM8R+Gs0AJb*l42=P=L10ng#heTna8w{mTm}=a_&&0n-~?WGv_lDOwOjJdX)9qkvaa z7E%yT24Vq0vdt)g8g74WH~oz#$QcYF7iScMv<;~9_KqxsV>5915L%eGXi%8J-UC3e z`5>uEVQ|4TMean%$tf!2YzN5uShz?$7&%Kx#<_)*ND4KHk+IG!@@{~40fmLB#H}DF zfd#Jz={B*C<><}41)CeVKTwp*xsDN2F)-0v=oN#DT!bzxpeU=?uF5M$sPF>_T) zMOl7om>&PE`4vf(iAfnL85ukBDw8U9ug|DYGUacpODsz)PHf6pnweNxk-n-jKPx$7 zscBPlVnsz|$pIJxq*PQUW~7H>(;v#UFN$6qnG&97sMPP%9p>6Y5Ip zhljip^3jmtki#L_@I?BC@B!h1ut!MM{Z99J-F-S&%-3Sx7c&@B9kV8SWAx&vA4feA zH6C>=DmO|O`Hjf;N1l(|9hqX-X;>ZlR_L>#cZQzif5xkkx`-b|d?wz96!uKm17SCXHH2*pTV?o*;X8(>40js_W|vX?*Pk5? z3CXzJ&IjfF3J9uFkdy9dPv^P|kGzg6&=1{e3gz_jogWA?r^w zBHSRjO=Z>ohKj11`r7hpmK@36*VJY-JBqADj>5p!`&jEpkO1ka(VHsFj&MBv2%0n9 zM@lSWOwTuVx7m@Htb}<-H1@dK9bK8mUL+=Rvg}a32yvWgwDQ5al63Kl2eH8EH?tjHmi3FcH1Cou%qBQie10jC4|zqsf=H$v03Cw+l|c=TlgI zHDASN?7hZLUwb9S-u}juNJ(Tgm9ca-Xs!TzWCB7v4RwtiLlpyNx$A@)T7`&(g1_jv9B1t*Bs6o6c`heOo z8K~7-$E-u;&BM}cbWo-rq_)AM|MdZ<7%j6P;8cD|enE*PKiixKq|*q~d;zDpzVVeI z8Mnb7uMO$E>?OW<=GQ?i3n(0!26$s_Re9yEDsNUN%+a9ihoB4dkgvj`qFhT}9-C$w zPM&r;&HyQiF7$UJVj2FPYK5p^kE5l7FyBWs2#==b_7>*=Jqt>M(?FmmBu_-@vh-NF!`B9fXLR8;$ z(C(~n>v1@;s_lbF*jG1|rDl)44~YW1d@1s#BFR&}x8A|7CXm>`WRf%-Ecc$hzuAeD zk;TPnvraEc0M>xMvpj`_tW(Lcu=3VVYz)b`X#~Dfj=gocBpoOBNtZrxn2xd$-7a9Q2?N3#Gq?!rHqXouGWSQ0%#DRD{8mbZ?C`_O9>B3Ky;CQ6Y=CI zsUy(98#2${0$>73an=iAAQX{2-|J|oP=IWFXM7+h0**C;03NWEJG%SYG%f*6VSz38 zLxfD?7FbTeZT3bdEx#2S-Xh5ny6)Eu;;}%f2 ze#HMXrh8k@szl1gI$$juyO|Teg5|4fo*rX@U|<3|ngD@=H3bmg+%%?wU%+g`ok+gs zov&VELxA_KJ}m8kvpE~e=`P?0o6b{kL8tSLt|pCKH2I;8?`Z-n<)dtKbaW$5;y~YQ zRpec>ir^0V=nfGv;t={f?7mlJGun$pUC6UY8Q(Cl)*S1clN$+XwBf|$_RH>v+5OA0 z8$&YQ)$otZ?m~cjnzU^jY;`)2*cSLi2{f_nAt@nseI|(Kr|nHmRB^R~&NP-0cagd)ZOjS`GEyZYMvQr{Z;yWqr28C=VdR*?|`qot@I z(^#gZT-46w<+6a9^n4Ai7_@lz;+rMR1V|{8r2|X=rf?%8X};FLFf>stNm@jR>Ka?^ z-6hjl47LV~h7nn_dTAE3dbInzc?x~?)DfGZy$CgrK_oo(=dxynHWGk(M~Ju&Ot}6I zq-G*+$=(fc|L9U;NX9+Ot{>bfQ@a$(ZoD5WV;5qEI!xG;AlhbycYm@C^b2eev4;WR zW{l_pz@6V>%`dPMcM#k{ud9hR6J5^MHdZ|Wrq+QSNgue7{?;~Q0r9Dn%oHbZernI) z=faMmWgVg3qWgdlCOb=m**l{>wkJr37w>v>rnk-6(&vR$Gho|`Y_G%-yD&>TI_!-I z70Q|hxG2#wQDA#3R&Z(sd5qf-(6q^=Ek_{W%?^zj1}%1Uv|y}ecB;lP0Q~I*6{YB> zHT2TjE(JX*U_J7+WCT;++h!+p!(I#tNL!KG&(25&zwA*BSIL3oZPa zMW+|-ShPArNGs>2Vy!mV`z*N@EiEI9MQX_}u@+@p^YV)Fi{h{2Uc=0LZ;1-Yc;MXp zXlKbM{0BMf1^N;v;zPSaLc4M{q1blCc!pxq0?BA`CGMxsK0uEKpdFk3Qyje2Qqa^~ zY&L6v^q)z_AKrAEcec(_Ipt@@T=h-NEwlypo}(2T8`XeGSK`fZi}iq*4KGWWL;a;S zg3fuTI+ApH_cgw&zBX!IF0iNe{$6ko-I)D7E-X8}NYvSiwTO#C$En~L;F}19~jSj3G4sRcPokk-J~b48AB@;&>;)eFiVFDh=;Ajzzkx~?ga7Z zB7uO0k+V1IWpRD1w>iydKi!&XgknE8;!*)!6*`gOk+nQ>O!_|jG^`uoO^|LWg=1xk}|~<_|79` zcT-zGR_GpwZ`+7zK@IlJ=#?m8@fS&X8W824+Ngc<;HYAPEu z0=7#P#8i1Basw-5Cnj{>0{So~$`P0GPnpm~Qxn>1wD%bctyx9I|A%Jx$}9a?yLT>N zsLgZC?g9#^tPQocf@c_!h22ZK*>cK4(Svc%Fjf&U1UCC|u~h49bbx5Fm%0KqnC!x6 zDfY7CSgSB^HrJNdRBUUgt=hW1uD_Y5p%HY-W#WQlEPw#IlsW%QsT!$VE)nYw6K-U$5J}aVsg8> zAXe}1Iqew4Jxmy0Fx69EA1ZrDumFj8hqHlILHlN+1$}2+S$$5BFkh9%bQ04#K^97k zSy{Aq&BXpc;Yts{UGK_DtlnYuTQEzEd-{9ZjO74>M!o>2de<57%*ZE@n>IVB zA@}NWHnnHj`yq7gah|2O>v8q=W@%6|IBS|meh9(Zeicauq9Mm@A znWP0lg??+huM3sfM!E=g-FBp9?{IWro4~dRl#XF@dBx6sdm8Ev)zw$+GNu>#x(K>k zS-ZQYD)3bK_J&>M+pBT1n7vA2+LR3Hnyr-Y*=|e+_rYEt;7+{dWJtzC)&+n&IKhOE zGcPCrxVLvTx(19D9S(a}e>aBD$E(rq%DB0|mE=Kl09WH}F(`RfOaiKgiNdjOa(REB zb@aIKFk5d?4{r6sN!v^lFYE<{3E3Wyu%f}sV4I-1A=Cm@CV3xpM^-i!eEc`^OhBsd zUEf((yapY0JLw!@_JEt9p=BK-YTwdIfsH8tA{8?EN`c;ou2@?8xUV|uO`trRv} zv;`Q<^ZGXH@9Yo z^89;$M}gT~>~J_xyZ>I_2Y0sDZvl4#3g{;az_4~fK;Oi++D0#%;@#3CF$k2T-i>^* zdA$#e#QI^@0VWutfXe83i1oGWP!#3^vP3#H!6DEN^w-N8;%SGy2STA9AQ5IYNdT~8 zosBE>c4w+10WCnjKrKMK>jXLw6=OA#jA;;=85$p@RFxt*%3HUwT+w^Jctw z`mHb69(gOp^XwxLV%5RhpNhWq_iEFvyKJ2&v&5Z|@oJ;#F^}=sUiEw1_o#3FGEr@K zD$4d?=&R!UnqRXO{C&dn${D?Q(lVkBcHZXsF8^CkhUFp8kKNqHqvor&$Ma3pq%xf~4CT)}M`!ww| zOS5my@?P6CN!xU9nwIXM&DKoPHeGo$*^`zX1j;HPpoj>fH18oO2#B(YfPjh! zqM)bdGFor+;h*n_nhB3XSaNOuU&raX_I_OPKvr_ zdX`)@^CfNKx29+*quaFb=3hyV>|P=NC}FI8`^BTR_r5(vyZNeix$veq`A_51v@NGb zsadc0s842mSNhIFpGdo(oGtI$<&Yl#nOl1EtzPxuCQ*z0%jNQ}u9Nv;Wv}Jko|z^8 zB>!#sFHNTW-`vwJx4-px{=Vm*m49iPx+o%IhPE7Y;quzm-B@-1y#Y z;bRZakYnsVt#xIu`sNB%`t|IqV7Uy zfA%3Mr+qN{0y%o;Qu#vD z<#N&S6VmdJzbh>Yc|hMWxuvuJ z($8*JPgmxu>)XF3f9JC+@~(V4GVf<8r{s?wQ{?Av{F>aq;Dpw(;!bJNo!?d8ecj0#>MvfLu5QTMszoGE&>CBR*njxzudC0j zeO^5<{_AqZ<9DmO62*MWuddVX_~$;g=Xdw#zy9e(+Tzb{&<;KSNq5|`DD~6t-m30( zDEWV%@-6A=mRBX=qn~R(U9wQ#e|wfZ-#1!I&U;&Z;n{1om+~)BZ`<^Hwfr~b+UBJm z`Tk!=$saw`r{%=OXf@CG%FZ7o%SCVeUaPqM75T2d^8T1Hq4ILeQf-cBiL~?ONmAmc znR3XuPW6O6LA$7Ila%P#D&N@sb4|VGGx;~4eW1ox%~b#N=$+C}Hs2tvczTt3>e{{i z=KF+2e|_Xex$W*XnPscOTrUl{|dA+Wy2<(yZN+ z)See6YPbEqS6g+}arxWT8>MyM+1~$^i!$@$eHQt>6sPv!-|X_Lw~lI8Zogi3JpHs5 z{Z^s&;Et)%l^4Dv{rJ&a)I+6t@{`9c+PB}0lxHU{*4|n2rewW-iF9A`Kjik#3-YV5 zexLv8YV|^EuXgq{0~uTEgyhb?19t%{(zyJKXo0v~trQ`+MeP_TN!_t#;5V%e&`h zYM;JPrQLq}tE#kVu5{(A-_$Z^&ymyJwc4iH!ZJ`u0HvA{x3htSAW!J(OxQjO8)SbcKM#n-u`LFHpuPsHT8no zwc0198m%(%fcp3abz0grmFj1^Mr&%}TFvysE2Sr{xU7HN+VNU*`K!{WFG;fSvp3|Y zB30?q`Wv)&Up*-2R$iuFvtY8^vfQO!pY(|&XWpbPTfMHJEF=AJ3_pp-290dWY+c_yLmJJeDv#2Gb$gn%#9SLUhFuOfDl8r+c!k1O8^*pfkFs7T4%} zfYTh$LP%;K4%DD~4gl9MN?0H1@an;Pv%cEV)KXuMjlDxJ7Z;Cn1h)~T7za@@1Tm{| zYYJCjIH1SoM+!3a7-vEQZ!mynA{?4+iEjV0#brQm0gX0JA_KiM3K<{;uIjO2tiX&? zKaqCv0Pl~D5oBmGXguw+hZ9qX=(x}9J}+Z ze71v5yrin4PMy(m$3_nOU8Co`*^xksgJ#vy!f!ovh>q$U zpg3EBWD^aT02(Fi7GMH;u81vmT8z57(!&_OuDqd^%-p&H)NkDUasZUNkSa^hplxT2ZQ~Td_LdzU_Lc8newc1BDW3_)J{8_vG zI~nSpyIzuxT1?vS-@H~`5>qcv_(r$(&8h7l_<<~u#`M0*3v`1fFC_j1Y&C*qOpO$P(4{Plo-XLB4&#mgty*}yU zU6<#ZBB#p_y}t5$^7mem-}>%X`yUy9r!+rr?4rjT$1i&A;9>1w-Ir=F=cZ`K9z7+! zV4Wkc+VmCa`tDmaTSC$1#z+i!fPK0B>XyYrgcv={FDtMu~Z z94YFf*$>>4PmWs{ zFS)C4m)E@8sLh^qNLqEziTv*^o*^%O;s*KIi$(QM_unlYe*-VSZ7~Tq*zV)C2iXq$SJm-u!lcWks1b>2Qd&v@BkG?Y%_# z>hc@3mElS9ic807Pd;*w_Rl{ws-2JY%bmxg)rY?RsPxk(9+n@wYE=H~+h=Myue_h% z@zAr6F!XHWixn)=W@EvI;$Tztt<_4$qa|K*j!?)qW=^fedDz2Ce}Tm8g7d2{n|b@Sgp zRDZGI?)&$?{gQUaWp}98b^Stp{M1}+-dAh1Z!~?ZO&U8V|I_`qXuBS}rGHFTyqde~ zQuX5_AE*~j{F<~n?7Ml(SM8G$t#9V}X5XZhz41Z+vZnEB==%G$m!6&9(=sPVO^j|; zPkmge-Pd^X^raK#YX5v(Q8z!nBQM?bXKBwL#>&%v*{+q{c0$@Pah4QvB2HfT*KW1u zleeS?el}fx!_}(YwYpc$?6|T&_ds60#rCoEvu;)XQ;A2bcf2iy&mX6GE5DKdN&kHL z=DbsK)kj~EFS%LN-WT7KoCWtwz47mBcYR~8yey+#wol$5UGn;i(jPwAs=hY%xb{HQ z6zS2n59B{yaG@H1qCtB&rB8Zy->;>Mf3sd1^aVxI zsJ?h?vNm->pZ4kW2i1~|d!(CMn`HThbj|rqpL+VKW7?dknQHfxB<;w8J?h;@CgnvO zJE*;p5iZq*-KzDRa>^g|UoHJ0p;s-Pu}Z%3#VPVLORv!y7u~DA`uKiz-;H<4p)b$W zM%`Jfjm^AQ`Z#KiymtK_ExV~HxB21?Qt`j)R{FR29uUH9J9yHk7qZ%d_weM#Dm38C_#n{JffzN1ik z2RZg6+LHA@lj%>GbSi3Fka3>+ zIdH<`HhpeebJiBZf}5yAbB$|jTy^EHrh*DW>%mgr2<#q1GQxz6ooaJaYYJ)xSl=-C z>APZoJN$5(PA3<*o*33>92pANm6jE6!N6fpO{TqivT<}w#<44z`#5+QxR53qa00k6 zHM#ucFwpccMgq@N(Snmq9XCGb4aW4LI-E3s=VONH6!N2M3c$Pe?$88)vtL9u#y2gnLH*!G=d+`zF72C!y=tK_EgVSL;bJfrZYS7Vd$OIdFKWL_L zDs|OT$%aM_qX$3go_3|hWhJG|&rV-3%sl}!LML?)r3y2pdrCIBngK4MRS6urahfY2 zzOoUPD{y9qP7RTF$W((6E+=zi!CLk}+tb7*u(72HhE;aLEkv(%&S7eiLHq{+g=4pe zn{vUh%=rfXFR;K9e1r)kLgv#Ec6)4NE08Ajz@Wl86rPB1AR>N}h<6sj6^yB!_`$!W zs*2YM2o2!ea4VCG6PG1k;C~o~TP~IADjFRQ2uFvb+SOddeGExWVvC~{tD`_!r2$7_ zUN@;T{1y7O8u4t>xlNcRYvbo&eL5xUq7lObMxlDp5uO2C9DXTCBuPj}2^5hj2?<0q zTs1g|NzQ@Gf#Q{}?!?o)+CaI;s6AY+!jsrpi&;gP!8Zd1tntv!|BNI5=Q+2ZU4eT3 z>H_`z|4@kV(Er5YH`wMErNAk9+JO4t`s4rI>VvGI>VxZ-JedE(IZbljtC8A~Uz}E_ z6m61yD=*egM}C_B%Bo1U;d3ewe^Lya?W>Be@~BN+nhMw0pYW zQKRlp)0RB7On$2Aul=tsy-WJmB@v6Jr~FFJ{#(0z<@0~S`R6t1<5k~RKYII8>HT*@ zw0zS9t@6D(?f%^X0%AFg;$dhgz;+LrCtYM*+4+5cSqb#mCzuW7fIzp6f)_mUcVc#VA5 z^n>aP+aBnT-1od3laL_YH1E&a={MrE*FRRY_^xOBNBuoo`}!*%segF6Qr_^pi}K&k z41Ms8j)%49vYyj^cY-W24|S{G=)-EfKg z@u^YT?>^fkZ@F)qY^z9+YY$zlW&GoS`l7E?J1&Q5Gk+Z+UD@+u{_bzc+RvZ9+Z`c`Kpj;mmisNQhFm|ll;TKOt!9h z!XZ7^m@2RE*`)bDzE}E|H&dRS^`1QK^Q?09p+)`IKV6moPPSKm@^qtI`_fa=McF^rPJEiEW?eN|J96U>q<8K{9_KiV!)pLqYi)4#dnj{eHsyR=^&xK8@XrDL>R?N3QpPTeJqnOB@2 z@#!OS?k|3&Wy_bSFZ>`>yX@ct(oHi~$S?oy&+>*^-bH|{Xg%uOYeU=Q9gOy8u{0&F1&Z@b6)NGnsO~pIH_)(_bn-5Lb-hS zhDdGG-;1Ht$!o8g;%lYwJ(d<#X=T%n83z&7JQ_VgD%6KEC~G?H}>i z%8OU!Ye)YPryaGtEUmLUwIv6C)!%)qORAbTR$F)BbglT7p8VpgPs*botM)b`TE=7Q%YToQ?|o6q`(##y_QJ{=``>>!Tdii z`nvpC=ta`>b>q}~?pO2k?s-Q2W92X9(C5ZzKdJk^T(r1N^BZ{2X3!mCk{GI5IREX+ zFvG~%tsCcQO6FlL_(7cQllfOVTqSW$MIrOa-Kd)j$(|grJuewJ5wcUlun-l-**f6t z>jx$q)=gX7{?z33WT1AFaH3!;i2x-B6d27oIRqU3Myiup0C6Za-1z{M4N$oZ93pI< z3ZP#=d3Aj>3c!WLKVu6I(j0(kbJ8ov^OYbUa@ z1A2~_KQMFa(0BM@LhXQ)BD5YnG{-P9{hFg1f$o;N<~|9xBP~ z$W)9|D+_L&ExNvgg-)u4+p}K}F=zsJ1OnBW8pgn*Q+0;Q#}?;5Ii)1pQp%kbds|?F zwe9zyUpUd?v_#hR{jS(}X2+$8H1rD4Jh6xd+%X|76@!7Rn=w|9Ya#bg@Ke|*s9T+f z>Ls{c-@r8(!6w*|4Zd|o@40n%BreCQ8qhWjwj}#I1&9L+tHY21262h(0VnwNXIU9c zgSMWX%lY7_tbYR7Ig-^1HI!jc=YLm13BjQD+{(@`azfzBP8M;8MyZ1g*jNJlYAn0q zgVak58kzs;!6OS)jt(&Ppp~kVAI<1s1ZEl!=m`%FM5Q@%`k9;cOkb>2d?{bPNzfN@ z-%^{*ylddFf@mZDOWfV2xuJondJL%)x4spQu+8Ne{v#k&g@RaVkR*3cyTLYb>49{Y%T?s>fpIz2R9k&q&?-@@E)5p?RHg@)M#Yf(SG4KZ47xQ9&WxOSuOghifp|MRnj^ zz$cMB=3R)Hvvyq>;uF-m!5b_fPSbw(Kwvdq7_X0pS~vjO3RbW7V?8{!rNxNxRSW^j zLuUZF#Q6&kCJlV8C#4>Fjt-PGI=Peu>cHb`i{Zbc(}2%8Q@IVAb<`O!2)OX#y#eiS z6@_zvL#_XfVTjgYVd*HM3m2@zNn(gtzYf}{#n9@LQjS2|^u}Py%n|B0|2xUD8E;OA{2V{`ex~n*_hPY^I{aLp`e3slOCt;qWhb-^aUIK|(baY0|@te=B8f*PS1aSq}H>hdy% z2IQoKFREd#VM1hh@sSw{TnxJjlO-M(A`F2V4(7CmRt%#SBQ?ZhZ7T({;ww`Jkg@o9 z+c`#x`bR62KCwpW!&s$E`O1C42dY4|+hdt?65VcYfX!*pO@eK~xI@}|BZ^FH0d^j& zdzc+=$syh$U?=eo_KWnct>vN~W*-F1!=~230u*^@i^hh+0`2A5;A#aUU=!jc;VS(> z!6y);j4qQ+WAG4{vJDa&8!Ka5!$dclrE9Aj2&G5gpdlu=x}|#LN+YKjD-T%&F3npGtr1;FthOK1b>1Q2vQ(OfglCGI0d4VnPI}j$*5>DY3G^$)huO3m@s!PT?;Us z1~|edE7QXSdjUNVXdpEZKEr*#l9g$Cfl23AAWE4UCd{Tcz$Cwgc9t?l@7AP|yA`8M z#sdqeP=N7uh+o-d^OZ>!VZm+j^w<#O_~-HErI@ZOpg^jH#&)TGPPdg%3INg-acAE7 zT=_gGq&cZ7hQr4LZ7c&Cr#xE@2Zid`PpC=Bd}e44nOVuuiW|CufN0Uw6lutzo}@_1 z@Mg>ixND0e9U#+Q6*8?9`-&J_P-DT|kj25d1C7OTEfzws57A*IBEl(Yuo9ux^6Re> znfBdp#Pi4XG8Bb=Oy(2$~T1TNukCmbOep584sZ-)vV%7XtQObUk28NOuFb zc69s9`$2j-V2ft7nLObB55NfR{!BtzNa$Yt6Z|;NXC)((NpPAbq`&;k0(Pg9N0c)!PQsRMPv(i%YSX@tc1v0ptjj%>d#&80F8$^mC()W)$=R0BXdOG}E1 zir3oWD%?#KNLzX#dSKgbX;a85wlAwt-v;;SX7`u?&Ym zM3P7Q2H3l~0dY)_|J0vX!#D~LF&6sIq=5VmaNsTpuqq=-)B z^<-PGC)zIF@2qWMW=MWw9p?IZZk{O5t;|?hmF3S^i1C;y@@tx>e4okj74d|mrZ@^)kATW1O^j2mp^<&QAdjdBwmZ($jTB(sXC$Ox$ zevhv8F={DCm>!-;dypE4F$$*pua_X<_|4~&aQuwZP5I>t5PgefcG73l13q5vY_t_1 zA73kSBGBIO%sHpdJ+rRz9B0J4wq+%}LJ5%EA9c<8#_agnd1ZQ46k^eQxecJyS&bEYklQTM6d3ngpl3 zIC|UI=4RzU>J-;kLxlT1)bV>-0d9TRit02U#<51YVHPVNE7y)esZ zhe9g_YXF-b|4VZjvTUB2!yc-z(kc7(tdaeErdZJq

WkhRh`R7FR?v#&G24GxUo0a&CJJxI=vhSp zHH^?0WvPq|!uR4OviKZCr3e!ve4CCD_d>KSkJpZ{l%^-yN2g^)#Uu67GIFrE6(6GV zYP=Mq=QE;Wl9O=gb-u#xFqa?`i+u?NwCa4ro65lGY^>i^-BxS{1~JMN~D12qRQ73AT_Bg=Il-!ubUH0Si}o? zPN<%SUFBk5N?yl^`}la|GaYlWMVxmUf)U> zg`zr_C4VpF+#%yAw*hS3oM(pc<%y(E5G(Hxg5r6tv?NT!!Tc9ti7CGmD|kbB3s%L$ z)t8hi)Stu1__VZi4Cu$sGZkyrQn6IU!!vl{HXc?OCj`hV!_1?ScrZFHN*o=ACTC$f z2)?lIa4Aj)4kuKKo#MO4#>L>?!E3vvDykszl5$vK4a+h9?~C~UtGp&Yb9I88`QX1x zYQh1kT>ndJ?T?E;DDZ;2Lg+Z*2WJOYhZSq361V$C-i4V@*w`{vy&O=|&#<@Qz4ciyvijm5M}!$Ghn2P8?C2yOZLC^7W2 zCz6%N$mIMya%X>2c(=V1J%2iYW&J*y(QdEUuwn5uUH*y~-Y}u}FXz#iiXK#><#kg0 z#T`CQT}YSAvXqz04Co8@jXTSS`WNoe6P+(y9JqO&D$F112w@F;DW6 zx!hNQj?WC>{IgVgKjkF#oo)$Ue;ks`t=AIz!vc8flLcNgR!IE1US?fd&my50r?RFd zj*$CuBFq_k5mt?B3CqOISl2=0DVR-!Tt_Q5)^VJ~Zcs7Zf20ws)P2R4uU^g;&lSTE z3p@7WthHprffFp(U?nw*45kso$5+COm!w;(bM)p~JIdNqc4De24Q*;KQB~INSsjbB9H*rbBNIwMdy@{*)X+d%f0u7|yyT2a|9Ke=wn z3;L6zi}%m_oZxHxGS*>Z1Us){3mNb1pvS$<^x%|d+Nb7fc(-Z1kU6bVp`Yj7WmA(I zP{+9@wAaL^WVf3Z4H|C1mRbyC6Z#j!w2X2Zc4QN~(%BrWhmMD#3C=KW^mO*sV>-^` zWNMK)gti^4LytUc1Ut88!1Q)k$!+_^v}ixPgeZD;(9N~EjXK-!gX5-05j+B;-q&iXRC{arS-JQqb1F8TmzJ&jKE6~oOb z=RBV`(trt@mcY^T1vGSThS#yVZ<(K`EuEY0$r_I%aI5837_h;H9A4`Qu?OeUT~Afy zqx&qQa|2q!YSmV-{O4cb?Uh+x+edq{!5e;t`F++xLEn01+EtZAEqEH(Kh}}|w)H5x z=u<{CvOcokA5NpacR!@<9IVJ@)akr-oJqa=%^8;pmm2lFG9iSd*rUpxn0^+$#B5 z;zFDxmLC^@PyhFH%7CV@rNRU5-aAdUwwOzwT-id3ql?(48?VWu>?73v#T=OE?ZRH0 zwIP3qZ_6Ky>O_|vpG>b_?*~_I`GZ3r1A4n$3L01Z*yf;}Y}Yy)y3*nlGs%2JPE;*~ ztGX1*3)->Iwsw%|<_az3&zR_s7;^A!JEGTk54bkl0D=2YNh)0{*|Eq9_J%a231*wg z=44%R^pq8SKCe{nJnu0fyJSqB(1@7@+DLY6EhiI$XS1)W?djYvvq-O_SLrH^<;>xB z1DHQVmFN$a(sR@Mvn>m65)YN9%-?tm8*VZchCEnHOh*x_YDl-(+_8l26&`HshgVEy zx_~aVCbYqzVrCFOgSK!#PP#VlMJF0&LYoC+sm3KuI36H}rG>5}^IRAUSaOyH8b4>g zueH3ZR<(vvj|sylFU!70%9+)lkFno~RfbO;U5q&r8rz~!vVWMb7RvaM|aq^_+bD_JP@y|crs z-(zdZ7@L{!@ZMMIwbF(>86DtdRT@HqLc06*baonLUW3wN?qzOnV_rAg9Iw=zOMk{< zvoVhr9Bz0QKWXsUI(h7P5#2+0b_qal_#MY}!HdFigui|Vy@KET8CA{6N$`u*psLlP zuXrLZQvl)|<%qi?z7!sj0>YMndBh(0n_ab`bLsD*VxiO%<4e&7<$jCpKQu*D!SNRP$?v|K6Xzsm2>jHZpJ%N~2_)>W14QDzpWS@T; zOTu!Cn9mjmYCCI#{C;i=xZs};M&*T){two&idzfl7d^+S_xD~hRb4Hb9616WH1;N` z+pTD5%nhPpWkW2^zazI71rfWiO+d@UpI(34oIQ_TEHBpn$Ud!0preMrCyfi=6VK11 z=-oXX=xs8e+}1IJ)7I;#YkW`1f=iZEexy*M8SB7a<;{WaPuqgdg!hm$_Bqoy=my>u ze~=044m8MSIgFV0j-54~&+gsbE;)a!m|QL0Pnryx2BqUhu&DCpKrSqR_D7Rx+HFf1 zKP3nnC8TdMAM$d{031d>lOgd>W!ZcL4P*Em*5D@iep5H2B3>i%AVPN`5+$M}PgD$;Xa- z!NBS|>o}$fq@_$^l9YRrs*i(Mk@{MCl={#suFmq`?q4T6dmp5;&AU=V^O5ZGqXzWs zaaGc5S$Asr=m}ZkAM174DwF-1xfs%;{isu)Q}P9?m(h$bok2eT9@{bHFuBxx52?Jc z1g<(7Q*U~)vZ2~5N_#tcJM9XBlZ_aAW1`M{(!_B8pdT#$eJg$Q>6!MWGwKeR` zqCd!^z_aYSo(BCI)|N{DxK9p@pF|#=lKkK!^5xiZN!?^yz z@XM7=Y|vd9tyfh_%}g`sjsp#8PWy&%=u|1#8!RO)8qcH!z5`(L@1Mx4?WahOmUAIw z>;=iuc4O(=+)?EA`gG;{PT=!)3=CSdi8{Y-L?703 zhtC67f$>2LIGEu_c5g5uzZuyugQ$4=*`yV1_M!+Dw75vjExkZ<@<#Guw;wT>ZT4@6WWCW6 z8%Z!M(OpP$N4>Aqy}X&~bW??o1)gxs>>8L)Z7tdDZoy`U{|Ylc&x29XpGzlvy-P%y z6<~MYn8Ypo#P)2PLuMDK!>Py9>B{GiX}?ijNw1{6wCI;Vyf#TfpxqlwdU;+E^f&E9 z2A8fN$q8k!=lLCW`^99hwdu{_t7I+YJgDa#chQWDKl*^$+XS&=ZH%E`dA>x`DwJ)X zy%frIouSP^BC*|2Cb{-;9`tGT2UV@t0$Qp{VAYsA@{JN)V&m0bU7MuS6w?W`-lJ5gO7n#)@P+i5;|KF?3fMLKQufZ)j-H#V z4Q=2Ic`lj-{V(>1;09w@rcW@e+T#Yta!)dKXG=ocEg&|#PQdkktD*5D1Ck>vVFN2o z+4$IIG-}KqvczEq@wIM48)^^TbvorNIc~1P+Rhs!FHdVm2F|T17D7(sTo^{xouzCUOWcYG*70(H|=Lb%&Q>fo(~z8 zl*GpPTx3BfRX}=8%X?UYI&}Han>{WWMrENdSnlMRbggRfzrXe|}Kl2L*mm;BP4~qen=s z#xhNbJc_o-|B}Yy`n|?d|7r->{;WqGB{`lmOr`YF@o98=_Z@P*`SE1k$#yX2m$~xm zv-(olc$m;VH(_+l0`gPhFOrD^&k@_n>*y~w=U}o?1gIUE3X8XFfU@7`!HQ3sbfVQp zBCD{axs}dzP0Nk!_cjMWr?f3~Dhl_!DYb`tMH-U%tv1lR_qAy0yoGelvo%Ej>ni#x z$C%FlwK2??Mrr1g-q6Qy1WQ9HOLM;n)cf{?6#HnV@xc?08+Bx+yQZ)mg&Ux+N+4bK zrINkv`4hN7rQCCQYx+JUoQ*cxLK{7r0u!tzlH4}~$nLYjFvFsVjNO60)iZZk!{hV4 z{9lZQxdu7VXqYA#hqa@h)-I>kKH22siUhhtzZ=of-2oNP!(kRNWSh6{Ch@bILdr-j zN#4jVmGMcz5Po$mkax2r^CmB1AtT1oB~htl(T-2dtCNb4 z?%i{IH9>xJ}%&qOk!;GjIHvW<>7>%UO_l1GhV*q;Yx?ZeVCapGy!|`wdyV}t7Jli{jy|u~j2;*)Cn3%v zP+2^JMx%x@TXh86AF`aen02OyJBPs1es773ZzV3TQexTzy z;`puyRllfC=N($Xq#Gx|w(T3KQ-_Icdf*7cRusdyW1$dQxP!He)CBc+`E-v?5otJV z5N+GHEyVwt3ot;3I+$5_-_-b7ej@5N4gCC`K~))(23=#jnw_CHe*cvWewnmIx7}hG zSa^aP3ZH5KBWJv!7$#m8&q{% zPDGdQ!M<%O&@GG7R+&|Bu(=FW8_gzX-UdjH2f4te#2IXWO#nRmVnO<@wj&`5+>1`~ z=AC!2<^BP5#mv>vKj{Ozwc!jb&z>(ia?*|-&|C>eq_!~i>r&{`tp$r5-H?XNtdJkw zvye7lIf6bp^fQ?=Z7N;VMGIW+-J&U9R@!&;5yKhrZDQO^j&EH9pdCS<|c z2B-eDpD;k0nHZfW%}^$)dZAk|HEy_=I|I3kFilZJM)51A&GLLuOsvFOGnn6sA9$lY z;kEjD49|bePWQqLyJ1Oj!_l9J8GAK%i>*?4-6Wy9PFiv-rl3}*(PBH1f39=HtHEHp zsgtwVQc(#da0FHbO2yhr{+NoGkrbVcDWR4^7N0a`2-e|22WA5HnS!3o%q-06v=KWy zTVS1&R9=;d=fMq6;su7pPKgu#R|UIA#pjFK#7%{ zFxQxSV|h9t&!1J?BP8%vU*@i8XD3hYnGLO>BX9ceNm)xc9DFrBtFwY@3*jhc78{PR z6ei~%8no&i80O0hL-B#)h!lmKI61|CM{HYU83m0onKdgZCJBpwDIfE6`j&?ObgRR6 zq{Sg%tH>`x-76%BB4sr-EsNJIimG85PA}i!P|Tm@S>JJ3w+qWb33awGP(Z$B06-V105vxj|>94tOazAP&xQ--ew z_eZ_qhFKT+wZd-j<`-3Z&HX9uF|PvFl+Ps1yX>YVr|ltO#R#T-T2+2+_Z;H5q6a*a zPku+{s(-%A}HH#<)PJ9>MSFI4filwGg% zIP^0!e|`&WO8ua3Y#x)_nSeRUG#TrbCaT^F?_ zzKi$LW|Dlmx^O1!Ji3nB4sgL>ti5E)^p?AP+ZB>A5%qOmXrGYu$~`Q}U*ZE3qR$hP zaXNG&>O6ZLjp(+3=cM(-HZ1q<2KllFmtaeGF)KdS6L#*Ola}>uPveI+>)j8NiB``Lhl?46Cvx4}q-KZr~Xpqs5^~kRP`JyawEs zZ}58qA;((7ge$Hz^7BC&(7=%1XlMf!`>snKX@?Wnw})W)3m?dHS_v24++ZCJ9G36! zuO#n8k#O(KJkmki8HQlc>fi`9$<(`ZXmmGKdhBjvHf&@Ya-+2teL6Cny3RI&JCaEf z<5OMXLDeI2d%zfYIe0eG`n5tkKCe?3~d>(#JrH_7Km5L(Q9(#Rv6fDVCGS*oxI~ zb-*Uls&{8LxVH(^l+mKTAmYJ&9#J>kPYQTp+I>Iy21x4d~HvH|<3@7Hb-R5V5;rWR!<$ToD+OaeC6DjbTK^5YnaiG}~_rm1A}qGyPR7SkDp>#P2GAbrC!{Z+i&w&dgkL^+Ww~zWX-2C=5)@K%s}s-I_&}>zxCSUyL$?Whm}m@ zSsAhEvx5%WeUT*h5z*DNrqS0g)!~H64-;67^!Bo-fppKoWeV+nIWX0?SCe%a1WB@L24viE}5`n$=Lf>ii< zNeB46x*ymLxJ2xionHdkDXNk*NQ*OpD%S{i++1fc9zG}H!tm} z%z1BRl9O(gnNPB(-}Jt0hTlf|WcM`k%D63g>eUVYE{O4;P2hhHT>S2|{U>YtzodzL zR}Qu&aM7KYgB8LQ#R8@Zf?y0mtQ-^urKz#v%$(FLEU)^P0gM6FRbO45++t!q9UT>F zL*4L1g+MOUef*2YIrIxkQPmnsP&O(e%4>)(!mD&9p<0lcm6RZ0(0C~Z$T3kkG6w=~ zWTO&c&&OMRtr{uBzPci9^|#f1gr%h+_KFnipm}it9$|fAFqSh)nt>Hft@yv#l9!7+ zrZ8A5l@ct9$`vFZ;TEjHiL!1YuYQU}RO6Ims2+5Uie#yHS)V%Z?1N}9mSSEAlRqqs z0NYGY;=f?2%S^F-BK~JDMOhjPW-9(eIF}5(l%8aR6+@Fy2T{V^L@7isD;%OU)iMiJ zK~zv`l_meQ43vwrlyir|a@}Dl9<>x(@fcM>QB%;7*YJ%&;Gzt~SHiNL!rRso2xrN< zMscbx@T#nbi!?-}BeB&tFJPy95yd?S8pH3gONmvePOkVS@o|WQgT&{BSry6y*HUX^ zTsh>A7lI-s;JxW-8Cd%k0aCu3vG#%nH!RMM*O9_PsCZjUc9u9eKjpF%A~RR!y+ zW~VB(Orcq>t$a6boH*odp=F%i^i2C2wpDV!y^<5FCp=T^qwEwJke8RPCOz_EH7g3s zR@o3fC+J0);v@ksDn2=FI3I`5C0{E7@{OY>)+-g@dcGeYVp!qo!$}twhBdDht5^hC zIIuWeK#JV~D*`JNcLC8x;AXxszhQ*$IGL|QKGGWGAgsrWyeeShRKFwdJXxqui+)q9 zIJ*Qp8)2!SE-n!G+xHg?9LPh$Z1qCKqrYVLq*TmWk}BYYIFXU>P+J!2PXFyf5L*dk za&p3A+|JI{$~BldBq=?!4ksd&BF#Aj(KoCfm7R|9*h&)spD|AUZwT{uD}+;s_nWD- zA_ygI-5hMhZjShaXhQC;HewGa&dZ8TsAgg@Fq|(M#RjecRB&%KBiJjMSt#HwtVZ5(b#s>C->pmm%c{B(V-(*} zd3EC&?zG~u?MlQezEl)bhgy5}R zrWjYdP_8-(>Z}YygZFLGh0~bdzUTCKTN}ReLbCekRG6k3q$SnY3?Ja~gWrh<3K{ zf@9a!Xw1~@Aoi>vpjiPQKO2CEJoy{#71>)6O!78mV#Qz@dGak}EovaK({W;*7W&cO zC*EeNH|BuEetzq?c8dW-X+REzh@sz)6I1hGgYQP+R@5ut67PH|u zcO+qx+fzEMj$+8<7)a79=9QeElI&Kx0)w|vR-Zs5JSa^GQWj}*NE=XaH zUPbW!)GYZzZ5?pQ? zm-!D_&YE#BwD(@Bl2HP4{2tMU-I)B3!~4C;S66_oe+BESvzKh>GYg~KCejA?!`R46 zt6=s^v>(i~qhoKF0O>EH*@>mJ{V_Mldwi5U-u#f7&JU;Z=N2G;<43brJYw6@kI8%J zN!S;AJ({zv2qvvkha(5WXe-M{Q03Rud!ty5CFOOZrPiHTy0xCS>U=eL5H<^Ri$Abc z2`kC%2QT2Yn82VXzpI6c&@2b2s_P3@6efu%}0XekSQwv!1`~!>bGmb3! z(2cG-Wy~Bpu4P?Kmx4t7ti1QV4CdZ(6FoNM9@*I-eakf8BKT!*2yA>e8kSoOrd#%( zqLS5%sNb0zY(Fqqy z!DViJ^7|zQb1U2-TxAM9v^Bvqt=|at(s4MoT)M{X^yK@J&!RubIGqUMGkgshIlU{? zn=}VJF3p9lEkkHlWjT3rt`t;Xlrq_;VzTwEres2cIJ$EBe#xbQ!IW7}CsXQMlCt5R zq{)!=tSEjp9Um4>UzYpOty|{Q`g;C%SwjE4T(^Ho?{niPF#?}*=L#1Bs>_AD*C`k7 z?CvEFNlOrS!eb{HeLn5Qp>Y{0czpBoGALP!%29Y0eupj)LEOS)|GQ+i8eLH8;pX7v z=_dUfT`(Xt#J3v;Yq$$OEW|}rG>T^@$|$I@;8CA~#(8vk@nLg~AdHJ`HII3Tv*MED z5;CMIVuZ(3oaEy4WUea)p_Enq0$dDr^lq7rofp z#&X{gN*3r?vgN|2ZS7O2ieiVuq!~%lRFs*O6sm5WJ3Ua&s0PzS>0GHI+X#>OcMk}R z3h(LLExSW!odRos9CuDM4sY%b=YE@2~9s3uWD zBBOADBa`BX>ZYpoMXpB2pmv0`L}|~_1C_UoG<4z!u#!o!g4k#yRz55grOvdk#w$hD z(MB8==o`>A5IoNqV zzIy6Bd7NhL0*F#90K8h=215CAs{!_%lp38j!VAG%1!P}W{2eKZ>Nu_&bb$)8A5H^m ztq6Y`E6BJ?o5^3g3hVM;HL(S09Dk|C4;3VAK~4?ieZ>fa5DT>D!&B0WFZ6G;4NleX zbj|7>G6fLX@A+P6Oun>_50bRHHi*HsnD(-^5&$XlKbuY}M0_~ZP>>JEkWQV$5L#rgT zO@yQ387D^Q+GGJgTHqB0p0B`}QJ4hG+flL`ck!myfnnxf`36UI^$iYD;#?zP5T95& z{G0u+J?_`Isii1c+FI~U*6t(9-KUyn*yyOb7`6Wm9{W@00;eixRk?HVm;2Yb_RlT; z&$#VR?NpQHf6Q{ev^pIs(7=^Oi~o0~!vmgs;bX zhS!lg#0q~gT72AuP4-)9Loq!_1Oa|J3}2Be`gH^XOyB=j>X637WT&7J62%J}MIt|1 zEQA0YaV8pXQ&H$i#9g6QFiB2ILCX9epx_Hi`+w@JS3b}2|5WRR*HiV!fBx6}S<&;NE9fb;iZ0M|+yK|m7~+S$h!e15yl_MdM>8xOt%lIJqw)VG2@yf6tSS}^+a zJ`Z{n@<@l`Q|x_G6AYm(Az`5xNywIIAh#U?fy@YwtITBPkGm1CCtK*pNI#l0Zxu;h zp3WwJe$4_srvMA7PdaBCvx+HqnicvP5}V79iT1eG@XE0T?fiHddvx*vnH-Qu?JI-nj3ZvOUOg4h zIbOlF^F24`zdhd^vg#Y`s;O6;Aa2z*$(50%5VN5LF&53F)1~{M=+M4O^$W9DqCk2eTh6hdN^!<=tehB-3?<$E`UWAd&s`u=8)*No#Cq1e(K>g zkj~ghi1@KJX!;#sDbjEl^?bFLM716i_k0AE&dZ7Vtvxj4Sq94q^<(FqfI2l8O7o4! z(UQV`uq~kxEf}H6rr2nb@)4()*ULHbMpjlVyV+b=5mCW3BYMEY@spUzqhp946G@xQ zD`knF20@^DAftsn;6(GzbVD-@>X8zTct1*kQ{hoT_9=ODQF zr8Q_jSw-VrF0t*CXUQMGpGp%}pChXCpTSv^)9m@E!DRZ9My%~jb%^tHqcNu}h|5VY zxN>zU2^gtbRn$_a>VsWNm^ZwFbb0(h()LUNGkMyS?u^i*-S+vBBe!Nz3z#qInfe>8 z>ZL*+G^{=L_!zxEo6-V{b@Ysdh&DUYfIK+ci%5t%IF0e8 zX3yj3`GzL6@?bID;k1i6&B?D^8S_Q5eq2{tv0sPI?{X1-XZhs8_06RB(O=}jrB!T> zuL^X&(SWv#zD6~TE=u|w8PDupX2a3j4X9o(W14s0lxi#r(}~FKNHa_tF)+}F>#3_q z?-mc`+unzH_I=foer!LQhD}=r?JwIBt^EyP+sOjD>BJ!@dKC#@S~nu9w{>Bx@tVr6 zEtk-XMeoU1%?l9wc9u^kJJvM+Pzv!*Z3k^<9VaDC$xs5);*C9Ol`JMZJ#^qbf9bO9#D(M^=Q?k`D}2aHinBwfPcP(K8YOy`yHL2aDZ9m?l#-W z)|bZgG=`+Jo0c?8YXaTAmaw+38ngYCw$v_o7isqTB+JfiE!TRvl`bo7MB_8s!u*-r zNSnn{8e#sNm^Q6PH+R*jI*_x84V>f*k3x=BzPq)TJ-fV`z8W@yWNJ=^(!HAW!OpqR zy?Z3MEov_Rx>KLFu5tmhCs$eX>&=*2Un`)QuZW#XA(Vx-hd12^mZk6bg}5}12T|W3 z`IbxT>8%r6S)O3kKAGh(2@%y{q=_k|5k+aY)H3>KREl2z@uWn(%z(V+N2 z#4n{7e9x4?wrkqdLslvey50)Tj5P+=3xVuv#CDRgpb?C#JO{@DCbPLmqUiC}Yw7sw z7uh(2-mD-<28Z;mVfUzobohqptZZs5^E*EkR^B_q>>9SDvy+>^<*G!oVu2@Zqnk?K z&l$yTZQaEtHJlibF7P|1$6<<1kttQ-fQ@myVjvcUM zt{Jl*Zx2C@3hA_IduVinsgiZY9UyaoBP}7@D|fv*#fZd${?fFNc};%+rT&{(>c_pL zvT!nVsPKiH*QaUwqV@1mTLwLrrZeZ_agyQIy@C8KlnQ6Jyc=|Bf=5im}MT{YF`zMg- zbq`^U^D=VZb1r0j-V2W(9)hHZ_ryZKFZ-k8PUs$ANOgi1gYmE9SwZi7GHmEomY4TN z^1k938F*1n)N@AD)*am8_}+(f-R*bGYtwW(*w?5|*vCI6vi?&T$G;Pr`R_)P{AZ>@ z7Yq>zk4uiX72-s^#Jv?Jmu?t_9$qcsqtTEX8LG`O{ydgIX#)EPb78E5o1+tAL;j7q zFq3yG7&pGN7jjP=S^>GCg)0h*0Cz0al97T#P(0v+_NF?xTK|@XrzYN<+pJux-$_te z(UOSXJFGgDn1$acE}>%@Nujj8ppg!P-fb0D22PM9sW>4yExLM~K|DY}u*eCK4`N3L zq#P=4 zl883SSRRD$RNDc!mkFWYHcA^_tT+T?u*FJyB7gTk(F2F={Oz#ocEl@&Ax$}J@(6iu zY*b_bB%+ZyE<<4_jZMO0MQ9i0mORwlcsI2{B7(lCFs6&qg08SFVwe=h?o``0G35cH z^ab-ET2^_NoM95s2xyD_DoT#=nW;0+nDKx%(WI0(LGcsr%85cl0CrTHFu+SC@kk{M zREfp$z z&O?9{0Tk#UPZXG;rV+s`DW75dgLMhp|+L`0oivC^tnrVX0Zlaqva4e__uL%~XpQ7($dG6gI2Uz)3h ziThWL8;*i;qpr30Tl>rR_M`7?g8!CP3`d+;P|~)!CHEf`8pWWgkBMH^9>ae*E_T6!b)q{ zcV`4mY%z}c@1F!V1J}~Gg^P$~(PDUQ7edEe)h0WCaV54hd(!yl70~H}BQ!l|0$)P) zU>qX96;J+1W@sNHTjT1Joat)t>DqHo`Pfr%+t`Fg6rO@D{SHI;Z;N2@fP z@viW3mJirnxl88B#zRtHEsu})wQ2u3*Cg>f^y$a=p`Ohw%0O>aU#8Y|8hIMH1NIHI zA#}(QB3-)_j*NRsvKyRdS8|s!3+nt61FMg6Bz z3#||u>}L;;y|QStQD2x{=U?fNkn41sn;l6&&%m=Td92-C>VAGdi#u_E4wU+{j>gf@ zd|f~C+dB%yCk*8W-}I*PzInvi*pd$W)Q*n5XANx!&SukW=Sg~XUP7;jeyV(x9!T2^ zoGr1j8cWMaf4Y5Up~RWJVTqdgWagzwl6IvwtW}a0Q6(c`LB}%a+rkI@H$+2~xEs`; z7|pz26u|KHz(PN6W0tql;LN-jcH7Ylc8@3|(Nm_<0cIaq{TOF*Z2SxP*w~4?UQ9Ow zzwm}&YgM1fXPeP{30BWI{Xn8;b&1ACUzg0=BZFpYcbN3S7c%|kMmX#BnYFp91+&_$ zqT4z)CY68K!2B-Sbkh0=YRQ_CTUMRHX3Z!#efo}k{hEyu-JP@9xHlJB`Lgri?6-m~ z@B9FsU;9a(+`fRsooqakJZ2NYD&pVyU zmQPZL-5P61{fP7OCVD%Wm6aLUyju-M1Xz-vvaVF7ZaYM5x-Ov2cB(?O`E+`Hb3@ue z>nSsQa-0p#Y!5dE{zR9~xg_tnb1Qo^^b&b{Z9bVWu!Z*!u^2i`3PgpL}rnmLSFB=iDkb%MnW~M zncVL&TbJ|adf=)`*dzH}F&hhBHC47UYV;Z>Aub*bJFS#Sx^_DB; zSC8jYFwdi3hZk>23o2)yV{Dmc)^T=i?H2mpZ5(~1`G)0Lk zMJqA6T-W9cy!uoO=`Mw|jgbsa(sj(b&pIk^bQg}hSit(&y=1V}OR}%wW@Z}Rgd{#( z2p76;mejwJQyJ_YK!2O!0mr=K*-JeSYShq*$wr2drm6eDa?xpMWVoM<`_+<;5qDro zk~TE=mL2V!)`iV^lE^$AP1ww7xl}{_C_8=59hyA54WC;ckr#Ijry(N4s-4f9%G+Jt zvTMm0BiQ-dDrz)ql~-W>V|3;!A7a+64IMt=7s+~`TqZHr_db=inlPpcs@H(kB$fV4 zc6@hkhx@CLUstr_|4oew9`lP}9+<_FCGLpg_#Zr@EFqNxjyvfoW9Ix=bWhN%J zB_i>Lr)4L{igVJkF)`0loFGNRFt`6oQ!|GP(X^IQw0vR&QCw>6Fl(ZxoxJ{bet07_ z_Tvm8I+y2a3ce0(k6Vb8_YQbKoLVkam2y6st^s{kXF({UWOJbN@WCo2&n$9b4!CT8uq zxHv05D-Ef&@w>`kTzoHd6``}ni9-QZ2ZDW907Y!&=z!t6I04dBAz+ffqLYKYlT+=B zRaZ`_b4dZbDz@qt*tb`>SioTI85rJE?BQWi(@G%EIK;v8zBA$y<5DvbR7UAWLQ^`= zK1JU8Cb3zF14SQ?;=yPPwj2_Rp_+dg*DLTSrnyyP)M`Lk3dNBk`H3qe%CLm+i(ome4ia0@ni637CqmX$3T!f{t z00h3o(93v5EHnB-GBCF@6P;?A@k(T*;Yf>G>SFR|Hl`Qyj8}z=4Ks$(^e?OjA?}rr zH5zjXk(AuWB1W_wOs7MaMXcB|EjkmuE|`cY<}vs<@E8o_$2SpjN7LftZDX@>u?w4n zB9&ROE)_e6qK$ZIGUj(8jS%(;=LcI(;m!}f4G0N%95^aL8L!VjA-YKoyxu^1_nnt3JqdUdcCM9CBDO;e1gLTyW0B;z~uQT20_-^%fe1Jc+v` z`p6W^($W_w{*RHayaizsR=CuJ0Ak#Xh4|OB^eDb{ zppz3_l)|Rq=j-34S7=mtzwn-cUB#Xr!ob2q1AV&${y*%!2V4}_-Z$>d4$HDEMWhLc z3yPouF1_p=1i`Y3s9TN}O>%S7 zZ<3pvW_-VA7Em#{G0*)x@BexKkGcn#*_l&*?VR&#C$D5t|Bd`v#d9YwG-qXKUl$b5 zDw^DX!7O9utn?TSpKWE0S_FA>jTU?inbR+Tkzb{e4EPT5_APZ9>o69rt#Ny{n=O#-%h)jc(9mz{EUiHf zw`Ofp)NnHJ2Cib0G5f#}rx7%4*!`f_jJd40ngNxCL`_JTuNfxIO)U-Dg*0>LdRK~EI9|8jr(J6&fqR4wELnz27;WxpD-IYBd9r!`Fq2+ z+Kp(C-rQo_)Txt;&BF)Kvo~Si~`30e9kdI8bGfL88mHIMouzVKH^%eECY`}|| z;L+SH%<%Bn0)5y>nRhqRK~%xf-K_ZmoNftx*S~D;uP6~I4QnCE5r5CJ+A*qvTpqmW z0Jrwll7O`aYJt~1NV{THA`>~ln3lp1gu;-~A9TJkwg!p)AaFH@f!O>)Tj`X-ys0Gv zCVca%^($*IH};9ugf=hR7Be!|1?a;7xuAn?Gk$+Gj7Beg)G|OT zSOQ{cf%XT8br6d1mOG|JLo(}Z%bH(r8BqX;*EyXrgMp~82j|j~o086=Bdq}z8*t{h z^4XFTQGRC&qkbX*18M|>da!Q9Sm3B){xu?DRPsMQDt}NU>mT(a8YUqOwz|f>CF*{8O+7Hm zmwLW%5q;#x!}Otq9Qv2dk>rbz9dv<^Nbj0jK!;tmNBy|t9(9uWD{*13SI)&hJlvc6 z=TB++u^iR8h^HUiVy2HrJs{rlTsYme`*sqr^wXp1m#K9BRUgv#9zROoP#37qVFv4* zozsY}Zl*dyxfbrb+mG&P^UX=Qc{SO4EZ=(Xy|;+rmwcr@x-g2qN9)O2em*mi`LywYc+w#fUXPy@Qw)xS=r@o{* zR^8S6=%20-J$54-^yl-$qViGn!F>-CzsO6->+#R4dCv!vC3k+Qeo%2-y!}W@&ahfZ z964brIowb|4?h2A@h(vk=kI@_xHa@m*vqUqzFC*?CE=`H_gr;j}JQt#`ZkE4ftkM{oK)2GRrrw)@F*5jTOY8@2?S)FZopc@XrAx@SdThUfeET_4p{V;babJwB9RLrCm?Q zjep|EW1r-!2kv!PKb~O`1-ez|iT%{&xEp82_2+?_k@SW8_e*%NZLdUe+2biuJ0@}lsm*mZED zx@L}^Ox!k&9Bg`y9DFU2zP;&?xV+;!_42jpK)onX!#E|3Pt4IB= zr|;W#llT5|T)gSVzpHr-Ys8a=cJc1A(eyBvL9<^m(cv>bJNoICTj>o4i|IA@O(ON{ z-%|a2zNI(4BGI=#%q0;khZFKj6J2CqBpzNANh_BJ(p~S)vQ7_LKu%r#8i|O0K^=Pa z4fNB8FQtnw^UV3?MPK^z>})k}$)Vm?c1$GuEKc#CwcT{h%vZ&!LMHKB7e>NX&F=m5 zvmRQ(@36kVp^RSs&I{rZ{*vB>AJ^XV{Fc}05A)~I8z$@()qozdKz{`}@x&C;?Qt^u zW!sbDi;bn!x~YwF@)hDeZ||bnK|yr$zH|*$W;T>ymat$qy`C8mTJ`$(?m`vUnIhpqS^q_cr@$KY@ZJt>E&(;S{ zd~!s+mqc4Ho$I1rVk!jOtx*do^+O&iKu28ULBiIvpy-Gab#d*-{gGj;5OO8f50yvJCWZncM-g zOfNW~QPnb;pQX9e7U%Be=-D+5?BLkqSMw;>o^t1fINhLoFAbm8Y%PS-?PrUcv^a8P zM=QjiRgHb2;?NwsgGCYWjWzx6)jSZvoNX>f!oLKzJ!f9J@G$Q4v&U+;&prHi>gs<% z>*(4RB=%$Rxtce+J55-w=B|G>2nN@Awl}O6OMe;=@PZ==l89tVKfKcCPdpZH}Wi|3F>n+hPobF zh{S<(5(8e!=O&csAM7CKd3OqmJ`JZENYH7-vji!n^9RTdZu{;SW!AIV0|_CL(G{eG z=u7L7|0dz zYdo%r85R|u$Pzjx_9XpYT|$ZV=@ zRW-Fbt3}i0o|R65!D_Ci0b`0CjbxxrW$m$XBN4ymyU(O$UlW>s32L)Gofy7A3ci}g zMr`PrOhm3#M%|DR*i&om;@pB7c6@_dUwBSDe-=70NO=lMgvQIQQeDrwfnXHYPwj5M z?ll(dq}d0cPi0@CBWK9-Qq8Eq-tFfww&y$@y>DT?ai_)5V&w<)wr4B7`hE71rt>VL z0hp|hWc#%knxtjwA_ij2DA3Z@;+ZqG{R})X3?*n5G4@!WKCxe$#uUSYYIQ4({^zR$ z&W=|5J$1lu@8Qo)V0`|%0r&o2ci9kpF8sRyfeR4$p8$a?S4}ysPP$^=f3rF%J!`N! zspgfDbmBER&`@92x%FJL>G~RueDVb>v22miTks z9<}tUXreASpk5#PS8;cGJ@p$ppFT12M{C=Ob}?*2k@%xWJgMCH2>I&ZaPqcm0u?@~ zqVHz>Q;jxHrrQpkQfHiMru*;mA(tVV|GlSY(hpA^?%nmp5t6@cJ=yF!LPkI4pwIlB z(1Nfyb@}d9Bynb=dfUR0blN8htzMf?|9<~c^)Hj=h~J+$BqsSr(M>NT(~G{JPvnZ;p@ucm<(JfW;#0|#Xz1eftsV&2U=`hJc7G5=(-uKv5^v&lY z=ubsYi7OYjtMP|=)Pt@6B;A%h+1vj41Qj+cBIU6s)Xk}OwUCY%g}jStuxcm!6JAw! z-o00?uQ*A6_@bT$x)#y*|K8fW>ZRG@Rl}cAZ=lzxSO0AsJy^Pk{OhVoq~)D=RapG zCa%Bcef4kG;>^ILN^sM3f+nv<+&IeV$g$*=u>g%K?P9RI4wpwQ=9ul8ynLv)pJ!;g!1X?)z z1tjClr)tOn@!2#Top$$bGJXw5Q_^;k^be!dsI{BPV^h3o!BmlaQ}HJ;;&vN(GcHY> z9Qd91#Y_3*_J=N~k6d1>zO!_kTJmMBb8~e~ zD-Wvozu-_OF1$@#US3KUF5gM(C+EL_S5|9P1)gik;evE~byS-b`A2%yi9H z8|iJI%ceB`H>TT;?kSi} zS3G#ix^TIj?A-ObSiSV9I`7V5$QW}Aov+IvSvzLZ>2L0{u6n^p*YEYndGeBjG^pri z^8C#m^!pYcVzK0?-35u{k~~j(%fIeWAK4bE-uc#>V#~9CqNW$a$&$O)ilK?~=$|(a zA!Tw@FOHHB!-f@*_`4Kxc=4aeimT&j;yp;)XdzcW;|>q`xY&yUi(ei z!^im0&mL%^pWXL2a%mh-4lbXnj#f61D<2g}=J9QG?=Op~`Jhj4@}%#?$PpgLez51z z1+RZ27X0;{-Zt?j`X&jdJAKxWsL>8`)ASquAm*j@BxIbZ#L+cN5}$kz6R9P7%=qiO|Ubp4Te^wTHW z={nop$>-OqpFA6`wk?t9bjvtZuGiChew;(E z&%au|@vXYWD@tk2$jLM?pfCSoyZzsC zoY}r#O!09r+pp=nXLXZby5b@NoQ|3%&p0ZmP89;soUxk@>!&> zxkU3zV|$Z-qgm2+3e3_vSR-X_O=1-yTRBT~i4!CG(z(H;>~>*eS;yDIwW`s*$733V z;xo>rD2MycYItJxSy|z9#BBadJpdymR0qr@2^r#{6KY^7P+7(}Gg1m@X-ZF@q%f}m zP6*5s3%fb@2+hqHpxZ^qy#-`PV3e)v+nqu`;odM#!FIBLZ|bfTO*2@qe)ikik(SV$ zl^UaM9Q(7fv)rVWWr*so!xmg~kYFeMF`M-{757&+g`NEX)eW*d3^b)>Mvv3_iLG;= z15w}p3;=a+aq$-OHH8(te=nwOmsuD4)kJ4w8Qb}@byciiZn*S!=DhSk=cAfwO~&>W zC;u^8DotWr*_rOMN|1P-?H&gd2<9~{@L+Lk2i&+gy*FoigSY`hyPF2IF}kZ|O~mFE zEza{q!JTfPbeO`1g7R_x|70e+WJo{#}5;1qfV#zy%0gfWZG+2wbve@@dsuho%_A znF;uqEveZlmh3bO_7pg&jHUa}o-m;jewkPW4gAi?OiHh)%B;jGc3Bk(sVQk`31t?G zC80ViEj4VGn zP+Q)m%HmbY&vH`4;lA-4r!b9iFm{9@$?sjJC^k9P}}!xp>NkE z($V%2)=@W~uy)72s@h_Ah#WCkm#j{Xi>8}x5UqqE69qu!^PQ;rajOS{(bM#NS|ZNZVgd~6pbbCsKs=vS2qb>(nQ|) zK2!bf5ie1H=q<8xcQ_gHac%b4#^vha1`qY^ys>|{zuZdyvGut4#Z}++250Q2H%Zs4k)J(v^yibkgj>3m{PIyJ4bDiQ zuP>P`MkM9Ycb<4#HQFml{K6-^_>=>r=h&US%QtR6`t{Oyns?P<@$o-wJC|-#qn*=q$X^x_jI+>cdH8>fT0)-uBBwbl4Yg^+0wZc}dO?kGIs*>D}*$wV&;x9Nd#{Dsr78eqqn2Tufkdx|0F^_&BUiXMM z{jlRlgzr|8=XUAo=v{ZH2iI*P_ikB0imYR-tNwK>S@lB_`Et?{`ejZ$@gY~zi9xSf zx74gqBmemw{Y+Rwn>KjUVZN8DQ9oT_-TCJ`N#rFH=!4(CNh(@9#rJeeY3yqi@1gAPtcAx6$1ZyGP3t;7na21pP`%&#I{W#yJ4x>j?_OKmzU*ah zM3QaQPmtv!FQARmsnn%)kOXsSVikH+whQF#`MCQ_ew0RNXyEHZM?tAGQ zh4)Z$YMFZ3cbi3D|6A05mf6XS+g<8ahP2*=5wD6}H@-zep6d~xzUpT2WNkEUT>3$8 zYT9LFF+z-Q^Sq5z7rb!PYxJAsM8M2L2M&~p^ELY=Kk{waY@%U(f7F*)bg>0W2U(x zZyfsa1$h)M7&Ydui_`lw$a<6yL{X3V6qr(@`Fq1CF z^W~}P8->GZ{F3=(Al!KH_V5pE`37n2&fgjwAN}uli}BI_nFcTu8o=Ty`Q}kc>1o*m zM;;aS`B==ZudS&-*ozIW4=h$MUkj;dc57bx;sj2+ne{&fH6aUJVrP{0SFLG2X1Vot zliZFz?$a}&x;m|SF~{{aU>=p8l!c%rC?f_RQQB8|DIQ>2iT*a-agb=S?=0HNs;UMk zA)2aK{K|mak>8_83qo$8gXPgt#rpI93H zGkNY=7dd?Fd2x;3_iMES(2U zYmO$@Hz(7Er^eGr^$qKb<}T_PkxeqMd$U)SuOpxIw2@uh6SOBmm%aYj#bQ`db#Fy@ zm-_9i&Gi15NV>UXE-m=%B6^3eMJ@jHR`Jy5&(kAs_w+VA7p=aKI>dVTsY{4aa*|Uk zTEve!uAx8eo_bTMsc?ZNj5#Gms>Y7i7Ou3TQylw3LCT_L3=_y%!y7wC~E$%Dv+M9>dke||y z?fm(ERcKi&emi@ocHQXhV4lls(ai^yt^V)FM9cZ)lOuf)6dKcQZE zb0W!(zLGqBTdDX;;msuK(UG(*IEjp}9HV|W+(|a^t>l)Z`^Du5J$O}Vpqsx;7Ee9l zrOu7HhE^Oj(1ydgbm`x_)hB!Edvi^T$?Rv}P~Uv|eyVFrCQG~@wm!P+WA%rwo7B5{ z_KJBAn#pKn-+%DFW9qA+m#8!LJJcILIYcT*rFz?6PKhnGI^%~AMw7oz(vg`XchD-2 zVf3 z+pVc<9w1BRImxK?(@F7>*}V_FbxhTdGti=B*r^X5AvWV)a?iW~Qur%A}Ko%Ktpc7gd7=uG5JgQabjPZ*!%AGL^367 z4&5HAkk6m46gy>alJ5N|QJ#I&T2&uFvyZ%@PDqSaN4yb6@)llWU9nR~9@uXrUx*g+ z^TmncZ4X7!u+Qg^`@f$r{=8)dnGzaAv+HNk-BW_e)oQRBW4T`JxmBd^#$QJtIet=f z<@`x4i(O6(?`6?&@2lwQ9YyqL!deoxZws~R-s@d>YaNwtzPopyI!ru1!H_xel#^a< zHg!(DJd%F;w;OtA7OHgRO)m1Mo%QtR`rUNYq;>pkMUos-F-ok6{ktwWCa_jb~TH;$@hk435tbLNp#2VWs`Mr@&P{_9Dy{l^jN zgjR=YtR6ypb2dIOzy2;&I&e@u@|H{8{>>bE;sb}Ozjm#d*&E&a_S1)Hr>=|qZT#cp z8eaoBb)~^7y?QA*D*Q_4S-5O%v`KowZU84H+ zpT3}Kj$vh;;F9t^0_yt5uCydMQ2GkxE~EI-c0u!quvTFf!hdMRK0lO}EVRq|Hwk zi;K)vmB?^`i_`u-Ehn$`XL|9!FQ(jn!~@K z-+8%uKY9Nxan8ljboXsu4#Hzy{>g1%{k~KN82V? z*FE?($^IxzO@8HFap|&0PrLpPUNHXNQf|;H@!#1H{>Tb)&^q-$TQFvwv0yY8uvJ!Z z-zw|e<)dv)143k(NeQbqEvWSLVzECa0XbgITB>0Q*JtNrmTAq?cfd!P83+3+WVX!$ zeyXo8<=ZB?xq=@k$%pY1+fY9QzvnH$`v*(14izc~!{s)h!bs}RC^X4L%| ziN?`y*38_-GIp>a0)NpPEP`QkMocx{L>l-r0^`@2(~!GQfR}QUI1D9^Hp6yt1aE8J4>G#?|g%3N3X5qL|B0*BzIMkbamN(UZQ1 zST>Ow9K#5^bze|0gF5T|OpFq}PdeKWn6CLWC!m5#q|HJ6JCt8Y1&-+6K9e#=*>^f< zzmbp~5s$}N3Y%mEa<4>+_cEka>Tkz3kV{~|+1QP(b8u13vWpih;y$hWyi2rHJ+c6yD#LT zScNoCIJ~Z(LbM+C5s4N8)5grc+8a1|v7czP9b*4eZeR2>x-j@b)_;a|xSb;#OJ7}X z({vxzY4vFkXvC>_2*lSS-_c8R99SQaK)MTXu6xVKh_lp9oCDwlfs_Ie+8cNrOxRG5 zYzv6?FK?`I=cHh6`GbOba1ft%imdk9*}n5=irKXLJTq_6>bxPGCod);A;~nyso5Y0?-FV%@xIZbOO%WD8>wF>&B11RxFh zO3;h+WR~&;b3*?iux({fPM|-t%g`$Pl`5+$5V`@*#YdA2l}L&M(a?gE1pgm!LvZi^ z{bmfo=QsXcH~+}R_~$1KdC)Rsh@XdGL3R&Oa1PfCj=4InHq#)7+h=(Sa-EK=%NATy zbq1x$*`(u|GXz&8&$pIk3hirkT$NRD=JE!)u`8VuI!16pkAdgcn==Gw9A}c_?3ohh zA#|B|K`zyCvAIHLrH+dyf|TqbbWYWA3B;f@uxd+l4E7n0B|5GwOK{BLbeKjm1Zg3s zZ(p~9GufmGc}l2<(J?RI5x|+8qCG|N<$T*C7fadx7jc3Uy&Rt-NUKm|rryEjqql{M zkDym(4byQ+83w5$U??xxr{U2>g5a>}xa3@+L)3ApS%TA|ae-1>*@{_{ zBqGh%8Kp7p<0k94m6HU8=(tsr1eb@7s{wM7Sc_=61+|)aU;6_4mc@!u$5-pPi*f}A z+FYG0*vEhntbz*=S(7QqHF}|^1@BDe1bZ4UIDx)8t6oV!9o-gA*d~AghVep2DQD=6 zkvSb#4^Y+Xgswt>Do`glJvf81$PNg(*6X;241-*3&jx}=Y(}M{d7(W|5IS`L?P49b z7JVG0;~KLKHfdT5C`hm4nnYu!LZoGQ0%g08&L9=EH!zAc%1A@HNhh?A;e_@$bZrF3 zF9DqRo^qWDKyH@PbX-d&XhN>SfajyVGEcz{$g~37D?NlBtB2s6rQ_N#+L64l?IN8Z z0rTrcLH5>h8zu?%={g-euX2QKp@Lvv%Jb2iiO^Nd^Reb!K>=Rm**Y$o2;BubZY;h@ z1(jp;@n|g%rG@jAJte*?#+M70Go^G#hOgus70(GuE2l4XPC;KMv;$(<8G0o~K4GtZATTZQ&WFkYr0P2}{lM;<_#h2gJ43Fiz>qXf!MoGA2+=J|MYroZBgI851) z#OWP@MR=wTK(6Qs=lo^g;r1lSlF#`&iwuq#p%{|TQOTQRf5pQQ#q$Z}V4Yz+pJ)~Z zM;2g_BlG~D9VuuWVr2%n0Q6FkEjU0XowXpdi3X=v`(}__ZOs>sCr_Rg=Wn1-*u@+w6o--4i1-#Zw z6kH2IyH5U6SQ=K0dHY{8kr3(9!VIuE*Cvy^p4P(b^R&8Wst_68?a2IniIXL5$F zB~m2kFO70elmitow=)RL4fafC{WGaCOZ@eY+2^ z)CqC81`TZS5Vo~|o$>@H-fGAdoMQnTu&EEmK}-%`*XF6L_Ns{gS1p(0uTauEU*+JM?wsy=u8a`v12$S zWEVKGD#N6B7C1s$!A9ey8S|Aec}RLI7n&}`iWkk60!yS=FjV`ZR`6SuRMPH+KP0O( zO{s0=A{<+#rfD;a&VvCes%zSE~c5W0cBnsUso-XO(E zkl2tf9T2ot#Ne!llxA~;%xg^20fAAMA=npTOiO^TWxSzlygUcbC!@{`VT2F&Yb9`m zk1|${wWrzJIKv2^PCw2UcRZ!xYuP2bkDndG*sDyG3yuulU~jQELw*CGB4<(za+?G> z4Uz1a#q+DHL_wOy^J~h$4WqMoz7CYtQP1=B6(XN41SBsXIa3kFNSMQGF@|-J`9e1+ zvZDxtK=p0fAUc*~>cxsds#FBI9^Wnk<|ef>cJ;BZ;Dj9$QIa`dr)fjGhdds=FiY9( z5DNAJR|FTPlqKg+l_yCfq&j&W(2E|7GzgslaZ855HA;>K!?a;O%S6qX1bT4onvEKP z?;RnWa7hsEap*xleq#s?Wf}Zhj^6}k8{!J)_^lkj9z2jC70a;@wnNdY`t}k$z!@ce zifap}mm(m{t3;C&k|*Rt;b;elyDD& z91Th~)pu+Tw@+k?4?~2HJ%tk@Kt(9HlG6sR*qvZ}Kg-@cTaK4TaJ~`X06RC1J;z8W zLL;FFkWf9O$w=UV=(iQe@qDv6!{CTi0BnZ|WfQ;|$OlVfngfz#|8!r;3$uWaRL%!V zOC%4uwZ2TMgP^d@LNCqENf2AaAmw*}g~n!LvVp+bq{*%hKgL@Isn8h%P=KHG7^%))|YQ^M8rtCMuq~zq;e%kXOcH7v$0?` z$OUpP#QDtb;ap@^lSJgU@_9=Oq`CGO%;ejqVJ(oLPo^NB~ zU<=z?hz2QA#-hp&@{c9Lw&~zKEI1&s*mDbYf*rVN$~5G%;TxPbZSa${!OviW&p3PV zSg>Nf?VQf(n$4q7cdR4`zOvtnjfvKIBX$0CU^+)P&`w| z8^}hb32?@Or(872!{u3$O(*o2LB(vfgI!P}=xsBncLrJT$7GBt07wzqXJc-vk>=Mr zA;v3#0nDq|jdc&f!h#6)42VOJh_uRO)d?MCfH0={JiWfd+Y>WCRtU*p{2IpyEX?Au z7sHBzA$%!jhcSYo+bAVq@sjDB8!|csj3@EY9;!@ruWlQ zP`og}FjNr93q3AL_?TjI~gd3+eh#`mY&%eLI=RxITu79EJ0+jxmob>@$obSg?f5> zd3h##4h!;h|C18h*+y9>43U>(FMWkzf!-%ykWCm!J~mI7u<|i8q7&Kqf!v# znX2=J?f^_zb@@WOKV*MZzR(2%Zfedq$Ypk((`}3`$1T8!y)Yg)%;$N)5Er?e4q66$ zxrpaC$K&@x&VwmpEAma!Dk(@B;=wiM3l(!bxR!juzE$w@^fVaoF?xCGJ-rNmo<8WQ zZpg?XUd`MI{2KgE$(t+;ad~cxWhqdZM#*j8PEJVv%}n;e?tzH`&6RP*bxKQfIIMAPHFK>swZ?GN+r_X(cRSyW3ok%SIg8G3Xd0ts{MwZsyxir&-`Iioqk&&R~ff zm7Y2looQNCQw=j@BaR>{tAv%fsjQKC1tWAB+23o+%InzyCTM!VVI$sLhNIry#~7eP zu;N$LyMwyneSw@}?j--(p&S^@xt-EZWCN~A!?cMn5PCyABtlN&LOZw zjnVo^5NH0JOKFLW)U+OESkCBSEJmqi`(yb#&mcS;|ADL-aBi4TjTnEl$qsG#Rr&+f z^^sa1@g#Bdw+&lD(eXS~gTFe*LWefrp03?7$qRvWRS(z47Y1C(1> z)5?tfbG1wZaan^NO;71NCU2Sm)r4OK(2uv^_b8rkG}}y4i&W-B=i+UG18|sW1ZeGS`pOPC7?k5tW;j7R0q%BcYylG^r6MU>35F(fjm;o!>42`P4iDC{CW7Tz z0AuX@m=N=a= z)jCnDv3)+PF(BMWSs;(AX#@b8fw!(=)*)k~RO8$T-wc36fsotkZiDXS&a z!-fQX6W}6;^ZdGIz;h&2s(4(f=5*Bws41-p=xIdPhO)82W>jS}IF~c^R4tx{lAj?1 zU0Y`}$m=VC%i1!VuWWFxij;XMyBhJdmy`#c9om4grm+fLZ${UF9?1`*&c@ix46Dry zJ20TPpk7x6Q|#JIlQbx5Wa1Jy9S+*D={uWXU5;l2Qv==FDgd{x9b>GDwec&pC*cdh z(5S3|F$^P;GtsAd^sdTfK>HYyl*@*!cg{n90Cj`x?E-e9K`+q7V(eW$oDT6lcu-(k zJlsHc%Ia*sQiHT$?f;&e4-tUKi{gNEA9dElr-P%{*(Xt0ABT+u5hRObx#c&H6ehbgnc zCqS)p85|UB{&{Z7gW_@JD%6^R(K8N4U2E{$xem>v5g1BAdH|1v2kYx>fssDah)GI) zh8;Z7xCZy9&Z()Nm$((&Ev)$lzJD3!`*GuD*7}*M)Ky|i_&j!)4 zE`bErfnekfm18&^&ZM!K+5_Yuxq#EHHlufTn4n_g(L2y$w$11wkSQ9u169e|8JJ zhw2=|+?{}M1B)xrXoFwiW76mZD+A^BSqxPCTA&HSCKUuw19WzRcYw_fNG|qF3&v-* z`O8sKmf|bv7(4{26u2n|_^KI2RM?E|CZ%pQ>!CraWklbAvA5@fXHY}ecuu#*oQt=h zWG-b50JET4p?!lUm<`Hk2c%f6&8TE8Vgo?WJBMpy5}X;@c$^S#iTFOM&JHy;V}KGi zB!kOGhPwo?-36im5u4;8i~yJ|7S*puC-JO(h9=6|F%2}-+Vu4uz!>9Yr-{?mnKNwq z@s6!batRKM7~JoG2?DZ1fw=^-p*_fr8fl6~KWHA!wJ(I@3c!4ko8dd-FtBQXL*D_$ ztN;Q!@N|{UACnJc6PqI-4!WYk#%TjK$&LC{8C5VK!FmU|RJdB+u*8mT)B-_`3_%!w z6Gptj&Vio6PLm-Q-RvaI0tYdfR11njTdq2d(hZ7<*;m*NKdtKSK-LF?M3@s36NVTN z<8#94aDW=d=?iC=O7wa@6UC*OfMPz+m!kq1@(M`kfS|%$Yi#$?kPGlC@v`0yZU$UB zAQ>welmQWRrUT=^T|3Mf=(o@gu3m`=Nm|3GVGSeXq1tm!&?1<)9kkeB)7LRvfa^`; z9MdzTdW{H1N^xB<5HTVEZc&Hq!R9D1k5mMNqT^1W1oNN4sh1|R>0js$)hcy@5t`5! z*D?SEuytZ)0a~5tQwxNo+z_FpC}TBPbfc)_>L+>x$EKOP79}7+X67UMsvDGa~1~Ks>xJk9^)&xsA=TRe2f49I0b1F zj023LF%lpKV0TPHNAYksWXwvNzKYHLpl@k}#v@%L!!T0=Y;3ZF!0Ofk$slvr5?~iS z>xPuBY_j>za+4qi#pD(|D}Z@rgvM|c;IvtG7(J_Pfr_6rRGJ_~GNNXPge0p2VGMIG zFo09%e63e{R|^Oi;Dk|)uc@{LKp4A+1gV}Lr0 z%>^2)M>~?gTiRnzVl!nosE~}k~P8Z509O#HF7Y7z^XdT`fV6Lr~-bGd`-R0e}s>; z%s!gUxePll6R-hnwPRLd*l?z4SZ^Q3rc8~YoXq+Oyv&4IQ{!M|lbvII zF*&E^qeTW%|A@W@G%9id+ia=fh|(C}4%#ZSh1ph1CCxE`OA4e0d6p(UI_r+Kxhmbn(E%rkIyAElrl9W%IhYB{Bf960q%TbW@Ck$sKDK z*sIxsge~lbE3@6xoeoCl;oiZ%u$d1vdBOVZY49|8`mo<7PcMU~x38C{zo*H7zYU(g z2BX2#$c)rpCj9d9F?xD=8Vz{TXu!26zGlC@3_gb8+EWIDH|k?A`xw|){-{LnjhFNW zqmP%tIF#ADamn7%>Oocb=Z)`i-`CSu9ji`h*X2N|u${sT4wFZ5>Or9ohZ#<+m zjhaxAr#EYt^#?!DRWJOBzYLx}p5Ca>%ge{W8pS)F@DkAeV&7`^cORJF{qUH<(+~IX zCI;Y*{{}BK$ZGXAq7K~mHyKesdk6Q2dir<)K5W3a;pGi@dIq4d+EG})*?&(T6W$GE z_i%}xcw$)Suor6&O?d-OxR22c17y8^b2`fWQR^T!6p@2wZ@`1qfV#zy%0g zfWQR^T!6p@2wZ@`{~sZsgBL&n2DTVwiTiKu`W{^0h;kFk%_#d(Zb7*fd{Js<=1?6g#y(l-}ekFd<++n!jkV%D!>0|SwhnX$^rHg=&g2`#=+Ux%p{yek0 z(Dee+2-Z1|qDwF%#xeEGk2jwRWv`x3<9_=C#WN6}H@JA?9?x5nIDQxsL-6cpijMtE z71+--5B4+NpNAGd$-?pef9Qj_Fd%={IYmEAUWkq$Li6{E0!@3er`9Wj)+;ZqS4OQ@ z-t1?FiT%vK;(429$ocFq4*_K1hP;U>SxCsrdT^CS}lFz?mO!J^+-ZKl|pH4}fO; z*fX_yzM1>&59r>Et|J-9?-y8-@#s0y2d|!U4~7#x-^Bg)2dos!@i06l$MQUE>S>(b z2LY(R{zG1ZFaFRE1!h@9uPVs(F}TQ(t>;se`8=Nzt7CmkjTP9hv{(<;)pVe3BkDMh zqLlG`daOTtIV%ybwc@q&D9Tb!mt;=h^vSZH2cxcLz}SOP4#x+1FyaA4Bx7iZ${$>0 zWScpkqQJSslECqZv-|@e9cR(=jofd4fLF7gPiCZ|4`f6Rv7sO)esGZyb$dRAxjQAB zJ+&G=S&cx7*`Qq-+?T0lFYVIHeVJx9YL`a$WxCm0yYzNnW|&RdrOADnY4*`BecYE> zW?${n*L|670m=aS^C`+=P6vN}{xr%E@v5PWA3&MK?59=l$EpW^a(WXZ`Ct9Ps2z@$ zf8d9LIV=UeRZ7k+EX~CE6r}{j&iH20-~#FgJ^Hf#{^}3bRo_4KgY`F?5%Ge-1@jgF zzZP9SkAl~ADdq&-X}}|Sj|O<%0N|6dQ6DCZ^C`+AfDs8Dlof*u&u6CMUfJLRi>n3q z=AK*RI<$En1@G!o%?ZNkF$jHQ5cnWOPj5jr?qUS*vpMFBTW9^Pz6Q`TtwGOY0D1{X2js^P|EoV3&i($-4~BRPSWBveRQufmY_KIm z>EHsvnhLC9`aYkcz~>?p`E4Ls2NzwsIl-Gx(Lex6>)$tiZzg5|gucE4{L=3hHdCNa z*ae(V0e*BiKGVdfFv)Imi}frfbJnAR^C$p{4uRP|?g}t40Q2l(a95hhFps2JXBYIA z(RukfMTbaXUw5UxeHCP&S8VNk9z}tpm?aI*Z@}~CQNU_qxLLPGxZ@cj6K5hJ9$@gY&+o_h8#wLtrYAD;Q~ z(ZekT1%~lnIFMj4KN%%feF(ISdu&H)@?Wnb*`yC6B zd?g*b7&PJ7ii|W?Ow>-yFpfaZC@+}rY(Yg9S3YvBNFYz z*Ek*goplh5$c;EBQ0U3UwgGU(LiwCx#J%$=gWql94BJ+9EanV7(~#oB;2H+0ZFCkl z%X%)%kr1JTNTVi{jE#`XIbTPkv}~lKiSu_5d#oHF1#rRkRkBeEvq@vInD_7Wmq*Gg zs=4#;46BMX5oEFoN&L>wRu zCCXKZv^-;!H2X@VjhfK81z8CLk;y3??~m_lm}{QT&QeR(w#%)F%mCL;DTLob)lm|EsjzdE2SRvwR5x- zhrfWKx*$`>#`Y3fL{7hI-k7V@v~zlcD?kRx$}5qjXM{V1&x5u;d-Oie(k10KSS zn8~pCKD$7JH25B}xG6IPqnvGTD)uzUt6gSqmR3tpGLfAn7`gpSNStUu3c!3RydBW) zz>;=dP@*)#SrR)YX-rDo)YAF3Nm8R^j$SHpAiFZ&SZg051#`ZQ(iSO8N(G6}UpPn0 zf)!XRRYyrpQs&$(T;!~V%o3zIS|L8g(0b(L7M8S;`n6zvDnG7 zZ$;QEG5%;EDo&at=Sc}l3uZ;%k||P_Jv0YvPk1obmc*NQ&5O$L>#xvuDdQrsooQC8&K^cOIacFjXGy5&y&QS%i>0YR$r@Qu z3Y93?;$qv*F`OZ-PMU|Q12m89P`>ie8Oj<*33y>D7c7mI(%qR-!OpJDl7%z0XDiV_ zu|cWB5SZ_65S(;D`>Bp)NLCcuUhPZw-fJ}d3LMQye6QhuuGFWpMpMXD? z1L_F=$&L{ega?$y2wmlYT5u6^=1N$h{C=?rPGmh^X^xFVK%!nybUH3BNZ1vEj`^7c z85uDh1xlf(zyOvI3~6UDI4sgQ6A#YTO8+XEO#2XkvLIjT>AT9}Kz&q1q9Kwb~X8+B;aV z$HGB7Na%*Xt9vYRkRcItyA_m$l)ya(q~A>iW6kb{^K&Ht2~gX^e6f4MxOfSRl_}xM zgA-hNpu%X5MJKF8lC-4=Udc2mF>;l>2oxJ5IQHlXUtt@i zY3X;1KYXwQ1Zh2F^(eiPRIT?g$)VC(8Cl#?8##TZeIiy>ES3h$8!))Q^f35dpr_yr z14!a@!ZsEMGS1)#fi4ne0#8FnDI0iwn9#Kvv=ACDNaYCmiATD{VL}JO2i7KO>5W;2 z+eVO2te0T7=mZDGAkXj;I^sBfIuL}3yK9+;K^bC)mb58I-#&MNm*7MKWrxv(83pXR zgfr!)DdQy{jz`L1xy~STH-ad}gSCQ@XHlL55(UpG%_e_&y);Xl5dvm(0P?3878nbrS&;M!tT}6R+?E`KS|Reoxf63z1dIE~!`y@o zv3VTgo)Eae@$=69Ea3Qm^Evb3`PeW_#$w4V7-TOb+%!lDPNa5r_<=lPAdsNwl8|c7 zeo=rys&3B$eHKHq)q#=2kQQ2xM3_n-2sY1GXxDiQT>>=rLBgd7hu9p7c+XKtNsE<0 zA*eGA;V76><)RQQj*$@;aSQR7IuMZ;Zw@lbZRvKbf8-QiuQaA3!`?(ALY9#kGedz! z!BGMRE&@B%>I7FMXKY_&Vj+Eru}G>p3FM9-l#7OIF}G`y3{r@URh(o5(jyJq>R1@v zgvtmlRI4TmNy~v2NT;S?;S!6du)U5GuBd0R7ZLpC0G1GwFHKJ|xNHjGS`liH%Iy`y zjZ(T|Lc&vNu2N(YdZMsS3)fid5+T^+NMX|d|8Vx+e{Ce$`oCLhTCIQ(LFAls2AiD0 zIAd_e#$YgDz}NkVwYsZLo$#FJ zoC>B3m$oa+lWVA2CU&>WbZ@d?+xXZgm)3gk+vFT};F1c<5}e@j2N%0!`Cz)~a+e8m zM4#of)FNBPE57)?^Mt!BG2=T3RF#>!gs>FR<__uT3CTJqGuDHBA5Jt}abGJ9z*6tC zy4mbmC^Ti1XRk6HKZZ9a)1>inV3u0*+bEMM6~cC|CYbgUjGFF{{LzT0;sLQC3t13=;a(Yhs{Iv3g_UU6EFU-Nf#%ds+5ePLPp+VdaSepxsZva{aW z!69GgqHivj0)${kW>FoufIoMrt|7bA7tHl9oX^b)1{*tCg262680@1WUv9)VK*5FI z4rT=d<+;HYT^`}{6$k6H8ye5z|LSw+`0wBU@4s)S0f6ds|9>lM?6kCzCYXp@O9rNl zm3_;y9ScgNfd==v6~M}yuIsPS!l$E`0<10i|y@%0q$ zhl^M8Dr%?9#G+}&3h7>(myJQGL2h^5n;DV!jqYAgFK%{D|Ge|~{-nHo-l(7c(A5>r z&l?_!j1`XL_lTL=qoA40_vFVujjQmu42(Cd7?JpM)MK;iKr7OhR=jb6{?)@HV%m># z^R72f?8|*BiDtzkqnKjVC*oLLtCyQc=e5Q)|7K&YeAq6QsDp60xT`5*_E_*tpj{{FjlZky;l2JV=&wrbgQk-W!Dff%@q)_;`-IYJww;}pPp2&1igQ_iT#UG=|*#aTi zVA{@=#N)J8r8T-|tD%E=$JL{4Ek<#pBfa;;A%M!ol%LR`A%+{2;kk-uVn;-?yeykz z*@h+e)=Ycit#}(UoeVQ)=+_?B=%42r0Bbaz8wGZ(Jn@NZ4w|F550kp`{^@u?J#x(s zmQB7bJ5&2!+j*~+z``zIxUmSXhe@h1@<)F61noS*Do=1w5{S>=Dj=Ga6BnFrbw@{4 zv!XJ7)hRMPuNl_`yiYdd2vg+QUTAHPd!o z<^HOg_nYtygLbM3;DXx7mOy;^hRR?$KURb;4t~5tsps>`Zd(~n2;E!hxt?RKBv8Yx zlcvNnuQZr0rfC%`{Ejc^K&~^)UvQ)MqU8@BJN@FExR82LDLbAJFDPvMexa>qzPuBw; zRF+!q<$b?-T8?{CVy9UZ$-4nF@xo)x=?1>eZCYlO>a9wQhH5j3iIsa~iVplCcc(SG zg_j#kaj$ga+a^xqY`SH;UW5wEsmdJYq@&ArKMW0kpqHCpHkq-g`So&^8UI|A=RDD< zh?oEs@f>c|Quj`&@oIipZq3B!MHO*zNPMy)Q&Z~t)8%9i3M-I!5wYCDT->wUA^aaq z2rdTeP-Zjx*d$yUSuEI_#GNt%qC<6|IlsO#%wOIxRk|v-#Y}DUTzDX_YRyx+7SQO2 zZ)WAS)TY}sx8bOsMSAYfw*!v*J+Fy}htpA)2y;?K7Q#2v0B_KG1wkhTisA{5_Ozeh_#aYA!=DnV4L}&%J7?X?W;|W9qm-p1-!3TW= zo_Ko15;rk_=rl*SV(!BqVUv^ChkVn$$0aj(4A5CBra_(7^R3wQG%o*;-?}L_vTQf( z%%jjAILluLZO(vcnaM?jh0O#KQ}_l1J0gs;Tg(?5D7I2F+2r-$ z=hB!2SBZ5(q7QV%RA4FM9HX_&QyR3pF5>p_H#S-44_FfK5rXT^1H!qed4egU2MCu! z_>nm^L6F0I$7YZP;@Mi<;s<_HGVQxe@tZ93E3n&Mjb|&%6zf6r>%R6!%+xhJi?KS> zLF0kG{lZIebZe3j^+j1a$YxW6fb2`m4KgdYxgdHeaf1(OAtEH`XWTlo%^2(NAR3DG zJK@wv-2B!Ay{Mhp)D6b0fG5>kYZ%CMwtB;?&N5R-cs%C|I7z(9utr_x;jn@pD0oh! zBNb}(sLcGZjMde9b^U0m8X{iY~PM^8K#w6BKB3N!XJVmdr|Q-vA#pdU+3 zxdk@h%{L`CM$98W|C@v1m4D{=;j_wP*uS*7wP>Y%h6+zQp^@wkmwiNH8)8#?7^euz z={-E7*EbW;-Tu+8^EhYz%?Uzz;-ka*c{~#Om78DsxdM@5%;bbVqM^CIS$$y~k*~-O z$RX3u-`G1^ZkT#coFsnd$yL%D_>lkglG*1R?aCzXp?&a6G?tdYfjPav?>Ix>7=my3 zTR*k%S^?*9-syFMx-v6%(c@`sDmD{@N=@iF7gOI_iB*2f*EXOIi!(uNf!5FI9dFok z1B=WqE|O)xIT2EYvQ!f2@3L+`BSP%KgI+vhGY-6<_6FPtm^@n*InI>K6!+eVaxGV( zc*RY3XsXgYp{l%Nuf$YZ3XgQu#!f1x$1~c|WyLxvp=>8_FRkZcN^e)R=7gz}Q zSpMy%ZfW!c#SUn>UTY>0$fvj_t$bgB?cUNDlIlzcZm~)vzrc*KWZW0zx<}LDREn@T zhU$BTJ%9|5xLJh4m_&B3#ul<@8bzY3_6(LjD8@+*&~iVIKKyjpHx7Hu1PvBe*ML2&tueqV^6?oEeXZmM3FIWw!v(Qu*;*5sh|s5B3_>-SaE=yN5*1 z&~awRoo!wQQ+^{}Q}xb#sUo9LM8x|}aYGFBIeG)EH8iCH&AWKlGUNv@O8x7biyGy-qZQd9SgJSRuYEsEA?DRQbe-*Wt129a0i zIC60@T3QWzW>HKNK}V{@cKzf;n~tWvSH#_S^~+AD(Jb04#B}BrH6@CBdl`-j(Xv}$ zG^&w;bUTg*$LTv=)jigR7dLS~ z1g!R|)>gZ8aWLgYpXF8(Pe_c}&)`u0EpufT&w=C5N52Hg9=oyg~-$ zKB)uG`f7`vu+%i3;~j~|xB-d;q;H*W=imjbr%g+qb9iDq9#c4kpPSN8`CmqS64_4fIa+!S7%i0>}y0a^?g5j*J>a6jsEWeLl1zEC~I{!ji6mTg!oJBtXJBMFsO^_9= z&W0hNp655UWCtSCfpq_W^^Tn3PMeUY& z3dME$sNE6XY4M=M=p33K6~2w$0d_>$?5z-1xS~*IXWnMpmwmA$wnm;06kce=$lem2 zliu)<)6$`u0hruURI}-{A_gy*+hOsR$*Y9_5|E3hnfDFrm!(PWv(1w)_GD9Sbm4Z1 z^ci8*i9)JFQm?M(3$_@`7YnUG{EI4F6L|?XBpQmvEjfTVlj6;B#+vWQjR_#Ez{w*~ z-pUHEcV3DcGOxuUh$J1@rFuMpSYc4%%%f(LpiYSuwu-@E@a@~VX$wpGgJx}KxX&|h zj(aTb$FCHzIf_Y`L3bP3jGYI_mb=-eEHeXYI(8+DQtmO`D_F4MOg2K&UQhxb`8lFi zs;^}cJ!RU?rl<>W8V!uy zO+J~!%H)n0emwBZetd0_d#)p&T`5}k)`clLGHcZ}@sTwP8cA0#@;M})SzX2I$^oO) z5^sq$Gob9R{$7-=$VqMD733hiKbTeL21|9${gpLv4VU{HPHEFdyQ@9 z5Rw#&6<9RBm=1*gUXp3XTfm0^p!7a7O&CJ9U?I#&;YK*+40E|jQyn~0zwOMcXZUHa z$@e|O!MueBx(|NO9G^0P_!FU#PtFVd#V=ZPZzwbNF&p-W9#3{#`j`KL|MI)xc~-&( zYho`GoK?<&qGGNOqp0M>rR2O(`cQ3(scX|OX}q+n2q|aftY(C$9xnfZ>>`%p9|4jv z_cOv`RJ4l-4l~SP;y83-lx|4oFMuyl=bRRw*q(7 znev%#IMZ}{aP2!10N2lTE)x0M<_;e?nZ$@=`042&7PkWLVw<2lL&rS3O{Q*wwHFQi zG~aZ;$;kWi;QUbkRF^j4fp|T?8)i&nPLDwt!pWnS((b-?lJQ>o0`|tL=$V`B>ooFG zMY5@TYHAY9ulV$7EQ{3j^wrVH>!U`iGxOauk^_@7bFe7+T2D7;CDIa<(Y;m+C zdIq<*pANJC+Rz%8ye3RG!xJ+DpXb2X#~i%pM1TYa{oD>J zaTopgg%#yA#5=*~ZKyTlgjTJ*e#;*atv3Zm_^`5=>%`KC*frBL;J4&+aIi^mut;F| z{Z-Y-2U|j-h2=01wMC)YH^^U*33);$g!$T@NN)vqT-j zN6h##`z&ST2F(N`wN~%x1+3Oz8#RCGL#2>+8$=QKm>F;k@{jJ73Tsls*T?BwVd{gtDKG)u{P% zfGDZYXMV-te7VADRdmH;wRER9lN;ol9YAI24OpU%$Z6$CG5bu$7DM)~v#RfOz|^?U z(~&||_)p$TI>nlJnW*5d2#LrD?d3;Qw#bW@x(z<-WUkz>em(}UJ^>GxSw7FxU`Sq9 z?^G!p1~#7b2TXi^TRlyn+zCcBeTA|71x(^KJ4i8L9(4*HGpJ$-N$k*?id^IN^`8Da9WjGVsTu-$;T6#qm3DL$ZcD($H|7#F$?qt17{ zp7SW6$ArCycsCJJYT*7qA#exL((#$6rHR`xU(V5w_!>@bWp_GLznyO-mX`rNz-HYJ zNSK<2ML4VbI_|m)?Huh)v3fBA-;Y*vczABPRVIZTC@Pmi0q~ zyFg6Hl(e&hSea>lD`81QBZ=-?_nc<}Kqp>yajIzQXQ5Q}=A$m(X%{TTw2Le{O#afEAGW&g0uS1F%X{L{BoD=5ywU zoE^22IPzKj-}utMzeBAbf#u*&d>OLx`};QJMfjDq?2umt1kv6r?F*QItvnGOI86JQM^?9K@!jWb}q$dcR_2l zh=a&(A{0@L$da%5avw!;IV~q$T25~Ki=3Po$Vm@!vT!CR*;-D>K7bUXsVh|tXfper zIy{JrvN|lL+j5=WT9f|SO{RG3r>AScmVFY`(8azs5DDEQ%dt$N^o0URZ5?A>Gc|mu zh3pj=o;!=RFCmNhSm8(vf-o$j^Xk%Te6>6eA0fxdbzaFuyuu)sL%Up$5feNQg-v?5Z5F>$cFB1!y1gukOX_~4RykkB4TA6F!u4zO>F zuppM!7?G=!U>f#=2B-1}9^F0Ll6PtBGb5-;#qns}d>HpS=JlGOZ)8gRH?j5_JW z@E*UcF#_NOsR}OeiVI_P|He@1N=5cpg)hx}JaX)S-;cTYLoP@}{f)Q*=8X9h7d{>4 z9L_sEWERT8>bA4m5R2rKYVet3n87Jp`r5GvC{Jj((zZD-J zBmAbu^N>KM$}*?kvC93VAaPV;xlL9gV*qW?jBXo`s2OMUfmqO#uY$=N@`XaD$e`X6 zexvSeKSU%pio`;$rf$M=4b4kGgf??tYT`pEExMIPVA(m)^5l+1{Iay@e6(s%TnrJg z`?C77x>oD$Y`XP{i@{K?KXfz@xSZn)*JhLE2O|jjvO-yT0e+^N6#BD@Xlz(aD?`G0 zdi`ZbG(<2+j9;94xwbLaE~U9&UNHEoC$Fr+mw7FipY5YxVwZ20CWQwwQ~{t?kd>2N z_C5ap6Z!wzbpGGWN;X(8WCu$xM=!k{8_Hv?UV9w`bmOu$tsh_ijPx&}$y5*TAbgIO zl^02`JQQ{6nDGla&1NS%yws8UVm5aQ0%|3lw?sxE6aDdE>BG+Y&&Q9S%_0Y~jEC9X z=0wdL@P)Y-s>5l`vE6ogohj}4&f*J<%6SzatCHi=M0K;Z1?CE>6gTpEz4>K=^iCDA zA^CxaXMW}#ZTHM?kVM`Dt2`hUSN$;%Xzuzh$g@|CzC#{4rxK3Q(DO z>_EQ@{TrgFqe-wwZkrWy?rUlQ3DDc(ICe*K0=7sU&!tnx^=FRq71MK`)N#{qspH)> zWEq<@ewIEqaWk5YoWbAR3>r(Lba4Q7m_dWtDbM!I8JhR@JX(JL_Zd(krGB83zRN37pUW=NJvwpgX2Wss$g64EJy9}iS1clV!< zA3t|UmBV(r%3(fT<&c-Ia#++=4yA6pu5u`|e=Bo1__fSo^m~~@v8&i~p>1xW7)F1JM(} zOzZb5hn94eL)%%E!wu|qNbQK$be#jCN_;t8=Mel|okP>V);U0-a4KRpl@7M*Oywfi zIK7XS$!F@^&&!Z4H#N)r;nt~}s2Qij4> z53{ajxTQ*r7@oOaFGsL9z3Mjkw{f3m8u0Muk@j?tN9^7kr%P}hRx531O{ao33PU2J z#K~zRC+Rct2gcVsuZlM}MZq8rVvg7R){Qp?+4tlFgYw?3Wl%~icWNvQj^kVm1f0j0 zVR!%Ie~hy z?;MqZina}lr}18RLGp^D2@*SxBx@^iUDkR7%8D11daQV`AKQBoHRJPJsrhN6IJR{~ z)QOcV;?osj8hLKso?KN`ZSn$mMuj&l){;lUS42LeOk8n}#7PN8u%e~Bew$9(Q{9uT)7QH}ns?JeTxgfPrd>WbWCix+Rm{+wp#(*9coLtH`2SMI6JjFIFbb7ooj6O+}fc`eb=7 zqN~Pnb4VUcnkSam7@aiZ(`c$nqQGi9)~GkS$Ikqhj}T>&hU$TdG>B@R;MM$mh0rk9 zpCcPl2M^>N=pN;7mUEwHbt;MOFumW1tJlUt-E%o#%Tb)*6Df_02Nm!{>S_>f8A5}J zNStG3!Znj166*ya@kmSwEvbOKaw|LhHAghxkma~e*p3a$decXh@BiV46-a(a%w~a= z=2M8_CqVz8mb`&jt%_=D>}4S0sij*+o@#TZ>dLCC8k#_D^Bkbk&&*jl+3y!b5Pd`t z{F%)Z4y)-YPgrc`$z0rp9QCHi$?C}csMp_RInMK6HmsA@5oYiPe1@n;ydcPx+Dx4C>+f(DrFa0 zpog-p9>z)bv6JJ;p~ZbpzpM}+sZwcB_bJAUNZ(v+;R+@p6f0~H?X4)gLN$(eV1C;* z>cz1fV>&(rlo1<8 zv&S+W?E~3wb9LocI(M_ho%K!MEm*g&it@5XF>E8#Ny;5B$|_OO$w#k8^`eXAAVhD( zx=}mYS6@{v`UfV<>Sya@PzBsC>X6Q6<%>kT;;OYocFR2qPQq%k)fhB zhXV*eq+QF&@SG9t;Itu=8hDE^S2*puJ|+0+K{K;8>wqAMd#lbTnpdMA$U z{J^&r@MwxdHW9Th3{6PYB#tSi2NZHFS*Xu? z5F`YvBDEriF9R1;+wOJe1=lKdK9`xJ!0Nkob}ZY0W3BgMdOk#Cjlqb9<5SMv$#}34 zmJ#~58%iXg!xlGE=e4$US;zsj;(Msu%iKbJrggGEz&K1uY;SB2%e4rT=q({mQNUfV zaC)d_BaF|8x54?s-~Jh87o&Q|=~wRwwq5~oCq{sgN+>p1b*>VuvMD+n$iVvHUf;eW zxg~o=ro64**`~Yc4Y*aAuJ#@eNIhF$OGa_n8550)5}W$O>bexrV)UR*gZ^3`~u zQOQ0^FY-&}_2oA*U){~CFlx&)`_@?RnVG2CNQK-3Q!nQunG51J6FRvksvj7|e5~-L z=qr^wa%{#Z<4f-c$tlgZieN zp5UTWJ6>eu@QJQw@lL!lLgkrvFUUH5(H?Ythq@4?T&mJ&EYBQ*B5+|so*Q|-@~$s) zzf`lX%QKBYdFFKzoLo;X9bFS6qCkJRyH!{OxdUTreLj8tz@QqHJw|JJW``Ir9&0S` zeMuFv7>7x)BgXYrT4jU&dQm1@)6cN=n=x;9F5!shl#7dXQq*|J*;(YRRS)gwDcYypwA^(nn(B<6{_2l!o zqb!n=jIwAITcrqQmmUkUCE2K$jP%C}Fg}dQq%=2WgVQHpNuM5*RF;@sl3qQwVns9u z4l7=YBIlJT5!2*_I6-;}otDD=^q0&4?lQB;iTC*RU8Vx};1!9dF^6S;M7ksMTAr|M zpn=L;bI}=Juqaedd>;&DXBVl))~R4sd4WIBT_U=CVmPcb|Kq{BN--Q%A15NYnZ8I~ z{j1S{uOHU!8UMfb+&TXH_y7Cv+yA}f=oSEVAONlB&SjDI-+n>O$q9IHW4Q)~3Ak2B zaROgzX3%Oh{L}R&|6-HhDEzW|miP1b^!myCwd%~D64-Z1|k@{@fvI!|}~G21`oAMp44NBpz? z^Sp79pT-5k6ibe%8<9QdFX*@Bt?YXw(eZ!e?jMLJH#IM`*Ya z)0qR@jehq!wtFDgqVe#)4ltZyHAtn<8lIOg(@M1B;vGO6+=)W*M6cJG$yL~sAqk5& z@dSkrpX`Kiaq70EV;QMc8)8ZQAZXoXvY5sv2rLS(25@-p?|MIwZ9e`JJH zbMj_EY~LSI!?Af~%X5s#Lz*}kdtmBA6n#Vf7=TWS-}?RJZKLg~IP4~cmwQe2>{b^<>UO0b4ap(PkQ$OWXN7bHE1 zapJXR*tr|ay$y~}PX{CPt%Y5rhz*==;V}ZvOW6Vtn`-w2WV!s@lMx`PxBz-7Yz}>Y zCWwXSUHSzNmH8S#)o+z?Xzs&!k(lHJN=x5+tk3a$!}AGGb4BX%uYR<2148sXvB=w8 z%Sc*$47ZFL!}vvFSmzZ5T7BqL_Fe>}uA_rPBZlo}dED^W36Gq?OZXHoWU9OrN9W=? zf(dKr4F0h7bpbda)uV{plW-Xiqn7HW-rmvA^V$=LUplLBm^`a+D0OSZ2WlLgc2!ji zMY^a(i9xqC<4CBQ%`lU&@!bp-NsepoI+es8 z#YRr*rc9Sb0IQ2`#=eYmf*8a!7de&@c}b4&LzxG%dDMa4>%4Y=QBtqHx=F-5(n20Q zO7!y+4V~yo!01qC1!A74Lf%#xwvX<4Z)icC-_~dpTVPq!;x4qb^Pa$g>{BKKK|aR0 zYFKgKUDGqc9n^DPmM0>|o7HlT=nHdoDri6UZ;J&K{Adl zdpv+4RA!Kp4w*mS@ROLpA8Z3?LyC@BA%&K@35{5%HWm0;dogs=*b_9@3BvI6AaxNL zx10w2Q7T<|3bCpv_>DoK(FFz_QTW}6eTSEA?e>5VqjX$2N9Ha zVmAq_+GSzt2090VQXnxQ2gnyu$`uw*79YeuXqMHWJINEgLRztqa?1gIfhY~5CQ*(Q zma9@0aIN!LfCf9PPqj_#H61UaxtEA6@rnB^@rbzR4xH4=YkZ=BeFM|#R#tNLIZ$2m z>mJFGMqM4SP3pMwEOpG28isYKHbL1Q3kt{79$8|&1)rG$Cv$BguNpx$Y{@r5=MsT7b{cE~?g>nB1!_Zw zW59a0b#kZ9D2&(Fi}CnXaiLC*=aBo&(wdzuO4CWM64Yvz>ExObacx7?w>uY*CUBPj z3YZ}Z9f(x{xSMd#T9{d2JLU}h=l2KZ@5k3JvnbbR+@WPbVlZx6VR3Fnz9QRaD=W4S zGTrA~1b^FB`P&eM{jxabeSRQV&hT{us!+V+zRy>`nz%dPB+u=T?F`G(Mf~46CIv*{ zHEG=vcyit307g8XqrGY~Md|eGRVZA+*d?aj>y+OhJC<`v755G#E+=x}muF*lq8==D za)wH{wSOUoRaP?jd*U96d-LyP$dauLD|PX30YmW-H7kJyNV^qEb`hWEkTWTUB=7}AZE56I<+Ieecllg1+1X~6x@u8Qry0K;+l^0g z;&Fxt4$2U3A3&CDF+6ByOt$%@2EhT|YRETJYuLdZkxxvzn(j1XC7xX|0uN3fErMFz ziZ_ZfpJ#>)>8xQbX`|XSYR1TPv^LY7LF=!a#D!b;(rsY@?IS^gkQfjG@h5{o2RI11Lb-lE^3=Y~9Aj59!?Ts$Uz}Os5;zP<_T( z(DIxzXWbi-kki#}?3qD76Wy@}Lt1URY+Ltk75+*SMJ=1GjEtGn6xj8@?;4O ziVASnkcArD#eIJF{_)T?tbgYC!)Gm{lYI^Q%8F~tO6e|hSXb2(XsS9d*EEyvmjkpb zy3V1V0*!a`bOn*^PK~mF^Oa9kWOb3{&r@@hqOa2}1vULM%!R*?h&RTK?sVzFqG;Y0 zi%xF$(@Ec?Z^C!Ucb%U%_&Mym=^OCr4$BEpz*9OXxNl;l`(2OG*?s-O*w%Tmx79Fx zb;38-zbww}Hn)f+7Gry?NEZet!Smzj)WiTCaEhI^XnC)%*{2~P_YU}dSk0A*ZGDoi zoQZMUvONBbkKjnU+C?EcNAZTp_JrM;E_s(EN5nn+IwEYr-8g&*28i~F&>@J;6J>(k z=+T&nfoSX#ve=gY-@@Sn3 z&xx}N&xa5}Oe~q{u+sL1JyW=g7!5}IKOZ?-wlKpuFdNLtj$p0FCy6r7!En7{cy}rr zN1-cG(s$l+_i;qqC}1uOd(bg`aMdox&H1t$m_&&0M8pu)^*LQBow5^l1j(a3Q@=!mZ*ws4G%PEN(~c| zccvDIBx-Ea^!tO-j8Ljy6k@}~;7X2vrs#GyjDQl~TtU!R;}c~|qWfjHFVbFEdd;5= z4)geh-`CjW6Zv+vXsGG#Ws}3881+T!CZkyeYOu(fXLmz?Zgwu)F=}Lhpx^it{Qvqi z|NmUplG(Xa`Jy*)Uk1N=0_GQlH&vy>KDre%7t4(8f!YtHJKrTiD-Mc1Lnw|~HkhTj z@ICa!>WXw}1crmm@*fU~`u{V>A3lp{`~#B6mjOph+#&~{pm`1i6jo;)f?KpW5{vpoT<>9zO5^M4m!|ig#7$v3dJH>*Cu^@D= zDAfh%PLFx>Cwz~;HFB{q>b!0T9N$dxohkHl96u?E8aw6Q;t23J8oZ^NNvfJZas5*~ zsgnpJH*qqD?SMK;->6g}y`%KPPBRX*+v8YdYtE54#Hckk0WFt1pR+=#QdT7GLz)_h z?iOqhKx-=;7I~32L_E11$u&>#WKv`h+g3+4X$zz283oxGOM}Rh<~XFQ_7}xrazg#G zbjTNoc__=k`Dbu6&G!{V^cqpe4a`O?XCMldquHs&K0Z@;IVY>!coVz#ntDUgj@1hD z7ouOPAiq}W%Ct!jUBp&;>2pMk+DET5l=K>9bD6A*Vl)00E*PbT8$2^YPi`i@#Y(t< zg5nyz;n*EjD|dH*KREvtg43oY%1iI(Y1TFJKnLmOcfk0S+UgZ$7sjh< z6W1MPpixeqK=?$#fO;ls!m1tXNE0$=Qx`&>;3B}{F`WbAuo{s6)%%#TJKm6ZK@FZx z%=h5s9vYDw-z#MB6(+f_%S0HH(W3y(=(vgqOjJR&3A z3g)77iEx}XL#mlVbQZ}H3kn0R`!G>pW5!Vp0H@@PQ4#oll4U}6*H)vVhBH{GE{4Q0 zd54uDNp#3&E|=CEtbLWun=BrMty5Qd-On+>$4eZ&+DV-f#b^d$8WT{snsF{3dylVe z>Yf(bN;!}j)V4bysjPguO9z@|GO#ZtGPn7P@<}$`-G0thvwl3_5B&IAwkM><-FxIM zq2pn9Ca@JSKHWS8u{D+*2&rlvK;Y~aF+@*d42WdFzRbglfugFtcYSB6!%Qnyeu1oi zC*cslj?0L~yub-?UifQF!x3c0_o=U|j*mb9sAW|WN{Bv(j%vv#$N;J=Nrga+*3}1< zC~Ri%KOZo~FXQV^gYf7Y{hq{oZm0l7xIm4SnIPk@nw%;;zg8apHnrt7X(yVFU?Eas zIbt(pCkm9F;&(utFh1!K<5c4<(|m0mLB)5DVCr9RF9_i84`QYtU(?P$`~_K&+T%V} zkp-fG#0R2$dI>t2UvBf>&S@uuSPT)OgZsHlU0;wSSelm%)iqTOF=Pe!$h%wFFkynM z8JK^id#;iuL}c5BJ!6#aQ<7NY-ib}d*BCMg$O3(yyyUgiSd^G2kcZ@vRlBSX+!d<& z=}$!tE{?75fd^a$jUNwX1e$b+nte*>GYAEG?NqxY4^PFuq-0Ula9G?J+TQ6T{D7^d zYVn^f+S9EPhId+)ypA+#+Bj=~sPBh^5&!YEd9JBNC?msj4A1d8rDx~TAnJl_L57!N zc*qHoeQL@Zx)~oDbLa6}N(lCH(c}ukaJ+~9fMnQGgN}}+TXh9x;&q0VY{7q7&$nYC zdJoc$iWu{;leq`kW&$TagHtn@J{Bc`y!i%TfxkUqfNu~S{SNC+1PsqxgTTjnD{YT{ z^S#~$B%M!II~oq;U4TMSI0$mLQD&ZCRe%13Yyk^BjoOL6Te?9&3*}d(PBYKY4Ud9e zaT2?-nQxwEl?Ldu*+ol$Ux4AaD$Uqju{j8bbyRmp0VIu4hnYg_NHpXwm)}Ck75iw+ z6=Eeu@Eou|lx7rVnaLX{)&|cGGqN9zoY(X@^5KYUCoElREDA*?&jlv@vdMHc^j$$u z2t1!fAxL&D4((bxeGAV9}gXl{h8y(lK&s(g)MjS6& zRss5^Nz7kxfxe*KPg$p@Jn2su-LJDLUiqts=hVgrVL7Q}T^Dc$v!k0RC)OE2oTWJK zk#?ezDDtm}uCC>=O6H^#^KTTjjhuEBKw%+&vlSkB=bd*~g6(6YktfhmRA4kG6W0WZmx#0Gi8J+8>4ex#>55Hh`iA__8<|2U7jd;F$Fk#E6TKxGs+UWVX>0qDs$E>f_%suyevQuvU zWh!WX<5Vh6{wt78gGaBG81Kum<&?ThQ4SxV+d>i@5u>bbwPAq#2scZIlac&L?30?3 zn}Ysr&^?SNWu}aHtkk9^gms0?L>X+_2aFHSdMS;GABwZa#P<}9iD!OnOkB$i=G*b9 zB;?-|T?t;e^$oa)!Y{|-*Lsb}_Ek~q4#gi(Aw45C*iOhn*F)Bm22sMN$7jrkD)d z>phK+%6Q|*AGX?cZGgXbxp_CMA}5kn5X{T=)en>u`$GX)RFUN?^i>A3ZJ(_2M}oeR zh#ktR@Kw@PAgefNM+=)CG=xOepN;<;((%8Q^;uP8LxX1L?&|9a8sup2o{BhKSwcVA zu=60DP~;E#@tu+e{MPIM*VFW99F}swocAhUhNch;v#(=o~#zxvLuCl-RJfeOnY!e zyrG0TB3bE2hy)k=&xeOPE6%(BZw~B?_%p|kp9K*4Wz#V&+qopYRE^@~OMG?p*tEXd zPi!ldt?PAB0^+vEdXU1-W0Ms2>c>NlV>SN7@#E)I6AJA$5}l74onlC_K3{HfWV5R5 zcsIYDLz$v*|8Wb&9%1TGfhYJUC+!S)9cq!+zo4|WCDpE@u6#{C!v<*${dItoxMa+O z?i$_Wmvz)PsytQ26|mA;RsT)<7@XuFB}u+5)ysJ}eR{hDz)^$+#fw$`#$8YtMQ2X1 zM{5COg`U6|V;C>^j5R5I zwb&B8C-W<2U(fLu6OQCFU4!oc*QRpf5%M}d_x|ZLva!sJ=_$!$X5aBpxCn$U zn&KLbw8em;7~c(>f~xHVK>(TSzqVAHag;@C0fBYcOm#4e(*Zj*sYA22de8ez^IJAg zw(GMJ?XYv&2^4U3ekL`p``UH%nqNO7mlx>DL38C+SldN*@^c5)`eCn0{|=qU4=yzo$zXWQ~g3@>JvvZ^W~mi#J9UVY5` zu*~=JJ+nwhv;{klS5a!q8kdf^aatlKk8zck^8;$gStGoD6)lvXSgP;usKUg+6Qi$A_KZ%^IAy9 zB%WeV_erK&ZbzplkeJrZn!?gbW#x)eBX5>gP5X3eq5?XkcFBrUbsZlhL3kgbIf$0a z+~%#8g;=G!xbLn~dKY%zIpGOKvm6mwkuM|#7OG4bd`xG1a@<4l@LsP9+^74`eQGO= zfLrLS4I0(rnW!IdE$J7lJ5%D^g<7N3IdtPeWG+zE>9o*N$a3gI*C2eoO~!%b>f{~1`0 z<;2*mmiIOd&ppFKBtI0U+Rt-Mzi92Hh78YL!*kQ{TsN$B^~CV38J^Yj%`ByV=QI2Q zjzWtW-g=Y15UtKH8M-?<*X4w>3-A<>v$(fghV_5~01pwu>jFy}k<(585BOSkY2M(N@0Lc!Ac;ir`>VPvR*zU&3)+ZGxg zp;l`=P|3wAJ%;pjRLW|%GLN1F=uryo(aTUsPgwZ-{dTY3io>%_*N7xzLvP>}$ngVS z>(t7FJaYm2Bj@fb0W~3^1k9MDGi5H$rf!IV>Te zTVIR;Xy&8ULFwqMjC7c%tzIjhMOr~u3-*%Z!)*iuaI$bL2ysy7zm&p&^IXt9D|YBv zQBX*Q-fug!Xw_Xh_PaI=L3{G7eM2=c!ZWX@pJ#reJ_;{(=>Vr9i*StSW<{;gK zns3v(l45yn@|+te>qoRCuoDrd238b~nAoN-KomoKNb4N~%}xFOi1=Q=k7c@xtkV1E z6f7jZLJdFkG~MtgF^1g(;@c>N=nz)7(#73$h@8cNd7kbQz$!YKH*;jp_lkJtx?6|H zG#^McqPwHz_kLd$8t_~ulHG+)Q)MQHsNcMW`liNga;z}mtejPsJrvl*=a%(aR|@?f zepnHC==7Zwiwuf|qJm-}mft=mt&4J@8eJ|F7H^%E`WV%r>JC*dd17+umMB^rR1u?8 zwaQvqbyh(nY;P!*8*p|s_b?a{c~vrVa$*(@QR6roKPo9cFJiP0%Dv7>Sh2IIj@D^2%4rb=L)1wUf>?8teisa3H zyxO#46&khg!XW^naOp#VUP8IW%rthN&+FqDxkp;FK*IR(Kn8z&?UKhztmrC7e6r*# z!0aum9PL!q^8>V47HrAeuO`H-+$OsYP7Cr_Os+W#Dly(TM1Y9OJEOV5W`v7oyly5z zub%nC;-eFtC1+nwiNP5;XZcrdP8-=?p!;`_JxbDKkGo>UHorB}6g8Vl-pWz)E2+NS zN=9_%#{+lb$JZ`mC99pcs{rg)S$s{*UxYMPD?WPK8^2)(hyXvm6H;Kyit5SAihj zP?Mh0D|>(vQ;688yDk=uNN+{#p(u0b&3tkFqbw53s!Vg5*=gk~w;!XG%1@xsWG!?Y z(gs>LqtUuSP@;8o1k|d>WmcjARA#j|68m@tvV=6QX;U6q$$}?}1)~GDsK52cC^jA1 z$g5f+|Mg((zW*KYuU7?fTd4G4tj!0_pCOy7WBPGi(N5hFFu^Wub!kFsu!1l0sox*LAO1GX`D9tBYuh3 z-BNW+@Sy;yf_M71CQ@6x=j`&seZh~UzT?)Z^1hiQ~#PLtJXD7X50Q*G1+AI`@s#XB)u`yr|=8rM~ zh*bnHm4s-I;&mmqv#2BGlV|ufh3V$B`jW(OzPMnkAxT5VQ{uu` zP1cgrUSPAq-h>h9TUR$7Q}k*l9ri69IBvK@VKYh2enwUWOoz07vJ853qh{((o- z7#^^W&U>w!aWCqgb;er!{So}(Z^OKVTS6N-HOAOIPwy>-qN^&E=&xnrokvwM3AF5pqfB&E}ZLpo2GbO7(}hnBH>kQfvlO70{Ssp8H80 zhvS*saR@i^UV==v&~$~%9_xtG-jIBsw9}1UQ1=S(P+cFz22{i8d>jhN$;WqfbNv^1 zkb1XDxkIqMOGxxy+{YyM%4V{!6#&-6@(p!lYzxWqpx8&C^y3zm+uwTAL3}wpFKkgY zo=_uvQmSq?K;P%-i};q?301(b(P?z{ISQ*CK*q8x3I*KDXr*l=vx%b@El8mWJaw`{ zkRe|)f`;w|K&r^S$h9kQhx>DN%bJjTK~ZVSZO{@A@42HJ=fTnLaf>c&fI4crou+mA ztby8~N!?3DjQDN!TGa;f<>TMj&`?h--O>+o2<|Y0?9p8W4yn_+ulE2ttZc+o;uy~2 zbW|ZIopc}Q=YFdAQXcF9P06F&1JB#echa$->8xV`{_0i@Tntb(n#E1&W^v>S9*50u z>l9#&r-kt^#XR1nHYOl4)-Vnw* zElob^RuZWjK{FQMx(MmsWXQQYQ0`dBKdljHqfTpt2_Jl-Kx{GH8sVUqMuD{Cn&kNy zGb1B#Ya#X!P*Mz6nO}I=*Bki(=abrBw*umw6KTP7tbUrTkAJ2I*uJ`xYsP@FG`yL- z;qkn|K>V#-Zv_Yax1Q20Jnb0r2{YJEG%Jd3lUKavUn1lUnnb2pZTH%JH&VnOUjwG) zb`us>H=1!Biy#T0PyhKK>)c&#{zP7{DQdaZZ58Gz`GM96N}-X$A#(Jl`Sk$L0-+;a ze7K7arzABnTNbyBqXq)Et8Q#6hh6xz?U|s;FbF7suoRlIuu4p0yrPZW+ z*qcsXf~ioQuB7b+q{1@y!3z7}HToyhVmCf$I~`=UiD=Bfw-O!Ez24E)VFQ@`Cx|_v zc5Fm+Ok+TSS6?W-_1g+w*p|k1p3p9k*7|ZYV$G;(KDo;5vOcz*s|dPHLOW1vQgE&J zEYaAR-Y?;435irh2L3>tqU-oDMD1%tKE`IVnWPsz+ra5WzDAOqyNDkTd5#9EB1F{HbMmA%&ISxJtOi{Qll$2rdY=`k+aPg8e$R|$o}zA{c|!q0vdT?K zCJ&^4Y@@X?AN5B&2VU#s#5&C}Xf@_^JCd8ugS?s#b57V@!hCDDj_dHShXWjFU#%^(nd6IP~ z5Q6&iIu}eO8ne8|RxLvV7oNfHutv~BntJ!GT4ybZBx!EA(#1x78E!GtJ%$fNhR|3Y zNpGh?H_9*fYjjk~{#=&3i2&}wT|pVL(}~P-{Siw&WiS~&u!uC}QDw(Im$6T$8YP=p zNoOC>!T%bi=MQlu0;{=}iEZYF{*1Z5^=F*d&3xYT|8MgCN8>eSlGqWxCi+ZF@tb2V&U?8sSfJml`ZDDb*f!LqPbRLHxe? zPvZA(zugUL;I|TW_}|Z?kq=Lk3t}uzw>{Byfl56)R<8^~jA$&hC+f>FX_@KD2PX51 z(Y>UrAG$`b@yt!rrCk$tQ0}?5eRnN&-a9 z&G^%-99gv^D@B(uJQ23K`;;wmVcW;En&eDq75vB*yOjtg=Fy5$pkzu1I0h(huvV8mdnL&PsJEnn{8 zVbB~xJf+11*`>euS%N#P$-E?eKi5`)Ls(AQ74A+gWZQ})9&^RECKykRD!NmAe}Q(N z_u0vf^ja4U%M*=Ul>O$PAO@*H`u}(4nO}+Sk_9?V7PV4Cz-PiEHak$DoCqLIpZDU3 zdOR?2;e1~^q@jAXMxa&X3CGv#%c`sJMg+!D9%FJ)tOD3U!*D<2`hffCs4XPCVpTxr zQAA5R(U^@o1*M@n@vDERU&1wwFAeoG7>0W638V^2MK)gJc)S@%?3ovB7k=g8saI>1#D5oIDz?dTRYgsS&H1OaiudfIAj2X&4i3Bl%_g74J5nT zbYXo-ZiXN)Hi9bdF%@fVqq2aFD2OrQeVEZ8&;A+>X{Yxt11AteUTZ`?hQbBCLsL~w zn%R|gD7L7f@ejK90zIUSh8k>aHjHD;(?>9c$3cktVteVR5PJmCP9X zsEI1JL4n`-mBrRh$5~xxH-cw(F`G_gUVCJnJzJ=%3;cBXtnKo{e`&kic-D5AY`R(_ z{~S)f`L*qG252rRpWoUpm;6iH<*k2hyIg#F`1@|lBj39%KTFq9M}MuO9%fn<$-bD) zM#5J#!A$|0IN3VQgW?@yyhk}>g1YIaXLZv!%PR$@dzE6qw+v5JA=|*gkxkPjRw?Sx z9^5>}p&2eP&JZ4h>sN3yQbo}FsG*B3nYLj2G)@~b?F*=a4C|yuGfs0!0mG3){%h0f z3hLRApjhpXKZ5_}HNzSf%Rq6XsRPziCy}Hsfn!6?0_&v|8 zzzlVy-5zU}eQ(n>f$}*|YVbS#v}LbtJ9C}>ixpXcoJ>_A&es%V7B)s&UeD>?{y|?} ze+hBSQ&ichCnuFdr)+A85vFSyk7) z;ah@IKcV-`m=Z@a?=yuVoY_F}T#hK4Z4RhA4N$$Qu3(k$5sh<9>JLrd765MKMTC!l6T9*i-9&}~BL*>REr=VC6>Z-^J-)ol@-V{avVw|yFPS-L@2ByaGy=3Hoe+!4ExmfX$??grbl zwWMI}oznX+rOQKCNXL@m2lJq-w8N&yPNqAKDd5Gue{=YF?av%Pe)feCIh_;Pw8Y1f z{rnJx9>91r#$SqXhOsCopZS+D`w6J(AEoTTbBFOmYicr9>Ih-p<$YfN!kkb@lqPY- zb$;M+94(t<>Qeg(UCh*5&Pxap={}|akP%g)9x1WsK?*GTxdpER^ zE$iNH(X;|Wh$N!PIh$yb$vHTHGq#B~U@*3Ej(4rq-4e+j&p!K{bN{;E?foS0Z#8(v z<2`fs+&hD0P-wM!g{pe$si*EGh-)AM2J9>yTtC87>B3W~#?z^#jL^oxdy<{2Y9No^ z8b0qn?a-y>lmZ=b&~GyY7+o0r^SU(OzTgkX$BD?me4Qbbp)TEHDIPYGRQedt)g?(MKFW@6FtKi#fx}kCH9Y`9eF0EDO1*^okR7sD zPQmgA0`}7`I?C_Q+!l7s9h{36?Ye~BN@albf?)sVyoA3yFEd8#!vEmB-1eN8tyAZv z&U0Qqvc?{tIWJ{6FIcbA)PM@g5`35a-+Y(IZ@x<(zDrd5E*o`-725?w-@|(KvGS@| zc@a_gOfNi=Xdnw1UcKa!qH#;j%E_@Z)>P!6*NK7CK$1|Sg7>N0-jW&{whU^wL7f8cD26JGEQ%Dt6c{59mR@M4<)ulLO5+- z6f0pK)LLxgy7a~!GGdb|B1-PaRaMl8(%ZVaq?(P$w5$|2pl9lcR3;z6@Dve<^CiRR zC$Kb!L-w6+8((^FJ-bY%=`?6RtdURRig*W;A>_Ow5z65!`EGea4~-_xM8&E*>?J@0 z>WV`vG$)Ik!U_q{hipR^?JF{PUA!g(ddFz6@5^eHM0#VqMRZijedQmU6X`e!1v&*9 z?wyM7k^R*4){vOLS`25yKJT*r;8KL`m*q8@%cOL)Jt$+`58F6v4jKUDhl$o$D5>zN zHi=-b?2~x@fL{NA7!<&tcC(GIZlB}EZbyHUi}n<*KxetwttXNC<+T}e)|&d-f)8F`{6dOI0`}Tb3CnvHLoxau}$gvw@oVK2Uo@x*drDk-J|T??1UCSo$A+ z{_GvrCC{`E9_|BDlz2w{IYzw#qn`JhQSV6d?O36SQ=>lV8Fkn#66>$F>*1og}=p^v&uAwpE#eIy>ai(`!6{f96g z)yg8s#vdG)Z%`&al>y^VK=yb)8EN z_mH-B2J{1=J8C@+h`#oXZY~?FhR|T%AaIxOo)PJe)H(GcZ1|v}lduN!y%Enc!tF&O zMykmN64~BjSj%v-tp_Jr`dqDR7$+auaoTs2>b~kFvHA0*mjqwH==&zUBsYh<$>9`n$qq({Bowb2bxL?P!Hd^YA(Pmi|+H%P^3w9YEW1T5DTw&5GZ(EyM0Pw_aWh zp|0><)3ONCn5St;*hj$i9PonLuCfBk4(&yrHXz`qKi_s|va4V-~%jVZ(mO5K4*(V8iM@Q{X!sj}S%-nJ%dlS~4r} zmRrM z76lIRe9#_r?D%%YHmE5D7fo6v>G(#PMZ;5)0}(15a2C?EO<|2vmSS(}NGI^i zxG-uw6(kr8Ey=zX?*H`1;&H3~aM1MC^RK*1fk!z}Eyxedz?M{Bi=QXFpQP`<@Tc$l z@0RxqY@wH4Db2V9q{rcJDfHFrBmVFc@_r|#?P46^HPF_!g#a$|$HVe^fH%&z(tB~> z^zEG1o1b3=hYV~k>T9X;UUPaHKYm=2(UtCNVLKp%x|rc>0gYNMH{(Q<-I+d&wuUu3 znbmJ`F)t=c*|YNK6sha)^yS94)6sC;2fj$EEq)GIk2hT5Wl>&&WuxP#=`|N^pvt+K zIadyr;!7Y#q??sME~As6Dd4rbLjcoNxEN7Uptan=LNq!N5RbH41I8evIu{l0p&QWM zMD1D}qb8p4G4?(?jL~W%F$dvNXZsIc00N*AV}ppUgHz%S#(}HF9#u&57()A@UL>rc zJmyd)E!aUC5|um_#Z7^&@hpG`34C%t>RUyiW9<}CI=YP3C|~hmz7-!#wJfI}!6|tj zv-nxV%c!O3rmECr%Ew0qaWdYD>G7xu0zRgfql?G1LP)n;0VJtdrIQw(9p&wokC@et zrkMXgtNH|Wpag~FTg*-G8aUK^&>=S zI*5N5b@S`e58lM0zY7ZSj{MkX0S;%+v!02Vb*-lYtBykp6lFA_4cK=Qc<6E=F~j|& z4c2qGOm)*R7LJVyBIQOBtRqT_@oHN^lV2O*!#VjV?&Avs-No_XkJvw57<&7>nk=nD zfs&oh=rkfUG?`!!|9O$wR7nth$L>k8oPGY(A)FkPgXCwLkcqH>-O80JQZ;4r%>@HM}pFXTL+ zLLU()s1Ue)xxUL_yOt%wZM^62-xWa2;f(c1GaEIs0HeeF4_Lr92{yIL{29~&ARlNG zc0VcU|NCG6F+?GZ>2rT&HmtHDd}Z|LkO7W?ds$sl0rlj(rS7xmHe`p7rkxpRFFq)1 zE;TdvS5=24i*r(IWldH}a46W7CrY3A@1^2#`TWB0iz2`OT1rYV%`YjgE56`04=kk5 zUpQ!`^rsZ3c6V3h)fI&z)`iCPma@j|vX1Pul=2~e)9iwE*B=apQ~xgizs}?Tn`v(f zqIYEFpg3o1frp{^xV-2y|4YYhNPxjv5_hDA^12LbNo#A1`uzobGtzS3S9S9fM>Z z@To^xycY0U*D;)cNyc|U7no$fa5mrcIpXLa@wyZ0Cu?fi(H1SJ{knAhD?h) zL6fALIxhuWty8AJ)xWYGkd=jq7Xi=lg?63$s)DP_@aTpF4fU3oB;n}w zE6R4eIV`K?5Q$-VAweHO=N$Ztk3@0IQA(Qe7tJ^bXM(y{`yz?#T@fN=oHzhi4#~2E z+D5*^WtQd3j6^!;+}P5N%WX|jQDt?0s=~4ln@4_~L8>$3w-7~~CnO=+u#FrqgeE!) zC+^_}Z1eH2wa6jBzw< z-zAcH*OIOHeE<)9-1r!&Q-Jf9)&jhA>)H`6?PF?)J9+~lu|OS|&(}t9b3m%Crv!S^ zYoWuR>s*{^_)ka$iewv>2P*I;nPbb&A3;E90s9UB?&8e$mXN!r7ulueVLprGSIe-e z3qMGFo?Ip4_6{$pEpX7K(K$*2kB3Ns;aRNm>l-Exd$_ZOGswkQ%O#yz?rDRqXNMB^ z^9Kr%R2WJLxElw%SoeAS3*P*>!c1U`spR`Y+T6t((FyKN-Z26xo$>ETZs<58jk{T* z{)Y<#!s%v?zbAt;tqQn2Tb%N3sFXFPeGdPJL?20;u|i77rZa#*(KJpka?-)v;(PclBLdl>o@f7H$wb+X5)PA=*Y z$tc<)5d;A8rmnsSq>~+i0@k25iwG~|Eo$bxHQ(#ym2hp?A zfu(0$wSoQphWGi0zj+S#@}F8*eiC3TFLu~ooD>>9)3685`^GGYX948ndx;z5Mk0%v zy6EUGymP7>e*-j^$Qkc(!tEP3A~R=s?}+=_U43Tj42w=awHcu=C6`1gmyGXTbubq% z*VrCNu;W+oXmm}xLtYHnFyK~dDVI2sg@=$c?1xr3KI$QTVP`(DnmEo4fX^2kv(VgsPrPV+HM~{6k1~9CTX5ZPc)Bt zTS^Hu{m^zOL1YqU2acYKK2mUxpfEO*GpT@Y)wIoa2GVe7X)@3Z;Yy`gPVzA%1Oz@L z?c=L#Y9~6CP7cE@VPUN+;8M6<^kDizRg-wXc@=-|nqf)b5O%uGjU@%fwHA25zL3zw z%6_$vaV7=3$zsG@{L3we$NtXkr}wIJ_}%44&ky>HDp9w)zFKkGK{g_ui4FU?kuR!q zhsE%Mn7A?|`#|BI$Vr&wbd6oXnn&HBOp%+Efko7;W92Dgj$`UNM6SH|Z2x7;HD?{| zTV%He+-$k2MnQ7I&d!bDV;XgWMOkcZY|36 zyt9`{@&xt$qKs~&N5Xd4ej{f9ogT@ykHhXT&$OL9^IC6UoV34*pAqdN%tr_mgXzvP z)oQ843#dt;b(%fO9xhH{q+3+U8;RQOx(1`_=7`<na2>Z-PNFId(X%0J#%`aeH5 zk{oc-6hM)^BHt=19gl`dXBX7GVdX)@ci1{5%6Phh|0}!cTO^F8@$73k8v@khlzj6` zyYI9p6Pv6v2fyF=xIg^ObDc)?(?h4(S&6rS%=Xv~_NC;IDzcL?>{4?n<`Y%St%4h} zZF6K==lVs*dFo{Hu%$c15xy6wF@Cfcs1#z1#58=NC!$0lDv7AXbo?P}OGmMD_RwR9 z2RYSko!tY_x^uO%%uZ0QJ(*uJ{1mJqU ze+)8IYPy}7)?pZ%vXWhPb;<7OUx&VF?1&cCOq^WQFHHMQyeqvXy&=6vA|2l^E?2nLWuN7Xb6!-yXsYT_q*b!SY2~V(F zQL-so#Gb&dl@uX4w4&H%;3mX-S{ke9mJuE6pp{7{BF5G@{S{(r7Dk3TO;S)#ba2aw zttaK9NLh>eT$RWgt$t#Zi5r*8MY32BSr^)_l$S#O&k&J~AyJu*Mt#V6bFt&I5u4fD zY#1#Oy|-GJHw)!0yQOi%S2DU*`Ee)fFm{?oyBB^KI+mA#2U4Vux8GQDdI4-yH#` z@`@c+k);4Gw~%w&3YgyrB=E~kxy7!LT_K-SLVH_O+=R%G8jp&4iu2mV&&7G||5BV6 z5pTt-uwv*`fsrLLeyGkX@~ZPn{!pD)Azq29M$s(RoWb8}^t%5}jb4VjUhNg>6*066 zUX|X~LeEX{;QprIn>w|mOCXc}R;PCkbMpGMPA^0He=pN3G&1b0vogIvhRE4p+>a)SgA*4T|KpWRcgSi)f4lSukvR5iR?jRpzrqt)GZmLK9VsVt~nj;?=SslYNRi2a2)9^zNsWejs!0c9sYBi$$ zBG+D|*oab@of7+Hk(f4OJ@d;d*m*mCOHFZN6!5ww21f)|;)H1WH`=Ue7yH5*^vc_bQ$jf`FrZU<3XGNz7<95AC zJm*kX6>XzbzE@+!u0hi8h^?Lw^BdmH5wa!X35Z`20aK@Vg4a6B_h7BYiQ^mC;ti37 zcs84PBfAT}&A-2;2J8wfzR?uJy&}npoxacBd`TA~P}jMvk zg<~d#4i|I__gp6|zcYy-l^wS8`sj&~$k1)uiQ=PBLP3qSzBd%c2ibvx3D8C>Q4Eg? zB@g=B;K*V!kEfCJxQ?fRWZ@S}L%>CHMAt>fYMbnSyUcFGYbfQ4cJZEK(2HV7P|u)W z*Taw}o?}Brne(GsgdL<^CJS&Eo1uC_=2!Sq;~>Yyw{WfyWp{CPZ-WF3AAZIQq=QyXjp=g8=fsA&2;zZ% ziQ4Tyy)*Z^jlXmI^8-+>k(*ff-Z^V21EW36o_N|d3wGE!W+Q{+LL^b?BBTZ}jPGQZ ztn->;!90DsOdvDeK~2dyuN4+cY?>B6MYtpY?{36>&m{_(`SJ}tuNFl2_l{RM^HcJy z9Ug2525$i_QK*xrpv9uax`xsoG72{%|M~%QLQi+G2P)6UU5=@10u29fKoTLyI43<4oUM)@_S9vA}*-M!7DZvjcko`k8&5aIV5U zfNArx$#QZslOa0!e4B_JA7!TaMl`Vsv3Pp8Q*=C-NeYZDv)tDi2#XpCVU{C3HUk5w zA4M~|zqgnLgdu~B9nsoQ;|E(9i3gg^sb0Gf7Ag5~>_vac_X6WLE0w;BEQ z(Wrv}a%o+ys3c$5!9iE0P_ZiHo2PuKJ;1V0B&7z;BSu=69FQJTuZ_^xW!)1Z;OdpqZAtylZ_6L&kl%mIc5gFmebTNl87Qgu0sfTd3wtSDty;W zO;NJ>E6ShS8^|@+V1!FfRmmxIt+nR85-TH<;G88GBjrc-Kc^dg+FIQ2L4q;VdC%MI zmDKXc2^8U&XR;4FJZuhd_RSEoOHe3eV)qRDMw!ICwIKws%N45#sM2^pN^OMfik2BO@9^0a~3d+nLM8``H2#K*kRy001YGC3Y&tYUhsV%}I0Pkq^DtcY_b zIDuj_UPD(Nt^MDqh@;3KBS<2;0f>BiB{+Tgd^|X|JRb@;nIghBEHne+vS=ZdM`ml3 z0Y9AcS;wsexb(*{-Be6msovijfhM@P52~!Vkpn6_XeQWPwh+^dGP$52V0}=%Re3<{ zt)T#1|1nB-po>4JzuqY1zBp|-NG*Y(!_scCV*THn7T0ITsH)+EnaKOOT1|pfo89P^ z7+JF&i}t5p(bRIE%>#7mTQgc!a~CPtvt%lYV9FG)2JC_)y4nq>@`$O1IsQct4w3bY z@J~0f#|HK{Za=?ILLszo%TYmM8g64NkV!vCtO={ba<>8H>`F*@rc=%)z3I**g=ok? zik7`iOtGD>@TrfO$jy4QV)rJcnrM+)b>oqok{u#Xw2K%7ve2(nJ(u%1?bp0`j6+vk z#wxC&O%wn&>$I1|JKfR9uGUo$ht-0#=1W8*htg>gq5z3r(a>-ed>92fSZBI(kch=e zjR^7_`uvV7unJUV+i4<-vO3)rol*(EQZA}qo zs%Cc-j~@Y)gB7Sxx`r`A26qb(sVd3ZLXpGwe2-@Jv!0%TSBIx{CUh-r>!e}X4_l!U zt`#~pY{W9awaDcS6J&lrmWkwQZ0LwVzu_TkUap>S- zj?_%C+d6SMX#j}vfY{IB#Zty%#js}N z3w9KCAyQcqzr>+ucY;2P;xVL-W%erS85@}jXlST(f=$z%WBF>Ej7@yb8Rj_@4$@J@ z{I*AxX&?R}l>LKN_A^AkF+e?qSUEPHbcSh~^kWC>_dFa%hB+CF+z2ckfHv@wq1V&y z65|YcK^s%K2~?lX)tsRPFpEl2he4k~Qv>a2z^ZD%X1H}!o4eR4-QxMq5M8U|sBojq=@)`!!M_n?>2{I}Fc;lTvKZc*@JQLV76spK#`*N|6JClU5SH#Oz zz7#>LQT1?QN z-8dn(QvDCJQ$^>CoV-$h=7>L~F6giRuK)ix>i-)&{=b>FR&T{8t}wIlO>BGY?6Pju#Icz)TJ zB{$1y@w+ib2a%R1FUmUk5bSGq^uh9%eyX9Hu`{je3e}O;lFQ}7F$_?NT0jo;uHDKq z*LwLjt4^K+Y`_;oh*4Lsku2q+>bjR^kELwB0uS_0@c0BHR_zSpW}Mec!#hwD zB8$ObcR1MLWZPIV1W0YVEr5DXG?*Xq-6T+csG(HX2Z0DX-hi{!?Yt(8V~r#(rCRYG zzUa{djyC93Z_($I+523trjUE*>!UYBA0MI5qi|%;LY%sFlocfHD;}ok3=7*MjSvHp zDjGJ>&vuKTpjM0Kv(&zYGPSP~_QL2m7f^tTsJmp4xCEk>D6IGyOZa)yUH)WUKj5@m z{`DrOxhQ|*_Al=RTmM?9-m)p0zp^wA=C}p0F>OvggQ+)umJ}sh<}dfj{XgKDMJ*>7 z=k-U|m<;>zC4mpG`A1s(@8l7iU7=usxE;KT;Qw%mBeE-e8S&;4=|}!%uXPy_ht2Ge z&pGKel6!+ES~NZ<=_$OVunL@7RaQmVLoAtW9q2kF*nZV7mlsFK^*Zq%>-Ma z%hyU`Llrp%vfJ=M!@WV>LbNYUyxDChFauBVMPVlk-H_FfZiXylwqBq##dOzojyo7W zxFF|L8^ak@RX_`)P^v1uK*GIA&gWfMLUSxy?OCQ0wAkz7QbJd4wX==#UF}|Ky}BKm zTgxU<3x7)^z!DQ8uIXMnHd9s9bOYG-Jh~~ajf;WK!M=j(0WRY$u`M3rO)Zmh2sy6{ zsX?XwL0;oykoA*>H*-GJsF@)nFm&3>w-Dr8JXzu3T^O=}GbbR9kOVsZNLAH~v;bOL zQ%MMQF`|lVFDa>)+aM=X9Isl(pNBn!6_iI;P_~S(wFeh~8m&WiX^mE$dk^IE7x$)K zQh($2SMR56{=C5cHf*~E37{QRL<4eDEMr)zplKHH{lao_`SRf%t{II=+`K5)B#o${ z9zqO>Yab1EJR|=!J2WY3PwtyOtbSqw_vWyPkZC>N>eDso`z5B`&77z8=&Kc6G293; z(8up&XVCXN#d;_Gz+V=p1;qJv($e93VNz)Mto!qQrdfU9@P;VoOR##~a}f^31fse- z3kpJ|<`t8(@)uEQN5xLkUP)u68OIbim0?cU_Mp%0!gynAhtyGS$}3UdA{{PEpw|*& z;e2#JK8~TY-+_3e|07KP&}Zl)mr#6*MPwahdvx$%KfLvY`L zwgF}JU>K?IWzN_i@G;APrtv13F#Jvq=5Z3guybp%d*6=XThaFvj(Sg$x51GGzSR?q zC!g~S+dXZw<1b*0mf)|k-6hUP19q7XmSCYI@SYA4{i5~4Y4?j)nYiSL1#pEnQM*_w z)V?U1B40Y7c+U|N>2L~pl56%F{LE$^fH5ZUdbWp6`!dVCz@)*NDU0aI(v4TfwcSOj zEV~H41RsS@g)p@n!N$E{9N7<^;bp;kEN0)$B|vY5g2uK`6iB>tb0O;>$|L7E@hUu3 zzr-2>{eZqAVRDQoDXE{;JU{0%A{l^B@`KWUz2F&b7EA3u$hyrefiKtvcacxMjWoY6i&_rd%p*5+wHs25iR7F6}A6u>t+ zf%KG=_;w&et+oXcnF7aM*FpejBmm|fq6|^)%?)Rn(XIkiVjM}p^W~rN7eTjfXn^R+ z${GlHi#MmWe3|U>1eBO5$a2UF>Jtww$q?ro!=#jwv0#?KbtwUEzN)*mjoH{*xrrx- zv;u&|3c5@E=q}Z3-KFhpA72gcUE@-Rh!no2V)*(&9@mJv=o1i_HS{>*v%uXm_S2-$ zRZ(=fo8`NXV~6cR*IY0$2|R2H+(A*|TO1$nE}J5gKf9C7Jn?^Z_h&~@xg6!cHn{sW znY)8lFf2LgR`dJGkiI*|-7$Y=sNwGtPLw>H3OMD9>5;1kN$%)(`KD{9@=c4p=cr5H zo#)QhVpPYYXdopv)tP+L3J--plW)3qD&I7GD&Mrr3mmP*bfC}D)v8dA z#p|J;pUF3^JvPuz@cKk(^`;DGUfdP?r}|C$-L{s2O6+lWSk5p;PW79vY5gWjJKZ+^QFjl*fGlg>mUs`crU?l2qjqM^u&A_4w6*<$ zAdVWy~I&m`tB(DC`k&9>aymftWjOce5s5|W-4|& z)kad_^EJ;&Y`{qjxDT8$+{8KD#0Jkz47(r<2m5Sn>|}|WP}rG-BEdXgr^kb>n?*5& zH?qU-`j=LE)w;sMc%jL9n?JijDr zPY_PIIG2fY_9Ft41FFz;{lQi_R)M2%b7r`)uaLB-Un;-D2q5{TTP>JZHA{@6lL$9$ z1628qzKCTq`mg1buWhfKQqy4a1?7~~#;yHUN_o}MrIgucrIe5UwUqL~UzAc7t_g7T zzVD@!H!%s9Jqho60>)S6LRh?KYrGgp$dv?4+ppDEGZ$NxU2`(w6q1&dMaa zyfVq;n6v&viR9bP0ErvqrZ%2Kq-C!Lv9(v60(_fYlz}oykUcD+^FmXY091R?N4E%> zFXV%R;Z{p5h34=$bp8?49d8ANSyp!`wMw49Eoxg*Qe?8A+f8vwpeZ{g67;7==>9j6 zl7Bs~I4|3unU(?%ptLW00zp7T17d+-s;=>;`d`Zg@LwSPe5OA&lv~K}DjF_Iuk;6R ztc1n+Uer+RSeMUEz%CX=cLBj$e40&p^<_210ne#=sKUs9I#eo@@*qa~WyMa(Tqk@GG4g)SuD zf}DFf2T(r&e7^%R6Dy3?kRlxU6}w48FljLGbOti$*1CPBJ14Q8n_HL66I|XyeB7q8;2r*7Z`Jt+kRQ14mMeUX4{Q!6Rv5fyGY^u|7jH(tW_MsdVxb5>3} zr|zS~!pb_R(Yl+Yd%Em55#I+c1gU~C$0$JzpHpW3VH;n<>gLFH7_6*`Bm%H}q7HS% za=lf;FgpaiXhJn91H&1EEu}kQP+qdGo|s|##*)37$1F`!;DjnQJt8j4v$htC&NjSf zMij_aJp1_uIq&DkfZYFc)3WTTLA2_&z@=|-!elaZE2R-J4?s9a^bB%#!UjTVnTZnz zK#?9+j|JM)e4!S~xw!g9U}8@6{ndTSUp_lIFZ#2s#EN!9JX(ss*}A!WbC8zM8@8pij0+h z7a60^2O?uQ`nm|=0FZB&#_lqx>zkZSn?Q?AGvF+_^L$f(Qb>H>N&qaVmuyh=O@eqr zPO&RoOv;dZl#09(t35os?ZfnxDWXNaK)#0XG<8t3P4RHyB&?!TB9`}u-3$p41r3#= zVnY_nX)vV-1eaN{&4^bIQB%PBV<~Ho3DL{|RdNq>m0Tz+TTdmHHqeooKGl&~`awsg z`cy}TWGZl<){%MjT}OsM>^JsDi;;Dh|AUUqqaSr-8tid-s&pf}|0pQacP1#a|zHOjNC>wD19?h3zw?g;JCjjBuM6RiBEDqBgNGAa0Znw~SNc1vxU*_Cn;88qv1x zXTmHMv;myd`G$a8DSc&Rv@M46x6>gI+i{Ih1t6R|cB4X?yD)tBYil6LJH6Rv^vI$XHHdMMx>HU0E20V>~fpt$K zA%99%7Kr{Xarv@pVM&m9Jpl3{bcH1NaCj8Dj{apCA+fSLZ;p3I-Mr43m@{tY<^iqP=dokkji8J1lkWQ{sOio>* zZ`Lr|DDiy&^k?1Ib>!#-TxDp`P}h_QipZ~c6h{68w4s2V%5p5qRLX62iNE+HUWGd1hI5>)BT|+-LNqsS|Rc+`Nw3f7h(9C|L|iq->07N|K{$e1C-Pq4$6Er zTDn>)GDH+e(yU{4)X5gj3#cP&P)F7&T&G&qqf{eWSGDw9`3bpvbw;F44#_O)oA{ld zK%JBIhIiV1BvPz87{^u}?pQ{h*lI3vuZnX#7vF?q$ZO3ys)p*sCA;o3#}vykYO%?N z)rrtN7+S1Om7agBY9XS`=~sv9#CeHXt`nOX`bCp+YEQo{xf?g=JWnrurWM zmMKP+e);3Q%9INz1Tl9vL|eU4S0_KoXR1o&VwM|4`iyFv=}ggwj<9Qa9|9MthX^?i{v2R>Cn&*XVj^*7b0?pGBCd3%!=K-hb6Y^;`fZ)I=LlA zCu+s+EeTLrM){?m?V*%S(6EZt=3m|U^b`MAcYk)M$3}kfQG9AU+Xx;Gola5N{nYj9-Dtw@g>>G2L09^<~ZXN zW{OHkD^~GAyFS<)&T^z!K9C=9v!ccQx?EF|BrbOP>@`leN8UW5XrZ`Ec1YT37L(Ns z7t6&tY*(mQjjL52gYS}244d(VNF^7VQEWd|Q_>Pte-^9TC)GwtvD^?h<;~XwYP+h( z!A~oO2*n$Fxg+ss6(0h47sn~*DE2BJLBk`(=*U$&w>XG=#uW<}&mCV-G>R`ix-YMb zM?CIs9@3VlSeDBII>AMX)rY1!+B5UZ7#e{DZ&Xi<%V&jq_-SyIetnl_9%uM1nN9OY zIp7QJctv^vO0h{)=}e1m8SoH$vO@Q+H!`(5g#4E-%Cp&C+z;6VJ5}t@+g?%LD_pl) zyca6|<{bQ*3~V^MG5?Z{;}rTR2v)#A~9%o7CdXfoOE< z{7&IU}9 z0b=bQE<=VHIO?N*Eo^6~Nr9ugf^iu8`Gy<$^J5c)7P-2LECVggq{zZqv6$|~L}9oa z0d^RtP7KkcSMjShh`TZ=SK9%%1+8jQxbJlF`!=2uvRl#<#kjA;Y-Qn)Gf$otMuE5Y z)0|`72t613#4}_7eCtUb1Pe``3;-=O?r18#eqs}|Vd_U7bLPo9Zjaeda_zLP_(sa@ zfI+Xa29Z_Y|MuRfh;@j%p{MpuUt#;OFxcj{^2ED$9`l&+TjjesMt-~K6>n8YZKhVk zrLE}`xng(I>&8S~kK|HY~;u zZ)^DvS;Ivsw!-b2oUG;WRy}s|+9^Bv(iuDXnt%=^Is^%}_#mEY6~5&%XZ2Z^kjd9{ zfij(1W_z6uU*n|Nj==FAk`$fwSfdwDS)(-oDQ9VRyoP*rDYKn`if=p%6ETb>Md zDN}6@>fZxT3VYF>z#)Ub^$KaB>snf<;&*8w=5w_T0=3qHv9~}0=^wB;0}|3#M`tZ9~HAj_8ajLJvW)#WwX`Fad}y7M3t6O z+R$Z56#X=d4v#4km3~pGE)eva2-!rO2Bf_x3l7_ZD>YLW`1h`ki10(l8SrzQ6uta_ z=yu-??!D>-Q5q1f^IW$KywbB`FW#j3RY!{2POF@$ukbhcMZroC_2AvQ^Gy{g ze>?tfI?Mlm?6#cXFcWFfBf8vn@W49dOVV*g#Qu|sXQgb9BTylx?S?x>co=WehRHhX zQC_48Ztw)go))%p-=3yMFW9qWgP@noMlzt#6<@-f=srt#zPJwiOx#rS%+Cj2rt_7~ zbehf*yXQG_oFV(YdIq{E$;Z4RneY}8N^+9Fb`cNfM@{<{iIj95eGz?bpGKd%4W`=4&JaVDDzj}(r%zSB zrldVBH4gwb5fVPkNCm~vm7dHyRNZ-!429FAw78b-`$H7C*~ zJ4xojMTk#iFAmrRHxS@WcY^F%3((D`?3HRa8ZeJwnuyDgDK_V!*5JJyB73b1m*W+% z11^YLI{gf~OTuCk#n6%fnKTv_fT$r`GRz~GKykj^E}HUva>Ij4<(wxD!ugd|&}oBB zbM&#s0yH(vRx4u+dN-}kyv=@0{nWZ<~JnP`YIH>0H_|+7TcAmhvK$nSw zbUZIHtPx4KsXw{H(f%KP{_GvrC>hs6`Tz_sW@wq;so{fiuEGT$qH}S)n{nw!ECa1B z(Khc~jCvWLO|SMCrT{iP!<}Ce>sR~mQ_MJ;)%NAonN+T8Iwl#gL8kbqMR`|`4M*(j znJ*?@Iklp?0=ZCxbMc(WeZ@D8{EqSwFpn(JG_NY)gge8DI|BcxU(9Z4g%~b-uq0|_ z$-8Pf&3;wbmgS2sIr|@-0rAYp!oYSeUmh0y)$FMaSiN5UeaFAx4P17`45=m!GngE( zFRBB|4Qf)0$--5@K~e8$P?tl-riqTR zw=1FarBouMf}C^_>Irxg%t~g}gY2l>wL6Z_*K1E#ID&E1EAwni!usZfW)Am&qxWkAZHlCs#Mv42}g`8#Im>%pO^{jE^WPEI5 zT$K7E@3j$-^Q`Sps$1M%NQzzhotMhzuy4Bgx>3*}ZkVoxvZGd&m>Uvn7bk-ma`Q5G z6Jx;)zT#7ME-*D3LBXDqu(0A|1qwqQ|KtmFuG0j-cm$+{`koEZk==kx4iDy!H-_cs z$MWDvPsa;_zFkoGGOgoelm2BbniB4VB2$9Z8>c?jQa2~a>FUyu0RG)h{CNS-e9(iL zAOmrHfo+xtQeh{WbK_wUZiqHsUBKEDts3%#$3D~ zrupR*%f8q^dDBe>hYOJyH3OZ+|KW7`Af)f6`EzWm!8{RtZMcOa)jT@>1L<`GD! zt_IQ47yEf(VYlW2zjE}xIOn)FzAWs35-SDAswkTn1@ip0AM zVy{HDUK2OZt4AZ4i567)M3ZQ>Z&gqtACQ;rH6tRf$)fw3;&uq$v*C-Vpxe>bR_L?h zkxp_y8N6;*4B`Yl@mq(pTDDQ1S+#H?Wbt9s^MH&0Xw zI0quj%oTS;GJ!)y)(WUiMD;#a`yDi8l%FtyZwGab1L`nq?Wx|Z|J}`x`kI0(DKlUo z1)NJzNn`GKb%d}@^pEuromY9Be;hs(Ef!$?>#rV&Picnv$ts86^{*h>*sUEVuG9wCNxVr|T!0e~qU3R~K7Hp)Q!=j4-V51MpAkJ?)2h z5;%;#h32o*L3Sgi5b`&e$D>X7H#2~yXgy^9<1&YM!|&NiR-&zgv01}|2WNSR zV}!rINwb@NO*L0bkc`p@|8GD@n{rl}uhqUMbRXCxpyJzT%0RJ48MvU89Zt)MFq-$7 zN@0ad`*N)?G@-R>*g0!(K>BclbD!$}d+@%wIhBiEi2!_p~i*uUIN9{W4DpWnNSf=ag? zIs7O;a6PythuU6ZaKFGvIKkASf@YrJ*ni7KH;i!nKe*P3S{@HG895srziT=3FQvS% z^VD}sl<*wyM`*~Kv<}D9Vf+DHL>J`1n{P0m$ukq?tBe`3w4f zUZXQ-mIxFOT#Pl!2eAG2)Y}GMhMFhl6IJ#OdvVAP$5%qJzB38=;k#*p6n}0(E@J=Z zvxXq~2Q#ya{IbbkN)bSgf49e@&004)#v z1(9G%Dzt%JdSRSD%l}uLJIBwT|M!1x{GUbpfAL>42tdO*f7)G<(^m(|!=-@!qu$n- zfvE+e2;yKy;RSVV%qE2*mbeI2DI52XFF9dY3#3`S(!&Jl&Ug+;z$^BT|BOL4Thm)Z zV0umr{MCKRUp_lCF9wa+OJROjTE=>5MVYYuLKLA+7`z--5Fqa9+j1N(f-76tXew@g_E< z63SZ2kQ}246_RrQ|g zunwg2QhmNRB?F<3iHxsFe9HmzYnA3NvnCoiE|-k*ETU7c6-<|n?5OjZO3GAC372=c z$g@zW*&;riHL#;pkCHP>UC|Bf%EKfaXka&@8`ybnef$-^p?OH+LEsQEgOi??RAu|7 zgFd|Inle*s#?|NfE>~HXjeILIJG#RQ3W=3O3j0A z288!wi}$EC1LIP=X>dB=?LEQ+#OfAktNXl;YAo;4#}`uri3v3c2u5rJK6uP`a1eQw z9dMVy(_S}HWs_z)E2q+`yIM!Jj*a=0ZF>@iQo{MrV1Ss|G*6&h&7k@R^ucue3fnm` zMM%A8QQXcHL+Hx6oE$isK(WNw$B+XZerz-yc(*mx_zn+rqrBScOQy5NcybA~V&hH5 zxB)7vW|NC8SiKK%tS32Q9z!<4{HHZnBSL(V8Tz~(Eh=;tpVCRNBW^&*twW>TpT}wG z?p)$oF2#?jIB;-tAJAP1GW`m?>NIds26e5}bjv;0`k46xo6)8Y67(E3spA&rP$9$H zieO#^op;MXO;_BWWhN#Qm|@mxeV={4m9?C(%obe|!HdMzbn_?)-Z-(}dNta)ddKn2 zBJFV}m4x~rW7T9P#yM@qxRBLxkF}N_3)?+vBR+@eOFkgCCE4$fO8L0S<+ygW%M(pp z@Mro2Bfng!4KCE;PCB`X*;A%Su&o`btazj5idgPykS*;Ip`r#6at}U)$_s<_!KPq! z&}aoh$)VOsCIzQNW>7Q)2ZOyl#o?+P1cZaKjFKtNA8D zfjXON81pzM`QJGwLyN4+PeCJBRd!^{ir`3Dc2OxR9(R?W(gAfK&F35<|?6 z1=XdXst7vwneSvrZF4A%3bT+(?Uk!$B>or&ZsVu>C7M$d0Zi?WImt&39}P$Gbq2R8hDU)t=GRh zyezKw=854CI)S#XVT_OQ3N7Gi#Bqg}m^Y`s{qD>BqT4>-e+QRO#fOq4jUeb^J00=e!obhUNL^1 z;=jmq8ND-&(-^%bu6K0X4MenrL%Xo#EoZump-6tKS;JHsAV7wY_j}QRsopv0Qj=Vq z=z8z-*Xn`&J}Gc-oU3bz$4@Z&-ZsSb#M4s*8-XWRaaf6{V>rQjSWV4++ziQ;22}Tj!U=^J^j)LWCkeu5A6`ou`{qSY3CY53N|IL=Q|O+Yx=OM z<#-Qy{{c>kcF473Ox6fG5zlMa=`+tW-;Qv%f2qLj#@<0mHf>B+g3mf+PlE7cCfJR2 zUm_O=>gyEyQYAeI%wP1GRq-lbd5lLvqc+uwRYsoke7q$Wn2pV~FF?>d#K%*3Y6l$D z$Pe;#B4n+M;iZA@XASb6q~cWcV$lk?ZnzZ!Jb9gXw<1QjGU(>Gg~wC_K|-LhmA%Vm zyVGydQ7EEfXHDRrfQ~UU#431Jv!}~e0qQjEWpSAMDPLb=;>V&oTN3#a6LnW)Q8;Y3 zp5U~ae$u){ghEvVMI%ur)CK3yFvW$LhNewTI&yL=nDIpriGZ=!#pgUS^0rKSIIvT(q z{94Md0kY&U9uxiXw?WGp2^r?QCd5S6^sp=KYW0d~Tu}O|H*#?wS7@mc^MGSDosY;T zv2J^rs2k|vTQFdL0bn@68|=Xb`$Fh3F~}VHX`;B&B$rDMSH=_9!bej)UF34K!~nsR zcwKEC6|t30+a*{!>SPRXrDdiic960edz=BxIvc=!aDXI8vV2*)Hs!SKNhn@bbg*Sc z>^pAe4dF8adrnog5xq9faIIN1<=w-+BVT?qeyd}|JIKB#UC7&c#T^PTb=eX$0TRQe z`ovsicH5VMPVb>+MKZ`H5+AxLUNN&vNf^N`cEKb&1e+b>~~?3GYC z_Gmg)yia+apO%)Ja^9*;%kK7<`pNL;_GiQKhtuEA4Hkc9(4U@};tv$_Y$zNk3HU>y zD8PWf#_!kAKqn#}(4FoeeB@8fD=muBaVika52mD)XNJ>24gBe8QNOq#*0z>XLw{HQ zuZ7^h_1w8Mg#DiGX?*!ES;Xr)UG71I4(OXMO=r#Zlu+ELYq1XCh-{Sx>~@dY-V3w6 z)nm4&5eycx6j5=wwFFJ1GSvs)61QO2n>+l@Bw0)1LC*zYt}s7t>wBtJyeA(qiA?<{ zRzwgmP=2T*o#*5ftg|jZ8^3q?Svkul7<3Jcl1)%4r^$qIrUTHktPy+m%kym8&A+w! znYVSTpWV~s!9L&&xfz`|NbO`<1`+$2(by?r*OOib8$u|)2nK*Q|U&D_yHLecYO;!zif^Xw@UofMPnzai`f8gHk#bRFj4 zJ!fAbJY1T99XooUm5*$$ zMce&%>{VzRyN|^qsDWB>IO0TQNM%eIh=j(v<)f8rvo%O;)wYcc4H@}Inc{^T0ZSMo zV`>yaY5b7`7q;i{)A29VJJLhX7Ovf9V^OnMWE*~?TOk^nNf9h3h3ysv3ml}QjmuL2cSRb}Cw)dPLw zT`LESwJCaC%)&usNSA19r`#>zYh8u-l+H^L&va!<9PwJ+z?nxV+qB=>T^6gh87&uP5Su2x;1I25>T1&sl%e&E7;3& z9u^4Qf68sg8@b@sqwwVC8$*i9FNqb7>s7nTs+w689a`#G-6mhZB+F>>rD3s{hQ-Y2 z#Hwr&Q4KvGG;x_TG^kF*RHjPshyw>zq99k?xOT-;!fPZ#HOdh0xj90bX&spc0j zqBu*xn(~%UW#&;E+t2{@gt!h!SMD<%ahaGf$GA;$%Hy-Z{MwIot8wNX&Sq9IsWO%w zSblRX{55(ucL9Oj_vnE%h+zUQ^Y9k)HvM$oX1V2d?%8~eomfB4)(=0;*7>v9`kqPg z{A{+)>DijYY^^+C51bD;eYX`$F3kPWt`DXpSZk}6yL*1^Yd zU&!5$cNLQ7BM5-YVxp>K>;WaLd;1$2KB&FnLOK@_-0J76G=Y}l8`hen6KFq%251vH zC4Y1v)jME(k8y5D(q9T*m4xi4UC4u+_)3q8xWEW+kqaT!+w*x+qq!cFgmEkQGEGBpn1cRU`d1 ziex6`o^A0-QL}Jo%K6Nm9lCsF`I=mHv-qS6(0WKAn<6NJ?}-fkW4emKbU^#uOSD!R zR984CzLYfc2t;K;UhG@iJw!+G?6C(h zPDF6{vXOi8)SO{IvzlI>Z1>>w}R4Wa%=2>mUO1^n3x**m$~gf|VFaT1C>If(Ue zb)IrbI~T9Bskg;UQI9{tgm{+ERnc23)(Ov}&a+Npl-QB|$u;FCCI&Afbc~N1NzX1k z7$zR|`C9qcS*F1V|Hc=5zIOgS=*G+6;_nB{#1#PL5FZ+5{@0Qp1({1`sZ??m-ZR9^ zmP9G_s}~qC{rDi?f<;Ek|;z~|#a^Ops=q5Vu zb-FTtb1SbaSJ%X?F!#V{P7Jt%-8|T{1fxJLuKw=Q1^U7nA%_@_(OK?IGj(IC zy%N)DCe%hpWRwe)ZuI>L7D!M!HANrRy7Pb`;$HDW73!hpclFqRD%5h zV*colKPi9sbBsy{JkB^Ddl&>7Pd6g*bEi(2bxAjiR!o1lC&@f!Ytuq-`&_eJT#moE zM1H z0HP%N0GcLvIYm^WO0v{m7=#R=KfUu2j{o(~pT2EghRGCxjY)Lwpa!#u$kEh<%_Br4 z-E;U{Y-=`kpX3Y83;B2M_;srKlBmS66)gB^?$M3Das1s25klNa#+ZRYw z5ED?s!L5sH&LX~tF6A9Eh-;*CYV)n5SFuuRz*&_&mfD~e?qHju_1dx$GhVJgl>i95 z5XULem6H{}#H!x_wJ}j8zVG>zCn=|`x)jcw?1eM*z_Jp#xy;-rmU&371okiv*Z)u3 zdvHaOt$p8icTrt*H%*gs&Oszf&Y(zA38JDRNkByq0WsfuSLgt!?zvb$O?^#QoQi==S_G;ozSwp-ZFkyO;-Rf@_U;_hBqTO z)muyre~UNW>n%(PmWp~YoKf%1N%p4r6Ojx?pl;ak=cMHFp*pX>W9HG7?6%~Bf%LrE zG;jY+k^I`9L(71GH&of{Pf7}9c?S(&;$QXuo6i0Jci}0maqseTn!(~iHWWhvfcLOk z0N9ATgBd)NTVtS?fGazn;&A0H_F|WB)5`Xf`IwrJLQ#c0pjFm{YL!I{MBMV|$M+R{ zIRJdwRWFQREU)hyX8}FAwOve=w9i?1=Lt%G8$pasEZJvQsLi@e=s6@uA}nu2&;XYu~95MR4;tKjb6bV>cPLf;cED%A6-#C|2={|NYN)K?G0y?|%NfGp}QeYyS!| z4h?7$tlB7%0@)V3y@~Lt!7;>MS3~*rIYV^s@3@LT;}(X=0~|kQqrO9a5@>edxZ3Ff zhx>SHsLC)_e+6r=I;2a2jF2xOaHQxCf@_P{O$PRu;v{(imr1 z&!ZcEY^k7}Uy-8ehXf^p@1;woNS>oW=xjqJvXljluG2>lq=$r*5%xxFnDrcwzWd#V zLW-yI{_OX~V?Q$5CFfnrs{g1k3!N=@hgO6qL;NxaI_~>Djiq3QMMLmcw%;9#RrXKv?cb7-bv?|E*T_ZyLxDv?g5#0dU)zwo$Xk=o&^!<#N8Y>4=a2`HeZKoH=OZ-q;nw?(5eB$tcW9b}t1Q3C-H4)Ok+c=r|SGJ4CLZ0As|B7~fz$GvgQGBJ( zsEX4CF6Se^uQ6GPhrv=cIujvhz5GWc;69-e8qQUz>dZ~1ID$M8r_QBUDnhKWb>mFrN* z+f$A2Kv6p0aQm4Vb0abyz2VAVH0en>J@QiC0+N&A@{P!A@utpA1l5*O>?hskehxj^ z>;hns)}X|h`s!sCAoT5KwHDI=Y#4TcIw>u@3=Fb|brBkJ`|Jv{l*cNQFd7@B2Y)IJ z7_IgV?IjOUs57EjcCtqw7VxuCDh$Vpo#4DObn%)VPV$lTdEGa_VO_T&nRZBgif*h490U9l z5}m4C2yD0>d%1@lMDsq-e&H;yKJCye;M*`StZX6?<;*44T1}P~_TyoYg2p{=z)1E7 z40%`HN#Pm@q)eE1i3(?0B-$*jHU*|U@FJ|3Ajj|0u}x_ggdMhAu%-(o5y#xu5y!I`fkM+eCSaTiz`uQCef;(h;| zpHTfNa8Ll8P)*AJ#?c%J%Uyt&@M2k4<@P|EV z2PJl+c@L0_Zl=-SZ>;USzn>Pp$F7?!fBD*zDVE3S=qEc=Kfg?}Vy^_<{8mKBl`2x! z2StVI~qp96ikOFt)BLeo4eEX zAO2tbvD5nY4cc5VgRmUTyAC;lEm64y0pZAd}0m*w&|h} z_*1@iT*F|aYwIDnnz;c*yV>=iSOGoP$&C+FPyLFJWt(PR;$tcqPZl_avrcaTSWJx1 z{m2PJA+pfe9^?U%{9h0lS!L!5L{*3Z%0E;kO93>A@3i(x`oDSY4!)%#C#%(fiUmm?Z6 z65J$dOIfTLA&B0`1uTawm~o7XdIYi09I^JVyR>~I4pjMf>}GyHfQ9QeH>n7mpNe~W zA{G6~-sGiJuNQAW(d(@!^Be7?{d2r&{%YKRuV0R&;g5>49CIo;EnQslic;w}Qe?I$ zN%P+VE>M!KClzG)VU&4TmzJN_e>dgYU#|aej@SR|$>Pi9Vyfy{JL7ZnvZq@mV9gaX z6*@36vN?&gzWTKD4f74E33#k@;dT(_fD%Y$r}njpvV{>$*S1m%n2V^H7TO_yUhDkCILS&pRTfJ9?>62R zs?hU)^Yi!TyMhVy-W7-r${nDOB&Dr#G%A|&^e)TqJ$&E+F=A$ipRfn(;VZZ66h|*d zRdjbT(jGBbY3TQ3@R4Dch4#bz*N~hkQD%QGviElFB#B7m$n*KQUq?2b|f*gb*XRv(Z+v0L`)!nXAPv zxwRoiIr0Glo1}1&OP{3ud_dkL?FslpW%$Gaos$CXBDF_QG;DhC5kxgdOd=o4y@vf% z#acE<-@0^P`1*WSAA{E)&p^9#!@1Xrh17}lf-x6D3r;3lOST5ObH)O%}nMVmgactGIV)9IL~!aQH$og zN;jum4~;mL=m&3ymGOcR$58umBf4;LA4&+WC?mWeryx&CFpI_*WKu#g=2g7(+0EQS z0t!mioiaNJz;%UjePiyB`D$S(X%Qwb4Kgg%PNrKsE`y%piMSJo6xl`>FYdrm37uh-Y7Vyq>fu@MvC22vhT`Y6|=9}Z@8w`Clg(NaSGk8@Q47DIM_NUE;W)8cQ3mX3Er~HcikEgL04d1-hYg+_pRCY z^PsP1_B)3Tg2Z`7lL<-!?Opj;ecsp@ix9~dE>VHIoufxCu}YP{Umjei?{s_@!+AWKB2#w$W@c+R+KKDUkD|%!r>98EA-!-qyndDs*d|W=|sULu-yo_!M z$!0{-Q$e{zFZ8`MXA;RLs>nIT25z(jxKwYY~v~--ZJeUIa zVAH#XBQ!7GI12~(s#Ma(cCZ6{3KHd@?Bzr_j}L?LbkdQyFS$m;Ne7%bjWog@HSc;t z(FecsgZBXY)WjskAorb$JzT>Nd}BOJaf0UA>0#Q(V^vX%a{FNGRLC*MrCX?&| z_0fpPsD!(v4vX!^K<@k7?v>LU#Abya_ci zQ-LY>+)^6;5jv;ULd41=a#^cP-!$v-9Tr+GbpzyK_sBeiXlmF;Rfi%BuG8cJRzBxI z&t2SjUX*kF`F8O*)oSlw*cK2M#QT9qlQ2-29;ZxQ1=>GNX0c(g{A&%Ht%$o~MI95{ zIPT@?welJEpFTfR3ks;DY#yL55Zz(VjPaB?ACydn{l;XZ9b~PIVvjX)q=z$45bWWO zRQUlIQHs8K4{aVs;i$m<37RX6EA$1W@P(`R%9&5Fn2z}z7KW>)$o+sN4fbLP_rA%z z%t{7ph9mHVG}5AiMyguAEye}$`QwKEySOhzc}{<1lYSbI3pycR0KP+bK2WOo|0))L z3V1;E73Nm{d?Vb+AXp{%S#@-lNCvsGHlWH!lU$0?6i~!gzPq`c>sHuhBD z_+$^fY|7~{PNw7BAh-Ow)me{tyo(8iT8YpzQPS`;#sI5gz4d0?In8K?E`&EmIWeiE zY=S-GV2~=~wFk6X&S&uu7<<*D5higRbRwGEaG_@Cu}4eP+22MRqc?5LAuE&+0O?4{ z5e!Ek%{#0xAa~YPSL(9#Upu)+$q>@-9yxJ6QeNdVB2^}-=qh>wbcrz(>__}8o~&I0 zq5$Bh^T?#uh^IxUzl_1f=BelLWaH-clo8FsZL88`WuE4+qF^crKVtN=$#lF))=y`% zFeZ^V%M=t|2hK7tmeTakMSa{g?2N_00}$U^W$w1*K<}DK@6kkGxQw2o+$c4wFZqsj zt|SAaDvOdUI2-xv9;){(wEE(%)9wmfR~UZa5$2&;ndlq%K%o=`GUHssD*!^Rkp>0y z9wJQ6E%qY=Rq^ODtu-(mRzc!UXaP}vX3u;sX9(`7wg}HuTZ9d&3NK*;LL^?xyk;Uk zg$=wpj=sbk*@F$7b)e`to|PK*NSpv1MN4AqTAV2RkAM3A?Yq~ZoWLL{MH$j04?+kn zvTG<0Jo2b7CXf23UO_#?_i z=#^vln#Bn6p$aupsQX&lWSgQ~T!wN{vmXO0X%$Kk(dCPZf2wA}h-C_7?M^7-M!u(r z%SOi$Ce8v;#nQrRt5&YFZ`e<+mGmlU*DM`*}Y}C z7?YbA#W&-L??aXN26Erhx$yGVvih7h8fNvB$^x-oGVHZmu4<(w&Z}1(|yHLw<`pby3toof8^*PEA0Yx!WijhvAGfVi;d) z!3Si{IXBHs4DU91&P@Yy%WRJjq5?vsoire!RE=hLoSz0w6WR2u`umPZukiDTN6_a~ z(Oy!hYUKQFSWGtZ5az4gYN1@^6~VRxGFZ1&5IfT0(ZlPC0b=SG1_)RTusmAmoqN@s zNzudUH7u|+2~--}nv~~ZF*tiLI}@OM?o)~U(51C0jCGds*b*txH5Eqx0E|9-t60^g z7?Xx!HJV06_?>xVif;Evi^+z4s$EV18nGcW!ouTt$05av6xfF`*X-a zj*nu(D_o{ZpxbB&IbyvRtZe52e=8dR2k#iG;wu)$KSJCOpRDP=m?bPZI7 za~MMwiaqQ>x@^-dU3|hk2rJ##-Qx|&^)m-}t5y4gaNl8$K09A)6bX#{veue@Tx*MG zYYijZnf!IF5lS+r<7@5Ue62N~t+o5{wYDE$YyMx>TFW1;wWMFyTKNxaZHTqDqSjjb zZ)@%TcWbTn*R>XiC5tk%M4|f8GZm~UIBm@2K8VDKqrAsfDuYz%W0Kfegdg<=gom2B zhB?t0E*L=NT3hCVrdtQkAQ<};Cl~|Od5?(?!rq?GGQon0y#(E!Dr5<~b1pNqj~QC# zjRD91AMbDTgr_{@f;dxzjQ5=#X-p4xCje^0=~||+&p2fg|o^8B78pc9k~{QKX+J6RxxL3I4ewe z%E!7?7@TZVQ={7#xi%&7SHcvXgnO{DXppw4@==C!5FwUfUA86>QIBk>ouf5DWSdP4 zV6$I49>$;|4EC(hFkguj!hv%KbF&5Bmd!6K=r+9DAf`xfH_=!$_@rr%-f&tAl_5vXj0apD9@rO>rO#}fVI|Sj@DF=Hc$Iof#yo!cSrHKPpk@Y0* z5D{#`VmA@XaREz_v8a9ibT}U zu+_IHZeM|bPWqCDZpqy;`I_SrRp;m(3PMuj1tCgFnnt|Xj=ExJ459sg%BP8ho$rfa?z`<4&CHP(;=Q+wXN8)~*)cXSBNxWE&u%6Q|m2RY( zH(RczYsci{4^}g%(>+avt{lgL^EgB-AKklMhw)r!Nw*4qo3tz_uex=e|a2h%-Dv?ihN)LuPS>?m!GWR<}pD`0@ zXouKduh#7ZlpgdT+Q}|z{0`SQz?|AUM%hFeuTz7^gW0fUE=9=qw!-VB{qu;`4&$k; z_GY%Wtuq~yM7e}bmWW>VVlhA>V4DA~w=_Y;T|U;5|UzdPO-7{w>Z91xmt%W^mp zKr9acNTE21xiPAUaK#PtncF>ptJ8%1bH7z4O@e*{2u*O@c_8kKNdzllD+p^0dBs#P zdKQ#JpmiL0S$Q-Xb5Q^l%r<>eC;2*BqD3El5&*@)P5R;I;n+F((%5P z0^44(SPM^yML9skHe}O&HLD!c7M4`zKkbbo6+CWck@=o|O_*pC_9C*OQzO;qc~wkw zU-nZn!4LqoCT&7B$Ul4x?b9YkL8P*fbD~{{&QPD2qKVifwDH(1g2;xG<8rf%!i<}^ zHixNX&!A$~5pb2SogslU?&R~Nh6L*EqzmD43!@N~M}nK+H9Y{IIiumx8+YJ960~=S z904l4A+8Jp&_$mP+oYqM9;*eeh+w4fzUT@mON^yaSE5q}WVi>BkMBM1AtW=(;W9ON zwR6@KA_h4P=?SYI$$*G8KT%$g&V-+}7!$LU2U>vPJ35c~xnoYEv0cNgr%5wOBY~d= zeG#NINt^?p%KXSQxSRrxG?ju!i`#YR+oqa+HZyQLHDHWrj*y}KlYZEO<=t9Aahp?2 zBl|}B!*&AErwoR!4*4Eedjq*BC?3eAbkL6S0a%QBkE^o}vK)`AhhK=F-dxD8fipOr zv_d6LKs`+4h4PC*I6?^z;+TvPPcI|=juNJ&{Yr<=o=Mj#!sg%7I{m9$UB@%L?;2(1XOZgiWK4j~NqLTagfN&30ijGMH`xv&( zkSJCL$1c-%ATgWBHCip%{J_&ZN(h*{F!G~^V^mtnYeXIUm=0|c@nNYn|Kfq4Z}DQ` z^0>lqXr16rA2T?rs%Dsn^rxGi3K`2Ck#hT66KBqmL=f##q(EOn$ZWL|WrE~B!{rGO zHJb>olcNN^1F|#ilnJQle+c6db(QZ3)vhB+xT!Cyx^A1ji#9Sbd==85CNZS!G|(*e zIw}{jNo4LH43tA~%Gz)~Ao$-gG+Rn-Aogo$v=|gmt$lm+Exw{#5Ve4J(A~k1Z&NqG zFbmYaU6|BcyHhyoJ*%Q+qX)ud}s0aT@hDr*ceU7`2_+Dpg00k0^{oT%{oli(BpH4w`B zG%AX3Uj3{7e{0iXMZ1Pu%20wQUA$h7Go4edO9#M6?WorHs(7Q; zup7*&Y#L-?jKFl>f;_*SjC-c(vV>^$w_M6Bh`-WGgHFf4{r7+O+U0)Easa(#x?TE= zMCaIOlH&rFRssU?jX6$wHY7gTELGJFQy_0`%py_BN&|*K69paV2g#DX&J?0zO%#Jn zTChIerx3vXglJkhG;@^CRRVZnc03#4CB^|1{!K9KlD|fGBn7EeyUNpZJDAH(3!pJ% z$96g7x>yRg$en4iZI&4vW1lYj4Ii|z*D7oFWd3O!H#7Z$D6S_#?Qy4?o+^UnVR>Y7<76b zOYB#{BDW4zB*zMHAW?vyKIp~`F@`;OOtKH>8>WN{8$tDp`xH>Zdr}ew>LGU47}{hpD&y%Z+I z9fB`Oh>nrSt}^2cCm=OfP;QUf<0df_ag)Y_0PlG|A6Vas1PqKwK1m3LCqdUby}Y6X zg~_(^UOo9k7PR6@JbQSdjw5r*tiU*SLq{o^tVU*%W?qjAKKE_6-VPEBRv4=XfN_M7 zN2HpWQlKbTkY=YV2+JlKn&T@S;43XBp&nrk(NyTdS!NCqs6Q;kyd^Om=(Q2< z__ZHW5&TDdNC(&CHMxU+<#u}F0DWkiebFlWX*uKL<7-u?>r6wHlST-HbrJ$+T$nZD z4yvLEF9VRJ;s$=x18oY~q#=z?)SmzMzkVj)pj_n#n%nsX9IT#V^$%9T3=Y_^stC&` zZ3AvAm+@<%HmeRT4%;3yJTs~|j1CwWAyIlBIPWkWdXwV)`;^~QN=B9lS`D9U#lFkP zl~v})wfmFi^YGw@3X>IQmvk+ILHP%N_vI+xFQG`0Xbv02PyoiXOhqkYtjK@E3PPOm&BO7a&cp= zT-?`$rTf4hnw^`2k+$$T$}-$XU%+=_L%K5*L&dNtm^4x0)~-xo0H6uAuhhB%u}9*7 zB7+dXky}#lqE(>O*Oo=^BIFGAjQB`LGGBN=ti$OiQ;dMGXoM# zqM_kTds?7+En2TxcdW*4F7Fi-eXfUuoe&*iV3+UWk z68o%o2w1-q$LkWc6BiG@0Ug2$nV=vM?skPBC~X0*f&;(|!Q%OGV})GUC)J%PFfv?W zfavm>UK#d810xO|S`Ng~;0xR_z&I8|qoqJIyR(b328+Kzj#d<}g)#44U+ zG6Lgp1~5ldxQ5~o$+h8evrcrG07l~&L&e!-BhcdbR0z9)3b}GsBY9@+D~ta>Z+g&l z`SYyQd}=Z8q;UfeSsnCU@pH;>qIkrhuOtM;PV*ODH=3i z@fb?E=_*MTuT8qlm2RermoO{QwTY*JPXr=Gvmd$j$R~w#-7;(SkQpp)YLo_uIXiut zn|OiHUj;i)_8`Yt*?-~)ZyBowCqlvFIha4XcS>s)x(p=2*f5> zMRFFyml2pLh(q^Okb-JTJT+xEnORyu;$Y59Vyu*E_JP-MjxqrMn2*y9CsDDkQld?M zEM)In!9jC;2YBWsu_4^%4psq}1Q?7uZQ|F*85l(+@ZsMWmMugaXW|jZk@JY-4Ha=D z98_q%Rf*W00-t%EWQ4LHjObou9Mzg@D`Pdsl`T?4cZWPDrtls2ZBU4kYTb)WShqIh z5>9e21>cxRd*runQT2+Ix1VQN!EgdqvMm&77Gqys<~;rLc_L9%3=cXP*duBl>vAJm zw?D8_<*ou!RMlt#pSY$}6G5h1j?a8*F5m&O6kR<-S{UPUDbx355e5wg=5l0)m0A>e z6XC<;zQ4W|paeg+h(kqAq^bgFZ|92*DXeh5^{#}52g{|g zt9rPUH1rMK>~rOw_JA3_Id^Sdq?Hp-khLCoqqiZV!?0zV;(9wF@syhVZ6c^SXF%eW z4zSle-^{@2PJ1^h+X#2j%3Y&#l@_aps@AXjiH%F0m-$KA<(nT$p52&1?^MbU% z4xH9NLw5`HzvYjUyDukNa|P>(nABdr5iY|v)_#7V5`@OrS!Px6bRB-%j7GFfqk4hi zjWwgl>SYqk?tOyK8r?op!1g_;Wi!o!>5PGl{(Bh%idSi5F2mJ3oP)00L z$cfC9kl-m-30n@Y*%P#eI!0z|VXKn9s1K0FRYK8*edqNEZ@UP0A8|-BCOn@ITkuA> zdlwEPI5y|}ZL|r^HHI+}bFgNP( zfpGjH+l;$v5XB8j9@T0_>gO!cNG+cWgTpzDXCfM`NzOAQ>$!>q`&KuNnr@tx1h}P7 zt@7(Ydqc6>^OAu4lh()!OSVOUHtq{}!ocwvxFzS=@KPG$2+xnXqyaNc_yqvP@UT;!bC{6?@ zy>ha@H{dnAqRuNG`3k(=biY5{o18W0>-HzrdA&hzws3i`kK|G`n_QIA=uJ<0>+||a z0#hyU%uhS?z+cAyx5e@QM)HxfV16jnzCt?}x#Tmj{NC%@*J2EZVVs0Jxcy52RaAAb z=nfM#+3MFLN!ScAChK$9rsl2HOwC4BZgal`Jd~dYq|#@7RDll7#>6$V*=BhC1aqu{ zw`=*k2<7k*Pxk-^ns()A!X4V%G^qAA*g#(}v;Mij65Fu{oyK^Bn^LeptmQn-dP4!m z47u_e<*YKB3Gy^kc=^i8AWIl|hwGHYnl9DDpL+8G6cvT!6f&rki?#p~?ZeM-gY}l7 zpMKg=kt`k=)+=rC;#5P?w@BY65%^F2iaPR+d|X0LU(8VT@0Y zZkcz_x+(x555SlWUB(G8X~i~cRiK_%Ok!9d>;qPTJDat+`tiJ42HTNLo^0hz0}?xy z%EUmp6pRMIXSlmLzvbaELSgU-KxJYaQ2Cgc3!?gXpQi-J*vs?!tXaPY#z}P}juL;yR z#wo35gk9QM`W`h^BQG#nuzJwM(G2r0F~o3@fSSo%WjZXRQaGAG%Tk1XipNz=J##gt zO%1U}Pdt76tPF1*X|hEIqDcEf)+bCB6dHTGiR&i}y;ML@#>N9#uA!=hg2*gQm5xb5 zR;!soxio5aT14x`%e6&wo=H>h@x438j8Z2BQ7@xTd<3T+Z2kmYZ}oumiw3L51Gcm- z9vazt%FvL>krV>r)vcJ29CDYB?!q4132Eog8Ha!@ye1V8h_ zwVH2PFkIjaZy-0&fnSxk1U}ZOK^^N`fbYN$ANn-5w+Qla9$^^s!(KUF$Y{7x5H(Ysw@(b?mC zpPXwP8)=pMhptewxi3A|7H6?Mhpt?aVs>Cg4Zs55atKqv&3mDhm0PoBeU~+M=*pHs zkrrpHS2rJ&D^KRcE579!j1cU|w9~}Hj6$(3YWV_t(%j*j&7MrN&u$S9*d;zmb@igt zs!@k$f}eTA;pX(bEK^r-z+Ur?(CsSzI-cR9=E%uiUjO}&kBKU=$6f2zf;z@KVrTJ{ zvQA9gA^mabDwlUvRP{W)CDLbwIzi-~`jT}q8%gAa=oVwi zqf?fe)#9xf#fs=flLTo#;zKx6H9$n&N>x<@FRm!uCoPVxfLo9Gn0hirOyg}GackIc z5+7o>pCE9g0jWb;cH=B9+Z<2J9%2u_^tj)UwelbfMJs}xfW$2`F`AW^sbSc6vGzcI9^GTQy0#Vo|_~di>kIy(yczBLSwl};Yo8O{z+a_ zcw7IwqrN|jIxptu`FZ(EwDZ(lW{x{B;W zly}XQ8PoISOctwSs{^G>Mh^@5$#Mf_-H4eEw|f)c{M)vnM@Jc!SXl=A`YKWM^K-?n zssKXY>d9l$Pmc%BVRjKbY&@tHfRFbi(`X$Yp+Kq@Nh9j>1T&{jJ1IeUy{Fd(VapdK znuAe+y`ZABzuS=h;;(EMk0ml|t^M?g340{7__phwZ0kt)YeXYl*h#8dtHc~24iPX% z!YKlpdl9m)G0X6X02HiXMy+}E&)O=s^*r)8Ni`PRrz&OzF6PAtRK$_Bx6!(ehwv@A zLI(rwgfLr_aQ|8Z>_MD?@a=l9;p~uaaBbx3^5~GjMiwWk26g($3WPN2W=TS=#dw6T zp#nH~yM|1VH3qdEA+8s2fZZmv4AYkZtem79)naji7V`Fnc`1zjcbY)6^#mhYAtzk= zbtax+E(>}JTK8C#i>SMYX)^1z9+RH$=1%AhX3-R|Mc4^VEMSzPZmzW`NH8;ypAs%A75}2IdOh=^_vez zfG+aJv@4zKxlea&Vx(%1T1Ve~^5SbgZPqBz6#;KP9ZPlv+2a*C;DY$>5%m*FA`U~= z)dj+2rsM>cF<^5_LPx`W*xEWEo;NW2KX#?w6g46s69nt$%l)m8aOrexK+qmN*GjR}ESI ztQ-po*N?2gIzJ;ZW>9v$jeW~mSQ0Bf8EKg8^|m+?KyiMg%Q z*2+)AC-;l0Qo~xc^I*1Q_EHOGJqDD&+T-rhQkx$YO_^Gy=wb3A=--<=+0zL=QF>O0 z*QE;a$Z8dz72)A!ifN2LI+vRdlZeKVuF*~~1*6kU_MUi$E9P{(kXHNg_wTT=SUP{S z?{~*~UCn0DZY#(wFUXgx=6*#?Fn3!?-1W%8d9XdM#+I8M{hRGz=c`7h2EEs>J`k6l*Vb_% z0eQvAQB5pB3Ta`qWCT`Opj9gwg{|INuSuZZzH6@)=)%w=t)p!XsvJfNTd{?fy+&p|;;bp`NdQG}^ z>1aWAAchLqE7zmlgm1YNbL$T_0v_gH*)AUY9BZfJR~{IGdNG}=CNlInqck~?)a9*6 z&du>wXL(yIl5&G}$)9q(!UgGnvfrPWy7}75xtvscbVA9qt_;jK;HXaDD7?g0bBVKqdGQ~;X$V#a?~kC}T@+1u!IW(G6SzR!DWoC85{cMdrUXtI zW=L${#cr-S{^uoL62(^Ua4CX1*S>*x%OX%Z?)SK!(0axR%M|%SJ3(?TP8FY-JE}nu z!A#*+4T^M;{|MniSo$43WImeY$WH?(%`QY?E()#D9}roC(tVxVh0eqB+LsBhy;X5( z+;xl53Rh@B>t4LC2oAE}75GwbrkT5l(5K`deb%086{69f#YcaoPc6g~FN@niw9HQ= z6`mpQ(Ax{DhXSnNG*H+9E8%jl#G5J5BVonE&iIW}y1VL9O*mE=ORvk#o1j@9Yicjk zknWW3m(Pi$KZ?V#12RulKVS>r0^(`)KY;R1z`<<*&Psp;PC13;JGq4W zix<3|Y?${|0rq9mEVuFZ+v91L&Ul)omv&s#0N@9wk_W)W#!>!ERkpoP-2Zh(A&_K4 zB}1-c_`c56+^=z^pRS#?Ba26|uc&5Z)ba8lL65sb(U0^Yi>Co3d=kG#2vr)O^w%^% z?#a$?ydfk3PTmcjX94C07l{6i;G20l4<|hYhnv6rRgTCVsMl%R4KGf0%;^ z=xh})&bzBSCnQL*%KA2fA!-W*b(riaII9>OEHVOr+y%Y=hW>*JoC>$xmRs z$8d4dS)HKSES(WbHuG@KN-^I9JJAn$7W$gGmyg}{e{l=sC&dQPhem#qg@De-c4K32 z+-_qp!>;y(cy;deoPVa6BOXM)Ut*LuL)|H6FU7BY`!6OZbv*l*vdiT*Y0w zHR`Qml2u+$+GSGlzBX{m1)|y4fu*D2&1`%wzUfM-VS8*$U0}t>te?|*@H_1!%Dglt zM~L8PLOra(j%1iUA{}@^CaaT2h2{Cpv3m6Sqqr!`A5>87Y3HM>$w)G|cm zK~VwEm%K{MC|wR82;$;qK11H^s+MWD#AeD!3J!x&(I&cNgHhrt9usw`vvaV1-J8kp zsOUh0T6JWrniLCjG0>0<4Ba8%_DOl>rTR3pvcC^*HGRJl{>qm-3_uV*x2-B+ zM-5fF^U0+jeC;DAd9#DMl~kGBm2*$z+l8K>sf)vY@Yq3F_>f>Ev4;=R%fg#QE@cSB zP}FU|AOe9wsWMfOkGO<6GJlm=p>I_@GhgEqvZ)-0>=rM~8!9$oh)#io{^Ori1^>Hu zy9LQla~Z*g5zQrF`jD%-g$M4!3!xk)^_OxOw4AdD^sm^w6sH>+K5KZRMK@i!_M#ZQ zCW=9NEkQXHvhvT$WkA4O1+yly;97L67daHql($nn^GMd?#R-DGV!yVIN4~C-vO+gF zVw3v!25Rim?HzOboDL(?=`zdT$T(w>%iRnq#$8A;xS}l1+8EoXfMDjaqCtHHw&hZ$ z5lfO2u%(v+efHZ;Zuh|omfUr4sn@72s1a>jPEk?_lciB&BQeP*WizAwoa94|c#aK% zIk`%O$U9aJZ4kzlF55?!wa0bYD|8vwI_N^$2B6Du3FK>Z*(_O>jcP-oXtJ=z;}-be zP~>7EcEztpZY z^=h9n^i|*F?MxPRkJpm&tVzYow9{&j(IpeMaR#(N>fEb1F}JnEpv}Wd!#B}3 z+d_$O`y%(^hAg?bFW(htK9ePG6r}VaM|{mz8)76No+&Xx0R5v9BArTxkn1X@Tq7WN z&ZI{((!+?jdI|8ww$RVZN^0P$K?QGwb1=?zdnJvD(+;PvHh~R}p&`^?vEbhT}HRf{9uEAmoOURrimV!g@E_hNNHv}Cn-uOxM) zCHd35L4R7E7^(I?NDID55~q#WGx6Gi|nt8MTa%^Wx|z|X)FIK$b-Y1 zv&sc-ly!yG+^LW(EF)pO6ag0RLYFDs4nplXyzB~(dxk#=a>!AaJ{ld-bdmlR z#*}8Its_*An+J%jb}kE>Lu`h-c@oQryb|0xnuQJObSVKDuvyBv7(*~?@>-&M7~Mh? z~0;FpCv6;d8 z9M52msOCInJo9|+1NSUUP(d}SdENvd+p3nYY17w!b~Rq&E~+D*m_oMZ7Q=#4nyk zdS~(aInNne{un{<%H^*9U;k%`+-F)60JHs?&s-$0$H-K<+_W51{18^D%iV>jLy>?5 zL{A|M8*E4fzrbiAh>j5U35YH+Y~E*-R*B+6J4_@2Uk@v!|_j z9%TyR@`WfH^5`R?m-9A&zc%hND-SW8HrYrG*eD=b2=h>i%gwX06L3Ts)r)K55B~;) zcbhr^C2llQ2S|qZE^atN7xx9gZj`g)lvPVSKhh^Vy960v z(H=pfn5lSkRXi7xYpTR7+Qi?Fx!z@D@NLPAc@OuH!q7g6*FN-X(J@u`K>L#pq;ifb zctAhoP=>${X4_i^o+;FVvgB=|FzLj{Eqrih+i~wmBfxA4cdlXwu%@hGyru1v&7* zK__85#j}(|M}<;w`&?nQ$?(W+uQoAjxF_B2TkIQwbVpSq0v%&bC5{7b9^@_EeuN@tpNnJ>9$Xw{AA98QQ~ zj~q9<0>^IaC6=!84tZ-WihUiURD$RifdZA2N4N*fF_A6-2t{_R9Tfro zvJZ``Th`d>x;$aN_n6>_&FAC4qylpZ`F;cRI{FwmBK5mqOks|xTfkNZRUe$r6(W=A6APJ8hb3* zop7=4zROvNu(2d4iB#A_Dm=*BvfMtPfb-9L7O5WFvriN!M%N6CssVXhc3aP|d-_55 zTv01CvWFPh0D4ZOgw`k2kPgaqiSo9J6-_2VK`a=A7t#rCRQKgp`bnZ3mb-EDR5W9+ zRaa)CDqwZ(*CBRTi**!jo}=FfFqX$CoK;3HmAO|@?FD+clA!N4Hd8kz&*3R#JD*r+ zS-=D9F&5)py3wT6tvLu+=VKh)dDWVvwD2L|QqtS^!p*=0w4b{1J@t933XHAHfr=2) zVbc$4zgawyBe+(5<}Fsw14DPbt=O*#B9qFgfPHDS(7dfM=p{tyd77GCPF3P7PV!a( z&X?(A%zdnsYpQL-S~)ewNOr<4sAYi-xHqI7-#`=*#NTkc8*xv}`QL9U>GW5&-yMtW z{8xoP9)~+dt{p$bY`m)3$N|`VwHPt{a5=AQNjG2tg?rrYrk36~W%gGOW5N_xO>2(% z>?seZvqk&*4Eh@s6#Rzn=EhnIzVOC3(Giy!f22*6Z-mg7)`y&)0Xr$fmd(>nHaG)k z`H8dsw}zQOpw~i5D&GIkD8gt7hof#(oy9RODXkj6A+VyXUDXfnGZ%8oB=4dFynUp+ zGm5e`^MOYXPqY%yN&x#s3|!Pc=0`CMYmuPtGeheQcoJecK^MMhaL6qdlC+UJp$0gD(pnqD0q1I3wG);q zfcaByGy=>nI$fYgQt{t5%C$%cqhSK957)g_itt8dp`xBwYZmP=9YEyA2|{kCK4483!xWzk!EKlX)rRJau8Op!5UPn8R)Cn{ z9Ir}YqXLUkfSSaJv!>xBF|bronam+#Kfl}L1V{gc?RUqvGCz5?-+270)lU=)@)T)! zO2Fy_%j1;k@RjKJzqq=ek)@OgXvec`3Q&unI${4QvyW7)=3sJ!nPxF1#h)-|Mwo@1 z545!w<$D~~kWHE|R?qPm++Uf+|0v@;e8y%PDs*eCpL1N|wa&Sp@;Vz?jS2RJYxv4} zPi}B5pF4HA=~AWgcR&0ecDet<|L;Fc>iFbFxEH814T$9vjL8za0lCI7;^zEr;}+y! z*)AT7mj5Ti_|q!46k?coM5jgE#v?Z7y5hq6%FzFdVfh=k7e@TVv#RfS#4NoN_A8#i z2*Y9@@qP_M#PLz&2lPXPsM&v$_xT>R_$@rBNRPs<9S?G52KMjkoQY2XqtYULTa1V8 z4Dou5v-2R-n*V}N@P(`Rs;-Q|g)ApPJJ}kA&RwFH-T(`#-3LcP49@J)(8$|67->4=Y0FX!e-{C$~o@hSSU z0ukrP4}20W9AOflFxt)?#)v2Jh3ojLuFcE$-yj5+B@DAnjTH1qU(+*y% zHlsP}CD=Ufa+6!!23oJgUqswV}}e3pVRqV4hYL&JIc z0rS>Qlt>_Rjxbb^rX#~`=S@d^Bj-tn@!ygTdtatK^sxRu-H z;ti@4GW^F4H}B%UVu~ARsdEzITv%$G`MP`p{X*m_%p?^mDi@v8bZZ;IrTS6{1c<^b z2*c%OUdR9RxU`Q)+}x%Kd7cP}A}h&hAu3uTN+MO0s>vj_d5Qu!4Gx@PNA_L%Cqa%< zctDS6!mZRyKz1qkh&yCX)P(ms>+AUp2&Z&%jcLDh&GE}eEIm>(HLvwcP)&(deXd$AuTpYv==Zj^Z9Q?3L6R`mitL7N35gb z3aEdZvDb!)mk)~6s3(z`B6pB?>$ne0ylFyYHPA$LAtFb-6h=`hlQ-p(mf6vc2ufeCs~0nG>>at~ zDqN|&J}34?MoW>E+9Ow8>5l;M^yfLPR+p=MDnCPRw_XW|vT&_EFZ;2V^0(^Oy7z|K z>&&axJI<>w0%}WNenFd@1GA3!M*5AMYxd--9HqKGcuN$&xGu_EzK!TSl&YCKlVgi- zi0+pH3=iHHNg{`|lW#8hlOis-Ej#F87kDD(ZihErnQJ1OB8w_HDW14|t8(GEPz`>U zNmIx>GSh5xrLKtwgVxQf0>-FC@dN`UaA&^rs#)v`%+DN#$Cg~dXQ4@PkA{4OYY;?D zi_x>0U{$)x-#nkHw>HmO*Y>70bPK4Bwmxl&n=ao1)Ml`aPEI*}vv2q_d=FK~5U=$N zZqmJT))iPBwPws(SML3R#cFcSuV0uGbP5Q}$+|7VN|}e^;jkE+dC~(jLHeH6J}zeL zSJW)0K6WzAYgQWN6Zs1wcX|2hme>?a_st_$=0j1|BfM|q4T6`sucd!hd_qCZY^#c? zb&5F%Ajnax7}pCTZwBO!=!;NCbc{IsX~P>razj9FbrL6BP1bB|7Q2jAa$7V`K)M!d zjteGUXr$z_(}zidJjGo5aU*(vabJ-uyX~G?k#Cnp+A|=Raep8%lZ5M%-6mR65=Zq6x|yOVumJ^`wC-o zPdsJj0r+wm-!kQGRNgW%d7pihFCaCQZi?G|)(7(?ss5o?Hp1f=+t~`Lf}7nc&3dc+ z+d%BWQmpSi`{zs)7-mdl`^-(ooU``u^Ox1h$$1)yIs2- zF1jK;f{38(G9O9QqP>uiF0$35md}#+5mI;T1J?GaXl{}N{l%z!d`W{^q9b@>=0(X$ zEq$mlSb%*j5!@NYFnRm-gFCzL1HA3kL4Q;1R;{aJ37&fKK-_H-*F|HMn0{9}ktK_o zCPez3EtMKU6oh0a(xvxm6_WL%c|b0Qlm_Y1VxlX)NSpn%4{%WjW>a>~6FElwbH7Ri zB{XU()E}s*uWrKh__N=7MMIwJfAr(e&KRh;T;0q!=UQ#1NA@s_MN#$~;nU{GRDoNk zwG;T${DyEgj3Hw()kcI^AFcNaDDA9-hv~3Hc>vgnQR%yyVJ#>tY9AW}GlNNLYGmLD zy_j`y+|E&2@9u;b>aBCYb0V;IMDi49oOp9ie(KZG#e4Z1@#&mf-w-npZ8GO0)TmfM zDk7APQ*5d#WkZl5{X&6ioKc{{n`;#-3REI7cwshtBu{p5LxZZ&htMg0^q+5f$Z4~J z!G%~plVNyd+O5kDYuoc{V5xM6>mn zi~=J7T1TwSF47X3LTIpTLAkkacRc}b26qEaC}3yuZB`DN^%?VWi$+v{d`l!j23g@S ziNH*fr{ieFg`zsAmUg5)Iau(nlX-X9{mkC&I z1~nfAm~ON)Cr99{2{@sgb!5g>4t8Volxp@zjGh6N<#aU^rBXnjB<{VXZLoG+NHU=V zI6D?kiOTg8vcjGB5J1LGT1I#h5;W6D$QIgVto&M00<}1yz%`g>6XMLXcVyjJPV^R! z;D-&V`orJ64{Ad-e6sVPvU&)txrBnska<59R8!-rCG%5C)TTKpU3-jKf?XZlI`wx@7}%l z|J*yqeb_x(21-@6)|zXsnZx<2vVY6}KlsuA|K@FQ+^^22UtwNS&#?$B&d|7~E7!ON zkHa~nCByDa5qEX@bKDiTQpaJ-nn!&{z5CEjkkyreht?D|rOeRPw43NFZ!Y@EFl(&C zu)A?6$aSy&E&5@SVh(0GeQih<^Mg>7OfAO2*_^tH>N-~kHs@;;NH%YP45MbNeGs92 zK2Tzv{I!~K!EdS=`=wMUJ=)%N`?SaS?R}c(mFe{nTtJvn6%|7Lvl7jPfItPGdt_X% z*wk>$Tsg;Kdqz>fa&alYC7fr4(!e^kjM_*RkEv=eDB-FY7@O_9sGeL?`-X^DFUGq{ z)z54Xm79G^*$Cnl(CxBmFKj+y9R`F#28qy)YVW_9Hd2JWasvv<{6ldI%{ zy3nsGtg%Womx>B=@!k_e-G?=<@ZD*%MimyShzix1E97}pT`0Ut_?nn0RNY-fffJAH z0iMdAHOo}paZ4wgy+U1#T+J*VOof<%zK5GHd8npftpMxXoq|cber!K9=T?h)rl6y* z1~3^^-ccO|9o9er1tr6-`j}ZxsF;~IvO4vwuW;=kjc+|$gq(-WXIu17QN+mIZZ$({ zaMYTmdKz|w6I4H|yP?LaMw_a8A0@2E!{#wHCN(V^wK6j}b5VuWqaGA)bq-|-HvkHb z_PUVLf2y$l*w(Y|i-2kb&8MaI{5i8g-9265Y9~H*=~Qb2Murwuua2skQ+2B6XpL*& zA^h}FU*~{X)ML)8V=V`lRPp&KHPxjGj}b;UaFK88Kt*YL^%=t`-xi28$-W30)x#elI1Qd=yAg-N4SqYeD z(37un>7mPGuJpJo%!SW+h{V!RmNOfKw{}3&DFCv2f-^~T8csHG+|R~!dM0X1@kU}7 zt#M6T-bQ@D4E)z0ud&l$208G=X74^jGp`Eh?@MsOoPfe_OYoM8Q zjBzBG5`u76Lf;>Y1?A2Ya;Od6C#NTpr)oQ;7ZoEUS=emaeIN zRQ@4*%dV^PXN-Uvfm-6$o}mtXSW?U9>DGiIVNyHXK9_j_cQ~r2q2d-10JyWQ>j(62 zadoW1h>y^La|LTF0@hj;BL}f6615WIAmCdhPtz=wI{FAwO92YJf`WNwC-rBq5}$%m zWdo`;q#C^c><3A*|Lm6I>WCM;ae6;;#A|lu42cGw-P;WW?)RG;N7PvQq8e!6OzV54 zn*U7S;bb2;yQq6I*QlGCL2IL7SK#=kHm62ANOQ!dP&-n~{Vbs!=5u?Tf}=)qEfo>- zv6IucJCB%t4iSz>2;!{uY!xRA3Y#gzHr5c(-!9<~VN13S`cEVDy5K*JcqmV3_vu5k zMdAE)c>W^-PAk$e`p|^C_3TMDkYb>Rk$70fG?u16|M!?W%(wrwfB)>wv!ZtY1abUO zFGk`l9wrc6f3wI3)gaZAB9LSc1a=wkrbU;tZhu!Onw9lDc`DWF6eA)$%%ALk3RMcI z%4A;>1F=8_^fs~=IRk<8oVkkaQk|IRQF>El&E;C70)6 z1~R^78tH2cMA*!>S(BvJ&eO$IgH5H5jZ`nBQ1VmvkzBbQly(Il2U`OppUr@k=H+Uh+L~9LQ}G(DoMz!wS&od8c$4Md53ePq*Q1v zohJ?{r}G5L7AhQKBW(l*e&2n95C<%&DSY&fW1ePo65YDZ-7eBp{_J1q8NmDN&!0Un z;dOsKgIbvt>?^G!&YNnPsR~Qch32AJAxY5PDHEJ zDlbd#w?<4Supj$&SN0xIKb=bvO%<5>Tfxf8Y^B>{xhT15-a7z{ersx2wU6zR=SEL{n)=7fwE}Jxf<2iqNwU;E?;9i?q zdMo)1$rL)9i6e$A!X1rt1ImPvdT?zUx5YslTcny_e*mA@!Bw%-hPuB4sjY)>zf4zS zg71cglm|0Ms2*H+3}U;GsU;=uCR^iXFRK~+3Mkl*?VN_X90)%@pHp)$w4WIwqwIvp zGNrzZeSU*yc#(91>L^Z3Ubo`TIos{B35vTNFf|<@zS=q1)owAwTM2`@u(y`yL zo|3@oH;c_v^cMP-K^0{+(^P!U=xFTJ0mNZ3g?i(m##|}1W~eA&Yvu{{B0rE?u?U3| z&%Hme`<1Fzv(ThEDNlzCjOr=fI8*yL&Mo5I(>CMf{++v1y8~`LeHY$`k--XMohyNj z=B#trGxL%c*o`t8BL>XDkM_8m*y9i_KHKANIQF=cpX_n&GV?mlG{0Ekd}Sk!)omX} zH&@Ho*xamctG>}Z<5=6CeKfY+L|FA?YQ@f0Vc)|^i-`%-qLd*n#HAlfB~(w&uC~~$ z+jB5cxW+N^OJa0{oJ6;~fJNyUeR!_}LmJo-`zO6+2p!reuQ0Ei&A5}rFRjtA>)^CC z|Is63EsHzmyyK4XSOd6%GGK%lX_5`TSfe|>mBb=VW$K&kJk*ME*B9@^(CE+{A}YEa!BK~IU{wW-Clw=JfxjygdH@$Nx$E|KI-h_bW~Yzz`OI`nn=KYm{Xr)Y_)^hhaWMz6_z;9Js7h(;r~!IJnH)UAy5=1 z^sUe}q~KkM?k+w-8(C(L>u=EMoid@Y#PkG&a{$_1VBMU>Jb*QT@F1OD-%d+ivU7AB z^C}fiLzk?UWaV?A%I|^C_rS^GPFi;o8_gY65D~~lCPvk;?MwUtEmJQko>*eG+tn0W zPP=(>fGN~-H(ndsgds}1w_@|{p5*>gWNS|Cbx!R?;5Py?m*5ag?k$*r- zu6`%O?4pSZlU%{{)1rvX6A4|4%s?W%W+(d!KF&zW8Tw%yZIC_q>yHE-_@f_1Tx|WD z^N~xPsvoxfs9Xe zQbQ{E+MJxbsVX!~%QGphlTd%%WCM3SIH@`*27bYP@UlAAdQ^2Tsz-;*)g{hdg(`^G z*n=)@!c{e)YKF~&M~fbqXF)_g1!k!}0uhd_bNY($uH<9GKaY>;diB2Bx@S~TyvZsw z*&w?R)5nPxb9OyYBB3|*;|>j8xfHR^p|j``+8Ph{I061tRJ6B9^Bcexp=UOU7R3VH zjQbB0Z0oq58h5*9>G58I`o)2S-(#0eN{ThXCQ@T4L9XEW64+rA3!5w@@Q8U)l7aAR zTKc#>Z?98G!X$w6Wu0{L(B|em`gvyb*B@-Rbe5l|p0#~|gsp_4$b0`CO&iA?*;GiF zJ{^tmFv6D)YGBaRD6$~iLo(u)lZ=R`I6VayTIfLfl8KTFSfoSawZ)k(GSfIX>(&~} z>(Y}a5p+7Ou7~i2r<5KVbJ(;6G1(=-1JwX9vv*kSms<=oA#H)g2ycC@A_&OsAjd&L z4sPp}O6~xulEezMSx-72DdUDUizI>JS)IqqUl|Bk!{qG&;6x9?2sli18YI;`ptdlK zgqsNSMz96eF;0btP5;Y}L4X{OgrO(bXcX}X6Iz*0jYy&hWTk)nAa7Bm^RGW&J`3&n zh8;|uD}l>;Ja4@-hG!=v_0BNr#>?x?l9q*|S4T$L?N{oGdY0-8L-n@pAO$+qGVS2D zP~#3Fq~GIE#8VT!mLGqOHJQYem)xg@5s>Q$5IZtBU|%tPH`J4e%KOUIYRAk*%Z+#X zbf@Y&!UlLxT~y@9*wr%%9t$vKq=YNtE(cew(;fD!>R>_4jonq4auWU8#*%1 z=nY1q1BPe)9l!D5sg{y{)sm((qSfbvR)JDy%}3TX_D3R|PAeEaZiQnA zy!FU&myvL$q^F0}uXy{F+p~KKb|mhSxgpAt!(k|W;oUt5Aqj=_U5y(@K)!l3hx7<_ zeHJ>e$2yXr`YWwzwFNcUi> z`a9V%;_1;zM$bp|6LCoCb9&bTeE8GEq?v5ryi$3I>3}hWf4B(>Q8^klAHv z0A(Ja-{E0;Ogz99@0u;I*g5J1JgwQ!i9JjmK7E4{Y{dLIK~ApFRds_9r&ducj@v8b z_Ir|NDI#L&1T_Km7nsbCTE%oAWsj3f1h-1>t|H==o>)`%bGLDi2qg@=4_6^bG`coX z24On7#ZR;q9rhj?HeKVLcI`3#8s;v9u&oQk-5`W;x>|`?nISreA2hiJuhr!7apEB) zEl@Yn(^JO%WE&f^4inSajZ#Ih|L;(+%q; zX3z5uOPE0GHLUyQ861@dtSNN?A&fCNTyd9nT0>;q64wkVEr!+L=)HtSB!$FO_|0jQ z0G6nE{I8q}*M_C5mLl*8&pah2h%0uj);KLLZJHYp0-%H9AQ3sM!0Uk1?HoeB!MZ?# z-+u@y{_+}qBGNYqsMggBy1jG}S^H`niZeu<^K7m;_a^cvRWHnlgrhwkanj%tv}H&? zfHxMCv6r78P-DqMHl*Dq$F6TxJz@DS6dg}gPLo}vA2X=RH+jojYWDi8+KuA<-a_MO z@KkG+YBS1-?DrNmdpi$$J-G1;f))E38@+`A9G%2yI9<@gPT`&OtiCZ&#c)E?*@g6<;@D+z#;culT>gYZzu z<6a#+djgck2a_7Zz7@HXZh;uyGK}<64_KQqe8JSrFu_6(xch3pVV@CMWPvihZEo#? zs5Ut1Z?SjJ3iMrCl~@l{1P=O|>hNHZBVJP>UPM_W)=lXDUw$aEe~lP8p0;{@`Wr&j z)v`LwJR^uTt|T4Hl4KHYQcd`WNrVvJ0R`7g-o_~QYKK}gnPs63p3sPd1X%YlAzDz2 z^fD&VXS9D2HI7h7PbMT{2{hvyc&s%KC*w;RnJ0JGH5b&WEjH=P%2o6 z{{9K%@qnS9n=FKFVh?L_dzLK3r)FS^XgRw6gArcNFxJqPS4uazt)gHPEK z8*!OS$!)JEUC~UQH$v!J^b2BV?AjtyMI~Nr$Az)8$7Ou$F>7$UF*a}6DZZl>At zbPSq~SqT2PwO`NBGxcfska1!A%@g`WwIU)+9g_4J{oO;C`*E1EX43g}a|Ayysn!T% zJ9o&#fN0Re(^!5yQz#J*?+ZkvyZrwk+~tqZAF zz~_LW0@!VW3iV%n=q2Yr`Ox#V7lvoj=}f)BsYUhM1zhoPx##hBgA90@Lk;Ii`RK$u zbDay|YBGe8@w;0`p?B9Ypcv*^3&w82ywbO{3iIJ-pF5^=SbMS>_ac=! zcHvCvUJ;cv1l!~&5momPuSTVwHk6`?uu?W;zh7H+hB%TCm7_*#!y0fnzIefY|A8=kdF?(F<1zxsEJl&1nOb$; z4A}{(IZ7p8a#hScPVy;=+XSqu<_rbULhAm!nonI9^X`MWbMBBiP6VVHeT=XRk2Wu| zI`}We>YP;9WM2u#2CG>A7Wf3!F)IM+I9gwWdHWpixPzC}NIpq#vGe;prn~xpUmZom z=k5yX-W;T*nRys{i>3z6xGJMpKpXTRG_awXte|t@ALWb zAT8hi*$*dHNaBV5;`7hm;lD6Jt^&%>V&-Tj4Au_T+ZwW-jVIE~H*boZZEsoEl@BT^ zZXbeSzyUfKsw3UjAtFG^vdh1=8c`i>b~(o|iBF*CwppT;-Fd0btXmz|t*^*eC{hRJ zfp|X+g#GF6E&CEQ9Z^hyQ$2VAL$6A$ z`uoUTW(P{zQIpIdvlEPYh~dLO4F3B$1^slnJxDaec$HaX_qCdjI&c7GsIrZ*ti-G` zpCreM%r3B`fVte1EI=$i@2F{DzqaTeOQ9ewQQ&#*M5C2*+V+_TLB^2gk2&?ljOAyNI=9@ zmVZ>=C0ZbfV3%@Xup5IaAf|1iQN3VCpeM+clE8!}%2WF*In)> z;ig{g6mkRd$We^g2q=9hy=Wm)>ZuVLH31PMKlTtz2S&qu;X6Br(4|_bs8h)R7m*AI z8_YoG?MKAtmw=_!Yzpl1xkvB2M5iveR=kF&XmsuaII)1)KDwiG=;wi3k1%rm`({>G zk=d5UX-@fq*0#gm18tLry^yfIK6GPbkerJWcBXPr7j!Ib{(1K|RAU zxp#w^5?^9sL2M4wGy%sCRe`@Bq7e?eN(o@|rqr$oQeJRY?%iGQ=vNj5AoPkc%>)Xf;p;?8ES+{8yXt2(S!jz0s{P+9|~s~*F+rAhiM zw*C&$tCLh0OWy$q(*OiG5I1WTGCuOT6qHgU{AB0F8wVv>?9dfPE5eylmvv)cN>R%rGX(YSCe1U5?1z#I5DdCWfI!==63cU!2EoOUEmknd`;?1(0f^&98XJAKk;U9_ zX%H_t{V2P?|G?6}ymlHKN1l?BP4(6KTl9;KUSsF9InVqL>lR|BNdG|w`pb{UvvXbw z(~LXW0LNBX56UzFKLNW;<#GXTI=KLCxm*B!CqUB2SS|&C9>Z!{QUHjCR)b0U`%%6D z-2f&rFMvLWh9%0L>|CT0t%1Bl00!^9X&y!l%SiBCB}FI# zRx^fwkwkbc838z0 zf1UU8vNz1{wfhEYilu_Tk1l=zqs;Jb2YRcz7Aw3Z#TC9z<-S_bX08p8(O=bEP!T-7 zuf}Txy#a4^`#w?fy#;9XMczWMr@&i$h_rv75h^kYyrKO@pi=%UDk!b&?l0=|dP|FZ zWrw&me3Tvl>Rv@bnD2{>kNSUeULODdf*qhPPcJ%2d6*s+_?!h^ zW(Tfd;sOvvX6n0~$6aWhaPB>>zqt(%IXNj#jzmjRD#Foa-}Z9PHo!t+lcEbLz>4Rd zR!%&RvGP4;u^$iyE$*=q`!bA0>~YRi29TxH11;h7clRhh6_LQK_q-Y77@<4-e57}7 zPt8N~v8*nl=9NM~;E51{l|zId6Wmm*W{H8kYr=~mM@bmKdWC1V;FQ;soTWtwUK)xi zL2uBaH>mH_jSy9Dxsgzc&|d2yCa|~OHK<9qzC!~Xin=@f=Ll(tO_QHMgY)T)$Q{a;dGf*Sorg?|%Aip5bWx@Lmiyj5l3rG)os^Pdl8#}3nbSD_kbCAAhxCyR zmuK9@(XxnHS^@FD{=nEpKpmw_Ka_>U=AEPXX{M=B>i<}yv=K=H0L9CV^pi{;u*c`9 z;Ck3|wAC5r*BmOj@tb<3H!;pq9O@2Wt2Bml$^H3qvwaYhh42uNRyO*Z5R9HLLNIE;L!_1Wkd&W}6N2%CRa^kO z#X?rj{s#D->u*l-DzHuDyfmkWPR{;hAQytcA+lLTa*+`kJ$0VH(Lk^_hc5pbf^itr z`D@n6oi;}>!=O6{xceTzL&x?`^Scx*c;!T3bo?5D!D-opIPJ{iFkB`AgQLJ%!J@LU zh<<%)hj3I?pTZ{Vg#GD1)VAr_Iu2A%@RDj)0gKhVp;TZJ?-xfD$K)3u%&uQvJLC%V ze5^hD97a}YcD*UJXI~R_{<-#St=$jGujjI4dlYuljOL`sK6HDmY1p7d zW9)^*>pdv>N2l0P7|XUB6nvFDte*oZj>1TIMJ*?~XQo<&lTF6^6e0*(>=Xu6#R zhUqh$M|xeVbJA0YIC=N8*d}RL(zcMZ`L;9{pO6HC-|I-2jl#*x@(uNsA}GqD_Q^NY zC=@|!bsWnN2X@p@h40)bO&475=Z)QCI&rqT)SILk(VGX@LFlcxdk3?spMr7w(3#G# z@2KQ#qKUij4<9hb{8v6-KKmR*j)KSwydF%XCaU8u*qZ^8em>X0+9L!sZ)KR@w~U^K z8t+1rb~)qL6SUQ)49rc+gGsp?q2Z(#>N`*su@k+87udWrd7bYWOX@t?g2L$AyC9>) z&3zAZCG1inLv(6#Iqh!5-6181q@$|vgLm+lcg!PQB}IPrH~>4`xfexcI_Lyrrea8W zgvn*`m0LG52e74_Q5}#U7`|PSss%huTngQpU-Nqm8p>HoW0XN8&~3sbsQ|0}Z~gDl z@Qi$ZhhIybA-~9@!LmMI{QQeYqcFhdzjD8D>&-8({o$4rRgX1lj(8|QDF0mkizj#i z_v4X`hjokMgBAul;{Kn|hpP>h5k>5ZhMbOyK4;Pz8C4grqbW3rj|B}f*ZB!%al$>x z2j%ongqYcEuhoVSrCYfkCc@^MxQ3N}mu(bHd>-3FPe9KgurJhNf+!)W4uXMDDKW1o zsu>EOX7bQS8p!ZGNI>eGML;UQGqHyhL_*SBMn6L_T&cw>dQj>NxmJ;1i6Yt!qcYtf z5wok%W8a3QuVFOBK252>Z}}?Sf~@|43|Fz-U7-S69>!cZzLz>&0e5!{RzY19`jNUG zO*rnM4fKRWzQ=63P_5f&=n44zSxoITu;0ytrB9I?_yEAfy+*n@HAtk653zWYB}O57 zH(0rbf1(j^K?p74ADt>-kBdNDOcX4C3GEnN7MF8uV~FzSAn*cmz}gVzH;%(=m-|I{ zm71b>M-tUW=7Hbma=)x=9x`l=gaXfw7lpPpTpoD$+H#3Ibtg`8Rxyw+;!qrs1ijre zRAvZea1W_*@(YaA9N7hd)K}#XJV( z+rjc@&S1m}q_-(uK-yh$%sxter8Ai1x_R*(kmo$og5RD{&k4fL98%lN{*cSqsj#4v z_83Q9m>B*F`=L6)l{->NM%`AgZ}HX&ENY#kzK;;8c>bwLlzzIyYBv`+uO2gTncIhX zc!F0V*QGeHnGr(Ij!|f!g1;|QM)bORL9Ah5cf|B5veb9W>_Ui8`kD0NPRC3kTQqfi zN$Hk%ukww|euY+?#qIpfUA_@P5#e*!$5PkWr#Y_iVpIb?(}Q0EAv1fBzu6Icl$C(~ z83`1)jk41R0V4eN%~*!=oAwZ>iw}o-r~11(q9J%v%F^v%dZ25S`&CB*%tgHE>Z;ST zBbwGT$j?qq>mvw2G0DIFXxd=k38|Tv|G)nBUAS>fxBdC9*oef!(N&5Q^mV>#dQ?yH zV`fx0as1LNwJYB>i&5!OzDs&u|p7$v6j>E8m10sa^Xj-_;fNBxrUBqfWQyyT-;aL@{a7W?v^qm@ej&a;95OSkBu=gguU`HKu7P3}K#*;5=A7Y4S6yQr zb$aTs=E*)>WDPhI+eP5WcRi+Vk4x9OI%@)|M;*EKRgK3kXAa%i_hR|3o(3w)Q#qiI zrYh=XzN@$2qvj!YWZH++!*R1AP<1Ka)rW8Ce7@^gKh}+WSAQ*56J6`>ttHgJ`O}=% z*;q_#Ze1Jb;jr)1wZZ-qkWJumBB(B_+R{@cy0*DducyJM?Ef*?iGdaa{eMq}yPCCC zV1$A#^pkUJ9x-8Uiij4|W6y$#n1pHO3B@372RojV01-vlk@GgfGp{v|Y9s$%NrvK< z+jE~&u1oZcI;eZhAiAjOhbpOqAPz@Lf!#@YwwoOx(u7weFV*YnwCqg44%l@!5JBxW zWU6r_gGbaiQ{BWST3ug(_$L^w7O~zMLWb&5@KwrAdDQI@3=kV;8-}Y|L`k#M(AG3V zmE2{b_BA+1?Kuu`1JBIIK!205XQ^+Wmvb70p{zLNO%6S>mDHd1m}l-{X~K+g$0z9( zx^*|%cVi|LlSh> z)bM50IL1e)k@#85Lxd7EUvc8qDFO@;fJkA%k&y424{I~|u0?c~pzb82pT-DW#Ht5D z@KWTI8aC^3zF1>9mPhEtSL)qgj=pY$jA%Oa)5>rF#NtJMJrcJAA9N?|9`L~FIb{g|5N?nh2r0tmlyoM^v-ZytX9vU zDm<(wGzoSHjhn~(``?pwj_Y2W5{(`80bBZ3d%@kf(;F@1^hTq0E4NdOKhx9zZOt^e zUEQ@F|L%;7f6np`yu{<*Tj!rQPx&WXNJUqkK(ZLDH+GE{wCt%`eHU?%5*JP^nM8WO z0V6XKf>#?z-7-%RgW}IjngI|QMcUX|C5NvhH8v9IRVPJ=$zTSUuJxoImGe6?riD1xCWF>JMX zLDDR5u@)H^^+D%_9RD=2a}Vo{luP_FOOP3kcp9l(;!|us7V|eBAT$9LE{l+EBO&ZD zmp5lw-q#3HL{#qMPVU~p7Q0$Yvkm34hVI#gEa z=9xvYZX3g%#0K(AtH-H&y<>2IM>UR#T4kq4J;&Z4)yGF^?CDxO;bhQDS;L(w;7d#@ ztqAr8;6fW|ar2B4-N7jsLFEO{hx82LGKoR)jcpg)e6rzMt|r#6?%zvyc(CEHwvKB#=FbSKHabN!wtZ#k>|D z2v~Eu!VAk|1~ul!U7?;?>zeJfvZv_^aZTXR1LzBR^3vR-mGgibXak(6kV&)L0=7uV z%@)5OMl629haulDaP2zer~-B2iA`OoEo4sUnR`3jG~`M7AvM-P$l+;Gqino`NBa%? z_?;Sd8_-aWQnlTOd|6PYK1vY1lI_Q5k?hack6|@h*TSIV^;~8i2v|wT-wFr4S#oDU2YjJm#TxyYYOuk;3)X2` zT8K&qZQU3Eh5&XTU^Z7KYb#L^52E04bqZ|Z++KEj(q)wGY-}C&BrkVUq_OIprC&Y? zMPCF^e$WHL)$8``jKF>*iv0dCf)O?()aI-pNIQoX+iWXMBgBrHJxpXvk9E9K>D)wA zn0SVEqEz7D7@^x}3Le`|^iqZ(-M5=KZ6@?IykwmfzZ7@qD9&Us3dP~gO#zZ&Um%^p zH3McG0^DdjmPj*jO)OEUpKP87JP|WakZWM16CME+0OG%EdFKe`4DK7yKgU@9=O*#^ zEKv-pCh1ic^vRrjTz8DfpKZqwi+^YmW<7|(|C{E~gm3^(`XW?KY@Y-F zuC38AC9?ESX2e;D7R+FE{IBeU5N)W8V-sX0s0`93`rojdfrcE@-&w%=u@?RF|3BK2 zMswC9kf<31X##P6WB9?tASRp@PK_9BhI0m*b;kR`<}#i$wT%4Eqyp*d`Ew)5A59{x z{r?Sn0o3`Q>GS{p(#8A#q3S)BQ@1$@j#AB!gye4L9^Re5b&Yps4VoE_4P$%+T zTZ80k9fxt+t=vEmYzmpl2KPkzx3CX9fnx+p!#HXEUT+2U)xCZL-K)UEZzyJl;VmvG zF?jCH1#r;I7*!PT%JeWsEJbw zE%0C7>T=0W(P+Dt#S=?gICYrDWfqCWCKg`xl8CQA#RQ_5u~R5~sn$&|9$KQQz$vz0 z!vujKqbhk_@KJFNVMs!$J$=LFUz4O9B;>k2iDntHSFnei>Bpi%%?$#$kU$U(Y?`Sl zkXLOJ7zI{gsLy$HW-*2ga0tkKb3!Z=7qEb|U~c)R$Vg9`HzA4*d6^41{G`L9O0SWz zK!o=H{rB(ea13K~K&K7Bv8CbmmqmfU%>V!U-*1Wz`1dOr(FDZ`K>mMlOsoKhBc7cG zto4bAh85sRgnT>43J@{W95xZH@o>c0nQ4M2bVpF>yHVUD`YuvPETZorFwaD^Nn|zt zK;&MEfMCeJ{DlK}HKJ!8AFZI+vZ1f|bdURNXvE>}JHsuA7Cq5ou9xo>c}N zl@3SzW{E1<#?HX#<%&q*o`}Bl%^t&G!#Zap#co7GX4tG(M=V6<1>Scy6%$>ON1r>;HrH)U zf&e0Z>x4bbf|+~jh=uC02uKOnUx`Hm<{XZTT4z_�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 List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[{{BRANCHNAME}}] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[{{BRANCHNAME}}] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"{{BRANCHNAME}} - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/__init__.py b/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/cache.py b/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/cache.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/formatter.py b/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/formatter.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/processor.py b/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/processor.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/validator.py b/src/aipass/spawn/templates/agent_mock_branch/apps/handlers/validator.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/modules/__init__.py b/src/aipass/spawn/templates/agent_mock_branch/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/modules/config.py b/src/aipass/spawn/templates/agent_mock_branch/apps/modules/config.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/modules/core.py b/src/aipass/spawn/templates/agent_mock_branch/apps/modules/core.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/modules/help.py b/src/aipass/spawn/templates/agent_mock_branch/apps/modules/help.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/modules/status.py b/src/aipass/spawn/templates/agent_mock_branch/apps/modules/status.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/plugins/__init__.py b/src/aipass/spawn/templates/agent_mock_branch/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/plugins/export.py b/src/aipass/spawn/templates/agent_mock_branch/apps/plugins/export.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/apps/plugins/webhook.py b/src/aipass/spawn/templates/agent_mock_branch/apps/plugins/webhook.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/artifacts/artifact_1_registration.json b/src/aipass/spawn/templates/agent_mock_branch/artifacts/artifact_1_registration.json new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/artifacts/artifact_7_cortex_birth_certificate.json b/src/aipass/spawn/templates/agent_mock_branch/artifacts/artifact_7_cortex_birth_certificate.json new file mode 100644 index 00000000..44385387 --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/artifacts/artifact_7_cortex_birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": 7, + "name": "CORTEX Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "CORTEX", + "rarity": "unique", + "description": "Official birth certificate for CORTEX. Citizen #7, registered using 'AIPass Workshop' template. Purpose: New branch - purpose TBD", + "metadata": { + "citizen_number": 7, + "template": "AIPass Workshop", + "purpose": "New branch - purpose TBD" + }, + "created_at": "2026-02-19T03:46:41Z" +} \ No newline at end of file diff --git a/src/aipass/spawn/templates/agent_mock_branch/docs/api_reference.md b/src/aipass/spawn/templates/agent_mock_branch/docs/api_reference.md new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/docs/architecture.md b/src/aipass/spawn/templates/agent_mock_branch/docs/architecture.md new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/docs/changelog.md b/src/aipass/spawn/templates/agent_mock_branch/docs/changelog.md new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/docs/index.json b/src/aipass/spawn/templates/agent_mock_branch/docs/index.json new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/dropbox/incoming_data.json b/src/aipass/spawn/templates/agent_mock_branch/dropbox/incoming_data.json new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/templates/agents/branch_template/flow.local.md b/src/aipass/spawn/templates/agent_mock_branch/flow.local.md similarity index 100% rename from src/aipass/templates/agents/branch_template/flow.local.md rename to src/aipass/spawn/templates/agent_mock_branch/flow.local.md diff --git a/src/aipass/spawn/templates/agent_mock_branch/logs/agent_mock_branch.log b/src/aipass/spawn/templates/agent_mock_branch/logs/agent_mock_branch.log new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/logs/error.log b/src/aipass/spawn/templates/agent_mock_branch/logs/error.log new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/pytest.ini b/src/aipass/spawn/templates/agent_mock_branch/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/spawn/templates/agent_mock_branch/templates/default_config.json b/src/aipass/spawn/templates/agent_mock_branch/templates/default_config.json new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/templates/welcome_message.md b/src/aipass/spawn/templates/agent_mock_branch/templates/welcome_message.md new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/tests/__init__.py b/src/aipass/spawn/templates/agent_mock_branch/tests/__init__.py new file mode 100644 index 00000000..bb01a91c --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for cortex diff --git a/src/aipass/spawn/templates/agent_mock_branch/tests/conftest.py b/src/aipass/spawn/templates/agent_mock_branch/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/spawn/templates/agent_mock_branch/tests/test_core.py b/src/aipass/spawn/templates/agent_mock_branch/tests/test_core.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/tests/test_integration.py b/src/aipass/spawn/templates/agent_mock_branch/tests/test_integration.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/tests/test_processor.py b/src/aipass/spawn/templates/agent_mock_branch/tests/test_processor.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/tests/test_validator.py b/src/aipass/spawn/templates/agent_mock_branch/tests/test_validator.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/tools/debug.py b/src/aipass/spawn/templates/agent_mock_branch/tools/debug.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/tools/migrate.py b/src/aipass/spawn/templates/agent_mock_branch/tools/migrate.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/spawn/templates/agent_mock_branch/tools/verify_branch.py b/src/aipass/spawn/templates/agent_mock_branch/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/spawn/templates/agent_mock_branch/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/templates/__init__.py b/src/aipass/templates/__init__.py deleted file mode 100644 index af4a834f..00000000 --- a/src/aipass/templates/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.templates — Central template storage. - -Templates for plan files, memory scaffolding, system prompts, -and branch-local configurations. Used by aipass init and Flow. -""" diff --git a/src/aipass/trigger/__init__.py b/src/aipass/trigger/__init__.py deleted file mode 100644 index f4c2bf2d..00000000 --- a/src/aipass/trigger/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.trigger — Error detection and auto-dispatch. - -Watches for errors across the system and automatically dispatches -investigations to the appropriate branch. -""" diff --git a/src/aipass/trigger/handlers/__init__.py b/src/aipass/trigger/handlers/__init__.py deleted file mode 100644 index 7023f4e8..00000000 --- a/src/aipass/trigger/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""trigger.handlers — Error matching and escalation implementation.""" diff --git a/src/aipass/trigger/modules/__init__.py b/src/aipass/trigger/modules/__init__.py deleted file mode 100644 index 5752be25..00000000 --- a/src/aipass/trigger/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""trigger.modules — Error detection and dispatch logic.""" diff --git a/src/aipass/trigger/plugins/__init__.py b/src/aipass/trigger/plugins/__init__.py deleted file mode 100644 index 7667ebcd..00000000 --- a/src/aipass/trigger/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""trigger.plugins — Extensible plugin interface.""" diff --git a/tests/test_drone_cli.py b/tests/test_drone_cli.py deleted file mode 100644 index 002b56ab..00000000 --- a/tests/test_drone_cli.py +++ /dev/null @@ -1,273 +0,0 @@ -""" -Tests for the drone CLI (aipass.drone.cli). - -Covers: - - drone / drone --help → shows help text - - drone --version → shows version - - drone systems → lists branches - - drone @branch command → routes correctly - - drone @branch --help → shows branch help - - unknown commands → error message + exit 1 - - no args → shows help -""" - -from __future__ import annotations - -from unittest.mock import patch - -import aipass -from aipass.drone.cli import main -from aipass.drone import CommandResult, HelpResult - - -# --------------------------------------------------------------------------- -# Helpers -# --------------------------------------------------------------------------- - - -def _run_cli(*args: str) -> tuple[int, str, str]: - """ - Call main() with the given argv, capturing stdout/stderr and exit code. - - Returns: - (exit_code, stdout_text, stderr_text) - """ - stdout_lines: list[str] = [] - stderr_lines: list[str] = [] - - class _Cap: - def __init__(self, buf: list[str]) -> None: - self._buf = buf - - def write(self, s: str) -> int: - self._buf.append(s) - return len(s) - - def flush(self) -> None: - pass - - exit_code = 0 - - def _exit(code: int = 0) -> None: - nonlocal exit_code - exit_code = code - raise SystemExit(code) - - with ( - patch("sys.argv", ["drone", *args]), - patch("sys.stdout", _Cap(stdout_lines)), - patch("sys.stderr", _Cap(stderr_lines)), - patch("sys.exit", side_effect=_exit), - ): - try: - main() - except SystemExit: - pass - - return exit_code, "".join(stdout_lines), "".join(stderr_lines) - - -# --------------------------------------------------------------------------- -# Help / version -# --------------------------------------------------------------------------- - - -class TestHelpAndVersion: - """drone --help and drone --version.""" - - def test_no_args_shows_help(self): - """drone with no args prints help and exits 0.""" - code, out, _ = _run_cli() - assert code == 0 - assert "drone" in out - assert "Usage" in out or "usage" in out.lower() or "@branch" in out - - def test_help_flag_shows_help(self): - """drone --help prints help and exits 0.""" - code, out, _ = _run_cli("--help") - assert code == 0 - assert "drone" in out - - def test_version_flag_shows_version(self): - """drone --version prints the aipass version and exits 0.""" - code, out, _ = _run_cli("--version") - assert code == 0 - assert aipass.__version__ in out - - -# --------------------------------------------------------------------------- -# systems -# --------------------------------------------------------------------------- - - -class TestSystems: - """drone systems — list registered branches.""" - - def test_systems_lists_branches(self): - """drone systems calls list_branches and prints them.""" - with patch("aipass.drone.cli.list_branches", return_value=["@flow", "@devpulse"]): - code, out, _ = _run_cli("systems") - - assert code == 0 - assert "@flow" in out - assert "@devpulse" in out - - def test_systems_empty_registry(self): - """drone systems with no branches prints a 'no branches' message.""" - with patch("aipass.drone.cli.list_branches", return_value=[]): - code, out, _ = _run_cli("systems") - - assert code == 0 - assert "No branches" in out or "no branches" in out.lower() or out.strip() != "" - - def test_systems_shows_count(self): - """drone systems output mentions the number of branches.""" - branches = ["@alpha", "@beta", "@gamma"] - with patch("aipass.drone.cli.list_branches", return_value=branches): - code, out, _ = _run_cli("systems") - - assert code == 0 - # Should show 3 branches somewhere in output - assert "3" in out or all(b in out for b in branches) - - -# --------------------------------------------------------------------------- -# @branch routing -# --------------------------------------------------------------------------- - - -class TestBranchRouting: - """drone @branch command [args] — route commands.""" - - def _make_result(self, stdout="", stderr="", exit_code=0) -> CommandResult: - return CommandResult(stdout=stdout, stderr=stderr, exit_code=exit_code, branch="flow", command="status") - - def test_routes_command_to_branch(self): - """drone @flow status calls route_command with correct args.""" - result = self._make_result(stdout="flow is running\n") - with patch("aipass.drone.cli.route_command", return_value=result) as mock_route: - code, out, _ = _run_cli("@flow", "status") - - mock_route.assert_called_once_with("@flow", "status", args=None) - assert code == 0 - assert "flow is running" in out - - def test_routes_command_with_extra_args(self): - """drone @flow run --verbose passes args correctly.""" - result = self._make_result(stdout="verbose output\n") - with patch("aipass.drone.cli.route_command", return_value=result) as mock_route: - code, out, _ = _run_cli("@flow", "run", "--verbose") - - mock_route.assert_called_once_with("@flow", "run", args=["--verbose"]) - assert code == 0 - - def test_exits_with_command_exit_code(self): - """drone exits with the same code as the routed command.""" - result = self._make_result(exit_code=2, stderr="something failed\n") - with patch("aipass.drone.cli.route_command", return_value=result): - code, _, err = _run_cli("@flow", "status") - - assert code == 2 - assert "something failed" in err - - def test_branch_not_found_exits_1(self): - """BranchNotFoundError prints error and exits 1.""" - from aipass.drone import BranchNotFoundError - with patch("aipass.drone.cli.route_command", side_effect=BranchNotFoundError("@ghost not found")): - code, _, err = _run_cli("@ghost", "status") - - assert code == 1 - assert "ghost" in err or "not found" in err.lower() - - def test_command_execution_error_exits_1(self): - """CommandExecutionError prints error and exits 1.""" - from aipass.drone import CommandExecutionError - with patch("aipass.drone.cli.route_command", side_effect=CommandExecutionError("entry point missing")): - code, _, err = _run_cli("@flow", "status") - - assert code == 1 - assert "entry point missing" in err - - def test_stdout_printed(self): - """Command stdout is printed to stdout.""" - result = self._make_result(stdout="hello world\n") - with patch("aipass.drone.cli.route_command", return_value=result): - code, out, _ = _run_cli("@flow", "status") - - assert "hello world" in out - - def test_stderr_printed_to_stderr(self): - """Command stderr is printed to stderr.""" - result = self._make_result(stderr="warning: something\n", exit_code=0) - with patch("aipass.drone.cli.route_command", return_value=result): - code, _, err = _run_cli("@flow", "status") - - assert "warning: something" in err - - -# --------------------------------------------------------------------------- -# @branch --help -# --------------------------------------------------------------------------- - - -class TestBranchHelp: - """drone @branch --help — show branch help.""" - - def test_branch_help_calls_get_help(self): - """drone @flow --help calls get_help and prints text.""" - help_result = HelpResult(branch="flow", command=None, text="flow help text\n", commands_found=["status"]) - with patch("aipass.drone.cli.get_help", return_value=help_result) as mock_help: - code, out, _ = _run_cli("@flow", "--help") - - mock_help.assert_called_once_with("@flow") - assert code == 0 - assert "flow help text" in out - - def test_branch_no_args_shows_help(self): - """drone @flow with no command also calls get_help.""" - help_result = HelpResult(branch="flow", command=None, text="flow help\n", commands_found=[]) - with patch("aipass.drone.cli.get_help", return_value=help_result): - code, out, _ = _run_cli("@flow") - - assert code == 0 - assert "flow help" in out - - def test_branch_not_found_on_help_exits_1(self): - """BranchNotFoundError on --help exits 1.""" - from aipass.drone import BranchNotFoundError - with patch("aipass.drone.cli.get_help", side_effect=BranchNotFoundError("@ghost not found")): - code, _, err = _run_cli("@ghost", "--help") - - assert code == 1 - - def test_command_execution_error_on_help_exits_1(self): - """CommandExecutionError on --help exits 1.""" - from aipass.drone import CommandExecutionError - with patch("aipass.drone.cli.get_help", side_effect=CommandExecutionError("no entry")): - code, _, err = _run_cli("@flow", "--help") - - assert code == 1 - - -# --------------------------------------------------------------------------- -# Unknown commands -# --------------------------------------------------------------------------- - - -class TestUnknownCommands: - """Unknown top-level commands show an error.""" - - def test_unknown_command_exits_1(self): - """An unrecognised command exits with code 1.""" - code, _, err = _run_cli("frobulate") - assert code == 1 - - def test_unknown_command_shows_error_message(self): - """An unrecognised command prints an error to stderr.""" - code, _, err = _run_cli("frobulate") - assert "frobulate" in err or "unknown" in err.lower() - - def test_unknown_command_suggests_help(self): - """Error message mentions --help.""" - code, _, err = _run_cli("frobulate") - assert "--help" in err diff --git a/tests/test_drone_compliance.py b/tests/test_drone_compliance.py deleted file mode 100644 index 2dd880b8..00000000 --- a/tests/test_drone_compliance.py +++ /dev/null @@ -1,228 +0,0 @@ -""" -Tests for the drone-compliance seedgo plugin. - -Covers: - - Passes on packages with proper drone_adapter.py - - Fails on packages missing drone_adapter.py - - Fails on adapter missing DRONE_MODULE / handle_command / get_help - - Skips non-target packages - - Handles syntax errors in adapter files -""" - -from __future__ import annotations - -import textwrap -from pathlib import Path - -from seedgo.plugins.drone_compliance import PLUGIN_NAME, check - - -class TestDroneCompliancePass: - """Packages with proper drone adapters should pass.""" - - def test_seedgo_adapter_passes(self, tmp_path: Path): - """seedgo's own drone_adapter.py passes all checks.""" - # Create a fake "seedgo" package with a proper adapter - pkg = tmp_path / "seedgo" - pkg.mkdir() - (pkg / "__init__.py").write_text('"""Seedgo package."""\n') - (pkg / "drone_adapter.py").write_text( - textwrap.dedent("""\ - DRONE_MODULE = {"name": "seedgo", "version": "1.0.0", "description": "test"} - - def handle_command(command, args=None): - return {"stdout": "", "stderr": "", "exit_code": 0} - - def get_help(command=None): - return "help text" - - def get_introspective(): - return {} - """) - ) - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["seedgo"]}) - - assert result.plugin == PLUGIN_NAME - assert result.passed is True - assert result.score == 100 - - def test_all_checks_present(self, tmp_path: Path): - """All checks pass: adapter exists, DRONE_MODULE with keys, handle_command, get_help, get_introspective.""" - pkg = tmp_path / "mymod" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - (pkg / "drone_adapter.py").write_text( - textwrap.dedent("""\ - DRONE_MODULE = {"name": "mymod", "version": "0.1.0", "description": "test"} - - def handle_command(command, args=None): - return {} - - def get_help(command=None): - return "" - - def get_introspective(): - return {} - """) - ) - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["mymod"]}) - assert result.passed is True - assert result.score == 100 - - -class TestDroneComplianceFail: - """Packages missing drone adapter components should fail.""" - - def test_missing_adapter_fails(self, tmp_path: Path): - """Package without drone_adapter.py fails.""" - pkg = tmp_path / "seedgo" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["seedgo"]}) - - assert result.passed is False - assert result.score == 0 - error_names = [c.name for c in result.checks if not c.passed] - assert "adapter-exists" in error_names - - def test_missing_drone_module_dict(self, tmp_path: Path): - """Adapter without DRONE_MODULE fails.""" - pkg = tmp_path / "mymod" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - (pkg / "drone_adapter.py").write_text( - textwrap.dedent("""\ - def handle_command(command, args=None): - return {} - - def get_help(command=None): - return "" - """) - ) - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["mymod"]}) - assert result.passed is False - failed = [c.name for c in result.checks if not c.passed] - assert "drone-module-meta" in failed - - def test_missing_handle_command(self, tmp_path: Path): - """Adapter without handle_command fails.""" - pkg = tmp_path / "mymod" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - (pkg / "drone_adapter.py").write_text( - textwrap.dedent("""\ - DRONE_MODULE = {"name": "mymod", "version": "1.0.0", "description": "test"} - - def get_help(command=None): - return "" - """) - ) - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["mymod"]}) - assert result.passed is False - failed = [c.name for c in result.checks if not c.passed] - assert "handle-command" in failed - - def test_missing_get_help_is_warning(self, tmp_path: Path): - """Adapter without get_help is a warning, not an error — still passes.""" - pkg = tmp_path / "mymod" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - (pkg / "drone_adapter.py").write_text( - textwrap.dedent("""\ - DRONE_MODULE = {"name": "mymod", "version": "1.0.0", "description": "test"} - - def handle_command(command, args=None): - return {} - """) - ) - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["mymod"]}) - # Missing get_help is WARNING severity, not ERROR — should still pass - assert result.passed is True - warnings = [c for c in result.checks if not c.passed] - assert any(c.name == "get-help" for c in warnings) - - def test_missing_drone_module_keys(self, tmp_path: Path): - """Adapter with DRONE_MODULE but missing required keys fails.""" - pkg = tmp_path / "mymod" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - (pkg / "drone_adapter.py").write_text( - textwrap.dedent("""\ - DRONE_MODULE = {"name": "mymod"} - - def handle_command(command, args=None): - return {} - - def get_help(command=None): - return "" - """) - ) - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["mymod"]}) - assert result.passed is False - failed = [c.name for c in result.checks if not c.passed] - assert "drone-module-keys" in failed - - def test_missing_get_introspective_is_warning(self, tmp_path: Path): - """Adapter without get_introspective is a warning, not an error — still passes.""" - pkg = tmp_path / "mymod" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - (pkg / "drone_adapter.py").write_text( - textwrap.dedent("""\ - DRONE_MODULE = {"name": "mymod", "version": "1.0.0", "description": "test"} - - def handle_command(command, args=None): - return {} - - def get_help(command=None): - return "" - """) - ) - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["mymod"]}) - # Missing get_introspective is WARNING severity, not ERROR — should still pass - assert result.passed is True - warnings = [c for c in result.checks if not c.passed] - assert any(c.name == "get-introspective" for c in warnings) - - -class TestDroneComplianceSkip: - """Non-target packages should be skipped.""" - - def test_non_target_package_skipped(self, tmp_path: Path): - """Packages not in target_packages are skipped with pass.""" - pkg = tmp_path / "unrelated" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["seedgo"]}) - assert result.passed is True - assert result.metadata.get("skipped") is True - - def test_file_not_found_passes(self, tmp_path: Path): - """Non-existent file returns pass (skipped).""" - result = check(str(tmp_path / "nonexistent" / "__init__.py")) - assert result.passed is True - - -class TestDroneComplianceEdgeCases: - """Edge cases for the compliance check.""" - - def test_syntax_error_in_adapter(self, tmp_path: Path): - """Adapter with syntax error fails gracefully.""" - pkg = tmp_path / "mymod" - pkg.mkdir() - (pkg / "__init__.py").write_text("") - (pkg / "drone_adapter.py").write_text("def broken(:\n") - - result = check(str(pkg / "__init__.py"), config={"target_packages": ["mymod"]}) - assert result.passed is False - failed = [c.name for c in result.checks if not c.passed] - assert "adapter-parseable" in failed diff --git a/tests/test_drone_core.py b/tests/test_drone_core.py deleted file mode 100644 index 8d7d01be..00000000 --- a/tests/test_drone_core.py +++ /dev/null @@ -1,390 +0,0 @@ -""" -Unit tests for drone core functionality. - -Tests all Phase 1 routing functions with >80% coverage target. -""" - -import json -from pathlib import Path - -import pytest - -from aipass.drone import ( - BranchAlreadyExistsError, - BranchNotFoundError, - InvalidPathError, - RegistryNotFoundError, - branch_exists, - get_branch_info, - get_registry_path, - initialize_registry, - list_branches, - register_branch, - reset_registry_path, - resolve_branch, - set_registry_path, -) - - -@pytest.fixture -def temp_registry(tmp_path): - """Create a temporary registry for testing.""" - registry_path = tmp_path / "test_registry.json" - set_registry_path(registry_path) - initialize_registry() - yield registry_path - reset_registry_path() - - -@pytest.fixture -def sample_branches(tmp_path): - """Create sample branch directories for testing.""" - branches = {} - for name in ["agent1", "agent2", "service1"]: - branch_dir = tmp_path / "branches" / name - branch_dir.mkdir(parents=True, exist_ok=True) - branches[name] = branch_dir - return branches - - -class TestConfiguration: - """Test registry configuration.""" - - def test_default_registry_path(self): - """Test default registry path is ~/.aipass/BRANCH_REGISTRY.json.""" - reset_registry_path() - path = get_registry_path() - assert path == Path.home() / ".aipass" / "BRANCH_REGISTRY.json" - - def test_set_custom_registry_path(self, tmp_path): - """Test setting custom registry path.""" - custom_path = tmp_path / "custom_registry.json" - set_registry_path(custom_path) - assert get_registry_path() == custom_path - reset_registry_path() - - def test_reset_registry_path(self, tmp_path): - """Test resetting registry path to default.""" - custom_path = tmp_path / "custom_registry.json" - set_registry_path(custom_path) - reset_registry_path() - path = get_registry_path() - assert path == Path.home() / ".aipass" / "BRANCH_REGISTRY.json" - - -class TestRegistryInitialization: - """Test registry initialization.""" - - def test_initialize_creates_registry(self, tmp_path): - """Test initialize_registry creates valid registry file.""" - registry_path = tmp_path / "new_registry.json" - set_registry_path(registry_path) - - initialize_registry() - - assert registry_path.exists() - with open(registry_path, encoding="utf-8") as f: - data = json.load(f) - - assert data["version"] == "1.0" - assert "branches" in data - assert isinstance(data["branches"], dict) - assert "metadata" in data - - reset_registry_path() - - def test_initialize_idempotent(self, temp_registry): - """Test initialize_registry is idempotent (safe to call multiple times).""" - # First initialization done by fixture - first_content = temp_registry.read_text() - - # Second initialization should not change anything - initialize_registry() - second_content = temp_registry.read_text() - - assert first_content == second_content - - -class TestBranchRegistration: - """Test branch registration functionality.""" - - def test_register_branch_basic(self, temp_registry, sample_branches): - """Test basic branch registration.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", str(branch_path), "agent") - - # Verify branch was added - with open(temp_registry, encoding="utf-8") as f: - data = json.load(f) - - assert "agent1" in data["branches"] - branch = data["branches"]["agent1"] - assert branch["name"] == "agent1" - assert Path(branch["path"]) == branch_path - assert branch["type"] == "agent" - assert branch["status"] == "active" - assert "created" in branch - - def test_register_branch_with_path_object(self, temp_registry, sample_branches): - """Test branch registration with Path object.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", branch_path, "agent") - - assert branch_exists("agent1") - - def test_register_branch_duplicate_raises_error(self, temp_registry, sample_branches): - """Test registering duplicate branch raises error.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", str(branch_path), "agent") - - with pytest.raises(BranchAlreadyExistsError): - register_branch("agent1", str(branch_path), "agent") - - def test_register_branch_nonexistent_path_raises_error(self, temp_registry): - """Test registering nonexistent path raises error.""" - fake_path = "/nonexistent/path/to/branch" - - with pytest.raises(InvalidPathError): - register_branch("fake_branch", fake_path, "agent") - - def test_register_branch_file_not_directory_raises_error(self, temp_registry, tmp_path): - """Test registering a file instead of directory raises error.""" - file_path = tmp_path / "file.txt" - file_path.write_text("test") - - with pytest.raises(InvalidPathError): - register_branch("bad_branch", str(file_path), "agent") - - def test_register_branch_auto_initializes_registry(self, tmp_path): - """Test registering branch auto-initializes registry if it doesn't exist.""" - registry_path = tmp_path / "new_registry.json" - set_registry_path(registry_path) - - # Registry doesn't exist yet - assert not registry_path.exists() - - # Register branch should auto-initialize - branch_path = tmp_path / "agent" - branch_path.mkdir() - register_branch("agent", str(branch_path), "agent") - - # Registry should now exist - assert registry_path.exists() - assert branch_exists("agent") - - reset_registry_path() - - -class TestBranchResolution: - """Test branch resolution functionality.""" - - def test_resolve_branch_with_at_prefix(self, temp_registry, sample_branches): - """Test resolving branch with @ prefix.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", str(branch_path), "agent") - - resolved = resolve_branch("@agent1") - assert Path(resolved) == branch_path - - def test_resolve_branch_without_at_prefix(self, temp_registry, sample_branches): - """Test resolving branch without @ prefix.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", str(branch_path), "agent") - - resolved = resolve_branch("agent1") - assert Path(resolved) == branch_path - - def test_resolve_branch_not_found_raises_error(self, temp_registry): - """Test resolving nonexistent branch raises error.""" - with pytest.raises(BranchNotFoundError): - resolve_branch("@nonexistent") - - def test_resolve_branch_no_registry_raises_error(self, tmp_path): - """Test resolving branch without registry raises error.""" - registry_path = tmp_path / "missing_registry.json" - set_registry_path(registry_path) - - with pytest.raises(RegistryNotFoundError): - resolve_branch("@agent1") - - reset_registry_path() - - -class TestBranchExists: - """Test branch existence checking.""" - - def test_branch_exists_true(self, temp_registry, sample_branches): - """Test branch_exists returns True for registered branch.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", str(branch_path), "agent") - - assert branch_exists("@agent1") - assert branch_exists("agent1") - - def test_branch_exists_false(self, temp_registry): - """Test branch_exists returns False for unregistered branch.""" - assert not branch_exists("@nonexistent") - assert not branch_exists("nonexistent") - - def test_branch_exists_no_registry_returns_false(self, tmp_path): - """Test branch_exists returns False when registry doesn't exist.""" - registry_path = tmp_path / "missing_registry.json" - set_registry_path(registry_path) - - assert not branch_exists("@agent1") - - reset_registry_path() - - -class TestBranchInfo: - """Test branch metadata retrieval.""" - - def test_get_branch_info_basic(self, temp_registry, sample_branches): - """Test getting branch info.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", str(branch_path), "agent") - - info = get_branch_info("@agent1") - - assert info["name"] == "agent1" - assert Path(info["path"]) == branch_path - assert info["type"] == "agent" - assert info["status"] == "active" - assert "created" in info - - def test_get_branch_info_without_at_prefix(self, temp_registry, sample_branches): - """Test getting branch info without @ prefix.""" - branch_path = sample_branches["agent1"] - register_branch("agent1", str(branch_path), "agent") - - info = get_branch_info("agent1") - assert info["name"] == "agent1" - - def test_get_branch_info_not_found_raises_error(self, temp_registry): - """Test getting info for nonexistent branch raises error.""" - with pytest.raises(BranchNotFoundError): - get_branch_info("@nonexistent") - - -class TestListBranches: - """Test branch listing functionality.""" - - def test_list_branches_all(self, temp_registry, sample_branches): - """Test listing all branches.""" - register_branch("agent1", str(sample_branches["agent1"]), "agent") - register_branch("agent2", str(sample_branches["agent2"]), "agent") - register_branch("service1", str(sample_branches["service1"]), "service") - - branches = list_branches() - - assert "@agent1" in branches - assert "@agent2" in branches - assert "@service1" in branches - assert len(branches) == 3 - - def test_list_branches_by_type(self, temp_registry, sample_branches): - """Test listing branches filtered by type.""" - register_branch("agent1", str(sample_branches["agent1"]), "agent") - register_branch("agent2", str(sample_branches["agent2"]), "agent") - register_branch("service1", str(sample_branches["service1"]), "service") - - agents = list_branches(branch_type="agent") - services = list_branches(branch_type="service") - - assert "@agent1" in agents - assert "@agent2" in agents - assert "@service1" not in agents - assert len(agents) == 2 - - assert "@service1" in services - assert "@agent1" not in services - assert len(services) == 1 - - def test_list_branches_empty_registry(self, temp_registry): - """Test listing branches with empty registry.""" - branches = list_branches() - assert branches == [] - - def test_list_branches_no_registry(self, tmp_path): - """Test listing branches when registry doesn't exist.""" - registry_path = tmp_path / "missing_registry.json" - set_registry_path(registry_path) - - branches = list_branches() - assert branches == [] - - reset_registry_path() - - -class TestErrorHandling: - """Test error handling scenarios.""" - - def test_corrupt_registry_raises_error(self, tmp_path): - """Test corrupted registry file raises error.""" - registry_path = tmp_path / "corrupt_registry.json" - registry_path.write_text("invalid json {{{") - - set_registry_path(registry_path) - - with pytest.raises(Exception): # RegistryCorruptError or similar - resolve_branch("@agent1") - - reset_registry_path() - - def test_missing_branches_field_raises_error(self, tmp_path): - """Test registry missing 'branches' field raises error.""" - registry_path = tmp_path / "bad_registry.json" - registry_path.write_text(json.dumps({"version": "1.0"})) - - set_registry_path(registry_path) - - with pytest.raises(Exception): # RegistryCorruptError - resolve_branch("@agent1") - - reset_registry_path() - - -class TestEndToEnd: - """End-to-end integration tests.""" - - def test_full_workflow(self, tmp_path): - """Test complete workflow: initialize → register → resolve → list → exists.""" - # Setup - registry_path = tmp_path / "registry.json" - set_registry_path(registry_path) - initialize_registry() - - # Create branch directories - agent1_path = tmp_path / "agent1" - agent1_path.mkdir() - agent2_path = tmp_path / "agent2" - agent2_path.mkdir() - - # Register branches - register_branch("agent1", str(agent1_path), "agent") - register_branch("agent2", str(agent2_path), "agent") - - # Verify existence - assert branch_exists("@agent1") - assert branch_exists("@agent2") - assert not branch_exists("@agent3") - - # Resolve paths - resolved1 = resolve_branch("@agent1") - resolved2 = resolve_branch("agent2") - assert Path(resolved1) == agent1_path - assert Path(resolved2) == agent2_path - - # Get info - info = get_branch_info("@agent1") - assert info["name"] == "agent1" - assert info["type"] == "agent" - - # List branches - branches = list_branches() - assert len(branches) == 2 - assert "@agent1" in branches - assert "@agent2" in branches - - # Cleanup - reset_registry_path() diff --git a/tests/test_drone_integration.py b/tests/test_drone_integration.py deleted file mode 100644 index ad0989af..00000000 --- a/tests/test_drone_integration.py +++ /dev/null @@ -1,504 +0,0 @@ -""" -Integration tests for the AIPass drone module (Phase 3). - -End-to-end tests that exercise the full workflow using real temp directories -with proper branch file structures. All subprocess calls are mocked so no -real Python processes are spawned. -""" - -import json -import subprocess -from pathlib import Path -from unittest.mock import MagicMock, patch - -import pytest - -from aipass.drone import ( - BranchNotFoundError, - CommandExecutionError, - CommandResult, - HelpResult, - branch_exists, - discover_modules, - get_branch_info, - get_help, - initialize_registry, - list_branches, - register_branch, - reset_registry_path, - resolve_branch, - route_all, - route_command, - set_registry_path, -) -from aipass.drone.discovery import get_system_help - - -# --------------------------------------------------------------------------- -# Helpers -# --------------------------------------------------------------------------- - - -def _make_cp(stdout=b"", stderr=b"", returncode=0): - """Build a mock subprocess.CompletedProcess.""" - cp = MagicMock(spec=subprocess.CompletedProcess) - cp.stdout = stdout - cp.stderr = stderr - cp.returncode = returncode - return cp - - -def _make_branch(root: Path, name: str) -> Path: - """ - Create a minimal branch directory layout under root. - - Layout: - root/{name}/ - apps/ - {name}.py <- entry point - modules/ - status.py - info.py - """ - branch_dir = root / name - apps_dir = branch_dir / "apps" - modules_dir = apps_dir / "modules" - modules_dir.mkdir(parents=True) - (apps_dir / f"{name}.py").write_text(f"# {name} entry point\n") - (modules_dir / "status.py").write_text("") - (modules_dir / "info.py").write_text("") - return branch_dir - - -# --------------------------------------------------------------------------- -# Fixtures -# --------------------------------------------------------------------------- - - -@pytest.fixture -def registry(tmp_path): - """Isolated registry backed by a temp directory.""" - registry_path = tmp_path / "registry.json" - set_registry_path(registry_path) - initialize_registry() - yield tmp_path - reset_registry_path() - - -@pytest.fixture -def multi_branch_registry(tmp_path): - """ - Registry pre-populated with three branches: alpha, beta, gamma. - - Each has a full apps/{name}.py + apps/modules/ structure. - """ - registry_path = tmp_path / "registry.json" - set_registry_path(registry_path) - initialize_registry() - - for name in ("alpha", "beta", "gamma"): - branch_dir = _make_branch(tmp_path, name) - register_branch(name, str(branch_dir), "agent") - - yield tmp_path - reset_registry_path() - - -# --------------------------------------------------------------------------- -# 1. Full workflow: initialize → register → resolve → discover → help -# --------------------------------------------------------------------------- - - -class TestFullWorkflow: - """End-to-end happy-path tests.""" - - def test_initialize_register_resolve(self, tmp_path): - """Complete init → register → resolve cycle.""" - registry_path = tmp_path / "reg.json" - set_registry_path(registry_path) - initialize_registry() - - branch_dir = _make_branch(tmp_path, "mybot") - register_branch("mybot", str(branch_dir), "agent") - - resolved = resolve_branch("@mybot") - assert Path(resolved) == branch_dir - - reset_registry_path() - - def test_register_multiple_branches_and_list(self, registry, tmp_path): - """Register several branches and verify list_branches returns all.""" - names = ["alice", "bob", "charlie"] - for name in names: - bd = _make_branch(tmp_path, name) - register_branch(name, str(bd), "agent") - - found = list_branches() - for name in names: - assert f"@{name}" in found - assert len(found) == 3 - - def test_resolve_then_discover_then_help(self, multi_branch_registry): - """Resolve a branch, discover its modules, then get help.""" - # Resolve - path = resolve_branch("@alpha") - assert Path(path).is_dir() - - # Discover — mock help output with a Commands section - help_bytes = b"Usage: alpha.py\n\nCommands:\n status Check status\n info Show info\n" - with patch("subprocess.run", return_value=_make_cp(stdout=help_bytes)): - modules = discover_modules("@alpha") - assert "status" in modules - assert "info" in modules - - # Help — returns structured HelpResult - with patch("subprocess.run", return_value=_make_cp(stdout=help_bytes)): - result = get_help("@alpha") - assert isinstance(result, HelpResult) - assert result.branch == "alpha" - assert result.command is None - assert "status" in result.commands_found - - def test_route_command_after_register(self, multi_branch_registry): - """route_command reaches a registered branch successfully.""" - cp = _make_cp(stdout=b"alpha is running\n", returncode=0) - with patch("subprocess.run", return_value=cp): - result = route_command("@alpha", "status") - - assert result.exit_code == 0 - assert "alpha is running" in result.stdout - assert result.branch == "alpha" - assert result.command == "status" - - def test_branch_exists_after_register(self, registry, tmp_path): - """branch_exists returns True immediately after registration.""" - bd = _make_branch(tmp_path, "sentinel") - register_branch("sentinel", str(bd), "service") - - assert branch_exists("@sentinel") - assert branch_exists("sentinel") - assert not branch_exists("@ghost") - - def test_get_branch_info_after_register(self, registry, tmp_path): - """get_branch_info returns correct metadata after registration.""" - bd = _make_branch(tmp_path, "worker") - register_branch("worker", str(bd), "service") - - info = get_branch_info("@worker") - assert info["name"] == "worker" - assert info["type"] == "service" - assert info["status"] == "active" - assert Path(info["path"]) == bd - assert "created" in info - - -# --------------------------------------------------------------------------- -# 2. HelpResult structure -# --------------------------------------------------------------------------- - - -class TestHelpResult: - """Verify HelpResult dataclass fields and behaviour.""" - - def test_help_result_fields(self, multi_branch_registry): - """HelpResult exposes branch, command, text, commands_found.""" - help_bytes = b"Usage: beta.py\n\nCommands:\n run Run a task\n stop Stop\n" - with patch("subprocess.run", return_value=_make_cp(stdout=help_bytes)): - result = get_help("@beta") - - assert result.branch == "beta" - assert result.command is None - assert "Usage" in result.text - assert isinstance(result.commands_found, list) - assert "run" in result.commands_found - assert "stop" in result.commands_found - - def test_help_result_command_level(self, multi_branch_registry): - """HelpResult.command is set when a specific command is queried.""" - help_bytes = b"Usage: beta.py run [options]\n --verbose Verbose output\n" - with patch("subprocess.run", return_value=_make_cp(stdout=help_bytes)): - result = get_help("@beta", command="run") - - assert result.command == "run" - assert "Usage" in result.text - - def test_help_result_stderr_fallback(self, multi_branch_registry): - """HelpResult.text comes from stderr when stdout is empty.""" - with patch("subprocess.run", return_value=_make_cp(stdout=b"", stderr=b"from stderr\n")): - result = get_help("@gamma") - - assert "from stderr" in result.text - - def test_help_result_empty_commands_found(self, multi_branch_registry): - """commands_found is empty when help text has no commands section.""" - with patch("subprocess.run", return_value=_make_cp(stdout=b"No commands here.\n")): - result = get_help("@gamma") - - assert result.commands_found == [] - - def test_help_result_importable_from_package(self): - """HelpResult is importable directly from aipass.drone.""" - from aipass.drone import HelpResult as HR - assert HR is HelpResult - - -# --------------------------------------------------------------------------- -# 3. @all routing: route_all -# --------------------------------------------------------------------------- - - -class TestRouteAll: - """Tests for route_all — fan-out command to all active branches.""" - - def test_route_all_reaches_all_branches(self, multi_branch_registry): - """route_all returns a result for every registered branch.""" - cp = _make_cp(stdout=b"ok\n", returncode=0) - with patch("subprocess.run", return_value=cp): - results = route_all("status") - - assert set(results.keys()) == {"alpha", "beta", "gamma"} - - def test_route_all_returns_command_results(self, multi_branch_registry): - """Each value in route_all output is a CommandResult.""" - cp = _make_cp(stdout=b"running\n", returncode=0) - with patch("subprocess.run", return_value=cp): - results = route_all("status") - - for branch_name, result in results.items(): - assert isinstance(result, CommandResult) - assert result.branch == branch_name - assert result.command == "status" - - def test_route_all_with_args(self, multi_branch_registry): - """route_all forwards extra args to every branch.""" - cp = _make_cp(stdout=b"verbose\n", returncode=0) - with patch("subprocess.run", return_value=cp) as mock_run: - route_all("run", args=["--verbose"]) - - # Every call should include --verbose - for call in mock_run.call_args_list: - cmd_list = call[0][0] - assert "--verbose" in cmd_list - - def test_route_all_continues_on_branch_failure(self, multi_branch_registry): - """route_all continues even when one branch raises CommandExecutionError.""" - call_count = 0 - - def side_effect(*a, **kw): - nonlocal call_count - call_count += 1 - if call_count == 1: - raise CommandExecutionError("branch exploded") - return _make_cp(stdout=b"ok\n", returncode=0) - - with patch("subprocess.run", side_effect=side_effect): - results = route_all("status") - - # All three branches present in results - assert len(results) == 3 - - def test_route_all_failed_branch_has_negative_exit_code(self, multi_branch_registry): - """A branch that raises an error gets exit_code=-1 in route_all result.""" - def side_effect(*a, **kw): - raise CommandExecutionError("no entry point") - - with patch("subprocess.run", side_effect=side_effect): - results = route_all("status") - - for result in results.values(): - assert result.exit_code == -1 - assert result.stderr != "" - - def test_route_all_empty_registry(self, registry): - """route_all returns empty dict when no branches are registered.""" - results = route_all("status") - assert results == {} - - def test_route_all_timeout_per_branch(self, multi_branch_registry): - """route_all forwards the timeout to each branch call.""" - cp = _make_cp(stdout=b"ok\n", returncode=0) - with patch("subprocess.run", return_value=cp) as mock_run: - route_all("status", timeout=5) - - for call in mock_run.call_args_list: - _, kwargs = call - assert kwargs.get("timeout") == 5 - - def test_route_all_importable_from_package(self): - """route_all is importable from aipass.drone.""" - from aipass.drone import route_all as ra - assert callable(ra) - - -# --------------------------------------------------------------------------- -# 4. get_system_help — aggregated help across all branches -# --------------------------------------------------------------------------- - - -class TestGetSystemHelp: - """Tests for get_system_help — fan-out help query across all branches.""" - - def test_system_help_returns_dict(self, multi_branch_registry): - """get_system_help returns a dict keyed by branch name.""" - help_bytes = b"Usage: x.py\n\nCommands:\n status Check\n" - with patch("subprocess.run", return_value=_make_cp(stdout=help_bytes)): - results = get_system_help() - - assert isinstance(results, dict) - assert set(results.keys()) == {"alpha", "beta", "gamma"} - - def test_system_help_values_are_help_results(self, multi_branch_registry): - """Each value in get_system_help output is a HelpResult.""" - with patch("subprocess.run", return_value=_make_cp(stdout=b"help\n")): - results = get_system_help() - - for result in results.values(): - assert isinstance(result, HelpResult) - - def test_system_help_skips_failing_branches(self, multi_branch_registry): - """get_system_help omits branches whose help command fails.""" - call_count = 0 - - def side_effect(*a, **kw): - nonlocal call_count - call_count += 1 - if call_count == 1: - raise CommandExecutionError("boom") - return _make_cp(stdout=b"help\n") - - with patch("subprocess.run", side_effect=side_effect): - results = get_system_help() - - # At least two of the three branches should succeed - assert len(results) >= 2 - - def test_system_help_empty_when_no_branches(self, registry): - """get_system_help returns empty dict with no registered branches.""" - results = get_system_help() - assert results == {} - - -# --------------------------------------------------------------------------- -# 5. Error recovery — branches disappear mid-operation -# --------------------------------------------------------------------------- - - -class TestErrorRecovery: - """Tests for graceful handling of unexpected runtime conditions.""" - - def test_resolve_nonexistent_branch_raises(self, registry): - """Resolving an unregistered branch raises BranchNotFoundError.""" - with pytest.raises(BranchNotFoundError): - resolve_branch("@ghost") - - def test_route_command_nonexistent_branch_raises(self, registry): - """Routing to an unregistered branch raises BranchNotFoundError.""" - with pytest.raises(BranchNotFoundError): - route_command("@ghost", "status") - - def test_discover_modules_nonexistent_branch_raises(self, registry): - """discover_modules on unregistered branch raises BranchNotFoundError.""" - with pytest.raises(BranchNotFoundError): - discover_modules("@ghost") - - def test_get_help_nonexistent_branch_raises(self, registry): - """get_help on unregistered branch raises BranchNotFoundError.""" - with pytest.raises(BranchNotFoundError): - get_help("@ghost") - - def test_branch_without_entry_point_raises_on_route(self, tmp_path): - """route_command raises CommandExecutionError when entry point missing.""" - registry_path = tmp_path / "reg.json" - set_registry_path(registry_path) - initialize_registry() - - # Register a branch that has NO apps/{name}.py - no_entry = tmp_path / "bare" - no_entry.mkdir() - register_branch("bare", str(no_entry), "agent") - - with pytest.raises(CommandExecutionError, match="Entry point not found"): - route_command("@bare", "status") - - reset_registry_path() - - def test_branch_without_entry_point_raises_on_help(self, tmp_path): - """get_help raises CommandExecutionError when entry point missing.""" - registry_path = tmp_path / "reg.json" - set_registry_path(registry_path) - initialize_registry() - - no_entry = tmp_path / "bare2" - no_entry.mkdir() - register_branch("bare2", str(no_entry), "agent") - - with pytest.raises(CommandExecutionError, match="Entry point not found"): - get_help("@bare2") - - reset_registry_path() - - -# --------------------------------------------------------------------------- -# 6. Registry persistence across multiple operations -# --------------------------------------------------------------------------- - - -class TestRegistryPersistence: - """Verify the registry file survives multiple read/write cycles.""" - - def test_registry_persists_across_register_calls(self, tmp_path): - """Each register_branch call is durable in the JSON file.""" - registry_path = tmp_path / "persist.json" - set_registry_path(registry_path) - initialize_registry() - - for name in ("p1", "p2", "p3"): - bd = _make_branch(tmp_path, name) - register_branch(name, str(bd), "agent") - - # Read the raw JSON and verify all branches are there - with open(registry_path, encoding="utf-8") as fh: - data = json.load(fh) - - assert "p1" in data["branches"] - assert "p2" in data["branches"] - assert "p3" in data["branches"] - - reset_registry_path() - - def test_registry_metadata_updated_on_write(self, tmp_path): - """Registry metadata.last_updated is refreshed on each write.""" - registry_path = tmp_path / "meta.json" - set_registry_path(registry_path) - initialize_registry() - - bd = _make_branch(tmp_path, "meta_agent") - register_branch("meta_agent", str(bd), "agent") - - with open(registry_path, encoding="utf-8") as fh: - data = json.load(fh) - - assert "last_updated" in data["metadata"] - assert data["metadata"]["managed_by"] == "aipass.drone" - - reset_registry_path() - - def test_list_branches_reflects_all_registrations(self, tmp_path): - """list_branches always reflects the on-disk state.""" - registry_path = tmp_path / "list_test.json" - set_registry_path(registry_path) - initialize_registry() - - bd1 = _make_branch(tmp_path, "lx1") - bd2 = _make_branch(tmp_path, "lx2") - register_branch("lx1", str(bd1), "agent") - - assert len(list_branches()) == 1 - - register_branch("lx2", str(bd2), "agent") - - assert len(list_branches()) == 2 - assert "@lx1" in list_branches() - assert "@lx2" in list_branches() - - reset_registry_path() diff --git a/tests/test_drone_modules.py b/tests/test_drone_modules.py deleted file mode 100644 index 68997ee9..00000000 --- a/tests/test_drone_modules.py +++ /dev/null @@ -1,302 +0,0 @@ -""" -Tests for the drone module routing system (aipass.drone.modules). - -Covers: - - Module registry: list, lookup, register - - Module info retrieval - - Module command routing - - Module help retrieval - - CLI integration: drone systems shows modules, drone @seedgo routes correctly -""" - -from __future__ import annotations - -from unittest.mock import patch - -from aipass.drone.cli import main -from aipass.drone.modules import ( - ModuleInfo, - get_module_help, - get_module_info, - get_module_introspective, - is_module, - list_modules, - register_module, - route_module_command, -) - - -# --------------------------------------------------------------------------- -# Helpers -# --------------------------------------------------------------------------- - - -def _run_cli(*args: str) -> tuple[int, str, str]: - """Call main() with the given argv, capturing stdout/stderr and exit code.""" - stdout_lines: list[str] = [] - stderr_lines: list[str] = [] - - class _Cap: - def __init__(self, buf: list[str]) -> None: - self._buf = buf - - def write(self, s: str) -> int: - self._buf.append(s) - return len(s) - - def flush(self) -> None: - pass - - exit_code = 0 - - def _exit(code: int = 0) -> None: - nonlocal exit_code - exit_code = code - raise SystemExit(code) - - with ( - patch("sys.argv", ["drone", *args]), - patch("sys.stdout", _Cap(stdout_lines)), - patch("sys.stderr", _Cap(stderr_lines)), - patch("sys.exit", side_effect=_exit), - ): - try: - main() - except SystemExit: - pass - - return exit_code, "".join(stdout_lines), "".join(stderr_lines) - - -# --------------------------------------------------------------------------- -# Module registry -# --------------------------------------------------------------------------- - - -class TestModuleRegistry: - """Test the internal module registry.""" - - def test_seedgo_is_registered(self): - """seedgo is in the default module registry.""" - assert is_module("seedgo") - - def test_unknown_module_not_registered(self): - """Unknown names return False.""" - assert not is_module("nonexistent") - - def test_list_modules_includes_seedgo(self): - """list_modules includes seedgo.""" - modules = list_modules() - assert "seedgo" in modules - - def test_list_modules_returns_sorted(self): - """list_modules returns sorted names.""" - modules = list_modules() - assert modules == sorted(modules) - - def test_register_module_adds_new(self): - """register_module adds a new module.""" - register_module("test_mod", "test.path.adapter") - assert is_module("test_mod") - # Clean up - from aipass.drone.modules import _MODULE_REGISTRY - del _MODULE_REGISTRY["test_mod"] - - -class TestModuleInfo: - """Test module info retrieval.""" - - def test_seedgo_info_returns_module_info(self): - """get_module_info for seedgo returns valid ModuleInfo.""" - info = get_module_info("seedgo") - assert info is not None - assert isinstance(info, ModuleInfo) - assert info.name == "seedgo" - assert info.version == "1.0.0" - assert info.description != "" - - def test_unknown_module_returns_none(self): - """get_module_info for unknown module returns None.""" - assert get_module_info("nonexistent") is None - - def test_unimportable_module_returns_none(self): - """get_module_info returns None if adapter can't be imported.""" - register_module("broken", "nonexistent.module.path") - info = get_module_info("broken") - assert info is None - # Clean up - from aipass.drone.modules import _MODULE_REGISTRY - del _MODULE_REGISTRY["broken"] - - -# --------------------------------------------------------------------------- -# Module command routing -# --------------------------------------------------------------------------- - - -class TestModuleRouting: - """Test routing commands to modules.""" - - def test_route_seedgo_list(self): - """route_module_command to seedgo 'list' returns output.""" - result = route_module_command("seedgo", "list") - assert isinstance(result, dict) - assert "stdout" in result - assert "exit_code" in result - # seedgo list should succeed and show plugins - assert result["exit_code"] == 0 - assert "plugin" in result["stdout"].lower() or "PLUGIN" in result["stdout"] - - def test_route_unknown_command(self): - """Unknown seedgo command returns error.""" - result = route_module_command("seedgo", "nonexistent") - assert result["exit_code"] == 1 - assert "unknown command" in result["stderr"] - - def test_route_unknown_module_raises(self): - """Routing to unregistered module raises KeyError.""" - import pytest - with pytest.raises(KeyError): - route_module_command("nonexistent", "list") - - -# --------------------------------------------------------------------------- -# Module help -# --------------------------------------------------------------------------- - - -class TestModuleHelp: - """Test module help retrieval.""" - - def test_seedgo_help_returns_text(self): - """get_module_help for seedgo returns non-empty help text.""" - help_text = get_module_help("seedgo") - assert help_text != "" - assert "seedgo" in help_text - assert "check" in help_text or "audit" in help_text - - def test_unknown_module_help_returns_empty(self): - """get_module_help for unknown module returns empty string.""" - assert get_module_help("nonexistent") == "" - - -class TestModuleIntrospective: - """Test module introspective (discovery) retrieval.""" - - def test_seedgo_introspective_shows_plugins(self): - """get_module_introspective for seedgo lists discovered plugins.""" - text = get_module_introspective("seedgo") - assert text != "" - assert "SEEDGO" in text - assert "Discovered Plugins" in text - # Should show at least some known plugins - assert "drone-compliance" in text or "no-bare-except" in text - - def test_introspective_shows_version(self): - """Introspective includes the module version.""" - text = get_module_introspective("seedgo") - assert "1.0.0" in text - - def test_introspective_points_to_help(self): - """Introspective tells you how to get help.""" - text = get_module_introspective("seedgo") - assert "--help" in text - - def test_unknown_module_introspective_returns_empty(self): - """get_module_introspective for unknown module returns empty string.""" - assert get_module_introspective("nonexistent") == "" - - def test_introspective_differs_from_help(self): - """Introspective and help return different content.""" - intro = get_module_introspective("seedgo") - help_text = get_module_help("seedgo") - # Both non-empty but different - assert intro != "" - assert help_text != "" - assert intro != help_text - - -# --------------------------------------------------------------------------- -# CLI integration — drone systems shows modules -# --------------------------------------------------------------------------- - - -class TestCLISystemsModules: - """drone systems includes modules.""" - - def test_systems_shows_modules(self): - """drone systems output includes modules section.""" - with patch("aipass.drone.cli.list_branches", return_value=[]): - code, out, _ = _run_cli("systems") - assert code == 0 - assert "Modules" in out - assert "@seedgo" in out - - def test_systems_shows_module_description(self): - """drone systems shows module descriptions.""" - with patch("aipass.drone.cli.list_branches", return_value=[]): - code, out, _ = _run_cli("systems") - assert "standards" in out.lower() or "Standards" in out - - def test_systems_shows_both_modules_and_branches(self): - """drone systems shows both modules and branches.""" - with patch("aipass.drone.cli.list_branches", return_value=["@flow", "@prax"]): - code, out, _ = _run_cli("systems") - assert code == 0 - assert "Modules" in out - assert "Branches" in out - assert "@seedgo" in out - assert "@flow" in out - - -# --------------------------------------------------------------------------- -# CLI integration — drone @seedgo routes to module -# --------------------------------------------------------------------------- - - -class TestCLIModuleRouting: - """drone @seedgo commands route through module system.""" - - def test_seedgo_help(self): - """drone @seedgo --help shows seedgo help text.""" - code, out, _ = _run_cli("@seedgo", "--help") - assert code == 0 - assert "seedgo" in out - assert "check" in out - - def test_seedgo_no_args_shows_introspective(self): - """drone @seedgo with no command shows introspective (discovery).""" - code, out, _ = _run_cli("@seedgo") - assert code == 0 - assert "SEEDGO" in out - assert "Discovered Plugins" in out - # Should NOT be the help text (which has "Commands:" section) - assert "Examples:" not in out - - def test_seedgo_list(self): - """drone @seedgo list shows plugins.""" - code, out, _ = _run_cli("@seedgo", "list") - assert code == 0 - assert "plugin" in out.lower() or "PLUGIN" in out - - def test_seedgo_unknown_command(self): - """drone @seedgo nonexistent exits with error.""" - code, _, err = _run_cli("@seedgo", "nonexistent") - assert code == 1 - assert "unknown command" in err - - def test_seedgo_check_specific_file(self): - """drone @seedgo check on a file runs checks.""" - code, out, _ = _run_cli("@seedgo", "check", "src/seedgo/__init__.py") - assert code == 0 or code == 1 # May pass or fail, but should run - # Should produce output from seedgo - assert out != "" or _ != "" - - def test_module_takes_priority_over_branch(self): - """Module routing takes priority over branch registry.""" - # Even if a branch named 'seedgo' existed, the module should handle it - # We verify by NOT mocking route_command — if branch routing were tried, - # it would fail because no registry exists - code, out, _ = _run_cli("@seedgo", "--help") - assert code == 0 - assert "seedgo" in out diff --git a/tests/test_drone_phase2.py b/tests/test_drone_phase2.py deleted file mode 100644 index ddb30f02..00000000 --- a/tests/test_drone_phase2.py +++ /dev/null @@ -1,546 +0,0 @@ -""" -Unit tests for Phase 2 drone functionality. - -Tests command routing, subprocess execution, and module discovery with >80% -coverage on new code. All subprocess calls are mocked — no real processes run. -""" - -import subprocess -from unittest.mock import MagicMock, patch - -import pytest - -from aipass.drone import ( - BranchNotFoundError, - CommandExecutionError, - CommandResult, - discover_modules, - get_help, - initialize_registry, - register_branch, - reset_registry_path, - route_command, - set_registry_path, -) -from aipass.drone.executor import execute_command -from aipass.drone.router import _find_entry_point - - -# --------------------------------------------------------------------------- -# Fixtures -# --------------------------------------------------------------------------- - - -@pytest.fixture -def temp_registry(tmp_path): - """Temporary registry backed by a tmp directory.""" - registry_path = tmp_path / "test_registry.json" - set_registry_path(registry_path) - initialize_registry() - yield tmp_path - reset_registry_path() - - -@pytest.fixture -def branch_with_entry(tmp_path): - """ - A registered branch that has a valid apps/{name}.py entry point. - - Layout: - tmp_path/ - myagent/ - apps/ - myagent.py - modules/ - status.py - info.py - """ - branch_dir = tmp_path / "myagent" - apps_dir = branch_dir / "apps" - modules_dir = apps_dir / "modules" - modules_dir.mkdir(parents=True) - - entry = apps_dir / "myagent.py" - entry.write_text("# stub entry point\n") - - (modules_dir / "status.py").write_text("") - (modules_dir / "info.py").write_text("") - (modules_dir / "__init__.py").write_text("") - - registry_path = tmp_path / "registry.json" - set_registry_path(registry_path) - initialize_registry() - register_branch("myagent", str(branch_dir), "agent") - - yield branch_dir - - reset_registry_path() - - -@pytest.fixture -def branch_without_entry(tmp_path): - """A registered branch that has NO apps/{name}.py entry point.""" - branch_dir = tmp_path / "noentry" - apps_dir = branch_dir / "apps" - modules_dir = apps_dir / "modules" - modules_dir.mkdir(parents=True) - (modules_dir / "do_thing.py").write_text("") - - registry_path = tmp_path / "registry.json" - set_registry_path(registry_path) - initialize_registry() - register_branch("noentry", str(branch_dir), "agent") - - yield branch_dir - - reset_registry_path() - - -def _make_completed_process(stdout=b"", stderr=b"", returncode=0): - """Helper to build a subprocess.CompletedProcess mock.""" - cp = MagicMock(spec=subprocess.CompletedProcess) - cp.stdout = stdout - cp.stderr = stderr - cp.returncode = returncode - return cp - - -# --------------------------------------------------------------------------- -# CommandResult structure -# --------------------------------------------------------------------------- - - -class TestCommandResult: - """Verify CommandResult is a proper dataclass with expected fields.""" - - def test_fields_present(self): - """CommandResult exposes stdout, stderr, exit_code, branch, command.""" - result = CommandResult( - stdout="hello", - stderr="", - exit_code=0, - branch="myagent", - command="status", - ) - assert result.stdout == "hello" - assert result.stderr == "" - assert result.exit_code == 0 - assert result.branch == "myagent" - assert result.command == "status" - - def test_non_zero_exit_code(self): - """CommandResult stores non-zero exit codes without raising.""" - result = CommandResult( - stdout="", stderr="error", exit_code=1, branch="b", command="c" - ) - assert result.exit_code == 1 - - def test_dataclass_equality(self): - """Two CommandResult instances with identical values compare equal.""" - a = CommandResult("out", "err", 0, "b", "c") - b = CommandResult("out", "err", 0, "b", "c") - assert a == b - - -# --------------------------------------------------------------------------- -# executor.execute_command -# --------------------------------------------------------------------------- - - -class TestExecuteCommand: - """Tests for the low-level subprocess wrapper.""" - - def test_successful_execution(self, tmp_path): - """execute_command returns CommandResult on success.""" - cp = _make_completed_process(stdout=b"ok\n", returncode=0) - with patch("subprocess.run", return_value=cp) as mock_run: - result = execute_command("python3", ["script.py"], cwd=str(tmp_path)) - - assert result.stdout == "ok\n" - assert result.exit_code == 0 - mock_run.assert_called_once() - - def test_no_shell_true(self, tmp_path): - """execute_command never passes shell=True to subprocess.run.""" - cp = _make_completed_process() - with patch("subprocess.run", return_value=cp) as mock_run: - execute_command("python3", ["x.py"], cwd=str(tmp_path)) - - _, kwargs = mock_run.call_args - assert kwargs.get("shell") is False - - def test_timeout_raises_command_execution_error(self, tmp_path): - """TimeoutExpired is wrapped in CommandExecutionError.""" - with patch( - "subprocess.run", - side_effect=subprocess.TimeoutExpired(cmd="python3", timeout=5), - ): - with pytest.raises(CommandExecutionError, match="timed out"): - execute_command("python3", ["x.py"], cwd=str(tmp_path), timeout=5) - - def test_file_not_found_raises_command_execution_error(self, tmp_path): - """FileNotFoundError is wrapped in CommandExecutionError.""" - with patch("subprocess.run", side_effect=FileNotFoundError): - with pytest.raises(CommandExecutionError, match="not found"): - execute_command("nonexistent_bin", [], cwd=str(tmp_path)) - - def test_os_error_raises_command_execution_error(self, tmp_path): - """Generic OSError is wrapped in CommandExecutionError.""" - with patch("subprocess.run", side_effect=OSError("permission denied")): - with pytest.raises(CommandExecutionError, match="OS error"): - execute_command("python3", [], cwd=str(tmp_path)) - - def test_stderr_captured(self, tmp_path): - """execute_command captures stderr separately from stdout.""" - cp = _make_completed_process(stdout=b"", stderr=b"warn\n", returncode=1) - with patch("subprocess.run", return_value=cp): - result = execute_command("python3", ["x.py"], cwd=str(tmp_path)) - - assert result.stderr == "warn\n" - assert result.exit_code == 1 - - def test_branch_and_command_empty_strings(self, tmp_path): - """execute_command sets branch and command to empty strings.""" - cp = _make_completed_process() - with patch("subprocess.run", return_value=cp): - result = execute_command("python3", [], cwd=str(tmp_path)) - - assert result.branch == "" - assert result.command == "" - - def test_timeout_forwarded(self, tmp_path): - """Custom timeout value is passed through to subprocess.run.""" - cp = _make_completed_process() - with patch("subprocess.run", return_value=cp) as mock_run: - execute_command("python3", [], cwd=str(tmp_path), timeout=99) - - _, kwargs = mock_run.call_args - assert kwargs["timeout"] == 99 - - -# --------------------------------------------------------------------------- -# router.route_command -# --------------------------------------------------------------------------- - - -class TestRouteCommand: - """Tests for the high-level command routing function.""" - - def test_route_command_success(self, branch_with_entry): - """route_command returns populated CommandResult on success.""" - cp = _make_completed_process(stdout=b"running\n", returncode=0) - with patch("subprocess.run", return_value=cp): - result = route_command("@myagent", "status") - - assert result.stdout == "running\n" - assert result.exit_code == 0 - assert result.branch == "myagent" - assert result.command == "status" - - def test_route_command_without_at_prefix(self, branch_with_entry): - """route_command accepts branch names without the @ prefix.""" - cp = _make_completed_process(stdout=b"ok\n", returncode=0) - with patch("subprocess.run", return_value=cp): - result = route_command("myagent", "status") - - assert result.branch == "myagent" - - def test_route_command_with_args(self, branch_with_entry): - """route_command forwards extra args to subprocess.""" - cp = _make_completed_process(stdout=b"done\n", returncode=0) - with patch("subprocess.run", return_value=cp) as mock_run: - route_command("@myagent", "run", args=["--verbose", "--dry-run"]) - - call_args = mock_run.call_args[0][0] # positional list - assert "--verbose" in call_args - assert "--dry-run" in call_args - - def test_route_command_missing_branch_raises_error(self, temp_registry): - """route_command raises BranchNotFoundError for unknown branch.""" - with pytest.raises(BranchNotFoundError): - route_command("@ghost", "status") - - def test_route_command_missing_entry_point_raises_error(self, branch_without_entry): - """route_command raises CommandExecutionError when entry point absent.""" - with pytest.raises(CommandExecutionError, match="Entry point not found"): - route_command("@noentry", "status") - - def test_route_command_timeout(self, branch_with_entry): - """route_command propagates timeout as CommandExecutionError.""" - with patch( - "subprocess.run", - side_effect=subprocess.TimeoutExpired(cmd="python3", timeout=1), - ): - with pytest.raises(CommandExecutionError, match="timed out"): - route_command("@myagent", "status", timeout=1) - - def test_route_command_nonzero_exit_does_not_raise(self, branch_with_entry): - """Non-zero exit code is returned, not raised.""" - cp = _make_completed_process(stderr=b"fail\n", returncode=2) - with patch("subprocess.run", return_value=cp): - result = route_command("@myagent", "status") - - assert result.exit_code == 2 - assert result.stderr == "fail\n" - - def test_route_command_default_timeout_is_30(self, branch_with_entry): - """Default timeout forwarded to subprocess is 30 seconds.""" - cp = _make_completed_process() - with patch("subprocess.run", return_value=cp) as mock_run: - route_command("@myagent", "status") - - _, kwargs = mock_run.call_args - assert kwargs["timeout"] == 30 - - -# --------------------------------------------------------------------------- -# router._find_entry_point -# --------------------------------------------------------------------------- - - -class TestFindEntryPoint: - """Tests for the internal entry-point locator.""" - - def test_finds_existing_entry_point(self, branch_with_entry): - """_find_entry_point returns path when entry point exists.""" - ep = _find_entry_point(str(branch_with_entry), "myagent") - assert ep.exists() - assert ep.name == "myagent.py" - - def test_raises_when_entry_point_missing(self, branch_without_entry): - """_find_entry_point raises CommandExecutionError when file absent.""" - with pytest.raises(CommandExecutionError, match="Entry point not found"): - _find_entry_point(str(branch_without_entry), "noentry") - - -# --------------------------------------------------------------------------- -# discovery.discover_modules -# --------------------------------------------------------------------------- - - -class TestDiscoverModules: - """Tests for branch capability discovery.""" - - def test_discover_from_help_output(self, branch_with_entry): - """discover_modules parses commands from --help output.""" - help_output = ( - b"Usage: myagent.py [command]\n\n" - b"Commands:\n" - b" status Show current status\n" - b" deploy Deploy the agent\n" - ) - cp = _make_completed_process(stdout=help_output, returncode=0) - with patch("subprocess.run", return_value=cp): - modules = discover_modules("@myagent") - - assert "status" in modules - assert "deploy" in modules - - def test_discover_falls_back_to_modules_dir(self, branch_with_entry): - """discover_modules falls back to scanning modules/ when help unparseable.""" - cp = _make_completed_process(stdout=b"No commands here.\n", returncode=0) - with patch("subprocess.run", return_value=cp): - modules = discover_modules("@myagent") - - # Falls back to scanning apps/modules/ which contains status.py, info.py - assert "status" in modules - assert "info" in modules - # __init__ is excluded - assert "__init__" not in modules - - def test_discover_falls_back_when_subprocess_fails(self, branch_with_entry): - """discover_modules falls back to modules/ on subprocess OSError.""" - with patch("subprocess.run", side_effect=OSError("boom")): - modules = discover_modules("@myagent") - - assert "status" in modules - assert "info" in modules - - def test_discover_falls_back_on_timeout(self, branch_with_entry): - """discover_modules falls back to modules/ on help timeout.""" - with patch( - "subprocess.run", - side_effect=subprocess.TimeoutExpired(cmd="python3", timeout=10), - ): - modules = discover_modules("@myagent") - - assert isinstance(modules, list) - - def test_discover_missing_branch_raises_error(self, temp_registry): - """discover_modules raises BranchNotFoundError for unknown branch.""" - with pytest.raises(BranchNotFoundError): - discover_modules("@phantom") - - def test_discover_no_entry_no_modules(self, branch_without_entry): - """discover_modules returns empty list when no entry and no modules match help.""" - cp = _make_completed_process(stdout=b"nothing useful\n", returncode=0) - # branch_without_entry has no entry point, so subprocess is never called for - # --help (discovery skips it), but it does have a modules/ dir. - with patch("subprocess.run", return_value=cp): - modules = discover_modules("@noentry") - - # Should find do_thing.py from the modules dir. - assert "do_thing" in modules - - def test_discover_returns_list(self, branch_with_entry): - """discover_modules always returns a list.""" - cp = _make_completed_process(stdout=b"", returncode=0) - with patch("subprocess.run", return_value=cp): - result = discover_modules("@myagent") - - assert isinstance(result, list) - - -# --------------------------------------------------------------------------- -# discovery.get_help -# --------------------------------------------------------------------------- - - -class TestGetHelp: - """Tests for branch help text retrieval (get_help returns HelpResult).""" - - def test_get_help_branch_level(self, branch_with_entry): - """get_help returns HelpResult with text when command is None.""" - help_text = b"Usage: myagent.py [command]\n\nCommands:\n status\n" - cp = _make_completed_process(stdout=help_text, returncode=0) - with patch("subprocess.run", return_value=cp): - result = get_help("@myagent") - - assert "Usage" in result.text - assert result.branch == "myagent" - assert result.command is None - - def test_get_help_command_level(self, branch_with_entry): - """get_help passes the command name when command is specified.""" - help_text = b"Usage: myagent.py status [options]\n" - cp = _make_completed_process(stdout=help_text, returncode=0) - with patch("subprocess.run", return_value=cp) as mock_run: - result = get_help("@myagent", command="status") - - call_args = mock_run.call_args[0][0] - assert "status" in call_args - assert "--help" in call_args - assert "Usage" in result.text - assert result.command == "status" - - def test_get_help_falls_back_to_stderr(self, branch_with_entry): - """get_help uses stderr text when stdout is empty.""" - cp = _make_completed_process(stdout=b"", stderr=b"help via stderr\n", returncode=0) - with patch("subprocess.run", return_value=cp): - result = get_help("@myagent") - - assert "help via stderr" in result.text - - def test_get_help_missing_branch_raises_error(self, temp_registry): - """get_help raises BranchNotFoundError for unknown branch.""" - with pytest.raises(BranchNotFoundError): - get_help("@phantom") - - def test_get_help_missing_entry_point_raises_error(self, branch_without_entry): - """get_help raises CommandExecutionError when entry point absent.""" - with pytest.raises(CommandExecutionError, match="Entry point not found"): - get_help("@noentry") - - def test_get_help_timeout_raises_error(self, branch_with_entry): - """get_help raises CommandExecutionError on timeout.""" - with patch( - "subprocess.run", - side_effect=subprocess.TimeoutExpired(cmd="python3", timeout=10), - ): - with pytest.raises(CommandExecutionError, match="timed out"): - get_help("@myagent") - - def test_get_help_os_error_raises_error(self, branch_with_entry): - """get_help raises CommandExecutionError on OS error.""" - with patch("subprocess.run", side_effect=OSError("no such file")): - with pytest.raises(CommandExecutionError, match="OS error"): - get_help("@myagent") - - def test_get_help_without_at_prefix(self, branch_with_entry): - """get_help accepts branch name without @ prefix.""" - cp = _make_completed_process(stdout=b"help text\n", returncode=0) - with patch("subprocess.run", return_value=cp): - result = get_help("myagent") - - assert "help text" in result.text - - def test_get_help_commands_found_populated(self, branch_with_entry): - """get_help populates commands_found from parsed help text.""" - help_text = b"Usage: myagent.py\n\nCommands:\n status Show status\n deploy Deploy\n" - cp = _make_completed_process(stdout=help_text, returncode=0) - with patch("subprocess.run", return_value=cp): - result = get_help("@myagent") - - assert "status" in result.commands_found - assert "deploy" in result.commands_found - - -# --------------------------------------------------------------------------- -# Executor safety: no shell injection -# --------------------------------------------------------------------------- - - -class TestExecutorSafety: - """Verify the executor never enables shell features.""" - - def test_shell_is_false(self, tmp_path): - """subprocess.run is always called with shell=False.""" - cp = _make_completed_process() - with patch("subprocess.run", return_value=cp) as mock_run: - execute_command("python3", ["script.py", "arg with spaces"], cwd=str(tmp_path)) - - _, kwargs = mock_run.call_args - assert kwargs.get("shell") is False - - def test_args_passed_as_list(self, tmp_path): - """Command is passed as a list, never as a shell string.""" - cp = _make_completed_process() - with patch("subprocess.run", return_value=cp) as mock_run: - execute_command("python3", ["a", "b", "c"], cwd=str(tmp_path)) - - positional_cmd = mock_run.call_args[0][0] - assert isinstance(positional_cmd, list) - - def test_shell_metacharacters_not_interpreted(self, tmp_path): - """Shell metacharacters in args are passed verbatim, not interpreted.""" - cp = _make_completed_process() - with patch("subprocess.run", return_value=cp) as mock_run: - execute_command( - "python3", - ["script.py", "; rm -rf /", "$(evil)"], - cwd=str(tmp_path), - ) - - positional_cmd = mock_run.call_args[0][0] - # Metacharacter strings survive intact as list elements. - assert "; rm -rf /" in positional_cmd - assert "$(evil)" in positional_cmd - - -# --------------------------------------------------------------------------- -# Public API import smoke test -# --------------------------------------------------------------------------- - - -class TestPublicAPIImports: - """Verify all Phase 2 symbols are importable from the top-level package.""" - - def test_route_command_importable(self): - from aipass.drone import route_command - assert callable(route_command) - - def test_discover_modules_importable(self): - from aipass.drone import discover_modules - assert callable(discover_modules) - - def test_get_help_importable(self): - from aipass.drone import get_help - assert callable(get_help) - - def test_command_result_importable(self): - from aipass.drone import CommandResult - assert CommandResult is not None - - def test_version_updated(self): - from aipass.drone import __version__ - assert __version__ == "1.0.0" diff --git a/tests/test_file_module_size.py b/tests/test_file_module_size.py deleted file mode 100644 index 101932f8..00000000 --- a/tests/test_file_module_size.py +++ /dev/null @@ -1,294 +0,0 @@ -""" -Tests for the file-module-size seedgo plugin. - -Covers: - - Files under 400 lines pass - - Files over 400 lines fail with WARNING severity - - Blank lines, comments, and docstrings are excluded from count - - Configurable max_lines threshold - - Fix hints suggest logical split points - - Handles syntax errors and empty files gracefully -""" - -from __future__ import annotations - -import textwrap -from pathlib import Path - -from seedgo.plugins.file_module_size import PLUGIN_NAME, check - - -class TestFileModuleSizePass: - """Files under the size limit should pass.""" - - def test_small_file_passes(self, tmp_path: Path): - """File with 10 code lines passes.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - def add(a, b): - return a + b - - def subtract(a, b): - return a - b - """) - ) - - result = check(str(test_file)) - assert result.plugin == PLUGIN_NAME - assert result.passed is True - - def test_exactly_400_lines_passes(self, tmp_path: Path): - """File with exactly 400 code lines passes.""" - test_file = tmp_path / "test.py" - # Generate exactly 400 lines of code - lines = ["def func():", " pass", ""] - code = "\n".join(lines * 200) # 200 functions * 2 code lines = 400 - test_file.write_text(code) - - result = check(str(test_file)) - assert result.passed is True - assert result.metadata["code_lines"] == 400 - - def test_blank_lines_not_counted(self, tmp_path: Path): - """Blank lines are excluded from code line count.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - def add(a, b): - return a + b - - - def subtract(a, b): - return a - b - - - """) - ) - - result = check(str(test_file)) - # Should count 4 code lines (2 per function), not 8 - assert result.metadata["code_lines"] == 4 - - def test_comments_not_counted(self, tmp_path: Path): - """Comment lines are excluded from code line count.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - # This is a comment - # Another comment - def add(a, b): - # Inline comment - return a + b - # More comments - # Even more - """) - ) - - result = check(str(test_file)) - # Should count 2 code lines (def and return), not 7 - assert result.metadata["code_lines"] == 2 - - def test_docstrings_not_counted(self, tmp_path: Path): - """Docstrings are excluded from code line count.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent('''\ - """ - Module docstring. - This spans multiple lines. - """ - - def add(a, b): - """ - Function docstring. - Also multiple lines. - """ - return a + b - - class Calculator: - """Class docstring.""" - - def multiply(self, a, b): - """Method docstring.""" - return a * b - ''') - ) - - result = check(str(test_file)) - # Should count only actual code lines, not docstrings - # Code lines: def add, return, class Calculator, def multiply, return = 5 - assert result.metadata["code_lines"] == 5 - - def test_empty_file_passes(self, tmp_path: Path): - """Empty file passes.""" - test_file = tmp_path / "test.py" - test_file.write_text("") - - result = check(str(test_file)) - assert result.passed is True - - -class TestFileModuleSizeFail: - """Files over the size limit should fail.""" - - def test_file_over_400_lines_fails(self, tmp_path: Path): - """File with 401 code lines fails.""" - test_file = tmp_path / "test.py" - # Generate 401 lines of code - lines = [] - for i in range(401): - lines.append(f"x{i} = {i}") - test_file.write_text("\n".join(lines)) - - result = check(str(test_file)) - assert result.passed is False - assert result.metadata["code_lines"] == 401 - - violation = result.checks[0] - assert violation.name == "file-size" - assert violation.severity.value == "warning" # WARNING, not ERROR - assert "401" in violation.message - assert "400" in violation.message - - def test_large_file_with_comments_and_blanks(self, tmp_path: Path): - """File with 500 total lines but 401 code lines fails.""" - test_file = tmp_path / "test.py" - lines = [] - for i in range(401): - lines.append(f"x{i} = {i}") - if i % 10 == 0: - lines.append("") # Add blank lines - lines.append(f"# Comment {i}") # Add comments - test_file.write_text("\n".join(lines)) - - result = check(str(test_file)) - assert result.passed is False - # Should count 401 code lines, not the total with blanks and comments - assert result.metadata["code_lines"] == 401 - - def test_overage_reported(self, tmp_path: Path): - """Violation message includes overage amount.""" - test_file = tmp_path / "test.py" - # Generate 450 lines of code (50 over limit) - lines = [f"x{i} = {i}" for i in range(450)] - test_file.write_text("\n".join(lines)) - - result = check(str(test_file)) - violation = result.checks[0] - assert "50 lines" in violation.message or "50" in violation.message - - -class TestFileModuleSizeCustomLimit: - """Custom max_lines config should be respected.""" - - def test_custom_limit_200(self, tmp_path: Path): - """File with 150 lines passes with custom limit of 200.""" - test_file = tmp_path / "test.py" - lines = [f"x{i} = {i}" for i in range(150)] - test_file.write_text("\n".join(lines)) - - result = check(str(test_file), config={"max_lines": 200}) - assert result.passed is True - assert result.metadata["code_lines"] == 150 - assert result.metadata["max_lines"] == 200 - - def test_custom_limit_exceeded(self, tmp_path: Path): - """File with 250 lines fails with custom limit of 200.""" - test_file = tmp_path / "test.py" - lines = [f"x{i} = {i}" for i in range(250)] - test_file.write_text("\n".join(lines)) - - result = check(str(test_file), config={"max_lines": 200}) - assert result.passed is False - assert result.metadata["code_lines"] == 250 - assert result.metadata["max_lines"] == 200 - - -class TestFileModuleSizeFixHints: - """Fix hints should provide actionable suggestions.""" - - def test_fix_hint_for_multiple_classes(self, tmp_path: Path): - """Large file with multiple classes suggests splitting classes.""" - test_file = tmp_path / "test.py" - code = [] - for i in range(5): - code.append(f"class Class{i}:") - for j in range(85): # 85 lines per class = 425 total - code.append(f" def method{j}(self): return {j}") - test_file.write_text("\n".join(code)) - - result = check(str(test_file)) - assert result.passed is False - violation = result.checks[0] - assert "split" in violation.fix_hint.lower() or "class" in violation.fix_hint.lower() - - def test_fix_hint_for_many_functions(self, tmp_path: Path): - """Large file with many functions suggests grouping.""" - test_file = tmp_path / "test.py" - code = [] - for i in range(401): - code.append(f"def func{i}(): return {i}") - test_file.write_text("\n".join(code)) - - result = check(str(test_file)) - assert result.passed is False - violation = result.checks[0] - # Should suggest grouping functions - assert "function" in violation.fix_hint.lower() or "group" in violation.fix_hint.lower() - - def test_fix_hint_generic(self, tmp_path: Path): - """Fix hint provides generic suggestion when no specific pattern found.""" - test_file = tmp_path / "test.py" - # Just a lot of assignments (no classes or functions) - code = [f"x{i} = {i}" for i in range(401)] - test_file.write_text("\n".join(code)) - - result = check(str(test_file)) - violation = result.checks[0] - # Should have some helpful suggestion - assert len(violation.fix_hint) > 0 - assert "module" in violation.fix_hint.lower() or "break" in violation.fix_hint.lower() - - -class TestFileModuleSizeEdgeCases: - """Edge cases and error handling.""" - - def test_file_with_syntax_error(self, tmp_path: Path): - """File with syntax error falls back to simple line counting.""" - test_file = tmp_path / "test.py" - # Syntax error but with many lines - lines = ["def broken(:"] * 401 - test_file.write_text("\n".join(lines)) - - result = check(str(test_file)) - # Should still count lines even with syntax error - assert result.passed is False - - def test_file_read_error(self, tmp_path: Path): - """Non-existent file is skipped gracefully.""" - result = check(str(tmp_path / "nonexistent.py")) - assert result.passed is True - assert result.metadata.get("skipped") is True - assert result.metadata.get("reason") == "file_read_error" - - def test_metadata_includes_counts(self, tmp_path: Path): - """Metadata includes total_lines, code_lines, and max_lines.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - # Comment - - def add(a, b): - return a + b - - """) - ) - - result = check(str(test_file)) - assert "total_lines" in result.metadata - assert "code_lines" in result.metadata - assert "max_lines" in result.metadata - assert result.metadata["total_lines"] == 5 - assert result.metadata["code_lines"] == 2 - assert result.metadata["max_lines"] == 400 diff --git a/tests/test_paths.py b/tests/test_paths.py deleted file mode 100644 index 93173f25..00000000 --- a/tests/test_paths.py +++ /dev/null @@ -1,382 +0,0 @@ -""" -Tests for aipass.paths — root resolution and derived path functions. - -Covers: - - get_root() env var resolution - - get_root() marker walk resolution - - get_root() default fallback - - Priority order (env var beats marker walk, marker walk beats default) - - Invalid env var raises PathResolutionError - - All derived path functions - - branch_path() with a mock registry - - branch_path() returns None for missing branch / missing file -""" - -from __future__ import annotations - -import json -from pathlib import Path - -import pytest - -from aipass.paths import ( - PathResolutionError, - branch_logs_dir, - branch_path, - branch_registry_path, - get_root, - system_logs_dir, -) -from aipass.paths.resolver import _resolve_from_marker - - -# --------------------------------------------------------------------------- -# Helpers -# --------------------------------------------------------------------------- - - -def _write_registry(path: Path, branches: dict) -> None: - """Write a minimal BRANCH_REGISTRY.json to *path*.""" - path.write_text( - json.dumps({"version": "1.0", "branches": branches}), - encoding="utf-8", - ) - - -# --------------------------------------------------------------------------- -# get_root() — environment variable resolution -# --------------------------------------------------------------------------- - - -class TestEnvVarResolution: - """Tier 1: AIPASS_ROOT environment variable.""" - - def test_env_var_valid_directory_is_returned(self, tmp_path, monkeypatch): - """When AIPASS_ROOT points to an existing directory it is returned.""" - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - assert get_root() == tmp_path - - def test_env_var_takes_priority_over_marker(self, tmp_path, monkeypatch): - """Env var wins even when a .aipass/ marker exists in CWD.""" - env_root = tmp_path / "env_root" - env_root.mkdir() - - marker_root = tmp_path / "marker_root" - marker_root.mkdir() - (marker_root / ".aipass").mkdir() - - monkeypatch.setenv("AIPASS_ROOT", str(env_root)) - monkeypatch.chdir(marker_root) - - assert get_root() == env_root - - def test_env_var_nonexistent_raises_path_resolution_error(self, monkeypatch): - """AIPASS_ROOT pointing to a non-existent path raises PathResolutionError.""" - monkeypatch.setenv("AIPASS_ROOT", "/does/not/exist/at/all") - with pytest.raises(PathResolutionError): - get_root() - - def test_env_var_empty_string_falls_through(self, tmp_path, monkeypatch): - """An empty AIPASS_ROOT string is treated as unset (falls through to next tier).""" - # Make a marker so tier 2 picks it up (avoids writing to real home) - marker_root = tmp_path / "marker" - marker_root.mkdir() - (marker_root / ".aipass").mkdir() - - monkeypatch.setenv("AIPASS_ROOT", "") - monkeypatch.chdir(marker_root) - - # Empty string → env var absent → should find marker - result = get_root() - assert result == marker_root - - def test_env_var_unset_falls_through(self, tmp_path, monkeypatch): - """When AIPASS_ROOT is not set at all, env tier returns None and we fall through.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - marker_root = tmp_path / "marker" - marker_root.mkdir() - (marker_root / ".aipass").mkdir() - monkeypatch.chdir(marker_root) - - result = get_root() - assert result == marker_root - - -# --------------------------------------------------------------------------- -# get_root() — marker walk resolution -# --------------------------------------------------------------------------- - - -class TestMarkerWalkResolution: - """Tier 2: .aipass/ marker directory walk.""" - - def test_marker_in_cwd_is_found(self, tmp_path, monkeypatch): - """A .aipass/ directory in CWD is resolved to CWD.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - (tmp_path / ".aipass").mkdir() - monkeypatch.chdir(tmp_path) - - assert get_root() == tmp_path - - def test_marker_in_parent_is_found(self, tmp_path, monkeypatch): - """A .aipass/ in a parent directory is discovered by walking up.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - root = tmp_path / "project" - root.mkdir() - (root / ".aipass").mkdir() - - deep = root / "a" / "b" / "c" - deep.mkdir(parents=True) - monkeypatch.chdir(deep) - - assert get_root() == root - - def test_marker_in_grandparent_is_found(self, tmp_path, monkeypatch): - """Walk stops at the nearest ancestor that contains .aipass/.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - grandparent = tmp_path / "gp" - grandparent.mkdir() - (grandparent / ".aipass").mkdir() - - child = grandparent / "child" / "grandchild" - child.mkdir(parents=True) - monkeypatch.chdir(child) - - assert get_root() == grandparent - - def test_marker_file_not_directory_is_ignored(self, tmp_path, monkeypatch): - """If .aipass exists but is a file (not dir), it should not match.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - # .aipass as a file, not a directory - (tmp_path / ".aipass").write_text("not a dir") - - # We cannot rely on parent having .aipass, so use custom start to - # test the helper directly - result = _resolve_from_marker(start=tmp_path) - # The file should not match; result will be None or a higher ancestor - # that may or may not have .aipass — what matters is tmp_path itself - # is NOT returned because .aipass there is a file. - if result is not None: - assert result != tmp_path - - def test_explicit_start_directory(self, tmp_path, monkeypatch): - """_resolve_from_marker accepts an explicit start directory.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - root = tmp_path / "root" - root.mkdir() - (root / ".aipass").mkdir() - - start = root / "sub" - start.mkdir() - - result = _resolve_from_marker(start=start) - assert result == root - - def test_no_marker_returns_none(self, tmp_path, monkeypatch): - """_resolve_from_marker returns None when no .aipass/ is found.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - # tmp_path has no .aipass and neither do its parents (almost certainly) - result = _resolve_from_marker(start=tmp_path) - # We can only assert it does not match tmp_path itself - if result is not None: - assert (result / ".aipass").is_dir() - - -# --------------------------------------------------------------------------- -# get_root() — default fallback -# --------------------------------------------------------------------------- - - -class TestDefaultFallback: - """Tier 3: ~/.aipass/ default fallback.""" - - def test_default_fallback_returns_home_aipass(self, tmp_path, monkeypatch): - """When env var absent and no marker found, default is ~/.aipass/.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - # Use a temp home with no .aipass marker anywhere in the tree - fake_home = tmp_path / "home" / "user" - fake_home.mkdir(parents=True) - monkeypatch.setenv("HOME", str(fake_home)) - # Patch Path.home() by redirecting the env; also chdir to a location - # with no .aipass marker - isolated = tmp_path / "isolated" - isolated.mkdir() - monkeypatch.chdir(isolated) - - result = get_root() - expected = Path.home() / ".aipass" - assert result == expected - - def test_default_fallback_creates_directory(self, tmp_path, monkeypatch): - """The default fallback creates ~/.aipass/ if it does not exist.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - fake_home = tmp_path / "fresh_home" - fake_home.mkdir() - monkeypatch.setenv("HOME", str(fake_home)) - - isolated = tmp_path / "isolated2" - isolated.mkdir() - monkeypatch.chdir(isolated) - - result = get_root() - assert result.is_dir() - - -# --------------------------------------------------------------------------- -# Priority order -# --------------------------------------------------------------------------- - - -class TestPriorityOrder: - """Verify env var > marker walk > default.""" - - def test_env_var_beats_marker_walk(self, tmp_path, monkeypatch): - """Env var takes priority over marker walk.""" - env_root = tmp_path / "env" - env_root.mkdir() - - cwd_with_marker = tmp_path / "cwd" - cwd_with_marker.mkdir() - (cwd_with_marker / ".aipass").mkdir() - - monkeypatch.setenv("AIPASS_ROOT", str(env_root)) - monkeypatch.chdir(cwd_with_marker) - - assert get_root() == env_root - - def test_marker_walk_beats_default(self, tmp_path, monkeypatch): - """Marker walk takes priority over default fallback.""" - monkeypatch.delenv("AIPASS_ROOT", raising=False) - - marker_root = tmp_path / "project" - marker_root.mkdir() - (marker_root / ".aipass").mkdir() - monkeypatch.chdir(marker_root) - - result = get_root() - assert result == marker_root - - -# --------------------------------------------------------------------------- -# Derived path functions -# --------------------------------------------------------------------------- - - -class TestSystemLogsDir: - def test_returns_system_logs_under_root(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - assert system_logs_dir() == tmp_path / "system_logs" - - def test_returns_path_object(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - assert isinstance(system_logs_dir(), Path) - - -class TestBranchRegistryPath: - def test_returns_registry_under_root(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - assert branch_registry_path() == tmp_path / "BRANCH_REGISTRY.json" - - def test_returns_path_object(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - assert isinstance(branch_registry_path(), Path) - - -class TestBranchPath: - """branch_path(name) reads BRANCH_REGISTRY.json and returns a Path or None.""" - - def test_known_branch_returns_path(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - _write_registry( - tmp_path / "BRANCH_REGISTRY.json", - {"vera": {"name": "vera", "path": "/home/aipass/vera", "type": "agent", "status": "active"}}, - ) - result = branch_path("vera") - assert result == Path("/home/aipass/vera") - - def test_unknown_branch_returns_none(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - _write_registry(tmp_path / "BRANCH_REGISTRY.json", {}) - assert branch_path("nonexistent") is None - - def test_missing_registry_returns_none(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - # No registry file written - assert branch_path("vera") is None - - def test_corrupt_registry_returns_none(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - (tmp_path / "BRANCH_REGISTRY.json").write_text("not valid json {{{{", encoding="utf-8") - assert branch_path("vera") is None - - def test_branch_entry_missing_path_key_returns_none(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - _write_registry( - tmp_path / "BRANCH_REGISTRY.json", - {"vera": {"name": "vera", "type": "agent"}}, # no "path" key - ) - assert branch_path("vera") is None - - def test_returns_path_object(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - branch_dir = tmp_path / "branches" / "flow" - branch_dir.mkdir(parents=True) - _write_registry( - tmp_path / "BRANCH_REGISTRY.json", - {"flow": {"name": "flow", "path": str(branch_dir), "type": "agent", "status": "active"}}, - ) - result = branch_path("flow") - assert isinstance(result, Path) - assert result == branch_dir - - def test_multiple_branches_correct_one_returned(self, tmp_path, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", str(tmp_path)) - _write_registry( - tmp_path / "BRANCH_REGISTRY.json", - { - "alpha": {"name": "alpha", "path": "/agents/alpha", "type": "agent", "status": "active"}, - "beta": {"name": "beta", "path": "/agents/beta", "type": "agent", "status": "active"}, - }, - ) - assert branch_path("alpha") == Path("/agents/alpha") - assert branch_path("beta") == Path("/agents/beta") - assert branch_path("gamma") is None - - -class TestBranchLogsDir: - def test_returns_logs_under_branch_dir(self, tmp_path): - result = branch_logs_dir(tmp_path) - assert result == tmp_path / "logs" - - def test_returns_path_object(self, tmp_path): - assert isinstance(branch_logs_dir(tmp_path), Path) - - def test_arbitrary_path(self): - p = Path("/some/branch/dir") - assert branch_logs_dir(p) == Path("/some/branch/dir/logs") - - -# --------------------------------------------------------------------------- -# PathResolutionError -# --------------------------------------------------------------------------- - - -class TestPathResolutionError: - def test_is_exception_subclass(self): - assert issubclass(PathResolutionError, Exception) - - def test_carries_message(self): - err = PathResolutionError("bad path") - assert "bad path" in str(err) - - def test_raised_on_invalid_env_var(self, monkeypatch): - monkeypatch.setenv("AIPASS_ROOT", "/totally/nonexistent/12345") - with pytest.raises(PathResolutionError, match="AIPASS_ROOT"): - get_root() diff --git a/tests/test_seedgo_cli.py b/tests/test_seedgo_cli.py deleted file mode 100644 index aee2e5b1..00000000 --- a/tests/test_seedgo_cli.py +++ /dev/null @@ -1,1207 +0,0 @@ -""" -Seed Go Phase 2 Tests — CLI, Runner, and Reporter - -Covers: - - runner.py: calculate_score, calculate_overall, run_checks, file matching - - reporter.py: human / json / github output formats - - cli.py: init / check / list commands via argparse + subprocess - -All tests use tmp_path for isolation. Mock plugins are written as .py files -into .seedgo/plugins/ — no monkeypatching of discovery needed. - -sys.path fix ensures src/ is importable when running from the repo root: - python -m pytest tests/test_seedgo_cli.py -v -""" - -import json -import subprocess -import sys -from pathlib import Path - -import pytest - -from seedgo.models import CheckItem, CheckResult, Severity -from seedgo.runner import ( - _file_matches_types, - _find_project_files, - calculate_overall, - calculate_score, - run_checks, -) -from seedgo.reporter import report_results - - -# --------------------------------------------------------------------------- -# Shared fixtures -# --------------------------------------------------------------------------- - - -@pytest.fixture -def tmp_project(tmp_path): - """Minimal project root with .seedgo/ directory tree.""" - seedgo_dir = tmp_path / ".seedgo" - seedgo_dir.mkdir() - (seedgo_dir / "plugins").mkdir() - return tmp_path - - -@pytest.fixture -def passing_plugin(tmp_project): - """A plugin that always passes for *.py files.""" - code = '''\ -PLUGIN_NAME = "always-pass" -PLUGIN_DESCRIPTION = "Always returns a passing result" -FILE_TYPES = ["*.py"] - -import sys -_src = str(__import__("pathlib").Path(__file__).parent.parent.parent.parent.parent / "src") -if _src not in sys.path: - sys.path.insert(0, _src) - -from seedgo.models import CheckResult, CheckItem, Severity - -def check(file_path, config=None): - return CheckResult( - plugin=PLUGIN_NAME, - passed=True, - checks=[CheckItem(name="always-passes", passed=True, message="All good")], - score=100, - file_path=file_path, - ) -''' - (tmp_project / ".seedgo" / "plugins" / "always_pass.py").write_text(code) - return tmp_project - - -@pytest.fixture -def failing_plugin(tmp_project): - """A plugin that always fails with one ERROR for *.py files.""" - code = '''\ -PLUGIN_NAME = "always-fail" -PLUGIN_DESCRIPTION = "Always returns a failing result" -FILE_TYPES = ["*.py"] - -import sys -_src = str(__import__("pathlib").Path(__file__).parent.parent.parent.parent.parent / "src") -if _src not in sys.path: - sys.path.insert(0, _src) - -from seedgo.models import CheckResult, CheckItem, Severity - -def check(file_path, config=None): - return CheckResult( - plugin=PLUGIN_NAME, - passed=False, - checks=[ - CheckItem( - name="always-fails", - passed=False, - message="This check always fails", - severity=Severity.ERROR, - line=1, - fix_hint="Cannot fix", - ) - ], - score=0, - file_path=file_path, - ) -''' - (tmp_project / ".seedgo" / "plugins" / "always_fail.py").write_text(code) - return tmp_project - - -@pytest.fixture -def warning_plugin(tmp_project): - """A plugin that returns a WARNING-level failure for *.py files.""" - code = '''\ -PLUGIN_NAME = "warn-plugin" -PLUGIN_DESCRIPTION = "Returns a warning" -FILE_TYPES = ["*.py"] - -import sys -_src = str(__import__("pathlib").Path(__file__).parent.parent.parent.parent.parent / "src") -if _src not in sys.path: - sys.path.insert(0, _src) - -from seedgo.models import CheckResult, CheckItem, Severity - -def check(file_path, config=None): - return CheckResult( - plugin=PLUGIN_NAME, - passed=False, - checks=[ - CheckItem( - name="warns", - passed=False, - message="A warning issue", - severity=Severity.WARNING, - line=5, - ) - ], - score=50, - file_path=file_path, - ) -''' - (tmp_project / ".seedgo" / "plugins" / "warn_plugin.py").write_text(code) - return tmp_project - - -@pytest.fixture -def sample_py_file(tmp_project): - """A Python source file to check.""" - src = tmp_project / "src" - src.mkdir() - f = src / "main.py" - f.write_text("def hello(): pass\n") - return f - - -# --------------------------------------------------------------------------- -# calculate_score tests -# --------------------------------------------------------------------------- - - -class TestCalculateScore: - def test_no_checks_returns_100(self): - result = CheckResult(plugin="p", passed=True, checks=[]) - assert calculate_score(result, {}) == 100 - - def test_all_passing_checks_returns_100(self): - result = CheckResult( - plugin="p", - passed=True, - checks=[ - CheckItem(name="c1", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="c2", passed=True, message="ok", severity=Severity.WARNING), - ], - ) - assert calculate_score(result, {}) == 100 - - def test_all_failing_errors_returns_0(self): - result = CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="c1", passed=False, message="fail", severity=Severity.ERROR), - CheckItem(name="c2", passed=False, message="fail", severity=Severity.ERROR), - ], - ) - assert calculate_score(result, {}) == 0 - - def test_half_errors_failing_returns_50(self): - result = CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="c1", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="c2", passed=False, message="fail", severity=Severity.ERROR), - ], - ) - assert calculate_score(result, {}) == 50 - - def test_warning_has_half_weight_by_default(self): - """One passing ERROR (weight 1.0) + one failing WARNING (weight 0.5) = 1/1.5 * 100 = 66.""" - result = CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="c1", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="c2", passed=False, message="warn", severity=Severity.WARNING), - ], - ) - score = calculate_score(result, {}) - assert score == int((1.0 / 1.5) * 100) # 66 - - def test_info_has_zero_weight_by_default(self): - """INFO items don't affect score — one failing INFO should still give 100.""" - result = CheckResult( - plugin="p", - passed=True, - checks=[ - CheckItem(name="c1", passed=False, message="info", severity=Severity.INFO), - ], - ) - assert calculate_score(result, {}) == 100 - - def test_custom_weights_from_config(self): - """Custom weights override defaults.""" - config = {"error_weight": 2.0, "warning_weight": 1.0, "info_weight": 0.0} - result = CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="c1", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="c2", passed=False, message="fail", severity=Severity.WARNING), - ], - ) - # passed_weight = 2.0 (ERROR passed), total_weight = 2.0 + 1.0 = 3.0 - # score = int(2/3 * 100) = 66 - score = calculate_score(result, config) - assert score == int((2.0 / 3.0) * 100) - - def test_all_info_checks_returns_100(self): - """All INFO (zero weight) → total_weight == 0 → score = 100.""" - result = CheckResult( - plugin="p", - passed=True, - checks=[ - CheckItem(name="i1", passed=False, message="info", severity=Severity.INFO), - CheckItem(name="i2", passed=False, message="info", severity=Severity.INFO), - ], - ) - assert calculate_score(result, {}) == 100 - - -# --------------------------------------------------------------------------- -# calculate_overall tests -# --------------------------------------------------------------------------- - - -class TestCalculateOverall: - def test_empty_results_returns_100_pass(self): - overall = calculate_overall([], {}) - assert overall["overall_score"] == 100 - assert overall["passed"] is True - assert overall["plugins_passed"] == 0 - assert overall["plugins_failed"] == 0 - assert overall["error_count"] == 0 - - def test_single_passing_result(self): - results = [ - CheckResult( - plugin="p", - passed=True, - checks=[CheckItem(name="c", passed=True, message="ok")], - ) - ] - overall = calculate_overall(results, {}) - assert overall["overall_score"] == 100 - assert overall["passed"] is True - assert overall["plugins_passed"] == 1 - assert overall["plugins_failed"] == 0 - - def test_single_failing_result_with_error(self): - results = [ - CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR) - ], - ) - ] - overall = calculate_overall(results, {}) - assert overall["overall_score"] == 0 - assert overall["passed"] is False - assert overall["error_count"] == 1 - - def test_error_blocks_pass_even_at_high_score(self): - """An ERROR-severity failure must block pass even if score is above threshold.""" - results = [ - CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="ok1", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="ok2", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="ok3", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="fail", passed=False, message="fail", severity=Severity.ERROR), - ], - ) - ] - overall = calculate_overall(results, {"threshold": 70}) - # Score = 75 (3/4 * 100), above threshold=70 — but error blocks pass - assert overall["overall_score"] == 75 - assert overall["error_count"] == 1 - assert overall["passed"] is False - - def test_warning_does_not_block_pass(self): - """A WARNING-only failure should allow passing if score >= threshold.""" - results = [ - CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="ok1", passed=True, message="ok", severity=Severity.ERROR), - CheckItem(name="warn", passed=False, message="warn", severity=Severity.WARNING), - ], - ) - ] - # passed_weight = 1.0, total_weight = 1.5, score = 66 - overall = calculate_overall(results, {"threshold": 60}) - assert overall["error_count"] == 0 - assert overall["warning_count"] == 1 - assert overall["passed"] is True # score 66 >= threshold 60, no errors - - def test_overall_score_is_mean_of_results(self): - """overall_score should be the mean of individual result scores.""" - r1 = CheckResult( - plugin="p1", - passed=True, - checks=[CheckItem(name="c", passed=True, message="ok", severity=Severity.ERROR)], - ) - r2 = CheckResult( - plugin="p2", - passed=False, - checks=[CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR)], - ) - overall = calculate_overall([r1, r2], {}) - # r1 score = 100, r2 score = 0, mean = 50 - assert overall["overall_score"] == 50 - - def test_threshold_respected(self): - results = [ - CheckResult( - plugin="p", - passed=True, - checks=[CheckItem(name="c", passed=True, message="ok")], - ) - ] - overall = calculate_overall(results, {"threshold": 90}) - assert overall["threshold"] == 90 - - def test_info_count_tracked(self): - results = [ - CheckResult( - plugin="p", - passed=False, - checks=[ - CheckItem(name="info", passed=False, message="info", severity=Severity.INFO), - ], - ) - ] - overall = calculate_overall(results, {}) - assert overall["info_count"] == 1 - assert overall["error_count"] == 0 - assert overall["warning_count"] == 0 - - def test_plugins_passed_and_failed_counts(self): - results = [ - CheckResult( - plugin="p1", - passed=True, - checks=[CheckItem(name="c", passed=True, message="ok", severity=Severity.ERROR)], - ), - CheckResult( - plugin="p2", - passed=False, - checks=[CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR)], - ), - CheckResult( - plugin="p3", - passed=False, - checks=[CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR)], - ), - ] - overall = calculate_overall(results, {"threshold": 75}) - assert overall["plugins_passed"] == 1 - assert overall["plugins_failed"] == 2 - - -# --------------------------------------------------------------------------- -# File matching tests -# --------------------------------------------------------------------------- - - -class TestFileMatchesTypes: - def test_py_pattern_matches_py_file(self): - assert _file_matches_types("/path/to/file.py", ["*.py"]) is True - - def test_py_pattern_does_not_match_js_file(self): - assert _file_matches_types("/path/to/file.js", ["*.py"]) is False - - def test_wildcard_matches_any_file(self): - assert _file_matches_types("/path/to/file.anything", ["*"]) is True - - def test_multiple_patterns_any_match(self): - assert _file_matches_types("/path/to/file.ts", ["*.js", "*.ts"]) is True - - def test_no_patterns_returns_false(self): - assert _file_matches_types("/path/to/file.py", []) is False - - def test_specific_filename_match(self): - assert _file_matches_types("/path/to/Makefile", ["Makefile"]) is True - - -class TestFindProjectFiles: - def test_finds_py_files_in_project(self, tmp_project): - src = tmp_project / "src" - src.mkdir() - (src / "main.py").write_text("pass") - (src / "utils.py").write_text("pass") - config = {"paths": {"include": ["."], "exclude": []}} - files = _find_project_files(str(tmp_project), config) - file_names = [Path(f).name for f in files] - assert "main.py" in file_names - assert "utils.py" in file_names - - def test_excludes_patterns(self, tmp_project): - src = tmp_project / "src" - tests = tmp_project / "tests" - src.mkdir() - tests.mkdir() - (src / "main.py").write_text("pass") - (tests / "test_main.py").write_text("pass") - config = {"paths": {"include": ["."], "exclude": ["tests/"]}} - files = _find_project_files(str(tmp_project), config) - file_names = [Path(f).name for f in files] - assert "main.py" in file_names - assert "test_main.py" not in file_names - - def test_specific_include_path(self, tmp_project): - src = tmp_project / "src" - other = tmp_project / "other" - src.mkdir() - other.mkdir() - (src / "main.py").write_text("pass") - (other / "other.py").write_text("pass") - config = {"paths": {"include": ["src"], "exclude": []}} - files = _find_project_files(str(tmp_project), config) - file_names = [Path(f).name for f in files] - assert "main.py" in file_names - assert "other.py" not in file_names - - -# --------------------------------------------------------------------------- -# run_checks integration tests -# --------------------------------------------------------------------------- - - -class TestRunChecks: - def test_no_plugins_returns_empty_results_and_pass(self, tmp_project, sample_py_file): - # Filter to a nonexistent plugin name so builtins are also excluded - results, overall = run_checks(str(tmp_project), files=[str(sample_py_file)], plugins=["nonexistent-plugin-xyz"]) - assert results == [] - assert overall["passed"] is True - assert overall["overall_score"] == 100 - - def test_passing_plugin_gives_pass(self, passing_plugin, sample_py_file): - # Filter to only the local always-pass plugin to isolate from builtins - results, overall = run_checks(str(passing_plugin), files=[str(sample_py_file)], plugins=["always-pass"]) - assert len(results) == 1 - assert results[0].passed is True - assert overall["passed"] is True - - def test_failing_plugin_gives_fail(self, failing_plugin, sample_py_file): - # Filter to only the local always-fail plugin to isolate from builtins - results, overall = run_checks(str(failing_plugin), files=[str(sample_py_file)], plugins=["always-fail"]) - assert len(results) == 1 - assert results[0].passed is False - assert overall["passed"] is False - assert overall["error_count"] == 1 - - def test_plugin_filter_restricts_plugins(self, passing_plugin, failing_plugin, sample_py_file): - """When plugins filter is given, only those plugins should run.""" - # Both plugins are in the same project dir (failing_plugin fixture modifies passing_plugin's dir) - # We need a project with both; use the failing_plugin fixture which wraps passing_plugin - # Actually since fixtures use the same tmp_project, we can't easily combine them. - # Instead test with a fresh project that has one plugin, filtered out. - results, overall = run_checks( - str(passing_plugin), - files=[str(sample_py_file)], - plugins=["nonexistent-plugin"], - ) - assert results == [] - assert overall["passed"] is True - - def test_file_type_filtering(self, passing_plugin): - """Plugin with FILE_TYPES=['*.py'] should not run on .txt files.""" - txt_file = passing_plugin / "src" / "readme.txt" - (passing_plugin / "src").mkdir(exist_ok=True) - txt_file.write_text("hello") - results, overall = run_checks(str(passing_plugin), files=[str(txt_file)]) - assert results == [] - - def test_explicit_files_override_discovery(self, passing_plugin, sample_py_file): - # Filter to only the local always-pass plugin to isolate from builtins - results, overall = run_checks(str(passing_plugin), files=[str(sample_py_file)], plugins=["always-pass"]) - # Only the one file we specified should be checked - assert len(results) == 1 - assert results[0].file_path == str(sample_py_file) - - def test_score_set_on_results(self, passing_plugin, sample_py_file): - results, _ = run_checks(str(passing_plugin), files=[str(sample_py_file)]) - assert results[0].score == 100 - - def test_crashed_plugin_returns_failed_result(self, tmp_project, sample_py_file): - """A plugin that raises an exception should return a failed CheckResult, not crash.""" - code = '''\ -PLUGIN_NAME = "crash-plugin" -PLUGIN_DESCRIPTION = "Always crashes" -FILE_TYPES = ["*.py"] - -def check(file_path, config=None): - raise RuntimeError("kaboom") -''' - (tmp_project / ".seedgo" / "plugins" / "crash_plugin.py").write_text(code) - # Filter to only the crash plugin to isolate from builtins - results, overall = run_checks(str(tmp_project), files=[str(sample_py_file)], plugins=["crash-plugin"]) - assert len(results) == 1 - assert results[0].passed is False - assert results[0].score == 0 - assert "kaboom" in results[0].metadata.get("error", "") - - -# --------------------------------------------------------------------------- -# Reporter tests -# --------------------------------------------------------------------------- - - -class TestReportHuman: - """Human format prints directly via Rich console. Tests capture stdout.""" - - def _make_result(self, passed=True, score=100, checks=None): - return CheckResult( - plugin="test-plugin", - passed=passed, - checks=checks or [], - score=score, - file_path="/path/to/file.py", - ) - - def _overall(self, score=100, passed=True, threshold=75): - return { - "overall_score": score, - "passed": passed, - "threshold": threshold, - "plugins_passed": 1 if passed else 0, - "plugins_failed": 0 if passed else 1, - "error_count": 0, - "warning_count": 0, - "info_count": 0, - } - - def _report_captured(self, results, overall, capsys): - """Call report_results for human format and return captured output.""" - report_results(results, overall, format="human") - return capsys.readouterr().out - - def test_output_contains_plugin_name(self, capsys): - result = self._make_result() - output = self._report_captured([result], self._overall(), capsys) - assert "test-plugin" in output - - def test_passing_result_contains_pass(self, capsys): - result = self._make_result(passed=True, score=100) - output = self._report_captured([result], self._overall(score=100, passed=True), capsys) - assert "PASS" in output - - def test_failing_result_contains_fail(self, capsys): - checks = [CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR)] - result = self._make_result(passed=False, score=0, checks=checks) - output = self._report_captured([result], self._overall(score=0, passed=False), capsys) - assert "FAIL" in output - - def test_score_shown_in_output(self, capsys): - result = self._make_result(score=75) - output = self._report_captured([result], self._overall(score=75), capsys) - assert "75" in output - - def test_check_item_message_shown(self, capsys): - checks = [CheckItem(name="bare-except", passed=False, message="Found bare except", severity=Severity.ERROR)] - result = self._make_result(passed=False, checks=checks) - output = self._report_captured([result], self._overall(passed=False), capsys) - assert "Found bare except" in output - - def test_fix_hint_shown_for_failing_check(self, capsys): - checks = [ - CheckItem( - name="c", - passed=False, - message="fail", - severity=Severity.ERROR, - fix_hint="Use except Exception:", - ) - ] - result = self._make_result(passed=False, checks=checks) - output = self._report_captured([result], self._overall(passed=False), capsys) - assert "Use except Exception:" in output - - def test_no_results_shows_no_checks_ran(self, capsys): - output = self._report_captured([], self._overall(), capsys) - assert "No checks ran" in output - - def test_threshold_shown_in_summary(self, capsys): - result = self._make_result() - output = self._report_captured([result], self._overall(threshold=80), capsys) - assert "80" in output - - def test_line_number_shown_when_present(self, capsys): - checks = [CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR, line=42)] - result = self._make_result(passed=False, checks=checks) - output = self._report_captured([result], self._overall(passed=False), capsys) - assert "42" in output - - def test_invalid_format_raises_value_error(self): - with pytest.raises(ValueError, match="Unknown format"): - report_results([], {}, format="xml") - - -class TestReportJSON: - def test_output_is_valid_json(self): - results = [CheckResult(plugin="p", passed=True, checks=[], score=100, file_path="/f.py")] - overall = { - "overall_score": 100, "passed": True, "threshold": 75, - "plugins_passed": 1, "plugins_failed": 0, - "error_count": 0, "warning_count": 0, "info_count": 0, - } - output = report_results(results, overall, format="json") - data = json.loads(output) - assert isinstance(data, dict) - - def test_json_contains_overall_score(self): - results = [CheckResult(plugin="p", passed=True, checks=[], score=100, file_path="/f.py")] - overall = { - "overall_score": 88, "passed": True, "threshold": 75, - "plugins_passed": 1, "plugins_failed": 0, - "error_count": 0, "warning_count": 0, "info_count": 0, - } - data = json.loads(report_results(results, overall, format="json")) - assert data["overall_score"] == 88 - - def test_json_contains_results_list(self): - results = [CheckResult(plugin="p", passed=True, checks=[], score=100, file_path="/f.py")] - overall = { - "overall_score": 100, "passed": True, "threshold": 75, - "plugins_passed": 1, "plugins_failed": 0, - "error_count": 0, "warning_count": 0, "info_count": 0, - } - data = json.loads(report_results(results, overall, format="json")) - assert "results" in data - assert len(data["results"]) == 1 - assert data["results"][0]["plugin"] == "p" - - def test_json_severity_is_string(self): - """Severity enum must be serialized as string in JSON output.""" - checks = [CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR)] - results = [CheckResult(plugin="p", passed=False, checks=checks, score=0, file_path="/f.py")] - overall = { - "overall_score": 0, "passed": False, "threshold": 75, - "plugins_passed": 0, "plugins_failed": 1, - "error_count": 1, "warning_count": 0, "info_count": 0, - } - data = json.loads(report_results(results, overall, format="json")) - sev = data["results"][0]["checks"][0]["severity"] - assert isinstance(sev, str) - assert sev == "error" - - def test_json_passed_field_present(self): - results = [] - overall = { - "overall_score": 100, "passed": True, "threshold": 75, - "plugins_passed": 0, "plugins_failed": 0, - "error_count": 0, "warning_count": 0, "info_count": 0, - } - data = json.loads(report_results(results, overall, format="json")) - assert "passed" in data - - -class TestReportGitHub: - def test_error_produces_error_annotation(self): - checks = [ - CheckItem( - name="c", - passed=False, - message="Missing type hint", - severity=Severity.ERROR, - line=42, - ) - ] - results = [CheckResult(plugin="type-hints", passed=False, checks=checks, score=0, file_path="src/main.py")] - overall = { - "overall_score": 0, "passed": False, "threshold": 75, - "plugins_passed": 0, "plugins_failed": 1, - "error_count": 1, "warning_count": 0, "info_count": 0, - } - output = report_results(results, overall, format="github") - assert "::error" in output - assert "Missing type hint" in output - - def test_warning_produces_warning_annotation(self): - checks = [ - CheckItem( - name="c", - passed=False, - message="Class too large", - severity=Severity.WARNING, - line=15, - ) - ] - results = [CheckResult(plugin="no-god-objects", passed=False, checks=checks, score=50, file_path="src/models.py")] - overall = { - "overall_score": 50, "passed": False, "threshold": 75, - "plugins_passed": 0, "plugins_failed": 1, - "error_count": 0, "warning_count": 1, "info_count": 0, - } - output = report_results(results, overall, format="github") - assert "::warning" in output - assert "Class too large" in output - - def test_file_and_line_in_annotation(self): - checks = [ - CheckItem(name="c", passed=False, message="msg", severity=Severity.ERROR, line=7) - ] - results = [CheckResult(plugin="p", passed=False, checks=checks, score=0, file_path="/some/file.py")] - overall = { - "overall_score": 0, "passed": False, "threshold": 75, - "plugins_passed": 0, "plugins_failed": 1, - "error_count": 1, "warning_count": 0, "info_count": 0, - } - output = report_results(results, overall, format="github") - assert "file=/some/file.py" in output - assert "line=7" in output - - def test_passing_checks_not_in_github_output(self): - checks = [ - CheckItem(name="ok", passed=True, message="all good", severity=Severity.ERROR), - ] - results = [CheckResult(plugin="p", passed=True, checks=checks, score=100, file_path="/f.py")] - overall = { - "overall_score": 100, "passed": True, "threshold": 75, - "plugins_passed": 1, "plugins_failed": 0, - "error_count": 0, "warning_count": 0, "info_count": 0, - } - output = report_results(results, overall, format="github") - assert "::error" not in output - assert "::warning" not in output - - def test_no_results_produces_empty_output(self): - overall = { - "overall_score": 100, "passed": True, "threshold": 75, - "plugins_passed": 0, "plugins_failed": 0, - "error_count": 0, "warning_count": 0, "info_count": 0, - } - output = report_results([], overall, format="github") - assert output == "" - - def test_plugin_name_included_in_annotation(self): - checks = [CheckItem(name="c", passed=False, message="fail", severity=Severity.ERROR)] - results = [CheckResult(plugin="my-plugin", passed=False, checks=checks, score=0, file_path="/f.py")] - overall = { - "overall_score": 0, "passed": False, "threshold": 75, - "plugins_passed": 0, "plugins_failed": 1, - "error_count": 1, "warning_count": 0, "info_count": 0, - } - output = report_results(results, overall, format="github") - assert "my-plugin" in output - - -# --------------------------------------------------------------------------- -# CLI tests — via subprocess to test the real entry point -# --------------------------------------------------------------------------- - - - -class TestCLIInit: - def test_init_creates_config_file(self, tmp_path): - subprocess.run( - [sys.executable, "-m", "seedgo.cli"], - input="", - capture_output=True, - text=True, - cwd=str(tmp_path), - env={**__import__("os").environ, "PYTHONPATH": str(Path(__file__).parent.parent / "src")}, - ) - # The above runs cli as module — we need the main() entry - # Actually test by calling main() directly via runner script - pass # Covered by direct function tests below - - def test_init_via_main_creates_config(self, tmp_path): - """Call _cmd_init directly to test config creation.""" - from seedgo.cli import _cmd_init - import argparse - - args = argparse.Namespace(profile=None) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_path)) - _cmd_init(args) - finally: - __import__("os").chdir(old_cwd) - - assert (tmp_path / ".seedgo" / "config.json").exists() - - def test_init_with_profile_embeds_profile(self, tmp_path): - from seedgo.cli import _cmd_init - import argparse - - args = argparse.Namespace(profile="python-basic") - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_path)) - _cmd_init(args) - finally: - __import__("os").chdir(old_cwd) - - config_path = tmp_path / ".seedgo" / "config.json" - data = json.loads(config_path.read_text()) - assert data["profile"] == "python-basic" - - def test_init_fails_if_config_exists(self, tmp_project): - """If config already exists, init should exit with code 1.""" - from seedgo.cli import _cmd_init - import argparse - - (tmp_project / ".seedgo" / "config.json").write_text("{}") - args = argparse.Namespace(profile=None) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_project)) - with pytest.raises(SystemExit) as exc_info: - _cmd_init(args) - finally: - __import__("os").chdir(old_cwd) - - assert exc_info.value.code == 1 - - def test_init_creates_plugins_dir(self, tmp_path): - from seedgo.cli import _cmd_init - import argparse - - args = argparse.Namespace(profile=None) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_path)) - _cmd_init(args) - finally: - __import__("os").chdir(old_cwd) - - assert (tmp_path / ".seedgo" / "plugins").is_dir() - - -class TestCLICheck: - def test_check_with_no_plugins_exits_0(self, tmp_project, sample_py_file): - """No matching plugins = no failures = exit code 0.""" - from seedgo.cli import _cmd_check - import argparse - - # Filter to a nonexistent plugin so builtins are also excluded - args = argparse.Namespace( - files=[str(sample_py_file)], - format="human", - threshold=None, - plugins=["nonexistent-plugin-xyz"], - ) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_project)) - with pytest.raises(SystemExit) as exc_info: - _cmd_check(args) - finally: - __import__("os").chdir(old_cwd) - - assert exc_info.value.code == 0 - - def test_check_with_passing_plugin_exits_0(self, passing_plugin, sample_py_file): - from seedgo.cli import _cmd_check - import argparse - - # Filter to only the local always-pass plugin to isolate from builtins - args = argparse.Namespace( - files=[str(sample_py_file)], - format="human", - threshold=None, - plugins=["always-pass"], - ) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(passing_plugin)) - with pytest.raises(SystemExit) as exc_info: - _cmd_check(args) - finally: - __import__("os").chdir(old_cwd) - - assert exc_info.value.code == 0 - - def test_check_with_failing_plugin_exits_1(self, failing_plugin, sample_py_file): - from seedgo.cli import _cmd_check - import argparse - - args = argparse.Namespace( - files=[str(sample_py_file)], - format="human", - threshold=None, - plugins=None, - ) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(failing_plugin)) - with pytest.raises(SystemExit) as exc_info: - _cmd_check(args) - finally: - __import__("os").chdir(old_cwd) - - assert exc_info.value.code == 1 - - def test_check_json_format_produces_valid_json(self, passing_plugin, sample_py_file, capsys): - from seedgo.cli import _cmd_check - import argparse - - args = argparse.Namespace( - files=[str(sample_py_file)], - format="json", - threshold=None, - plugins=None, - ) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(passing_plugin)) - with pytest.raises(SystemExit): - _cmd_check(args) - finally: - __import__("os").chdir(old_cwd) - - captured = capsys.readouterr() - data = json.loads(captured.out) - assert "overall_score" in data - - def test_check_threshold_override(self, passing_plugin, sample_py_file): - """--threshold 101 should force a fail even with a passing plugin.""" - from seedgo.cli import _cmd_check - import argparse - - args = argparse.Namespace( - files=[str(sample_py_file)], - format="human", - threshold=101, # impossible to reach - plugins=None, - ) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(passing_plugin)) - with pytest.raises(SystemExit) as exc_info: - _cmd_check(args) - finally: - __import__("os").chdir(old_cwd) - - assert exc_info.value.code == 1 - - def test_check_without_seedgo_dir_exits_1(self, tmp_path, capsys): - """Running check outside a project (no .seedgo/) should exit 1 with error.""" - from seedgo.cli import _cmd_check - import argparse - - args = argparse.Namespace( - files=[], - format="human", - threshold=None, - plugins=None, - ) - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_path)) - with pytest.raises(SystemExit) as exc_info: - _cmd_check(args) - finally: - __import__("os").chdir(old_cwd) - - assert exc_info.value.code == 1 - - -class TestCLIList: - def test_list_with_no_plugins_prints_message(self, tmp_project, capsys): - # With builtin plugins now shipping, list always shows at least the builtins. - # The test verifies list exits 0 and produces output — specific message - # check updated to reflect that builtins are always discovered. - from seedgo.cli import _cmd_list - import argparse - - args = argparse.Namespace() - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_project)) - with pytest.raises(SystemExit) as exc_info: - _cmd_list(args) - finally: - __import__("os").chdir(old_cwd) - - captured = capsys.readouterr() - assert exc_info.value.code == 0 - # Builtins are always present now — output should list them - assert "plugin" in captured.out.lower() - - def test_list_shows_plugin_names(self, passing_plugin, capsys): - from seedgo.cli import _cmd_list - import argparse - - args = argparse.Namespace() - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(passing_plugin)) - with pytest.raises(SystemExit): - _cmd_list(args) - finally: - __import__("os").chdir(old_cwd) - - captured = capsys.readouterr() - assert "always-pass" in captured.out - - def test_list_shows_source(self, passing_plugin, capsys): - from seedgo.cli import _cmd_list - import argparse - - args = argparse.Namespace() - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(passing_plugin)) - with pytest.raises(SystemExit): - _cmd_list(args) - finally: - __import__("os").chdir(old_cwd) - - captured = capsys.readouterr() - assert "local" in captured.out - - def test_list_shows_file_types(self, passing_plugin, capsys): - from seedgo.cli import _cmd_list - import argparse - - args = argparse.Namespace() - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(passing_plugin)) - with pytest.raises(SystemExit): - _cmd_list(args) - finally: - __import__("os").chdir(old_cwd) - - captured = capsys.readouterr() - assert "*.py" in captured.out - - def test_list_exits_0(self, tmp_project): - from seedgo.cli import _cmd_list - import argparse - - args = argparse.Namespace() - old_cwd = __import__("os").getcwd() - try: - __import__("os").chdir(str(tmp_project)) - with pytest.raises(SystemExit) as exc_info: - _cmd_list(args) - finally: - __import__("os").chdir(old_cwd) - - assert exc_info.value.code == 0 - - -# --------------------------------------------------------------------------- -# CLI main() argparse dispatch tests -# --------------------------------------------------------------------------- - - -class TestCLIMain: - """Test the main() entry point's argparse dispatch via sys.argv patching.""" - - def test_main_no_args_exits_0(self): - """main() with no command prints help and exits 0.""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - mp.setattr(sys, "argv", ["seedgo"]) - with pytest.raises(SystemExit) as exc_info: - main() - assert exc_info.value.code == 0 - - def test_main_init_command_dispatches(self, tmp_path): - """main() with 'init' dispatches to _cmd_init.""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - mp.setattr(sys, "argv", ["seedgo", "init"]) - mp.chdir(tmp_path) - main() - - assert (tmp_path / ".seedgo" / "config.json").exists() - - def test_main_init_with_profile(self, tmp_path): - """main() with 'init --profile python-basic' passes profile through.""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - mp.setattr(sys, "argv", ["seedgo", "init", "--profile", "python-basic"]) - mp.chdir(tmp_path) - main() - - data = json.loads((tmp_path / ".seedgo" / "config.json").read_text()) - assert data["profile"] == "python-basic" - - def test_main_list_command_dispatches(self, tmp_project, capsys): - """main() with 'list' dispatches to _cmd_list.""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - mp.setattr(sys, "argv", ["seedgo", "list"]) - mp.chdir(tmp_project) - with pytest.raises(SystemExit) as exc_info: - main() - - assert exc_info.value.code == 0 - - def test_main_check_no_seedgo_exits_1(self, tmp_path, capsys): - """main() check outside a project exits 1.""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - mp.setattr(sys, "argv", ["seedgo", "check"]) - mp.chdir(tmp_path) - with pytest.raises(SystemExit) as exc_info: - main() - - assert exc_info.value.code == 1 - - def test_main_check_with_passing_plugin(self, passing_plugin, sample_py_file): - """main() check with passing plugin exits 0.""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - # Filter to only the local always-pass plugin to isolate from builtins - mp.setattr(sys, "argv", ["seedgo", "check", str(sample_py_file), "--plugin", "always-pass"]) - mp.chdir(passing_plugin) - with pytest.raises(SystemExit) as exc_info: - main() - - assert exc_info.value.code == 0 - - def test_main_check_github_format(self, tmp_project, sample_py_file, capsys): - """main() check --format github produces annotation-style output (empty if passing).""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - # Filter to a nonexistent plugin so builtins are also excluded — pure format test - mp.setattr(sys, "argv", [ - "seedgo", "check", str(sample_py_file), - "--format", "github", - "--plugin", "nonexistent-plugin-xyz", - ]) - mp.chdir(tmp_project) - with pytest.raises(SystemExit) as exc_info: - main() - - assert exc_info.value.code == 0 - - def test_main_check_nonexistent_file_exits_1(self, tmp_project, capsys): - """main() check with a file that doesn't exist exits 1.""" - from seedgo.cli import main - - with pytest.MonkeyPatch().context() as mp: - mp.setattr(sys, "argv", ["seedgo", "check", "/nonexistent/file.py"]) - mp.chdir(tmp_project) - with pytest.raises(SystemExit) as exc_info: - main() - - assert exc_info.value.code == 1 - - -# --------------------------------------------------------------------------- -# Public API export test -# --------------------------------------------------------------------------- - - -class TestPublicAPIPhase2: - def test_run_checks_importable_from_seedgo(self): - from seedgo import run_checks as rc - assert callable(rc) - - def test_run_checks_in_dunder_all(self): - import seedgo - assert "run_checks" in seedgo.__all__ diff --git a/tests/test_seedgo_core.py b/tests/test_seedgo_core.py deleted file mode 100644 index b085490f..00000000 --- a/tests/test_seedgo_core.py +++ /dev/null @@ -1,728 +0,0 @@ -""" -Seed Go Core Framework Tests - -Comprehensive tests for Phase 1 deliverables: - - models.py: CheckResult, CheckItem, Severity - - config.py: load_config, find_project_root, create_default_config, DEFAULT_CONFIG - - discovery.py: discover_plugins and helper functions - - bypass.py: is_bypassed, load_bypass_rules - - exceptions.py: exception hierarchy - -Target: 85%+ coverage of src/seedgo/ core modules. -""" - -import json -from pathlib import Path - -import pytest - -from seedgo.models import CheckItem, CheckResult, Severity -from seedgo.config import ( - DEFAULT_CONFIG, - _deep_merge, - create_default_config, - find_project_root, - load_config, - resolve_file_config, -) -from seedgo.bypass import is_bypassed, load_bypass_rules -from seedgo.discovery import _scan_directory, discover_plugins -from seedgo.exceptions import ConfigError, DiscoveryError, PluginError, SeedGoError - - -# --------------------------------------------------------------------------- -# Fixtures -# --------------------------------------------------------------------------- - - -@pytest.fixture -def tmp_project(tmp_path): - """A temporary project root with a .seedgo/ directory.""" - seedgo_dir = tmp_path / ".seedgo" - seedgo_dir.mkdir() - (seedgo_dir / "plugins").mkdir() - return tmp_path - - -@pytest.fixture -def tmp_project_with_config(tmp_project): - """A temporary project with a minimal .seedgo/config.json.""" - config = { - "version": "1.0.0", - "plugins": { - "enabled": ["test-plugin"], - "disabled": [], - "config": {}, - }, - "scoring": {"threshold": 80}, - } - config_path = tmp_project / ".seedgo" / "config.json" - config_path.write_text(json.dumps(config)) - return tmp_project - - -@pytest.fixture -def simple_plugin_file(tmp_project): - """Write a minimal valid plugin into .seedgo/plugins/.""" - plugin_code = """ -PLUGIN_NAME = "test-plugin" -PLUGIN_DESCRIPTION = "A simple test plugin" -FILE_TYPES = ["*.py"] - -from seedgo.models import CheckResult, CheckItem, Severity - -def check(file_path, config=None): - return CheckResult( - plugin=PLUGIN_NAME, - passed=True, - checks=[CheckItem(name="always-passes", passed=True, message="ok")], - score=100, - file_path=file_path, - ) -""" - plugin_path = tmp_project / ".seedgo" / "plugins" / "test_plugin.py" - plugin_path.write_text(plugin_code) - return plugin_path - - -@pytest.fixture -def bypass_rules_file(tmp_project): - """Write a .seedgo/bypass.json file.""" - rules = { - "version": "1.0.0", - "bypass": [ - { - "file": "src/legacy.py", - "plugin": "no-bare-except", - "reason": "Legacy code", - }, - { - "file": "src/utils.py", - "plugin": "type-hints", - "lines": [10, 20], - "reason": "Line-specific bypass", - }, - ], - } - bypass_path = tmp_project / ".seedgo" / "bypass.json" - bypass_path.write_text(json.dumps(rules)) - return tmp_project - - -# --------------------------------------------------------------------------- -# Severity tests -# --------------------------------------------------------------------------- - - -class TestSeverity: - def test_severity_values(self): - assert Severity.ERROR.value == "error" - assert Severity.WARNING.value == "warning" - assert Severity.INFO.value == "info" - - def test_severity_is_enum(self): - from enum import Enum - assert issubclass(Severity, Enum) - - def test_severity_members(self): - members = {s.name for s in Severity} - assert members == {"ERROR", "WARNING", "INFO"} - - def test_severity_comparison(self): - assert Severity.ERROR == Severity.ERROR - assert Severity.ERROR != Severity.WARNING - - def test_severity_from_value(self): - assert Severity("error") == Severity.ERROR - assert Severity("warning") == Severity.WARNING - assert Severity("info") == Severity.INFO - - -# --------------------------------------------------------------------------- -# CheckItem tests -# --------------------------------------------------------------------------- - - -class TestCheckItem: - def test_required_fields(self): - item = CheckItem(name="test", passed=True, message="all good") - assert item.name == "test" - assert item.passed is True - assert item.message == "all good" - - def test_default_severity_is_error(self): - item = CheckItem(name="x", passed=False, message="fail") - assert item.severity == Severity.ERROR - - def test_custom_severity(self): - item = CheckItem(name="x", passed=False, message="warn", severity=Severity.WARNING) - assert item.severity == Severity.WARNING - - def test_optional_line_defaults_to_none(self): - item = CheckItem(name="x", passed=True, message="ok") - assert item.line is None - - def test_optional_fix_hint_defaults_to_none(self): - item = CheckItem(name="x", passed=True, message="ok") - assert item.fix_hint is None - - def test_all_fields(self): - item = CheckItem( - name="bare-except", - passed=False, - message="Found bare except at line 5", - severity=Severity.WARNING, - line=5, - fix_hint="except Exception:", - ) - assert item.name == "bare-except" - assert item.passed is False - assert item.severity == Severity.WARNING - assert item.line == 5 - assert item.fix_hint == "except Exception:" - - def test_missing_required_field_raises(self): - with pytest.raises(TypeError): - CheckItem(name="x", passed=True) # type: ignore[call-arg] # missing message - - def test_is_dataclass(self): - import dataclasses - assert dataclasses.is_dataclass(CheckItem) - - -# --------------------------------------------------------------------------- -# CheckResult tests -# --------------------------------------------------------------------------- - - -class TestCheckResult: - def test_required_fields(self): - result = CheckResult(plugin="my-plugin", passed=True) - assert result.plugin == "my-plugin" - assert result.passed is True - - def test_checks_defaults_to_empty_list(self): - result = CheckResult(plugin="p", passed=True) - assert result.checks == [] - - def test_score_defaults_to_zero(self): - result = CheckResult(plugin="p", passed=True) - assert result.score == 0 - - def test_file_path_defaults_to_empty_string(self): - result = CheckResult(plugin="p", passed=True) - assert result.file_path == "" - - def test_metadata_defaults_to_empty_dict(self): - result = CheckResult(plugin="p", passed=True) - assert result.metadata == {} - - def test_metadata_is_independent_per_instance(self): - r1 = CheckResult(plugin="p", passed=True) - r2 = CheckResult(plugin="p", passed=True) - r1.metadata["key"] = "val" - assert "key" not in r2.metadata - - def test_checks_is_independent_per_instance(self): - r1 = CheckResult(plugin="p", passed=True) - r2 = CheckResult(plugin="p", passed=True) - r1.checks.append(CheckItem(name="x", passed=True, message="ok")) - assert len(r2.checks) == 0 - - def test_full_construction(self): - items = [ - CheckItem(name="c1", passed=True, message="ok"), - CheckItem(name="c2", passed=False, message="fail", severity=Severity.WARNING), - ] - result = CheckResult( - plugin="no-bare-except", - passed=False, - checks=items, - score=65, - file_path="/path/to/file.py", - metadata={"ast_nodes": 42}, - ) - assert result.plugin == "no-bare-except" - assert result.passed is False - assert len(result.checks) == 2 - assert result.score == 65 - assert result.file_path == "/path/to/file.py" - assert result.metadata["ast_nodes"] == 42 - - def test_is_dataclass(self): - import dataclasses - assert dataclasses.is_dataclass(CheckResult) - - def test_asdict_serializable(self): - import dataclasses - result = CheckResult( - plugin="p", - passed=True, - checks=[CheckItem(name="c", passed=True, message="ok")], - score=100, - ) - d = dataclasses.asdict(result) - assert d["plugin"] == "p" - assert d["passed"] is True - assert d["score"] == 100 - assert d["checks"][0]["name"] == "c" - - -# --------------------------------------------------------------------------- -# Config tests -# --------------------------------------------------------------------------- - - -class TestDefaultConfig: - def test_default_config_has_required_keys(self): - assert "version" in DEFAULT_CONFIG - assert "profile" in DEFAULT_CONFIG - assert "plugins" in DEFAULT_CONFIG - assert "scoring" in DEFAULT_CONFIG - assert "paths" in DEFAULT_CONFIG - assert "overrides" in DEFAULT_CONFIG - - def test_default_profile_is_none(self): - assert DEFAULT_CONFIG["profile"] is None - - def test_default_threshold(self): - assert DEFAULT_CONFIG["scoring"]["threshold"] == 75 - - def test_default_weights(self): - scoring = DEFAULT_CONFIG["scoring"] - assert scoring["error_weight"] == 1.0 - assert scoring["warning_weight"] == 0.5 - assert scoring["info_weight"] == 0.0 - - def test_default_paths_include(self): - assert DEFAULT_CONFIG["paths"]["include"] == ["."] - - def test_default_plugins_empty(self): - plugins = DEFAULT_CONFIG["plugins"] - assert plugins["enabled"] == [] - assert plugins["disabled"] == [] - assert plugins["config"] == {} - - def test_default_overrides_empty(self): - assert DEFAULT_CONFIG["overrides"] == [] - - -class TestLoadConfig: - def test_returns_defaults_when_no_config_file(self, tmp_project): - config = load_config(str(tmp_project)) - assert config["scoring"]["threshold"] == 75 - assert config["profile"] is None - - def test_loads_user_config(self, tmp_project_with_config): - config = load_config(str(tmp_project_with_config)) - assert config["scoring"]["threshold"] == 80 - - def test_merges_user_config_over_defaults(self, tmp_project): - user_cfg = {"scoring": {"threshold": 90}} - (tmp_project / ".seedgo" / "config.json").write_text(json.dumps(user_cfg)) - config = load_config(str(tmp_project)) - assert config["scoring"]["threshold"] == 90 - # Other defaults preserved - assert config["scoring"]["error_weight"] == 1.0 - - def test_raises_config_error_on_invalid_json(self, tmp_project): - (tmp_project / ".seedgo" / "config.json").write_text("{ invalid json }") - with pytest.raises(ConfigError): - load_config(str(tmp_project)) - - def test_plugins_enabled_list_loaded(self, tmp_project): - cfg = {"plugins": {"enabled": ["plugin-a", "plugin-b"]}} - (tmp_project / ".seedgo" / "config.json").write_text(json.dumps(cfg)) - config = load_config(str(tmp_project)) - assert "plugin-a" in config["plugins"]["enabled"] - - def test_default_config_not_mutated(self, tmp_project): - """load_config must return a copy — DEFAULT_CONFIG must stay pristine.""" - import copy - original = copy.deepcopy(DEFAULT_CONFIG) - cfg = {"scoring": {"threshold": 99}} - (tmp_project / ".seedgo" / "config.json").write_text(json.dumps(cfg)) - load_config(str(tmp_project)) - assert DEFAULT_CONFIG == original - - -class TestFindProjectRoot: - def test_finds_root_from_subdir(self, tmp_project): - subdir = tmp_project / "src" / "mypackage" - subdir.mkdir(parents=True) - root = find_project_root(str(subdir)) - assert root == str(tmp_project) - - def test_finds_root_from_file(self, tmp_project): - src = tmp_project / "src" - src.mkdir() - some_file = src / "main.py" - some_file.write_text("pass") - root = find_project_root(str(some_file)) - assert root == str(tmp_project) - - def test_returns_none_when_no_seedgo_dir(self, tmp_path): - subdir = tmp_path / "no_seedgo_here" / "nested" - subdir.mkdir(parents=True) - root = find_project_root(str(subdir)) - assert root is None - - def test_finds_root_from_project_root_itself(self, tmp_project): - root = find_project_root(str(tmp_project)) - assert root == str(tmp_project) - - -class TestCreateDefaultConfig: - def test_creates_config_file(self, tmp_path): - project = tmp_path / "newproject" - project.mkdir() - config_path = create_default_config(str(project)) - assert Path(config_path).exists() - - def test_created_config_is_valid_json(self, tmp_path): - project = tmp_path / "newproject" - project.mkdir() - config_path = create_default_config(str(project)) - with open(config_path) as f: - data = json.load(f) - assert "version" in data - assert "scoring" in data - - def test_creates_seedgo_dir_if_missing(self, tmp_path): - project = tmp_path / "newproject" - project.mkdir() - create_default_config(str(project)) - assert (project / ".seedgo").is_dir() - - def test_creates_plugins_subdir(self, tmp_path): - project = tmp_path / "newproject" - project.mkdir() - create_default_config(str(project)) - assert (project / ".seedgo" / "plugins").is_dir() - - def test_raises_if_config_already_exists(self, tmp_project): - # Write a config so it already exists - (tmp_project / ".seedgo" / "config.json").write_text("{}") - with pytest.raises(ConfigError, match="already exists"): - create_default_config(str(tmp_project)) - - def test_profile_embedded_in_config(self, tmp_path): - project = tmp_path / "newproject" - project.mkdir() - config_path = create_default_config(str(project), profile="python-basic") - with open(config_path) as f: - data = json.load(f) - assert data["profile"] == "python-basic" - - -class TestDeepMerge: - def test_simple_override(self): - base = {"a": 1, "b": 2} - _deep_merge(base, {"b": 99}) - assert base == {"a": 1, "b": 99} - - def test_nested_merge(self): - base = {"scoring": {"threshold": 75, "error_weight": 1.0}} - _deep_merge(base, {"scoring": {"threshold": 90}}) - assert base["scoring"]["threshold"] == 90 - assert base["scoring"]["error_weight"] == 1.0 # preserved - - def test_new_key_added(self): - base = {"a": 1} - _deep_merge(base, {"b": 2}) - assert base["b"] == 2 - - def test_list_replaces_not_merges(self): - base = {"plugins": {"enabled": ["a", "b"]}} - _deep_merge(base, {"plugins": {"enabled": ["c"]}}) - assert base["plugins"]["enabled"] == ["c"] - - -class TestResolveFileConfig: - def test_no_overrides_returns_same_config(self, tmp_project): - config = load_config(str(tmp_project)) - resolved = resolve_file_config(config, str(tmp_project / "src" / "main.py"), str(tmp_project)) - assert resolved["scoring"]["threshold"] == config["scoring"]["threshold"] - - def test_override_applied_for_matching_path(self, tmp_project): - cfg = { - "scoring": {"threshold": 75}, - "overrides": [ - {"paths": ["tests/"], "scoring": {"threshold": 50}} - ], - } - (tmp_project / ".seedgo" / "config.json").write_text(json.dumps(cfg)) - config = load_config(str(tmp_project)) - test_file = str(tmp_project / "tests" / "test_foo.py") - resolved = resolve_file_config(config, test_file, str(tmp_project)) - assert resolved["scoring"]["threshold"] == 50 - - def test_override_not_applied_for_non_matching_path(self, tmp_project): - cfg = { - "scoring": {"threshold": 75}, - "overrides": [ - {"paths": ["tests/"], "scoring": {"threshold": 50}} - ], - } - (tmp_project / ".seedgo" / "config.json").write_text(json.dumps(cfg)) - config = load_config(str(tmp_project)) - src_file = str(tmp_project / "src" / "main.py") - resolved = resolve_file_config(config, src_file, str(tmp_project)) - assert resolved["scoring"]["threshold"] == 75 - - -# --------------------------------------------------------------------------- -# Bypass tests -# --------------------------------------------------------------------------- - - -class TestLoadBypassRules: - def test_returns_empty_list_when_no_file(self, tmp_project): - rules = load_bypass_rules(str(tmp_project)) - assert rules == [] - - def test_loads_rules(self, bypass_rules_file): - rules = load_bypass_rules(str(bypass_rules_file)) - assert len(rules) == 2 - - def test_returns_empty_on_invalid_json(self, tmp_project): - (tmp_project / ".seedgo" / "bypass.json").write_text("{ bad json }") - rules = load_bypass_rules(str(tmp_project)) - assert rules == [] - - def test_returns_empty_when_bypass_key_missing(self, tmp_project): - (tmp_project / ".seedgo" / "bypass.json").write_text('{"version": "1.0.0"}') - rules = load_bypass_rules(str(tmp_project)) - assert rules == [] - - -class TestIsBypassed: - def test_no_rules_returns_false(self): - assert is_bypassed("src/foo.py", "my-plugin", bypass_rules=None) is False - - def test_empty_rules_returns_false(self): - assert is_bypassed("src/foo.py", "my-plugin", bypass_rules=[]) is False - - def test_whole_file_plugin_bypass(self): - rules = [{"file": "src/legacy.py", "plugin": "no-bare-except"}] - assert is_bypassed("src/legacy.py", "no-bare-except", bypass_rules=rules) is True - - def test_different_file_not_bypassed(self): - rules = [{"file": "src/legacy.py", "plugin": "no-bare-except"}] - assert is_bypassed("src/other.py", "no-bare-except", bypass_rules=rules) is False - - def test_different_plugin_not_bypassed(self): - rules = [{"file": "src/legacy.py", "plugin": "no-bare-except"}] - assert is_bypassed("src/legacy.py", "type-hints", bypass_rules=rules) is False - - def test_line_specific_bypass_matching_line(self): - rules = [{"file": "src/utils.py", "plugin": "type-hints", "lines": [10, 20]}] - assert is_bypassed("src/utils.py", "type-hints", line=10, bypass_rules=rules) is True - - def test_line_specific_bypass_non_matching_line(self): - rules = [{"file": "src/utils.py", "plugin": "type-hints", "lines": [10, 20]}] - assert is_bypassed("src/utils.py", "type-hints", line=99, bypass_rules=rules) is False - - def test_line_specific_bypass_no_line_provided(self): - """Line rule requires a matching line — without line=, should not bypass.""" - rules = [{"file": "src/utils.py", "plugin": "type-hints", "lines": [10, 20]}] - assert is_bypassed("src/utils.py", "type-hints", line=None, bypass_rules=rules) is False - - def test_project_root_relative_path(self, tmp_project): - rules = [{"file": "src/legacy.py", "plugin": "no-bare-except"}] - abs_path = str(tmp_project / "src" / "legacy.py") - assert is_bypassed(abs_path, "no-bare-except", bypass_rules=rules, project_root=str(tmp_project)) is True - - def test_multiple_rules_first_match_wins(self): - rules = [ - {"file": "src/foo.py", "plugin": "plugin-a"}, - {"file": "src/foo.py", "plugin": "plugin-b"}, - ] - assert is_bypassed("src/foo.py", "plugin-a", bypass_rules=rules) is True - assert is_bypassed("src/foo.py", "plugin-b", bypass_rules=rules) is True - assert is_bypassed("src/foo.py", "plugin-c", bypass_rules=rules) is False - - -# --------------------------------------------------------------------------- -# Discovery tests -# --------------------------------------------------------------------------- - - -class TestScanDirectory: - def test_returns_empty_for_nonexistent_dir(self, tmp_path): - nonexistent = tmp_path / "does_not_exist" - result = _scan_directory(nonexistent, source="builtin") - assert result == [] - - def test_skips_underscore_files(self, tmp_path): - (tmp_path / "_private.py").write_text("PLUGIN_NAME = 'x'\ndef check(f, c=None): pass") - (tmp_path / "__init__.py").write_text("") - result = _scan_directory(tmp_path, source="builtin") - assert result == [] - - def test_discovers_valid_plugin(self, tmp_path): - plugin_code = "PLUGIN_NAME = 'my-plugin'\ndef check(f, c=None): pass" - (tmp_path / "my_plugin.py").write_text(plugin_code) - result = _scan_directory(tmp_path, source="local") - assert len(result) == 1 - assert result[0]["name"] == "my-plugin" - assert result[0]["source"] == "local" - - def test_skips_file_without_plugin_name(self, tmp_path): - (tmp_path / "not_a_plugin.py").write_text("def check(f, c=None): pass") - result = _scan_directory(tmp_path, source="local") - assert result == [] - - def test_skips_file_without_check_function(self, tmp_path): - (tmp_path / "no_check.py").write_text("PLUGIN_NAME = 'x'") - result = _scan_directory(tmp_path, source="local") - assert result == [] - - def test_skips_broken_plugin_silently(self, tmp_path): - (tmp_path / "broken.py").write_text("raise RuntimeError('boom')") - # Should not raise — broken plugins are silently skipped - result = _scan_directory(tmp_path, source="local") - assert result == [] - - def test_multiple_plugins_discovered(self, tmp_path): - for i in range(3): - code = f"PLUGIN_NAME = 'plugin-{i}'\ndef check(f, c=None): pass" - (tmp_path / f"plugin_{i}.py").write_text(code) - result = _scan_directory(tmp_path, source="builtin") - assert len(result) == 3 - - def test_descriptor_has_required_keys(self, tmp_path): - (tmp_path / "p.py").write_text("PLUGIN_NAME = 'p'\ndef check(f, c=None): pass") - result = _scan_directory(tmp_path, source="local") - assert len(result) == 1 - descriptor = result[0] - assert "name" in descriptor - assert "module" in descriptor - assert "source" in descriptor - assert "path" in descriptor - - -class TestDiscoverPlugins: - def test_returns_list(self, tmp_project): - result = discover_plugins(str(tmp_project)) - assert isinstance(result, list) - - def test_discovers_local_plugin(self, tmp_project, simple_plugin_file): - result = discover_plugins(str(tmp_project)) - names = [p["name"] for p in result] - assert "test-plugin" in names - - def test_local_plugin_source_is_local(self, tmp_project, simple_plugin_file): - result = discover_plugins(str(tmp_project)) - local_plugins = [p for p in result if p["source"] == "local"] - assert len(local_plugins) >= 1 - - def test_deduplication_last_wins(self, tmp_project): - """Two plugins with the same name — the last one (local) wins.""" - # Create a builtin-style plugin by patching the builtin directory - local_code = "PLUGIN_NAME = 'dupe-plugin'\ndef check(f, c=None): return 'local'" - (tmp_project / ".seedgo" / "plugins" / "dupe.py").write_text(local_code) - result = discover_plugins(str(tmp_project)) - dupe = next((p for p in result if p["name"] == "dupe-plugin"), None) - assert dupe is not None - assert dupe["source"] == "local" - - def test_no_project_root_still_works(self): - result = discover_plugins(project_root=None) - assert isinstance(result, list) - - def test_plugin_descriptor_has_module(self, tmp_project, simple_plugin_file): - result = discover_plugins(str(tmp_project)) - plugin = next((p for p in result if p["name"] == "test-plugin"), None) - assert plugin is not None - assert hasattr(plugin["module"], "check") - assert hasattr(plugin["module"], "PLUGIN_NAME") - - -# --------------------------------------------------------------------------- -# Exception hierarchy tests -# --------------------------------------------------------------------------- - - -class TestExceptions: - def test_seedgo_error_is_exception(self): - assert issubclass(SeedGoError, Exception) - - def test_config_error_inherits_seedgo_error(self): - assert issubclass(ConfigError, SeedGoError) - - def test_plugin_error_inherits_seedgo_error(self): - assert issubclass(PluginError, SeedGoError) - - def test_discovery_error_inherits_seedgo_error(self): - assert issubclass(DiscoveryError, SeedGoError) - - def test_config_error_can_be_raised_and_caught(self): - with pytest.raises(ConfigError): - raise ConfigError("bad config") - - def test_plugin_error_can_be_raised_and_caught(self): - with pytest.raises(PluginError): - raise PluginError("bad plugin") - - def test_discovery_error_can_be_raised_and_caught(self): - with pytest.raises(DiscoveryError): - raise DiscoveryError("discovery failed") - - def test_catch_all_via_seedgo_error(self): - """All custom exceptions should be catchable via SeedGoError.""" - for exc_class in (ConfigError, PluginError, DiscoveryError): - with pytest.raises(SeedGoError): - raise exc_class("test") - - def test_error_message_preserved(self): - try: - raise ConfigError("specific message") - except ConfigError as e: - assert "specific message" in str(e) - - -# --------------------------------------------------------------------------- -# Public API / __init__ tests -# --------------------------------------------------------------------------- - - -class TestPublicAPI: - def test_version_is_string(self): - import seedgo - assert isinstance(seedgo.__version__, str) - - def test_version_format(self): - import seedgo - parts = seedgo.__version__.split(".") - assert len(parts) == 3 - assert all(p.isdigit() for p in parts) - - def test_version_is_1_0_0(self): - import seedgo - assert seedgo.__version__ == "1.0.0" - - def test_check_result_importable_from_seedgo(self): - from seedgo import CheckResult - assert CheckResult is not None - - def test_check_item_importable_from_seedgo(self): - from seedgo import CheckItem - assert CheckItem is not None - - def test_severity_importable_from_seedgo(self): - from seedgo import Severity - assert Severity is not None - - def test_discover_plugins_importable_from_seedgo(self): - from seedgo import discover_plugins - assert callable(discover_plugins) - - def test_load_config_importable_from_seedgo(self): - from seedgo import load_config - assert callable(load_config) - - def test_all_exports_listed_in_dunder_all(self): - import seedgo - for name in ["CheckResult", "CheckItem", "Severity", "discover_plugins", "load_config"]: - assert name in seedgo.__all__ diff --git a/tests/test_seedgo_plugins.py b/tests/test_seedgo_plugins.py deleted file mode 100644 index 0e1d1ba2..00000000 --- a/tests/test_seedgo_plugins.py +++ /dev/null @@ -1,765 +0,0 @@ -""" -Seed Go Plugin Tests — Phase 3 - -Tests for all 5 starter plugins: - - no-bare-except - - type-hints-required - - docstring-coverage - - function-length - - file-structure - -Each plugin has: - - A clean-file test (should pass) - - A violation test (should fail) - - Edge case tests (empty files, comments, binary-safe reads) - - Configurable option tests where applicable - -Uses tmp_path for isolated test directories. -""" - -import importlib.util -from pathlib import Path - -import pytest - -_repo_root = Path(__file__).parent.parent - -def _load_plugin(plugin_filename: str | Path): - """Load a plugin module by filename from the plugins directory.""" - plugin_path = _repo_root / "src" / "seedgo" / "plugins" / plugin_filename - spec = importlib.util.spec_from_file_location(Path(plugin_filename).stem, plugin_path) - assert spec is not None and spec.loader is not None - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - return module - - -# --------------------------------------------------------------------------- -# Plugin: no-bare-except -# --------------------------------------------------------------------------- - -class TestNoBareExcept: - @pytest.fixture - def plugin(self): - return _load_plugin(Path("no_bare_except.py")) - - def test_plugin_name(self, plugin): - assert plugin.PLUGIN_NAME == "no-bare-except" - - def test_plugin_has_description(self, plugin): - assert isinstance(plugin.PLUGIN_DESCRIPTION, str) - assert len(plugin.PLUGIN_DESCRIPTION) > 0 - - def test_plugin_has_file_types(self, plugin): - assert plugin.FILE_TYPES == ["*.py"] - - def test_clean_file_passes(self, plugin, tmp_path): - f = tmp_path / "clean.py" - f.write_text( - "try:\n" - " do_something()\n" - "except Exception:\n" - " pass\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - assert result.plugin == "no-bare-except" - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 0 - - def test_bare_except_fails(self, plugin, tmp_path): - f = tmp_path / "bad.py" - f.write_text( - "try:\n" - " do_something()\n" - "except:\n" - " pass\n" - ) - result = plugin.check(str(f)) - assert result.passed is False - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 1 - assert failed[0].line == 3 - - def test_multiple_bare_excepts(self, plugin, tmp_path): - f = tmp_path / "multi.py" - f.write_text( - "try:\n" - " x()\n" - "except:\n" - " pass\n" - "try:\n" - " y()\n" - "except:\n" - " pass\n" - ) - result = plugin.check(str(f)) - assert result.passed is False - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 2 - - def test_bare_except_in_comment_ignored(self, plugin, tmp_path): - f = tmp_path / "comment.py" - f.write_text( - "# except: <- this is just a comment\n" - "x = 1\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_bare_except_in_string_ignored(self, plugin, tmp_path): - f = tmp_path / "string.py" - f.write_text( - 'x = """This shows except: usage"""\n' - "y = 1\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_empty_file_passes(self, plugin, tmp_path): - f = tmp_path / "empty.py" - f.write_text("") - result = plugin.check(str(f)) - assert result.passed is True - - def test_file_with_only_comments_passes(self, plugin, tmp_path): - f = tmp_path / "comments.py" - f.write_text( - "# This is a comment\n" - "# except: not a real bare except\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_nonexistent_file_returns_passing(self, plugin, tmp_path): - result = plugin.check(str(tmp_path / "does_not_exist.py")) - assert result.passed is True - assert result.metadata.get("skipped") is True - - def test_bare_except_with_inline_comment_still_flagged(self, plugin, tmp_path): - f = tmp_path / "inline.py" - f.write_text( - "try:\n" - " x()\n" - "except: # bad practice\n" - " pass\n" - ) - result = plugin.check(str(f)) - assert result.passed is False - - def test_specific_exception_passes(self, plugin, tmp_path): - f = tmp_path / "specific.py" - f.write_text( - "try:\n" - " x()\n" - "except (ValueError, TypeError):\n" - " pass\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_result_has_file_path(self, plugin, tmp_path): - f = tmp_path / "test.py" - f.write_text("x = 1\n") - result = plugin.check(str(f)) - assert result.file_path == str(f) - - -# --------------------------------------------------------------------------- -# Plugin: type-hints-required -# --------------------------------------------------------------------------- - -class TestTypeHintsRequired: - @pytest.fixture - def plugin(self): - return _load_plugin(Path("type_hints_required.py")) - - def test_plugin_name(self, plugin): - assert plugin.PLUGIN_NAME == "type-hints-required" - - def test_clean_file_passes(self, plugin, tmp_path): - f = tmp_path / "clean.py" - f.write_text( - "def greet(name: str) -> str:\n" - " return f'Hello {name}'\n" - "\n" - "def add(a: int, b: int) -> int:\n" - " return a + b\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 0 - - def test_missing_return_type_fails(self, plugin, tmp_path): - f = tmp_path / "bad.py" - f.write_text( - "def greet(name: str):\n" - " return f'Hello {name}'\n" - ) - result = plugin.check(str(f)) - assert result.passed is False - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 1 - assert "greet" in failed[0].message - - def test_private_function_skipped(self, plugin, tmp_path): - f = tmp_path / "private.py" - f.write_text( - "def _helper():\n" - " return 42\n" - "\n" - "def __dunder():\n" - " return 42\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_init_skipped(self, plugin, tmp_path): - f = tmp_path / "cls.py" - f.write_text( - "class Foo:\n" - " def __init__(self, x: int):\n" - " self.x = x\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_dunder_methods_skipped(self, plugin, tmp_path): - f = tmp_path / "dunders.py" - f.write_text( - "class Foo:\n" - " def __str__(self):\n" - " return 'Foo'\n" - " def __repr__(self):\n" - " return 'Foo()'\n" - " def __len__(self):\n" - " return 0\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_empty_file_passes(self, plugin, tmp_path): - f = tmp_path / "empty.py" - f.write_text("") - result = plugin.check(str(f)) - assert result.passed is True - - def test_async_function_checked(self, plugin, tmp_path): - f = tmp_path / "async_fn.py" - f.write_text( - "async def fetch_data(url: str):\n" - " pass\n" - " pass\n" - " pass\n" - ) - result = plugin.check(str(f)) - assert result.passed is False - failed = [c for c in result.checks if not c.passed] - assert any("fetch_data" in c.message for c in failed) - - def test_async_function_with_return_type_passes(self, plugin, tmp_path): - f = tmp_path / "async_ok.py" - f.write_text( - "async def fetch_data(url: str) -> bytes:\n" - " return b''\n" - ) - result = plugin.check(str(f)) - assert result.passed is True - - def test_nonexistent_file_returns_passing(self, plugin, tmp_path): - result = plugin.check(str(tmp_path / "ghost.py")) - assert result.passed is True - assert result.metadata.get("skipped") is True - - def test_syntax_error_skipped(self, plugin, tmp_path): - f = tmp_path / "bad_syntax.py" - f.write_text("def broken(\n x:\n") - result = plugin.check(str(f)) - assert result.passed is True - assert result.metadata.get("skipped") is True - - def test_violation_has_line_number(self, plugin, tmp_path): - f = tmp_path / "line.py" - f.write_text( - "x = 1\n" - "y = 2\n" - "def my_func(a: int):\n" - " return a\n" - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert any(c.line == 3 for c in failed) - - def test_violation_has_fix_hint(self, plugin, tmp_path): - f = tmp_path / "hint.py" - f.write_text( - "def process(data: list):\n" - " return data\n" - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) > 0 - assert failed[0].fix_hint is not None - - -# --------------------------------------------------------------------------- -# Plugin: docstring-coverage -# --------------------------------------------------------------------------- - -class TestDocstringCoverage: - @pytest.fixture - def plugin(self): - return _load_plugin(Path("docstring_coverage.py")) - - def test_plugin_name(self, plugin): - assert plugin.PLUGIN_NAME == "docstring-coverage" - - def test_clean_function_passes(self, plugin, tmp_path): - f = tmp_path / "clean.py" - f.write_text( - 'def greet(name: str) -> str:\n' - ' """Greet the user by name."""\n' - ' return f"Hello {name}"\n' - ' return f"Hello {name}"\n' - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 0 - - def test_missing_docstring_flagged(self, plugin, tmp_path): - f = tmp_path / "no_doc.py" - f.write_text( - "def process(data: list) -> list:\n" - " result = []\n" - " for item in data:\n" - " result.append(item)\n" - " return result\n" - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 1 - assert "process" in failed[0].message - - def test_info_severity(self, plugin, tmp_path): - f = tmp_path / "info.py" - f.write_text( - "def process(data: list) -> list:\n" - " result = []\n" - " for item in data:\n" - " result.append(item)\n" - " return result\n" - ) - result = plugin.check(str(f)) - from seedgo.models import Severity - failed = [c for c in result.checks if not c.passed] - assert all(c.severity == Severity.INFO for c in failed) - - def test_missing_docstring_still_passes_overall(self, plugin, tmp_path): - """INFO violations should not cause overall failure.""" - f = tmp_path / "no_doc.py" - f.write_text( - "def process(data: list) -> list:\n" - " result = []\n" - " for item in data:\n" - " result.append(item)\n" - " return result\n" - ) - result = plugin.check(str(f)) - # Overall passed=True even when there are INFO violations - assert result.passed is True - - def test_private_function_skipped(self, plugin, tmp_path): - f = tmp_path / "private.py" - f.write_text( - "def _helper(x: int) -> int:\n" - " y = x + 1\n" - " z = y * 2\n" - " return z\n" - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 0 - - def test_short_function_skipped(self, plugin, tmp_path): - """Functions with < 3 body statements are exempt.""" - f = tmp_path / "short.py" - f.write_text( - "def tiny(x):\n" - " return x\n" - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 0 - - def test_class_without_docstring_flagged(self, plugin, tmp_path): - f = tmp_path / "class_no_doc.py" - f.write_text( - "class MyService:\n" - " pass\n" - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 1 - assert "MyService" in failed[0].message - - def test_class_with_docstring_passes(self, plugin, tmp_path): - f = tmp_path / "class_doc.py" - f.write_text( - 'class MyService:\n' - ' """Service for handling requests."""\n' - ' pass\n' - ) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - # MyService class should pass - class_fails = [c for c in failed if "MyService" in c.message] - assert len(class_fails) == 0 - - def test_empty_file_passes(self, plugin, tmp_path): - f = tmp_path / "empty.py" - f.write_text("") - result = plugin.check(str(f)) - assert result.passed is True - - def test_nonexistent_file_passes(self, plugin, tmp_path): - result = plugin.check(str(tmp_path / "ghost.py")) - assert result.passed is True - - def test_syntax_error_skipped(self, plugin, tmp_path): - f = tmp_path / "bad.py" - f.write_text("def broken(\n") - result = plugin.check(str(f)) - assert result.passed is True - - -# --------------------------------------------------------------------------- -# Plugin: function-length -# --------------------------------------------------------------------------- - -class TestFunctionLength: - @pytest.fixture - def plugin(self): - return _load_plugin(Path("function_length.py")) - - def test_plugin_name(self, plugin): - assert plugin.PLUGIN_NAME == "function-length" - - def test_short_function_passes(self, plugin, tmp_path): - f = tmp_path / "short.py" - lines = ["def small_func() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(10)] - f.write_text("".join(lines)) - result = plugin.check(str(f)) - assert result.passed is True - - def test_long_function_fails(self, plugin, tmp_path): - f = tmp_path / "long.py" - lines = ["def huge_func() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(55)] - f.write_text("".join(lines)) - result = plugin.check(str(f)) - assert result.passed is False - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 1 - assert "huge_func" in failed[0].message - - def test_default_max_lines_is_50(self, plugin, tmp_path): - """A function of exactly 50 lines should pass.""" - f = tmp_path / "border.py" - lines = ["def border_func() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(49)] - f.write_text("".join(lines)) - result = plugin.check(str(f)) - assert result.passed is True - - def test_function_at_51_lines_fails(self, plugin, tmp_path): - f = tmp_path / "just_over.py" - lines = ["def over_func() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(50)] - f.write_text("".join(lines)) - result = plugin.check(str(f)) - assert result.passed is False - - def test_custom_max_lines_config(self, plugin, tmp_path): - """With max_lines=10, a 15-line function should fail.""" - f = tmp_path / "custom.py" - lines = ["def medium_func() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(15)] - f.write_text("".join(lines)) - result = plugin.check(str(f), config={"max_lines": 10}) - assert result.passed is False - - def test_custom_max_lines_pass(self, plugin, tmp_path): - """With max_lines=100, a 50-line function should pass.""" - f = tmp_path / "custom_pass.py" - lines = ["def medium_func() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(50)] - f.write_text("".join(lines)) - result = plugin.check(str(f), config={"max_lines": 100}) - assert result.passed is True - - def test_multiple_long_functions_all_reported(self, plugin, tmp_path): - f = tmp_path / "multi.py" - lines = [] - for fn in ["func_a", "func_b"]: - lines.append(f"def {fn}() -> None:\n") - lines += [f" x_{i} = {i}\n" for i in range(55)] - f.write_text("".join(lines)) - result = plugin.check(str(f)) - assert result.passed is False - failed = [c for c in result.checks if not c.passed] - assert len(failed) == 2 - - def test_empty_file_passes(self, plugin, tmp_path): - f = tmp_path / "empty.py" - f.write_text("") - result = plugin.check(str(f)) - assert result.passed is True - - def test_nonexistent_file_passes(self, plugin, tmp_path): - result = plugin.check(str(tmp_path / "ghost.py")) - assert result.passed is True - - def test_syntax_error_skipped(self, plugin, tmp_path): - f = tmp_path / "bad.py" - f.write_text("def broken(\n") - result = plugin.check(str(f)) - assert result.passed is True - - def test_violation_has_line_number(self, plugin, tmp_path): - f = tmp_path / "line.py" - lines = ["def long_fn() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(55)] - f.write_text("".join(lines)) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) > 0 - assert failed[0].line == 1 - - def test_metadata_contains_max_lines(self, plugin, tmp_path): - f = tmp_path / "meta.py" - f.write_text("x = 1\n") - result = plugin.check(str(f), config={"max_lines": 30}) - assert result.metadata.get("max_lines") == 30 - - def test_violation_has_fix_hint(self, plugin, tmp_path): - f = tmp_path / "hint.py" - lines = ["def big_func() -> None:\n"] - lines += [f" x_{i} = {i}\n" for i in range(55)] - f.write_text("".join(lines)) - result = plugin.check(str(f)) - failed = [c for c in result.checks if not c.passed] - assert len(failed) > 0 - assert failed[0].fix_hint is not None - - -# --------------------------------------------------------------------------- -# Plugin: file-structure -# --------------------------------------------------------------------------- - -class TestFileStructure: - @pytest.fixture - def plugin(self): - return _load_plugin(Path("file_structure.py")) - - @pytest.fixture - def project_with_seedgo(self, tmp_path): - """Create a minimal project with .seedgo marker.""" - (tmp_path / ".seedgo").mkdir() - return tmp_path - - def test_plugin_name(self, plugin): - assert plugin.PLUGIN_NAME == "file-structure" - - def test_source_file_in_package_passes(self, plugin, project_with_seedgo): - """A .py file inside a proper package (with __init__.py) should pass.""" - pkg = project_with_seedgo / "src" / "mypackage" - pkg.mkdir(parents=True) - (pkg / "__init__.py").write_text("") - src = pkg / "module.py" - src.write_text("x = 1\n") - result = plugin.check(str(src)) - failed = [c for c in result.checks if not c.passed] - # Should not have missing-init-py violation - init_fails = [c for c in failed if c.name == "missing-init-py"] - assert len(init_fails) == 0 - - def test_test_file_in_tests_dir_passes(self, plugin, project_with_seedgo): - """test_*.py inside tests/ should pass the placement check.""" - tests_dir = project_with_seedgo / "tests" - tests_dir.mkdir() - test_file = tests_dir / "test_module.py" - test_file.write_text("def test_something(): pass\n") - result = plugin.check(str(test_file)) - failed = [c for c in result.checks if not c.passed] - placement_fails = [c for c in failed if c.name == "test-file-placement"] - assert len(placement_fails) == 0 - - def test_test_file_at_root_fails(self, plugin, project_with_seedgo): - """test_*.py at the project root should fail the placement check.""" - test_file = project_with_seedgo / "test_something.py" - test_file.write_text("def test_foo(): pass\n") - result = plugin.check(str(test_file)) - failed = [c for c in result.checks if not c.passed] - placement_fails = [c for c in failed if c.name == "test-file-placement"] - assert len(placement_fails) == 1 - - def test_source_file_at_root_fails(self, plugin, project_with_seedgo): - """A regular .py file at project root (not in allowed_root_files) should fail.""" - src = project_with_seedgo / "my_module.py" - src.write_text("x = 1\n") - result = plugin.check(str(src)) - failed = [c for c in result.checks if not c.passed] - root_fails = [c for c in failed if c.name == "root-python-file"] - assert len(root_fails) == 1 - - def test_allowed_root_file_passes(self, plugin, project_with_seedgo): - """setup.py at root is allowed by default.""" - setup = project_with_seedgo / "setup.py" - setup.write_text("from setuptools import setup\nsetup()\n") - result = plugin.check(str(setup)) - failed = [c for c in result.checks if not c.passed] - root_fails = [c for c in failed if c.name == "root-python-file"] - assert len(root_fails) == 0 - - def test_custom_allowed_root_files(self, plugin, project_with_seedgo): - """Custom allowed_root_files config should be respected.""" - custom = project_with_seedgo / "fabfile.py" - custom.write_text("x = 1\n") - # With default config, fabfile.py is already in DEFAULT_ALLOWED_ROOT_FILES - # so let's test a truly custom file - myfile = project_with_seedgo / "myapp.py" - myfile.write_text("x = 1\n") - # Without config — should fail - result_no_config = plugin.check(str(myfile)) - failed_no = [c for c in result_no_config.checks if not c.passed and c.name == "root-python-file"] - assert len(failed_no) == 1 - # With custom config allowing myapp.py — should pass - result_with_config = plugin.check(str(myfile), config={"allowed_root_files": ["myapp.py"]}) - failed_yes = [c for c in result_with_config.checks if not c.passed and c.name == "root-python-file"] - assert len(failed_yes) == 0 - - def test_missing_init_py_flagged(self, plugin, project_with_seedgo): - """A package directory without __init__.py should be flagged.""" - pkg = project_with_seedgo / "src" / "mypackage" - pkg.mkdir(parents=True) - # Note: no __init__.py - src = pkg / "module.py" - src.write_text("x = 1\n") - # Also create another .py so the dir clearly has sources - (pkg / "other.py").write_text("y = 1\n") - result = plugin.check(str(src)) - failed = [c for c in result.checks if not c.passed] - init_fails = [c for c in failed if c.name == "missing-init-py"] - assert len(init_fails) == 1 - - def test_nonexistent_file_passes(self, plugin, tmp_path): - result = plugin.check(str(tmp_path / "ghost.py")) - assert result.passed is True - - def test_conftest_at_root_passes(self, plugin, project_with_seedgo): - """conftest.py is a standard root-level file.""" - conf = project_with_seedgo / "conftest.py" - conf.write_text("import pytest\n") - result = plugin.check(str(conf)) - failed = [c for c in result.checks if not c.passed] - root_fails = [c for c in failed if c.name == "root-python-file"] - assert len(root_fails) == 0 - - def test_result_has_plugin_name(self, plugin, tmp_path): - f = tmp_path / "x.py" - f.write_text("") - result = plugin.check(str(f)) - assert result.plugin == "file-structure" - - -# --------------------------------------------------------------------------- -# Plugin discovery integration tests -# --------------------------------------------------------------------------- - -class TestPluginDiscovery: - def test_all_plugins_discoverable(self): - """All 5 plugins should be discovered as built-ins.""" - from seedgo.discovery import discover_plugins - plugins = discover_plugins() - names = {p["name"] for p in plugins} - assert "no-bare-except" in names - assert "type-hints-required" in names - assert "docstring-coverage" in names - assert "function-length" in names - assert "file-structure" in names - - def test_all_plugins_have_required_attributes(self): - """Every discovered plugin must have PLUGIN_NAME, check(), and FILE_TYPES.""" - from seedgo.discovery import discover_plugins - plugins = discover_plugins() - for p in plugins: - module = p["module"] - assert isinstance(getattr(module, "PLUGIN_NAME", None), str) - assert callable(getattr(module, "check", None)) - assert isinstance(getattr(module, "FILE_TYPES", None), list) - - def test_plugins_return_check_result(self, tmp_path): - """Every plugin's check() must return a CheckResult instance.""" - from seedgo.discovery import discover_plugins - from seedgo.models import CheckResult - - # Create a minimal Python file to run checks on - test_file = tmp_path / "test_subject.py" - test_file.write_text("x = 1\n") - - plugins = discover_plugins() - for p in plugins: - module = p["module"] - result = module.check(str(test_file)) - assert isinstance(result, CheckResult), ( - f"Plugin {p['name']} returned {type(result)} instead of CheckResult" - ) - - def test_runner_executes_all_plugins(self, tmp_path): - """run_checks should execute all enabled plugins.""" - import json - from seedgo.runner import run_checks - - # Set up minimal project - seedgo_dir = tmp_path / ".seedgo" - seedgo_dir.mkdir() - (seedgo_dir / "plugins").mkdir() - - config = { - "version": "1.0.0", - "plugins": { - "enabled": [ - "no-bare-except", - "type-hints-required", - "docstring-coverage", - "function-length", - "file-structure", - ], - "disabled": [], - "config": {}, - }, - "scoring": {"threshold": 75}, - "paths": {"include": ["."], "exclude": []}, - "overrides": [], - } - (seedgo_dir / "config.json").write_text(json.dumps(config)) - - # Create a simple Python source file - src = tmp_path / "hello.py" - src.write_text( - '"""A simple module."""\n' - "\n" - "def hello() -> str:\n" - ' """Say hello."""\n' - " return 'Hello'\n" - ) - - results, overall = run_checks(str(tmp_path), files=[str(src)]) - assert isinstance(results, list) - assert len(results) > 0 - - plugin_names_run = {r.plugin for r in results} - # At least some of our plugins should have run - assert len(plugin_names_run) > 0 diff --git a/tests/test_silent_failure_detection.py b/tests/test_silent_failure_detection.py deleted file mode 100644 index d8baf68a..00000000 --- a/tests/test_silent_failure_detection.py +++ /dev/null @@ -1,317 +0,0 @@ -""" -Tests for the silent-failure-detection seedgo plugin. - -Covers: - - Detects except: pass patterns (bare except with only pass) - - Detects except Exception: pass patterns - - Does not flag except with logging - - Does not flag except with re-raise - - Does not flag except with meaningful handling - - Provides helpful fix hints - - Handles syntax errors and empty files gracefully -""" - -from __future__ import annotations - -import textwrap -from pathlib import Path - -from seedgo.plugins.silent_failure_detection import PLUGIN_NAME, check - - -class TestSilentFailureDetectionPass: - """Code without silent failures should pass.""" - - def test_no_exceptions_passes(self, tmp_path: Path): - """File with no exception handling passes.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - def add(a, b): - return a + b - """) - ) - - result = check(str(test_file)) - assert result.plugin == PLUGIN_NAME - assert result.passed is True - assert result.metadata["violations_found"] == 0 - - def test_except_with_logging_passes(self, tmp_path: Path): - """Exception handler with logging passes.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - import logging - - try: - risky_operation() - except Exception: - logging.error("Operation failed", exc_info=True) - """) - ) - - result = check(str(test_file)) - assert result.passed is True - - def test_except_with_reraise_passes(self, tmp_path: Path): - """Exception handler that re-raises passes.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky_operation() - except Exception as e: - cleanup() - raise - """) - ) - - result = check(str(test_file)) - assert result.passed is True - - def test_except_with_meaningful_handling_passes(self, tmp_path: Path): - """Exception handler with meaningful code passes.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky_operation() - except ValueError: - result = None - continue - """) - ) - - result = check(str(test_file)) - assert result.passed is True - - def test_specific_exception_with_comment_and_pass_passes(self, tmp_path: Path): - """Exception handler with pass and comment passes (comment shows intent).""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - os.remove(temp_file) - except FileNotFoundError: - # File already deleted, this is expected - pass - """) - ) - - # Note: This currently FAILS because we check for pass regardless of comments. - # This is actually CORRECT behavior - the plugin should flag it as ERROR - # because comments in code are not the same as proper logging. - # The fix_hint tells them to add logging even if there's a comment. - result = check(str(test_file)) - assert result.passed is False # This is the CORRECT behavior - - def test_empty_file_passes(self, tmp_path: Path): - """Empty file passes.""" - test_file = tmp_path / "test.py" - test_file.write_text("") - - result = check(str(test_file)) - assert result.passed is True - - def test_file_with_syntax_error_skipped(self, tmp_path: Path): - """File with syntax error is skipped.""" - test_file = tmp_path / "test.py" - test_file.write_text("def broken(:\n") - - result = check(str(test_file)) - assert result.passed is True - assert result.metadata.get("skipped") is True - assert result.metadata.get("reason") == "syntax_error" - - -class TestSilentFailureDetectionFail: - """Code with silent failure patterns should fail.""" - - def test_bare_except_with_pass_fails(self, tmp_path: Path): - """Bare except: pass is flagged as ERROR.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky_operation() - except: - pass - """) - ) - - result = check(str(test_file)) - assert result.passed is False - assert result.metadata["violations_found"] == 1 - - violation = result.checks[0] - assert violation.name == "silent-failure" - assert violation.passed is False - assert violation.severity.value == "error" - assert violation.line == 3 - assert "except:" in violation.message - assert "pass" in violation.message - - def test_exception_with_pass_fails(self, tmp_path: Path): - """except Exception: pass is flagged as ERROR.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky_operation() - except Exception: - pass - """) - ) - - result = check(str(test_file)) - assert result.passed is False - assert result.metadata["violations_found"] == 1 - - violation = result.checks[0] - assert violation.name == "silent-failure" - assert "except Exception:" in violation.message - - def test_specific_exception_with_pass_fails(self, tmp_path: Path): - """except ValueError: pass is flagged as ERROR.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - int("not a number") - except ValueError: - pass - """) - ) - - result = check(str(test_file)) - assert result.passed is False - - def test_multiple_exceptions_with_pass_fails(self, tmp_path: Path): - """except (ValueError, TypeError): pass is flagged.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky_operation() - except (ValueError, TypeError): - pass - """) - ) - - result = check(str(test_file)) - assert result.passed is False - violation = result.checks[0] - assert "ValueError, TypeError" in violation.message - - def test_multiple_silent_failures_detected(self, tmp_path: Path): - """Multiple silent failures in one file are all detected.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - operation1() - except: - pass - - try: - operation2() - except Exception: - pass - - try: - operation3() - except ValueError: - pass - """) - ) - - result = check(str(test_file)) - assert result.passed is False - assert result.metadata["violations_found"] == 3 - assert len(result.checks) == 3 - - -class TestSilentFailureDetectionFixHints: - """Fix hints should be helpful and actionable.""" - - def test_bare_except_fix_hint(self, tmp_path: Path): - """Bare except should suggest replacing with except Exception: and adding logging.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky() - except: - pass - """) - ) - - result = check(str(test_file)) - violation = result.checks[0] - assert "except Exception:" in violation.fix_hint - assert "logging" in violation.fix_hint.lower() - - def test_specific_exception_fix_hint(self, tmp_path: Path): - """Specific exception should suggest adding logging.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky() - except ValueError: - pass - """) - ) - - result = check(str(test_file)) - violation = result.checks[0] - assert "logging" in violation.fix_hint.lower() - assert "comment" in violation.fix_hint.lower() - - -class TestSilentFailureDetectionEdgeCases: - """Edge cases and special scenarios.""" - - def test_nested_try_except(self, tmp_path: Path): - """Nested try/except blocks are both checked.""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - try: - inner_operation() - except: - pass - except: - pass - """) - ) - - result = check(str(test_file)) - assert result.passed is False - # Should detect both the inner and outer silent failures - assert result.metadata["violations_found"] == 2 - - def test_except_with_only_multiple_pass_statements(self, tmp_path: Path): - """Exception handler with only multiple pass statements (unusual but possible).""" - test_file = tmp_path / "test.py" - test_file.write_text( - textwrap.dedent("""\ - try: - risky() - except Exception: - pass - pass - """) - ) - - result = check(str(test_file)) - assert result.passed is False - - def test_file_read_error_skipped(self, tmp_path: Path): - """Non-existent file is skipped gracefully.""" - result = check(str(tmp_path / "nonexistent.py")) - assert result.passed is True - assert result.metadata.get("skipped") is True - assert result.metadata.get("reason") == "file_read_error" diff --git a/tests/test_version.py b/tests/test_version.py deleted file mode 100644 index 82da2f04..00000000 --- a/tests/test_version.py +++ /dev/null @@ -1,5 +0,0 @@ -from aipass import __version__ - - -def test_version(): - assert __version__ == "1.0.0"

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%0DST(?* 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%0Ai{}2M3_aQ~~&ah*krE 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%0A)*ug>e@2=@%rJ|!EqtJ_MjI&b*hBcBxKN) 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 xeKpX;b2>kOwpx~)1@uSuxv|?^6 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