From d765905806484ff7f11b94099efeba7d50984dfc Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Fri, 18 Oct 2024 15:16:52 -0400 Subject: [PATCH 1/8] upgraded deps --- package-lock.json | 342 +++++++++--------- package.json | 32 +- src/App.tsx | 2 +- src/theme/{fonts.scss => fonts.css} | 0 src/theme/{grid.scss => grid.css} | 2 +- src/theme/{main.scss => main.css} | 20 +- src/theme/normalize.css | 5 + src/theme/normalize.scss | 5 - src/theme/{typography.scss => typography.css} | 10 +- src/theme/{variables.scss => variables.css} | 2 +- 10 files changed, 204 insertions(+), 216 deletions(-) rename src/theme/{fonts.scss => fonts.css} (100%) rename src/theme/{grid.scss => grid.css} (99%) rename src/theme/{main.scss => main.css} (79%) create mode 100644 src/theme/normalize.css delete mode 100644 src/theme/normalize.scss rename src/theme/{typography.scss => typography.css} (91%) rename src/theme/{variables.scss => variables.css} (90%) diff --git a/package-lock.json b/package-lock.json index 85cec64..24084f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,20 +19,20 @@ "@fortawesome/fontawesome-svg-core": "6.6.0", "@fortawesome/free-solid-svg-icons": "6.6.0", "@fortawesome/react-fontawesome": "0.2.2", - "@ionic/react": "8.3.2", - "@ionic/react-router": "8.3.2", - "@tanstack/react-query": "5.59.9", - "@tanstack/react-query-devtools": "5.59.9", + "@ionic/react": "8.3.3", + "@ionic/react-router": "8.3.3", + "@tanstack/react-query": "5.59.15", + "@tanstack/react-query-devtools": "5.59.15", "axios": "1.7.7", "classnames": "2.5.1", "dayjs": "1.11.13", "formik": "2.4.6", - "i18next": "23.15.2", + "i18next": "23.16.0", "i18next-browser-languagedetector": "8.0.0", "lodash": "4.17.21", "react": "18.3.1", "react-dom": "18.3.1", - "react-i18next": "15.0.2", + "react-i18next": "15.0.3", "react-router": "5.3.4", "react-router-dom": "5.3.4", "uuid": "10.0.0", @@ -41,32 +41,32 @@ "devDependencies": { "@capacitor/cli": "6.1.2", "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "6.5.0", + "@testing-library/jest-dom": "6.6.2", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", - "@types/lodash": "4.17.10", + "@types/lodash": "4.17.11", "@types/react": "18.3.11", "@types/react-dom": "18.3.1", "@types/react-router": "5.1.20", "@types/react-router-dom": "5.3.3", "@types/uuid": "10.0.0", - "@typescript-eslint/eslint-plugin": "8.8.1", - "@typescript-eslint/parser": "8.8.1", + "@typescript-eslint/eslint-plugin": "8.10.0", + "@typescript-eslint/parser": "8.10.0", "@vitejs/plugin-legacy": "5.4.2", "@vitejs/plugin-react": "4.3.2", - "@vitest/coverage-v8": "2.1.2", + "@vitest/coverage-v8": "2.1.3", "cypress": "13.15.0", "eslint": "8.57.0", "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-react-refresh": "0.4.12", "jsdom": "25.0.1", - "msw": "2.4.10", - "sass": "1.79.5", - "terser": "5.34.1", + "msw": "2.4.11", + "sass": "1.80.2", + "terser": "5.36.0", "typescript": "5.5.4", - "vite": "5.4.8", - "vitest": "2.1.2" + "vite": "5.4.9", + "vitest": "2.1.3" } }, "node_modules/@adobe/css-tools": { @@ -2959,9 +2959,9 @@ } }, "node_modules/@ionic/core": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.2.tgz", - "integrity": "sha512-ptiDXnn4131eKpY862lv7c9xxjly7vi4O+WWCES78E+hXHvTEAundcA5F8eQyb0MFIFvCnOxreTZjRJJnHqPYw==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz", + "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==", "dependencies": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -2969,11 +2969,11 @@ } }, "node_modules/@ionic/react": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.3.2.tgz", - "integrity": "sha512-LOM+CrVgcR5aDH4LzgahGTz9gE5fn8JnRw6nXLkXWeu+qfic/qbLiRnaqLW9GAmMX0vSHeZc72AJTeG9VB5xYQ==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.3.3.tgz", + "integrity": "sha512-BQVke+4QF1viPmwYFV/Bfseh4AhLnA0svP8UvKTP45plJ2KDXF/IbFVNn+FWtjByrqYU4PldUgF01+O4yPGiRw==", "dependencies": { - "@ionic/core": "8.3.2", + "@ionic/core": "8.3.3", "ionicons": "^7.0.0", "tslib": "*" }, @@ -2983,11 +2983,11 @@ } }, "node_modules/@ionic/react-router": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.3.2.tgz", - "integrity": "sha512-q2srTJulTvy2rYMbxLpHQqMyWB9Q9Ac/pwZNDyh2pEAVa2JyTJpFRCr9Ihh25eIwBUq9rHODUqPbT8fzq4ju3g==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.3.3.tgz", + "integrity": "sha512-hdGnOj+bu289OiyjmenizG7DmVCz5chofZuzHpSRuK/QZ3xEGuCZrN/POgCBRjYCT4G9IzDWEMUGiog0UMM6Aw==", "dependencies": { - "@ionic/react": "8.3.2", + "@ionic/react": "8.3.3", "tslib": "*" }, "peerDependencies": { @@ -3940,9 +3940,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.9.tgz", - "integrity": "sha512-vFGnblfJOKlOPyTR5M0ohWKb/03eGubh5KuGyzsDfc7VQ6F0nsB75kQIoLpwp3Wfj6fKv0wGoTUX8BsIfhxDfw==", + "version": "5.59.13", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.13.tgz", + "integrity": "sha512-Oou0bBu/P8+oYjXsJQ11j+gcpLAMpqW42UlokQYEz4dE7+hOtVO9rVuolJKgEccqzvyFzqX4/zZWY+R/v1wVsQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -3958,11 +3958,11 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.9.tgz", - "integrity": "sha512-g2cbiw/ZIIrnUaQqhGtarTAsuLdKDNLtY5HNfRHVWY9kHDj96M4qs4ygJxHc119tPQpzZe4i9W7d2Gc2Gvng2A==", + "version": "5.59.15", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.15.tgz", + "integrity": "sha512-QbVlAkTI78wB4Mqgf2RDmgC0AOiJqer2c5k9STOOSXGv1S6ZkY37r/6UpE8DbQ2Du0ohsdoXgFNEyv+4eDoPEw==", "dependencies": { - "@tanstack/query-core": "5.59.9" + "@tanstack/query-core": "5.59.13" }, "funding": { "type": "github", @@ -3973,9 +3973,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.59.9.tgz", - "integrity": "sha512-Vfr8JPgx4GxopQOqdQTC7MAUbX1vuEqeexCIX0RiwjUmNCoHKUg2Mh3rTZPsx8Y7wscc7eWkBjiz03Dt/YM3oQ==", + "version": "5.59.15", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.59.15.tgz", + "integrity": "sha512-rX28KTivkA2XEn3Fj9ckDtnTPY8giWYgssySSAperpVol4+th+NCij/MhLylfB+Mfg2JfCxOcwnM/fwzS8iSog==", "dependencies": { "@tanstack/query-devtools": "5.58.0" }, @@ -3984,7 +3984,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.59.9", + "@tanstack/react-query": "^5.59.15", "react": "^18 || ^19" } }, @@ -4008,9 +4008,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", - "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.2.tgz", + "integrity": "sha512-P6GJD4yqc9jZLbe98j/EkyQDTPgqftohZF5FBkHY5BUERZmcf4HeO2k0XaefEg329ux2p21i1A1DmyQ1kKw2Jw==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.4.0", @@ -4247,9 +4247,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-jzqWo/uQP/iqeGGTjhgFp2yaCrCYTauASQcpdzESNCkHjSprBJVcZP9KG9aQ0q+xcsXiKd/iuw/4dLjS3Odc7Q==", "dev": true }, "node_modules/@types/minimist": { @@ -4375,16 +4375,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz", - "integrity": "sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.10.0.tgz", + "integrity": "sha512-phuB3hoP7FFKbRXxjl+DRlQDuJqhpOnm5MmtROXyWi3uS/Xg2ZXqiQfcG2BJHiN4QKyzdOJi3NEn/qTnjUlkmQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/type-utils": "8.8.1", - "@typescript-eslint/utils": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/scope-manager": "8.10.0", + "@typescript-eslint/type-utils": "8.10.0", + "@typescript-eslint/utils": "8.10.0", + "@typescript-eslint/visitor-keys": "8.10.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -4408,15 +4408,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.1.tgz", - "integrity": "sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.10.0.tgz", + "integrity": "sha512-E24l90SxuJhytWJ0pTQydFT46Nk0Z+bsLKo/L8rtQSL93rQ6byd1V/QbDpHUTdLPOMsBCcYXZweADNCfOCmOAg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/scope-manager": "8.10.0", + "@typescript-eslint/types": "8.10.0", + "@typescript-eslint/typescript-estree": "8.10.0", + "@typescript-eslint/visitor-keys": "8.10.0", "debug": "^4.3.4" }, "engines": { @@ -4436,13 +4436,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", - "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.10.0.tgz", + "integrity": "sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1" + "@typescript-eslint/types": "8.10.0", + "@typescript-eslint/visitor-keys": "8.10.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4453,13 +4453,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz", - "integrity": "sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.10.0.tgz", + "integrity": "sha512-PCpUOpyQSpxBn230yIcK+LeCQaXuxrgCm2Zk1S+PTIRJsEfU6nJ0TtwyH8pIwPK/vJoA+7TZtzyAJSGBz+s/dg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.8.1", - "@typescript-eslint/utils": "8.8.1", + "@typescript-eslint/typescript-estree": "8.10.0", + "@typescript-eslint/utils": "8.10.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -4477,9 +4477,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", - "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.10.0.tgz", + "integrity": "sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4490,13 +4490,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", - "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.10.0.tgz", + "integrity": "sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/types": "8.10.0", + "@typescript-eslint/visitor-keys": "8.10.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4554,15 +4554,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", - "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.10.0.tgz", + "integrity": "sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1" + "@typescript-eslint/scope-manager": "8.10.0", + "@typescript-eslint/types": "8.10.0", + "@typescript-eslint/typescript-estree": "8.10.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4576,12 +4576,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", - "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.10.0.tgz", + "integrity": "sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/types": "8.10.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4644,9 +4644,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.2.tgz", - "integrity": "sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", + "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -4666,8 +4666,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.2", - "vitest": "2.1.2" + "@vitest/browser": "2.1.3", + "vitest": "2.1.3" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -4676,13 +4676,13 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.2.tgz", - "integrity": "sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", + "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", "dev": true, "dependencies": { - "@vitest/spy": "2.1.2", - "@vitest/utils": "2.1.2", + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -4691,12 +4691,12 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.2.tgz", - "integrity": "sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", + "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", "dev": true, "dependencies": { - "@vitest/spy": "^2.1.0-beta.1", + "@vitest/spy": "2.1.3", "estree-walker": "^3.0.3", "magic-string": "^0.30.11" }, @@ -4704,7 +4704,7 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.2", + "@vitest/spy": "2.1.3", "msw": "^2.3.5", "vite": "^5.0.0" }, @@ -4718,9 +4718,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.2.tgz", - "integrity": "sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", + "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", "dev": true, "dependencies": { "tinyrainbow": "^1.2.0" @@ -4730,12 +4730,12 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.2.tgz", - "integrity": "sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", + "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", "dev": true, "dependencies": { - "@vitest/utils": "2.1.2", + "@vitest/utils": "2.1.3", "pathe": "^1.1.2" }, "funding": { @@ -4743,12 +4743,12 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.2.tgz", - "integrity": "sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", + "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.2", + "@vitest/pretty-format": "2.1.3", "magic-string": "^0.30.11", "pathe": "^1.1.2" }, @@ -4757,9 +4757,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.2.tgz", - "integrity": "sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", + "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", "dev": true, "dependencies": { "tinyspy": "^3.0.0" @@ -4769,12 +4769,12 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.2.tgz", - "integrity": "sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", + "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.2", + "@vitest/pretty-format": "2.1.3", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -8107,15 +8107,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -9098,9 +9089,9 @@ } }, "node_modules/i18next": { - "version": "23.15.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.15.2.tgz", - "integrity": "sha512-zcPSWzCvw6uKnuYHIqs4W7hTuB9e3AFcSdZgvCWoPXIZsBjBd4djN2/2uOHIB+1DFFkQnMBXvhNg7J3WyCuywQ==", + "version": "23.16.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.0.tgz", + "integrity": "sha512-Ni3CG6c14teOogY19YNRl+kYaE/Rb59khy0VyHVn4uOZ97E2E/Yziyi6r3C3s9+wacjdLZiq/LLYyx+Cgd+FCw==", "funding": [ { "type": "individual", @@ -10273,13 +10264,10 @@ } }, "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true }, "node_modules/lru-cache": { "version": "5.1.1", @@ -10571,9 +10559,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/msw": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.10.tgz", - "integrity": "sha512-bDQh9b25JK4IKMs5hnamwAkcNZ9RwA4mR/4YcgWkzwHOxj7UICbVJfmChJvY1UCAAMraPpvjHdxjoUDpc3F+Qw==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.11.tgz", + "integrity": "sha512-TVEw9NOPTc6ufOQLJ53234S9NBRxQbu7xFMxs+OCP43JQcNEIOKiZHxEm2nDzYIrwccoIhUxUf8wr99SukD76A==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -10589,10 +10577,10 @@ "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", + "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", + "type-fest": "^4.26.1", "yargs": "^17.7.2" }, "bin": { @@ -10620,9 +10608,9 @@ "dev": true }, "node_modules/msw/node_modules/type-fest": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.21.0.tgz", - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", "dev": true, "engines": { "node": ">=16" @@ -11738,9 +11726,9 @@ "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" }, "node_modules/react-i18next": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.2.tgz", - "integrity": "sha512-z0W3/RES9Idv3MmJUcf0mDNeeMOUXe+xoL0kPfQPbDoZHmni/XsIoq5zgT2MCFUiau283GuBUK578uD/mkAbLQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.3.tgz", + "integrity": "sha512-BlO1P+oLKjjIxDBQ0GkAIMacgjfMbnvops+3Y5nZXF7UJ99v4KCWr0Na1azJXC8AMiNWp4kgUcFCJM7U9ZsUDg==", "dependencies": { "@babel/runtime": "^7.25.0", "html-parse-stringify": "^3.0.1" @@ -12547,9 +12535,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.79.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.5.tgz", - "integrity": "sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g==", + "version": "1.80.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.2.tgz", + "integrity": "sha512-9wXY8cGBlUmoUoT+vwOZOFCiS+naiWVjqlreN9ar9PudXbGwlMTFwCR5K9kB4dFumJ6ib98wZyAObJKsWf1nAA==", "dev": true, "dependencies": { "@parcel/watcher": "^2.4.1", @@ -13300,9 +13288,9 @@ } }, "node_modules/terser": { - "version": "5.34.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", - "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -13456,9 +13444,9 @@ "dev": true }, "node_modules/tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true }, "node_modules/tinypool": { @@ -13996,9 +13984,9 @@ } }, "node_modules/vite": { - "version": "5.4.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", - "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "version": "5.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", + "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==", "dev": true, "dependencies": { "esbuild": "^0.21.3", @@ -14055,9 +14043,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.2.tgz", - "integrity": "sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", + "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -14076,18 +14064,18 @@ } }, "node_modules/vitest": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.2.tgz", - "integrity": "sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", + "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", "dev": true, "dependencies": { - "@vitest/expect": "2.1.2", - "@vitest/mocker": "2.1.2", - "@vitest/pretty-format": "^2.1.2", - "@vitest/runner": "2.1.2", - "@vitest/snapshot": "2.1.2", - "@vitest/spy": "2.1.2", - "@vitest/utils": "2.1.2", + "@vitest/expect": "2.1.3", + "@vitest/mocker": "2.1.3", + "@vitest/pretty-format": "^2.1.3", + "@vitest/runner": "2.1.3", + "@vitest/snapshot": "2.1.3", + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", "chai": "^5.1.1", "debug": "^4.3.6", "magic-string": "^0.30.11", @@ -14098,7 +14086,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.2", + "vite-node": "2.1.3", "why-is-node-running": "^2.3.0" }, "bin": { @@ -14113,8 +14101,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.2", - "@vitest/ui": "2.1.2", + "@vitest/browser": "2.1.3", + "@vitest/ui": "2.1.3", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index 0b36802..972c45c 100644 --- a/package.json +++ b/package.json @@ -31,20 +31,20 @@ "@fortawesome/fontawesome-svg-core": "6.6.0", "@fortawesome/free-solid-svg-icons": "6.6.0", "@fortawesome/react-fontawesome": "0.2.2", - "@ionic/react": "8.3.2", - "@ionic/react-router": "8.3.2", - "@tanstack/react-query": "5.59.9", - "@tanstack/react-query-devtools": "5.59.9", + "@ionic/react": "8.3.3", + "@ionic/react-router": "8.3.3", + "@tanstack/react-query": "5.59.15", + "@tanstack/react-query-devtools": "5.59.15", "axios": "1.7.7", "classnames": "2.5.1", "dayjs": "1.11.13", "formik": "2.4.6", - "i18next": "23.15.2", + "i18next": "23.16.0", "i18next-browser-languagedetector": "8.0.0", "lodash": "4.17.21", "react": "18.3.1", "react-dom": "18.3.1", - "react-i18next": "15.0.2", + "react-i18next": "15.0.3", "react-router": "5.3.4", "react-router-dom": "5.3.4", "uuid": "10.0.0", @@ -53,31 +53,31 @@ "devDependencies": { "@capacitor/cli": "6.1.2", "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "6.5.0", + "@testing-library/jest-dom": "6.6.2", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", - "@types/lodash": "4.17.10", + "@types/lodash": "4.17.11", "@types/react": "18.3.11", "@types/react-dom": "18.3.1", "@types/react-router": "5.1.20", "@types/react-router-dom": "5.3.3", "@types/uuid": "10.0.0", - "@typescript-eslint/eslint-plugin": "8.8.1", - "@typescript-eslint/parser": "8.8.1", + "@typescript-eslint/eslint-plugin": "8.10.0", + "@typescript-eslint/parser": "8.10.0", "@vitejs/plugin-legacy": "5.4.2", "@vitejs/plugin-react": "4.3.2", - "@vitest/coverage-v8": "2.1.2", + "@vitest/coverage-v8": "2.1.3", "cypress": "13.15.0", "eslint": "8.57.0", "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-react-refresh": "0.4.12", "jsdom": "25.0.1", - "msw": "2.4.10", - "sass": "1.79.5", - "terser": "5.34.1", + "msw": "2.4.11", + "sass": "1.80.2", + "terser": "5.36.0", "typescript": "5.5.4", - "vite": "5.4.8", - "vitest": "2.1.2" + "vite": "5.4.9", + "vitest": "2.1.3" } } diff --git a/src/App.tsx b/src/App.tsx index e460113..550f3ab 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -11,7 +11,7 @@ import ScrollProvider from 'common/providers/ScrollProvider'; import Toasts from 'common/components/Toast/Toasts'; import AppRouter from 'common/components/Router/AppRouter'; -import './theme/main.scss'; +import './theme/main.css'; setupIonicReact(); diff --git a/src/theme/fonts.scss b/src/theme/fonts.css similarity index 100% rename from src/theme/fonts.scss rename to src/theme/fonts.css diff --git a/src/theme/grid.scss b/src/theme/grid.css similarity index 99% rename from src/theme/grid.scss rename to src/theme/grid.css index 9032c36..7e6d239 100644 --- a/src/theme/grid.scss +++ b/src/theme/grid.css @@ -1,4 +1,4 @@ -// Flexbox and grid styles inspired by Tailwind +/* Flexbox and grid styles inspired by Tailwind */ :root { .order-1 { order: 1; diff --git a/src/theme/main.scss b/src/theme/main.css similarity index 79% rename from src/theme/main.scss rename to src/theme/main.css index eff6f59..4c8bb9f 100644 --- a/src/theme/main.scss +++ b/src/theme/main.css @@ -26,13 +26,13 @@ @import '@ionic/react/css/palettes/dark.system.css'; /* Custom app CSS */ -// normalize / reset -@import './normalize.scss'; -// variables / Ionic variable overrides -@import './variables.scss'; -// fonts -@import './fonts.scss'; -// typography -@import './typography.scss'; -// flexbox and grid -@import './grid.scss'; +/* normalize / reset */ +@import './normalize.css'; +/* variables / Ionic variable overrides */ +@import './variables.css'; +/* fonts */ +@import './fonts.css'; +/* typography */ +@import './typography.css'; +/* flexbox and grid */ +@import './grid.css'; diff --git a/src/theme/normalize.css b/src/theme/normalize.css new file mode 100644 index 0000000..148af00 --- /dev/null +++ b/src/theme/normalize.css @@ -0,0 +1,5 @@ +/* Normalization (reset) styles for the app */ +:root { + /* line height */ + line-height: 1.5; +} diff --git a/src/theme/normalize.scss b/src/theme/normalize.scss deleted file mode 100644 index de96044..0000000 --- a/src/theme/normalize.scss +++ /dev/null @@ -1,5 +0,0 @@ -// Normalization (reset) styles for the app -:root { - // line height - line-height: 1.5; -} diff --git a/src/theme/typography.scss b/src/theme/typography.css similarity index 91% rename from src/theme/typography.scss rename to src/theme/typography.css index c35c0f7..d51a4eb 100644 --- a/src/theme/typography.scss +++ b/src/theme/typography.css @@ -1,6 +1,6 @@ -// Typography styles inspired by Tailwind +/* Typography styles inspired by Tailwind */ :root { - // font size + /* font size */ .text-xs { font-size: 0.75rem; line-height: 1rem; @@ -34,7 +34,7 @@ line-height: 2.5rem; } - // font weight + /* font weight */ .font-thin { font-weight: 100; } @@ -63,7 +63,7 @@ font-weight: 900; } - // word break + /* word break */ .break-normal { overflow-wrap: normal; word-break: normal; @@ -78,7 +78,7 @@ word-break: keep-all; } - // text transform + /* text transform */ .capitalize { text-transform: capitalize; } diff --git a/src/theme/variables.scss b/src/theme/variables.css similarity index 90% rename from src/theme/variables.scss rename to src/theme/variables.css index 3c90803..7e2c34a 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.css @@ -2,7 +2,7 @@ http://ionicframework.com/docs/theming/ */ :root { - // media breakpoints + /* media breakpoints */ --ls-breakpoint-xs: 0px; --ls-breakpoint-sm: 576px; --ls-breakpoint-md: 768px; From 52c0649418a41b8387aaea0d586557a260ab6694 Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Sun, 20 Oct 2024 05:59:56 -0400 Subject: [PATCH 2/8] upgraded deps --- package-lock.json | 40 ++++++++++++++++++++-------------------- package.json | 10 +++++----- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 24084f3..bf9e772 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "classnames": "2.5.1", "dayjs": "1.11.13", "formik": "2.4.6", - "i18next": "23.16.0", + "i18next": "23.16.1", "i18next-browser-languagedetector": "8.0.0", "lodash": "4.17.21", "react": "18.3.1", @@ -44,7 +44,7 @@ "@testing-library/jest-dom": "6.6.2", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", - "@types/lodash": "4.17.11", + "@types/lodash": "4.17.12", "@types/react": "18.3.11", "@types/react-dom": "18.3.1", "@types/react-router": "5.1.20", @@ -53,16 +53,16 @@ "@typescript-eslint/eslint-plugin": "8.10.0", "@typescript-eslint/parser": "8.10.0", "@vitejs/plugin-legacy": "5.4.2", - "@vitejs/plugin-react": "4.3.2", + "@vitejs/plugin-react": "4.3.3", "@vitest/coverage-v8": "2.1.3", "cypress": "13.15.0", "eslint": "8.57.0", "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "5.0.0", - "eslint-plugin-react-refresh": "0.4.12", + "eslint-plugin-react-refresh": "0.4.13", "jsdom": "25.0.1", "msw": "2.4.11", - "sass": "1.80.2", + "sass": "1.80.3", "terser": "5.36.0", "typescript": "5.5.4", "vite": "5.4.9", @@ -4247,9 +4247,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-jzqWo/uQP/iqeGGTjhgFp2yaCrCYTauASQcpdzESNCkHjSprBJVcZP9KG9aQ0q+xcsXiKd/iuw/4dLjS3Odc7Q==", + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.12.tgz", + "integrity": "sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==", "dev": true }, "node_modules/@types/minimist": { @@ -4625,9 +4625,9 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", - "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", "dev": true, "dependencies": { "@babel/core": "^7.25.2", @@ -7484,9 +7484,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.12.tgz", - "integrity": "sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.13.tgz", + "integrity": "sha512-f1EppwrpJRWmqDTyvAyomFVDYRtrS7iTEqv3nokETnMiMzs2SSTmKRTACce4O2p4jYyowiSMvpdwC/RLcMFhuQ==", "dev": true, "peerDependencies": { "eslint": ">=7" @@ -9089,9 +9089,9 @@ } }, "node_modules/i18next": { - "version": "23.16.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.0.tgz", - "integrity": "sha512-Ni3CG6c14teOogY19YNRl+kYaE/Rb59khy0VyHVn4uOZ97E2E/Yziyi6r3C3s9+wacjdLZiq/LLYyx+Cgd+FCw==", + "version": "23.16.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.1.tgz", + "integrity": "sha512-H73h/H7BN7PI38Sq9XsOXzWFBH6mtyCYFiUMVtd9BxiYNDWPPIzKcBmDrqhjKbw3IXP5j6JoSW4ugJlaZuOvKw==", "funding": [ { "type": "individual", @@ -12535,9 +12535,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.80.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.2.tgz", - "integrity": "sha512-9wXY8cGBlUmoUoT+vwOZOFCiS+naiWVjqlreN9ar9PudXbGwlMTFwCR5K9kB4dFumJ6ib98wZyAObJKsWf1nAA==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.3.tgz", + "integrity": "sha512-ptDWyVmDMVielpz/oWy3YP3nfs7LpJTHIJZboMVs8GEC9eUmtZTZhMHlTW98wY4aEorDfjN38+Wr/XjskFWcfA==", "dev": true, "dependencies": { "@parcel/watcher": "^2.4.1", diff --git a/package.json b/package.json index 972c45c..882108b 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "classnames": "2.5.1", "dayjs": "1.11.13", "formik": "2.4.6", - "i18next": "23.16.0", + "i18next": "23.16.1", "i18next-browser-languagedetector": "8.0.0", "lodash": "4.17.21", "react": "18.3.1", @@ -56,7 +56,7 @@ "@testing-library/jest-dom": "6.6.2", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", - "@types/lodash": "4.17.11", + "@types/lodash": "4.17.12", "@types/react": "18.3.11", "@types/react-dom": "18.3.1", "@types/react-router": "5.1.20", @@ -65,16 +65,16 @@ "@typescript-eslint/eslint-plugin": "8.10.0", "@typescript-eslint/parser": "8.10.0", "@vitejs/plugin-legacy": "5.4.2", - "@vitejs/plugin-react": "4.3.2", + "@vitejs/plugin-react": "4.3.3", "@vitest/coverage-v8": "2.1.3", "cypress": "13.15.0", "eslint": "8.57.0", "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "5.0.0", - "eslint-plugin-react-refresh": "0.4.12", + "eslint-plugin-react-refresh": "0.4.13", "jsdom": "25.0.1", "msw": "2.4.11", - "sass": "1.80.2", + "sass": "1.80.3", "terser": "5.36.0", "typescript": "5.5.4", "vite": "5.4.9", From 12f7eafdd894f2c9668a6d9e97e7caf7c45e384f Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Mon, 21 Oct 2024 10:49:42 -0400 Subject: [PATCH 3/8] initial error boundary --- package-lock.json | 12 +++ package.json | 1 + src/App.tsx | 34 ++++---- .../ErrorBoundary/ErrorFallback.scss | 28 +++++++ .../ErrorBoundary/ErrorFallback.tsx | 78 +++++++++++++++++++ src/common/components/Icon/Icon.tsx | 3 + src/common/providers/ConfigProvider.tsx | 10 ++- 7 files changed, 148 insertions(+), 18 deletions(-) create mode 100644 src/common/components/ErrorBoundary/ErrorFallback.scss create mode 100644 src/common/components/ErrorBoundary/ErrorFallback.tsx diff --git a/package-lock.json b/package-lock.json index bf9e772..ebf34e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "lodash": "4.17.21", "react": "18.3.1", "react-dom": "18.3.1", + "react-error-boundary": "4.1.2", "react-i18next": "15.0.3", "react-router": "5.3.4", "react-router-dom": "5.3.4", @@ -11720,6 +11721,17 @@ "react": "^18.3.1" } }, + "node_modules/react-error-boundary": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.1.2.tgz", + "integrity": "sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "peerDependencies": { + "react": ">=16.13.1" + } + }, "node_modules/react-fast-compare": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", diff --git a/package.json b/package.json index 882108b..68ef9e1 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "lodash": "4.17.21", "react": "18.3.1", "react-dom": "18.3.1", + "react-error-boundary": "4.1.2", "react-i18next": "15.0.3", "react-router": "5.3.4", "react-router-dom": "5.3.4", diff --git a/src/App.tsx b/src/App.tsx index 550f3ab..51fde89 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,7 +1,9 @@ import { IonApp, setupIonicReact } from '@ionic/react'; import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { ErrorBoundary } from 'react-error-boundary'; +import ErrorFallback from 'common/components/ErrorBoundary/ErrorFallback'; import ConfigContextProvider from './common/providers/ConfigProvider'; import { queryClient } from 'common/utils/query-client'; import AuthProvider from 'common/providers/AuthProvider'; @@ -22,21 +24,23 @@ setupIonicReact(); */ const App = (): JSX.Element => ( - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + ); diff --git a/src/common/components/ErrorBoundary/ErrorFallback.scss b/src/common/components/ErrorBoundary/ErrorFallback.scss new file mode 100644 index 0000000..000d930 --- /dev/null +++ b/src/common/components/ErrorBoundary/ErrorFallback.scss @@ -0,0 +1,28 @@ +.ls-error-fallback-page { + &__container { + max-width: 576px; + } + + &__content { + display: flex; + flex-direction: column; + align-items: center; + } + + &__icon { + margin-top: 4rem; + margin-bottom: 4rem; + } + + &__title { + margin-bottom: 2rem; + } + + &__button-row { + margin-top: 4rem; + + ion-button { + min-width: 12rem; + } + } +} diff --git a/src/common/components/ErrorBoundary/ErrorFallback.tsx b/src/common/components/ErrorBoundary/ErrorFallback.tsx new file mode 100644 index 0000000..72d8d58 --- /dev/null +++ b/src/common/components/ErrorBoundary/ErrorFallback.tsx @@ -0,0 +1,78 @@ +import { IonButton, IonButtons, IonContent, IonFooter, IonPage, IonToolbar } from '@ionic/react'; +import { FallbackProps } from 'react-error-boundary'; +import { useTranslation } from 'react-i18next'; +import { ValidationError } from 'yup'; +import { AxiosError } from 'axios'; + +import { PropsWithTestId } from '../types'; +import './ErrorFallback.scss'; +import Header from '../Header/Header'; +import Container from '../Content/Container'; +import Icon, { IconName } from '../Icon/Icon'; +import ButtonRow from '../Button/ButtonRow'; + +interface ErrorFallbackProps extends FallbackProps, PropsWithTestId {} + +const ErrorFallback = ({ + error, + resetErrorBoundary, + testid = 'page-error-fallback', +}: ErrorFallbackProps): JSX.Element => { + const { t } = useTranslation(); + + let title; + let message; + if (error instanceof ValidationError) { + console.log(`ValidationError::${error}`); + title = 'Validation Error'; + message = error.errors.reduce((msg, error) => `${msg} ${error}`); + } else if (error instanceof AxiosError) { + console.log(`AxiosError::${error}`); + title = error.status ?? error.code; + message = `${error.message}. ${error.config?.url}`; + } else { + console.log(`Error::${error}`); + title = error.name ?? 'Error'; + message = error.message ?? error; + } + + return ( + +
+ + + +
+ + +
+ {title} +
+ +
{message}
+ + + resetErrorBoundary()}> + Try Again + + +
+
+
+ + + + resetErrorBoundary()}>Try Again + + + + + ); +}; + +export default ErrorFallback; diff --git a/src/common/components/Icon/Icon.tsx b/src/common/components/Icon/Icon.tsx index 2407ff8..957289d 100644 --- a/src/common/components/Icon/Icon.tsx +++ b/src/common/components/Icon/Icon.tsx @@ -7,6 +7,7 @@ import { faCalendar, faCircleInfo, faEnvelope, + faFaceSurprise, faHouse, faLink, faMapLocationDot, @@ -46,6 +47,7 @@ export enum IconName { Calendar = 'calendar', CircleInfo = 'circle_info', Envelope = 'envelope', + FaceSurprise = 'face_surprise', House = 'house', Link = 'link', MapLocationDot = 'map_location_dot', @@ -70,6 +72,7 @@ const icons: Record = { calendar: faCalendar, circle_info: faCircleInfo, envelope: faEnvelope, + face_surprise: faFaceSurprise, house: faHouse, link: faLink, map_location_dot: faMapLocationDot, diff --git a/src/common/providers/ConfigProvider.tsx b/src/common/providers/ConfigProvider.tsx index 8860599..e456506 100644 --- a/src/common/providers/ConfigProvider.tsx +++ b/src/common/providers/ConfigProvider.tsx @@ -23,7 +23,7 @@ export interface Config { * @see {@link https://github.com/jquense/yup | Yup} */ const configSchema: ObjectSchema = object({ - VITE_BASE_URL_API: string().url().required(), + VITE_BASE_URL_API: string().url().required('${path} is required.'), VITE_BUILD_DATE: string().default('1970-01-01'), VITE_BUILD_TIME: string().default('00:00:00'), VITE_BUILD_TS: string().default('1970-01-01T00:00:00+0000'), @@ -63,8 +63,12 @@ const ConfigContextProvider = ({ children }: PropsWithChildren): JSX.Element => setConfig(validatedConfig); setIsReady(true); } catch (err) { - if (err instanceof ValidationError) throw new Error(`${err}::${err.errors}`); - if (err instanceof Error) throw new Error(`Configuration error: ${err.message}`); + if (err instanceof ValidationError) { + throw new Error( + `Configuration validation error. ${err.errors.reduce((msg, error) => `${msg} ${error}`)}`, + ); + } + if (err instanceof Error) throw new Error(`Configuration error. ${err.message}`); throw err; } }, []); From 63d5a2bdd69c50aa338062ef093895082e18bf48 Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Mon, 21 Oct 2024 12:08:59 -0400 Subject: [PATCH 4/8] rename page --- src/App.tsx | 4 +-- .../ErrorPage.scss} | 2 +- .../ErrorFallback.tsx => Error/ErrorPage.tsx} | 28 +++++++++---------- 3 files changed, 16 insertions(+), 18 deletions(-) rename src/common/components/{ErrorBoundary/ErrorFallback.scss => Error/ErrorPage.scss} (92%) rename src/common/components/{ErrorBoundary/ErrorFallback.tsx => Error/ErrorPage.tsx} (71%) diff --git a/src/App.tsx b/src/App.tsx index 51fde89..9e3c9df 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,7 +3,7 @@ import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { ErrorBoundary } from 'react-error-boundary'; -import ErrorFallback from 'common/components/ErrorBoundary/ErrorFallback'; +import ErrorPage from 'common/components/Error/ErrorPage'; import ConfigContextProvider from './common/providers/ConfigProvider'; import { queryClient } from 'common/utils/query-client'; import AuthProvider from 'common/providers/AuthProvider'; @@ -24,7 +24,7 @@ setupIonicReact(); */ const App = (): JSX.Element => ( - + diff --git a/src/common/components/ErrorBoundary/ErrorFallback.scss b/src/common/components/Error/ErrorPage.scss similarity index 92% rename from src/common/components/ErrorBoundary/ErrorFallback.scss rename to src/common/components/Error/ErrorPage.scss index 000d930..615a52f 100644 --- a/src/common/components/ErrorBoundary/ErrorFallback.scss +++ b/src/common/components/Error/ErrorPage.scss @@ -1,4 +1,4 @@ -.ls-error-fallback-page { +.ls-error-page { &__container { max-width: 576px; } diff --git a/src/common/components/ErrorBoundary/ErrorFallback.tsx b/src/common/components/Error/ErrorPage.tsx similarity index 71% rename from src/common/components/ErrorBoundary/ErrorFallback.tsx rename to src/common/components/Error/ErrorPage.tsx index 72d8d58..4d2d16e 100644 --- a/src/common/components/ErrorBoundary/ErrorFallback.tsx +++ b/src/common/components/Error/ErrorPage.tsx @@ -5,19 +5,19 @@ import { ValidationError } from 'yup'; import { AxiosError } from 'axios'; import { PropsWithTestId } from '../types'; -import './ErrorFallback.scss'; +import './ErrorPage.scss'; import Header from '../Header/Header'; import Container from '../Content/Container'; import Icon, { IconName } from '../Icon/Icon'; import ButtonRow from '../Button/ButtonRow'; -interface ErrorFallbackProps extends FallbackProps, PropsWithTestId {} +interface ErrorPageProps extends FallbackProps, PropsWithTestId {} -const ErrorFallback = ({ +const ErrorPage = ({ error, resetErrorBoundary, - testid = 'page-error-fallback', -}: ErrorFallbackProps): JSX.Element => { + testid = 'page-error', +}: ErrorPageProps): JSX.Element => { const { t } = useTranslation(); let title; @@ -37,26 +37,24 @@ const ErrorFallback = ({ } return ( - +
- -
+ +
-
- {title} -
+
{title}
-
{message}
+
{message}
- + resetErrorBoundary()}> Try Again @@ -75,4 +73,4 @@ const ErrorFallback = ({ ); }; -export default ErrorFallback; +export default ErrorPage; From f15858e610ba57178bb3aebc2828b7b50c755846 Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Mon, 21 Oct 2024 15:01:56 -0400 Subject: [PATCH 5/8] docs and translations --- src/common/components/Error/ErrorPage.tsx | 19 ++++++++++++------- src/common/providers/ConfigProvider.tsx | 9 +++++++-- .../utils/i18n/resources/en/common.json | 7 ++++++- .../utils/i18n/resources/es/common.json | 7 ++++++- .../utils/i18n/resources/fr/common.json | 7 ++++++- 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/common/components/Error/ErrorPage.tsx b/src/common/components/Error/ErrorPage.tsx index 4d2d16e..e511033 100644 --- a/src/common/components/Error/ErrorPage.tsx +++ b/src/common/components/Error/ErrorPage.tsx @@ -11,8 +11,16 @@ import Container from '../Content/Container'; import Icon, { IconName } from '../Icon/Icon'; import ButtonRow from '../Button/ButtonRow'; +/** + * Properties for the `ErrorPage` component. + */ interface ErrorPageProps extends FallbackProps, PropsWithTestId {} +/** + * The `ErrorPage` displays the attributes of an `Error`. + * @param {ErrorPageProps} props - Component properties. + * @returns {JSX.Element} JSX + */ const ErrorPage = ({ error, resetErrorBoundary, @@ -23,16 +31,13 @@ const ErrorPage = ({ let title; let message; if (error instanceof ValidationError) { - console.log(`ValidationError::${error}`); - title = 'Validation Error'; + title = t('error-validation'); message = error.errors.reduce((msg, error) => `${msg} ${error}`); } else if (error instanceof AxiosError) { - console.log(`AxiosError::${error}`); title = error.status ?? error.code; message = `${error.message}. ${error.config?.url}`; } else { - console.log(`Error::${error}`); - title = error.name ?? 'Error'; + title = error.name ?? t('error'); message = error.message ?? error; } @@ -56,7 +61,7 @@ const ErrorPage = ({ resetErrorBoundary()}> - Try Again + {t('label.try-again')}
@@ -65,7 +70,7 @@ const ErrorPage = ({ - resetErrorBoundary()}>Try Again + resetErrorBoundary()}>{t('label.try-again')} diff --git a/src/common/providers/ConfigProvider.tsx b/src/common/providers/ConfigProvider.tsx index e456506..7276de4 100644 --- a/src/common/providers/ConfigProvider.tsx +++ b/src/common/providers/ConfigProvider.tsx @@ -1,5 +1,6 @@ import React, { PropsWithChildren, useEffect, useState } from 'react'; import { ObjectSchema, ValidationError, number, object, string } from 'yup'; +import { useTranslation } from 'react-i18next'; /** * The application configuration. The `value` provided by the `ConfigContext`. @@ -51,6 +52,7 @@ export const ConfigContext = React.createContext(undefined); * @returns {JSX.Element} JSX */ const ConfigContextProvider = ({ children }: PropsWithChildren): JSX.Element => { + const { t } = useTranslation(); const [isReady, setIsReady] = useState(false); const [config, setConfig] = useState(); @@ -65,12 +67,15 @@ const ConfigContextProvider = ({ children }: PropsWithChildren): JSX.Element => } catch (err) { if (err instanceof ValidationError) { throw new Error( - `Configuration validation error. ${err.errors.reduce((msg, error) => `${msg} ${error}`)}`, + `${t('error-configuration-validation')}. ${err.errors.reduce( + (msg, error) => `${msg} ${error}`, + )}`, ); } - if (err instanceof Error) throw new Error(`Configuration error. ${err.message}`); + if (err instanceof Error) throw new Error(`${t('error-configuration')}. ${err.message}`); throw err; } + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return ( diff --git a/src/common/utils/i18n/resources/en/common.json b/src/common/utils/i18n/resources/en/common.json index 8d6efbf..86ea17a 100644 --- a/src/common/utils/i18n/resources/en/common.json +++ b/src/common/utils/i18n/resources/en/common.json @@ -2,15 +2,20 @@ "confirm-prompt": "Are you sure?", "created": "created", "deleted": "deleted", + "error": "Error", + "error-configuration": "Configuration error", + "error-configuration-validation": "Configuration validation error", "error-no-data": "No data", "error-generic": "Uh oh", + "error-validation": "Validation Error", "ionic-playground": "Ionic Playground", "label": { "cancel": "Cancel", "delete": "Delete", "dismiss": "Dismiss", "edit": "Edit", - "save": "Save" + "save": "Save", + "try-again": "Try Again" }, "navigation": { "account": "Account", diff --git a/src/common/utils/i18n/resources/es/common.json b/src/common/utils/i18n/resources/es/common.json index d87a5a1..ef92083 100644 --- a/src/common/utils/i18n/resources/es/common.json +++ b/src/common/utils/i18n/resources/es/common.json @@ -2,15 +2,20 @@ "confirm-prompt": "Estas seguro?", "created": "creado", "deleted": "eliminado", + "error": "Error", + "error-configuration": "Error de configuración", + "error-configuration-validation": "Error de validación de configuración", "error-no-data": "Sin datos", "error-generic": "Un problema", + "error-validation": "Error de validación", "ionic-playground": "Proyecto Ionic", "label": { "cancel": "Cancelar", "delete": "Borrar", "dismiss": "Despedir", "edit": "Editar", - "save": "Guardar" + "save": "Guardar", + "try-again": "Intentar otra vez" }, "navigation": { "account": "Cuenta", diff --git a/src/common/utils/i18n/resources/fr/common.json b/src/common/utils/i18n/resources/fr/common.json index 5cf1d3d..62bc820 100644 --- a/src/common/utils/i18n/resources/fr/common.json +++ b/src/common/utils/i18n/resources/fr/common.json @@ -2,15 +2,20 @@ "confirm-prompt": "Es-tu sûr??", "created": "créé", "deleted": "supprimé", + "error": "Erreur", + "error-configuration": "Erreur de configuration", + "error-configuration-validation": "Erreur de validation de configuration", "error-no-data": "Aucune donnée", "error-generic": "Un problème", + "error-validation": "Erreur de validation", "ionic-playground": "Projet Ionic", "label": { "cancel": "Annuler", "delete": "Supprimer", "dismiss": "Rejeter", "edit": "Modifier", - "save": "Sauvegarder" + "save": "Sauvegarder", + "try-again": "Essayer à nouveau" }, "navigation": { "account": "Compte", From 034e5b9641be5b93aab5d38a6331990824ef928d Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Tue, 22 Oct 2024 06:32:51 -0400 Subject: [PATCH 6/8] error page image --- src/assets/img/face_surprise_melting.png | Bin 0 -> 141431 bytes src/common/components/Error/ErrorPage.tsx | 9 ++------- src/common/components/Icon/Icon.tsx | 3 --- 3 files changed, 2 insertions(+), 10 deletions(-) create mode 100644 src/assets/img/face_surprise_melting.png diff --git a/src/assets/img/face_surprise_melting.png b/src/assets/img/face_surprise_melting.png new file mode 100644 index 0000000000000000000000000000000000000000..48563b31639f80fd7b89655618320beac696752b GIT binary patch literal 141431 zcmeEs^;eYN7w!}=)X)+VLw5?2!VpSIBdD|@-Q7cXN%tTrDT2~1B}#V=jdXWh{e0K` zBko%Fhj*QKonOvb`|Nn0y`KnmRe5|IDjWa+fUl?^rwIUn{{DghP|Ux}smJ&=000cO zl$BLil$C`$IN5)&v@rt!*b;mbo+)%8sJo4{3N=e%74Vh#Jh9h=WRBw;qaKOW?{bx?qce`M!$1Hv9-(Pj|5YY=03b)ACEO z%$j=GWln{8#gwIq1JjV`2cUCHR{cW?KdYjmM{Je%<)s(->g&bLd+HXeK~tm}Q;u1v zC5b(un*A*1rtb=r^C!oV=uw&?Ig{U7vLYP~Jv!l2h95%WD1l%Qd4*!I(%n9xfwI#++or_@YcTGK6%m_t~xN z%QiWl5PfDoCoU8S-)W5C9;>bC+i@a^ohBR1rA=h87fLvdK_%3CCFz#cgN^pbtUUeR zrit}IQnBjWw=JUKHhg{kIw3QH`gtH`F5XO1=EvNk_#yCt`RU8oa35UA)coR`8xdc? z=(x@?ricjS1#VKy{?UHU;NtzWvF!sa?nI|3P&-}n-)F&gP!=OZZ;o3F$pkvO=TtnBe$yF2o_kV1PC$4*mnCba>v6!xD6|Mps9d35jg9<)h46 zWCE;O^@)g*v&ah8&Nus3hqTn~eEj{4q#EIIfhVu4K1jJV)&w5wZ%dc z`2hrhNI06}#~9Y@lV=6~j<*_hqBs~yD0MG5{~sUrOih z=Haybb+&}-qp~J<)6@EeX1_(p?hdEoa#Kocy^r2}K|**IkV$?V6?Jv688RHT1`zq; zg@nK(fmy|}UN_4uh~j&g!e%EKX?Qg(H;$LP>Kt zqBZhH=%0E}hTVZ+^$Q~5z9MLHdr__+wQ|$_jC_HUYUP}xkJft&CVYAzW4_yVbjU&L z+HQlB(@~b4#EPCl)5GG*@aNuTp51)$>Rs5o7jdRVIY>U>I}k%id-paiKLyEnGJRj7 zEVQ4r?2KYx@fy3`g%fFEJwX8A$mVnj1s2Td=ZF~{)zW9%0Yef%>_OvU%}k5mk?o~~ znu2M)EZi$4JjT!6{+`fbTU%zBaHU4;aH3mzxy+sEdNtYRF{wPYOY{D}>-iX=%@;3< z%^N=4^`>~9N#&qpd9oDT55xlOdTHk)o*Q%#%BxGamm@ina0xTi3$>sf<;0!bj(Ft| zb#Mvp#M6)u&xmZV)<#==zSgAb!X z!T$Hi2SgIf7*hSLk~d*=-(;t9s^7*nUwVkuuDUd0vyN5hp}NwNyPzg-WrzlOdRzjD zyAiMg%4hUCE2G$b*#uU2KjpTVu=qXPOV3FUEt}qI#9S{8x6a6fe>j>ZMo zzb-aCuI0$`;Yi8*f)XzU@Hc#QZr9!#w!QOvk@H9Lmb_&KZn_YzL&*T&8>?U@*dv%x!?1FBZkBy zg?Q@Q>&5L=kS{%}v2n7qyNK#D55bTd7x>SkrK58+qgp_x3A=PNf=r!nl0S^G7THuy zUWXQ(FTH84rHi67T)%p_yDn}ytvRp!Up(LI9G*U$Ep5j79!8MwPm5fV^q%~Tq7Apl zS1ro?5_a$-tNc^@hZ6e;;3KwFxI_2>b(tp)_ldqx@3eeF@?un4!dj}o1?N!`<_`#x zO?x;=s((EF&Yc7~Z7^&rdDvh^*jmGI2xgP>i_ix~9(PCA0qDo3;>41P z17Nn7eBzsb!YLn?n_OL4Rh@Smn>_r@npLg-IJX^}@Bg^|eypoAobrp&6(XVi41x0s z1FkN(oTlx?N+6uwu9Ew@*4Zd>7<(i|PeHU{B&~oC^-}eb0#qHS3?9KL0On+;rNbB-*>PyQdS&l(c09_ze&Rlor#nwj zw|HRF0AwBJo~AEjbA=p0v*s?EeRY0ic(~+gvVzu?(wz_l52`dkSVt`5KrVGs{a#Yg zI{}SgRd6z#3aO9bD$7Rz;92E=ZjuwsiR-L@GYXV8Wrfq!oQmUZ%WCEme*{zjKLaUc zeet(g_MM67v_^Dqz(}=&sDm1?k42msK4OUyYS0GM6^KU2we3ISgYpm_Dlp{d&c)Fs zt7l*@c>>h2-DC-M33*JN2uT1rz!Fdc&M&gsGz`c3a$@Oe*Ff%Gz!GgVQ%7#kYQ`&) z61mPCtRKB7seo&IM31plpcQm~*@^LsAd)VqAhZv*+U_IYyFLby?1phHGSxQ}5_1{xzo(?+Dq#Xkr<%a4h6o0Qm``0qjr%7sfpVILIQy)GHCcG~9-e zWdPk^9;7l&05H6Z4cV8+JWW4z&d!0EB&fRx8Ke&WPNvoZ0n8%bgOd3btUc&F@UuKI z@X@Sr%7DVq>v*nsDV)of4mBXlSdbt1P)JU=gCj2p1>#_HfoZxfdGaU*+8_cZ-Qmn2 zeq2JfX%aYn9x-5z(h!>282iu$el}}yE&3`HQ0e1A{p!Iak zU}9@iE#;2aJ6ylbC&PzK{0^8T2okkjIGhIV27RD`@L@^i=zn%9sdp{YCxEVbFobGi z1A9>h2#ZI%8wfifn$m$EOWPUo4dD6&fDaHxHsYXh zg5dYk!+aqr9 zO1t)fULx2D+YJ}_I51MQ{Wri4QyUK`9NdW0DT~DAONDdfrSGQpU|N`k1P|whyGRg* z3_fSs&?t>4mfSXQrrXbk3O-0Vfro<;yrYYOR%=kEB@j@V30g{!1*DNR16e&q{l?6) zk;(Xd=q-hrL8SNCq6R1^AK-k`>@0&^xBJxFcCT2r$@^lk=Kp8I{Lq>=B zpxU9+oQFvH03FFk!UM1Ci+qfIqvlTLE^L0?S4lm|L3R)Wf|juec<rpZEqmfsnvNv zcC-%8DAPwjp3w8NnTDu=;~yhSAY^30O7Ug!{eBLP`*i(*{Mf@e%JB6;0KFTy{b=*h zThaEe7DK)6=n+Cn*dh^Wj8Dzs``dqf>v}2!@}s?q`1Os+M%5cxSK>>MALtc9GWK|! zv;gpP*i%M}7TBc_Y6dV>HtdD3U4_^YDv`qJh7=^urz>OwWO~8uanSfXNGCn!QUJm2lolKEE4B0b9qKG}}Al=i>hRJ_L<7Zb$ec90v`-sK0MK_*;4&R==!@n#Oh# zhj%lK;|F{NIHqj|QLIHGSPDQtFv2^B9L%VR3XFgAPrJYOBModS`k9SnQx2!Z#ge*L z#X^J^Np4?MQ$rPBq`kth*1u--e2ZxPmINsIF$d)Uz+-W1v2TGd86o%)NK6cAipQ4< z6x86~AGE2;!DmFnm$X~&$pl65EGIjm(kzH4n0dhA_t+nx=NX=O1&U^<5qBg*0v{9R zxHi%YO2PPR<&`A<6zS%2nb$7XK~c8UW`!A4o<4eD?%O&6b=ic+%4=A{xJ!_qV8q za+6C>NKF3@^=#!tRYJx9N@j3;r}E($j2xi8&8GA1{#QrBl8UV^^7fIZ!kM_;F~|mG zqN=zx(&-bTt!oUM8id{)yDW5TuhBRJ@rJQ|7pq;djc(mP{3F659*QFYuizr2+Pv64 zsYevTltAf#uh_Pe(q}{pEtpo5d1oAGf-qI-8kj9{zXMoxhmB}g9InB77!-0l?MK4 zrp^zDd|gsz+SG;v%vDw>-%TITy9#^iH@wj_jRAmEGSWpqxf^ufK*zF<=)%QuIlc`9 z4S#$PFwY}j7&Dtgsm#$dv(&6swNc{}q)ASg^p;TRCv zgdaKSrYFLL@mUKHT#bZkBk>K|>*g)%XP;3Rv8(!R0vE509&Rn4QvHup9AMnL8#ql? z+wBPtCcn*fHgRT-JrOoRx|VRFOF|nNl=j7gTeX`u%*1TZ=r|rgO0w-3>9jwetA8VT z!-a^XR2O}GdSUl;>&zhe^-W$QZy;A(RLOw5Ns$`fx^_p?q)IrO*A1&d>&_)aq}IkS za!PFvdvFyP8DJ!i9X(Y+=g5$AeW`W@ER}=3-}ZO-jxjjl%Q|hXiD#hz>4Zps)kV}- z%1t1Y@Jv6#i9LXyAIB$QYKGY%L-&zCDGuMYPr;=yuZT)s2jx;@s=;J;7!ke{C2@f) z)&ab5M#8IG3CsBg#E2H^jKqQjlx%@q!;Q88F1Zx1o~(P;16d!WZd{ko?7cRW_p8;i z{&SEeilO_RsjPZ;RbJ2dwyR#A4E-3bQ%vnzpp#HI*&EUTepTB637@kV55elS{*c)T z{v>x~X*S9Vn=LiK6!?ZmdV#t=3%}C48-97;#9(*L3E+`-{9aX^t)_n(<6nY*Z@FW5 zFOCsJ9h2OQ^qzP|BrSM_?Z6ve+`c~+3n<)Dpgv%9TwBqjkAoBq0;saDkAF$&-iFs+ z?;oRn;0{X=tDjYnzy;GzOTI%S6}od4CQ4dzpiCMQpgExmF^%O2Di~5@M7m@pbgM~kObOi2#eFT6>Ff3b z_FB6n;Ws?8@5LZ>y|};(iQBs?X*x)NFdK1Ep1dc@XA``-EWE=CBOww)I8- zw}3|BCHZ;-*O>@Don>M$rDg-dWNE@Xui98; z>0oik{#Z@WxC*Xtw)*5*j8MlfQR2fIeX0ome8MJO7;sI+WFm3)8G(L9GE}iu#>vc?A_tGVeMW9nGo<$HVBu$gy}~H-9{QD(eALkIY*ycy1gYqj!$fP-u5b`h-Co_`Cio5L6D?rP6FfH zO+XokV!i%eNjWAAEAx?|NeJQ{D?r_0jjZHa6%-H;ha>$Q{lFHW{Pylz-<_1v zzyhp3+&Z%eyWIglzJXgmK8g0v%xLou?EBd1_SQHB3W6`*yA_cDekzCiuuz50Sr>_c z5=7V{cnK3Ru-|u}&QiIAv@HcZAn(Ajyw6st{|Wrx|6?lyD<^KqBz5tT)h2_^Eo5b~oz)W^=8;-^3UNsDR^|uu zY~-!;)OQH@RFmj)OGlymu!O-J<_y(UconxIt61cOPSt_#)jw5Zy&wm0sz2!%-&xgCy-1>bku04;e0}S!lS_F!sJx3ee&|P1 zF!J6)0P|`B&CF*gJz~>2C6D~wl=mB_&mNg5C4EkS9;Q?LXUK2Y{M8kc`1x9ZQ#gnJ_d^(WG=!CEH(qV!SC}R)29oJ)kXdW zqrA9n_{PObDWSWb9MzUD!xRF$zsN^K{6dTQ5lRaAO#hT>B;oN}h-h zjCen+E%yrD7~O;)k<;D}_ZL^|&13fh8Z4p)cm_YQYp*7~x6W1-RwCr2qC!Mrpx!`q z2ilFvExzC#q_nTw7@s$BK+Jgnx^l1l^|weU?=nFCmDjSzKwF_JxvU`5^X(~bI^dcd zi1hWbbkWok`cG@EbiI_3a~InT0m>B616!NfaulbQ#GpDvfFRE6V~4` zV%<6|f|}Hr+WY#AlkGWyXaxpR$d%y=PCwAS zjT!m$NzVM&^|@*1e7LToa~3=BUwXHr#+6lR^x`=Q3NUT?WqEx%Pz}4Cw2FIrT1-$I z@SKeLx^$u4m_U6WfT@h&Cm;<%&-Y>o4xV?7(hLp+wDagLDdwt;WXb2j-KwDl5<5#g zK!w>mLo5{QPQI#+TDDlD!EL@qE^Kf6PJF=Es~?c}xF;x&plQdsAXRSkR3wTO2v zwS6ZAg7o?zlUI>@j$^U!@!kpb{lp(23WVkdJ|%LvIv=LOK6?Sl5C_mxTFkB?@@c9) zN@9TrK~{*Td1p}VI7A{@-zD7RgtqUJc6g1jb_Ndz{8CZgJnj>RHmN%KQ)(-sMvT@T z%tuGxj&1b$Jx+hVT#q1s_%r6$(Fpv{ES3@{!v5dHF6Oh_yazX2t32M{5s1974{?S# zfoHJ05C*b)yRM}OJ#t^Xs8SaBnj(W?IY zi+QIL8k0B@tv8fDv zakI>Nqaj!p--y{emm(4f2QYwG=(NGaYk>?nf*3!*bq$F}{l^-YK3B-8mi^aN*UxWi zAOEXV42H)!%5;7ooNo%rZT+rqpPVVDt;-sZ62=?M+3Cg-3)@xLCkrZEBj6b!Nhc^P zVV5s>rH`a1h)eXsHQR95u+o3if&7UKZUn#I5cx?xZ^Q-8b_aKvEwru;G^DV{sftUA z?=v@gGi_)*ZYDXZdi;f1_YXY_2fO|X8DajDPBqOlk0nJOk>}T$vzXHdm^RNaAc02S zH)G_w$@gXrL+mK-g^)Fd5>bBRC|`-W|FJ)H#REQdiaF{v(oCp$B9l-Z*#23*&FSuzlV7xdm{zWH#TmY#! z(h9~VyH4=8(I$QRC+@sup7`u|NR-VvEUDL)Fiu*KJ69PfLHacbTvYJ=yA|xEn8C|U z^uhy8;atp8q85#lgPrT836+d**}{DJq)mTR<+m!gK+EI9A*0zB{(I%a10BMPcBQjp zt}Emkwb-ggS{qVHJj!CpzZ5dr-lwAq@?<1FVB1Hjns$u86cEb}9$cTDaO;^uf(3V?0%AyWTKw6T)!w? z&jPrVZpCt`>2$r@f>7^ik0k{uOCdE`EkXvElxHPY0SOyS@S*17?Tg7MslJt2-WaAX zix1%b0nb_9(^$@}#RBJ(k^rx8R0hL_0!)c> z59AQiDqXW{K`T6wpg_^xUdu#qH|i)(>W}$fYaJh%`=EDpeFxoeDDGdHFao;V@vAO} zb9u8xt|wV(-A_pf8vUJxl*B-~(6r7TNk?uH!-#gd!+H8@q7D*pH<$Vz2(uRyWYBKR zT1(wY=4`@Tg$S7~y3Pi}s7*x%rcyP{xV>1(IO*&pQQ8K5!xn3jp3smsY|JIKE5QPn!hGW_%d%56CkjY8q& z7_p(!=`IxF0vsCrgxpa&?W2emtoNWZMpQa-o5G=%ZD=N$GzZojRk?ZcGE{BJeo$pDXiUi$01m z^4abQJI|i*p{=CIgGW+-<2zx+5fnEIb$~BooMfwqM3n{l`PY*RNYJLu;QyiqSGpkw zuG;V2yIK>}lt3a0r=4z+s(W*KF9b9(_OGR@yXMt&e9qAacH28WvfCPW*YiHvA9;SP zBx8G?FO>ay$N5YsU8_4+lPpkvH-7BFEJ#o(c}5HRl%VO=3Swo@d8pQk z@1;+|j|eX!NsH}ds4)HjlOS?}SHdMov>ChM1*{;%V>Y29zj{}dT_z1K$JzqCFrxFz zImhNouBf*ji|IptgQ=B1H)g`Kl%0Q(^)eQ5+i|6C+cnW@mEm>%Inqr!P*08(?|NhKz4w7;@#0m!+o1S?;PHA zJXZ8>!ATY437igP>Q&r{`@WF*G2nC6pKZ~)&)+IS-@5zZXxU}p%ziF}+3?R|YZT*q zyye{A&scQBb$a~eX0*lclYl|LyZMc8o@pz!*1?qx&BN@$vl)6z-aNFowd{tfoK2zi zk~PZLwf4ft8g|)ti}jO{d|~uv_t`yd82r~&*LzkyUJ~8qmghXJy_obGL>RR|^FO95 z{1&M+gpJe%0B*ct)^v=VD&=>&TgVkk2U9(?r|Nd}c z+O z3>G|2U>21H{-RJmCVr7`TgHmOnP=FTz~h73^sMf$pm`g?GslFrUJWsd z&D)5r)bGdio;!6XCp>lVM3{F$bLFz#FU5~`&k|=eaod=K_(j|xAIIpf_bw|_Y4fK7 zbzKfn_%XJ~ob&kuEdLA!$_*Sb-S&BcLwJkF1+^UusOnl?k` zs>tg}Xn13U{M-y$1k*&-8&<@T_E|M(gCFawE+FB(Cq1hS`&nYzce5(rKyxKN5n7Tb z0IU__wNF3Bb+X<3!6WsE@DgFaz6I)Ib)0_XLLs*SgXx-v#sl=PoYWkLqp_vq5O@6# zO^|=1?^da!p9Hrvo&+{__h^zheZSGWJE4+D>=MFwMm{q7X=nI^qUjQe{4q5!7H$U< zoCZ_vW8k05gf;~%!z@GzNM+SUq1IkBve{A6OV5kkhWA<7P23kVx25=GYsE?AVT959 zB{^PuD}Hkx*94!ZP@a;x%w9_Ar=d9#M&9_MlZ2<5OP{hEv{J~vS9tVGxyuu>KS8Nt zF<`jw3EVc-JY+pwI?N|9BIej|*(xvg7FE5QwlI8D>q6=+Sg9@?Y!d3`gD#nAEis6D zZ&p=VJKf#>4)y3MVC>bl5! z&#$%`zvcApM+XwW}!Dn_^JmhxBfg}Rqf+rb<#xjba|S#7d@FhGmQdRn8H|3CCQiz(t=iUf^Md1no95oG zKW4H~mhaNh=}}wd9Cp)^fFE5bt(RtwlUt z$bG60Z?*id&G(zPE9e?$2ig8nlqGVH330=lq%hS=|A*DM`@LI3AKXfH6ycZr$?mw- zPnnlA5cu_7P}r~&JLF+zRl4h4K!++y|L>GSok&q{7j+c%wU(Fo_BdTU+tkwD+50j4jPtx<1%5S+wFrd>&zd+$+{iCcUbfgR{|F?+`OBd#>b;> z&%T24eRpT>gQ z|I4j2YyXF8c^*!;WmR?hJQ35_$4>9cM79sK-U`m$H3IdkAsGu;e*+D(X&F-->GVh+ z2IOhSs2i0`&AMf)xpCH#bO-D+0~MCUTd#aK{FJ}1F5P$^hR#-+E)q3#0Ps4oAU%A7x zl^S1`x-=G6RcItw353b02D+3gC*TErl?T{XTn3=$=zM^)JL|FSwMr)2jgZqOvFt}+ z62!JCIY+$;$CGIt0Fm74R+pM-=jeI**Et}ko~RR;S}EGW^n{zs!*jef_wK5gi`KnO zc)_Ab`ah4cuD`tSx8C^7>osak=e%~p`_MKi75&^DuuH1V*7y9k&wOp_>D_0LE^MOh z(G$csT(q9>~~0~C+lB-?;TBzI9oGX_^Efi z-ZWswG&vs*>69y()2!Zn#edNV!kOI=*y_70(JCxPvbVV1)XozoP*#16t6Uc-*u==L z1fH!U7v@&D$Aav_Oq7NQq~{Z%U~ymH+nzt>Ql=OA{%bTwcf(7< zZaw@ytQyl=#+Rw+dsh4hbQpo}?sM{3sZdcvtR}?D0Ox`D#K)c*E;AV_U@e3vg>lB7 zHDg&q{~N&ViF)Oy0^XnCba7zL_r?j0`GVrwZyCR9O!m@`PO}d_YL`EODNMK#C$8_{ z7BRcpo-Ih){WaBcraZ&>wa2$d2C_Og(pqiqW(Z)XC+MB4j7l3Zo2G!&Y9JGmQBQWC|b4n=m1?0L^&6gQwJjW*7m-;d2y2K zoiS=CF5zVy3~_wN1a`OehU}|i1Pt*x@X-l+o5JE79!=<3%bVW;^Mq@d0m5i~= z0`9!_P8$D2kj2?q%aQcWh2N&<&v$&4l#{j~k0p5VL%@_@YSYw=>RW(o#wWyEHHwzr z))-1)w;hgi{S)SFrKd#^VPo7r=}MG%bQG{!X5DwZE*1tpdZK16mdeZ!$__Mp=kpn_f@H+fGgegI^aihhgf| zY=7ktGOL>oiQ>3)dS0WccCSVD`27#pHs2B(U&gk-0EGHK&ABd3B{$ENxIO8mzVCa& zJ6}&6WJ;5)RSy!qERJkZy9K9FCn;GpK=9%)hITOs+yX+y159DscpVbZfF+DiWR7JA zo6UBqHH>tw6nE^@wM9bJn)$GRikk4EsSm{kjcWHddub>dTvYL@J;in<4loQ_Hzon;UKvbK8y65jVt7^TIFbn%j~} z$S5qL(tT=88wZfSruvny6z}Xfo^VcRk-{2!foUFP2?}5!avE6*>K+++hBZH!n&o%& zU(bv1LqWx^_qho~Q8!$TSP9$d>HQY1JhU#V4f zl3i+V?`%E9p69IUU1{jc|D}<-*{U(OKrgp4dfKaL%i?rVZiWo5>li`mnnODONgU9}wDsw`V)@YUSO-Ci^1d z6bcmw7jgTNErgeEVOi{}I<9PVNB|Y$MD1vP#c6apI^Pl>bCXE5<}6G-!|;oEXoyXA zpyFS%jfI3O?biPo0j{LUVo+hnXNXcq2ook^@c@$uD@|oyhowlpEF|NvPF|yv?%;Pc zcNTVw(KX+vq`o;#^jn#sYd)u;6MJvY6vPY&J;3ohj;Ts-dcZ!tXRYu#wIrbQB^Lhz zbdCJ9rdJ>Qy}5`85SAxZ0~*9=S~SI$n8v4~#igSCJ00$Gi$nC)C@ZUNdIVgO zxzrQqR!*Z>O}&?pR;IL@;_@%*G>CV4r2Pxc`#0 zO3Z@=$sDvc8CczHSK5dBev*d^?oqI?V$9W3x#7q5UC=%;PX;;3Llk>T7R*!~QvtR@ z0iR;Et1}4;20wnP5#*2(PSRB;NzJS2X4W?FxNFAxQ$TVo9;z@)1qDhAec2^gO}pM& zlzr0s?9bY!mTuO-y85T+kz#)I%lH!qo-aA< z0=bE0bo#ZYW-tLM9{P0|zH`cb9KZW@>Jlz`Pj4fj6ORjV_}jUO{o}_))D9;quiyUm zFP$$k?=!GW*IX)iA)axfZs6sjyQEaSP?n^6FxxQj`Mi#$3BLDb>&=4X<~kz0V#zYX zxGBIsBSaofSl3a1Kok!WdO35XiqTgfk@k_*?hIzZ`Sv}5|7kN;IQG2a$60=e*hk52 z7cz)at2q!anHyW0imcWyWR!(YboxB8X0g$9JDQ_0j#v4xq-BnsN4l&XnvH3p{7Oa5 z^}>9=)o#niDq8Uo>ns1}q=HI>zHqscNi@BXU@Y(P>>n=nm@INOgb-B7?Yc{ks%mdm z%KMf#>$Kdw?GNt37pC@qT^I3aa)a|!<=)gXI{(}IIEj_!7*2k!r-7D6MCR8cyYiY2 z;SaCKxxA7~zckp_V+o2p`m17H$Ez(tbpzH)x8`y;?z8%X`V)8?D}JDcEY40w?^P_% zAN#9;oQO;Px65Z=27AYxSD+o9o#nlazg;Gi9#tSqGtdSDIzP&T%W)hMy?(Sjmr26E z&9Ko`-n!iBO>sQVJ-8-1eRDH<^q@9->%#YQ+3~#8Etu5Q7-(2V`_-)CsKxip z-a9iG$d5cPy?-j2$5y?n(s$9&MaXf+qQq1<_DKrC?8d-e@#c<1xNf_SP0Az0X^^KmI+N#Q z5yZNhuxywVs9-P)Ic%cvHhy#`X_C=<*9K-X_5Pj1=C25~8P}23#mk9-U##tiLqS&n zihYtM`J1KF;HLZgTinS?Iicxrs)x!!slH@3frpS)#aN0+9JbWuP~~AO){-|!_aO9o z?wfl#XWEs z|BPqA<`%_s;}9Pv1?P%+c|=OrR?IRxQO_<5UVjCDWVfVsE!F^3=sS&b=s`cIOTD{S4(o7tSzEmX*=*`l+w*go|J5t2@=BYP zzMu5vG@_CH7LX&8hOu9}gf-$DU*4I}oYs>vRN_>Kog1xU&v&< zCaB*Y&QiFLjU!4n(yYtiO~QvDRtaKr?W=`)^G70%-<_dfz{P+*B#lgd)Da*v2$1=G3hW}vhq@zx9Cobn$e~!uGUsC1mTci z(+bi{s&^F&2-^*P(LW^>BJQM4g^V=Y`bBHe0H}DBx6V~U^phmz{wJRC z&l zBZ6YH7Ybo*NYY;Kt(vub+6(98j*^nt%)$<;kuP~K~9TL1L=CCFiv+lGKo6CWeI>%8N^-q86dU%1MzHy`FtsH_+AIJi)f zO+@?Qxe6fu^uF(f6q}NQ%f*;U$?Z3V4u60Xv!Lg7&5Ktq#)_O5_->ylI3CKguk7F* z-4o?MjA33oUcP~ut$yT{_rGE;!v-pQ?lUiBeH2uvnd)&i5#*qx ze~un;t;lA}jJO*1%SBfsM^dyoI z>*?WonSFQf{XTB}_Ho&8G^wSw;d^D{+9$rJz65MoONWAyp%)c#AWYI_Ys)1N?Oiag z<1)cB0D;dTd)n)?04I1*DdvJCr`j{gC6f2*KGYl^?-)TN!@W#-z-ACb2ko>ldIYn; z5F8hW=)scSxsgr;Bcr8XQu8W0;N#Ir(ER{+!m9{PY<_Y{J~?5m_qiWwyKfqLC|s(2 zlJ>8FJ`mlHy*0X+#)@q_Pbi+hGn`d)58%XEybpQ7Ed|tOpU~WH7zk zpEOBNFqBZsMA55j=P9`{C*iP>1;|Ys^mVOkBQkL)sDn~MOP6GqaX?qZ?u(6)L;lA* z^|uBONbxpDVV^^=%^x#%y#i5};>!J9f=DtSi#oM})gF079snoMDIO*CQ(d#3vh!We zwS~mF{7@H|)(7PALZjY9-;g8-q16_b6|G3NWLJ|%i|VsJNtBf(`G zW6iofE});Kb`cUoAS=8NjM>M02?PJe)MJ~KliLr0+=pHBnZm2mEsV2-t9;UrETu8yp5jgZ|;<&0-#0yIbQ>rQAO?iY!lKfFkzo7 znErk1&`M3JKb0n!17=7@OS=~IyNvO<27nA4!k7eO!|jX)XIV3cFtF>1hI33>OYZ@R z+P$CW=OL|EZd)`$I`cFF!%%Fb<`SnW5;q}gomb>JkybnnxC}M->~(+G-N{W|_8`}{ zWrNT>{5MKljw}|BB@fOg?%L4r6S4sZtF=Tz*AZduvz##_x>V3$qzqXp-a3w8rQ?aN zeec};_Pfi=rYgB7AHJ|f_EA%lwtsn_#8pDA9=NQh!N*r3#-c=3Crpe%Yo@X_X&rKb z^pG*&+{P@yNKxBB+$TCzV6dMqRC_Y+h0d(D+ zHD^?KXaSDZi&6cAMpvDF%{Nt2kvmeZG~>>w2Stk}0V14Ncm`04ASDe^<07~S`FHFl z5SxeyW~1?|+_zg1eZ@F}F`tNF*a(u{H@!l986M?A?FB#d) zqou*Z!dxHqsiczC8@dK^5LP_u6z0C*LwIms7PlJNb_IPp2{3v7yuBS51Y*POv0+Z5 z;lm6uRtM;dCBYo1Ux>r^Pc>wQ@fdR)R7lnjy`Cbp!lvBx!I}6b`kXKD^Up^|Z=h^_ z(*3IiC#qe}hNt-+TLjrSw5r1forswU4d=qx5;t`mMqunVF%y`DC|)q&cGDU`b?Jqd zV-v^{wk*6KIyX-cJ=N|<-GixKLJ$doh6GQ9X~cWH&`Pb(K3`^3epv4NwjUhUd~fc5 zmFf23$=|kay_&?PYnzbspyB*wZKmCi$<31z7UDy*pE8%MPOhXtUKDL&4g?Ztmd% zCX*Ef9b3g|A!R9f6Fl|X6bcOhZSdu%K+eCw&%_4(>6B*=nx+H@eiL_13UKyLhib+- zth!#H4eYP*DsQ$@fsPc)B@22;oZt=wzZAd?kLLdXn?Pj0%1Tj{gt7pNl2EX~IR-I> z?})a=NqbE?6>L4Aj7AjRhYo?S6}1O8YmbcyusK$&j|rP&!ek<7h~O0{;@+b3pY%|? z;Kh%}@ux3BE8hwHK+sWAyY)}|mAnw9=KtM&##8kEXdBy`18Bb+AXA@s-iGkk9SKa2 z2k1V#1N~(`(;frF$Rxis7I9!SD;^(t|F!sw*S;MahddhbC;O<6H);C2XjE}TzXOS;O5Ov~ zgs-LnCKGUd1UfkcY#fAa901ja!BR(q#W)5K0(|VAc!zLPHGDI`Z8#f$yXWyYeE5o+ zA9(p+zD4W|XRrjoaIg4{cl`EWJ>j+w{?tP^u0&Bbpc2qhp)PFo(;`;>L|`g&%iI?Z zpaFQW6FS%lR6Buc7Fx|gi(&BfcU9N{KrYA#J5GLiSx{VxqD0ZdJutCDhz^~GgLiJ? z{crmOE`R$c;l~atVeU!SzC7{8DK%=H#;~s?4z*n#3guXz-S<7z(QHFs**+_(kdK8qNpG^R6-Px zxU0aAL3IskHh_8^I$njW9{_J008b7FrAv4r;hOMR)KicfMsq~(9sI=M`s$&$Z0{34 z_-oJmzn^MnIKy@@BOn8Qzi@iRX4#;Ld(?=FjD}Fvy5YQ5OyvA%kzZ!S;p)vp&9~JORa{}-no6}*6&5zE8!_F?6sR%u7eT=EL^mh5ZPW2L~XI;xF5lUO};tg|e ze?hlfkR0}sYyx@y9xmVY-bd)DfWUQwPks0X{Ms+R88>|XR*(|rE5%#|EX^`@&M9^- zGIq=}W`~5~456wBWy#>QY$`cIMgpHQAi@wOh_?1c&@@`%_&6xbCMk}9*fENdP*sX* zKo|@O)j&`=!k}W56qgeT1s;e1w|@0zeEfr-!SbG+IQf)gp+%6Erab~3ALQ0HIkHT< z&v72ksOE$!q``5dK@8FcA`RHrnQRE<+#L&VmFT^wiUNwI<{-+N?sxo)e_`$uZ~yQW zcBV5}0$}Ljm2ZFTMGrf4!y7JIxePnXHBbRi8Fl_HvHp?U^#m6>0?c8puUh~H%g|~k zQ0@TAsPiwYVDHN=$ox2N@FVRQ-)N_uoxUo7f<3BJVD)Z~H@yC%c;_V_z+|-n6eyH2 zTQHVpft?Eu%k#kEoM3*AFgxQypr}IUA}n9wv|%-9tK$k+RfIqh4fncVUV?_)Yp4)K z5dMu|#v&@&=bt(73c{#CQ5K5IDF(&=&)%DdX_i%GzQ48iIo}Ww85x;bnKf5d71T&k z7L?31IL`tqqS)P69Kfa-l)lcu_1fMC$EW+MsAvnf?Uq(XQ4j%TQUnT$L1wC`dCsiN zjL3*@I_K=Q?jL)f;rk-0u>WYA;oJ3`C!-?bo6b40*IMs-*ZT@t9tnkIfDnY+K7ThK z_~sJeKZ=kyWO?VRw3+8Qqe|9Xa?aK`l>Np zF|y3adoFrTBzr)WHpJGN3Go^l!CVpzPVXQE#hM6c*5OUm0#fw^NHVl?&XIYcm%*SX z^mAj7J9>$1*nH057>`Rn_^wZK=kXC&UUD`oYZZx%klXac ziB@P1H2q#El1D|l+BGS&J_i`NRu~S4ai};+q3cgL|3{yF-}_(l*6Wu$-f}GyfaL<< zd2j#k8<&o5x$fKV{)@pG?w%;`o2A(*XR#`FM5Vq|mDfmsN{-7{vHk|qKY;Ys@!1ga zJO+QCMW&tj=6PD3`Yz0F9YMP!=_@5t_4&-lkMSR0@)|zzp3g_ZlNddOjWyxGKIOnZ zSQ{GqR)pbD$a>LFz-LhtK*YB;!l^*j1Ob~l)Laut7OiSD^^4Woic*#IHBBHo2-^E~Vi;wxDJ;HhIe%-_1$85JdqSO_*_Ic~;Kf-_hnLkGZtoDQhD{#gt z9NO>LScBDpkmZ8Qqv%xA?iLr5GNKbe6(OS-KGU_Tn0F3nuB{}Ne+rW7qDirtn@fu< zIa-pO0JBWU^OV$Og7YwNp3G^y7Z5@TH-7R?-go^Mxa{&vIOE6~_-R!AtIuQC9LPEz zP|``}5@O;Kc`zn#v0dOBf?E*Jv2XvzJKu8IMdjylxj-K82yqVcQ48O^G`;yoRNZ^XR*`%i z>mNY+`%piGEJyqx$^53^FD=twgciC@5m|j5)Ep)yScy$NfAgl#@f$CFHQV>?;A2OE zl}tFiE^MsB`YNmq9fN_9_dGs}iH37Eq2AR#a?y?6l7F2>R=k>GYM8pzevMU>qExEQ zs9#W{RE=YW3Y7(dSxg4fe7UOCg z3em$AzNcwr8|d$3>%R9B*|alTtH>k-+NAaoCt*5?2W zpWbif9Jvkn)CX?k|M{suz?Y7do^fau4(^lKx*0g~99-s-#)KpSo)B;Zg#sa%r%DJ- zrBGR%z^DwAhya9y?kLeWKs6?QRT{sGybh_I2ndp7e{0n}iyW1Z5?*nF^F}Xo^m<0- zgnmlOg2sF0#IYUT_SO$`;P7D{`jA7otfaQAuCHMu)YNewq;?~$r#c!`$3Q}sA;^MfTI7B?of%-w5_fIN+WYN~w`5f~(&Zoz? z4#T}6{aMFRPNG|yb0AT(f3g{P#qYhJ*Zko-K?QG)9Ob~8a45n3t3y~B3jJL0S%hqH zG6zS;3b;jGV?`fl)HNCEm^x-wQmRrCC<#=Rrwl?-!E6?oRmLo_#Ag*u0~BRU0Kica zn$|$f15)rwNrs4v914r@vCHCHs!GRAH{8xQeEZk1e#QWkGRYQoEoimn0$9rfmHf=~vSmddn*X)tD0U=}ovVFqgs%n{U4nj{p54*4(E&lMeT zq;3#Oeg&~II_^#Qz}U@nU$EZ&l?KZ!v-=PL_N2$IL@zqcRF z*AO?vTt8X*`bO2Ru4cqpl1)wX>>X`-tE(eX#40wADgW2i86N zSC!R)G3*(6FN*kh=NjqYE?Yg>^iZq7nP@v|uMzZD2~@#R24NN|$aD4|Ifwmc9bo^) z1}keT^!fuBr|!9z@%AZv zP=@_H8SAzF43c6u(2*<`oEhF}6u$IAo+;i7+Y{KDC`EAm*>Ast z`;Tw&!k_#)_U#W?WYflk*R)CWFx!=Y)$h(E&HMWdtRKe(Eg}F|86}3RX>=(R!Mtld zB5Jivi<2~(?eMVKCpdBJtZ(?mH~ztMUiQ7u{iEehxLnHw;Hzvs?;U@-alw6``jf}q z_jcCYso17>0d?K6JR0V^)ig1eC}H^k$=8r<1@Qwc%Tn-9H0h3v{bI4%3fHuZBvKEVQXUg$SdIcdYJT zXSmU0I4jscgnmE6IU}erEd!+n)C=cadLaz2O8Ig3MQoxyN@9oOq8f?XLa zTLX1*?%uFyrlTQ_)CI$;Ks76wjc1%bHRj~;Ew=AD#_c!W#=SRwo@z8g8r^^hq1Tqc zPNM8^?M7YS*Dh)Cix_!rS?vtTz$dBf)1!z6{OzAz$7p-X&;R1Lu)YCCnV9 z%@t{;0U`k~PQ?UV-bXbcy?uxlST)16z@?zCwBnF8;nuQ{6gx9kbel(QzK?r`XTALS zuX*{KUj75mKepTvmkGdfeHE=kCvX3oe|78I{b9L_EOTh4IAmOqv<q_O4~-H0P|@xm*$+Bqj8pt!FJvo z!L(yCWP+0gH-SdGpSg;^E7!Xi-1jQ;=LCVQ^BQWcheB*_w3VzWDFr}6kF|q`c=pfz z7_a{I-zWDu(X1J&{(vi<^sl)3+RM4<^7C0gw1FSwkY^wROsiP&T8Y^VwTjdnh!VNb zNGyv7^9~tgnDiL1&QNj=x*-?hqaJ@bWp;Xt<9FQ6T{qpvXRiAv?z`azs-mI{Q7gjx zcrHCcNI8=?PmuOnh=VLQR>VcAX%v@5KZ4UEn3nLtw|;_O4J9xBrSD^SP%$ZSWtp7Q4Z{JYh1SN!T-OCg}IqV=M`{N3Mq@(pi$!PjlSgI*53ei$qFWrntNZPO5l|du<*9;Fq8$C2 zhw+HVUByGMzKpdahj6Pa5iy{|sIX9gmQYQiLz@N6Dx`LPiyZMi5N?g5dpN{pnE3dw zW%#U*x>fRQ1?N@~=@AInG_Z606t~}W8~5IN4{Cu+A9j=rA9j#nV?r25e|zhCAJn5{ zuK7B)cpK%NHl8O}!@V&2y6e)m1m=Z~=6!)XkpCVDK!lcMPXwX)wzawhb)6fl(gEW4 zW4gu{K6NKIe(EL$Ih=X^8C-bDg{&Pqm_(_pdM)o5B2;slDRg1UH0gF)pf zLXVHFJ%PVH>sx;Pmwxc4etx+#E)#&|`brP}Z+X=7FF5DXx>xOJ_ydi&j*EH4 zcr)kMfBDUP`rV(03I;vn;F@D~2&+S5ICS`);IjlLi%)W{Mg@e#+^#Q=&xnE962Bm6 z_?rmQC?57eGQ_Xq{W{{;;yKa+u`z@hWpxs(#$Xj*qsfal!Mf%)q_GBR<%0$3^yH)3 zUe{4@kLcZgxuA5oNa_=te@GW0*vkaSSsDx!Yx9SW{=Z35!4r?k5X;sOhPZ5iIftW< zT8V@)qN8|yw1hClS=7gGryw+04Ycn`Wxg%pIu3u9vLll^k&eE$6(hN{B*sAu8LaL#aOn(eQW0gylt%EFk;l<`E^85^5p zC@ZK0p7ec>l9pLI_b~A+){#wMDgAbPkNn|JcqDQzS%JDh(CP#z-;3W}DdL z1Ts67_yB1lB}nVOY=%_nYjsEor#Zmi9(o$@KX}0N0Nst6Dv-sw|E438g_%DW$-r*FKWR zf77*Gc-2L?^))1uI4d1SRMQbY6o?iCD-j$%!Nn?ukWo)62*kcG)=^knEUBdllyOY1 z2EVIFwhBq4r5qu~t$o_|-` zXOGIgqwU`f@OzE*Ek3SI0=gE)G%$btd}c{IqSMnB)5ZZ$M4_62^s&%O+5lB-xul>k z6sQJVvOM-0T2frspS_U4}O~K-u6DW?zn@@XJjr?5n{gV+ldUPNZ-+S(W9X6qhjXi zkz-UT?|Q=rICS^`&wBQw$ovQmCG*o2HrH}$Tm_R5l%+9RRFKSLnj<#A!b-9YR#az6 zsZ&}dW);L~%azECmGTsiz5hMjyLQH3{fBq{`T76p8-H+fxl1k+faUrMTtEGnzx~pO z-}tsioLAn7%PM@9Bz_Y+J_`IutX##CgIo>ed(5vvwvJ>2(x5g-FIfV+j$uzny-ow- zTne&L4X>_VZ3h42)gR&Qul*n^5{-J+2g-pJ$I3wI4;(&Eu(le3NXQBrO?f7jQ3_o9 zZKrE2}%_2j;193YOG|jCyQ`xpiR$Qo%_Y9cQ zin%nSh_x6`gnONgp^RcSf*~f2tU^=4o3vwIseH3U0(7-auq}*mOQ6fVbc;V{zGa|$ zBlzvoRuZ^=T>BYm%$r(Wn;3w7no%?j^NE946SPfBBox57IZr{g4c<}JCdo$BqlA8L zEDn*pb2aj@Y+9kD`y;D zFG*I?5?3G>r`ykDNXui~S|C^gi=#CI}XVw>b2uYW~ z5>vyhV*}huGR}={$^*QiFV>^nm5|xO17*Q5xxN=_Q6p)|jjAEq?p9;aF;?y%tZLU=p%w&c)gS9bNs@pNrZ|iGh}bMy6YK5_uWN!teEj~|Cev!) zrAL4C-(B~<*T3}(%N=u>04$okfQ`%HK3rR#tB^*8?2rDtZehh~oQ?5T z;UuJPMyH*Ts#;qN8hZrvt`Sfd4&O8AF9uAcaVV5T80!X{##E=SnD-3m>214qdZKaH zGu!=pb>KJR6hQZ2Ui!BSfU2y7XOr*klTPkQ4!J+A^A$9SkQGJy@{`T(j!^h$We_A`ZTZ+&rh=U zt2Le?`BKy8tY0L_Mw_&{3t<*fFAHtwsBR&cH6+d&Y4TL8k4|!|f6g~v@SNwq^22}j z7t`g=xl90->nmVA{Xf3o2d=&4JukX?{2}rTh`h8`;jaR! zM&!D^aq0G?8!fijX0Qa~nrO3EO9z!Vw}%D~wnxR@Y9_P=ZHHvn$i_y|82KV0beAw7 z%xU-UdbBeZ^`N@$gzfpND}9|ihqA}p>0X1Di}24(02cHOc3mf%zaEVTMW=G^{+?U3 zN3NZhQUrHe)nX557~{eOg5r98j$C+{M?UTNxUnA z8Wv!>HRF!^$2|UtSCIEWwd|bF76Fh{xl2ug#2WhmF^MKpW>I9y6lVn%%A^+PX*3z? zDUzC0YLP%{2&-YrU|Q}w-aGHSzkAc){l#+UTqXd^^<}<({PnLml8)&K2deDrM}BQwXa2kZM_|B7djdj2j-pQEM(%LoQnef<-8#`C|QqmQ@%dNZoo zDRj1jD<-(AY=VMNdk@sQ_zWO9f^dYT zJ95Aa=d2E3ViwyYbq?CGC9bRSZh}%D(Vek_Oo+|3S8C+L#CDG~3eD%OEvf0q@`$V3 z1F3Sa(Hzp_w2El-Jiq_|AOJ~3K~%)OFhR>5s0#9xH6HS?OStOM59j#FF{kdlE166w zP7|V*xFHceNuCCUa>tGLvT@cSuDI$<0u`c)T8QLA(>5Kf-?P;4z0C_SQFAX60apV~ zU!op6BM^{4PPSyPUL6YIV>t`R647^8t463VZRn8av-+RIY=T zG{=J0f4y;A%XDuxc3Eg$q~GfX&AEe)4DFtrg8ABe@$qdkk`e>0J3Z+;V)JFYbgb_> zNlmLw&=n+_KOYeL@?D3)X4XMu?&H_Vk?rMZC=1fb-RsyPP0lBC){0pzBvhsa&Pt@3 zVquCBSUs@H!@l-vdg}-I!Y97~L8(%oJ|;QZw0{ssz%wb7kALX%Jo-rw=ZwQcf)-E{ z0acsx)v7GkqEPkykdn9Nl!usDY6W4|5HwrYZE1sl^Zi6JwFw7CJKVQ^@l!7Och7yr zb+3N?vK6pQ0G8{^alP=*fA?Fjx$l#|^{7+tV(1H`2asY=9y#bcx#1g%>_f7l(=|Il4UTRIMlEfr;#&~4P zmAYqZ^1zUJLnNy!VzW85++8F>vANgTOIu*xZO;}e@|0^4`}>wO3fj-s3FdVU=DGoQ z9^yB#MrluiHk#sHvuL-E-YO&zyyD6Zo|A{e|n% zBuO^U_mjnzg%k|v#mYCeG=P8Mi|(-K!rpqf$X3^&NR=wX*}=`~kz z)6I7?zJDv;A9W%{t<)IJq$-2i3~o8L&6A&W6rYC#*{5rOF62&KE8$wVLQ{*No^4F` zL@1+Vad#@D`}f*RXed6!c11r-aO1Ln_u%Z&d*1l=zhCa8%LHJ#zRcDSzVf#YT;{jm z`*mM<=;te-&-QRo)NA!Q+SQS=>g6~DnK`@wwINtZfXFQpw{rESra-@e&PY^~Y zk=YK;s%Xd}S&f4?f;f960F9jPZW8<)M`5m~FS2I>@SrO_u7+Z@u0$KPcl)2dhIJw$ z()RxAsAu*0Hf{U3*0Ggce7%NrSWg`+yeI37*2!WeEW3~ommvB&imJ3&g6-uh*dY~~ zH4TKh-u+^t(S5x+KFPu~N4LC{x$({Jb1ZzOInF@WjAy=$(`_rvCw3hg0S*;KLjgKM zb&6o@Kle<&<}ufB^3;^uZn(Lz(>8Na7%BFi2nyo>w}0*=XJ34T%P-v@l^~P*pQh2p z#@w;_x^DHvYhRBa#;+AM#fd^yB3iYiL7V?fSoA*#$xA}CVy!&QJ^5MRaM6!E=g+Qt z-J4G=chqG9uv}k8>)W37T`zsY4e$JxOR7&ZZ~>PCnIj_i20n}P{WXN|1?Q40n$N(m zBKbbZSCM=W695+#?lc8`*NCEa{p(xYTErnfRvvfUp}g!RZ$t}YC5Mfnu(m2>eMPb; z##2?o)H{CQ1yAA0PkSV;H=`UMN2jOBs#)rBO8a_gZog*0*T_S3`HPXR)=^L8a1%^i z>My&608x9eH{yj482#tJStAnlVGFK#B8$ktA}fA3hrk+lznVkP4LLM=|03PjUPKNw zjf2g9zttE>->V~wbnSd=g+XmZbr#*~x{&%@B`(UMJ#f=XsC(3P@7~&K9joH&B|)aP z%D494MeE_N;E=2D2c7?{w(uUCetNw9o1S|5*I7vRy*h7%loC8g%X_F{_o#bexT-*_ zF{%}V)io}^=2G0sDz|>}^HGdPNMnNuG*eI&#+7mX$8Y1CzxfK*_SII?RpN=X34v)% z=u4}+!9#>H2?>o4B@C(9jm znE));m&tn08~^a!OHbYO|2^@}zaDJ35xoq^iHd(2tuDV4T$%zfagqGwbIeELUv&E$ zVlGePelCgyxmxtcHG#e^yc?#ws}q2L*pUD7s*mx7kKDt+8*77%^)-p4zpM^ff#Jb} z{OHd;lPjKZ9;y?H$tF@w@u5me!Vz(hF1Aaj8k9B^)J*s;>|Fb(i*?!aX(M-YPuWg2 z)Rpc7#Q&xz-Kj7aWpnGQto~US&YrJqyFp4iLAR5bsCD&ucX0^5*lOMVoA zz@x7{7bg{{PjmZi&)?KKf=SxBORQ}Hn5Od^$$(-NgsL+FDhu|}b!+BZM@A1h`D zeu!nO;QP_>E@JrYzWSgMro-}fk(GbzEhT^Z+Uv>1G00(M5NG|7$mFhqvU29R{OC)c z!G(`F2P;PCsc&K$R^tIl-nCe>+Mi7y7f^c*B}A`-l-rl`gv&VRQ*UmV%1 ztNX_3*;(>cNYcEW*JzM}xygVqcewho1h6RMYg#2M-fI3mo2KuD=CC9UOzYv;Bno00 zl?}TGnuw3}@2AJ7=Ti&O>%k&}K4?kM616HFVeV**o|>;|bqVP580x8smNaQrpY!(m ziKb07k^P(nvao~9j#2L1j)YAf@#JgxiC=j>z5R#c-(fv&n<;q@)&|h?!fXHdgWP`G z3|tkjjTCXBA>FfcN}CH z=bX`uZF z!Po=BU&IEOqfkgAo!fmwErKvF5=2Uh=B1$9-(T#?yDl+vQT0xgq>C-Z~1J>dmt+?X(GBdmW7sXYVb_9{XxSS?-{~ z!E?{$(uY5kPkr=eW}}_xqMRmQFrx~N@l3IP#^WD*wCVBJu7}bj!!#2Btznfl=$15+ z*712A(NIZ3k@y%jU#0W+V#zlEz#Lu!Ju8?_WdB_UF5ddb*T40B%N=%^04&#+@Os+! zJnj{byW!1Oo)_-K=Z55l&%m-)jn8Qhe1!hV`qAg!<;n5HwX^FYXtMV0 zGQDXeRRL#cug9t5J%01Wufr-~-@w?n>Y|moILgvEX!vJ zw$y#}^lz5qvK9W}@9*KdcYT&&Caet{{a#Eyib^?j$x)v3;_u+V5l=bZBuuw)T1MfL z`n9YM`mPB{B717*rb2sF7;Cws63mp&H8(iX??IzQ%)_s_l#hM* zX0|p*m@~{GqNbG)OgMPXA+EXhY_v*&+oFS^@1Q)3{tUI$Z{3c-6sPIEXn;^4R;IVv zN(f8M2WZAu1X018;j6%4qP@HJpWlD?8{Yo*4|7Sg676SW^p2bhT^gB6lj!=$I;fgU5N}NS?wie!Z?Wo@afY-5| zX$yfbRgg{pxr)_b2uLWAP$5-`D+{bBu&PAM3abjVsGyiZS*D}F$|8~u#5C8FpU-#EL z%iZ=XYc1`7zs%PQUjOo^UUJ(%{;Tt6cQlH6;stfu>Fq8E;<)ahdo=ekNh*KTralWB zeWUr`twN;3@J^$F&U5VelpC(U1@DEvhddLi5Li9)2tWCfr?GLC5l(O8bs9HxJSJJ} z*ot+hu;=@~sY26wv+Ag%wLvAMO*vKlp^Ter(5S9frHZ}^SO{394Uw=R*QfKO(kSpC zKJpvL9qO~>i{PU#dySZA)~X~*$B6|Vq~hL<5Lid?Z?DJ2R)pihmHg(Bg3kED-0SU5 zAi90?B(c1Z1nfo(TI9lP{_~1k6#HL5ICTCqghuN=B?6(05Pqm|8VF?xLD4c*^ks<# zZHFYR5#Km(N<-+w~DCWBhk12}mkaal!z^X*?H6jc_H5x%#eu?B8JIb*j3Ev1K*&Z|RT?oJRKX_oYq0t836$U#&v+>&LyoRJPM-*o+ zp(|;!AjDRU6$zCo3PMp5iV7<#q$*+}7h+IU+}yaOGl_Z=j-+|vkSvERLwY?V%dkAd ze`D?HIiJ!S^x$70w{P_@+a ztkAMRON(&vw8YAiYF0p@Fsq;pXgMPU>)5dC{O5Nm0q_pVGhCM8206Z;qj`=E`)F?# z6M}vZ@*LBM5SaLs3`7%{MdP7}5ZAN$)&}UVsNpV0Lbq@}>awurN-P9mQ<`aC+hgii zQpMlAp4;^v7tjCR;a~T>go`A^+P}ed9r}`!oz!EQ3GOGv03T)rGApR21z|QrXB89y zW&tZJGz18#r@f%xqeS~_OGu994)Gb1=U6{Sa={Jzgh3t?f{^309Q7Iz9?PhNi2j(Q z@yB-LvlhXS1rLG;MtlUSfR48ab~j)1*rPn_#n0xCU;2A^^Yk*P5RRYN#`1nUirU;S zu6eBov#pYD@+ltic@p)?WAfsv_?#k1FiYlJLN1~Nk{K(y$s_Lg2f5{%XZ|MeL(83a znE));m%utaKK2V&9s3Zu-$oo%nZ$~_i`ORDUTQeIsj_|S_q!hEGn~&;^)D^+yB@=; zHwp`}@N_kG%Np%@RgH7|&Nz7HK_+Ibxt!nw-}AH2;OZwHr8<2F6gzm;xKTT8s^gZ} zBpo<2RgW?cXIoc9#z-W+MBHmC`~oRTtSHcN1=9kZmguaEZGh6yvP7%Uof2#llDg#} zHAy zxIu;vrpRg!H|QaQ0rdLN?B*N@;r0h8kd z=Xu;WJ%qdO`vKnc^4F2)o{$GFc*sLA=_mSu&Aq189E9crF32y>`9(NzvBf67kN7@X zC4sFPT&s%%ml9yH&IF2QAjZ*fE9afM<(bcZ&F}r@fBAvueQde=er2pB3GmBwJ?~Ag z{Q7He|LBXaI`u&Yy$bJhvMg3R;@jSJod1tH|INI-bBOOnd*6J3%Ld@{H0SSYIloq3 zweJ1b-*eWGi|E*|suEZXqe zqLQ65uWK+DV3~v4yQ+f`x|UrQxx3AM;xSKoGEaTRV{zer!uUiS?Q0C29F0?91G{x(of|!)1wRAR z`1g^^bKJ4Io-|&vtEqCCrj3vuc@a4IF`A>i4 zZ@%aH|Ndy7vxNDjW|peIY>Qwo{cF-_ac)`@-$u-33hcrPtPm9X-zcG z?IdymcFW~smgHX3jI)(9m{o-Fj4&&(@f1Bhf^kJP30M&a0xT4XBH$o6)B>K!oUR}l zt4QJ%L@^>G%DqLAqx5y=VN6QBc7u*=}v3NIyH)F z;;FXU2BwPBl29sA6;MuLI;EIQ(47&wGsd<{!l=Z?0i9Mz5vzPvrD`hh*!MRPTrI>< zC$1(0+IuK!OT_6BCx&G}-y?m8>wB{G0d6&3!>r%K4SPs0wg)VUVo8mnnc%IqE!K2C zLkB(UKuhUj^|9d@xb<`K`60wPs_`+(lQ-jLr;<>QYrFy4T*R*L>i- zs~`GDPk+u$%UyWc0$8s94eNz(c*Ug;x%C6zc4l=Kl1q%4sp4;(>=F~bYbGOrxh#(O z`AAxmF6>W7KDLJV=M`@vCM@$Ta%n1ABP+M5PTWG+x+?#{XcAM>Qj^h=;3|)m7NP0s2%9QWR``9x7~}?hT2;9$R&1_CJ>~&{ zMb`WRIj@!Tubtd?@dO?Wu3!9~JOCtUH5-3HhrmpCBN&kM5mGPNI+n@pRAh?(iN+YB zcuy!Qw5pJDhK_d#J0rqqhMu0H+f&#Ml#>D}fyxM0MWtti%=t9f5wB|q9ggD!UC z7PvL79kGkSd2}~nb^`P31Pu^o_^N1HG_L+zGf(yV_}`)exuhA&|4>~jM!E8rVD*_whBiBZ-B|L7-g z2t^bg0Wu3IOu5ByHV19jvM+S|`^o&InP-M1;F9{jWtrx^r^tAQZO_o{F=4yFCIKy! z5Gu4X2%f4?%0j7vV>GF#D#v7E>`V*BGo>h%GPDYCS)SoDVL0%t4usWVhR;32fv4A3 zvP$tec&}tx>@An2VpGKz6;cFT70}gy3q9!N2>mFrOw>JSSpW+f0S^?^YXqcuM1up& zSsT~V#dXEr9W(4cy)3i@y1n~aAZJ&`R?Gi&4326JN9{kqXeiuB&l-*If>w#yKdT6% z5jNUEx5n7^3{Dr=Xcl|@m0>~95D|njKnRXd8Ka3Zo>hz{B}HjWLtBk|@5#I}%yaUd zM>81oGX{f<)jsrdM<$8863Qs%Gz-|I!X^bWDe>h1EdqWmi9cnD;MqtZc9e^((_t}N zupXX2$L+PM5OcT+TvZ{Qh{%LmvJY;P8nJmJtA-mO9dj#oCzOpkrE^&3Aw(_!p=$0Q zYpk=iRr+)>;g9m+O705IFK*@V_VE|}@T-3N<$v;{KRH_N#>)g?x&8&$vtRRv`_4T1 z*&jMm-ipf=eB1LEmooQ;0o)SUnoU@e$xnUAVinr$AJ2G$zs+DU){WPQ)eClijL!W}$KCYc|dhu(Cvp0+~z+<8kZ{pPr#RGs2`oOGC{F zl@KaVIdhD50w;Fh{;di3ZC0Gxu9z0a)Ihxl@eS#%?pX_pr(ocP3}t=IbH@HYM>aAx z);#Mgj$U5~J;mipmS>2TsK&9wtSa$Ug=rsI>0=`JUN2Q^zJbPDL`CO#58Z$suc0nn zuWm%Qh3nXvHdvVdZ-deNm|x?AT*ozadj>GsHP>%*`uH`56q?seiGo@bRH~B5(rk*3 z3iR}Zur)$AXXy3>nO4}WiZlPgQw7hgfYUq5=D6hKR>@=(I6XGDCxKA~g*qzV9pMaQ zX7p@AKRIHq4jl*g^*FpgXJgf~zUEo!XY?|~5hqF9IG`a=lmTCq^!7(JNv|btxE50{ zpT{na^UZmSZH>JU7u)3_&@@~u*65W>eR_=}q;X_2;4E#?7HIVmcgK3Og+zG)K{FLV zh9>|3AOJ~3K~$I82ubE!To2qd3L?q8!E?QDAmG!agE~XJa-bY>`CT75^S)~?{Bhv7 zmpk$@0a&ho$?9LGKYZzJAM|U?FdtQYBiT0znKZ#GDTJr~d}c9}#nwQcV8EKvB+Xb+ z7rd`Bt-I;NrZ=I%GOTFT_=oNkC)taqGEFvDDw=LuaNEYjY(4T zc00yDn&RyQK$ZKpr`&RC%tmIMd7#I+M+Tg|KjYATM?P>^rBs;!xIjn0;M8H&tfM@q zgbo2o9r)5Vf^r%cvk2TQjakMVj8fHa*|Hmez`a%`b$7c;I&jh(=|w;|8EL zzOXxB)gJUMIyC=$^*yL&c;c*l{9F+YvZ{A>@!a4gr zXB`}H=E0l;8;-S}BkzL+!%YG%7$GQCAZhjoax)mLLJlr>F|l>7X>l~f%{kMlm=Gsr z{-_UOvAR|kAsH~M+VgBWm*@qnnm`|Oi-f{iogV01BCied5(Pa})5K323v{9Es4>=B zlnMH`sK*fn1LEI#=4L!(^OJn;#1o#kOaQ+8*K!Kr%V>S~i=LldwO+mMF}MER`kEip z^NH~19p)3!%GahpY2G@?|005UpVIv3rVT;=T?Z0(^avkZ|HpndK!FR^U zkOk6Ur}|&4_M1CWthKSVSjme4&?sfbj$bXJB&|@BMr6(Px!?t>fc=a(Z4)zjT3l`Dswp3R@~NcQ!!}d zd>fKqqyFbxW1r5?=~ST&^qiz&MO@Pcs7ZgqyfkpP25NnK7RS@NqA9!UShuTh6KS?fpTn|+EQ*gHs;f}m)u)r6f67iJr}F)W~>UFMrOB{ z*z?DQ6u3au2$oZZDvAsRL#eCUAJN8!w0*g*WN$ZU2P)S zHCZtCx)xCgQA=ZfB{H27wkO#31UosxPEBA`!ZaXNRGS=4jT4(Cx8FYHv&RbVDm_KE z0#=~{rWI;|+AYF~;GM$=IG2(XvnV!|5T#HlDn23*V))z$w#Ln;1NZHWII%h7ydwk7 zKGfsD8uT-8Wvtf2W`V~O#3T5mraefzs86!d(p2tqZ4v7j_H=^(E|Gy-FE>hs8F2vtPdI`jW@Mt{x4sU1Yf0OtxWzW<;2#N<)G z04z;{mI=Ue{Y$LFr%(RuLymo%KJ|Qg5|?qU$Pcv6X3|LvL|p6xic3U6x0~SA#AMmU z;%dggQ09wxVRwls%~P00Dd0v}uP!ak=BibZy@hU6Et0yDoUcu1*!G05IVNn)&{05U zimFf*fnpN4@7}TWQ#vo-M`rPmzG`rz#yOPk+60B?dM;y+7(8+VW(9Y zY@ctQGawd&zlDGcA(}2tX6R^2wH0+5WM_sJ32Lqe?2H4q-#z6Ew~x4aTiEtPrdb6# zjj(@NQYrYnPqs2(S}oK;v=y(iA1sca&%g0bAZd9 zTK>&>Y;^y3_w&2KUpns0O``Dty`k32qgG-}Nr3Zsac$DR;PzxSH@CL@&LC*TnbTt& zJ$}oRU+}vBdh~a{|5>*!cjsjSuw4HO*H6Fcm5)CE#`j!tMs+_f1Dr-?y{jQ}*Ao9y zg3y=&nV`-`*1yYX<_3+#8;IRwJW^>%f8D9ZYNo29s^4Tv*d8TepIMamt)Nn4IyFvhmE3ZB!RPKOInID; zm^YnJM>O-vSN5@T@Gxf{J<8#8&Sd|AgRHEsva+@h$vl!^U^T;3sb&+(>6F=c%=Xq6 zC+<7O-FMu@@jGtErl+Y)smv%{hW0Z)cD&&J@ky?_a6jjrAshrMJRY!dfXx}sXV5FD z{0`z*@S+&Kh^R=1AUP)^7arv9=$Iv$Yr8K=%fB^lisyR~rk`)o%p(n!UUzpw5~Gh7 zUHG}pG2zXOkj#82OLRP?+TKP^k6?3x>`c*8umDxz8EwtD;f^t%zO&?b;n?v$KHeNf z2!!5%{bwEFoTC?T@QeWx~$5;))B5^N;ixI>Cp4O%&TK2ol{iD-YfoLj0R@ zB>jvIX|+y>bQc~LgSE5W!GAuX>WDL$OP(9jNhCr`{*zXcyB5ugVn4Q^EGY>M>?JNx zi6;<}c@P>YMP`PnG$KQhQ0&N2)Qx!Pogd?db07Az!1I1*|<~o+O#vahL z>jaL5JXkB2CEM0i`G=iJWczPV(Qz3KeJUeN11C;8K7R9zPu`&vD{F-O|7Y*bgDlJL z`p(Z;?!9l%J+m^ax_YBG^`@58QcEBMViPdf*fL=VV^73j3>Xsw!;ELlOpH-r3mn6Q zY{o`H24jp62#{q<7_g8mK&V@yCAHMuYV}@K-L+R{R^{@RyPR|8k8|$wUS>(ch6oXn zNAZ+hx#zp@p7Z;Cf8RwSrMLNwWJG&zk&}1c#l~%SFt@Zq-0h-bMI6QG5DFu;3N(l^ zR@LH69~V;S=F*g7H=g8{yYFW2>NaOze3A3dJj3qRCb`Kel!I2pnNh@*&tK)i+xom> zL$Tl>DK*xk0-?u^>a2-?yZ3ruk_JjCCW0anOB3G7&LXiq;q zBB+Z3T@`Zf;8%&mzK5-b*De%MSc@VQD;28Sk=hhTJ1J*t3{k7p$-mw80YyHrYOiJ zW3n`*m`upCl-;duF1++IXPvw`;HUsNT7QA-2j2G!$9or_ z{;s9TODJi*+)n`^_(ue2zv?ljLf=CdB9$jE;ln|i*1HE1;VLHnjMb}~4ykE0I0t6e zh*?j6LI+wOSfw|5_4Q%qS&kZf$V&!k2IJH-#&=TKFA%B27LcWa%iEGqKR4v@^Nym| z#zPQ0^ttKod${?&dzm|aj8>;h6eYCUZKM*!x^17gbImq&RUEySZm3$ zj66%pCKIw^Kzq?KSX*cL#0}hX_uaho^s_ws*kcTLw;4Go63Zm-@bJ@nSYx>7WS3

p^% zvJ~SqX*!{|y368;>JQ2QftpUC^;9g4wt79zGbKH59!2#4u2}fw<@4)EhKPd@hzrmvGRZyt|knYmcv!S z(flQxn=TrIOjoD~TV%eNDETSP91-fmKpKZtP~d14SGnojlPf>*-gms^ZGY>B-gmT9 z9~A&c>n~vSRsOxVoc+w8XH!(*@S&(9f1CNev+?iM$Nd+%K$~(i&3iM9$BzPM4(DW6+NolWUYwmizr-u%Dd}?COXU)9SaE56r?Ykhlo2^ zJd{X`yUq`E?vQKNEdFfiE8q_zpV8nw8_Z~g+ZiE;A<@rD(uw2pR?g>6@AK*Nj-hN} zu@o+2dHn|NeBjmGeES^?R*w<&2F%S3m|vVnMT#hn&^jPEN>vAO6M`2780!lFYc1AT zCTU8i+hf$}qoNqy?=ZKv#Iv7$oHI{9%Vd9#Jkm^}HcxD(xg`svG}4}th+f|Kydm-32*_@GcMFclW1rr`bN{WxvtRD(99mw*gN zKyU^v6B;W6sRnvfk&AtffmMdM03mX2xcUTx(d)k-I4S^+3V@^a7qOPMul&`Uwx1!! z)T4V5VEG_ZLo|}>n)|ksA^KPNR4^$jiJf!0n)UfZrkwW$Cb1M%z_8V-Y8x~^P zU`H7nI!Zyu7}C*@;ocs@y=&-1qvM$NV2-CgwaBxd{Ve%pM6M;fwD`=K5rf2V=g9$R zi7Xsqq{#IMv?h*y0U(6HNfjX1GHO{gJ({tus1Im&7-`VW3=7Q6-!n_vyZ-p5d3sbo zb9UzMYTbWTPn5s2$)QNSVN+0UxcxC=n0r!S5i#6LdFtf}pE_%~CKOnML2&HWyLjNC z*Ky*u+v&~C)01PM+lHPd~=B^DmJahl&!O*_?nJ6HC}wY2iAcbL)epB7xF5L|I_V z`-0BP0mKYsFN2{^4fQ)`s3^uw z1yF=w6Q)oEF@-3InFB`D%yTi_Wz?3k<;Q2W{*7s-sNd%r+fyYwbQYHvh^#=2Q|!(N zb8Unh8C)hP3K$J@o_sFjPhTq7YxPNSI9D)OS>bix@Xg%uzyl0cmg&zgvbeg+;^GRO zUZ1$tM#nKxoS@?v9YrV=p|m$h5jyg3mG%#lIS=lX(hDc$ZOmM#I2Zx zT7ddv~23FQL==SGmbvr~!LL4XPBnBNLRphxX zN+Zz-=?^v`bQqDTaDBb$la6Av)~F~#X-Sl{&`Cm+v=}Tbva+&Fo*QRj4 z4B-kEdND~Nh@^L^v;uGKtOY7kl`~)!el+XO*sxBXl6cy(psP6nJ_A66k%pMUc1o*^ zDYZb8{5gAz&Uh1eX{xtDb}pm?8WUK!4pD|Sm6jZqDtHLzxg=Of3d>8-DM>Laf|F+Pinm5=<5LhNry`Kyh8fT|b>?~@9YM(8L+ z{widN1O&p6w-FAIUAE?*~B&6(54H3>9=7%>1^Nv+7Rt) z5V`kbw|irXYx`d7p9zY>FizpQvtu54HfN{RW8y4I8P-qU#Dj18MsB?8E?NtV%r7mm zu(HbB{33CygN_qak{~00unQ?eAd(Ipk@VKZB}6KuPcaC#$udYTh4NzqA-!ZUi6WE~ zUe+DO%q=d_>-E^Xc8xq6Q6SlwM94g4Wv+#eEm{k7$aNPAKZ=MWAKxqkj0_D_MOK|- z^FgB?E4duioZihm*E5*@^}>PGKR@BceMKPzR>i#HwXfrWhaO`2hLiM{mRUP-g2Cbe$$6uFYuwcR(x(pAGRykeuf`)Y-WipTU`e2rGK|oevRM{*Emz=LP@oT>Kwa_fDauLkm;0oJ+!$cDaq zsj3aX*8Z1=wLknN!TZ1Q{_FYz%pNpurdt$^z#$icT&#t>z)VuiXhJcXAiWrXaVj}? zG3U{z3NDK_6C6qk)=u2Y>%Qg9EZ=wwonD*%{5<`+1v>pXRHRWlMny3qihRKo3{HfT z6}nNSv(ea(1LRqy^vNPfCVd8j)B@>MVQ8h$IwFo*blYt@iRQ77{UN)XmzX4qC$}AQ zr+0aU?6N8~PAN>5BSsl=n0mhgt*}xcbyP9;T`<#e%^Zg7_$HJczF=Cm=iK2TLru8< z0Fm?0u%-$G=diW_lVK)fiv1Dnk9=C9QIHjEZ5tjxXLx!WQfX=H4!3>vL)`Vit5`g? z&fM}U>&I^(?sjN(dgxXgbmS2c84mbxK-S2Tn0XpR_1dn1D*?hFokB{9QHpjHqm!6c zuTQeS14^NE!~;=`l$K}y^iL@ajFje6FHIP9C2`zkz5_9Wd_Tn{0+C2)MV{YcykyQv z*AUkqL{+8{7jYP$^Kg)*yf4KU!(!aw08sTj5a$0Xm;;IFfTPBDs=}N^6M_&pZJEpW zxbgC-m9r1L`Srjb9qrmj2*A<$b67w6!C!mh?Js=lf4y`2GenU=DT$0rBN7igme4<< zHUknW2==7#8RjZR$iznhOBKk2GKBC*&j-LDWH6)&GeS{9^HNOViB3!(^+JeQ6f)Qb zmu5vw+546Vf_D?N!OhU~3WRmIEQd*s-5--*+e4%VGEJH~E^iqgeqzM)lZbKTC0NTF zH}HmU`8HN=x|9CGfQ6N1`hz*zy*?^RP;ngIM&5`=Dx}m%*XS0JRAh>ZB&DiEZ>7bW9;5uI`NKCz4KAqhd=Wm46--s8}Ln z4O-%q3fHLKxLuV2*mw>(81B)Ssrq~(!gujVHWRBhajHh1C`Phpo`%a)D&Fv39#C;FFft3>{Sy)+R z?f4C}dVS(f4_(guRX}W{syhDCuDXQD-IQ^0O?Imw70TJXs+<=+;-bB=kkZvXVU=QT zev!!}XZ!p)3M&{FFq#w`>$m826iN%EF-RwnkwZrQHRhB=g$Q1%n%sH!KUa6r(<}iu zg~B-Ju+Gc%$|BoG{n~)Gx!}&(xYo`!#xNlZzEY8y>aLMAN|$`fA47LK0*MF)}ON}ABCw2Zam|E3S0~R+%@@PRotq-XRUYAGUm*^&kUiKz%2|up z!=UGiN9dFOFcz2Q6r&U~v8Y^N^MdgNo;{cG#8nt~+h}PStSs}oZ+S?a`ek^~b0xuBR7$VrY!3!fHfY=!K&=F=Ol zgRMOLXJ__be8xW;3p~4|o#qtSLlC2BbfCtzebledY;Z+^nfORwMj4DPE|(0)j#C#5 zpE#4VQwT()xZ%$Gc*UzgLdjagnzNE|m%P5PyGv9fDDiHP=Vbn$`8J9W>KUgU$P|qJ=s)g$TGtq2TEP zqRuraM?j+fit44;Od6Hmyve66-Dz7J zeiJv{eLu`NB9nwAa{I$?t%aEKpTT!=!oC(Npl1xqj$3-}UOX&9f&K%$ODelqXk}?EGf% zPuZzeUScKriNN@8Fvgoc?llp~Rc2-4I-c+cI(Fw88T94D&UB;xz$g!m5~40)OXqC( zR?g4;t;=~=VAZmA*>knwR`^4=I zDvD82gpL9nPb1y1+A2lU-VEnNFkGoo0vR$B1hO#-@G!G;{((?fA+gev_&l3DA?bGL z4h9UmJvs}E+Bp~T6@~Vg4!0L^+u(WXlORFoytqw`jCW<1Y@I{r^_}2ke4GQEm z)bGk?N74|mH-}Z#5Thz$141TLAj?Wc6vsqSLbumvey~7$FyPq9lf3e^uO?~FA)I08 zBAz^xv9o8ePW#txmQxHTxHQKV#v55t=4aR{L9r~<>ifYRxPCTxSrF6p9AVsCoNXX%W&8+k%_UJx_`~AoO03ZNK zL_t*dJ}Ll?)_><(DE7bg__?Qu$?>CVht=+I>^AuQSKUojC`exzh{F$wX6NqXacl$f zw~cNwd|XuhR%4v+;Y1nc$x;{uMfE5l?7|w1v(+J6zQuYUc8A5899QJXEW=GwZ0-<6 z#CT#jdvU^N&*hjTA##q}Uilz*yz-TF26OcKecJ7aDADLR3Sm2*BVnb45SMI&zFCAW z(F#wkv(A9afr26(vb%Yi?ThExzqSdvk4v?-pm0Taw#qrX^3Hrh;}94jAd1jR5h+Q# z6VqxZB>fIc8^^i#^{*%DbOFc3QOwg9QucNoS?-X9fJp&kZ<^ywNXBy(>k2Fe;R-*t z5e`*G^}71u|Lv-`vVjO7T-6Xy9U!ykgRLKRM5L=&5Z>|LKco}rx|giFM4MYoQQ#&S zF15H^VROsYj^(kl1zWkqI>9aXJ;3VCH`19Ou)MnL<#=(7jAPIdPHTjc*r3i3CMru; zj5SzOfE5ViFry*++n3qjzCt$KMH(+_b46C!;tFgfopXWX;he(Z(FK$UQ!~%%Pg*Vd z3-k2m=7@SdZn)z%zUtmPedMr$7cb{r*m9WE`i8hrh_UmL#%UV5=>i)N8DZ^|6|lc9 z7N>k@lnrACO83n0J0mQ@8Kkh@O)^Mjg|pK}&CXS?1>r2t8HCLdnBYI)Uk5TE0;Vkd zn@xm_8pTs%4CYExZ|^Z+rLC;T^N_xHYhnwHJ zx_b&KEl!D`UJ?xsz_b^;YvjAT2HaS6zh7!OcWA8ZEKDpKv7}{(KlL@@kaQm!mbDF) zLS0;hPSqMjZYa_mn;I~Zyf74*SDiu#!|IK<@X7}tWU##Enf|>VQR2PerBW!R zP?2gx;|i=5mEn*RW!Ghpx#8vKU*z#eKf|LBKg{!={9}s!UEgI(L2F@+JKyj|Uitcm zxc7nkS-<%tQnV2w!pgwRcX&dYBS85PkxQ_)pxtfLo^&vCbKH3IEo|TWNNvnY`l!qW;rg+A-C9EvO6-I+RS# zMn{piWmdIM1wx=~;IT*(h@uudp789`&+_=ApW-tg`#7f`dz50h>wnjFhhul$!+o!P z9rwTXHQavpE0|k7hDCXN!1>pP6(B^>!~=qFfJEsCr46lihxz#h^6`XxGU2WV?q~bb z7MD)Fh>awVzr4p+tw!c%O6ooegsttwQj7Lb*Kg7!(4RdzP`u2r8PQK}@@8I9R`wK_A z_)!6HwEi2`5B$b2A6q>8=o{wUKIPcHV){=xzD>Wcl;?PYae%MG!9*h^u1VOdV?@Q2 zRIHK!x-uP5gn~j=iGzpDlEq9xU`kzb^?8CiS3rcZLGX+>29X)xLFEo~dztu{J}k=jeJq*4tNqteniz?)WKq(BxaPe1x8-uuhH z!e{@>2WTmXB0&@>x*dfO4vWQ%&hq&0{Th#c;5}poyzZ}m4{!O~e}}tX{TdLFhnrnd zZNN@C-zV#cC~48|=5(_@MV8Z>U*Oie?&R!CXSnjxX|@Z=nae3RuXV8ol##g9BGLkp z8;Ff(Tnp#@2!yCQ$og7Mk6q-fLDOvb4DOJ5PU8TXF|ZNWu^^^V6u2@^(prSExZL=| zKP@142qW3vcYOY0&b|8tda^C~MQ33FmU>%VF zzXI1cf6upn+g(rn;dh-JzkrTFYOgsLO8Syb30&AH{rIy)1tg`9jSzmO=_?2wBvZ11 z9*E#N=ZlLec7F9%)`Y;B**@Z6vp+=$6w|Ei>T{*7b;J$+fHj_R%`m0d9l^xnGC?-c zJp96tXSNkGia2@KE4cgBuV#L2jb6V`w>L-9ZWFiL!P!ltbXhftYM$?WdJ;SjoC=(+Jv*d#Ib&kYn($H!L@TQVaX7g<>X>QZy<>yiIWx?YedUC z14=1;RzQQt;Tm$iCLs>Q0gw5Eh|b~k|LXhCNd3OpS4~9(I|s%g3gf*S_J`j0eEkD-kkA8q0H!Kfzmn z^nc@nKmT*&m(S6P1-cW{8?;$m8Zfuer!(J2w<1)cA(BW1ZBg+2BOl{~?|u)xr8RE7 z^;T5es{Hk591|+!L<-?McxtrESwYfCNOyPHI)4shB+_KuxZ0-ED%0~Us-+?JNED?h z7gVIoseBCQP)>O0zP9kG5j^l5gWwEUy|%*hU*-nXp+JWuH#Q=g%iFX>Q~YGWlW_eg zu0Yr#%!2SmX!*6yI{^BJM}Mpf+Mz;X#}iI(ymIjmKKNgM?J{~g6EwNK5=1YT#P2Toe^Y;B7@6U3qJh# zh<%sPUFh?gum5^BZoQpWf1XaaL#NXtN@Ai`jMAPkCbjoEkYy%;PzW@_37+`GBmAG= z_kCP^VvwC8k<>PBCuCK7PyvW?*9Nli4mR9sy37Ud4 zkA0GleBeKG%iZ^~cH$(67=%H%(p1TBtkMOW*N`sgoTSz6u)lqU-R(_Asb#$vaco{9 z6aRaQL?GHaC_a49O^M}J2eqqt@Um2aI){~Fik4YrxtBwIaY(w)b+V+I4>wZ?)E%k+ zVrhKjugfy>@euYh*e!6WV(*&ePoLl8`AtW6ahb3Fy02mB_y)^2oTNK9PtxgC^M9eW zPe%-ih@i3K5&!Ak@8<14_&<@JJ58(|y}1rcYm020SmW4;dFDm#f7JtY2MY*cut*QBi&_9*rdWCohDX7a(qx54 zs#K&nf95RdWXS%=a&kFhW#E-M2#bm&Dv1!Wx0NpM(`olV&(#oR_a6!bC+e7Q8T9;9 zg-Rn*drDpydVU*}0kvWv6#7njl}4%RFoDu)0~yhJu7P(3G+-Ul%If?2A6Barz#>d2 zYzi0nKsl%8?>Q;%dG*_#edJMlw3{Cl07vW3u)gERenj6nF#q;dr~fGG$qX5RQUL+b zWw%c-MUjpCb6Ft){=dD`98xt5e;RD~nTM-j(7K(k{rekGp`7+4=KwlzFk;puOKYnvEid{MIssaEsC%@1nLqdszs~ZFcXHDmcZ7|%0j;{)E*a;L zQc@U;5SBzs&Yd|!ky#>>b7HAYt0j?9xX!UeCb35YwEChR{8I>xkhKLYH4%Oq5N?n^ z#q>1!%W(ia=WT2>ashgkzp_v-bP zl8q5vc~4FAG3o=k{QYhD`BSNnp>wa)0`==tR(8_<8v4SufWjc0L0A!9*P?*{xROs; z%a5!>7=g+iSLBMEyzy(F`1o&p;Hje>{fGl_wEhh1_BTHG`i&<))M>jEDXr3r8R;v;H1yZlv4s!~B2fdfuS{hELz%LxFC%FkCd~LNgCA#Wjc{{@>>3A; zo8}5M3k1)6Hn==T<~erkb^pd1h7-XT&gW#ZMQ^Uht@qwftG9@ZVv<%1-D;tdI0W_t zWJAe@d5-@XI?MU}|L{A!^GE*y^GQLs71N#XF<4n(d3}xLwN*NEbMzPH=?wbl*dIty z(n7@%and56r0iYYVP$Qdm!5l;)~PdSbp>^GpLhPq-(|G_|MBgA>$|bi>)V}hAdQ!? z=?ERSi4sH7?J^$ivv~YQHcsBmOV2#cOFI)b_YD0-&@RU17E*&NT$POIlnS_sYP=Q> z68MBW=*iHW7f01{TCIY9zr)(<0t?4h>8~!) zUtFL&*P}le(CPJPbvo$SlR<@4NTo4F!Oqqe3#%{CU+DAl7hYoP;w7$~eU^Xt*WSY0 zfAc-u_38&2nF5|?;S(`MMF=$7Aaz8mozUtH7!QZsaLdh{{`@gEFI?og3pw|07qoi` zT_tdNfh#PwFeq!i<6fDnQ)X^7&fY1mMiBIu$$uVXt5p`&b03JTC6eZXBB#C|JwhXF ziO{)2tcG3nvxN|qH-?a&d|D;~+RDAN9{&X{YC}!yl_tk8J;mJK8{Q23_R)@hQ~(^U zKf{W%?KiHTdln^%X_2OIGb~(D$#AAffKAPN!z*B_|En8^8GD~#GE+JHOuw%z9At?Q zaIn5;8kIB;2|rGBOr`8n8Q92mH$)`aYIhnsyw~8}wORo@ZramHA_9^cEIq5BkKNE?Or< zQ9>Mdh~pM#P&8qhS7lZT7|s1xMA)N(Vtg3_ASIpfpu^4uSOxxp5&x0`Y1Le5BN9=P)k zmN(WJEH9IE`b5E@QAR$Ts&r_y(&9!#-u~8~;p4yl%giU5#eSdFV||v6t+2SZN`HBg zq}LAaAI%%WhHgO!GfOVa9~+dY;yZe(t8iFP}tlSDlG1;PIF=VZ8T zzsE1U|Gk{N{Wfg%`tdmfSnJWGpt%$h;v}Zi>9XJHFu%IO@mp_Z>&kgHM}pH=$84-B z+L1$9Fj;}L){jS=@?(a^Jy6ZXs@tt3#fJN}aX8l(&`!3RhY?TE3hM zY+bXs^ehC+4B#_EEoeG}N+DRAY}4P{|Hkk6*Z-pZ>p%RX@KKr#PkeUvK5nxLb7iw$tGC9sU7xtGD=JOLp5xRU= z9{vF>v{uxlqF@XoDxg2)k5`Fe{`<-D$5-E9c=?|(kXc+IvDQ*#iWjcrjI1W^MBI4C zz35IK8A+nVGsaaEBUBXPUjzGJdbNYWpseAAC!gY<{=g41hy+m#x)sq|=+j%8r@t^q z((R&k%SXq$+8wPZ3bG<&JRUP1j+jiwq$VZqbyzuhlJ#3}VeN+FbeH>dx-q>(^0WWo z`+4${pG1@!zK}R6a43|B&^jVXB3em{b~k4E#0~Tp*RV?R^ra#DqXJv_uFe$}tk<#Q zyh)F%0^aL~6QZT|#G;KOF9er&4QDnD-Gv2iy6tw_b4#?leU$bIl~PNDO1!KRhYPYgkGzQ`8Ys$3#g&x6?ti zTCCi3oK}C4LcvRy4dYahTTAZ178x!xU<;4pIIrOs&U*sLKWZ(C5pb zX&>epBpVKXwOuULO*|FlE9#k{a7|)S?J`&Yc+r?sx@x|E@Yi#V0jLXyhrt&9L2f8a z!Pb7xbLYpPBNo<=v%0Z?(h*u~bfo=TrNahVYsM>oIOiB{Zu8Us_^q@@BU(z*ZY6a3 z9pZL^E`xy(-s!IJj(1s>k)|2xXiPdBGu|ID+}UBcbCuDxZAN>$SX0pJby!|mX6@K2 z^Gkg?otQ*8-u91vg53)jLiZNt*^s{NaGYHDQOEAkBOlU8 zNb$&4VJb5s*YMkzO7)xy2w;ln=MG75Y>w0pvvV%F1F{T`!hKl?Ky}cI>1>ReQ*$sc zLo^x;DFq1=*3ZAhoShsM07nJD(fV@NZC~^1H?HoSUr9uc)rO+%?90PH!2P0vD#es3 zPqlZ5gMm9WZ$Jh^Tk9Rdtnd2DO+z{_4e}jI^F`th>#BRiTN4ZGrhLO?5Vw5yXsshlQ?k@+yt7HlWHcrnPe{jOCi_Fuy&>akI}EqC z7;bN|cXgBD-VVkZ+T9NGi+-Fi7$gkZiv6b_;}_rgF3+ZxQJ8B71*X(!9TP_hah#x9 zEtWPmX!rW;8Q9!|bmH*AYz|?(Kf4PZB!QvbZ0iN}A#a?w>^0UG0{-C(1OHj}(8IoI z8Eo(fQsFGYpV2!whC<*#k%}@Q~x6+ajYfHBq(e6Yf?bxFoPLSn>A}h$#lx#8~8>i%xlx&icj>nAl z_ZaS6W$)@HSFfDs%DK~AI(vrk{yqXhD~Xw#>$0@eqdOPVYde1PZ9mOt9{Hp<339?a z`-!^S^*I6l5otvn#l&$!((bT!!v-o!*xEN--nC>lcy5F-PI-?UUTm3Z#HF&+F8MRT zI=f2IJlrU#Dh#GlAnQWhRrZeIA#C-troYd0G`4ex_!bB;WhmvEg`xtf3RbT^Pp=q$ z=h3cy!~r;3U*>9A@wb;Rzd$4;LgpwmLYUh1ZDt%OW-Iq8SFe%}F!PBO``88euqFcv zCuZ2@-dfZOrjyrZyCYX04keecB9t|P3q@lasdC1gFG5V{b}g1PPq?%_CYPGH+hK8S z4I^a;MDh>68P{>HQx0VaUVi>G@B8VWp)CbE5=8BoxD^v=<=NHNQDg?8GMw;XLB z1r*%OOxR8JhKGH=D~X`ig7JO;SQw59E?&*(EFELz*fHXE2OYY9r8G);!zC&Gh)X%a zZ~y9h+5PP2=tMAxCH;0xJJFtO<}7KJ<8+SFnJ36ffpcSu+@L}fv(JF=#i10^7f&W5 z&r|X|M+ip}EBd`Q3xh7jFo)dmuYT%hc<1|GMZ4d{&cJIjL_Q1Y&{`8kF|Br+Q7d6_ zd6lKb6|M}=aDFFal(p!FA`D}3#?~agvX;hO_c`}t7%xE-G)#V)pJ8VX?-EG}0YV2- z0>1EF}NbJ`I^i6B;jNSDSbkmUtwo|BGK zCZl~OqkYDsA*1~rhI`i-?q6lNca`D(4#V9YhP%5SQogpu@Y+=-yL)7#6o(*6G@Wk5 zTtA|hNam&CT|fJFit*UHt08@sf((QBNT7oui)mFFoKW69E- zVv>@l6Go#U!_kECXu^0nVz{@@{@xzLogw?%*BEYZv$uVPo$br)ZEv!B^(y;UcNy>P zQlu$ZgN~rv)~w96=(h!14?oOD{`2pKqE=TanNo@hd67aQl|v`mdlw`f`hz~J>x%$f zygFf$hOj6EHa8gO3(j(!!wXTr7dvwuqXep1IMl#{($8$Zs}w>JweVvBymb zlj}LZpU>J*?YlZ8sOm}%c9o*E2W|dR?(pBSG|6#gr-UQTEW7(DD$<s~9 zQmWDU&kjt>Xjj1tPdvjTzw~cu3x^7-fk+#Z$%dJ?O*8T=ML0(*i7~C1ace{?6`cLh@AB!7{|OI%)0_Mlz-g>7;2cUR zqS*W1M@hoU`Z1Dro9(?_hT}GAR-mjeW(b5a?*wOSSh&WCr(OfI^WlTDW3KzLFAEiz z%ATdlmG^0mwjumQ*R0)>de>J0v8r&F-!4?HYnv#tt6h(os9tp@J zXeSU)3f}Qk|BSEw#&4jrvQTN?n=^YQ6K4MCr?-S=lqjdG;p) zV}hTXBLwZ3dWI`P@Q$b_wS3XTT+D<#%|2&x>ff%x6A;0>zS{qT17Y)L2~B((c|(*7KCON%TlFLLeN%j`}Z zg_X3BU`$Za7@r*JL`Wj6O!dQPz~7gy^6D=y=8Sc4fY_@V%-ISRDoMJf!IKlVVf|aC zhlKmMSp<|Yen1Q=ozWr9MJ+v^ZA8M)ls+>+7nY697wDy;I3jtYRI^(9s(HE*21 zatD!l^@t)xh~?cw!u{yF;rD*- zU(vx4DTNdsBE^9zEMyr@DwLF99I`MdsgOzrcsCFwgQH@J07TNaT?&U09;V0SxFW-3 zIi~O%cO(>%6rdeXz5hRQ>L2|WC-1!jBP|;1IR!!lH9$<9L?qoFt81%Vc&S(ChcnNmBbY$Z4lW=>#AB@E<~2pcEw9o98*}Nrg7D6j_0g3ggBoW084*6bd;> zLx7M#DH(VL0_$vb?WF+eyeW^hIVQ`nc}|h%n8Ftcky5l{!zi`<%Fq7--}KkM4V}mX zGjb7}7X9l{qoRnY(;*oQ=r1jB@yyHY>}RC8q+{>~NhOib+A3J5JcK>MHsiM0;A$Ko z`B_ul=Ke#|2te~%)m)t5-{C}M9#nC04oML#5da|rui(p74+LW}7c9r;M_Y7vw{AMx z-H!@@qxB_LQtaI~*nU31|1}xUis1d`yr;dJIdetR%iV!RQJVLNutA7wS||gdFGPwu z-!i)rAS^cn8=U@x@H%1|FlcZBbfP&zaPxa$1|$7kR*-{s zsKWTaKja6XA`0Wt0i^cxOyNkB^OnrQA}GR?B*PU2HY=dWajx)jz*3NCN6Seb{>Vo; zdH2m>iw~M>ArVrAQ9y!7A{LIV(I0e33y_6RLKH!-p{!~&X|}TZ_3^`^c56I@swu>5 zYU6Z>k7yqJ4&*E?$Q@2XlfhZe1`dL=&b!??gEa~Y%ia*?PA<^ucy~Un6C$aIklueF zbn3-u%)8(5E<{kFL`wLg4d-QaSwjlg19h0`+Dt zod^(rxT%{A{uw;oZ!Yzgfn$m(T>qx^p)Osc+xN%w^d?og*G=1!mZUag1v|qOr(zbC zmQYHe%h_(|97Q9)+%*7AY2d@Z_YsVBU_c2~6(QD?b6~J8^<8ygF*3pl!N@r-?hJYU z;#DqPzD8R3A2H~~+KY(_$9vM zd;ccwxvrl{SKh7yr6P2c5VyO`FD=uVn`f9_Ws*s(b+u=Mo8@qD=xgEnQ{DQYIAA5= z8l!^J8-m&RW~OH>)Vgn)hm&)qs+6LT6e3};xInwxN2@rfHv+m+4jf$0bI&}-))$^* z5s6j?tz&f6K5!rrPd_vHvPFd zy8Qurdn1g+n-Ot+^@Ny0*hC%4J>wTJ_4K=gG0jyWz%;?ImIcBT@8>X(@H$=n0c7CN z&zW{NEMFUng2iiF(aF2s`1QblIojoq3V@?^y%9h*yeGCpoGO$38U(%OjdsZWS3;9k z9K69r6%GZW+gWOh(d*^H;I4H~}XE{q^dczSjhmD)kBiTyt zTn3;P26o3eg>KXC50I*cjVZg1M#qZ;VH{S%&gM2Bd-rd#AVK>WHKbG(!e9y$lmf=b z^GZu93NDQdk3N5q3u7A+1Z8ktbqse?&VTNC9)8^M#`|vJ?)4T6IwLB^zHqYMyok)Z z_etx}LZF=`)`Il(Szh?UbKLXLE5qOF8P!61#35>RP*ID{V2J?VHL&~YD4-TcMIT~7iFHuWVfoOM_TV5gQ z4$vw_1vw?6EG+#<ISb*j!W9z0KpNx47r{G7sIn!0|Xk3xjpRt+24zyufBAP%9kT`NFLg!3Tcz*ZKQD z{P&Q(R>M_WGzw4xDOGzkC-#=ay}3U7<595Vrn={<0=z2jMFWAEiD@eRH!7mv^ti6+ zu~8#%_4g<}9S9?~dh9b(+&5}@*NpP4z`IbSAiiiA)d8JxxXxM_x;tlxi~CwfJN#GX zI+6i?1+4FX_dAcz?OqnKEe??8T_cgt9aaKNWwMLwAOLm7c@^V1Wf1QIS*mF<+>nR4 z2K&FUfiydfs^cib@N6w>s{UP>#snjvL&8Z4>ljW9QE!e`r&}HV75krB0yxWlKYi*Y z;@qGl#IZmr7lt3A>ZCmqU@7u~JU2YQIpRZ4oaOx3&qi%&yBp+eG20r)LCMeC${fZ@ zp8+7sTU1o;jTMSw{iE`SV)~G}-u0;vg`g}j)aE}{P+uc!r>eVJc33JzY~wXix(?PP zl;OmX^m}v$-ubW9Y6m}snlL7WfZXxH_kDl}h+=3*j<$BRm7uK!E$yRxr7f^|ip?f$ zW-%Xs_A*ah+zBPDUGMW>gLW#RdRI>V=V4QwN;p%Fpcyt{=x+?}y$ z^i!#OY<({`5C4O>&_S|jGazXC@0@o3o2gS8&Yv7W2}+Y7MZxmcS(Ffe<1C4-jnGp_IDis)`pD*VtTK!~M&Z{_e7L zk}FO6OTT|t2Z#uZ6DAPGEVb;*RbN*gC58ek3{Luap(6)TfGBVjVUB65!$gF`MmkW= zL$FyUXmxwF)TxX+E;nFg=&*dRZj}EW&b)AnNJF9=of!HpLBAzQltsGS>)MSE+OfuP zc4&Fzg-ufD5UvQd(Cp@EDoEA{!KY7M<>BYH7`m7u&HsP)-aOd0?JDp4jXBrad!O!h z@4fpPz2-hOPc3?CP>*^&kSqz1j2+R)UB&CU#+2~_rPAjDqCHx{179^w@lA_h!O znKOM+7qYi}LS*KxWpa4PbnlS5s=!J@J#3mUPg)btwX0Y8qu>0$m>A)(5^AH=Mwr!x zz1p%rRc2GLb%O90(elwR-rx(%?4DP6O$-=T`FG)|Rp2*1`dO|m0&dyTI!UAK=x9&`z2jLrf^gcH5p|{X@QXxMXeezU2z^2+ocFff%B+B z_A(F@+gm{zB8zkIjK?+Sq3an{kyUv+r>$qfP5o#D3i z|B*8nkM)jV!`6GFTPR@RPB3_fj$*U3&@;Wv*YSz2pb-V<0<)t-Vr53L0b>w)&;TUi zk>TTi@G&gPv=*k7us^Liw_kJb#Y67D>xfGSmOax@Yr|=%_}x!Ejq3zga{D0MZbZ`K z`Tb8{;g zA+llE(9ZDf@2q@d;WvM~8{X*fxb6Sn=Cf3y0b`v>`d8y4)BOWx`+M2De+-{@DUqN5 z>=!UWnN~2Zl*$+?Ym#3;hS>M3iX$7DOlm%J;`s91tzDP1uUSNBuzX1|wS}p`$Nu1tijiA3P_P0k$2o_!hI&%d_=pc{>Q{8@eG&U9fwBmQ zux{zwxdNVbM~|Mj$Y?13y*7l~8%g!3UspDbbRor0nl)!pVWcZ5ZIioaF~U97cnE;X_e!@vB* zlU(-`G)kHcFV2q$SgTaEQrF7Fd7l2_ms6oYH)fcjeK8ng0YkmF2h|i8G`Yv=7I77K zHtpFK_A`Q?JE~?YQoshivcBo-S<$j07z`SP#s}*CL#pWvW22yn;9Q}>XfFFeHL1kvlqC45D4n|_)`l$yUHn* zQK==7GNwaijHaTkf|$IW-EJn5dasM|XL_KiEcI-PH#IJH5!$7GP&V=a2HSTOrEvP~8KSAIM*2RL0*8<#etWTPNC6G7PQ z40THwO4&tp-yH1?VkJ^l7F!vr zN~o=3tY={=e(!TP2!wv~eLSjxe*KsO1tcZkg^@9kc*Fhh041*56y? z$4g&qLQunGe;-@dWX_`xiZXq2qwu-Ue1VyTiA@Gd(+Nx`!gMA~W`@~Bm`*F0&iL$U z;ItcYU3>lO0=@oqOGT74cDO+J{V&~OLE5Y<0c$eaP+Y@lCG6FPFaG{VSu9q)Ko!7y z&*0+62-&bXsnSgM@O=RwqltmxHJ)+pM8`!s>sp-60qEI;F zZqDmY7m%c~1*_cR6CnbV=sCE4mFK+WYj(K+y8>W$Y&+`J{1xZjs#j%qX?;=5h8VC{ z7K;!?dc%&cI?!(8$XV~*4;fLqiQsPLzEh9)9bm~vMonfu3?jZ1FQ3tZOa>2G@?D3S zxX0l!IO!!W(f8T{iHeCCf#}qN(co1ulWDebEf$?DFp4n=^-}b$!C+XN%n=u;a_3#u zP*)X|5p1PM6`&TRs=3iBCpou3;`Y#-UgRahn(t!DN+do3;}%slAxhP$Eb@eg$E#1~G%;eT2`<~}MjNw(|A0OyVX!5RS|rF7TyS3? zN!DU&r^(zHGusrIF{C?E3fLHRjs5r0<<3Ji+3ZdYK`ixjnzV#Ixk-3J{_KK^#n^q0 zZ`|T=0@JB7tqjwN#Y`+x873BNZJ1WjR(pKxi#PBc`c!xxY)rlsg+NN1)GT|AeCAfm zF%?y%*a_+LVv}go2-E_ViA+tTb}gqjZ}i>>DRUuRhnOd8R0NC3_o~6xiOvZjoA`-I z+ME2aS+`;|`Fq&x_F(h-E=){bxe z`#*bewwj-_gaHokI^#lVJGKO71M}AcmfM6CIkRKbkrIDXl|TNu5{fLk455IA$00#? zgsQvF$aL>D%|%b@dSfx)=+p~jV6j{xs%arNc|q?w@oYV7EKp6jcDm|2no{_;_53jC z6H*;Cz@(=>aO{$>s9&h(bb-VLtXVRtXq+YKXD8#vUdVbYsxH8E)tGMxApV6}j z9A1Bl*erHJz`uaUj+gm!KJI_`-p4Qg_HU=I&XhB~rr31N+6~wxu`uKXtUCj*@r6Ci zJ_;X6&SL}jKNyL0bN8cgnJkwUBWn=oFrz%?7CRTYVb*x?mEW?NXYNvjf+OF|4=4+W zZcA7!R+)=e#45J7)U`!S%+RbL)*$sBPamIlR)w3L<9Y!k-TN+1Y(7s8xaE{;Kc(b} z$q~yj^=;0luB@`KI6X~>NI9a%*xbn&gQ-kLSWJe_b!-GxoIe57n2mEHMS#mV{AYaP zH*+SoY(#7yDeDD<83pR{<;57H#H{wWgOL@R<8Z35JUvMXgGO@^5%Y$eauuu*#MYb~ zM}jdK^*GxS`K%x$3iRgMGGgvBOmnvzAYHr4;9}APSV9XfI2ok>WV=bqYlOx zsyZiBO6Pc(?1;7Z;lIts&n5>Sb3&&Sz)r8&V1{l%%vvy*CSAg41t>SJ zE{jb1h0~x!QN$)!KWl~Qq|Pp6Sz8dZ_%FsDb{10LkXU7?XTn&eY?6*bY!+!DIDwlB zpIz?g!&z*e0~cfnNMdtjk;K&Yo1Tjvs)~s-1e?{^DG4^I`%Q8ebc;D^QiN>}!2>bR zT#Lr^ekCLnpsFyH<}}0fVml9aI&Fle|1-rokBqxOEep4NT6)??WF&$trvSR2v}>cK zJ#EsR=9sUeLNF-^#u!6YrBEZyyKCnikczj?H83*W+bd9l^nNRZDo;mLCJ=1J!mq{~ znUtNVY=zLZoNdg9Y#H~$4Zb{FN( z`H*(?vf7;{s4xqp$mv~Of?v0g4|CyNGbO`@e+JPg+ZuslLzmlh3EMOT-Nw^7(QVEx zk7>_4snz?n*`|#6sy0+r_q?(pSnIiI1}t2G>1>*dBC^R&`gnH^g5ATbCFX9 z(-N1Ah!AQSxZwVQP(hk5pzywzBmhgBl}VEeMP`BN^$jJJkkj*`W<6wnZwe+xCKZ^9 zL|ODA&+UUB8(#7GVe;=D(HjN*&|OoLg_xBJR;7>6?Ve-X=cyD5_6td8)?^KKYMIrB zSehusNXXYN#@K&|&tEu~-+RpOHJ!f>3BXni+g0)2@>D@3U?utgR|cwF=-FJnn6BW= z&k+?u7Dh@{jnx0c9J}`Di?L?t^fPoGi}w+;xl%t!t58{?t_^8|(B$hExAN&5`im`o z4yH%T=!7VP!{!}2c-vE3T9mN2K?Ymar;@wm)YSzPQJXe~E-a)A|0x%x>;Ij9PO zv=~P;<&;~nCUWj@!qYcfEKp^8s4w7k zQD%n+18UKAZLuTs6RHxt$EasA0h>EVGq|zlEC$9t4Qt%DY=LTTZww?`ibC1CL5xxX zwY<(9k|Kz;$i#6lwGjOvR@6w=tP?|knAG{_FI~b*>J~$HE^_*`snVObq8#n-W&eEb z6EmfJ!`(l+mlw51DPsO$#~ise5}^oUK25sk6K3RAZphe@BI zkk^pzysRUg&9+ESf1Rd^|ZmlYDii*I|{Dh+`k6Z!%aJTC33V_{_4?90Onrge@ zt*0Z=k5Eduw7_8dU>ubmTD?=1F5B0eo@&@k1RNGAn_>KceHf?EjJkv(-gLc?=$_M< zJj!SVtie=)y}b(OectrfN7V*uqYuhaWp95kj|fIW9Cn2y%o;|OCgOScfqVGWjnAi1 zz5a!2UtkT%h>U|+G>>n^E>T@LzgIDp6}3t90#Wj~WRc7!!r{>oV|O+k@%qLjKl|E5 z_NEqFOW*x>2*7Polr5uh8*uoRBQWOs?HO*8XZ?Ive40F#YK&kemi?K*8pRruss3*B zj7h*2l+b!ET)f1>EAuw6il+CG&vBL1Hf_e|4rU2@Pj0+a+R092luFotcCGZNN@p?I zjSk*@;ed&W)HdQZ0rL_PRbz}~XTJ2lj*gB76RNoBWzpMY6sSODBXwQ%c8XHOV3$JN zt=FgXQ&{8wyWeBiQvLLd&VRVCyQpqORK_vFxBWbo>yaY20S)fB#;IqvJf*5+vRmm)AxB>K`x+=x(Jlv!`FI>306 zFdZ7vlewwVJ|`fQBEOAb8lnB8o}quji3Ps%p2wK;w8LWp`jtfHU|zVAqG5= zkQeS*6*=5Dm^$xeRTiW{-vO@|W+S9#z0kT1QftjmD%l!T^eWg^Bx ztOPR=4i1&DaJW#6p9LU9LhuAN*r?q1tjj6kF9Qi6($oNJgTWA2`_6S zRGMfTpI=+dd!@tz!RW#ZVnT$BCN$=eOZ(K-A}xR__*{Sm$wj9KAsCz}=Z+4Npi*Os zITj^!(aG7AGR9mH28cdzIP=)brfX*vOw7~%ojB8E+H9Z~`V5CIC`fFc$Io6IYlT3U z?5BiWWM^HEcFvYcmEAXDPLqsl?!+-FLRj+}(oq7Tbd5zu9(xCdPDdanXN735Pf0J# z@)y>j>p%1+qal0@j^1>kagG1v#WE)<2I^8T9>Y)@*|{p zOGme63(ML9u)fL1z7slod)eq5w{{yvN1wR~TN~^|IDg*an-w7^_r(x4I-K7AG-`@> zHSof(c@rxSjaR%vh-DIDLIDn}^1S<|oTtj8XAxr+TY;@e3hw>^6OsmCBEm%Syt_@b z$$hoq;fpnsDq>9)a3ThAQBZ z0Xs3w_6>fy#Cz9w{u-5#)Au?U{ek=MBMP|yqBo%FZ5}G9CGy~1HTUmV)FN1s>=|H~ zSj)s#OpRq`Ofr5-QUt8Yx&V`C1S2p}!y^}kJyE8{AbI?dK2A7|Z?;~U-S+@TM~B3a zCJ;j2V3QY+^qXqRv&!aF-f{i_Ce!2rVe5)*%-8tZ#WO9O*FWqW z&uzFrEqpplqnJ%|8{MGmV~m4}KNgX|1FpGQARvsVy0!!nl#5dwEQJ&FxGoyZ5PfBk z3hWdvo)<#1%sl^Q&`sJvvY0F?1W$~S#~yzPje^rO&mBfkX4)M$R^<%T<{5-%ZHvDy3qHC; zzf8vn? zG}jS@ZCL@D|I^e4TMHL2Oz^8^5<8B%-LN?g5F>;%cmDhrKA$#%S5lx(+>)vkBIjhq zyI%KfraG+7A{G&wJ4YGpVXZ}M4)3w154@Rak6NdrU8f=a81LdqngQ7Fjb-9SS!r$blhorX0SSD zZ4~$Hqbv$UOJ~54@An}QaGSB$de^U6L^%Ep+g>YF?VQP^zH7JY?+Sq3k&o%(`cbvK zhS6*{GjgKqvbPH@Z|~^Ur*dqWgU)uWd1Etc`QiPu$4yv1^s~LOcXp$&k1ZFleuOC+ zRL#(#()s?!?3HdZtUDwLN)aZKa_q8_u zPw*kp%L-SX^9W8rz0gD*);Oy3`+B2FUHiREHF$G1xwmnJ%bS2QRwKnMXJJW-Tazwvdn9$E*^ zK_nG=2Fc2NAxh-Amkn=t>4Sh^f)WzOlbrTUiVn86?*B|hLJC_lVtDkZ=G71H6YYvh z4AE*D)6>+!#>|VaLSzw@=e_uO`0PUwV)E(N81el`qY{E_9C7+ZPe)+b;#VX@tPbm(A{x{pfZ^Dm|W$^mnh` zTeZuT5~o5ebh8Cds9 zgH17+7)e6FNo4;(xp;U=yO`59O@fX?%wtwzfRb}EV2BYylG$ZXrtgs@4@5_-}EVQ$)Y)$Y!j=(^B>sfFTL;*6Mw7c z=ew)bb%x#tf{!eH^jvZGUNlCQs|D?HiJM>N-U}6zsUS8c#DTF&d@QrH?nFcN$McjOeZ&INayu*8+ z5rLRCPvEN_e+k||@DY~_I_(Jz$%Tez7Ek!guey(Y0}dqy+n1GMx+1K59YPd~SHYo7 zV&t#A`C%?hSE#Xs%BIh9Piv)aw+Y}q$oWGae)M6;etS+|a}gc{f@qfxvh{v0eI2$V1#8~E>(o(MOzN-}l!)Vc{=l|QzyF@D zQ0$+spaul$;IP5hyG4Ij0PK!@Ob+%RoHonc6-a@m$<`Zfec{zY^ut<2YdOom%^|H@ z@Y3je9E~2WC4X-Thsj-yB=|IqO{KRX8%8CeC;}wMg%?r7c>#$+vcIjTO!h4gUA8Q5 zo)FrG;98t>qs_mBl_Lr+5L9{7*S(#kht@~h5D7u>J|^>*m=`8-sBd}f;)1{No)_XH zG{N9hQg=r(cnSFp#caA1UF7a_H6MKABOKZ}kt$IF))pmO^6?J}K0<2^FMZ|95*pEU zi^WFby~DLjmdD2&*%J;AB4%ocbu2vCbG;bjsDSFilh&`-?V_0VjsmYc#|>{2t94)M zjCHDg<*xIA=J*=R`ANEd-VuUJQvg{HAy^)K^bwx@`Zp7he7!W&0A{e7CSqd4L+4j~ z=er-rxrCmCpo1At7kDIP>~SP`;jg^m3NL)XVzdFVS+AZbppL(eG17X&D!^O5?VH&@ zcbFy|q81d!5TMit9R-hXSG0>c_Z+S`IEt9sA~xoH2pxqlZ99iC>utuH{CXIcu7!iG zkJa`dQ2tXliUf^1*7=m~V*Q4$XHJ*&3Rmrjl_JAjON63x)J&Ghli;bF)o$u+R{-pe z{-$c1i?*4krK$+FIg3))v*ovU7Hi@!DdE z7%_zkKbgKbixLfdvoj?WVi`5LwX zGnw%IZ~m)z5$21Q)}`Vg#K9ra=WA!1Q(ph5=lj3$B^VD)>uFnuk0FhWcGL$#>jSoh z?|j>HdHaj@v3`!nB2jW^ZJk4*(y&?xN^nXmhIhRCok_>xLpCl-g>HY{GLjKP?*5w< z%lQfST{6t3f~{vr74KL;t#kTD%g4G<@R@Y}>ru^X_gNMTu7i!T1(n-+pLU4J1|+!w zVUC)WIs~Ga7wlI3T>-E=Is{;~I<(Q}8$Hd;M--cVzxzVH*C@%r$M-j7%$>AJMk$&X zehrx;Wv%-kZgh+EMmk-T?*IX&m|NSczOz^^?=MEBSfB>ZKlbE+W;3ItW9aCBK=PB1 zWk;fl#E>A_8gwSych7|8^l94V0@rxdHAyfRJkGUwgf8m>+JK7+Ubt}iUf%to??Z#I zYGLUW=OgMP_<(2{&l44lSnAmD>ibvx)OWm+_rLK9Rg9RJx^)u+CPeN(G<^5FU%>Z& z?Y%s*ca3Qks7%UCkC|)rn#5zl2UbyVZD8pQ@A=@j;zdxGc<-Pt(GnrzLQCTu?P^Xq zU2ysCfSDyBq&3OBMx;bo~<1$JkLXf27XXSXsl}r4{2Oj4gFWBRV zTiN3w+ek}A$Xb^u5vMJ!2N#vQUi2bf^6HnN(RTVcg2qfk1w!z|;L+gm!QorSVzI!T z+~nc=YRn9b@mQ&nz_8ya%M?y6bT;J%8#{)5G>+Gg_DM_}e)Nb23?UUWd7{VUd%wR? zi^(8}Ne`sM^YlnvDJ{wCP2%@Mnhq*-2jlRuLXX6{VO3`%Y!M>UYI1S6>i@+$c96`U zrv$*5%a+h{mgCu7+2H;u4131^Ig9}I8~Bz{vEF1z220@4=+3&k-!ti6w#+wos`Sna ze`F8bjdyh+L{hqpDQYZs0!J5=hb{)1<5R+2siXGZ;eFy&>#FLt0i8a;1jUK)&i8*k zzwvYbDYf$~8_Ti@OzIR7Y$KSc)ET-=V|@*e?A_oyUvtDaz3TNmd40vaji`xS+MjXn zp!?PwxIB{rtH1hIZvyG>Tq+gx9|L4S3fQoySGri^jaqh{kHpa?!9n zeVTipTT$;D?8Nq-_}ed-dR1Gj;A>E-x767LbN2_o9+pBA2xhuam;CZ z%FOK%!d`*kM7(P-Zo>J?ck{j<_#yt+kNgBT7M}fur>bkJ8q}q+zt(`nh%qzv;t4M~ zZ+P~5ALPq#xx(kJF1dPZNmRIaSo6p|``ojq)cz(WI-*G-HslbjJKAQ6Uo6>Y&OMiEs>uqO20|6FlsXPM!{ej0b1u+1 z7&%6k9ldO$1<$Yn9YuQI=4aRaL)Kj|M~s1d1=)r|5*Egt25?sZ?2Z9`F&x@bz@=+E zZZXQGYwJac4BYNcG&xBnNt%TS^ehBuo00II!~7hI|Nf4}fFZuua-nc>@(Fs-r1;+?0iYJ3P(nl@D%Be7|D z@S#U}!w3I8KKf67o<*a~8f7w3>M2N@a@s4eRC(ktszstQ(Niv)mdlqlh5D$)#S?sV zgergspHE9N`5|rOL2({h4@)PkRxtO54}AE;%#IG3pU!E0(|7){D*{@NUj|kuD=yTx zIDgJyr;4f4SYa9UT24-gY|dOi^R;+Oj2@&$^_1>PyG8 zmmRJNxvNi5x^s@YstIjNJE?i+`@Vr+{rex`WI5;N@sfk7LFy_8MP(ac2Vy+dMy%AF z(-Y2LfEU~|ML6n<(C8L~rlGCC`6?Bp(cxq2@?BKgptKPh2lGYb)(YI^hj{JV-<(hi z=SQ4>LafrrW-0^%(K*`XDeduf9=>bA-u?tz&!EcTNO@E;#%#?=;k%GKaS=(=8jK5s zE^J7)+IA~S^K?(fq9OOkS=L6#@(X7qX2eC zci5O%>9oz7v-fd5`)jx5Zgt%GjojhRG#2ViK%N;Ve5dbQ|9?}Yi*0ltnvHf$#7=6S z{m7L0tuJwW^C=edIqj;!wJxduLkGo{9kow(yAi(WyFSP*YL4fQ`6{qzJoCokJUAb5 z&f}e@^)0F%)tEN-=+fw+3$%WP28a4&k?Tb8SfUz&ORjI7n%((G>y^_+xpmrN?s$cPtyim8)&6WEN z)BT8<*mMmwG9+-zW)W4~jGgbnHf@D$DZuY^|J^Zx^WVacKzq%}GkmU&n%p4(y8>W$ z6pN+L;-bF7HhtP%->YRMEh{#&oO6}arfHO1VEZSC;R%3`-K$4+f4>U$yo&x;rs>9J?G}kPj2Am zOB%N#v@PDHjW;dkX>rDTf_FskX;%yGeds>E{l|Zbm4j=i4af7y$!TD@@U%_DJH@pS zyiFUtSMY|Y$=5*C5Y-YouZ28XM^J)`$t}(+E?63`tQ^c&!i~A-<_f;!NB<*chX;7K zBDfZD5e*Q!&EH4VL$mVuTUWXAKt+96qqRlzsAcS}cC+Rq`fSd4wg_x9j(G@-S~r7A z1wrD>JMX{^sJSrHu{vC5i}Zh5r2hnluFgLa1>e*+n-VPUoJhCxM%%!h>&mf;T?#7If9%LPKyxp%RkluhS!V?{Lo1 zEKa$8?J9BpH22>>L#9BT5H&S|itTujQQ2!$v(BQM|JN~JuOY<}ODD9=v|2vTooLT$ z(tRXfhm~Q zw_Ejh1;Fm;7VB8X&~7^ZjY2ub1@)S$p0S5_{-(2>|3;nN$b4jb#V_lxXWQuE#wN6_ z%in@56n+MY!?dUv?8GqLhZjG($MV)K7R@QE#e$|y8%Br&G@Cl=K=6UqJ7U}7o0hMA z&l6nvy7zH>3^z_ZCyT(z+_P*V^OdJ@N%h?s)DSgoBzdwRgp@28g5Z2|s&gKE{b{`yF{ba4Iy@8CL*@2&B8NB%e**It|V7~i#lM@x?Hi*%P7AkBAO=XxII39T* zvO2krZ&x_yaIMP-PND&vbGW9#H7&+ie(3M~FekyVTnJZhG+aMvnXf#~1-v7l_w=WC z5$Do%X}qSw&ZSv??-idtkU|uk3$(taah}Ep=1t(niDz-DoJh^z_**}KTEV*(bq?*i z{|xtcQyU@s7{m}*td41K9rNJj1qTNKJFPN;!yVH0HmQ}fES|S_{%3dR%9g1grHIPj zqt-KM-&uyyA!b(X{9 z8GyX~L)YwvyX$F6WNB>#Euj5mhngY#L5(1lrP{A~_`wO2)#q6p&v9+r7eE>UF8b6> zH!W_p#JMHUdd?&K;D7e_xZ#AG^T3lg8*ZKkR;%IBwvo0;D2{WmYCOv(uv~doE6=LC zZZ6O?X;d(T^zT(0nXll+N#NETt~KyIKl>3LdhB_4?+8sp%tcBJsj!UMg)$WZ4&SzT z=W$C%ymf;YJXBFnfr&{O111?tZPF&WJQkB5+r2)vdH_a|23X6cl4q%Y6sShOUhp}AQl3~6QxcI=)`dT zQskvCtohiNud%#z59h)~nzq4CYK*HeViB9nXKc!Mp#`RrVr4Hpa5sPFKmQ2-!TY}n zd%U8~!9HjO2(6Dyf>2LV=uB<%`N%eLn%|4}k;VstC-Kp_7?`)plQ))JJ&r7@bNtlL z{y4J>7jcVZeB+(RyOy@~v@X#X-le(m`N>Vf$tQXEt1Z=DKBqj=bf$n)|%$~P5G7n=I*8fOv%J$F97NPNBfOla{3x( z$n4UngPOck>7(g6MEaD$XyOPhh_cqrtW5*--F|n+>yUXaeV%;*DNEuVRXU#1YS~cN4YsbZRfV+{;{}&rQpjC$5Qni!Xocsz_%VL$AN@D{ z*mryf_P7B_=O;$T-o)d5g=vLqqB-$TFs5^COXFfOKnzL~1Fi|Q4J_KglQ$Y}97h&m z#*h5h|A2=cdm(PMA~p>^w6rc}=-LsT!-a-sHRt5yl;!m=^1_Fg9P9^lQb8pcODCpC zx{Q3DwODM2Y=c}l#{EN@By6b+LgF~iOgRd+?jYlv#0rAY#;_M2uXZXOke>2CYbAIO+evWG= z3y8`+&JuiNIZDQvgtR$EF)? z@ZHbjz2lL){Iy6%dE!v~mxWc13?3BsI=F$Z({=eTWm@xK@1etVX#U-$yJRdVzNng} za(Y^k}qFbmV541zUqaMPh5MN z!;AN@H`~KC9#=c8v8kh{*cd&%L5c(dHru!By@U%`;TtlHqcJ zt+u_QBMxA=VGDzy?griDAa!Iw)5U_0eZh6`6zCTH5o|pCx^*D3^9dOFop-fI$zNzl zo&jb`eE_d{TSF_7-SU!R+8a{$EE7abQb>z1SLKCY{R)2i zSALnl_oF|_wcq|fn71q1cEW55)2UKdg0*cD-}MGX7De$Iao(}=hSSrQ#XRCe&B5~@ z=imS7ALsrnSC}uBX(MTq!rggC+q%SiJ4f3zEa#`3Uc1ielb_z2J3KkUr^*? z${adg@zQhrPyhT+SRCDh6~W33Oq)ZO4BjMlLstYrg_?$M{;t2yl}8`t=l|9Z(VQIP z7Y(O-9y7JYUDn109gVy`R`_DaX1E+GpxBk>m^49mhlLiA#(v<|4 z3V`4{{y&Qqy~`*lWIM#R`&IMmrj$DB1XS_ZZi7hN$?{9Yr{ zM@-9>E<(;=D@vTgNTx(8yWFk%y8>W$tD7eGYRj}B^wSepg zH!+_ zhfMcp)Fz;r|IaGpzIf^Aji82!1S~=mSKRy1gZ$J#{5gL8fB2{T>QDa|@wi1qnNBP0 z#8TC%U@)e8F)n%02UxT%t_ct=D>LCeKk$RR```Hh)!rV<`2ydp@Xix`;`yELI>;91 zR;-qD<|nsUUVWP8sXyffZ?7vWB`f~5@z2Cp^tY@!1Yxb;}=lzXTVe;4h z`0-!V6d>y`AIF<2efLO~Z;6(VfjQM@eF5^AE|H<7gh9jqIPmeW+O&wSz5VZK>;>IW z_|lE1vxn6&7&xP+;CEIMEyX=-J-HshH@bJQplkEN3glF2MwkMDT;t@iPx^%n3Pn1oGe%zQ0_umVAX!WbnW1eq+OoWv&%9kf>0p zD9VDxGC?7;lP3#8>bQx0yT5#9G<*(QM60Z^)n&I~6D1@;$Y6z?^E5dcmNPiLQiwL1 z6?B*BpD`WyNvqTXrUwTyNOy9;M0|?x#%gHe9wYeMCp5QK2q}2HF zIQ!ZVVK5VnF4?;BPcDP~!dbeU+aoQGWZ5{8Z-lf13)Vofbo@r*saNdM*I zzE5{59w0agHB@pe4l6v8T~z)(YblGar!%!#*>NNR=XZ&gyM3?$ucn0hBMA;bhG`~` zgg&UTA{|VLMx&;|e<=}v?IC!R7N!}7Qc!B z5067?>GoU)xsN68XVg&hEO1Jc&F~VWxBv>uhzeNN0bcwE#}V1x9usREjv?(UD53zz z@(6#S#BkY`XG#G24^|k!YQ=uRbvdX5t&Yd*EvOPmeCh>r`1u9Gs}+b_2pl{!+Yzucn|iQZS~Q|W$lbRk6`CVmY|yK8$6GXJx2Xw~1a+DQ(j;<6%_k`d@Y28PSi4zX3AKAX=FkOXELj z_P$c*m3xag8T?~q5DWEwo#yK78yk}DW^;NDQpgB%x3f#0i#oW$**Jy|PdtM6WlAn@ zdnAntwetUT%gZGvS^%Z6+sm{dTA-0a!kF{1&h*YClF*o5_eUr8tyxyil(hjX8t+oB z$q8&MjW5eUM1vixyK^9RzwuM@V8(2Gp&#E@U_ym<_Cz|-rm538?ZryT7lTbDA1_?& zcF~a}N8U@B%&<}sh4=GiM2&OBdoO(_$bw;fNzu?rrZFq_iMmz(K5Y-v~` zelccB!%@9A9ycyToN~*AUiKt5fVw2(3x_Q;q}AA!Dv z-_~B8EY@)erTwM4b;KivN9bTJ30^+UU|fSs;CuM|*8}f94_JazZ=+(x^KF;7vCH6k zWTsA)r&wKScD5QAcs*L8$VwEDPB~+^K^zT@B1L`L{U5V}xGB=+7x5! zRU&&W{a@KHu!2hL^g3*;GtdL-_1Ux5Iz}r?1gE2k+NQvfyv}%{%jS+z)Pl;I56x-v zyz`mAA5WzJL(Z_9`5*uz8W!qam$Gn;4VMYHZnpk#O|#|rgUg(%OwxaxBX|0%(TNg<656?iR}N>$e-WS?ztuXfL7K1FXkZ*W+2I|ul&mTIl$Hh_ea8A7b|6rSfwvT1 z<>V*QqNcZO4HK9wus~LbveagJweutSMknwwck_QTIS#&<{EWSOpQ9Y{=%ux)lf??` zxSx5K{JC;D3kv@3jwZvKxaz#)nSlCSGM#`}CC6VhHm?nj}ssG<-*%z40%-KMUV>{qLyst8L2R ziS)onKvbMKy$J_B9JC?OU)yRuAp?9;W<9~<=s_%yW_Fqk9@#&YBz{i+>t7CPxsCAH zKmlLg+(Z*a1ypI$trY(@m`dMl>m8k6Y{~NMAH(a0B7V9o-HH`JdOAJ^mNf?VwJVAW|%0Lv!p^cTcJ0#t4V@M zB|_|YcH{Wm@%W5+55D~y4p&jT3|=6NEDyWMGGt5_{exsh_>RPY&P>f@ritvDZjW8y zQp%|dG?;STmEZDf>Kj71-0XZT89kn&Vmwc)Q*;v3C(d-&r8S}dvDd>xz>l9Vc1SxE zma;_%xp~j-Q@PLBY?nq|-TVjE4a|3u-~^KNYixY6Q^fH9rud`z=~tdz2d1Wb%_05Q z1O_VbSXH1UMl08$s_-A_u-g)ZerF(nzj*6KkA~agrEG)4%c^VtQ#1F!99=K}&kB;% zq5{{&vAgpO6DWJdU3p~=u6FE3*NkV6Ng%npIenUmFCd4Bu~&~k@BSgWWvs@^?NqGw z32nGj5})6nVs-IXf}l+s1lx(0Dv*RTlA!iy)`GgqD(YmAF@yV$#PD3B+W~LFgGK-I zB>8e2b>{5zK!YG?H%lkna`*);Z9HVUQT`Fv(!jhSWc{7|g=E4voNZ}~n^u4{L~nvs zY8|v`#QV^;u2j2ztuB2U5s}O7C{xeE=Ha;!*Y?&<)c1^-+?dvR_YMRI?Rw`6(k#A9 z0s-fz+`W=lMG$hcAgU2VHyiHbOE>9eyV&H$w(aYMH4^h59K6-F*& zKWf2waL4s)+%wwy`Ofa(HBT}RCtC5y0+#Q#1t@`mxcYe!I8*B-rjm29U{X{^lpK8= zLUk*X#PvZwgocAgyGvZXTH=_K!Z24&(`t3}_!9F=M&vmK1%+&0WSzBoO~8XHBql?J z-Kv}>zwZC^RTniwes$^ibJIX8YEBtQ?e2LnS8CyK*kt^CcQQx4w`Yl=!XP|5BYC{s zwAr*-VHEUGQT)TClJDJnIDD5c`e}QLO`mLYpZ+ptt_?xv=mBd4Hpv}%1L8^Q47!!2 z4-cOEr{Ck0NIzei1&7UfcQxG*CND+ILIftWQ&GjFGo`;pc-=PtBmNiH=Mqyncciz- z;1;U-BZd^0Kqg4$lWoXA*&y$;(EdHkKglHS=XXDbqh z@+u1$wr|h)uw{xQhF#Uq5&Vz#i1UO?7{m@dxJhwZdVkq1(dC zTdp2og3F%WQg?+Ds)TsE-AfnUbYDBF!i|$z77ge!HHbpHZ@P@Ia*ODQ>B3kw1LpxB58`0B2=xLc(s%|I+@>DvKpeakT|quxFG64lhox53Pr1o&Ox(37fXn zWa%J;Bi|OL{J%{3{oTXn`&V1uZ|Zxpm9`vw7CT#B0CdMld4s6e^Z|!pI;=Bj<|98P zig=yP7OtY!2ddgANu`NvR6Jm<=cg*ssXMcV9X;43iFL1(=bz&f1740}gwgemQwqAX zKT}b9p}$!L4b60zGY9zDAkBAXTXIEz6a$v9yKE+AlD93gByGYbG~EzndaLR zj7~1h4NR=_jW8c2ph1+EPxl|j(d1wzv1-O9SK3}q1d`bnZ@R-yQi`R_q;`jMC}km6 zAR7m8Q&W-P5g;GN>mvu9xa4iQRceWbseXAB2D*aah0~bDe<2G75Aa1`F^MoLTvu-1 zQ-YrH{VsiT!CZuKA@y54Wg-m(JlkSN&B5YOtmpDi+v>bR$iLk}B_|(F#I78DGk|vozxZZaympjzlSvibHNae~$pxP|nlYjwHfN1^w z0nP1Wdbb1JY#~*GzhzoaUWvjJk-oeofz|xlLMV2Xv}Ww)&TVrA)+7rXJ44jGu|_%_ zBrWTT4*7&WhemBrrugV|?brMGzJ+(C@MXBnWY{wZ2bG4{o^XENA;U%% z7O>=Ie8HMZhOCM$Y3&`5TNe$z#Emb##V(9KivuaL$)wT5GkkN0KF&6jU5Ll+^UM>% zmpkOq{qDzql>sxuaQohXEnE^X0Z2cz&-I>yuy4atRHke}bnruU+2vALUYfbo8 zs{nbxl)HcEEa1wL z0vjNGcAZ6rLZic1>iL7io~k{Qg5cj!^ZMn^*RNZb!k10q(OF<1#bQ@XPAe^;?R7k^v%duvSOm+(-%_5sDjN4c*KhEC*YPq6&A|fhgFkIoT=fj2CzjG$a#(3eEz$<$R7~`EfOC9kXC)-kFz-C*^f1tD7EVtu+K$m zO04+thy~fD1;?|D%@%B`ANUK8jI=B?fW<#D<$ipO*YeyPRYW`+CIww$2&V?804h^~ z%%CFBZ7U7nD(iI#Ji(E%AWj$ELEPKX2!VTjI=J-2e-v_s_)2yo>W8xo=WcyrMr1VV zbLQ;d2!%_tzcfy>H{;DFRiuhwAw?*g_}NL|O!H$xGzCJ&WY^>3Y~>j?iO^` z`4Sbee z6R8#k&m<3{ix0;K%U_B#S57p;Q7f?7C;)AQb|*wDfXh%xxrNs6R?B-ks&0WED)FV$ zcCM?B2TcFXTmw1{qmc@@f-TZ30z>Mr+~!b#A#ut$gz0iFvY>i+sWh7R z1n&W9C~7Lawh?N3xpg9jb;aS}3t-}Zhv;|;Jw1Azpgb%(V3JfvOGa29e;KpgBz#A; z9zm`BTEP2Kqnfe|J9qW$oWa-cie+tdg(l%GI=Y@mw|w^9KIJqU4F)42L3^WEivp1H zT$_IGEZJ8z*!vsIN6MuqRm?wikII(g1if2f3&l4dYF2Robg&l|17lZsOfP7Sf z@suo|dGnOR{_|JjG9-qa!?+K*nrutKI+hA%iNVD=#v+6kD&{UDV;26@g>Yz^jAl&! z&lk{l>|zLEM`|+?GM9Y>Xf|@36DpkA-BL0kAe>pRp6AZwCjI9^{QLT+XZ?u-a=_$v zT;Nr&pnMljow%sFjk5Z3vijyH>9`6TLGY?X<6dIW#!@~#dg%Lf#*O7sfES|UyrOwX zZ{|pgdOaz$`Z*Iz)UdGOo;II8kZPaAF$~a3Py6g$N85Ayx4w=f4RHl|B+s7;B3tVq zos2>R_aGq|SuN*qi0(0%O0VT^#o%qG`@QjL#@n!`-ESW)jYue>lkU;@vJdEv#Ay6^ z)0t*}pEeXRstGk9Gev@&WT=t3JA(5YTYIL2kY;k0>4&3`F-xY2pKC;6CX-@pDPnn+Gm_Q-o#1K@*s?uZk?4An%I9>DiCCwyH;M3AaA!Jz%RM8B*Te zvP~#Dn7BKKCGkmdx8I{S?ZA1ydhmw~Z#rYFzP4{sZ`JcWSpo48d&=@M!LhN|q=>&6 z_(`^@Pf_uUs_QGVmEv+~m&j*%@$jxvMY{b`0?f~>g}Y_-#a^r4uW!91vU*S-Ym-y+ z%p80cyrHS~lZIJf32U&g01`r>S`&%N=EBmV!fUyeoNn+FqM-@*J+Y21vZ`hr!g@x6{xO;B??-GY zOZyKt59#+TNavaV;`%9N018GEz>$g6uMJw$0Ri`>P~RPsM}6J{Jnv~eUrF2k5PbAC zD_jj#w*+naEFNA%5q;86F|I|+XbUKB;b=ABN$CK==3cgzVD07qB>_#$bu^Qh~0w0*sZ zhMyb+ADxRAyS|@ayWWq@IRiUKln)o)$b49gW;PCZ{OjhXjc5xcw~yS~iaVXa7d z09OEIQ{v-^+}5LwVGO)T)Cb8cC6hGe%G(=hdbVR{0y9PV)&OG8xhkTL3TGfLon;xV zeDy`CjWpjdRVtReUox>Grv4h>+oX+EWegPR#17`3u|N2y18l$~i{LNz_cMNb|7gbz zxNOL-P(=%MFHyrDWQ0F`Q2pD=kJt7GT)NtVI*Xf3t$8WKv5uBFd6t0v=$*y zEb4;<{#pKNdkEBqGm8H$N9t9qlEJXI{~?agNo2fPn;XpPt5&VcHeh{&@#`Wy zqC^9kV0}+En(l!otP?f$a}Ro6CYXq~Ov^Rw?~h0RvKGD=HmmL?TIVFzi+&TNPfZwv z=g%T>EQde}b?+cO<=maoJ%x=gdNq+S<|Bz0{0g|0!NU z11N%A3qhd~hK7y=@<5dEi2o=ekX-AIs`15{5BGlCzif}Hel6zO5xew;BzlTP+D*Ic zfA~GV)aD6HS|^Ziau*>9r*%uN^g35Uw;)F5rns|&qyJ^8os(tk<&0qc%-VHQ3H8)g z?T@cTv?jTP;o6Yt0*tFBGtdh{Ooe8HWPnj_7J?2)&iAAJDYPnXeb=S_Do?U*d_I^C zlDdQu2hik;2Zq^(D;)GojSOi#@c(d_Inw>9V(X9)wU&s>fw3+qN1!H6pfS@T-CP^S zK~ieocY~6{ls8xbfLrOez3elsU-@t4!<0Rky1C^U&ADn#`*(PMn62jw<2Qc^2b6I| zTED4kYxisnI;^8RHI!!BmCj>Ce|F}X-k3QPH>G!818qfcWa6BM)!Vm3ndcC+rDMYa zCK7(}TQZQ-Ea*TXJMtQ1$BBTG(L;v3G6gekfG@8M-;D`)o*84scN`Pqce+MR``z&7 zyuBY@&9Nz&rJV&*wnNVo$d}Bkq($Zt{TN{;zGrjvkLs+%*?4J0+O9NurzZ3?#%svD zV?Ca~rbWduK zs5tf(JNWdz6D<_nXYH@s49GANUoY63-4O zvE`~8$^YK9vRmATbG}>tF4bOq_YOV66(d8T33LHS$WU5}9&e^b)`miK80K8a6Q8_+OOBZP_!sW7{{ z)(JHVi{a!)5E@!7?;kb>n!Lwj3C1pRX(cPnBw^&-@j zFL$ZpArs8lB___#^6_Bw_aAI~cj&-{pj$?#O5D@TQ75;2oybrQIOB+VGdG*|)b=vh zKVzkul3tA~T!cxrft^)LXX49=DY(^64T=2{Z1h$03jw6ur+V`|Cw=M%DI%~Q0ToLq zBGLjaLgKsz0g7?GS{DE;CbF}0a3>@aJ}^Bw{kE21y6X0T-i9@bsMh((8mL>qFTy-R z7FcR=VtE%B)`@_9n!Y#a{xfWA?I80=D`dKp1OJ@noZi#lNd;PA%iYOlq1Q?e{D%UY ze?A3Hv&ly7BC0>G^r3%(a20#0;G~71FiY~*y;0m5MJT-t@bD*;3D}9$eDYy|B$iUz8*PCfSIFG@04i`#lmK)R z!^7OOm#JHSaCOZr>~lg2u>kp3CJOcODsRLe=V814&^mUSU#&9iN~3gTtm64rvmuZLFtKsV0Sl%E!1Kfd|@%Ai4y6S zxz-Y3J;a@N8y$iXlE(l*MGYbc>44Qkn0rCy5Rlms1h_MiUFd^~y`fFuti4ONN94&( zVcQMmC+w}0m*>*Mc&xaA(~2{>6AAX4A^7V+A|~c^sl4fW4?<@tx?q|0n}ghMj_Q9| z25}dA4;3(z(oo67-ulv?mByyf$`pU-RH~6Y%bO&yGSKFw)9s9|NADShI}@Mfz>YjJ z>WHX{wwEts(~z`C16B6k;+Uxs7v?z%Sg8MK@1O#uQZM@bKiBo}sPUZn2( zk`F;tg&y`r9X<|-rr$jne2Pvku8Rv$M06LJD+jF;I1@VFxE=}R`TizxYF3sl8~kA* ze{Bd9JZ2^k;NoO7I8UZ~pwNTG)XnLvizxaEWL%?f zzk18-&0oEtR@0~hew9GKqq25`XRV2MH$vH77ObuSi(ii@p^R5VBh;j~Y~$s#U8+t4 zx8dvbgASyy6_o8IVG7!eJErMR~s%0;SmWpcK^PWRnsHYAPTIPZ~q3g}d($ra=N>MO&IU zE*5h3CaMhls_CDprK--GsYSS$6p*2SVs-u{2KCw)VvsTUzDiMtS8jGtGpXk*W#1I0 zRU7yTSm~)VvvL;o_v#2K*{ue^9KLm0@C%!xZV26%yf5W|xg{S>2a>Po)R2J&u7j;%b)&ZyaSBK6W-FXQ;uGSfJ7 zA(M>niV`E2pcd*&cbp~QR4tN{7#)UWVM0SvJ71$Q>siu3XUdYX`RDDwm5K$rQxWA1W?yy;4C4St z{+a}+E}ZrqdT4Ry;_4~Vkn{J<0Z$Q5e+xV$_o94E)fO1lU;n)rnu!dePlgZ1+^Bpp zrD=sSl%t=@ua?2a^N71Dv&60Fv!V|XkzErt;6J}tBHr=?FhFhD0td*5!R8>O$sP0R z9JP?lfaU;kEFFRCTJag@-KrW>8hG8pcr2}eXSPgDXjhN(9^YC(z-S=?`wn`=4YFuI z$_QR$YE@u=216!(nv+MV|2;46t*+=XVi3a8-hrf9d&cveN_!mxLz;Ut5ap z&mbo*jlnx4;qwiij`H_^$hvsO@yHpr)qgWygbZ7|F9-=pv7Z5H{!rmzSjIz|(W97{ zd`a>4n$HTrny=(xtJkf<+e*64(f-B>R4rhvQIEu1MV07PF=B#Bn)3PB01DV2h0@mO z^n1(1Lx?uIh7S8)-F4y>ir*$UtEQL3=uIsz6|Sv#wiS34+=b}ov?1i1iLFUkjk_p7 zH^9A4kR%Hq4e4)vXwbi<2cJ0ZW__25C5ibrWfX#9lnvh+rF6dGTr=^ zfH`aJkGQgqC08*>%T(zrJ+&yxpp%!EoHA(}8hlFw;Qxj*TFL5-B zZ7mwm@&uh$Al#y34G|16jz+bDxl(_s_?Mcs|QAb(k<@VN`HCl*vbpJ1;vXkqsZn!9`*hI&>9$3*-l6@l{uy##cZuwoT@7aWWR2?c2NHa_QDhtGd#vnOt( z_L3XSq{05zbk%A24iJHoz3M+tc^ea_bQ<-EZCGz{Q;L4>IiXWbDgOXNO>(c+T}w;t z&ex_{T|ZFxRYwrYb?*X;XdDwEZ8l+U_<4W0C@I7%>_AXmfO-x3Rh^(gutD;-hS1Q( zGE5W}egC1gAgJai1cM?3vBE^%>eX-G>2sR63onLWb9Uqb{{fU)9{ABdM^nG05^}tW zcu^ywfYB(>6G+{%=Mh0auRsL*`tB&A##1i(ZWCx@7G%ZJU=ru1Y;6f6{2v^X)0)0i zJU7uO)@|4{^l;xclbQg5rW@GO{Xyve7!7jL^OE zv!M9~S&{Jl_A$=#j_%`)1F6ULKGKC)4$&;pbS^mw6Y`$421P|MyrNw)LMK&`PLuea^K3+0e}Xb zjh1#9<)>?~((??g~Px_L*Wq7AZrXNhb=-VM2rB zztgnNti}tDIlo}1_^2+EKe)9s&bL;wCF#V{hvMXY6E9z_CC;kw3N60tEk~bq+lY%7 zwnLc{&6zk3d!L}hCZkWmSqVM_UPv6sB0&>rVO_*LL*ifnO}TUM0%;pKsYpRyCgcDN zi7iA34T(GqI}R~$*&yCFSgR{Eyig8HRw2-laNPfGv#|#r!BiPmWVACLeiCTypdBoyNS8%-)DE{vwqZ%q--u4P#~6bJi*xUbtJuuz=w+I5 zZUo1>Svr?7?piPPk?!j|N21vF{;&a^y23ndZ#a;O2E6am;OuWXs?YiOw zT}>L7w+I3ds(g^4$pa%7r&s(>blE{rP|(YE7Z1#LbP-rt1knT`a^A7<6$SE#u!nf- z8TH*q*njBA68uF?R7gpC3a1Rq)|!fk*`|n{WFSHWJE;<82NAg$W*!cx=ZzN92}8L` z(5HEzC>~wVL@I0pu;EWP|CZ!XNA=IndV+3H^CQb;2`_px6D6=f#8Kz2)F*WyDDT3} zLWw~aP?2CZY{8|&Uq?A=(izQLNN3{&focDX)a3emGK%Y;Yj?V8Kw_5CksSkueT3SKOU%HL}OG@0kOoMkauMHH=##{^f-m<&CP_5aObh6I~hS0>kzmF5quc4e~fx;)pL9fVIc+n zt0ZRdC$pY=8UtCJC3sr%3=;g*sBD@%Sg~5K>ztVf)sFE`=5*HLb^&*H?=zzeQUduI zgP0>m*DY)DGceJK_3|Ug)ZJsPSrXl{GtJo0DLA~FFj4ndnChGhw@=CjMW`LlJ7 zRTG*QsfYmX-C9&l^F@6%VxIIoCo%F=j*?ZZ*-L|$I}5i>bU@}VM%@11oOgVc;EUOD z=pnLIWE?m*NSHUmdPSRT;xx~8!d5N~;9*&HI zj&WS0nDS?D-s0|ogJnu;{=?FAtK3WDR7EbQa7Ts7&P?q2A8l~uOydW=OYIz27eI&i zw|xark=G^yBY=EasUXa>w%)s{!vEiT0{lJeF5)5NWO6GSda@kq%{?JKeJS&^w3KT~ z+o<_7%*jq(VK1|DMui!O3)d=v&AH9Dd6o}ReEF=EQZCBT&_nw?E*q!}c2^iczO(XP zJuJiZF7&@M5dtV0tlnt*B)N)4F|bE+y_IcyUJ%Bispp5}wzBse!K@2tC7I~ zhqp1hCoMy)>lJTothgUnDIt!nVjk9btKMKMkJguaB+!eibZG zy5Ub1xD0C;6m>g+AR7(prohxhHNMH|AzcX7=2?IiNy&>$1kSTIid{-ntg1BbQh~Tp z@M)*!T)m_}mq`j%NaBtpe;-T6^J=KFlC*aY9(fPOge^aTjtI4mOj@Vy_5nE3HsUze z|Gu^3+uzMMKCZ36+G~znG=D)5WVn_&r@HntExx1u7^KJSFsK&Lzx$3XKU$Z&iusd?V;y# zKohC}UQu|rh_h&UCkVhOZ%5mEjuX>qE6pLMf_u*Q=eDSoWc|eRwVbj2sE-lscTg6jW@{Nn4O#K9rz|K1BNq1K(o;|J`s-)Smy$K!%e} zrziW5S@Ir4-L9Ncd7-EwKAZp^g{sriHCsJ;U&V9BZ-dg3-#tg@LdKNQxa$s1B>{H? zh*||`DN{X|^-<(Kq6$kq_>kq#`;EWtQQ&u}ky{~}?~FI>hI>k#wA`z+-{XoZ_0H{pp0ASUmM=I`-MPYao^M;t@0TLj{C5xPuL1t40Dl*Zi zv!++td$CfK?~R$LQXm(nVQE=vw7mIN3lU2L)dD5WJ!N&I7`M#j3>Hv6iyMhRwYm@H zzjN7`A%R5jmz=}{fnVV;^{JRG?_j&POs<}bRF+RyL|K^OeZ=Lc9tO4fa0}d4vD4jV zb;GD!sog!st{G*_0MBW(=Ibsc3myJHsO~nj!AABlRkh5Q_Nr}EaC~+=MAC3*-7Bp9a+U=c>BqUr; zsHdys=3ak_v)&v&F;%!g)6xg##~G&mVMFKsgyb9-(;QaR5Q9G49A3^&tQ?UKA_s=2 z67`S%yZdTfFaHHjH!a{kSHEA4qKA=k2NW~DHxu55X~1`D41rrO=5o{+N1oiR$9WP4 zxPkA~0raPOcxYS@=zRY+$}DdwTV@2hC7V!6UOXoI@{s`~L`M$hN~YX<&4UXU(JF|` z4bYth^7kZDURx322Tw353Om=^rjOr5V(-rFtpd1Sc$yzOR;M$WW=!MQ!4H~$WOXd< z{%b@edd2_JAztEE5up?(S0`-I|9GFs8j(BFq+HjA*~jb5u>~u-L}J~(b2WZ@b1)h% z$ypyp^6CH9QERj#ON4R(&PzJLKJ|9DZ6Gk4 zi?1ExA4;UZ3^ar#?HDkwd)2#~pA}K0*{aHFF?Ic%wNbmfT{bFpf0?WlqWuaRAp8Cy zPWmSuwJI2kqBo2*MWYe!&movzGBZY)kj|q~mECu4^mHa^Z0fE3#STQvb}dfWfd6)% z^Djd9tvSc0!63ev`qef3T$gV{Ow*1SzX+<@)h*!^Cq7|a4HhT4X;CbcCb2^LCp8z37^qZ&( zGj?Mf#f|7#+cQ)wx&_4{jhT1lxZJ7srZ`pVTgZz|hC)(+`NsXZ%)H`E+U+^1;Toz& z4);A(!Dse|rvpe|6_0Eu|`}Mn$cc11uFI&-&2v-LQKsn}=%n+d`W#5lu<*D*zbBj12NKr43 z)a-qdc3ZFCcmykV2m6<%PS*egy|NQc+#XK@)Xo&n1ESa@vUKsroCSW2$7&y22jw4& zkl%UB<`Qw1X+2#F821>K{V_0^_`%fsg^fVk*tja~6bX<0B^o#Z)aKvk81Q1hG^3*# zWmtFh6k(Zi^hUZnzp);#mHZB&iJtCQphI9_C{fkjEqVpuFE^7hU>NS?CBmmu;8=ff z>FrTDh(qEA^MY`grF$Si_&H!g*MFvW_NqG|{Sku3$%)g0V4zn+m`$2>7EYWOxUKJX z^*pXdNanij#jHD~vh^oaH@46cL@ACjCe~K~dk!2quV#*~zHevE?i;*Ih;T zx3%+WbsaGgZEM(tBp^sN28Kdev%|@~E~2cj-rcyTuE?EoNOkjM6CcZLXKhoWD}Le` zC1zlrOSeTVqf3LDOR$*vT5evu--zDU>nEeS{xb%rssiLaJ|FR*kUnR8! z_0NWFy@$7bI!uxTFp#w$1i2{M3cJF>LLr|2J#ftyb&ppdSC{%Xbj_@&21LuCGQm5l zDolcj8LL+v#=^v3Q+qLt)p3lz&9k-A6+u*qwB%;XFB@z+t?@h~OpnHOmOGRqsxbTSOYz6B!nZRfzck?>< z^AqVnG~@tkH^oW(t7*SeiM9HBK$o>89LZe-5SyG-RX9R5);r^8d5|MIgpqmVrDLL0UBU1r8O- zHpSvZ2@agGp0Sm~y3uCZl!-u;J@5V~wSToR%M+W@fruvc-W}zXrB6%|bPsH{)1d=e z84w|J`}NcrM}H|DZT&^&Zu4qKct5esnPPjqVo_^Rgu`vL2z##wN2?t)Z~xP=x(0R~ zMTq=90*9}jwyBV<6CKo5pNLQ}+eAoPcjZ0sVLg>Ds-)h3 zXFUmQ+HM>y=eOLS#VE_O8h0RDiqcoLGtno-_c~F0T&Ls){lGrI6iN86v`h7?!{`}dp z#?2)zUoHXKRZSG@cZl+{3vX9)-_nj3da>A3p%ZA#V(h+?X;G1SKF{<>OjDUvD-wTH z*9|%rxfXVRkz6L}%hW`K*Y$tf&W8%4G)BWQ{3mZ!{^d{CKlob zUo@I|(+@(RIchd0aOf`s?t1NLc>RmH&g@$h+YPb@8W$QkRCAm{@W0-8uPOq`IzBcS z)g<)OA9uj9WrzqJCA)Ri;(9(sQDMH#_y_#+$9l+*nh(O&CkZ2PwA8qA&$?BRgb`ik z%-%oCu6VeDv*`rOt$m7bgg!R^M0Xp69y{pM9z*uOX5|<7a3+WC?90|zB!APgVp)<~ z#s;!zWN}n+bF!Q~F4q8J3*{ysMhi13*Yq{RZpC|%FvbKcQA0_TAV0w)NDQ#M?m+77 z51&4%Tp!%eWB*G|!8g7Ih6fs4h;g{T~g=x${QXvm_^Ng$I)^erg)J3G-7gm+a z@^*XiR8_j&)q6L{&)?-nxr&T^Q%itR7%UPV5iCx>T50^;aV@}yLGHONt&(+NlP>>9 z0E=o0K>Ojx&3`ur}h|FAisa)+~qRv zzn?-Cx)<$!mlbK!oBmIJ_(VzM&0_emY#@j`VAjR5Pi}Aeg#1JF#6P$$lp?O-kH%L~mbV2k{$K1dH_1OMN9%$8otEO-1&aatEV=$ z^i?i-QX==9WaljiMIhfHzqe6~O;d)3@Zi-il_G`8~3ZcAkM!^ARAl!`id?0@l> z2dS{&sH0#>L?ky7vs@SU?Y}=gX&CI}YK+5EGUL(1!=O{$O7g*~{XH%pTsW7{Y3#+T zn#8h0BV!)K&68V7QV zl2Cjx=-JA#HEEzL`cYO_p?Gn0MHmsnRO0-G{iR6z+}@ZP&d2wWB+t0xrFWX)f5o5l zFW=U0|3^igZ7?;xB_RbG1(2OpsIw$$`U8JvwoBsF%4N6n^nl3aoxP@sL|*xC$X9G% zmaJI#n^;E*w8$IV9lhUH^7*sFo%jpWhWWGhHnTf?ViF4peSUe7bnEzhY&p{j_78&@Z-{M&j@|OZk`66j@A*l zRldNQAq~nUO(N2jA}`Ev1`psx%{@Xb$Pd1aVzfH^>&^nAO+Al_9XUPC5HZ7^#Ko62DQY);UsESyM^=a?Z%Ga^B=PY9lh8Yk4U zJ%e-`$s0Lb$pXLdbG-L3N+@P-p}oOL&5PeDf8g4eOS2z3%xTg$Q|Mp;F)*lFjIRt4 zcj4s9WWJkWD66Njx=P0s$tB9E&L+O~vSaGr8L@tc5O*-9PZ9BeqGEo7F0sqjZ*m`Z z2)2fbQnA*&W7oY#wW2UXAU6ItDZ;ld__X~0MeynG)yF)lao5|mhsVYOp`O`yCTAUq zqSF|OU)bvmV-?i2w}0t2Ohi$t*hDv2%)NkJ75+&c0$g@RKP57HqMb!ba$%t*=-|XN zq@Gdez3=k^fu0b|gni6u;wwUDf3_ovq0L;a8I2pD;{*nhH)9X9ipUjMezpkdH`_SP z*hQV`=3)^xBQ?WyHs;u8_*$;ujO5&E89a8Z;3d(O9`sSTVIT+240M zg^Neb%q6B$Ndc^4vJiC71dOn`V|~*fhi`Ni4Iem-c;&mMA4k0`IP3SNa>$tGtptf7 z;Yx1r-&_ng+XFkZKR-VY){+39aU_wrSML`?mxHLpOtWVxijXD7*$`|w|eUw#@?^Tujt~KrV`|Bjq zvg6n2Jjh_Q;(;U{6i#Lc!YUe z?u%=n4S)|B(ozhR~sCj#_tTqCEI-{5fp_mBpvq{Gi zlZ%%m}o(VCf!jg zfo`y^xr#_rVZ|!kD>@9~=_bJj^H}T-afH&w#Zz9nY|y`&TCLnpzbmd5%+pBCHy9&M zkfDtgr74qQij{D@mUgI?kYnRS_4&O2%GF%|fTX9>Nk6Gue+vYs8_Qblf0tNX0vvDt z*uT{&Y?OwqJ3r=(%ncjd*`6R`ctTl)wDu|@>?xnG?acx03)^hERQ zv06|R+YQhVqk@SFIDP#fE?}yC+#C0?hc?#zsy|^SxLhguGIB=sWmpZY98I6Z8l&q zgsOG$q2mPd$V<+cFIt{g*bzA08qS8*ng7xz*L(jYdwA)v#;J-(4xh~1z}1e()15FH zH;iWciJ3vGm`9BAbgd!iGb`&{jM>9ZPy0tY_m&W`uZ9Fs$?$0SDANRf*LReqq01{* zBJJKzWqzxWqJIg6H|gx^_D@!*#{BvwVO)P0F?rrYm`TvKmyo9`{O_PdL?hVC6bx~T z85%TkDY2Dc;NcHGOL4)^g^3qC@caS2O9c7({?aL{xCD^z7D0i?WfB{aP+?G=3<44j zqm54txrJdJVM|!ynK2b{oSZ% zd->BXWH(MDP?7GOs3H%SVnl#^4lOh`;^p34^@y0M)km!`2PG|FW(bQ_=tZl&U{LV? z4_V>+JE%!$OW5bQzFrY8gbX?!K*KSK15|k0Re-~)fc(Y&+R*BZ5e_`i8$M=xlUMS~ zI(@MC`XI3KU~79ycsRP6H$JUn5s~NA%F_$>`g0)gh{1w6Ob(<6X+jpcA=pC_8p6EN zQ8zhWw~dPS2!jq?zN5UPr$CIg^xYT&Nw^M9q|=BRH7xnxQkDU3ZcVFgxW`JUsB+!CsVgl(D)g|Fo4m*BFt7Q{BKX}xoPMN8*XoiI&|9`_@wh$ z!ris?RabPSqmPVk!_rm>?zx+w#PpVzVv z@pd073o-l$0k0&4=h;FV9GQ1LlBT!vQ~8lGX&AYA?Cyg~(^2x5vi}!!RWwaE&edgT zes7@#5g8W$gL1Go5GXDofqZx z7v3)}UU52%L9IVoM0NVTLOIPF)*zP67=11=_kJW+e7g)bL9_1HXb9F#bI)+s$Tye9 z#Y}<=g>cub)Llq7aYQ6`xRDODa^2`+jMulm^J9r1x^9>KYqYZnM`=JCC+m1JW-U78yU*y7FL z2T6^r)c43XhsKsW`XgEGnx@<0@y{8;AZGO`j}Zl`pWVn-Z>eWQb^Wg2m-pmiu~rN` z6#qU~!RJrg_Cugq{TwrPpZtclv%*`Jj*6pO8HXNC3>~TTA}e=tz0l(_@Mj_P)3Vjx zMdshXrpk%W%PH%}3nglg^TShp;-#^YJntXfkl^8kua2b{?Ut;_uT4dy+hB!=7tUE{ zWI`knp{kfUplxT}rk<-=O=4!9BdbFno$LU|O@)SpjugGkSq4r~wB;N{`0xO%D@fMr z8+IZ9_R%0%t?hjvDrzR=yKUpu!hqn1nVF*lFA{Aak;CVdgW>G~1mF?A1SN zZR09Pt;@qyqKrmVb37q9_Z`sW->eXBEPwp#(9ZB*VRo%Yf^!;2FqlR~dELJS(_ z`&Ost0#DAI?uIZ#gAwU<@hnoiAHSJ6A3znc(j_dXzity^~c*(wyseL$Vu6$#`+p6TU{t~o+B8-b`XsLk_ zIP5}WiT}rBTx*#6j5iTd$+-%nQ{s<=42;|@T$|XAoaw%D6d_dB5J49izMG_OyqZNO zpX?d+R6^2d3Ym3@bE>&=QbGSM#I2yl+fk%707?*!`gh}Ewx_COfung9Rkyo{+Dv%| zsf^bRXQhb5z4kchM{JV~Pc}G!04>Qyv`6 z;KhU%(bnzG)!XpnNBuvo+rxjq0-%tw{Mg60pB|4v&=?djmJ4}l5ZYI68iY?Yo2De=jyec+2o*z;_*Q_|oKo$2tXRx*K6=eF(0G~y+2u-hi*}O;eW7-Jb_%a z&;M8K!xBGV{6QzHg?*3nl{0%w;b&5CUZ!Vh>7<^`bu?njzqY5J9g9sxQN*U-AK1)- zpMEtIu$>`Ak1DR7(G9ThEQ{Lc@Z?SqdY**@d>pSy!_$XRNJr%D>=3uV-FT zg0@(tuBR7s(v*tFZn_=&x*Dsew2Bn#7avW*iqAfdT2;2(PDh6`=r;|k<}D`<*{GLP zJ#j@=N5k9DH72yagw{U@Jr@Dy?rG$EbL%DP3D)JtEGdDcyGLIooNWNNIup+Je$={o zaJ*Mf+xPsBhTd&&25owtG+nUv>~C<) zc4^3LLgpq8_cqo=%oywCW=^TWVExNDcO++tS)Cjy=e2Mavx>N;c~uQEa@_yDYYvA1 z8X`U#e4N~{0n5KCrSI0D=%>yEXB$TX2RzBdI|{2b$=eGg6;*#nZ5Z} zbV&T7VkX?~xe4)kVhU?t$j{9w4(uB}gBBc%C<9(e7NvZbliBouhCvrF_Z$a~8OX-b zif&u@3W$qhA_X#}a50SXdNwRl#mCg#Zn2`uJre{gaJ5EA1|xD7+G}ZO(S_f;teQ$! z#rRv*DQ9R?Y4TW8Q!)KCQHPzr3P2&ErFrqn%ov-s+|5QI@XcM`fTYoe$zcioJA_|=(Lp9Xdlv3a_ z5;)`&$1$*5iLO_XyrpT+Kxg_gPa2Yvzaq&Yec31iVk_yZ8#GgV1u}eYQu`|NvZLpA zo^RvS(00z`A!BFIBy{A^N^|>|sgHFnS!8j(?1LYJ_JD{mG-dE1F}nTXBU1VMxeOul zPCibYNXs`FIWr_q?qpV@tZEW)dfaGH4r-Q6&uU-6z8eN^Xow|68B5j#QVEPjdGJ|* z%{c68U@MHbhp~je3)5jAS>#g?d3>)*a^uhU3UZXif9!%+dgokHM*iY+lhN9)NT_;+ z{Y6|_FQKD=gNVv$REv>du_zUIl#wp!_U=Q)SQsQ5{v(TSKGRB&l3V~6Zt+F+~{(IlDWjBrfW6u#(ZTr!Bu=d0z zPAmbtG3e3w%s@nH_{_>%d-uQCRP2)me*V*Odgze8_y4sdmC8nvBNsD=otG#A4s85k zlfVBwMu5`xng0uj8T+vga>rz5N+3j&(c4|Y)MSN#W$Aiue-DUQueFQu%7!s`CI9|} z-TTu7U-bsteA37ckM?~z@hAnU23Ig%;I^v!(eE@FORP^_4OMdpmIlt+$gzRUBbL z#>hH`+LvmWj7f6Pkz?St(SOJTbWM2mew?f2_uq6CD=mWS=~iLT-x~`#c58k@bTk3g zKV;34aQ3jJ{18+;kA&+`i7^n1FV>o3T|P7ykPHSY>PEVQYjMMdV^aOfUv`RuTh^9* z+YmSZ#!?;%38NkN7tO=W0U?s9f%cW}4i`7f{D(qoN~O6)SC>BB>t&&L#VMGhf+q11i5u0t&* zzoXp6t@HZ=MX^(g(|+dclzLwHk2oc%ja2upF+c|gikOMVB?bf~tlLGJ!IT}=R1S7h zSQ*W8L=2C)crjB{b+DY_O=62ml^aBo!gHazh%Jlg+7)K-MWxW_B9?iDE8X(vzGoVu z+C&Vu;9SzyZBXXg$bN<3TAj^#(|Z#C6BA&>s-U4NV?4Q7RJAJ_1~0qWehr6$dih=m zx*z+TZ_+FNAJ5J~GP`Zueang3^X!UaZcV3gSwY3w2jHLrgs-c7-^~q+S*40}yGLgw zFl!zG=Q_I5>zh?0CQ!ns@K70cB5N|cb*z<<0nRrTQk<36-B*X6m8?|=YB-B;y(x0WOl*ozh zj!5l+Yd|^x<<7g3kSR0lT&InJ1so14(f}Q_|#kV zBnK&Lf?>*P%cZ_yl}d!C1~sI9gYY-wGoi0njLvrAUp9eicKat(LtY+NS0L@wp4Y((kji|`47eFbiQ5!f)UDH%; z=<=pm2qmq_sD<@&rLD4Hbe8K%X-M~|baIHJ&z&bezgysLo<_gqOk0t@Ql?XZZXmUN zJ;vIIGOf6!$*}c71KtOl;aW(J{b(F-0~Te>U+dx!)qkQy3;+b)>uf~?sS+K_X| zimQ_Mr1vExvD`HX$M`oiyG)c0-W~UpkV(K@jM1%c(p9anHnOwjg;1Uz(S}*RE*(f^ zzWP@kHcOK17<3&KgCy{c9|Ee|63GU=@M#ZH9)VL8B z`XB{ZW>o)PEjzMwmYxkro#%4-Jx44wIBLcs=bM%Y(V|%k>3HYSdARssw&F0lFjUY7 zaEx{_54A~&-`n1^XOMPrKyPlcHup8rMubr=N>8}Z|G*<@I@*UT0ikx5afUDE1ba+6 z9<97X#ws3CTHCT`gb@78f8l2b(^i+1nqn-ZwkRTfc#qucJU$VaT^ymGv(cB)c&qPi zF;~m?zgjC=zCZT4(f9ll5%=n|Jo5(&IazUOS?Fr_vm#s#5*x0de)uUfy^;(ecP!}z zPJYvA>uUIWRI5|{&&M-M2KYpN4f=})AqL|a$(^0qAY0S1_^BTCj?f-M25(HS zeiAyDvgC57V-47{#8Hm_vVL2S;41|h6{UbAOIf;~kfqxCwzJPvzw|ISG6S;2C_@Lb zRR7W39A_kJmxI zX^}>GHHkj!Zm08u7^j(MSFv^$X6Di&HE5g!5O3*!tDAzD(b_RW1O)$|79g$dqT-4P z6CNEsL~xNf;G>yW^l|&6zweXt|DET^{>E0|=QZME0QL*qote6hMJjZLY=+(Pw8J-l zz*Lp!Al+f+28%XsSK2}pa$m25$!Vw2yju69NpwdKjp?zF#2O=e!zwnx{&BNPGeKoh z`$+@=*kS}?&NE5LAqKk@K!Wiy0=6+Bx&DI->qt&FwLN>6|4}Fd4=%-$BsG+3Sahky z)+@boDXbJg(#C>BUYMi#y*%Apf;o_NYh|p=Ej9ZgBOO4KCX1qhpv#2Ex@8DXtgb^H3E?aLq2eBX`{&4MK5wWB4wUB+GT%@JtiUXm4 zsZ0gZrEXiF50evq@)D;QlyzIr3(Kir8e?ZP$VWg>sflX4w6uT)3LlT2-)M|+dNQbV z@;|EPt#MHUapkbwNi4n|VK%@arn)nv=^=}k(HDUDgQL@#8^8AvsQs!QGTA|zpj6K` z$z3S!zpt7In3sqNKw{H^+j2>=inyZAF9$I6^4^~xP&lM(?0f;!9o*`-oh00&9Fj;K z-{6HeV*`n){{VdcZV&|!1dI4H!;L6CP~9FLn;T|Q{aVFX<*O?p2#%Z%4i2VT(#PZ_ zbYRGaa(ZWU7?X8(4%VN@46_fTI`XAoFicd_XLQ1m*bC@mSD-7t{B^XU$GabpSYuoo zcHbuLp7BnPt7-KEdc*>Tn)}||4h>+wAPbwU%L7vD9U%+R`w>4Y^1-vYwfz~HyX^B{ zhJ*0w`VV1)USf56DLhJ+=E5X^;qn9?-&}jSC1S;M-Z#hVGHw1Fe9%q9{gCVTNHMb#sv)w7rFnyghgbl0Xv#4k9{Wg@Wy|?=$wS=>sZ-(&HL5eJMVvH zpy(bdhy=q6jlbrZ;lxB}fy;C0v`0W*ovaq7z+ME&P6Hk821zcT+>ckxIg}oP*G1PU zwh4xqXtC0ZXV!c7w=XC#_P7$ZY2>zf&#L`>y!k4XO1AEA=lI)uw&#)S^-t?j-uBzk zV>)&Kb+#(oeJPf!VavwV9^L6A=(br4N^R$H|X z8janp1w60mIA*_C9)m+b*n1HGoy&|KOS<^sC-M)oHo*^YDRw3Z5jc#UV=@jM1W(&krN9Au-qKm1(Ktd=>qz?#c zF}+>F5GOjVl~MKL#-vgVZ03-Wevu_hIs=%{57FWz!x_$-jz>~27*%*!JxM)WvXe<# zd<($irr=ogB973i110?@_9BBo0s<4ZD_qazT1&K0q7_wl{)VQNdo!jUD+R~UL?~Zt zA!gk5+Wd@f5oPkIEdL~(MtTxWuku?!GnOG_YU)`PVLykQU&oVUB_=+N6#X~oxWs5N zGE~L&SKgEOU|t-U{tTnBi`8xb>bG-JBJW*x2)xzpU4h=uH_|@uN9dev*#MrkgJe5X zIubW7xKqj55t-n@n@lhQ#GG*MnOaGmr}{LSO`;oESYl8dane_@w$SgZt5{MB1P0l1 zv#K33&mXJwwLx?P!j_(XrDtJI7ex*t?Q}J`jz?q?fr&NO5SWcY)6hAQ@lI$>%}^R! z0x5`ss*fLRv?f7`wAww+W4TqgQ{M<%?1MIGYWndg!mYZaTc8qXYwoqrG8TB-QTnj&|9#bN2btX#99N8!vdB z1&BMpa{Ya??jLmj9kIaIeo>kHpr6L)AO}87Uw95Y2Oh4H@qt(#(r|@bB>CsXCwMd+ zrumXu+SfUO2@J=NEs2robFUkuo{pvEH_ccgk%OdF;-=_Nj%K)okA;$c4J<`i^M1b9o2B5l~3ThJLo z`c*SQ4}1u0eG^!!$<6*_nLIl8B5d7d@xxw zaFh0ZV#*Y_gy48^9iDh~3Lby!X8R0<)}8i~Oy=!)x!KYmibr)^3^ zh^aG8`|Tv|p3jeC*wNqKN`TRO?{1N|p-;!4fUDrbZkttKwv!NXRoIpdgrp+vLEC=I z^a`1_qL)a`<;*{3@>;@dNyyUT9IUk$O~qMwC$V2z?Im$9AU9~T)XQ~s@BYTd*a~Lc zH(@bqE%-$G{s|C7P6!~i&OPoj>XLL(Whc9;Xx}fW|1&Nd{)6CSgW%^=DL4r!r9^V9X~+;W2d?OHt)FUerb6Za|FKlxZF)UiYS1R8AR~ zx1`+{Mn_qd6pj9~W}~G!h#n{C5i*Aycz#wpd3Tr!zPXb1y{;mnZhn~!B(s5|ASTHt z84SfWey%PIoX&M2^4|V0ol{MPzX#nN_xT*)CpvR=PW=$a1v^4n2u3-XRUtYD^DqqI zK#JwP1nUqwnr2RdOqYbgeFfTcAj*sEX z=MDib6_|0Pk4)7OsM!`Fp&=jHLP<_8Q04nwX zFs08fO(=^g_TI(1 zqlf_kB?_R7trX$TR`n^uA}ly|P~Pz)1jI2$Hn)Ok0rS z>@YBrawfvLoOs^hgdK5p--qOb&CN~KmRVigJsbeHR94m`iLt{1Ux4kJt z`_(bvGRXjLp=EgZKlJ|IKLPGNQiM?+`@Uc_?Z1crmBARu=FIik8SsUB!HRPI1_MZ+ zKwd_Z(S#@Jd|0Pg)5*DQR!Fq$f%~kKhv*?0b{vXPiGs981!Eo9iQ)ZRM11~k6(Ja2 zV*2zd%L|Vxx>CArzZ3XSr@Nxds)lAgvx)=LbA9HA;d8~v8Cl#g{B=(iF_AU>r$oFA zb`U<)>8FPY<2XZP*xqy6)~Y$exQNc*mvsiIzILj`l9RuR3PAOgf}=OdYuSNvaBwoV zPuzknL68Qp?}t&J`kL5%g?KD_d{A8x3ZDyZCKh9+ih~aEBoGVi z*$?O<84PDjs$yo8C{!)GWaL1gaaSux&A*XLgR>njLr`>(F#%o((dZV#O(A(FaU%#> zrIJXdVbAK);wtfB;3w-AUlk1)Bm6u$(&PBp*P91%b^+t$l7UnZlnepChK}rZBpJg} zd=Y$OVM!rK9s!sGIVVqJdaEMre@bmbHABQ`YEUDB0s?yB4dGwk=J4o51+jT(_5gjH zIdj{I1Xl$VBxH8}*TF0pzaX0n^XomU2_%(}KG#~vf_aKcTqIAKs))cHfH4*PpU1}c zX9L#nnW zA2PX^0V4%#CtGANNia+}j&yA(gnYktVs*L!V=IsErEWin|Dht`iIv&69-X{yo5y6* zmzx5`-9ebzyn+*~HOOF0v86B)bEjp463FH=tAr+y-urZv0=r(zDy4$i_KE%->m^j2o*lcH2m{IReA3XFF(}M%E6vS ztUgamNKA)OrtH5GDduwZZDqd)S7^BSWh;;|DOO_)s zwL#XHL0Za6QtS+$GV@ig%K#(X4eaJe*Qi=c2H6wO(7UYQQstQ6G<%P&^>S%NM9$pQ zYAVc@U~;o@qa&;Yi=OOZ773}%+@~h*D~Ukp2W_I|Km+kGT_cts%(EfZB3m z3t;Acs&>#j+hxze(XA40WLzTH&K0su@S|+9B$)V*Gttgi!$s*H;zIno~G^?b|{lg1I+-J zj^^YW)|zj(Y{86~K+$fGIIslURO;!-kE3-1n-Up}b^Bh$sCiU1Q1FaJ5Cum&16QIU zv2s4U>`woL8CtR)@uu^`48a7@YU>rCEGIaL3TriZ00DNIap9O3w>L?Hm;T*3KG%&r zD3&}VgZ)*)=TBYa6=8q4!au@DaSAi8M4fblm(^gX46N{K&h%ZPeJ>NM6H@4|XFNpe zln6q+nN1LFq*I!EIU6Cn5rb(`FeU$O#xs~aCY5&+Lo1bcbp9O}j!YuFd`#klF&Q1>%bsP;USMYWyE+C$ zk^a$fw0X||vMGVr%ge#XOO4S?jGz|7s+9^oZbB+}vGX#RC!=uHLrw4knN^2ZSLeUp zyGM!u)M~6v>L4)&O<|yhSw@3ZpAi`r=v3nuQSMpJ@KYf;f`ehqt7G_;KBNxY*JZ0j zMP=+guwIDO&P8dVlkYMcq;&22VO(L_9X@^AZ$lVG9zeYhM*Ewe{{h5_?vH2h-qXxp z*Ml4b((FH4PuX(v;8ChEG4_8;-+JZXM#sQc-0i+IsgQeZFzu5^5tz%o(v<8qzv%kL*oZAbw-)Jb@2Y#@_Y9N-!!A|`8pC%)BqFFYCo zSXQsl983VjemMvfTc&~aauQ8wsoc*&UQXn4bE}%WlLWw#7mFbsCQJ3jM5F|3DkDmH278c&7X|Ok zx5E5^`1{h349CPu6Cv+X4EMH&uMMYd8=Q!tb*I}-;0XcnfjJGWfuwSi>4>3f)vVMk z2>-GfECBJ-7?b1-DI2pgfO`yG5$%*pIcJT|5}=xeCvV2e3<(TE_Fc%D1>&GuSBh^b zD#HoUt`%zJvT&)&^^j4j=?<1fHx1~uCI}WhPzZJRKF04~3jFuRAk@KnUj!{4Cj=l{ zXY9lW(}u7M;8Y<5*JD7^he2`_i`vFyAL)|I*+WZ>r^XiA^j!~ViV-2#)gT?*-*HBUix@lFjYKAG+ylprsf3FAp*vE7-jcNH zQ>CVqybzRpnoqM;L%(vdKsEx-K3n3<>XIYp86eBQjaL!>9XIQ%>DVloQ%Ft zZS?zPvgvmHW+L3{E~PgfP)ydJRRCPY)geA%>!Cj#4>jN!>I(x zK`ZtZOGG}n7S7rYs%#LhLIDB6EmL=(ma%9eR7o)EBdy6^`i6nmKDuS1yJ?=)!HY=* zr95WYBUGc(ItB-v0sFo-r4vBTc8HsPfs+yeBvkyqgPi`&7xI#C87Y)0;X?Xwgd<9a z?IGzT@?~^Gg$(#9aZV=FSwH6ARso;$%>R=4bp@}RRFbaH3hk*xko=|$EQUZFviHvr z)`Zo^X&Y_zT4lP#O$wRGivQ5+VFYnu>F*LWa8N3X+RXz zg3l{rQZ(qRFf{bc#-2`*W!jEa6inFS1@MRQ{U9vq=-KO-k=K9S1eSi{h2YKBtnuAu zD&bdzJs36|tT%`>)HyI+91KMQK<$FqxH*bH5v5sE)os&MQ5^#kQVe?t4^h?QUKrKu zXSq6x(tFU%#yR$B?Hv!ACPIi{^FZw|B|;5S$@+{qNw|)G`G>|PGDOADXhf*=cZwO} z{f#hM2{Hlcrk@=yNn+UPN82*fefc$JhkWg!D?v*rs;m$a$_H`khZPe5m`Lg})x&5kNTJ*zX z`~E0$l=%Oi4C&JfZ$bBK|A^@Gp>SsLk764;LRSlL1w=MV+&|zUR%$6u{#z`7gfQlI zv6=%RglEs|fW9ViAl3c{tV}bmj@*m&VRJjX^!I>u2{EmC{bip=@ny$3k5zp8i%(2F zA2`FJUvBMX)V7P~SYmZx1URo;OW>3~3PUumbv>tSe-u0{!WS?3H&_aJ)mpe<>k^Mo zZK$BUQx$OwT^U5vg)z=08yX7YG|#80`JX2`{h(>Ei95_vBj5}TH@;9ToK$SMBv$R) zlQZ-J9rn#MFa(`=6B9Dvt_^koEwo!=!`$=x?|$2Fu~A}JR9$7H&3L-;NTZOk#4{DI z`#UtdyNLfrv9VjUhy9{oYgk9Z4J*zRfCte-#{jGbe5Y?Cruk!Z%Zn6W)WsTcqp5P; zA)&uzCrNx}CsHOrG#0`?m^rS#+U}#tft#hRTYhr1;h|ZO$vgvyI>BSwsQV97h5q}A zeMj}8qL&r_fso3b7n{bQU#~8`CweA+b-xf@@Oq$`zHouL>T94kU?Mh_J~8R*0{Ls9 zVj3A=$xHcRdpD+8b+pw2(ZaX8FyQz*kx=~ZfsO{#)}9i_x0HV9zvpY{!2>ciY;MS> zh+i9SaF;eEnluJ2iysTZ^bv;3G==|A(|=&Y0KD}2>K2&S@5<{8o;{mN$$w+&AG}Co9QhV z5{klLMxBaDt)0-cAKJ0rJvLsw_qyT!55tD9hWgLG!WIg?c>c75j&D+iO=wqLPXJEfs3={Fs`M+a1R>b)X;CR`8@iXjEmd2*+y2 zvi=r<0cHFhzR2pkxb%o#;t6&$mEY1Qa`9*1ivJAvS{C<`LzqmIA+c0P(+xWaH z`d;%R-U9T$%X8!R>E-frQV-ks(s!jN3a|mJCZzzJDk;P(g4vm)978%FCaJ_G*g%%| znae>qQsOo4Q~U>p;*m`Rrsq;@O1a)EoF)~_O>8mY#gt??Z`0EDR7Etd6E_Gg0l%qR z&^ahHW{xa6Dgy5H`MQ3}e>Izg7M+kF8yDx2+(LjDziCnc38sUL?pZS)Vx7UB%I!3_ z(5}jsX1KGZ}T2V3O3~~-bDhI(c zfuaJyI2;V_?K@EtCwkblWcsK0)d)Gu~Z0ZU;NE6nf6Cu=Ioh>V^FGeCJ;3O=FnW`-) z1t_VDLxU2kFU0IY@ERz7Iz&pzRH>@*!Kx9BhztfYMj^&-X)Rx@6%58VpsCYWRKpv|AH?l26dG{%MMdI@Ul6(GX~~qKxx|yh82smj z2=JJ~0=0)@|2WVSK}|)6kPj7_7iMPKK@}~~X11J(!bE5FLSz&y6+H4FJMgqa%l!(z43Hj&t;}le>Oh!eB)SwhY?vK;^hMzy%_73s zFl`;_NqZ2%&#B5t$8><4{+Zth(0dU!4Z+b|_!uF9GF-Tp9ZINk-j_@Nko7QmUOtvf z2uIX}p@$>xiC_fK568lQOp@%NaLLx4X|LkQ_eH6oEc-3V;s*l#SqCmM123+6KGR*E zSN9wE{~^y81bxwmGv4>XFUO+qi3yDt^Ji&rOI$@2p=&5hN@CwNlF7K{ikV8WW!Yy* zkwH5a;T5WsR+K$ReICp}%^4S+7%#)x`a?BQg_k2OMN|2vEjLbC;eF$oZkt9QFNL%s zZ$R%XV9o3QKwZ;y#F1Jf+6Y!|6M{Z>x)31Gwnd|C^$ac zjuw2u1yKYOL0~CBMBQRo7qfVTXEYih9u?~pF1Hr*2EOCv1_9JvwzQTF$siTm-XNLvr^mLwsk zYDQ^|^Ib4~V7$|jD5gNH{2v12p~Xy|txXWoDeSb2$OI0z7FZaw)Wt38kwii(*FAcd zEFA$(yjo369cB3#y?1xi9hlC?;!X7pz~i7kps!{4D<@>qsF!fetUgWY5igUWTk>_T zQR&Y3-Yu>$tci%vgy_f4y^F8qCjEan+$8wi#`y23V4u%*NMXCjcDk!=n~FpI*%U9c zsbEyLSQTPJFggvA6UZbB7~VMScBf(hmY);x zlu!n#Rf0od!1N5q(5dNF7ohd)N7T{+c_PFSAs0HP#cIn%hhcZZUl+Sv-7dxX*p6HccDR=i*j}F2~;6#AC9t}fgjqbZYZ}zwEA54h7CmLtCQviJmE5|M$3yBS)7yR2T zpMRop4FitwkkHq-V&FK2+K7cX!*at88H-~V`Lq}&Lkk2;5OXFDiJF~jQr7&$qsA=L z+s21V*&1Zg`cLFYVhYs|NYZM2IYtcc0mcn(yHOjk8~6_R1U-kX`L&wr_1VEDlCAI( zEK#0+am`=EcG>0Oe%f0Ptqk(OIGhtlX=e8_l}DC($`ip=rGWWVoN+!lRL@d^J|47O z-UXUH&MAUsL;8~I#USo=8o(p7$nYo^cJunU0ESczB62)*HY<7)EQFxsHycxln`qi4 z8a=TP1R#URlzk4k$#g3BPq5XihZIa`Y>Us^lOF?BHTXdo8q!o5I4n5C;~ie`hYEi4?}I#RA~x|ycSJ=Th*Lel}C>G4u6R8yx;NiM(* zl4ei|8Agl>rqrx3RiKREs;XIV^hMap<|avpXssOR7v@gG9>^;tE{3KxVy{}IH~?hUj#3dnpKYpHCdcn`qP2TT0F$JeDU5a^*F?J zZ9Sxp0xf{JB)05!`6-&EwFOv|j%v|t3U~f6&wIky4FRwULM1`<&+ln1kf;xX@OHaC z%;6$_2M|besa70|UbQj{YsVcJDRNa>YJIAQk4SEicaW#}CzKRu^IXzBOXyh=Uu*zX z+mTX?*QSUw@!~GDPk*dfM}NQ0f*x4|Wn8$iOPX-?Y9w@Ovx3Zfxrol7L;a%OE3)i3Yg*KEaa&K(G`8 zBR;4!e>ZOas>N%J*UeI1aU1x$t=V*E^vlqSn|IznYz!IVm`J6pTv@fB{uXIw3bf5$YM zuT+$nl{0GRFFz~${wsRl^kFYlj!bOxGn};ZS`J{2#+x2annPrZeoLpG=7p_=iZm)N zlF#EKrAq-Ftx&Q_+rKl3dfnS@Bq1~XDKowLk+Dnl>)px4xIa4J-8Mu0OnA54nCktfUl6ZVC%*G zR!PxsYV?fhx#I5eK)dZIRK*Q{$6^$BEc{eNR`s+rL7sc`uBaAMjXD-Nox=uEUmW2} zTC76>f$bT^?IIXeqW)Ef73_@AR>&>wZaB97;|iC!yD>54I!4nGC+mlgvF`aW>|MYk zPWQ(z`d(=Xe~x2AeWZAX;xRmhxk})%j!p>ikvzkvFzDNYkDI{(LXgUOxh>$V!M1A9YPf-jgPThd(h^(1Pdn zdlHeJ?(Xgq0&Wt0eUONdtdQ_xtcK)spY_RF`|EGhfWy}DZ=#zm{YV?-&i-eX>)sbP z9>=Y(7t__E-euWve>Z?ZM|4Wao)1nl@P#tc_(vg0t4{d$kz9q0cQxMB^hhOX4=zn6 ztTo-)aoZDw7VJ?pYlXuf(8)~Ehpj`WS0!Zs*8NT73@pZKAy9;3a6WY5Y;Fk^=ay~K zpnZ)*Fo>3YtoY2Nvbr%b`Nc*Olw4}u0`~`=5lrxAy^bi^Lb0IJ82PXEPNQ{iK^kvD{ zue0azpE35Fj}0tx&PvuaEzG2Gy&`X5=I`iZ`dn}3G;68U;9^Sbibvsd-YNCh`BDp+ zjvyh*5+clAf-R)`yBm>sVhpUEXDm6pC{Q@PpHWQi{hMQ3H~x#7*Yn7{|0_i^)$hI2 zb?3kPX^Z?Y&;m$xri+haunD{jUlhX49%Gx>5_P9}kDkcS<%ac_yvENe9I5U-`PjQ0 zIFrxoK|+e1lZG70d)H`%&q~*GNGMN6|ZSzn4V2 zz%Bo3pGU=kRVSmj&YR=uFYEe?T{A_;MTqA~2Wb4ONEk_Q17=A!OaLzpOf+f(wlRZz zxTc05pHPPD@g8KE&^^}-&|H#Y(>s2~q; z0-=i@%1Vj{paFe@1T6XlECV=BqzN-R@=!|r!QhX~u0GhPYj)RE!bs=NG(qlIm>HX= z{$8g%u6c2hGARjZ^+&R$G^p1=NO=Lu6b4O^29^(pF=W-$y9?iA>kGbi9x#x@k4y$e z%N_Xx6jF%;lQTxgvQ3m*1=NF}1b)**mXYXZ~l@=?daI5i9JZ)4G3SH897s2YE)l)DWYR>Re)!kVon~f19l0?JrrR z;v;EsI`wYZ++X+Fjy3h#P#iFJGWu7y&3t!Y(#p}kb9+2HAMog1{LQ%LKmcMk&DDT^ z;{GqokHe@?w@>456EGUPXh-&J5=O=<*jtuRNBAT~BIuX9yB&FPEB8e`<@e`tsuF@b z6+`jiwf#CUpJt$jSq~$r#FUI6jBBY08Ftr=$ll>MPoj^?2Jc`20oN3Ph?=xvJ4nC^ z0y;XWK5a`CRCINNK5Qj1J`gz%&Ll0sNqlS1o0%EZX*Ef&L=)kf8?TJ44MWCtB&wzn zP3YW6-$>&+CE*3^sCv!5!`>*M73WIGi`O^8wk4FzT_2`0hu~CLgr5J_C&!bIJYXYB z06P4T$3`x#qMl_PbRcC3#~pT&OB&2t@===LU9fi3ybZw{B+pxe`eAgld~&S4zB6dK z7el=R4eF<9UT4Bi^qM+#Uuy`z1HUqW?VMffsB-;wMl{x@P69Ury(T2Z_)omHNpYYq zKd*BG4-ikf5EV^cc8SDaa|SY*+qgj%@XK%xC=Fe_FcvDfKhkdkCnj#r$nQv6-!;z_ zrxHK=jaVC+;ctih+EwQo3IX5jH#2IphrGC5r=~oXsdZ>}hOh-$TY|*j$w1(Foo??E zD4ak$_aqSWG>>n^rtP9gpV0~YY+T?zJ`3P$U(|`@S_D}HrFz+Lc~mG;mA#_k)^JXt zs}Xh+3-820CqZp9Kdd1fq3NKVf;eV)9B24S=fx;W6XJw{eR;n8c$r3y425us#yAe& zP`>O*UOQ1)RJ#uw8zul!buPbBA0_$aKDe;B-hvf3y6c}FYMY$YIe5!!NXM_Zi^}!S z^ga#RviZ*4f7p;d1&jWL<%$^6%pfS{buetVP<1Jxgy;~bcRL7;PB?~bk{qA2vLx`o zAS;-?LQdb=z%aXrBW7lFp896jzb+R)nq1ab`yR?}I|{xPX5#to2Uv6G=HK=R&Znx* zmb*h2hAR)+$gde3>BuBAWfD@sl*Sx@XwmVPnf8STZr@#af87WYQkgBAks=mqYseT zHuD)uI8J;|7A5y?75peIPmm# z8|V4mqqd%>+oXI^T}y9{|MA=9i%iJl&wN$3pipY|&BUG<|3_3tb&@Yf_!P{8E(wL! z`o4YdnYMUvjBK*N+MyE8L{c$mNaZs6w9(>Y_=inh$!tYMI>C&-sDHd73fic&Dv4k~ zfl$o(?c~f&?&h%iO`}H;tSz*oGbmAErp64~%uL6ob;QhqRSNBDq~hP@y_; zU}uRyqFfS$%esA63NZVi>ew5tiGB)DCLC|nb`7Q;zKPlWsO*D=7C)mVLZdXO1VGl8 zDQlX9N#iPqk%l9yW--{nqV#J8;e0{OHl>K^XyfFPLHCPleA%RQT3#=6d@5}GTB{m{ z3g4BA-GM!1(T3l|5Cu&xvap{Q%GWNow@(EA8_>e@kJYaofww=XUcy*)SD#RF-7h?{ zr4^1Et(XnhQNHqiFP9FJXVoQ0iIk?cCm`wSbl zp48wb0?Lw~zt>gwOdJ}V(l7zr;h82pQ=5weQ^^5Zo9R4gT;^TlJsy-Zr9JhzZj>)) z8sB<)U`bGAeyjrdYV^NKv#x`M^)_d;@Bu^>BHamA!O@JZH4_5*($QE_v~SK0`v_pK zoEy3FQzUTomim%sc;?( zxgSn}EiP{tS{F&sbto&Rk$kfcOY#nb{vsiQ=0-N>lFd5X`FV@_!StgZW9X<+*M%$+ zIKXN9l=uTRe=R0g+uSEO+ypk0K)PSEbY@0`E3irQ3=iyw0TM<^FOYHZAa+<`lzBf+ zUw{%GgJy`gtW8BoJ>E+FEz62?-@N~kVpZV8;efHje{LI9jBNo|54TTAx6cO?5`oR4 zkL;;A{@|}wd}g#5;_tES{l0y#l+X?=P_crq0$@z0k+0AK$dEh+HC>-)U_|>42}XU; zc@v&=E@cQCjVOBpUa7}$^wG=aPELRd{Z#blLCTQxY8wGr?K=YeK!tR+|KKeTGd-#Thy*88w`+6Zv9}o3DNHGpjYWC ztS~gOaS^;1-uDXBIv7L_q4~QQD`X3D>;DC(XS%kzM~!kIRDWhU)lfo5#L-|VqbU%^ zVwS$bP9&a4A&&cfO*dVhATQWig}g`OaPC9c8x3N=HC*%Aauj(^12W12)IEb8H}Btb zX*Nm9jKnr<&EL+z^-HnAf0~Sh|It_5_~Y)Xk@IDA)tA$2yCpN$?mr`9J(FDDFNZ0t zsgkdFtj!MMw{77iM4T|7ye@RZt0@|^s&ovIrI zHI5#MBaG5j8Sm0^nwHNozBV@y>D!};;aL7+Yr;eOZ2Lfs_UEq={1)G!Xk1af*Tc{9 zG-5hQB&^*D+TW{MWqI^@@aNW;h`xOrTlCu3 zDRwld>fO`NTUc;COW&0~|r&zs9U4>B^-REU^4BjAK ziziPWaor0J^JKk|D%WdAFt@GVFmMs2^VpqnAlu$(_v1G4MhoHG7}cY{XCIl#bM8tG z?Wvg8R>%JD%+kAP?ymYAzDY&9)ddv7x%*uqD}p1nnOyw4l78YOg%Ku$144^XYANK> zRQz&Pa-zZw_T02Zvz8n{JX?Vpi%#a3*3~zTdeBH-gKsMvPFFyqFtY7@@+AH zH%VKtFZCDLlJXg&EPt_CBAjb_XtbSdz*L>dclfA316z8qvBy~6Kh>P+T0k58h&ib+ zNgA!QY?iz4Y-5ROXB_c?%y7@`RzBoo%{MH*Uxln-1ZSs7*_u}Bwi`q2t;tQ{3S?D3 z&SB_Bz}QN8sbf7C#`obKuS}QwW4w0!y`SVb{F@J(y%&02L-A*cg*VE7Lr|eAPU%;? z)bV*vU7%C=f%r8<-rzGNH8;5Md6(VXb#$4yBHFb6GE_Yavx>0VHwIqw$96zJE<~qw zyLXt$CrxIv(_c{jo5lwI-HQanyR1hc{B|0oNHQlJNt8P%ZNlq z+TcFR8pZ<`_DfRR{2G_|-#e*Q8Ak9#TXB^7`3k!07>bUjFT?BX<+51(oG;DNIg_bI z7`Y}gS8`p4cFCxoM?LjRJT}<-9W5LB#kpd1Dg;Fd(N*zFo)9| zH$O#Dlk74vU#0xAz#GyIKY}`rMfi*(tm=Y`vb&q`_*U_ojv>p;43#e?Gka!+YQPMI zQ^lk(!lGly5@FL6Otx^MlNYHD*2}k`$j)K3jCoF3e-9MzPNPZb>+{{>7H3fm$x{%mGE$EGD~CXiaBf9wPP6Aj#q!QG}%DE(Me#?hf8Xu zL*7qwloS)o6ny+D)CIr7`-x*?t>B+=S`~TMd8_*7A4KeeLugUs=87OS{3J|67u$}l zq7j0TwePX{Vcu`1zY>M>u_*UG=XOov#AKV)@Qo-VtG*4~y$#qwk$iIMST>n{JrNAJ zpJ`xF7glmeD*LQ6k5PXOCZ-+whphvdAcVbFTD^xoS(R(HB<$fbc0I|b!vpB?$$hW2 zrSIOOwk6YbSc124;O3+p@7j_5$IK%^!?UXjg_8h0NZI_{+xwDDx2VA8f$bHH~X7xjYiW{ zo%zm~2WN*=gT|0(nZko^fd{)>n9^B6L~#lqCs*>_U{S;s)l~iBRs@3C65%r}Rw&py z-k3T=?^Urs>QeWBe)9;|D&x%7@kzw55Ig)lbHqRjQNfA`6kyqP7sx=%RWX z#t(c+Xh#hp*{YCMK$D#rBSnTX(TP)V(eY$cWdWS-Q0N>nJz8RrJR%}NQ7y0{9bk8i z6zAYzJ`N;OCqV3C5E;QW^;3?X@37}&Xcd^HAt4X`;^8~$#LvEm@V8l!P|5SBqLcyx zQzkmQ3sWH%7D+X2LHB-5*_|xL;3qwKQess01f;=(uqo~tv`IuB6t?PoW6>CtQ<2E~ z^N2|`U`Us`-33I%SC83H$(PEi4-?V63@g zXrBsiIto2%R`*@@d~Bx^+-}g2t=|j=*5>Qu-l_<8oEQKVWP?SXQL%+k9~FrdrYBny zD{WD6bC!vgF@&$CXtM-p;zcJBWLL#o*{F#99%-936VDEIoc*jc*Mc+sO-4A!tUW>~ zC>P#Q!MR;Mi0j%p2YweUmj-pFRx`UL?_$)T>}m6K7I=rL$W7e?8!>eyK5W&V&D9q_ zPO5TAh+u9Fgp7%n-11I-@WpYiGKlm?)$AFGvEvJ`y^=@iKG*?+JJ#b@Nyx$^78m9Ms?YLfKkEz1 z)4wUZ^$Sju^Bhx3&r+9I)VKV;Oby@pl0e4cyL+2$KNPT>KZA`p2cQ4KDQH?y@=O^S zSOp!&czysK#c0W7sAIaCn=4OQ>k!WsN>p$&;60DRLMh!-Om)9bp?ffYY0I`-ZVGiF z^`oFeI`?L*9h1_uM{cTLX#5>4N{KIa24jdR5dt2rP;oTi8CmMpSOtv}H_R0{kS-Ky zb(_u?9Di&`!cw!FQe)gJ!c*1N<1#RiZ>|frn$FKuodSfyJlO3;gB((5A+1<%*?pN% zZ9f0_%DU;pMc!K}ZVIXe%xMPyg9k*54|0`IJINa7S;ur{fnC1OC?}SrUL9 z$)t0~4gWL$EGhrsM*eXfe1cyG#(EeNvj$b0@rZxL8?Y8S|M^%m&7xw#$X=p_1(yM6 zazG%N2{x2juiD^E?L;+gx%%bwTzk0A4|x4wWnHe0d+k?zJv#7gbL&a;UQGB9mlr9+ zB^|2R9X?R|VEMCG{vzdTNu~iguLZzYX4##qNk@2j5Dxs;LG%VfyF$u8r?xgnkJbb% ztAS^pj5k2N>iKnPmd1Gu{YgVQ$G%1lUu&L&(%;D^HG^AnSSunP^Llaqhyf5Wqara{ ztb!2X6opTw1F{>3FPsb;Dib^H?aT~A9GCL58}@W{r_}Wz#dr&j1zqijlWK+wj=@%S z2s3Jv>I|e$j1;P1;8IhFEm?cJtyu-n#1Jtt9s}2Vyp^746kilvY$22Z%2CR8&oj0( zAy@`rz{;>o5V}F$CER7#u`MI^ND5^T2cmFB?&X6(nO^S+NO+_fWsbijN2sJPQf)jJ z_Ho@g*=82m>}#f1&{u}?XrT_34=Ky0pyIEmp8BfLfDJg7(R#fh>UnFyHblBbyPH*H zrwC&LGOqJX!83cG!fli1gZhKXFxJ(bdn`G-D^tZ^D_^hpPw#%Z=#kF^KlNqOJP=X>8#G`?-lNeCGIQq$9@w@$g8F+vsyIN*jErzijsuB8ULq}xU~NT;OG}aCz5Oi zSDJR8LLI014~dBw7b7H1Grr>cW~21`_E!=LO*)n7(*hNG+fHZ1#u!)o#f>B77 zD73Pkow98oOI0MgX{Ho7^HFUuL#V)(I=0VBunRM_lQ_3^&u;Cxv;9Q8Q|LrtoAf^x zUC%f3RDRsk8iA9qohXj?{!2Y}kLwo>z5mw&BqHsv1Di;-kfpHJPVxOG;Gx1^qpWfx zZrB#Z`s=MkIdI$LJ}nz0QpiZrY(R^=GrNXtc?Ix6C`2=RdxeH8+6GRZ|IKow6-9d! z!kn><6ikX-`JloDun`GyBv@!{q7w9bg6ASJ0s~Mg4 zE;W6i%d>@Ks#9!{2G1$?StZX#|cksk%X$`4ey2hoAl0;;)^+zsm5&GBk;}5tx`!Op= z)nz7yvrmnvW261`@wV-esNdM;zZ61eE8T{mSi=Qf2esa?nBM*8+pg!s!k(&`1% zX@<@PUFLHAL9Z-yELM##iNE4l64k}6Ci7=)jZu&-8F(?C(DC&g)60cA&Hh7kZvu z3io>7t#ys&bbm(zB?!noUehcyB%mv-lgubN=PBetQZPFKZaz8BWUg zVcpbsf2BZd532Q@YD94!D0b{lMmC-=uoY=YB5;`CBP`PC%H?IHaBMrsbm^g=@SAw- z@CCm7H_*j}GT10A$aQL8g^CA^M3bBkysancz5cj5 zVeMQ`@=!_g0DAI1+1wRhG1}O{@;~Ly6!jW#ZjZPG?vl7wE5ovaNHEfNTdurY&necM zhz`p$AxLDOIL$8dp(lNEbH-Q?+HE9g7lO#RHL+MQsmD%N9X2%Rkl$C{S4iYlO=RiU z(l7+eJmO!@@bbt~jPcG@z-sfiWPRSACuDLPVDRVAUf z@yL|B=1|Eepglr1!aS`BxVwg07?HOGr58>0lzJhgN*L-Z>5uUdekroA5Oan^4bhg2 zeBF~c*X!nOOxNbK<|cX8ALzW@G7|G&LbA~K^;$3BuxMocWoN=cb*|%iV_%W6e633{ z(ZqE;>5svf_+?E{M1Z6yR6`uAvxDf7qYdua9wTiGPEfC9HndjiM`RdojT|d)60&1W zWzYJBl<~8p4l@VObL5v$Eq|=wD2ji&eOvx|vO8S3;^_l zMrG$alk!2256G0pn-lXHd!&7y5D(#>Jnj+2XftXa1ndUvGZ*Z#`*bf z+tJ$caZdH?FTvLzt^KQ(|D)QUAO2Pc{>9L1JH`yG`}O;EwpByC?RUSS$bhlX1^uV* z!)tcLaa#~}HrV3!K#kA2j=q6m*t!_Tl^Z)T;yc6lG%#r@@ZNRizsnWx9)XdN!2G-K ze-Le4K1;E933d{4^v2fln1P>vO0q2mKS&Z1jMsjMmffw~9#=#f==4&ccA+7TQn}X_ zhev-w?*^XgkA-AKcmhw8f1PHBobGNU_MJY!mQD%i&o-NqiSIOzeXrb5h=MyaZzGQ- zPkl%I@|n*Y;uBVHpD%aScfie~2% z9Fm~4pm7GkxnSGvLQDDo!Z+C< z@Zqr2?eyRJqj;x>$NHw;k%-#?tSUhFdLYtXD`Ni0$E?}{VlTb6{kIlR=wZ}Ohb&JL zV?SGWTr0T`NgOW85Z=62vvz*A)u4pQ7EJ?6ND~kVQmT4@2GOy7x0z2xm7;X`GbI|< zVJpLBhsp74PwZ(Q^R_GZ%U75rL8Ou@vJeg2)+SC~AScAi>n-9w6y)4ObmuzUDBY@? zg^3m()LFfW5)oaXZj|ja>zgJ?XuDYq2y131zN1+^F}_!CU*t_~1K+JjpMY+H139c8 z+qSNW@|T;Dn#w)8@y}u6rWWD2aGR;L5Rm>0dVI0km6Ea_%w=P<&5?B>+8zcON`arm6nrMFva|H!|o~eiNqy(km@xcn=Xe{2CEDloc)3In+L>a-LuQ7=Z!gJ7@%U z!;o#AYIV4#f7B2Hwwnbx z{Q5j!wsxkXC+eS{yd%aXu%H`c*gb?YW!%*}z6?Fv$VV)r3w~#26()Yjx}McNW9o>P zYIL5|7Wr!efH$cP9hs^(Tg}1pbbKSbJ_}(|+SW1#3eMX`!Qn*|758oD6R|Ncoelyv ze1&vd)E2Osz)Z_X?u3ktjKF_&*EE*<_C>f17LZ0JW<9Sxm*^{#= z>k6x|f%nz9wWyB3Htn-x4Qh|DrjiTLKJlas={T$%ib+Qi@D5iyt)Uk;d9E69`NvDq zvW(ypKI*U8g~+6Y-KSzQtU?t{nGgz(0+Ak743F1{-GF{DH%pW1W=>E_>BJU8qOwP8 zlQIv6g$TUK;|gmhR4Vd9qww?1;Et%pp=&S!l=HhEu&1dc8$CT|^H;N#vqnzQ`$g7{ zoxt|kQH|Ay{J1O%&$$1E^TlD&>#oH!)zi*Ez+;qWNB#2NQtHvVACR@(qoG}k$tdsn z3AIka)T?p_&K^x&vMuPxgfF326LP1wiuEcpir-9$R(vh@UBq{(2Bs=pIF(_)q5G<= z{kR>N?~LkhwNNTytWsd{(5;sl!1{^{ghjxr%Oi0s}8vZudZM*OP*pevd? zH!WDP2GF$?;)Cvqh+~5KyVm`tzPxABEf~S(NI#hQjw=W08PXqtCG(SWc z20mqWUPkD(A7*#nE*x|ndOAt)7@r&N^#+AB`_Wuc%e2B5(XSRhekk7Xr05NL_s!hn z0p~8D=-U^C-~e%ETu7asuQ29Yufm`*T!2pAlYT*sA~oC**o8i!WA-BY0Ss64rI7X5 z9>X;cAQ9v>tGTCJRCCDA(fXNcd_iZ$f7^xl=B$uLIFT({c9sgEnE}~Dc;pcZ5;> zIAU1)5G(mwM0GdX^6r0UpP*IZ{IJvibmrwn^mRynb6&Y!bTYb%q6HDSzxTX?0S3D?Z_n=lCX+{(M1(iK$5G_6p4vD{gLqEA>^Zi5D zcNvM=&nTL#522L2=@tAn8xll)pMgR*h0;Nj*1=oGpMLpPS|D?oXot@ucsL+?I0W0} zdQ(0ax1RNBte10%BLM+D&`oZl_d~`tOXuBoVH3cKAZ#!KL(0zaV#H;ILxjXi6-y&< z0BR9Lq_P43g* zBx37_lg4m_k7N?4FmaQhv0WLRu!h#!=;{Ss6Y5EBgBgg(dv_&W;%=tRHa56XnDx~3 z@j^6b6);S!;0lrm##>)=+XdrNk6A{ZI!{0P&X@A8dFQzDCW5*_{irH`8NY%6XbGs& zQkl#&MVXEcOH^N2X=nz)Aqy%YU|W)2G#pJ$P`osdI=%}iIHY#scS=(J`Lun`=P|C) z19NwUPRbEX_jvDj;C3qPu0C63+&CdBetOv(W%|P)?n7VLq;*?4V=OWZrG!P}U$Xky zRd6vGdHV*l3`9Als`nf0t_UWdDxQWSF-=>EYXoDzcFs=J1e{HEH?LU{S1st+vCETe z1;s4!R+Nxm$Yarsk0b1Js%G6RFF?ZtQb-)`1=FIzgfPZ8lq^Lff}q$`2WtEru& zFZ(^YPXjY10sA?9wfq`c`=dKavos0>P5^dy%LQ%5msR71)>L=v+z?xm?kzS6?NUrK zMK}iDw5wZ5!UKl2W_w5ba0JzMLVXm{9>|Lm@iZPW%}H$N4}uI{5nQkE)0yqYCVt@l z@|zr+h8sJ`-jzSbI_t{;peeULo3*MXVa@NoCK3yB+!o))AI8*wHhpA?<7zAT@q4m( z_(TQjo$tEV%Qrr3aLQI(Mdu|SFo#UL<*4L4OVqtK!rno8WOdJjO}&LgC$weO`cetZ zY9mZtZ8RQrUR{Ov9zvBm6X$VCO=qW60_DVAm|ENH0@*%8NDU65_naY=}d`0{mA7DU5rGMDk_qSn{#{GC!miUIDB%cZK{AJI2pFFhb-uJc{3&>ocl(}PZP_+4C_IDX9J#mt6mR}&=8Y% zBL~AskUVKf_(|#RsEkgE4Guqk-4OE^zeLRCVxdQ^VwdB5d8}2h_&h){e6{Th6@s){ z*%R&lIAda-o^uD`&!m8#r~Df_C4OJKB$1*(h=DlC>dwhhoL)X1h%~v3BV}_Rtf^?;_qNK zN~`O+GbD?wEA4=b(=b$QqDB61^I0{=kMOvu&vSROjLiC6mn*%fSNfrA{c0Yl7IiXW zIG9gW_z=v~BW<&Ikgm3L?e8hX=lzHAGFRf41|a1%-T?~KsiD&nW?!)d3?&atRfdo!e0Jy^j~x;TpV;2b3xy#zs9N_mCQxh%QV zO*35TC$-L#``IlwiRMot6`!&%vV9LI6VB(=V#${|T(S}~vi?DbY#T(PcYO%INy`s$ zNd7HJ4*-46pWWCH$6mR9(`!xKqX={b8*f&}|NSXTeBXhU02ij;{vrDD&t(9Sa)LGp zJzu|!={v$ZHwr>)(NU^HERNTAJQWWi@rG%sl*SVRos z@v4#VJ=F7gB;xhuaBOz{ztMW?GRr8rEpa=g;kWhY9cTOg-so>@Rrb;0vN|%$SJ}CB zEb#trIc&u~)nPX)(lAZl_cD*V$)qweFdmr>2hrkPlREmz;4cTz*Re?vgLOQx951+D zl|fhMaXpDTycMW2y{9L~u4Pz1>23qad6}5po|VMb678IkE~o6*{*?44a8>q@fJ6<5 zZQ8FKkT|xOWA|f7=jBntPclC1*zTMnY9kq`z_I9{^L<0sX7+d3COc)F)zX~82(nk~ z595?fwHEgj%~VI`B|KY2F6$E>?xXL1PqO?%UG_+V3t!*4Wc|=Dk?|W3F{M2SCoW;r zWf1QAVf_Lp>NBxR8hN{u(z@gy21)8l8uSCcbP6;bz0%)71=}SmeFQ<8(zW{Bo+XOa zdfWnYG!s1dsUKgW#xN7ZgaUAR7sR-2lX2jRLm`WTF6er3r%y?o0e?Tt^XUbIFu>bP zf;UZHPE7+Y|Lz(;ozRjs<^EWBv+vb^x&p8XN5=TfLPcBRB0r4NjbMJUcF~C>maphr zh+nD&H*!b~qnlGYw;|VejRypJtPmAP1|VNk-p4y{ppH2q%R_n%1Dy3t5j#!yIo^T4 z$5O_i>BZi&eEsIm3%eglFdzwO92SU>gqn2z-!k@T}M@5`Qe&VGWj1&a*(E=PpTQ zBB2E@zu@!6@~FK)8jqPDIT9hMQWpA$fvFS4#lND`tFx} zcVbAe_C1E~p?lx&;5b^8*^(<8;`g@}ck5mKa-D`WAt~?bv-G&dP=rj*tfls14C&u$ zQV5n*30Ql>H*fr^6*HLHYYW|?=F8hgSOaeEsc-dxIx%Pqz&h?A@|ea*C`;r3LMT+^ ztjl@kFXAuTZN%5JXsV}j@iBt+jWuY6Ff!%|yVq{LsUPTWf8OsY&cxg1d2U_oaH)FS zK5cp3dY6pgqx5-YuwjQcyY*|Y@aV*e{0LUpEr=>*z853Wg`6knCgl0tV@R(MnP)P6 zUNiNX=Y1ByfaES>5$>6|lTDV`qv-=h8t67V_%IhU2qJ~iM`c3yrK*R0YA2G$IK6pU%V*Mn6`>rwwf?WG; zh4ee23f5_^#rAh)dqdPA7GZ4_!mTDmg$TOXLx+eo*v%2r&%aAX`)@GD@8I*b2yRWs zbsRQ~$zRV~uil+v3titF5}%I0CqS+;)Eb@OmYm;Q*_BA;@}$jf*9$(SaiF&|v|pBC zg)9Mvfadl`=t@fJ!OGZRVB~O#asl@~w)b>&wa&(ubpP{O*!2QOO;##IIG7p-?Rz(j&OaQGPZXNzqwxK z{8;fjmc}yjX?P_9T&rVT03nm5J&6+t(qmM604H^lH|7w z#H$(B4FPKbu9H8n5Tj=Rdh7lo_mT(n)Z9HqJzMjo6)smZDhe z5BexLzq(WJ~n=FuImSG;W4kH2Z}0nlJIj?n$`n``9=o($rvpSBT%D8y*FjnhWJ zC9MS|YQafIvpIE(d8bg!&S6BQZc@lG%s5W}M z3Hi@Z==r-l*YA@Cc^}gTCdRf?3D2`}$DK3v>`!$0%2fy z;wg;yAjOHV&YB-1v`=w}0BBMgX9RcCcq&~)2x|%_p%G;D=yA-?+6&z^)G?BF5B)JOYWC~X;aW_m!r-dvcaAS=sADd&*g_p}Ofsm{0t!ah z?pW)_G*>&5<2X;#VrCs7hgb2AVJ*;>j6K0o3w_&SF|hFP*Z6`$y3e4$?tEtY-!)_D z-noil!8Xi#QHPwoz*X9KaEILLm0amO02jm*1%BLSF*ru8J4KyDm-lL5OnhVgjPk*O zix&00t+L#h3VJMU8iKy)d@gS{X+axYC;+pAsO>nNvxVSp|Me!}R?K%j+`&oYu*~Ub z#rce7E_pb?KO)Vb6-Q81`kxgwvESEmr^W+Ae8+^B-|aTwrXmz`*?dB85}q;=KXKHX zZi=b#aC5DaKobDHqp5s-e)Ruq0e1V@Fw94S7kL7LH9C)GUVfoX$x0^`)&M3=kTC{I zzKvS+yB4m>Fd$1xM5?Nr4Oqq3D*v$}#&f`vuqc+0zsLO-&PvrvOD&=JQ!9!3l7}XW4}URkhMGj~AV?~XWXSJ( z9IBj*sWtTrl+CWEa6skLBUgi}mJ_;HDFxi)A^`&$_bmBTRBkhTP0G0<}oNj<49}X)N4BwS!qvqWb~6;F}9A&?{UI=)O1y0~Ny}2v$+JgLR{b zP~K6d@KnhcAmOP&0mC88rBhs}{eSueLw0LfMoeb%Sf{JMyIcP346YEox;|fe${T6o z`*PO7ZNHY5BdxG{U#MQjM;93Or=|KI+{_~@OIm!efPe!laaK8#4}s-`mOEk!B30<9 ze#N;q!$vQcF1oyO14x}lZa?&Tm7V^NBHnu*nz1GK5MKgSH+0e`rmfqY>+b4+mncI| z)9V_l*T(WW`w*S-+I~3!pB4EZH#Sr_(In{Tg-z~f+zX1<6fkBlRAr7P-EYya*hrE# zj6ZBCa}pz#eDqFxn>_AzP@g@#D)ku~GmTY5Chvap0l#{It!hN*-8XH^gpIzF3EU-k=OW%Nw3~#|?u`F(@97;PE=z)Zs z_eb-o`LpZ2aAJTpoe#CbZqFXHMJ)foO;m{`$o)NT0b6yr&~VA}YbaaB3tdlco%0t_ zddmTM3{%DiWQKn6?Q)2Z*juv)K`g_fl5x!~bdna*{87^bJr=h7pWc8^2?9G?$J~^p<+y}vR zu;9nVPAWI4+!iH&I%OjvE)9(cc&)P8qU~~7tX%(0)K%7323$N7Q6q zz?#UFMaiXyEG&1z@QGBaG{ioBjgX?#U&9~1e=GQ~iP1--wIiGh`ahz+GOW#R=^A%; zcPsAhUMO1Jf)yxEf#L*rDNu?PcXyXS@dCx&rMO$rr)PdQbXQ>Tq^^RsO6CeDrGp;|+lx*!S$mmqa;=r&gL^AjN;D1$ zxClPFlj`Z|#`>{;May83*~3BOnb@5Z;IJvQfm1QEckb8MX+VoKX;)lHTU|bA&*e;5 zq!pr^YnAs|vL>iJ1+MXDUyh|*GP2?awM6ne?4TsU=NQudsB>u@={Q7}pSt7%uc-sx zXya3jK?qWHGUtiB+Ed9EvROySbA5XKK`3SAvH4?0kmknSx=yQ?35z4^=%+BcJV8(A zUo;~nXUJvXmy;xAk~VZE@4~C@TFfNn1rRGjZi_r?uVGhfSu2Tv_rW_q#_nRO8XOiv zKIcQn_1?Du!7;D4Iqo0pZN{E?0g?gwkow5#*P%2`YU&gm%(Uz6-+-_@s(RSeHj8hM zG4=5$Ou^y%6;A&ipg&>OJO*>dz>;?T&w}c;3JDv@6{Eu7=KgKB^fEL3qQG7hed@dI z(9o@&fSwID4JR*pd7c~?OMX57W{K+P^$=eGaNuSi>og2R>@Re7hX_y?M3caTBoD(_%Ea_;a(VLmgB2gWoc_62--w62KGa{sX3t`O zKSHjZ05umksBvMg7xsYcuj!cyMjNKwpL18Z`C&P{%$g?yi+fZ8$E0r5wdR%>^38$ zV1maQ{;S+TzW$s-m>s=MW*WU4Y+)KiF!_8jeVCccu)O7M@R`s(D$4L#%uXAEOQ~i_ zR|{7Z^X2zEo*fmfK2rWCJ+ zCDU(@e-6N2`zFm_cLY;Dt;V(WD2Ar*soEh->?{f=@`R*GN7#;g8gx6%>TM1E-|Ewx zqCYNH98DyS8au@lL@owtg(^heKAs5kr>hMg0}2Hkiyz?p38&^@U3;*0jKuEg^a_Z( z-~Xf-7RlzNOh~HkZsqib zN$xn&LGReyvi2pIYRdgQ$|WVU{CQzW1%& zSxsbzZZ(gA4<8vybB$3Xe<;$GZW{4A+o@PTZ{tsz{?Wdz=jc31ZmyjgQTTUdDjst3 zj2unjVsG^hDqHLT_){;UUz&tmvS(-b4MF9LFduDbL)H-9TJZ@s7fFBl3Tp17;k`31^Aq#6}x` zwCq&cH$@Cjf-0MZ(PU)zo8IG-bwDI%7@SEy0&y}PU~Rrtk0-;@w6|&Jyvu;wlTDnb zkN&e0KTZVB6P)-k`cK}u-vA35etv!GZGW2E$Ue+D%%*BtF7m4Sa*o@TLE^5aO z!{0A_&jC`9tD?Z-1v!)}kv-u784`rRq&^mDMTGD6?geFkh>Ly0w|d1w-H|xL8&JZu zg?XDJPN=}v&QiNoo88SLz>`-E;Kqz;cZ8;n*mO`c(cAn?8o>q#<5&`VqG`-H?SiFK zFFA=YrpDr_;W z2W1Vu7)%Y^0bZ%8rQf1)9hEFnhGGikM9|u;5<*2xA5N5YLlSFX(V~R1^3zN+D?I~r zI|u;nxoCV+N_9JKf4ZDZK-goDarDrM8g@Sz4c++cNzL}M4b%0d(I7D^3WJ%q`OF27 zWnrib@KTNAksHno1eIVZlby`b=i(Scb_$PkeaR<)6yJ4`sd?|umL{4L{l0kamYi|< z4ZFV$MBlulRy$DtgNjm5&S3ccA!$6Q+5BdNs97+_%Z)^TdHU%9>h>891>K}pO1-QH{xN&Whjz2&N~w$?e1R7v{$RtMF}P1uPs%jbyC4)= zZ;r^+q&n8n{ttjD-@+wzZX#o=MZM}P4!ZYCN_0usS|PA(f`57)u861&U#79COon%T zRSbhve+ku_CpbD=A>w0fyj!UtypYWecOIk}qL)0si+!+LnO&qN(g~8NAl+99E zzZM*W+i$24<3T^6=8@~ui>P#@BqW>>Qzkog&97NmM5e(#v1SQI9X`TIPtqM;@=V)B zA-hZD7&-Kci=H&rzn#{kWm059^yWLnv3oL76E_x&Mvu-EKBtYrCqLSo3VBwlxGeLNq#{f8E;@4sghBBygBeMx*{Xc!@k6NuLo*I&i; z0CX*gCFqKu!x>9D(c>vx{{wG%tA&=i3v{l+K?eB32ZAv12RhBK6zesmEC>gf zsVWSpOgH58F_;#g(xETE2ENm@eimgp0@r@GnFhL1=#NIqFg(KVF-(VaLoI{`%w^Y`Tol7 zg!08`4K>9vS?-G$1`aE^KExN%)X9Cd9~j{x`7(V0xj(ys{@ty8%)a(}jr*J3e#4Zo zq3%qWW$4JXv}WFbG3w6mKx@d>gOx?k6#F{}Zv@3aKYPxk95WLkPbL&Uu4a*oa3P0_ zi8<|XO3$G&HY||QY_YUYt_&j|r7cHWHwov^v==#Fd+_0qI4XJ`bVusL39l=yHpEpx zfiz@vA&C*y332JAaB8tj}hdQf)`_@uVQxj|K6y>kC zT7+2rt^hrGXvYkhNIm!jq3WD{&fRz3=*l(fVetSCM)8S3k}w4inUt4!CeW)u(u1+c zJ$Vi#rS7A$DGb0nhSh45G;x0gS?YMVw)2vZ3mPb8<t$-_ockf9HusFl&MhjFRF1Ki2^PV zsDHeIzFK}bsJTe0V(Y-73nj4S)Yh05RBR)2y1_i4_(AhZu%&iJjTo35c5E(PJQt$i#T;@2g{cbr{e|hFH0(EnRVVDrF_tu201x&n< zEWxy_tkKm07&C(5@=%0n*vc6RZxFHwf&WMR%oJl_dt z_X{y#?KMye0D8HS67kyKlmbz@|z4e<6>6Na04knr8qPrJ%rVSwQZWTh8>}NH9;PPNr?*!P^aAUe#sQb$$~z=IA^b`_7_{JkCUgVI^7QZbaWz! z+Qyeys-(;%K#(eJy`_*~3|+YOLm{3v-ZzA>r%FoRDVW3DO>aOoG)SloF9z@a%%7$8 zRPwJz&C6TY$kp{n|7x_sem%x+awE8B_gzP&4w?NwN;6)O1=-Pj_z?U9n#LL07qjL@!^{7v`K zF&Cu3XMM>l+Y67?R;b=Z3=sM^1@z=qRo)SWUgoV5tXKT-0T-J|K1XKrT^g;Ex$LG} zqVG`k*dENsWw8!L;qOvwhQoOv0O$j;v_0Z4E$Z%(&t=BPp?;^lU>QTLMD_jEySsiW= zWHtAC&2Wpb7IH`(@XKk%`;ipzuyib-+DNjfklmm9o>!R98=EPS!|@0ik&obg^JGif zcSiPHuahrIGV_wKZVb4G4v@%Qv}X)=ln7wpr&N$hCG=q)2o-))H_;;SvkV14rQ-|; zsA^owqPPum6{*AaA4fBx9+Ak%Qcy0*8}KV?I_%sRF1-I8Ep6TxBEzKkc}{Vt?4A9nhi4QXZ*6+tB| zYJR&W`5N2QH!ZR?FYe_H#^a~XznO61F^MG-3+9egjKaltnAGth6dgDozA!* z$S-2(Ytl#Rrsoc3leKpXF8v=qY{x6G#d^hfN!GN99FEOLGcB7dVmQ)0o6hpEF0H(; z!}5kjg-3!&4+&#fCmgqQ4AHRK?}+;wc5W8BRc>P`hlt)v6tZ>0%i^u_pbeq#6h7c` z+Mg}9boL+sA{f&5%F#6DD_u>M=I?YQSUNQC!z$2g(0j;HC^Zh>^_1GZdrN0n&fwr_ z(C37uO@=A3F z7>Dv9CZ6`!74WrxEpX_@)@99q=5g^SxM;cVGavqLiZ||0RkTob905A$U6OMxVSLqDP1>qvqZL2Z~|IaUiS4UZ5R z5rad4=Wl|Ffit%iKd9ehSF`Zn7+)S;qlB|%HJ(QCW3kIlp5P?UX9YI<7W9SmHlRzm z`JUhTM9*#k^md;7>(8fasPIYslG@2A(@Ghc$vbcA(8b;?y=OEpfk%xGj_%k7yUqPo zLuVn|Te;)TAGqt|&)-J}#SKVL$^TS!zh`*t6u)#ZRd8tQCzPTzvYNxe$5a!1vxBQ! ztSp;a!w8RenrZPdYYqA*eK(0d&-`Q7PfG97;BOOSo@_jzl9BcvtgaPl>L_46g2%W@_IP5o2Gaz<^39S#~Jaox(8;LrP}b z;*fa+B`R=+IblBHUT(fcUP0_wKvZ{5)pB;;^fI3aTKBsKgAsujW#4iSt0=+&tFI1r zYD&XyMgS#x`+~pzY?p;jhlken9V&|Mmo@hoFD(FV&ySJoM7B6tWxq(ekY=QhA?^|P z);a(Trm2Py&%D4oA{M!9{HIKmt1C7D@8-&%ofS+VG{+V)Q;&Zg`Q=N2fDPt?O*67P zs1u*xUTRC6fY8$a1!#z8qTq^k7lR#Pw!kU%QnC0);4S_uf&Yj88PF;F+QNcbVNI8W zMkAdgQyKm_-oglf$)6$xH~i9lio(b_$JA1j`C_I+DfxvCF9@urRr>_cW{)?u7hX)o20C_a^~HQp9g zsV89BhtuWKyw5B9o**MlE7dHBcA7d?2ergRa#O?ygqN~Q2TgxLuX zDI^R6k|{)}!wlXU7OsO3><=xzUPV7SzD^i#_{6afx2$?+S%lDx+V&EJa8VE-8hu4s zN0jx-(fpcJAwL#Gpqc(zwEC)6K;Qnq#u{py&lrJ?()wkv>SfPoh(0>Ry@01PWr>?5 zR>9NPV&04}L`0+x4a|N1Nd2HG3_iN>|GPb5>+gM%Z~U%vONG&ejg~!Ss@fJ3!9u_w z=kw4T%-jMmtM(KNurJp#on+3>-)`=)HXy)9wY*eEdnpl|GyHKq##DX*k`l%85 z)Ai8F@-6jdNwe$sjpP|^xpxVU*ahfhRve(xLPjP!*n$_GWTTZgSP~*5*Ue+Q2!j*sB zc!tts;C#|ro-#N}`8%>B%y10HpcZVzUIxUF%Yhp!igl=_3(4CUKJbL~bd#i38BBw{ z2x|y3J8})*@%!cP5c1mjXK%_7JJ-{=#lOM?^w`)vn&ALmuREwr1KgjO2IY3_SvH=8 z3`^PV!ycG?Ih^u=ep{%jN}T!~fmKB@U7TYlulF(%HPJFPoXOk% zq+;kB^Lm4yC&tO*bR9XvKGa9k5W`zZ$3>TjlmMQniP>%ulfPJA_E3k-e-=%UW+Bjj zr<-8|DXwF|r|{nDUjlzqI?G;fx>+CWh`;b%MV!o#*tiLJ^Uou1)V{7CY(RtcO|OSt z9zO=G3|?U7LRZ}v&8`$GX0}z}Hxx~wc>$G$JtJE7>0u1z6d`ry?rRUxF3r?qtDB=j zE~^&Kpp4>Tk(ioqh6-`?UO81L%E%*@aOSe7QEg^f&JGenRU$_Vtx|s(p)3Cv0I$RL zwidAl2dR9y3LH&j^=?0RM^RwwI8J_lPagOICTl zoo8Sx7x8j{L7K7s%*WAY=dm}A47F0Rkc{#Hey-WG`wMY$Jr-3HnlfQ=f*kGvM7LO{ zJN>%{zZG)v0*Mi7a!go7(ub_Au9n|N7X`KEBBd`a8#5 zZRSo`{YYA2A3c~boZpn)cMBIs+8}KnXqpAwn}wHlV&-7o&Qb)6l& zm2u{y*@MqRRlF? z{?3_UOEn`s)D14s_U%5@IZUap7mbflYL>WYu-_~)_SjJy4N6u9@|5iew7dpmtw`s8M?wZ|ZS7oa+X&IYbM)Bb)KyAQ64zdbGMlLJf2z|kG$lA#Fr(MbdX}lNPwPG+%9cP zw5BCT`lL7cKP>-SBSODrGy!n|X<}KYh z4!|ekeX#frGuIV|G6H(FgEHdEgZ8fT{Gac#WtpriZ?YS zdt?`;A$bE2!`PGGUM9JbVuo2dx!7xRER~m6!e7Brkg!-IDU&|!5Kfn(Rvr$X5G+GV zk8;uyfB$5%VBj@ERG3&XySPH@uT&K+z3;jTx+1IxZiED;8q4T93VH0Q4HyLBv8OLZ z%EDb_OUy4k4D{l4L=*_n4tN~?`d2G~bCqJ&)CM$)Op#~@F7K;)W2(z`N?bD`)N7ONh-rr>}x~dDwd62^``=X(Y6e8*%EFm2LlsOC|Az)z)nT^*<`@( zgjfe>NsV&Li;%;Q@!?>f1@k*BFq-+^fIs;y9DCHX;vQ#vQADV+Z`S23R z^g6Sy?T`!J$8U{yv3z~d`M}#GFBgH7NG22Czk*Ru)L^j0Gz#U91=pYD=pDr*%&@Wk zu6c99Em4^4Q4B8J`ZRR|%{xy%Y6|58UcB}i#psjk%r{j^csvPkU zcgD=W>}qOX#xmDU>W_-DoJSU=b}1*@Z-4Kj{Ujl90!Jhi=^?72Fs_1|#^KCKKr)&7SD z(%3m{tp$|`cPjjJBoEPu@sjD&Rj!ZvdVn*EqaSoa*Q0XcEXX;JtklyKR=YOp1@^{@ zydRFqI0NzUdD5?B4c}3SF2hkfxh3(#ao3|^%k0MFpdE*4B2=j7y|p+yVj&=foaI_T?;g}~^|1p!u==C+p(PI% z$@;%F1{#w2(PuzowLCI&qk zM`l*m|7(p)_yIuAxtglfbJC`EeR~-mcp*Dp^iF|zHcO7!NYhgbAalTyf6S2D%`ezX zZ$zuR+}SzI=fEUc=Q44>X&})}B<6>p&#CG8z3OaNIOw~dJdqg#J8KzV+srn4zR7jl zui3#b>+KqQ3pam&yC*rXGl0t6-Rep2a}W&l`UD91!_3#czguc{byUBAxu`upq2vU? z^S8N_G&)8i=ibO;a>M2KA;cLC&c6`Bc|>zNkYd8mzkX0Lq&bkHdgOP0J7;e;1E!0i z-Woln!Exs9ya*0q<0MthQRVZLd?5l+9W42dhz_Z1Y1YjuGuSA(PrZ?FQwUHbDQ!FD zAk1?6F(##D@|72ZBz-A?wC4Z^hQ57B}gc@AHKylPX1!(Z@E+z8!m71ItP6x zQ0MS<3p&7iy?WQ7X5P~{Pa^&Xhe%>Rc`Hr26D}Nw6}ve0`OY-*LN^S{BaO8q8*T8* zX_3;Gt)xWY<_V|oV=d)H`^KevTHtjB$12yF`}ywYv$ejZJz*vk-D?yS^@1ez%$vo8 z;21ixOL6He*!OEKz|EVp%)Ubfj^F0to2af7VI7M z7$Bib81)<@LwzkgKBr{{JaLbRjxH7j?Q~@P|7aM%_!KR>&%Rcb)8dgdO9_2kx^3$3 z55Kyi4}WX7;uebK{3BNz`!?onP4z9AuU-{WcJQ^;Errr=vah+*t~!%$lIh4(yt|OG zyO40cOPj;@#XmTUt!!WASAjN%PfR=2db{)`sS+Eh$`@!YYN6ya11K%4yv+LHy zDyheLCF)ycCc#?TCP({&MJCzIwFiT*v-#vnNoASifnjtgIE|*ZfZl zSFV$b%uvbYO2J!~@8p8mEgMyjx1yg@98tu4V}+C-H9KOko9J!k>444*yyw68ZsLpn zCktMX)$tZON8!}+`ICC4{s|vZWVRp9T<`8he!m7^o9BrW98y*tQek);6l9-TN)BQs zzGMvc8@Ec_IB9g5-`C_^I8Z}NH@gE@4FO{se%uav)v^R8#ooC^p(jDq1^ocEa0H|$ zXaHP69@YoiHZ)PuKRHU0Nrjayk{4FBPZPz|1J4<9s&dK;Bk#*KlW#3@`^EzUHg*l}r&>l55i31K^PZV^cYPVW-KS(v>e zPW|$3W!{(6%5C?@u`%^yCs$6??qlrYi@Hy!x)fNP0}xds(R^@q|fU*5E}q3M|}wLcYUuI_uuPkM9)ux&jY5{6|FR0?pf){6Tw@N`6Sh zkV2VdSSRweDt>gBdzr-2ouSb!r9aKCw6W&@qqPefUi-6iaNNHlb2k9SWvxuQCiGC4Cn@AwD!aug2V_>K^F+K;|&IEqE8NIr`F_W!8CR9wR5%JB7 z3GaS_Ggzihn8#SgglEBZ=U5mjp+cOW{BNlG{9E;+I&|RsoIoB1FK&MG? zF(oi7Q-CE|f zc(AXLYP6?b_u^3ol;&fz&)^NWa$y-|bg8u(ToF|fp%6Sbq@=Eyg8OaX((XS6e4BN) z{{59wAPDV&L?C!auH-k{5mk1v$uX{`BgYGKjIPXxaF;LrruXef8<*UTr%LdiTld{E z=%vRNQVWITpHO?8b2+Vf48gDV2)F*7`(Eu>&i1GqS-R+ducqNQJ*+X{PWeY4>e=$x zWZPQPoltRDd@mKME2SI9`mjV9-D9>z3L0wLbJ;?D`%Lm7qM7u# z_qj~vkWGe7!B;|jT1+MuZ}UtB_mc2?@^-_xfWB<#e~RWJpaFecPCeXlq!J}a>{ zfa?tG^PJ+l3d)l|ZH|li-T0N*=fn32+aWVqO9LBD%x+_EGUR|Jfq<(l&WGYcaPcCb zWmSJ%ZGu~bPcB{J+sbp20-*L~b`r5^lW@vT2IiQ>I=R17!?^3{M>p_J?mY~{vwFSr z?yg^?3*Cj`@9-c}uc+p9m=**p@gDsGRjk&nGPJS$c(DvNr+*4J{>68#_oRk|3(-S- zsoB>fsQ4LA;%l_O(m|XU@L3=0!fayiST}5y z9fuCA;b{#92vp!=>%q+w z(~bEDqpLCL(z-t$5=t}mML)Q$Mx+qCy!>wcSIh7gUb_N^H+%kOC$wHB_DbbILjc?j zzPk6ztv%gcT%i3iu4n3Xbm&gCP-OI|X`c$ld0oNNg%_;-LKo{0IV<75P_}%%#aS-2 z&aA%`@{|kNuVT&#u(QAUgE{CVWJyG;94#7qfvRhk&m=;450^jQ=J|X?Vb*zv4cVWl zbrgQn(f=z1gZDoVxWJb70eV-j>ji#nu|MOq3g2RkftlwIYCt)xu$bi76l^YjFAAmsnV_DJ;pks$nIpWwpSW8vqoRP62`a%MrmZJ({_ zQ|kV@%T(UcKczaLLH|055gHjot3)lI+K4bITNo_#l0HSMMC;wd%upfIWB+7<^e{!ly z>MD^pNDv1Mi@+7gjWLIzYw&aBL-gxR_uuBOv+~JYL9F-2kOI$Hxc zotEjS?D_I{V;@8C-@Ql1|9~r3DIw@o(1<<65<&2SIEP|i zkde@5KF{Q5iZZm*fO>j6XW&lsU&E5UL|K>+;EOA!h}7W5;l}a2%F}#>J*JdlWDpD@ z>)-4?kyzhn|G(eXQiTc08ugF%j;u#wCt-`S;6}rV9}T__heK-UeY0nqM&UBt+tW(M zh>xi+7DNgs;=(IFiNjdoalydCU!AuRnk#&pVu1ax=`jNt>VJPfF%*xXHOH_P%+u2> zblc!U8c+(&Yoa2N$H5=*uN4W#BwHJvj(bzDwAI>x6{%SjB0sQV)ur1xz^0;Bp z4BfUO;Pla?7YwUPUfbFV+SdPXITCTqZZ}$8Hj6&R7W=RhS`s+OR0X|HI{ zBQUT2h8lNAltDHoBw*X{|G%|Rl_MG8WVk~_T!$A5ta^&hf+>feB1YoHyMf!S-x>9D zADLP6aAzXtZ@VaX6Ais>vw@BelYn`#5KbyshY{Yt&}Q(tOpC34z@}|=HxT5m?zOoJ z{?mPvY@=8>tqg~tO|XFjmkbligDTkei)58n#@wXfbfCzj?{7@G3TtYNX^n6Ts~`?O zhP5(EL>omGK{7@g9{M;vf-zYbRiRj+&zhLmd12?|E_l_i`lTLx@pG0w<_jZ_vL&$M z>0YAr?Gvv*kJXD_)d~pF(gflxB{VF_m|C>R+#CtNwns6iCgjeP1<5$zr|kG8fcR zEqr44ibhY+D%ZDJyy_$nl0wKri>ZicC8tk0gth((~kU^|Nfb2 z0n`VAU;Ccxo3m76GHN!B)^r;=ToLO$Dh>l09znc{PN7m;8C$~SdC#2~a3`|1iGIb7 zA31N@&Ohen;^km-5mYm|>Ei)56z*1|#^d?H53(DDQHGh*3a2rm2xhS(=pwe%dD>cg zUUP8+x@^uR*cVPy1Su9?z58>r`EuDw1wKi<{3YPgrVy2vO_Kt{J?ALRfowOIj9A7I zLI$@XL(QiTcw!;eP=|gHtB6;0harm}D&^jM0leBq)-K)wyywpnEw})~BvTuxl)A`U zb~-3<**|JvI2KcRrQP6)h-ELt54qgEU;6cqwOtMn_jO9^siizq+~td%!jdVxIvS&X%>V^# zXZ74+zplHCQ$wE?IizHJAa2$HmSc**JaP`Ep z%+2UD1oO~2FbJ$LmyN@XHWPfW4T>ua>^GKzP*DYLFGH`$-;!BPSKIN5WB(v`^KB}M z)Kk)~%fqe4W+GmHOKhlt0!@v}Xw7e!$fO`<~2jMBoBjomDHK^saoTkFt6ommU zYBwkn7`S?=I-PLxHd*{f%=2M6r{Y$MWx^;My(_g6=QSa-xv2W ze}1QVLdhk?-E5AEiA23;-CvBAls^O6$D!X-D+x zrEJ*V_ZB2UBH`_E^QS-jO@d5cz3m}#AlE2#d6N6AOYMIYy!bK-db$V%*EZ{y{uhSO zjEje7smpfkftOF<5;5RWxX@`-g z@Iq|aD@XboJMxu0PgpY^l(oGZ!5=>IuPVg?BVdO$9tlN zC6xL#-sQ0d`_+s(%jF^G;@noB6YwL?;$~*dwyhNSAOyWP^jqX7n}D_BhonAcO5Mr7 zv{MK0z6k*nyda^VX9Z%%n@fqK)3HRyhvVm&vq`@**HEQvPtK9v4-^;lbo5zbT;|M^ zg}X30`TB<}S7RBG>Dw;m_CWFI!f?gJ`e7Jukl;;O#T$Vgns}!*6>- z-!wp8k9n9UVlwkxtex#)o#eMEpiCN4Mk2W^Rh^r6?{nxPc)2*GDjU;-0iiM>jvlTA z_T!*}tL_3B52p3>hZS+qc>>ifKjiDVEtez8?#ix>Q-g{rbZ+ZPhqw{2VK5?fi@6EW zSS>C1=hWMsjdFQ(fsXC^QMF&|HVXILxf%>gUjA)tG8(^m`i%iv8-~Q}1knl~N6<$F zb#mMF{&e*5U%uo^IY+9OA}^-LUyggU;RR*buE!RBwP}Crr^Gh%u)5y2^XJIkvt3HO z>k}Tg{y4^}qc5&L`B3;b)cQ`~f*1B}PR8FP^Ic-DAu;TG)?6=<^@Zo*RdM09y=0Dd z8bxXh%sjV*A?5wJyLIBEc~gd3O^ml@r^SKPV`YFNI66;6SK<>^^YReTG0GfXP$w}m zjo4mX94U1yzB##^pcy5sGISO?W14JtTQ=f-^|SczHy%czJ~Jc z4Sw$gjHx{=+d{UvUiSSU8!2iq%l{nMSI-lRufrEH*ssR9;FjIG7wnpn*;doPd%v{0vnc#NGCkS(X=TeanZ?mjn2s=gFd6V=eT4Q_b;RVMdE9xh6 zDc3MWTOWH7=k_#wzP>BDZNcje{aJyWWpQZp#xXIr$cxGx8fX;4E_MBcAz>8 zHd5c%7F}^5anmuWI01dFJ!575U~YZK`qUsUZk41y?mOmAb7K&444M(ez}WN%nxayH zZIRWxNcQ%Dn=4&^Iz&W>g!ij%kw`Cxe zWU}V=9~pu1;U+;K$5=)1*u~iA7PZMoK{Y*gbNjaA9E~R9K2I|zfzbS_DXXSDV1G!c zgII}=o?%2RSHltam&wt10cLL0vo1*|vX{}(m_ot-`B&w4Bo;C7v0R=ox^TMKIjOr< zQ!kDCk1qqNYm*<>PkdCUUeAb6AD%C;u5*~7x1BYu8lMV9VBRhw#h!c616!h5zRI#@=ToIcTfbj*DMi>Xb&pG#oohiOp)L1dVD=dgY@9O~N?9Sp_z z%h($_Z}v&k<{pn@#!gx+BVPE92@e+IL@rG}Nda@OTElNJIk-ad6tgItWhCD!#Odf* zb`mTQjNLPB)*7C@RW=8ncWpO)1u5U!20{lqA&|wFM=yn-+-LF&^|RTPfA??aWdd_f zTNm)LTSL;v;knTzfbI|Iuo^(dY4-ATH@mojf8KrFJBW-8yk(2noblQN4$Ss3lM6PZY$0_fN>SKhez09duh3*iX@HWeyKA9 zw)uPDBi|sS{*8ADX^gZo0?+~#8mA~X41RZ_Nq3Qrq7hO+_H79^rV<`?OpfQ?S)oY3 z=*e!RI9y}-xke0Gx)K(H@$Q_g6&$WtY7Rxv+Iy#(R3%IV;39=lfI3)x?PV5e| zA7y_9u=2m-%Kvto)}&-;Nr-q)6Bf1jAr_&y1W{Vd@{rs8n@RQnFW1B{W`kk!wUebN zz4HS5$KmD|VW_-hF5qqvGRd|69yA`_KPmORoD01_??bL#scVP0104=9x?ZE1iC`}L zu19sBZ-w5%g@qzbT=+UrPdwTr_1NaFv25k&e! zdlWByS7$dPc3{fkcvbh^*Gdu=R8kxrhtYgrB*|hXetOF`MxBab&1|HkcgGy0==M4$ zakk~)&eNIQQ-zn0>(Eq02Q8%lee`#bAu~bx#QFMn!*VIaPSUK!a1Gm};;F>(Jl`)! zufJU}cyqQ^BQ&h&#cs_Fi-<4^*n5@zLF*hg%SQaTt^l>v-POE<(LKT!dXD9c)IM7E9?V!Z_gdM+EWiWJ{CzS9D7<| z7YCZ!uNYATRbM(0OE?JR6r{Mr6qtJQ+VAI=^p;w2HY2*)BU(%0o9nHhSJvbU!|45H zUiK^fqAnd4wA^7i1sFnn&e3*FgUUdv_Hwyn~i#yt}8wY97mo5*7 zhhjV0CsyyD^55tb^rsbyPNpC*9U>mc%B?i)SV<6=TuRzkxFZ|oLscSK3a}`<0QQ4x zM3u{KDHk2{WU@LycCoeIBFu9i|6W+C2f`cp`D(ccCn!p9F!D6paovk}4UzDj(qusB zbEYG+e749pjUP~E8!vwfmq(k|rtF_x%D-Dr|D2TukX$_2NPHq*=-m&{5Y)2V1!T7@ z74j7C5P$LZ4pU|hkV?zLKHA<64Rcj}hVYnDh@-LJ9$rq2+h7Ni7r1M62Pw-JA%~#i zB9FDt{i@7w($N7&m*1Q9#A@6<1QZ_L`J=?hsVn~xmy{gt?ux=9MNf$C7o~NJk4zig zpdTZw*nW9U9E4RK!?zBQ-Egd!);O%|tDwbSB?WyJPRO^T>W$axvrMD{p6 z%E85G40Dm52;^}q!RV1?H1p||mX`{FK9-){-wA30;MPB?9-fw`0rBL}Fg-7yr ztj7#G1Kf9X1Mc7siM`d~#(8+1NNE$*#O{W(^xosw2-aKoYB*)h8z-dVD26eoNRydU zOTDVxcOr)G$gO3NhLJX7Sl0WhywMd|B4#Q>KrcR{E6B76<<-F|PJTmZ&ut z)Ca19!!I%2nLHHV`lWBLJM5dE=srf2F?msZP{7rCms=?Jo$XwKJYOktGtRM*fwQ={ zZ|(ZsxvfI6ovOwWf!{8jg^Bd0P*=y~!FZ!-~?XIr3pSMbaj(*%rFlaVZ8a-9v8eMZBYV3;r z#CZ>U@a9F|c%)SEY*TE@*x_^zanX-xxCvUS<$-!3kV*JrcCYvB_WTxL9}(K=l+&vq zO@esjw~wb{EnZh=MD3Qy%NxBt7F<*%pB$lGG;RS1Pwq%OW_}0T3{SIt&-6GgK_z}^ z+})NM1(v`W z4Av{qUHUo*ke7@>45?$RI_+eIGV9Uj5TX%he&n%4OTi>*PvOt?jSgzn-Zox(Ow4=8 zlbl;YXh5h{2XTL_UwPA|vTDY1cyYWEpGq`{NOZf0YA$#=osainxv!Vmk!Ud>wsWri<^gyQ% ztH;AVxpzecMpNix%F)!HmtstMVR}3AqnUBebfzUE|SjaEih?gJjjuD|=c-T2@v*F_Q@@e~LX z8P`$L?F|bj@>QxH&8Fkbn|At_G*Il73oX^ZHBBvXJC*;OY%u7Bh{pFAF%^NuLlSYLAMH(q8q3 zr&GVT1Xz18mHDjf68TST3^an_Tb}kYiUmiJB-!$TX0EH|JR7*;9Qt{IBl?WGgMU&m zFU_Q+WHW8c+c#uzY1&kL_F;no6@4C|V;?RrQT*@TR5xMy#?;6Ru@OY=N$G70Xn(l7 z)_zElpcEECfF^bPez5x`?00e`Ag8J4#=u-x3QLQy)Mj+vOQb^Z{&8~NaW6V}m-tnk zWvxLZq74iiUw8fPSMQhEcMdhX3vn*Aa6g=l65|&MpE=TO&u>2si+f{b(aJ1-)dl@+ zW}c!{*f%t_JVHw>`)Ns4La=&Hp18+&7d?qkhFqS>PFFVA#DFT&rh0Ta`;c{d0 z;|?354A8?}(0|mBu%8Lr=(e#nrK258#6=~pivtpF@V9rLR7tUP%x?Ii^y8$Gr5^XI z69m7Eopwp|t)Fw|Lj&3z0eXv!GQ*-73!-vLf2twpD>|_-aqoTy6ch7X)|e>20|%hN z#m?@|g7$k(-Y-)H_ZQKh-OjVpVB$&Me&@|tDItxe!HW8(v?-CgrjBlaA0ddbdXwt` z_vhq=w|Q2iLp)HqSrZ%jcUpa%n%jPXZvNm@kiF?TdV%v|%m^O z+(;`)?uSQl;1f46|2o~QmlYr?O!Ty90lNO}fZmv#Ddb2gxcd>9F7?}rePh&){diy` zr#s^G<`2lQRu~yNsOcSlGwa8_qF8sVT}S*{V9M2lAhCvLhpN!tx7mOpt?)MaNP)Nv zwaEJ1Mq^786>dH3waK`NwAmES)`m?o?XW(ln!9{qPi(a$$6ZH4vCYGH6rL&40pl|8 z-()N*#%!}@LYIjQ|0oL-)J>w3?H`_`SFx3!LINLf>MDhhtVkm)golY5Hx@oOL?y^; z4$W1undcNr{wrv0sLuH~#Q86V^tNfP-)}iJgDJEGBX%U|yDKN#(jUbf9!{ zz5Q#Y*$by}zWPm;FF(P$ZTZES7UbxnPe^&ebiS{PvD#2v1>Jy(!4K6ha(Kej0B6U= zX!LF{@b87|Yu__OwzkVTwndlb-)jA)2o25^t!FD-0)$-lchLp%>Jh({rU5% zPm5IM!Wld4HF{yUyvTV+$at}!>WACV6KPYo4`!gjz1!A{ z)`l!UzPWd3Sv@^`d^TTZn&V4Boz*uK?VBMSq9il0Ta|Xs`v(ZWG^}Pyf9F=(11<#- z3@ZP^X}y7^`n>RcUGu-^3|QmC8<*iS2_I%a$NH|04a*fn$E-onBIM~5$An1R6IN;q zYX0QT?uy6fCX{*lEvMhCOI5Z-SA+H@!jKxG_CsmQ#rr!v%WSjg%xuS#XJCsV7jMB?di!mCWXV7Ac|5&apRE}0~ZoKO~tvP`UGo>R`iV`F_?0KlDuPp z6oaNGaCZhxzqC4Wbv$Ar@MchtbakPaSJ3_!K>1m-UsDndR{u6%v*uHGt=WSv5bwAd z1fE=H8Kj_^c3kxHDOp{HV9Hsi_d%--Dj4JB*Kp+0QdLub=0=u4-CzPf^GL5x{UN{V zq@01nYOA^$1n#Y9_em`o`8ojTpQAI0;3J_Ph2$=iu&blSD$}L&u~?-idkvQ+R;ffJ z9%B!YWA|^5{=4OP*+p`5Cp{o!QQueO2WzD%4Tpws(wTB%-emjWGZ|}Te-@c?IocPk zyPh*{w>#jR3|5wwV^Wo`<@gXy2t1K)afkG8;)fbu&QTl&XH|L;|GpG!|AayMLpGpd zATxpY=3q}Z1`(DflBFw(EFT5qAt`&&Xjz+Sv!s`9I67`|%0Q;4#xa?%aL zzNLXVk>`!gvz)Fai^K}IA zOVAo&N(IedIfB#Y#0h8E{~T2YDn_qs4dPNTtk;?9;N!sfG=G1=v1A?RFHyJp5TjNx zQ?Fdd$|k@SxD=?e(BNV}M)&CrwCxx-QQul4gJ_F~$1J69)6#3=pl>Exj0|J$nPC1W|v%d+5Pctdx%0NY&f{iNuQj?#06OHGe2Pnc@1xoo0y=Sx3QKpS2CgREdW45!Cnt4^nzz`Q2rH z9}sH73jf4VWhmHd!&P;u>4mu)+Y4XO(tLT z(}#G{dHt>o1-~SM#ZMgqW_Ze$LK28BJnA~DODxX51Bdx#5Balx6Yv`T0lO`SO|$qmmokHum=mY~%2{3==DiSon$wW$*J9x1g2QqX7K5{XLy<@J6}ZJ&XVS zv{IxT0ZIKa#lZE2{N%^s2`za+>LK>=Amhl8pjz=2LHzAeaXT|{o4YU zg)%7XSO5JB}y(`HCx|1c72_}!kspij2VL=}aznU?g_EQ9?f13cBh zdT&DgYN!MdkTn+>uMUOB?Rb@DW)~4uAx>cQzugvy=5R8h_l=073{5R|G8$=_8jIj9di{x)pBDrK8! z?qTWTl~XS^nnGSgx5{0J_az>_*=G1LT9*t=r;q~Z|*6XWRD|{kajQMLm4ER;*i>qZ_V^QS& zz435bsB>S}^hakYoFuS-5}8me*o@GPPx9P?bDW2{NdH*Qzos z+{q@(!Yi$Vx|;^qer)`LKmt1lE($9a79O{^^&=SHf6{IZ2-O)^dW$bq zwCE+otnvKk>+9xo-d>SN76)5jk0IRRF@3QR5!pu>E^jIW?t0sySpPz@NJIh#s!I>6-PjXu088YH==^d5lcd1kI8vS-dy?n)H!<KA!*Zla%yBI0MT@_bw(Y8+#9^$~CzNJ^NI&TDHjO zoX!Btarf%IxaSX4b_DD4JBP#MxoTKsu>~Rx&^=_=2mn!+h9R@qp8`ydVTUzDM?Koj!9kKBBjIo(*|8JI!TP1Tf z+pV>hja`7N1W2aj7Aq?)%(8J6g!hW#T%a+Com0mRe|gR}YrO>%oa|TtJEV(#pv4{e zUsOh+9y|>E6_HBFCcR01s3yI0)u?WVc-5yOF4p0K%S{nn3NrmU9XnT@?x$S@#)gGB zs8Lg91XUoRfio>43s9H|HJZ1RnjX+4fBMWIT3fK1S)6$q@GXY1X9=U{L@d9Cxn|7t zbcD5ahiuhT#NCVDL=vC#0|Od89}(-JG;v^z!Uk>`(U}RFlFjuFqR% zGrRH}3GPq_R0rCSyVX}U13u_=luIrm2C(5yB*$JF%CjomK4v;2uc@3ySxAk*Ysc>J zl(^v7vbmgkyS*O1Bu@7ff^XYLP~1YMNgv8PHJ>PjVdx$aa&G;XUKPVsc3TEv2lews@RRq-dcDbwsP6=h~x#68X<nVy}xw^?GdNaZRl2KTsblWvKCO zc>nPk_oCSLKn)V(^|?1q7exV~cBmbXKq;OA+a z83m*B$9|0+U~H}Egzd2RK*Y9dT0ArOcDFiFe*5i?m&A&liXAq+bT)|_oPI{;oJj7G z^q52==}LcVDXAshJH*t#oGOF@)6Z*CM|vlV?Ms>N0^d0%w_A$E29(rrLr*j(+hENz zJWJ;Fp6ZiBvt8z~slzVXSsG>v&RM@(qeD;XQH{OWSn}eszwF#?CdoM#z&@n91Y2_( zuAfq<&qvJ2H1UZxpf)zCh-Qf zN8eew)bS_m-(|LQik!7ryXKA3(XdPWwBS|sf+B0x^@XdeM)%#!9)Ghzk)Zkt?g8-5 z`eGII2oqGTp`6Y8t03p@V!X}4i!jI2`%!Y2(sP6N)bah=4bWdw;$>6APethI`dGxh z-Li=FRgn0N{3Z=6~W;ahKMLKHl~D7HacqIKJ1ZWCY8A1-i_7^5pT z3bwz~NSCA2i!sYxwj`?rGL@w`jgK3ywU1PaGnT0jl`z+vB@E~iAF@w<{=(V+4|R8w z3dJzoW3g*Wtx=qa^F70ls8}+~DUmD5Nwfkil?9BpZU$krfbHyWl59M)-$7o<+}gOt z5daT~V1YWbEG(T+_G(kDQa=JK@{`h*DwJ8C)}+fG{>b?Y-Y% znru|rh>S2AqdIv!l81Rd4=Bi_E|i{#cv`M_%E`wCu_>?k{+VNsi9_|xpR`3-y*b$g*M7zGQJt6gyHcC+n|^kf;me{VO*2(tD&sK0y6;$V{IhQw1Fj!6__m z-u#mbXhtX_m24oRd_(B?KBnmS`dC5ZAl7x>HW1vL|KZX8zdh1#44UQhB?tbGFKD7= zEx@rEd$cFHgmk}|jmM$U{|>S3YZRZH<*@l`#NLmrIH-(s_&= zjw}K4u&D^Om??c}t19$emeVZ4F;=mm(|UV%vWu@P^D7zFsuPi8O;BFm~?s&kavRZ8@Q_zQk6@j&)jsJbOVXts(jv)#$mn&V38jr|!B*PbM7_orjq z%GasFI}CCyvQl9px$)>c9&203@0l22bC{Q}L$nc@8kvJ@vF9*bLEn^Brt^ zM#56?TX~P10V9sxL>!Ex|I1OH4Q$XMw=0jS%FJnj`Qmk!4>h)8OB=Nd6A-2q7rbq)HFAD*S&Wb6%^pTrlIY1rY^!ZXN16?* z<8`_{SmGx0)#?xsP?A5&%jibv3ZPgsI-?$YMidc@L`*62%Z)eHa?Hn~n}p|-a@UKy zc)v?awN%dZFf!c!`Qc2Fqb2^*P?6*F!IXv`g2;)-AfTlz7#iR0hh)*K0+H!angD=NM8QA?rU*4OdK6lW*zrC8W7Fp+`jgUu&9ZRi?Ug=fCY?mUiTN$qS?Ap|wT3tlJ=%T4ZkM&_pzVXg+W(>#FYmAjdh+7@+svBwIJOE# z%vo~LGEekz&PkBlx=a0t;mP@)NYcA2Ryr!)gaY7Iod8=7d)P9jy~r8Lj2``IK`Grs z%WIpQQlTAq**bs;fGV}!OzPxl3`bjZgsb%yF?dM2W2>e8O7CF+)+RL> z>iNI)b(VvA*Bj~k_SC*jceu!FeR=&OvAcqd38cm)Ole$_Hcpb%p1Be8kKyK+)m>$z z+lI}zYzo+cp?9hXnKje!I3sm$d=cb>qxaiw^*o^aZy!U^ZPqo=TWm!A7!y7$-Sw%= zAh+LZ>4D^a6|$Kf6)zCp96tUaLbbJ%)*Ke0h8; zCPF=Ux8?3u$x_540pHYVU;RDk1bY9MAXy1xBO2IhSpxf%J{F5;VuSOuLc(M72<8F4 z*hF#xjJf^ChuHB4Dy?c!qqq4Gf5ig9uM6O(Fy)}Jtfy1IgJy+B&jYh`7|*Kr8D&XV zOs*)G{%6~86B&U!_ou4g{jX=Gd7VOvo{f!H@z>-gJBuTCVAoiCG-VHg=D7U{JGl28 zb=1n)F)HN=i6O8evbebY9h(9Eu68p{0`r5fkcI$5Eb{8%?Z*5%Wy7O??%2c@@7%$4%G7|mKW3QeYd#jD*4-o8@`>P}7fb=Qwr3js~78|;wy znx}tjV7L-I4!+<&(ZWFg+W%zbA_@0;fB*93dExn9=LE87_lhp}pY2xqLy7KVT{+Z8 wItpLY-X6-BS3kjjWB>p8znFr@ue&dZG?bA9Jr_nO2(Qma1$FsyS&NYW0TVEYdjJ3c literal 0 HcmV?d00001 diff --git a/src/common/components/Error/ErrorPage.tsx b/src/common/components/Error/ErrorPage.tsx index e511033..5da5350 100644 --- a/src/common/components/Error/ErrorPage.tsx +++ b/src/common/components/Error/ErrorPage.tsx @@ -4,11 +4,11 @@ import { useTranslation } from 'react-i18next'; import { ValidationError } from 'yup'; import { AxiosError } from 'axios'; +import image from 'assets/img/face_surprise_melting.png'; import { PropsWithTestId } from '../types'; import './ErrorPage.scss'; import Header from '../Header/Header'; import Container from '../Content/Container'; -import Icon, { IconName } from '../Icon/Icon'; import ButtonRow from '../Button/ButtonRow'; /** @@ -48,12 +48,7 @@ const ErrorPage = ({

- + {title}
{title}
diff --git a/src/common/components/Icon/Icon.tsx b/src/common/components/Icon/Icon.tsx index 957289d..2407ff8 100644 --- a/src/common/components/Icon/Icon.tsx +++ b/src/common/components/Icon/Icon.tsx @@ -7,7 +7,6 @@ import { faCalendar, faCircleInfo, faEnvelope, - faFaceSurprise, faHouse, faLink, faMapLocationDot, @@ -47,7 +46,6 @@ export enum IconName { Calendar = 'calendar', CircleInfo = 'circle_info', Envelope = 'envelope', - FaceSurprise = 'face_surprise', House = 'house', Link = 'link', MapLocationDot = 'map_location_dot', @@ -72,7 +70,6 @@ const icons: Record = { calendar: faCalendar, circle_info: faCircleInfo, envelope: faEnvelope, - face_surprise: faFaceSurprise, house: faHouse, link: faLink, map_location_dot: faMapLocationDot, From 1e7976c2e31a9b19334116fa78427357f5c45424 Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Tue, 22 Oct 2024 07:30:18 -0400 Subject: [PATCH 7/8] tests --- src/common/components/Error/ErrorPage.tsx | 24 ++- .../Error/__tests__/ErrorPage.test.tsx | 145 ++++++++++++++++++ .../Account/__tests__/AccountPage.test.tsx | 1 + vite.config.ts | 1 + 4 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 src/common/components/Error/__tests__/ErrorPage.test.tsx diff --git a/src/common/components/Error/ErrorPage.tsx b/src/common/components/Error/ErrorPage.tsx index 5da5350..7e2e9fd 100644 --- a/src/common/components/Error/ErrorPage.tsx +++ b/src/common/components/Error/ErrorPage.tsx @@ -50,12 +50,26 @@ const ErrorPage = ({
{title} -
{title}
+
+ {title} +
-
{message}
+
+ {message} +
- resetErrorBoundary()}> + resetErrorBoundary()} + data-testid={`${testid}-button`} + > {t('label.try-again')} @@ -65,7 +79,9 @@ const ErrorPage = ({ - resetErrorBoundary()}>{t('label.try-again')} + resetErrorBoundary()} data-testid={`${testid}-footer-button`}> + {t('label.try-again')} + diff --git a/src/common/components/Error/__tests__/ErrorPage.test.tsx b/src/common/components/Error/__tests__/ErrorPage.test.tsx new file mode 100644 index 0000000..b643c20 --- /dev/null +++ b/src/common/components/Error/__tests__/ErrorPage.test.tsx @@ -0,0 +1,145 @@ +import { describe, expect, it, vi } from 'vitest'; +import userEvent from '@testing-library/user-event'; +import { ValidationError } from 'yup'; +import { AxiosError } from 'axios'; + +import { render, screen } from 'test/test-utils'; + +import ErrorPage from '../ErrorPage'; + +describe('ErrorPage', () => { + it('should render successfully', async () => { + // ARRANGE + const error = new Error('error message'); + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error'); + + // ASSERT + expect(screen.getByTestId('page-error')).toBeDefined(); + }); + + it('should display ValidationError', async () => { + // ARRANGE + const ve1 = new ValidationError('Required.'); + const ve2 = new ValidationError('Max length is 100.'); + const error = new ValidationError([ve1, ve2]); + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error'); + + // ASSERT + expect(screen.getByTestId('page-error')).toBeDefined(); + expect(screen.getByTestId('page-error-title')).toHaveTextContent(/^Validation Error$/i); + expect(screen.getByTestId('page-error-message')).toHaveTextContent( + /^Required. Max length is 100.$/i, + ); + }); + + it('should display AxiosError', async () => { + // ARRANGE + const config = { + url: 'http://www.example.org/', + }; + // @ts-expect-error Only need partial object for test + const error = new AxiosError('error message', AxiosError.ERR_BAD_REQUEST, config); + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error'); + + // ASSERT + expect(screen.getByTestId('page-error')).toBeDefined(); + expect(screen.getByTestId('page-error-title')).toHaveTextContent(/^ERR_BAD_REQUEST$/i); + expect(screen.getByTestId('page-error-message')).toHaveTextContent( + /^error message. http:\/\/www.example.org\/$/i, + ); + }); + + it('should display AxiosError with status code', async () => { + // ARRANGE + const config = { + url: 'http://www.example.org/', + }; + // @ts-expect-error Only need partial object for test + const error = new AxiosError('error message', AxiosError.ERR_BAD_REQUEST, config, config, { + status: 404, + }); + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error'); + + // ASSERT + expect(screen.getByTestId('page-error')).toBeDefined(); + expect(screen.getByTestId('page-error-title')).toHaveTextContent(/^404$/i); + expect(screen.getByTestId('page-error-message')).toHaveTextContent( + /^error message. http:\/\/www.example.org\/$/i, + ); + }); + + it('should display Error', async () => { + // ARRANGE + const error = new Error('error message'); + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error'); + + // ASSERT + expect(screen.getByTestId('page-error')).toBeDefined(); + expect(screen.getByTestId('page-error-title')).toHaveTextContent(/^Error$/i); + expect(screen.getByTestId('page-error-message')).toHaveTextContent(/^error message$/i); + }); + + it('should display Error name', async () => { + // ARRANGE + const error = new Error('error message'); + error.name = 'SpecificError'; + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error'); + + // ASSERT + expect(screen.getByTestId('page-error')).toBeDefined(); + expect(screen.getByTestId('page-error-title')).toHaveTextContent(/^SpecificError$/i); + expect(screen.getByTestId('page-error-message')).toHaveTextContent(/^error message$/i); + }); + + it('should display plain error', async () => { + // ARRANGE + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error'); + + // ASSERT + expect(screen.getByTestId('page-error')).toBeDefined(); + expect(screen.getByTestId('page-error-title')).toHaveTextContent(/^Error$/i); + expect(screen.getByTestId('page-error-message')).toHaveTextContent(/^error message$/i); + }); + + it('should attempt to reset clicking page body button', async () => { + // ARRANGE + const user = userEvent.setup(); + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error-button'); + + // ACT + await user.click(screen.getByTestId('page-error-button')); + + // ASSERT + expect(mockReset).toHaveBeenCalledTimes(1); + }); + + it('should attempt to reset clicking footer button', async () => { + // ARRANGE + const user = userEvent.setup(); + const mockReset = vi.fn(); + render(); + await screen.findByTestId('page-error-footer-button'); + + // ACT + await user.click(screen.getByTestId('page-error-footer-button')); + + // ASSERT + expect(mockReset).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/pages/Account/__tests__/AccountPage.test.tsx b/src/pages/Account/__tests__/AccountPage.test.tsx index cea27e9..f8219e4 100644 --- a/src/pages/Account/__tests__/AccountPage.test.tsx +++ b/src/pages/Account/__tests__/AccountPage.test.tsx @@ -10,6 +10,7 @@ describe('AccountPage', () => { render(); await screen.findByTestId('page-account'); + // ASSERT expect(screen.getByTestId('page-account')).toBeDefined(); }); }); diff --git a/vite.config.ts b/vite.config.ts index 0b4cdb1..1509780 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -30,6 +30,7 @@ export default defineConfig({ exclude: [ '**/__fixtures__/**', '**/__mocks__/**', + 'android/**', 'src/main.tsx', 'src/test', 'capacitor.config.ts', From 4fa5e8ae182c27a61d426a3afd03ab6a63d9247c Mon Sep 17 00:00:00 2001 From: Matthew Warman Date: Tue, 22 Oct 2024 08:39:53 -0400 Subject: [PATCH 8/8] pr fixes --- src/common/components/Error/ErrorPage.scss | 5 --- src/common/providers/ConfigProvider.tsx | 38 ++++++++++--------- .../utils/i18n/resources/en/common.json | 1 + .../utils/i18n/resources/es/common.json | 1 + .../utils/i18n/resources/fr/common.json | 1 + 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/common/components/Error/ErrorPage.scss b/src/common/components/Error/ErrorPage.scss index 615a52f..d6b7d33 100644 --- a/src/common/components/Error/ErrorPage.scss +++ b/src/common/components/Error/ErrorPage.scss @@ -9,11 +9,6 @@ align-items: center; } - &__icon { - margin-top: 4rem; - margin-bottom: 4rem; - } - &__title { margin-bottom: 2rem; } diff --git a/src/common/providers/ConfigProvider.tsx b/src/common/providers/ConfigProvider.tsx index 7276de4..b52912d 100644 --- a/src/common/providers/ConfigProvider.tsx +++ b/src/common/providers/ConfigProvider.tsx @@ -19,24 +19,6 @@ export interface Config { VITE_TOAST_AUTO_DISMISS_MILLIS: number; } -/** - * The configuration validation schema. - * @see {@link https://github.com/jquense/yup | Yup} - */ -const configSchema: ObjectSchema = object({ - VITE_BASE_URL_API: string().url().required('${path} is required.'), - VITE_BUILD_DATE: string().default('1970-01-01'), - VITE_BUILD_TIME: string().default('00:00:00'), - VITE_BUILD_TS: string().default('1970-01-01T00:00:00+0000'), - VITE_BUILD_COMMIT_SHA: string().default('local'), - VITE_BUILD_ENV_CODE: string().default('local'), - VITE_BUILD_WORKFLOW_RUNNER: string().default('local'), - VITE_BUILD_WORKFLOW_NAME: string().default('local'), - VITE_BUILD_WORKFLOW_RUN_NUMBER: number().default(1), - VITE_BUILD_WORKFLOW_RUN_ATTEMPT: number().default(-1), - VITE_TOAST_AUTO_DISMISS_MILLIS: number().default(5000), -}); - /** * The `ConfigContext` instance. */ @@ -56,6 +38,26 @@ const ConfigContextProvider = ({ children }: PropsWithChildren): JSX.Element => const [isReady, setIsReady] = useState(false); const [config, setConfig] = useState(); + /** + * The configuration validation schema. + * @see {@link https://github.com/jquense/yup | Yup} + */ + const configSchema: ObjectSchema = object({ + VITE_BASE_URL_API: string() + .url() + .required(({ path }) => t('validation.required-path', { path })), + VITE_BUILD_DATE: string().default('1970-01-01'), + VITE_BUILD_TIME: string().default('00:00:00'), + VITE_BUILD_TS: string().default('1970-01-01T00:00:00+0000'), + VITE_BUILD_COMMIT_SHA: string().default('local'), + VITE_BUILD_ENV_CODE: string().default('local'), + VITE_BUILD_WORKFLOW_RUNNER: string().default('local'), + VITE_BUILD_WORKFLOW_NAME: string().default('local'), + VITE_BUILD_WORKFLOW_RUN_NUMBER: number().default(1), + VITE_BUILD_WORKFLOW_RUN_ATTEMPT: number().default(-1), + VITE_TOAST_AUTO_DISMISS_MILLIS: number().default(5000), + }); + useEffect(() => { try { const validatedConfig = configSchema.validateSync(import.meta.env, { diff --git a/src/common/utils/i18n/resources/en/common.json b/src/common/utils/i18n/resources/en/common.json index 86ea17a..ea4612f 100644 --- a/src/common/utils/i18n/resources/en/common.json +++ b/src/common/utils/i18n/resources/en/common.json @@ -30,6 +30,7 @@ "min": "Must be at least {{min}} characters. ", "oneOf": "Must be one of: {{values}} ", "required": "Required. ", + "required-path": "{{path}} is required. ", "url": "Must be a URL. " }, "no": "no", diff --git a/src/common/utils/i18n/resources/es/common.json b/src/common/utils/i18n/resources/es/common.json index ef92083..25c8e91 100644 --- a/src/common/utils/i18n/resources/es/common.json +++ b/src/common/utils/i18n/resources/es/common.json @@ -30,6 +30,7 @@ "min": "Debe tener al menos {{min}} caracteres. ", "oneOf": "Debe ser uno de: {{values}} ", "required": "Requerido. ", + "required-path": "{{path}} es obligatorio. ", "url": "Debe ser una URL. " }, "no": "no", diff --git a/src/common/utils/i18n/resources/fr/common.json b/src/common/utils/i18n/resources/fr/common.json index 62bc820..321e583 100644 --- a/src/common/utils/i18n/resources/fr/common.json +++ b/src/common/utils/i18n/resources/fr/common.json @@ -30,6 +30,7 @@ "min": "Doit contenir au moins {{min}} caractères. ", "oneOf": "Doit être l'un des: {{values}} ", "required": "Requis. ", + "required-path": "{{path}} est obligatoire. ", "url": "Doit être une URL. " }, "no": "non",