From f4e7dfa123d2ac9c47b4ceb39a6df3aa39b6c2fb Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Wed, 4 Oct 2023 01:36:52 +0100 Subject: [PATCH 001/173] api-v1: Adds initial empty files --- package-lock.json | 39 +++-------------------------- src/server/routes/api/v1/account.ts | 0 src/server/routes/api/v1/admin.ts | 0 src/server/routes/api/v1/file.ts | 0 src/server/routes/api/v1/public.ts | 0 5 files changed, 3 insertions(+), 36 deletions(-) create mode 100644 src/server/routes/api/v1/account.ts create mode 100644 src/server/routes/api/v1/admin.ts create mode 100644 src/server/routes/api/v1/file.ts create mode 100644 src/server/routes/api/v1/public.ts diff --git a/package-lock.json b/package-lock.json index 455e4c3..01020d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,14 @@ { "name": "monofile", - "version": "1.3.0-beta", + "version": "1.4.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "monofile", - "version": "1.3.0-beta", + "version": "1.4.0-dev", "license": "Unlicense", "dependencies": { - "@fontsource/fira-code": "^5.0.8", - "@fontsource/inconsolata": "^5.0.8", - "@fontsource/source-sans-pro": "^5.0.8", "@types/body-parser": "^1.19.2", "@types/express": "^4.17.14", "@types/multer": "^1.4.7", @@ -37,7 +34,7 @@ "svelte": "^3.55.1" }, "engines": { - "node": ">=v18" + "node": ">=v16.11" } }, "node_modules/@discordjs/builders": { @@ -90,21 +87,6 @@ "node": ">=16.9.0" } }, - "node_modules/@fontsource/fira-code": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@fontsource/fira-code/-/fira-code-5.0.8.tgz", - "integrity": "sha512-kp/tJUVnjaZeLHENMBFTTSgP2B7+/rIboeofuMfoGB40s2U0DKXNqQcOqIF5PtDhJ5QTG1LcviYXMnc1yG6oYQ==" - }, - "node_modules/@fontsource/inconsolata": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.0.8.tgz", - "integrity": "sha512-KpBU6q1yCovfycaFprVEauh8U5RsWty3konFfUukyRRxZBK4Sf73XmGQc8iJ4CPrOP4dplGfdX2kjbRgdymajA==" - }, - "node_modules/@fontsource/source-sans-pro": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@fontsource/source-sans-pro/-/source-sans-pro-5.0.8.tgz", - "integrity": "sha512-5U2UvIYRkCMozZ388gCE73PEpa2MFgN/0t9O4a1FF7bGT/MIneQWSL1XpWZ8iMVYdh6ntxRf3iFA6slCIuFgkg==" - }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", @@ -1750,21 +1732,6 @@ "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" }, - "@fontsource/fira-code": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@fontsource/fira-code/-/fira-code-5.0.8.tgz", - "integrity": "sha512-kp/tJUVnjaZeLHENMBFTTSgP2B7+/rIboeofuMfoGB40s2U0DKXNqQcOqIF5PtDhJ5QTG1LcviYXMnc1yG6oYQ==" - }, - "@fontsource/inconsolata": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.0.8.tgz", - "integrity": "sha512-KpBU6q1yCovfycaFprVEauh8U5RsWty3konFfUukyRRxZBK4Sf73XmGQc8iJ4CPrOP4dplGfdX2kjbRgdymajA==" - }, - "@fontsource/source-sans-pro": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@fontsource/source-sans-pro/-/source-sans-pro-5.0.8.tgz", - "integrity": "sha512-5U2UvIYRkCMozZ388gCE73PEpa2MFgN/0t9O4a1FF7bGT/MIneQWSL1XpWZ8iMVYdh6ntxRf3iFA6slCIuFgkg==" - }, "@rollup/plugin-node-resolve": { "version": "15.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/server/routes/api/v1/file.ts b/src/server/routes/api/v1/file.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/server/routes/api/v1/public.ts b/src/server/routes/api/v1/public.ts new file mode 100644 index 0000000..e69de29 From 70591c78e9a99a6816b0ca3f360442b0e4857d35 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 3 Oct 2023 20:09:49 -0700 Subject: [PATCH 002/173] api-v1: apihandler --- config.json | 2 +- src/server/index.ts | 25 +- src/server/routes/adminRoutes.ts | 235 -------------- src/server/routes/api/v1/account.ts | 13 + src/server/routes/api/v1/admin.ts | 8 + src/server/routes/api/v1/file.ts | 8 + src/server/routes/api/v1/public.ts | 8 + src/server/routes/authRoutes.ts | 465 ---------------------------- src/server/routes/fileApiRoutes.ts | 97 ------ src/server/routes/primaryApi.ts | 181 ----------- 10 files changed, 45 insertions(+), 997 deletions(-) delete mode 100644 src/server/routes/adminRoutes.ts delete mode 100644 src/server/routes/authRoutes.ts delete mode 100644 src/server/routes/fileApiRoutes.ts delete mode 100644 src/server/routes/primaryApi.ts diff --git a/config.json b/config.json index 985642f..f2e8469 100644 --- a/config.json +++ b/config.json @@ -27,5 +27,5 @@ }, "trustProxy": true, - "forceSSL": true + "forceSSL": false } \ No newline at end of file diff --git a/src/server/index.ts b/src/server/index.ts index 68819e6..6baf6c6 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -8,13 +8,10 @@ import ServeError from "./lib/errors" import Files from "./lib/files" import * as auth from "./lib/auth" import * as Accounts from "./lib/accounts" - -import * as authRoutes from "./routes/authRoutes"; -import * as fileApiRoutes from "./routes/fileApiRoutes"; -import * as adminRoutes from "./routes/adminRoutes"; -import * as primaryApi from "./routes/primaryApi"; import { getAccount } from "./lib/middleware"; +import APIRouter from "./routes/api" + require("dotenv").config() let pkg = require(`${process.cwd()}/package.json`) @@ -46,19 +43,12 @@ app.get("/server",(req,res) => { })) }) -app - .use("/auth",authRoutes.authRoutes) - .use("/admin",adminRoutes.adminRoutes) - .use("/files", fileApiRoutes.fileApiRoutes) - .use(primaryApi.primaryApi) // funcs // init data if (!fs.existsSync(__dirname+"/../.data/")) fs.mkdirSync(__dirname+"/../.data/") - - // discord let client = new Client({intents:[ @@ -68,12 +58,11 @@ let client = new Client({intents:[ let files = new Files(client,config) -authRoutes.setFilesObj(files) -adminRoutes.setFilesObj(files) -fileApiRoutes.setFilesObj(files) -primaryApi.setFilesObj(files) - -// routes (could probably make these use routers) +let apiRouter = new APIRouter(files) +apiRouter.loadAPIMethods().then(() => { + app.use(apiRouter.root) + console.log("API OK!") +}) // index, clone diff --git a/src/server/routes/adminRoutes.ts b/src/server/routes/adminRoutes.ts deleted file mode 100644 index 510eec2..0000000 --- a/src/server/routes/adminRoutes.ts +++ /dev/null @@ -1,235 +0,0 @@ -import bodyParser from "body-parser"; -import { Router } from "express"; -import * as Accounts from "../lib/accounts"; -import * as auth from "../lib/auth"; -import bytes from "bytes" -import {writeFile} from "fs"; -import { sendMail } from "../lib/mail"; -import { getAccount, requiresAccount, requiresAdmin, requiresPermissions } from "../lib/middleware" - -import ServeError from "../lib/errors"; -import Files from "../lib/files"; - -let parser = bodyParser.json({ - type: ["text/plain","application/json"] -}) - -export let adminRoutes = Router(); -adminRoutes - .use(getAccount) - .use(requiresAccount) - .use(requiresAdmin) - .use(requiresPermissions("admin")) -let files:Files - -export function setFilesObj(newFiles:Files) { - files = newFiles -} - -let config = require(`${process.cwd()}/config.json`) - -adminRoutes.post("/reset", parser, (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.target !== "string" || typeof req.body.password !== "string") { - res.status(404) - res.send() - return - } - - let targetAccount = Accounts.getFromUsername(req.body.target) - if (!targetAccount) { - res.status(404) - res.send() - return - } - - Accounts.password.set ( targetAccount.id, req.body.password ) - auth.AuthTokens.filter(e => e.account == targetAccount?.id).forEach((v) => { - auth.invalidate(v.token) - }) - - if (targetAccount.email) { - sendMail(targetAccount.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that an administrator, ${acc.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { - res.send("OK") - }).catch((err) => {}) - } - - - res.send() - -}) - -adminRoutes.post("/elevate", parser, (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.target !== "string") { - res.status(404) - res.send() - return - } - - let targetAccount = Accounts.getFromUsername(req.body.target) - if (!targetAccount) { - res.status(404) - res.send() - return - } - - targetAccount.admin = true; - Accounts.save() - res.send() - -}) - -adminRoutes.post("/delete", parser, (req,res) => { - - if (typeof req.body.target !== "string") { - res.status(404) - res.send() - return - } - - let targetFile = files.getFilePointer(req.body.target) - - if (!targetFile) { - res.status(404) - res.send() - return - } - - files.unlink(req.body.target).then(() => { - res.status(200) - }).catch(() => { - res.status(500) - }).finally(() => res.send()) - -}) - -adminRoutes.post("/delete_account", parser, async (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.target !== "string") { - res.status(404) - res.send() - return - } - - let targetAccount = Accounts.getFromUsername(req.body.target) - if (!targetAccount) { - res.status(404) - res.send() - return - } - - let accId = targetAccount.id - - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { - auth.invalidate(v.token) - }) - - let cpl = () => Accounts.deleteAccount(accId).then(_ => { - if (targetAccount?.email) { - sendMail(targetAccount.email, "Notice of account deletion", `Your account, ${targetAccount.username}, has been deleted by ${acc.username} for the following reason:

${req.body.reason || "(no reason specified)"}

Your files ${req.body.deleteFiles ? "have been deleted" : "have not been modified"}. Thank you for using monofile.`) - } - res.send("account deleted") - }) - - if (req.body.deleteFiles) { - let f = targetAccount.files.map(e=>e) // make shallow copy so that iterating over it doesnt Die - for (let v of f) { - files.unlink(v,true).catch(err => console.error(err)) - } - - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { - if (err) console.log(err) - cpl() - }) - } else cpl() -}) - -adminRoutes.post("/transfer", parser, (req,res) => { - - if (typeof req.body.target !== "string" || typeof req.body.owner !== "string") { - res.status(404) - res.send() - return - } - - let targetFile = files.getFilePointer(req.body.target) - if (!targetFile) { - res.status(404) - res.send() - return - } - - let newOwner = Accounts.getFromUsername(req.body.owner || "") - - // clear old owner - - if (targetFile.owner) { - let oldOwner = Accounts.getFromId(targetFile.owner) - if (oldOwner) { - Accounts.files.deindex(oldOwner.id, req.body.target) - } - } - - if (newOwner) { - Accounts.files.index(newOwner.id, req.body.target) - } - targetFile.owner = newOwner ? newOwner.id : undefined; - - files.writeFile(req.body.target, targetFile).then(() => { - res.send() - }).catch(() => { - res.status(500) - res.send() - }) // wasting a reassignment but whatee - -}) - -adminRoutes.post("/idchange", parser, (req,res) => { - - if (typeof req.body.target !== "string" || typeof req.body.new !== "string") { - res.status(400) - res.send() - return - } - - let targetFile = files.getFilePointer(req.body.target) - if (!targetFile) { - res.status(404) - res.send() - return - } - - if (files.getFilePointer(req.body.new)) { - res.status(400) - res.send() - return - } - - if (targetFile.owner) { - Accounts.files.deindex(targetFile.owner, req.body.target) - Accounts.files.index(targetFile.owner, req.body.new) - } - delete files.files[req.body.target] - - files.writeFile(req.body.new, targetFile).then(() => { - res.send() - }).catch(() => { - files.files[req.body.target] = req.body.new - - if (targetFile.owner) { - Accounts.files.deindex(targetFile.owner, req.body.new) - Accounts.files.index(targetFile.owner, req.body.target) - } - - res.status(500) - res.send() - }) - -}) \ No newline at end of file diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index e69de29..242a9f1 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -0,0 +1,13 @@ +import { Router } from "express"; +import Files from "../../../lib/files"; + +let router = Router() + +module.exports = function(files: Files) { + + router.get("/", function(req,res) { + res.send("hello world!") + }) + + return router +} \ No newline at end of file diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts index e69de29..8c8168d 100644 --- a/src/server/routes/api/v1/admin.ts +++ b/src/server/routes/api/v1/admin.ts @@ -0,0 +1,8 @@ +import { Router } from "express"; +import Files from "../../../lib/files"; + +let router = Router() + +module.exports = function(files: Files) { + return router +} \ No newline at end of file diff --git a/src/server/routes/api/v1/file.ts b/src/server/routes/api/v1/file.ts index e69de29..8c8168d 100644 --- a/src/server/routes/api/v1/file.ts +++ b/src/server/routes/api/v1/file.ts @@ -0,0 +1,8 @@ +import { Router } from "express"; +import Files from "../../../lib/files"; + +let router = Router() + +module.exports = function(files: Files) { + return router +} \ No newline at end of file diff --git a/src/server/routes/api/v1/public.ts b/src/server/routes/api/v1/public.ts index e69de29..8c8168d 100644 --- a/src/server/routes/api/v1/public.ts +++ b/src/server/routes/api/v1/public.ts @@ -0,0 +1,8 @@ +import { Router } from "express"; +import Files from "../../../lib/files"; + +let router = Router() + +module.exports = function(files: Files) { + return router +} \ No newline at end of file diff --git a/src/server/routes/authRoutes.ts b/src/server/routes/authRoutes.ts deleted file mode 100644 index a8de6ff..0000000 --- a/src/server/routes/authRoutes.ts +++ /dev/null @@ -1,465 +0,0 @@ -import bodyParser from "body-parser"; -import { Router } from "express"; -import * as Accounts from "../lib/accounts"; -import * as auth from "../lib/auth"; -import { sendMail } from "../lib/mail"; -import { getAccount, noAPIAccess, requiresAccount, requiresPermissions } from "../lib/middleware" -import { accountRatelimit } from "../lib/ratelimit" - -import ServeError from "../lib/errors"; -import Files, { FileVisibility, generateFileId, id_check_regex } from "../lib/files"; - -import { writeFile } from "fs"; - -let parser = bodyParser.json({ - type: ["text/plain","application/json"] -}) - -export let authRoutes = Router(); -authRoutes.use(getAccount) - -let config = require(`${process.cwd()}/config.json`) - -let files:Files - -export function setFilesObj(newFiles:Files) { - files = newFiles -} - -authRoutes.post("/login", parser, (req,res) => { - if (typeof req.body.username != "string" || typeof req.body.password != "string") { - ServeError(res,400,"please provide a username or password") - return - } - - if (auth.validate(req.cookies.auth)) return - - /* - check if account exists - */ - - let acc = Accounts.getFromUsername(req.body.username) - - if (!acc) { - ServeError(res,401,"username or password incorrect") - return - } - - if (!Accounts.password.check(acc.id,req.body.password)) { - ServeError(res,401,"username or password incorrect") - return - } - - /* - assign token - */ - - res.cookie("auth",auth.create(acc.id,(3*24*60*60*1000))) - res.status(200) - res.end() -}) - -authRoutes.post("/create", parser, (req,res) => { - if (!config.accounts.registrationEnabled) { - ServeError(res,403,"account registration disabled") - return - } - - if (auth.validate(req.cookies.auth)) return - - if (typeof req.body.username != "string" || typeof req.body.password != "string") { - ServeError(res,400,"please provide a username or password") - return - } - - /* - check if account exists - */ - - let acc = Accounts.getFromUsername(req.body.username) - - if (acc) { - ServeError(res,400,"account with this username already exists") - return - } - - if (req.body.username.length < 3 || req.body.username.length > 20) { - ServeError(res,400,"username must be over or equal to 3 characters or under or equal to 20 characters in length") - return - } - - if ((req.body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != req.body.username) { - ServeError(res,400,"username contains invalid characters") - return - } - - if (req.body.password.length < 8) { - ServeError(res,400,"password must be 8 characters or longer") - return - } - - Accounts.create(req.body.username,req.body.password) - .then((newAcc) => { - /* - assign token - */ - - res.cookie("auth",auth.create(newAcc,(3*24*60*60*1000))) - res.status(200) - res.end() - }) - .catch(() => { - ServeError(res,500,"internal server error") - }) -}) - -authRoutes.post("/logout", (req,res) => { - if (!auth.validate(req.cookies.auth)) { - ServeError(res, 401, "not logged in") - return - } - - auth.invalidate(req.cookies.auth) - res.send("logged out") -}) - -authRoutes.post("/dfv", requiresAccount, requiresPermissions("manage"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (['public','private','anonymous'].includes(req.body.defaultFileVisibility)) { - acc.defaultFileVisibility = req.body.defaultFileVisibility - Accounts.save() - res.send(`dfv has been set to ${acc.defaultFileVisibility}`) - } else { - res.status(400) - res.send("invalid dfv") - } -}) - -authRoutes.post("/customcss", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.fileId != "string") req.body.fileId = undefined; - - if ( - - !req.body.fileId - || (req.body.fileId.match(id_check_regex) == req.body.fileId - && req.body.fileId.length <= config.maxUploadIdLength) - - ) { - acc.customCSS = req.body.fileId || undefined - if (!req.body.fileId) delete acc.customCSS - Accounts.save() - res.send(`custom css saved`) - } else { - res.status(400) - res.send("invalid fileid") - } -}) - -authRoutes.post("/embedcolor", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.color != "string") req.body.color = undefined; - - if ( - - !req.body.color - || (req.body.color.toLowerCase().match(/[a-f0-9]+/) == req.body.color.toLowerCase()) - && req.body.color.length == 6 - - ) { - if (!acc.embed) acc.embed = {} - acc.embed.color = req.body.color || undefined - if (!req.body.color) delete acc.embed.color - Accounts.save() - res.send(`custom embed color saved`) - } else { - res.status(400) - res.send("invalid hex code") - } -}) - -authRoutes.post("/embedsize", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.largeImage != "boolean") req.body.color = false; - - if (!acc.embed) acc.embed = {} - acc.embed.largeImage = req.body.largeImage - if (!req.body.largeImage) delete acc.embed.largeImage - Accounts.save() - res.send(`custom embed image size saved`) -}) - -authRoutes.post("/delete_account", requiresAccount, noAPIAccess, parser, async (req,res) => { - let acc = res.locals.acc as Accounts.Account - - let accId = acc.id - - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { - auth.invalidate(v.token) - }) - - let cpl = () => Accounts.deleteAccount(accId).then(_ => res.send("account deleted")) - - if (req.body.deleteFiles) { - let f = acc.files.map(e=>e) // make shallow copy so that iterating over it doesnt Die - for (let v of f) { - files.unlink(v,true).catch(err => console.error(err)) - } - - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { - if (err) console.log(err) - cpl() - }) - } else cpl() -}) - -authRoutes.post("/change_username", requiresAccount, noAPIAccess, parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.username != "string" || req.body.username.length < 3 || req.body.username.length > 20) { - ServeError(res,400,"username must be between 3 and 20 characters in length") - return - } - - let _acc = Accounts.getFromUsername(req.body.username) - - if (_acc) { - ServeError(res,400,"account with this username already exists") - return - } - - if ((req.body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != req.body.username) { - ServeError(res,400,"username contains invalid characters") - return - } - - acc.username = req.body.username - Accounts.save() - - if (acc.email) { - sendMail(acc.email, `Your login details have been updated`, `Hello there! Your username has been updated to ${req.body.username}. Please update your devices accordingly. Thank you for using monofile.`).then(() => { - res.send("OK") - }).catch((err) => {}) - } - - res.send("username changed") -}) - -// shit way to do this but... - -let verificationCodes = new Map() - -authRoutes.post("/request_email_change", requiresAccount, noAPIAccess, accountRatelimit({ requests: 4, per: 60*60*1000 }), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - - if (typeof req.body.email != "string" || !req.body.email) { - ServeError(res,400, "supply an email") - return - } - - let vcode = verificationCodes.get(acc.id) - - // delete previous if any - let e = vcode?.expiry - if (e) clearTimeout(e) - verificationCodes.delete(acc?.id||"") - - let code = generateFileId(12).toUpperCase() - - // set - - verificationCodes.set(acc.id, { - code, - email: req.body.email, - expiry: setTimeout( () => verificationCodes.delete(acc?.id||""), 15*60*1000) - }) - - // this is a mess but it's fine - - sendMail(req.body.email, `Hey there, ${acc.username} - let's connect your email`, `Hello there! You are recieving this message because you decided to link your email, ${req.body.email.split("@")[0]}@${req.body.email.split("@")[1]}, to your account, ${acc.username}. If you would like to continue, please click here, or go to https://${req.header("Host")}/auth/confirm_email/${code}.`).then(() => { - res.send("OK") - }).catch((err) => { - let e = verificationCodes.get(acc?.id||"")?.expiry - if (e) clearTimeout(e) - verificationCodes.delete(acc?.id||"") - res.locals.undoCount(); - ServeError(res, 500, err?.toString()) - }) -}) - -authRoutes.get("/confirm_email/:code", requiresAccount, noAPIAccess, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - - let vcode = verificationCodes.get(acc.id) - - if (!vcode) { ServeError(res, 400, "nothing to confirm"); return } - - if (typeof req.params.code == "string" && req.params.code.toUpperCase() == vcode.code) { - acc.email = vcode.email - Accounts.save(); - - let e = verificationCodes.get(acc?.id||"")?.expiry - if (e) clearTimeout(e) - verificationCodes.delete(acc?.id||"") - - res.redirect("/") - } else { - ServeError(res, 400, "invalid code") - } -}) - -authRoutes.post("/remove_email", requiresAccount, noAPIAccess, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (acc.email) { - delete acc.email; - Accounts.save() - res.send("email detached") - } - else ServeError(res, 400, "email not attached") -}) - -let pwReset = new Map() -let prcIdx = new Map() - -authRoutes.post("/request_emergency_login", parser, (req,res) => { - if (auth.validate(req.cookies.auth || "")) return - - if (typeof req.body.account != "string" || !req.body.account) { - ServeError(res,400, "supply a username") - return - } - - let acc = Accounts.getFromUsername(req.body.account) - if (!acc || !acc.email) { - ServeError(res, 400, "this account either does not exist or does not have an email attached; please contact the server's admin for a reset if you would still like to access it") - return - } - - let pResetCode = pwReset.get(acc.id) - - if (pResetCode && pResetCode.requestedAt+(15*60*1000) > Date.now()) { - ServeError(res, 429, `Please wait a few moments to request another emergency login.`) - return - } - - - // delete previous if any - let e = pResetCode?.expiry - if (e) clearTimeout(e) - pwReset.delete(acc?.id||"") - prcIdx.delete(pResetCode?.code||"") - - let code = generateFileId(12).toUpperCase() - - // set - - pwReset.set(acc.id, { - code, - expiry: setTimeout( () => { pwReset.delete(acc?.id||""); prcIdx.delete(pResetCode?.code||"") }, 15*60*1000), - requestedAt: Date.now() - }) - - prcIdx.set(code, acc.id) - - // this is a mess but it's fine - - sendMail(acc.email, `Emergency login requested for ${acc.username}`, `Hello there! You are recieving this message because you forgot your password to your monofile account, ${acc.username}. To log in, please click here, or go to https://${req.header("Host")}/auth/emergency_login/${code}. If it doesn't appear that you are logged in after visiting this link, please try refreshing. Once you have successfully logged in, you may reset your password.`).then(() => { - res.send("OK") - }).catch((err) => { - let e = pwReset.get(acc?.id||"")?.expiry - if (e) clearTimeout(e) - pwReset.delete(acc?.id||"") - prcIdx.delete(code||"") - ServeError(res, 500, err?.toString()) - }) -}) - -authRoutes.get("/emergency_login/:code", (req,res) => { - if (auth.validate(req.cookies.auth || "")) { - ServeError(res, 403, "already logged in") - return - } - - let vcode = prcIdx.get(req.params.code) - - if (!vcode) { ServeError(res, 400, "invalid emergency login code"); return } - - if (typeof req.params.code == "string" && vcode) { - res.cookie("auth",auth.create(vcode,(3*24*60*60*1000))) - res.redirect("/") - - let e = pwReset.get(vcode)?.expiry - if (e) clearTimeout(e) - pwReset.delete(vcode) - prcIdx.delete(req.params.code) - } else { - ServeError(res, 400, "invalid code") - } -}) - -authRoutes.post("/change_password", requiresAccount, noAPIAccess, parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.password != "string" || req.body.password.length < 8) { - ServeError(res,400,"password must be 8 characters or longer") - return - } - - let accId = acc.id - - Accounts.password.set(accId,req.body.password) - - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { - auth.invalidate(v.token) - }) - - if (acc.email) { - sendMail(acc.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that you have initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { - res.send("OK") - }).catch((err) => {}) - } - - res.send("password changed - logged out all sessions") -}) - -authRoutes.post("/logout_sessions", requiresAccount, noAPIAccess, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - let accId = acc.id - - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { - auth.invalidate(v.token) - }) - - res.send("logged out all sessions") -}) - -authRoutes.get("/me", requiresAccount, requiresPermissions("user"), (req,res) => { - let acc = res.locals.acc as Accounts.Account - - let sessionToken = auth.tokenFor(req) - let accId = acc.id - res.send({ - ...acc, - sessionCount: auth.AuthTokens.filter(e => e.type != "App" && e.account == accId && (e.expire > Date.now() || !e.expire)).length, - sessionExpires: auth.AuthTokens.find(e => e.token == sessionToken)?.expire, - password: undefined, - email: - auth.getType(sessionToken) == "User" || auth.getPermissions(sessionToken)?.includes("email") - ? acc.email - : undefined - }) -}) - -authRoutes.get("/customCSS", (req,res) => { - let acc = res.locals.acc - if (acc?.customCSS) res.redirect(`/file/${acc.customCSS}`) - else res.send("") -}) diff --git a/src/server/routes/fileApiRoutes.ts b/src/server/routes/fileApiRoutes.ts deleted file mode 100644 index f64d141..0000000 --- a/src/server/routes/fileApiRoutes.ts +++ /dev/null @@ -1,97 +0,0 @@ -import bodyParser from "body-parser"; -import { Router } from "express"; -import * as Accounts from "../lib/accounts"; -import * as auth from "../lib/auth"; -import bytes from "bytes" -import {writeFile} from "fs"; - -import ServeError from "../lib/errors"; -import Files from "../lib/files"; -import { getAccount, requiresAccount, requiresPermissions } from "../lib/middleware"; - -let parser = bodyParser.json({ - type: ["text/plain","application/json"] -}) - -export let fileApiRoutes = Router(); -let files:Files - -export function setFilesObj(newFiles:Files) { - files = newFiles -} - -let config = require(`${process.cwd()}/config.json`) - -fileApiRoutes.use(getAccount); - -fileApiRoutes.get("/list", requiresAccount, requiresPermissions("user"), (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (!acc) return - let accId = acc.id - - res.send(acc.files.map((e) => { - let fp = files.getFilePointer(e) - if (!fp) { Accounts.files.deindex(accId, e); return null } - return { - ...fp, - messageids: null, - owner: null, - id:e - } - }).filter(e=>e)) - -}) - -fileApiRoutes.post("/manage", parser, requiresPermissions("manage"), (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (!acc) return - if (!req.body.target || !(typeof req.body.target == "object") || req.body.target.length < 1) return - - let modified = 0 - - req.body.target.forEach((e:string) => { - if (!acc.files.includes(e)) return - - let fp = files.getFilePointer(e) - - if (fp.reserved) { - return - } - - switch( req.body.action ) { - case "delete": - files.unlink(e, true) - modified++; - break; - - case "changeFileVisibility": - if (!["public","anonymous","private"].includes(req.body.value)) return; - files.files[e].visibility = req.body.value; - modified++; - break; - - case "setTag": - if (!req.body.value) delete files.files[e].tag - else { - if (req.body.value.toString().length > 30) return - files.files[e].tag = req.body.value.toString().toLowerCase() - } - modified++; - break; - } - }) - - Accounts.save().then(() => { - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { - if (err) console.log(err) - res.contentType("text/plain") - res.send(`modified ${modified} files`) - }) - }).catch((err) => console.error(err)) - - -}) \ No newline at end of file diff --git a/src/server/routes/primaryApi.ts b/src/server/routes/primaryApi.ts deleted file mode 100644 index 33558d8..0000000 --- a/src/server/routes/primaryApi.ts +++ /dev/null @@ -1,181 +0,0 @@ -import bodyParser from "body-parser"; -import express, { Router } from "express"; -import * as Accounts from "../lib/accounts"; -import * as auth from "../lib/auth"; -import axios, { AxiosResponse } from "axios" -import { type Range } from "range-parser"; -import multer, {memoryStorage} from "multer" - -import ServeError from "../lib/errors"; -import Files from "../lib/files"; -import { getAccount, requiresPermissions } from "../lib/middleware"; - -let parser = bodyParser.json({ - type: ["text/plain","application/json"] -}) - -export let primaryApi = Router(); -let files:Files - -export function setFilesObj(newFiles:Files) { - files = newFiles -} - -const multerSetup = multer({storage:memoryStorage()}) - -let config = require(`${process.cwd()}/config.json`) - -primaryApi.use(getAccount); - -primaryApi.get(["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], async (req:express.Request,res:express.Response) => { - - let acc = res.locals.acc as Accounts.Account - - let file = files.getFilePointer(req.params.fileId) - res.setHeader("Access-Control-Allow-Origin", "*") - res.setHeader("Content-Security-Policy","sandbox allow-scripts") - if (req.query.attachment == "1") res.setHeader("Content-Disposition", "attachment") - - if (file) { - - if (file.visibility == "private" && acc?.id != file.owner) { - ServeError(res,403,"you do not own this file") - return - } - - let range: Range | undefined - - res.setHeader("Content-Type",file.mime) - if (file.sizeInBytes) { - res.setHeader("Content-Length",file.sizeInBytes) - - if (file.chunkSize) { - let rng = req.range(file.sizeInBytes) - if (rng) { - - // error handling - if (typeof rng == "number") { - res.status(rng == -1 ? 416 : 400).send() - return - } - if (rng.type != "bytes") { - res.status(400).send(); - return - } - - // set ranges var - let rngs = Array.from(rng) - if (rngs.length != 1) { res.status(400).send(); return } - range = rngs[0] - - } - } - } - - // supports ranges - - - files.readFileStream(req.params.fileId, range).then(async stream => { - - if (range) { - res.status(206) - res.header("Content-Length", (range.end-range.start + 1).toString()) - res.header("Content-Range", `bytes ${range.start}-${range.end}/${file.sizeInBytes}`) - } - stream.pipe(res) - - }).catch((err) => { - ServeError(res,err.status,err.message) - }) - - } else { - ServeError(res, 404, "file not found") - } - -}) - -primaryApi.head(["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], (req: express.Request, res:express.Response) => { - let file = files.getFilePointer(req.params.fileId) - res.setHeader("Access-Control-Allow-Origin", "*") - res.setHeader("Content-Security-Policy","sandbox allow-scripts") - if (req.query.attachment == "1") res.setHeader("Content-Disposition", "attachment") - if (!file) { - res.status(404) - res.send() - } else { - res.setHeader("Content-Type",file.mime) - if (file.sizeInBytes) { - res.setHeader("Content-Length",file.sizeInBytes) - } - if (file.chunkSize) { - res.setHeader("Accept-Ranges", "bytes") - } - } -}) - -// upload handlers - -primaryApi.post("/upload", requiresPermissions("upload"), multerSetup.single('file'), async (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (req.file) { - try { - let prm = req.header("monofile-params") - let params:{[key:string]:any} = {} - if (prm) { - params = JSON.parse(prm) - } - - files.uploadFile({ - owner: acc?.id, - - uploadId:params.uploadId, - name:req.file.originalname, - mime:req.file.mimetype - },req.file.buffer) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status); - res.send(`[err] ${stat.message}`) - }) - } catch { - res.status(400) - res.send("[err] bad request") - } - } else { - res.status(400) - res.send("[err] bad request") - } -}) - -primaryApi.post("/clone", requiresPermissions("upload"), bodyParser.json({type: ["text/plain","application/json"]}) ,(req,res) => { - - let acc = res.locals.acc as Accounts.Account - - try { - axios.get(req.body.url,{responseType:"arraybuffer"}).then((data:AxiosResponse) => { - - files.uploadFile({ - owner: acc?.id, - - name:req.body.url.split("/")[req.body.url.split("/").length-1] || "generic", - mime:data.headers["content-type"], - uploadId:req.body.uploadId - },Buffer.from(data.data)) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status); - res.send(`[err] ${stat.message}`) - }) - - }).catch((err) => { - console.log(err) - res.status(400) - res.send(`[err] failed to fetch data`) - }) - } catch { - res.status(500) - res.send("[err] an error occured") - } -}) \ No newline at end of file From 1ed1acca1c367d9576e4db000355c247dacb3bee Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 3 Oct 2023 20:10:08 -0700 Subject: [PATCH 003/173] api-v1: apihandler --- src/server/routes/api.ts | 78 ++++ src/server/routes/api/v0/adminRoutes.ts | 236 +++++++++++ src/server/routes/api/v0/api.json | 10 + src/server/routes/api/v0/authRoutes.ts | 464 ++++++++++++++++++++++ src/server/routes/api/v0/fileApiRoutes.ts | 98 +++++ src/server/routes/api/v0/primaryApi.ts | 181 +++++++++ src/server/routes/api/v1/api.json | 7 + 7 files changed, 1074 insertions(+) create mode 100644 src/server/routes/api.ts create mode 100644 src/server/routes/api/v0/adminRoutes.ts create mode 100644 src/server/routes/api/v0/api.json create mode 100644 src/server/routes/api/v0/authRoutes.ts create mode 100644 src/server/routes/api/v0/fileApiRoutes.ts create mode 100644 src/server/routes/api/v0/primaryApi.ts create mode 100644 src/server/routes/api/v1/api.json diff --git a/src/server/routes/api.ts b/src/server/routes/api.ts new file mode 100644 index 0000000..3286a4a --- /dev/null +++ b/src/server/routes/api.ts @@ -0,0 +1,78 @@ +import { Router } from "express"; +import { readFile, readdir } from "fs/promises"; +import Files from "../lib/files"; + +const APIDirectory = __dirname+"/api" + +interface APIMount { + file: string + to: string +} + +type APIMountResolvable = string | APIMount + +interface APIDefinition { + name: string + baseURL: string + mount: APIMountResolvable[] +} + +function resolveMount(mount: APIMountResolvable): APIMount { + return typeof mount == "string" ? { file: mount, to: "/"+mount } : mount +} + +class APIVersion { + readonly definition: APIDefinition; + readonly apiPath: string; + readonly root: Router = Router(); + + constructor(definition: APIDefinition, files: Files) { + + this.definition = definition; + this.apiPath = APIDirectory + "/" + definition.name + + for (let _mount of definition.mount) { + let mount = resolveMount(_mount) + // no idea if there's a better way to do this but this is all i can think of + let route = require(`${this.apiPath}/${mount.file}.js`) as (files:Files)=>Router + this.root.use(mount.to, route(files)) + } + } +} + +export default class APIRouter { + + readonly files: Files + readonly root: Router = Router(); + + constructor(files: Files) { + this.files = files; + } + + /** + * @description Mounts an APIDefinition to the APIRouter. + * @param definition Definition to mount. + */ + + private mount(definition: APIDefinition) { + + console.log(`mounting APIDefinition ${definition.name}`) + + this.root.use( + definition.baseURL, + (new APIVersion(definition, this.files)).root + ) + + } + + async loadAPIMethods() { + + let files = await readdir(APIDirectory) + for (let v of files) { /// temporary. need to figure out something else for this + let def = JSON.parse((await readFile(`${process.cwd()}/src/server/routes/api/${v}/api.json`)).toString()) as APIDefinition + this.mount(def) + } + + } + +} \ No newline at end of file diff --git a/src/server/routes/api/v0/adminRoutes.ts b/src/server/routes/api/v0/adminRoutes.ts new file mode 100644 index 0000000..fa4445e --- /dev/null +++ b/src/server/routes/api/v0/adminRoutes.ts @@ -0,0 +1,236 @@ +import bodyParser from "body-parser"; +import { Router } from "express"; +import * as Accounts from "../../../lib/accounts"; +import * as auth from "../../../lib/auth"; +import bytes from "bytes" +import {writeFile} from "fs"; +import { sendMail } from "../../../lib/mail"; +import { getAccount, requiresAccount, requiresAdmin, requiresPermissions } from "../../../lib/middleware" + +import ServeError from "../../../lib/errors"; +import Files from "../../../lib/files"; + +let parser = bodyParser.json({ + type: ["text/plain","application/json"] +}) + +export let adminRoutes = Router(); +adminRoutes + .use(getAccount) + .use(requiresAccount) + .use(requiresAdmin) + .use(requiresPermissions("admin")) + +let config = require(`${process.cwd()}/config.json`) + +module.exports = function(files: Files) { + + + adminRoutes.post("/reset", parser, (req,res) => { + + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.target !== "string" || typeof req.body.password !== "string") { + res.status(404) + res.send() + return + } + + let targetAccount = Accounts.getFromUsername(req.body.target) + if (!targetAccount) { + res.status(404) + res.send() + return + } + + Accounts.password.set ( targetAccount.id, req.body.password ) + auth.AuthTokens.filter(e => e.account == targetAccount?.id).forEach((v) => { + auth.invalidate(v.token) + }) + + if (targetAccount.email) { + sendMail(targetAccount.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that an administrator, ${acc.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { + res.send("OK") + }).catch((err) => {}) + } + + + res.send() + + }) + + adminRoutes.post("/elevate", parser, (req,res) => { + + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.target !== "string") { + res.status(404) + res.send() + return + } + + let targetAccount = Accounts.getFromUsername(req.body.target) + if (!targetAccount) { + res.status(404) + res.send() + return + } + + targetAccount.admin = true; + Accounts.save() + res.send() + + }) + + adminRoutes.post("/delete", parser, (req,res) => { + + if (typeof req.body.target !== "string") { + res.status(404) + res.send() + return + } + + let targetFile = files.getFilePointer(req.body.target) + + if (!targetFile) { + res.status(404) + res.send() + return + } + + files.unlink(req.body.target).then(() => { + res.status(200) + }).catch(() => { + res.status(500) + }).finally(() => res.send()) + + }) + + adminRoutes.post("/delete_account", parser, async (req,res) => { + + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.target !== "string") { + res.status(404) + res.send() + return + } + + let targetAccount = Accounts.getFromUsername(req.body.target) + if (!targetAccount) { + res.status(404) + res.send() + return + } + + let accId = targetAccount.id + + auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { + auth.invalidate(v.token) + }) + + let cpl = () => Accounts.deleteAccount(accId).then(_ => { + if (targetAccount?.email) { + sendMail(targetAccount.email, "Notice of account deletion", `Your account, ${targetAccount.username}, has been deleted by ${acc.username} for the following reason:

${req.body.reason || "(no reason specified)"}

Your files ${req.body.deleteFiles ? "have been deleted" : "have not been modified"}. Thank you for using monofile.`) + } + res.send("account deleted") + }) + + if (req.body.deleteFiles) { + let f = targetAccount.files.map(e=>e) // make shallow copy so that iterating over it doesnt Die + for (let v of f) { + files.unlink(v,true).catch(err => console.error(err)) + } + + writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { + if (err) console.log(err) + cpl() + }) + } else cpl() + }) + + adminRoutes.post("/transfer", parser, (req,res) => { + + if (typeof req.body.target !== "string" || typeof req.body.owner !== "string") { + res.status(404) + res.send() + return + } + + let targetFile = files.getFilePointer(req.body.target) + if (!targetFile) { + res.status(404) + res.send() + return + } + + let newOwner = Accounts.getFromUsername(req.body.owner || "") + + // clear old owner + + if (targetFile.owner) { + let oldOwner = Accounts.getFromId(targetFile.owner) + if (oldOwner) { + Accounts.files.deindex(oldOwner.id, req.body.target) + } + } + + if (newOwner) { + Accounts.files.index(newOwner.id, req.body.target) + } + targetFile.owner = newOwner ? newOwner.id : undefined; + + files.writeFile(req.body.target, targetFile).then(() => { + res.send() + }).catch(() => { + res.status(500) + res.send() + }) // wasting a reassignment but whatee + + }) + + adminRoutes.post("/idchange", parser, (req,res) => { + + if (typeof req.body.target !== "string" || typeof req.body.new !== "string") { + res.status(400) + res.send() + return + } + + let targetFile = files.getFilePointer(req.body.target) + if (!targetFile) { + res.status(404) + res.send() + return + } + + if (files.getFilePointer(req.body.new)) { + res.status(400) + res.send() + return + } + + if (targetFile.owner) { + Accounts.files.deindex(targetFile.owner, req.body.target) + Accounts.files.index(targetFile.owner, req.body.new) + } + delete files.files[req.body.target] + + files.writeFile(req.body.new, targetFile).then(() => { + res.send() + }).catch(() => { + files.files[req.body.target] = req.body.new + + if (targetFile.owner) { + Accounts.files.deindex(targetFile.owner, req.body.new) + Accounts.files.index(targetFile.owner, req.body.target) + } + + res.status(500) + res.send() + }) + + }) + + return adminRoutes +} \ No newline at end of file diff --git a/src/server/routes/api/v0/api.json b/src/server/routes/api/v0/api.json new file mode 100644 index 0000000..ad0bffb --- /dev/null +++ b/src/server/routes/api/v0/api.json @@ -0,0 +1,10 @@ +{ + "name": "v0", + "baseURL": "/", + "mount": [ + { "file": "primaryApi", "to": "/" }, + { "file": "adminRoutes", "to": "/admin" }, + { "file": "authRoutes", "to": "/auth" }, + { "file": "fileApiRoutes", "to": "/files" } + ] +} \ No newline at end of file diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts new file mode 100644 index 0000000..a2dd3fb --- /dev/null +++ b/src/server/routes/api/v0/authRoutes.ts @@ -0,0 +1,464 @@ +import bodyParser from "body-parser"; +import { Router } from "express"; +import * as Accounts from "../../../lib/accounts"; +import * as auth from "../../../lib/auth"; +import { sendMail } from "../../../lib/mail"; +import { getAccount, noAPIAccess, requiresAccount, requiresPermissions } from "../../../lib/middleware" +import { accountRatelimit } from "../../../lib/ratelimit" + +import ServeError from "../../../lib/errors"; +import Files, { FileVisibility, generateFileId, id_check_regex } from "../../../lib/files"; + +import { writeFile } from "fs"; + +let parser = bodyParser.json({ + type: ["text/plain","application/json"] +}) + +export let authRoutes = Router(); +authRoutes.use(getAccount) + +let config = require(`${process.cwd()}/config.json`) + +module.exports = function(files: Files) { + + authRoutes.post("/login", parser, (req,res) => { + if (typeof req.body.username != "string" || typeof req.body.password != "string") { + ServeError(res,400,"please provide a username or password") + return + } + + if (auth.validate(req.cookies.auth)) return + + /* + check if account exists + */ + + let acc = Accounts.getFromUsername(req.body.username) + + if (!acc) { + ServeError(res,401,"username or password incorrect") + return + } + + if (!Accounts.password.check(acc.id,req.body.password)) { + ServeError(res,401,"username or password incorrect") + return + } + + /* + assign token + */ + + res.cookie("auth",auth.create(acc.id,(3*24*60*60*1000))) + res.status(200) + res.end() + }) + + authRoutes.post("/create", parser, (req,res) => { + if (!config.accounts.registrationEnabled) { + ServeError(res,403,"account registration disabled") + return + } + + if (auth.validate(req.cookies.auth)) return + + if (typeof req.body.username != "string" || typeof req.body.password != "string") { + ServeError(res,400,"please provide a username or password") + return + } + + /* + check if account exists + */ + + let acc = Accounts.getFromUsername(req.body.username) + + if (acc) { + ServeError(res,400,"account with this username already exists") + return + } + + if (req.body.username.length < 3 || req.body.username.length > 20) { + ServeError(res,400,"username must be over or equal to 3 characters or under or equal to 20 characters in length") + return + } + + if ((req.body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != req.body.username) { + ServeError(res,400,"username contains invalid characters") + return + } + + if (req.body.password.length < 8) { + ServeError(res,400,"password must be 8 characters or longer") + return + } + + Accounts.create(req.body.username,req.body.password) + .then((newAcc) => { + /* + assign token + */ + + res.cookie("auth",auth.create(newAcc,(3*24*60*60*1000))) + res.status(200) + res.end() + }) + .catch(() => { + ServeError(res,500,"internal server error") + }) + }) + + authRoutes.post("/logout", (req,res) => { + if (!auth.validate(req.cookies.auth)) { + ServeError(res, 401, "not logged in") + return + } + + auth.invalidate(req.cookies.auth) + res.send("logged out") + }) + + authRoutes.post("/dfv", requiresAccount, requiresPermissions("manage"), parser, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (['public','private','anonymous'].includes(req.body.defaultFileVisibility)) { + acc.defaultFileVisibility = req.body.defaultFileVisibility + Accounts.save() + res.send(`dfv has been set to ${acc.defaultFileVisibility}`) + } else { + res.status(400) + res.send("invalid dfv") + } + }) + + authRoutes.post("/customcss", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.fileId != "string") req.body.fileId = undefined; + + if ( + + !req.body.fileId + || (req.body.fileId.match(id_check_regex) == req.body.fileId + && req.body.fileId.length <= config.maxUploadIdLength) + + ) { + acc.customCSS = req.body.fileId || undefined + if (!req.body.fileId) delete acc.customCSS + Accounts.save() + res.send(`custom css saved`) + } else { + res.status(400) + res.send("invalid fileid") + } + }) + + authRoutes.post("/embedcolor", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.color != "string") req.body.color = undefined; + + if ( + + !req.body.color + || (req.body.color.toLowerCase().match(/[a-f0-9]+/) == req.body.color.toLowerCase()) + && req.body.color.length == 6 + + ) { + if (!acc.embed) acc.embed = {} + acc.embed.color = req.body.color || undefined + if (!req.body.color) delete acc.embed.color + Accounts.save() + res.send(`custom embed color saved`) + } else { + res.status(400) + res.send("invalid hex code") + } + }) + + authRoutes.post("/embedsize", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.largeImage != "boolean") req.body.color = false; + + if (!acc.embed) acc.embed = {} + acc.embed.largeImage = req.body.largeImage + if (!req.body.largeImage) delete acc.embed.largeImage + Accounts.save() + res.send(`custom embed image size saved`) + }) + + authRoutes.post("/delete_account", requiresAccount, noAPIAccess, parser, async (req,res) => { + let acc = res.locals.acc as Accounts.Account + + let accId = acc.id + + auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { + auth.invalidate(v.token) + }) + + let cpl = () => Accounts.deleteAccount(accId).then(_ => res.send("account deleted")) + + if (req.body.deleteFiles) { + let f = acc.files.map(e=>e) // make shallow copy so that iterating over it doesnt Die + for (let v of f) { + files.unlink(v,true).catch(err => console.error(err)) + } + + writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { + if (err) console.log(err) + cpl() + }) + } else cpl() + }) + + authRoutes.post("/change_username", requiresAccount, noAPIAccess, parser, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.username != "string" || req.body.username.length < 3 || req.body.username.length > 20) { + ServeError(res,400,"username must be between 3 and 20 characters in length") + return + } + + let _acc = Accounts.getFromUsername(req.body.username) + + if (_acc) { + ServeError(res,400,"account with this username already exists") + return + } + + if ((req.body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != req.body.username) { + ServeError(res,400,"username contains invalid characters") + return + } + + acc.username = req.body.username + Accounts.save() + + if (acc.email) { + sendMail(acc.email, `Your login details have been updated`, `Hello there! Your username has been updated to ${req.body.username}. Please update your devices accordingly. Thank you for using monofile.`).then(() => { + res.send("OK") + }).catch((err) => {}) + } + + res.send("username changed") + }) + + // shit way to do this but... + + let verificationCodes = new Map() + + authRoutes.post("/request_email_change", requiresAccount, noAPIAccess, accountRatelimit({ requests: 4, per: 60*60*1000 }), parser, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + + if (typeof req.body.email != "string" || !req.body.email) { + ServeError(res,400, "supply an email") + return + } + + let vcode = verificationCodes.get(acc.id) + + // delete previous if any + let e = vcode?.expiry + if (e) clearTimeout(e) + verificationCodes.delete(acc?.id||"") + + let code = generateFileId(12).toUpperCase() + + // set + + verificationCodes.set(acc.id, { + code, + email: req.body.email, + expiry: setTimeout( () => verificationCodes.delete(acc?.id||""), 15*60*1000) + }) + + // this is a mess but it's fine + + sendMail(req.body.email, `Hey there, ${acc.username} - let's connect your email`, `Hello there! You are recieving this message because you decided to link your email, ${req.body.email.split("@")[0]}@${req.body.email.split("@")[1]}, to your account, ${acc.username}. If you would like to continue, please click here, or go to https://${req.header("Host")}/auth/confirm_email/${code}.`).then(() => { + res.send("OK") + }).catch((err) => { + let e = verificationCodes.get(acc?.id||"")?.expiry + if (e) clearTimeout(e) + verificationCodes.delete(acc?.id||"") + res.locals.undoCount(); + ServeError(res, 500, err?.toString()) + }) + }) + + authRoutes.get("/confirm_email/:code", requiresAccount, noAPIAccess, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + + let vcode = verificationCodes.get(acc.id) + + if (!vcode) { ServeError(res, 400, "nothing to confirm"); return } + + if (typeof req.params.code == "string" && req.params.code.toUpperCase() == vcode.code) { + acc.email = vcode.email + Accounts.save(); + + let e = verificationCodes.get(acc?.id||"")?.expiry + if (e) clearTimeout(e) + verificationCodes.delete(acc?.id||"") + + res.redirect("/") + } else { + ServeError(res, 400, "invalid code") + } + }) + + authRoutes.post("/remove_email", requiresAccount, noAPIAccess, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (acc.email) { + delete acc.email; + Accounts.save() + res.send("email detached") + } + else ServeError(res, 400, "email not attached") + }) + + let pwReset = new Map() + let prcIdx = new Map() + + authRoutes.post("/request_emergency_login", parser, (req,res) => { + if (auth.validate(req.cookies.auth || "")) return + + if (typeof req.body.account != "string" || !req.body.account) { + ServeError(res,400, "supply a username") + return + } + + let acc = Accounts.getFromUsername(req.body.account) + if (!acc || !acc.email) { + ServeError(res, 400, "this account either does not exist or does not have an email attached; please contact the server's admin for a reset if you would still like to access it") + return + } + + let pResetCode = pwReset.get(acc.id) + + if (pResetCode && pResetCode.requestedAt+(15*60*1000) > Date.now()) { + ServeError(res, 429, `Please wait a few moments to request another emergency login.`) + return + } + + + // delete previous if any + let e = pResetCode?.expiry + if (e) clearTimeout(e) + pwReset.delete(acc?.id||"") + prcIdx.delete(pResetCode?.code||"") + + let code = generateFileId(12).toUpperCase() + + // set + + pwReset.set(acc.id, { + code, + expiry: setTimeout( () => { pwReset.delete(acc?.id||""); prcIdx.delete(pResetCode?.code||"") }, 15*60*1000), + requestedAt: Date.now() + }) + + prcIdx.set(code, acc.id) + + // this is a mess but it's fine + + sendMail(acc.email, `Emergency login requested for ${acc.username}`, `Hello there! You are recieving this message because you forgot your password to your monofile account, ${acc.username}. To log in, please click here, or go to https://${req.header("Host")}/auth/emergency_login/${code}. If it doesn't appear that you are logged in after visiting this link, please try refreshing. Once you have successfully logged in, you may reset your password.`).then(() => { + res.send("OK") + }).catch((err) => { + let e = pwReset.get(acc?.id||"")?.expiry + if (e) clearTimeout(e) + pwReset.delete(acc?.id||"") + prcIdx.delete(code||"") + ServeError(res, 500, err?.toString()) + }) + }) + + authRoutes.get("/emergency_login/:code", (req,res) => { + if (auth.validate(req.cookies.auth || "")) { + ServeError(res, 403, "already logged in") + return + } + + let vcode = prcIdx.get(req.params.code) + + if (!vcode) { ServeError(res, 400, "invalid emergency login code"); return } + + if (typeof req.params.code == "string" && vcode) { + res.cookie("auth",auth.create(vcode,(3*24*60*60*1000))) + res.redirect("/") + + let e = pwReset.get(vcode)?.expiry + if (e) clearTimeout(e) + pwReset.delete(vcode) + prcIdx.delete(req.params.code) + } else { + ServeError(res, 400, "invalid code") + } + }) + + authRoutes.post("/change_password", requiresAccount, noAPIAccess, parser, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + if (typeof req.body.password != "string" || req.body.password.length < 8) { + ServeError(res,400,"password must be 8 characters or longer") + return + } + + let accId = acc.id + + Accounts.password.set(accId,req.body.password) + + auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { + auth.invalidate(v.token) + }) + + if (acc.email) { + sendMail(acc.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that you have initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { + res.send("OK") + }).catch((err) => {}) + } + + res.send("password changed - logged out all sessions") + }) + + authRoutes.post("/logout_sessions", requiresAccount, noAPIAccess, (req,res) => { + let acc = res.locals.acc as Accounts.Account + + let accId = acc.id + + auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { + auth.invalidate(v.token) + }) + + res.send("logged out all sessions") + }) + + authRoutes.get("/me", requiresAccount, requiresPermissions("user"), (req,res) => { + let acc = res.locals.acc as Accounts.Account + + let sessionToken = auth.tokenFor(req) + let accId = acc.id + res.send({ + ...acc, + sessionCount: auth.AuthTokens.filter(e => e.type != "App" && e.account == accId && (e.expire > Date.now() || !e.expire)).length, + sessionExpires: auth.AuthTokens.find(e => e.token == sessionToken)?.expire, + password: undefined, + email: + auth.getType(sessionToken) == "User" || auth.getPermissions(sessionToken)?.includes("email") + ? acc.email + : undefined + }) + }) + + authRoutes.get("/customCSS", (req,res) => { + let acc = res.locals.acc + if (acc?.customCSS) res.redirect(`/file/${acc.customCSS}`) + else res.send("") + }) + + return authRoutes +} \ No newline at end of file diff --git a/src/server/routes/api/v0/fileApiRoutes.ts b/src/server/routes/api/v0/fileApiRoutes.ts new file mode 100644 index 0000000..bb1953c --- /dev/null +++ b/src/server/routes/api/v0/fileApiRoutes.ts @@ -0,0 +1,98 @@ +import bodyParser from "body-parser"; +import { Router } from "express"; +import * as Accounts from "../../../lib/accounts"; +import * as auth from "../../../lib/auth"; +import bytes from "bytes" +import {writeFile} from "fs"; + +import ServeError from "../../../lib/errors"; +import Files from "../../../lib/files"; +import { getAccount, requiresAccount, requiresPermissions } from "../../../lib/middleware"; + +let parser = bodyParser.json({ + type: ["text/plain","application/json"] +}) + +export let fileApiRoutes = Router(); + +let config = require(`${process.cwd()}/config.json`) + + +module.exports = function(files: Files) { + + fileApiRoutes.use(getAccount); + + fileApiRoutes.get("/list", requiresAccount, requiresPermissions("user"), (req,res) => { + + let acc = res.locals.acc as Accounts.Account + + if (!acc) return + let accId = acc.id + + res.send(acc.files.map((e) => { + let fp = files.getFilePointer(e) + if (!fp) { Accounts.files.deindex(accId, e); return null } + return { + ...fp, + messageids: null, + owner: null, + id:e + } + }).filter(e=>e)) + + }) + + fileApiRoutes.post("/manage", parser, requiresPermissions("manage"), (req,res) => { + + let acc = res.locals.acc as Accounts.Account + + if (!acc) return + if (!req.body.target || !(typeof req.body.target == "object") || req.body.target.length < 1) return + + let modified = 0 + + req.body.target.forEach((e:string) => { + if (!acc.files.includes(e)) return + + let fp = files.getFilePointer(e) + + if (fp.reserved) { + return + } + + switch( req.body.action ) { + case "delete": + files.unlink(e, true) + modified++; + break; + + case "changeFileVisibility": + if (!["public","anonymous","private"].includes(req.body.value)) return; + files.files[e].visibility = req.body.value; + modified++; + break; + + case "setTag": + if (!req.body.value) delete files.files[e].tag + else { + if (req.body.value.toString().length > 30) return + files.files[e].tag = req.body.value.toString().toLowerCase() + } + modified++; + break; + } + }) + + Accounts.save().then(() => { + writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { + if (err) console.log(err) + res.contentType("text/plain") + res.send(`modified ${modified} files`) + }) + }).catch((err) => console.error(err)) + + + }) + + return fileApiRoutes +} \ No newline at end of file diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts new file mode 100644 index 0000000..3881b75 --- /dev/null +++ b/src/server/routes/api/v0/primaryApi.ts @@ -0,0 +1,181 @@ +import bodyParser from "body-parser"; +import express, { Router } from "express"; +import * as Accounts from "../../../lib/accounts"; +import * as auth from "../../../lib/auth"; +import axios, { AxiosResponse } from "axios" +import { type Range } from "range-parser"; +import multer, {memoryStorage} from "multer" + +import ServeError from "../../../lib/errors"; +import Files from "../../../lib/files"; +import { getAccount, requiresPermissions } from "../../../lib/middleware"; + +let parser = bodyParser.json({ + type: ["text/plain","application/json"] +}) + +export let primaryApi = Router(); + +const multerSetup = multer({storage:memoryStorage()}) + +let config = require(`${process.cwd()}/config.json`) + +primaryApi.use(getAccount); + +module.exports = function(files: Files) { + + primaryApi.get(["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], async (req:express.Request,res:express.Response) => { + + let acc = res.locals.acc as Accounts.Account + + let file = files.getFilePointer(req.params.fileId) + res.setHeader("Access-Control-Allow-Origin", "*") + res.setHeader("Content-Security-Policy","sandbox allow-scripts") + if (req.query.attachment == "1") res.setHeader("Content-Disposition", "attachment") + + if (file) { + + if (file.visibility == "private" && acc?.id != file.owner) { + ServeError(res,403,"you do not own this file") + return + } + + let range: Range | undefined + + res.setHeader("Content-Type",file.mime) + if (file.sizeInBytes) { + res.setHeader("Content-Length",file.sizeInBytes) + + if (file.chunkSize) { + let rng = req.range(file.sizeInBytes) + if (rng) { + + // error handling + if (typeof rng == "number") { + res.status(rng == -1 ? 416 : 400).send() + return + } + if (rng.type != "bytes") { + res.status(400).send(); + return + } + + // set ranges var + let rngs = Array.from(rng) + if (rngs.length != 1) { res.status(400).send(); return } + range = rngs[0] + + } + } + } + + // supports ranges + + + files.readFileStream(req.params.fileId, range).then(async stream => { + + if (range) { + res.status(206) + res.header("Content-Length", (range.end-range.start + 1).toString()) + res.header("Content-Range", `bytes ${range.start}-${range.end}/${file.sizeInBytes}`) + } + stream.pipe(res) + + }).catch((err) => { + ServeError(res,err.status,err.message) + }) + + } else { + ServeError(res, 404, "file not found") + } + + }) + + primaryApi.head(["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], (req: express.Request, res:express.Response) => { + let file = files.getFilePointer(req.params.fileId) + res.setHeader("Access-Control-Allow-Origin", "*") + res.setHeader("Content-Security-Policy","sandbox allow-scripts") + if (req.query.attachment == "1") res.setHeader("Content-Disposition", "attachment") + if (!file) { + res.status(404) + res.send() + } else { + res.setHeader("Content-Type",file.mime) + if (file.sizeInBytes) { + res.setHeader("Content-Length",file.sizeInBytes) + } + if (file.chunkSize) { + res.setHeader("Accept-Ranges", "bytes") + } + } + }) + + // upload handlers + + primaryApi.post("/upload", requiresPermissions("upload"), multerSetup.single('file'), async (req,res) => { + + let acc = res.locals.acc as Accounts.Account + + if (req.file) { + try { + let prm = req.header("monofile-params") + let params:{[key:string]:any} = {} + if (prm) { + params = JSON.parse(prm) + } + + files.uploadFile({ + owner: acc?.id, + + uploadId:params.uploadId, + name:req.file.originalname, + mime:req.file.mimetype + },req.file.buffer) + .then((uID) => res.send(uID)) + .catch((stat) => { + res.status(stat.status); + res.send(`[err] ${stat.message}`) + }) + } catch { + res.status(400) + res.send("[err] bad request") + } + } else { + res.status(400) + res.send("[err] bad request") + } + }) + + primaryApi.post("/clone", requiresPermissions("upload"), bodyParser.json({type: ["text/plain","application/json"]}) ,(req,res) => { + + let acc = res.locals.acc as Accounts.Account + + try { + axios.get(req.body.url,{responseType:"arraybuffer"}).then((data:AxiosResponse) => { + + files.uploadFile({ + owner: acc?.id, + + name:req.body.url.split("/")[req.body.url.split("/").length-1] || "generic", + mime:data.headers["content-type"], + uploadId:req.body.uploadId + },Buffer.from(data.data)) + .then((uID) => res.send(uID)) + .catch((stat) => { + res.status(stat.status); + res.send(`[err] ${stat.message}`) + }) + + }).catch((err) => { + console.log(err) + res.status(400) + res.send(`[err] failed to fetch data`) + }) + } catch { + res.status(500) + res.send("[err] an error occured") + } + }) + + return primaryApi +} \ No newline at end of file diff --git a/src/server/routes/api/v1/api.json b/src/server/routes/api/v1/api.json new file mode 100644 index 0000000..5c20663 --- /dev/null +++ b/src/server/routes/api/v1/api.json @@ -0,0 +1,7 @@ +{ + "name": "v1", + "baseURL": "/api/v1", + "mount": [ + "account", "admin", "file", "public" + ] +} \ No newline at end of file From 9a589d36384f53543c96c9778231c0b324079526 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 3 Oct 2023 20:16:05 -0700 Subject: [PATCH 004/173] clear up internal libs (@Jack5079) --- src/server/lib/accounts.ts | 29 ++++++++++++++--------------- src/server/lib/mail.ts | 23 +++++++++-------------- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/server/lib/accounts.ts b/src/server/lib/accounts.ts index c9f755f..d456841 100644 --- a/src/server/lib/accounts.ts +++ b/src/server/lib/accounts.ts @@ -35,23 +35,22 @@ export interface Account { * @returns A Promise which returns the new account's ID */ -export function create(username:string,pwd:string,admin:boolean=false):Promise { - return new Promise((resolve,reject) => { - let accId = crypto.randomBytes(12).toString("hex") +export async function create(username:string,pwd:string,admin:boolean=false):Promise { + let accId = crypto.randomBytes(12).toString("hex") - Accounts.push( - { - id: accId, - username: username, - password: password.hash(pwd), - files: [], - admin: admin, - defaultFileVisibility: "public" - } - ) + Accounts.push( + { + id: accId, + username: username, + password: password.hash(pwd), + files: [], + admin: admin, + defaultFileVisibility: "public" + } + ) - save().then(() => resolve(accId)) - }) + await save() + return accId } /** diff --git a/src/server/lib/mail.ts b/src/server/lib/mail.ts index bd9ce07..3ee1b38 100644 --- a/src/server/lib/mail.ts +++ b/src/server/lib/mail.ts @@ -27,19 +27,14 @@ transport = * @returns Promise which resolves to the output from nodemailer.transport.sendMail */ export function sendMail(to: string, subject: string, content: string) { - return new Promise((resolve,reject) => { - transport.sendMail({ - to, - subject, - "from": mailConfig.send.from, - "html": `monofile accounts
Gain control of your uploads.

${ - content - .replace(/\/g, `@`) - .replace(/\/g,``) - }

If you do not believe that you are the intended recipient of this email, please disregard this message.` - }, (err, info) => { - if (err) reject(err) - else resolve(info) - }) + return transport.sendMail({ + to, + subject, + "from": mailConfig.send.from, + "html": `monofile accounts
Gain control of your uploads.

${ + content + .replace(/\/g, `@`) + .replace(/\/g,``) + }

If you do not believe that you are the intended recipient of this email, please disregard this message.` }) } \ No newline at end of file From 5a84f766cc6237139ca0ac18790330a12b03faff Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 3 Oct 2023 20:45:49 -0700 Subject: [PATCH 005/173] =?UTF-8?q?IMPORTANT:=20readd=20British(?= =?UTF-8?q?=F0=9F=9A=AB)=20joke?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/pound.svg | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/icons/pound.svg b/assets/icons/pound.svg index 22cba99..dcfc516 100644 --- a/assets/icons/pound.svg +++ b/assets/icons/pound.svg @@ -1 +1,7 @@ + \ No newline at end of file From ab617461fa5b9f565bcd44177f7dfb198b175b02 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 3 Oct 2023 22:02:37 -0700 Subject: [PATCH 006/173] housekeeping --- src/server/routes/api.ts | 2 +- src/server/routes/api/v0/adminRoutes.ts | 2 +- src/server/routes/api/v0/authRoutes.ts | 2 +- src/server/routes/api/v0/fileApiRoutes.ts | 2 +- src/server/routes/api/v0/primaryApi.ts | 28 ++++++++++++++++++++--- src/server/routes/api/v1/account.ts | 5 ---- 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/server/routes/api.ts b/src/server/routes/api.ts index 3286a4a..1374d7d 100644 --- a/src/server/routes/api.ts +++ b/src/server/routes/api.ts @@ -68,7 +68,7 @@ export default class APIRouter { async loadAPIMethods() { let files = await readdir(APIDirectory) - for (let v of files) { /// temporary. need to figure out something else for this + for (let v of files) { /// temporary (hopefully). need to figure out something else for this let def = JSON.parse((await readFile(`${process.cwd()}/src/server/routes/api/${v}/api.json`)).toString()) as APIDefinition this.mount(def) } diff --git a/src/server/routes/api/v0/adminRoutes.ts b/src/server/routes/api/v0/adminRoutes.ts index fa4445e..243b719 100644 --- a/src/server/routes/api/v0/adminRoutes.ts +++ b/src/server/routes/api/v0/adminRoutes.ts @@ -23,7 +23,7 @@ adminRoutes let config = require(`${process.cwd()}/config.json`) -module.exports = function(files: Files) { +module.exports = function(files: Files) { adminRoutes.post("/reset", parser, (req,res) => { diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts index a2dd3fb..b33684f 100644 --- a/src/server/routes/api/v0/authRoutes.ts +++ b/src/server/routes/api/v0/authRoutes.ts @@ -20,7 +20,7 @@ authRoutes.use(getAccount) let config = require(`${process.cwd()}/config.json`) -module.exports = function(files: Files) { +module.exports = function(files: Files) { authRoutes.post("/login", parser, (req,res) => { if (typeof req.body.username != "string" || typeof req.body.password != "string") { diff --git a/src/server/routes/api/v0/fileApiRoutes.ts b/src/server/routes/api/v0/fileApiRoutes.ts index bb1953c..96cd176 100644 --- a/src/server/routes/api/v0/fileApiRoutes.ts +++ b/src/server/routes/api/v0/fileApiRoutes.ts @@ -18,7 +18,7 @@ export let fileApiRoutes = Router(); let config = require(`${process.cwd()}/config.json`) -module.exports = function(files: Files) { +module.exports = function(files: Files) { fileApiRoutes.use(getAccount); diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 3881b75..afdcec8 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -35,9 +35,16 @@ module.exports = function(files: Files) { if (file) { - if (file.visibility == "private" && acc?.id != file.owner) { - ServeError(res,403,"you do not own this file") - return + if (file.visibility == "private") { + if (acc?.id != file.owner) { + ServeError(res,403,"you do not own this file") + return + } + + if (auth.getType(auth.tokenFor(req)) == "App" && auth.getPermissions(auth.tokenFor(req))?.includes("private")) { + ServeError(res,403,"insufficient permissions") + return + } } let range: Range | undefined @@ -93,9 +100,23 @@ module.exports = function(files: Files) { primaryApi.head(["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], (req: express.Request, res:express.Response) => { let file = files.getFilePointer(req.params.fileId) + + if ( + file.visibility == "private" + && ( + res.locals.acc?.id != file.owner + || (auth.getType(auth.tokenFor(req)) == "App" && auth.getPermissions(auth.tokenFor(req))?.includes("private")) + ) + ) { + res.status(403).send() + return + } + res.setHeader("Access-Control-Allow-Origin", "*") res.setHeader("Content-Security-Policy","sandbox allow-scripts") + if (req.query.attachment == "1") res.setHeader("Content-Disposition", "attachment") + if (!file) { res.status(404) res.send() @@ -107,6 +128,7 @@ module.exports = function(files: Files) { if (file.chunkSize) { res.setHeader("Accept-Ranges", "bytes") } + res.send() } }) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 242a9f1..8c8168d 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -4,10 +4,5 @@ import Files from "../../../lib/files"; let router = Router() module.exports = function(files: Files) { - - router.get("/", function(req,res) { - res.send("hello world!") - }) - return router } \ No newline at end of file From 087454659b382ac00abead6fc917686e9f2af9cb Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Wed, 4 Oct 2023 16:10:42 +0100 Subject: [PATCH 007/173] Add middleware to account api-v1 --- src/server/routes/api/v1/account.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 8c8168d..7acbd99 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -1,8 +1,12 @@ import { Router } from "express"; import Files from "../../../lib/files"; +import { getAccount } from "../../../lib/middleware"; + let router = Router() +router.use(getAccount) + module.exports = function(files: Files) { return router } \ No newline at end of file From 01fe79d0508802cbf9b7d739c29d99f68fc24450 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 4 Oct 2023 10:21:04 -0700 Subject: [PATCH 008/173] api-v1: add new middleware function --- src/server/lib/middleware.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index 2d312ad..812bc5a 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -1,4 +1,4 @@ -import * as Accounts from "./accounts"; +import { Account } from "./accounts"; import express, { type RequestHandler } from "express" import ServeError from "../lib/errors"; import * as auth from "./auth"; @@ -70,4 +70,17 @@ export const requiresPermissions = function(...tokenPermissions: auth.TokenPermi export const noAPIAccess: RequestHandler = function(req, res, next) { if (auth.getType(auth.tokenFor(req)) == "App") ServeError(res, 403, "apps are not allowed to access this endpoint") else next() -} \ No newline at end of file + +/** + * @description Blocks requests based on whether or not the token being used to access the route is of type `User` unless a condition is met. + * @param tokenPermissions Permissions which your route requires. + * @returns Express middleware + */ + +export const noAPIAccessIf = function(condition: (acc:Account, token:string) => boolean):RequestHandler { + return function(req, res, next) { + let reqToken = auth.tokenFor(req) + if (auth.getType(reqToken) == "App" && !condition(res.locals.acc, reqToken)) ServeError(res, 403, "apps are not allowed to access this endpoint") + else next() + } +}} \ No newline at end of file From 6e6afd274b792225ee8d142399f117b6ff73c140 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 4 Oct 2023 10:21:33 -0700 Subject: [PATCH 009/173] api-v1: fix middleware func --- src/server/lib/middleware.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index 812bc5a..a4c609c 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -70,6 +70,7 @@ export const requiresPermissions = function(...tokenPermissions: auth.TokenPermi export const noAPIAccess: RequestHandler = function(req, res, next) { if (auth.getType(auth.tokenFor(req)) == "App") ServeError(res, 403, "apps are not allowed to access this endpoint") else next() +} /** * @description Blocks requests based on whether or not the token being used to access the route is of type `User` unless a condition is met. @@ -83,4 +84,4 @@ export const noAPIAccessIf = function(condition: (acc:Account, token:string) => if (auth.getType(reqToken) == "App" && !condition(res.locals.acc, reqToken)) ServeError(res, 403, "apps are not allowed to access this endpoint") else next() } -}} \ No newline at end of file +} \ No newline at end of file From 503f5f315f1cd5c73c55d9adab07e6d019e4c556 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 4 Oct 2023 10:41:21 -0700 Subject: [PATCH 010/173] api-v1: start work on sanitize middleware func --- src/server/lib/middleware.ts | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index a4c609c..a1d5fb2 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -74,7 +74,7 @@ export const noAPIAccess: RequestHandler = function(req, res, next) { /** * @description Blocks requests based on whether or not the token being used to access the route is of type `User` unless a condition is met. - * @param tokenPermissions Permissions which your route requires. + * @param condition Permissions which your route requires. * @returns Express middleware */ @@ -84,4 +84,33 @@ export const noAPIAccessIf = function(condition: (acc:Account, token:string) => if (auth.getType(reqToken) == "App" && !condition(res.locals.acc, reqToken)) ServeError(res, 403, "apps are not allowed to access this endpoint") else next() } +} + +type SchemeType = "array" | "object" | "string" | "number" | "boolean" + +interface SchemeObject { + type: "object" + children: { + [key: string]: SchemeParameter + } +} + +interface SchemeArray { + type: "array", + children: SchemeParameter /* All children of the array must be this type */ + | SchemeParameter[] /* Array must match this pattern */ +} + +type SchemeParameter = SchemeType | SchemeObject | SchemeArray + +/** + * @description Blocks requests based on whether or not the token being used to access the route is of type `User` unless a condition is met. + * @param tokenPermissions Permissions which your route requires. + * @returns Express middleware + */ + +export const sanitize = function(scheme: SchemeObject):RequestHandler { + return function(req, res, next) { + + } } \ No newline at end of file From 36b59d1908a3e45a1a4088220f0accab9be93d52 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Thu, 5 Oct 2023 01:41:09 +0100 Subject: [PATCH 011/173] fix: :bug: it does not import Accounts --- src/server/lib/middleware.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index a1d5fb2..c51888c 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -1,4 +1,4 @@ -import { Account } from "./accounts"; +import * as Accounts from "./accounts"; import express, { type RequestHandler } from "express" import ServeError from "../lib/errors"; import * as auth from "./auth"; @@ -78,7 +78,7 @@ export const noAPIAccess: RequestHandler = function(req, res, next) { * @returns Express middleware */ -export const noAPIAccessIf = function(condition: (acc:Account, token:string) => boolean):RequestHandler { +export const noAPIAccessIf = function(condition: (acc:Accounts.Account, token:string) => boolean):RequestHandler { return function(req, res, next) { let reqToken = auth.tokenFor(req) if (auth.getType(reqToken) == "App" && !condition(res.locals.acc, reqToken)) ServeError(res, 403, "apps are not allowed to access this endpoint") From 03c638b9514e44ae41d7d645659aa8f2561d5481 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Thu, 5 Oct 2023 02:00:41 +0100 Subject: [PATCH 012/173] assertAPI instead of noAPIAccessIf --- src/server/lib/middleware.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index c51888c..e9c18d2 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -73,15 +73,13 @@ export const noAPIAccess: RequestHandler = function(req, res, next) { } /** - * @description Blocks requests based on whether or not the token being used to access the route is of type `User` unless a condition is met. - * @param condition Permissions which your route requires. - * @returns Express middleware - */ + @description Add a restriction to this route; the condition must be true to allow API requests. +*/ -export const noAPIAccessIf = function(condition: (acc:Accounts.Account, token:string) => boolean):RequestHandler { +export const assertAPI = function(condition: (acc:Accounts.Account, token:string) => boolean):RequestHandler { return function(req, res, next) { let reqToken = auth.tokenFor(req) - if (auth.getType(reqToken) == "App" && !condition(res.locals.acc, reqToken)) ServeError(res, 403, "apps are not allowed to access this endpoint") + if (auth.getType(reqToken) == "App" && condition(res.locals.acc, reqToken)) ServeError(res, 403, "apps are not allowed to access this endpoint") else next() } } From 6b8d050fa53243225e81a05d529c0a743536e059 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Thu, 5 Oct 2023 02:25:04 +0100 Subject: [PATCH 013/173] account api half done --- src/server/routes/api/v1/account.ts | 140 +++++++++++++++++++++- src/server/routes/api/v1/api.json | 12 +- src/server/routes/api/v1/customization.ts | 122 +++++++++++++++++++ 3 files changed, 270 insertions(+), 4 deletions(-) create mode 100644 src/server/routes/api/v1/customization.ts diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 7acbd99..b3009b2 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -1,12 +1,146 @@ +// Modules + import { Router } from "express"; -import Files from "../../../lib/files"; +import bodyParser from "body-parser"; -import { getAccount } from "../../../lib/middleware"; +// Libs -let router = Router() +import Files, { id_check_regex } from "../../../lib/files"; +import * as Accounts from '../../../lib/accounts' +import * as Authentication from '../../../lib/auth' +import { assertAPI, getAccount, noAPIAccess, requiresAccount, requiresPermissions } from "../../../lib/middleware"; +import ServeError from "../../../lib/errors"; + +const Configuration = require(`${process.cwd()}/config.json`) + +const parser = bodyParser.json({ + type: [ "type/plain", "application/json" ] +}) + +const router = Router() router.use(getAccount) module.exports = function(files: Files) { + router.post("/login", + parser, + (req, res) => { + if (typeof req.body.username != "string" || typeof req.body.password != "string") { + ServeError(res, 400, "please provide a username or password") + return + } + + if (Authentication.validate(req.cookies.auth)) { + ServeError(res, 400, "you are already logged in") + return + } + + const Account = Accounts.getFromUsername(req.body.username) + + if (!Account || !Accounts.password.check(Account.id, req.body.password)) { + ServeError(res, 400, "username or password incorrect") + return + } + + res.cookie("auth", + Authentication.create( + Account.id, // account id + (3 * 24 * 60 * 60 * 1000) // expiration time + ) + ) + res.status(200) + res.end() + } + ) + + router.post("/create", + parser, + (req, res) => { + if (!Configuration.accounts.registrationEnabled) { + ServeError(res , 403, "account registration disabled") + return + } + + if (Authentication.validate(req.cookies.auth)) { + ServeError(res, 400, "you are already logged in") + return + } + + if (Accounts.getFromUsername(req.body.username)) { + ServeError(res, 400, "account with this username already exists") + return + } + + if (req.body.username.length < 3 || req.body.username.length > 20) { + ServeError(res, 400, "username must be over or equal to 3 characters or under or equal to 20 characters in length") + return + } + + if ( + ( + req.body.username.match(/[A-Za-z0-9_\-\.]+/) + || + [] + )[0] != req.body.username + ) { + ServeError(res, 400, "username contains invalid characters") + return + } + + if (req.body.password.length < 8) { + ServeError(res, 400, "password must be 8 characters or longer") + return + } + + Accounts.create( + req.body.username, + req.body.password + ).then((Account) => { + res.cookie("auth", Authentication.create( + Account, // account id + (3 * 24 * 60 * 60 * 1000) // expiration time + )) + res.status(200) + res.end() + }) + .catch(() => { + ServeError(res, 500, "internal server error") + }) + } + ) + + router.post("/logout", + (req, res) => { + if (!Authentication.validate(req.cookies.auth)) { + ServeError(res, 401, "not logged in") + return + } + + Authentication.invalidate(req.cookies.auth) + res.send("logged out") + } + ) + + router.put("/dfv", + requiresAccount, + requiresPermissions("manage"), + parser, + (req, res) => { + const Account = res.locals.acc as Accounts.Account + + if (['public', 'private', 'anonymous'].includes(req.body.defaultFileVisibility)) { + Account.defaultFileVisibility = req.body.defaultFileVisibility + + Accounts.save() + + res.send(`dfv has been set to ${Account.defaultFileVisibility}`) + } else { + res.status(400) + + res.send("invalid dfv") + } + } + ) + return router } \ No newline at end of file diff --git a/src/server/routes/api/v1/api.json b/src/server/routes/api/v1/api.json index 5c20663..84de338 100644 --- a/src/server/routes/api/v1/api.json +++ b/src/server/routes/api/v1/api.json @@ -2,6 +2,16 @@ "name": "v1", "baseURL": "/api/v1", "mount": [ - "account", "admin", "file", "public" + "account", + "admin", + "public", + { + "file": "file", + "to": "/account/files" + }, + { + "file": "customization", + "to": "/account/customization" + } ] } \ No newline at end of file diff --git a/src/server/routes/api/v1/customization.ts b/src/server/routes/api/v1/customization.ts new file mode 100644 index 0000000..ddea487 --- /dev/null +++ b/src/server/routes/api/v1/customization.ts @@ -0,0 +1,122 @@ +// Modules + +import { Router } from "express"; +import bodyParser from "body-parser"; + +// Libs + +import Files, { id_check_regex } from "../../../lib/files"; +import * as Accounts from '../../../lib/accounts' +import { getAccount, requiresAccount, requiresPermissions } from "../../../lib/middleware"; + +const Configuration = require(`${process.cwd()}/config.json`) + +const parser = bodyParser.json({ + type: [ "type/plain", "application/json" ] +}) + +const router = Router() + +router.use(getAccount) + +module.exports = function(files: Files) { + router.put("/css", + requiresAccount, + requiresPermissions("customize"), + parser, + (req, res) => { + const Account = res.locals.acc as Accounts.Account + + if (typeof req.body.fileId != "string") req.body.fileId = undefined; + + if ( + !req.body.fileId + || + (req.body.fileId.match(id_check_regex) == req.body.fileId + && req.body.fileId.length <= Configuration.maxUploadIdLength) + ) { + Account.customCSS = req.body.fileId || undefined + + if (!req.body.fileId) delete Account.customCSS; + + Accounts.save() + + res.send("custom css saved") + } else { + res.status(400) + + res.send("invalid fileid") + } + } + ) + + // authRoutes.get("/customCSS", (req,res) => { + // let acc = res.locals.acc + // if (acc?.customCSS) res.redirect(`/file/${acc.customCSS}`) + // else res.send("") + // }) + + router.get('/css', + requiresAccount, + (req, res) => { + const Account = res.locals.acc + + if (Account?.customCSS) res.redirect(`/file/${Account.customCSS}`) + else res.send(""); + } + ) + + router.put("/embed/color", + requiresAccount, + requiresPermissions("customize"), + parser, + (req, res) => { + const Account = res.locals.acc as Accounts.Account + + if (typeof req.body.color != "string") req.body.color = undefined; + + if ( + !req.body.color + || (req.body.color.toLowerCase().match(/[a-f0-9]+/) == req.body.color.toLowerCase()) + && req.body.color.length == 6 + ) { + if (!Account.embed) Account.embed = {}; + + Account.embed.color = req.body.color || undefined + + if (!req.body.color) delete Account.embed.color; + + Accounts.save() + + res.send("custom embed color saved") + } else { + res.status(400) + + res.send("invalid hex code") + } + } + ) + + router.put("/embed/size", + requiresAccount, + requiresPermissions("customize"), + parser, + (req, res) => { + const Account = res.locals.acc as Accounts.Account + + if (typeof req.body.largeImage != "boolean") req.body.color = false; + + if (!Account.embed) Account.embed = {}; + + Account.embed.largeImage = req.body.largeImage + + if (!req.body.largeImage) delete Account.embed.largeImage; + + Accounts.save() + + res.send(`custom embed image size saved`) + } + ) + + return router +} \ No newline at end of file From c51d8dab95c79700c5aee60c482e348f0d3deb36 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Thu, 5 Oct 2023 02:26:23 +0100 Subject: [PATCH 014/173] accidentally left comment in from old api --- src/server/routes/api/v1/customization.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/server/routes/api/v1/customization.ts b/src/server/routes/api/v1/customization.ts index ddea487..5c282e8 100644 --- a/src/server/routes/api/v1/customization.ts +++ b/src/server/routes/api/v1/customization.ts @@ -50,12 +50,6 @@ module.exports = function(files: Files) { } ) - // authRoutes.get("/customCSS", (req,res) => { - // let acc = res.locals.acc - // if (acc?.customCSS) res.redirect(`/file/${acc.customCSS}`) - // else res.send("") - // }) - router.get('/css', requiresAccount, (req, res) => { From 9e83d751bdc368bef9be1b57141c82a3f2b821b4 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 4 Oct 2023 19:02:11 -0700 Subject: [PATCH 015/173] api-v1: Charlie is on meth --- src/server/routes/api/v1/account.ts | 20 ++++---- src/server/routes/api/v1/customization.ts | 60 ++++++++--------------- 2 files changed, 31 insertions(+), 49 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index b3009b2..81b215c 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -19,11 +19,11 @@ const parser = bodyParser.json({ const router = Router() -router.use(getAccount) +router.use(getAccount, parser) module.exports = function(files: Files) { - router.post("/login", - parser, + router.post( + "/login", (req, res) => { if (typeof req.body.username != "string" || typeof req.body.password != "string") { ServeError(res, 400, "please provide a username or password") @@ -53,8 +53,8 @@ module.exports = function(files: Files) { } ) - router.post("/create", - parser, + router.post( + "/create", (req, res) => { if (!Configuration.accounts.registrationEnabled) { ServeError(res , 403, "account registration disabled") @@ -109,7 +109,8 @@ module.exports = function(files: Files) { } ) - router.post("/logout", + router.post( + "/logout", (req, res) => { if (!Authentication.validate(req.cookies.auth)) { ServeError(res, 401, "not logged in") @@ -121,10 +122,9 @@ module.exports = function(files: Files) { } ) - router.put("/dfv", - requiresAccount, - requiresPermissions("manage"), - parser, + router.put( + "/dfv", + requiresAccount, requiresPermissions("manage"), (req, res) => { const Account = res.locals.acc as Accounts.Account diff --git a/src/server/routes/api/v1/customization.ts b/src/server/routes/api/v1/customization.ts index 5c282e8..2986612 100644 --- a/src/server/routes/api/v1/customization.ts +++ b/src/server/routes/api/v1/customization.ts @@ -8,6 +8,7 @@ import bodyParser from "body-parser"; import Files, { id_check_regex } from "../../../lib/files"; import * as Accounts from '../../../lib/accounts' import { getAccount, requiresAccount, requiresPermissions } from "../../../lib/middleware"; +import ServeError from "../../../lib/errors"; const Configuration = require(`${process.cwd()}/config.json`) @@ -17,14 +18,13 @@ const parser = bodyParser.json({ const router = Router() -router.use(getAccount) +router.use(getAccount, parser) module.exports = function(files: Files) { - router.put("/css", - requiresAccount, - requiresPermissions("customize"), - parser, - (req, res) => { + router.put( + "/css", + requiresAccount, requiresPermissions("customize"), + async (req, res) => { const Account = res.locals.acc as Accounts.Account if (typeof req.body.fileId != "string") req.body.fileId = undefined; @@ -33,20 +33,13 @@ module.exports = function(files: Files) { !req.body.fileId || (req.body.fileId.match(id_check_regex) == req.body.fileId - && req.body.fileId.length <= Configuration.maxUploadIdLength) + && req.body.fileId.length <= Configuration.maxUploadIdLength) ) { Account.customCSS = req.body.fileId || undefined - if (!req.body.fileId) delete Account.customCSS; - - Accounts.save() - + await Accounts.save() res.send("custom css saved") - } else { - res.status(400) - - res.send("invalid fileid") - } + } else ServeError(res, 400, "invalid fileId") } ) @@ -61,10 +54,8 @@ module.exports = function(files: Files) { ) router.put("/embed/color", - requiresAccount, - requiresPermissions("customize"), - parser, - (req, res) => { + requiresAccount, requiresPermissions("customize"), + async (req, res) => { const Account = res.locals.acc as Accounts.Account if (typeof req.body.color != "string") req.body.color = undefined; @@ -74,40 +65,31 @@ module.exports = function(files: Files) { || (req.body.color.toLowerCase().match(/[a-f0-9]+/) == req.body.color.toLowerCase()) && req.body.color.length == 6 ) { - if (!Account.embed) Account.embed = {}; + if (!Account.embed) Account.embed = {}; Account.embed.color = req.body.color || undefined - if (!req.body.color) delete Account.embed.color; - - Accounts.save() - + await Accounts.save() res.send("custom embed color saved") - } else { - res.status(400) - res.send("invalid hex code") - } + } else ServeError(res,400,"invalid hex code") } ) router.put("/embed/size", - requiresAccount, - requiresPermissions("customize"), - parser, - (req, res) => { + requiresAccount, requiresPermissions("customize"), + async (req, res) => { const Account = res.locals.acc as Accounts.Account - if (typeof req.body.largeImage != "boolean") req.body.color = false; + if (typeof req.body.largeImage != "boolean") { + ServeError(res, 400, "largeImage must be bool"); + return + } if (!Account.embed) Account.embed = {}; - Account.embed.largeImage = req.body.largeImage - - if (!req.body.largeImage) delete Account.embed.largeImage; - - Accounts.save() + await Accounts.save() res.send(`custom embed image size saved`) } ) From 01bb4684a3ad33f5210c9e5e1774a684725cc7df Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Thu, 5 Oct 2023 20:08:39 +0100 Subject: [PATCH 016/173] delete your own account endpoint --- src/server/routes/api/v1/account.ts | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index b3009b2..6b671a7 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -1,5 +1,6 @@ // Modules +import { writeFile } from 'fs' import { Router } from "express"; import bodyParser from "body-parser"; @@ -142,5 +143,35 @@ module.exports = function(files: Files) { } ) + router.delete("/me", + requiresAccount, + noAPIAccess, + parser, + (req, res) => { + const Account = res.locals.acc as Accounts.Account + + const accountId = Account.id + + Authentication.AuthTokens.filter(e => e.account == accountId).forEach((token) => { + Authentication.invalidate(token.token) + }) + + const deleteAccount = () => Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) + + if (req.body.deleteFiles) { + const Files = Account.files.map(e => e) + + for (let fileId of Files) { + files.unlink(fileId, true).catch(err => console.error) + } + + writeFile(process.cwd() + "/.data/files.json", JSON.stringify(files.files), (err) => { + if (err) console.log(err) + deleteAccount() + }) + } else deleteAccount() + } + ) + return router } \ No newline at end of file From e574438ea8ceafbb45746652825938c5c4a9f675 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Thu, 5 Oct 2023 20:51:12 +0100 Subject: [PATCH 017/173] files is not mounted to accounts --- src/server/routes/api/v1/api.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/server/routes/api/v1/api.json b/src/server/routes/api/v1/api.json index 84de338..694f259 100644 --- a/src/server/routes/api/v1/api.json +++ b/src/server/routes/api/v1/api.json @@ -5,10 +5,7 @@ "account", "admin", "public", - { - "file": "file", - "to": "/account/files" - }, + "file", { "file": "customization", "to": "/account/customization" From 03fa036e3836922cf3dcce0a2e65f57ff8435603 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Thu, 5 Oct 2023 23:31:52 +0100 Subject: [PATCH 018/173] change nickname added to apiv1 --- src/server/routes/api/v1/account.ts | 53 +++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 3703067..7da3afa 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -11,6 +11,7 @@ import * as Accounts from '../../../lib/accounts' import * as Authentication from '../../../lib/auth' import { assertAPI, getAccount, noAPIAccess, requiresAccount, requiresPermissions } from "../../../lib/middleware"; import ServeError from "../../../lib/errors"; +import { sendMail } from '../../../lib/mail'; const Configuration = require(`${process.cwd()}/config.json`) @@ -173,5 +174,57 @@ module.exports = function(files: Files) { } ) + router.put("/me/name", + requiresAccount, + noAPIAccess, + parser, + (req, res) => { + const Account = res.locals.acc as Accounts.Account + + const newUsername = req.body.username + + if ( + typeof newUsername != "string" + || + newUsername.length < 3 + || + req.body.username.length > 20 + ) { + ServeError(res, 400, "username must be between 3 and 20 characters in length") + return + } + + if (Accounts.getFromUsername(newUsername)) { + ServeError(res, 400, "account with this username already exists") + } + + if ( + ( + newUsername.match(/[A-Za-z0-9_\-\.]+/) + || + [] + )[0] != req.body.username + ) { + ServeError(res, 400, "username contains invalid characters") + return + } + + Account.username = newUsername + Accounts.save() + + if (Account.email) { + sendMail( + Account.email, + `Your login details have been updated`, + `Hello there! Your username has been updated to ${newUsername}. Please update your devices accordingly. Thank you for using monofile.` + ).then(() => { + res.send("OK") + }).catch((err) => {}) + } + } + ) + + + return router } \ No newline at end of file From a1b6917831dbea458873e69fa3a6351a5665f12a Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:34:40 +0100 Subject: [PATCH 019/173] add admin password and elevate route --- src/server/routes/api/v1/admin.ts | 82 +++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts index 8c8168d..bf07ae5 100644 --- a/src/server/routes/api/v1/admin.ts +++ b/src/server/routes/api/v1/admin.ts @@ -1,8 +1,84 @@ -import { Router } from "express"; -import Files from "../../../lib/files"; +// Modules -let router = Router() +import { writeFile } from 'fs' +import { Router } from "express"; +import bodyParser from "body-parser"; + +// Libs + +import Files, { id_check_regex } from "../../../lib/files"; +import * as Accounts from '../../../lib/accounts' +import * as Authentication from '../../../lib/auth' +import { assertAPI, getAccount, noAPIAccess, requiresAccount, requiresAdmin, requiresPermissions } from "../../../lib/middleware"; +import ServeError from "../../../lib/errors"; +import { sendMail } from '../../../lib/mail'; + +const Configuration = require(`${process.cwd()}/config.json`) + +const parser = bodyParser.json({ + type: [ "type/plain", "application/json" ] +}) + +const router = Router() + +router.use(getAccount, requiresAccount, requiresAdmin, parser) module.exports = function(files: Files) { + router.patch( + "/account/:username/password", + (req, res) => { + const Account = res.locals.acc + + const targetUsername = req.params.username + const password = req.body.password + + if (typeof password !== "string") { + ServeError(res, 404, "") + return + } + + const targetAccount = Accounts.getFromUsername(targetUsername) + + if (!targetAccount) { + ServeError(res, 404, "") + return + } + + Accounts.password.set( targetAccount.id, password ) + + Authentication.AuthTokens.filter(e => e.account == targetAccount?.id).forEach((accountToken) => { + Authentication.invalidate(accountToken.token) + }) + + if (targetAccount.email) { + sendMail(targetAccount.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that an administrator, ${Account.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { + res.send("OK") + }).catch((err) => {}) + } + + res.send() + } + ) + + router.patch( + "/account/:username/elevate", + (req, res) => { + const targetUsername = req.params.username + const targetAccount = Accounts.getFromUsername(targetUsername) + + if (!targetAccount) { + ServeError(res, 404, "") + return + } + + targetAccount.admin = true + Accounts.save() + + res.send() + } + ) + + + return router } \ No newline at end of file From d87583392ee1aef03eda74c82024e26141c86212 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:35:09 +0100 Subject: [PATCH 020/173] http method changes and use ServeError --- src/server/routes/api/v1/account.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 7da3afa..6699ac8 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -124,7 +124,7 @@ module.exports = function(files: Files) { } ) - router.put( + router.patch( "/dfv", requiresAccount, requiresPermissions("manage"), (req, res) => { @@ -137,9 +137,7 @@ module.exports = function(files: Files) { res.send(`dfv has been set to ${Account.defaultFileVisibility}`) } else { - res.status(400) - - res.send("invalid dfv") + ServeError(res, 400, "invalid dfv") } } ) @@ -174,7 +172,7 @@ module.exports = function(files: Files) { } ) - router.put("/me/name", + router.patch("/me/name", requiresAccount, noAPIAccess, parser, From 44133630a7f6d003d2b0e546dbb5e192011e9446 Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:43:58 +0100 Subject: [PATCH 021/173] fix: :bug: body is not sent in delete requests requiring a parameter Switches from using req.body to using req.params to know whether or not to delete their files --- src/server/routes/api/v1/account.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 6699ac8..f068a1b 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -142,7 +142,7 @@ module.exports = function(files: Files) { } ) - router.delete("/me", + router.delete("/me/:deleteFiles", requiresAccount, noAPIAccess, parser, @@ -157,7 +157,7 @@ module.exports = function(files: Files) { const deleteAccount = () => Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) - if (req.body.deleteFiles) { + if (Boolean(req.params.deleteFiles)) { const Files = Account.files.map(e => e) for (let fileId of Files) { From e5b8b83e6b5e1580845709e44f118da4c82fa13d Mon Sep 17 00:00:00 2001 From: linkability <146661751+linkability@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:55:00 +0100 Subject: [PATCH 022/173] admin delete user endpoint api-v1 --- src/server/routes/api/v1/admin.ts | 40 +++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts index bf07ae5..9dfbb0c 100644 --- a/src/server/routes/api/v1/admin.ts +++ b/src/server/routes/api/v1/admin.ts @@ -27,7 +27,7 @@ module.exports = function(files: Files) { router.patch( "/account/:username/password", (req, res) => { - const Account = res.locals.acc + const Account = res.locals.acc as Accounts.Account const targetUsername = req.params.username const password = req.body.password @@ -78,7 +78,43 @@ module.exports = function(files: Files) { } ) - + router.delete("/account/:username/:deleteFiles", + requiresAccount, + noAPIAccess, + parser, + (req, res) => { + const targetUsername = req.params.username + const deleteFiles = req.params.deleteFiles + + const targetAccount = Accounts.getFromUsername(targetUsername) + + if (!targetAccount) { + ServeError(res, 404, "") + return + } + + const accountId = targetAccount.id + + Authentication.AuthTokens.filter(e => e.account == accountId).forEach((token) => { + Authentication.invalidate(token.token) + }) + + const deleteAccount = () => Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) + + if (Boolean(deleteFiles)) { + const Files = targetAccount.files.map(e => e) + + for (let fileId of Files) { + files.unlink(fileId, true).catch(err => console.error) + } + + writeFile(process.cwd() + "/.data/files.json", JSON.stringify(files.files), (err) => { + if (err) console.log(err) + deleteAccount() + }) + } else deleteAccount() + } + ) return router } \ No newline at end of file From 3dec4d401e15c9a27b68a2b8a611631a498dfea9 Mon Sep 17 00:00:00 2001 From: unlinkability <146661751+linkability@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:45:30 +0100 Subject: [PATCH 023/173] Remove Boolean from checks Co-authored-by: Jack W. <29169102+Jack5079@users.noreply.github.com> --- src/server/routes/api/v1/account.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index f068a1b..e4c9e74 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -157,7 +157,7 @@ module.exports = function(files: Files) { const deleteAccount = () => Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) - if (Boolean(req.params.deleteFiles)) { + if (req.params.deleteFiles) { const Files = Account.files.map(e => e) for (let fileId of Files) { From dbe927f367bd070a94dfe9e4235b1186b45c03ed Mon Sep 17 00:00:00 2001 From: unlinkability <146661751+linkability@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:45:47 +0100 Subject: [PATCH 024/173] Remove Boolean from checks Co-authored-by: Jack W. <29169102+Jack5079@users.noreply.github.com> --- src/server/routes/api/v1/admin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts index 9dfbb0c..fc00b50 100644 --- a/src/server/routes/api/v1/admin.ts +++ b/src/server/routes/api/v1/admin.ts @@ -101,7 +101,7 @@ module.exports = function(files: Files) { const deleteAccount = () => Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) - if (Boolean(deleteFiles)) { + if (deleteFiles) { const Files = targetAccount.files.map(e => e) for (let fileId of Files) { From 0405f89542d3533bc01b17a97e93188606a7f8c4 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 11 Oct 2023 12:57:35 -0700 Subject: [PATCH 025/173] weed smoker charlie --- src/server/routes/api/v1/account.ts | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index e4c9e74..d6791d7 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -142,9 +142,8 @@ module.exports = function(files: Files) { } ) - router.delete("/me/:deleteFiles", - requiresAccount, - noAPIAccess, + router.delete("/me", + requiresAccount, noAPIAccess, parser, (req, res) => { const Account = res.locals.acc as Accounts.Account @@ -155,20 +154,7 @@ module.exports = function(files: Files) { Authentication.invalidate(token.token) }) - const deleteAccount = () => Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) - - if (req.params.deleteFiles) { - const Files = Account.files.map(e => e) - - for (let fileId of Files) { - files.unlink(fileId, true).catch(err => console.error) - } - - writeFile(process.cwd() + "/.data/files.json", JSON.stringify(files.files), (err) => { - if (err) console.log(err) - deleteAccount() - }) - } else deleteAccount() + Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) } ) From 365aace294fc7f1c60a677f8ba105f0a083b45a1 Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Tue, 24 Oct 2023 16:27:08 -0400 Subject: [PATCH 026/173] refactor: :recycle: Use real async in file.ts, change FileUploadSettings to match FilePointer properties --- src/server/lib/files.ts | 730 +++++++++++++------------ src/server/routes/api/v0/primaryApi.ts | 363 ++++++------ 2 files changed, 586 insertions(+), 507 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 259761e..e2d6997 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -1,14 +1,16 @@ -import axios from "axios"; -import Discord, { Client, TextBasedChannel } from "discord.js"; -import { readFile, writeFile } from "fs"; -import { Readable } from "node:stream"; -import crypto from "node:crypto"; -import { files } from "./accounts"; +import axios from "axios" +import Discord, { Client, Message, TextBasedChannel } from "discord.js" +import { readFile, writeFile } from "node:fs/promises" +import { Readable } from "node:stream" +import crypto from "node:crypto" +import { files } from "./accounts" -import * as Accounts from "./accounts"; +import * as Accounts from "./accounts" export let id_check_regex = /[A-Za-z0-9_\-\.\!\=\:\&\$\,\+\;\@\~\*\(\)\']+/ -export let alphanum = Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890") +export let alphanum = Array.from( + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" +) // bad solution but whatever @@ -19,72 +21,66 @@ export type FileVisibility = "public" | "anonymous" | "private" * @param length Length of the ID * @returns a random alphanumeric string */ -export function generateFileId(length:number=5) { +export function generateFileId(length: number = 5) { let fid = "" for (let i = 0; i < length; i++) { - fid += alphanum[crypto.randomInt(0,alphanum.length)] + fid += alphanum[crypto.randomInt(0, alphanum.length)] } return fid } -export interface FileUploadSettings { - name?: string, - mime: string, - uploadId?: string, - owner?:string -} +export type FileUploadSettings = Partial> & + Pick & { uploadId?: string } export interface Configuration { - maxDiscordFiles: number, - maxDiscordFileSize: number, - targetGuild: string, - targetChannel: string, - requestTimeout: number, - maxUploadIdLength: number, + maxDiscordFiles: number + maxDiscordFileSize: number + targetGuild: string + targetChannel: string + requestTimeout: number + maxUploadIdLength: number accounts: { - registrationEnabled: boolean, + registrationEnabled: boolean requiredForUpload: boolean - }, + } - trustProxy: boolean, + trustProxy: boolean forceSSL: boolean } export interface FilePointer { - filename:string, - mime:string, - messageids:string[], - owner?:string, - sizeInBytes?:number, - tag?:string, - visibility?:FileVisibility, - reserved?: boolean, + filename: string + mime: string + messageids: string[] + owner?: string + sizeInBytes?: number + tag?: string + visibility?: FileVisibility + reserved?: boolean chunkSize?: number } export interface StatusCodeError { - status: number, + status: number message: string } /* */ export default class Files { - config: Configuration client: Client - files: {[key:string]:FilePointer} = {} + files: { [key: string]: FilePointer } = {} uploadChannel?: TextBasedChannel constructor(client: Client, config: Configuration) { + this.config = config + this.client = client - this.config = config; - this.client = client; - - client.on("ready",() => { + client.on("ready", () => { console.log("Discord OK!") - + client.guilds.fetch(config.targetGuild).then((g) => { g.channels.fetch(config.targetChannel).then((a) => { if (a?.isTextBased()) { @@ -94,168 +90,163 @@ export default class Files { }) }) - readFile(process.cwd()+"/.data/files.json",(err,buf) => { - if (err) {console.log(err);return} - this.files = JSON.parse(buf.toString() || "{}") - }) - + readFile(process.cwd() + "/.data/files.json") + .then((buf) => { + this.files = JSON.parse(buf.toString() || "{}") + }) + .catch(console.error) } - + /** * @description Uploads a new file - * @param settings Settings for your new upload - * @param fBuffer Buffer containing file content + * @param metadata Settings for your new upload + * @param buffer Buffer containing file content * @returns Promise which resolves to the ID of the new file */ - uploadFile(settings:FileUploadSettings,fBuffer:Buffer):Promise { - return new Promise(async (resolve,reject) => { - if (!this.uploadChannel) { - reject({status:503,message:"server is not ready - please try again later"}) - return + async uploadFile( + metadata: FileUploadSettings, + buffer: Buffer + ): Promise { + if (!this.uploadChannel) + throw { + status: 503, + message: "server is not ready - please try again later", } - if (!settings.name || !settings.mime) { - reject({status:400,message:"missing name/mime"}); - return + if (!metadata.filename || !metadata.mime) + throw { status: 400, message: "missing filename/mime" } + + let uploadId = (metadata.uploadId || generateFileId()).toString() + + if ( + (uploadId.match(id_check_regex) || [])[0] != uploadId || + uploadId.length > this.config.maxUploadIdLength + ) + throw { status: 400, message: "invalid id" } + + if ( + this.files[uploadId] && + (metadata.owner + ? this.files[uploadId].owner != metadata.owner + : true) + ) + throw { + status: 400, + message: "you are not the owner of this file id", } - if (!settings.owner && this.config.accounts.requiredForUpload) { - reject({status:401,message:"an account is required for upload"}); - return - } - - let uploadId = (settings.uploadId || generateFileId()).toString(); - - if ((uploadId.match(id_check_regex) || [])[0] != uploadId || uploadId.length > this.config.maxUploadIdLength) { - reject({status:400,message:"invalid id"});return - } - - if (this.files[uploadId] && (settings.owner ? this.files[uploadId].owner != settings.owner : true)) { - reject({status:400,message:"you are not the owner of this file id"}); - return + if (this.files[uploadId] && this.files[uploadId].reserved) + throw { + status: 400, + message: + "already uploading this file. if your file is stuck in this state, contact an administrator", } - if (this.files[uploadId] && this.files[uploadId].reserved) { - reject({status:400,message:"already uploading this file. if your file is stuck in this state, contact an administrator"}); - return - } + if (metadata.filename.length > 128) + throw { status: 400, message: "name too long" } - if (settings.name.length > 128) { - reject({status:400,message:"name too long"}); - return - } + if (metadata.mime.length > 128) + throw { status: 400, message: "mime too long" } - if (settings.mime.length > 128) { - reject({status:400,message:"mime too long"}); - return - } + // reserve file, hopefully should prevent + // large files breaking - // reserve file, hopefully should prevent - // large files breaking + let existingFile = this.files[uploadId] - let ogf = this.files[uploadId] + // save - this.files[uploadId] = { - filename:settings.name, - messageids:[], - mime:settings.mime, - sizeInBytes:0, + if (metadata.owner) { + await files.index(metadata.owner, uploadId) + } - owner:settings.owner, - visibility: settings.owner ? "private" : "public", - reserved: true, + // get buffer + if ( + buffer.byteLength >= + this.config.maxDiscordFileSize * this.config.maxDiscordFiles + ) + throw { status: 400, message: "file too large" } - chunkSize: this.config.maxDiscordFileSize - } - - // save - - if (settings.owner) { - await files.index(settings.owner,uploadId) - } - - // get buffer - if (fBuffer.byteLength >= (this.config.maxDiscordFileSize*this.config.maxDiscordFiles)) { - reject({status:400,message:"file too large"}); - return - } - - // generate buffers to upload - let toUpload = [] - for (let i = 0; i < Math.ceil(fBuffer.byteLength/this.config.maxDiscordFileSize); i++) { - toUpload.push( - fBuffer.subarray( - i*this.config.maxDiscordFileSize, - Math.min( - fBuffer.byteLength, - (i+1)*this.config.maxDiscordFileSize - ) + // generate buffers to upload + let toUpload = [] + for ( + let i = 0; + i < Math.ceil(buffer.byteLength / this.config.maxDiscordFileSize); + i++ + ) { + toUpload.push( + buffer.subarray( + i * this.config.maxDiscordFileSize, + Math.min( + buffer.byteLength, + (i + 1) * this.config.maxDiscordFileSize ) ) + ) + } + + // begin uploading + let uploadTmplt: Discord.AttachmentBuilder[] = toUpload.map((e) => { + return new Discord.AttachmentBuilder(e).setName( + Math.random().toString().slice(2) + ) + }) + let uploadGroups = [] + + for (let i = 0; i < Math.ceil(uploadTmplt.length / 10); i++) { + uploadGroups.push(uploadTmplt.slice(i * 10, (i + 1) * 10)) + } + + let msgIds = [] + + for (const uploadGroup of uploadGroups) { + let message = await this.uploadChannel + .send({ + files: uploadGroup, + }) + .catch((e) => { + console.error(e) + }) + + if (message && message instanceof Message) { + msgIds.push(message.id) + } else { + if (!existingFile) delete this.files[uploadId] + else this.files[uploadId] = existingFile + throw { status: 500, message: "please try again" } } - - // begin uploading - let uploadTmplt:Discord.AttachmentBuilder[] = toUpload.map((e) => { - return new Discord.AttachmentBuilder(e) - .setName(Math.random().toString().slice(2)) - }) - let uploadGroups = [] - for (let i = 0; i < Math.ceil(uploadTmplt.length/10); i++) { - uploadGroups.push(uploadTmplt.slice(i*10,((i+1)*10))) + } + + // this code deletes the files from discord, btw + // if need be, replace with job queue system + + if (existingFile && this.uploadChannel) { + for (let x of existingFile.messageids) { + this.uploadChannel.messages + .delete(x) + .catch((err) => console.error(err)) } - - let msgIds = [] - - for (let i = 0; i < uploadGroups.length; i++) { + } - let ms = await this.uploadChannel.send({ - files:uploadGroups[i] - }).catch((e) => {console.error(e)}) + const { filename, mime, owner } = metadata + return this.writeFile(uploadId, { + filename, + messageids: msgIds, + mime, + owner, + sizeInBytes: buffer.byteLength, - if (ms) { - msgIds.push(ms.id) - } else { - if (!ogf) delete this.files[uploadId] - else this.files[uploadId] = ogf - reject({status:500,message:"please try again"}); return - } - } + visibility: existingFile + ? existingFile.visibility + : metadata.owner + ? Accounts.getFromId(metadata.owner)?.defaultFileVisibility + : undefined, + // so that json.stringify doesnt include tag:undefined + ...((existingFile || {}).tag ? { tag: existingFile.tag } : {}), - // this code deletes the files from discord, btw - // if need be, replace with job queue system - - if (ogf&&this.uploadChannel) { - for (let x of ogf.messageids) { - this.uploadChannel.messages.delete(x).catch(err => console.error(err)) - } - } - - resolve(await this.writeFile( - uploadId, - { - filename:settings.name, - messageids:msgIds, - mime:settings.mime, - sizeInBytes:fBuffer.byteLength, - - owner:settings.owner, - visibility: ogf ? ogf.visibility - : ( - settings.owner - ? Accounts.getFromId(settings.owner)?.defaultFileVisibility - : undefined - ), - // so that json.stringify doesnt include tag:undefined - ...((ogf||{}).tag ? {tag:ogf.tag} : {}), - - chunkSize: this.config.maxDiscordFileSize - } - )) - - + chunkSize: this.config.maxDiscordFileSize, }) } - + // fs /** @@ -264,24 +255,26 @@ export default class Files { * @param file FilePointer representing the new file * @returns Promise which resolves to the file's ID */ - writeFile(uploadId: string, file: FilePointer):Promise { - return new Promise((resolve, reject) => { + async writeFile(uploadId: string, file: FilePointer): Promise { + this.files[uploadId] = file - this.files[uploadId] = file - - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(this.files),(err) => { - - if (err) { - reject({status:500,message:"server may be misconfigured, contact admin for help"}); - delete this.files[uploadId]; - return + return writeFile( + process.cwd() + "/.data/files.json", + JSON.stringify( + this.files, + null, + process.env.NODE_ENV === "development" ? 4 : undefined + ) + ) + .then(() => uploadId) + .catch(() => { + delete this.files[uploadId] + throw { + status: 500, + message: + "server may be misconfigured, contact admin for help", } - - resolve(uploadId) - }) - - }) } /** @@ -290,139 +283,183 @@ export default class Files { * @param range Byte range to get * @returns A `Readable` containing the file's contents */ - readFileStream(uploadId: string, range?: {start:number, end:number}):Promise { - return new Promise(async (resolve,reject) => { - if (!this.uploadChannel) { - reject({status:503,message:"server is not ready - please try again later"}) - return + async readFileStream( + uploadId: string, + range?: { start: number; end: number } + ): Promise { + if (!this.uploadChannel) { + throw { + status: 503, + message: "server is not ready - please try again later", + } + } + + if (this.files[uploadId]) { + let file = this.files[uploadId] + + let scan_msg_begin = 0, + scan_msg_end = file.messageids.length - 1, + scan_files_begin = 0, + scan_files_end = -1 + + let useRanges = range && file.chunkSize && file.sizeInBytes + + // todo: figure out how to get typesccript to accept useRanges + // i'm too tired to look it up or write whatever it wnats me to do + if (range && file.chunkSize && file.sizeInBytes) { + // Calculate where to start file scans... + + scan_files_begin = Math.floor(range.start / file.chunkSize) + scan_files_end = Math.ceil(range.end / file.chunkSize) - 1 + + scan_msg_begin = Math.floor(scan_files_begin / 10) + scan_msg_end = Math.ceil(scan_files_end / 10) } - if (this.files[uploadId]) { - let file = this.files[uploadId] + let attachments: Discord.Attachment[] = [] - let - scan_msg_begin = 0, - scan_msg_end = file.messageids.length-1, - scan_files_begin = 0, - scan_files_end = -1 + /* File updates */ + let file_updates: Pick = + {} + let atSIB: number[] = [] // kepes track of the size of each file... - let useRanges = range && file.chunkSize && file.sizeInBytes; - - // todo: figure out how to get typesccript to accept useRanges - // i'm too tired to look it up or write whatever it wnats me to do - if (range && file.chunkSize && file.sizeInBytes) { - - // Calculate where to start file scans... - - scan_files_begin = Math.floor(range.start / file.chunkSize) - scan_files_end = Math.ceil(range.end / file.chunkSize) - 1 - - scan_msg_begin = Math.floor(scan_files_begin / 10) - scan_msg_end = Math.ceil(scan_files_end / 10) - - } - - let attachments: Discord.Attachment[] = []; - - /* File updates */ - let file_updates: Pick = {} - let atSIB: number[] = [] // kepes track of the size of each file... - - for (let xi = scan_msg_begin; xi < scan_msg_end+1; xi++) { - - let msg = await this.uploadChannel.messages.fetch(file.messageids[xi]).catch(() => {return null}) - if (msg?.attachments) { - - let attach = Array.from(msg.attachments.values()) - for (let i = (useRanges && xi == scan_msg_begin ? ( scan_files_begin - (xi*10) ) : 0); i < (useRanges && xi == scan_msg_end ? ( scan_files_end - (xi*10) + 1 ) : attach.length); i++) { - - attachments.push(attach[i]) - atSIB.push(attach[i].size) - - } - - } - - } - - if (!file.sizeInBytes) file_updates.sizeInBytes = atSIB.reduce((a,b) => a+b, 0); - if (!file.chunkSize) file_updates.chunkSize = atSIB[0] - if (Object.keys(file_updates).length) { // if file_updates not empty - // i gotta do these weird workarounds, ts is weird sometimes - // originally i was gonna do key is keyof FilePointer but for some reason - // it ended up making typeof file[key] never??? so - // its 10pm and chinese people suck at being quiet so i just wanna get this over with - // chinese is the worst language in terms of volume lmao - let valid_fp_keys = ["sizeInBytes", "chunkSize"] - let isValidFilePointerKey = (key: string): key is "sizeInBytes" | "chunkSize" => valid_fp_keys.includes(key) - - for (let [key,value] of Object.entries(file_updates)) { - if (isValidFilePointerKey(key)) file[key] = value - } - - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(this.files),(err) => {}) - } - - let position = 0; - - let getNextChunk = async () => { - let scanning_chunk = attachments[position] - if (!scanning_chunk) { + for (let xi = scan_msg_begin; xi < scan_msg_end + 1; xi++) { + let msg = await this.uploadChannel.messages + .fetch(file.messageids[xi]) + .catch(() => { return null - } - - let d = await axios.get( - scanning_chunk.url, - { - responseType:"arraybuffer", - headers: { - ...(useRanges ? { - "Range": `bytes=${position == 0 && range && file.chunkSize ? range.start-(scan_files_begin*file.chunkSize) : "0"}-${position == attachments.length-1 && range && file.chunkSize ? range.end-(scan_files_end*file.chunkSize) : ""}` - } : {}) - } - } - ).catch((e:Error) => {console.error(e)}) - - position++; - - if (d) { - return d.data - } else { - reject({status:500,message:"internal server error"}) - return "__ERR" + }) + if (msg?.attachments) { + let attach = Array.from(msg.attachments.values()) + for ( + let i = + useRanges && xi == scan_msg_begin + ? scan_files_begin - xi * 10 + : 0; + i < + (useRanges && xi == scan_msg_end + ? scan_files_end - xi * 10 + 1 + : attach.length); + i++ + ) { + attachments.push(attach[i]) + atSIB.push(attach[i].size) } } - - let ord:number[] = [] - // hopefully this regulates it? - let lastChunkSent = true - - let dataStream = new Readable({ - read(){ - if (!lastChunkSent) return - lastChunkSent = false - getNextChunk().then(async (nextChunk) => { - if (nextChunk == "__ERR") {this.destroy(new Error("file read error")); return} - let response = this.push(nextChunk) - - if (!nextChunk) return // EOF - - while (response) { - let nextChunk = await getNextChunk() - response = this.push(nextChunk) - if (!nextChunk) return - } - lastChunkSent = true - }) - } - }) - - resolve(dataStream) - - } else { - reject({status:404,message:"not found"}) } - }) + + if (!file.sizeInBytes) + file_updates.sizeInBytes = atSIB.reduce((a, b) => a + b, 0) + if (!file.chunkSize) file_updates.chunkSize = atSIB[0] + if (Object.keys(file_updates).length) { + // if file_updates not empty + // i gotta do these weird workarounds, ts is weird sometimes + // originally i was gonna do key is keyof FilePointer but for some reason + // it ended up making typeof file[key] never??? so + // its 10pm and chinese people suck at being quiet so i just wanna get this over with + // chinese is the worst language in terms of volume lmao + let valid_fp_keys = ["sizeInBytes", "chunkSize"] + let isValidFilePointerKey = ( + key: string + ): key is "sizeInBytes" | "chunkSize" => + valid_fp_keys.includes(key) + + for (let [key, value] of Object.entries(file_updates)) { + if (isValidFilePointerKey(key)) file[key] = value + } + + // The original was a callback so I don't think I'm supposed to `await` this -Jack + writeFile( + process.cwd() + "/.data/files.json", + JSON.stringify( + this.files, + null, + process.env.NODE_ENV === "development" ? 4 : undefined + ) + ) + } + + let position = 0 + + let getNextChunk = async () => { + let scanning_chunk = attachments[position] + if (!scanning_chunk) { + return null + } + + let d = await axios + .get(scanning_chunk.url, { + responseType: "arraybuffer", + headers: { + ...(useRanges + ? { + Range: `bytes=${ + position == 0 && + range && + file.chunkSize + ? range.start - + scan_files_begin * + file.chunkSize + : "0" + }-${ + position == attachments.length - 1 && + range && + file.chunkSize + ? range.end - + scan_files_end * file.chunkSize + : "" + }`, + } + : {}), + }, + }) + .catch((e: Error) => { + console.error(e) + }) + + position++ + + if (d) { + return d.data + } else { + throw { + status: 500, + message: "internal server error", + } + } + } + + let ord: number[] = [] + // hopefully this regulates it? + let lastChunkSent = true + + let dataStream = new Readable({ + read() { + if (!lastChunkSent) return + lastChunkSent = false + getNextChunk().then(async (nextChunk) => { + if (nextChunk == "__ERR") { + this.destroy(new Error("file read error")) + return + } + let response = this.push(nextChunk) + + if (!nextChunk) return // EOF + + while (response) { + let nextChunk = await getNextChunk() + response = this.push(nextChunk) + if (!nextChunk) return + } + lastChunkSent = true + }) + }, + }) + + return dataStream + } else { + throw { status: 404, message: "not found" } + } } /** @@ -430,33 +467,41 @@ export default class Files { * @param uploadId Target file's ID * @param noWrite Whether or not the change should be written to disk. Enable for bulk deletes */ - unlink(uploadId:string, noWrite: boolean = false):Promise { - return new Promise(async (resolve,reject) => { - let tmp = this.files[uploadId]; - if (!tmp) {resolve(); return} - if (tmp.owner) { - let id = files.deindex(tmp.owner,uploadId,noWrite); - if (id) await id - } - // this code deletes the files from discord, btw - // if need be, replace with job queue system + async unlink(uploadId: string, noWrite: boolean = false): Promise { + let tmp = this.files[uploadId] + if (!tmp) { + return + } + if (tmp.owner) { + let id = files.deindex(tmp.owner, uploadId, noWrite) + if (id) await id + } + // this code deletes the files from discord, btw + // if need be, replace with job queue system - if (!this.uploadChannel) {reject(); return} - for (let x of tmp.messageids) { - this.uploadChannel.messages.delete(x).catch(err => console.error(err)) - } - - delete this.files[uploadId]; - if (noWrite) {resolve(); return} - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(this.files),(err) => { - if (err) { - this.files[uploadId] = tmp // !! this may not work, since tmp is a link to this.files[uploadId]? - reject() - } else { - resolve() - } - }) + if (!this.uploadChannel) { + return + } + for (let x of tmp.messageids) { + this.uploadChannel.messages + .delete(x) + .catch((err) => console.error(err)) + } + delete this.files[uploadId] + if (noWrite) { + return + } + return writeFile( + process.cwd() + "/.data/files.json", + JSON.stringify( + this.files, + null, + process.env.NODE_ENV === "development" ? 4 : undefined + ) + ).catch((err) => { + this.files[uploadId] = tmp // !! this may not work, since tmp is a link to this.files[uploadId]? + throw err }) } @@ -465,8 +510,7 @@ export default class Files { * @param uploadId Target file's ID * @returns FilePointer for the file */ - getFilePointer(uploadId:string):FilePointer { + getFilePointer(uploadId: string): FilePointer { return this.files[uploadId] } - } diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index afdcec8..30b98a6 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -1,203 +1,238 @@ -import bodyParser from "body-parser"; -import express, { Router } from "express"; -import * as Accounts from "../../../lib/accounts"; -import * as auth from "../../../lib/auth"; +import bodyParser from "body-parser" +import express, { Router } from "express" +import * as Accounts from "../../../lib/accounts" +import * as auth from "../../../lib/auth" import axios, { AxiosResponse } from "axios" -import { type Range } from "range-parser"; -import multer, {memoryStorage} from "multer" +import { type Range } from "range-parser" +import multer, { memoryStorage } from "multer" -import ServeError from "../../../lib/errors"; -import Files from "../../../lib/files"; -import { getAccount, requiresPermissions } from "../../../lib/middleware"; +import ServeError from "../../../lib/errors" +import Files from "../../../lib/files" +import { getAccount, requiresPermissions } from "../../../lib/middleware" let parser = bodyParser.json({ - type: ["text/plain","application/json"] + type: ["text/plain", "application/json"], }) -export let primaryApi = Router(); +export let primaryApi = Router() -const multerSetup = multer({storage:memoryStorage()}) +const multerSetup = multer({ storage: memoryStorage() }) let config = require(`${process.cwd()}/config.json`) -primaryApi.use(getAccount); +primaryApi.use(getAccount) -module.exports = function(files: Files) { +module.exports = function (files: Files) { + primaryApi.get( + ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], + async (req: express.Request, res: express.Response) => { + let acc = res.locals.acc as Accounts.Account - primaryApi.get(["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], async (req:express.Request,res:express.Response) => { - - let acc = res.locals.acc as Accounts.Account + let file = files.getFilePointer(req.params.fileId) + res.setHeader("Access-Control-Allow-Origin", "*") + res.setHeader("Content-Security-Policy", "sandbox allow-scripts") + if (req.query.attachment == "1") + res.setHeader("Content-Disposition", "attachment") - let file = files.getFilePointer(req.params.fileId) - res.setHeader("Access-Control-Allow-Origin", "*") - res.setHeader("Content-Security-Policy","sandbox allow-scripts") - if (req.query.attachment == "1") res.setHeader("Content-Disposition", "attachment") - - if (file) { - - if (file.visibility == "private") { - if (acc?.id != file.owner) { - ServeError(res,403,"you do not own this file") - return - } + if (file) { + if (file.visibility == "private") { + if (acc?.id != file.owner) { + ServeError(res, 403, "you do not own this file") + return + } - if (auth.getType(auth.tokenFor(req)) == "App" && auth.getPermissions(auth.tokenFor(req))?.includes("private")) { - ServeError(res,403,"insufficient permissions") - return - } - } - - let range: Range | undefined - - res.setHeader("Content-Type",file.mime) - if (file.sizeInBytes) { - res.setHeader("Content-Length",file.sizeInBytes) - - if (file.chunkSize) { - let rng = req.range(file.sizeInBytes) - if (rng) { - - // error handling - if (typeof rng == "number") { - res.status(rng == -1 ? 416 : 400).send() - return - } - if (rng.type != "bytes") { - res.status(400).send(); - return - } - - // set ranges var - let rngs = Array.from(rng) - if (rngs.length != 1) { res.status(400).send(); return } - range = rngs[0] - + if ( + auth.getType(auth.tokenFor(req)) == "App" && + auth + .getPermissions(auth.tokenFor(req)) + ?.includes("private") + ) { + ServeError(res, 403, "insufficient permissions") + return } } - } - // supports ranges - + let range: Range | undefined - files.readFileStream(req.params.fileId, range).then(async stream => { + res.setHeader("Content-Type", file.mime) + if (file.sizeInBytes) { + res.setHeader("Content-Length", file.sizeInBytes) - if (range) { - res.status(206) - res.header("Content-Length", (range.end-range.start + 1).toString()) - res.header("Content-Range", `bytes ${range.start}-${range.end}/${file.sizeInBytes}`) + if (file.chunkSize) { + let rng = req.range(file.sizeInBytes) + if (rng) { + // error handling + if (typeof rng == "number") { + res.status(rng == -1 ? 416 : 400).send() + return + } + if (rng.type != "bytes") { + res.status(400).send() + return + } + + // set ranges var + let rngs = Array.from(rng) + if (rngs.length != 1) { + res.status(400).send() + return + } + range = rngs[0] + } + } } - stream.pipe(res) - - }).catch((err) => { - ServeError(res,err.status,err.message) - }) - } else { - ServeError(res, 404, "file not found") - } - - }) + // supports ranges - primaryApi.head(["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], (req: express.Request, res:express.Response) => { - let file = files.getFilePointer(req.params.fileId) - - if ( - file.visibility == "private" - && ( - res.locals.acc?.id != file.owner - || (auth.getType(auth.tokenFor(req)) == "App" && auth.getPermissions(auth.tokenFor(req))?.includes("private")) - ) - ) { - res.status(403).send() - return - } - - res.setHeader("Access-Control-Allow-Origin", "*") - res.setHeader("Content-Security-Policy","sandbox allow-scripts") - - if (req.query.attachment == "1") res.setHeader("Content-Disposition", "attachment") - - if (!file) { - res.status(404) - res.send() - } else { - res.setHeader("Content-Type",file.mime) - if (file.sizeInBytes) { - res.setHeader("Content-Length",file.sizeInBytes) + files + .readFileStream(req.params.fileId, range) + .then(async (stream) => { + if (range) { + res.status(206) + res.header( + "Content-Length", + (range.end - range.start + 1).toString() + ) + res.header( + "Content-Range", + `bytes ${range.start}-${range.end}/${file.sizeInBytes}` + ) + } + stream.pipe(res) + }) + .catch((err) => { + ServeError(res, err.status, err.message) + }) + } else { + ServeError(res, 404, "file not found") } - if (file.chunkSize) { - res.setHeader("Accept-Ranges", "bytes") - } - res.send() } - }) + ) + + primaryApi.head( + ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], + (req: express.Request, res: express.Response) => { + let file = files.getFilePointer(req.params.fileId) + + if ( + file.visibility == "private" && + (res.locals.acc?.id != file.owner || + (auth.getType(auth.tokenFor(req)) == "App" && + auth + .getPermissions(auth.tokenFor(req)) + ?.includes("private"))) + ) { + res.status(403).send() + return + } + + res.setHeader("Access-Control-Allow-Origin", "*") + res.setHeader("Content-Security-Policy", "sandbox allow-scripts") + + if (req.query.attachment == "1") + res.setHeader("Content-Disposition", "attachment") + + if (!file) { + res.status(404) + res.send() + } else { + res.setHeader("Content-Type", file.mime) + if (file.sizeInBytes) { + res.setHeader("Content-Length", file.sizeInBytes) + } + if (file.chunkSize) { + res.setHeader("Accept-Ranges", "bytes") + } + res.send() + } + } + ) // upload handlers - primaryApi.post("/upload", requiresPermissions("upload"), multerSetup.single('file'), async (req,res) => { - - let acc = res.locals.acc as Accounts.Account + primaryApi.post( + "/upload", + requiresPermissions("upload"), + multerSetup.single("file"), + async (req, res) => { + let acc = res.locals.acc as Accounts.Account - if (req.file) { - try { - let prm = req.header("monofile-params") - let params:{[key:string]:any} = {} - if (prm) { - params = JSON.parse(prm) + if (req.file) { + try { + let prm = req.header("monofile-params") + let params: { [key: string]: any } = {} + if (prm) { + params = JSON.parse(prm) + } + + files + .uploadFile( + { + owner: acc?.id, + + uploadId: params.uploadId, + filename: req.file.originalname, + mime: req.file.mimetype, + }, + req.file.buffer + ) + .then((uID) => res.send(uID)) + .catch((stat) => { + res.status(stat.status) + res.send(`[err] ${stat.message}`) + }) + } catch { + res.status(400) + res.send("[err] bad request") } - - files.uploadFile({ - owner: acc?.id, - - uploadId:params.uploadId, - name:req.file.originalname, - mime:req.file.mimetype - },req.file.buffer) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status); - res.send(`[err] ${stat.message}`) - }) - } catch { + } else { res.status(400) res.send("[err] bad request") } - } else { - res.status(400) - res.send("[err] bad request") } - }) + ) - primaryApi.post("/clone", requiresPermissions("upload"), bodyParser.json({type: ["text/plain","application/json"]}) ,(req,res) => { - - let acc = res.locals.acc as Accounts.Account + primaryApi.post( + "/clone", + requiresPermissions("upload"), + bodyParser.json({ type: ["text/plain", "application/json"] }), + (req, res) => { + let acc = res.locals.acc as Accounts.Account - try { - axios.get(req.body.url,{responseType:"arraybuffer"}).then((data:AxiosResponse) => { - - files.uploadFile({ - owner: acc?.id, - - name:req.body.url.split("/")[req.body.url.split("/").length-1] || "generic", - mime:data.headers["content-type"], - uploadId:req.body.uploadId - },Buffer.from(data.data)) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status); - res.send(`[err] ${stat.message}`) + try { + axios + .get(req.body.url, { responseType: "arraybuffer" }) + .then((data: AxiosResponse) => { + files + .uploadFile( + { + owner: acc?.id, + filename: + req.body.url.split("/")[ + req.body.url.split("/").length - 1 + ] || "generic", + mime: data.headers["content-type"], + uploadId: req.body.uploadId, + }, + Buffer.from(data.data) + ) + .then((uID) => res.send(uID)) + .catch((stat) => { + res.status(stat.status) + res.send(`[err] ${stat.message}`) + }) }) - - }).catch((err) => { - console.log(err) - res.status(400) - res.send(`[err] failed to fetch data`) - }) - } catch { - res.status(500) - res.send("[err] an error occured") + .catch((err) => { + console.log(err) + res.status(400) + res.send(`[err] failed to fetch data`) + }) + } catch { + res.status(500) + res.send("[err] an error occured") + } } - }) + ) return primaryApi -} \ No newline at end of file +} From b135dc79eae98d4238d5676b59a32a37d4f2f1c4 Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Tue, 24 Oct 2023 16:33:15 -0400 Subject: [PATCH 027/173] refactor: :recycle: Use .replaceAll instead of /g --- src/server/index.ts | 189 +++++++++++++++++++++++---------------- src/server/lib/errors.ts | 6 +- src/server/lib/mail.ts | 41 +++++---- tsconfig.json | 2 +- 4 files changed, 137 insertions(+), 101 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index 6baf6c6..f023eaa 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,14 +1,14 @@ -import cookieParser from "cookie-parser"; +import cookieParser from "cookie-parser" import { IntentsBitField, Client } from "discord.js" import express from "express" import fs from "fs" -import bytes from "bytes"; +import bytes from "bytes" import ServeError from "./lib/errors" import Files from "./lib/files" import * as auth from "./lib/auth" import * as Accounts from "./lib/accounts" -import { getAccount } from "./lib/middleware"; +import { getAccount } from "./lib/middleware" import APIRouter from "./routes/api" @@ -18,9 +18,9 @@ let pkg = require(`${process.cwd()}/package.json`) let app = express() let config = require(`${process.cwd()}/config.json`) -app.use("/static/assets",express.static("assets")) -app.use("/static/style",express.static("out/style")) -app.use("/static/js",express.static("out/client")) +app.use("/static/assets", express.static("assets")) +app.use("/static/style", express.static("out/style")) +app.use("/static/js", express.static("out/client")) //app.use(bodyParser.text({limit:(config.maxDiscordFileSize*config.maxDiscordFiles)+1048576,type:["application/json","text/plain"]})) @@ -29,34 +29,41 @@ app.use(cookieParser()) // check for ssl, if not redirect if (config.trustProxy) app.enable("trust proxy") if (config.forceSSL) { - app.use((req,res,next) => { - if (req.protocol == "http") res.redirect(`https://${req.get("host")}${req.originalUrl}`) + app.use((req, res, next) => { + if (req.protocol == "http") + res.redirect(`https://${req.get("host")}${req.originalUrl}`) else next() }) } -app.get("/server",(req,res) => { - res.send(JSON.stringify({ - ...config, - version:pkg.version, - files:Object.keys(files.files).length - })) +app.get("/server", (req, res) => { + res.send( + JSON.stringify({ + ...config, + version: pkg.version, + files: Object.keys(files.files).length, + }) + ) }) // funcs // init data -if (!fs.existsSync(__dirname+"/../.data/")) fs.mkdirSync(__dirname+"/../.data/") +if (!fs.existsSync(__dirname + "/../.data/")) + fs.mkdirSync(__dirname + "/../.data/") // discord -let client = new Client({intents:[ - IntentsBitField.Flags.GuildMessages, - IntentsBitField.Flags.MessageContent -],rest:{timeout:config.requestTimeout}}) +let client = new Client({ + intents: [ + IntentsBitField.Flags.GuildMessages, + IntentsBitField.Flags.MessageContent, + ], + rest: { timeout: config.requestTimeout }, +}) -let files = new Files(client,config) +let files = new Files(client, config) let apiRouter = new APIRouter(files) apiRouter.loadAPIMethods().then(() => { @@ -66,88 +73,118 @@ apiRouter.loadAPIMethods().then(() => { // index, clone -app.get("/", function(req,res) { - res.sendFile(process.cwd()+"/pages/index.html") +app.get("/", function (req, res) { + res.sendFile(process.cwd() + "/pages/index.html") }) // serve download page -app.get("/download/:fileId", getAccount, (req,res) => { - +app.get("/download/:fileId", getAccount, (req, res) => { let acc = res.locals.acc as Accounts.Account if (files.getFilePointer(req.params.fileId)) { let file = files.getFilePointer(req.params.fileId) if (file.visibility == "private" && acc?.id != file.owner) { - ServeError(res,403,"you do not own this file") + ServeError(res, 403, "you do not own this file") return } - fs.readFile(process.cwd()+"/pages/download.html",(err,buf) => { - let fileOwner = file.owner ? Accounts.getFromId(file.owner) : undefined; - if (err) {res.sendStatus(500);console.log(err);return} + fs.readFile(process.cwd() + "/pages/download.html", (err, buf) => { + let fileOwner = file.owner + ? Accounts.getFromId(file.owner) + : undefined + if (err) { + res.sendStatus(500) + console.log(err) + return + } res.send( - buf.toString() - .replace(/\$FileId/g,req.params.fileId) - .replace(/\$Version/g,pkg.version) - .replace(/\$FileSize/g,file.sizeInBytes ? bytes(file.sizeInBytes) : "[File size unknown]") - .replace(/\$FileName/g, - file.filename - .replace(/\&/g,"&") - .replace(/\/g,">") - ) - .replace(/\<\!\-\-metaTags\-\-\>/g, - ( - file.mime.startsWith("image/") - ? `` - : ( - file.mime.startsWith("video/") - ? ( - ` - + buf + .toString() + .replaceAll("$FileId", req.params.fileId) + .replaceAll("$Version", pkg.version) + .replaceAll( + "$FileSize", + file.sizeInBytes + ? bytes(file.sizeInBytes) + : "[File size unknown]" + ) + .replaceAll( + "$FileName", + file.filename + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + ) + .replace( + "", + (file.mime.startsWith("image/") + ? `` + : file.mime.startsWith("video/") + ? ` + - ` - // quick lazy fix as a fallback - // maybe i'll improve this later, but probably not. - + ((file.sizeInBytes||0) >= 26214400 ? ` + ` + + // quick lazy fix as a fallback + // maybe i'll improve this later, but probably not. + ((file.sizeInBytes || 0) >= 26214400 + ? ` - ` : "") - ) - : "" - ) + ` + : "") + : "") + + (fileOwner?.embed?.largeImage && + file.visibility != "anonymous" && + file.mime.startsWith("image/") + ? `` + : "") + + `\n` ) - + ( - fileOwner?.embed?.largeImage && file.visibility!="anonymous" && file.mime.startsWith("image/") - ? `` - : "" - ) - + `\n` - ) - .replace(/\<\!\-\-preview\-\-\>/g, - file.mime.startsWith("image/") - ? `
` - : ( - file.mime.startsWith("video/") - ? `
` - : ( - file.mime.startsWith("audio/") + .replace( + "", + file.mime.startsWith("image/") + ? `
` + : file.mime.startsWith("video/") + ? `
` + : file.mime.startsWith("audio/") ? `
` : "" - ) ) - ) - .replace(/\$Uploader/g,!file.owner||file.visibility=="anonymous" ? "Anonymous" : `@${fileOwner?.username || "Deleted User"}`) + .replaceAll( + "$Uploader", + !file.owner || file.visibility == "anonymous" + ? "Anonymous" + : `@${fileOwner?.username || "Deleted User"}` + ) ) }) } else { - ServeError(res,404,"file not found") + ServeError(res, 404, "file not found") } }) - /* routes should be in this order: @@ -159,7 +196,7 @@ app.get("/download/:fileId", getAccount, (req,res) => { // listen on 3000 or MONOFILE_PORT -app.listen(process.env.MONOFILE_PORT || 3000,function() { +app.listen(process.env.MONOFILE_PORT || 3000, function () { console.log("Web OK!") }) diff --git a/src/server/lib/errors.ts b/src/server/lib/errors.ts index 84c1cc5..cb53535 100644 --- a/src/server/lib/errors.ts +++ b/src/server/lib/errors.ts @@ -31,8 +31,8 @@ export default async function ServeError( res.header("x-backup-status-message", reason) // glitch default nginx configuration res.send( errorPage - .replace(/\$code/g,code.toString()) - .replace(/\$text/g,reason) + .replaceAll("$code",code.toString()) + .replaceAll("$text",reason) ) } /** @@ -45,4 +45,4 @@ export function Redirect(res:Response,url:string) { res.status(302) res.header("Location",url) res.send() -} \ No newline at end of file +} diff --git a/src/server/lib/mail.ts b/src/server/lib/mail.ts index 3ee1b38..7d7bf29 100644 --- a/src/server/lib/mail.ts +++ b/src/server/lib/mail.ts @@ -1,21 +1,16 @@ -import { createTransport } from "nodemailer"; +import { createTransport } from "nodemailer" // required i guess require("dotenv").config() -let -mailConfig = - require( process.cwd() + "/config.json" ).mail, -transport = - createTransport( - { - ...mailConfig.transport, - auth: { - user: process.env.MAIL_USER, - pass: process.env.MAIL_PASS - } - } - ) +let mailConfig = require(process.cwd() + "/config.json").mail, + transport = createTransport({ + ...mailConfig.transport, + auth: { + user: process.env.MAIL_USER, + pass: process.env.MAIL_PASS, + }, + }) // lazy but @@ -30,11 +25,15 @@ export function sendMail(to: string, subject: string, content: string) { return transport.sendMail({ to, subject, - "from": mailConfig.send.from, - "html": `monofile accounts
Gain control of your uploads.

${ - content - .replace(/\/g, `@`) - .replace(/\/g,``) - }

If you do not believe that you are the intended recipient of this email, please disregard this message.` + from: mailConfig.send.from, + html: `monofile accounts
Gain control of your uploads.

${content + .replaceAll( + "", + `@` + ) + .replaceAll( + "", + `` + )}

If you do not believe that you are the intended recipient of this email, please disregard this message.`, }) -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 1867d13..e7dbb82 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ From b71963a4911c2c1433a4530032476d12678edac9 Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Tue, 24 Oct 2023 16:50:14 -0400 Subject: [PATCH 028/173] refactor: :truck: Move preview to new file --- src/server/index.ts | 110 ++---------------------------------------- src/server/preview.ts | 109 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 107 deletions(-) create mode 100644 src/server/preview.ts diff --git a/src/server/index.ts b/src/server/index.ts index f023eaa..730145d 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -6,15 +6,15 @@ import bytes from "bytes" import ServeError from "./lib/errors" import Files from "./lib/files" -import * as auth from "./lib/auth" import * as Accounts from "./lib/accounts" import { getAccount } from "./lib/middleware" import APIRouter from "./routes/api" +import preview from "./preview" require("dotenv").config() -let pkg = require(`${process.cwd()}/package.json`) +const pkg = require(`${process.cwd()}/package.json`) let app = express() let config = require(`${process.cwd()}/config.json`) @@ -79,111 +79,7 @@ app.get("/", function (req, res) { // serve download page -app.get("/download/:fileId", getAccount, (req, res) => { - let acc = res.locals.acc as Accounts.Account - - if (files.getFilePointer(req.params.fileId)) { - let file = files.getFilePointer(req.params.fileId) - - if (file.visibility == "private" && acc?.id != file.owner) { - ServeError(res, 403, "you do not own this file") - return - } - - fs.readFile(process.cwd() + "/pages/download.html", (err, buf) => { - let fileOwner = file.owner - ? Accounts.getFromId(file.owner) - : undefined - if (err) { - res.sendStatus(500) - console.log(err) - return - } - res.send( - buf - .toString() - .replaceAll("$FileId", req.params.fileId) - .replaceAll("$Version", pkg.version) - .replaceAll( - "$FileSize", - file.sizeInBytes - ? bytes(file.sizeInBytes) - : "[File size unknown]" - ) - .replaceAll( - "$FileName", - file.filename - .replaceAll("&", "&") - .replaceAll("<", "<") - .replaceAll(">", ">") - ) - .replace( - "", - (file.mime.startsWith("image/") - ? `` - : file.mime.startsWith("video/") - ? ` - - - - ` + - // quick lazy fix as a fallback - // maybe i'll improve this later, but probably not. - ((file.sizeInBytes || 0) >= 26214400 - ? ` - - ` - : "") - : "") + - (fileOwner?.embed?.largeImage && - file.visibility != "anonymous" && - file.mime.startsWith("image/") - ? `` - : "") + - `\n` - ) - .replace( - "", - file.mime.startsWith("image/") - ? `
` - : file.mime.startsWith("video/") - ? `
` - : file.mime.startsWith("audio/") - ? `
` - : "" - ) - .replaceAll( - "$Uploader", - !file.owner || file.visibility == "anonymous" - ? "Anonymous" - : `@${fileOwner?.username || "Deleted User"}` - ) - ) - }) - } else { - ServeError(res, 404, "file not found") - } -}) +app.get("/download/:fileId", getAccount, preview(files)) /* routes should be in this order: diff --git a/src/server/preview.ts b/src/server/preview.ts new file mode 100644 index 0000000..af52cb2 --- /dev/null +++ b/src/server/preview.ts @@ -0,0 +1,109 @@ +import fs from "fs/promises" +import bytes from "bytes" +import ServeError from "./lib/errors" +import * as Accounts from "./lib/accounts" +import type { Handler } from "express" +import type Files from "./lib/files" +const pkg = require(`${process.cwd()}/package.json`) +export = (files: Files): Handler => + async (req, res) => { + let acc = res.locals.acc as Accounts.Account + const file = files.getFilePointer(req.params.fileId) + if (file) { + if (file.visibility == "private" && acc?.id != file.owner) { + ServeError(res, 403, "you do not own this file") + return + } + + const template = await fs + .readFile(process.cwd() + "/pages/download.html", "utf8") + .catch(() => { + throw res.sendStatus(500) + }) + let fileOwner = file.owner + ? Accounts.getFromId(file.owner) + : undefined + + res.send( + template + .replaceAll("$FileId", req.params.fileId) + .replaceAll("$Version", pkg.version) + .replaceAll( + "$FileSize", + file.sizeInBytes + ? bytes(file.sizeInBytes) + : "[File size unknown]" + ) + .replaceAll( + "$FileName", + file.filename + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + ) + .replace( + "", + (file.mime.startsWith("image/") + ? `` + : file.mime.startsWith("video/") + ? ` + + + + ` + + // quick lazy fix as a fallback + // maybe i'll improve this later, but probably not. + ((file.sizeInBytes || 0) >= 26214400 + ? ` + + ` + : "") + : "") + + (fileOwner?.embed?.largeImage && + file.visibility != "anonymous" && + file.mime.startsWith("image/") + ? `` + : "") + + `\n` + ) + .replace( + "", + file.mime.startsWith("image/") + ? `
` + : file.mime.startsWith("video/") + ? `
` + : file.mime.startsWith("audio/") + ? `
` + : "" + ) + .replaceAll( + "$Uploader", + !file.owner || file.visibility == "anonymous" + ? "Anonymous" + : `@${fileOwner?.username || "Deleted User"}` + ) + ) + } else { + ServeError(res, 404, "file not found") + } + } From 6220cd8b0f5668000fcc60b1f70046540ad312dd Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Tue, 24 Oct 2023 17:18:36 -0400 Subject: [PATCH 029/173] refactor: :recycle: Use Vite instead of Rollup Soon: Hono instead of Express --- .gitignore | 3 +- .prettierrc | 6 + config.json | 21 +- package.json | 86 +- pages/index.html | 47 -- pnpm-lock.yaml | 1451 ++++++++++++++++++++++++++++++++++ rollup.config.mjs | 17 - src/client/index.js | 5 - {pages => src}/download.html | 4 +- {pages => src}/error.html | 4 +- src/index.html | 38 + src/server/index.ts | 9 +- src/server/lib/errors.ts | 2 +- src/server/preview.ts | 2 +- src/svelte/index.js | 5 + vite.config.mjs | 18 + 16 files changed, 1580 insertions(+), 138 deletions(-) create mode 100644 .prettierrc delete mode 100644 pages/index.html create mode 100644 pnpm-lock.yaml delete mode 100644 rollup.config.mjs delete mode 100644 src/client/index.js rename {pages => src}/download.html (93%) rename {pages => src}/error.html (88%) create mode 100644 src/index.html create mode 100644 src/svelte/index.js create mode 100644 vite.config.mjs diff --git a/.gitignore b/.gitignore index 7119cfa..2719527 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules .env .data -out \ No newline at end of file +out +dist diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..191f09d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "useTabs": false, + "semi": false, + "trailingComma": "es5", + "tabWidth": 4 +} diff --git a/config.json b/config.json index f2e8469..6122a78 100644 --- a/config.json +++ b/config.json @@ -1,20 +1,14 @@ { - "maxDiscordFiles": 20, - "maxDiscordFileSize": 26214400, - "targetGuild": "1024080490677936248", - "targetChannel": "1024080525993971913", - "requestTimeout":120000, - "maxUploadIdLength":30, - + "maxDiscordFiles": 50, + "maxDiscordFileSize": 10485760, + "targetGuild": "906767804575928390", + "targetChannel": "1160783463696302182", + "requestTimeout": 120000, + "maxUploadIdLength": 30, "accounts": { "registrationEnabled": true, "requiredForUpload": false }, - - "webdrop": { - "accountRequired": false - }, - "mail": { "transport": { "host": "smtp.fastmail.com", @@ -25,7 +19,6 @@ "from": "mono@fyle.uk" } }, - "trustProxy": true, "forceSSL": false -} \ No newline at end of file +} diff --git a/package.json b/package.json index ce118ea..fd6ebee 100644 --- a/package.json +++ b/package.json @@ -1,41 +1,45 @@ -{ - "name": "monofile", - "version": "1.4.0-dev", - "description": "Discord-based file sharing", - "main": "index.js", - "scripts": { - "start": "node ./out/server/index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "nbitzz", - "license": "Unlicense", - "engines": { - "node": ">=v16.11" - }, - "dependencies": { - "@types/body-parser": "^1.19.2", - "@types/express": "^4.17.14", - "@types/multer": "^1.4.7", - "@types/nodemailer": "^6.4.8", - "axios": "^0.27.2", - "body-parser": "^1.20.0", - "bytes": "^3.1.2", - "cookie-parser": "^1.4.6", - "discord.js": "^14.7.1", - "dotenv": "^16.0.2", - "express": "^4.18.1", - "multer": "^1.4.5-lts.1", - "nodemailer": "^6.9.3", - "typescript": "^4.8.3" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "^15.0.1", - "@types/bytes": "^3.1.1", - "@types/cookie-parser": "^1.4.3", - "rollup": "^3.11.0", - "rollup-plugin-svelte": "^7.1.0", - "sass": "^1.57.1", - "svelte": "^3.55.1" - } -} +{ + "name": "monofile", + "version": "1.4.0-dev", + "description": "Discord-based file sharing", + "main": "index.js", + "scripts": { + "start": "node ./out/server/index.js", + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "keywords": [], + "author": "nbitzz", + "license": "Unlicense", + "engines": { + "node": ">=v16.11" + }, + "dependencies": { + "@types/body-parser": "^1.19.2", + "@types/express": "^4.17.14", + "@types/multer": "^1.4.7", + "@types/nodemailer": "^6.4.8", + "axios": "^0.27.2", + "body-parser": "^1.20.0", + "bytes": "^3.1.2", + "cookie-parser": "^1.4.6", + "discord.js": "^14.7.1", + "dotenv": "^16.0.2", + "express": "^4.18.1", + "hono": "^3.8.3", + "multer": "^1.4.5-lts.1", + "nodemailer": "^6.9.3", + "typescript": "^5.2.2" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.4.6", + "@types/bytes": "^3.1.1", + "@types/cookie-parser": "^1.4.3", + "@types/range-parser": "^1.2.6", + "sass": "^1.57.1", + "svelte": "^3.55.1", + "vite": "^4.5.0" + } +} diff --git a/pages/index.html b/pages/index.html deleted file mode 100644 index 453434d..0000000 --- a/pages/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - monofile - - - - - - - - - - - - \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..d7134fe --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1451 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@types/body-parser': + specifier: ^1.19.2 + version: 1.19.3 + '@types/express': + specifier: ^4.17.14 + version: 4.17.18 + '@types/multer': + specifier: ^1.4.7 + version: 1.4.8 + '@types/nodemailer': + specifier: ^6.4.8 + version: 6.4.11 + axios: + specifier: ^0.27.2 + version: 0.27.2 + body-parser: + specifier: ^1.20.0 + version: 1.20.2 + bytes: + specifier: ^3.1.2 + version: 3.1.2 + cookie-parser: + specifier: ^1.4.6 + version: 1.4.6 + discord.js: + specifier: ^14.7.1 + version: 14.13.0 + dotenv: + specifier: ^16.0.2 + version: 16.3.1 + express: + specifier: ^4.18.1 + version: 4.18.2 + hono: + specifier: ^3.8.3 + version: 3.8.3 + multer: + specifier: ^1.4.5-lts.1 + version: 1.4.5-lts.1 + nodemailer: + specifier: ^6.9.3 + version: 6.9.5 + typescript: + specifier: ^5.2.2 + version: 5.2.2 + +devDependencies: + '@sveltejs/vite-plugin-svelte': + specifier: ^2.4.6 + version: 2.4.6(svelte@3.59.2)(vite@4.5.0) + '@types/bytes': + specifier: ^3.1.1 + version: 3.1.2 + '@types/cookie-parser': + specifier: ^1.4.3 + version: 1.4.4 + '@types/range-parser': + specifier: ^1.2.6 + version: 1.2.6 + sass: + specifier: ^1.57.1 + version: 1.69.0 + svelte: + specifier: ^3.55.1 + version: 3.59.2 + vite: + specifier: ^4.5.0 + version: 4.5.0(sass@1.69.0) + +packages: + + /@discordjs/builders@1.6.5: + resolution: {integrity: sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/formatters': 0.3.2 + '@discordjs/util': 1.0.1 + '@sapphire/shapeshift': 3.9.2 + discord-api-types: 0.37.50 + fast-deep-equal: 3.1.3 + ts-mixer: 6.0.3 + tslib: 2.6.2 + dev: false + + /@discordjs/collection@1.5.3: + resolution: {integrity: sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==} + engines: {node: '>=16.11.0'} + dev: false + + /@discordjs/formatters@0.3.2: + resolution: {integrity: sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==} + engines: {node: '>=16.11.0'} + dependencies: + discord-api-types: 0.37.50 + dev: false + + /@discordjs/rest@2.0.1: + resolution: {integrity: sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/collection': 1.5.3 + '@discordjs/util': 1.0.1 + '@sapphire/async-queue': 1.5.0 + '@sapphire/snowflake': 3.5.1 + '@vladfrangu/async_event_emitter': 2.2.2 + discord-api-types: 0.37.50 + magic-bytes.js: 1.5.0 + tslib: 2.6.2 + undici: 5.22.1 + dev: false + + /@discordjs/util@1.0.1: + resolution: {integrity: sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==} + engines: {node: '>=16.11.0'} + dev: false + + /@discordjs/ws@1.0.1: + resolution: {integrity: sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/collection': 1.5.3 + '@discordjs/rest': 2.0.1 + '@discordjs/util': 1.0.1 + '@sapphire/async-queue': 1.5.0 + '@types/ws': 8.5.6 + '@vladfrangu/async_event_emitter': 2.2.2 + discord-api-types: 0.37.50 + tslib: 2.6.2 + ws: 8.14.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@sapphire/async-queue@1.5.0: + resolution: {integrity: sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + + /@sapphire/shapeshift@3.9.2: + resolution: {integrity: sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dependencies: + fast-deep-equal: 3.1.3 + lodash: 4.17.21 + dev: false + + /@sapphire/snowflake@3.5.1: + resolution: {integrity: sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@3.59.2)(vite@4.5.0): + resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^2.2.0 + svelte: ^3.54.0 || ^4.0.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@3.59.2)(vite@4.5.0) + debug: 4.3.4 + svelte: 3.59.2 + vite: 4.5.0(sass@1.69.0) + transitivePeerDependencies: + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte@2.4.6(svelte@3.59.2)(vite@4.5.0): + resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==} + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@3.59.2)(vite@4.5.0) + debug: 4.3.4 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.5 + svelte: 3.59.2 + svelte-hmr: 0.15.3(svelte@3.59.2) + vite: 4.5.0(sass@1.69.0) + vitefu: 0.2.5(vite@4.5.0) + transitivePeerDependencies: + - supports-color + dev: true + + /@types/body-parser@1.19.3: + resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} + dependencies: + '@types/connect': 3.4.36 + '@types/node': 20.8.3 + + /@types/bytes@3.1.2: + resolution: {integrity: sha512-92b6q7CSYBMVZDtMZh5PuKm3LjZwcU7s6H8e9sU20Z1tOrTuXN+Hz3VuP9E8axiQRaCoiEOMN1duqPCEIhamrQ==} + dev: true + + /@types/connect@3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + dependencies: + '@types/node': 20.8.3 + + /@types/cookie-parser@1.4.4: + resolution: {integrity: sha512-Var+aj5I6ZgIqsQ05N2V8q5OBrFfZXtIGWWDSrEYLIbMw758obagSwdGcLCjwh1Ga7M7+wj0SDIAaAC/WT7aaA==} + dependencies: + '@types/express': 4.17.18 + dev: true + + /@types/express-serve-static-core@4.17.37: + resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} + dependencies: + '@types/node': 20.8.3 + '@types/qs': 6.9.8 + '@types/range-parser': 1.2.6 + '@types/send': 0.17.2 + + /@types/express@4.17.18: + resolution: {integrity: sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==} + dependencies: + '@types/body-parser': 1.19.3 + '@types/express-serve-static-core': 4.17.37 + '@types/qs': 6.9.8 + '@types/serve-static': 1.15.3 + + /@types/http-errors@2.0.2: + resolution: {integrity: sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==} + + /@types/mime@1.3.3: + resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==} + + /@types/mime@3.0.2: + resolution: {integrity: sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ==} + + /@types/multer@1.4.8: + resolution: {integrity: sha512-VMZOW6mnmMMhA5m3fsCdXBwFwC+a+27/8gctNMuQC4f7UtWcF79KAFGoIfKZ4iqrElgWIa3j5vhMJDp0iikQ1g==} + dependencies: + '@types/express': 4.17.18 + dev: false + + /@types/node@20.8.3: + resolution: {integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==} + + /@types/nodemailer@6.4.11: + resolution: {integrity: sha512-Ld2c0frwpGT4VseuoeboCXQ7UJIkK3X7Lx/4YsZEiUHtHsthWAOCYtf6PAiLhMtfwV0cWJRabLBS3+LD8x6Nrw==} + dependencies: + '@types/node': 20.8.3 + dev: false + + /@types/qs@6.9.8: + resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} + + /@types/range-parser@1.2.6: + resolution: {integrity: sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==} + + /@types/send@0.17.2: + resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} + dependencies: + '@types/mime': 1.3.3 + '@types/node': 20.8.3 + + /@types/serve-static@1.15.3: + resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==} + dependencies: + '@types/http-errors': 2.0.2 + '@types/mime': 3.0.2 + '@types/node': 20.8.3 + + /@types/ws@8.5.6: + resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==} + dependencies: + '@types/node': 20.8.3 + dev: false + + /@vladfrangu/async_event_emitter@2.2.2: + resolution: {integrity: sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + dev: false + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /axios@0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + dependencies: + follow-redirects: 1.15.3 + form-data: 4.0.0 + transitivePeerDependencies: + - debug + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: false + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + dev: false + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie-parser@1.4.6: + resolution: {integrity: sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==} + engines: {node: '>= 0.8.0'} + dependencies: + cookie: 0.4.1 + cookie-signature: 1.0.6 + dev: false + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.4.1: + resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /discord-api-types@0.37.50: + resolution: {integrity: sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==} + dev: false + + /discord.js@14.13.0: + resolution: {integrity: sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/builders': 1.6.5 + '@discordjs/collection': 1.5.3 + '@discordjs/formatters': 0.3.2 + '@discordjs/rest': 2.0.1 + '@discordjs/util': 1.0.1 + '@discordjs/ws': 1.0.1 + '@sapphire/snowflake': 3.5.1 + '@types/ws': 8.5.6 + discord-api-types: 0.37.50 + fast-deep-equal: 3.1.3 + lodash.snakecase: 4.1.1 + tslib: 2.6.2 + undici: 5.22.1 + ws: 8.14.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: false + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: false + + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.4 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /hono@3.8.3: + resolution: {integrity: sha512-NLJgUCKKMvijBy+V+U1FQTsNwHk2bD1KGlWJA9+qaCNWgx5St9bhfQwxrpcTGvG2Gi2naemTWCzBavDNXOqO6Q==} + engines: {node: '>=16.0.0'} + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /immutable@4.3.4: + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /magic-bytes.js@1.5.0: + resolution: {integrity: sha512-wJkXvutRbNWcc37tt5j1HyOK1nosspdh3dj6LUYYAvF6JYNqs53IfRvK9oEpcwiDA1NdoIi64yAMfdivPeVAyw==} + dev: false + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /multer@1.4.5-lts.1: + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + dev: false + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /nodemailer@6.9.5: + resolution: {integrity: sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==} + engines: {node: '>=6.0.0'} + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sass@1.69.0: + resolution: {integrity: sha512-l3bbFpfTOGgQZCLU/gvm1lbsQ5mC/WnLz3djL2v4WCJBDrWm58PO+jgngcGRNnKUh6wSsdm50YaovTqskZ0xDQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.4 + source-map-js: 1.0.2 + dev: true + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /svelte-hmr@0.15.3(svelte@3.59.2): + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: ^3.19.0 || ^4.0.0 + dependencies: + svelte: 3.59.2 + dev: true + + /svelte@3.59.2: + resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} + engines: {node: '>= 8'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /ts-mixer@6.0.3: + resolution: {integrity: sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==} + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: false + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: false + + /undici@5.22.1: + resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} + engines: {node: '>=14.0'} + dependencies: + busboy: 1.6.0 + dev: false + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /vite@4.5.0(sass@1.69.0): + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + sass: 1.69.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitefu@0.2.5(vite@4.5.0): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 4.5.0(sass@1.69.0) + dev: true + + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false diff --git a/rollup.config.mjs b/rollup.config.mjs deleted file mode 100644 index b8f64fd..0000000 --- a/rollup.config.mjs +++ /dev/null @@ -1,17 +0,0 @@ -import svelte from 'rollup-plugin-svelte' -import resolve from "@rollup/plugin-node-resolve" - -export default [ - { - input: "src/client/index.js", - output: { - file: 'out/client/index.js', - format: 'esm', - sourcemap:true - }, - plugins: [ - resolve({ browser: true }), - svelte({}) - ] - } -] \ No newline at end of file diff --git a/src/client/index.js b/src/client/index.js deleted file mode 100644 index f8e4e62..0000000 --- a/src/client/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import App from "../svelte/App.svelte" - -new App({ - target: document.body -}) \ No newline at end of file diff --git a/pages/download.html b/src/download.html similarity index 93% rename from pages/download.html rename to src/download.html index d2cec08..806c9a8 100644 --- a/pages/download.html +++ b/src/download.html @@ -14,7 +14,7 @@ - \ No newline at end of file + diff --git a/pages/error.html b/src/error.html similarity index 88% rename from pages/error.html rename to src/error.html index 228bb87..7f3c172 100644 --- a/pages/error.html +++ b/src/error.html @@ -6,7 +6,7 @@ - \ No newline at end of file + diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..0a366dc --- /dev/null +++ b/src/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + monofile + + + + + + + + diff --git a/src/server/index.ts b/src/server/index.ts index 730145d..ee0e4fe 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -2,11 +2,7 @@ import cookieParser from "cookie-parser" import { IntentsBitField, Client } from "discord.js" import express from "express" import fs from "fs" -import bytes from "bytes" - -import ServeError from "./lib/errors" import Files from "./lib/files" -import * as Accounts from "./lib/accounts" import { getAccount } from "./lib/middleware" import APIRouter from "./routes/api" @@ -19,8 +15,7 @@ let app = express() let config = require(`${process.cwd()}/config.json`) app.use("/static/assets", express.static("assets")) -app.use("/static/style", express.static("out/style")) -app.use("/static/js", express.static("out/client")) +app.use("/static/vite", express.static("dist/static/vite")) //app.use(bodyParser.text({limit:(config.maxDiscordFileSize*config.maxDiscordFiles)+1048576,type:["application/json","text/plain"]})) @@ -74,7 +69,7 @@ apiRouter.loadAPIMethods().then(() => { // index, clone app.get("/", function (req, res) { - res.sendFile(process.cwd() + "/pages/index.html") + res.sendFile(process.cwd() + "/dist/index.html") }) // serve download page diff --git a/src/server/lib/errors.ts b/src/server/lib/errors.ts index cb53535..c8eddd3 100644 --- a/src/server/lib/errors.ts +++ b/src/server/lib/errors.ts @@ -18,7 +18,7 @@ export default async function ServeError( if (!errorPage) { errorPage = ( - await readFile(`${process.cwd()}/pages/error.html`) + await readFile(`${process.cwd()}/dist/error.html`) .catch((err) => console.error(err)) || "
$code $text
" ) diff --git a/src/server/preview.ts b/src/server/preview.ts index af52cb2..31829c6 100644 --- a/src/server/preview.ts +++ b/src/server/preview.ts @@ -16,7 +16,7 @@ export = (files: Files): Handler => } const template = await fs - .readFile(process.cwd() + "/pages/download.html", "utf8") + .readFile(process.cwd() + "/dist/download.html", "utf8") .catch(() => { throw res.sendStatus(500) }) diff --git a/src/svelte/index.js b/src/svelte/index.js new file mode 100644 index 0000000..7accca1 --- /dev/null +++ b/src/svelte/index.js @@ -0,0 +1,5 @@ +import App from "./App.svelte" + +new App({ + target: document.body +}) diff --git a/vite.config.mjs b/vite.config.mjs new file mode 100644 index 0000000..2465a1f --- /dev/null +++ b/vite.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig } from "vite" +import { svelte } from "@sveltejs/vite-plugin-svelte" +import { resolve } from "path" +export default defineConfig({ + root: "./src", + build: { + outDir: "../dist", + assetsDir: "static/vite", + rollupOptions: { + input: { + main: resolve(__dirname, "src/index.html"), + download: resolve(__dirname, "src/download.html"), + error: resolve(__dirname, "src/error.html"), + }, + }, + }, + plugins: [svelte({})], +}) From 0366c91f74c5287bb9fedc2c6279fee524f180e2 Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Tue, 24 Oct 2023 19:59:00 -0400 Subject: [PATCH 030/173] refactor: :recycle: Honofile. --- package.json | 1 + pnpm-lock.yaml | 8 + src/server/index.ts | 88 ++- src/server/lib/auth.ts | 98 +-- src/server/lib/errors.ts | 48 +- src/server/lib/middleware.ts | 109 ++- src/server/lib/ratelimit.ts | 36 +- src/server/preview.ts | 39 +- src/server/routes/api.ts | 56 +- src/server/routes/api/v0/adminRoutes.ts | 297 ++++---- src/server/routes/api/v0/authRoutes.ts | 816 +++++++++++++--------- src/server/routes/api/v0/fileApiRoutes.ts | 191 ++--- src/server/routes/api/v0/primaryApi.ts | 383 +++++----- src/server/routes/api/v1/account.ts | 359 +++++----- src/server/routes/api/v1/admin.ts | 151 ++-- src/server/routes/api/v1/customization.ts | 143 ++-- src/server/routes/api/v1/file.ts | 6 +- src/server/routes/api/v1/public.ts | 10 +- 18 files changed, 1531 insertions(+), 1308 deletions(-) diff --git a/package.json b/package.json index fd6ebee..af58dc0 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "node": ">=v16.11" }, "dependencies": { + "@hono/node-server": "^1.2.0", "@types/body-parser": "^1.19.2", "@types/express": "^4.17.14", "@types/multer": "^1.4.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d7134fe..8ffa49c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@hono/node-server': + specifier: ^1.2.0 + version: 1.2.0 '@types/body-parser': specifier: ^1.19.2 version: 1.19.3 @@ -337,6 +340,11 @@ packages: dev: true optional: true + /@hono/node-server@1.2.0: + resolution: {integrity: sha512-aHT8lDMLpd7ioXJ1/057+h+oE/k7rCOWmjklYDsE0jE4CoNB9XzG4f8dRHvw4s5HJFocaYDiGgYM/V0kYbQ0ww==} + engines: {node: '>=18.0.0'} + dev: false + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true diff --git a/src/server/index.ts b/src/server/index.ts index ee0e4fe..ba4251c 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,45 +1,63 @@ -import cookieParser from "cookie-parser" import { IntentsBitField, Client } from "discord.js" -import express from "express" +import { serve } from "@hono/node-server" +import { serveStatic } from "@hono/node-server/serve-static" +import { Hono } from "hono" import fs from "fs" import Files from "./lib/files" import { getAccount } from "./lib/middleware" - import APIRouter from "./routes/api" import preview from "./preview" require("dotenv").config() const pkg = require(`${process.cwd()}/package.json`) -let app = express() +const app = new Hono() let config = require(`${process.cwd()}/config.json`) -app.use("/static/assets", express.static("assets")) -app.use("/static/vite", express.static("dist/static/vite")) +app.get( + "/static/assets/*", + serveStatic({ + rewriteRequestPath: (path) => { + return path.replace("/static/assets", "/assets") + }, + }) +) +app.get( + "/static/vite/*", + serveStatic({ + rewriteRequestPath: (path) => { + return path.replace("/static/vite", "/dist/static/vite") + }, + }) +) //app.use(bodyParser.text({limit:(config.maxDiscordFileSize*config.maxDiscordFiles)+1048576,type:["application/json","text/plain"]})) -app.use(cookieParser()) - // check for ssl, if not redirect -if (config.trustProxy) app.enable("trust proxy") +if (config.trustProxy) { + // app.enable("trust proxy") +} if (config.forceSSL) { - app.use((req, res, next) => { - if (req.protocol == "http") - res.redirect(`https://${req.get("host")}${req.originalUrl}`) - else next() + app.use(async (ctx, next) => { + if (new URL(ctx.req.url).protocol == "http") { + return ctx.redirect( + `https://${ctx.req.header("host")}${ + new URL(ctx.req.url).pathname + }` + ) + } else { + return next() + } }) } -app.get("/server", (req, res) => { - res.send( - JSON.stringify({ - ...config, - version: pkg.version, - files: Object.keys(files.files).length, - }) - ) -}) +app.get("/server", (ctx) => + ctx.json({ + ...config, + version: pkg.version, + files: Object.keys(files.files).length, + }) +) // funcs @@ -60,17 +78,19 @@ let client = new Client({ let files = new Files(client, config) -let apiRouter = new APIRouter(files) +const apiRouter = new APIRouter(files) apiRouter.loadAPIMethods().then(() => { - app.use(apiRouter.root) + app.route("/", apiRouter.root) console.log("API OK!") }) // index, clone -app.get("/", function (req, res) { - res.sendFile(process.cwd() + "/dist/index.html") -}) +app.get("/", async (ctx) => + ctx.html( + await fs.promises.readFile(process.cwd() + "/dist/index.html", "utf-8") + ) +) // serve download page @@ -87,8 +107,16 @@ app.get("/download/:fileId", getAccount, preview(files)) // listen on 3000 or MONOFILE_PORT -app.listen(process.env.MONOFILE_PORT || 3000, function () { - console.log("Web OK!") -}) +serve( + { + fetch: app.fetch, + port: Number(process.env.MONOFILE_PORT || 3000), + }, + (info) => { + console.log("Web OK!", info.port, info.address) + } +) client.login(process.env.TOKEN) + +export = app diff --git a/src/server/lib/auth.ts b/src/server/lib/auth.ts index 75a4fd8..783144e 100644 --- a/src/server/lib/auth.ts +++ b/src/server/lib/auth.ts @@ -1,48 +1,50 @@ import crypto from "crypto" -import express from "express" +import { getCookie } from "hono/cookie" +import type { Context } from "hono" import { readFile, writeFile } from "fs/promises" export let AuthTokens: AuthToken[] = [] -export let AuthTokenTO:{[key:string]:NodeJS.Timeout} = {} +export let AuthTokenTO: { [key: string]: NodeJS.Timeout } = {} export const ValidTokenPermissions = [ - "user", // permissions to /auth/me, with email docked - "email", // adds email back to /auth/me - "private", // allows app to read private files - "upload", // allows an app to upload under an account - "manage", // allows an app to manage an account's files + "user", // permissions to /auth/me, with email docked + "email", // adds email back to /auth/me + "private", // allows app to read private files + "upload", // allows an app to upload under an account + "manage", // allows an app to manage an account's files "customize", // allows an app to change customization settings - "admin" // only available for accounts with admin - // gives an app access to all admin tools + "admin", // only available for accounts with admin + // gives an app access to all admin tools ] as const export type TokenType = "User" | "App" -export type TokenPermission = typeof ValidTokenPermissions[number] +export type TokenPermission = (typeof ValidTokenPermissions)[number] export interface AuthToken { - account: string, - token: string, - expire: number, + account: string + token: string + expire: number - type?: TokenType, // if !type, assume User + type?: TokenType // if !type, assume User tokenPermissions?: TokenPermission[] // default to user if type is App, - // give full permissions if type is User + // give full permissions if type is User } export function create( - id:string, - expire:number=(24*60*60*1000), - type:TokenType="User", - tokenPermissions?:TokenPermission[] + id: string, + expire: number = 24 * 60 * 60 * 1000, + type: TokenType = "User", + tokenPermissions?: TokenPermission[] ) { let token = { - account:id, - token:crypto.randomBytes(36).toString('hex'), - expire: expire ? Date.now()+expire : 0, + account: id, + token: crypto.randomBytes(36).toString("hex"), + expire: expire ? Date.now() + expire : 0, type, - tokenPermissions: type == "App" ? tokenPermissions || ["user"] : undefined + tokenPermissions: + type == "App" ? tokenPermissions || ["user"] : undefined, } - + AuthTokens.push(token) tokenTimer(token) @@ -51,56 +53,68 @@ export function create( return token.token } -export function tokenFor(req: express.Request) { - return req.cookies.auth || ( - req.header("authorization")?.startsWith("Bearer ") - ? req.header("authorization")?.split(" ")[1] - : undefined +export function tokenFor(ctx: Context) { + return ( + getCookie(ctx, "auth") || + (ctx.req.header("authorization")?.startsWith("Bearer ") + ? ctx.req.header("authorization")?.split(" ")[1] + : undefined) ) } -function getToken(token:string) { - return AuthTokens.find(e => e.token == token && (e.expire == 0 || Date.now() < e.expire)) +function getToken(token: string) { + return AuthTokens.find( + (e) => e.token == token && (e.expire == 0 || Date.now() < e.expire) + ) } -export function validate(token:string) { +export function validate(token: string) { return getToken(token)?.account } -export function getType(token:string): TokenType | undefined { +export function getType(token: string): TokenType | undefined { return getToken(token)?.type } -export function getPermissions(token:string): TokenPermission[] | undefined { +export function getPermissions(token: string): TokenPermission[] | undefined { return getToken(token)?.tokenPermissions } -export function tokenTimer(token:AuthToken) { +export function tokenTimer(token: AuthToken) { if (!token.expire) return // justincase if (Date.now() >= token.expire) { invalidate(token.token) return } - AuthTokenTO[token.token] = setTimeout(() => invalidate(token.token),token.expire-Date.now()) + AuthTokenTO[token.token] = setTimeout( + () => invalidate(token.token), + token.expire - Date.now() + ) } -export function invalidate(token:string) { +export function invalidate(token: string) { if (AuthTokenTO[token]) { clearTimeout(AuthTokenTO[token]) } - AuthTokens.splice(AuthTokens.findIndex(e => e.token == token),1) + AuthTokens.splice( + AuthTokens.findIndex((e) => e.token == token), + 1 + ) save() } export function save() { - writeFile(`${process.cwd()}/.data/tokens.json`,JSON.stringify(AuthTokens)) - .catch((err) => console.error(err)) + writeFile( + `${process.cwd()}/.data/tokens.json`, + JSON.stringify(AuthTokens) + ).catch((err) => console.error(err)) } readFile(`${process.cwd()}/.data/tokens.json`) .then((buf) => { AuthTokens = JSON.parse(buf.toString()) - AuthTokens.forEach(e => tokenTimer(e)) - }).catch(err => console.error(err)) \ No newline at end of file + AuthTokens.forEach((e) => tokenTimer(e)) + }) + .catch((err) => console.error(err)) diff --git a/src/server/lib/errors.ts b/src/server/lib/errors.ts index c8eddd3..261d4d4 100644 --- a/src/server/lib/errors.ts +++ b/src/server/lib/errors.ts @@ -1,48 +1,36 @@ -import { Response } from "express"; import { readFile } from "fs/promises" +import type { Context } from "hono" -let errorPage:string +let errorPage: string /** * @description Serves an error as a response to a request with an error page attached - * @param res Express response object + * @param ctx Express response object * @param code Error code * @param reason Error reason */ export default async function ServeError( - res:Response, - code:number, - reason:string + ctx: Context, + code: number, + reason: string ) { // fetch error page if not cached if (!errorPage) { - errorPage = - ( - await readFile(`${process.cwd()}/dist/error.html`) - .catch((err) => console.error(err)) - || "
$code $text
" - ) - .toString() + errorPage = ( + (await readFile(`${process.cwd()}/dist/error.html`).catch((err) => + console.error(err) + )) || "
$code $text
" + ).toString() } // serve error - res.statusMessage = reason - res.status(code) - res.header("x-backup-status-message", reason) // glitch default nginx configuration - res.send( + return ctx.html( errorPage - .replaceAll("$code",code.toString()) - .replaceAll("$text",reason) + .replaceAll("$code", code.toString()) + .replaceAll("$text", reason), + code, + { + "x-backup-status-message": reason, // glitch default nginx configuration + } ) } -/** - * @description Redirects a user to another page. - * @param res Express response object - * @param url Target URL - * @deprecated Use `res.redirect` instead. - */ -export function Redirect(res:Response,url:string) { - res.status(302) - res.header("Location",url) - res.send() -} diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index e9c18d2..d666410 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -1,36 +1,34 @@ -import * as Accounts from "./accounts"; -import express, { type RequestHandler } from "express" -import ServeError from "../lib/errors"; -import * as auth from "./auth"; +import * as Accounts from "./accounts" +import { Handler as RequestHandler } from "hono" +import ServeError from "../lib/errors" +import * as auth from "./auth" /** - * @description Middleware which adds an account, if any, to res.locals.acc + * @description Middleware which adds an account, if any, to ctx.get("account") */ -export const getAccount: RequestHandler = function(req, res, next) { - res.locals.acc = Accounts.getFromToken(auth.tokenFor(req)) - next() +export const getAccount: RequestHandler = function (ctx, next) { + ctx.set("account", Accounts.getFromToken(auth.tokenFor(ctx)!)) + return next() } /** - * @description Middleware which blocks requests which do not have res.locals.acc set + * @description Middleware which blocks requests which do not have ctx.get("account") set */ -export const requiresAccount: RequestHandler = function(_req, res, next) { - if (!res.locals.acc) { - ServeError(res, 401, "not logged in") - return +export const requiresAccount: RequestHandler = function (ctx, next) { + if (!ctx.get("account")) { + return ServeError(ctx, 401, "not logged in") } - next() + return next() } /** - * @description Middleware which blocks requests that have res.locals.acc.admin set to a falsy value + * @description Middleware which blocks requests that have ctx.get("account").admin set to a falsy value */ -export const requiresAdmin: RequestHandler = function(_req, res, next) { - if (!res.locals.acc.admin) { - ServeError(res, 403, "you are not an administrator") - return +export const requiresAdmin: RequestHandler = function (ctx, next) { + if (!ctx.get("account").admin) { + return ServeError(ctx, 403, "you are not an administrator") } - next() + return next() } /** @@ -39,48 +37,58 @@ export const requiresAdmin: RequestHandler = function(_req, res, next) { * @returns Express middleware */ -export const requiresPermissions = function(...tokenPermissions: auth.TokenPermission[]): RequestHandler { - return function(req, res, next) { - let token = auth.tokenFor(req) +export const requiresPermissions = function ( + ...tokenPermissions: auth.TokenPermission[] +): RequestHandler { + return function (ctx, next) { + let token = auth.tokenFor(ctx)! let type = auth.getType(token) - + if (type == "App") { let permissions = auth.getPermissions(token) - - if (!permissions) ServeError(res, 403, "insufficient permissions") - else { + if (!permissions) return ServeError(ctx, 403, "insufficient permissions") + else { for (let v of tokenPermissions) { if (!permissions.includes(v as auth.TokenPermission)) { - ServeError(res,403,"insufficient permissions") - return + return ServeError(ctx, 403, "insufficient permissions") } } - next() - + return next() } - } else next() + } else return next() } } /** - * @description Blocks requests based on whether or not the token being used to access the route is of type `User`. + * @description Blocks requests based on whether or not the token being used to access the route is of type `User`. */ -export const noAPIAccess: RequestHandler = function(req, res, next) { - if (auth.getType(auth.tokenFor(req)) == "App") ServeError(res, 403, "apps are not allowed to access this endpoint") - else next() +export const noAPIAccess: RequestHandler = function (ctx, next) { + if (auth.getType(auth.tokenFor(ctx)!) == "App") + return ServeError(ctx, 403, "apps are not allowed to access this endpoint") + else return next() } /** @description Add a restriction to this route; the condition must be true to allow API requests. */ -export const assertAPI = function(condition: (acc:Accounts.Account, token:string) => boolean):RequestHandler { - return function(req, res, next) { - let reqToken = auth.tokenFor(req) - if (auth.getType(reqToken) == "App" && condition(res.locals.acc, reqToken)) ServeError(res, 403, "apps are not allowed to access this endpoint") - else next() +export const assertAPI = function ( + condition: (acc: Accounts.Account, token: string) => boolean +): RequestHandler { + return function (ctx, next) { + let reqToken = auth.tokenFor(ctx)! + if ( + auth.getType(reqToken) == "App" && + condition(ctx.get("account"), reqToken) + ) + return ServeError( + ctx, + 403, + "apps are not allowed to access this endpoint" + ) + else return next() } } @@ -94,21 +102,10 @@ interface SchemeObject { } interface SchemeArray { - type: "array", - children: SchemeParameter /* All children of the array must be this type */ - | SchemeParameter[] /* Array must match this pattern */ + type: "array" + children: + | SchemeParameter /* All children of the array must be this type */ + | SchemeParameter[] /* Array must match this pattern */ } type SchemeParameter = SchemeType | SchemeObject | SchemeArray - -/** - * @description Blocks requests based on whether or not the token being used to access the route is of type `User` unless a condition is met. - * @param tokenPermissions Permissions which your route requires. - * @returns Express middleware - */ - -export const sanitize = function(scheme: SchemeObject):RequestHandler { - return function(req, res, next) { - - } -} \ No newline at end of file diff --git a/src/server/lib/ratelimit.ts b/src/server/lib/ratelimit.ts index 94d9d32..afc1344 100644 --- a/src/server/lib/ratelimit.ts +++ b/src/server/lib/ratelimit.ts @@ -1,50 +1,50 @@ -import { RequestHandler } from "express" -import { type Account } from "./accounts" +import type { Handler } from "hono" import ServeError from "./errors" interface RatelimitSettings { - requests: number per: number - } /** - * @description Ratelimits a route based on res.locals.acc + * @description Ratelimits a route based on ctx.get("account") * @param settings Ratelimit settings * @returns Express middleware */ -export function accountRatelimit( settings: RatelimitSettings ): RequestHandler { +export function accountRatelimit(settings: RatelimitSettings): Handler { let activeLimits: { - [ key: string ]: { - requests: number, + [key: string]: { + requests: number expirationHold: NodeJS.Timeout } } = {} - return (req, res, next) => { - if (res.locals.acc) { - let accId = res.locals.acc.id + return (ctx, next) => { + if (ctx.get("account")) { + let accId = ctx.get("account").id let aL = activeLimits[accId] - + if (!aL) { activeLimits[accId] = { requests: 0, - expirationHold: setTimeout(() => delete activeLimits[accId], settings.per) + expirationHold: setTimeout( + () => delete activeLimits[accId], + settings.per + ), } aL = activeLimits[accId] } if (aL.requests < settings.requests) { - res.locals.undoCount = () => { + ctx.set("undoCount", () => { if (activeLimits[accId]) { activeLimits[accId].requests-- } - } - next() + }) + return next() } else { - ServeError(res, 429, "too many requests") + return ServeError(ctx, 429, "too many requests") } } } -} \ No newline at end of file +} diff --git a/src/server/preview.ts b/src/server/preview.ts index 31829c6..90c3cad 100644 --- a/src/server/preview.ts +++ b/src/server/preview.ts @@ -2,31 +2,32 @@ import fs from "fs/promises" import bytes from "bytes" import ServeError from "./lib/errors" import * as Accounts from "./lib/accounts" -import type { Handler } from "express" +import type { Handler } from "hono" import type Files from "./lib/files" const pkg = require(`${process.cwd()}/package.json`) export = (files: Files): Handler => - async (req, res) => { - let acc = res.locals.acc as Accounts.Account - const file = files.getFilePointer(req.params.fileId) + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const fileId = ctx.req.param("fileId") + const host = ctx.req.header("Host") + const file = files.getFilePointer(fileId) if (file) { if (file.visibility == "private" && acc?.id != file.owner) { - ServeError(res, 403, "you do not own this file") - return + return ServeError(ctx, 403, "you do not own this file") } const template = await fs .readFile(process.cwd() + "/dist/download.html", "utf8") .catch(() => { - throw res.sendStatus(500) + throw ctx.status(500) }) let fileOwner = file.owner ? Accounts.getFromId(file.owner) : undefined - res.send( + return ctx.html( template - .replaceAll("$FileId", req.params.fileId) + .replaceAll("$FileId", fileId) .replaceAll("$Version", pkg.version) .replaceAll( "$FileSize", @@ -44,18 +45,14 @@ export = (files: Files): Handler => .replace( "", (file.mime.startsWith("image/") - ? `` + ? `` : file.mime.startsWith("video/") - ? ` - `\n .replace( "", file.mime.startsWith("image/") - ? `
` + ? `
` : file.mime.startsWith("video/") - ? `
` + ? `
` : file.mime.startsWith("audio/") - ? `
` + ? `
` : "" ) .replaceAll( @@ -104,6 +101,6 @@ export = (files: Files): Handler => ) ) } else { - ServeError(res, 404, "file not found") + ServeError(ctx, 404, "file not found") } } diff --git a/src/server/routes/api.ts b/src/server/routes/api.ts index 1374d7d..9ce21ee 100644 --- a/src/server/routes/api.ts +++ b/src/server/routes/api.ts @@ -1,8 +1,8 @@ -import { Router } from "express"; -import { readFile, readdir } from "fs/promises"; -import Files from "../lib/files"; +import { Hono } from "hono" +import { readFile, readdir } from "fs/promises" +import Files from "../lib/files" -const APIDirectory = __dirname+"/api" +const APIDirectory = __dirname + "/api" interface APIMount { file: string @@ -18,35 +18,35 @@ interface APIDefinition { } function resolveMount(mount: APIMountResolvable): APIMount { - return typeof mount == "string" ? { file: mount, to: "/"+mount } : mount + return typeof mount == "string" ? { file: mount, to: "/" + mount } : mount } class APIVersion { - readonly definition: APIDefinition; - readonly apiPath: string; - readonly root: Router = Router(); + readonly definition: APIDefinition + readonly apiPath: string + readonly root: Hono = new Hono() constructor(definition: APIDefinition, files: Files) { - - this.definition = definition; + this.definition = definition this.apiPath = APIDirectory + "/" + definition.name for (let _mount of definition.mount) { let mount = resolveMount(_mount) // no idea if there's a better way to do this but this is all i can think of - let route = require(`${this.apiPath}/${mount.file}.js`) as (files:Files)=>Router - this.root.use(mount.to, route(files)) + let route = require(`${this.apiPath}/${mount.file}.js`) as ( + files: Files + ) => Hono + this.root.route(mount.to, route(files)) } } } export default class APIRouter { - readonly files: Files - readonly root: Router = Router(); + readonly root: Hono = new Hono() constructor(files: Files) { - this.files = files; + this.files = files } /** @@ -55,24 +55,26 @@ export default class APIRouter { */ private mount(definition: APIDefinition) { - console.log(`mounting APIDefinition ${definition.name}`) - - this.root.use( - definition.baseURL, - (new APIVersion(definition, this.files)).root - ) + this.root.route( + definition.baseURL, + new APIVersion(definition, this.files).root + ) } async loadAPIMethods() { - let files = await readdir(APIDirectory) - for (let v of files) { /// temporary (hopefully). need to figure out something else for this - let def = JSON.parse((await readFile(`${process.cwd()}/src/server/routes/api/${v}/api.json`)).toString()) as APIDefinition + for (let version of files) { + /// temporary (hopefully). need to figure out something else for this + let def = JSON.parse( + ( + await readFile( + `${process.cwd()}/src/server/routes/api/${version}/api.json` + ) + ).toString() + ) as APIDefinition this.mount(def) } - } - -} \ No newline at end of file +} diff --git a/src/server/routes/api/v0/adminRoutes.ts b/src/server/routes/api/v0/adminRoutes.ts index 243b719..e91c060 100644 --- a/src/server/routes/api/v0/adminRoutes.ts +++ b/src/server/routes/api/v0/adminRoutes.ts @@ -1,20 +1,21 @@ -import bodyParser from "body-parser"; -import { Router } from "express"; -import * as Accounts from "../../../lib/accounts"; -import * as auth from "../../../lib/auth"; -import bytes from "bytes" -import {writeFile} from "fs"; -import { sendMail } from "../../../lib/mail"; -import { getAccount, requiresAccount, requiresAdmin, requiresPermissions } from "../../../lib/middleware" +import { Hono } from "hono" +import * as Accounts from "../../../lib/accounts" +import * as auth from "../../../lib/auth" +import { writeFile } from "fs/promises" +import { sendMail } from "../../../lib/mail" +import { + getAccount, + requiresAccount, + requiresAdmin, + requiresPermissions, +} from "../../../lib/middleware" +import Files from "../../../lib/files" -import ServeError from "../../../lib/errors"; -import Files from "../../../lib/files"; - -let parser = bodyParser.json({ - type: ["text/plain","application/json"] -}) - -export let adminRoutes = Router(); +export let adminRoutes = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() adminRoutes .use(getAccount) .use(requiresAccount) @@ -23,214 +24,198 @@ adminRoutes let config = require(`${process.cwd()}/config.json`) -module.exports = function(files: Files) { - +module.exports = function (files: Files) { + adminRoutes.post("/reset", async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() - adminRoutes.post("/reset", parser, (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.target !== "string" || typeof req.body.password !== "string") { - res.status(404) - res.send() - return + if ( + typeof body.target !== "string" || + typeof body.password !== "string" + ) { + return ctx.status(404) } - let targetAccount = Accounts.getFromUsername(req.body.target) + let targetAccount = Accounts.getFromUsername(body.target) if (!targetAccount) { - res.status(404) - res.send() - return + return ctx.status(404) } - Accounts.password.set ( targetAccount.id, req.body.password ) - auth.AuthTokens.filter(e => e.account == targetAccount?.id).forEach((v) => { - auth.invalidate(v.token) - }) + Accounts.password.set(targetAccount.id, body.password) + auth.AuthTokens.filter((e) => e.account == targetAccount?.id).forEach( + (v) => { + auth.invalidate(v.token) + } + ) if (targetAccount.email) { - sendMail(targetAccount.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that an administrator, ${acc.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { - res.send("OK") - }).catch((err) => {}) + return sendMail( + targetAccount.email, + `Your login details have been updated`, + `Hello there! This email is to notify you of a password change that an administrator, ${acc.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.` + ) + .then(() => ctx.text("OK")) + .catch(() => ctx.status(500)) } - - - res.send() - }) - adminRoutes.post("/elevate", parser, (req,res) => { + adminRoutes.post("/elevate", async (ctx) => { + const body = await ctx.req.json() + let acc = ctx.get("account") as Accounts.Account - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.target !== "string") { - res.status(404) - res.send() - return + if (typeof body.target !== "string") { + return ctx.status(404) } - let targetAccount = Accounts.getFromUsername(req.body.target) + let targetAccount = Accounts.getFromUsername(body.target) if (!targetAccount) { - res.status(404) - res.send() - return + return ctx.status(404) } - targetAccount.admin = true; Accounts.save() - res.send() - + return ctx.text("OK") }) - adminRoutes.post("/delete", parser, (req,res) => { - - if (typeof req.body.target !== "string") { - res.status(404) - res.send() - return + adminRoutes.post("/delete", async (ctx) => { + const body = await ctx.req.json() + if (typeof body.target !== "string") { + return ctx.status(404) } - let targetFile = files.getFilePointer(req.body.target) + let targetFile = files.getFilePointer(body.target) if (!targetFile) { - res.status(404) - res.send() - return + return ctx.status(404) } - files.unlink(req.body.target).then(() => { - res.status(200) - }).catch(() => { - res.status(500) - }).finally(() => res.send()) - + return files + .unlink(body.target) + .then(() => ctx.status(200)) + .catch(() => ctx.status(500)) + .finally(() => ctx.status(200)) }) - adminRoutes.post("/delete_account", parser, async (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.target !== "string") { - res.status(404) - res.send() - return + adminRoutes.post("/delete_account", async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.target !== "string") { + return ctx.status(404) } - let targetAccount = Accounts.getFromUsername(req.body.target) + let targetAccount = Accounts.getFromUsername(body.target) if (!targetAccount) { - res.status(404) - res.send() - return + return ctx.status(404) } let accId = targetAccount.id - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { + auth.AuthTokens.filter((e) => e.account == accId).forEach((v) => { auth.invalidate(v.token) }) - let cpl = () => Accounts.deleteAccount(accId).then(_ => { - if (targetAccount?.email) { - sendMail(targetAccount.email, "Notice of account deletion", `Your account, ${targetAccount.username}, has been deleted by ${acc.username} for the following reason:

${req.body.reason || "(no reason specified)"}

Your files ${req.body.deleteFiles ? "have been deleted" : "have not been modified"}. Thank you for using monofile.`) - } - res.send("account deleted") - }) - - if (req.body.deleteFiles) { - let f = targetAccount.files.map(e=>e) // make shallow copy so that iterating over it doesnt Die + let cpl = () => + Accounts.deleteAccount(accId).then((_) => { + if (targetAccount?.email) { + sendMail( + targetAccount.email, + "Notice of account deletion", + `Your account, ${ + targetAccount.username + }, has been deleted by ${ + acc.username + } for the following reason:

${ + body.reason || "(no reason specified)" + }

Your files ${ + body.deleteFiles + ? "have been deleted" + : "have not been modified" + }. Thank you for using monofile.` + ) + } + return ctx.text("account deleted") + }) + + if (body.deleteFiles) { + let f = targetAccount.files.map((e) => e) // make shallow copy so that iterating over it doesnt Die for (let v of f) { - files.unlink(v,true).catch(err => console.error(err)) + files.unlink(v, true).catch((err) => console.error(err)) } - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { - if (err) console.log(err) - cpl() - }) - } else cpl() + return writeFile( + process.cwd() + "/.data/files.json", + JSON.stringify(files.files) + ).then(cpl) + } else return cpl() }) - adminRoutes.post("/transfer", parser, (req,res) => { - - if (typeof req.body.target !== "string" || typeof req.body.owner !== "string") { - res.status(404) - res.send() - return - } - - let targetFile = files.getFilePointer(req.body.target) - if (!targetFile) { - res.status(404) - res.send() - return + adminRoutes.post("/transfer", async (ctx) => { + const body = await ctx.req.json() + if (typeof body.target !== "string" || typeof body.owner !== "string") { + return ctx.status(404) } - let newOwner = Accounts.getFromUsername(req.body.owner || "") + let targetFile = files.getFilePointer(body.target) + if (!targetFile) { + return ctx.status(404) + } + + let newOwner = Accounts.getFromUsername(body.owner || "") // clear old owner if (targetFile.owner) { let oldOwner = Accounts.getFromId(targetFile.owner) if (oldOwner) { - Accounts.files.deindex(oldOwner.id, req.body.target) - } + Accounts.files.deindex(oldOwner.id, body.target) + } } if (newOwner) { - Accounts.files.index(newOwner.id, req.body.target) + Accounts.files.index(newOwner.id, body.target) } - targetFile.owner = newOwner ? newOwner.id : undefined; - - files.writeFile(req.body.target, targetFile).then(() => { - res.send() - }).catch(() => { - res.status(500) - res.send() - }) // wasting a reassignment but whatee + targetFile.owner = newOwner ? newOwner.id : undefined + files + .writeFile(body.target, targetFile) + .then(() => ctx.status(200)) + .catch(() => ctx.status(500)) }) - adminRoutes.post("/idchange", parser, (req,res) => { - - if (typeof req.body.target !== "string" || typeof req.body.new !== "string") { - res.status(400) - res.send() - return + adminRoutes.post("/idchange", async (ctx) => { + const body = await ctx.req.json() + if (typeof body.target !== "string" || typeof body.new !== "string") { + return ctx.status(400) } - - let targetFile = files.getFilePointer(req.body.target) + + let targetFile = files.getFilePointer(body.target) if (!targetFile) { - res.status(404) - res.send() - return + return ctx.status(404) } - - if (files.getFilePointer(req.body.new)) { - res.status(400) - res.send() - return + + if (files.getFilePointer(body.new)) { + return ctx.status(400) } if (targetFile.owner) { - Accounts.files.deindex(targetFile.owner, req.body.target) - Accounts.files.index(targetFile.owner, req.body.new) + Accounts.files.deindex(targetFile.owner, body.target) + Accounts.files.index(targetFile.owner, body.new) } - delete files.files[req.body.target] + delete files.files[body.target] - files.writeFile(req.body.new, targetFile).then(() => { - res.send() - }).catch(() => { - files.files[req.body.target] = req.body.new + return files + .writeFile(body.new, targetFile) + .then(() => ctx.status(200)) + .catch(() => { + files.files[body.target] = body.new - if (targetFile.owner) { - Accounts.files.deindex(targetFile.owner, req.body.new) - Accounts.files.index(targetFile.owner, req.body.target) - } - - res.status(500) - res.send() - }) + if (targetFile.owner) { + Accounts.files.deindex(targetFile.owner, body.new) + Accounts.files.index(targetFile.owner, body.target) + } + return ctx.status(500) + }) }) return adminRoutes -} \ No newline at end of file +} diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts index b33684f..c075ef6 100644 --- a/src/server/routes/api/v0/authRoutes.ts +++ b/src/server/routes/api/v0/authRoutes.ts @@ -1,356 +1,483 @@ -import bodyParser from "body-parser"; -import { Router } from "express"; -import * as Accounts from "../../../lib/accounts"; -import * as auth from "../../../lib/auth"; -import { sendMail } from "../../../lib/mail"; -import { getAccount, noAPIAccess, requiresAccount, requiresPermissions } from "../../../lib/middleware" +import { Hono, Handler } from "hono" +import { getCookie, setCookie } from "hono/cookie" +import * as Accounts from "../../../lib/accounts" +import * as auth from "../../../lib/auth" +import { sendMail } from "../../../lib/mail" +import { + getAccount, + noAPIAccess, + requiresAccount, + requiresPermissions, +} from "../../../lib/middleware" import { accountRatelimit } from "../../../lib/ratelimit" -import ServeError from "../../../lib/errors"; -import Files, { FileVisibility, generateFileId, id_check_regex } from "../../../lib/files"; +import ServeError from "../../../lib/errors" +import Files, { + FileVisibility, + generateFileId, + id_check_regex, +} from "../../../lib/files" -import { writeFile } from "fs"; +import { writeFile } from "fs/promises" -let parser = bodyParser.json({ - type: ["text/plain","application/json"] -}) - -export let authRoutes = Router(); -authRoutes.use(getAccount) +export let authRoutes = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() let config = require(`${process.cwd()}/config.json`) +authRoutes.all("*", getAccount) -module.exports = function(files: Files) { - - authRoutes.post("/login", parser, (req,res) => { - if (typeof req.body.username != "string" || typeof req.body.password != "string") { - ServeError(res,400,"please provide a username or password") - return +module.exports = function (files: Files) { + authRoutes.post("/login", async (ctx) => { + console.log(ctx) + const body = await ctx.req.json() + if ( + typeof body.username != "string" || + typeof body.password != "string" + ) { + return ServeError(ctx, 400, "please provide a username or password") } - if (auth.validate(req.cookies.auth)) return + if (auth.validate(getCookie(ctx, "auth")!)) + return ctx.text("You are already authed") /* check if account exists */ - let acc = Accounts.getFromUsername(req.body.username) + let acc = Accounts.getFromUsername(body.username) if (!acc) { - ServeError(res,401,"username or password incorrect") - return + return ServeError(ctx, 401, "username or password incorrect") } - if (!Accounts.password.check(acc.id,req.body.password)) { - ServeError(res,401,"username or password incorrect") - return + if (!Accounts.password.check(acc.id, body.password)) { + return ServeError(ctx, 401, "username or password incorrect") } /* assign token */ - res.cookie("auth",auth.create(acc.id,(3*24*60*60*1000))) - res.status(200) - res.end() + setCookie(ctx, "auth", auth.create(acc.id, 3 * 24 * 60 * 60 * 1000)) + return ctx.text("") }) - authRoutes.post("/create", parser, (req,res) => { + authRoutes.post("/create", async (ctx) => { if (!config.accounts.registrationEnabled) { - ServeError(res,403,"account registration disabled") - return + return ServeError(ctx, 403, "account registration disabled") } - if (auth.validate(req.cookies.auth)) return - - if (typeof req.body.username != "string" || typeof req.body.password != "string") { - ServeError(res,400,"please provide a username or password") - return + if (auth.validate(getCookie(ctx, "auth")!)) return + const body = await ctx.req.json() + if ( + typeof body.username != "string" || + typeof body.password != "string" + ) { + return ServeError(ctx, 400, "please provide a username or password") } /* check if account exists */ - let acc = Accounts.getFromUsername(req.body.username) + let acc = Accounts.getFromUsername(body.username) if (acc) { - ServeError(res,400,"account with this username already exists") + ServeError(ctx, 400, "account with this username already exists") return } - if (req.body.username.length < 3 || req.body.username.length > 20) { - ServeError(res,400,"username must be over or equal to 3 characters or under or equal to 20 characters in length") + if (body.username.length < 3 || body.username.length > 20) { + return ServeError( + ctx, + 400, + "username must be over or equal to 3 characters or under or equal to 20 characters in length" + ) + } + + if ( + (body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != body.username + ) { + return ServeError(ctx, 400, "username contains invalid characters") + } + + if (body.password.length < 8) { + ServeError(ctx, 400, "password must be 8 characters or longer") return } - if ((req.body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != req.body.username) { - ServeError(res,400,"username contains invalid characters") - return - } - - if (req.body.password.length < 8) { - ServeError(res,400,"password must be 8 characters or longer") - return - } - - Accounts.create(req.body.username,req.body.password) + return Accounts.create(body.username, body.password) .then((newAcc) => { /* assign token */ - res.cookie("auth",auth.create(newAcc,(3*24*60*60*1000))) - res.status(200) - res.end() - }) - .catch(() => { - ServeError(res,500,"internal server error") + setCookie( + ctx, + "auth", + auth.create(newAcc, 3 * 24 * 60 * 60 * 1000) + ) + return ctx.text("") }) + .catch(() => ServeError(ctx, 500, "internal server error")) }) - authRoutes.post("/logout", (req,res) => { - if (!auth.validate(req.cookies.auth)) { - ServeError(res, 401, "not logged in") - return + authRoutes.post("/logout", async (ctx) => { + if (!auth.validate(getCookie(ctx, "auth")!)) { + return ServeError(ctx, 401, "not logged in") } - auth.invalidate(req.cookies.auth) - res.send("logged out") + auth.invalidate(getCookie(ctx, "auth")!) + return ctx.text("logged out") }) - authRoutes.post("/dfv", requiresAccount, requiresPermissions("manage"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account + authRoutes.post( + "/dfv", + requiresAccount, + requiresPermissions("manage"), + // Used body-parser + async (ctx) => { + const body = await ctx.req.json() + let acc = ctx.get("account") as Accounts.Account - if (['public','private','anonymous'].includes(req.body.defaultFileVisibility)) { - acc.defaultFileVisibility = req.body.defaultFileVisibility - Accounts.save() - res.send(`dfv has been set to ${acc.defaultFileVisibility}`) - } else { - res.status(400) - res.send("invalid dfv") + if ( + ["public", "private", "anonymous"].includes( + body.defaultFileVisibility + ) + ) { + acc.defaultFileVisibility = body.defaultFileVisibility + Accounts.save() + return ctx.text( + `dfv has been set to ${acc.defaultFileVisibility}` + ) + } else { + return ctx.text("invalid dfv", 400) + } } - }) + ) - authRoutes.post("/customcss", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.fileId != "string") req.body.fileId = undefined; - - if ( + authRoutes.post( + "/customcss", + requiresAccount, + requiresPermissions("customize"), + // Used body-parser + async (ctx) => { + const body = await ctx.req.json() + let acc = ctx.get("account") as Accounts.Account - !req.body.fileId - || (req.body.fileId.match(id_check_regex) == req.body.fileId - && req.body.fileId.length <= config.maxUploadIdLength) - - ) { - acc.customCSS = req.body.fileId || undefined - if (!req.body.fileId) delete acc.customCSS - Accounts.save() - res.send(`custom css saved`) - } else { - res.status(400) - res.send("invalid fileid") + if (typeof body.fileId != "string") body.fileId = undefined + + if ( + !body.fileId || + (body.fileId.match(id_check_regex) == body.fileId && + body.fileId.length <= config.maxUploadIdLength) + ) { + acc.customCSS = body.fileId || undefined + if (!body.fileId) delete acc.customCSS + Accounts.save() + return ctx.text(`custom css saved`) + } else { + return ctx.text("invalid fileid", 400) + } } - }) + ) - authRoutes.post("/embedcolor", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.color != "string") req.body.color = undefined; - - if ( + authRoutes.post( + "/embedcolor", + requiresAccount, + requiresPermissions("customize"), + // Used body-parser + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.color != "string") body.color = undefined + + if ( + !body.color || + (body.color.toLowerCase().match(/[a-f0-9]+/) == + body.color.toLowerCase() && + body.color.length == 6) + ) { + if (!acc.embed) acc.embed = {} + acc.embed.color = body.color || undefined + if (!body.color) delete acc.embed.color + Accounts.save() + return ctx.text(`custom embed color saved`) + } else { + return ctx.text("invalid hex code", 400) + } + } + ) + + authRoutes.post( + "/embedsize", + requiresAccount, + requiresPermissions("customize"), + // Used body-parser + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.largeImage != "boolean") body.color = false - !req.body.color - || (req.body.color.toLowerCase().match(/[a-f0-9]+/) == req.body.color.toLowerCase()) - && req.body.color.length == 6 - - ) { if (!acc.embed) acc.embed = {} - acc.embed.color = req.body.color || undefined - if (!req.body.color) delete acc.embed.color + acc.embed.largeImage = body.largeImage + if (!body.largeImage) delete acc.embed.largeImage Accounts.save() - res.send(`custom embed color saved`) - } else { - res.status(400) - res.send("invalid hex code") + return ctx.text(`custom embed image size saved`) } - }) + ) - authRoutes.post("/embedsize", requiresAccount, requiresPermissions("customize"), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.largeImage != "boolean") req.body.color = false; + authRoutes.post( + "/delete_account", + requiresAccount, + noAPIAccess, + // Used body-parser + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + let accId = acc.id - if (!acc.embed) acc.embed = {} - acc.embed.largeImage = req.body.largeImage - if (!req.body.largeImage) delete acc.embed.largeImage - Accounts.save() - res.send(`custom embed image size saved`) - }) + auth.AuthTokens.filter((e) => e.account == accId).forEach((v) => { + auth.invalidate(v.token) + }) - authRoutes.post("/delete_account", requiresAccount, noAPIAccess, parser, async (req,res) => { - let acc = res.locals.acc as Accounts.Account - - let accId = acc.id + let cpl = () => + Accounts.deleteAccount(accId).then((_) => + ctx.text("account deleted") + ) - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { - auth.invalidate(v.token) - }) + if (body.deleteFiles) { + let f = acc.files.map((e) => e) // make shallow copy so that iterating over it doesnt Die + for (let v of f) { + files.unlink(v, true).catch((err) => console.error(err)) + } - let cpl = () => Accounts.deleteAccount(accId).then(_ => res.send("account deleted")) - - if (req.body.deleteFiles) { - let f = acc.files.map(e=>e) // make shallow copy so that iterating over it doesnt Die - for (let v of f) { - files.unlink(v,true).catch(err => console.error(err)) + return writeFile( + process.cwd() + "/.data/files.json", + JSON.stringify(files.files) + ).then(cpl) + } else cpl() + } + ) + + authRoutes.post( + "/change_username", + requiresAccount, + noAPIAccess, + // Used body-parser + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if ( + typeof body.username != "string" || + body.username.length < 3 || + body.username.length > 20 + ) { + return ServeError( + ctx, + 400, + "username must be between 3 and 20 characters in length" + ) } - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { - if (err) console.log(err) - cpl() - }) - } else cpl() - }) + let _acc = Accounts.getFromUsername(body.username) - authRoutes.post("/change_username", requiresAccount, noAPIAccess, parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account + if (_acc) { + return ServeError( + ctx, + 400, + "account with this username already exists" + ) + } - if (typeof req.body.username != "string" || req.body.username.length < 3 || req.body.username.length > 20) { - ServeError(res,400,"username must be between 3 and 20 characters in length") - return + if ( + (body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != + body.username + ) { + return ServeError( + ctx, + 400, + "username contains invalid characters" + ) + } + + acc.username = body.username + Accounts.save() + + if (acc.email) { + return sendMail( + acc.email, + `Your login details have been updated`, + `Hello there! Your username has been updated to ${body.username}. Please update your devices accordingly. Thank you for using monofile.` + ) + .then(() => ctx.text("OK")) + .catch((err) => {}) + } + + return ctx.text("username changed") } - - let _acc = Accounts.getFromUsername(req.body.username) - - if (_acc) { - ServeError(res,400,"account with this username already exists") - return - } - - if ((req.body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != req.body.username) { - ServeError(res,400,"username contains invalid characters") - return - } - - acc.username = req.body.username - Accounts.save() - - if (acc.email) { - sendMail(acc.email, `Your login details have been updated`, `Hello there! Your username has been updated to ${req.body.username}. Please update your devices accordingly. Thank you for using monofile.`).then(() => { - res.send("OK") - }).catch((err) => {}) - } - - res.send("username changed") - }) + ) // shit way to do this but... - let verificationCodes = new Map() + let verificationCodes = new Map< + string, + { code: string; email: string; expiry: NodeJS.Timeout } + >() - authRoutes.post("/request_email_change", requiresAccount, noAPIAccess, accountRatelimit({ requests: 4, per: 60*60*1000 }), parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - - if (typeof req.body.email != "string" || !req.body.email) { - ServeError(res,400, "supply an email") - return - } + authRoutes.post( + "/request_email_change", + requiresAccount, + noAPIAccess, + accountRatelimit({ requests: 4, per: 60 * 60 * 1000 }), + // Used body-parser + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.email != "string" || !body.email) { + ServeError(ctx, 400, "supply an email") + return + } - let vcode = verificationCodes.get(acc.id) + let vcode = verificationCodes.get(acc.id) - // delete previous if any - let e = vcode?.expiry - if (e) clearTimeout(e) - verificationCodes.delete(acc?.id||"") - - let code = generateFileId(12).toUpperCase() - - // set - - verificationCodes.set(acc.id, { - code, - email: req.body.email, - expiry: setTimeout( () => verificationCodes.delete(acc?.id||""), 15*60*1000) - }) - - // this is a mess but it's fine - - sendMail(req.body.email, `Hey there, ${acc.username} - let's connect your email`, `Hello there! You are recieving this message because you decided to link your email, ${req.body.email.split("@")[0]}@${req.body.email.split("@")[1]}, to your account, ${acc.username}. If you would like to continue, please click here, or go to https://${req.header("Host")}/auth/confirm_email/${code}.`).then(() => { - res.send("OK") - }).catch((err) => { - let e = verificationCodes.get(acc?.id||"")?.expiry + // delete previous if any + let e = vcode?.expiry if (e) clearTimeout(e) - verificationCodes.delete(acc?.id||"") - res.locals.undoCount(); - ServeError(res, 500, err?.toString()) - }) - }) + verificationCodes.delete(acc?.id || "") - authRoutes.get("/confirm_email/:code", requiresAccount, noAPIAccess, (req,res) => { - let acc = res.locals.acc as Accounts.Account - + let code = generateFileId(12).toUpperCase() - let vcode = verificationCodes.get(acc.id) + // set - if (!vcode) { ServeError(res, 400, "nothing to confirm"); return } + verificationCodes.set(acc.id, { + code, + email: body.email, + expiry: setTimeout( + () => verificationCodes.delete(acc?.id || ""), + 15 * 60 * 1000 + ), + }) - if (typeof req.params.code == "string" && req.params.code.toUpperCase() == vcode.code) { - acc.email = vcode.email - Accounts.save(); + // this is a mess but it's fine - let e = verificationCodes.get(acc?.id||"")?.expiry - if (e) clearTimeout(e) - verificationCodes.delete(acc?.id||"") - - res.redirect("/") - } else { - ServeError(res, 400, "invalid code") + sendMail( + body.email, + `Hey there, ${acc.username} - let's connect your email`, + `Hello there! You are recieving this message because you decided to link your email, ${ + body.email.split("@")[0] + }@${ + body.email.split("@")[1] + }, to your account, ${ + acc.username + }. If you would like to continue, please click here, or go to https://${ctx.req.header( + "Host" + )}/auth/confirm_email/${code}.` + ) + .then(() => ctx.text("OK")) + .catch((err) => { + let e = verificationCodes.get(acc?.id || "")?.expiry + if (e) clearTimeout(e) + verificationCodes.delete(acc?.id || "") + ;(ctx.get("undoCount" as never) as () => {})() + return ServeError(ctx, 500, err?.toString()) + }) } - }) + ) - authRoutes.post("/remove_email", requiresAccount, noAPIAccess, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (acc.email) { - delete acc.email; - Accounts.save() - res.send("email detached") - } - else ServeError(res, 400, "email not attached") - }) + authRoutes.get( + "/confirm_email/:code", + requiresAccount, + noAPIAccess, + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account - let pwReset = new Map() + let vcode = verificationCodes.get(acc.id) + + if (!vcode) { + ServeError(ctx, 400, "nothing to confirm") + return + } + + if ( + typeof ctx.req.param("code") == "string" && + ctx.req.param("code").toUpperCase() == vcode.code + ) { + acc.email = vcode.email + Accounts.save() + + let e = verificationCodes.get(acc?.id || "")?.expiry + if (e) clearTimeout(e) + verificationCodes.delete(acc?.id || "") + + return ctx.redirect("/") + } else { + return ServeError(ctx, 400, "invalid code") + } + } + ) + + authRoutes.post( + "/remove_email", + requiresAccount, + noAPIAccess, + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + + if (acc.email) { + delete acc.email + Accounts.save() + return ctx.text("email detached") + } else return ServeError(ctx, 400, "email not attached") + } + ) + + let pwReset = new Map< + string, + { code: string; expiry: NodeJS.Timeout; requestedAt: number } + >() let prcIdx = new Map() - authRoutes.post("/request_emergency_login", parser, (req,res) => { - if (auth.validate(req.cookies.auth || "")) return - - if (typeof req.body.account != "string" || !req.body.account) { - ServeError(res,400, "supply a username") + authRoutes.post("/request_emergency_login", async (ctx) => { + if (auth.validate(getCookie(ctx, "auth") || "")) return + const body = await ctx.req.json() + if (typeof body.account != "string" || !body.account) { + ServeError(ctx, 400, "supply a username") return } - let acc = Accounts.getFromUsername(req.body.account) + let acc = Accounts.getFromUsername(body.account) if (!acc || !acc.email) { - ServeError(res, 400, "this account either does not exist or does not have an email attached; please contact the server's admin for a reset if you would still like to access it") - return + return ServeError( + ctx, + 400, + "this account either does not exist or does not have an email attached; please contact the server's admin for a reset if you would still like to access it" + ) } - let pResetCode = pwReset.get(acc.id) + let pResetCode = pwReset.get(acc.id) - if (pResetCode && pResetCode.requestedAt+(15*60*1000) > Date.now()) { - ServeError(res, 429, `Please wait a few moments to request another emergency login.`) - return + if ( + pResetCode && + pResetCode.requestedAt + 15 * 60 * 1000 > Date.now() + ) { + return ServeError( + ctx, + 429, + `Please wait a few moments to request another emergency login.` + ) } - // delete previous if any let e = pResetCode?.expiry if (e) clearTimeout(e) - pwReset.delete(acc?.id||"") - prcIdx.delete(pResetCode?.code||"") + pwReset.delete(acc?.id || "") + prcIdx.delete(pResetCode?.code || "") let code = generateFileId(12).toUpperCase() @@ -358,107 +485,146 @@ module.exports = function(files: Files) { pwReset.set(acc.id, { code, - expiry: setTimeout( () => { pwReset.delete(acc?.id||""); prcIdx.delete(pResetCode?.code||"") }, 15*60*1000), - requestedAt: Date.now() + expiry: setTimeout(() => { + pwReset.delete(acc?.id || "") + prcIdx.delete(pResetCode?.code || "") + }, 15 * 60 * 1000), + requestedAt: Date.now(), }) prcIdx.set(code, acc.id) // this is a mess but it's fine - sendMail(acc.email, `Emergency login requested for ${acc.username}`, `Hello there! You are recieving this message because you forgot your password to your monofile account, ${acc.username}. To log in, please click here, or go to https://${req.header("Host")}/auth/emergency_login/${code}. If it doesn't appear that you are logged in after visiting this link, please try refreshing. Once you have successfully logged in, you may reset your password.`).then(() => { - res.send("OK") - }).catch((err) => { - let e = pwReset.get(acc?.id||"")?.expiry - if (e) clearTimeout(e) - pwReset.delete(acc?.id||"") - prcIdx.delete(code||"") - ServeError(res, 500, err?.toString()) - }) + return sendMail( + acc.email, + `Emergency login requested for ${acc.username}`, + `Hello there! You are recieving this message because you forgot your password to your monofile account, ${ + acc.username + }. To log in, please click here, or go to https://${ctx.req.header( + "Host" + )}/auth/emergency_login/${code}. If it doesn't appear that you are logged in after visiting this link, please try refreshing. Once you have successfully logged in, you may reset your password.` + ) + .then(() => ctx.text("OK")) + .catch((err) => { + let e = pwReset.get(acc?.id || "")?.expiry + if (e) clearTimeout(e) + pwReset.delete(acc?.id || "") + prcIdx.delete(code || "") + return ServeError(ctx, 500, err?.toString()) + }) }) - authRoutes.get("/emergency_login/:code", (req,res) => { - if (auth.validate(req.cookies.auth || "")) { - ServeError(res, 403, "already logged in") - return + authRoutes.get("/emergency_login/:code", async (ctx) => { + if (auth.validate(getCookie(ctx, "auth") || "")) { + return ServeError(ctx, 403, "already logged in") } - let vcode = prcIdx.get(req.params.code) + let vcode = prcIdx.get(ctx.req.param("code")) - if (!vcode) { ServeError(res, 400, "invalid emergency login code"); return } - - if (typeof req.params.code == "string" && vcode) { - res.cookie("auth",auth.create(vcode,(3*24*60*60*1000))) - res.redirect("/") + if (!vcode) { + return ServeError(ctx, 400, "invalid emergency login code") + } + if (typeof ctx.req.param("code") == "string" && vcode) { + setCookie(ctx, "auth", auth.create(vcode, 3 * 24 * 60 * 60 * 1000)) let e = pwReset.get(vcode)?.expiry if (e) clearTimeout(e) pwReset.delete(vcode) - prcIdx.delete(req.params.code) + prcIdx.delete(ctx.req.param("code")) + return ctx.redirect("/") } else { - ServeError(res, 400, "invalid code") + ServeError(ctx, 400, "invalid code") } }) - authRoutes.post("/change_password", requiresAccount, noAPIAccess, parser, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - if (typeof req.body.password != "string" || req.body.password.length < 8) { - ServeError(res,400,"password must be 8 characters or longer") - return + authRoutes.post( + "/change_password", + requiresAccount, + noAPIAccess, + // Used body-parser + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.password != "string" || body.password.length < 8) { + ServeError(ctx, 400, "password must be 8 characters or longer") + return + } + + let accId = acc.id + + Accounts.password.set(accId, body.password) + + auth.AuthTokens.filter((e) => e.account == accId).forEach((v) => { + auth.invalidate(v.token) + }) + + if (acc.email) { + return sendMail( + acc.email, + `Your login details have been updated`, + `Hello there! This email is to notify you of a password change that you have initiated. You have been logged out of your devices. Thank you for using monofile.` + ) + .then(() => ctx.text("OK")) + .catch((err) => {}) + } + + return ctx.text("password changed - logged out all sessions") } + ) - let accId = acc.id + authRoutes.post( + "/logout_sessions", + requiresAccount, + noAPIAccess, + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account - Accounts.password.set(accId,req.body.password) + let accId = acc.id - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { - auth.invalidate(v.token) - }) + auth.AuthTokens.filter((e) => e.account == accId).forEach((v) => { + auth.invalidate(v.token) + }) - if (acc.email) { - sendMail(acc.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that you have initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { - res.send("OK") - }).catch((err) => {}) + return ctx.text("logged out all sessions") } + ) - res.send("password changed - logged out all sessions") + authRoutes.get( + "/me", + requiresAccount, + requiresPermissions("user"), + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + let sessionToken = auth.tokenFor(ctx)! + let accId = acc.id + return ctx.json({ + ...acc, + sessionCount: auth.AuthTokens.filter( + (e) => + e.type != "App" && + e.account == accId && + (e.expire > Date.now() || !e.expire) + ).length, + sessionExpires: auth.AuthTokens.find( + (e) => e.token == sessionToken + )?.expire, + password: undefined, + email: + auth.getType(sessionToken) == "User" || + auth.getPermissions(sessionToken)?.includes("email") + ? acc.email + : undefined, + }) + } + ) + + authRoutes.get("/customCSS", async (ctx) => { + let acc = ctx.get("account") + if (acc?.customCSS) return ctx.redirect(`/file/${acc.customCSS}`) + else return ctx.text("") }) - - authRoutes.post("/logout_sessions", requiresAccount, noAPIAccess, (req,res) => { - let acc = res.locals.acc as Accounts.Account - - let accId = acc.id - - auth.AuthTokens.filter(e => e.account == accId).forEach((v) => { - auth.invalidate(v.token) - }) - - res.send("logged out all sessions") - }) - - authRoutes.get("/me", requiresAccount, requiresPermissions("user"), (req,res) => { - let acc = res.locals.acc as Accounts.Account - - let sessionToken = auth.tokenFor(req) - let accId = acc.id - res.send({ - ...acc, - sessionCount: auth.AuthTokens.filter(e => e.type != "App" && e.account == accId && (e.expire > Date.now() || !e.expire)).length, - sessionExpires: auth.AuthTokens.find(e => e.token == sessionToken)?.expire, - password: undefined, - email: - auth.getType(sessionToken) == "User" || auth.getPermissions(sessionToken)?.includes("email") - ? acc.email - : undefined - }) - }) - - authRoutes.get("/customCSS", (req,res) => { - let acc = res.locals.acc - if (acc?.customCSS) res.redirect(`/file/${acc.customCSS}`) - else res.send("") - }) - return authRoutes -} \ No newline at end of file +} diff --git a/src/server/routes/api/v0/fileApiRoutes.ts b/src/server/routes/api/v0/fileApiRoutes.ts index 96cd176..de10fe4 100644 --- a/src/server/routes/api/v0/fileApiRoutes.ts +++ b/src/server/routes/api/v0/fileApiRoutes.ts @@ -1,98 +1,129 @@ -import bodyParser from "body-parser"; -import { Router } from "express"; -import * as Accounts from "../../../lib/accounts"; -import * as auth from "../../../lib/auth"; -import bytes from "bytes" -import {writeFile} from "fs"; +import { Hono } from "hono" +import * as Accounts from "../../../lib/accounts" +import { writeFile } from "fs/promises" +import Files from "../../../lib/files" +import { + getAccount, + requiresAccount, + requiresPermissions, +} from "../../../lib/middleware" -import ServeError from "../../../lib/errors"; -import Files from "../../../lib/files"; -import { getAccount, requiresAccount, requiresPermissions } from "../../../lib/middleware"; - -let parser = bodyParser.json({ - type: ["text/plain","application/json"] -}) - -export let fileApiRoutes = Router(); +export let fileApiRoutes = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() let config = require(`${process.cwd()}/config.json`) +fileApiRoutes.use("*", getAccount) // :warning: /list somehow crashes Hono with an internal error! +/* +/home/jack/Code/Web/monofile/node_modules/.pnpm/@hono+node-server@1.2.0/node_modules/@hono/node-server/dist/listener.js:55 + const contentType = res.headers.get("content-type") || ""; + ^ -module.exports = function(files: Files) { +TypeError: Cannot read properties of undefined (reading 'get') + at Server. (/home/jack/Code/Web/monofile/node_modules/.pnpm/@hono+node-server@1.2.0/node_modules/@hono/node-server/dist/listener.js:55:37) + at process.processTicksAndRejections (node:internal/process/task_queues:95:5) +*/ - fileApiRoutes.use(getAccount); +module.exports = function (files: Files) { + fileApiRoutes.get( + "/list", + requiresAccount, + requiresPermissions("user"), + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account - fileApiRoutes.get("/list", requiresAccount, requiresPermissions("user"), (req,res) => { + if (!acc) return + let accId = acc.id - let acc = res.locals.acc as Accounts.Account - - if (!acc) return - let accId = acc.id + ctx.json( + acc.files + .map((e) => { + let fp = files.getFilePointer(e) + if (!fp) { + Accounts.files.deindex(accId, e) + return null + } + return { + ...fp, + messageids: null, + owner: null, + id: e, + } + }) + .filter((e) => e) + ) + } + ) - res.send(acc.files.map((e) => { - let fp = files.getFilePointer(e) - if (!fp) { Accounts.files.deindex(accId, e); return null } - return { - ...fp, - messageids: null, - owner: null, - id:e - } - }).filter(e=>e)) - - }) - - fileApiRoutes.post("/manage", parser, requiresPermissions("manage"), (req,res) => { - - let acc = res.locals.acc as Accounts.Account - - if (!acc) return - if (!req.body.target || !(typeof req.body.target == "object") || req.body.target.length < 1) return - - let modified = 0 - - req.body.target.forEach((e:string) => { - if (!acc.files.includes(e)) return - - let fp = files.getFilePointer(e) - - if (fp.reserved) { + fileApiRoutes.post( + "/manage", + requiresPermissions("manage"), + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (!acc) return + if ( + !body.target || + !(typeof body.target == "object") || + body.target.length < 1 + ) return - } - switch( req.body.action ) { - case "delete": - files.unlink(e, true) - modified++; - break; + let modified = 0 - case "changeFileVisibility": - if (!["public","anonymous","private"].includes(req.body.value)) return; - files.files[e].visibility = req.body.value; - modified++; - break; + body.target.forEach((e: string) => { + if (!acc.files.includes(e)) return - case "setTag": - if (!req.body.value) delete files.files[e].tag - else { - if (req.body.value.toString().length > 30) return - files.files[e].tag = req.body.value.toString().toLowerCase() - } - modified++; - break; - } - }) + let fp = files.getFilePointer(e) - Accounts.save().then(() => { - writeFile(process.cwd()+"/.data/files.json",JSON.stringify(files.files), (err) => { - if (err) console.log(err) - res.contentType("text/plain") - res.send(`modified ${modified} files`) + if (fp.reserved) { + return + } + + switch (body.action) { + case "delete": + files.unlink(e, true) + modified++ + break + + case "changeFileVisibility": + if ( + !["public", "anonymous", "private"].includes( + body.value + ) + ) + return + files.files[e].visibility = body.value + modified++ + break + + case "setTag": + if (!body.value) delete files.files[e].tag + else { + if (body.value.toString().length > 30) return + files.files[e].tag = body.value + .toString() + .toLowerCase() + } + modified++ + break + } }) - }).catch((err) => console.error(err)) - - }) + return Accounts.save() + .then(() => { + writeFile( + process.cwd() + "/.data/files.json", + JSON.stringify(files.files) + ) + }) + .then(() => ctx.text(`modified ${modified} files`)) + .catch((err) => console.error(err)) + } + ) return fileApiRoutes -} \ No newline at end of file +} diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 30b98a6..efc0d67 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -1,11 +1,12 @@ import bodyParser from "body-parser" -import express, { Router } from "express" +import { Hono } from "hono" + import * as Accounts from "../../../lib/accounts" import * as auth from "../../../lib/auth" import axios, { AxiosResponse } from "axios" import { type Range } from "range-parser" import multer, { memoryStorage } from "multer" - +import { Readable } from "stream" import ServeError from "../../../lib/errors" import Files from "../../../lib/files" import { getAccount, requiresPermissions } from "../../../lib/middleware" @@ -14,7 +15,11 @@ let parser = bodyParser.json({ type: ["text/plain", "application/json"], }) -export let primaryApi = Router() +export let primaryApi = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() const multerSetup = multer({ storage: memoryStorage() }) @@ -23,216 +28,210 @@ let config = require(`${process.cwd()}/config.json`) primaryApi.use(getAccount) module.exports = function (files: Files) { - primaryApi.get( - ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], - async (req: express.Request, res: express.Response) => { - let acc = res.locals.acc as Accounts.Account + // primaryApi.get( + // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], + // async (ctx) => { + // let acc = ctx.get("account") as Accounts.Account - let file = files.getFilePointer(req.params.fileId) - res.setHeader("Access-Control-Allow-Origin", "*") - res.setHeader("Content-Security-Policy", "sandbox allow-scripts") - if (req.query.attachment == "1") - res.setHeader("Content-Disposition", "attachment") + // let file = files.getFilePointer(ctx.req.param("fileId")) + // ctx.header("Access-Control-Allow-Origin", "*") + // ctx.header("Content-Security-Policy", "sandbox allow-scripts") + // if (ctx.req.query("attachment") == "1") + // ctx.header("Content-Disposition", "attachment") - if (file) { - if (file.visibility == "private") { - if (acc?.id != file.owner) { - ServeError(res, 403, "you do not own this file") - return - } + // if (file) { + // if (file.visibility == "private") { + // if (acc?.id != file.owner) { + // return ServeError(ctx, 403, "you do not own this file") + // } - if ( - auth.getType(auth.tokenFor(req)) == "App" && - auth - .getPermissions(auth.tokenFor(req)) - ?.includes("private") - ) { - ServeError(res, 403, "insufficient permissions") - return - } - } + // if ( + // auth.getType(auth.tokenFor(ctx)!) == "App" && + // auth + // .getPermissions(auth.tokenFor(ctx)!) + // ?.includes("private") + // ) { + // ServeError(ctx, 403, "insufficient permissions") + // return + // } + // } - let range: Range | undefined + // let range: Range | undefined - res.setHeader("Content-Type", file.mime) - if (file.sizeInBytes) { - res.setHeader("Content-Length", file.sizeInBytes) + // ctx.header("Content-Type", file.mime) + // if (file.sizeInBytes) { + // ctx.header("Content-Length", file.sizeInBytes.toString()) - if (file.chunkSize) { - let rng = req.range(file.sizeInBytes) - if (rng) { - // error handling - if (typeof rng == "number") { - res.status(rng == -1 ? 416 : 400).send() - return - } - if (rng.type != "bytes") { - res.status(400).send() - return - } + // if (file.chunkSize) { + // let range = ctx.range(file.sizeInBytes) + // if (range) { + // // error handling + // if (typeof range == "number") { + // return ctx.status(range == -1 ? 416 : 400) + // } + // if (range.type != "bytes") { + // return ctx.status(400) + // } - // set ranges var - let rngs = Array.from(rng) - if (rngs.length != 1) { - res.status(400).send() - return - } - range = rngs[0] - } - } - } + // // set ranges var + // let rngs = Array.from(range) + // if (rngs.length != 1) { + // return ctx.status(400) + // } + // range = rngs[0] + // } + // } + // } - // supports ranges + // // supports ranges - files - .readFileStream(req.params.fileId, range) - .then(async (stream) => { - if (range) { - res.status(206) - res.header( - "Content-Length", - (range.end - range.start + 1).toString() - ) - res.header( - "Content-Range", - `bytes ${range.start}-${range.end}/${file.sizeInBytes}` - ) - } - stream.pipe(res) - }) - .catch((err) => { - ServeError(res, err.status, err.message) - }) - } else { - ServeError(res, 404, "file not found") - } - } - ) + // return files + // .readFileStream(ctx.req.param("fileId"), range) + // .then(async (stream) => { + // if (range) { + // ctx.status(206) + // ctx.header( + // "Content-Length", + // (range.end - range.start + 1).toString() + // ) + // ctx.header( + // "Content-Range", + // `bytes ${range.start}-${range.end}/${file.sizeInBytes}` + // ) + // } - primaryApi.head( - ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], - (req: express.Request, res: express.Response) => { - let file = files.getFilePointer(req.params.fileId) + // return ctx.stream((stre) => { + // // Somehow return a stream? + // }) + // }) + // .catch((err) => { + // return ServeError(ctx, err.status, err.message) + // }) + // } else { + // return ServeError(ctx, 404, "file not found") + // } + // } + // ) - if ( - file.visibility == "private" && - (res.locals.acc?.id != file.owner || - (auth.getType(auth.tokenFor(req)) == "App" && - auth - .getPermissions(auth.tokenFor(req)) - ?.includes("private"))) - ) { - res.status(403).send() - return - } + // // primaryApi.head( + // // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], + // // async (ctx) => { + // // let file = files.getFilePointer(req.params.fileId) - res.setHeader("Access-Control-Allow-Origin", "*") - res.setHeader("Content-Security-Policy", "sandbox allow-scripts") + // // if ( + // // file.visibility == "private" && + // // (ctx.get("account")?.id != file.owner || + // // (auth.getType(auth.tokenFor(ctx)!) == "App" && + // // auth + // // .getPermissions(auth.tokenFor(ctx)!) + // // ?.includes("private"))) + // // ) { + // // return ctx.status(403) + // // } - if (req.query.attachment == "1") - res.setHeader("Content-Disposition", "attachment") + // // ctx.header("Content-Security-Policy", "sandbox allow-scripts") - if (!file) { - res.status(404) - res.send() - } else { - res.setHeader("Content-Type", file.mime) - if (file.sizeInBytes) { - res.setHeader("Content-Length", file.sizeInBytes) - } - if (file.chunkSize) { - res.setHeader("Accept-Ranges", "bytes") - } - res.send() - } - } - ) + // // if (ctx.req.query("attachment") == "1") + // // ctx.header("Content-Disposition", "attachment") - // upload handlers + // // if (!file) { + // // res.status(404) + // // res.send() + // // } else { + // // ctx.header("Content-Type", file.mime) + // // if (file.sizeInBytes) { + // // ctx.header("Content-Length", file.sizeInBytes) + // // } + // // if (file.chunkSize) { + // // ctx.header("Accept-Ranges", "bytes") + // // } + // // res.send() + // // } + // // } + // // ) - primaryApi.post( - "/upload", - requiresPermissions("upload"), - multerSetup.single("file"), - async (req, res) => { - let acc = res.locals.acc as Accounts.Account + // // upload handlers - if (req.file) { - try { - let prm = req.header("monofile-params") - let params: { [key: string]: any } = {} - if (prm) { - params = JSON.parse(prm) - } + // primaryApi.post( + // "/upload", + // requiresPermissions("upload"), + // multerSetup.single("file"), + // async (ctx) => { + // let acc = ctx.get("account") as Accounts.Account - files - .uploadFile( - { - owner: acc?.id, + // if (req.file) { + // try { + // let prm = req.header("monofile-params") + // let params: { [key: string]: any } = {} + // if (prm) { + // params = JSON.parse(prm) + // } - uploadId: params.uploadId, - filename: req.file.originalname, - mime: req.file.mimetype, - }, - req.file.buffer - ) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status) - res.send(`[err] ${stat.message}`) - }) - } catch { - res.status(400) - res.send("[err] bad request") - } - } else { - res.status(400) - res.send("[err] bad request") - } - } - ) + // files + // .uploadFile( + // { + // owner: acc?.id, - primaryApi.post( - "/clone", - requiresPermissions("upload"), - bodyParser.json({ type: ["text/plain", "application/json"] }), - (req, res) => { - let acc = res.locals.acc as Accounts.Account + // uploadId: params.uploadId, + // filename: req.file.originalname, + // mime: req.file.mimetype, + // }, + // req.file.buffer + // ) + // .then((uID) => res.send(uID)) + // .catch((stat) => { + // res.status(stat.status) + // res.send(`[err] ${stat.message}`) + // }) + // } catch { + // res.status(400) + // res.send("[err] bad request") + // } + // } else { + // res.status(400) + // res.send("[err] bad request") + // } + // } + // ) - try { - axios - .get(req.body.url, { responseType: "arraybuffer" }) - .then((data: AxiosResponse) => { - files - .uploadFile( - { - owner: acc?.id, - filename: - req.body.url.split("/")[ - req.body.url.split("/").length - 1 - ] || "generic", - mime: data.headers["content-type"], - uploadId: req.body.uploadId, - }, - Buffer.from(data.data) - ) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status) - res.send(`[err] ${stat.message}`) - }) - }) - .catch((err) => { - console.log(err) - res.status(400) - res.send(`[err] failed to fetch data`) - }) - } catch { - res.status(500) - res.send("[err] an error occured") - } - } - ) + // primaryApi.post( + // "/clone", + // requiresPermissions("upload"), + // async ctx => { + // let acc = ctx.get("account") as Accounts.Account + + // try { + // return axios + // .get(req.body.url, { responseType: "arraybuffer" }) + // .then((data: AxiosResponse) => { + // files + // .uploadFile( + // { + // owner: acc?.id, + // filename: + // req.body.url.split("/")[ + // req.body.url.split("/").length - 1 + // ] || "generic", + // mime: data.headers["content-type"], + // uploadId: req.body.uploadId, + // }, + // Buffer.from(data.data) + // ) + // .then((uID) => res.send(uID)) + // .catch((stat) => { + // res.status(stat.status) + // res.send(`[err] ${stat.message}`) + // }) + // }) + // .catch((err) => { + // console.log(err) + // return res.text(`[err] failed to fetch data`, 400) + // }) + // } catch { + // return ctx.text("[err] an error occured", 500) + // } + // } + // ) return primaryApi } diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index d6791d7..8a39cee 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -1,214 +1,223 @@ // Modules -import { writeFile } from 'fs' -import { Router } from "express"; -import bodyParser from "body-parser"; + +import { Hono } from "hono" +import { getCookie, setCookie } from "hono/cookie" // Libs -import Files, { id_check_regex } from "../../../lib/files"; -import * as Accounts from '../../../lib/accounts' -import * as Authentication from '../../../lib/auth' -import { assertAPI, getAccount, noAPIAccess, requiresAccount, requiresPermissions } from "../../../lib/middleware"; -import ServeError from "../../../lib/errors"; -import { sendMail } from '../../../lib/mail'; +import Files, { id_check_regex } from "../../../lib/files" +import * as Accounts from "../../../lib/accounts" +import * as Authentication from "../../../lib/auth" +import { + assertAPI, + getAccount, + noAPIAccess, + requiresAccount, + requiresPermissions, +} from "../../../lib/middleware" +import ServeError from "../../../lib/errors" +import { sendMail } from "../../../lib/mail" const Configuration = require(`${process.cwd()}/config.json`) -const parser = bodyParser.json({ - type: [ "type/plain", "application/json" ] -}) +const router = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() -const router = Router() +router.use(getAccount) -router.use(getAccount, parser) - -module.exports = function(files: Files) { - router.post( - "/login", - (req, res) => { - if (typeof req.body.username != "string" || typeof req.body.password != "string") { - ServeError(res, 400, "please provide a username or password") - return - } - - if (Authentication.validate(req.cookies.auth)) { - ServeError(res, 400, "you are already logged in") - return - } - - const Account = Accounts.getFromUsername(req.body.username) - - if (!Account || !Accounts.password.check(Account.id, req.body.password)) { - ServeError(res, 400, "username or password incorrect") - return - } - - res.cookie("auth", - Authentication.create( - Account.id, // account id - (3 * 24 * 60 * 60 * 1000) // expiration time - ) - ) - res.status(200) - res.end() +module.exports = function (files: Files) { + router.post("/login", async (ctx, res) => { + const body = await ctx.req.json() + if ( + typeof body.username != "string" || + typeof body.password != "string" + ) { + ServeError(ctx, 400, "please provide a username or password") + return } - ) - router.post( - "/create", - (req, res) => { - if (!Configuration.accounts.registrationEnabled) { - ServeError(res , 403, "account registration disabled") - return + if (Authentication.validate(getCookie(ctx, "auth")!)) { + ServeError(ctx, 400, "you are already logged in") + return + } + + const Account = Accounts.getFromUsername(body.username) + + if (!Account || !Accounts.password.check(Account.id, body.password)) { + ServeError(ctx, 400, "username or password incorrect") + return + } + setCookie( + ctx, + "auth", + Authentication.create( + Account.id, // account id + 3 * 24 * 60 * 60 * 1000 // expiration time + ), + { + // expires: } + ) + ctx.status(200) + }) - if (Authentication.validate(req.cookies.auth)) { - ServeError(res, 400, "you are already logged in") - return - } + router.post("/create", async (ctx) => { + const body = await ctx.req.json() + if (!Configuration.accounts.registrationEnabled) { + return ServeError(ctx, 403, "account registration disabled") + } - if (Accounts.getFromUsername(req.body.username)) { - ServeError(res, 400, "account with this username already exists") - return - } + if (Authentication.validate(getCookie(ctx, "auth")!)) { + return ServeError(ctx, 400, "you are already logged in") + } - if (req.body.username.length < 3 || req.body.username.length > 20) { - ServeError(res, 400, "username must be over or equal to 3 characters or under or equal to 20 characters in length") - return - } + if (Accounts.getFromUsername(body.username)) { + return ServeError( + ctx, + 400, + "account with this username already exists" + ) + } - if ( - ( - req.body.username.match(/[A-Za-z0-9_\-\.]+/) - || - [] - )[0] != req.body.username - ) { - ServeError(res, 400, "username contains invalid characters") - return - } + if (body.username.length < 3 || body.username.length > 20) { + return ServeError( + ctx, + 400, + "username must be over or equal to 3 characters or under or equal to 20 characters in length" + ) + } - if (req.body.password.length < 8) { - ServeError(res, 400, "password must be 8 characters or longer") - return - } + if ( + (body.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != body.username + ) { + return ServeError(ctx, 400, "username contains invalid characters") + } - Accounts.create( - req.body.username, - req.body.password - ).then((Account) => { - res.cookie("auth", Authentication.create( - Account, // account id - (3 * 24 * 60 * 60 * 1000) // expiration time - )) - res.status(200) - res.end() + if (body.password.length < 8) { + return ServeError( + ctx, + 400, + "password must be 8 characters or longer" + ) + } + + return Accounts.create(body.username, body.password) + .then((Account) => { + setCookie( + ctx, + "auth", + Authentication.create( + Account, // account id + 3 * 24 * 60 * 60 * 1000 // expiration time + ), + { + // expires: + } + ) + return ctx.status(200) }) .catch(() => { - ServeError(res, 500, "internal server error") + return ServeError(ctx, 500, "internal server error") }) - } - ) + }) - router.post( - "/logout", - (req, res) => { - if (!Authentication.validate(req.cookies.auth)) { - ServeError(res, 401, "not logged in") - return - } - - Authentication.invalidate(req.cookies.auth) - res.send("logged out") + router.post("/logout", (ctx) => { + if (!Authentication.validate(getCookie(ctx, "auth")!)) { + return ServeError(ctx, 401, "not logged in") } - ) + + Authentication.invalidate(getCookie(ctx, "auth")!) + return ctx.text("logged out") + }) router.patch( "/dfv", - requiresAccount, requiresPermissions("manage"), - (req, res) => { - const Account = res.locals.acc as Accounts.Account - - if (['public', 'private', 'anonymous'].includes(req.body.defaultFileVisibility)) { - Account.defaultFileVisibility = req.body.defaultFileVisibility - - Accounts.save() - - res.send(`dfv has been set to ${Account.defaultFileVisibility}`) - } else { - ServeError(res, 400, "invalid dfv") - } - } - ) - - router.delete("/me", - requiresAccount, noAPIAccess, - parser, - (req, res) => { - const Account = res.locals.acc as Accounts.Account - - const accountId = Account.id - - Authentication.AuthTokens.filter(e => e.account == accountId).forEach((token) => { - Authentication.invalidate(token.token) - }) - - Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) - } - ) - - router.patch("/me/name", requiresAccount, - noAPIAccess, - parser, - (req, res) => { - const Account = res.locals.acc as Accounts.Account - - const newUsername = req.body.username + requiresPermissions("manage"), + async (ctx) => { + const body = await ctx.req.json() + const Account = ctx.get("account")! as Accounts.Account if ( - typeof newUsername != "string" - || - newUsername.length < 3 - || - req.body.username.length > 20 + ["public", "private", "anonymous"].includes( + body.defaultFileVisibility + ) ) { - ServeError(res, 400, "username must be between 3 and 20 characters in length") - return - } + Account.defaultFileVisibility = body.defaultFileVisibility - if (Accounts.getFromUsername(newUsername)) { - ServeError(res, 400, "account with this username already exists") - } + Accounts.save() - if ( - ( - newUsername.match(/[A-Za-z0-9_\-\.]+/) - || - [] - )[0] != req.body.username - ) { - ServeError(res, 400, "username contains invalid characters") - return - } - - Account.username = newUsername - Accounts.save() - - if (Account.email) { - sendMail( - Account.email, - `Your login details have been updated`, - `Hello there! Your username has been updated to ${newUsername}. Please update your devices accordingly. Thank you for using monofile.` - ).then(() => { - res.send("OK") - }).catch((err) => {}) + return ctx.text( + `dfv has been set to ${Account.defaultFileVisibility}` + ) + } else { + return ServeError(ctx, 400, "invalid dfv") } } ) - + router.delete("/me", requiresAccount, noAPIAccess, async (ctx) => { + const Account = ctx.get("account") as Accounts.Account + const accountId = Account.id + + Authentication.AuthTokens.filter((e) => e.account == accountId).forEach( + (token) => { + Authentication.invalidate(token.token) + } + ) + + await Accounts.deleteAccount(accountId) + return ctx.text("account deleted") + }) + + router.patch("/me/name", requiresAccount, noAPIAccess, async (ctx) => { + const Account = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + const newUsername = body.username + + if ( + typeof newUsername != "string" || + newUsername.length < 3 || + newUsername.length > 20 + ) { + return ServeError( + ctx, + 400, + "username must be between 3 and 20 characters in length" + ) + } + + if (Accounts.getFromUsername(newUsername)) { + return ServeError( + ctx, + 400, + "account with this username already exists" + ) + } + + if ( + (newUsername.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != body.username + ) { + ServeError(ctx, 400, "username contains invalid characters") + return + } + + Account.username = newUsername + Accounts.save() + + if (Account.email) { + await sendMail( + Account.email, + `Your login details have been updated`, + `Hello there! Your username has been updated to ${newUsername}. Please update your devices accordingly. Thank you for using monofile.` + ).catch() + return ctx.text("OK") + } + }) return router -} \ No newline at end of file +} diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts index fc00b50..a56e821 100644 --- a/src/server/routes/api/v1/admin.ts +++ b/src/server/routes/api/v1/admin.ts @@ -1,120 +1,119 @@ // Modules -import { writeFile } from 'fs' -import { Router } from "express"; -import bodyParser from "body-parser"; +import { writeFile } from "fs/promises" +import { Hono } from "hono" // Libs -import Files, { id_check_regex } from "../../../lib/files"; -import * as Accounts from '../../../lib/accounts' -import * as Authentication from '../../../lib/auth' -import { assertAPI, getAccount, noAPIAccess, requiresAccount, requiresAdmin, requiresPermissions } from "../../../lib/middleware"; -import ServeError from "../../../lib/errors"; -import { sendMail } from '../../../lib/mail'; +import Files, { id_check_regex } from "../../../lib/files" +import * as Accounts from "../../../lib/accounts" +import * as Authentication from "../../../lib/auth" +import { + getAccount, + noAPIAccess, + requiresAccount, + requiresAdmin, +} from "../../../lib/middleware" +import ServeError from "../../../lib/errors" +import { sendMail } from "../../../lib/mail" const Configuration = require(`${process.cwd()}/config.json`) -const parser = bodyParser.json({ - type: [ "type/plain", "application/json" ] -}) +const router = new Hono<{ + Variables: { + account?: Accounts.Account + } +}>() -const router = Router() +router.use(getAccount, requiresAccount, requiresAdmin) -router.use(getAccount, requiresAccount, requiresAdmin, parser) +module.exports = function (files: Files) { + router.patch("/account/:username/password", async (ctx) => { + const Account = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() -module.exports = function(files: Files) { - router.patch( - "/account/:username/password", - (req, res) => { - const Account = res.locals.acc as Accounts.Account + const targetUsername = ctx.req.param("username") + const password = body.password - const targetUsername = req.params.username - const password = req.body.password + if (typeof password !== "string") return ServeError(ctx, 404, "") - if (typeof password !== "string") { - ServeError(res, 404, "") - return - } + const targetAccount = Accounts.getFromUsername(targetUsername) - const targetAccount = Accounts.getFromUsername(targetUsername) + if (!targetAccount) return ServeError(ctx, 404, "") - if (!targetAccount) { - ServeError(res, 404, "") - return - } + Accounts.password.set(targetAccount.id, password) - Accounts.password.set( targetAccount.id, password ) - - Authentication.AuthTokens.filter(e => e.account == targetAccount?.id).forEach((accountToken) => { - Authentication.invalidate(accountToken.token) - }) + Authentication.AuthTokens.filter( + (e) => e.account == targetAccount?.id + ).forEach((accountToken) => { + Authentication.invalidate(accountToken.token) + }) - if (targetAccount.email) { - sendMail(targetAccount.email, `Your login details have been updated`, `Hello there! This email is to notify you of a password change that an administrator, ${Account.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.`).then(() => { - res.send("OK") - }).catch((err) => {}) - } - - res.send() + if (targetAccount.email) { + await sendMail( + targetAccount.email, + `Your login details have been updated`, + `Hello there! This email is to notify you of a password change that an administrator, ${Account.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.` + ).catch() } - ) - router.patch( - "/account/:username/elevate", - (req, res) => { - const targetUsername = req.params.username - const targetAccount = Accounts.getFromUsername(targetUsername) + return ctx.text("") + }) - if (!targetAccount) { - ServeError(res, 404, "") - return - } + router.patch("/account/:username/elevate", (ctx) => { + const targetUsername = ctx.req.param("username") + const targetAccount = Accounts.getFromUsername(targetUsername) - targetAccount.admin = true - Accounts.save() - - res.send() + if (!targetAccount) { + return ServeError(ctx, 404, "") } - ) - router.delete("/account/:username/:deleteFiles", + targetAccount.admin = true + Accounts.save() + + return ctx.text("") + }) + + router.delete( + "/account/:username/:deleteFiles", requiresAccount, noAPIAccess, - parser, - (req, res) => { - const targetUsername = req.params.username - const deleteFiles = req.params.deleteFiles + async (ctx) => { + const targetUsername = ctx.req.param("username") + const deleteFiles = ctx.req.param("deleteFiles") const targetAccount = Accounts.getFromUsername(targetUsername) - if (!targetAccount) { - ServeError(res, 404, "") - return - } + if (!targetAccount) return ServeError(ctx, 404, "") const accountId = targetAccount.id - Authentication.AuthTokens.filter(e => e.account == accountId).forEach((token) => { + Authentication.AuthTokens.filter( + (e) => e.account == accountId + ).forEach((token) => { Authentication.invalidate(token.token) }) - const deleteAccount = () => Accounts.deleteAccount(accountId).then(_ => res.send("account deleted")) + const deleteAccount = () => + Accounts.deleteAccount(accountId).then((_) => + ctx.text("account deleted") + ) if (deleteFiles) { - const Files = targetAccount.files.map(e => e) + const Files = targetAccount.files.map((e) => e) for (let fileId of Files) { - files.unlink(fileId, true).catch(err => console.error) + files.unlink(fileId, true).catch((err) => console.error) } - writeFile(process.cwd() + "/.data/files.json", JSON.stringify(files.files), (err) => { - if (err) console.log(err) - deleteAccount() - }) - } else deleteAccount() + await writeFile( + process.cwd() + "/.data/files.json", + JSON.stringify(files.files) + ) + return deleteAccount() + } else return deleteAccount() } ) return router -} \ No newline at end of file +} diff --git a/src/server/routes/api/v1/customization.ts b/src/server/routes/api/v1/customization.ts index 2986612..1a3308d 100644 --- a/src/server/routes/api/v1/customization.ts +++ b/src/server/routes/api/v1/customization.ts @@ -1,98 +1,97 @@ -// Modules - -import { Router } from "express"; -import bodyParser from "body-parser"; - -// Libs - -import Files, { id_check_regex } from "../../../lib/files"; -import * as Accounts from '../../../lib/accounts' -import { getAccount, requiresAccount, requiresPermissions } from "../../../lib/middleware"; -import ServeError from "../../../lib/errors"; +import { Hono } from "hono" +import Files, { id_check_regex } from "../../../lib/files" +import * as Accounts from "../../../lib/accounts" +import { + getAccount, + requiresAccount, + requiresPermissions, +} from "../../../lib/middleware" +import ServeError from "../../../lib/errors" const Configuration = require(`${process.cwd()}/config.json`) -const parser = bodyParser.json({ - type: [ "type/plain", "application/json" ] -}) +const router = new Hono<{ + Variables: { + account?: Accounts.Account + } +}>() -const router = Router() +router.use(getAccount) -router.use(getAccount, parser) - -module.exports = function(files: Files) { +module.exports = function (files: Files) { router.put( "/css", - requiresAccount, requiresPermissions("customize"), - async (req, res) => { - const Account = res.locals.acc as Accounts.Account - - if (typeof req.body.fileId != "string") req.body.fileId = undefined; - - if ( - !req.body.fileId - || - (req.body.fileId.match(id_check_regex) == req.body.fileId - && req.body.fileId.length <= Configuration.maxUploadIdLength) - ) { - Account.customCSS = req.body.fileId || undefined - - await Accounts.save() - res.send("custom css saved") - } else ServeError(res, 400, "invalid fileId") - } - ) - - router.get('/css', requiresAccount, - (req, res) => { - const Account = res.locals.acc + requiresPermissions("customize"), + async (ctx) => { + const Account = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.fileId != "string") body.fileId = undefined - if (Account?.customCSS) res.redirect(`/file/${Account.customCSS}`) - else res.send(""); - } - ) - - router.put("/embed/color", - requiresAccount, requiresPermissions("customize"), - async (req, res) => { - const Account = res.locals.acc as Accounts.Account - - if (typeof req.body.color != "string") req.body.color = undefined; - if ( - !req.body.color - || (req.body.color.toLowerCase().match(/[a-f0-9]+/) == req.body.color.toLowerCase()) - && req.body.color.length == 6 + !body.fileId || + (body.fileId.match(id_check_regex) == body.fileId && + body.fileId.length <= Configuration.maxUploadIdLength) ) { - - if (!Account.embed) Account.embed = {}; - Account.embed.color = req.body.color || undefined + Account.customCSS = body.fileId || undefined await Accounts.save() - res.send("custom embed color saved") - - } else ServeError(res,400,"invalid hex code") + return ctx.text("custom css saved") + } else return ServeError(ctx, 400, "invalid fileId") } ) - router.put("/embed/size", - requiresAccount, requiresPermissions("customize"), - async (req, res) => { - const Account = res.locals.acc as Accounts.Account + router.get("/css", requiresAccount, async (ctx) => { + const Account = ctx.get("account") - if (typeof req.body.largeImage != "boolean") { - ServeError(res, 400, "largeImage must be bool"); + if (Account?.customCSS) + return ctx.redirect(`/file/${Account.customCSS}`) + else return ctx.text("") + }) + + router.put( + "/embed/color", + requiresAccount, + requiresPermissions("customize"), + async (ctx) => { + const Account = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.color != "string") body.color = undefined + + if ( + !body.color || + (body.color.toLowerCase().match(/[a-f0-9]+/) == + body.color.toLowerCase() && + body.color.length == 6) + ) { + if (!Account.embed) Account.embed = {} + Account.embed.color = body.color || undefined + + await Accounts.save() + return ctx.text("custom embed color saved") + } else return ServeError(ctx, 400, "invalid hex code") + } + ) + + router.put( + "/embed/size", + requiresAccount, + requiresPermissions("customize"), + async (ctx) => { + const Account = ctx.get("account") as Accounts.Account + const body = await ctx.req.json() + if (typeof body.largeImage != "boolean") { + ServeError(ctx, 400, "largeImage must be bool") return } - if (!Account.embed) Account.embed = {}; - Account.embed.largeImage = req.body.largeImage + if (!Account.embed) Account.embed = {} + Account.embed.largeImage = body.largeImage await Accounts.save() - res.send(`custom embed image size saved`) + return ctx.text(`custom embed image size saved`) } ) return router -} \ No newline at end of file +} diff --git a/src/server/routes/api/v1/file.ts b/src/server/routes/api/v1/file.ts index 8c8168d..8511bc7 100644 --- a/src/server/routes/api/v1/file.ts +++ b/src/server/routes/api/v1/file.ts @@ -1,8 +1,8 @@ -import { Router } from "express"; +import { Hono } from "hono"; import Files from "../../../lib/files"; -let router = Router() +const router = new Hono() module.exports = function(files: Files) { return router -} \ No newline at end of file +} diff --git a/src/server/routes/api/v1/public.ts b/src/server/routes/api/v1/public.ts index 8c8168d..09ce314 100644 --- a/src/server/routes/api/v1/public.ts +++ b/src/server/routes/api/v1/public.ts @@ -1,8 +1,8 @@ -import { Router } from "express"; -import Files from "../../../lib/files"; +import { Hono } from "hono" +import Files from "../../../lib/files" -let router = Router() +const router = new Hono() -module.exports = function(files: Files) { +module.exports = function (files: Files) { return router -} \ No newline at end of file +} From 70cad2d7531489930fbedb086a73a19be9494b1a Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 26 Oct 2023 19:00:49 +0000 Subject: [PATCH 031/173] Working on it.. --- package-lock.json | 6492 +++++++++++++++------------- src/server/index.ts | 2 +- src/server/lib/DiscordREST.ts | 92 + src/server/{ => routes}/preview.ts | 6 +- 4 files changed, 3673 insertions(+), 2919 deletions(-) create mode 100644 src/server/lib/DiscordREST.ts rename src/server/{ => routes}/preview.ts (97%) diff --git a/package-lock.json b/package-lock.json index 01020d4..5aeb1c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2915 +1,3577 @@ -{ - "name": "monofile", - "version": "1.4.0-dev", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "monofile", - "version": "1.4.0-dev", - "license": "Unlicense", - "dependencies": { - "@types/body-parser": "^1.19.2", - "@types/express": "^4.17.14", - "@types/multer": "^1.4.7", - "@types/nodemailer": "^6.4.8", - "axios": "^0.27.2", - "body-parser": "^1.20.0", - "bytes": "^3.1.2", - "cookie-parser": "^1.4.6", - "discord.js": "^14.7.1", - "dotenv": "^16.0.2", - "express": "^4.18.1", - "multer": "^1.4.5-lts.1", - "nodemailer": "^6.9.3", - "typescript": "^4.8.3" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "^15.0.1", - "@types/bytes": "^3.1.1", - "@types/cookie-parser": "^1.4.3", - "rollup": "^3.11.0", - "rollup-plugin-svelte": "^7.1.0", - "sass": "^1.57.1", - "svelte": "^3.55.1" - }, - "engines": { - "node": ">=v16.11" - } - }, - "node_modules/@discordjs/builders": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", - "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", - "dependencies": { - "@discordjs/util": "^0.1.0", - "@sapphire/shapeshift": "^3.7.1", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.2", - "tslib": "^2.4.1" - }, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/collection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", - "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==", - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/rest": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", - "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", - "dependencies": { - "@discordjs/collection": "^1.3.0", - "@discordjs/util": "^0.1.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.23", - "file-type": "^18.0.0", - "tslib": "^2.4.1", - "undici": "^5.13.0" - }, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/util": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", - "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==", - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", - "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.0", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", - "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/snowflake": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", - "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-lOGyCnw+2JVPKU3wIV0srU0NyALwTBJlVSx5DfMQOFuuohA8y9S8orImpuIQikZ0uIQ8gehrRjxgQC1rLRi11w==", - "dev": true - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "node_modules/@types/multer": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", - "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/node": { - "version": "18.7.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz", - "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==" - }, - "node_modules/@types/nodemailer": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.8.tgz", - "integrity": "sha512-oVsJSCkqViCn8/pEu2hfjwVO+Gb3e+eTWjg3PcjeFKRItfKpKwHphQqbYmPQrlMk+op7pNNWPbsJIEthpFN/OQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "dependencies": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/cookie-parser/node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/discord-api-types": { - "version": "0.37.25", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.25.tgz", - "integrity": "sha512-aCwA2sWnL1zPQgTELkkMzQneuWyCXXUjZCUKswesiE6RDCfOfxAPXOHg6ZTlBA5layPSikGCBBRjyh8S3Wzd+A==" - }, - "node_modules/discord.js": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", - "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", - "dependencies": { - "@discordjs/builders": "^1.4.0", - "@discordjs/collection": "^1.3.0", - "@discordjs/rest": "^1.4.0", - "@discordjs/util": "^0.1.0", - "@sapphire/snowflake": "^3.2.2", - "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.4.1", - "undici": "^5.13.0", - "ws": "^8.11.0" - }, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/file-type": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", - "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", - "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/immutable": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", - "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", - "dev": true - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", - "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/multer": { - "version": "1.4.5-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", - "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", - "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nodemailer": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", - "integrity": "sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.11.0.tgz", - "integrity": "sha512-+uWPPkpWQ2H3Qi7sNBcRfhhHJyUNgBYhG4wKe5wuGRj2m55kpo+0p5jubKNBjQODyPe6tSBE3tNpdDwEisQvAQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-svelte": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", - "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", - "dev": true, - "dependencies": { - "require-relative": "^0.8.7", - "rollup-pluginutils": "^2.8.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "rollup": ">=2.0.0", - "svelte": ">=3.5.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sass": { - "version": "1.57.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", - "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svelte": { - "version": "3.55.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", - "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/ts-mixer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", - "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - } - }, - "dependencies": { - "@discordjs/builders": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", - "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", - "requires": { - "@discordjs/util": "^0.1.0", - "@sapphire/shapeshift": "^3.7.1", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.2", - "tslib": "^2.4.1" - } - }, - "@discordjs/collection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", - "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==" - }, - "@discordjs/rest": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", - "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", - "requires": { - "@discordjs/collection": "^1.3.0", - "@discordjs/util": "^0.1.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.23", - "file-type": "^18.0.0", - "tslib": "^2.4.1", - "undici": "^5.13.0" - } - }, - "@discordjs/util": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", - "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" - }, - "@rollup/plugin-node-resolve": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", - "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.0", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "dependencies": { - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } - } - }, - "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" - }, - "@sapphire/shapeshift": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", - "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", - "requires": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - } - }, - "@sapphire/snowflake": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", - "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==" - }, - "@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-lOGyCnw+2JVPKU3wIV0srU0NyALwTBJlVSx5DfMQOFuuohA8y9S8orImpuIQikZ0uIQ8gehrRjxgQC1rLRi11w==", - "dev": true - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/multer": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", - "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", - "requires": { - "@types/express": "*" - } - }, - "@types/node": { - "version": "18.7.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz", - "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==" - }, - "@types/nodemailer": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.8.tgz", - "integrity": "sha512-oVsJSCkqViCn8/pEu2hfjwVO+Gb3e+eTWjg3PcjeFKRItfKpKwHphQqbYmPQrlMk+op7pNNWPbsJIEthpFN/OQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "requires": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" - }, - "dependencies": { - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - } - } - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "discord-api-types": { - "version": "0.37.25", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.25.tgz", - "integrity": "sha512-aCwA2sWnL1zPQgTELkkMzQneuWyCXXUjZCUKswesiE6RDCfOfxAPXOHg6ZTlBA5layPSikGCBBRjyh8S3Wzd+A==" - }, - "discord.js": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", - "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", - "requires": { - "@discordjs/builders": "^1.4.0", - "@discordjs/collection": "^1.3.0", - "@discordjs/rest": "^1.4.0", - "@discordjs/util": "^0.1.0", - "@sapphire/snowflake": "^3.2.2", - "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.4.1", - "undici": "^5.13.0", - "ws": "^8.11.0" - } - }, - "dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "file-type": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", - "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", - "requires": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "immutable": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", - "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", - "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "multer": { - "version": "1.4.5-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", - "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", - "requires": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - } - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "nodemailer": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", - "integrity": "sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "requires": { - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rollup": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.11.0.tgz", - "integrity": "sha512-+uWPPkpWQ2H3Qi7sNBcRfhhHJyUNgBYhG4wKe5wuGRj2m55kpo+0p5jubKNBjQODyPe6tSBE3tNpdDwEisQvAQ==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-svelte": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", - "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", - "dev": true, - "requires": { - "require-relative": "^0.8.7", - "rollup-pluginutils": "^2.8.2" - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass": { - "version": "1.57.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", - "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svelte": { - "version": "3.55.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", - "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - } - }, - "ts-mixer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", - "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==" - }, - "undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", - "requires": { - "busboy": "^1.6.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "requires": {} - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - } - } -} +{ + "name": "monofile", + "version": "1.4.0-dev", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "monofile", + "version": "1.4.0-dev", + "license": "Unlicense", + "dependencies": { + "@hono/node-server": "^1.2.0", + "@types/body-parser": "^1.19.2", + "@types/express": "^4.17.14", + "@types/multer": "^1.4.7", + "@types/nodemailer": "^6.4.8", + "axios": "^0.27.2", + "body-parser": "^1.20.0", + "bytes": "^3.1.2", + "cookie-parser": "^1.4.6", + "discord.js": "^14.7.1", + "dotenv": "^16.0.2", + "express": "^4.18.1", + "hono": "^3.8.3", + "multer": "^1.4.5-lts.1", + "nodemailer": "^6.9.3", + "typescript": "^5.2.2" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.4.6", + "@types/bytes": "^3.1.1", + "@types/cookie-parser": "^1.4.3", + "@types/range-parser": "^1.2.6", + "sass": "^1.57.1", + "svelte": "^3.55.1", + "vite": "^4.5.0" + }, + "engines": { + "node": ">=v16.11" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", + "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", + "dependencies": { + "@discordjs/util": "^0.1.0", + "@sapphire/shapeshift": "^3.7.1", + "discord-api-types": "^0.37.20", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.2", + "tslib": "^2.4.1" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/collection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", + "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", + "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", + "dependencies": { + "@discordjs/collection": "^1.3.0", + "@discordjs/util": "^0.1.0", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.2.2", + "discord-api-types": "^0.37.23", + "file-type": "^18.0.0", + "tslib": "^2.4.1", + "undici": "^5.13.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/util": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", + "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@hono/node-server": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.2.0.tgz", + "integrity": "sha512-aHT8lDMLpd7ioXJ1/057+h+oE/k7rCOWmjklYDsE0jE4CoNB9XzG4f8dRHvw4s5HJFocaYDiGgYM/V0kYbQ0ww==", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", + "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", + "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", + "integrity": "sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==", + "dev": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.3", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.54.0 || ^4.0.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", + "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.2.0", + "svelte": "^3.54.0 || ^4.0.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-lOGyCnw+2JVPKU3wIV0srU0NyALwTBJlVSx5DfMQOFuuohA8y9S8orImpuIQikZ0uIQ8gehrRjxgQC1rLRi11w==", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "node_modules/@types/multer": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", + "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/node": { + "version": "18.7.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz", + "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==" + }, + "node_modules/@types/nodemailer": { + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.8.tgz", + "integrity": "sha512-oVsJSCkqViCn8/pEu2hfjwVO+Gb3e+eTWjg3PcjeFKRItfKpKwHphQqbYmPQrlMk+op7pNNWPbsJIEthpFN/OQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", + "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==" + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.25", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.25.tgz", + "integrity": "sha512-aCwA2sWnL1zPQgTELkkMzQneuWyCXXUjZCUKswesiE6RDCfOfxAPXOHg6ZTlBA5layPSikGCBBRjyh8S3Wzd+A==" + }, + "node_modules/discord.js": { + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", + "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", + "dependencies": { + "@discordjs/builders": "^1.4.0", + "@discordjs/collection": "^1.3.0", + "@discordjs/rest": "^1.4.0", + "@discordjs/util": "^0.1.0", + "@sapphire/snowflake": "^3.2.2", + "@types/ws": "^8.5.3", + "discord-api-types": "^0.37.20", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.4.1", + "undici": "^5.13.0", + "ws": "^8.11.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", + "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/file-type": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", + "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", + "dependencies": { + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0", + "token-types": "^5.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hono": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/hono/-/hono-3.8.3.tgz", + "integrity": "sha512-NLJgUCKKMvijBy+V+U1FQTsNwHk2bD1KGlWJA9+qaCNWgx5St9bhfQwxrpcTGvG2Gi2naemTWCzBavDNXOqO6Q==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemailer": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", + "integrity": "sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/peek-readable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", + "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/strtok3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", + "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/svelte": { + "version": "3.55.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", + "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", + "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/ts-mixer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", + "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", + "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + }, + "dependencies": { + "@discordjs/builders": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", + "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", + "requires": { + "@discordjs/util": "^0.1.0", + "@sapphire/shapeshift": "^3.7.1", + "discord-api-types": "^0.37.20", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.2", + "tslib": "^2.4.1" + } + }, + "@discordjs/collection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", + "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==" + }, + "@discordjs/rest": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", + "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", + "requires": { + "@discordjs/collection": "^1.3.0", + "@discordjs/util": "^0.1.0", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.2.2", + "discord-api-types": "^0.37.23", + "file-type": "^18.0.0", + "tslib": "^2.4.1", + "undici": "^5.13.0" + } + }, + "@discordjs/util": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", + "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" + }, + "@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "dev": true, + "optional": true + }, + "@hono/node-server": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.2.0.tgz", + "integrity": "sha512-aHT8lDMLpd7ioXJ1/057+h+oE/k7rCOWmjklYDsE0jE4CoNB9XzG4f8dRHvw4s5HJFocaYDiGgYM/V0kYbQ0ww==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" + }, + "@sapphire/shapeshift": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", + "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", + "requires": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + } + }, + "@sapphire/snowflake": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", + "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==" + }, + "@sveltejs/vite-plugin-svelte": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", + "integrity": "sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==", + "dev": true, + "requires": { + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.3", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@sveltejs/vite-plugin-svelte-inspector": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", + "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", + "dev": true, + "requires": { + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-lOGyCnw+2JVPKU3wIV0srU0NyALwTBJlVSx5DfMQOFuuohA8y9S8orImpuIQikZ0uIQ8gehrRjxgQC1rLRi11w==", + "dev": true + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "@types/multer": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", + "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", + "requires": { + "@types/express": "*" + } + }, + "@types/node": { + "version": "18.7.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz", + "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==" + }, + "@types/nodemailer": { + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.8.tgz", + "integrity": "sha512-oVsJSCkqViCn8/pEu2hfjwVO+Gb3e+eTWjg3PcjeFKRItfKpKwHphQqbYmPQrlMk+op7pNNWPbsJIEthpFN/OQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", + "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==" + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + } + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "discord-api-types": { + "version": "0.37.25", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.25.tgz", + "integrity": "sha512-aCwA2sWnL1zPQgTELkkMzQneuWyCXXUjZCUKswesiE6RDCfOfxAPXOHg6ZTlBA5layPSikGCBBRjyh8S3Wzd+A==" + }, + "discord.js": { + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", + "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", + "requires": { + "@discordjs/builders": "^1.4.0", + "@discordjs/collection": "^1.3.0", + "@discordjs/rest": "^1.4.0", + "@discordjs/util": "^0.1.0", + "@sapphire/snowflake": "^3.2.2", + "@types/ws": "^8.5.3", + "discord-api-types": "^0.37.20", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.4.1", + "undici": "^5.13.0", + "ws": "^8.11.0" + } + }, + "dotenv": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", + "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "file-type": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", + "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", + "requires": { + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0", + "token-types": "^5.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "hono": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/hono/-/hono-3.8.3.tgz", + "integrity": "sha512-NLJgUCKKMvijBy+V+U1FQTsNwHk2bD1KGlWJA9+qaCNWgx5St9bhfQwxrpcTGvG2Gi2naemTWCzBavDNXOqO6Q==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "immutable": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "nodemailer": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", + "integrity": "sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "peek-readable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", + "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "requires": { + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "strtok3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", + "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "requires": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.0.0" + } + }, + "svelte": { + "version": "3.55.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", + "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", + "dev": true + }, + "svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "requires": {} + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "token-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", + "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "requires": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + } + }, + "ts-mixer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", + "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" + }, + "undici": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", + "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", + "requires": { + "busboy": "^1.6.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "requires": { + "esbuild": "^0.18.10", + "fsevents": "~2.3.2", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + } + }, + "vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "requires": {} + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/src/server/index.ts b/src/server/index.ts index ba4251c..02ca442 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -6,7 +6,7 @@ import fs from "fs" import Files from "./lib/files" import { getAccount } from "./lib/middleware" import APIRouter from "./routes/api" -import preview from "./preview" +import preview from "./routes/preview" require("dotenv").config() diff --git a/src/server/lib/DiscordREST.ts b/src/server/lib/DiscordREST.ts new file mode 100644 index 0000000..67b5f18 --- /dev/null +++ b/src/server/lib/DiscordREST.ts @@ -0,0 +1,92 @@ +const base = "https://discord.com/api/v10/" +const buckets = new Map() + +class DiscordAPIBucket { + + readonly name : string // bucket name (X-Ratelimit-Bucket) + // queue : RequestInfo[] = [] // queue of requests to send + readonly limit : number // bucket limit (X-Ratelimit-Limit) + remaining : number // requests remaining (X-Ratelimit-Remaining) + readonly expires : number // when this ratelimit expires (X-Ratelimit-Reset) + + readonly expirationHold : ReturnType // Timeout which fires after this bucket expires + dead : boolean = false // True if bucket has expired + + constructor(base: Response) { + + this.name = base.headers.get("x-ratelimit-bucket")! + this.limit = parseInt(base.headers.get("x-ratelimit-limit")!) + this.remaining = parseInt(base.headers.get("x-ratelimit-remaining")!) + this.expires = parseFloat(base.headers.get("x-ratelimit-reset")!) + + this.expirationHold = + setTimeout( + this.destroy, + parseFloat(base.headers.get("x-ratelimit-reset-after")!) + ) + + } + + /** + * @description Renders this bucket invalid + */ + destroy() { + + buckets.delete(this.name) + this.dead = true + Object.freeze(this) + + } + + /** + * @description update the remainding amount of requests + * @param remaining number to update to + */ + update(remaining: number) { + this.remaining = Math.max(Math.min(0, remaining), this.remaining) + return this + } + +} + +/** + * @description Returns whether or not a Response's Headers object includes Discord's ratelimit information headers + */ +function checkHeaders(headers: Headers) { + return Boolean( + headers.has("x-ratelimit-bucket") + && headers.has("x-ratelimit-limit") + && headers.has("x-ratelimit-remaining") + && headers.has("x-ratelimit-reset") + && headers.has("x-ratelimit-reset-after") + ) +} + +/** + * @description Returns or creates a DiscordAPIBucket from a Response + */ +function getBucket(response: Response) { + if (!checkHeaders(response.headers)) throw new Error("Required ratelimiting headers not found") + + if (buckets.has(response.headers.get("x-ratelimit-bucket")!)) + return buckets.get(response.headers.get("x-ratelimit-bucket")!)! + + else + return new DiscordAPIBucket(response) +} + +export class REST { + + private readonly token : string + + constructor(token:string) { + this.token = token; + } + + async fetch(options: RequestInfo) { + + + + } + +} \ No newline at end of file diff --git a/src/server/preview.ts b/src/server/routes/preview.ts similarity index 97% rename from src/server/preview.ts rename to src/server/routes/preview.ts index 90c3cad..9881d31 100644 --- a/src/server/preview.ts +++ b/src/server/routes/preview.ts @@ -1,9 +1,9 @@ import fs from "fs/promises" import bytes from "bytes" -import ServeError from "./lib/errors" -import * as Accounts from "./lib/accounts" +import ServeError from "../lib/errors" +import * as Accounts from "../lib/accounts" import type { Handler } from "hono" -import type Files from "./lib/files" +import type Files from "../lib/files" const pkg = require(`${process.cwd()}/package.json`) export = (files: Files): Handler => async (ctx) => { From 16db5c31961f73b119fbe3c9e992440b315c868a Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 27 Oct 2023 08:31:01 +0000 Subject: [PATCH 032/173] mihari.oyama.pictures/Tired --- src/server/lib/DiscordREST.ts | 108 +++++++++++++++++++++++++++++----- 1 file changed, 92 insertions(+), 16 deletions(-) diff --git a/src/server/lib/DiscordREST.ts b/src/server/lib/DiscordREST.ts index 67b5f18..7144109 100644 --- a/src/server/lib/DiscordREST.ts +++ b/src/server/lib/DiscordREST.ts @@ -1,23 +1,47 @@ -const base = "https://discord.com/api/v10/" +const base = "https://discord.com/api/v10" const buckets = new Map() +const routeConnections = new Map() + +interface RatelimitData { + bucket_name : string + limit : number + remaining : number + expires : number +} + +interface QueuedRequest { + path : `/${string}` + params : RequestInit +} + +function extractRatelimitData(headers: Headers): RatelimitData { + return { + bucket_name : headers.get("x-ratelimit-bucket")!, + limit : parseInt(headers.get("x-ratelimit-limit")!), + remaining : parseInt(headers.get("x-ratelimit-remaining")!), + expires : parseFloat(headers.get("x-ratelimit-reset")!), + } +} class DiscordAPIBucket { readonly name : string // bucket name (X-Ratelimit-Bucket) - // queue : RequestInfo[] = [] // queue of requests to send readonly limit : number // bucket limit (X-Ratelimit-Limit) remaining : number // requests remaining (X-Ratelimit-Remaining) readonly expires : number // when this ratelimit expires (X-Ratelimit-Reset) readonly expirationHold : ReturnType // Timeout which fires after this bucket expires - dead : boolean = false // True if bucket has expired + dead : boolean = false // True if bucket has expired + linked_routes : string[] = [] constructor(base: Response) { - this.name = base.headers.get("x-ratelimit-bucket")! - this.limit = parseInt(base.headers.get("x-ratelimit-limit")!) - this.remaining = parseInt(base.headers.get("x-ratelimit-remaining")!) - this.expires = parseFloat(base.headers.get("x-ratelimit-reset")!) + let rd = extractRatelimitData(base.headers) + + this.name = rd.bucket_name + this.limit = rd.limit + this.remaining = rd.remaining + this.expires = rd.expires this.expirationHold = setTimeout( @@ -34,6 +58,7 @@ class DiscordAPIBucket { buckets.delete(this.name) this.dead = true + this.linked_routes.forEach((v) => routeConnections.delete(v)) Object.freeze(this) } @@ -47,6 +72,16 @@ class DiscordAPIBucket { return this } + /** + * @description Link a route to this bucket + * @param route Route to link + */ + link(route: string) { + if (this.linked_routes.includes(route)) return + routeConnections.set(route, this) + this.linked_routes.push(route) + } + } /** @@ -65,14 +100,18 @@ function checkHeaders(headers: Headers) { /** * @description Returns or creates a DiscordAPIBucket from a Response */ -function getBucket(response: Response) { - if (!checkHeaders(response.headers)) throw new Error("Required ratelimiting headers not found") +function getBucket(response: string): DiscordAPIBucket | undefined +function getBucket(response: Response): DiscordAPIBucket +function getBucket(response: Response | string) { + if (response instanceof Response) { + if (!checkHeaders(response.headers)) throw new Error("Required ratelimiting headers not found") - if (buckets.has(response.headers.get("x-ratelimit-bucket")!)) - return buckets.get(response.headers.get("x-ratelimit-bucket")!)! + if (buckets.has(response.headers.get("x-ratelimit-bucket")!)) + return buckets.get(response.headers.get("x-ratelimit-bucket")!)! - else - return new DiscordAPIBucket(response) + else + return new DiscordAPIBucket(response) + } else return routeConnections.get(response) } export class REST { @@ -83,10 +122,47 @@ export class REST { this.token = token; } - async fetch(options: RequestInfo) { - + /** + * @description Queues a request + */ + async queue(path: `/${string}`, options?: RequestInit) { + // TODO: actually write the queue lmao + console.warn(`Request added to queue: ${(options?.method ?? "get").toUpperCase()} ${path}`) + } + /** + * @description Make a fetch requests where further requests are automatically queued in case of ratelimit + */ + async fetch(path: `/${string}`, options?: RequestInit) { + + // check if there's already a bucket, and check if it's full + let known_bucket = getBucket( path ) + + if (known_bucket && known_bucket.remaining) { + return this.queue(path, options) + } + + // there's no known bucket for this route; let's carry on with the request + let response = await fetch(base+path, options) + + if ( checkHeaders(response.headers) ) { + // a ratelimit is attached, let's set up our buckets.. + + let bucket = getBucket( response ) + if (response.status == 429) { + bucket.link(path) // link the bucket so that hopefully no future errors occur + + return this.queue(path, options) /* it was ratelimited after all + getBucket() would have generated a DiscordAPIBucket + so this would be fine */ + } + + // let's update the bucket... + let rd = extractRatelimitData( response.headers ) + bucket.update(rd.remaining) + + } else return response } -} \ No newline at end of file +} From a096a3352e54928957cab358871ed3efe49d5a2a Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:11:48 -0700 Subject: [PATCH 033/173] idk lol --- src/server/lib/DiscordREST.ts | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/server/lib/DiscordREST.ts b/src/server/lib/DiscordREST.ts index 7144109..0e60763 100644 --- a/src/server/lib/DiscordREST.ts +++ b/src/server/lib/DiscordREST.ts @@ -14,6 +14,10 @@ interface QueuedRequest { params : RequestInit } +/** + * @description Extracts data on ratelimits from headers + * @param headers Headers object to extract information from + */ function extractRatelimitData(headers: Headers): RatelimitData { return { bucket_name : headers.get("x-ratelimit-bucket")!, @@ -63,15 +67,6 @@ class DiscordAPIBucket { } - /** - * @description update the remainding amount of requests - * @param remaining number to update to - */ - update(remaining: number) { - this.remaining = Math.max(Math.min(0, remaining), this.remaining) - return this - } - /** * @description Link a route to this bucket * @param route Route to link @@ -138,8 +133,9 @@ export class REST { // check if there's already a bucket, and check if it's full let known_bucket = getBucket( path ) - if (known_bucket && known_bucket.remaining) { - return this.queue(path, options) + if (known_bucket) { + if (known_bucket.remaining <= 0) return this.queue(path, options) + else known_bucket.remaining-- // just in case... } // there's no known bucket for this route; let's carry on with the request @@ -157,9 +153,9 @@ export class REST { so this would be fine */ } - // let's update the bucket... + // let's update the bucket with data from the source now let rd = extractRatelimitData( response.headers ) - bucket.update(rd.remaining) + bucket.remaining = rd.remaining } else return response From a761e3f470bf46ca8fc15f0b9ed3a31f3310c7c6 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 28 Oct 2023 17:52:38 +0000 Subject: [PATCH 034/173] i'm gonna be honest i dont even know anymore --- src/server/lib/DiscordREST.ts | 57 ++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/src/server/lib/DiscordREST.ts b/src/server/lib/DiscordREST.ts index 0e60763..07b7f71 100644 --- a/src/server/lib/DiscordREST.ts +++ b/src/server/lib/DiscordREST.ts @@ -1,3 +1,5 @@ +import { EventEmitter } from "node:events" + const base = "https://discord.com/api/v10" const buckets = new Map() const routeConnections = new Map() @@ -9,9 +11,27 @@ interface RatelimitData { expires : number } -interface QueuedRequest { - path : `/${string}` - params : RequestInit +/** + * @description Hold a REST.fetch to be executed later + * @param rest REST to execute fetch() on + * @param path Path for your request + * @param params Params for your request + * @returns An object which contains a Promise: `promise`, which resolves after `execute` is called + */ +function heldFetch( rest: REST, path: `/${string}`, params?: RequestInit ) { + let resolve: (_:Response) => any + + return { + + promise: new Promise(res => resolve = res), + + async execute() { + let response = await rest.fetch(path, params) + resolve(response) + return response + } + + } } /** @@ -112,6 +132,7 @@ function getBucket(response: Response | string) { export class REST { private readonly token : string + private requestQueue: {[key: `/${string}`]: (ReturnType["execute"])[]} = {} constructor(token:string) { this.token = token; @@ -120,9 +141,17 @@ export class REST { /** * @description Queues a request */ - async queue(path: `/${string}`, options?: RequestInit) { - // TODO: actually write the queue lmao + queue(path: `/${string}`, options?: RequestInit) { console.warn(`Request added to queue: ${(options?.method ?? "get").toUpperCase()} ${path}`) + + let {promise, execute} = heldFetch(this, path, options) + + if (!this.requestQueue[path]) + this.requestQueue[path] = [] + + this.requestQueue[path].push(execute) + + return promise } /** @@ -142,22 +171,22 @@ export class REST { let response = await fetch(base+path, options) if ( checkHeaders(response.headers) ) { - // a ratelimit is attached, let's set up our buckets.. - - let bucket = getBucket( response ) if (response.status == 429) { + let bucket = getBucket( response ) bucket.link(path) // link the bucket so that hopefully no future errors occur return this.queue(path, options) /* it was ratelimited after all getBucket() would have generated a DiscordAPIBucket so this would be fine */ } - - // let's update the bucket with data from the source now - let rd = extractRatelimitData( response.headers ) - bucket.remaining = rd.remaining - - } else return response + /* commented out cause i feel like it'll cause issues + // let's update the bucket with data from the source now + let rd = extractRatelimitData( response.headers ) + bucket.remaining = rd.remaining + */ + } + + return response } From 4882a8b352bced9fb97c6c321b4082cb12eb9480 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 29 Oct 2023 01:40:03 +0000 Subject: [PATCH 035/173] g Co-authored-by: Jack W. --- src/server/lib/DiscordREST.ts | 31 +++++++++++++++++++++---------- src/server/lib/errors.ts | 9 ++++----- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/server/lib/DiscordREST.ts b/src/server/lib/DiscordREST.ts index 07b7f71..d287304 100644 --- a/src/server/lib/DiscordREST.ts +++ b/src/server/lib/DiscordREST.ts @@ -12,11 +12,11 @@ interface RatelimitData { } /** - * @description Hold a REST.fetch to be executed later - * @param rest REST to execute fetch() on + * @description Hold a {@link REST.fetch} to be executed later + * @param rest {@link REST} to execute {@link REST.fetch|fetch()} on * @param path Path for your request * @param params Params for your request - * @returns An object which contains a Promise: `promise`, which resolves after `execute` is called + * @returns An object which contains a {@link Promise}: `promise`, which resolves after `execute` is called */ function heldFetch( rest: REST, path: `/${string}`, params?: RequestInit ) { let resolve: (_:Response) => any @@ -36,7 +36,7 @@ function heldFetch( rest: REST, path: `/${string}`, params?: RequestInit ) { /** * @description Extracts data on ratelimits from headers - * @param headers Headers object to extract information from + * @param headers {@link Headers} object to extract information from */ function extractRatelimitData(headers: Headers): RatelimitData { return { @@ -56,7 +56,7 @@ class DiscordAPIBucket { readonly expirationHold : ReturnType // Timeout which fires after this bucket expires dead : boolean = false // True if bucket has expired - linked_routes : string[] = [] + linked_routes : string[] = [] // Routes linked to this bucket constructor(base: Response) { @@ -77,6 +77,7 @@ class DiscordAPIBucket { /** * @description Renders this bucket invalid + * */ destroy() { @@ -96,11 +97,11 @@ class DiscordAPIBucket { routeConnections.set(route, this) this.linked_routes.push(route) } - } /** * @description Returns whether or not a Response's Headers object includes Discord's ratelimit information headers + * @param headers {@link Headers} object to extract information from */ function checkHeaders(headers: Headers) { return Boolean( @@ -113,7 +114,8 @@ function checkHeaders(headers: Headers) { } /** - * @description Returns or creates a DiscordAPIBucket from a Response + * @description Returns or creates a {@link DiscordAPIBucket} from a Response + * @param response Response or route to get a DiscordAPIBucket from */ function getBucket(response: string): DiscordAPIBucket | undefined function getBucket(response: Response): DiscordAPIBucket @@ -123,7 +125,6 @@ function getBucket(response: Response | string) { if (buckets.has(response.headers.get("x-ratelimit-bucket")!)) return buckets.get(response.headers.get("x-ratelimit-bucket")!)! - else return new DiscordAPIBucket(response) } else return routeConnections.get(response) @@ -140,6 +141,8 @@ export class REST { /** * @description Queues a request + * @param path Path to request + * @param options Options for your request */ queue(path: `/${string}`, options?: RequestInit) { console.warn(`Request added to queue: ${(options?.method ?? "get").toUpperCase()} ${path}`) @@ -156,6 +159,8 @@ export class REST { /** * @description Make a fetch requests where further requests are automatically queued in case of ratelimit + * @param path Path to request + * @param options Options for your request */ async fetch(path: `/${string}`, options?: RequestInit) { @@ -167,8 +172,14 @@ export class REST { else known_bucket.remaining-- // just in case... } - // there's no known bucket for this route; let's carry on with the request - let response = await fetch(base+path, options) + // there's no known bucket for this route; let's carry on with the request + let response = await fetch(base+path, { + ...options, + headers: { + ...options?.headers, + Authorization: `Bot ${this.token}` + } + }) if ( checkHeaders(response.headers) ) { if (response.status == 429) { diff --git a/src/server/lib/errors.ts b/src/server/lib/errors.ts index 261d4d4..e31c931 100644 --- a/src/server/lib/errors.ts +++ b/src/server/lib/errors.ts @@ -15,13 +15,12 @@ export default async function ServeError( reason: string ) { // fetch error page if not cached - if (!errorPage) { - errorPage = ( + errorPage ??= ( (await readFile(`${process.cwd()}/dist/error.html`).catch((err) => console.error(err) - )) || "
$code $text
" - ).toString() - } + )) ?? "
$code $text
" + ).toString() + // serve error return ctx.html( From 94ea40a8ff1811d47d343b130c330ba339a9025f Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 29 Oct 2023 07:08:05 +0000 Subject: [PATCH 036/173] this code is horrible and i know it lmao --- .../DiscordRequests.ts} | 45 ++++++++++++------- src/server/lib/DiscordAPI/index.ts | 1 + 2 files changed, 31 insertions(+), 15 deletions(-) rename src/server/lib/{DiscordREST.ts => DiscordAPI/DiscordRequests.ts} (88%) create mode 100644 src/server/lib/DiscordAPI/index.ts diff --git a/src/server/lib/DiscordREST.ts b/src/server/lib/DiscordAPI/DiscordRequests.ts similarity index 88% rename from src/server/lib/DiscordREST.ts rename to src/server/lib/DiscordAPI/DiscordRequests.ts index d287304..c26776f 100644 --- a/src/server/lib/DiscordREST.ts +++ b/src/server/lib/DiscordAPI/DiscordRequests.ts @@ -1,5 +1,3 @@ -import { EventEmitter } from "node:events" - const base = "https://discord.com/api/v10" const buckets = new Map() const routeConnections = new Map() @@ -53,15 +51,17 @@ class DiscordAPIBucket { readonly limit : number // bucket limit (X-Ratelimit-Limit) remaining : number // requests remaining (X-Ratelimit-Remaining) readonly expires : number // when this ratelimit expires (X-Ratelimit-Reset) + readonly parent : REST // parent REST readonly expirationHold : ReturnType // Timeout which fires after this bucket expires dead : boolean = false // True if bucket has expired - linked_routes : string[] = [] // Routes linked to this bucket + linked_routes : `/${string}`[] = [] // Routes linked to this bucket - constructor(base: Response) { + constructor(rest: REST, base: Response) { let rd = extractRatelimitData(base.headers) + this.parent = rest this.name = rd.bucket_name this.limit = rd.limit this.remaining = rd.remaining @@ -77,14 +77,29 @@ class DiscordAPIBucket { /** * @description Renders this bucket invalid - * */ destroy() { buckets.delete(this.name) - this.dead = true + this.dead = true this.linked_routes.forEach((v) => routeConnections.delete(v)) Object.freeze(this) + + // execute queued requests... + // @Jack5079 i have no idea if there's a better way to do this + // fix it if there is one after you wake up + let requestsToExecute: (ReturnType["execute"])[] = [] + this.linked_routes.forEach((v) => { + let queue = this.parent.requestQueue[v] + if (queue) + requestsToExecute.push( + ...queue.splice( + 0, + Math.min( this.limit-requestsToExecute.length, queue.length ) + ) + ) + }) + requestsToExecute.forEach(a=>a()) } @@ -92,7 +107,7 @@ class DiscordAPIBucket { * @description Link a route to this bucket * @param route Route to link */ - link(route: string) { + link(route: `/${string}`) { if (this.linked_routes.includes(route)) return routeConnections.set(route, this) this.linked_routes.push(route) @@ -118,22 +133,22 @@ function checkHeaders(headers: Headers) { * @param response Response or route to get a DiscordAPIBucket from */ function getBucket(response: string): DiscordAPIBucket | undefined -function getBucket(response: Response): DiscordAPIBucket -function getBucket(response: Response | string) { - if (response instanceof Response) { +function getBucket(rest: REST, response: Response): DiscordAPIBucket +function getBucket(rest: REST | string, response?: Response) { + if (response instanceof Response && rest instanceof REST) { if (!checkHeaders(response.headers)) throw new Error("Required ratelimiting headers not found") if (buckets.has(response.headers.get("x-ratelimit-bucket")!)) return buckets.get(response.headers.get("x-ratelimit-bucket")!)! else - return new DiscordAPIBucket(response) - } else return routeConnections.get(response) + return new DiscordAPIBucket(rest, response) + } else if (typeof rest == "string") return routeConnections.get(rest) } export class REST { private readonly token : string - private requestQueue: {[key: `/${string}`]: (ReturnType["execute"])[]} = {} + requestQueue: {[key: `/${string}`]: (ReturnType["execute"])[]} = {} constructor(token:string) { this.token = token; @@ -169,7 +184,7 @@ export class REST { if (known_bucket) { if (known_bucket.remaining <= 0) return this.queue(path, options) - else known_bucket.remaining-- // just in case... + else known_bucket.remaining-- } // there's no known bucket for this route; let's carry on with the request @@ -183,7 +198,7 @@ export class REST { if ( checkHeaders(response.headers) ) { if (response.status == 429) { - let bucket = getBucket( response ) + let bucket = getBucket( this, response ) bucket.link(path) // link the bucket so that hopefully no future errors occur return this.queue(path, options) /* it was ratelimited after all diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts new file mode 100644 index 0000000..775ec17 --- /dev/null +++ b/src/server/lib/DiscordAPI/index.ts @@ -0,0 +1 @@ +import { REST } from "./DiscordRequests" \ No newline at end of file From f2deea4bc2c9d4db90ce55d11b0f0bb2d0506622 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 29 Oct 2023 15:26:51 +0000 Subject: [PATCH 037/173] ok time to work on client --- package-lock.json | 13 ++++++------ package.json | 1 + src/server/lib/DiscordAPI/index.ts | 32 +++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5aeb1c7..7d00638 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "@types/bytes": "^3.1.1", "@types/cookie-parser": "^1.4.3", "@types/range-parser": "^1.2.6", + "discord-api-types": "^0.37.61", "sass": "^1.57.1", "svelte": "^3.55.1", "vite": "^4.5.0" @@ -963,9 +964,9 @@ } }, "node_modules/discord-api-types": { - "version": "0.37.25", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.25.tgz", - "integrity": "sha512-aCwA2sWnL1zPQgTELkkMzQneuWyCXXUjZCUKswesiE6RDCfOfxAPXOHg6ZTlBA5layPSikGCBBRjyh8S3Wzd+A==" + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" }, "node_modules/discord.js": { "version": "14.7.1", @@ -2767,9 +2768,9 @@ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "discord-api-types": { - "version": "0.37.25", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.25.tgz", - "integrity": "sha512-aCwA2sWnL1zPQgTELkkMzQneuWyCXXUjZCUKswesiE6RDCfOfxAPXOHg6ZTlBA5layPSikGCBBRjyh8S3Wzd+A==" + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" }, "discord.js": { "version": "14.7.1", diff --git a/package.json b/package.json index af58dc0..2906996 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@types/bytes": "^3.1.1", "@types/cookie-parser": "^1.4.3", "@types/range-parser": "^1.2.6", + "discord-api-types": "^0.37.61", "sass": "^1.57.1", "svelte": "^3.55.1", "vite": "^4.5.0" diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 775ec17..9f7f90f 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -1 +1,31 @@ -import { REST } from "./DiscordRequests" \ No newline at end of file +import { REST } from "./DiscordRequests" +import type { APIMessage } from "discord-api-types/v10" + +const EXPIRE_AFTER = 20 * 60 * 1000 + +interface MessageCacheObject { + expire: number, + object: APIMessage +} + +export class Client { + private readonly token : string + private readonly rest : REST + private readonly targetChannel : string + private messageCache : Map = new Map() + + constructor(token: string, targetChannel: string) { + this.token = token + this.rest = new REST(token) + this.targetChannel = targetChannel + } + + fetchMessage(id: string, cache: boolean = true) { + if (cache && this.messageCache.has(id)) { + let cachedMessage = this.messageCache.get(id)! + if (cachedMessage.expire >= Date.now()) { + return cachedMessage.object + } + } + } +} \ No newline at end of file From 2e29d40a1b5d7b6939febd95d5159625e9ab985a Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 29 Oct 2023 20:48:23 +0000 Subject: [PATCH 038/173] idk Co-authored-by: Jack W. --- src/server/lib/DiscordAPI/DiscordRequests.ts | 2 +- src/server/lib/DiscordAPI/index.ts | 32 +++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/server/lib/DiscordAPI/DiscordRequests.ts b/src/server/lib/DiscordAPI/DiscordRequests.ts index c26776f..f7f1c77 100644 --- a/src/server/lib/DiscordAPI/DiscordRequests.ts +++ b/src/server/lib/DiscordAPI/DiscordRequests.ts @@ -204,7 +204,7 @@ export class REST { return this.queue(path, options) /* it was ratelimited after all getBucket() would have generated a DiscordAPIBucket so this would be fine */ - } + } /* commented out cause i feel like it'll cause issues // let's update the bucket with data from the source now let rd = extractRatelimitData( response.headers ) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 9f7f90f..b31eca5 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -2,6 +2,14 @@ import { REST } from "./DiscordRequests" import type { APIMessage } from "discord-api-types/v10" const EXPIRE_AFTER = 20 * 60 * 1000 +const DISCORD_EPOCH = 1420070400000 +// Converts a snowflake ID string into a JS Date object using the provided epoch (in ms), or Discord's epoch if not provided +function convertSnowflakeToDate(snowflake: string|number, epoch = DISCORD_EPOCH) { + // Convert snowflake to BigInt to extract timestamp bits + // https://discord.com/developers/docs/reference#snowflakes + const milliseconds = BigInt(snowflake) >> 22n + return new Date(Number(milliseconds) + epoch) +} interface MessageCacheObject { expire: number, @@ -20,12 +28,34 @@ export class Client { this.targetChannel = targetChannel } - fetchMessage(id: string, cache: boolean = true) { + async fetchMessage(id: string, cache: boolean = true) { if (cache && this.messageCache.has(id)) { let cachedMessage = this.messageCache.get(id)! if (cachedMessage.expire >= Date.now()) { return cachedMessage.object } } + + let message = await (this.rest.fetch(`/channels/${this.targetChannel}/messages/${id}`).then(res=>res.json()) as Promise) + + this.messageCache.set(id, { object: message, expire: EXPIRE_AFTER + Date.now() }) + return message + } + + async deleteMessage(id: string) { + await this.rest.fetch(`/channels/${this.targetChannel}/messages/${id}`, {method: "DELETE"}) + this.messageCache.delete(id) + } + + // https://discord.com/developers/docs/resources/channel#bulk-delete-messages + // "This endpoint will not delete messages older than 2 weeks" so we need to check each id + async deleteMessages(ids: string[]) { + // TODO check if any are older than two weeks + await this.rest.fetch(`/channels/${this.targetChannel}/messages/bulk-delete`, {method: "POST",body: JSON.stringify({messages: ids})}) + ids.forEach(Map.prototype.delete.bind(this.messageCache)) + } + + async sendDataMessage(formData: FormData) { + } } \ No newline at end of file From 107709a98aae27ea72921541d045624b575518ab Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 2 Nov 2023 17:30:00 +0000 Subject: [PATCH 039/173] Move client to files.ts --- src/server/index.ts | 14 +------------- src/server/lib/files.ts | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index 02ca442..a2d5091 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,4 +1,3 @@ -import { IntentsBitField, Client } from "discord.js" import { serve } from "@hono/node-server" import { serveStatic } from "@hono/node-server/serve-static" import { Hono } from "hono" @@ -67,16 +66,7 @@ if (!fs.existsSync(__dirname + "/../.data/")) fs.mkdirSync(__dirname + "/../.data/") // discord - -let client = new Client({ - intents: [ - IntentsBitField.Flags.GuildMessages, - IntentsBitField.Flags.MessageContent, - ], - rest: { timeout: config.requestTimeout }, -}) - -let files = new Files(client, config) +let files = new Files(config) const apiRouter = new APIRouter(files) apiRouter.loadAPIMethods().then(() => { @@ -117,6 +107,4 @@ serve( } ) -client.login(process.env.TOKEN) - export = app diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index e2d6997..fba8aa2 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -1,5 +1,5 @@ import axios from "axios" -import Discord, { Client, Message, TextBasedChannel } from "discord.js" +import Discord, { Client, Message, TextBasedChannel, IntentsBitField } from "discord.js" import { readFile, writeFile } from "node:fs/promises" import { Readable } from "node:stream" import crypto from "node:crypto" @@ -74,14 +74,21 @@ export default class Files { files: { [key: string]: FilePointer } = {} uploadChannel?: TextBasedChannel - constructor(client: Client, config: Configuration) { + constructor(config: Configuration) { this.config = config - this.client = client + this.client = new Client({ + intents: [ + IntentsBitField.Flags.GuildMessages, + IntentsBitField.Flags.MessageContent, + ], + rest: { timeout: config.requestTimeout }, + }) + - client.on("ready", () => { + this.client.on("ready", () => { console.log("Discord OK!") - client.guilds.fetch(config.targetGuild).then((g) => { + this.client.guilds.fetch(config.targetGuild).then((g) => { g.channels.fetch(config.targetChannel).then((a) => { if (a?.isTextBased()) { this.uploadChannel = a @@ -90,6 +97,8 @@ export default class Files { }) }) + this.client.login(process.env.TOKEN) + readFile(process.cwd() + "/.data/files.json") .then((buf) => { this.files = JSON.parse(buf.toString() || "{}") @@ -333,6 +342,7 @@ export default class Files { let attach = Array.from(msg.attachments.values()) for ( let i = + useRanges && xi == scan_msg_begin ? scan_files_begin - xi * 10 : 0; From 739f5b4e3faec639741bf6998c72f7888cd01e45 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 2 Nov 2023 17:35:02 +0000 Subject: [PATCH 040/173] port readFileStream --- src/server/index.ts | 2 -- src/server/lib/files.ts | 14 ++++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index a2d5091..cda24bb 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -7,8 +7,6 @@ import { getAccount } from "./lib/middleware" import APIRouter from "./routes/api" import preview from "./routes/preview" -require("dotenv").config() - const pkg = require(`${process.cwd()}/package.json`) const app = new Hono() let config = require(`${process.cwd()}/config.json`) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index fba8aa2..33b4495 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -4,6 +4,8 @@ import { readFile, writeFile } from "node:fs/promises" import { Readable } from "node:stream" import crypto from "node:crypto" import { files } from "./accounts" +import * as API from "./DiscordAPI" +import type {APIAttachment} from "discord-api-types/v10" import * as Accounts from "./accounts" @@ -12,6 +14,8 @@ export let alphanum = Array.from( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" ) +require("dotenv").config() + // bad solution but whatever export type FileVisibility = "public" | "anonymous" | "private" @@ -71,11 +75,13 @@ export interface StatusCodeError { export default class Files { config: Configuration client: Client + api: API.Client files: { [key: string]: FilePointer } = {} uploadChannel?: TextBasedChannel constructor(config: Configuration) { this.config = config + this.api = new API.Client(process.env.TOKEN!, config.targetChannel) this.client = new Client({ intents: [ IntentsBitField.Flags.GuildMessages, @@ -290,7 +296,7 @@ export default class Files { * @description Read a file * @param uploadId Target file's ID * @param range Byte range to get - * @returns A `Readable` containing the file's contents + * @returns A {@link Readable} containing the file's contents */ async readFileStream( uploadId: string, @@ -325,7 +331,7 @@ export default class Files { scan_msg_end = Math.ceil(scan_files_end / 10) } - let attachments: Discord.Attachment[] = [] + let attachments: APIAttachment[] = [] /* File updates */ let file_updates: Pick = @@ -333,8 +339,8 @@ export default class Files { let atSIB: number[] = [] // kepes track of the size of each file... for (let xi = scan_msg_begin; xi < scan_msg_end + 1; xi++) { - let msg = await this.uploadChannel.messages - .fetch(file.messageids[xi]) + let msg = await this.api + .fetchMessage(file.messageids[xi]) .catch(() => { return null }) From 3a5327aeb4679900d51ef11235a7a2788f7c01d7 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 2 Nov 2023 18:16:42 +0000 Subject: [PATCH 041/173] Port deletions --- package-lock.json | 127 +++++++++++++++++++ package.json | 1 + src/server/lib/DiscordAPI/DiscordRequests.ts | 22 ++-- src/server/lib/files.ts | 12 +- 4 files changed, 144 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d00638..cb011ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "express": "^4.18.1", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", + "node-fetch": "^3.3.2", "nodemailer": "^6.9.3", "typescript": "^5.2.2" }, @@ -921,6 +922,14 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1107,6 +1116,28 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-type": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", @@ -1184,6 +1215,17 @@ "node": ">= 6" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1531,6 +1573,41 @@ "node": ">= 0.6" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/nodemailer": { "version": "6.9.3", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", @@ -2134,6 +2211,14 @@ } } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "engines": { + "node": ">= 8" + } + }, "node_modules/ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", @@ -2738,6 +2823,11 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2889,6 +2979,15 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, "file-type": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", @@ -2937,6 +3036,14 @@ "mime-types": "^2.1.12" } }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "requires": { + "fetch-blob": "^3.1.2" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3173,6 +3280,21 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, "nodemailer": { "version": "6.9.3", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", @@ -3563,6 +3685,11 @@ "dev": true, "requires": {} }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" + }, "ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", diff --git a/package.json b/package.json index 2906996..1f7599d 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "express": "^4.18.1", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", + "node-fetch": "^3.3.2", "nodemailer": "^6.9.3", "typescript": "^5.2.2" }, diff --git a/src/server/lib/DiscordAPI/DiscordRequests.ts b/src/server/lib/DiscordAPI/DiscordRequests.ts index f7f1c77..9dd4e24 100644 --- a/src/server/lib/DiscordAPI/DiscordRequests.ts +++ b/src/server/lib/DiscordAPI/DiscordRequests.ts @@ -57,9 +57,9 @@ class DiscordAPIBucket { dead : boolean = false // True if bucket has expired linked_routes : `/${string}`[] = [] // Routes linked to this bucket - constructor(rest: REST, base: Response) { + constructor(rest: REST, base: Headers) { - let rd = extractRatelimitData(base.headers) + let rd = extractRatelimitData(base) this.parent = rest this.name = rd.bucket_name @@ -70,7 +70,7 @@ class DiscordAPIBucket { this.expirationHold = setTimeout( this.destroy, - parseFloat(base.headers.get("x-ratelimit-reset-after")!) + parseFloat(base.get("x-ratelimit-reset-after")!) ) } @@ -133,15 +133,15 @@ function checkHeaders(headers: Headers) { * @param response Response or route to get a DiscordAPIBucket from */ function getBucket(response: string): DiscordAPIBucket | undefined -function getBucket(rest: REST, response: Response): DiscordAPIBucket -function getBucket(rest: REST | string, response?: Response) { - if (response instanceof Response && rest instanceof REST) { - if (!checkHeaders(response.headers)) throw new Error("Required ratelimiting headers not found") +function getBucket(rest: REST, headers: Headers): DiscordAPIBucket +function getBucket(rest: REST | string, headers?: Headers) { + if (headers instanceof Headers && rest instanceof REST) { + if (!checkHeaders(headers)) throw new Error("Required ratelimiting headers not found") - if (buckets.has(response.headers.get("x-ratelimit-bucket")!)) - return buckets.get(response.headers.get("x-ratelimit-bucket")!)! + if (buckets.has(headers.get("x-ratelimit-bucket")!)) + return buckets.get(headers.get("x-ratelimit-bucket")!)! else - return new DiscordAPIBucket(rest, response) + return new DiscordAPIBucket(rest, headers) } else if (typeof rest == "string") return routeConnections.get(rest) } @@ -198,7 +198,7 @@ export class REST { if ( checkHeaders(response.headers) ) { if (response.status == 429) { - let bucket = getBucket( this, response ) + let bucket = getBucket( this, response.headers ) bucket.link(path) // link the bucket so that hopefully no future errors occur return this.queue(path, options) /* it was ratelimited after all diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 33b4495..5a1acce 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -4,7 +4,7 @@ import { readFile, writeFile } from "node:fs/promises" import { Readable } from "node:stream" import crypto from "node:crypto" import { files } from "./accounts" -import * as API from "./DiscordAPI" +import { Client as API } from "./DiscordAPI" import type {APIAttachment} from "discord-api-types/v10" import * as Accounts from "./accounts" @@ -75,13 +75,13 @@ export interface StatusCodeError { export default class Files { config: Configuration client: Client - api: API.Client + api: API files: { [key: string]: FilePointer } = {} uploadChannel?: TextBasedChannel constructor(config: Configuration) { this.config = config - this.api = new API.Client(process.env.TOKEN!, config.targetChannel) + this.api = new API(process.env.TOKEN!, config.targetChannel) this.client = new Client({ intents: [ IntentsBitField.Flags.GuildMessages, @@ -236,8 +236,7 @@ export default class Files { if (existingFile && this.uploadChannel) { for (let x of existingFile.messageids) { - this.uploadChannel.messages - .delete(x) + this.api.deleteMessage(x) .catch((err) => console.error(err)) } } @@ -499,8 +498,7 @@ export default class Files { return } for (let x of tmp.messageids) { - this.uploadChannel.messages - .delete(x) + this.api.deleteMessage(x) .catch((err) => console.error(err)) } From dddfd9dbcb35a1e29a1f1c0672371af0db9a9928 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 6 Nov 2023 00:45:26 +0000 Subject: [PATCH 042/173] remove rant lmfao --- src/server/lib/files.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 5a1acce..c5b473d 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -367,12 +367,6 @@ export default class Files { file_updates.sizeInBytes = atSIB.reduce((a, b) => a + b, 0) if (!file.chunkSize) file_updates.chunkSize = atSIB[0] if (Object.keys(file_updates).length) { - // if file_updates not empty - // i gotta do these weird workarounds, ts is weird sometimes - // originally i was gonna do key is keyof FilePointer but for some reason - // it ended up making typeof file[key] never??? so - // its 10pm and chinese people suck at being quiet so i just wanna get this over with - // chinese is the worst language in terms of volume lmao let valid_fp_keys = ["sizeInBytes", "chunkSize"] let isValidFilePointerKey = ( key: string From 460df7164a81eb40095471d6b699a5fc18bcef6f Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 6 Nov 2023 01:10:39 +0000 Subject: [PATCH 043/173] i have no idea if this works or not @Jack5079 can you please make file get work with honofile --- src/server/lib/files.ts | 86 +++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index c5b473d..012d437 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -70,7 +70,21 @@ export interface StatusCodeError { message: string } -/* */ +// this is probably really stupid. I'm sorry! + +type ResolveType> = T extends Promise ? U: never; + +async function pushWebStream(stream: Readable, webStream: ReadableStream) { + const reader = await webStream.getReader() + let result: ResolveType> = { done: false, value: undefined } + let last = true + + while ( !result.done ) { + result = await reader.read() + last = stream.push(result.value) + } + return last +} export default class Files { config: Configuration @@ -366,6 +380,7 @@ export default class Files { if (!file.sizeInBytes) file_updates.sizeInBytes = atSIB.reduce((a, b) => a + b, 0) if (!file.chunkSize) file_updates.chunkSize = atSIB[0] + if (Object.keys(file_updates).length) { let valid_fp_keys = ["sizeInBytes", "chunkSize"] let isValidFilePointerKey = ( @@ -378,6 +393,8 @@ export default class Files { } // The original was a callback so I don't think I'm supposed to `await` this -Jack + // Jack you need to get more sleep man we're using fs/promises + // but also it would slow us down so maybe not writeFile( process.cwd() + "/.data/files.json", JSON.stringify( @@ -396,46 +413,37 @@ export default class Files { return null } - let d = await axios - .get(scanning_chunk.url, { - responseType: "arraybuffer", - headers: { - ...(useRanges - ? { - Range: `bytes=${ - position == 0 && - range && - file.chunkSize - ? range.start - - scan_files_begin * - file.chunkSize - : "0" - }-${ - position == attachments.length - 1 && - range && - file.chunkSize - ? range.end - - scan_files_end * file.chunkSize - : "" - }`, - } - : {}), - }, - }) + let headers: HeadersInit = + useRanges + ? { + Range: `bytes=${ + position == 0 && + range && + file.chunkSize + ? range.start - + scan_files_begin * + file.chunkSize + : "0" + }-${ + position == attachments.length - 1 && + range && + file.chunkSize + ? range.end - + scan_files_end * file.chunkSize + : "" + }`, + } + : {} + + let d = await fetch(scanning_chunk.url, {headers}) .catch((e: Error) => { console.error(e) + return {body: "__ERR"} }) position++ - if (d) { - return d.data - } else { - throw { - status: 500, - message: "internal server error", - } - } + return d.body } let ord: number[] = [] @@ -447,17 +455,19 @@ export default class Files { if (!lastChunkSent) return lastChunkSent = false getNextChunk().then(async (nextChunk) => { - if (nextChunk == "__ERR") { + if (typeof nextChunk == "string") { this.destroy(new Error("file read error")) return } - let response = this.push(nextChunk) if (!nextChunk) return // EOF + let response = await pushWebStream(this, nextChunk) + + while (response) { let nextChunk = await getNextChunk() - response = this.push(nextChunk) + response = await pushWebStream(this, nextChunk) if (!nextChunk) return } lastChunkSent = true From f3e9f58ea4add810641dbb42563a3f0b87b0c0c7 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 17 Nov 2023 20:52:01 +0000 Subject: [PATCH 044/173] i think that this should work well enough --- src/server/lib/files.ts | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 012d437..c5eea21 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -349,25 +349,31 @@ export default class Files { /* File updates */ let file_updates: Pick = {} - let atSIB: number[] = [] // kepes track of the size of each file... + let atSIB: number[] = [] // keeps track of the size of each file... + + let msgIdx = scan_msg_begin + + let getNextAttachment = async () => { + let ret = attachments.splice(0,1)[0] + if (ret) return ret - for (let xi = scan_msg_begin; xi < scan_msg_end + 1; xi++) { let msg = await this.api - .fetchMessage(file.messageids[xi]) + .fetchMessage(file.messageids[msgIdx]) .catch(() => { return null }) + if (msg?.attachments) { let attach = Array.from(msg.attachments.values()) for ( let i = - useRanges && xi == scan_msg_begin - ? scan_files_begin - xi * 10 + useRanges && msgIdx == scan_msg_begin + ? scan_files_begin - msgIdx * 10 : 0; i < - (useRanges && xi == scan_msg_end - ? scan_files_end - xi * 10 + 1 + (useRanges && msgIdx == scan_msg_end + ? scan_files_end - msgIdx * 10 + 1 : attach.length); i++ ) { @@ -375,6 +381,9 @@ export default class Files { atSIB.push(attach[i].size) } } + + msgIdx++ + return attachments.splice(0,1)[0] } if (!file.sizeInBytes) @@ -408,7 +417,7 @@ export default class Files { let position = 0 let getNextChunk = async () => { - let scanning_chunk = attachments[position] + let scanning_chunk = await getNextAttachment() if (!scanning_chunk) { return null } From edc3e2c71904c76b5a00e8ec8270f4a5b7952667 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 17 Nov 2023 21:00:09 +0000 Subject: [PATCH 045/173] i don't even know --- src/server/lib/files.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index c5eea21..f5428f7 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -476,8 +476,10 @@ export default class Files { while (response) { let nextChunk = await getNextChunk() + // idk why this line was below but i moved it on top + // hopefully it wasn't for some other weird reason + if (!nextChunk || typeof nextChunk == "string") return response = await pushWebStream(this, nextChunk) - if (!nextChunk) return } lastChunkSent = true }) From 7654801e4113837de149610d25e0432bdc981379 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 19 Nov 2023 03:16:43 +0000 Subject: [PATCH 046/173] MAN FUCK YO PICKLES honk mimimimimimi honk mimimim --- src/server/lib/files.ts | 35 +-- src/server/routes/api/v0/primaryApi.ts | 380 +++++++++++++------------ 2 files changed, 211 insertions(+), 204 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index f5428f7..9542d90 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -425,22 +425,25 @@ export default class Files { let headers: HeadersInit = useRanges ? { - Range: `bytes=${ - position == 0 && - range && - file.chunkSize - ? range.start - - scan_files_begin * - file.chunkSize - : "0" - }-${ - position == attachments.length - 1 && - range && - file.chunkSize - ? range.end - - scan_files_end * file.chunkSize - : "" - }`, + Range: `bytes=${ + // If this is the first chunk of the file (position == 0) + // and both 'range' and 'file.chunkSize' are defined, + // calculate the start of the range. + // Otherwise, default to "0". + position == 0 && range + && file.chunkSize + ? range.start - scan_files_begin * file.chunkSize + : "0" + }-${ + // If this is the last chunk of the file (position == attachments.length - 1) + // and both 'range' and 'file.chunkSize' are defined, + // calculate the end of the range. + // Otherwise, default to an empty string. + position == attachments.length - 1 && range + && file.chunkSize + ? range.end - scan_files_end * file.chunkSize + : "" + }`, } : {} diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index efc0d67..45747fe 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -28,210 +28,214 @@ let config = require(`${process.cwd()}/config.json`) primaryApi.use(getAccount) module.exports = function (files: Files) { - // primaryApi.get( + primaryApi.get( + ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], + async (ctx) => { + const fileId = (ctx.req.param() as {fileId: string}).fileId + const reqRange + + let acc = ctx.get("account") as Accounts.Account + + let file = files.getFilePointer(fileId) + ctx.header("Access-Control-Allow-Origin", "*") + ctx.header("Content-Security-Policy", "sandbox allow-scripts") + if (ctx.req.query("attachment") == "1") + ctx.header("Content-Disposition", "attachment") + + if (file) { + if (file.visibility == "private") { + if (acc?.id != file.owner) { + return ServeError(ctx, 403, "you do not own this file") + } + + if ( + auth.getType(auth.tokenFor(ctx)!) == "App" && + auth + .getPermissions(auth.tokenFor(ctx)!) + ?.includes("private") + ) { + ServeError(ctx, 403, "insufficient permissions") + return + } + } + + let range: Range | undefined + + ctx.header("Content-Type", file.mime) + if (file.sizeInBytes) { + ctx.header("Content-Length", file.sizeInBytes.toString()) + + if (file.chunkSize) { + let range = ctx.range(file.sizeInBytes) + if (range) { + // error handling + if (typeof range == "number") { + return ctx.status(range == -1 ? 416 : 400) + } + if (range.type != "bytes") { + return ctx.status(400) + } + + // set ranges var + let rngs = Array.from(range) + if (rngs.length != 1) { + return ctx.status(400) + } + range = rngs[0] + } + } + } + + // supports ranges + + return files + .readFileStream(fileId, range) + .then(async (stream) => { + if (range) { + ctx.status(206) + ctx.header( + "Content-Length", + (range.end - range.start + 1).toString() + ) + ctx.header( + "Content-Range", + `bytes ${range.start}-${range.end}/${file.sizeInBytes}` + ) + } + + return ctx.stream((stre) => { + // Somehow return a stream? + }) + }) + .catch((err) => { + return ServeError(ctx, err.status, err.message) + }) + } else { + return ServeError(ctx, 404, "file not found") + } + } + ) + + // primaryApi.head( // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], // async (ctx) => { - // let acc = ctx.get("account") as Accounts.Account + // let file = files.getFilePointer(req.params.fileId) + + // if ( + // file.visibility == "private" && + // (ctx.get("account")?.id != file.owner || + // (auth.getType(auth.tokenFor(ctx)!) == "App" && + // auth + // .getPermissions(auth.tokenFor(ctx)!) + // ?.includes("private"))) + // ) { + // return ctx.status(403) + // } - // let file = files.getFilePointer(ctx.req.param("fileId")) - // ctx.header("Access-Control-Allow-Origin", "*") // ctx.header("Content-Security-Policy", "sandbox allow-scripts") + // if (ctx.req.query("attachment") == "1") // ctx.header("Content-Disposition", "attachment") - // if (file) { - // if (file.visibility == "private") { - // if (acc?.id != file.owner) { - // return ServeError(ctx, 403, "you do not own this file") - // } - - // if ( - // auth.getType(auth.tokenFor(ctx)!) == "App" && - // auth - // .getPermissions(auth.tokenFor(ctx)!) - // ?.includes("private") - // ) { - // ServeError(ctx, 403, "insufficient permissions") - // return - // } - // } - - // let range: Range | undefined - + // if (!file) { + // res.status(404) + // res.send() + // } else { // ctx.header("Content-Type", file.mime) // if (file.sizeInBytes) { - // ctx.header("Content-Length", file.sizeInBytes.toString()) - - // if (file.chunkSize) { - // let range = ctx.range(file.sizeInBytes) - // if (range) { - // // error handling - // if (typeof range == "number") { - // return ctx.status(range == -1 ? 416 : 400) - // } - // if (range.type != "bytes") { - // return ctx.status(400) - // } - - // // set ranges var - // let rngs = Array.from(range) - // if (rngs.length != 1) { - // return ctx.status(400) - // } - // range = rngs[0] - // } - // } + // ctx.header("Content-Length", file.sizeInBytes) // } - - // // supports ranges - - // return files - // .readFileStream(ctx.req.param("fileId"), range) - // .then(async (stream) => { - // if (range) { - // ctx.status(206) - // ctx.header( - // "Content-Length", - // (range.end - range.start + 1).toString() - // ) - // ctx.header( - // "Content-Range", - // `bytes ${range.start}-${range.end}/${file.sizeInBytes}` - // ) - // } - - // return ctx.stream((stre) => { - // // Somehow return a stream? - // }) - // }) - // .catch((err) => { - // return ServeError(ctx, err.status, err.message) - // }) - // } else { - // return ServeError(ctx, 404, "file not found") - // } - // } - // ) - - // // primaryApi.head( - // // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], - // // async (ctx) => { - // // let file = files.getFilePointer(req.params.fileId) - - // // if ( - // // file.visibility == "private" && - // // (ctx.get("account")?.id != file.owner || - // // (auth.getType(auth.tokenFor(ctx)!) == "App" && - // // auth - // // .getPermissions(auth.tokenFor(ctx)!) - // // ?.includes("private"))) - // // ) { - // // return ctx.status(403) - // // } - - // // ctx.header("Content-Security-Policy", "sandbox allow-scripts") - - // // if (ctx.req.query("attachment") == "1") - // // ctx.header("Content-Disposition", "attachment") - - // // if (!file) { - // // res.status(404) - // // res.send() - // // } else { - // // ctx.header("Content-Type", file.mime) - // // if (file.sizeInBytes) { - // // ctx.header("Content-Length", file.sizeInBytes) - // // } - // // if (file.chunkSize) { - // // ctx.header("Accept-Ranges", "bytes") - // // } - // // res.send() - // // } - // // } - // // ) - - // // upload handlers - - // primaryApi.post( - // "/upload", - // requiresPermissions("upload"), - // multerSetup.single("file"), - // async (ctx) => { - // let acc = ctx.get("account") as Accounts.Account - - // if (req.file) { - // try { - // let prm = req.header("monofile-params") - // let params: { [key: string]: any } = {} - // if (prm) { - // params = JSON.parse(prm) - // } - - // files - // .uploadFile( - // { - // owner: acc?.id, - - // uploadId: params.uploadId, - // filename: req.file.originalname, - // mime: req.file.mimetype, - // }, - // req.file.buffer - // ) - // .then((uID) => res.send(uID)) - // .catch((stat) => { - // res.status(stat.status) - // res.send(`[err] ${stat.message}`) - // }) - // } catch { - // res.status(400) - // res.send("[err] bad request") + // if (file.chunkSize) { + // ctx.header("Accept-Ranges", "bytes") // } - // } else { - // res.status(400) - // res.send("[err] bad request") + // res.send() // } // } // ) - // primaryApi.post( - // "/clone", - // requiresPermissions("upload"), - // async ctx => { - // let acc = ctx.get("account") as Accounts.Account + // upload handlers - // try { - // return axios - // .get(req.body.url, { responseType: "arraybuffer" }) - // .then((data: AxiosResponse) => { - // files - // .uploadFile( - // { - // owner: acc?.id, - // filename: - // req.body.url.split("/")[ - // req.body.url.split("/").length - 1 - // ] || "generic", - // mime: data.headers["content-type"], - // uploadId: req.body.uploadId, - // }, - // Buffer.from(data.data) - // ) - // .then((uID) => res.send(uID)) - // .catch((stat) => { - // res.status(stat.status) - // res.send(`[err] ${stat.message}`) - // }) - // }) - // .catch((err) => { - // console.log(err) - // return res.text(`[err] failed to fetch data`, 400) - // }) - // } catch { - // return ctx.text("[err] an error occured", 500) - // } - // } - // ) + /* + primaryApi.post( + "/upload", + requiresPermissions("upload"), + multerSetup.single("file"), + async (ctx) => { + let acc = ctx.get("account") as Accounts.Account + if (req.file) { + try { + let prm = req.header("monofile-params") + let params: { [key: string]: any } = {} + if (prm) { + params = JSON.parse(prm) + } + + files + .uploadFile( + { + owner: acc?.id, + + uploadId: params.uploadId, + filename: req.file.originalname, + mime: req.file.mimetype, + }, + req.file.buffer + ) + .then((uID) => res.send(uID)) + .catch((stat) => { + res.status(stat.status) + res.send(`[err] ${stat.message}`) + }) + } catch { + res.status(400) + res.send("[err] bad request") + } + } else { + res.status(400) + res.send("[err] bad request") + } + } + ) + + primaryApi.post( + "/clone", + requiresPermissions("upload"), + async ctx => { + let acc = ctx.get("account") as Accounts.Account + + try { + return axios + .get(req.body.url, { responseType: "arraybuffer" }) + .then((data: AxiosResponse) => { + files + .uploadFile( + { + owner: acc?.id, + filename: + req.body.url.split("/")[ + req.body.url.split("/").length - 1 + ] || "generic", + mime: data.headers["content-type"], + uploadId: req.body.uploadId, + }, + Buffer.from(data.data) + ) + .then((uID) => res.send(uID)) + .catch((stat) => { + res.status(stat.status) + res.send(`[err] ${stat.message}`) + }) + }) + .catch((err) => { + console.log(err) + return res.text(`[err] failed to fetch data`, 400) + }) + } catch { + return ctx.text("[err] an error occured", 500) + } + } + ) + */ return primaryApi } From 412a117e15e49149af077c4dd300202c85b3c25a Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 30 Nov 2023 19:20:54 +0000 Subject: [PATCH 047/173] node-fetch conversion --- src/server/lib/DiscordAPI/DiscordRequests.ts | 2 ++ src/server/lib/DiscordAPI/index.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/src/server/lib/DiscordAPI/DiscordRequests.ts b/src/server/lib/DiscordAPI/DiscordRequests.ts index 9dd4e24..365395a 100644 --- a/src/server/lib/DiscordAPI/DiscordRequests.ts +++ b/src/server/lib/DiscordAPI/DiscordRequests.ts @@ -1,3 +1,5 @@ +import fetch, { type RequestInit, type Response, Headers } from "node-fetch" + const base = "https://discord.com/api/v10" const buckets = new Map() const routeConnections = new Map() diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index b31eca5..eeed066 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -1,5 +1,6 @@ import { REST } from "./DiscordRequests" import type { APIMessage } from "discord-api-types/v10" +import { FormData } from "node-fetch" const EXPIRE_AFTER = 20 * 60 * 1000 const DISCORD_EPOCH = 1420070400000 From c14ddf8397dec9d73e13dd009589f47f82873d18 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 30 Nov 2023 19:33:54 +0000 Subject: [PATCH 048/173] work a bit on DiscordAPI --- src/server/lib/DiscordAPI/index.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index eeed066..88a0918 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -51,12 +51,28 @@ export class Client { // https://discord.com/developers/docs/resources/channel#bulk-delete-messages // "This endpoint will not delete messages older than 2 weeks" so we need to check each id async deleteMessages(ids: string[]) { - // TODO check if any are older than two weeks - await this.rest.fetch(`/channels/${this.targetChannel}/messages/bulk-delete`, {method: "POST",body: JSON.stringify({messages: ids})}) - ids.forEach(Map.prototype.delete.bind(this.messageCache)) + + // Remove bulk deletable messages + + let bulkDeletable = ids.filter(e => convertSnowflakeToDate(e).valueOf() < 2 * 7 * 24 * 60 * 60 * 1000) + await this.rest.fetch(`/channels/${this.targetChannel}/messages/bulk-delete`, {method: "POST",body: JSON.stringify({messages: bulkDeletable})}) + bulkDeletable.forEach(Map.prototype.delete.bind(this.messageCache)) + + // everything else, we can do manually... + // there's probably a better way to do this @Jack5079 + // fix for me if possible + await Promise.all(ids.map(async e => { + if (convertSnowflakeToDate(e).valueOf() >= 2 * 7 * 24 * 60 * 60 * 1000) { + return await this.deleteMessage(e) + } + }).filter(Boolean)) // filter based on whether or not it's undefined + } async sendDataMessage(formData: FormData) { - + this.rest.fetch(`/channels/${this.targetChannel}/messages`, { + method: "POST", + body: formData + }) } } \ No newline at end of file From 1fabc2ff82ee559de43092510950ba337904d1a1 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 5 Dec 2023 21:10:23 +0000 Subject: [PATCH 049/173] clean up file updates --- src/server/lib/DiscordAPI/index.ts | 6 +- src/server/lib/files.ts | 103 ++++++++++++----------------- 2 files changed, 47 insertions(+), 62 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 88a0918..69a154b 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -69,10 +69,12 @@ export class Client { } - async sendDataMessage(formData: FormData) { - this.rest.fetch(`/channels/${this.targetChannel}/messages`, { + async sendMessageChunk(formData: FormData) { + let returned = await this.rest.fetch(`/channels/${this.targetChannel}/messages`, { method: "POST", body: formData }) + + return (await returned.json() as { id: string }).id } } \ No newline at end of file diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 9542d90..46c23de 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -256,7 +256,8 @@ export default class Files { } const { filename, mime, owner } = metadata - return this.writeFile(uploadId, { + + this.files[uploadId] = { filename, messageids: msgIds, mime, @@ -272,21 +273,22 @@ export default class Files { ...((existingFile || {}).tag ? { tag: existingFile.tag } : {}), chunkSize: this.config.maxDiscordFileSize, + } + + return this.write().then(_ => uploadId).catch(_ => { + delete this.files[uploadId] + throw { status: 500, message: "failed to save database" } }) } // fs /** - * @description Writes a file to disk - * @param uploadId New file's ID - * @param file FilePointer representing the new file - * @returns Promise which resolves to the file's ID + * @description Saves file database + * */ - async writeFile(uploadId: string, file: FilePointer): Promise { - this.files[uploadId] = file - - return writeFile( + async write(): Promise { + await writeFile( process.cwd() + "/.data/files.json", JSON.stringify( this.files, @@ -294,15 +296,31 @@ export default class Files { process.env.NODE_ENV === "development" ? 4 : undefined ) ) - .then(() => uploadId) - .catch(() => { - delete this.files[uploadId] - throw { - status: 500, - message: - "server may be misconfigured, contact admin for help", - } - }) + } + + /** + * @description Update a file from monofile 1.2 to allow for range requests with Content-Length to that file. + * @param uploadId Target file's ID + */ + + async update( uploadId: string ) { + let target_file = this.files[uploadId] + let attachment_sizes = [] + + for (let message of target_file.messageids) { + let attachments = (await this.api.fetchMessage(message)).attachments + for (let attachment of attachments) { + attachment_sizes.push(attachment.size) + } + } + + if (!target_file.sizeInBytes) + target_file.sizeInBytes = attachment_sizes.reduce((a, b) => a + b, 0) + + if (!target_file.chunkSize) + target_file.chunkSize = attachment_sizes[0] + + } /** @@ -315,15 +333,9 @@ export default class Files { uploadId: string, range?: { start: number; end: number } ): Promise { - if (!this.uploadChannel) { - throw { - status: 503, - message: "server is not ready - please try again later", - } - } - if (this.files[uploadId]) { let file = this.files[uploadId] + if (!file.sizeInBytes || !file.chunkSize) await this.update(uploadId) let scan_msg_begin = 0, scan_msg_end = file.messageids.length - 1, @@ -346,17 +358,15 @@ export default class Files { let attachments: APIAttachment[] = [] - /* File updates */ - let file_updates: Pick = - {} - let atSIB: number[] = [] // keeps track of the size of each file... - let msgIdx = scan_msg_begin let getNextAttachment = async () => { + // return first in our attachment buffer let ret = attachments.splice(0,1)[0] if (ret) return ret + // oh, there's none left. let's fetch a new message, then. + if (!file.messageids[msgIdx]) return null let msg = await this.api .fetchMessage(file.messageids[msgIdx]) .catch(() => { @@ -378,7 +388,6 @@ export default class Files { i++ ) { attachments.push(attach[i]) - atSIB.push(attach[i].size) } } @@ -386,34 +395,6 @@ export default class Files { return attachments.splice(0,1)[0] } - if (!file.sizeInBytes) - file_updates.sizeInBytes = atSIB.reduce((a, b) => a + b, 0) - if (!file.chunkSize) file_updates.chunkSize = atSIB[0] - - if (Object.keys(file_updates).length) { - let valid_fp_keys = ["sizeInBytes", "chunkSize"] - let isValidFilePointerKey = ( - key: string - ): key is "sizeInBytes" | "chunkSize" => - valid_fp_keys.includes(key) - - for (let [key, value] of Object.entries(file_updates)) { - if (isValidFilePointerKey(key)) file[key] = value - } - - // The original was a callback so I don't think I'm supposed to `await` this -Jack - // Jack you need to get more sleep man we're using fs/promises - // but also it would slow us down so maybe not - writeFile( - process.cwd() + "/.data/files.json", - JSON.stringify( - this.files, - null, - process.env.NODE_ENV === "development" ? 4 : undefined - ) - ) - } - let position = 0 let getNextChunk = async () => { @@ -515,10 +496,12 @@ export default class Files { if (!this.uploadChannel) { return } + /* for (let x of tmp.messageids) { this.api.deleteMessage(x) .catch((err) => console.error(err)) - } + }*/ + this.api.deleteMessages(tmp.messageids) delete this.files[uploadId] if (noWrite) { From a5964f5ac8c9298b4d39dd374449e692a4e59eec Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 6 Dec 2023 19:21:52 +0000 Subject: [PATCH 050/173] drop .getFilePointer() --- src/server/lib/files.ts | 54 ++++------------------- src/server/routes/api/v0/adminRoutes.ts | 13 +++--- src/server/routes/api/v0/fileApiRoutes.ts | 4 +- src/server/routes/api/v0/primaryApi.ts | 4 +- src/server/routes/preview.ts | 2 +- 5 files changed, 20 insertions(+), 57 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 46c23de..243fb2e 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -245,15 +245,7 @@ export default class Files { } } - // this code deletes the files from discord, btw - // if need be, replace with job queue system - - if (existingFile && this.uploadChannel) { - for (let x of existingFile.messageids) { - this.api.deleteMessage(x) - .catch((err) => console.error(err)) - } - } + if (existingFile) this.api.deleteMessages(existingFile.messageids) const { filename, mime, owner } = metadata @@ -482,50 +474,20 @@ export default class Files { * @param noWrite Whether or not the change should be written to disk. Enable for bulk deletes */ async unlink(uploadId: string, noWrite: boolean = false): Promise { - let tmp = this.files[uploadId] - if (!tmp) { - return - } - if (tmp.owner) { - let id = files.deindex(tmp.owner, uploadId, noWrite) + let target = this.files[uploadId] + if (!target) return + if (target.owner) { + let id = files.deindex(target.owner, uploadId, noWrite) if (id) await id } - // this code deletes the files from discord, btw - // if need be, replace with job queue system - if (!this.uploadChannel) { - return - } - /* - for (let x of tmp.messageids) { - this.api.deleteMessage(x) - .catch((err) => console.error(err)) - }*/ - this.api.deleteMessages(tmp.messageids) + await this.api.deleteMessages(target.messageids) delete this.files[uploadId] - if (noWrite) { - return - } - return writeFile( - process.cwd() + "/.data/files.json", - JSON.stringify( - this.files, - null, - process.env.NODE_ENV === "development" ? 4 : undefined - ) - ).catch((err) => { - this.files[uploadId] = tmp // !! this may not work, since tmp is a link to this.files[uploadId]? + if (noWrite) return + return this.write().catch((err) => { throw err }) } - /** - * @description Get a file's FilePointer - * @param uploadId Target file's ID - * @returns FilePointer for the file - */ - getFilePointer(uploadId: string): FilePointer { - return this.files[uploadId] - } } diff --git a/src/server/routes/api/v0/adminRoutes.ts b/src/server/routes/api/v0/adminRoutes.ts index e91c060..25c8820 100644 --- a/src/server/routes/api/v0/adminRoutes.ts +++ b/src/server/routes/api/v0/adminRoutes.ts @@ -82,7 +82,7 @@ module.exports = function (files: Files) { return ctx.status(404) } - let targetFile = files.getFilePointer(body.target) + let targetFile = files.files[body.target] if (!targetFile) { return ctx.status(404) @@ -154,7 +154,7 @@ module.exports = function (files: Files) { return ctx.status(404) } - let targetFile = files.getFilePointer(body.target) + let targetFile = files.files[body.target] if (!targetFile) { return ctx.status(404) } @@ -176,7 +176,7 @@ module.exports = function (files: Files) { targetFile.owner = newOwner ? newOwner.id : undefined files - .writeFile(body.target, targetFile) + .write() .then(() => ctx.status(200)) .catch(() => ctx.status(500)) }) @@ -187,12 +187,12 @@ module.exports = function (files: Files) { return ctx.status(400) } - let targetFile = files.getFilePointer(body.target) + let targetFile = files.files[body.target] if (!targetFile) { return ctx.status(404) } - if (files.getFilePointer(body.new)) { + if (files.files[body.new]) { return ctx.status(400) } @@ -201,9 +201,10 @@ module.exports = function (files: Files) { Accounts.files.index(targetFile.owner, body.new) } delete files.files[body.target] + files.files[body.new] = targetFile return files - .writeFile(body.new, targetFile) + .write() .then(() => ctx.status(200)) .catch(() => { files.files[body.target] = body.new diff --git a/src/server/routes/api/v0/fileApiRoutes.ts b/src/server/routes/api/v0/fileApiRoutes.ts index de10fe4..4a8935e 100644 --- a/src/server/routes/api/v0/fileApiRoutes.ts +++ b/src/server/routes/api/v0/fileApiRoutes.ts @@ -41,7 +41,7 @@ module.exports = function (files: Files) { ctx.json( acc.files .map((e) => { - let fp = files.getFilePointer(e) + let fp = files.files[e] if (!fp) { Accounts.files.deindex(accId, e) return null @@ -77,7 +77,7 @@ module.exports = function (files: Files) { body.target.forEach((e: string) => { if (!acc.files.includes(e)) return - let fp = files.getFilePointer(e) + let fp = files.files[e] if (fp.reserved) { return diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 45747fe..763ea9c 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -36,7 +36,7 @@ module.exports = function (files: Files) { let acc = ctx.get("account") as Accounts.Account - let file = files.getFilePointer(fileId) + let file = files.files[fileId] ctx.header("Access-Control-Allow-Origin", "*") ctx.header("Content-Security-Policy", "sandbox allow-scripts") if (ctx.req.query("attachment") == "1") @@ -119,7 +119,7 @@ module.exports = function (files: Files) { // primaryApi.head( // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], // async (ctx) => { - // let file = files.getFilePointer(req.params.fileId) + // let file = files.files[req.params.fileId] // if ( // file.visibility == "private" && diff --git a/src/server/routes/preview.ts b/src/server/routes/preview.ts index 9881d31..1ed177b 100644 --- a/src/server/routes/preview.ts +++ b/src/server/routes/preview.ts @@ -10,7 +10,7 @@ export = (files: Files): Handler => let acc = ctx.get("account") as Accounts.Account const fileId = ctx.req.param("fileId") const host = ctx.req.header("Host") - const file = files.getFilePointer(fileId) + const file = files.files[fileId] if (file) { if (file.visibility == "private" && acc?.id != file.owner) { return ServeError(ctx, 403, "you do not own this file") From b8d46bb1932a91e46fafc8c468e9cc830f12aaac Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 6 Dec 2023 19:40:42 +0000 Subject: [PATCH 051/173] =?UTF-8?q?KILL=20DISCORD.JS=20JS=20=F0=9F=9A=80?= =?UTF-8?q?=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 473 +---------------------------- package.json | 2 +- src/server/lib/DiscordAPI/index.ts | 19 +- src/server/lib/files.ts | 50 +-- 4 files changed, 23 insertions(+), 521 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb011ef..394b168 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,9 +18,9 @@ "body-parser": "^1.20.0", "bytes": "^3.1.2", "cookie-parser": "^1.4.6", - "discord.js": "^14.7.1", "dotenv": "^16.0.2", "express": "^4.18.1", + "form-data": "^4.0.0", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", @@ -41,56 +41,6 @@ "node": ">=v16.11" } }, - "node_modules/@discordjs/builders": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", - "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", - "dependencies": { - "@discordjs/util": "^0.1.0", - "@sapphire/shapeshift": "^3.7.1", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.2", - "tslib": "^2.4.1" - }, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/collection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", - "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==", - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/rest": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", - "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", - "dependencies": { - "@discordjs/collection": "^1.3.0", - "@discordjs/util": "^0.1.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.23", - "file-type": "^18.0.0", - "tslib": "^2.4.1", - "undici": "^5.13.0" - }, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/util": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", - "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==", - "engines": { - "node": ">=16.9.0" - } - }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -457,37 +407,6 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", - "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/snowflake": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", - "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@sveltejs/vite-plugin-svelte": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", @@ -573,11 +492,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -676,14 +590,6 @@ "@types/node": "*" } }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -975,29 +881,8 @@ "node_modules/discord-api-types": { "version": "0.37.61", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", - "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" - }, - "node_modules/discord.js": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", - "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", - "dependencies": { - "@discordjs/builders": "^1.4.0", - "@discordjs/collection": "^1.3.0", - "@discordjs/rest": "^1.4.0", - "@discordjs/util": "^0.1.0", - "@sapphire/snowflake": "^3.2.2", - "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.4.1", - "undici": "^5.13.0", - "ws": "^8.11.0" - }, - "engines": { - "node": ">=16.9.0" - } + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==", + "dev": true }, "node_modules/dotenv": { "version": "16.0.2", @@ -1111,11 +996,6 @@ "node": ">= 0.10.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -1138,22 +1018,6 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/file-type": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", - "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", - "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1342,25 +1206,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/immutable": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", @@ -1436,16 +1281,6 @@ "node": ">=6" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, "node_modules/magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", @@ -1665,18 +1500,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "node_modules/peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1795,34 +1618,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1990,22 +1785,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/svelte": { "version": "3.55.1", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", @@ -2047,32 +1826,6 @@ "node": ">=0.6" } }, - "node_modules/token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/ts-mixer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", - "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -2102,17 +1855,6 @@ "node": ">=14.17" } }, - "node_modules/undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -2219,26 +1961,6 @@ "node": ">= 8" } }, - "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -2249,44 +1971,6 @@ } }, "dependencies": { - "@discordjs/builders": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", - "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", - "requires": { - "@discordjs/util": "^0.1.0", - "@sapphire/shapeshift": "^3.7.1", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.2", - "tslib": "^2.4.1" - } - }, - "@discordjs/collection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", - "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==" - }, - "@discordjs/rest": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", - "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", - "requires": { - "@discordjs/collection": "^1.3.0", - "@discordjs/util": "^0.1.0", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.23", - "file-type": "^18.0.0", - "tslib": "^2.4.1", - "undici": "^5.13.0" - } - }, - "@discordjs/util": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", - "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" - }, "@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -2452,25 +2136,6 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" - }, - "@sapphire/shapeshift": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", - "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", - "requires": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - } - }, - "@sapphire/snowflake": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", - "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==" - }, "@sveltejs/vite-plugin-svelte": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", @@ -2529,11 +2194,6 @@ } } }, - "@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, "@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -2632,14 +2292,6 @@ "@types/node": "*" } }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" - } - }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2860,26 +2512,8 @@ "discord-api-types": { "version": "0.37.61", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", - "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" - }, - "discord.js": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", - "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", - "requires": { - "@discordjs/builders": "^1.4.0", - "@discordjs/collection": "^1.3.0", - "@discordjs/rest": "^1.4.0", - "@discordjs/util": "^0.1.0", - "@sapphire/snowflake": "^3.2.2", - "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.20", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.4.1", - "undici": "^5.13.0", - "ws": "^8.11.0" - } + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==", + "dev": true }, "dotenv": { "version": "16.0.2", @@ -2974,11 +2608,6 @@ "vary": "~1.1.2" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, "fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -2988,16 +2617,6 @@ "web-streams-polyfill": "^3.0.3" } }, - "file-type": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.0.0.tgz", - "integrity": "sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==", - "requires": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3123,11 +2742,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, "immutable": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", @@ -3185,16 +2799,6 @@ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, "magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", @@ -3334,11 +2938,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3421,26 +3020,6 @@ } } }, - "readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "requires": { - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3564,15 +3143,6 @@ } } }, - "strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - } - }, "svelte": { "version": "3.55.1", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", @@ -3600,25 +3170,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - } - }, - "ts-mixer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", - "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -3638,14 +3189,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" }, - "undici": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz", - "integrity": "sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==", - "requires": { - "busboy": "^1.6.0" - } - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -3690,12 +3233,6 @@ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "requires": {} - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 1f7599d..714b036 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,9 @@ "body-parser": "^1.20.0", "bytes": "^3.1.2", "cookie-parser": "^1.4.6", - "discord.js": "^14.7.1", "dotenv": "^16.0.2", "express": "^4.18.1", + "form-data": "^4.0.0", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 69a154b..ceee7bf 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -1,6 +1,7 @@ import { REST } from "./DiscordRequests" import type { APIMessage } from "discord-api-types/v10" -import { FormData } from "node-fetch" +import FormData from "form-data" +import { Readable } from "node:stream" const EXPIRE_AFTER = 20 * 60 * 1000 const DISCORD_EPOCH = 1420070400000 @@ -69,12 +70,18 @@ export class Client { } - async sendMessageChunk(formData: FormData) { - let returned = await this.rest.fetch(`/channels/${this.targetChannel}/messages`, { - method: "POST", - body: formData + async send(chunks: (Readable|Buffer)[]) { + // make formdata + let fd = new FormData() + chunks.forEach((v,x) => { + fd.append(`files[${x}]`, v, { filename: Math.random().toString().slice(2) }) }) - return (await returned.json() as { id: string }).id + let returned = await this.rest.fetch(`/channels/${this.targetChannel}/messages`, { + method: "POST", + body: fd + }) + + return (await returned.json() as APIMessage) } } \ No newline at end of file diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 243fb2e..760a475 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -1,5 +1,3 @@ -import axios from "axios" -import Discord, { Client, Message, TextBasedChannel, IntentsBitField } from "discord.js" import { readFile, writeFile } from "node:fs/promises" import { Readable } from "node:stream" import crypto from "node:crypto" @@ -88,36 +86,12 @@ async function pushWebStream(stream: Readable, webStream: ReadableStream) { export default class Files { config: Configuration - client: Client api: API files: { [key: string]: FilePointer } = {} - uploadChannel?: TextBasedChannel constructor(config: Configuration) { this.config = config this.api = new API(process.env.TOKEN!, config.targetChannel) - this.client = new Client({ - intents: [ - IntentsBitField.Flags.GuildMessages, - IntentsBitField.Flags.MessageContent, - ], - rest: { timeout: config.requestTimeout }, - }) - - - this.client.on("ready", () => { - console.log("Discord OK!") - - this.client.guilds.fetch(config.targetGuild).then((g) => { - g.channels.fetch(config.targetChannel).then((a) => { - if (a?.isTextBased()) { - this.uploadChannel = a - } - }) - }) - }) - - this.client.login(process.env.TOKEN) readFile(process.cwd() + "/.data/files.json") .then((buf) => { @@ -136,11 +110,6 @@ export default class Files { metadata: FileUploadSettings, buffer: Buffer ): Promise { - if (!this.uploadChannel) - throw { - status: 503, - message: "server is not ready - please try again later", - } if (!metadata.filename || !metadata.mime) throw { status: 400, message: "missing filename/mime" } @@ -214,29 +183,18 @@ export default class Files { } // begin uploading - let uploadTmplt: Discord.AttachmentBuilder[] = toUpload.map((e) => { - return new Discord.AttachmentBuilder(e).setName( - Math.random().toString().slice(2) - ) - }) let uploadGroups = [] - for (let i = 0; i < Math.ceil(uploadTmplt.length / 10); i++) { - uploadGroups.push(uploadTmplt.slice(i * 10, (i + 1) * 10)) + for (let i = 0; i < Math.ceil(toUpload.length / 10); i++) { + uploadGroups.push(toUpload.slice(i * 10, (i + 1) * 10)) } let msgIds = [] for (const uploadGroup of uploadGroups) { - let message = await this.uploadChannel - .send({ - files: uploadGroup, - }) - .catch((e) => { - console.error(e) - }) + let message = await this.api.send(uploadGroup) - if (message && message instanceof Message) { + if (message) { msgIds.push(message.id) } else { if (!existingFile) delete this.files[uploadId] From c57f4ed69254aabc9038b9b28caa68cf576752b0 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 6 Dec 2023 20:57:31 +0000 Subject: [PATCH 052/173] start work on writeFileStream --- src/server/lib/files.ts | 48 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 760a475..e28b03e 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -1,5 +1,5 @@ import { readFile, writeFile } from "node:fs/promises" -import { Readable } from "node:stream" +import { Readable, Writable } from "node:stream" import crypto from "node:crypto" import { files } from "./accounts" import { Client as API } from "./DiscordAPI" @@ -31,6 +31,17 @@ export function generateFileId(length: number = 5) { return fid } +/** + * @description Assert multiple conditions... this exists out of pure laziness + * @param conditions + */ + +function multiAssert(conditions: Map) { + conditions.forEach((err, cond) => { + if (cond) throw err + }) +} + export type FileUploadSettings = Partial> & Pick & { uploadId?: string } @@ -100,6 +111,41 @@ export default class Files { .catch(console.error) } + async writeFileStream(metadata: FileUploadSettings) { + + let uploadId = (metadata.uploadId || generateFileId()).toString() + + multiAssert( + new Map() + .set(!metadata.filename, {status: 400, message: "missing filename"}) + .set(metadata.filename.length > 128, {status: 400, message: "filename too long"}) + .set(!metadata.mime, {status: 400, message: "missing mime type"}) + .set(metadata.mime.length > 128, {status: 400, message: "mime type too long"}) + .set( + uploadId.match(id_check_regex)?.[0] != uploadId + || uploadId.length > this.config.maxUploadIdLength, + { status: 400, message: "invalid file ID" } + ) + .set( + this.files[uploadId] && + (metadata.owner + ? this.files[uploadId].owner != metadata.owner + : true), + { status: 403, message: "you don't own this file" } + ) + .set( + this.files[uploadId]?.reserved, + { + status: 400, + message: "already uploading this file. if your file is stuck in this state, contact an administrator" + } + ) + ) + + + + } + /** * @description Uploads a new file * @param metadata Settings for your new upload From 79ecb5e4083a7ea31dc14f7e943417e49e4998f3 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 11 Dec 2023 19:53:11 +0000 Subject: [PATCH 053/173] whatever i'm making rin is terrible --- src/server/lib/files.ts | 95 +++++++++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 28 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index e28b03e..a12fc57 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -95,6 +95,11 @@ async function pushWebStream(stream: Readable, webStream: ReadableStream) { return last } +interface UploadStream { + uploaded: number // number of bytes uploaded + stream : Readable +} + export default class Files { config: Configuration api: API @@ -111,38 +116,72 @@ export default class Files { .catch(console.error) } - async writeFileStream(metadata: FileUploadSettings) { + /** + * @description Start a new message. + * @param streamCount Number of files to upload. + */ + private startMessage(streamCount: number): UploadStream[] { + + let streams = [] + + // can't think of a better way to do + for (let i = 0; i < streamCount; i++) { + streams.push({ + uploaded: 0, + stream: new Readable() + }) + } + + this.api.send(streams.map(e =< e.stream)); + + return streams + + } + + writeFileStream(metadata: FileUploadSettings & { size: number }) { let uploadId = (metadata.uploadId || generateFileId()).toString() + let processor = new Promise((resolve, reject) => { + + multiAssert( + new Map() + .set(!metadata.filename, {status: 400, message: "missing filename"}) + .set(metadata.filename.length > 128, {status: 400, message: "filename too long"}) + .set(!metadata.mime, {status: 400, message: "missing mime type"}) + .set(metadata.mime.length > 128, {status: 400, message: "mime type too long"}) + .set( + uploadId.match(id_check_regex)?.[0] != uploadId + || uploadId.length > this.config.maxUploadIdLength, + { status: 400, message: "invalid file ID" } + ) + .set( + this.files[uploadId] && + (metadata.owner + ? this.files[uploadId].owner != metadata.owner + : true), + { status: 403, message: "you don't own this file" } + ) + .set( + this.files[uploadId]?.reserved, + { + status: 400, + message: "already uploading this file. if your file is stuck in this state, contact an administrator" + } + ) + ) - multiAssert( - new Map() - .set(!metadata.filename, {status: 400, message: "missing filename"}) - .set(metadata.filename.length > 128, {status: 400, message: "filename too long"}) - .set(!metadata.mime, {status: 400, message: "missing mime type"}) - .set(metadata.mime.length > 128, {status: 400, message: "mime type too long"}) - .set( - uploadId.match(id_check_regex)?.[0] != uploadId - || uploadId.length > this.config.maxUploadIdLength, - { status: 400, message: "invalid file ID" } - ) - .set( - this.files[uploadId] && - (metadata.owner - ? this.files[uploadId].owner != metadata.owner - : true), - { status: 403, message: "you don't own this file" } - ) - .set( - this.files[uploadId]?.reserved, - { - status: 400, - message: "already uploading this file. if your file is stuck in this state, contact an administrator" - } - ) - ) + }) - + return { + stream: new Writable({ + write(data: any) { + + + + } + }), + processor + } } From 3de215ee35a4a302375e28496ae36863b7435457 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:15:05 -0800 Subject: [PATCH 054/173] Working on it... --- src/server/lib/files.ts | 76 ++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 27 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index a12fc57..282fe40 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -95,9 +95,53 @@ async function pushWebStream(stream: Readable, webStream: ReadableStream) { return last } -interface UploadStream { - uploaded: number // number of bytes uploaded - stream : Readable +namespace StreamHelpers { + + interface UploadStream { + uploaded: number // number of bytes uploaded + stream : Readable + } + + class StreamBuffer { + + readonly targetSize: number + filled: number = 0 + buffer: UploadStream[] = [] + + api: API + + constructor( api: API, targetSize: number ) { + this.api = api + this.targetSize = targetSize + } + + private startMessage(streamCount: number): UploadStream[] { + + let streams = [] + + // can't think of a better way to do + for (let i = 0; i < streamCount; i++) { + streams.push({ + uploaded: 0, + stream: new Readable() + }) + } + + this.api.send(streams.map(e => e.stream)); + + return streams + + } + + async getNextStream() { + if (this.buffer[0]) return this.buffer[0] + else { + // startmessage.... idk + } + } + + } + } export default class Files { @@ -116,28 +160,6 @@ export default class Files { .catch(console.error) } - /** - * @description Start a new message. - * @param streamCount Number of files to upload. - */ - private startMessage(streamCount: number): UploadStream[] { - - let streams = [] - - // can't think of a better way to do - for (let i = 0; i < streamCount; i++) { - streams.push({ - uploaded: 0, - stream: new Readable() - }) - } - - this.api.send(streams.map(e =< e.stream)); - - return streams - - } - writeFileStream(metadata: FileUploadSettings & { size: number }) { let uploadId = (metadata.uploadId || generateFileId()).toString() @@ -168,7 +190,7 @@ export default class Files { message: "already uploading this file. if your file is stuck in this state, contact an administrator" } ) - ) + ) }) @@ -176,7 +198,7 @@ export default class Files { stream: new Writable({ write(data: any) { - + } }), From 5fd60735031cf398508f19eafb2095ac438ee860 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 15 Dec 2023 17:34:32 +0000 Subject: [PATCH 055/173] ok i'll need to figure more out later --- src/server/lib/files.ts | 113 +++++++++++++++++++++++++--------------- 1 file changed, 70 insertions(+), 43 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 282fe40..56cc9b8 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -36,10 +36,10 @@ export function generateFileId(length: number = 5) { * @param conditions */ -function multiAssert(conditions: Map) { - conditions.forEach((err, cond) => { - if (cond) throw err - }) +function multiAssert(conditions: Map) { + for (let [cond, err] of conditions.entries()) { + if (cond) return err + } } export type FileUploadSettings = Partial> & @@ -97,12 +97,12 @@ async function pushWebStream(stream: Readable, webStream: ReadableStream) { namespace StreamHelpers { - interface UploadStream { + export interface UploadStream { uploaded: number // number of bytes uploaded stream : Readable } - class StreamBuffer { + export class StreamBuffer { readonly targetSize: number filled: number = 0 @@ -160,50 +160,77 @@ export default class Files { .catch(console.error) } + validateUpload(metadata: FileUploadSettings & { size : number, uploadId: string }) { + return multiAssert( + new Map() + .set(!metadata.filename, {status: 400, message: "missing filename"}) + .set(metadata.filename.length > 128, {status: 400, message: "filename too long"}) + .set(!metadata.mime, {status: 400, message: "missing mime type"}) + .set(metadata.mime.length > 128, {status: 400, message: "mime type too long"}) + .set( + metadata.uploadId.match(id_check_regex)?.[0] != metadata.uploadId + || metadata.uploadId.length > this.config.maxUploadIdLength, + { status: 400, message: "invalid file ID" } + ) + .set( + this.files[metadata.uploadId] && + (metadata.owner + ? this.files[metadata.uploadId].owner != metadata.owner + : true), + { status: 403, message: "you don't own this file" } + ) + .set( + this.files[metadata.uploadId]?.reserved, + { + status: 400, + message: "already uploading this file. if your file is stuck in this state, contact an administrator" + } + ) + ) + } + writeFileStream(metadata: FileUploadSettings & { size: number }) { let uploadId = (metadata.uploadId || generateFileId()).toString() - let processor = new Promise((resolve, reject) => { - - multiAssert( - new Map() - .set(!metadata.filename, {status: 400, message: "missing filename"}) - .set(metadata.filename.length > 128, {status: 400, message: "filename too long"}) - .set(!metadata.mime, {status: 400, message: "missing mime type"}) - .set(metadata.mime.length > 128, {status: 400, message: "mime type too long"}) - .set( - uploadId.match(id_check_regex)?.[0] != uploadId - || uploadId.length > this.config.maxUploadIdLength, - { status: 400, message: "invalid file ID" } + + let validation = this.validateUpload( + {...metadata, uploadId} + ) + if (validation) return validation + + let buf = new StreamHelpers.StreamBuffer(this.api, metadata.size) + let fs_obj = this + + return new Writable({ + async write(data: Buffer) { + let positionInBuf = 0 + while (positionInBuf < data.byteLength) { + let ns = (await buf.getNextStream()) + if (!ns) { + this.destroy() + return + } + + let bytesToPush = Math.min( + data.byteLength, + fs_obj.config.maxDiscordFileSize-ns.uploaded ) - .set( - this.files[uploadId] && - (metadata.owner - ? this.files[uploadId].owner != metadata.owner - : true), - { status: 403, message: "you don't own this file" } - ) - .set( - this.files[uploadId]?.reserved, - { - status: 400, - message: "already uploading this file. if your file is stuck in this state, contact an administrator" - } - ) - ) - - }) - - return { - stream: new Writable({ - write(data: any) { - + ns.stream.push(data.subarray(positionInBuf, positionInBuf + bytesToPush)) + ns.uploaded += bytesToPush + buf.filled += bytesToPush + positionInBuf += bytesToPush + if (ns.uploaded == fs_obj.config.maxDiscordFileSize) + buf.buffer.splice(0, 1) + + if (buf.filled == buf.targetSize) { + this.destroy() + return + } } - }), - processor - } + } + }) } From c5040e1b79c986daafb3ee019a97f4cfd7a3bd4b Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 15 Dec 2023 19:08:42 +0000 Subject: [PATCH 056/173] hwo tf am i gonna add backpressure to this i just realized --- src/server/lib/files.ts | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 56cc9b8..d267241 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -107,6 +107,9 @@ namespace StreamHelpers { readonly targetSize: number filled: number = 0 buffer: UploadStream[] = [] + messages: string[] = [] + + private newmessage_debounce : boolean = true api: API @@ -115,7 +118,10 @@ namespace StreamHelpers { this.targetSize = targetSize } - private startMessage(streamCount: number): UploadStream[] { + private async startMessage(streamCount: number): Promise { + + if (!this.newmessage_debounce) return + this.newmessage_debounce = false let streams = [] @@ -123,11 +129,13 @@ namespace StreamHelpers { for (let i = 0; i < streamCount; i++) { streams.push({ uploaded: 0, - stream: new Readable() + stream: new Readable({}) }) } - this.api.send(streams.map(e => e.stream)); + let message = await this.api.send(streams.map(e => e.stream)); + this.messages.push(message.id) + this.newmessage_debounce = true return streams @@ -205,9 +213,12 @@ export default class Files { async write(data: Buffer) { let positionInBuf = 0 while (positionInBuf < data.byteLength) { - let ns = (await buf.getNextStream()) - if (!ns) { - this.destroy() + let ns = (await buf.getNextStream().catch(e => { + + return e + })) + if (!ns || ns instanceof Error) { + this.destroy(ns) return } @@ -222,7 +233,7 @@ export default class Files { positionInBuf += bytesToPush if (ns.uploaded == fs_obj.config.maxDiscordFileSize) - buf.buffer.splice(0, 1) + buf.buffer.splice(0, 1)[0]?.stream.destroy() if (buf.filled == buf.targetSize) { this.destroy() From 37216c8166ed47723897894d7a121ac29b12a559 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 22 Dec 2023 22:03:01 -0800 Subject: [PATCH 057/173] todo another rework of readfilestream yay --- src/server/lib/files.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index d267241..a9e085d 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -79,13 +79,13 @@ export interface StatusCodeError { message: string } -// this is probably really stupid. I'm sorry! - -type ResolveType> = T extends Promise ? U: never; +/** + * @description This function does not respect backpressure and should be worked out of the codebase. Superseded by startPushingWebStream() + */ async function pushWebStream(stream: Readable, webStream: ReadableStream) { const reader = await webStream.getReader() - let result: ResolveType> = { done: false, value: undefined } + let result: Awaited> = { done: false, value: undefined } let last = true while ( !result.done ) { @@ -95,6 +95,24 @@ async function pushWebStream(stream: Readable, webStream: ReadableStream) { return last } +async function startPushingWebStream(stream: Readable, webStream: ReadableStream) { + const reader = await webStream.getReader() + let pushing = false // acts as a debounce just in case + // (words of a girl paranoid from writing readfilestream) + + return function() { + if (pushing) return + pushing = true + + return reader.read().then(result => { + if (result.value) + stream.push(result.value) + pushing = false + return result.done + }) + } +} + namespace StreamHelpers { export interface UploadStream { From 7d18a6058930179c63a55989e83b48cd6ecaaf67 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 23 Dec 2023 08:01:03 -0800 Subject: [PATCH 058/173] OOPS --- src/server/lib/files.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index a9e085d..4d4c171 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -80,7 +80,7 @@ export interface StatusCodeError { } /** - * @description This function does not respect backpressure and should be worked out of the codebase. Superseded by startPushingWebStream() + * @deprecated This function does not respect backpressure and should be worked out of the codebase. Superseded by startPushingWebStream() */ async function pushWebStream(stream: Readable, webStream: ReadableStream) { From fd8e143e3b6178b79c921d33b4b70f75363e10e2 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 23 Dec 2023 15:10:55 -0800 Subject: [PATCH 059/173] readFileStream now respects backpressure more --- src/server/lib/files.ts | 72 ++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 4d4c171..48107a7 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -106,9 +106,8 @@ async function startPushingWebStream(stream: Readable, webStream: ReadableStream return reader.read().then(result => { if (result.value) - stream.push(result.value) - pushing = false - return result.done + pushing = false + return {readyForMore: result.value ? stream.push(result.value) : false, streamDone: result.done } }) } } @@ -544,7 +543,7 @@ export default class Files { let d = await fetch(scanning_chunk.url, {headers}) .catch((e: Error) => { console.error(e) - return {body: "__ERR"} + return {body: e} }) position++ @@ -552,35 +551,50 @@ export default class Files { return d.body } - let ord: number[] = [] - // hopefully this regulates it? - let lastChunkSent = true + let currentPusher : (() => Promise<{readyForMore: boolean, streamDone: boolean }> | undefined) | undefined + let busy = false + + let pushWS : (stream: Readable) => Promise = async (stream: Readable) => { + + // uh oh, we don't have a currentPusher + // let's make one then + if (!currentPusher) { + let next = await getNextChunk() + if (next && !(next instanceof Error)) + // okay, so we have a new chunk + // let's generate a new currentPusher + currentPusher = await startPushingWebStream(stream, next) + else { + // oops, look like there's an error + // or the stream has ended. + // let's destroy the stream + stream.destroy(next || undefined) + return + } + } + + let result = await currentPusher() + + if (result?.streamDone) currentPusher = undefined; + return result?.readyForMore + + } let dataStream = new Readable({ - read() { - if (!lastChunkSent) return - lastChunkSent = false - getNextChunk().then(async (nextChunk) => { - if (typeof nextChunk == "string") { - this.destroy(new Error("file read error")) - return - } + async read() { - if (!nextChunk) return // EOF + if (busy) return + busy = true + let readyForMore = true - let response = await pushWebStream(this, nextChunk) - - - while (response) { - let nextChunk = await getNextChunk() - // idk why this line was below but i moved it on top - // hopefully it wasn't for some other weird reason - if (!nextChunk || typeof nextChunk == "string") return - response = await pushWebStream(this, nextChunk) - } - lastChunkSent = true - }) - }, + while (readyForMore) { + let result = await pushWS(this) + if (result === undefined) return // stream has been destroyed. nothing left to do... + readyForMore = result + } + busy = false + + } }) return dataStream From 033295ce5809773b4437de5abb1246be4dec5ee8 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 23 Dec 2023 15:15:52 -0800 Subject: [PATCH 060/173] remove deprecated function --- src/server/lib/files.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 48107a7..7773a1f 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -79,22 +79,6 @@ export interface StatusCodeError { message: string } -/** - * @deprecated This function does not respect backpressure and should be worked out of the codebase. Superseded by startPushingWebStream() - */ - -async function pushWebStream(stream: Readable, webStream: ReadableStream) { - const reader = await webStream.getReader() - let result: Awaited> = { done: false, value: undefined } - let last = true - - while ( !result.done ) { - result = await reader.read() - last = stream.push(result.value) - } - return last -} - async function startPushingWebStream(stream: Readable, webStream: ReadableStream) { const reader = await webStream.getReader() let pushing = false // acts as a debounce just in case From 4c77605b98bcb9bf74979efbc771e3cb11add73b Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 25 Dec 2023 16:25:45 -0800 Subject: [PATCH 061/173] I have no idea if this works lol --- src/server/lib/files.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 7773a1f..72a3fbf 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -109,6 +109,7 @@ namespace StreamHelpers { filled: number = 0 buffer: UploadStream[] = [] messages: string[] = [] + writable?: Writable private newmessage_debounce : boolean = true @@ -125,12 +126,17 @@ namespace StreamHelpers { this.newmessage_debounce = false let streams = [] + let sbuf = this // can't think of a better way to do for (let i = 0; i < streamCount; i++) { streams.push({ uploaded: 0, - stream: new Readable({}) + stream: new Readable({ + read() { + sbuf.writable!.emit("drain"); + } + }) }) } @@ -146,6 +152,8 @@ namespace StreamHelpers { if (this.buffer[0]) return this.buffer[0] else { // startmessage.... idk + await this.startMessage(0); + return this.buffer[0] } } @@ -210,14 +218,14 @@ export default class Files { let buf = new StreamHelpers.StreamBuffer(this.api, metadata.size) let fs_obj = this - return new Writable({ + let wt = new Writable({ async write(data: Buffer) { let positionInBuf = 0 while (positionInBuf < data.byteLength) { let ns = (await buf.getNextStream().catch(e => { return e - })) + })) as Error | undefined | StreamHelpers.UploadStream if (!ns || ns instanceof Error) { this.destroy(ns) return @@ -241,9 +249,14 @@ export default class Files { return } } + return false } }) + buf.writable = wt; + + return wt + } /** From 1b31ba89d33e14f9d36577bd28d0b140740eb0d0 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 25 Dec 2023 16:39:21 -0800 Subject: [PATCH 062/173] add MOLLER method --- assets/banner.pdn | Bin 659394 -> 0 bytes assets/banner.png | Bin 458340 -> 0 bytes assets/monofileLogo.pdn | 208 ---------------------------------------- assets/monofileLogo.png | Bin 220957 -> 0 bytes src/server/index.ts | 12 +++ 5 files changed, 12 insertions(+), 208 deletions(-) delete mode 100644 assets/banner.pdn delete mode 100644 assets/banner.png delete mode 100644 assets/monofileLogo.pdn delete mode 100644 assets/monofileLogo.png diff --git a/assets/banner.pdn b/assets/banner.pdn deleted file mode 100644 index 6102ed95a86d415422c7cb2254d07cd1cfac3232..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659394 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

XWRlLh@5eGSI`{nSYor9O`tn# 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≻i=0SKR>dUlR6coMumo9{}pAOJZAz##~E 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

w^7C)O#} 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ΜpT*|cbc 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%0AGp8J$pq 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 diff --git a/assets/banner.png b/assets/banner.png deleted file mode 100644 index c9b2941f6d68c661e9caeef3cae892b44e3962ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458340 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%0D{IUc$gpsIQvXCWfpQ#30@(y0S$ho#fh8{Ax$B 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
JBALkOC5eBLL`^k#65&%d!SM8l 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%0Al_&S$j3Qp; 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

(j8U}#r%f@oN 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�OW2)6o*TJF=Ysan z2PGh+E~qN>D=Mj7QeEGRVO!E8EIiPQVL0%@ESz~KYbF3}&cJkcxpM%+i&?`!G%v5H zqZ~VrizcYGE&Nsj>2y0h*PCA=VeLb1vHUBaAj}s5Gy9p3?w^;Vi9pVgMCx*P;HI#}ad3{wQrXCSG?0qWO!hUi0PCTJ zsVip+=nkB2wA|)w&kdAAkMmz2u$w(4)~@)|!5E2Qcw(~JMSgMr8*=Xs-7{8vebg^* zjTZPCpTVzH9(qnDSkhS7+f*FWJOp8Htd2gZH+V3-sy4T2Hp~av`9Yt0G zFo>GDw?@B|TiS+pE=3<`ffqa)V7{v-fOndm=n!MW1a?e2-&|Y8o*oElF#-m|d9a-; zJvVD{w?xr|d3UFwo4j0lI7ZzyXn;n=n6>Ainj&|BsaSeVB`{8XW#N}ZDrNpvkoaID z5S$A-z`k-+u1$5gtk*G#^+X*$5z0f9B>*5qk*Lg`-?xt&@DA!A-Zw%fIo&1&nh%n3 znvPEf8yvn0vM9Dsvz77Qy5xbk_=FtIU0TS=d=! z-0h}o5{j1qNw9(6S#uzO5>-;xlVwX~eN))q;q!>vUF+R7=fgYhq?9nSX|j}y!Q!%+ z3B7FN#d7hW&)FB|E?3ULS3+Y@eq^5*;>m>^tO!86Nq9vrMW0!WI|&LpGTl&%eepL5!@^8^roG%f0xwA3UE#yB;zQ*lo$^+2A=Infgomm8 zZY9QTEDN6kKE0?1T-d4%7k#BkVcHdVTZiNJs!Uqlt4`Zui8vyh*QXh*`EA52g0@e# zQ|a0i2N<~Es2x*x&e_s~%7ZpNz6ak@<^VXFaX6D3H2qfgZuo z)K^uUOJI8MeaR&?XCle+c~yN*c1M1AHRa|jx#g0+bNlA5yJREbGWQWJKvi7{h(9S8>ueF~JS&a`3%p_y2?HRg8%$X=W;jvq0D%a|0l z$I{q{ACNoJ64jY=3c$(xqL5&+#Apourxp<;WOzT5WvmGiU}B&| zD8S5$XQx*oDwat1zuR&wy(WJ-$4n6rUU@Hk&r+)M^!ooglp#QvvcA9d}4fyUgD7Ov3M zEc(4g3$FFE zppd64<=oV+O$=O%df;nOGhu;Oey)%If!lQC580 zY32xs$>_6cn-838X5$Mo!r%{cua2ICde#iHks!PrK%lRXPL&Nl%ksR6qqVvT)2ep& z^bDy7pu@95Oos0EG(d9Ich~7$bJ7x{kuQCMcBXr5@7M;M{oqPE9SU`j8i|r)@!P<; zS`T-ar4x)#Z>#tE4!_hA9I-UeWqCkb7aPmK+ed3WS==3)34_;XGxuI$t{gBd&#Q+& zn*e|8N`_q&K>Ym+zF65Z;4<|yH8(%zOjH3$vwWheT+iAP9W9ZKp#d?>n6eUCHX>t8 zA!dyl{~Ta#$l%QmzOfME1`F#iJ6VGMv>n%KLx&zh=2-#~0wmv_PuLm2UrRIHZ0|K{ z;CEh5E_iW=r$N>|1uAotXrG0AYJ{VJahcKxhX{(=14dbQ55J`(OArJ`qH(&w~p1L+KCj#y^hfO)TjN>Hdb+;gxm z8glB8<@a9g1WN)A*OPY>iLZfM*SEU!Vs%~Y-@FIuH%j?*1K`l>B!{=w93M5G8s}QD zKi(n)k5#7QJ?{8$&gM3=5?}}{xJ{SD^dIahmcE0O9RhUmf(eQKP$n+NBvGu1ATTCH z_tEh0Ey#b@qcmg+sh3?{_UH%`Og$wVdF?cE`{ksSey|sri_u@SLXka^Sh+wUpn{bf z&j*jl_V|(l`6hyp8O-dU9HZ*KeMJiCAWM zoy-ezp>wr_lsy^Jp)}{V7rT5-;VrrmWA~3pUH{_E>`3w~N9bnYp)KxmX4ACHuEsd^ zkn9b`?}=Jw9Z-@@m}_EShBimNQwtQ~omoJgHQlsqg{`QL#m7*w1GgqXl| ztVYo1n~T#tEHG#AZRFml94X>nZeC7LUbrASNL&w3i+}gajM;1=O^>3ck$_a!aHorS zF~PO@t^f~F=c>plK4H&jfOP%P#Df)iOh20p$IOf}U3tn!GnbIp;g8;h+|6&$bfjlP zK4vzD zZadi_PJG%Dh0x*r?;Fzvw6yQVHjfn0{MQf<gNzAkJN)& zm+K0jxe^J$#n0St%LvdC^znH}f?64kh)6bVJ|0aj=RQ#JGO*k^?4)Ev9=2n$E$Byq znZ$zl*Q1CHwA)L|(7WNp640^9G8B27(9;6OgjS`{kH^S}*^q;|E8;LV@4ToLAMOEm zxRn~iqELU&s{Xf&!2vtn}7;J*_sxz>8U6R`@$ft;*al0o7ZwCNYyb(9=<*DK&pc?+F zXy;Ss!G^~y#UN6}+06K*5QtyrMkeDQ>U8@X8y!&}sZ1P?j7I1Ls^Z|M87Grmx}X&` zb_njCQcSgA1nvf6-t0hPlmU4T0zc`Iua};t>fXR?U?-qUsLu`eH>;PxH8P2m^APoy zTO2N>HQez_=%PAloraCj$#Cw+7Oi-STrKWEcy}~ak-GQA>yDv zOeaXb!C81_D6?tGf4rnh$|5y#KhqwNk^RxIJ)rINJv`sW5Sv24nl27%vn8CM^G{A) zgvHFoJ(XL12Zw7;&K$*pAb@2U{!M;w& zu*Q6mP*(vCf>EZfqFKpoZU_i?IDP)8c3%kP#1WT5n`c#?7%YDPb%M=RhJJS%G4O}0 zK`p&A??sLu8jD93P^C3f`Br4;@tX92|8sKxbAt6Th5EHMX&bz|*m1N4=h~)Y3k6pQ zjb%+t!P6CFyP}Ly&|PmMsR_B=6bqT<-Nj@Nk9U?HtevtD!wHH)sDylH=Znw~b4d$1 zB#fL(p;DJ2E`4YsHsBMWx!kg+E`X*jV#7FnXK?mHRO>jAq;3JpL3Q35ZhhyUYe2qv zJ)UNxT947^S{(``u4QnigS~R1;{t+y5|{=kogFSM)Pc@s_&A0OeT$eBn?*on=LQc@ zRwB&Y#}Z1G!R2ORJtq>A#vVrEi^8tHx7^|E9J@mm&`hnr#tk zWD;RYry8nwTxg`Cj0OeGxg-gv%}a`bO{K#ofzD@xf$d1%QWl$QPHuONW6^>JmF}<3 zrs!IuIMVSLGfN3~d9prKi5mjbm!|u}F_pF+(?k`=W&WE0r3>nrsZ;W+%Ya*x#XeV8 zZEnIg^!23NhAe6ZF|UX)(!l7yeLrMxUx9Gxc=q#wELR0UZYXVMEXkZu>>=ckpyf71&P zNQ;4g9bU%rpS}51YR%6xqBFjl=it2sHCQznHRwI^Vcc}xVu(Wa6D!ku7WJ*q&bxo~)zCDinwnyy8d)92Cf=+#%&B)LNGk%b|V&8QujoP zHB5)jT7t_mC279c3=rRb!V=9UIo-X2JH57ts4`HWbzBsRl+uIU4Bnh=woAd5Jv|Eg zd~MVfNrXfsx+l<8%QQS_PVKV=&N=Hytl+G;02l;4f}L|LhOx%tA-b|Xu9cg4X&8Pa zW{KlxVMk!A+nWlUHHe7T2}+KsbkQxMhG&NC1A37 zCUJSQHEd(*!#G6Otig=v9B3zk`O(l}hy|9S<_E3YbGNaREq} z@h0m}#c)Bla6ZEi%OMxz@%#_UKX;egD4MIzw5PAT-yQ63yE_OA`v7j9 zB|;1#?}ui&W~0)|yMcG}3J&yuI~0=BBljS{*C6=j7I+L722ad8o4`Y1H<&4)!=G|#gJ|@EG__(LO$`4N%_dJ#ZjD)6=ZPtIrRY|&NKy` z0&fIuoO&p}vDZz|Lm5iX1`en@nYa#wa0Guyx|O*R?3lR+i*@%RdzlO*ZpyW3=l-YDZ%u)xY;lL$dHe$@#hwv1g*co^{!WYnwuW%!K>HU{Ih z?#j?AD6uK`@z9(N3kbZ-ji&2#tyk?iO{N92Cj4(mFg$r>*u7@V`v*8MT({W^u#F;g z7+(XMIaJ)b>mrC<*b&wRH@Ww!Kzs{+-=q^zWW?5O&|<;#8e1uTypYWHxt|8HrjhQ@ zC13EB7>i$|%TFaH_@NG=aDz~t%pa_rne|dgA0vSzqK#A$O^?3_!bQRIV*GO1S9R~Y zl^g};7Q(`5M>#LfXIQQ5!{wmw9wADYbK0p7hlGn;}+{VL|bINO!y1iZs+&6ANWbrC=1V<>!fCQU#TR{phmom7wgL*HXth z7aa>HIY)$VZ93^ARdOgPvsG*h(CeN6rc#ay9>Y1{4wgd_!#Jx}Aq+XE{B4fGtaN>U z!Uw3Rzc((OJJjA!49s)0m_-51INT`kF~UYi7#25A9}{L>E_i>ofj+8>$A~hOKbvR? zbHi=j5pd4_Vul7LG%Z!#G!RUnJ>k_M0uIxHKyqjf7UhSr3xZ^rWAal5?0JXe=QJfF zPI+XgwF%pRif1ZXtHYX?wov-dRFE18dNG>t-4Y442b;8P_rVMw=8CT&frHb${;H!Z zy#5dP9`+Zx;0ZKV@lM%DN4{z<-_Gx4F2a0kEQG&IKR>& z9p*8*lXqX5cZd1_W)<9BDP-sb;ld~Fx(5&@TiL0r;BBtE`3G{gRP{Jza@;;c;_E<~ zNNMlZo&1Da0V0=<`?ZEFIClujk^G1MY42(-Gjd45^Y4Z9Q;$4;L`d)VgE*{$>)o!q zD1ysY7kPq1l34XJ%4wn5t!KhdwbBqEPq?$Z-%MiLx2)5L$UaLQVUv>q!Fx7|E`hVxux~9L$Uav z{Jg{kpO{Z+^wdpMVSo`oFCvQ=W%*wp6Sv@Vm?2Y~o9zF#1C#*Ir$I5Li!RP< zjRH^92Dne4#I7^}mI&9SC^I~VB4I<=lG}OCyNAP|n&*;mH=`1O5h7Hsi!n~q!(N53 zU$R&H10EtUwuE|TF$vxjmdD;D#Xg=KtM0;{_cRE5o~TdvN4y0nYY7}s0pWp}#~KzO ziw>g-;cYeH5hnHjob(`F3;*!?QHQnGK(CH$K+PAiQ5^U-&xhNEDsDl}8K#=SFzeDE z10qx#@7o7dn7R~m6MzB+5hq@eVR)XDyewRs0b_gMs3kN{y_VqqHE6RDR2x;&8d{J% zLQ)w7jE0jZFn4n#bk)5FH8~bplt~+oWDcztQkQdN>(a$8MtgISGG_`_}{PB$QMBBb6` z$~y>psU{e3ndpb1!e#GN+?Y))Wr?&S?;m#DXf=iQKH(Dv%keR`Zu6`y_4_r5sC_PZ zi?vrGJd9=1aA1K;zPA9~!!Ei1)yt zCbu%YbKo3|QJ+0^8(bRU)y^}F_g`EalyUNYJ9*d-TSYu%RY(++-I8a&q}39%hF=kfng2R%gw6ES$& zK7%r}WU>yO4xuL%pDBffWWie7#mF!x8X6ze&c)2U#AlXN&(X`MtS8WAJUE#XN40vzLrJJ~n&Dl1)!O=9Agjdl8r@q@L{11?5 z`cD9(Tn9FX1Ka7>mFmvHDmSU={lIKp*BZf9k1OEM%B42@r z-dKTypglwnn4JBWVb#3??D_Y(3I|G1ve*xJl0xqT=P|xQd~{rK$k`cxQ>F_9Bt%Os z-)lmFGfbSK$sFy*u7;EAIEdLQbCyh3==VA6@+U0X>N}=zXVQ>SVxUK}>}X~JK31k` zQQnaEbDut;Auc?!Yj{5-=>IOkZ9*ndld6817wfxev=P7{RcRIk$H#e0h~(hjGX)r` zktuAA*=T^(NYZJLOiq`F>=8?*n&n`NW@+z@{ed^ymn!JM^3`K*J3PSe(=%P#u?UP{ zN1u6}qv17RmG~8luqtqUoZ>KxV1?Nz;nX5joZD7}v>+r`EIncLL$96T{nJulqv)&h zzNn=y+ftd`7~Q;PpV$-Ip)~;HwdJ-SmOx?`O}=T8nJ(ttIGg!lr|swoda9v6)&IMN z`-Wy*J9R1lZ}qP&8+DsF?GZ0ncI>+W4{wOTy|uwR;1+q=(~7{9W(U7EFm5znrVTP} zDEv&Pp)AGS;LHc|HX!`^O z!7t67x&jJw<)|Kp0SCXni(gL9v%QacwO@@A>5go5G=|Y$$;`KD0jFjy_E`qZp^`eg z!w*0#V_>fzxlL|YcFg0f^O5LEvklVF!|gBtoe@dgMp^1ZoX6t$*@++|3RJl9`w~cS?Z97Cj<*)({x_x>hch?nPG@ZR5RCOXY&f8Nkq-vJ_Gq z^pVZryd%Hw$DXVKdgvsHt3)}T>T#NYpJpXe=2zwIkej2=p;{ybE?u%hA<23FxE+z^ zBHmL$H;5^C7xG{>-G}0Zgq`3zg*J?`Q1%X-8;YAUyk~K_V;kk5HToa?IRmOWMK&|o z?b3bWo9?d?<^tSCSw@~7`a9^h2&Dxm+~~J5NjYeQj01jqvrL_}qGBRJ8}w;gphr<6 zG7^cwCg;zA>q^L6*54*7{0N-PGvs!VX`YcGHRTu%m8k5O?npodF?utU&;F!F4E32JZnaawe>`jm#9cD|bNy>AxG!JU z_89$TlSUqOIPlh_D9w-W&&%1uQ{N#Div83t_(6L3fn_hiVv68%!@sYh4uG12sM6M0 zc|(PNk?@n!aT-cjFc&<)WX$d;fI_+vK&xbgf>nG05%S5p1&RZ8G_T0)#aKiZ6Aw~+ z;i7#B^o(1NPwFg|8v1ZQd`{LN9;Sp@O#RytHiPSxOcxj~0!skvQjuAb`?JYuOx$WSIA!~pJ5~;fhY{-fz~4W z4g@v~7L1?V&3&tl&uKC+FOkk;A^Qb!cHdsr@0b(7Uumzt6F!`qW-_)gD@^4_ zkav^QeuP?33PIpxpu`Yp3J{Y0jEmclUb|J!)qg#FXGo0TUESwW=3l+}RTvIlPxJ{q zuPT2oHRqolV6lqX=y*Rz)Pt#tlhUpWP;(Kxr=hNxV$3|2oH=VrM717*Wli?_h=!Xb z2`=KGBd>dy2h65gp%!Q>qB8-~#*&d9Sl9Glp$qZu89j?E8SrJwbhGWcY78%(yCNe# z!+~*1^*gLy=Z@~A{=eYa`d|U-Y{(X&mi;v>T#W!gA^as*+aLksS&HU^j`1`NghN#yh@N$UXK zV;b!7Y<62x4eylw``fJBZkHlhF4~MC(5JDF2AHOpVzrco=Hzdz7rHoj{`Gi8W=G&i znweY?2;b#5$y-`;JU9lK+hG^uov$mQDt5=y zPxe5Vi-s6)3l8vd-afQEYW&-KFjJ?H`!It{6KZM^RDe2cmJ6NJbov-lKQNC%`v+eSMk7KZD229Codm4VvWr6a1Qn(1`%sgQ{j*`1U8hqGqY}){uNfYAm`fZ8X zJTUJE&_=1hPcphURZFJ1_$QGX)W~b@$*Yrx(eAl1sjl;~3o9;t!h)LS3qJMv-U>N- zBnV?T$axT+NuU6Ri^vs>;lEwpzagZ<>-8$PlGp3o7qm-x;dq|jz}3w<580CnwNaN~1s%-2BVE23JV4EMfNCe52!{Z*YDifKK9ZOL8n|bU zY|G(qCmKQm;9tKW0C14S6Nbh1R%Ldb3%5CBne)#93W$NFvIrhc5gP6!*x zmkILhs3F0F^D1yv%*Llsn{5)CPb;(8-ZN+NSeZQ=SM@09ddKp z0s4Nn4fZ#%6u;vB32;f*-EH*_yu-Wcc(8Ev3#G!k1?0F5#GnDfopVN{*v*%SaOcL5 z`6t;iV?mUM3+rN-$LAuv0ou6RZG77H_ZfFP_Fl1$xvKMT7jC<8F2Qp!SHg)OYN_5r zD6Dgnl+za5GdWLOg6F^A{oZ{*A-GUz#~59znXN0a0yNF)-nznBiHeT7X&QA3FN!pP zk4ytE@f=|h>IQw3VD0o}(E_nQS?6$e<%>D|J1!87R|6Eme{~nIMm)FlYm1daiqZM_ zcRL5?S$ZKa9M+vjNYZqCT@7opKIZ6@2lX^c&<6&Lcx^@%)St}Rkn<3M#BD!5qMo=R zQ8tOy#0Wb{^BP8GFFWLWu-Z@&NAR8~svu{HT1)6MR?`vL7}|aL))L}keGD?{qAk2Wy2#Zg zqdtB@Q9PWGB(p4c4^9!q?2%Z_I%tCCWc7lMm)l0qbwTXETef3dJcZt$>K#ny_3`{Pt)sPmZp5`OARWfvD?9nm z?_)Z-t?muXgTpWiiEqGviZ5~p-gvqA0+3$}*NmR{9N;Yd+hGcgq&mkCxU40VfokS@ zp5?XX04)=-&BW4-{1J9ya%(2>_J*!RllyT^d@uB#lDIFVzy!7dQ+r|X^Kj6{#;^;% zUZgg=nJj$7A2m&Ir^1{OiDnHbp|9csz$AWvmxDYuJ%1=%Yv~#_1C?u#%3uPj zF18B(t8pl;>4W4wxfO_gN%z**%FbG!0iUc|=v+LsBcJRx^S^$Mg)Bm=fVMKU?xD^jeh-1PQHGYJzKiD zJrNu=2_GZh@>UPCQW>1SN7z`H z%%d`&Sa4u0ChBVDsTdhXm!&se7JF21kpaw%$xw56Imo9!cF3=Lr2V?mzEVlb^i7;Ci4!Dj+vLN4NII2 zo+V08wJE8K_Fu1=NQ~Zk>nhya<3Vtu?#IGJ8N!1z`od-{{QK`|VF@O>=Y$dat_IiQ zlMvBPoXa3iFS_1}aN002<3x3VGtK2=uawFn;2zl^1Gy8G+qe`mc~0ueSwfk$>_3jZ zmJJ9BR?*wrDjXDLXHh9Y%Q5$D0mymW#rFI#v07n^Aqp-ipnvTn=~hBm=#p`3Jpsvs zs|>e&|zkC&0(z-Hcj3ZKKX&UYU)(^rw?x!c=3@f%^Wk?Gw>#f`9Kj`^BQ!C0N5#d z2qKCqtmSge_)||EAIKe#2_Y4)4~sL(d5IJAE~ImZK13Js=Rh&L5Ti7`{$5;$tet`# zSLK{jZ3yHsBfGJ2mu>-jdDY$fIlN5gsRmX5=?#jY;M5GrB4WxLsL!{HVug=m?10FAQMCdybj(^ zZUr`2(qs#TLSBs1g-LWU zeMZ<8>ALrlw>RQ(JLxienIzfe2Zah?TW*{g_?PTFe|AXAQs9aJ$0>+Gg*%g<1#}BN zJU71YVKn^_Mcnc~dumCj1a+S5ZP{(YJ1x=~!JLoi*7-3rO&@~HbN)LEyG&IwdBgwWtCPlTtQXS8BKLc@ifPX!35 z$7mTj6;jbn-FY2ipXXl0V{wh_z(+Zskr-h*U-{j(5L+pf} zds~$exxDz%-6*_rwL}CL`?E32xKuOve^Zv76F)r0pG%6{8VU~4G6^56DbK#;eF!aR ziHdk~%kl!2^Eb@8H~HFM38s#OxV*3Ai_Q7xMkIJ06Q=#SW_nF%&@4X}+T{J3QC7Ar z3Y~9b6v3PP#Jx~yVa=cMZ3P_c=4YDq&Iopu0p72Fmn3KwM+!sX-{`B>t z;fom^a^+#R7(w)t_vIe`^8Eaw&n2%+~)YpLb0%@zR6jk8-ON%|YGS@`$?btcE8EH)*bk~yr}W!gn$3Qts!sJX81ouqts z*V`Rl0(rs`d!Y?tEdZ?cL5ld$D?)f$skq9re&UX8o*%>^FT4;*NBk9dPraQ2tS-Z3 z`UPLy06bG|nNcj$PEEasms!3Qk@NchV@=iQ&UgOQ1VmZLD-2` z0ZPZ2Vqm)Y37BKS0BuW6M`DKih*e9-QmEt|LNcLz@+vhH0qdPhUPl988cwbNz;#@} zM1mo&$}u|NwU9pYQLa}StCoy3V6UVJfB36jucp>j(4G8-iWDI#<6S*ie59B*t1>Q} zk#Cyn<@zuYLtHunMB758(FyJYAepm@+>}eesMLC*!x0pG5#&XG{`_=a2tE7a>o>EsEc#Z%H z%3OuN!=LX^%p@7!`IbbMwc^t>K66?L+ZK`w2Qh=ub{|)lq2wTM8KulQDCibr` zlDWAVTo?Q3hFyv<@EoS}K^X$TZh65ibNgq7Ag+2ke_@O^tV)bzw===vRw1xB%-&(l zMxx%>feK$)J73Eftii4}ykZMqJuwzUs!SZso^f6ZVh}0&mkJyxsV?(NF>C7o?ps&*TMRlX81Xr z0if>SO9w4GyymTy?AW@3+P1g_mCLe)PYJv>h;mn`mA^1-F*1)EjBf}lRWiy^) z$C1yp0$Vo2opUX<_n5%xp*&urHxj;Wz{93Npu#iE1#ATd$-q2TAA7!Wv=<8j0Afxe z`)eF-$TUD71UKcXcmfmi1~z$7K`0C~>+8MCpVJzx^+sZ(5#Tl%j=hGD6ymh>lNDHm zZQ%|y4=UJ5uTtwfPE;fG=JYnzTu85i2{v;=>LE7HO)o~732b&M3I04|xjd&isE%=m z4NNi3u0_xq6kKIPCRgV+V)44UTIr7qk$kqX$;?0R`*BclLz{t5hCRT_^TkSX6CnSd z=&giTs37{`xDNcIo4U0_GQduZD?N4lV!wJZET#IatPj{po(1`-q77tElSSiYZX{HQi z?L>84D%cvHubmSur|w%p`qAPda+(%8{a5ibi@FuM$zNT)fGHG-n=l=y)tJ&RmE227 zB*1A_?;luAh6mPLTr(=>AKVG+?L3y3HF zQ3&4Pc0telh+*603xt}86T?FfC^zLVmv=Q&sUtnkCZ(jA{Pu|_uF~fjdWkGW;A8}g zS^&Dr{wMF6-g?Q=8=i`!2rdx|ET*N+xhk8?!XFEV-cpDN354FRR!&{=?4 zN5%EU@?Lns#lIK{kmcm%hV@DE5VkiJItd>wsbV0&!wJw|kg0+ZST2Q#d{6WzGwJ~S zsJxaRqziLx>ivgr(D>aeoH7%$Q~D)Y8}v@A>-82WLl7TXrd?*c1(~?RZdBYjI@@84E_}`3 z-7|fwF^;eqz6JoaQ@>X*GJX4~8|LTPh1#dNHU)kVK5UScy(wpFxB1Vogd!LrP6(1p%lTn#rN`JTNeBm*4m+=Li&^*JR;n1X z3r*rWmoPAjk4mcTpi^3V43j#+6I@0Ip|7m2myTBREKHCAaLNi<%Y;&m8Q0fXLuGaS zRIDV*N_1j3c`meGZ<&|Jx&YIX&lD`JWJt-n!)e)6ce}3f`Pp&OUmH59se|LU5aK$) zQ+7e0_tkBObgNA?`bcJgH6FPesQzK2;|M-q|IF_bjFHT9VVztTB2v->fy)XlBV*hK z0tciq_HX+8067kpQy(U)G7ZqH1BH)~Z9wx07A>?fV*AaX=HoKM&3%p-Up*1c^{|DPhchh?jW}{$d#+)GoonXjFC8Lp( zn0iC;4x%KdZ=yDhf_aOG`#r}ZmM0U1Fg=;$r99*X$?=T}Vr=I%zMv0kD0bKi<`f9D zcoLt3x30_mRvf#ZoiLqnxF8-9%VseoKus2n?kGppuOP1Oy}+w(7cfn5oS3bSf$E)6-|ZoY!XwExVQJ>iVn_q(YEs;U`m~rYUTP2WO$Fjnc<1wRpC zAnjs%-tJYHOy>De_A?01<&Z(SP=fH!*l^ES7A5bA{VOmqWRSyr6tX!)VO1t~fEcan zjRHR}H{X9HLHD4vXU1GMddUj_J**Ia=CqluA0&}My1o{(0Yf|&Od-||FufbtOOaU~ zK1=AIbGT;`i*i3!5OJUAM2sXXj8`LQUDOib`+9*l-cxi7vmmhZ4#M<0Xk@D0SoOM! z7PJYcTeR2AZF)-w{n&s!ioE|F;v1K5*{_FpA*R#wOlJpItp^UpzxhcGY4MF~CiW_asF~z)c%nh*`GIHCSn8>;>$UlL zgUKT&)1^6K;N_Y>dLj7DWsnNO860Jr;htP^#Eaqpp1eHf`|689}PR2H1kWjp6H>ULnK4a!=GQW z`2-ul7staH6X&D`X~4g9+B>m-_Q^1cGHc$lK5QyzguVH7V2#hA?#z8g8``g*!C+<| ztV0$2j>O=`>E>}?5j~>mznlMVhMA;!U{ZI}EXwA@hF}Xh2U)Dunw)YWr$q8qnVZ)z zIS4ed1V~uvB|=&$85~dgDnudPXAiH+bDGIvME!;Lj)`Kth!*xOuBFL(xoX7$Vk)!b zfkOm=9d0b@T@Ir-)yq){wPR22tM~%^&0I09V!Qz8f#&*RB#Aq1KRnIh<%1}Y{fxvP zRCqx6aHuih1bP2M510vjG_)AU2E9A=aKff}iI=^Jr;2xP8=tHbUO)+RWtq5PVc!+- zySISy?F3urn}QzzHvkqrHvu96`eK0^*XCk1+bZICKqi}xi&(nIeh9nbN(yox*qJoNLS-BDl;yO@>N~I=^sI}3G}}^B0Kh9C?BmyA z5uo0Q{$OA2@Z0LywGnL)$fY&VzX{}F^-)AlGpB>*prfXUNa~vkZzgQJ#AH?{42_Nk z9jZP%Sh|%8_Q3&JE?d7u0#{_3zq4OA9i}?o`aaj>5&n}I)_>%xB1}Y?WfHfQ02CPG#+6Fay@$b zzOSXE#r^=W@D#nBT?9~cfViC~r3Z3%XcjY-6r%m-qt0RS9#6EKD*eDFAy*JM1?ji!wVv*^Rd;s-c~%J13t0v@&^V4VS2Mo^@F+-ZJ12? zCs6OFR;fV4cM)GY@*IUxUEm*taCpvH6&8=5>VLs4goxXe+D3DnsNH)5H{>{~A^$w4 z*C5I)PCHz#%^LcMW!b6Cj?iQT^a(Rj77B!aG}(+JA8;_cQSYnJ@em+Z1gieKYXjIL zy)m~-5UoAy(!rE;-C&>mQU6QD*Ettoue|V4?6=C+WT#zrLIi7D41OCl(W#_q<_!#b z&X9~aqU9w$ZbB}849;SDv}nv)j#f5EEw)Pvu)c%4f1~{ZAg{5r08ew?kC}z0s1tH^ z`D_CX|7!~W4vOpt^xMSbWf!It8KBF&um`(TC2d2fJKtSW0Pw9#94Yuvua&rQ9?Fia zzR;X2H75yDV?LYBO;TZPE083}HK%ZW0Q`{Y6+1uS9OA&{#$H#4=S1R3S`1--X^OjK%J zb17tiXNBQu@qz$>tHDQw$b4|%#?{?O@|TF_(F$FECJ>VglSK>Dte4g zsoe8&@b&=H2WK$1S?!xEwCQerH-kh>{IUVQgzKZB<_6~QvnK&tG-95w^@J1xXH-SZ zG=*6Y%+pm^IU-*q+e0m#B8w44CA)8bml^jJmGDgC!4$PVLQP4r2;tMPJV} zBAzP;er_m-1jOhj+knhaVX%*QFy^wr&Rzv+M zUSLx(kXzUJAtskV`1>HIt7bi%9Pu_RLu|J5F_o{e6kr@!V=?i9h&|J+k_eN$1vy8VKH<$iy8F~H!h$ffe9Y!OlQDr7imL(PmrX$og~p?F!$>1xs|A@tBFnNKru>JCVb>_faP5b$H~O^Hr1BoSjh`YynMsuKYW2=_I$ zpq>llq?D_j?&j}cVNR^5hXNs_KfpnOm7P-8jteIF+s!QG5?o~FF&-hEm-%fxu5&| zt+-*gtLLsQz)lP<2O14iPT?T`59Q=pZaT>%&M5=K7}&r%qBk;jcHm=@T!(H8`rsM^ z$gT&)_k(_J4M-{Qs10b)fYc_+Az}w1NpQz@F)AGVwGc{i#+5r(@+*(bW6Z_g-3ad$ zV?W>zz^y|k${`XI8;N?a%~rs34R@TKM z!H#%Ju@gDxvg)GbAk%~&%sO3?g#m z9~;C$V}fUh&So zn0-|y4^Pn;=t0+vxjimRlp9y%$gvp|lcnMkyIb&>%}-U`MsbqJiR}t%Hcv51+~UbTZ(H5sg7Ye#tOD|ILzP ztV0%y@vpmTqqXwfpDvQf(T=G;yod`>3^a_F)iIMIM1}#;aM7t3G8i;aUdh2*zQZ&!{ z0giQN3bKY|JwaQn_=d;Ne0|Pj73Kg{0bto+>&*Ja;yd$pNw^;HWE_*=X*(I0g)jD( zhOo(oK$FmQ-svk5e6vhX^a*eS)K zIl${k!J0jWCcEZrL(u&4pvLM(L&%ujrVUk)6vTC|j)}%^e(KU#rIO3s4WoHjx= z90vh>7Y`lZ##a;^EC$7rjei+F51L>wu1zQlMtWCN>B0fFFSJguxCx9vl@c3!XV9LV zrGGMY<$4B6#!qjtKcT^f%lz&S`gyrlqxylmS1wk_ijuevuDeY0(pQum!v2#jV8)#j zf4Q{jWRCdfc@3el9J;;Wbune8hS33E)<(Bb$bNJeT9bZJ!2unie@EcB<{^cb_;&&S z!w*lJpsp29eNSdQnbS%&Z^$HeMjWwrpft<%YOqdQ6XX1Ef#Uv4#lLGBEqjA-S!o50 zVKI6EvnK4+Rgpkr({0UJ4j;UymFQ`m*;C)`e9{FY8hzf!>p7p+1>FwSUtlb>o+IUh z%=NgTrPqw!s>bmH<6CeOs_9Di85e_iF3ux36^<2qh!Z$zp*A2kzGm)a+2FiVxYc=+ zIJJH^y>8(mXlwy|_6c~meZerckbpM#@zmX6Apo#8q!L5I_xx=NcyOiN*jAhNVSJLk zzU&ZchN+kOgd*n5Z-=<%nLc9v3HT`Fhum5OaQtNp0@G^;%rxoe!{Y)Odq`4x@6%wA z?@FOy+pdW&L6m!fN5cYP0TWp7rfC>tG(#0@bjyKBlf(K)dt}2!+2Fs`WoK~f_2hbs zvl-ui%IKR^xI{s>#=MxEOe8XyrQxRUhddC*XSVAicT#;#fT0t41Y$z;8jvglU0MJ4 zYR+JbmHBn(3`iNo}##o%Njz`pG$C0!&!Iti zl;6Vjax_CRz?H?P3fCriRC(l-O`M%vu@NlYCW^9e8cYLjx(`Vwa}3D16VL#B0zAlh z>3VWoGbx47Tp+4;y@rW4 zqjCMZ_SuMZJPK47v7l)5Dbno+dzdvrl~(p5gh)0vt|<%9FEdx{2@tXGyFwcWMUFLQ zyT;Qd3|vWy3G~|vLwW3sAMAKf(9XikiU7e~&v}2DMuyVEA|*G;436I~ESRk3GEf+G z^fZwO9!v098~L8P2xflV?W`3o(=J+Ya-cq~Ig3?HfF$>EV= znrzds*WG5dP%WAmARI156qS1UAF*{Q@GUQvbd=t@x&b(tIW|xgJf>8y9B%w@QOkE; zLs{#X6;}pyISj0cX!%d5omCT~7jRC#QAJGTyi{5;gIT^!uL5phe0R^h6TbPt8S*2J zws1#aOt=lO2W};XiFRkzK8p*h*2HSIA4-?1>9~qf-LY`=%0_8+etbeN3LJrtWpJA9;FFss9 zF5BDTjnDg&RrQ|RXK^ru7)kmG-i3G4Mls8LTgUc1?uWUBHwbLBHs~vewTOH8IzJBh zwGUYTG`;cFEr2HwZE9KNi4{>U;X8h0 z-tm@4ny;zbig(Mmq_jyTRHyuDbBU2$%S7PVL@13BVXePd4L_PnmuZrHChjLM77zj3g5lYP9(yZl3W*@l zHs7Y;s2E-|{l}|u*#J};`E&x6(jU9IvGVsjvA_FcNKA-{!4-FM6h=5mOGi-fk!~j( zfhN*Q0q%Q4IU|*piD0r=8>_}g^0oTN2yDo)AN!Y2PJ|B$t#q=+DX2pJ?)$y|9hN*x z$|zms91a2f!Z5lL?`(q`7x%8tf{8NZWc%js&`zTk^jyv@z|5Q4Gl?iZ!w%ILSi5^B z{9SK8u;?$v41n-FqJtZWlbf76OKidm8h%Djd1ba|=5V&*0$hu=oago978wpeKobT8 z2b)W;&R$LcF1zo5;N06QR5(xNy4@ys!maC?) z^?ex&`xJes^YdxP=R65SISoV`l3T^SEZSCR$Yo#7ECjC@*)BH~kq@gnEDF8c*%1Vq zYHV^KuBAy|4`i9k&uda|>vqX-*e#APZNk=Nps9-$z5|1k9U}ksDplXcW8|#MOqwC? z-M5+8)cZnYT1{-6y1r|U0sJO>vHdtH4`5*W)jbumK-4%gweD1yjzZYsZDKGcNwN3> z7}H@`Rv{V?`5UE7oc#iHPCg7>9T4(C6^0T#iH!*mzB|eNa4-a5Aox}+%T_;$C}gi*V?zw+=gV$nnH?NJVLj1cY$yg`(x{>hMh<% zqvd++0fJY6AXKUs=Dith*dMfYV1$3Hh^KB&)Lrgh?|+H#d^BDTb|e+wPi0<*EkXU- z+gACg@U4v7f>Dpxzcie*4np&}NUrEW_Xu-7(?|C4>2#`d>I#gKnIskH8A=EFWLjv=ei3G9c(#&LcE?G_nu0?-0 zr3UA3cy$Q57aCHToeIW`oiFoAU7f?1Xs?k2Kr5iqk#*cRs**vF9dFa0$60G)pym`m zgH3!x!0gD(6UWyJSKa4U;$jwHrZBiomJ;vfN>nPxNN+613`{|rE)Tp|26B69F$kO* zfETI+u~I+|`j#&Xxiljb;f3hSo4_a;_SKehAMmGNO)v}XMu_!L{ckXLY;R6|LQAqR=?j(eHL)LDWd$W3q&Eq&)ySR8B@g?rN|TcwAecC7f4cL&fu$>y=cPab0+|{2OGD zNqDupYyRbzW#CJeJ|Kp0L&I1bg)S_X+i4*3-2N9k!Qp0*HZfb$X}Jn<1MQic$IMKs zIPGFBh$=e8U0{A-14zVk>*XO>z!nVi)G>sY&;WwpijfP3Vrk}`nB(b&h_I81?^$tK zoGhB7LoGo4k@4l(g8D)&r z!goo8fbM;wN+I*vZT0K(&sDWFTTMt=_NCse*fnI9yt;BVTT(6zuR9>Y_@__+8mST# zZi<(_QD8-cxf&a`d8jsHZ!m4o`I-_m`-6CK%xr-U%Ao32Y54^gC{|Cnkd!MhBrn0d z)mndK&@-(8AWf(K8_qch+7U7GA!N?iduf|ULQHTz*OEogufsPD@7L#x)r3{2Wl);+ zWYYvF`XT!2QHlJVIEYCQ##gMvxnwDgnIjLMQ!oJW@SK-cr=Y(Vy&L`{CiUl*)gPhE zCv{{I{lnM{MnvYY6qlo75C|q1R1xWlOKL7YeJ5^`jQv+iPlybxv%a!c%)P4-JE#*| zsVAVhE|j20wi{F)5yZ`8Vg%*0*r>osV*-YNI~ec`R@vKB->(|DiW+361JTjz^w>9X z@5u;AlWIEnZwFnA2t{_g2pga4@Uaf)d&Ceu&s|`OOxsLFZn$e41_XeUNbt*s>3YgG zoU||4BCK^0fw-%Sk3uXyvLo?(2x#Wj_2RR9qcff39&SY5+@p@N8!YHj=z;E;)rC0) zv!h$|^)o8Xg=RKWvF`nj88;^RK_gf}n^d$WH$aBV1`VM?RKhKJLQrnb4#O*Q0YF`u zGq2G?M9`%0=iG;SX5Z*>8@Qpt0eK)BU%d(CWdz7Wtk)$i$JdQzCK-rLu!17sr*Vj( zaVX?g`5u;X4vc9)g10)+4AxWj( zvqF{cev#C`DFCbMB3c40QHFs6n_vLCpC2L)V^UpYSLFA5ytyT;F|fQx;1$|TT7e&I z>?bvYw^X#bra7_?`7ytSft&PMgrW+no2L;UPbHEbLBoUqY4U*V@G^Yw;}{= z3K7ykfcU+ zsj0{ToXb2r131klK-eTKCGKQwkOKa9=zQc_PNsVm%GeB8#s#qR+lgE5@k*BHxH410 zHC(=Z)5C_i%th~I2}sD_NfIHbYjKtF`;!!Z0)rO?TEWDOV{07K5Er$&g4y=qb#f$e zTK`?aHG%C8VRI!+WE;q@kj4a%WDR;QP@?sVFh}D~X-}lz3AH?m0Kw;l|@zpoZ6t@Z0EBh{TbCwVB6fTB>+|;s#?c=SZl1ISzNi2E5Bn zBp_?`2KeBpCYgwiMV4__aTj4-7B+v`0K8ax)*Y+OcB9Kk|byZuqBn3}-op^fA zz`xvU%==j;45&>2Z%Q%Nwppejgs~reODhsL2b4aH4t{;G1#33HtiP*eDK#wLt#XFDE@L40iiV z9qyuy9E7M?QKSemU+dVs=|BGEqX-W{7Kc{n-!q_aLUS|XD+8e^uL!OVyqsT4DLs!3 z*ZLlid;lm{dUHvLj+t>!bH|Pog=q%>w?w6geq0bkl4T_r*jSJ#&i5XL_DJ%62`y1_ zIl^MO6(#SAUJAPFzNUPE%a{g5(0x8Oa13Em*|#d*CWKB3EQsMopVQFn$b+Q-~5@ zC)**mV(xQp6d?yC7!g8GPrkk%VCJbPCc|2Ye&k1)XAiq-yg!2l(vKWU4JiCm-G!hk z&*n+PSwX7dbaA8_H~o;eh*t!>%JGayo}7YsZbZ?K?VoS^JvKabVHWbGWzW4kscHSS53f0qS0WHAh4CvYZrZ*rGWa-;N@ zHlL%S%lv{fyaci_L8H34C#|rL0|VTtCN0NQ3?9P5%L4ay9`*d^x$tik`{i9@%b@zd z_K@l}Y3C6?=cM|QI$3)bAWOT?lW`c?Q#hgWY`sFnQQ9}%VrKun*tg>gvJ_dT_~11C zJOlU(YBIKw=FC^73nU#k?eKG{g7`2DYp9J-m88XJn8j5W`0C8&7wdR{?4-EAGsNEL zZ^i52F78e=y0A3{8Y-kKcVue#atYwd)}RS$`ovUao+)#_VjpX4E(57D1LXp2RM|y0 zljcp+YYTD`bVEw8)K2#X^-I8o#$yKu#?GA7&6f0%n1Iaq8e^m~i?R?HjVOp8r)^8< zNSbd%Ay`@~Sm;g}7I`nTIR9abBp914`Cf%tLD={4bIOC zs+S<#Abz_33I9uki*4raT{tq^0X)T=4N~lw&iG#@{yq(`p_@p;r=-%K0N=_O=Kd0o{H!wDsV>ny-u+~Am>4db6f5jFS*kI~&H z9PQX~zt1Y9K}7&I0bgI-%c%qfVv14lmXxo*m<8@85uw6mvpK>Z%|;_-tZKQ{1ft3*5h8r zg!FW2gQNiqbA-y$xq}zI0lNONTPWNq@x(&_d=u#U5%zhP>3J;D{(e8Jtdk!IB zUCG}bw?BZ)4Ww8)4a3>ydw<3j*oiIR2aiJz6Xcuwx-ws;k>cKTv|K0C(GG6Hg~mK@dqI3# zA_A!95b|rWqZlMtAS&h^@*OZmv_WRB*nN~ zIsgC>49y|0?VpVUy$??k>GvQo8_&O|=`z4ECuvOk5klN{+#GT3G&dXxL3pBG0?s6= zTQAR#*N*#lC3N7r;bc+Ds~$yT-29V8FFjsq;A1i#Xb_+7@DJ$Cw84o~m@lEyb{K#+ z)*p;nqK)EZF>8^j#{*^~n_tuX@EUg{(2c{K;PT_a_nh(?ctSD-@R~IdY-SM!bC8F5 zlTQ5a{SjBsq{aW~Q`WSPN*3G9$?`VS?X3ggS7a8y>oAU!WZV`FuX#!MWXCXwzLRaW zlxMb}ep!Zk-wt2WuM7JBHuHldawY6Ri3~WnR0Nsc7h~;Qomk+M-(o;4;Yx^eaHcLWfbX+G0ZY*mDpEyDsFNj;f41SK#1Wpp# zOzdg*k}v4EFR>md9h?B#WdoH>&OK3F-JKmKz*O542;sDwDZJJi*hEuzCsUBtz+cS~ z;6e34ydMV05DP$sGg97p;}bw)*k0eyCH!?z>i>UfL-`cMn`|4i1pTiY-bm1jRS8tp zZd&EV^KV0@7@5`eo(Q^Jg9S+A^=-xhnNbTny0a);Fv!*MpQ5LV8xKnM@;%J&;Y|K) zCQhKbP^NiBy|{l{pUi**#JAQ8IDZUtSyV_kBPH#4tbJR6GiszaZ6DbrhBq@TbUvIM zs*LmR;M+f3lf%;A`XYu&&#ms(xe2Ifw1VhPB;-QK#wbWOKndm+^|HCh`|0~nBe5`a zzAM|N_2jOjPi5w*T#IOXM9g*kmIq^;E`@8dx~bF@!_WV-7YTd}lR3b6&5veMOARfL zV4in-$%e<^MwTFhaqy*Y*j0tZYI4 zW#kM9qcvcYPW%M89EnI2Z?Fb;jebj21=LY(g7*iRK?5^G1YZ(| zxQdv&AFUAw4vW*Hi;ZnV|Ep*Ttv_KR?=TBO<(meg&#R!~UJg@Z)aGlb!>wD-^(Ea& znlKI;-RyFch+L;$)-w$8ER$KIDXdlH1iR5nn<|m%(&3g%s|FsPC=L!D-c>$4nZURv zb|B#*;Q4lh{lOMx9Oxzc6l+NWzbX_8j2BNPMI7CGJanVX^l6?rDbW6l<83I(L9}?DCZu<^_^M$5#RIw&)%+ABYU$4ph-47J76Q1Cv^!YVzxv)y zh|$e)e$;%8iOf^x$$dfip(Y}TG1??1Q+KM@deFT>@-|E|~8b#*biD5bd;8Gr&5jP1A?={ny*w)+X zg?X0&;?W>*$Y8!HhWTO24GK;_W$2#M(d_`e8CAaE^yi-HOT4Uyz9zPFPyqTU*k3ig zw;g1#N<0i#l%;Rfo4*^T@^*3BB0jVT=3v6Km{MJzREv`Zvlh=SuZNna3B()15dsmm z;ccPMr)kj6_4Cyw+uTi$^8c^&fzZvJT-D>|o?!RfKU^q42H;r--FA#!9HX}JAg=9< z7jzTe7W69uE1($Dg(5iM3DrN9u;!gjm#~Qg0&B5pm+St4r|K;ccgRh^rs{{pbTQNX z3{iK8u?;k=?>VSHl@0)J(usdsRT!mxkI9{kMhx{}eETDjb*6Dtx*+X`8=@9eH$Xub zA5z*J9eiH$>*je0^dZ}H~*@i+jn+?=LD{$vQR3B@Dl=nkXW+<=J& zFtnpVln{Em9O+24rdG<38zfTIA#9k9a=T2*T__L8`2cRj>4@m%5+g9`LU%6n z%4yF7$hzE?MvP6y?;|A(;Y)ebrFkR+_9SpO_OGTuSC*H*MZs?v0*FQ% zq)r|-6@h8N7J=TkCzD8QNPi)^GHmUa$g!bF_xBvbP6DpR0E<*57E%m%C+(yaaHM+e zueWc6=G!DtjIVGgx$#?^($sJVki*XBCgCRV?G+||O!{gIE;e;8DbO+5W^DrlO*gyd zjctO_a;|K%Wg{@byh`H+D8cnl6rV^jCYCvfpc&@ExNMn#Gj!vT9re3ge_1 znpg&?Jyh)TNZ3|*e7G=ji0OTqI56&s&2uq~{!!q6dtfgza-5hsNTEYx_E%WFvkpVW z%?C!fympLV%tCQXv*SVg=5PQ#K*GPW7#yS?tij%PhGd*?NP`KWSL1*)um3%3R`AeZ zY`7lQKK|+ae1v+$O^7rvV|B;R-9Ki=^%Hyj}1JUkRunme-c zg)us`5YB~mH+DJ1)0b7ie$tW(|&0_?uZ;aL6OHKULFCs0)%t1_)0% z{HA#nBTAg4{!ENrBAav_mvb$>jghSmtl%`imjWU*3?Ze$G5}-LvLM^6@~y`DJlhw0_@TqSYhR;QMGw+JQ?_ z)m#I=k4A0x@OxJD83>sIjHFs&9OtN7k+9_ipPJ* z!4_epq|Q%a7#zh5%nU2DHS{_72O_|xnh0+xZ?c56I94RwmKmToc(reuEI9HPy1JbB zLA`YM%RZ-CYMA-ZX6~i*c1bbS_q83;5jC6Ljjne$k)%ips9R2$M9e#@rB!R4(}`@7 z09W}FE|6N0>t&}&JEGUtVZZch0SVu=`C2Je7IX%lHB)(eBzWl|IVB{7JtHy`Tt=x#{87g$_(z1 z^qznK`7e#sfJ0^*^Vwe^8Bh%sjmR*b#b#2DfcGJ|O{#4I9%_4$4nihA$Z-{@0X8E@ zNLmYL)T`=K&Cv2VjLc)pb`p7KpCp;zb7hi8W}3M#;eY+CpxT&!7Y@d)60>A=rhk>a zaZg^9_WU6VP2j?Sk6`09Gjr_zvGX3T(Yh3hVIVu!_K<_KZz|k*fU-a^6)8f}Xv^9tbPz^@km*5hkKkxRpAGa|kniNQ3DV?7Q5(GiXRZWkj_2dxkBO^~X}W})a7KdR z8EvIOG2{%GEb~B^;GiW1uxp55xv*JSByK#WnCS6cOHK6?VP8mYX>de}OJ*G4%^qfGghK3PXcf@;@RCnF6WCt<=?p-IEk3 zPP)6T2T=Bq5C5w&Q$Ga`_>Jzm(eI`R&PE)An`6Z}sY;xv95`J8OV};|rOH&_)8inJ zLJR{N6(2M}uuaBUXQQ6sQ*YGtP-m3@VMU{wRe)@BG8Lyx)*cc2GuMVbNBT#J#*PnR z4a^X_)#`t!r%;W~GhgNeFlOt}Vv9@{#+ECEl=5;agsG$yy@pNrw9x*Z41oy<>JFp<~hSi$I=Qs{2Y8-JQjuEFCR$x ze$GNYuqrP;f9!;oZJc|yZ-40Wpc}z^+v$LxfhX?e;}GJKnQ@KhF)8zD!${}5wfG|P zat?}SwLS4s?mw~Tfq9INml`_Xg2AEfJ%w%X=_%V?@YfMOiDw(CCV=1@l<}+Ed@;OC z3}i%NMAvX+kU|(ZedO+TZOhJL1ysba*v?u5QA0>L5y;v;uuluOcfs(t+zG5V@vwq< zE1+5;9&Q2pdC9aOxYufB&_jCxr}#BSsD(C-phgH=@|YyI=9JKK!Eqmn!6iPI9;Jg{ ze;#1bU#Ew7K&ywSsxV7kZ6Knt(hSYiOY^cE43QKe;I!0pO%C;cApV!omcK3Mec_d0 z6;~pJ+w7(9lZ7h*>pAaEx4TWmf+Qs)KM%6-0-j|__1irz8M*^}foyS*f zBAueTd*u7iy)z=@*)215G_rlPF)Xo8!`e|-N}m|FF}P{OWQ>mpF*4n{i81tzl$f?U zhQRB6YT949>`PFwva80k-{*<>L0E6>t* zM%AvBVy?wPMv3>4gzSuck#>7|>hW+K^J{@Ca1?+EC~>VKxeE|?ZNs?bz5p%4pGX4_ z01;7|2zQj0jeqwh7%jWR=i4a!BOQg_nPxB;qEamxC1WGcJU7fn=CI!-u|xRrs$AX3 zl+9IJ$Y@R+LTG`>OC(s)-1*P@pXHs4;ufXGhn^E{1GQ*PZUk1k-wlJ0U5Lg9vhh4F zk4G)-)Kf1gQ>W`-BGVMM!;DQh;lQCQ2F>GvNV0cvrmBg4lrU}H)t|!44kdZ-#DC@S zN>pN1lJn!$%$Z>x)3f8Gj^)pYFWZS*kHyn-p}ssHXaJS3 zZ^?*4{+z~-VouZn_%}8#8{}yv?=um$2J>zBP8e_zw7kcBd)#u98Mvn1y}~%2)7g#R zp9IT$Y6)GFgc4n_8kq@;b;}5)>m|*>n=*jFJOS}q?3F5rW+s$)2Pw{nIURFtY*%sY z+Tdwi@J6lHKDp?WsnZx(1H_E(hHSpXsonTivH|#JC);2vWRM($^VM>80VW`2*2Cr& zPyGcphCC4d^n;5oLk+uBAa2G{I=U{4%SGNjA%qlwOoq9**QScWlmufC%*cqDOSj&f z6bEGDvFg*CXAc|96YUf0z+FZM;1aBc(CN9^+NJPsqa7^;xekC^#fBMGGwn}NS9BK} zhT8&DWRTW`_3iv4rByr|_fEpEI!JM%q{0b;4m9C4jX(>n^XczjHHTvl>j7wO$73TU z!Z6iQu)djQP#P|hHuJo3XYdG<15nTU40DLuD1u{=$-!)8id4^Q4Jy5?Q1n$FE~(gg z76oO|i}wuTG``^NBLZ^j{iHQ@>1G3(2lu-uJKdD@NO(jBdVU;uHIJeE8JmT|0R}IQ zkRJ*k1k!xPrQ9S40v)CmQKFbD4qs8pGU7dnMh8Snsu9)y6WJ?qZ#Lt0&sUrWMe1oi zUu_DuS1#9XIdFiHZ5h4@cn&_=545Ey778N86rOhip%wL7i(BUOf{i^E5=ch9G^iyjQLu|uL3_@xLn5BYB>u20#3(aIf-@_t1=Q7@O zx#-?MdBrS5*0nGxy6rc-i{L+GYu3dQw)2x=`4mi3a}R6AP72s6F|R0XV%|Znl1eIG zS3_g--Wmm=2{<9cB2&ZH1PCAVqJO|#I*9C4 z-N+2d!&;x@ynIq(Yqx&T1jIynA_x7i`2 zw<8Yu&;M&~_Vhz1#Oz=misQFu@7R;Mv8)z_!A{3TSSO`m$pT7b07Spf1Yo3s_69^B zr|^@QxYrjiD5Y%c#9S%*Kz3EY7Mm>9nRdNJpo6MEsKH~1NcWK0`q7rHbJoGpSYU1@ z>oP2|i8V;NA?luY!o<6z+47(JBUI#35hf)~;WP9va6=Vk^ik)mzuGuozY^Z%ARDKh z2)b1O1vk^pLXnprb14MeA_lpY@9FKhMk;-46l4zme#*Rjy8#aL`kwLiv>Cr!5dNet z7G-+ogtQH#q9a+@MN1TQ;)>5r(u}!U^cS!E(UaSR)R1YVqH{cHZE%ng_C#axm+%7f z-v{2vAAxwfeW|X?=AajTe2Wj}D%oT2J#Kb@5gD%tCR{QouLMKPQ|@{31a=mU+z6?cG?OcoCHZ1+57Cry&0x&P0JwHV4u;BlU7|9 zNZ{81r!k9NR7%a!`vHDuygoq=b$);3g8D1fjF2O#tU=&~lyI<3JBDI0%qGq~_}HvA z9kdxHxt;2_GfJ3-1}hi_M)Rogf(Cx#e?iETbm7%LyA4 zHuv7w=cEHcc_(+8Zy7m3#9(yN0{(xlxc)FX_B7T3)V3RawFR=?q z>Ld~O$HgR{t$1e{!E@yQaEs#ifE}Qkk4R)Vt}au;JM|Gyu`}7F-Z}eT$G{kMy)L9? zX8AWn2+4K@-EhN<h;48$ zO&^SDkR5)LoY6X@R4W@arbXN?u!lHbXwQlhVm?uK!KYm`6ZZUeDR|t3Jyc^#qqzeqenqNtCz1;OB))(}NbSN_4D9i3M2ndchOqXji zvqc}+3HCHqcs=4cCapn2;eVl>WL@hI5bw4{C`Ik?5L?CN0-u}yUg=?EHtxzY>s!TV z4_-!yr)|VxUmux?cHw~N<8_dE`RAU$Zc%T3;+{egAC=cY%Nm%)n9=g;_F@jFAU1qE zvqxVu0L)h$oh-^oi8X`?cS+}Sf#`$n)dc8f*FFe%8IDmU{L6yP(tvd-dd>|`pAKe| zaEm7TOB>=mbW4vJ&pVU7r9*x6@{u^z85;LD1~4-j*rhmGhie(i{O!XbNi#4DR}}^h zIDd1x4QVvixk7pC54CY#BVAkDAcnHr)~ucSZ+I1TEaUq1FKgv8PQZI7tJh^A@O&GD zpH|}e1myKh2+Q~OYlWOv=5~>Lw%wSt;XdmE-VqySBy8g6d19p9K!sOk7~mx+!WBh8 zFMG-?zGE)mFU_u-nP?c`-WtA*62|PfV}!o-5ds2&2Bw7N?Vyav=Dm_YT&Z+*_UI)z z^*$ul0V5^a@xf#=Jck%u;u5Jem*tB#TSmqx+_2w=hCZCy3pN@d23^njOnN4^1LWs7 zDIk4~lr8_$9xT{WO{t@#nmK_Cfn&yL^J^Hj16J}GaJ#R$6<11}SGh>Rh5WLNNo6{C zMPo8kPvMdV-x9r&lxY1y*^uLY43j?$6rf%o8oo_%;Up~}z3}<&>JZ$BrdzS_LLl`9 zR4+sLa52K1bAsP9_Cc zCUM>hMYg&!D+8!kZvrG4yIrNs00%YOTsT75=E43CWUpu+0~3sNh(@6nqd9#;KpOU8 z7tAE1F=mv|!hSqw;a#RYV#Gnihuce1x*uXT$APj2XM7SAk6^y+@X+W!(DFO4PK6Gf z0YX6%z8_?|nf6UM*Im6mtH>h1n7K750OQn+tYsa@ZUiF3(z!G|rdzL9c&nf!>=P1H zf=!0krvJ)E-MW_YR{Zh09$!ikfO$^uCh+enm;odDUAb-3!!qbAbBS948sC=J(YLyH z=0Nv{;}UBe_|HNN`%_%+z2m-gfmXV{0e6(0*9%(47P15OLTr=nOMsI1co0+1Y4T^f z1t~P+r7RTc=+9INKST#z)sd$rv0Nly?nL;Oz)S(;8+Gd>f6N3 z9SUF(wtSz%_zG`n+yuE{XuwYbyamg}0)n9^s|YuBHA&*kLVr2wbQtuLGsRq|*UUur zif!vcXDior$n*UCL5SvQ#Oor%t z;fsKTR#g(fQ;v~kh;1+8sXuNa^Kf{(l0sw5!;k}=WHsZ%MX0zBV$S?C%EYYAUg@Qa zKv9xu0JDVK4H@>-&0x`JZv`x2s@<9}9TTOpr+CuBhMQ@@G#5A7&3|o>4`>H2u(&Dq z+XIp=&P+yiFhuHfwwCVc(m-^nIss3bcgWUO@RH>QKuieW3o=n+`cmHbF_R_LNnjKk z97s~Z*zM$3f`rY|4zn3h(P@OarY=dC!c26t>nGJw@lRR^Ic?1LGqw-<#peM1!{WI9 z9lqDJ+D2hOEH>|DZ`85Tb+C8yEym&1Q8)iJ>eA+fnJiqW;B_$r_BV%PzFa(J!V6QL zmrF_r`w%pt3tqvVhaWgEv>EO2r*HO0@fSiNb~%>PyJB7=vH`#b?Am2hr4Xx!ylFH{ zUbup=Y#{0bow|ZSyxqJM{|xGt0K6z3lR@Go3C!u>V6+dD$j-HaI%PiAUiWoAS_7uj zQWPxbmV_6d2rcqT82BqOhh(dJ#Y)u2s&>V2kwL6Nm_mA$G}uSVip>#+v|#4r%m;jK4A~*96b+swoJd;~TuW1otxgvRomRC3EdFX_=PGGgRx3KqN`Nit4iflk=B)z}xtMW<2m_9+aJ?JXY;FzUbrwZYeil>k0X9TUeh{y&I+JK4oRR8?=e znMCBi$hs2f5`O_kH=?c)IP}EbjfnO?$ma)-wSn8~lIHd?f2BuyC4Z;s*Ab83cFY=l z_EHuvlL42O9t?Xo)8w!DAkc!M4_jl{6k_LYxb7qarTC2uJ(nv)lVReldY)P@$U@Pj zq8tms^@*QaK`;9l%f;YFX`Npipok*V@|XFyrQxB)a#1?&`Wk7qTPeTq_UD4`{a+`yY=TGMh|bDSU?ZB8mXMbQoY-3Lj&G)<@>dzuj?_@DjD6X=Q;M>KiZH3qk95%O;&VXT9z|2PR zH$S0u|Bj7L5hmc5Q`4n+g=)J^49A#*T!1VSv(V%^IWP!jyADGdjmSWSO49@NcU+Ew z>!6=d!Hx}G#Ah5jQQLxj28HGJ3vY5c_9P29rmx**xi)gsK3K%~p*_fiTDD7-3LJn2 z-U9N&>4$=Nz#k9Ps28N4w;eU8(?3sf&yoP#G*mtjGnHoLx%yJfe0@m7Ci;K`jbhX;v!O?E{B7bF)88wpeV>>1vq z^RXo0_INwQ0hMeUB%DMHCfn?dZ&CCf16)D|(z)-K7aR; zOF9kffZeSG+IDo=N2Z-d2EAy>y(sMazI#_+#i@8=#OwkUJb1(dXJE)k=|Y!AR|2B(D!P%kt(?ZL7h>^TwH% zImo@k%;7890lcPQ-~cae@jt7KC2={_b?Zz-ZiQhrrnVBR8hZl`seQ0DBJ^Jv3%Sl6 z(v}e5by^82{_Us8CjF$kSd%G;L%3{ww&-9Bp!B8)4ye(taayatoEbyw`6F(QEt~){ zHIB%x*-9G!30I0I2EQF$D+6@-mhdNCLZ`&$Hg7T~r+!90QtP?|8#U;TRf{b4LydNW zxvM@}2WQsfY@Q1)SoqgT!NS2+C=B5m(dUEtCD~14ng4InyNne+IxEPoLWJ%q2yi2x z1#neYqzZ%La%M7mOTpp#0X{tH-lxBNPWJn%Lpe^8CwGEB9>;^oaS>H z`=A+tankAmnOUYy&111ER8R(vT_a$uMUW~vb2lSG$VY#F&kyn5DX|fx$3Qr7-CgZQ zN@N!=>j*-ls{LLLTLMBlx+f7b<`eM(@H1tt=*L}EwW4%_a*vARUu5hHFHQ;*9z&(0 z4oePad=5v7SEXRL!q!9DAjhU|nhC#@^4?SEt|m?T_(8sb;smDuEip$WcUIwlkk2X8 zq*dgm;1@vb0F0ZUrnHEIzI_l=LP~%$hdNEq5$Sp*NDXtnONH7#uFZjpy*pV7_d$k` z({+g>EOH(+-Nd`x)c`?m$%iRh6v^20JYplKfh5_U5?V1te;w4t`SYpUrZ~Gf7)7IklkQzVsL08`sV(XRh@O(xCWL+clKd_6CBR z;eeZYa4~}{qvDf!#Wmu6D<2pi%lCRw$JGcF`XuN8`bf7#W;mSEu^_y#F`StD7U~Bz zGl7;!bRg=J>VeY{D#>oI2HYqK_)UFELXB0%2|u`aLv*LZLoOM>?-c4t%sWC;>Wwvc zKBMiT?hWV@3N0l@|4@F|i?Ou+$P_YmU}7aThAjK#a@wWE_&PK<&I7*XSW1kzyHHajv0$dV|2@*(}0Kw1oZO%SmKshkB5q5JS^Q`iWPlKf5tfa^ud{Bv7KkPJ?Mcrg^sww2F>H4`Cz69M-$>1e08U^gqv~;nsN@B`Q^tZ!R-XgE9OvgA6v>jm222GIhAfq@)bDbTA*Gf*zQXLlKleod2a1|< z3hPq7!2gc$X0^jj9e*4adi1EQ(MECq0%U%!TTf9}a9?KJ%=wF>Ps=b>-j-~3t^CWr zC~4E!EdzO+*#%Tj3l4H=^SJ`o5H~4F+8=)6d)xV1FvkeFX!!m0h+;O^g@^j69IkCq zzyRlY&_%0Gi3p^f586V}NHU2pk7^D2Hmue%6nL)W!ds3eH3asC6` z>i|iwP4!o(+w2yNefkvs`YXRZtq(B9H<$OMaz(suEdJF0XK@)1!LGU{e1DqSrQBM* z=Rc~H+lnh`yDtd>L)R}uUP{=PQTQQSfl!3CeJUyD%7%(}8C;NZHVh2WtnPU}=(AgL zU!qeO(9YMR9w)5M2V?>23*-H6YHcab#vc{7S@%OX7zKhgzK8e1ypJ`qTQm8XJwtUN zZj}+%w8s}Q!E4Q>LMLp5fxvam$aB+*boL=P@O~^x2Lc%2hd}qhaeLivrf)J@#-=u} zm?ww|XBLb_)>|EO_PMca8Fnz=Z@qlzyN+ZVD5XqZDP6}b+QVmC<;>^g%t3B06Q~G~ z?+E7y@^~a^3ugLKb~OfZ2Jogi@VRrPRRGgldIl3?z^Na2GpdWHiS@-^;=WKx8+l#T z(cC}SS2lzhXtbqvZ3_AwZ8UCfS=)l%7w7z|kRK%no>v2V;{$o?nSbS~0M z#V7G1cPTt|zSN(>yQ+7m3zBiie1QBe4Gd%Rxut6(X5@OpR*w#(8)V8swo-Sr9Ohbo z(OyrvC&{_ecxJUj4B+OO#_{cNn{@h|Ky@g<*iRG3Kh6VQ`I0Bj7E_(}crDfFuR^b) zKH7!xuO#Ce@Dew{1tg3~ zH6zwRVxw!OEKo)JPwLdYwWdiM?wRK2kmjigI$p*MEJ4OKrwg6Mj zPP<&ukN&1GklB$6GXY-6N6ODG6p(6wdfMq7!HQb`CE^EzYYepNbIIzvKP|*lp9S3F z6Nq8@R)w+ws;L~3&&w`;dx*SC09FlTk*er&$3RYnN5~Yr!DlYbF4CQFC?a8{=n3ZV zXQlv1z)XNm``;AyY$U(@M4xyHn#~Kuk=(e~NIfU*Dx- zdAwW4iw>~boX~^C+4``rHa--#<~-$2C`Z#QCS6hy4a>Muz(td{lX&RB+5cD_`Q2#{ zSaS-z9}C7s$4vp2r{JP0iQFoY`f5T9sQ*FP_&HeIh@C77$%6-9F-jsL`DmKi`9Xwi#3efihCtX5{1 zbV*=4=hMT4cIdBIVc6hW8jRo>=4*|DVpnan2VW|qJHSzRhw#MJWqj;53FjgItH0=v z@p&po@g3|HvWfmSUM)#W7`l+MbDY7yS4Fi7^<@0r55enIQ8kXz3+;j&B! zfu=;w(iJECPqBoJ+e!AD;6;xH&6C8LFfL`gO635GbPoC~o#{fVCXWYZej1p2Z|(LP zuA;6&okyjJLf`m;YqhHyEF+>FKG4Vy64~0Lx z2b^!g;6QT7f2F@=FhL zu`p;j{AU%0bc;aPWwMN4^U?4`kXK`aJdQirPM|zFjS``Ky2q7oCuLDEeO<81ZOI18 z)F&u|%Gx}GN&3wHE#Zg0<^5={2;94iy(oYDmgHQ3?b!=P+eqW?)*7)7*2z5d-iG}q z@8x`rwzV>rQgq((&F;$fGe1?_KKe2deJJ6oPcxRraGi;40o=sDQr5@n!Gfws?8^jd zucpuc*0+1-z!qSo$G4Bo)PW8QXZma2YTr5gu+q^32d1|T`>|msDE3Qr$)x)xi5P;< z8-&EE^MkYaSts3-XaML8a%Na|XbCmcH5nDg4x@Vjp}^)1-xZKFoL7!8tr3m<*mapS zl?yaC=2k(%1xBP3MyUYO$(4C!4>9x_m`_4w^@!HJ58{hH074QjI~5@Mq7z6kVF3um z=0SLo;tqY`WPxp*drD+?hW{-LoE&yEtQCYp6DA zyX0!`MRs}K4G+$0Hj&S^@JU7-(47P5Hg!Pi#ZGUbUsn^*~(6l@QxUFK)UJeB`T+e zQ4a>ntcKraCK@OSJ?!!G_>4*8|1qtGe0#s$)cuIK67`J-AW^_Oc~XeG&)J2s`4B_C zl=!(J=hzIZNkr}wdMqez3qY7J7dHrKb1|lJ+hpH(0eDdVzQKriT@YvYtO)Y>Y=lB# zC_l$#U^z7o%6=|~Z*Mmp;UqkR4N$uxIc%WH^^PS98mYy&1HS3-ZIkt{kXzrRMjw!%`Gz{se|G}EE5lwDL0hVQ2--&I^-fpF$cqS zSjO9uW*y;0!;u2bm3VJfl#D@#JJa4t&aJ^(e@8{ZA^np-B;vI)mY}`5g2#UH#S6I^_gE)FG;3_B%Xk8jIQr1(WJO=GOTXpK& zU>olYT>x%Dt9aLdL*|X{-A80wY>+w@*%*9<HchO zpx2lnJLnW1j%%%qIVke+F8>Gsu@#$#j0>+EEfdxmqn0a1gcQ)Ko)?1G3@tlJ9pif> z^V^u9**p7Sa6yJ6#kxfWy5=?t9{)Ez0r37zDLgBgk|Lfwj*en<>oqAK%HkZql3K-A6{mxEb905dpv*Mr2>gB(;a@KC@T=*-VOZZkGNs@Jz|QOQX)ZI;O{ACK_op)E!fhx@`cQ8|R-U^}LeL-Nwy?Luvwu z{{C%@`Tgwx8d)I3%K^cn1dP|iu9+)YPIEw8z==?Sl@-p0eqPuN;~&5_-*3}jAIM9V z<^WD+;g`*}Oss9mH8Bcx4zQk#m85&(tKRbZ3o4Z3kYIx!Xms5qL6a_4uDu6~Ca5Kh z*@lz~+x0`-{y)LFuo=;TVocv<|*M?bB1rmjHVBS5`Ik^}_Z6(kOo2+GKaT==sdkjx>5He|( z!mIgx!?<+z!`LU4q9%mA2(jP16c~An;#?t2urPs!=>ddR29L7(8vJ)hBzWEy5=gUj z1h#$*Q@>X+9Yli)ZVSj}S%8)?=Tkq&3C}FSA?C5(XYuAGezsD_;6I0lU9*s4!Cjo* zXYa88DG<=hRhs?r7&*bw``8DWv&D@b8}%Y~I@R~a2M~0NhhzG_?u4ItdqBzs zoshaPFK|*rzxyN7@5jWwE6-3|nd&+|LPdXM^Q=m-8 zTM8l-x=R}!-_39uuaG4Gw3Kw%Wb_*=DS&rDzGoUE_^OeM2iJPz7>!@Lr0~V%eyA1c zCbOxSQsVt75UKV+gTp73?ddIDcbe~pKn9q{BD+VIg*#io5NxSDcsl6bDDgS;(jX2M zK^thqt3Y6JAa*5C!+;!^_lSpVH%B}mcdXua-UNOzT8RkPEO|E0>F;rif^0jl-Gsb3 z7NBb~86Q{kCD>j1a!3=xT8y|_sxN0CMqqA4R=JVxRxxoFGl{tG3=>VsJH0rj?D*f8 zT~4y?*P3*4g{b%=r8Vn`os?3Xt-Kup=&I)sLU?9eI|D6frOaO?IAry*s2U+}34hHU z)P)1Qj)U9_Ah?P9Uma2`p_Ow9K0`=@2z3+9;nH}@7H>t{!N7nbf(W=2 z<;}0`P+)!2*lX1fXDhCoB&Ug6I~n_wRa*ANYGy(JFVyssFuzq(QmY#0m{uE6;`(oX zXPrp0!5Waz88(+J1fDXn?U<+uXS21u#-lNO^+A15(imc1p6_>_ZitC3W1W>?{+@c>vGtE@!FDWqU|yyvaof2$yQooKg(FF1z>FoAm5Xc``n7b0 z-hcZq&q%w^Ni;Lry#|G$8l@?iNW(oQUi9CUx*`l%LKOSHt`0lr{aTLdyma$tAFzKB zRBJ=;FS-#}jk%(jye_CgZ-06A;Onl#J`@6vvrNFrc|3=n3hE*vXWMTEdx9)$N;+7H zCg4?}hg0ueX_3$OvRGU@wm=gC=B}34Dtau4z|Dj13Z|qVcc192sO2tt+2oQ$0$;c_Hv20GWJDz7yonr$yb>=mZWV?! zCGXb;3)ndyr5g|x9o0Q2;JFTjLmqV!V#94e^UWfMQa~(f0;l_vl;dU(T=pAC6v}W^ zu}|G3ReM=8xM}C*PwGYAdpl5vlG$D5N0ZC23Ye>f3-qQ{B4~B560>c2nA9u0c=Co> zOe#!A7dhEv@+*hQh))2{f~$r9_9?)|8Bt$77&q||ORE3oA65T}9fO38ZOKB2EHBy| zqW%}9dZa@O>rsD8aRqu+7~IXmEieTh#@E~ny@oa}fKG&~&!%V-eM!UssNvo#9zP@F z59O5EN7DCCc3PY%7Hc5m*yYXW!iR$doqF4F>L~)bXq$8v89UU!zTy1E?PD4cfv$7H zjY^fXS~@xNi`Pd)Cq#zsCVQ)xz~I+OHTf+>$UE#clvw18k|mX!HTPAb0YXr3#I7-w z>l!o%U?x(fU!p3y0V-XND+t7B^-Jo%z_cnbU*Ggh_C;m$c-$zvNn(DSLwu3R^me>M zn|gD4&H5xv?2?X6h(1m!>D%bFz)XBPlrtVrfe9Z9b!2Zu0sZ&-T=G16|C{%>u@KMEpOT_nIw*bX#D9#SxWs5*xD`MT} zRIz4}<95;m5t>95$@2w{{wETbNUJC7Bu*>Rs281MK3Jy$!Es!#Bo?f@-7UKqGcGmY zd)enXYo=}?nle#LHlnwSqU4_&2b8Ucq=^YCvdqUi(1A(-2z^}yovp$;ArUUhYA9Xa z1zP=ye<9yh7s6#BjB-CQ5i(cy$f$|;Ai=y$&qLO1VHj)-RSW)GXMn@n8R8bvWHo zGKEW^$QPqs(~TJL?{!sTe6)uHQN8BPI{t#E_)PghRH(6fkjgTXT?psLGI9#23nO(C zZ~u>*;Tj}H1vH6{+1W|xk>xn|Ca)lhUoyQ7Y*s{9a~QV}q@AydyMqhUM*qWK>cc6Q z>4?9W!AHhk>X%{gHriV?<LtHYeyeY+N?RPSOcyYFY=+T zS9nE(E4z^{7q~8P!pL#T5+Ng67cXqN3r(P#6`6{$4IlXl5nNZoJ_2+@rIKd0M()Sc zRDo$XhnZyGXBv{&8n;KP3FW8BF=sx8J(<{`t0AV0lNtSa;IvVUv}_XC+|#d9TzHNp zY;AZI{=9|bY)cpPFUkKEcXX`q8LLv_Zd!cf{joQnA^ikZNmA%01)j-LxaYJuqr_l< zmM;&BV_dza`x61#i@GA5ci9gkLN|}Aj`A*mV7sP->p)VjD5_m<&;zUM?FZj-Lhbao z$HL9b34F8gFeH@6$b%AH!+8x`6td^oslsWT;cc%+r-$}rG52O9x5dE$8n zpuTn&BlO;&Xy3TTve`s*vSiXPUL-EMBXYVRDFiIo425Ciw|O|tz?q&MGxOJgBWas& zWAjcO)5k;4OCnFyW;wPOKAZmQJ>zZV+cZKj1%ZJ8h<8n=K{s92`$>g*vi*d_n@ib2 zQ`?%}V{y~=v=9lH;^ye$BFlec#$oGt0!9H5eV22t1${VdVBEfvygip4o;%;w3-XK z3fhX8K4AEVFM7EC%Rh2u<-qNe2UZ{X79|sYV>VCgwPteO0vn7dy6ss?bHnV^Q4hqa zTN`{ur9_*JUl>T4)FEA2I+1Cf(kbQs0hmK-ggmHl0rq?s9CCL@P>y589E`{mRzCem zCg`3Ln%i}uHck_*;_XHR0`U_NW<{ZwPRe=${AIvT7S0vi?Qr*t5Em57uPX^jn1M(4 zfEFONTJr+gzR$J@)G`{FlaxF3kPCNj$88Q_I{1u~;rTh13;C^?Pk1jej&&o-$Fy^iuvVcL%DV>hzoLTv=h7dok?TUcbUNgqN?){2xP5O4 zG|kc%wtqID5a!e2BZ>m07TWp-@x^>CK`w2r*aF(&7cn@^;xpSN<^G6w1-cZZY}{bp zy!~-RBs)Qdk+Q_Qz6>_|Y6&!>z>X`v5qla*)-DWKS_lb!_l|Eia-9PXabH6dS)M>+ zO0SPTqX=WXKIRC951uw+NU!0(hiHa24XACfx3+iXTeX}B#tuO`Ce!?M1~R8rP+|7+ zjhm&-pcX7SL6gYS1%s_b`^e2BYcw>+zCccon zE3uf(4+RA9bh%s@;nrPTx{_F+ul}wUD;BcNlm+!E7w{Zx=29Fl>i`>Wy3vZ)xF#*} zp^1R@@2`@UORHyYBtji_lSavq=~|oITI8r5FrEP$8lM1a)w66?#h*Qn4y z;U5QmfYKi&UOJ3#(Sp2oB0Pm}nE=_kJz7h`{!+s-dk`5~zE~Mabq{rY*|1(JBoxA} z{!j0j{s}V-<=cn2N=c@N0A_@gD!6u+`t>-m(5E~nJkt#*UVu#mbP$_%)%Limr9gF9 zIswRZe34;^!fRz(fcT;;GK!0eKbBX?`fsZY<#(C$#95A98t>R}Yo1yWp)-ykmAUE1 zA;m`5X%?r+JMSGfvCP zXscp+%cs`~PTQDC;BwSKzv*u&2J~s)wlzc<_;Lxb8-St_1% zjkqRfSfpu>!ajxpzq5i4?|v6LG2^2iunWR#W&oTg^);nPYoQXMqQ>rR@T%r_kU;CrCt?<* zG@TGR3SiYJiaMLNc8^&`RDGwx8`NNVk}Lc zC5SbF|2*VIUyUP|B+b_Y8Y3)Qx%IlFb@!&Q$}9w=TI;?`77H z1JH~C7DCa-4BGQo%r*#MZq!Yh0Wl_cBAcn{h8U7jOwA%k&vd(!q}ulb;OJY@9&^IX zER04EzUeV{o7U#2Hk^t642u^jM&p^BjfehEV(?w2Y` zw(jNaSf(v3q<;=t;aXgAo)WZ9h~bnxI z5yMof!bflpUSVb!R|r500SP;~D1Zxf+@=uyyeS)&pQ#?mwN1Z;6uja1RjGrDLThZ% zn$ZNY!Z2m^3WcuH6}BM;gx4+hMJEur@yjjC-pHJhwvDQl05w3$zX4w`#_7CFGYK1j ze^%9^Lb>sTqCjG46C^EtA<$n7i{4*MMSc7T$r74u5O!vwx?Egg6!@o?*{y{_h>5`# zaCg8kTO_^V9T2ysFlI8v<1)1;Y^OmLR35nnnR=Nz7u&3{nHchD|GXpuG@TLQ4b+!xi4Ry_#_eQoPV6pUnU|U!e`J zbz$TQ8~_cU_={5E30?GcsBGznE07i~@R&4HNps6|hg z;u7wtw0;*t7Vw#b@omOk=daP2<~AD?d3vw)blU-tA#>VE{F67E6RP($nV zn_a;4?L67OyuRyekKjxS>jiUdE&tuAA&}#Lj*k)x5HiV!*Chp_&yN)a_+gw=PJccSeD?arKn*F?!-Y*{6(&YQg z-&C$xU2xR<4*rOL)#C*+rHgv$mHfjnM;Ge}5noXxlmSq_Yx@2pU23YpNzwPLnebi6 zX>O9y?;r094tJ9)^$#d#O1P6m5i}{+UpkxrAtTKHEfZys>Vi zE*Fb9y)4QH+%p|u-jAv7>Zl& zI^V@x^jM;nmuVh-o^$xbo|hG3>jYjNV5vNOR<$!qxwluDFg-s;{njc#XnEcUJgoed z7YWEwft_dgsXn*Zu+-M*YuX8~e1rSF79AL`f0?F$1M2?TUsX26LcO|IH- z?!H;lWzd7^UmhX;|4e>dA#}xWziQ7NW-8YmI%z_?$XNdQPtOuJx2X(#dE7i-pJYupSu zGvj5}b~`}wImB|zHPd8Ub5L+I$9YG9OKFs6r&`OO?(dI3nZr>E87S^Uw&i1|pA4pq zdS3q@g1MlFgNJ%Fn_Z?2VbPc0Qz5~Lx9jeCTk)P!2m$b9sYAnr6aQ?A)I5g4#{Y?| z%E3#X#nNy=nuD19k-8}*Z6xWY3mM+&9_bG}2cKN=iD23P+MWJJ1RY$C%H0Edv}`Wt zg*`T0S$vaw`;tfYtFiB&0llKW-Rf9`%$)|Eg2gc@HafpR;{wnr#toX~dpJNNEU?Dw zgw)+Ll*9w3)Lw-p?w$jlvO#`jdcGCi2nZss*m5P@@g;&saTVul6Ghh&^iq+?V_xCW zz)vQshgci_V6^ZW3U@qcxTGG;*S)XQ_X>baB}I_TpI^K+rWS`cX4GXaBtHg3$K}4@ zq!KHazzhff@EMjR;I}rxeODpzduNlwtZZxZj%>OS6k(OdiOZqa9hWj2mNBXyCFAm> z)m?H|n<(}kLr|=|OK?ww0Xd4tbqq*hwVg+Jem3ufD>HWs@V4Tug{SU<3%IoOa`15y zdF5-#ZAYm=XpDxJNGs|Jcfk&M;gh*sj%5lln;r-X>{&aYSlB{FT__vFdc~-(qL^-h z;ane#0i1w$X~`~Tb$#Hcpl_qlOxOcHgPZP!{~|ruqU&SsX}m__xlBOTrSmytyv@5@ zJ&ddh7Cy}Y0>caiBurq1kV-N>)5yOBkF(t|(dQCW9egMotcAj6e(B^()(ZqVruh8& zmkzL!-d8a`sa1ksO%?YnVy5^y{jZbxS3FD_fgGAQ(j_-+e z+!Vixa)C19ZG7R_=EW7vNiuP(Rn`V!-<@Zm3l>0OXiy z)2F@sj|J2X_&_KUvl|3!c+JQx^xsBoT$&dOVOu zOxESDVcCqZ|GDfU!|%Q%YLKM9E$iq1o%X||mtn7Q#ORfP|BSjl$2Jj6n(=FjqRLj#wMGV^DQ7Q?fWLA$c9q8G|W1kio&Nm7ee)Kw1h&bh>HuH8#C2;K0OE>1BR_*B02Nh(;f* z1p=UF5Te~x3xi}3W1i%xS|~2Kf;x#x@wFw#72)X*z4#q8Ap^Hc7nGsKKo-N0<$dOZ z8J17?`2ccqtAq1_Y}&!8F15@+P9bne*4Mhy+)%7kO@tPz$S7i3}u^g}wnD4L0p zhc@uhA4fZ2WkMoje8=Sb$%b4>$gF)?a^TTLi*X(yo}-vlU{3$jJy3H@api_u1}^kw z(li0&Ig1o$!i??3ibCJhL%$ew@F@M)8k#I&C*K|yF)VOn83RSJVcHNu7VaKx;-I2# zyaw9lbf*=$#mlY+h}tt^*Be?z{YFV)#UH89ZoSxhE5>^$2f}JgV702#h>Mx9_E%yx z+OKSoYg*)a7>1x;RK13_h5CaZ)YquKp&NXq0?olo=welZg22v&1YloFC2|tS4+1b! z;Sa;OH3xZg(bO=g9bPG+INc?onx~*o%snreo232lj55%#vKccl- z9B7c9&a&}1hU1jPn%&R&+R=+xc$WjVakaDZ0aGX;T`6{K)lHnk-Rt2?q!b{+1e!~m z-W?w;z~0F%jl)JrFpUAi>f%4T$u;J^<_)PenLgv1gyU-=)%q+s5I7MleJ%^fNOf}~ zsfv|f{>&K3sp9}sX7PL!YE(BuDRPdVFO6|0QQ-OOf7>*hjfb*rJ|}sSnug4Uwv0wl7W{s}QfqULlA~+MbwmM4&M;en>rGYW42-D9wjw?TZv+v7) zd$!({d2THFb2E}F7KiNcaNKHuxW;e=;S~Y+C@L7cIPU<{h)iL)5MZ#x78q!wvHyR< z-%9_3Lr-B^8+D+^%RM*G15geG26U&@&SNXMOEa|dUX6)ICc4WB#8|~y0ZYPtrTjep zb^{-nxhau>ZB;aSAWrB~>_F$lrCUs%AA^RDXDWir?msvLq~x@!%PMPNon+GV{NG*b z5`!Bv<+6)BRKVHy#|r^JVUex#u;MrV!BASH!pw)ufQz#G5{USE0dRjp_7)-y+%K2v z>a@@@E_CkqL`5zSAS|rO6&bsRLAdVC-Ds3J0z~zhKlis)K6Rwh2i))ARpKg8T??gt zxu;AAjdk95&?TDoVD)LCw4FEhy~i70b}``%up~=6d3u5Ra8RY47EDMpk&W;$7`<99 z5W`h?no*z}ksOxU6#CWu!U7npVJnwoz-DvpKbX_SBt zhMq{1thDLVG@P+L@8ytIts!s~-s{Qyw6oLh7j}=;fRf-)4XpmGo|ra^t0~Se& zX}A9qS#q)|--74x-v>shS7Yhpsyk0KvRVt870b2O&@*tbcyKPs{lE0i3(_5}RM8sn z93O@OoD!8!48N^`og$yQD_&fJo#UXHT6yp{efCQy{}BHF{U~*AW_4#1j8Ddowlt{_ zuNOt_ZQgo!U!=l!j#n`PDSqVpfExLncu|{6+3Yr%asL;i$4~L2Mu?Hm7Clr|cyaK~ zp&2@a1w4>*U|@fAV1kTpin%6Ak3xASDaH@cbK!kl^VARTL=d=X&=X`bkBROX{0B%q zO$WdT4Ow^cX{k-PviP6OUbI)Yi6kd}D?l7cUfix+Ap^@LHX)NLn_I>Jrg$=yJD+>0 zp9)~vgdP08V3V$IMDp+Ob$hu3U{#(M1i9R5$^K+rXB@9dMtG{ZiIx;YlaPY!A$BTD zMC%)K3d3XCj{n{#526AL+9xj1+CB^+hKTL{et)8U(7hNwqXqUHAQ{qXb7q5413&Nm zF+hukwk3$K423T!+ollHdeVmn`l2=qllvw&Zn#WtG3EkLw=G%F3RFlAbbR8)InS(C z4j{wf47lAvJtA1h_!qlCC=O$(Ph`fv+(X|TDh=kMhsAp!AbKL)u)`+YjZDBhpc3^A zwUMzOLeDvw;wBX_)}#OXGr)!}%EQ{)!(Cv(?4a0Hp;i0`TN57y;Ex{BG zqPI;*3458bS^>Hm%;_Vb_*I`Oo2Gkz({^vKSM066H*fHTxTFzJiRo~!#{Zk_Y5BuQ zM8_B`X6EDhm*6AdnalYrR)B8o?z}9(Yui$SwV zM2PHk_2(2=*bySj*MeI~&ik*4W?oA}TtgFs8}RVH#DsBvCu3j0Yz`<9FjE0@A^7{a zPw3?<kV6#s9~G6!kgx>c)mBI?*NJGZE(;UDF)|ddB_!EaalUJ-NNQ zlu%$+Rbl|{0&54%L9~3WlJtXeBGPsgrW0Lq1Psv@DMDV3PKw@#joTZJf=r~+3VdVc zC96mUSQoV-n*gE%Q~)mGW7F$tskQ(wvbhf%943=pLLcIh z@)`apD_rAw?EdS6N`j1SCPWl=Jm7Sr*_g60$@U?a(ZefaISkCYmyN{)Y1J`cJ@v#G zi?#0YjDg<>Ve|WTa4BtQ%uD!-p9KGisd5eu_cIZQ2jeX{vfaX*ku&ZL%_<<{PcYsm z2um~fOI#jYzWv&p3YAE2)$OZL9nc zbf)i8_i$Hj^XqU?Koh50AoIL4xVJ&8N_OCuv4I_6{l|}+3e47BtUfQ)NU-lXX6tFk zt_WUYWRY(Zvj@fUjJQjHh~1ctg+Q2x7#;2)9}hQ%^>y%uB9irhNndDNyYR~;;=2wc z{<{f=%c#pCL7Od{5HUuk%9eK>Q9zRyq$&5|o179;nTMa=i_dn!!|!dJutHQ0Ql2B1 zY5FXP^dD!I=@FCwb^~Ukj{zer9}Q-nB{4wXZGhZ;1l3m8y!B;+U+B9iLc`(& zAkpO`14<9{igeds~-6|?dD=&+g|L=caw=_cA;*aa30{j;#gv$JD?e0y;w(rPwa#XqvZ?CaX1*b z)y}O8{a+tI>;RJ%1?Yhd$~gX9@*UyRbc5=G4)Jj>aDAAF=G(0SfQJ}exkPkLcl~qS z?V&E-Z3?v(;S~sD}8b)?_xBV=}aFY3{WL%m(rauX}(41;91J- zI!O6J^XWA}%3Gc5c{@Xu7x0f=(e(7TYL?0sb+0VMxevq?Gd*8DxPfYn`8Gn-0vyEc z70L91AQ|2(3$fBS-zn2qa&U;ll)ltImQc9(3xo9U+V2{P@dG@?&rvq^JXGiWo?6HP z^I1nQ`9qIZyBAs7f>99$&Pade5o!)yA=y?qjG6t)Kkm(#&A)A=4Z$ODoHi2%6_%qc_6Qtg~ArZlleReOm% zv8d~kc?0^)q37G>B;_xI_-X?coY~U9QQ8{>ONXjLM;}~e+ z_E8=uT4IaD!m0+F|03#AG^kAotj|PL(rry9ec~!+@6&5q(K81apKv*#@~LiByk!B< zt|FZ*!4(jllLKgYd#4UTb-Y~>D#857Ga0CJ%A}BGhXbPO7SRJ;TJ(_fuZ!6BoLJy8 ziW0G5(m{!wZdZ_ASWX%dg~Y54LeM)eS@@KzpACsNLUgjhdjb*GSwLko%R`Yetu8G= ze*^teC!gY$U^fovQks;gXMFbSk_f?K9+W3Ikd^J{Tz#fcEe}{0iq6?ndG820FI1>b zJRkMTM3J{qS_DVpQ*baN*iK+JnQk4{VT%fLNZ&gGOvQ~iSLvkjdF$Dw#z;eSfwmAT zlMRKwG2uc1x&&TeC+b%>&2(SEK;|lHXP5>y=)}V@btOvHP40yBVcBT!4MTKusYfT0 zSqLWNqzr@4H*tQ}nMZc2_u0@?spgupQnC~~(n(C1#%IHi!mfRAfq`9nFXyDes{=G$ zxL`dd5_X{iAT136rEdzpgA)R&cT!8y*wo@=clU%NqkJr+F2s|>eCz&VwC{F7SiL(ONUhNnPNIOsW z*Dsne@#%wCrl~V=kb98F+@in4UI6+73`0_|Vgy|#MQ%O3t42XJwh7gRPs3%;6R_JG z|0Gb?BSYEY+y0s6pJ|bI!adC!0iOAAT(LHT?YA3{gu*>JP_V@}vt5M#p#BHpqiBiC zxYw~sRV?wD3;hpdmsZQAmOi;#pW~8gXW?57+Q(PZ?7RTZ7o3=~!E1xu+8G}+4os{g*F|-v z%{v$Q(aXLBivzkX);8TGoDRt^IJxYMiI_R^&*WimJ6`MTg~;C(X3tR3q1XTZ3z>~C z&RTFrib%y!u55&u7acGdf0c!ciyO2J5N%uTs#jz_Kh4+|b^&y2p%MpydcCRA4d}~5 z`V^vCS%UAP*q}Ygj6vXlRpSy&WaqUA#qY6%E8}-4zGum{Q-(i)SNmuSP3(P^My^dP zQyP1>ttA*n#o2%xzywYb=Vf)_PzZ=SHylY8)<=w zQU{YXUV*!ywnWeb%kSV54}`p-Vv7N8uv>}Sb3xqQArGS1RyWN8gjfH1-YG4!KrtF3 z(~r)!Wz!J_!5@q#0x*fWAb`U;u217w*E*W6!?P=uvjXb;hID7wO4l5c|N4*jr4U+p zX)J=@%?4z%N*fb(#B%(GWiWhG%Ao$EB-)}NTS%2(KBmY(NkKGcl)=shH@Xqi3_Bv5 zo)+|Nm1OW6NSLGT0q@vs>>^sODg8!iYJy-!1l9M~`Ms)#5fq#pnM% z(Onj17;uZ=oa^1VcUj`ECcmW82zkK!UUHe6YEm-%mcCqvne7>+lX7fo
d80t)x z`bp3|Y=h{z)&4MeS#*V9TyeXwG;xUOh&Yq(rSI8tk+_j3kC7K3{Y7!mJ0C;=38Czf;~1!GKv6Q;gN@P5>M7v) zKqru%^~XyJP?V=G7>&~9dmVs0H2y9;!`(8YzD^jqAIXGm?ijj!1GsO>{YCnd-0K&n zf$9Z{<*H*%>8C$%EL?Xy8~c$WbbA`1WxGZ&0{CXvbahEPZlb8T$k$niR#ebXQgFy_mq2=!AQ^q zGGfL%K)Hl`s{$k4(1%IR{6`xkTH^e#26?Bdn0*c3c{u_YA5$0iXxOU>Jz(JGP=P^0 zlEmT1vxA!qw?-#Jw9`^10O@Z~SfR)(0;FiO^|AjFGWKC|SCb9PshCXM&5vaE9B3H5 z8KLaa`?kdME$}Pv*5L&OoR+n5}q|X1$wV!L|7y> z34`&A16IAA^cV}2kclK^8?Nfd*$Uf%>DPe|VMmJZn?MNE$4%9R7?|4r6;y-01JDFO z@*0+0nb*N7ILNb4mHL^AgNAe?VJ6-}@D1p~hCuaw+Wbf-8y5paO(zqyOaBQzHwN!! z3gS4-H{nKOO^f1}$1LThS~djAJ`X9mQqSiE?5#Tgpl>U_^-MAwm|}c3+lt06P;=B} z12Xj^Vrldv8-R#Fa9P=gg&b_~niOMB7MpQBoWpvmd@z&OI7ugN9S>;<+5#_$XHj}; z={TK?e$^0wPWnjscNzeE7DCIByJq+=b5AyaDG zRg(t#@N8$eBgOC?s(_nC+)_NOh5U$|55}k)WhV(-PB8c%s`3hW2G$QE_u{h+X{oJedr94HDLYdqJ`Iip^qi!O!1*I5ffRF0GBy zNy1$@+&q=0u|FqA+4iy+u>)z_^P9{nx#>%c7Z6{b5gf4SiC@XUhSOU)## zD#>Ycy{EX@<=6a%9Z-Ie`p}!d3kE!-z{u^C8DG25)&16TKoV=w^$dC6-%aZxv5?#Q zA|d9$KVo|jYPXogxjryg`OB;2cQWC8iUJy)4?UzoYM!Y$dCZHsh}7Mz)2_?u-SK5{ z)(FS^sB;RhCx(&(BWPuPOqlV^q^=GEDETgZ!!7FD8PXUDO`C_}Hn0i6&PY_K>lI)( zArX!$25wB}f6MzTqwv@XP7~C)Pf_4LV(Oec{5QTO%I0*ps-A=A*m$HssMr#jv`E0g zBs657 zg2N`R{jw&rY|yA$<_3zIK)M7k=`k=5{-54PLBZyxZKN(td-VE;zx}9_$`F?(VGGDB z3e^XS}*%jVbs@qgsfZ*33j z9a5JduLt^QgkGYPNL;L811}@0!W%7c%r0l6;C$c-LGC@0X}L?)-f1hD%2Z3K)J%-h zpvPj-u+Ac7CyHvGilD4{A--e}#pu4o@TWVyujDEFP@Cpm|6F|sd5X@68r=fZusV=G zRogDZj!_w(XSb&8d&IZNE_SQ6pJeTUtE3@rRhE-Y=-e&(uV~gqJ9jJ^_6FY^rdrS# z9SQRstR9H`%JbqFJZ{6lk6BLvEn0X*K8E1p2)J z7C>?N`XGvgGPVeE>5>I)I!rrdaN$4WLJaP84$vN%Wz)obCRS1#LTNH=+z4j(xBn_pt-Vm-B?@V?-Z24jQcJ%oSPsZY2iK5@t7el2{;h$HOaLY z?^y%z28XL=C@M22f@KNBtemt*Ui`l6P-3RtU%q8uCGkwR9Tp@c1xK4vD)OJbYxIqU zVw;yzokVj2agEumY+Q4E9Dv%VL3r|bwH9uxpBz_-z{|{;lACS{#>z;0g0O6ZT>ZB~ z?07CTt3Sq2QlKjtBx9{yqt#vPFRxO5hT5APfqTyCSSS=h(J1Bi~y8F|QwYr@M8 z*|$C478>{CN2tbQ+vyVY{$%F47A?ip<@ue%MBOX`0KM1`ev+^+^YRlS)a*acfD06! zquC-zUW7eEy(D;U(fl<}-Q)v zNel~@yV3y;bUsJRFqaWzc|LV8t*DM^4i1+1rvY7R3Z~nDTsi;GjZAtUxGki>W*DuF z&M-G?V8%m@ZHzDF7?#xg#H4d)e~a4GWwE5kSQZ{+LnOLQolUD}85!)lpO51f$mmIj zKe+o@n>gjOw;fgm0}rDRHQS{8^o@Z{o2jMrRx@KU)faMBb7FxHcwt|^zn77X6tGQM zKot77aBp2J?M`5l;6S4yuQKey^*k^M;x#MFRc21;XC@uQ1|A2&>t`NbGDP53?Blj+ zg0*xWE~nl$-aFQWvB=PSJh;I{c*WXN*|+~4QkVJR!M?f1gyQ{z(asQb^A8z<&Lyn? z>&UH{!0583v;L(rV6zB31R*kw=%3H;^ScBui5@pr6eexrt1vuZ-k(Z=xH9T^offhs za_kx(HP9_84tL`G$2dBYH?>uq3am`EWL(>q!dY{Ry(+gLJSW%AG@wpg&>jy-ZCigb zH9~W0EuA2NU;3B$+gS18vggQd_vY2Jann4~>H0Deji)K@Cy8@CuFd*Z)_qd)5XB|X zH*x_KHOA|w6Jqg#UeiJ9@|+vYe?RQi%M2`Ps}NuyD2-cSR zp1t6-wAWJQFqmtM5lo)~+!J9=a4tj6MahRivKnQ8ge@}m&iaxU$z ztu-#2nW%S5X(SwA!V)Pqd#b(yrIqp$NJjZOk_y)~^!mcxtC#6ypVv69bT00tR()sH zm}l^DjCsL#6+&~ctuhH}U03AXn_ek)dV>eQN%<=L#P=j-f}{7csd9}r)9O4{QAcR3 z1(^LnMY!ZNAgTW51VrspT!~|Ta&?%jqB-S+ zA`O2+YVlZr!euyli<@D4FV7Z_YjPVvAWjL@JpEN(WLzm?#x$@Qd+@YboU0MHs2Th} z_k3?x2-*ww&R158Rv5->b~*Up45f8jsTD3f;W|5i87EUr89}Ls+$+48Ux|c%>`8Wd z?{8q?n#Uz}35kgn*i?JhSmsBV5YY60A*}fu&6C#`BfY)$z@_`!Lf69S`UaYDEjd=2 z3ncu1ko$`f@JS33c^n%cC{*bp?w*d8RuRGu?u2qz0(8+O)y)kMUh)<7s_=hyI7dq) z4`sG<#LIo1BQC_}UiOeCXB=GhCFxKnRVe!r$T){**5r2cmWFX;W9`Dr>9`=c<5e4| z{f399*D(%TF&8^1gicuBI!7h=(a&qhT+s-b4rGva%8{I6`i7C=vI=gJ&4P3Y-6G8q z%oSiA_yjVDYc(sdzR)6J5`@o`R^+Nt!lE*=K4~Na1_V3+v~@skFvzVt9keT055`D4 zj!@(S$-FR+OOniX4T>IY5@G~% z+Fnt^zKa87+R??!9>4-%r|UVIk8g4SfiK@6o@s65mpPdYH5`kOo4fR7^hWx9xE61U zGmBMvUx)|+)4b<}NP`=zzFcIPKjk^6nKs+c>C*kPW26RXHwh6yTYg{MiV$G zWB;~eEB-U2Jb%SOAR!_$u+7fg9=Hh!l+)+T<1$d!%&T%(nT3rC)kyXqp-y|H+j0|k z(%00Tu&`Q^-$dYurhh%!L^?fkCGC0L+3V$Rn6(xGE}3<<3-uz#R^|pd_~_=rd_;^g zLxIsy55}nUB=;C_m95!K-t$pBpXKl$B}&%2fG2-fXES_bB(-!4O<^O>LG&@SOZZq% z3nyjJdo{u&y1D2%ZT6En@4f%UZo6JB-E?@HrvJhOR?iJ1d0kwX49`#} zGimwfYxM#*NA(KGDtZw#S39W1XgI+ZwCQ=IG7lSWU5uc%hy8sHIOV1|0a)xrG8)4V zRYr}VOJ*5~@mEeC7(YPB^tjdtc1T|#5EXj7(mP6dN}ujv90?_~WNgYgELjrG^Eh-8 z6_sTrtc~`EmnGZN=EA_QqaC*R!W$U-`%)NhR3OYBuo4v0Fw|<@5@k-^XzGaJ*G#GG z-(=ZUXXPJ4$Ipo;`UQx+{O^qw zT6WH?K~;Dh8~`H|P8hZb)yYEnbL(OwRiramnk*B!=B(O+orY=?Eao5KA1@NKGP}+{ zgwv=DHf)3)OQf&MNH^5V4JM!F&T_qfZW&NI?f@}?lR|hdL)eAqr7_s(QB$rsHiQpr zA!t1P<@f&kOF%EpVz!0oX7*10?b->gT$7rTNbq33Cs=@x+h~)!+x$YW+kVX5hLF!% z@+$%uW$m2G#oge#= zeu{+L6Ggl57UhSEhoc$GO}R^%%}C$Cv1A@b&1^Rig`}?o0xC}H}FNO3Ac_P7OF!F`_v!V+neud3#3zl;IE0;-QEeE2hut8+egi@yLk2NxaoVJNZSSHhbSvU z+7(jDhNo?6FNN6Yb}w)+35XD+OUe*(rjVvXEucgFQB^>UnuwXW#OWUn7ae7Oo!~Z> zzu#&vBK!7w;rn(G>Ufo1iH&wzD{t|e?~`tbD-FdQen#k%SiGiyq}(QR=Yv5FlvSQ% zx6b?PpNFadFlHKw*%VzMSP=6Z98jhfFeCSlx*foKPLwyvrEVl|suU?CNB~-Zf$sum zF71LjK*L!QF{;k%6z-KX#}D52GGf1_V*n*Ub@92TVUHe5$57%Hzu7LrYn!tX1^3H^ zw>{@s@F_wfnDn28gx=7NUsLD2e-LOg)7YgZ?Heo= zk&ZvHBF4a5GOlYeuuG`BJ;Q22f+~9-=Ed?|{i^Gc>aF=-vUJ_!V*bA)D0dN`qdKd* z1CPAi#57=2bIjt)PJ7`D+5o6HF^{*W!8t*q2%5p$5&{JT-pf%MtqfO#D86)i(ScCy zA0n`FP>(_p#k*m3HMGiW<}oD4e9(bAfrzOW9>U%AVc4+PMR{LQ=1hR(_MR~1OC&Iq zQ4SM+jgc8h)V0?lUFQXdJ?=!BO+Z$NR`S>qHrv1j45=0$WkE>)qR+MqS8m1&4M&n- zC$Sr-R0E)FmE+wE`lxnoWbKd}ovp#S!58*cYXH>jJ#=jda2XiKZvm=d3x?)_zGBLZ zcCrn1x#E@!)`NIHXg7XW11ZlTFl7x`h#odS{x3`^I^Ag@1k&0&CsC69x=NaV2}jt1 zt0Sgk%9c-MDLAB8zh-@LK`rkZxR!KVIjk>@e_Se~cyQ;p11p9?^k54Vrc9Hd(htcB4x zYcG|y1z-Q%F}@BxzDndU4_8SIkro@Y^$_Z5PU%K>I6HZHm|WVmFJfLzGVjS7i|R6D^QY5{m_+p*h; zN?7pD?X#42KuhC8Rs0pkH7C7#vl@+2G%l$RxRctO1uH@(1_|)rgS1hY5)kK;qf%8c z(?s!9jRgMd3O`@OsGf%xY0CrUKbFJ)8u4SD1qUIg5F~S%APrylz%$6ia)~2khF+LU za&7fTETv$Iqx^Y40z<^+nD(4U$pY}6pC*@{MIJWVcRoZb6}FB_p>QgDL@zak$MpkZ z%|3vUFIWY2WZRE5OYUGhv%EG`fWbM6-d^-YTLOipg^_)=Sudn z*sCVtvaCBgpSRnDYsLyT^=r+du6_Cj_e zihr@eHHUV|x5WSYPoJgK=LYHlmmRcpCco6NAANw&&mD_K~gyc{1vp87%oryM(yr36J$S~>W3HLR_Wa8>_QI?lNy{0bQ!C&%l|1_P&ja&p22d?&yEQ5k--fJ`h+1}h2bNdV09LC%9S){v9K zdI%@4qQfU8)NDPAAcsm+wZ`N?g{iCuRv3*NE^5Z z0)`_Gqbtp_YxQLwGc;&;TvJleQ#us47zR^x5hWra`gmH?uJfj=x2S0*&ok|dZa>~H z8YU~IXb9`=9}9?<{HOo`{zyqgK~%^?k&U>Yhcyio(9QbZ$m3h4&ep|Dijjf9`SBrA z?^-E5-F`!JP7@CrHcDCr3^|VPjnO>S`XtSJEsJ35ake zXVkQ)w9Dm?UU*}l{%}`80;`CS)@gwGEQ>;yU~rgjl2Mb|74wiwb6+>1<}n3THaEc8 zg%9NF&ea^HWSr+|flsz5UNsArh+fm!oPPLJWI_?7_Q_oKP%9wk*=Jv&q(0R3xAc{< z#tL9u2p^AOhnZnbBJIgsa&EwBp8)omfxW2C{8p9{NHajwhl}O_8#Zk_;sQ?ml3q=K z-SL)Zas<=H?&NUU)_4%38({d$ZCsZoPIg8xkrzO)af54@7%W_WW{94Rvh+(i3WFcY zRk(rWsxUs3aRRohZN;n|3)%`WTljeWTM$_E05}-jLCjB=6=fdFfC*v`f%$h_{v`~$?Z?1L z*k%ZhpnD(I{6uy_YhjY^HsT^05D(6Q;ForPlzMwy8_a?~fq99BT!xDC9#ryi>GOC0 z=*R_&B)H4Zaj}FgF=?S*+FjJgje&j`h&G#fC({sl*)P(~(eAHHcrwmy#XVSrNC*sv zdVBejC{lo&-o>rRahL}sM2lZ@V!e#=f}d*XtBNTUHFvuO(%%ad=KxEyJ&4c3VJ{nK zl0Gf!-nAJO-6m)JuGb}!h4IzUD~qjO#Bqn5nw(rmfkp)r5mzUq`w+F`pvLer*m}W9 zX!5ZLI_}`lzNTX@;W`C_nD$u&WMkY*^S}CrysLH7y_cmLobhqthn@Z`c#X!DKJ@*r zJb8PlKQbdYU?*d7r(aOkLdGs%bK^9r=HoZnQi#6S2PL?V&tW_E)BhKdW2hZMMX$K2 z?fROY@=+}QeabPbKR^&>0__3|f-d6}czmd<9%F#H2Tvi5&Eo7R_pA&|eRPrC6_z%C}1H8CB z+-fUrTcFWp@bQV?!S8}G{_2piL&`7_Z%V?ltj&!lIVOGpOm&Z1lsz5Z5oRmG64Q}$ zN0`33o}k-AMjU?fo-!xfj|L8fa_?Xt{WIeux)yfGw^K{j>BkPAMUQ34HUY&@lJ&9X zP*SKsa@YLvFJLh;i2$>e9sF%M)jg*vS{>t>{lezulAqmVMm=tbZ=nD3^KGKZ8n*K0 zG$sZYOhEMfB{I%s%4LpAEbhhSls1?t;@-^KyiT!gpc+@}VCLE&M8~r#>JbAY*(E?A z34FS*AVDI})jPH-|7V)}EZSOwjR=;;&D`*imj#!u$>J&lx^?(8-8>jCFCrKHgo-lE z`PhL|mQ*;8UVg~XxeV|Ih_CU4Hx3I*pus_sPP<_VmLk~!YyK9fBNve|>BTu?wJ~j* zY*&JK@q${;zwe35a*`m`E^#5$fJn59b7RlhTIQTv4CZsx60XY1-ew+9e}z`=w!M-AdziXx6}P}uh22e} zL$jB9-v^1gLc-q-!CakttsCO-Z@86B4p>Ej=fOB>)z7s$tX2l*D?8Obu@>^p)fZes z+%OM+N?90SX8By;=voXhix)h0<`SBBPz@gcbkx#FJ;)@jAVUU>QLIW@SK>G>anSJ! z1O19QvV71JxD6c^U(=~?-eoXOLh5}gh2zrPU@Lz6 zK7H~ljItqvEs9M4vzZ|(R4Iw{oHpFvkBYTrup}a`8GpjF6ibt90}sI z^R1*;fj}>B^#}@Gg0}RPQs1+WPrrMFhT1qui@XmZRt@FO39$r~o#`gW55O<^mVO@e zaKin6{Tc1h2|;fAhJPR0gMy{rqFJ0;4&^ z4=(X;Lh;H1*ASbqm#=?%2HP43nWMQ3TR46Ot?{GSrMV2Slrty<%&NZJ+w=1;0CZOl z4`x+m9mE$^@RgRrS3nxaAZ%eosPXx<* zpV5Vztr916Qi7+x_r)OzSBEFBz1cAWVwtoHpINx#5(`84%Rv!HiY3n1QZPUU_Z59>|-O?sf%x=>(~9kL0>gbyAp#U<+C3fNGD=+f|H47tf zbFvfq#I;}9Y@rZdiOqqN*B-dEhm;qkibNE{YA@lmee~VSysry6jnzy9uSrI}Y!bLp zIDXe9S0z`8uoxpC|a&vlx|?*rPDn_+arQcA@O<@u91_Ksi%-OwT{ z0}h)oNj5-E!O|RD(GlvNZ55k`P^if}p{I`$^cTlT28S-juZc|D_W11*a|IM~*)@R# zLcXv8+91GMKIk1@NCr|2n1=L9Gdp0GCGu&LG(y_e&Y{_B- z$HBtpIMmb$B})8EX;~UMEXEIEF_hOS@!iuL65apnzqeJopOa;Sg@hgs8r$52AD^0I zjeI?0i-)bQl?514-2;Sn(&nIX)-cb`IgE-7Q~=%O6!L2T4r9d`0&d{lvrO`yup^W> za{@^pmfZPUB0ua%+lOZuE|Zex6VN^3>yn5)1YlWOs2KpqD6s!49Jra_+Hw(dqrPlj zns{}Z=6X4z+C7Uh@%f4`GyPsA$K!9Q#8@6JsA9K{vE zuy{h=Duh77L%~BAKtRv=D+fwVYK%yqe-S?FY+|3Eq-{H>eLc${(nf2Gy(QNBD=zTd z;30M41%>j~KN0MV)()KIHAj7Eu6Mb%E?#0^I_lu24J*Fbl!(=WFdF>V*x8i@a;P?Z zqMr}6h=v)1aAMfk40a0m_QG1 zfC4$*A~9M{DP59QSxIAgKi>KZl|=(RO0sd*!gZMXyU;7W=nQ1_psodTm+2_UUdui-+N_ zD`QRk)yCShtBIG;2iM7Y=7ky46oU6UqxN`g!wbVsTxVU|wJYVIL1! zKzREAe6Rlu;PX8oRF@hZVP&pvyf%rF9^_JV=kY)97%ttf)ka|-B0M%1s?{hYbnT|W z#Do|2P|WOe%|V6Ot?A=2nL!7WU6Vj!3|8a#lCr8r511lsn2vyd+!HJIIueu1LNX11Joh3 z*~^z#8Lb)a{>>!GWwrAWZp zwz7`184(?wZyO) zg2E=aWkFSe0@{galLPzUl`x`b9-PkmbnUF9*z>pK30s$?S{Lb*sasqq(Nh6ls3#e?-dV%Cz~5 zNuokOrK3_*av}^nadQ~D?J$=REugWc0p?f{*GyNK7n~3$aLK3>ur90;j3NlaAckd7 z3=j_91qw~J$i~h5l z)duf+tZ}Q(vsNhcH2DpciHc#{s7zDbb*_FVFotV*AXbeUnhI9yOALV%xh{W2c1*Qw zB~!W02to7GOw9a4c=7qz>Tj9&3GMX5Pb;;}mx1H@NAsj0jfaVcA=K-Ste?wPFM%#B z+XBc13HYrS#BLl3&rehtWwHz>evMPL@TlfO64);l=h^l%#E$FPF!!-&AT`*Nc4VxcG|4v?Iui(%xL?Q1;or9Sl`~ zN;31tZz3VKkExZ15DB2^nBhz8bR-6sK}UCZB6l~^*mDKpl1acPkNj@}%Qah^9O}N@ zp5$6CY{wiOSo|jlr>_CDYxa;VJP73}?oDGH8 zFS!ntsGJCoY7+~g<7UF8R>A(fX(ofoKa1nzB{hSQ%}D zeQ;4i7?@L?g>cL?WvG2AZ~e;rs{mHEhgv{atxyG0G#J&0Y@7K+HJ@%*GVwwk zl|g;1fNjwU(mzlt#YWepPV+LZ`1VI zHEGCBc6eXU?sLtweQR5>KkorY!y1>wl;89|5LF6F3>vT;bxphup84Rm3HSL?uZ`wj zd-xTS6j1iy)#PR&jR+_cQ0-sXTY=>_4&pw-r#?oyfl`=43`iOsaVvfeJG_rVko%L(Z%(%$bDn`+zsI)8mowV`g`9 z`XkHG7WQ_E3&6_9We$SJc?7?r%fG#peF(w;EnTwS(u|tUaGb2!grbxOfkd$2t1jCg zS<)Pw?fcZ7@d$*3b`*QhAfENc5;))0YK^k;;4JPxC4xY0*Au`D~pqb z1Q7ONz~}FtLZ*lXhpeSzAI}Cp5M1)kpmTw)o9uJt!3Un90;1@UDTl8M2+u)dc1i>G zvKD#?xHLi=mo%HrytR<=!g*VQ3=cw>!3tsdHoq{h>E;1A4$1&BDb%|>crRXt<6JQ; z1oZI%h$qqj(`wrJq+T-HiW?db7r!;A|l#p1Atu0 z#(6r-`@uq}mqxT%;daBMRRCOx3vZP(<;y{b7z4cDEz1q@jO9$(3I0|&%kncn^zhuZ zbWJ5NrURI3gZqYN03c04zGG)m{beJ~M4N@jf$IAT<_yRzMH~f-ZsJI6;{LPPJNb_@ z;qtm6wY&MZd-JK$CoxJgd8eJ2fpggM@EBU2Z3)@wU3$T4C9EZ!Z~wla%^^=2lbzRa&?i&Ih{q&%=y)DQB4`g0=Q=E zY+ZbFgxy2}u2Cwm2jzA+6GO#!3Tn#>+6fO7Qrf5NFUEX2AK4UMR@*w_*B^nyqGabpb2RtL!r8t>L@WWQsLQ$4*KR zomeVwCktVj(?8H&0w(SnTti)HK!huEF0U-G_sngH{O^_O#FgERzNvIu$`}0p z%;q^LbGt_>Gl99L-vVW8Cw}|}rnJj2PPtlN%?nOeb&r46`@RpjL|oJ$khq2!Vu8cX zevA!=+EwsvDOpIuCDfKf?_2mgNzOz7=C*|DB_p%zffc&05&^jVR?s#1mW%$pCfsn_ zi01DTTCjTAaL^vw1yAOR&F2~?W>dYc@F6+-!>Wklh=4*K>qv0sIWkL&U5tqlT z-+_vFp%sYeu0|VLn-aQKP74A(hx3!_9EQ~8TIX{yLP*~0>zq?91_E8_QXKc0vs69RJPkbwYeYvW2~Fjx4d zt9~LgkGqKfa7peG13fq`Fv{$^Jg0PWFcE(0XP@t4H~UBeu^dRYL=0TI_shp zc1ca3yF|#*X%6UiE{lD@^U5D3@$(oKAv!l8w?mQlz#K;b)LgtXtysW~=H`Hk2g&O$8|6N|X_W;qp%_J%dM7S`Bj>%p4sQLFYf$qaf z9gt=H!6ndOmI<LzeBI-u~6N6g@w3NK=295;{-PYf9g=8bW z2AGecI57sbYFGrll!-us!Qq$?=Wp2?2z4A4x+*@eH%=@U<8F^L z510}rJTX9-VndjrPNok3r9z~@86|Z1i;J!U2iMMHLZKaG0l_6;YNm-OKGy>**8-FN ztn`sj3sM~Bnf>fkHcxxvfDq%vHu5n2nI7{Tx+g(sGHHYMrsnSTPPo;6_lGHRBNk%j zQfw0WGI5uQqU{WY3|~KJ3kCH6b4imuiKefHS$7lZlAfmneal+?uwqnzqpU&FTPw_0 zW`<57kT7?-{s>6orU&BreX#@EIu&J`F$5|dWYgQR%RyuF+e@92M89Z8e`4}d4M$=D zubIivqWXZxlTSr%w$2A;e20bNU5aaZo_a*mJX2-;G5p+y0A%_m`~-nJdd4gidO9!QiV3s zL^Xx~^aq8HM>B`*biCye{YZVWQtE{Ss=xc)VIf=uv5UMaGV9^@VK6i8`ZmH2 zND^TvL?#A^d94g;2KZ8@cz<#dD~BLbPth<;_oE>c3$b9Z^g&DJwK(-90aRZc4>lqc zVPP{E`t_b8`py}Hz_FzSGcYChHBp;S-6weL`@~iR@MQgS(^2D%fu84f47AIxka2w0 zMB&~&Vxg_-jkcSeP!2zZVE>LN3w@L}|W4{-lD7y9q3Ow=E`9MZpZ=KXquB|6$36 zCsM-3dY8+V{GxMJa|2m)fMalf!>FUl&2`QI_MU*O08-0#NQBIHbzNxRLt>Z`@^{Ga-QvS+E%dP=KQlJJ+zZPjNh^ z8?h1ZN7K1=2>Q)ro+xyfJlCGZmd44DoYwD*M@tDN)2`^AV*D@io(uk+dprj))NL0alOIKE8i_n02~F-PH)l$;bj(4a1Nb2TX@PVO%xi4{Mus$_3Rht&ZoA+# z(;?^P*=@}nZ0udi92jE#Lu2R-EK!Z)Lj$)^m^V8Z+Ra0qIITD>()`A(O3`!TUIJu1 zO*}U21Oqjqhc?BLV-So0pALY|KOL3o&xOYw3jn5fY!`(eP#s5fFb?)kkIf16x3F#6 zz&IUu+>1I1mvRNDgzLb#;jtdhjl1T@Rw4!X9TXD^4hAwwV|IZof{5-e!x;(Nwg;fv zi-_(Y5#7yoFEw@Wh@4meS^m%Tk|`Wy69n=6B*9g(QL|y*1OC8eQyeY29S(|9Pb^?^ zkU|o$O?wNR!pRjt0Y$=1x1|>5EuSBT1)clUD`^rntRuCQL@DTn{DA#QAk0m9OE&F$ zDcBMT)6BWJ;O_aCj8hZO@~OoE&JwR1glS90ofCE@tdX5*WEAFTh5mZIzw%)fa&w!N z*5Wph^_mxYjheiLEQn_Y*@rs|Si6IS2o4c5oj1Wmd+DY)#Zkc|xTBS-s zaso=g5#rEU70p)*I<-xz^57P)UrAjZLW}cyO>?$DnmAT|oZ9wwy%+*fh-a?vqaRo% z(cIU1@G)L1wk3K;#;x?MA+E&Rtb{%`6zEka#=?TLEZQL`Cbl$it6yVJNgsZ4KGF~h_@F`Cdv?XZLDbk{mIeb0!Y$K(&mJ`-pUe8!Cxa`(Eee&Omgeqnr{CS zImo7Q_7sOyfS_UD%dIZJLKYETURZ#5u_w@wX@8vzRAT`!M95!X0vKM>=ZV*g;-JsWD6Kw)^?JFLkMsR#HB*ainx~DT)*8Z zb~Y)Q4Z6HWuQ*!oV#jI_&$ow@w?M>7KEwkf_yK07y95?ci;5oR1#OP5wg#yb{u(hA z?xP4QHh3$Vc%KTW&LY_c`_klFGdcq>kPPkRtEIbUs9=vQg|wC0(^`NegqYjxZ#hD~ z7rp>~u@DmqK2Mk7>4#}bwSyQ!BVs=R-KR|sni~lj&{i+4ac|C+ze^@+2d%Ii)2p!t z3}G3-hrYore%r&>_0qB-Wt7WQi4H`=#2jF97nVtq)m#kVb3y@A1-;+E+XLiZ8qC5? zgS|;Q-U@tHQJJ;~buE!7UQQ`Df3(j1J==RezU;#>K*32FT&$u)i_t3NMl1}(mD9bG zplh7F!0eec!fu!%mjnky%Xso2GOFvb`I1x?k9QTi_I~7IuXO(wqDi#GX(Dtk9v{OT z`-r`7E?ErDJa})ulvaU@6ltyBu|^jMw}DIcuOQxc%OZ2c4*W-$4zs-NK8zqHXr!$9F8RBCQvvJvw@h+`GU`<3!JnB z^?|n$@5O6Xh?!n4+6{K&8bSOB9tfZEFkOGK2*j{T@0#zA(#=K;0;1i`d67WpighYp zBL_BrqrMGPoXXz4tu&PHskVzU$9N3j5q3ZCA^yWEp>O6j^zJjh%dL!@mYWp%cxDK| zwhn&H;Yl=n{jhJyEl4*9cEoiV^^)j=q!Md^;U};Y zBH{36!2XJMc?Ggp-7o;Hi7hS6xZ18}uW{h$f#HD7e7KH=HpsIabfiwiePR;V^W3Ak zdL9siXtiw%r(mj(H^V53$@t{+j>V1csF3DrXj`^FRT+41N+UX|8VHjY?lIJ_@TK*i zZ&BLvmv`~K&H_o#ci~aT?GhXwOP51M7yC-wRdpTqIF?R@dycK2z#&>T93l-?%Vl8N zgqWBL(_B7KCi2VOjGeR0J&tIPgVbqzl#Y8id}lQ~+&%-?!wa|goHHdp`aS-Y>e`$q zKz4A7+iR;d5<|%$aATW_aG%U?eZ%;ujq)dgO%7cuHTyJD3{0_cewW(h&d-aw2N~xg z-Qu|G%7x+>1s}+40(M;Ho{a&Gdc`>);&p}0s!@rwVamRR8A+2w+WF22$_MWluQXJT z?pP-GOGl16vyXNIq4vTa?2Xwhaahgi;A64vA{F>#ZD80&qC9U z2L%IVE>il4c^t2(>B)RvSsNkB7334?aq!M!`eLT@R^-=adNPW>k_)!--FH@ii&IfQAo;ba^F(kgH=HB~Kuxra24AE$eZvf%>K!(k*R z76%q?xTyk&$O}<^%8bH%F_s2@3LuhBwcw}4ykwr9I50Nr-;$dTO(BkXUHj5t1&@dn zr8mAQF$@Np`9@HPgpje-a-$nPP`yee0zaNWlh*>kNFdC03!o$+j@=IUAo3XuNHk#n zFbwlLT$GtZ2*O*dJ%XX)tb4ZB3d)y&vCHe1_DF$DR+}>P0G1#EWZEM#otihE7^Vlj zOq+w!$~CYvji3iM%fI+lowdUY!L#WavA6PWDUSMRnFq}}b#8#gEb%YHr;qeIO(`SX zqF9R(5rz?bv!T5i;n;M^+@|u>@U>Z=EyEcbQ!eg1lgVw_ z$zeV(Y13AlG@KZc5M*i-JWE>-^{UrbHMQTV;P%XdAMzBmy9K%&3Gt#dgNIFC3R&mF zl6b`-jx=6#PcW z)-#y~AzX{;+2$a7A0+0zv83sy6+l=PwL(H+Pjb>7je~|Mh zmpECH8LUdzhSva|X@!Y?VDapLDidToCvh#0p z1-EqK7P=Z*2k&nQ(%C~9n-m!j#esM7;SP-Iy`7y5V3Fm`O@wgt#8jl=rr)%c@@>e_ z&M6iX2H|7|e8S@ZiyuYk&+geHccRuNh=6M|X&jy>Ef0T$^0~VC^wUb!F3q;=KmR4J z#I<_3D0Ati$(k8tx!nmX)(ew+G{`OFU&BJJfzJd7oFemecdCo=Hh2+=?jhAOtdHAa zIz(M{maw>5=Mav-be*y!fAhP4O!petgh^c1Zg#`Wc1J5NXLCWcQZDf>Qy+?SzaP8psCqoV&oosln5gn?%a}>Dn&+u8&SAyG>sle4&;l}l#tF>JB*9?*u?#4Opmf(}$ z@cRfqG>-;gM4vq+R+`$lHS5>#N_>u(ruv2wPxn|Hc|p5#CS5C^yvw#>iVSA>dtzQw z_KFHntN`Du>qw2f();WiukEzslQxb28VJmNnOUtCA`yR>P$4sY)(Bfz0EYDxJJ?|M zlr0++tkyyb-)DPiLGoVcX3o(wVy@e>uYm7`Nzs>bV$W z!!Yt*5=B4!VRjOw5h^jz<;762Fbbd$L(`e3kmH3PJMZ_x+3DG@w?Q{g=MrF`p~t{1 z&Ww#9$pXE3=gi)j#o-KkEL#^-I*PnR%eLd;c@E+uga?_?r!B6i+cJ|528ZP>SELHG zXTXC)6yHxt!fmb*P@u(TIRIOCn4~)Ou|$4mGbD2*GdEpOnn@LBvspRKpyZB-WzdVU zjdUYGws8~F(=U^T$+}8ap5doDoWD18nwzvFJs^Ug!9WPjU3SNUZ?agx2xbXY>)tce zMx!nTc>68ZagiU3qX~y0iuTs}Hg9*l;qAxfWkA8Rc2EHfChFEg(0eiXaT?*{sfJE= zck{)~p~$9tg(qZ}s0M*RNiW{|JK?&B3{n_cPU?o0Tu=kx{nJjvvPvN}8tgm~o?2qe zRM~y)hTsrp{x78*+jqbX=wQ(e{SZ?czmR2|2h#-@{#ZD1zZ@r|7XaMX3)cB;upgb4^wWw&3og0MLOSQ}h(P88T`2b@*k<*W1z%VEaG8Q0wIl5Bmz*Z znEJSbl)k<$HJH-Vo2%VP^fxp?obnU<1ygDd8?cV+wfWRnsGvZEswP6SBt&bg8ByXAP{RbZNU3| zhVB?x8ncW}B*oI6+MR30C6EKHbvW^DAeFJEwV0V6FeJQ#;d4v&P>|O`EeZ1@x=>R8 zev{^H&Fhj^iLW?EpzS!p&wOGpz?kXNrI=ine}v#tDDV?H@}3$>l4VfOZ}uSFlo6L? zFIsK}Nw`Zz2Wts+%eyGvRwBT^w2#DA(Z~jG4RZ0?U2*=x8W5r)f|O~Em`8$AB2|33 zX{8zSo}fKv)VuI znW$)F(VmEnT`ZP2RfMDHXCox&)zg^ifnAno1L1v~#XgL=V5J00 zZ&tJ}sG;erZpX}@>`}aKBG=SN8E}4QaS=%S;zN^#X5p>NZaf($fOlqDfC%Qij;6Z> zF|I$&qU878J**4C7#AQ}fT~{%q8IxVBbTC1q9hc-@szpnLsG~31RicaR{WS^ndm(H zNrbP=mWOtv#)h|SOgH;>cuwUP;r;hZztZYye7bh!I_qh58I9ItcNO;~%#wIwg(;Ib= zAdxl6L5=@);7?Ik(LNS1^nd@iANC{)yK`3Ug{AVGuSdxlaGl9m9fx#kP4QWc5)zH& z&_SIC^(*PdA!y)Ye~$C9+YB4ckcxt{h<2rMrYoZ9Hw`?SUR!+?j8s zT%^;*Ur!rdDXQfS`a2Xw?=x6Z;JI+8Z=gq*qHyJA4Ph6=XMu)q{FY+94 zOu%!}tNvNu_Fn+p6r)(=Q~6rL7ngfL9z{Pg%g*#?zu7o9^3xIohH)!@_WSPOlOvoM zw86s;qw#kGQA>Aj;So{j>j1{}jwcRR}kRO+s z$|K}FZ~L;8F?-+N3g@Pai^DY~$CsOC#IzIDSaLX>{{KXvFmW0s^`6#!;_sI9k$9*a zWNqM-1_v3XzlE?bmLMv~l<{2wIQ>R@Kl9FG!@;WL z+2|X2{yR+I7avsNoQY#&e@%jZp+e?d+>Pkl2?)>#Kyvj1xjY`o{%%VFHDNrc|M;qp z00}Pt8-Q7Ln%xnoPD~EokW=UK7!!*jMHuPi+O7^P58WTNPCLJLcIxr$@0g&o0DlgG zdFBHH@)(dL#pciCT7wd+(*lR6V{372mxl*a8Pa;hw4z_*ehEaeupXJ`m zG&yB9>8#;6Z0&?^6%lC?b@kMfZow%X5)*jsk!lCTFbRRcch?uW$r-2AxmXZvLh_aM z>NV^d@y!MQ?utjuMW0r|G8{IEFvcRSXsyJI@)erc5F9AcAeOmRVVl5yB<7OI z0Xg|&7aL3c9S%cPhE`5aB(lL$4_Hx}NpGX+trvzZxyCFljaIQY@oWq-VD#%%s78-Lq_RW9rR8=hKJ$4c@>5=4y|JY zG~6#oKx*ABz&|XmucrobY&XR>v4d6y23pj@8*v3U^?hg)XS4}?uJTZ1(8?pZwumz2 zo)*isMC`X|-(9yorP(@ecO z`&2}sm#)#AbL_yBU<&K{-@otQZ@5*nOY^ifZ-a2F9TxxW9c@0NHoczb|B*$gI80ZM z)dw_jst#t7k6ri@>`#l$>uk6NPEQ)F4Ai;w)9+gS|HZ4y0OL*%->3UqDoQM zLSjjXW!EM%xr4|65R*eZZq}D`Ga-$;NWk(2wkgEmO{_K+%DMJ0?Dws-rn)$JKE`^a z>nS7ISj9He0$eYd+!AIYtaHa7Uj5fL0{B}eZm(fF78eD25R?;nGMjhej>W7I48^$r z!eb@6xNz-!aR^U6(@UdG86V~sa|@}m15b@`8|KM3xjtv2824OmOoOtX`;ZDbA(iZt z-P1{>|BMz<+Du0A8FOC6luk+1!$IBuVQI^j%(?XonT zxvMBJ%SJq;xW?p%1h+&wbfpflLk4{>0BRcimveX~Dg=5vWb}NRezH8vlR{H;UJhAq z*Nq%Q9nD>L8aLSEMQd04{7W4t)uO+!H7J6i?TX zg~PQ9e96aMk%?`e)&RlPu+E5tNOjW&w_1J@UJNC@(oFsU7%kT-GGjY-mUEkqHr)oH zd#y}d=lqMQnT&N>g9u1AaDhf4tI|patWgHpN?B|*_`D3f*u-p8@Lxu^+WNFd@h|*7 z+g3{dS7LJa>Q_Na_MtY!WMM*MUdYR-MR3y=#ihi#&@Ir^Yq{~bjBO(QBYHjiDTthiwmd)YDVXka))(J*>+NrjH`&Q>?sL1T<1YI0TBPcCBBYsal~Qn zyh;qmcyeD6V3mu)))*{K-6!zy5DuG=BtOo)13koDRx$YP0@5k{!R}tzE4gK`Pdly~ zFQing8%04mGOQJG%~l6fJTd`m&lcGTqD*lx?y}%$Z{;gzqp5BM)(c6V!1*&qW0h{L zBN?188EnLT;*$dlkayuZaKS+V2~rrAun$VBQRafyHVP_eR^Ic6CHt z$t)%^Z;OD>?K#_T=_GhO?sEA^Kp2+|YWbbSjb87tx&hcWFfLgIEws1T63$V|6RpUh zn1h(-d}Ubww)b+cTi+Z04K(-QVwfmExL$f8v6*t=+eE0}W$rk;^;yoG5!&HmOPPC~ zDR7}#hjI9qjDuWzX_$ED8%xd|31k=}0AwCl2)KEsKB`UJJ1`l>7s1Rh*AH1bw;&Pt zfvCs9P8ea{>Ghy37CB8wE?_XwW*lIrxSR28mJ!56IDvwuephqexiwmljhYM}{td-V z73i<){>1g7zsZrXLD!@A687-sN|yPzH)q^LuSqqOhZIY+{DS5GR~(^-U-cb5 zHs+)+LmHYGWjdD|Sj;z}YUG9X{I5MSmur(;ppf87H3z9{!_}JZ$xXpJe$c6Ks_ivp zS@?YS)K9C_5S4DYmgkl63JF|vEwxKCDO#E@YKB} zvK$F(d>-=oWB?5-+I2H=G0TwX_>{Rtzlv}#?TX;YZHk4=rm6u&I{TmI9dV_PSwGXU zl)!&`h6s)A)x4c6O(%z0sgmRlb+JwEAiK0_E%9Gl4JqS+rh?l6CW*i$EP6nax|60g z;5K<%@r>oFwmuw$C{cv?oc zgL{U~6q{kDy=m;=K5KLxQRO7-d%D&(NspGkpUyUl0kE^?2u#l&dA`@WCUIl<4QrdS zpu;RS|3L{aGKIho&T=OW`c&cAA{YPtrxYyk;!$WxTf$aCL;^E|?w~lGfBa;C6oTq{ z|Jo{9}^@Q+MWzsq{!N zk1VL@WX`3UOlIkBAyCG>`q9NdIVjir76a;y?4|ZQj98o?vF?5O08c>=!7&s@Z;C8``$L;u9#ya|n8OEip6-$957`@mhWoQV zdP8W(+`v!B0k@iT*A>x2?s-JMEO#RpHK(~=B4iqyV)Z{i`;He35c)8%laR^wkA^F# zw-^Sqn}sIBReZxbVP;{fY zCV;hXLc@WC14g+xh+;%*d?%ZOhd|W*$`bs%)V&~y}xq#$AjrPBS$I^v1{w}HJ zD!^RGNVT~+uVepC)_lB2Y4XaLYz|!k%XxwpG2;%|135-R;OdA7#n}%tA-hVl?x`xSdvHw3=RPSBM!I&6l?-PVi zdwF1gE45$RAyS-x$@hcSdEtM-O+zdo-<>Y$S=W08?jfyM-qNQYD5PuZcMUlfuk>XM zz(G=p?q4o2AaSy^XZ*k*8|O3}hVhlja9$}}=@-umi}gQlr5|w~q?hZ2=sk4--(2`u zHN2aC+1jJv0lbOkrLs$j2IJR18~Kyr%W6Z+J{BN1Zi3X&+h*!rz>`5lnV8z5yy%jW zBxJ*zK{zGe04=|XwM?i?Bc3$EoDlcI0ooyc+Es688|VUevh~i_bN;Gatd%n3Fi0wY zXkY>M;~EI46l1h3yXKxw1s`YzSA5>LmQptGkU}9gCnYLwDm*`N8G{rw){hYkXeL%N2W2wsU=^C;*C1(c8|c-2 zpcvEDk$&o4y5MOscPV$`(gWPzJYxLw=jp^EsZ^=rWQoXOV6PrgHehG4wp~Cjd6B9h z0LVxE%p$^l@F8@!ejLz|NpVr|quXaak^Cj^-rd z*(jFSCj^EschAlb@<>=wnLN=xI$CmLpAFGWA-4oNKwgqfi&+4CfGe}44G}sHPDQeg z&_TLsVIH@Tx3?!0S$uahM7=6e6L5z-mM`62Fsky3ki5wS@JH>?=_jF9tRaS(N~PZl zNZ>VP-dE(@0+HPt*1%os6ByVf#0dFE3m86!fyh1&+#5Ih+%Y7}F})V9)MSb_tGY6D z3pvlwqHvo8fnBsWmy3q8mS|(-(?w&^h7X!AA7O)W-0q<-Jvy_lMcVPvqJU>WbGBpz zDcYo&4ZOOh8Afqz(7o9`z?aM?PUs`65x`_Y7uU)i1Tc@=RIaY9UYL9=?HaMJboI9* zzP5J- zJFWIQIJ3qyRBMbXCHpG?K62kiH%J(hR2$5&J-w5f0cw{9SLhS~_}Po@E_3t}G=m0(Du$EVB=}TTf%D-LLUgTj2Yvj=yQ*iil0cyd z1Li+$hJ*!zvr>`C6yJEHOQF+6hR7IOeGK+eBc%R0IU`yEqjFBz;q4}fo`2tiN~ z=*u%rGQTAemcU<`xhO{RSDE*kjlTOLnTH#f-01m{yOzK-ZW0;{x2t?24xu9I@^NT3 zwH97WbZ>0jGzaKjgp}WV)A5kR*8ra~XG7VOP`K%Yepv7=NV$#2NgsrOv$H&bruTUSqK)|$BGkX3L zcPv+pO!Qz4B_!i-7w>4Mfj}5LeKr9H;%*BwUOCr{vls>O zp_7S4x?mtp7w73C*prqHg1IGI<}GYadyC5i{yruQfWF4>DjbH1g3~!yV;j&@FMuE+ zpPg&RPRKbZv>ZcEq~dGg&Y-!W({Kq;*Q88n^K55@9=zUWxK)C|o5)Np61@w_O48`7 zZ+hM@TihYs+lHMaqEg^!hTgb=e_esulaYieb03+l*eQKXoNSjAEZNX*6+4L905i-u z&ek`_I=3eru-86yU3pk_t=SaYFa+CThsLhbbRjs(jy~V_iJJ!`jS&HWMw@y>acVEdMpEc-BCg7XwTUR43%YZ0b)xQ>5eRKr#W)L$^B)DolRE#E=MS71zDt zPjf7Z92~T|d0_+o)baa{@SD%rBp%gY+hK91-PMJgkg5-Tm5l>15_k;tfc`dMiOZ^W zU22e~yk&7SxdGpw>ozT)xM<1QuuYNfis>Ppm~9Fz?Gy72G-+||I5xOQwJHYR2qv_M zC%*3hkXWn~Dj#|~e_O~%sWY!le*R>mV>TT&S`a&jgAg}|Qhkn?MU;NSM(QhN4h{e+ zZk5Lr9xOsdQ`P)LKD;zi0vvjXed}-r=7gt4RYOr2^P!-UnBBp1i5qY2kT96PjW)gk zZug)baN1V|IFlg^0^woi`U_2L56^dlBSH$;7BlXm$kmzu{canGJoclIh6@H>En1cB zxPojER9Il8*%+g1{8JccMf>}+Q8^O9v6HGmW$`pEgTXH$C`C31R+(ncSkD*CKH;nj zribHCPDJUW8&a=zL1-3XOUrjsy?NtyX@OmizAE2$p#g9fnodD44LTzXp&<5cHyKPV zrkNVUO`A);Co$j{fU6_IL|Q?E4cJaF07%hZzr@88!&+GsOuc3vzycDLPEYgp2S<0B zXRps0nDLfaMM3k|(nTo3=;Miw7W;vTddXD3>EHYP_jqRwXUsF&GiS?ve{@5} zEN1EE;)fhVlkyn3cyrPf{A7?sheV}SaYUy!ANaq{<~D68LV^e!lw>ua@~FzY!B7D{ zlEuN{1-5{*flhz4iHNb-+<4Hk@K26~OrueHU(K$ITxQ~cyW|P&<$!-U*K>urhJoJ- zg*-9x*(e`1|1q{r-FXe~a=d255n;x8b)uzJOurjn%zKqgF_&$(W}~0F^EEz+90fnR zupAS=!Pb*dBjKoea$R&swX29KjU}-7;2<17plwsvSl=MiA!GBH`pB;ac3D8Fiyi z%06t@9U2=+P)u`;RH`Wl(@nbSWJ-)o`3&o7Y;e!-t+70R;@MNc`ux>w;0nFJEFv7lpr<9fB10@H5t%$D zC`0%QG?3A0gv{N2sJ$I!0yxLpUb2`>Q*j??JUNX)9@8jR1LHABTte{_z%xrw>M!Y7 z?u}!Us?|2XYRyxm+rA-2%Ww_}#0wt7pEWS?JjbOmb^6sh83`MYRyrWqrqb5#Dw&2^ zj2c5a3>*JQaLB1d{NC3eLrXxf7e+fi-dq@X14%kR|PMRqFlt z;bd^!2?V#J+kr|{xb{?FAkPdp!5uFWbrn7sw!T}%jIYkdMPOz%x{@Q&OYIaRys6!U zEJuU%qRSYUVE!9M5cC@UY(})1^|?nYz>$B-K#T5BA=)z(u(}!H|C#f;=-wh zvxn#e+a`nC3z6mTDdrDgv-c=7`IRFv-0|aq0iQZk>%^=5mOZtKLFX@iFTG56dpShn z7b{Y|jQpr(`?M4d231U}9?6D%vqNO8l(C9x7xJ2NQ&ba)5sO8*1A;?uwvA_DuB^9GA+_z0INrJU`HX)U47Xpv||oK)-&{6jb4;XHvkq0N<`N4FA$a0#lXaT#_;~PK^nqC<8f6 z5JVQP_H=Fr{}b(FhN$i0Tm*&4()ev99OcSJ2mt%AZ6+IRAj_3KDGkB1D0wv_yN6v= zJeaob=c3m z{pMHF3)*kGU;oU80P-VmRvCH#!)8-wxAPaiC6clX^C;&qvH-cd@ zP&iFWSmP$!n~Jp;i<_GRIv02u7O;JCfHCu~Aj@1)3?!SzKo+`v+&Z)h{@5};t>|zNUQRqm+`C;|~20G6MzIEezHOMVY`kVw#FSWZNRtpvC#H7j)u*~4U z?(3h9xVIN_X$Wk>)GY+k{qCyS92l6%#eJVfl=#iD_(*u7?u88B_`m{3rrsVN?OUf} zw+9b&S1_k4F}G^^eGD7DFfTIy?Sbh*>L_ZCmpSpPtFQ+_cluKjE^k!I34O^-Ek=I( zQ}9pkuN!JYMpUp(%mH6qCUVtYiP}Ko|DCl2-Bp3uE=+7&H*IE9LxbA9LC5oK3XWiG zV&B}@4YpV=!Glta-LQr0-wSBHC0sM+N@`*ja>S;@bl^vZx&bAsLC@Stx@f%!3As4U zAJRPE1+VoNq3rb0JkOoek6Q-}r7{(%k<6;+Fkmn6O)mvhEvzM*+a9kp&Wwk+3Y|kB${2mpA*lp(()y!4O$@1GvjJO zD4t>#58n{CuyV!dWbV;VGut@xq|s|7Q*bT#xQx922^-AtryfBm~(cG@kSdCKJXy^S@Rvs0UI-*@!frj5-m7%MD)RJv&) zpfB6J`~h9-`fbCu+{89tyQMaI%vCfRF2nt7yePoc|NIb z>VQ_zg{J>APr15K*%3Af6R!67R>r2;c|xQ%iAu$#z#mZ=BB^7OrOKjx|pgZ3Gq(;6J+)o`J4FXxtmd09=aUqEncW!G z6QQ&Ed|M2#Fz=Ij>gOWMKr`Jq{m7fsUl9-lshm9^cVD}p=iGCA2?V(v-4{0PMc#cN z03Xx6SNKWlaI{T{F@VP)R|)`TvociU97JSb(VJfVw@egw;|~UwIbw+a^=O$zNuj56 z*@DUFRbC6cPh{qM(mvn~(HaxR^6Zo%G`+cQac~rtWe(gv=lN^+BqULHi{4tf^0j% z8Kv0gw02|&^=V*404(8>+Tt?dL}wU&Mma7@3ydBwt>rakx|NfO%e#WIU)L{tI}8^e zho6+yu+dUq`Ii3m^U5;*v?R!Ap35t=RI(|;Wf{RQW3IJo-fh(t_al_@bKn1BaT+0` z07U62eZroDbKQ=85TYE(Tb{+rx)ha7M2S%XmCoG+l5HNi*Z1X5=D()I5gCbZc_a_f z9XU}e93KI9NGCgk>cKmOtUnbp$5KA3Yb1{xqE5(V%>fg+znI{82aiN_6mrnm6MqHp zkUJ>``Vh|#;3K;j0$F_lsG$O^pP8>xSDM0+kmQTrPZ6_g;}44S0>l~PFhJS1;Nf>S z%*}6ki9qaXD1bPAT%-lb%K(^{39?7QCw>WXAmq6yU|p4&+UtY6o9veX*u%X3qcV%^ zyxMJtsCo7VFV0@eTQ*+4L=9qIXt?IpLkPOSkkA7(cU2aG^-(IIWP(5MWkTm*k-Q-F zTgItmQZ>lbsRMC&G%yn{E|mAU*eYTC@W_{m3aoy<1DmMD!bvs{wM_WV7nS3E43Rq_ z=1{-zo$wo3ObB#@LSKpJys2IN@77+`+MEE`LBV9!<=s&;gxDU2)2Ub|+bUy6ufnex zP%t0X@D*MPEcmGq2=DFNUP20x;sSAyx5%REX&AI&OQni6YX%KIFJn*Cp4j+xf{c4Z z)qEgB9T!epx}q9YHsVk%Aa$b(FMsC+Le!53m3&fUA@udZ$S#ScXS^0Un{ZxXb~R;h zO5TAGdMC4h>9CZWJ;`WkE9y$gAlHGD36vg}K-pD%e? z4l#jtpvWE77ka`tLd+jX?d<%uly+jef;a4Y&8Kk)kifL>yOX)u*EEE3+W}p-c7%g zGUNy(&ovEVOI~ez`#|Q;59v8x=7IawEJ>wkEgl1-78#}xz4h#DnRB=>wEmk1y*gz1 zNNAB)R|_X)0J4zdKt4rrX|~BS>qAI-)%~$SpBMfZ=Kle85I!AF9u*_URXUlMGUF&6 zh9)-4UWgd@&g}-PSGQqw?zUt#tOXS<^U^IX*rt0+$)a=GT%L2-{%CB?vWy^Q$9-8T zRq<~QXbprM6KSSQ<`E+*;$!7lcfD8w>>SYAuasIPtDa{V2 zo<(Zy;4z6bx#*EjwDDXI)1tf1%dKGo6{b#?!6fEzN7||iAx}FnCuN4TGAU3K$myRC zz_XvV{=I*?m5%4OG<}h!#7a|SXq~H>=I8#KVpTWf-O2py8N-X3b~Y*LHn16p$Hn>; zAB$St7B_eWi9O=RG`K>=rRg&8eo-yEPgvs_4)5D=h|hUIemDC zV{YUkp8}H=;hPSk%Y;eLIs|YY0>7hON&n!HF`e!2?AHE+8pM$3FWcIA9H{ia$vg^^ z8T!}#VjyzNv<9PfuGkYnH(q$t>|+4#3~k9){@5$A(066o5tbkdA6|}_rdH$U-1L|> z_*>(*KolclciO~EbU_A0;GKWBOW3(0E*{+(5~-Aof^|5DYLIeicB5e;;3F@+fP z6EVQ7E(y1_o?S|y+=xc^{cS0>)4IsA!$*?b-jEB6(58QP)x=x)(^8KT;QYHxs+93$(9E>!|fXefz{*Xoxn?m8))fPzmrn@XEreV zZ4+@puO62Pal>!D1jFh}S;V3`^Y#0x1I@L8*`_eLjAq)Bxla>6I9Rz%=LA5aeq0Rz zSO=7Z1cTkw4O}IVeD^ax!%sd8q46-3c|m*$eG!;i>_RonxQ~y0hrGRvXN%CF>3&6| zO`vBz2$kVCdq`i)s%Ghxv+(MOG{+WX!Fj|as@h0#|5rrux-NTx= zTMnd!n0H<#XC~{x`|i&Pnp|3L3c!|Q&{Rs&jBesgf-hTpP`6P|P<^T?GA@r^B7qp) z0zk|`F~3;}8k2&GvQIl(X^AiOW4+n( zw^ADroF>J=oHh`G>3eUY?*&Fgnx3O|^s6MsM$)uM-tzho9Sdy-qaqAP1hxX!6=M={ z6Mz8N@j3LV?6gG-s){+praJyIL)bqVX1O#fpd1e-Df$#brWpElX98b~Wzua|ce7&f zhgb4Rb+_Ng06;}2yF-!DP3<0vx7OojT=FR3>ODIpxNwMG)YKmpcNY};f zBbY@1&%i`8##dvNErPOU3EVlYTLsUIeL&*6d?3^kBGyDguQeRlY*Jnmsl;3b^(m6= zykKl({*<2u$niDr z0NGvNd?I##w4tC`0V6T06UyAFW69;dy5vS}*wlRfN*IWtcy8hEujip#rULYbg7^7m zF~E8|3*HOHX$Y8i$23}jH)0ubY#fsrtVGl3N8#Wqks78KzBj@G4-pwh#Zzd))qQ;h zIA$k!sEaxuufZuQ`-2SN=X79KdNll)2WG08SWS}gVKQ9?#D~Q3G37+&!g<;QGc_*Q z#5<53VbtZ*a6QWB&BJmmgN@~g^`&X-pl|d-YropSQ4uB?bFIhQKxf$?Y2@{%S zV5FElQy4Cr4cquWyV_IO%wrNoJ0UbAa)gHl_yM&FykM(=gTISbbrKB)Ho{OQAye^< zWjEH##(VBCIJ|i*v}~$&ZmgCPZ{|hy=fJ;1#7h}!C19DSV2PW7Jcdbiy<@S!ko$;! zj1DtlgwMIf65G@k*oROMDA;xYh~!rQo{7;7J}67F!6m{!(^MdMMad@zCa0n603lan zE+7Xmsmjx?lx1@Hd`BZKwe_Sj!MrJ*X+S7MFg?Xk6@a^2mN`WHhd)r>{0T&40`75q zp<|p0sfExlc}j(mD9tUKy;N1%SpF1B zAHcFBYq0^0fBDUtt_p_D-x}GOchP}gR|e-ka;s9y0`aLG2@Hhc*g^d4!r8-+Wb}D9 zL9PL%rE)Uf84`J}*_-ZqsmuYr78&v&?u~Ap`R{T@H5Ysb!(+h0$@OFZ&;3Jj%yp11 zxsiDTQ5tQLTV_o$F6afw9S#%Yros4dJrSC@(^U5dLRjPpV?3q)wC9BcuBBt#ds|ct}W;d#mKQFp( z$p|*JV;5TT^eeZ~d|=u;OcL%yZ2}+!h);&aH!9OXaDf&%@TIbLbE!d@_$NNZhzroa zVdtPIw^` zy0fnmvms)b?my9S9ur9rwsZ3DUj1ymC`lvYY89vCNKb$HSd!^TTR_?wUC=|Bhao%k zQ;6&RfKzf{U8<{_tbx`^YyWI?LF-JfP-NQu>RNv0rr9~T)X-=ct$vlC!ZfAO441QG z?xy)T ztwam6P_5xp$E!{v8RDV6J9pAruRKO&Br=~Ku-e98wyHu7Z!oL6*%Mc3_Evng(iz>Wc~c^67iZw1)$uk zmtz5>FmY~Nzg=aN-aO*PT;;naXtO>mLD@crN{4)O-MHE`V zMNYv(5+STj96;ABK{cRLI})C3yUh1WrtaAJTiet4jw=Qt;Q*uY!Qr47Y@qo>{)N^K)gx}O>5 zwTv7&%63m$>V}ITyHMWtL@YNyC4PH|)t1s9vk*Mm{e*O(D~E$h&GjhJ0n3?$5Byt>2}okso55>OeK z9k@bly|CkigV=5e*D&1>&iq-Xcn!u*)CT5Ng$n9mC=A`Oq_94*LOg-d{w1Dd&VMZR zQD5eqV%cV*o-*mhQn^XiSZI!zzL7EylxRXI1JdPZd}uL@Ky@$M)-sr z{Xac($cjY)a;@_t!+CFUADF?P#5C$ZEb7-6Cbh5dbv7gHB+pjI0?ErU4DYO{Z2hR9 zzc&UR03bGg-E6WZ)`Zq>0)JnH;c_PHkO@>Ii?xEZe_P&R6`B@imS7`O#^0{I*r%}> zk+`6js_Jz;EObZF0{;p&6agrz?K{B`4hiLPh=NKs|J>+CuulpZ+!_H)y&hm4K@MHD z7g9}X#9FSGEEGByC_|X6d>YC)LerLqCNv0jZ~H5?!8DkoCBs!jz)DC*1yK8^PfGjA3&6NFm{vRU z{MoU2sA*(U0Tc?70q(1#!#H+~E|vRvmS4KbC?dFhnnUIv(W^VbNn8)9p*E`H#0-?r zDa@x2PKG;aKP+N~kORFo&?}{xjSyoA&N+YqzNDQ8=clTI+%rs(v%|YNbxq|LnM5AL zMz}44Q%3g>@un7n>|3cbG+$GuJT}DOCXY*9fxWA!JoMuuOd=#gNhR!n3sw`vmlml# zPaPD6k}OmL(@LCoK6{-afhzHg$@^8OzOY*QE63Ryu{Tp%CA}1}85?kUwN11pr$S!~ zkxySS{0M$3&0HULh6}5|pg(Q;yIl5nrJ16#qL)CJ;RQ!8@6n)D*gH;rd4v*5noQKKz;7Ad$O`UM!$?Tpv}*pA@BybZZD z+u@5Izl$BcjJE^jaG+l;Rrf9eTGA7v9zq*H`;&z<=9201N=N+RfBqa^JO_&^7-{!c z_peLlib9~ycXWP(5FwCqwSMNrbY~K04Px)6Z8PW>z+AR|@+knQ&T<}vGFCppJM-}i z9x1o$4P10K%LVa)filq zai&Qf7%x=|M@V+9M2t9XteQX}Lx=m`w(Rm(itW)O`d8d7V!jqpZvr4cWnR(cP0w(l zQ~*k_J|jDlC@77|2!4&(C=UCm4cyH7AnXH$*jOw)jk|h&zOP=8CZegFa+#Z+XECZG zc3jT29Fpe3uux#=Tj-A!JpbP(^TF7>TsU40o&WYPN0w{}+H)z)HGr?9Xw|2gVFwtE z0BDgA53*&@0H&BfLY}>JNX%W}5_jUWBDeA@SiMe=KwS$_!3$Y*!@xzzjA|#rj0r@i z>UQ7G;1|fFerBx}Ri^QHr{lXOB0ix8TX8NJIX6J7idFbLSe!UX$8u&0*^c`rdKZ(p z47}Gd-*(l*ohKxCp+mhu8%v$5PbxxyLST#3thu}gnCzt#OO{ya9d|L^zCdyj`F6t+ zERsAS2ysl_%%;xG`#WPo&MpH>x6df(jI=-dBkz&w;!st>Pk=qVHj9{HCl=Ll!U8mJ zIBF6uz~0RuwCBZ#c0o_>KAzSZ&~?40CiO1CfsLbIbOy=pBSWEYUElQi0sEXRB->P| zYWi}QGM`H@3eb}1K=@S`$!(4N)Y&Lvkby%!1+5_CQEi}VJ*IV6On9hG;f5=Zkfq?e zMaQ(6GK4J$b`e&CTbFzk&9gr@GQ(;%Mknfz&03{ zn|19n39f%wBa~Fa_117yj{c2(8ap4$`V;@knOeU% zLr6{Xf?#ag7^M99B)=m>clm}O@{X_+Y49+CkP4zI@bRig-%|1ZL7hp@tsg(y=7HOM zEE|wDqkHe*tOveB%yYw)X zdhkYej)^$6`Yxbuwk6^c+gF9*j0n9y&G3nqbAxnWVr4kT_*Qsx1{r_Q*KFs0%%HWP zG`3ikiE~d9Bd0%nh=)myoz;V|q%|nUDE&OS?@o*0Y$I06^iUh^O+q&{C(*}w#q9aH z=s4HH*AVGcWH&7Y8XNOGq*H9_S67zf4WYvdNr?*ImX9!qS%_JC!TG@nKg@Fu*Cw$m z(MVT|$~fx54I%CixP~NHg7D!+W=966!9@?q3?DM!b1`KB8{m8r`zO-`F!Y6fwxiej zGMw1|$KSNU1x^7>1MlPcYO}7s`ss`CQW%*Q#6uOF({C5_vd{A##Du4@3v_TCLX5z) znE-nPaIOt>Vz^S?UV_q1ZBikNigg7T_x-5Ajzdn2^-BtC9#f|Yusux@mu+LSEh2)Z zZZqfEmwDd28bl!g7YPg&fEGiac>I(MW?2xLam7Ldoal2NUzx^8JRV0ywT7o0vF1ex zx)Hd(FOA^rj-~lJtQE|i#$}qzrGDM+M0Xlusyl`4A3iT=HJl}i$8XZbPR%9ay4vfa zK}EQO=GzZA8)r{lE^T0#}YDhmQP8IwNbS*~dl09ai}7J5DLuvMTk zIwc}g&@4$|Fy5FJ#bKBMwhyNE6*sOPkyt=6(u_LeDGKV{c~8*k;Vh^woisiiXWWt? zYx`qrbur#Q5;~jLO6EnmP6N0rA$q^QMWr z?#*=YcQxfI9nt&OjKwALX5qJD3$G}34gOgKi8jTHjf1EG+_evqQ4(M+;Q|KjX<_ex zwM%vUktMpo*of@>2NiP2MtC-nnJsvRpQED4!1-9m;uhkS6!k*7(|cx2Sh;;l>;0qb zIZxNP?W}#EjKmwI*0=fb>V>HG6|sE7y`_M}AmCcb6;6kq<|X+b-X*bJdN=g`8u{G( zO)y+QOr&1F1I^x8MVE;N2zC~Z4ryMgkl*GQMhDb>A_1NH$oURj-a0nuKc1 zg35HIl@Y2%b0_?OFpPg^x_sK5PkUNaCUR8zm7O6k12BO=TFJ45`JFNb-SoN7_3G(j zjYndLc^+;8_I2mC8go&!A-*1-b$>CFq*sdw9^SUv#PAqhu24pK?q74}L@{cizb2&Fv5-<~5^gwJvMKAGiiQA;e9VDlzmV?t?a%-j#(%;@L zgPi(#)Gz;~!(Rg6JZm=VeCUwNqZ z$y;qJ-m}N%7GQx)JW}kFi}2+U!c95>J+Jkp{=18MA3Si&wd~@Ztb?-p@*hEabt7KJ zYZ~8VdfyMs?CWPK_sV@AuuH~8yB;_L9IkP)z-x$h4e(nL?<4@lrdk|mM~$jXLv90& zRGbJ$Obpx?D9^znTPh9Xd}6A^}rjz7G5(hCD_BtFd@5RKInKr%^+(n6%5-R8Uxag2fAIVz!n*uS#X+! z>5?e&VZwuZr%^^en3zeLNGA&9OtkI>zIuT_{Q&Amye&Q=fOzwo~!P(t8x@&V+5Em18-#$82;2L z;5!_Hwkc4QO2n*kHO&x~i^EAU`djQqnEv4E{R%tam3$hL>U>ko#CZdey|=kl`kmPI zS&ST9?g!_R?FViCubPp996R?i+V9i(N>Ba-h4{wvxN3fiAm3HFIpxEe5U~^#TZ;j> zg6nS}#MyohqfShUja(X{vv&Z>oP)-BP}%T|3)>VZRB6s%wS2d`zl3@7qmCU#&o4Kt z&U!u@TtHqNfbJE}7}0!yMYCn>U??w;YJ|gbaO>rA{wRUVn|&XN8*W>`>M<30sjO?D z`;SR@b`4UC)8;$?^flLtCbxvt!LCg5X8+TtC#P=mrUK02W}96c`KrV@$R->srDi|( z92RV{Pn`m%;Ok-GzJ{Y*D{ZBs0haXu7u6NuH%FCUZD z{2rB#^UXmvpOSZ7LlV{_w-fG1$|UTi(I8n8l8gbK6m`;sEM+4Ij^N7MwWGo@MOSVs zfpV6qCEzqpseUj|Y$jRf}aa))nT<}pZ zel8rtOrk_tj5;KSk>roOZ(K$MD-YIJCds^7Kn$Sn^!uh3C_J~Hv+0tok_{PvaItwh z=B2uhTNfmNry6EPxn)iD;TV&0h=pIlt?ZxPGS~;3en|ud1t*@PnpcCHU~T%V0snSU zU-cH9=OLp7C*3B)LX2F!icD|ec!Q89(ChH|a#?~Q2a)5^$tKys*cVCJU^^s|;Lj55 zCs{TJ5OQY(|Lco%VAo%vJ=h_BwX1cP`4J-Y^1z?BDO^ZvUr{;9qo^!AB{c z>I(Q;K$h=6o~Fgb=DJ%BN|adi8w`^^@rqk!yM))6ct&grwK_eh#x`(Z8YXATv{EOh zytW%>v{X!dbS8Hk#Dvn#YwU`yfYaqOyI2+w2V#^Wr*t8~RnMkP7R=wfY7HVNM$GNl zWi;bXzX}cjT|#ARn1`cXpnw#L5s`sg#^M{enT=Bn9`roTc;mq-0bR|N{fabgq{T{5 z@r56wTNMBo_2{cV8?(U;Ko0(H)a;EB0;1b`Bk2-MWD{t^5`=fMP;7T9zu~ulCZ14A zw>G{hz8SvIoTbn+j5N%O&Shw_Akks31dK#^i(M18_+TmWf9sjp$wBZwLeAv!{1uUV zQqflyk#?+Wm1l}?Dj-8op#&R7*ti zP4C8EIU>sU*XEVfvsYDOxoGp z0GC-nUo|?BDb{GKv#d>MGYPes_>SLli)ndx1(Q+VCG5J3pS}=XTbX|*6wiH)T$ub$ zDQZiFK_(KY|6RhlR&nm`3A{B(A4^$8dRE(7eJPtDrQTrf9xKu#N7W@sK^AFP5P+J% znz|g4%HMDRWuQyh#D~;;ADf0M4Rld-f|(Z3I=ZwReDd;#W}Ez$!?ghki;e8$KRjW- z*;iZ*MyD?__&<=a8CEoPCz}XU#Y$wN1<-N;&~Jb9@MohM3%AQ(H8i2Es*8=1Jk=0+ zw;^cY3d==}H(uK|n*0ug*?15H|2CT^{IAp^x^w!9FDSXR)*WHJ2WmI=!c>_)j*R^}j|rfAe840uVxZAQ>#L1sX@rz)=Ho#8B3&W}n@ z`(}*?+zgV4u~(}-B6dV`++LV8i%;mnI?WPr1z0#guc=?7Z3bc8VD!0h&j**EQaZ6> z^o-$?^P#wlHKX$Ql+C=AC#E0z6p%B@+>3~d+miV*w+h@0JAk$|l%R0k%=p!Pj@{co z#KaJuVK>eugm>rETqY4J87DE?^ve|a$AUSzX#)69K|&X^J*0V{2~1v8oR5SCn61cc z0l$zp#mVY&#BlN-Kbk9`=s$0w|C`@W>6ML;wApvS}O-bv$Y*UNeI5 z+2JDEq|dR8*%z@4baT4e7^s4VvGZTbw`1-dM2lP%2JRme{weLeQJ_;zGO$6D2sjOr*ehI_v00l4Dxmssi6 zx$_Y!X4=Wbq|}c&eK7K2zDjRrBJ&E52BbV2K@qn$MP;7P{5@&;VF_siO|pu{>!Shh zMP`s8VhOsL<^3b`&1nvP6xz4~bLI7&7xo7;cFdhRHkQtrn~eb3l5ifMV85OPmCWDY z5!;BkmyBTqSwx82=~F~`IaVWYB61E)ezWdxZe|D};N;f8ZPJ?H$A!BO>i`Iey4|J+ zMtR03rX00GqoJnZ_Un$HO_X+p_oIdXLx?iO8G>z{099KE!n>^k&}bnfi1Q*=T}dI> zOMro>F9uUZERFuqH{y2(Z9rQSa=ld!|NS8PC(D$bC?!^_ROn_$?xhGM9u!_3<+@9# z$6>~ljn>in-~avFpVP~XgMDSy!|nRA7c;7GnZv?L#tg1TPO|gEt^LWC%T;u{jsQSQ z-f>I7tNl#u9+jLrX>a)iIE4~eO;?zi2h>W79f4I`w-=Z2Tr?~3PU@iM5nK3Ok&SmZ z5DUI{zqj9?)fF)Br77-gcQme6pk;ZZVkx)TL6`Gn8TfCT5}UG zk3!--g7c4e%JT4_;Zv0%&lpUyWO4Q9iyJKuKa;lSiBQ8>a&fs@&dQ1k&s_@*}7<2~E ze;KJYpS@bMxN4EilBL)bmXG7bVJ)CR%IkClT$AVxEUrHYM-X>;O+CusgrL4E4iGhxNf;eyjeWHWkmt%l!hHdOxGZ= zCWUXirVi-4qbU_8)G7;-BqZx?CKMq=3+zi^F zPOpyYzF%-_^2vc?871&2yvCl8?>%*#N1(91de?&~ZW-_RJyEakC)Z!PEO=lb#}e$t zt3KzLExd_1E@OTs$^$_SK=vy)yjS`RW%e|$fpuYfJ#D7MRKTS*{?a*Xr;`+8bi*1J z!)N@ylW|(ZVw+ip0Xj^(CYo6_G;#phjJu+>XK@rQh^V1cDCq^ZHU1l#=d6|BcsJ}t zK^72%gRs3&@%j`!`F_W}lf-Zs%|u@(UYcRt7;#=J!q+hbX^M`tx#d8uq8ug(_nd1- zpD?A4m^AY~7>7e7H+wBCg9F}8o7YdPh$4XdP%=@&b|{MxZu*6$#$+-UfD^xi6$&e} z`R3TYB91ybp4TtCvWHo%CpRPDc};4KWEWh3rafjBD!5 z2pld?%+C5i(ev80lf^W1Nb=)Q^NRx?!8m-&Rn$Kv069R$zv@>3n6c7l9yS2iHLM|> zULMx{{_S0SK=>yv3$m9h&akQ9vS+#+G)%QqL6uO?6u%ZuyaAXQY4kEOgfMdboCzww zGV2|ZGUJmC5jCHWs+}7kB8tmSz_|RcPe6^#|& zF;X5jA6-trotfb+cR5Vp@o+UP@Q;4rvRf;NN2X_O}WQG}wE1s}-n zzLUETc7nCV%*HNA9+U>EPSVtx_(S*Vn0R36{+@{o79f`$L>c+cTf4&2_0lC5bYrxs7P0b zZ$mF-p8I=Sa)MoCBT49J;*Z_5IfUfuhUDSF1t1xSNu>z~IsJ7$M-Z1e`E8UN`iRk(E%)1)m;16Wf1OcJU``Anmos`pv_$Z#O)R+O``-Bg+uFst z^b&YyeL1Sb;eESE@YO`3h>m)4%a1M9yP(p(McJ7iRNpb7bBe*wj2uP?--uo+wU{4! zHQ%-zOn_ZwK{VfjcN}^;zg9RkzxRyzOq2VL{fR4dBifCGR%&EJ7tQx48+kCe7O}z% zH^qv^i5`T&but!?y=7O-zeNw25)b+hZ8Ey8n+Nou?%czfv!B-BT`KgVq@ni6{^$c$}7xgO zrq&q^o{+Gq2d*a}6b|-)V&ly9)^(clHtO*fMjm8-x*F3k=UhXy^d2&+OPvS`xeydv z5<;<=X#2D!4h+mymR$I6P-t#JX-&AUU#j2MDIXA5A$vka`2E{Znj045W&OP665<%k zhQ~Eo=pX++(LKI>EiUBcdB?f$lcluZi==Uf4hT+kP!a`b`9bXnWxWZd;Cz) z2`}p3z~8zS?#CDHvf~5Id^9E)(qh8I6Qq!OS*jbJ#kV!G{-yt+=VOJ_7Z(zfDJno5 z#Nomyg8x>uE?OOtK_d8?kAS%V^TRtj2(c?f%6!O?Pe@*$1mF+=ZGc}zf48y&#DYLD zxNvw^h>Q5;bQ9s#XK|D3ZIh)i9Of2cHd;G66uuBI*)k492NM4|p~3G(ku2WCCO?Bm zwBhAjWaD09ZdY(9K{|!cj@x0hF|ONt3}2b;1mh>dT< zAfL)BfV+{O%o>821JFzWwo8@!h29`kw$HCNnNX1CPS4or1+|P0a8!E;YXLzp@qi$O zZK2LfVut&|`04ETofIb?3VM8PNQ1<}u=I1{u%+2FL>A6B8%AuOeNcrnEW#rCPB*}u z07gm#e9gFT(JpzaU49_BpjaG=Y0g#=7S%KxrM|xA`w#uqU0u2%M1u8)uMO5o=_<^m zK_>t2DgDCX(l#$tSlYHaDq<~VA$BF00O`T#)o1gVct2A3Q^s`qq{7a}5rMgN$bj3_ zc`+RK1}|k`eZRq01?iX!X=8YPze}=^m^c*7qm`Z>HVx+%%qI^4|1qx_G*Tji>Pv-X zv(3Q!3gu7S5E&|T5X&DiiGWOlW0R;`>W@!`*7`XZWtcZ^C)Sl`q1_VziVl73IWYW< z#oZW?QE}6p^;tT2S}R{;7Cd~hj0an0$>&2gRHYVckb#BGy`O{pKJ|nQ3Zpr_=c!a~ z-pcGYn&F#=0F5@RkGqgwK@sFoYjbZqhxtLDj>XMn>V!=ph5x#T#&=e`8dU4Kv6;8$ z(TF%z$_OFR;Y9pEKY@MO^)6jMA&P@Yu@&6M!f8vTA@NM~{%~;8_uMmyuo-ggQ)00a z`7`!~zD`&Wd^G&8j~BD%WQI_fMAu6O6zJVbE`1+HY_SAx!0$AXN|(<}4~y=wp-p@? z$;)7A#zo}-0N5ec@8YQ$Q^WbH@Gp^8eB6deC3ohb&Kx;_>$0LZUtO76lLQTj4uj#TVF!_~mfW>w;@kR-C z*a{G8ux(ruw-MyIwWj}BNZ40XWzp-iQ7|n+ z|67Ye>T|EUaZ@i3Ff|zml$8W0@&_bj#gmGDP@YLb<+ z-Op#GtY)tOyf%k%#HKOBqqp42G#5RX+2mRuhK;&zQMVw&05;=VM6P}~<|lJp_cnVS z94jZZCPr~GjW1G5ck_p7E8yez<;bzbKZ5(=ak- z$Vt-b>P;j5gVlsnOR7*pU;~i3zeDj(kVlkjzco(y@x>otjPDgQa%pC%PK@fE#*>?5 zoqS!uhc&A2`amwkWVjz=JAK_$S+5v88?Cb#?5@u<0wPgp1M%08MTcJUUJiuIqpi)g zM6LU^U?ZDV>%Ts2i1`sqgLeuMDiB$UcQ0KC;9{s)8VlsoHY{K|))cBT@kYC#CE&dL z*Pv7vwz5Y+;WY3$HD365+nKNt~ea;j4+v+fCMcA(^P+;uL$^ zEE5VdKY;yu5F>)&9JFDO{L|JJALbMlMkjRpDhN446<=QcJFWg|M9l8cl^+vJ{B;Uq zGX|kllR<5gSFF1V|FR{VFtI51^Q!puw>VjK4kwm8IGFB@X1xbE6eIm&jJk}QTrrS} z&*y?>q@PF{SOkV3)27;JaPM0&yxNE@p%Ta;ExchPf93cP(@+UXr(bt{>S^4P@y?t^ zIAZdERL&f-jXj-mf8;73-x}ELB1j17O0z9>ePOuuWP7$b?jcI)T*5_IGDBV{?o;52 zF&J();CFyJP0uDB{{G_s`}g1e-FQ9b0y2dgcr$7{!Qjb4i(v&oxdlwFs&q2C(Lm?N zzN@cYyFVUNCpSGbveftCe4CZNT@nITyJZX#0POVv0yixRUjj1-!yiuje0#kfY{DMB zQoYeMnHc!ni$q-8P~@DkPJPthLy2NjKwv-HV)Gm$Z<|8&23~3v@6EE~i zJPzHI2z3mb+uX7HyWE9JoNXF7(WXX)-~;iuD!vi=Xz;+i&gHviE>=P=+h~;V!I0^8! zk^Ezt#4xQ5EbzRHdmmhzyeFnnDt>!FukR_wt{ajMIDtX8@#sWIz|Y2y1}`fN z3e48}HN(P}&qaCWyW=5AqnKo+%LG5PE)u7{E23EfgD(<<5Z!6I6xvRpt(QzcnQ55++qOpe-4PWudh(ja}r}A zEhOB^sDv( zC8T(#InEY)$+?a^0XEFWg45RK`{7zIJ9M4mUT*Mhjq@wzMoa<{S`H7ijkxpNt)$Dy zOT(e_H+fq?@6IZ0B3V1*2@K{+`10=EnG^7g!aEF@%+|?GA5P~kw3%T^Y`G9aFd-IO z+>c*kn_lcOkw@aF$7M#|_;JgD#$K?wCY!HdxS1s#gxrLz@StYlA}~MyPF}dbNn8fI zh3%X>r?Vf>jRS+jpdJV}P7OQ8IC)9CcWL_LGMhJpCcX~Q^e<`;#)7U z@kAh>VP@^C1#Dbxljp)FZ(}hTq)7k6Zllxc z3-hW9m!9aYgnNWVq7?z4)e|IxM_BoXaGvA3Ja5Cjp-8#E%=rf-4=AJVZyl7!mE;tuLX;s{vP&DUsJqzu6k5#-hz1IWYz_j>&`ue?U|#%rP3CVh4~$mrdc*6sE&6p z&T@w(XhLqzcml#A&=rRiHhbbZgMLuA1}gZ)8o3x77*^|TSzH#T$K)&smb<5`n;M%Z?u&4_$;iP%K1$G_hZ(i5_X#*bN*UX!05BJnA z%-nbaII<=X0?+w>{9C)w{Fp5Mr3v41a|OiZ93I(1SlyXm4{;sfnaBi?uwaU}!>~Pc z&T=q`b5wLHI-XlEKW{=!j4%U69OO>39e2i1?e1WSps@UrAR$ctLwykqW|~|Sdc1o) z%<@yLb+jMsCfC$76BW0sm#cCxOh2}}2&(%-`cJManSl*0(BQcGg&-V}9&?bEOJ0Ci zI5(D)3SCSwWvB{F=$(m7&ay^7ul-v73g&mPPXZIZh7fF0H2|B5(cvFw6=TDsgzW&K z8XARlCd(s2`f=-|f~d9^L#}fYXO^_HTq(f6`)$M9nh71s=f4_o@Ox|wAd+Dd{VZ;M z_`6!LfVO9=7qvf@Y;Y!7FkZ)wCXbM|JlQ?dpO}Y_a8$F4NkSj9Nz5f{fAGYZx2DS@ zNfW*Nh&M{LmsxYeX7ivw0yMv+pg@4~3l7YqFH6sBGg^Jdv5SRykn4!ipV8H>!9Q2{ z2D_X8P+kff79myk*uBk}@fG2oKJ3Pk0NLx1?*(Wx)ymtLG7!2Q;LvqxpXm&FJ2CcY zr7bZ^MIRG2XWUJt;F3V&`C~B0p97Y@(7poVUwEb5MT@ct6|QJ?c6dQZAXbS^@~7P@ z@9;eew@cfIxpT$c&V&*&`B!rE<7z+b%{`;fxj0&aDptHYPBD8iMw0MxJoN#HIZAzt zy?uCa{D$1Ufw4>zQ>sFqOW8tT8uUUEc>7j*Xu>s!s?9!Y&~SkR=Jv9a>a2p22<&CfZxjaA9R&aEpR3wh3u z#r_7?`^t=hbc~_)lCr$_e-j|pECZ@?fw~!%2rWheCWz;6Hd{gtJ@h-^0gc>19+eX7%0RK5M|v?1JGdR4scjXLHROT#SHqjX^K*D93FgdzuJLrcmjygyqxd3WZc6iNb|@-s*T5f-o0W(UedXS!@ zXte1=YKW{N)y1PWpyz8LEe0bQJ_zk^uS$1cBvv3A!RJtyJYL(&tE>+}l$mV0k8( ze5zlzG>cdVW}pUMy}|nECs1b}-PjlTLj}kP6Ye5$!A@6EU_SS4^V@5skLX)-95RL$Yn*%9K)$tM8zPKV>IEjbVUxcw zyI4vB55yt$GU)SKu`?s2uu-2JEI-@=z`t0fl@0 zf!!m-o-S*#4IrSu=L@M|P+X)Jlq8&=Si*G(p}8yit{INWb)W`TUS=wXt%ZXgr(|r{ zy`(U2{+^_Qhnd3zj9rn3i^alHkvri>z)(4B@-~9|{oJg*1fF(RbK1Xr$J4u)?kba7Nw?N?~qZzKlV2I3928vo2yOAv{rUl{tyqBRBXgG$}BfM zi7Uh(21p}L*yqyuht;v67zH}h24Vc<^Z5`!a zcdf;Gxxk6{$L*kzUH9%Sxo{{|e@Yb?RQY@&N1Gid3!s-1nCqxNkE4`bB51-r~_zh^@W@19SflIa_xAg*uOi+j~1K^8{)}A=0>jdB$(aoY6b{No= zp}lR2rAY6?$b<>qM(5_$9<>MuF<9|GPGO&Gkd4doo8-5-SL%VeNl-c;$Z{a?-EfMHmu=pksi0*21_cujW$ zH!;{8p~Km{xixj1$}QxKuTyE%yO>1WE222Q9PMLd1ngukQ*pL~X5HTIT=FFhif;iO&fXE{c_c!hpd95( ztBkz!#AW$L!0Ak7l-ac=HgWd~>^%;*_asfg>>bBEx%#u=f8C(Pn~C>7ODLp)3V8*< z<7pkHPJ2ZN>Bu431r*Tj)Dx@AK3)%o%n5ihmqEaV)iw2tE=R^n}|?P|3(3<>E4m#;d4vX ztwvD7O{@hS_g{wMWOz#!z`K*m#m;$!%n?}QRueORZ4ow{X*(e{N7o6`^nqL&3(#2! z9xGR42Wus{tY%{DPp!<}YpOh87NX5CgRBzc!O<87z4TX+3C^}kgFJhOjv#E+ zg~9ClL2Z{{1&_16=n=yvz!;p2Vc2oLp3B6D_lmI_p>Jtqg{#%RN@+U=LVFHS){)Jp z_-=ljq;HY%|Mp!x8W@U1uy7>W?j*Uv?L^MYWIDPjX7LC;_*}gGx{=u0mxAEqWMNhm zq=c9Q1^>+v0d}gKX#uVQ_*ks5xoFTuX&5)J1VTrbW+@XLnxt3%`JtFwg6g!LIF*zepJ05pEI)%`8Zc2w!!wB$y5{J+iV3 z5orp&)BCU%!cu5PkHFADcee%8$hqNH)3MPy39O<8aayj4(61)qtg$gtCuSYpvFPpr^C(TB#f*tzmdBqm`D z%bmuBC*o(?NxMgZL0k_-s>n41U<7)}yG)PqDb zU%^+68LqtNberCvC=txbtD92?Kh$6JuIdB>jrmX-aPt7@({W$- zy539%r-LpW)7%dGA$0x?1S(<|An`s7ad2d3pJ2=-;V)$F9D~A#P-+#m{_xP<{((0c5Upz9&ephBrk=Ip)yE(=M^o2%OEtW_md%AP`gxz zrk(ld64la!UZZ=}`Ds~#r}){|calZPA|xy{jp##@w8oCW3oc1LU=byYd~p0$toTcG z(`SG&58-?2ERqP9aeFm3^WL!2zz$dG6WR74a2;qY`4u{-`>gr9L>QEx!funLy5~5(aGYtEGLJx`B!|376Is57SzuW@Lao}Nufi8jVAb!u5gr2N#bE_rQ+QuYyt~Li zHlf`OaGr(R^O*S(w5i*TSzv7E`ZRV3qoTJ;k{_Nf^-d{eat1cAIDA)QkTlnZi&3AH z`UrEf`m}(PvPJ}kcBFqUCVZBl+a0bs2g5|*3@CYHJ|`ZRNDaz;G`#2xr3Yq2#+6e!1b}lxetdqAF<*r`873HGXdiBvp=|yo{E6a zMYdF6>X?)fpfdGPJ|M(57Qieq0cP^6_yms+whTn1S|s{$%&KLtRfP)9?N|Bz=zmln z%?@(7#lLo-#P30%0e)Q@4|Y*Y8jvO5PD6<*E|NFI6ypXq45tD7j!m@hT7cxZa2(Wg z=h`e{P+Acq^(}4yk2%jX8H}SH^r|gp2D1~cY23a5jKTa+E=Be5xcX3}J#&4r*RM~P z>(U9}al~OG=PfXq+fVWZuY-9WQWu_((}=J+eH+!kh}CJHpxkE0Sf*@0*Gt{IZ|^cJ z);$1kixU|W85C%l;#tKFuk|7z{b_Q-XLxl968?VoPs+~a_PJ=Tpjx=a3^fqtc-4j* zqUTyht3@MphjIzjW`{tMYP;g0Esv)VNi-D;*)RG$7j`fgK-T@4F}er}P{W+B)gm1` zOPSOb8Wqr%0I2CgIV|_Fv938aH#xt{0SS|kz1--RXkfxUB^(yXSCNV3?l3A4(f0IPLl z?lGgV{@UgWm36r~S(srPVY^-}KU=3#jVhQ|@iI1v^o>Dnsic^HMui_bv7#ZkgJDmz zmQ40+A-E1W=jBMeS*ZzDY?~62eCtX6G5`YB4~MrCjV=V2edv?kW>wkxjYVt~6+x>W zignaXB+g{AWx2a;;EM%A#MHqQv{dF=G2z2swrG*OFOSs7Z2placc8@f$^>U$f~k_^ zu&Nr6F`#fB$9}-{vlb8&Lb5^U@9^i!#u*?Kj)7^aBVA=;bwTcc0&hq3^r{8kR<;gM~XZ z7^oQFhIHkBSCFYL<>1*N8hpiobMn=fIfq>3;wwJ!iS{Bn{d-5~Ao>5FyB>q5 z#J1tOvF|^a+li^}fGJ*ZFoM;qD!-d-KFLsEF@X6qZ?fYZap0xY{fy!{tv(1JZ1DNq zer^N70Tj?78P|>gd(hk%7;Z>tgDEG`nVZ3a{>2x$5K;ZYOg0 zaW@`{HxF4XYzgX!$uA9=-a8qr4)A!H^#UJ&7HKjUkXP;1RIiB-o zk?X`HgjE9E3OS}j0=T`P;^ZA|9sLA zp|Cew^4t^Niney?*CKB&)1f9g3>U?om&BBMd4Aa2isd2V@mq5vI}IbI(NE?@kx#;= zybGSf{`%hnmh}L2g`S_xujmrk%0;yM^oH`4F;@`(wG@ju`N&*_hFN5wvk$Jp;7+{J zKJ+qG&pBHHVJZfQePb-wV&b5Bt}DZ!9a!uF3*LC;Va>e2&qLA zppSrNc=Nc2Z6uy4@tH-_a}k`lGRy9S26Kvc4w1#kC^J}fFlI3i5DsI^*ebY)v^ncc z68%qTCKm)&LiXkogP9VqWfZ>6CC(+fwAC#1q3c(3Q6DdtTshk0pbX{(O<`5!I}gCt zRSR7C6D=pHjBuD2O8$)$ve+NFhv0&LE;5+tFh|Aw>kboLXd7mRv4QQy(hO`%YQGfh z2)>w$O9{Px`v2elga#1Xk$FRDb!Lf1xsjH^o^zAPZX@J6?X0)5;9=L|KSYJSRVWFb zjS=*k)I`4qHtYZa6JPQvPQv^L++NHoLw4ilSO&`309%KC@F;3XBXEI&Nvt>gukdB* z9)z3NGUds{!QY%@z81u1sKWx_=GVrACc}Tl@-qvpgx`KwfyiHqy}iz@VZfGP(|1@5kqAqtkD_;LPbl3L{R1waAE^@Hwm}J{ z?UU&U=$1U1)&$llEDa`k9GG{qcbfUWBxDhSUvG0?_+#L!z4hGZ-=l4bwIRo)@)9Cy zLpr-n9liIIbIWj1>F&X6k;g#L6E;sWpVRw(v$wxl#CTEVEE;RZZ}anGxO0Iv-_n0P z8?lGzfdvnH=X1|Sfk8#0RB?kQxhbZc2Rq&_#3i!l8_|L16(Gq>ApmqDb!@GTI8EZz zKux20ENGmGFwuZ$x8~eOf|ssXej)0Cs=Lk0EQb+$$AH_kdCjdrat0jQq|PkN%Q*%X!eV!_PdW6}=Gc2S0Z zC{JXSjAmkS<*w+f%}8tALYM)?&c`706TxAiC+os&cI(5B2i@sxs*LEA&IX^MG{h9~tNLm$yj_%cnku&eJw9%QD18C+8JaX?a-1a}3aS z8=~#a09Y{|L(c9%DY0sqiQfIQ7cpU9?ajP5Vw#A`k31scQ%yM`YbFuAw$wD_RVnOb zxaH~E?LNI6s!ZGE=Uw-ok1cfHl2dw1Qox3|>C4wv1u+{H`7hDhx;`dl?qpY$mv0spr_`$kem6rbo6*JVN{r6>7)RI1ztkRXEuFjmtMWlHf!lS=Ibi~ApqA^ zzY3iO05?^K__fqu53V6o1d=4a?kE~P2)nd$&7`;3^AK@m6?G&e6aE({M=&BIHZN%f zg5P<6mLD7HuPXzn1HmZW*1h<2la!4I&2^tf4-u>$_)h^4O=7c|W#pGESN+dy3m zm}6laDLt<}QnU!ua^l&!_vL5Vz&D?U~I=YgX zykk+Qv6ILq__Vy}tcOiA=ES>`pF%@ixgKQ+1%NX7G>F=5waZ^W5XR_k53tU~ zi;0-b2uwX@3};2;r3$(K$5;J4=u3U&iCke}FO2Yqb>QTizfdDrWp4%wyeuIyu}WM* z*ZiEsH*F@&+YSd1DR@2%=bs8>*whh@Q`1s(%dJ zk@NPK(^%fDQokYLrwCiPXe;OGFerU=|-ECyO9EZ60RQ@L1vIkwA-E(QS$Bnvl9knhqBEd{m1 zx|nZtFmd*b-&L|NR%t&D;=Z++5X)ug0W~l!2(_dr`^X~z7U`&U%nRV&jmK|S&`IN# zrH5{W=oYjXB*!4SmR?`E!HoSDBAU^LY8;P{ymn42|B;14E>336R>72O_GMB}#v$#s zY`2)gQcSYNpFu0rfZP>d77>_WaVZDkFw39;o46QKfaUT=(Pc2BeXUos0lr)>tC@~h z)h(*qqQc({$xhhu()k=dMm)p;ea*PEt1zF0oY@c8+Xt=Le&U{r-xxd2G9jG+!uva= zCv{0(62UuI*Sd&@8TW-|p!KZOVfKS2I(O&hoj=93$y(yI`-JQVtOw&|>9$Kx7-w05 zYZC;^Fh7nEb72kzelh|tDgI4X5+Nn@tctZNGEnKM$OpAE+SR}Y(=AiLRN;hk`0H9s zh^FYp`nqBap-L`I;Z!H-f|vew6mC^3tiAu#N9)Zo(WBnu#Z{Qa;Z2;{OQCr)eLvC? z*1}dLe?7H2joq_arf+axzx`j7|B_Dr3NT7qjXa}|@^B>`$r6&a+G#o@}60>!s>7(bO2yJ5ma61TuUnkwK)RZFy+~?o$aj-e7K@%X)M% z38`1L4ene*?y>AFxZxTD0U@@oV%(@4D)*xb*pH`iZR8@}UP}U&9@UN+ND6XDRonP= zpx>UNY+@_94p85sUDX_Z3fQ>35kKpyh}<|hmt}sE;k;f#x0t;OeJd^Luoa_>9+F<2%iq^*e7Fd)b|TSUz@`ZSsTKS)y@nm6xyk`B z1yBzHd{W~py~9LHf0uxCG@p&i?t~2^6D>K83ui;|@b1R9gxwB)`?%oz0}H2CtG$?H zb!alwn_L)6k<$j^H;={#o)@+`(bzA;aN~~)C$xd4I%qYKL5XV$KQ+)aA+sFyX{G!S zn@uFh7stV?n=H0H1nND$CWa8AScH({9Pjy&$$GF>dj`l*ctMXb0 zI~|7`m)CE5HXtJ2WdfW&q*g=e=K%P>``c)M3|WGz#WDZ&ONdrQ@2zXKhM7D_jyy`s zq>%GL1)V)>ukPJt8EUpaY^}}yl=ECTXkvn+U%{Ki-5>ilscoU;FO7MA7C{1>37ym) z9iUzcFoP{jDp!a`I7Z2Gui1O98g#~u&$0zAMygX_ep`4*VXe7@h4}oPLI&+oc`wLu zlL;+K4jGxQjd*X0mo^Cc&esdpEM`kUZ_Wi|Bj(PaPnLf4ketXR<-j}sX#r8Eun>u6 zy9>JEH7}FE;+g^>Ab?}zUaH5U7zc-<&u^Juu9ZD7aBfG@>Fg@ELxa#G3lxn~t04nJ zXE6EWy!K_F1j}_z>7dB`lMVlb7;iv5474Ke0ioqS-(0d88$2MKb7f>;whuDPwG$4I zG+NAksHtEmwJQ05-7VecwtyG)Ezo0k^FRB<2Da#^;y`zalEG2#&NQ|v!TRPv8%^yM zivcy`c1aL6JaeoLO@h=TLNvmqX%=&2j8EP7Xjrru2a@CKxTejr{`2t8)k_+6TJa%6 zlvmptZjb%r6wa>SBTk3ICX%=SlV;Rqm1vS4Do)|Il`MaDOI`?$e)br{M#`cvH}W^S zM2^-f)jR4Pew0K>3Q;Wg+JZzT>;(*qiPJ43Gr2aVN%+qsei3(P-^M7n092+D5#<_5 z0bZq99iE}7^0fj7Nrn%FKnIKMb|A#@;9%lfUsUD`b66Bd=9|uA?K&SS9KH`@zCzO= zH~PcWH2zO+fV|PqXKT-1h~j#;*3%g;mv5g7IYVxEHtNG(GLY*lq`;%R`kHE z!}jO}m^l+z!{~xR#3F}z0jex)`S!3jIkZS*0Dh(^251!rk#EqEGh7zM1;Srx{}=1_Oi0lI%nc#Y0}kz zg22=7PRimo)9S zupM-f`(?y7oqyFvPR1Q`{cI*jdvTZtmtEToe4DL9zop^s8{5a@T%KM&PWbb;|CHmJ zyv-Pw8}Oyxh}}Y`GW8yQziGQuv;c^vwhc3g%(LuiQ8So;n`HR)lD#WWlFJ{##*5@L z@j5k2Fq=WO%+Q>3l4MX@682&7TP}IW%m4=_$qYD(mT@KS^#8?T3}i|EIVUJH9W^O5 zXndO@BS0VJvrG5`>h-|>D>%x3_KqzxpDkU69xN#Iy-)tWy&JBFowI(aPoXn+P;yq{P}nxz#l3&lUw*Hp^@y9I5<<^5 zTzXv!YkRj48HP`tq9r_y$;~+6ZA?GZ8LoX&pk0?8-Z&D$y-+w-+)7M;;{*cco>6{R z%F*3-%eoOPgiy79U6V^Xup0#IC3oqkF)h3(Dikw{-E(q=0NmiJMITbOg=AEL`$8U5 zXQP)n_g?ehz~k*i70|UpsvVect03zL2isr~9WYF%jAZCTK*3e_zc^ajrv3pC0G<%Hm1tK80bv*EC9sc+jo~QnaGc1aCYS z>$((#y-Nn;Sod;hO-8`fpI`FUA$prbMEXnME84QRx<-4I4Ld)ba?I-R%EUPhoUVD&Evdt3>4(D@>&YBzbm0BQKj|U720T9 zKpK9ef+a|0eC>5PI4*$d>H-;|zHPpcOMW^DjLOrToR#BqPtXZ0qva0P zU#25~7y2u~g~L}d08G~aU4q}z_Kuu$qxVez_M70OLeI9yjyRs%TSl7au?tn5%uNTd zxjFAK{5cd7>+`=`!F=7ZcQF{l@=Z>ExNthYoBCk$iD*#-EQDc*2w7fkt`I5GmqpZ< zen<#I701t-1`X@d6TSrWUGi7=>?d@zEXrtoRQnig9d$3p;N+fQ;<=c#s7b|Lom=Oe zxe4>t*pG1BAO|>>I&1SX+TW>Lk`3YHfkX$pb-t2r4X}m$HTw=dIDy#l_dfFY&oG3Q z?JehgJ^P@g6t(R3-dX(ic8Y6p#-bf7GTS~Qcs!Ha6`*rD=`wUUkY0mQh)`5F4dm03 zK#LcR>{a>87H1)S1QXU=8A))H3*L9;{nPF4=c2XKN@-?1MiUb9qT;}enV=wCYPhbCD(<9si&B2z^X=?lTQ*akQ7AQwCS;K| zzvT#kkxie`<+JJK=MOg*DUhp{ceylb2%4QUYv}{k89U27^gx6?dD|_v2ZdWW5l23H zN`|A|osVhO4sTv97e~Y<7sA3PEBe}_&6zOKpt85F*#p~|euq64|LrfgL=m3`t3Onf zFIy+}B2rE9?l9x=o7?&D>ikCMMD!nGniqa zknd_XWMkcV>95=sIuhg~C&8>7Pi{Bn!#xrS^nF`sBsaxkSPdQnhP63G{6w9A{ctPz zh9Tf1WBRXGA!M*R-=1i z*?||tfiL+HJm^a$`;fI!G$#Oj%bLPtU=^~IbqF23wEas1k;^;OMNh$9Ugg*v-A(hb zHIlg1gkK-{V73D12Gjik{@T89GV6_S?ab~Jit;i5JfU+&bu{nWhoy`?k)LXZ1aHOn z@g->T@}f1(!@T(h{5qej+lLvua%2r*py=C6o4xgaCu}k9GTgnjBE~eT@o|J8CVrZa z*|UiY-?t7@=BWqbqK3fpI&J}WJbMXwuSlIJCVbOFTvX2Kbwo@eBI1F~Ycrc%%wy8C zu>@AIE^ck8Mh{}{OR=}tpwy?^+fEO4t{U?N^#3wA-JG4br4Bm@HU~S*3(=iEvv^3+ zPc18;bN20G>G0VjVXSzmv#xg~UMVTVg}^gFJY6MG7)!VSUcurZp_! zX1SKNG}V2z3J5ZZUB)p>j((%!GlBSKPI_a6UQi)hkn)I5+$*tKWOyNGud(tUexnNh zy*`#{>TpovpZkPKqP_v()J-K{b7sRz%Z9uR1VB8Dteag}G*I3pk(yiqufa-jZ~`yY zBRD3CWoTn!aziPk1{W<>2r~fo?Q8gwGofvbGl?($&$9RZ^`-kVXDj2j8AGuC`GG@kkUW=9QxRVUrtZU~i z(AD>CM%J!4kym@7^^C2v1iQ-{5;q&@Zvz&gPe!_81asT8C?;+|w9sD9%aIE0wF-*F zxpzb2(tiuAK|K8ev!dQYY-kNZ$Y~)?@;HGQ{Tm=HT9T}6WELercD#b<1vXS{dX0k? zVOJ`G+CSekq*_m~y+AGd3~@V8mM1GU1{?u>OXFMqx1$3dhlxyN;ywpR_2+pc(|C*I zg@!89-~}d?ag(xjRqZO#E&(E!Z|FVYmA5mMgN97nv%~y#;I8re3oQVbdF?4$COb!~ z(0$Y&T6+^n#!LhU`hgcCQ*e;ukd2q%JSzS;7Ffh%th)!q!LF11&UyKZbNCPogEej! zO5fXT$qt|fUKDK4Yw`S)TmHr_yJGrb%!LMX^AVDEKYZeG3JtuAf+s2|NMZJzwgrN^ zj7yhT#e~_{m(7q>|77^PLYA1{5m-I}^i!rOIPk5O$8(4R5_C5eZZWDm7mTXLbYLF<*{tte zwE^EbN#lNX@3IR#UBY7ngvTb)$e8iqZ~gsg19`fcODS(WE=w?|^UrsGX%XMZO@Ak7 zW7PW-@cO<#EfKb}PIB6{{$y?`Dht=OJF`4ti0%E6uGiu`i?C+DDzh&bpIi`_3vRrU^B> zCTz|G*Ot0zBOpc`WM5BQGKDC-y!CC5G)~$RFCR|1kKwf~r)?pTLnx_wF}TF;MS>Bd zO~GZ~*>cUb31guJDd7uXJU0X$C#Tfutl@KICby=6D2eTEEG+$u8vQu7J?7NdH{n9ySZ=hC=#0551tyE}ZCfKbx=r4m+S-C0Hpglg zEyKI^vLO_NCjF4E!}Thzh8aM_Ipnw^@q~a!QVBU1H>i}D+!A* z$}xSzs}?)DNWlnSH{v-Umo$=bV<70gB&;tZTY4= zKi9$UVmi$e2@R~;9Gd2eap0!2gl@Zl1=~dAz98_Y2B z6#L>3`L!0|uK|mDEI31+IfJS^AK58e7-uOUzqE~J@;>i(zi`jXXaw=Eq(XWXeD+7G z=QV#t5Q0;MOA78{{D+W#D@Z!khs`x)Di_Fft^bO2zCHlg-sg*b?bwV8qur>G?0|4* zP1w=mrb=NZ5>o^-bXQSVzzt;S!ohSzAU$^>%$oJ>^a&waF#TnVCMbjq=%DpR_SsI_ zLx3kb^K&wIpQ8(A&sZ?ecOfQv&i?p1G&x$|>!~r9%kVie?RLra%;#g1Zgsv52s-hC z>(O*wDCnz9@NeCtHowq`yhd)M-Ab29iZQoOP64dfiP&`e9dxjK@9#=Hp8Rwug6wq>lNv10p-?J6H@(WJ~ zhhghB=w+4RGKz1cSZi9GSvGVm)I4s*a$vxWwv=7PUGXDsnv8+VTmzb9dVrw<)0q-& z+KB*joS4XcGKgK0pcb4aMC;}5L$?}ZsE3`lEjQ(w!Sm1kg|v}M0aICsb+rLAG|bCf z%oM?pzz+i^zA^;4vMINT1zP1~6D!GMa~A+K3m3P>yl(RW%r}fRdXkk-xj3n$?Vt-8 zl-3N38}4Y6Oe>Bvh{ICLnI4@cx!0 z6@Ht?9M3ts63js$0A+l>y*Uhp;xBH{fd=onjl6wgTW|xb*lCs(csi7`5hnuyT}$WJ z1BT3e(FUxyBnb32oy^*cXQg~JfeW_chlj}HdQ)urbQ3h|69r54mu)Vi@K@+#5k(X1 z<20RJd$2^2|=#=Hiw4zsi;}Nu=h1e)cV;L`X4?(gdBhjz|gE@EwsIz4KqAP7N=sFhP<~#7COIKnVDGjCuMOCto@>{I)#<&zIdtZmNrM6|NF(OAjl$PsJm>Bkmx!f{eCki}FIVW={>B2PP2#O-BI>*%G?_yfc^M0} zvBzVLbhda$Aa%VmPVBfOVX7ki4(*>0xGdJ{IweuuHC#B1QUzo##jl(i-U16z`zj1J zOV&*Uh>PWzHy-*YY3*2#KT=smfB*Dn z9IqFNRw;}T1I7wSZKbue2@e-~?OR>~$h9!}t|WCyp!dLzaADg4r~st%{xlV>JMX5SJ2u!F(+4X z!rClYq+1Bb{I^Zofugwu2sLhkvaKZ$-$R*k?%)k|m`fSvt-9^CIcG|!S+astoN{n7 zkSnzQy$NuOwj%C-s&h2ykOTn$YWCxNfSuhjRgiX?<4%)-=_{3BcSgM^ToTDNz?elv z8lQg8STsvquGi8Ytg?U}2)KH4BJSIKnkoR%MTQEnbn6?1X$tgzn$<5t9}r>G_5<^S zevn=a97W!2&*74h9r5dPQ+}pTuy&g529~CyD1C0`C=3+8q?lT^7N&pigxTlE6un}m zn3&zB5De9x%pQR$vtwkJSqHeQPt>kWnsoy#UT`9z2I4RI*Clv!!V5ix(f<};FteyK zw{QJ&fS7sTtgz^!*p*`>=&7@w=de8ru=)k3lZq#bi3(v6KMAPMCZ||R^DmUnCpp*! zUZGi+0XiY6b}SX1C(eL!K+5%!&YP0A1a!uh0sHOEF*B56tx`XU6^tEC12FaB47}>s zj4#UIbpj{ECJ8n$7r=dx=cZqXET*7H^x7k@)mnAPJ;wG1)x~|0b0B}aA))zw za-ub!rqL|B1Cu?Nejr!J0tM;!!svS__dt8rLD_Z@=VEv$MGU&FnhbAKLm%uN2WHli z%w+v!mbP(~<-sJ|MyB*Yh^7#;>~SE_&4W=T3-p~Mn?bCbjw61vEclP*IBo7gtN8D} zclovJM2i8V8Av6dOb@KL!g-Yvh6{Vbv1)tv*fEBL~O2fiEO-}v^ljkv6 zT8Mt?+8<6ayY&|E?RFFpU;YaD-_Ejr4)#YdwKpweYZ#OmtY!&CK_u;7mHMi@3YdBz z$>6dk%pXxQ*I>4Eq|_RSR2qBuX}3<~TQx{(Z(nT1vR@h@7G*l&z?+>8)=&9cy$qZB zHbWaS$*{?XV&6&Spl3_A3Bk}SFwf3GQ|C5O`=a+F%7j%*GHr9r1mi~R(8P^z@d+FC z%!6q6f(iE)p#Mhjc+>Im(OhiqFGTkL^Yg8_nvO$uU#0`DppKeW#oEkDoI2eS6OM3E zaNnZ(F#ut2Tl{%0>AG^b;46Q~aejZTRsgUzblUyojOJA`6~H4nPa8e>YMeR$W^h&3F_ilY%l$ycW1i!0fb8D{2j3+U$0G z($8hj8V1m2t2I~*pEn0PNQzjS_DjH=?QK8?P(0@K;bIk@8%>b`EaF`T_L`}WKl4K_ zJ+&nh?$84#d)2GLi;c9h^KP0I5Bp4*(1*A6DR^7@3+#lb4Rh-V9fCxPfC^rY9-Wdx zA4PuzGgp2B_DGGKxjhJzM9jCJj*734=F*7(0@bRB-%K)iw5JfI8oV04y-?_2IQGc< zo(3*-CN*$EjPtVGTKHSTG+X+~4DO|xaHZTuzm||fOPm6--!S$Y7s^3xDkJqUZXFHy z?PO+wC0>obfd^v5hhh>Rb!=)7L$9LHIXAMsIPn;A)T32$)+H+~lg7?#3(%}c^fdhb zSvX|gy@VYR#bFi;rHN_?&ZyqI)`jAF;|AA>!ke!{lJ^&sB72D@;hD}a6#DkQ$lU|b zFbJ1l{8;n=#QHU}*U7o0AN6r|x}W zGA?^B;XLq^THdD6@D4|%7PvmC_GLPg&t@o2XR#K>E8cdY_6_QA^h1&9i`Dgy@G_fG zWh<7j0jvgv0Vrr#-KQBw-pm9RrY+C=Vg@zE@MBO-a8mm^uO)`vZbX+Rkbt)b{I3RB zSV85b0Gc_v@(wY@D%g6sWTNhG!jP+z8}aBi!f}u?UmP^vOncGn;_I zWZZ2th@juvxaj^};PJHRC18+17?5{`x_6x_cM}lm(?8El)KU>@WF-4si zQFh6gcB2-D;9rHyI%3M4e;U*u>kfNxnKY#Uz81JhJTUsv+Sq~OwCiqd_CRLW?iQmj zu+AuRo3z<(^oa1yk4~^I<{$-=KY;~ZnB1}dew)A}OvO@Re5~T3^8us@q&?u z9Le!ff-?u|55OSLhp32v&^!B8;rw3lff(&1z}n|Y$c{lX$1w}~D?{r6ouSFF^PcIh z+c*^^vgn+=hnSaYE~OT$81G_LF4S<`elvaJMrW~O&$tAyG^^{lkcDVc17H@_(PY|q z-w3a(!8vg1H0MdAvAeMt5#`l;wk3`c>po`A@7`!GQS3|1s6ZXDinAYSDy& z#bfBV)y2lWsBw5_U|Zw7lLD%n_u8#MTgPGkn$SV_(!CJywA8(fB;F54A!opI7JKMTY-mf4H<(XE4GIcJw{ zt-V_2D15+yrj0>3Wc)fu5nXTkqr}-HDS5F`0g{L3)I+oCLXiKInvcg1%58+VHy$l_ z_G(*?NXar&Q{w^~`Nn4!=gg1c8hCv$=aA#q=5}<33BO#!GdFU2=%k5Ne?6M!r$41{ zp$;bx`L4pn-U6&6scA9?AyG}}{N7-26)!kP6uA9f;cw*LJ`Dt5kR5(S35bpU+CVU! z3Arv=Vxk#1G$w{_MEciID5N=Ax8I^XG)ucZxfXWx=CPR#k5;_h7*WlQE@3W=4Y+3Z z0W6BB!3?~7b}(7>K(1}GAF%W4UXZ!VeI30er60K{(BpwIu&8RY@&C!PEulnkUUDG% zWYPSH3vfDx!P|_=0U5dM6orxM-U4#>{}uHoI>45M9r`*+OxSTA9x>h1@X%I0SWgK5 z#TG>O{^c@FmOk5M5Jlld421rl8_?YMq&i1)28#3qh=9iz<=;3ylkF3i(Y}najZ~*i z258*H8sijkn_`XYXr3J zffYp!MapuxZGYU0*gPHq7dqlYg6fbP?`h$u>AANH7q)8L%z2`!HBN2`Z-)yfsmBUJ z&lg5!yyhHXaB$bGav_ieG5C^xX>N1DOC;ZTjt;Y}x6ce@RdJ{?Y+EorlW2^H_g zk{J?4!UBvOA(cr;Rmxq-z;HZr@5%`q69Z!YsdUB>1&$bwdw$=X`2i?oh?6USRO8u3 zsT<`5$&7O~k@a||Y~1P37Md7d&G-=qKa5{;U=i~Z z`y2$e;dV1}(c8D}$X;miof~uaW}8Ha={5Cyf=ta=^RslrNXMD(8^nbXrW$_LWfJ2O zY)m4d=8m6b;A4Ou z%CFpFE&#CrP9Ox{!Jvbvm?PEcJJEZC03`Oia}T3oDD?8&bKhB3rI_*&^O!ZIW+EmV-uS zd@fVRC$Xq?6~2+pBZ*RI}QMN zGmC=-7w2zMh|mKSLC@HAH1B`^`eO_#z}qi+?$mC%alpINmA3PE@x3Stg#I~&TN+a! zt4|d?r~j=l!G0%Ype$Pebi8Qn{?zB#>D~z=LD`jg>zJ=UBeM<62Vy}?{=moNXbq4B zS>Zh(=dKDHVcDZZzAgYf*JZRzL(G(v8Q^kYk>q8iRQ&TH7`SOfs?Q4p0otHuLlD7rKLH}3>aCF=}< zU4lT(){2>cTHr0vAnCwu$s`l#00YI=PVDUGz?g-(38L-aF#e6ryT0}V)a(J~Jywk4 zs?y_~EDDec_Ea0xm}~?brxl=Ls^aN;{mb>l6i&h}9Cbk8&2C*K+q0c8m{gjn6vw;Qt6d^z&5(P=94~dK)VrII=g!@OZjH zP|a~mG7EA)3c!_%vP8@DUCMtq43)(Ym_R`}bX0QG<(^~n9F%(x2zwW#)W&RS^4sUU z*c6hBo}G^xEj&YN-yuM-WNo)aT+z`A zH8c?TF7Gh5NE^5|?n=%`twu-=7@V{B60BYouqL9JvHYW8uh76=@IN}pR--9Nesxfw zFR}km2d5@7V+gCMV}iDZG~RFL#KVU)evkp#amlVyJae)WGtI4$6DUGOg8Z(t0a!ycWWe*pytViVuBv(PGNaL7>CuKVj{2w!<8Yy}J?O1@D( zb;_ua!O5gf&Q-f8bLM9HzYUmE{|ro$Zl79!npEL|XyF%Lo)1cskgDUc2F4C10k_75 z32~s4@8(cpO$bfU%RKYYCo6QjR$C&$M{x^r<3d@*qI!51P@%syz0f6q_=xcf2S|Xh zdUnzkV_i|*QrkWF76xFZ3h%dQee3DvS;xc(k?RPxt$=gsuR{H_CLIjX=s0|Rz|gMG z9}S7Fgp8e!T7nzl=DQW9$wcB((F;_yB;128Zz|;^p(X;TR&cN^-3o6DibS+L>)`@w z$ZdI{XX+t3gQBz9T*?|mAhGh9{`)I2f}C^-`asl{ZKf|l^St~utLrO)#aiuyJeGKV zgmUXZ*a6jma!39Dx;hgD*=-yN?)v|~*|QlDpsHulB@#y>0a8+3-F^LU_!8p9;%nYtQA{9tDXx{Jexo>bF=S zv1aIh%mkODbytIxvJd(Z&ED+a>ka#%UvwSdmc~}R$pFdYq2IH^pK$`cTrU8dV;9UD z##?eelIM+XvP3(uQ-X?>H!MXIlZIL1%02=V}e<+aN5vAj_2ZHqVji z{u6Mz8kSs_oYPGl!)+!E6j{)B)dYQ5qxMNhNFnP;g$x1sBH^6b=zeda^VMNw;rTRw z(l%^>OR0pYji0jdPzGO{oAw}xZET>cqQOkik2F3N+?^vD>vEUTnVDa_yjJGA&HPW#C!#j@{q*bqol-@7)f^^lI8b!V zhM8&jZzti>jp=E^8xE&&TQkj;1W&6!Y>iqNdPA!roA4)irE>%CgYL!1WGsVZvfYgb z@j5cLa)LeC{mQyTJa^HM|1yo8kOL_>RKWA?z7AQ;b0P!^vymX5+*`&3~3{;;2}7rg2ZfqRsq@c zu_73i{5FclnK#&&>YT6&VS>gi2E>e*gjUXr5V*wnUS(&#P!qPHD;e5_96@x=+)KuZ zp|=jT+bS{_Hzr#J_o$EY7>?;U?Zgt`G*~TzFKh@-!SRh2691CaibgA20 zlNtlgV@-@=p^2Kpq{g5c=P9VZn^%~(sE)Xd;~%0vZX0|I)5C=Dr|z<2S@&#du%rhwS}#^#fCE`) z^H~U?40!Ci8kE?KO4FfLS*IH*134cG#eEm>rM59a?Zb#C1yKD16@!2w68>C`bLoRa z0{s)e?WeWrW?Qy+ASghjd!mRGLd8nnV3%V8G{&3gCmqMR_YK%yC^Ep)tW8NGnP zo3gPyj=M0C;s53Robe6~UkNsw%}I-g6&_mqPsS8{zk2QGb!$szcNXS#+@P3v&kSlzfK&Tsj^9L99DR|pgj0dj_mCddDj;L zc+;x#37H_)kU=;r-cP<*Loks2Qn42uayQ(|Yz&sVrw;i9`gI1>mk;i`yHp0f#A$;l zxZIj(9eJAwkT=k5mMAw0VS{FTBnsPGPgXPYCg$Zp=#;&2rX`jcx4YN&zIP7*g_%y1 zFb0oylPzsS?Q?d|EpIp+1$}UfTNvwD9~6gy%dmifbG}O*pGmjF3lfF+AzJAX7?xl@ zi#mJ6#Xjpjb3Z;6;a(coOTljo=)5;wIQXK8l>C6dwTPuIs~MPsIR|NKGJ> zyW+)V?z(yj)BhygGOht%yv+64;V7ibGD%CE&k5#sp9p?;urh~`{g~+;N2+jL>t~O% zg%&KAk}TIY@xS)1f=?5j0qr?_7cv1v=NU)01a5}DYIfI5n?C!5JiE;)P1`qX z$0Dtucpe^wSctU+O%b`-R%E+0JKJFJHuQD~3QrTU9;joglEl6(C+CM)BsK@YDt$It z1uclM5z|@;ed_ovRzf&PDH(Ob(pr{8*IHKeu;PY|ze?|1#<2)=P|wlm9`3@i7#xA` zU&|DNIEiO9*F+1W&MAfJ) zDlx_2_P}nsm(!BTRRbnH?BaZ$5ma9jAfa?3ni8_bQEmQMZjm5tTtImMBT+teiDrT= zolG;drm0gjnMvbA4+v!H95P&3tiyq2vW2Dm%b&+-b1uk&)W2DMBkj0^THFfW1$I5v>wC0HT*I}Ss5~6 zn2ZBOK{|+2W5Ut{q3H#(>X{^(o*_Jj341sfDOgs-KY(w(kSf>+fCpi~(({?5z7k|` z4rDWTfdTuy^bCN`y!krQ2pTuWdC4_Y9%ZC@RaFQYAs9KHjW7UPpfoblCZ+oXLc`%< zaAEHwuZF8|C9$g~H)Gqv;)Da4|B92%F#!o?MF4HXp?|9mAp^52cv)qhla%}739uaV5RShoeg+-V>{2-PTC3m7? zO){})pTex7N(S%u(Yh!zjgC-A5A7aw@e%+ma3|S+P}~OFNS_&alVCb!Wh7*)?2}Ev z^c_A~pnO8ch~|@Ma|C2hz0V+8)io3<-=6)zw zlpEW~jifo6AOpe%o(dK8IM_855`V*&1P~@v4zjkWJsXR~V=i7D8&4^XQ2lu5bO{V^ ziN-`B&Tr2cc9eaS(C>j`<7Bv_6JweEV6L{j z2kxzCSA#X(TB|CUEZR$wXTWnavkwx@umtKuOcwNa$X3ho1z|m5x1K-n#WAS_K`u91W$-Cq6~(4Y+rZ{#~^;;4N{Oj<+>1s88{LD#9!NLnzxxlOR_7w z$@5|6!6DitUY7v-nAu-);(pLV78^p(LO}owzGw@WgM)~;$q)~F7!vfAabcUv${Vb5 z+(fch4h(+K-UJgM5nMVcB@vzG?k3!4hS7KAhpZ;2oHI5;4jV_~R!Jv6d4K>g2x zfj_Wr^;aGmR{oWMlNXY2`QI4K`J@0C~tvSqHpSt2^qH zESH=aQz|yi;!7+SI_b3t?*h4tZM$=S_;Ey?8Z;88W76(c4(`KHX zw(y;Bi+UZjX}k8#-Qc{VHqvaw{hjRwvNZ;=StbZm7z%ZwphPESNv6oxHRGLisV&{p zEn~yH`_!0;(fYx-0FRso@s}jdrjsqwf&x8g#H&_}--&#DHV16u*5N8zG-2W><_;ki z|HO)Aqxhg$iBs$v7}uA+>1Gjp?u@ez4LV_h<=~e(`ki*(bGmLnhK=Nd z&NC2DJ&S27Qot;5F}AXESGwF97E*xoyhb-ZI8aCkq6hnYxZ_~>^(qo4J%`!4{7#xG zz@TBmbDgtz;AU6`$9>eXw0su=f~wcI_4=XwQrqhPw%tP$@#dGFH!T97ezXgC`Ub(j z;gNy-xrZ$F=)`W+&++AMva3+1*v`tg3ezV)b@5vYRy#I*Omon74ybACin*G~?x-VF zX9s=2TIUDaU^PZJOD`7U!U@b_q(;*4MIsKbi&CYOx=lRXBEhm0c${UXJ-Q%YplX2Y zW-`*g2FAlAe8-@sQT64vUS9v^`4+!YvcK&<2|FPbdY1CNp8cxGuZHg%4H5hTx`iL%ld1#SDji4!t!% z7%6Y2roF~;HQ}AUt)?#@P)PEa6Zu6-y3rRMHp};F0|3VK#83I9ra#Yu?NUCOm+h+( z2si-LKv56=%g%^)u*BJCS_2jw*sSbpC_gLZ@m?*(5)wDdYS-)Kf5U_<*?z;dVPMlG z!8VH(7-NRsjE-;llPw&mjEdcuGZ&mt92a4GRk5~Alcj}$4;$0kbcKhuK7?;irM>8% z`*r5xGfmIUXsKhP9KyDrHxM#IwT;+uSeI=-2PM29Mc7O0T}e3v9&|PkFIPR2`dfw8 zFyX2svDM67gIPu}eDN|sl~}~Ij+68407cBPkTtj_C$>t11Y~8h1?^Two52}G`KN0Unh~68k53w_TT7vBau38b}v3U8T{NmS|>ggCVa=~(o#2e;5xFAXk zv5#Fo?5@9od!lj;HE>%>_K&)Zk-L^TLE^i7VVrZEp8S&^Kn+3^>7^_Fm0D)W zQ8idgxR%c1VMv+^uN+O{F9Qa?WhgS${v+oumEX)c7Vy>;*m*3g43+@u1|YXB=p@RR z2ibPa*iy|j4SeLAX+^m%E3TQr5HT&mT!i@H=KG;gFCFu^rxmJ%0yB&TKyWCrowxbIP@^M z)&vAD^g^48>l@%2I4uTEKKLhG9#z%a#7-FkXcnKvepIJ8d0KeJFuYA_(>MrU(#)k@ z>-@uASYqbkIrkbf)e{+z*+cC2-W{+VMfp$&TRoxYQ(Vn8#+?QixvbRigaH(jk9?-) zW7MOzBW>f{yqoU-wm;T`QBj-|7j0b1JT>U{<+3+7f-sC`PMPn6;h62cwa9H1IE=ln zX2H)2>4k+~ad4#Y0l*MYaDbsx2kH8Rn|T*SZERSXLyEhcX;UnK&Y3k)^HB<}Gt30; zU!ESq6mKCd!iYE@8gQ9w0y#bw^SPp&=$sS#*vlW-^Zr7^iZ=GJ4Eh{F-6J&#l>^lM%*!|jAfdb5`W#ZI z+I02Neb>WcoC6k6#iMX<$<}kUu*~+>f}NyVVkSv{qFsYFPzPy5N8)7(p*2X5jBv;u zHU$F7G(`h@(vW&R| zJat677?eDPc|UTq?d32Ea5JE_FI0k*TR0L+m@o_vOr3;nN#@B=2BCsw2741V5qwty zl;osQh9PmCATjzDypuT*bQcq)>Yy&jSipi=N*2I+G2Mm7A=e(kZ{ro&XDs5|^&spG zuOkM8;9S|j`6bt zl!+bpMsZa!{&bI`7|#pC^sZXC+=MHz*_%(KF(W10`?>Es!eH+X5Puu)z;-RH$&Np6 zHeUrYrW?(9%hZ}sfpj2N7YsF!U^d`CvjoL!|-7S4+#KB11E5h`?)fk@kO_*67mgo!nrWwM-SHt6FD<^ zVAG35Yytwmz_TT8pgiy@! zysb!Eh(4g6{kkQHk1mA36Z%RZT^OWtw22^d!lp$~XF^rCPGeb+Ov3jynH{lKk?}*+ zOt@?uNUxWZcL9Jkx(GLSNNY(Xi3hjxsXIvh^&}CyTF%_F%tqXyVQkT`=i94?&TYZ0 z9cbSHc=P1emyh}OUA&k>Oo#KXbi5$vW@WDgPICUA7~lu4_jKP{sTHHOYeNIC7{LGR z#>VG47HISnGNUzNo}M*BGi1gM3pB|8;eTI(+TW8vb{ZE<}m59T{>9d{+Mb= z7vG)CH;Y-|YbGv|jJOtU+-TK$z&}KVzIHYXKm{VozcK0~+W-<5W=p1*F+Zg z;bjn?yu7MT30K&H=9n@$$G zvUi2@n`Vp0Dmo}k%+HSouq)=jqWJOIid%x4oL3@~h6Z}y3@Wt2>45-qsJKsD0xhvR zM`X%z_$8qZ4uDUNMhA$+pqaJ9U{xV@42Oz~9dYLH;UO5>L^q*@XDw=z6`%U&EL-Xlrt`;Z!&~FUekd?2$>%?edDFTY0U^wG zXhJ8f7}n+auo?F2t}3J5_rwW0KaN{$RoS*XSJRRe*aBYOhgT02)v{N5bt!o#B;g`w z61{^p;9=eKVB$fYXNu(|!D)&;#j7uOLfNn4#tU>tXvq&S8ilCsDCW+$2=;ee@B3+o zZ!56`Ew{g|Kx1)b&EbtfGx#r#E6@FfFlE@M7n|x1y(Rb@ho2wv;ur45iKkzRqTqu! zEDHjQL!zV-C};D|E8QI+)cvsgn)gQ_T}x}r>~mI6wSE3{DT-UQogvA=Pp#xpfsvl= zvFn>=H!NlfHYO$QlobM(j^F~Nh%COD{*CIj6hUavh`<-B=EBcK*_yLA5&)S4*vuKW zjRzmr8I$)pyw=dmGG!a43qYYgs41_jHjVdG*Z{BZI?4m3KxD2S6HBqF;&q`3eK)S% zzl4~aZLQPC$9Jc1%UZ+9oX_~HmfOPfqpas%7^ZBR&kh$2FpH?!#jlh`t7*46qivMV zjog}~b*8}8vJZZEnDE>7`PR`!C}p#;wqC5`qcZ*N%01{vPm8sg+*Y{>7dV(08J4BG zM^D4wZhÿÿÿÿ PPaintDotNet.Data, Version=4.208.7276.37737, Culture=neutral, PublicKeyToken=nullPaintDotNet.Document -isDisposedlayerswidthheight savedWithuserMetadataItemsPaintDotNet.LayerListSystem.VersionæSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][] ôô  PaintDotNet.LayerListparentArrayList+_itemsArrayList+_sizeArrayList+_versionPaintDotNet.Document  System.Version_Major_Minor_Build _RevisionÐli“äSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]øÿÿÿäSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]keyvalue $exif.tag3[0] -Dõÿÿÿøÿÿÿ $exif.tag4[0] /òÿÿÿøÿÿÿ $exif.tag5[0]7ïÿÿÿøÿÿÿ $exif.tag6[0]7       PPaintDotNet.Core, Version=4.208.7276.37737, Culture=neutral, PublicKeyToken=nullPaintDotNet.BitmapLayer -propertiessurfaceLayer+isDisposed Layer+width Layer+heightLayer+properties-PaintDotNet.BitmapLayer+BitmapLayerPropertiesPaintDotNet.Surface!PaintDotNet.Layer+LayerProperties  ôô   ôô  !ôô " # $ôô % & 'ôô (-PaintDotNet.BitmapLayer+BitmapLayerPropertiesblendOp&PaintDotNet.UserBlendOps+NormalBlendOp )PaintDotNet.Surfacewidthheightstridescan0PaintDotNet.MemoryBlockôôÐ *!PaintDotNet.Layer+LayerPropertiesnameuserMetadataItemsvisible isBackgroundopacity blendModeæSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][]PaintDotNet.LayerBlendMode+ -Background ,ÿÓÿÿÿPaintDotNet.LayerBlendModevalue__ .ôôÐ /0Layer 3 ,ÿÎÿÿÿÓÿÿÿ  3!ôôÐ 4"5Layer 2 ,0ÉÿÿÿÓÿÿÿ# 8$ôôÐ 9%:Layer 4 ,ÿÄÿÿÿÓÿÿÿ& ='ôôÐ >(?Layer 5 ,ÿ¿ÿÿÿÓÿÿÿ)&PaintDotNet.UserBlendOps+NormalBlendOp*PaintDotNet.MemoryBlocklength64 hasParentdeferred @B,äSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].)/*@B3)4*@B8)9*@B=)>*@B !‹íÁ1 þ©çm ÞxI ·!‹íÁ1 þ©çm ÞxI ·!‹íÁ1 þ©çm ÞxI ·ñ‹íÁ  þ©oðbWÿ¡@Bç5‹ì}iWªK“ìÿÿk}¶[D&AD™d”KUedFÖÃ>ë®îÛ÷¤W5¸OîXC©T>—ʥ˻|WJçÊå»~‡ïJùòwå\©„ßá»’þ-þ~ˆßòïé]þý¡JWíUªçj5½‡Gü~^¾ÃïÚcü]«ÖÒwø÷ÇZü®ÅïË»üßÔj—ïº|Ë«‡W¯~ù-¯Q?7êË¿5.ßõø]o\~^3½fãܼ|7ãïðÝ:7Ãw³un…ïVx­øZüžZç§ÖÓå…ß—ïø.¿ÛOéߟÚçöå=]þNß—¿ÛËkŸ;Oé»Ý¹ü_þ½Ó ¯_û¹ÿí9üÛsø~>??‡þ~>wºøûùÜ ¿»Ýs÷¹›¾Ãë¥ï^ü·Þåw/ý[¯wîáõåÅßýs‡ß½ð7Þ }úçÁå{0œ_.ÿö2H/ü=x ¿_Î/ú-oðš¾__ί/—߯¯ç×ðû¿í ‡á{ßp8<†¯ñÛý…ߣôF£Ëßá{|‡ïqzãð÷x¿Gñû-ý}yoãðûòÞÞÎoîMΓIú= o’þNßÙ{?¿OÞ/¿/ßá÷û$~„ßáïËïËûÿ6•ßò¦çiü==O§éÍä÷,ü=»|Ïäûò÷<¼Ùìòûòæ—›Ïâ›Ïæ—ïùyÞL^øý9;^¾??/oþ™Þ§½ùå-ÂïEzá÷b±Ð·\,Ó÷2ü^èïÅruù^]¾/ÿ}µ<¯—¿Wé­.ÿ¾Z¥·/þ½¾ü^§ï5¿•ÿÞl.ß›óæòÂï ¿¯ôýõõuþÚ\ÞWú½Ù¦ïm|[{ÛËÿÍ6|_Þ.}ïâÛw—¿ÓÛéÛîÓ÷~·¿|ïÏû=Þá|¸|‡·?„ïËßúÍï¿ñãßÇ#½Ó!~ŸâïðNñ.ï;~é÷÷å;½Ë¿¤ßßò.ÿs¦ÿ¾Ïò¿>?ŸrÀòR)az)àw)ây|‚ßår%á¹`{ú/'\¯< ¯D<¯Ëã«ÆïjÄó€ëìÿ0½š0¼*ßÓÆWÃïšàüc-aºàø#0ü‘°¼ð=¼z|ŠëÀðºàúßëMûp\0=by#âwÀòVÀu`x³%˜.8Þ|R3Lÿœ}F\ÿ¬x>ؾ˜ ¶/â[D\– ¶2¾/"†/ŽË÷r‘°}yÁõðVá¦/VG,7\_Ë¿Å߬ÃÏ×Ó7ùþ’ß_á}¥¿Ï¿"ž‡·Mï‚ãË Ûwç¯ÝWÂõøv ߦïé[^ÄòË¿]ža»àzÄx{û€ßÇ=á¹`üñ x~¢ß ËúN‚ëü"®‡,?)ž_¾âK?ðÿÉ0ýçsŽX^.•®—Ów¹RŠ^ -¸ ®0½,ü¼Ì˜.œœð<ýí°œßcÕ8:^äêÙw­J<½–xú£ày½–p¼þXOßN^nlo®×"GLXžþÎyz³¾ÁË…›7ŒŸ·ô®G^Þ"l¦·†ßÛúÚú:‚éàèEžž¿„Ûy§+ž_pú¹Ó•¿»Û¾WwXñ±¼o˜.<=çæýM/ðõáçÊÑ™«'LìOIüüE8º¾ žÇ7|U,•g˜>²7ê3<žÇCãé‘›¿LO¿ßF צG<øž^äëãIüž_ØqÝñó€Û—{Oßàæïãéé ¶$LÏ8zàç‘£ÓgÓ ×gÏgô=%LŸëïyÄõøo—߳π럂ã ×ã+G¸¾X¦'<ÿ\†ï¥âyäìÇ ×#?_*ž/#–/–/ Çã»àøj-¼¸þmÃ=qw‡åÛ¿„§Åß__éwÄt`{Äwpuy[ÃòÀ;OßÙwÀíð{¿½ptáéÏëÆ×OO\yú>ãèâèãè'`ºñôÓ1aø1ðqÁò„çß Ï#W?)O?×íáÿ‘Ÿ•­ÿ|þs?åûrä埗…§—ÁÑ_/%ì. †G¾NýÜ8Î5øÈÓ«I{ÝÝxzøýè°ýQ8zMy;½Z¦»‹ö^¯ßëÂÕkÊÕÐà¡·×é‚ëÎÞ½=é줽 ®+ž7žGÎqØœ­½•ðŽ˜ž8ùè -GOZ<ôöÈÓßÆîï„綠O„§ /Ÿ®Gnþ–0ý}’°|òŽ>1nN/ið„å‚랯O“µxÁsðò™ülWí}&¼Üx:4÷Ohïà Ï?礻/ToOg^®¿ƒÖ¾–ƒ«_~¯¶¯–ž£/EsW¼}½-~-ØNúû -ZûZ¿ãïøLsºû&áú†p}»¾~¾ |}‡Ûm¯èîÀsáêûí^5wèïñ®¾;ö¾O¼<ü>â{ŸôöÈÏÀóƒázx‡“Ãö Ã ÓOÊÏO‰›ŸN¦¹¦;ŽþçÿñŸ¨µ—î–ƒ«—'ÏyyÂô²hîéŽ^~À=½œ´vyàë•Œ§?¨îþpÁ콧G®þ˜0]¹¹`yµfš»ÞÒËk‚åÌוŸ7TwÇý ¾0ð\0}ð¢|1=ptÅs½©…³‹öN|Ýpܸúhh}ˆz¼ŸÛéé߀å£7Âö·üž>I]q=aû›èì醞¾#ŽOÀÕ/ߪ·Ovë{WíÝ?ÂòÈËãÁÓ?~OÁÕçSÇÓ_ŸËMoë™îþùy§+žÛÞ/ ÓKÓß#ž/¦'1¦Ë îêçóOÿOþ”"?¿O˜^O/ë«”¶+W'Ž¯œbyEp\xzU°¼ò`Ü<ÝÔ_¯æ¸^­*?X^uüÞ8áé5øäêñÕ#o¯‹?.áy x^³ßæ‹#ŽÞH÷s»¥7õ–Þh6þž|q‚ñ­ ÓŸÈ#ͽÕR_\ÎÕ퉯?%ý]ýrâ‹k“G®ý¬]=qàëÏÌ×» ÛsÍýYpÜñtÑÝ…«÷»ä“Lï+Ö÷Õ×ëצ÷×í–>@o'Ü‹øâ"G$žþ’ôö—ákÒᇉ«G\‡GýUtvÒÞGüˆ§ÃG®€å‰›ž§¿áƒO<=ñsÓÝ#O—[ú{æ‹Øþ÷XÎœ} -LnþA¹é̾UŸAoŸê]Ýc¸pö9ôöÄÕçsòÄÓ•£‹7NÿîéQ{_êï ¿§;:áºbüJø:|rKÑÞÁÏs\Àï•òò•|ƒ¯GÜ^³?.xã„ŸGlÿœ×Þ¿¶ò{›0~,Ç-x¾O<}O>9ï‘K¿z_?$lgŸ\¼›_ð|ŸîçÊÓ‰Ÿà‹sþ¸côÄ}ÅwüvÝ0]|r¬»›+ÚûÏç?ós±üòî ËKI{O/Wl¯'Þ÷‡¤¹ÃÇOu÷€ë•Œ§‹öþ ¸½]üG<¿;ø:ð\õw¹›ÛïšÜÑÅó^¦›?®^§û9x»Ãõ¦rsÅôFàè ÕÝ›¬»‡ï€áÍ'Âô¦xäžÔWÄsñ» Wê<¹[z»mº{~wÑÝá‘Kº»çévCïŠßUŸœií¸©‹O.úãúÞׇþŽ{zO5øßÔ#Ž Wgí=úà쎎›ú^wÜ×Åç®>¹WÃñ€Ý‘¯«ÏÝþ]yùpèð|8™ö>Ÿ‡cÓßÇ®¿‘W8þ6ö¸žô÷‰xäØ÷þîüïï“"OŸ|L"Og{ÝßÃ?ħz;žÜÑå ×gú泩ÞÑ“/Žu÷™yÞ ×á{O¹ð{aš»ÜÒ¡µ/?qKϵ÷ÓWŠëÎ''¹¥pôµÜÒÝ]îçNk†Ç¿å~¾fïûùäà‡ö¾Ñ;ºÇõìÑ-}«žwÑàÃÛï®ÜÑÅ+wH7õÄÓ×Eƒ?Œ£ìž~8ÏãýühžwÜÔOr7žwàú)ÓÝaûþþÁôÿðÏý}ÒÛï~ ¦ãžn¯¬:|Yø9rk–c Üý!˲]¹¥GžžñsÁôê£puÁrà9ô÷ê#ðú»ýVœË¯=^÷È5Lo¦×ã =|7<®7ª»7šðÉ5Œ£·Œ¯;ÜSKyyëÉžay‹¸¹ñs»£Û‹÷óŽiïÀtÃsö¾O«î.Ú{Ù5ÂuÕÞ{‚÷»}áè™O®7°ÜZø{`wô`ûÿ¯Ü‹qõk¾÷Wá쯯ðÊ!·fÜü÷s½£“Þ÷!üï’eƒæ.y¶ˆåì{gã¸zÞÇæ}ŸLTgÏ{ÔÝßß䦞îêé÷‡êîïÐÚåØ>UÎ>žnž÷„çò·èíÆÓÁͧñ†žsô¤¹›Gwô”gK/àúœ5ø+˜ß{Ðß—Ÿ‰£*†‹¿Z\p[òm¿—ÐßÍ#µw¹¡«öÍ]0}µN:üfΞ°|Íšûf£ØÎúû—rõmâé‘«'ï;|ïÉ9né[ÜÒãÛ' ߊç}Üžîé„ëês?¦Ó‹xžpü ˜~ÁðpC?Ž«?Nô÷ø¾S~ xŽ½rçðN‚éð¼óIýÔÿÓ>%Åpãåš_Soœ<ÂsãëœO/ÿ_bzõ\©zï;c;´÷ªd×4ËV}¤üZâìéŽþXÀrΤGL¯ _Þ¸ZÝt÷†ÌÑ#ž7…§7šÎ—né »§Ã ×lÙwàæMñÆ=QFÝùãLo_wÞ8dÓÉ#§ØÞië=séÏ„ëÁ#×}f,Žwô”IÏ0±ð\ôöžøÞ{òú¢»ÃïžósdÛ/è=þ~}ÑzÊ¥Ãóþ¢¸®<]|ïê}üüuä0Ý|ï手šûø:ñs`zÌ¢“/nüfžwÓÛÇzSŸh¦Mnéo)‡lŸàûÃüîÀòwÂt§·Ã÷þ®·ô™hï3»­Ïˆ¯ÏÓ/¸=5oßÐß? ÏÇçªÁC‡ZûÜîèœiû\O7Ž.Þ¸…dÒ—¢³/W¤½ WW~.~wΡ‹¿bÍ}°<ñö„çkº¡«Þ^ð¾ –Ï£G‹Þþe7t}Ns½¿‘]c\?ÐSŒ? -¶ ×þž~:¸;zòÈôžîüG¬?³OîL^9þüàúÊ'àyà誻Ãã~_Ö;z)róŠéí¬½ËM]³éÌÓM‡÷ùµŠâzêš~žÝÒçEž^•®™ªéîðÇ!“ïé—¯£cF¼îÄÑ¢¿G_4øøï>“Žž™:fà‘ËzfZrWO{3jïMõÈ5Íó.xÞjã›´÷v擃ÿ½ÓV?|ê™IXþ,÷ôgÑÜÙósk]ÒÝ]~-ü{/vÌXçLÂvöÇõˆ³÷%ϽïèœQW,ï[~í%øÝõ÷ ãç”G—÷ -ý]ð]=ïCó¾+_šß}„¿GCÕÜÓ;|‚›+¦¿%¯pÝéí„çc˧GÜ~›8¼óÉ OŸˆO÷ô åÓ Óé¦NZ;ô÷õÈ‘ö.Ïá¹ðuóº›?.þýyùý9‹96à¹ÞÕ?£Ï5Ãf9¶åÔíž<‡_Žô÷•ÝÓ-“¾¤·rž¸ˆíÂÙ•§s†mMþwÅôµà9ÞuÎÆ ÿÊnéð¿K6}·3Ý}+ý2[åè–iK\ý 3Ó¡»_þÛUž~,vÏÄLÛÑòk¿érCçΙã7ôwâêò[oéÀtýŸðù¦ÃúÏçßýùù}ÒÛ#¦_~Gݼ½Ìy6»§[ç ûÞC¿ uÍGÎßÓ ÏÌï1=ðó˜]“¿ Û«Uãè5ê›!Í=òõº÷¿×åŽn=35Í°!›_œÞÔëvC/`»úÞÔ7#96øÞ]ŽíOr­+\þ8`{àâOšIGNÝeÙ:ÄÓŸMwVlïšï½ÛÑŽ™Ô#׋¸®z»óÇuGGœúÝ Þ€úfÈïž~÷Ó7néâ}€—³W.ϦëMýEo鯜aùþ™ÑhH˜N4䋾w½¥Ì'7þÏûؼïša{C¦í]´w[:ò葳ø9`<òk尿O¥KnJ]ræ‹›*Ow}33óË1¦+¶k~Ͳéy‡œ>ʧ#›¾ {ºjîäw]3¾¾Ðû9ñsêœÑºÞÒ-›ž2lké›7δ÷õ—ùã,‹.^¹/~¾oF»ãBß åÓw[tÍø›óÆQÏÌAyúA³éðsÜÑå¡;îx„ïý¨:¼óºŸÌ'w‚?N±Üúã€åÖ9“pý$®úû˜ÿÇ|î– ž—2oœ=ÜÎËzK/UJÏU‡¯TÜ{PŽžüíáçÑW©ÆoÅsÕÚbw\àæÀð*qôÈËÁÑ)Ϧ>¹ÄÙ5žeÒ]/¬öÉ?GG¬ë‚¦7‰§·œO®ÙjP~­iž÷¦å×Ls÷¿¡»·¤3Øþ„9øåÏ¡ÁwÛŸíÅN9òÇ¡{Æáy7äמ#Oï=GO}°É'קþî‡ ¸>€¯¾÷žèî}½¯[&}a<:aÙ/÷šùß®Õû.}°ŠírO†¿ŽÎÜ93ÒlúÐùÝÑ7¢,›jï¡V³éè˜gÚ;uÉeY6˪O×'®?Î÷͈æð|úîókâwÿpÙtóÌ}Ìü-}ŠLú\Ÿ±?N¸zʧZ'¬øâø–Î9§·sF]=ïâ“["“N¯râ‹ #¾Ä}­ÝqÐÝ7ŠéòÆû`ƒGîk³ñú;õÌà–n}3¦Á»,ÛÎp}»Ëø9réûÝ•[ºuÌh‡œêð9G'ÍoêàêŠëæûÆ}½à‹3Íýäzf|Žíçóïÿ X^ÒWr~÷ÄÙËçûÂ-ÝçØJªÁW$Óö@ý°¬¹W,›~ÁrÜÔ«•ªÓÞ«®GκãÌ''6é«RŽ ýï¹ö®Ø^wø®¾wõ»×Éó^ô»+¦kïL‹:Þé–^è†}Ê0±\8zìzo»þ¸¤ÁË zÞ7.þý,þ÷çÄÏõžž{Þ}¦ Þ¸Âã9åíð½w£ç½›÷¼çüÞ¸¿Ë±QÜàåJ.Ùô×WòÉñƒÖ.Ø>J¿GœOgï{Žéä»|:¿b†ímL½qÚ3cý°šg{O¼zÞ¥;N=ïïäwÿø ,ñtíxÿìÚ‡âyì˜öÎþ¸©xܧ3òºWOxžîèùM]yú|á0==tÈ}O‡ß=ë…]$Ž¾ZzýÝÝÒ©ëݸúZ;äVó½o(›ÎwtôÍ0ž§,´÷­Ë§oÕçÎXžþÞ…þ¸xOçNXó¹›7nçúã<žïŒ« GßY{?ZÇ;wÈÒwòÂ1–ßýô}<·^Xt½ƒ«ŸµKî¬ØþÃÔÿý?¥û;áè%}ž›—ž—Øã^&í½D°y&ÝîëÜ%Çð½J=ã›oêÎÿî{ã,ÇVM]°Þë^×[M÷Z,Î]ïœ_»–OoŠGõ†¿¥7ÉóN˜Þ|j -ŽÓsžwÂxê˜)zß%—žc{¼§“ßý™rê"ž#ËÖ•œ:úãºtSïõº¶ÝÒM¹ôø”£[>u÷žxÞä•ôi³%rò¾b:ãù uɹ9î{WÏ;ÝÒ_á•š?î‚á¯ÚËÞwîu™ç}<¢;úH°œ:a5£>)ðtÕÛßpK·®îQžŽ a:2êSʲÅßSóÉMÕ÷n^÷éïSÇÓçæ“‹¾8ßç:ä>ç^{_o_x¾¾Xøí÷–ËB&~wl¶0WWõÂj¿ûŠ|rœS×;úú -gÿ²{ºpõ­jîWô÷¯-iî„ñŒçðÉí=Wßï<ž<ï¤Á›ß}¯ž8ͦŽîžžwÇYw\½ïßÙf cº7¼ÿàù¿ù'ðqÓÜï…¯—H§¹Wç—žyãtMzßsŽN½q–k{1ŸÜ‹½º£§ŒºßmÑ^XèíÄÕç}ˆ~XpôWï{Hš÷}Ä÷ô‘Þѱۢ;.èAŽmLï¼ã2¡»ºæÒßµCÎï·È}B[l™ïýƒòéȯ¹NØÌ÷>s^9»«¦ËïO¹£ëv u½S‡\蜙/쎞ºfxÃ峈éœM_.”§£CNséÚóÎýîÖ#ÿû†p7["O_'o\ÂðµË±q.}Cr__Ö‡÷¥]3ȲÙýlQsßJ.}gr» Óѧ™tÁñÀÕc'ìþ¨ùôãñZ—œdÚ8Çö}ôþ¸oô¼ŸT{ÇïeK7tøåÂÿÇÿþõãÏÝ…Ÿ—î솮^wú¶9dÓËîéeÚj±ú`#W×^X˳ñ›ë…­f¹k¯ »³OŽŸßaã n鎣«þÞЭU`x]ïèMÝbC–Íùã¸C®Ù$ûäLwoe¾8ÛnÉzaŸÌãÞnÏó{zʲa­ <ônçÙc¸v¼g:<8z—|ïäyï‚›#›žõ½´sFp\5xó»;ß;wÂÈïNÝ°¯ì“ÓÞ8Ößé–N=ršO\w]ïšOÏzÞƒ÷ÝõÁZ¿Lú=¡]¶Iæ{ç­Õ7ç{7Ï;eÔÑ«þ8ÃwÜÑ¡¿èÝ{ä"_®+7/î²9®N=ïÖ ûIÝ°ó˜]³l:¸ºåÒ]Ï»úãOgí}•yß½ö®{-Ê×7¦ÁË.Û*ãéë¿áéÑÞ7ÄÓqKÿÚn‹:üÎ|r¶ÉF¹-åÑI‹O™5êša\G'ìÞ¶[„é¶É–ï«"ÇFÙôÂ6Û·î¬jì·ÝÓaûõßÏÝñs¾£«Ç]¼r÷eÏÕ‘kƒ÷=èî%ö¾WtoÕòlEŸo²UªÐáásÇMÝ÷ÁžþðhïÆ׫¶ßR¥ÍtÅtæèö´o¦Î>¹ÄÛqCWlo¦Õºâ{ÓõÍ(¦7ò®÷¦ë„mf½°ðÆ©öîèä•kçtwðuõÄÅ>XñÉÉæê3kîß!ç8»hî敳.¹žàyW9zú»¯]r}å骽÷üv 6WÑõÞgŽ>xñ]r.ËFy¶Øõ>´Ýô!quîœùÃÖªõ¼ÓM}œùåÆÞ÷7îœÁæêdœéî^“Î8ôÈÅû9õÇñ.Û8ú{î{÷]ïÓ+~÷|[<=üž[6]»Þg„éó™ru¾£Ïy?=óÇž[ç;ºfü=}iÞ÷Õ‚8:wÈy|_®§LúJzfèmìžýîkéu}ï”cÛ¤~wèïÐâ9ŸrlQ_—lºõÃzÏ»ï†å¾àù¶Ó±Ùr {ºÜØÝnzÞñîúÞ¿ÓvGÿöú;çØÎÊÕÏ?xþoú¹¿àùÝ}záwé.Ãö²l ßc–­l}°ìsY¶ -õ½£o¦œxyYsmèš©º`SŽ­*žwŸK lO.ÂÑ/^…Nýî´ã"}qÅÎâæÓޞo¬zß»qõ¦xäšÄÑè‹CrmO”a‹÷ô”M÷]ïO¦ÃÇŒzû̽°O…9xâ:ú:rGo£7®cº»åزÝtí’Ã~KïüÜã|:ûãzÆÓ»ÐÞý-½O·tË°Y7,o± Øóžï¬¾¼¸Î™Ô ûâ³kºµúªyôâ¾*qôá0ë„lWýþwß kþ8ÞNÏ:aù~þF^wáçï‚éÞ#g¹6t½¿3¦£CwtʧO™§?‡WÙô¿Í²Íüv vØl[•}rŸŽ§3ž;Oœãêè‘3ï{ÁGý3á­y3üîÊËõ–ž÷¼¯#¦Cs·Žwêƒuy¶­æÑ¡¹ãžþEXïûVº`·„éðÈi'ìy¶]ᮞúa Û³Õ<ïÚ k»éÞÿι"O?7O×üÚ÷ ÿ;~†ßßO\zw‚㸣—JÆÙ]‡\Ù´wíŽËðïêeÅïÀÇÑoxŽ<›ÛR¯ú[ºëþªðrÝc®s0½fß¹þîzä´ç=à{ƒ²lì•»à´ôÎè&[³¸Ç†›ºbz³%˜ÎÙtÛUmåxîzßÛÖ «øÞÑ[‡½rÔ9Ã96ãéàèòÝíè-ÝüqÂÓ{WázW4÷¾ô¼ãåº{aG½e{QÍÝsöõƽ*O'ÝÝå؆æ‘Ó|ú«ÓÝGng•x9m«ŽçßÄëþ2lÜ#÷F7uê‡ ÷ôñ„îè¬Á»[:ÝÔž¿k&=í²½Ûvú»m«úM6¿Ë¦ýîÎóÎ9¶yò¿ÏéïlƒMµ÷Oê…W_Ì ÙôaûÒÝÑ©GîJßÌBûf€çÉ3·\­‹ú;¼qȱ¹Î÷ åÙ¾ÜfúZû`ÁÓ7®s&ý½5l—|úWàáâußénú6ÓÞ³nX·ÏÏû¼ï{˲Û†é)“.ø.¸oèŒãÚù~Œ[lÉ#÷­;éGÚWålºË´)žÿxÞÿ>wwwÊÏã+±7Î:fØgš»í¬j¯œruÉ£—¬–wÓ¡¹[>½B÷t˳U±É–m¥?ÒÝ~Ó[ÐàÑ7Ã]ﲫ -îÎ9¶”K¯»lz~O¯»\:gØzSwº;ÿn;gšÄÕ›”O¸Þ¾Ò7c7tóÀGLo'<Çžwåëígͤ£CŽ1^y»ôÍtÉ+çîèŠß‚å}ë‘cÝ™tÞn‰Ú{Ïûäü-ü‹úÝucµ°Ëf8Ží–êå-6øäFä{/n·ÐÎ*øùˆ}ï”c{ûƒOn2–¬:zä&…ítGçm¶wóËå»é‚çÀõàwŸ’ï}JõB‡m¦+?Ÿ¢ç}zÎsé3·ÝâwÙÜΪ˧§üšzå®úã|?lêƒ5lWï;îêÈ®ñ~ºëšY».¹5º`…¯o6ŸW¦+Oß?n“¶Ó‰›§—o·ì®n§çš»vÃR–í°;h6Ý:äºî{äŽÚ7cš;uÉe¹ô£b¸èî§oò¾[N=T½{ýýÓÿÝ>Ï£æ./uÅÝIŽíÎ|îÚ#G¾8êyW®NÛé~›­bž÷ì–ŽžX»©g›é–e³~؇«9똩zŸœ¼šÃrtÉñ-½Fž÷šaú§k Úo!ŸßÕá{oÈ[Ãm¸X–­Õj’çòè”cÓÎtËHçŒzä4ÓÖNrÐßÝ=Ý0þ¹Ý1ß;ûã:è™!Í]ë†,_ Ó¶2®:f–™O;«ÚóÿÞ¨ÖŽ›óÅ}]ÛqÁfºqõ­Ë¯}©þžîê;‡çȲå[lº™N;.{åå×:Þ>Ëv »ú1ÇtO?®ëïoº¥Sç»rõ³Çô³eÓ@ý_ÿs'z;x:t÷{¹£ß G¿×~dÙÓiÇ¥ìp¼Dwtî›É:ÞÑ›kîÒ!WÁf azÝ°—ßØYåÎpó*a¹a:öØ_«©çÝtÞ÷„å´±êúfF®k<}±}¨ú{Þ;Oœ~+†¯ô¾#Ïvyï–a{Ó<:ï¬N|–-æÓÑ ûA;«ò=µ<Û‡n²¡#–6Ô§3‡íȦc{Mu÷yâæÞgû-sW_˜îþ)\=m¦§ÝtÃ÷|7úûʺä䎎ïõ•^Xèî+ÒÞWäs}°‚݉¯©Þ®{lÚKwõ­zãÀÏ“GŽöÒw¸§S'lÀð-x9éñß9ãréûCÚK¿¶ÉFÙµ°œ=ï|G?ú{ú7cûÉ0}ï'½­Ÿ°üßäqüö.æÖîÓKä}/ÙzäÊ‘»KžMyz©ØóLwÞ¸”gcÍyuÛc«ØÝœ1ýöØHwg<§m¶*uÁÖÙûŽ=Ætγ…í–ÀךO·.9{W5xäÓ[ »¡7¨ë]7V³žwõ¼g[l|GGì“ñôNæ‘Cwœbz[|qíŽ|?;­½sÅ×å›z—6Ô³Ï6$ëï–c:n>ßû¸€åcç“ ¼|dÙtòÈ¥>Ø1uÍx½ýÛl«sßûä#þ­œ\:a½þ.¾÷)wÃN©Kî#ó½Û} -½}Jx>O›«Šãàê³ µÿûÜûâ>Í'7_÷}a=rKÝO_ÚnËÂ<ðKòÇ-ˆ¯¯þeó7õµñuxåb¦-àø*ÝÔWÿÊzb‘EßlÈ·1Lßä96âë»tWOY6æëÔï~ùoû=åÓÉ·;xÏ;~Ãw$L‡?ÎòkõÈ1ž#Ÿnuáëš_GÇ÷Y¶Ù¾õýtÃþ{|nÁÍã»Wý=yäà+¹ßÚ7¿ușΎ[zÉm³•+„éâu¯È–:6[ -¾¸dÙÈ÷^W¯ªGÎö[ÈóîòéUòÈßÿà‹CçŒô»ënËU,ï{“1x.žwé„eÞn·tÃ÷ˆãMêŽî³lÞg¾wŸMïÈË·V;šOÖýç£[úó3éíWwÓ{zSw¾÷¾á·ið}wK®#Ÿž6Ùú–QXÞÑÝt×93 ÇM]üqy>}(|üüU|îìeþ¸ÀÓÇÃqÚMs.Ýn骻¿QV}î…®wó¹Ç uúÛuÁ’þž>‘}U¾©ÿ©˜^ȦO‹û-îž®š;ò馽ψ§G›l Úd#žŽ~Xßó.¼Ýí¬rŸÜʲé”eO_®ÖÔ5cùô•ãèÀtÒá¯õ½ëfú¦Àϵsf+¿wÙ-Ü\o鸧=ÓÞ÷yßûÎpœ3lñ;ÛXEŽ =3Ó܃O.>É¥™§W/l·€«Ÿ¨gæûÛ$÷Hÿ—ýÜFüNx~ LW4x`zêžAß{ÔÞË÷ª¿—Uƒ·=6ÜÓÑó®{lÃöôû!iðzGÐ|:nêÚ9°¼Â.Ö!°=záØ+÷Hx^Í´wÙa3\¯Û6òèÎënÝ3Àö:ô÷ˆïÍs]»fÚ5“zãx;½©;«Qoozo\ÎÑ[‚ášIoc/]öZÈ'×æ —ŽéïzON¹ôçŽa{§óœùâDï>»UÏÑ»²£ÞÓLºçì´ÅæºfzŠé=âç}í›é –ûýtŸQ‡ÞNïyÏÌÇá•Óí§¿ž¿¢–2éÚ ;4~Î}ï#Ê°QoœvÎÏÇ“xSŸŒ'ÖñþfšûÛµ¹ ÝÒéžþ!Ú»ÓÜÉóÎ÷tîû˜}¤›úìCsé ˧ÅüšÛO]žnèðÈ™ÿÝzät_UîèxÉ÷¾Œ;.ŠãŒëùn uÎà†¾ä½têÓoì¬j}¥=r¶±ºÖ~÷ sô/꜡®îû"Ý}»£;º`za¿åov[Ò =ùäÐ%ç÷Øö…;:4øƒxãNY–ÍótŸ_ã —í·Äýôó7ÝÓ¿éý|þÕ>ww·¿%ŽžðüÜîè÷Wzã2¾.Þ9Åõl»¥ß»æ×Êäy/gwõãêœ_#¸zäëèv÷ûéàêtGOýî~Ã…·Óá‹Ó:aºfÙ’?Þ÷FÝòé Âò&éîyŽ-zÜ-ÂsÖÞ›zSž«þN;.mÊ°µ \ýÉ4xî‚}F–žÛWí˜?®Ó¥»:öÓY{϶Óu»E8»î·pG,í· z¦¿覮ý…zã¬gÆ8:õ¼¿²ç=ãèÜñží¸ÄLuÂÂï®ûªÚ53¶>XʧäŽnøþæ°Ýôwé‘CŽ=îrG{·¿ycÕeÙ>È#'˜þ®xþ.Þ8øÞ¹ÖósxÞá{ŸŠ?nN·tdÙ¦Üç§ó¾GLÏvÙ¬ë=ñòÏ ±æ·tÃôEì„]yz¦½¯s ~íñ\3꺩£CNøù—èï©;Î2é›/ÚeÛ^éšQžþ•ùÞÇéž®ïæ{gl[«È±®âºeÓ.›n{lGé™)î²cÏ;wÃZ',ñtí…=ŸmÀåû‡«ÿ ~noÓýü6ÜËoïÏá“ž¶— -]ï.ËV¾×¾xß}w\éœwÎGÇí¼l½°Â×Ó›ï…Å=ýáýqÜ[-fÓ®[Ï;rlàèàëÛë~_•¹ºÞÓuꇭ_Ùn¡G|KtøV“ö[ò[ºëzgï»ùÝm3½í}ïìyïX¦-ÞПqKÖNØ×Þ™OòÉÑ-=ôÂ*G'~θvÓ?—Îó®.òÔïÎ}ï´›¾Îoé²çb=rÖñŽlºö¼³Ç}ÃÞ¸Çs×7#œ=ÛkQžN6õÇm}†m÷'®N]ïñÉu›mo}°ëx?q¦í`Ýq§ü«ÿ·Ø ×½ß]8; ï?xþ/õ¹‹Üü6bú½`{øû^n骹ƒ¯«Þ6ÙÀËïEsW¿ùµkÝ3•´Ÿ®¹tóÇ=néÔCͽJ]3Ô3÷ôÄÓÉó~ù®UÓnzz²á‚Œºb;õ½×­c&ÛX­9ÍÜÝ° Ý^k4ßiÃÅòé óºã–.¹ô§+¸®Ý°Ú'×N›éÀõ\{ÇÆ*²éàêí¢ç]3êÔgþ÷®=wOïÙf:¶[zèˆõüÜ=õ¾í¦÷é–>tôÈ ˜«3–ç7ô¯·›înþ¸„ëðŽjçLò¿½OÎu¼_ÙeC',u¾;Ü›tθlzæ“›¼e=oFºãbçÌÇÙo­Bw—6ïwÇÞ*¶Ø¼÷\Ý´ööÒµwffzû¼èy_°ï=ßoù´lzÄõåB½qÓEãùJ²ê¼¯º‚ç}M>xí£6—iû²{:qt¾©oÝnþå½ïØ_Û²¿Ý{ßûÎð|—{Þwæ‰ÓL[ÆÓm“ÍçÓÕ÷NïÆ×ã5“î5wß7s¦ŽØ³“Ý`ý_ãñûöVp\0=óÈ¡ö^3m¥˜Q·NXptó¿sœße«d~¹ŠÞÔ#¶_ë›)t½WåŽ^¹àwÅm·\ÝoáÝôºÞkÒ/ÃÚ»ï{¬'L„ÞŽû:ñõ†ÓÛ¦¹×›¾?Ytβ5›´ÃÖÒ{z«eY6hïQooòõǵ8›n}°Oª½ÓnºëœŸ\àämì¸XÏŒa9eÓŸé–®þ8ÒÞ³UÇÓ¥{¦«ýî=åé–gë‘îN<½·ító»¿’_ŽvÙ^¹öµ ¿kÿÌÐkï¾s†6VÇÉó>4¿†|úH3éÓÓï,ÏÆþ8춼¿)žƒŸ£6õ¼{fœîþÎY6ß7ý;®Î=r”SŸKO,zfæ®vvecõӶӱݲ`ß;:gx?}¡ùµÅr©]3ØM×¾wÅuë‚å\ºæ“K÷Uò¸»Ýô+«è¦«öžp=eÚ°±ºõ»lŒé»mÖWÄsîŽÛ‰ç}GrÚ)§û-û³õÌÈ |ïzS?žŸ¬Oî[³lG¹¥)ËfÞ8Åô³yã¾õÿtÎü+|–Ë ]ùyø¾7L¿·ï0]7Ùî²NXÆwãêÀoî™)WJ”e«è†‹ï›yPí½q™î®½°ê3žqþÑ4÷”M·ÝUî„­)Î×h›ö[à}çNXÚN×û9׉§7»'œoe|š{óüLÂ~KS²èÜ k·ôx9kíOüÝñXÞžÛ&›úãÔ÷ÞQýÝ獵;ºëˆ…æÎïÜï.½rð¼›ÿÝrkÖ+¹ô>:f¾ö%ßM'ß{ÜN—^Øk™t`ºó»óoº¥È'Í}”{ÞiouìwÙbO,wÂOÜØòèÚ7Ã}ïØ[}{·Û:vÓ¹ÛéÙ =êïSëSÅõÔçürèž™9Žn›lsÝZå ›ùâÀÍ“ö>wÞ¸ë=r…=6ö¾ç¾÷¥ùÜã]}¹¯û•;ºv¼¯4—¾¡¿Óµ;noéºÃ¶±Žxà·ì®K†m—yÞU{çþ}¿ÕžxÞwâu–s~-í²Yß{±ãý [«Ü9sÎㆮ8~¤½Õ„éæKþ÷xW?§{ºó»ÿßÿe>á~Ž§Yôà‘»¿-Þîéww÷Ë#†ß™ß]ûãÓ¡Åÿ¡C.ÞÔqC—î8î›)+ž—þnX^1®~¥Ö¸:ï³å¸î{ã¯ây–Mw]3µ¤¹×’æn˜^§Lz]5÷z³Aûªù6wÁJ\³yö=3žŸãžÎ]ïès½°mÚMÇ·ruäÔÍ÷ìÞ³öÂÚfú³óÉÁûtöç¬ß}°¼³ª7u½¥Ë¶ªà;o¶@sÇ>ßÒy-vË Ðçw\’_¼©õžŽ®÷+›l„í–QG× sõä‘ <=âøèÍúäÔïÎ[«æ‹{s8ŽßïÊÏÏu y¶êw×{zâéSÝYæ¸>%¿œúä,“®¸ŽL:øù Þ8ì¦GW|Gßûç¼€é×9ú§â¸á{±oÆùÞW+󾯛k.=ë›1|ߨþŽ{ú&ÓÝÕÿŽßÛfÒ5Ó†Žw‡ç¸¯[×»ùâ|çŒeÙöÅ|z¶¯Zð»£CîxpròÈå]ïé’O×;ºzß¿ÝOO0þƒçÿ*ŸÛ»ß‰ŸL^÷;âéÐáóìÚ½f×ÃU‡÷=ï÷ô[{fÀ×å†^á|:c:nëÑW>?”±•^9ç»éàèè{ÿ»ítí˜ÑüZU÷U¯m§[ß̣넭Õ<7Oú{ͼqð¹s7,yäxGÝîMðu§»[–í©Åýqä“ksÏ»t½«æÎ[鸡ƒ›Ãûž?»®÷xKïB‡ïG7{Þ±­ªwô.¶ØúN{ïS¦Mu÷¬çÝ{ãh‹Mû`©ü\w\¬kæE½ïÖ ‹®÷¡ü6,gß;néÖ9wÙãÇ♓¾úfŸœå×,“Ž;ú›v½[žMýïïÖ§˜.wõˆçšMÿÐݧ»OÍóþÁ~8ò½GÍÝm±…7wùô9í¦Ó?#®Z¿;aºõÎ,ä¦þYÜcCߌöÎy6—c[¸[ºfÙä­EoOX¾rÝ°›LsçÝô ið_˳¶Ø6æyÿ¢^XëI~÷´Ë¶u=l¶ì·Wnéûk9;úž6ÓµoFð^¹ ÁŸ¸öd{lGä×äoÓÜO^§:âééó“eûgþÜþ½ýÖôvÅô ^£oæ^¿ïu‡Msl×:g\~íÞréÀõJÉòkù-¶VÝ^º¼2£­ÕÈÏ?Œ«»ÝÛLŸ‘?nFüœ{Þµ;^wèî‹OíšùÄ ´÷%|ïð¹gÚ{ü›²éÓEƒ÷;.kõÇÙ=}3ÙnºèîÖgû-ð¼oÛ·ú¶ù=]u÷­ÓÜÓ=}/>ø½Çô½ÿGçÝtÝWåÛžöÓÝ-ýX¸¥û}UÑÜ)›®žpýL7õ³áû™—[~0ýŸñswû[ôöÛóïüŽ~{ënèê‡c ^q½Dþ¸ì•ý† òéi_•wÔ9ËF[-ÃSçŒóÇQ7,w͸ÍÝOôþ8×!—pÝné.Ÿ®zûc:g°Ë†lºm¦‡ïšjï‚ßñ†îuwl§7ØfkéýÜeØr;í¶ø<›ïŽÓ›fÔÅ÷„ü:g:Ú—ëî–MÇÖj'ó¼Kß»òônÁW¸¥÷8›n»l®ã=ÛPï –÷uÓÅsuö½s–Í{ß_]œiî¶ß·tÅòׄïØKÏoêÈ´—Gžþ¿ûÈöZć ›a9åÓãØP‡Oš{æy×|º`ùÇÄøz|ÌÕ§ç÷)yãHwO{ãœï¶VçÓä{ŸÙÖjòÊ}º[ºåÑé7m¶Ó?ùžN¾wãéè’#í]5÷•ÓÞcžMôvÝW]³ö~áß«u!§¾Ñ÷åüï¾ö˼r¹÷}ûeûª”G÷{l–cÃvz®»ï…£ï»W?è}ÿçý–<—.ÿÆÛªx®o†x96Ù€å'õÁ¬V5ø,ný|®?¿~õvèì×É'‡=¶{ë…½S<—íèïtK/Ë=½|_V®ž6W¯ì¦WʲÅf]rÊÓËWp¼òàïêȯÑ-=õÆ7çßUí„­E\¯UEo/ì±á=*¶+?—<[ÀóÐ÷^Oð\µ÷Lw×|ºn­RïŒn±Ñw‹=ï-Õ⟔«ÃïÞÒ9åèOèŽã[zÖ«|‡¾3_^'çéÄϱ›¯{÷¹ÀÓýM=m§÷µÖ¶Vð»k'ì•ûyÖg]ïÙ.ÛŸ¹ó–ÿžÿO8ºÃvêŽc ÞuÍPž­D=rnÃÅÝÔ‰£+7/™O®B½ï¬¹ÃûN¾÷yéz¯È=½xS^.°ºÇƼœ4wåé¼áRÃ߶Çfùµºí·0¦G,¯Ñ&yäš¾o¦Ñl’O®¡9¶ßÕéž®®rNÏ{Þm;~w烯{¾¸¶ÝÕóNXl³=ïÏä•?ÖÎ8æê=èñ}ÙRïË=]ûeŒ£ûM¶ÄÉû…M¶—Lƒý½°.»l¯Ö÷"½°¹ï=a»l¸Œ^í®ž®>äÍô‘ÞÑÇðȽ¤7.ñôÑ›ßPçý–1åØWw}°ï„ëœc›DÏFùtézŸ³÷«”]³^Øù¹Ð§÷tÒÛ?Íí}¹\ºUøÜ}‡Ü•®™%÷¼ÛnË -Ú»tÀšçÝtwí’s™6ì³Áï¾q½°¼™®]r²­êwÓåžN<=zà³Î™wÉ ¶_ÝP猺âºåÔOä}×Íô¼öÛ?ëŽû.Ší6ÊöóùgûÜþzûï„ëâ‹»û}kwtxä"¿-hïö·ÝÕ×Ýí­^ÙN/™Æ^\¯P–-ßL(›o{é´Çæ:ä.X]Á.›í«>°îþ¾þ¨õÚÕíóÄi×û£ùÞÝŽ ÷Æm6åévK¯«ßP—”eƒß];fÎ뾂þÿmMùµ¥rôyåÖW4wÛm±ý–õ×Zòl_Îóž{䶛­ó¼»ÞååÄÕw;}×wØLÇ>Û^õ÷b‡œßcãþ8{GâêþÙ=ý”ÝÔEw§®wÏÓÏþ–þýsKÿgü OüüwÂsÖßéžîtø;ʦ“ö±üNøyéŽ2myÇ»ï‘+•²íº¥+žWÊúÊÊË­çý!ãèð¾'Ž^Õ,›î°U³M6åætG—þ]³»ºÜÓëªÁSÏ;0½A3µ†öÁb»¥ÙÈõwê{§¹a¼uÈ¡G®éîêv[§­ÕÖí°a7=ëz/oWÇMïèì{ïäû-üí|rÙ-¶V»”_³]¶¾¾^ŸžvÁRV}`þ÷—AQ{g¿;ï¬jŽ-?îÕ<ï¯Àôa‘§§M¶¡ø݇©–¸úˆ»ã4NÞ÷7ëy~wàû„ïé”Q§ýôwl¬^é‘à >9ÏÏE½ý˜.<ýcf¹tdÙ¦³iæ“ó||.»F˜î2lY–m1§ÝtÊ¥/¸Ö2l‰§›÷}¾žiîa¿%|ë=}µ²®™È×7Wp=á¸í±­Iwÿ²¾÷+Ûl[l§ç»éœi¾ï¿·i/ݺgöÖ÷N\ýÀ˜~0nÎÙt뛡~Øžû®÷#:aWüqàèq‡ ¿Ïº¯ªÚ;çÔ>ÿÐOÀòÈÑ žÜï;çwGçÌ¿×NXÛo¹Sn~W¢l›öÍÐ==ï+•¨7®”áy™:äÊÄÓsÿ;óóªì¬>ÐýAºfÈÿ.¾wÍ£Wͧ¯J<=Ϥg[«ué©Ók £Þ¨û,[ókÅ®whðÆÙª»kÏ;òêO¦··r<»--ëzç ußóÎ<xþœ¸y;yà;Ïþ¦þL·õxO§¾wͱI>½G|°Øméžk7¬v¼÷ÄóžôøA¯¯¼Ü÷½‹O®ÿB¸OÜká–þJ›éðÈiÏ;m§[Ž r#ÛN¿æ‘£<ú8ë{~¹ Á¿Ožþ¦Ý°a‹ =ïoÖ!§xŽ®òºÇû9w½ó.Û‡õÇ ž£{æÛéW07Vá×Ítö»#×F96hïŸè™É³éÄÏì‘[p/¬u¦g{l—ß«…éï+ÜÓ)˶†ß]7UÓ¿mâÛhç wÍ€§Éý+â¼m¬¢;N»a·›Ø!·åŽ÷¯+8¾ûÒóó-8úvo¹tâçÜ'—¶Ù(Ç–iïÑ÷.·sŸQ?¥oÜÑÑ«3àèÄͳ ÛÚ;ûâ~Îêÿ4ŸÈÏ#7ÿøxàê!“žótò»ßR/¬éîðºsN:aË5Ëv_RO4xøãJtO·íôJ!Ã2éŒåÊÕÌ'WŶÒ”³?F|Œ¯JÜÜréUÚl©éú`S¬bú#°œ<ïuëz·Ýtê‰m°oܶVÜIoè-]uwõʱæþd\ý û-Àõ–vÂ>±GŽôwÖÛƒ÷½£·tÁvéõ3Þ#ç÷[ºÎ'ç6Váw×דŽØië¦#—ž:gz¤¹'oœtÁªç} :»ÝÒÁÍÖ3ã²é¯tSÏîéÀsÅrêÏÁÙ¹o†³l#Âõq!ÛÆ]ïÜ7cš{¶ãò†6áí„éïôÔ÷îÞG!ËöAÝ2è—ùPoÜL¼q¦»ÏOO\=õÃÎ]Ž-âùìójß ûâpG×¾wÜÓ¹?nùI9ê‘Ë:ä¹?n•îêÉ÷¾tÞwóÉmŒŸ;L·9× «=ï†íÏ­vc›l_EŽ®š;{Þã÷^9úž¸úž_ì|?¨ïý€õl-â8õâo†s駼rìËôwÖÞ¹wFü;ÃóTÿG~~ÿNX¿3žî½q쉻û-|îì‘£l:o¦k/l96ÛK7ß;uÂ:Ï{E¹ºvÉÅ æ榽罰º³ª7ôË÷cÂsîšÑßȧç9¶šõ½×Ä+W«ç\réuʳ9_œÝÒöÞÌýqyß;òéðÈ=©÷=ßp±[ºñõvËã9¼ïLoK—\G¸y–aëP×{ÀxçuFlÞ5Ã[l]õËé]zgú”eã~XdØœo®/›éÈ°¡ëýÅð=vÆ¡ãýÕúgTsyUžnº;ÝÖ³]¶¡»§›î®Þ¸¡ñrÖÛµs«7n¤]rã1{ãHoçß.Ãf]3Àví‚¥üëîØc›2®¿»ã>]û ¾é†SžmŠ.9àùŒ7V ˹kxÎy6ÅöxO_RF=ßc[¸ —Åru¶ÕåzÞ­?|]7Óù¦NÞ8øå’þKýîÜûñ}KÝq‚ë[Ý\õ]ﶛ.wuì°Å·-¶úÝ9Ÿî2l鎮ú»æÑm‹;b‘O?žÖ3Cü^÷£èíGÂtÑâ]Ž Þ÷sŽé?ŸÔ8žné泇¹;ÓÞ™£“_Îú`¡¿ßÙ&›ÜÍïµëý^´wêsùô Û©kƶÙRw\Å2lº³*û-UðöªõªONýq…®ÜÔC†­Z#ß;o¦_Ñß­6a9stæêõFº«7µG®©þw·³ -\'wÝ°ÜûTÀsͲ…ßÁ×&Íù5ÁóŽ|#Ï¡.9põ‰ÓÞ©'v g3ñŽN[«È°½;ܣߧn¿…1}F¾÷™dÓ­#Ö÷½³ç}6÷˜Î>÷Üïþé°œúfØ'Ç9í…½òV ½«'ßûÒm°%L_“ï·ÓM§UxâÖrG§Uèð[ø䞇۹¹Ý×6˦ó~:¼q鶎¹€óÑï~°{:w¾ó†‹zä¸ã]îéÊѦ»[wÜ1ó»“GîÛ:gȇ½U¾§ÿû?æ£X.ýöö·bú-uÍ°î¾~¯¹»bÇ eÓý¾ê½a9m­rG,ôöø*%ÇÓŸç^9Öá©ë=ô»Csg~Î9uàyÐß%§þˆÎ™Gßó^­OW~®3q/]³kÓMW\o4Hƒ‡ß½yùwÜÑvCgLo¦Û`£L:ûãÇÓï6éïÜ3Óγlêy¿àóS‡úa3Ï{Þ9Ó±~wôÌÏû³zÞ¾÷(Óæú`»ŒåÔ Ë›é¼Ã†zŸðÜuͤ¿_ô8›Î=3ð¾g{énc•ó餷§\ºýüŽ‹yß‹ÛéoôÍwtß!w¥sFúfl3ïê|C—NwÂóé»ì¶HwÜ»pôÔ#7Õ»ºÝÓgtSçUðsë†-ÞÓ?‰§#¿&3Ž£/\ÏûBºåÛõ–.ž8xÞó<ÛŠ¼r+pwͳå7uß »ä6”QߘGîKñœºß¿¾,˶µ,ðœ÷U¿O'ž¾Ý]±wô]Ñ·Ûû [®¹ï¾s&á8rlô›zät¿åDy6äÑO^s×[zè‘;á’n‡ô8ÿÇ}n.~s{“°ü&àõb·zÞ® Ÿ\ÔÞI‡ç¾™{ί§³þ®ÞwÃtôÎDÏ{™ïê¶ß’{ã,Ãf9Ë°•U‡×Œ:vÓ¡»Wª¶Çö@;l¬·Ã+WØbãl:ósp÷ôouÅõ:ÝÓÿ5Tw¯)¦‡>غ»£»^ØpÜ6Ø ¿·\6Ý6VÑ!ͽ ¿kŽ üœ:äÚÄÏÅïÞn3ž·£WNµwèîÊןi¿Åkîy×»zÝu3]°¼ŸûÞ­gƶÓç´Ç6È{a}ÿŒùÞ_’öîîéè‘’OîÕ|rŠïA“¥l:8:ð}oÝЇcåè#× kZ»n«jÜØóòøÆ®Ö6Ù&~»…wØ®=í›ÖþAÛ-9–œómÕi¾Ç6 ˜==ç°¼å2w4胵ޙWŸ'çnXÞY]x¯»n¨¯2œäÙl?ýòïkÛOO7õÌë®\:gŽ›ç]½ïr[ßnrŽ^ìzç®™-²éô´v‹=6Óà]Ï»òs뇵Ι£òô£t¼rl§£ïš9®ƒ«¿iƒíDyô,¿¦èþýƒéÿˆÏïß7ÂÑoxî…]üéa‡·V ÏWrOWNNÝ3ø7í»àùrm>ø¼v»âV¢¿o¨fãrékÜÑ©3îËiïÒ'ÇxþµSœí±mõ–žðÛºa÷Ú;sÐ{zòÁ ÓvSw«ÇƒËµˆŸŸø†.>9`û‘µ÷,Ëf¾÷ÓÙzfÎ’gûYMÿG|?ÿ}ssÅǹôßÂ×S† ¸~‹[:aºéî¥ÄÏáu§^Ø{ÒÞË™ö^FïŒruÚn?gï;ÝÓµo>wäÓ«è‘«zŸÜós»§C˜²éîž^³žꜱžì§ÿÁ#Wg7Í4ø&su¿•nÝ°´ÃÆ]°´Ë¦3OŒïmÚnyR,çŽí™iw´?®ƒÞ8Î¥wˆ£»lzǼqº™þL¹ô^qÃ¥GXÞ xÞõwtʧ»î™AŸ¼ïþ®þÂwuÕÝeg5~¿:\A,ºãrl×6ëƒ5LG¿û˜0},ùô±fØâ{KÝ÷DZöŽ6ò»'Ö1£«W×m¶wíŽ{w¾wÚ[E/ì‡m·¨ÿ]}ï>Ëf;.E¿û|ÊÛªxsí Éýqì‘K·ô¹úÞ û-‹”cû\RG,yärC_¬Ì‡Í–5qtÝZ¥=6ÞYݬ־s&Ï¥c£ÍÝÒqOßÊvú–vV­v\ø÷iî‘·ï%Ÿ¾7l§;:wÈ…ý–Ã.ÛX¥¹„é´·Ê}3Ê×OæuŽK&=l¬~OÝ=ùãΖMw=3–gûñ½ÿÿûÜÜüöüœ}îàçWüîwü[Þ-u¼s– ]3Šëw¥,—^Ò,:fRýžòk%ñÆ•ÓKäu=Þu -Æ?¤½Uó¾?xÝ.ÊË2Í=Ûb«7/n¬æØ,ÏöUéwC}rvK¯7ëñ™7®awtÒÞ¤»[Ï»éð­'º­³Ï6Ôm?½m9ÇÑ©¶MÞ¸6{ݳ;ºø匧wh3=ayïùÙuÎô¸wF;亊çv[§}Uêˆ}3±ó} Ûl~·¥¯žwøßu[U}r¯ñ ´?«¯šOÒ}7ÙœOŽýq1“>4½}lo¨»écõÈå°È°EoÜxâoé¹ç}BÛªÃrë“ûùÄúݵK.ÜÎßíž>ýýCòk!·¦»-Ók[«ÄÓç䛚×ýþ¸y†éó¢ß]½qáß–ÅžXë}gÝ=ÛqÑîwê„¥-6·Ç–ÝÕ׊éä{ßýî_”S/puɱampw\Ø÷Ž¹ÀÑÝƪøåÀÏã#¿;2ê˧ëûä´Åvºü}:Wxl¸O†ç”Mdž :äXƒGÏïê?ŸÿÝróð}ÁöÄ×oÏSߌ|®£óýø®º»äÑo-ÇñýþÞ÷Á’?îžùù}9ý.û>9öɹ½ôJv[În«ä¾^•»ºî±YÏÌrlè“‹¿µ{ÆzbIs´œºí¦×ß];gž×L—ìúãt;ð\5÷Fʦ7ÜMÝ:䘫s7¬î²9ÍݲémÂuæèÑÞÛíŽÞÖ“'>¹ 6Ó=Ýp¼Çž™nî—ëZ?l¼«÷Ôgêæyï÷8ÛÖ³­Õˆç¹ï} Ïô÷¾òs»©£ÖgÒ±nÎ;.ÃÛY*¦§¿G쑉Gnȼ}D>¹±zã4ÓvÅ#—{âTŸŒu³ÅºÞ_ŸX–-åÒ³Î÷ˆçÚoÉ6ÓÝ3ŸûGÄîsÞ7cr¾ëÝ÷¼ãŽ>Ý°3ÙKGßû\ºÞý vØtk•µwé˜ù\j\a_õ‚Ý õÃÙMÝgÙ¸;Î8ºöÏ„— ùÝ×´Ù¢ž¸î¬ªGŽöØô–®¹/ÝIÇv‹;ë~w¾8ë†Åv 6V÷ÊÍ}0ý¨êGÝf3ž~º`:í· —~´ÌÚ7ýfÏ{úÍÛªÂÑ¿YqÿAôÿíOÄðÀÑo »ßœooÈó~kú;žñõäu}rwwºÝ¢î´ßr'ýqwäÓwW¢®wÖÜï‹ž÷’õÇåõ -ûÞÃó¼«æîzä_#횻˲áû‘|ïY>½¦3ðÈ1O¯Q·{Úk¡ÕzͲl ¾§›7®™ûãÂk5²l:õÂæû-ÍÔËùµðÚ®k¦e}3mÊ¥ß;âï´Õ§¿‘I¾wLsïè-Ýp½Ë96áæÏØléâ–ÞµNØnÏùÜO§ŽXβõû¾of`<ýe0pÛl/èx×}UÇÑ_ ÏÑ;£š»põÌ#ç1<ï›ÚM}qá–Nû鶷Ê=ïÂÙ'ü̧ú»äÒÓ?¨GN=qï™Þ8ûÔýæmUõ¼Ï°­z­kF2é.ÇFÞ¸Ø53;ê}÷ôâvË|ñI>÷Œ›£ –6ÙЗ~Ëý\¾y›mEžwðô5ï®þ±ï½ïôí¶X,ï·Xßûv‹ÞwtÏìR‡ÜŽø:ºÞ·tOwxn›lêã ›òsòÈéÎ*åÙÐ;s:ÒmýJŽúf°›®Ž.Xͱ϶Ýò­ÿëçó¿ô¹‰œü—|×åwÐàƒß=ÞÒë=]±¾wåçä“»pó[×ïîoéw÷÷Ô#‡ž÷„ßùÎ*kðè…µnØë3yŽ­Œ ›öÈYçL¥ZÑßѾ.y6ÝcË7V帧Gž®î÷UÁÍm;]rmµ¢7Žõ÷f]twÇÓNw¿º±ÊXû`iG]ïÚ#GO>9`ú“òô'âì‡éÉ÷N™6íyÇ£ÍÕγfØ,›n|[«!£Þíö(—\ï+GWÏ»ÃóžßW%Ÿ\|/~s9¶`ú«Û[}•¹í¾dšû«uȽ’þ®ž÷vV ÓÇŒéÔ›ÞÈuÎp&\=ÜΑicœvÎP6ý |ÿFÚ»æÙ8®>¹w× «{lÜKú»eÒ§ ǯdÓg?\òÉÍË Ï%Ÿ¾°6ͧ_ÁóÐ û¹X:\‡Ö¾Z¦;úbezûòjß òéK·ÝŖ“7°º«º1žžaº¾­ùß¿þÐ kž÷ñsº£sv-üÛa§}3‡½×Ü­o&}ïœe3ŽŽ^XÛa;jÏ;ú㬖·VOæ‹ûN[é1Ëñüôcvÿÿø¹Î~ùŽÙ5wGOÿÍzãþÄÓï†ëÖ%wgüœ¶ÓqG¿SÍ[.%½§ßÍÿžyÞ‘Q'ß{¥R²;z9ùâ’Ͻ,X^‘îÂtͱUÕ—p÷[¨–ºä´Û6Óu/]^ýÑpü‘ºã¸ç]·V†é ×9#™¶Â==í«6´ßý -¦7[Ú‡¾™&aúáºßa³ýtŸ]kK÷Œàz»ãqnêÅ;z—vÙºæëO&®Þcï{ϼïQkïÂ'çû`Í×3ß{Žé”IG7ì@ùù òóAÖ«¾¸z¤»¿ÊÎjðÅ(£þ -<×ÕÄÙ¦cc•}rèŒ5æY6Ávì·`‹­à{|ýÝùäì¦þî6V펲éÒ—ið®ONoè³´ß2#ýüîæ}ŸëvzòÄÍü-ÝùãgK¾¸€ëó÷Íä<Ýv\–Êס·û.9ÇÑ¥kF»aáw_g»é„ë›54wɳm6îžÎûªÚ'ïèy7ýݺã Û¥ {éÔ;£ø¾ÇŽËÞîêèËöÓU{ßۆ˞vÓ­6ˤ‹Þn°ßÂÓ³]6¹¡kÜwòɧ³þ~†_îßÿW>¿]püæWÂqhî77ž§ßü©o†ùºßc3,¿u9öÊ¡sæþN´v¼îéÖ'çu÷’vÉ•h[wôrÞ «}°åˆïåñ¾?à®N]3y'¬ðuóÈ=Ò³<ø:¶Ø¸ç=âzýÑçØh[Uólõ”g«GÇŽ |請ǹ6v¼7 -9¶¦Ë¥g[«OÖ!—czêšñ¹të„}’ÞäÒÁÕ;rWïx~ÎY6ÖÞë‚ç1ÇÖ£lºÞÔ»„åØPïû\z¯Oý°~kµ7ð}°/òWïgùô¬CN{f|– Ùô×!¾Ñ!ý}äð|o\!Ÿîïèy׌zãt»…¸údœùã¤ó¼îùSúä"¦O¨Ûlé¦LŸ2žS®-eÚfŽŸû½tÆwÃtí…UŸœí±Ùv‹yäæ¯É'÷I~õ!—®Ø.|}awuα1Ox¹£‡­t½£»lúÚp}Ã÷ô/ÅóµÜÏ­óÝsõ­~o)§¾Uï;ßÓw¬½ç]rÙn‹bû…·Û6ÛQøù^8:÷ÁÒnú•UÛn1<·í낵}UÚg#ï»s»ÿ`úÿóϯÃóÈÑoŒ£§»:iíÄÓ±­Š¾ÝoýûlÚûν°¸¥+_‡ö^榯 Çï?G×L©Ðõ^)%|çþ¸Ô [Ö~؇è•{°|:uÁVqg'½Ûlàé¡GÎöÒ©kÆùãj’I·9ôÄÖí–Î]rðÈÕ¸|½Ko¸<[C2lvCoE¿suï‘C/¬ùÜývºyÞugõ ½qO‚íÒïÞ6Ž®ùtxãD{Ǿªî¶¸®wãꪵ|ïYžÍîéÌÑ{Úónù5ÖÜ{gÞNG/lŸnéa‹ÍwÄÚ-qý•±]»aÑ)g˜®Û-º³j^÷¡àûÐuÆåràècò½ÓíÚûøÍgÙÛÇÊͽG.àç–O\ÿ˜slàçSáì²Á¦±SóËÍ>fä}GwÜÔ:g ½OÁÍ ×±—Nwô¹öÈá–žð}A»é†éØg£®î…Õžwö¼¯\&Úû’slzKž¾ñwô u½³ßýkMúûÆ0}îçøûËöØÌ÷þEÚûWÊ°ñ†‹ÓßI‡Ç^Ëno^wês½ïǽðô£u»ïi»åÀ\ýï駃yãBoœéîÖ{”í–oÜÒOæƒ7î \ÿ¡èÿ+Ÿˆå‚éàçÀö<ÃVȲ±ßý.ÃsÕÜ¥–´÷[ê†E÷–èžn|=ë†Å~ 0œtwptxßË’K/»Œ:m·(¦Ó =r÷ªrsÅrÞO”nX·ÍŸ\ÍÝÓm3Ýîuåìuº§çY6×÷..Íì–®]ï͆í¬Jg\Üdk¢k¦IÚ»õÍ ËÖj¦ßÛÓ­ëݶUáqoS׌àx›´÷ç6ý6,ïDo\×c{¾ßÒ{&ß{¶¯Šß®KŽnéÏÓOn0(xåL{PïŒõ¼¿ìžî_ÎÓ)ËöÊy¶õÏ`;½èËvúž÷àÓ|:´wóÇÅ}Uî…H,ûâð›q]ýî©k†;ÞÏ©w˜ÎýqŽ§³÷]ñœw[?ŸRwÜŸ¶[Üvºó½/èÛ¼îŠåŸKÓà ×]',òk´­ñ\²lË ÏÑù®3òÉmÖêy7_Ü—ü¶6ÝNßl‰£‹Nwý½qŸvG—g¹tKG\žM×|::ä´kf•:ÞÝ.ÛFóéÎïþæmUÜÓ7ø½5žŽþ¸uÃî²­ÕmêwG.]0]ùú>úär~~×÷žwÈê‘‹\ž8ä×ÓC†íÛÝÒý~:éí„ëæ‘ãœúÏçúùõë&iî¿ÀÓoßÁ×Íëî8û­×ßý-ÝzÝqS¿ q·â‡»rGWŽ}r÷Ô!W"ßû³ïËŽ£«GN¿+—ÿV1ž^ñ¿ËÔ Ï;wÈ)®g=rºŸ®ràítSÏöUÝƪvÂbÇ…vØá«Ñý¼F9¶ZòÆeþ¸ºÃtÚdƒîÞȳl¾ëÝúa…“®·ßm_•7\gó=rÄË;ÆËÛr?×^ØB‡\‡¾½öÎïY»fº¦½wŸÃ§=r¹ï}Ч ŸM÷|]3”gcÏÜë‹×Û)ÇæºätcUzf^§ÇÐ܇Ö73ÖnØñõž÷1ÝÓ³ý– õÂF»ÞÕéŽþ–ré“ åÑEwÿ`ŽîpØ>%,G÷Lê|Ÿ ?O}°šcÓ\Ûå{NÚ»öÉÁû>³;ºæÓ‘cC÷ÍP>rþ-e+|ršQç¬:õ»sœì§ã~ŽŽ—•ÛK§o`9vVu—v[2ÏûéîìyO^8ÛoIxn«nm·+ö»ÓM]wÙ(§~ l?–ƒ—s–í$°ê?Yç»î«jý¤Þ¸VVUs7ÝÝ>?˜þ?ýü -8~y¿ã÷búoþ†'î·yän8—~›ºaõ†y9çÚî,ËF¾÷{º¥[ŽíÎ2l‘›Û6úÞïÉïžðÝxºéí¤ÁWhkUûf,Ïƽ3º›î0½ª<±\}îÊÓ©}°µÄÛk5ÃõšèðÏëö[»ÞëŒí¦½«Ï½pKoêƒöÞl´bFÝuδ,ÇÆÛª­m¶0_’í쬎瘮ܼ í<z<{㈟ ¶‡Þî… ß=ö½?/Ï´÷.ÝÓ½GÎüqÒືJ›l/ýä“Ó®Ÿe‹Þwì²Ñ-½ˆã”]+l­RŽm4Ôž÷¼ïÝã¹ôÁêŽË›ÇuäÖ€ïÔ ;yË<ïo†çïø¦ÎͲÑnË;0ýݸºî§O?×ÁÍÓ^ú•ŒzÞõ>—nØÝÓÙ÷>›»-6öÇ}Îçùb®ºûç"çèrS_Rç»öÁRN]uwñ¹/±ßBy¶a[¯Ôûž6\l³e.šÍZßm¦cÍyß]žÍ:a7¤·ƒ¯ïrýµ÷+¾wõÄ]Ûp9P.vØÌ·'ý=ÜÎΧ»-ð¿Ÿ\–í[7Ùh›íÌ}ïÞ#çzÞ ýôù+`¸pt§½ß˜?®€éð˹Íôß²¯jý÷`¼Ë¨‹î~{¯÷tì·Üi–í®KGŽMoéeʲ)O§½–¨½W\6ÝvÓ­óýAòlÖ;“0=uÄæ½3vK· õ„áԫ޸˫U½îíñ¼þv«uÚekˆG®qv9u·ßÒ$OœyßùžÞj´¼ç;«W0X®=ïÔ%×Fwí±±ç½ÝyRíõwïã½tɵé=ÝúãìŽN·tîƒÕŽ÷®ßpQ_œ`;:aÖ ;øS6½îÚ û¢Ú{øoèa—Mºä^_±¡.Ýõ̼8\^½§Gùߺãâ|ïœcCœñuÓÜÇÞïþF}ïY'¬aºßaK»évO—\ú{¶ß’o¸€Ÿë›äÚ€éȱa+}¦]3¶›>û´:÷½ën‹pô9{ã¨w&eØ–1›nÛ-YÜâJÏ réÌÕ—¼™.ý3®Ö:ßáK˜N°ë+XΞ÷è—Oç]¶ÝùZFÝ9Þ°üÔÿ»Ÿ€áQs\žÿ‚×]|qæ}|¿ñÞ8Ûn¹UÎλ-ª¹Ë»–aãÕ»’ÇtÃvïƒöΞwðt{%—ecnwU馎 p\qýòo¾C.Ï°™Ï]³é¢½G®Nº;{Ýo§üåÙÔÇ=r´Ý‚~XåêÍ:ùãÏê‹CO¬yäh7½ižwͱQÜSË:aÛè“ãþ¸6ay‡¾Õóޱ͖¼V³l]ʱ™÷wu˧û[â鼟Nwóžñtxãz.—n½°zCÇ>õÈ äŽî}ﯢ½ãŽþbõWé”sû-ÂÓ_Gä{O÷õ‘î¦ ÇG©ã\}4f®0Ý:䢷}œÝÐ%Ç6žLì–N>¹7á葧¿coõ]÷Vß 7õÛQ/d×ì{ê:b§ÅÕÀÓç)Ó6Õ9˯ͳlú'ßÑçt?_˜÷Ý4wêšÉwVumi=ï…~Xðô+}3²›¾ÖG˜ÎÛ-¢»£wFóé_ëbÏ»öÁÊ÷ƺa¿(Çƽ°©÷}g<½Ð=C›éšIßY¯»úâ즞suÞZ=Pß o¦[× õÍ|ólßÚó ?Qµ;XÁõ¸¯Ú—›z7»«÷Iƒ¨ç}@ϼï/—ß/Ï_úâw—;:ãù jG,:ä^ÃÃ÷ËpHú;úã¨vT̲ ‡ãìŽnÏúf¨ë{lØoÑ uhíc펻¶Ç¦¹tà8o¸H–Íîë®K.ÝÕy3°]5öl»eêslSåè–S×­UõºƃŸç]rêšQÿÌ=ï–e³žº£/ÒÖêR^àëkâëkíY¹Ž÷˲mt_u£¸þ%>¹/—O7ÞgÓ‘C׎—cË·V Ë·Y¬õÂRžMré¼¾Ÿ{zØc£Íê†-î¬ZçÌñd~9˦›÷]5wøäÎßg&çÀõXÿï}–ÿu“ÞÍÍ/½§{,ÿå;fnÓU¿Õþ8ïu—|:öU¹sF¿Åç®=ïÒ3sŸgÙJª¿—€á…<[9ó¼gùôL{Ç-=rê“žç¾wéa¯ÒΪm«bC²éUëŽ{ä\ºvÎøÞ™ºöΞÃïžo¬Ú³]UdÙà{ç¾÷¦fÙZúyúSêz‚þÎwtÚpÑþWñÆ]÷ÇyT2Ï;wpózS;Þm/ݺÚ1£ÙtÆõ·ÝÏÉ7&Ÿ\ÐÜÑûFš»híïùÖê»ñõ‰úÜ-£î4wÂsö»OÁÕ].Ýòé©»-3‡ézG‡þ>›ý!›Nü|.¼|¾°žl³á¾¾Ì8:uÃÆŽ÷<öÊ}ïË,Ƕ,ôÁêïMq;}-=ïë ž³Gî‹sêÙv‹m±ù:²k[½£‹ö¾O¿÷Ûϳ徸Ì#g˜¾ý2‘›ïÑ·×¾w×w¢w„Gî¤;«xÀóïùâŒckõ[Å÷óðþßÿüú zû_É'·ô”a# Çß¿3L'Þžòl·”aûMœý6ëKü\¿£î~oõ{ÛcËw[î©Vyz¸¥SŸœùÝùeÚ{¥¬Ú{Y¹zY¸yÙáz%ròŠçç”cC7¬ÛP¤þ¸ªvÍÔÓ«†ë¹çý±î²éìy\½QÓ.XÛc3~Þ¬7}>]ùzÓkíä‘CVÝöØ®õÍ´®tδÍ'wUÿ”a³Î™çðÚtK×¹\sÇ¿Q&ý¾8óÇa—Í0Þ¸nÒÝ£¾Þ'Ï\Öó>è7'þ¥À×_Ôó®Þw`øKÖýq/ÆÑÑ÷îð]°ü5póWâçCóƇÖùžÝÒ]G,|q®v,ïyç ø9¶ØÞœþ>Áf:ûäø–N=l°åÛ-ä‘Ã~Ë5<×Îl¸Ì½ç=÷½j–û`çzO·^Xëž±nXíKÕß—Ô»¢NØ•ÞÓÍ—uÍPß{|YœË¥g[lxœe xnYuδÉnºèíæ‹cžŽ^ؽ˳¥Œ:º`m3=iïàë”M=rG—ec_ÜA7U¶±z²l:{䘳c“Ízaᇳ\ú÷Mÿo}~ýõWÄrðôÈÏoðn¬ö×oãèšc#,§½t˱á¶.÷ôÛÛâÓ¾wꇥÎl³)¦ßÝk'¬åÚxÃ¥TàézK'\%»©W¨GN7Ùø®®ú»Ï²Y×LÆѱÇÆ\½V-l¬V‘Mw°µÂƒÿ½¦÷ »Ó†‹ëœ©ëÎjœwV‘K×›:úÝ‘O‡î.OîêMΣ«û9o·ž?)GïP—\ê…eï»í¶àoø亂å¦ÃÃëþLwôgèî®oæ:G·nØÜ'÷ôžõ¼lés,|îÔ5Ã]ïl²wVÑûJ»éÆÕGî†n›lCͦ‡Ù^:iðo|O7‡×xzì‘ËöØÞ¤kFñýݸºvɽ³?ßÆÕáw¼v͘îî¼q¸kç;4wÞVZ×»à:8:o´¥›ºôÂrN=ßcÓ;::a?…›/H{?_Q× îè+ÕÞçØYEVš»ñôa:åÒGî«°Ÿîé¶ß²¥»:4xÏ×ížnéäc¿»Ë©ãŽ~P,‡ß]wV{Ÿisš;eØÜvK¶¯ú}¤ítºŸÓ]»aõ(õîÿ·Ÿ€å7£ƒ§ß€¯CGŽ-ñóß9¦£ï·[8ÃÆ;«¿ï¼?NréèWG¿¿üÖ,[äé%õ¿½ïè~'ݽŒ,›ðsõÈ‘Ö®º»÷¼³O}°œeÓÍôJU»äa{¤›zäW¹6ëœy¬‘ï½ætw탭yž{äHƒo°þNwtõÆiÇLCqݲé-âê?ÇoÂstÁú}Õ+ýqš]3¾žðœ3éÒ3øžsuº§+®sïÌ3wÍX?läêÃeg•ûfØóòl®–<ïÇûƒ ×-ÃÆ;.èz}}¡ÞÃôÝcÃÝOý°šGŸ§¾÷éî¶Ç¶ˆ˜¾@ç;´öÏ…õÍä¾÷¥éïØ[µwáèË•eÓWù[Ó=}ïÀtî…ÕΙµb:4÷ÛX%®Î}°„ï[ÁpÞn±{:ð}¯üÚ»í­ÒMý@x·Å¶×ÝÝY=J^ýtÍôƒuÈNNo÷Ø.Y¶ïSÆÑá™KØômø<ÿ¿üütvÆsz|KW¾µö_–gûí÷Ø,›n™tÕÝu“­˜gS\xêy7ÝÝúÞå¦oè^×n÷üÑ›ñô<Óf›-qƒM±ÜºaøUxMðœ6\’ýÁùäØÇ\5wí‘{D†­–eب¶ÐóŽl:u¾Swœö½gûéè‡mé]ýZçL‹¶ØØ'wù7Âsë’ã\zÇîçíŽtÈ% ¾ãð½¸ßÒqþ8öË‘Ö®>¹žë ¸~Õ#ôöÈ×¢»–sÜKÿšGŽî鎫{ß{Äö!òlCòÇY?ìŸûf†WòéÖ;óï7Óß#¦ã¶NÚûdlž9ê„=r™Þþþn»-æêêx,WoœõÈÅÎ8dÔ3\·ŒºxÝíÓl‹M5÷™n²}²æNïsÒܧÏm_uI]rÎçŽÇýî´±ªüœö[Ö+Ÿg#L¾wÚVõ=rÜ ›ÝÑYkw}ïä}ÿJ½°Ü5cÚ;²l~¿eߎúݯà¹ÞÓ¹ë]pwudÔÓy3]ýqšg [-G‡ë–e“ÕsÆÕÍ¿=ÿõ¿ÿü%Xþnèåüœ=ï¿ô®žçÓ3G'¿¹=rìyþ¸ÀÓß™gXžxú=á»yâ4dž¿ç%ŸM·ÎÛeSíØ^*zÞÕû.|ý¡ÐWì„Õ›9ëîæuÄn:v[ªÕ?êíy?¬ÞÒÏÝfºöÇÕÓÆÑåuñÈAs/hïMÛpÁ=½•qthðOêkÙ ½L[ËçÓÛ„éî“®ÞoC{¶ÝÉ°¹<ûäô–nš»»©kïLO=r‰§wõ~^ÜW¥M6협¾ó¼÷ÑóÞÑuÝnq;«¶ß¢ßÚ;TÞ²lŠé„íœKå¸.žô÷‘ì±õûrêþŽöÓÓßבMGç{Àõ{ÆÙ3œb:uÈa—m:s¶”KŸš¯Z¼éîša›™î~Íçºa5£.Z»pôÐ3Ž¾\,]Fü|umc•ýq´åžwpõ zÞÕ¿ñ96Úb+òtº¡o¬?Îüîæ{·ŒzÊ¥#›¾ÝzÍ=ï†u;«;Úd;Ð-vÓÑ!‡lú‘wV‰«[‡œÝÑÙnºúÝy7ýŒm¶+ï­(§þó¹ú xþ×_%žNÜ<úÝ£Gî—úä"Ž\ÿmùô_ª½c_¸žòê·ÔõnØ^¼©k®í®¸µÊÚ;ëî ×ïÄ'ØþMð¼|_¢Ýô2ñt|£ïÝ´÷2ßÏc·LYzfÐ5“eÙÒÖjE·UÉ''·uÅóÚZ}äœ:xù#}?R6ýQslæy7¾®xN}3Ww[ð¼7-ŸÞ´ž™&ø9a:|rìy‡?®ÝB½¥7õ¶l·<é-]¾ÁÓ;ä{owô¦ÎÜܼïEŽ®»éšcãþ¸gË¥SÇ{Âò^ö¤–=謹÷Í'—w½ ŽëÛÀwÃÐ3ûé¯ù=}¨\}è9`;yÞ—¶›®;.šg[¹,zäîë¥jïês_]ϧ‡ß_´ã¢]°äuçNXåíÛÛJÏï趛¾³ÝttÃî·±Öo¸×wçÃN´öüîÈ®íéekU¼r´Á¦ïpò||ü(·tâçè|ÿF–íLwô àüï?Šåâ‹Küü/âì7Ö9ù5ùÍ÷t»ŸßO]ï7ê‘û­xþÛ´wí™ÁMùµ|k•ðœ²l%õÈ..:¼óÈ•õŽ®7uîw§^Ø -v\„›—+y¬áy5ëxgí]»ÞµGŽúÞõûQýqUº©×s\ÀùÔ+S£;:gØôžqœ¼ï¼ËÖ$l×»ú•ýäÒ]çŒðtøãH{÷¹ì G?8ßßv¸ÎxŽ;zû™³é´Û‚œz·«ú{·Ð!Gú{Ï6Ù¢î.·ô{ÞûàíƒsoУ=6âêƒ,›Îy6áç¯Y‡œuÍd½q®ç¼r¤½´Ö2éö{¤9tÊqžÍ2éÞ'‡í–·±ç謻k7ì»ï‡E&Ý4xï{7nnýqﲟ®]3¤·§£®wͧ§þ8ÆtöÆÍ2ÍÛ-ŸŽ¯£ofn›éèzLg¾î:ä¨çÚûJ»äVÙÖêÒòká{¹²í–5ùßi“M=ïÄ×YwO¼ÜvV Ë¡¹ûþ¸/tÌÀ÷Nš{Úq¹–Oß©öž÷Âæ6í|WÍÝgÓÔ;c¸žåÓOÇ™§û{:õÇ)G¿`Ôé›t÷Ÿ[úß~þ+àyäè¿®ÿåîé7Ú «þ8í|çî¸kÚûæ×nonÍ+÷ÛxzñÝù{úÝÓ£ïòlÀsÛp¹§Ž™”M¿/3G§=6í©x¿;¸:p\{Þí¸nýîÖ ›ð]:䙫Ë=ÛéÌÓyk•rluòÆ)?Ç==óÇ©ÿîêÐÜy‹qÝ°½eyôŒŸ›öN|]rkÜ×"\›zÞݽ]}îmÉ¥ëoGç\z¡çý¹ëüîÝç^¶ÏÖ3ýÞ÷>e×´Vôv`ºÞÑšKç=¶øä\†Ítwǫ̂öžy㌧Ó÷µ9ÆóÑPw[tÃE1Ýv[FÎóžåÒ Ó'â›\ézO;«èœÁv‹ïzgž®|0~úaz»jî3ë}Ÿ~ ßþ¸©å×´;Žºf¸?n6wxþIÛéŒçq¿…óè®ë±}IÚûÒöØ2͹zôÌ­­Vu÷•eÓ7kÓÝÙ#ç0ýk£îºa…«§^Ø­ïƒÝRž-ëƒæ0~¿%í}O=rû½ÓßývËÞ:ß±¯êúföÚ§}3‡|— 8NýqßÖ!g}3ðÊ™Þ~"¾þÃÓÿþù¹pt{¿ä®žôõ_9¶ÿ¢[Þ ûwuàûoçu¿Uï»uÇ9g<4÷[øÝ)—®\=í¥—îJŠéwØM/Ùf‹vÆQ×»jî§WŒ³G­œ½Rì›I;.ÞWåg3Uß%÷È{ééïeÔ]'ìcíêM½¸Ý’á:yÝ•§×Y{Ç^ºaz+¾|[µ©y6í›!žŽ;ºeØ]k‘ÿ½í}ïOÞ÷ž0ÜòéÆÓÛY×{'ó¼ãß»æ‹cíýŠç]µönê‘ë¹Lz¾Ç–6\ »Ð=Ã=r}âçÒ!~> ¿û€;f^rL÷øîüqÚó.›é¬»úüšl¶è7o¬Jç;p}¬˜>!ž.¾÷‰ì¬N¬{fÂü\÷Ó Ïõ–þÏ»ì°Eíý6VÑûž|î3ɨÏä¦>û <Ÿæ}°sûž¾Û-]2lð¾ó=}Îú;åÙÄ'·dÍùtà¸zäÚ›¸9ÞJ¯¶¯õ~n\;.¶·êslŒíÙfºâû£ù®Ž;:ºävèzgÝý -Gß[÷ ßÒÓïyÝ­ó=m¦£c&ßg†ãž~°®÷ÓÉv\À×]ßû·yßá“ã;:ø9gÙ~>úùë¯ÿ:ÿõ_Nþ_Ù-]¸ú_ÐÞãoÈón{l7Ó»lºqõߤ¿ÛnºõÈ3éæCœqtÛb3¯÷¾—|çŒèï÷²Éví]9zvS÷ôŠßWM=rÀvÁuÕß«Y6]úÞÝ~ºà9vÙ’Þ^õü¼ZÓþ¸ˆçuÞO—>Xõ½{Ý]ókº—n›lÚÛ ïÿÓÞ{m7²%ɶÿÿ_;“Ô$AJ ¨5/c-7ssÈz8·º{—Ø=Ö 0ë¼Ûpw³iÒdž·Ã½{ʱ_œi9g÷½–¶û]Ý;VC'ÛÞ ÜÖ¡ßáž»Øø7nè¼¥úÞÝ}rGÕ#wä¹ôÃ|C7Îû±1fZÞ8ûûèäX:Ùºöîèl9‘[:ï’c.ìiš×Ïô+LØÓóèC.=ßÓ/δSÕ{[ åçðË]\zzàÃ&Ÿœ½Ñ•ëúHýqع7=lWÒ›~ >ìµ3ä®…í.¿9ŸßˆÏ¼™eÂÚ½ñ½ßÜÚ=ݵl¸©ûî}âŒØ;éL×»:÷í“Øßrwfs÷ÅÅ<›Ïç1Ÿº[pS—ud×òþýÙº[Õ÷þÔÁ˜ÎL7ëýYvï–c{1ýþÃî·ô7™ÑƒßýÍ4Üæsó½ƒ5ƒùüý7tßÁ«7®Îêê‘ûleت–ã¦Þü÷ßA½ë¿FÏgçg¹koôÜ¿ó2ŸÏ…{[ØágôÙÁ÷²ž/tt³eMG›>úÝ!ýq+%·œÎêÂs&¬ìÝˬ¾ïékÞݲšt|-w· _um#ðã¸{sú:ùq›šc+úml’KßÌ|wéNßÞ¶lúŽgÕw¶jÏ*ærè{º¾-»÷>=rÕ'·ãuͯ±»Å¸ïE¿û• Û3n·£·eì™ý<«ïû óºÞÓ¼_õ3ù@|r‡òe.=³ÞëŒ~„®UõÉ+šîºÎŒ0ä´_•}鸥{o‹êùº~:ä=½¹­Ÿ‘ñ~ö=<3}Æ;øqšg;W¯œxß/dFg&½ìÞëÞý¶ðœùÞ0hÚY6äÖc‹óºÞÕ±GFwõœK÷Ý»xånoȈÖßDº[&ôÇ¡C}2Q¿»ÞÕÛZÎ\:òlÐqÑyO¹GõÊï.¹ô§‡êƒkXr_îééÉçucÂÒóþè,X2å^ÚÝé/ÏÑï/˜×Á‹Zþúªœwïny}ÿùßdïþþŽþ–wïh“{ú»t·Ôûú§÷±¡Ã…žwhûWíQg›eÙì¹7ÎçõÿÎéíÿê<^gtîÞ‘a›3n\ȳõ˜]ë!϶ Y6Ìé ½V–­kNç½lÆ|§?ni)åÓMÛ…!W½qUËÁt÷\ºw¨¯¨®¯º¾¯®¢kÕú[ÖÚÙôÐÝ’XïìpA:oëë1Ÿ®szg‡ öïUÇËL¾±óé[[!YïÙïÞñv’÷]ïçšOo±fœ#×7¾Ìçth8úÙâî7õ4Ÿ“[þM÷9}ŸéuV·û cÿ>ðÎjú‘øßÒ=ú.YuÛÃÇ.6eÈ ç=ÏèÇe6?¾;9rÍïÓaȳ1˦»÷† ûó†rSw†œèºdÓ]Ó5Ëvf7tt§ÇÞ–âÏþ¸ÖMýJz[TÏ“ïݲèìPÇÎ=u§Ã'7Êšžré×Âx¯¾÷tK¿qÏ{Ôò±ìÛ§LØcë]rl“‰Ïè÷̪£«Eoéèa3¿»ÌéÊ„}|ð<ûØÄ'Ì™‡ÐËöȽ;òl¼©‡ý‰ü8ö¦›_Žó¹zÞ_pW«_áÎý~ys&,ïêÚÝâ}lUÓߌ7#|X²`óûîû'¿ÐwzÞ?¿\×e÷þ Ö;3lâÿïå¿Yh¹èùì|q³>¯ÏÇÝû|oN2lî‹›ï-p¿ súoé1ÃVµ|Ý- –c[X\²üúÒ%§¾ïçèZE¯*gôçÆ!ˆ{ºîÝ‹ž/¯Š7n5èùšúä2K®pÞ³/n=ö¸X&=äÕÅï¾>,¼qâ‹Û’™}3ÌçÛaïÞdÓK;xï[ÝÙÚ¦ß}§é[Õ¶Âz‡¾ÏL[Õï²äê]Ý|r¶cïÛ¬ÿ;ô|¯°bkŸKèc }éšGßûÑî=ó¸«OÎùqûðÅI6½êúá·v·ÄN¶vÛQòÇz¦M;\´¿÷ô²o¿{ý-ytÓóСÜ©{ßOËßèj©þ÷3úå:néÌ©cß~ê3zؽŸÅÝ;gu½¡Ÿ;sæRßeèM¿€?^9Í%“îLØÚ™~]žÌåœÑ¥cUôœ÷ô›ë0Ÿ×§lUÃ53NL9°gbÏj³{Ÿˆ¶O&“ çÍ|î]«¶ƒ¾÷{¹©ß;ëݾ`ÍÀ#w/yt²äóÞ=õ§ç[ú“ìÞyKtÜ“ÎêÏìL¯6¿¡ƒõþ¬sú«Îé¯r[-Y6v²1ŸžXïoéûþî·uìàÃlŽ½{Í¥¿7ÚýþIoê_â+#§þåY¶0›wÜÓ¿þ;¥ÏÎΙ¦Ï¦ùÜõ}žÞ÷yrÞ•9ï;u|Þoê ó žGÏ{ù{qý-ðÀ7Œ™FÏ—eN÷ô:Ÿ/›Æ/Û=}‘LØ¥ïÜß™ݴ7õÕ _¶Y}™3ºßÓWþ¡žK–mÕúV×Ý÷®Ýé¥?=Íè›ÞÝRòè˜Ñ77=»¶!þ¸MøÝ…#—=ïÛ•óN&¬ôªn%zVyS/{xõ¼ãŽŽÛú®ñÞwñNî{;Îòémvï{aFwÜYïðÇ•ßÔrÌêæwÿù}ˆ¼ÝÒõ¶®éIÓ”K\ÖtcÎð®î<Øô¸°MØ°'â#çý¤jy`Éa>ïÐs°ãNÅ'û÷s™Ó9ŸŸE=×þtv¶HwËe‹{™˜3WþÄû>¢Gn佪Ƅe>Ýx°ÁçÎNÕúo7ÔuáÍ`÷~3l×ã±ïÜÙÛ’ºVÕ÷®ÝérGW\Ïï¸w¿“YÝÙ°÷îw×ýNûØîÂîý!t²En܃è9òéð¾?„[ºô¸pç.=.Oži{1ŽÜ²l‰Ûpäü†.¬wóÉuæÙÞDσïý]néΛiºÓ?Þ4ÇöÑ™cÃ=ýã3åÒ-›Ø°)ÃVwïŸÎw×Û³lEËë³½{ÑïÙú{^ÿͳésÆ|/ÜwÎç~S÷Y½—Øî6£7¹µV‡ X°¶‡ï`Í𦞼qäÌX?}rÂy‡ç9õU²äV;|ï+ÁûŽ›:²é:£;;n½éèeCV¬™õ ïg«Z¾)÷tŸÑÃ=}£ö°5].qFÇ=}Û÷í’IßÚòù¼™ÛÝ{[ü~Þ0a·Å#ç»÷0¯÷½‡Í¹3‰1ÓßsŽx3êSï»ô· öêÞ½êù>çuÌçð¾Ó'‡¹\÷îͼ>ãýÐöðGiFÇ ];Ô {~›–‰žKßjõÇ¡kU÷ðC²aOrwËPîèdÆy>}x†ù\{U-§~rÐð’I·üÅúZTÓÏ¥;½ÑósÏ¥3ÏfZ~áwô+~•7²'½éæ}wVl¼¥»GÎöò7ÕûYrÐñë˜K7Ÿvï™7SûUÇdÄ¢ku2®>9ä×ØßÂÞɤËÎ]«ÝÌïdk?ÕñûÀzLsú}r­:î¬÷g÷¾?»O¼÷Æ9o¦í‹‹Ý-ÎSM‹ý-ؽ¿&M{“ûùGÑsêºv±éÓþñÇ} ƒM¾Ú±ªÞ¸où ŸÜ××Oé͘Ïg1c^Ÿ›u¯»ÜÑÑÝÒk4=dÙ\Ëç{ùž¾ 9ìÝ{ìM_DzêW¥ï½Õß²:Óë]}ÙÙ°Ôñ%ßÃSËñVäßV™_[±9]çs>íqÿ]t:N=]lÎœñþôÜá²IÎÌ=ï!—NŽÜ†íÛS†=«Û’gÛ®¾8éo ~÷ü¶;<ï6³ï캦“õŽ›zʦó»ßhü¾ýmÞvÓùÁþ~GŽM³kööÍë¾o¹ÜÏÉAžíÐû[ìžÞÕ™Þ»Îè‡æ{? -³¹ÝÑO|V×.6ö¬žÄN6üö¹?Ž}lÔñªéÞÉv^2lôÇq>szèe£çÌ÷¤ë£ªõ#Óvìߡ鸡+ãýÝlÔòkécÃo½¥Û¾™ÑÁzïܹûŒ®ùôœa› ›Î~Uɲ%=Ÿ$ÖŒ÷¶˜W.ðãî[ý-qß^çô'É©“%‡Þô°{ö™Y¶—¬ë†Õ^6òf^^]ÓCgË‹ÝÒ¥_•«1›îœãÆi&=«i÷.êŸQÛ½¿å«v± sæK;Ù¾*CîûÓ=ïxÿé×ôÙÙY{såÍÍÅ;úÜ|£õóáß3¶êz/ðf é]ùtåÁ†›:™°±3=0äš¹}IÿŽ÷tpa——–¥ËÅîêÊœ± ÛjîX嬾u}Žq‘7³Ú‘][“Y½êúÆz뺮]lé®îœwã¾³S¹¶­ä³[ºô²mƒ»ƒ¿w¼¿eÇ9ïØ»{_º{ãØ͆ïnìYÝݺ^}q»ôÉqç¾+šns:¼ï˜Ñ9¯'Ïû>çô†ùîݪaÈÅN6ɤی3u^¯:~(»vÏ´i¶M=qÊ…= ï„3:¹ºƒ¿7Ž\kF7ÿ{dÄjŽÍ2kâ‹+~÷ë`ƒÿ9÷¿çîôgÕE×K6]37ƒû:ær²Þ_ãœrl†}õÎê»t¬¾©¦+gFvïUÇßÙ¯Êy3ºiù‡ñÝ?Ý÷^þNóz8¨ÿ‡îÞ©çsõ;mŸÃ›­÷ôYÉ° ¦§¬™9ß½+C®ðÞƒŽ»Wn!pgLÓ3³°¸zÙÀw‡žCËqS/Ü8ñÉ9v™™ôíc£GÎnë¡ ·ôÙ»ÿ|ï;wï®í|rGÏéôËm¬Îû†úÝ…!W÷íÒߢy6øßÑãB=ÿÑrÌí!Ó¦=.;EÓuNßÞî˜Ów ã˜Õ¥gUúØúÐ÷ΛúžÜÒwkw˾øäöãóNUìÞMÓØ¿cNÇÞsÆ~¾Ú±ª,X»«ù-=ÌæܽK'›±auf?‘þ–Ûßx'{V‡ð½»¦WoÜ^xrÞÙÛÙ°gÃØǦ{øÂw?=oÏê¢åñ®Þ¾¥“ñ~q÷îäÇáŽ~E-/zÎN¶Ú¡>J¬™Ìz¿¾²Þôk÷½ß#–žwíL¿ö»w±Ý¸7nÜ~ša“!7;÷À˜i4}[zVá{ßò[ºæפ­ù»N¶gȵ2lÚÃFß»åÚö¢Ono·KlXëXèÎ}_¼qû¢é¶o§Oî¿+ã}_\£évg'çý@üqeï»w×t›Ñ£ßÝ{ÙŒ {ä3:réå~NFl£×ÇœÓÙ¯*¼÷FÇOÌçîùtÜÐ…7Óü7îTfsݽK†íì\x°àÅ¥\:|ïç6›ëÞÝz\.¥;ýRºÓÙÅƯïÜÁ„…÷ÝçôëÂ+š. 9júÍ(ògn¢¾7eïîy6ëZmtü¦Ñòñ½Çý»²ãxK§®ßºþÎ÷íÊ »÷{édËÝ-ܽ?p>çmýQ|r¡;Œ÷‡ÀC~ ÷óÇg÷½?‹7îé¹cï^îé9›nŒXõƽ¸ç7uíbãþ]nêÐuͦǽ»0äÄ#÷™ô¼îÛÁƒýàýC9°É#÷iZþÍ=¼{Þ‹Žý§©ùžÏÌÈÎýG³gfé‘›MŸ“ûºßÓÁ’3ß{/õ§3£Þã›·6ìÛ{©7}1íÞýÙ|n¹¶À‘ã-}9òã:8rÑ÷.½éºsW¬°føÖVÙËÆg>÷õUÏ¥¯‘séî‘kfö ÙÃûÛ,sûfË'çlzSßb7çôM™ÍqOß¿:Ô· Ï;ïêÛ–c“YÜÌèEÛw©í\ØÝì—ó¾tæÓ÷UÏ÷‚GÎçõk–­éZ-~9Ñsê:oê‡á¦~ =«vO?èò½I6ý80å0£×yý„3ºj:Ù°àÁÛŒn]«àÎ ‘a+y6éKÏÝ-g±3½0g:Y3§Æ…|wæÓÏôž~n Xç½»çý’ùô’_»λ°g¸{Wlá½£‹íÊçôÒ™> -¹ôÊzO>÷Ñ ýî7טӥËs:¸qÚ³Zº\0£×—Êx'¿»÷¶hNœwÞÑï˜gCÏjà²oz~÷ÝÉ{ˆì¸{jù½ûÞÙµ*wuõ¹ó=xÝés7ŽœqfJ.ýÉýîìqGîYçtéNÿ6Ìëècólzð¼‡Îtëpù¶+›îuíIwÞŒ2fÌ#Wnê6§—y]r_hWýÏÒôÙF¿gg¾g:vîå‹ÌšdÔußîž÷”c³9>¹…æÙ¼^¾ ÉûÎ.ç½×Ý»÷§×LúBkïî ¹EñÇ-1ˆYÝwðrK—Yýé®í«µk5íÞW˜a[1-wæûoêëÂ~W÷›êúƺìß×s|XzÞí7wíÎv<Ø-Û½WŸ\`¼Ãï¾µÃîgÃZwKùÛgt0ävdçÞ—»:Yï}½©§{:™°Þåòé–]Ûo\öÇU]—Û¾ïÜõŽŽ\[¼«ŠOî0u­ºWÎgtçÍ“ {:Óá•;:Q>ìIË#w]|r7Ê„µ=üؽïΆu¿{û5^™Ñɧ<Û$îàµí3ºw·°›œ÷¼“?#;øëe{èä½Ã#癶ê“{òý;wð‘ïºÓŸŸ]ÛÙÛÒÁ†MÞ8çľ~·¸°2§£Ã%0ä²OîÕu]õ\Ùq̧£s½ªŸ>·â¾îúþ¥Ì™/ß¿‡¾t«xðÝ%7/ý-=Ñt0ßËž3ºúÞ¼;ûöž³`ùUŽ;Øq[’Ý»³ãšÙ|Ѿػ/ç'¶•¤íÎ’s;Ú²÷]r­ý»úÞ×…3£ž÷&Ë|q™ùq¼¥sŸùq›Ôóêy×®U×ô­2k×ê6çõòLXݽƒñ.½ª»ùï–×}WXr}çÈå~U›Ñ cfÏ»ØÁ'ó¹ývÿûøãœûôüH|ï‡ö÷¡øäTÓÀƒåWXrdÁGlàÁÊ÷DûÒ1£Ÿ -;Ì÷سzf÷uô¥»Ïý\îéçåž~Š9=ÍèœÏÉó½»2ä.ÀyÇï äØ®ä®~IŸÜ%8°aï> -óy¸«_당›‘Íæ¦í7¡›M³é²{kŽm,žwóÈÙ }L¿û¸<îß™cs¦Üv®ªß}roèÍ¿'=¿ÌÑø™‰=«èn¡GNsl~O ózôÆÑǽ{ʲ…î–ªéϦãϪ鯘×m>oþí­ù÷7æÙ¨ïe6ÇÞýÕ;[Bzš×Í+‡|:3êïÒ¿–{Óûñ% 9½«§{˜ÓÿCvïvÏÌÎØŒ>“¼qsiïnZ>;—²lsdDZC½7G]Ï·ô çóÆ—éÉ×t¾îÝ{¢íæ“[ZlÝÑÝ·DFìr£ñ¢íËàÈ-EM¯Ùô%jø²²Þ¥»E»VWò=]lô¾»–×;úªïÞ;ûØÖÌ·øë¥g5w¦×ìçôÍÈy¯Ú¾ÝÚ½o‰ï½Í…Õ.¶è{¬÷Øá²»ãù5t¸¨?ü8ÜÕÙ™¾+Z¾»/õ½Àv¯Ü™}r¼ŸïŠß^wúâLÛÉžQïûá!{V#—xï‰W9°¹cÕ»\” {Œ¾ôcdÒ…ó®¹tá½—¹üôÄc&·Þ»{ßm÷žY°ø}®œwϨ_œ)Ö»UëîýÒøq®ñ—ØÃkgúöïW²¿"–é#÷¼_éνlêV:\n®KF ¹ëÌwïèMgží¶ü¾Åþ;øÛè•«ùô:»+oæv¢sºt·pF÷ô{å½CÏï:´<÷²ÝG=¯ó¹êøCœÕeïŽyœlXõ½›WîéÙu¼ñ¼¿˜GŽuÌçdÏ8Ö5ݼî/îyç¿…{º±`UÓÁ{WŸÜ‡ÞÓ¡ëŸÅïÎY½é’M—[ºkyînùLÚnÓ¹ÿ?ÿ¶ÿ5{öÓò¢çÍ|Þhzó›qMǬ>+Y6»§cÿ{UkV½‡½{o^¸ï¹¿e¾µ{?®·Ø‹ÜxÞÄ'§9uìà—Ä÷.9ìà[sºt§·üîÐut°Ù]]óé`È­Ðëî9¶UáÁ®å[ºh¹æÓyK7‡®oÊî½èùVõ¿o…½ûfä¼o*sÆ;ÙÐdžß`ΰ?=«ÉûÞÝéÊ…UŸœyâ çýªã{a÷®Üß»Óë¾·ŸºÙbwËþ>¼rúääÅýû u²5š=ˆ;÷»¡…®U×ôÚåâýªŽzgz×;1w°…‡Üš²fòî]_îc ú.Z.}-ؽ;KîÈ5]²kGÊß;¼ïណÛ±qaÁy§O™škï`¼ŸÂï~Úž×Ϲ‹÷Ît×ó ›ÕÏê-]îêÅó~~)¼wÓv»£_]¿ò~ÕÐãbóùå•w±Ù¬>b:º[<Ãæ-#óÄÚ½-ìLwæLèX\éW½•;ºéú8yã&¢ëôÉ¥9½t®N0›ËœÎ|ú=çó»r;÷<›ç×´í¾ö¬Úßî•COKܹk~Íïé–as-Ç]÷îÐ÷Ù¿¿<¿Dæû‹w¦ëﮎÕWË¥æLæÈÁóþfÚ Žæòwç»°gõ3øãзZoç˜Û¿Äû.Þ¸Öþ7ôˆ‡ýwüofz¦hzyœÑ5»&™ôYÏ®q>Ï=ï¹cµêø\¸¥Ï÷|¿ÀÛgõ…”K_ä=]3m‹–eƒï=íÝ™c[–|zfÉ™Ï}iÅ»Ù2s&ð`¥/½låï5çÈ7³šîèëΚ ùtydÍhoK«Ãűðºo=.~¹<§‡ñÊ©žo×yûwæ×l^ÏÞ¸ìÓ\zÙ5gĆüòèìWµ·/Ú¾‡ù\òéŸÓ÷¡ç6£ÒŒ>`·ªïá=›žXïôÅI‹Íå̲i¿jîN?öN6ÎæIÛ9§[7Û wÕøMÍ¥·{Ù6·ÅßÞwɱõ~œçÙ¶Ùݲ#udد;½ïؽ÷·ÝóŽûŽëyŸ]éUÓ÷À{/÷uél)ú¾/9¶ÝÊÛßežMwîèiýzßãî}Ù5°ä ã½£›–´»å ±äâ¬gt}DZg}-ìp9‘Y=ö·À#‡üfu~mÏ;ºö³ÉŒ><åÎ=ð`¡ëØ·KwºçÓ³W®áÀV.ì¹ìÜ/¨åAÏ›yüâJ´Ý|ï£ÜÏ6RæŒõ¦£c<ØÑ5gôÜÔ‘M¿…,[³o÷›ú8xÞƒ?î6±gŒ7ÖŽÕQÇîÌ-¸3gδ˜°÷ÒËf].÷÷ÜÃß=ÜQ×Û¼™ÜŸ.÷ô‡ì‹žwÎélØ:«ãžþöíÕ'»w™×•óN–Ü«3a1›×;ºûÞ_ßrÇê{dÃRÓ5›®}lŸÖÛò4\ØòýbÏ*XïŸìcû 3ºò`±ÿwü¯êùô–OËŒ>[u}wôœcà ]òéô¼ÏóUozÙzÞݼ°ÞÿÄ…ã=¾EfÚjoúRØ¿/.¡‹-v¸T=_t~œéú˜3ƒeŽ·tÿ®®D{Óí«Þ8dÓk>}]æuåÂ*ë}-ìß7”!Ç›ºÜÒ76|Ï.ì™­ÍÔß²©¾w¹§oË]}¹-2g¶·w ¹>:Ùúá¦Þï˜Ñûâë‹ß]ólî3Mß•Ù|oŸwuõ½Ç<›Ïæûûç¼X>^¹Cϯ ç]93¸¡SËÜ÷®,Øã†õ®½lÇ-Þ»3ßOèƒwüÐØqÇ‘ {RY°äÂvu¸`Vg_ºpf’?®Îëîw÷üYá¼»žŸÍ>—9uè9¼ïðÈQÇM»CúUòÈ]ŽdçnzO\áÌ\Uý¢7N½rð¼K.]}ršOw&ìMíhQïû­w­†N6²ãb~ \ØšO7Ž\ò»ßOb–­ü[ʤßé¬ÎžÕvúƒÜÓ1³·<ï໇,ÛcÒtÌéñžþbóùó‹ÎèÏΓSÜ+vï¯Ì³vÜ‹ÝÓ_mFO{wïnikºÞÓ«×ý½û–þázÆû‡ÞÒ5›òkŸÔuŽèÿ†’Ž]û4æô]Ÿñ½{óosðÈ5ÿ6§š>+LXñÈI¿ê|f½ÏõRžÍwï =ñ½Ë=½rgº;[Ê[À.~I2êKuÿÎŒz“]³}û¢é·°f–of¥ü¶ý;}r+¢å9ǶúÝÕŽÝYï±»…¼wÓñµ üÞøÖL[ìM‡?¬ç»koËft°ä6;x32£oCÇ™S×ÎÕ²äv¤‡­0gØÛŽœùÝMÇuVßå|¾×¾§ë-}Ïæuó»ïr÷¾ï=«…[ß`oP¼ïäÏèþÀïéðÈ5löØÙr š~ýîÉó^úZÐá83ê?f^ý8ßÒ‘e£ïý¸èúð$½ ãqïŽWØqr_wt½§×\úi˜Ñ-«þóoô¼_œE.,˜r—ÒÝr)Þ¸‹M'öò*ÜÑшŽUv«âŽŽyÝ8r#c»×{Wƒg.÷«Êî3:fóÑtü¾‡Lú|wÉ¥{:ÙìŽ>Ñ\ºüm>÷ :VïcFýuÓï{cÁJ&ü¸ÇǸƒR]P¯\œÏ‹¾??ú=]øîìNÝ-UÇŸ_^ë>wô±±—~wõ½k&ýÕçòWípùÑöwrbß>êþ=ÌêÂz׎U÷Å9GŽ=«šeS¯û§zä¾}Nÿ7ÓôééF˧ëŒnú=c÷ó™ä‹«»÷ϲ…—Ÿÿm~.ÝÕã½';ø9Ù»Ï÷²ß=ê:Y°È¨÷Éš¡–c߯»iºsäÔëî}ld̆ÜJɯùþ]r¶{_6_F‹e×8¯¯®‰žû«³¹}WcÇê::Vá_þ8æÙ0¯o®V|ïEÓMÇ7¶‚Wn‹lXñÆ!›¾½í³ºÜÐá“ÛIY6ß¹KNY3`ÂêwWîéʈ3:¿×÷þv³í;CŽ¬wÜÐS¦m`:¾OÜ~ÑszÞ5ËfݪœÓ…ó^÷ðÞáRsêæ‡;”{ú‘èz¸¥ƒ?Sõ¼éV=Ñ›ºö¥³M»Ø”1c<¹¡÷¶œ–.õú÷ÙpèÙôò·h:YïçÂS.ìYô»_H®MîèçœÓ3ÃÞ˨_`&¿¯ùâ.m~÷\:üîšW»’}{Ü¿ÇÞtgÍh–Í9ïàÄjÛñÞå®ÞäÙ$ÇæLX¿§³¿eâÝ-ܵߺç=fÙ çzÞý–Ïû]ð½sN§÷Ýöí÷v3¿tnÜCÌ£Ã÷>¬iºrgCFZ^ókÐöh»ÞП;N˜°/Ðsó»×~UépÁŒ®sú»ïÞÁ{#ëÝùqʆu¯œõ¶¼J‡Ë—ûä>ðûË4º^®éžG·oäÈ5ÿýë‹û4¼p¦é³¾ÏŠ?Nòé|Ê›1Žœs`coË|b¾Ïµfóù?zãzâ‹y6ín©üúåš [y΂¥GÞ8êú2wíËðɵ2lšK_I»wͨë|¾â:m_[•ÝûÏïõÕà‘ó'Ý-k‹£¶o„|zÛ'û÷MeÍ8s³yèoi:Ù~t|Sy3Û)¿Æý»{ãà—ëïx~ó:æóÝ0§‡[‹ »G=ßÝ&¬fÔ•gšÞÌç¼¥Ë~}7Ï;}rìK=«ž…óNMw¿ÜèùY3øþhõa½Ÿ»>fØŽNêã|nùô!üïÃãèyçoäÓ¥CýÔýqCñÆ!Ãv†ŽUË©Ÿ‡[zÉ©íÒ³ªÙôÈž¹lú¹é¸½+õ»_”>¶ çá·xÝ‘_»ºJÙôQÔwó½“ó>’üZ+Çæ¼wè9:\Æa¯.·¾7MŸŒ'üNn'Á÷~§9éKgÛ=në˜ßïÝû.þw½§{ŽíÑ|îmÖL̲ùîý‰ÝlÖÖwðÍœþl¼w°äžÁ‡}¢7.0äLÛ_ŸqG‘pf´;½‹#÷æ9îÞý–žù°ïÔs¹§¿×.dÒ+7ÎsläÈéœNßû—ðaížNû á¿ ¶™Í§§¡ç?Z=ý£ßÓ2§Ë7úÞÝû>'szÛ÷>Ë»ºïÝçdo½éý-þBÇêÏ|î ¹¹¥»GŽ}l̦›ž/êWXï2Ÿ³ËÅú\š}I8rÐôÌzÏwteÇ­²3~9óÆ­®·4=v¦Ç9,Øu»§¯£‹Íòkñ¾u]óé[¶sGŸ fõìyß±~ÕV›ùäv4϶½¼ïô¿[F}g7Þѵ¿%°äökf^÷]zÞ÷²×=ô­bV˜÷]8ïôº [¹3¾o? ‹ xãͶöï~W?òlºrãÊ;òŒúQÕ³÷;÷ãèyg>÷ôÓaÔó¡ófN™SÏwugÄâ†^îêçÒÍ&ý-%»¦úNoœdÙä]Âï.Ý-…7#=«Ì±]^…\ú%83WWÛÜѯÔ7’<›t±ùÓnU{cÙÁuV÷ý{Ï+v,œ™ñ¸aóîtͥߦ,Û÷íU×ïùŽÛºõ¦c÷þ³l`Í°¿%w§3›çô§à{t=J|XË°9ó=³Ýµ‡í™·ôò„óþúŒ}û ýqÚ¯Šûy`È•{¯Ï4Ý;Ùrwú½r6«š¦W¿´ýƒùôv6ý+2g>Ý#W»Óüä-ýßÁ'×èxÑt¹£sfŸž96ém™U–ïè¢áðÈÙÎ]{[æz•5S9rÒãÂŽÕyj;X3!Ÿ®lØ’Eï%Ï»÷·Ð·ä>9Ñ»slKõn¾d÷t½¥Ã+·’¼q«ú[õ|E5z¾š²l«¾w_[§WλØDÛG®²ã<—îÞ8÷»ÿ;x3¸ŸË=0äxKßjÏê伧 y3Ö³º{ÓwwÀƒÝqß;y3–Gßí3ˆ½5§7ýéð¸wÌêíÎtÙÃˬ~08ûw½£´c•Ì™Ú¯zîéÚÝr¤º~„9ý˜\9õÈ…Ý;²èǺsãÝ3lô¼+?N:VCŽmxJ&ls_×ÛéyÕóòåÎÝ9rg2«WM÷½»êy£ãçõî»w÷¹_øM½Ìè#ŸÑ/¯xKoÆ¿Ñ÷®3:¼q£ëì“[úµûä®m×®ÝlœÏo:ftaÃ*kÆŸó`5“Næ çòûâ+:ÞâÃÞs÷~÷pŸzÔ¨ë•{çtô³IoKóõ\ºúÞå¶nÙµ'h:9ràŠ–??§üÚk™Ó1£?¿¾ŠGî¥#›þ*³y›õþ.>9Îéʇջ1gÞ‹†¿û-96›Û¿l^ÿ2ÏoêñžºÓyMÿ7˜Ï›Ù<½¢çÓ3’a›5î̬ðagÃ+szG/[Ù¹Ãû®<Ø¢ësEÛÉŽËZ®žw0ãÐÏæLØšgÃM}Ñ4ÞÞ’Ìêø.-‘;³È|ºíßuN_ªŒ™v¨×9}…szóµ~ÕeË©/ƒ3clØÂŒ[ù™É… ›réœÕ›__÷^¶5ͦ§œú†÷¬F¶»ÍèAÏ£WŽ½éÔsìá·ëÞyôMçÁ2›nóùÖŽÌëÐtã»o÷uFï§9=1ä‚ç]÷ï²woÍ긥ïJ>Z.÷tèø¾çØx[?¨_Õô¢ñ:§+ïýð •MogÔè; sºu¶˜_¶“£óωçý$åØŽ‡ìYžx–ûwpfO—®ÕÒ—>Lì8ðaOÕ÷~^|r¼§_œÅ|zêLoæõË–®;ç]çtèº{çÔwY93馮Ýé%—NÏ4ž8é[e§ªé·ÍåΈõ^¶1öî˜Óoo<ÏFŸû8éù˜³yÔóÛ²w¿ýÑjfÖï&î—ÓžÕÂwŸx†].)£þà^÷û”K4mÔŒzõÉ…Y\ØÔ³XïòÉ9çþ¸®½»iùK§ž¿zw ºÓížÎL›0åÞå–þö¡Þ¸wëqQæLìOÿ4MÿÒýKîéŸ~Oÿ2§ž§Ýû¿ê3S;½¾›Ó§•1CvœåØfg;ç;xáÁ‚#WþžWì¬ßÕC7´|ŽÝ->§·ók=Ù»Sßz­.6zätFÏY¶À›‰9íNϬ÷•ɧ'ŽÜòjô½¯kfE¼qk)§ÞÙß‚¶5ϧo¬açî¼™uåÂnn†Ü:³l`ÈI¿ê´{C:Ù¼»e ·tñ¾»ï}§êúÎûUÑ­Zæõ¾°f8§Ãï¾Ã¾–>5|'ðÞƒÿ³¹úÞw#;nŸ¬÷ý–ž×,Û€7t×õƒúï˜Ñ]×îôƒA¸§#Ëv`y60Þµ¿…ýéÒݘ°Gü§{Ȧ‹®mN's¹ý}Ê»z›÷Ž™½èzØ·ã«œwgÊ‚mÝÔ½cµÅ›Iûw×pïKçÝùq—ÁÇ›dÔÃ|®z>¥½ûMÑöá¼»Ž+ó½ê8µO|qȳiÇêx¹°“‰zß]Ã'·wäÍÜ‘ kþ÷ÒµŠL:öî®éwî•ÓÝ;9r÷~;‡¦ƒ ûOœñ`ã-½æÚ0§?6wtdÑeNÉûwt¸47täÙ^=›îü¸W~•#G¿»îÞ_koK·OÎ9ï)‡YZþ´<0a?>Åë®ÚŽ½ûwñÇq^oþïçßü†ŽIý_OØ‹–Ï@Óe>Ozx3˜Ñ‘S'wFgõy¹©‡ûyz=eÎøwšîß…Ý¿/²³Åséð¹Ç¾ôEáÎ,Ùm}¹CÓÁšYZroœv§×½{æ®xW‹rÞEß×È|GÇj{÷¾¾ºÞ¾£¯UM=«Éó.ÙôMhy¾£koºðf0§×ú&séؽÇ]Y3;ìZE[“cëÓ+§|XéLßþ¸ÜÉæZŽŽÕ]ìÝÉ‚UÖ{zšMçoxâ|ï^^ÑuÛµKŽ ¹ÃƒtKöàˆ;wϲÙ#cÆ™°ÚÛ’}räÎtpfð{¨Úvð²wG›ðãàswÎ ftaÎín>9ö§k§ª0Þ/:îéâcw‹2ÞÙ¡~ÅnUÏ¥Ãïî½lìOoqg®ùåŒ~#lØЛ~c\wc½cïÎ<ôü&v²é¬.{w¿§OÚÝ-ÊxÇ»»c:«ï$ÎÌwïÁ+GæŒu³1¿æõ éìc³y}óú@né˜Õ«ž×Œ:ôùµÃŽÝ»ûäZÞ¸Ÿyéñ–n-ðÄE,5ýäÈûØØãrwïÊ‘S6lÉ®ÙîýÄY°CÎèȧ›¶ŸyŽí4èyìq ü8›Ù/ÎÀ{÷¯ÎæÚÝBFlÐtxâ¼›írtIö»ïÝGrKw&lfÉÌç½é#ñ¼ë¬^™°]9øåjË­Ïê5Óü†×=õ¦Oný–~;I¹»oÆß}佫¶ßÉî]u];ÓÑ·zÿÈÝ{w¿ªxä”#gwsß¿§¾–'ɦ‡ÞôÑô—çýõµÛïNÖûÛ«Üԡ鯩“Mfóà“SÞÌ{˜ÓËüNG†í“ ¹úâÄïŽùüëKvðßÔ÷5I¯z>õ=35Ã,úôtôÇ1·¦œwÛÁÏBÏË }Fæó4£‹O.0Þ›Îtñ¾Ï)Öîéºw_˜_à-96°äÒÎ]Yr‹ÒÃwðKÒǶèLØÅä3M_ʺ®ýª©¿…3y˜Ù×JwËÊÚŠçÒáw_­9t0b3¶²f$»¶f¬ñ»ÓóftͲm0›¾_œpf6UË7ëLîÝéÛ!—îœ÷a½‹>tª -GÎ4|‡œ™>³mžKï{g üqvS'oFsld¾ï‰Þ2k{1Ãæ>9ìÙ=›üqâ{×\ºïÝ"öH‡Y=3a_“¦cÿŽÜ«u¨¿%ï»w³Á÷îé¡C=xålW¿;îé²oÿ’.6úäÈùæ-f÷Á½Ñòéæ†þó¦¦}ïNm笎Ù|ÆÙ°â“›áÞ}ƺהû>^‹õ>7ŸºV=Ëæz®LX缃=ÃÝ;ûUÙÍæ7uìÞ—èSÎ föEóÂ)ï9uÕ›ý;±1—¾,¹ôÕxãbÇ*3œÕWÉ‘[Õ.¶uó¾£;=t­nx›Ìë¹ôä£ï½ä×´sÕ5¾™Ë7·1§k_‹óݵ-ô¥KzáÈíx·*83~OϽ-ý¤ë{¡3}—³zœÑÁS_öíM–ž¸0“{&}0@:néÒß‚™]öïìN?=?»xß•)GM—^U½¥C¿CFýÄõü\Øì}×Ý{êN—Îtô²µ»[<Ãfôó³èy¿HÝéâ;Osz+ËfõKaÁú>2g¢ŽÇ}{ìY½ÁoäÓo\ÓÁ‡ídÊ®{‹ÏæàÌŒ…!76lÕõ‰0ä´gõVîéÏ¢Û÷nâs:9r>›—»:»Ó;X°ò;äØžDË6úÞÛ=«èNw¯·õrä^ØÇVoë/ôÀ{Ïêk¸­£íUæsݽ¿¿¹–—o献¹ôwÞÓßí†Îý-Â… ytëmI\ØoÓÃ|þ¯!ìSžOCϧ:ôÜgõÙ™éxS&,û[2cfV=r–Qç-y¶ÊœiX°óÜÁ‹×ÙôÄxG ºÒ±sïi›ÜÕœõî3zʦ«¾C×—«Æ/‹¦/ÙÎ}Ù˜q>§§ ›v­†Ýû6çý;´œý-Ò³º¾æ¾wñÊU-_3Ü:gõMúä6ã|¾!^÷ ß·“7#ýéÜ»o‚ë¾mœwíO¼èx³ïÛŒî«}¹3}7Îê»ð¾‡{z̦ïÛl¾kŒ™¨éÒß2@‡KõÈéœöíôŹ¾ûÎ]»Óèó™ý0Î缧Û\^tý¸rÞ;æór_?I.Mwðèe;Žy¶áЙ°'˜ÑOEÛOM×å+LØÈ©Ùôs˧Ãó~vÞ½¿Ðî¼ËtK¿ˆ½-•wÁ;ºúä8Ÿ_º÷½lìn¹rÖûõÕõwgŽÍærͲÑ÷~sÝòÈÇ:¯ó}\³é‰7.l÷1ûZnÙ×rséwØÃû-{÷ò~÷{çÃ’7Ã;úƒäÑýŽ~olìny¼7¯»ìÜ“žÇN6ø✠«9¶'Ù»çÞô¢ãϵ{íùUoêΙ¡–¿úL^úÙÞœ§óù»ýv&ìyïÁ'gZN–\bÈ9Ösé5ÃöÑ¡ë‘3ã¯QÇ4«ÿÝu½ÌäSSuNç}šwtüæ-½dÒ§£_NzV¡çÜ»ÏüAÓEÏK&]Yïs˜ËçxGÙô.ÞŒv«BËm^÷nÕúãecžm)Íë²{·oèfS6,îéaßÊY]yï1Ÿ¾B>l›·*sz`Çá·pÞ}^÷êìlÙ –£cuK{véOßÚqß;˜°¸¯—»z'ÞÖeÿÎüZ?úäcÛ£¦K6}wœwìÛµ¿Åók{•ñ–<ïƒe×tÿ~`.?³éžOogج/ýHôüGß•õ~t”úØþð2g†½é6«OÂœ~ªZ~róé§Ãè‘“.6dÙj&ýÔ=r¡oõ¢å{¯3ºyå.Ü+§\XæÙ$£l3³_%î{™ÕG‰#G–ܵkùuäDZ»%÷¬Z½qàÌ\éy‡®Ç<úØ;\n£çÝûÓ-»Æ—[¹¥û\Nÿû]×-=ÞÔïtVçýA:ÙÜï~/7uïa{ öáɵ\5ýQrlÏÂA¿ê“hùSÖsåÂ>+wæõGß…1Î{Ù·¿Èœþêszèmy#;Žþ¦š.wtÕõ|Kÿ”9ÝX°]û÷/}®åEÏÁœùâÍ”¹|jÚöîS²sŸf– Z> O9缋?.çÓÑÙRföyÙ¹{ŽmŽY6paç˜_ÓN¶Â¯œ{Þ…õn»vdÔÙÉFøÞ;Ù°?Z½hÎ>6õÅAÓEË™Iæ;³éê‘Kþ80åÖV‚÷} ß’K÷nUøäTÏ×Èœq_ÜzÖ‘{zõÈ!›»[È““}»³aÅÿ.ž÷ÈyßjÏêèræ úÒ·q?—îtðf8§K_ºófö~þ}O²lð½çlºt¶Èœ¾7ðy½fØlV·Ù<ÏêäÈa>?´½û¡ûß•7s ^9ÑräØŽR›±Þدzä7tɯÑ×t±ážÎlº³aOmï^XïCëfæÌ|wÏ°éŒÎ,üíÔséZM·tß½Ÿ‹ß½êúeyðÅ9ï½fÚ®Äë.7u²ã*?®;Ǧ].¢ç#ém!ï½ù·Ï¡³·ÅïêÞÅÎÌxÜÑËfì8ðfè‰3Ï6¦ž;÷½ëµýqΑƒ/îL¹û»ØÇ–rl÷Î…½Ç|~»úcÒò÷È=º?îñ)räªçý9dÙ˜O=gϪö±•ÙÜ¿¯2¯ûœî7uæÒqG';î­Å«.üÛoè~SÿHóºêøòl_ô»û]½áÆɬŽ|ºÝÖ‘gû;+ú”é8gt»¥O‹®cï>cþwïcsÏ»{ã\Û;slìb›åî¼æÒ{séžÞó~¶Äz×þ–ÑöªëÍ~½ÎçúÀ‘[@×êÒbȯ¹ÏÝ{Ó«¦k‹ð`™as-÷;ú²óݵ“ý-Î{÷Þô5ϳ1ö^2l«k®éعûW³éë-¯;öíë››ÜÇ®ÕÍÄãm]zÙ¶7mFßß{e¶YïÑ·#;xß¹‹ç½-ýšU‡_n×|ïýKÌxãêîÝvî{Â+·s˧ï᦮ÞwÜÕý¶ÆÌ åÑɘaǪùâ´oÕú[È™Q†\ò¿ƒ;ý;:\Ì÷æû ³lǾ÷¡¾÷Ƕrégìo9 ïŒ7uçÍÄ{:5ÞöígÅó.u²Þ/%£~i³z{÷~quÁ;3érC÷õQº§_ñ¦~.—k÷»_ËM½è¹reà{ÇÞ=1aÝWçöÛЙ~Su|œ5Ý|reÂÞzoKöÈÁû>QÞŒé783Áwç=«àÃ>KÎfôÇúå]X3å÷S½±sçþ˜zÓc†ÍýqÏŸ1ŸÜ‹³ÞÙþÚüÛ«ÝÑe÷æõ·ê‘cFôü•ùµ×V–ÍsééžþÁ<Ù°ÖÉÆû§õ·€ÿ^|pÔuaÂ~5ͪõÿpOgw:vðøïo(ìSæƒkt½>èùŒÏéªëØã¿E5}v¦ÕÉrsâ‘“=yä4›Þ››Þ¸°sŸ7¿{wf!íàŬøÝ—–¸s_LwôÀ‰CZÞò¾Ko:göÕÔµºJ]_Õ½ûÚŠíÝUÏWýŽ¾ -ü*;Ù<»f7ôFïÑ™^4}ÓçóuÑ7سê,9É¥ÞÌ÷ïÞË–÷îÒ—.Þ÷äÚv¶yO÷|ß²é’a³9}—^¹Ý¨ã»}fÓ½3½/û÷=ɱíŠçÝôÝ=paEÛ“×]guìÞ[LXÎê®ãÇ’Oou¬K«úUÂw>ìiòÈ¥º°ÞÛÜt± wFýq—|î‘‹™6ÎëW—Ôó♳ú•fÙB7Ûµô©Êþ½£[ùte½KwËu¸«k.½ö±Ý ë·tøÞ'1£nwôº{÷›úmæÇqNŸp&×ÙÜÙq²{¿óÝûgsó½“ñþБ_‹¹tß»×[:çóÇF§ÑÝb{ø2¯¿ŸÜó³ÎèÆŠ}}æ|þ,ûö×à‹3öŒeÓ_ÓœNv¼îÒËV4¼ñÉA×?œ9ó83]žwô¥{ží3äØô–þ)3zÚÅÿM£lSÍŽ/ìܧâ|œÎè³™=î ú[Ô#×ü}»ûÜg­ƒm¾äتÆÏ'.¬Ïè=ϥϷoèíN¶ÔÇ–vîÚáxïæ+^÷œc[ÒÝ{d½/cf%ÍìËàÆ­¤',9ŸÕW;øÄ›YÓ[º÷§¯+ëº._t¬òž¾iy6ídÛò¿½c^¹fߤOn‹^wõÈá+™txÜCº÷·0×&¼÷¾ÞÓu÷N¯»Íè}h¹sgüŽïéô¼ïÙ=7êœÙôÊa÷»VΛÑlºÌèõwæ¼r÷NöŒÎèÇrOF¼ï̧Ë|Ù3C™ÕçzMgF]5|ÈßdÎØŒÎN¶S÷ŵïìN‡W®™Ï/实òéðº“1c3ú…òãà‘•<Øê‹“y}”çõQèKWmG[§7îœXëkAúíMdÈÝÜ’5£ ¹øÔ#'¼÷;Ù»ß!£÷ïäÑ¥7Ýýï’K—¿Ü£xä0Ÿ£GýÁrl–g{|rM'sF3ḛ́ɼžsêÏÊyN¬™×зê{wÿbFGž½é‰÷.ì»ÝÕ?Þ’çZ.wô¢åõïOñÈ©?®0a¿Ü'÷ -§çs{Ôóï<¯ÿ þ›šúmz>]¾ÓüÝÌé3ß™73l¾{ŸM¾¸Ù4§ÏÌÍovî³iﮯöªÎIv-²ä”53ßûs×jîW]Ì¿ÑßBœèºt¸Àÿ® ¹e}‚­sûŠt§;w¦ÞÔWÙÙ²ºì¹ô’Io4{Erk¸SÏS 9ï˜Ë×’7Îu³ù¦ýÞŒ 9ïdÛ²ù|+t²¡[µfÒ [¾ð¾Ë¬ŽÙ\t}[X3®o÷µ¿Å™3èQ™téK—^6×ôÄyÇï}ãÃîk¦M½ï{¼¡ïïGÏû÷ƒý:«CÏëþ]nêÚ›ÎlúQÜ¿“Wïꇇ’IÏœX°ä2{†¶ØË6„Æs×®ýévS?õlºÎéCú݇ž÷Ó íç΄µY=dØÒMuŸÓ/Å÷~é»÷˨é`δûU‘I]wô½ -<ØQǼ~ô}lþ÷qín1mgÏ*™ï·Î3Øqã±{Ý9¯O”#gû÷ò½cËÝ÷­Þ—ï=õ,ØØßbZ~笲ޕ72é…ñî}-’K7.,æsÎåOÞdž›ú‹t¨GžœìÞ%Ÿ^ÙqmÖLÕð—ïÀ‘“,›sã„ ‹Þ–÷ çî‘óŽÕö±¹OîÓ:\¾d^ÿ\y˜×¿|VY6úß¿ÿV’>õ{ªhúoÞѧåŽ>c^¹¼o7Ïûtò¹Ë鳦é’O×L:½qÎyù5ÿ;ô¦÷òM}žùtíb뉦/–]¼2alç¾}ï‘[lé¹ó`[½é?ZŽUfÙ2çÝ|pôdžÜJØ»CÛÝë¾9ïðÄÉþz¾¶±²lëìm1~ÞFšÓ7#·µ ÖŒi;öí¼©[Žm9ut¸x·*»Ó·ûu^‡Žoû|ŽÙ|‡=l®ë}Í¥ãé=ì¸ÈS-/Ý-˜Ó÷4Ãæz:\ú=H¬èù@xrò-7táºÆç«ÇΕC†9}ÎyoÏêÇiùü¤z↧ßm&ìPXr)ǘ3Ȩwxåš›9õ½Ñî3×tô¥Ÿ#—.½é™ ËNÜ…{ãày¿¼ -ž÷Ò墜™Ò±zåóù¨r`ÑãÂg¬™.ß;æthz'wF83Ê„Å ½ÞÏÇiN÷n6÷ÄMŒ+súÄõ¾¸ ÷ï÷É—rʶEß;wðUÓá•#–½éÖ©*ùtÞÑŸã-]üq] ¹¦_¹ôzW«Úþ£åoâ‹{ÃœþÚÎ¥»÷Ý÷îå÷‡ïã?Ä#×â¼⦮™¶?ûÝõ¦òéß’iû›IºïÛË|^ré!ÏF&lêp¡×}Úæôiïkám³ú,3lyÿ®3zð¼÷æÌó^r=zäzÂ’³ß :¯×ÜÒ{½ªå‹=ñºƒ?³¤óùÏï%ñ½wu¶,ùÞ} ÷s²Þ3CN˜°Êy_YM{÷÷ÇáoíWÅÞ½éÒN·^6ÜÓ—{V¥³EúÙ˜MßÚpÜ–è:oé[ô»o{fÛnê;?Nîéí>¶ÔņY½ï<9äÓwe÷ÎÛù–ïß³Ûs\عÃç 9èøž°a™Gßw-ß?ðß¾oŽÜ ¹Ã4«Ûν-GâȺWîÐïè #–ì¸#¿©×N6yȲqVמU÷¿÷~"½-CáÆ 9¼qg~SWÎ;ætÌèȳqÿ~v!ÙtåÌxoËå9¼qô½kýR5\»V1«ÿè:Øq™Ûz×£”O9gæé×IÓÇâyÇîé–Y¿•ÝüqºoŸ¬ô¦Ë·ÜÒïn%ˆ{úÄ{ÓÑ·Ê[zbÂ*æAók÷™Æ{Gú£j:vïÏö·úâ8§ûî=÷¶¼€ [fs¿¥“ ûš|ïEçõþöâÝéošg{}ã¬ß»zßË=ýã-õ·¼·³éÚáòïû}q_æ‘+{÷Mÿú VYïß Q/:ÞÌ迧Ú{wóÇ͘_®ä×fâ¼9ïÓ1Ç–æô9éMŸÁνÅ{Ǭ>os:òk]9˯1ÓVgóyÓqîÞ¹gïq6W¯;X°Ü½ ç=t¨–\œÕ—Âݹq+Â{_{wñÇ!Ãôܲkk+ΚÁ¼ŽLzãw_·Œúz̧·séºnÜïbó¾ÕšI÷{ºïÞ·ÒÞvïÔòä‹ÛÞŠ ¹-gÂòŽÞßqvî˜ÉCÇênïHoºíÝc‡Ën½§ïŠ7n×5½uO/¿;x°ûð¾Äïîuêxʦ ,¿†ÎéOÇŒ~à»öCÑrxáÝwt,9ß½Ÿ”lÛIȧåž~,»÷²g®Í4]oéü[ù°gÑóÎùü4jº½sÑ÷̃?®Îäèf»dÏêå…Ìç–OoñfÀãï‘yÞ݇kèúu˜Ó}>IFÝ8Gۮ]3ê˜ÕU×õ~“ré̲M~þžH7[ˇºqb'wÔòÚǦ¾÷Äw‡Ž ãýáî!îÞÁ³<4ýá1fÓs/nè•#~ÜóÏßž_ã÷©îÛ‘MÒ=;3lÏÞ™þbÝl¦ç/6Ÿwu¦¿…{ú+ýq¯Ü»¿·83ìkù¯»dÚZ7õOñÄ}xžÍòkºw/~÷œeûvÎûß%ÅöÛôü·Ìèõ;íwôééKwõÐÉ–òé‰õ>Óå{O]l:§—›ñãê\îwõÒ›>§Þ8Û¿Ûï…æwÉ­ýüÿYˆ=« Ùûn~÷…ŸÏ7³ þ8÷ÊéŒûÓ}F_÷}Ågv½¥¯†y½ªÒÇÖÁ†å¬.>w÷Çi×jGgºô±­‹žÃçóyΦÿü½¥¬wɳmyž­»c¬÷òãÜóž\Ÿý-ì[íâÇ!£¾ ­—~Uhx`Îì ÷ÝyrÞÛâù5¾ëyóÚ{÷}j;½rÞÇ6È츛Ïl6þ¸”g .žIo¾'ä¼K>ý$²Þ‘I·ùüxè¼÷aº¥+?nvÜ°ÞЋ†OÉy·tëXew‹çÓÏGN2ér[Çþý;xÙ³_$ Ïwõ««+zÞ¯®.Û÷taÇùMý:ìßýž®ü8Ñsö¦ÛÎýzoéÆywÆû­1äÆ5‡ŽÞôr;¯ÿ6{Ý¿êy¿s¿;¿â{ç]<ï|ê“Ýé÷é–o܃w¬†]¼îOže{~ôyüÉtŸcVÿÞ»îßÿÃùÏ¿O¥ûïäwŸæ¬Îýû^cnçîÚ=ÝqG‡¦ÏÚ.>æ׺8ﱋM|”ú³{ÞŸ…óžX3ìds>,oéÁïîšþòê|X÷¼¿µr¸§¿&ì;smäÈ}(sæÓtÝçuè:ïè¡ÃåËçô?Î<ðßIÏÕûþôßÔ¯f×þ»èúïß>£ÿž®¹©ÎÌT™É=ÏVu½Ý±JÎLîbkxË°AÛ¡åÛ໣‹-²`ƒç}g×ýq¡_µO.¬ÞÒѱºg<¹ºwßµ™|/paÑÉÆó:æó}¹«È-®çÊ„¥ï½ùûÈgõ¨á‡mŸ»ÜÐÝó®º~{Ó©íC÷¼Ÿxw øqÚÅw茶w—}{`ȹO.ûãÎSF½æÓÑÛ‚Lz;›ÞÌæç`͘ç½ê:2mWžg“N¶Qð½ëßשÇåªuK×ù¼ÑörÞùž»UÇ×cÙ½W¿û˜ûwñÊÁ/×|'ðÉ}&Ͻª·`ÍÜ~G~ܤ•e»+½éæ{H;øà‘{híß=Ïö(9u¹©?ù¼þô”Íé¡gy¶úÀšÙf}›3:fwè{èbÛé×z¸¯;ß½aÌhúînœÕ• »»¿|rªéEË9ŸCÛe÷®Oýq–c+_™Ïãoõ»GÜöïGµ¿¥¼ãcîÞ;y3'²w¿ûð„ŒØÚ­z"9¶zSsúIòºŸ¥ÞfÙ<ǦýéÞßu½°ÝÙ›î;wøÞ/ƒ®'öŒp`/Â=™6øÞµožwÓp›×ÃÞÝné#Ù¿_+–|ØȆ 9õñMèV½¡ïì8éZÕy}"^w¹«+3.ô±AÏÑç"lØ;™Ñî¥g~÷Ôßòú[¢¦ÿ‰7óDŸœéxG®êûK»»Ýl˜×Ó¬îùtèø‹³f^êŒþò¦~wË¥¿§ýû»ìÞ™Q¯÷ó·wúÝßÖ5œ,9ã½û¼î·t×ë®õä‹û?ʦ—™¼ÌçÐtÙ¹‡]¼ûãè Y¶ÑôiÑóYûí»öãÂÎ¥þ–èóîäØ\ÏcF}ÎîæóAÓvœè:smعË-}1ÞÒ cÆrlôË''¹¥™ïèm‘9})ïÜ©é˜Ë—É’‹3º3gB>} ³zìbÓ›:¼qꑃ¾CÓשéëñŽÎ]|wÏêFêmq¾ûVä»ëM]ûÓ·=Ãæýé‘3ãÌ÷~kÿ¾#³º÷¸˜¶÷+g†Œwh¹2Þ›û®zÞ嶾_yrƒ}gÈ tNÇî]}ïÕuíkIZÎŽU÷¿»žK/¼ïGÐõ#ò`oFýîša“—ã¡w·„~UéY==Õ{úiʦ+CÎæsëak:Ùœ!'¹tåÎ Ç&ùô ÜÓ/㜾ûÅE×î]zV5ÏÆ»ú93W˜Ë¥kõj³èþ»£ËŘ°èM‡¦EÓÇègöæVøqèm‰«ìd3¿93?š~gÚ²éõî>9ÞÔÅ÷®»öÀœ‘[ú½ÜÓ¸{¯^¸‡Ç6Oî)ÜÖsgú3y°¾w÷™ýåéÅ;VÑß"Ì™:—ë}=²äà‹«}l¯iÿ®}lï2§wõ«z6]9ïeçn^÷÷O÷¾ƒ9ƒ Û+ï]æsý?øß)îÿ‹zþË´ü·ÏçmœíÝ9›O‰GN÷î3Å+73ã>¹˜K—Ù¼ÅxŸ1Îû»ØÊ-½hù<ïè~OoïßC_ºåÓÁ…UMW†™3²s×Û¢êzšÓÙµº¸\ÿV¿ûòrdÈ-/ñž¾ÂþôÚͶ¢_éY-Î>6cÄ®­úlnlØò›}l«¦å«âu_c'[·ïþwt¸(ç¼ÜÕeNïôÈm]Ͼ÷ܵfôíŽ<[¿™3¦å;?ó÷Ž0äÔû^y°}ê¹v­‚ »»çó=ÎçÖå2@^}P~l^çœÞìÞÙ™>0æLý}¨Ü÷’O?¤¦£¿¥êøA}âs?RÖ̱xä”#wä^wͦs÷ž4]ïé'‡™ýôÛ;VóÞ]º[ ëàÃ&6ì9òkçÁ#w!]«ž_#VrlYÓ¯B¿*5—/,MG†Íwï˜ÓëzÞ|W–$Ÿ;Ôë¼î¬w¿«Ç.¶Õ ëÊÓþ–5ïbC›ö¶¬ýhöšqfŠ~Ë=œw›ÍÉw¯÷ô-v­nŸöížMß”\ºÏìΛqmßQŸÜŽÜÔwj·ê6vîœ×ûžQoþ.¾cÙô´{zžX3»¢é’e£žãžÎ<Û€šŽ,[ó-7uîÝá‘ðžÎLúxãì{p¿‡‡‰—û[ØÝr'GÑ+‡[ú0t· ™aÖýr¦ç§èPwæÌpxƽ{Í£ kßSæÒÏ$¿vö­lزw¿ð½;<ïê}?ý-5»v!wtô²!§Î9ýê*ÌèW:›3£ž{V¯Å#wØ°¢å¶‹gŽ­ù–yÝy37ÐõܵŠ Û¸ö¯eŸÜDô<äÓ%wgþw÷»ÿüo÷žeƒï]y3wäÇ=Ô,›ÎæȲ=T}Ìwô´z¿»0bK7›0aÃîl¸¥?•»z‹õ|îâ‘{…Æë¬îšÎý½ÑtÑòày÷½{ÑöŸ×Ýÿžslìc œwaÈe=ÿ=׶ÿ Ûû/Óñ©0§ÛËûv¹£;7®úåô¦>•{[Ì+WxïÒ±ê»÷œc«ZîŒv¦Ïêœ.œ÷9Ññ^ñ¾ÃfôtGg_zy~;Ç]«µ»å鋪åÝÝ-+äÃ&œìà•=³ªéÊyß;{Ùp[_>¹õµ8£çù|Cï˜Ó+CþwíLßèx›ÒÙ²)¾wóÊm{F}Ë4]µ\»UwÀ“k2l²ïï¨_Îgut¸0æyôtGß“WûU÷´\¸3äÍX†MæõÁžpã’eÓ½;rêûœÕá{o±ã’¦7³z`Î Ó¦÷tñÈuÏêžO?>9ö{zÑõaíM7?¼w§ã–Þ‘e#cfè3¹u³6,sl§uçN¯\êW=KžwÓî3îß½?=Ìå¾÷‹ÐÛ¢|XfØ.Å'º^<ï¥;½ÍšAÛè3{Gºù䊞۞wðãÀ’kñãÆÞÇF6¬ÝÑÇ“IÊ¥7¿ïxGg–-ÏèíV•ŒzèmñÝ;¸ƒ×½òfÞÃ\Þîqi:Ôcú=ru÷^Rê‘3óõ¿<Ÿ«ŽÃg»wøÞc†í7ýîåžø°Ó)—>íÞ¸´Ÿž…On–Y¶òæfc†m6Ïç³m\êN3ú|ܽ댾 Y¶™°uÿ¾ºÙ˜M_¨Ü8ŸÏ¥»¥ƒ5Ã\ºÍèzKoyÝ——™a[‘½;ïè+Ñïîz¾¯#®·th9wð¶w_°nÕ¥…À’[2Fì¢åØ–›ÛzÓ›®LXüLXìÜÁ›Y-::V¡å¸«‡ît÷¼;ë}Õõ8ôÌ÷î~K?°l:oèîyo÷µH.]rlÔðü[úÓ›Y3úñÐïéâwç-ýTürÃØÝÂ~ÕðºNm?W&ìEÈ¥ûMýB:Óm.O½éœÍ/¬‡-ðf”9Óô«^J~MÙ°Q˯ ãwStýf„<º0bonäƒGîf|ã^wê|í\UO\Øà ¶è¹v²¡3=«ÊyY¶ûÚå¢ùô”a ]lây¯¶{ö¯…Ç9ýGÞ‚7®fÙb/ÛcêM"_æ)pf4Ëö"º^:V™C;wíqáMýµæЛùüÝüïeÿžúU½7ýCîè{wäÖJ^ÝÞ§êzô»CÇq[o¦êøWõÀËßßßßÿ“¢þë÷¯ú~éý—ïÜÁƒÅŒ>­þ8épáÿ–ØqðÇ©–OGfwïyNŸsï;~û¬^ùq9Çæ~wíbslÑp™ÕÉ…]ÐÝ;Þb½­/:ã¾w2Þé¬dÕ¹_^¢¦/ã÷Šìޥ˫+鮾Z4þ8ïfc~mMgsÓxè7òéë~Wk].dÁ -v]ûÒéwïÚÁdzlÍ~Û3éìbÛªÎïŽîßw˜cËóyŸß~K×w5ÃÖÁ뇻ºðäöÌ/¬wäÒ÷5ÃÆþ–êãþO¾÷ÜÛÒñ±ƒ§?î€û÷ê;ä—^9eÍ€7#¬™Àœ9rÖLìcC3ûIà̸7Îïé§úrŽMº[è‹küï¼¥û7paá‘ÃMݘs—\=îò½Ð>¶ËÀyÏz®»÷ë†MÌ™ÜÃfÜê:rm×96ö²53Ž·tícSÜøV|î>£ßbÏ~›öð`¼—Þ–Ið½c6¿»ÞŒõ¤]G>ÝôüñÞwúãÌ/÷bÚîÙôçÀˆÍ9ÞÕ©åoœÓßòœnéÐt×õ&»ö&¹ôð:ætô«–ß_ع”ŽÕ/ͦ;=rê•óÒôÿ¹Ãz3›ÿ*:þ«ÌêÔtåÌPÛë¿eŽ4}jz*øݧÁ{Ÿ™ -ýªÌ±å^6éMŸ™M9t«Úï’aƒ¾‡›º÷²ùoïléÙ¼ýî`˘Žwõ­.&ÜBô¹/‰¦£Mïé˲{÷n¶¥¨áðÆ1£î÷t÷É-Ç.—5dÙ<›¾†ßÚŸÎ<ÛºïÞ™OßM_ãνøáŒ#·žfõ¢ë ãlbÎ`ï9îÞÁœÑù¼øÞU×÷B‡Ëþ®ÜÐw½»E=rÚ³Šý{ÔqøÝ}ÿ>HóºæÙÕïÞ¡çaNGvÍøîÎœ9ö{z™É•÷~BžÜqö½]ã‡É÷®{ø܈îtv¦'slEÛÏØÝÒb½ó¦M{&fØ4—~i™¶«Ë:·_]úsœ¿ËQíPÖgtå½›?î¹ëÖÎZŽœzùŽµ“m,].¶gO9¶òoäÃÞz·jàÆÝŠ¶GŸÜgö»â‹›dÞŒpaÿa'«K‹äÓ»¸°`Á†›zîMGo‹íàOÕmWŽÜ02äÜ÷î]Ùtïl‘ Û¹gÓÏuÿ:Ô//ãÌ~Y{V¯xO7—Lú¥ñÞGòo†+–sºyßÉxEoõ¼Å›‡<ž3än!w+3zÃ;gf¢Üv§OÂÝçuÑuëbk&2aõ=p÷^¼qAÏå¶þu½É±qÏn9rã%Çö(Þ÷‚}Jwtìà=£Y3½l¯/ܵWßû›ÍëÞá¢s:òlïÆ™)sûÇ›yãìžþöñ÷ï·ôÀ“Îô/ŸÕÝóžýîBû'Ë{Ñò_ußÎYÝì­ðãÈ{ÏlX{àÇù|ŽÛºòÞ½3½[Ï…ËLfôÜã’Y3„…7®ÅCFÝûØÚzMO}î¢íعëî=zãÄûþa}«Éû®«È§s¯3z¸©ÇÙÜoéú»Šù?{Zÿõ×ïê‰kôü×/îÞýžþ«ìØM‰ÿ½£/ý7¼qÓÓAÓ›ûù”zã´3½£g.Ȳñ¦žgtóËy}¶îà7'>9¼žj;séÞ±º\À›aozõÄõ–Ü¢ë:¹qâwÏÞ8ìÞ±s_ƒf9eÚ~¾+ìq‘ ÛòJ˜Ñ=ÃæmÚ³êÙ5ïf+}lrWWÜ:³éî‘+š½¦}lÈ£û ÝÙ2>›çÝ;æòÍ–ï}»äØB‡KâÃn3»¶-]l;ßÚ³ºƒÙ\ft2ߥ«Å¹qmìžäÓÁœÁœ¾¿çœ™=e΀ ßÿ>ØOlؼïLÇÌÞüû¡ö·È¿Àœ9¬Ìê¥+=«Ç-ÞÌ‘ÜÔON<ËVçôc¹§Ë-ýDsé»wô§›¾ŸÏ\Óì ?-·t×odØÌ+wqæ<Ø ¿«£C.â šî ÷ðWõŽ<Ûè½-’O×^¶kaÈœ7Â-]™3#Ù½£k5yßÁs&ìMéYÕlú-vðÊœÑ.uraý†~‹¾ô[ÜÒ1·;GŽ}lÖ·Zgõ»’a»3-`ží÷ôªëÆŸ‰ž÷Çì{—ÛSʦÓ×ü›rãDÓŸ:X°~Oܸ—¯;gôWß¹#Ëö^=ï¯ooëlØ÷Ò— ý-ï­\:˜°Å×ÜÑÁzÿú°»ú—çؾWÿ.l&¼ËœþÏÒóæfþW‡žçùÜ4¬wá¼OCÛ§Å/7m3û´ïÜg°{WÆLù=+™tçÇU=Ç|.œ÷YÉ¥·t}®óž>7ÜœeÔ'ǾծlzOüî!·ÈN6õÅ-p÷î>9¿£ÇY]ól˺s_I«Ê‡må×À›ñ¿›¶ñ¼‡[úºÏí!Çf³z3§Ç Û†1a×¹w_߬9äÙ”ñ¾¡s9¿¾wçî½ÑíâßdgKõ»'.,²ê[QÏ‹ç=1ßãîÝçsÜÒÿ¨ë{ɧÝé–a+owßïê{î‘ûvÌéìÞ½þ8pf¨ëÒÝ‚üÚÁQ¸«7½érKç¾ü¸ãÚŸŽ½û‘øßÙÛu½ÌêÚ«ÊYÝô|˜}r¶?= =.œÑOÏÄ+çÝéÞÝrýï–_ ÌÑõÒ©Ê;zíd;§÷Ýuz®ŒwxÞEÛ[=«ìU­YõM¿c¦c»Þ{»¿¥ö¬bNwŸûMؽ×|ú-yïÐó1ô|Rù3ðÉ‘ñn¹[0ä˜eëȧ GN{Ôc&½é‰7s/lØÎ[£áÂœyò^¶Ä„uÏ»f×À„­{wö·tt¬¾€W3éo/:£¿1ËúUÃî÷óܳêLØÉ£gÞû§ÌèžMÿ¨ZÎ|:2é_±3]òé~PÿçNè¿~´ü¯ß•oó~ÿúíž÷¤çñþ»#¿öÛõ|zJïé1—§{z™Ñ§yOŸMó9në˜Ó‹O.w²ÍÏF.ì¼ÜÓ;²lΈ…/nž™ôxï˜ÍUÏÑ«ºúØ–Jž~9v¦ 7®ÑîÅ%ŸÑyW_‘9Ýöíd¼/‡½ûªÌìȲ­¬ÆÇ9]z[ÖÖÔ÷ÞÌíî‘Ã]=v¦¯UgF}ƒœ™õaÛøs>}Ëwï`Ílb׎9ìÜ•7³~U÷ÆõsÇj‹ñ¿ÜnkNïÓïÞçþÝY3»‘õÎ{ú>³é{z?Vnéžk‹¬™Á ßÔê|>ð½»òݹs‡¦ÆÞ–CyG®ëÇDzƒoæó“úïºw'GY¶]‡ßlÊ{?ÁLgõaëÐõеz~¸3˜Ïƒ7®t·œÉîý‚ ¹sõ½cé/òÞ“ç]û[Z;wû=òÌè¡g¹ôò½²lמ]ëô½Cßo[¾wç»›¾OÆqF‡ç=ûÝÑÕb¼™‰ÍçÝ»ßÉ®z^öðèWM»wÙ¹;ï];\´;ý©£?Ì8˦?JÏêSʦËÎýÙ|qÏôÇ=‡½dÙÐßòò=ïÞ—Ý;ùqo<Ûæt¹©Ç½{ÔvÎé%£Ö»gÔÕ÷^½qÂœù'K:õü×_ßqïþ»ÞÐñè‹sŸœ³fl÷ÞpfŒý^t\ftè9|rœÑ§â=}š¾wóÃÍèÜ.Ù5Ìç3’QozUgÝ'7nëóÚ³ÚëÐòyzà=Ó¶PºÙèy·}±·(6íbK¾÷ñÈÁoœÜÑKÝéKâ{_!çÙµeÕóUúݱƒ_m×.6ÞÕ×"6v²‰÷=pÞG–ܦè:|qÌ°ùœ¾!z¾™¸°Ê›a>]vï|?ÿÆ,Û¸3šcSM÷þôÐÛ‚,ýq}êzãwï3—-ßõžUpa%ÇF=ßK¼÷}aÇ%=߇¦“9ƒŒºô·Fß;ú[Ž³þ¨“ {˜2êžS—ÛÑ sé𽟀×b½{תw³ ƒ¦ŽÜÙPnégÔ÷³Ó¤ã§çrSïf¼oœÎêvO/ýé¼­{ϪÎèù®œ™ÐÅ&Œ÷0³<φú(zÝGôƵy3×7Ît§÷}Œý{äÂÞ -ë=Îê2ÞÇ“ 5ýV»V-¿6™D¯sºeÚî'ܽW†œiûîé®ë±—íÑK½ïe.GîÁöí²¶Y½xÞÝ÷λô¦ë3oÜókêoA†íEúU_TÓßü·°Þß2çúî·teÇ.ìç{KËCNô<ÜÒÿÀy×Ý»êù?cûþ×/›ÍÍ÷×/ÜÓmV—;ºfÙ~O%öLÑôºƒÿ=­sºèùÌT`ÈÁ#:Ù¦ÝóŽžÕÚ®;÷êxèpI¹y™ÕçEÓçz¦íÒ›®¬÷èyók½6kfº¾Øʳ¹žã¶®y¶¥OwŸ»gÙÀz_麧¯Ô\zð» gÆ÷îk¼£³·…=««Þ—Ž½ûºô§KoKìk‰9¶õMÑsÍ¥7¿·6êÛD_ºÜÒ›¹|š¾i9¶mß¹w°Þ«ßÝøîÐöˆíK&Ýû[ -ç½ùžwÉ£o\îW 96ïoÙ+½éÂ{gF}¯ðf˜aÛ÷›z¸¥›Oî@;\p[/þ¸AðÉ!ËFß;úØtß.·ôãCÙ³Ëî=ö±Á'wâšÎŽÕcã‚õ.yuÑqðÝëí|òéÃÓ3ñÈ1ÓFM76ìéÃ|Îî–ìû@oKübïîÝ-_‚šÑ|úÿ£ž-¯šþ¼î cæ—åÒ1§'>,5Ù5óÁwdÓÑßRtÞ8eÚOnfvºjøô,gt÷¼§^6ÕtìÞ[·tøß›»¹yß{ÙëŽÞtdÙdÿîþ8æÒ{ºwwÆû‚v«âž.¾8êùÒRìc“,Ø°Ôõ•¶®CÛW¾ÍC†Íy°+ÆC6}Åçuãάꌾ*½-â½k_ 2lërGoœé¹fÙpS÷Y=÷·ÄÇ,›éø¸qÒ™®>¹~Ǽî;wåÈ)C®í‘Û³Ý=r®é¡moϳé ;Žû÷zCß@ÓEÛ™Iw¿;|rÕ÷~ÈïáøäÕoÙµ£Ê|?JŒ÷CøÝõŽ.ü8fÙDÓÉœá“Ì™Ày?=ÅMý”¿½_Uçóú»æÑ=›ŸÜ™Íègg–c³ÞôsÙ¹_¨žÖû¥½+»§Ç,›ó`å†~)óºeÛ°s¿¾Â ½þ¾v¤½ªÍìî{÷ªç×̱y'Ûµqݽ·%ÞÒÅ÷.ì8t®æç]lðÄݺÏ÷tíX½¯Ýª“°woçØî„óž=ïå¾þ¨]«ÞÍVoè•#÷ô šþäïùý-Ï~÷§gáÍ€‡ý{ö½Û\®3ú[ø³kÞ.ó9¹°ïî“cŽMuÜvðÍ=ýÓöðœÙ?ÓŒþI_\èqùÂþœwÕtäÙþÿ/ÞýõWÕtÕsy¿í–îz>åsºÎæÊ’K=.ºŸ -œ÷Æû>|ïÿŽM›õ :‹œ½iWj˲úÿÿÔ^ËEP@±AQl@ìPly³ª22#k²Î»ïÝ;jL\û|‘ÑT«[‹êVuQ­òÛ^lßímù½~oË«¥om{QÃßáw­F¯¾¨Õk‹z-¼zzuÿvôí,ê;øî,vvv‹·#¯ø½»³Ø ¿wwãÛ¯¿ðvŠßÆ¢¹›¾Ýðš‹fcwÑl¿ÍE£þ.~·Š¿[Mù·øZ鵊߭â»Wü÷âkoo±W¼Ö^k±··'¯øÝÚO¿÷÷ûñßöãÛïß½öb¯½¿hï·‹WüÝNï`ÿ ý[»½8(^û@~ÇïAñoò:Å;Xtâ÷ “þ­ÓéÄßáÞaüÆïaüï°ø}ˆßÅë†o7½nwÑ-¾Ýø=Šß£n×¾GÅ÷(|Šoñßzñ_ïhÑëõô›Þñâ¸øâõŽ‹ïqø·ãâwÑëÇ¿ûáWüÝ/þŽ/ü.ÞÉñIñwßÞÉÉâ$þßâ…¿Oûéœß}§ñÆwr–¾§Å÷,¼Ó³Åéyñ=—¿ÏÎçgçÅ?/þí|q~~&ßì Å;o ΋W|/ä ..Ò\èï‹â÷åEzñ{™~_ßËâïâ; ¿‡é;Úß—Ãañ÷•|‹w5\\…Wü[xëâ«ï:}¯¯×Wá]§wÞè¿GéÒ¿F£â…ïü.ÞMúÞܤ7º¹)¾Å» ßÆß·Å÷öö6~onÓ‹ßÞ-îŠw{w+ßâoy÷·÷é÷}z÷w÷‹ûûûøµ¿ÇñÇ÷‹qñßÆãâïâÿMÒßãñ¤ø=^LÂïÉ$¾‡âß&á=oÞxñ0y°WüûÃôxÅ墳iñoÓù†{ _yò¦‹ÇðÃ{Z<>MOò÷Sú·'yOO‹gù>=ßççÅÓSñžÓ{~~‰ÿ¾Ïò÷óËËâ¥øýò~§ïKñï¯øý~¿.^_ñÂß³â;‹¿Ì^ãïYø»ø=‹ofï-|ßâ÷íí­xÅßïÅwöÿ~{_¼¿¿§ßø¾½¿/æïóâïðÒïù<¼âó‘~¼,>Âw.ß¼yŸ‹Ïâ¿}ßÏâïÏôý -ÿ^|?¿Â÷sñõù¿Ÿ__ñwüû+½¯ï¯Åwñ¿ûú -ßâï¯ïâû]üû÷â'ü·Ÿð•Wüþþù)¾ÅûþY|ÿÊïâý~ÿ.~Š¿ÃïŸð;½ßâ-Â7þø¿ôýýµßÿ_ÿoc}}±¾¾±Xßo]ÞÆb£R¼ô*ñ[‰ÿVÙØ,¾•E%üŽßô67Ó«„oe³øno³ø7¼­ÅæVñÝÚZlßôÂïêb«º•~ìX¾E˜.¿ÇåwÄîâw­Z‹,¯áEL÷¸ð<âz|ãëñwmGp}‡^çÀwÅóÝåxÞ·c¾ñwñïøm(†§ß¯ãÓkŽËï½VÂòf Ï[Ïí{ûÀö}ýîÓÛ ø½o߈ç†ïü,ß?Ø߈åûϾ§ßáÛî„#\Ø­8Ÿð¼sx@x.Ø^`x§ÓßnÄóNÂty ϶wÓï®`¹~{]Áóâõž÷Ó€éGÏ Û¦Ë~‡¿û ßå,?¦ëï€ã ÃÓ3<øÞ?l? ¿Ó†ŸÛÏžóï€ëËÓ+ðY~Ÿãï€Ùã~Ÿyl8.X>ˆ!¿Ë/"ž'|¿P,¿,0<û1=½‹añïÃKÁ÷a|Çõ]…p\p=âù0aø1ýZ0=`wׯ"¶ ÛÏ ¬¾¾1<˜^`xÄõð ~#°ý&bûmÄòâ¿…¿¦x~—~'L¿\Ø~'~qýN¾ã»qú ¿¿7|/Þ$þG<Ç‹8>É^Äõ‡ø;àyø;àwüFü~Høq=ayÂtùß4á;½€áS`yñ€áןž ×ãïçLjÝϟߦã=Ù$åÇ_ÖGìN˜þ°;àúË«bùì%àøkÄñWÂõ„á~çx>¦Ì6L 8>{OßâÍ#®ÏÓ÷}./âú{Âõ€ïÀøð ÛçŠçô>×åñ,ÿ,§¯à7Þç÷WÄï„ㆇïOüÚïô"¦ žG,ÿM˜þûñ<þ¾x³Â[$|O0nXþÿÐ#ž¾L_7ßÀïJÂôÊFÂñôwÛáïøo›ò* »+Œãáï-ÂóÇåwÂóìU«ö¶Ë<=½€íÛÆÑ«ô»f½.¸¾]O_¦¾ξS3n^“¯ðóˆñ;‚黋ú®ñõ]Á÷†rô€çÂÑãç…£Ëõ5 ËåŒo´ÏåÇ›'ø¾§8^àæ-åéûÄÙWßcLß X¾'xžøy»p<ñõ€Û‚ëÂÏ#žãÛn~¾ž^Gyzø&l–w;ÊÑ;‡Âω«w…¯wÝ 8~”p>ðó®à¸ðò^—°<`øÑr<¦Çߊ罂‡÷ ÏÁÍÁ× ¼g~8û‰<Åó~âéáßV OßS`yü]pò“³â¿ žŸ%<ïl?/aû¹òrÒÞϦ» _7,¿ L\ýRqý"âú0éï‚ߟ_]&L¿,Wœ¿"íýÚxú5´÷ˆé×ú®ïàè‘›Ël¿¾e<=aøhtK¸.x®\ýFõ÷ÀÍo ·ß -žßzL¿8O¸.ºû}Ôâï•—{\Ý]0} L GO¶ë?Èñò&‚åÑÜ#OßGáæSÒàÏÁÍÓw*¸þ‘xºaùóãóâ1|Ÿˆ“ߟ ¹?'Í]twÓÜñ/žGžñ}¦¼<òõ×Ä×–¿Î€ãÂÑß^…£\'<7LƒÞþþ®š;óõÄÑç‚ëÆÍ¡»ƒ§/ÃóyÂôOpuÁóO<åíIÿúJØ~G,‡ÖLnþ-|=âºàùÏ·áxâéÂÑç®ÿB{ÿ\ÿ]ÒËýÿŽêkkIc__‹¸LOú;ð|=éíàãñmØoáæñ‰Þž4wÓá½æ¾éùyÀøªqtÆõ-àùÝÑ«žWkÂ×k‚í5Ãôš}“þ^O¸îðÜô÷ÑÝk¢»ï(–ËïÝâßwë†éò€ç ÁöÈÓ¡ÃG<7Ý=½fÂtpõˆíàæ Û[ú’ßb^5÷fÂó=ÃóñóVäæàè{Û÷¦§{ú¾rô¶òuÆôöA[8zúv"®wôŽÞiË·“4øÃÂs`{ÐÜå齄í†é ×å–~$·ôCº¥÷âï#¾§ëM]x»pó#ÖÞå¦Îœ]ø9žâúɱãêà ËÓ;<',?ÁÝî馽Cs·ïù)4÷sú -GW®~–ðš;kïáß/ÎÓ-õwáëÀtÖÜ/×M¿H7tâé龞îé‘«+¦' ž9úp O¿†p}tåîê#¹§§g|üüFoê·¤»3¶ÛøpüN°Üž×ÞoïžGŽNOïêÀõ;ææéž>‘ß¹¥§7Ñ¿ßàêò"?Ïy:øù”¹zÍv;_ÜÒ§ŠëeýÝazÀ짤·—›æ þå9ÓÜ#¶ã®ž0N¹±xãîÇïÉë~¿åé™æþ@·õ‡ÄÍñX>™šG.jðSwSŸŠŸ~Ë}ÊüœoéÆÑ宋Îþô¬¿_È~?ß3¯;pü…½qÌÓÅ÷>ƒön7uàúÛŸÜLøyòĽ©/<ý]¹ºy↿¦3ž¿«çÝð|‰÷¸Îº{äëâwÿü*yã¾ØëþÍÏîé†ïÀtÒßõ®n¾¸_ÆtÁuï}_Ø=ýÿ€ìëËð¿7O‡7NõwÁóŠjðÆÑ7„£§[ºèï››ú ¸¾%XßVÂvxÞ7Ys¯Ú]]ñ\Þ¶ú㪦ÁÓ-=ùÞ=W¯Õ˜§o;oœæØj;šgÛÉpÝ|r;‰Ÿ‹×]ïèã;ækWšû®ùãR®­é|ïÀwóÃ5U{\½%¾÷=ñº§¿÷Êü¼eÚû¾¼Ö>a:qtÅøö¾ãçÊÓ‘a š»<Åõ€ámÒÞÒ-ýð ãïéúHswº{âêðÄ1–ë=æÙ/wwõè‘ë™ö.Þ8x߶/ŽŽM{ï“öNþ8ðôcÆtåërO‡ÿ=zàOI{?)qõÜÒù¦®^wptË°é;·;úÙù9ÝÑÄÍvŸƒ£GlO8Ž[¼«“æž¹ˆåõm¹§[6½4özÝëîâuw¾¸pKNÝÝ~s>½AXnÞ÷]Áð¦øåpWO7õâ3m-ÃôßÓIgo%,Gžmp=eÓ÷_/åØÚ{¦ï;x`ùTO§¤½?p&]´vͦOí†îø:8¹eÛ’îɼïtC¢\ºúãË¡·Ç§7uóËÍ Çãž>{õY¶eØâm>÷YÉëîŸptxâÞž›?.yÞK7õˆå§¿GLŸƒŸÏsÏû‡ó»Š×Ýiï_|KÿTŽþ©·ôïˆë)»–pýG±ýG±þ¸_`{ëæ•ûUl_8lÿM™6M¨ÿ¿ƒúÚZàæ–¯­E,¿××4—¾¡Y6Âtº§G½]~of7õMèî›ð¼W(Çf9`ú&¼qô­:ï{Unê³· ׫Ȧ?¯ª÷96ɬ?¯m×%—žp\3l.ŸŸÜŽxßå–^ßñÙô%uÜÒMw—Þðô†iðMÆrxß› ¯½·šÚ3£XÎ:üÞžáºèíû.¿ÖŠoémôÍh&}Oýz|)®ß Ÿ>•nêŠéÀoptÁöÛ›;ÂuÊ°9ßû­òôû[èíþžÎ9¶qöÛ<ïìwN>^†ë–M7¯\Âô©jðSÕá-nÞwäÓUw§[úÓÔãºæÚi{2,‡Gî™n꫇{ú˳ñt¾­+¶K®í…õöYú;uÌd=3¯†å¯otS³›zʳᦰ{f·ô7éoœG‡Þ®xþN<ýÃ{ã4ŸžðÝüî‚á”KÿÜgz_Ô9“¾ßÊÑ¿Yw¸þ#øþ“òkȱ}çºûzgÊ}3ÛÁÏEsÿ%ßû¿îêŠákkÄË×â }Íñtʯ¡gÆý ,_â“Ã-o‹qüîàíê{¯FÎîslUçs^9Áð*4÷ˆëâyGœÜÒá¯ç3ì{¯í”oéœK×Lºhñè¦SžÍkî»YçŒiíÍ&á{SòèŃ?º;²lÍèó}3‘£ïQ6=äלGNp>póЧš;qô=ñÆí[ç üq±o†¼qmͱù\zꛑ2éÑ+w@Ùtä٠ÑK÷9ï}Oømz{ʧw7NýqŠãèž‘{ºhí½Œ—÷Ð+Ž.¶ðo'™GÎð\ð]²é}æç’K?Ñ|ú©äÒ¡¿Ÿ¹§X~ê»fÎØç2lYwÜyÆÍÉw9`~N|ô¹È—suxÞ%»¦wõÔ#wÏûaú0xâ†âãþ¸«²öÎ~÷kÒÜÓ]ÏŒòô„í·7–e»U|¿ þ&fØ’_îŽzäÌï~k>9àyÄñ»;ÓßÇw–G/eØÌû~Ï=r™Þsê”IŸh~Mºf&tS—ºï” Þ÷G»§S–mšstâå¾oæQôwÊ­Áó®Þ÷%úû‹åÙ^ ,:<åÒ_%dž|ú+ósdÛÀÕ5¿fùô7ÁóG·Í]¹:éîó¹ÿ±ü]¸9néä•ûœœ<<ÑÞ?¨GNµ÷¯ðo_êû$žþé|ïßê{ÿfßû×éï’M¦ÿÂû.Ø®÷ô¯ÅÇÿG¦ þož°ú`Ç¥<ºvÇM3žŽ<ºúã’ßýq:µ›:uÍ<ò=<ïÿöÈ™ÿ¬}°OÖ7£Øž0ý™9ºzÝå‰ïÝgÙÈ'§wtÁvpòÙL9ú;ÝÓßçêy÷Þ8îq^÷wdÓÓoÃóLwŸ;<·›¿¥fXŽ^XõÉ}ªGîû›´wçw·[ºùÜ¿c–ͺa­ ÖnëŒçì{§ÿ£?Ö„Ÿ+¦¯‹þŽ qôô·iðäÙ´ –:g6²[:åÙ,ŸÝ}+vÈmmŽs'l•üîä“Ó¾™-puº¥C¾8ÜÓkö8Ÿ®Þwé‘«Qv­îîêð¿'üVï{®¹k,ø9óô†zåàu¾¸ìž®\]{fÆÓϵãø9´ø½g× Á –·˜§ïSç{;fÓ¡Á·¥s¦ÝÞwõ}Áð}íœ1\›°ÜyäTs?Ðl:{ß;‡yçLWslð»#Æ,:ëí¸«çwô#ÕÜ{®6ùâ(×vœwà -ž÷¸GŽúf$Ÿn8nú»eÙ,›~ǯxãNN˽3gì‘Ëñ\ýrì#¾~6È4w»§Ÿ_à¦n3©ç}tvd×rGw96ŸaÓ;ºëŽ»L~wɤ3ÝýZoêWÚ7c±×–c»&¿;uÍð]ýzdÙ5Ë°I×û­yáÍó~ñûæ.Çsê†uþ8ô¼'\¿»3Üóóñ½êï¡cæ^:Þ'ê‹ó<ݲéãˆé‰«K7ô réðÇ ÎƒŸsŽ-Þϧ–Qw¸^ü÷§GÂòGÂðGû[=ï”_Ó¾w¹©¿<«þß»öÀ†¹—ÑÝ_L¾¸ãèÊÏg.¿íýÍu -G‡ç}önš;õ»£ÛwtëyçüÚ‡zÞ]‡œ`ú§`ºf×>¤çy6ç{çüûåà‘“;::åDƒÿ!ŸœÓÜ%Ëö |9ù7íœlž/~Œ£#šžeÓ×W׫k«%ßÒuÃ%ï’KÜüŒ|ïºÝr -ý]ôøó³Å™vÇY‡œøâÎ4Ç6 Ê®Qç{Ât˱i7ì¥dÚ.}7,ö[.ˆŸ'½]¼ïWäuwïxö7÷½;ý=âühq%ùµ«ˆáÔóŽ{ºæÓ¯­?nžýqy–{a¾›ÿý6ÛnAséèz·[:õÁ -Æ'ž~ïné¹ç=½¹¯ƒ«ç±S‡íÖ—uÂNÍç:äקÜ..Y¶G‡çä“SŽîµ÷çpW~ñÜ]°ÄÕ_ÓyËEnè¯3êž XŽŽ™×·Ì÷N]°³wáé3ÛlÉoêÀwꃵ¹wï{§®÷ˆïŸKúaµg&÷¿éM¸þ)Ùtí‘cß»äÓ«§dÓMß»ÓÝ©GÙ5¾¡K6]½ïì‡[óü|]u÷5ÏÏI‡Ï}£¤Ã[çLÂnïÛ\æ}מwäÒ·–òtõ»ƒ£+® ?ßfm¸ä½°r[¯I7lÞ7³]ó>9Ãõ|‹­.<½Ü Ý}G»ã¸sÆ÷ÆíªoY6xÜècß;í²i>\ÝùÝ[–kƒG®ÀqαÙ-]îé™7nOK×{vKO\;äþÙ7ƒ~ØŽtÉñ~ZG¬þf,ÇMýnêÊÓ£‡ýðó®fØ,ËÖ£þ8í„=¶ïèȤ÷ó,›qtdÔOH{·¾öÈWžCk?93®~v¢ný4ñr½¥£ö¼”IG¿;xú9ßÓãì“ä]ïî¦~Á·ô!ðý2óÈ]ªßÝzßý½¼Ë&xÎ.¹ï]oéäy/áøH=ï£\{¿¹ÕθÑÝGN»_Åï®™tÛp‰ž8í†Ån uÈivM8;4xâëàìȧ£6aùX|ï’]cŽ®Þ¸ʤ—ñûfJ6í„¥^wýüñÙüqYoœî° Æ¿\¡žòÈ=Ó-ýåÅï²YïŒtÂ"ËF™¶òÛÌgÙb7ì»a¹ÜЛ¿ežwñÆñn‹fÚòÝ–äÓ¹Ï×·T'ŽîpüÓòkÖ7C½°”Og<ÿ,ÿ†'N¿Üõ°ûǼqÌÓExO8¾Zpô5¹Ÿ¯šç]¸úFžeÛȲéŠçÚc³6½©ol&\¯P¿ õÇ×+Ú#'oévK•ø¹õ½GLw96øÝË96Ë°a—­î3êu~†í;uëyßÉ4÷ºÜÕáÛÁ†‹`ùN®¹˵ï:g"'ßÕ[ºá9úãZª»·Üv ºä¸w†îç-ÆsãçðĮﶛþ=rŠíÙ~K;Ãó¶u½wÚï{w·tòÅQ?¬í«vˆ§Û;"L·ßÂËsÏ{ïÈí¶õè¦î¶[즽½‡;z¾ã’ï· c†öØNò»ºzâ€ç|W77¯püü̼qè›9£~÷3dÓ]ß ëïáoãçòºk—Ü¥vÇé#Í:ü…öÀf}r¸£g·tÓÞ±¯:ÔzÔÜI{]¥>¹¦_ûºúâ²Õ‘rtÁsÞZe\¿»už÷øîï\>ýžvVß1O×9ðsÚWE>]±|¹OîA:bõž>nþ}:Ñ ›æ×h‡ [«ÊÕý==úÞ‘K×îò»K¿Œþ~~2\—œúËó“ÓoÊ´1ž¿X†Mûfœöþª¸n=3Ökl™7îí]oëÓço©ç³lȱ¹¾÷÷xSÿ˜Ïim®ïÀñ%]ï_ÓéŽnÞ8øÜ?}׌ÜÕ¸V·V ÏÕóŽÛúÿèyÿ!ŽNn÷ˆÝ« Ó×ÁÓ×ÁÕ†oÈï5º£[/,÷¼{œö¾Ã'·YQ\¯T*¾sFîé¼±ºE^¹¤»gØ^ݤÕ¯·²þ¸mëÙv<}[;äªÛv?wY6xã€ëÂÕw²l:º`Ñ3ƒÎõÅ®^G—\Žë¼ßb›lÜ9ÓÌüïÖ%GxÎ[«Ü!·¿»}÷toÕîêÚ!G¹ô\w÷;«û¥Î™ƒˆëÖ!wp 96æé¼%.‡Ü9Cº{·sè5w}rGØNÝq±æ舰]Êôvâèðº;®n]rÆËå¶Nº»åØä–žåÓ]ç;°üÞ{ä잎=¶å9u뛨þîvÙ¨ë=ðôG×#Ç>÷°•>u~÷¤½“ï=óÄÞžŽíôxGA—ÜSäåÏÒïþ,<ýù•¼ïÊÓÍ'‡mÕ™fÔý^úëÛ’Ít·ÝÂ3¶­ŠçûaçÅßsëS¯Ü’NØù¼¤µGoÜ\¸9:g>Í'ôö/é‘ãÎ`ú7ûäd»E1ý‹²é‚ã'Ôçžb:á;t÷SóÇ’v’vVýfº÷¼Cw×}Õl+=ï}·{úyÜXõ7tÚhø®™Kðuîxú›uÍÐ]:g|Ç»ÜÒ‡²Ã†,úÞ³]¶kdÕµ;îš´wxßᇣŽ÷ÑÓÝoG·¤½Óf:uÊÝjÝðø_œjðwå}Uî›Ñ>رáø½vÈ%L×îÝPk/,o¹<Û³ïˆ}†Öþœzfünú‹Ï¨K>Ýð5wîáí–a9yÝÏ­#–=ïÚõ>7ïû¸þ‘m¦G‡?×®wÖß…«ÑƪvÉ}‘7.ϲe}ï_?Ž§»]6ðõße¶_»­ÿrÏ»ñóä…Ã[Óï:ñttͬƒ³Ë¦ªþÞ€Ÿí²Ñ>›fÙ6*>džÝtôÇ!ŸŸÏ¨» —ê¦rtó·‹ß}›}ïÛ)Çö¯žõÉUK=rñ†¾ ~n¶ô,›n·uʳ᫚»e×’?®a<}§á²éŠíŒáȱ¹­ôf¹oÆõ½³þÞ’;óó²þ¾¿g[«®–úãR&=Ãôý6á9òl>§î2ꤵf[«ÿ³6Üέó½{x¸4£~¤Ü¼÷ÒYwïÅû:kï”SïYçŒfÔá{ï÷œ÷ý˜¸9÷Îp',¸¹jð|?§M¶“ˆãÜ÷~ÿ†/˜~ºÏ ÓÏ|7ìÀ4wàùùùEäêçzK¿X²Åæ½q¤³ëçÓ‡ª·_b[uÈ6ëv‡OîzYŽÍu¾Èû^îˆõù5ó½W'ß;gÒ³ çÓîÂô{Ùd㧾÷{ɦ{\÷]ïYç;p\0}9C§;:´wº¥û-6ʧÏÌÿ>›yœöͼ½•°]ýíØZE6}ÏÜÜüqÔûî¼q¶¡nûª¼ã‚ìšm³qçLÞ û™ñt·µŠ.9ÅqtÉ——oêÀó˜iûý¥þ¸ÚY]ضjñ] XÎzûªùÝWIo‡?.ý&ÿû†ÝÑ74›.}rȵ‰OÎ2êy/ì&qõM·¡Žž÷À×ÍG;lÕÌ'Gþ¸*ø:{ÞÝvzÖóN~wîzwY¶:òlÌËk¢»ï¤Ýtº¥×É÷®96º§»l:{ÞÏõnNß&m§G>n›éÆÑÅ#¾¾×4ï»öÈYF½Ô9ý]ð|6Øt?]0ýùôøÞ}ß̲[:6ÓÓ==½Cº© -¾®[ß»quáæºÙÒµ{úûä®÷ÏÔ'Þ¸xO?r9ì²Ù&›<êÁ-ýù5ʱ¡#Öp\=yâÎÅÿ¾8wræé—¼ÅfúûëíúûÒiï—¢»/ëwg®Î9¶r?lòÇ Á®c® ½3)»æù::ärÏûHðüFïæÖóŽÎ™;åè·Úïn;«å{ºn³-›î¶VÇ÷º™žçؼOnY7,kî>›ŽîÛP·Þ™·—>-wÇA§{:ðüÙm±YÇ;îéê‘SOÜ³í¬¾øÎ÷gÂtÓß_ìŽþ2s^9ì¸|s›lo´ÍVàúûLy9ï°As#­Ýo²Í]ߌv½¿èMÝ|ïØo X/Ýq´³¸ºyÝE‹ÿâ,[ʳ}~ëý[¿ÄÑ¿Yo—Þ™éßÐÜL{ÏwVÁÑWWWŠ·y:p}=»¥û¯éÇߢ·oHF]9º`|Åñuë†Ý OœÞѹ Öùâ6Mƒß²µwwS\߶,›»«ÃïNÞ¸ªrtÞc+þ®sŽ÷ØדÎvÓÏó¾™:éîšis»éÌÍí›9»§w¬süÝ°ð¿;_œùÞÛÝv:º`9—Þ£\ºiíGª·gïX6\zæ‹Ó^Xøæú‚éKré~[•¶[˜§ÓÅôvΦ3/?e\‡NºfÌ#—ßÕºá¢÷ôÿÑ÷> ,ú@±<ï¾s&rryðÆ]fÙtÕßãä{¿†ÿýÚrlzG¿Â®êµË¦«÷ý†ñüÆ<𺵊»:üq´Éæ¶Ù¨ß]ûfÐ#'ž÷{ÆõeÞ¸±î¦›î~/{lß!7«î®žwåç—OŸDÍnéºÍ6U<Çoõ»O Ó]ç;÷ǹ¾둃þΘþìnçè“C¬ôË}¡réÿW"Ž¯ -¦ WÇ=¸zü­»-krc·m¶5ë›Y_÷wôõ -eØ4Ÿß»ßcÛOWͽ¢Z»î·(–[çŒëy—ßÕ-æçÕè‹3í5wô¾û›zê£þ¸Ú¶vÁÚ~KÎÕwìK¾8üNÜxn}ïÖñŽúqtÁöæ.õÃîÒm½éïé-æé¶×µö&gÔ÷(§,oéw¿EÞ8êw÷.¸§£;nßpœïéÌÓ;’]ë˜æOœúäœÖnþwÜÏ3íÝûã’Ÿ¸úݽ›rêØnÑ^Ø#dÒ\†M·ÙŽÉ'Þž÷ÍDÍ=ô½Ë^:í¦ŸH_œeÔÉëNÜüùô³Ô9sLÏ;äξŸ—üq~g•slìyçM6Ë­As¿¤Þ™ËÁ%a::aÍ7$LG.Ýî—ª»Cs¿Ò»zè»Ò›uÈ!Ÿî¼q¤¿«î®=ï´ßÍýFøºî°¥­Uί±7Îõȹ]¶;ç“»]¦»Ëßã¶3_·»zÄô{ÞWµ›zì{°›úDùùÔqõ)kïtOŽ?@o×þ¸§¬öÉûß#®SvíÉnë®ö rÜó^æçßÉïžwÍd¸îòèî·í±q¦-b;ºaÛSv-ñö¹ë›1¾þýú㘯ÏMŸ£7Ž·Ó?Éÿ.Û-_™öþõIØþnêß”iƒî.œý'ãêñžþ#\Üüû×:ad[U^êû‰x¾¶’øù -îè‘Ÿû»ºjîkÞ#·Aûªù-ü·ÝÕÞ? Ói;gøßøŽþõawôès‡ÿ]w\¾]Ï{ìz'ÿ2_\Øbûúþ¦î8¾«ÿPŽÍ6Vý[z¦µûç}q«æž¯Z>š;zf¬s†ºaÝÝ3”MÏüî•M{¬»'\Åø¹ë˜±l:óó­ü†¾•¸ºvÃf|½JÛªºÙ²ÝÑá—«Y~­¦]3Iƒ¯Ñý1ÝßÒ³›òtëˆm -Oo"Çƺ{Ã÷Í@k×M¶æ^æà ݶV[ûÖóŽg»é¦k.Ý÷½[O¬tÃv²;:kﺫ»­ôŽâyêšéwi3½k[«Ý×¾s†ðü({=ôÃÊ-ýÈ:䎱ã"Xž^zf¬ÖyÞ Ž~¬þ¸„åØI?¡<{ß]–ºÞC–íì ;«–IgýݼqÔ ‹ÎîÝý\slíœOWOÜ ñul¥_7¿€O.î¥SÏ;÷ÈQ†Í²éØmf8>ôwtÞc»"Ÿ;w½óΪì¦ß,¹©Ã7ºeßûöÂâ®ný°´±Jžwl¦ßºýÚcË2lÐÞÇcö½Knmœu¼Ã÷0öwô‰ùâ4§>(–ó]ݶUáCߌyÞ—o²!Ë÷]ïÊÕ©Cî XNº{¾³úJ3ŠåŽ£ÏJwtö¼¿ª7Ž¾o Ûß)§Ÿ樂Í}– röÒ Ýå×æKö[l3ý½°´¡þ™ûã¾¾ˆ§ žkœpôïe9óº+G—n÷Ô ûm6`ûoÂõÕ•U¹¡¯ÐïÕ˜cSÏû*¼qÜ;³î:g¬?nƒºfa[·Þ8á펟o ?Îï¶ Ÿî¶Ó±µºE]3àêUêzG&ÝîœgsuÑÚ—åÓy¿…¹úv]2kÛÒ krµºåÒ­·têœq9öÇÙŽ ßÐwÔ+­p\÷U©CN³mÖÛ"ÿ{Àrxãš{¹çÝøykŸnéšG/ssdÓÛ’eÓ¾™pO?ÈüïºÑ–eØÔ#‡Žwê“‹¹6ë‘+ûÝ»1£Þ=<,á:÷ΠCÎö×hÃÅyßM{÷7õcç•Ã~ sõÄÓi·%`øñ2oœÇõ¤µ÷WG_œfÓi·E5wʧӶªuÂRœ»­Ôw®ý2çúûbpNrœaK7sðvõÅ)ž/÷ÅŸ»9ÞcSí½Ü7c96ÞOOž¸è…Y×û(×ÜÁÓo®I{7Ž>¢¾t½ëÖj†ån3=ï·ØmYvO¿#¾>v·õ1n颹ûýʤ'.—n¾wÊ¥O2oœvÌÛi·eª¹ô)ëíÜõlÏnên;}YÏ»hï/Œåa']¼ï¯²µú"š;<ï/3ãé³Ò† í¸¼Ñ-]9z™¯³öüÖÍô7»£ó-=vÏpçÌLJÝÖ¹kF·UÉ#÷iº;|ï1Çöe}3Ç©ã=åÖ8“þmݰȧˎºÝÓ©gF÷Øèž^àùJá++‰“ãû_…·¯Û×W]¦Mïèä³ï†ÛdÛP<_w{lÀuÝWͼr.›N½°Æ×·4˶¥wuãëšg“Þ÷j†çÛYÏ{µtSß&ž.¿ëÌÛ¦[ï ÷Íðvzúm]ïuº£3gßqýq;ÌÉU‹oè]÷ô&eÔÁÏMîihoœn²‘ONŸl­"ÇÆY6äØZû¦Á3W×î8ÝK¶›×=ñsøÞ-ŸÞŽ:{òÉ•3lä‘;8¤Ýt`::Þ­ßÝqË4wÖÞ»¼Ý‚ž÷£žfԱ˖üîò¤{æX²éyž Ý3Ú‹¿%Ïf[l¶ÝbØÞ×;ºÃóÒÎ*üq§’_;U¯{é‘W.éíÂ×g~õöól[u0 ^Xù²9äÑÑ7®®wtÂqé“ ÛéÊÙ¯Ê~÷¡àø•zã®´Ý3æ‘£M¶ Ó_Ƕjy7ýVïê·%L¿³>Xxßï¼ï=áø­v¼k.ý.à6u¾ó šû=í¥ã¦N›«¾VòèäyŸä˜>™*¦;Žþðh»-®s†ºa§ ǧ´Éæ¶Ùô®þ(°O‹r×û³î¬¾ GNy;v\^M‡õ¸þ:{ñY6é{‡G.iïN¿r>±üÝcºî¦¿¥Î8ÕßçzG×Í–÷¹ïzŸ[/lžMמÙcÃß~»EòkÚñnøþ%¹ôÏïoͨ+ÆS¿»n§‹7Žslß¿´¡nÚûŠðòˆëàæx¥Lúšì±­?§»ºÛlÁ–Ëõ½ãž^QnÎ;«.›î:gÊÚ{ÙÿN½q›†çáwUpwt÷Ûí±Uu;=ÞÑ©;Y6˱m‹Ç=ùÜ·õ¦Îú;ùä4›Îýquó½ïîWG.ÿN°;àèÜ9C»é¼ËÆ]° õ»s–­©üÜõÃâ–ï縭SÇ»ÛY5ß{ÛáºÝÓ$Çæ=ïYß sõvG1]=çÇ;wSﺎXñ¹R·{·Œén/½—åÙ”«KNýX9ú1wÉõíË°Ó ì>îK܉뛱íôÓE_ïèÉ'gwtô¾ŸyØ÷w˧#‡>ÿP žo뉣Ïåž½ýC³l–Oÿ²{ºöÂ~ú¹ÒnËWÒØ¿ÒÛ÷o§»®w휑üZääÀòø{-}×设æŸöÇEžLg ÷»-šQ§›zð¼Ã_!ß{ÀôÍŠ÷É¡;Žré[á߶Ìû¾åÇF4wt½‡os¾8ôÁzÏ»ÛX•îwì±qÏ úÝ›Œç-ïkíSçÌ^Þ÷.Z;c{ÖgZ»`x;Ï¥ËÎjý@v[ä¦~h»lËõuU‡ïv솎Uæ麱Jên¿¥¤µžwα“?¹ô>÷ÇéfºäÔÅÏûÒíñ½ŸÊÎ*wÁz þÌ6[NI{W¿û©öÇ©ïòéƒ3óÆé[–a£,w¾ç;l즿•›_ú›úåîêCtÃ^QN}HÛ馹ÛvË•ÝÓ¯,›îvÓãµ;Žóéè9žn½°Öïnr©cÆuÈÝ"ŽÞ÷û¬ó{aÇnÃEûf2LwÙôØû º;kïŒç‰§O鞎¹©rô¸µúhþ¸é£ùãž„§[/¬ñtÕߟ=¦Ç^XÚLO=ï/Ö3óL·tÁõøû5õÄýýU:aC¬×Þù~NXþ:³UÝK'¾N9æ輟þ6·.9ì±<7'Žn{«vOŸg÷tí‘+m§fï´¡ŽÎwβ}“îþM½°È§ÿ|«îlç[úêÊJÄòÄÏ™£ËMν3rSç-¶µõUê’ÛõÂnhçLÖ=³!|Üœzfømnd{én»e‹²é†áÕŒ¯Gÿ{•rl%Lg,ßÎðœrl5ëšÙ®g»éì{¯yn¾Cú;nêÚWßÕ|zÎÓ÷±#twåçn—­á8»êí‚ç–qvîå~Ø=ÞpÉ|ﺭJùµðomþÛí²‰ÞN[lèƒE‡œøÝc.=psyæ•ËúãhgÕïªrŽûfÌÿÎ7tôÍèÖjÉ#gÚ»uÎ@o?²tê…Å=u½÷µoF¹ú²Ýô“>eڂ׶Ødgµ”aCuΤŽ÷ÄÇÓ^ºüŽØnž÷3Åñ3év?SOœÞÖè™9÷tÝYåÝtpóÃàæ¼±šÝÔÛMsǞ˕¿§_™•?Âòø{Ýòé#ãêq3ýÚ|r£Ãsß!Çß[õËŽÙM¿S\— [ÐÚïÙ+w_¾£G¾žôwdÙ8ŸÏû=éîØLw]ï˺f&ØX(ž§LÛTw[¦ק.Ïö¨y¶'íˆ}ZÚ ûH¹ô'çwž9õº»|ºõÂƧž÷Ð ûl»-ºÇÆ=r–Q×Íôyå"¾ÓÛÌ6Vï=ró™ßd£nؘUŸã¦Ž[:ºams5÷¾GL]3ŸsíŽûtú;uÂ~XÏûW¦¿ë÷˜þm=rßÔõþeûªša#ÏxúŠâùŠÇò•Ü÷.¾¸ÕU‡é ÏW5®9éƒÜ|mƒxú†óÈiw\žMßäÕŠb9÷Âr7,z`c\i_•½ðU¹¥Ww96¾©Žãw­ZÓŽ÷mí˜ñ.Ö!W£{:¶V ãw ¹×S7l¾®ý3»e®®œÝ:a×w­K®I}r˵ï¾8Údkæ÷t× ÛÒ=¶}×!‡]6βy_œúÞ÷nÛ¾ªm·”·ÓÛàäê•c_aü¡quë…%\§<::ä´ë=ϲAwïuõžnz;u¼#£žwÂê[²Çvl¾wÆtõ»÷Msï /·½ô²ön|ýŒ|rÖ;ï{ÜaÓmUßý,ñôöÓi¿¹ôsÜЭ?®´Ç}ïy§:Þ‡öÚM}xÉz;yÞÁÓ3ß{žO¿º¾^²Çv-l¶Ëv-ùôòºFæÓ.¹ÀÓe»%øåôŽ~ƒìZÖõ~—ÝÑÑ#ÇÙµˆå¬»ßQ>}¬7õ±hïôÈÝO–t½ƒ³?H&}Bï¾KŽ1þÁ÷Ç^þ€ž¹¥OÁϳ½Õ'§»ûm6ÞkѾü†?óVºðóÐ;C™ôÂôe½°3öÆi/ìÌtxxåT{KÙµÙ;ÝÔó=¶·¬;¾wê{GWXÝqÉ6Vu33Òù>¼ô¸>ÌpýòJúg®–wÉ•²éÅ]¹[:gÓÏK=ï7èá-6Úo¹ñ>÷›€ßši»‘Þ¯¹Û{åîÍ+'þ¸ñ½uÁŽéM–m¸àž>Îùùƒí·ˆîî»a§¦ÁÃûŽÝôË¥«?N0\3lOæ—SŽ®}ïϪ¹?Šß==ïw×½tô½ë=]3ô°ËF<ýe&Ý°ìw^8õÊIýõòéâ}‡/nöî½rï´Åæòlæy׌ºêî„çtKçÍUëx÷šûׇaúç—ùä¾øKçŒfÙDw÷9èìß´›n™ô•¿ÂÍå­®WG~ýîù¾*wÈQÏ»úäôß­C«Î'·Áþ8ÛYMX¾¡÷ô òÃyŸÜ–~­kfÓöØà“Ï»vÌ°ö¾½E~whðÂÕ«5ëx¦c?´wÛeóü9{ð¼wh7½«9õÌ×¥¾×—0¾ÛË3lÔ?ÝýØ{Þ]†Mv[ô~¿»jï'is•7VON|®íÄú`Ñ «96ÆóSÓÝuk[lºÁFy¶€çÂÑÏ2_Ú +õÜ÷Î;«ŠëÔ;ó,›¿¥µÖýV¾n=rºÛrUöÇÙ›åÒõ¦®¸~MýîÀvë{÷}37%~ÎÝqØn¹¥{:twÇסÁ£oF;ß˽Gî~Â3“Ì'g¹të›h†mº ϵV|îì‘{|tü<õÆß;´÷GÂuŸeSLW¯Ü‹÷¼?ƒ¯ Oûk´ã‚Ι—ÖÜ_2¾^þZæ碻—wVg‰«¿ÃûNYtüŽ°o¶Ý’÷¼kwõÂ’þžo¶|¢KNÞÝÑ¿Ô''}ïŒß_–iû&Ÿ\ʤÑf:õ¾‹öþ[ü[Àó¿?W͘Ž¾ºê:aíž¾ªÙtl·¬gïèã®÷ âéen¾î{ä´½3›Îïn96âè»­omyŸ\U¼î[¬»/ñÆ¥½të‘ÛÖlzÂó*yã Ï‘Q¯k‡m·¥–¸yzae‹­î6Ó}',çÓãØ\ÝÕŽwÞo1Ï{S;ä¬ï=zÞ[Þï³løî•û`åw ½°Àv¹¥–漏÷=ÚdÛ7oÜöÉ”²érK×M6ÝNç½ôƒ¤µGß{Ça¼æÙº¦»®[63Þ#×=:ʼqK<Ã#—úfä•ð¼o^9î;¡í–%¹ÈÑOûvOw»-òwñÎ\ž ü^w`û¹øÞ§«ï7V Ósíûã.´ïݺfÂÆ*tw`¸Ï¦_D®>¼@× o¦S&}hû-ºÅvþ;á9üîŠå‰¯_ÉýÚqõ‘ÜЯi‹íFûäà•9,¿ñù5öºßpÏ;aúýàú½ÛLWœb;|î´µ*8\·Ítî›ÛM}œ¼îàëðÆé=~÷¼G.üûãu¼S~·V]/¬m´¥;úsÒÝŸ}?ì¿øzÖ3óÌ{l´Õâ{ßsíÝòk®w&뎛)†Ï²<Ûí¬fÛ-ÒËwtí{wù5tÉ}(¦Î?|ç̧yä>Dk·9äØh;Ým¸P÷Ìw»g÷tβÁ+÷ûS`ùJ‰£ËÍgwõ’çÝ°Û×cN=rº¡¾¾¦]3ª¹ëf˺çéäwç ÛFæã¾w`ø²Û&ã:ÝÔ«Ú9C½°ØWÕmÕ-ÏÏÓÓ^z¾Éæ}ïuÒÜëȨ×\6Ýüï¾k†3évG÷Ûªª³ïZÇLci¿;òlÔ3ÓLo´ÏáwçLz‹òlÜïžk3¦ÓÖ*÷ÆeÝ°Šç¸«k.}YçLGûÞµë6Ó¶û®˦«O:{º¯i¦í¨øûèÈczâçáo`9ùãzÔ%Ç÷ôža{ì‚Þ8hð}‡é}Ùr œûfú}Úmé£;®¯»é'§Þ'Ç\Ý<ïÖ!Ç™t{çä}ÏžúãYžÍºfîž>|ú¥äÙˆ³»ýtÜÐ/Tw/uÍð~‹vȱGîÚ4w`»vÍ\ù9Õܯ£7î¼ÝåØx“Í4ø°­jþ8ÛYÍûã°Ë¦ýîêuO<ýöŽ:Þ³®w½§ žOhÇe‚ŸLž–S×»t΀¯O'ÔùŽlºvÎHïŒn±M=~kßûtI‡œyät¿¥„åá·iîšIannØ®x¹úlÉMÝzä^ßÈ÷šñtÉ°½ÑÆê÷Ƚ›7.õ΀·K~Ím´WG¿;t÷¹ßdûÔ;:aúÇ—åØ>×3ß;qsï{ÿ¶þ™ŸoïÓŽ÷ô7ü|©îNx¾b<ÝõÌÀãNýqø­·tõ»ÓSÏû’ÎwöÉñ-ؾ¹a9ìªrï»ðóÊæ–u½‹öîúã¾Kœn¸lYÇ;st퇭ùíôša:pÙôa{Gó釆ç˨Û›ßX=žó~úá2íýHøz¹˜ÞËpý˜ºfŽE‡w«=Sï÷9Ïf:!ï»ë‘WlWŸNTƒŸ@WßûcÄuÝa#¾îwV§.›Ž{ú£tÍ`c5pöôÛzÞŸžm7ý…¹zéŽþ,z;yÝó}6퓳í§¹㕧ÏÜfúL¸ùLïèàë„ço†ãðÊ%¾þNúû‡zÝçì{×ÕOë|ÿ4ß{ʬsÇ»í¶¤ß9GÏ6Ó¿¼WŽq¼„玟ÿµ;ºË¦‹þ¾f½3ØmY“~XÛMç[:uÂrF}Ã~oPܺäÓuÏeÙv‹ëC/ìfÆÕ+™÷}Sñ|Sqœq=ßc3<7Ÿœqôï¦W­6ùÞëvSw<½žyäjtWßñÝ°Ñ÷ÎrÒ›{Þw€á¤¹7l‹ÍîêÖ5«®˜ÿ{Ûzf4Ë&ºû>åÓqKo+?o+¦Ç<›Ûf#íýÀôwÅöCò¼Ó®ªvÎv—t½—u÷#é‡íq7lýq‚é¹çÝéï=Gïõ­ó]ïé}‡ç}éCçŒÞÔOO(ËF;«Ë:äÔÿnwôSÕßÏÍ#‡Xñ¿»}Õ,Ëæt÷‹ ËÝ>›ï»¼4Žîrlà ˧_2O/ÞUñoWÀuÚW‚“]—ܵäÓ5φ®ñÉ¡Cîšoèä‘»¹¹Îîèù-}Iß m±Ý*–£KÎ|qù=ý^õ÷{÷ÆÔgû-ôoÂv×g¶¼ëݺ䲶i~O§÷øhû-’KŸªOîÑvV‰§ó{én“í«ä{×-6Òß©CîUzf^_Ó^‹ë™áî8γ‘GŽ;agW—<Ûtwõ¾Ãïîw[¸sæCrlž£ã¦þi3Àtê„M™6ëŽÓ»zÀnÑÝ?ÁÏ¿¿•«».XÚWýþÁûYüýKü¼Àí¿ð»Ó}…µwéŸaß»qòUÙO_O¼öØrLY¶µ ÏÓ7HsgŽ®¾8çyçœ:øxE;g*¦+– _¯B‡‡7n7õ-ñºç=ïŒë”O¯ùlºå×ðø–î·ÓÕWÛ±Uî‘«×ç]7\Ðç¸zÃqô]ÙcS¹¶åÙ´s¦Mš»øÞi?=öÃÒÖª¿¡'~ΰ]òÉußçGŽ£ºlz·tC×íôÞ‘êð¥ŽwòÆõ°Ã¦ü¼O3ŒëÇ)‹îúa}ïÌé‰ÇõòÎ*å×Ô+çuwó½{ÿ»â;yÝÒ%7Ð\[Ö'7À›eÙJù5ÂsðõÈÓ±Å_Ü¥ñô«Ë+Åóásö!í¶\9œòvÅõ‘êîÖ—þ¾¹Îö[ÀÍG¤¹3¾#“~SÆrôÇÝ*7—¿%Ÿ»Þ5ÏFÞ8ê‘ó~zôÂÝkF}¢z|âäctÎ8<ç õr× nêÆÑ%Ãý=3ÜýpÓ,Ãö˜eÒŽ?úŽw<‡éO/â³>XõÈq7,öØh—mö"šû‹ïz7¿{êyuùµùäò^XÃs˦'lŸ»^XÞnA>}N˜n=r~_õC·[°Éfýq_ig5óÈÙ–KÀïϤ¹«×:äÛÒ=õö¿Qs®}rÂÏWàK¸í}Íõî©oœ=yälcuÝnéÐÜ¥s†ïçë´ÅûãÖ-Çæ{gpO¯(–óM}K°¼²åwV×—í²mýCs7í~÷*eÓ)—.¿kÐàÿÞ®û›:úãj„é;â…ç¹]ß'·ºßÁÙe;½A>9l­Ú7åÑ£îŽm6ñ»;Í]¿-ê…µ®™¦l§·œG®µÔ‡ßÒ]Ï;åÔ™›[yãxkµcØÎy6øÞU8~ «àêÿÆuäÙ4—qý:㺚MO™ô®ÝÑríýÈzãÈûŽ¹\o·9Ë©÷s¾~ÒWÍyú)ùãN]GlÆÑ ÛÕó~ÎØ~®˜nýqgÚ!çtwçqh',pÝrê‚ïY†-õÈ]ú,›Ûa»´Œz©vHýq¦Á[l†åðÈQŽM»fÜ ý:»£È÷.¹ôÛl±íhï7Ö4÷›;ëz×ý–{ʱÝ[w?Âtë{÷\z»v¼sïL–g³ž™ eÙ&”a£[úCÎÏ)›Î½°OSòÈq׌í·9èîÖ5ó17¯»öÄ–ðÜûÝ•§çžwôÍ|O×[z®¹³_îçk±ò'`wÂôÄÕã ×ÿ’GÛ-èˆ Ý°+™/Îóõ5ï‹ÃMÝõ®•réì{wߊÝÓÁÕãß›‘¯oÆßÔ3S!ŽN^wÍ©«î^õš»l³U)Ç–öU·$n{lÚ [#ŽŽ¹íší¶ä¹tº£Ç½ôšyݱŽ|zÄò]Ùi“üšjî;Þ#ÿn®ïrŽ ›l»MÒßÁÏ[¶¯Ê]ïKºfLs—¿Ž·O× xß÷¼Ö¾×V|ç=6¼}l«¶³®™¶äØÇ\× vÙ´Gy¶e]3„ç¬Å[ß{ÂóChîÔõÞe_\Ö#?:¦ zßIwïѾªòõ¼CîÄ´÷êÓUdÓ…³ŸR—¼î%®®º;yßó=6¼³æÔ}Žu÷sÚo¹PovØ.”¯[w0œ=ðtøÝ‘_Ó;:ÝׯÔ'GÝ3×WKyºm¶d\}títwàú í¸øNXº§ _ÝPžÍuÃÞoç{:uÈÝßQ&=ÛacŽ>¶œzzÈ£ÓŽ wÃfú;÷»OJš»åظß=ÇuxÞ§Ól_•½ïÚ k»-Î÷Dçû-’KG7,gÒá—³­Õl¿%Çóðœ{Þ‰—Ïò~÷ûÞíaÇe.™6Úd‹ýq„éšG÷«ŸÞóNÝüq^|Y,{ÞÃfúç’:ºßE{^¹ˆávÿL_Ñ{ºÇrë˜Y]])o·`+}ÕòlœM_]OomÍ2é–OÏwÓ=_7ÍÝ2l¶É\ÒÝÑ9“ͱÝê>|ïØc»¦«O.ßoñ3ŠçšIg®žeÒ'Ølaï;åÒ Ó§ú¦¾–üqÆѧ–?Å=6ÅóGÑÜK½q¦¹—vÙt_7ô¬oF6\^)ÛƸí}&wuãèo⑳lºæÒßá'íÝ4øô®g^wͪ$í¹µ<¿æöØì%Þžt÷/Χƒ›'Ýýû“:a¿¿Í'G}ï_rCÿ[àøŸ¿‚ãÀrÖÞÅ÷Îؾº²êüî~“-ë‘sÞ÷5Ͳ­ Ž¯)žû-—Ò=úÞ9ŸoéÑ·a½q¼ÇVñ¾¸ôdÇEø9^ÂÏ}w\ÀîðoSγ‰nâ<ïî–žp«ð¼³/Ž5wó¼?!Óö¸Ü÷äðü…tø%·ô×gòƽ˜GNòêØW5߻Ϧûžwêxw;«ÆÑãßsÞY—óéȯe»éº­*X÷Uã}®>9ÇÑ¿Uÿ Ý}y/¬v»“ïý`yÄu¼¿æu_aÍ<·ô¿«ÄÕm»%zâVÖü=ÝñóÕØ ›ßÓ×Ë×6¨ç}ݶU×Ùï^aL'¿\¥’õÎl*žs·;ã¹í¶l9ܦ`yÄúj~W÷¼úÞy·¼ÝõÌä™ôšæÑ‘a‹½°a[µ¶ãýqê·Õñ¾Çï¬bÇ¥Qî‡U®ŸdÙvå¾z¸§óMÝö[²þ8äÓ•Ÿ›æ¾Çù5é›i¯{[6ÚÐó.O÷Ó¹ç½M.xÞV¾g¾wäØÀÏSF]wVÑóÎûª¢Á?L&~‹Mp<à÷|wt~yŽíÑ6\´ó:b§OG>wÙ´w†7Óãm±Ñ¾ªéî^ƒ•;:gÙ¬kÆö[âý<üÛ[ÙûîqýqðÉùÕ’ÿ]zäô¦.ïnèè‘ÃnKî}§}6ÝUå[ºòt»©Ç;:÷ÂÊvËŸˆáÉ÷ç/a¹b:tøý®þÅý¯iîØb[å/zgÖl?}ÍûÞ§Ë-}czg6èK~¸ˆçëNƒ×nØ¥=r¤³ç]3[Àué†Õ;:nêòoU¾¥oÙ†KÔß·Íç¶Ó}/ì¶æÔ±ÁVwØÿ®ç¸^·L[½®°åí–ºóÈíJžm‡ð|§aÛl¶•Î|Ó{Þ‘i[†íœa£žízoñm½¥üÜsséšiïiÝ6VÍï¾O›éº³ -ÎÞ±ï·8<šûm­z\ïv–øÝI{[«)—.8ïüîGÖ‹ßqŸÍ¶Ø’æn3©?Žúa‹×W\ï+GW\ÄëãÅ ið ¿É'g˜~šwÍ@{/yßm/Ýòkç©6>Óßu¿Eûݹïö[°Í–ßѶáÂú;ûä.8Ófùt×=q—Ú1súg´öÚÝÒWOIaºí¬^—°üüÖÝÓË[«7¤½ßp† 8®žwáåÚ9sï»äò9É´M莮<}b_åì瓳 yßÅ#§ï´Û2}€GÎúã§9¶SßL ËË>¹§'ÛNgŸû3iîð¼#§þübÝqðÇ)žÓgæ›Ñ†:÷þÉÖ*úÞg{³=¶L{O=3ÁÇú;¼qÖ9£}Ý3ºË¶i¸žm¶¸¾Í°mj¿ŒúÞsòéÈ£K¬~k¸­×äžN¾wæêË·¥?™ô¤½×JÞ8˧»Þ™ÀÓ묽ûítë—ÁV:ÝÔÝ~‹`ºðõVcùƪßUµ{ú}í÷¾m±i6]‘~Xõ¿O¼WîA{aèM©Knêúfìž.YõÇ©ùÝ5›ží¸Ä¾÷'ï•{~Ê2ê´Ëöbwõ¨¿¿p'¬õ½û|:éíè|Ÿ½7'Ý›-®ãÝúã–sõ™÷Èa»åÍüqoª»Û?¬KNîè¶á»éÄÓçŸeŽ®Ùtɱ×ËØžòkÿýý/qsðtÁqÃöLw3”O§M¶ÕµÇÑWW©#Vu÷uÑÜ×u›ÍçØÒÖªÃuéx÷»lÀ÷J¦½W|çûÆ&åÒ7Õ_Gß’U×÷n¸^ʨWYsß²Lú–eÙœþ^KY¶ûätgÕ›ôÁ€¯ï®·U{/óôè{çíôΤ›OμîÞ+Çš»æÚ„Ÿ’GÞwdÑ9Ëæ=ï”eÓ [Ïéí|Wï³?.÷ÈIž¹yÿ„8:éî ÓO ËOœéïÚ ðû;«Àó€ïãé¶γ\ºvФL:òlY6]8úàòRvÙü~‹fÛ†þ Ñ;¼þ¾¢-6ðu¿Év­¶‘î·äýq¼ËæwU)¿v;Ò®íƒEovÙÐ;CÚ;xú-ûßµ73yìeØXsÛ>:ÞÇcÜÑ‘[»M¶q–KG÷ ï°=L'ê—óýѾºË&\»l%¾Ž[ú3=êƒå}UÞJ×.9Ùpy¥Õö»¿˜çû㠻ˆ‹n²©ö.]3Šá^§»ºÝÐE{×î¸ôæYÜ{ÀlÞfûÇÆêü>¹l3ýƒö[G·=¶Ol«~þ§Àó?Ë7‡îþ'×Ý¥×ý¯tÁâ¾¾šáú -:gÖ¤÷yºhî–c[5|÷½°kÚëºfÇ×ÝÆj…¸:gÙ6ò}Uͱqžm˸:í·$_Üf|ì{/ßÔ ×Ñó®}°öªè…E‡\}Ûa{z|ü¼f[l5Âò|¿%þ¶ûù.uºíôÆrß{›l†å†Ï³YF½å:äô¦î8»ïw7,·þ8ÛM·{ú¾bú~º­ïóf uÉi7,í¶h®8úéîâ;$ß;´wÛL—Þwx㺴߂¾÷CèïrK×^XâêÿÚMÜüX0ºãŽ{ÇÙß»{±ó]u÷cº¡ónzÆÑûŒá¤»Ë³\zæ}×;:õÃr6´wî…õ«ç†ãy6ý|`]3ây\–uwtÍ\î~¡»-蜱î¸+º«ÃóŽ®÷äw/÷Î\ƒ·_Û6Û(¿©_çÝ°´™®¸Î\ݺfø–®›é‚ëÚÇꢽß3O‡O°ã»{ꌻ§¹Ô3£~÷ûI¹o†îècÙlA7¬uÂ&ç^ØÜç´wì·<úÎ÷øûiš¸¹î¶öزÎà8îéé»`´ ÓÛ.ŸÞYÞ‡ßÛ:ÆÓ; Ψwå–Þ9´LÛ2_wÂæû-¼Ýïèœ_#Ÿ{ðü˜=®÷¥Gî~¹“~©s}ï§ý“,—¾¤o˜~f7õ3釵›ºÏ²Á/Ç›lÐÚ9ËvŽ^XÞe»°}Õ°™ÎÝqÐÝ•£_ ­÷=ëx¿$,¿Ê¿ê‹[Ò#‡nwÍ¥]¼]x¹jí⇻fL·ÝôtW7ß;÷Çñ†KòÆ™ǽïÀôxG¿ó]3ºµ~³ÕtOÇ[º©¼¦­U—Q7í}’ûãþ‘Iwþ¸Ç‡t;x$ßû£zÞ±Çf¸þäzaSÿ åÓ5þäoêQgòÚ;¼ïðŽRví%ϯYçÌŒðÝ°ö ½¿:Í{äG×^X¯»¿e«Œë¼Û¢š{ž_ƒÞ®›lº™îï蟪¿ƒ§Ë÷?Åñôþ“[zÄî¨Á¯P†1=ßm‘Õ¿É'§Û-tO_cÜšåØÜ-]t÷uáçê{_Ï=r´Ë¶žüîçwçÝ–|C½â4÷-é«TÄïΛ«[è‡]Ò ‹,û㶶éKûªÎgýq)¿f>¹íè“#Ž.›éæ“£\úŽiðå®êÍ}G4÷]ßërl±ß}×:䈣k–Mñ½¥<=iíÔõÞÌø¹óÄyݽ¥¶=ß¿Þ·¯Û-–G·=¶ÝZÅ-=ay[µvÕÜÁ×}FÝqü4»v˜ßÒEkÏvÓÕGÝqê‹SŸ»õÈ|ýX¸ºî¥¦÷ú=×û~~¬½3ìëSŽ-ÛUûÞI{§üšßc3<þ8íx?c,Ï·Ó¢»{Ï;²éØP¿àîÁtÊ¥_(G—^Xç}êK^¹¡ï»"Ïû•ÝÒ‡ÎwmºûwÇ]‹WÎúf°µjÛ-äw¿ÉºÞE‹çŽ÷„ß~g>¹;—_ó=ï÷w÷Y–Mð\¾šcãí×5#ù5ÚPw|ýºÞó=¶lcU³k¬»?¦{úã¶[¨G®Ô7Í=ϱ=¹[:¼îvGg¯ÜŸ»Ë³=Û~ú«ÜÓgY׌xÞgä‰{Eo¶ÓµGÎ:gf®ÖórÛp™«ß=ßcûxÿ Ž÷9yäÊ›lÖ7“´÷/`úÝÕ9Ç&ýÏNÿ'¼üOòÁEoüptO_l_gמ÷¿ºÃÆ]3Ú'x¾²êûÝáyOuêwgŸxúÆ?0>¹uïs×½Õ\sß°½ôÜ#ç0\oé[꫺;zÕzbqO—Œzè{ߢNØm×+—°½VÝvž÷šn²m‹/ÎwÉi6Ým§Ë=ûª¥nXÞMÏuwŸQo4–ÜÔ™¯SßLÚn ÿÖRÞÞb½½Ù¤-6ʱí±ï6\°­º·§ýq{Òç¸z›m­H×û¾dØÚȧ‡ÿÖQßÏòŒ:í¶Ä×åΙ.yßÅïnþwl­Š7Ž3éê}ŒO\½«]3G1¿–¾ ×iC}ÉݺfŽUs~wñ¸ŸŸP×»ùãN±·*¼{éÉL?£ýÃrl¸@‹8~J½q.§³lÇÕ¹o†wÙ.¸ON{äÊÏýÎjÙó®XžiíÚõ.˜Î9puÓÛ­Vûfà‘SLŸ{Þ7sm:ûH<ï†íâ}¿%¿œÃrÚ[½»Ñßw²±êvÓÕ—ð|,wõô{,ýq㟴á2ÖÍtÅwͳ=d™6Û`³;z¶Åöyã´ó=½Çøï’I×îÁói–OlæÒàY{Oºû‹m¶(G7\7¯Ü+qvʦ“ï]»fÄÿ®¸>{5¿û›ï{ŸÉ=ÓÞÝÎêüÝåÙ–eÔ礻Gßû<ÃpõÈ}º-—õÆyÝÝrléwàç‘£ÿ'Ü\ýïõÇ%Í=ôÍïõÇa›Ím«ëÛŠÃòe°kœI§íî…õ¾wÁø Öᩘ¾Î|½¢Þ÷MÉ´)žo¦»­ôß·àÏ9˲á{èûÞU{ ïøÝô.4x§ÅéF°\7Ù\×Ì‘à9í¬F©k6}ùv sôã“cóÉ1GwžwñÆõ Óõ†Þ‰æÒOÏÌû®]r笹Ÿùž÷ìžn¾÷ó½[†mPò»û¾wÑÙ/’ÏÝñôÐ7£]ï—n¿%t¼#Ÿ~5´=6àzê3žÎ=ïxÈ©—øy†í#xãFy߻ȭE|¿Ëqné·è‘»sØŸ»uÃJlÔÛï´?Žyúý˜ùzâçè“›˜þþ0«ïýºaµçÛ-‚éèyOïQpÝßÑíOè“ ÷ô¬ëýñÉßÒ±ŸÎY¶eû-ì}7L¥=¶ê…E6ý¥ä{W®îºa—ì«Â#G°oî†n3sæén¿%{úLJóÈ…NØÏÞaûÐÎ÷ÏL{ç\ú‘›'O\ÒÞÿ#Lÿ/b:úãþ ×½Àï?ÄÑÿ®¬¸9æé«è{çŽwÂõµ5ãëkê“[§›á9÷Ãb[•»f€íånX˦ûÝôMê›áÃrïyç|:éî[¤¹/éšÑ{ºãéØW•Þ8Òáëä{Gߌí¶Ôž'í½–ùäÐùŽ½ˤë{l¬õ†ñôæ®yÝY/wÎdY¶¦Ï²«—ºfx—møN]ïm˳¡Öo±µÕ÷Þv7uòÊñ¶*~s'¬xÞùŽ®Û-Ë:ßá•ëÚ]ýˆzfº¸©S'lÊ¥Ûëñ~ŽÎ8î…í§o\/ÓÞûYß»n¸ØMÛª±3®ªÙtõÇÑ.ÛÉYñ[{Ýó|z–g“¾¸¤Áì^¦¿ŸSïLÆÕ³lºï“»Ì±} ?G®M5÷KëzWÎ~E}3™ß]=rÅwDÛªœ_#®¾~­Ýqe_w½C{G6]¹úÝn°a¯åVö[Ø#gú{Þ#'ø±uΌǙÿ÷[îǾsfìù¹ÝÓ½GnýqSÇÓÝ[Ö%§Ý°ÄÓŸ×Uò\ýq Gw_ʱé^ºæÓMsvxNõ˜SŸ•òl¸¡k7ìçÒ—ÜÓi¿å]3êïú|ߌtÃÎy;ýÃòk®wf^ÒÜ‘eãmÕÈÝYw'Žþ_ßzCÿïðõ”_ÓG‡\Þ K»lðÇ¡ó=ptôÎðŽË¿úfôënê”aC>x¾F˜®]ïëêy_'<·®™Šùà9˶iy6õÉa³¥Â½°¶¡n]ïUË©S¬Ë¨n¾U͸:ürÞçµwxÞ·…Ÿ#›N9¶Ø3Þ¾£«Î'»é»‚ëæã}USwþ¸Ý¦põpWçÛºl¶È[£Õ(uÇ5›{ÊÑ›{Ö;c{ly†:b÷“ÏuÝYm·ÝÖªö½ ¦èMòk‚ïñ¦ÞÆf sôêŽëè¾jÂõÿÕùÞMZ»pô£nù¦~Dš»yåzî¶Þ ½qG‰£§ítÊ¥»ûyÏtwÜÐÕ‡Lúq†çýØÛ?íSfu÷Úf?Oý°g§„í%L?96ÜÓGgLØnK®¿ÃwŽ-6ÞZ%ß»ÛdËúÞ#7¿ üšqõ!ÝÔ‡Êч”cf]3Ù¶jæsçÞGG†íZ÷UG7Ö9coT`õˆúf²®w펳›í²ù®÷;ʤ[.Ý:gTkÏw[îé¦>1<Ãç>~Ⱥ䘯Ow¾wÅpûÛ¶êÏ°ÝÒýܲlwe®.=rȯå;«æ“³½Õ í·(g_ºÝ’ÝÑ'àèÒ7>þ`¹ôÝUµÕò†úòM6ÕÝãßìu§­Õ Ó_”§[VÝo¦ç¶2OŸeÝ°3êœIÜÜ°Üí±q,m­:Žîºãè½[ç;6VÕ7—–%3èwÜüãËiîÿýžÿ§Øn9óÇÙ-=ÝÑËqC_¡;zIs7\Þ ›£8— çƒê{wM——®žUáÇ- _t~Ü’ÎèKœÙkúŠ³Þ¥¿eµ•g3ßûªäÙÊ }Åîéð»¯]_Ï·ô¦'ýûß6pWß\úº¿MáÏÀ·‰,ÛF{ïî;÷ªçÞŸ¾%·sÙ¿ooÅÞtt±áÑë.3úö.9r•5#y6ëdó>¶]™Íwÿîƒý.½é΄Ýg/Û°ãö÷ ŸÜþ¡ý}èù5hûçô¸{W_Ù3ßs;8°GêwÏùteÈ o†³º½fvÒ±s?³îtèù¹rÞÏÄ÷^µ¼h÷Y“e;/y6°f¢žÃëÞhø¹Íæñ–Næ{`ǹ¶—ΖK×spaoØÏvsl¢åÎ…Ußûm[Û»˜°…ù~ûØ­ÞÏÝ÷þpX3ê“c?t^òéœËÉs¶ûãcÒrén©óùSdÍèŒþžœøã^_b6ýå…l¾× ›t²uòÝÑÝâ¬wϳÁ—ïèqï¹3¦ç_õï¯0£§lºrä ïàÍlÕñ/Ý»ÿŠY6²fdV¯zþß·žÿöÕöIO¼wfØþ«{÷†9c|Ø1Ìç2§mǾWgöÞ¸ßÒÃþ}¼W=rèM7oæñžõ«ö&{ÒÅæ·ôÒ«:!¼™VwzÝ·OªONætðãÐÝâ÷ô´wŸ2=Ï}«³É‡¾ôáÎà–.6ìÜ5ÃƬ:ftñ½×\Û@¼î®ëðÉ-hž:®œ™ýpùλú÷[Z¨»÷EéV•»ÞÓáëâͬȜ¾,·ôUñ¿/¯è=]rê¡ÇérG_G'ÛzñÀ¯¯y[Ø»¯­“ »¾±Î^UçÎè-}Óoê[>¯odÜæfêdÛ*þ÷²ßö^¶¢ë̱mÅ™}[ûØRËŽÍå;þvèýŸçØbgúžè{Ñúñ»ƒû®z.œw½§“÷~pôW9rGÒËæ>¹cïežæô“#Í°‰/NõüX4ó¹t²eæ{ɤŸW}?ǾýLX°Áï^5ý,åØÐÉvn:Žþݽ»–_m×½è9ôýºj;4þ8pg”!GŸ\[Ïu›Ò±êšî½-åÝç<Øqéqv·;Y3÷œÏïåž®^÷–7Ny3„ 96æÓÍ×ʲ¹7.ÜÑ_u÷^sloÒ¹:Ô•ñþþ²lo˜Ï…GÖŒj¹ÞÒß“çýC3éâ“ûPœ°ãºzVün{wt¬J.3zݽK–­•K7ÎûʚќºpgxGCî?²ãxKÿþŽŽýýÖòFÏì®wuúÝ{>¯÷TÛ•ç\ز_ç¬>5}2ûÞe.7.,îè˜Õ½ÃÅöîSÉ+'ýªô¿“)'s:r3½éÓ’c›qFlɩωÿ}®í‹kîè³îwoõ²g·t÷ÈYÛÂ|ʦƒ÷®=éʃT¶;™°qV§'Žwõ%ö¦gï{£ç+ÐvóÅ-­w†3ú2ïè¥ÃeuÙ2éí9}eMxïkù‰¶›–«¦¯Ñï¾!.]¬™äußPoÜFâÈm²¿E™ïÊyß–yl¸§;¶ù½+>wÕôzÞC6}ÇýqUãmFç¾}ß=rȯ¡—mO´Þ8ó»ï‹ßÝÙ3Ê…µ™Œw÷½Ï{ÑáKî$t·œHF~ftïc;•<[弟˜×wuìÞ¹ƒï˜Ïëï ÷»ž“ {qÑîeC§*2êW6³_¥,[ȱ)Ö™ï××èp±Þô›ú½áÞݲk×ÚÁÖî[õÝ5];Ù";Î5¶;ãÌk†Ý-¦åô¼ß»ï½xÞþ¡åæ‹{îêæ…ÓÝû“fØtï.ßt¹¼:öõE¬0Þ?ÞÛÙôwÜÔ™c“þÞÔ• ë6÷Ç¥žÕ/c¾SÓ‘gû¢Gî zþ+ê;<ðÍMlØ?¸£ÃûŽ¾tyEÓÿ·ñÌýoñº«7ÌÝ»Ã+7-·7]—îê¾sï‘93®úÎ{zöº×›ì!“}ŸîŒw­öËìîlzKŸì+gFuܾӞe+9¶&·65úU§D×ÙáBÏ»õ¸ÌÊÌÞüžS¦zVg¸ƒ×lúì<|ïóaFˆÿ}Þæô3mÊœ™<ØŽ{:8ï‹ðÉ)W4}‰.®åÉ#·¼$\دœö«šŽcN_V2鸯¯ßû}ïΘÁ-\غ“_§¶7Z®ý-kÑ·±.;÷õà‘Û$wFzVÞ{a¾oEŽœu²EŽÜ¶ïÜéÛ -lXåÇínƒí.³:Ø°ÒÝÂy}l»šKß5ÎŒ÷­îc6·™|o_ùq{äÍ _õPwð‡IÏqO?: 6kù¡ÍèY×Ã=]týˆ;÷®Yý”ùµ“ÄŽ; »÷3ϧk†­Õ³*·ôĆ­ý-¶w?3³y“m» wõèuwÏ;¸°Aׯ#–z.·tøâêM]™3ÞÝr«¿-ÇÖÜн—íκÓqC¿unÜí}Ȳo\êm¹ÓŽÕ{ÕòûÀ†}d¦ ZÞôµ¶¾zÞ§mÿ.9¶Ì„)÷ó©¿¹³%çؼ7ÝYrî“˽læw7=oæóÊz&¬ðÝ6£7¾¸ éʆ5ÆÌ<æs™Ó¬G]»VÁ›YH¬t¥ƒ1ƒn¶Ì…]–Y¬™0hV|^G.}Eöïè\u¯Üª{ßWªçÝõÜfseÍ„¾UïZ%ó}c-ÜÑ¡çÈ´µ¸°Þ›¾ =—Þtô²mŠß}Koêí®ÕÌé;â“ =«©kU;ØÔg3úžj:˜°{žcó<›ÏéžgÛ^¹–>ô¬Ðû^ù2Þ—~¨ýª‡G©kõ8²ãl÷~r$s:8±aN×ÎtÏ´Õ9¹5ëe6ìi˜Ï… {vNM¿Àþýâ,ÎëØÁ+sæòBrm—¢é²w¿¸¤×]³lu¯³ºÝÔÅû~Cvœíݯs6ý¶øä8¯ß¦9½Õµj³:néÖÝr§ž¸¢í!džœö«Ö»úcôÌuÌéÈ¡Û®]sl~SäÝùqO®ë/O¢çO¡‹íÅ|r¯âƒ‡ßÝgó—è{ï»xà_áwWæŒÎèqNG6ý3ë:Y3ΑSMÿúpÿ»êyó÷/ÞÖC.xå¬;ݲè!ÃöGôýçÙ ñðÅýG>9íMÿßÚ߬òfÆÆFm6ÇWöí6¯{6Ý´Zî{scŸÐŽÕžgÚÊ\î,9¼÷ï“žQïOtv¦ëÞ½¼©IfÙÐÙ‚ [dÃ6o÷ó©¶Gnfj¦sN¯óùtà½ÏrÿîZou½Ù½c6§ÿ}^˜°sÞǦ³úÀ²lƒA̦Ûî}žsºøÝÓ ³ù:Óœ5Ã>¿¡cÿ¾Œý;zÓÙãbs¸ö¸Øî]{ÓÁƒc†ý-èP/9¶˜MGŸËÚºïÞ×ùGNYrrGw='Vu}SnêìpÙú«lظsß zî:{V·v´»e‡ÚüqYÓÙɆœúnðÈ-×ù|z.{÷ÐÇ–2é®ç‡ÊœI]l’gË»÷#xåàu?vï»3aÚ9jºgØJ›u±qFGž­k^§žwÌéÜ»k[îZ5ÜyílA¦ ™tìß/艻ˆ\Xém¡?ÎzVéu¿†WÎoéî“ó¶ñËy~͵\{ÙîxW—{:öïìp¹M÷›úÃýý_ío ݪÍïGëMGo‹°gàuL¹'²aŸ¸w~|*œ™ç'™ÏÁ†%c&gÓ­;ý%ÎéÁ+÷šuÝïè¯2£û]Zþj_ó¾¿û;Ó½·¥ùû3t²U=÷þô¤çŸŸdĆÞtìâµ[{wíX–gt0ßËþíÛûî9õ?Ôrò`õe&lò¼-º¯;r _f 9Í¥{wzõÆaFïÈ°á÷¤°a… ˯õµð–n^÷Iv¶LÒïÎ{ºxä”[´<ô¦ç^Õ)ën©ûøÙ™éÖŒ>zØê¼>—4Ý3ésÎ|Ÿ¿{ñºû}ž½-ΘñÝ»u·,ø¼>@V½èû¢ùÝÕë>héù¢ùä¼kÕvî–I×üÚòÒ¢t¥/9o&ïß Ö2é+ž]£¶›_7tïa³\ºeÙ´·%øß3sFrëÂzßØ»úfš×¡ë`ÈcF™ïÚ­ªoûœo\èb“N6ÕuÍ¥3ËÆ.¶=æÓ÷vÁsM猞îêªåèpŽãÎŒ1aã-]Þ‘{䪎ËÜ®ùµ#ñÆ…yý¤ô¦Ã'wBF,zUOÈ™ ÝlÍ|ž9rg§íÝ»v³I†MólçgÒ—n3úYrr;G/Û¥ìÞÙËv³é—ša»äÎýêú2t¬Öù\c.¿fWú-îéøß¾÷˜O÷ûùíÝ­|ï|ï~‹ž8|LÓ—9ݸî÷œÏsŽMY±Áÿ®¬™GøÝé‘3\ò½£[š=µt«¢¿õ0¯¿½Êëèn!CN2lo~Gÿ ¾ëþݺV[3é±Ï^¹¯ÏÐÉ4þw¿§×¾Ua¼KÏjÙ½Ãgß_” ›Y3JÇ*yï¿Û,¹ÿmúVÿûÓá‘ûžÏGÇÊmt|t¼uGç¼n;÷žfÓÇz6£÷ê|Ž»:º[Š–[g XïÖË&Ü8rfckvï’Sgoú$úZÜÏ ÛTòÉ¡§Ex3 «ùtÛ¹Ç|:|r³’Q‡?n.òÞ©çžKŸŸõ9}–¬wÓsîß‘Q¸¾g>ì·¦Ï/¸çY6æ×Ìÿ¾h7õÅ®½{ìes&ìbÇÎ=zÞ—V²ç]Ù°ËvOovï«E×C‡ ÷ï«-ß{àÎpV¯Ìíc+9¶5Ï¥›Gn#hºÍë›Ò—ÿÎ ¹-Ù½;;n«5«ãžÎlúÖÎ÷¬ÏûŽûÝóÎ.»¶{·ù\ré{²‹gËnå»sïnšŽ{ÙÙ;]?ðL›úã÷é;„Z}gæðHr¹ôcô¨ûl®¼ïpÑ;úñ·®CÓ±ƒ?u.ìÉçõ3paçŽwÊ\ºÏé¡3ý¬ÝÝ¿/ÍûN,æõK×õ”có9™¶fï~8ïÕçô«¿«{¿*îëÑï~{ë_øänB›ûÞUÓÁ“cϪðÞuVgŽ {vÎëIËù·ûÞÑÃÙqèPwû“±`¡éžKo2êȯ=»7ŽYõWö¥?C¿ÃŒ®žwãƽ¾µ:Ù˜I—<8ï9Ë=G:;\>„÷ÑuKÿ$oæëÓýq̧#Çòé_aïþÛòl¿ÈžIlXÙ½“Ûüþïwº«G¯{ýý¿–Qÿ#9¶ÿý;:ÚèøhËMÛ›ßÍÜ>Úèøè¸íÜ•3Ó“N6ô¸ŒË¬.Y¶ä}÷®UéeC>šØ°ÞËÖGoËdéVä-=òãúèOŸön¶~âÇ9sfJ:\ªß½<èzɵÍÐëŽ9z®žwó½3»†7?KŸœæØØÃ67¼rÊ ¼÷…z_×üZ½ŸZ»wfÙ°k_¨9v±ÉÞ½ÑxèùòèÐ÷åšk«÷ô•ê/ûvxߥ»¿u>_ikºw°¥LrmʘA/ÛÆZdÈ©÷̙ʹwMÇ£¶Ûý\¸3›èbÛF7Û6µ=.;Û1Ƕ#o{7éù.ür™Éì8É©wÞÓ¶zÞ¾¿;»V¡é7ã»÷e½);wñ¾gmïÈ£s^?9néúñ‰óf4Ÿ~rçó³SõÈ)K®æØNÏSN]y°æ‘»hõ¸\°C;weÍ\0¿Öüû•ÜÔ¡ãÐtc»«7žwëqiña¯c&ýš]ªiï~ã=lÍÎý¹ô;¹¥sn·®U›ÕïÄóú[ìÖ®3:sé-îÌc`Í”~UðfèsO\ØçGÛ» ?®å{ïàÇ1›^u½énA[˜ÑK_úkÒò×´w—ùüM3¸­¼¹ç:ÎùÜvðŸõ}¾:?îK³l¸£‹¶E='ç]~WλßÔÑÉVõ]|rÍÎý·ûã~cfÿ#þwæÛl^—,[`Âþñþ×òo uŸû¨Ìæc2«Ó§Ú®;÷4Ê„MY¶‰žqe|ïÞ|{“rSkf¢OM'  ¹)߻뜮ý-}ÞÐk·ô©F³ë¾=°ã0£+ï9¶YïdónÕ9ÓrçÂ63ú¬ìÛ1›Ï…[:îëš_Ké} þRŽ¼áÉÕ^6ìÝé‰ Ì™Ô³ºòé˲ƒ·ìykVwÞÌ2vïvCÇÎ{ö•5éY]Ysm_sM_µúº°ä<˶ÆyÝ÷ï®ãœÓ76Ý÷¾™gõ­À…Ý2&ì¶õ²U=ߎ,Xxã4“ξUß¹oknM:Ôw±/¿'ºn;wéfó}»ÝÒw÷Ùá²/™6øâÀ“cwºäØö}ïOÜÎé’MG>½ÞÖÛš~œnéî}‡~»/Ny3¼«+C.ðaÏÈ…Å=ýŒ^¹SÎçœÓeç~z[ ã¹‡Í3mà½Ã#×ÜÒÑÙRY3—®ëÒßrr~O¿ºVÞLÝÁßð¦®{ø›êCºÎéʃeŽí6øÝýžŽ9ý¾¥å÷-.¬ìâ;ô\=rÜ·ã¦þðغ«ÇÎtÉ´åÝû“t·hwºpa«ž{†MïèoœÙßÜïM—üqôÈIˇîൃíÝY°ï6£ -kæ#ÏèzKg.½v·üBŽí+îÝ5ÇVÙ°ÂzÇÎ]öï û[ré¿Û¹tíWåÌþ¿þFMÇËwLvï’I÷l:÷ðãã²{ïoœæÒÙ¿†»v¸„7)wuèùD`½»ç½òéìh³®ô>|q̦WM×N¶é©<§wõ¸˜~'MŸ-^9ëq–\ì[cw:½ï’SgçªðÞçC.]ól •ºØà““y½èøÀ»[][0 _ZpmGŽmÑØq±;}Ù2màÂ.U»1f˜c[ñ9}ÙüíË««Î‰e.}å¯v¸x6½j:rl«ëΞ‰¹t㾯E&,vïìZMü8²a»z[¨çšeó¶mÝ»çþÞÒ·÷Žœíßá}7õ0£Ë¾]ür•õ¾Ï~UÕ÷$¾/½é™÷;Ó8›m?’Þtê¹ÜÔÕû~ä¬w°ßOÄÿNŸ{Ú»†Ü©k;gõ3aÉa6—{:öðÞ•®ý-g• †ÜŹÏè—­lº²e”%§ÝªèN¿,;wÜЯ/-ˆ.¶ì‘ ~wͯ}ÿo|r·‰9ÜÝÍóéíLºv¶øœŽÝûÃݽìÞïéy‡†ß‹–ûÃÎý!ÜÑÑßB-lÊyž÷íZ}y²Œú³t­¾Ò/GÞÌ+öñÐóñƽrïÞb¼“óþr±‹íÝýqMGzîqùßý#0äЫŠîtv¨ã–n:þº[à{¯º=wæ ¼q*{æw«ò©÷=çÒÿ³>—ÿþ´ZX3!Ÿ>ïêãc=æØÆ{â““Îôqö©zËYrºŽ›zÞ»GvœúÞÑŸ™°}ñÅùï¾t¸L“7Ó¥ç¾w'FýîÓ³qïÞÌœgÒ‹'=.I×½cuîo̤û=ïÞuïîÜçÇ-ê¼N&ì¢0ä¨ëäÈi'›yå–é["vYól%·µÝvíËšOOl+k²s_ó,[ʳyw‹t¦ƒ9³á~9ô¬¿»úäÈyÎ gõŽ ók[-œw²¥[ºÞÔ…ñ¾kýéq¿'º^y°ìWµÙ³ºÎéΙ‘ÙLXñÆí'MÇÞ=ô§£36õdžü±ÜÓLËŠ¶û\ßûqÑìã´{÷\:¹3äÃbV?#÷Ýïêrc§'ξ¢ëÌ§Û zn·ôfo;wϦ_ˆ7ȆMÌˤW]÷|úÕõh»ö¬*óÝyïèo);ù»Ë£Û¬~ë·õ¨åw¥oUû[îïÈ»¸³Ûù½w«Zßjɱuõ·PËí¾ÞìßÅï^YïÖÝòDÏûSðÇ=Ù ]˜3™óÎ<Û«xÝmïþY3®ëoÞ.þ¸ÒŸNÜ»dÔSw 3mÞã‚úûGèL‡7Ž·uíp!ãý“syÜ¿kwË—p`…[:fô†!G}rÈžq¦tý·íÛ¡ï®åM&}tÄ´|lÔÇî}| 7uìßGéw/úÞó~UŸÑ…#7Ž|úx̲!¿–ú[xKÖ{“KŸ ßÝ™3Ø»;?nÊô^æsûÝŸòÙ}«AÇÑ—néÚ˦9ϳ!›>›üïȤ£K½zãæcw˼Ìès6“ÏÕþ–˜eج.ü8Ù¿óž>Ð}!u«ZF=ñãBNÌeÃÊÞݲéÑó¾ä¬éM×îgÎ “Ž½»øã„/=_Ç-}ÍçrͳÕÝûz̲Á+W~oÊœî|Ø-îÝ«®o¨®[†-÷¬†á¼Ö ætt§ïdßû®h¹x䬟m~9éX•ýû.úØà“;|z£ßÜÁ×÷»ïÓ—õ\ûV {(Ü8ü>·tv²%ÖL‹óÎÛ±í×eNGºhz}g5Ÿ.ÝéganOLØi«·tÜÎÙárá96zãDË‘M³{àÇ]z6]2éUÏ}ï~ìr>¯{6ý¶jzèKG–í&Îè’g»³Þô{Ñô;Ù»ûo¿¥cFç=]™3®éȲißê“ÍìO‚}ôùüQ÷î’c3]G‹gÓá÷Lúó«yå4ÇfY6èùïçþ}“Ýû{âɽ'.ìûÇ›õ¬"£n½-ïî‘{¯û'fuɨIÏjèmKNôœ}lÒÎý»h»{ãàÿ#žw{dÏüG6làÎHÛŸ2Ÿ”¹|dT´~8Ìê¦éã‰#‡úýî®ë¸¥Ó'ob|Âï`½Op^×séyß>áz®Ý-e>ŸìK6]oé΃õþtϦç~UöªNO»?.ÝÑswKñ½[Ž­áÉ5»®{–­rgæãmÝrȩ́Û~ Þw²Þõ¾¾PÙïìf £¾hú3ê‹Ôuøã¨ãïŽ~6÷Æ‘'xïrOWìJ¾£¯æÌŠyÜÉy_YÖ»øãÊ~Ýÿæ]s¹dÓ©åÞéæ»äÒ¹{ßôŽÕÌ„¥?ns;°f¶[ý-`ÎHÛöv+Ãæ¿-¿fZÎo“g“îõ¼ç Û>oëàÇåYý ÃwX{V5Ï&¬÷ò·t°÷Ý÷ï¢åó~ÌoÓO6òã2Öy3§Á+wæžw²a¡éÒ›.ûveÈU=6gΘçýÒ=rȲa÷~u¿»ßÓUË/;nèW»áþ¦Ìê`É1£.¶À„•®UåÌÔÝ»øãÄï®óú½ÜÕÛýª÷’Ow†Ü£v·<<„ÜÚÓò䞢ïýÙûVu÷={æIçôĈÕ6fÓ_c×j¸«‡N6ìÜMÇæ{êLCÝéÖŸÎ<[êXÕN¶À{·}ü‡îÜ?%¿–´üòkÚ^8ï©›í7îêâ{ÿ#=.ê‘S¦Ü®ë¸££·eä[ÏGLÓ›Y}dl4jzâ»3Ã&Ø1áÁò†Ž¹wèû´ïâ%“îY6¹©“7Í.¶éYçÆ&¬õ°iŽmf.æÒÉã-]²lêy×îôyõ¾w°ä$Ïæý-qF‡–/èž}¡Îèå–ŽÛ:½q‹Qß—ÁY¦ž¯„9wugÎ,ƒ3#-kôÀ×_ܪøãšïzkï\ìmYãŒnœó½oš–¯Ë|î>9¹§k/›äØ"뺎9}Ûõ\»V»îéâ#6i:93Ȳ…^¶zOWŸ;[4϶Ÿné!“ÞýгÊìšìÜ=ÇæÚ®wtèù±ùßË¿ˆÿ~,:^³lå¥~ÕÚÝræ^wíP?EWú)oèðÀW=÷îò`/ðÍ}l~O/»wæØlF¿Ê÷tóÇ;Nóé—š¹ÂŒ:Ù<²é×̨cùqmŸy3ÔtíM¿³zí\½—^6û~k÷vî:§F,:Ó"ë«î}7îQvîô½ÿ‹ ûb].¶w×îeǽ`Fq=yksg å¸©›¦sNg–­2a1£kŽMókå®.zî³zõ˵oé©7]îéäÇAÓÛ]y32«‡ŽUïTíìKÿS¹ï K=Ç|>b;wñ»‡7þwt\8ræö̸±ß {FxïdŠ׽µwïEoýïÁœk9Ø3àÇU}ü8ô²#GÖ;wïÝþ¸ÝÉýö.õ˜IwÏ;öîs9hû¬äبéóó¡g5jzdÇÍk3â‘ {wÉ°•¹\:ÙB6}aÉoéaVoØ3‹Ö“®óyó]lÌ¥Ó÷®½-Ò±Ê~Õ4«3›¾–¿ë6«¯»?.ÝÔ½k5ò`É›I»öȆMü8óÁãžÞûö|ïîß±u 9×tv¨ïÊþ=ßÓ-£¾§é»Î£ïÝfuϬíù-]ºV»oꇒMw¿û¼qGÁ#G.ìá±ÏêÇΆE‡Ë1oê'Á'W}ïæo?Ž}é'¸£Ÿj¦íÌçsv¸œ -Û9¶.ŽœgÓ«O;÷szäÎqGGž {xãËì…fØòÞ]½qWqïnsù}î‘']¿•÷ôÛÛüîR6Ýgu×uÛ·‹¦ßéœnwôû{0a»:Ômçþ`:.ó:né «ýl2—?³“ÍüqÜ»¿´nê¯:£¿È ]òè/á÷[`Ç9kÆöï¯ïî‘{óù™¶cÂ~ØŒrlìbóûù‡äÖ>ººØLã%ï;x°ìMgžíwœÑqKמÕ?âwWm·Ît÷É öûß›™¼ìÛÇFêC}d,êy3¯CËËw<ùädVGzÞw¹¥wìß3C®å‘›œô~¶ÌwÖÌ$YršKïG]Çœ>-,9zä’–Oe,¸3~G/7ôióº“ñ>ã¹tÉ°!ÓF,:Øš^6áÇÍe=×Þt0gî§ï]5Z^B.]ºVCwú’ïßýŽòlšUïÚ·ã￧÷œîéôÇ­Ä{zðÈAÏ¥/}=xß•!·Á{ú†°aѯŠ¿k.Ýüq6§omªÆkwºÜÓ·7K¿êÖ&x°ènKN´<éy~Û!£¾ë6íZÝõù|3ú~ܹ;ó=2aöÄ#çùôCö­îÏû!¾îw?àŒ.<ئ·û÷cäÒ9#}-Ê‘;¡¶Ÿð®~b¾¹¼s? ·tÉ¥Ûîý<Ìéߺm 9ïbslèWÅï ïq¹¸Ämݲk6§cçŽ;zã“»`›3a‘g»¾ºJÙµ«äywo|ïôÇ1Ã&Ü8Îç7ìO¿¡–kתúäî¹{Ïü¸;ìÚïÔw2érS§ß·tõ¼?<µ³éša {vdÓá}r=®s¹2aŸ_pKWŽÜKòÆ9{Æïéod¼ÓóÎŒú›ëøÛ‡3g„ç;÷f>‡¦{®œXõÄéþº}ïݼ™¦cUvîƒë]yïE¿Í#Ç};çõÿè}‡¦ŽÔ}ûÈÈ(çôÑô˜IO»÷qæÔÑßÒѳ*¼™Ð»*¾8ìáÑŸtù5¹©7¯äÒmß^vñ’Moõ«JϪkz体 kž÷iër™–^¶aÌ´ú[pGŸñ¶f×^4~®£Çe®ö¶€ [ûÙ„7/Üwõ¼dïÎYš>ßÞ¹wòÞ½7½jú’iú‚u¬Š¦§9ݹ3žg Œ÷•ɤ»×½úÛ1£¯o&±ãÊžÝûÙÖ,«wî«!u}Í=ïìZµY½Ù¿oj†MfvdضȂµÙ|Sµ½¹©ÇÛt|Ë™3ìnÙNé;ÌwÛ¹ƒ%×Ìç{;Þö'»øœM‡¾ïIoË5=ïݽ‡í½ªše«»÷£ìß„ +Ì™có»ÿ?éÊœi¼ïƆ­û÷cfÒ1³Ã§lg‘÷®ý-ÚÉvzîš~Ž½»xæâ¬î ¹êsÖ;÷ðÂ’óLÛUõ½_)sF{\âMlš©|Øïr!oÆók5×Ï{õ»ç9¾÷öŒ®·tŸ×Ù—.LX÷ÉudÒÿ;îéäÂ>´gtûýœguñ¼·z\ØŸþR}ð/Ï­þ–ØÅ–ók‘!²lÔôw÷É öãí=pg>d÷=ç¬þùÎnÕv¦§.¶ÏxGï̲ý’×åÓ=üo×ôš[ûEìoÙ½ãžþ»áÈýçZÞ¼‘×òâM“ý»þÏû˜ë8ù3uß^ólÕ/×ãƒ'y6¹Ÿ÷d6—ß®ã>£“7ƒ9½Oß;ï}0Þeç^½î}zÞûÐrÕõ©È„ 9xÞá“K]é~WŸ-Ùµa½ëî}žwøÞççøB_zàÂvìÞçó>¯l÷y3e6$Ï{îYmÞ’sgÔëîš¾h;÷˜M_^nw¸¬0§žÙqÆ{.Ýõ¼êw½£¯˜¦¯&ÖLó÷zGŽ-ÍéëÑïŸ\ùn®Ûœ¾i¿7}V·<´|‹9õàsß²9}ÛúÙ¶¥gu«‹5³ãóz`½oûî}«»ša‹_Í°µ4y6™Ï÷Ôî 4Úný-9Çf¿Š¶§ ›îÞsúÑqÐtõ¼«¾Ç|zòÇÄù¼™×‘M?Ó{º°aÏí¦ŽŒúù¹{àÝ#סåºs.—âw&,víìWÿûõ¥ûÞ;³éèd»qŽÜMœÛ«OÎrlè_Ã]ý>¹ŸËoÝó~ ܽÏë÷–Og¯ê=ºÙ’ïýá!Íê9£ß»1äxK·÷ôÄy½ö·<ñžþ$³zÝÁGÖ{à½sFu¿;}rÚ—®ÝlâwgúkȦ“ǽû›w·¼a÷þòéìb{ÿŒþ8eÆ}xwzÕoÿí·táÈ ¹ô_iV¯¹ô_ÿÐ÷þËçó?Î’û£ü8t©=µWwí%¿&úî¹t°fƘkÓ]ûؘ÷¥oܘÌèÒÃöÏ»÷·hoK;Ó6Éy]3é¦í“qNïË=}]é²w×Ùœßé©Î.¶i™Õgf|^ŸÆ|>-ü8jû,½ïs³’]›uoÜ,ß|èkQfø2åߪéƒî{úÂÀºV¸ƒ_XpžÜ¢1bC6}‘3úbòÇqß¾¸ýq˜Ùƒ®¯ŽœßÓí-›ß=hºÏé+ع¯Ø|N]×ÎtÍ°I×*oé‘:Ó×áw_wÖÌfìNß²îè;îè[I׷ȇÝâþ}Ëüqåí4_t¬æ ›Î軲wϼݽï‰~_²lûô»ïáž¾wÐÒóÊŸ÷Ý»Ùày¯:îÚ~(lXj9rê’K×ùüˆ\÷œc;ª{÷£÷½s÷~ì}lÚ³zr&wô›×O=›^fsçǃ9£Y¶ó”e“žUøá ïÔu¹©_\¸¦{›ü¶ýûå•ö¸\³[U;Ó¯e>Ïü¸kÛ½ß\K.ù5Û»ë]=õ±ÝrV¿MéÎy‡¶Ãï~gz^nê]³úc½§?ÈŒîŒÞÔ±sG:5ýù1øãxW—ý%t²½8ë]üîÐ÷×WñÇ•ßo…%~Ü›ÞÕá‰{¹ša+LØõ»Hgº°ÞñŽ›ºßÓ1«Ëóù'¼qŸQÏ¿"k¦øâ¾|6ou¸h–í7²kî}¯óúÁ/722̽Îæ#EÇÃÞ}Lr£à¼†îtíZÓ½{sKWoœúßÁyŸÛDÐvøå&›îôÐÇ6!Þ8ÛÁƒõÎ;=r“­½{ýéô¼K'›ÌéþfØŸŽÞtða§ƒ/Nól2“·:\¢?Îïé˜Õg=£žt=t²»0ßböýqƒnŸœèúÒfthº3Þ363äè}W,5ÝY3𻯬¢»¯]GÏjÝÛ¦›¶×ûjàÇQÓ÷NüúùqìW]÷þ5dÔ‘_w†>9jú–çÓ·µou›¾wïJ÷];rèK÷¯øÞÁ~ßõL[žÕá‹ÛÓ,´ÝvîºwWOrvOÇ|Î;:»[°wWì‘hºt¬Â÷ž:Vá‰;rÞLØÓ5ƒ½;¾§mvœèûYÚ½{6Ý;\ÎyS?wt}ðÈ»–—Ù\9räÆùÞýê2~Á„Õœzñ¼ _æJtýŠŒ÷™Ëáu—};çtgÍp6ÏY6fÓco çôû{v­’!'¹tíXÅœ^2lõûˆl:»Ó¢×]wðªë¼©?²Ãåé¹ÝÇæ¬w¹¡CÓ_c¦íõ%ÝÒ_Üëþ–½qß¿—ÎôWg²3ý-ÜÑ?ºnêïî{/3ú‡¿Ï®Y|÷OÏ£û96ϯý"Öµ>9júïßÞ³*ºþ'íßµ·edxÄfóÎèÐôFÇGDÃ93*™ôèw×<Û˜ÎæœÑǨããd¾O®h÷xä¼·¼q½:£+sÆ4½ô§÷enïË.>ßÒÑÙb|ØÊ‚íûî}:i:slS΃ñ[úô´Ïã~WŸ•žÕFï+?.è¹eÓg±{Ÿ·;ú¬sg¼“Í|qEó¦éê{3:vï̦/ „÷î̸ÜßâÜ8ïM ¹êwÿ;Ž¼™ïY½ô¸ ¿EætçˬxnMxïȵ­® æy¶µ°{þ¸ö|¾-×î–УžæôÍ ßµ—yÝ=ï¾{\Øæ»IÎLbÂ"»†GO\Ý·£ÇE»Òw¥›mOçô½.]ßs\ð¾ï·rÐsaÉ)V;Ùœ3sPòè¡ÇEwî{÷ãüNÌ'w‚ù\{\œñî{wxÞãþ½Ù½Ÿ5Ýl˜×•wz–föØËÖô¶œ‹Nrl粇žW-?§WŽ;÷®9ýú’}l¡c}lÖµêš}rÈ®Q×Áƒe‡KôÆÕîô»°w×®UÌèȤ“‹ ÛÃ÷í•'ç3zíNO¹FËÚݪ®çèYÞL3»“%g»vÎé®ïÎŽ{vO{ÙÄó.96Í°½¼z–ííõMüqï’Sl!£þ&ýªÁûŽ>¶Oã¾£kõƒ³zÕòúâü†þæõê…ÿE]÷]|ïƃýÍÝû?rlâ‹7uèù°ÝЇÍï>â_þÖüšÍë73^ºØ4ÇMwÞŒÎçšQ·LÛ„izÏô\óéI׋–³_uR:\úAÏC‡‹èú”ÎéSÊ{»w2åÀ“£¶CÇmÿŽñÈ©7ŽY¶™Ü¯êý-¸§ÏbFg›ìÞM×ç$›Î¶A{FwÆûÀöíédëð¼«ï}I½rKq÷¾¬Ý-²ƒ 9÷¾»ž»çØåtOWÜÊš÷·¬I›yäÀz_]ÆLÑõv:»Ùà‘3ß;ú[ØÛâl›aF—\}rÒß’yïìXMýé‰ [çómö±¡·ÅÙqÐzç»ïr÷Ž9}_vïûÒɆ¿Ý'§ÜÞÓ™eÞ{÷²ãš[úÁQôÇUlÔvxäÊ|Ž{‹!'ì¸Ö=ý˜ 9å̸¾c>w¦Ù­«†Ç<[ñÄ•Lº3ßñŽ¹=îà/¡é¼¥K?|rØ·Û¬9r×Á#Çy½ÕßâýéQÓo+ï]:ÓoÔû~#ý-–e»“;úí½òaïé»3Ï;ïw5ƒ¾ÕV'›izíK †Ö;ËMýñ)t¶hw‹ßÒEסéσµ÷¬ûvúäÄgÝl¯âw7}¯{÷Wj»÷¬;îíÃ4ý-°aɇ-líÝ;fõæoäÓ¿Bží‹9õ_ÚÇ&~wö¶4ÿ÷6l£ëè…ÿ㙶Äy©sy󅮘†Œøî£iNç|=rcšÑlzæÂ:OÎïèð¼O˜ç7ô^áÌL–Ž¶Èxïó·k:™ïS“åéMÝslSiç.¹taÉ733•²éÈ°µ˜°ªë˜Óçêœ^ržg‹9Ù½k7Û¼fÓçÌ çœwîßeN_Ð;ú÷ß‹™7ÃÎÕïb£ï½²fœ!×Mw¯û²u©¯øœn]éK+ílúò*|r«ä»¯è¾=u¦kÏ*»UqS7¿;vîk¼¥«On#fبéëdÍlšG÷ôͤñdÌl*ç}3ÝÔ·ÿjwú¶ÝÒK×êNœÕ•;Snêð¹‡N6çÌ”¹Ü˦3£¾/÷ôÐÛ¢¹5ϮغŽœÍéìIWM—{ºÞÕ™g ¹tïc{Fû[¨ëâ{ovîÇå¥>6¹£+{æ,0ak>½Îççíùü\=ðÊŽ;oÍë%£^rꗮ헗‘Ã|~vîdǵ¸°Æ•¹®,ØxW¯ù5ïY5MÙtÛ» k=«žK¿õ—ÛœQ¿ì³éwÐôÈzG‡zöÉå[ºÏêOÆ{w¯{åÍ<ûîý)êºæÓÉŽ{Ò9ýÅõ=yã˜cëȪsN/Þ÷·Ø³jZŽ,Û[b½û-=v¬‚‹y°©;½dØpS—Ùüžslâ“ûú }·=û/t«þ¯ÜŸÓ¡‡í7wðÃÍ|ŽûÈ0oèþ4Ã6♵Q÷½»®Ë¼ÖŒv³\ïo`Éõš¾–qÞÐ'Šgn"ùÞ%Ë6 îÌdèWUŽ\?hºÏêÐõ)cÎÔ9ݽïªã˜Ñ§¦ å¶sŸQŸ:[fÈC7ýî³îuçœ>'~÷9éc›ï;xrósÁ/Woèí>—°`ç¥mA¼ï¸¥×¿Mã‘as,:ÓEÓë}É¿Ü»Ë|ŽüÚ’gÙÀÓnU2aõŽ¾ºê¯BÛ¥“­á®8¶ìá›Ý;2mëë·&Þ÷µ ¹§oØ=½ÝÝ‚û†ñã -ß½ü½å¹6a½Ó#·÷ïÛàϤÝ{ÐòÕwÓ=}÷oînÑ6hz}žew¬™=äØÌ#çÞ8°ÞE×mV[\Ø#ÛÁcF·¶CÕóÀ›9Æ{ý}bº~"zYïqï~Šwók…;s&~÷SïYÕ›úé¹øÞMËϨãM'›gÙÀ{?§ÎókÐôË õ½#‡nž82g®¢¶ÃónºÎÞ÷ðÞ¯…óïêèlqoÜxäLÏoEÓ­3=saïDÏ9Ÿß»®oÜ}Û§õ'ôª>ÄYý‘šžîéÂx¯Ì÷§¿íîôïXÅMýUúUqOG'[ÒsíOÏ«àÌpÏ›ºéùnèÒµúî]«Ê…ýL¼æÚ>ñþõ)¹ôfFÿô¾ôÏ_Ðóès§œwxã~ý¶ýOؽ“7óý°oÇœŽ7:lóùˆdØFFR›ìÜ™_µ½ûwîð¼SË¿µz¬ûU{Ö¡Þ3—62Þ'$Ÿ>Y=r²w¶Oæ{¿}O7MGŽ;øÀx¯¿ûÓ:³OÖîçS)Æ6êzó{¶>ÜÑ… û[°ŸóÝ;|r¼«ãÍKžÍ½qƒyñ½sçþý÷Âüß˲‘ïn;øÅïß=—îlØÀŽký½d^¹ÅÐÉVõÝ´ÜürÔwö¶,ÎLȳ)ç}uExrš±<ÛªìÝË=}}ÕîéšA_‹ž÷À‘«{÷Mh¼ÝÏ×íK='SN÷ðÑó¾Éû6õ}Ûþ¶ñºWßûVòÈU- 9ÜÑuÏ^ä½weÙïº~ftϲ¹ç}ßoèºswö 5=h¹øÝ­¿÷súâÊîýÄoçrCwÆ»fÔO… ëÜ™’E—›ïßÁŠuœ3a}>?Gî¢òÞÏ­g{wzÞ™M—4EÃ¥»Å˜r—!—~MmG:ïé7ã]«¾w¿ŽýªÂƒEǪ{åt玽»ìÜoï…ñ~ÇûúCbÏ”ù^9ñÈ…Ý»ô·ä{úƒùÝ¡çªëÔöpSÏZÞÞÁc>ýªvSÇŒNï{èm©lïš)ì8˦¿‹OõПžçu廿»–Ó÷ž™3_²w'sæ—3bEÜWα©ž3»Ü/ïp‘Œúðp£åÃߺ>œvï#õžžoéÐóÙ»Œ±£mlT÷_µÜÒ%—Nß{Ϲ°èZu&ìÄ_ïWõ<[¯ðÝ÷:\úéým›L;wÌçSÉó>-¬÷ÚŸ>í\Ø©™ŽÞt¿OgÞŒxÞóŽ,ÛŒåÓçB– ì8êú¼k{Õq>3N:V›ïÂ|¼¥cFwoœ³gÚ™^îëÒÏfºîùôè‘[6]GvÍrây_NÜw°ãTß¹_‘½;îæžMǾ}U2lµ—mÝsl2«GÆŒô·Èî½êøzÇ…ùN=O7õ°{ßÔ»ÜÕmïÎÞe¾C×w·í–Y3Ú›ÎY=ÍëäÁÂïN-ßuÞL`Î4º½'û÷}É¥„½»çÙCŽ­öµ`Äü»UëïãÖ½þ}Ròk¢çðÈQÏ7sZ¹°àÌPßyW?£/îôÔ}qdÍ$ï»sÞµ_õ‚;ø‹üšy½päœ{!ûvzßÁ»Vº[®óû|^wðê{×þôïwk=.…÷ÞæÇ5_rfL×kïj£ÛÂ{¿·™]µýÞ5ýÎòlü6ZþØÁš×Ý™3Úþhýªø†{‹'g³zÖuíe+Ç{zàͼ¨ßý…³ùK¹©£·¥zäØËö.Ì÷w°a-ËÆù¿ë}ýýšþÎ,Û§±Þ?‚¦;wƹï_æuÏÙtïM÷Œzìmñ>¶Øß~Ü˳‡'Nwïã̲)g†Ý-Í.½-2›“;“zÓëW8ïìsO,Øqãöy°½žëxOré“’M÷ô ëb›d† ]«µ“mÊýqÌ©O‡N6Ï° ÜLbÈGŽõÙ2¯‡N6v¬Ö§9¶ÓôxGŸ s:oèÒáRºØæä~ïû‚ô¶ Ús:™3 ÊÕŽÕê™[Z/nÁ83Þ˶\ô}Ù¹qÚÅFîÌr[ÓWÜ'çuc½Ãç¾’{Ù"?Ž9ÜÑé{W>,8r-î æôuÕïuécÛ CnCy°aN÷îèú¶1a©ç[‘5³•˜°ðºÇ®Õo=ç~×ýrÿŸ7n7îß÷÷0·#ÏæóºsfºrlQË÷íËYý@üq’K×Ît°Ýc‹°ÞË;)¾÷£“#úâ0«·vï§ÖárŠ¿Ýú\òν¹§ŸË¬®sú¼r΄e¯ªøãgSÞLØǃõÎ<›ïà±sölØ.ìÍ•sݯS›2a½·å–¼™Û0«£kµÞЛ®ô2£ËlN|Þ»ßa67Ÿ\ÇlÎ~Uåæ½;½qô¼?†ÝûóÓSèb‹Ý-Ï̦¿Èþõ¥ö¬¶ò鶇WÖÌ µ=u²óþöê÷ôp[÷ý{érA3zþrF÷ü§dÔ¿ëÝ=r~?ÿâžÝ»V¿ì¦þ[t]wïÞÃæ̙ᡑ2Ÿ7šŽ/4½ÌéÃ#›ÑY=úâà}¯Úî¼™g£GN´]æóÞ¸gØ ç¶çÞ½'^¹Éèw'GN;V'òœÞ·.—©öœn³y_{[Ê›ŽÙtåÁšÇ]ïéðÄ…{ºö°å,›fØ´·ÅüïóÖ›^3é³–IŸM\Øv69úãêþ} œg½/ÆY=äײOnÉ2l¾o׎Ն;ƒ›:víÅ+·RçuøãЯ±˜ÕW½C=sä*Cn…>wïN—·.ßuϨקó¹çØ<Ÿ3lìos&Î絃m³Ã''~÷Žý;sê‰!‡|ºîÞ‘e#–¹ô=êº÷¶˜¶§þxÞqOß—;:˜°-ÖL£ßû‡Ì¥ëœÞhùÁQeÈ•Y]ºÓ‘I/wôC»¡†>6Í¥—üIênÁm]9r§¦ï§Î…-7ô“ÓЗî9¶SÑv÷Åy>ýÌ´&ºÎ'·ôÔÅV5¼Ã7&žwä× ï’gKþ¸:¯OÖ½{ÐõzG¯7öسŠú¤ÌçȵMNµ;\úÖÁ†<[jšÙ5v«Nå6÷Éñž>;íÙôÙÙ˜e³½{àÍ Ã…6ìÞ±kïžÓ›}07¨=.ƒAȵaVç|>p†Üb¹«K›u¬*ytþþtv¨/‡,¹Ú±ºX3®é®çÔñ¤ë«|鎎lúšÜÓ“®¯'Ÿfóê‘‹}-:«ÃÛ®Œ¿«'Ïû–±bÁ…ÕÝ»|·´Ã%?j»ùã¶wÉCF½~Íÿ¾']«Ðõ½ðaÁ¥– ö qä|È™=Îç¡ÃåÝ釜Ók–íHæõc÷Ç)GNØ3ÐsÏ©û|~Ì ›ßÒý{*ÌwaÍ„;zÕ©éðÇ {&paÉ›ñG¿»Íç——Êywœ÷«f=ïšóºÜѯÀ‚µ;ºð`ƒžßÜD½q7Ôrö«Âó.3ºÏé÷ÿèN(.uF¯ºÎ¾tÜÏÅ÷î,¹§ çO˜Ï±wÌ3ºóÞ«¦¿”>6h:rÆ™Á|®÷tgƽxŸjðȽ°;½Þ×=£:V…!çÌ8Û·‹¦{–-ÝÕ™Mþ÷¯æ÷×—÷¬¦®UîÛÍóŽ\º2bÙ—ž»VïûŸ:§•™¼>ìÛ¡éØ»7º>lü8}ÊÓo™ÉýçÝéôÉY.]x°d½·¼r›pæ{¹¡÷œ!7‘çs<è8æôœ]kfö)cÆ,›ÝÓS–mZ²lìq™v¯{îPŸÕŽÕéXåM½ÎêØ·GMwÎ òéäÍÐß>|îî‘›¬™ùÎè¡;=eØ‚GnÑ5~i!úä––´›ÍýïU×kϪßÕóÞ~wÌéê[uö =q+’K×~Õ|WŸœ0äà‹[[Ó<›ßÑ9ŸÛ½îÝש߮íþ”ûî3ºfضӼnž¸M÷[zõ½+¶jûî2é;-ß{ø œt­2ŸÎ}¯øÝ‹ÆØÌ~ ¾w¼fמvðÞ­z(]«˜Ñï]„}{õÆ5¿Ë¾}x4ìܹwó]ršcãm}<ÝÑÇg&ö±‰?Ï<ïõi›sa©ãèOŸ”›ºÍëšIwœv²%œõ¶LõEÇõéŒ>˜ïæ—ëìbËÌÎê`ÃÎKÎrs™9c¹y}]LØùýïéO/>9ͲAß²w_”þáÊ c¦aÈÁß{ؽK¦]lȪKÏê -¾+ʆ] óú*Ùq•9³îÌšçÓC&=dÓ…ñ¾–üîk6«£;Ýz\6%¿ÆîträgfkÃsl›rWg®Íoé5×سŠû¶±fë¿w=£ÞwïcÛãS¯{èNgºt­k†{xêø~G›øÝ}N?boºófyK÷œºsfÀšqï;2lØ¿ƒ ¿Ü)x3Æ;QM?9¥Ïýþ¸Ó¶?;wgªOî¼ô¦ŸÃÇ[zðÅ]XV­é[•^6çÂ^Å.6{—Ê™¹ªùôò®}F‡ï½éœÍS–M¸°wÚ¯*þ¸;ɳÝ=ƒ|qwÆw¿{ˆÚŽYý¡=§3›®ÚOÜSd½»¶Ãïþ¾…7óòdûö'²f^À†%G®áÌÄ,Û«xåª_îíïË›ô¦ËŒîszÕòW¹¥‡ÝÃ|x'Û»õª–ÞõÈ}$oÜÇ߯¤éÂxÿä¼þ˻؂–yÛ/éOÿåÞ¸F׋žUíæl>\çö0§»ç½}G7o\£ùcíÝ{™×ÇÇ¢GNoêÁ×s&ìxöÆMÞ;3é½^èl‰~÷4§—Ù½ýï˜Ó›\º°ÝËŒ>¥wuéLŸ’\:æt˲Ñ'‡œúŒ{äp[gwˬw¸@Ëg;÷îÑ#‡ßº{Ì™2›ÏEßû¼zã"CÎÙ°Íì^3éÔöE±gu¡ðf|çþÞ̲çӗ䦮ó:ô\»ÓÙݲºâ¼ìßË|n³ºÝÒW9£¯ïûj£ã«±;}m-úâ¸Goºt¬6·ôªé›IÛ7cŽmKžÝÑ7uÏ®¼Õõ¹©sFß¡/nw[æôÝÜǶòkº{ßS6,9r{ä¼ïIŽMýqdæ.6ô­î£·Exr®ë‡ìdóÎt÷»k>¼™Øɦ=l’eCwËñ)guäÒcתÌègΛ9åî]¾zG?;‹œ÷òoá¦î~ÎnUf×Äwð¢áȨ ;Î=rõ7»Ztÿ~#wõ›˜K¿níßá‰óýûÍsÞ‘i£ONöíΑ³Ù]§×[ºîß… ‹<ºÎç¦íyV«æ“36¬ÏécÜ»—ŽÕÔÉXròØ>.96úÞ'=£Þ›$ë=h{Ë'·ôrGŸ”[ºëy?Íé}Ûµç{zîZîèMŸ†ßÝx°å†>3Ûêm™a/›u±!·ö­ß³óÚá2G=ŸãþÝúZæÝWÞ ÞÓô®žØqƒEçÍ–¹¶Å¤éèVµ}Ñnè‹ËqFwÖLìnYF|r†/“³l1“î 9ïg[]«¼£¯µ9rd¾;sfSúÙÖ­¿eCXr[Î‚Ý ›Îçô½“;ƒºw²±ÃekGöîÞ« -æû®ö¦[Ž­êü^éNÜͲ¥{:öîìL/û÷ú¸{·ïaóûð€³úaɳÉÎ]2긣WæŒÌæôÉþ=Öcǵ¹°G’eƒç½êù1²lœÙ=£îŒw¿©3›ÞqS÷N6½£ÇLú9uü<Íç±gõ^¹°s×]|óo‚½¼v]¿¾’Þ÷ÉÅ9]øq·ðË5ÿvËyýöÖ½ï¹Ã¥îÛoEËõyoËݽÞÑm>×[ºäÓ3sæQ{Ób>Ý3l¸§×GŸ»v²=GM¹—úä¨åÏÊ›ñN6Ì饋³ù+ùqìc–{wñǽÅ|úûÇ»ûÞ•!÷‘nè˜×[»wÓñO°Þ¿¤;=êø—ô·ÔN¶˜Oçþýû Ù¾}xÈïèU×m>‡W®°ãê¾Ñîê—Ó^6¹§¥»:xràÎ4>ês:ûÓ1Ÿ“'çÌw÷Ä›×}Â5{wå¼÷¼_uRöñýÉòúê{Î rý)»£O9ïÝrÕû>m¿ûÑûÎ;útȱqNŸù×~VX3³¼­«®ƒ7ã«séŽîÝ-siï>sºïÝÉ[h?÷Ë-Cn‘>x°äá“[ræ gôÅ¥–÷Ü™ éðÈ-IŽÍwîŽ7Ú^wíË–c¿œ²fŠž¯Ð'ç·ôì_ïèM÷{ºv¨œÎçê“Ã~+Íè›î#ë]}qȱm¹žïà»;Ùvõž^õ=°fŠO.zÞ »ïþ¸]Û³ï¹ïÝïÊ„µ;˜ïåž~X~tdÓ›ÞtãÍ€ òl¦éìccFݺÙÀ™9òû9÷ïœ×1£Ÿ–|:ú[ éœÑÁŠ5®{ͪWm¯½éÞÛ=ïȪkgºsaɆ½”<}î`Ã^y›qÝë|~IÖûõ¥ö¬z6Ý3m†KϪÜÖoÙ™ŽùÜûÒ±¿-wM—ÞraïíßË>6ïd{À^ºÙÈ™¹WÜ#uýAòéž_3¾»ÞÓŸ4£þÜêdkiúóKô½?w°a‘cã¼þ*}«Þµêûv›Ï‘IÓÞ–7ö¦è=Ýærîß%›þnšî{w÷Ç}@Ó¥ÇEólعó1Ãæì¸/fל1Sµ{(éùPâ̘ç\X¼Ñ¢ézK§®‰®Kw:5ݲlÚN.ìnècæ‘óÙ¼rä&Êþì8dÓ5Ÿ=×\z¢ÎäœÓ¡édÃf-Ÿbw‹{âúÜ¿÷ÃŒ>=ràDZ;}&îßg§C>ݹqõ÷\îc ¬÷Y¹©ëÎ}žœ÷òtqaá}··ôÀ™ñžÕȘ1-çÌ>µ|<ÝÔÉ‚õ[zÏ2é®ë“¡3}.ýÉ:³{Ž­OÞû¤rã&5Ÿn~¹é¾ùÞ±wïûÌTÚ¹c6Ÿn±ÞyOŸž‘ ÛLûžnlØ¢å#‡¿…ñ>7ç³9»[l÷NŽ\º¥Ï/„ù¼yàÌà·ÿ½(Ìwß½«¦;6æÓ;Ssé1§®œ™ªï«Â’#ó™txäÖ\בOWoœøÞW©ëÒˆý»ö¬rï¾^}îÖ›ÞÒrfÛ¶þnlmðžî»xïmÙv;ïÞmVÿþ½£¿£~9aÂjùqÖµú­ã;-œÞÓ%9ï{c[îO×›ºv§zË¡ÎëG©Ã¥­ãàÈóîûw°ãŽ<—nïô;÷cÉ¥‹žÓ+WoêÅãN¿»ô°5ºý=§sV?Ì™3ÙÁ×;ºûã"kæ2õ¬š?N3mÔô8§—»9nìèUµ›ºë»ëúÕÍuèl ¬w0ãtN—þè{£ç7w·â›3\Ðvïc#?<Øû8§sç<ïÑ'æ»t¬’ ÛÅŽKÙô¢ï/QÓ_¤oõE´½è¸v­’ñnºNÎŒv¶Hßê«xãÀ‚U]ZnlXäØÊþ´ùµ?.êù§xäü®^™ï¿wF3Ø·ÿú;ÔÌåCCö0«Ä<83aNw=Ióù¨Ìèc¦ëEÓÇœ÷>˜3zG·:2lãQÓÇ3Cn\X°²ƒÝªþ¨ëÂŽÃ|î 9Ϥ{>]²éèL/ûuéoQ†\àÂNµvð˜ÓÉš™†/®Îê®ãžMŸ›‰LXïOŸ-Ú=kZŸ\˜ÓéüU>ì`ïèó†•þ–4¯;Kκ[5Ÿî]«È°¡[µÌæ’GÇŒ^µ}E²l+dƹ?NvìËÊŒsÖ{eͬ†<:¿«>«k×*fvèzíP×û†3aG.ÝÑ7'·‰YÝnê[±;}s3äÐË|¾% ØcÛ᜾:[À†UfÙq¦ï{ìMß“[zìoÙ~}î{]žwɧó–î{÷ØɆþ–¹¥Çý¬a¾‡›ÜÕ?:‰»÷б -¬ë:5ý䌌÷Súãü–~~š=ïî}Wß»w«z†-h»ö¶~\̧‡üå¥dÕÛ,¹«Ä»²Î–¸{w¦œfÒѳ4ôóû •WôÜüq#’Mn1a«ž×;úu|¤£7»w²fÈñùœ^wíYeÛX`Ã*CŽ¼waÃNL¾t¶ Ç¥ö¬NG®è{"ÞÒûUã§&«ï·ô)õÈ9'¶ìÞÁ…í{o zÙ”ëº>5½ÌãÓ!ÃFÜ̵õ9ÕöÀ™óΖ¹9ÑòÈ‘cyï ±M»Vs6Y6ãÇa6þ8ír¡GnIîèËî{_öù|Y˜3Þ±º;Ù˜OÏ™6íN÷Þ2äšßëÎ|/¾wÛ¿¯¯­µx°~C‡×=òa7åmCγlìIÿg¿jsSÇ-}˵|G4¾÷ŸÓÁ‚uÖ»òÝÅ÷Žyû÷½tS߇¦Ëï”aóLºÞÓ…#Ïû¡sfÄÇ;zènñN¶C²fœñ~$ùµ#ìâOÚÞ÷céb;¬úÝÕ‡LzͲÎ;¼qôÇqrlÚÅvqá÷ô‹KïO¿d›w­–~Õ+ñ¾_ù·jùeÍ¥sF‡¦ßÐÇÞôϧ“ó.\ØÐŽ9Ýôý®0gnlß~ëÝ-·¾w÷ý{½¡ß‡›zÖô{v¦GM6ì#÷ïÊywÏ»ô¦7ßgÛÁ?¦½»ÞÒŸ,¿öœô½xÞ_¹wM¾÷c»¿¾ÄŒº÷¬sû{s[·î–7ß»koˇÌè˜ÉUÏÑ“^ïè_vGÿ’þ8ó½gÆ;fõÄ„…ç½¹§-ovî6§%_Ü°e×4¿rlÚɆ̙Ď+³z潧îôqÙÅc6ëù·úV•'úfõ‰0«OLú#K®ŸúØúžcsÎûdðÅqßÏ6a¼«7îû;#Ì™™rWïð¼79ô«Î̆ßÁǾոw/|Øêsw¯û¼çØØ—^çñyÎéóAÓÉz ¿eP:[‹ ¡[uwt÷¿ë¬Î [ȲU=_ÄÞþ÷”M¯óyâÂ.KoËjÔwäØV˜]KŒ÷ÖCN=²Þõ¦ž{[Ö7°w_³º³f6ÊŽ}Cré[››ÔvíYÝÜ–;:õ<òfèwg·jÇM}×}ïQÛ÷g†ï{–mwO²lû-Ü^Çþ@uy6ö°©?®ÎêGÐudÒm×^²lÍ ~˜ùq`½y.ݾdÈAǛΛ×9§;;Žó:Yrgæ™Óý»½Ós×õŽ9ÝûÒÏco óèçž]Sì…÷±)ãû÷kè{‹ ‹žÕÈ„EŽ ½é:£ß\ë|î¾wÞÓ¿µüNnë¡'½ÃûÞÒóð}ðÛzÑuäÓïmF¿ÿÖîûÈœi´ûÁgòÇGáÌ(kFòkô½?™¦Ë=ýåå)yà…ñŽ¹=u¦W}¯œw°ã^uçx3ï‘5CÎû›ìßßyG‡ÿlX÷ÆÁ ÷úUC/[öÇ¥=rf¾B–­ÎçßïçÐߟþs¯º>ĽûˆÜÕÉxo83úÌóÀ;{fŒ÷tè9zÔá‘EuÞæô±È…õûzÖñ¦;½ÝáæÌØqž_›À½_}ï¥3|XåÌ`fŸ’¼íßSŽ ZŽü4¹3SÔò¢óô»Ã7MŸ{äÍ€ó.Ý-æ…G'[ȦÏÊ=]wï‰ :ÙÀƒ-Ÿoô³ùÀné`ÍD6lÛ#>¬w³ÅN¶zW—^ÕŽÞ–å4Ÿ{Ûr'sFgôãÌ _5÷±qVç[gwËfs0ÞS–­ê¹ßÓ+?n£ðeBw ftémÙÜŽ\Ø-îÜÝûμõ²M‡ï}WgtíZMýé{~K×½;÷ï2›#ÏFÿûAìbSÖÌ~èpq6¬{äÐÃvPôü h9XrrGÇ>þØ3é¼£7½-ö=ÖY]}ï§ÇÞÛRrl§üMŸ;;Ó½“ ~÷FÇÏò];ÙÎ<ÇÖb½ó+9¶síkI9Ñu×pée»6Ç=ý:ö±]#×vsey5Ìå×é{+³º~»|rÂÓ îêæ{§ÿ=Ìèw¢á‰ û˜÷îΚ©¿½³%ìà‘c“Þ–°s×®Õf‚Ç3ûkåÃÚÞ8òä‚ßý• 9ÌëÊ{—¯¾7ÑòdÓ[œ÷MçÌž¼qŸ2«s^/ºþ+°ÞÞÌ3l¾·;nèü×Ù3:ô=äÒ¥»%Ìëä½›ŽM—y]t½ÕÃüqc!¿¦ÙtçÏÀ}"ÜÔ{æ{ŸwõIŸÓs>½ìà͇Ûz¸§÷ãÞwͯM‡{ú´îÝÑゾtt¸L‹ï}V™ïUÃçZù5×óìwG–M»Óç…ùNÞ»ÞÒmV_PîŒyßçÀˆ…¶£›m‘ÏýîK¡¿e©ù{a‘ù5äÔ—…õÎý;´\rìM_‰º¸°Ú™¾ÂŽÕUfÔ%—ÞÒsóÍ­{/Û:{\:˜3ë™7clXëN‡®³;}³úâ6ÝéÛaÿ¾æõ-ãÂVÜÎöVà»{ÛvÙ½o+?nWýï{®íèJGתúäÄï¾»/7õ=ïM׎U²aþjßjɦFÖ»jû‘úäÀƒ~Ü‘ÍéÇ¢íGœÓã¾ýäXòéö÷éI}ê“S~œîàÏNýžþŒö·¸7|ØóŽ½û…³ÞÏÏ%«~ý§<ú•ëú•úàS'[Ñð«zCG·*÷í×îu§¶_ߦþ–:£ßݸO®Ìèw•9S;ÓïœûÎît°Þï¹{¿Æ fóè«wõûGϱ…|zØ¿cVˆ·tìáá{G·*³éO›ñìÚó³ç×ڌؘa{Õ[:çôWéX•ï«ó`á‹s=O;øÄ‹ÚŽîtéc³:{Ó¿>ÃÎýóK}î¹_Õoê?1Ÿ—½»ßÒû~Hvï#CƆ ÚÞ½ß;úUGLÇ¥›M˜q£ôÆy6}lvSï #¶è÷8òé®éèqñŒú$5ž«“ÎëKKèO'ó=é9½qýÀx‡¶Ó#7=íþwÓò)¹Ÿ£_uéì[uÏ»qagíÆ>C-w¿ûœ°äæÌ'7? .¬gÓç˜c³ï`>rÞé…wM_@N]}ïÏ®ùî]:VÑŸ®¼÷%Ïé‘SŽvðËóºgÚÀ›‰žwa½[nmeÕ=rk+kÌ¥“»æ3ûºfÓ×õžî|Ø’gK™tìÞ×7ô¦n¬÷ ñÄmFMG&}s+u²mû¼Î½ûNåÎÔ›úŽ=ìܳïÝ5·ôб -=ßoƵ=0䬻%øäôía>—}ßýîâ;°{äÍÄ›½cñÇç§ 9pÞ™QÏþ8åȉçýDïžc; Zþ­ïàÀŠGú~ÆüÚ™q`±{?g›ö¶ÄnUÿ¢ƒ ¬÷À“#6ó㤷E{V¯»»Øb‹ÜÓ¿—;z£ß7waNÏûvúßÁ…µù³:²éšis>ìCò¿?²cµÑñ:Ÿç»ú“ßÕŸœï ×Lóé/~Ww=wßûë‹~_ï½zãl6«=«ºƒ'sFçrÍ°}@Ë?ä®λßÔ+ö]:V?Å÷þUïêÐòÀxÿ"wÆûØ~9GμqEÏþüþ•Y½Ìé?‡Ä÷.|ëJÇœÎê£æyŽÜ¨ÝÕ• [³k]ý-صÿÛ¸úÞ%—:V³¦Goœè9u=ßÓUÛ']×£žOÆ|zßóéS̨K–9õ)÷ÇY– ¹ô©Ñv›Õý¹OnvZöï³~Oo´}nŒ÷YñÊ {f>æÙf9§§{:²èæ}GÛü‚ìàÄ'·° y6èúÀØîÑWgô¥ªé ȯ%>lèM_äl¾lwõèzáÍè=ݽï˘ÓWݧºÎß»2ßeV_ÿþ÷õõUɧ¯[7›0ÞÍûÎüFÊ©oj>½«ÃeK¾‘ñ®lXv­Úî}GºVw¶vدª™ôêyßýòé¢é>£ïˆ÷]÷ï~S/Z¾ç»÷o†ÜϦ“7óý%›ž{Ù¨é‰ñŽlú!:Ùe÷~ô73aÕWoçÇìdóÛº{ß}ï~wîÚÉvv®Ì™q2gZ]«cØ·‹çlwÜÖŧŒ÷²vb"ðÝ‘cë—'ÝldÇÁ''½éʆí÷=Ë:\\ÓÕón\õÇM[.}Ú=ri>G.låyKÑg½cu~Öoêʃeú|KÛ©é‰Kœ°ãØ™>N6ÎéíÛïé–g[öL›úÞ——5—¾$³9fudÚŒ7³¬}é¾_Yý‡¦‡Ýû¿:ÔÓÎ}ÿzW¬íM¬÷­ÖŒ^½r[áž®ü8¿£ë|î¬wøÞé×Y}wÛØqÛEË÷vdç^¼r2›ï -k&íÞÁzßW6¬ùßáq/z.»÷ýÃɧ7m2¯³—Íwîüî̱ïÙÁy?ö›:³lÔpóËq6·/uaÇÉ-z~FM\Ȳš–Ãï~.ø:«7üÌç]õ ×%£®9¶‹+Ͳ]¥½û•ÌéWqN¿Jü8ͧó+½ªÚ›nÝé!‡<çóèy¿ ¬½¥ßù|~÷à7õFëÍwï¹ÿ K~œxä¼3^9ß½Æû‹ÜÕËMýU2êÏÞ³ª\Xhø‹ßÕљ޺§§Ý;³låïªãooâ·ýûç»óãÈzw_Üu½òÞ}N×{ú§Ìè‘7ó÷óŸÕ7üs˜súÏ’]à }(dÒGt/;÷áå½kÛ¨èº÷«úÎ}”9°äFÇÝûξÕqaÉÑçî3»ïÚÑÉÖ#Vß„èùdÏüqìV•ŒzšÕ‘GGß*{ØŒû:Ùú• [žzߧEÛ­»e -™tô­þ£—­› ;Ã=;:\æfý–ÞìÝçÒ¬^µ}^˜ïµ;=óaá›ÏŒw2äR–-÷¶tdØ–‚?.ïÝ—¿ËMùµ¥ÂAF}E´»vê¹ô¦¯‚;Ã>¶Ä‡Õy]µ|uÍnèÂ+žwéfÛ0o;Ùþ‘cÛhçØòÞ]÷ïe6oîê–cȩ̈3“nz´|W4ý_]l²ßó;zyûÊ‘Kü8õÉí+cfß4·ôCg½†îtåȱ»%Ìêî‹;ÆÌŽ{úQ¼£‡u²ÞíK†œw§{ÇêIèXÕ[ºæÓqWç¾ý«Ñ÷~ö­ßèZe¿ªúÞ/ó~©³ºk9t¼òg<¿†\:˜°Ü½ƒõ~¥¼™›ÊšAÇjèc».=«î‘Sï{ìoaw‹æØØ×rû÷þöžùt<ßÁ?”w‡ŽUɱµòéœÏ«Ws¹æبíEË#sæYwîðº7½éšk£ž›çýùôgúß_±{^÷ð¼§Ü«±fÞ¥‹­úÝó=pÞ£ß=ÜÓ??Rwúgð½åLvïÍL˜3ªçCñÙ¾ýçPôºmÿÖï¡‘<Ÿ‹ßÝ=î#ºwW_ür£©·E}rÊœÁíœþ¸1æØtï^#{÷i¿›Ë-Ì÷eÍÌZ]²é’ckt}~Î=rÁ7'ó9fsxÞç#GnÚ¾À[zóodÇI>=hºý.»wv¬.…»ú2rÚÅÆy^9Í5§^}r«ËÊ…EoËJáºcfg|ï̧û¬¾ª3:Þ†pÞ×ÜUúã” »)úžwï[ù¹çûv™Ï]Ó·üŽ.«õï”alîM/ÿ¾÷î{šAϪgÓ}6/9›×9§kŽMwïÑóÎ>—#edžÜáñQ‹ç¬ìÛå–Îî–“pS?f¯ª3äZó:3l§1Ãv~J_œçÔÑ™î=êÜ¿_´¹°Ì²Áënš~q)™6ô¸\i¿ê¥èyz×~Wçîݼq×èc“^6õÈÕýûMÐòªçæ—“Ýû-úØîEß‘_ËÞ÷ÆëÎŽUÕõGëSzþ_Üüqöž|÷Ø°d¼«ïýÉöî)Ÿ.¶ö±Å츙Ïc›0ß…õ´ü-rf¼·å-ÜÓ]ÇßkÇj`ÃæÞôaÂ"“Žþ–ϨëæÿùZþ“>÷!ê¸ùáÌ+çü8øà›Y|Èfõ‘Ä{‡ÎVm—î–QaÆ:4ÝfôÂwo¾£Ú«*;xh»paC[³{gFÝærå¿NdÏûDȲ±3sºpäþáyGÇ*8rSvO»w2a§Û¾÷fÏ>åŒ÷ió»sÿ>«Z>“vîê‘‹Ý-A×¥M÷ïÜ»Äû>€W®Îè ƒAÈ° ÉïÞhxìY]äSŽÜR‹ù_œ3ä–}/ݪìZUÞLð¾ÛÓ¾Ut³uÜÔ™O|Øê‡[ ¬™5ϧo /}½éðÉy6=îÝÙÛ‚\=r[¡¿¥ÎéÛáŽî=«Ú™nwtp䶤·e×gõ™ÕwñtVßÙ3=ßá¾=l»Á·GÜñãêM=räØÛžÌè›9°œØ£Ä…=”¬úqåɱ‡í_«rKçþ]Yr§ÒÉvrÆ|:9ï'gÒ¯ê¾wïd‹'96˨Ïç=Íë]LX0g´3½éd[ZvIvîÂ[®xj¹t·,‰®¯p÷¾Üáy÷83ÿöÈ­9C®d×Vã]}Ý÷ðØÁoˆž+6õ¶¨–cÿ^xï2«Çþ–Ø™¾%³::Ù¶vòþ~÷ºwæÌî·Æ›gNyï6—7ú¾§y6õº÷Í'·]³ºÌìÿ¯¦0ÇFŸ\ðÆÙλ÷ØK/lÐöã˜Oçmý$øÞ+ïý¤îÝy[?5-Ï9ëp±®Õ]Sæ{Ww‹ÌçƆ½8»p=ç=ýÒ}r—Ñ÷^þ¾º(ï,9eÈ]Ö\:Yï̱E&làÍP×¥gÕ:Ù¢þ–Œ÷›pGÇlŽý;xr]·táÍ<Ô<ÛúÝ‘KÖ ½î2«?<²/½ñ¾Ã'§û÷ç]óéÔuü­}é/>§?K.]ýï9Þè<r¦ç¯¢çÒ±;\>LÓ½7½éQKîýüî²{ÿ|ÿäMsú×G£Ýæ{—ùœzþËØ°¿ê\þ£Îæ~Gÿi{x×õÀ„v\d¼»ï}ÞwêûˆìßG¹wÞ{º©ƒ36¬²ãÆħ·têú¸ä×->9ïW…ß½g,ØIÝ¿OtçÒ#o&úÝ'éoï‡ :\¦‚G¼8ìß+ëÞwô¶€ëÞ¸é‘ÓüšÎè3s32£;'¬ö°Íy†Í}ïÍ}réÊŽãïyg½SÛeFº¾Èy½Ñ÷%™ÓdïîwtgÌ`çNvœyßW:²lܽ›–×^6ÿ;xãVÖº}r–U/÷ó–7λÙØËVvðk¼¥ûܾÁüZÐtÎí¾wßÚ@¿ªèù6òéèMßlùã¶EÛwkoܶô¦Þ ;Óý…¾Uò`Û}lûû»œÓ÷Ólµ|_úVº÷ï¡¿ÅõüàÈ÷ïzO'?Îòè‡Çºƒ¯š~trÔβa67Þ {ÓÁŠ+}é'Ñ÷®þ¸3ïsqÆLÝÁÓwî;÷sÓòÀ‘“YýÜ4ýüRúØ_ƒGN|qèZ%6Íì­<›èzÖvÌî7¢ëÚÝfõ»éO÷Þô»Û[ñ¼ßÿ»³a¥7]³kÒËFÞLèoy¤ßýAüïO [4ýùÑ‚ìš{Þg†¶œOÇî{÷6ë=ìÞÁ˜‡®÷8¯{¦ {xñ»÷à“{:»Ù¤kUöîS‰ «lØ å’g#–ýª5Ë6ÓÕË63Cü¬øßgUÓ¥7]oê\X¹¥·²é™3þ ró…;ÞՅAÚ½7¿›»¹pä’Gn;wt¶H–Í™°Úµj³yèN_ftt§/û¬^¼qËšg[‘ŒúZòÅù̾¾*óz™Ù=î¾÷5ϯ­»ŽëoìÜבe Ü8Ìç¾ß’=üV×} 3ºv·lœÞÕ¯û²l)»æ÷ôêyëžÞÌæ»â#VûÙtï=ïû‡ûå97î€û÷ƒ0Ÿ›Ïýà(òÞ•#'~wpgpO×^6v¶{†M÷î`ÉqV?µÙ¼ô¬ž‘ «»wæÖB–-yÞ/Ôó®ì¸ìwýªÍï+ñÉ]”}»ìÝ•#×ü¾–½»x䮵Dž¶¿«›7ýéÎy¿¡ïý†l1—³l·‰5ãšþPfuøâÄón³;¼qê{´~U°ãpOç|N¿»úäƒGî‰ X°ä^LËí¶.ýl/dÈ)kFsêÐ𿥿ùî½ÞÒßÙ¯ªÙô·À—ysoÜû÷ð`É} Ã%ìߥ[UòluÏþÁ{:ô¹ôr?ÿa3:´\fô¢áÍßÃ?e>Ǭ>ºÓ˼>2$sú¿83ƃ¿\k÷Î[ºÏç¾suÆ»ìݵsµ7û8;ÙÀˆ¥žËŒî¹ôIϤÛßõ†.ŒcÄö¡ë¶{ïg\ènñ{õ¿O³WUûئÀz'÷}š9ö«Bǧ}ï.,~ÇžU½§Ï’'7ô}Þ{\˜MŸã-½³mš^™r¹g5Ïç‹Ú›XïUË8§/FÎÌ¢ógò¬®œÝ»— t]}q›)Ú¾f¼0äØÿ»îÝ·&z.y¶Ây7Ö;˜°­½»Íçìaƒç}C4} š¾å¼÷MÓó’có~¶í¶÷½aÊ¡G=²fvÃ=}WvïEÓ÷äž¾·#¬™½ø¨éèX•W´|z¹°u6ß—ýðPzÙÂœ»VÉ}?ŽêðÁ s†=.ÊKlØÌ›á¬N¯œ3Þá‘‹]«2«cÿ.¬t±y&]:ÔM×/Ï«?.ð㬿¥™Õ¯Ê»jé9²lœÛ¯ó=]üqÌ¥K>½Åœ¹n÷²qçî9¶›;ŸÏÙ£x3æ7Ö;öð>§ß cF{Ó ¿ºþðh»ø˜eÃ>÷«ú-ÝþK¹t»?I>½ÝÁuý¹—zK/>9ëNœ™À’{~÷wínAŽ-åÒ?”%÷)ýªÖǦ»÷2›“'÷é;x›Ù”»ùò°{ÿ1ôÓ}ï6›»WÎûUK[Ïjíe«Þ¸ê—\ØÑaË£—ßðÆå|úˆÏêôºÇG}Fou¬z–ŒXɱ÷âþ]û[&Ø¡ÞqO·›úãðíOú-™ôV‹t±…îô8£‡\úæóúo33S‘Öû´ô¶°WÕwð‘ ›néÔòÄ›ëò¼3n7tçÍè]gõ6V=rUË—˜O_Zî«‹…/³TòéËõ·úÝíwíK_’ºw²•üªjz£ÝË-oœïÞׄ#'é]ûwa–»ù㢖׹}S4=«Ðñ ×ó0·ÜvÌ¥ë½å•C·ªðÞ…9³­»wè¹t¬-†Ünò½sN¯œßÑ]ËŒùŽÝ{e¶Yï‡ð½ÛlŽÜÒɆÅ-¿%‡ýD3mðÄ×L:õ|wéd;uæ{ùž w†Œ÷Çé;•[º÷·¤ý;¼rçÍ\^wð—ê™Oîèê‘»B‡Ëÿ“Og7ºØ®ª¶ß”<ÛMèW ¼™¤éôÇ5}l7¦ã¦á1Ç&z~_ïë]=lwƃÅ}Ýslu÷~ÿ¨žwÓvá¼û÷É{ÓÙžwï>£sïžòé¹gÕõü™ü8Ìè–¿u±gB¿ªjºìÞá³¹ýC=r`È}¸O÷sfÙ|>çozÜqS¯3úîÛë«ÚŽ9}Èøîuçίpa‡ÑábsûˆÝÖ V³l˜ÏCwú¨ûãFG=§>3l7Sfõq2g°sã½7îÞ÷½ï=¹§WO\¾¥KN=.ÅëÞ›àÞ]séevœÝÔûèWídÃN¥lz?êyðÅM ;.ùäf¦»séÓ¹‡M:\æì÷ÜŒt·Ì~ftío÷}P¾ïdHŽm^ýq žQWÆŒéºÎç¡mɹïÅ·`wôEìÝÉ™‰7uÌêàÇÉÎ.摃OnY:Ù\Çq_—ü:\4—¾žüq¡¿e]úÙоaÚ¾þÏ9LXÜÐ7ò~ËYï[Ù'çš^³l[­Œ:ºØxO—Û.ïéí|úždÓËÛí`¼“ï¾æsÏ°Åûù>5|ßôÜgóéM?Ìû÷úoç=sù¡ìÞeç®÷tæÒ9ŸÛ÷äÔgsüîènq-—9=iù9þ>—›0ä”9Ãy>¹KæÙpWWÎ;;Vï½¼ë¨é—ìdÞ{éLWnœ[Ìh¹u±…îô»´sO ¹À‡µLÛ½Íçä¾ë¬þëý1ÎéeVÊsº±g¤“­îâŸMÓÛ½l‘9㞸ú»òf^±ƒGw »ØôŽþæu°ã´‹í½£Ë…9¶7Û·¿¥Œ:ftÙ¹g†šnwt½¥ÃóþeÿóǺkǾýçÙ½ÿ¨ú­Y¶ŸrS–L›yãôÛhúȱ®ç£Ã~KW=w¯œùãÆ”'ç,ØñÄ’ó7–{[øwÏõ½7!÷tg΀!ç»÷^ȳÑÇ;zΦ›GÎfó© é“̦{‡‹ßÔËÞ}zÊYï馞½ïèmi|qØÁO³cuFzØ\ÛoéèLŸU]ùô”I';îÙtþ6¾û`Q´]wîΑó»ú93~SO·ôåEŸÏ—ó×ïêÞ«Úá}_•þtÞÒ±w_a&Úž2éëk:Ÿ§n6v«¦ [‡¦oâ–Îù|ƒÞ8ïXÝê`½oÊþ}+ô¦oåºÜÒ·áÛFºñ`­?=t­Òïî¹]êyóïû!ŸÞ øq{{åiÇ*wî‡>³7ïÐz\Èœ9:Úî¹#ë]M;÷£ã°w?êȲùÞîèÔvó¿ÛL~¢;÷3Ï°?Žùô¬í¶?Ï«â¿àîý¼ìݽ»%úÝ5Ǧy6ɱ)ë½cF¿²ÙüÊví7W‘ ‹lzÐõæ¶~ƒû¹ìÞon9£Ãëïêw̬qV‡7®¥ç÷r?¿¿»jºïÛySŠ_ö·Ðû^µýù)ÎéuÿîY¶§ͲY‹Íç¶?«?Ž¼¹©cçν;839ÇÖβ‘9óQ½roé–®z&¬÷§ã}”;úWÐô¯oíþŸï¹ü‡½æ–þC2l?솾ûOŸ×‡2£Ž}8u· K.}˜¬áÂŽ‡›:wî#1›®Z>F¯œô·ŒEMo^œ™±f.£–ÞLÏ}rÌ°i>½'Þ÷Þ¤äÒmv·Þô‰¾íÞûÒ¡n:®7udØ”ñÞ×ù¼/Zž2lSÒŦ9¶éÈ…EF}v~wíZã¾Ý_eÂBËçá{¿;o鼫‹Çž÷ÎüẔ-ìP‡GNól ‹žEgתÜÒ—ãw™/Íé]žwáÏ2mk+ÑëÎlúJؽ+–ŒwÜÔ×<ö¶ûØT×7›ßn¯ Z¾™{V·Ì' ßL9¶­ÈšI.Áï¾;Ù|¿KŸtÝséÞ³º—<,ùµªï#ÒçBÆ {o çtö·Œ’ ;:Žî鱋MÿöþgÍŒõÆBgKe¼«ç}¼räÆ{ÖŸ>ÁY½x3=áÍLÈ=}"ìÜ'ѱj{÷)òÞ§þz>}*xãâÝæõéxWçþ}Ê™°È³±k•ù5t§;çÝéeÿ.-Æ…ÍÌïZ•î–ÐÇæ;ø8£Û~A4ýéž[CwËB`ÍØŒ¾´`\تåÚÇÆ›º2ä–—Ü#—5}%eÓWõžû[lV÷}5~CF}•»ö8«§Lºô¹°Ç%u·lfæ;nèèh㬮3zdÃnmKo‹h;²éœ×[·tû{7zåJ}'yßßßûžËœ¾ïÜ0fö á©—í 0äöEÇ#{Æïçúès]?fǪ³a#ǽ{£ßG'>§ŸÔN¶SõÅëŒî·õ_ƒçýì´ÅšQ.,;Ô… « ¹ cÎxoúy`Í\^h–íJ4ü2t²]ɬ~}Ù1§Ko ¾ÎŸéèY½Q-?ºn}lšIÏý-ÚµªÏ›æÔüž.þ8Ͳuzß­#ýññIrlê“{t¾;³lí;úSfͤޖgîÛ}÷ž;V½gõlØò»5«»>kzÕï7Û·ûþý]º[Èu6ô¦×^¶ÿi4Üô¼ÜÒ±{ÇÎ=øÞqOo~K‡ËäÓ1³ #¶ñ¼¿!Ï¥?}4øßG;üqî}ƒ¾¶æsg½{Ÿjkïn,9Í°…§ý-iß›Ü2g4£.=lù7õœ;÷~¼¥“;3òé%›>3U8ïuç>Å9éÓÒáÒô¦Ïx&½è;nè`¼Ïú|>7›Þ|Õúùùöî=ô² $Æ>6›ÙlNG[ý½|ï Êš1Ÿ\d½[_ ftÜÓ—?Î{V—ÃÎ} 3ùÒ -½qìnæ º[V:y3îwç|¾¯{êmÁ¬nº^þœ™5ÕóÄÙ„¶oÐçÙô­î ¾Û1ÏVu~w×wxåÔ·]zÓ%Ÿ¾«¿EËw¼-ö¥ë×wîàÆ‘;C¶»é8ù°©cuÿ0pgZ96ä×L礿åPýq!ù°ÊzÇ|Î|zÑ÷SfØœ[}qg–M?3~»Ùè“;÷ýû9öï6—7ß‹3ÙÃË|NÎû¥ðä¼³å\wéniúØØ›®þ8Ówå½{–-ra¯n4£®\ØÛom¿þ8èùxÞÁxÇÜn»÷šI¿—ùÜ¿å•ýûƒìÝï{ßÁygºô¬ -wæ)xädV¾÷gñ¾KËKíg«Ù5çÇQ×_“_Nvî®ë/d½û=={伿þ8ÞÓEÓ+㽃óþ}ržcûþ½ée>ÿÁWæthúÏú~ Ùþ½ƒ¶ûÏ]óN6v±QÛ5cü8t· g-ç¬>t}¬ó96ÏèãIÓ©ñ’I¯{÷qŸÕySŸ0ßû„ðÞmÿ>çôCμïî‹“ý»pa[ý-œÕ§;¹°¼¥ÏèÎ]¹_ÃÌ-ñÙüü8aÍ4ï]õݪ̰½ùÎýí¾÷2ãÞÃîýƒ½é„ýTÜçßÿó£ÌèðÅýøù?̯ý¤ç]ŸäØÂl>ÌŒúh;æôåÎŒŒxúhìXýîé#2›"“Îl:ø3‰73Ž—±8¯]óÝ{ÏõÜ¿ÊzWÎû$¹°èMw=ŸøÛŸèKwK?pß+'vÊ9ïAÏÝ×·úôô”ûÞ§â==÷­6ovºzä0Ÿû==zÞËßß3»fؼ®Y¶â{—»ºdÙ”ñ^Ùqóži+¹ôïY]°ßÒ›>X5ºVÑÛÖ;oêK¦ïËIÓ“çý{&_’;úrKÓE×C‹iºhû*oëkÒ±ªÌwg»“7Ã]ûšeØÀ„•|zöÈIÏê¹°›AÏ9§sߎ—ÚǶ‰óza -;N:VwR>}w'úãø5æ{àÃîîñanß“îô½½}×ôV:ÙÄ—ók¼© -ö ù㪎¦ý{™Ã­kU<ïœÏ…g{wö¶ð÷)½ï'”+ß3ÑtÜÖ±w?õùüìÔ}ïUÓ/BŽ­Å{ŽœîÛ}f÷ô« ñ½—¯ÞÐ/9Ÿ³‡íÊ93žG¿!;.îÜÓ-=÷¦wfÓ}ßÏ{édÓY¹tÛ¹ßÝÇY=2ål^¼—L:rl•ó.^¹'Ìëÿ`ÍðnèOìnQ\Ñ_CǪw§Ë-ý9ô—ÐÏööïçõ½FÜ{òº‡Þ–÷NÜç»Ïèšgkîéu6ÿûþ¬¿úþýç¨ç˜ÏÃî]öí?ÉŒÃ]½ÞÖC¿êÜÑG0³J6]ïèð¹wpä´cû÷ñÑxO—þ–qfÙzܹ·4\XrìWí¥Ï°ýÿsú·Vkwz£á“ÿ˜ÓMϧS†z.7thûïÆ›ißÓÉz—û9úÓggæL×¥c5yß1³Ã'Wµ|.æÒµ;]¼ïÁ'·Ðå‘‹»÷Åô±5ú½ Ý-˜ÙÅïίu«æ]ólqNWŽ\ôº¯Øœ^òèÊ™YÕ;ú?zÓá{ÇMÝ:\ÖÁ† <غo_ߌ«ä¼Û¬ŽÝ{ù¦.6וÛbÍßòŽÕâyßuŸœu¦ûZ¾ãù5ͨ³kUú[¤‹].ûî{¯:.œØíZµ½;wž{?ÛQ‹w˜¾ðºW}?b_º÷·$Ï;~#§nŒXxãNÔ—¸3Ά¹ôœI?c'›ó`‘e#ç_ðãÎ#ë=w§cFó¹ÞÒ/¯%—.Ü÷¢çW²w÷{zœÑ•!ç9îݳ_.åØnïeN¿“]xïôÇ –3ºdÒÙþ/¼iºj;=ïî‘ wô§Äxò{ºjûËKÞ¿KNýUúÙdVWo\‹óþn]«ä¼¿ýÿºnsùgñ¿vøÝ=óaó9öíÿÓ|ÿ7tìàÛ3úÐÏŸÑëŽY}3;:Ù†é{ œwpfÔï>ìsº|¹sý-îkûä”'§¼™ ëzK—}û¸ÜѱwïÙý¼Í{÷Þô Ùµ×»ºrÞ'£ï]47ô쑦jw›÷îžwÕó™°{W¿»gØbF}¹teÏÌcf÷½û|óo¡‹­£ÃÚ.Z>¿0OÖL˜ÓCNt}ž÷Ì’ó½û’u¨/©¦ÃãžnèþõŽÕ2«£‹Í2m«ø涕ÕÄy×Y}Í3lIÏ×é{÷»:<ï™ó^y3ëÝý-ðÅÏ»gÙBvM÷ï3cÏÌšsÞwºöïrSw¿ûwï;»Ø½ïy>ÌwïVeV}Ÿ>9ô¸€ó¾GvœúÝ÷9—‡L:û\Œ{ œ™Cñ»ZGú¡ûÝäžÎ™]3édÃÆŽÕÀœ9xj|ÇŒ®96v¶à7xïðÀÛßèV•ÛzÓÏãÝ÷î1Ïz[RÇjù}ý}ÙVbÍ„ßÿ…¡ÅgiG´ÅÅpÀî{»*#2²6ÿ¹¨µÑˆ•™_<\úVZ^ÝÑGÏ¡7^÷MIÿ÷ºÎçÏ…Ž¿˜ï]ïéže›ã“«ON²lêu+?nš¹3˜Ó-ŸŽlúDîçxùïì‹›j gvpaµoÕîéi¿î~÷Oɯenœö²ÅnUíp ·tÎè† šyï_¸««×]²éÿþy[Öp›ÑMÛ“GnÑætÜ×qKob6W6¬rgæxã$Ž½%ºÎüøîmÙ¹“1³äÌõÇñ†®š.}lËKÞÝ=¯þ¿âÚÎ9}Ù™qaf_u=WÖûšðÞWØͶ–fòÈ|=Ö4}=l¼§£o5{åºßÊãM=dÒ•·é.{f+xÞ7ï¾¹]㼃 [ïYÝñ›ºùãr>ÝÙ°še«t{Gï2Ÿã»¿‹½û>™3y>ߣ?î@|r[ŽÚ^dÔ{QÛ±s?ø}2lȱy– ùtó¼ s&òãì®þÛt\²éqV?þÖ~U²ÞqKÇCo:o꧜Ïk9×O ;tÝzVSŸ‹ðã˜e+æuÏ°EÞŒrf8››®Ÿ¼™?`ȹçýòì8ïdûCæÌÀ<ð—qF7M¿ÔìÚåUäÍho:;[$Ïvçsöµ„ÞôëZתë¸æ×n¢®£cy6°ãî¢7î^ø é%ó=fÚrz̳6líeÎÌC˜ÓÁ€µþtdÙ8§?ÊÞ·ó‘ç×FÏdÃ2Æ[ÑÅæü8ɳɜþJìKÁ’{a†z^ðf&¯úÝ‘Q¯öíct´°£mÊ,[ºŸ+oæ-ÞÕ™eÃ~êÞ÷ê}Ð#÷N_ïèŸïÙçÎûgØ»|z~íCïé`½—Lز·å ¼ñÆÍÌß®]«µÝû¿<» ¶Ùh|7ª×ij½»iúbð̨·xGo¶bË"æó¶t¸´‹[:zÓ‹Œ:{\aãL.wuݹ³›­CÞ séËéqYò^6v²Å[:îéÔoxæŒï¾j¹Õ•¨é+Å].YËWã]ýq)ŸÎ¬ºìÝK¯ûÓ×ï¾=r¼¥ÿhùÆfÚ½sV×¹œŒ÷ÍÀ™I¿·³¶CÇsz¾å;wÏ°ùœ¾c½éÛ»ÛÒÇ&óºö±™¾g]ß‹}lµ®Õ¸sO̸ÂófôŸoo¿GÖÌ>=î²{?èÅ;:™ï`Ìô¬3÷ôC˨ç™ýóù‘úäþƒ%GM?¶<[ÖwíJ?ÖþñÇa>çî³ú©÷­ž)oF˜3!ן듛;£³cõxòfæäÒ“÷]y3¡3]™°Îw×|:ûU¯+¿Ž¬÷ÛÛ0«‡lúÍóãn}÷î»ø{áȹ–'ïèCç¼Ïéeƒï}¨³úƒýÆœ.}.ðÉ<«NÏ{`Î<å;;Øam.XïÏežÍýïÏêÃî½bÂ>¿Ê¼.¼raë}lšQŸO™tzÝm^wþŒô«Ùô‰ÜÒ³®¿ wæz¾û[™S7>ì‡fÙŠÝ;y3œÏ}^§×]öï3Í´I>=«µ›ºïÜ÷UÏ©sßnóy5“7òlÞàÎ=ÏëÔöf̲5KœòãZ>¯·”KÎ{Þ±·~4þwxÞ• Û¶^¶Šñ^Íèí¥è«åØ–¼Ç%åÒ—œ‡~ÕЛ.}«ê㌞víÐwøÝu>_ñN6v¦;6ûâò<¾*¬ïM_Ÿ«éd¼#ÏVé9˜3ëš©tÜçôj/_ézzÝn1Ÿw}箯èYÕÝ9rꉃ¶{×jèJßö}»÷±I&½d½ïIž­Òö}ÕtÌêžUç“ŽÕ}ðg -Ïû¾2fÀy-Ï÷ôv³õ~ëÜ®ýé~S?úíªœÑƒžÛ¼~èY6°fÔ'ÆÌщpäŽÙɦ>¹ã”e“<ú<ÞŒ=ÎêU¿êiäΠ˦œ÷”_;sÎ{Ÿ9ãÇ…õ¼_ØŒ~n»÷?7s¡¾¸Kùò–7(»VyG¯´Ü}ïØ·#›ŽÝ;rê×?Ÿùq`ÏD]¿¢®_³s5Íê·ö~ôûú¶œÕod>¿aV¾8ìÝïõ~ïùôjFÚ==yÝ™I¿“þ–§~9Îç±—š®·ôGëM=P˽ÇEÞ£øãìŸû(ê9vïèNÏ·sãÇÍåÍÔ¹3ÞÁVò`ë-µ{ú¾÷)smÊG.íÛßlV¯úØä–îþ8aÍ„]{¾©¼ ëý­ð»k.]ò鸥mŸeMÿ †˜¦›†ùµ/ÿýx3Êy÷l:™°ÿ¾j¬÷…¤ãyFO:ÎÝû¢gÓyO‡?Ι°­¦íÞ…7ÓboºíÛ¥“­íy¶ì™ûrmɧÿj;ß}Iòle×*´œ9ô¸ðžîý-¡Ã¥£;÷Ž3Þ%—¾¼ì|wåÈ‘ñ.œ™U¹©ç§ŒÝ»¯œ{ߥ þ÷uÌãù»Þ]Ï^8fÚ -ßû&~;6³`½Ç{÷Í-ɱ¡¯Eø3>§{o::Øè‘c—ún¸¥o ë}gÏ{\övÄ';÷Ý"›¾»¿Wß¿ÏáÍ`>gǪeÓý¶Þó.6éo鱿EØq¸£ÿ–y\ØCñÊ‘ólG‡®çÐðÀ+<ðY× -Ž\•_;N{÷´sG¿ê±qÞ•9Shú¼[ÞÉCËí±‡Ít]ØqéU:«÷áoš~ν{šÓ©ë¦í¥×Ý8rØ»ÿü‰^÷ÐÛréþ¸Á•1bݧ»w0gбÊlºdÔC‹Ìíìeã Ý;Ó÷½ð¼û ݵ³yʪ{†-çÙÊ~U›Éï%“.lìM·¾–!úØxSô]»Îȩ́Kw:îéOÒ™N¯;¼ïOì[Mž¸Ñ3wîa÷n,Øgɧ³3ýYúUùu6¬ÞÒÝû 5]¥/lÁ#§œ™Â8rIÛß¾K6¬zÞSŽÍfò7dØÌ'÷{z‘aK³9=ïî‰ó»z̲} “þ)Œwùýú[I/æsîÜ¥CýŸÍêÿâþ=ëxÞµcFo†×ºsañ6óa-—¾5½Ý*vïíرÚ-oEÖL{In襦ë].N½C]xïìK×9½³zÓ—åŽïéàÆ­p÷¾’üp+ìY]]]u.,XïÊ|O=«–I/Ù°²swܺ{ãBgú†3a7º±_•éy÷ÞÖ{¸¥3džÎñ½×zV•í5~Ûv-ûvý¢S5qgv½g5i¹øãv÷|¿5Ýwð–aÛ ÝéÐsÕ{úíõÂM]óé±[µ'96ìßé•ã-yôCÉ¯É ýðX™°î{'oæDºV &,ïê'§…?Î5ýLtýlŽGN=ð·íSÓ3wæ<ýOwî9×oœeØúáž~ξôóÈy¿ðûE`È ç½ìZ¥÷}@oÜåÀµÝµ<3Þô¸»®ãž> ãÝ5üê¦ìO¿ :Îuá¼—¾÷›Û˜Og6Ì÷ºG&¬éùÐïéwèYUOÜÐwïÚµê¾8aÈ s6}øè9êúȲ飂%Ç»:tÝõüIøqܽžã^:V5Óæ3ºÏê±oÕóé¯ðɽÀïî¼÷±üv]÷ÎïLÛ-÷ó±pa£7.Þϧìc{ì^zãÞ=ŸÖÌ›ÝÑÉ„…ÿý³ž_CÎ{Ó¥›Möíî}Ÿ…lz|_1—þWvïÐô’óþ£í ÜÏ îÚ}çÞ¤Ï]sF?®YîÞëÞ¸ØáÞLK|ï-ò`•ñNßû’zä°wÿå^wÙ½‡^¶N'èy~8Îè²f:Ðó•eyÚ«ºì}láÅ[úšjúšk9=ð`ljž«¦o]—9}½ÔrüVÞÌÏÿ7Õ÷¾9§“-ßÏ·¶ºE6}3xÝ©çœ×·ý¦Î|zìbÃl¾+¬÷ðãpK׺0f¨ãû»rGw¿»Ïè%6ÏéÌ©WúÍŒzΰí÷,£^pÞ+v3êó:Óå–z[’î·t§ãùÞý8u¬:–šnú~rìzžµüˆ·t×sϳœŠOÎöî˜ÕÓLΛÜ×Õ+úØYïgÎ̹Îìyßî½éÑó~>oVÿãþ8fÚÔï.·õб|qrS×|ú@:ÚÀ™\ynMxïíL/fóØ—n=«ð»ßÜDŽÜ-|rÎ…­åÓ‘I·[úýmîm¡¶ßÂwïY¶ô÷0ÜÒË.6ðã”5MÇM}XìÝ3Gnüî>£+g¦`É!>-'cfTô¶<ù¼úU5n=.¯žMÁMlرxãÈŒ›£ç¯…ç}â7õ:CÎïéèù$Ïä“·iÐóì{÷9}*zîÜ™:kæóú‡°ä>à•Óý»3ã²® ë]»ÓMÏÓ¬þ5 ^9²gÄ÷þwv˜°_6Ÿã[åÕ艫Ïéï’·8÷ŽÞ=—LzÉ›IÿoûÞ½èni ãýW¥ïÚ³šüpmɦko‹ÜÔu¾aFÇ}©Ðtzâlf\Ǻ[VTÛKÞ̪Ïéî{†ÜšÌëkâ‘[Ïßu0Þ¥¿E»Ò5Ïæš¾A\ôºwÅï¾á¯dÈuÝ÷Þ¾;õ]òéÛ[àÌ MXï’Oß2fÜ6öð)晶‚5^äÈ!ÃæY6ŸÏµ7=æÒëï@÷ͳl¸©ÓûÞû2ê=íléáŽ.¹ÃCfÓu×î¼ðÞé‹«´Ýslò=þ¯›ä׎O©å'¸£Û.^»ÓÙË&;÷š¾¯÷·œ‹Gwô¾pfúÆ•é§LzŸszΰ‰®‡ŽUÙ·_ø»¸¼àMý]l› ¹´:~iZŽŽÕAØ»WßÈ{s:ÞM˜Ó¥cõxñ¼+¶ðÀ£kÝ鸥c÷îm–O·[ÚÃïB>}x/þ¸{ϦãywËC¸¥û=ýÑwð¡_U+Cî)±Þ•ñþ$Ùtïo.,3OÔóÌ¢y‘ÙÜfòò¦¿»þ~»÷hù«¿×É8Îècgê÷}’x3¾w‡O.ßÒÅóNÎ îéïù½»¦OßßEÓÝóþÁßÎœ¡o®¸©3“3l3Ù¿óžþ)lìW‘‹9=÷±!—žïÐuÜÔ0›/˜Ž‹ß}Qïé‹îãý¼Ù-—Ûzk1yßM϶à¼kKȲýŠý-¥OÎYïâƒçÎ}éÛ¹3æ‘Sm¯´{I4ü8cÊ­äN6ß½‹çÝô|Õ´}™7õºWnmU¿kΚюÕе*LXê»ö·¬Ëî}=ùã"wfƒ³¹raéŽLz×ØîÕß[Ôò.ï–OO¾)7tt¶ÖLfÆeMßúŽýªÆy×›:{[Пïû^½ku¯Ü¹Ç]=ïðÈ]Z:Ví·qÞ/.åž^paS_:+}ïÅÞ];Ókùô™íݳ7nö×÷î_¶s¯tœšÎY½)~÷†0gÄëŽ.6cÅæ®Õ¨éÁ—t½mþ÷vÁyo±»%ûáZâ‘kÿßîfÔuFGozǽrr÷^åÒ—u^÷ŒzèrYq†\yKw=6ìÏlN=‡¾Û®Ý½ïàά‡<[ð½KÛ†fÓeV÷Þ›Óçð`7™cÆLÁy÷}¶È°a_ïdÛ!gÆ{[vmfßqæ{x»þ{Onéä»vWwðyFß ¬™=ɲiú>»U¶È¦÷°s¬Ó{âw¯kúu]ôýHu,=ðÎSÜ;üîsYïŸqÿú[t>ÿô½;oÿèµÌémÛ··½Ã%kz§~S‡?ny)zäà{Ÿ›aÃw…/òf–éãc6Ý9rúÖÂm}-äÓW1§'®Ü†ßÒ×"g\X0ß×»šI÷9}sÃu}Cné`ÂúÛò¾tÑtîß7}çN}ß~ÜVô»+wÆgõɱ!®Ü™È…õn6›Ów÷=·ö»÷бŠ9]9¶+廣³eàšîóúu}÷~cs»äÒ•5“ólç»wh¼rÞ«™üV|r…žßÃï~—ýîÃ;ß»—«±¿Å{[¼cUØîÈ©?>²;}$LØK CŽ6ٻ˜>*´¹txä\Ó}VwŽÜ ýï¯ÏåîÝu}ü;Ó£÷}\›×ÁO‘[Ël>eÇjöÈM¤Í½ï̤“ù®y¶wfÓß-¿–2é˜ÙÅ÷§›ï]ø°ê‘›É¬óèúÊ^¶/2gbÏ*<ð6ŸÿÌä……¤ëчߞO'?nž?®™ûÒý¦9rÞǦznœö³iw:¸3–Yÿ%¯Òð¶ÞÕ³?.°ä´WU²lI׊ gríeëäÛy6ɱ±7]çó•BÇ%Ƕ¶æ3;y°ÞßRv²ùÞ>¹è{ç¼¾QcÇ¡ÃÜw°a7»Ý‚7Þû–°gÐá"ûöÍ­Â3êéŽn¾8gÎX&Ý|rÜ¿sמgsïpq¬²a•óžwðÐõ=îÝ÷tF'cÙthù~òƱK}é„MÞ¸ƒÂóŸæõz'83Õ¬žòèÒµúûHrè\þ«øäÀŽ‹é'!Ö̱ö¶pZÓôª;ýä,v¬æy½_ìÞûd¾Ÿõë\Øs0äúÖ¯ªsº±fúªéx`Â^ˆ×¶ ¿¡“?sYøÞÕ'7pÆ;þ¶lú•Ìì~O÷›:{Vçì߯Š{ºçÒ¥ÃEx°Ôp2ÞoãZîš^0gn}^Çžó9üîÊÜð`½c^(ïé?ú λøäйtZ}äŒNŸ¹°Ðôçùþ8xãžžÃm½æuþ ;Ùof\t¦çl:}r°a_ß}Lo-½qÞßRÓ÷w÷¼»ÿý#äØÈwýªÈ¨ËþÝ:VÃ=}Nwz9«Ïþ:;ø…-¯æsÌè MÝ»g=o9²ã í§¹7ýç!æ\X2ãô–þó¿¾päúeŽ­VÛ·W¼íd«ýï>¶7ÜÏÑ®l…¦Ë¹ôÙÇŒŒXíoÁ¼þe÷t|à }æ9¶À›±9}¡±`;w›Ó2«7çûÞ=϶²éîœðaÙ³ÚjÑ+—ÿn{6½­÷ô:–_¹£·µ“­æëØ=Ý}îìdÃwyŽïÝtü(h˜¨‹|]éVbK³|ÿ·9§Up@drÄDqœpè>÷¸»ª22#kÓß\µ±û¬ÈŒaooo±WLm·¶¨…ïZñ½W|×Ò÷^-|§Ù³§¶)þV¼qêá­§©ãoõE½ø]¯§9©ïÁÁâ qßF=ý­±ho£·)ßÅ4‹f˜âoqâïâm5­FkÑh5åwsÑjµŠiÊ´tÚ­ö¢Õn/ÚíV|[ÅÛ–ßíN;}‡·ÓYtÚÅ„·s˜~s¨ïáâð°ø>,Þ£ðæ(ÎQœÃø§ßGaŽã{x\ü=|Ë{Þ“ã4ÇiNÂ{rR¼Åœð/NÃßNÓœžœ¦÷ô”æ,ÎÙÙéâ̽iºñíÊßÝî¢Û-þßóÅyxÏÏÓ÷yúŽ»8Oß4ç~.Â{™ÞË0—‹Ë‹0òæê¢ù¾¼JßWW‹«0—òÊô®zööÒÛë]/®{éí]§¹»æé¥÷æzq#ïõõMñÝ_ÜÜÜ,®û7ñ Ó¿éS|ë÷ûiá{ ߃Å`€wßþ0}à Ó;‹·˜¡Ìí ¾·ø=¼-¾1£âß‹Wft;*ÞQñߣQü=º+þ¾ãÜÅߘ»âwœð}w·¸¿»/¦ø}Ÿ&þ¾¿Oïø~1¾OïýýX~ãqñýÞ‡ÅCñ=~Hó~?¤ó¾ñ·Çâwšð·ÇÇÇÅSñ>ï#æé)þŽ{zN¿Ãä}{_|¼}¿‹ÿóÞÅûGz?>læøžÏÝÌçÅ¿}Îã|Î?‹ßŸöûó³˜ðý)ßÅ|}.¾âû߯ðóýù½ø.þí;üþßß‹Ÿ¯ðþ,¾‹ß?áoß?Å[ÌÏwzãwöþþYüþù-ïŸÅŸøÞߊ ßÅÄ·øýG~ÇùógñŸLüþ¯xÿ ¿ÿ+ÞÿŠßiþï¿ÿ[T*ëÅT•õJ|׋ßa*ëÅ[ÌÆúF1Å÷FúïzüÛÆbSÞ {7ãlÆÙ -ïfñ{³ø–ÙÜ -ïVñn-¶d6«á­.¶ø-¦Z­Þmù®¦ïííÅvxwª‹íð-³³½cïÎŽ½˜ÝÅîÎnñ½¿ãïøîoš½Ý=}÷ËwkÅ¿Õ×ï‚åŒçqöÓ×–×âÔkõø»Vlž¾ç6 ß ü®Ž§‘0½p>|7Ãw³ø[Âó&Þ&~ ~ÌOx^`uñ¶š­4Àô¶àzÀìˆïÀövÝÅ´Ò›p½1ßN>‡Ëãu"~F '|/Þ££„ëç‹ïãð›ñ¼˜£cÁôcà¹àø±`üéqÄñˆç§ò8~zLOx~þlßg Û–Ÿ¸}Ú5Lß]Ãõn˜nšsÁõîyøN˜þvÑMxÞ8Θ^¼Ö–ŸËÏ ü¾LsßKù}±üJ0ý*Î2LŽL/p:üîõt"¶_÷ ÛÏoÓÓ{£pý:b9ázß°¸>¾Ø>èۇŠ"†ôíG̿߇åÃÛaœˆçŠå†ãñX1üÖaùÝ(á¸þ,¿ŽÓ#–ïø.azÀpÆqLøÿöPüÛCÂsyÓÇô<¸^ÌSñýô(øþ1<üÆwÀqÅð¿ã;l†ìó4I¸L/æy:ÑïˆíÓ4 ßg‹É Ø>>a ø>K3%Ÿ½Ø¼„÷u–0ý5aûkíáoá}X^`vÀxÁñø·×W‡çï2׎ÇW¾éï‚é·Ãûîðü}þ.¸.8þ°\æØ>xq{ÎXlOŽ÷ëËðܾ¿ <ÿJ¸ðüû;áûwÂõôþD|WL/æwÄôßq~ÿ¤ïßÓãüŽØþ;þ­Àð€ó¿ß¦ ®GW O˜Žß†çÿß5ÁpÃô„çëÅw˜ÊFÂõuÁò„í‚á›ëòn¤¿x¾çá÷¦ÎázÀmÁöêfÄð*ð½Šï„å[Šãi"ŽoWã쎘^݉ß.𻺓Þðîà%Œ/°|wg'ÎŽ`yüÛ^ñ½·#¸^`ø^šˆë»‚ãGÆGŽ.¸ž¾¶'>n\½9ºâ:a|]¸z£øž°<ýà òu™x:p½Àù¦ãìÆÕ­†qt™V#ÃtÁòvSð»™°¼ÌÏŽßቫ8_Ìaû°¼'pôÈÕ;àèáߎ¦ žÓß…«'L?NßÇÇÂÕžŸ$ ?N~,üoÄuðó“ôÆ– G8\?;õ\½ ®ž8ú™à9c»röÈÓ»¿G¿LoÛ牧Ç7àxœKåêiä;ðôË„ß‘§_ÛÓ>~uÙ3<8~yyÀuÅøë„çׄíÊÏ‹÷Æñô€å ¿ãwÿ:òò„éý8ÓÁÕáÿô#–€ïƒruLäéýaÄòAäëÃÄ×yÏñŽ††éŠñ#áë‚éÆѦ'ŽnÜ|L¿3n~wŸß×ÁÑÇ‚ïñ×Ç2é} ?˜=Vnþ |=qtyמ'·oÃsâåÀóÉ“ñò„ëÏ‘›OðNüÓí,#ÜߣOë^OgÂÍÓ#GO\=~lŸ W•yIü\ñý-Í¿½y®^à¸â|ÝoqÒ7ø9†1ýpýcN<1=ðtÁvãèÀò/ãè_ÄÕ#®– Wÿ6Ž¾ŽÉopõ„çß?éwäç4ÆÑÃû[±<â¹¼¿ÿ$\|ýðõ8á[89½ÿÞÿû߈ãÁñ€ßë‚å‚ïË«ƒ›_7^.Ø~¾¹ax¾±©Xxyâè2ᛸz˜*¦ÄÓ·– ®oGLGßÑ7awÂpæê¿3®g7á8óôݽ]Áôô&/x{ÁÕÓwM1Ýöî{Šå‰£ç\½àèºw¦ƒŸ'ŽÞ~ ü&,O¸žvï÷ñM<øùC¶w$<x’}û£½£ O¶?3_¾N»vݽOl&iïþ LŸ¦ý;0}Š]ü4½³išéŒvî²oÇþÝðÝÔ±O÷õ×»­'‰vòo²ƒOû÷ðËéž.Øžöðï‚íÊ×Ó]ý]<}þn÷ôwæéóÚ½WO¸wÇ>pô¹ÜÐ??Ç==àö§Çtà:0ýGïêÂË®Ó=ñÜÝÒÁÉŒ«ÿ!¾Žý»òó߆ç:‚ëá­TÖ•µJåÂϱ{ßH8ïè‘“ ¦¯b¹îâeÿÎ\=rô ÁrÁqÅòÍxK¯âw5ñô€é˜€ëÃåi÷¾­ûöøÒŽ}Ç}×w…Ÿã~Î\oÂó=zWǾ<5r‘³Ï÷ù¦nx¾<χ8z}_nçN''wôºíßëzÒÉñM=rsÞ¹Go*WgŽÞP,—iµ2m\ún -Gœ#;øV¸¡óþ½½;kåŠÿsØ6ŽÞ¡;:ñuÆrÛ½~nûwÜÑŽNG' Ó€ãÇi×^ÖÈaߎ{¶{g\_²w¸î¸zWf)O7\wõ‹®ÜÏ»%ιúexå~.˜î†x:víº{§[z¯ÄÑÓõ~žvðñûJð\øz4r=ðôÆöÏÕÏåž«ß(¶Ç[z?Û»1CÃu·s¿¥½û@pœ÷î ×Ç˱o¿%ŽîõqÅ÷}ÂsìÞãoàùß»‡¹ó=Ýö힯3–•§«F.îßÓ˜N4rOO2,'Ž®·tpupó'ÓÇMh¾§¢‘›”nêÐÆMã==áùDøy>ÆÕ§³™jã¢N.âºÜÒ6ÎãzÂv¹£¿–õq¯ÊÑåž.üü­tS‡6Ž°=ÓÈÍ?ˆ§ËûñQàø‡éá°s7õ8_†å´{Oü\°8þMxþý¥xn{xÞ»G¸Nú¸ß4Ód÷yúÂøeú8ìÜãüÑ;4qÇ×Ö×"®¯L_«¸[:vîÓ Ì®lTH—ð|]÷åaÿ®8®;xhã"?ßô¸¾¹Åú8Áspv½£WõŽÎ÷ô´·Ýûövñ^·‹w›oê†é{qŸ´q;{{²ƒß3œ»¥ãÛe÷¾¿·¯ú8Õ¾×I+Žžx:trÐÄ©>îÀp½N·tÁrÁsÏÕ›išé…î]µî9W'­» áy›Þ¶ÝÎÓ=]x:éßÛ‚á}“>î0ÓÉEŒ×{:¸94rG¢‘Ž~dýèDîéàé‚í¸¥Ÿê=} ¦?;Iþý,iäÎD#wðgÆÏõUL7®~~vžpÝÝÑ Û»ç²kÜÜð.ÝÔ¯¯äŽ~•p=bûµíÜ“îïé˜ÕÈÝ׿õ[5ï‚íƒôh?ð$­œáº`ûü¼Ànåê·²ƒ¿%­ÜHïçÀóÄÏ…¯n³ºðö;Ù» ÓË3®Î7uÃñû¨yˆ+0ûþÁíÝßIóýû£ðuìá#/ {:öîáïϬy·;:vð‰«Oœî=póÄÓ“Æý¹àäÏàèÓ§ÅóøÎdï>1®0|:›ÑþtqSÓÊ—ÏËg¯/Šëªw¸NÚ8ÖÈÅ÷n餗{·{zÀõÙ»§ý;´ržŸÏ—`ûœurŸsáèi’Þ}NÚ¸OÃuÕÆy4q_ÀsÜÕÓ¿~D÷ãõq¿åoÆÕ“F.a÷OÒºÿ¦{úŸßzGß¿ÿû£ßQ 'ÜüìÞì­­vîkÇ×*v;çÉ÷C+':¹€åëÀôÈß7•³—8úÆVÒÈmÉ.¾ÄÕýþ}‹oè‚é[ÛUÓ¾Ë7nê;ª{§ûyØ·³Þ]víÊÕ Ó÷d÷¾³»kü\tr9Ž'Ž.ø^O盺àv­¦žstÞ»ï+¦ ®dzwÙ½×#vžn¶¤KX~À˜Þ4Ý{ÎÑá]ƒ>NurÊÓÛK½l Û¡ƒgŽnº÷½öaÚ¹ëÞ½#ÚwÙµÎ.Ø/0]±ÝyØŽÏOX#'\ïê¶{7\?qüXnž¶3Õ¼¶g7tÅtõ±¥Ýû9az7×ÆÅÛ9°ý\ýk‰§Ëýo\=ÎUäìzS×;zYó®|=rtÓ¿{}Ü5yÚä÷MÏîè½Ú¿›þýþ5ѼßÖý6ìÜûƒl÷n7õÁz÷°¿%O¶xWøýûÐ4qÈá¦e|=`úíÝ(»³ßéÞý^wñ÷ÆÑÁÍÓEã~?vº¸{póŒ—pOg ü£ÓÅ™þýQöñ¶sÔÝûßtrOÊÑÇí“gwO/éã& ÇUû.;÷¿Ž›OÅ¿fXnݸú+áûËkæa£yS,}\îc?§ûùqô›ÕÈÑÞéäæª}g­ûüóC|lsÝ·Ïe¾æÂÑuïn÷tÖ¼ë¾wô¯/Ò½\ÿ2mp\5ïÂ̓«‹îýûöÛ½ÿɸºðõˆïкË>â¹`yâæü ®N·uåë ß7*Àtò®‘6ÎéãrÜóôMÓ¼oùûóõLï^½{ܳWížžöïÛñ–Î\]uïÛò½ ¾¾ëýkÊÓI#ŽÎ{÷]âæªw7Ž^S¾Ž};“/½nnÞµýƒºîàãÝ|ßëÜëª}÷7õéå’æÝ^½§7ÒþºwÓ»'~Þ„>.ß¿Ëý\÷í-ó±Ù ŽÞV?ºÎa;á¸pôCâëºwgmÜ¡ìÙqK?$Í»á{ü}r”¼k<Àu·w?µ›:¾K÷ôSå槂ã§àèŠé6zW?¶Ã¿vnû÷î…b8ôîæ_»ÐïË ÜÕeð7½§X~q¥xžöïI3—8{/ÛÁ'MÜáùÕµíÞ{=ÏÓ–?¿¹1_zÀõ›k»§ã¦.x1=â|ÂóAñÆœ°æöðÃïà‡ºƒWíûí­Ó»«—m”ôrúMZ9Ý»ßÒM¼ènîÍË5ïŒíwcáæð­™-àùÃ=iÞ77ŒÇïÄÑ¡—Ý{š'ÑÄewtÚÁ?Ëþ=ÞÔ3L÷Þô‰ißã=}j:9Áö)íÞƒŸ-èÜ'rC÷zwÁõÏ×ë3ÕÄe®žëã ‘S\Çžtq¹ö;xpôÌ›®˜þ‘öìïкG<ÿ°wžsuÙ½ G?ÿš‹þžtѼ«>î3qõoÜØ¿¼Öý ¹Ú½ÿ~þ]ÖÇýþMØN;wà7ÝÑÿ!ázäæ‚éÐÆUxÈ—^/X¾¡>¶ ¾§CïN~ô ñ¯ymœÿ†Ö=áyUð|Ónèª}®¾µ]ö²±ö]q\îéêQgïšçë»Û;ÊÕõ¦®{wÑÅí-¹¥GºèãöŒŸ+Ž;ú¾»©ã®^øžôqõ:ïÝEw@:¹ƒº÷³Õ›3¦ã®Ž¼™„é–;m\âê ãé-ÂshäÂïvvKo·Ó;ð³µrŽn˜¾E÷~H¶ŽpõCwK?Tž~XÚ½[æŒbùqÂó€ß¸©37gnéª;!}\ÁÏÏN²[ºêã ×á_ Z¹„çð°O÷^uÎœ¹0?›ÜÐ/ÎÉ‹.ø÷ðн_ÈÎoéz_ý»îÜíÆ~Õ»Lx.¸8úÕ5qtøÓ™«c/|¼wcØž°<ÃsÇÑù5OºñsèÝ嶰»?T›Ï›L¿Íoë„çá ɧ›ß½'|¿Soº×Æ,c&ìÝ#¶ß+¶ggÿÚ½~‡ ûö¨y¿7LOù3àêÊÓÇŠëª{\ý)ÓÇ•09:éâT71<Žnøý¬ßêKžÍûš÷‰èãfнûœ™|ÿ·ôãí¦‘³;:p]¹ùkÊyƒVÎéÝßýM÷îàéÑÇö.xn<}lïó´{Ÿ”÷îŸ×ãþËð\±·tÇÓÅ‹®ûwæè_º¾›6î[wïÌÓ˜§+G7ý;nèvSÿO5rÈ›©Ä}ûÚL_SL_'<7:xyÅãºêÝ7GßØÀ7uÁó­ÄÑ7±OßzK¯"oÚ8ѹóÀ“®wõm»§WýM}GoéÛ¶‡—]û¶ÞÕwí–¾cþµ½y¡wnž|mнg6`ûžèÜÃM½M\Mwïuݽ×ÝþÝíÝ9w&Çtðsõ³±Þ=ó¤kf\ÃnéÈši¶”Ÿ·ÔŸÞúËÞÝü麃ŽóM½ã}lmìÜ;‡úb÷¾ ÓUÿ.¸n¹#Õ¼ÃÛ½ûɱÝÓõ–~|"y3ÇÆÓÏ5;N¸úYÎÕÏO ×ù¦Þ=;£|×ÝÐÝ=]øzÂwÊš¹W?WOºŸKõ§ÃÓÞýÒyÚÀÕ/v_^–Wï‰ö=ÝÓ¯)s^¶k§{ÇÜ6θz™§§ ¹~†çк߇Íxzœ¡xÓ…£3ül·rO¦Âþ=búßo鞣ËGš7s?¢ý»zØÌÇ6¾³;ºó§K¦\îMÐ'<Ûþ‘¼lŠéáûéÑn뢇-Îã³þFæÌóÓ³ÿV\GÖ ´îÏÓÓýÙ{]ÎÑSþÌ«yÔÝþÝ°Ú÷Wæè︫›/=a9c:rgÒ~¾>O|}þ>÷9çKŸ;{Ø"Gÿò¾ôπݙ7¸®y3_¶wûxäÈÃK˜Î~tÎœ‰ûw¿{·tpôÓÁÕƒ6n•ñ\tîk„å Ï×Hûî÷í¿W/¦BÞtݹ¯O—Ìåé)CŽµr[–?c>6áëUâèÏE·E˜.|=îß·=_ßÙ.kàU#'6Ý·gš÷„ç¦3ûÔk”1S³ýûžá9îé5¹©+ž×àAÇ]wïy~\Ú¹×þâc£<¹ÆëâxïÞÐì8}[¦“ÓÝ{+ñôv“öîÀwìàÛ ã;ÙžsaÛ¢{ovÔËuðš1s¨¹öí¢‘ƒþýð~ô{ìïêGÐĹ½;ra‘;o:2gÔ×6ì߆ŸÅ{úy—|l]»¥_@›òôóèK¿<¿pÚwãëÀs{ÁÓ#Gï¥7iÝÁÓSÞÌUo G×lØžÓÈõ(GŽ1ÝpüÚc:eÍ`Ïø~#|}Ðg}œiÝæ}À:¹Û¨w¿GwrCáäCɳ¬™[Ù½ßÞÝ’—íN³`ÕŸøøÈïàïÕ×&\}lY°¶ƒÎþ`ߟßc÷®÷ó±òóõ¢{Ý;ßÓŸéŽþøX¾¡³‡ç)ñó§ íâ'Ï皇7òsâé¦wÿ,ù×X§»wÉ…UqtݹGþ­»öÊœÁÞýGnè?¼{ÿíïçç+«ÇWKº¸Špô5Á󊻟ƒ¯W¼FncCýéë’G;xø×’þ}S~.Î;øÄÍÁ×—åÍXæŒß·oñM]ñ»êöîÕèiÝ»ó¤o;®nrÌÓÅ»¶g>uìßí¦¾»¨íò-pvîš5#y3‘£Ëþ½^¾{^î²Þ,sæà€2åÂ]½!7õºÏ…UÛASð]ôî|Sgl'ž®ÞÌ4ïííÞEûÞ‘Af\ÈŸi7‡‡­ OºË…¥ì™£e»wÚ¹«‡Í´rÊÑOÀ×O(KîDyzÄöwìw晴Ë}lggòž’wM8ù©×½Ç;zæc;#®nü>6˃Å]÷ðÙþârY&ì¥ÝÏÿG&ì¥ÞБ/s¥š÷Þ5eÃ^[.,îé7ÊÑé–®þ5àùµä¼[Þ{ÒÂÇ9–vïýAæI¾›ïœ§9rtS\}˜eȹy¾N;÷8£û¨w‡']3ßãßÀÇïH÷Î9ï÷šõþ \yïK³fB>ì#räèž®˜þ¤yïO¤+ÝÔŸs~þœ2b'Ø»[†œãëð±MyÿÎX>‹ØŽ[:4rSÑÅ9Ž>óùqn׎ÌÁuxÙÞÔÇ&ø <½Ü+¼lr[לæéÓ)GŽîêN#7‡æÝðýSüêÈCîÌí»»¥~Û==~sì—Ë›áùù±Ì÷ïߢ•“÷÷·iä~ˆ£» 9§{ÿCüü·`9á¹îÝ–'¾p{Mïèë„éëN·a>6|o”gS±=aø†»§[.,²ä67«‚ëUåçUÑÇå˜nº÷ªéäÏ‘kyïÌÏóIYïÐÊY–ÜíÜc~ßÕƒ/½fþô=×Û‚½»Ö½ƒ£×\¬}cÿ¾/>u»¡×3nN].’{ ^tÕ½7î–ÞàLXÅtÊS?›åÎD¾NXÎ÷VǾ5ï]÷ï‚ëA×ñù°êk‹ü¼“rä‚îwtò©cŽÏqO7?2Ý»Ï;&¸ú©v¸¸þ–3häNI'»÷SÊë–½lË2äô–®¾ô Í;'Ž®™3Œëç—Šéº{WOÛ¥zÓ¯×7ýRú[z>–yú5éãÄÃvsm¸~-¸®X®ý-׆ån÷~³à¼Ÿ=2ÝûqBÞûP1~è2g’>÷óárž>DÎ iãn…Ÿ¼.93èm7ÝïÚ3/Ûøn1ùq´ç;ºó¤K&¬iß±‹TýûÒÝû£ÿ®+~cïþh93Šã’#gù2æGWí;ç½Çýú³rô„í3§“³ ¹©ß·Oó;:åǽ̈Ÿ£ÃÙ°eŽî½ly¬Ïzw\=¿«ëý]=l)ã]¸y®û„þ“rä(g†´ïæcû2Ý»f¾Ëß¾±ƒÿ¶üOò³}QÎŒéä¬Çå÷÷o½£ÿOÿC¹3(s&îÝ].ìŸÅÚjÚµû½;4ﲃ¸¾®¹°¥›ú:çÈ!7ÎrfÂwʃÝL=.zG·oÎ…UnÎ.[ÌÕ¶oBÿNn®7õím|ïîôrš»›nì¤{W<Ïó`ÙǦý-^'Ç=læM7ú>rg¸­^£[ºå»[nÜAvO‡ C±²?ý Á±Àõ¦ó±ÅÌ÷–õ·4X#±¼í¹ºÛ¹—±½-Ù2mdÂÂÇFs(ù°‡‡¤—“,¹òfŽŽÄ£¾×uç~¤X~¤º¸cÕ¾Ÿ?Z¹Såé¶w/gÍïÞ‡äMç›ú­á;ôíÒǦz÷œ£GN.ïí]ò´q[žñNÙ°nçÎú8ìÜÁÕ(KN_xÒ2í{Âò1:Ù43îÁ²ã˜›?òÞýQ5îœ lGæÌÓ³áùwuêdãü¸)üé”!7Žgyr)GîE=m¡¿eúâóãfŠíKîè/œ3óBy°ÆËó)éÜßÁÕG}l¦£ÛºìÞ禋³,X¿{/eÈq~\Änù›ô±©w4rߟž§#ë=ÞÓ¾T§½lߦwO;÷o—%ÇÙ°ª{ÿcúwÆóUåæþŽ^ÜÒ¡y_‹˜½æú[쎞íÞ]Þ;kÞÑÓf¹ êo ³µ±åôîÜÅ–ú[¶¬‹-ÓÈm‘?½lÓÑÍ&;øüŽ®ù°;;%Oúå»ïì®[~Ü.íÞM'ç2ä×÷q_Gvð´÷«yw vîð²Õ)7î€2gê%m\É—Ž»úAS1½Ô³ªï ÉœIn~6Ú¿·[åN¶èMïø[:{Ó;rC§—CÂuÍ‘}»»£Gn~èwîÀsÉ›9Ò»u­j'ÛRŽî}lŠç'Y&,|lÝÓ’>î ÙqΈ{:u«†¿]¤qÙqÌÓ‘õŸºË„5Ž~;ºô·Ï//ÍŸÞ»4¿’½»qtÉxo×[zoi>lêl1\/yØt÷[Èšá[úÓ½ƒ«Ýþ9ú ÓÈ üî]¹ú0ãæéÕ{:eÃFžŽ¬™õ¶ŒR¾»ÞÏïI'‡‘^6ìß™£ë]ýÁòãÆ‚éºoGæ;ôíÔÛBš¸͘y¤Ì™'·sÎçùÉqv—#ÇX^¼Óç©ruÅòÉ}܌ߙjäìžNݪK=ꯚ3óŠÜ™%YrÚ±ªþô7Í‘{3mœõ«¾kw‹åÆ%]œâ¹ó¦Ï/]±œ1rœ÷þIYï_ŸNûn7õOç]Ó{:gÎPvÜϲ{úOÊ|?·~6¾¥ÓÎòÞž¯êÎ}Up|Í¿™Þ}l½£žS†ÜºÞÒ¡‘#oú&ótênÉxú¦Ë£{ºbz•ð™°[–§™3‚åÜåRõ9îe þµÝ²‡mGú[GßA¿êÞŽ`xÙ£¾‹uíp!O¹ã„ã'tOWnŽûIÖ™N™ïܱÊY3ð«ŸÓî=îÚ­­ }œëqñÝéÜÉ–:\’Öݲä€ë¦S®®÷ôžËzï1¶G¾ÎÞô¼‹Mòa)ã]õCŽœêÞ ×û¹þ¾tñ² s\GÎ{|o½æýVô,{æ”´rÐÉœAó¾$ß]néÈ®ãŽÎ;ø„ëç”Ëûvày×4ïçÖ³š²fÐN\¾tÁspvõ²é-ýRül¸«?7Ý{ò¯©_ýúZ¹:ûØàO_Úߢ}«–9Óï3¦h÷N™°øö½N®”õîuqÖ›>Ìôï#º«ÈËF:¹,;ÎïßMçžö£ü8õ³Aû®ûxÎyÏüéäKG~œu§ƒ·ߟ2Ý»`úSŽãOΛþ¤}¢ú8ö©ÃÃö MûÓ'†éÈz×[ºèä^اþbÚ8 0ÜåDZÞýå•òä0oÙ=]8ú»ñuË…µÎô5ó–íÜ“.î=˃['›îÝ“NîƒïèsÞ·—óf û‰Ü¸Oêcû´ºißslO;x½©K~\ÒÙþ]ûU³îÞ¿L7_ wtŒÛÁ³‡Í²äÖÖ™¯›­â¼l¬}÷ÞôMÖ¼“ö˜¾Aéœ÷Ž^6ãçÜ¡N:÷\'§·tÓ»W³;úNèfÛzÛÛ¢‡ó¹ãçú_°|O}mìi«a[:öíº{ßs«ñ–ι3õšðrñ¤sîÌAîK7,¯¦ûÌwÛ¹»œwðsÒÈá¦0]µîœ ÛÌ;\¨—ïê.C®­\Ýrß%WNtïmîN/yÓôžnrÇš3¼éÜdžýû‰äÁr käÌ—.y3Ú¯Z`ø‰eÍœž-ÑÈEŽ~*8î9zÒÄyœzÖΖ«?ºV¾GÛù¥áùeæQw½lž¯÷®rlç^Uó§_-ó°§÷ÄŽ|wÊ’ÓžUìÛóŽUÊës.l3}âêÆÏÛqS·Ûú­åÂÞ©íÖßÒ3/p=ÞÕ#O[†ç#Ê›¹½;çÁšæ=Ó»ã}€.îžrf²ý»ÓÅYìRœîßÉ›®;ø¬»Esäž<Žÿ¥3ÝÍtª^¶õ«Nf†ë¬}N}lÊÓg>gæ5ÇtìÞ³œ÷·—7Ëz‡.Žðýýý6×ݸ¹ô¹l:,ßÈv³N6ÁzÜÏ—ìÞM#'ø¾½EÝlYλèÞã«7tö±í¦Q\ß]ª“Ó;:éÞÁÕ÷r®Î>uÖ»ïSFì>ëâ|oË>ëßëþ®î:ØÔ—~7RÖ»ø×XûνéÈyç={»÷Ì—®XŽõ˜!צ~Õ6íÝ-¶Ý!®Nú8½§“ <ÝåÊ.î¾ô£Ì»–iätŸõ§iλô¶‹]þvª¸.X.˜^ÊŽÞå¼wʆ=Óœ™r~œjÞ3ôq]dÎ$~¾ÌËv¡ýlÀqàüUÙ§žiÞácƒ6nW¿¦\XÆ÷tW¿Ñ¼wícÓŒwïaCÇjên¨ÖýÆíÞ‰ŸCWâèõ¦ßb϶!suåÈ›1<ÏrÞÕ»Æü|Tò¥sŽœïY5L¿GwzÌû‹þ9úcÛ„³?q?›`9vïþ¦þä°ý9Ãs׳*ž¶ç)gÉM}&,iäØ£>“|X¯{ÏòãÀÓÁÍ]&ì«2ä^2í»òsÂôWÙµ¿Š.ŽóÞ‘%Ç>¶tS7Ý»îÝßi÷þáïé–õž¾Õ“NõtOÿÒÞtÇÓ)ö3ö­ZÞ ôq†çàçð³Q:õ·ä½é®kU´q««+v¯Ø}Uøze•tï•ÄÓW+®_µÂïÙm]3ä1ƒÝ;põqÙ}#ß·{lßÔ¶eS¾¥ÇÙÞ¢ ¹mëXåœøÒ5;n›îèÛ„å;”õŽ[úŽfÃîéîÝ2äÀÓw‡mo‰7ÝöïûâS߯‘—M{ÙЗ¾ïôï!wF³gè–Í{½až¶†ÞÏÊú¸¦häÈŸ5î xØÄÇÖjz›ö¥çþtÞ··Êºwö°±æýrä;â_ã®Õ#ÅóCéWÅþ]=êÇ”õ~|D<Ýôqª“ã¼ÉœQí»ô¶$ž~&¼ý,ÞÒ5ï]ü骑ë_L·îô3ÓÄu}ºÝÎ%3.ëXu»÷ Ù½#ïý*½W™—M5r¢ugœv²AûŽN6àøUvKמtÜÔ{rGçúõ¢Ý“çÈõë7äe#¾îrãÏûŠåÀöø o:pœøºêÞ‘9£ÙîÖ™~;¹;÷²×ïîG¤u•p=Œv¦‡;ºêÞÇ–û>ÎðY3cÊœ#Û]ðœôqÖÍæ»ØM§}lÀrò¦?‘FîYöïå;ú$Ó¾OË{wîb ¼}šyצ֭šð|É=}ÆÝétCgMÜ u±·¿Iîûë;yÓ©_•:VßÞ)ö ݪÜã"Zwhä47Ž{Ù>5kf¾¤¿åSº[4Oîë+ëq1_ºv¶|1–ókÞ5Ó½ÛÄì×ïߦÿ¸½ûêJص۬¨>N°|ÕïÜ×ÄîsÞ¡yÏ{[*ÙÎ=õ§ƒ§¯«'Ý4rᦾ¹¹îú[â7zØ +¹°ÕÍÛ½æ=ïeÛ"œêâä»JYïð¦o£“m{ÉÞ=îã͛ô¸ä^6ô¬îÉÞ]¼luº©_7lO÷ôÚ½«Ÿ û÷ÀÑóîÂñƒ¦xÙ s?ŽÞh¸\Ø–xÔ[MÞ·7]6¬éâZÊÕù–ÞZæI¼ýÐïÞ‘;,ï¦w(?.ÞÓ3~~˜ñtÏÏ‘ «{wÚ½ë-ý4qvíO×>¶3ß›^ò°ÙþýôÌ<êØÁŸ)G?ó÷tøÓyßÞ圹¥®«ð²Q¶ûÅ¥Çó+×µ*¹3èn¹BÖ»u¬¢C1ýýéÂÑÕ§®Z¹— {Í7tÚ¿³/=üÜX7›ÞÕÉÇÖgL_ºæÆ †.oÜ\{Vo—h丿E°üüŽ{Ó³®t̓ÝëM=ç뮓ÍåÎ@w/9Ú¹m÷Ž—½é¬ ý-‚ñOº{çÃõÇgèßÍÇÍ{Ê1mœõ²1¶Oiïî=k63wSב½»iÞí–>sùq/zC×>¶ ßÍËöšíÜ_ï¯Éþ -nÎ6øÓ妎½;:Ù|ÏêÜòä$cF÷ði÷þñIÚ÷€ï_óÔŸŽÞtÙ½«þ]ül%œÜÑ¿T÷þ¥7uíT•ì™´[ÿv{÷ßî®n¸¾øxÀô5á諶Ç =þ®˜­¢^6êc£[:pyïØ¿oT6¬³e}Cy:ûÙÖá[#ÿ÷¦+–o¶W7åž¾I8®ùqØ»oûîtíb+çÎìè=š÷¬›m×´î6;Ú¯úW:ïÜÙ“¾‡LØ=½©ïs'[xÅ“ž÷¬ÚÞnêÙî]»Ó‘ǹ3Q#wà{V)gæ@ïè6êOWžn;wíPoYÖ üé®72a;êMO~ˆ¿©þýвfÓ‘ÿZîesxð0ýHïèÖ›~w¬žx]œá¹dž2®[_ºÞÔ¦ûN¶3`¸Ë¦Ÿk†zV»tCç¾Õ âç—´wç 9—9sÅïWš«ÞtdÁ^™æÝöðÞ›®;wæêá›»[8sy37ÈéSß*õ²in\ß{ÙœGlÃrŽ\ܿߪ?Ýá¹èäFC¹ŸSÎŒbz–õ~‡‘þ–{ô·Œ2½;3_ú ùÙldÿöæ0ý=φÍsaÁ×)GŽ÷îsÁu½¥ƒ£»½û‡ÞÕ-ß}®zwpõ/êgc›ïYMÜüóûKoéÏxÿþm\ý›òf€ó¿ÍÏöœºVs~Ž;ú*iã _SkÜ}>¬u±Ñ«–¯Ë°saUûN=«§o±îÝkß·6 Ë]w øyÞÉ–á¹qôªçéºo§¬÷í¯·¹guOüé;%Í»eÂæ·ô,ë=Ï#}ra“—­&š÷št¦ï“oí€|l‹}ò¤kÎ{¼l dÍøÝ»òö&ùÙÐÛÒ0\o –ïèóžÕ8:u±erŽŸ¶ðt»¡#Gî(róå«G’)whþtên9>&lW?:Q_zâèÜárªY理u7­œÜÔ9GN;ÓýÞš÷îYîg“ŽÕî¹ëN?W\w‰7wî—%LçÜ™ ÉŽ»d¿º*ëÞ{¦Wœèã®#¶_ko:øy˜›íÞÅDzg4VñÝ0]÷îàêàèÄÕœ!wðÃç½×m?txןþ·Q<Ï;Ù ËÍÇ6Ê2gFªw7ßÙwȈ3W‡öýÁïÞµ‡MµîÈš§¼Ò»ÛþÝ°ýá)ñsëMTnîurÆÍáIÇ ûw»­ç7ô‰ÝÐ'åŒÇÓ³{:2aáM·¼ÃòºU]Çê‹Ó»¿¾½ÐÎÝ°ü=jß—äÇ}Ü{ØÞ4}þ¾>wÜ9rÊÏÕÇ–u²)ž{žnùq^—2gl÷nÝl„ç?ÆÕýý7ùÓ¹Ë%àùŸÏW–¯­¦C#GÞtÛ½‹/½R‘Wôî’!g½éë‹5‡ã‚ë•u½§o¸N¶âÝL{÷õ’/ÝòãÐߢy3л;zÒ½§>¶ªÎö–õ§o9Ý»éß‘zÓáa³wG:Ó=Oß'}gY†Üžçé9¦×€é|K·®Õ}½§ï+gGÎ{Âò}ëoÑ>¶ÌŸ~PÖÉY‡:óõF–ǽlMõ±yLoX'[“íߵDžòãòþt×ÇæúUeÏ.ݪ¶{§þ–Α;ÐÛz^¶¦`{+ùÔç–óîuïê]£Ûy‹uqËŽgãºV…“w,{†yºæÀ’îÝ2äŽ}æL¦‘³9Ú»»¬wt­zL?9õ˜î{ÓÉ£®z÷3—ç½éç2ÌÓóü8Η±Ì™KÊ‘S}ð7õ+¾§‹ŸMsgH÷®yïÔ±Š 9§yÇ·ùÙzW×Ü™,s†÷í–óŽ{:éä¨7=â¶hæ4s†z\Ø›> ­»÷¯¥½;räìžn]«¾_•ù:îçKîêêQ§;ºjÞǤçJ>¬ëd“¬÷ïþ(8Îþt—!G|nèÜ«ªy3äM¦O¦“wm:¥Œwëq™Å~¶” kþ5ËzGgË‹bùËÂeǽJîLÁÓßÜ-=ÜÑõ¤£›ºîà?Þ²<9Ÿ9ºUѯyú²|Ø=3ŸÓ|Z,}›îýÓñôxOÿ¶¼róR ÝÑ ×¹;ý7õ­<7ôÕ•„é†ãkÅoÙ±¯šF.jÜe_Ñþ–r/[ÂxÂtñ±¥©ø9º£¯s~œË‘ž¾¼ÖÅ™§mY›õ¦ËÐî}{kÛÝÑ¡{¯Ro‹å¼s rär½»ÿ½»c½-Á£¾Ky°Ð¾×ö²—2gâ}O:[(kF8{äêuÒÅís®;2gêþ¦~@¹Ü“Nþ5Ÿ Û”LØ¿ìÝ‘óÞ4œæÆ-ñ§s‡‹fØޑœÍœéx[ûvt°éM½CxÎ}éY/ÛáoúQ†åšëN;wÖÆ!W†ýéª÷>¶3õ¨ŸéD,?5-œòô¬“ÍîèÝlçÞ]øÜ™<ï˜n{wðrÖºs'Ûéälß^Îz¿Òì¸+Â𫬻Ųä€åÜß?[¹ïýʇÍòf)#Výèо“Fny;eÂ8ï]î鮧[ú¨ø-õ¦ÃŸžîç·š kܸŽ;úÈüéȇL×=|ÜÅ£ß ¾?W×>6ÝÁ§{ºæÆå]«GÒœ÷tC»÷gßÃö¤8n¿'„é^÷.Zw|ÇOŸcçÎ؃?}&Ü|Fù°ŠëÈ3ý;öî– ûªº¸ˆëàéܯªmu¬j‡KêNÇ]]sß??Ëç™M±=ËѬwö¨ñMºØ¾¾3?ò㌫«/ý颉‹ûv`zÄõìeoºÜ×+äM¯8žN:9Í‹£|XÎuZwñ§oTÔÏž¾î0}Ó÷·<ßÚð™3œ·ÌÓ†ît×ݲ•ñsÎ{¯.þÚÙBݪëeÓ®Õ|ÿ¾·'ßì_ã.¶šå½ïq¾;åÂÖ¨»…vï§uæèû”GÝ-Ñ“ž÷§çxî¦éüéñ¾Þj.\Ö{s‰­)7uêN~6åëÐËYoKÂò¶ó°ÁŸÞQïÚ²¼ÖÇ-ïU=b<ûöœ£/ÑÇ!wýkô}^~ÂÝé§^÷Nž6Ë’;#lÇÞ]:Ó5=ü¾0?tï‚é礻¤ýû…ìß#G—|wël!Ýû¥qóË«^i¥þthÞ¯©c•tq××%\¿ÖûùuÌãüuŸtïÈzž>À-½Ô™>p·tËšIûuˆ½½;|lÖÉ6b[©cÕ2aKú8ÜÓG~ç~Ox¾Œ§c÷žð›^í[}0ž®ÚwÊ‘{4®,GÆ rÞÓ¾}lš«/z\ {—1žîùú³ãèÆÙŸ©cu’ùÓý=]8:öïzW§ ¹ç¼ã~þâòÞ“räÞL#—püÕéÞ_ß­¿óÆÙ°ï|WÿÈvíÖß·ôÒ¼«m®y3ÈœIß_šû|×ýû§Ëœ±¼wÂtdÃþ,çê¿9VxúJÛìÝ=O‡æ}M_xÙV5vMoéÞÇ&\Ýiãx잾̙uÊxW½;zØ6]Ö;öðÜÆþôê&gÃrÖ g¦o»A7ÛŽÓ¼WE—vðÔß‚Û:ÝÒáKߎïØ=3a½§­&<½ævï{¤ÓŒ÷šøØjÈw¯iw‹f½óî}¿®>¶ÑÉ¥ýûfÎÇÄÕÀÕ›tG‡>N}l– ›4rкƒ“/ïNo¹LXÓÈi~kßÙ›®~¶ŽÝѱgoú^Ù»£Ÿ-ïX-ißÉ›®9±y¿*gÀrv\ñ·³ò°:,‡¾K7uhÞ]æ̹yØ8ç½»”ŸŸk§jÚ½_RÎŒðsÕÆ]êmÝz\ÐÍve}lWìMïÙMûw`:å¼C÷~-~6½§kwúµu§ßðM½ï°\óÞÃ~pãuΓ.6`<8úhÝéžžg½ç¹°¦uçnUó³éþýIîêA÷ðTö¥?.Ãsó¤G,Â˽é‚çÊÑS·ê³îÝ'Ê×±w_ª“szwΛa/›yÓ_2\GŽ\Ôº¿½h'ÛkÆÍßÞ˜³¿K,z\Êõ7º©“—Ípý]5róÜÒ?œ‡ ¼óZ¹)ví¡¿…ûÒ_(w†ñüÕeÃÆߦ¿¼½úŒ™wÅuëoÑ^¶gméß-ëýÃeÈiÿÚœºØŠ¿}GÏûØ47î˼èð¥‡Ø§{ÿ±^6áéœ_ù%¯rõ-³’i⤃m•°|Õã9gÇ­iÎû:íÜE'˜ù9ôq¤ußXϱœúØ2oúgÃnIwú–ÜÒ7—häT÷ŽnÕäOßÖ\XëP7ßšìß«;Ο¾#\½ŒãäO<=ÞÎw¢— ùq»Î»¶»¨í¦.6Û½“'Ýiãö_÷«uâé–÷®ºwêLWL?¨/ÅòÊ„eºïdËúØâwK1Ýn鲇öÝå»·eïNõ€Û­Žu±µ}7›õª²‡íкU½ÞýÈxºyÔó¬Îœ9¡[ú‘êܵ;=󧧜ó±™î]þ}°]ôq±‹Íu­vÕ¿víg’1s~Þuú¸äK'ÜÅy9;.þ¾¤îôË,çùú’^6øÔs,gçÆqoz–#×ËrÞoz”õN-ÉËÖ_pÇjÌœ oõFºØúåœw×›n·uÓÈ "Ž#ïÝ|éy.¬ìàG”%7"<§¬ìÝqSçœ÷û‘÷£‡¿E÷>Žß¸¡“.î~¼Ü“>Îôq’#guË‘³¾–»¡ƒ¯‹>ٰлgÞôàe{š {&á7|mSíh7ŸØ-YïÐÊÍlï>CŸË,ˈ}!ž~>{µÜ÷Wptʃ•Ý»fÎdwt׳úž0Þv§,9ÃqÍ­ÜœwðäeãLØ’îÝá¹eËØ==÷±Qgºö¬zœãèêM÷½ldž¯'O¿å†¾"y3ÄÏ ÓÁÕ}‡z¥²¦:¹°‡_wZ9pó¬cÕÝÖ×ÍŸÎy°4›äS÷zwøÖl÷ηôªâzua½lAGýlժˎ«nS>¬ÞÔwœ?=æªFN°|{×óô,ofÏu¨ï9Žy»psó°%l·ý{êcãŽsa{¤wï]]eþ5põäKçÛºòóáyOr㨻åz O=m¢‰Ó¼™éÝo yg~ÎNy°øf}œeÊù—!îèCŸ!‡ì½£~~G¸uq¢•£”¯»›:¸ºfÎÜS}?d·tzqO¾ô¨ƒ6˜oêOeð<èÞ£?yºíÜŸ±s§[úßuïàè“Lûνéõ­©M:V_¦>V³Þg†å–õ.9íN·¬wÅrÉyͼk!{æýÍëÝùŽþ¡ž¶·ÌËæïéŠã^ën7ô¹æÇ}Îi¸3=÷¦Ó=ýÛiäl÷nüÜrä,k&øÑÓ»²òkñ š¸•„åºo—ï”G<~6øز¬÷ -òÞ—æ¼WwÙ°„çëënïžøú¦bú¦jäÌÓœu±m¹N6ÍÛd®^5Ý{i÷¾e{÷jÕ罇¶ªáºaº pœ9ºzÓwÔξt½©ïÖ\ÖLøí:Øöh×^ó·tîX­×ì†ý»ö± _·{zÝeÄ‚«×);îÀyÒ­»¥Ñ¶—ÄÓåžžrÞßôEw çÎèÞ]üko ß?È—ÎlÚ£žtï¶sŸÿ£K/Û'éä>?y8k&ÜÓ-kFGòãÐáÂü{v—+üüWÀôÕ_ÛWÙ-Øž³aW½î} ;ø¨‰Ëxº»§¦ëM]÷暑-éÝ+ŠçëzGç¼÷u¿YïÒ¾¹ä–n¾©=«Õͪz׶r½ûgÂ"#–xy^µ,9áåæM—þ–ÝС¾«9ï»âOß‘~ÕàeÛ•ýûòì8xÕiÿ¾‡½»ÝÓ]v0½f7ô:õ¸˜7µï)'¶^Wí{Ê{odž¶†á»Ó¾û[zCoè õ±%Ÿ:zÙH×nz\ÞÅ&Z÷RozÄ÷CéŠåægc['Û½ÂÇF:9Û»)®ó]]³fÈ×{[Žµ—ÍzVÑßr¶8Qû× Ïí]¹¥Ÿ"CŽ»ØÎLû\Þ±êòfô–~áóf(ï]5qWœËû÷«¥½-ÚÝÂú8á쮋 ùî=º£;\/ûÒÑÅ–z\ú¤wÏsfò.6âé´s×,¹RÇjÞßâûU‘1sË]é·¤CÎ 4qš9ví÷Ñ—ž2Þs®ÎïY‡:pÝeÇQö 4r” ;vl©‡í<éΛŽÝû“`û3<êâO¶7}O>öY2gÄ«.÷tîf›æ÷îÓÅ9/[î_ó˜îúÒ—ö«f=.¸§Ïã¯ï>gFîêàê!ç=rtº¡¿CÇÚwäÂÎ)KîcNØn¼Yïš›ïßé›3g8kæ[9ú—îÞ¿Hïþ-ú÷‡çiV~Gg~í»e–=lNWYË4ïò·õ5çS__[7Lw=éÌÕ7 ß‘=ãpݲa¦oE½;:\<®»;÷·WWÝûöïÜÇ–çÍlSß*¼l>sf³½«>uÞ¿ÿÍÏfûvâéÐÉ-¹©Cónýª5åéµÓë^óÎ]lûÈ“Û:iäê”!—²`­kµyÐPŽŽÝ»NÜ»ûŽUä»sKäçÍ6quãé­ŽïOWL'ÜaÛòã‘õî²g½ö9ÂòÈÕ¹¿…sfÂ=]øyŽëážžzV±oç½;e¼³-æÈylO{ø®òsÍ…ežî2g8öœ´ï Ÿ ë½é.óݪW†íWAG™ï>?Î2gò|wìÚó{®w¿–|ØÂ÷äÎPǪv¦SÎ;çÈÝäï‚åœ!×G,f8Ô|X¯“£›:u¨ß¦;:eÂŽ8^¶{ÖÈy,g?ºó³ï—ìßqK·—‡|"¾S†gÊÀ}=Ó½Ë <ù°A÷HlÏäMO{÷'ˇŽë~Z|gÞ5hÞ¡“›x~>%Ëšaܦf½sg îé~ÿî¼é¸¥sºdÍàž®>õmx×,–sgâÐî]ûÓ)oÆzÒå%Lßþ}³a÷×kŠç5§•ƒNš÷|ïî8ú_urÂÕ›”õí{“ç÷tËCg:ßÒ»é›8ú%iß/K\ùùEÉ—^êcãü8z¡{yï=— ëyzï:ËŽs¸Þ7ž.šw΂ôo”¯Gý;rÞ³ÎíUEw |éCŸóν-yÖ»ñtÓÇ9LÏ;VG”ñÎþôûyÒéžN˜n¹°å®tíUu~6ðsÃthÞ•£?=,åéÈ|‡æýQrä´‡íÉîèâa{vû÷L÷þ.ùÙÀxÂqíWe½ûåÌØÞ½¡<=¾-º©+Ž'ÿZS{UóîtÊy§WóaEïÞÙîœ÷®l‡ÄÙTÿí{®‹Cwú!åÈaßÎuøÒËÞôŸ [ÒÅÙ-ýŒ´îgš—rfÜÎÝlÄÏϺt;GÏj×ïÞcç*nç” «9rŠë—Šçª{Ï´îªy\y3—tGï9|®ŽÎÒ»—|lª}¿oºqôë¾u³Ý0/'ý;ú[ —`Ï™3±;}H-Ã¥=«¾»EüéÐÇ‘‡Í:ÓoSÏêÝÈkßU½e¼«æÝvïêOÇ ý>aúý˜ôï”#7Vl7ý;üéãÍŽóêª{ÒÞó¨?¹}û£b;÷¬²m¢ø^Α3´ï–33A.,gÇM©kõØžïÜgñŽþòêñ\ïé/–;/[¼­¿ÙÞý´rÉ×–õ±A'÷öQö³ ¶Ïã;7½;ïÛ?üÎoê|GÿŠ¶Lë¯ú·yؾ>-?Îøù—xÚr}œáùʯ_¶w_ùe=àø/ðtâç´{w9rÚŽ—ófLÇ]«š5£=«Ø¿Wœ‡mx9òãÖ…££ÇeÃqô­¸{û÷-Æõ-[߬š— ·ô­-çQ·<Ø,v›uq¶wOÝ-Ö—¾£¹q;ÄÑU+·g}-¶{ߥ½;p|ÏúÓ÷}Ö»fÇi‡ú>íáË=«ûÈ„u>6ëXE'öízÃkä(s&á{S¹9¸zCtqŸ›?}l´‡ÏúØšÐÇQ6¬íÜ­›M;Wµ‹­œ!בÞtëm1žn™3äa£N6øÙ —;lçÝûÉñ±êßãþ½äg³î–ÈÏOÎÜ=ýLóÞÏ(;î4aø©ÝΕ£Ÿg;xΙéÒîý"ó¦g¸®Z¸óË%ýÒßÒ¯,wÆgÃöH÷~UÚ»[g:öï×v[ϲf\vî}º«£Ã7ô›¾ÏšÁž]´îÃþpÁ93è_Ë;V]ÞŒæÂ&Üp´¬ŸÍ²fn×GŒë>CîœýžzVI'WæécÍ…g.שše¼s~܃Ëv0/ð<ÃwëVåŒßµªØ^Ú»O3í;å½O­ŸÍåÍÌxøžþBl”9ÿå½ÏßòÜt²½Â›NxþŠLXÖ»ç¶w½£«‡-üžÓÎ]¹ºe–ðœtïìQÿR]œ¿£æ™°Ÿ‚çœKº÷/êV »öÃÎ]ð÷t·w‡ŸÍùÚ2\×^Õ\p|Õ:\4ÛÝ&yÔ‘+ùî•„åò°ñ®}}cÃùÙ¼Î]xúFÂtxÕUïNXî2a7Ë>6dÈmS6løÓ«¼{‡W|é™ö¸®;x—%—²`÷vv‰›û,¹ÚîžËƒ-eÎhÏê¾u²e8^GçÝ»â:çÎ,éY OrêMçî–fC³Þ±ooÑ=½)ý- êkñ}«ÖÞÌq<äÇQºó°µ ÏW/8yìo¡œ÷Ž`»u­-ép ·tô¸PÖ{ÖÛ¢x~|b¸.·ôcô¸œ¢ÍßÖÓMÝ0]ûØÛ)?î4󯯟ûÍ =l¤¿Àß.l÷^ÒÈÑß•›sËÅ¥u²é=·ôžãèÊÓ{^‡[ºeÃöRÏêµu·Ø×û–#×'ý;íÛÍÃ6(õ±á†îýèï[ú¹uú¸!u§S–ºØ¸Ã…±ÜåÁŽÔžp\rhÇïîü~ \·\Ø{íbC¾û8u¨»žÕqÂòñ£»¡?dÚ8ÃxÊyÏôïø¶LØŒ§<2^®»÷gÕ»C?£Ýût¢y3ÖÇöb«ÌÕ©k5÷±El§¬™|÷®·tÂõwîL]– û–åšFÙ°ï„çóëIÿÐœÒÆ…ûùüÓpy°Ktqeú·ÞÔ]o‹~ÿD\Èž‰8þë—ÞÑ­×®›‡Mû[ˆ¯ÇÞéXÍñÜ{Ó­‡ ßaÖã?×<ØJ® xò°mÐ]0}}Óø:öîÚ›¾þô,s†»Ó ÜÞ]\ÂvÆuÊ™Áþ}é’#·S¥½ûvÂðÈÓ·Ó¹-ó±e]«{èeÛ%~NÝ-{¤‹ ·ôýð7ÉyßW­\ÎÏ‘»ï²fJuÜÒ³ 9íaóºwðt—'Ót˜žüéMÕÈÙ¾ o:ºZD÷Þ†ö=Ãxö¤ÃÇvHl¸¡w:ÞÞ¡ºõ¶:?vïèLw}é'¶{?Ñ—ì–.~6ÕÇIî ôﬗC¬ö¶ä]«äMwzwÍ ¡>¶®×É]Ðhwz¶w¿7¿à;á;°\÷ð¤{Ïø:rÞ±þµžÏz·žÕÄÕ­g93×™?½ŸºV¯­“ }l}ýhlŸ°¼Ïúwâêåþ–[¯£{ºrôÑrÞ9Ö&åÁÞ*Gç~Uëc)†ß‘'}Lú¸ñ½íß]î̃éݵc•øú˜¸ºv¹?=ÜԟЛî4ïnÿnüÜôqàéçK‡î}*«“ì–>]XºyÓgÌѵ‹mêóa_ w·|÷ò-´q®7ý%Óǽf7õW½©#ö]°ü-σ…'ükÌÑ—{Ó?L'7]œzÚ #úç'iä>¿ÄËƽ-” ›iä~ýú7âù¿Œç¸¡—né«> Vp]3gÖpG_3?îéÓ½—<êdÎøžÕ -ßÐ+^ÿ¾O›t¦+O=ꛚ÷î|lÂ×}6ì–úØ–åÂ*žo¡_uKñ|Ûáû6ißwÊ.‚åÛ†swºiÞwœÖ}0ݲfзÊwtèåø–žeÊÁ›|§ü8Îœ±½û¾dÂZ›ëcË»[¸_š÷Rw gÎ$\GÏ*:[š-ò¨/Ù»kÞ;ã9eƵÛÖÅÖÆ=]4rmÍž¡îtáëG:ÐÆg§6ìÛô–îû[ÐÛoê”%Çý-èVÕ ¹Ló®¸.ãñ¼ë¼é]ù[Âõsáë–«šwÒÆqwºõ¦§·”+üüâ⪴wGþŒëXÍwðª}¿²üWêXÕ®UxÔW¿1¿:öï×7åLXãèÄÓoŒ§$oFõïaïÞ— ¹¡õ± tçžquéM×{ºðsÞ½Û“f®Ü¯j¯íßïU'Ǽü^1ýn|·Ó—ç½gY3ÊÕ9?îò㈯?=Ò=Ýòã8wÆzÙ(CŽº[RöÌDwïÊÏÉË]œÝÑ'^ÿ>“<¹ÌÃfÝ-å 9Ö¼G®>óZw×­x¹æÈÁ—ž´ðð¥¿B'ÇCû÷·âêšû.½ªï¦Ï1œÖeÎ8ý»Ïz?¿¸tûvÎ{Ï3ä®J7uãé½Kìß{Êϯœæ½—a:në7¢}'O[Þ±zÝOú8¹¡[Î{Õ¹+_¨6Nùyç}hà‡äOg\ç›z¼¡­“ g;gÈÙMxþí4︣Ž{äç+ÿÒÞ=åË(– GïªiäV¨·Ù°š7³F>õ5ó§‡9õ¤¯Ut*¢}~t§{'}œpuÅv͘1ozIóN¾t×ɶIlÀuâå›ÕMË›Q]ÜVæcÛ6­Ü6ißÉ˶½³íuï” víÛèc#Í»rtÁsÜÑww›»©žk†œëcÛó½ª5ò¨#s¦Fùquó±!–=êšW¯{ŽN9õ¤4â›t煉K}é ѺsϪïXm·Zª}7Ý»íÜ[mÞ¹#×Ønú¸6õ¶pv\xÝé.C.¼Ç¥®UíLWí»yÓOŽ˳,¹“×ߢ{÷7sgòÌ™3Ê™>Þe?ßÐÏí®.}«æc»°[ú…`<îét;¿@6,c9õ°…Ζ Îw'O[ÏùÔsOåÄ^_•îéàçË5r†é–!wíüéàë.oæƲfÔ›Nº÷áÀ2a']{V)oæ–néªu'[ÄpÆwæê·ŠëÁ—n»÷{?ÙÞÝ´ïcÑÆy®Î½é^ó>ö˜žstìßÕ›þ$üÞtîbKØñº8Íc:2ä¦È#Œ¡=üëòî–·<–îëoÈ žtdθžUÒÊ!çÝu¸¤Ý{ìK×>¶wÉœ1¾ž´ïŸ„ësÂt|¥®Uº£§^6º©ó=ý-_†ï¿þ-°üßÀ͆ÿ«ûö€í¯ÿ­û/èâÈÆ̙ˆçk~ÿ~ÃË–pÝßÒ+«Íwg~¾žõ­&<_÷].’ç4ïËÑŶá²fô–Ξtô¥óï,;®*ý-Ë{Ù°{7Ž®yï4Nó¾³Lg{÷¨‡?çîÉ‘«ÁÆ{zÖß²çöí{„é¶Ç=½=k™?]û[ôý{<é Ík(®‹.Žò`ó.6Î’3~νé^óÎ=«A÷m\GûÓ;ÚÝÒα3mò¦SÞŒeÂf«²s×lXçSLg›NÚµÇ̸cö±êþûÓSÏ*²e€ëY[ÐƆü¸®fÉå¸n¹qäQïzŽÞ8Ž›zYw®-vSwwtº§Û]=Ï‘ëyÛ•éâ|ÖŒ|gþô›ëì~žëÞþ½ïöﱿE9z_öï—!×w~6ÃôA®sWœåÂæþtÍšGw¹;êP¿#<·ÌÕÊAïq}LxNýécêLw|raç®3Ý2gòý»ö§sÖ öïOÏÚ³ª˜Ž¶ùÒí¦nYr·ƒL+§ÙqCï_»§úwí\sK·tÊ#žžóó±àºiå|Û˜tï©ÇE²ÝÇÀtÓÅg·¼ìàý]òfПîòÞ…£g-š;±½;G¿úÔz[&Œåšù^æë†åŒé/âi{ñ~6‡é– ëp·óÜÐÃŽsîŒú×Ø×nþæºV?ô¶îµq6yÞû§Ïz'úü ¾6ÏÍ?3~ÎÙqaÀÏÏe÷ø:kß‘ó¾JØ0}…né+š!·æ2fÖòü8xÓÉǦ™3ÿãžî´ïQëny°¦ƒßÐ,¹ C_ú:{Ú–e½oz.ìàg“™ën™ê¾Ý¼éÀôÏOEÖ üèIï7¸ù+iÞß=W×Ì™÷,sæC5rÚåò‘iß Ï“æ=íÝ??ˆŸ –¡ÃEçkÁùq‘¯;]gÍ|%ÿÜ6Ÿ9­»æÍ0gw}«™?½Þ0Í;z[‹¿õ¬64;Ž³fx×n½éí&íßÛ”§÷õ¶NÂtÓº'®Îݪܯ*|ýÈ<ê®k•2ÞØ«qþXoêGÀ÷“Ì—®«Ç†Ýò[ºáxúuqš9sFúwÒÆv³,XdÉ-ñ³'ž¾L#§Ú8Æwò¥_²F.ïLO¼=v­’‡­Ç9ò§sÞû5ûÔ¯Y'gwô›kïaCϪ»¥»¼èãn|‡ iÝ™?Ýõ¶Äìwô¨—½é‰£ßš'}Èüœ5rÂÓVîŽül>k†ûUqK¿¿ÏºÙ´?}lºwhÝï ÇïácOÇÞ=îÞÇ´{Ô;úƒÓÆùœÕ¼‹— Ü\ý‰úUõ¥\ØÉ3ëÞI+'\¼|2eo:ûÖ€í/âI÷<ý…;VF.éÞ5GŽû[^2ÿšv·¦¿SÆ»¾”«9ï™— ú¸wß³ïèŸsíf+w²} -gÿò™ïêc“ü·t³Å^¶oíX ˜°üŸÀÏ#OÿW÷ïð°©Þß‚å13N»Óåoècã¬ò¥§|XhãÖ<¶¯¦Ü™ -ïà×ìž®Ùqn×^)õ·ll &iÞƒFX¾¾‰¾U»£o,áèÚǶ‰]û¦ó§o¹;:îìÛ Ï·,oÆ÷¥ó}[4q܈~Õm—óžülÐÆí,ØËf½l¤Û­-Ù¹ïyŽŽŽUñ¥×©g5fÂ’G]oéqï¾ïõq”9£Ý{£¹::[šËwïØ·ç~6ݹ“æûwÊ‘ÓžUõ§—»Óó¼ó¥ËËÝ-Á—~D˜ÞÉtr‡a¿N|ýøPïéŠçàê'ÂÑO쮞óôcíJ—É»[pK?;#Ý»ŸSçeó|½ËY3ÀsêVEÖûeÏ\\P?Ûe9ãýB°=¼WÈš1_:xz;V{—ŽŸ«öýÚû×z’Ër½l÷Îr×Ù-½¯ï»UÐÆõ¡sïSw‹ïaHÖ»ñô Ó5cæ/¹q„é·£e.YÞŒ`ú¸~OÚwÙ»[úá¹»¡#s†zÙäŽîîéYŽÜãƒÏ{7]œïb3ú#íÞ-g8î}lìQ§\Xîcƒ/]ûØh玜÷©íÛ¹¿ÅiÞg™æ]¸:p<éÝ­“ííÕ2ßß^Þlïþf:9Íž¡A7›eÈ}x?Û0ݸºjÝ‘9C·u§ƒ§-`ûÝÕ5k._ÔÉæ=lŠãÿŠoM¾Ó¬èÎ=áú¿‚ë¢u‡Þ½x}:ùÒ)wõ5͆Í0ûU¥»Åe½¯›î½‚¬w¾£oø®U͆͵rœ%·a=lÑǽlð°ÁŸN]lš3“éÞ·Lï®]lÚã²²ã -¬®îØ7ð]=lÛ^‡lØø½·³„£ Î#CN³Þkš;SÚ»“Ÿ{Ù"®gyïuíoA×j~Cç.¶zÉ“~@;wæçÍÌÏflÜŸžÞÔœûÝö¸Þ¶ý»Û¹g»÷ÈÓÛÄ×µ¿¥­y3eO[‡2gŽ,'V1œ4ràèÙý„tr'''ÄÓIó.{w½¡Ÿ˜&Ž0þ .gK°½ë{Óí·ô§Ÿå«Þ—~Ñ%ŽÎYr—ØÁ_ê8­öíW–5³¤cµG÷tö´üv;x½¥_«‡­wãóÞ¡“žë}ÝÝЯ÷¤{®ž²a­?}:iä,–ºÙn%ë=ËŽKl„í#Æ÷‘çêÔá‚Ýû=w·€«»Œ÷å™3%/Û=²ä̓Θ>=Žéã°w`,—ŒXÎ’Ó[úã“îÞm×nÞôIìeCßêÄp}2ÑWù:ò`§ìc›j6lœ ûÑ“N.÷´Ag~¶YÚ·»žÕW—3ó¢ßo¤y·Ý»e½¿¹¼Î…Õ}»jå>²{ÒÇE¾>7\×};stíLg?íÛ±wz÷„ëçã®ý_ÓÄ9l×1m²Þ®ÿòÚ÷r~œu±™'Ý{Ù46ìØWE÷ŽŒ÷õJêb[¯˜'}Yw áù†ëXÝŒßÑÏFš8ãêv?WÛ–e×Î|½J·uçeÛòwõjõótö±•4rÜËfÝé¾gU¼lµ¬»eYÞŒòô}ÂtË™±©k&¬âynê®—ð¼^Ïòã -ŽxºzÚ®7½YzMç½ê-Åò&ëÝsÝ{›rgÜÞ½•îç-éO–·ånN»wô²!–3Þ96ìÚÕÇÆrÇ:ŒéGÇyÆ;4ïÇ™ÍòÞOO?s¶D#çñ¼Ëwuö¦—vîл/ɘqÙ3š#g~¶óˆínç~ît¯{çþ–Ëžìá{Œë–#×ÓlØ<÷½çüèèd ^uË»¡ü¸¤ëžG¿ÉnêÅv§‘¤¬Û¿s¿*÷­JÞÌ€²f¸Çå–oéØ¿ôŽnZwÙ½g·t»§ß«îÝn鬻£|÷{º£?DÎŽ\X§{4_ºå¼?ºoÍ‚•=ûÃu­>²7ýÙzÔu2ž>™ÈÞ;ÓeOÚ8Íš™?ŸÐ } -õ±)®s/›jßóü+å½Ë%ofI†\îOWo:{Ô³Þ–÷%6Æqd½SúáºfÎо1]¹úquÊ{ÿ÷Ÿ ÓU‡;ºÝÔÿ…‡ÍyÔW¼æ}•÷ïœïžëÝWM·fš¹UÒÆAï®Üœ5rkë’7#ïùÒÙ›^}\–õŽœ™ Í„¥9Ê™A†ÜfÕótÓ¹/ÑÇåY3äO¯æ]l’3ãuïÛzGWÍ»rôäicLßSÍ\Ò¿×–øÔ5;N2a•»ï“7räêœ +·ôý€Ýû¦Û\ݼê ×ÒßRœ÷©7Ô×Ö´,9ÜÒ³LXÛ½73LO÷ô&úÒµ“}lÒ­Ú²Ý{»c¹°m¾¥;Í;îêG.{æ0Þ×tï~´D+çúؘ«dwtïK÷ôãSè⎕§G_ú’þtÖ½??],Í…W?§LØ.åÂ:ŽÎrÂ×áaÓ;°œòäÓ•Ÿsßê¥Ïw¿ÝûÕ2}\ž%w­þôݹC÷Þ¾~C\½/·s¹¡Óï˜wã½lêIï'?zìLÚ8ɒ㬙òM´qÃÛ%>6áäÒŸž~wë3ä4{y3÷†ëwÄÕË™3ÖÕ¢<½éÈšÑo»¥#ö»xøÚáeãÌö§SÖû#8ùcò³Qßê$Ó¿?G·ÎΘ.YrÎÃÆž¶R~Ü å¼¿Ðî]öï¯ÄÕ_펮÷tÍ„}S›u§SîÌë»áù’þ–ñ±)O×áëÀôw»¡|ú[zÄóÉz›á¹ïoQ,§<Ø„ãÿ,~ ®ÿ®‹.î_áê+âQ×ìÒ¼¯h‡ºõµà;ïm‰Ø½êk>V9zÒÀ¯VlÿîûUíYg:gÍ?}ÃiÞí–µïªwß\¢yß²¼îbÓÌÆuÛ·3¦WÅ¿¦·ôÒMº8ó²á®Î>6ô¯)W»õ…ó¦“ 9ršñ®˜Î»÷½’F®Fwôk䨃m?ÏœO? Wsäê´s—Qí»põxWo:í;zVÁÑ“æ]°]4îœ «z÷÷¥L÷=«.wFîꇂëÈ™a\×Þt‡éä]s¸nzwÅõÀ×6îÄ8::ÙpC‡‡í4çé’í±]rf¨¿Ewïg9Wïfy°v‡»b:ûÑ»Ç/\×*eºÖ¼_zëåHﮫмSÇjÄrdê?ýªÔ˦y°YæLy3¢uï_ß8OzÂt :V‹›Ð­:kÝûÃÒ¾³g”›ø–.¸í;0}˜á9òe4ö.v²Ý2/Ý“—-ýsg·ôrozÆÏs­»ptÃpäÄÒ ûVãmýIµréf |ÖÝ"½ªÏùîÝrßµ Ú÷gÖÈåÙ°|O—™¾+oŸùþôYÂðgÂRÞŒêä$ã=òô·ò¨g·uÒÇi/u·˜Öº¸7™Û»/ó§³ÞºV?‘9ó)øî´îÜ—Žû'ùÒ¿ÿXþòó”«ÿú—<éÿþ¯Ý{žõþË4ïq»xÙÖ¨_ÕyØ×Wý-½âsa‘ëñœ|lΛÎú8G_»wó´YÏêéãœF}餑ó˜^µ¼8ñ¤WÉŸ¾yÓwJÞôtGß%ž®.;¦s7nν«Œç5ó³ žïïí“Fºwù®{½»ÝÔ÷‡µqлC§Ù°Aç<êÈšñoó ۻ×¾$?“zV9ÖcºåȵDG¶6ßÓ3íû!trG¶‡§œ™¤s÷·tä¼Â.ù°'¥›ú u³O?–K6ì‰îÛ£Ÿ0GÏ´ïÎËÖ%MiàW?w½-Ú¡.¸Î9rš7ƒ®Uñ±¯k›bø…æÂ^ÆÜwÊuç|÷€Ù—=ÅsëM¿JùqצcºÏ„;u³<™°ëZí³ÞßÔ]תà¹íÞ§§uѺË.y°–73T½û-iãF·#õµá–~—gΠwï×)ë}\êa+ç½?°Oº[Æð¥ëŒ DZwÇMýI¹zº¥?‘&š9xÚÌ¿öô”éÞ'àë„Ýy>ìÔð\9ºzÚf¥~Uãè/²{Ïòa±ƒ-{ÓýMýE±=õ§{}œêäÞßJù°ªlÿP:{ײ<جÇåcÍòãD7LŸ3?®s,0ý3aù?ÿÆ÷Ÿ_žÿ"L†‹>Îa»v«rÞ{ÀñÄ×Y¾Î:9ãçéø^‘,¹ -w²A+Çþµut·po:p}C¼éÔ³šõ­ºü8Ù¹sÖLêLßœe½sתe½û.¶­jÙ˦Yïœ9³SÕ;zèfÛ—m×rÞóQžîvíÔá"¿½î½&¸^sž¶rǪíÞ½­F]lØ»ã®îñœïèÉ—nr¦“Lž®3 ÊŽ£nUdÏ4šæiƒÍîéMÂóзÊ9ïtG­{Ú·“þ8®ž6ßÛ¢8Þaž~¨Y3!öXôîy‡ öî×OžŸX›ÓÉ-¹¥#çÝåÍÈ ]tré[²g8;Žú[ì–ÞuY3Ú—ŽÞåúyi÷žòf.4V;Ùòîô°‡¿²™'3äô÷éÞï²®U¾©kgË=º\Ê™3÷ÒÇæºØî§3­œv¬êþ2äÌÓfº8Ò½ã–ïêÒÙòľ5ÜÔ‘ ›ôqÌÕUó>% ¼v¦O¯“VNù¹|O§/ŠãÓl÷Gw¡“Ãýe©.N;V_)÷ù¯”ûŽ|ØwÃudÌX›ùÒ}w‹ðôe=.™?ýÓ|m1sF3äæÊÏ#'ÿÇø¹quæéœgzwhã¬-ëKG¿ê -å®°F.à´íäµC½’8{Ì„u=êõ±Ù=]¸:ñqîoÙÐýûºt¦›/¼¶Ø³jzwîmqýéóOõ¦“Vî+fÃÚ-ýŸþ7ÿ‡°\~³æ]fåw²ùYqY3†ï«êe+ûØž¯>nU°½¢™°ÊÓ9ÁôuÅôuéoÿZŸ:vïzK«ëêC×Ù$Í–ŽeÈŽî²a«–õÎÚwëdÛ&Þný-Û²sç¶mÕ¾o/,Þtïec<ß¡ú®ö¬Z~ÜíÝ¡yßÛ^{[D#'SÇî½nxn¹°W?È°]ð¼A>uícÃ@+Ç]«È„%}œrõ–½¿›mË—É4r­v¶{‡ö³`;,ïîêN÷N¹#Ú½B+wè¼éiLš÷£ÄÓ‘%Gšwîa3l?uÝ-Nï~&>uÖÉ9_ú©íÞ³N6×·Ê«Ý Ãwìáõ–N½éäc;w-Û£¶ý"ïM—Œ™ÏÕÇ–îê×ÐÈ]ºèá«þ5Ÿ5s-xnºwOï»>6ëOÐ=}€®Õ¨sÏýè}Í…Õ¼v¥[Îû-a»aùPuﺇGïéw#çe¼Ýiw:¼l%Žðð|,»wëpÉîè’ û(˜¾¬_x^ڻǎÕ'ʶ›FîùÑzÓ'Oægó}l¹6Î:Ù&ÓgéÚ±J9ï´;÷©íÛ§3êdË4r†ãÀðçOÓN6É„ýîÞl«±$HÚ}ÿ—)F„˜ˆILYýyØnææ±wöÜ]}þ‹X[dÕ½-w7û _ͯéW{ÙÈ›1.¬t±Å>¶Ø›NŸœ°`ÁvïÙôù[fô¿í~nz>Ÿöîy÷^ýÛ‚ÝÕƒ¶ùô*öPøã-¿¦6ßÁ˼¾“yï;œÕë·tϨwC×jšÙwõ¶Þž÷Ÿ—²k’IÏ,Ø.l·uÏ¥§™}«½ì{ßÃŒ¾ïŒ÷È…E/›ïß¡í®ëÒµ*LX˱ -kæð È±‘%‡¹<{äå¦î]lÞãrl>÷#¹£kží˜}l¢ç!~t·ô=qÂ…Mþwá¼CÏCwú°–K'ïýܳéÌ¥k×ê…ÜÕyG?}l|ȯÑûî~9îÜ ï;9regzèd“»zm³lÉ''\ØkÕsÎê7¡—MÙ°·dÂêîÝsê¡gõ®˜ÑÙߢŒwùÊM³:ÿÍ;VЙ~_ÞÑ¥“íѹ3Ðóøåþ°w×™]réSÜÒ“Ï}²k̤›O®êX}I>9Óð§ÑrÛ½?¿†pfJ-‡×]çõWöªâ®>sŸgôŸ¿áw×;ïÕœn¬÷º[l>§7îÝx°ïžM×ît¶Ð÷esºra9ã¼wç¼SÓ“ŽyNýWîHÿþ»¾{g–ø’9ã÷ô±|:|ïóÔðîÞó¬>ïY6aÂÂó¾ {öv¬J–9¶å ïËâ}_–.—e½©SÛ­me™žwÜÎqGoQ¿[ôÊùÎ}¥¡‹ z¾æ9ÞÓµkµ2êêyÇþÝ3lΈeûV36ÏêÆ„5ÖûÆæzìnéˆç\ØŽ¹ßòl:sk`Á¹mßÁ‡þô}Æ{¯zU1§w#CN³é;²w¯ø°äÍÈœ6,´œ6íec_‹ïÝ™M7ÜÞ~¯žO§ç½o»÷~Ȳíc÷^ÎéÜ¿cV?ô[:çôòã‚G®èX=Œ{÷ê®ÎüZ‘cS¬{ä¤oµ`È©/Nù°U‡Ëi¸¡8£NõŽnþ8ɱ ±{Ç]½äÇá¦~~n¿ÝÇ{ú…ßÔ5ÏV×ó‹]»ù\~1òl:<ïù¦>ÿ;²é~G¿”ÎôQ—ÛµÜÑ9££gUøqØ·c\ʯéžuaÍT³øfØîâkðÉÑ/˜3ÂŽ3=Ÿ¹Øß]=ÿ*r_6›#§þ+äÓù·yâ¸sÿeó8ïêÿ"lXìá=“>??÷£ßsyF‡ŽÏË=}Á4Þöî‹ ¢åöU–ÜR¸£/·táÈ×’y½¥=.1—Î=üŠ{ã‚/®å}-èc[YQ_œ°a×ò¬{[ÚõÎô5ϧ¯¥Îͪ£³Eû[âÎ}}£Í^ÕÆ›:÷ï‘7ã½-šgë÷<ïèaëXn­gtgÁþëü8²f*ÝÞÆî½[Û¹g]ßµ{ú.oê»ÖÅ–;Vþm¯›³le›ìÛwußÞÛc&½·×Ôµê^¹^Ðôý˜gãŒn9¶}¹¥kw:;Ô… ‹ŽUÝ¿§]ût«Â'ßû¡ÌèÇ¡k5îÜýå¹?7Ÿ4}îGÃçæÂ|îznÞwô¤‹_ºÜÒ¢?ìßÑßÂÝû²zÞѵÚbK+øÝ[…¶{›çÓá‘kEܪ3hVí®¾º²æŒwãÈ~\ë=ö¶¬9?o½X3¦ï:£“ »î{wÌêq/ 9Ñsç¼ë-}SnèÅνS¿¥g=÷{úÖŽk;néÎ|.%;nGºÙàs¯eØjÙtą́O=l=õÊE=/Yï½Úî½'þ8¿©ï+¶ß—þµ~dÌ?Ž9éccÏêvµ¹#¹£³ÍoéœÏ£¶cç®û÷ßÁŸÈœ>°l:oéÖ¡~6„<úé™säJ&¬Ïëâc–í\ú[¼[ÕÙ36¯3Çv^÷»k¿jqKOl£ ¿¥_”óùÈ»[.uï™°ê}çœ>–œzòÈ kf|cûw›Õ+¿û®ßÈ]Z~}«÷ô˜_Ësºv¸Èî7õ‚!W1a£O.ßÑ9ï¦áIÛá“nUß·ß~÷"ˆ[úCÖó‡©äÓK='_Fgô)¹qS0ÞÙ¡Ž½;t,X×sfØ^œóþbܸ—ÐÅö" 9°Þå+,9ô¶¸ç]úÓ‹Yý}†n6dÔ³ÎW·õ÷’7“÷îïÅMÝu]5ý+ûދΖrV'ëÝ|ï•OÝ-`Î3ó]1ãtçþíY¶_Þ™xïÿ"Y60aÿ®ô|.Ïås YÛ“ŽÏ3—^ò`çm>Wî;ïé qF_ÂÌÎÙüçïeß»—·ô%åÍ»üq1“^÷ÉùóŽÕUõ»¯¬y.}zî7õUa¢|XëTM;÷µuÞÏ¡é˜Ùkžw2Ý×ÃŒ¾)¹ôÌñoöÆùÞ}CnèúM÷ôMëM'?®#sºÍç×ôÌé²ƒß õÈ«æõmêùŽð` æ úUeמ{Ù"G7õ]Ù»ïÙí|O÷ïö;ßÑ÷d>ï™?NrêéŽÞ£ï½_c½K† }lÕïòÃÅX°2§ÿÌçG¸¯KžÍ³l‡QÓ©ëq÷ÎÛù±øÛÁœ ÷ôcfÕK.lȧ“;ð»úY̦#ÇVÎé:£íŽNŸÜydÂC f÷ cÎ\p^O¿Å÷îç¦ëȧÃ÷Žlzmç>bÝ{Ù.9§ÓóÞÄy¿.¾šK/:ÓÁŽ»Üu±o¬wñ½Ó#‡ÞtÞÑ ;1oÜoé¾{Ÿ`6¯u¶Üó:réÞµ ->lØ»?<ãýÁ³è¾‡GîÑüqøVû÷ÈÑlºåÓÅç¼ÜÐ…+Ýlè[M¹×—â)s;îéÒÛ’në~CÇî=2a­sõ½ô¼{‡‹²`ß±{W&lfÇ¡‡Œ÷ímù¬ùä>å®NÏ»Íç¼¥‡ŽUͲý -õ¿ÅY=øÝeMÿes¹÷¬zú\5›Ïe _°oöÃÍÅÛºúÞçeN¯gÓó̾üîÎz¯þ–»1fê|ØVèpáãŒÞ -sz«Uv±µò¼¾êÞ÷U»©¯­h†M±‰g³»êyÙÛ‚[zêcS>ìzÖzõ»‡þtÝ»¯×Ø°šO§–oh‹k9ÙïôÇÙîzŽy}»Ãn6fÓ‹<[Ðô˜O÷Þérévù;wÙ½³'½[t¦ïå›:;Ówƒ¦Þ ùîÂ’cß*x3=Û¹{N½OæLŸ³¹òfö™IÖ{?v¬b^§ï¼÷ƒàuGϪÏê®å‡ÇGõûQ“?szäΤ]ûñ@ôÝoéØ·“õ>À]½ïgƆ8cƼî™û>̬wøã‚®ëþÝîçã½Òï!û[ÎÃýœ=lÎzÏš.>¹ÐÛbþwÏás]E_Øï¢íã¦}ûUîl†WzN.¬úâÆ®ë×A×1Ÿ«¶{Çê­õ¨ßp./|rȦ“#µ=ö·Ü;çž÷êûPäÒ…;ï{yKlèe{p>,¼pªç%–ÿ&šŽoÉ#ãÝ4]½ïÜÃÖL1§›®+{ÆYïY×g`È)ó¹Ù¬™õžfô7zãtïþ!<9ä×|ÿþî\X°a%ǯÜ×ætåÍèûöÞtdÓIǪt±)sF{\¨ëǧº{[r–­Òó4£S˸ƒWŸœÏêY×çŠ9yô%fÓ“Æ/i‡ xïèOc;÷%gÈ-çüšßÓ»Ì,[+è9ºÓóþ}5Ìé9öâY¶Õ•¨édÈå=<}î«žIg7ÛZÖrv¸XÇ*²éìcÞ 9rÐw»ŸËþ}s¬÷½w$Ÿ¾¹‰¾ô†N6ÞÑÝÿSßÞÌ–v¬Â·µã»wÌèöÝîb^ïŠO®ž³gºÎ{ïîþû.üï{2«ïùî½—öïžOw¿œv±íÓ#ïç½pGßßw\S}ïȨsV?” ›æ׎ؙžnê‡Þ›~x$sz¥åðÉ•Þ÷¢cÕ=r¸©; ¶èM?h‹räN鑃/.pa«N—¢í:>< ¼wraé{Š¦… kß eÃ^pFOot4{÷‹RË¥;=Îè—¼£ƒ#wï{ÑÝBÖ»éú¸x×Â’K:~ã}l1§~3×ÖÆ;ýïE¿ªjz­cµÚ±ßÚ ºŽ½{Cús:ÇîtíJ¿Ìïááž;ø´sð}{Úµ?<šnº^ô§cïžXïSÜÔ§–e{–}»ÌêOy÷˜32›;Ö½î|œËõ®þÆý»çØÊ—™ßÒk{wɨ+V?ç÷ôÌéöæçEÏ#ç¹ôÐËß»ÜÑÁ‰ÕN6xÞƒ–£³Åwîî‘kæÁ.£·ÅþÛJØ¿#Ë–¿ìMWïûšë:fõÚ-}­Ðv²`5Ó¶.ýªm×õ ×tÜÕ7×7‚žƒ;³É.—Ò·Q›ÍÉÁÞ=èºïàÓ¾]y°Ô÷íF6,fóg«ftèx­kõG«wvyOg7ú×ÊþÎìù~Ž»ºçÔ}F×îôxWc¦Ïy½Wèy¿|ªë’asf¾¾¯w¦GÎ üq‡à½kË1öïÎK ¹#ŸÏÁ† lÇ΄¥®Ê[ºv«Ö5ýL¿â{g7[Ø»ÿȃÕN6pÞÝçîý-̧ŸÇ9}tÙ\2éaN¿”½ûˆü¸zwzÔô¼w7ÏÜ8îÝÕ÷î;wÏ¢3Ç–¸qùŽ>6Þ̵xäò=ýšÙt¿­Ãï~ïÞÙRäØBwK‘M¿Ë7ô;ÞÔ}÷N¶²í!2bµ7¹¬éSŸÏ¨åÚÝ">¹¤Ý‰ýžïéMûw÷ºc^çœþŒ,›çÙÀxwÞLù}åÌ®Üraѹú&÷ôÙ«èºfÓÁzÏ:Ïþô™ïÞgïÑ—tüÝïïÊx'çýƒùtÞÔkœ™¯¨éß~C÷{zÔóoͧk‹úã -]'¶èW­þÆl^ézžÕÍç>g¾8äØàyç<>Ÿxï‹!›¾H†\žÍdç¾XÓô%Ñtòaå¦î^9™Ñ—=—Îûùrô½çß«æy7]_]‰6ö¦¯Ä,Ûš÷·à–¾ªlØöªûÞ•ùNÆ»1g‚G®ú[˜Q_=éõ½»èùfÙɦþ¸MaÈUº½Éû–äØ:’Eß’û–øãrÇê5=÷ª‚çÞ8ðfB–M»Øô–>,=qE>}w—žwèønêKïq÷ólع÷tß¾ïlؼ‡G†M8ï6¯X6zžîê~S§ïý0ö¬6¬u³Uß{òºÖîè%G.ìáO¼[•Y6ñÉ#Ãvâü¸g3?rlÎw°³åì4rä*-?=ó^6ÌçgCÍ©[w |qdÂ60ßCzÞ½¤“mtáÞwÜбƒÏ¾wãÁjÛÏß)—>ºrI6]3éÊ|—ùtÛ½¯,—®}«¦áÒÉ6¶Ýûµô¥_ çwôhy‘g»»½£÷»víeCŽ,¹¦Ý?ãz®7tùÍLú÷—ìß¿˜MÿRnœxãÀûF·*µÝ8ïÌ£ÿ -7ô_ô·ÿå;w{svGŸ›—<º°ä8›Ï/H×ê¢ðÞõž¾dL9g½×˜3ÐwÙ»û=ÝoéœÑ ö ÷îA×´ºUøãDÏÁy_[Qß»ïÞ]ËWs[{U:Wc&}MgõuáÃ&}ß°=ü†ÜÓ7‚Gn½à½ëο3#¶ãs{鑆\d¾»¾{w‹ÝÍéÛ Y¶ÐÛb/ö¬v…#çž÷.{ÙvÅ#‡ŽÕ=ß»Sã³®'Ÿ;²é»=ÞÑÃÞ}o¿Ðöžh{s†mßîæýþ>oèÚߢÙtÞÑûÅ=]»ØŽü¦»U]Ókóù±t·HÛ‘ÞÖå~^~­ƒm žw°gNOày÷.¶AÙ—>8“¿£–×|rC™×‡CñÁŸËM}üîÈ¥_\4ñãÎ%˦96›×ÑÙ2º Ý鼧ÛîÌ™+ß½»?NrķkÏêõ•î߯…÷935ŽçôkŸÏ¥·E5=øänq?Çï¨é~K¿ã-½bÂÞó¦î]lؽ»7nBÎ ïé©Wµô»ßËî]}ïÖׂ;º0gÔ÷þdý-˜Ó§Øµ«¾c^—9=eÓ‘AÇ=ý5_Ÿ1¯g6ì«xäªLú«hûk˜Õówö: ûw×qÜÔÑ›þîóyɛɌ.ŒØ÷÷Æ9>9Û³äžÕô°}˜†k/ÛÏûþÎÌ7ô=æÒÉ{×[úßèhû;ìßѽæ·ô ¼™4—Ïýe_Ìèó~O·y}»w0gtV·y=ô«2ö@MÇm=sf´cUgõe¿£¹–qa——›rlÐqt§7ùÞW=ÇVt¬zoºjúsmmݽ·‹îìÛ×àw¿û:ýq6Ÿoˆßûvõǹžoj6]x°>¯w"ONré›[â«u²¹®+Cnk§èoÙñYÝûVѵº#º.Oïè?Ú½îLS îèE×jé‘£/n¯ðÈ¥ŽÕý°kO¾¸žèz¯ÿ»×ßoÜ~ܽh/›jy?úß… ›ôýþ80fœ «Ýª¡»E:ÙŽÑÙBïû½ïDzwoÌ™AɛўUfÕ}÷î96g¿Ï»ÜÔ‡§Ò¯ -]G_ºÍìçØ»cN·ŽÕÄ¡¹È~÷Qá‘Cg:ôü‚½ªÂ… .—²/˜°WE6¿Ç̯ÑûÎÎt×q÷À Öîêô¼Ël»U¯… [æ×îRoKÒqe½WWÝ-ß·s>—.Ϧ‹ž‹ÿ|Xè¹dÓ›²lì\•îôj>ŸjºhùŸòlOȨó¾Ž[ºkûóS ë-Ê„}qîŒøä^_Üûþö¢»wϨ'}Ÿ½Æ;zõ÷¬ÐtøÝù 9˳Á#'lXíXõΰã>ü¦ÎN¶"ËöÕSÿ*õÜgtç¾{Žý-ÐõpK—îtzßeN¯üíÐñ¤á¥ožÍÅ#Ç Û\zœÓk¼÷EçÍ@ÏKλdÙ–Ä—¹3M6×vzã–òl¾ÜØÛâ|ØÌæ-ɨ¬çØÔ#Ç›æÓCN]ft˱•¬÷<§K~Møq‘9cì¸õ¸wß 96Ñwɧo Û‰»wzä¶DÓ­ku;÷±uÄï¾Uóºì™ßM«œÍå턽û®xßw}ÿÖ»ûãœ9“úØjù5á¼ïõ -ßû>u=ÎèèO÷6üvÎL¿ð»ËýP4Ù5Ϧ笙Ãà{?¶û±éûqΨ7dÙ¢×ý8yݵ/ý„\؟ߧÒár*;øSg¾cvêLXòãNãl˜ËÓ¾]ºÓ=Óæûö¸w¯Xr`ÇIßêH8rø=*2ê—Ò>‚7.ÎéôÅ]JÛ¥ëù¸˜Õ‘IÞwÓökÙ»—Þ8õ½g]/Øq˜ÓËïõ©jžÍréô»—,9t²Qß­Ký~®tpb'Ág|É®%ÜCyO¿oð»Oƒ?³ºsa›5];\¦Úß‚ŽUòaŸj~wíb{y~‰~÷éZŬn·óò`_\Û“?nÆ{úìí-øãÞf…ï½éÆ›Ítç.³ù»yÜ©éÚÉö)é²wWÞŒqh°{gN½zߟÒÇ&« ¬™<«ÿÌæÖßb.ßâqÇ ý—ìߡ癦}çÎ}Ž3zü -kFxïèbƒç]ùq‰ùŽ›:¸ï©³eј°Ëže“—eͨë=Ý~W·ô•–³`[ìUµ¯dØÜ#g;wõÉÑWzß×8·#ÇîèAÓ…'Ùtïo‘[:æôõâŽÎ½{¼¡wO‡žo‚çÌwæظoÿ×gô­ÀÛ’û6oçع7w§ïÞ;t}G;ÓK–Ü®æ×öüw𾛶o†^÷½bï.¾wÞÖ-›Þï¡“­ï~9ö²$–\žÍû¡c5dÙ¤‹MýqGÁ+w$þ¸ÃcÛÃ[ŽM™3¼¥ÛÌ~rÄùœÜ¸´}PcÎ`V? ½é'Þ›=¯´|fÙ\ϱs¦ÖYïÒ¡~N.¬°gk»†\Û…äÒ/oF{Ó}>çMÝ´ü¢Ì°]:Ùà¿JÞ¸ª³å²äÂÒóž¿äÂ^¹ç¬¿§ãÞ;÷kßÁ_{†­6§öÖ¼rMþ¸Iê[…–öþÎòjÂ#?Ny°Âš©u§›¾Ú·ß?ŸœÞÓ}ÿþ˜=q¡kUòkÎSÿ;tœ¾÷é³óÞ…ï^ëMWæÌËK-ÇöÊY½úý–Þ üîoÚ³Úð --«ïìo™élÎL›sÞýwÑßBß{ÙßRÌé_¢çÕÞ=xß%›n»ö¸ƒÇ=:þí½ḻ}ÇŽUÛÅ»~ç½û<üîi^ŸãßÐö4£ó†î;ø é‘ |Ø0§¶Ê­ÉŒç º¾¤½-¾÷;ú2{VWèW–\fî¶ä¦.9Ìë¥ç]õšžt|µc>λ÷¥]«Áóþ£Ý+ºnz¾¹©ýéu\'xä|VgWú–ô¨ƒ×)t\õÝ|qä½o!“Žl[5¯wýwWºØºq÷¾Ã™<îÝã½+Ì™½Ø›Î<únʱí5Ìæ{dË8Ö³é}ñÂ)ë]vï…ç=pa•[xã˜i;Š¶CÞÐ#?îøÈguè¸ßÕODߥ³åØ:VO<Žyý-ð¾Ÿ: VûÓë¾÷3ïd;ÃþÌséìYÕûùÙôsåÇ =¿6 ùt¿­ó~®wô ñÅqF×®UÙµÔó{Ó½»E}rèZ-õ|Lÿ{`ÎÐënýl×QϽ¿ó¹Íì·˜Õ9£ý-E~ š~r·Âw·[:¸°ÖÉvw¯Ý-“¸ƒoêMÇ~¸û¸wg‡Ë£èúÔ÷îÌ®Áÿ>um'?nêú^ëO—î–ìsoÜ“t°=ËýüYöíèJG>ž8Ù¿ã†þf¹6ÞÐÉœñlz¼«¿ç¿ ~œÝ+Wu¸ÀëŽ÷4ýƒý-îCú–HŽM8rߟعS׿ѥþ-»÷ï/缬÷¿‹\:=ð¼Ÿ×ß¼ÝÒç¨å¢é|È¥W>÷¨í̱I'[£¦¼™ØËæ;wg¼/‰?N³é¦ëº{_q¿{KgôÍn­Y6›Ík.:Ÿã†Þ6}o{†MrU=hy`ÂÚ½½A=W6ìÆ:¼rÒ·*ýªÚͶ™òévG—ùš®y6Îçt­Æl:;Ù¶·eÿ¾îè̱…lºpaÑÉÆŒºëû®ðÞwË»>t¶h'[sF¼ï'|wô²õúõÝ;»\úΓC‹ûÝÑ¡^éväÃz[Ù¯ª=«G!ÏæÌ÷Òûî~¹ÚÎýXòlÚÝ28MÝ-ƒpKðvŽþ–3ñÊéMÙtíc“\ºîÝÏäŽØ3÷~Î<[ÐuòfÎó<~>ªeÔC–MYïÖáru9¯»øãªy}|}r¸©£kUYrú¨ë×Ì°E–œÎéU.ý6pÞ9«“!÷îàÂÞR˵»E»V1›#Ë&3»húä>v²…¼ðÞÕïîš.~÷À|¯{È¥ ç¿ M—ù¼äÈ=¥]ûSÖô§÷¼Ë-ýµ6¯k'›äÓµ‹í5³ã^ߊ\ºéx`¾™/Î:Wßßõž>“,ÛGÍ'÷Qjº°Þ?ÅÿN¯œdÓÙÉöí]êÎ…E§jÙßò‹;÷싳,òlk†íÛhºö¬žPÏ‘k“œzÁ™9¿»Ïçê‘; 7õ¡ìà+í>¯»îßÙãr14oÜ9»ØÐË6m¬wdÚÔëžîêš]Ê=ýG¿GWþ»ÎyÇïÌïO¿2_œ³Þ5£~týƱšaËsúuðÇݨ×ê’Ky¶ ±ìX½ËžwgÎÜ;kF|q“Ÿù7õö¸x6Ý3žgóû¿ÓϦû>î܃®+CNvG?û==ô·¼hŽ­¸£Kç*ïé¢ã/rKÏxáÎðŽþÊ{:ô½ä¼¿cV÷=<ºUgrSG7ÛÇrÎxÿ]²f>C¦-ëùÇW¡ëŸî‰ûúü–îxäœ ë<Øï0ŸƒñŽ¹üoñ½ÿÛz>/~÷9æØÔ÷>;ú¼{Þ³ž/P˳®çNUÞÓuf_‚–;K3;õœÌ™Ÿ9¼òÄ¥ÙÝûUÁ[súrð¾cûzìkñÞ–•µü{M5^ûUWפŸM;ÙÚžM×f×ÜÇ;:þ\XͲ¡‹Í³êõÞÓ7eV¯;4¼³å9¶¢»eÛöî˜Ï‘gKßä}w~ÜŽö¶l+kfÛû[ÊLzâÈÉîý-Õï=Ñvë_“›ºö¬î ï¼™|W¯òlûvWß—ý»w¶xßj?h»fØ~¾ÒÉF¯{yO?ð½{àÍXKÕÝ‚ ÛQ9£KŽíˆ½lša;N÷tìÝÙ±:8–~UÌèÅœÞøày/séÒÃ&uõÊ uï?œÜÒ©éÂþ½âµ‹lXɵν“mäþ¸KìÝÉŽó~ÕÄw¹œO¿*:ÓÇ–O—·tdØ®ô–~mÙôkzäè ý-ع_‹ÿý–]l`ÈÝÝÈ-ýՕó~k}lö±9&kûý]ìmá|fó‡ß%6³Þ#öÞt½Ðö©±g4—žüqE†-h:²lÏÆ’{VÏ{̱aN×lzèb ߨç/¯enMÿ~c>½zðÅáž>{«çÑs–m}ïÌv¬¦¹=÷¶¤>¶÷ÈœïýC8°_òýÔÙüûÓ;Ví~þÅ;ºèù×/êºgÓÍçþKçôì“ûWõ\gô9çÇÍÍKžm¾àÇÑ÷¾˜˜°ó–IÇÎÜ™ÒóÎÝû’÷¬–96dÓ—–ÐÅ&¾8t·,£+}9dÙ0§“¿Üªzå"s}«k%GNX3kê‘Cg:=ï6¯¯«¦»7.k:ø°™·ÑÞ ï¶õͨë`È5øäÈ|—½ûVȧ÷t0ä´sþvõÇižûwpÞeïÞÍZÞ–¤ñÆÛ¡†ûœ¾ÛírïÞe_ºräöBsé»{Â&ì^ÝÇ>¶¢“­Ï¯ßÖË{ºÞÒ±{¯i:vïȲ…ù\xïÊ‘cš^°`´‡­È°Á÷÷ïÉ¥9ö¬*VµÜ5{÷!5}òéÞ¡®Úî.ªçÃàS.¬{ߣç}ÄùüBïé£Q|¸¥«¶¹ô·u¦3§.}läÍð–î]éꃞ…í®ï†|Ø[÷¼ÛÞýŽ 9»©›¦ƒ/ÃLýq·ÞÆ»z`ÌÜå—û¨ç'÷ï镦?ÞkÛ£³fŒ#™3vSüX3S÷¿‡½û“ìݧ¶sŸsú³ëù³úÞ_¤cõù•wôÚ=½é/¯ÅþUrloÖá"¾8a¾šþVj»dÓ5æÞwïXý ¶*oFr_qÿþUu²‘ ûòkŸÌ­A×óCvM™3ßìIÏs:vð'þÌ¿CÏÅïŽûœÍé !Ï–sédÈÍK.Ýtl µ›úýq‹ÐóEïbã-ý-Kîuo©GNüîËÈ­…,›ÝÒɉ¶Õ÷É9;.òã°O:Nÿ»t¶§»÷µ”K‡ÆÃû}ooý-ëâÃ]fôÐËVi;÷í˜Ó‘a³9}s‹ž÷ ã¦åÚœn/ô¦o¶{àÈílËþ½¼©ƒ +³úîNº§ïvñšï鼡«û÷ĈœzÝ+îLµ{ß—[ú¾gÔ{¶kïí—;w›Ó¥3½¿_ìÝûQÇûIËã÷ô#ÜÕqCÇKY5ÌîÇ’Q÷9ýèD¸36îßmÏ~b;vü†¶ŸÂóîù5¿¥xSw_ÜiàÈ¡Ç…¬ÕræÓÏkszæ¼»ÆCËÙÁF>¬zäFâwoømÌ÷‘eØF¥÷Ýøq‘ ëóúeÑ™®<Øë«Â§únLØìuÇ\ž‡;ºäÙn…1Ãî–4³ßÅÝrldÄÞz6Ý{Øîè‹ ¹{ϯMÐÉöæsÜÒCo:»UÝ+Ç,ºÜÑÑ—ž³éȨ?1£¿ûT¸°ÏSͯaV·®UîÝUßÁ{÷›{ß+¹×‚ ›³k/ÞŸ®^9ÌìU®Í2êÞ—þf=lo!Ã6cºÜÏ•õ.·ôcc–í#xä°{ÿÒ Û§±añU}—xâ”õ®ž÷xKÿwÎç…?®ù†>t]¹3‹’a[œ÷{:néK–O¯X3Γ;³mQÛ—„#çÞ÷ýq­ íËY¿—W$—Þ -ûvîÜUÏmF÷›ÏW\Ë•!§é‰˜°;κӃG®ðÅõν;æôgÞŒ1g:ÁûÞñ—¦GÖL§æ{Çî¿‘c‹¬w™Ñkùtͦ‹?.é»dÒÙ×¢š¾WóÉùþ½W߻ˋÝlûAË1›ûoϯe_œèù¾ÎéžO¯qa™U÷žÕƒj6—þtö¹Èîݹï²{×n¶#gÇéÎY6ͧ×oêî{ϹôñÈ9k¦úžñ¦~Æ~UÌéÎ…-kÆtÝól>§Ÿ³:3lËØǦZ^0äF²'ƺÒGÅ-=iú•u§Ëþ=«ây/{ÓEÓ¯Æ:¯_¿û¸æ3,½ï†%3NØq–QÏ·ô»Ÿÿç®ðÆAßó®ýv"·ô‰h»qäà—+½qÎècÎÈݼrædžœ¿Ñóú¬^õ«>ʹô'dÔÿäy·¯rgl_ß¹GÆû+wïM¬wɳ•Ý-¯3éNw=ÇíüM=q3õ¾ÏÒýÜ÷îÞãÂ\ºÌæèdóû,òl¦Û’cûúr¯Ü§t¶ä{º³aÝ+÷K—ŽUõÉ=ËÞݪù¦.}é/¯Ì¥{Ž­¡“Müî!Ïö.>9˨ײé3Ï£‡=¼xä>à‹‹½-_â}6t¸7½qÔpûþú²Ý»é8Ù3»¦ÿû÷íÎœÑ{:néôÉ-ÈœNï»÷ª.ª¦ƒ+·è/÷²-d Ï{¼©/;ë³¹ÝÔ—l>_’^ÕpGO>xݵ»ï½µj½éšMÎLòÈiÏê~¯y6}Õ4|µìl)ߺýû:}ïG_œÎê‘»néȯIwúfÜ¿wj¼wxæÐæÚ.ý-mzåvzÓ·w°‹\Á‘ËwônœÑ»–cÛõ»ú®v«joKÑɽq¦ë{{œÏ÷’†ïìt¶ýéœÏ½cUùîû˜ñ~UcÎT¾wö¶H–-1a}6÷žUe½—96ß·“1s|̽»¿ɯ‡[zìW5]?9mèc3ÎŒÌêƒRߥ‡ùtÉ¥{žÍïèäÈ÷Ž^ÕÐËVh:zÚ´“MftðfªoÞ·_¦—Ò+—fö+ɱkæÊfô0«£gŽ>÷±ßÕ©écÏÇ¿;îç;¾Q¿{ÖöªcU;Ùnoo"ãý=-ÒÉtÝ´]y3ð»ßËîý^zÓ'÷u~Ü}ýžþ@îÌcʧ?†ÛºgÒoÆrmÞÅö(Ùô'ñÊoÆætìߟe÷®9¶{OÏrKGNýï¯Êœ±9ýͳlü]ùÞßlçÎ}»úÝ]Ïßl·»Vg®ç3íoqì»ö¶èMýóÝòlzK—|:ûZ´3=ßÓ¿1§'öŒu¦ oæ»èPÿné߶sÿþé9u½èVÅoÜÓxKûw×téa“Ûz-¿VéºìÛ—›vîrKþw>cÀ¶æuõÉ­´l{ÓÁ‘ÃœýqkþxG·îtðãÔ§ž÷õµ¸{sf]fóB×Ó¿«ï=°aÍgÙtŸ×;?3ú†äØ6öî2«³“ ¹tÑwîÞó¬ž5}-E6½ÐònMÓ}ÿ¾‹î–pG¯3Ýbç.÷tøãv±s7Öûžð`ySßóüÚ¾3g¸sïé^¸3yn?HÚ®6Ý·#³Ž®ÕŠù.·t²g¼“íèð(°ÞÓ¬~|XäØŽ%W»¥Ã'w"™6xÞÉ’óÎô“Zv ½lzÞâó [äÁb÷n¹Ô®y6½¡kw‹åчçÌ°¥y}èÚ~¡;ø4¯<Ã6*¹ï—ôÆ5SïM—0amߟœkúØwðé–^é÷•ÍéøÜ8ãÃ2“~­¿=—Žl:±ðÊ9ï½9Üíäç÷$ö­V;v»§ß‘‡¼ïÞ¤¿¥ÒnúäôŽn¬÷G¹«?><Y6ð`ýrl˜Ó• û„,ÛÔgõg÷¾ó®üqe'›Þѱ‹ |ØÀ˜±üÚë›Ïê»wzãf–QŸå}»ra¡óô»Ï‚®pN¬÷8§6lõsùg¸£ÛžÝôý[néßzKÙô˜Oÿ%=«ÿ=÷ü|˜ÑÃM}AŸðãèu·ßðÉÕ2lv‰}«~KWM_ôy=°ã–rž-qgZΑƒ–/Dzl¸­ƒïžæu²Þõ†¾âYô¢»…é«>«¯1ÃÖÀ“+úØMo³gU;\¼‡-ûÜ×k~÷¬åÛÇo¦ß•O®äÇyǪè¹üvœø嶰k÷LúVðÈy.]Ù°aF7Ÿ»>ö§CÏÙÝbl{Ý‚ñ.¬ÞÓ{µ<[¾÷=˲ o¦ïéñõ™IWÖ »ØØÝ’çtõ»÷qCïRÇŒw>lzÒͦwôÃÀša ¸q?N½qõ¿"?.üV ¼kµÖÅ&3ú©<ñ¹K\ÒösáÁb.G‡‹ÜÓkþwͳ٬FìȽïäljß=ê9¸3WÜ¿_^ÅÝû8t®b÷.Ý-¡mì9¶Ú-]úØnÄ+—æô[g½ë¾õ°s—Ý{ȨO~+–|wcÃ"ÇF]¿w]]«àà -cF¹3Áûn;wü~x”\:çó)çuÞÔuNŸ’3óÜÄ‘³,[ί=Õüî/̳?îU;Ô_É‘SÆŒÏìo~O¾¸bVçLnÞw›Û½/³ú‡ûÞg~OÏ~9ÙÁ\ØpG76,vï_Ÿ!ÖtþÞ÷oó¼Ç¾Ug½ÿ²\Û/a¾çßÿ9~œäØÒ[°Ýû‚Ìêè[Ew‹ð`ÃÞnêèVÍ;we½K×ê²gÙj]lKÖÙ²ì,9ÌêšM_‘ùÜwïyç¾ -îûjKrêy_‹š]gg‹ÞÐ#tÜöíëkë2£V¼rä†ûyá{î»kù†eÔ½‡­#ý-ìL×ûú–óã‚ŽWìíY-;[c“N6æÒÛ}‡þ8ݹ»®»Onw·ÛÀƒßÝõ½Ç<Û.÷î{=Ñô}›Ù Ž|ï=0ÞqCßw.¬óãúÅs=?]|™M? Ùtð`¸wÇîýP÷î•ŽÖ³éaï~„½{ìn©~']·Û9ºVOTÓ‹l:øqì_ ì8˪ˬ~ -´=Íé≫4ý\vðaç®> wôsdبëæ‰;÷›:;VGÖ›~‘ûVCo oëe†íŠ9¿£ÇYÝû[®¬7ݼï×ãbN÷Yý»÷±dجÃEgóЫ*óyÒñÑòÛ8›KËý-wÞµ:)úU£¦×ïêÅ}Ý-ðÇ=ø¼vïÔõ’3óhsù£pã¦5-&oÆ÷îe/Û‹t³‘=SÜÒuFWîŒfÔyK-vïèLgŽMîêvC“½{fÇᮞy°¥OîÃrmŸÈ³;lXÜÐ? ãqÿNû'²lŸ’Mÿf'›²Þ™M·LÛe>ÇŒî7õù¿À[à½lq÷ÞÀ…]Z’ß‹©·E;Ô—eF×9½--æÚä–NÏœÝÒ¡íÖæÞwö·˜çÝ9r2§‡Þ–UzâÚÆz÷›yã_[k‡ü<ï¡Ë¥ð¾³“­7˜°ÒÃFŽvžÓ×qÏ{Ðt¹«³¿¥èX­þ.òéy_iøv`¢»e§òÆYF=ÿÝuÆ{­/={å4Ëæ¾÷†—=¿¡§oÊ±í±³…û÷ýÜÙ¢¹tïNÇœ~P×uh8±yמrlýCÙ¹›®7ssé‡åM=úݳžkF=ö·à†žwðƒà“«4îã ]g†Mòk¸±‡|zÔsÜÒOá‹ß;tüül²éþ;Ïã‰!zÔíŽ~îÞösñ¼cç®Ì™˜K—N6óÆeæÌ•t²¡m\ç¼sï93y÷>æ\>æœ>÷ôý‚WÍè6§ƒ#G&,îê¥/®¡/=¾Iѯz2êΛÑuøÛÅóN=/²l÷äÈ=$vÜCÁ„}Œ½-Å-]öíô¹³Cý‰<Ø'þnðº?+g&æÙü–þêÙtåμh.½ôÈýh=µ|&9uô¦×¹3¥_ι°¦áؽKoË;x°àÎ|Jº²aeVWÎû—zÞñ¸s—Yý—ïß+mÿ/éù¼ÌèÒ™î}« ìb£¾SËóŽ§Ç9]4]»V=Ç6 ÷} Þ¸ß½Ÿ NÙÍ–wï•~ÿü}6=? žw¾St­ü¸òKž wõ*“νû½qaï~ž;[B–MtüýªÚÉf7ôœW×ý;xq±7;÷KÑÉz÷ú•ì߯¯½k;øòÞ=¿v}“ýî%sÆoêƓì~'wôÀ…µ[Ñá‚ý~9xàɇÅýúþ}AÇÛº3g½íA´}Š6ϲQ×Ƀ96×ó)=rÏϸ§WSMW_œ1g”%÷þséŸÚŸþ…ýû—÷¬ÊœNMÇÌ™oö¸T:Nßû0¯ö¯ÍéißþWd½+ï}a^u]=ïó̳åÝ™q `Ç--X8ï‹ ½-¸­K¿j˜Ó[¶EîŒ÷²y›ïÛ‘S_%?ŽÝéèm‘ŒúÊšùåÖ";nÕt|µ]ra³?n½!×úUÛèWÝp_ܺ÷¯åß›#‡ [ô¼w¼c96õ¼onÕ|rʄ툦;wÆ|ï%CngÛgta¾w·wêÚoÜŽ{Ýw»]énqÖ{èO7néi>ßÕ]»çÑ1Ÿ#φۺk»gÔûø;ôª60aû>£‡ŽUùÝgÇjìfËZ~à3zƒ÷]û[ÈMOþ8c¢»Å=r2§7ŽÞ÷Æûé)<ðð¼«'΃üïC×óá°ÞÇæ7uË£Gîb½qÊ’#VYï…¦cF—[ºÎëðÊåÝ»ëú¥õ¦_Ùwîé:«súXûØ„ó.Ý-צçΙÑ9ýš3:vïYÓï¼›íN:ÙnïŠýVnê%;Nw§‹žã†îy¶¸G'›òf¸{g·*úÓ#CîùÙ¿ÊšyÑü‹Ïë:£¿Ð+'9Û¿¿qÿþ–üïèWM¬8ñ¼¿J6ý­Ü¹¿¿ãý·ôÙ;žv®zgú;<ïœ×«Ùü=pfB†í£ùþõ˜3Êû–ù<äÔÿ;æs™ÓÃý\ýîsñž¾ ý-ù®¾@®»zㇷPÜÔ•7ƒÎtͲÑ'×*ºÓ[2£·|F¯w­¶ -îL9§«®¯²¿Å³éka>Ç ]ù°íbᄌ5a½·ó=xÝ•5#¿=›.»wÉ°m·‰×ñ~6ɲ‘'ھ݉Z¾ -‡?NY3;QßKÿ»æØ|Fßñý»iûŽ0äàƒO:ÞŬï{ìo¦÷z>¯§Y}ß{Ô1³ÿ‘%×ß—>6gÌDÏ»ô§À÷Þ—\:øq¶g?Væte½+s{ðÇù-Ý»ÒÝg_ÞÑÖŸÜ@fóAÚ½ŸPÏm/»v½§Ÿ¡7Xå¼[wzáy÷}»ûÞ•%WiyÒñá…t²]õ†ÜH;W‘e†Ü%÷ðîyW.ìH;Ó¯ -ß;rlìd3ÏûxÌèW–Mó–~­súXöï2£»OÎ3l`ÍÜÞºï=ÏêwÆ|¿c×jèo™`ÿ.ýªwwÅîÝúӡ铉{Ý'U†mb>±®ŸÑéSŸ»ý 9ðf¦ÅM=ÍçÒ­jºŽù/ýª ñ–Ž<9ï`S&l5—/·äßЙ?t}eù÷ÊrKøîrOÇþýª-éd+÷íêu—ÎtÎèàÂÂ#×væŒíß×Ãî½íþ¸”_Ã}ÝY3ÐrÎêªåÅW»Ù"VúV;›Eg‹ô³Þ8åÇÑ÷.=«[;º{<ØnxÝF-ß-¾õžUínÑžÕÝFæLOgõÂó^»« C.t±ñ†n,9ö¶ôC>½à3yÞµËoíc ÷t»¯³yž×Ó>ý]xÝ«{úÑÉq½?Z>ȹôcxÞ˜ÕÿàyÈŒ~6øC‹ÜÑOÍG–\É›Áo°ã„ó~.óù…xÞÏ/boºúÞÏ _œÎêœ× >,úÓÙÙrYß»_*v,ùµ«±1`¯²G\Ø0£çß™'½-rW×®UÜÓ5Çæ 9t¦ßq+»÷Ø™~'Ýl÷¶ƒ¿ç}zN\å…Óîô÷ÈùÎý±ÖãRiü´ð»‡[:8ïvW÷çž8j¸ùãÔÏ{¥é/O¸§ëÞÝöìéûj ¹Wö±½J7Ûk™Q‡ïû÷×8§Ï¸ƒŸQÏ•ù®}«Ì¢£GýÃ3làÌ8ZþžöïŸ`Ì(kÆftõÆQ׿b‡Ë7tý›=.ÐõÿN=Oœ™¿ì–>W°ÞÓ=½óÞpK'CnÑYï¡guIöî˜ÏÁ[{&ö¶€ 4=ÌéË5o\˸°i÷nwõÕV“O®Þß²nœ}kŒwɤCÇ©ïƆ¥7^9úålïÞvn\̦ÿ‰7£lÒ»ÚñóyfÂn†~Uícëlo»wìÜ9ƒ9=qÝ·0£G¾;:Ù|ïî3{êd“nÕ]aÉ%oœåÓkÆîè ½l~G×þôýÄ‘óL:îë œ÷^ßçtñÅU¾OÞ»3g¬~ØpS|÷ƒÈƒ¦c6öð8=ͦ‰/.{ÞO<Ÿ®½l¡Ÿí$v¸{’çô“SçÎÀ#7<›ÝÕÏtNLX۽㞯ûÙy̱ñÎû=«èbcw:néêy¡G];ÙbϪfÒ+6ìHØqÔóVøqš›žûo»£“ý~zUÓ«<ðE‡ËµåØè‘»¾ š|ï7ðÈAß‘M·ÝûDŸ‹/nLXìà-϶0né ó±“m1øßѽ¶à³:ú[´3Z¾ØÄ‹u¿¥Ç{ºv³ñ–®Ú®^»£«O.¾´w/îèk ;ø¶iùšíàÛvS_o¯ñŽŽéÅžþ8ÓôMáÂJ½³±øqœÑ˜°[õÇmÑ#Ÿ\é‹·ô"ˆÝ;3lÕï®ÍêÛQËÿПî¶]ö§ïážï»Íçüöö -ÎŒpÞÑßRu² ë½lܽ«7δ|ßvîCn_ïéÖ•Þà{?TM×}{¥íG˜9t–\̱’÷&&¬íÛ‹½û€znì8ëZ=9=1OÜIèm9=9F¬ìÜȧË]ýÌ}qÎ’ü8°CpÞEË-Çv.ýé#ãÇU;wpä¸s'Öuýòâ2dÓ™e»Œ¬÷KéVMÌ™Kß»«ïݽrÂ……ÿ½à½Ów#~¹ðä²–_WœwéM÷^6÷¾ß…yý¶žam;ø¢oµîuw†Ü½äÙBŽ½éÜ»?>ȷ⼫îñQ~ƒõþtœ»÷éÔx3˜ùS–íIzÓ•õÎýû+y°ÔtÌç¦ëìakÌ°Eæ wí3å̼ùŒ>›É-]çuïc#–sú»u±½ûwÛ½g¯œñã>ì¾nóù78ïê‘£?.ïàÿûõ\t}N=qsfÈqV—ŽÕÀ|oâÇ –Ý-‹ÆƒNŸô·„Ý»ïÝËúŠýÛŠj{ÐõUòfV¡éÔrû½â{wìà5ÇÆ>6Îìî•Ë3úšÍçkÎx×[:ø31Ëslèb[¬wÌ牻á9rg¤cUõ¼Ì§wÐåÒ‰¾÷-Ñò-v¶à9KnÇô½Ë™ÝØqÖͶƒŽUúãdÿÎ;üqrGß+z\´¿LØrçŽ}»t¨÷˜I7ÆL¯o-ûq^ßwï}áÇõuçÞwMW¸qÈ°Ù=Ý´»šÍµ3½ðÉ¡Ó%ÞÕ 6lâΙtϲy×*»ÙŠ\zšÝÏÔ+÷6¬fÙÎĸ°žKvˆþzÝ1££ku$¹ô¬å1—~gtéM—´|DÖLyOO¯Òíˆlú:ØMw¿ÜuÈ¥»ŽkÏ*=rèN¿Ñ,›èxú·»À†½+rwÅþ,Xøæî„÷ž÷î÷ ÌwÛ¿O<ËvoþxÿPð`}&gúô¡æs–Ü#}îÞ¯ZfÔ§Ù'WyÞ¡ë̱?îÉslÏÒ×ÂY}l¯Ây éo!Ÿ.|ؤá`¾Ïèy×|z™Mg ¸°É/Ÿ‰ÿݵû]4œý-Ò­úaþ¸Ä–Ã\nšîZþüqèd«vïÿsz>{[æÀ”C>}!ò`mVO·õEÛÃ/ÖóéàΨW.ïÝÕ#·È>¶%~—Š[z+t¨ó¦.]lË+ÑÇ,[òÁ¯º'N}q«åïUv²­Õô|µ¸­CÛ:\ÀwG‹åÓÛ6“çN¶ òfB>}Ý9rȤg\½—MýrÚáR›ÓVþÞ–®UjyžÕw0¯‹¦ïT¹tåÈéÞszÖîÐ岫y6éYÝ+=ïÐuÏ£û=Ý{Ø2CÎüq’IwæLßfvïcë£kUºU÷Õ#‡î–?eØ ã‡ây'Vr鼫ž÷ÃcæÙŽ©ïyç^u²éÎÝ}qêd¸–K¦íÔ¼ràÇ6|©ç–eVÿ6,5ÝïèÊœ®kWz­»åó¹éûH»VGÔôÆuæÒ¡ãؽ<¿¦9¶ô·ßÒÇrS¿ -½-ò¤;™ôñµdÚ²†#Ç®UæÖ®5ã9¶[t¦[_úäØ”7séÎóù¼ð¾ßGÿû}Á…õþtãÍ ¿EwïÊ{Û4°Þ73-8rO‰ùîŒäÙ¦ñŽ.lõþdwôÒû^é´ö·¼>ó–ÎûË›ëºÎéð¹W]éožMÏ7uÓpër‰½-ÂyŸþ8t¦ó®žõ»÷Og¼ó¦ž¼î~O—lú§ô±}Ê®ý[4ýRÏÿªùäòÝ¿;nùt{‹`È|X»¥/‰žÃ+§¹°{Ùµ¥K.fØZ¾“/üîžis†\èW]‰ùôì{_ ÙôеZÌêu¿û}q𿯫¾‡Þ–:vÝüí‘!§õ&œóf6‘aûo¦ãszèmŸÜvGŽ{wɧowÍßÕ[z7æÙŠ›~ë=l»¼¡ïÚ|žø°Ü»ï²c•¾÷ÞoèÈ°õ䎮÷ôJãµ3=jù> Ó–ôýPzؤ;ý02gªwp„»j¹ófŽâŒŽ|:gõŸ¿OŽÑ±*Zn ¹Íᑃ×]ú[NÌ7(:Øšvï™+³úiܽ‡uŽ=ïèMg6ÝûZ2K³ùyÌ°aV¿ð™}Ä,[Þ½_^`V¿$Ö=rÆ‘»º¢Oî -ŒXó¸SÏé{s:æó«°owœwîß%ŸžÞµçÙEïû õ\sl·~SŸX×j¸§×=ï:«O‚–ß'Ï{`ÃÊý\ïédÀš¾—¹ñ¼³Cóú”ýªSfØ”;5&ìÔ4=ë8néžO÷\:gõÑðÐé"þ¸—è}§7Î:\ÒîýÕæuè9oéâ{ºžß¶ä=§»Wî3äÔ¥7ý#ö±±¿E3lÆ…ýŸÖsŸÉçâM}Î÷ï¡gÌzà#ã=ÜÐ¥·Å¿î‘#'vÙ÷íKìKwm_ÆÌ2rm-á¼/—÷ô•ð;ìÞ¡ëæ{ÇwM;Vá[f\é“Ó²è2¯ƒëÞ.öîámÔ=ï›:ŸonÈŒ¾Q×õŽk{öÉmÅÛ¦óa¹o7Æ»w¨Ãçn¹ô-Õòò^¹nÝ÷}Wï{äÂ6<îÞ½;=ÏéÚÕâÙô²lèk ýéuÏû>gt÷»—ÌÌçý~ìn98<=ï‡ü™Gî½évK?”{ú±yÞÙÛ"z~bz®þ8å¼CÓ'ƒe–ÍýqÁû® ¹‚ ;8˜~Gæ yïd͈–Ÿ 7qgÈ+ß…sg¨çiß~{V/\Ë9«_:w&ßÒ¯|ÿž¼rÎS6lÙ>Ölz9«{÷œW¿±^ÕqÜ¿_KϪæÔÓMý&zäØÉ&z~«;÷œEwïû„y¶¬ïÒ¹ -OY°aÎD¿;oê¼£ßÓ÷Ž:wîÚÙÒÐͺ[Œçùô©÷°Éœžfóiãý)h:séúžÅçN.¬jù½îyV¯w·¸ßý^÷ƽ;Yï1“>ûðÞ–wÕqñ¾¿³¯Ågô¯Â'Ýl__î{Çîýûó~>÷9ÝïÔùù×òyô¥û·ºŸ+;N}ï‹Â[ÀM}Iù°èbÓ½ûRæĪž×zÙ–©é̲5paWè}œ÷•r÷þ3—¯4yä˜i«k:|qÞݲVß½·ÅóÎÌFÛXrîÛà7ëyµs_G[Á‚¹MÛ·o°·¥ö¶:÷î\X™ÕÉŽóoÅ…6kø–ýö™}»ëþwín!vGn軞aC‡KÕǦù5fØC³{Ì™üö -&¬pÞ«o¿g7tË¥'Í÷î–ò–îÙô™Ñ£'¾8æÔ¡íÜÁã¹7.é»u¬fï»÷·‰'îèÄûUO¤7]½îÇèMG[KNréìeã¼> oÆ{ØNãl.¿É™AN]wïçq^?]¯ÝÔñ ûvõº|wÉ¥;ëùôKæÓÑÙ’oé—9¿&³ºëú˜;øÒ#7&Cûwã̈¦{›pãn}çÎŽUÉ°AÇkÙ5h»u¦—™6úÞïÄë®}«•Ç·u˨?¨®KozؽÓãþ;VWcÍð÷¼q˜Ó+Üܸ'åÁ ¯Ý-/¶ƒW†œÏå:Ÿ§¿ß^ýl̯½fmŸA×+þŒåÒóœ^Ï°½‘5£.3æÒÁŒË\XÓøÏw¹§¿K6ýÓ;\l>ç޽̥Ãóþù¿3Ÿ×ïéóòŸ\5—Ï•7uëY]4ÿû"X° µ—Z.]xï9Ǧ;øeògÒŒXïâ{ÇÌnZ¾Œ}{k%ô¬â¦^×ôÒ#—ókìnY•þã¾·uÿ.ÙôµBËý­“õŽŽUå¼·­‹M93›:¯oêM=Ïíúä6ýŽNŸœçØ”#§÷ômÜÕ·;¿ùî·tÞÕwÜ÷®¬Û>£Ã#·»ã¼÷ÝÙ¹Û}¯+ý-]çÌ°7=2a•ñN=×™½èM÷»:æóžûädN96fÓ¥cõ0ÿ÷þk:ùqʃ=ðnÕ£#ñ¼‡[ºøåoƸ°Õß–_Sæû yïÎkʲ-7¬Ïè¦çȱ5øÝáy'ç}XeÔO…9#,¹s›ÙÏÏ~×ø°á–®ŒwåÃþüÅ{úèœÙ¿_yô’53ºâ-ý’}l¦ñÊ›ëÞ½äÍ(ß]937µÝ»raõ¦~˽û-¹3±7ý.äØpG'¶IÏí¦^¿§ß3—þð'&,x3÷eº0ßé“ë}š~WÚýæô¬çšaÃþ™ôêûóßñ–®Ì÷ÎçÚ™î}lŸþ´·åóKžfÔÁyÿßÕse¼³“m~¾þÂîÝÙ°ÔôEa½ëî}©Òveƹÿ½šÍ—‹Û:<ï-èz ¹ô%¹Ÿ+¶Ònù½¢ÞwÉ°ÙÎ};xÛ½§›úÚ*5~-u¸DoÜj{5ÜÒ™c «Ñ'§.9˶!^w›Ó¹{_ÿ½¹®½ªünÂ÷Î}Cné›ÁW}É„ 3û6=r»£—yt¿¥ï„/üï%ï=pÞ±o×.—Ý.9ïÍ»wh9îè嬞±=íc£÷}?}Ãν³kΑë»Þnæ黯{wÜÒ‘S?4M? ¦ë|~ ³9=q {÷¨çÊûGNúØBŽmpîêèLÏ~¹SïN}l%Vsl2›Ÿ]Û}ÿŽ<ºdÔÉŽ;—,¼îC÷»Ã+Çùü<ëºqa¡ée‡ |rYÓÍg³;93#ïl¹TÞû•±äÄ#nœîܯù„'츛ñMʧ“ {sG‡‹úÝqW—Îô´w',X{Ÿ¢ç¼§Ó#÷YïMÿ]ü×ÿºž—³ú3sež Î:üî‹î‘[ˆ¼½¥Ó#·´(y¶¥¬é¸§+ë¾÷VÞÁ·–¤cµàÍd?œjüŠåØêugά‰?Œ÷²7}½é«’ak+F43zº£K–m]vîèpÙØM_/}qàŠ¿¬™üȇÅ|-ß-ß -9¶mdÙ¶… ÜV“®çß¹‡mÛïéöo]õ¼ïDÏ;ØîÔöÝjçÞ­ûÞ•9r=›Ó{EF½Ì³Å;:æô~OïéýصÚW>,Øî`–]lΆM;ø#ïM?"¦IÓ?îøе~92g²ÿý„ìh»æÓ]×â‹KwôSóÆa.÷{::\¢žŸÙ¼ž=ïÊywÞŒyߥ—­ôȹ÷ý<õ·\sºkúyìM×Ý»xÞ/ m§®kgúÈy3¸§_Yní’óx¥å—Î…½’L:™ï×–O÷.6ðacúMÁöÖŸu²iv-Ïìe'Û„\ØÛÚÎ}BÞ»ÿÛ}¸©O´— _ÜÏåy6Ý4¼ìdƒçý1ö¶„:ù°Òɦ¼÷'ìÝ…9#yô§çÂûŽ|z`Í<[ŽM²é’Iç-žwxÝóß3ñ¿Ó'^wêù›ðã¸{‡GÎ{VÙþá¾wúä>%«øqdÇe]ÿpÏ»ìàÿ)=Ÿ›‹¾¸ó]93 â“îÞÑõž¾ä¼hºÏë6³//6gÓÁ€o©ç]öíÒåBŸ{±w‡®¯ ¹ÌžùC6]Ù°«yF_-4ݹqvO__«ÍèmÑrîÞÛ®åìP/ô-šc+ïé`È…Y=k»óã<‡Þ{ÖóŽÌé[~Soð»3Çfšþg6,në?Ú½y°®ïõÎô|Gßõ Ûî^È°aFïaïnÞ¸ýª›mßgtîÜ­Ÿ³zß÷îôÈÑû^õ±íûŒ^úãú`¼÷å–~H¯\Òsä×pOç¾Òêè{šžz[,ÏFÎÌqÈ®‘3Szä4ŸnéÎÉóºö¸ èu¯õ±1^äÒµ/=äÓc'Û7ôa#oszyOÇ+³l˜Ï½»¥ú^ýÑ—º[jL¹±gÔ5ÃVv¸\_=«â‘3ïû­ö®^;gæF6»¥³ƒíý½à¼çî–Ïwɦ¸×ý«dÇéÎýçïBÇÿB¯ê_ó’MŸþ¸…9gÈážÎïBdÍ«d‚1#Ì™%ÎçEŽ~÷¥°ƒLXÎéË5F¬ßÔ‹ÞÌãÆ‚¥¦—ýékî{o¯9÷Ý3ékµ¾ôµuÙůë3Ö{[{Ó=›¾®Ùô´·½;¾oFslÔs2ä¼;}K÷îçÌt’ž#ÃæóyîLWmGú{Ù‚ï]|r;åþ½âÍ옎k~Mt=w­šWŽz^fÒmF—Ù}-ÞÓ¶×è•+{V1§ÃïÞØßÒïÞL_fõƒ°o—,ÛQѵŠ [ÒwóÅz&³yØ¿ûœ~:Ù2ç}pìûwîÝéó[ú){ÙСî,غØÀz·¾UíWå¬^ðfÒî]ºÓÏ%çlØ¡óãνÃ%ô·@ÏÏuç^×t½§û×fônéèX½”|úeœÕÉœÑÎt¹§ã–fsçÂ^_;Ûýšùµëb>¿-ô\÷ð‘»+5Ýòl“;fØî&gF|îñÅÅÞôºžÇ{ú£dÔC6]¹qœÓÕ#'súÓ#réMý-ê‹{Šž÷²‹íù%Îê\X÷ƽPÓߘesM/;Óù·xßÁ„åÝ8rïÂŽ›ioº0ß•Ç<½ïÒ¥æ;ýî9ÏöÍçó1ËFŽÜ¾ÒÉÆ;zÌ°Í[&}q^ú[4ÃVfÔ—¢WŽwôEéXumo CŽ9ôbÿ¾Æ»ô­®H>=ñÞt¼…]ûêªhüšëùjÞÁëÞ}Mòé¼¥›ç^¹Ò'ǽü6õ²É}LØuæ×Â|¾‘;ÓÙÅf>9dÔ7·ô–¾õ[;VÃ-}+Îè[AÏ·ò¾ýªÜ½W:ß5λ±Þ©å;â•ë -ó}—7õîṉ¹žW¿{µþ–žè;Y3ôÆ÷tÉ©'~\ÏïêžcMÿ™Ó÷Ä#×÷üZå•;ìÆî–Òë~`~¸ÐÅvèžwæÙƒß=çÙNœ÷ŽÞtpã’®‚÷]»[ê~÷?t²‘õn;÷3¹¥‡™Ý{Ùèy?ÿÃœn^÷aͧ·ôsÓoÛ½ ãy6Í°Ù®ýwôætçÍTÌwçÂâŽnÞ8íO7Oœzã0«cçÎL:µýFvðþ÷µxäxW.ìðÝo©ë¾swÞ zÔ'…¶›¦W~w0bïïèwŸ˜®kgË„,ØúÌî7ô{»£+GîAºV§¡»Å9ïÕ÷ÉïèSÏ¥3£þ\0gžÝ÷NÖ»ÎèôÊ)GÎúUÓÎÝ|ïÊzwæû›èºóaÓ^ftv²½½‡{:;VKŸ\àÁjžÍnèc5ë:ôü‹ù5úßÿá}»kû|Ðwö¶Ì£›MzU›ré:£CÓ–òûù{iQX3KžgKZ¾hy¶åe›ÙËóÅ-É|.ßea¼¯°;»öUæÒk+oFwîkq^Ͼ÷^õߢ‡­©7½ý3Ÿ·×mN߈96½¥¯Û|=r›qVïlð¾ìfÈ°mþÞÚÜ -s:™3éYÕÞtðÞ·â }½lÊ›Q¬æÔÁ†-»ØvqS/vïæ{960ß{¼¥s>W.lC–mßû[²/®ç¹ô‚—t¿”+ytxå厮ó¹ê::[äŽ~D.ìá‘dÙì~Žý»óã¤7 úäêü¸“´k?q]‡ï9dØ åÚÝ24]¹>9çÌØ-š.ž÷‰ÎèŸÓÑáâ¬÷{ßÁ?ú¼<ïÔòéc‹=lO®éOȧó–.ùôbNÏúþ’:V_ ë/Êy&–ý-èNõÝ;˜°oÖ¡fôWõÇ5£½éòû=fÓg˜ÓC¦-òãVæõOõ¿«>qÞ¿þùù»wã¼7ÝÓS~Mò鼩7hºÏç ¬÷¥°ƒw>,Ø3èoAvÍÿλ÷ÈSŽÜŠdÔÉšA®mÕnéàçÌcÇ­ -ON;\ÚÞ™Ž6ïi³Ù|ÍÞºxæÒÝÜ{Ù²¶oÐßûF‘MwöŒw²uè‘«w²q¿å3:9rM«[ȯù¼îû÷îÛÓ¬^Íãø»+Ý-äÁJŽÜñÈYwKéyï*gFûÓµ»E;Ô‘_ÛëI›0f‚÷ÝýqìcÛ¶~}6GFýF¯œÌè™ {àLXáÇ¥œºv®SË}¼q®çïJ¨®Ÿˆ?.ÿy°'žGïÔwí§g¾{Ϭ™ØϦlØsè¸t² …w1<ÿ˜°èVUŽœt§'ŽÜÈ™3AÓ//êžwûís¹xß/%£n.U‹æÓ¯Äó~e¾8t· ›îÞwçÈÝHw:óéâw¿gæF²lðÇÉ|®ü¸ÛÀœ™ü¾-˜°iç|ï÷Þ™NÖŒÝÔ|ÿŽY¹ôJÓï£ç=3äCîQô}J¿œïÞ³–?ÚÎ=úãô¶Î;:~ˬŽý{øàsïû«xÞ_©é¯î}·œúoê¦é3íd+øqoÅ=ý­šÇß,Ëöîznsú \ØwÏ®±sU´ó9{Ó1§ù=½zÿ´žçWiú_vKŸûö…¹b÷®~wͳ-Â#oé±cµà -vÑfóE›ÓÁ‘CF½µÔúúVSÝ:Ó m_iùÎ=øÜ[`ÈÅlúŠzäÊù\{[¸sWmÌ™JËÉy'¹6{[Öµc»÷´k_Ïs:ù°›ÂÛÈ™téYÝÜôÎäØj¼2ädF¯nêìI/úU·Ì—îé¢ëœÉ·åŽwïäÆítÙ¿-ï¢cU³éȧÛë•÷tñ¹ƒ;C>¬íݵkUõ\;\è‰+{[pKGýï‡óýPxïõwp$,¹£Èy?" Z~,wô£ì“;9~÷“““¯ürÎë'šO?=ܠγý{ÙßrJ¿{¥×§1Çf{xô¥ŸŸ‡{ºëùÐØqv[mϹôs¹¥{gKÌ°¡ÃEž1ßóÎ}$¹« ç`Èe÷~Å^UéKݪޱʌ:÷íع_sï~«™6zãnâŒ~»[nÅ3ؽ³3½È¥k6=«…?|weÍÜ×ýqΛ#všú[â®=ëx ˯ÝÓÍ#—æt½©—~wË°=É-ýüWfØpOÇ-ý%ô¸¼Y6ý…¾¸·ó=òäfìN§ÿý]:Veÿ®óyò¼¿Ïj¹˜M÷½;9ïdÂBÛÿ¯è¹¼¿æ¹ƒÞ÷ªg]lᦎ=Ìûö!öíšc;‘ï~ΛúÈ5]ù°dÈ]†[f¼Çý{àÁ’#w)¼ãÃÂwõ<ÌçÒ«»Ù0§Wÿ=ïØÙ±Êwæô›o&ú㪿oÍ>¬ÞÕ'w÷ìn¹·6ðaÓ }‚û„«÷šy”ù<ÜÒµÃeê¹6yÝ]Ë1£³·eÊ9½Ú»O1ŸkË‹~_èÃ|þÌ>6ñ»+¶ï-‡ž}l²wŸQÓË,Û›çÓÙß2Ëlæs÷Ûyrï¢çœÓ«ºzß³¦ÿãú-™ô9îà=ÇF}gg:¼r A׳7Î8ï’i[HZ½@Ï{ð½[N}¹ÖÇfšÎ®UçÁ†®Õ–hûJ±g.]æu°ãVÄÿÎý»åØV„!'{÷UøãVý–Þ†¾«–3—¾ÎÞôôïíÌŒ«üïåœ.lØ pÝÙµºY÷ȉ7Î9r²wW¯;îéì«æôÎvÜ¿GÖŒ¾ çaV/îèðÇ…îtñÇírÿn¿÷ºâƒ~g:\À–Ñ›zβ¹÷}·ô˜aëíë¼Þ'v?0aËžUtº€#wPëq)ûØô… ºVã¬öïÈ®ñéþÝyï˜ÍÅïŽû€¼aÇ…ï™åÙâ|î¹üÐË6<ÍÞ¸a™g;³\úðܽræyžë-ݽr!—ŽüÚ…kºëúÏ»,±—î{¿=]§ß½–a«ôü’3:guá½k[äÍÄþ–›2Ÿ®}lÚ±z=ï7š_Ó7‘ ›ÞÓtü>dÙL×m>¿GN]|qèK÷ûƒÏíôÊ=:GNz[ªY]õüqŠ•¯w¨ÛÎýñ‰\Xv«&mN}ly^ÇÎý)øÜ9§«ï½ìPGº°aá}'6dÙa{ Ù5v¦K†Íu=k:zÙÞ‘QOÿþÁLÛ‡ô¦¿Û½y÷^t®þ›ÏK]ŸG‹ÝÕ³×ÝvïÐóyÏçgY6aÃ.-¸¦s/¾wìÞ—Í#öL`ÎhN½å™¶è{÷·,éi6—þ–VMÇ-Ÿ¾æÝ-̦¯¦l:<ï!ŸÞF}ÍólmáÎ —NMo'v\{Cõ>¹Í¨ç›þ ;wÎì˜Ï‘M/}ï0ŸÃó¾\83¸£CËÙµ*ܸmç¼o;®»­sº÷µÐ'·ã÷ô®f×dÿ^ñfr‹dØö"ï¾8ò`õõÄïÞè‹œw<îÛÓ¼î·ôþ/³lyç<ïô»ŸÙÞý,ßÑC6]˜ïCúÝÁ…e‡‹õ¬RÓ/F5æ;µ|ä¼÷çòóè~S¿¬ÍèôÀÛ+sF³mÁ§ûvínw&zänÄ#w«óºúäîУ®»÷[ɱMÈ}Ÿ”Þwjù$xã´;ýþ8ɧ?rnÏ:þ îþ8»¥?ˆŽSÓÁõ»:úØèsoȦç7õ§ý~2Æ»úãB'›íÝc>=ö¶hŽíMï鯳"—žgöwÙ¿'='¼ϱ}ÌtV.láw=«¶kÿ¿¶o¯k9~GÎûÜÂœô±yF}±ð½#ŸžfõÅØË–ïèu>ì¢êùrî[åî]Ù°ìN7ž\á{¯iùÊJ˜ÕƒGneU<ï þ¸Ðµ*¹ôµv%·&ŒïKoÛý¼ðÆi7Û:ÙŠ|­3}#Ìê¡;}Ëgõæ›ÎéÏ£ë̾#û÷Z†MX°á–Þ•¾tìÝå–Næ æsïp©˜3{»rKç¼™3{ÔrùŒú>fö}ɲ‰W®¯Þwïe‹ýéÊš¦Cî dÓÁsæÌ‘ÜÐûžví`Ç ëý„žwõ½Ÿý-Ç¿#G.÷± õ—“Á øâª>Uøݵ“ÍÙ°gá®ÎnUeÃj~íÌwîÐtèúì¸ÈyGŽMól£°sÏøËÂ÷NoœòfÊw…—u}|çó0§£íJ}qãC®êXE·êø&úݯ%›^yå0›ß€7£«æ“»ƒ®ßݹ‰ïÝ-£>)üïÙï;wïM=«èo‘y·ôûGô··tɦ«ž+ö±`Â’'_eâ7ÝÙqOÁ#÷lùµghú³äØ^ŠÜÏ“ïÚþîé:«WÚý:sÖ»Îéø"Ë6“ŽÕpg>Þë9u°g -Ö ²kÿwõ|.åÐÿJoÞ3é¢ësóà»Ï³“ ùtÜÔ¹o7\šÏ—²¦/Ù¿åìÚ‚ô«z6l#·Œ<[öÅ•û÷RËë{wðg´“M:Óƒ¦›WN¼qèdó»zÛýïm缯 C®½¶^ëYMzŽ9š^½6¯kßj©ëΚAËy̦‡ß»_ØÞšžær˳]ªWîªÐô«Ú-ýRsêìVÅÞ¼™ëßW×Wžgƒž‡Yý&ÎèÈ©K‡ËmÍ÷þ£éèW½Áœ~GÖL}V¯ë9vðÞË&¹tîÛ;3ß;øîäÇÝË ]fóãÍøýÁõÜÜÔŸêœ÷©Ìèù÷3çtÕv½¡3Ë&Œxåªû«t¸ä [½cõl˜Ógî‘›9¹ôcK·tìÛ³–Ï>¤ÇEsé6—¿s>—Lºpg~Þ?®ÛÿÆËþWàÌÌ!Ç&ûöòËN¶Åyß»sçŽþ–ïMçl^ðf–òŒÎù|ßß{Ãm=pãM‡®SË[5ÖŒ³ÞmVOzÙ=«Õ¬™¶ìÞMË•ùž<ðže«÷¬®SÃ×÷¾¡Ùôõ¨é¦éuÜûU³Žýé[Åï²ÇEvï[Ü»×=r;dêWÎYïô¿‹–ûÌÞ ³:öîÝ=g¼g û¬®]«=ÎéšOß“½{dÇíO9ïÁÿNï'†öîÞ¯zPÛ¿èΫ¦é!›žwñÇÐx›ÓyKoÐö“c¹©ë¼.ûvïLû~jŸžœÆîôSô¦GÞÌ)fó3ɱUù5ÑòØÝ‚ß~OGw‹îÞSN]éç:ŸÇîpg.CÎýqšIWÞLº©®jwôKɱe¾;Ø3ãºï=t±)k&o¸wó~~cy¶ë[cÇU™6dÒ‹[út§ßݺ¶ß!§>)4}îŒsa«{zòÊÝ;ÖûÙîÝï®y6t²=À+÷ÈyÚž}qa÷îìϳóNŽÜSñ»Ôot·ðßòmýE9ršGwæµØ½7xÞ‘aÓYÝuݾ3øÝ#oFu½-Ì£ÇþÞÒCºøäÀ³9ýŸÖëïî}~î/aÃÊ]}!¿ì‹s}_ļŽÜšpgç}a©–Q§¦Ã·Ÿ{ü¦Ü™–÷·PÛ=Ƕ²u;øUíZuM_-5ÞwóÇqVCŽÝ-ȱõ¾î9¶uícÃlÞ¶lúFìdÓ½ûú&YrëÚÛBîL'ÝÐ7à“;zgS4]¼î›äÆÉÞ}»rÛôË)Vû[¶ »ã>9xãÈy_F}ïÕ~}G´ûvÛ½žœúß±{ïIžM¸î{Æ„Ýïi/[=ŸÞ“›ºÞÒ}ç®lXÿ–š~ˆod½¡“-êyÌ¥GN:[Ž£žŸ8ãÝy3Ðtìܱk×[ºæ×N\Ï5“>È,ØÁÙi̤“÷ž¿ÃSô°™ž9¯e>w>ḻ]pïî]éÊv×ù\½ïôÇ]JÛå=ïªëW̯Õ=ï—cÍ°ƒž»×]þ¾Ö,›çÓá‘«zVoЮ{÷ë[÷»cß¿;²l¡Íýq±‹Íø°“‰pädÿ~3êñ¦®Œw™Ób6=é÷ý£w¸ð¶>5ÎŒzßm6‡¶O3k†½éȦ—Þ÷ga͈žÇ^¶çú=™tÙ»¿”¾¸ó¼ëÎ]òlÒÝïµ ú[c³Y½˜ÑýUZþé3;¼q?ÿöþyßÞ ëÎyŸ‹ýªeÏ*ô{|÷…¨íœÑ7³ä¿žœiú¢j8zVÉ‚7ôÔ›NŸœúÞ«ç}l˜ÑcÇj̦ƒóη&\9Îç¾{'CN÷íÊŽCoúzÛgôuçÇ5zÞ-“žgs˳mÞ8<Ý¿Óë¾IÆ{`Ítb†-w·t¸wßvܶ=ìÝÓ~'ûäò^;ÙʽèM/5½ n\ìMÇM}¯Æzwoœ{ä<›¾Ç:Ø°û†Ý¿{ßýrýžxä"o&0bÉšéó÷¡åØ<æ96ÑòCñ¹ -ó=íßkºw§ûï“t[÷9ýØrl‘73pÜ`À¾ÕÀœ¡ß=çÓϬ“-³ÞÞ—~¦ß3úäœ3#:Ž|ú9˜°Ò>6t¬Ê¾¸°ƒ÷ðâr¦Mx°··ÜÃßi/Û]Ü¿CÏo9ŸgÆséö 3ºÝÔ‘as†œëºö·Ü3»¦»w}vC‡¦O§ÑóŽ,›ìßÑÝ’X3åýéÙ=r¸£W{÷'ðÝ… Ë,›t§K:V_8§¿2ŸŽ<ö»E83–G³Ý;îèÐô2Ç~òéÁ÷éý-ÿ¼NÿÇúØæ$ÏV=xã°sçÞ]´|aQt}Qy2¾ŒÎéÖÍöŠ=¼2g^•;ÓÔß"Œ÷WënmŸÍÊWh9:Ô©ëù÷<ðây·\ºÍíÿ´>ÿçæô¿þ åþÅ }q~^néÐóyéPóúR“¦+ü8ínaV½õów+æØÒ[ÎóyéyGž^÷–{ÝWœÎLèWÕ›ÜÓ±oo“'×v¦œv«&¯\Û¹qvSoSË׋;zs6¬ãÂ&-—ßÑ÷.¹thyÅ‘ëÀû. 9cͤ®Õí¨é±“mdzé…kîaÌðwèoÙõ}Wfuü½+Y6Í© CÎçtô§Ëœ.ý-`ÍÐ'ÇžÕ^óîé`¼÷Åïn^w¿¡G–\º£DŸÜ‘ÍëxÇìnqß;83é{âþ8õ¾‡{úÀòlÕw ³ºô¥—;xÓqW?ã¬n 9òÞOÓÎýŒ»wéYcæLØqʇ•^¶À˜©yäÎÓŒžt]´œ¹Ð¯z:V}>ŽœÍêÿoF{Ó¯Rݾá¦>æ-½êlñ^6Ù»3¿fùô[xän ŸÜ-çô²gUwï`½3dž}ûìÚÅóžX°“RÏÒœ> ½é˜Ñ39ïÈ¥O‹™ó¹pfx°E‡ ùî¶kçM½ð¼WZþDO|r6»Ëþ¶†\5“¿ 7ýÍ<漢­È±á¦^zäô¼™êžž²l³è• ì¸÷ÿúüŸ˜Ñç´-ÿ^`'ÛnÏ-ˆç½Áû.¼úÞ‘K_hèZÅŒŽœºt§/…îôø]é±s5xßWZAÏÝ+'wuxÞ™eÓ ÛêoíY]ålÿ{áK~w÷½³glØà]_/vîÂ…<¹˜Mïা)óù&vîƆíøÞ=û⬓­àΤ;ûVý¶¾#šžwïÛ7Óż^ÜÒwd6ç]]ók¡Çì8aÂV|éo¡/N3lû{ÆzßwÖ µÝ3êèc«úV‘c ¼™bNï[.½éžŽ½{¾«Çùü0ìÞ1§Ç½û‘ÜÐÝç³9KoºfÔ̲ Ø¡~Jïûiؽ³ÇEºÓÓŒ>(vîµ~Õz/›úÝÉ›9?>¹´gO}.ÒÅFλö² CnäêÚ™>²îzÞ‹çùô&v¾®é̱‰žsÿ^Íè7`ÉÝdoœdÓ#ö–lÊó{úgÙÈœ):V™k›H~M¾“b›ùãÈ™ñìZ­_U´s¹kºsߧâ{Oœw²ãdV·Ý;™3˜Ù+ÍNž÷'²fže{r†œúãÔ#÷¬}lA×_¼ÃåíÅ™°¯Îyçœ>{}lÊxG/½îqïŽ[:ûÓ“¦0Ó¦Ýéÿ´6ÿgÞ_ó®ëÎx—ŽUécì>/7uúã,˦™¶à•“lºö¶à–®éK¸«/Eû2™°…ç]º[ZìKÏßUÎë®ãšaÓY];VCÛj±{/;VÃ[÷ý»øÝÛrGÇžÝ-ëæ‡[—\úvî’cK«ñÅÙ]=°ätçÞñoà¼os÷¾æó¢ÃEô|'Ìì]÷Ç!ÓFoÜŽùÜ¥·%xâDÓÍãN¾û®fÒuï/Ùô8Ÿ÷¬/Ýóè®í˜Ó÷yGó½êN‡ÿý- ü8ÿúÎ=÷±ù]Ý»[™k;¬1䲶Ÿå—µüˆ}«ªéƒò¦.\Øv³±;{÷MÓ1§ŸÂëÎü0dÙü¦î9¶spaÏë~w~/â¬~.\Øs™Í9Ÿýªù{Iï{SÇ*ùqðÆ¡kÕrÞ­zézm/»[”÷>¾¦žé‡‹ý-×’eË^¹‚#'½éÕ·±;ý6÷±•¾÷ô4›~‡¾–’7£~wìÛ­›Í²êw&Íé5¿ûzV§áKÆ{õ÷ÓÔ÷ðÔô'¾éSœÕŸždç^ÜÓÓνèYU~\äÎHŽÍ¸°oàÃ’ùþ&™6ímÏ{Ŝѽ;ûZ¼»Ì™ÙGæÁRÏ?ØŸþÿ×ù<=¹£ÏëŒþ3›Ï…|ú9ïšS_œ_4æÌbÑ›žYïð¾Ï;vïËÚÉÖÌË7õ–ûä‚ß]^á{¬™ÕÔµº²Zt­-_‘lºïÞÛ…¦k6Y¶5°ãŒ#WæØÀžÙY}ú²é›ñ÷¦j<:Ø"SŽ™ôM÷ÆqçÞ‘;:^'ò`ñ{ÛfôóɱÇeg[üqÛÒßâ{÷®ìÝw˜a‹lØÝÝÝ0Ÿ×réôÈíz·*oè{Þã¢uîॷ…¬™^-Ÿžôü`ŸŒ÷ÕK,÷ñQÓ -.ì‘~¡åÊ“ÎtÿíŒ÷K?‰ùµcÓòct­Ú|îùtÜÒ%—.LXïl–;ßýŒ·uÑóÓ¡pg„ [éºÞÕ±w¿ð[úðB=ðèn1¯œÜÔ‘iƒOÎ;\F’gÖ;¹°#j:néiV{.]½qdÅ]‰Ž_]sN¿V.,òkcñº_+?®¡/;xgÉ… Û]¡çw·¦á·¢åð¾Û ½ØÃßOÜ#—¹°éMlÿ~Î{Ã-Ý»V…)½rÔñG÷¼{‡º2ÞeVκþüä3ûwíÑ'Gæ îé/>£‡^6xÝM×ßôž®ž÷™ýýóf’OŸ½i~-²f8£K>=õ¶pF/øq6§ÿãºü_zÆz§® ÷=ÝÌ嶾àÏ;\„5CæŒûã¨ëð»+ß}QgtéK'ó½ré-v¹´œ9³\t¬æŒîÜÍ·_\1£¯H_úê*÷î˜ÓÛ!W²a톮{÷‚ »±^ìàÙß²AœîÜ3ï½àÍÔøq±—szèN¯w²y[ÖqzàMß½gU¹°Û΄ÕY]u]9±»¦ëÝ®÷«v÷è•ÛÃÌ®yuè8¿=zÞéïE_}ï=aÇi'›eÓëü8ém9(týð È¦:7î}lGõ^˲æ¹ü-ȧzŽ.6ÞÔ•!‡çýªð½ä®î|ØSïeC 3l…ç½ÐóaÑ›îz®û÷s»§ûMÝõÜùîçe72mÞÙRÎê~K·ýû¥yß/‹ŽUòã|>Ï9×óKpa•'|w0f¼_U¾rK÷=ùܯoëlÔqÓ­¿åNzV…ëÙtìÜï¨çw?søìÛïï&q.kæaâýlœ×ï9óøÐpS‡?Îùq`΀3ãܙȃ¥ç½ðÇ==Áó^äØž5ŸŽYýÅ}ï/®ï/¯Ïq÷})½qo̯½2¿ö*Y6ñ¹‡ÝsmìbÃœþ£ë³è}‡®ÿóšüŸ‰¦Ï1Çæ¹ôº¾cï>o³ù¼i¹ófèugú’ÝÒÅç®wtv²áEŽ2l-ñÈq_°ÞéuoùŒÞ -½é¶o‡ž9°aÓœ>’^6¹£_\hŽ ;÷&\ì[ÝlÚ›>N³úøwô±ñã®<›.ÿŽ{ú5{ÓoB‹÷±]“3ã»÷kٹˬ.Ý-®å·¹Sõ6zäðÜç~'¹ûäww&ì„šŽ<›w«Ú¬~¯Ý-÷äÈyºûÞë¹GñÆ5xßMÇ!}G>]x3äÏHoËó3÷íM{÷Wù¾zî»waɽIÏj™Q'sffŒØ÷àcw:ù3~[ÿb>Ÿã|>æ;ù°Ê{ŸXõÄ©ß}Awî!Ó¶”˜°‹Ê„mèd ½éK‘83­˜MG†MókA×[YÓ9£[gº3ft\ôÈ­…<›äÒá“[‹Þ÷èË3z;õ¦û]»÷0£oøž·tûý'&,XïàË„î–bÿÞáM}ë·æÓwÊ»zÑǶ³S2g¶ý†N-GŸË®3ßË|zÃî=°fv}NïIK¯àÇ©¦k¿jGÞL=›¾zÙ¬_Õ|ïý¤ãå>þИïØŹžù=ýÈæõcéoöøø(æÓ… M×íO'wæTØqñÈ NEß«|:öï§Ì¦3˦Ýlv??ev-jù™u«’9c/ô¶Ø¬~!ûwv·H>=³ãb>½âÂ^ÚzNÞû¨ÐtéMÏÏrȦ_Ž¯B~­Ö›¯Üµkúü8›Í©áײ{öÆ}î7:£ßÜå|úÝM޹ߔLXgÎL’¶Oœ53ñ|ò»Oآg•Y6õÇÉŒþ¨Þ8Óó©è9:V}>w=‚žÛ }Z›Ñ]Ëã=]y°êw‘›úsÐó”E7MaF¬÷·0§Ã73¿ÜL{[4—þŽ¾UÑö÷wç΀÷þÿˆž‡¾tt²7Y3èM÷L[ÉŽ‹yõÒÇŽU½§«ç}Ù‡|:t½UfÙVl羜ïçìL—îtÞÕÁ…LX¿«¯XǪÞ×MßÛUßj;Ìçü½æšÞÖ9½;z‘gkoÐ÷NÎÌæF̲mú |wdÔ;›aF‡÷Ýõ|Ógõ-™Ïù¶]Óe¿³Õ0£S×]ß»ÛÎxwŸ\¾£ï⦎z‘cëî÷sõ»³cu÷ó=™Ï‘QÇ=}~÷}÷½ÚÞ×ù\ú[ò=ÝyO뾽/³:YïšM?Œ6rãô«;÷¢—í({ãÒcßêIáyw¾ ºVgf€\ºzÞm÷.¹túãþ¿îÎn+‘l Âïÿ2-b‹?4‚¨ˆ ˆ ¨´ˆ3¯1Ǫ¹ ïÎŒkõÅ^…=s+3#¾`תçÔK.,{[Æ̧cç>=‡W®ÔòIâÁN¬7=òÞeVŸ"Ã6Íòl³ÐÇMÿÚ÷n,Ø{ɤCÇɃÕîåÇež÷…ÞÔÓÞ})3:guíaË:[ȃ•[z©ñ¼£+÷=v²­Øã’vð>£?Y‡úÊïø¾„=|É|qÞ;üq/¯ÞßîéôËeš¾æïµô°‰ž¯]×kË:Îçþ÷ôi»ïÞßeÿÎÎôpã ãó»o¼cwtt§¿‡ÞtÌå[ßµ‹G.÷½~Ü4ŸÇY=õ±íežwøÝk’M/wîaNæÌÎ {Ù’OÎ ²éMxäšâ“;ˆ³:ŸxÝ‘gkéŒrê—˺\À‰Ûé{‡®ÿŒÜéVuß;nêmÓtíPÏúØøŽ™c;iGgsémsÆ{ÔOãMz~êz^>»§§¿±o?åî½Ã›ùãìŽþ«ãzÞÑY½›ñ亿ÂM=t§cV×üZqSﺞç½éäÈI[dÍôÊ,ØqÊ…\€×~÷ eÌØmÙµ|÷>Ø‘aÃÞݱחȢk‹ïÛé}¦ßÃÊî=ïdÆ6e½ý-ܹÎè#Ï´E]W&¬ü.™rʃ¼wzÝe÷ÞÌXöíÔuö¶L\ÛEË•9ãý-3jzÈ°íȨWxïsɨ¿»îÞÑÛr/Y6×õùBzÓç‹èy_ˆß]4}Á{ºÝÐÍ· /N»Vcoú#™°Ì³…»ºv¦ g&åמ\ÓŸ£×}<ï~S§7Nçôl>/ß ¹5}ïk~3M—;:öîœÕ™I-/fõñg6ªåoÔñJ×*²lšI‡ÆK§*séï®éåGîcvîAÏÅ'÷7üïYÛwëïÿWËmV¯ù¬î,XdÔÁs]¯}jwE×÷5“^—ÛºæÓrK¯ó~Ž=ï Ϧ3ÇÖ`F=iy“û÷–íàã|ÞòÙ<ô«f¬÷Ÿ6«g9¶ÃÒ'¹6zÝ{$>9ðÞÁœ9²{èZe6=i<¸îíÙôc°gè“‹éÌ´INó:vðåíüL˜ïºw&¬ÏéÖÅÖùbÿÞÍýq¹çý—³ã„/Ÿ\»÷Þçÿ#z~žïìj9ïÓ'çÜ™>9ïÐñ>Øqý̧LXÌ綿¼ðÙ\Y<Ÿ=ÇŒsêȦǽ{¼¡_Ã#7Œ ¹è{¿¦ÿÝõ<ùÝÉy—\zšË“GîFºÓoEÛGáŽ>¢Ïý–ܸIÐõÉíÄ2ê“0§—»xìÜ'¾wOy¶i…!ÞLî• žwjø”ì¸û<£ÎÛüŸY©ësϦßçš.êìl™'ýž v¾ GÎýqÉ;·„gné\ØåBÙ°ÞÇæ{xÌëKË£/1Ãlú£Ìè+˲™žËþÚn{÷•t¶<¯$Óöâ·tÜÎÉyÏyïÚÍ:[^bžMy°¯ëÊþ·ôpG™3¿Gº^íN+³éàÌlÞ£®Ó:Ô-߆ú»t²eœw²`ƒ¶ÿåÙt»©ÿý‡éyùj?èw÷[ú§–ïíïȧ»Ï½Æ»îॻE÷î²k/ïºsÙtõ½+ë½ûZ˜Qo\ʦ·Ìûî{øÖa֛ήռ»¥å96ô¶d6ìàÁŸÑ]{û§ÜÒÛÕ—¢·%éûqè\M½éÞÃæ»÷òãNøµ.6ö¨ ï=äÓqO?ï{¶{gNÝné¿\Ó£ž[.½Û©ÌçÝ®øäÎUבMï -çÝù°þ²Þ™Õ9Ö{zÞM¶¬›MûVqK¿°l:òèƒKáÍ rÜ•ÏëÖŸîý-ÒÉ&<9ÌéW²w¿Ö;ú0ÞÑ‘K|w°fF̦Øßr½rÔñ‘gØFcɨ˼®Y¶bÿ>q~œïÜ5›þoƺӧÐwñ¸ëÌžw²å ¹©w¶¸OwtŸÕçìq™{žMx°i×..ò}XˆONXï>§ûŒ^xåJ¾ŒÍîË/™°ôÆáž¾Ü5«ë]ºUÉy×ýɲkdÌxoúJæô•°fàuÿ’=ïÈ°és ¥–Ë]ý·°gC.êzòÊÅν§¿½UslïÒ™õÜ9r[›ÏÓÌ®ÝlY×ê‡sg´M|rîûóæs¼ðºÛî=ôµÈoÎèµ}ú߽ǥNMO:ßH»vÛ½'ß{#ëL¯Ë=½É½;n龋?ð—gK»ø–xßÑ•ž|r‡Éwàó9ôœ96ü–\ºsä<Ÿî>¹#×òìŽ^æÓqG?j‡L:fôÀ‡m·³\zõž¾³;=˳•3»íÛOЩšûäÎð»ã3:ºV‘K/<ïzO‡O.xÝ;Ôsgƹ7ε\|ïÊëöLÃK®wÞ£¦ƒ;ÃŽU0gú¸¯ƒ'×·½{Ïïçà΄|úÀµ}ÝÕ/õ~>›º}+ýªêÓn¶+v³©7.i¼0ä$—žgÙpGj¿j¦ë#õÈel·ìn¹a6}”é¸÷³¹7Ž¿'²{6 ¹»±ð`ï¤m"«SæÔ]×EÏqKϺ[´_5dÓï;ÞU™Ï=dž,›ÌèäÎÄ;zðÈ¡3ß%µ}ùwî1—n]«Ö¹ŠY=¿©“3óä9õb^_=ºžÃëÎo`Èy6Ýß³Ïé•ŽÕ”E/µ]ï鸩ƒ3ó*³¹pa±g— ôÜX°Êƒ-û[˜iSÏ»ñÞíž^pÞƒ¼q¢çèN—ÎUô¶¤|ú–ì™è•û0¯Ü3êä»[‹îß·d½+oæÏÔóÚvï{Îy7ï»úâÒÌî¼™]Þ÷Ò뾯ùµýxO7]÷ôzyK'oFô«ÞÁæ³zSØqÍ\Ë[ñïpC×.uÌçÂ…õΖôЗ~È,ºz䎢ï½-_fÙLǹwÏîéí˜M?‘{zúžÄ»ú©jy¼©ÇÞdÓO?Îß)9ïzOOóùoégdÇá¦Þ sºóã´/½ËLº{ã"–Y¶ós¹£G\ÿ¼Ç};{V{ýÌó.3ºðÝË<<ï}çÍ\ˆ?npqi7ôxäò{ºx殲 ›ùã.¯Å'weÙDӇʚ š.ý«77ÞÏ&Z~C&,tùôÛŒ5ã9¶â;FËؽqÜ¿›/n|+¾8ðÝǘÓÇ’IwÖ ½îSín;n2ê±cuf¬ØYìk±îÝï½Ãe¶#ˆÞe»—¶‡{ë\•n6ô«ÎŸ»\¬[µšcs-_pϾpï{`ÃfŒwéY}Êüqå¬þøÄÝ{ÐsìÜWž]s_ÜŠuv­Ì8pgÔ÷þœæôçWϲ½”ºý"ì8aά½“-q䲌ºæטKóüÚoÜÐÕ#'žwÌíémɘ°šK/5=cÃn9Ÿoŧ¶ɧ«WNºÓí÷wkï¿÷jœÓÁ{Çï}Ë°ÕjÎŒÓ\z‘_«ë]_¾{G>½Ñð—0§×­·ÅýîÔø¦ö¥7ÜÇ^¶&slMrfÀ†Í}q-ö²ù-½Å [d¾;k&t¬â…[º{ä¼kUîçÊ{?öï±j:}röo'mÏ©ÿûiɇM»ö¹¥ûl~WôÜ5Œt¦Ÿ¹7.ÌêE~Ívìr.ï„þôÔǦý-ç%Öµ]öîäÆÅ/nì˜ÏóåÌô2Mïg3ºîÞ/”ßo¤Ù½!ÚNlC:\rîLèNM?ˆ}lÎŽkZ–íÀ™°äÃòž~@†œ²Þc¿j±ƒœ™Ø›Ž\ؽýŒ¬Û»ûœîÚ~|„½»÷¬¢;½]úäà—sî fôãS÷È9sz’úZÜ÷ŽžôSáÆYwK¦ëžeÃ-ýŒÜ8øÝqOïp6ïØóîtøãtNÿe 9ÜÒ»ô»§·³7½ï{÷~Ø¿Ÿ&¬ïÞóŒz¦çEoºi¶ÞÒ‹ùü‚yôoéèdC>ýêݪ2§_f/ÜÒ½3}È}{ܽÁ‡…–ƒ÷~“yã‚®êõÐûØnÈ…½Ù±ùÞ]÷ïc÷Êé-}RÌï˜×'Þdž½ûÎèwèf»ã7°Þ?ÿûtª¬weÇU™°ôÅ™¾Óë>ܸtK·ýû z~½ïÙÌN-™ô¹íÚ#ïþwh9t})szègm'gf÷îìnÉ=r–i[=ºŽkǪv²íâÂîʦoÞ¸Äzö[ú«èü:óɉ?Ny°]¯äÒÁ„]KŽ »wÑrÛ½ó~nšþnü¸·÷ çó :Ù”7æ̶ʑ+»UßýžþAÖÌöSÇ-›þ±ýÇ™°é®þÝšû¯kú×tdÙjoF3mÐsÜÒëµÌó®š^ß‘ikh'6ÑóÑõòzoKñû°%ü¸ÖaÔura=¿oœêºë»éøÏbÿé¹5fÑÄ#³lyßjò¿Ÿ„f׎«¹tÜÑ1‡Ý»ÞÔÏÌ#Wh¸pg¸wW&lÇy°šac†|XäÕ:]2gr]?ÏöðÌ¥Ëþ³¹w±%m/vîèma‡‹yäzÎœñ¶‹¤ï¶{ïk›raó.6Ý·\Û¯ìyŽÍr`¼óž-ÏØ°¹çýj¸£Ã>weÃÞH/zÓ‡q^±‡-=ÕóÛ[Ϧò{ºê;:\*Y¶ 5½ÚŦ½é¢é!Ãvt}:UßûÌoë˜×#vîè\ \Øûä{goúœßB×0¯?¸ïÜ÷ÐÙB~\µ·szòÅ=˜'Îguõ¾ƒ »d&=÷Æ!“î3úçóØßBF¬høÓ³æÒ… [fÒWÞÝò,¹tãÇ=Wx°Úµúê6äÖ0«‡§¬dÕ÷fôÔߢ¾÷· öî÷ÇñŽþÆßå^²lð½o³Y}+÷tçǽ»/.dÙ„õþWº¥£/ý»õö?}²sG×ê~ȧÃçœ÷šÌéeŸzȦ㖾ôÜ™3ÕnÕ}qqV/µœþ8õ¼gÞ¸–±äl÷îÝ-“N6ÞÔuï³yÒõ£ ï¥çÝéšM?ª0gÚ=oG¯;÷ìÂ’;i k&Ë° kÆrk‘ó~RñÆ9Öyï˦wÎ2\9£Ÿ‘çY¶¬cµÛ ]ldÇ Û=§ž»¾Ëœ~÷î=ñÈ!—®sºóÝ¥3]˜°~Kw]\ÄîõÇ]€ ›yâ0³ --è|>ØÑɦ{÷Lϯ”ùžùއ΂½¡Ž»ïÝçôaœÕGÙM=ô°i‹ïÝS_:né#îáÇdÂfùtñÅíô»KŽÍ3êSëV½£?Žý-È´Mï¤Í5Ý»VïÉ‘›¡³%ô¶˜Ç}fœwaÍÜ—,XaÏ?ª*#3²núýö;í~†þ‘WÝØý?®ÈŒ¡\.—+7ßåø–¿+•ÊéMƒïJ5Mµ’¦R­žÞÓ„¿ÝV¾oÃïêíé½oõ6½µð·Û05}kµÓ„ßá­ÝÆßõÛúw=ü®§·^;½§ïšL=Nã»qšzãôÝhÄ ¿ïÂßOßwá÷éß»ïÆ]ø}¿Ã{~7Os~7¿›Íð·ð6¿ïîïâ4ïÓï4÷ß÷§ß÷áûþô~7N»÷ópÿýððpšÓ{ÞVœÖéo­Öém¥÷!~‡¿·O¯L»ýÝn‡·uz[黓þÖî¤é´;§÷4ÝôÝév¾»§ßNúît»§ïn|»á»ÛûîöÒw˜^˜ð»×;}‡yL~?ž¦÷˜ÞÓ<ÆïÇïÇ8ýï~xûaúò>žþÖO38Íéïƒ8}Ã߃Á÷0Lø=åwøÄßá{8L> ¾ŸN 3|:½OOq†ò†yŽóߧçgù>Íè4á÷h$oúÞQ|O3¦÷4ãÑøôŽ¿Ç…™|ON3žŒ¿'“Iœñ$ým2 ¿§ñoÓÓçô·éôô·—Ó÷i^¦/ß/ñ•ï8§ïÙË÷ìïìôÎô{vúNïKúžÍÓÌçßóùì4ó4¯óï×ùk|Ó÷ܾ__ã,»8½a^ið{¾Ã,ã,Ä¿f¹\ê¼…÷çíû-¼«·Óœþýô{ÿ¶ŠošÓ÷ -sú½Z¯Ö§ïõ:Î:¼«Í÷j³úÞÈï0›õæôn¾7›0ëïíiÒ÷i¶›ÓïÓÈ»ÛlOïö{·µÙnwqÂ÷>|ïNß;¼ûïýi»ÛË÷~ßýé÷{øÛþý{ÿ¾§y?ýý4ï6‡÷Ã÷ûáð}8Ø«sLstsü>dŽßÇô~ÄïÓ{úýß4Ÿ2ŸŸq>?Nó™&þþüúþÒ7ÍçÏï¯0_é÷ð~ý8½?N?ýþñ#ÎÏð~ýüþñ3üïÏô·¿OïO?ÿüûûï¿Óûóïð&|ÿŸÓ\\\üÛÌåÅeú¾¼<}§ßq.OßáoaJ2—¥ïR˜Ów©¾¯¾/¯JßW%šÓïRüÛÕéû*þïuø¾ïõ÷õõõ÷MøÛ齊ߧ¿Ý¤¿Ç÷ææûæôÞ¸7Mù¦lsÂü-à¸ây9ax¹¿+‚ëiª Ó#¶ L¯â;`y5bwÀô€ïµÛ„éö&7áùâ„å§_¶Ï„éø^ -¾ ®/Ó»Œ˜¾ˆ¿X¾%l¾vÇ7aùò„ÝŠé«·ôÞ–¯ã»Vl_ãøíñ=üØp|ð[q=MÀî„éÛˆçñ;b8Þ€ÛÀômüÞ)žìÞFüžÇoÁõˆã{Áð€ß;àøþ„ßÀqÂõÃ{ÄòøwÁòcÄ÷c|G`ûñûð‘ހ뇀ã‡Ãsy–*¦‡ïOüíxþ1üS –×#†Æ xLÿúA˜þþó+bùOàùÏ„ï?ãÏœpü§LÀðŸ Óíÿçß ÏÏá;æx~ÂpÆóð]¶Ÿ0ýJð=`{Äyàyü¾Êð<üØ}ú¾¹R ¿¹¾±ï€Ý×ö^Ÿðú&bøéoåÓߎ—ÇåwYF1½œðÜøzÕázÀòÈ×®ËÜÒp½Vn.˜^³·.<ý¶N˜^Ox^ ]˜߀ßÀtáæà뉣7ož§ñ˜q\pýNðWx>L¿‡ÀñpsðôaÆÑŸÁÓ󉣇ïaùsÁðçf?;Žžð|<)GŸ?O&Šåãñ4ñsðôð÷éÄ8úÔÏdš¸yøVž¹{ÂðôNO˜m<]¹ùKâæs`{äé§oáè¾.\=òôv®¾ì~UüNïR¹zâèàë ðóÅ[âèÂÕ_O˜xzzÁÉí x1=òvâë»…¯¯ž¯#7_G<_'l_¯•«o¶ÆÕ†o–ã÷Vø¹ñôázðòøyœ=½Â×ß÷ Ó…ŸïמŸxzâ꧿O¿ïž§Ž Ç Ï?"?¾æ#ÍGø7àú§àùçQñ<âxàìàè_ÂÏ?ã1ýKðüóGz¤Qžþ#qu~†'ßãÿÎÿ-<]0žðüߟŽó0–î~qÂíË8Ì×éW'LO~©xžæ*áyéÚ0=òráéàê×àìô­Ø¾~Âï€ù¿oß=–'<¯Èî=ayYp=LU±Ü¸zEp½Ž^¹ø~+x~{+{øˆå†ëqï®~›öí5ìâkع¦ƒ£Ëw£V—½{âé×럃«ßElü¼aü¼!;÷¦àzSpý<]8{äãqž‡]|Âô¦ãèà Ǖ§·„£??œO;÷„å‘£·ZÙþ=ìÝ[qâÞ=ìÜãÞ]0=NW°½öîŠé]åèØÁ§½{Ïæ±q» ÷Q¹:0Ýð½/¸þ˜íÛ¦÷ñƒAš!¸ºìÛמçáoO ׇCÃògÁö§¡ðóðFŽþ”FwïO×GÂÛÁÏã~l<ýyL¼<Û½O×Ówâè<ÓˆécpóÈ×eN}2M£Xøú‹íß–¿Ø¾]vîáwà牫¿DüNøžp|&<}ö: —ý{§'  9;vï¯ Ë‰¯/_ž/ìwxߺ‡œ\F1ðÜ{÷7ÁöuÜ·ž+_Ï9ú*ý^oV†éÀrpvpô­íß7‘¯ïÒî}ƒ½;vðàçÀtìØeÏŽ|ÀïÝÞã¹`yÚ¹ï3\?D\x.s8¼Ÿß½†'žnxþA»wÃöÏÓ›xú1âxÚ·DnŽß_ÊÏ?¿„« /wûöˆç?h¾"Wÿ!\ý§ÎWÄq7àêÿTžðýé¿[ß\F쎻våèø.¹ý{Äwà7øy©¸{¿LO¿ž¹ºàú•`8Ï azÂór|¦ß¦—yÿ^N\½ìð]p»,;÷ð»*ßU¾©Ÿ0]8yÂñŠ}Óþ=|Wké¦^ÃM=qv¿wg~žnêißNøxz;wã뺃?wG/vîö}qœnèÛïyÿîyzó¡)\=ÜÕé†~o¸n»wÜÕßOXþ xn<]ö︥ƒ³\cL×Wîè3ÃwåèÊÍçE®þ:<8Ž[úÜãúÂnë âêŒå|O{õÝÓ—²kO|]öîØÿ½ùÝ»Ãrú^c÷nXné‘£oülÖÀöµ¿©c÷NwõÈÑ7;Ás¹›ÇÝû.òô¸ø¾÷ؾ?ß½;LßÉý|¿7~Îý Ø®ø®Xž¾#?Ý|àŽç ;wÃ÷¹©?y÷L?a68û—ìÜ¿Ï™§ë¾=`÷gٽ㖞ö§×vî?²[ºÜÓÃïÿóïçÅ[:Ïéï%ÁóK›‹ËKÙ»—lï^º’Wnè‚éàéWn®Ó\Ëí7ßWoÜÑËtG÷÷ôàùMÒÆEžŽ^©¶—Ý=½*·ôJá†N·tzËE5qø–{:7ô€ãàëvGÏ0½!˜^¯Ë ½A¸ž0Ý8úé»É÷tàx#íáã÷Û½'LŽ}œðõfܵ7¿‚VŽñ\nézG¿o¹»:ôqmìß[¬‹kéî¿—Ë-]0<êä:Äϱ‹ø-ûwÑÇõdÿŽéÉM=â80½‡zOöð‚éý´wwº¸ Ï/OXoú¸ˆã}ðôa|ç´qàê‚éñ[p|(;wìÛŸÛ ËŸŸFéÿè-}$;x¹£Ÿþ>~ÇI˜>Öýûx.<}$7ôÑ„÷ðI7 žC7™*oŸ¸¼ÜÌqWOŸ1–gœ]tqóYñŽq|n>×Ý;tr¯9ž¿òm=a9ôrŠçîv¾Ôï¥Óɽ¥»ºêã0ËïÕr¥<=íÜŽ¯ß<¦ëÎvðŠç²kÚ8‡çùM8ûf[¼§gwôÝv¯Ø¾çýûNöî»=½ïªcMÜx®;È=]0^nëÅÝ;cûñôcÒÅñÞýøQ¼£Gç{úׇêã¾> ×#Gÿ”ûyÄñÏtG—ß?„§ÿ ßÀò€ëÐÌýü!»ø¿•›+®ÿ~ÿn\ý­sù—~³>®Dú¸¸w/•”§c÷®÷ó’à;kãJ²w/…={Iq=íݯ Ó¯¯ÎðsáìNgoÂsáìÂÍ‹{x»©Wʽ©—ißî4ïÊÏíŽñ\õüü¶æôq·ÂÓkÂÑkŽ›{žÞ Í{Žåø­®z9ÁsÜÔƒ&Nqݸ:trMÒÈÝC#÷{ڽߋ=|ëA9:tr­VKõïmº§G~ÞJ{÷6x:4r¾§·U#p¼M¸Þë?ïtM+מ®Ý;öï]ÁsÅrèÞ{‰§÷{ŠéaŠëÒÈ Ü-}ÀÚ8ðuà¹a:vîO|GW¾þ\à謋øý$wtåèÂÓ#ž“>N5撚›ŒÆ¤‰³=|½¥Ë}lxo蓇鸧O¡‡.Ž÷ôø:Ž>'½»pvwC7l?Ÿ¿¾ÆYÄ}ûyL_Äoæç‚ë|KWÎp|A=éâ"G_ Ž¿Ç™£û½»ãê|C_ÑíXNº÷°wßFœß:Ý{àæÐÈm2<ßÊ΃=|º£ï2žŽ[ú»jã w·ý;öìÌÕ ×r[?ÈwܹLÇ =|¦óþý»÷O`¹áúç‡×½‡ï¯/ÖÈùúìâÐ.^0ýëçWÂð?Ëýîýoãꢋ ïoÇÔß<—ñ½Ô{ºîÜ#7/8»çë—ªy·½{Äsݽ_éÞÝñôÒ5quÑÆÏO\=ðõëkÑÄÅ×ô ¿ž OW®9:ëä*zc÷zwÑÈÝfú¸ÛªÝÔ«‚ëÀøxWWL¯Ù4ruãèvK¯¹[z­Q+xÙÛñ½û]º«7Ä·\‡ wô;pó&ûØà[k*–›æ=iç’>îÁ6Ãsõ²µ»ÑÛ–|lâeïÀËÖ¥}»¼Ýëã }7žÞ—Ý{/»©ûÝ{Ò¼? ÓáiK·ô´‡·ý{Ú½ËyŽþD>¶aº¡C÷Â^öîcÁsû=N¿#77ž>žŒôŽ>V ÷z÷É„ïèSÏÑqCŸf<=Ãô¨y<qÞµ™häænÿþJ¿M'»÷9îçžë›ð<Çtåå‹…iÞmAwô•ÝÒEg<ý´ràä¢}g}Üjí±£z÷µéÞ·‚ëØ·o¶¤‰ÛOß™F.qôÄÏûßmÓ÷äcóÚ8ÚÁL7ß žï펞0Üpýýx4½ûA´îŠçú&7Û‡îß…ŸÓÞ=iã°·ºéÝ?ÝþÝöð?ÔËöƒ¸ºqòŸºƒÿùãï´{oàêvWÿÝxú7|G‡.®$š¹R³ë>þ†V®D˜~íîèWÂÑõ÷Mxo²{úêãŠ<ý:ñtÕ¾Ûî½"wô2íßõ–®7upó„åàéÅtðõ[ÃóÛäM¯Ê-½¦~6Û·'¼êuÙÁç»whßI''/c¹ùÑmïÞ`[C´q ãꦋà ¿IwðÉ—þ º÷‡puGû÷û–ãéØ»?½{¦“K/šwÖ¿;<ï8žÞæ{zA÷Þ‹ß=º§«‡¸zäãÀwá瘨ë‘Ííßû†ñ?¹§Ç›zð¥Ã¿}ÜÀ4rñ¤'ž.·twO§;ú3ùÓÙDZüÉ8º¼£vñÀuó²Fcò£Ÿ°|4!íûØyÓ'¤yŸÂËFû÷¤?aõé}™¼xÛÔ¸ùtFxþÂÞôÕ»3G‡?ýuf}¦ü|®˜>,O¶…ÝÔáa‹Z¹¥Ó¿/àI×ï·„óo õ±©Öûwñ¥Û¬Ô—°}­z÷µâûz÷„Ù+Ù¿ÓM}CÚ÷u¶wßlp;ß&}Üvgû÷Ý–ül¸£®+?ß{Lß±6nïülvK|?ìíž~0\?Fþ~\?ê(_Ï´î<êG×Ý;ûÓ?ÕŸn~¶Oó³éÞ=ñòOáçÀð/ÑÇé-=jâ¾ü-]ül?~þ¤›úߪuÿýøù1‰¶ý¯Ë„ç Ó/?¿H{ö ÂrÛµ_ê÷•¾²sgozÉ4ï|Wgí{Âò+ò³–3_Wmð\¼lIã.#Ú¸2ÝÐËäI¸.<=¼·ÓoFþôêímQóOºìÞëŒñ¸§sÖLÍð<òsxÚXsg ×ïàikæþôÌϦ|ýŽ´q†ë§?¨ö|鲿gL×z+êß>Ž½l-ö°ÉžvîÊÓãÛ!»iÝqG˜.ûöôöì´oÇ †Ž§³/ïèOz_7OzäéÀq½¡cï.z¹ñ3áù³â¸bzÜ¿›7žtåêÐÇ1_žOÛ ßÓ3oúŒùùŒµr3õ©Ý{ô¦‹m?ý~Õì™×ˆé¯Ø¿3W5]œi墑3úR¾‘3ÿ¦7uò±½ÁËæuq³¯°—Y½Ù½³>NfÍ÷íäc¾¾Î?2só¯„é__êis;wò³!o&íÝ…Ÿ«þ]üèš#'Z÷Ÿ~ÿáççÆgÇ]4ïÉÇv!zwìÞSÞ ôqÎÇV¢{zÉ8úµfÏ\;/ÛÕiãnÜ+<½,^¶ҹߤü¸ÊMÙn镲åÌÀÇæ2äªÑÓ¦rÕ*åÍÜjÖ ´qȈÍur¸¡›';xÂq͇¥!\wØžiäÀÑ“­)Y3²s‡‡Mur”5sGü\næ– {Âî&ÝÓ›²¿ÎnXÞrZw»§G[Ü»?ÄÌ—'»wË‘óú¸6x:ïÞ»¦•ëêî½g;xÖÈõŒ§ó=½Ûï)¦‡oxÒ‘ÛϵïïS\}hÚwÕÆÁÏÆ7õ¡Ï™1´ï|S· ¹”3óD˜þ$¸ÍÚwÛ·Ï“î}”ùÒ9GnBû÷‰ãí‡ç>w&øØ&/“‚6nJ¹é,ó§«wuï3‡ë¦{Ÿ©þ=íÚ³›ºhåWOؾ\82äÞvG_,}†\ÂtŸ!çfµÒ½;2gVrO_ W7oúJõîkÑÄsayà_#Ÿú†vï[Óéî}[ܽï2Í;°]1¹°ñ=(¦s–œúÓ%{&åÍÕ—ž~à½{–3ƒßÙÎ]wï’5ƒÛú×™Ý;ôîþ†þ¥;÷"®³—í‡ìÛ)Vvð¿;ÿ!»v`ùåÁæÙ°ÀôL'ç²ãTã^¢oÎ’cœdª..`ùyÓM—g¦¿UÈ£.~ô²å–Ó]ÞLØ^¥›ú­zÓÓÝœ´qÓkßÕÚ­úØâÔí»žåÈqÞ»ó² ?O~6dÊÉ=½Nþ5õ¦Ó¾½!Ú8wK¿;ñò\÷n3Ig߶s7Lo)¦ßKÆŒéãZ~çî¦ÍÜ<}wÚпw,V5s Û»¦›>.áyð°õÓ{]º¥K¶œËš‰7t¹©÷I‡ü¸øm:9ãè}ÚÁôžîö]»îÛuמyÔ‡” +Y3O2Ï™7ùqÌË¡y‹6.êÞ%v<2m\ÚÅÃÇgvァO'S‡é/š?ó¢¾ô€ë3ä¾k†œŒú×^×s®žg¾ÎÃÞrf¼'}ž2ÞÝÞ=aùR8ú+iã¬[,Ëãâe{{#oúåÇf)oŽåÈšY§;ú -Ù2¹—mÍ}“ñtÛ¿s6ì&÷°©>nKÞôjàw´{ßïÉǶÃý|¯ù2zSw{vÉ› z¹xWGÎû»e¾‘{T®î²ã\lò³Å9“‹{ºñthÜÕÓöK}Ü—ðó/Âtà»à9nèÂÓ;vþƒÎåEæe/ºrõ€Û”§/vñ™ö]yzÉßÒ¯ÁÓ¯-KØ\¿±<ßÑÙ˦ßâc‹Z¹Šiä4ûw§{¯è½Â»÷,9Û¿[‡ 2aoç·tC¯ßf>õbÆL½Žغ~ã–^§›:ëäÓEûÞhZÖŒíá7Ï´ïœ {fŒ§ÓM|lñŽ\wÝ-rOo·Ü-=rv—óŽîìàÅŸN·ôNæK˜ÞëøÜò¯±ÞÝÊ4r¸§?Ëý|<5­œiâø¦>1ÍûZwž™zÓõ¶>£[:çÎd:9`úëÌëäL'œ\}1×Ü8ípQ]ý^.厾Pºjæô–î±<å¼sÖ íß×ß¼?]ô¯H§Þô|߾޺ܸdÌlv–»‰8í»ñó-{ضvW‡Íõ¸¼ïHg˜ž÷·¨>ÎùÓ-7¹ï®¯åhÜüããôoù¦ ûö㧿£+žh¬%ß]0þquË… þ5»£§ì8¯ƒíwãæ?öüqÝöí™/óÞ…›«VîŠò`#¦çþ5æ襴oGîLìlIØî|éê_#Ý;eÂr.¬e¿WâèÎ]öîÀõªîÝ ß«UãèäaÓ.¶[ÛÁתµ˜ù®z÷[Ÿ§Ú¸š÷³Y'[#òtݹCï^¯néÉŸp¼®Yrw”—pkÚ=]ýèw™—òã2î„Ýœ kºwãçnïÞÍ2gÄÃÖw¹°}ßņïïné‡|ñ°õÑáBžt—;3$\W®î;ÙžTóþìù¹pvä¼s6lÚ¿ ãGÞ×6v>õ±rtíp™Œm×®»wº­O&š§Z9çQq7uýžO1[ÒÈIþ»Ãs»£'_Û«»«G\___ïêоGÇm}ix®¾ôsóf·tÑ¿Ž‡/]3gÛßH·†þ=.+󨧼Âõ yØÖ¢uWoúV3a7;dÂÏ-ç}«þµ­à¸íà•¯ÇÝ;îç{ÒÈí³>¶CôµÁ‹®\=zÛŽ¤—;oê'7ôƒÝÓÂÕ¡;BëÎ=.Èšùv“}鲃ÿ”6Õ¿k&lò¦›6NòaÿìÛÿ/&åÆýuIú¸K{qGÏsÞÍÃvi7õ¾£·åšy:ûÒ‘7CÚ8Î|G—‹ëc#}œ»¥Cç~ÚwìÝqW?MÙîàè•b'[šwÚ»KÛ-õ·|éÔËüéºk×N6Évg}œêÞ¤y÷z¹Ô¹jý-ñ¦Þ4×®Uñ­ÝI¶»ëW¥áÝ»îÝ9ïþ6îc;·{—Þ–‡6ëäÚÙþ½“iä:š «ûvz»ª—éuL÷Žì¸.õ¸<†{—¸ºa¹ÞÔ{¦‘Kº÷>iÞÙ‹ÞWÝ{ò®™/}H\}@}Hx>„.½l¸©? Ï9oFîê#ÒÉ •ƒ>nä1ºVÇoú˜rÞ½GÝ0=Ë‘ƒ>î…º[¸·eÊžô©eÉÍß³LØô¶¨6ÎgÈÍûl>§Ýû«íßGÝ<ééŽN9rÊÉ Ë)C÷tÛÁ/‰£¯L/·t×±úfšwó´e;÷ÕÆíÞ-vc½-.ßÝúZ8v{âí†ç–9ÃYïèlÙ9_ºdÏðþýÝÆóôCÖÅf™3GçSÇý ú8ïOg/iÞ?Í—žÆótçgs>6xØ>å~Κwô±‘æýóöÿ˜ùÏ0' ÿ‹;VsÍ»ç푧_]º};kÞ™›'í;xú5éãn´c•sä®Ù›~í¹z¹œá:tq7–5øn<¼Üc;ëÝ“æ½êîè·rW¯‰']{Ó5?î\Î;ßÒ9öô÷FzuÃqîX­«&Î4ïÆÓßMåç ò¦[תåšN™°ÖáÂl” {fïn;w{ÛQ‡¼™6½ìa“›z‹÷煉S_c¼ãäËÓ¾L7Žn>6Û¿ëž;[ð;ÓÇ Üþ} :¹Á°_Ø»2­{Ä÷'¯}G~œjã†O¦{6Îþü4òþôa:iäžží†y¼uªŽ–C÷>M;ø)çÎŒ#–§~U¹ŸË-ý·uÕÈMÏdÎXç¾Ìg_zøý*š÷×Ùk–''·uhå¸ ïš÷0üÕ¸úb©;xæéé÷›ÓÆG·w‰Œ™7ãêaÖÏÉŸ^Èz_™>Ž2ß·kʆ]“Þ93ël±¬÷­÷§G\ß+¶ïÏÌŽýé邏þ}p˜~ ×ÝÓ߳ݻìã?–ÁË‘›iäH÷î}éy¿ªu³EìþüA¶¬Ç¹°¤{óû±ò.×Ã{™¾KèsÉóã€íº‡¿J½lΧnXι3×%êXu¹ù}£÷tÍz¿¾)îßË ×ÓŽ³gÊš5SÖûy–;£~6Ãó&}:Óy"v3gwy3¸ƒŸžg÷ô¤{Ÿ;Ž>iŸËœöïèpq|6ò³-_S›bù+tq¢yí{ìfC›ìÝ]–néàç«®,ú¸îM¯6®\u¼{ÙO¿uùqª{?“ó^­¥¾U΃µ¼wË|G?ŸóÞ =5í»fͼ(/ŸÂǦ9Ÿõžrf¦–«½éÈx\].ÃôOׯª7ôOçöm;ø¯lßþõ‡Ÿÿ§1«Gý"ÓÈ•²ÞôÜÃvy¥Þtëd»>›§¹°ºƒ¿1<¿¾¾.—^¶²Ëš1½{îcó¾tË+WË©»¥’íâ«ÆÕo3­œæÃf÷ô¨‰Ó̸[ÒÇ W¯C÷î;ÓõŽ®cÝ-uÚ½7hçÎ9èßYïžïÜóœ÷fÓº[€ãM—‡Ü™Õ¿‡×:\ω¯·¸c•³äŒ—ëxÞîd¸ÞÕ^Õ”gÝåÁº›ºéä9ë=çç=§{G·ªúØûÆ×i÷Ž¼ÕÆe~6ΈÊÞ=÷¥kw î麇÷½éOìa úwÍ’c/ÝÕGùîtìÞ'ð°É7kÞ§ìg~­û„²ÞqK‡6Np}6 Þ6ѹ¿˜6n–å½ç\=fÁJÇjèOWz¡—mnݪêMÏðœýéºw·¼fÈ¡3]´ïÊÕóì8íe [ç9r ×7)VóÝW§ß´s_çN6êoáÌ÷b[ÆÓƒ6n›°|+Ü|Ç>¶÷×Áͦ“NN³aí®ny3¯µkõÜñà²a²w?¨'Ýóõ¸ƒÿ<Š‡ra¿>²Ý;úÓmRÖÌâë?×ÁÑM÷û1òŸk.ÝoâèYÖ kã8ã5ïà莟_g:øÜ»†¼É„…þ=ÏzÏwï~ßžp<æÏ°ŸöîUÂqÖÅù¾Õ[×Ý¢9õ§SºÓóÌÊ‹é¿ÒÇ©&NzVë¾Ã…÷îwÜçrgwtô·è=2䔣Sތ׼?èþÝ:Ó©Wú8×Éæ}lÀtëOGÎ;{Ùàcc,Gßj'ÃõžÝÓ;”Ëû÷GïgÓ›zÁ¿öh93ð¢‹?÷ôã踟÷#7_–Ç¿,ûý Ùï¢3Ý»ùÒ‡ÏÔ­ª9ïÈ{ú=ñî=÷° O[Öû˜îé¦y·»ñôqêVÍ9úDz[hÿ®÷ó©a¸iÞ‹«zSgïÚËŒòÞyÏÎ8>·÷\Þ;u¦k'Û+ùØ^­?}I:9õ¦,_ÐÞrf–âI/d¼¿‘7ÝÝ×ù¦¾VžÎ\ÝvïÖǶ>áv˜ }ßúUiDÿnÞtëbÛB#Gùq;ÖÆ –G/›ËË8úþàrfœî=àûÑüèšB.¬v¨]wºõ°AûþI\3äcûb<¸ùW§óþýžÿçÒÞKÍ„½È´q%—;ãóÞÓ==ÞÔi÷^ -9°È…åÎín¹Î°ýÆûÒ±{¿.;<‡‡Í4q7¢‘CŽ\Eµqåx;/Kn\5îá«´w¯ÜÏoåï¦y¯rlMöðèJ'Í;÷§ϱwÇM½Ž;z£F˜n½é¾c•nèÚËFÜ]rbµgµiwõÂþýÞð¸ÎšwxÒqOo¡wõ„í÷„çyÆ{KõrÜÏæïè-ÇÙÍ¿†{z—o鯑ëQw:4ï]—7Cþô®d¼ÇLØžiå"~®«7{Ó©?9ré;ô¥ ï«wÍtïøýänèiçΚwÎy—;:iÞ-gFrgFÈŸ¡Ø|ÆŒëá·õ¶ÀŸ>OÛtâýk…®tÍ›˜Þòf˜§\Ÿò]Ýñó¤ã¬wìÛg‚ëóWê\¥~U§›/\6,p]ûØ´Ãeḹӿóþý͸ºæÍ,)ç¹°+ÒÀãn.6üÎófòžÕ iÞ×¢uߪæ»wŸ‡ÌwÅsxÓ³¼™æÇ…¿°<ëbƒÎ=ÞÑ£6nOª¶ç.¶£êäŽlw;wâæG½¡ãûô~¾«FîËpýã“°]¼l_¬{'½;|êŠéîçÿL¿ü+|“Æýx~¡Ýlع_zŽ~ ºæÇqv\ÂuÍzçœwÅóÔËvå²`¯I'=lš%WÖN¶rÙö𕛊òuÍš¡¼™j–§=«Ôßr{˹êÙ›úù;:õ§×MWŸzA§lð²YWz£aY﮳…tqÍÌ›Î9ä½ëxN7uÍy¿Ç¾=á8xºÝÓM#×~È4r‚ã-íVm‘Vμéºwg\G,íày÷n>¶Nâè]ÏÙ­_Õ2gz¾·ÅúUMïŽü¸øÚ„ëàèýìMÚ¸¾ó§#Gîi {÷eÂ2Wÿ•N{wÒ¾Hÿ^È„å¾ÕØÁæóf -^6ñ¦OÙÏ&\]ur»«O¸·Eïë’?33Ý»v·pÎ;:\²Ì™”›yÒù–>Go:úØ£œ÷Ü»¦\}žõ¬RËÂg‚ŸÛdüÙq|S§ 9ˆœêÝß²]ûõ·¬-kF²ß®‹—m“eÏ?çÜ÷×¼ï¶4¬“Ûyž¾Ëuq‰§‡¼÷wíP·Þô}¾ƒ÷wtÕ»‚éIGZwøØŽ9–“ÞýSñÝ2a?Ó¹?{wáìð²ýÈ8úïÆÄú¹ü+aøzVå»D}éÐËÉýòLϪv¬Š7˜~ ®^’Œwîc»ñºwÕºÓî½\f,¿q=«•Ì›^&Žžtqå˜;SÖŽÕJ1V¹z¥¸{¿MzwÓÈÝôquén©qîL®yo$\w™3œóîzÔMûÞT:õ«ª7=áúqs7àæÑ—Îõ¦ÞÒÙËvŸã:0œülmwOÏvíàé™N®ƒ<ëÞi\¯ªëm¡ý;:\ø–ÞÃîýÑüéÂÙ{îžþHzwËšé?"¼¼o¶çÀhÜ€ôîYF¬îáeçŽlXÍ”Ëvï²7Ž^Ì…EvÜh }ܨÀ×½îÝós»£Ë]} -­;ûÒÙÇ6õ8>)/ûøùKÑËuqzSO÷tó¨[Ïê«…œ÷¹ùÙÛ_)ã=õ²-•¯+¦/h﮹°Ô¾DϪíÜW¹..»¡'Žžøúf½2®ŽÞÉš1º`÷zKú8ÊÓýûF²Þ­;]óaw”·§|ØLGìžuqûÄÕ¹—ͲäÞ5çÝiÞ|??Zkä7óiûvó§£7ýË0ýÃ4rº/ô¸üЬ™?xþߟ¿Tó~©<ýâ’6Êz¿I÷ÞK½lÞÓ–x¹qõGêYµ 9O‡íÑôï|G×{ºùØØÃæ¾çÁòÁ“Ãqt¸®E9r-Íež®.àéí®ãë]t¹H>lÇu±ùÜÖ½?ºü£›GÞ»ã¦N™3ñ{Pô³¦'í{ÁŸ>´{z¼¥C#çvî^÷Ìú8õ§ç«Ï¦CÖÌóØaºqô±÷¦ŸxzÊž¡Ý;eÃjgúdêxú4ëny‘¼æÁN_b×êtæýl3¾¯Ïè¦>·{ºæÌP›æÊá~þúêzÓ¤‘SŽ®Yï Ã_©k5þíÍçÌ(_×Ûº`új©{÷Õ›á9|loºs—÷ »÷•yØÄ“¾AÞ»ðt‡ëòºwÖ»o¶Eí»Ó»Koú^<ꎧgyïÚ¯ªú8ðuáæ{Ãrõ®½ -úwô¬TgØþq\G¶;iß×smîé_¼sÿ²Ì™/Û¿C8úïÆÀ¹ ÷t¹©ko‹põ¼·ÅåÌ\¦œ™øwt²tï)V3aÝÞýJyzȆ½¹.æ»;_ºøÚÊÜ¡.7õ -eÊñ-=ïXÕîÁö[hß«™Þ]ôqÐÊY>,eÂjÛ­÷¤×ѱšöíÉŸÞŒo8Ý»u·x<7œíàÑß‚{z³I»÷<çþ5àzÖǦ™°êM§þ–Ö½úÒ-gæAõîzK–;_z»èKGG[·í¼lmÅò®îà;ùM½›ßÑIóþØU}²ãòþÓÅ‘‡í1ãéƒ>íÝÑŸ>´þµÁPùzž!§£ý-!;nH˜>´|w̓}’ŽÕ‘øÓGÊÕGêKž>~Ö®tÓʳlرîÞ}öŒeÃNŸ0}2õ¸>ɺزŒwΉ…6îeF}l³Y¦‹“Ý»jÝÉ—Nž6Í™yõuÎœÁ-=jÝIÿn9r‹ï%qró³Q‡Ë -ég2äÄ·ö¶¦Ý;iÞWë ÝÓùŽÎþtÞ¿ó¾}㸺ÒÉYyØ€í{éVÕü¸=ÝÔÁѶ#OÎø9e¼köŒïd3<§9x®Îþ5Íûü$\ÿ² 9Õ¼S†œb»u¬þvüûœ¿"®_|ƒ£«þ]æ7uê[µ»ú•Ë‡EŽÜU¦y×|÷+ãèWìiãžUö¦ß°NŽoé7nïÎ<]³Þ#?ç<9êJ_ç>6Æst¨‡ؼ—Møºz×ßkÄËkšWûÎ3g -ZwÅq`¹Ó¼Û˜Ö]vïª#¾N;x×›N<Ýôµl÷Ž[úø9OûAõq¸§F;U)6pô¶áz‡øy—oë‚åèbcG/Û4×É!ß]yú$ÞÖÕŸNš÷©ãä–ù>ÓûºèÝçÖɆ½û¼ {7]œzØÇω¯Ï—¯”»$ÍûÒ¼lìg{£œwÛ·sÖ;ôï–5víotG_QÎLÂó•»©¯©»EoéQ—{Ú¶ä_³9ÛÁï²¼™½ìá¡{ß[wú;úØv‚å{Òǽ›— yr»©+7§;ú‘né¼{ÿÐõƒòô£Û·[ÞÌu²Yfœß¿iŽÜ§îßñ¿ûþ5wt¿ƒ÷«èM¿H¸®9r¢ÃôrWȆͻԅ›ßÈ]]ïéWÖÝâ{VG¿–¬™k×ßbú¸ŠÛÁW$wFsßËUëª{‡FÎò`5GN±ÝkÞk|S— 9¿‹§lXáé¦qçÝ{#ëeÃÔ³;ºdÁj–2ÞEïÎrÌÓáQ¿¿§L9êL§ü8xÓï5ë=iÜÃßZ¤}P½ûƒzØÎãºå¼wäÛu§gºwíW-ô¥gûwÑÉYÞû£zÙ¬“­Güœ4rÈšQ<·þ–ØåÍ{Ÿ0½Ï½ªçôqé®®þ5ñ¥kÞûðÙrߟò®Õ'ím=?io‹éÝŽã–SžÜ„2ä8ë9ïèmI\:VÁÏsŽ®ûwä½sK–—½ìa†k–ëÞ3ºi䊘ÎÙ°¯œñÎ]ù9éÝù~¾d _º¼wÍ’#]œzÔóYÓˆwM}lÚËrÞ×zKÇ=}C|Øn÷­ÞÑ÷Û]–=cºwèãÞÅ£þ.þ6ëWõ½é‡½íßß…§¿3??ÚÞý¨~õ£úÙŽð¯i(6àúñSù:²äŒ£ÙÞñ7õ?xþ¿7—9<לÚ»GN~QÒ.¶’xÚ®.™Ÿ_÷¥—üÝòfl÷~ý;stÎϸºqöLóùùõ¦ç<½Š<¸ºqtèâàc«Ö(s¦f˜^£¬÷¼cU;\êÔËæøzCuruÞ¿ßÑM=ô¹ÜW×;ºÝÒ›w¿ÈzW^n˜îyúƒruÖÅå6ëm¾h;LoÑ=]}êÊÍ Ë»ÜÃÆùqª•ëšþ½Ç™ïÆÏ#žw‰«C×Cw:éÞûÐÉqw ay@ú÷ó¯¡_•÷ïŠë”9Säç^#Ç7õgѼ繰#×›ÎY煉F>6ÜÏý ;÷ñwÁ›î<é†ãhã¦Ö­:ež>Ëïç/š÷ι9õ¦ƒ£Ï”£ÏDçN<ý•}lóx7wxΆE'›îÝ‹š9ÜÒ¡[Q6¬ãæÂÙMënüüMsãVÔÅF}«Ô—®ïÈ‘Û¬I·Qmôï¡/ÝiÞ·[ÒÅm/³g›2g?×®ÕL÷θn9rgîèêeL?tï®ûwÅu¯yÏýéš÷E餑ûÒ»útOÿs?ÿ4¾·E9¹rô¬—íÒ´pª‰#ΞzVe_ºL7_ú•fÌ\ý»÷²zÕ±w¿Ñü8ö²ù;z9ïLÏ:[Îõ¦£;¸în뵪æÍTÑ­Šœwìà ™ïæc3?qu7¼'l7ÎÞ¤Þtô±»[ä†Þ¼§LXâéa¿ÞD¿jqÿÞbž®ÚwâæÜÉÖæÉwïÓ¼³— ú¸.ïÝ;…—s7u¯3mÜã£ÝÓ%O.eÎô%¶oÝ-}âéº{ïÓÎ=lœ9#Ø}kÂÍÕŸnØnŸcú™ŽUåæÔ“þLþôg¯{ïù=}Äz÷1õ¦{Ý»zÓ¡w'žžnèY›zÓ§ÊÏ Ûmçî:[rLøM{wäÄjÆ{âé xÒÖ¹32Kèå––9£÷ó,V±<Û¿k.,éä(6êâÖ–g|]8¹æÂn4ë}ãÞ” ^žvîÅÜ÷÷¬WßE]ÜÖûظ— 8.Yràçû={Øöš3n®·ôwæç— û!û€öý(^tèß¡“c<'}œæ½kúÝÓ¿Lû~úýû±î_wàM¿¤®ÕKÊ»®ôRá†Îu»©›NÎïÛÍ“N\{Vo8CNtre¾§_“7½œaùM¦y®GGþ;räÔ§î²f*’!Môï5ò±É.^³ãêgnê¦Go ;ÝeÏyzô¦×ïì®®ùqæg³ŒØ&iã¬gÕéã¨cÕëã'G¹–t¦ß?2Þ¹­¥:ø¶ìá%7®%>¶VÇv歹£ÌwxÒÛÜÛb»÷N–ñŽœw󮥷ûhÙq–ïÎ9r}ó±=>j&¬êÞsïÞ3žn«C×›>>™G]tqÚÉæ0oèOYwúèÛåÍ8,ϹúXoéм´“mBÙq קœ#7¥îÕéã"?wy3É˶ ¾U×±ªÝ- ßÉv×ßØŸ.ÝéÖ¯ú¦;wÇ××<¦{÷Y3kó²mÖªÛn6tW—×õ¦ûÓwÜÍæx:qudÏèþ]²au Ë£‡í@ߎ~tY3zWwº8˃ÅþýÈé1 öHlŸßI#§™°‚ë¿óþÕ篸wÿZø›b¹põ‹’yÓ/KÞ§î:Ù.]wºåÈ•l÷®»vÒ»kÖ»u²å¾ô2îéà쬓Ëñ½‚œXò²4ïØ·[[•2gr­;zÔ‘ï1½lg:Ù´3½Æc9ï Ú½C#ç3äî\>lCwï>gF{Ó›YoËݽÝÓïY׌y3æO°~ÕÜÔÜ=]ù¹¼mÖ»·è–nü¼Õîh†œÝÖ;ª}ïÒMÝåÂf÷ôÔáÒÑ=;ïÜ»™M;Ó{>k†oé„ã–ñ>°ïyÙЛùºîÝ);nèsa¹¿eÈ«Ïœ ËY3¤‘CÞû(Ï+úÒ=¶ ¾³ml=«ã‰eÃB'§ùq“É/0=ïg“;útævïÀrdͼv:V?·uìß¹/º÷…æÇ%®¾à¾UäÈ‘W}™gÉ-—äG_ -®/•«ó 5ðë7ó±­¨³eµ¦=|ÖÝbݪ¢}߮펮Y°”»1}²Þén÷¾‡özVác£Ü÷wÉ’SL?»wG‡‹Ïy÷Or¿{ÿ Ì»£“/vïŸÐÇ}Øîné¿ïþmæ„ëqì¥ß¿{—Ò•æÇ©8N¹°7îÍzÙn,ï5rŽ³S§ªúتü7Κ¡};gª5îìOGž\ÍyÙ\zÖßb»wÖÊ5T'W'/Ûô¸Ü±?]÷î Ë„•:úÓï"?¿‹xOzÀsÇב ‹ýû|ê¾cõÞïÝUóþÐþöl¤‘;§y,‡Þ½Írt_ïf꾩#ë¼=×È=ö2Oz/êÝ{}îqé;}Ü#ÝÑíž>ð»wÎ…¥üÐáú“úÒyßž~Vû~κ÷‘ÝÒ“?]úÒŸÇÚ³ª}lк®+–óî}B^¶ ›Z–ïÜSo w²;Ó½—íÅz[€é/¼{Ÿ»7Çs—7CšwãèÜÝMÜ«èâ(C.ÀôpS[ÄžUËáû›Ãtçc~2Þ Ó­›Muî«bg‹éãXç1}³Ípµï»\+g>6hßåïΛ^ìXÅžù¹îÞ¥ÇÅûÒ³;ºèߣæý#˜ΎlØÂ^ûØ1óAXþùgßþÿp¬7ýÒw¸pw Ÿ»¼xÒ.Ö´î dÍ–+¶ƒ¯Lç.Ò¼û¾UëXÙ°‚ëkíY%/ÛzåûØ´»Ånèêe[gü7ô-ïà-ç=f‚³³7{[È£žx9e¾¿ïÕ§®š÷=óuÊœá^6Ù½u¨kU²aí†n^6Ë|÷ÚwÍû$Žþé=l¿çþ½æ/Â÷KëLÇoÍ…-‘F.Ïz'Oº¾W”+y3ΟŽ}»ìáqCW­ûu®Þ°>®¬ýéœ {ÃÝlY¿ªzÙʶsWí{ÕtrÚ™Nl¸«ÇÍ»Ëyg<¿<Ï2äj|CϺ\Ô·–÷¶ÜGWl‡F®ùg½ŸÛ¿Ã—^¼£ßëï.ëý!ëZm%ŒoóM½-\²Þ¹—­£÷sʘÉ9zÒÅ%mœãéêa£¼ô­>öϳ›zÐÆõúŽ£[Ö{¾déç3a­/}¨;÷§,oæ 93Ú·úì´ïO”ï®wô'ñ±=gûwÖÅ=4o†ùùˆq]lÐÅ©Ÿmê:\&SêOŸ¼˜î=îÜ'šõ®ü|úRܹ“>Nwïñ7²`}vœùÒÍËf÷ô¹ó§Ïµ/}žu²1W_ZÎÌbñÍly.,çͼIç*4roÐÆeùqÀr~Á×7tW‡6.éÞ·ò }œpvdÅB+‡<¹]ÒÀû ¹ýÙ[úûöÓ÷û즾/êã€íênal'í;kÞªÃÎx:ûÙ´·/ÝÓE#÷û1îßl.mtï®9r’÷,®³FîŠ0þŠ¸z)å¼_ÇLXS¿:“5“8:kåüÞ]ýéåë,{&¼ÕÆ•%ëóãªeñ£s¶{%×ÅU|îLvSW,'}\-χ/¯Y†œö¦K~\­QS¾ŽÉµïw¬wW\O½A6ä¼ç6íX…§Mïç„ïœóþ€ý;õ¬½œ`y«eÚ÷¶hãZ’ Û’ÎôvvWWO:°ÝeÇɅͱ\û[Ì›þØÍ=l¾— ˜n]l=ò±Y6¬Ó¼cÿžùÒ- ¶/o®“ªþùîÊÏU7üv«âI¥‰ž¶Qîa{ïyʘÑÝ{È’ËsfÓGªuçìäÇMàO'½û$ó²é-ülAçvïìa#l·Žô¹ùÓÕ§N;wwO'ÿyÙÀÓUë¾0®¾Ì»Ó—ËìžþFÚ8Òǽe³òž6ëbK»÷7Å÷<6pòÌÏÏÚš3f¨_r›¬“mpôîŠã[º¥ïì–žu­BçnéºsçþåšõþN-ÂÍ5o&bùÁ4rŠçÆÑ? Ù3æOWLÿƒç¿cþºøËùÓ/Y÷.Yïêg#ÎozI<éW¥’Çvæçо»¼wÒÆÝÀÇf™3ú-Z9×Ç–óséKO¯Ðþ]{Ù +3G§±ü8Ñ»3_:öî±»eJØ®š¸‰îÝíêa Ú¸ÙTµîÎÇ–Íœôqš7ã6äÌXÎûnawt›…f¾;}œdÍ,‘5ó¶ò™°®c•9ºu¸ðÚ¸µö¥Óóf¶nÿn麥S qõ½ësÙ;LWºe½»};cûþ`.‡ƒiä²{zÂõƒÃuðô#óôã‡êÞ?GÓÆQ†ïßC¿êïƶÛ¹¤ì8âê%»©›—Íw¦»ý;åªVîštïÔ›n}l7ÚÝ‚ît½§‹æ½¬yïeùF[™´ï•,ß½ìðš÷JÆÓ£'½Zñ™3·¶¯‘Íöï¹FŽ=é–!×ȺÙTÇÙqá7ùÑác³Œ™yÒ}gzÊœÉöî’ ë²ãçšnçþ€¼÷ìžÞz¸W?[‹òÞ­[µ­ut§cïžòÞ[Ô—Žý»àz—sgDïÞa]\×{ÒÓ#W$:ø8åÍ×û‰¯£‹ûØB6ìã ï|lΧî¼lØÃg™3âaü¿öD~tÜÏ-–wð¸£'^þÌš8épaL7oú(fÇYÖ{¦ËÞ¤{§¹i¦{Ç®}é®kÕ0ÝGwºôªÎ³;:ùÒÕÓ6‡g-Ë}Wü~U<7®N]éqÿf=lÈ‘{{+ÜÕWàí«•u²eûw½§¯³ïÌϦ»wæ蛵߻Ó-}³ó¶­ú×àiÛ§9Õ½S[ÆÓßõžžògÞiï®ú8Í|¦¿ë-ý=»§s¶»åÂz\ç[º~CëžeÈýv\û7Í» ûùE®Ë»×Òï€ß—º{¿"/[Ééâ¢Þ¾ôk{1ÆÕ³>6ɇu>uÎy¿áõJÜÁkǪ`9ótíYÕ\ØŠÏœ¹­’6ÎçÂ&<¯j‡:8¹Çu»¥»®U½©74–¿ÃÜ W‡§ }éỉo½£[¿j“{WïW¿Ïñü3÷n÷Ž~6ìÜï¡»gžn÷tæémö¤Óî]õîâQï@GêÈ’Ó~Õ®u·ttïÞ‰>õx;ϺØìžþhÜ<]tïy֌ˑ 3ÈükÜÛÂü| ½é¾Ÿ;oï݇ßÏ„íϪ“{öÝ«³>;øÌÃö6½¥¿ØÞYï~÷N½lN#7Ïpý5íÞÓ9 XN½é¯ð¤g- æé‹7Ê…]’6Ž3äVºsGƌӾß×^÷ÍûjC9ï˜-ã9p~›ùÔù–¾£ýûŽ¼lœ»-ptèÝ÷¢w>uìß1Ž¯<ß+–¿£»å„ïÇwò³ÉݲgËÆ=ÜÏ?Ÿ-aúgÁÇö»1íÏ\*7‡'½tqáz[àe‹]uﬓËrÞuOýª×¶s¿B¶»b»åÎX/Ûêãеª:¹›sÞtº©³Ÿ­€éÔÛ"˜~«93ŒëÕlÿžíÜÏër[—¼ó¥«æýô÷F­ ‘«×3m\ÆÓª×}û¹ ¹{wCoRŽœúÔïýÝn餻'ÛÃC«ÇîÒ¿·Y#×2Í;ëãÐÝÒ>£y7­\ÉëôGïBó.˜Ž.¶ò`{v?wþtö¦g½é^W¼§£»E½láŽêÝ‘7£¹qÖß2|Î9»ùÓÕ“þ4Òý»Çô<{&ÛÁk¶»eÎXÞLÂshä;ƒî–ð¾dÞô}_\.,|éÖÛB]é/¢‹ã:w²Íü Ý-z;w9ïÔ¯ª=lv[_ªîÝú[ôž¾0®î2ß3[º£/Õ϶œ/ìÞÑ›Nï+áã+ݹ¯‹{÷MvSGnu§knœdÈqºéâ k9r¦“³~ÕÄÏwÄÓI;iß“Öý=u¸}îûQ1zج‰“—Ødž ¹£ÜÑ­gõ÷ãÙ¿û\¦>6Í»P­\îIç.6Ëz¿r9rÀt¾§sŽÜ5ë⸋ z÷+Êw¿ö¼Üné7ßg3aÁщ«kÞL™ûج+ÝùØn)x~Kx^£>¶0œØ ¸®™3ÖÙ2M§SÞŒÏx¾®9ï³3y3¯N÷¾ÐÝû"NܹÏ-v‰Ü×ÅFy3oÙ>ðóśӾ'ÜJ±üíÜîýííÌþ=»¡Ÿõ±©ŸmKýlܱjº8}Ç)Kn‹ÎôzØÎíÞßÑËFÜ\9z¸£ïš7cÝ-§w?bOŽÎcüÍ™þôë2ûÙàG§·‚lج3]tq¦y¯W¯ºï‚-ìÙ«Èw¦_W¿ú‰«×‘[³ÎÜÓ5ò¯ÕÞ˳`ë²s7­{ƒq»V›6ÊÓO˜î²aÎ]´r Ûˆ¯Û-ýÞsuìÞ%6æ䉧·sžnxÞjGç—®òtñ²µé–~úÝÓ›zOóaO?×Û´r)–saµ;½ÿÝë÷…«{ûàqwïð²õ‰›÷s}|éY.,|lOêSêî}(ÝvðÏÎǦ˜NžôßÓG֯ʹq#t²Q~Ü„=écÒºOŠ£™°¤yO;÷‰ñó¬g•ófŠl/^'7g |ÊtŸ‘‡M÷ï4‘—ŸpuŸ9“òßñ†¾/ì܉§¿žã[ùùÁsuxØÄŸn}lðükB&,:\ÂïKõ£_M3ä8Gî*Ó¾S¶;ð\»[®ý˜æý&fÍ8ŽN93š9S¾vêš%WÈxÏsf*êg‹XÎ9Þ¿W$½jú8Åwò§»Xõ¦'ž®»÷ºìâ릃o0Oo4ôÚ¸»:²Þ­·%èâ°wwýª|WoZîû}³Il¹?Ý÷¬>P˃ô§˵_µÐÛByïÏ廃Îó¯éÞð¼ý«›:õ±õôe~ÞÝ»ùØ×ÕÇæ:VÅ›^èeã];ÝÓ)G·ô¡v¨{Í»ÝÒ¹gõÙgÁâžNúwÜÓGÔáÂùqù }žÎ}l“½ó¨ÿ’§O =«äǽ`÷nÙ°Eo:²ã^ÈËöâñ<ó²½Ê÷ìÕ4r–õnžtÅð× ÇE/ŽÎ½éؽ/H~î|êËŒ«#V;[Þhïn½ª+}×Nó¾‚æ3äô–¾•ü™Ó¿kvœêävÊÏý.ÞîêèkÙËU÷þîra÷9G— ØB–\äãï‚çGÊËú[4o†Ëž=ü=v·¤ß¿ÃþL>¦{?—'x鬓-rud¼—XóžrgTó~uÝÔ‹ýªàæ>o†G4q7ґθ®ø^ÑÉûUÑŸî2ÞoíËyÏôîUèÝso:eÏÔ•§×ŸMõpµºïn‰þ5ò³— ¦«VîÎÞÔɆ¼÷¦×¼Ÿxú=¼êŒãª“;מÝÔ³lØ”!'½líLû_ú™N6Ý»·mÏnxÞü&ŽÞ)zØ8?î<¶?j†w¬òþ½÷è»[¢Þý1qtˆí+_‡?]q¼Ïú8Ÿõþ¤uÑÃ=á®nYïϬ}‚—ÍúØ -{wÕÊÉÞýyìófàO§ ¹‰ô¬b¯ýéב!7± ¹¸oGÞ»íݵgUtrÓ™áºëe‘þ–™Û¹ûî–×üþtpu×™N]ltO_¾f=lgýéoΛ_›Ýгþô•áú[ÔÆÑ-vî+ʘ±îtñ±m³]<ûÒ³œ÷ífç¼lŠëûÔ­ºeOúÎtîпG;å¼³`÷NïîîèàììO?f¸ŽØ3»÷äeû4}ÜÇ}û?ú\rwzø[I<ê¥_eÊÞ]öïWWvKçn6î\½Vºa{êN¿ñ93žëþ;xåê•´sÇþ¹*kß%g†ú[’NîL'[á–ž¦Z³U›éä|~œÝÔý=yï3íI7L‡6n®¸¾H~tìÞækO_¼.]×*4ïË%îéo‘¯kÆ{vWã»ú/xºùÚÎeÏ°NnãûVÅþ+½ûFp}Ã93Œë»ëZUo:rÞE+—pý=ã꿸§+¶[ 8:<齡ÜÞ]õrÈŽSOºøÙŽðüŸi.ÅÓƽ-þ–^RŸzð¤_fýéð°Û­Ç…uï–óx»æÁªíF¼l×L×.6íqÁþÝ4ð7iï^%,W4qt¶6;ø[Êaí;víð§×ÉÏž®¾tháƒF®A™3’#WÏð¼î»ÒÇ£­áõq²s¿»·lØ;ìÛ›èc/‡F®©žô{à;ázÎÓs<×6åéíó½l'®wÆ£Þ§ŽÕ>kÞãÆÍ ×âiËõqȇ岌™¸s)?·|Ú³?÷žôI®wWÏógìžžrß¹¿%σõ™ï.ÿþ5Í{_øýû«íß_iÿÝ»êßÏÞÔÂË—Ž£[/[ÂòeÖÉÆyï|KWžNY3ëÕF»[#xzên±<ükª}ß ³e#XíûNgï²Þ÷Ôá²/b9öïÌÑÑǶ÷ûwŒúÓ =.¤‘swuìßù~ž~ÿn¬ú3ÿŽ[†œãéŠçߥ‹’Ï…Í°ÜgÍ\9ÿZл§l÷¬/ýêšu»¥K7Ûƒéâò[ú}ÎÏ%sæ,O—ûeÌ´Z¦w·ŽUãëÑË1Wï"?®€ë]Õ¿÷4ァxî³Þõõ>6Ë…E†œv­Fì¦oò¥÷‡æköS?²Þõ¦÷îƒóú8ça{"\7~þôüäºØ’§ ZwøÓŸ“F½lÚÛ’u¸LÆY¾û˜|é§ïiú=¥n¶ivOçÞô‡ë²oÏ´ï³ÓÇÍ_Ò¤ì™9qôs<ýÕ´îқz\°{çî{“î=òtàûòx:sô%MÎÓyÿn¾tÕÊiwË&áºãêäa[oËáa³œ™ìÜ7Ȇݘ—M¹zÆÓ¡w¶«?²ãðÍxn|ºZ¨¿åp0ý;2ä4 –}é|GÏæwcÖŸùÿÇôõ®y°Ž›[&lIwð%͇•¼wðrÙ³²fßÉ—~å5q7לñ^ô±Y¬íÞ9ó=üv3èqÉïéUÏÕíŽ^q¹ê­Ÿ_åÂ*gÚ¸[ïcSLG&,ßÓ¦{¯#–3gÓÈ…m4ÏàºÝÑóþt¸ðÞÝtrÈ…õrìK׬Ö»·É—î²Þ“/½Õæ\uïmëTEg:zU³lØ^ô§[oºéâ_Ï4ï=˃íIlÔº“ÞݺØÈÏÖ§ŽÕ3¼Ü÷¦›—í‰õqèLw¸nÚ¸äaã¹géa“oío!~Žy6]ê㈧ç½éŒéÑÍY^œ`:u¨³æ93ÓÜ˦7ôlÿ>qX>–‹þ=ü­ˆéÈ’;½‹yÏ_ý-݆¹yð°…¾ôeÕ¹/ÏìÚ9cþ5ÅtënY¹›ºyÔWÒÛb;wßß‚LØ5òg¶†ïÖÇ–¸ú¹|ظßo¿-sÆîꦃ?×á’²fö¯“ ¿ßõžþ®Ùq–3sÔ›zܹ£ÇåºU5KîÃ0þžÿ3Ìå7gÍ€£Ûþ=ÜÒ/D‡{zIq=jãÈËfÙq%º¡_ŸéM7mÜÕÍ•ùѳ¹\g¹3¾»…säàOO:øªÇtþí:\*îž®^%,w9r„ç|OÍû-íÝ ÝéôË ]lèo¹³i`ç®þtèÜïd÷.¼=|ß[öŒ×É=¦ßûîÜÒÅ—Þâ—ôîªuGÇjÛõ±u(F3ä²Þ–¶æËt -üœõq½.qsü­G:wÎzïõ\o‹ß½÷½æýqà3gÙþ}h:¹þ0Ãö<V1ý‰4ð¦‘{z&Ý»ìܱoÏ;\ÀÑUû>~v{÷ˆïœ «yïÓ•§svyÙôŽþ2‘;ºïoqûväÈexþÂÝé‚éð¥Ï•£ç=«sËŽ›“F.tª¾.¨›íüÞ}©ûwÃtëe}ÜÂvïÚɆœØåJ²ÞW×Ã÷º¸OœÜ¾WêO‡']òäÖèe½»Ë›Ù$ž®^¶ÝV¼é[õ³%½zU ×÷œ »cßõ²9O:íÞIÇ7õãáÝùظ¿…ïèš +ØþûñêÏüßÎ¥`»âºö·”\.¬Ï›ñwtäÂjžœëd»6Ý;ù؆gÚwêq)_߸Þt· ¶ÂX^{™{Ó©‹Mïçàéìc3_ºf½WÍ¿fØGϽlƒ ×]&ì`ïéíb³[ºËxÊn锧ú8—3c^¶‚æ]úZ,ÖstÎ{מU—ñnú8xÚ¦S¾¥ûþíX}¶',Ÿº~Õsy3¬u7ŸúëÌ{Ô­»en»wd¿s—‹ö¨KN,0|±pzwdÎX>,uª†ß+Êyó·ô[ìOÿëâVð°!v­™3Šñy.ì–4r»´wO\½l¦7x®¹°û´×<íÝOø½#]Üa¾ôô÷ìÚÍF˜ÎrÔÇ–né¦y—ûoǧ?ó_áëп'û%íÞ%K®d\ýŠµïWÜË–æšüky†ÜU†ç¸¡_Sžœòô2iå¸c5Ëš©¨?Ý´qÚ«saËú»šyÙÛ+œ#G½jú8ö¦+¶Ïo‘5mùÓÇmçî²ÞÏt²i¾{ƒné ˇÍ{\ÎeÂ6FÝ-ð®A#—vî-½«SǪæÉ¥ÛzÊw7/›éÜ‹Ý-Èšé C½Ó¦{·ÈѾ÷Œ«í{Oq5ï>?îQxzÜÅ÷{™æ½¯7uÖ¾ðê]°}H\š÷¾ïo‰}lèOW~žåÂRÇês–9ãîèê_#®®;wñ¦?)Cn¤9ïêM‡Ÿ ù°ÂÕc¿*zW…ŸO¦‡åœù>¥;zøŽž5¹¥OUÛþâqý%ã笑ËîéNç1|.{wh⬓Mõî¯)k†sÞ—”5£¾tݽóÞÝø9ëݽ^þó7¯w—;w¦§úJsglïÎzÓ5–»Øˆ«3žÃÏvÖǶ/èãvºwmÜ>Ó¼¿Ÿãçi玽;|ê¦w÷>¶ßŽKæ¿1ÐÅ_×];弃Ÿÿ¢¿¥ÝûUÀô’i䮹“Í÷¦kÞûÕaz¡»{wËz¿aÇÞ7tæçå -ùÓ«æM¯Øî½*¼=b:né”›°ÝrÞUÿ^«¦Žîtêp‰ýªqÄ“Ny3á½cúÏy×¼™¦ïpiê}ýÞst΂z®yOXþ`¾6½¡KîÌ=8:îéáw[ù9÷§k çÍäØÞβ`;¦‘ëv2u±YÏjOßbî |l=—«Yﺇ7} øÎ}l¦K.gzVæcÊ==u­æY3'œ¶þô!qsõ°©-yØ´7uïÏœ Ëz÷QÆÓãÄσ/];Ô¥‹m*m¤ww]«ÌÍë™íy3çrÞç/–!7<ÏzV_yÈæ=läM×ûùk–çz\¬¿%fÃr7kä"~/Uÿ®ï«7ò±ù[º¿£3®sž|l¦{‡¾uïÐÉí2\×Ît—'gwtà:z[ØËöîtï”·?dš8ÁvÚ»¿Cû\——1ý÷cÒŸù¯ŽjÝÛã¾ÝÝÔKÏ£­Ä9ïоÏ%7®tMY3צ{ç¹ÎðÙ°‚éå\ï®ÝéìaóyïÈv/kgz¹˜W1\%÷§ßž×„£Ç½»jÝ«Y.lÒ¹ë-9ïÈw¯Y>¬ñó†Çö|÷®:ø;Ò½Ÿ°:úÙ,wÆîê÷ÒµJ˜Ž^6Áô`;kß]ÆLâîŠëð´qnœxØZÖÃÆ^6hã,¶ãóä€ëmÎyÏ:Ó»‰«÷rLg ÌFvð£ë-uï’3£Üõ±QÞû ÝÏUï>'§¬w`:éäÀÕŸ¡ƒú¼Û»ûÞà¹Ë‰/zwݽ“NŽ½éÒÛ‚»iä|oú„}lÓ‰îÜæ=÷°Mé3Õ¼vïsËžI{ö™f¼¿²î]5秊s3ºw/úØ–¯”õžõ«*Žs,{Ú–+»§çy3Yî w¬®´7X¾R¿šîàE—öìká覻îtÃ÷„å”Gß©/}g9±»_ÜÑãí|¯»÷÷lÕB'Ûñ@Y3îçÿƒ>6Åöô·ä_ËräJæeKš¸yØäv^BnœïM¿Í»v²17×̸ì–~Æ›®X.yï7.k†ýlàëiçn~tó¯U*YlÅîèÖÙ|¯O¿uÚ8Ë„E¦z[(ç{ÙÀ×ëÂÏïÌ—ÎûväÎhæL£™p3äÔŸnY3àæ†ç͘ð»ùÐ$mœÏ…u¾¶ÖƒÞÒOo²äÌ£î´r>Gý-¼s·Ý{;ëc£¼§{7^þwï–ñÞsú8¿sgÜ#yÙ€å‚ãìcöMç>”>6ó¬çÙ°‰Ÿœ7Ýòã4÷]÷ïÏzWA+7bíûÈéäž#¦­md<½xS;Ý»eΰ‡-Ï™!<ç~Uñ©sæÌKèNWO:ëß_¬W¸>Ï4r23ÖÇÍÓý|¾xuüœïèìc³ŽÕÌË&º÷7·w?—7c9ïÚµªöïë·8ÌÑSæÌJ3a9sfCzw¾¥o´_•¼ly‡:îê´wßex¾£»úžú\W7ž~ú}Àî=ÓÇE/Û™~U»§'Lÿ·ôÃ<ÿ—˜˜7“kÞKÏéžžëã€ïÐÆ•´»åÊiäЫʘ^ìJÇwÀõ2íݯÏäÁò[Ñ=|YvïUÍ’«þú¸ŠæÈY¯ª×»Ã«^S/u¦ßòݲޑ3ƒ[z-ÓÆÕ¥»:9ÍŽãŒ÷¬3½IùqM÷¦ß7í–®½l¸£7ó|wÉš¹7Ž°¯ruåé ÛÛI÷ :9Âòˆíœ×Q/w±™7½K¹3–7ÓÑý»iß»YÖŒiäÈ—.:9î`ëëþ¿©cUF½l¹6Nvîý!ùÒÉŸ®=Ï„u÷ôgíWõÚ8îo¡n6ÕÇ/Û³îÞ1#hÞÉ£Îù°†í'Œ.ô¬Nãžoè/“§SÍ;qô™{Eãžià5oÞtìÜgÖæ]«ó¹úÒ±ƒç;ºíÝÑ­jø®;wîq)ðt~9{é–Eƒ{:tîë3÷tÝ»o Ï7kÖÇ¥;4îÛM>[×™;\vÆÑ¡‘³,9Áø½éâÌŸþ^ìNßKæ ²fdÿž¸zžû.7ôs9röíÿ -sù×…fÂÆßΛÎÝl%·{/iîŒÝÑáccuÕ¼ç«Î—îõîÏÒ—^þänêY·*éÞyïŽ|Xëb£ÝûȼlÚ«*7uþæÞåêgºVÑÙ‚Ü8ÜѧqÏ.¼\1ýÅõ¬ÎÅÇ–vî3Ë{ 3›ÝÓyÿî}l Ãuº©öïœ ­\ìparf¨Ãeey︥›íÍyÓ5OŽîçÈ‘[Ó~³ö=ìݵ[•òf¬3]8;ótâêÅžUÜÓ}Þû;çº~UÛ»Þ펮ÝlÇÔ¯z€¸þG÷/2 Ž']\Âö¢>®ÀÏ]æÌ¥ÝÔ…£ã·ùÓ¯] çÂjî ßÒ¯M+ws]öyrÈ„¥ ¹Š{+Ù=ÝçÇA+W¥[zÀïŠìÛ]:ãyµfx~ËØíµrõéÞë™FŽ3aÁÛð¤7Šwtñ°yÝ{“ôîÔµê´ï÷:¾/½é0ýôïœõÎù°–Û2œö·X~œN§%^6Ú½kÏj;ÞÑó¬÷Žën1xz¯—í߻ع›‡Íôï†éý€ñý^Òºcßmû#rÞE'˜ÎÞôaè{Ó©c•±\oéÚžrf˜«›—íÙkäG½éiçþì=êÚN}$÷tÞ»Ã>¦¶IÒ¿k¬ÜÑÓ0|âra5VôrØ»¿dÙqóBÞ ÝÓIÇ·ô9:Ùô–¾°>6ò°-ÛË_c?›zÓE· }{Ê|/f¼/ÁÉ#O#}åÍp>ìzí9úšñ}óírä²Ý;gÈiîÌnCûwñ±i–ÜÎçÂn-ë³ã”¯Lß½[ÏjÖ™MÜþp®Uѹ+¾‰Ÿ'Žþû±èÏüOÍ_aïNú8Í|Ï2f÷®Y3ȃ¥þåë.ßž¶s{wË™–—éoåØáB½é„鎯“>ŽûUËŒëÚ͆yÓom¼F®fú¸[Æö,CŽóÞëÈ{',çÑŽUáéõ;Âö¤‹s™3wY›àù]ÓãyäçwÖ—n3èk ¯eɹ¼Åsëq?háèmäÏüŸޱ̙n›=m¾gÕ<êÀñŽ÷¦GŒçÌ™ÇLóNù°´ƒ÷ôžv¬>öÑãÒw™3¬‘ëÇ6ÁrÕÊUùž:e¼ßò{ë±ýöÖòfÔÃv{ÂïÛ"¦×êY&,ïÜkÒÃÖ°~Õz£ÀÑ×ÁÑy÷ófПŽlXšÔŸ~¯}lšûÐüÎ=êzO¿'\oI'ÝÒ4çý!弃§gÝéy&l§SÌzXÞîfݪ¦“KšwÜÒ ·ñÝ}´ý;¼é=éLG>,4r}ò¨ƒ£s~<é¾_5iãOG¬þ-ÓÉ·ç¾ô!íá#WGKÐÇi.,¼èž§5wfL9rÞ›>M¬3Ýu«ZÛ„trÓ©iÞ'Ù=]3a™£Oák›*¦Û~Fú8Ë›™«æ¼lð¨S[¼¥ëk]«È„…/ÝúØ–YË¢˜ »°¾tô²YozÊœY -®¯èy3ÎÇöFÝ-‚ç!?n%zwñ¤ëÐÎ9ºåÈ™?}ã´qÛlç¾<ÝôïâIÆÓ]}§»wò¦ŸÙ¿°oÇ÷ñ]rÞác{ÿíôgþgç/ÁsÕºƒŸ_dl²_GÇêyO:åÃ2¶ _/A#G»÷+àyÞÎùq1ó;Z(6òó¿{W½;e½C÷®>6îa³®UË›Éz\NÜ»JÜüVùù­ä»ŸÁô3Ù°Ú­ª>6ô±Ý¹ŒØ;Ò¿7x÷N<=φÅ7ºÓõ®~ßÌöïœól÷zwåè|K?ÃÓ5{&~w Ó;I'§¸ÎÚ÷6éã:¦‘ë‘>®K^tíJWLt¶î£ýÍ°lº›#sÆåÁöÑÇæ;ÙÜ-=Ë›1,jÆ gÈ™>-jãž ~¶Ïz\f¯´‡Ïîé” »Pž¾ Ü«ÓÄ1¦/µc•3g°{Ïsb±{ç¬wñ³ëMW}øúƲäÐã¢]ékíaS½ÜÖúÓÑ—¾eœv¶ä7õ=u­î(_Æïàß™—ï Ë™Ÿ§ì8¼GÕÈ!öwãÏŸù_˜Ë„ëð°åØî†4q>kæJoé9Ž«Þ2Þm®¨M8ºêݯuç~Ãy°´kgŒg\™wï²/ëνz¦[µj®Þô[ӽט«[wK²äÓoëð¢×GG‡K£ÖpY3uín©»ü8Λi(¶7½V.úÑï2LošŸ ùq˜‡„ñàçÊËï¡#§9Ë{ /›¿££wµC½ÝÁÈ=½Û6yÓó>¶Žêâ •KØþˆ 9õª?ÒÞ]4qÒ­ê½k– Ûïûh‹Làá®wZwÊCŽœbzÞ±:¤Ü8Ê‘ÃÎýÜdé>of\ìXsgâP›áùÔg½Ç];g¼O„¯gó2-îß_^ÎdÃòÞ}f¹3ŠãÀxË‚ež>?sK?¿{?7_[Ì›‰{÷…ÝÔ™¯¿Q‡ËÊp}¥;xÒÈIÇ*|ékÖÈ­xÿî»Ó5k†»[¨C]ûÙ6iߎw·µûùv/ÝéäIW_:ßÕw¶·œXêW%®~ÈöîÚ™þþÏÿõ‡2ä9sÆËv®»Ø’7]x9¸¹Ãvö¦³fÜÞ=¼eênùEÎ{Ï){7õÓwµÌ÷tÉŽ« ;ŽnéØ»W«Í{Ú½×Lïξôz–ñÎþtt¦7j–ó^Ø»Ÿp¹~ç»V±{¿CÞ{Âuž´k¿ËpÜòaÙËÖ ¸Ý|ܸ¦hÞIºÙâ-uî)G.fÌ8zËûÓ³›ºÞÖ;ÄÕ£Ž½ê]êmé|{V…³g½-Èœy$]n鎟ã~.º÷GÜÒyÿÎþô,wf@y°Šçéd3ÍûúØàe‹9r‚åŠóÏÖN^6xØF¸©Gw=êÚOÙ°œ9“0]øútâ|lèfÃý%ïVÍ:ÔqSŸ¡C²ä\ozæMWœpô™ìß_©“ }«èeSoºðrÅõEÊ„UÞ_ú’°=ì؃æ]5îI·ä[zÀî¥åÌèm]ðü{V×æeÃ-}³2»åÁæ™°ìe[kº[6š1“öëš;³“;:ñtåëš·3oºúÑM÷¾W,g <ñuÜÐÛ?Þü™ÿµAÞ ºÙÓ]7[ÈŸA¶ûLG_Ë•æÏ\gy3–ùî°¹îÚÎY3×zKO>6Ëœ)ŸËcÝ{æesÚ8Îsskûvz¦kÖŒhå4o¦~âç·ÎËævî5Ú»s'[æeãîÆõègcÛÝÑï(çýù°ÌÏ)GYrÈšAÎ{Ò½³§­eƒ›:w²i7eÈîéË”Ã=½+yï]Ÿ7Ó‘ ¹øöX+çwï–;CÚ¸Çì–žÞCnœa»iâ¬3} .çcÓý;õ«ê }`xsg8ç}Mœå½?S:¼làëÊÛ³¬ÓÉ-ózÙ¼—º[ ;æýûTófô–>ÁÎùú‹ùÙ(væ0Ý:ÙÂ÷\÷î^ûî4r¯^óÎÙ°ÆÑ©cU½l‹¨sz÷eÞµj˜¾?_þÝùÒ5/Û.ÚÙ­œu¨3¦ƒŸGÍ»ÜÒCwºúØàS—Ì÷”!·³®UîLÛsŽÜ¶û®½éïÆÓßßIg;xxØX\ÿí˜ógþW'ìÚÿº„ÖýÂrgtÿ^ryïÚžíÞKgwï%ÒºžŸÅuíL7Ž~CoÙåÉQŽœdÈÝÃy÷^aL'mÜ/úÒSλeÇUoùžn˜Žþõ¥<çLXÊzO¹°ïZC¾UóN½lá¦.÷:åÎ(®;O\½Ir¹>Înéèckò`½Þyï ËïÏ9kFúVÛ„åŠéäg“.6dÂÚ›gÉùœwL\=fÎtÎ÷­:­»õ§ãžÞù°rCGî;5†Ü$Û¿O˜c›†|ú„»÷©Ìå3v³…îô™ìÞ­¿E3êóßÞÒ—¿òl:;ÙVâã‹»wÎèKíLϽrÞÅmLX›Ï+96øãv[v¨ï,Ÿ^jû~üq¾w7¦3l»˜UÌ™¢¿…Y6dÐ¥“Íoé‡èy?x'}îǹ¥§y½ô¼ˆŽëî].2¯_ëk‘YÝrÑw9_l6?'¿;çóOémA¦íË}rèfûy1¯»ìÞå†þ—ÞÑe_üN\Xc¼ÿ„7žÿG½eoº{ä<›~¼q5÷» CŽýªôº×œkš^Ï;VÙ›Þ0v\#ëa«úÞÑÛÒ–î–¤éÀw÷üšz井ý;t¼Ó½Ò¡ŽÞônœÑùüËlú#¸3y‡ËƒÍçÊ›yÌzV±sä®]5ÙtpÞySǾ½o·ôAŸ9dØ\ÓÓ—l÷Ò#‡ìšÏëôÊ ÐÃ9r£ç!wîî³oÎy Ööïײlô¼Óëþ»›ú›ÏêCŽ;øqäê߽œÑé““L|ï˜Ïƒ/Nzئ>›Ú^ö¦Ï•!—u¸H~m¶=¯°a]Ó—W5=g͘¦gó9;Ù”öîîwWnÜz«}«±»,9ŸÕ7Á—¯ÏÉ{÷œº²a=Ÿ¾¨ÎëKt¨GÜ -Ùµ¼7} ß{º¥/qG'sÆgsgÂn*¹R×Í¿•{úîûßv[õ½ï"ïÌwñ½oc‡Kʪ¿»ï<¹Üë^èøžºM/½qÆy/[Ž-ìÛKý6.lÖÛröTÕtͯ…Îôr'o=lÒËÆ;ú)yáÀ{¿ê{¿¸÷=yäß].ȧ#“Ž~Ue½_~Jß*üî_åœþõ—v­{&ïLÿ_¾wÿãs{ÿ£ù5Óô4«[>½.ùôšk¹úäjÅîݺآO®QñÈ…;ºñb[™W.úÞ¡éÞãÒf?›ïÛ;zW—®UÌæmäÓ;ªée+9︡ÃïN>¬ôª²;lèry”—‡ÐÛ’²kÅÌ.¬¾ÇŠGÎ;ØzaÿÞ·9Ý;\ éOÖŸŽ^¶ô²ÙÞ}ÜPòèÑïu=›Ñ­› ;÷a˜ÕÓl®½éÚ±ú^¡ñ¯Ï»w³½&,ólœÑE×™UWï{ñ÷„÷tïU;–o,ü8xåâÎ}ƹ}&}«ÎƒI†m†ßrÿ¾È²l çÊç]{VÈ¥—.èeóþ–Õj%Þ÷µé»ûÝ}V÷üšçÒqOßüŠýlrO/½îàÏìüžžqa5ÇÆ¿÷ΙQ¿»sa}ßî¼™½ùãñÑ÷žöíïža »÷âߌóž2m›‘,›fÓ?2~Üǹ’M'o¦ø}¥»Å=ïð¿_8£ƒ9s¹x7[ìgû¢®_d>¿XoKbÄf¼™/xåpG¿æ‹sM/þþÓúr{ÿÓï‡ÿœ÷»RÓïj¢ë²{×9½†^6ö·O®àÈÉíÜ}rMéfkù=¾wìÜ¿µ¼ÙNÞÎgtíbk©7δœì™ê]Ý9ï²Þ™Kïæ}l]z݃ïݼïÈ£?ˆ/.ìÞqKg†Íýïȳ=š¹ô~_y3½Šß=ÝÐ%“žÏè•Þô'ïN -sº>ˆ³ú`$Þwɱ2ïû3oêQÓG/øb÷^Ì쯿Bg ïqßþòê¾weÃê»–g{Ó>¶±v²¹W;w²äpC—,›gØ&×slÓ¹äѧdÂÎxK·Ù|&Þ8eÎÌ3\¦íôÄ-¤+¬óÉ­ÐÍf~÷•ÍëëxOgËÊøq²‡?n-ýªéž¾ ý-ÕóÊÖŒçÓ=›¾Þû.ô²Ñïô|_áÂÒû^êö;ûبéYoºrÞ#6×seÎè=ÝòleתåؤÇåS:[¨ã˜ÑÏնϋðÝÕ/—ÝÐýw¡éÖ•.ܸ/a¼“ KM·ì:Ô…=óçõåöþØ«ù-=èzMöïæw¯dÙjÞ­šûÞ½Í9ïäÏ4®äÒ›šKw†œv§Ó×–Þô«7uéN·|ºw±u¨éše»ïÊ-¶Ðãb{ø‡çÃr÷®¾wáÂ>`VW>l/>cÆ)C.äÓŸ²›ðe”%7è›On ½lð»?‰–K×êÐçõÀ…¥¦c.‡®?ÇlzyG—þ5Õut¸Ho:½qäÍ€9£lÎÓ:4}LÜ›°ãœó<ïxÞ%›^è{±‡ŸêMÝ´<»©Og²ŸÅ^6ö¤óë³úLrlô¾_ɤƒóŽ[:æs°`Wnêyoºö·Tµ=yÞ7« =ròÞ¯<ÞÑ£_n#3:§/®QýMW-/çs°Þ[’gK}-©ÇÅ5¹kÙôŽ<0Þ»ðÈ _rdÉÝó«ýéñ¦þà]«Ò›~ÿøPñ»£¿…ùôI—þxã”;c÷^ç]û[d^¶Ü½Ó¿e½cNG†MúØB¯ªäنؿÛÞ9¶Q±gOø‘è»raŸefÏ{[J]{¯<ïÞÛR™Ïß<¿ö†ûÄ™39ëóùXréäÈ…N¶É¯Ù¤zK÷žÕÈšñ^6ïp)›ï]5]»ØæËEEÛ¹ƒÇMÝfõj.}ù­×ËؾvÖ;´|c½l«œóŽ[:÷ïÛÀxw>lôÀƒ›ÏçÛpCw&,»Òß³~6päàww=OŽ<›±ä²\:oêäÁ¼þ!ü¸0«ÎŒeØ‚–k5wðg÷Ë…^6Õò¬‡-t²!£®ûö‹Ý׿¼‡Íï;“ñ`åŽþe39|rå¬~Û·ÿÇ¿àÁ‚+S‹y¶è{¯2äÊ»9ºÙ ãôÈÕÍç.lؽ³¿E˜°ð¼·¼‹­šeë=ŸÓm>—îÑ5dž,[§£¬×sgÈ}¥ƒÍ»Ó¥ŸÍt½ìa+=riF÷ÜnèðÌõœ5cùµô”õžXr=å¼óž®·ô'z媫öiíÞ‡ôÆÅyÝ÷îî‹Ë:ÓŸÁ’s]WÏû«’M‡žƒ²k/¯¿¿£k/[%“-Ç|.}l6«;V~óŽ.u›Ñé““Ýûdæwô)u|êþ8íYÕ{úBµÜ_Þ¡î^wÉ£ GŽ]l+ŸÑC×êz)œ÷U¶{v~o”ëy6ÿsf·±›ºófv`È¿{ìY z¾³,:ýqÞÛ²7M/¾…Ž9u2äÀ…µïùô2é™ÿwtñºÇú‘¬òÞ³þtÎæô½Ÿ*ùµ“ð`½_UftñǹïÝyï_™GîëÚŒþSX3’aûB&ý¯/Û½k†ûö¤ëZSnï¿…v{Ϫkù]É»SæL=ëOÌ™:û[áiw:üî¢çj[+óÇ5g¦•íÚåŽÞŽlü†Þ»3gîýŽnÝ-÷Ê{OÚþ lX0ä26,4=t·D~öî}päú²wï÷wæÚ-½ß×ý»ö¬Flº­9Ÿ5£Žy½˜Ñå†>’,Û(ða#–¶‘ïÝ_²~‹{÷ ³l–WŸ¨–O*š¼q¿Û»Ã#g™¶i˜ÓçdͤLÛÂy3 áÉ-¼­ÂxÇ-ú¾ -ûvxß¡ïœÏÑËVt´¡“-ëoÙH6]ýq…ß½äÇm}çžw¦ïÊï.iûn—õ±UgöýµÝû»{äJ6,™°>«sNß+ã]òk’K§¦’¦ØÌ^|óÝ{™Sg.ýHvôÜ{VMÛ• Ëý|ïç³jø¹2ŸŸÙ¯úrlœÑ¿²›ºö²]Л®z^Í°%m×—ôýëÉíýñ÷ì8áÍÜÁ'\Øà‘«×«y¶†ö§{–­Y/žëydÃJwK£e¿+C-×üîÒÝ’|ïó»k[ìO/3k˜Ñ5“]WœðfºÌ¤?Èó~Õû‡Ç°{g&pßËÞåÀ>úÎ=ç½÷Ü/—Ÿ½ªÅ›N+o2l–WçÎ}î}l³jÇêüw¶¹iú|üq »©Ã·‚®/}F÷|úÚ;V×é÷F´}ÃõçÓ™eÓù|~oµcUøî›<¿¶­h9<ï;ñ¼;çÝ=q>£û-=°aΆ}?øœÎ.6øäŒ%Çûz…ñn]lG0a}ÿfôÜÎ?Äû~Ž½lÖ±Êþ–OɨÃû~ÉvïñÉ}~9–÷táÂ3ó3ùäBg:rêý ¹tô§súŸÖ’Ûûx¥~ÿ ï=ö§×¯èyšÓ•;SúÛk2£‡õ¦é9ætÛÁ3Ëæ9¶¸3vWoc^o#§®¬èz‡ÚÞ±\fvÕóÀ…Ívîe&]üq̱‰/®ûà=.žg{°üšjú£íÝüzÙz6§÷Ìûn÷ô ëîs×\[®ç:£3Ë–íÝÁ‘K³:æô'ɦÛýûïQ%Ÿ®ºnwô¡xãÄ'GŽ¾dÂ5#lXÛ¹CßÝ÷"wtÙ»¿¦ Ûë+4üÕ;Ôѱ:V–ܘ÷ô‰paɌˌ~Å÷^ê9³m‡E6ì|:÷î–0£G=ûöyÈ°ÍeNÇ®=fج›-ô±y/}rke¾û ¹ÍÊwîâ“Û¬Ý+§Ùô­ÜÓ7;ɤï¤;}+¾÷À†ON=Ìèæs×¾U›ÑÇrC×™\ØaÓ[ÆyŸj.}.¿³î×óguÎçâyw†¾÷…zÞWΙYj¿êһخ±äÖðÇe¹Ü÷¾uŽÜ&ä×6Æ“Ù°ÛìŽmž÷wëoqÖ̾’KO¿«¶èóY=°ÞÉ™A–MwðèW=~ÏãÇЯŠ.¶òïóG¦ç'úä|÷þ)ûwéX=ûþœåØ0«_ô±¿ÅYïÑóîLXpf¾°w‡gîç_·ùüö®<ïKW.,´¼nõÈœñ:réµ éõÀ«cFoÖã-½½ïÎxÏîémõǵ*]«­N+íÜ3Ž\¸¥wÛ©gµ“±f¸ƒÇ®½#¿‹žôký-ážî:žu±=\ëNwß»sf0·Ç9=l!Ÿþ”fõ§žÝÏ‹x[{w½§ƒ=3ˆ~w½¥åaÏN§ç=íÝŸ‡qçÎî²fLã‹YŒweÂrFo\·…ÿ=0a‘c{ÎŒj»äÓµcUy3ð¾UÓ1Ÿ»®kÏjðºã÷ÜïÓÙ<øãfY†mz\¾gð¹äÒçËêM]û[¤·E5}ÉÎt»«›ß=Íëê‹ýªi^ß„½»¾­zß?ÎzÓ­¿e›w¦³[u²éxô¹SϯÏé{Ñô÷CÆœ9Âïîš^v¦ÿþFì‡ßÐÉ’sM÷ÝûÉ9r6³‡ìZ`¾ŸÉ}ÿ ü÷˜K?cF/ókŸÔs°aC‹åÙ¼“Ígvíma—Ë5¬Íê^Cnï_íý½{M{ÙrÏ{Þ›}o¸¦ÃW¯ãŽŽŒºïÞuï8ïvKo6u>oÚ^¹qöZ~G×ÞpÞ#kF4¾ &ìïzÓ»dÌ\íb».¶”c{¼¯Î硯%ç»?BËÙÝò¨¹táÂ}‡Ž÷]Ó¯úãú¸«â¾=Ï°áŽ>Ä[zàÃZ 8ïÏi_2`mN‡O®Ì²½äÌ÷ç+}lî{çM]Ÿ¿‰¶“ñn3»gÓMß… ;yS]¯ÎêÞ±ª3úäê}Zñ¼+ݪÒÎüšçØt>_Jž­¼¡ÏmN×|zðÇ­¤7]|ïål¾¤–ÓóŽL[¥;]sliNÖókèsÙù¾Éæóvï{û{¿uo\å™/.ð`÷¡»…7tfÚDϵ?9¶£Î釰oÇœŽþô*?Î|qÁ÷îlØÔËvÅ#—õ±%&ìgÔö‹gÒé{G6uã½C×ÅÿžüîÉ÷þóËõüª®ßôüö®<æØ0£ßyžM÷î5»“õ^“[]û[|ç.,ô¼)¼wß¿gLئÌçæ‘krFoº?®}rå ½…žUÙ¹· ÛéÊ=ݼrà½ßóžî¼wÝ¿óžþ ·ôû+³ú#çôðfÀ‡•þïm)øqÒ³Úçë“)'½lOÞÉæ·txå\Ó¶Çî=êÖµZ²a1›Ã§.9ßÝ´ýy6»«cF§Gnä6v¶<'–Y¼Ìê`¾g¬wíc š>Ö—Œõ>†_®˜Éß$£îý-S}Æy¯xÞ'3ÞѱŸæ™ô™Ììó8£']ŸEï»dØòî–å.,÷îèe#/>¹¤ÝË•Î踣¯üŽŽ^Uzäò}KŸÜž÷ݦÔò wî:¯;v[è¹ÜÕ¡å7Ãü;µ½Ì¯AÓ¸¡cFzžûÞÖÝòmÿHþ¸ìŽ~¤¦Ÿ‚¦ƒ‡;:ïéåþýìþ¸Ó™êIÏOîM?K‡Ë…œ÷³ùÝ?Ë,zÌ´Y†í¢7ôKØ»³c5cÍÀ#÷§µãöþ5_íGµ_Õµü.Óôȃÿ½îé`É5*¬÷f,¹¦w¬ -{=lžek–÷ó–êz»iùôèy¯0ätïÞN÷óv7cÈu5ËæÞ8ïeó½{º§w½3Z.-Ø·s÷î=«¥ß=»¥s_fØ-ÏÖ zÎÝûS¯rOG6Ýlaçþ$þ¸¬»EzÒ½ ¹QùfØà‘{ö<Û³gÒ1§Óï>zÉæsçÇaÿ,œ÷—Œ ë3ºùà„5Cü«ïÞÇÂz÷›z1§O2lže3=Ïsl|3Ï®MÅ#'¾÷é6ϳC¦ û÷K6«ÇØ°º{ÏöïäÍ|Ýôüöþë÷£üz›ëù·f–·t›ÉÝÿ^hx-h¹säê2£78£7ðºë=½½q¡_µé=«í6÷íð¿wÔ+×iË\^ü{ÑÛÒu¿{»›u¦wü–Þ¹/_èW ½l¢éÊx·GÎL9Ÿß‡<›ÞÒ‹—Þcî“®ÕBÛÛÃ|ÞsŸ\O{Óeßg–M²éæ“>=…Lºÿú}¬0aG#ëdK:î»wïpawË(ÝÏG’G×Yý™s¹è»îÞ_åžžu§{gº1a çõ±wºÐ÷>©xåtçνût8ï)Ó6cÝ=rÓà‘›‹¾Ï™Qsú,øÞd½§|ú²ÔóÀwwôB»–e“ÝûRô|ô}}Åó˜3ÂŽóŽ¶ÍÕûÖxïÐue¾{·ª3ßéwÚ.ºþ¾#öÝfuÞÓ-˶,Yr“«t¬fûw÷ĉ®Û¬^ú⎮å`Τ:üq§ÄŽSMÏæôtKÿd/˜ï—зzñ›zÈ¥'MÇÎÜÌéÒÝ¢súÏ/íXýºéùíýÏY3~O¯‰G®:§ºÞ9uϤ×Á˜‘Ý;óèò7Y3aVW.lSôÝéï½ílXgÎtø튾wØÕâþ8÷Æy6Ý5½fóÀ„ þ8íO´»ú#gupä¦çlÁïžöïÅî]{\z&lšÛÙņ,[Y6×uìÚŸŠ;¼ïrGucÃŽR/›ûÜvOκ[Ò}(¬°aá{;“kºÎéÞ·Š{zÒõó¼¿QÓßس½ï`¾¿io‹ìÝ=»6¿œ°ãpG/ÞÌvðßZ=¾LÒõ™w²™ž»ç»wdÚ¡cu8rðÅÍÓw‰>¶9óèÊûmozȧs†\XÌéî‹?οۤñÛu¸ŸûsvïdÃflÅî=}‘_Ûe.àºë¬~åÀy×ìvðGö¶ÄîôC… Ën6pgÂÎݳk馞íÞåÍûî~ú¥l˜Ëuï®}-7ƒ½»dÔ½cÕwï?e>'ö¦ç·÷=él¹«Ñ#ç¾8™Ëkع×\˲wµ½çtìÜ[ï=h9™°ÂˆföN»åºÞiÓûî÷ôvÜà ç=2aE×糧Eçô{ß·»?îQ˜3êw~\Æzg_:ôœü™œ9Ós:gô>÷í¾ƒ”Þ÷²»¥ô¸Û-éà¼d×ÖŒÌëdÏ€÷¸3i>ÂëÎyÝ=漢mä96åÇóþúìwôW½¯ƒ;“u¦_á¼ó·yâ”93VŸ9°ò­h:öî’E×÷ï3ãÉ©7n*LØYÌ¥Ïà‹&¬íÜçÜ·/n±ä]}Á9}ÁÞtŸÙ…õ~¯ãÞsy9“»OnC>¬ÏëùMž÷Ív[™Ïw:§óƾ÷ùüJ†}l`ÎÐó¾—Û>õ±a.G/›ÞÓ¡ßヒg¿ªô²aïNÖŒpÞ¯ÝÔ?¬·%zÞÏîuÏ÷n;½6;ز Û}ìe£÷;ønð¾?„™±Y½ÇÝ{š®¾wf×äÛg›ÞÔŸè{ïëMݺÙìYT3êçÎ0£ÎÞϦ³[•¬wÛÃÃ#¶»t±áßòÞt×sÜÓã+ýpÏ®ãxo̲½}ÿõ|,ÝécÎêÕ›:ïéèf›Œ9«Wï2§»ž{ {[Ô'ûÎ}ƶÙÜ=ïìb“,Û<ãÈ-…9ƒÞ–’5#Þ8ÜÒÁ{ÿ­žßÍŠ;÷•ô¦oTÏ‘eÛ¦žÕr&_o9ŸWöíÊ{ß;“¾{ô«nwÌ®íÉ’ËôýÝ9ïûʬ®Œ™+¬ín–ÜszÌ¥»–ÿ]2a¼§;CîÿÀš¿{ù[™3ìKO~÷óåœüpe¦-˯)wæËÙqqïîŒ÷pK¿éùíý_=ëN¯{Åó®¬íW­û|®œwç½7¼¿¥é·ô´‡oyŽMî긩;ã½YéMoµÛ’iëH›êºd×Ú:Ÿw<ò鲿ïrFï>HǪv¹Ðóî~÷’;#·tg¾ûM½§ózOuý‘½éAÛ…õþDîLϳéý¸oÊ÷︟? ©ë!“>ºGnvïCëg ½·…Þ÷‘äÙ*z>Šzn¬™ççêý\÷î9o¦ôÈ÷®¾¸7÷Ìi ætv¤ÝGÏ;ûØÆÔõ1ûUÝï>ÉY°Ø½«ç=×øÙLòlÒá2÷®ô¼_5v¥/Ä羜÷•æÙ*ž¸‚õ.=«˜Ñí–¾ Ü™oèΞQÏ»õ²¡WuSÓË}»räÌGŸ3ê{²äœõ¾ ùt0fÀ‡E&}|æ}?¾ãM·tøÞ =?x>ý趓v² æûéä·uó¼·õóIžfÙ„!w–lzôÆIß*ØqšgÖxï:£ÿ¼ü súŸ×ˆÛû÷yž_ã¬N<îéÒ›Î]z[ñ…žU2äÜóžftϲi x3œÑ±ƒoûÌžfuÜÑ[IËÉ‚m_énñ¿»|>¯ß ïý>›ÕÃÞ½ÔðnØÁã®î96¹¥k‡ ßYïؽ?]/vñ}éMOsú“ö·<Å|¹‡x–Í»[žœ3S|‡OdÃÙ¯šõ¬Å'‡LzÞdž½{àÇIK˜Ó5“.s{–csï»v§gÝ-ïý-hú8xã¼[µ˜Ó';{VÇɇÝ;}s…~g9õ™÷¥OçSÑvõ¼ƒ›{äa÷^ὃ!¬ö¬®–á®NM¹u`¾“ »Jü¸Í|÷µÏè?n»ÑWíWÅ=}lÛ}–SWÞŒùãÈš ßwÿ’Þ»fÓá;,góÃñ·^wô²±gõ#u¸|°ÃÅür'gÇÿ¦}«§³øÞ¡éæ‹Oîó¬½éŸ²w׬ú'ûØ\×ÑÅæz®Þ¸ŸrOÿóq{ÿNï×~ý¨E-÷}ûÝ/åÇ)。3{ÆŽÓßMe½3›.Ý--dÙü®žîèmïn þ¸–çØÀ›i§{:òéØ¿·ÁŒãM½+lö½÷.—û{äÔý–þ`¾wíXóý^ôüñþQ:\´ËEx3¸§÷2Ÿ\ßu\Ø,ŸNŽ\xàÎXžmзtïNÞ ºV‡ÊšÉŸê¹øݵk•·õzäFÚÙ‚~6½©›–?ç7õ²;½ªç¼««Gî͹ïô»‡;zʤ»Žù÷$0gƼ§cV÷9ÝýqÚ›Ž<Û\ø°šMÇï…yåÈ‘-ÇïeàÇ9sf±ô¼gÔÅföµÏéôÊù̾1ÆÌ:óÈ­7ÛÀ…ÝŠÿýÚÞ=°`ÁsÆ´|»ßeÜèøÎûV™a{—ï»ìáôÉUwïš]“—2Ó&Ü8xÞí¦Îý[³È³I/[êbû /.ïX=ï7ôsùÛòk¿óÇ C®œÙ¿>ƒG>¹ðžÝvðZnïßï%¾;vïéïzÆx×Ý»gÙªýéžQo„Ý{]4{w½­ƒ×l¶ÂÎݹ3rWo·¹ƒ‡¦“ K¾»{äÚÆ—i›'®#úΛºÝÒ;÷îy÷ï.¬vª–»xË®…9ý1Û¿Ëî]=ršg†œùÝá}wÞ»ç×ÊL:fõ+ÙôÄC.ýéWÞ±ZÞÏñÄÜ7pÆLìYuÏû(gÃ~ÿýBÖûˆzŽ—êŒîúþ*9ö±½¼%>ìÛ«u¶¼Òóþª¼™ÀxÝéèJç=½Â{ŸœäØ*»÷É,ãÈižm.³ºeÓçî‹.â‘Ó]xïË…ó`d¢Ÿ Þ¸5»ÔÆœ3ãÒ[qï¾ñN6ɨ“3c™¶8«ï„÷î]l3ƒLºô¦ïvîsç9ëT-òè©[µÈ³<›.]«Ç,Ëv '>9õÈ)öhY¶´{/rlá¦nÿïàșΟMÓáÖ;çtaÉ…—Kº¥«×\Xö¬^|V¿Íç·÷ÿü~˜®»ç½ô¿cF¿³ŒzÖÝ’kºïàݧ¾÷ºô«rNo©ßÝ93Ü·ÿ[Û~_½©—3¹íàË|z§üîʇ%s¦+zþÛ[ú½3aÅo½é]˳ÝCÛÙ›þ˜þ.µý1h{ȧKŽ 9å¼3Çöè6ô«–Ì™òÅðfúçÆaçþtE׋=ûÓÐy3ƒ¡ÜÓKÖûÈ4]oéê“Óõ¤ç#îÜñuî ÷î¯ÏìaKþ8pã´¿E•9ÝuÝo踩OgÎ{goºêzvSç=]˜°åÜλ{Ýs6ìj ¬îÜÁ’óÛÚnê+¹«{oú*²fòN6øäeËréEǪ2äB¿êÖsmìZÝY†Möî{òÝËŽÕ‚5rl¸¥»ž£7ý(óúG–eûÀÎ^9öªJo 4·t°b­gõ,̽£Ÿ>ÏÜ™¼ÜÑÝ'w¹kæÓ9rÕÞ–‹Ìç7=¿½«ýàÞÝ9ïw̧×sŸ\ásšÞ0o\ÞÛ;Ù0ŸWúØZÚ· -ï»ÜÒ›mÞÒ±O=.¦é­¶è¸dÙÚÑò®ða³ît½¡ó[e½s÷ÎL::ÙDßeßœ÷Þ“ý;²l}zåÈœ ¼÷>³édÈÙ Ý{Vûô½ãž»U•=3d7›3äl^—Œ:´œ¼2f®t±‘ùþ"Ì™ÿûµzOWÖÌ‹ô°…<›ðÝÝ/wô·¬gU;\*;wìÛ9ƒ;ú„ì¸I…7·îtŸÓ}ïN~œèøl1«øä8«›÷}IÞûÒ|rÊŽK¼™4k>}ueF_K&ÝüpÚ³º1¿Ü&ëXÖ;r›Ø³º »wøâ¶Y‡ºûã<—¾sŽ\ÖÙ’{åö֯ʽûá]z\¢¦uV§ž²lúG`ÈáŽN×ÙütÞû™ßóÉ{[Îç3çt¿¡:÷½|rGgŽí3ðf˜_»È¾]ßå¦ç·÷ÿùÊîøãî®t·ÔË^¶;úâì–ÞHÚÞ¨i_ºÌê4§—Þ8ëPÇî½-¿íd“\ºt±µqSÎL«oéÎ…•—vܹ;ëZÞIü¸Îý/ͨÃ#×5.ìÃUM÷y½ð¼;ÖfséYu¯\/ö¬ª?®;zºî9ïnI{weÂöýw?u¦÷Áxg6]÷îȤ£ïÝüîÃáˆ96øÝ•9ó<Œ½-y– 7tÞÑ•óþ=ïØ»ç ¹·×¬¿å[§½—Íýî`Çi6}"Ùô1ïãÒç>•,Û˜Z> ýªüμkufÙôä›gü¸™ïÜu>λgÔ»ä-]nèWx3«¥w¦kF})6ïPÏ;[œ›¼rºoOìÞÔ·Ù·cn/þÞ\ñ{O_œ1höâ{ß»O®ÜÁƒ k,9êûa…;sp~\©éÇÀ……?N3ée'›dÙR†Í9rÚßRê÷¹guæÓ镳9ý”¼p'›ÏOªãèW 7õ‹t¬zF]séÊ™á¾ý¦ç·÷ÏxÖÇV£¦û|~WWîL<¹:rëõ.ýªÜ»{·jì8å½7u6ofwtÓó&ºÒÍïÎù¼ålؽw$Ïfø²“M;ÓC®ã³ú=:\„×íf6ïYEÛù3î»:«‡î–‡À‚õ9]|rÊ…íëWvîdÇùŒ^Îæ¦éžcü>$w&÷»“û^ä×ìß”÷ÎÝ»øãÈž1¯\šÓ_B–M3êÎ{N]«æ{e‡‹÷²½ÉŒîÚ~¥7ýÍ»UËïDîéCnâ;xgÉ™†¥g•}lIÛgÒã2®Ï¦ìsÑ~6xÝgªéÅÆ{êcsMg>}ýqdÃÊœöî!—¾œÎç«pK߈¾oè™3üfz[ø$£¾Anm«96›Ï·ÆÛ¦üÚ–½-»QÏyï{°ã„#wPo¹3±_õpð[ºj»ÞÓá•û`ß*üqê‘;ÅY÷t廟Q—;çuïN?M÷/ÙîŸä¶Þôüöþ™¯&ýé’OÇlî¹:çôRÇkÀ…­5Œñ^þݤ÷œ÷f#°`yOWöL+æÒÁšIõ¦eؤÜ8Ý»+Vôœšî{÷â{ß¹²{×N6õÈ=ø×gößeÙÒlNæL¸¡§y½ìly„®÷Å× .=ê¹çÙJ-G7›ðfÈhgz>«yG÷{ú(dÙØÉ6´ÞåÃ’õÞûK%›^™ÓŸÕûn¶Œ!wîÊzwÜ«ùÝ• ‹]»sÞ}ï>žÄ{zʧOýžŽ[:=ï“À…q^lÉWåÍx>}¹°6ŸÏ톾´ûz±w_\΃u¾{ʱ]ée[ùý¼dÃÚνÐîÂWða7œÕ½_µÒ›¾Ž÷sòä -=ß86pÞ1“sfwÖ;Y3•Ý;fó¤éÚÅv/yïs&gÇ•¿‹9ýã:Ó½Cs:¸°Gîß?¸s?y.=ßÁg7õÏÌ#\É|·};ùq‡u¾{U×ÿ¸ÜÞßâÕÂïÄ{÷¶ôoõS‡ß½a{ø†ÌêðÆ9–¯î¶†îÝqïÞhi6];\bŽ­…ÙCÓŸÃ]ýYwîÆz§WNºØ” ûʾUŸÏß³ª;w0ã^ÓÎ]ºØŠ=ü„þwïdcgúx¼rœÏé‘›z—Ë,ϳY.}ªùµ™°a}ï>ÃÎý -?n!ê‰ñ¾ÈÞÒòkèb[ù¬¾\Q×—ìLWÏ»3ß#ofÃŽÕµpaÓ-]|ïÊ›Ùe9¶kú–úýr;íWÍ<ðìX}6~Ë=û;¼qšÁŒþ^hø{Ì°]«Aã3sü8V²lÅÎÝ5Ý™ï'rgÜóNm7Fì'fõOÏ#w9GœyÞ/Voé_ÆùÓ:p{§W£®ÿ7î.ã¼ s¦^×÷ýo:³;½Þàž¹À†m„~UxäȤ³k5»©+?LØN¦érK/¾]îßÛ̦SË;ªå2ÇÆŽUõ»#£þp_zÞã=Ýwî!£®¬wÑÉÃln½-ܵ?zw rlìW…GÎ9ï~G÷uŸÕâÓ—òkOCè:rlö˜/Î2ę́£g5Ìéâw=GæÌËÈçòJË«hûkÖ³ú’òk¿É¤¿öŒpaá{ŸÜdìžweÇ¥}ü´|ÚÉzÓÕû>ƒO.›ÓÃoŸÑge†-ýÛbæ½-sÞÑ¿ÿKïo\ØtS_1—¾*g÷•éø*ÌéëÜ'gžwxãVt¦kתÎéèZݸ/N¹°»¤çÛ²sÕ}ï;ö«Š–ïv±‹m¯œxßÉŽ«òfÞe^¿Ê„ͻ؄óŽ™=÷¼ ¶Ôr½©—»÷³ÝÔÏìb; 7Îy3'þ›g×lf/3zO¿h>Ýgõ/Ïí–þç5àöþ¶¯V‹»÷º{ä¼ÃÅvñ…?®Q3MÏúÓK®î~w›ÏµÃy¶F`ÂJo:93Ö—üq±›­ƒ>aÉ•³ºõ¥ÇÞ–N¹o/÷îå-½[úã4þ.¬t·`ÏN>¬yÞsŽ\…!÷Г<[OöðÚÝòhZ.½ªvO’|zñ»|ʘ¡ßÝ;ÓÁšÁ-óúzØ„ k³98r`½;ï}oé#ß»“ùžßÒ9£?_õ½œwv±½hgºèyðÇ9–ì¸ñß.Áï>f¿*{Óo&›Óq?ÙtÏ¥Ã7•[±GwKœÑ5£.<Øyù<“[ú‚ùtä×–ìmY®q[_{ÇjȦ¯<¿FÆÌšzî÷ôÈ‘£?n³ãï]ÐöÙ3»}6£³-yáxO÷nUç½;Ö}ï‡_ÞµçõcEÓ½3Ù¶»ØœçÜcÞü–N]?Kw:wðgϤW¸°¾{ÿ´ûåÓæósÊ¡Ÿ%“î³úgð»ÿñÿæßÞßîÑçžñ`É}Ï:V‘Iç¾½øÝð9½!sº÷±5½3½)7uÙ»—szÓú[°o·LzÊ°¹OŒ÷ŽìÝÙÅÖiñ–²éÔuɲYoK¸¥s>ïÒ÷^°Þ»]™Ëás¿Ïôü±ªé‘5£Y6ïOïÑ+ד›z?ëcÃν'¹tÕòØ›>|zÆã.ü8ŸÕ©é¼¥ëÌžöî¾{Ç-}úU3“xr/~Ü•[ÖÇvî/o‘órÚÛò­Ù¹ž ó½Ì®+7—¿C– Ogô‰Î곘SŸº/.qÞ힎þôEô¼Ï¤;} ÜÒýqìLêßš½0 ·»:ïéë+Y6cÇáž^ÞÒ×®éÉãžùÞ·‘[zâÄ#ú[6’aƒÏ=ð`5—žï>§ï}FçwüqÚã‚Ý{˜ÙÞ·zÝéüŠWÎîéÊygž|™ñÈ*ó9¼qÞ͆—eÒåžþùYݹÞôüöþ;;Vï„7ó­Ówõlÿ.}«Å/NfôtKoxwK#ö¥#—îú.9ô°1¯Ž=|;Íëm¹§·â=½ÓÂÞ½Í~UfÔ»¸©g9¶®3g"ã]çõnÆË|q÷¢áY'[z¹ï½÷+pä0«?Š®÷ûÎS~\O¼qšO9u×tîßu>úؼc5ãâ—­ø>…1£s:ví£LÏ_œ+ùµWÎç¶wǬ~…ñ^èùË›ô¦¿]ÑöW˧³ouz\pOWÖû”½-…®‹×}»ØÊŒúDî鳌 [Ù»›¶Ïu^÷};y°7“æôj‡Ë¯\ÆšY=/t{ù=£/³Y]ætíZ…Îø°aNÇ=Ì™èú.çÈKNöð[æÑwž_Û£WÕ93ìZµY½ìY•Y3úñ]½q¾o?ÀWð`¥¿å \Ø£dÓ¥¿ÅçôÐËVt¶œÎΆ=©žË¬þ©3ºpg -æÌ™šî;÷OåÎÜôüöþ[Ÿu·Ô|f96èzÝïêõàwGÏjCòéÊyOùt×ôè‘k´̲¹¦G_œïÞ³nÕVšÏSoz‹žwÎæÅ ½yÞ¥»Þ÷û¼î`½ßÿÒî–â7Xï¡C=Ϧ\ìaSoœ÷«&]ï÷®øÞ±ƒ§÷=ó»KÏjñ-:V½·eÀnU²ãž†®éCÛLJý»2a‡>›“ ëÜ8ö¬’ ëwôQ©ç#îÜ_‚?.»«ƒ'÷*¯ìb{ ¾wdØpS¿…L:¿oÒ­Šy3Ðt»¥Oeï.]«`ÃæwtÕuv·”3ú4ö·„\º2ßÁ‡5füî×ø°ìNO^ô­.—àÌÄ>¶üžNÞŒfÙDÏc>=±Þ×[›ÙÍçÎÎtínÑžUh÷nç½-èráý|ŸeÓ]Ó“†ÇÝ{É{?Ð#Ç žåÓâ‹Ë;Ó±sÿÐ|zùNÔsjx¦å2«£‹í$·ôS¶w^9ežµcõ"½lÎ…ýóÿÍ¿½¿ýãœî^÷Ze÷ŽŽUeÃâßп†ŽÕkZžæö&³l êºw¶ˆ/®©¬÷–dׄó}Ïnê5ƒù¼­ GîÞwðìK¿wné]ïmQÖ æôû²»Å3é‘ +Y¶°ƒï]å¼÷{èJ·y]gtÑõ'˯õÉ‹ëK_‹ïÜŸ éô½û=} ¬™³fð ç徘ՇÎx~E\ÞÇ–3gŠ|ºpa‘K}É4]ætæ×^ßä;fN9¶Àzó~Õ‰t®V|ï’I]«v[ŸM˜GŸÎÐɆ»ú<ý MÖûLY3Ø·#Ƕ0_œ}ç‹EÔqÓupäÈ”3n:\–ÂuÏ9ïî“«æÒ×›MèY¥7Ž¹5÷î±Ãeç,9v¬îª|ØýŽ9¶½îà -ßÁ§¹ô=slÎŽ;d¹ô´‡?–ÿû5m—:Y°¦ï3s szeV?«¦Ÿ*ZþYüïŸgÏ®…N¶¬¿åüIÞÌþ÷¯Ï?ÿßúÛûÛ¿åœþÃîçwÂ|—.¶;Í°™¾‘{ÝÝWáÂ~ëy=pf$£Þ’\[«ï鸩CÓÉ„mù¬¯{ËæsÑut«¶1Ÿ·m×.]«]›Õ;`ÆI>þ8ÎèÒ¡®¹5úÝËßÒÛ‚ìÚCìZí!ËFÆû#gõ³éØ»÷2=G¿*vïýČ˲éšI<é¼î¾wîÜEÓÁ…ŒÀ“N6ÌídÆEïûèE|q–Eæþý9˲%î{̱å 9ß»ãyŽí5ö¬ŽßÜ7ÑþtäØÆÕÛ$2Þ'Ïûì×T3lƃÍ}ïȳͳ½»ÞÒçók{÷EœÓ—±_•:¿Šz¾ÂM}íwôЮ<Ø+=.Þ›¾¶œ:æsñÊA¿ÁwG¿j`êß}ÏïžÞ÷w™×ŷϽ‚®{gú;çtßÃK/u<òÞuç~”¾t¿¥ËÌ^òfÎ~W?Ä÷ûÙâ]Ý»ÓËl:óèšOO3ûÿî1@B‹íÝ ´]ÓÇñ£æJ Mˆ¦+© ÔÐ «4j) ¡i%JQbŽ±²Š¶jU…V Á -‰YLĸLmÕ’˜§˜BALe™^»÷99Ùû¼{Î{÷îwïûîµ>Yïí½ÿgï³OÖú¿{¦ÛÖÖ–´@¡rº\{%çÞÃiÄ8±÷€<*·ÊüØó(9w÷Ï5ucg£Øû @ˆË‡äóÜ1v"Ÿº:• Éç¹clO>t%*äqyMn‘ äœP>WYLŽ“Yò†<$cÚc œ+ÏËän9 “æ?ÌæRõ™›»ýü¨‡·µW½nýØÇÐ5Yž¨ÕÇçly0ÐvK Ÿ?)bž’I™º%mž‡æìë¤öæZbý.ª±ï¢Ö¢ý¾ý¾E;q;[¿ucÿtM Ìç·ÉÔ@ÛÄ@>wçÍ -ÄLuÛÌÔõ·ynˆé'«vòú}"çè?ªznÁöïÄbFÏyTÑq¢çó:­Ÿ›ãÙcαyΪ±ÿŽäs@WÐÂùüM9«`ÌE6ÏWkìÿsò9 +há|>§H>·óìîú…\RCÌPò9 +°Ï¤ÿ ´M äód| Æ=‡>9S·¼å½Ñ˜²1ž>‹ܯçkÍç*+ÚüÆÛïûÙï¿i'nKò9 +Pù}Ry§JÏLýRIøy5÷7Àžús¤§m¦LñÔ¶˜ßæÌѽWõ‹¤òŒÜ¯jܯ‡}ãú>`£,žª»ÖæµXN܆Ög»ØÇн©,#ïÈIåþ®oÈ÷åú¤ò¾_>ßÀòØ–ÓzʹW^•Þž˜=-æL‹ï›T®?»1¦·3Ç‹“¯ïåŸTã~gýÝ»k¶²sãC=ýŽ±~Ã2õ«Úß÷çŒÑÓÖÎ=«>¼:†oêMeˆû¼Ê™îü·{oZðûÕì\óôdÁçæî”urÆÙ?©\×NÇ\&«·3¿=Rý÷-°_ã-ߦÇë“j_ßê¼ç哯ŸC?(gŒ­<ëû÷ õär¬í>£ˆqŸ³¥ód 1îþ¸õd‰1nŒ5Kî×ÒUu\»E14;•-ä)ùuì¹€rT.qïV=PNRùÎ8÷Ã%±çÊQÙÛòùz±çÊQy@ÞŒ=PŽûnuûl~Dì¹Po*‡Ë,™'3e’ôË鿘g1oÈC2&§ÿ4yNV–©ò²ÿfì5 žT®°œ7Nv“£åIùTzú/nyü5+»Ë)¶cÜjí÷¹>²­`9ÝÕ¯á‰mmçË()¬n¯÷í7vì5 žTv²üø3OÛãr³§þxù\úfê‡Ù¶zÆ;•Ï‡gê{Ë{2ÙãêÏôÔÿ]æÖ°oCCû@#XªÕÇç÷Y<ÐvBâyfÛ>»_ˆqïl™ä©¿Õ·-k;Ï}NÏÔmjûöOÿu­móvöíù2ö±t_ Ìç·ÉÔ@Û‰çº}n>*㮇ßæ©ÏËçζ©Œ°}ëãéßËÚFåì×2Ög\ìc è¾TÑq‚ù<'¦l>,³”,©«æó‡\Û>9s<Øú,tý€VÓà|þt1ªùṳ̈rŸžÏsâݽðÄ^_¡Áù|v1ªù¼w‰}Z/)p<ÍNe²<hç»æ­ò‚ŒĸçÐ}÷ª»|þJyýÄròZ%öi¢Å.{}h•C,÷­éi»IðÔ_$OxêÚ¶Žô´¹|þzyõ´mæiimbÝ?Ç^[Eeyw\tyXúÈÆÉ×ïmÙγµ¹÷Ðlh¹wŒÜk×­:Gnù|^Á¹–TÞã¾Oe%YÁÎÿ-Wbª¹~Hìµ ‘TÖ‘% >çÞÛ62'fK™ž‰¹Óm+Ðßåóù%ææÎùýÇæÔœþ3Šœ× Õ¨¬(?tŸ… Äô•A‰ç9ñNžÛšIå»UËéS}.ýO±×”£r’åóUbÏ”£rh’óŽj¡ò7™#÷Äž (Çò¹ûá¾ØsåÏh~äsšù|¡õø¼$bÏ€Z‘ÏZg’ßÙ@W@>_`-6²µØ7ö\(‚|¾ÀZœëÖ"ö<(Š|¾ÀZ¸®‰=Š"Ÿµ£l6‰=Šªw>W.·Ë 2OfÉY²F ÿsr]˾GÞ°˜ Ò#gœÝå.y]ž–©²qyºØ÷cʨg>WùmûJÙOv‘ýå~yÙ÷å*É;ò¥,cåÛγqŽµösÜw§Êar‡ÕíPÃ<¿k}‰}<(£Îùü>ßõh••mÌ“=mYÛê™úÍ­þèLý@«ëÙÖîï†æùGÛF¯ØÇ€2Rù<äØlûM9¾`ŒËçÓm3äòLÝA6Ï…ÎÅ«ìhm«µ3æ|ùGìc@YuÎç·ÛõìÁb\>Ÿh›–=ç®r‚¼š³½~íŒ÷cÛÏá±e¥Ï·»¼ë±b¶=HfÚöI*×Ñÿ*?͉qùü‚@ÛÒN¦.7Ÿ×0Ç«ž94¹z^?O±ƒœ.7ÉloJ ¯Ëç—ØvGó¹ûçŒØÇ€ŽhD>÷Œ9ÒÆüƒ§Íåó+ l«t>WmóX/öq #bäs÷fw®ÛSïòùµ¶ã¾í‹@›;/ð¹;ïhwϺ?ûÐQõÊçÉ×Ï‘ -´ÿ[&zêƒ÷·¶3ÄÆái;)tm\e5‹ûÐQõü|žTîGw÷·»çÆzIé/ -ÝS^4Ÿ§Æ™+»Éwþ\Ž³1Ž ÄŒ·öeb:ªÞçÛUΖ÷“Ÿsïp=4пL>_V&gÆøPω Þ“@³iÔõs;¿½–¬TÇ1–“ï'í?sþ Û硱×€Îë~¸Èû|¯¼{t–nšÏ•cÏ€ÎÒó9­†|@ó#ŸÐüT†ÉØÄóýá 9Øçó9rOÇ™c~{Ÿh5 |þ¼úžò9Œ|@ó#ŸÐüÈç4¿VËç*ËŽ±×€Fj¥|®²rjœÝ¸†WÉi±eɹ÷ˆ=@ǵR>·qžrßµ"›4p Ýx…¾ãµ+PYÕŽ‰÷»kÍ£Õòy¤5|©IóùÊäsh äóNÙ·Ç›4Ÿ›|­¡Ùó¹JyÎã91×YŸ>2QfÛï×Èj9qý,öy‹™hÛ˜Êç*kȹó†[gÙ#Ð÷kàië%3Üß\¯q2+¥-õó£ò˜YÓû#™b×4æÉÓr¥lûÿ1tw-’Ï/N™aãäåóiò‘Ü)7Évr <+ºÜé‰qŸeß´¶¿Å¸Ø{­n¡|îòœ|*·Éžnßåv›Ÿ÷þ9k»ÑS…µ}«ƒëu˜åäª6ËãÕßÝß4WKïLÜ`ë{wRùþø]d´Ü`õ[Æþ¿ ÝY³çsÏ8GÈç£3õß±Ø3<1§'•ûÞVÈÔÿÊb|ùÜå¾»=õ{YŒï3ð/­mtªnW«ÑÉkU½îÀúž%/Úž”êy\ù"äó¥:iœZóy[ íz¹ÓSÿ œˆ™—Íç*KÚ<ö -ĸÏíÞëÖ*—ÊÇIåüþòòº\T‡cÒ×æ¸O }ovõÿPL7ÎçÚN“Ùžúwä˜Yž|Þßæ±} æe9%gŽî»è&»¿!d~ŽI›£÷z~¦ï)I‹ÞÏ­ B>?<©\‹]@'ŽSk>*Ðæòù+žú²ùüá×vqÎ7K­ÙÖu:&½kÍç©us?¸û ®³?¼Ñÿg ‹Ï»Êõóçm.Ÿ¿î©/›Ï¯M*÷”ûì—3Ç­Rk¶KÖªW‘|n1Cä$Û¯Ç,~ºô­çqäëÆùüå@›Ëçó<õeóù¶%÷c¾L2®bÙ:¬Õ -Eó¹g›Ê{2¹žÇ¯çó¹6w÷{žzwwè³9ž|¾¼Íc×ûàž»{KV’“ÊsrwÕ»Lq–ëh>·íü% ÜûhŒnœÏß -´MÿzêÝ3ÙÿòÔo˜„ŸW{B&zêYÌOÛHkÛÍSwd;û~œõ›+k×°V‹Zÿ?ÔxüN´éÎQÔó¸ò5{>WÙ)ã2gDº>ãò¹÷žq• å3Oý&¶]wþÛ½óm)Ù[¾pù?ÏG[ŒË³«Ê7e‹¤ò8÷N¹%3ý{ZÿËór?|7g-žH­óA5®Ÿ{ÎG¶/ÛÈPÇÓoœmwYEz¸¹¤öÑ{-Ð-ϧ§¶”‰ùÿûdÛ»<Û?Õ¶›|Úî3²£åÃÐû^÷K*çãÓó¹Dú{úºwξ›x®•»º¤r ÿÅœµ855Ææ5®ßêIå^õCë•ê;6©¼³6½/î9úcÿ?€î®Ùóy¤5ûžS0f€¬“¸¾]rnîù¿~%c—®j§Ÿ{n}­„{Ú Ë ŸÐüÈç4?ò9Í|@ó#ŸÐüT¦$•w‹¾TçqÜóÖ³e»Øû @«iàçómœ!±÷€VC> ù‘Ïh~äsdŽÓïܽî}v±ç¨ù™ãäÞI?;ö<ÅÏ‘:FÙ1Ú7ö\ÅÏ‘:Fç&ïVtmyùüosÃy‹íÝ ØÜT½Çñƒ­ ЬìÅ+‚àAd+‹HÁ‡]h¸€È.¥‚²zÁV¤,²J*걕 -T„Š@e{l•µXQ©P+H{ÿóŸÛܼçd’L2ɼï7Ïóy휜srrfä7“I2‹-r‹J"ËóBÿ±mY}¢\öüL®{€üdùûïø/*ÞyÞ`²ìoÏÏ–uyžk–çˆYâ¯âAq¶X*¥Í:b‚˜-抩š)õŸ?›‹ûÅKâqq…œÒîq¯ø“xN\-†çØ7mûZÝs (†<Ï<þ¥Äbž8CŒgÙ>=hó¡Xî'ŽWY› mþ.æ‹…âXq²8ÁÚ<h3ÎÖß#ö£ì}ÃÛY>o˲†µS÷<Š!Ï3ÿ,ËÇ÷&Ê7´ì=ßÓæ6_ÖËò›‹=ëþnëÖO”ÂÊOK”ÈÊ¿àéKóýŽ û6ÖúR÷<Š©!ÏëtMãR\X÷sñ›DÙ Ûæ1žúï¶uG{ÖižßØΣâÆDÙÑú>#P”mgP›}Óc?«ûµ(Ž<Ï<þWôsl`ÝZ*Q¶žms§@›ß‹s=åšçWÚÜêÇܵñÇ@ýl ¤ì×6Vg¯º_‹€âº˜çkŠ÷Õ¬ðñä´<Ôï$ϯ ´YV%ÊεíÌ ÐuHçÍZ§î×! 3ÝÊó^×å<ÿ^Ží´òü¼CSÚëŸo×=¿€Îç™ç©›y~SŽíhž¿TpŸ·1nR÷ü:Cžgž§§ÄeuÓÅŸe+Ù¼~ÞS ‚gæùrŒëDmSpŸôZ÷YuÏ- säyæyºFóÏS¾Œø¸Ä³N¯WŸä)is¾ƒg]ðüöÀ¸>•Ò×7lÝ;=ëÖuóg<ÏéÚ¶òü ŒÛZNœcÇÿÿbÇëOjÓf/ñSûþàeñ¸˜ 6(a¾v·þZÞrѽõßOľSèsüA–õÄ¥ö†Žëy1MÇ[÷ë Š Ï ÍYÓò|bÌ£ÖGž®÷ìËÙu¿>2Œ{iëa%÷«¿7¸îýPò¼ÐœUýûjú[gϹèwº+f¹èwÍ3Ûô1[¼"¶ ¬2!×ï—åØ—å­ï£ëõÏ©ncºg_®¯ûõ‘aÜKÛXO)¹_ý3¹Ì>ôò¼Ðœ5æ÷R;ÜÞʶ½C+軕çGÖëŸKÞæBqmݯ ã$Ï”Ž)P·•çÞ÷ -¾cñ²lmcßN?׋™.úîà¾,ï9dY .Ï1wÇŠ‡ÅKâqq¦fm›ý?×ê¾*cÛlC÷é.ñ¢øµøzlÿ;ÊsYv·±´èû™¿Ú¿Ÿp‹¿‡èsüE–õÄ¥.úçeñ¼˜&ö*ó5  {ÈóBsÖ´<Ÿó¨õ‘'ÏÌPwˆxVüF%vÇ‹¿‰©žú­'öWYù—ÛŒñïbBÆyû¾õyºmç,1ßEç+¼ÇSÿb†‹Îk8I|ÓþWWÞØÆ'l½æù(}^ÅE±ýé4Ïõ9˜³ÈÞ7´O·ˆ=íÞå¢{ëû²SÄb´¸Ú÷¼è äy¡9kLž{ú8­¢<ç¢ÏÊ+&Ê?f}ì›(ï$Ïyê·¼]&eŒú™ù¢ ûòYÛΈDùZù…ž6_·¬\%Q¾­µ9ØÓæ^1ÝS~Vy˜Ó3Ômu×÷¬Ó÷R Ê€î Ï ÍY+ÏC¶/Øo+Ïo³üòÒ¦ªò\Û^š2eíò|aJž÷,¶u›¦ŒQóþ›öEc<X÷=ñ„§üH±_ ÍSâOù¿œÿX÷Úæùuê-敹mõ#Ï ÍYÕy>?Å°6}T•çúÙüÌÀ:=®;=QÖ.ÏßLÉó-<õWumŽ]ÈòçŒy~ œ7&ËXÝלϛ~_}}¢l˜wWOý¥*Ês=ઠõö·íßTæöÔ‹F”9.ÝAž7GäyêµY‰úïn“ç­ Ï_¨"ÏcÏ‹÷º>ÿãDYy>7Ož{Ú¯.ps 4yÞ5äùŠ9ò\ÏùŸs,zü÷xOù ÛîÈDy+Ïû\-Ëp[÷©”í=—1ÏõÞéÖ]®ûš(;ж½B ^#xG¢lpè=@ì½IjžË²DÎù~¦“<·>ö´±­ÜI?º—z.Ô õôž=3ëZײï« ™Èóæ(’çößý¸Z}ÄËSÚßî¢ûÄ&v µ‘e+ë÷Z±XR|P|W¼!6óô½ƒµ¹ÄEç -®í¢ÏºzzŸë¤cyþ#1ÆELJÚØôÜíKÚÌÅùÖ^¿×Þ%e_Ynßï¢{ã¬$6wÑçv­°­§o=‡ý×Öï;\tÌ\ïç²ÐÚÜíis¸­ûšXËEÇCôÜò·2äùD·ø|µk2¾®´ú'ÛÜëXwñÔkoÐ{éèû=– ÷ ÒûÍéw“êþÿ€üÈóæ(˜çÄþ»Ô¦)ößñx›zêp‹ǬEï}¶cJß{¹è<µx›ï8ÿ=ØZyþqˆ·¹!ã|èý×f{æ`¹D=½ßéÔD½Gên~·°}×ÿ•‹î_÷œ/ϭݘXæ«{]tZ»<k“ù÷ï\ôÞi~bœ«{êíã¢{Ä%çIߟ­’u{šƒ*VÊÑf ±±xgJVžoeõ|½ÍÄÐ -÷å?ì}Ô{3ÖbcZ-çvtß×ÈÙFǵaÁýZ¶¥M==f ç&¬ã2~G ™Ès4E,Ï·«{,ÐkÈs4yÅ‘çh -Ëó·ÈsÈ< ÷‘çô>]«¤÷™S÷X@1|> ÷‘çô>ò€ÞGž÷™í>˜ëÔ=²"Ïû̇þ–õ³u€<úSž»èw¢wÐ~s—ó÷/h‚~–çú§Ïïpçh¹kó[d4y^^{êBžÿ_Ûý­ý–uïyUçö»ÊÄl1WLÕì ÔýŒxZ|ȳn[·G¬lwñxÌ[v¯;ý÷âIsh†qÞ+^«ûù ˆ*ó\sÙòõAqœ8B\eÛ»ÀSÿ3¶nCϺMl݈XÙÎ.º_m‹¾{7©ûy æùJÖïç=ë– Å ‰òáÖfO›ímÝð”m>“3ÏõzöYu?tªª<·¾õž.“<å#}¹-Ë’V>ÞÓfœ­[2e{3Å”Œc[×ú;¶îç€NUœçYߊ]tß–ýÄïÄ´@›­ÍivŒ]±²“ÚlïJ«w²¾W»¨@ÝK¬î ºŸ:Uež[ÿ£Åóîÿ_7I,ŸÒæxñf¬þÎs{ ­æôüÄöV÷Ô[”õ³<MWužÇ¶ó>±¾X5G=&¾NÁí-ÛâY·§í³÷³;½¦[yÞ$²Ì¯Ô=Ê2@ó\fߺÇ@YbžÐßçô>ò€Þ§×l¹è÷BçÔ=P ŸÏè}ä9½< ÷‘çè¯dù¤˜-¬{,P5òý•,×ëk»îq@7ôç<—å‹âf±DÝcéÕý—emë#éÃuï_›q¿Ã^×ß«{,Ð ý<ÏO·}¨yÞñþ[ž?™ +6®{ÿÚŒû0ç&uº¡ŸçùWxž—¾ÿ²ìa}nT÷þµç/żºÇÝÒÏóüèžç¥ï/之~—WÿqBÝc€n©*Ï5CÄÓvÌ÷ÓâñŠ}n:¥MÛíÄ$ñ¬¹AlÛ¦Íñ°mãËÖ1WožÉr¼x\̿߃KÚÿÛÄdq¡~NÓÅjâññ`èXpÕû/Ë=ºß~t[O§l'WžË²¸\<#^Ò×™զ͑âçâEñ²xH|5ës#Ëù6Æåªúÿ 4MÅy®ÿ¸R#γòïÚícëoG‰/‹;­ìó6—Ùú{,ot[3Å7Cyn}¾a™¾³eÈ,1G,_Âþßeû}ŒØIüSL´\ÚÎòêî:öß2õ™@_šço§ìWæ<—ekñ¦ÍÅh{þjíÇÚ|ÃÖ_lm°çè15ãÜ/ÈZú‹.äùBñžÄº“\à\%Y~¯¹ç)¿QüÅSþ1ëë žu‹yö9+ÿx¢|°‹>KŸ[Âþk†-Š=‹‹~ƒÝ7¶nìÿ }ï·æù?Rö+OžOWžòC­ =ë4ÿ§¥´Ù£Í6w±z#Ê|=@ÓÅò<䌂ý¶òü[žukغýå[[ùVž6Ûغ-åúßyïçIÛöåÙµâ¡@›‹CY—sÿ5ÏïŽ=Öﲟ=ÞÝƶB û¯9ûX ^³ýjÊ~eÊsY–±z‡Ökn)Q¶¶µÙÁ¼ÿÄqÍ9€¨ yþßõz¬ûäDÙ¾Öfˆ§þª¶î³‰òsÅÜÀ6Ž -ä™fí­6zNøßJ˜WÝÆ}±Çšç/Äûò¼[û?-åýÌ5âÏ)û•5χY½OÖëñó =åtÑ÷«˜óA¶Íó;}þ ×Äò\¿SÝÔchÁ~[y~\`ý¿Ä˜DY7ó\ßOÌôÐs¶•0¯º±Çšçˆ=®3Ïo÷Ú|G¼˜²_yóÜ7Ç3mï{…½õýDì5©çœêÇ%Û<ÖÚ­Wõÿo i\õߟŸX¯ÎL”u3Ï5+Î )aÿuÅkžÏ‹=®3Ï$~h3A<Ÿ²_»æÌó¤Ìó¶+ºè=/þn·øXÑø6ÛÔs~UæëzEòü´ÀzýsN¢¬›yþÊçõ®x¶XžÏ=®3ÏoIÉóñ.ö=¿gýÎ9ó|×’æóTëo·ÀúM\Ê÷õÐßu!ÏO¬ïó=§,;XyŸ{ƒ»èØ¿þc»Dù—Äëmxïwê¢k»^ñ¼þûzµØc=üZì±/Ï»µÿãB™í¢ëäîKÙ¯ÖÛåù{¬ÞA%Ω^{à½w‹¾÷ﳯ0P4,χXùOý±¶nh¢|G+ßÆÓfZ ÏNpÑ5Ê«yÚh¿\Âþk?³Û|#öøÓž<ïÖþÑÊ7O”/ç¢ó®LÙ¯ |mu-®ö”od}“(eåô§ç<•òzêó}< MÊs+o]c¥÷QYG¬kY¨eúš.žrѱàÁÖN¿þE Ï47õüjýnv¤XJ¬åßëäàö_óü©Øc=^üfìñ^É<ïÖþ[›G\t¿í[åÿ—‹îi§÷½Y«Í¾=cïô^/z~ÜÞ-‰z‡Ûö¿æ¢kÑôýÂ'm\‰e<}Ï÷ºèÚ½Um6tÑ=sô^}Ž Ȳ¿mgÛºÿÿuiZžÛº3ÅknñyP Bu­þûűúÿîÛ¥ü¾˜,Ã]t¶xÍï=Ø -ì2ÏõóõÂØãÖwå+xÚvcÿ×tÑýhãmî›eØ7}¿0Õ->½Åw¿»#ÄÜD=½Æ}X ïUm_ÞJ´Ñûòîhó¨ œCEUy^¸–²ÜP™îÃí¢ó¢7ÍZßÚ¬">ê<ÇÞs”EŸ{´õÀþ²ý_©âçSßs|P·—£ÍpÓç=O¬ÎP{ý~µ[¯Mh¢¦æy“¸èØôs¿wFeÏMë~ïkÖ=¨yŽ^æ¢ûà—v\zy@ï#Ïè}½”çÿ ëvú‰›‹íÝ Ü\ÓýÇñCQ±þ‘XBÐ*!U[, b‰¥T‰Z^$b_""Öü­-*´„Ô’ªFj‹%öÐ&± ‚$ˆ]k+vUQOÇýÝæö<çÜ™¹ÏÌܹó|îëõNŸç,÷ž3ÏèwîÜ­¥¥Å´€VdÙYœhå=,¿o‹‡ó ÈFóÜþðXÞcÙçy@ñ‘çÍK–­ÅLÑ?ï±j‹K©ÿR\í)¿Kç0I\*öçhÙR¶Õ¢ílûSŠⱺ§ý‚šã6—íýîçë:î -lc ­·y~ ØS\$F‡ò\–ôζé'úŠËµì2_ǯń¼ÿž€úi°<ßRDz…§n­ëᔯ§å¿òô¨uK;å{hùŽž>ω{<å¿ߊ.Nùκ®V×xëç‹Éžò³RòüSq±§|¤x·Œ×𡹚W"ÏC†Öy<ÿ—xÊÿ,¾ó”ï¦ã\¥‚m\i÷ÅuÃçšmÝw¿*ÐÇÞ³eŒ§ü[ß>µ«/ÏeÙTË×÷ôY'ôYÇiw‡ïu4·Ìs{Œü#Où‡â"Oùš:ÎVû´)Û°ßߨ³çªµ:†®ûͧúÜf×é”ýHǵ“§ý‚<ßSË;{útÔº~)óZTÛœ›÷û -P_‰<Lt÷èTçñl¨ãé(ÛZË6ô9%ñùc²‰Ž7? ´æyʸê™çSlÝ€”1­mZÿ47Ó@ÇÏcú{rÛDÇŽç”賚8ÒDߥ?œÈ÷c[¦ŒÑž ÿtÞ?@ý5hžŸ'ÞOüþ†ža=ñyá+9åžçËe˜ëº¦‚sàÍ¥žynʼZ–µtLÛ‹žúóÏ2l/>ïl{§üzñd Ï÷×¹yÊ_—úØëЯwÊÓmïëi¿\ Ï{ky· s½BûΗ÷{ -PõÈsYV7ѽbì/ÃÊìó¢e¢{£¼‘ÒÎ^§ýM .¾–ͽÆí-_ÓÓçn1ÅS>V<˜›ýáOý^a”§üÀ@ž/£åÇyúôÕºsµÿ´º6Ð>Ô)Ïãó´¬éeö‰Ïq›“ö@–®Ún†ØI÷‹×ü³Ù<ÃÓçÿÄk&ºŸÜ ¢³Í|3ïûù_zúÄçéÙûÐl¤Ù{”xÔDÇ­[}GnæÝÆÞSne±”‰î3×—çÚçÝÆ>OeYíc¿‡ÿHÜx â¬ß*ï÷ uÊó8 ­‘eöY)ѧÕ~´Óv]Þ☠6 ôù™xÈiÿ²ÍÆ”íØ{Ú<åô™hRŽÈòkñ]¢ý$±A(ϵýÎÿóD{ûˆ”m<#ÞÊû½ÈO=ò\·ce{¯7«â6ÝLtü½C™}:i¾.[Ávºè6Z]'žÒgm±b…ó±×ÖÛg«,Ò&¾.ýô¼ßK€üÔ+ÏQ³¿ßïŒç~@ûBž›,Çš”{ÌÚò€â#Ï(>ò€â“åñ‰˜Uãí¼­vÍ{Î4›:^¯_KMžPeä9ÅGžP|ä9ÅGžCÿ>ö¾·‡Û{Ùæ=@åš)ÏMôlµÅò~Mã¹Éxž£Úˆd¯Ÿ‡ó  rM–çöŸ›ó~Mñ\˜÷8ÊëÃ3Ô °ÈóšÏ¹y®ã]8ï1²!Ïk>çÂä9 ¸Šœç²ì,¦%Ì5ѽîìÏÓÅ uH ÿQâ ñwñ¬¸L,²½ÍMt?½™ââEq£è•2gožËr¶n·‡§îñxG·cÇxzµÎ ekñJÀÕš¿öYM\¢}ìý'ˆ~¶½t ½Å@1U|$&‹þõþoŠ¤ày¾ƒæK¬E30þýf1Nôñô½RÛŸi³B-^oŠE<í»k{›-ö¥ûˆÃÄZ¾M`έò\Çm8ÏS?ÏÜfàAºãu\ªôºõW{´„r3ãü×1Ñç«ÇµÍèÑ)sï¥u#t½û‰¾‰± Îû¿hTEÎóÀ6®+£ÝîÚv3§Ü^³e÷;GzúØ|}=°¾Ä”Àx.tÊïŠgëúFÜï)?D××ê³I•^».ºþ½õYæ—xÆS~Šnkm§<Îó¹ž>6ÓçÔò= -E–Cž‡´ù\,]ÏØ2ÚíoÂßÁ_/&zÊï±2ŒÇÍóëµ|9OûU´n·Þqžï¨¯hþú¹Åþp”§nqßþv"Ï÷÷ôÙEëºÖûµ€"h²<ÿZŒnã:F‰™žòóM…ß/¸y.Ë -Û+¥Ï{öó„X¶Îïƒ8ÏwÔW4YV×ö?ÔÏò8Ï{zÚwÓºmëùº@QÔ1Ï»§©Ò6>µy\fÛMt¬zœî{NSÄÇâ•@Ÿ;õµ²ÇÙÇkÆyóOÛÛÞˆ{õ÷ÔñÙýc'÷ýßÄDß3Ÿì˸*ÿ}Ró¼Òù·1Ï·ð´ó|ÇZ¾PTõÊó:ÍåCqIíú›yß œ(†¨_kVÍJ黕~¸ÕDçÎÛ§Œç>©Z÷œ¸\\$>ÓËßR&:Ìžoÿ·ÄXkví[9y^ÉüÛ˜ç½=íã<ß9ï÷4¢&Ëó·ËÌó/Ü,IÔ]+Þ©`››šè{ë=uî÷íûjÙï2Ìídíû˽veåy¹ó'Ï ¾š,Ï_-•ç‰\hõ®ÖÛë©>¬p»gϹ߾}jYnÐò2ÌÏ~ÿpR‰6‹f|í2åyhþ²,­ë;ØÓ~>ñ┓çQ“å¹½ÿÈ-%Ú,¡ómµ?­õ6g>ö”ÛZ]3­u‹i>nž/#¾oyÚ¨}~ØÎWbPÊ܆iÿwCëHé[ê|¸,óŸî{eÙM×·SNž@FM–ç6óŽ‰o'~ayÚýEÛïÏʲžî;Ûk©¿ðô9Gû +™èYn+šèž*¶ü4Oï1oYкžºYb’fÛrº5Åõ³ÆZ)óÞÌ;Ö^ѽWÊÈó,ó/ØóæÖÖööþ0oÿ5öä9dÔLy®ó¹TÌIäšÕÙiÓQ\å´™­Ÿìñó¯ë¶õ8ýìý_Î ´÷æ¹Ö3ž}qÍp{¾ý\g;ö¶Þû¤&úŽH´÷OHé»BZžg™¿ö±Ÿ™ÞpúØkð—ð´MËóuÈsk¶Ý+O¢Ÿýa½ZÌ_–UÅÆs@Û5kž£â÷Á•&ºGü|yP9ò¼ý‘å =Å.Ô÷€÷Þí€ÆGž·?zlÞ>‡ô5Ý»î2÷8> XÈsŠ< ød¹E|bRîYûçy@ñ‘çy@ñ‘ç_-ó\–kÄuö¹=MJ¿ô¾(÷šè™Ü«Ú7•ÐÝés£Þµ›g}öym—¶eŸCöÿb¼Þ‡íO¢O m‡2Æ|ö  ýªqžÏ/TØgjÂ?Môü®ÿ–úÏAŒ4ѳE_Ÿ‰í=íÏÐö3R¸yþ•ö¹È³>ûœÒIžòŸ˜èÙ ïˆQâL1V×3ÆÓ¾Cãº6ï÷  ñ4Zž;ýí³Èß-Ñf)ñoã<—T–…Mt/Ó=}¾Ïó -Çbóüñ­§.”çã´n~§ü`ã¹_z"χäý¾Kò|v‰6q6.ï©;Të¶uʳæùYº¾ƒºi<·ß-œXŸýþà:§Œ<dR€<»D›Íê:Š)â(OŸ– -Çbóülñ¹xÒ©›êæ¹,?Ô×õÈÀú‡;eä9 “äù›%Ú T¸Þ¬ynŸ-z¬¾^uOöÏ_ã+ØyȤyþF‰6õÌóßëÏöŸËuò|€¶µcüAÛ Ï™$òý^ÐÜûoY`;ךèx´½Þ{u±¶™wûo=íãºJÆÕ*ϵ|ŽÖMòÔýE·c··XVôÕýù‰ÍœöqžMÛNy¿g§yžv-œõc§Ojû”muÚÚ|?9ÐöŒ2Æå{¾š/Ïãï&¶uŽø»³î)n–kÛeŒë¦¼ß3€ÆSË<Ïa.Kè¾ùyÅ3¶›èú¿eó  ù4SžÐ^‘çy@ñ‘çy@ñÉr‹øDÌÊ{, öÏ(>ò€â#Ï(>ò€âk¶<—¥‡Ø­ÛÙÇÞ[6ïù`5SžË²|â¹%”Ùg± Û9U·ñiÞsÀj¦<×ù̉že´]Eç~l…Û°ÏnµÏ;}(ïù`5[žW8÷å³ä9¦çùÒä9 4bžËÒW<¨ß›?-Ž›‰WDo§í´Ü5`Ýçˆi -‰Ÿ§‹jM§ßežmÜ^Æ\6Älñ‚8[ËmÿÓ¶½â9Šbª¾“EÿÛé/îoë1‡‹Äj¶[ëv¶Çë|?ˆƒR¶±ˆ¿ÎãcíwBÞï@ãå¹,‡éx®Ô\ßWܦùdË·pÚÛ<¿:ámÊóãLtÛX‹æxüûÍbœXÎéw‚³ÏÅÝ%沩®¢ÍI±‡)Fkù©Nû^Z>BÜ!öÓ×àj-ØÎP­?_b¢óõlÖ~iÇài¿µ¶¿Açl_ã½Å-êéÓQ¼&^ƒÄúYÀ¾ò~ß@{×Hyn3X¼'þè©ûBǹY‰uÄçž{óÜiŸwd†±–“çvùOùÝî‰Nyœçs=}l¦Ïñ”¯¡}Zí'k¦Oô”Çy~³§n”Ö­à”_`¢ï -–rÊ7Ñö{çýþ€ö,‘ç!Cë8–µu››xêúi]êyëæym; ÃXËÉó¯Äžò®ºÝ!Nyœçû{úì¢u]òc´¼ƒ§ÏñZ÷C§<Îó]<}6Ö:÷¸†ýl0*0ÏÇìç¼ÞÀ†Ëó>ºÍ.žºî5ÈóÎÚöÀ cMÍsYVÒu嘆ÿã”õ -ÍQ–nZ·­çï7+°´Ïœò8Ï7L÷ñN¹Ý7?#°{Œbr^ïaÀÿ~ß®™éêTDZÔ;Ï—Ë9Ï;eqžoáiçùŽž¿ß¬À6Jåy«cëZïÛ×·ynÏ™›êa…¼÷{Ú3ÓXÇÏëç4Ï{{ÚÇy¾³çï7+°RyÞ«‚ùÚ<ÂD×xåýþ€ö¬Áò<>·j]O]|ü¸šy¾T ó|]w«ë¿dY± y~ZÞï€_=ó\–EJÔ/iÂçjÇÇó«™çñöªžçÚæeã9OÌD×ÓW+ÏO߶_û·¤Sž%Ïí\.¬ç{P¾zä¹,«‹÷u;ÃJ´=×æ“`¢ïÃí=YOãkç?ж¿É0§rò¼¿®ÿ,Ko??ØëÉ¿­bžo«å}<}n3=åYòüñd ÎWouí ~ê”çG'ö¯§—ÑÞýW¢Ïõb+_ž›è-IÑv{&ËS¶õ¨‰î»r¨‰î‘ò ËÓÎÝŽÍó§2ßõ_G˜è^jñ\ì}ïÖ¯VžkÝ­â ±—‰¾Ëÿ™¸PÛô´Ï’ç››y÷ù骟…ìv®2Ñuyåý^€ö¬Ny¾a"ÏFVد“þì=N–§ëJÙ†½‹Ý÷ÿg¨½™w|)ãS¶³–Iœç—!Ï×IÉó…̼{»ÅÞƒc©8ϵߎ&º=¹ûÄöy¿ ½«GžëvV´¡¸fºŠcì«ñk±Îå°*¯·£~>YµÆã_I?k-]ËíÊW¯<¯Â8‡è8È{,U˜ËŽ:—ó  94bžË2ÌD÷*=V]bÊ8—®™è9.'$æbŸ™2×pþ Š4Ïí¹fŸ˜èÙŸöÙœw‰CóWƹÜ+>ÓãÙ/™è-Có ¹4bž€ÊçŸ,·èwÛ³ò ȆýsŠ< øÈsŠ< øÈsèû “8Ü$î1(Žö˜ç²œ!nÊ{ÄÌ{íÃyP¹všçöŸ-y£‘È2BßWç=@åÈs$^—…ó ò€â«UžË2ŸxEüFì"ÿOŠÓKôÝ\L¯‹7õ™&;”ès€˜$Þ/ŠÛD@Û`žË²®xÞ>ÆS·ˆ.¦‰OÅãâ´ãÚTç2ÛDÏ–9[Ë_ ½²l'Ɖ·´ßíâçUüÛl­Û÷9 ÄßÅÞOp¦þ-íë|£è•Òg5=Ïöy[_‹~¶½t ½Å@1U|$&‹þyý7EPã<·?\«ù7@ôµ|L ßnZ›þúAqþ†²F–¡ZÿGÝÎqâoZÖÇÓ>-ÏŸßyÊêg ûüÓú¿¶òîÀº6Õú‰:=ÄH1ZËOõô9Lël›~¢¯¸\Ë©Òߦ‡¸Ú£%”›²t×z›­ö¹¯ûèXïÐòm<}Ö1ѽ„×>s?ÏÓ¾—ÖÐõî§óÇ68ïÿ^ QÕ!Ï­%ºƒµ|O?»?ö€§üRñ±§|u]׉žºÄ›žrožËr®kOÝ™&zæé²NùVÚgOûlÔG<å#RÆl÷û/ö”ÛÏïÖð}ÐEÇ´w Þîc¿¨³ß;Lñ”ÛçÜ>ã)?E·µ¶Sçù\O›ésj5(ºDž‡ ͸Þ8Ï/Ôk<Ï4—层§¼·®¯«S>XËóô‰÷õâ”·ÊsY~¥m Œ×Ž«o îeãßßüÊöó”wÕm qÊãýùõ=}ÖѺ-jô>ˆó|@ý=Vë[T×w”§nqãÙßNäùþž>»øþþ€Hò|P ÞK^ÁúÖ÷噉ŽgÏNé·²§ìò\–e쾟Ÿq®öxÂ5NÙJ:Þ]}ì?Ç8e{jygOûŽZç=ö\…÷Aœç»êÏO›§}ü½‰÷¸¿‰Î î”ÅyÞÓÓ¾›Öm[‹ù@Ñ%òü1#uuʸÞÌyn¢sè®wŠ¿šè\º©º¾ÞNÛÔ<¬?>ÿˆ®ÿ}ϽD‰~vÞ~ïmíÛóº4Ñù}¶ÿ NÛròÜÝ?ó|j€­P£÷Ajžk›;µý>b¼f|(ÿÛ’ç­¾ƒHäùŽyüwÎÔþøyÙy.Kñ’ö³9=D$ÆhùvNŸ¶ä¹=7Ë—Ÿ¦¿oŸÒçlm3*1.ë4Íó›ömÉó‹Å9[Öè}P2ϵÝVâwâV1CûØs»8íÚ’ç½=íã<ß¹^ÿm@‘4XžÛóÑìõJ­îk"KÏjçyâ÷ù5_Þ ´_K·½o²ü?ÿõx‹í ÜUSúÇ—>¹Ö”Ü/…()[®xEƒ0¹ÔG¹E‘\SÒÅüKH¥IÉ$|Œ^©©„RJh$×2ÍŒ[„‘åÎ(õžÖ³½Û:ÏÚçœýžsö»ß÷·>ŸïÛ9Ïzžµ×^ût~gí½.7n4 Jo37Ê{±Õ&øE·°]òv—¼«{'±ïìÆJäØgåךøŠ˜ìØ›Jy'zâ>&†;¶6ÓVño!y§•ºm Pú“|O¾Xàr7“r‡yò¿#ú9¶…ÄDÿQR^;Ç~ñ³'¦±žhîØà²_~Q®”sžäÕ÷çuâ)Åþ¶v>”®ôèy[±·¨D»×‰KÏ%v(±Â±m'åu÷|66};ôbR=_¢äµÓún”&–zÊëïÑó2±wRbFºº-ö =û½RÖ žcôTbšHÞ<%/ø0Tô²>ÑE~chz¾½Øû(eu‘¼Ã"Úü&ñù„Ø?Ïë©ç’7Ê“7N»n”–§ß.ö3=×z1)ž/܇¨Kœdl¿õY%æ ‰a}8Tl;‰ÙšˆÏ,Ñ° ˆ½‰CÚÖOñ÷éùæÄ*â%o)±œhOÔ_>— rœg<íp9±V|˜çˆƒ5=ÿ1ÄÄ%ÄNDcïÃA<š¥Í—‡Ž“Qv–Ølz>Bò/%ʵäç=Ä>X‰9_òn#ZŠ?ÿ.ù˜«øCÏ &%Ðó+Œô“C,bMðÄõ">¿5òïDã¹ß.1õˆÉÎ1¾%®õCÕsÉ úŽû‘ÄÓÎ1^#:+|zŠoΚzïÕ\ÑÎoBÇáþü˜Ú|t(æ˜<¯×®Qz.>|dµÓ?·FÄt#ÞwbøZÕS|£ôüè9ø)ž÷’÷uˆVÜGË1¾±ôé¶Éã˜õ%f"¶×ÄaÄ.•(c i›Yüö#ö%jçQv«8ç/qüâ |w3¶¿Ü(ò÷’s)ùX?¨ ”@ϯOú«”N–¶9<麄êt?±’¯[Òu?%ÐóAIŸcÂíÛOè-ð³äuÄÔëtc¨>Ã}¦Ï“n/ñ(²ž¯ƒžoÇ÷5ñcç©Ï%†$\'¾.<¾î=cçÞcò jQ,=@逞é‡Ò4âK⃤ë€x ¤è9~ ç@úžézÀ/ûþôÌg [¨JÔD=—õѦ$]„Î}ŠÂ¹I×KêÖ\êsjÇž!ÿ^Hº 5TϽû«Uw(½éÀÆŒ}ݪ[sãÙ˾Çö¦›˜t;@ ç5JÛ˵¿8éºH}Ós9þVI·Äz^s éùEI×Eꓨž@š)–ž»Ë;Ä âÄ"âsâeâ†,±GsˆÆîáÉ{šœ”%æBb±Šø718ÒãëÕsJˉ'”¼mŒÝl)ñ±˜œ¥^­å\>&þI û;¾v ÔŽxŒøPâf'áÚz~~Žþµ‰›äüW˵¼:KLSc÷{y—ø”x–¸Âã©çÒ?༓ö׸0Ëç’×Sü—|–ùsö(Ñ&"fâN‰ùH> çx|ÛHÚ—¯»o·Ùy…¾þ€êE‘õœ_<$ßÿ—ˆùb/÷Ä)ùÓå;­[ ¿¾ïZJC$ÿn9Nâ±uPü£ôübƒbg-û»±¿1xÿÓÑò/g>é)«µäÏ—óèHŒ%îû•˜’Ç>ç]ˆ{Mô<«VPÚ\®#ï×ßØßO·I|Æo‰9ÀØß=¯‡b^ >Š¿WÏ)õ•¼Ž8ï#‰‰ -Þ¶ ÔJòY[yŸÙsåZ=.öã=çÏk)/–˜ËB×~”âßFòFK¹ÈõêvU!¯? zaŠ¯çL}'¯»ØPâ¸?²P±'Ö*ö¦RV%ïb¥bWõœÒ)ë%ïfѲ{™ÄtUbxoÔEŠ}tDYÿÆ)vþðI¯Q>z~ ±Þ8ó¹(æ+C4é Å~–Qö[÷é9NÄ~w!Ïß9F#­N¡|îc¯ðäñ}——ûÄëŠýz9VKÇèù:%†5}M±Î~BzîcHÌr=ãÉgm¸D±_NìªØÛJyÍûUb¯«Ä}ý&Ž=CÏ)!¾½=õåzuñä½môþÖ÷§Ø›É±ú:ö ?°s€äSÀkŸž³f=àÉã{ÉåŽmË,í™q&BÏÿA¼[¨óöÔ'ÐsµÿOé)&òêHyÏ#(ýÆ(ýížwUbþ }þ  zî{VÊχçQÞÁšžû<û㈸=Û¯ô\tm 1#æ¹ò}èIŽ­¡Ô÷tO ÿ¹Æ±uûnŠÿ’—ñì•Òdcïck”EÔ;=çû×{òøÙÈÓŽ­±”}Šïº{:¶ =7ö¾ ¿hQÈϽRŸ@ÏÏòäÏÔë©ø÷ÔqÆŽ‹îØ=?Jño!y'³é%¤ç/ûŒÐeǘåÆÖscÇÐM fóŒK÷ª”×ÖñÔsOùÁóøERþjÑ«zYâ¸?Vô‹Ç5=gì˜0ŽÄñÍEÏÝþY ç¯zà¼K•²î2öÞ¶FYÄù$¦çžr=ççÍ ŒÉï3îqáÿA¤ž‹Ï,ñáû13Dã}ú_=ϸÒó“‹Ý€tbŠÿüÏÇÊ+eì}ÙŒó¡t¥Gσ1E}V:^ƒ<ôœçé÷佬èÙ¶RvOÌ7JŒo<Å[Ÿã9Õ‰Ù±ô\b‡gì;¥í¤¼îŠ?ÿßØ`2ÇCBϱ)ž/QòÚi}JK=åõ÷èy™¦’7ÒÕm±ûæ«ó¼Oð#csJM$ož’ü*zQßØùÄë=zô—û(eu‘¼Ã -|x~tÖçÓ”$–+ö ÚOÉ{ƒ˜¦Øƒ¹ÜÝ»OσöŸ•¥Ž7‰ß'Äþy¶C¶ñpü'cƒäÓ>·”–ç7‹ØƒyîgzˆM ô|è$¯“U—8ÉØ~ë³JL0gŒ¿ïc9ÐTŒj§ÄÍ’ïp^coc×x ¾Û5ñé9¯™ÂëËe¬Afì3v^7®½±÷ç7—sÙ ÇyÆÓ<Ïm­©˜/Àc肱úëƒûÌáGâb'cûÐ|žçå?Z„ëÿ$ñžïTc×¼Ù„ãw¨Ô™çôfìo«]c‡ïg<#0v _®§hæéFÆÞ+þQëÉã˽ëÉÈõ Ú9¯µWLv=!ù¼^QCù,ós“`ýŸŒu)/y\÷–âÏ¿ËxÝ¿¹Š?ôS‚çç¦âh+oè‰ëE|&~kä_^KC½ß.1õŒ³>ƷĵžcD­ô&8v^Sìi篽­êy(žµªQè½WsD;¾ ‡ûó£‹øà5LW:çö?ÅïxS±¾[]ûmDÙü{æ#'†ïÃìëi#UÏ%ÿ-ßu“üÑ¡cä5OŸÒ®Qz.>|hµs.?·FÄðoš÷þ¬f̥ȢçÁúÐs€J ô¼—¼çõ5ø>ëî9Æóx*îÓl“Ç1ëKLÆœóžÏçþé.•(c ñl9ä·ëQ;éωS¯F¢½óä³\O¾o²E‘ëÖ*Îõ7ÏÊÁw7cûËò(/¹–%ë¨y”@ÏÕ1Ñ5J'KÛžt]À/×ä~cïQl–t] %ÐóAIŸcÂíÛOè-ð³ÔuÆ™¯JzMn ]žïøœ|VÕµÛ YÏ×AÏ7ãûÚؽ\øù/ïÑ2$ézÕdäsÉã y Ï‘äµkòUbé9JôH?Æî_Íóp2öâ@:þ9Ï~!éº ¸ß¤è9~ ç@úžéz¤Ÿ"¯ÇûHM þLÜ! à½/<1[S²µ—U3c÷b›˜¥n¼'iy¨NÌݮǟ÷7å=ÁTò¶!âº)yÙÎ%#&i¤=ª\½DSd=çoK̯÷‹dîSb¶Åøx(☽Cå×ðãýÒ¿“zÍ3vïb»Hñ?8TîáNÞ%AžÇû˜q.¯%}ý•:Ï!¾Lºò£zž±~;k¦ä wìž÷yL^ý)㜿Mz®û‰-sò=ÿåäñþß/DèùŒ¤¯qžm8 zé# =—ü‰O[eõœÿt!ž'&Eøeèy(ûì“[ ç#ˆBömÅ~n5Òó ç>Ôó®’ß d‹­ç”Ž–ØFÆî¹&Â7JÏÇï9¶@Ï÷”'öžòþÄ$ôœÒÄ;DgcŸ|J !v'«‰Û#âï%þaìÞo¼Ü¡ÄÝÐsH êyɯ²UFÏyLÛ;òú$)§±Ç7JÏ_8¶@Ï÷#^"F‹ý)cÇ÷‘ žó‹Ÿ‰Bmº8…è!ï»+±/H޵ƮßÄM†ž@úHPÏÏ9¶Êèù?Œ?§´¥”ÓÛãWÏbm4v½ûbkHœ“°ž -ÙxüÝ¡÷Üÿ¾Ç‰ t¾µco!vè9¤Œžû³Ü@ÏG{ÿ—iE´3öÞ.çµsb=ÿ ÄÊ0žcú}iÈÆÏÁçzücë¹¼ç?w/Éû‹#ôü}ß¹˜ˆ1ø9¶q çg‡l¬ßýœsuÇpÝ—xÊœ =€ôQ=×Xâj¹Äzþ2q¿P.ð<ö žc!q»„lC5•¼¸z~ˆ¼ççÎë‰+åýåzþ¡r.å¾sɳ=?7dc=ÿ£s®S¸§‰éž2'@Ï }„ôœÇ›·RØ1f¹áþùÂ&bn¸‰y¿ÝØ1ÙkÛ±RVÆÚ5•Ðó#B¶F¡×Qz^Šûí]C¶·ˆœsáÄAÏ šaJøüÜرçüâ/ž˜¸zþ½±Ï´§:pæPÅ?®žé‰IZÏ»…l+ˆ›CïùþùNôª¥Ôs±ÿÅ×G£ç¡ßóxlØ2%&JÏo1™óâÓ¤çü»fxèý3Ä'zÕŒô¼‰ØµµÐãèù•³­’7Ì£³Qzþ˜qÖaMJϹ ³äkzÎsÐG„Þ?GÌwâ4ÎÜ‚PÞtè9¤Rë¹äMÒúè1õ|¡‘yçJ^££WõÜر÷üâ*ÇžMϯ.´žSêhì¼rww¶ÇGÓóÏ=ÑÕnJ‰µÄöŽ}+ƒùjJÒó–’7ɱzþ è™Æ)N ÿùsD=øÏxÇìÇr’Àëµß™JÙô¼o„ž¿q.#ê=ÑTÌ(÷øhzþ•£ç¯(z^‡Xcì½ø3‰ZrMfŠ?ôRFz.ù§Òó(¦„ü[ûˆzpÿ}•c›å”ù ±”èï)#›ž_¡çQç²*¢Þ…üzz|4=ÿÞÑ󥮞‹½ŒXî´A/ƒýÕ •KÏAA®Msb¿"c7bZw@ú€žéz¤è9~ ç@úžé‡Ò4žŸD|t]ôÏ€ô=ÒôH?Ðs ý@Ï«.”ö%.NºõkÆõãu÷“® ÔtJ¡ç”ê2IŸkÒPºÀØ}Üî%&Sˆ†þ+äÚŒMºîžú}(õ»#éº@M§Dz>^Û¬&Aé~iç%Ä“Æîûöz=Ÿµ¿ZÒPš/õë“t] ¦S"=¿½&ë9¥FÒÆWLjÝ2éúg©ßVI×@Éô|d ×ó6ÒƇ&]Õ“bé9¥7ˆ¥!6Ê¿Ë„7‰¿{b/'ž'þC|.÷¨oˆzOéBb±Šø7182K{/«¥n7[x|ß!f±&³¥n|ã²õQCzYŸÐq\ŽÉ!n ´ÓÜ®ÄD‰WÏ)Ïë9ÈS7¦iDÜYÄÄ3bëà‰yDòY§xœÚPb ñ±­âÿ¥”¹¸F´²Ÿ¯í(Ýb¶ø=îØ™]¸‰!ž–¸H=§t‡ø±žNô0öÙü}b/„žwsêÆ j<\Y6=§tˆø\áØ·"~.”ž{ŽÝEÊßË“ÿ"1U±ï"q£”<î[OTì%Ö*ö@Ï3>_ÆÞ XX¬Ï5T%BzîcHŽ1.=§´§óÌ<ʾJb2îÅs9’×ısßòMOyËû—¾s0öÞûŸ"êh~ÖûíN\.zôk+y£ÖsþýsKåÏ%ŽVòŽ•¼£{ ç-•˜!ÄWÅ8w¨j”HÏÇæ¢çâËÏ¿ù^éN9úó|î#ò÷Plóµ~£ä &¾Pì¬çåž¾ïühDŠ©ç7«=y=Öóyr=[åX^g)o%ogÉëäØøΑÒù’× çU cçRµŠ`Ç#çñí”:ŸÉ÷0߯å¾ô@·_òÔsOL\=Ÿä‰a=ÿ[Äñjªž77v\$¿yÍØgâÈß{ü‹¥çÛãü ¦aìX³yø70vŒÚ=¦b\s»â[J=ijˆ˜q¼©ç!¿ÆŽÙãutÞ“˜iŠôª0ÆŽ!ßXÉ2Êw󩎽”zž¡A’ÇsÞÔ±÷’_L=çqãëűµ“òRü[I^[Ç=€A©§|¯î–Åï"ñÛß“ÿ½Éœ—h^'Å_}noì|v~±·’ÇkÑ<¬ØYÏg{êõ/âùˆó*šž‹ßÇ~—hOÔ!;Gpf6=§4C|^‹q];úôÜTÌ#<ÇËÏ(ÊÛóŠÿ`ÉÛѱGéùÐs(”Ž—ïÕrc×bi/´V|?0v7ž»Ä÷Xyo¶ýŒ]+†×ri®ÄðºmŸÈ÷÷ÞÄÆ>WæÌ~ŠÑíŒ]³d;âpcûíìP¦Ä°žûÖ³ág‹"Î?'=§t„hdÀ 78lWâx¼ÁÃæ×ón3vý;¯ž;G=“q=²Ô÷tŸž‡® o?S´º®üÖÎK;—a’ÇëÈìC4!úŠ-c·,z¬Y=€aìz¬ÁX¨€Œ}@EÃù^ì:Ç—ïiûúzõŒ]4ìÿ-qmD}¸ÿ8ljáõ[OõøGéùGÒó1N}|øÆúoMFüFÞgg*öpãµm¶Ï󚞥çâsñµS^_·wDÌNÌÄ­ß(=¿zÅA4g9ø¶êçXv}¢¥QæœGÄìj켪FI·MÚšï=ðq›eñ;:ø gù¼¶îO9ú6‘k™ëº›Û?g¶Iº-€¤0öùFÞÏÅs,»ñ -ñdÒç TŒ}&Ý[à½b‚±g¨üA¡òù¹?;áýk~›ô¹Õ¹7ÍûØð^©»·ïc—1‡-fù<^ðòÜûmcÇð¾XG óÿçÕ“@B#‹íÃA ¡ù7}ûV$T—ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªê|róõt ^‹íÝ Œ\UÇñ¢¢$*(š¢Ä«–DÔÕmw»3;¯Ý¬D4ÅZ$4¥i@)åU¡©4­¤µZÄÖj¶ŒUIlL4jRS_J)„ZŠbZpý{›læœsgνsÏð%ùd¶ËÜÿùßÿlîoïì̱±± c688ø¦J¥¢›Á™r©,”ËåüjµZÓíkÒÔ+•J½ÚæSª9_·W™:úzj'÷±^¯Ÿ®}– ÔË5r«úZ®Û+tûiÈ[:ýXŒ×ÛÛ{¢úž¬žËê󓺽È<>¦Ý~1y¬Î/—ËCšù&L˜p\§{î¦ù@Ñéøÿž$6Ë“2æáA¹®ÑhœÔ¤æûUóNy¬Y ý¿‡å–Z­vJûi2$É‹_yî£éñ2OùxZ^‡™‡rîló»zX-;ôõ³¾=s(ÙׯÈÇ:ýsËü 6:N^/µã=gÎßÖTMÒ¿ïJ›;rmVûiÎiUC›ûil0µ²èÑäœl’GôÙ,ï×팼Îb˜?ÄjÚ´i'΋­Ê‹¹mæÍòû¨ÿ^¦º‹3ÈÆŦv¨>Ëåò‡²Êð&¶çñ\v2ÿ/}þ³ ò<åÌ‚û§Œ|§êíÌ°×AÎ;çÆÞR©TËêç+¦ù@ÌŠšç†y½W;û¦ß >¨:{rèuY«ÝÇ¢CyþZ»úg+¶ù@ÌŠœçòóV÷KÛÖuŒ?W¯ÉZõv‹Næ¹üahhèÕ¡~®bœ?ÄÌ#ÏwêX¹D·³Ìë’ÍëØK¥Ò[Í{‰ô½)Ž¹6ïŸÒuÞ}¦|Zß»×µy/SÚ}RooÔ¶{SdÁSò}ýU¹Viݯ'¯ç;”¢Î£fíV‹´y®µþ¤Ûír¾^#+ÌûôïUfL?)sq}ˆŸ©Xç1s幎«ï²m¯ûló8Î~Á²ýJǶ[ÒÙè™ÛµuÔ:A÷›Qñü°Y»ÕÇÂ#ÏŸVý‘4ïÙªÕjæ=ÿßN‘éÓÛý™Šuþ³y>Õq|u¾VÝv¬ÖöÿH³?Éûç}²$õûâT{™g¦|®•ÇÂ'Ï[}œÍó¿k -¬nçç)æù@Ì\y®cã»]5çNÎãvrÍ8[^¯u2û¢û>ïq¼ŸÝê¼´í•õŸ7½¤­ežÊô³Tã¿®þûûûOmõg)æù@ÌBä¹îs›eûu>}è¾ÏYúø¬O ó¼¾Ç±þÊvgVñx/µío ÍdçIïs\½Ë%­ÔŽ}þ³@y¾Ð²½×kÔu¿]–—{ÖxØqœßjnÇkM/ikzäùþ@½ÿÞ±ÎÚVêÆ>ˆ™+ÏÍ5Ý]5lç|:®þƧÝw«¥ÆM®íuŸ™çl•PsKþíZofššyå¹¹¾¯£ï?¶P3úù@ÌBä¹ãïß»}ú¨ù¼‘f5VzlïzýÖг³ý’Ø–¦^^ynSWöõõML9‹èç1Ë!ÏÿâÓ‡-ÏUÿk=X?w̼ß=ôì’÷ÐÛΟMS/¯/E­®˜?Ä,‡<̧[¾¨þ7ÛºŽéK³šŸ©*Ë\ynÎEö}«£ïY)juÅü f9<ßþwŸ>yþ-Ƕ®kÎÈj~ƒG®co[{§o­œóüÇZóRÔêŠù@Ìr8?Ò§[žËíŽmwÓ§f5¿Šãz·¦7ßZ9çùeŽµ®JQ«+æ1Ë!ÏŸòéÑçw8¶µ~—ëôí0µyrÈ·Vžy®µ.rô}o­n™?Ä,‡çÛ½2È–çªq§eí×9Žç©ßK†©íZßôèS«Hy®µøÔé¦ù@Ìr8??èÓ‡-Ïå;–µÏpÏ{zzŽÏj~¦¶GžœáS«Hy^ñüü³nš?Ä,Dž;®ëñ/Ÿ>y¾ºÙvFãT×ñ¼¿¿ÿµYÍÏÔv­ozô©U°<¿Î§N7Íbèü¼éµ»ÍuÈ|ú°å¹j¬i¶Ý”)S^é:žë÷·g5?SÛµ¾éѧ–GžÕ·Çóí×ûÔé¦ù@Ìåù…–‡}ú0™mÉ–ïÚ¶Õ}ö;²é}YÍÏÔvä‰÷5`Š”ç²È·V·ÌbèóÕfYj¼àÓ‡ÉlKï9ÖßíÈ“‘¬ægj;òÄëóhŒ‚åù ¾µºeþ³@?¿X÷=ØŒO&³-yð}Ƕ÷9òÄû½Ôi™ÚŽ<¹Ï·V‘ò\kÝè[«[æ1 ‘ç!˜Ì¶äÁ:Ƕ+ÇôµYõmj;²l…o-ë·çy~¾8Åc×ó€˜%ϵÖ:KëmÛê˜}®ã˜þPV}›ÚŽµÏõ­U¤6»¶¯V«“Çö ¯R½Û]뙞ÒÔŒ9Ï»aþ³¢ä¹Žõ[,9°Å§†î»ÞuŒ×y]o»½j&C®u*Ž×ð5©mžwÃü fEÉs­uw€<ô8Îï­×ë“[í3É\×ó¼Æ`‹µcÎó¨ç1+PžßÓnž'ušþ^0ÎïtžøÞzœ.xÔ¿»•ä™çû5ýZÊóØç1+Jž+?~"ÏK¥Ò›µÍ>c¾1ß³·W˜÷oyÖÜgzheyîu­=Ï}šEžÇ<ˆYQò\ký(Džºÿ¨ç±ßÔ6Ù³JûyŽÉÓF£ñ¶z½~º¾îÓ÷—VŽ\‡öß)ê¶:ƒ<ó\µæd‘çíÎß|^Z§æ1+Pžo •ç†¶¹Í7B1k¶3ƒœÏÏçf•ç±ÎbV”<×±øÇ!óÜHÎïòÊ“T×_y1¥R©7¯” I¶˜¿ÝÿVžHrã°ì•_'¯Ó[ªÛiÝ6‡N?îEœ? ;è¿ã:ÝÃKó¼T”J¥Ó?R­V/Ðí¼J¥²XÉ|}ïâr¹üqÝNêtŸ422rbhÞ'@ÜFGG_®Üž­¼Þ&ûḋ¶9 Û_êöË&ÿ;½yÒ~ô“¯Nï NÊàd¹²ä逹´C5—È´Ðý6“ªÕj¿jW†††&vrvä9 ”‹g+Cv‡Î¤cLÑk½^Ÿœ?&wÆI¡ÏTôõ™Þoo†’×Usç ¹¢¯ÏÒçÍPÒçÏæÎWU·Û}mì7ÝôÞNd?5¾~#œÕ»îàãéÞ>ñ˜sçX,â¹ó¢ -þ\Òç7V\N¡XÎ!}f¿tÔrÏG…m.z¿}Cî|EÒ} Ò{=áæ’íØÚñøo†•¹ó4YÏ«c733ó®>³?>ê ¹çcÈùZŸ;ßB¢‹ 7`~Ö:÷`a¹;\Ÿn¾¢ëžÉo»¬ï7ŒzŽb;•îËŸ{ûš$w‡ëóÑÍW“>ï5²œ2Î}%–ÿh˜Ë½M‘»ÃõùHçë©Üùz/ªkŸñþ;Àf¹;\Ÿt¾žÌ/úõÚº÷›+V,ɽݹåîp}>ÒùZ—9Ûwúë»ÃÙáýñ`*þíóÿŽø~Ugóõk×ô±¬_瞀Üâytï2ñ<{iÉóéiU–S¦ßìéæ~µ¹Ï£ŸÈ•«âģŒ¿O×–WYfìwûÆï|¯âr?—{nš.ž+¿]ô\º˜î'Óæ>OïWdÚ?VU<Ž>mÀå_eùñzmÏÜóÐdú¼9šØçéýî -ÇÏǹޣp˜× “b‚ú¼ñŸg’2ä,þ1_¡gOѺÎ-yÍð§ÜóÐd“Òç‹áóL"çÆ‚üfȳ¶¤Ë/ÕºŽ;î¸cy­ozzº›{ŽšjRú¼ÓðûŸ÷æâÙ‚>¤æ,G—ŒçºxÌn#ž¿5%¯ÉÎÊ=GM5A}Þ¨û¥î ÿ†‚ü×¼_|·¤[?;êuÎÍÍP2‡×çž#€¦š”>oÒýR òõùkÎòÏ¢ñœššÚ}Lë½£)c°˜LJŸwpµ -ù×¼y¨®éžl%¯®׺cÙ–¬{ŸÜóÐD“Òç9ïÇÒÇ\`þ' òß_cŽ¿—ôyN_Î=OMÔ¦>/º~»³ÎŽŒë -ŽKï«qw˜£ÎÏ=OMÔ¦>ïŸ^ÛùdCÌEö>õìÚ€ÎÞ¡È÷ƒÜóÐDmêó’óÉjûûóùŸ(Èo¦§§ß˜»³Kúü§¹ç  ‰ÚÔç‚óÉb;kûûóù/˜‹×´?ì•»³Kúü7¹ç  ‰ÚÔç%÷­åøv‘ñ±Ü}>??ÿâ1wòs ظEúÜœ­<»€[sÏ@µ©Ï›p|;dþG›?ÖõpÑ>‘{œø-ëóFôásñHòǺî,Ú';ì°—ç+¶Õ¦>oJªä¸¸¶ü1Ž7íÝn÷-¹Ç -€mµ¬Ïï+Ø–ÆßO&³×„ü±®sŠö‰ÈùáÜcÀ¶ÚÔçâûšmÌo˜üéü°÷‰ù¢}"\{¬ØV›ú<¶åö’ãÊ]sg, ó×õwën·»gIŸ§±Ü-÷xð¼6õyä][²-oÎq˜ü³³³ûÕ˜¥ðœ¸ð¥ÜãÀóZÖç?/é #rg,Éÿ‹’câ•5î_-;F¯óõÅÚÔç±-ç•ôቹ3‰Œç—tèÉue™žž~CYŸ‡Ës›µ¬Ï?]Òç?˱$ÿ)%ýùËšó|«¬Óã1æ7Z×çG•ôÏútÜ™;gAþ²óÊ7¥ÏK©+OÌý[+£'çï´ÓN/È=~“¬M}>;;ûê -Ýsqîœ;rðÁ¿¦BþsjÞ?¾R±Óo›™™™õú—-[ö²Üó°´©Ï{Ûsm…÷ˆ¿^uyéx8¿:ý^·Û]:îü±ž*ä_ÝÇxìNŠßÛ_0Óõ;=ùIxÏ0c055µwd=¶³ùú½sïS‹A ûü¤*½ûG|]Ýq`z>¼.~¶üìáC©ó·ïÖÔ15ä/<`+7††CÓµà‡~ø«z¯=Þ?û@:®×m—ÿcƒdŠ1Ú¯ä³Ùß{âëeá„”1ö£·ÅÏö {¤ëÛãX~ß”5~~H|ý`<æóá’î!ðxî} -`1h[Ÿ/Y²d—Èý`?ÝÓGG7îüsss¯ì®Ì0ùÏ4Wz3ŽLUäÞ§ƒ¶õyo›NSÞTGþ8v=}LÝ8Ô{×±ý±ˆÎ=u÷¹ëÜʵ±Ï“ÈþÛ1ôùudOçŠÇºnC7ýÞuìoŠl·ÔÙçé¼ÿÜû@ÓµµÏ§¦¦vmûݺåEu䟛›{}¬ï£Î¿fÍš¡¯+[¹råKb¾ËÛPSŸŸ™{hº¶öyoÛÒ¹Ý׌°[î™™9 ®ü³³³{2ú|øtþßÇwXîÙ5ô¹{Ö”hsŸoµÇ„»쓇ÂÅñûG.ÒüëÂ¥éòqåKçÕÇ:NÝþ|ú!ú;ýþ‡ésÖ—-[öªÜûÀbî×Q$w¾QJ×_§k·{רÿ5¾ÞžéuÈÓéø;Üß_•ú)š;óÖºÝî‘éSé¾µñõ¶”7}.z/ÚŽ»ÃÚøþû麽t—ºïÛ¶téÒWôîswAÊnŽïÿÖ{]´¥³ÓûôõÆ?½N¹2œ‘~¯éŸ@s¥kÜrgÆb9†M¯-b¬wÎFá¼#|ô‹íà ¡õ/}ëñ(X]ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªêÄWÁUW@B#‹íÃA ¡ù7}ûV$T—ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªê|róõt#‹íÃA ¡ù7}ûV$T—ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªê|róõtä‹íÝKˆEðï"¾AA£ (h|“hP£ A0¨ÁwÀW‚‚â# ˆ J4ÉÎöÌš¨˜ƒï(‚ºžÍE½xÐCAŒˆ¢^9x‘¶ºw³Û»3=ÙwÓˆ¿ÃYºê«ê­Ëjzº'ÏóÈà-qlÞŠ KX`íqy—c4½Žp¤ÅÒ¼Ÿ%¿%y?¤œ\VS{njO}öUúï+mýæÝǤ¾kÓû†Sÿ¯“?jæ?Øwœ,žO¾›Uóc:¶±ñµ€#!‹­5:S¯ÚvÜžèSw ìS?÷Ûsš;‹_kê×¥ö=‡©í4¾Æ°²hÍʾíùhÜöËËÓë¥éتdSòUWíH\4«ö±äºT»:Õ~<+W—ÔÌ_Íó/Êù³x4¹1sI©÷¤×WzÔž’Ú~Ÿª'óV,-?ïïÄméØ·•s»³ñµ€…Љû+y·§¼îWnqúûœäõßE«»§­úLšÁó|Ù¬9^+ï];tž×–”×úGã–Æ×J+®L™÷Íï÷êÞO< öpµ›jçÏâáó¼ÐIï!Š÷!Ýsþ=ëÜŸh|­`¡ßÿ.~¬>“ÿLžîYÛŠ5©moš½)o×ô·úü¸aò¼0'çÏëýÛpų^Û®±ð?ÒŠ£Sö]–Ï^ïÄÍéõŠ”—§Í±¶ø|{m©ø»‰óß‹Òü7¥ ¿5‰åéï3_S€ÿ˜U—ÈÈô‹íà ¡õ/}ëñ(X]ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªêÄWÁUW@B \ No newline at end of file diff --git a/assets/monofileLogo.png b/assets/monofileLogo.png deleted file mode 100644 index 5f016bd1f84ccac60705b351500833166fc5e70d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220957 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

)gXsRAhJd4#wx8Bjj+g^&JhS# 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

wRJ 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 O0000 { + + ctx.header("Content-Type", "image/webp") + return ctx.body( await readFile("./assets/moller.png") ) + +}) + //app.use(bodyParser.text({limit:(config.maxDiscordFileSize*config.maxDiscordFiles)+1048576,type:["application/json","text/plain"]})) // check for ssl, if not redirect From afbb29c94928a5374380a55ddfe9d232bdf2318e Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 25 Dec 2023 16:40:43 -0800 Subject: [PATCH 063/173] add moller --- assets/moller.png | Bin 0 -> 216279 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/moller.png diff --git a/assets/moller.png b/assets/moller.png new file mode 100644 index 0000000000000000000000000000000000000000..076cacf1158c249df570b46ba470144d78997aef GIT binary patch literal 216279 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 Date: Tue, 26 Dec 2023 13:29:06 -0800 Subject: [PATCH 064/173] does anyone else have uncontrollable urges to meow --- config.json | 4 +- package-lock.json | 14 +++ package.json | 1 + src/server/cli.ts | 123 +++++++++++++++++++ src/server/lib/DiscordAPI/DiscordRequests.ts | 22 +++- src/server/lib/DiscordAPI/index.ts | 7 +- src/server/lib/files.ts | 19 ++- 7 files changed, 176 insertions(+), 14 deletions(-) create mode 100644 src/server/cli.ts diff --git a/config.json b/config.json index 6122a78..a1c051e 100644 --- a/config.json +++ b/config.json @@ -1,8 +1,8 @@ { - "maxDiscordFiles": 50, + "maxDiscordFiles": 500, "maxDiscordFileSize": 10485760, "targetGuild": "906767804575928390", - "targetChannel": "1160783463696302182", + "targetChannel": "1024080525993971913", "requestTimeout": 120000, "maxUploadIdLength": 30, "accounts": { diff --git a/package-lock.json b/package-lock.json index 394b168..6b017a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "axios": "^0.27.2", "body-parser": "^1.20.0", "bytes": "^3.1.2", + "commander": "^11.1.0", "cookie-parser": "^1.4.6", "dotenv": "^16.0.2", "express": "^4.18.1", @@ -757,6 +758,14 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "engines": { + "node": ">=16" + } + }, "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", @@ -2420,6 +2429,11 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==" + }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", diff --git a/package.json b/package.json index 714b036..84071a7 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "axios": "^0.27.2", "body-parser": "^1.20.0", "bytes": "^3.1.2", + "commander": "^11.1.0", "cookie-parser": "^1.4.6", "dotenv": "^16.0.2", "express": "^4.18.1", diff --git a/src/server/cli.ts b/src/server/cli.ts new file mode 100644 index 0000000..54b1d49 --- /dev/null +++ b/src/server/cli.ts @@ -0,0 +1,123 @@ +import fs from "fs" +import { stat } from "fs/promises" +import Files from "./lib/files" +import { program } from "commander" +import { basename } from "path" +import { Writable } from "node:stream" +const pkg = require(`${process.cwd()}/package.json`) +let config = require(`${process.cwd()}/config.json`) + +// init data + +if (!fs.existsSync(__dirname + "/../../.data/")) + fs.mkdirSync(__dirname + "/../../.data/") + +// discord +let files = new Files(config) + +program + .name("monocli") + .description("Quickly run monofile to execute a query or so") + .version(pkg.version) + +program.command("list") + .alias("ls") + .description("List files in the database") + .action(() => { + Object.keys(files.files).forEach(e => console.log(e)) + }) + + +program.command("download") + .alias("dl") + .description("Download a file from the database") + .argument("", "ID of the file you'd like to download") + .option("-o, --output ", 'Folder or filename to output to') + .action(async (id, options) => { + + await (new Promise(resolve => setTimeout(() => resolve(), 1000))) + + let fp = files.files[id] + + if (!fp) + throw `file ${id} not found` + + let out = options.output as string || `./` + + if (fs.existsSync(out) && (await stat(out)).isDirectory()) + out = `${out.replace(/\/+$/, "")}/${fp.filename}` + + ;(await files.readFileStream(id)).pipe( + fs.createWriteStream(out) + ) + }) + + +program.command("upload") + .alias("up") + .description("Upload a file to the instance") + .argument("", "Path to the file you'd like to upload") + .option("-id, --fileid ", 'Custom file ID to use') + .action(async (file, options) => { + + await (new Promise(resolve => setTimeout(() => resolve(), 1000))) + + if (!(fs.existsSync(file) && (await stat(file)).isFile())) + throw `${file} is not a file` + + let writable = files.writeFileStream({ + filename: basename(file), + mime: "application/octet-stream", + size: (await stat(file)).size, + uploadId: options.fileid + }) + + if (!(writable instanceof Writable)) + throw JSON.stringify(writable, null, 3) + + ;(await fs.createReadStream(file)).pipe( + writable + ) + + console.log(`started: ${file}`) + + writable.on("drain", () => { + console.log("Drain") + }) + + writable.on("finish", () => { + console.log("Finished!") + }) + + writable.on("error", (e) => { + console.error(e) + }) + + }) + + +program.command("memup") + .description("Upload a file to the instance (no stream)") + .argument("", "Path to the file you'd like to upload") + .option("-id, --fileid ", 'Custom file ID to use') + .action(async (file, options) => { + + await (new Promise(resolve => setTimeout(() => resolve(), 1000))) + + if (!(fs.existsSync(file) && (await stat(file)).isFile())) + throw `${file} is not a file` + + let buf = fs.readFileSync(file) + + let id = files.uploadFile({ + filename: basename(file), + mime: "application/octet-stream", + uploadId: options.fileid + }, buf) + + console.log(`uploaded: ${await id}`) + + }) + + +program.parse() \ No newline at end of file diff --git a/src/server/lib/DiscordAPI/DiscordRequests.ts b/src/server/lib/DiscordAPI/DiscordRequests.ts index 365395a..89b244f 100644 --- a/src/server/lib/DiscordAPI/DiscordRequests.ts +++ b/src/server/lib/DiscordAPI/DiscordRequests.ts @@ -1,4 +1,19 @@ -import fetch, { type RequestInit, type Response, Headers } from "node-fetch" +import { type RequestInfo, type RequestInit, type Response, Headers } from "node-fetch" + +// I jerk off to skibidi toilet. His smile is so fucking hot, oh my god, oh. +// The voices are getting louder, help me. Oh god, i want to put it inside that toilet and make him beg. +// Whenever i see skibidi toilet cum comes out like a waterfall. +// Whenever my classmates say anything about toilets the entire school gets flooded with cum everywhere. +// Dafuqboom is truly the best artist of all time. + +let ftch_dft: (url: URL | RequestInfo, init?:RequestInit) => Promise +const fetch = async (url: URL | RequestInfo, init?:RequestInit) => { + if (ftch_dft) return ftch_dft(url, init) + else { + ftch_dft = (await import("node-fetch")).default; + return ftch_dft(url, init) + } +} const base = "https://discord.com/api/v10" const buckets = new Map() @@ -64,14 +79,14 @@ class DiscordAPIBucket { let rd = extractRatelimitData(base) this.parent = rest - this.name = rd.bucket_name + this.name = rd.bucket_name || Math.random().toString() this.limit = rd.limit this.remaining = rd.remaining this.expires = rd.expires this.expirationHold = setTimeout( - this.destroy, + this.destroy.bind(this), parseFloat(base.get("x-ratelimit-reset-after")!) ) @@ -81,7 +96,6 @@ class DiscordAPIBucket { * @description Renders this bucket invalid */ destroy() { - buckets.delete(this.name) this.dead = true this.linked_routes.forEach((v) => routeConnections.delete(v)) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index ceee7bf..5de1403 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -79,9 +79,12 @@ export class Client { let returned = await this.rest.fetch(`/channels/${this.targetChannel}/messages`, { method: "POST", - body: fd + body: fd, + headers: fd.getHeaders() }) - return (await returned.json() as APIMessage) + let response = (await returned.json() as APIMessage) + console.log(JSON.stringify(response, null, 4)) + return response } } \ No newline at end of file diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 72a3fbf..8b2fa32 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -114,9 +114,11 @@ namespace StreamHelpers { private newmessage_debounce : boolean = true api: API + files: Files - constructor( api: API, targetSize: number ) { - this.api = api + constructor( files: Files, targetSize: number ) { + this.files = files + this.api = files.api this.targetSize = targetSize } @@ -152,7 +154,11 @@ namespace StreamHelpers { if (this.buffer[0]) return this.buffer[0] else { // startmessage.... idk - await this.startMessage(0); + await this.startMessage( + this.messages.length < Math.ceil(this.targetSize/this.files.config.maxDiscordFileSize/10) + ? 10 + : Math.ceil(this.targetSize/this.files.config.maxDiscordFileSize) - this.messages.length*10 + ); return this.buffer[0] } } @@ -165,12 +171,13 @@ export default class Files { config: Configuration api: API files: { [key: string]: FilePointer } = {} + data_directory: string = `${process.cwd()}/.data` constructor(config: Configuration) { this.config = config this.api = new API(process.env.TOKEN!, config.targetChannel) - readFile(process.cwd() + "/.data/files.json") + readFile(this.data_directory+ "/files.json") .then((buf) => { this.files = JSON.parse(buf.toString() || "{}") }) @@ -215,7 +222,7 @@ export default class Files { ) if (validation) return validation - let buf = new StreamHelpers.StreamBuffer(this.api, metadata.size) + let buf = new StreamHelpers.StreamBuffer(this, metadata.size) let fs_obj = this let wt = new Writable({ @@ -398,7 +405,7 @@ export default class Files { */ async write(): Promise { await writeFile( - process.cwd() + "/.data/files.json", + this.data_directory + "/files.json", JSON.stringify( this.files, null, From b80ddd26e7c35707de3670fd890f40286883c1c9 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Dec 2023 16:37:04 -0800 Subject: [PATCH 065/173] awh fuck it --- src/server/cli.ts | 18 +++++++++++++----- src/server/lib/DiscordAPI/index.ts | 2 +- src/server/lib/files.ts | 7 ++++++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/server/cli.ts b/src/server/cli.ts index 54b1d49..e8bf6f3 100644 --- a/src/server/cli.ts +++ b/src/server/cli.ts @@ -75,24 +75,32 @@ program.command("upload") if (!(writable instanceof Writable)) throw JSON.stringify(writable, null, 3) - ;(await fs.createReadStream(file)).pipe( - writable - ) - console.log(`started: ${file}`) writable.on("drain", () => { - console.log("Drain") + console.log("Drained") }) writable.on("finish", () => { console.log("Finished!") }) + writable.on("pipe", () => { + console.log("Piped") + }) + writable.on("error", (e) => { console.error(e) }) + writable.on("close", () => { + console.log("Closed.") + }) + + + ;(await fs.createReadStream(file)).pipe( + writable + ) }) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 5de1403..19460d4 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -76,7 +76,7 @@ export class Client { chunks.forEach((v,x) => { fd.append(`files[${x}]`, v, { filename: Math.random().toString().slice(2) }) }) - + let returned = await this.rest.fetch(`/channels/${this.targetChannel}/messages`, { method: "POST", body: fd, diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 8b2fa32..c8eb321 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -124,6 +124,8 @@ namespace StreamHelpers { private async startMessage(streamCount: number): Promise { + console.log(`Starting a message with ${streamCount} stream(s)`) + if (!this.newmessage_debounce) return this.newmessage_debounce = false @@ -136,6 +138,7 @@ namespace StreamHelpers { uploaded: 0, stream: new Readable({ read() { + console.log('FD is reading stream. Emitting drain...') sbuf.writable!.emit("drain"); } }) @@ -151,6 +154,7 @@ namespace StreamHelpers { } async getNextStream() { + console.log("Getting next stream...") if (this.buffer[0]) return this.buffer[0] else { // startmessage.... idk @@ -227,6 +231,7 @@ export default class Files { let wt = new Writable({ async write(data: Buffer) { + console.log("Write to stream attempted") let positionInBuf = 0 while (positionInBuf < data.byteLength) { let ns = (await buf.getNextStream().catch(e => { @@ -249,7 +254,7 @@ export default class Files { positionInBuf += bytesToPush if (ns.uploaded == fs_obj.config.maxDiscordFileSize) - buf.buffer.splice(0, 1)[0]?.stream.destroy() + buf.buffer.splice(0, 1)[0]?.stream.push(null) if (buf.filled == buf.targetSize) { this.destroy() From 1805c631f1c2d2dd2cd37686bfe4b872186f51be Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 27 Dec 2023 13:51:22 -0800 Subject: [PATCH 066/173] i cant believe it took me this long to realize --- src/server/cli.ts | 30 +--- src/server/lib/DiscordAPI/index.ts | 56 ++++++-- src/server/lib/files.ts | 224 ++++------------------------- 3 files changed, 79 insertions(+), 231 deletions(-) diff --git a/src/server/cli.ts b/src/server/cli.ts index e8bf6f3..323f40d 100644 --- a/src/server/cli.ts +++ b/src/server/cli.ts @@ -78,7 +78,7 @@ program.command("upload") console.log(`started: ${file}`) writable.on("drain", () => { - console.log("Drained") + console.log("Drained"); }) writable.on("finish", () => { @@ -95,37 +95,11 @@ program.command("upload") writable.on("close", () => { console.log("Closed.") - }) - + }); ;(await fs.createReadStream(file)).pipe( writable ) }) - -program.command("memup") - .description("Upload a file to the instance (no stream)") - .argument("", "Path to the file you'd like to upload") - .option("-id, --fileid ", 'Custom file ID to use') - .action(async (file, options) => { - - await (new Promise(resolve => setTimeout(() => resolve(), 1000))) - - if (!(fs.existsSync(file) && (await stat(file)).isFile())) - throw `${file} is not a file` - - let buf = fs.readFileSync(file) - - let id = files.uploadFile({ - filename: basename(file), - mime: "application/octet-stream", - uploadId: options.fileid - }, buf) - - console.log(`uploaded: ${await id}`) - - }) - - program.parse() \ No newline at end of file diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 19460d4..e8c5435 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -2,6 +2,7 @@ import { REST } from "./DiscordRequests" import type { APIMessage } from "discord-api-types/v10" import FormData from "form-data" import { Readable } from "node:stream" +import { Configuration } from "../files" const EXPIRE_AFTER = 20 * 60 * 1000 const DISCORD_EPOCH = 1420070400000 @@ -22,12 +23,14 @@ export class Client { private readonly token : string private readonly rest : REST private readonly targetChannel : string + private readonly config : Configuration private messageCache : Map = new Map() - constructor(token: string, targetChannel: string) { + constructor(token: string, config: Configuration) { this.token = token this.rest = new REST(token) - this.targetChannel = targetChannel + this.targetChannel = config.targetChannel + this.config = config } async fetchMessage(id: string, cache: boolean = true) { @@ -70,21 +73,56 @@ export class Client { } - async send(chunks: (Readable|Buffer)[]) { - // make formdata - let fd = new FormData() - chunks.forEach((v,x) => { - fd.append(`files[${x}]`, v, { filename: Math.random().toString().slice(2) }) + async send(stream: Readable) { + + let bytes_sent = 0 + let file_number = 0 + let boundary = "-".repeat(20) + Math.random().toString().slice(2) + + let pushBoundary = (stream: Readable) => + stream.push(`--${boundary}\r\nContent-Disposition: form-data, name="files[${file_number}]"; filename="${Math.random().toString().slice(2)}\r\nContent-Type: application/octet-stream\r\n\r\n"`) + let boundPush = (stream: Readable, chunk: Buffer) => { + + let position = 0 + while (position < chunk.length) { + let capture = Math.min( + this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize), + chunk.length + ) + 1 + stream.push( chunk.subarray(position, capture) ) + position += capture, bytes_sent += capture-1 + + console.log("Chunk progress:", bytes_sent % this.config.maxDiscordFileSize, "B") + + if (bytes_sent % this.config.maxDiscordFileSize == 0) { + console.log("Progress is 0. Pushing boundary") + pushBoundary(stream) + } + } + + + } + + let transformed = new Readable({ + read(size) { + let result = stream.read(size) + if (result) boundPush(this, result) + } }) + pushBoundary(transformed) + let returned = await this.rest.fetch(`/channels/${this.targetChannel}/messages`, { method: "POST", - body: fd, - headers: fd.getHeaders() + body: transformed, + headers: { + "Content-Type": `multipart/form-data; boundary=${boundary}` + } }) let response = (await returned.json() as APIMessage) console.log(JSON.stringify(response, null, 4)) return response + } } \ No newline at end of file diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index c8eb321..2ad2887 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -107,7 +107,7 @@ namespace StreamHelpers { readonly targetSize: number filled: number = 0 - buffer: UploadStream[] = [] + current?: Readable messages: string[] = [] writable?: Writable @@ -122,48 +122,40 @@ namespace StreamHelpers { this.targetSize = targetSize } - private async startMessage(streamCount: number): Promise { + private async startMessage(): Promise { - console.log(`Starting a message with ${streamCount} stream(s)`) if (!this.newmessage_debounce) return this.newmessage_debounce = false - let streams = [] let sbuf = this + let stream = new Readable({ + read() { + console.log("Read called. Emitting drain") + sbuf.writable!.emit("drain") + } + }) + stream.pause() + + console.log(`Starting a message`) + this.api.send(stream).then(message => { + this.messages.push(message.id) + console.log(`Sent: ${message.id}`) + this.newmessage_debounce = true + }) - // can't think of a better way to do - for (let i = 0; i < streamCount; i++) { - streams.push({ - uploaded: 0, - stream: new Readable({ - read() { - console.log('FD is reading stream. Emitting drain...') - sbuf.writable!.emit("drain"); - } - }) - }) - } - - let message = await this.api.send(streams.map(e => e.stream)); - this.messages.push(message.id) - this.newmessage_debounce = true - - return streams + return stream } async getNextStream() { - console.log("Getting next stream...") - if (this.buffer[0]) return this.buffer[0] + console.log("Getting stream...") + if (this.current) return this.current else { // startmessage.... idk - await this.startMessage( - this.messages.length < Math.ceil(this.targetSize/this.files.config.maxDiscordFileSize/10) - ? 10 - : Math.ceil(this.targetSize/this.files.config.maxDiscordFileSize) - this.messages.length*10 - ); - return this.buffer[0] + this.current = await this.startMessage(); + console.log("current:" + (this.current ? "yes" : "no")) + return this.current } } @@ -179,7 +171,7 @@ export default class Files { constructor(config: Configuration) { this.config = config - this.api = new API(process.env.TOKEN!, config.targetChannel) + this.api = new API(process.env.TOKEN!, config) readFile(this.data_directory+ "/files.json") .then((buf) => { @@ -230,39 +222,14 @@ export default class Files { let fs_obj = this let wt = new Writable({ - async write(data: Buffer) { + write(data: Buffer, encoding, callback) { console.log("Write to stream attempted") - let positionInBuf = 0 - while (positionInBuf < data.byteLength) { - let ns = (await buf.getNextStream().catch(e => { - - return e - })) as Error | undefined | StreamHelpers.UploadStream - if (!ns || ns instanceof Error) { - this.destroy(ns) - return - } - - let bytesToPush = Math.min( - data.byteLength, - fs_obj.config.maxDiscordFileSize-ns.uploaded - ) - - ns.stream.push(data.subarray(positionInBuf, positionInBuf + bytesToPush)) - ns.uploaded += bytesToPush - buf.filled += bytesToPush - positionInBuf += bytesToPush - - if (ns.uploaded == fs_obj.config.maxDiscordFileSize) - buf.buffer.splice(0, 1)[0]?.stream.push(null) - - if (buf.filled == buf.targetSize) { - this.destroy() - return - } - } - return false - } + buf.getNextStream().then(ns => { + if (ns) {ns.push(data); callback()} else this.end(); + console.log(`pushed... ${ns ? "ns exists" : "ns doesn't exist"}... ${data.byteLength} byte chunk`); + return + }) + }, }) buf.writable = wt; @@ -271,137 +238,6 @@ export default class Files { } - /** - * @description Uploads a new file - * @param metadata Settings for your new upload - * @param buffer Buffer containing file content - * @returns Promise which resolves to the ID of the new file - */ - async uploadFile( - metadata: FileUploadSettings, - buffer: Buffer - ): Promise { - - if (!metadata.filename || !metadata.mime) - throw { status: 400, message: "missing filename/mime" } - - let uploadId = (metadata.uploadId || generateFileId()).toString() - - if ( - (uploadId.match(id_check_regex) || [])[0] != uploadId || - uploadId.length > this.config.maxUploadIdLength - ) - throw { status: 400, message: "invalid id" } - - if ( - this.files[uploadId] && - (metadata.owner - ? this.files[uploadId].owner != metadata.owner - : true) - ) - throw { - status: 400, - message: "you are not the owner of this file id", - } - - if (this.files[uploadId] && this.files[uploadId].reserved) - throw { - status: 400, - message: - "already uploading this file. if your file is stuck in this state, contact an administrator", - } - - if (metadata.filename.length > 128) - throw { status: 400, message: "name too long" } - - if (metadata.mime.length > 128) - throw { status: 400, message: "mime too long" } - - // reserve file, hopefully should prevent - // large files breaking - - let existingFile = this.files[uploadId] - - // save - - if (metadata.owner) { - await files.index(metadata.owner, uploadId) - } - - // get buffer - if ( - buffer.byteLength >= - this.config.maxDiscordFileSize * this.config.maxDiscordFiles - ) - throw { status: 400, message: "file too large" } - - // generate buffers to upload - let toUpload = [] - for ( - let i = 0; - i < Math.ceil(buffer.byteLength / this.config.maxDiscordFileSize); - i++ - ) { - toUpload.push( - buffer.subarray( - i * this.config.maxDiscordFileSize, - Math.min( - buffer.byteLength, - (i + 1) * this.config.maxDiscordFileSize - ) - ) - ) - } - - // begin uploading - let uploadGroups = [] - - for (let i = 0; i < Math.ceil(toUpload.length / 10); i++) { - uploadGroups.push(toUpload.slice(i * 10, (i + 1) * 10)) - } - - let msgIds = [] - - for (const uploadGroup of uploadGroups) { - let message = await this.api.send(uploadGroup) - - if (message) { - msgIds.push(message.id) - } else { - if (!existingFile) delete this.files[uploadId] - else this.files[uploadId] = existingFile - throw { status: 500, message: "please try again" } - } - } - - if (existingFile) this.api.deleteMessages(existingFile.messageids) - - const { filename, mime, owner } = metadata - - this.files[uploadId] = { - filename, - messageids: msgIds, - mime, - owner, - sizeInBytes: buffer.byteLength, - - visibility: existingFile - ? existingFile.visibility - : metadata.owner - ? Accounts.getFromId(metadata.owner)?.defaultFileVisibility - : undefined, - // so that json.stringify doesnt include tag:undefined - ...((existingFile || {}).tag ? { tag: existingFile.tag } : {}), - - chunkSize: this.config.maxDiscordFileSize, - } - - return this.write().then(_ => uploadId).catch(_ => { - delete this.files[uploadId] - throw { status: 500, message: "failed to save database" } - }) - } - // fs /** From 9a1cb3d6e1a0f2d6b752caa76cda7908d0727a57 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 27 Dec 2023 15:37:07 -0800 Subject: [PATCH 067/173] All of my neurons are completely fried --- src/server/lib/DiscordAPI/index.ts | 16 +++++++++++----- src/server/lib/files.ts | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index e8c5435..a332463 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -80,17 +80,18 @@ export class Client { let boundary = "-".repeat(20) + Math.random().toString().slice(2) let pushBoundary = (stream: Readable) => - stream.push(`--${boundary}\r\nContent-Disposition: form-data, name="files[${file_number}]"; filename="${Math.random().toString().slice(2)}\r\nContent-Type: application/octet-stream\r\n\r\n"`) + stream.push(`${file_number == 0 ? "" : "\r\n"}--${boundary}\r\nContent-Disposition: form-data; name="files[${file_number}]"; filename="${Math.random().toString().slice(2)}\r\nContent-Type: application/octet-stream\r\n\r\n"`) let boundPush = (stream: Readable, chunk: Buffer) => { - let position = 0 - while (position < chunk.length) { + console.log(`Chunk length ${chunk.byteLength}`) + while (position < chunk.byteLength) { let capture = Math.min( this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize), - chunk.length + chunk.byteLength ) + 1 + console.log(`Capturing ${capture} bytes`) stream.push( chunk.subarray(position, capture) ) - position += capture, bytes_sent += capture-1 + position += capture, bytes_sent += capture console.log("Chunk progress:", bytes_sent % this.config.maxDiscordFileSize, "B") @@ -107,6 +108,11 @@ export class Client { read(size) { let result = stream.read(size) if (result) boundPush(this, result) + if (result === null) { + console.log("Ending") + this.push(`\r\n--${boundary}--`) + this.push(null) + } } }) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 2ad2887..1d634f7 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -135,7 +135,7 @@ namespace StreamHelpers { sbuf.writable!.emit("drain") } }) - stream.pause() + //stream.pause() console.log(`Starting a message`) this.api.send(stream).then(message => { From 0f9bcba740a7ef79f48eaf4f3a62c9805853662f Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 28 Dec 2023 15:09:09 -0800 Subject: [PATCH 068/173] meeow! mreeow! nya! --- src/server/lib/DiscordAPI/index.ts | 16 ++++++++-------- src/server/lib/files.ts | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index a332463..4a740b4 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -79,8 +79,8 @@ export class Client { let file_number = 0 let boundary = "-".repeat(20) + Math.random().toString().slice(2) - let pushBoundary = (stream: Readable) => - stream.push(`${file_number == 0 ? "" : "\r\n"}--${boundary}\r\nContent-Disposition: form-data; name="files[${file_number}]"; filename="${Math.random().toString().slice(2)}\r\nContent-Type: application/octet-stream\r\n\r\n"`) + let pushBoundary = (stream: Readable) => + stream.push(`${(file_number++) == 0 ? "" : "\n"}--${boundary}\nContent-Disposition: form-data; name="files[${file_number}]"; filename="${Math.random().toString().slice(2)}\nContent-Type: application/octet-stream\n\n`) let boundPush = (stream: Readable, chunk: Buffer) => { let position = 0 console.log(`Chunk length ${chunk.byteLength}`) @@ -88,14 +88,14 @@ export class Client { let capture = Math.min( this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize), chunk.byteLength - ) + 1 - console.log(`Capturing ${capture} bytes`) + ) + console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, capture).byteLength}`) stream.push( chunk.subarray(position, capture) ) position += capture, bytes_sent += capture console.log("Chunk progress:", bytes_sent % this.config.maxDiscordFileSize, "B") - if (bytes_sent % this.config.maxDiscordFileSize == 0) { + if ((bytes_sent % this.config.maxDiscordFileSize) == 0) { console.log("Progress is 0. Pushing boundary") pushBoundary(stream) } @@ -105,12 +105,12 @@ export class Client { } let transformed = new Readable({ - read(size) { - let result = stream.read(size) + read() { + let result = stream.read() if (result) boundPush(this, result) if (result === null) { console.log("Ending") - this.push(`\r\n--${boundary}--`) + this.push(`\n--${boundary}--`) this.push(null) } } diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 1d634f7..2ad2887 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -135,7 +135,7 @@ namespace StreamHelpers { sbuf.writable!.emit("drain") } }) - //stream.pause() + stream.pause() console.log(`Starting a message`) this.api.send(stream).then(message => { From c6e9e25973c33466f2388a8f1ba16bd408d391b3 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 29 Feb 2024 21:08:47 -0800 Subject: [PATCH 069/173] this is a mess and still definitely incomplete --- package.json | 3 +- src/server/cli.ts | 21 +- src/server/index.ts | 10 +- src/server/lib/DiscordAPI/DiscordRequests.ts | 1 + src/server/lib/DiscordAPI/index.ts | 4 +- src/server/lib/accounts.ts | 4 +- src/server/lib/files.ts | 246 ++++++++++++------- src/server/lib/middleware.ts | 6 +- src/server/lib/ratelimit.ts | 2 +- src/server/routes/api.ts | 2 +- src/server/routes/api/v0/adminRoutes.ts | 10 +- src/server/routes/api/v0/authRoutes.ts | 14 +- src/server/routes/api/v0/fileApiRoutes.ts | 6 +- src/server/routes/api/v0/primaryApi.ts | 14 +- src/server/routes/api/v1/account.ts | 12 +- src/server/routes/api/v1/admin.ts | 12 +- src/server/routes/api/v1/customization.ts | 8 +- src/server/routes/api/v1/file.ts | 2 +- src/server/routes/api/v1/public.ts | 2 +- src/server/routes/preview.ts | 8 +- src/server/tsconfig.json | 104 ++++++++ tsconfig.json | 110 +-------- 22 files changed, 339 insertions(+), 262 deletions(-) create mode 100644 src/server/tsconfig.json diff --git a/package.json b/package.json index 84071a7..729f6c4 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,12 @@ "version": "1.4.0-dev", "description": "Discord-based file sharing", "main": "index.js", + "type": "module", "scripts": { "start": "node ./out/server/index.js", "test": "echo \"Error: no test specified\" && exit 1", "dev": "vite", - "build": "tsc && vite build", + "build": "tsc --build src/server && vite build", "preview": "vite preview" }, "keywords": [], diff --git a/src/server/cli.ts b/src/server/cli.ts index 323f40d..768d975 100644 --- a/src/server/cli.ts +++ b/src/server/cli.ts @@ -1,14 +1,17 @@ import fs from "fs" import { stat } from "fs/promises" -import Files from "./lib/files" +import Files from "./lib/files.js" import { program } from "commander" import { basename } from "path" import { Writable } from "node:stream" -const pkg = require(`${process.cwd()}/package.json`) -let config = require(`${process.cwd()}/config.json`) +import pkg from "../../package.json" assert { type: "json" } +import config from "../../config.json" assert { type: "json" } +import { fileURLToPath } from "url" +import { dirname } from "path" // init data +const __dirname = dirname(fileURLToPath(import.meta.url)) if (!fs.existsSync(__dirname + "/../../.data/")) fs.mkdirSync(__dirname + "/../../.data/") @@ -65,12 +68,12 @@ program.command("upload") if (!(fs.existsSync(file) && (await stat(file)).isFile())) throw `${file} is not a file` - let writable = files.writeFileStream({ - filename: basename(file), - mime: "application/octet-stream", - size: (await stat(file)).size, - uploadId: options.fileid - }) + let writable = files.createWriteStream() + + writable + .setName(file) + ?.setType("application/octet-stream") + ?.setUploadId(options.fileId) if (!(writable instanceof Writable)) throw JSON.stringify(writable, null, 3) diff --git a/src/server/index.ts b/src/server/index.ts index 24acb97..040f580 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -3,10 +3,10 @@ import { serveStatic } from "@hono/node-server/serve-static" import { Hono } from "hono" import fs from "fs" import { readFile } from "fs/promises" -import Files from "./lib/files" -import { getAccount } from "./lib/middleware" -import APIRouter from "./routes/api" -import preview from "./routes/preview" +import Files from "./lib/files.js" +import { getAccount } from "./lib/middleware.js" +import APIRouter from "./routes/api.js" +import preview from "./routes/preview.js" const pkg = require(`${process.cwd()}/package.json`) const app = new Hono() @@ -117,4 +117,4 @@ serve( } ) -export = app +export default app diff --git a/src/server/lib/DiscordAPI/DiscordRequests.ts b/src/server/lib/DiscordAPI/DiscordRequests.ts index 89b244f..7e53f9e 100644 --- a/src/server/lib/DiscordAPI/DiscordRequests.ts +++ b/src/server/lib/DiscordAPI/DiscordRequests.ts @@ -1,3 +1,4 @@ +// working around typescript cause i can't think of anything better :upside_down: import { type RequestInfo, type RequestInit, type Response, Headers } from "node-fetch" // I jerk off to skibidi toilet. His smile is so fucking hot, oh my god, oh. diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 4a740b4..8ef8386 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -1,8 +1,8 @@ -import { REST } from "./DiscordRequests" +import { REST } from "./DiscordRequests.js" import type { APIMessage } from "discord-api-types/v10" import FormData from "form-data" import { Readable } from "node:stream" -import { Configuration } from "../files" +import { Configuration } from "../files.js" const EXPIRE_AFTER = 20 * 60 * 1000 const DISCORD_EPOCH = 1420070400000 diff --git a/src/server/lib/accounts.ts b/src/server/lib/accounts.ts index d456841..efbbe03 100644 --- a/src/server/lib/accounts.ts +++ b/src/server/lib/accounts.ts @@ -1,7 +1,7 @@ import crypto from "crypto" -import * as auth from "./auth"; +import * as auth from "./auth.js"; import { readFile, writeFile } from "fs/promises" -import { FileVisibility } from "./files"; +import { FileVisibility } from "./files.js"; // this is probably horrible // but i don't even care anymore diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 2ad2887..cc92f43 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -1,19 +1,18 @@ import { readFile, writeFile } from "node:fs/promises" import { Readable, Writable } from "node:stream" import crypto from "node:crypto" -import { files } from "./accounts" -import { Client as API } from "./DiscordAPI" +import { files } from "./accounts.js" +import { Client as API } from "./DiscordAPI/index.js" import type {APIAttachment} from "discord-api-types/v10" +import "dotenv" -import * as Accounts from "./accounts" +import * as Accounts from "./accounts.js" export let id_check_regex = /[A-Za-z0-9_\-\.\!\=\:\&\$\,\+\;\@\~\*\(\)\']+/ export let alphanum = Array.from( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" ) -require("dotenv").config() - // bad solution but whatever export type FileVisibility = "public" | "anonymous" | "private" @@ -96,73 +95,159 @@ async function startPushingWebStream(stream: Readable, webStream: ReadableStream } } -namespace StreamHelpers { +export class WebError extends Error { - export interface UploadStream { - uploaded: number // number of bytes uploaded - stream : Readable - } - - export class StreamBuffer { - - readonly targetSize: number - filled: number = 0 - current?: Readable - messages: string[] = [] - writable?: Writable - - private newmessage_debounce : boolean = true - - api: API - files: Files - - constructor( files: Files, targetSize: number ) { - this.files = files - this.api = files.api - this.targetSize = targetSize - } - - private async startMessage(): Promise { - - - if (!this.newmessage_debounce) return - this.newmessage_debounce = false - - let sbuf = this - let stream = new Readable({ - read() { - console.log("Read called. Emitting drain") - sbuf.writable!.emit("drain") - } - }) - stream.pause() - - console.log(`Starting a message`) - this.api.send(stream).then(message => { - this.messages.push(message.id) - console.log(`Sent: ${message.id}`) - this.newmessage_debounce = true - }) + readonly statusCode: number = 500 - return stream - - } - - async getNextStream() { - console.log("Getting stream...") - if (this.current) return this.current - else { - // startmessage.... idk - this.current = await this.startMessage(); - console.log("current:" + (this.current ? "yes" : "no")) - return this.current - } - } - + constructor(status: number, message: string) { + super(message) + this.statusCode = status } } +export class UploadStream extends Writable { + + uploadId?: string + name?: string + mime?: string + owner?: string + + files: Files + + error?: Error + + constructor(files: Files, owner?: string) { + super() + this.owner = owner + this.files = files + } + + // implementing some stuff + + _write(data: Buffer, encoding: string, callback: () => void) { + console.log("Write to stream attempted") + this.getNextStream().then(ns => { + if (ns) {ns.push(data); callback()} else this.end(); + console.log(`pushed... ${ns ? "ns exists" : "ns doesn't exist"}... ${data.byteLength} byte chunk`); + return + }) + } + + _destroy(error: Error | null) { + this.error = error || undefined + + if (error instanceof WebError) return // destroyed by self + if (error) this.abort() // destroyed externally... + } + + /** + * @description Cancel & unlock the file. When destroy() is called with a non-WebError, this is automatically called + */ + async abort() { + if (!this.destroyed) this.destroy() + await this.files.api.deleteMessages(this.messages) + } + + /** + * @description Commit the file to the database + * @returns The file's ID + */ + async commit() { + if (this.errored) throw this.error + if (!this.closed) { + let err = Error("attempted to commit file without closing the stream") + this.destroy(err); throw err + } + + // Perform checks + if (!this.mime) throw new WebError(400, "no mime provided") + if (!this.name) throw new WebError(400, "no filename provided") + if (!this.uploadId) this.setUploadId(generateFileId()) + + // commit to db here... + } + + // exposed methods + + setName(name: string) { + if (this.name) + return this.destroy( new WebError(400, "duplicate attempt to set filename") ) + if (name.length > 512) + return this.destroy( new WebError(400, "filename can be a maximum of 512 characters") ) + + this.name = name; + } + + setType(type: string) { + if (this.mime) + return this.destroy( new WebError(400, "duplicate attempt to set mime type") ) + if (type.length > 256) + return this.destroy( new WebError(400, "mime type can be a maximum of 256 characters") ) + + this.mime = type; + } + + setUploadId(id: string) { + if (this.uploadId) + return this.destroy( new WebError(400, "duplicate attempt to set upload ID") ) + if (id.match(id_check_regex)?.[0] != id + || id.length > this.files.config.maxUploadIdLength) + return this.destroy( new WebError(400, "invalid file ID") ) + + // There's more stuff to check here! + // Make sure to check if the upload ID is locked + // and if the user owns this file... + + this.uploadId = id + return this + } + + // merged StreamBuffer helper + + filled: number = 0 + current?: Readable + messages: string[] = [] + + private newmessage_debounce : boolean = true + + private async startMessage(): Promise { + + + if (!this.newmessage_debounce) return + this.newmessage_debounce = false + + let stream = new Readable({ + read() { + console.log("Read called. Emitting drain") + this.emit("drain") + } + }) + stream.pause() + + console.log(`Starting a message`) + this.files.api.send(stream).then(message => { + this.messages.push(message.id) + console.log(`Sent: ${message.id}`) + this.newmessage_debounce = true + }) + + return stream + + } + + private async getNextStream() { + console.log("Getting stream...") + if (this.current) return this.current + else { + // startmessage.... idk + this.current = await this.startMessage(); + console.log("current:" + (this.current ? "yes" : "no")) + return this.current + } + } +} + export default class Files { config: Configuration api: API @@ -209,33 +294,8 @@ export default class Files { ) } - writeFileStream(metadata: FileUploadSettings & { size: number }) { - - let uploadId = (metadata.uploadId || generateFileId()).toString() - - let validation = this.validateUpload( - {...metadata, uploadId} - ) - if (validation) return validation - - let buf = new StreamHelpers.StreamBuffer(this, metadata.size) - let fs_obj = this - - let wt = new Writable({ - write(data: Buffer, encoding, callback) { - console.log("Write to stream attempted") - buf.getNextStream().then(ns => { - if (ns) {ns.push(data); callback()} else this.end(); - console.log(`pushed... ${ns ? "ns exists" : "ns doesn't exist"}... ${data.byteLength} byte chunk`); - return - }) - }, - }) - - buf.writable = wt; - - return wt - + createWriteStream(owner?: string) { + return new UploadStream(this, owner) } // fs diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index d666410..c63feec 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -1,7 +1,7 @@ -import * as Accounts from "./accounts" +import * as Accounts from "./accounts.js" import { Handler as RequestHandler } from "hono" -import ServeError from "../lib/errors" -import * as auth from "./auth" +import ServeError from "../lib/errors.js" +import * as auth from "./auth.js" /** * @description Middleware which adds an account, if any, to ctx.get("account") diff --git a/src/server/lib/ratelimit.ts b/src/server/lib/ratelimit.ts index afc1344..d39350f 100644 --- a/src/server/lib/ratelimit.ts +++ b/src/server/lib/ratelimit.ts @@ -1,5 +1,5 @@ import type { Handler } from "hono" -import ServeError from "./errors" +import ServeError from "./errors.js" interface RatelimitSettings { requests: number diff --git a/src/server/routes/api.ts b/src/server/routes/api.ts index 9ce21ee..31cd0a7 100644 --- a/src/server/routes/api.ts +++ b/src/server/routes/api.ts @@ -1,6 +1,6 @@ import { Hono } from "hono" import { readFile, readdir } from "fs/promises" -import Files from "../lib/files" +import Files from "../lib/files.js" const APIDirectory = __dirname + "/api" diff --git a/src/server/routes/api/v0/adminRoutes.ts b/src/server/routes/api/v0/adminRoutes.ts index 25c8820..d66d389 100644 --- a/src/server/routes/api/v0/adminRoutes.ts +++ b/src/server/routes/api/v0/adminRoutes.ts @@ -1,15 +1,15 @@ import { Hono } from "hono" -import * as Accounts from "../../../lib/accounts" -import * as auth from "../../../lib/auth" +import * as Accounts from "../../../lib/accounts.js" +import * as auth from "../../../lib/auth.js" import { writeFile } from "fs/promises" -import { sendMail } from "../../../lib/mail" +import { sendMail } from "../../../lib/mail.js" import { getAccount, requiresAccount, requiresAdmin, requiresPermissions, -} from "../../../lib/middleware" -import Files from "../../../lib/files" +} from "../../../lib/middleware.js" +import Files from "../../../lib/files.js" export let adminRoutes = new Hono<{ Variables: { diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts index c075ef6..8c3ccf5 100644 --- a/src/server/routes/api/v0/authRoutes.ts +++ b/src/server/routes/api/v0/authRoutes.ts @@ -1,22 +1,22 @@ import { Hono, Handler } from "hono" import { getCookie, setCookie } from "hono/cookie" -import * as Accounts from "../../../lib/accounts" -import * as auth from "../../../lib/auth" -import { sendMail } from "../../../lib/mail" +import * as Accounts from "../../../lib/accounts.js" +import * as auth from "../../../lib/auth.js" +import { sendMail } from "../../../lib/mail.js" import { getAccount, noAPIAccess, requiresAccount, requiresPermissions, -} from "../../../lib/middleware" -import { accountRatelimit } from "../../../lib/ratelimit" +} from "../../../lib/middleware.js" +import { accountRatelimit } from "../../../lib/ratelimit.js" -import ServeError from "../../../lib/errors" +import ServeError from "../../../lib/errors.js" import Files, { FileVisibility, generateFileId, id_check_regex, -} from "../../../lib/files" +} from "../../../lib/files.js" import { writeFile } from "fs/promises" diff --git a/src/server/routes/api/v0/fileApiRoutes.ts b/src/server/routes/api/v0/fileApiRoutes.ts index 4a8935e..59e5207 100644 --- a/src/server/routes/api/v0/fileApiRoutes.ts +++ b/src/server/routes/api/v0/fileApiRoutes.ts @@ -1,12 +1,12 @@ import { Hono } from "hono" -import * as Accounts from "../../../lib/accounts" +import * as Accounts from "../../../lib/accounts.js" import { writeFile } from "fs/promises" -import Files from "../../../lib/files" +import Files from "../../../lib/files.js" import { getAccount, requiresAccount, requiresPermissions, -} from "../../../lib/middleware" +} from "../../../lib/middleware.js" export let fileApiRoutes = new Hono<{ Variables: { diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 763ea9c..29ccfc2 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -1,15 +1,15 @@ import bodyParser from "body-parser" import { Hono } from "hono" -import * as Accounts from "../../../lib/accounts" -import * as auth from "../../../lib/auth" +import * as Accounts from "../../../lib/accounts.js" +import * as auth from "../../../lib/auth.js" import axios, { AxiosResponse } from "axios" import { type Range } from "range-parser" import multer, { memoryStorage } from "multer" import { Readable } from "stream" -import ServeError from "../../../lib/errors" -import Files from "../../../lib/files" -import { getAccount, requiresPermissions } from "../../../lib/middleware" +import ServeError from "../../../lib/errors.js" +import Files from "../../../lib/files.js" +import { getAccount, requiresPermissions } from "../../../lib/middleware.js" let parser = bodyParser.json({ type: ["text/plain", "application/json"], @@ -27,7 +27,7 @@ let config = require(`${process.cwd()}/config.json`) primaryApi.use(getAccount) -module.exports = function (files: Files) { +module.exports = function (files: Files) {/* primaryApi.get( ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], async (ctx) => { @@ -114,7 +114,7 @@ module.exports = function (files: Files) { return ServeError(ctx, 404, "file not found") } } - ) + )*/ // primaryApi.head( // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 8a39cee..0e78f5b 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -6,18 +6,18 @@ import { getCookie, setCookie } from "hono/cookie" // Libs -import Files, { id_check_regex } from "../../../lib/files" -import * as Accounts from "../../../lib/accounts" -import * as Authentication from "../../../lib/auth" +import Files, { id_check_regex } from "../../../lib/files.js" +import * as Accounts from "../../../lib/accounts.js" +import * as Authentication from "../../../lib/auth.js" import { assertAPI, getAccount, noAPIAccess, requiresAccount, requiresPermissions, -} from "../../../lib/middleware" -import ServeError from "../../../lib/errors" -import { sendMail } from "../../../lib/mail" +} from "../../../lib/middleware.js" +import ServeError from "../../../lib/errors.js" +import { sendMail } from "../../../lib/mail.js" const Configuration = require(`${process.cwd()}/config.json`) diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts index a56e821..608dcd9 100644 --- a/src/server/routes/api/v1/admin.ts +++ b/src/server/routes/api/v1/admin.ts @@ -5,17 +5,17 @@ import { Hono } from "hono" // Libs -import Files, { id_check_regex } from "../../../lib/files" -import * as Accounts from "../../../lib/accounts" -import * as Authentication from "../../../lib/auth" +import Files, { id_check_regex } from "../../../lib/files.js" +import * as Accounts from "../../../lib/accounts.js" +import * as Authentication from "../../../lib/auth.js" import { getAccount, noAPIAccess, requiresAccount, requiresAdmin, -} from "../../../lib/middleware" -import ServeError from "../../../lib/errors" -import { sendMail } from "../../../lib/mail" +} from "../../../lib/middleware.js" +import ServeError from "../../../lib/errors.js" +import { sendMail } from "../../../lib/mail.js" const Configuration = require(`${process.cwd()}/config.json`) diff --git a/src/server/routes/api/v1/customization.ts b/src/server/routes/api/v1/customization.ts index 1a3308d..a578f4c 100644 --- a/src/server/routes/api/v1/customization.ts +++ b/src/server/routes/api/v1/customization.ts @@ -1,12 +1,12 @@ import { Hono } from "hono" -import Files, { id_check_regex } from "../../../lib/files" -import * as Accounts from "../../../lib/accounts" +import Files, { id_check_regex } from "../../../lib/files.js" +import * as Accounts from "../../../lib/accounts.js" import { getAccount, requiresAccount, requiresPermissions, -} from "../../../lib/middleware" -import ServeError from "../../../lib/errors" +} from "../../../lib/middleware.js" +import ServeError from "../../../lib/errors.js" const Configuration = require(`${process.cwd()}/config.json`) diff --git a/src/server/routes/api/v1/file.ts b/src/server/routes/api/v1/file.ts index 8511bc7..d83d3b7 100644 --- a/src/server/routes/api/v1/file.ts +++ b/src/server/routes/api/v1/file.ts @@ -1,5 +1,5 @@ import { Hono } from "hono"; -import Files from "../../../lib/files"; +import Files from "../../../lib/files.js"; const router = new Hono() diff --git a/src/server/routes/api/v1/public.ts b/src/server/routes/api/v1/public.ts index 09ce314..ef7f85c 100644 --- a/src/server/routes/api/v1/public.ts +++ b/src/server/routes/api/v1/public.ts @@ -1,5 +1,5 @@ import { Hono } from "hono" -import Files from "../../../lib/files" +import Files from "../../../lib/files.js" const router = new Hono() diff --git a/src/server/routes/preview.ts b/src/server/routes/preview.ts index 1ed177b..3d9c9e3 100644 --- a/src/server/routes/preview.ts +++ b/src/server/routes/preview.ts @@ -1,11 +1,11 @@ import fs from "fs/promises" import bytes from "bytes" -import ServeError from "../lib/errors" -import * as Accounts from "../lib/accounts" +import ServeError from "../lib/errors.js" +import * as Accounts from "../lib/accounts.js" import type { Handler } from "hono" -import type Files from "../lib/files" +import type Files from "../lib/files.js" const pkg = require(`${process.cwd()}/package.json`) -export = (files: Files): Handler => +export default (files: Files): Handler => async (ctx) => { let acc = ctx.get("account") as Accounts.Account const fileId = ctx.req.param("fileId") diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json new file mode 100644 index 0000000..b4e501b --- /dev/null +++ b/src/server/tsconfig.json @@ -0,0 +1,104 @@ +{ + "include":["**/*"], + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "nodenext", /* Specify what module code is generated. */ + //"rootDir": "./src/", /* Specify the root folder within your source files. */ + "moduleResolution": "nodenext", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "../../out/server", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/tsconfig.json b/tsconfig.json index e7dbb82..38121b9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,104 +1,12 @@ { - "include":["src/server/**/*"], "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./src/", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./out/server", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "skipLibCheck": true + }, + "files": [ + "package.json", "config.json" + ] } From 31f95ea41d0c6d20fb78d93146a7c968acac5d89 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 1 Mar 2024 10:59:51 -0800 Subject: [PATCH 070/173] unfinished but i'm in class and i'm running out of time so I'm just gonna commit what I have in the web editor --- src/server/lib/files.ts | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index cc92f43..4d2cec6 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -125,13 +125,28 @@ export class UploadStream extends Writable { // implementing some stuff - _write(data: Buffer, encoding: string, callback: () => void) { + async _write(data: Buffer, encoding: string, callback: () => void) { console.log("Write to stream attempted") - this.getNextStream().then(ns => { - if (ns) {ns.push(data); callback()} else this.end(); - console.log(`pushed... ${ns ? "ns exists" : "ns doesn't exist"}... ${data.byteLength} byte chunk`); - return - }) + if (filled + data.byteLength > (this.files.config.maxDiscordFileSize*this.files.config.maxDiscordFiles)) + return this.destroy(new WebError(413, "maximum file size exceeded")) + + // cut up the buffer into message sized chunks + + let progress = 0 + + while (progress < data.byteLength) { + let capture = Math.min( + this.config.maxDiscordFileSize - (this.filled % this.config.maxDiscordFileSize), + chunk.byteLength + ) + console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, capture).byteLength}`) + let nextStream = await this.getNextStream() + nextStream.push( chunk.subarray(position, capture) ) + console.log(`pushed ${data.byteLength} byte chunk`); + progress += capture, this.filled += capture + } + + callback() } _destroy(error: Error | null) { @@ -217,10 +232,12 @@ export class UploadStream extends Writable { if (!this.newmessage_debounce) return this.newmessage_debounce = false + let wrt = this + let stream = new Readable({ read() { console.log("Read called. Emitting drain") - this.emit("drain") + wrt.emit("drain") } }) stream.pause() From 0621f55c20d637b885e2891a47926fc8deb6d062 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:30:12 -0800 Subject: [PATCH 071/173] i think i might have been stupid --- src/server/lib/DiscordAPI/index.ts | 6 +++--- src/server/lib/files.ts | 10 +++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 8ef8386..32d0e49 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -86,11 +86,11 @@ export class Client { console.log(`Chunk length ${chunk.byteLength}`) while (position < chunk.byteLength) { let capture = Math.min( - this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize), + this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize) + 1, chunk.byteLength ) - console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, capture).byteLength}`) - stream.push( chunk.subarray(position, capture) ) + console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, position+capture).byteLength}`) + stream.push( chunk.subarray(position, position + capture) ) position += capture, bytes_sent += capture console.log("Chunk progress:", bytes_sent % this.config.maxDiscordFileSize, "B") diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 4d2cec6..1abee84 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -136,14 +136,18 @@ export class UploadStream extends Writable { while (progress < data.byteLength) { let capture = Math.min( - this.config.maxDiscordFileSize - (this.filled % this.config.maxDiscordFileSize), + (this.config.maxDiscordFileSize*10) - (this.filled % (this.config.maxDiscordFileSize*10)) + 1, chunk.byteLength ) - console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, capture).byteLength}`) + console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, position + capture).byteLength}`) let nextStream = await this.getNextStream() - nextStream.push( chunk.subarray(position, capture) ) + nextStream.push( chunk.subarray(position, position+capture) ) console.log(`pushed ${data.byteLength} byte chunk`); progress += capture, this.filled += capture + + // message is full, so tell the next run to get a new message + if (this.filled % (this.config.maxDiscordFileSize*10) == 0) + this.current = undefined } callback() From 0a78c197a4b31262f8a16521ca27252804d4ae9e Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:45:36 -0800 Subject: [PATCH 072/173] uhhh idk --- src/server/lib/files.ts | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 1abee84..868d6a2 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -184,7 +184,25 @@ export class UploadStream extends Writable { if (!this.name) throw new WebError(400, "no filename provided") if (!this.uploadId) this.setUploadId(generateFileId()) - // commit to db here... + let ogf = this.files.files[this.uploadId] + + this.files.files[this.uploadId] = { + filename: this.name, + mime: this.mime, + messageids: this.messages, + owner: this.owner, + sizeInBytes: this.filled, + visibility: ogf ? ogf.visibility + : ( + this.owner + ? Accounts.getFromId(this.owner)?.defaultFileVisibility + : undefined + ), + // so that json.stringify doesnt include tag:undefined + ...((ogf||{}).tag ? {tag:ogf.tag} : {}), + + chunkSize: this.files.config.maxDiscordFileSize + } } // exposed methods @@ -214,9 +232,13 @@ export class UploadStream extends Writable { || id.length > this.files.config.maxUploadIdLength) return this.destroy( new WebError(400, "invalid file ID") ) - // There's more stuff to check here! - // Make sure to check if the upload ID is locked - // and if the user owns this file... + if (this.files.files[id] && this.files.files[id].owner != this.owner) + return this.destroy( new WebError(403, "you don't own this file") ) + + if (false /* check if locked here */) + return this.destroy( new WebError(409, "a file with this ID is already being uploaded") ) + + /* lock the id */ this.uploadId = id return this @@ -232,7 +254,6 @@ export class UploadStream extends Writable { private async startMessage(): Promise { - if (!this.newmessage_debounce) return this.newmessage_debounce = false From daca021522505d3ff4d313a0e527b7e68db25be2 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 2 Mar 2024 01:01:12 -0800 Subject: [PATCH 073/173] almost works --- src/server/cli.ts | 18 ++++++-- src/server/lib/DiscordAPI/index.ts | 35 +++++++-------- src/server/lib/files.ts | 69 +++++++++++++++++++++--------- src/server/tsconfig.json | 5 ++- 4 files changed, 85 insertions(+), 42 deletions(-) diff --git a/src/server/cli.ts b/src/server/cli.ts index 768d975..d2bcf58 100644 --- a/src/server/cli.ts +++ b/src/server/cli.ts @@ -50,7 +50,15 @@ program.command("download") if (fs.existsSync(out) && (await stat(out)).isDirectory()) out = `${out.replace(/\/+$/, "")}/${fp.filename}` - ;(await files.readFileStream(id)).pipe( + let filestream = await files.readFileStream(id) + + let prog=0 + filestream.on("data", dt => { + prog+=dt.byteLength + console.log(`Downloading ${fp.filename}: ${Math.floor(prog/(fp.sizeInBytes??0)*10000)/100}% (${Math.floor(prog/(1024*1024))}MiB/${Math.floor((fp.sizeInBytes??0)/(1024*1024))}MiB)`) + }) + + filestream.pipe( fs.createWriteStream(out) ) }) @@ -71,9 +79,10 @@ program.command("upload") let writable = files.createWriteStream() writable - .setName(file) + .setName(basename(file)) ?.setType("application/octet-stream") - ?.setUploadId(options.fileId) + + if (options.id) writable.setUploadId(options.id) if (!(writable instanceof Writable)) throw JSON.stringify(writable, null, 3) @@ -84,8 +93,9 @@ program.command("upload") console.log("Drained"); }) - writable.on("finish", () => { + writable.on("finish", async () => { console.log("Finished!") + console.log(`ID: ${await writable.commit()}`) }) writable.on("pipe", () => { diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 32d0e49..27e4158 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -1,7 +1,7 @@ import { REST } from "./DiscordRequests.js" import type { APIMessage } from "discord-api-types/v10" import FormData from "form-data" -import { Readable } from "node:stream" +import { Transform, type Readable } from "node:stream" import { Configuration } from "../files.js" const EXPIRE_AFTER = 20 * 60 * 1000 @@ -84,7 +84,13 @@ export class Client { let boundPush = (stream: Readable, chunk: Buffer) => { let position = 0 console.log(`Chunk length ${chunk.byteLength}`) + while (position < chunk.byteLength) { + if ((bytes_sent % this.config.maxDiscordFileSize) == 0) { + console.log("Progress is 0. Pushing boundary") + pushBoundary(stream) + } + let capture = Math.min( this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize) + 1, chunk.byteLength @@ -94,29 +100,24 @@ export class Client { position += capture, bytes_sent += capture console.log("Chunk progress:", bytes_sent % this.config.maxDiscordFileSize, "B") - - if ((bytes_sent % this.config.maxDiscordFileSize) == 0) { - console.log("Progress is 0. Pushing boundary") - pushBoundary(stream) - } } } - let transformed = new Readable({ - read() { - let result = stream.read() - if (result) boundPush(this, result) - if (result === null) { - console.log("Ending") - this.push(`\n--${boundary}--`) - this.push(null) - } + let transformed = new Transform({ + transform(chunk, encoding, callback) { + boundPush(this, chunk) + callback() + }, + flush(callback) { + this.push(`\n--${boundary}--`) + callback() } }) - - pushBoundary(transformed) + + //pushBoundary(transformed) + stream.pipe(transformed) let returned = await this.rest.fetch(`/channels/${this.targetChannel}/messages`, { method: "POST", diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 868d6a2..0f59833 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -4,7 +4,7 @@ import crypto from "node:crypto" import { files } from "./accounts.js" import { Client as API } from "./DiscordAPI/index.js" import type {APIAttachment} from "discord-api-types/v10" -import "dotenv" +import "dotenv/config" import * as Accounts from "./accounts.js" @@ -127,29 +127,46 @@ export class UploadStream extends Writable { async _write(data: Buffer, encoding: string, callback: () => void) { console.log("Write to stream attempted") - if (filled + data.byteLength > (this.files.config.maxDiscordFileSize*this.files.config.maxDiscordFiles)) + if (this.filled + data.byteLength > (this.files.config.maxDiscordFileSize*this.files.config.maxDiscordFiles)) return this.destroy(new WebError(413, "maximum file size exceeded")) // cut up the buffer into message sized chunks - let progress = 0 + let position = 0 + let readyForMore = false - while (progress < data.byteLength) { + while (position < data.byteLength) { let capture = Math.min( - (this.config.maxDiscordFileSize*10) - (this.filled % (this.config.maxDiscordFileSize*10)) + 1, - chunk.byteLength + (this.files.config.maxDiscordFileSize*10) - (this.filled % (this.files.config.maxDiscordFileSize*10)) + 1, + data.byteLength ) - console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, position + capture).byteLength}`) - let nextStream = await this.getNextStream() - nextStream.push( chunk.subarray(position, position+capture) ) + console.log(`Capturing ${capture} bytes from fl, ${data.subarray(position, position + capture).byteLength}`) + if (!this.current) await this.getNextStream() + if (!this.current) { + this.destroy(new Error("getNextStream called during debounce")); return + } + + readyForMore = this.current.push( data.subarray(position, position+capture) ) console.log(`pushed ${data.byteLength} byte chunk`); - progress += capture, this.filled += capture + position += capture, this.filled += capture // message is full, so tell the next run to get a new message - if (this.filled % (this.config.maxDiscordFileSize*10) == 0) + if (this.filled % (this.files.config.maxDiscordFileSize*10) == 0) { + this.current!.push(null) this.current = undefined + } } + if (readyForMore || !this.current) callback() + else this.once("exec-callback", callback) + } + + async _final(callback: (error?: Error | null | undefined) => void) { + if (this.current) { + this.current.push(null); + // i probably dnt need this but whateverrr :3 + await new Promise((res,rej) => this.once("debounceReleased", res)) + } callback() } @@ -174,8 +191,8 @@ export class UploadStream extends Writable { */ async commit() { if (this.errored) throw this.error - if (!this.closed) { - let err = Error("attempted to commit file without closing the stream") + if (!this.writableFinished) { + let err = Error("attempted to commit file when the stream was still unfinished") this.destroy(err); throw err } @@ -184,9 +201,9 @@ export class UploadStream extends Writable { if (!this.name) throw new WebError(400, "no filename provided") if (!this.uploadId) this.setUploadId(generateFileId()) - let ogf = this.files.files[this.uploadId] + let ogf = this.files.files[this.uploadId!] - this.files.files[this.uploadId] = { + this.files.files[this.uploadId!] = { filename: this.name, mime: this.mime, messageids: this.messages, @@ -203,6 +220,9 @@ export class UploadStream extends Writable { chunkSize: this.files.config.maxDiscordFileSize } + + await this.files.write() + return this.uploadId } // exposed methods @@ -214,6 +234,7 @@ export class UploadStream extends Writable { return this.destroy( new WebError(400, "filename can be a maximum of 512 characters") ) this.name = name; + return this } setType(type: string) { @@ -223,6 +244,7 @@ export class UploadStream extends Writable { return this.destroy( new WebError(400, "mime type can be a maximum of 256 characters") ) this.mime = type; + return this } setUploadId(id: string) { @@ -261,8 +283,9 @@ export class UploadStream extends Writable { let stream = new Readable({ read() { - console.log("Read called. Emitting drain") - wrt.emit("drain") + // this is stupid but it should work + console.log("Read called; calling on server to execute callback") + wrt.emit("exec-callback") } }) stream.pause() @@ -272,6 +295,7 @@ export class UploadStream extends Writable { this.messages.push(message.id) console.log(`Sent: ${message.id}`) this.newmessage_debounce = true + this.emit("debounceReleased") }) return stream @@ -280,12 +304,17 @@ export class UploadStream extends Writable { private async getNextStream() { console.log("Getting stream...") + console.log("current:" + (this.current ? "yes" : "no")) if (this.current) return this.current - else { + else if (this.newmessage_debounce) { // startmessage.... idk this.current = await this.startMessage(); - console.log("current:" + (this.current ? "yes" : "no")) return this.current + } else { + return new Promise((resolve, reject) => { + console.log("Waiting for debounce to be released...") + this.once("debounceReleased", async () => resolve(await this.getNextStream())) + }) } } } @@ -523,7 +552,7 @@ export default class Files { let result = await currentPusher() if (result?.streamDone) currentPusher = undefined; - return result?.readyForMore + return result?.streamDone || result?.readyForMore } diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index b4e501b..a5a0c6a 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -100,5 +100,8 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + }, + "references": [ + { "path": "../../tsconfig.json" } + ] } From 549f7de7acecbd1c7c0bc4cda9b78619d401bcfa Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 3 Mar 2024 17:03:36 -0800 Subject: [PATCH 074/173] IT.S DONE FUCK --- src/server/lib/DiscordAPI/index.ts | 13 +++++++++---- src/server/lib/files.ts | 10 ++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 27e4158..000bef2 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -80,7 +80,7 @@ export class Client { let boundary = "-".repeat(20) + Math.random().toString().slice(2) let pushBoundary = (stream: Readable) => - stream.push(`${(file_number++) == 0 ? "" : "\n"}--${boundary}\nContent-Disposition: form-data; name="files[${file_number}]"; filename="${Math.random().toString().slice(2)}\nContent-Type: application/octet-stream\n\n`) + stream.push(`${(file_number++) == 0 ? "" : "\r\n"}--${boundary}\r\nContent-Disposition: form-data; name="files[${file_number}]"; filename="${Math.random().toString().slice(2)}\r\nContent-Type: application/octet-stream\r\n\r\n`) let boundPush = (stream: Readable, chunk: Buffer) => { let position = 0 console.log(`Chunk length ${chunk.byteLength}`) @@ -92,8 +92,8 @@ export class Client { } let capture = Math.min( - this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize) + 1, - chunk.byteLength + (this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize)) + 1, + chunk.byteLength-position ) console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, position+capture).byteLength}`) stream.push( chunk.subarray(position, position + capture) ) @@ -111,7 +111,7 @@ export class Client { callback() }, flush(callback) { - this.push(`\n--${boundary}--`) + this.push(`\r\n--${boundary}--`) callback() } }) @@ -127,6 +127,11 @@ export class Client { } }) + + if (!returned.ok) { + throw new Error(`[Message creation] ${returned.status} ${returned.statusText}`) + } + let response = (await returned.json() as APIMessage) console.log(JSON.stringify(response, null, 4)) return response diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 0f59833..56ed8c2 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -137,10 +137,10 @@ export class UploadStream extends Writable { while (position < data.byteLength) { let capture = Math.min( - (this.files.config.maxDiscordFileSize*10) - (this.filled % (this.files.config.maxDiscordFileSize*10)) + 1, - data.byteLength + ((this.files.config.maxDiscordFileSize*10) - (this.filled % (this.files.config.maxDiscordFileSize*10))) + 1, + data.byteLength-position ) - console.log(`Capturing ${capture} bytes from fl, ${data.subarray(position, position + capture).byteLength}`) + console.log(`Capturing ${capture} bytes for megachunk, ${data.subarray(position, position + capture).byteLength}`) if (!this.current) await this.getNextStream() if (!this.current) { this.destroy(new Error("getNextStream called during debounce")); return @@ -161,7 +161,7 @@ export class UploadStream extends Writable { else this.once("exec-callback", callback) } - async _final(callback: (error?: Error | null | undefined) => void) { + async _final(callback: (error?: Error | null | undefined) => void) { if (this.current) { this.current.push(null); // i probably dnt need this but whateverrr :3 @@ -491,6 +491,8 @@ export default class Files { return null } + console.log(msgIdx,position,scanning_chunk.size) + let headers: HeadersInit = useRanges ? { From 25afbf493cbee0d6138be3d9e8e69f6a94c3707f Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 3 Mar 2024 19:03:18 -0800 Subject: [PATCH 075/173] Server now runs --- src/server/index.ts | 9 ++-- src/server/lib/DiscordAPI/index.ts | 2 +- src/server/lib/files.ts | 2 +- src/server/lib/mail.ts | 7 ++- src/server/routes/api.ts | 28 +++++++---- src/server/routes/api/v0/adminRoutes.ts | 4 +- src/server/routes/api/v0/authRoutes.ts | 5 +- src/server/routes/api/v0/fileApiRoutes.ts | 3 +- src/server/routes/api/v0/primaryApi.ts | 58 +++++++---------------- src/server/routes/api/v1/account.ts | 4 +- src/server/routes/api/v1/admin.ts | 4 +- src/server/routes/api/v1/customization.ts | 5 +- src/server/routes/api/v1/file.ts | 2 +- src/server/routes/api/v1/public.ts | 2 +- src/server/routes/preview.ts | 3 +- 15 files changed, 59 insertions(+), 79 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index 040f580..35c5faa 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -7,10 +7,12 @@ import Files from "./lib/files.js" import { getAccount } from "./lib/middleware.js" import APIRouter from "./routes/api.js" import preview from "./routes/preview.js" +import {fileURLToPath} from "url" +import {dirname} from "path" +import pkg from "../../package.json" assert {type:"json"} +import config from "../../config.json" assert {type:"json"} -const pkg = require(`${process.cwd()}/package.json`) const app = new Hono() -let config = require(`${process.cwd()}/config.json`) app.get( "/static/assets/*", @@ -72,6 +74,7 @@ app.get("/server", (ctx) => // init data +const __dirname = dirname(fileURLToPath(import.meta.url)) if (!fs.existsSync(__dirname + "/../.data/")) fs.mkdirSync(__dirname + "/../.data/") @@ -117,4 +120,4 @@ serve( } ) -export default app +export default app \ No newline at end of file diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 000bef2..5dd29e5 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -92,7 +92,7 @@ export class Client { } let capture = Math.min( - (this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize)) + 1, + (this.config.maxDiscordFileSize - (bytes_sent % this.config.maxDiscordFileSize)), chunk.byteLength-position ) console.log(`Capturing ${capture} bytes, ${chunk.subarray(position, position+capture).byteLength}`) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 56ed8c2..50a2721 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -137,7 +137,7 @@ export class UploadStream extends Writable { while (position < data.byteLength) { let capture = Math.min( - ((this.files.config.maxDiscordFileSize*10) - (this.filled % (this.files.config.maxDiscordFileSize*10))) + 1, + ((this.files.config.maxDiscordFileSize*10) - (this.filled % (this.files.config.maxDiscordFileSize*10))), data.byteLength-position ) console.log(`Capturing ${capture} bytes for megachunk, ${data.subarray(position, position + capture).byteLength}`) diff --git a/src/server/lib/mail.ts b/src/server/lib/mail.ts index 7d7bf29..647982b 100644 --- a/src/server/lib/mail.ts +++ b/src/server/lib/mail.ts @@ -1,9 +1,8 @@ import { createTransport } from "nodemailer" +import "dotenv/config" +import config from "../../../config.json" assert {type:"json"} -// required i guess -require("dotenv").config() - -let mailConfig = require(process.cwd() + "/config.json").mail, +let mailConfig = config.mail, transport = createTransport({ ...mailConfig.transport, auth: { diff --git a/src/server/routes/api.ts b/src/server/routes/api.ts index 31cd0a7..0d5ebe1 100644 --- a/src/server/routes/api.ts +++ b/src/server/routes/api.ts @@ -1,8 +1,10 @@ import { Hono } from "hono" import { readFile, readdir } from "fs/promises" import Files from "../lib/files.js" +import {fileURLToPath} from "url" +import {dirname} from "path" -const APIDirectory = __dirname + "/api" +const APIDirectory = dirname(fileURLToPath(import.meta.url)) + "/api" interface APIMount { file: string @@ -25,18 +27,21 @@ class APIVersion { readonly definition: APIDefinition readonly apiPath: string readonly root: Hono = new Hono() + readonly files: Files constructor(definition: APIDefinition, files: Files) { this.definition = definition this.apiPath = APIDirectory + "/" + definition.name + this.files = files + } - for (let _mount of definition.mount) { - let mount = resolveMount(_mount) + async load() { + for (let _mount of this.definition.mount) { + let mount = resolveMount(_mount); // no idea if there's a better way to do this but this is all i can think of - let route = require(`${this.apiPath}/${mount.file}.js`) as ( - files: Files - ) => Hono - this.root.route(mount.to, route(files)) + let { default: route } = await import(`${this.apiPath}/${mount.file}.js`) as { default: (files: Files) => Hono } + + this.root.route(mount.to, route(this.files)) } } } @@ -54,12 +59,15 @@ export default class APIRouter { * @param definition Definition to mount. */ - private mount(definition: APIDefinition) { + private async mount(definition: APIDefinition) { console.log(`mounting APIDefinition ${definition.name}`) + let def = new APIVersion(definition, this.files) + await def.load() + this.root.route( definition.baseURL, - new APIVersion(definition, this.files).root + def.root ) } @@ -74,7 +82,7 @@ export default class APIRouter { ) ).toString() ) as APIDefinition - this.mount(def) + await this.mount(def) } } } diff --git a/src/server/routes/api/v0/adminRoutes.ts b/src/server/routes/api/v0/adminRoutes.ts index d66d389..4e561d7 100644 --- a/src/server/routes/api/v0/adminRoutes.ts +++ b/src/server/routes/api/v0/adminRoutes.ts @@ -22,9 +22,7 @@ adminRoutes .use(requiresAdmin) .use(requiresPermissions("admin")) -let config = require(`${process.cwd()}/config.json`) - -module.exports = function (files: Files) { +export default function (files: Files) { adminRoutes.post("/reset", async (ctx) => { let acc = ctx.get("account") as Accounts.Account const body = await ctx.req.json() diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts index 8c3ccf5..6aa1237 100644 --- a/src/server/routes/api/v0/authRoutes.ts +++ b/src/server/routes/api/v0/authRoutes.ts @@ -26,12 +26,11 @@ export let authRoutes = new Hono<{ } }>() -let config = require(`${process.cwd()}/config.json`) +import config from "../../../../../config.json" assert {type:"json"} authRoutes.all("*", getAccount) -module.exports = function (files: Files) { +export default function (files: Files) { authRoutes.post("/login", async (ctx) => { - console.log(ctx) const body = await ctx.req.json() if ( typeof body.username != "string" || diff --git a/src/server/routes/api/v0/fileApiRoutes.ts b/src/server/routes/api/v0/fileApiRoutes.ts index 59e5207..e3f1ccb 100644 --- a/src/server/routes/api/v0/fileApiRoutes.ts +++ b/src/server/routes/api/v0/fileApiRoutes.ts @@ -14,7 +14,6 @@ export let fileApiRoutes = new Hono<{ } }>() -let config = require(`${process.cwd()}/config.json`) fileApiRoutes.use("*", getAccount) // :warning: /list somehow crashes Hono with an internal error! /* @@ -27,7 +26,7 @@ TypeError: Cannot read properties of undefined (reading 'get') at process.processTicksAndRejections (node:internal/process/task_queues:95:5) */ -module.exports = function (files: Files) { +export default function (files: Files) { fileApiRoutes.get( "/list", requiresAccount, diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 29ccfc2..41aa51b 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -3,36 +3,24 @@ import { Hono } from "hono" import * as Accounts from "../../../lib/accounts.js" import * as auth from "../../../lib/auth.js" -import axios, { AxiosResponse } from "axios" -import { type Range } from "range-parser" -import multer, { memoryStorage } from "multer" -import { Readable } from "stream" +import RangeParser, { type Range } from "range-parser" import ServeError from "../../../lib/errors.js" import Files from "../../../lib/files.js" -import { getAccount, requiresPermissions } from "../../../lib/middleware.js" - -let parser = bodyParser.json({ - type: ["text/plain", "application/json"], -}) - +import { getAccount } from "../../../lib/middleware.js" +import {Readable} from "node:stream" export let primaryApi = new Hono<{ Variables: { account: Accounts.Account } }>() -const multerSetup = multer({ storage: memoryStorage() }) - -let config = require(`${process.cwd()}/config.json`) - primaryApi.use(getAccount) -module.exports = function (files: Files) {/* +export default function (files: Files) { primaryApi.get( - ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], - async (ctx) => { + "/file/:fileId", + async (ctx): Promise => { const fileId = (ctx.req.param() as {fileId: string}).fileId - const reqRange let acc = ctx.get("account") as Accounts.Account @@ -54,8 +42,7 @@ module.exports = function (files: Files) {/* .getPermissions(auth.tokenFor(ctx)!) ?.includes("private") ) { - ServeError(ctx, 403, "insufficient permissions") - return + return ServeError(ctx, 403, "insufficient permissions") } } @@ -65,29 +52,18 @@ module.exports = function (files: Files) {/* if (file.sizeInBytes) { ctx.header("Content-Length", file.sizeInBytes.toString()) - if (file.chunkSize) { - let range = ctx.range(file.sizeInBytes) - if (range) { - // error handling - if (typeof range == "number") { - return ctx.status(range == -1 ? 416 : 400) - } - if (range.type != "bytes") { - return ctx.status(400) - } + if (file.chunkSize && ctx.req.header("Range")) { + let ranges = RangeParser(file.sizeInBytes, ctx.req.header("Range") || "") - // set ranges var - let rngs = Array.from(range) - if (rngs.length != 1) { - return ctx.status(400) - } - range = rngs[0] + if (ranges) { + if (typeof ranges == "number") + return ServeError(ctx, ranges == -1 ? 416 : 400, ranges == -1 ? "unsatisfiable ranges" : "invalid ranges") + if (ranges.length > 1) return ServeError(ctx, 400, "multiple ranges not supported") + range = ranges[0] } } } - // supports ranges - return files .readFileStream(fileId, range) .then(async (stream) => { @@ -103,8 +79,8 @@ module.exports = function (files: Files) {/* ) } - return ctx.stream((stre) => { - // Somehow return a stream? + return ctx.req.method == "HEAD" ? ctx.body(null) : ctx.stream(async (webStream) => { + webStream.pipe(Readable.toWeb(stream) as ReadableStream) }) }) .catch((err) => { @@ -114,7 +90,7 @@ module.exports = function (files: Files) {/* return ServeError(ctx, 404, "file not found") } } - )*/ + ) // primaryApi.head( // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 0e78f5b..eccd94e 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -19,7 +19,7 @@ import { import ServeError from "../../../lib/errors.js" import { sendMail } from "../../../lib/mail.js" -const Configuration = require(`${process.cwd()}/config.json`) +import Configuration from "../../../../../config.json" assert {type:"json"} const router = new Hono<{ Variables: { @@ -29,7 +29,7 @@ const router = new Hono<{ router.use(getAccount) -module.exports = function (files: Files) { +export default function (files: Files) { router.post("/login", async (ctx, res) => { const body = await ctx.req.json() if ( diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts index 608dcd9..6c3f1e7 100644 --- a/src/server/routes/api/v1/admin.ts +++ b/src/server/routes/api/v1/admin.ts @@ -17,8 +17,6 @@ import { import ServeError from "../../../lib/errors.js" import { sendMail } from "../../../lib/mail.js" -const Configuration = require(`${process.cwd()}/config.json`) - const router = new Hono<{ Variables: { account?: Accounts.Account @@ -27,7 +25,7 @@ const router = new Hono<{ router.use(getAccount, requiresAccount, requiresAdmin) -module.exports = function (files: Files) { +export default function (files: Files) { router.patch("/account/:username/password", async (ctx) => { const Account = ctx.get("account") as Accounts.Account const body = await ctx.req.json() diff --git a/src/server/routes/api/v1/customization.ts b/src/server/routes/api/v1/customization.ts index a578f4c..430d530 100644 --- a/src/server/routes/api/v1/customization.ts +++ b/src/server/routes/api/v1/customization.ts @@ -7,8 +7,7 @@ import { requiresPermissions, } from "../../../lib/middleware.js" import ServeError from "../../../lib/errors.js" - -const Configuration = require(`${process.cwd()}/config.json`) +import Configuration from "../../../../../config.json" assert {type:"json"} const router = new Hono<{ Variables: { @@ -18,7 +17,7 @@ const router = new Hono<{ router.use(getAccount) -module.exports = function (files: Files) { +export default function (files: Files) { router.put( "/css", requiresAccount, diff --git a/src/server/routes/api/v1/file.ts b/src/server/routes/api/v1/file.ts index d83d3b7..88f54b4 100644 --- a/src/server/routes/api/v1/file.ts +++ b/src/server/routes/api/v1/file.ts @@ -3,6 +3,6 @@ import Files from "../../../lib/files.js"; const router = new Hono() -module.exports = function(files: Files) { +export default function(files: Files) { return router } diff --git a/src/server/routes/api/v1/public.ts b/src/server/routes/api/v1/public.ts index ef7f85c..192861a 100644 --- a/src/server/routes/api/v1/public.ts +++ b/src/server/routes/api/v1/public.ts @@ -3,6 +3,6 @@ import Files from "../../../lib/files.js" const router = new Hono() -module.exports = function (files: Files) { +export default function (files: Files) { return router } diff --git a/src/server/routes/preview.ts b/src/server/routes/preview.ts index 3d9c9e3..dfdd763 100644 --- a/src/server/routes/preview.ts +++ b/src/server/routes/preview.ts @@ -4,7 +4,8 @@ import ServeError from "../lib/errors.js" import * as Accounts from "../lib/accounts.js" import type { Handler } from "hono" import type Files from "../lib/files.js" -const pkg = require(`${process.cwd()}/package.json`) +import pkg from "../../../package.json" assert {type:"json"} + export default (files: Files): Handler => async (ctx) => { let acc = ctx.get("account") as Accounts.Account From fd4441633e1f1f628b748b1f5f47310a6d9aace0 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 3 Mar 2024 19:34:16 -0800 Subject: [PATCH 076/173] And that's probably it --- .gitignore | 1 + src/server/routes/api/v0/primaryApi.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2719527..5522d8e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules .data out dist +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 41aa51b..98efd40 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -80,7 +80,7 @@ export default function (files: Files) { } return ctx.req.method == "HEAD" ? ctx.body(null) : ctx.stream(async (webStream) => { - webStream.pipe(Readable.toWeb(stream) as ReadableStream) + webStream.pipe(Readable.toWeb(stream) as ReadableStream).catch(e => {}) // emits an AbortError for some reason so this catches that }) }) .catch((err) => { From 971ee31d736764479583b1c2b213828309f1cc5d Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:02:12 -0800 Subject: [PATCH 077/173] this hurts --- package-lock.json | 17 +++-- package.json | 3 +- src/server/lib/files.ts | 17 +++-- src/server/lib/formdata.ts | 46 ++++++++++++++ src/server/routes/api/v0/primaryApi.ts | 88 ++++---------------------- 5 files changed, 79 insertions(+), 92 deletions(-) create mode 100644 src/server/lib/formdata.ts diff --git a/package-lock.json b/package-lock.json index 6b017a8..5d00b38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.4.0-dev", "license": "Unlicense", "dependencies": { - "@hono/node-server": "^1.2.0", + "@hono/node-server": "^1.8.2", "@types/body-parser": "^1.19.2", "@types/express": "^4.17.14", "@types/multer": "^1.4.7", @@ -21,7 +21,6 @@ "cookie-parser": "^1.4.6", "dotenv": "^16.0.2", "express": "^4.18.1", - "form-data": "^4.0.0", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", @@ -395,11 +394,11 @@ } }, "node_modules/@hono/node-server": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.2.0.tgz", - "integrity": "sha512-aHT8lDMLpd7ioXJ1/057+h+oE/k7rCOWmjklYDsE0jE4CoNB9XzG4f8dRHvw4s5HJFocaYDiGgYM/V0kYbQ0ww==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.8.2.tgz", + "integrity": "sha512-h8l2TBLCPHZBUrrkosZ6L5CpBLj6zdESyF4B+zngiCDF7aZFQJ0alVbLx7jn8PCVi9EyoFf8a4hOZFi1tD95EA==", "engines": { - "node": ">=18.0.0" + "node": ">=18.14.1" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2135,9 +2134,9 @@ "optional": true }, "@hono/node-server": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.2.0.tgz", - "integrity": "sha512-aHT8lDMLpd7ioXJ1/057+h+oE/k7rCOWmjklYDsE0jE4CoNB9XzG4f8dRHvw4s5HJFocaYDiGgYM/V0kYbQ0ww==" + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.8.2.tgz", + "integrity": "sha512-h8l2TBLCPHZBUrrkosZ6L5CpBLj6zdESyF4B+zngiCDF7aZFQJ0alVbLx7jn8PCVi9EyoFf8a4hOZFi1tD95EA==" }, "@jridgewell/sourcemap-codec": { "version": "1.4.15", diff --git a/package.json b/package.json index 729f6c4..6d91801 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "node": ">=v16.11" }, "dependencies": { - "@hono/node-server": "^1.2.0", + "@hono/node-server": "^1.8.2", "@types/body-parser": "^1.19.2", "@types/express": "^4.17.14", "@types/multer": "^1.4.7", @@ -30,7 +30,6 @@ "cookie-parser": "^1.4.6", "dotenv": "^16.0.2", "express": "^4.18.1", - "form-data": "^4.0.0", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 50a2721..18cb4ca 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -172,9 +172,10 @@ export class UploadStream extends Writable { _destroy(error: Error | null) { this.error = error || undefined - + this.abort() + /* if (error instanceof WebError) return // destroyed by self - if (error) this.abort() // destroyed externally... + if (error) return // destroyed externally...*/ } /** @@ -182,7 +183,11 @@ export class UploadStream extends Writable { */ async abort() { if (!this.destroyed) this.destroy() + if (this.current) this.current.destroy(this.error) await this.files.api.deleteMessages(this.messages) + if (this.uploadId) { + delete this.files.locks[this.uploadId] + } } /** @@ -222,6 +227,7 @@ export class UploadStream extends Writable { } await this.files.write() + delete this.files.locks[this.uploadId!] return this.uploadId } @@ -257,11 +263,10 @@ export class UploadStream extends Writable { if (this.files.files[id] && this.files.files[id].owner != this.owner) return this.destroy( new WebError(403, "you don't own this file") ) - if (false /* check if locked here */) + if (this.files.locks[id]) return this.destroy( new WebError(409, "a file with this ID is already being uploaded") ) - /* lock the id */ - + this.files.locks[id] = true this.uploadId = id return this } @@ -325,6 +330,8 @@ export default class Files { files: { [key: string]: FilePointer } = {} data_directory: string = `${process.cwd()}/.data` + locks: Record = {} // I'll, like, do something more proper later + constructor(config: Configuration) { this.config = config this.api = new API(process.env.TOKEN!, config) diff --git a/src/server/lib/formdata.ts b/src/server/lib/formdata.ts new file mode 100644 index 0000000..3bf3bac --- /dev/null +++ b/src/server/lib/formdata.ts @@ -0,0 +1,46 @@ +import { Transform, Duplex } from "node:stream"; +import { TransformCallback } from "stream"; + +let content_disposition_matcher = /\s*([^=;]+)(?:=(?:"((?:\\"|[^"])*)"|([^;]*))?;?|;?)/g // probably a bad regex but IDC + +export type Headers = { + ["content-disposition"]?: (string|{key: string, value: string})[], + ["content-type"]?: string +} + +export class Field extends Duplex { + + headers: Headers = {} + + constructor(unparsedHeaders: string) { + super() + this.headers = Object.fromEntries( + unparsedHeaders.split("\r\n") + .map(e => [e.split(":")[0].trim(), e.split(":").slice(1).join(":").trim()]) + ) + + if (this.headers["content-disposition"]) + this.headers["content-disposition"] = Array.from( + (this.headers["content-disposition"] as unknown as string) + .matchAll(content_disposition_matcher)).map(e => e[2] ? {key: e[1], value: e[2]} : e[1]) + } + +} + +export default class FormDataParser extends Transform { + + readableObjectMode = true + + boundary: string + internalBuffer: Buffer | undefined + + constructor(boundary: string) { + super() + this.boundary = boundary + } + + _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void { + + } + +} \ No newline at end of file diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 98efd40..fb543a9 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -5,8 +5,8 @@ import * as Accounts from "../../../lib/accounts.js" import * as auth from "../../../lib/auth.js" import RangeParser, { type Range } from "range-parser" import ServeError from "../../../lib/errors.js" -import Files from "../../../lib/files.js" -import { getAccount } from "../../../lib/middleware.js" +import Files, { WebError } from "../../../lib/files.js" +import { getAccount, requiresPermissions } from "../../../lib/middleware.js" import {Readable} from "node:stream" export let primaryApi = new Hono<{ Variables: { @@ -27,8 +27,7 @@ export default function (files: Files) { let file = files.files[fileId] ctx.header("Access-Control-Allow-Origin", "*") ctx.header("Content-Security-Policy", "sandbox allow-scripts") - if (ctx.req.query("attachment") == "1") - ctx.header("Content-Disposition", "attachment") + ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${file.filename.replaceAll("\n","\\n")}"`) if (file) { if (file.visibility == "private") { @@ -91,89 +90,26 @@ export default function (files: Files) { } } ) - - // primaryApi.head( - // ["/file/:fileId", "/cpt/:fileId/*", "/:fileId"], - // async (ctx) => { - // let file = files.files[req.params.fileId] - - // if ( - // file.visibility == "private" && - // (ctx.get("account")?.id != file.owner || - // (auth.getType(auth.tokenFor(ctx)!) == "App" && - // auth - // .getPermissions(auth.tokenFor(ctx)!) - // ?.includes("private"))) - // ) { - // return ctx.status(403) - // } - - // ctx.header("Content-Security-Policy", "sandbox allow-scripts") - - // if (ctx.req.query("attachment") == "1") - // ctx.header("Content-Disposition", "attachment") - - // if (!file) { - // res.status(404) - // res.send() - // } else { - // ctx.header("Content-Type", file.mime) - // if (file.sizeInBytes) { - // ctx.header("Content-Length", file.sizeInBytes) - // } - // if (file.chunkSize) { - // ctx.header("Accept-Ranges", "bytes") - // } - // res.send() - // } - // } - // ) - // upload handlers - /* primaryApi.post( "/upload", requiresPermissions("upload"), - multerSetup.single("file"), async (ctx) => { let acc = ctx.get("account") as Accounts.Account - if (req.file) { - try { - let prm = req.header("monofile-params") - let params: { [key: string]: any } = {} - if (prm) { - params = JSON.parse(prm) - } + if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) { + ctx.status(400) + return ctx.body("[err] must be multipart/form-data") + } - files - .uploadFile( - { - owner: acc?.id, - - uploadId: params.uploadId, - filename: req.file.originalname, - mime: req.file.mimetype, - }, - req.file.buffer - ) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status) - res.send(`[err] ${stat.message}`) - }) - } catch { - res.status(400) - res.send("[err] bad request") - } - } else { - res.status(400) - res.send("[err] bad request") + if (!ctx.req.raw.body) { + ctx.status(400) + return ctx.body("[err] body must be supplied") } } ) - +/* primaryApi.post( "/clone", requiresPermissions("upload"), @@ -212,6 +148,6 @@ export default function (files: Files) { } } ) - */ + */ return primaryApi } From 5d3fb29c1f7b295ee361c14ad685b6b8410bcaf4 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sun, 3 Mar 2024 23:34:14 -0800 Subject: [PATCH 078/173] still incomplete and probably bad --- src/server/lib/files.ts | 2 +- src/server/lib/formdata.ts | 51 ++++++++++++++++++++++---- src/server/routes/api/v0/primaryApi.ts | 36 ++++++++++++++++-- 3 files changed, 76 insertions(+), 13 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 18cb4ca..d5abcc8 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -256,7 +256,7 @@ export class UploadStream extends Writable { setUploadId(id: string) { if (this.uploadId) return this.destroy( new WebError(400, "duplicate attempt to set upload ID") ) - if (id.match(id_check_regex)?.[0] != id + if (!id || id.match(id_check_regex)?.[0] != id || id.length > this.files.config.maxUploadIdLength) return this.destroy( new WebError(400, "invalid file ID") ) diff --git a/src/server/lib/formdata.ts b/src/server/lib/formdata.ts index 3bf3bac..57e6e68 100644 --- a/src/server/lib/formdata.ts +++ b/src/server/lib/formdata.ts @@ -1,14 +1,27 @@ -import { Transform, Duplex } from "node:stream"; +import { Transform, Readable } from "node:stream"; import { TransformCallback } from "stream"; let content_disposition_matcher = /\s*([^=;]+)(?:=(?:"((?:\\"|[^"])*)"|([^;]*))?;?|;?)/g // probably a bad regex but IDC +/** + * @description Checks if a chunk can be completed by something else (ex. a boundary) + * @param chunk Chunk to perform check on + * @param cmp Chunk to check whether or not something is completable with + * @returns Whether or not this chunk could be completed by cmp + */ +function endChk(chunk: Buffer, cmp: Buffer) { + for (let i = cmp.byteLength-1; i > 0; i--) + if (chunk.subarray(-(i-1)).equals(cmp.subarray(0,i))) + return true + return false +} + export type Headers = { - ["content-disposition"]?: (string|{key: string, value: string})[], + ["content-disposition"]?: Record, ["content-type"]?: string } -export class Field extends Duplex { +export class Field extends Readable { headers: Headers = {} @@ -20,9 +33,28 @@ export class Field extends Duplex { ) if (this.headers["content-disposition"]) - this.headers["content-disposition"] = Array.from( + this.headers["content-disposition"] = Object.fromEntries(Array.from( (this.headers["content-disposition"] as unknown as string) - .matchAll(content_disposition_matcher)).map(e => e[2] ? {key: e[1], value: e[2]} : e[1]) + .matchAll(content_disposition_matcher)).map(e => [e[1], e[2] ? e[2] : true])) + } + + _read(size: number): void { + this.emit("hungry") + } + + collect(maxSize: number = 0) { + return new Promise((res,rej) => { + let bufs: Buffer[] = [] + + this.on("data", (data) => { + if (maxSize && bufs.reduce((cur, acc) => cur+acc.byteLength, 0) > maxSize) + this.destroy(new Error("went above collect()'s maxSize")) + bufs.push(data) + }) + + this.on("end", () => res(Buffer.concat(bufs))) + this.on("error", (err) => rej(err)) + }) } } @@ -31,16 +63,19 @@ export default class FormDataParser extends Transform { readableObjectMode = true - boundary: string - internalBuffer: Buffer | undefined + readonly boundary: string + private workingMemory: Buffer | undefined + private workingField: Field | undefined constructor(boundary: string) { super() this.boundary = boundary } - _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void { + _transform(_chunk: any, encoding: BufferEncoding, callback: TransformCallback): void { + let chunk = this.workingMemory ? Buffer.concat([this.workingMemory, _chunk]) : _chunk + } } \ No newline at end of file diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index fb543a9..f0c8c25 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -7,7 +7,9 @@ import RangeParser, { type Range } from "range-parser" import ServeError from "../../../lib/errors.js" import Files, { WebError } from "../../../lib/files.js" import { getAccount, requiresPermissions } from "../../../lib/middleware.js" +import FormDataParser, { Field } from "../../../lib/formdata.js" import {Readable} from "node:stream" +import {ReadableStream as StreamWebReadable} from "node:stream/web" export let primaryApi = new Hono<{ Variables: { account: Accounts.Account @@ -95,19 +97,45 @@ export default function (files: Files) { primaryApi.post( "/upload", requiresPermissions("upload"), - async (ctx) => { + (ctx) => { return new Promise((resolve,reject) => { let acc = ctx.get("account") as Accounts.Account if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) { ctx.status(400) - return ctx.body("[err] must be multipart/form-data") + resolve(ctx.body("[err] must be multipart/form-data")) } if (!ctx.req.raw.body) { ctx.status(400) - return ctx.body("[err] body must be supplied") + resolve(ctx.body("[err] body must be supplied")) } - } + + let file = files.createWriteStream(acc.id) + let formDataParser = new FormDataParser('') + + Readable.fromWeb(ctx.req.raw.body as StreamWebReadable) + .pipe(formDataParser) + .on("data", async (field: Field) => { + if (field.headers["content-disposition"]?.filename) { + field.pipe(file) + } else { + switch(field.headers["content-disposition"]?.name) { + case "uploadId": + file.setUploadId((await field.collect(65536).catch(e => {formDataParser.destroy(new WebError(413, e.message))}))?.toString() || "") + } + } + }) + .on("end", async () => { + if (!file.writableEnded) await new Promise((res, rej) => {file.once("finish", res); file.once("error", res)}) + if (file.errored || !(await file.commit().catch(e => file.error = e))) { + ctx.status(file.error instanceof WebError ? file.error.statusCode : 500) + resolve(`[err] ${file.error instanceof WebError ? file.error.message : file.error?.toString()}`) + return + } + + resolve(ctx.body(file.uploadId!)) + }) + })} ) /* primaryApi.post( From 53c9c5fe58bf1b3689638f953cdde14931a01794 Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Mon, 4 Mar 2024 16:46:01 -0500 Subject: [PATCH 079/173] fix: :bug: Make cookie apply for the whole site instead of just /auth/ --- src/server/routes/api/v0/authRoutes.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts index 6aa1237..6b55271 100644 --- a/src/server/routes/api/v0/authRoutes.ts +++ b/src/server/routes/api/v0/authRoutes.ts @@ -60,7 +60,12 @@ export default function (files: Files) { assign token */ - setCookie(ctx, "auth", auth.create(acc.id, 3 * 24 * 60 * 60 * 1000)) + setCookie(ctx, "auth", auth.create(acc.id, 3 * 24 * 60 * 60 * 1000), { + path: "/", + sameSite: "Strict", + secure: true, + httpOnly: true + }) return ctx.text("") }) From 41dc623a28dd1908a26ff9c80f6972c72a1957ab Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:12:20 -0800 Subject: [PATCH 080/173] back to formidable --- package-lock.json | 110 +++++++++++++++++++++++++ package.json | 2 + src/server/lib/files.ts | 2 +- src/server/routes/api/v0/primaryApi.ts | 91 ++++++++++++++------ 4 files changed, 177 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5d00b38..2a9c518 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "cookie-parser": "^1.4.6", "dotenv": "^16.0.2", "express": "^4.18.1", + "formidable": "^3.5.1", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", @@ -31,6 +32,7 @@ "@sveltejs/vite-plugin-svelte": "^2.4.6", "@types/bytes": "^3.1.1", "@types/cookie-parser": "^1.4.3", + "@types/formidable": "^3.4.5", "@types/range-parser": "^1.2.6", "discord-api-types": "^0.37.61", "sass": "^1.57.1", @@ -545,6 +547,15 @@ "@types/range-parser": "*" } }, + "node_modules/@types/formidable": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-3.4.5.tgz", + "integrity": "sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -625,6 +636,11 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -886,6 +902,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/discord-api-types": { "version": "0.37.61", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", @@ -1098,6 +1123,19 @@ "node": ">=12.20.0" } }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1180,6 +1218,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/hono": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/hono/-/hono-3.8.3.tgz", @@ -1495,6 +1541,14 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1969,6 +2023,11 @@ "node": ">= 8" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -2255,6 +2314,15 @@ "@types/range-parser": "*" } }, + "@types/formidable": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-3.4.5.tgz", + "integrity": "sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -2329,6 +2397,11 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2522,6 +2595,15 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "discord-api-types": { "version": "0.37.61", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", @@ -2676,6 +2758,16 @@ "fetch-blob": "^3.1.2" } }, + "formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2730,6 +2822,11 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "hono": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/hono/-/hono-3.8.3.tgz", @@ -2941,6 +3038,14 @@ "ee-first": "1.1.1" } }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -3246,6 +3351,11 @@ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 6d91801..86dd14f 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "cookie-parser": "^1.4.6", "dotenv": "^16.0.2", "express": "^4.18.1", + "formidable": "^3.5.1", "hono": "^3.8.3", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", @@ -40,6 +41,7 @@ "@sveltejs/vite-plugin-svelte": "^2.4.6", "@types/bytes": "^3.1.1", "@types/cookie-parser": "^1.4.3", + "@types/formidable": "^3.4.5", "@types/range-parser": "^1.2.6", "discord-api-types": "^0.37.61", "sass": "^1.57.1", diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index d5abcc8..07ab3bd 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -198,7 +198,7 @@ export class UploadStream extends Writable { if (this.errored) throw this.error if (!this.writableFinished) { let err = Error("attempted to commit file when the stream was still unfinished") - this.destroy(err); throw err + if (!this.destroyed) {this.destroy(err)}; throw err } // Perform checks diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index f0c8c25..6c7c3b1 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -10,13 +10,16 @@ import { getAccount, requiresPermissions } from "../../../lib/middleware.js" import FormDataParser, { Field } from "../../../lib/formdata.js" import {Readable} from "node:stream" import {ReadableStream as StreamWebReadable} from "node:stream/web" +import formidable from "formidable" +import { HttpBindings } from "@hono/node-server" export let primaryApi = new Hono<{ Variables: { account: Accounts.Account - } + }, + Bindings: HttpBindings }>() -primaryApi.use(getAccount) +primaryApi.all("*", getAccount) export default function (files: Files) { primaryApi.get( @@ -98,43 +101,77 @@ export default function (files: Files) { "/upload", requiresPermissions("upload"), (ctx) => { return new Promise((resolve,reject) => { - let acc = ctx.get("account") as Accounts.Account + ctx.env.incoming.removeAllListeners("data") // remove hono's buffering + console.log('awawa') + let acc = ctx.get("account") as Accounts.Account | undefined if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) { ctx.status(400) resolve(ctx.body("[err] must be multipart/form-data")) + return } if (!ctx.req.raw.body) { ctx.status(400) resolve(ctx.body("[err] body must be supplied")) + return + } + console.log('awawawawa') + + let file = files.createWriteStream(acc?.id) + let parser = formidable({ + maxFieldsSize: 65536, + maxFileSize: files.config.maxDiscordFileSize*files.config.maxDiscordFiles, + maxFiles: 1 + }) + + parser.onPart = function(part) { + console.log(part) + if (part.originalFilename == "" || !part.mimetype) { + parser._handlePart(part); return + } + // lol + if (part.name == "file") { + file.on("drain", () => { + ctx.env.incoming.resume() + }) + part.addListener("data", (data: Buffer) => { + if (!file.write(data)) + ctx.env.incoming.pause() + }) + } } - let file = files.createWriteStream(acc.id) - let formDataParser = new FormDataParser('') - - Readable.fromWeb(ctx.req.raw.body as StreamWebReadable) - .pipe(formDataParser) - .on("data", async (field: Field) => { - if (field.headers["content-disposition"]?.filename) { - field.pipe(file) - } else { - switch(field.headers["content-disposition"]?.name) { - case "uploadId": - file.setUploadId((await field.collect(65536).catch(e => {formDataParser.destroy(new WebError(413, e.message))}))?.toString() || "") - } - } - }) - .on("end", async () => { - if (!file.writableEnded) await new Promise((res, rej) => {file.once("finish", res); file.once("error", res)}) - if (file.errored || !(await file.commit().catch(e => file.error = e))) { - ctx.status(file.error instanceof WebError ? file.error.statusCode : 500) - resolve(`[err] ${file.error instanceof WebError ? file.error.message : file.error?.toString()}`) - return - } - - resolve(ctx.body(file.uploadId!)) + parser.on("field", (k,v) => { + console.log(k,v) + if (k == "uploadId") + file.setUploadId(v) + }) + + parser.parse(ctx.env.incoming).catch(e => console.log(e)) + console.log("Parsing") + + parser.on('error', (err) => { + if ("httpCode" in err) + ctx.status(err.httpCode) + else ctx.status(400) + resolve(ctx.body(err.message)) + }) + + file.on("error", (err) => { + if (err instanceof WebError) + ctx.status(err.statusCode) + resolve(ctx.body(err?.message)) + }) + + file.on("finish", () => { + file.commit().then(id => resolve(ctx.body(id!))).catch((err) => { + if (err instanceof WebError) + ctx.status(err.statusCode) + resolve(ctx.body(err?.message)) }) + }) + })} ) /* From 7d622a481b7ad76587ef17ebbd6c3b923b3f20f0 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 4 Mar 2024 20:48:53 -0800 Subject: [PATCH 081/173] Oh that's actually done --- src/server/lib/DiscordAPI/index.ts | 11 +++- src/server/lib/files.ts | 22 ++++--- src/server/lib/formdata.ts | 81 -------------------------- src/server/routes/api/v0/primaryApi.ts | 63 +++++++++++--------- src/svelte/elem/UploadWindow.svelte | 6 +- 5 files changed, 60 insertions(+), 123 deletions(-) delete mode 100644 src/server/lib/formdata.ts diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index 5dd29e5..cccfe0c 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -59,7 +59,10 @@ export class Client { // Remove bulk deletable messages let bulkDeletable = ids.filter(e => convertSnowflakeToDate(e).valueOf() < 2 * 7 * 24 * 60 * 60 * 1000) - await this.rest.fetch(`/channels/${this.targetChannel}/messages/bulk-delete`, {method: "POST",body: JSON.stringify({messages: bulkDeletable})}) + await this.rest.fetch(`/channels/${this.targetChannel}/messages/bulk-delete`, { + method: "POST", + body: JSON.stringify({messages: bulkDeletable}) + }) bulkDeletable.forEach(Map.prototype.delete.bind(this.messageCache)) // everything else, we can do manually... @@ -116,6 +119,9 @@ export class Client { } }) + let controller = new AbortController() + stream.on("error", _ => controller.abort()) + //pushBoundary(transformed) stream.pipe(transformed) @@ -124,7 +130,8 @@ export class Client { body: transformed, headers: { "Content-Type": `multipart/form-data; boundary=${boundary}` - } + }, + signal: controller.signal }) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 07ab3bd..9b02469 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -170,18 +170,17 @@ export class UploadStream extends Writable { callback() } - _destroy(error: Error | null) { + _destroy(error: Error | null, callback: (err?: Error|null) => void) { this.error = error || undefined - this.abort() - /* - if (error instanceof WebError) return // destroyed by self - if (error) return // destroyed externally...*/ + if (error) this.abort() + callback() } /** * @description Cancel & unlock the file. When destroy() is called with a non-WebError, this is automatically called */ async abort() { + console.log("Aborting") if (!this.destroyed) this.destroy() if (this.current) this.current.destroy(this.error) await this.files.api.deleteMessages(this.messages) @@ -202,8 +201,15 @@ export class UploadStream extends Writable { } // Perform checks - if (!this.mime) throw new WebError(400, "no mime provided") - if (!this.name) throw new WebError(400, "no filename provided") + if (!this.mime) { + this.abort() + throw new WebError(400, "no mime provided") + } + if (!this.name) { + this.abort() + throw new WebError(400, "no filename provided") + } + if (!this.uploadId) this.setUploadId(generateFileId()) let ogf = this.files.files[this.uploadId!] @@ -301,6 +307,8 @@ export class UploadStream extends Writable { console.log(`Sent: ${message.id}`) this.newmessage_debounce = true this.emit("debounceReleased") + }).catch(e => { + if (!this.errored) this.destroy(e) }) return stream diff --git a/src/server/lib/formdata.ts b/src/server/lib/formdata.ts deleted file mode 100644 index 57e6e68..0000000 --- a/src/server/lib/formdata.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Transform, Readable } from "node:stream"; -import { TransformCallback } from "stream"; - -let content_disposition_matcher = /\s*([^=;]+)(?:=(?:"((?:\\"|[^"])*)"|([^;]*))?;?|;?)/g // probably a bad regex but IDC - -/** - * @description Checks if a chunk can be completed by something else (ex. a boundary) - * @param chunk Chunk to perform check on - * @param cmp Chunk to check whether or not something is completable with - * @returns Whether or not this chunk could be completed by cmp - */ -function endChk(chunk: Buffer, cmp: Buffer) { - for (let i = cmp.byteLength-1; i > 0; i--) - if (chunk.subarray(-(i-1)).equals(cmp.subarray(0,i))) - return true - return false -} - -export type Headers = { - ["content-disposition"]?: Record, - ["content-type"]?: string -} - -export class Field extends Readable { - - headers: Headers = {} - - constructor(unparsedHeaders: string) { - super() - this.headers = Object.fromEntries( - unparsedHeaders.split("\r\n") - .map(e => [e.split(":")[0].trim(), e.split(":").slice(1).join(":").trim()]) - ) - - if (this.headers["content-disposition"]) - this.headers["content-disposition"] = Object.fromEntries(Array.from( - (this.headers["content-disposition"] as unknown as string) - .matchAll(content_disposition_matcher)).map(e => [e[1], e[2] ? e[2] : true])) - } - - _read(size: number): void { - this.emit("hungry") - } - - collect(maxSize: number = 0) { - return new Promise((res,rej) => { - let bufs: Buffer[] = [] - - this.on("data", (data) => { - if (maxSize && bufs.reduce((cur, acc) => cur+acc.byteLength, 0) > maxSize) - this.destroy(new Error("went above collect()'s maxSize")) - bufs.push(data) - }) - - this.on("end", () => res(Buffer.concat(bufs))) - this.on("error", (err) => rej(err)) - }) - } - -} - -export default class FormDataParser extends Transform { - - readableObjectMode = true - - readonly boundary: string - private workingMemory: Buffer | undefined - private workingField: Field | undefined - - constructor(boundary: string) { - super() - this.boundary = boundary - } - - _transform(_chunk: any, encoding: BufferEncoding, callback: TransformCallback): void { - - let chunk = this.workingMemory ? Buffer.concat([this.workingMemory, _chunk]) : _chunk - - } - -} \ No newline at end of file diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 6c7c3b1..b3ecfaf 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -7,7 +7,6 @@ import RangeParser, { type Range } from "range-parser" import ServeError from "../../../lib/errors.js" import Files, { WebError } from "../../../lib/files.js" import { getAccount, requiresPermissions } from "../../../lib/middleware.js" -import FormDataParser, { Field } from "../../../lib/formdata.js" import {Readable} from "node:stream" import {ReadableStream as StreamWebReadable} from "node:stream/web" import formidable from "formidable" @@ -102,7 +101,20 @@ export default function (files: Files) { requiresPermissions("upload"), (ctx) => { return new Promise((resolve,reject) => { ctx.env.incoming.removeAllListeners("data") // remove hono's buffering - console.log('awawa') + + let errEscalated = false + function escalate(err:Error) { + if (errEscalated) return + errEscalated = true + + if ("httpCode" in err) + ctx.status(err.httpCode as number) + else if (err instanceof WebError) + ctx.status(err.statusCode) + else ctx.status(400) + resolve(ctx.body(err.message)) + } + let acc = ctx.get("account") as Accounts.Account | undefined if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) { @@ -116,7 +128,6 @@ export default function (files: Files) { resolve(ctx.body("[err] body must be supplied")) return } - console.log('awawawawa') let file = files.createWriteStream(acc?.id) let parser = formidable({ @@ -126,50 +137,44 @@ export default function (files: Files) { }) parser.onPart = function(part) { - console.log(part) - if (part.originalFilename == "" || !part.mimetype) { - parser._handlePart(part); return + if (!part.originalFilename || !part.mimetype) { + parser._handlePart(part) + return } // lol if (part.name == "file") { - file.on("drain", () => { - ctx.env.incoming.resume() - }) - part.addListener("data", (data: Buffer) => { + file.setName(part.originalFilename || "") + file.setType(part.mimetype || "") + + file.on("drain", () => ctx.env.incoming.resume()) + file.on("error", (err) => part.emit("error", err)) + + part.on("data", (data: Buffer) => { if (!file.write(data)) ctx.env.incoming.pause() }) + part.on("end", () => file.end()) } } parser.on("field", (k,v) => { - console.log(k,v) if (k == "uploadId") file.setUploadId(v) }) - parser.parse(ctx.env.incoming).catch(e => console.log(e)) - console.log("Parsing") + parser.parse(ctx.env.incoming).catch(e => console.error(e)) parser.on('error', (err) => { - if ("httpCode" in err) - ctx.status(err.httpCode) - else ctx.status(400) - resolve(ctx.body(err.message)) + escalate(err) + if (!file.destroyed) file.destroy(err) }) + file.on("error", escalate) - file.on("error", (err) => { - if (err instanceof WebError) - ctx.status(err.statusCode) - resolve(ctx.body(err?.message)) - }) - - file.on("finish", () => { - file.commit().then(id => resolve(ctx.body(id!))).catch((err) => { - if (err instanceof WebError) - ctx.status(err.statusCode) - resolve(ctx.body(err?.message)) - }) + file.on("finish", async () => { + if (!ctx.env.incoming.readableEnded) await new Promise(res => ctx.env.incoming.once("end", res)) + file.commit() + .then(id => resolve(ctx.body(id!))) + .catch(escalate) }) })} diff --git a/src/svelte/elem/UploadWindow.svelte b/src/svelte/elem/UploadWindow.svelte index 0b2b136..4af300f 100644 --- a/src/svelte/elem/UploadWindow.svelte +++ b/src/svelte/elem/UploadWindow.svelte @@ -60,7 +60,7 @@ let handle_fetch_promise = (x,prom) => { return prom.then(async (res) => { let txt = await res.text() - if (txt.startsWith("[err]")) uploads[x].uploadStatus.error = txt; + if (!res.ok) uploads[x].uploadStatus.error = txt; else { uploads[x].uploadStatus.fileId = txt; @@ -84,12 +84,10 @@ switch(v.type) { case "upload": let fd = new FormData() + if (v.params.uploadId) fd.append("uploadId", v.params.uploadId) fd.append("file",v.file) return handle_fetch_promise(x,fetch("/upload",{ - headers: { - "monofile-params": JSON.stringify(v.params) - }, method: "POST", body: fd })) From 840fb2ab39fb02969e9a6edccbffbeb8045e5f43 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 4 Mar 2024 22:02:38 -0800 Subject: [PATCH 082/173] oh its just requestTimeout. --- config.json | 2 +- src/server/index.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/config.json b/config.json index a1c051e..4b906ad 100644 --- a/config.json +++ b/config.json @@ -3,7 +3,7 @@ "maxDiscordFileSize": 10485760, "targetGuild": "906767804575928390", "targetChannel": "1024080525993971913", - "requestTimeout": 120000, + "requestTimeout": 1800000, "maxUploadIdLength": 30, "accounts": { "registrationEnabled": true, diff --git a/src/server/index.ts b/src/server/index.ts index 35c5faa..bd49de2 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -114,6 +114,10 @@ serve( { fetch: app.fetch, port: Number(process.env.MONOFILE_PORT || 3000), + serverOptions: { + //@ts-ignore + requestTimeout: config.requestTimeout + } }, (info) => { console.log("Web OK!", info.port, info.address) From fb720bc4b7d934b16e667e04bc83cf2bbf96535b Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 4 Mar 2024 23:03:20 -0800 Subject: [PATCH 083/173] port clone route --- src/server/routes/api/v0/primaryApi.ts | 93 ++++++++++++++------------ 1 file changed, 50 insertions(+), 43 deletions(-) diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index b3ecfaf..d9b7b61 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -11,6 +11,7 @@ import {Readable} from "node:stream" import {ReadableStream as StreamWebReadable} from "node:stream/web" import formidable from "formidable" import { HttpBindings } from "@hono/node-server" +import pkg from "../../../../../package.json" assert {type: "json"} export let primaryApi = new Hono<{ Variables: { account: Accounts.Account @@ -117,17 +118,11 @@ export default function (files: Files) { let acc = ctx.get("account") as Accounts.Account | undefined - if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) { - ctx.status(400) - resolve(ctx.body("[err] must be multipart/form-data")) - return - } + if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) + return resolve(ctx.body("must be multipart/form-data", 400)) - if (!ctx.req.raw.body) { - ctx.status(400) - resolve(ctx.body("[err] body must be supplied")) - return - } + if (!ctx.req.raw.body) + return resolve(ctx.body("body must be supplied", 400)) let file = files.createWriteStream(acc?.id) let parser = formidable({ @@ -179,45 +174,57 @@ export default function (files: Files) { })} ) -/* + primaryApi.post( "/clone", requiresPermissions("upload"), - async ctx => { + ctx => new Promise(async resolve => { + let acc = ctx.get("account") as Accounts.Account + let requestParameters try { - return axios - .get(req.body.url, { responseType: "arraybuffer" }) - .then((data: AxiosResponse) => { - files - .uploadFile( - { - owner: acc?.id, - filename: - req.body.url.split("/")[ - req.body.url.split("/").length - 1 - ] || "generic", - mime: data.headers["content-type"], - uploadId: req.body.uploadId, - }, - Buffer.from(data.data) - ) - .then((uID) => res.send(uID)) - .catch((stat) => { - res.status(stat.status) - res.send(`[err] ${stat.message}`) - }) - }) - .catch((err) => { - console.log(err) - return res.text(`[err] failed to fetch data`, 400) - }) - } catch { - return ctx.text("[err] an error occured", 500) - } - } + requestParameters = await ctx.req.json() + } catch (err: any) {return ctx.text(err.toString(), 400)} + + let res = await fetch(requestParameters.url, { + headers: { + "user-agent": `monofile ${pkg.version} (+https://${ctx.req.header("Host")})` + } + }) + if (!res.ok) return ctx.text(`got ${res.status} ${res.statusText}`, 500) + if (!res.body) return ctx.text(`Internal Server Error`, 500) + if ( + res.headers.has("Content-Length") + && !Number.isNaN(parseInt(res.headers.get("Content-Length")!,10)) + && parseInt(res.headers.get("Content-Length")!,10) > files.config.maxDiscordFileSize*files.config.maxDiscordFiles + ) + return ctx.text(`file reports to be too large`, 413) + + let file = files.createWriteStream(acc?.id) + + Readable.fromWeb(res.body as StreamWebReadable) + .pipe(file) + .on("error", (err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode : 500))) + + file + .setName( + requestParameters.url.split("/")[ + requestParameters.url.split("/").length - 1 + ] || "generic" + ) + + if (res.headers.has("content-type")) file.setType(res.headers.get("content-type")!) + if (requestParameters.uploadId) file.setUploadId(requestParameters.uploadId) + + file.once("finish", () => { + file.commit() + .then(id => resolve(ctx.text(id!))) + .catch((err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode : 500))) + }) + + }) ) - */ + return primaryApi } From 9ff8f645eb887ddb36c40ada6ddf13ae9c5eaf3c Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 4 Mar 2024 23:18:40 -0800 Subject: [PATCH 084/173] thtas enough cleanup actually fuck you --- src/server/lib/files.ts | 56 +++++++++++++---------------------------- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 9b02469..fad5a0c 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -449,11 +449,11 @@ export default class Files { // todo: figure out how to get typesccript to accept useRanges // i'm too tired to look it up or write whatever it wnats me to do - if (range && file.chunkSize && file.sizeInBytes) { + if (useRanges) { // Calculate where to start file scans... - scan_files_begin = Math.floor(range.start / file.chunkSize) - scan_files_end = Math.ceil(range.end / file.chunkSize) - 1 + scan_files_begin = Math.floor(range!.start / file.chunkSize!) + scan_files_end = Math.ceil(range!.end / file.chunkSize!) - 1 scan_msg_begin = Math.floor(scan_files_begin / 10) scan_msg_end = Math.ceil(scan_files_end / 10) @@ -469,7 +469,7 @@ export default class Files { if (ret) return ret // oh, there's none left. let's fetch a new message, then. - if (!file.messageids[msgIdx]) return null + if (!file.messageids[msgIdx] || msgIdx >= scan_msg_end) return null let msg = await this.api .fetchMessage(file.messageids[msgIdx]) .catch(() => { @@ -478,20 +478,14 @@ export default class Files { if (msg?.attachments) { let attach = Array.from(msg.attachments.values()) - for ( - let i = - - useRanges && msgIdx == scan_msg_begin + attachments = useRanges ? attach.slice( + msgIdx == scan_msg_begin ? scan_files_begin - msgIdx * 10 - : 0; - i < - (useRanges && msgIdx == scan_msg_end + : 0, + msgIdx == scan_msg_end ? scan_files_end - msgIdx * 10 + 1 - : attach.length); - i++ - ) { - attachments.push(attach[i]) - } + : attach.length + ) : attach } msgIdx++ @@ -502,46 +496,32 @@ export default class Files { let getNextChunk = async () => { let scanning_chunk = await getNextAttachment() - if (!scanning_chunk) { - return null - } - - console.log(msgIdx,position,scanning_chunk.size) + if (!scanning_chunk) return null let headers: HeadersInit = useRanges ? { Range: `bytes=${ - // If this is the first chunk of the file (position == 0) - // and both 'range' and 'file.chunkSize' are defined, - // calculate the start of the range. - // Otherwise, default to "0". - position == 0 && range - && file.chunkSize - ? range.start - scan_files_begin * file.chunkSize + position == 0 + ? range!.start - scan_files_begin * file.chunkSize! : "0" }-${ - // If this is the last chunk of the file (position == attachments.length - 1) - // and both 'range' and 'file.chunkSize' are defined, - // calculate the end of the range. - // Otherwise, default to an empty string. - position == attachments.length - 1 && range - && file.chunkSize - ? range.end - scan_files_end * file.chunkSize + position == attachments.length - 1 + ? range!.end - scan_files_end * file.chunkSize! : "" }`, } : {} - let d = await fetch(scanning_chunk.url, {headers}) + let response = await fetch(scanning_chunk.url, {headers}) .catch((e: Error) => { console.error(e) return {body: e} }) position++ - - return d.body + + return response.body } let currentPusher : (() => Promise<{readyForMore: boolean, streamDone: boolean }> | undefined) | undefined From dcf35f80b3f2e571c741ec2106b753eb0e61c559 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 4 Mar 2024 23:33:50 -0800 Subject: [PATCH 085/173] Cool i have stuf to fix :3 --- src/server/routes/api/v0/fileApiRoutes.ts | 14 ++------------ src/server/routes/api/v0/primaryApi.ts | 6 ++++-- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/server/routes/api/v0/fileApiRoutes.ts b/src/server/routes/api/v0/fileApiRoutes.ts index e3f1ccb..9b59fff 100644 --- a/src/server/routes/api/v0/fileApiRoutes.ts +++ b/src/server/routes/api/v0/fileApiRoutes.ts @@ -14,17 +14,7 @@ export let fileApiRoutes = new Hono<{ } }>() -fileApiRoutes.use("*", getAccount) // :warning: /list somehow crashes Hono with an internal error! -/* - -/home/jack/Code/Web/monofile/node_modules/.pnpm/@hono+node-server@1.2.0/node_modules/@hono/node-server/dist/listener.js:55 - const contentType = res.headers.get("content-type") || ""; - ^ - -TypeError: Cannot read properties of undefined (reading 'get') - at Server. (/home/jack/Code/Web/monofile/node_modules/.pnpm/@hono+node-server@1.2.0/node_modules/@hono/node-server/dist/listener.js:55:37) - at process.processTicksAndRejections (node:internal/process/task_queues:95:5) -*/ +fileApiRoutes.use("*", getAccount) export default function (files: Files) { fileApiRoutes.get( @@ -37,7 +27,7 @@ export default function (files: Files) { if (!acc) return let accId = acc.id - ctx.json( + return ctx.json( acc.files .map((e) => { let fp = files.files[e] diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index d9b7b61..183e30c 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -32,7 +32,7 @@ export default function (files: Files) { let file = files.files[fileId] ctx.header("Access-Control-Allow-Origin", "*") ctx.header("Content-Security-Policy", "sandbox allow-scripts") - ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${file.filename.replaceAll("\n","\\n")}"`) + ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${encodeURI(file.filename.replaceAll("\n","\\n"))}"`) if (file) { if (file.visibility == "private") { @@ -68,6 +68,8 @@ export default function (files: Files) { } } + console.log(range) + return files .readFileStream(fileId, range) .then(async (stream) => { @@ -84,7 +86,7 @@ export default function (files: Files) { } return ctx.req.method == "HEAD" ? ctx.body(null) : ctx.stream(async (webStream) => { - webStream.pipe(Readable.toWeb(stream) as ReadableStream).catch(e => {}) // emits an AbortError for some reason so this catches that + webStream.pipe(Readable.toWeb(stream.on("error", e => {})) as ReadableStream).catch(e => {}) }) }) .catch((err) => { From e92f5eaf6ea09585cd293f695d9862f0d6e094d5 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 5 Mar 2024 07:00:01 -0800 Subject: [PATCH 086/173] Oh shit this doesn't respect backpressure --- src/server/lib/files.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index fad5a0c..17e958f 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -234,6 +234,7 @@ export class UploadStream extends Writable { await this.files.write() delete this.files.locks[this.uploadId!] + if (this.owner) Accounts.files.index(this.owner, this.uploadId!) return this.uploadId } @@ -469,7 +470,7 @@ export default class Files { if (ret) return ret // oh, there's none left. let's fetch a new message, then. - if (!file.messageids[msgIdx] || msgIdx >= scan_msg_end) return null + if (!file.messageids[msgIdx] || msgIdx > scan_msg_end) return null let msg = await this.api .fetchMessage(file.messageids[msgIdx]) .catch(() => { @@ -478,14 +479,16 @@ export default class Files { if (msg?.attachments) { let attach = Array.from(msg.attachments.values()) + attachments = useRanges ? attach.slice( msgIdx == scan_msg_begin - ? scan_files_begin - msgIdx * 10 + ? scan_files_begin - scan_msg_begin * 10 : 0, msgIdx == scan_msg_end - ? scan_files_end - msgIdx * 10 + 1 + ? scan_files_end - scan_msg_end * 10 + 1 : attach.length ) : attach + console.log(attachments) } msgIdx++ @@ -541,7 +544,7 @@ export default class Files { // oops, look like there's an error // or the stream has ended. // let's destroy the stream - stream.destroy(next || undefined) + if (next) stream.destroy(next); else stream.push(null) return } } From cad72fafd23636a5f89124d5486801af3a8f439c Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Tue, 5 Mar 2024 15:07:19 -0500 Subject: [PATCH 087/173] refactor: :label: Remove targetGuild from config typings --- README.md | 3 +-- src/server/lib/files.ts | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index cc8e371..177dc56 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,6 @@ Invite your bot to a server, and create a new `config.json` in the project root: { "maxDiscordFiles": 20, "maxDiscordFileSize": 26214400, - "targetGuild": "1024080490677936248", "targetChannel": "1024080525993971913", "requestTimeout":120000, "maxUploadIdLength":30, @@ -72,4 +71,4 @@ Although we believe monofile is not against Discord's developer terms of service Code written by monofile's contributors is currently licensed under [Unlicense](https://github.com/nbitzz/monofile/blob/main/LICENSE). -Icons under `/assets/icons` were created by Microsoft, and as such are licensed under [different terms](https://github.com/nbitzz/monofile/blob/1.3.0/assets/icons/README.md) (MIT). \ No newline at end of file +Icons under `/assets/icons` were created by Microsoft, and as such are licensed under [different terms](https://github.com/nbitzz/monofile/blob/1.3.0/assets/icons/README.md) (MIT). diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 17e958f..d740b29 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -47,7 +47,6 @@ export type FileUploadSettings = Partial> & export interface Configuration { maxDiscordFiles: number maxDiscordFileSize: number - targetGuild: string targetChannel: string requestTimeout: number maxUploadIdLength: number From 3bedc21d056acbdaeccce9542d78be3fd3c01d1c Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 5 Mar 2024 16:43:41 -0800 Subject: [PATCH 088/173] fix bulk deletions in deleteMessages --- src/server/lib/DiscordAPI/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index cccfe0c..bcb5bd8 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -58,7 +58,7 @@ export class Client { // Remove bulk deletable messages - let bulkDeletable = ids.filter(e => convertSnowflakeToDate(e).valueOf() < 2 * 7 * 24 * 60 * 60 * 1000) + let bulkDeletable = ids.filter(e => Date.now()-convertSnowflakeToDate(e).valueOf() < 2 * 7 * 24 * 60 * 60 * 1000) await this.rest.fetch(`/channels/${this.targetChannel}/messages/bulk-delete`, { method: "POST", body: JSON.stringify({messages: bulkDeletable}) @@ -69,7 +69,7 @@ export class Client { // there's probably a better way to do this @Jack5079 // fix for me if possible await Promise.all(ids.map(async e => { - if (convertSnowflakeToDate(e).valueOf() >= 2 * 7 * 24 * 60 * 60 * 1000) { + if (Date.now()-convertSnowflakeToDate(e).valueOf() >= 2 * 7 * 24 * 60 * 60 * 1000) { return await this.deleteMessage(e) } }).filter(Boolean)) // filter based on whether or not it's undefined From 4fdada5cc5fc5ce058f384a6c1aff5ec7b8bcdd5 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 5 Mar 2024 22:52:46 -0800 Subject: [PATCH 089/173] i have a hunch hono's streaming api buffers --- package-lock.json | 14 +- package.json | 2 +- src/server/lib/errors.ts | 3 +- src/server/lib/files.ts | 375 +++++++++++++------------ src/server/routes/api/v0/primaryApi.ts | 20 +- 5 files changed, 215 insertions(+), 199 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a9c518..00663eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "dotenv": "^16.0.2", "express": "^4.18.1", "formidable": "^3.5.1", - "hono": "^3.8.3", + "hono": "^4.0.10", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", "nodemailer": "^6.9.3", @@ -1227,9 +1227,9 @@ } }, "node_modules/hono": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-3.8.3.tgz", - "integrity": "sha512-NLJgUCKKMvijBy+V+U1FQTsNwHk2bD1KGlWJA9+qaCNWgx5St9bhfQwxrpcTGvG2Gi2naemTWCzBavDNXOqO6Q==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.0.10.tgz", + "integrity": "sha512-sq0RFAC3Ij+bkhZu90EGAQnVI1EhohRsjo9BU+BjXLbC71GSy41JjsFqCeg8MRpO2Gdu0A4MXF5licO89tn/rw==", "engines": { "node": ">=16.0.0" } @@ -2828,9 +2828,9 @@ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" }, "hono": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-3.8.3.tgz", - "integrity": "sha512-NLJgUCKKMvijBy+V+U1FQTsNwHk2bD1KGlWJA9+qaCNWgx5St9bhfQwxrpcTGvG2Gi2naemTWCzBavDNXOqO6Q==" + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.0.10.tgz", + "integrity": "sha512-sq0RFAC3Ij+bkhZu90EGAQnVI1EhohRsjo9BU+BjXLbC71GSy41JjsFqCeg8MRpO2Gdu0A4MXF5licO89tn/rw==" }, "http-errors": { "version": "2.0.0", diff --git a/package.json b/package.json index 86dd14f..ac81e1e 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dotenv": "^16.0.2", "express": "^4.18.1", "formidable": "^3.5.1", - "hono": "^3.8.3", + "hono": "^4.0.10", "multer": "^1.4.5-lts.1", "node-fetch": "^3.3.2", "nodemailer": "^6.9.3", diff --git a/src/server/lib/errors.ts b/src/server/lib/errors.ts index e31c931..f2d3615 100644 --- a/src/server/lib/errors.ts +++ b/src/server/lib/errors.ts @@ -1,5 +1,6 @@ import { readFile } from "fs/promises" import type { Context } from "hono" +import type { StatusCode } from "hono/utils/http-status" let errorPage: string @@ -27,7 +28,7 @@ export default async function ServeError( errorPage .replaceAll("$code", code.toString()) .replaceAll("$text", reason), - code, + code as StatusCode, { "x-backup-status-message": reason, // glitch default nginx configuration } diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index d740b29..002be9c 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -77,23 +77,6 @@ export interface StatusCodeError { message: string } -async function startPushingWebStream(stream: Readable, webStream: ReadableStream) { - const reader = await webStream.getReader() - let pushing = false // acts as a debounce just in case - // (words of a girl paranoid from writing readfilestream) - - return function() { - if (pushing) return - pushing = true - - return reader.read().then(result => { - if (result.value) - pushing = false - return {readyForMore: result.value ? stream.push(result.value) : false, streamDone: result.done } - }) - } -} - export class WebError extends Error { readonly statusCode: number = 500 @@ -105,6 +88,198 @@ export class WebError extends Error { } +export class ReadStream extends Readable { + + files: Files + pointer: FilePointer + + attachmentBuffer: APIAttachment[] = [] + msgIdx: number = 0 + position: number = 0 + + ranges: { + useRanges: boolean, + byteStart: number, + byteEnd: number + scan_msg_begin: number, + scan_msg_end: number, + scan_files_begin: number, + scan_files_end: number + } + + id: number = Math.random() + + constructor(files: Files, pointer: FilePointer, range?: {start: number, end: number}) { + super() + console.log(this.id, range) + this.files = files + this.pointer = pointer + + let useRanges = + Boolean(range && pointer.chunkSize && pointer.sizeInBytes) + + this.ranges = { + useRanges, + scan_msg_begin: 0, + scan_msg_end: pointer.messageids.length - 1, + scan_files_begin: + useRanges + ? Math.floor(range!.start / pointer.chunkSize!) + : 0, + scan_files_end: + useRanges + ? Math.ceil(range!.end / pointer.chunkSize!) - 1 + : -1, + byteStart: range?.start || 0, + byteEnd: range?.end || 0 + } + + if (useRanges) + this.ranges.scan_msg_begin = Math.floor(this.ranges.scan_files_begin / 10), + this.ranges.scan_msg_end = Math.ceil(this.ranges.scan_files_end / 10)-1, + this.msgIdx = this.ranges.scan_msg_begin + } + + async _read() { + if (this.busy) return + this.busy = true + let readyForMore = true + + while (readyForMore) { + let result = await this.pushData() + if (result === undefined) return // stream has been destroyed. nothing left to do... + readyForMore = result + } + this.busy = false + } + + async getNextAttachment() { + // return first in our attachment buffer + let ret = this.attachmentBuffer.splice(0,1)[0] + if (ret) return ret + + console.log(this.id, this.msgIdx, this.ranges.scan_msg_end, this.pointer.messageids[this.msgIdx]) + + // oh, there's none left. let's fetch a new message, then. + if ( + !this.pointer.messageids[this.msgIdx] + || this.msgIdx > this.ranges.scan_msg_end + ) return null + + console.log('passing') + + let msg = await this.files.api + .fetchMessage(this.pointer.messageids[this.msgIdx]) + .catch(() => { + return null + }) + + if (msg?.attachments) { + let attach = Array.from(msg.attachments.values()) + + this.attachmentBuffer = this.ranges.useRanges ? attach.slice( + this.msgIdx == this.ranges.scan_msg_begin + ? this.ranges.scan_files_begin - this.ranges.scan_msg_begin * 10 + : 0, + this.msgIdx == this.ranges.scan_msg_end + ? this.ranges.scan_files_end - this.ranges.scan_msg_end * 10 + 1 + : attach.length + ) : attach + } + + this.msgIdx++ + return this.attachmentBuffer.splice(0,1)[0] + } + + async getPusherForWebStream(webStream: ReadableStream) { + const reader = await webStream.getReader() + let pushing = false // acts as a debounce just in case + // (words of a girl paranoid from writing readfilestream) + + let pushToStream = this.push.bind(this) + + return function() { + //if (pushing) return + pushing = true + + return reader.read().then(result => { + let pushed + if (!result.done) { + pushing = false + pushed = pushToStream(result.value) + } + return {readyForMore: pushed || false, streamDone: result.done } + }) + } + } + + async getNextChunk() { + let scanning_chunk = await this.getNextAttachment() + if (!scanning_chunk) return null + + let { + byteStart, byteEnd, scan_files_begin, scan_files_end, scan_msg_begin, scan_msg_end + } = this.ranges + + let headers: HeadersInit = + this.ranges.useRanges + ? { + Range: `bytes=${ + this.position == 0 + ? byteStart - scan_files_begin * this.pointer.chunkSize! + : "0" + }-${ + this.attachmentBuffer.length == 0 && this.msgIdx == scan_files_end + ? byteEnd - scan_files_end * this.pointer.chunkSize! + : "" + }`, + } + : {} + + let response = await fetch(scanning_chunk.url, {headers}) + .catch((e: Error) => { + console.error(e) + return {body: e} + }) + + this.position++ + + return response.body + } + + currentPusher?: (() => Promise<{readyForMore: boolean, streamDone: boolean }> | undefined) + busy: boolean = false + + async pushData(): Promise { + + // uh oh, we don't have a currentPusher + // let's make one then + if (!this.currentPusher) { + let next = await this.getNextChunk() + if (next && !(next instanceof Error)) + // okay, so we have a new chunk + // let's generate a new currentPusher + this.currentPusher = await this.getPusherForWebStream(next) + else { + // oops, look like there's an error + // or the stream has ended. + // let's destroy the stream + console.log(this.id, "Ending", next) + if (next) this.destroy(next); else this.push(null) + return + } + } + + let result = await this.currentPusher() + + if (result?.streamDone) { + this.currentPusher = undefined + return this.pushData() + } else return result?.readyForMore + + } +} + export class UploadStream extends Writable { uploadId?: string @@ -351,35 +526,6 @@ export default class Files { .catch(console.error) } - validateUpload(metadata: FileUploadSettings & { size : number, uploadId: string }) { - return multiAssert( - new Map() - .set(!metadata.filename, {status: 400, message: "missing filename"}) - .set(metadata.filename.length > 128, {status: 400, message: "filename too long"}) - .set(!metadata.mime, {status: 400, message: "missing mime type"}) - .set(metadata.mime.length > 128, {status: 400, message: "mime type too long"}) - .set( - metadata.uploadId.match(id_check_regex)?.[0] != metadata.uploadId - || metadata.uploadId.length > this.config.maxUploadIdLength, - { status: 400, message: "invalid file ID" } - ) - .set( - this.files[metadata.uploadId] && - (metadata.owner - ? this.files[metadata.uploadId].owner != metadata.owner - : true), - { status: 403, message: "you don't own this file" } - ) - .set( - this.files[metadata.uploadId]?.reserved, - { - status: 400, - message: "already uploading this file. if your file is stuck in this state, contact an administrator" - } - ) - ) - } - createWriteStream(owner?: string) { return new UploadStream(this, owner) } @@ -435,144 +581,11 @@ export default class Files { async readFileStream( uploadId: string, range?: { start: number; end: number } - ): Promise { + ): Promise { if (this.files[uploadId]) { let file = this.files[uploadId] if (!file.sizeInBytes || !file.chunkSize) await this.update(uploadId) - - let scan_msg_begin = 0, - scan_msg_end = file.messageids.length - 1, - scan_files_begin = 0, - scan_files_end = -1 - - let useRanges = range && file.chunkSize && file.sizeInBytes - - // todo: figure out how to get typesccript to accept useRanges - // i'm too tired to look it up or write whatever it wnats me to do - if (useRanges) { - // Calculate where to start file scans... - - scan_files_begin = Math.floor(range!.start / file.chunkSize!) - scan_files_end = Math.ceil(range!.end / file.chunkSize!) - 1 - - scan_msg_begin = Math.floor(scan_files_begin / 10) - scan_msg_end = Math.ceil(scan_files_end / 10) - } - - let attachments: APIAttachment[] = [] - - let msgIdx = scan_msg_begin - - let getNextAttachment = async () => { - // return first in our attachment buffer - let ret = attachments.splice(0,1)[0] - if (ret) return ret - - // oh, there's none left. let's fetch a new message, then. - if (!file.messageids[msgIdx] || msgIdx > scan_msg_end) return null - let msg = await this.api - .fetchMessage(file.messageids[msgIdx]) - .catch(() => { - return null - }) - - if (msg?.attachments) { - let attach = Array.from(msg.attachments.values()) - - attachments = useRanges ? attach.slice( - msgIdx == scan_msg_begin - ? scan_files_begin - scan_msg_begin * 10 - : 0, - msgIdx == scan_msg_end - ? scan_files_end - scan_msg_end * 10 + 1 - : attach.length - ) : attach - console.log(attachments) - } - - msgIdx++ - return attachments.splice(0,1)[0] - } - - let position = 0 - - let getNextChunk = async () => { - let scanning_chunk = await getNextAttachment() - if (!scanning_chunk) return null - - let headers: HeadersInit = - useRanges - ? { - Range: `bytes=${ - position == 0 - ? range!.start - scan_files_begin * file.chunkSize! - : "0" - }-${ - position == attachments.length - 1 - ? range!.end - scan_files_end * file.chunkSize! - : "" - }`, - } - : {} - - let response = await fetch(scanning_chunk.url, {headers}) - .catch((e: Error) => { - console.error(e) - return {body: e} - }) - - position++ - - return response.body - } - - let currentPusher : (() => Promise<{readyForMore: boolean, streamDone: boolean }> | undefined) | undefined - let busy = false - - let pushWS : (stream: Readable) => Promise = async (stream: Readable) => { - - // uh oh, we don't have a currentPusher - // let's make one then - if (!currentPusher) { - let next = await getNextChunk() - if (next && !(next instanceof Error)) - // okay, so we have a new chunk - // let's generate a new currentPusher - currentPusher = await startPushingWebStream(stream, next) - else { - // oops, look like there's an error - // or the stream has ended. - // let's destroy the stream - if (next) stream.destroy(next); else stream.push(null) - return - } - } - - let result = await currentPusher() - - if (result?.streamDone) currentPusher = undefined; - return result?.streamDone || result?.readyForMore - - } - - let dataStream = new Readable({ - async read() { - - if (busy) return - busy = true - let readyForMore = true - - while (readyForMore) { - let result = await pushWS(this) - if (result === undefined) return // stream has been destroyed. nothing left to do... - readyForMore = result - } - busy = false - - } - }) - - return dataStream + return new ReadStream(this, file, range) } else { throw { status: 404, message: "not found" } } diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 183e30c..3e6376e 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -1,6 +1,6 @@ import bodyParser from "body-parser" import { Hono } from "hono" - +import {stream as startHonoStream} from "hono/streaming" import * as Accounts from "../../../lib/accounts.js" import * as auth from "../../../lib/auth.js" import RangeParser, { type Range } from "range-parser" @@ -12,6 +12,7 @@ import {ReadableStream as StreamWebReadable} from "node:stream/web" import formidable from "formidable" import { HttpBindings } from "@hono/node-server" import pkg from "../../../../../package.json" assert {type: "json"} +import { type StatusCode } from "hono/utils/http-status" export let primaryApi = new Hono<{ Variables: { account: Accounts.Account @@ -68,8 +69,6 @@ export default function (files: Files) { } } - console.log(range) - return files .readFileStream(fileId, range) .then(async (stream) => { @@ -85,8 +84,11 @@ export default function (files: Files) { ) } - return ctx.req.method == "HEAD" ? ctx.body(null) : ctx.stream(async (webStream) => { - webStream.pipe(Readable.toWeb(stream.on("error", e => {})) as ReadableStream).catch(e => {}) + return ctx.req.method == "HEAD" ? ctx.body(null) : startHonoStream(ctx, async (webStream) => { + await webStream.pipe(Readable.toWeb(stream) as ReadableStream) + }, async (err, webStream) => { + console.error(err) + await webStream.close() }) }) .catch((err) => { @@ -111,9 +113,9 @@ export default function (files: Files) { errEscalated = true if ("httpCode" in err) - ctx.status(err.httpCode as number) + ctx.status(err.httpCode as StatusCode) else if (err instanceof WebError) - ctx.status(err.statusCode) + ctx.status(err.statusCode as StatusCode) else ctx.status(400) resolve(ctx.body(err.message)) } @@ -207,7 +209,7 @@ export default function (files: Files) { Readable.fromWeb(res.body as StreamWebReadable) .pipe(file) - .on("error", (err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode : 500))) + .on("error", (err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode as StatusCode : 500))) file .setName( @@ -222,7 +224,7 @@ export default function (files: Files) { file.once("finish", () => { file.commit() .then(id => resolve(ctx.text(id!))) - .catch((err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode : 500))) + .catch((err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode as StatusCode : 500))) }) }) From 70eace9de439a699f10be59cc512aa96e4c8f4a9 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 6 Mar 2024 18:43:36 +0000 Subject: [PATCH 090/173] uhhh...? can't test; not home. prolly doesn't work @Jack5079 --- src/server/routes/api/v0/primaryApi.ts | 34 ++++++++++++-------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 3e6376e..974c401 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -69,27 +69,25 @@ export default function (files: Files) { } } + if (range) { + ctx.status(206) + ctx.header( + "Content-Length", + (range.end - range.start + 1).toString() + ) + ctx.header( + "Content-Range", + `bytes ${range.start}-${range.end}/${file.sizeInBytes}` + ) + } + + if (ctx.req.method == "HEAD") + return ctx.body(null) + return files .readFileStream(fileId, range) .then(async (stream) => { - if (range) { - ctx.status(206) - ctx.header( - "Content-Length", - (range.end - range.start + 1).toString() - ) - ctx.header( - "Content-Range", - `bytes ${range.start}-${range.end}/${file.sizeInBytes}` - ) - } - - return ctx.req.method == "HEAD" ? ctx.body(null) : startHonoStream(ctx, async (webStream) => { - await webStream.pipe(Readable.toWeb(stream) as ReadableStream) - }, async (err, webStream) => { - console.error(err) - await webStream.close() - }) + return new Response(Readable.toWeb(stream) as ReadableStream, ctx.res) }) .catch((err) => { return ServeError(ctx, err.status, err.message) From 7df1c8190abc2ce0ca65201324cea8e25b29961a Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 6 Mar 2024 17:49:23 -0800 Subject: [PATCH 091/173] My goddd you konw what that owrks well enough --- config.json | 4 +-- src/server/lib/files.ts | 50 +++++++++++++++++++------- src/server/routes/api/v0/primaryApi.ts | 13 ++++++- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/config.json b/config.json index 4b906ad..757067a 100644 --- a/config.json +++ b/config.json @@ -1,9 +1,9 @@ { - "maxDiscordFiles": 500, + "maxDiscordFiles": 1000, "maxDiscordFileSize": 10485760, "targetGuild": "906767804575928390", "targetChannel": "1024080525993971913", - "requestTimeout": 1800000, + "requestTimeout": 3600000, "maxUploadIdLength": 30, "accounts": { "registrationEnabled": true, diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 002be9c..9ba91ea 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -108,6 +108,7 @@ export class ReadStream extends Readable { } id: number = Math.random() + aborter?: AbortController constructor(files: Files, pointer: FilePointer, range?: {start: number, end: number}) { super() @@ -140,7 +141,8 @@ export class ReadStream extends Readable { this.msgIdx = this.ranges.scan_msg_begin } - async _read() { + async _read() {/* + console.log("Calling for more data") if (this.busy) return this.busy = true let readyForMore = true @@ -150,7 +152,14 @@ export class ReadStream extends Readable { if (result === undefined) return // stream has been destroyed. nothing left to do... readyForMore = result } - this.busy = false + this.busy = false*/ + this.pushData() + } + + async _destroy(error: Error | null, callback: (error?: Error | null | undefined) => void): Promise { + if (this.aborter) + this.aborter.abort() + callback() } async getNextAttachment() { @@ -166,8 +175,6 @@ export class ReadStream extends Readable { || this.msgIdx > this.ranges.scan_msg_end ) return null - console.log('passing') - let msg = await this.files.api .fetchMessage(this.pointer.messageids[this.msgIdx]) .catch(() => { @@ -175,7 +182,7 @@ export class ReadStream extends Readable { }) if (msg?.attachments) { - let attach = Array.from(msg.attachments.values()) + let attach = msg.attachments this.attachmentBuffer = this.ranges.useRanges ? attach.slice( this.msgIdx == this.ranges.scan_msg_begin @@ -197,12 +204,21 @@ export class ReadStream extends Readable { // (words of a girl paranoid from writing readfilestream) let pushToStream = this.push.bind(this) + let stream = this return function() { - //if (pushing) return + if (pushing) return pushing = true - return reader.read().then(result => { + return reader.read().catch(e => { + // Probably means an AbortError; whatever it is we'll need to abort + if (webStream.locked) reader.releaseLock() + webStream.cancel().catch(e => undefined) + if (!stream.destroyed) stream.destroy() + return e + }).then(result => { + if (result instanceof Error || !result) return result + let pushed if (!result.done) { pushing = false @@ -214,6 +230,7 @@ export class ReadStream extends Readable { } async getNextChunk() { + console.log("Next chunk requested") let scanning_chunk = await this.getNextAttachment() if (!scanning_chunk) return null @@ -236,7 +253,9 @@ export class ReadStream extends Readable { } : {} - let response = await fetch(scanning_chunk.url, {headers}) + this.aborter = new AbortController() + + let response = await fetch(scanning_chunk.url, {headers, signal: this.aborter.signal}) .catch((e: Error) => { console.error(e) return {body: e} @@ -247,7 +266,7 @@ export class ReadStream extends Readable { return response.body } - currentPusher?: (() => Promise<{readyForMore: boolean, streamDone: boolean }> | undefined) + currentPusher?: (() => Promise<{readyForMore: boolean, streamDone: boolean } | void> | undefined) busy: boolean = false async pushData(): Promise { @@ -256,11 +275,11 @@ export class ReadStream extends Readable { // let's make one then if (!this.currentPusher) { let next = await this.getNextChunk() - if (next && !(next instanceof Error)) + if (next && !(next instanceof Error)) { // okay, so we have a new chunk // let's generate a new currentPusher this.currentPusher = await this.getPusherForWebStream(next) - else { + } else { // oops, look like there's an error // or the stream has ended. // let's destroy the stream @@ -273,6 +292,7 @@ export class ReadStream extends Readable { let result = await this.currentPusher() if (result?.streamDone) { + this.aborter = undefined this.currentPusher = undefined return this.pushData() } else return result?.readyForMore @@ -344,9 +364,11 @@ export class UploadStream extends Writable { callback() } - _destroy(error: Error | null, callback: (err?: Error|null) => void) { + aborted: boolean = false + + async _destroy(error: Error | null, callback: (err?: Error|null) => void) { this.error = error || undefined - if (error) this.abort() + await this.abort() callback() } @@ -354,6 +376,8 @@ export class UploadStream extends Writable { * @description Cancel & unlock the file. When destroy() is called with a non-WebError, this is automatically called */ async abort() { + if (this.aborted) return + this.aborted = true console.log("Aborting") if (!this.destroyed) this.destroy() if (this.current) this.current.destroy(this.error) diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 974c401..2b5ed29 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -13,6 +13,7 @@ import formidable from "formidable" import { HttpBindings } from "@hono/node-server" import pkg from "../../../../../package.json" assert {type: "json"} import { type StatusCode } from "hono/utils/http-status" +import { EventEmitter } from "node:events" export let primaryApi = new Hono<{ Variables: { account: Accounts.Account @@ -87,7 +88,17 @@ export default function (files: Files) { return files .readFileStream(fileId, range) .then(async (stream) => { - return new Response(Readable.toWeb(stream) as ReadableStream, ctx.res) + let rs = new ReadableStream({ + start(controller) { + stream.once("end", () => controller.close()) + stream.once("error", (err) => controller.error(err)) + }, + cancel(reason) { + stream.destroy(reason instanceof Error ? reason : new Error(reason)) + } + }) + stream.pipe(ctx.env.outgoing) + return new Response(rs, ctx.body(null)) }) .catch((err) => { return ServeError(ctx, err.status, err.message) From 92e330df28ed783ead1783aced4aed1d4f2e236d Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 6 Mar 2024 18:09:40 -0800 Subject: [PATCH 092/173] Wow i am. stupid okay --- src/server/lib/DiscordAPI/index.ts | 6 +++--- src/server/lib/files.ts | 10 +++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/server/lib/DiscordAPI/index.ts b/src/server/lib/DiscordAPI/index.ts index bcb5bd8..437ad8d 100644 --- a/src/server/lib/DiscordAPI/index.ts +++ b/src/server/lib/DiscordAPI/index.ts @@ -16,7 +16,7 @@ function convertSnowflakeToDate(snowflake: string|number, epoch = DISCORD_EPOCH) interface MessageCacheObject { expire: number, - object: APIMessage + object: string } export class Client { @@ -37,13 +37,13 @@ export class Client { if (cache && this.messageCache.has(id)) { let cachedMessage = this.messageCache.get(id)! if (cachedMessage.expire >= Date.now()) { - return cachedMessage.object + return JSON.parse(cachedMessage.object) as APIMessage } } let message = await (this.rest.fetch(`/channels/${this.targetChannel}/messages/${id}`).then(res=>res.json()) as Promise) - this.messageCache.set(id, { object: message, expire: EXPIRE_AFTER + Date.now() }) + this.messageCache.set(id, { object: JSON.stringify(message) /* clone object so that removing ids from the array doesn't. yeah */, expire: EXPIRE_AFTER + Date.now() }) return message } diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 9ba91ea..ab2e96a 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -177,12 +177,14 @@ export class ReadStream extends Readable { let msg = await this.files.api .fetchMessage(this.pointer.messageids[this.msgIdx]) - .catch(() => { + .catch((e) => { + console.error(e) return null }) if (msg?.attachments) { let attach = msg.attachments + console.log(attach) this.attachmentBuffer = this.ranges.useRanges ? attach.slice( this.msgIdx == this.ranges.scan_msg_begin @@ -192,6 +194,8 @@ export class ReadStream extends Readable { ? this.ranges.scan_files_end - this.ranges.scan_msg_end * 10 + 1 : attach.length ) : attach + + console.log(this.attachmentBuffer) } this.msgIdx++ @@ -230,12 +234,12 @@ export class ReadStream extends Readable { } async getNextChunk() { - console.log("Next chunk requested") let scanning_chunk = await this.getNextAttachment() + console.log(this.id, "Next chunk requested; got attachment", scanning_chunk) if (!scanning_chunk) return null let { - byteStart, byteEnd, scan_files_begin, scan_files_end, scan_msg_begin, scan_msg_end + byteStart, byteEnd, scan_files_begin, scan_files_end } = this.ranges let headers: HeadersInit = From cdcc1f0312683d0dc1a03c5a28dd4e899334db3f Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 7 Mar 2024 06:51:33 -0800 Subject: [PATCH 093/173] Graaahhh --- src/server/routes/api/v1/account.ts | 128 +++++++++++++++++++--------- 1 file changed, 88 insertions(+), 40 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index eccd94e..d7ec366 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -8,7 +8,7 @@ import { getCookie, setCookie } from "hono/cookie" import Files, { id_check_regex } from "../../../lib/files.js" import * as Accounts from "../../../lib/accounts.js" -import * as Authentication from "../../../lib/auth.js" +import * as auth from "../../../lib/auth.js" import { assertAPI, getAccount, @@ -40,28 +40,23 @@ export default function (files: Files) { return } - if (Authentication.validate(getCookie(ctx, "auth")!)) { + if (auth.validate(getCookie(ctx, "auth")!)) { ServeError(ctx, 400, "you are already logged in") return } - const Account = Accounts.getFromUsername(body.username) + const account = Accounts.getFromUsername(body.username) - if (!Account || !Accounts.password.check(Account.id, body.password)) { + if (!account || !Accounts.password.check(account.id, body.password)) { ServeError(ctx, 400, "username or password incorrect") return } - setCookie( - ctx, - "auth", - Authentication.create( - Account.id, // account id - 3 * 24 * 60 * 60 * 1000 // expiration time - ), - { - // expires: - } - ) + setCookie(ctx, "auth", auth.create(account.id, 3 * 24 * 60 * 60 * 1000), { + path: "/", + sameSite: "Strict", + secure: true, + httpOnly: true + }) ctx.status(200) }) @@ -71,7 +66,7 @@ export default function (files: Files) { return ServeError(ctx, 403, "account registration disabled") } - if (Authentication.validate(getCookie(ctx, "auth")!)) { + if (auth.validate(getCookie(ctx, "auth")!)) { return ServeError(ctx, 400, "you are already logged in") } @@ -106,18 +101,13 @@ export default function (files: Files) { } return Accounts.create(body.username, body.password) - .then((Account) => { - setCookie( - ctx, - "auth", - Authentication.create( - Account, // account id - 3 * 24 * 60 * 60 * 1000 // expiration time - ), - { - // expires: - } - ) + .then((account) => { + setCookie(ctx, "auth", auth.create(account, 3 * 24 * 60 * 60 * 1000), { + path: "/", + sameSite: "Strict", + secure: true, + httpOnly: true + }) return ctx.status(200) }) .catch(() => { @@ -126,15 +116,15 @@ export default function (files: Files) { }) router.post("/logout", (ctx) => { - if (!Authentication.validate(getCookie(ctx, "auth")!)) { + if (!auth.validate(getCookie(ctx, "auth")!)) { return ServeError(ctx, 401, "not logged in") } - Authentication.invalidate(getCookie(ctx, "auth")!) + auth.invalidate(getCookie(ctx, "auth")!) return ctx.text("logged out") }) - router.patch( + router.put( "/dfv", requiresAccount, requiresPermissions("manage"), @@ -160,22 +150,80 @@ export default function (files: Files) { } ) - router.delete("/me", requiresAccount, noAPIAccess, async (ctx) => { + router.delete("/:user", requiresAccount, noAPIAccess, async (ctx) => { + let acc = ctx.req.param("user") == "me" ? ctx.get("account") : Accounts.getFromId(ctx.req.param("user")) + if (acc != ctx.get("account") && !ctx.get("account")?.admin) return ServeError(ctx, 403, "you are not an administrator") + if (!acc) return ServeError(ctx, 404, "account does not exist") const Account = ctx.get("account") as Accounts.Account const accountId = Account.id - Authentication.AuthTokens.filter((e) => e.account == accountId).forEach( + auth.AuthTokens.filter((e) => e.account == accountId).forEach( (token) => { - Authentication.invalidate(token.token) + auth.invalidate(token.token) } ) + if (acc.email) { + await sendMail( + acc.email, + "Notice of account deletion", + `Your account, ${ + acc.username + }, has been removed. Thank you for using monofile.` + ).catch() + return ctx.text("OK") + } + await Accounts.deleteAccount(accountId) return ctx.text("account deleted") }) - router.patch("/me/name", requiresAccount, noAPIAccess, async (ctx) => { - const Account = ctx.get("account") as Accounts.Account + router.put("/:user/password", requiresAccount, noAPIAccess, async (ctx) => { + let acc = ctx.req.param("user") == "me" ? ctx.get("account") : Accounts.getFromId(ctx.req.param("user")) + if (acc != ctx.get("account") && !ctx.get("account")?.admin) return ServeError(ctx, 403, "you are not an administrator") + if (!acc) return ServeError(ctx, 404, "account does not exist") + const body = await ctx.req.json() + const newPassword = body.newPassword + + if ( + typeof body.password != "string" || + !Accounts.password.check(acc.id, body.password) + ) { + return ServeError( + ctx, + 403, + "previous password not supplied" + ) + } + + if ( + typeof newPassword != "string" || + newPassword.length < 8 + ) { + return ServeError( + ctx, + 400, + "password must be 8 characters or longer" + ) + } + + Accounts.password.set(acc.id, newPassword) + Accounts.save() + + if (acc.email) { + await sendMail( + acc.email, + `Your login details have been updated`, + `Hello there! Your password has been updated. Please update your saved login details accordingly.` + ).catch() + return ctx.text("OK") + } + }) + + router.put("/:user/username", requiresAccount, noAPIAccess, async (ctx) => { + let acc = ctx.req.param("user") == "me" ? ctx.get("account") : Accounts.getFromId(ctx.req.param("user")) + if (acc != ctx.get("account") && !ctx.get("account")?.admin) return ServeError(ctx, 403, "you are not an administrator") + if (!acc) return ServeError(ctx, 404, "account does not exist") const body = await ctx.req.json() const newUsername = body.username @@ -206,14 +254,14 @@ export default function (files: Files) { return } - Account.username = newUsername + acc.username = newUsername Accounts.save() - if (Account.email) { + if (acc.email) { await sendMail( - Account.email, + acc.email, `Your login details have been updated`, - `Hello there! Your username has been updated to ${newUsername}. Please update your devices accordingly. Thank you for using monofile.` + `Hello there! Your username has been updated to ${newUsername}. Please update your saved login details accordingly.` ).catch() return ctx.text("OK") } From c87316cbc79edbb69a11b0da069807f3ce42aba1 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 7 Mar 2024 21:11:18 +0000 Subject: [PATCH 094/173] grahh how am i going to do secondary authenticatino for the delete /user route --- src/server/routes/api/v1/account.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index d7ec366..92ca1fa 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -154,15 +154,15 @@ export default function (files: Files) { let acc = ctx.req.param("user") == "me" ? ctx.get("account") : Accounts.getFromId(ctx.req.param("user")) if (acc != ctx.get("account") && !ctx.get("account")?.admin) return ServeError(ctx, 403, "you are not an administrator") if (!acc) return ServeError(ctx, 404, "account does not exist") - const Account = ctx.get("account") as Accounts.Account - const accountId = Account.id - auth.AuthTokens.filter((e) => e.account == accountId).forEach( + auth.AuthTokens.filter((e) => e.account == acc?.id).forEach( (token) => { auth.invalidate(token.token) } ) + await Accounts.deleteAccount(acc.id) + if (acc.email) { await sendMail( acc.email, @@ -173,8 +173,7 @@ export default function (files: Files) { ).catch() return ctx.text("OK") } - - await Accounts.deleteAccount(accountId) + return ctx.text("account deleted") }) From 756077148a4e8d1fc1ca3a0ebf2dba502c70a8cd Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Thu, 7 Mar 2024 21:12:37 -0500 Subject: [PATCH 095/173] feat: cookie persistence :funnythumbsup: --- src/server/routes/api/v0/authRoutes.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts index 6b55271..1b326f3 100644 --- a/src/server/routes/api/v0/authRoutes.ts +++ b/src/server/routes/api/v0/authRoutes.ts @@ -64,7 +64,8 @@ export default function (files: Files) { path: "/", sameSite: "Strict", secure: true, - httpOnly: true + httpOnly: true, + maxAge: 3 * 24 * 60 * 60 * 1000, }) return ctx.text("") }) From 687e083ca2d7f9c588c2b93aaf245ef6864b8813 Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Thu, 7 Mar 2024 21:20:05 -0500 Subject: [PATCH 096/173] refactor: :alien: Remove v0 CSS API and migrate client to v1 CSS API --- src/download.html | 2 +- src/error.html | 2 +- src/index.html | 2 +- src/server/routes/api/v0/authRoutes.ts | 31 -------------------------- src/svelte/elem/prompts/account.js | 23 +++++++++++++------ 5 files changed, 19 insertions(+), 41 deletions(-) diff --git a/src/download.html b/src/download.html index 806c9a8..80a2093 100644 --- a/src/download.html +++ b/src/download.html @@ -19,7 +19,7 @@ - + { - const body = await ctx.req.json() - let acc = ctx.get("account") as Accounts.Account - - if (typeof body.fileId != "string") body.fileId = undefined - - if ( - !body.fileId || - (body.fileId.match(id_check_regex) == body.fileId && - body.fileId.length <= config.maxUploadIdLength) - ) { - acc.customCSS = body.fileId || undefined - if (!body.fileId) delete acc.customCSS - Accounts.save() - return ctx.text(`custom css saved`) - } else { - return ctx.text("invalid fileid", 400) - } - } - ) - authRoutes.post( "/embedcolor", requiresAccount, @@ -626,10 +600,5 @@ export default function (files: Files) { } ) - authRoutes.get("/customCSS", async (ctx) => { - let acc = ctx.get("account") - if (acc?.customCSS) return ctx.redirect(`/file/${acc.customCSS}`) - else return ctx.text("") - }) return authRoutes } diff --git a/src/svelte/elem/prompts/account.js b/src/svelte/elem/prompts/account.js index 27e5f31..b9c1b18 100644 --- a/src/svelte/elem/prompts/account.js +++ b/src/svelte/elem/prompts/account.js @@ -225,16 +225,25 @@ export function customcss(optPicker) { } ]).then((exp) => { if (exp && exp.selected) { - fetch(`/auth/customcss`,{method:"POST", body:JSON.stringify({ - fileId:exp.fileid - })}).then((response) => { - + fetch(`/api/v1/account/customization/css`, { + method: "PUT", + body: JSON.stringify({ + fileId: exp.fileid, + }), + }).then((response) => { if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) + optPicker.picker( + `${response.status} ${ + response.headers.get("x-backup-status-message") || + response.statusText || + "" + }`, + [] + ) } fetchAccountData() - refreshNeeded.set(true); + refreshNeeded.set(true) }) } }) @@ -300,4 +309,4 @@ export function embedSize(optPicker) { }) } }) -} \ No newline at end of file +} From 11e04941372279b3ff50d53044eda60d623ac141 Mon Sep 17 00:00:00 2001 From: "Jack W." Date: Thu, 7 Mar 2024 21:24:14 -0500 Subject: [PATCH 097/173] refactor: :alien: Same but with embedSize and embedColor --- src/server/routes/api/v0/authRoutes.ts | 45 -------------------------- src/svelte/elem/prompts/account.js | 38 ++++++++++++++++------ 2 files changed, 28 insertions(+), 55 deletions(-) diff --git a/src/server/routes/api/v0/authRoutes.ts b/src/server/routes/api/v0/authRoutes.ts index 4c75782..7b9cbff 100644 --- a/src/server/routes/api/v0/authRoutes.ts +++ b/src/server/routes/api/v0/authRoutes.ts @@ -164,51 +164,6 @@ export default function (files: Files) { } ) - authRoutes.post( - "/embedcolor", - requiresAccount, - requiresPermissions("customize"), - // Used body-parser - async (ctx) => { - let acc = ctx.get("account") as Accounts.Account - const body = await ctx.req.json() - if (typeof body.color != "string") body.color = undefined - - if ( - !body.color || - (body.color.toLowerCase().match(/[a-f0-9]+/) == - body.color.toLowerCase() && - body.color.length == 6) - ) { - if (!acc.embed) acc.embed = {} - acc.embed.color = body.color || undefined - if (!body.color) delete acc.embed.color - Accounts.save() - return ctx.text(`custom embed color saved`) - } else { - return ctx.text("invalid hex code", 400) - } - } - ) - - authRoutes.post( - "/embedsize", - requiresAccount, - requiresPermissions("customize"), - // Used body-parser - async (ctx) => { - let acc = ctx.get("account") as Accounts.Account - const body = await ctx.req.json() - if (typeof body.largeImage != "boolean") body.color = false - - if (!acc.embed) acc.embed = {} - acc.embed.largeImage = body.largeImage - if (!body.largeImage) delete acc.embed.largeImage - Accounts.save() - return ctx.text(`custom embed image size saved`) - } - ) - authRoutes.post( "/delete_account", requiresAccount, diff --git a/src/svelte/elem/prompts/account.js b/src/svelte/elem/prompts/account.js index b9c1b18..a93ee15 100644 --- a/src/svelte/elem/prompts/account.js +++ b/src/svelte/elem/prompts/account.js @@ -266,12 +266,21 @@ export function embedColor(optPicker) { } ]).then((exp) => { if (exp && exp.selected) { - fetch(`/auth/embedcolor`,{method:"POST", body:JSON.stringify({ - color:exp.color - })}).then((response) => { - + fetch(`/api/v1/account/customization/embed/color`, { + method: "POST", + body: JSON.stringify({ + color: exp.color, + }), + }).then((response) => { if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) + optPicker.picker( + `${response.status} ${ + response.headers.get("x-backup-status-message") || + response.statusText || + "" + }`, + [] + ) } fetchAccountData() @@ -297,12 +306,21 @@ export function embedSize(optPicker) { } ]).then((exp) => { if (exp && exp.selected !== null) { - fetch(`/auth/embedsize`,{method:"POST", body:JSON.stringify({ - largeImage:exp.selected - })}).then((response) => { - + fetch(`/api/v1/account/customization/embed/size`, { + method: "POST", + body: JSON.stringify({ + largeImage: exp.selected, + }), + }).then((response) => { if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) + optPicker.picker( + `${response.status} ${ + response.headers.get("x-backup-status-message") || + response.statusText || + "" + }`, + [] + ) } fetchAccountData() From 10b4e2bf9e386a1b46101ed57e5274ec366e80c7 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 8 Mar 2024 06:24:22 -0800 Subject: [PATCH 098/173] hwhw --- src/server/routes/api/v0/primaryApi.ts | 5 +- src/server/routes/api/v1/account.ts | 40 +--------------- src/server/routes/api/v1/api.json | 1 + src/server/routes/api/v1/session.ts | 66 ++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 43 deletions(-) create mode 100644 src/server/routes/api/v1/session.ts diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 2b5ed29..b44b717 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -1,6 +1,4 @@ -import bodyParser from "body-parser" import { Hono } from "hono" -import {stream as startHonoStream} from "hono/streaming" import * as Accounts from "../../../lib/accounts.js" import * as auth from "../../../lib/auth.js" import RangeParser, { type Range } from "range-parser" @@ -8,12 +6,11 @@ import ServeError from "../../../lib/errors.js" import Files, { WebError } from "../../../lib/files.js" import { getAccount, requiresPermissions } from "../../../lib/middleware.js" import {Readable} from "node:stream" -import {ReadableStream as StreamWebReadable} from "node:stream/web" +import type {ReadableStream as StreamWebReadable} from "node:stream/web" import formidable from "formidable" import { HttpBindings } from "@hono/node-server" import pkg from "../../../../../package.json" assert {type: "json"} import { type StatusCode } from "hono/utils/http-status" -import { EventEmitter } from "node:events" export let primaryApi = new Hono<{ Variables: { account: Accounts.Account diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 92ca1fa..21ae146 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -30,37 +30,8 @@ const router = new Hono<{ router.use(getAccount) export default function (files: Files) { - router.post("/login", async (ctx, res) => { - const body = await ctx.req.json() - if ( - typeof body.username != "string" || - typeof body.password != "string" - ) { - ServeError(ctx, 400, "please provide a username or password") - return - } - if (auth.validate(getCookie(ctx, "auth")!)) { - ServeError(ctx, 400, "you are already logged in") - return - } - - const account = Accounts.getFromUsername(body.username) - - if (!account || !Accounts.password.check(account.id, body.password)) { - ServeError(ctx, 400, "username or password incorrect") - return - } - setCookie(ctx, "auth", auth.create(account.id, 3 * 24 * 60 * 60 * 1000), { - path: "/", - sameSite: "Strict", - secure: true, - httpOnly: true - }) - ctx.status(200) - }) - - router.post("/create", async (ctx) => { + router.post("/", async (ctx) => { const body = await ctx.req.json() if (!Configuration.accounts.registrationEnabled) { return ServeError(ctx, 403, "account registration disabled") @@ -115,15 +86,6 @@ export default function (files: Files) { }) }) - router.post("/logout", (ctx) => { - if (!auth.validate(getCookie(ctx, "auth")!)) { - return ServeError(ctx, 401, "not logged in") - } - - auth.invalidate(getCookie(ctx, "auth")!) - return ctx.text("logged out") - }) - router.put( "/dfv", requiresAccount, diff --git a/src/server/routes/api/v1/api.json b/src/server/routes/api/v1/api.json index 694f259..cb186e4 100644 --- a/src/server/routes/api/v1/api.json +++ b/src/server/routes/api/v1/api.json @@ -6,6 +6,7 @@ "admin", "public", "file", + "session", { "file": "customization", "to": "/account/customization" diff --git a/src/server/routes/api/v1/session.ts b/src/server/routes/api/v1/session.ts new file mode 100644 index 0000000..3299282 --- /dev/null +++ b/src/server/routes/api/v1/session.ts @@ -0,0 +1,66 @@ +// Modules + + +import { Hono } from "hono" +import { getCookie, setCookie } from "hono/cookie" + +// Libs + +import Files, { id_check_regex } from "../../../lib/files.js" +import * as Accounts from "../../../lib/accounts.js" +import * as auth from "../../../lib/auth.js" +import { + getAccount, +} from "../../../lib/middleware.js" +import ServeError from "../../../lib/errors.js" + +const router = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() + +router.use(getAccount) + +export default function (files: Files) { + router.post("/", async (ctx, res) => { + const body = await ctx.req.json() + if ( + typeof body.username != "string" || + typeof body.password != "string" + ) { + ServeError(ctx, 400, "please provide a username or password") + return + } + + if (auth.validate(getCookie(ctx, "auth")!)) { + ServeError(ctx, 400, "you are already logged in") + return + } + + const account = Accounts.getFromUsername(body.username) + + if (!account || !Accounts.password.check(account.id, body.password)) { + ServeError(ctx, 400, "username or password incorrect") + return + } + setCookie(ctx, "auth", auth.create(account.id, 3 * 24 * 60 * 60 * 1000), { + path: "/", + sameSite: "Strict", + secure: true, + httpOnly: true + }) + ctx.status(200) + }) + + router.delete("/", (ctx) => { + if (!auth.validate(getCookie(ctx, "auth")!)) { + return ServeError(ctx, 401, "not logged in") + } + + auth.invalidate(getCookie(ctx, "auth")!) + return ctx.text("logged out") + }) + + return router +} From dc111da787c3c75f0456aea4b97a595fddc523c8 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 8 Mar 2024 21:08:46 +0000 Subject: [PATCH 099/173] workign on it --- src/server/routes/api/v1/account.ts | 91 ++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 21ae146..64f380d 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -23,11 +23,62 @@ import Configuration from "../../../../../config.json" assert {type:"json"} const router = new Hono<{ Variables: { - account: Accounts.Account + account: Accounts.Account, + target: Accounts.Account } }>() +type UserUpdateParameters = Partial +type Message = [200 | 400 | 401 | 403 | 501, string] + +// there's probably a less stupid way to do this than `K in keyof Pick` +// @Jack5079 make typings better if possible +const validators: { + [T in keyof Partial]: + /** + * @param actor The account performing this action + * @param target The target account for this action + * @param params Changes being patched in by the user + */ + (actor: Accounts.Account, target: Accounts.Account, params: UserUpdateParameters & { + [K in keyof Pick]-? : UserUpdateParameters[K] + }) => Accounts.Account[T] | Message +} = { + defaultFileVisibility(actor, target, params) { + if (["public", "private", "anonymous"].includes(params.defaultFileVisibility)) + return params.defaultFileVisibility + else return [400, "invalid file visibility"] + }, + email(actor, target, params) { + return [501, "not implemented"] + }, + admin(actor, target, params) { + if (actor.admin && !target.admin) return params.admin + else if (!actor.admin) return [400, "cannot promote yourself"] + else return [400, "cannot demote an admin"] + } +} + router.use(getAccount) +router.all("/:user", async (ctx, next) => { + let acc = + ctx.req.param("user") == "me" + ? ctx.get("account") + : ( + ctx.req.param("user").startsWith("@") + ? Accounts.getFromUsername(ctx.req.param("user").slice(1)) + : Accounts.getFromId(ctx.req.param("user")) + ) + if ( + acc != ctx.get("account") + && !ctx.get("account")?.admin + ) return ServeError(ctx, 403, "you cannot manage this user") + if (!acc) return ServeError(ctx, 404, "account does not exist") + + ctx.set("target", acc) + + return next() +}) export default function (files: Files) { @@ -86,7 +137,43 @@ export default function (files: Files) { }) }) - router.put( + router.patch( + "/:user", + requiresAccount, + requiresPermissions("manage"), + async (ctx) => { + let body = await ctx.req.json() as UserUpdateParameters + + } + ) + + router.patch( + "/dfv", + requiresAccount, + requiresPermissions("manage"), + async (ctx) => { + const body = await ctx.req.json() + const Account = ctx.get("account")! as Accounts.Account + + if ( + ["public", "private", "anonymous"].includes( + body.defaultFileVisibility + ) + ) { + Account.defaultFileVisibility = body.defaultFileVisibility + + Accounts.save() + + return ctx.text( + `dfv has been set to ${Account.defaultFileVisibility}` + ) + } else { + return ServeError(ctx, 400, "invalid dfv") + } + } + ) + + router.patch( "/dfv", requiresAccount, requiresPermissions("manage"), From e9df285ef79b8a72e449323915b0f94bd44e9132 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 8 Mar 2024 21:39:03 +0000 Subject: [PATCH 100/173] Ahhhhh im gonna figure this out when i get homeee --- src/server/routes/api/v1/account.ts | 55 ++++++----------------------- 1 file changed, 11 insertions(+), 44 deletions(-) diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 64f380d..3f49e07 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -148,54 +148,21 @@ export default function (files: Files) { ) router.patch( - "/dfv", + "/:user", requiresAccount, requiresPermissions("manage"), async (ctx) => { - const body = await ctx.req.json() - const Account = ctx.get("account")! as Accounts.Account + const body = await ctx.req.json() as UserUpdateParameters + const actor = ctx.get("account")! as Accounts.Account + const target = ctx.get("target")! as Accounts.Account + if (Array.isArray(body)) + return ServeError(ctx, 400, "invalid body") - if ( - ["public", "private", "anonymous"].includes( - body.defaultFileVisibility - ) - ) { - Account.defaultFileVisibility = body.defaultFileVisibility - - Accounts.save() - - return ctx.text( - `dfv has been set to ${Account.defaultFileVisibility}` - ) - } else { - return ServeError(ctx, 400, "invalid dfv") - } - } - ) - - router.patch( - "/dfv", - requiresAccount, - requiresPermissions("manage"), - async (ctx) => { - const body = await ctx.req.json() - const Account = ctx.get("account")! as Accounts.Account - - if ( - ["public", "private", "anonymous"].includes( - body.defaultFileVisibility - ) - ) { - Account.defaultFileVisibility = body.defaultFileVisibility - - Accounts.save() - - return ctx.text( - `dfv has been set to ${Account.defaultFileVisibility}` - ) - } else { - return ServeError(ctx, 400, "invalid dfv") - } + Object.entries(body).filter(e => e[1]).map(([x]) => { + if (x in validators) { + validators[x](actor, target, body as any) + } + }) } ) From b04414aeb94ea1305b096590da8bf40be657fbbf Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 8 Mar 2024 16:42:23 -0800 Subject: [PATCH 101/173] alright that's enough for now i'm gonna go eat --- src/server/routes/api/v1/account.ts | 192 ++++++++++------------ src/server/routes/api/v1/admin.ts | 117 ------------- src/server/routes/api/v1/api.json | 8 +- src/server/routes/api/v1/customization.ts | 96 ----------- src/server/routes/api/v1/public.ts | 8 - 5 files changed, 89 insertions(+), 332 deletions(-) delete mode 100644 src/server/routes/api/v1/admin.ts delete mode 100644 src/server/routes/api/v1/customization.ts delete mode 100644 src/server/routes/api/v1/public.ts diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 3f49e07..7a976f3 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -28,7 +28,7 @@ const router = new Hono<{ } }>() -type UserUpdateParameters = Partial +type UserUpdateParameters = Partial & { password: string, currentPassword?: string }> type Message = [200 | 400 | 401 | 403 | 501, string] // there's probably a less stupid way to do this than `K in keyof Pick` @@ -52,6 +52,68 @@ const validators: { email(actor, target, params) { return [501, "not implemented"] }, + password(actor, target, params) { + if ( + !params.currentPassword + || (params.currentPassword && Accounts.password.check(actor.id, params.currentPassword)) + ) return [401, "current password incorrect"] + + if ( + typeof params.password != "string" + || params.password.length < 8 + ) return [400, "password must be 8 characters or longer"] + + if (target.email) { + sendMail( + target.email, + `Your login details have been updated`, + `Hello there! Your password on your account, ${target.username}, has been updated` + + `${actor != target ? ` by ${actor.username}` : ""}. ` + + `Please update your saved login details accordingly.` + ).catch() + } + + return Accounts.password.hash(params.password) + + }, + username(actor, target, params) { + if (!params.currentPassword + || (params.currentPassword && Accounts.password.check(actor.id, params.currentPassword))) + return [401, "current password incorrect"] + + if ( + typeof params.username != "string" + || params.username.length < 3 + || params.username.length > 20 + ) return [400, "username must be between 3 and 20 characters in length"] + + if (Accounts.getFromUsername(params.username)) + return [400, "account with this username already exists"] + + if ((params.username.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != params.username) + return [400, "username has invalid characters"] + + if (target.email) { + sendMail( + target.email, + `Your login details have been updated`, + `Hello there! Your username on your account, ${target.username}, has been updated` + + `${actor != target ? ` by ${actor.username}` : ""} to ${params.username}. ` + + `Please update your saved login details accordingly.` + ).catch() + } + + return params.username + + }, + customCSS(actor, target, params) { + if ( + !params.customCSS || + (params.customCSS.match(id_check_regex)?.[0] == params.customCSS && + params.customCSS.length <= Configuration.maxUploadIdLength) + ) return params.customCSS + else return [400, "bad file id"] + }, admin(actor, target, params) { if (actor.admin && !target.admin) return params.admin else if (!actor.admin) return [400, "cannot promote yourself"] @@ -80,6 +142,13 @@ router.all("/:user", async (ctx, next) => { return next() }) +function isMessage(object: any): object is Message { + return Array.isArray(object) + && object.length == 2 + && typeof object[0] == "number" + && typeof object[1] == "string" +} + export default function (files: Files) { router.post("/", async (ctx) => { @@ -137,16 +206,6 @@ export default function (files: Files) { }) }) - router.patch( - "/:user", - requiresAccount, - requiresPermissions("manage"), - async (ctx) => { - let body = await ctx.req.json() as UserUpdateParameters - - } - ) - router.patch( "/:user", requiresAccount, @@ -158,11 +217,25 @@ export default function (files: Files) { if (Array.isArray(body)) return ServeError(ctx, 400, "invalid body") - Object.entries(body).filter(e => e[1]).map(([x]) => { - if (x in validators) { - validators[x](actor, target, body as any) - } + let results: [keyof Accounts.Account, Accounts.Account[keyof Accounts.Account]|Message][] = Object.entries(body).filter(e => e[1] && e[0] !== "currentPassword").map(([x]) => + [ + x as keyof Accounts.Account, + x in validators + ? validators[x as keyof Accounts.Account]!(actor, target, body as any) + : [400, `the ${x} parameter cannot be set or is not a valid parameter`] as Message + ] + ) + + let allMsgs = results.map(([x,v]) => { + if (isMessage(v)) + return v + target[x] = v as never // lol + return [200, "OK"] as Message }) + + if (allMsgs.length == 1) + return ctx.body(...allMsgs[0]!.reverse() as [Message[1], Message[0]]) // im sorry + else return ctx.json(allMsgs) } ) @@ -193,94 +266,5 @@ export default function (files: Files) { return ctx.text("account deleted") }) - router.put("/:user/password", requiresAccount, noAPIAccess, async (ctx) => { - let acc = ctx.req.param("user") == "me" ? ctx.get("account") : Accounts.getFromId(ctx.req.param("user")) - if (acc != ctx.get("account") && !ctx.get("account")?.admin) return ServeError(ctx, 403, "you are not an administrator") - if (!acc) return ServeError(ctx, 404, "account does not exist") - const body = await ctx.req.json() - const newPassword = body.newPassword - - if ( - typeof body.password != "string" || - !Accounts.password.check(acc.id, body.password) - ) { - return ServeError( - ctx, - 403, - "previous password not supplied" - ) - } - - if ( - typeof newPassword != "string" || - newPassword.length < 8 - ) { - return ServeError( - ctx, - 400, - "password must be 8 characters or longer" - ) - } - - Accounts.password.set(acc.id, newPassword) - Accounts.save() - - if (acc.email) { - await sendMail( - acc.email, - `Your login details have been updated`, - `Hello there! Your password has been updated. Please update your saved login details accordingly.` - ).catch() - return ctx.text("OK") - } - }) - - router.put("/:user/username", requiresAccount, noAPIAccess, async (ctx) => { - let acc = ctx.req.param("user") == "me" ? ctx.get("account") : Accounts.getFromId(ctx.req.param("user")) - if (acc != ctx.get("account") && !ctx.get("account")?.admin) return ServeError(ctx, 403, "you are not an administrator") - if (!acc) return ServeError(ctx, 404, "account does not exist") - const body = await ctx.req.json() - const newUsername = body.username - - if ( - typeof newUsername != "string" || - newUsername.length < 3 || - newUsername.length > 20 - ) { - return ServeError( - ctx, - 400, - "username must be between 3 and 20 characters in length" - ) - } - - if (Accounts.getFromUsername(newUsername)) { - return ServeError( - ctx, - 400, - "account with this username already exists" - ) - } - - if ( - (newUsername.match(/[A-Za-z0-9_\-\.]+/) || [])[0] != body.username - ) { - ServeError(ctx, 400, "username contains invalid characters") - return - } - - acc.username = newUsername - Accounts.save() - - if (acc.email) { - await sendMail( - acc.email, - `Your login details have been updated`, - `Hello there! Your username has been updated to ${newUsername}. Please update your saved login details accordingly.` - ).catch() - return ctx.text("OK") - } - }) - return router } diff --git a/src/server/routes/api/v1/admin.ts b/src/server/routes/api/v1/admin.ts deleted file mode 100644 index 6c3f1e7..0000000 --- a/src/server/routes/api/v1/admin.ts +++ /dev/null @@ -1,117 +0,0 @@ -// Modules - -import { writeFile } from "fs/promises" -import { Hono } from "hono" - -// Libs - -import Files, { id_check_regex } from "../../../lib/files.js" -import * as Accounts from "../../../lib/accounts.js" -import * as Authentication from "../../../lib/auth.js" -import { - getAccount, - noAPIAccess, - requiresAccount, - requiresAdmin, -} from "../../../lib/middleware.js" -import ServeError from "../../../lib/errors.js" -import { sendMail } from "../../../lib/mail.js" - -const router = new Hono<{ - Variables: { - account?: Accounts.Account - } -}>() - -router.use(getAccount, requiresAccount, requiresAdmin) - -export default function (files: Files) { - router.patch("/account/:username/password", async (ctx) => { - const Account = ctx.get("account") as Accounts.Account - const body = await ctx.req.json() - - const targetUsername = ctx.req.param("username") - const password = body.password - - if (typeof password !== "string") return ServeError(ctx, 404, "") - - const targetAccount = Accounts.getFromUsername(targetUsername) - - if (!targetAccount) return ServeError(ctx, 404, "") - - Accounts.password.set(targetAccount.id, password) - - Authentication.AuthTokens.filter( - (e) => e.account == targetAccount?.id - ).forEach((accountToken) => { - Authentication.invalidate(accountToken.token) - }) - - if (targetAccount.email) { - await sendMail( - targetAccount.email, - `Your login details have been updated`, - `Hello there! This email is to notify you of a password change that an administrator, ${Account.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.` - ).catch() - } - - return ctx.text("") - }) - - router.patch("/account/:username/elevate", (ctx) => { - const targetUsername = ctx.req.param("username") - const targetAccount = Accounts.getFromUsername(targetUsername) - - if (!targetAccount) { - return ServeError(ctx, 404, "") - } - - targetAccount.admin = true - Accounts.save() - - return ctx.text("") - }) - - router.delete( - "/account/:username/:deleteFiles", - requiresAccount, - noAPIAccess, - async (ctx) => { - const targetUsername = ctx.req.param("username") - const deleteFiles = ctx.req.param("deleteFiles") - - const targetAccount = Accounts.getFromUsername(targetUsername) - - if (!targetAccount) return ServeError(ctx, 404, "") - - const accountId = targetAccount.id - - Authentication.AuthTokens.filter( - (e) => e.account == accountId - ).forEach((token) => { - Authentication.invalidate(token.token) - }) - - const deleteAccount = () => - Accounts.deleteAccount(accountId).then((_) => - ctx.text("account deleted") - ) - - if (deleteFiles) { - const Files = targetAccount.files.map((e) => e) - - for (let fileId of Files) { - files.unlink(fileId, true).catch((err) => console.error) - } - - await writeFile( - process.cwd() + "/.data/files.json", - JSON.stringify(files.files) - ) - return deleteAccount() - } else return deleteAccount() - } - ) - - return router -} diff --git a/src/server/routes/api/v1/api.json b/src/server/routes/api/v1/api.json index cb186e4..58ccbba 100644 --- a/src/server/routes/api/v1/api.json +++ b/src/server/routes/api/v1/api.json @@ -3,13 +3,7 @@ "baseURL": "/api/v1", "mount": [ "account", - "admin", - "public", "file", - "session", - { - "file": "customization", - "to": "/account/customization" - } + "session" ] } \ No newline at end of file diff --git a/src/server/routes/api/v1/customization.ts b/src/server/routes/api/v1/customization.ts deleted file mode 100644 index 430d530..0000000 --- a/src/server/routes/api/v1/customization.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { Hono } from "hono" -import Files, { id_check_regex } from "../../../lib/files.js" -import * as Accounts from "../../../lib/accounts.js" -import { - getAccount, - requiresAccount, - requiresPermissions, -} from "../../../lib/middleware.js" -import ServeError from "../../../lib/errors.js" -import Configuration from "../../../../../config.json" assert {type:"json"} - -const router = new Hono<{ - Variables: { - account?: Accounts.Account - } -}>() - -router.use(getAccount) - -export default function (files: Files) { - router.put( - "/css", - requiresAccount, - requiresPermissions("customize"), - async (ctx) => { - const Account = ctx.get("account") as Accounts.Account - const body = await ctx.req.json() - if (typeof body.fileId != "string") body.fileId = undefined - - if ( - !body.fileId || - (body.fileId.match(id_check_regex) == body.fileId && - body.fileId.length <= Configuration.maxUploadIdLength) - ) { - Account.customCSS = body.fileId || undefined - - await Accounts.save() - return ctx.text("custom css saved") - } else return ServeError(ctx, 400, "invalid fileId") - } - ) - - router.get("/css", requiresAccount, async (ctx) => { - const Account = ctx.get("account") - - if (Account?.customCSS) - return ctx.redirect(`/file/${Account.customCSS}`) - else return ctx.text("") - }) - - router.put( - "/embed/color", - requiresAccount, - requiresPermissions("customize"), - async (ctx) => { - const Account = ctx.get("account") as Accounts.Account - const body = await ctx.req.json() - if (typeof body.color != "string") body.color = undefined - - if ( - !body.color || - (body.color.toLowerCase().match(/[a-f0-9]+/) == - body.color.toLowerCase() && - body.color.length == 6) - ) { - if (!Account.embed) Account.embed = {} - Account.embed.color = body.color || undefined - - await Accounts.save() - return ctx.text("custom embed color saved") - } else return ServeError(ctx, 400, "invalid hex code") - } - ) - - router.put( - "/embed/size", - requiresAccount, - requiresPermissions("customize"), - async (ctx) => { - const Account = ctx.get("account") as Accounts.Account - const body = await ctx.req.json() - if (typeof body.largeImage != "boolean") { - ServeError(ctx, 400, "largeImage must be bool") - return - } - - if (!Account.embed) Account.embed = {} - Account.embed.largeImage = body.largeImage - - await Accounts.save() - return ctx.text(`custom embed image size saved`) - } - ) - - return router -} diff --git a/src/server/routes/api/v1/public.ts b/src/server/routes/api/v1/public.ts deleted file mode 100644 index 192861a..0000000 --- a/src/server/routes/api/v1/public.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Hono } from "hono" -import Files from "../../../lib/files.js" - -const router = new Hono() - -export default function (files: Files) { - return router -} From e624e198023be741dcb0b8b9d867c568463af6c5 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 8 Mar 2024 17:00:57 -0800 Subject: [PATCH 102/173] before i forget, --- src/server/lib/files.ts | 13 +++++++------ src/server/routes/api/v1/account.ts | 10 +++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index ab2e96a..9cf3f0a 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -434,8 +434,9 @@ export class UploadStream extends Writable { chunkSize: this.files.config.maxDiscordFileSize } - await this.files.write() delete this.files.locks[this.uploadId!] + await this.files.api.deleteMessages(ogf.messageids) + await this.files.write() if (this.owner) Accounts.files.index(this.owner, this.uploadId!) return this.uploadId } @@ -627,16 +628,16 @@ export default class Files { async unlink(uploadId: string, noWrite: boolean = false): Promise { let target = this.files[uploadId] if (!target) return + + await this.api.deleteMessages(target.messageids) + if (target.owner) { let id = files.deindex(target.owner, uploadId, noWrite) if (id) await id } - - await this.api.deleteMessages(target.messageids) - delete this.files[uploadId] - if (noWrite) return - return this.write().catch((err) => { + + if (!noWrite) this.write().catch((err) => { throw err }) } diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 7a976f3..cf3b36a 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -212,8 +212,8 @@ export default function (files: Files) { requiresPermissions("manage"), async (ctx) => { const body = await ctx.req.json() as UserUpdateParameters - const actor = ctx.get("account")! as Accounts.Account - const target = ctx.get("target")! as Accounts.Account + const actor = ctx.get("account")! + const target = ctx.get("target")! if (Array.isArray(body)) return ServeError(ctx, 400, "invalid body") @@ -240,9 +240,7 @@ export default function (files: Files) { ) router.delete("/:user", requiresAccount, noAPIAccess, async (ctx) => { - let acc = ctx.req.param("user") == "me" ? ctx.get("account") : Accounts.getFromId(ctx.req.param("user")) - if (acc != ctx.get("account") && !ctx.get("account")?.admin) return ServeError(ctx, 403, "you are not an administrator") - if (!acc) return ServeError(ctx, 404, "account does not exist") + let acc = ctx.get("target") auth.AuthTokens.filter((e) => e.account == acc?.id).forEach( (token) => { @@ -266,5 +264,7 @@ export default function (files: Files) { return ctx.text("account deleted") }) + router.get("/:user") + return router } From 86f5727d831a33efd42d1c193aff58fcf4a98525 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Fri, 8 Mar 2024 20:02:27 -0800 Subject: [PATCH 103/173] Okay that's enough for now --- src/download.html | 2 +- src/error.html | 2 +- src/index.html | 2 +- src/server/index.ts | 6 +- src/server/lib/mail.ts | 4 +- src/server/routes/api.ts | 1 - src/server/routes/api/v0/adminRoutes.ts | 37 +++--- src/server/routes/api/v0/primaryApi.ts | 1 - src/server/routes/api/v1/account.ts | 148 ++++++++++++++++----- src/server/routes/api/v1/session.ts | 10 ++ src/server/routes/api/web/api.json | 7 + src/server/routes/{ => api/web}/preview.ts | 24 ++-- 12 files changed, 173 insertions(+), 71 deletions(-) create mode 100644 src/server/routes/api/web/api.json rename src/server/routes/{ => api/web}/preview.ts (91%) diff --git a/src/download.html b/src/download.html index 80a2093..dd0847a 100644 --- a/src/download.html +++ b/src/download.html @@ -19,7 +19,7 @@ - + ) ) -// serve download page - -app.get("/download/:fileId", getAccount, preview(files)) - /* routes should be in this order: diff --git a/src/server/lib/mail.ts b/src/server/lib/mail.ts index 647982b..7f7f266 100644 --- a/src/server/lib/mail.ts +++ b/src/server/lib/mail.ts @@ -11,8 +11,6 @@ let mailConfig = config.mail, }, }) -// lazy but - /** * @description Sends an email * @param to Target email address @@ -35,4 +33,4 @@ export function sendMail(to: string, subject: string, content: string) { `` )}

If you do not believe that you are the intended recipient of this email, please disregard this message.`, }) -} +} \ No newline at end of file diff --git a/src/server/routes/api.ts b/src/server/routes/api.ts index 0d5ebe1..ab4ca43 100644 --- a/src/server/routes/api.ts +++ b/src/server/routes/api.ts @@ -74,7 +74,6 @@ export default class APIRouter { async loadAPIMethods() { let files = await readdir(APIDirectory) for (let version of files) { - /// temporary (hopefully). need to figure out something else for this let def = JSON.parse( ( await readFile( diff --git a/src/server/routes/api/v0/adminRoutes.ts b/src/server/routes/api/v0/adminRoutes.ts index 4e561d7..d251b1f 100644 --- a/src/server/routes/api/v0/adminRoutes.ts +++ b/src/server/routes/api/v0/adminRoutes.ts @@ -31,12 +31,12 @@ export default function (files: Files) { typeof body.target !== "string" || typeof body.password !== "string" ) { - return ctx.status(404) + return ctx.text("not found", 404) } let targetAccount = Accounts.getFromUsername(body.target) if (!targetAccount) { - return ctx.status(404) + return ctx.text("not found", 404) } Accounts.password.set(targetAccount.id, body.password) @@ -53,7 +53,7 @@ export default function (files: Files) { `Hello there! This email is to notify you of a password change that an administrator, ${acc.username}, has initiated. You have been logged out of your devices. Thank you for using monofile.` ) .then(() => ctx.text("OK")) - .catch(() => ctx.status(500)) + .catch(() => ctx.text("err while sending email", 500)) } }) @@ -62,12 +62,12 @@ export default function (files: Files) { let acc = ctx.get("account") as Accounts.Account if (typeof body.target !== "string") { - return ctx.status(404) + return ctx.text("not found", 404) } let targetAccount = Accounts.getFromUsername(body.target) if (!targetAccount) { - return ctx.status(404) + return ctx.text("not found", 404) } Accounts.save() @@ -77,32 +77,31 @@ export default function (files: Files) { adminRoutes.post("/delete", async (ctx) => { const body = await ctx.req.json() if (typeof body.target !== "string") { - return ctx.status(404) + return ctx.text("not found", 404) } let targetFile = files.files[body.target] if (!targetFile) { - return ctx.status(404) + return ctx.text("not found", 404) } return files .unlink(body.target) - .then(() => ctx.status(200)) - .catch(() => ctx.status(500)) - .finally(() => ctx.status(200)) + .then(() => ctx.text("ok", 200)) + .catch(() => ctx.text("err", 500)) }) adminRoutes.post("/delete_account", async (ctx) => { let acc = ctx.get("account") as Accounts.Account const body = await ctx.req.json() if (typeof body.target !== "string") { - return ctx.status(404) + return ctx.text("not found", 404) } let targetAccount = Accounts.getFromUsername(body.target) if (!targetAccount) { - return ctx.status(404) + return ctx.text("not found", 404) } let accId = targetAccount.id @@ -149,12 +148,12 @@ export default function (files: Files) { adminRoutes.post("/transfer", async (ctx) => { const body = await ctx.req.json() if (typeof body.target !== "string" || typeof body.owner !== "string") { - return ctx.status(404) + return ctx.text("not found", 404) } let targetFile = files.files[body.target] if (!targetFile) { - return ctx.status(404) + return ctx.text("not found", 404) } let newOwner = Accounts.getFromUsername(body.owner || "") @@ -173,21 +172,21 @@ export default function (files: Files) { } targetFile.owner = newOwner ? newOwner.id : undefined - files + return files .write() - .then(() => ctx.status(200)) - .catch(() => ctx.status(500)) + .then(() => ctx.text("ok", 200)) + .catch(() => ctx.text("error", 500)) }) adminRoutes.post("/idchange", async (ctx) => { const body = await ctx.req.json() if (typeof body.target !== "string" || typeof body.new !== "string") { - return ctx.status(400) + return ctx.text("inappropriate body", 400) } let targetFile = files.files[body.target] if (!targetFile) { - return ctx.status(404) + return ctx.text("not found", 404) } if (files.files[body.new]) { diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index b44b717..4bb3726 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -105,7 +105,6 @@ export default function (files: Files) { } } ) - // upload handlers primaryApi.post( "/upload", diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index cf3b36a..5b2da93 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -33,28 +33,54 @@ type Message = [200 | 400 | 401 | 403 | 501, string] // there's probably a less stupid way to do this than `K in keyof Pick` // @Jack5079 make typings better if possible + +type Validator, ValueNotNull extends boolean> = + /** + * @param actor The account performing this action + * @param target The target account for this action + * @param params Changes being patched in by the user + */ + (actor: Accounts.Account, target: Accounts.Account, params: UserUpdateParameters & (ValueNotNull extends true ? { + [K in keyof Pick]-? : UserUpdateParameters[K] + } : {})) => Accounts.Account[T] | Message + +// this type is so stupid stg +interface ValidatorWithSettings> { + acceptsNull?: boolean, + validator: Validator // i give upp ill fix this later +} + const validators: { [T in keyof Partial]: - /** - * @param actor The account performing this action - * @param target The target account for this action - * @param params Changes being patched in by the user - */ - (actor: Accounts.Account, target: Accounts.Account, params: UserUpdateParameters & { - [K in keyof Pick]-? : UserUpdateParameters[K] - }) => Accounts.Account[T] | Message + Validator | ValidatorWithSettings } = { defaultFileVisibility(actor, target, params) { if (["public", "private", "anonymous"].includes(params.defaultFileVisibility)) return params.defaultFileVisibility else return [400, "invalid file visibility"] }, - email(actor, target, params) { - return [501, "not implemented"] + email: { + acceptsNull: true, + validator: (actor, target, params) => { + if (!params.currentPassword // actor on purpose here to allow admins + || (params.currentPassword && Accounts.password.check(actor.id, params.currentPassword))) + return [401, "current password incorrect"] + + if (!params.email) { + if (target.email) { + sendMail( + target.email, + `Email disconnected`, + `Hello there! Your email address (${target.email}) has been disconnected from the monofile account ${target.username}. Thank you for using monofile.` + ).catch() + } + return undefined + } + } }, password(actor, target, params) { if ( - !params.currentPassword + !params.currentPassword // actor on purpose here to allow admins || (params.currentPassword && Accounts.password.check(actor.id, params.currentPassword)) ) return [401, "current password incorrect"] @@ -77,7 +103,7 @@ const validators: { }, username(actor, target, params) { - if (!params.currentPassword + if (!params.currentPassword // actor on purpose here to allow admins || (params.currentPassword && Accounts.password.check(actor.id, params.currentPassword))) return [401, "current password incorrect"] @@ -106,13 +132,30 @@ const validators: { return params.username }, - customCSS(actor, target, params) { - if ( - !params.customCSS || - (params.customCSS.match(id_check_regex)?.[0] == params.customCSS && - params.customCSS.length <= Configuration.maxUploadIdLength) - ) return params.customCSS - else return [400, "bad file id"] + customCSS: { + acceptsNull: true, + validator: (actor, target, params) => { + if ( + !params.customCSS || + (params.customCSS.match(id_check_regex)?.[0] == params.customCSS && + params.customCSS.length <= Configuration.maxUploadIdLength) + ) return params.customCSS + else return [400, "bad file id"] + } + }, + embed(actor, target, params) { + if (params.embed.color === undefined) { + params.embed.color = target.embed?.color + } else if (!((params.embed.color.toLowerCase().match(/[a-f0-9]+/)?.[0] == + params.embed.color.toLowerCase() && + params.embed.color.length == 6) || params.embed.color == null)) return [400, "bad embed color"] + + + if (params.embed.largeImage === undefined) { + params.embed.largeImage = target.embed?.largeImage + } else params.embed.largeImage = Boolean(params.embed.largeImage) + + return params.embed }, admin(actor, target, params) { if (actor.admin && !target.admin) return params.admin @@ -217,24 +260,41 @@ export default function (files: Files) { if (Array.isArray(body)) return ServeError(ctx, 400, "invalid body") - let results: [keyof Accounts.Account, Accounts.Account[keyof Accounts.Account]|Message][] = Object.entries(body).filter(e => e[1] && e[0] !== "currentPassword").map(([x]) => - [ - x as keyof Accounts.Account, - x in validators - ? validators[x as keyof Accounts.Account]!(actor, target, body as any) - : [400, `the ${x} parameter cannot be set or is not a valid parameter`] as Message - ] - ) + let results: ([keyof Accounts.Account, Accounts.Account[keyof Accounts.Account]]|Message)[] = + (Object.entries(body) + .filter(e => e[0] !== "currentPassword") as [keyof Accounts.Account, UserUpdateParameters[keyof Accounts.Account]][]) + .map(([x, v]) => { + if (!validators[x]) + return [400, `the ${x} parameter cannot be set or is not a valid parameter`] as Message - let allMsgs = results.map(([x,v]) => { + let validator = + (typeof validators[x] == "object" + ? validators[x] + : { + validator: validators[x] as Validator, + acceptsNull: false + }) as ValidatorWithSettings + + if (!validator.acceptsNull && !v) + return [400, `the ${x} validator does not accept null values`] as Message + + return [ + x, + validator.validator(actor, target, body) + ] as [keyof Accounts.Account, Accounts.Account[keyof Accounts.Account]] + }) + + let allMsgs = results.map((v) => { if (isMessage(v)) return v - target[x] = v as never // lol + target[v[0]] = v[1] as never // lol return [200, "OK"] as Message }) + await Accounts.save() + if (allMsgs.length == 1) - return ctx.body(...allMsgs[0]!.reverse() as [Message[1], Message[0]]) // im sorry + return ctx.text(...allMsgs[0]!.reverse() as [Message[1], Message[0]]) // im sorry else return ctx.json(allMsgs) } ) @@ -264,7 +324,33 @@ export default function (files: Files) { return ctx.text("account deleted") }) - router.get("/:user") + router.get("/:user", requiresAccount, async (ctx) => { + let acc = ctx.get("target") + let sessionToken = auth.tokenFor(ctx)! + + return ctx.json({ + ...acc, + password: undefined, + email: + auth.getType(sessionToken) == "User" || + auth.getPermissions(sessionToken)?.includes("email") + ? acc.email + : undefined, + activeSessions: auth.AuthTokens.filter( + (e) => + e.type != "App" && + e.account == acc.id && + (e.expire > Date.now() || !e.expire) + ).length, + }) + }) + + router.get("/css", async (ctx) => { + let acc = ctx.get('account') + if (acc?.customCSS) + return ctx.redirect(`/file/${acc.customCSS}`) + else return ctx.text("") + }) return router } diff --git a/src/server/routes/api/v1/session.ts b/src/server/routes/api/v1/session.ts index 3299282..a0a0c15 100644 --- a/src/server/routes/api/v1/session.ts +++ b/src/server/routes/api/v1/session.ts @@ -11,6 +11,7 @@ import * as Accounts from "../../../lib/accounts.js" import * as auth from "../../../lib/auth.js" import { getAccount, + requiresAccount } from "../../../lib/middleware.js" import ServeError from "../../../lib/errors.js" @@ -53,6 +54,15 @@ export default function (files: Files) { ctx.status(200) }) + router.get("/", requiresAccount, ctx => { + let sessionToken = auth.tokenFor(ctx) + return ctx.json({ + expiry: auth.AuthTokens.find( + (e) => e.token == sessionToken + )?.expire, + }) + }) + router.delete("/", (ctx) => { if (!auth.validate(getCookie(ctx, "auth")!)) { return ServeError(ctx, 401, "not logged in") diff --git a/src/server/routes/api/web/api.json b/src/server/routes/api/web/api.json new file mode 100644 index 0000000..b517aca --- /dev/null +++ b/src/server/routes/api/web/api.json @@ -0,0 +1,7 @@ +{ + "name": "web", + "baseURL": "/", + "mount": [ + { "file": "preview", "to": "/download" } + ] +} \ No newline at end of file diff --git a/src/server/routes/preview.ts b/src/server/routes/api/web/preview.ts similarity index 91% rename from src/server/routes/preview.ts rename to src/server/routes/api/web/preview.ts index dfdd763..909f4cf 100644 --- a/src/server/routes/preview.ts +++ b/src/server/routes/api/web/preview.ts @@ -1,13 +1,18 @@ import fs from "fs/promises" import bytes from "bytes" -import ServeError from "../lib/errors.js" -import * as Accounts from "../lib/accounts.js" -import type { Handler } from "hono" -import type Files from "../lib/files.js" -import pkg from "../../../package.json" assert {type:"json"} +import ServeError from "../../../lib/errors.js" +import * as Accounts from "../../../lib/accounts.js" +import type Files from "../../../lib/files.js" +import pkg from "../../../../../package.json" assert {type:"json"} +import { Hono } from "hono" +export let router = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() -export default (files: Files): Handler => - async (ctx) => { +export default function (files: Files) { + router.get("/:fileId", async (ctx) => { let acc = ctx.get("account") as Accounts.Account const fileId = ctx.req.param("fileId") const host = ctx.req.header("Host") @@ -104,4 +109,7 @@ export default (files: Files): Handler => } else { ServeError(ctx, 404, "file not found") } - } + }) + + return router +} \ No newline at end of file From 00fcf4580fcefbc2e954c941489ced54896a5a19 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 9 Mar 2024 12:43:05 -0800 Subject: [PATCH 104/173] hhhh --- src/server/lib/mail.ts | 61 ++++++++++++++++++++++++++++ src/server/lib/middleware.ts | 12 +++++- src/server/routes/api/v1/account.ts | 60 +++++++++++++++++++-------- src/server/routes/api/v1/session.ts | 11 ++--- src/server/routes/api/web/api.json | 3 +- src/server/routes/api/web/go.ts | 41 +++++++++++++++++++ src/server/routes/api/web/preview.ts | 3 +- 7 files changed, 165 insertions(+), 26 deletions(-) create mode 100644 src/server/routes/api/web/go.ts diff --git a/src/server/lib/mail.ts b/src/server/lib/mail.ts index 7f7f266..afab792 100644 --- a/src/server/lib/mail.ts +++ b/src/server/lib/mail.ts @@ -1,6 +1,7 @@ import { createTransport } from "nodemailer" import "dotenv/config" import config from "../../../config.json" assert {type:"json"} +import { generateFileId } from "./files.js" let mailConfig = config.mail, transport = createTransport({ @@ -33,4 +34,64 @@ export function sendMail(to: string, subject: string, content: string) { `` )}

If you do not believe that you are the intended recipient of this email, please disregard this message.`, }) +} + +export namespace CodeMgr { + + export const Intents = [ + "verifyEmail", + "recoverAccount" + ] as const + + export type Intent = typeof Intents[number] + + export function isIntent(intent: string): intent is Intent { return intent in Intents } + + export let codes = Object.fromEntries( + Intents.map(e => [ + e, + {byId: new Map(), byUser: new Map()} + ])) as Record, byUser: Map }> + + // this is stupid whyd i write this + + export class Code { + readonly id: string = generateFileId(12) + readonly for: string + + readonly intent: Intent + + readonly expiryClear: NodeJS.Timeout + + readonly data: any + + constructor(intent: Intent, forUser: string, data?: any, time: number = 15*60*1000) { + this.for = forUser; + this.intent = intent + this.expiryClear = setTimeout(this.terminate.bind(this), time) + this.data = data + + codes[intent].byId.set(this.id, this); + + let byUser = codes[intent].byUser.get(this.for) + if (!byUser) { + byUser = [] + codes[intent].byUser.set(this.for, byUser); + } + + byUser.push(this) + } + + terminate() { + codes[this.intent].byId.delete(this.id); + let bu = codes[this.intent].byUser.get(this.id)! + bu.splice(bu.indexOf(this), 1) + clearTimeout(this.expiryClear) + } + + check(forUser: string) { + return forUser === this.for + } + } + } \ No newline at end of file diff --git a/src/server/lib/middleware.ts b/src/server/lib/middleware.ts index c63feec..a7a9cba 100644 --- a/src/server/lib/middleware.ts +++ b/src/server/lib/middleware.ts @@ -1,7 +1,8 @@ import * as Accounts from "./accounts.js" -import { Handler as RequestHandler } from "hono" +import type { Context, Handler as RequestHandler } from "hono" import ServeError from "../lib/errors.js" import * as auth from "./auth.js" +import { setCookie } from "hono/cookie" /** * @description Middleware which adds an account, if any, to ctx.get("account") @@ -92,6 +93,15 @@ export const assertAPI = function ( } } +// Not really middleware but a utility + +export const login = (ctx: Context, account: string) => setCookie(ctx, "auth", auth.create(account, 3 * 24 * 60 * 60 * 1000), { + path: "/", + sameSite: "Strict", + secure: true, + httpOnly: true +}) + type SchemeType = "array" | "object" | "string" | "number" | "boolean" interface SchemeObject { diff --git a/src/server/routes/api/v1/account.ts b/src/server/routes/api/v1/account.ts index 5b2da93..6c031b4 100644 --- a/src/server/routes/api/v1/account.ts +++ b/src/server/routes/api/v1/account.ts @@ -1,7 +1,7 @@ // Modules -import { Hono } from "hono" +import { type Context, Hono } from "hono" import { getCookie, setCookie } from "hono/cookie" // Libs @@ -12,12 +12,13 @@ import * as auth from "../../../lib/auth.js" import { assertAPI, getAccount, + login, noAPIAccess, requiresAccount, requiresPermissions, } from "../../../lib/middleware.js" import ServeError from "../../../lib/errors.js" -import { sendMail } from "../../../lib/mail.js" +import { CodeMgr, sendMail } from "../../../lib/mail.js" import Configuration from "../../../../../config.json" assert {type:"json"} @@ -29,7 +30,7 @@ const router = new Hono<{ }>() type UserUpdateParameters = Partial & { password: string, currentPassword?: string }> -type Message = [200 | 400 | 401 | 403 | 501, string] +type Message = [200 | 400 | 401 | 403 | 429 | 501, string] // there's probably a less stupid way to do this than `K in keyof Pick` // @Jack5079 make typings better if possible @@ -42,12 +43,15 @@ type Validator, ValueNotNull extends b */ (actor: Accounts.Account, target: Accounts.Account, params: UserUpdateParameters & (ValueNotNull extends true ? { [K in keyof Pick]-? : UserUpdateParameters[K] - } : {})) => Accounts.Account[T] | Message + } : {}), ctx: Context) => Accounts.Account[T] | Message // this type is so stupid stg -interface ValidatorWithSettings> { - acceptsNull?: boolean, - validator: Validator // i give upp ill fix this later +type ValidatorWithSettings> = { + acceptsNull: true, + validator: Validator +} | { + acceptsNull?: false, + validator: Validator } const validators: { @@ -61,7 +65,7 @@ const validators: { }, email: { acceptsNull: true, - validator: (actor, target, params) => { + validator: (actor, target, params, ctx) => { if (!params.currentPassword // actor on purpose here to allow admins || (params.currentPassword && Accounts.password.check(actor.id, params.currentPassword))) return [401, "current password incorrect"] @@ -76,6 +80,34 @@ const validators: { } return undefined } + + if (typeof params.email !== "string") return [400, "email must be string"] + if (actor.admin) + return params.email + + // send verification email + + if ((CodeMgr.codes.verifyEmail.byUser.get(target.id)?.length || 0) >= 2) return [429, "you have too many active codes"] + + let code = new CodeMgr.Code("verifyEmail", target.id, params.email) + + sendMail( + params.email, + `Hey there, ${target.username} - let's connect your email`, + `Hello there! You are recieving this message because you decided to link your email, ${ + params.email.split("@")[0] + }@${ + params.email.split("@")[1] + }, to your account, ${ + target.username + }. If you would like to continue, please
click here, or go to https://${ctx.req.header( + "Host" + )}/go/verify/${code.id}.` + ) + + return [200, "please check your inbox"] } }, password(actor, target, params) { @@ -144,6 +176,7 @@ const validators: { } }, embed(actor, target, params) { + if (typeof params.embed !== "object") return [400, "must use an object for embed"] if (params.embed.color === undefined) { params.embed.color = target.embed?.color } else if (!((params.embed.color.toLowerCase().match(/[a-f0-9]+/)?.[0] == @@ -236,13 +269,8 @@ export default function (files: Files) { return Accounts.create(body.username, body.password) .then((account) => { - setCookie(ctx, "auth", auth.create(account, 3 * 24 * 60 * 60 * 1000), { - path: "/", - sameSite: "Strict", - secure: true, - httpOnly: true - }) - return ctx.status(200) + login(ctx, account) + return ctx.text("logged in") }) .catch(() => { return ServeError(ctx, 500, "internal server error") @@ -280,7 +308,7 @@ export default function (files: Files) { return [ x, - validator.validator(actor, target, body) + validator.validator(actor, target, body as any, ctx) ] as [keyof Accounts.Account, Accounts.Account[keyof Accounts.Account]] }) diff --git a/src/server/routes/api/v1/session.ts b/src/server/routes/api/v1/session.ts index a0a0c15..590d1f3 100644 --- a/src/server/routes/api/v1/session.ts +++ b/src/server/routes/api/v1/session.ts @@ -11,6 +11,7 @@ import * as Accounts from "../../../lib/accounts.js" import * as auth from "../../../lib/auth.js" import { getAccount, + login, requiresAccount } from "../../../lib/middleware.js" import ServeError from "../../../lib/errors.js" @@ -45,13 +46,9 @@ export default function (files: Files) { ServeError(ctx, 400, "username or password incorrect") return } - setCookie(ctx, "auth", auth.create(account.id, 3 * 24 * 60 * 60 * 1000), { - path: "/", - sameSite: "Strict", - secure: true, - httpOnly: true - }) - ctx.status(200) + + login(ctx, account.id) + return ctx.text("logged in") }) router.get("/", requiresAccount, ctx => { diff --git a/src/server/routes/api/web/api.json b/src/server/routes/api/web/api.json index b517aca..a20237d 100644 --- a/src/server/routes/api/web/api.json +++ b/src/server/routes/api/web/api.json @@ -2,6 +2,7 @@ "name": "web", "baseURL": "/", "mount": [ - { "file": "preview", "to": "/download" } + { "file": "preview", "to": "/download" }, + "go" ] } \ No newline at end of file diff --git a/src/server/routes/api/web/go.ts b/src/server/routes/api/web/go.ts new file mode 100644 index 0000000..b05345f --- /dev/null +++ b/src/server/routes/api/web/go.ts @@ -0,0 +1,41 @@ +import fs from "fs/promises" +import bytes from "bytes" +import ServeError from "../../../lib/errors.js" +import * as Accounts from "../../../lib/accounts.js" +import type Files from "../../../lib/files.js" +import pkg from "../../../../../package.json" assert {type:"json"} +import { CodeMgr } from "../../../lib/mail.js" +import { Hono } from "hono" +import { getAccount, login } from "../../../lib/middleware.js" +export let router = new Hono<{ + Variables: { + account: Accounts.Account + } +}>() + +export default function (files: Files) { + router.get("/verify/:code", getAccount, async (ctx) => { + let currentAccount = ctx.get("account") + let code = CodeMgr.codes.verifyEmail.byId.get(ctx.req.param("code")) + + if (code) { + if (currentAccount != undefined && !code.check(currentAccount.id)) { + return ServeError(ctx, 403, "you are logged in on a different account") + } + + if (!currentAccount) { + login(ctx, code.for) + let ac = Accounts.getFromId(code.for) + if (ac) currentAccount = ac + else return ServeError(ctx, 401, "could not locate account") + } + + currentAccount.email = code.data + await Accounts.save() + + return ctx.redirect('/') + } else return ServeError(ctx, 404, "code not found") + }) + + return router +} \ No newline at end of file diff --git a/src/server/routes/api/web/preview.ts b/src/server/routes/api/web/preview.ts index 909f4cf..8370697 100644 --- a/src/server/routes/api/web/preview.ts +++ b/src/server/routes/api/web/preview.ts @@ -5,6 +5,7 @@ import * as Accounts from "../../../lib/accounts.js" import type Files from "../../../lib/files.js" import pkg from "../../../../../package.json" assert {type:"json"} import { Hono } from "hono" +import { getAccount } from "../../../lib/middleware.js" export let router = new Hono<{ Variables: { account: Accounts.Account @@ -12,7 +13,7 @@ export let router = new Hono<{ }>() export default function (files: Files) { - router.get("/:fileId", async (ctx) => { + router.get("/:fileId", getAccount, async (ctx) => { let acc = ctx.get("account") as Accounts.Account const fileId = ctx.req.param("fileId") const host = ctx.req.header("Host") From 555fbd27b918d394556b1368dc2fb6ba8bcf4763 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 9 Mar 2024 14:22:14 -0800 Subject: [PATCH 105/173] Apparently we require Node 20 now, so here's Node 20 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ac0aba3..3395db6 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "author": "Etcetera (https://cetera.uk)", "license": "Unlicense", "engines": { - "node": ">=v16.11" + "node": ">=v20" }, "dependencies": { "@hono/node-server": "^1.8.2", From d6dd7535f45456d33acee21ffb140bb53e04472f Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 9 Mar 2024 14:34:00 -0800 Subject: [PATCH 106/173] Quick fix --- package.json | 2 +- src/server/lib/files.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3395db6..b65f36d 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "author": "Etcetera (https://cetera.uk)", "license": "Unlicense", "engines": { - "node": ">=v20" + "node": ">=v21" }, "dependencies": { "@hono/node-server": "^1.8.2", diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 9cf3f0a..09b8aef 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -435,7 +435,7 @@ export class UploadStream extends Writable { } delete this.files.locks[this.uploadId!] - await this.files.api.deleteMessages(ogf.messageids) + if (ogf?.messageids) await this.files.api.deleteMessages(ogf.messageids) await this.files.write() if (this.owner) Accounts.files.index(this.owner, this.uploadId!) return this.uploadId From 490098f33b3ba190feb3267862d7674e11507705 Mon Sep 17 00:00:00 2001 From: Jack W <29169102+Jack5079@users.noreply.github.com> Date: Sat, 9 Mar 2024 19:53:50 -0500 Subject: [PATCH 107/173] Fix favicon index had wrong name --- src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index fac72ba..fab53a0 100644 --- a/src/index.html +++ b/src/index.html @@ -12,7 +12,7 @@ From 8f1b1ada84114ef0d7f06408a3830f4ea9ce1d80 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 9 Mar 2024 17:22:08 -0800 Subject: [PATCH 108/173] Few quick patches --- src/server/index.ts | 33 ++++++++++++++-------------- src/server/routes/api/web/preview.ts | 4 +--- src/svelte/elem/UploadWindow.svelte | 16 +++++++------- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index 3b2c5ed..3d32eaa 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -85,6 +85,23 @@ const apiRouter = new APIRouter(files) apiRouter.loadAPIMethods().then(() => { app.route("/", apiRouter.root) console.log("API OK!") + + // listen on 3000 or MONOFILE_PORT + // moved here to prevent a crash if someone manages to access monofile before api routes are mounted + + serve( + { + fetch: app.fetch, + port: Number(process.env.MONOFILE_PORT || 3000), + serverOptions: { + //@ts-ignore + requestTimeout: config.requestTimeout + } + }, + (info) => { + console.log("Web OK!", info.port, info.address) + } + ) }) // index, clone @@ -104,20 +121,4 @@ app.get("/", async (ctx) => file serving */ -// listen on 3000 or MONOFILE_PORT - -serve( - { - fetch: app.fetch, - port: Number(process.env.MONOFILE_PORT || 3000), - serverOptions: { - //@ts-ignore - requestTimeout: config.requestTimeout - } - }, - (info) => { - console.log("Web OK!", info.port, info.address) - } -) - export default app \ No newline at end of file diff --git a/src/server/routes/api/web/preview.ts b/src/server/routes/api/web/preview.ts index 8370697..052a2cc 100644 --- a/src/server/routes/api/web/preview.ts +++ b/src/server/routes/api/web/preview.ts @@ -107,9 +107,7 @@ export default function (files: Files) { : `@${fileOwner?.username || "Deleted User"}` ) ) - } else { - ServeError(ctx, 404, "file not found") - } + } else return ServeError(ctx, 404, "file not found") }) return router diff --git a/src/svelte/elem/UploadWindow.svelte b/src/svelte/elem/UploadWindow.svelte index 28d3c32..8e5c332 100644 --- a/src/svelte/elem/UploadWindow.svelte +++ b/src/svelte/elem/UploadWindow.svelte @@ -4,6 +4,7 @@ import { fade } from "svelte/transition" import { circIn, circOut } from "svelte/easing" import { serverStats, refresh_stats, account } from "./stores.mjs" + import bytes from "bytes" import AttachmentZone from "./uploader/AttachmentZone.svelte" @@ -213,9 +214,7 @@ {upload[1].name} {upload[1].type}{@html upload[1].type == "upload" - ? ` (${Math.round( - upload[1].file.size / 1048576 - )}MiB)` + ? ` (${bytes(upload[1].file.size)})` : ""}

#i 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 z

@@ -372,11 +371,12 @@ >{$serverStats.files || "•••"}
files — Maximum filesize is - {(($serverStats.maxDiscordFileSize || 0) * - ($serverStats.maxDiscordFiles || 0)) / - 1048576 || "•••"}MiB + + { + $serverStats.maxDiscordFiles + ? bytes($serverStats.maxDiscordFileSize * $serverStats.maxDiscordFiles) + : "•••" + }

From d0c1c7be9c7a4448a3324341de844c554b16487d Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Sat, 9 Mar 2024 17:27:42 -0800 Subject: [PATCH 109/173] port /:fileId --- src/server/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/index.ts b/src/server/index.ts index 3d32eaa..f281ceb 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -86,6 +86,9 @@ apiRouter.loadAPIMethods().then(() => { app.route("/", apiRouter.root) console.log("API OK!") + // moved here to ensure it's matched last + app.get("/:fileId", (ctx) => app.fetch(ctx.req.raw, ctx.env, ctx.executionCtx)) + // listen on 3000 or MONOFILE_PORT // moved here to prevent a crash if someone manages to access monofile before api routes are mounted From a062a98996952ec609649c726e65c0907f8b6d92 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Mon, 11 Mar 2024 16:20:37 -0700 Subject: [PATCH 110/173] add etags ill do ore laterr --- src/server/index.ts | 2 +- src/server/lib/files.ts | 11 ++++++++++- src/server/routes/api/v0/primaryApi.ts | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index f281ceb..fc139ce 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -87,7 +87,7 @@ apiRouter.loadAPIMethods().then(() => { console.log("API OK!") // moved here to ensure it's matched last - app.get("/:fileId", (ctx) => app.fetch(ctx.req.raw, ctx.env, ctx.executionCtx)) + app.get("/:fileId", async (ctx) => app.fetch(ctx.req.raw, ctx.env)) // listen on 3000 or MONOFILE_PORT // moved here to prevent a crash if someone manages to access monofile before api routes are mounted diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 09b8aef..207a00f 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -70,6 +70,8 @@ export interface FilePointer { visibility?: FileVisibility reserved?: boolean chunkSize?: number + lastModified?: number + md5?: string } export interface StatusCodeError { @@ -315,6 +317,8 @@ export class UploadStream extends Writable { error?: Error + hash: crypto.Hash = crypto.createHash("md5") + constructor(files: Files, owner?: string) { super() this.owner = owner @@ -328,6 +332,8 @@ export class UploadStream extends Writable { if (this.filled + data.byteLength > (this.files.config.maxDiscordFileSize*this.files.config.maxDiscordFiles)) return this.destroy(new WebError(413, "maximum file size exceeded")) + this.hash.update(data) + // cut up the buffer into message sized chunks let position = 0 @@ -431,7 +437,10 @@ export class UploadStream extends Writable { // so that json.stringify doesnt include tag:undefined ...((ogf||{}).tag ? {tag:ogf.tag} : {}), - chunkSize: this.files.config.maxDiscordFileSize + chunkSize: this.files.config.maxDiscordFileSize, + + md5: this.hash.digest("hex"), + lastModified: Date.now() } delete this.files.locks[this.uploadId!] diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 4bb3726..1dfe106 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -32,6 +32,8 @@ export default function (files: Files) { ctx.header("Access-Control-Allow-Origin", "*") ctx.header("Content-Security-Policy", "sandbox allow-scripts") ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${encodeURI(file.filename.replaceAll("\n","\\n"))}"`) + ctx.header("ETag", file.md5) + //if (file.lastModified) ctx.header("Last-Modified", new Date(file.lastModified).toTimeString()) if (file) { if (file.visibility == "private") { From e7779b21e8d443153e05c30f8768e28984487bfa Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:06:32 -0700 Subject: [PATCH 111/173] Finally fix /:fileId --- src/server/index.ts | 11 +- src/server/routes/api/v0/primaryApi.ts | 94 ++--------------- src/server/routes/api/v1/api.json | 11 +- src/server/routes/api/v1/file.ts | 8 -- src/server/routes/api/v1/file/index.ts | 13 +++ src/server/routes/api/v1/file/individual.ts | 109 ++++++++++++++++++++ 6 files changed, 150 insertions(+), 96 deletions(-) delete mode 100644 src/server/routes/api/v1/file.ts create mode 100644 src/server/routes/api/v1/file/index.ts create mode 100644 src/server/routes/api/v1/file/individual.ts diff --git a/src/server/index.ts b/src/server/index.ts index fc139ce..74c2cff 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -87,7 +87,16 @@ apiRouter.loadAPIMethods().then(() => { console.log("API OK!") // moved here to ensure it's matched last - app.get("/:fileId", async (ctx) => app.fetch(ctx.req.raw, ctx.env)) + app.get("/:fileId", async (ctx) => + app.fetch( + new Request( + (new URL( + `/api/v1/file/${ctx.req.param("fileId")}`, ctx.req.raw.url)).href, + ctx.req.raw + ), + ctx.env + ) + ) // listen on 3000 or MONOFILE_PORT // moved here to prevent a crash if someone manages to access monofile before api routes are mounted diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 1dfe106..d389dbb 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -21,91 +21,15 @@ export let primaryApi = new Hono<{ primaryApi.all("*", getAccount) export default function (files: Files) { - primaryApi.get( - "/file/:fileId", - async (ctx): Promise => { - const fileId = (ctx.req.param() as {fileId: string}).fileId - - let acc = ctx.get("account") as Accounts.Account - - let file = files.files[fileId] - ctx.header("Access-Control-Allow-Origin", "*") - ctx.header("Content-Security-Policy", "sandbox allow-scripts") - ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${encodeURI(file.filename.replaceAll("\n","\\n"))}"`) - ctx.header("ETag", file.md5) - //if (file.lastModified) ctx.header("Last-Modified", new Date(file.lastModified).toTimeString()) - - if (file) { - if (file.visibility == "private") { - if (acc?.id != file.owner) { - return ServeError(ctx, 403, "you do not own this file") - } - - if ( - auth.getType(auth.tokenFor(ctx)!) == "App" && - auth - .getPermissions(auth.tokenFor(ctx)!) - ?.includes("private") - ) { - return ServeError(ctx, 403, "insufficient permissions") - } - } - - let range: Range | undefined - - ctx.header("Content-Type", file.mime) - if (file.sizeInBytes) { - ctx.header("Content-Length", file.sizeInBytes.toString()) - - if (file.chunkSize && ctx.req.header("Range")) { - let ranges = RangeParser(file.sizeInBytes, ctx.req.header("Range") || "") - - if (ranges) { - if (typeof ranges == "number") - return ServeError(ctx, ranges == -1 ? 416 : 400, ranges == -1 ? "unsatisfiable ranges" : "invalid ranges") - if (ranges.length > 1) return ServeError(ctx, 400, "multiple ranges not supported") - range = ranges[0] - } - } - } - - if (range) { - ctx.status(206) - ctx.header( - "Content-Length", - (range.end - range.start + 1).toString() - ) - ctx.header( - "Content-Range", - `bytes ${range.start}-${range.end}/${file.sizeInBytes}` - ) - } - - if (ctx.req.method == "HEAD") - return ctx.body(null) - - return files - .readFileStream(fileId, range) - .then(async (stream) => { - let rs = new ReadableStream({ - start(controller) { - stream.once("end", () => controller.close()) - stream.once("error", (err) => controller.error(err)) - }, - cancel(reason) { - stream.destroy(reason instanceof Error ? reason : new Error(reason)) - } - }) - stream.pipe(ctx.env.outgoing) - return new Response(rs, ctx.body(null)) - }) - .catch((err) => { - return ServeError(ctx, err.status, err.message) - }) - } else { - return ServeError(ctx, 404, "file not found") - } - } + primaryApi.get("/:fileId", async (ctx) => + primaryApi.fetch( + new Request( + (new URL( + `/api/v1/file/${ctx.req.param("fileId")}`, ctx.req.raw.url)).href, + ctx.req.raw + ), + ctx.env + ) ) primaryApi.post( diff --git a/src/server/routes/api/v1/api.json b/src/server/routes/api/v1/api.json index 58ccbba..7e5affe 100644 --- a/src/server/routes/api/v1/api.json +++ b/src/server/routes/api/v1/api.json @@ -3,7 +3,14 @@ "baseURL": "/api/v1", "mount": [ "account", - "file", - "session" + "session", + { + "file": "file/index", + "to": "/file" + }, + { + "file": "file/individual", + "to": "/file" + } ] } \ No newline at end of file diff --git a/src/server/routes/api/v1/file.ts b/src/server/routes/api/v1/file.ts deleted file mode 100644 index 88f54b4..0000000 --- a/src/server/routes/api/v1/file.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Hono } from "hono"; -import Files from "../../../lib/files.js"; - -const router = new Hono() - -export default function(files: Files) { - return router -} diff --git a/src/server/routes/api/v1/file/index.ts b/src/server/routes/api/v1/file/index.ts new file mode 100644 index 0000000..d43c846 --- /dev/null +++ b/src/server/routes/api/v1/file/index.ts @@ -0,0 +1,13 @@ +import { Hono } from "hono"; +import Files from "../../../../lib/files.js"; +import { getAccount } from "../../../../lib/middleware.js"; + +const router = new Hono() +router.all("*", getAccount) + +export default function(files: Files) { + + + + return router +} diff --git a/src/server/routes/api/v1/file/individual.ts b/src/server/routes/api/v1/file/individual.ts new file mode 100644 index 0000000..7429974 --- /dev/null +++ b/src/server/routes/api/v1/file/individual.ts @@ -0,0 +1,109 @@ +import { Hono } from "hono" +import * as Accounts from "../../../../lib/accounts.js" +import * as auth from "../../../../lib/auth.js" +import RangeParser, { type Range } from "range-parser" +import ServeError from "../../../../lib/errors.js" +import Files, { WebError } from "../../../../lib/files.js" +import { getAccount, requiresPermissions } from "../../../../lib/middleware.js" +import {Readable} from "node:stream" +import type {ReadableStream as StreamWebReadable} from "node:stream/web" +import formidable from "formidable" +import { HttpBindings } from "@hono/node-server" +import pkg from "../../../../../../package.json" assert {type: "json"} +import { type StatusCode } from "hono/utils/http-status" + +const router = new Hono<{ + Variables: { + account: Accounts.Account + }, + Bindings: HttpBindings +}>() +router.all("*", getAccount) + +export default function(files: Files) { + + router.get("/:id", async (ctx) => { + const fileId = ctx.req.param("id") + + let acc = ctx.get("account") as Accounts.Account + + let file = files.files[fileId] + ctx.header("Accept-Ranges", "bytes") + ctx.header("Access-Control-Allow-Origin", "*") + ctx.header("Content-Security-Policy", "sandbox allow-scripts") + ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${encodeURI(file.filename.replaceAll("\n","\\n"))}"`) + ctx.header("ETag", file.md5) + //if (file.lastModified) ctx.header("Last-Modified", new Date(file.lastModified).toTimeString()) + + if (file) { + if (file.visibility == "private") { + if (acc?.id != file.owner) { + return ServeError(ctx, 403, "you do not own this file") + } + + if ( + auth.getType(auth.tokenFor(ctx)!) == "App" && + auth + .getPermissions(auth.tokenFor(ctx)!) + ?.includes("private") + ) { + return ServeError(ctx, 403, "insufficient permissions") + } + } + + let range: Range | undefined + + ctx.header("Content-Type", file.mime) + if (file.sizeInBytes) { + ctx.header("Content-Length", file.sizeInBytes.toString()) + + if (file.chunkSize && ctx.req.header("Range")) { + let ranges = RangeParser(file.sizeInBytes, ctx.req.header("Range") || "") + + if (ranges) { + if (typeof ranges == "number") + return ServeError(ctx, ranges == -1 ? 416 : 400, ranges == -1 ? "unsatisfiable ranges" : "invalid ranges") + if (ranges.length > 1) return ServeError(ctx, 400, "multiple ranges not supported") + range = ranges[0] + + ctx.status(206) + ctx.header( + "Content-Length", + (range.end - range.start + 1).toString() + ) + ctx.header( + "Content-Range", + `bytes ${range.start}-${range.end}/${file.sizeInBytes}` + ) + } + } + } + + if (ctx.req.method == "HEAD") + return ctx.body(null) + + return files + .readFileStream(fileId, range) + .then(async (stream) => { + let rs = new ReadableStream({ + start(controller) { + stream.once("end", () => controller.close()) + stream.once("error", (err) => controller.error(err)) + }, + cancel(reason) { + stream.destroy(reason instanceof Error ? reason : new Error(reason)) + } + }) + stream.pipe(ctx.env.outgoing) + return new Response(rs, ctx.body(null)) + }) + .catch((err) => { + return ServeError(ctx, err.status, err.message) + }) + } else { + return ServeError(ctx, 404, "file not found") + } + }) + + return router +} From 58883951d3aca1f2cb0dfd1ba059815fe7934069 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:07:22 -0700 Subject: [PATCH 112/173] Oh shit wait --- src/server/routes/api/v0/primaryApi.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index d389dbb..1e313a3 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -21,7 +21,7 @@ export let primaryApi = new Hono<{ primaryApi.all("*", getAccount) export default function (files: Files) { - primaryApi.get("/:fileId", async (ctx) => + primaryApi.get("/file/:fileId", async (ctx) => primaryApi.fetch( new Request( (new URL( From 0bf5f6f985c32827ba74a45facb4780345073098 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:15:58 -0700 Subject: [PATCH 113/173] Genius --- src/server/routes/api.ts | 10 ++++++---- src/server/routes/api/v0/primaryApi.ts | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/server/routes/api.ts b/src/server/routes/api.ts index ab4ca43..a7a44a7 100644 --- a/src/server/routes/api.ts +++ b/src/server/routes/api.ts @@ -26,22 +26,24 @@ function resolveMount(mount: APIMountResolvable): APIMount { class APIVersion { readonly definition: APIDefinition readonly apiPath: string + readonly apiRoot: Hono readonly root: Hono = new Hono() readonly files: Files - constructor(definition: APIDefinition, files: Files) { + constructor(definition: APIDefinition, files: Files, apiRoot: Hono) { this.definition = definition this.apiPath = APIDirectory + "/" + definition.name this.files = files + this.apiRoot = apiRoot } async load() { for (let _mount of this.definition.mount) { let mount = resolveMount(_mount); // no idea if there's a better way to do this but this is all i can think of - let { default: route } = await import(`${this.apiPath}/${mount.file}.js`) as { default: (files: Files) => Hono } + let { default: route } = await import(`${this.apiPath}/${mount.file}.js`) as { default: (files: Files, apiRoot: Hono) => Hono } - this.root.route(mount.to, route(this.files)) + this.root.route(mount.to, route(this.files, this.apiRoot)) } } } @@ -62,7 +64,7 @@ export default class APIRouter { private async mount(definition: APIDefinition) { console.log(`mounting APIDefinition ${definition.name}`) - let def = new APIVersion(definition, this.files) + let def = new APIVersion(definition, this.files, this.root) await def.load() this.root.route( diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 1e313a3..992fd76 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -20,9 +20,9 @@ export let primaryApi = new Hono<{ primaryApi.all("*", getAccount) -export default function (files: Files) { +export default function (files: Files, apiRoot: Hono) { primaryApi.get("/file/:fileId", async (ctx) => - primaryApi.fetch( + apiRoot.fetch( new Request( (new URL( `/api/v1/file/${ctx.req.param("fileId")}`, ctx.req.raw.url)).href, From 4add8a5a8a9f751da92f09cb30a883cf32edabb2 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:48:28 -0700 Subject: [PATCH 114/173] Fix 500 error which should be 404 --- src/server/routes/api/v1/file/individual.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/routes/api/v1/file/individual.ts b/src/server/routes/api/v1/file/individual.ts index 7429974..3a00086 100644 --- a/src/server/routes/api/v1/file/individual.ts +++ b/src/server/routes/api/v1/file/individual.ts @@ -31,11 +31,12 @@ export default function(files: Files) { ctx.header("Accept-Ranges", "bytes") ctx.header("Access-Control-Allow-Origin", "*") ctx.header("Content-Security-Policy", "sandbox allow-scripts") - ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${encodeURI(file.filename.replaceAll("\n","\\n"))}"`) - ctx.header("ETag", file.md5) - //if (file.lastModified) ctx.header("Last-Modified", new Date(file.lastModified).toTimeString()) if (file) { + ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${encodeURI(file.filename.replaceAll("\n","\\n"))}"`) + ctx.header("ETag", file.md5) + //if (file.lastModified) ctx.header("Last-Modified", new Date(file.lastModified).toTimeString()) + if (file.visibility == "private") { if (acc?.id != file.owner) { return ServeError(ctx, 403, "you do not own this file") From a62f1cfbc37ffb0d2a3735bbeebc73957c79dbf8 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Mar 2024 21:54:55 -0700 Subject: [PATCH 115/173] /api/v1/file --- src/server/lib/files.ts | 4 +- src/server/routes/api/v0/primaryApi.ts | 139 ++---------------- src/server/routes/api/v1/file/index.ts | 150 +++++++++++++++++++- src/server/routes/api/v1/file/individual.ts | 2 + src/svelte/elem/UploadWindow.svelte | 30 +--- 5 files changed, 169 insertions(+), 156 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 207a00f..0e97811 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -139,8 +139,10 @@ export class ReadStream extends Readable { if (useRanges) this.ranges.scan_msg_begin = Math.floor(this.ranges.scan_files_begin / 10), - this.ranges.scan_msg_end = Math.ceil(this.ranges.scan_files_end / 10)-1, + this.ranges.scan_msg_end = Math.ceil(this.ranges.scan_files_end / 10), this.msgIdx = this.ranges.scan_msg_begin + + console.log(this.ranges) } async _read() {/* diff --git a/src/server/routes/api/v0/primaryApi.ts b/src/server/routes/api/v0/primaryApi.ts index 992fd76..204d420 100644 --- a/src/server/routes/api/v0/primaryApi.ts +++ b/src/server/routes/api/v0/primaryApi.ts @@ -32,133 +32,18 @@ export default function (files: Files, apiRoot: Hono) { ) ) - primaryApi.post( - "/upload", - requiresPermissions("upload"), - (ctx) => { return new Promise((resolve,reject) => { - ctx.env.incoming.removeAllListeners("data") // remove hono's buffering - - let errEscalated = false - function escalate(err:Error) { - if (errEscalated) return - errEscalated = true - - if ("httpCode" in err) - ctx.status(err.httpCode as StatusCode) - else if (err instanceof WebError) - ctx.status(err.statusCode as StatusCode) - else ctx.status(400) - resolve(ctx.body(err.message)) - } - - let acc = ctx.get("account") as Accounts.Account | undefined - - if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) - return resolve(ctx.body("must be multipart/form-data", 400)) - - if (!ctx.req.raw.body) - return resolve(ctx.body("body must be supplied", 400)) - - let file = files.createWriteStream(acc?.id) - let parser = formidable({ - maxFieldsSize: 65536, - maxFileSize: files.config.maxDiscordFileSize*files.config.maxDiscordFiles, - maxFiles: 1 - }) - - parser.onPart = function(part) { - if (!part.originalFilename || !part.mimetype) { - parser._handlePart(part) - return - } - // lol - if (part.name == "file") { - file.setName(part.originalFilename || "") - file.setType(part.mimetype || "") - - file.on("drain", () => ctx.env.incoming.resume()) - file.on("error", (err) => part.emit("error", err)) - - part.on("data", (data: Buffer) => { - if (!file.write(data)) - ctx.env.incoming.pause() - }) - part.on("end", () => file.end()) - } - } - - parser.on("field", (k,v) => { - if (k == "uploadId") - file.setUploadId(v) - }) - - parser.parse(ctx.env.incoming).catch(e => console.error(e)) - - parser.on('error', (err) => { - escalate(err) - if (!file.destroyed) file.destroy(err) - }) - file.on("error", escalate) - - file.on("finish", async () => { - if (!ctx.env.incoming.readableEnded) await new Promise(res => ctx.env.incoming.once("end", res)) - file.commit() - .then(id => resolve(ctx.body(id!))) - .catch(escalate) - }) - - })} - ) - - primaryApi.post( - "/clone", - requiresPermissions("upload"), - ctx => new Promise(async resolve => { - - let acc = ctx.get("account") as Accounts.Account - - let requestParameters - try { - requestParameters = await ctx.req.json() - } catch (err: any) {return ctx.text(err.toString(), 400)} - - let res = await fetch(requestParameters.url, { - headers: { - "user-agent": `monofile ${pkg.version} (+https://${ctx.req.header("Host")})` - } - }) - if (!res.ok) return ctx.text(`got ${res.status} ${res.statusText}`, 500) - if (!res.body) return ctx.text(`Internal Server Error`, 500) - if ( - res.headers.has("Content-Length") - && !Number.isNaN(parseInt(res.headers.get("Content-Length")!,10)) - && parseInt(res.headers.get("Content-Length")!,10) > files.config.maxDiscordFileSize*files.config.maxDiscordFiles - ) - return ctx.text(`file reports to be too large`, 413) - - let file = files.createWriteStream(acc?.id) - - Readable.fromWeb(res.body as StreamWebReadable) - .pipe(file) - .on("error", (err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode as StatusCode : 500))) - - file - .setName( - requestParameters.url.split("/")[ - requestParameters.url.split("/").length - 1 - ] || "generic" - ) - - if (res.headers.has("content-type")) file.setType(res.headers.get("content-type")!) - if (requestParameters.uploadId) file.setUploadId(requestParameters.uploadId) - - file.once("finish", () => { - file.commit() - .then(id => resolve(ctx.text(id!))) - .catch((err) => resolve(ctx.text(err.message, err instanceof WebError ? err.statusCode as StatusCode : 500))) - }) - - }) + primaryApi.post("/upload", async (ctx) => + apiRoot.fetch( + new Request( + (new URL( + `/api/v1/file`, ctx.req.raw.url)).href, + { + ...ctx.req.raw, + method: "PUT" + } + ), + ctx.env + ) ) return primaryApi diff --git a/src/server/routes/api/v1/file/index.ts b/src/server/routes/api/v1/file/index.ts index d43c846..3a63af8 100644 --- a/src/server/routes/api/v1/file/index.ts +++ b/src/server/routes/api/v1/file/index.ts @@ -1,13 +1,153 @@ -import { Hono } from "hono"; -import Files from "../../../../lib/files.js"; -import { getAccount } from "../../../../lib/middleware.js"; +import { Hono } from "hono" +import * as Accounts from "../../../../lib/accounts.js" +import * as auth from "../../../../lib/auth.js" +import RangeParser, { type Range } from "range-parser" +import ServeError from "../../../../lib/errors.js" +import Files, { WebError } from "../../../../lib/files.js" +import { getAccount, requiresPermissions } from "../../../../lib/middleware.js" +import {Readable} from "node:stream" +import type {ReadableStream as StreamWebReadable} from "node:stream/web" +import formidable from "formidable" +import { HttpBindings } from "@hono/node-server" +import pkg from "../../../../../../package.json" assert {type: "json"} +import { type StatusCode } from "hono/utils/http-status" -const router = new Hono() +const router = new Hono<{ + Variables: { + account: Accounts.Account + }, + Bindings: HttpBindings +}>() router.all("*", getAccount) export default function(files: Files) { - + router.on( + ["PUT", "POST"], + "/", + requiresPermissions("upload"), + (ctx) => { return new Promise((resolve,reject) => { + ctx.env.incoming.removeAllListeners("data") // remove hono's buffering + + let errEscalated = false + function escalate(err:Error) { + if (errEscalated) return + errEscalated = true + console.error(err) + + if ("httpCode" in err) + ctx.status(err.httpCode as StatusCode) + else if (err instanceof WebError) + ctx.status(err.statusCode as StatusCode) + else ctx.status(400) + resolve(ctx.body(err.message)) + } + + let acc = ctx.get("account") as Accounts.Account | undefined + + if (!ctx.req.header("Content-Type")?.startsWith("multipart/form-data")) + return resolve(ctx.body("must be multipart/form-data", 400)) + + if (!ctx.req.raw.body) + return resolve(ctx.body("body must be supplied", 400)) + + let file = files.createWriteStream(acc?.id) + let parser = formidable({ + maxFieldsSize: 65536, + maxFileSize: files.config.maxDiscordFileSize*files.config.maxDiscordFiles, + maxFiles: 1 + }) + + let acceptNewData = true + + parser.onPart = function(part) { + if (!part.originalFilename || !part.mimetype) { + parser._handlePart(part) + return + } + // lol + if (part.name == "file") { + if (!acceptNewData || file.writableEnded) + return part.emit("error", new WebError(400, "cannot set file after previously setting up another upload")) + acceptNewData = false + file.setName(part.originalFilename || "") + file.setType(part.mimetype || "") + + file.on("drain", () => ctx.env.incoming.resume()) + file.on("error", (err) => part.emit("error", err)) + + part.on("data", (data: Buffer) => { + if (!file.write(data)) + ctx.env.incoming.pause() + }) + part.on("end", () => file.end()) + } + } + + parser.on("field", async (k,v) => { + if (k == "uploadId") { + if (files.files[v] && ctx.req.method == "POST") + return file.destroy(new WebError(409, "file already exists")) + file.setUploadId(v) + // I'M GONNA KILL MYSELF!!!! + } else if (k == "file") { + if (!acceptNewData || file.writableEnded) + return file.destroy(new WebError(400, "cannot set file after previously setting up another upload")) + acceptNewData = false + + let res = await fetch(v, { + headers: { + "user-agent": `monofile ${pkg.version} (+https://${ctx.req.header("Host")})` + } + }).catch(escalate) + + if (!res) return + + if (!file + .setName( + res.headers.get("Content-Disposition") + ?.match(/filename="(.*)"/)?.[1] + || v.split("/")[ + v.split("/").length - 1 + ] || "generic" + )) return + + if (res.headers.has("Content-Type")) + if (!file.setType(res.headers.get("Content-Type")!)) + return + + if (!res.ok) return file.destroy(new WebError(500, `got ${res.status} ${res.statusText}`)) + if (!res.body) return file.destroy(new WebError(500, `Internal Server Error`)) + if ( + res.headers.has("Content-Length") + && !Number.isNaN(parseInt(res.headers.get("Content-Length")!,10)) + && parseInt(res.headers.get("Content-Length")!,10) > files.config.maxDiscordFileSize*files.config.maxDiscordFiles + ) + return file.destroy(new WebError(413, `file reports to be too large`)) + + Readable.fromWeb(res.body as StreamWebReadable) + .pipe(file) + } + }) + + parser.parse(ctx.env.incoming) + .catch(e => console.error(e)) + + parser.on('error', (err) => { + escalate(err) + if (!file.destroyed) file.destroy(err) + }) + file.on("error", escalate) + + file.on("finish", async () => { + if (!ctx.env.incoming.readableEnded) await new Promise(res => ctx.env.incoming.once("end", res)) + file.commit() + .then(id => resolve(ctx.body(id!))) + .catch(escalate) + }) + + })} + ) return router } diff --git a/src/server/routes/api/v1/file/individual.ts b/src/server/routes/api/v1/file/individual.ts index 3a00086..82dd6b5 100644 --- a/src/server/routes/api/v1/file/individual.ts +++ b/src/server/routes/api/v1/file/individual.ts @@ -106,5 +106,7 @@ export default function(files: Files) { } }) + router.post("/:id") + return router } diff --git a/src/svelte/elem/UploadWindow.svelte b/src/svelte/elem/UploadWindow.svelte index 8e5c332..c41b3c8 100644 --- a/src/svelte/elem/UploadWindow.svelte +++ b/src/svelte/elem/UploadWindow.svelte @@ -113,30 +113,14 @@ // quick patch-in to allow for a switch to have everything upload sequentially // switch will have a proper menu option later, for now i'm lazy so it's just gonna be a Secret let hdl = () => { - switch (v.type) { - case "upload": - let fd = new FormData() - if (v.params.uploadId) fd.append("uploadId", v.params.uploadId) - fd.append("file", v.file) + let fd = new FormData() + if (v.params.uploadId) fd.append("uploadId", v.params.uploadId) + fd.append("file", v.type == "clone" ? v.url : v.file) - return handle_fetch_promise(x,fetch("/upload",{ - method: "POST", - body: fd - })) - break - case "clone": - return handle_fetch_promise( - x, - fetch("/clone", { - method: "POST", - body: JSON.stringify({ - url: v.url, - ...v.params, - }), - }) - ) - break - } + return handle_fetch_promise(x,fetch("/api/v1/file",{ + method: "PUT", + body: fd + })) } if (sequential) await hdl() From 8d6c6a5d7c1b4529a65517e2d8cd4621ff958a14 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Mar 2024 22:58:09 -0700 Subject: [PATCH 116/173] IPPEE --- src/server/lib/files.ts | 2 +- src/server/routes/api/v1/file/index.ts | 18 ++++++++++-------- src/server/routes/api/v1/file/individual.ts | 20 ++++++++++++++++++-- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 0e97811..8edd2ac 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -381,7 +381,7 @@ export class UploadStream extends Writable { async _destroy(error: Error | null, callback: (err?: Error|null) => void) { this.error = error || undefined await this.abort() - callback() + callback(error) } /** diff --git a/src/server/routes/api/v1/file/index.ts b/src/server/routes/api/v1/file/index.ts index 3a63af8..5a2ee98 100644 --- a/src/server/routes/api/v1/file/index.ts +++ b/src/server/routes/api/v1/file/index.ts @@ -52,6 +52,16 @@ export default function(files: Files) { return resolve(ctx.body("body must be supplied", 400)) let file = files.createWriteStream(acc?.id) + + file + .on("error", escalate) + .on("finish", async () => { + if (!ctx.env.incoming.readableEnded) await new Promise(res => ctx.env.incoming.once("end", res)) + file.commit() + .then(id => resolve(ctx.body(id!))) + .catch(escalate) + }) + let parser = formidable({ maxFieldsSize: 65536, maxFileSize: files.config.maxDiscordFileSize*files.config.maxDiscordFiles, @@ -137,14 +147,6 @@ export default function(files: Files) { escalate(err) if (!file.destroyed) file.destroy(err) }) - file.on("error", escalate) - - file.on("finish", async () => { - if (!ctx.env.incoming.readableEnded) await new Promise(res => ctx.env.incoming.once("end", res)) - file.commit() - .then(id => resolve(ctx.body(id!))) - .catch(escalate) - }) })} ) diff --git a/src/server/routes/api/v1/file/individual.ts b/src/server/routes/api/v1/file/individual.ts index 82dd6b5..68c7a31 100644 --- a/src/server/routes/api/v1/file/individual.ts +++ b/src/server/routes/api/v1/file/individual.ts @@ -20,7 +20,7 @@ const router = new Hono<{ }>() router.all("*", getAccount) -export default function(files: Files) { +export default function(files: Files, apiRoot: Hono) { router.get("/:id", async (ctx) => { const fileId = ctx.req.param("id") @@ -106,7 +106,23 @@ export default function(files: Files) { } }) - router.post("/:id") + router.on(["PUT", "POST"], "/:id", async (ctx) => { + ctx.env.incoming.push( + `--${ctx.req.header("content-type")?.match(/boundary=(\S+)/)?.[1]}\r\n` + + `Content-Disposition: form-data; name="uploadId"\r\n\r\n` + + ctx.req.param("id") + + "\r\n" + ) + + return apiRoot.fetch( + new Request( + (new URL( + `/api/v1/file`, ctx.req.raw.url)).href, + ctx.req.raw + ), + ctx.env + ) + }) return router } From dbe305953e00b41541ac770b66e1f6756da7019b Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Tue, 26 Mar 2024 23:59:46 -0700 Subject: [PATCH 117/173] terrifying --- src/server/routes/api/v1/file/individual.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/server/routes/api/v1/file/individual.ts b/src/server/routes/api/v1/file/individual.ts index 68c7a31..cbdd677 100644 --- a/src/server/routes/api/v1/file/individual.ts +++ b/src/server/routes/api/v1/file/individual.ts @@ -35,7 +35,16 @@ export default function(files: Files, apiRoot: Hono) { if (file) { ctx.header("Content-Disposition", `${ctx.req.query("attachment") == "1" ? "attachment" : "inline"}; filename="${encodeURI(file.filename.replaceAll("\n","\\n"))}"`) ctx.header("ETag", file.md5) - //if (file.lastModified) ctx.header("Last-Modified", new Date(file.lastModified).toTimeString()) + if (file.lastModified) { + let lm = new Date(file.lastModified) + // TERRIFYING + ctx.header("Last-Modified", + `${['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][lm.getUTCDay()]}, ${lm.getUTCDay()} ` + + `${['Jan','Feb','Mar','Apr','May','Jun',"Jul",'Aug','Sep','Oct','Nov','Dec'][lm.getUTCMonth()]}` + + ` ${lm.getUTCFullYear()} ${lm.getUTCHours().toString().padStart(2,"0")}` + + `:${lm.getUTCMinutes().toString().padStart(2,"0")}:${lm.getUTCSeconds().toString().padStart(2,"0")} GMT` + ) + } if (file.visibility == "private") { if (acc?.id != file.owner) { From 010a2bf0c1839006827e69d332c4afdaaa1df912 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:18:49 -0700 Subject: [PATCH 118/173] AAAAAAAAAAAAAAAAAAA --- src/server/routes/api/v1/file/individual.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/routes/api/v1/file/individual.ts b/src/server/routes/api/v1/file/individual.ts index cbdd677..05621af 100644 --- a/src/server/routes/api/v1/file/individual.ts +++ b/src/server/routes/api/v1/file/individual.ts @@ -39,7 +39,7 @@ export default function(files: Files, apiRoot: Hono) { let lm = new Date(file.lastModified) // TERRIFYING ctx.header("Last-Modified", - `${['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][lm.getUTCDay()]}, ${lm.getUTCDay()} ` + `${['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][lm.getUTCDay()]}, ${lm.getUTCDate()} ` + `${['Jan','Feb','Mar','Apr','May','Jun',"Jul",'Aug','Sep','Oct','Nov','Dec'][lm.getUTCMonth()]}` + ` ${lm.getUTCFullYear()} ${lm.getUTCHours().toString().padStart(2,"0")}` + `:${lm.getUTCMinutes().toString().padStart(2,"0")}:${lm.getUTCSeconds().toString().padStart(2,"0")} GMT` From 77cfa27615814d6a5d5d774e74b044d899dda238 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 27 Mar 2024 11:52:42 -0700 Subject: [PATCH 119/173] real quick; i'll port more stuff over later... --- src/server/lib/errors.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/lib/errors.ts b/src/server/lib/errors.ts index f2d3615..4069982 100644 --- a/src/server/lib/errors.ts +++ b/src/server/lib/errors.ts @@ -24,13 +24,13 @@ export default async function ServeError( // serve error - return ctx.html( + return ctx.req.header("accept").includes("text/html") ? ctx.html( errorPage .replaceAll("$code", code.toString()) .replaceAll("$text", reason), - code as StatusCode, + code as StatusCode/*, { "x-backup-status-message": reason, // glitch default nginx configuration - } - ) + }*/ + ) : ctx.text(reason, code as StatusCode) } From f441e06a21a6f6afb96befe8eb8b3aca488475fb Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Wed, 27 Mar 2024 21:47:33 -0700 Subject: [PATCH 120/173] Port client to TypeScript Co-authored-by: Jack W. --- package-lock.json | 264 +++++++++++++++++- package.json | 3 + src/index.html | 2 +- src/server/lib/errors.ts | 2 +- src/style/app/pulldown/accounts.scss | 40 ++- src/style/app/pulldown/files.scss | 2 +- src/style/app/pulldown/help.scss | 2 +- src/style/app/uploader/add_new_files.scss | 8 +- src/style/app/uploads.scss | 2 +- src/svelte/App.svelte | 14 +- src/svelte/elem/PulldownManager.svelte | 8 +- src/svelte/elem/Topbar.svelte | 13 +- src/svelte/elem/UploadWindow.svelte | 93 +++--- src/svelte/elem/prompts/OptionPicker.svelte | 38 +-- .../elem/prompts/{account.js => account.ts} | 21 +- .../elem/prompts/{admin.js => admin.ts} | 15 +- .../elem/prompts/{uploads.js => uploads.ts} | 16 +- src/svelte/elem/pulldowns/Accounts.svelte | 124 ++++---- src/svelte/elem/pulldowns/Files.svelte | 77 +++-- src/svelte/elem/pulldowns/Pulldown.svelte | 6 +- src/svelte/elem/{stores.mjs => stores.ts} | 15 +- src/svelte/elem/transition/_void.js | 20 -- src/svelte/elem/transition/_void.ts | 23 ++ src/svelte/elem/transition/padding_scaleY.js | 18 -- src/svelte/elem/transition/padding_scaleY.ts | 21 ++ .../elem/uploader/AttachmentZone.svelte | 77 ++--- src/svelte/global.d.ts | 1 + src/svelte/{index.js => index.ts} | 0 src/svelte/tsconfig.json | 18 ++ vite.config.mjs => vite.config.ts | 5 +- 30 files changed, 619 insertions(+), 329 deletions(-) rename src/svelte/elem/prompts/{account.js => account.ts} (94%) rename src/svelte/elem/prompts/{admin.js => admin.ts} (94%) rename src/svelte/elem/prompts/{uploads.js => uploads.ts} (93%) rename src/svelte/elem/{stores.mjs => stores.ts} (56%) delete mode 100644 src/svelte/elem/transition/_void.js create mode 100644 src/svelte/elem/transition/_void.ts delete mode 100644 src/svelte/elem/transition/padding_scaleY.js create mode 100644 src/svelte/elem/transition/padding_scaleY.ts create mode 100644 src/svelte/global.d.ts rename src/svelte/{index.js => index.ts} (100%) create mode 100644 src/svelte/tsconfig.json rename vite.config.mjs => vite.config.ts (81%) diff --git a/package-lock.json b/package-lock.json index 5978314..c882d2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^2.4.6", + "@tsconfig/svelte": "^4.0.1", "@types/bytes": "^3.1.1", "@types/cookie-parser": "^1.4.3", "@types/formidable": "^3.4.5", @@ -37,10 +38,12 @@ "discord-api-types": "^0.37.61", "sass": "^1.57.1", "svelte": "^3.55.1", + "svelte-preprocess": "^5.1.3", + "tslib": "^2.6.2", "vite": "^4.5.0" }, "engines": { - "node": ">=v16.11" + "node": ">=v21" } }, "node_modules/@esbuild/linux-x64": { @@ -158,6 +161,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/@tsconfig/svelte": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-4.0.1.tgz", + "integrity": "sha512-B+XlGpmuAQzJqDoBATNCvEPqQg0HkO7S8pM14QDI5NsmtymzRexQ1N+nX2H6RTtFbuFgaZD4I8AAi8voGg0GLg==", + "dev": true + }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -246,6 +255,12 @@ "@types/node": "*" } }, + "node_modules/@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "dev": true + }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -319,6 +334,12 @@ "form-data": "^4.0.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -351,6 +372,16 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -363,6 +394,15 @@ "node": ">=8" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -445,6 +485,12 @@ "node": ">=16" } }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", @@ -566,6 +612,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", @@ -602,6 +657,12 @@ "node": ">= 0.8" } }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -816,10 +877,19 @@ "node": ">= 0.6" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-intrinsic": { "version": "1.1.3", @@ -834,6 +904,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -846,6 +936,12 @@ "node": ">= 6" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -916,6 +1012,16 @@ "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "dev": true }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1048,6 +1154,27 @@ "node": ">= 0.6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", @@ -1207,6 +1334,15 @@ "node": ">= 0.8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -1342,6 +1478,18 @@ "node": ">=8.10.0" } }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/rollup": { "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", @@ -1382,6 +1530,18 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, "node_modules/sass": { "version": "1.57.1", "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", @@ -1459,6 +1619,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -1497,6 +1672,18 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/svelte": { "version": "3.55.1", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", @@ -1518,6 +1705,69 @@ "svelte": "^3.19.0 || ^4.0.0" } }, + "node_modules/svelte-preprocess": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", + "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 16.0.0", + "pnpm": "^8.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1538,6 +1788,12 @@ "node": ">=0.6" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", diff --git a/package.json b/package.json index b65f36d..15f91f9 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^2.4.6", + "@tsconfig/svelte": "^4.0.1", "@types/bytes": "^3.1.1", "@types/cookie-parser": "^1.4.3", "@types/formidable": "^3.4.5", @@ -46,6 +47,8 @@ "discord-api-types": "^0.37.61", "sass": "^1.57.1", "svelte": "^3.55.1", + "svelte-preprocess": "^5.1.3", + "tslib": "^2.6.2", "vite": "^4.5.0" } } diff --git a/src/index.html b/src/index.html index fab53a0..c3d2319 100644 --- a/src/index.html +++ b/src/index.html @@ -22,7 +22,7 @@ content="width=device-width, initial-scale=1.0, user-scalable=0" /> - + monofile diff --git a/src/server/lib/errors.ts b/src/server/lib/errors.ts index 4069982..4f40d8c 100644 --- a/src/server/lib/errors.ts +++ b/src/server/lib/errors.ts @@ -24,7 +24,7 @@ export default async function ServeError( // serve error - return ctx.req.header("accept").includes("text/html") ? ctx.html( + return ctx.req.header("accept")?.includes("text/html") ? ctx.html( errorPage .replaceAll("$code", code.toString()) .replaceAll("$text", reason), diff --git a/src/style/app/pulldown/accounts.scss b/src/style/app/pulldown/accounts.scss index b6fe02b..2961dbf 100644 --- a/src/style/app/pulldown/accounts.scss +++ b/src/style/app/pulldown/accounts.scss @@ -1,4 +1,4 @@ -.pulldown_display[name=accounts] { +.pulldown_display[data-name=accounts] { .notLoggedIn { .container_div { position:absolute; @@ -184,4 +184,42 @@ } } } +} + +@keyframes bounce { + 0% { + top: 0.25em; + }/* + 25% { + top: 0.25em; + } + 75% { + top: -0.25em; + }*/ + 100% { + top: -0.25em; + } +} + +.loader { + i { + font-style: normal; + position: relative; + + animation-name: bounce; + animation-duration: 500ms; + animation-iteration-count: infinite; + animation-direction: alternate; + top:0.25em; + + &:nth-of-type(1) { + animation-delay: 0ms; + } + &:nth-of-type(2) { + animation-delay: 125ms; + } + &:nth-of-type(3) { + animation-delay: 250ms; + } + } } \ No newline at end of file diff --git a/src/style/app/pulldown/files.scss b/src/style/app/pulldown/files.scss index 3037156..8c68557 100644 --- a/src/style/app/pulldown/files.scss +++ b/src/style/app/pulldown/files.scss @@ -1,4 +1,4 @@ -.pulldown_display[name=files] { +.pulldown_display[data-name=files] { .notLoggedIn { position:absolute; top:50%; diff --git a/src/style/app/pulldown/help.scss b/src/style/app/pulldown/help.scss index d9effa2..9d59cca 100644 --- a/src/style/app/pulldown/help.scss +++ b/src/style/app/pulldown/help.scss @@ -1,4 +1,4 @@ -.pulldown_display[name=help] { +.pulldown_display[data-name=help] { overflow-y:auto; diff --git a/src/style/app/uploader/add_new_files.scss b/src/style/app/uploader/add_new_files.scss index 598bcbe..5e9db3a 100644 --- a/src/style/app/uploader/add_new_files.scss +++ b/src/style/app/uploader/add_new_files.scss @@ -13,7 +13,7 @@ span { position:relative; - &._add_files_txt { + &.add_files_txt { font-size:16px; top:-4px; left:10px; @@ -29,7 +29,7 @@ @media screen and (max-width:500px) { font-size: 40px; - span._add_files_txt { + span.add_files_txt { font-size:20px; top:-6px; left:10px; @@ -45,7 +45,7 @@ flex-direction:row; column-gap:10px; - button, input[type=text] { + button, input[type=text], input[type=submit] { background-color:#333333; color:#DDDDDD; border:none; @@ -63,7 +63,7 @@ } } - button { + button, input[type=submit] { cursor:pointer; &:hover { diff --git a/src/style/app/uploads.scss b/src/style/app/uploads.scss index 9e8827a..ee53f35 100644 --- a/src/style/app/uploads.scss +++ b/src/style/app/uploads.scss @@ -50,7 +50,7 @@ overflow:auto; } - button { + button, input[type=submit] { cursor:pointer; background-color:#393939; color:#DDDDDD; diff --git a/src/svelte/App.svelte b/src/svelte/App.svelte index 0f63334..c864eb4 100644 --- a/src/svelte/App.svelte +++ b/src/svelte/App.svelte @@ -1,19 +1,13 @@ - -

@@ -23,7 +20,7 @@ - +
- {#if ($serverStats.accounts || {}).requiredForUpload ? !!$account.username : true} + {#if $serverStats?.accounts?.requiredForUpload ? !!$account?.username : true} Hosting {$serverStats.files || "•••"}{$serverStats?.files ?? "•••"} files — Maximum filesize is { - $serverStats.maxDiscordFiles + $serverStats?.maxDiscordFiles ? bytes($serverStats.maxDiscordFileSize * $serverStats.maxDiscordFiles) : "•••" } diff --git a/src/svelte/elem/prompts/OptionPicker.svelte b/src/svelte/elem/prompts/OptionPicker.svelte index 68cef38..bf45376 100644 --- a/src/svelte/elem/prompts/OptionPicker.svelte +++ b/src/svelte/elem/prompts/OptionPicker.svelte @@ -1,28 +1,30 @@ - @@ -46,9 +48,9 @@
{#each activeModal.modal as option (option.id)} - {#if option.inputSettings} + {#if "inputSettings" in option}
- {option.id} + {option.id.toString()} @@ -60,8 +62,8 @@ {/if}
{:else} - {/if} diff --git a/src/svelte/elem/prompts/account.js b/src/svelte/elem/prompts/account.ts similarity index 94% rename from src/svelte/elem/prompts/account.js rename to src/svelte/elem/prompts/account.ts index a93ee15..dadccae 100644 --- a/src/svelte/elem/prompts/account.js +++ b/src/svelte/elem/prompts/account.ts @@ -1,7 +1,8 @@ -import { fetchAccountData, account, refreshNeeded } from "../stores.mjs" +import { fetchAccountData, account, refreshNeeded } from "../stores" import { get } from "svelte/store"; +import type OptionPicker from "./OptionPicker.svelte"; -export function deleteAccount(optPicker) { +export function deleteAccount(optPicker: OptionPicker) { optPicker.picker("What should we do with your files?",[ { name: "Delete my files", @@ -56,7 +57,7 @@ export function deleteAccount(optPicker) { }) } -export function userChange(optPicker) { +export function userChange(optPicker: OptionPicker) { optPicker.picker("Change username",[ { name: "New username", @@ -86,7 +87,7 @@ export function userChange(optPicker) { }) } -export function forgotPassword(optPicker) { +export function forgotPassword(optPicker: OptionPicker) { optPicker.picker("Forgot your password?",[ { name: "Username", @@ -115,7 +116,7 @@ export function forgotPassword(optPicker) { }) } -export function emailPotentialRemove(optPicker) { +export function emailPotentialRemove(optPicker: OptionPicker) { optPicker.picker("What would you like to do?",[ { name: "Set a new email", @@ -148,7 +149,7 @@ export function emailPotentialRemove(optPicker) { }) } -export function emailChange(optPicker) { +export function emailChange(optPicker: OptionPicker) { optPicker.picker("Change email",[ { name: "New email", @@ -177,7 +178,7 @@ export function emailChange(optPicker) { }) } -export function pwdChng(optPicker) { +export function pwdChng(optPicker: OptionPicker) { optPicker.picker("Change password",[ { name: "New password", @@ -209,7 +210,7 @@ export function pwdChng(optPicker) { }) } -export function customcss(optPicker) { +export function customcss(optPicker: OptionPicker) { optPicker.picker("Set custom CSS",[ { name: "Enter a file ID", @@ -250,7 +251,7 @@ export function customcss(optPicker) { } -export function embedColor(optPicker) { +export function embedColor(optPicker: OptionPicker) { optPicker.picker("Set embed color",[ { name: "FFFFFF", @@ -290,7 +291,7 @@ export function embedColor(optPicker) { } -export function embedSize(optPicker) { +export function embedSize(optPicker: OptionPicker) { optPicker.picker("Set embed image size",[ { name: "Large", diff --git a/src/svelte/elem/prompts/admin.js b/src/svelte/elem/prompts/admin.ts similarity index 94% rename from src/svelte/elem/prompts/admin.js rename to src/svelte/elem/prompts/admin.ts index 2562a4b..3b71701 100644 --- a/src/svelte/elem/prompts/admin.js +++ b/src/svelte/elem/prompts/admin.ts @@ -1,7 +1,8 @@ -import { fetchAccountData, fetchFilePointers, account } from "../stores.mjs" +import { fetchAccountData, fetchFilePointers, account } from "../stores" import { get } from "svelte/store"; +import type OptionPicker from "./OptionPicker.svelte"; -export function pwdReset(optPicker) { +export function pwdReset(optPicker: OptionPicker) { optPicker.picker("Reset password",[ { name: "Target user", @@ -39,7 +40,7 @@ export function pwdReset(optPicker) { }) } -export function chgOwner(optPicker) { +export function chgOwner(optPicker: OptionPicker) { optPicker.picker("Transfer file ownership",[ { name: "File ID", @@ -75,7 +76,7 @@ export function chgOwner(optPicker) { }) } -export function chgId(optPicker) { +export function chgId(optPicker: OptionPicker) { optPicker.picker("Change file ID",[ { name: "Target file", @@ -111,7 +112,7 @@ export function chgId(optPicker) { }) } -export function delFile(optPicker) { +export function delFile(optPicker: OptionPicker) { optPicker.picker("Delete file",[ { name: "File ID", @@ -140,7 +141,7 @@ export function delFile(optPicker) { }) } -export function elevateUser(optPicker) { +export function elevateUser(optPicker: OptionPicker) { optPicker.picker("Elevate user",[ { name: "Username", @@ -171,7 +172,7 @@ export function elevateUser(optPicker) { // im really lazy so i just stole this from account.js -export function deleteAccount(optPicker) { +export function deleteAccount(optPicker: OptionPicker) { optPicker.picker("What should we do with the target account's files?",[ { name: "Delete files", diff --git a/src/svelte/elem/prompts/uploads.js b/src/svelte/elem/prompts/uploads.ts similarity index 93% rename from src/svelte/elem/prompts/uploads.js rename to src/svelte/elem/prompts/uploads.ts index a9fae01..6fca833 100644 --- a/src/svelte/elem/prompts/uploads.js +++ b/src/svelte/elem/prompts/uploads.ts @@ -1,5 +1,7 @@ -import { fetchAccountData, fetchFilePointers, account } from "../stores.mjs" +import { fetchAccountData, fetchFilePointers, account } from "../stores" import { get } from "svelte/store"; +import type OptionPicker from "./OptionPicker.svelte" +import type { FilePointer } from "../../../server/lib/files"; export let options = { FV: [ @@ -51,7 +53,7 @@ export let options = { ] } -export function dfv(optPicker) { +export function dfv(optPicker: OptionPicker) { optPicker.picker("Default file visibility",options.FV).then((exp) => { if (exp && exp.selected) { fetch(`/auth/dfv`,{method:"POST", body:JSON.stringify({ @@ -68,21 +70,21 @@ export function dfv(optPicker) { }) } -export function update_all_files(optPicker) { +export function update_all_files(optPicker: OptionPicker) { optPicker.picker("You sure?",[ { name: "Yeah", icon: "/static/assets/icons/update.svg", - description: `This will make all of your files ${get(account).defaultFileVisibility || "public"}`, + description: `This will make all of your files ${get(account)?.defaultFileVisibility || "public"}`, id: true } ]).then((exp) => { if (exp && exp.selected) { fetch(`/files/manage`,{method:"POST", body:JSON.stringify({ - target:get(account).files, + target:get(account)?.files, action: "changeFileVisibility", - value: get(account).defaultFileVisibility + value: get(account)?.defaultFileVisibility })}).then((response) => { if (response.status != 200) { @@ -95,7 +97,7 @@ export function update_all_files(optPicker) { }) } -export function fileOptions(optPicker,file) { +export function fileOptions(optPicker: OptionPicker, file: FilePointer & {id:string}) { optPicker.picker(file.filename,[ { name: file.tag ? "Remove tag" : "Tag file", diff --git a/src/svelte/elem/pulldowns/Accounts.svelte b/src/svelte/elem/pulldowns/Accounts.svelte index f5baede..5fd9121 100644 --- a/src/svelte/elem/pulldowns/Accounts.svelte +++ b/src/svelte/elem/pulldowns/Accounts.svelte @@ -1,26 +1,26 @@ -
diff --git a/src/svelte/elem/stores.mjs b/src/svelte/elem/stores.ts similarity index 56% rename from src/svelte/elem/stores.mjs rename to src/svelte/elem/stores.ts index d624dd7..7eb9589 100644 --- a/src/svelte/elem/stores.mjs +++ b/src/svelte/elem/stores.ts @@ -1,17 +1,22 @@ import { writable } from "svelte/store" +//import type Pulldown from "./pulldowns/Pulldown.svelte" +import type { SvelteComponent } from "svelte" +import type { Account } from "../../server/lib/accounts" +import type cfg from "../../../config.json" +import type { FilePointer } from "../../server/lib/files" export let refreshNeeded = writable(false) -export let pulldownManager = writable(0) -export let account = writable({}) -export let serverStats = writable({}) -export let files = writable([]) +export let pulldownManager = writable() +export let account = writable() +export let serverStats = writable() +export let files = writable<(FilePointer & {id:string})[]>([]) export let fetchAccountData = function() { fetch("/auth/me").then(async (response) => { if (response.status == 200) { account.set(await response.json()) } else { - account.set({}) + account.set(undefined) } }).catch((err) => { console.error(err) }) } diff --git a/src/svelte/elem/transition/_void.js b/src/svelte/elem/transition/_void.js deleted file mode 100644 index c9bfd0d..0000000 --- a/src/svelte/elem/transition/_void.js +++ /dev/null @@ -1,20 +0,0 @@ -import { circIn, circOut } from "svelte/easing" - -export function _void(node, { duration, easingFunc, op, prop, rTarg }) { - let rect = node.getBoundingClientRect() - - return { - duration: duration||300, - css: t => { - let eased = (easingFunc || circIn)(t) - - return ` - white-space: nowrap; - ${prop||"height"}: ${(eased)*(rect[rTarg||prop||"height"])}px; - padding: 0px; - opacity:${eased}; - overflow: clip; - ` - } - } -} \ No newline at end of file diff --git a/src/svelte/elem/transition/_void.ts b/src/svelte/elem/transition/_void.ts new file mode 100644 index 0000000..4178d1e --- /dev/null +++ b/src/svelte/elem/transition/_void.ts @@ -0,0 +1,23 @@ +import { circIn, circOut } from "svelte/easing" + +export function _void( + node: HTMLElement, + options?: { duration?:number, easingFunc?: (a:number)=>number, prop?:string, rTarg?: "height"|"width"} +) { + const { duration = 300, easingFunc = circIn, prop, rTarg } = options ?? {} + let rect = node.getBoundingClientRect() + + return { + duration, + css: (t: number) => { + let eased = easingFunc(t) + return ` + white-space: nowrap; + ${prop||"height"}: ${(eased)*(rect[rTarg || (prop && prop in rect) ? prop as keyof Omit : "height"])}px; + padding: 0px; + opacity:${eased}; + overflow: clip; + ` + } + } +} \ No newline at end of file diff --git a/src/svelte/elem/transition/padding_scaleY.js b/src/svelte/elem/transition/padding_scaleY.js deleted file mode 100644 index c19a44b..0000000 --- a/src/svelte/elem/transition/padding_scaleY.js +++ /dev/null @@ -1,18 +0,0 @@ -import { circIn, circOut } from "svelte/easing" - -export function padding_scaleY(node, { duration, easingFunc, padY, padX, op }) { - let rect = node.getBoundingClientRect() - - return { - duration: duration||300, - css: t => { - let eased = (easingFunc || circOut)(t) - - return ` - height: ${eased*(rect.height-(padY||0))}px; - ${padX&&padY ? `padding: ${(eased)*(padY)}px ${(padX)}px;` : ""} - ${op ? `opacity: ${eased};` : ""} - ` - } - } -} \ No newline at end of file diff --git a/src/svelte/elem/transition/padding_scaleY.ts b/src/svelte/elem/transition/padding_scaleY.ts new file mode 100644 index 0000000..8c88c24 --- /dev/null +++ b/src/svelte/elem/transition/padding_scaleY.ts @@ -0,0 +1,21 @@ +import { circIn, circOut } from "svelte/easing" + +function padding_scaleY(node: HTMLElement, options?: { duration?: number, easingFunc?: (a: number) => number, padY?: number, padX?: number, op?: boolean }) { + const { duration = 300, easingFunc = circOut, padY, padX, op } = options ?? {} + let rect = node.getBoundingClientRect() + + return { + duration, + css: (t:number) => { + let eased = easingFunc(t) + + return ` + height: ${eased*(rect.height-(padY||0))}px; + ${padX&&padY ? `padding: ${(eased)*(padY)}px ${(padX)}px;` : ""} + ${op ? `opacity: ${eased};` : ""} + ` + } + } +} + +export {padding_scaleY} \ No newline at end of file diff --git a/src/svelte/elem/uploader/AttachmentZone.svelte b/src/svelte/elem/uploader/AttachmentZone.svelte index 7d70559..0a22b59 100644 --- a/src/svelte/elem/uploader/AttachmentZone.svelte +++ b/src/svelte/elem/uploader/AttachmentZone.svelte @@ -1,56 +1,35 @@ -