From bc5d0a4269c168cf89d48d64576466c0e9cb3af0 Mon Sep 17 00:00:00 2001 From: Adrian Webb Date: Sat, 24 Oct 2026 16:21:31 -0400 Subject: [PATCH 1/3] docs: define installed composition owner contract (#617) --- CHANGELOG.md | 7 +++++++ README.md | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 README.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..8ca37add5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +## [Unreleased] + +### Added + +- Installed API root and container provider (#617). diff --git a/README.md b/README.md new file mode 100644 index 000000000..64f166ae9 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Cordis Api + + +## Task 3B: Installed API root and container provider + +Legacy src/api/support/server.ts remains this repository's capability. ApiApplication is the default native Cordis root, mounting selected HTTP, operation/worker, Identity and Admin class plugins. Its container provider is also a native class plugin in the host-worker context, with actual server/assets readiness. GET /health/ready is a bounded readiness endpoint; authenticated GET /v1/platform/status and /v1/platform/applications/{id} invoke the public Deployment worker client. Admin/OIDC and /identity routing terminate at the owned HTTPS edge. Local worker authority never arrives in ordinary user input. The API gets only the private worker socket directory, never Docker.sock. The package retains AGPL-3.0 licensing. + +Task 3B is authorized after the maintainer reviewed the isolated setup. Tracking: #617. Detailed integration plan: https://github.com/treeseed-ai/platform/blob/feature/713-task3b-initialization/docs/superpowers/plans/2026-10-24-task3b-installed-composition.md. Implementation evidence is recorded separately; these requirements are not a passing-test claim. + +Development: Bun 1.4.4, Node 24.19.0, TypeScript 5.9.3, native Cordis 4.0.0-rc.12. Run bun run verify (semantic class/source check, strict compiler, build and nonempty unit/integration/program smoke). Installed acceptance uses genuine exact package/OCI bytes, real identity/database/API/HTTPS and explicit isolated certificate trust. No global trust mutation or legacy service changes. All handwritten source, tools and tests are strict TypeScript classes. + +All capabilities that can be plugins, including container services, are native Cordis class plugins with typed swappable contracts. No parallel DI graph. Keep independent repository/public package boundaries, exact archive pins and original licenses. Migration PRs target cordis with Part of issue references. All issues remain open until authorized release; installer/Agent/generalized recovery are later tasks. From 165ac7c4c19dc690f96f072f0c79c52e357e1fb2 Mon Sep 17 00:00:00 2001 From: Adrian Webb Date: Sat, 24 Oct 2026 17:19:41 -0400 Subject: [PATCH 2/3] docs: split API container and server delivery for review (#617) --- CHANGELOG.md | 2 +- README.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ca37add5..ba16d488f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,4 +4,4 @@ ### Added -- Installed API root and container provider (#617). +- Add native API container provider and exact service definition (#617). diff --git a/README.md b/README.md index 64f166ae9..2d8f60587 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,5 @@ Task 3B is authorized after the maintainer reviewed the isolated setup. Tracking Development: Bun 1.4.4, Node 24.19.0, TypeScript 5.9.3, native Cordis 4.0.0-rc.12. Run bun run verify (semantic class/source check, strict compiler, build and nonempty unit/integration/program smoke). Installed acceptance uses genuine exact package/OCI bytes, real identity/database/API/HTTPS and explicit isolated certificate trust. No global trust mutation or legacy service changes. All handwritten source, tools and tests are strict TypeScript classes. All capabilities that can be plugins, including container services, are native Cordis class plugins with typed swappable contracts. No parallel DI graph. Keep independent repository/public package boundaries, exact archive pins and original licenses. Migration PRs target cordis with Part of issue references. All issues remain open until authorized release; installer/Agent/generalized recovery are later tasks. + +Delivery is split into two reviewable changes under #617: the native container provider/service definition baseline, then the API server root and authenticated installed interfaces. Each targets cordis and carries its own checks. The server follow-up consumes the first slice and the exact Identity, Admin and Deployment archives. This baseline does not claim an implemented server. From e4503518a4951a4fc1a5c70a530ccaa39e3d0792 Mon Sep 17 00:00:00 2001 From: Adrian Webb Date: Sat, 24 Oct 2026 17:20:18 -0400 Subject: [PATCH 3/3] feat: add native API container provider and exact service definition (#617) --- .github/workflows/verify.yml | 22 ++++++ bun.lock | 46 ++++++++++++ package.json | 139 +++++++++++++++++++++++++++++++++++ src/container.ts | 20 +++++ tests/container.test.ts | 11 +++ vendor/sdk.tgz | Bin 0 -> 40689 bytes 6 files changed, 238 insertions(+) create mode 100644 .github/workflows/verify.yml create mode 100644 bun.lock create mode 100644 package.json create mode 100644 src/container.ts create mode 100644 tests/container.test.ts create mode 100644 vendor/sdk.tgz diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml new file mode 100644 index 000000000..29c8ed260 --- /dev/null +++ b/.github/workflows/verify.yml @@ -0,0 +1,22 @@ +name: Cordis verification +on: + pull_request: + branches: [cordis] + push: + branches: ['feature/**', 'fix/**'] +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 + with: + bun-version: 1.4.4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 + with: + node-version: 24.19.0 + - run: bun install --frozen-lockfile + - run: bun run verify diff --git a/bun.lock b/bun.lock new file mode 100644 index 000000000..48c8a55a9 --- /dev/null +++ b/bun.lock @@ -0,0 +1,46 @@ +{ + "lockfileVersion": 2, + "configVersion": 1, + "workspaces": { + "": { + "name": "@treeseed-cordis/api", + "dependencies": { + "cordis": "4.0.0-rc.12", + }, + "devDependencies": { + "@treeseed-cordis/sdk": "file:vendor/sdk.tgz", + "@types/bun": "1.4.4", + "@types/node": "24.10.1", + "typescript": "5.9.3", + }, + "peerDependencies": { + "@treeseed-cordis/sdk": "0.0.0-cordis.4", + }, + }, + }, + "packages": { + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@treeseed-cordis/sdk": ["@treeseed-cordis/sdk@vendor/sdk.tgz", { "dependencies": { "cordis": "4.0.0-rc.12", "jsonc-parser": "3.3.1", "semver": "7.8.5", "zod": "4.6.7" } }, "sha512-2EoB8+NYfkLyjvEqRW/HhV8xCbokGCUJkqWfBid7kQp5/R2CowBj6EWnVv1wtKFZVoPI3qiLYMWWYAp1qxzPcA=="], + + "@types/bun": ["@types/bun@1.4.4", "", { "dependencies": { "bun-types": "1.4.4" } }, "sha512-9wkRDXUXK124pEnAutE6n/l18j+i9GC5IAHK8TmX/2nlySETmky0OU6yL5U8pW1AoKh++AN9auDCr647BfurjQ=="], + + "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], + + "bun-types": ["bun-types@1.4.4", "", { "dependencies": { "@types/node": "*", "undici-types": "*" } }, "sha512-yjrJh5oGX7mMPKGd19YXyIjmEuj4G4zNC30bs7PM9Az7NQ3ndF3j6hbeRdvJTRQEhJ/FYQwW0a2moweEi2hMxQ=="], + + "cordis": ["cordis@4.0.0-rc.12", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "cosmokit": "^1.8.1" }, "peerDependencies": { "@cordisjs/plugin-include": "^1.2.0", "@cordisjs/plugin-loader": "^1.0.0-rc.9" }, "optionalPeers": ["@cordisjs/plugin-include", "@cordisjs/plugin-loader"], "bin": "bin.js" }, "sha512-/ZtRivYxr5sffTULPewHuX5kEy5sWi8oADHSpnt0KjAd8uKRIj+kv4fh3lxtutIfVlgwJVFVXWOQp/gYa+kIOQ=="], + + "cosmokit": ["cosmokit@1.8.1", "", {}, "sha512-PDBv4l90xZKrUsZ0vtoycgZpO/j4iFsqJXrAxsyBDsnQRI7ZMJXIjgDJsKNjd5L8jnVnnlrDCdhkFbTncgCVjQ=="], + + "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], + + "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "zod": ["zod@4.6.7", "", {}, "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg=="], + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..9bed09268 --- /dev/null +++ b/package.json @@ -0,0 +1,139 @@ +{ + "name": "@treeseed-cordis/api", + "version": "0.0.0-cordis.1", + "private": true, + "type": "module", + "license": "AGPL-3.0-only", + "packageManager": "bun@1.4.4", + "engines": { + "node": ">=24.19.0" + }, + "exports": { + ".": { + "types": "./dist/src/container.d.ts", + "default": "./dist/src/container.js" + }, + "./container": { + "types": "./dist/src/container.d.ts", + "default": "./dist/src/container.js" + } + }, + "files": [ + "dist/src", + "README.md", + "LICENSE" + ], + "scripts": { + "check": "bun node_modules/@treeseed-cordis/sdk/dist/src/source-policy.js check", + "build": "bun node_modules/@treeseed-cordis/sdk/dist/src/source-policy.js build && bun dist/src/container.js --metadata", + "test:unit": "bun test ./tests --test-name-pattern '^unit:'", + "test:integration": "bun test ./tests --test-name-pattern '^integration:'", + "test:smoke": "bun test ./tests --test-name-pattern '^smoke:'", + "verify": "bun run check && bun run build && bun run test:unit && bun run test:integration && bun run test:smoke" + }, + "peerDependencies": { + "@treeseed-cordis/sdk": "0.0.0-cordis.4" + }, + "devDependencies": { + "@treeseed-cordis/sdk": "file:vendor/sdk.tgz", + "typescript": "5.9.3", + "@types/bun": "1.4.4", + "@types/node": "24.10.1" + }, + "dependencies": { + "cordis": "4.0.0-rc.12" + }, + "cordisCandidate": { + "sdk": { + "repository": "https://github.com/treeseed-ai/sdk.git", + "commit": "c03a2b0eab89786439eddea3cff8161e85676b3e", + "sha256": "d6d0f2f4379d2d95403a226d20899ad22a78a11ccdbb4106116ef0a925295d1b" + } + }, + "cordis": { + "id": "node-api", + "pluginId": "node-api", + "capability": "container.api", + "contractVersion": "0.3.0-cordis.1", + "target": "deployment", + "provide": [ + "container.api" + ], + "inject": [ + "deployment.engine", + "container.database", + "container.identity" + ] + }, + "cordisService": { + "role": "api", + "service": { + "command": [ + "--serve", + "--configuration", + "/run/secrets/api-config" + ], + "user": "installation-owner", + "workerSocket": true, + "volumes": [], + "secrets": [ + { + "source": "api-config", + "target": "/run/secrets/api-config" + } + ], + "portTarget": null + }, + "slots": { + "api-config": { + "kind": "json", + "value": { + "installationId": { + "$installationId": true + }, + "origin": { + "$origin": "" + }, + "issuer": { + "$origin": "/identity/realms/cordis" + }, + "identityInternalOrigin": "http://identity:8080", + "clientId": "cordis-admin", + "clientSecret": { + "$secret": "oidc-client" + }, + "databaseUrl": { + "$template": [ + "postgresql://cordis:", + { + "$secret": "database-password" + }, + "@database:5432/cordis" + ] + }, + "bootstrapSubject": { + "$secret": "bootstrap-subject" + }, + "workerSocket": "/run/cordis-host/worker.sock", + "assetDigest": { + "$assetDigest": true + } + } + } + }, + "readiness": { + "kind": "http-json", + "path": "/health/ready", + "expected": { + "ready": true, + "installationId": { + "$installationId": true + }, + "assetDigest": { + "$assetDigest": true + }, + "nativeComposition": true + } + } + } +} diff --git a/src/container.ts b/src/container.ts new file mode 100644 index 000000000..668f89e92 --- /dev/null +++ b/src/container.ts @@ -0,0 +1,20 @@ +import {Service} from 'cordis'; +import {readFileSync,writeFileSync} from 'node:fs'; +import {InstalledSchemas,InstalledDeclarations,InstalledTokens,PlatformSchemas,type ContainerEngine,type ReadyContainer,type ProviderDeclaration} from '@treeseed-cordis/sdk'; +import {Context} from '@treeseed-cordis/sdk/runtime'; +export class NodeApiContainerPlugin implements ReadyContainer { + static readonly declaration=InstalledDeclarations.service('node-api','container.api',['deployment.engine','container.database','container.identity']); + static readonly definition=InstalledSchemas.definition.parse({role:'api',service:{command:['--serve','--configuration','/run/secrets/api-config'],user:'installation-owner',workerSocket:true,volumes:[],secrets:[{source:'api-config',target:'/run/secrets/api-config'}],portTarget:null},slots:{'api-config':{kind:'json',value:{installationId:{$installationId:true},origin:{$origin:''},issuer:{$origin:'/identity/realms/cordis'},identityInternalOrigin:'http://identity:8080',clientId:'cordis-admin',clientSecret:{$secret:'oidc-client'},databaseUrl:{$template:['postgresql://cordis:',{$secret:'database-password'},'@database:5432/cordis']},bootstrapSubject:{$secret:'bootstrap-subject'},workerSocket:'/run/cordis-host/worker.sock',assetDigest:{$assetDigest:true}}}},readiness:{kind:'http-json',path:'/health/ready',expected:{ready:true,installationId:{$installationId:true},assetDigest:{$assetDigest:true},nativeComposition:true}}}); + static readonly provide=this.declaration.provide;static readonly inject=this.declaration.inject;static readonly Config=PlatformSchemas.empty; + private readonly engine:ContainerEngine; + constructor(private readonly context:Context){this.engine=InstalledTokens.engine.parse(Reflect.get(context,InstalledTokens.engine.id));} + async [Service.init]():Promise{await this.engine.start('api',NodeApiContainerPlugin.definition);if(!await this.ready())throw new Error('API readiness failed');this.context.provide(InstalledTokens.api.id,this);} + identity():Readonly<{installationId:string;composition:string}>{return this.engine.identity();} + ready():Promise{return this.engine.ready('api');} +} +export {NodeApiContainerPlugin as Provider}; +export class ApiContainerBuild { + static metadata():ProviderDeclaration{return NodeApiContainerPlugin.declaration;} + static run():void{if(!import.meta.main)return;if(process.argv[2]==='--metadata'){const metadata=JSON.parse(readFileSync('package.json','utf8')) as Record;metadata.cordis=this.metadata();metadata.cordisService=NodeApiContainerPlugin.definition;writeFileSync('package.json',JSON.stringify(metadata,null,2)+'\n');}else if(process.argv[2]==='--describe')process.stdout.write(JSON.stringify(this.metadata())+'\n');else{process.stderr.write('Unsupported API container program invocation.\n');process.exitCode=2;}} +} +ApiContainerBuild.run(); diff --git a/tests/container.test.ts b/tests/container.test.ts new file mode 100644 index 000000000..267dfa424 --- /dev/null +++ b/tests/container.test.ts @@ -0,0 +1,11 @@ +import {test,expect} from 'bun:test'; +import {spawnSync} from 'node:child_process'; +import {readFileSync} from 'node:fs'; +import {ApiContainerBuild,NodeApiContainerPlugin} from '../src/container.js'; +import {InstalledSchemas} from '@treeseed-cordis/sdk'; +class ApiContainerTests { + program():void{const result=spawnSync('node',['dist/src/container.js','--describe'],{encoding:'utf8'});expect(result.status).toBe(0);expect(result.stderr).toBe('');expect(JSON.parse(result.stdout).capability).toBe('container.api');} + definition():void{const definition=InstalledSchemas.definition.parse(NodeApiContainerPlugin.definition);expect(definition.service.workerSocket).toBe(true);expect(definition.service.command).toEqual(['--serve','--configuration','/run/secrets/api-config']);expect(definition.service.environment).toBeUndefined();expect(NodeApiContainerPlugin.inject).toEqual(['deployment.engine','container.database','container.identity']);} + metadata():void{const metadata=JSON.parse(readFileSync('package.json','utf8'));expect(metadata.cordis).toEqual(ApiContainerBuild.metadata());expect(metadata.cordisService).toEqual(NodeApiContainerPlugin.definition);} +} +const suite=new ApiContainerTests();test('smoke: built API container program declares native provider',suite.program.bind(suite));test('unit: API container declares bounded configuration and dependencies',suite.definition.bind(suite));test('integration: package projects actual container class definition',suite.metadata.bind(suite)); diff --git a/vendor/sdk.tgz b/vendor/sdk.tgz new file mode 100644 index 0000000000000000000000000000000000000000..ab562d4f94a619604f2f17234669c8ef489ebe82 GIT binary patch literal 40689 zcmcG!L#!}d5McRi+qP}nwr$(CZQHhO+qV6_=l-WBoy=;wH(jf&O{>nRsS`mLDzhO%DPxok(NpKs+A<(vR%82Xsd5uq6K6Pkf=s0Y(UY7 z+H=l5?j80Xc_(5g03?ArN>oY7ibobnnh0HDV&gZF5n|k4_CXr{@u;ZJ^Xvn;oNTS;U0d_A%5NAKGWOXJ0{QJx8<&e;4=sNXNOH}Jjf3;2Qyn?&-W0ZYEA zB*)a!ZwEZR+eh>91&xjz)9Lb`B>P0My6#({AeTN_aYcKE{Ly0RWpinGEuXGm@$ZKT z=d=;i^cH;ccn#lV{w)8RA^r|WG>9yO_B`t5UeAU%jr;O|7RUcBEM!pk=_!!*%JnvHLEKEDP{E5ba}#cq-rj1Mg~k{(q{ z`rNsFaX8w<^Jq2$@=^2jZ(j{zF5yA{AN2wH1Wg3`6K2J33YTWLcsCaED94rvvttXk zC}PKt3BIwrn?&E-m{0ERo_Yx^VhpJyF-ShAcK`PNVf(Vhmms~q{l7Z@c>P~nzOvfe z_xou4eh;Fb-*^*rn1bVfYjXbajVVWKHhg5uz1{2km}vRt?$f;(XVjtWkiLht-ap_! z-J<3jn(y%rV1Ke3O5Ykj-oS4TEYg$e_=CgeiuUQOy@<1Wqs)!~J>LA^nB4yW@`mqS z>bUa3|ID2k4X}M__X*Db@}9o;G4J;4bN;x$+}*!F{Bi&A=F!t7zwdaU-NL)S2K65# zAjk(FPib^Y6d#;DvcUNH{ZM%RE*;CCnRn5T4Ir^OA)B5l3ciR9+`9((D+>??!XVoo z0%6^(jlUY4IrYJoADA*`n++gq&CeaN4h&I6@WmI2pp6c~o-d7%!kZOQd?K2ipAgqX z`k(zZfS;FXLd=Cdya4@kBjrI2*8*uh@=T+H2M>nB;eQfd8u{h-U^nLEID3!B?p*wG z2R$>vBwzZcIRX!J^}r5+ycnV63+G??>~s?gi`kUAgED+mA^Vcop^l z`H*ANFb~5kh754QNz}bXC7neQQ!1|KjfGsEqVI0`NZy9n*|M|5i zi!6Jhff5^NHpBe0NCBW0B7;m~Zpn5DcF4?~PyWZgMc~wK0X4tGA6QCDCY>+}R0al` zuDEvJ<2&a40K$!TZ12kzR_o|z`bGQjX_HA%53Qhr^ZdKSd`^q#8E+PC`j+M(>~*-w zG)x^n$TBtLm=VgrT@1&pkp%t1xwnNsHK(Bug% zJuU~&S;tA|3@^V1ac0ou_l^OBe$o>1+Vh13m&BRlq(X09&@@6xf(Q6X>JTA>mE_!< zC1QNh1yF?nTNlg)3n)YOf+-GLuBk|V+y!nA>>0kn!ba>fH=W`v+5Ko!Gv#2@H*KbT zkeV&=k2$ViK?*6<_(JoS@ag@2(4XHI6Nb(W?Axo8ePFZMl<1f0x1(M&3^5wyW3BNa7(WSFRV!QSJF5q3^hV`2%*jzK;;dk!H zU3yH-5N5$%4tYRfLX6U#XYz>ICC7!^1nB~$9I!Eg@bdoK|L^^87jUsg8YE*X z_Q(7EZVy|Cb<0hk$J(PC_z9~={d6dkl!mtbq5KNdKHT0=UN9$4|L)v}MT4jt^Qv&yASgdtg(dSG zU3+&f;tR$a3mo}}Tj;w&8^-X-BkcEeG_gX6IkHFa4Eu}-Pxc`3z|TNgqDV4?Whh>= z&6bm$WCa48HAjEhV@%GB4m%WbLJl1f%5)wt-xXkDFL5+9?v#NkTPGU)>) zkyz?k?=-h4hH_6q5h1corGw;$AKfEQ`TNEoV0My?mJ<^$n$0gy&j5XFp)NwdlFLnC zDcOFk3wttQFb-VME~p$2D)}M11&%rp3^c(TQMBw(hO_DufFE2d5P=lK`T*OtQnRdx z2Iy3Q;-KUL(PK&z=~699B<`JqU52yM+OqH?i>Z(Iz~)=QR4aFf4aFo!P{$+wV3aoLv13j>+OvDA8(6$N8HX53}CseNa581dZkax?nC(}5u zvYsCX+7rm79+K-xT16sIJNzbId>h6*@E8|1y_sVnUTP7xr}JW^YGS5k#orl=Mj1!N@&+A# zU9%4Pr^{~#yjiYkO%K45AoPP{qHxGI0Z5+lXGl&g1r&`v3FHTyxQB#K8I0=!??UY| zcLbMFOkRQzsArgXW!1=NkPR?G=z>~{CV+RXe|BKV;MNgV7%v!_sH;g1RtMO)9$rEs z@i3}QM~yyzhe2dOUtY-NfHw>t8I`AK+BqmZ2If6vW{?NY(L+IVl zXcIT*7rGGRuoaRI8=gHJ1X?_$iJnW-laWsqA0^@8A}h!twm04%WUGsc#^S})-|-u^ ziEf6*gI7gy@aRe`bw{U?5y4_&ItllL#Op&K0yag6t6K%f{-4SZBt+4nQhc|d-{B1; z9(G8_Z{W(b3=jDO!=gQ`y8x&I#z*In5y|D!Dtt#iM6%yN*QgBRFpa@V$D%xeuW-Na zkTmx(j#+-^pe$c#ycRJig1vydH|z`Uj+%=yKW)+v5L!lV)T0?atWQQ-lG3B-ZWONC6gP7d< zM>}P!g~hGsG;#sD5N>#%NOa5f3$ZqsH+S!YTQ=m*HF*mn2wCM5% zGUJSH2-v}kIQn%C#2w7}h4~U@&Nc0Wm?38YWJg3au7HcdIss}OTkI*BRL{uzLNJSi z$oLzmjnE{L3DjcFC$|G6Enc<{q=g)z!5*L$^`veY@{y$0R#-+O=yjJkfsNs^$?VdF zG1>40#|KE+LX`ub+=vc?3H&)J$y}hCI3KM6-2>y~oB)y3If$`S=a>zLA5@8q&CUmK z5~U){Bicb<;##1919~ya&pqyv-34F3{beF_-pNUFQk-|TUKHSP@&xt&Wi;Gd+@sip ziwFwr`2f-@HOT$CGN|btJSnMb&&6)qFh3^?d~(+Ed-nj(G;3*j0Gg_B`#};&6aW0$fr3Hv{+egDKnvPF~5gq^q{~)db*x;uV z8gFAC^$Ty_C$;KkEFo)n49RoJ;M{=!MQ}Epd_Fb z)`vfPKC!KooHd8 zQcZGBM^s9;_@rbdE`Wof1r?zbAw-d*zR@gfTnffGqo1yXQOme8PPh487}si$p~K3f zC3o=(+Ntwu8zF9HxIwIbh{5c65H=9XFgZ^r4GRA7*J&amqv)7h5|i?808I$^0Legw z=uz2)Z|lG{=&t#I=HlB`e#`)t1(%7LO|{2(aC& zZa2YCb*Fv{PeL$#C?An|z+Z{}T)CTz+kRgpeGe6Ut`I1paGnjw3pDT-reqVQ|Dq8i z1lR&cjm^e~ut!8yX{(=TL0yuRTYiLLwbFsBgS%m+~gCDLMsQemXAb zK8;#*M*`v?u@*`wf*(Jrz59f9xK*&2fRoW7#Go0Xjjk-1xgQcmq7z###P=pVjYqs(QiX5+ms1@LJ1&EE59rBGs2rY(^4;_}t5ex?^ z!iaO;H?)7XnY<)*=tjF)9{@Y|sDO=3 zY9j(NodTh@u?1RlN|2YRI}($Xa+0YSvq5iIAyO2^R-s5vb<5{P#e9XM0}!5t>JDmP6Th~{LJvcf*>(rC^Fv%$jQ9?Y{4UtdMMk2A+X;3VF4G- zsx=UOQykz;M1=Mc4Hyhw1KTpwLr5kyMk(?Bul;LKS&Wb3_I#h1x2Q#8h3ljG7DdP1?Y=l-W&aXPe4hTT6GQ3_7w6_B*guIb5_*`#tcXpi%UJ9~c&+_&*q)z| zn-hZV3xpeZIo!?S%V|5#Z)DOZYzjTGXdKu~ z1{c8=#Kgr)qWC!=YS#cn25Z6z%@qG^@(U1axUm1;VDmr$xCI&Gb^iSMz4P@O-AvRB z3j&5i@K?|xJCeJ%y#u#mNPP7q*Vl#fK^Pik2%#2-qBGD4E@|B-3>=TnT%VFwq*~fd*$D z{UqgNrV$?@7SYD<@*_Zr%&mn;IGPLB0fos_rW0uwKP6S!KYBt?v7R6a6|RV*Xk7K# zXH`d9ZXXcNaKHoESsZn)Wv80vaSln?Fr5-Z2dU`1=pe#CYO90jHjy`o8DuzD59JbdV4kSzV^hh~uu1WfMG_0A0!J zKn9={$S!=vMrszt(yu6)O&|(xz9^^x9H=HSW4xHgOs8VQWF#_u+e883dU01MHG-5% zSezqw5=qiLAb#}T4443u2QQ)?=`vb|P^u6 zn^mCD_W_^4g2UI4<^G~EEYG`1-%E#14$;+*Py8_$Q%&;%xsHMqaf#aqkbI57Nr`b0 zVD<)hu!fJo?BxJ=^YjD&ypcIeD1Q8g00NS?S7iT7^E*+iIFddgpcblHVv>}T>K|u@ zOPOhKe3T7;vZr-DAl`9=)?Eq@2R&g^8EbIx;ON_Pun zG1Xf*K@s%bO-qrILk>tI4-+v|DqICfdek~J+@(hD+xA(44E|8UU1aI0fzBHT;jKjaX!Jpp8Ibew74?7=wdv>ngzk|Kaxn2sG z``gwVa88gmYy9%o!;Ni>f9v zQdIP~Sa%YN&`q{P>jz@QQQ5dGGdCR!W{M_)HbwIj=>ru4dp>hoeCUNMoGmIJTLE^| z&Ao`gTX#G}%mhz1W}8^g1ZA)_Gbje4RB=^(CQqLDf{!8m3+JFivf+HAE-(3qInxN}L*&QiMo&Y0c#4=PFv{O+JS2Vd zK5m__X$&$NgK)|b0-wg_FkT;>kw0^|TYvbW2jV5{exHohGmp{50XPLKO7g3ub-C^X z{g3J@DPi2@?)W$Ncd+7%dq0btcRye7V&20KH-ncJ_V;_2mp{Gtb49tix&-G5|3m>_ zxQBrO+zHEV1JVQAb0xM_ye}N=&F`Eh*s*}k(A|LOq61arL*xwdXC^rbpGQ*75%42@ zKp*f+9y8{t0+|M?n3!Q5^N`$;pCE=#yjEP4xq$xgk6L?Cb_++8fkgh=+P;087_>uQ z8>bmlExOQ!P_T9KSAIni;X=yF8xhb9PiFjEuI)ve{g2K#uu)|jk*Q^*= zo?79Z?c`w37Hn+ip|+c*Wwc$uT|#+RDYXTcfT;Dl0;%F1#1L;&v%>mCQTBNf#c|d z8Eq9UdRYL7+mq?W58-njNIP#B#y?0v-ldihu{yB1B@EQgwp_T`@^O})vLRT-mYh97 z2mwF47h<*~7@_Erx6eGc!(}oI{#;mUTAz-U?if)O%~G@=h_{k(r;cE$bQt8r_(XpJ zL_YTl?KQBcSsJ1hWnU+3{7W=;I#_$#hEpa{KEo+WV$lvBY8ExcJ9-7dX8pW~+~~}S z48qY7%{l)%1=_Nqg%B@+*FIqgs?$d*qOR4B2WCke z#&>h@M%0fR0D@3AJV)H5TVV;k(;b>aoXsep0f-_8=0S+f?G9vc02cO`;9%&n$Qv@r zLCgfp`9+D%Ky(@*z__!V_Le2|qFnuqQQaP*#4XI5 zw7o~+mb^h4ngrPOheuhKB=}9C#q@?oj7A3FM|K2{;5;g5Q|6(_|845`umRBwyM`Rqlo%=Yhm>WVU%@_z|DxPoIxi927&F0Sle% z!|s%%Sil1GQX$>RxrfNH zxM?y^cZrT!1R5DS5^rPjoXH*jnCIx`(UG{;6&Q-1zcdIo`|Mkn4}wENXeFNuRQdQE zg%KC&VCI5nd<{V2#~euXpwGl;8;>E|ReeRud77+2cY{$N2xR{Jgfj3+nB~BfMPY@CS8X28clNce-KTDgD zYori$fd-d9NrVu{UjBig9Bp}LULx5EVF1(v&1{DdHYkNKQ3Ef(zvrQ2~_j&tO@aaTyvc2xj6kh%ZEu zN53p|LdfQWr=kQP1)%_!c^1@07m}q3{A}~_@|(CR6GNe29^)d$t<+_xX?1?FV+Cr- z&?XcwbT?-IB-a6knUU@MlO zCtzS41Nu|}g+zfZ7j%PKJnsxj*++^ja2}rr3!OXq>z>;uS|JPtx(Ji^biw4wZp?Tg zKmzRM1nXqVlrZ(IKuTlmTjMA(-yuU*Vq=us3nY<6SOtqnNV||MG(EI6rSUA{f-6KK zF!KQy_;LCXv#}~z41n!00;4kIGBlz2TCufkS#aEEH6f7cTe47TDX&|d-Rs$1}OHrrz z$R2ReSXvNMijY*n;L~Ktb-QV?D4wlH2#)_GJ6VR~7Gc+q(~!|CSWhIGnX0mB!G&qm zgGX5cqHRt9&C+p%0FkhjTn3}m%vuUkB^%*q`hsFq5y5@LR}Cd4>aMCu0}oj;0=xdv zVCb#$7KOAKL}@qy0zEC6WIs1F(^C#O3mP##=-hBy*IqEk@B zY#Fr0$S(ZIjmzkIs@2#mXlJ%kg@s4C43xivpG5p$fj7Z#M4HV;xCjf05PVR5#xcwy zlu1^#+t5%7WtJSgW&-u2$(h??%ZuD$anVNm5SKQFMycBtp@;!WK2_4|LE(fk26Aa`lxThuyBydYgY)5uAC!?-xfe`T!lqMT zVEF=z%RPWD;Jc#Pv;>OoWMZ(3GlGP{Dii!Xz;{Y{F!M(9MM`(Sb9=g={(asX1P}Bg z+{zA+o-o5c9XdqWM?eIuP%iKc*y=Xso7;QTJI3t0$o0NUj6zpZ^zZ=_he;r{%s&!3 zv&Bm=bL_yNVi&=k<)L@!~ikqS|?HxEKe37CU+mossR}oOmcT>~M)C%0JiLOxS7I8eJBT8DDRVmJp z@l8ZQ1(N&$^szRtMC=raX#p69m;geqBB1Gh5APIO5oJ<@1GWl*N6iQ@K<BW41aMZke@eKlPcaJ&%+!@CUPY+{07K5IqGHyT{!#P{g{Xzr655h6E4~xEZ&73Gm zfVuFJ;Ou!s#Sy~{4?O}dnsEY13BEG|!%G7NGZ2_d-bIF$?(F$!-i$$|IZZi!10)+O zMt)VD&XnDGx<-wHD9akzL#63pnubwwoq7nC1(nNA)M)`k=tm*;ebi6X zaKY^T^8251xQg~tX(4s^=`m@X97Q2g{z2pGPnze3vzu5p!W(ka3XYsG-9yCx^E5Q7 zqYSXAw>Po?1Ef3eP5xYR@(si2b+jkgiJ&83<&&{DUE}dvSb0X%QT}cB9{zf_`rv=R zyW4sF*sr7gb06iBY4(X;;+^%?28lfHEPXavW1RfdmIhHhX%I_KO8CL5Q$R-T1B+h>tkpQtXxnrrJNx+h;jJ zNGY>Nz$(4Qoc9C6O z54GyzN^)&9$}^&cT#b}&K4@{+{e9XM+95BjvPRz!1vK6IXvXA%r3r^B{yw3K!KZzSFBbkk9l%m(`$E)ZU+ZC#2kyraW z1oQ#@ZBHdP{=iLY=<(adZ~EK+_<6lnPw+l{y-vQZ4OZtM-M8ZpVaKy76Ot)B-4Yc* zlp!S_2AdwxO-IlWx`UOzRHy6(ip6E5G%f#Pg=(8gcI(CORnSOX|6JtpKcvcUUAtZ* zeR+OenyGTTStkUadOFZeUscs1NOO#5;y$?yX&g>^mE(i${_0*;?Ow8&2PrJV3vubb zX8#(~@YG{rU{aZbc<8}CxgOOQelI~{I>hD|~Ay}wCGM)jiPbXnI_3ZgZ8BEzdYOusfn180EJe|z5LXk*QOsyI2XB)ZED`CfO(C^j zm}yK+auv>9qBdk-p-fI%tI&p%%9iqEe$%a=xlHAPKAjVqWTy6(DxKH;Se{MJ+18*8 zwLYQ-Bhr+#bjgQIWx5=LyUi#RoOIcjV>|EnE7qVWq;{LOil27xDB5Q0)-G<*qO1?w zz3gJIr}^31a=c8@g)Ute{8*(NG&9wxM%ktww<6VS=AeTnZU!`pnEq@b!Si23YVREB zIj()yL1(*e0PA(C^m~u`c)Ga>k~%SI$Z@)ZNvURA|5! zNLFsy1X!5*d5Hhv)`o}wg%!IUWYcIr^oMVcfc<{AZ)?{dWX2B{4ox4h)$v>;Z!e@2 zTwotVY&32&vFP5)hYvR%?dnsD^wV|QsRU8+Eq+s7mOOj)0q6a@B2!yvQT~ByGpZbH zDZOS|8F-92Z@NsO3s=MZa5WOORidRKF~55~{zTJ#5&Vy)VP-wZ`Q z9Lo*6h+sW1l@4bHEDJ6yc!GwhCJ*5Ag3u!`3$d?O$Bv6W67N&!q1^-{3(|qLn?Ae8 zvZ36iPbsyCz4SVoU5@oXTc8I2&(yIIlNGPj^0@BigrqMHd3$np_T7Z}A=A+#Q`52$ z_2z0PW!X;c!wi0t1b&91?)1!-9Rl;Sw{>C_nk)e20PsRvq<<0g(z|HLYVp#l2k^0` zj7^C!BE_P?%Mry)<6=Ulx3J%8oIKGg>qvE{TTZ65Y%wA`ct)NlfV)1IvU_iZmb)kG)6U~fGwn|~fpI}0*aDu=P z`c@UBC3CMxogX|vTF}061#?aA-JT*TV|B2Ek(crmn042hbXod=NwT{6EWzTd43n=q zOt$*>e+hjKC0XSh*n5EfLH&Jg-*U&<1k0T++TNd0=!BF%irf$Oq2lUV4<&WSBB!;4 zgR=*JOqbeTYx@`W!k#@%emh~!wg}=Akk2)_6+EGJ>dYkMVoQZA0g?J+Vj8Y-BCaPf zk(rN}!F6aYVb)SEmzO+JTKY&~2@iWYJw{G>q7Ip-Bc0&DEyCLD zqU6&m#V9p=Ea@4xctb0}#0>v=(%YTL$ek}|_+|_Q(dhD8nS52MxW$8`p81+$q+6~d zbQb@>JZga19r=5Aj$PHa%Wp^Sxf+SrJ@(STD+CTalPm|$t-6Nk| zV~<^D(-rdNs?p_W#J3oTI(CmI>6A8_S?AZ*#@G1Ne;-dBfoI%bmqN{2G}Z>N3RZ;7 z%E&%4u}m$Uh{VqUs}b5}+hRju_JpPo!ePZ%3DrCI1$o>#o_5}Z%|~tbe1frUb(1~Q z>K2zy4ZJ&YC%v$?v3Eid-33R$q&u5lhbJWhys==?o-29Rb?J^9fBsX!TN$)oW47=Y zFwBkIdD_iZyCBG=y)~VVu>mFzg?=p`U^9%D2D8~OFL<)ThGVU{Z*fIQr7CmLK=M>W za#furLK9K}6|mU8mGJuyy=Ll-eqEUoxENE;fcg=@fjWWqNfo!g_DxfC+Q@r1Zn@0^ z_mkpiMc-FJ+@lHoc3VPE^}J37EL5dgfGo7I#6?Nbrav*909Y|m;{|M(n8>}QjmJ}L zn6%ryYEJZ*@aDK_w^{76AiHkR)UjS*-kJ>?D$g78hWFs$y1kjzjDbk)nkwY_n&`9k zxo2N!IdRm63tX}4ihiyXD+);0W~XESUTx7tsz2B=eK9gRIAnT?1IPB_Yks zUm7Ng{&B(#Q%xV4Ga_8m#Kejpr=%{n?XT^fuo9)eZer^OPN;3-+%|Ew1#7dJd)t7Z zxQ*Cy7_e!*{A1a$tj-FK-6ZP&gzN#s9KYaVGR<$97rM-dU4msWn~<|iEPVVVtj|x_A56zl#D@bXLLa;3m4=40ZqX*c8jqd+ntj^hC@8E` zyU1a@ja=I_a;etYWFB2JFD&MImCoIw;MvSOv!|TB_sD9`0Ts{Me`WF4w)9(H?m4BY zu(G#ias?S|PLhFk$}&B7ewuqWAEyuHJVl6)9UPqt zXlEaIJ3>tKb#5ihr#I?D@558+r6tu}$rlCU~$LFQI-CoZ=#1MW9)U4vIOSzGnRI`5ihnN6y{omE0lWPd5sv^ z_jskU@>$Ftvo@cG=Dfd(2J@%Y{=P4_({X&D#M9qw6nl%x6MS;pPw~=ukQ#Bh&@lb@ z?ZP0{gdr`b+3)48X&T)=O zF(5Wv}P-3H%XCam=CnkZ_%!~uqTQDz~VaIXGGd(jVmE1U)XC3qi><1{c zv`RWyvjhXl!jQ5*PkA`#;NgEh7`*H4{Z2T35sXVc+!%Cm>nI!ciQZ&CwMrH)Zw0t5 zB|23iXPHVBY*nh-AY+xLxVcoVBQ`2s?{}HXU}{L2DNssVwFJhfnew+5kQxPBxd$QT zv>MZH3_!jqoLrXzJ^|x2#iNF!pr5OvlUQAa?BeT0xyxexq^~%b;yXlB(=)HqEz>$~^6KegLQSrv8jGvSiz_){RVz0a=~8&wYUk3` zEN8#AQoR_Kb9KFdVPK54kWoFbbK9}@pYcR=aow|_MZx01tiB&#NjIHZ`?PFRr=BS- zN{g~=zPbix%!?eoMM}O!hkX@)fta~Ew!$i+wSixq^1?zgWUnT&On0HIcQ~J5RUjCS z0(q&bY5@DnZ1eQjg1l2YDO(RMy|z-LVSSO-l@~((m`(I}T{L`M%3@m!B&*?w9T$Kb zOe~-$F2HoVH8(-*U;lER4mMVxVW27Jr~B(GTIVaO=PL^LliU=(6GkD$R8Ml=8#_{+ zFuZdx`Kjw~%FHx+UJ4^Ozq5i#Ok2Vki!GiGte1PQo4dW6GOnB0{4+waTlHMGJ-*Be zFJ5<^q{nI3S~D{JoJ#GK+|CXwg%%gwW zeYdG*+RI>~*gAP)o{76kgj}V=6+;(Z zuc_bP$XkIk=_LS5{>q>@=t+lZ$XXarvTsA%Zo?aIb7->m%H>~?S1+7dD_nS$850xR zkxt{Z{icfzU3fOEs=Dwd>uxR0t@O;QF{RDo!;ag$$XPtqepvaIRpE9{U9y$iR^hg; zd^@Xfd#5hZ+8tY=7KU@8*KhHS(*&?XkyemXCui7TQlb}T$`ER*-X&;FKtL-XxFX0v zFC>pBK;b8tH8J=}jfPKQzHbfLL(t`2ifJ3$XU6*376&r`;~fv!6O=X$mS2^XTB+wj zR2A_G(zvP@LF@-K^aVjYqIN4go2>G4#S>}xQ0*6HBba1>`r8gl2{b&(xdG|Fzu61l zsUCjw=T3lsT^$^pyIwEf)()q)II;$R7#ki|DVYY)k}2jib0*aQY~fkPP$?X;XGF+Y zd*Q1|QfhJ))7hz+URA~rR{E}lZ&T33lF=kk|9XrbRs?JP!{I1T)&+$z`@L~x@$`l> zK^31!Cu+~P9k$t_H_zO`2^mJ8bCTF$4aBn{I8a<)(OkiKbS(ufj za!XSYU>P$nP~=G@udw>?9M;=hrP!E3_Z(423?>yzSOKA@r8p@Sln9N}g{I? z3T6RcKj0+UPI7u?*=Y|-uo`vP0wAR;sgl`7z<_c3`kM{>aJlor$P4d&e~X_1uSV$~ zSR}G&lhfCT$mDWr5hH406HUfad**0LzX&Ks(Ob8Obv3-X7S>E1ZW>C{ESjN7JX>Q` zNh440=!F-{zl~T>_m51kMYDaZ3SkrMqWp*Odq1vn1>T|-yEa`F@N?#@_@iXj@%-+w zCIY&*FNtvMNeZY@Yaw`cXIJ6B0wfi~KzHnZ-#a1JhJs!Cuv8V5fO&>-%^fwTBWyRa z$&z{suGyeBLEL|OwKi2_$8kMVTEI@F_(?#9_kyThc;*%t_-p-$6!nQEr?{QAZ=^cbZi zSLJmy1$9)KbyP`pa3)Bqe{Cz=dXHA|!1mzPiI&giA;{9+%{zF+0#BKM(xkrDyQ0>| zvev1Zp_}4bTb^F24ey$iGOvdVP^};6oV$k@sj|? zj5ntiYEA#=(r|9aa#T8E$ganWWS7fs&C4H4{%2sX#1qSioevm`W6m;fd}|-N^z^qk zHev84btgTOs?iGj9=QP9%3r0a?%INC*#eNf&y)kgkPE!;0q*~z+-8IqoGk@Rxb-evzZtX;M(Hscv(YbfMm zCd^nj>m4(822#&L`VNzAxt^jEX?lKZ*|7hFI8BQR0V7GZuMcpcTEq2O)m$-d0NN#P zrWhVk=XwI{El`gSpm*n-eh@w!^PV%wgeX#-(t-y_bS3z$tqoEs<4O7N+uz^a|DS<*`|AXXsung| zca>p1?O_TVnUF)??d4P2{caP0v?P(2dF*I_g<5GPJ9$m}L#kBr#`WQRRRV;hVF1~K z8n;8W-_dSBCR>8jGtmZZh$ABmbkT50wPME8C-CgR_}hcAZ7C4>d8aRGFc?=?Yuz5m zleO~C0Ih#NF41}bESs9Fg%mcN<&9c~Lb(+*T=G#Cu{~;5N1m$MinB)Pvl}7@S}K0d zwZKN$Sq9mt0%H*+*WQb!GQuRQBW*SB&Csdt5m(k-y6Q0xO?$uZj<_|jVhV`EeOn`u zm~$7KGhwydmT2&XxbKE|x#r4FLkxx`9%mC5GrMSt2iOtj#CexH|M*Wut-X=%EeS&! zwkF}$HtpFq&kjvW37p?_WD@uRIKVOws)R!8%IU; zG0SYg?%Ic$?}@Z^w+8#ujEaGhacic6oxVG4rjngu zI4x5p%SEfH8LIOiO^-CK@xBVC#tootSPV_s49#q!eOC-^+yS$7eO0P>D{6EL@+doF zrX^FK59spJr)DjqNj3AthDlQ69ECA-rh-|D_?DKZCze__Bd5PM zKbku9>-rN&bl+7^hdTAq%%P72o&Bmzd%D_V+Ke}~;gD3TNDRtC^v~AryjkR3*G+7!n{#rB&RW;NabwdTSA=Xj?<#SjilJ6w5bEUE+ zW)mpo)3pTip+wMxsbFhVf|P#aw))K*YPavG-T#X!*VJzM_M>;`tw+iFGK+R)0^hW@ zjP{{B_BSc~MYyERXz}$@%?ny~(PUc+yPOn~vh7B7@+kGBlOo?({({y!cD(ZaL+y^C zm*@G+)1J|u8zstRGm9>zw|k8|x0A5%ak(z9J-Sf(8?5KIN@snpH8qPn2zu#bbZXSK zjb}LR>P`3*o6uPitS`n==26OK$c`4SnMH@%5JFQcnJu&ZzrvYJ}BL#d8tU>U!MU zWs?sd*uKAF`TdLM_Amc`=r{Yn66OVb{!bQw&YBB8|F0dL>Hha8{C}_TXg#@4aW;^6 zDzj*2Q*&;zU@DSuN?b9{`b84K2U#Q^bdgN(`9HB-D<9;MESX@9n6aM!y^zF3t^9jJ zHl!**LlvTCL`(zPIo00N)Wq>v1u1I7&{zt*v{nTjwBJZ@+!{IEvYa6M*xGhSJuU8)jEz3KL$echY;xSLo6YuraQ02n znFZmNv2EM7-9g8;jX$=Nj-7OD+qP}f5{a zp6R06U!il0SS2;VT(ZHP@HXKjh}KePClXn$7s6{95!?uKStaABhJ-Fe-3`!J;GMc* z5?tQEfwze!x86ZEi9llKqrO+pw(}ysP=T~IW&7ZIC1_ocUwE2Ptz!*Z*i}+i$+U|p zls79>7brC8h#^#aldHX$y})d8r7eV#ZwShS5tY}=r^2hB5ipFR>EopN`aAJz?Z9e9 z9-58?`$q+i^+$7#(5M2jwk5h^S!7|;)BE|s;a1@R@YZRv=r_=fW|b|X(sZ5UH=wFA zPX}@i{@!21O(1d=6)2YK>=7NVjuT?=M{P8~ zmkZpczX(u@qHY_;M>d2KPU_)EW5Pu78;hRJ*9#&P3w+;5JxL7~09|cP6Su~&Zwz^n zg4#hAt*$kfT#k*Fz7=H(m6KqrC*PZ9}2bMPq$+$`$(2GtrVAD`y7GM)HG z17=_r->qTbx+)V{8{cu))j6PQ+<=RChMF%n-VUZD(nzyPdB1JQR-InFQy^zFV*(DN z)d+l0!yD=0ZFEha1tr8J!g@Mi=J05zNP|H>5wApiW^4<5^co}iEZS1IXVL{&`aUh{^UUEmkizN)FyAzqSsto)WBM#$Wu{-Xgi{62t(O^6?1tPZpdgfk0RHF6Axe3}z z&pN)Pu|On+KcrTPO{k5!t67xoV?)QTJ3NHA1^J>c0CCjLN4Z^nQxFAD(zC|W*XGHB z2TuZ?7x-&Fnzxe<|H_`!J1du?|RZop8HLK zsW6d-7Ron>0e2+&A{v7#)VOoP7tTh#`2zyWKLoIJPeTvs6KO~~(B4-Wy6+|*KcV;x&OF(y{x+Qyrc!5y<%aWxybis9dKG0IQ(W^6& zN+{BDD*n|eWa5;7;kw8+L%hoRW9jyD`}~}n8fOKqDz!k!sqWdyn zu1zDjw4c(?Covao$kST}|F-JOioa-YA$YU$hybiDCC>w|{tkMX<03d_* zX7~lhHrNA8cJ`0%Ki5WiVBPBpA74mD;|AZaXuAFV8hhMsqJkKS2l0{BxvD8Ccrzu( zaPed{xc@O&Ht_+bF!hTpBtWy&<7z`rZ3Ir>>N-BP7KrI8RnW1|;-yr1YVVAaDSb4lXl5-H*%#xEpPK~*>WaG{7aP9C1@By5?L+2WQ^s(isgZsI-DBc!s(Q;@)HsJmS;Kh4~G>Upolh( ztQnSeT^;pNv(79X@sk1=j-Z@6b;h9_s~rKXGFRH_x!DJXP?A zqt{rqlKDS}SE(WTcX6#{eJ5T!A9w)`fa$yEH_Xo<&32tM*gnP{YzTKUvgd{%@0(YklAKbNpHIYf9oFo5S)@0G&7Nn5;Gmvsf+ z0&is17U>uF)2R@IOH5PiSs2&@fVQRur+F{OkP5u^KQzdg0w-dMpPk?&kNm=m5<>G! z#x(&+H_pA&_D@uy1hfld2LND&TU*5hhEtY20P>|m<3G1|tBfLFCy7=KRwuRO@V{-2 z#ZV2(MFTV@YXsGK7Qtn)r`yN0Z2AM%^%hh}u=*es3B9b5VU@m{K-*1ug1=nabu&or z(^FZsF5*?CHSAQ!y_~pt+*ngf(%HG2M+sfG+lAK;^4(VC=y?svPf*XEZ$F;<2=!N8 zZ(b{%=X2T_L-?{Qy*h_%o3#RJ`RqPGfAu2(Y%9WvQZ2VpyR-c^kN0eO7S`MM2(y3;0RLD!u$S z|1e~2i$b)3h#NkxC+_;lM5%DGb0-9KbXxovJFjA%s)WPQ!`xv z5EX>ECq~neU#M^m@pJ5laVaMKDSLI3b}-tuI-Lac2f^>?rmjVf0D z-2=8J(r1~FOT+aT9@SI9DvZuK3>EZH-Pa3O9?CrNJ>EUo)4IGqm-eeb&R9ZDDrH2W5MA0v6#sP$mCtgKntX66p+ekMvjP zcc;t2KyVNAkdKd#rN{MET%l9@KckbYo6ob4oSe6(C-<}D-crbA(5+1Vt z-J{^$w$HEWu`#nIVj1Eh{>lA;8;ryfrl#?IJz& z0S(_*ch|S{;%Sd70qL{Js}FGr%CT2wFB9Q; z!C1V#Z)6~zM({AA!!zQNtH^5p_%K`L1ZNloKA&JOhy3daVhbowfFF&|Fi3es_)^xT z_4&Xyx#X`FOqS}w$u%8dwz-u;i*+UWbXr#qqa>UsexR=PPjF2S-B61sjv=WOU?R<# zL`Sdy`bIIkOiuC-im6cOmn}f!c~{hAo)-w*i2+?ooq6V)wdKbqZ$RA(=%TES0UF>@<*ow6)1G_0AeQ;@9DT#WCA<+fMCt+AXfXJrtiMDQum zhm&{+DOuYwMfLH%_`u0tKT~|gwug9?FJV2FUS{ptZ*SMG46@yUcPPWu!{ z#&SEyj5-|sb#HSd*bctDX4?In?=AXy&oEivTy?|K=d2~$s<;)R93P2%m;xMmEl-m3 zE%Ft$M^qw$Zq34wW30zlY>}&|U0IoSnqI64h&x-BL0B@R-pP(Qx05J`fF3Yf^T~n+sYNDn{=yDTG4KYb|Bfnehl0ov5o1J zY&0Bb2Uzd6aNg-mX;LLE*@V@nT)=R(hHzcLR&8QbU&1l9LQ=m4b;S$u~)Lwjrnw|oo$p%#{rjD=-mFHtovs^q(dD_dcM{RVl62(JsJ78LXQCJ0-uOmt19 z60+FGfuv^cKcd)T9}|qAllE{05bmS+ewG2DFAyXxihhUgjSqU7S&KNck!6f0&IRi6 z(()oZY4|H|2J(POifulY(m=bY(dUv#X~xHSX=Rk#>hrG_CWm%RE|{6K=|&F!uvKrJ zmUHNGZZquIsMlyP?bvM0TyM(UY~H%iVPlo0x7qSX59E|Vo`y)9jes}c>Tc|6GQ;J3 z7GhUz|8cuaqJo~Vj6k&lDkGn-LRi0yz|;boelA+dC88?0z6`-rbCnKg12-A5+qAT1 zwC^gbQt#Ys%9g-hU{LjWvyOBQ730&PIup3v+--FTUQu2Okx7PnThw0~Fv+JS*Vmp; zMfBTPNROPgwVDxkaObd;^{@aol?byV0_O|lBD4nrSit{WHT)!EtQP^=dH7NjGNPgx zkSLdho+>|qdD(m7w-<2sWid5YzFW&Ha1j+WW)#|1CH4ERdJ_ zSiwXn5m;qHFmT4Ugs(hlPl4_0bZF(l9?^uxo;`wJPAVn65oPlMEP9pG>E)0{uW;JQ~#(>8law674iXaK_ye8s`0D#ueskINQUmi5DGSCbzTNnMJ< z-5w6RuO1(cGjpDu0V?&QAyl#2p_pfkY=|S)OzeUfNTj5Hdwz*vd=xub6(yt0CZ9~8 zT?kYpa&hYLa9W?}FRZuPiIPiJ;&0-HF@jJikf33cNTahv;wtS!(KSG(t_R8{D|uQb zL}Jbl6WN*|^E5!_XnEOdLgev)DCvpNC~TuIfttANAjnulrklVkSi|QpBK;hJE#HUJ zaDuAl0I&J(T)Xb3K!ITScuMMuq*@qZQHw;Qmz!f6MQ>izKsYv7q}YM$13|j9Kn$u! zE%$%N_A_gg9m;H{iFA!Wx;vH#%WqG7fMdf^Z|{<9qDJ5hB-kWvz}J7Xs&%H>i5KkszL|M1mLWc4@$SJESsMXJf4GPZ}&kHxc1qh%yZP14#lYJEqEi5k3)WhS}4buWuV(v~RLkuKB4j zUl;wQr9&-_VtXUT)lC5sk^?fT@zl4fSU4v3q2UQ?Ku@(|rhqtUsTsuITg4LeR>X=T zUr|Ap-B&xpMs_48R?i=(^&1HCRjwHZ290rzJ6!|pAK=0e$rjFyT_+I?T?v#L3Ttg8$zrEnAh{b zjueY7e363JzttVg6MyIO2>Z4$WJ?bwD3N}%FOyXrQ)tKyx;86q4YbHaE-QKd;c7_A z`eTHSH%xr(_Uv`Di8qRLdeaqf9pto)AxjTs#TvQ=L z2Db%0FBgG2fw9w0@hIJxm6W%7M#rqX9O7hMR88=YE@5TkE9=DRr0l{o!xTTtCYg=Adbc?<`s%QIV-Z@Qk?TViGq9o$A&B z_0it(MBygrbt9uyLNmcVEp-U7euoxlTc7gXgfLIRa|A*7JHJV~BJHGqQ%@qhj(mlH zA^WrD7B;K#4&rcX^iV%vmE~p!6Y>4dO0_~p*{|HpxS|~MFaj9(Wgk(ZcZ>J#@nafk zvW>hHeeMfo$6LxFF%SO;y}=-wH_zsYj=^k>pdzV_d2q?IP!bg9gU$ofAM+1KWvL2h zj=O4Q=4$1m#r0Xk-HjHu57ErZ4T!U9hfJFn(*bTa`QG7A@H8^}JyYXn`MaZ1$E#RZ zT@m3>Nij>c-#>NhYtx4HxMue**z!itoViBtKT3epR!C`a0|s4bok8UzJ@>4X&2lIC z33KpIwbeRVukeSG-i<3N=7hLZoIk78T$S<=g=Lut&wtT7!3OaAKf(*1g|4E;8v%Z> ztxFJAQQ6@5Xy@&!OeXCIrjAdWE0;27AFH2b2~TL}bTnks(`9-O<0N)a&UV@$Dv$OP ze?f0f97Db2rfI7Y#r~jCN_$UQb6$JE`sJU){>*O%QFZ_yG~ zuye$mF3-YQN{*fbpOGA2QA>hhcv^{fiFHl<)8Z`r^2b4Qe*fn^IbPp>Oj?bo4qwiY z7aCRCw<#6chJbmHyC>YydV~P6V%ZdeADEY+YD>4jcn*#c;{x2pgl{3p`6P~=6VUF) zPy!bpBSLjwdULlA&ZCHx7Cb~4VbP5*!%`7qGwgOgd4&4^JA zs)h`eC1BkX)k*0vKrQ!GG3o=@Pn^QPJk<6}7-I~+2o<)lX4JI?egKDBwr9GNUA=GX zm@H|66BSxV5VaY_ID09|l>+{g7OYeICyQ&xe4rRcNtuQ(+^h}$E--~9$QGb(!mch;_?aj<=+FO0p{{4=P(W6d^NaoOsHZEgQ`DzB`YSGI2B!*0B?5dwQbosG0#S3yk$0+@VINgTd z0@cBiTa*cp(B>=3nvug$+N*kO4N?MGlo(CP`&1R_C73qNvZ%PX|{5N$D{KAZu#BnTGhE$V!PYJc3+}-ux6jM6N5SoT&kd)AbG_ z*DGk;6G!-fCM3Tl4J!%J!NmsSK-cKp2rRk+Ri_^kL79I_-8hN^%M(C~FaKI=f=`_b z${vehSSnOmIwe~4q-R-4m{9WT;ExyQMXTp9XL_*$=_h~RQ)QgGEHho)Q*|w5NLmTY zy!}3xszNhjaI4g~ujD+_czjiNAq1!k%BGd~OYGRxy3`0;2F8Ax*8n-zhE}E`H zOxe0Ntvs;%5Y8AVHZ84eJ#g~p%v86XJsN<2%w(cztQ};YInQ7eNb=>B2rXwSEML_x z>asJ@`^_1gG)0j#&wo^tfit>_00bS)_2)H+InF}3z_NSntrn3}q-SgS*{QqLhj-52af1QBFW?#BQht-Lip50Xwl8vm8e| zF_V30q0-1r&&kfXk(G8KCs*3DHNSi)&U=}jotc%BxoL%$l}8}QS(6C>5?grFk6GJg zIq$2SH_2r ztd4CGQl@7R!Xins*>SDt^|drR>T4a1b^i>uG=}z8hWbgsXW3wt%3x_O-fz`Voi$bI z8K=pvmzsp~&bj}S!Aw=Bv!z$lDkE5Rid(U*q}ME}uMl65#Ee>@SJKkVbF2{9Q*#^a z*$?Reh8)YeRInLqk{86Dqg|y?t_Dv#sK^i6r)pG^8Jii}X~t`{IENJ2h?BDp)(`~A z(?UeE!HlB8JRTuWmmo7t5@{t1)H8VOs-5=-&Tu6&TGg2S`q2@TB4{30`|WipZfy;Q zzn0eGYos05-+=MU92cw&4Z>n7+vg0ltr5H`nZS{md%k#Ch(b8#dg-yI`jt zDJQ=#RTOqCTf%j!44Bp~v>w#YC)7IEqY$yJ_-}L&q&0 z3&#};BhK-1k`}gyiYecabM+-M%NYEaG5!nzR9YcbPmanExymYQHkuz95fhL)Me7du zExy_55ctHqeHytW76JC3bw}D%s~>~2hVstoArTWBB*InF@78d3z8PPg1=DdYzrT8& zw5DhYEQjOb`BX zEx*jLs0E2=+MSg8ik~rRvRz-q4oI67a61Jk#mlC#D25^;-YsUUI@Ec2?7R-b0ed2= zLzIxlhDru4sme*nw$;vX)in--np|?!VLj6n?rYmL_qeJWPf+8fK7YqSYnZ*3@MX?_ zVv`(6{Ut&6;xwQsMy;5|eH|%;v-%;}%ERtz=+3^+YZBKo@(Yu?Ewmwj&zOl|(1w2- zFK}qo0WWqlt~}%~?Wz0>!ppV*9`}sEf?YO=Ds#jp%z-;thcrza>a_e|M^2zUeQ_3~ zo38O6hIJs!?Ze>J0Y1ZM{X7w@k$yKei^w_}kqji4M`@LV9Aw+;2p z1nu(#C&(l(Orj6hB@)wl7^#N6G+8F*@7J!!x5JcJ*2#L(`0LK84xDF z5vH&aFE3IG2(7jOrLGO7p$)0o(ZP4Qm6OV(DBD&R{C8>N!#aat1;uy81|-!KB~^kX zwI{+X#>%R!G>U^|ii>ATd$a*z(FUdb2&MXnsNOt&*$sKi8F^cWGq6ePOGJNGhC)u z&q1x$xJhThbty?^C~0bX`Z=Cde(I=?dGIiEuv|abpvmqTO3ug18{~yC4Mu7-42PQD(VtW+isr zk)xUrW11Z8Ibae17!)UBiS7f=vEave5Hl?%@(vgxCjd=9^Oh?A1b&`uP%V3@s#z)x z#Nay+Y-GpV{}WzfK$-rcPsEbl*NTSpS`RFl1_(J^#2Yx>@Q}u%-~AVCifhH1Qv12q z$0I#13<&Y9OF;+JE(~!xoprT!hRAdgX|6MY-NDZCRP*|fgX*n2C zd1zDsXfF;k?1=4A%1p|%Emg&zv)jE0g~Cb2_6q7SsB)JtVPMQ3-jz);ID0NMXBTQM zh^0iHn(A5M%0vu(=PxkEgI^Be@iXSLOJ3_@GFr6~H4!zzOjv)P{8T!ay3!Sp`s~PV zy*RX+RfwePR@;70isrqGxX5jsK-^rZUmHC9Ux9<^6PNpcfnlC?H>c0XL=D5?wwU{_ zjq|ay_b%1JuX|c_!A~l1!`=r+&7Vj;fvuwa2-K5k0PD`_gFsm*&+d!y!gUxagDsR2>{Y!iTfoQ z)G}H3GOc2ogi4)z%cRGXyAhVl-bf_|LBc}^w+N44Po6IR8e63e&(_5BgCgXMR0c|< zGliH`v+8(aWjG{}BLAjbc(j|#HP;N zj?puIM5DmcJD71k9ZE~kH`m6fv)?bs@G~cw!>y*AWM^z7U<9--E<5GeX)zfeF2 z$7OHHmlt2^TV=^>75yrBM%o?*!VpF}cMql!cF4o`+=V|)W|btW6pS*>4gzz4bnWkG z+5Z;1JpfUy2*#+|Wq1?mGD@+z4?Bi{j-dFfn)H}G$u{9Kc$YU>FJ|fV?VAp_AV@Fw zX4*l`+Mkuy^u$h5RZAnH#vMHm`PjZ5>co*5=m)JpV)Qz~ zCq$ZtyXTLFY&1I4y6?1r&*~+*@WUHwq0ca9-af&VO6*`V_XgH0)q!Re5r@`9$jd{a z0{jOPIfyr!ZBv;@ofkXg?*NCJ%W_g$wx_V-KpqrnrDN0 z&fw=-TM2{Bx|Prdw13U{Z>3h7qi&p>f1T)8KUPoU<4C*#Y~mA3K`>eK=|r(dYAQMv z8tVnMa#r+&ljrB*EeXZA66TNA8A_@;K{gSIjUrMT`GwVbdXHFPwSYtc-D%UUa=9|j z*#%a$$ruOM5w3Hm*vE89e1Rg^DbI%?U{Uo&eYE?w8UA!3uJr;zl~tr_^9YR&e~w$L z#~(pO$XOa=+(LyK(Bza zw4OG1{`-hEh>EwNx%oVx-VhA6m0#pj_3fr-0@+fwAcG^y?VHcZrNqpvV+v+>6NsfH zLXI>~1a39@rET=Z;24maE==8>7sp`d~i2c_^_SaYOMaMMY*)dwEiXRUJ}u$&;#fa)#XIB*ss|9p<4lJ zR@iA2toHKN=$q^OF)%0~tKmFq){JcR!UP_dXyI$-xs~?=bskn8!!x!go%qz#-Kv-X zLuGoElfV-3<~pjsYSOJKbd5}yW_FchK$y}ibyGXKQG>H82!1SIw^}s74;}XvV|?{6 zw`w?_=z0aL%^@4z>SjXQ)?ab&Ze|XOSA1-Joscwjl9>8O1f6CM8%iU22`GALAQ%W* zyw0Pb&4H{eX)+B+ounbBC@$;lZL0VhU>{a z^J(2IDP1T}Z!OT<8)Jn;+#`yPROR|7*|8SeFPi7)N@a%7y4yqn2d4DOKHzgCcbtOd*el3OYI=OW*L67 zLF(%clSeo>R`l$NK^(t-pzJFU6)$yrOC!V|GKaL+^y7J+kht^UhllTJ+;{!o7S0o} zeQngw9i}eo^#bL;R?c_%J=lL6_kaAPojm*}1G?~#LFAiXGIw8JIwd-cJ0Dn@dn#_Dz^pBzyB^w6!fN7+VYwp2&C?R5j)0y?SA=reWfGX zfQ%;ECQucDw$&DYd=)eLneq@^T_b|O!+uo?Kka>8K@WYWbcFNszr79h7_~Qf1f2Xw zR+F1tKiVzxd{ez;tR+6yPeRsz{Mdq4bEAev3IU8>krpi znhrfP7tcgzt6dz5(cQdzk;)wWDQyI@F)SzblFfN09@Vr71hYTL15U}e_L0Ns=hq^#IKhmn^u~ z56gHy6(GpoLnnlu=}}#8u$dNjuRAV+0+e_|KO`a1-h<(Y582Y#xD+QpOvbByF^XcM zl6CWN;ON1@MTn`Jbx%27T6QbhXc4w)0ZeTk@QlanvU`~*!=kl~kd?lXnMvk5qOe+4 z_Jny7HC7oqz5;U$t}>JtHJ3KQr*xWVI}X&(#QFW(6J^F80d0~YAa+O#1{4m)fA@$D zkz4or{c&{hmDKt#GF#~)kS#x1&vceZvta;>W$0__p$Weg9fg)L!NyW2 z#I3U11Dz(mXKBBn*(Y(VeZsau6)XzY+ z7t5j0%{nTE%=(G36)K^d-_?-yRyka?a@&NN=OcqAwSXX^Xc!Fu-4$-I*yEEvo^ zG+F?z*7YnPt$iVnz06$aQXpWLXRIgnx(R7{Tn7gPQ8pjH*r;h`DDq>)jkLg|4E1%v zt+26PY#Fper?ihr5@tG0y9VFLH$sSL?ac%z)LryoK8E?brZa+F0p{LJ_SE0cb7}vy zF0O>Yji#R77SJVZX%NgvK~1Dro<1^IBS2p2zn(*)aCm1Cfakvj?EBW_2-?cV5OD}I zL7=d$W{p9T{ex_k$E`z|O>>ZlINIEzT4F$w40Ngt8xp&@3p=H6PvcEcPQN#~L8H~8 z_I-bQ7~4z8aV&}G($hkF)yEG58DFj@?A5?)%&;2A7yFB4Mpd7zM;2^RX{L{ak`%oq zCrKlXEJ34X7q(~n_H$N3ji>WlW-<>F3pRzF6cV_nqcPNbNBwhpt<+2tEf%udFepK| z78JCN3pEvT_@$Cd07+@8Zy1O8ar8IgByXOXoy`t~uaV2<^aV$El`d=r-Ji-ZW!OV$ z;(?5sa$}C4GLmTBU$#$aCOOWbzoFP+ZHiDz#g~Oy;iTL9O=8OTwP1-&VzC!QLl$oS z)T)7sibDnQs3&?z+oL=*+bkOH8St(+SU0+%QL8WIFCAfYs}tszCRViYC&d_cQUrs* z_(2~l{_!54p|B5FDRRqMbjBJcVc4T}$K_X6Aj?9Qc=pvNMzWk;#C=d+@x*Oisrp&@ zhv1Za!_SKg**jjrLn5~*z?Cwv6)28LcH^!|WT1EcgR;8aSrLJn$pxA;rros&Pe{%_ zmDyc=o@Ik2zJ>7Pn=oUMZ!q*>g%KVh_KlN7A01d|*#OG*?4 zU)G$(0zcWrZaA-wgs`Q>8;Qii_^Zk;K)iA=ng$;x0wxPp6;L)ZNT0J$=1_yw%vF9y zmW1liqDm&!fc_~1Ru_v}UfQxwgKO^8v32sDLbq)~boQGzf;KthJ@h0HjbnjU$ zOq%P*Eu}Gd{Wsm&U1?`Dc~LvG()<&7eT{971VA18i|L4iJp2m}QW3CjlLjGDp=YA_ zonWQRbaLv!h&n0gfb>+4A^Fk`MNtkMk#OoBY2)fO|EwBmgk4oi@wg1LGZy<~6miU# z#Z6c>qVIl3i2kmqwCz;VEuoHMIU?~juUEXyXP|1KaDyS=XT!-)?g|;|X7bu9zloL^N*i(4lB9R5ex=}X4B6(hgzS)#0iF@i0L##cNclJ>o zKMBCH{rG)~FMa?4jn0SJ`)9u|A0GCUcBXYWH@+=+CjeWRm5?z=__O1F#S?*yy_r9X z2$a?K@fOCnN!sAO=mrNOjV0doK_Li?oNZ7@xo0V0WaDM^c-O?T-=|CaQj$*$Y%I=p z!OIgy1LTo~r4<(sDhPZJk0`4}V?4Y}*(B$DF3m*m_5;o(K-MJM^H{?SSU22w2x2aLEVmf>?iK{=P-?b~uAIpQx&#Eh` zd>A+7QlW7{O|aNS4CcJepNn~4Vgp`ZBy!j#pMQ{@%h>*P&yzq^`N4}QLcTntQAyD0 zuxds!8%kB=3&N{)U~M@!bncGi2MR{q#R~F1@54@yGGH#XpSfqW?Ey5D;Pnu{& z3c>KXfJ8xC_n>#&V!Uyd#@AeX|uAoyS6g5<)#?|lcldkm82_}ejU5x4! zk#PyO1^GMbk+X96&pNaH(n7wx0~iS7qpQL;C53uT1(+z*K2`(J!Tu=?9!wW2yHtX? zHDk{V@J|3tO5%uq#XxPHl-zz7mL{Im#W??9f0XKDxAdJVDU)6b5g*>Gmf`2JZa&?p z#f{+?=KOe`fA%NjlbVoIs(ca)xo5_AydPAHT2OsSg)egPzw<+-k=wnurNAdwT`V~W z`Fl}FfjTDc-VR3d*9*q)-zf>~pHd#hr0oPngFLc*=*j8Guw`D(?aD~_1~|O`8Vht@ zZL-UaQ0FkM5#pdB?HkewLyNU>yh_}pLe3Q9YYkIt_!!1iKj|iA-R^Jn!kgd|N>NVe zT<|}nmd2~-I{fqgIiR|Ou}Fc%s5^&dCyPjSa0JHx$#;u+4R2W>SStFFgMwYDx)K*; zOV;Nu@BRdqV0~;W47`ZwAfR&Ye3RXDdg(_R2|?`er)w6xT0Tt(ez;l2PSmG5{*WxR zpHFR@oW;0qT9Mcb3CS_ zLUd-E#yzA6%m0l4ZF&sgQYOA;6e(OHr+wtubq{wY9|49$|#9|S{YLw`TcTWahJeSnz z%CM*ZXa6NrKhn|Zv*z8V1k_U;82kRx{joc@(!19;=@hJiQ`#BRHif4CFjUU3v11W! zGfy=Y&YZXBOHfFsq+#PI;)bYNi*;<8QXZT#&ZE8yNtPNl>QYc0zZEEB!eNN_JFKdW zMKF^DCOXlkFX1SV@%NC4FHJLZhdv;}>N0#$0W)&-e&>rE`<`CR!jQ@4Q<+TV>81KE z1NyAG&;>@CG86?%wANPwLe%-MI10;e>VA}G{!L1qEj(Mn09W7lI!oriq+i=S40S+2zXXGL_fGeHiY&iDV8X6#JFaJ#*8x^sJo z{9OjOjRCoJbOhx|l%6f3utiqq14gQ~k@e=viqO!;ST4#9EJi`9YGz)pbB_hnVsdE_ zby_+p=kSdvc7S;{ZCCH`ci0~k#23LX?p5tfF*(Gr7cd235~4Rr0<;&_clQxvDv#X3 z4)lg~-IM;t4YG$1gb${5Vbp_xW;@}U8};iI$yII3;*<7?;N|UmuoTkHLL1YH;=m@QR?HBFhP$eEJsU zjF1xICh{}oqo|tuK_^Kn{g}u%60CVsia|tyPR;5A#2IBoIEJDptOh{yYIOg7F9jzr z-XFnzN-Cs6w*nsIf=^Smo=hRK=>m|QM5{6WlW~jLLm12KQW0GV`I<)>Y7<1mPT5lg z=G5l~xFx#MW4h>Ga4kstSpVTR^_v+1lR<#mSAm^=@MQ91x5Hu&5!bF#uDmL)N2Oi&SQ3QKqD|d9iPJZ!zFnu5EmjR%KIK zf2k~cC~7Jqa)CZKt~Md4i7pr(E6x75g0g~WhfUeS9^E>AO=;;sin4n?(v1pz06{I& zT3wgdtKS1vS6dVQ7OZ<%m(PV1VKwFYgPA^q4d!98I;~p$MC5MdD#82=06l@SB*0a+ zf!E|GR8RNJVL^@HN5?4MhDLahv;{AnF+(y`#2*4U%EV$G2WL;0KdM->z~^kd)anhC zO*o8t-x`i(IgvIF-b~a>CJ>|*=u{A>XCGIuU6ksdWW1#HunXgfM)foX?b?~{^j7RG zE#qDZ;yllsL|LLu>LMO3Gjy#!czv>J>pab)n)24R-+Wj#f* z)97a*s$J)NfjJB(T1gxD_AN4LamY$)s>o?}4TeFUv)lQ#b9^_)&J=lnFSrbPj1zUn zVkb?6W7-_E=A4<$ALe)EWKe7l#@)po@*i>bXS!lpSqi$nvy;(86UDFZ|9FX#nCLap zhiNac{wfh&OEcOyfdb4RL0fXEIZ2wsnrm_>e)9b3WcbeC>|=_#7B67taZUUoPs^uG zr6?SLT<0lQ$y6rkTi9ux^6q#g_fH?Ag%h|)FY+vy?z#!4tqwEbilFJj;lgg znLsx)zSQZkOV1K@RDb58QZ%ccOK9*O#?0#NFVbhQdlE>)HUn$ObroAnUagY_xI#DA zC&GcnbaA}uR!nK<7f!l|s1Pv}Mz!7=pC;Joi$mymYaAT`ay73}mhHFy*31gMA(B54 zN@?^6{-!nAqN~DBVnr2C>u1o1DvDc8Qb&TCR3X&v8bJ+2mM#>gOCc`clUWr3&1Up# zZm_VZTG;X_#;m&ObOiSVNA{}NvyMDhCQr3171_L@%F5D}ZSctM=VwT7lc8a1F_Ctv zP4jTaBWI*btl@k=F_a>nMM=WLmza#URTg0bZ4Z)VSZ@Uq)vTiS?;99fH&vr99RpjU z^8tybu~ZU85yavNdC7;otL|-?*XjPZHoACU31e-lTU5Gnh2-y%^00qLl|&~h2Dbx+ zQu9B-`lkB2Dqu7;UBf0KSM~SGOe)BOyHg5<^*~ZKWHI~(y0R7*mip~FJe5_1&BdSu z9{|$kw`{5}Re|10L=sKz!@VIc(|qJEgrW$SRPS!_02Kp65xe?7 zzr^z~!*k8B6BY1IEEAAR)2ZC0QD1D?f7~0l;a0N9RE+%KQ+Z|m_w%0uCix7r^y4W6 zv@R_E?imS=BBrart5_#@U!PX1I>zso1bhp&WKt@(Cs5y`$2EI6no4MC~$kq%TX z7Q0%IAH)D!<2B}vI5?3{Awe5QS%u7w|37PnQEz?77f6AQx^1G*uS-FIrk<4Zn^(Zd zX?FH>j9{m?xIaWlGmPY8H7bh8BVT$jv_%5degO+fy_b-{k%Fmrb@LG7m50bkx=RVGH`ZQ=>U9)gFod=$Z~%E`u%b=F@E*FL#$34b=&Y#RlX2U>rR>b0YRc|dA2xIP8GVJs~Mm*4k{A@TLSgBWLF zOrc=1vq(y0axA#vj2vKV6AWS9U+@ytOfi(VLNeyUk`wZju4Ue;T35j8_I*82XkAH- z*U{clx;OghZ!PMLJU_lyrzUIWGF2X7u|lar$;79YC$pQuqUQom2hlyUkG6;ok&R`5 zZFw2D!OM*GB6BaVgH&~B$;UphvqsuZPS)Giw9aSraJRZ}TC=nw?bz~{XNC;bT z1%*J}V|g>R&+;&+Zb#yjL zm|keOkKq(Ner=t0UoiPwPA^Ge^8~MtNaJ_5C0(3kFN$EhFx09GI?W!Q@9X-xdU=oA zy7Tv)Uo3-twIoZf9$%%~P>2&Su&G_+O3RF3-ri~@_8B4H4!Cr8|BDuZKeqjPeEkiY zGd?b}bW4>#ntW6G&pI~@i$ifpi*@^xqo1MC3(A(?>n*s5)#Bf&S>uZbFW9V)O6D&g zdFdX-bnv#rUthmE)Dz!{(XP5O)vyEPKI7jK{vA~De2uMr-QBo+#tUO*|@b+bgj~aB^7nGbMb92+~Wb=WU@8s;PPZI_}+asUf&;c5w_%^i<0TmJ% z9huU#i6F<9q3|7!_K(|CbW=I8LNo}c2ajb z_ZJ?KL(eNd#yTqo)M`1#vZWVTgx`o|`6VKOs<0v}?5}sF(}xOiyxFLkkU9^o-BqTz zAb^$_bti<|dx9B)Db7@wMtQU-!V722l*P;MJ(;?m`7J_;wc9lNLlX@A(V1Sm^{{3Q zspk5}d@qfJ;S|91Xgt4)8Lbu*I1tq2?(d0E0QVi&8wi#@|I7pV4pU`j?CRk#kC)Ue zFv}o7`{S%1##H7xcx*aau`n#i==m?Kr?kGn_Pr(@DU+gi+|76Nf~wv3WAX0$Kv=)- z7qh2<+zg1{E*X$IOe}XW$klx$+=`33)lPyXkqlbbN3fOwq~RWzd40KY@yrH>4|+tC zySuF8WP3utXtF`B6}{>~VA<2<@VRn8szFae=$ZAq)?8`fJr3r@`lup)Y5%e9Vyyn> z2v4hnL*Y>y03XgNL@{~mIR;80%bJVf?bH2l*tXlfJItAlhR(F3+(H0&z4N|W4!xeW zBoM09mv^u;>2eH!Q?G;z`<8v0&nmwxl;Ed7FS8=>v6Vjz+?HWq&;>}as0@$ zOIUhHl#gLb8Gy76y>wCkFM_K#+bLrD-7Z%_%aMrF&H%fmI#2R6g5FJ_hnOABrjvhg zX4T^R|JJg9HogD9`ufpVkK*_Lqx+xpfBr+>|25D2NWwLU;>r~t>#hUDt=m_phXba+ z{O1wg3jPxjz;n39{NHg{014Wp?HPrUghxt{j`S!PO41e#Iv7h7(ZTsC1#&SNtLDqj zP!T1$6sa%h5!K;E0YLb zVy$eAPhX)|A*^P8gh4R1@qBvnj+(WWk=)=Zim%1|%QKCYNMDn%FOw<7dYMcMffD0s zbTbBc$$OTcu}%r&zUOo;@c=SUqdYP-N-G7q~V*46}OEbIf@IkL~()gbucK<5`~t}feQkj$9DUxTchXgafUrr z_K`8Mv(m!d?tde{1+ja;;q$4pRAUHp_5(R=wz9GQeDvMRI+UzlssLK2_x9Gr#e+1O(UE&*7pHd7my| z&VJ1gI}r%(1Eh(bls z4v`?0I}95h0}VdHAYP5}r9-AMF#{%(;)n~3*@@z$@TMh=XOmnb9|km?1JC^ObRzho z<#A9G*k?G$?a}&oMVha-i7zm<%HF-q=4sP@X_q-`G3DD(e4Ub@bj8IrB@pHZ=$oak z4mXGE5S4HxU>932fTLOBGq>*S2d?$Nn#j99(BA*>F3qRvHCaxmC&)IOp~lJ zXq>Qs)XzP5WgeK01Elu2b722{+JTUW3t^QfaTTl)181VncBArX9Z!#tuOC+puaI$s zUO{j+d-WQd9yB#Qh?+X{P#XKObR;XJZ%^E}+>*v~koqN>_=2tfz5^!BZ`vi3^iOVSn4K%Eyvv819@Y66mtW4 z7Em@L%d~-o_uF1_m5k9iKYY>}bOQq9ZMob+qXd`}c^7Nc)JQW{tA&OER{uX}y4EC% zdmG8&EcHpDY5aaX(-~Ew_|N8duu97u+(cQ>l7W)JoXR^K?mA-osPE`&9rU>O%G&7p zPzh4TA1V=={s2J?zytAPlqXSS7WpScPN*#Qh`dU{VdRD>o%Qk(E~#%Nx@+K;aCmii zJbg~aDl#<=d!!!nJOd^gJ;_U|5@q?fA}dAW7w9Giw)`*;*P%vCzAlQ`16!U9#)>U< z9273f)M*_I_|fVV4rI67?V$g((5u0vGFjY&d!ZIL9gZj5V0aVWuPk_Pv?~|+J*V~DuIpRw4(YFnkqR$Aj8nS4MkzsVC&Llr{O>;r-5q^)) zUcEx&b%G7(7}j~wyZd0EP=u$L3p}7*b2=W+N_-5>>tZG>5gVjp6e}|bgxla+BXh8H z*d8jQqF{Y2d+8-8fftxy@guZHs_|pAyY8G`YTlUS{^G$0Oowdcj9)5Gz$8A37Gj&r zw?QzgSSIC{@%}ZSgpOn=FQ($73Ea0qnoxR{Oe-NZ{H zd|N~Ouv;EF?e73|wQpKJ|ATSi#pX!l`o_-w)^K_C=Wf$8|F(fSb51-Esa7KV%KDac z+nGFVX~<(AUyiWPe*LH4+vMGz-2u0EYa%tHtLK#fx=E_E5s&oItupLMTmn)5So{ zC0=p5D9|a7*8j>Yx zWFY1C2@=Z{Anw}n@l~=zrH88s;_p5%WGyRs&pK0BNm!Gs#HUb35%PiFWaIs5M8%kU z9b~Pf`pqOQl0Rno*KF5|p%}1=832a^5~mMOArn%l(}+cj_V6Udp4;OBkqtmv1&m>( z5WvMnq(r5;hYYbU9%guInH!=<=SXqmaWxN`8Kwp8b4W{;nPAsO?($utU&;s{WyXPHG3i9S9rSQ%VK?- zQ;8&1QJ0Pc7&U!}>ByD2B*C_8fpZKHCm~`6oqY;9^bQ}BP;>5{Mx24fdgr*Su4ff? z6l64|t`_6?{qC&`@8p9|jHSK4)ClU}SZe>?CK4boyVpIn0`G}=v zOp`R%k8kDakq3Y}Zh^YN0|M;4HeB8w#!Puav~HVjl*od=qw311AfCl5{)9r3?A-nW z{ufuAT8_9P_hz-MsUBc2z)h$&f&3OGlGEWE^WL7gsE)xi_+W}cA-5uG#ZNzD-lL(l zI9K9TPf!$NqBl6^l4-tcdJ==3yPXGnY&L_n$!3Q7fRJ49o6*t!J|#@p-;Wh|cIN!Z zpia=R1Uu2$VYvNx9cORDJyQ2R#Uip-;3y=nnIMJ{mv4!hrpV!y``busEtY^j2GoAw z+N#5&Q2zvDKoeM!8{8}7pcj-8yUF;-XFk1mI6-r{UvasevZtpael}~k&N_RVsfXFU zGixbcLrN=U@{Vu6X&H{oaOq?@Vl+ZS0v;QN_~5G z;iPHNbx1+3#?<#y9EBPW+CaT=4{9-}o3L?Kkv{?Y{Bn$ya2wlT*$nyDaTPI%~104dVmPSX`K+<72WXgK4 zSf2jrIaH;o8?`uGUsl?SJ@`n8TA%ujMYv@#o6eNT3AUwB$%I(keBiFj8WKes4{y%vbm>{5Iiba*PZ z_1{@3Y_^GuTIdgMb9v>5m_!(7`c|(SaAo%%V_26MQ_AGtAwftiE)5g{h-FnLbXU#sdge&jDKvYO&=#8YKomw1w#8kqx zB8MdLi@nqM;C;C@EWnV`Os10UC`Upf`wipWJ`DT&YOD-PWqcKUo4+4bGOMVeO2OGrk14eDZr5%HW#gD)j41PMFYm;MM4H_Obsf9Z z>t32!!c~Q{@}@aC>;Zlsu?D#ei_)uFC>WY*2ec&hPUx2`)dCpKJ3vL-w<}>rFgnK` zZlh>3q(j$n4oB9!ZhKD`{({+(HEXh@O#b4Rd;O=m@A?8JcNnvLnpe)_Ndk)Ws6yY` zcC=W(Dl#B<4&;56m$HJLaV+&##P&x_Bwb^@w)E%*0we`&Q_ob$mxI^Iy*$M+X&^wH zCoap(Axn>gkOBgTv-eQJ-x06~(y$d}BN8aWrZ2{Wy|iLKpd>EjQl_S0{(k!tNSVgS2eQUg^*XTJI1ZT> z$lh@@`+y;p0I?lhPFTD7Q7Ire+6_7qnD0IqLbZ{ya+lQ{gyfKV1Msd2-5)P?zJ8S9 z_rT2L#b_seFe0`@<)p)!Iaa9bc@M3CQm<;89*19$&)Zig2WKF~Uz?r2;Swsilvg3V z1M%UAT1@!#wBjn<=LsUbf9~8r`{tW(n18%~_SOCSc3~Sotq-@hzaMRO%XWwLL6%s6 zMPBkQsF^*tkDd2G;*f{kxuT4?c%$KfT1%_G{E|;wc@8|CZy)^YL)s)7J=vvJM`u^c zPZgAsGL(JE%c9Gd=kl(?6U#VZ6l8V`*fBHfhwJ;GZp;lRwDV(U$2} zH{hhA31ulYOuKlai7F7Unrb6)`-%I|$Y;j;Z3q5@Xya!nE$?1l9Nqo4i#P2E2==kN zVJNAB8mg-hPk%P5f#8Lw%*sETQt)L`43bKdHPQG#W-F6go1(y!imK1d)*YTsq#6(b zQv;Leene{l*rBucaMT#GUl78eLmzj}!RQmn7Z#2eSldcDg+tX0n+!?%M%toJ@3|}` zrzLn5Dhg?7EF13VeuDr!$t9EvC2LFq>as_1-7r8y0*>f~k zoXy!L7nB@;l%}2kyaY~xG%{E`#d3-93c<5ZPA(xg5MVH1;&DeYsO((`iwj^)623Ep z_v+92hm*vuj8RjK8(D#(=Gorz;bp0(#S+^;zgQcs|IjVyA6jwUEPiyXzE*1EljXOF zJ1D!cAK?p1Lyd}x*~JX4Huks3_6IUw*pKTQ&o|cAHhxMzuRmMcSoxvW^IP<^(<20h zB_GhVchowv6gPHs1n-V~I)zL4#zzX1uMOOc)XMQQk03U!?}sFX$RCucLynGxnrR!h z71s7)bc00IfG*$_d7p9B6J@K>K zxJJe34NN*n1mdkTRNv>uD(L)dlUQ|Uw05P~gQj_XOvqTX+5T*uJHOnOz^gw9SDSUM zT*z!e(aZm1=gkcH&aP(p?CK2)lXw2_i)xdwjr-4+M{ALGsfd|M7v8g!T*HGdSj~xL z-=F>u{v`4LInUSKw@6K|ZYK+1L;gPq{U7K5`|6uV_dmz~|08~~X+X9K1~v%-o=Z5$HRy1Rv zS<-{h=wg}*>V00!b(qo|ZbmL=g0;lwhX-4CM;7-a!(K8|D%;$P$t=eejZ$e)_!oGl z%ty4FCS#&hMFkg@ZxilZ1AWo?_?XHnej989+D1m^oa*KZDi)ODgXAw45D;%Z1%Z`V zc9~qEdBGEkD`8;TDD0b0edTz3IiEfy;q~O1R7qt)uCcBHH-5rPox9R{Wr4b^YwZfu zXC%(-7uC%YTR~*9IA-VRQ}$XXX}j4FWAK*POp9k=DCmLk~Wtl8wai9)QHOPs5I9)zI z?sb3p1s}AiA2c=_T_i54sfIHJmthr-{Fijc zR8r4=Y-as&r^PX=-0;~$iKY_IO6;2Tn>)2yP%Hq2h~CM+>eqkz=nm?7fwml@ARvzQAw!n3?KXmCi2Fw^`P@yBpE4!f{mscU|4nbUaLiA`Z<9yBQ!Fw@XZU*nf9!H>43u>q3VgvgNtwbQXo@&zfuHThyK! zPj`swjCpx)hmZ&g$o26H>KfdDr?8!e!FcXtZjaOHx$5@n6t@%g;OnTE3#TQA9h5?7 zmsgi3blCOt(0bJ|_mUfZ1!P-ge5mpPLDH_Y7oo2Tp+lQ(S4e8-Kc7rTfG9Ky`u z0EZ=`%b)pfuCl^nH>eujcg&dRhTNj{k&`^u4XC!Ol(GQ4ceY~ig@*)P&<+JY=5a&$ zub;vS()MEKDkuGWvriVUmnaMQt&0N zWM_H;*ZpFeX^}7c)u8K|X&Mq(J z99=x;MWZ$q=98K!xV81g_&eeQjN3Sy(j#ppXY>DBzWeWc@*Aw~zpTLOej&EHze5mc zA3-F@=oShOE>9P_@-|5dD{j?uYeg`tDnilnEv#Q*HU`2Qy&=da^;<82aiq45rI4hORd;Jsh>65nf)Fo_(3h-Gf#zpb9yg*cnHW$20!;hGWH)70QD0Gzyu&1c(M2&g{(c903IY5rEE#LdmJUe9T2(wt^46PWi`dX?rKBK5 z$YbT_uM9?=`PB*81v$W7=m?nq+W%DhTXG#Fd;sa@jOnd`@|>|O4sh?63Otl{4^Q@< z{>S_`xU|2~-xu@W0ABm*j8wbBX86du;yMk<>(ocrkrFA!EUZh?I5a5;8@O_0LIMqB z;t=?|Fi7Rf?R_XM>ea1QWa;Rafh3_%p_vsOig2w1b4w!v7Fb~R|6B)KQkCGi`%CDn zBxLrj=3@9rx;nHYU^I1l_VQFLBuC)L@L@V(MpMh#CTAf*cEjz5_a8n~(;O;iDFdOf z;r2S2tg6s}C@~p2xO)C0wRm=kk(-37K+!2FUHCL(eZJEt~v_oqq>)E_s6&(oy-)V=HWFYu#&H)d0DgHlR5G5;nC} z5ryQV>eXxOp$E@tF+|3^Rn10qM$CIH+80HXZ*6951J literal 0 HcmV?d00001