From ef79a9371fceb829fb04982a9910ff12e8f08669 Mon Sep 17 00:00:00 2001
From: dylan <>
Date: Sat, 20 Apr 2024 23:28:33 -0700
Subject: [PATCH] preliminary stuff
---
package-lock.json | 562 ++++++++++++++----------
package.json | 16 +-
scripts/run-with-env.ts | 11 +
src/client/app.tsx | 42 +-
src/client/player/MathText.tsx | 39 ++
src/client/player/Player.tsx | 107 +++++
src/client/player/parse.ts | 14 +
src/client/player/render.ts | 3 +
src/client/player/script.txt | 8 +
src/server/public/assets/background.png | Bin 0 -> 2576173 bytes
src/server/public/assets/bridget.png | Bin 0 -> 999373 bytes
src/server/public/index.html | 1 +
12 files changed, 534 insertions(+), 269 deletions(-)
create mode 100644 scripts/run-with-env.ts
create mode 100644 src/client/player/MathText.tsx
create mode 100644 src/client/player/Player.tsx
create mode 100644 src/client/player/parse.ts
create mode 100644 src/client/player/render.ts
create mode 100644 src/client/player/script.txt
create mode 100644 src/server/public/assets/background.png
create mode 100644 src/server/public/assets/bridget.png
diff --git a/package-lock.json b/package-lock.json
index 0f83775..4e24956 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,11 +12,14 @@
"@databases/pg": "^5.4.1",
"@fastify/cookie": "^9.0.4",
"@fastify/static": "^6.10.2",
- "@firebox/components": "^0.1.5",
+ "@firebox/components": "^0.1.7",
"@firebox/tsutil": "^0.1.2",
"@sinclair/typebox": "^0.31.5",
+ "@types/katex": "^0.16.7",
"dotenv": "^16.3.1",
- "fastify": "^4.22.0"
+ "fastify": "^4.22.0",
+ "katex": "^0.16.10",
+ "tsx": "^4.7.2"
},
"devDependencies": {
"@databases/pg-migrations": "^5.0.2",
@@ -558,14 +561,28 @@
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
"integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
},
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@esbuild/android-arm": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz",
- "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -575,13 +592,12 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz",
- "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -591,13 +607,12 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz",
- "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -607,13 +622,12 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz",
- "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -623,13 +637,12 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz",
- "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -639,13 +652,12 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz",
- "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -655,13 +667,12 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz",
- "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -671,13 +682,12 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz",
- "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -687,13 +697,12 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz",
- "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -703,13 +712,12 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz",
- "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -719,13 +727,12 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz",
- "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
"cpu": [
"loong64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -735,13 +742,12 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz",
- "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
"cpu": [
"mips64el"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -751,13 +757,12 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz",
- "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -767,13 +772,12 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz",
- "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
"cpu": [
"riscv64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -783,13 +787,12 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz",
- "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
"cpu": [
"s390x"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -799,13 +802,12 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz",
- "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -815,13 +817,12 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz",
- "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"netbsd"
@@ -831,13 +832,12 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz",
- "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"openbsd"
@@ -847,13 +847,12 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz",
- "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"sunos"
@@ -863,13 +862,12 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz",
- "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -879,13 +877,12 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz",
- "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -895,13 +892,12 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz",
- "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==",
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -1057,9 +1053,9 @@
}
},
"node_modules/@firebox/components": {
- "version": "0.1.5",
- "resolved": "https://nodepack.playbox.link/@firebox/components/-/components-0.1.5.tgz",
- "integrity": "sha512-oDGEvUD+1TTpLATUGAhkXNr/ygNaFgCEVrBe0zUP+U5Dz77rMU1KxnfkYscKBx4ZpGThxLNaOmLn5BN7ZsJUaQ==",
+ "version": "0.1.7",
+ "resolved": "https://nodepack.playbox.link/@firebox/components/-/components-0.1.7.tgz",
+ "integrity": "sha512-DR6G7JCKPwfZK5LFpUndghCsflukY7TahDV/BuaODjfyuobqdQSKC8BT/AtGNWbX8H5aA/m+5Ck3cFh4Aujfhw==",
"dependencies": {
"@emotion/css": "^11.11.2"
},
@@ -1172,6 +1168,11 @@
"resolved": "https://registry.npmjs.org/@types/cuid/-/cuid-1.3.1.tgz",
"integrity": "sha512-LwQOxZtpN3aEGElEicpHx1I6exi+mLBecAdLMWNRjGaYByD2CqGjSH1oVEQGeNSqgYBhLC1pIJQMDgcpxk0t8Q=="
},
+ "node_modules/@types/katex": {
+ "version": "0.16.7",
+ "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz",
+ "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ=="
+ },
"node_modules/@types/node": {
"version": "20.5.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz",
@@ -1866,10 +1867,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz",
- "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
+ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -1878,28 +1878,29 @@
"node": ">=12"
},
"optionalDependencies": {
- "@esbuild/android-arm": "0.19.2",
- "@esbuild/android-arm64": "0.19.2",
- "@esbuild/android-x64": "0.19.2",
- "@esbuild/darwin-arm64": "0.19.2",
- "@esbuild/darwin-x64": "0.19.2",
- "@esbuild/freebsd-arm64": "0.19.2",
- "@esbuild/freebsd-x64": "0.19.2",
- "@esbuild/linux-arm": "0.19.2",
- "@esbuild/linux-arm64": "0.19.2",
- "@esbuild/linux-ia32": "0.19.2",
- "@esbuild/linux-loong64": "0.19.2",
- "@esbuild/linux-mips64el": "0.19.2",
- "@esbuild/linux-ppc64": "0.19.2",
- "@esbuild/linux-riscv64": "0.19.2",
- "@esbuild/linux-s390x": "0.19.2",
- "@esbuild/linux-x64": "0.19.2",
- "@esbuild/netbsd-x64": "0.19.2",
- "@esbuild/openbsd-x64": "0.19.2",
- "@esbuild/sunos-x64": "0.19.2",
- "@esbuild/win32-arm64": "0.19.2",
- "@esbuild/win32-ia32": "0.19.2",
- "@esbuild/win32-x64": "0.19.2"
+ "@esbuild/aix-ppc64": "0.19.12",
+ "@esbuild/android-arm": "0.19.12",
+ "@esbuild/android-arm64": "0.19.12",
+ "@esbuild/android-x64": "0.19.12",
+ "@esbuild/darwin-arm64": "0.19.12",
+ "@esbuild/darwin-x64": "0.19.12",
+ "@esbuild/freebsd-arm64": "0.19.12",
+ "@esbuild/freebsd-x64": "0.19.12",
+ "@esbuild/linux-arm": "0.19.12",
+ "@esbuild/linux-arm64": "0.19.12",
+ "@esbuild/linux-ia32": "0.19.12",
+ "@esbuild/linux-loong64": "0.19.12",
+ "@esbuild/linux-mips64el": "0.19.12",
+ "@esbuild/linux-ppc64": "0.19.12",
+ "@esbuild/linux-riscv64": "0.19.12",
+ "@esbuild/linux-s390x": "0.19.12",
+ "@esbuild/linux-x64": "0.19.12",
+ "@esbuild/netbsd-x64": "0.19.12",
+ "@esbuild/openbsd-x64": "0.19.12",
+ "@esbuild/sunos-x64": "0.19.12",
+ "@esbuild/win32-arm64": "0.19.12",
+ "@esbuild/win32-ia32": "0.19.12",
+ "@esbuild/win32-x64": "0.19.12"
}
},
"node_modules/escape-html": {
@@ -2114,7 +2115,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -2158,6 +2158,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
+ "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -2778,6 +2789,29 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
+ "node_modules/katex": {
+ "version": "0.16.10",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
+ "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==",
+ "funding": [
+ "https://opencollective.com/katex",
+ "https://github.com/sponsors/katex"
+ ],
+ "dependencies": {
+ "commander": "^8.3.0"
+ },
+ "bin": {
+ "katex": "cli.js"
+ }
+ },
+ "node_modules/katex/node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/light-my-request": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.10.0.tgz",
@@ -3711,6 +3745,14 @@
"node": ">=4"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
@@ -4132,6 +4174,24 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"dev": true
},
+ "node_modules/tsx": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.2.tgz",
+ "integrity": "sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==",
+ "dependencies": {
+ "esbuild": "~0.19.10",
+ "get-tsconfig": "^4.7.2"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
"node_modules/type-fest": {
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
@@ -4780,158 +4840,142 @@
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
"integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
},
+ "@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
+ "optional": true
+ },
"@esbuild/android-arm": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz",
- "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
"optional": true
},
"@esbuild/android-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz",
- "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
"optional": true
},
"@esbuild/android-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz",
- "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
"optional": true
},
"@esbuild/darwin-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz",
- "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
"optional": true
},
"@esbuild/darwin-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz",
- "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
"optional": true
},
"@esbuild/freebsd-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz",
- "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
"optional": true
},
"@esbuild/freebsd-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz",
- "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
"optional": true
},
"@esbuild/linux-arm": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz",
- "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
"optional": true
},
"@esbuild/linux-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz",
- "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
"optional": true
},
"@esbuild/linux-ia32": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz",
- "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
"optional": true
},
"@esbuild/linux-loong64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz",
- "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
"optional": true
},
"@esbuild/linux-mips64el": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz",
- "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
"optional": true
},
"@esbuild/linux-ppc64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz",
- "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
"optional": true
},
"@esbuild/linux-riscv64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz",
- "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
"optional": true
},
"@esbuild/linux-s390x": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz",
- "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
"optional": true
},
"@esbuild/linux-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz",
- "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
"optional": true
},
"@esbuild/netbsd-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz",
- "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
"optional": true
},
"@esbuild/openbsd-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz",
- "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
"optional": true
},
"@esbuild/sunos-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz",
- "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
"optional": true
},
"@esbuild/win32-arm64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz",
- "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
"optional": true
},
"@esbuild/win32-ia32": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz",
- "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
"optional": true
},
"@esbuild/win32-x64": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz",
- "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
"optional": true
},
"@fastify/accept-negotiator": {
@@ -5054,9 +5098,9 @@
}
},
"@firebox/components": {
- "version": "0.1.5",
- "resolved": "https://nodepack.playbox.link/@firebox/components/-/components-0.1.5.tgz",
- "integrity": "sha512-oDGEvUD+1TTpLATUGAhkXNr/ygNaFgCEVrBe0zUP+U5Dz77rMU1KxnfkYscKBx4ZpGThxLNaOmLn5BN7ZsJUaQ==",
+ "version": "0.1.7",
+ "resolved": "https://nodepack.playbox.link/@firebox/components/-/components-0.1.7.tgz",
+ "integrity": "sha512-DR6G7JCKPwfZK5LFpUndghCsflukY7TahDV/BuaODjfyuobqdQSKC8BT/AtGNWbX8H5aA/m+5Ck3cFh4Aujfhw==",
"requires": {
"@emotion/css": "^11.11.2"
}
@@ -5150,6 +5194,11 @@
"resolved": "https://registry.npmjs.org/@types/cuid/-/cuid-1.3.1.tgz",
"integrity": "sha512-LwQOxZtpN3aEGElEicpHx1I6exi+mLBecAdLMWNRjGaYByD2CqGjSH1oVEQGeNSqgYBhLC1pIJQMDgcpxk0t8Q=="
},
+ "@types/katex": {
+ "version": "0.16.7",
+ "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz",
+ "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ=="
+ },
"@types/node": {
"version": "20.5.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz",
@@ -5665,33 +5714,33 @@
}
},
"esbuild": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz",
- "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==",
- "dev": true,
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
+ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
"requires": {
- "@esbuild/android-arm": "0.19.2",
- "@esbuild/android-arm64": "0.19.2",
- "@esbuild/android-x64": "0.19.2",
- "@esbuild/darwin-arm64": "0.19.2",
- "@esbuild/darwin-x64": "0.19.2",
- "@esbuild/freebsd-arm64": "0.19.2",
- "@esbuild/freebsd-x64": "0.19.2",
- "@esbuild/linux-arm": "0.19.2",
- "@esbuild/linux-arm64": "0.19.2",
- "@esbuild/linux-ia32": "0.19.2",
- "@esbuild/linux-loong64": "0.19.2",
- "@esbuild/linux-mips64el": "0.19.2",
- "@esbuild/linux-ppc64": "0.19.2",
- "@esbuild/linux-riscv64": "0.19.2",
- "@esbuild/linux-s390x": "0.19.2",
- "@esbuild/linux-x64": "0.19.2",
- "@esbuild/netbsd-x64": "0.19.2",
- "@esbuild/openbsd-x64": "0.19.2",
- "@esbuild/sunos-x64": "0.19.2",
- "@esbuild/win32-arm64": "0.19.2",
- "@esbuild/win32-ia32": "0.19.2",
- "@esbuild/win32-x64": "0.19.2"
+ "@esbuild/aix-ppc64": "0.19.12",
+ "@esbuild/android-arm": "0.19.12",
+ "@esbuild/android-arm64": "0.19.12",
+ "@esbuild/android-x64": "0.19.12",
+ "@esbuild/darwin-arm64": "0.19.12",
+ "@esbuild/darwin-x64": "0.19.12",
+ "@esbuild/freebsd-arm64": "0.19.12",
+ "@esbuild/freebsd-x64": "0.19.12",
+ "@esbuild/linux-arm": "0.19.12",
+ "@esbuild/linux-arm64": "0.19.12",
+ "@esbuild/linux-ia32": "0.19.12",
+ "@esbuild/linux-loong64": "0.19.12",
+ "@esbuild/linux-mips64el": "0.19.12",
+ "@esbuild/linux-ppc64": "0.19.12",
+ "@esbuild/linux-riscv64": "0.19.12",
+ "@esbuild/linux-s390x": "0.19.12",
+ "@esbuild/linux-x64": "0.19.12",
+ "@esbuild/netbsd-x64": "0.19.12",
+ "@esbuild/openbsd-x64": "0.19.12",
+ "@esbuild/sunos-x64": "0.19.12",
+ "@esbuild/win32-arm64": "0.19.12",
+ "@esbuild/win32-ia32": "0.19.12",
+ "@esbuild/win32-x64": "0.19.12"
}
},
"escape-html": {
@@ -5872,7 +5921,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"optional": true
},
"function-bind": {
@@ -5903,6 +5951,14 @@
"has-symbols": "^1.0.3"
}
},
+ "get-tsconfig": {
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
+ "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+ "requires": {
+ "resolve-pkg-maps": "^1.0.0"
+ }
+ },
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -6337,6 +6393,21 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
+ "katex": {
+ "version": "0.16.10",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
+ "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==",
+ "requires": {
+ "commander": "^8.3.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
+ }
+ }
+ },
"light-my-request": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.10.0.tgz",
@@ -7013,6 +7084,11 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
},
+ "resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="
+ },
"restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
@@ -7318,6 +7394,16 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"dev": true
},
+ "tsx": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.2.tgz",
+ "integrity": "sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==",
+ "requires": {
+ "esbuild": "~0.19.10",
+ "fsevents": "~2.3.3",
+ "get-tsconfig": "^4.7.2"
+ }
+ },
"type-fest": {
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
diff --git a/package.json b/package.json
index 45442c6..01f211c 100644
--- a/package.json
+++ b/package.json
@@ -6,15 +6,14 @@
"main": "index.js",
"scripts": {
"dev-docker": "docker compose --profile dev up -d",
- "dev-server": "echo \"starting server\" && npm run dev-ts ./src/server/index.ts",
- "dev-ts": "nodemon --require 'dotenv/config'",
- "dev-watch-client": "ts-node ./scripts/watch.ts",
+ "dev-server": "echo \"starting server\" && npm run withenv ./src/server/index.ts",
+ "dev-watch-client": "npm run withenv ./scripts/watch.ts",
"dev-migrate": "source ./.env && pg-migrations apply --directory ./src/database/migrations",
"prod-migrate": "pg-migrations apply --directory ./src/database/migrations",
- "prod-build-client": "ts-node ./scripts/build.ts",
+ "prod-build-client": "npm run withenv ./scripts/build.ts",
"prod-docker": "docker compose --profile prod up -d",
- "prod-start": "echo \"building frontend\" && npm run prod-build-client && echo \"running migrations\" && npm run prod-migrate && echo \"starting server\" && npm run prod-ts ./src/server/index.ts",
- "prod-ts": "ts-node --require 'dotenv/config'",
+ "prod-start": "echo \"building frontend\" && npm run prod-build-client && echo \"${DATABASE_URL}\" && echo \"running migrations\" && npm run prod-migrate && echo \"starting server\" && npm run withenv ./src/server/index.ts",
+ "withenv": "tsx ./scripts/run-with-env.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
@@ -30,8 +29,11 @@
"@firebox/components": "^0.1.7",
"@firebox/tsutil": "^0.1.2",
"@sinclair/typebox": "^0.31.5",
+ "@types/katex": "^0.16.7",
"dotenv": "^16.3.1",
- "fastify": "^4.22.0"
+ "fastify": "^4.22.0",
+ "katex": "^0.16.10",
+ "tsx": "^4.7.2"
},
"devDependencies": {
"@databases/pg-migrations": "^5.0.2",
diff --git a/scripts/run-with-env.ts b/scripts/run-with-env.ts
new file mode 100644
index 0000000..3e5216a
--- /dev/null
+++ b/scripts/run-with-env.ts
@@ -0,0 +1,11 @@
+import dotenv from 'dotenv';
+import * as url from 'url';
+import * as path from 'path';
+const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
+const dotenvPath = path.join(__dirname, "..", ".env");
+dotenv.config({
+ path: dotenvPath,
+});
+if (process.argv[2]) {
+ import(path.join(process.cwd(), process.argv[2]));
+}
\ No newline at end of file
diff --git a/src/client/app.tsx b/src/client/app.tsx
index 7d294f3..85e6f82 100644
--- a/src/client/app.tsx
+++ b/src/client/app.tsx
@@ -1,33 +1,27 @@
import { css } from "@emotion/css";
import { Center, Cover, Stack } from "@firebox/components";
+import { MathuscriptPlayer } from "./player/Player";
+import { Katex } from "./player/MathText";
+
+const script = String.raw`
+
+bridget (happy) "Hi, friends!"
+
+board "Given $f: \mathbb{Q} \to \mathbb{R}$ and $x \in \mathbb{Q}$, there is a unique $y \in \mathbb{N}$ such that $f(x)=y$"
+
+axelle (happy) "Wow, did you know that $a^2+b^2=c^2$?"
+
+`
const App = (props: { name: string }) => {
const {name} = props;
return (
- Welcome to a website with a certain design philosophy. Tell me how it's working out! I want to see this text wrap a few times. Hopefully this sentence will help. Welcome to a website with a certain design philosophy. Tell me how it's working out! I want to see this text wrap a few times. Hopefully this sentence will help.Hello, {name}!
- Hello, {name}!
-
7mPY#3 z1_514mW|Rhv96IYO;{hu>ny}~ZMaU9kU4Jne!_S!?WV;~HAigF@oDdz0-6?r)P@;G zjFG~Jnjk*emYZQl?_8D?h;Wek6l0F!vM9hZ3}5zFty?P zLE@kkw)iS3)p~;KC^cbHg50p) 5~-!ofA~O$;qv$(oA@qp8b`u3 z;(z(b$vY)h3f@{`DY`tgq&0H8z7V&K>3rhx@lk-p*B92;D}CQ95VcWbWQ!a9I8aL_ ztt;a=&~oDY_wRgoxNy79#M> w%SjB{);F^++Cxsl?+hldNVKYp;@uGCfuec<-` z$~@or%h#`L%Zh2D?&_wI>rM7(4Fvo(mggVeaNhCd>t9Gkigv#K sS!nbeV==+W@ zpTCf{jaKVH3dIyTpH4@$cCD2kPfu*?$`&JEzkX$&XMX(n!TEIJG)=s|zLHDfa=GB0 zllEO#rg7wSo@g}ArxV7CA}E*4r%#_`ENju6_nvjz4$!6xL5W3KPsVLyQX(dVAfQUg z%&)hjYI_H9_VtvIU6TTE7Hb_ZFVBEsnnu=j!C1%Xe8w0f3Md6ui;`t$RY^G~^QWkg z9Jiay8yL&=c00(X7$eBcxo7|YAOJ~3K~youL!~m`Zdhx$TplQ;5Q0AlC2NdUI(vS6 z7bR&@;Aa?md=LU=Sr#529~s9{05b2{Vm!#A>-Cj!9O=7`EpEKNzS0jpm&=9QvK(a4 zt| JLJeE6U-fRJ2D?$%nB1nr119RyL|Dfq8H2Y7ydKFF|`GAC8k%6O3?lwFNc zRfUpsCirlWxV4D_EOh+=)^3{s{JY{%3jU-*{&G39EGsD`Asd^aHh6q|REMCVq?xL; z@|!wg2j16Zk+p>}Qa}=dkW;GI*}?0k{kiw=PT&M3K#ehU3e;KS4h2(d0^0S10QdbM ziWnb)D4TK?f 6oy xZbYXheEaj zY^va{wQ6o3fkqcPN-eDGtb~iB*39j86*A0w#_7zmZnz+%n{}SsZRLEq& AW0=}W^nCF`+tuyO7 z({(|~1=){!FQi`IjiSi!28GH+!B&clp q?zD7dH=tyn{?P2Z_M)Y_-h`ArSv9h>GRub<1MuxP ;hZoIgY4aRw*cp`Mo3*}EvK_Q1FeyA=EH{%;_{_= zVOOw4&9%-sUSD51olnR7DCE#c+IFI3IEtjYt|MxJNY0r-^VKph^u5e=`@Fa&ob?7vX z2U>aL>}8dr_`Q8YN23vxTsB(7u@kgAIoVWAoA>9^INb@<)*9cwedByOA5I6g7FFs7 zbqq;w2)2&VX_|O`d48u_-AUNi8mH4q6o4VnXzCa+={n3Eg*ScQ9dqnGjkG&Nv{qS` z73cgxcJBRruPBu@kqBkp_?*4y!yYQv+O#;thodmR?`7^k#+1It-d3$~2%`2i%@##X z*@aHsS5_(Nxhqx!q!_N`JuRp@KPx`ojx|MtV-G81x;xg=?$=-c_x}$C;GeBOck;p- z%UgR?RaOXC)s!6C<&Hb6yC+P8C8Z5Zqm-nwM0-ah?v*1_3H+~=T;>3G)xvTIcn_<> zDi!2A8MBiXhob48D6Bsbp9WJ^1=Gx%71u#7nx8=ZpY1jEsasKnk%IiYGR4?;iW{S( zR8#OwltW?-X7 QDTMix9q10!y~$GSoi*lek!n==XYYE! z{P~SrJ;*Af@7l~B1JGKbHSOb_0DO1 8Hl5g{74cdyR#ncK-0OdC#K->ep5Phw@A5S|+wJQo0A8sva zyC~UetW?H0r}loLPJAP@cZ(q}s=-olUKANk7je$ZdpiXP nl#0s(KP^?E)Dq891+#AU+z_Zb@{5BE1+0E8F3sSLEv~E|6 zts;*3xuD@*HF&5{i`wZGVq6auk0@U&mA!&UEC}Q|5+!A<@5IjHP>~h6?A@3=8s*+1 z`R9TQ9Rt=$KM4tIC^?Gi$4eiJt>4~u4G=ZADDaXf5j9?{+sWfdt6FvBgTz3Sil4aM za8?Twny5;>Gk3)R;C+xu)<7$&X1gO}#YR)D`tHX_(|1P}7FP4jLHgAqgs=8**}+>Y z{UM83QPI(oTCnV7gT=TYDl9~GSc+JN3h^u!2G(eSfLi`o>#%A!m|_yrf`W09|67qt zY9Bg`L6q~RVVx18X15n@RjzBTrhy_PRzrx`*0h2v;q-T<{i+a2Rc(}O6@ti#(yQnq zhgNkimg`vC3(1F(eC&c27#OWKHKNSa3OZ@tChe&UW9PIA&N@*yby}%q4ZicDs8qYs zsvsM+5VsZQ9j+S*-LCf3MSAEdITHHeu>6hNCY5X<;DRV?Tg%j(u%W{Rci3%PTUi%T znTg6+iO(wYtqWFF(qQ~_kWB5UE|>YBltkPjz8f@M7h0|46eZr&ouF(&?8dm^B-li4 zW;GvMCv$!?;DgwC)~sP&)c*Tz9Ob;>gI85%k#TPwrZrLG6)jq^ji9#V#ygDhq6*tK zTnM7h+vj7~fra@h);HW)PKZ5bI>0z+*dWgzS0N&WLze0^vGCRSPwP>=inVxaG2YQ? z#(6LHOg>=4fO7&!h)NN)l{Qc_DJ@X7(4s*unb7wv^HnNst*#4@9B4uy%~$*&pT9mm zF+Dt}t!JehM~v^t^NpH{*s~gSk#L64k95IG9WlIEM)% z-YMy*D&=Kf=uRh=*H?nG =RJMqzmAEB*7icMB`hdYu zb0TgF-aBGSVqaUq1gnM$2G@1Od7-3)X$>DdZkWjPDyq^H2}6(3@of8nb-oI4GIeT4 zI;pLzY`$#Qt5QPOF)7nc6O>3T8Ph6$nj}ZmN?vBfXQ2{K6W!^8Nn&TW#f_p>v(wPi zpGFLo93#0_+A07_oM*1zzEMkIygU%MjTkpND>-bvzA`U2SvO!gfB8%>aDDnAN|l@y zD6)jm5xS1gfB7rjG*OdO=byfQ#g@V!|M{C#;x_~=*jB 50$<`mX2U;enhp&(F_1 zK0fgE>sP*g`%Y_>kH386!!M7#yu9%F^Jku(p9P3kK)%*WEt$*Z!t?X9f&+>3`66>= zs{#rb!{vNt7zdmaVB=9OEO+obgpMCSeh^dQ^QTW*2xM5-8L!pSt6D#%oY~e@EZM3Q z3w`+ImjjU5wvA68KT%3Pc3C^X@~U=~y;=sX>%!@D;`RC}%8*XL9 a-uvTPySi2E z0O5AKaz33z$(74dRWAfWVqRu``Q;ZO{_GoIRjahY`FuXW>TO%~U1bjN&Z(-~A7oE! zf(7k1azb9l!%B63-_}Ig*;+lw?^cU~pY0$>o2pm@44n?5XSef`cSS5gYkOyZb+r4o ziQ-zVOLx+*>w5k9dZ^1&%Exn;QUoL}m84d=%es m4 zbM>8&ZqsQJfVhYiq1Y()S~TdDbP(`$o@Y{&c`wFI)uI;#Zx^~w)Q;OKgv`Aa+-}); zxm;9rD@6k-OFj&$dNc@#em s5Y@ANhp-2gxfWD$cn(1^7czJ!1 z{bNdm&`~R@1{aHSu^+Aq@<$=Tg4h-cAt^-DZC*q<)bGwgRW0g!Rki8dw=O~+T5*<{ z=lLM;cW`$cM{*Sf_ij6RZ$Ui{gQ&dK)hBd;QPoy`Kalf|y%|!>2gzIS%!hI* @mj$-Lp^Q#Lx>FwW~<0DqfoA)E!%qVqCFtl^mRz#_7mq zQ42M4Du+twXq#M)`DnKd-gcY6n51CcIBvIv5M TFdUB@F63QGSyhRG z6YYw+UX{GNbHKVvvD2QnW8ARTX&Z?h@v^LkHSuntDJ}?+zLR2{t6F*PP5{;lDYC_Q z5X-v)9i4Zq7HaNx%=5fptvTkBqBe#pWkM&`i!U!y+>&x;Q9IE+rZ=_3PAOrOU@D~$ zx9ynIOBE-CtTu^~CnVP{YEiqc+o4=s^eBY=op;q!19fr`#aoJz7)9A R|X|a_d<`NZiHRek<^OUsNy-7%rXl>UTZxHT;lyYLP@He(m^!3eJ^h~ z)@i|qqiDhC{IHW`yMu&R%j+(52iey3qA;wj;@v(kNpV5R xiYD>?|hq&*vdH* zx{i+@KeBBbx9d%c54%qGna**2y}prV?u}f{DIcW$J?Xml@xFFlmsOAZc(bT4+CM_P zOYW6oo2-O!Io1)@x Tk1zA7JJ!U@ zx-gF8@jlxsM_$?83Uy0|E5uHw?w0jC(Ynu1!Y3IWFXq^PY;og!K1*SJDRiMblz{b^ zca&rXQO#Q;1u?(=`oI4APBnDczO|o-q(?Pq2`XXOwlSv~JhlE1lA#~gNbMyyx% zpIf!#cvEe>S &bskoHhkR>On|wPgovyns2JF! ;IKq>>a_-b{jT<= ^Jns9w_8LB2Q-Q9mRhElDvU#-Z&YpL-YjCdJAcf) zojcT6RT1S>HMgsicIAoow^apU^LJ{%H>*ei{nG*Z?Hj4XHsIbi_nkc}M?9N5)hC*q z1-w<;Jd7wW#Q;Oqi$a9uEXo~u(R|m=diEYwY!6#yTQ ;XACwGNYeSr )J(hYA&Hi+a9;o)2Jps7}?=YN=|B=C(b5l*9VQ?&lM#O{^%4s;XJ#<2hyB zNc0#2IY%YRgQ}%Ok=d%KR;`|cDa7BKa#qOTg3 a(JzUlvaFj zy700x?pmc*u|7OVYYZ(FQHgm^$tx8(OVOBsMb2nz b; zh#IZPnF+2Jq9tuNeaxod(uNO~xUC1s 1%HgTsay)E}OO?U|DL@drkAAp_vfj$swZ?{{019KMso?a?HCrPlD6vzj z#1%rqE%U2b!k8iiyeWGApv*&Y+lvd30vnwJO3jp{gprlJW{p>;>WJ~4lvW|Hx*mhY zc`J71&K@LUPAkp@*}ywbE88)D#%;k_gK;BNqeO2Mo2Ka^&sg@QoeZdTzTrD9&~Wa~ zvfUqctj2k2uJ0^_X_b zMm#`j{k8E;~<==6*NT4Ph9t{VqE1GZtu32Mdbbxa6QGTVG5bR+)! zh;bG_j+E<*sHfMJT9Oo1WGO(v1T8R-!k~4&60DAG@3Enm&s71 3eqpS R(o@$*Nzp{J~o zm%snc%WYwLxX@20&L2K<3XUIt{0`g7RnI0oKRnP{ k;*Z~cXBtL6eg25E zhGm%n%jLrd#$hCQ%W3Rcx5&%u3#C>*fBnkm|MB0sK0kANeU|eXTVWanV1Ic0z=ywl z;q~c>-+%x8*xx-oK2mb#<@H52!^^_ybmq(FuUxM;o}XTD&T=}PxLhv$@y8#OQkljR z(|F?L<&|Y#d3^W)&9E#hx0`@pLq7_bUn?<1US3{#czERH`Q=a{t?PCaQ2oc>{>J%q zQY$P07^c&Sb-wZZ{LEkf`fq9txCw|eow?m+x_%(1%(g|=Wdkb1(DUv4H?<~o^j+ZT zNmPuNhX (`izILhZzL;kSZZ2g|k+Q8I)*y zettfP9iwWlm?GOIR@~Dhs_@(GN^Ol%EmT(pWNNJkkiUaFI{>tw!MKx{I}o?qgYF82 zT`^G9E~;q$$vHDk)1j!`t*TQ>qHerX4u1RgjSxDqikv2BqHaA+C$_i=K~W0Z7WF6y zt4gM*XSvM>z?o7$EMP}H7wDwt2fkU+6; 7VkZn8C>Tx2n9|_snv?j#5MgCqSS-3TOB8BAs`v z>mvDPI1{`$E^JZqn4Fy|WI)%41Na|?fo)ys)vDJk!P$jys5p*(S7JY=B%rkJ&v#I9 z=m%MMX_ KG$wlIh{^qB}9f{U>pZtuU92hg7mT4n_;xgtWlz-9ANHly?Q>M zx!rDbovcBYWzoVf6s*jubbE98%4+-TRQdh-`bw|y+;^f{T-TL{2eIU=tsdvHdhZT} zNvQ%ddp(1F2R3uccb0bow3hrH*xl7pL*JwI4EWGdOO+!AY8CZ!7o^x=TRBf+L7JnG z|2bwUl4uR*4P74&qE^m-%G6SibEO0XmNO@V#;vtZEm+Ob*Kev1v60(iJP7_>A+}pq zN{;ZFmj%$SDzfN%Eg;mq=hY%r&Lupl1)`|gZ}V05i~T@rhMYDWa_mwrg)Jqf=`2Oc zDKkwY+a_ms)l%t(K&w!UV;Dwqn(4i#G*O#(eMc8O*XxWmPHY~HRb_cQNI&oVq4L_v zs7;BWd$LAI=SXd0={L{PhMOvyhj9d)6ofm^(91Cc{?4X2_`ooZhsAd(Z+3ceHt1Q& zL63KVVHmmHW@$?;UTCe7b0YLXgesa7E|-g(U6}V{HPkw=fpb=DH-|xrH^x!aN;%1S zbKa@FaXjq!;LSc)3a;IOiTe;RYN0s{y^{J$0NkA$=)F7gW!v*akYZZnq);)YMBjCy zf>+B$r?%X?g0R)b`Er)x3$+LY#L`^Jp^^(-5X<* uBxoG*6P{0E9cYcP*z=42|tdbV4E68wN^&8X59;h zypF+D&q|%9^Fe%%!ze|&dcNKkH%3)W-V;*$94(5ga;VKj2{#_|`Hs`(B6(}REBM(} z{lhrYYUAbQg?{Kod8qpwBZ->ZJaf@As+VO|XkFGAF8E{ZwYv@M=k t%Fb>?V zH?@$K`Es{%-V3v=vBz0|(`h>Jp3ntSOj?v7bI5)!buE&UcH(**Mqbr1;jpFEd450p zukU+q*V}PU=`LK_3kY_6TF$2wa?z RcB@~p^R0R$4)4z5+s_b`vkBi6gnmB@asQsa*RFIut2@Si z{TSu>jWvg}#(w^>tcl~HHr EiOq}9TuF|BLM2%dCm5)Id|@`0R0!o{{2(( zufF@xq3yFAz~X+U+7ZO}q{TtzsfA>F^Hu*R2i0MmRWb*yLVIg?yDPk^g7Io`c$~+k zYL{IZ@h6MKcjs|6+Ww9Wtnr5h=<#^wUQOrzg+(cUZl6O{qi1>T$a1Z;W{&sU$+vgy zxF6uz>Y=>a&m00d-1yzmUB^3`|616oWUF~+P5Iv5^}T9tCtZa!Yt%oV0{An@_U>zY zsM7Z5J1hc^J~Vgdklo$?(72jI1$B^NIslJ$P)mfS)&rLIrc7yfguwsH*_$=Fkz~o5 zYO5~*Vj-DTb-Vg?=2wo$^dIe~?yAa-WCRvpY@G)^WcPbmZD?_s@jFGKDHl`wC(GCKItE>{{u8s zxc@2c6cxmQ(r}vH#n|1B_i@(UlFg~8tsv=iFSfQqypjWc`hY|n0F{s;ANF;3zty`N zOjA6w;$G;uNz+_s&6%6&yeZ8MsECzSTEsaKF_osXD;MMx$)J|vqOm+sYdec@R*^Hi zAhmHKK4w@uz* +B|;m)|4}#$`-++Y>ql(s8P*x$IwzD8`QW0P=;;7Ke4x2}jb&(e+*sEaeXi8P z%uv-FbIfFoDZ-%2&p{dpsvPi$e`@B#EKV?Gbk7~^Xy20L09Cu|sg#6TN{`c2Rh(m> z6 NV`K3~IW_N-Yz)gi z^G+!!Fu<73xe+->5uUVsjzUaXu5zGr!VQlU&a{!d*VF~(=Gx7PBA S6uj`d3h)3-iIcSgjPcZG|=BW`?-pE8UD7ZW+c*GCs6CWH860rXYE6 z9&VTrHs%s&RmH6 07X!V9!TMSt-S4A^^!S$lpE#Wxept0kZs$FVLT$mjrX?- zdQ~@Jmvf^XnmO?z; gXJKEYlsf~fsmEuVVgkKL6MG;Tr>OF9q*p6Bv zO4^ZffblaFS_UKw0Y)-cP!gc&iqXz-O*V2;kY uDth_j#uj(g*4;oR0FdFt*kY9 zmz+dZnJKG`ph%_pM_c3+kzy35GV>L;+YQ4khvS^+R5cpf8ffbT_sQRza)z-3mdh2; z8Ah{<5k}kzYNgQt03ZNKL_t(&Mx(^$$S*L?V!f>x<_Y`4JPYlH?(9}d!A%p__bNp~ zX*eo5io=n)c>BJ?jU$YV<(Ac{t>gEBqNU1g$}*#e8AhaS!?xTyhBxdxuR&(9!Okbt z7?A>TNW)CD8(Ta_gngkqZWsVn5Y`nrY;?qoGvFNZzCk;Wc)Ll4G~k|&u)~b)+c)Hx z;GRz~gL3UEbfJ zpF5|!nVObKf{!QxUER*iWCB-`2a2X zcV5mmIneP`_JHsI`WGw;ro#;92jpFHQA@@9+gB)YjVq<0QbMiL`3r?{nlOxG$0RB6 z9{>LP@A&d>e}`)sQj+VXO2%)${syao>3BpH o!#N<3uOnCa+UojtMOn$((?_ZH~ z#p}xpPIBG$%bEE~>0aP0Iph8NSL6_JIiE>O$Qd#0xGpywpPo?x?3XJp-@apXMml?m z3ag54p7-|)=4rxsnBiS}&^K6?4a>e@-BxVtj?>c%QZD${KmH51g?U4-ub(ma0U-wH zs<4NM9Cys)fKRWV;5>^wKmYtQYGfz=m!E!uQVPHR_6v@OV=o*W4s(Cl|Mj 1z>WVhwUY`~{y$*X(s1;Sw%@b>nG@87>+-!?ew@a3nU1TPwK zKEGq04>%kS*mutFzy0-ZT_oD~fS-Q)g5|bg8i$VFY0nH#PtRD_m3d{auTre8`11L4 zFAQpJFbp2AuP?Y ;85^I?f zZnqnzX~Od}-HiLbV-lC?>&r8SVZh;Vz}x#9=6Qy(Rvan=tYOimIh+~}jM+Q^rAnbd zu&meX6?+JnrU`!VD2YWcialK4DuB!Rf)tY!gOrFbrK1tqpp>z0doLC(%Yr0%Snc|v z7JU8swdeEY+%k)qVFwXphH+%^T@a4W@p|vu)`iHw{`GHN1Zpn2!4L4_Q1XKpF?VOf zz%Ym_Lia|LR#@_$xw`8rxJjW5q%8QT!gXOf%sm6CA$%#E@Z9wB^3u_Y4VzV^z?(~9 z)}XxRIF9)K{d>RO4TaXuy|1sYT$|Pv%d+6hmoE>3Hr;l&<%ZLV8GOvF^ne2PZO0z= zF0#D8zayp8yYZEfHI`+iYjK{W(Tr}NhRAh}sKQo^W2gEqE|uE{S7LMC7@@UzKS%~m zlmfhlv&_Y7f@yP*wGQ|q*)>h9Yn}N;oP!GLLznwFNVcb7OmE8qV@%JsY+^&hQMP=} zh6A-$kXz!sQ3_aBUbk8+N= (+KYz^YB`MS`dY8t!US zdeOtV0ktH$+l(V7HdB085>G;rv`8k`*rPF=wV3Avk{Gt-xT=1qu>ogNP>dh5yA>64Qm{#CK+awT<(&KtiAh#m}L;# z`O|yE6eW{!>aM4Gp1TOfXCv+z*V_%w8_b8PJIClqrqHA%refVTpkZ%Ql=vk&XCKj= z)->dGlJc (NYL}(sXYV9AX|&n*dv>_EAY*fn zStHL;bf7wGaT6qSk$si~BG+B4MsVVT%&qpjgE*h(dFFqYY%?oDU;DnC*%W-eUYXnW zu>Vbxx7&rFT9L&S-q6X-O-;n6>CHjSEwygj-906F#_hj1M|Le0PfsUod+1p6ii&BT zuy1_t^E@N&JF^g%RS@-Tn6VG%x7I+>_VKotP16Kz^<9{5sAuP7e@e)yFfV)@`#f)` zZwhnwY}O#i^=;e5w4jhABBSjY4NGnGecT%nh+F0&>reN(TX$YcW0aP4mu^Eor;pP_ zN15#HB^RvA%CRV8q7em}sGsxQ+1!4Hu79pU(=>JWe{=77=cSRkc8oN{4ceTLEjQdb zE5tkf;I8()>8jy5+nU;t@a^+DXS*;z&j*Bk@B4mhye~O({MFi>hI9jJS?7{a7 ze{k8UN5M@dEi>{eg}f#lsE@)=dtFuY$LzOSBvVPUs2($6K4buX6#D-7=Z^BcyUxmk z_}9K6-(7N05C2Vn{Q3XspFiY{-LJd)Q_;D8eEZ_=YA&Xpzo+yMKir(9`r)f0K&VHD z-~-a~&H-gE6v_i$6i_uj2(m3VEYS`60fJiZSj^f`p&B2Q*>-QM`E#-F!}WjEgOxZ7 zbKj`ZgvEv%)jx>dALeUwP#V-CS(KXYyevYTR<&oTp=KC22og_n e_rD=m}G*OEqPy@v+O|+(xbu#BHt{cyB0*#8D?k*9O=}t2uP-^)s z3NhVK%1(5qJ@V&sM#&M*QjlUuHgU8uEaD6Wa;iv~c-dB9X46EuBa)l@_EAt*xv!`C zArF(|u3 {kz&g_?PF){XFTVdTGxKh{ive+PM#T5@J zEb>9o*a0aPigbopl^6m_3UqyyELmf=j}MfLQbR{zw(+18k&!tC)Wq&bihYimdU1zV z1+4|Q74%BY(oj(EuI08=f$LDIfU*N>-KCL$hq`UM5%*x2QCKpIHQLgpr(}L_>kY;b zBavc&^&Z+N#BF2#WWz{kK2X!O=Ag9TL~1}-&v#d?^TgO1hY}J>2{4{mo9(s=9(UkF zvJ{)?Qq9l?FlG`IEhH1~!gWw-XzNhYM#0?;#2vF0j(MhOqnOeh`W2l9K)0-uby~qX z-y5-7Fu6iQ;VNiLq$)~azQ}Zt*P`nZ2!K(jIYavqalbONO{v~+Q>)B(%X3#PQSj;% zQe(WqxDhoG>m0U?m{(~ID Sb58gGY%0$~azsEokRTcb_!| zA#Sk4$j_A{oVVhH<^GW4-VwDi?9he{F6?R~R;Dztc`8Udo%V5AM3m=Q%?*xd(wsOR zN<|4tvRK)9Ud3H(hJg(mxv*hJDdd`AhJnJd=I>-z=G2+~!#JR%2s@vMt-GAz=b1Z; zVn=z+0Xb%9!P#obSTst(SOYsB?$>Bp5dz)dbQ}&ahXb%DgxiAQ( 4~;Q+v3y`E9BtOd$IjT46FXEvKeaneD- zxB sR19sj+V>SFdBNxC91GeiK)>-V!ip$#>%4+!2 z5qcO<_8s1j(9;AMgS4%9|Mm^@>4fR@1Un5-wIc2tv *vono=(UqLaU0?@rcvY5!Pz#+m5&QGlt`UFaP)dh4}W4?d_3Xh z^#$7&aF}PL5OIEc!_U9|jKBQ!1*gLiAx8YyKmJAct=0JZ-~SC73YYU6N-j9eGoD|b zp|r;Bc9nwWAkMrqPNx$ErNlkKJ9egzB8IdqmU*6gE|}4V0*Huz(=_4Bm!EJto{)0t z_v )0v3wrd1Bs8t@zvD{syHKe*gMAvqY`^;LvE|)ai7>&%geHb-iL7 zJ@&A5OqsF7MxD>M{ ILhim3 z8#<2TJzFYg;y !R5@nvT+!2TW+wu=^5ASwO`Nk<=ov`O{kp&VVHBq@4x?!*H53I z06~nFj!Zm=;CeirkaO<$q={=v3Ps~E2;Ow-4!?04ct0$Qit9>el{K0ok#%yW) x^ +NAixvUA6oQ*O z(GP>XHW9C_ILKH4=2dB>dvS6Tj97D8j^iLgt0ubc!EF ^QZUUka!%Mb=5{_kz0m!-?XZ>(T5C*qwC0#P9ucz6BtgZG!`SOW zDaPI;(Td>>O=lgQ3=M^xB d9@iJ 5!p35M+z~?JGeU}h z2CTQ(!UmXzvNIxLrB0-1d2(-W?~>JLdKN7avmBG-IH1%b*hXSOjfnp(Cz2U?%w}r& ztLsMOF?&ZyBN~Pg@9*z89F7!*Qx@E?>iEbQ7)@c^fGqShr8U;u4ddW(TUS`;dxoLW zRRnJ~M+}0 6b7R=t(OgejYOA}5gTpXDX$p>qnXb&RN1!T9 z^VoAor*Z6SW_x`K97V`z=+9P=^J7B{8zt^>=RRO%TPAXmMw!<9_2`7oIm5`FW5umj zO2O%PBuZ9LyA7?}a*(Yx*tT7oefT?D4(2cnANHblCTY2U1csF^NNU9fmxi=1;%IAv zlXLFg#3N2=`yep3Ow^XU+GK>>qBkm$(RUZ0>UrDUg%_KkuK1iQW1o~3qT^eWOFM@* zp|cSTqO9*tsBEtOb>aTlFszTJsg@fYW5hTNoy6CKtt8IYCQQ=>Zl#H)3Z|3px}1rM z-ycLiI;Q8|ltB@WwXYDO?9Kk8BUkB%CO6wfQzOknJ(pMZ!kCDyy _qOl3T{|fPD`byod7+Nr)TmPkWBo z_ni%1M1cP9^8f0eh<^_mXb<1pY`l$WTjimFVX|7jUw`=hcL(5~|I<1ydZwPbV;yU0 znPLz5dXJdMn#GnP#eZ=S-rYKX6p&g)vK4ex$q&C<{UEMY(G$es@uR5rgVffA2Ce(T zQU3=Ap=tutqsvTYZ$r=h5N7w`6 es)D!%uaGp$IZH->+qJ$<=!Qqv<}VicTzD z3-N`jd ^ss&y(76xx`hc%t%*;2%5EI zF(y9b2+F}(=^xyiRY7SB)qYNLxOC656o-;H19Oi2KFJ FO4 z1_s$HMa+rTl}pQJ8H4!=6JLZxXLUUG8#s54N%2lDS}7X7g*y2 z-&zDW13C@GS!ZNDHqJ>mVSb=P*Df;Cxo0|BSBcA1>mq#}_b~A`ri?W(eGSX<{ =pn4W+VpzOe&1Sv9=#Qafc&rWhn@s@k6K?=mExnaJK z52c~Bg%dX#=aG^Fn-(lZKuU%8q%bEnh84qffc4B(Dv{XLecyN=iegq@DNvRUK0x7m zxxu>u(3bAZN^w VSf p@u2fYW zq26c`wLCr;0d|;xQn6gGu$I_av;(tZ0lSnc1&Mo@ddpz2^7>k`LyWfs^IFY9z W{|*DJ*6`zq93zIqfo^O&Aa6VIx+MdHN7`=0 z+SmbZ cmdFf~Js6I6~EMh}c58wa$8sv3FUdlBAAu2D&mu0pL5(hjEp zb2#-3-4p}PZ)c3tAfM55-KYxt?S>dO7NS#zA4l&0!vGZ$_I<KDTFiaz!US2Vr=;ZwN`&R%J#}bTyHqeEK2X|hEM u X^M@bRy?{7R|_J%Hvx3@QZ{`?uIzx)Je94_x?T&`E781d!H z7o47+aJgKtEDKJD6Fz1l6!Z42mwF;`ZK(Dcsf4e`RN(A<%+lOZ#Wze zn8pd;-@fB=y+BEBnfD&Q{PK%no#@y*pU*w#BBqFSTTyDk@pwc|nZ?lgfMr>`>&sfs zou7aCMKXdm+-_HV`~IC-w1V4-k@IsLM$Gd>?4t-*&B?}YcZF%1yA%9&TUZ2_Vgm$O z@2tZh*(vj3mh86~G49=s;5{8U4f)3c-$apT (^c^KOB$9F?B@ZF5T!YV~btk zM3#OML4Uc?xk}6@@a^k&yu7^hGjZ##|NP|(u9pj92sk~Ry4$Q3U1~#0fuEn^RmI_O zkfL9NH569cHFM75c3arBoRTy~5Zl?hl7pcA2FZYGIn=HA)C3Ml(Iuvgk~5y3o_akX zgh0pQ;ec(u^#biQ5smrn+c$A(u+Uvx~^RW zyoqzLb;2JG2VAe$2cbq#PU1u>xv=@sC=7n=h2WGjj;AB6u|5ANhQQ*tG@R86yuQ35 zi`d$lw$^n;O1bA)t?PnuoJ64Bd$vwPPlmwHN+E>e;py}w&IlIsS`m&e%h=Iq+q(85 znG#%OE(O1T{fg7^)LnZmYqE{cecwg=ZXNQa3xZbOa}ynNCMy1TJjwd7_ria3W^sQ_ z_iVoq5T!WVTxEL*6xOUoke_Q=dM%sG3X;t^2cxaL7RP=ogtz AiBzbP!wjH }ayAz1+#&zGYZM(ReGX)~=xP~;BT}nOo zunEcQy2-rEB+Y=xHfxwg+C*=tmYs%P>#G2>En9P@);P@*YUTZ{h3godOHqpa3DY$8 zXF+X^2+Susl%@&S>$#uNxtCq!?+&Gc4H=pE^j+LA?R=LaGj+$|F79eWmz}Y6gEp5B z8?KeOBnQNl5%z%7(=%4d1a3Ks+8ByMmDe%}HaA2HH2t*%Z@uq3g`Z3zx>h!fb9@kq zOW}4Dk=}oBZZ>>zy9UOZ?%HkhKpTVW?bfqdo0B-D_Vc;VWvvyqedqIoG0aAkXM}NJ ztU(BDI1VAg4?}kd7CE~e4l~D|IF6eDQ(An6h>5LHyt(0&QaHcAcY%)1HY5AXJ;U~J zICR%h5~toSIke5$)^OGh7u>G3bIjOX*0mEZtYr9wJ&5qAx>(pU=}M)WiCNo3D>fHf zm22N9R-8kzui@S~IKgyk$v{>BqR<1B+^d*UuNUS-oMhW$YOUDT4gR6QrQyJv`^soy zr@bHgdJ{sxvfO%8jdiv=;4139xkm)ywl3WpbnYUVk__{97HVgdDp=TQnh+%?x(c13 z)xv9OaYVU)rt9_E-GD`ia19#{S+ko%Gi5r+o50) %R^SL5-Nexsyp?x(egFjsTqqrueIhmQUe5YnHW=~jqX_O=Jsw4D(xEQ2aIcx z#`Lz=v2kbbnZ->+>~6<$cjY%!ddGwtV#1j(%N$K8$nT0!au#k*N2L^ z_~0D+gM(20-~fBfvHD|{UoU@47NDw-%R(U0`IUmJ#~8mhaE} zovJ=yLw^wK9-WNxr(FmBYx{YTNK5LtSmuY7yW>ya0|UEgEcsns+ (Ft20u8k7x zjuA&!3ztfFfwoqZqPyd-3Ctu*77=F>7fa*sxYc$aw3fU!-E#{mC>p`!X`=nweb5|# z?6{(^WsH_zr4aVm3%t$c*IYSOgs}$ato?rqQe&oxwmUS@+2`s}ycQuwbukzp^Cd-) zR^rI(2v`L=qk8VClkuU%(Q1)mK&=_h4|MV<)7Mm^#97z!|3I-++W|#!>`>8Q@j9g& z<0zGeQUjFsbZXTdT6=LXD=h09NJeJ2o{{&%t|rKRhh*s7*Z!LvY_*XM4J-z;Nb^hp z03ZNKL_t)Q5{0x|JA#(ke(3j<2d7 C{$#GDyHcPepBbqpyzW$bn>Nt~t`D4dfD;uI?h&=qlCI!;s}3u=j|7p=!G__so& z0$(fT0Hx^IrGdLrTrCMGf()vP*^-J6nFVw}m%=$!Mf`4SoY8`Xt%>(O7r9>#%`LJg z5erMlt2SChe{qXJK~)}j?ckYVC&gG}CFd>|XgxsN1C(L5qS8F{R;7Dxqcw(tS;`o^ zlZFK?d9tmU#IpzxcBHf+r3-2aFlK BYlT*ZNK$2aPvIn|mietU zZ5;dB!oX4(7i=yM_8b>2JLTRu(Dob2&Cso}K=c1iTN?puJm;gfPzET8BCoP6xNGB~ zB NC_hlWVX(Bk4L>kPu@r=T6Zflyf Bl@y0Gu;ICf5= z81Egos1<%1h2h^CMYJ?( Wg&hyjiiNr1aO@8)cJNTncN}Eg zBZg^a=irU5Fgs2#y~!w}Wa9R+V0q%cA<2V1=Yc{ALC%y0@E&nlP^1B-0@%deU @5$}<1XAHwcj3^Akw!zLLZs&I# zP6w``mS>u@ZZc#m(zd`qzhe1*hLz&4e>y=cjd;D%Jy K?NddoN+ike}?uW5CUK|_Lar>qAL6_LO(xY zyWALlK2Cr&*lst3edBmH2F|fr=l9>gVqF$kOQCN$pNVMt^a@iee*5)Tcx!QddBI^G zp-`m*Ge85lEejwRDrFR&pI eR4NfCkj z$#z@tuYdj%|LbpmL9M`gxgr(fwx(gix@~xWKO@|3*!B&_=U4pl>u-2{{RHC-v^DrH zg5`0Vh^hhb%g;aK<>eWNX@WD%u4}*)04RIHz6E$=F;54ingGqrsi&tWtT#IU52q6@ zmv_{Z;hn`l{`n6)ot`jFbgm5|_S|ka7F3jGW?u!2a|kiv>G=iIIN;m2?^xFjKmGI< zOcQZS=gS$^SbX{N1@G_gcz%9{R=Q*So}Qi%W5oNJIfc)!FF2k~`1-B<^ z5)Ow06co07Ln%bl4Z|Q=GBeI+e&6YM!prkBi$sdfK<@_;z9x7-Vq1lZpsEynS3vUQ z8e;FaUw?%g1`Okf_sdy|JQ?f0p;i{OoFT$F203qQBllW~tAxVUE~u_nyxb)pMQN~5 zXC0kDQ274s8=R-}ra~b~C$jZkuF=*>DOFXxo!{ZS$0o%OZ7r16L~iEDLTt&{_7&C| z91b&5ikRmK-@bo?^$x~b+*Yn-);Vk;Q0$$LY=SE6eD}`5Te_sezT@fX)N!LqTvF3? z&n!yPJ>T+aZnqoujSi1#nxQ0*$VgMbw(s!6fN`4eem+ZK$9CsIDHW3xo2GGu8?1<4 ze9n7$e#Y%~#nbZ%M!M3Qcy~FUJ9g4&O#wtY;j1_uMnQbGtiLAo4#Pl^rZ9#<%d={8 zD^LV4u%5Y2*Xxar5ko4#x-G~kxUDzlpM@3EJmGjeA_P7^ZQIrb)+X9I=W#e3q(eT* z^8($D%+bqO*R5wuB@sTFh~}-4VxeIdyt8 W|AvLk{y`sX8gN!Nk3@Kyi$YfTZ z>X=L|*=oiyx2V)iM|jvIK0zUtgp#YQJ5_$BWwT4 @+6fAL#TxgeD83%UgWuk znRyh_W)Z(fy1`1t K}d zxnBCc(pnRpEg4o@2-4I>^e(i*>2##1k`l(j3wDk!jTj |!pAeW*~<@Wy&w${E8r;kMjxm=91jV_)wsn{RLLI2>kJ&F1ed1i?Gf zeU?%pRY=4%tx2OfzrUeM)>%kIToN-oNJGWc8#yYntnXtV-&*1iD8go;xdH3Cz-T26 zBNpD1*c1Xk_bw<$YdxRE1R-3jlB_{1H5N@0fUFZlNPCpRW{6TM!p wtZa%!IAta)d&y zl11Ac->fgv)vrj>&<1 zkIu}Wzi4kx6 SWv^atl< zPEnA8bPVK_kYkcKzI$d}Tj*Q<5K8LqnLl1vbjM`r2Mqn-qBIX8ToVz@{d?pyR;3=s zU+6h`bPw4NV$c0|H3y86?~^ Xue}aeo(LsAhhO+zE-tQsMvlA&QiKwe8R80>K z*en@nB2qP14)lW{ukZJ&rDQiWZ{>TwJ7z`95ut!MMBX=TtT_B6f6oqrf;95rAVOuS z61|u^CAGQav@xi1s4|v<#=b6eof!kIY|ls{3iIyHtF2Q_oK(iPe7J%bHslm}jRX_f zIxUnkeTo=u#m&VBAG+#f-Zz_jEaCtIomSR8h#rsYo{UonK2xp_#S9`$jP>1(266iE zprpk4mBd|Hdj6imonhV3fyx*bp( C7F3#>6&9p zo7Qka0nbSeUM&ehHby?Q>>`F4XjQ}jd%q@1qj&KYIcyj^2wq17kV27HH)nT4ONI?f zD`IZeT{6fdr$uROw<}Ue#Q%vyPit=06n@>kb5joR4BEEL(KA+r)PjmE_?Rph2P;f( z5t(6nryiO6eBff {&zc z$>@8ro|C)_r!6N`weapzpe#k}bzNaJi<{byeLpch2LxC| l-mw zbY?0$&?#)`CJXDzLWXnLmm6~{otL7{CI>bvA|?wWVcX#Cz_l_}gcuO^9c~;@lHgJ0 zfi3R4h$C!Fdb}=5@=SV!tyUjmY>AL4QqbrL$wIKzeG@Js*eVz(S=&k!SGHg W*KM%#F}VT4h1lP5uV4D&25&z67M5X}YJDiMbjwxzim zEv(hVN%m~Y3hf+9%Fvdb`&v*r%oD90t6`jze8dW66;RlXsD_DRruRV3fb(#J$9{h2 zVSn^QxtByY*)+lU0W}6eRT@F0W~h{*Mvt^_u!7!TqsjmUEm@bPH=NX3pr;ekz9B4E z45t~!Ib_Ln8Ri+avY=c7b1k)GQ0l?KX@j`$n2tw4y2ep5_I1JW < d`#jxWzpx#Il(j?<@4 z7@tl+E?6#?-Vu#b@csKYx@x2Y)6EkO^Gp;@&UpU(3BUa7pU9CI+~=ng#`yp 6%1kj_=$?fo6kpTD4_fVa0d%;SXT=M$Xw(xF=g1w|zFr@#IU&KQIgk;J+2 z`sowA_xQ&@{tNpa@wb2b8(v>u@%`I3!R9$BOc;cnn78Bc*b9@V;}P%gXPnRP(9(^* z2R=xyVaM}{B4$dFMTT17Epb;bFE8R`(vn5W!qPNO*aPuJ<22#d-+t@s(z>oV%v0}J zZ@FR3z17@EKW44uLXyIKnBkrOkQ?*)^JkRIT&UCWgwyGS-+ucIA=06=EDN1rudjdt z-rl|=C*nH4e*G#qC}3L`JUu-@DTT}BjA0n@^z_ubsi8EECuTTa&SwgLPfs|^GroQQ z)}4&+-`_AzBZk4_c3Ys7!u5KQ^N5!GFk<_Nh2@#+a=GAiBo@mLUIc503Sb;Y+?E?V z%f;=#tShWBz1#Tx{k<2Wl)Oi!C>YHm1WeO}lwwCxvcZ5tz&y=JDdGF~H#|Q-6Rj#8 z_N_=UO%uL<`$o5rtgG{31}b<>a>n!16TW@>hU4*wm)BR+TJZhb_j?YM;Ln Wr1}Lx7&hcS@87yEZHzODbVPSb8KgtZCi0T9HBLvP7cQ-T}_hJSENh6 z)`~%{IRMP!E^6 *J?KLrM-B!%=p^HAJ(+SQwT(8WR_KqFn z>$>82I3T6e$8i(-wr#_FIP^8=_4T#?OqHSz9f~8Lc{LjiLtx(aAgI1Q1e}h??j$`P zj~sKiwPO_ #7t%6^a1R@_?E%Z5LOUHHHEeAorR=R}n`| zJGVE~TNS5*u~yJ(8wF=U@ &r5p@PEkaNz4zAmt3_UB_rPr02S>h(YF^ zR!H5QIS3jt%UQK_BrApCP3}GM`VCoUoxQKy>x$QxS2jNk0~=9}M_9|uR{%I1W+*|g zHg|7x=FHPfTxiO8dSY`-$)#iBm>DJcOLEPPWU=kyMzz)=%DqEX;%q#Mdq|0}qB{z2 zmxeN~nR0fA{(x_!^U?O4tkxLNo-dW4^n$nnn Gz=KWiR;1OQAO~GBGN+~OYITH2@%H_i+$S!cRu!vzb3GHX(~A!W;z`o3h=`) zO9mcY=GPmM&$$pE8)L+_Q7jKTGY4CiAm?b7%tSV?RT1m`;Bmg3*_hy*2<-Pld3)YR zWoFh s2_dVyFoHM0 _HHjl4)#h-#^B2M2eCtsL}HpiFVd9?mTiy*w+oG)2U;~)q_LP z3R$b7esC3PrTf>K8 W5wvVOuM*W8`Z%~=uQ;7f zQuo#U`l| cN~iCOoh2%aC5cR$EF3D11%%cS|> QU8Mgi2A=_ zIeyH~Q+UWWtLi~WdvG2>iStC?#kcnF$PbGyT@&n>ZvvD?PAmemIQx)!C!$D|*Z7E} zEPu?I`;fDz9`f3Vj-y-6bk|gOkbTJLGY_sGLC&=zmxx4N1nL5uy1!n(e&zosKTxi% z0>wXL@7T(oVORek;N4N9Kjh4H(NjHS`?YItSP+E~8-0Ye14_*lAO(?mM|7IIu-D#4 zeaJz36a&R^bkDn^n}EWLmn^wvcrbrN`KkH=4R*iJ_2J{x51D*Th-UF!i+!#kV43}; zs**Zw72GR5gX$r3vPf~5xI%OP> k zLttr*zTyOw&sQRpH85rn!Er~ `*Fm9txHd zt%FM4n-}O5G(e6(+<_FJ{KQPUqM(dIDp4{FJy6?Wo(EEEd|z|>y4pnenxJ*%{D!8G z1BVtyQgcOBT5=-npHcu~*x-hN0?#Ih$i|Y_hB>yVQm|-_ZX-(>yGV^20PW%Y*j=8` z2{rBVx~AihonhE?F1uhUnXA}PMo?9-6ml+53Mo*GE{QHi<3|`bQlzl#u&g-?N_66w z$Vm{x3d$W|orr?crC^*9R3f09hgO;0&5lkwAa^_}l#z!vX=JF}y^9oxnAN8dw+%%J zdes2Pe2}P>1*MXcI2a$!QB=QWJ |>jg$LGY~nW z#(=!9-TkU6oy@n(g&nENvVp*RC}R=UjYz@ygdz{{espqPp=;dO=8&cv+4zB&DY+hL zxe{MFO&ycHUeC}4bijoGxB+>&a(1T#<2~Hz1t=L|Ti_-S @Z*5I-H_HBn*zx3=9(WP_GQJk)A7RdO~$@$ z%z!vOVY^+C1ub>kBQ${hdO?j5({YA*d4`EB*pB0X!|Buux9{J- ?^u@wr%#`7eSgQNfB!pb47gpdNP#(J##kt8uq`Vt?{Ao<87XX-#sN>S zpE1lczW)9dxm0}q^osfEgynq3wyw}_#7}?us}$P!Q16_>d^q8^Uw_A!zkG&PbbT6a zu!kL62zY+|gqjO-PPpE#*rYHqOf!aY!ufo~w(Xeb5uZMP!ufm=ToG|jFE1}xmIdeY zJNA9Y=g*(JTk3p1_k6dO9oQc5o##Gyxn7W@fV6Hajt6E6{^x)GCy|)*L~-D7=!nAR z`tjajT{pbGzOYE8HHLA*<$RHXq6I2&e!pN{Hs+x{6ar6zy;V{;1%T(5XDrLY0{1-i zLUF^^wPG+$$+Z`8+GpH1;)|P`B}=iiRVmxGX+rcM1?E;vKAujP=NXp^uk)wRpIPvi zxw=RmqI2y2&(d(|Jn?Gh^96g@@z=lp4Iu>FZnyrswK$(CK6%M3oM5cM`FzGWjri%y zPj^vB=1UaO%sa V^L%ScW~|cD=C+JM;BkB){+|Lh|)`MF@LGm$mEKa7`56 z8Zw_a^+ga#^K{RH%u x#ep^b@QU)aHqKlzRwR*A*|XuRN0|qPHKj z$*dIfSl}xi7a2l;QbeMXuEFmy55jHBAZh|v%f)I1#2}8CmXF!8__SsvCWb%^uJ@S6 z5tr))6_u!2dA<#jQ)#s6NX&7Zy1++Q9|cR|ELlu_e}9LQ4EKh>+qMn+zV$4^5STH| zdqT8fb30jMIxe+2+>ABM4f39ua8fu_P$FEIj_P8kzUktea}MXryUaxvQJX`k753Zv zYC<=QY&+)p&>Iw+(9&Et?ViLK5o3_Nt}Mmr1Y?v4hk*BEALm0mC&$>G?T5ob##+Mh z$k$xA9ahd`gESoN+uF0?+8MbyGDj)MwnoO|;ULZui|gfv Un6+tBr ~#~wvt<1i z$#`rcXG2D}J?0)Oq#yoWp78|L93^+u3D$F2*S-fgF|cLc#SpqHz3pX5##w6)ZiwB6 zF-$2+wkm7u%W}gs&0VZ)PH*N*+TJK}&$_d+9^a9u&RQ(XLRYucVH=9tS|ev3CF{r_ z5jR Q?7^JqTy1?7SsFV`3?4;4cItQb*pqeAsAM3iX^@zoEa(`oF z7OOS<_qJyn<3up^J&%peGC{JA?ZduLb3h0|1VT0il+5)f%2}=58*8o9*lI^)w(~=& z(ts~ca>%nio7Gt-EfSNWHJ!rNIoz&S5qY?e>W4K~Db<@ry!X6M{w_W{YkT&d7ldj| zvFGqLXJ@-RrDJS$cgGn+r*adLtuz%(6EjQErALl`;yOuW7)HV0K16P*A0pDc^ArIC zn^BrL*BW%DX~eckzMZVA#+ncL#8Ixjk@y;|wcuVI9gIT#X${*(NLb9=rn#jxIW|$S z<@a^ =ez zYlL)nGg3fl1`O%=Q6li{|KfSM7yE3x?)$U*yw2-5kFRTXGUu@_6|QPrqY?D$JckE4 z!T+-Wpn317K%=Iq0PuV8D>ZMe#3{Z7p(J&VOjhE8J#0>|u_t=0@VjsV7V!(q7sm7L z(+mhEO5?v@AGG3t`mFhNnAz#(;^~SB_%h`T!|l=BA?&lpOz0f36j?NT8*Wd HI&Ebe|XQ$)oZ`j;fRAI@%+@~_0RMoy%!lVVna4DfzSKU}EM426b zFutHU6U^%gaW(>ne92GruzY#d0y3BO5q_U2gWr6Gg|=z$3#{v2E-a4Tm*VRNHS$a0 zEJ4|ripHf3+}0M!eAg}!>@-4%(|*jAk!OV`Mobz>pcFk)5_PPw#Z4x{<(<^!aVY&3 z671=2FubDF6f%MNS}n!1f|kz=Q&Z)08H2Dc3x*akjB`0b@B0?XK{%)}@&$h6g_qt6 zpLc>E`ThY;vyKI5FY_4P^k;x#eq;D6-0N8GJ8B*{AK9ks 1BDyIlO$xODD6Q+_7#hQ&MkA5)Yi>X$+B*pAr8}>I 5kS3*GQBw0}%(HvPZ@?~ODgZ7NO3IM7ZCu#Y`A$-u3O)g6*?aF}=APcbBHp4a(4 zLICZo8o1ZxSE{{Q_E+(m^nAhTf>V)2>o`Hdz_puMnEQ1eGv|CS%gyo6?-qP6o!D7V z%kxpnC4G><(f}}NkcP<{$G6!ufof7JNA{|tgrd+jiuSG3xopLUA90M{nFLZ{XVi^V zo!IK}(B!0~QKrH*UnOG>-ZNB^$KQW#c{Ar x~thBP#VNRWbVTut0jd+J5tEv@Y^MsQv-S*|BNlOgDY z{+V7|neWUtJWkpx2wz^G1P`+Wsz3(7-xlPuqe=Df)`$NfNtz^^N-3;`>pzm?m9tUE zSjl|c9zl%)5-n5X3M~0>lSS!~NLY{RGS#x0_Yi(1kq7A#2(VEgx0@niR6rW9#~WIs zuVUaUMe^R}z8 pGGAw~Oh)jLh=3hnAy<#&$X zWGc hV-BQDap%%!0Uon#ysEH8MKu_ zF>hMj!X7SC>#YP{pd^o8@_7!Z>dW4gqElIE(?PUgoqh{a)D;Cmb+qYy{kMxA9*(#O zu?IzxNIDQ0OF;vINwR1gmLCh61}*}3(d8=dwvSHY+h8lSH|#j|l1OQpu>NG3&~o^a z{Ao(ziId3(TqO5iYA&iU**e;MqWv0B4@by6%{=2KUIaevQ5(En+YIcMFD!5iAzN{- z{ci(B4AX9i9;_0?4ARwk@MS7bVE#I}L6z8R4P86edzc8|Hmd!pt*w1`aTy5_M17UY z)z1fWO?h#I1_t9`y3b)@DsV~^u+7y08{YF~Y}ytcph_r5viZ_7((L6wh9+lZkPG+p zUo8mX;AkO9l46)q@$Y-3_);kLgkON^!oL$0s_9LQ<_R7m3Q$w~pANx{qsc7>WhBH8 zdpznb+y&nzzmb%bEI8`ORzP+$cO6`-1+gv-h|;0LgrBj`s6RhkriuHT7NDXJm}GK` z?=9k!5y1I?+_(M_Ti=ByJ-rU!C9TjC81$J}oG-WVXqD^xy^W=Yo2jq(YgSA~Uld&i zO$rW*<`ID+Bob*m(#3mgy}&(da7>G3RGPKEb E1RFdAPOtfV=5C`pN z@&C~Ly70QtFPFKi)b}~#n`;??A7r6f8nuqjX6AL|#ExCnx&JmEIz&ZAj2z3MUa0KO zP7f-mHp?abO$c{{;CDro=J<-oQDiZbHj0@2X%odq9f#MR``^Wx8MCMKkP}#=kjl z!H-s==0GZgDIhi?lox5D_VmX7%w%mPisn~k)8$>+ZNsOX#O8dQZxP7Y$L$x>T1kXP z(#%A8u36-=fV;B(6aV5hzS(QMFWN F`D|dJM*??w@+JQtC~XlGXUtwvo1zh{q>j5!j`b+Pk_3ZC*;eD;7*I%YOU;y zl1r@!mH%KI17roCSLu2HiL(Y6>ugaO$Gj3$;2P&o_?g9`^*GXc{maai|33+Dvuhrl zcQqS8Ezjd5EdeIS?B$x~yTE7J&4BZsez%f+4e{l9v-TPm@0;~-s7$YiSr%szuAVjs zy|(fuM}J7N&MBKr;1%~(eAzW>dNI+l=A)5F{-UY(^M7C7cs^xpLAnDVA~U`iS)zUH z2K`pJHokioXDevGgz=B2LH=Q%1N-j1D=9w+lybgvg*R0*;Uwr?H4<71zqA`URg<&a z=eKgjV?x$f`y@cb?4G{k`A@o+LQaoLcR}B~U$rAf<4FKS+BalTX9~L_C8{lg%s--t z3j({~R|AQ3EG|Q;i4q*6*<6_`&PtK-C>E%Lj2o<;Rz?%ti>t@kY<~I$qZGiq%th7n zalSsh^9T?8B>ai9Vjo?{p}?xY_A3A7!t}igla+&agd?Pr5L%HsVq;+sO8~2+;puw2 zkEq6K6SFegXh6qReKd9dqjMrl!NV=fru{0c^}Y)t60MVI@P? pNzYe55QSTI^gf2O>{hSOnL`@b(DnFj zIJtKT5=xo#-Y00)?I9tgzoUaiYVT>hlfmaXamJ$-%Uv>`13p%h#%AWb+tr0dAzm4T||8^=k zA^xFGr6^4hERs1Am-3fUZ;&sca-UbbkslRbotK3$KM-H?`^CRk^JR$Q=@}=yZIDoH zT&$kD@~>EXiXEj-OW{1{hTbFYZO-pT=-8Yr0jt;G&!!Ithh`7ESPJ*Mca@lS;}^e4 z=?B6h>V3XF8V^I6Zk|Jyb9QFe8-8!}|Fdy=q`c?gl_WCoh4H?w&?LR*uG!YoAR^uF zcAfe6pX8~}#((=2+_&v^&^lwG)D;2!_1GLlgZOxr&v)WD7ZbuK$E0EJ81gRi{ZsF= z-4JUZE$7_Uf6bS_;1djJ{!0QAhW4`L8*49SlW6_(+lT(T&+Fg4pS4-uHVWK)n~_bE zNeq~|?hYaO*`Txo*G6}oX7BQ`P7l0A9 ISUf-Q%d~;qTAEs?~J&`UPtuD~mK4Z^{NkX!B zY!H%BoLFhRagE^&<{-%4@II9lvk@$}!^|Wz1FV#lK9~!Bw|LJ|@^AvoVNMM%iJ)LY zGGRY8GeiMcUpw*cP&2ENiPuwBpXto~IhC3)7iNs%!71d67& Qn!23nBpl&{n+I4a^11zoTjv+w>oE#LCzG?c;E$ebz{EsTtA+4Tyzffn zC@ScqNdD#+OwTnD;bWFcxHCk%O{GdT(PY@f#rh2wvWeTz9jVaz-qHP!={~x> npE7e P(gVjvG+s3A znG=r?E_BIG w*()xV{ qZ&wIL{OW%* zV#@!cR6^entPQyGWe|4p3TM vxMK1|)mhMz1>CpEq*r}oBP#4W+=TVIS7 zA_>G-D{1dA@X8rBRtiMgXN5ykZR9#73SP=*W&4NwkX-?nx(omK|7Q;F5ALl0?hnJ% zK3w+d>lkp!{yHHzAdC+!@51MJ8k1v>PV4zDkjX|&3t^6USA(|HtP16*uZa*!5T{zG zRRZP`BC*N3GF+rORj`fc2_z=?cfC?5ts5;>D3JUgVNN$8LxgBf!7cIGi DWitFZI#YjGQ{8G_= Ip6Dn=*Yg;8^gzAw@wu<71}H5x z;Jtjd=WX4pIJA(#Hbf!7BZNpY0%dvvY0m%cQM$$gEnq8WHwGXVDwJ3bfB>Q-*`+&3 zus|SCa?88N<{%*ObKn3_lVX%;LAcmWT$vhuuzoP?N#>b020^sh^AuU;=GAWAuzA86 z+;A4c`|8_KlK8xZpDt~(N(tl~HCuUnBcW`Vhtg~C|Hmy353~!&_@CZyukL^PkqBq# z#oZmK=jh_%3C)(9-~od-LrB>_l)a#+{pJA!zzs7-z5U UTv-xoAQ8&6IJrU zJ=or~BIH5q1u-~l_b)fJFiKvt`l_*yU-=5fhIj%OVTWEcM~?rCKetqEE4yA_L~j$u z;+>4NZdI^O73SyEKi4v_TShHp>UucDSlMY5mBr(v>1_!ho%m(bP;>P6H$N+-<(05) z>!xA l)}Y5XRBn{zObu6)n@9#)5^}e#+}dkB_Kd+=I*a^o~~e= z`MNBDKC)u<@AfuY#w2Dd7xrqRht+g+{?CzuBeRk3Bk`3u0 lDM^#^ zJ1Thptw&oI1f-^hCDB4}3Ep}o>5xkR0%Cep1_On?aIqbND55#BP*%)4AFv3BRXvWV zL~}Z(kbAx%o+#3$xah>(qJH@(ZJlrTA7Kd<;4ij%8DvB_5i0^3yF5t=H=`lgjZZ&1 zT#5SAt+MLB2p&arIDZ(S;{q>$Mnd4ZLV#N-Es{+(DkMbHkTb9ONE}2#q_C3|XmQcY zvc(71a(lN+pOG;{#F($b-j@~j22iXrHYD-6K@X7D;*Dl{wWc2*AwqDJUB8LnmgETH zU-pS0WkA}?4VtDzDFqM{DDaq{MMn^3axf~%addDFan82C$0@#&Bq<8YE)W@3sbTE% z>CwaD8gZ_2CmA<4TL#R`eB6ds2d+VgMWpN1y(ewur?rcAKFKb8qMT|yYThAKAI}^~ z4OBfQ%n~aX@+w^Nawo%iw6rPrREw+k6~eYm7wW>kT`>ePFoxoGy5dO;;N}C (}Xic4(miUQ1Dvu(eJ~aZMP>27jNOwxHeej7CdW&CeF`4QU!JC1(+AC-NCIe=; z7vCN^ 0kC=FW+sPGV>8Z1EKtVpAK( zp+YNX1o?_$GdsXI5d&NjMzb|Ny<*?vJBcq)Pb;D?*~skYWlw#@Rbjup !n*rgV>Bvbm8b9-;vN>1at^nvs2fzBujBqY}7~X9B!SL5%2Vti0{Xpl8KY6X05T# z+lHxM`d{dW!16vmgB0fqevu;haq(ZYvAq0@e@sg%E3s=-7PwKvfeY7PewlwDV`TB4 zan{gKAiBMf)F-jifXH#pk $<#;xjJ{GLOdUS(IHfwR30EM|n5HA?%P9U>MD z!4=hTY16MZcz%{?*G#1*xgWQ>!An%BO5}0@RIZ%yma&*j8?i5xd|K<;;nt 25XGOqR)WU|AhR0?8wjc?-~ro}%9xh9G z!af{l>xp29?itMe-WmD+>WwL%6AwZRw0tx~6*tAD=zoBk(HfZ6%AR==>`{Cx_{m6M zZHy@B>G9X3(Z!YI%)BK8l?;e%o(Sp_n;9^_->oJVEs^XE84W=tO_4MvC1COP?jqH1 z4m-GojlCE08lqj8mQphRh{{>~Y?Ck)BK8@+h@=)*a3ckwpL7R2JZHaXdrx~0JFn(M z_a*Tr#+Al1-u+r`S4-rPeth^>3joM#-;tNz3vRG2&+M#gw*I-uX07ZNJI`6bq1; AcPerEY%{IdGAb`q?lZ|{Swh#aa3oycD6Y4w#*)jiUGWtGk?seFDBw(D61 ziJl`clOTo?TknmrdY;LqIhKpElwcL?WX|W;CDYV3?1#>|LS)1!TcN|Xf&WZtHr9%> zhd&InPftI6H?h+X2uca|iLH`oJt#*@quk?=$-d&LF4hVQ=FNY36;BG-#_ej~?-D8{ zTFQE7xYEd}{>qj_&~b2YS~K`Ilyq4BJtG^amR&0-`7&MK6o-KTmOoOdw}rYkA$Eqy z8pt?@o_A45wXl3!L+qejUnG}ejjHN|oVuSi3tECeIrwKu-`yA{9kEBETcC6&$)&mj z)T-*9hgF5xwh3{Y+PDiDu@D07ILBTjfqP2AO*nDXTh+%?1%l&X? !QQa!*GwwH$V+wQ6?L;lMI^)$qvo+WxOJj)2%7dHEyIo4 z **RDiPQjZS0z7XRJGF|2A6Dnnx1C=za7 z4`VhMuh-Nj7&iwhniiMztrrEb?|tKF{pKTANHK1OXCMa{OLVL7^x#Rq$3cD|ZuY5g zGW=7)9YvF<1^_7nhbho^y88Sv;!5CXzl(+d6DCdwu{xN}sZCju%%4|3GzYa1L`#0L zM>xaO8g8x4O3nlM^UWy=hVmteg>bv+Bq3)rL1p9Y$UThm7KpKl-NH1rsn-Sv0rw1t z0$_Og*oEZlZn!(p-*5RpxeB+ap&jM~8L*bz+l(I#(N{dI2%rs}NBzh^aIc7M+6?9R zZ#|PQCU50S_tBScAg!i2J5<&+_HsXF&4-R|B;oZNbB@4|Iq@~kIz~R5AUh>?idDk& zMX_u?wE;n0_hR9Ar@^*q^B1<(+}kdi5^EyX07#P!C7a2Dya?Td#9w%PeCIA`K?gn% zjC*1Rp(wn6;Q$>JoT*Pj9kkk7k^wh&f~ESsGU~6$%G?^j#wKS4*#stJ-g4e8bRu;o zd4hO0SnRC*!O5h?r!CX V(VT_BUFj6yJM3x7)qbK4z zDd#16!@DI+HQgH)T|92wGOBD`6=j?+V(2~nf*b# CG4%L97En_2oR0Pn*TA zX50&4pk}7DG{2 Pcww1p?f1GJcYS4i!3gOCTnJ%$ +>_M_M0~c4+L+LSuPV1@}?9c1@y1l zmTXOpg*Ons;)ZM!Qz*1wlD8FiseT8Q1g{!FXb&PbzwmgzA?FnIP9np>+AAX!JD|vM zsu@9rth>xPXOVxt|BG42R|gVD(DXu>{2yp7EkE*W`}lP_DZADl{T;U;Bk?=T*J2ZP z`wC+X7(812;5RJCfjW2f{>+OzK;`)vSaiOr4#xhmr2A@(zkohEUPm%l8%T45q8Ac9 zT#V}47U=Wo=301Q%UpUmcb9v(zgvd+HbeVS#@~zW*bI7^6d}L8k9@|QX0Bf!-IL3l z>n}yFEmY1>)7z@IHxs{ |{PDL}jEjE~ BY zVniGM$#T#zxfeMSQsXsTzv`u%Oz0MoD>d^mZ_ZDuP^Ddm%S6@724%h&2=qn^qfse= zdP&mBFv>66TXO^2|LlHZ%V$=C#|d~XiODOC#Ev}t9^SlFP|``&nctcS%7V7&RD0 zdO>PN?6ZjUYg`*|HHUKvpw>W5<_=h0COkT|5!K7*Lg<$UcAxt#{0ia1NeHB(yykM3 zs{f(xsxQP*=^W*vUOL;;cF{v-`QDRV HGRnEjDy}an~jDbM@TpR z($Ld3LW2rg>yrs|Y;;6ZbWP+EHP&&@M9TAWif1&w`SX|*cU8=S!9@ !m2p#nfB?jLLt9BROv~N715k4;PJ(vOqh;hBfoylS zpHqiIzsN8&P`8|9cly+C(_HsC8V&18b`){aCMTD HrAFMx8%7zLu6FW Ps(Q*P6~bpFzP4HJe2J(Qo8RHj9_@*zQY&6 zMmb~p#ln!1k~!x8&jK*KZK|1j^<~+3d5_A-@{Q5kavcSg?OU~%4d4N%J_Dgv`GVk! z= K(y_;9%DRg^(@QG@mIRPdo-vxtRrZud7TTs1?Grx|geAyfkON9Iu z(g9OvU61QjcL6=l{!s5ee;PUOI7<0dns2H~MiuUpG<$}`?IsDG>`e>$-l%ElS0drc zWn;OK+~Ov%p*;Wolxrx`e9wX8S2>42r&_cR#~LtvAZfxaEGRjXHaepIaRIek7v(+> zX14!(%cM5B@vYJQJ;fwD^g$(3vRy_qm&+rAI=3?Lqqc}_c7{!?&hZe7oZuI;Th`>C zqB%kmjkBm*My(y}5>npIE$>rRwH%f#IQ?m;eJ1pzlXlPI^?YpfI$a`g`aT4uaheh$ z;xZESgcxw58+g_T!grCd$@mu6BRVaZDCqnn;Dt~E1}J+WAL{#`m_Sl}O E*~d0Pl eBkge_{3W~ z1JwQdD1qlRZvHPBT-8CsC`{p;RYm>Ybrhb8#iNv$jZe 3uF!9SN3lp$UtKcEe8*?!Kvg-N2TbZ!N-{zK_n{f~`;+w!ZVj`0vM>4N7 zn6tt_dTngQdai8dGbF=Qi6~Q|;nGq#9Z7QcuuksvK9JW04aBKKTH$80>1cS_U(O)( zm*Glf?nhZoCI0qn7Fmz1gx$qmrshmCrPyb&VxqsigZu?n4jI&O73`RdI!2I&Q+Ic3 zG)rn}yWg56Ja$yYnabj_PJs6%yi{Y+N}K}ioCDtJmwaoDIfJ@FZ-o@jV_AT)^>reE zo?)-o>||~K_P;^E<4ow}Vx_9FejxDThZ}1XN2d{P7sRh9rJX7p(kVyodRC1*qK4+R z_DV|oY$mZVX?yFk&VJYtdU4Yp-HV+|@|47nuHIWIwH7H+(c~$zOyRoJ@tHpaoP9bO zkS~zqUZnb4=(wkZ1)oj$;@93sD=o<1IXYx-wA%}bT7NQ4D^+ArVz;0e<&=LXBjiNT zVkl|MLPh`W-c*Kswqv_JC+9VA@CRfnhxen9(|CKU?4PFga&?DkGsPjjGZ{aXIIOxb zCeovsodj?2y~)9o**K_awqB=0E{@9^hea)`Y~ME?K{DodRY)4w$WaUFcA#;@tdbC| zw<0|=hk1VHn_?^HDQKhkuIoJVfgER`aW=#bPpsZgZl9ap@qL?;L(R9_StYq&{;qVh zNmsAO?d`b%|J3223b~rtNOK|LgH2b9F|To6Wd;Q=YgNia@H|Y;(io@s26Wq?JlG<^ z&?o_)zvfwxM`xR{RXp6!mw*u2CSsg~0hy=Zh$Ewft^ EwrM?DH{-q!F0(M|YPWC4e{Z3+WzgX`SI@M%ZJE;Me zJK;(Ps!)*}HO~IsH5>A)8b1F<47u<;$!nB2%P@OOU19)y&A&ur;VRX{+Jp!$PHel7 zYCqZ;7-04@9&ln;G&?NmmtPRi9RSy(O6Fy-aYdw8SDysjJi0)KJ7M^hD}ye(BN^3j zB4uR)u$F5niZ*X)@Pw|#vaXGR^)Ry;AKPB+CHGZgBQ9 sp^r)pNN=A^Z z`Z=6QaUiYm#li{r#xq5SQap1dTDRuKZ-Oz(Nnl~gi_KR44Xa$`9Wf`|1^-wC7Av~A zlT^w+!63fANFI<|Cu+lR!Cz;icnCyVM1ipW{c1u~Hr8Yi-H=JmoCt|Ma@K}cT0be= z*F?vfiVH77siM_P+GV2G$zf w;1NHc5Ngg$4NH~7%F^-k!^dapkp;>t$t4Fx{HTRdY~=qY%4p~aoVrGz{t!(9 z^;D#g-6m%O#{sI0MPa}J(iC+;Mc>iaCbjh-%JL&@BkJR5+URw(qsFb1 7?!Xd>?t+8gR(5yEc8b2U@QmL ;E7{M^ATwO3Xwcd WVmNmgmn{CadflDX7}X{UlU=k>pe(2NVO zGvXrbgY>suaxs5?b3WrH^W6|2-FtQ{7VewD@JtL|B(CWBY jc4b^`2+ptTmWtR zV;jFZJR*`Bftx6x^TL75t@~ET3~_SZ9FP8+Lizn+Jhj`3^HKn9vSC#&9_rc5v*8Z< zx*z#`@2kAvje02FUg-_Lx(|goSDxWyW7E@@9}>8%k|Bf}fhvilpu Uc=i`)ClCw=z-UmUnxRGZl2kvBtU-uUv0MME-Qa z7wO==6gDwK(w}@v?jm< G==6_|&9Sh917F^*~PAf@F!-bv#g9B>+FaSPOZ z)#)>aPh+c$P*u&{&x-FbrvdzPT5SR5&+I;t?b4Eub{8N2SWVnd84>*{hvT1Q#(R_c zo!9mtgnKgH`k+uY5MFi>_~py6by)a27DaM0FOsvUz4h;r;?|LDZ_`Of=tc7h{ox|V z20G{P?MDQ_V%4UVntfDLmkuh@ViVd4`}&S*vTHH2ZK=!#-XB>ZEDxfv#%uqsuLkxp zK<(KE>pKTA(z6Fe|HH6}|9Qe`GIw>aN96s&ie?x$_UJp#^)7|;efOl;MYl;6v+;RR z#Cn_F3NP#OeOU**iw%jI?f({A+BP{+6{Ppik+WHC;cn*h#tet8DY>*QjNhyu6(ZQh zpj1{%;r-riv8q<>Ej}6QPJ4LFGiOt_g}SFT3Tx{FUSZ9tBXuWiOC8-3VGVSQH98D- z^;pih66ObOMTLGNU0@We0Z;9NrOB<{%uZ~7rrZ89I>eAjNYceTy5Bfu$e#X5%NDPz zd_T44NH+y*=1h`mM1!jKR~98d9_<2B2Z=e8)IHX=9F4hUPJuC=`7vviCqd>&-pTU| z5~pmxSW%PNb?Y~8oN5H-#=5&oo4fyw?hnL7sRQwYJ-5m@+zzrQta*IkTGg3OWdf2P zn%?AY88d+*qt*xGX%8au%VCirJ77syo`l 7x<)!iENnNksa~KmR#`0ZiDUr#DyVHEI-Q9n!pPD$2#ey|EmQ{O1 zb@-Qo$)2Ncbo8}2nGQQr=tt)-BV*&8?pV9Fb$3x0o%#=XY}Ug1Zln)l3cA@EPPK)% zZykesFh9UHrl$3MVLWyY>{*~b2r7gM6 1@0>Av8mj;_ZE*m;YPFKvm a2C@h%?wrVsLJ% zz0v9q`{FHUC|AA4TJ2^U3=q33KVqjwHz0bY!;!2 LR=BJvPmzrvg{mI^bEn|uM zcRdqh8?hZ(igYKk>WCGSl!wXGVW@CtSld{8#8I88xOMCX-GRIDz{vyxxX>PAzSe)* zdaV0z{JC&9D{|fI(nshW$d2~E;K>#eB2~e)rq4cKVmNpLPG!2|(x1P76j`}Er4I+V zlR6>VocP+ml)lO>-j{2{>T_qW8lJqiD`B#oJC`z66{yDwu4_Kzq%xL+(3-8DCx(Rv zoSurcoBedG;_7AlZ}x0c>aiTz)UF30uTg?%a5H4gq^A59%+_5`WcJ#@5f}Af5=`Lx zIgHN1MCI?nO7`^>Q}${c{{wjfH|Bu>&k6@`4eOXhk*GPn$ID^UZ`BOA1M31k#?HjM zHfEGxJK~zH3aj@~|EWdN%n^Sqi^)a|$pXs3t^~ 5$R#n6OaU5tE5@1{*p!miCfNv^vD-EwZ8Z?pW+u z-ek?3;G_aPm1!( se4Ev1QwnGXaDp=rF_qU>o>5fi)foR z8vnBY;9tj1iBP